Refactor file carousel into React component hierarchy

- Create PostFiles top-level component managing file display state
- Add FileCarousel component for thumbnail navigation
- Add DisplayedFile component for content rendering
- Add FileDetails component for metadata display
- Update props_for_post_files helper to generate HTML content server-side
- Replace HTML/JS carousel with prerendered React components
- Maintain single file layout compatibility
- Add proper TypeScript interfaces and error handling
- Register components in application and server bundles

Components now handle:
- Multiple file carousel display above content
- File content switching via React state
- Server-side rendered HTML injection
- File details metadata display
- Responsive thumbnail grid with selection states
This commit is contained in:
Dylan Knutson
2025-08-09 00:31:07 +00:00
parent 5f5a54d68f
commit 36ceae80fe
18 changed files with 405 additions and 62 deletions

View File

@@ -0,0 +1,16 @@
# typed: true
# DO NOT EDIT MANUALLY
# This is an autogenerated file for dynamic methods in `Domain::Bluesky::Job::Base`.
# Please instead update this file by running `bin/tapioca dsl Domain::Bluesky::Job::Base`.
class Domain::Bluesky::Job::Base
sig { returns(ColorLogger) }
def logger; end
class << self
sig { returns(ColorLogger) }
def logger; end
end
end

View File

@@ -0,0 +1,27 @@
# typed: true
# DO NOT EDIT MANUALLY
# This is an autogenerated file for dynamic methods in `Domain::Bluesky::Job::ScanUserJob`.
# Please instead update this file by running `bin/tapioca dsl Domain::Bluesky::Job::ScanUserJob`.
class Domain::Bluesky::Job::ScanUserJob
sig { returns(ColorLogger) }
def logger; end
class << self
sig { returns(ColorLogger) }
def logger; end
sig do
params(
args: T::Hash[::Symbol, T.untyped],
block: T.nilable(T.proc.params(job: Domain::Bluesky::Job::ScanUserJob).void)
).returns(T.any(Domain::Bluesky::Job::ScanUserJob, FalseClass))
end
def perform_later(args, &block); end
sig { params(args: T::Hash[::Symbol, T.untyped]).returns(T.untyped) }
def perform_now(args); end
end
end

View File

@@ -0,0 +1,13 @@
# typed: strict
class DIDKit::Resolver
sig { params(handle: String).returns(T.nilable(DIDKit::DID)) }
def resolve_handle(handle)
end
end
class DIDKit::DID
sig { returns(String) }
def did
end
end