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/tree/TreeMenu.js
CHANGED
|
@@ -5,8 +5,14 @@ import { Menu, MenuItem } from "../menu/Menu.js";
|
|
|
5
5
|
import { createMapper } from "../misc/Mapper.js";
|
|
6
6
|
/**
|
|
7
7
|
* Match an element that should appear in the sidebar menu.
|
|
8
|
+
*
|
|
8
9
|
* - Generic tree elements (directories and files) always qualify.
|
|
9
10
|
* - For documentation elements, only `kind: "module"` qualifies — functions, classes, methods, properties, etc. are kept off the navigation.
|
|
11
|
+
*
|
|
12
|
+
* @param element The element to test.
|
|
13
|
+
* @returns `true` when the element should appear in the menu, `false` otherwise.
|
|
14
|
+
* @example matchMenuElement(element) // true
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/matchMenuElement
|
|
10
16
|
*/
|
|
11
17
|
export function matchMenuElement(element) {
|
|
12
18
|
const { type, props } = element;
|
|
@@ -18,24 +24,40 @@ export function matchMenuElement(element) {
|
|
|
18
24
|
}
|
|
19
25
|
/**
|
|
20
26
|
* Default menu item renderer for any `tree-*` element.
|
|
27
|
+
*
|
|
21
28
|
* - Computes its own URL path by appending its `name` to the parent's `path`.
|
|
22
29
|
* - Passes both the label and the nested `<TreeMenuMapper>` to `<MenuItem>`; `<MenuItem>` itself decides whether to reveal the nested submenu based on the current URL.
|
|
30
|
+
*
|
|
31
|
+
* @param props The tree element props plus the parent's `path`.
|
|
32
|
+
* @returns A `<MenuItem>` for the element, with a nested `<Menu>` when it has menu-eligible children.
|
|
33
|
+
* @example <TreeMenuItem {...element.props} path="/" />
|
|
34
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenuItem
|
|
23
35
|
*/
|
|
24
36
|
export function TreeMenuItem({ path = "/", name, title, children }) {
|
|
25
37
|
const href = joinPath(path, name);
|
|
26
38
|
const submenu = Array.from(filterElements(children, matchMenuElement));
|
|
27
39
|
return (_jsxs(MenuItem, { href: href, children: [title ?? name, submenu.length ? (_jsx(Menu, { children: _jsx(TreeMenuMapper, { path: href, children: submenu }) })) : null] }));
|
|
28
40
|
}
|
|
29
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* Mapping + Mapper pair for the menu — wrap children in `<TreeMenuMapping>` to override the per-type menu-item renderers.
|
|
43
|
+
*
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenuMapping
|
|
45
|
+
*/
|
|
30
46
|
export const [TreeMenuMapping, TreeMenuMapper] = createMapper({
|
|
31
47
|
"tree-element": TreeMenuItem,
|
|
32
48
|
"tree-documentation": TreeMenuItem,
|
|
33
49
|
});
|
|
34
50
|
/**
|
|
35
51
|
* Sidebar navigation menu built from the children of a root tree element.
|
|
52
|
+
*
|
|
36
53
|
* - Renders each child via `<TreeMenuItem>` (the default mapping for `tree-element`).
|
|
37
54
|
* - To customise renderers for specific types, wrap in `<TreeMenuMapping mapping={…}>`.
|
|
38
55
|
* - Only directories and files appear — code symbols are kept off the navigation.
|
|
56
|
+
*
|
|
57
|
+
* @param props The root `tree` element and optional root `path`.
|
|
58
|
+
* @returns A `<Menu>` of navigation links to the root's children.
|
|
59
|
+
* @example <TreeMenu tree={tree} />
|
|
60
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenu
|
|
39
61
|
*/
|
|
40
62
|
export function TreeMenu({ path = "/", tree }) {
|
|
41
63
|
return (_jsx(Menu, { children: _jsx(TreeMenuMapper, { path: path, children: filterElements(tree.props.children, matchMenuElement) }) }));
|
package/ui/tree/TreeMenu.tsx
CHANGED
|
@@ -7,8 +7,14 @@ import { createMapper } from "../misc/Mapper.js";
|
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Match an element that should appear in the sidebar menu.
|
|
10
|
+
*
|
|
10
11
|
* - Generic tree elements (directories and files) always qualify.
|
|
11
12
|
* - For documentation elements, only `kind: "module"` qualifies — functions, classes, methods, properties, etc. are kept off the navigation.
|
|
13
|
+
*
|
|
14
|
+
* @param element The element to test.
|
|
15
|
+
* @returns `true` when the element should appear in the menu, `false` otherwise.
|
|
16
|
+
* @example matchMenuElement(element) // true
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/matchMenuElement
|
|
12
18
|
*/
|
|
13
19
|
export function matchMenuElement(element: Element): boolean {
|
|
14
20
|
const { type, props } = element;
|
|
@@ -25,8 +31,14 @@ interface TreeMenuExtras {
|
|
|
25
31
|
|
|
26
32
|
/**
|
|
27
33
|
* Default menu item renderer for any `tree-*` element.
|
|
34
|
+
*
|
|
28
35
|
* - Computes its own URL path by appending its `name` to the parent's `path`.
|
|
29
36
|
* - Passes both the label and the nested `<TreeMenuMapper>` to `<MenuItem>`; `<MenuItem>` itself decides whether to reveal the nested submenu based on the current URL.
|
|
37
|
+
*
|
|
38
|
+
* @param props The tree element props plus the parent's `path`.
|
|
39
|
+
* @returns A `<MenuItem>` for the element, with a nested `<Menu>` when it has menu-eligible children.
|
|
40
|
+
* @example <TreeMenuItem {...element.props} path="/" />
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenuItem
|
|
30
42
|
*/
|
|
31
43
|
export function TreeMenuItem({ path = "/", name, title, children }: TreeElementProps & TreeMenuExtras): ReactNode {
|
|
32
44
|
const href = joinPath(path, name);
|
|
@@ -43,12 +55,21 @@ export function TreeMenuItem({ path = "/", name, title, children }: TreeElementP
|
|
|
43
55
|
);
|
|
44
56
|
}
|
|
45
57
|
|
|
46
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* Mapping + Mapper pair for the menu — wrap children in `<TreeMenuMapping>` to override the per-type menu-item renderers.
|
|
60
|
+
*
|
|
61
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenuMapping
|
|
62
|
+
*/
|
|
47
63
|
export const [TreeMenuMapping, TreeMenuMapper] = createMapper<TreeMenuExtras>({
|
|
48
64
|
"tree-element": TreeMenuItem,
|
|
49
65
|
"tree-documentation": TreeMenuItem,
|
|
50
66
|
});
|
|
51
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Props for the `TreeMenu` component — the root tree element plus its URL path.
|
|
70
|
+
*
|
|
71
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenuProps
|
|
72
|
+
*/
|
|
52
73
|
export interface TreeMenuProps {
|
|
53
74
|
/** Root element whose children become the navigation links. */
|
|
54
75
|
readonly tree: TreeElement;
|
|
@@ -58,9 +79,15 @@ export interface TreeMenuProps {
|
|
|
58
79
|
|
|
59
80
|
/**
|
|
60
81
|
* Sidebar navigation menu built from the children of a root tree element.
|
|
82
|
+
*
|
|
61
83
|
* - Renders each child via `<TreeMenuItem>` (the default mapping for `tree-element`).
|
|
62
84
|
* - To customise renderers for specific types, wrap in `<TreeMenuMapping mapping={…}>`.
|
|
63
85
|
* - Only directories and files appear — code symbols are kept off the navigation.
|
|
86
|
+
*
|
|
87
|
+
* @param props The root `tree` element and optional root `path`.
|
|
88
|
+
* @returns A `<Menu>` of navigation links to the root's children.
|
|
89
|
+
* @example <TreeMenu tree={tree} />
|
|
90
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenu
|
|
64
91
|
*/
|
|
65
92
|
export function TreeMenu({ path = "/", tree }: TreeMenuProps): ReactNode {
|
|
66
93
|
return (
|
package/ui/tree/TreePage.d.ts
CHANGED
|
@@ -2,7 +2,13 @@ import type { ReactNode } from "react";
|
|
|
2
2
|
import type { TreeElementProps } from "../../util/tree.js";
|
|
3
3
|
/**
|
|
4
4
|
* Page renderer for a generic `tree-element` (a directory or file).
|
|
5
|
+
*
|
|
5
6
|
* - Shows the title, any absorbed prose content, and the element's children as a stack of cards.
|
|
6
7
|
* - Child cards cover both nested directories/files and the code symbols of a source file.
|
|
8
|
+
*
|
|
9
|
+
* @param props The tree element props (`title`, `name`, `description`, `content`, `children`).
|
|
10
|
+
* @returns A `<Page>` with the title, prose content, and a stack of child cards.
|
|
11
|
+
* @example <TreePage {...element.props} />
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreePage/TreePage
|
|
7
13
|
*/
|
|
8
14
|
export declare function TreePage({ title, name, description, content, children }: TreeElementProps): ReactNode;
|
package/ui/tree/TreePage.js
CHANGED
|
@@ -7,8 +7,14 @@ import { Page } from "../page/Page.js";
|
|
|
7
7
|
import { TreeCards } from "./TreeCards.js";
|
|
8
8
|
/**
|
|
9
9
|
* Page renderer for a generic `tree-element` (a directory or file).
|
|
10
|
+
*
|
|
10
11
|
* - Shows the title, any absorbed prose content, and the element's children as a stack of cards.
|
|
11
12
|
* - Child cards cover both nested directories/files and the code symbols of a source file.
|
|
13
|
+
*
|
|
14
|
+
* @param props The tree element props (`title`, `name`, `description`, `content`, `children`).
|
|
15
|
+
* @returns A `<Page>` with the title, prose content, and a stack of child cards.
|
|
16
|
+
* @example <TreePage {...element.props} />
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreePage/TreePage
|
|
12
18
|
*/
|
|
13
19
|
export function TreePage({ title, name, description, content, children }) {
|
|
14
20
|
return (_jsxs(Page, { title: title ?? name, description: description, children: [_jsx(Header, { wide: true, children: _jsx(Title, { children: title ?? name }) }), _jsx(Section, { wide: true, children: content && (_jsx(Prose, { children: _jsx(Markup, { children: content }) })) }), _jsx(Section, { wide: true, children: _jsx(TreeCards, { children: children }) })] }));
|
package/ui/tree/TreePage.tsx
CHANGED
|
@@ -9,8 +9,14 @@ import { TreeCards } from "./TreeCards.js";
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Page renderer for a generic `tree-element` (a directory or file).
|
|
12
|
+
*
|
|
12
13
|
* - Shows the title, any absorbed prose content, and the element's children as a stack of cards.
|
|
13
14
|
* - Child cards cover both nested directories/files and the code symbols of a source file.
|
|
15
|
+
*
|
|
16
|
+
* @param props The tree element props (`title`, `name`, `description`, `content`, `children`).
|
|
17
|
+
* @returns A `<Page>` with the title, prose content, and a stack of child cards.
|
|
18
|
+
* @example <TreePage {...element.props} />
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreePage/TreePage
|
|
14
20
|
*/
|
|
15
21
|
export function TreePage({ title, name, description, content, children }: TreeElementProps): ReactNode {
|
|
16
22
|
return (
|
package/ui/tree/TreeRouter.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import type { ReactElement, ReactNode } from "react";
|
|
2
2
|
import type { TreeElement } from "../../util/tree.js";
|
|
3
3
|
import type { PossibleMeta } from "../util/index.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Mapping + Mapper pair for tree routers — wrap children in `<TreeRouterMapping>` to override the per-type page renderers.
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouterMapping
|
|
8
|
+
*/
|
|
5
9
|
export declare const TreeRouterMapping: import("react").FunctionComponent<import("../misc/Mapper.js").MappingProps<unknown>>, TreeRouterMapper: import("react").FunctionComponent<{
|
|
6
10
|
readonly children?: import("../../index.js").Elements;
|
|
7
11
|
}>;
|
|
12
|
+
/**
|
|
13
|
+
* Props for the `TreeRouter` component — the tree to route plus an optional fallback and app meta.
|
|
14
|
+
*
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouterProps
|
|
16
|
+
*/
|
|
8
17
|
export interface TreeRouterProps extends PossibleMeta {
|
|
9
18
|
/** The tree of elements to match routes for. */
|
|
10
19
|
readonly tree: TreeElement;
|
|
@@ -16,10 +25,16 @@ export interface TreeRouterProps extends PossibleMeta {
|
|
|
16
25
|
}
|
|
17
26
|
/**
|
|
18
27
|
* Resolve a URL path to a tree element and render it as a full page.
|
|
28
|
+
*
|
|
19
29
|
* - Flattens the tree once (via `<TreeProvider>`) into a `path` → element map, then resolves the current URL with a single `map.get(path)`.
|
|
20
30
|
* - `/` renders the root itself; deeper paths render the matching descendant (composite module names like `/util/string` resolve for free — they're whole keys in the map).
|
|
21
31
|
* - The resolved element is already stamped with its canonical `path`, so the page and its cards link straight to their own paths — nothing needs threading.
|
|
22
|
-
* - Throws `NotFoundError` if no element matches and no `fallback` is given.
|
|
23
32
|
* - To override the renderer for a specific element type, wrap in `<TreeRouterMapping mapping={…}>`.
|
|
33
|
+
*
|
|
34
|
+
* @param props The `tree` to route, an optional `fallback`, and app meta.
|
|
35
|
+
* @returns The resolved element rendered as a page, or the `fallback`.
|
|
36
|
+
* @throws NotFoundError When no element matches the URL and no `fallback` is given.
|
|
37
|
+
* @example <TreeRouter tree={tree} />
|
|
38
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouter
|
|
24
39
|
*/
|
|
25
40
|
export declare function TreeRouter({ tree, fallback, ...meta }: TreeRouterProps): ReactNode;
|
package/ui/tree/TreeRouter.js
CHANGED
|
@@ -5,18 +5,28 @@ import { createMapper } from "../misc/Mapper.js";
|
|
|
5
5
|
import { MetaContext, requireMetaURL } from "../misc/MetaContext.js";
|
|
6
6
|
import { TreeProvider, useTreeMap } from "./TreeContext.js";
|
|
7
7
|
import { TreePage } from "./TreePage.js";
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Mapping + Mapper pair for tree routers — wrap children in `<TreeRouterMapping>` to override the per-type page renderers.
|
|
10
|
+
*
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouterMapping
|
|
12
|
+
*/
|
|
9
13
|
export const [TreeRouterMapping, TreeRouterMapper] = createMapper({
|
|
10
14
|
"tree-element": TreePage,
|
|
11
15
|
"tree-documentation": DocumentationPage,
|
|
12
16
|
});
|
|
13
17
|
/**
|
|
14
18
|
* Resolve a URL path to a tree element and render it as a full page.
|
|
19
|
+
*
|
|
15
20
|
* - Flattens the tree once (via `<TreeProvider>`) into a `path` → element map, then resolves the current URL with a single `map.get(path)`.
|
|
16
21
|
* - `/` renders the root itself; deeper paths render the matching descendant (composite module names like `/util/string` resolve for free — they're whole keys in the map).
|
|
17
22
|
* - The resolved element is already stamped with its canonical `path`, so the page and its cards link straight to their own paths — nothing needs threading.
|
|
18
|
-
* - Throws `NotFoundError` if no element matches and no `fallback` is given.
|
|
19
23
|
* - To override the renderer for a specific element type, wrap in `<TreeRouterMapping mapping={…}>`.
|
|
24
|
+
*
|
|
25
|
+
* @param props The `tree` to route, an optional `fallback`, and app meta.
|
|
26
|
+
* @returns The resolved element rendered as a page, or the `fallback`.
|
|
27
|
+
* @throws NotFoundError When no element matches the URL and no `fallback` is given.
|
|
28
|
+
* @example <TreeRouter tree={tree} />
|
|
29
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouter
|
|
20
30
|
*/
|
|
21
31
|
export function TreeRouter({ tree, fallback, ...meta }) {
|
|
22
32
|
const { path, ...combined } = requireMetaURL(meta);
|
package/ui/tree/TreeRouter.tsx
CHANGED
|
@@ -9,12 +9,21 @@ import type { PossibleMeta } from "../util/index.js";
|
|
|
9
9
|
import { TreeProvider, useTreeMap } from "./TreeContext.js";
|
|
10
10
|
import { TreePage } from "./TreePage.js";
|
|
11
11
|
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Mapping + Mapper pair for tree routers — wrap children in `<TreeRouterMapping>` to override the per-type page renderers.
|
|
14
|
+
*
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouterMapping
|
|
16
|
+
*/
|
|
13
17
|
export const [TreeRouterMapping, TreeRouterMapper] = createMapper({
|
|
14
18
|
"tree-element": TreePage,
|
|
15
19
|
"tree-documentation": DocumentationPage,
|
|
16
20
|
});
|
|
17
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Props for the `TreeRouter` component — the tree to route plus an optional fallback and app meta.
|
|
24
|
+
*
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouterProps
|
|
26
|
+
*/
|
|
18
27
|
export interface TreeRouterProps extends PossibleMeta {
|
|
19
28
|
/** The tree of elements to match routes for. */
|
|
20
29
|
readonly tree: TreeElement;
|
|
@@ -28,11 +37,17 @@ export interface TreeRouterProps extends PossibleMeta {
|
|
|
28
37
|
|
|
29
38
|
/**
|
|
30
39
|
* Resolve a URL path to a tree element and render it as a full page.
|
|
40
|
+
*
|
|
31
41
|
* - Flattens the tree once (via `<TreeProvider>`) into a `path` → element map, then resolves the current URL with a single `map.get(path)`.
|
|
32
42
|
* - `/` renders the root itself; deeper paths render the matching descendant (composite module names like `/util/string` resolve for free — they're whole keys in the map).
|
|
33
43
|
* - The resolved element is already stamped with its canonical `path`, so the page and its cards link straight to their own paths — nothing needs threading.
|
|
34
|
-
* - Throws `NotFoundError` if no element matches and no `fallback` is given.
|
|
35
44
|
* - To override the renderer for a specific element type, wrap in `<TreeRouterMapping mapping={…}>`.
|
|
45
|
+
*
|
|
46
|
+
* @param props The `tree` to route, an optional `fallback`, and app meta.
|
|
47
|
+
* @returns The resolved element rendered as a page, or the `fallback`.
|
|
48
|
+
* @throws NotFoundError When no element matches the URL and no `fallback` is given.
|
|
49
|
+
* @example <TreeRouter tree={tree} />
|
|
50
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouter
|
|
36
51
|
*/
|
|
37
52
|
export function TreeRouter({ tree, fallback, ...meta }: TreeRouterProps): ReactNode {
|
|
38
53
|
const { path, ...combined } = requireMetaURL(meta);
|
package/ui/tree/TreeSidebar.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
2
|
import type { AbsolutePath } from "../../util/path.js";
|
|
3
3
|
import type { TreeElement } from "../../util/tree.js";
|
|
4
|
+
/**
|
|
5
|
+
* Props for the `TreeSidebar` component — the root tree element plus its URL path.
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeSidebar/TreeSidebarProps
|
|
8
|
+
*/
|
|
4
9
|
export interface TreeSidebarProps {
|
|
5
10
|
/** Root element of the tree. */
|
|
6
11
|
readonly tree: TreeElement;
|
|
@@ -9,8 +14,14 @@ export interface TreeSidebarProps {
|
|
|
9
14
|
}
|
|
10
15
|
/**
|
|
11
16
|
* Sidebar built from a tree element.
|
|
17
|
+
*
|
|
12
18
|
* - Renders a single "home" `<MenuItem>` for the root element itself, then the root's children as a `<TreeMenuMapper>` underneath.
|
|
13
19
|
* - The home link uses `path` as its href (defaulting to `/`). The children's hrefs are computed by appending their `name` to the root's path.
|
|
14
20
|
* - To customise child renderers wrap in `<TreeMenuMapping mapping={…}>` (same context as `<TreeMenu>`).
|
|
21
|
+
*
|
|
22
|
+
* @param props The root `tree` element and optional root `path`.
|
|
23
|
+
* @returns A `<Menu>` with a home link plus the root's children as navigation items.
|
|
24
|
+
* @example <TreeSidebar tree={tree} />
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeSidebar/TreeSidebar
|
|
15
26
|
*/
|
|
16
27
|
export declare function TreeSidebar({ tree, path }: TreeSidebarProps): ReactNode;
|
package/ui/tree/TreeSidebar.js
CHANGED
|
@@ -4,9 +4,15 @@ import { Menu, MenuItem } from "../menu/Menu.js";
|
|
|
4
4
|
import { matchMenuElement, TreeMenuMapper } from "./TreeMenu.js";
|
|
5
5
|
/**
|
|
6
6
|
* Sidebar built from a tree element.
|
|
7
|
+
*
|
|
7
8
|
* - Renders a single "home" `<MenuItem>` for the root element itself, then the root's children as a `<TreeMenuMapper>` underneath.
|
|
8
9
|
* - The home link uses `path` as its href (defaulting to `/`). The children's hrefs are computed by appending their `name` to the root's path.
|
|
9
10
|
* - To customise child renderers wrap in `<TreeMenuMapping mapping={…}>` (same context as `<TreeMenu>`).
|
|
11
|
+
*
|
|
12
|
+
* @param props The root `tree` element and optional root `path`.
|
|
13
|
+
* @returns A `<Menu>` with a home link plus the root's children as navigation items.
|
|
14
|
+
* @example <TreeSidebar tree={tree} />
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeSidebar/TreeSidebar
|
|
10
16
|
*/
|
|
11
17
|
export function TreeSidebar({ tree, path = "/" }) {
|
|
12
18
|
return (_jsxs(Menu, { children: [_jsx(MenuItem, { href: path, children: tree.props.title ?? tree.props.name }), _jsx(TreeMenuMapper, { path: path, children: filterElements(tree.props.children, matchMenuElement) })] }));
|
package/ui/tree/TreeSidebar.tsx
CHANGED
|
@@ -5,6 +5,11 @@ import type { TreeElement } from "../../util/tree.js";
|
|
|
5
5
|
import { Menu, MenuItem } from "../menu/Menu.js";
|
|
6
6
|
import { matchMenuElement, TreeMenuMapper } from "./TreeMenu.js";
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Props for the `TreeSidebar` component — the root tree element plus its URL path.
|
|
10
|
+
*
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeSidebar/TreeSidebarProps
|
|
12
|
+
*/
|
|
8
13
|
export interface TreeSidebarProps {
|
|
9
14
|
/** Root element of the tree. */
|
|
10
15
|
readonly tree: TreeElement;
|
|
@@ -14,9 +19,15 @@ export interface TreeSidebarProps {
|
|
|
14
19
|
|
|
15
20
|
/**
|
|
16
21
|
* Sidebar built from a tree element.
|
|
22
|
+
*
|
|
17
23
|
* - Renders a single "home" `<MenuItem>` for the root element itself, then the root's children as a `<TreeMenuMapper>` underneath.
|
|
18
24
|
* - The home link uses `path` as its href (defaulting to `/`). The children's hrefs are computed by appending their `name` to the root's path.
|
|
19
25
|
* - To customise child renderers wrap in `<TreeMenuMapping mapping={…}>` (same context as `<TreeMenu>`).
|
|
26
|
+
*
|
|
27
|
+
* @param props The root `tree` element and optional root `path`.
|
|
28
|
+
* @returns A `<Menu>` with a home link plus the root's children as navigation items.
|
|
29
|
+
* @example <TreeSidebar tree={tree} />
|
|
30
|
+
* @see https://dhoulb.github.io/shelving/ui/tree/TreeSidebar/TreeSidebar
|
|
20
31
|
*/
|
|
21
32
|
export function TreeSidebar({ tree, path = "/" as AbsolutePath }: TreeSidebarProps): ReactNode {
|
|
22
33
|
return (
|
package/ui/util/context.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import { type Context } from "react";
|
|
2
2
|
import type { AnyCaller } from "../../util/function.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Use the value of a React `Context`, or throw `RequiredError` if the context was unset.
|
|
5
|
+
*
|
|
6
|
+
* - Reads the context with React's `use()`, so it must be called inside a component or hook.
|
|
7
|
+
* - Treats both `null` and `undefined` as "unset" and throws, naming the context's `displayName` in the message.
|
|
8
|
+
*
|
|
9
|
+
* @param context The React `Context` to read the current value of.
|
|
10
|
+
* @param caller Function to attribute the thrown `RequiredError` to (defaults to `requireContext`).
|
|
11
|
+
* @returns The current context value, guaranteed non-nullish.
|
|
12
|
+
* @throws RequiredError If the context value is `null` or `undefined` (i.e. used outside its provider).
|
|
13
|
+
* @example const theme = requireContext(ThemeContext);
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/ui/util/context/requireContext
|
|
15
|
+
*/
|
|
4
16
|
export declare function requireContext<T>(context: Context<T | null>, caller?: AnyCaller): T;
|
|
5
17
|
export declare function requireContext<T>(context: Context<T | undefined>, caller?: AnyCaller): T;
|
|
6
18
|
export declare function requireContext<T>(context: Context<T>, caller?: AnyCaller): T;
|
package/ui/util/context.ts
CHANGED
|
@@ -3,7 +3,19 @@ import { RequiredError } from "../../error/RequiredError.js";
|
|
|
3
3
|
import type { AnyCaller } from "../../util/function.js";
|
|
4
4
|
import { type Nullish, notNullish } from "../../util/null.js";
|
|
5
5
|
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Use the value of a React `Context`, or throw `RequiredError` if the context was unset.
|
|
8
|
+
*
|
|
9
|
+
* - Reads the context with React's `use()`, so it must be called inside a component or hook.
|
|
10
|
+
* - Treats both `null` and `undefined` as "unset" and throws, naming the context's `displayName` in the message.
|
|
11
|
+
*
|
|
12
|
+
* @param context The React `Context` to read the current value of.
|
|
13
|
+
* @param caller Function to attribute the thrown `RequiredError` to (defaults to `requireContext`).
|
|
14
|
+
* @returns The current context value, guaranteed non-nullish.
|
|
15
|
+
* @throws RequiredError If the context value is `null` or `undefined` (i.e. used outside its provider).
|
|
16
|
+
* @example const theme = requireContext(ThemeContext);
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/ui/util/context/requireContext
|
|
18
|
+
*/
|
|
7
19
|
export function requireContext<T>(context: Context<T | null>, caller?: AnyCaller): T;
|
|
8
20
|
export function requireContext<T>(context: Context<T | undefined>, caller?: AnyCaller): T;
|
|
9
21
|
export function requireContext<T>(context: Context<T>, caller?: AnyCaller): T;
|
package/ui/util/css.d.ts
CHANGED
|
@@ -1,24 +1,33 @@
|
|
|
1
1
|
import { type ImmutableDictionary } from "../../util/dictionary.js";
|
|
2
2
|
/**
|
|
3
|
-
* Set of classnames that can be joined.
|
|
3
|
+
* Set of classnames that can be joined into a single `className` string.
|
|
4
4
|
*
|
|
5
5
|
* - `string` — used directly as a classname.
|
|
6
6
|
* - `null` or `undefined` — ignored.
|
|
7
7
|
* - Array of classnames — recursively parsed.
|
|
8
|
+
*
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/Classes
|
|
8
10
|
*/
|
|
9
11
|
export type Classes = string | null | undefined | readonly Classes[] | Variants;
|
|
10
12
|
/**
|
|
11
|
-
*
|
|
13
|
+
* Dictionary of boolean variant flags whose `true`-valued keys become class names.
|
|
14
|
+
*
|
|
12
15
|
* - `true` or `false` item values in dictionaries use the string `key` of the item if the value is `true`, or ignore it if the value is falsy.
|
|
13
16
|
* - Anything that is not `true` has no effect, so other values can be passed in and will be ignored. This means you can pass the entire `props` into this and it'll work just fine.
|
|
14
17
|
*
|
|
15
18
|
* Typed as `object` (not `Data`/`Record<string, unknown>`) so plain `interface` types are accepted —
|
|
16
19
|
* interfaces lack an implicit string index signature, so they don't satisfy index-signature types.
|
|
20
|
+
*
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/Variants
|
|
17
22
|
*/
|
|
18
23
|
export interface Variants {
|
|
19
24
|
readonly [key: string]: boolean;
|
|
20
25
|
}
|
|
21
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* CSS modules mapping of local class names to hashed runtime class names.
|
|
28
|
+
*
|
|
29
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/CSSModule
|
|
30
|
+
*/
|
|
22
31
|
export type CSSModule = ImmutableDictionary<string | undefined>;
|
|
23
32
|
/**
|
|
24
33
|
* Parse a list of possible `className` strings and join them into a single string.
|
|
@@ -26,6 +35,8 @@ export type CSSModule = ImmutableDictionary<string | undefined>;
|
|
|
26
35
|
*
|
|
27
36
|
* @param classes The input set of classes to merge.
|
|
28
37
|
* @returns The merged string classname.
|
|
38
|
+
* @example getClass("button", { active: true, disabled: false }) // "button active"
|
|
39
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/getClass
|
|
29
40
|
*/
|
|
30
41
|
export declare function getClass(...classes: unknown[]): string;
|
|
31
42
|
/**
|
|
@@ -37,6 +48,8 @@ export declare function getClass(...classes: unknown[]): string;
|
|
|
37
48
|
* - This allows this situation to be handled gracefully and classes will be silently ignored in this environment.
|
|
38
49
|
*
|
|
39
50
|
* @param classes Class keys/values to merge.
|
|
40
|
-
* @returns The merged string classname.
|
|
51
|
+
* @returns The merged string classname, or `undefined` when `module` is a string (unprocessed CSS module).
|
|
52
|
+
* @example getModuleClass(styles, "base", { active: true }) // "base_x7q active_p2k"
|
|
53
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/getModuleClass
|
|
41
54
|
*/
|
|
42
55
|
export declare function getModuleClass(module: CSSModule | string, ...classes: unknown[]): string | undefined;
|
package/ui/util/css.js
CHANGED
|
@@ -6,6 +6,8 @@ import { getDictionaryItems, isDictionary } from "../../util/dictionary.js";
|
|
|
6
6
|
*
|
|
7
7
|
* @param classes The input set of classes to merge.
|
|
8
8
|
* @returns The merged string classname.
|
|
9
|
+
* @example getClass("button", { active: true, disabled: false }) // "button active"
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/getClass
|
|
9
11
|
*/
|
|
10
12
|
export function getClass(...classes) {
|
|
11
13
|
return Array.from(getClasses(classes)).join(" ");
|
|
@@ -41,7 +43,9 @@ function* getClasses(classes) {
|
|
|
41
43
|
* - This allows this situation to be handled gracefully and classes will be silently ignored in this environment.
|
|
42
44
|
*
|
|
43
45
|
* @param classes Class keys/values to merge.
|
|
44
|
-
* @returns The merged string classname.
|
|
46
|
+
* @returns The merged string classname, or `undefined` when `module` is a string (unprocessed CSS module).
|
|
47
|
+
* @example getModuleClass(styles, "base", { active: true }) // "base_x7q active_p2k"
|
|
48
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/getModuleClass
|
|
45
49
|
*/
|
|
46
50
|
export function getModuleClass(module, ...classes) {
|
|
47
51
|
if (isDictionary(module))
|
package/ui/util/css.ts
CHANGED
|
@@ -2,27 +2,36 @@ import { isArray } from "../../util/array.js";
|
|
|
2
2
|
import { getDictionaryItems, type ImmutableDictionary, isDictionary } from "../../util/dictionary.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* Set of classnames that can be joined.
|
|
5
|
+
* Set of classnames that can be joined into a single `className` string.
|
|
6
6
|
*
|
|
7
7
|
* - `string` — used directly as a classname.
|
|
8
8
|
* - `null` or `undefined` — ignored.
|
|
9
9
|
* - Array of classnames — recursively parsed.
|
|
10
|
+
*
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/Classes
|
|
10
12
|
*/
|
|
11
13
|
export type Classes = string | null | undefined | readonly Classes[] | Variants;
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
|
-
*
|
|
16
|
+
* Dictionary of boolean variant flags whose `true`-valued keys become class names.
|
|
17
|
+
*
|
|
15
18
|
* - `true` or `false` item values in dictionaries use the string `key` of the item if the value is `true`, or ignore it if the value is falsy.
|
|
16
19
|
* - Anything that is not `true` has no effect, so other values can be passed in and will be ignored. This means you can pass the entire `props` into this and it'll work just fine.
|
|
17
20
|
*
|
|
18
21
|
* Typed as `object` (not `Data`/`Record<string, unknown>`) so plain `interface` types are accepted —
|
|
19
22
|
* interfaces lack an implicit string index signature, so they don't satisfy index-signature types.
|
|
23
|
+
*
|
|
24
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/Variants
|
|
20
25
|
*/
|
|
21
26
|
export interface Variants {
|
|
22
27
|
readonly [key: string]: boolean;
|
|
23
28
|
}
|
|
24
29
|
|
|
25
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* CSS modules mapping of local class names to hashed runtime class names.
|
|
32
|
+
*
|
|
33
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/CSSModule
|
|
34
|
+
*/
|
|
26
35
|
export type CSSModule = ImmutableDictionary<string | undefined>;
|
|
27
36
|
|
|
28
37
|
/**
|
|
@@ -31,6 +40,8 @@ export type CSSModule = ImmutableDictionary<string | undefined>;
|
|
|
31
40
|
*
|
|
32
41
|
* @param classes The input set of classes to merge.
|
|
33
42
|
* @returns The merged string classname.
|
|
43
|
+
* @example getClass("button", { active: true, disabled: false }) // "button active"
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/getClass
|
|
34
45
|
*/
|
|
35
46
|
export function getClass(...classes: unknown[]): string {
|
|
36
47
|
return Array.from(getClasses(classes)).join(" ");
|
|
@@ -67,7 +78,9 @@ function* getClasses(classes: unknown): Iterable<string> {
|
|
|
67
78
|
* - This allows this situation to be handled gracefully and classes will be silently ignored in this environment.
|
|
68
79
|
*
|
|
69
80
|
* @param classes Class keys/values to merge.
|
|
70
|
-
* @returns The merged string classname.
|
|
81
|
+
* @returns The merged string classname, or `undefined` when `module` is a string (unprocessed CSS module).
|
|
82
|
+
* @example getModuleClass(styles, "base", { active: true }) // "base_x7q active_p2k"
|
|
83
|
+
* @see https://dhoulb.github.io/shelving/ui/util/css/getModuleClass
|
|
71
84
|
*/
|
|
72
85
|
export function getModuleClass(module: CSSModule | string, ...classes: unknown[]): string | undefined {
|
|
73
86
|
if (isDictionary(module)) return Array.from(getModuleClasses(module, classes)).join(" ");
|
package/ui/util/event.d.ts
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Call `event.preventDefault()` on an event.
|
|
3
|
+
*
|
|
4
|
+
* - Handy as a ready-made event handler, e.g. `onSubmit={eventPreventDefault}`.
|
|
5
|
+
*
|
|
6
|
+
* @param e The event to suppress the default action of.
|
|
7
|
+
* @example <form onSubmit={eventPreventDefault}>…</form>
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/ui/util/event/eventPreventDefault
|
|
9
|
+
*/
|
|
2
10
|
export declare function eventPreventDefault(e: Pick<Event, "preventDefault">): void;
|
package/ui/util/event.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Call `event.preventDefault()` on an event.
|
|
3
|
+
*
|
|
4
|
+
* - Handy as a ready-made event handler, e.g. `onSubmit={eventPreventDefault}`.
|
|
5
|
+
*
|
|
6
|
+
* @param e The event to suppress the default action of.
|
|
7
|
+
* @example <form onSubmit={eventPreventDefault}>…</form>
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/ui/util/event/eventPreventDefault
|
|
9
|
+
*/
|
|
2
10
|
export function eventPreventDefault(e) {
|
|
3
11
|
e.preventDefault();
|
|
4
12
|
}
|
package/ui/util/event.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Call `event.preventDefault()` on an event.
|
|
3
|
+
*
|
|
4
|
+
* - Handy as a ready-made event handler, e.g. `onSubmit={eventPreventDefault}`.
|
|
5
|
+
*
|
|
6
|
+
* @param e The event to suppress the default action of.
|
|
7
|
+
* @example <form onSubmit={eventPreventDefault}>…</form>
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/ui/util/event/eventPreventDefault
|
|
9
|
+
*/
|
|
2
10
|
export function eventPreventDefault(e: Pick<Event, "preventDefault">) {
|
|
3
11
|
e.preventDefault();
|
|
4
12
|
}
|
package/ui/util/focus.d.ts
CHANGED
|
@@ -1,14 +1,33 @@
|
|
|
1
1
|
import type { Nullish } from "../../util/null.js";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Focus on the first focusable element inside an element.
|
|
4
|
+
*
|
|
5
|
+
* - No-op for nullish input or non-`HTMLElement` nodes, and when the element contains nothing focusable.
|
|
6
|
+
*
|
|
7
|
+
* @param el The container element to focus the first focusable descendant of.
|
|
8
|
+
* @example focusFirstFocusable(dialogRef.current);
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/ui/util/focus/focusFirstFocusable
|
|
10
|
+
*/
|
|
3
11
|
export declare function focusFirstFocusable(el: Nullish<Element>): void;
|
|
4
12
|
/**
|
|
5
|
-
* Loop focus inside an element.
|
|
6
|
-
*
|
|
13
|
+
* Loop focus inside an element so it can't escape — refocus the first focusable child when focus moves out.
|
|
14
|
+
*
|
|
15
|
+
* - When `nextTarget` falls outside `element`, focus is pulled back to the first focusable element inside it (a simple focus trap).
|
|
16
|
+
*
|
|
17
|
+
* @param element The container to keep focus within.
|
|
18
|
+
* @param nextTarget The element focus is moving to.
|
|
19
|
+
* @example loopFocus(dialog, document.activeElement);
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/ui/util/focus/loopFocus
|
|
7
21
|
*/
|
|
8
22
|
export declare function loopFocus(element: Nullish<Element>, nextTarget: Nullish<Element>): void;
|
|
9
23
|
/**
|
|
10
|
-
* Loop focus inside an element in response to a `blur` event.
|
|
11
|
-
*
|
|
24
|
+
* Loop focus inside an element in response to a `blur` event — a ready-made `onBlur` handler that traps focus.
|
|
25
|
+
*
|
|
26
|
+
* - Pulls focus back to the first focusable child when it blurs outside the event's `currentTarget`.
|
|
27
|
+
*
|
|
28
|
+
* @param event The `blur` event, providing `currentTarget` (the container) and `relatedTarget` (the new focus target).
|
|
29
|
+
* @example <div onBlur={eventLoopFocus}>…</div>
|
|
30
|
+
* @see https://dhoulb.github.io/shelving/ui/util/focus/eventLoopFocus
|
|
12
31
|
*/
|
|
13
32
|
export declare function eventLoopFocus({ currentTarget, relatedTarget }: {
|
|
14
33
|
currentTarget: Element;
|