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
|
@@ -5,13 +5,24 @@ import type { OptionalChildProps } from "../util/props.js";
|
|
|
5
5
|
import CENTERED_LAYOUT_CSS from "./CenteredLayout.module.css";
|
|
6
6
|
import { LAYOUT_CLASS } from "./Layout.js";
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Props for `<CenteredLayout>` — optional `children` and a `fullWidth` flag to drop the max-width.
|
|
10
|
+
*
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/CenteredLayout/CenteredLayoutProps
|
|
12
|
+
*/
|
|
8
13
|
export interface CenteredLayoutProps extends OptionalChildProps {
|
|
9
14
|
fullWidth?: boolean;
|
|
10
15
|
}
|
|
11
16
|
|
|
12
17
|
/**
|
|
13
|
-
* Layout that
|
|
18
|
+
* Layout that centres its content with no header/footer and a narrow max-width.
|
|
14
19
|
* - Used for e.g. login/register/error/form pages where the content is the only focus.
|
|
20
|
+
*
|
|
21
|
+
* @param children The content to centre.
|
|
22
|
+
* @param fullWidth Drop the narrow max-width and let content fill the width (defaults to `false`).
|
|
23
|
+
* @returns The centred layout element.
|
|
24
|
+
* @example <CenteredLayout><LoginForm /></CenteredLayout>
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/CenteredLayout/CenteredLayout
|
|
15
26
|
*/
|
|
16
27
|
export function CenteredLayout({ children, fullWidth = false }: CenteredLayoutProps): ReactElement {
|
|
17
28
|
const { path } = requireMetaURL();
|
package/ui/layout/Layout.d.ts
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Resolved `.layout` class for composing the layout's padding/scroll/safe-area behaviour onto a custom element.
|
|
3
|
+
*
|
|
4
|
+
* @example <main className={LAYOUT_CLASS}>…</main>
|
|
5
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/Layout/LAYOUT_CLASS
|
|
6
|
+
*/
|
|
2
7
|
export declare const LAYOUT_CLASS: string | undefined;
|
|
3
8
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
9
|
+
* Track the dynamic viewport height so layout safe-area insets follow the on-screen keyboard.
|
|
10
|
+
*
|
|
11
|
+
* - Writes a `--layout-inset-bottom` custom property reflecting the space hidden behind the keyboard.
|
|
6
12
|
*
|
|
13
|
+
* @returns A cleanup function that removes the listeners and property, or `undefined` when `visualViewport` is unavailable.
|
|
7
14
|
* @todo This can be removed once Safari iOS supports interactive-widget viewport property. https://caniuse.com/mdn-html_elements_meta_name_viewport_interactive-widget
|
|
15
|
+
* @example useEffect(useSafeKeyboardArea, []);
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/Layout/useSafeKeyboardArea
|
|
8
17
|
*/
|
|
9
18
|
export declare function useSafeKeyboardArea(): (() => void) | undefined;
|
package/ui/layout/Layout.js
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
import { getModuleClass } from "../util/css.js";
|
|
2
2
|
import styles from "./Layout.module.css";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Resolved `.layout` class for composing the layout's padding/scroll/safe-area behaviour onto a custom element.
|
|
5
|
+
*
|
|
6
|
+
* @example <main className={LAYOUT_CLASS}>…</main>
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/Layout/LAYOUT_CLASS
|
|
8
|
+
*/
|
|
4
9
|
export const LAYOUT_CLASS = getModuleClass(styles, "layout");
|
|
5
10
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
11
|
+
* Track the dynamic viewport height so layout safe-area insets follow the on-screen keyboard.
|
|
12
|
+
*
|
|
13
|
+
* - Writes a `--layout-inset-bottom` custom property reflecting the space hidden behind the keyboard.
|
|
8
14
|
*
|
|
15
|
+
* @returns A cleanup function that removes the listeners and property, or `undefined` when `visualViewport` is unavailable.
|
|
9
16
|
* @todo This can be removed once Safari iOS supports interactive-widget viewport property. https://caniuse.com/mdn-html_elements_meta_name_viewport_interactive-widget
|
|
17
|
+
* @example useEffect(useSafeKeyboardArea, []);
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/Layout/useSafeKeyboardArea
|
|
10
19
|
*/
|
|
11
20
|
export function useSafeKeyboardArea() {
|
|
12
21
|
const vv = window.visualViewport;
|
package/ui/layout/Layout.ts
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
import { getModuleClass } from "../util/css.js";
|
|
2
2
|
import styles from "./Layout.module.css";
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Resolved `.layout` class for composing the layout's padding/scroll/safe-area behaviour onto a custom element.
|
|
6
|
+
*
|
|
7
|
+
* @example <main className={LAYOUT_CLASS}>…</main>
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/Layout/LAYOUT_CLASS
|
|
9
|
+
*/
|
|
5
10
|
export const LAYOUT_CLASS = getModuleClass(styles, "layout");
|
|
6
11
|
|
|
7
12
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
13
|
+
* Track the dynamic viewport height so layout safe-area insets follow the on-screen keyboard.
|
|
14
|
+
*
|
|
15
|
+
* - Writes a `--layout-inset-bottom` custom property reflecting the space hidden behind the keyboard.
|
|
10
16
|
*
|
|
17
|
+
* @returns A cleanup function that removes the listeners and property, or `undefined` when `visualViewport` is unavailable.
|
|
11
18
|
* @todo This can be removed once Safari iOS supports interactive-widget viewport property. https://caniuse.com/mdn-html_elements_meta_name_viewport_interactive-widget
|
|
19
|
+
* @example useEffect(useSafeKeyboardArea, []);
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/Layout/useSafeKeyboardArea
|
|
12
21
|
*/
|
|
13
22
|
export function useSafeKeyboardArea() {
|
|
14
23
|
const vv = window.visualViewport;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { type ReactElement, type ReactNode } from "react";
|
|
2
2
|
import type { OptionalChildProps } from "../util/props.js";
|
|
3
|
+
/**
|
|
4
|
+
* Props for `<SidebarLayout>` — the `sidebar` column content, main `children`, and a `right` placement flag.
|
|
5
|
+
*
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/SidebarLayout/SidebarLayoutProps
|
|
7
|
+
*/
|
|
3
8
|
export interface SidebarLayoutProps extends OptionalChildProps {
|
|
4
9
|
/** Content rendered in the fixed-width side column. */
|
|
5
10
|
sidebar: ReactNode;
|
|
@@ -13,5 +18,12 @@ export interface SidebarLayoutProps extends OptionalChildProps {
|
|
|
13
18
|
* - While the drawer is open an overlay dims the rest of the page; clicking the overlay closes the drawer.
|
|
14
19
|
* - Inside a `<Navigation>` the drawer closes itself whenever the route changes (e.g. tapping a sidebar link).
|
|
15
20
|
* - Use the `--sidebar-layout-width`, `--sidebar-layout-bg`, `--sidebar-layout-border`, and `--sidebar-layout-color-border` custom properties to override defaults.
|
|
21
|
+
*
|
|
22
|
+
* @param sidebar The side-column content, rendered inside a `<nav>`.
|
|
23
|
+
* @param children The main scrollable content.
|
|
24
|
+
* @param right Render the sidebar on the right rather than the left (defaults to `false`).
|
|
25
|
+
* @returns The sidebar layout element.
|
|
26
|
+
* @example <SidebarLayout sidebar={<Menu />}><Page /></SidebarLayout>
|
|
27
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/SidebarLayout/SidebarLayout
|
|
16
28
|
*/
|
|
17
29
|
export declare function SidebarLayout({ sidebar, children, right }: SidebarLayoutProps): ReactElement;
|
|
@@ -13,6 +13,13 @@ import SIDEBAR_LAYOUT_CSS from "./SidebarLayout.module.css";
|
|
|
13
13
|
* - While the drawer is open an overlay dims the rest of the page; clicking the overlay closes the drawer.
|
|
14
14
|
* - Inside a `<Navigation>` the drawer closes itself whenever the route changes (e.g. tapping a sidebar link).
|
|
15
15
|
* - Use the `--sidebar-layout-width`, `--sidebar-layout-bg`, `--sidebar-layout-border`, and `--sidebar-layout-color-border` custom properties to override defaults.
|
|
16
|
+
*
|
|
17
|
+
* @param sidebar The side-column content, rendered inside a `<nav>`.
|
|
18
|
+
* @param children The main scrollable content.
|
|
19
|
+
* @param right Render the sidebar on the right rather than the left (defaults to `false`).
|
|
20
|
+
* @returns The sidebar layout element.
|
|
21
|
+
* @example <SidebarLayout sidebar={<Menu />}><Page /></SidebarLayout>
|
|
22
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/SidebarLayout/SidebarLayout
|
|
16
23
|
*/
|
|
17
24
|
export function SidebarLayout({ sidebar, children, right = false }) {
|
|
18
25
|
const { path } = requireMetaURL();
|
|
@@ -7,6 +7,11 @@ import type { OptionalChildProps } from "../util/props.js";
|
|
|
7
7
|
import { LAYOUT_CLASS } from "./Layout.js";
|
|
8
8
|
import SIDEBAR_LAYOUT_CSS from "./SidebarLayout.module.css";
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Props for `<SidebarLayout>` — the `sidebar` column content, main `children`, and a `right` placement flag.
|
|
12
|
+
*
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/SidebarLayout/SidebarLayoutProps
|
|
14
|
+
*/
|
|
10
15
|
export interface SidebarLayoutProps extends OptionalChildProps {
|
|
11
16
|
/** Content rendered in the fixed-width side column. */
|
|
12
17
|
sidebar: ReactNode;
|
|
@@ -21,6 +26,13 @@ export interface SidebarLayoutProps extends OptionalChildProps {
|
|
|
21
26
|
* - While the drawer is open an overlay dims the rest of the page; clicking the overlay closes the drawer.
|
|
22
27
|
* - Inside a `<Navigation>` the drawer closes itself whenever the route changes (e.g. tapping a sidebar link).
|
|
23
28
|
* - Use the `--sidebar-layout-width`, `--sidebar-layout-bg`, `--sidebar-layout-border`, and `--sidebar-layout-color-border` custom properties to override defaults.
|
|
29
|
+
*
|
|
30
|
+
* @param sidebar The side-column content, rendered inside a `<nav>`.
|
|
31
|
+
* @param children The main scrollable content.
|
|
32
|
+
* @param right Render the sidebar on the right rather than the left (defaults to `false`).
|
|
33
|
+
* @returns The sidebar layout element.
|
|
34
|
+
* @example <SidebarLayout sidebar={<Menu />}><Page /></SidebarLayout>
|
|
35
|
+
* @see https://dhoulb.github.io/shelving/ui/layout/SidebarLayout/SidebarLayout
|
|
24
36
|
*/
|
|
25
37
|
export function SidebarLayout({ sidebar, children, right = false }: SidebarLayoutProps): ReactElement {
|
|
26
38
|
const { path } = requireMetaURL();
|
package/ui/menu/Menu.d.ts
CHANGED
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
2
|
import { type ClickableProps } from "../form/Clickable.js";
|
|
3
3
|
import type { OptionalChildProps } from "../util/props.js";
|
|
4
|
+
/**
|
|
5
|
+
* Props for `<Menu>` — optional `<MenuItem>` `children`.
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuProps
|
|
8
|
+
*/
|
|
4
9
|
export interface MenuProps extends OptionalChildProps {
|
|
5
10
|
}
|
|
6
11
|
/**
|
|
7
12
|
* A `<menu>` list of `<MenuItem>` children.
|
|
8
13
|
* - Renders as a bare `<menu>` element — semantically equivalent to `<ul>` per HTML spec but more meaningful for menu contexts. Place inside a `<nav>` (or use the sidebar-style nav at the layout level) if a navigation landmark is needed.
|
|
9
14
|
* - Nested `<Menu>` instances (typically inside a `<MenuItem>`) get indented via the `.menu .menu` CSS rule.
|
|
15
|
+
*
|
|
16
|
+
* @param children The `<MenuItem>` entries to list.
|
|
17
|
+
* @returns The menu element.
|
|
18
|
+
* @example <Menu><MenuItem href="/home">Home</MenuItem></Menu>
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/ui/menu/Menu/Menu
|
|
10
20
|
*/
|
|
11
21
|
export declare function Menu({ children }: MenuProps): ReactNode;
|
|
22
|
+
/**
|
|
23
|
+
* Props for `<MenuItem>` — `<Clickable>` props plus `children` whose first node is the label and the rest the submenu.
|
|
24
|
+
*
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuItemProps
|
|
26
|
+
*/
|
|
12
27
|
export interface MenuItemProps extends ClickableProps {
|
|
13
28
|
/**
|
|
14
29
|
* The first child becomes the link label (rendered inside the `<a>`).
|
|
@@ -20,5 +35,12 @@ export interface MenuItemProps extends ClickableProps {
|
|
|
20
35
|
* A `<li>` containing an `<a>` link, plus optional submenu content shown when this item is "proud".
|
|
21
36
|
* - Reads the current page URL from `<Meta>` and computes `active` / `proud` against its own `href`.
|
|
22
37
|
* - Splits `children` into `[label, ...after]`: label goes inside the `<a>`; `after` is rendered as siblings below it, only when proud.
|
|
38
|
+
*
|
|
39
|
+
* @param href The link target, used to compute `active`/`proud` against the current URL.
|
|
40
|
+
* @param children The label (first node) and optional submenu (remaining nodes).
|
|
41
|
+
* @param props Additional `<Clickable>` props.
|
|
42
|
+
* @returns The menu item element.
|
|
43
|
+
* @example <MenuItem href="/settings">Settings</MenuItem>
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuItem
|
|
23
45
|
*/
|
|
24
46
|
export declare function MenuItem({ href, children, ...props }: MenuItemProps): ReactNode;
|
package/ui/menu/Menu.js
CHANGED
|
@@ -14,6 +14,11 @@ const MENU_ACTIVE_CLASS = getModuleClass(MENU_CSS, "active");
|
|
|
14
14
|
* A `<menu>` list of `<MenuItem>` children.
|
|
15
15
|
* - Renders as a bare `<menu>` element — semantically equivalent to `<ul>` per HTML spec but more meaningful for menu contexts. Place inside a `<nav>` (or use the sidebar-style nav at the layout level) if a navigation landmark is needed.
|
|
16
16
|
* - Nested `<Menu>` instances (typically inside a `<MenuItem>`) get indented via the `.menu .menu` CSS rule.
|
|
17
|
+
*
|
|
18
|
+
* @param children The `<MenuItem>` entries to list.
|
|
19
|
+
* @returns The menu element.
|
|
20
|
+
* @example <Menu><MenuItem href="/home">Home</MenuItem></Menu>
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/ui/menu/Menu/Menu
|
|
17
22
|
*/
|
|
18
23
|
export function Menu({ children }) {
|
|
19
24
|
return _jsx("menu", { className: MENU_CLASS, children: children });
|
|
@@ -22,6 +27,13 @@ export function Menu({ children }) {
|
|
|
22
27
|
* A `<li>` containing an `<a>` link, plus optional submenu content shown when this item is "proud".
|
|
23
28
|
* - Reads the current page URL from `<Meta>` and computes `active` / `proud` against its own `href`.
|
|
24
29
|
* - Splits `children` into `[label, ...after]`: label goes inside the `<a>`; `after` is rendered as siblings below it, only when proud.
|
|
30
|
+
*
|
|
31
|
+
* @param href The link target, used to compute `active`/`proud` against the current URL.
|
|
32
|
+
* @param children The label (first node) and optional submenu (remaining nodes).
|
|
33
|
+
* @param props Additional `<Clickable>` props.
|
|
34
|
+
* @returns The menu item element.
|
|
35
|
+
* @example <MenuItem href="/settings">Settings</MenuItem>
|
|
36
|
+
* @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuItem
|
|
25
37
|
*/
|
|
26
38
|
export function MenuItem({ href, children, ...props }) {
|
|
27
39
|
const { url, root } = requireMeta();
|
package/ui/menu/Menu.tsx
CHANGED
|
@@ -13,17 +13,32 @@ const MENU_LINK_CLASS = getModuleClass(MENU_CSS, "link");
|
|
|
13
13
|
const MENU_PROUD_CLASS = getModuleClass(MENU_CSS, "proud");
|
|
14
14
|
const MENU_ACTIVE_CLASS = getModuleClass(MENU_CSS, "active");
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Props for `<Menu>` — optional `<MenuItem>` `children`.
|
|
18
|
+
*
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuProps
|
|
20
|
+
*/
|
|
16
21
|
export interface MenuProps extends OptionalChildProps {}
|
|
17
22
|
|
|
18
23
|
/**
|
|
19
24
|
* A `<menu>` list of `<MenuItem>` children.
|
|
20
25
|
* - Renders as a bare `<menu>` element — semantically equivalent to `<ul>` per HTML spec but more meaningful for menu contexts. Place inside a `<nav>` (or use the sidebar-style nav at the layout level) if a navigation landmark is needed.
|
|
21
26
|
* - Nested `<Menu>` instances (typically inside a `<MenuItem>`) get indented via the `.menu .menu` CSS rule.
|
|
27
|
+
*
|
|
28
|
+
* @param children The `<MenuItem>` entries to list.
|
|
29
|
+
* @returns The menu element.
|
|
30
|
+
* @example <Menu><MenuItem href="/home">Home</MenuItem></Menu>
|
|
31
|
+
* @see https://dhoulb.github.io/shelving/ui/menu/Menu/Menu
|
|
22
32
|
*/
|
|
23
33
|
export function Menu({ children }: MenuProps): ReactNode {
|
|
24
34
|
return <menu className={MENU_CLASS}>{children}</menu>;
|
|
25
35
|
}
|
|
26
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Props for `<MenuItem>` — `<Clickable>` props plus `children` whose first node is the label and the rest the submenu.
|
|
39
|
+
*
|
|
40
|
+
* @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuItemProps
|
|
41
|
+
*/
|
|
27
42
|
export interface MenuItemProps extends ClickableProps {
|
|
28
43
|
/**
|
|
29
44
|
* The first child becomes the link label (rendered inside the `<a>`).
|
|
@@ -36,6 +51,13 @@ export interface MenuItemProps extends ClickableProps {
|
|
|
36
51
|
* A `<li>` containing an `<a>` link, plus optional submenu content shown when this item is "proud".
|
|
37
52
|
* - Reads the current page URL from `<Meta>` and computes `active` / `proud` against its own `href`.
|
|
38
53
|
* - Splits `children` into `[label, ...after]`: label goes inside the `<a>`; `after` is rendered as siblings below it, only when proud.
|
|
54
|
+
*
|
|
55
|
+
* @param href The link target, used to compute `active`/`proud` against the current URL.
|
|
56
|
+
* @param children The label (first node) and optional submenu (remaining nodes).
|
|
57
|
+
* @param props Additional `<Clickable>` props.
|
|
58
|
+
* @returns The menu item element.
|
|
59
|
+
* @example <MenuItem href="/settings">Settings</MenuItem>
|
|
60
|
+
* @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuItem
|
|
39
61
|
*/
|
|
40
62
|
export function MenuItem({ href, children, ...props }: MenuItemProps): ReactNode {
|
|
41
63
|
const { url, root } = requireMeta();
|
package/ui/misc/Catcher.d.ts
CHANGED
|
@@ -2,12 +2,38 @@ import { Component, type ReactElement, type ReactNode } from "react";
|
|
|
2
2
|
import type { Callback } from "../../util/function.js";
|
|
3
3
|
import { type ButtonVariants } from "../form/Button.js";
|
|
4
4
|
import type { ChildProps, OptionalChildProps } from "../util/props.js";
|
|
5
|
+
/**
|
|
6
|
+
* Props for `<RetryButton>` — `<Button>` variants plus optional `children` to override the default "Retry" label.
|
|
7
|
+
*
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/RetryButtonProps
|
|
9
|
+
*/
|
|
5
10
|
export interface RetryButtonProps extends ButtonVariants, OptionalChildProps {
|
|
6
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Button that retries the nearest `<Catcher>` error boundary when clicked.
|
|
14
|
+
*
|
|
15
|
+
* - Reads the retry callback from `<Catcher>`'s private context, so it renders `null` when there is no boundary above it to retry.
|
|
16
|
+
* - Defaults to an "Retry" label with a refresh icon; pass `children` to override.
|
|
17
|
+
*
|
|
18
|
+
* @param props `<Button>` variants and optional `children` for the label.
|
|
19
|
+
* @returns The retry button, or `null` when not inside a `<Catcher>`.
|
|
20
|
+
* @example <RetryButton small />
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/RetryButton
|
|
22
|
+
*/
|
|
7
23
|
export declare function RetryButton({ children, ...props }: RetryButtonProps): ReactElement | null;
|
|
24
|
+
/**
|
|
25
|
+
* Props for a component that renders a caught error `reason`.
|
|
26
|
+
*
|
|
27
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorComponentProps
|
|
28
|
+
*/
|
|
8
29
|
export interface ErrorComponentProps {
|
|
9
30
|
reason: unknown;
|
|
10
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Props for `<Catcher>` — the `children` to guard plus the `as` component used to render any caught error.
|
|
34
|
+
*
|
|
35
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/CatcherProps
|
|
36
|
+
*/
|
|
11
37
|
export interface CatcherProps extends ChildProps {
|
|
12
38
|
/** Component to render an error (defaults to `<ErrorNotice />`) */
|
|
13
39
|
as: (props: ErrorComponentProps) => ReactElement;
|
|
@@ -17,8 +43,14 @@ type CatcherState = {
|
|
|
17
43
|
reason: unknown;
|
|
18
44
|
};
|
|
19
45
|
/**
|
|
20
|
-
* React
|
|
21
|
-
*
|
|
46
|
+
* React error boundary that renders a fallback component when any descendant throws.
|
|
47
|
+
*
|
|
48
|
+
* - Catches render-time errors below it and shows the `as` component (defaults to `<ErrorNotice>`) with the caught `reason`.
|
|
49
|
+
* - Provides a retry callback to descendant `<RetryButton>`s that clears the error and re-renders `children`.
|
|
50
|
+
*
|
|
51
|
+
* @example <Catcher><RiskyComponent /></Catcher>
|
|
52
|
+
* @example <Catcher as={ErrorPage}><RiskyComponent /></Catcher>
|
|
53
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/Catcher
|
|
22
54
|
*/
|
|
23
55
|
export declare class Catcher extends Component<CatcherProps, CatcherState> {
|
|
24
56
|
static defaultProps: Pick<CatcherProps, "as">;
|
|
@@ -27,16 +59,56 @@ export declare class Catcher extends Component<CatcherProps, CatcherState> {
|
|
|
27
59
|
static getDerivedStateFromError(reason: unknown): CatcherState;
|
|
28
60
|
render(): ReactNode;
|
|
29
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Props for `<PageCatcher>` — the page `children` to guard.
|
|
64
|
+
*
|
|
65
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/PageCatcherProps
|
|
66
|
+
*/
|
|
30
67
|
export interface PageCatcherProps extends ChildProps {
|
|
31
68
|
}
|
|
32
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Error boundary for a whole page that renders a full `<ErrorPage>` fallback on error.
|
|
71
|
+
*
|
|
72
|
+
* @param children The page content to guard.
|
|
73
|
+
* @returns A `<Catcher>` configured to render `<ErrorPage>` on error.
|
|
74
|
+
* @example <PageCatcher><SettingsPage /></PageCatcher>
|
|
75
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/PageCatcher
|
|
76
|
+
*/
|
|
33
77
|
export declare function PageCatcher({ children }: PageCatcherProps): ReactElement;
|
|
78
|
+
/**
|
|
79
|
+
* Props for `<ErrorNotice>` — the caught error `reason`.
|
|
80
|
+
*
|
|
81
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorNoticeProps
|
|
82
|
+
*/
|
|
34
83
|
export interface ErrorNoticeProps extends ErrorComponentProps {
|
|
35
84
|
}
|
|
36
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* Render a caught error as an inline `<Notice>` with a retry button.
|
|
87
|
+
*
|
|
88
|
+
* - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
|
|
89
|
+
*
|
|
90
|
+
* @param reason The caught error to display.
|
|
91
|
+
* @returns An error `<Notice>` containing the message and a `<RetryButton>`.
|
|
92
|
+
* @example <ErrorNotice reason={thrown} />
|
|
93
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorNotice
|
|
94
|
+
*/
|
|
37
95
|
export declare function ErrorNotice({ reason }: ErrorNoticeProps): ReactElement;
|
|
96
|
+
/**
|
|
97
|
+
* Props for `<ErrorPage>` — the caught error `reason`.
|
|
98
|
+
*
|
|
99
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorPageProps
|
|
100
|
+
*/
|
|
38
101
|
export interface ErrorPageProps extends ErrorComponentProps {
|
|
39
102
|
}
|
|
40
|
-
/**
|
|
103
|
+
/**
|
|
104
|
+
* Render a caught error as a full-page `<Page>` with an error `<Card>` and retry button.
|
|
105
|
+
*
|
|
106
|
+
* - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
|
|
107
|
+
*
|
|
108
|
+
* @param reason The caught error to display.
|
|
109
|
+
* @returns A centered error page containing the message and a `<RetryButton>`.
|
|
110
|
+
* @example <ErrorPage reason={thrown} />
|
|
111
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorPage
|
|
112
|
+
*/
|
|
41
113
|
export declare function ErrorPage({ reason }: ErrorPageProps): ReactElement;
|
|
42
114
|
export {};
|
package/ui/misc/Catcher.js
CHANGED
|
@@ -13,6 +13,17 @@ import { StatusIcon } from "./StatusIcon.js";
|
|
|
13
13
|
const RetryContext = createContext(undefined);
|
|
14
14
|
RetryContext.displayName = "RetryContext";
|
|
15
15
|
const RETRY_CHILDREN = (_jsxs(_Fragment, { children: [_jsx(ArrowPathIcon, {}), "Retry"] }));
|
|
16
|
+
/**
|
|
17
|
+
* Button that retries the nearest `<Catcher>` error boundary when clicked.
|
|
18
|
+
*
|
|
19
|
+
* - Reads the retry callback from `<Catcher>`'s private context, so it renders `null` when there is no boundary above it to retry.
|
|
20
|
+
* - Defaults to an "Retry" label with a refresh icon; pass `children` to override.
|
|
21
|
+
*
|
|
22
|
+
* @param props `<Button>` variants and optional `children` for the label.
|
|
23
|
+
* @returns The retry button, or `null` when not inside a `<Catcher>`.
|
|
24
|
+
* @example <RetryButton small />
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/RetryButton
|
|
26
|
+
*/
|
|
16
27
|
export function RetryButton({ children = RETRY_CHILDREN, ...props }) {
|
|
17
28
|
const retry = use(RetryContext);
|
|
18
29
|
if (!retry)
|
|
@@ -20,8 +31,14 @@ export function RetryButton({ children = RETRY_CHILDREN, ...props }) {
|
|
|
20
31
|
return (_jsx(Button, { onClick: retry, ...props, children: children }));
|
|
21
32
|
}
|
|
22
33
|
/**
|
|
23
|
-
* React
|
|
24
|
-
*
|
|
34
|
+
* React error boundary that renders a fallback component when any descendant throws.
|
|
35
|
+
*
|
|
36
|
+
* - Catches render-time errors below it and shows the `as` component (defaults to `<ErrorNotice>`) with the caught `reason`.
|
|
37
|
+
* - Provides a retry callback to descendant `<RetryButton>`s that clears the error and re-renders `children`.
|
|
38
|
+
*
|
|
39
|
+
* @example <Catcher><RiskyComponent /></Catcher>
|
|
40
|
+
* @example <Catcher as={ErrorPage}><RiskyComponent /></Catcher>
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/Catcher
|
|
25
42
|
*/
|
|
26
43
|
export class Catcher extends Component {
|
|
27
44
|
static defaultProps = {
|
|
@@ -45,16 +62,41 @@ export class Catcher extends Component {
|
|
|
45
62
|
return (_jsx(RetryContext, { value: retry, children: _jsx(ErrorComponent, { reason: reason }) }));
|
|
46
63
|
}
|
|
47
64
|
}
|
|
48
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Error boundary for a whole page that renders a full `<ErrorPage>` fallback on error.
|
|
67
|
+
*
|
|
68
|
+
* @param children The page content to guard.
|
|
69
|
+
* @returns A `<Catcher>` configured to render `<ErrorPage>` on error.
|
|
70
|
+
* @example <PageCatcher><SettingsPage /></PageCatcher>
|
|
71
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/PageCatcher
|
|
72
|
+
*/
|
|
49
73
|
export function PageCatcher({ children }) {
|
|
50
74
|
return _jsx(Catcher, { as: ErrorPage, children: children });
|
|
51
75
|
}
|
|
52
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Render a caught error as an inline `<Notice>` with a retry button.
|
|
78
|
+
*
|
|
79
|
+
* - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
|
|
80
|
+
*
|
|
81
|
+
* @param reason The caught error to display.
|
|
82
|
+
* @returns An error `<Notice>` containing the message and a `<RetryButton>`.
|
|
83
|
+
* @example <ErrorNotice reason={thrown} />
|
|
84
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorNotice
|
|
85
|
+
*/
|
|
53
86
|
export function ErrorNotice({ reason }) {
|
|
54
87
|
const message = getMessage(reason) ?? "Unknown error";
|
|
55
88
|
return (_jsxs(Notice, { status: "error", children: [_jsx("p", { children: message }), _jsx(RetryButton, { small: true })] }));
|
|
56
89
|
}
|
|
57
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Render a caught error as a full-page `<Page>` with an error `<Card>` and retry button.
|
|
92
|
+
*
|
|
93
|
+
* - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
|
|
94
|
+
*
|
|
95
|
+
* @param reason The caught error to display.
|
|
96
|
+
* @returns A centered error page containing the message and a `<RetryButton>`.
|
|
97
|
+
* @example <ErrorPage reason={thrown} />
|
|
98
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorPage
|
|
99
|
+
*/
|
|
58
100
|
export function ErrorPage({ reason }) {
|
|
59
101
|
const message = getMessage(reason) ?? "Unknown error";
|
|
60
102
|
return (_jsx(Page, { title: "Error", children: _jsx(CenteredLayout, { children: _jsx(Card, { status: "error", children: _jsxs(Subheading, { children: [_jsxs(Row, { left: true, children: [_jsx(StatusIcon, { status: "error", size: "xlarge" }), " ", message] }), _jsx(RetryButton, {})] }) }) }) }));
|
package/ui/misc/Catcher.tsx
CHANGED
|
@@ -15,6 +15,11 @@ import { StatusIcon } from "./StatusIcon.js";
|
|
|
15
15
|
const RetryContext = createContext<Callback | undefined>(undefined);
|
|
16
16
|
RetryContext.displayName = "RetryContext";
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Props for `<RetryButton>` — `<Button>` variants plus optional `children` to override the default "Retry" label.
|
|
20
|
+
*
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/RetryButtonProps
|
|
22
|
+
*/
|
|
18
23
|
export interface RetryButtonProps extends ButtonVariants, OptionalChildProps {}
|
|
19
24
|
|
|
20
25
|
const RETRY_CHILDREN = (
|
|
@@ -24,6 +29,17 @@ const RETRY_CHILDREN = (
|
|
|
24
29
|
</>
|
|
25
30
|
);
|
|
26
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Button that retries the nearest `<Catcher>` error boundary when clicked.
|
|
34
|
+
*
|
|
35
|
+
* - Reads the retry callback from `<Catcher>`'s private context, so it renders `null` when there is no boundary above it to retry.
|
|
36
|
+
* - Defaults to an "Retry" label with a refresh icon; pass `children` to override.
|
|
37
|
+
*
|
|
38
|
+
* @param props `<Button>` variants and optional `children` for the label.
|
|
39
|
+
* @returns The retry button, or `null` when not inside a `<Catcher>`.
|
|
40
|
+
* @example <RetryButton small />
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/RetryButton
|
|
42
|
+
*/
|
|
27
43
|
export function RetryButton({ children = RETRY_CHILDREN, ...props }: RetryButtonProps): ReactElement | null {
|
|
28
44
|
const retry = use(RetryContext);
|
|
29
45
|
if (!retry) return null;
|
|
@@ -34,10 +50,20 @@ export function RetryButton({ children = RETRY_CHILDREN, ...props }: RetryButton
|
|
|
34
50
|
);
|
|
35
51
|
}
|
|
36
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Props for a component that renders a caught error `reason`.
|
|
55
|
+
*
|
|
56
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorComponentProps
|
|
57
|
+
*/
|
|
37
58
|
export interface ErrorComponentProps {
|
|
38
59
|
reason: unknown;
|
|
39
60
|
}
|
|
40
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Props for `<Catcher>` — the `children` to guard plus the `as` component used to render any caught error.
|
|
64
|
+
*
|
|
65
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/CatcherProps
|
|
66
|
+
*/
|
|
41
67
|
export interface CatcherProps extends ChildProps {
|
|
42
68
|
/** Component to render an error (defaults to `<ErrorNotice />`) */
|
|
43
69
|
as: (props: ErrorComponentProps) => ReactElement;
|
|
@@ -49,8 +75,14 @@ type CatcherState = {
|
|
|
49
75
|
};
|
|
50
76
|
|
|
51
77
|
/**
|
|
52
|
-
* React
|
|
53
|
-
*
|
|
78
|
+
* React error boundary that renders a fallback component when any descendant throws.
|
|
79
|
+
*
|
|
80
|
+
* - Catches render-time errors below it and shows the `as` component (defaults to `<ErrorNotice>`) with the caught `reason`.
|
|
81
|
+
* - Provides a retry callback to descendant `<RetryButton>`s that clears the error and re-renders `children`.
|
|
82
|
+
*
|
|
83
|
+
* @example <Catcher><RiskyComponent /></Catcher>
|
|
84
|
+
* @example <Catcher as={ErrorPage}><RiskyComponent /></Catcher>
|
|
85
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/Catcher
|
|
54
86
|
*/
|
|
55
87
|
export class Catcher extends Component<CatcherProps, CatcherState> {
|
|
56
88
|
static defaultProps: Pick<CatcherProps, "as"> = {
|
|
@@ -78,16 +110,42 @@ export class Catcher extends Component<CatcherProps, CatcherState> {
|
|
|
78
110
|
}
|
|
79
111
|
}
|
|
80
112
|
|
|
113
|
+
/**
|
|
114
|
+
* Props for `<PageCatcher>` — the page `children` to guard.
|
|
115
|
+
*
|
|
116
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/PageCatcherProps
|
|
117
|
+
*/
|
|
81
118
|
export interface PageCatcherProps extends ChildProps {}
|
|
82
119
|
|
|
83
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* Error boundary for a whole page that renders a full `<ErrorPage>` fallback on error.
|
|
122
|
+
*
|
|
123
|
+
* @param children The page content to guard.
|
|
124
|
+
* @returns A `<Catcher>` configured to render `<ErrorPage>` on error.
|
|
125
|
+
* @example <PageCatcher><SettingsPage /></PageCatcher>
|
|
126
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/PageCatcher
|
|
127
|
+
*/
|
|
84
128
|
export function PageCatcher({ children }: PageCatcherProps): ReactElement {
|
|
85
129
|
return <Catcher as={ErrorPage}>{children}</Catcher>;
|
|
86
130
|
}
|
|
87
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Props for `<ErrorNotice>` — the caught error `reason`.
|
|
134
|
+
*
|
|
135
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorNoticeProps
|
|
136
|
+
*/
|
|
88
137
|
export interface ErrorNoticeProps extends ErrorComponentProps {}
|
|
89
138
|
|
|
90
|
-
/**
|
|
139
|
+
/**
|
|
140
|
+
* Render a caught error as an inline `<Notice>` with a retry button.
|
|
141
|
+
*
|
|
142
|
+
* - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
|
|
143
|
+
*
|
|
144
|
+
* @param reason The caught error to display.
|
|
145
|
+
* @returns An error `<Notice>` containing the message and a `<RetryButton>`.
|
|
146
|
+
* @example <ErrorNotice reason={thrown} />
|
|
147
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorNotice
|
|
148
|
+
*/
|
|
91
149
|
export function ErrorNotice({ reason }: ErrorNoticeProps): ReactElement {
|
|
92
150
|
const message = getMessage(reason) ?? "Unknown error";
|
|
93
151
|
return (
|
|
@@ -98,9 +156,23 @@ export function ErrorNotice({ reason }: ErrorNoticeProps): ReactElement {
|
|
|
98
156
|
);
|
|
99
157
|
}
|
|
100
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Props for `<ErrorPage>` — the caught error `reason`.
|
|
161
|
+
*
|
|
162
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorPageProps
|
|
163
|
+
*/
|
|
101
164
|
export interface ErrorPageProps extends ErrorComponentProps {}
|
|
102
165
|
|
|
103
|
-
/**
|
|
166
|
+
/**
|
|
167
|
+
* Render a caught error as a full-page `<Page>` with an error `<Card>` and retry button.
|
|
168
|
+
*
|
|
169
|
+
* - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
|
|
170
|
+
*
|
|
171
|
+
* @param reason The caught error to display.
|
|
172
|
+
* @returns A centered error page containing the message and a `<RetryButton>`.
|
|
173
|
+
* @example <ErrorPage reason={thrown} />
|
|
174
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorPage
|
|
175
|
+
*/
|
|
104
176
|
export function ErrorPage({ reason }: ErrorPageProps): ReactElement {
|
|
105
177
|
const message = getMessage(reason) ?? "Unknown error";
|
|
106
178
|
return (
|
package/ui/misc/Loading.d.ts
CHANGED
|
@@ -1,8 +1,28 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
2
|
declare const _componentProps: unique symbol;
|
|
3
|
+
/**
|
|
4
|
+
* Props for `<Loading>` — takes no props (branded empty interface).
|
|
5
|
+
*
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Loading/LoadingProps
|
|
7
|
+
*/
|
|
3
8
|
export interface LoadingProps {
|
|
4
9
|
readonly [_componentProps]?: never;
|
|
5
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Animated spinner SVG used as a loading indicator.
|
|
13
|
+
*
|
|
14
|
+
* - Self-contained inline SVG with a rotating indicator arc; inherits its colour and size from the surrounding text.
|
|
15
|
+
*
|
|
16
|
+
* @returns The spinner element.
|
|
17
|
+
* @example <Loading />
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Loading/Loading
|
|
19
|
+
*/
|
|
6
20
|
export declare function Loading(): ReactElement;
|
|
21
|
+
/**
|
|
22
|
+
* Shared `<Loading>` element with a stable `key`, ready to drop into `Suspense` fallbacks and lists.
|
|
23
|
+
*
|
|
24
|
+
* @example <Suspense fallback={LOADING}>…</Suspense>
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/misc/Loading/LOADING
|
|
26
|
+
*/
|
|
7
27
|
export declare const LOADING: import("react").JSX.Element;
|
|
8
28
|
export {};
|