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/form/Field.tsx
CHANGED
|
@@ -4,6 +4,11 @@ import { getClass } from "../util/css.js";
|
|
|
4
4
|
import type { ChildProps } from "../util/props.js";
|
|
5
5
|
import styles from "./Field.module.css";
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Props for `Field`, a labelled wrapper around a form control.
|
|
9
|
+
*
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Field/FieldProps
|
|
11
|
+
*/
|
|
7
12
|
export interface FieldProps extends ChildProps {
|
|
8
13
|
title?: ReactNode | undefined;
|
|
9
14
|
description?: ReactNode | undefined;
|
package/ui/form/FileInput.d.ts
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
2
|
import type { FileTypes } from "../../util/file.js";
|
|
3
3
|
import { type ValueInputProps } from "./Input.js";
|
|
4
|
+
/**
|
|
5
|
+
* Props for `FileInput`, an `<input type="file">` that emits the selected `File`.
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FileInput/FileInputProps
|
|
8
|
+
*/
|
|
4
9
|
export interface FileInputProps extends ValueInputProps<string | File> {
|
|
5
10
|
types?: FileTypes | undefined;
|
|
6
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* File picker input that emits the selected `File` through `onValue`.
|
|
14
|
+
* - The optional `types` dictionary restricts the picker's accepted file types.
|
|
15
|
+
*
|
|
16
|
+
* @param props Props including `onValue`, accepted `types`, and standard input flags.
|
|
17
|
+
* @returns A native `<input type="file">` element.
|
|
18
|
+
* @example <FileInput name="avatar" types={{ png: "image/png" }} onValue={setFile} />
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FileInput/FileInput
|
|
20
|
+
*/
|
|
7
21
|
export declare function FileInput({ name, title, placeholder, required, disabled, message, onValue, types, }: FileInputProps): ReactElement;
|
package/ui/form/FileInput.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { INPUT_CLASS } from "./Input.js";
|
|
3
|
+
/**
|
|
4
|
+
* File picker input that emits the selected `File` through `onValue`.
|
|
5
|
+
* - The optional `types` dictionary restricts the picker's accepted file types.
|
|
6
|
+
*
|
|
7
|
+
* @param props Props including `onValue`, accepted `types`, and standard input flags.
|
|
8
|
+
* @returns A native `<input type="file">` element.
|
|
9
|
+
* @example <FileInput name="avatar" types={{ png: "image/png" }} onValue={setFile} />
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FileInput/FileInput
|
|
11
|
+
*/
|
|
3
12
|
export function FileInput({ name, title, placeholder = title, required = false, disabled = false, message,
|
|
4
13
|
// value,
|
|
5
14
|
onValue, types = {}, }) {
|
package/ui/form/FileInput.tsx
CHANGED
|
@@ -2,10 +2,24 @@ import type { ReactElement, SyntheticEvent } from "react";
|
|
|
2
2
|
import type { FileTypes } from "../../util/file.js";
|
|
3
3
|
import { INPUT_CLASS, type ValueInputProps } from "./Input.js";
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Props for `FileInput`, an `<input type="file">` that emits the selected `File`.
|
|
7
|
+
*
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FileInput/FileInputProps
|
|
9
|
+
*/
|
|
5
10
|
export interface FileInputProps extends ValueInputProps<string | File> {
|
|
6
11
|
types?: FileTypes | undefined;
|
|
7
12
|
}
|
|
8
13
|
|
|
14
|
+
/**
|
|
15
|
+
* File picker input that emits the selected `File` through `onValue`.
|
|
16
|
+
* - The optional `types` dictionary restricts the picker's accepted file types.
|
|
17
|
+
*
|
|
18
|
+
* @param props Props including `onValue`, accepted `types`, and standard input flags.
|
|
19
|
+
* @returns A native `<input type="file">` element.
|
|
20
|
+
* @example <FileInput name="avatar" types={{ png: "image/png" }} onValue={setFile} />
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FileInput/FileInput
|
|
22
|
+
*/
|
|
9
23
|
export function FileInput({
|
|
10
24
|
name,
|
|
11
25
|
title,
|
package/ui/form/Form.d.ts
CHANGED
|
@@ -7,11 +7,18 @@ import { type NoticeCallback } from "../util/notice.js";
|
|
|
7
7
|
import type { OptionalChildProps } from "../util/props.js";
|
|
8
8
|
import { FormStore } from "./FormStore.js";
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
* - Returned value (if defined) is notified to the user using `notifySuccess()
|
|
12
|
-
* - Thrown value is notified to the user using `notifyError()
|
|
10
|
+
* Callback invoked when a `Form` is submitted with its validated data.
|
|
11
|
+
* - Returned value (if defined) is notified to the user using `notifySuccess()`.
|
|
12
|
+
* - Thrown value is notified to the user using `notifyError()`.
|
|
13
|
+
*
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/FormCallback
|
|
13
15
|
*/
|
|
14
16
|
export type FormCallback<T extends Data> = (data: T, event: SubmitEvent<HTMLFormElement>) => ReactNode | void | PromiseLike<ReactNode | void>;
|
|
17
|
+
/**
|
|
18
|
+
* Props for `Form`, the schema-driven form wrapper component.
|
|
19
|
+
*
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/FormProps
|
|
21
|
+
*/
|
|
15
22
|
export interface FormProps<T extends Data> extends OptionalChildProps {
|
|
16
23
|
/** Schema for the form. */
|
|
17
24
|
schema: DataSchema<T>;
|
|
@@ -24,10 +31,52 @@ export interface FormProps<T extends Data> extends OptionalChildProps {
|
|
|
24
31
|
/** Initial set of messages for the form as either a dictionary or a string with `fieldName:` style messages. */
|
|
25
32
|
messages?: ImmutableDictionary<string> | string | undefined;
|
|
26
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Schema-driven form that creates a `FormStore`, provides it via `FormContext`, and validates/submits on submit.
|
|
36
|
+
* - Renders its fields and footer by default, or custom `children` that read the form via hooks.
|
|
37
|
+
* - Closes a parent `<dialog>` automatically on successful submit.
|
|
38
|
+
*
|
|
39
|
+
* @param props Props including `schema`, initial `data`, `onSubmit`, `submit` content, and initial `messages`.
|
|
40
|
+
* @returns A `<form>` element wrapping the fields in a `FormContext` provider.
|
|
41
|
+
* @example <Form schema={USER_SCHEMA} onSubmit={save} />
|
|
42
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/Form
|
|
43
|
+
*/
|
|
27
44
|
export declare function Form<T extends Data>(props: FormProps<T>): ReactElement;
|
|
28
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Run a form submit callback and publish success/error notices based on its return or thrown value.
|
|
47
|
+
* - Strings returned are shown as success notices; thrown values are routed through `notifyThrownForm()`.
|
|
48
|
+
* - Async callbacks are awaited via `awaitNotifiedForm()`.
|
|
49
|
+
*
|
|
50
|
+
* @param value The validated form data passed to the callback.
|
|
51
|
+
* @param store The `FormStore` the form is bound to.
|
|
52
|
+
* @param form The underlying `HTMLFormElement` notices are anchored to.
|
|
53
|
+
* @param callback Optional callback to run with the value and extra args.
|
|
54
|
+
* @param args Additional arguments forwarded to the callback.
|
|
55
|
+
* @returns `true` on success, `false` on failure (or a `Promise` resolving to one).
|
|
56
|
+
* @example callNotifiedForm(data, store, formEl, onSubmit, event)
|
|
57
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/callNotifiedForm
|
|
58
|
+
*/
|
|
29
59
|
export declare function callNotifiedForm<T extends Data, A extends Arguments>(value: T, store: FormStore<T>, form: HTMLFormElement, callback?: NoticeCallback<[T, ...A]>, ...args: A): boolean | Promise<boolean>;
|
|
30
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* Await a pending submit result and publish a success or error notice to a form once it settles.
|
|
62
|
+
*
|
|
63
|
+
* @param store The `FormStore` the form is bound to.
|
|
64
|
+
* @param form The underlying `HTMLFormElement` notices are anchored to.
|
|
65
|
+
* @param pending The pending result to await.
|
|
66
|
+
* @returns A `Promise` resolving to `true` on success or `false` on failure.
|
|
67
|
+
* @example await awaitNotifiedForm(store, formEl, pending)
|
|
68
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/awaitNotifiedForm
|
|
69
|
+
*/
|
|
31
70
|
export declare function awaitNotifiedForm<T extends Data>(store: FormStore<T>, form: HTMLFormElement, pending: PromiseLike<ReactNode | undefined | void>): Promise<boolean>;
|
|
32
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* Notify the user about a value thrown during submit, storing string errors as form field messages.
|
|
73
|
+
* - Assigning a string `reason` to the store splits it into per-field messages instead of a global notice.
|
|
74
|
+
*
|
|
75
|
+
* @param store The `FormStore` the thrown value is recorded on.
|
|
76
|
+
* @param form The underlying `HTMLFormElement` notices are anchored to.
|
|
77
|
+
* @param thrown The value thrown during submit.
|
|
78
|
+
* @returns Always `false`, signalling the submit failed.
|
|
79
|
+
* @example notifyThrownForm(store, formEl, thrown)
|
|
80
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/notifyThrownForm
|
|
81
|
+
*/
|
|
33
82
|
export declare function notifyThrownForm<T extends Data>(store: FormStore<T>, form: HTMLFormElement, thrown: unknown): false;
|
package/ui/form/Form.js
CHANGED
|
@@ -25,7 +25,20 @@ export function Form({ schema, data: initialData, onSubmit, submit, messages, ch
|
|
|
25
25
|
dialog?.close();
|
|
26
26
|
}, className: styles.form, noValidate: true, children: _jsx("fieldset", { className: styles.fieldset, disabled: busy, children: _jsx(FormContext, { value: store, children: children }) }) }, store.key));
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Run a form submit callback and publish success/error notices based on its return or thrown value.
|
|
30
|
+
* - Strings returned are shown as success notices; thrown values are routed through `notifyThrownForm()`.
|
|
31
|
+
* - Async callbacks are awaited via `awaitNotifiedForm()`.
|
|
32
|
+
*
|
|
33
|
+
* @param value The validated form data passed to the callback.
|
|
34
|
+
* @param store The `FormStore` the form is bound to.
|
|
35
|
+
* @param form The underlying `HTMLFormElement` notices are anchored to.
|
|
36
|
+
* @param callback Optional callback to run with the value and extra args.
|
|
37
|
+
* @param args Additional arguments forwarded to the callback.
|
|
38
|
+
* @returns `true` on success, `false` on failure (or a `Promise` resolving to one).
|
|
39
|
+
* @example callNotifiedForm(data, store, formEl, onSubmit, event)
|
|
40
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/callNotifiedForm
|
|
41
|
+
*/
|
|
29
42
|
export function callNotifiedForm(value, store, form, callback, ...args) {
|
|
30
43
|
try {
|
|
31
44
|
const result = callback?.(value, ...args);
|
|
@@ -39,7 +52,16 @@ export function callNotifiedForm(value, store, form, callback, ...args) {
|
|
|
39
52
|
return notifyThrownForm(store, form, thrown);
|
|
40
53
|
}
|
|
41
54
|
}
|
|
42
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* Await a pending submit result and publish a success or error notice to a form once it settles.
|
|
57
|
+
*
|
|
58
|
+
* @param store The `FormStore` the form is bound to.
|
|
59
|
+
* @param form The underlying `HTMLFormElement` notices are anchored to.
|
|
60
|
+
* @param pending The pending result to await.
|
|
61
|
+
* @returns A `Promise` resolving to `true` on success or `false` on failure.
|
|
62
|
+
* @example await awaitNotifiedForm(store, formEl, pending)
|
|
63
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/awaitNotifiedForm
|
|
64
|
+
*/
|
|
43
65
|
export async function awaitNotifiedForm(store, form, pending) {
|
|
44
66
|
try {
|
|
45
67
|
const result = await pending;
|
|
@@ -51,7 +73,17 @@ export async function awaitNotifiedForm(store, form, pending) {
|
|
|
51
73
|
return notifyThrownForm(store, form, thrown);
|
|
52
74
|
}
|
|
53
75
|
}
|
|
54
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Notify the user about a value thrown during submit, storing string errors as form field messages.
|
|
78
|
+
* - Assigning a string `reason` to the store splits it into per-field messages instead of a global notice.
|
|
79
|
+
*
|
|
80
|
+
* @param store The `FormStore` the thrown value is recorded on.
|
|
81
|
+
* @param form The underlying `HTMLFormElement` notices are anchored to.
|
|
82
|
+
* @param thrown The value thrown during submit.
|
|
83
|
+
* @returns Always `false`, signalling the submit failed.
|
|
84
|
+
* @example notifyThrownForm(store, formEl, thrown)
|
|
85
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/notifyThrownForm
|
|
86
|
+
*/
|
|
55
87
|
export function notifyThrownForm(store, form, thrown) {
|
|
56
88
|
store.reason = thrown;
|
|
57
89
|
const reason = store.reason;
|
package/ui/form/Form.tsx
CHANGED
|
@@ -15,15 +15,22 @@ import { FormFooter } from "./FormFooter.js";
|
|
|
15
15
|
import { FormStore } from "./FormStore.js";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
19
|
-
* - Returned value (if defined) is notified to the user using `notifySuccess()
|
|
20
|
-
* - Thrown value is notified to the user using `notifyError()
|
|
18
|
+
* Callback invoked when a `Form` is submitted with its validated data.
|
|
19
|
+
* - Returned value (if defined) is notified to the user using `notifySuccess()`.
|
|
20
|
+
* - Thrown value is notified to the user using `notifyError()`.
|
|
21
|
+
*
|
|
22
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/FormCallback
|
|
21
23
|
*/
|
|
22
24
|
export type FormCallback<T extends Data> = (
|
|
23
25
|
data: T,
|
|
24
26
|
event: SubmitEvent<HTMLFormElement>,
|
|
25
27
|
) => ReactNode | void | PromiseLike<ReactNode | void>;
|
|
26
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Props for `Form`, the schema-driven form wrapper component.
|
|
31
|
+
*
|
|
32
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/FormProps
|
|
33
|
+
*/
|
|
27
34
|
export interface FormProps<T extends Data> extends OptionalChildProps {
|
|
28
35
|
/** Schema for the form. */
|
|
29
36
|
schema: DataSchema<T>;
|
|
@@ -37,6 +44,16 @@ export interface FormProps<T extends Data> extends OptionalChildProps {
|
|
|
37
44
|
messages?: ImmutableDictionary<string> | string | undefined;
|
|
38
45
|
}
|
|
39
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Schema-driven form that creates a `FormStore`, provides it via `FormContext`, and validates/submits on submit.
|
|
49
|
+
* - Renders its fields and footer by default, or custom `children` that read the form via hooks.
|
|
50
|
+
* - Closes a parent `<dialog>` automatically on successful submit.
|
|
51
|
+
*
|
|
52
|
+
* @param props Props including `schema`, initial `data`, `onSubmit`, `submit` content, and initial `messages`.
|
|
53
|
+
* @returns A `<form>` element wrapping the fields in a `FormContext` provider.
|
|
54
|
+
* @example <Form schema={USER_SCHEMA} onSubmit={save} />
|
|
55
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/Form
|
|
56
|
+
*/
|
|
40
57
|
export function Form<T extends Data>(props: FormProps<T>): ReactElement;
|
|
41
58
|
export function Form({
|
|
42
59
|
schema,
|
|
@@ -83,7 +100,20 @@ export function Form({
|
|
|
83
100
|
);
|
|
84
101
|
}
|
|
85
102
|
|
|
86
|
-
/**
|
|
103
|
+
/**
|
|
104
|
+
* Run a form submit callback and publish success/error notices based on its return or thrown value.
|
|
105
|
+
* - Strings returned are shown as success notices; thrown values are routed through `notifyThrownForm()`.
|
|
106
|
+
* - Async callbacks are awaited via `awaitNotifiedForm()`.
|
|
107
|
+
*
|
|
108
|
+
* @param value The validated form data passed to the callback.
|
|
109
|
+
* @param store The `FormStore` the form is bound to.
|
|
110
|
+
* @param form The underlying `HTMLFormElement` notices are anchored to.
|
|
111
|
+
* @param callback Optional callback to run with the value and extra args.
|
|
112
|
+
* @param args Additional arguments forwarded to the callback.
|
|
113
|
+
* @returns `true` on success, `false` on failure (or a `Promise` resolving to one).
|
|
114
|
+
* @example callNotifiedForm(data, store, formEl, onSubmit, event)
|
|
115
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/callNotifiedForm
|
|
116
|
+
*/
|
|
87
117
|
export function callNotifiedForm<T extends Data, A extends Arguments>(
|
|
88
118
|
value: T,
|
|
89
119
|
store: FormStore<T>,
|
|
@@ -101,7 +131,16 @@ export function callNotifiedForm<T extends Data, A extends Arguments>(
|
|
|
101
131
|
}
|
|
102
132
|
}
|
|
103
133
|
|
|
104
|
-
/**
|
|
134
|
+
/**
|
|
135
|
+
* Await a pending submit result and publish a success or error notice to a form once it settles.
|
|
136
|
+
*
|
|
137
|
+
* @param store The `FormStore` the form is bound to.
|
|
138
|
+
* @param form The underlying `HTMLFormElement` notices are anchored to.
|
|
139
|
+
* @param pending The pending result to await.
|
|
140
|
+
* @returns A `Promise` resolving to `true` on success or `false` on failure.
|
|
141
|
+
* @example await awaitNotifiedForm(store, formEl, pending)
|
|
142
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/awaitNotifiedForm
|
|
143
|
+
*/
|
|
105
144
|
export async function awaitNotifiedForm<T extends Data>(
|
|
106
145
|
store: FormStore<T>,
|
|
107
146
|
form: HTMLFormElement,
|
|
@@ -116,7 +155,17 @@ export async function awaitNotifiedForm<T extends Data>(
|
|
|
116
155
|
}
|
|
117
156
|
}
|
|
118
157
|
|
|
119
|
-
/**
|
|
158
|
+
/**
|
|
159
|
+
* Notify the user about a value thrown during submit, storing string errors as form field messages.
|
|
160
|
+
* - Assigning a string `reason` to the store splits it into per-field messages instead of a global notice.
|
|
161
|
+
*
|
|
162
|
+
* @param store The `FormStore` the thrown value is recorded on.
|
|
163
|
+
* @param form The underlying `HTMLFormElement` notices are anchored to.
|
|
164
|
+
* @param thrown The value thrown during submit.
|
|
165
|
+
* @returns Always `false`, signalling the submit failed.
|
|
166
|
+
* @example notifyThrownForm(store, formEl, thrown)
|
|
167
|
+
* @see https://dhoulb.github.io/shelving/ui/form/Form/notifyThrownForm
|
|
168
|
+
*/
|
|
120
169
|
export function notifyThrownForm<T extends Data>(store: FormStore<T>, form: HTMLFormElement, thrown: unknown): false {
|
|
121
170
|
store.reason = thrown;
|
|
122
171
|
const reason = store.reason;
|
package/ui/form/FormContext.d.ts
CHANGED
|
@@ -3,11 +3,32 @@ import type { Data } from "../../util/data.js";
|
|
|
3
3
|
import type { AnyCaller } from "../../util/function.js";
|
|
4
4
|
import type { FormStore } from "./FormStore.js";
|
|
5
5
|
import { type SchemaInputProps } from "./SchemaInput.js";
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* React context holding the current `FormStore`, provided by the `Form` component.
|
|
8
|
+
*
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormContext/FormContext
|
|
10
|
+
*/
|
|
7
11
|
export declare const FormContext: import("react").Context<FormStore<Data> | undefined>;
|
|
8
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Hook that returns the current form's `FormStore` from context.
|
|
14
|
+
*
|
|
15
|
+
* @param caller Function to attribute the error to if no form context is found.
|
|
16
|
+
* @returns The current `FormStore` instance.
|
|
17
|
+
* @throws `RequiredError` if called outside a `Form` component.
|
|
18
|
+
* @example const form = requireForm();
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormContext/requireForm
|
|
20
|
+
*/
|
|
9
21
|
export declare function requireForm<T extends Data = Data>(caller?: AnyCaller): FormStore<T>;
|
|
10
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Hook that returns the input props for a single named field of a form.
|
|
24
|
+
* - Subscribes to the form store so the field re-renders when its value or message changes.
|
|
25
|
+
*
|
|
26
|
+
* @param name Name of the field to read props for.
|
|
27
|
+
* @param form Form store to read from, defaulting to the current form context.
|
|
28
|
+
* @returns Props (`name`, `schema`, `value`, `onValue`, `message`, `required`) ready to spread onto an input.
|
|
29
|
+
* @example const field = useField("email");
|
|
30
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormContext/useField
|
|
31
|
+
*/
|
|
11
32
|
export declare function useField<T, I = never>(name: string, form?: FormStore<{
|
|
12
33
|
[name: string]: T;
|
|
13
34
|
}>): SchemaInputProps<Schema<T>, I>;
|
package/ui/form/FormContext.js
CHANGED
|
@@ -2,7 +2,11 @@ import { createContext } from "react";
|
|
|
2
2
|
import { useStore } from "../../react/useStore.js";
|
|
3
3
|
import { requireContext } from "../util/context.js";
|
|
4
4
|
import { isSchemaRequired } from "./SchemaInput.js";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* React context holding the current `FormStore`, provided by the `Form` component.
|
|
7
|
+
*
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormContext/FormContext
|
|
9
|
+
*/
|
|
6
10
|
export const FormContext = createContext(undefined);
|
|
7
11
|
FormContext.displayName = "FormContext";
|
|
8
12
|
export function requireForm() {
|
package/ui/form/FormContext.tsx
CHANGED
|
@@ -7,17 +7,38 @@ import { requireContext } from "../util/context.js";
|
|
|
7
7
|
import type { FormStore } from "./FormStore.js";
|
|
8
8
|
import { isSchemaRequired, type SchemaInputProps } from "./SchemaInput.js";
|
|
9
9
|
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* React context holding the current `FormStore`, provided by the `Form` component.
|
|
12
|
+
*
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormContext/FormContext
|
|
14
|
+
*/
|
|
11
15
|
export const FormContext = createContext<FormStore<Data> | undefined>(undefined);
|
|
12
16
|
FormContext.displayName = "FormContext";
|
|
13
17
|
|
|
14
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Hook that returns the current form's `FormStore` from context.
|
|
20
|
+
*
|
|
21
|
+
* @param caller Function to attribute the error to if no form context is found.
|
|
22
|
+
* @returns The current `FormStore` instance.
|
|
23
|
+
* @throws `RequiredError` if called outside a `Form` component.
|
|
24
|
+
* @example const form = requireForm();
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormContext/requireForm
|
|
26
|
+
*/
|
|
15
27
|
export function requireForm<T extends Data = Data>(caller?: AnyCaller): FormStore<T>;
|
|
16
28
|
export function requireForm(): FormStore<Data> {
|
|
17
29
|
return requireContext(FormContext, requireForm);
|
|
18
30
|
}
|
|
19
31
|
|
|
20
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Hook that returns the input props for a single named field of a form.
|
|
34
|
+
* - Subscribes to the form store so the field re-renders when its value or message changes.
|
|
35
|
+
*
|
|
36
|
+
* @param name Name of the field to read props for.
|
|
37
|
+
* @param form Form store to read from, defaulting to the current form context.
|
|
38
|
+
* @returns Props (`name`, `schema`, `value`, `onValue`, `message`, `required`) ready to spread onto an input.
|
|
39
|
+
* @example const field = useField("email");
|
|
40
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormContext/useField
|
|
41
|
+
*/
|
|
21
42
|
export function useField<T, I = never>(name: string, form?: FormStore<{ [name: string]: T }>): SchemaInputProps<Schema<T>, I>;
|
|
22
43
|
export function useField(name: string, form: FormStore<Data> = requireForm(useField)): SchemaInputProps<Schema<unknown>> {
|
|
23
44
|
useStore(form);
|
package/ui/form/FormFields.d.ts
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
2
|
import type { InputProps } from "./Input.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Show a `<Field>` (label, input, and message) for a single named property of the current form.
|
|
5
|
+
*
|
|
6
|
+
* @param props Input props including the field `name`.
|
|
7
|
+
* @returns A `<Field>` wrapping a `SchemaInput` bound to the named field.
|
|
8
|
+
* @example <FormField name="email" />
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFields/FormField
|
|
10
|
+
*/
|
|
4
11
|
export declare function FormField({ name, ...props }: InputProps): ReactElement;
|
|
5
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Show a `<Field>` for every property in the current form's schema.
|
|
14
|
+
*
|
|
15
|
+
* @returns A fragment of `FormField` elements, one per schema property.
|
|
16
|
+
* @example <FormFields />
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFields/FormFields
|
|
18
|
+
*/
|
|
6
19
|
export declare function FormFields(): ReactElement;
|
package/ui/form/FormFields.js
CHANGED
|
@@ -3,13 +3,26 @@ import { useStore } from "../../react/useStore.js";
|
|
|
3
3
|
import { Field } from "./Field.js";
|
|
4
4
|
import { requireForm, useField } from "./FormContext.js";
|
|
5
5
|
import { SchemaInput } from "./SchemaInput.js";
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Show a `<Field>` (label, input, and message) for a single named property of the current form.
|
|
8
|
+
*
|
|
9
|
+
* @param props Input props including the field `name`.
|
|
10
|
+
* @returns A `<Field>` wrapping a `SchemaInput` bound to the named field.
|
|
11
|
+
* @example <FormField name="email" />
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFields/FormField
|
|
13
|
+
*/
|
|
7
14
|
export function FormField({ name, ...props }) {
|
|
8
15
|
const field = useField(name);
|
|
9
16
|
const { schema, message } = field;
|
|
10
17
|
return (_jsx(Field, { ...schema, message: message, required: props.required, children: _jsx(SchemaInput, { ...field, ...props }) }));
|
|
11
18
|
}
|
|
12
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Show a `<Field>` for every property in the current form's schema.
|
|
21
|
+
*
|
|
22
|
+
* @returns A fragment of `FormField` elements, one per schema property.
|
|
23
|
+
* @example <FormFields />
|
|
24
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFields/FormFields
|
|
25
|
+
*/
|
|
13
26
|
export function FormFields() {
|
|
14
27
|
const form = useStore(requireForm());
|
|
15
28
|
return (_jsx(_Fragment, { children: Object.keys(form.schema.props).map(name => (_jsx(FormField, { name: name }, name))) }));
|
package/ui/form/FormFields.tsx
CHANGED
|
@@ -5,7 +5,14 @@ import { requireForm, useField } from "./FormContext.js";
|
|
|
5
5
|
import type { InputProps } from "./Input.js";
|
|
6
6
|
import { SchemaInput } from "./SchemaInput.js";
|
|
7
7
|
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Show a `<Field>` (label, input, and message) for a single named property of the current form.
|
|
10
|
+
*
|
|
11
|
+
* @param props Input props including the field `name`.
|
|
12
|
+
* @returns A `<Field>` wrapping a `SchemaInput` bound to the named field.
|
|
13
|
+
* @example <FormField name="email" />
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFields/FormField
|
|
15
|
+
*/
|
|
9
16
|
export function FormField({ name, ...props }: InputProps): ReactElement {
|
|
10
17
|
const field = useField(name);
|
|
11
18
|
const { schema, message } = field;
|
|
@@ -17,7 +24,13 @@ export function FormField({ name, ...props }: InputProps): ReactElement {
|
|
|
17
24
|
);
|
|
18
25
|
}
|
|
19
26
|
|
|
20
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Show a `<Field>` for every property in the current form's schema.
|
|
29
|
+
*
|
|
30
|
+
* @returns A fragment of `FormField` elements, one per schema property.
|
|
31
|
+
* @example <FormFields />
|
|
32
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFields/FormFields
|
|
33
|
+
*/
|
|
21
34
|
export function FormFields(): ReactElement {
|
|
22
35
|
const form = useStore(requireForm());
|
|
23
36
|
return (
|
package/ui/form/FormFooter.d.ts
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import type { ReactElement, ReactNode } from "react";
|
|
2
2
|
import type { OptionalChildProps } from "../util/props.js";
|
|
3
|
+
/**
|
|
4
|
+
* Props for `FormFooter`, the submit-button-and-message footer for a form.
|
|
5
|
+
*
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFooter/FormFooterProps
|
|
7
|
+
*/
|
|
3
8
|
export interface FormFooterProps extends OptionalChildProps {
|
|
4
9
|
submit?: ReactNode | undefined;
|
|
5
10
|
}
|
|
6
11
|
/**
|
|
7
|
-
* Show a form footer with
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
12
|
+
* Show a form footer with a submit button and the form's error message.
|
|
13
|
+
* - Renders a row containing a `SubmitButton` (and any extra buttons passed as `children`).
|
|
14
|
+
* - Renders a `<FormMessage>` beneath the buttons showing any error set on the form.
|
|
15
|
+
*
|
|
16
|
+
* @param props Props including footer `children` and custom `submit` button content.
|
|
17
|
+
* @returns A footer element with the submit row and form message.
|
|
18
|
+
* @example <FormFooter submit="Save" />
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFooter/FormFooter
|
|
10
20
|
*/
|
|
11
21
|
export declare function FormFooter({ children, submit }: FormFooterProps): ReactElement;
|
package/ui/form/FormFooter.js
CHANGED
|
@@ -4,9 +4,14 @@ import { Row } from "../style/Flex.js";
|
|
|
4
4
|
import { FormMessage } from "./FormMessage.js";
|
|
5
5
|
import { SubmitButton } from "./SubmitButton.js";
|
|
6
6
|
/**
|
|
7
|
-
* Show a form footer with
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
7
|
+
* Show a form footer with a submit button and the form's error message.
|
|
8
|
+
* - Renders a row containing a `SubmitButton` (and any extra buttons passed as `children`).
|
|
9
|
+
* - Renders a `<FormMessage>` beneath the buttons showing any error set on the form.
|
|
10
|
+
*
|
|
11
|
+
* @param props Props including footer `children` and custom `submit` button content.
|
|
12
|
+
* @returns A footer element with the submit row and form message.
|
|
13
|
+
* @example <FormFooter submit="Save" />
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFooter/FormFooter
|
|
10
15
|
*/
|
|
11
16
|
export function FormFooter({ children, submit }) {
|
|
12
17
|
return (_jsxs(Footer, { children: [_jsxs(Row, { reverse: true, children: [_jsx(SubmitButton, { children: submit }), children] }), _jsx(FormMessage, {})] }));
|
package/ui/form/FormFooter.tsx
CHANGED
|
@@ -5,14 +5,24 @@ import type { OptionalChildProps } from "../util/props.js";
|
|
|
5
5
|
import { FormMessage } from "./FormMessage.js";
|
|
6
6
|
import { SubmitButton } from "./SubmitButton.js";
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Props for `FormFooter`, the submit-button-and-message footer for a form.
|
|
10
|
+
*
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFooter/FormFooterProps
|
|
12
|
+
*/
|
|
8
13
|
export interface FormFooterProps extends OptionalChildProps {
|
|
9
14
|
submit?: ReactNode | undefined;
|
|
10
15
|
}
|
|
11
16
|
|
|
12
17
|
/**
|
|
13
|
-
* Show a form footer with
|
|
14
|
-
* -
|
|
15
|
-
* -
|
|
18
|
+
* Show a form footer with a submit button and the form's error message.
|
|
19
|
+
* - Renders a row containing a `SubmitButton` (and any extra buttons passed as `children`).
|
|
20
|
+
* - Renders a `<FormMessage>` beneath the buttons showing any error set on the form.
|
|
21
|
+
*
|
|
22
|
+
* @param props Props including footer `children` and custom `submit` button content.
|
|
23
|
+
* @returns A footer element with the submit row and form message.
|
|
24
|
+
* @example <FormFooter submit="Save" />
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormFooter/FormFooter
|
|
16
26
|
*/
|
|
17
27
|
export function FormFooter({ children, submit }: FormFooterProps): ReactElement {
|
|
18
28
|
return (
|
package/ui/form/FormInput.d.ts
CHANGED
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
2
|
import type { InputProps } from "./Input.js";
|
|
3
|
+
/**
|
|
4
|
+
* Props for `FormInput`, a bare `SchemaInput` bound to a named form field.
|
|
5
|
+
*
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormInput/FormInputProps
|
|
7
|
+
*/
|
|
3
8
|
export interface FormInputProps extends InputProps {
|
|
4
9
|
}
|
|
5
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Show a `SchemaInput` for a single named property of the current form.
|
|
12
|
+
* - Reads the field's value, schema, and message from the form context via `useField()`.
|
|
13
|
+
*
|
|
14
|
+
* @param props Input props including the field `name`.
|
|
15
|
+
* @returns A `SchemaInput` bound to the named field.
|
|
16
|
+
* @example <FormInput name="email" />
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormInput/FormInput
|
|
18
|
+
*/
|
|
6
19
|
export declare function FormInput({ name, ...props }: FormInputProps): ReactElement;
|
|
7
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Show a `SchemaInput` for every property in the current form's schema.
|
|
22
|
+
*
|
|
23
|
+
* @returns A fragment of `FormInput` elements, one per schema property.
|
|
24
|
+
* @example <FormInputs />
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormInput/FormInputs
|
|
26
|
+
*/
|
|
8
27
|
export declare function FormInputs(): ReactElement;
|
package/ui/form/FormInput.js
CHANGED
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { requireForm, useField } from "./FormContext.js";
|
|
3
3
|
import { SchemaInput } from "./SchemaInput.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Show a `SchemaInput` for a single named property of the current form.
|
|
6
|
+
* - Reads the field's value, schema, and message from the form context via `useField()`.
|
|
7
|
+
*
|
|
8
|
+
* @param props Input props including the field `name`.
|
|
9
|
+
* @returns A `SchemaInput` bound to the named field.
|
|
10
|
+
* @example <FormInput name="email" />
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormInput/FormInput
|
|
12
|
+
*/
|
|
5
13
|
export function FormInput({ name, ...props }) {
|
|
6
14
|
const field = useField(name);
|
|
7
15
|
return _jsx(SchemaInput, { ...field, ...props });
|
|
8
16
|
}
|
|
9
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Show a `SchemaInput` for every property in the current form's schema.
|
|
19
|
+
*
|
|
20
|
+
* @returns A fragment of `FormInput` elements, one per schema property.
|
|
21
|
+
* @example <FormInputs />
|
|
22
|
+
* @see https://dhoulb.github.io/shelving/ui/form/FormInput/FormInputs
|
|
23
|
+
*/
|
|
10
24
|
export function FormInputs() {
|
|
11
25
|
return (_jsx(_Fragment, { children: Object.keys(requireForm().schema.props).map(name => (_jsx(FormInput, { name: name }, name))) }));
|
|
12
26
|
}
|