shelving 1.236.0 → 1.236.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/cache/APICache.d.ts +69 -6
- package/api/cache/APICache.js +61 -5
- package/api/cache/EndpointCache.d.ts +75 -7
- package/api/cache/EndpointCache.js +75 -7
- package/api/endpoint/Endpoint.d.ts +141 -25
- package/api/endpoint/Endpoint.js +55 -9
- package/api/endpoint/util.d.ts +28 -6
- package/api/provider/APIProvider.d.ts +58 -14
- package/api/provider/APIProvider.js +24 -2
- package/api/provider/CachedAPIProvider.d.ts +58 -5
- package/api/provider/CachedAPIProvider.js +58 -6
- package/api/provider/ClientAPIProvider.d.ts +80 -4
- package/api/provider/ClientAPIProvider.js +75 -4
- package/api/provider/DebugAPIProvider.d.ts +40 -1
- package/api/provider/DebugAPIProvider.js +40 -1
- package/api/provider/JSONAPIProvider.d.ts +18 -2
- package/api/provider/JSONAPIProvider.js +18 -2
- package/api/provider/LoggingAPIProvider.d.ts +25 -2
- package/api/provider/LoggingAPIProvider.js +25 -2
- package/api/provider/MockAPIProvider.d.ts +72 -1
- package/api/provider/MockAPIProvider.js +60 -4
- package/api/provider/MockEndpointAPIProvider.d.ts +9 -0
- package/api/provider/MockEndpointAPIProvider.js +9 -0
- package/api/provider/ThroughAPIProvider.d.ts +67 -1
- package/api/provider/ThroughAPIProvider.js +67 -1
- package/api/provider/ValidationAPIProvider.d.ts +32 -1
- package/api/provider/ValidationAPIProvider.js +32 -1
- package/api/provider/XMLAPIProvider.d.ts +18 -2
- package/api/provider/XMLAPIProvider.js +18 -2
- package/api/store/EndpointStore.d.ts +24 -1
- package/api/store/EndpointStore.js +24 -1
- package/bun/BunPostgreSQLProvider.d.ts +38 -0
- package/bun/BunPostgreSQLProvider.js +38 -2
- package/cloudflare/CloudflareD1Provider.d.ts +29 -2
- package/cloudflare/CloudflareD1Provider.js +29 -2
- package/cloudflare/CloudflareKVProvider.d.ts +115 -0
- package/cloudflare/CloudflareKVProvider.js +115 -0
- package/cloudflare/types.d.ts +41 -7
- package/db/cache/CollectionCache.d.ts +83 -7
- package/db/cache/CollectionCache.js +83 -7
- package/db/cache/DBCache.d.ts +93 -8
- package/db/cache/DBCache.js +85 -7
- package/db/collection/Collection.d.ts +103 -15
- package/db/collection/Collection.js +58 -6
- package/db/migrate/DBMigrator.d.ts +29 -1
- package/db/migrate/DBMigrator.js +20 -1
- package/db/migrate/PostgreSQLMigrator.d.ts +8 -1
- package/db/migrate/PostgreSQLMigrator.js +8 -1
- package/db/migrate/SQLMigrator.d.ts +63 -4
- package/db/migrate/SQLMigrator.js +51 -1
- package/db/migrate/SQLiteMigrator.d.ts +8 -1
- package/db/migrate/SQLiteMigrator.js +8 -1
- package/db/provider/CacheDBProvider.d.ts +135 -1
- package/db/provider/CacheDBProvider.js +135 -1
- package/db/provider/ChangesDBProvider.d.ts +84 -3
- package/db/provider/ChangesDBProvider.js +77 -2
- package/db/provider/DBProvider.d.ts +148 -1
- package/db/provider/DBProvider.js +51 -1
- package/db/provider/DebugDBProvider.d.ts +118 -1
- package/db/provider/DebugDBProvider.js +118 -1
- package/db/provider/MemoryDBProvider.d.ts +262 -7
- package/db/provider/MemoryDBProvider.js +262 -7
- package/db/provider/MockDBProvider.d.ts +113 -2
- package/db/provider/MockDBProvider.js +106 -1
- package/db/provider/PostgreSQLProvider.d.ts +34 -2
- package/db/provider/PostgreSQLProvider.js +34 -4
- package/db/provider/SQLProvider.d.ts +250 -14
- package/db/provider/SQLProvider.js +237 -13
- package/db/provider/SQLiteProvider.d.ts +41 -1
- package/db/provider/SQLiteProvider.js +41 -4
- package/db/provider/ThroughDBProvider.d.ts +156 -1
- package/db/provider/ThroughDBProvider.js +156 -1
- package/db/provider/ValidationDBProvider.d.ts +120 -1
- package/db/provider/ValidationDBProvider.js +120 -1
- package/db/store/ItemStore.d.ts +38 -2
- package/db/store/ItemStore.js +38 -2
- package/db/store/QueryStore.d.ts +64 -6
- package/db/store/QueryStore.js +64 -6
- package/error/BaseError.d.ts +27 -2
- package/error/BaseError.js +14 -0
- package/error/Errors.d.ts +12 -1
- package/error/Errors.js +12 -1
- package/error/NetworkError.d.ts +13 -1
- package/error/NetworkError.js +13 -1
- package/error/RequestError.d.ts +90 -7
- package/error/RequestError.js +90 -7
- package/error/RequiredError.d.ts +11 -1
- package/error/RequiredError.js +11 -1
- package/error/ResponseError.d.ts +19 -2
- package/error/ResponseError.js +19 -2
- package/error/UnexpectedError.d.ts +14 -1
- package/error/UnexpectedError.js +14 -1
- package/error/UnimplementedError.d.ts +13 -1
- package/error/UnimplementedError.js +13 -1
- package/error/ValueError.d.ts +14 -1
- package/error/ValueError.js +14 -1
- package/extract/DirectoryExtractor.d.ts +35 -1
- package/extract/DirectoryExtractor.js +30 -0
- package/extract/Extractor.d.ts +21 -2
- package/extract/Extractor.js +7 -1
- package/extract/FileExtractor.d.ts +18 -0
- package/extract/FileExtractor.js +18 -0
- package/extract/IndexExtractor.d.ts +36 -1
- package/extract/IndexExtractor.js +31 -0
- package/extract/MarkupExtractor.d.ts +15 -0
- package/extract/MarkupExtractor.js +15 -0
- package/extract/MergingExtractor.d.ts +36 -1
- package/extract/MergingExtractor.js +31 -0
- package/extract/ModuleExtractor.d.ts +25 -1
- package/extract/ModuleExtractor.js +20 -0
- package/extract/PackageExtractor.d.ts +36 -1
- package/extract/PackageExtractor.js +31 -0
- package/extract/ThroughExtractor.d.ts +22 -1
- package/extract/ThroughExtractor.js +22 -1
- package/extract/TypescriptExtractor.d.ts +21 -0
- package/extract/TypescriptExtractor.js +28 -3
- package/firestore/client/FirestoreClientProvider.d.ts +129 -4
- package/firestore/client/FirestoreClientProvider.js +129 -4
- package/firestore/lite/FirestoreLiteProvider.d.ts +128 -3
- package/firestore/lite/FirestoreLiteProvider.js +128 -3
- package/firestore/server/FirestoreServerProvider.d.ts +129 -2
- package/firestore/server/FirestoreServerProvider.js +129 -2
- package/markup/MarkupParser.d.ts +57 -10
- package/markup/MarkupParser.js +50 -9
- package/markup/MarkupRule.d.ts +34 -1
- package/markup/Parser.d.ts +18 -0
- package/markup/Parser.js +11 -0
- package/markup/rule/blockquote.d.ts +3 -0
- package/markup/rule/blockquote.js +3 -0
- package/markup/rule/code.d.ts +3 -0
- package/markup/rule/code.js +3 -0
- package/markup/rule/fenced.d.ts +3 -0
- package/markup/rule/fenced.js +3 -0
- package/markup/rule/heading.d.ts +3 -0
- package/markup/rule/heading.js +3 -0
- package/markup/rule/index.d.ts +16 -3
- package/markup/rule/index.js +16 -3
- package/markup/rule/inline.d.ts +4 -1
- package/markup/rule/inline.js +5 -2
- package/markup/rule/linebreak.d.ts +3 -0
- package/markup/rule/linebreak.js +3 -0
- package/markup/rule/link.d.ts +6 -0
- package/markup/rule/link.js +6 -0
- package/markup/rule/ordered.d.ts +3 -0
- package/markup/rule/ordered.js +3 -0
- package/markup/rule/paragraph.d.ts +3 -0
- package/markup/rule/paragraph.js +3 -0
- package/markup/rule/separator.d.ts +3 -0
- package/markup/rule/separator.js +3 -0
- package/markup/rule/table.d.ts +3 -0
- package/markup/rule/table.js +3 -0
- package/markup/rule/unordered.d.ts +3 -0
- package/markup/rule/unordered.js +3 -0
- package/markup/util/regexp.d.ts +80 -3
- package/markup/util/regexp.js +44 -0
- package/package.json +1 -1
- package/react/createAPIContext.d.ts +15 -0
- package/react/createAPIContext.js +10 -0
- package/react/createDBContext.d.ts +15 -0
- package/react/createDBContext.js +10 -0
- package/react/useInstance.d.ts +11 -0
- package/react/useInstance.js +11 -0
- package/react/useLazy.d.ts +11 -0
- package/react/useMap.d.ts +14 -1
- package/react/useMap.js +14 -1
- package/react/useReduce.d.ts +12 -0
- package/react/useSequence.d.ts +10 -0
- package/react/useSequence.js +10 -0
- package/react/useStore.d.ts +16 -1
- package/schema/AddressSchema.d.ts +41 -4
- package/schema/AddressSchema.js +36 -3
- package/schema/ArraySchema.d.ts +48 -6
- package/schema/ArraySchema.js +40 -5
- package/schema/BooleanSchema.d.ts +59 -3
- package/schema/BooleanSchema.js +51 -2
- package/schema/ChoiceSchema.d.ts +61 -7
- package/schema/ChoiceSchema.js +44 -2
- package/schema/ColorSchema.d.ts +41 -8
- package/schema/ColorSchema.js +36 -7
- package/schema/CountrySchema.d.ts +44 -4
- package/schema/CountrySchema.js +39 -3
- package/schema/CurrencyAmountSchema.d.ts +104 -8
- package/schema/CurrencyAmountSchema.js +91 -4
- package/schema/CurrencyCodeSchema.d.ts +56 -4
- package/schema/CurrencyCodeSchema.js +49 -3
- package/schema/DataSchema.d.ts +101 -10
- package/schema/DataSchema.js +87 -8
- package/schema/DateSchema.d.ts +73 -4
- package/schema/DateSchema.js +57 -2
- package/schema/DateTimeSchema.d.ts +40 -3
- package/schema/DateTimeSchema.js +40 -3
- package/schema/DictionarySchema.d.ts +54 -4
- package/schema/DictionarySchema.js +47 -3
- package/schema/EmailSchema.d.ts +34 -3
- package/schema/EmailSchema.js +34 -3
- package/schema/EntitySchema.d.ts +45 -4
- package/schema/EntitySchema.js +38 -3
- package/schema/FileSchema.d.ts +45 -4
- package/schema/FileSchema.js +39 -3
- package/schema/KeySchema.d.ts +32 -3
- package/schema/KeySchema.js +32 -3
- package/schema/NullableSchema.d.ts +64 -4
- package/schema/NullableSchema.js +59 -3
- package/schema/NumberSchema.d.ts +137 -12
- package/schema/NumberSchema.js +127 -11
- package/schema/OptionalSchema.d.ts +61 -4
- package/schema/OptionalSchema.js +56 -4
- package/schema/PasswordSchema.d.ts +37 -1
- package/schema/PasswordSchema.js +32 -1
- package/schema/PhoneSchema.d.ts +40 -4
- package/schema/PhoneSchema.js +35 -3
- package/schema/RequiredSchema.d.ts +39 -3
- package/schema/RequiredSchema.js +41 -3
- package/schema/Schema.d.ts +67 -7
- package/schema/Schema.js +42 -6
- package/schema/SlugSchema.d.ts +37 -5
- package/schema/SlugSchema.js +37 -5
- package/schema/StringSchema.d.ts +124 -19
- package/schema/StringSchema.js +107 -17
- package/schema/ThroughSchema.d.ts +35 -2
- package/schema/ThroughSchema.js +30 -1
- package/schema/TimeSchema.d.ts +43 -3
- package/schema/TimeSchema.js +43 -3
- package/schema/URISchema.d.ts +67 -6
- package/schema/URISchema.js +60 -6
- package/schema/URLSchema.d.ts +69 -6
- package/schema/URLSchema.js +61 -6
- package/schema/UUIDSchema.d.ts +37 -4
- package/schema/UUIDSchema.js +37 -4
- package/sequence/DeferredSequence.d.ts +49 -3
- package/sequence/DeferredSequence.js +39 -3
- package/sequence/InspectSequence.d.ts +59 -5
- package/sequence/InspectSequence.js +59 -5
- package/sequence/LazySequence.d.ts +30 -2
- package/sequence/LazySequence.js +30 -2
- package/sequence/Sequence.d.ts +11 -0
- package/sequence/Sequence.js +10 -0
- package/sequence/ThroughSequence.d.ts +15 -0
- package/sequence/ThroughSequence.js +15 -0
- package/store/ArrayStore.d.ts +74 -11
- package/store/ArrayStore.js +74 -11
- package/store/BooleanStore.d.ts +19 -2
- package/store/BooleanStore.js +19 -2
- package/store/BusyStore.d.ts +13 -1
- package/store/BusyStore.js +13 -1
- package/store/DataStore.d.ts +118 -15
- package/store/DataStore.js +118 -15
- package/store/DictionaryStore.d.ts +66 -8
- package/store/DictionaryStore.js +66 -8
- package/store/FetchStore.d.ts +43 -6
- package/store/FetchStore.js +36 -5
- package/store/PathStore.d.ts +44 -5
- package/store/PathStore.js +44 -5
- package/store/PayloadFetchStore.d.ts +16 -1
- package/store/PayloadFetchStore.js +9 -1
- package/store/Store.d.ts +85 -16
- package/store/Store.js +52 -10
- package/store/URLStore.d.ts +173 -15
- package/store/URLStore.js +173 -15
- package/test/basics.d.ts +70 -0
- package/test/basics.js +60 -0
- package/test/people.d.ts +45 -0
- package/test/people.js +35 -0
- package/test/util.d.ts +30 -3
- package/test/util.js +30 -3
- package/ui/app/App.d.ts +14 -2
- package/ui/app/App.js +9 -2
- package/ui/app/App.tsx +14 -2
- package/ui/block/Address.d.ts +45 -3
- package/ui/block/Address.js +30 -3
- package/ui/block/Address.tsx +46 -3
- package/ui/block/Block.d.ts +23 -1
- package/ui/block/Block.js +13 -1
- package/ui/block/Block.tsx +23 -1
- package/ui/block/Blockquote.d.ts +21 -0
- package/ui/block/Blockquote.js +16 -0
- package/ui/block/Blockquote.tsx +22 -0
- package/ui/block/Caption.d.ts +21 -1
- package/ui/block/Caption.js +16 -1
- package/ui/block/Caption.tsx +22 -1
- package/ui/block/Card.d.ts +6 -0
- package/ui/block/Card.js +1 -0
- package/ui/block/Card.tsx +6 -0
- package/ui/block/Definitions.d.ts +18 -0
- package/ui/block/Definitions.js +13 -0
- package/ui/block/Definitions.tsx +19 -0
- package/ui/block/Divider.d.ts +21 -0
- package/ui/block/Divider.js +16 -0
- package/ui/block/Divider.tsx +22 -0
- package/ui/block/Heading.d.ts +20 -1
- package/ui/block/Heading.js +15 -0
- package/ui/block/Heading.tsx +21 -1
- package/ui/block/Image.d.ts +23 -0
- package/ui/block/Image.js +18 -0
- package/ui/block/Image.tsx +24 -0
- package/ui/block/Label.d.ts +18 -3
- package/ui/block/Label.js +13 -3
- package/ui/block/Label.tsx +18 -3
- package/ui/block/List.d.ts +30 -0
- package/ui/block/List.js +25 -0
- package/ui/block/List.tsx +32 -0
- package/ui/block/Panel.d.ts +13 -1
- package/ui/block/Panel.js +3 -0
- package/ui/block/Panel.tsx +13 -1
- package/ui/block/Paragraph.d.ts +23 -0
- package/ui/block/Paragraph.js +18 -0
- package/ui/block/Paragraph.tsx +24 -0
- package/ui/block/Preformatted.d.ts +20 -0
- package/ui/block/Preformatted.js +15 -0
- package/ui/block/Preformatted.tsx +21 -0
- package/ui/block/Prose.d.ts +14 -1
- package/ui/block/Prose.js +9 -1
- package/ui/block/Prose.tsx +14 -1
- package/ui/block/Section.d.ts +69 -6
- package/ui/block/Section.js +59 -6
- package/ui/block/Section.tsx +70 -6
- package/ui/block/Subheading.d.ts +20 -1
- package/ui/block/Subheading.js +15 -0
- package/ui/block/Subheading.tsx +21 -1
- package/ui/block/Table.d.ts +20 -0
- package/ui/block/Table.js +15 -0
- package/ui/block/Table.tsx +21 -0
- package/ui/block/Title.d.ts +20 -1
- package/ui/block/Title.js +15 -0
- package/ui/block/Title.tsx +21 -1
- package/ui/block/Video.d.ts +50 -3
- package/ui/block/Video.js +30 -3
- package/ui/block/Video.tsx +50 -3
- package/ui/dialog/Dialog.d.ts +28 -1
- package/ui/dialog/Dialog.js +18 -1
- package/ui/dialog/Dialog.tsx +28 -1
- package/ui/dialog/Dialogs.d.ts +53 -6
- package/ui/dialog/Dialogs.js +43 -6
- package/ui/dialog/Dialogs.tsx +53 -6
- package/ui/dialog/Modal.d.ts +13 -0
- package/ui/dialog/Modal.js +8 -0
- package/ui/dialog/Modal.tsx +13 -0
- package/ui/docs/DocumentationButtons.d.ts +5 -1
- package/ui/docs/DocumentationButtons.tsx +5 -1
- package/ui/docs/DocumentationCard.d.ts +6 -1
- package/ui/docs/DocumentationCard.js +6 -1
- package/ui/docs/DocumentationCard.tsx +6 -1
- package/ui/docs/DocumentationKind.d.ts +13 -1
- package/ui/docs/DocumentationKind.js +8 -0
- package/ui/docs/DocumentationKind.tsx +13 -1
- package/ui/docs/DocumentationPage.d.ts +6 -1
- package/ui/docs/DocumentationPage.js +6 -1
- package/ui/docs/DocumentationPage.tsx +6 -1
- package/ui/docs/DocumentationSignatures.d.ts +10 -1
- package/ui/docs/DocumentationSignatures.js +5 -0
- package/ui/docs/DocumentationSignatures.tsx +10 -1
- package/ui/form/ArrayInput.d.ts +15 -0
- package/ui/form/ArrayInput.tsx +15 -0
- package/ui/form/ArrayRadioInputs.d.ts +10 -0
- package/ui/form/ArrayRadioInputs.js +5 -0
- package/ui/form/ArrayRadioInputs.tsx +10 -0
- package/ui/form/Button.d.ts +19 -3
- package/ui/form/Button.js +14 -2
- package/ui/form/Button.tsx +19 -3
- package/ui/form/ButtonInput.d.ts +14 -1
- package/ui/form/ButtonInput.js +9 -1
- package/ui/form/ButtonInput.tsx +14 -1
- package/ui/form/ButtonInputPopover.d.ts +10 -0
- package/ui/form/ButtonInputPopover.js +5 -0
- package/ui/form/ButtonInputPopover.tsx +10 -0
- package/ui/form/ButtonPopover.d.ts +11 -1
- package/ui/form/ButtonPopover.js +6 -1
- package/ui/form/ButtonPopover.tsx +11 -1
- package/ui/form/CheckboxInput.d.ts +14 -1
- package/ui/form/CheckboxInput.js +9 -1
- package/ui/form/CheckboxInput.tsx +14 -1
- package/ui/form/ChoiceRadioInputs.d.ts +10 -0
- package/ui/form/ChoiceRadioInputs.tsx +10 -0
- package/ui/form/Clickable.d.ts +45 -5
- package/ui/form/Clickable.js +30 -3
- package/ui/form/Clickable.tsx +45 -5
- package/ui/form/DataInput.d.ts +14 -0
- package/ui/form/DataInput.tsx +14 -0
- package/ui/form/DateInput.d.ts +14 -0
- package/ui/form/DateInput.js +9 -0
- package/ui/form/DateInput.tsx +14 -0
- package/ui/form/DictionaryInput.d.ts +15 -0
- package/ui/form/DictionaryInput.tsx +15 -0
- package/ui/form/Field.d.ts +5 -0
- package/ui/form/Field.tsx +5 -0
- package/ui/form/FileInput.d.ts +14 -0
- package/ui/form/FileInput.js +9 -0
- package/ui/form/FileInput.tsx +14 -0
- package/ui/form/Form.d.ts +55 -6
- package/ui/form/Form.js +35 -3
- package/ui/form/Form.tsx +55 -6
- package/ui/form/FormContext.d.ts +24 -3
- package/ui/form/FormContext.js +5 -1
- package/ui/form/FormContext.tsx +24 -3
- package/ui/form/FormFields.d.ts +15 -2
- package/ui/form/FormFields.js +15 -2
- package/ui/form/FormFields.tsx +15 -2
- package/ui/form/FormFooter.d.ts +13 -3
- package/ui/form/FormFooter.js +8 -3
- package/ui/form/FormFooter.tsx +13 -3
- package/ui/form/FormInput.d.ts +21 -2
- package/ui/form/FormInput.js +16 -2
- package/ui/form/FormInput.tsx +21 -2
- package/ui/form/FormMessage.d.ts +8 -1
- package/ui/form/FormMessage.js +8 -1
- package/ui/form/FormMessage.tsx +8 -2
- package/ui/form/FormNotice.d.ts +8 -1
- package/ui/form/FormNotice.js +8 -1
- package/ui/form/FormNotice.tsx +8 -2
- package/ui/form/FormNotify.d.ts +8 -1
- package/ui/form/FormNotify.js +8 -1
- package/ui/form/FormNotify.tsx +8 -2
- package/ui/form/FormStore.d.ts +50 -6
- package/ui/form/FormStore.js +50 -6
- package/ui/form/FormStore.tsx +50 -6
- package/ui/form/Input.d.ts +65 -1
- package/ui/form/Input.js +60 -0
- package/ui/form/Input.tsx +77 -1
- package/ui/form/NumberInput.d.ts +14 -0
- package/ui/form/NumberInput.js +9 -0
- package/ui/form/NumberInput.tsx +14 -0
- package/ui/form/OutputInput.d.ts +13 -1
- package/ui/form/OutputInput.js +8 -1
- package/ui/form/OutputInput.tsx +13 -1
- package/ui/form/Popover.d.ts +18 -2
- package/ui/form/Popover.js +8 -2
- package/ui/form/Popover.tsx +18 -2
- package/ui/form/Progress.d.ts +26 -2
- package/ui/form/Progress.js +16 -2
- package/ui/form/Progress.tsx +26 -2
- package/ui/form/QueryInput.d.ts +14 -5
- package/ui/form/QueryInput.js +9 -5
- package/ui/form/QueryInput.tsx +14 -5
- package/ui/form/RadioInput.d.ts +14 -1
- package/ui/form/RadioInput.js +9 -1
- package/ui/form/RadioInput.tsx +14 -1
- package/ui/form/SchemaInput.d.ts +138 -7
- package/ui/form/SchemaInput.js +79 -4
- package/ui/form/SchemaInput.tsx +138 -7
- package/ui/form/SelectInput.d.ts +14 -0
- package/ui/form/SelectInput.tsx +14 -0
- package/ui/form/SubmitButton.d.ts +14 -1
- package/ui/form/SubmitButton.js +9 -1
- package/ui/form/SubmitButton.tsx +14 -1
- package/ui/form/TextInput.d.ts +15 -0
- package/ui/form/TextInput.js +10 -0
- package/ui/form/TextInput.tsx +15 -0
- package/ui/inline/Code.d.ts +29 -0
- package/ui/inline/Code.js +24 -0
- package/ui/inline/Code.tsx +31 -0
- package/ui/inline/Deleted.d.ts +23 -0
- package/ui/inline/Deleted.js +18 -0
- package/ui/inline/Deleted.tsx +24 -0
- package/ui/inline/Emphasis.d.ts +23 -0
- package/ui/inline/Emphasis.js +18 -0
- package/ui/inline/Emphasis.tsx +24 -0
- package/ui/inline/Inserted.d.ts +23 -0
- package/ui/inline/Inserted.js +18 -0
- package/ui/inline/Inserted.tsx +24 -0
- package/ui/inline/Link.d.ts +23 -0
- package/ui/inline/Link.js +18 -0
- package/ui/inline/Link.tsx +24 -0
- package/ui/inline/Mark.d.ts +23 -0
- package/ui/inline/Mark.js +18 -0
- package/ui/inline/Mark.tsx +24 -0
- package/ui/inline/Small.d.ts +23 -0
- package/ui/inline/Small.js +18 -0
- package/ui/inline/Small.tsx +24 -0
- package/ui/inline/Strong.d.ts +23 -0
- package/ui/inline/Strong.js +18 -0
- package/ui/inline/Strong.tsx +24 -0
- package/ui/inline/Subscript.d.ts +23 -0
- package/ui/inline/Subscript.js +18 -0
- package/ui/inline/Subscript.tsx +24 -0
- package/ui/inline/Superscript.d.ts +23 -0
- package/ui/inline/Superscript.js +18 -0
- package/ui/inline/Superscript.tsx +24 -0
- package/ui/inline/When.d.ts +42 -3
- package/ui/inline/When.js +27 -3
- package/ui/inline/When.tsx +42 -3
- package/ui/layout/CenteredLayout.d.ts +12 -1
- package/ui/layout/CenteredLayout.js +7 -1
- package/ui/layout/CenteredLayout.tsx +12 -1
- package/ui/layout/Layout.d.ts +12 -3
- package/ui/layout/Layout.js +12 -3
- package/ui/layout/Layout.ts +12 -3
- package/ui/layout/SidebarLayout.d.ts +12 -0
- package/ui/layout/SidebarLayout.js +7 -0
- package/ui/layout/SidebarLayout.tsx +12 -0
- package/ui/menu/Menu.d.ts +22 -0
- package/ui/menu/Menu.js +12 -0
- package/ui/menu/Menu.tsx +22 -0
- package/ui/misc/Catcher.d.ts +77 -5
- package/ui/misc/Catcher.js +47 -5
- package/ui/misc/Catcher.tsx +77 -5
- package/ui/misc/Loading.d.ts +20 -0
- package/ui/misc/Loading.js +15 -0
- package/ui/misc/Loading.tsx +20 -0
- package/ui/misc/Mapper.d.ts +13 -1
- package/ui/misc/Mapper.js +4 -0
- package/ui/misc/Mapper.tsx +13 -1
- package/ui/misc/Markup.d.ts +9 -1
- package/ui/misc/Markup.js +4 -0
- package/ui/misc/Markup.tsx +9 -1
- package/ui/misc/MetaContext.d.ts +24 -7
- package/ui/misc/MetaContext.js +19 -6
- package/ui/misc/MetaContext.tsx +24 -7
- package/ui/misc/StatusIcon.d.ts +16 -1
- package/ui/misc/StatusIcon.js +11 -1
- package/ui/misc/StatusIcon.tsx +16 -1
- package/ui/misc/Tag.d.ts +21 -0
- package/ui/misc/Tag.js +11 -0
- package/ui/misc/Tag.tsx +21 -0
- package/ui/notice/Message.d.ts +27 -1
- package/ui/notice/Message.js +22 -1
- package/ui/notice/Message.tsx +27 -1
- package/ui/notice/Notice.d.ts +24 -0
- package/ui/notice/Notice.js +19 -0
- package/ui/notice/Notice.tsx +24 -0
- package/ui/notice/NoticeStore.d.ts +30 -2
- package/ui/notice/NoticeStore.js +30 -2
- package/ui/notice/NoticeStore.ts +30 -2
- package/ui/notice/Notices.d.ts +11 -1
- package/ui/notice/Notices.js +6 -1
- package/ui/notice/Notices.tsx +11 -1
- package/ui/notice/NoticesStore.d.ts +23 -3
- package/ui/notice/NoticesStore.js +23 -3
- package/ui/notice/NoticesStore.ts +23 -3
- package/ui/page/HTML.d.ts +13 -2
- package/ui/page/HTML.js +8 -2
- package/ui/page/HTML.tsx +13 -2
- package/ui/page/Head.d.ts +5 -1
- package/ui/page/Head.js +5 -1
- package/ui/page/Head.tsx +5 -1
- package/ui/page/Page.d.ts +12 -1
- package/ui/page/Page.js +7 -1
- package/ui/page/Page.tsx +12 -1
- package/ui/router/Navigation.d.ts +11 -0
- package/ui/router/Navigation.js +6 -0
- package/ui/router/Navigation.tsx +11 -0
- package/ui/router/NavigationContext.d.ts +14 -2
- package/ui/router/NavigationContext.js +14 -2
- package/ui/router/NavigationContext.tsx +14 -2
- package/ui/router/NavigationStore.d.ts +29 -1
- package/ui/router/NavigationStore.js +29 -1
- package/ui/router/NavigationStore.tsx +29 -1
- package/ui/router/Router.d.ts +12 -1
- package/ui/router/Router.js +7 -1
- package/ui/router/Router.tsx +12 -1
- package/ui/router/Routes.d.ts +14 -4
- package/ui/router/Routes.tsx +14 -4
- package/ui/style/Color.d.ts +15 -2
- package/ui/style/Color.js +5 -0
- package/ui/style/Color.tsx +15 -2
- package/ui/style/Flex.d.ts +41 -4
- package/ui/style/Flex.js +26 -3
- package/ui/style/Flex.tsx +41 -4
- package/ui/style/Gap.d.ts +18 -3
- package/ui/style/Gap.js +8 -1
- package/ui/style/Gap.tsx +18 -3
- package/ui/style/Padding.d.ts +18 -3
- package/ui/style/Padding.js +8 -1
- package/ui/style/Padding.tsx +18 -3
- package/ui/style/Scroll.d.ts +36 -1
- package/ui/style/Scroll.js +26 -1
- package/ui/style/Scroll.tsx +37 -1
- package/ui/style/Space.d.ts +18 -3
- package/ui/style/Space.js +8 -1
- package/ui/style/Space.tsx +18 -3
- package/ui/style/Status.d.ts +23 -7
- package/ui/style/Status.js +13 -5
- package/ui/style/Status.tsx +23 -7
- package/ui/style/Tint.d.ts +7 -1
- package/ui/style/Tint.js +7 -1
- package/ui/style/Tint.tsx +7 -1
- package/ui/style/Typography.d.ts +38 -6
- package/ui/style/Typography.js +8 -0
- package/ui/style/Typography.tsx +38 -6
- package/ui/style/Width.d.ts +18 -1
- package/ui/style/Width.js +8 -0
- package/ui/style/Width.tsx +18 -1
- package/ui/transition/CollapseTransition.d.ts +13 -0
- package/ui/transition/CollapseTransition.js +8 -0
- package/ui/transition/CollapseTransition.tsx +13 -0
- package/ui/transition/FadeTransition.d.ts +13 -0
- package/ui/transition/FadeTransition.js +8 -0
- package/ui/transition/FadeTransition.tsx +13 -0
- package/ui/transition/HorizontalTransition.d.ts +13 -0
- package/ui/transition/HorizontalTransition.js +8 -0
- package/ui/transition/HorizontalTransition.tsx +13 -0
- package/ui/transition/Transition.d.ts +12 -4
- package/ui/transition/Transition.js +7 -3
- package/ui/transition/Transition.tsx +12 -4
- package/ui/transition/VerticalTransition.d.ts +13 -0
- package/ui/transition/VerticalTransition.js +8 -0
- package/ui/transition/VerticalTransition.tsx +13 -0
- package/ui/transition/util.d.ts +16 -6
- package/ui/transition/util.js +7 -1
- package/ui/transition/util.tsx +16 -6
- package/ui/tree/TreeApp.d.ts +11 -0
- package/ui/tree/TreeApp.js +6 -0
- package/ui/tree/TreeApp.tsx +11 -0
- package/ui/tree/TreeBreadcrumbs.d.ts +11 -0
- package/ui/tree/TreeBreadcrumbs.js +6 -0
- package/ui/tree/TreeBreadcrumbs.tsx +11 -0
- package/ui/tree/TreeButton.d.ts +9 -1
- package/ui/tree/TreeButton.js +4 -0
- package/ui/tree/TreeButton.tsx +9 -1
- package/ui/tree/TreeCard.d.ts +8 -1
- package/ui/tree/TreeCard.js +8 -1
- package/ui/tree/TreeCard.tsx +8 -1
- package/ui/tree/TreeCards.d.ts +16 -1
- package/ui/tree/TreeCards.js +11 -1
- package/ui/tree/TreeCards.tsx +16 -1
- package/ui/tree/TreeContext.d.ts +18 -1
- package/ui/tree/TreeContext.js +18 -1
- package/ui/tree/TreeContext.tsx +18 -1
- package/ui/tree/TreeMenu.d.ts +28 -1
- package/ui/tree/TreeMenu.js +23 -1
- package/ui/tree/TreeMenu.tsx +28 -1
- package/ui/tree/TreePage.d.ts +6 -0
- package/ui/tree/TreePage.js +6 -0
- package/ui/tree/TreePage.tsx +6 -0
- package/ui/tree/TreeRouter.d.ts +17 -2
- package/ui/tree/TreeRouter.js +12 -2
- package/ui/tree/TreeRouter.tsx +17 -2
- package/ui/tree/TreeSidebar.d.ts +11 -0
- package/ui/tree/TreeSidebar.js +6 -0
- package/ui/tree/TreeSidebar.tsx +11 -0
- package/ui/util/context.d.ts +13 -1
- package/ui/util/context.ts +13 -1
- package/ui/util/css.d.ts +17 -4
- package/ui/util/css.js +5 -1
- package/ui/util/css.ts +17 -4
- package/ui/util/event.d.ts +9 -1
- package/ui/util/event.js +9 -1
- package/ui/util/event.ts +9 -1
- package/ui/util/focus.d.ts +24 -5
- package/ui/util/focus.js +24 -5
- package/ui/util/focus.ts +24 -5
- package/ui/util/meta.d.ts +113 -21
- package/ui/util/meta.js +73 -13
- package/ui/util/meta.ts +113 -21
- package/ui/util/notice.d.ts +98 -10
- package/ui/util/notice.js +93 -9
- package/ui/util/notice.ts +98 -10
- package/ui/util/props.d.ts +10 -2
- package/ui/util/props.ts +10 -2
- package/ui/util/refresh.d.ts +10 -1
- package/ui/util/refresh.js +10 -1
- package/ui/util/refresh.ts +10 -1
- package/ui/util/scroll.d.ts +20 -4
- package/ui/util/scroll.js +20 -4
- package/ui/util/scroll.ts +20 -4
- package/ui/util/state.d.ts +19 -5
- package/ui/util/state.js +19 -5
- package/ui/util/state.ts +19 -5
- package/util/ansi.d.ts +118 -0
- package/util/ansi.js +116 -0
- package/util/array.d.ts +349 -33
- package/util/array.js +284 -27
- package/util/async.d.ts +87 -9
- package/util/async.js +80 -8
- package/util/base64.d.ts +56 -6
- package/util/base64.js +56 -6
- package/util/boolean.d.ts +75 -10
- package/util/boolean.js +75 -10
- package/util/buffer.d.ts +26 -3
- package/util/buffer.js +21 -3
- package/util/bytes.d.ts +42 -4
- package/util/bytes.js +32 -2
- package/util/class.d.ts +59 -8
- package/util/class.js +44 -5
- package/util/color.d.ts +131 -13
- package/util/color.js +126 -12
- package/util/constants.d.ts +132 -19
- package/util/constants.js +132 -19
- package/util/crypto.d.ts +17 -1
- package/util/crypto.js +17 -1
- package/util/currency.d.ts +38 -4
- package/util/currency.js +33 -3
- package/util/data.d.ts +139 -24
- package/util/data.js +39 -5
- package/util/date.d.ts +152 -18
- package/util/date.js +147 -17
- package/util/debug.d.ts +112 -11
- package/util/debug.js +114 -11
- package/util/dictionary.d.ts +205 -24
- package/util/dictionary.js +162 -17
- package/util/diff.d.ts +22 -3
- package/util/diff.js +11 -1
- package/util/dispose.d.ts +74 -2
- package/util/dispose.js +74 -2
- package/util/duration.d.ts +278 -16
- package/util/duration.js +267 -15
- package/util/element.d.ts +59 -6
- package/util/element.js +32 -3
- package/util/entity.d.ts +39 -6
- package/util/entity.js +5 -1
- package/util/entry.d.ts +56 -9
- package/util/entry.js +32 -4
- package/util/env.d.ts +26 -4
- package/util/env.js +26 -4
- package/util/equal.d.ts +181 -17
- package/util/equal.js +181 -17
- package/util/error.d.ts +57 -5
- package/util/error.js +52 -4
- package/util/file.d.ts +30 -7
- package/util/file.js +25 -6
- package/util/filter.d.ts +36 -4
- package/util/filter.js +31 -3
- package/util/focus.d.ts +9 -1
- package/util/focus.js +9 -1
- package/util/format.d.ts +186 -22
- package/util/format.js +135 -14
- package/util/function.d.ts +66 -11
- package/util/function.js +31 -4
- package/util/geo.d.ts +60 -8
- package/util/geo.js +45 -5
- package/util/hash.d.ts +21 -2
- package/util/hash.js +21 -2
- package/util/http.d.ts +134 -19
- package/util/http.js +94 -11
- package/util/hydrate.d.ts +19 -2
- package/util/hydrate.js +12 -1
- package/util/item.d.ts +70 -11
- package/util/item.js +35 -4
- package/util/iterate.d.ts +109 -13
- package/util/iterate.js +86 -10
- package/util/jwt.d.ts +47 -13
- package/util/jwt.js +36 -12
- package/util/lazy.d.ts +9 -6
- package/util/link.d.ts +10 -3
- package/util/link.js +5 -2
- package/util/log.d.ts +26 -3
- package/util/log.js +26 -3
- package/util/map.d.ts +144 -19
- package/util/map.js +101 -11
- package/util/merge.d.ts +23 -1
- package/util/merge.js +6 -0
- package/util/null.d.ts +102 -13
- package/util/null.js +92 -11
- package/util/number.d.ts +125 -8
- package/util/number.js +120 -7
- package/util/object.d.ts +263 -31
- package/util/object.js +154 -17
- package/util/path.d.ts +91 -15
- package/util/path.js +60 -9
- package/util/query.d.ts +78 -9
- package/util/query.js +58 -6
- package/util/random.d.ts +67 -4
- package/util/random.js +67 -4
- package/util/regexp.d.ts +201 -24
- package/util/regexp.js +106 -11
- package/util/sequence.d.ts +66 -8
- package/util/sequence.js +52 -7
- package/util/serialise.d.ts +7 -1
- package/util/serialise.js +7 -1
- package/util/set.d.ts +103 -13
- package/util/set.js +83 -9
- package/util/sort.d.ts +32 -7
- package/util/sort.js +26 -6
- package/util/source.d.ts +28 -3
- package/util/source.js +22 -2
- package/util/start.d.ts +62 -5
- package/util/start.js +47 -2
- package/util/string.d.ts +209 -25
- package/util/string.js +188 -21
- package/util/template.d.ts +58 -9
- package/util/template.js +45 -6
- package/util/timeout.d.ts +35 -11
- package/util/timeout.js +35 -11
- package/util/transform.d.ts +87 -8
- package/util/transform.js +75 -7
- package/util/tree.d.ts +39 -6
- package/util/tree.js +3 -0
- package/util/types.d.ts +8 -2
- package/util/undefined.d.ts +47 -6
- package/util/undefined.js +47 -6
- package/util/units.d.ts +107 -12
- package/util/units.js +97 -12
- package/util/update.d.ts +36 -4
- package/util/update.js +24 -2
- package/util/uri.d.ts +138 -6
- package/util/uri.js +44 -3
- package/util/url.d.ts +152 -7
- package/util/url.js +136 -5
- package/util/uuid.d.ts +28 -3
- package/util/uuid.js +28 -3
- package/util/validate.d.ts +85 -20
- package/util/validate.js +61 -12
- package/util/xml.d.ts +9 -10
- package/util/xml.js +9 -10
package/ui/block/Video.d.ts
CHANGED
|
@@ -2,11 +2,26 @@ import { type MouseEvent, type ReactElement } from "react";
|
|
|
2
2
|
import { type SpaceVariants } from "../style/Space.js";
|
|
3
3
|
import { type WidthVariants } from "../style/Width.js";
|
|
4
4
|
import type { ChildProps, OptionalChildProps } from "../util/props.js";
|
|
5
|
+
/**
|
|
6
|
+
* Props for `Video` — space and width variants plus optional `children`.
|
|
7
|
+
*
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoProps
|
|
9
|
+
*/
|
|
5
10
|
export interface VideoProps extends SpaceVariants, WidthVariants, OptionalChildProps {
|
|
6
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Props for `VideoButtons` — `children` plus an optional `left` alignment flag.
|
|
14
|
+
*
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoButtonsProps
|
|
16
|
+
*/
|
|
7
17
|
export interface VideoButtonsProps extends ChildProps {
|
|
8
18
|
left?: boolean;
|
|
9
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Props for `VideoButton` — `children` plus optional `title`, `onClick`, `danger`, and `disabled`.
|
|
22
|
+
*
|
|
23
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoButtonProps
|
|
24
|
+
*/
|
|
10
25
|
export interface VideoButtonProps extends ChildProps {
|
|
11
26
|
title?: string | undefined;
|
|
12
27
|
onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
@@ -17,16 +32,48 @@ export interface VideoButtonProps extends ChildProps {
|
|
|
17
32
|
* Video container element.
|
|
18
33
|
* - Has a black background and a 16:9 aspect ratio.
|
|
19
34
|
* - Shows its contents (i.e. a `<video>` element or a `<TwilioRoom>`.
|
|
35
|
+
*
|
|
36
|
+
* @param props Space and width variants plus `children` (e.g. a `<video>` element).
|
|
37
|
+
* @returns Rendered `<figure>` video container.
|
|
38
|
+
* @example <Video><video src="/clip.mp4" /></Video>
|
|
39
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/Video
|
|
20
40
|
*/
|
|
21
41
|
export declare function Video({ children, ...variants }: VideoProps): ReactElement;
|
|
22
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* Set of video buttons floating over a video.
|
|
44
|
+
*
|
|
45
|
+
* @param props `children` (the buttons) plus an optional `left` alignment flag.
|
|
46
|
+
* @returns Rendered overlay container for video buttons.
|
|
47
|
+
* @example <VideoButtons><FullscreenVideoButton /></VideoButtons>
|
|
48
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoButtons
|
|
49
|
+
*/
|
|
23
50
|
export declare function VideoButtons({ children, ...variants }: VideoButtonsProps): import("react").JSX.Element;
|
|
24
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Individual video button over a video — renders a `<button>`.
|
|
53
|
+
*
|
|
54
|
+
* @param props `children` (the button content) plus optional `title`, `onClick`, `danger`, and `disabled`.
|
|
55
|
+
* @returns Rendered `<button>` element overlaid on the video.
|
|
56
|
+
* @example <VideoButton title="Play" onClick={play}><PlayIcon /></VideoButton>
|
|
57
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoButton
|
|
58
|
+
*/
|
|
25
59
|
export declare function VideoButton({ children, title, onClick, disabled, ...variants }: VideoButtonProps): ReactElement;
|
|
26
60
|
declare const _fullscreenVideoButtonProps: unique symbol;
|
|
61
|
+
/**
|
|
62
|
+
* Props for `FullscreenVideoButton` — an empty marker interface (the component takes no props).
|
|
63
|
+
*
|
|
64
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/FullscreenVideoButtonProps
|
|
65
|
+
*/
|
|
27
66
|
export interface FullscreenVideoButtonProps {
|
|
28
67
|
readonly [_fullscreenVideoButtonProps]?: never;
|
|
29
68
|
}
|
|
30
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Button to toggle the surrounding video element in and out of fullscreen.
|
|
71
|
+
* - Renders `null` when the browser does not support the Fullscreen API.
|
|
72
|
+
* - Tracks fullscreen state so the icon and title flip between enter/exit.
|
|
73
|
+
*
|
|
74
|
+
* @returns Rendered fullscreen toggle button, or `null` when fullscreen is unavailable.
|
|
75
|
+
* @example <Video><video src="/clip.mp4" /><VideoButtons><FullscreenVideoButton /></VideoButtons></Video>
|
|
76
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/FullscreenVideoButton
|
|
77
|
+
*/
|
|
31
78
|
export declare function FullscreenVideoButton(): ReactElement | null;
|
|
32
79
|
export {};
|
package/ui/block/Video.js
CHANGED
|
@@ -9,20 +9,47 @@ import styles from "./Video.module.css";
|
|
|
9
9
|
* Video container element.
|
|
10
10
|
* - Has a black background and a 16:9 aspect ratio.
|
|
11
11
|
* - Shows its contents (i.e. a `<video>` element or a `<TwilioRoom>`.
|
|
12
|
+
*
|
|
13
|
+
* @param props Space and width variants plus `children` (e.g. a `<video>` element).
|
|
14
|
+
* @returns Rendered `<figure>` video container.
|
|
15
|
+
* @example <Video><video src="/clip.mp4" /></Video>
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/Video
|
|
12
17
|
*/
|
|
13
18
|
export function Video({ children, ...variants }) {
|
|
14
19
|
const ref = useRef(null);
|
|
15
20
|
return (_jsx("figure", { ref: ref, className: getClass(getModuleClass(styles, "video"), getSpaceClass(variants), getWidthClass(variants)), children: children }));
|
|
16
21
|
}
|
|
17
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Set of video buttons floating over a video.
|
|
24
|
+
*
|
|
25
|
+
* @param props `children` (the buttons) plus an optional `left` alignment flag.
|
|
26
|
+
* @returns Rendered overlay container for video buttons.
|
|
27
|
+
* @example <VideoButtons><FullscreenVideoButton /></VideoButtons>
|
|
28
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoButtons
|
|
29
|
+
*/
|
|
18
30
|
export function VideoButtons({ children, ...variants }) {
|
|
19
31
|
return _jsx("div", { className: getModuleClass(styles, "buttons", variants), children: children });
|
|
20
32
|
}
|
|
21
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Individual video button over a video — renders a `<button>`.
|
|
35
|
+
*
|
|
36
|
+
* @param props `children` (the button content) plus optional `title`, `onClick`, `danger`, and `disabled`.
|
|
37
|
+
* @returns Rendered `<button>` element overlaid on the video.
|
|
38
|
+
* @example <VideoButton title="Play" onClick={play}><PlayIcon /></VideoButton>
|
|
39
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoButton
|
|
40
|
+
*/
|
|
22
41
|
export function VideoButton({ children, title, onClick, disabled, ...variants }) {
|
|
23
42
|
return (_jsx("button", { type: "button", onClick: onClick, className: getModuleClass(styles, "button", variants), title: title, disabled: disabled, children: children }));
|
|
24
43
|
}
|
|
25
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Button to toggle the surrounding video element in and out of fullscreen.
|
|
46
|
+
* - Renders `null` when the browser does not support the Fullscreen API.
|
|
47
|
+
* - Tracks fullscreen state so the icon and title flip between enter/exit.
|
|
48
|
+
*
|
|
49
|
+
* @returns Rendered fullscreen toggle button, or `null` when fullscreen is unavailable.
|
|
50
|
+
* @example <Video><video src="/clip.mp4" /><VideoButtons><FullscreenVideoButton /></VideoButtons></Video>
|
|
51
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/FullscreenVideoButton
|
|
52
|
+
*/
|
|
26
53
|
export function FullscreenVideoButton() {
|
|
27
54
|
const [isFull, setFull] = useState(() => typeof document !== "undefined" && !!document.fullscreenElement);
|
|
28
55
|
useEffect(() => {
|
package/ui/block/Video.tsx
CHANGED
|
@@ -6,12 +6,27 @@ import { getClass, getModuleClass } from "../util/css.js";
|
|
|
6
6
|
import type { ChildProps, OptionalChildProps } from "../util/props.js";
|
|
7
7
|
import styles from "./Video.module.css";
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Props for `Video` — space and width variants plus optional `children`.
|
|
11
|
+
*
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoProps
|
|
13
|
+
*/
|
|
9
14
|
export interface VideoProps extends SpaceVariants, WidthVariants, OptionalChildProps {}
|
|
10
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Props for `VideoButtons` — `children` plus an optional `left` alignment flag.
|
|
18
|
+
*
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoButtonsProps
|
|
20
|
+
*/
|
|
11
21
|
export interface VideoButtonsProps extends ChildProps {
|
|
12
22
|
left?: boolean;
|
|
13
23
|
}
|
|
14
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Props for `VideoButton` — `children` plus optional `title`, `onClick`, `danger`, and `disabled`.
|
|
27
|
+
*
|
|
28
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoButtonProps
|
|
29
|
+
*/
|
|
15
30
|
export interface VideoButtonProps extends ChildProps {
|
|
16
31
|
title?: string | undefined;
|
|
17
32
|
onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
@@ -23,6 +38,11 @@ export interface VideoButtonProps extends ChildProps {
|
|
|
23
38
|
* Video container element.
|
|
24
39
|
* - Has a black background and a 16:9 aspect ratio.
|
|
25
40
|
* - Shows its contents (i.e. a `<video>` element or a `<TwilioRoom>`.
|
|
41
|
+
*
|
|
42
|
+
* @param props Space and width variants plus `children` (e.g. a `<video>` element).
|
|
43
|
+
* @returns Rendered `<figure>` video container.
|
|
44
|
+
* @example <Video><video src="/clip.mp4" /></Video>
|
|
45
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/Video
|
|
26
46
|
*/
|
|
27
47
|
export function Video({ children, ...variants }: VideoProps): ReactElement {
|
|
28
48
|
const ref = useRef<HTMLElement | null>(null);
|
|
@@ -34,12 +54,26 @@ export function Video({ children, ...variants }: VideoProps): ReactElement {
|
|
|
34
54
|
);
|
|
35
55
|
}
|
|
36
56
|
|
|
37
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* Set of video buttons floating over a video.
|
|
59
|
+
*
|
|
60
|
+
* @param props `children` (the buttons) plus an optional `left` alignment flag.
|
|
61
|
+
* @returns Rendered overlay container for video buttons.
|
|
62
|
+
* @example <VideoButtons><FullscreenVideoButton /></VideoButtons>
|
|
63
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoButtons
|
|
64
|
+
*/
|
|
38
65
|
export function VideoButtons({ children, ...variants }: VideoButtonsProps) {
|
|
39
66
|
return <div className={getModuleClass(styles, "buttons", variants)}>{children}</div>;
|
|
40
67
|
}
|
|
41
68
|
|
|
42
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Individual video button over a video — renders a `<button>`.
|
|
71
|
+
*
|
|
72
|
+
* @param props `children` (the button content) plus optional `title`, `onClick`, `danger`, and `disabled`.
|
|
73
|
+
* @returns Rendered `<button>` element overlaid on the video.
|
|
74
|
+
* @example <VideoButton title="Play" onClick={play}><PlayIcon /></VideoButton>
|
|
75
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/VideoButton
|
|
76
|
+
*/
|
|
43
77
|
export function VideoButton({ children, title, onClick, disabled, ...variants }: VideoButtonProps): ReactElement {
|
|
44
78
|
return (
|
|
45
79
|
<button type="button" onClick={onClick} className={getModuleClass(styles, "button", variants)} title={title} disabled={disabled}>
|
|
@@ -50,11 +84,24 @@ export function VideoButton({ children, title, onClick, disabled, ...variants }:
|
|
|
50
84
|
|
|
51
85
|
declare const _fullscreenVideoButtonProps: unique symbol;
|
|
52
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Props for `FullscreenVideoButton` — an empty marker interface (the component takes no props).
|
|
89
|
+
*
|
|
90
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/FullscreenVideoButtonProps
|
|
91
|
+
*/
|
|
53
92
|
export interface FullscreenVideoButtonProps {
|
|
54
93
|
readonly [_fullscreenVideoButtonProps]?: never;
|
|
55
94
|
}
|
|
56
95
|
|
|
57
|
-
/**
|
|
96
|
+
/**
|
|
97
|
+
* Button to toggle the surrounding video element in and out of fullscreen.
|
|
98
|
+
* - Renders `null` when the browser does not support the Fullscreen API.
|
|
99
|
+
* - Tracks fullscreen state so the icon and title flip between enter/exit.
|
|
100
|
+
*
|
|
101
|
+
* @returns Rendered fullscreen toggle button, or `null` when fullscreen is unavailable.
|
|
102
|
+
* @example <Video><video src="/clip.mp4" /><VideoButtons><FullscreenVideoButton /></VideoButtons></Video>
|
|
103
|
+
* @see https://dhoulb.github.io/shelving/ui/block/Video/FullscreenVideoButton
|
|
104
|
+
*/
|
|
58
105
|
export function FullscreenVideoButton(): ReactElement | null {
|
|
59
106
|
const [isFull, setFull] = useState(() => typeof document !== "undefined" && !!document.fullscreenElement);
|
|
60
107
|
|
package/ui/dialog/Dialog.d.ts
CHANGED
|
@@ -2,11 +2,38 @@ import { type ReactElement } from "react";
|
|
|
2
2
|
import type { Callback } from "../../util/function.js";
|
|
3
3
|
import type { ButtonVariants } from "../form/Button.js";
|
|
4
4
|
import type { OptionalChildProps } from "../util/props.js";
|
|
5
|
+
/**
|
|
6
|
+
* Props for `<Dialog>` — optional `children` content and an `onClose` callback.
|
|
7
|
+
*
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialog/DialogProps
|
|
9
|
+
*/
|
|
5
10
|
export interface DialogProps extends OptionalChildProps {
|
|
6
11
|
onClose?: Callback;
|
|
7
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Modal `<dialog>` element that opens on mount and includes a close button.
|
|
15
|
+
*
|
|
16
|
+
* - Opens via `showModal()` when mounted and closes on backdrop clicks, link/nav-button clicks, or the close button.
|
|
17
|
+
* - Wraps content in `<Suspense>` so lazy children can stream in.
|
|
18
|
+
*
|
|
19
|
+
* @example dialogs.show(<Dialog><p>Are you sure?</p></Dialog>);
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialog/Dialog
|
|
21
|
+
*/
|
|
8
22
|
export declare const Dialog: import("react").MemoExoticComponent<({ children, onClose, ...props }: DialogProps) => import("react").JSX.Element>;
|
|
23
|
+
/**
|
|
24
|
+
* Props for `<DialogCloseButton>` — button styling variants and optional `children` to override the X icon.
|
|
25
|
+
*
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialog/DialogCloseButtonProps
|
|
27
|
+
*/
|
|
9
28
|
export interface DialogCloseButtonProps extends ButtonVariants, OptionalChildProps {
|
|
10
29
|
}
|
|
11
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Button that closes its wrapping `<dialog>`, showing an X icon by default.
|
|
32
|
+
*
|
|
33
|
+
* @param children Optional button content (defaults to an X icon).
|
|
34
|
+
* @param variants Button styling variants.
|
|
35
|
+
* @returns The close button element.
|
|
36
|
+
* @example <DialogCloseButton plain />
|
|
37
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialog/DialogCloseButton
|
|
38
|
+
*/
|
|
12
39
|
export declare function DialogCloseButton({ children, ...variants }: DialogCloseButtonProps): ReactElement;
|
package/ui/dialog/Dialog.js
CHANGED
|
@@ -3,6 +3,15 @@ import { XMarkIcon } from "@heroicons/react/24/solid";
|
|
|
3
3
|
import { memo, Suspense, useEffect, useRef } from "react";
|
|
4
4
|
import { getModuleClass } from "../util/css.js";
|
|
5
5
|
import styles from "./Dialog.module.css";
|
|
6
|
+
/**
|
|
7
|
+
* Modal `<dialog>` element that opens on mount and includes a close button.
|
|
8
|
+
*
|
|
9
|
+
* - Opens via `showModal()` when mounted and closes on backdrop clicks, link/nav-button clicks, or the close button.
|
|
10
|
+
* - Wraps content in `<Suspense>` so lazy children can stream in.
|
|
11
|
+
*
|
|
12
|
+
* @example dialogs.show(<Dialog><p>Are you sure?</p></Dialog>);
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialog/Dialog
|
|
14
|
+
*/
|
|
6
15
|
export const Dialog = memo(({ children, onClose, ...props }) => {
|
|
7
16
|
const ref = useRef(null);
|
|
8
17
|
useEffect(() => {
|
|
@@ -19,7 +28,15 @@ function _closeOnBackdropClick({ currentTarget, target }) {
|
|
|
19
28
|
if (target instanceof Element && target.closest("a:any-link, nav button:enabled"))
|
|
20
29
|
currentTarget.close();
|
|
21
30
|
}
|
|
22
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Button that closes its wrapping `<dialog>`, showing an X icon by default.
|
|
33
|
+
*
|
|
34
|
+
* @param children Optional button content (defaults to an X icon).
|
|
35
|
+
* @param variants Button styling variants.
|
|
36
|
+
* @returns The close button element.
|
|
37
|
+
* @example <DialogCloseButton plain />
|
|
38
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialog/DialogCloseButton
|
|
39
|
+
*/
|
|
23
40
|
export function DialogCloseButton({ children = _jsx(XMarkIcon, {}), ...variants }) {
|
|
24
41
|
return (_jsx("button", { type: "button", title: "Close", className: getModuleClass(styles, "button", variants), onClick: _closeOnButtonClick, children: children }));
|
|
25
42
|
}
|
package/ui/dialog/Dialog.tsx
CHANGED
|
@@ -6,10 +6,24 @@ import { getModuleClass } from "../util/css.js";
|
|
|
6
6
|
import type { OptionalChildProps } from "../util/props.js";
|
|
7
7
|
import styles from "./Dialog.module.css";
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Props for `<Dialog>` — optional `children` content and an `onClose` callback.
|
|
11
|
+
*
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialog/DialogProps
|
|
13
|
+
*/
|
|
9
14
|
export interface DialogProps extends OptionalChildProps {
|
|
10
15
|
onClose?: Callback;
|
|
11
16
|
}
|
|
12
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Modal `<dialog>` element that opens on mount and includes a close button.
|
|
20
|
+
*
|
|
21
|
+
* - Opens via `showModal()` when mounted and closes on backdrop clicks, link/nav-button clicks, or the close button.
|
|
22
|
+
* - Wraps content in `<Suspense>` so lazy children can stream in.
|
|
23
|
+
*
|
|
24
|
+
* @example dialogs.show(<Dialog><p>Are you sure?</p></Dialog>);
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialog/Dialog
|
|
26
|
+
*/
|
|
13
27
|
export const Dialog = memo(({ children, onClose, ...props }: DialogProps) => {
|
|
14
28
|
const ref = useRef<HTMLDialogElement>(null);
|
|
15
29
|
|
|
@@ -39,9 +53,22 @@ function _closeOnBackdropClick({ currentTarget, target }: MouseEvent<HTMLDialogE
|
|
|
39
53
|
if (target instanceof Element && target.closest("a:any-link, nav button:enabled")) currentTarget.close();
|
|
40
54
|
}
|
|
41
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Props for `<DialogCloseButton>` — button styling variants and optional `children` to override the X icon.
|
|
58
|
+
*
|
|
59
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialog/DialogCloseButtonProps
|
|
60
|
+
*/
|
|
42
61
|
export interface DialogCloseButtonProps extends ButtonVariants, OptionalChildProps {}
|
|
43
62
|
|
|
44
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* Button that closes its wrapping `<dialog>`, showing an X icon by default.
|
|
65
|
+
*
|
|
66
|
+
* @param children Optional button content (defaults to an X icon).
|
|
67
|
+
* @param variants Button styling variants.
|
|
68
|
+
* @returns The close button element.
|
|
69
|
+
* @example <DialogCloseButton plain />
|
|
70
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialog/DialogCloseButton
|
|
71
|
+
*/
|
|
45
72
|
export function DialogCloseButton({ children = <XMarkIcon />, ...variants }: DialogCloseButtonProps): ReactElement {
|
|
46
73
|
return (
|
|
47
74
|
<button type="button" title="Close" className={getModuleClass(styles, "button", variants)} onClick={_closeOnButtonClick}>
|
package/ui/dialog/Dialogs.d.ts
CHANGED
|
@@ -1,23 +1,70 @@
|
|
|
1
1
|
import { type ReactElement, type ReactNode } from "react";
|
|
2
2
|
import { ArrayStore } from "../../store/ArrayStore.js";
|
|
3
3
|
import type { ChildProps } from "../util/props.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Store holding the live list of open `<Dialog>` elements.
|
|
6
|
+
*
|
|
7
|
+
* - `show()` opens a new dialog; closed dialogs are removed after an animation delay.
|
|
8
|
+
*
|
|
9
|
+
* @example const dialogs = new DialogsStore(); dialogs.show(<p>Hello</p>);
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsStore
|
|
11
|
+
*/
|
|
5
12
|
export declare class DialogsStore extends ArrayStore<ReactElement> {
|
|
6
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Open a new dialog wrapping the given content.
|
|
15
|
+
*
|
|
16
|
+
* @param children The content to show inside the dialog.
|
|
17
|
+
* @example dialogs.show(<ConfirmForm />);
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsStore/show
|
|
19
|
+
*/
|
|
7
20
|
show(children: ReactNode): void;
|
|
8
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Hide all currently visible dialogs.
|
|
23
|
+
*
|
|
24
|
+
* @example dialogs.hideAll();
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsStore/hideAll
|
|
26
|
+
*/
|
|
9
27
|
hideAll(): void;
|
|
10
28
|
}
|
|
11
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Read the current `DialogsStore` from the nearest `<DialogsContext>`.
|
|
31
|
+
*
|
|
32
|
+
* @returns The current `DialogsStore`.
|
|
33
|
+
* @example requireDialogs().show(<ConfirmForm />);
|
|
34
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/requireDialogs
|
|
35
|
+
*/
|
|
12
36
|
export declare function requireDialogs(): DialogsStore;
|
|
13
37
|
declare const _componentProps: unique symbol;
|
|
38
|
+
/**
|
|
39
|
+
* Props for `<DialogsContext>` — the `children` subtree the dialogs store is provided to.
|
|
40
|
+
*
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsContextProps
|
|
42
|
+
*/
|
|
14
43
|
export interface DialogsContextProps extends ChildProps {
|
|
15
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Props for `<Dialogs>` — takes no props (branded empty interface).
|
|
47
|
+
*
|
|
48
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsProps
|
|
49
|
+
*/
|
|
16
50
|
export interface DialogsProps {
|
|
17
51
|
readonly [_componentProps]?: never;
|
|
18
52
|
}
|
|
19
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Provider that creates a fresh `DialogsStore` and shares it with its subtree.
|
|
55
|
+
*
|
|
56
|
+
* @param children The subtree that can open dialogs via `requireDialogs()`.
|
|
57
|
+
* @returns The dialogs context provider wrapping `children`.
|
|
58
|
+
* @example <DialogsContext><App /></DialogsContext>
|
|
59
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsContext
|
|
60
|
+
*/
|
|
20
61
|
export declare function DialogsContext({ children }: DialogsContextProps): ReactElement;
|
|
21
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Render the open dialogs from the current `DialogsContext`.
|
|
64
|
+
*
|
|
65
|
+
* @returns The list of open dialog elements, or `null` when there are none.
|
|
66
|
+
* @example <DialogsContext><App /><Dialogs /></DialogsContext>
|
|
67
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/Dialogs
|
|
68
|
+
*/
|
|
22
69
|
export declare function Dialogs(): ReactNode | null;
|
|
23
70
|
export {};
|
package/ui/dialog/Dialogs.js
CHANGED
|
@@ -7,9 +7,22 @@ import { getRandomKey } from "../../util/random.js";
|
|
|
7
7
|
import { Dialog } from "./Dialog.js";
|
|
8
8
|
/** How long before a hidden dialogs are removed from the DOM (allow time for animates to complete). */
|
|
9
9
|
const REMOVE_DELAY = 500;
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Store holding the live list of open `<Dialog>` elements.
|
|
12
|
+
*
|
|
13
|
+
* - `show()` opens a new dialog; closed dialogs are removed after an animation delay.
|
|
14
|
+
*
|
|
15
|
+
* @example const dialogs = new DialogsStore(); dialogs.show(<p>Hello</p>);
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsStore
|
|
17
|
+
*/
|
|
11
18
|
export class DialogsStore extends ArrayStore {
|
|
12
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Open a new dialog wrapping the given content.
|
|
21
|
+
*
|
|
22
|
+
* @param children The content to show inside the dialog.
|
|
23
|
+
* @example dialogs.show(<ConfirmForm />);
|
|
24
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsStore/show
|
|
25
|
+
*/
|
|
13
26
|
show(children) {
|
|
14
27
|
const dialog = (_jsx(Dialog
|
|
15
28
|
// Add a `key=""` so dialogs can be rendered directly and added/removed in any order.
|
|
@@ -20,7 +33,12 @@ export class DialogsStore extends ArrayStore {
|
|
|
20
33
|
}, children: children }, getRandomKey()));
|
|
21
34
|
this.add(dialog);
|
|
22
35
|
}
|
|
23
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Hide all currently visible dialogs.
|
|
38
|
+
*
|
|
39
|
+
* @example dialogs.hideAll();
|
|
40
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsStore/hideAll
|
|
41
|
+
*/
|
|
24
42
|
hideAll() {
|
|
25
43
|
this.delete(...this.value);
|
|
26
44
|
}
|
|
@@ -28,15 +46,34 @@ export class DialogsStore extends ArrayStore {
|
|
|
28
46
|
/** Context to get the current `DialogsStore` created by a `<DialogsWrapper>`. */
|
|
29
47
|
const _DialogsContext = createContext(new DialogsStore());
|
|
30
48
|
_DialogsContext.displayName = "DialogsContext";
|
|
31
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Read the current `DialogsStore` from the nearest `<DialogsContext>`.
|
|
51
|
+
*
|
|
52
|
+
* @returns The current `DialogsStore`.
|
|
53
|
+
* @example requireDialogs().show(<ConfirmForm />);
|
|
54
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/requireDialogs
|
|
55
|
+
*/
|
|
32
56
|
export function requireDialogs() {
|
|
33
57
|
return use(_DialogsContext);
|
|
34
58
|
}
|
|
35
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Provider that creates a fresh `DialogsStore` and shares it with its subtree.
|
|
61
|
+
*
|
|
62
|
+
* @param children The subtree that can open dialogs via `requireDialogs()`.
|
|
63
|
+
* @returns The dialogs context provider wrapping `children`.
|
|
64
|
+
* @example <DialogsContext><App /></DialogsContext>
|
|
65
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsContext
|
|
66
|
+
*/
|
|
36
67
|
export function DialogsContext({ children }) {
|
|
37
68
|
return _jsx(_DialogsContext, { value: useInstance(DialogsStore), children: children });
|
|
38
69
|
}
|
|
39
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* Render the open dialogs from the current `DialogsContext`.
|
|
72
|
+
*
|
|
73
|
+
* @returns The list of open dialog elements, or `null` when there are none.
|
|
74
|
+
* @example <DialogsContext><App /><Dialogs /></DialogsContext>
|
|
75
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/Dialogs
|
|
76
|
+
*/
|
|
40
77
|
export function Dialogs() {
|
|
41
78
|
const dialogs = useStore(requireDialogs());
|
|
42
79
|
return dialogs ? dialogs.value : null;
|
package/ui/dialog/Dialogs.tsx
CHANGED
|
@@ -9,9 +9,22 @@ import { Dialog } from "./Dialog.js";
|
|
|
9
9
|
/** How long before a hidden dialogs are removed from the DOM (allow time for animates to complete). */
|
|
10
10
|
const REMOVE_DELAY = 500;
|
|
11
11
|
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Store holding the live list of open `<Dialog>` elements.
|
|
14
|
+
*
|
|
15
|
+
* - `show()` opens a new dialog; closed dialogs are removed after an animation delay.
|
|
16
|
+
*
|
|
17
|
+
* @example const dialogs = new DialogsStore(); dialogs.show(<p>Hello</p>);
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsStore
|
|
19
|
+
*/
|
|
13
20
|
export class DialogsStore extends ArrayStore<ReactElement> {
|
|
14
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Open a new dialog wrapping the given content.
|
|
23
|
+
*
|
|
24
|
+
* @param children The content to show inside the dialog.
|
|
25
|
+
* @example dialogs.show(<ConfirmForm />);
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsStore/show
|
|
27
|
+
*/
|
|
15
28
|
show(children: ReactNode) {
|
|
16
29
|
const dialog = (
|
|
17
30
|
<Dialog
|
|
@@ -28,7 +41,12 @@ export class DialogsStore extends ArrayStore<ReactElement> {
|
|
|
28
41
|
this.add(dialog);
|
|
29
42
|
}
|
|
30
43
|
|
|
31
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Hide all currently visible dialogs.
|
|
46
|
+
*
|
|
47
|
+
* @example dialogs.hideAll();
|
|
48
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsStore/hideAll
|
|
49
|
+
*/
|
|
32
50
|
hideAll() {
|
|
33
51
|
this.delete(...this.value);
|
|
34
52
|
}
|
|
@@ -38,25 +56,54 @@ export class DialogsStore extends ArrayStore<ReactElement> {
|
|
|
38
56
|
const _DialogsContext = createContext<DialogsStore>(new DialogsStore());
|
|
39
57
|
_DialogsContext.displayName = "DialogsContext";
|
|
40
58
|
|
|
41
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Read the current `DialogsStore` from the nearest `<DialogsContext>`.
|
|
61
|
+
*
|
|
62
|
+
* @returns The current `DialogsStore`.
|
|
63
|
+
* @example requireDialogs().show(<ConfirmForm />);
|
|
64
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/requireDialogs
|
|
65
|
+
*/
|
|
42
66
|
export function requireDialogs(): DialogsStore {
|
|
43
67
|
return use(_DialogsContext);
|
|
44
68
|
}
|
|
45
69
|
|
|
46
70
|
declare const _componentProps: unique symbol;
|
|
47
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Props for `<DialogsContext>` — the `children` subtree the dialogs store is provided to.
|
|
74
|
+
*
|
|
75
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsContextProps
|
|
76
|
+
*/
|
|
48
77
|
export interface DialogsContextProps extends ChildProps {}
|
|
49
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Props for `<Dialogs>` — takes no props (branded empty interface).
|
|
81
|
+
*
|
|
82
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsProps
|
|
83
|
+
*/
|
|
50
84
|
export interface DialogsProps {
|
|
51
85
|
readonly [_componentProps]?: never;
|
|
52
86
|
}
|
|
53
87
|
|
|
54
|
-
/**
|
|
88
|
+
/**
|
|
89
|
+
* Provider that creates a fresh `DialogsStore` and shares it with its subtree.
|
|
90
|
+
*
|
|
91
|
+
* @param children The subtree that can open dialogs via `requireDialogs()`.
|
|
92
|
+
* @returns The dialogs context provider wrapping `children`.
|
|
93
|
+
* @example <DialogsContext><App /></DialogsContext>
|
|
94
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/DialogsContext
|
|
95
|
+
*/
|
|
55
96
|
export function DialogsContext({ children }: DialogsContextProps): ReactElement {
|
|
56
97
|
return <_DialogsContext value={useInstance(DialogsStore)}>{children}</_DialogsContext>;
|
|
57
98
|
}
|
|
58
99
|
|
|
59
|
-
/**
|
|
100
|
+
/**
|
|
101
|
+
* Render the open dialogs from the current `DialogsContext`.
|
|
102
|
+
*
|
|
103
|
+
* @returns The list of open dialog elements, or `null` when there are none.
|
|
104
|
+
* @example <DialogsContext><App /><Dialogs /></DialogsContext>
|
|
105
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Dialogs/Dialogs
|
|
106
|
+
*/
|
|
60
107
|
export function Dialogs(): ReactNode | null {
|
|
61
108
|
const dialogs = useStore(requireDialogs());
|
|
62
109
|
return dialogs ? dialogs.value : null;
|
package/ui/dialog/Modal.d.ts
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
2
|
import type { OptionalChildProps } from "../util/props.js";
|
|
3
|
+
/**
|
|
4
|
+
* Props for `<Modal>` — optional `children` content.
|
|
5
|
+
*
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Modal/ModalProps
|
|
7
|
+
*/
|
|
3
8
|
export interface ModalProps extends OptionalChildProps {
|
|
4
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Styled `<aside>` overlay container for modal content.
|
|
12
|
+
*
|
|
13
|
+
* @param children The modal content.
|
|
14
|
+
* @returns The modal container element.
|
|
15
|
+
* @example <Modal><p>Modal content</p></Modal>
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Modal/Modal
|
|
17
|
+
*/
|
|
5
18
|
export declare function Modal({ children }: ModalProps): ReactElement;
|
package/ui/dialog/Modal.js
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import styles from "./Modal.module.css";
|
|
3
|
+
/**
|
|
4
|
+
* Styled `<aside>` overlay container for modal content.
|
|
5
|
+
*
|
|
6
|
+
* @param children The modal content.
|
|
7
|
+
* @returns The modal container element.
|
|
8
|
+
* @example <Modal><p>Modal content</p></Modal>
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Modal/Modal
|
|
10
|
+
*/
|
|
3
11
|
export function Modal({ children }) {
|
|
4
12
|
return _jsx("aside", { className: styles.modal, children: children });
|
|
5
13
|
}
|
package/ui/dialog/Modal.tsx
CHANGED
|
@@ -2,8 +2,21 @@ import type { ReactElement } from "react";
|
|
|
2
2
|
import type { OptionalChildProps } from "../util/props.js";
|
|
3
3
|
import styles from "./Modal.module.css";
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Props for `<Modal>` — optional `children` content.
|
|
7
|
+
*
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Modal/ModalProps
|
|
9
|
+
*/
|
|
5
10
|
export interface ModalProps extends OptionalChildProps {}
|
|
6
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Styled `<aside>` overlay container for modal content.
|
|
14
|
+
*
|
|
15
|
+
* @param children The modal content.
|
|
16
|
+
* @returns The modal container element.
|
|
17
|
+
* @example <Modal><p>Modal content</p></Modal>
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/ui/dialog/Modal/Modal
|
|
19
|
+
*/
|
|
7
20
|
export function Modal({ children }: ModalProps): ReactElement {
|
|
8
21
|
return <aside className={styles.modal}>{children}</aside>;
|
|
9
22
|
}
|