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/util/notice.d.ts
CHANGED
|
@@ -2,25 +2,113 @@ import type { ReactNode } from "react";
|
|
|
2
2
|
import type { Arguments } from "../../util/function.js";
|
|
3
3
|
import type { Status } from "../style/Status.js";
|
|
4
4
|
/**
|
|
5
|
-
* Notify the user with a message by dispatching a notice event.
|
|
5
|
+
* Notify the user with a message by dispatching a `notice` event.
|
|
6
|
+
*
|
|
6
7
|
* - This is how e.g. `<Button>` and `<FormNotify>` components send notices to the `<Notices>` list of global notices.
|
|
8
|
+
* - The event bubbles, so any ancestor subscribed with `subscribeNotices()` will receive it.
|
|
9
|
+
*
|
|
10
|
+
* @param message The message to show, as a React node.
|
|
11
|
+
* @param status Optional status (`"success"`, `"error"`, etc.) controlling how the notice is styled.
|
|
12
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
13
|
+
* @example notify("Saved your changes", "success");
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notify
|
|
7
15
|
*/
|
|
8
16
|
export declare function notify(message: ReactNode, status?: Status | undefined, el?: EventTarget): void;
|
|
9
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Notify the user with a success message by dispatching a `notice` event with `"success"` status.
|
|
19
|
+
*
|
|
20
|
+
* @param message The success message to show, as a React node.
|
|
21
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
22
|
+
* @example notifySuccess("Profile updated");
|
|
23
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notifySuccess
|
|
24
|
+
*/
|
|
10
25
|
export declare function notifySuccess(message: ReactNode, el?: EventTarget): void;
|
|
11
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Notify the user with an error message by dispatching a `notice` event with `"error"` status.
|
|
28
|
+
*
|
|
29
|
+
* @param message The error message to show, as a React node.
|
|
30
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
31
|
+
* @example notifyError("Could not save your changes");
|
|
32
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notifyError
|
|
33
|
+
*/
|
|
12
34
|
export declare function notifyError(message: ReactNode, el?: EventTarget): void;
|
|
13
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Look at a thrown value, extract a viable message from it, and dispatch an error notice.
|
|
37
|
+
*
|
|
38
|
+
* - Uses `getMessage()` to pull a human-readable string from the thrown value.
|
|
39
|
+
* - Falls back to a generic `"Unknown error"` notice and `console.error()` when no message can be extracted.
|
|
40
|
+
*
|
|
41
|
+
* @param thrown The thrown value to report.
|
|
42
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
43
|
+
* @example try { await save(); } catch (thrown) { notifyThrown(thrown); }
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notifyThrown
|
|
45
|
+
*/
|
|
14
46
|
export declare function notifyThrown(thrown: unknown, el?: EventTarget): void;
|
|
15
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* Subscribe to `notice` events on an element and call a callback when they happen.
|
|
49
|
+
*
|
|
50
|
+
* - Stops propagation so the notice is not handled again by a higher subscriber.
|
|
51
|
+
*
|
|
52
|
+
* @param callback Called with the message and status each time a notice event fires.
|
|
53
|
+
* @param el Element to subscribe on (defaults to `window`).
|
|
54
|
+
* @returns An unsubscribe function that removes the listener.
|
|
55
|
+
* @example const stop = subscribeNotices((message, status) => show(message, status));
|
|
56
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/subscribeNotices
|
|
57
|
+
*/
|
|
16
58
|
export declare function subscribeNotices(callback: (message: ReactNode, status?: Status | undefined) => void, el?: EventTarget): () => void;
|
|
17
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Callback that can return or throw a value, triggering a success or error notice accordingly.
|
|
61
|
+
*
|
|
62
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/NoticeCallback
|
|
63
|
+
*/
|
|
18
64
|
export type NoticeCallback<A extends Arguments> = (...args: A) => PromiseLike<ReactNode | undefined | void> | ReactNode | undefined | void;
|
|
19
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Run a callback and dispatch a success or error notice to the window based on its return or throw.
|
|
67
|
+
*
|
|
68
|
+
* - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
|
|
69
|
+
* - Resolves asynchronously when the callback returns a promise.
|
|
70
|
+
*
|
|
71
|
+
* @param callback The callback to run, whose return/throw drives the notice.
|
|
72
|
+
* @param args Arguments forwarded to the callback.
|
|
73
|
+
* @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
|
|
74
|
+
* @example callNotified(() => save()); // notifies "success" or "error"
|
|
75
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/callNotified
|
|
76
|
+
*/
|
|
20
77
|
export declare function callNotified<A extends Arguments>(callback: NoticeCallback<A>, ...args: A): boolean | Promise<boolean>;
|
|
21
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* Await a pending value and dispatch a success or error notice to the window based on its resolution.
|
|
80
|
+
*
|
|
81
|
+
* - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
|
|
82
|
+
*
|
|
83
|
+
* @param pending The promise-like value to await.
|
|
84
|
+
* @returns `true` if the value resolved, `false` if it rejected.
|
|
85
|
+
* @example await awaitNotified(save());
|
|
86
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotified
|
|
87
|
+
*/
|
|
22
88
|
export declare function awaitNotified(pending: PromiseLike<ReactNode | undefined | void>): Promise<boolean>;
|
|
23
|
-
/**
|
|
89
|
+
/**
|
|
90
|
+
* Run a callback and dispatch a success or error notice to a specific element based on its return or throw.
|
|
91
|
+
*
|
|
92
|
+
* - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
|
|
93
|
+
* - Resolves asynchronously when the callback returns a promise.
|
|
94
|
+
*
|
|
95
|
+
* @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
|
|
96
|
+
* @param callback The callback to run, whose return/throw drives the notice.
|
|
97
|
+
* @param args Arguments forwarded to the callback.
|
|
98
|
+
* @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
|
|
99
|
+
* @example callNotifiedElement(formEl, () => save());
|
|
100
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/callNotifiedElement
|
|
101
|
+
*/
|
|
24
102
|
export declare function callNotifiedElement<A extends Arguments>(el: EventTarget | undefined, callback: NoticeCallback<A>, ...args: A): boolean | Promise<boolean>;
|
|
25
|
-
/**
|
|
103
|
+
/**
|
|
104
|
+
* Await a pending value and dispatch a success or error notice to a specific element based on its resolution.
|
|
105
|
+
*
|
|
106
|
+
* - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
|
|
107
|
+
*
|
|
108
|
+
* @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
|
|
109
|
+
* @param pending The promise-like value to await.
|
|
110
|
+
* @returns `true` if the value resolved, `false` if it rejected.
|
|
111
|
+
* @example await awaitNotifiedElement(formEl, save());
|
|
112
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotifiedElement
|
|
113
|
+
*/
|
|
26
114
|
export declare function awaitNotifiedElement(el: EventTarget | undefined, pending: PromiseLike<ReactNode | undefined | void>): Promise<boolean>;
|
package/ui/util/notice.js
CHANGED
|
@@ -6,8 +6,16 @@ const NOTICE_EVENT = "notice";
|
|
|
6
6
|
class NoticeEvent extends CustomEvent {
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* Notify the user with a message by dispatching a notice event.
|
|
9
|
+
* Notify the user with a message by dispatching a `notice` event.
|
|
10
|
+
*
|
|
10
11
|
* - This is how e.g. `<Button>` and `<FormNotify>` components send notices to the `<Notices>` list of global notices.
|
|
12
|
+
* - The event bubbles, so any ancestor subscribed with `subscribeNotices()` will receive it.
|
|
13
|
+
*
|
|
14
|
+
* @param message The message to show, as a React node.
|
|
15
|
+
* @param status Optional status (`"success"`, `"error"`, etc.) controlling how the notice is styled.
|
|
16
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
17
|
+
* @example notify("Saved your changes", "success");
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notify
|
|
11
19
|
*/
|
|
12
20
|
export function notify(message, status, el = window) {
|
|
13
21
|
el.dispatchEvent(new NoticeEvent(NOTICE_EVENT, {
|
|
@@ -15,15 +23,39 @@ export function notify(message, status, el = window) {
|
|
|
15
23
|
bubbles: true,
|
|
16
24
|
}));
|
|
17
25
|
}
|
|
18
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Notify the user with a success message by dispatching a `notice` event with `"success"` status.
|
|
28
|
+
*
|
|
29
|
+
* @param message The success message to show, as a React node.
|
|
30
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
31
|
+
* @example notifySuccess("Profile updated");
|
|
32
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notifySuccess
|
|
33
|
+
*/
|
|
19
34
|
export function notifySuccess(message, el) {
|
|
20
35
|
notify(message, "success", el);
|
|
21
36
|
}
|
|
22
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Notify the user with an error message by dispatching a `notice` event with `"error"` status.
|
|
39
|
+
*
|
|
40
|
+
* @param message The error message to show, as a React node.
|
|
41
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
42
|
+
* @example notifyError("Could not save your changes");
|
|
43
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notifyError
|
|
44
|
+
*/
|
|
23
45
|
export function notifyError(message, el) {
|
|
24
46
|
notify(message, "error", el);
|
|
25
47
|
}
|
|
26
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Look at a thrown value, extract a viable message from it, and dispatch an error notice.
|
|
50
|
+
*
|
|
51
|
+
* - Uses `getMessage()` to pull a human-readable string from the thrown value.
|
|
52
|
+
* - Falls back to a generic `"Unknown error"` notice and `console.error()` when no message can be extracted.
|
|
53
|
+
*
|
|
54
|
+
* @param thrown The thrown value to report.
|
|
55
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
56
|
+
* @example try { await save(); } catch (thrown) { notifyThrown(thrown); }
|
|
57
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notifyThrown
|
|
58
|
+
*/
|
|
27
59
|
export function notifyThrown(thrown, el) {
|
|
28
60
|
const message = getMessage(thrown);
|
|
29
61
|
if (message) {
|
|
@@ -34,7 +66,17 @@ export function notifyThrown(thrown, el) {
|
|
|
34
66
|
console.error(thrown);
|
|
35
67
|
}
|
|
36
68
|
}
|
|
37
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Subscribe to `notice` events on an element and call a callback when they happen.
|
|
71
|
+
*
|
|
72
|
+
* - Stops propagation so the notice is not handled again by a higher subscriber.
|
|
73
|
+
*
|
|
74
|
+
* @param callback Called with the message and status each time a notice event fires.
|
|
75
|
+
* @param el Element to subscribe on (defaults to `window`).
|
|
76
|
+
* @returns An unsubscribe function that removes the listener.
|
|
77
|
+
* @example const stop = subscribeNotices((message, status) => show(message, status));
|
|
78
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/subscribeNotices
|
|
79
|
+
*/
|
|
38
80
|
export function subscribeNotices(callback, el = window) {
|
|
39
81
|
const listener = (e) => {
|
|
40
82
|
e.stopPropagation(); // Prevent bubbling to a higher notice subscriber.
|
|
@@ -44,15 +86,47 @@ export function subscribeNotices(callback, el = window) {
|
|
|
44
86
|
el.addEventListener(NOTICE_EVENT, listener);
|
|
45
87
|
return () => el.removeEventListener(NOTICE_EVENT, listener);
|
|
46
88
|
}
|
|
47
|
-
/**
|
|
89
|
+
/**
|
|
90
|
+
* Run a callback and dispatch a success or error notice to the window based on its return or throw.
|
|
91
|
+
*
|
|
92
|
+
* - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
|
|
93
|
+
* - Resolves asynchronously when the callback returns a promise.
|
|
94
|
+
*
|
|
95
|
+
* @param callback The callback to run, whose return/throw drives the notice.
|
|
96
|
+
* @param args Arguments forwarded to the callback.
|
|
97
|
+
* @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
|
|
98
|
+
* @example callNotified(() => save()); // notifies "success" or "error"
|
|
99
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/callNotified
|
|
100
|
+
*/
|
|
48
101
|
export function callNotified(callback, ...args) {
|
|
49
102
|
return callNotifiedElement(window, callback, ...args);
|
|
50
103
|
}
|
|
51
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Await a pending value and dispatch a success or error notice to the window based on its resolution.
|
|
106
|
+
*
|
|
107
|
+
* - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
|
|
108
|
+
*
|
|
109
|
+
* @param pending The promise-like value to await.
|
|
110
|
+
* @returns `true` if the value resolved, `false` if it rejected.
|
|
111
|
+
* @example await awaitNotified(save());
|
|
112
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotified
|
|
113
|
+
*/
|
|
52
114
|
export function awaitNotified(pending) {
|
|
53
115
|
return awaitNotifiedElement(window, pending);
|
|
54
116
|
}
|
|
55
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* Run a callback and dispatch a success or error notice to a specific element based on its return or throw.
|
|
119
|
+
*
|
|
120
|
+
* - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
|
|
121
|
+
* - Resolves asynchronously when the callback returns a promise.
|
|
122
|
+
*
|
|
123
|
+
* @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
|
|
124
|
+
* @param callback The callback to run, whose return/throw drives the notice.
|
|
125
|
+
* @param args Arguments forwarded to the callback.
|
|
126
|
+
* @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
|
|
127
|
+
* @example callNotifiedElement(formEl, () => save());
|
|
128
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/callNotifiedElement
|
|
129
|
+
*/
|
|
56
130
|
export function callNotifiedElement(el, callback, ...args) {
|
|
57
131
|
try {
|
|
58
132
|
const result = callback(...args);
|
|
@@ -67,7 +141,17 @@ export function callNotifiedElement(el, callback, ...args) {
|
|
|
67
141
|
return false;
|
|
68
142
|
}
|
|
69
143
|
}
|
|
70
|
-
/**
|
|
144
|
+
/**
|
|
145
|
+
* Await a pending value and dispatch a success or error notice to a specific element based on its resolution.
|
|
146
|
+
*
|
|
147
|
+
* - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
|
|
148
|
+
*
|
|
149
|
+
* @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
|
|
150
|
+
* @param pending The promise-like value to await.
|
|
151
|
+
* @returns `true` if the value resolved, `false` if it rejected.
|
|
152
|
+
* @example await awaitNotifiedElement(formEl, save());
|
|
153
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotifiedElement
|
|
154
|
+
*/
|
|
71
155
|
export async function awaitNotifiedElement(el, pending) {
|
|
72
156
|
try {
|
|
73
157
|
const result = await pending;
|
package/ui/util/notice.ts
CHANGED
|
@@ -11,8 +11,16 @@ const NOTICE_EVENT = "notice";
|
|
|
11
11
|
class NoticeEvent extends CustomEvent<{ message: ReactNode; status: Status | undefined }> {}
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* Notify the user with a message by dispatching a notice event.
|
|
14
|
+
* Notify the user with a message by dispatching a `notice` event.
|
|
15
|
+
*
|
|
15
16
|
* - This is how e.g. `<Button>` and `<FormNotify>` components send notices to the `<Notices>` list of global notices.
|
|
17
|
+
* - The event bubbles, so any ancestor subscribed with `subscribeNotices()` will receive it.
|
|
18
|
+
*
|
|
19
|
+
* @param message The message to show, as a React node.
|
|
20
|
+
* @param status Optional status (`"success"`, `"error"`, etc.) controlling how the notice is styled.
|
|
21
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
22
|
+
* @example notify("Saved your changes", "success");
|
|
23
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notify
|
|
16
24
|
*/
|
|
17
25
|
export function notify(message: ReactNode, status?: Status | undefined, el: EventTarget = window): void {
|
|
18
26
|
el.dispatchEvent(
|
|
@@ -23,17 +31,41 @@ export function notify(message: ReactNode, status?: Status | undefined, el: Even
|
|
|
23
31
|
);
|
|
24
32
|
}
|
|
25
33
|
|
|
26
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Notify the user with a success message by dispatching a `notice` event with `"success"` status.
|
|
36
|
+
*
|
|
37
|
+
* @param message The success message to show, as a React node.
|
|
38
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
39
|
+
* @example notifySuccess("Profile updated");
|
|
40
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notifySuccess
|
|
41
|
+
*/
|
|
27
42
|
export function notifySuccess(message: ReactNode, el?: EventTarget) {
|
|
28
43
|
notify(message, "success", el);
|
|
29
44
|
}
|
|
30
45
|
|
|
31
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Notify the user with an error message by dispatching a `notice` event with `"error"` status.
|
|
48
|
+
*
|
|
49
|
+
* @param message The error message to show, as a React node.
|
|
50
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
51
|
+
* @example notifyError("Could not save your changes");
|
|
52
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notifyError
|
|
53
|
+
*/
|
|
32
54
|
export function notifyError(message: ReactNode, el?: EventTarget) {
|
|
33
55
|
notify(message, "error", el);
|
|
34
56
|
}
|
|
35
57
|
|
|
36
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* Look at a thrown value, extract a viable message from it, and dispatch an error notice.
|
|
60
|
+
*
|
|
61
|
+
* - Uses `getMessage()` to pull a human-readable string from the thrown value.
|
|
62
|
+
* - Falls back to a generic `"Unknown error"` notice and `console.error()` when no message can be extracted.
|
|
63
|
+
*
|
|
64
|
+
* @param thrown The thrown value to report.
|
|
65
|
+
* @param el Element to dispatch the event on (defaults to `window`).
|
|
66
|
+
* @example try { await save(); } catch (thrown) { notifyThrown(thrown); }
|
|
67
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/notifyThrown
|
|
68
|
+
*/
|
|
37
69
|
export function notifyThrown(thrown: unknown, el?: EventTarget) {
|
|
38
70
|
const message = getMessage(thrown);
|
|
39
71
|
if (message) {
|
|
@@ -44,7 +76,17 @@ export function notifyThrown(thrown: unknown, el?: EventTarget) {
|
|
|
44
76
|
}
|
|
45
77
|
}
|
|
46
78
|
|
|
47
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* Subscribe to `notice` events on an element and call a callback when they happen.
|
|
81
|
+
*
|
|
82
|
+
* - Stops propagation so the notice is not handled again by a higher subscriber.
|
|
83
|
+
*
|
|
84
|
+
* @param callback Called with the message and status each time a notice event fires.
|
|
85
|
+
* @param el Element to subscribe on (defaults to `window`).
|
|
86
|
+
* @returns An unsubscribe function that removes the listener.
|
|
87
|
+
* @example const stop = subscribeNotices((message, status) => show(message, status));
|
|
88
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/subscribeNotices
|
|
89
|
+
*/
|
|
48
90
|
export function subscribeNotices(
|
|
49
91
|
callback: (message: ReactNode, status?: Status | undefined) => void,
|
|
50
92
|
el: EventTarget = window,
|
|
@@ -57,20 +99,56 @@ export function subscribeNotices(
|
|
|
57
99
|
return () => el.removeEventListener(NOTICE_EVENT, listener);
|
|
58
100
|
}
|
|
59
101
|
|
|
60
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* Callback that can return or throw a value, triggering a success or error notice accordingly.
|
|
104
|
+
*
|
|
105
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/NoticeCallback
|
|
106
|
+
*/
|
|
61
107
|
export type NoticeCallback<A extends Arguments> = (...args: A) => PromiseLike<ReactNode | undefined | void> | ReactNode | undefined | void;
|
|
62
108
|
|
|
63
|
-
/**
|
|
109
|
+
/**
|
|
110
|
+
* Run a callback and dispatch a success or error notice to the window based on its return or throw.
|
|
111
|
+
*
|
|
112
|
+
* - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
|
|
113
|
+
* - Resolves asynchronously when the callback returns a promise.
|
|
114
|
+
*
|
|
115
|
+
* @param callback The callback to run, whose return/throw drives the notice.
|
|
116
|
+
* @param args Arguments forwarded to the callback.
|
|
117
|
+
* @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
|
|
118
|
+
* @example callNotified(() => save()); // notifies "success" or "error"
|
|
119
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/callNotified
|
|
120
|
+
*/
|
|
64
121
|
export function callNotified<A extends Arguments>(callback: NoticeCallback<A>, ...args: A): boolean | Promise<boolean> {
|
|
65
122
|
return callNotifiedElement(window, callback, ...args);
|
|
66
123
|
}
|
|
67
124
|
|
|
68
|
-
/**
|
|
125
|
+
/**
|
|
126
|
+
* Await a pending value and dispatch a success or error notice to the window based on its resolution.
|
|
127
|
+
*
|
|
128
|
+
* - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
|
|
129
|
+
*
|
|
130
|
+
* @param pending The promise-like value to await.
|
|
131
|
+
* @returns `true` if the value resolved, `false` if it rejected.
|
|
132
|
+
* @example await awaitNotified(save());
|
|
133
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotified
|
|
134
|
+
*/
|
|
69
135
|
export function awaitNotified(pending: PromiseLike<ReactNode | undefined | void>): Promise<boolean> {
|
|
70
136
|
return awaitNotifiedElement(window, pending);
|
|
71
137
|
}
|
|
72
138
|
|
|
73
|
-
/**
|
|
139
|
+
/**
|
|
140
|
+
* Run a callback and dispatch a success or error notice to a specific element based on its return or throw.
|
|
141
|
+
*
|
|
142
|
+
* - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
|
|
143
|
+
* - Resolves asynchronously when the callback returns a promise.
|
|
144
|
+
*
|
|
145
|
+
* @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
|
|
146
|
+
* @param callback The callback to run, whose return/throw drives the notice.
|
|
147
|
+
* @param args Arguments forwarded to the callback.
|
|
148
|
+
* @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
|
|
149
|
+
* @example callNotifiedElement(formEl, () => save());
|
|
150
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/callNotifiedElement
|
|
151
|
+
*/
|
|
74
152
|
export function callNotifiedElement<A extends Arguments>(
|
|
75
153
|
el: EventTarget | undefined,
|
|
76
154
|
callback: NoticeCallback<A>,
|
|
@@ -87,7 +165,17 @@ export function callNotifiedElement<A extends Arguments>(
|
|
|
87
165
|
}
|
|
88
166
|
}
|
|
89
167
|
|
|
90
|
-
/**
|
|
168
|
+
/**
|
|
169
|
+
* Await a pending value and dispatch a success or error notice to a specific element based on its resolution.
|
|
170
|
+
*
|
|
171
|
+
* - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
|
|
172
|
+
*
|
|
173
|
+
* @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
|
|
174
|
+
* @param pending The promise-like value to await.
|
|
175
|
+
* @returns `true` if the value resolved, `false` if it rejected.
|
|
176
|
+
* @example await awaitNotifiedElement(formEl, save());
|
|
177
|
+
* @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotifiedElement
|
|
178
|
+
*/
|
|
91
179
|
export async function awaitNotifiedElement(
|
|
92
180
|
el: EventTarget | undefined,
|
|
93
181
|
pending: PromiseLike<ReactNode | undefined | void>,
|
package/ui/util/props.d.ts
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Props for a component that requires `children`.
|
|
4
|
+
*
|
|
5
|
+
* @see https://dhoulb.github.io/shelving/ui/util/props/ChildProps
|
|
6
|
+
*/
|
|
3
7
|
export interface ChildProps {
|
|
4
8
|
readonly children: ReactNode;
|
|
5
9
|
}
|
|
6
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Props for a component that optionally accepts `children`.
|
|
12
|
+
*
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/ui/util/props/OptionalChildProps
|
|
14
|
+
*/
|
|
7
15
|
export interface OptionalChildProps {
|
|
8
16
|
readonly children?: ReactNode | undefined;
|
|
9
17
|
}
|
package/ui/util/props.ts
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
2
|
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Props for a component that requires `children`.
|
|
5
|
+
*
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/ui/util/props/ChildProps
|
|
7
|
+
*/
|
|
4
8
|
export interface ChildProps {
|
|
5
9
|
readonly children: ReactNode;
|
|
6
10
|
}
|
|
7
11
|
|
|
8
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Props for a component that optionally accepts `children`.
|
|
14
|
+
*
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/ui/util/props/OptionalChildProps
|
|
16
|
+
*/
|
|
9
17
|
export interface OptionalChildProps {
|
|
10
18
|
readonly children?: ReactNode | undefined;
|
|
11
19
|
}
|
package/ui/util/refresh.d.ts
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Re-render a component automatically on a fixed interval.
|
|
3
|
+
*
|
|
4
|
+
* - Holds the current time in state and updates it every `interval` milliseconds, forcing a refresh.
|
|
5
|
+
* - Clears the timer on unmount or when `interval` changes.
|
|
6
|
+
*
|
|
7
|
+
* @param interval The refresh period in milliseconds.
|
|
8
|
+
* @example useRefresh(1000); // re-renders once per second, e.g. for a live clock
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/ui/util/refresh/useRefresh
|
|
10
|
+
*/
|
|
2
11
|
export declare function useRefresh(interval: number): void;
|
package/ui/util/refresh.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { useEffect, useState } from "react";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Re-render a component automatically on a fixed interval.
|
|
4
|
+
*
|
|
5
|
+
* - Holds the current time in state and updates it every `interval` milliseconds, forcing a refresh.
|
|
6
|
+
* - Clears the timer on unmount or when `interval` changes.
|
|
7
|
+
*
|
|
8
|
+
* @param interval The refresh period in milliseconds.
|
|
9
|
+
* @example useRefresh(1000); // re-renders once per second, e.g. for a live clock
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/ui/util/refresh/useRefresh
|
|
11
|
+
*/
|
|
3
12
|
export function useRefresh(interval) {
|
|
4
13
|
const [_currentTime, setCurrentTime] = useState(() => Date.now());
|
|
5
14
|
useEffect(() => {
|
package/ui/util/refresh.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { useEffect, useState } from "react";
|
|
2
2
|
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Re-render a component automatically on a fixed interval.
|
|
5
|
+
*
|
|
6
|
+
* - Holds the current time in state and updates it every `interval` milliseconds, forcing a refresh.
|
|
7
|
+
* - Clears the timer on unmount or when `interval` changes.
|
|
8
|
+
*
|
|
9
|
+
* @param interval The refresh period in milliseconds.
|
|
10
|
+
* @example useRefresh(1000); // re-renders once per second, e.g. for a live clock
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/ui/util/refresh/useRefresh
|
|
12
|
+
*/
|
|
4
13
|
export function useRefresh(interval: number): void {
|
|
5
14
|
const [_currentTime, setCurrentTime] = useState<number>(() => Date.now());
|
|
6
15
|
|
package/ui/util/scroll.d.ts
CHANGED
|
@@ -2,10 +2,26 @@ import { type RefObject } from "react";
|
|
|
2
2
|
import type { Callback } from "../../util/function.js";
|
|
3
3
|
import type { Nullish } from "../../util/null.js";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
5
|
+
* Fire callbacks when a referenced element enters or leaves the visible scrolling area.
|
|
6
|
+
*
|
|
7
|
+
* - Returns a `ref` to attach to the element you want to observe — typically the last item in a scrolling list, for infinite-scroll loading.
|
|
8
|
+
* - Uses an `IntersectionObserver` with a full-visibility threshold and disconnects it on unmount or when callbacks change.
|
|
9
|
+
*
|
|
10
|
+
* @param onEnter Called when the element becomes fully visible.
|
|
11
|
+
* @param onLeave Called when the element stops being fully visible.
|
|
12
|
+
* @returns A React `ref` to attach to the element to observe.
|
|
13
|
+
* @example const ref = useScrollIntersect(loadMore); return <div ref={ref} />;
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/ui/util/scroll/useScrollIntersect
|
|
8
15
|
*/
|
|
9
16
|
export declare function useScrollIntersect<T extends HTMLElement>(onEnter?: Nullish<Callback>, onLeave?: Nullish<Callback>): RefObject<T | null>;
|
|
10
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Find the most-visible entry in a list of `IntersectionObserverEntry` objects.
|
|
19
|
+
*
|
|
20
|
+
* - Returns the entry with the highest `intersectionRatio`, or `undefined` for an empty list.
|
|
21
|
+
*
|
|
22
|
+
* @param entries The observer entries to compare (e.g. from an `IntersectionObserver` callback).
|
|
23
|
+
* @returns The entry with the largest visible ratio, or `undefined` when `entries` is empty.
|
|
24
|
+
* @example getMostVisibleObserverEntry(entries)?.target;
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/util/scroll/getMostVisibleObserverEntry
|
|
26
|
+
*/
|
|
11
27
|
export declare function getMostVisibleObserverEntry(entries: IntersectionObserverEntry[]): IntersectionObserverEntry | undefined;
|
package/ui/util/scroll.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { useEffect, useRef } from "react";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* -
|
|
3
|
+
* Fire callbacks when a referenced element enters or leaves the visible scrolling area.
|
|
4
|
+
*
|
|
5
|
+
* - Returns a `ref` to attach to the element you want to observe — typically the last item in a scrolling list, for infinite-scroll loading.
|
|
6
|
+
* - Uses an `IntersectionObserver` with a full-visibility threshold and disconnects it on unmount or when callbacks change.
|
|
7
|
+
*
|
|
8
|
+
* @param onEnter Called when the element becomes fully visible.
|
|
9
|
+
* @param onLeave Called when the element stops being fully visible.
|
|
10
|
+
* @returns A React `ref` to attach to the element to observe.
|
|
11
|
+
* @example const ref = useScrollIntersect(loadMore); return <div ref={ref} />;
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/ui/util/scroll/useScrollIntersect
|
|
6
13
|
*/
|
|
7
14
|
export function useScrollIntersect(onEnter, onLeave) {
|
|
8
15
|
const ref = useRef(null);
|
|
@@ -23,7 +30,16 @@ export function useScrollIntersect(onEnter, onLeave) {
|
|
|
23
30
|
}, [onEnter, onLeave]);
|
|
24
31
|
return ref;
|
|
25
32
|
}
|
|
26
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Find the most-visible entry in a list of `IntersectionObserverEntry` objects.
|
|
35
|
+
*
|
|
36
|
+
* - Returns the entry with the highest `intersectionRatio`, or `undefined` for an empty list.
|
|
37
|
+
*
|
|
38
|
+
* @param entries The observer entries to compare (e.g. from an `IntersectionObserver` callback).
|
|
39
|
+
* @returns The entry with the largest visible ratio, or `undefined` when `entries` is empty.
|
|
40
|
+
* @example getMostVisibleObserverEntry(entries)?.target;
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/ui/util/scroll/getMostVisibleObserverEntry
|
|
42
|
+
*/
|
|
27
43
|
export function getMostVisibleObserverEntry(entries) {
|
|
28
44
|
return entries.reduce(_reduceMostVisibleObserverEntry, undefined);
|
|
29
45
|
}
|
package/ui/util/scroll.ts
CHANGED
|
@@ -3,9 +3,16 @@ import type { Callback } from "../../util/function.js";
|
|
|
3
3
|
import type { Nullish } from "../../util/null.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* -
|
|
6
|
+
* Fire callbacks when a referenced element enters or leaves the visible scrolling area.
|
|
7
|
+
*
|
|
8
|
+
* - Returns a `ref` to attach to the element you want to observe — typically the last item in a scrolling list, for infinite-scroll loading.
|
|
9
|
+
* - Uses an `IntersectionObserver` with a full-visibility threshold and disconnects it on unmount or when callbacks change.
|
|
10
|
+
*
|
|
11
|
+
* @param onEnter Called when the element becomes fully visible.
|
|
12
|
+
* @param onLeave Called when the element stops being fully visible.
|
|
13
|
+
* @returns A React `ref` to attach to the element to observe.
|
|
14
|
+
* @example const ref = useScrollIntersect(loadMore); return <div ref={ref} />;
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/ui/util/scroll/useScrollIntersect
|
|
9
16
|
*/
|
|
10
17
|
export function useScrollIntersect<T extends HTMLElement>(onEnter?: Nullish<Callback>, onLeave?: Nullish<Callback>): RefObject<T | null> {
|
|
11
18
|
const ref = useRef<T | null>(null);
|
|
@@ -28,7 +35,16 @@ export function useScrollIntersect<T extends HTMLElement>(onEnter?: Nullish<Call
|
|
|
28
35
|
return ref;
|
|
29
36
|
}
|
|
30
37
|
|
|
31
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Find the most-visible entry in a list of `IntersectionObserverEntry` objects.
|
|
40
|
+
*
|
|
41
|
+
* - Returns the entry with the highest `intersectionRatio`, or `undefined` for an empty list.
|
|
42
|
+
*
|
|
43
|
+
* @param entries The observer entries to compare (e.g. from an `IntersectionObserver` callback).
|
|
44
|
+
* @returns The entry with the largest visible ratio, or `undefined` when `entries` is empty.
|
|
45
|
+
* @example getMostVisibleObserverEntry(entries)?.target;
|
|
46
|
+
* @see https://dhoulb.github.io/shelving/ui/util/scroll/getMostVisibleObserverEntry
|
|
47
|
+
*/
|
|
32
48
|
export function getMostVisibleObserverEntry(entries: IntersectionObserverEntry[]): IntersectionObserverEntry | undefined {
|
|
33
49
|
return entries.reduce<IntersectionObserverEntry | undefined>(_reduceMostVisibleObserverEntry, undefined);
|
|
34
50
|
}
|