@starci/grammar 0.4.12 → 0.5.0
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/LICENSE +21 -21
- package/README.md +269 -47
- package/dist/.build-stamp.json +9 -0
- package/dist/common/components-forms.css +435 -0
- package/dist/common/components-navigation.css +1163 -0
- package/dist/common/components-overlays.css +939 -0
- package/dist/common/registry.d.ts +60 -1
- package/dist/common/registry.d.ts.map +1 -1
- package/dist/common/registry.js +6 -0
- package/dist/common/registry.js.map +1 -1
- package/dist/common/renderers-forms.d.ts +44 -0
- package/dist/common/renderers-forms.d.ts.map +1 -0
- package/dist/common/renderers-forms.js +49 -0
- package/dist/common/renderers-forms.js.map +1 -0
- package/dist/common/renderers-navigation.d.ts +42 -0
- package/dist/common/renderers-navigation.d.ts.map +1 -0
- package/dist/common/renderers-navigation.js +46 -0
- package/dist/common/renderers-navigation.js.map +1 -0
- package/dist/common/renderers-overlays.d.ts +32 -0
- package/dist/common/renderers-overlays.d.ts.map +1 -0
- package/dist/common/renderers-overlays.js +36 -0
- package/dist/common/renderers-overlays.js.map +1 -0
- package/dist/common/renderers.d.ts +5 -2
- package/dist/common/renderers.d.ts.map +1 -1
- package/dist/common/renderers.js +3 -0
- package/dist/common/renderers.js.map +1 -1
- package/dist/common/styles.css +282 -1
- package/dist/core/LeadingNumber.d.ts.map +1 -1
- package/dist/core/LeadingNumber.js +1 -1
- package/dist/core/LeadingNumber.js.map +1 -1
- package/dist/core/OtpInput.d.ts +17 -1
- package/dist/core/OtpInput.d.ts.map +1 -1
- package/dist/core/OtpInput.js +17 -5
- package/dist/core/OtpInput.js.map +1 -1
- package/dist/core/StateMark.d.ts +6 -1
- package/dist/core/StateMark.d.ts.map +1 -1
- package/dist/core/StateMark.js +7 -2
- package/dist/core/StateMark.js.map +1 -1
- package/dist/core/branch/Accordion/index.d.ts +28 -0
- package/dist/core/branch/Accordion/index.d.ts.map +1 -0
- package/dist/core/branch/Accordion/index.js +30 -0
- package/dist/core/branch/Accordion/index.js.map +1 -0
- package/dist/core/branch/AlertDialog/index.d.ts +40 -0
- package/dist/core/branch/AlertDialog/index.d.ts.map +1 -0
- package/dist/core/branch/AlertDialog/index.js +59 -0
- package/dist/core/branch/AlertDialog/index.js.map +1 -0
- package/dist/core/branch/Calendar/index.d.ts +26 -0
- package/dist/core/branch/Calendar/index.d.ts.map +1 -0
- package/dist/core/branch/Calendar/index.js +17 -0
- package/dist/core/branch/Calendar/index.js.map +1 -0
- package/dist/core/branch/ComboBox/index.d.ts +32 -0
- package/dist/core/branch/ComboBox/index.d.ts.map +1 -0
- package/dist/core/branch/ComboBox/index.js +28 -0
- package/dist/core/branch/ComboBox/index.js.map +1 -0
- package/dist/core/branch/DataTable/index.d.ts +52 -0
- package/dist/core/branch/DataTable/index.d.ts.map +1 -0
- package/dist/core/branch/DataTable/index.js +46 -0
- package/dist/core/branch/DataTable/index.js.map +1 -0
- package/dist/core/branch/DatePicker/index.d.ts +23 -0
- package/dist/core/branch/DatePicker/index.d.ts.map +1 -0
- package/dist/core/branch/DatePicker/index.js +29 -0
- package/dist/core/branch/DatePicker/index.js.map +1 -0
- package/dist/core/branch/DateRangePicker/index.d.ts +21 -0
- package/dist/core/branch/DateRangePicker/index.d.ts.map +1 -0
- package/dist/core/branch/DateRangePicker/index.js +22 -0
- package/dist/core/branch/DateRangePicker/index.js.map +1 -0
- package/dist/core/branch/Dialog/index.d.ts +36 -0
- package/dist/core/branch/Dialog/index.d.ts.map +1 -0
- package/dist/core/branch/Dialog/index.js +20 -0
- package/dist/core/branch/Dialog/index.js.map +1 -0
- package/dist/core/branch/Disclosure/index.d.ts +22 -0
- package/dist/core/branch/Disclosure/index.d.ts.map +1 -0
- package/dist/core/branch/Disclosure/index.js +26 -0
- package/dist/core/branch/Disclosure/index.js.map +1 -0
- package/dist/core/branch/Drawer/index.d.ts +35 -0
- package/dist/core/branch/Drawer/index.d.ts.map +1 -0
- package/dist/core/branch/Drawer/index.js +20 -0
- package/dist/core/branch/Drawer/index.js.map +1 -0
- package/dist/core/branch/DropdownMenu/index.d.ts +61 -0
- package/dist/core/branch/DropdownMenu/index.d.ts.map +1 -0
- package/dist/core/branch/DropdownMenu/index.js +59 -0
- package/dist/core/branch/DropdownMenu/index.js.map +1 -0
- package/dist/core/branch/ListBox/index.d.ts +30 -0
- package/dist/core/branch/ListBox/index.d.ts.map +1 -0
- package/dist/core/branch/ListBox/index.js +14 -0
- package/dist/core/branch/ListBox/index.js.map +1 -0
- package/dist/core/branch/MarkdownArticle/index.d.ts +8 -0
- package/dist/core/branch/MarkdownArticle/index.d.ts.map +1 -1
- package/dist/core/branch/MarkdownArticle/index.js +7 -2
- package/dist/core/branch/MarkdownArticle/index.js.map +1 -1
- package/dist/core/branch/Popover/index.d.ts +33 -0
- package/dist/core/branch/Popover/index.d.ts.map +1 -0
- package/dist/core/branch/Popover/index.js +16 -0
- package/dist/core/branch/Popover/index.js.map +1 -0
- package/dist/core/branch/Rail/index.d.ts +2 -0
- package/dist/core/branch/Rail/index.d.ts.map +1 -1
- package/dist/core/branch/Rail/index.js +10 -3
- package/dist/core/branch/Rail/index.js.map +1 -1
- package/dist/core/branch/Select/index.d.ts +31 -0
- package/dist/core/branch/Select/index.d.ts.map +1 -0
- package/dist/core/branch/Select/index.js +41 -0
- package/dist/core/branch/Select/index.js.map +1 -0
- package/dist/core/branch/SurfaceAccordionCard/index.d.ts +6 -0
- package/dist/core/branch/SurfaceAccordionCard/index.d.ts.map +1 -1
- package/dist/core/branch/SurfaceAccordionCard/index.js +6 -6
- package/dist/core/branch/SurfaceAccordionCard/index.js.map +1 -1
- package/dist/core/branch/SurfaceCard/classNames.d.ts +7 -2
- package/dist/core/branch/SurfaceCard/classNames.d.ts.map +1 -1
- package/dist/core/branch/SurfaceCard/classNames.js +7 -2
- package/dist/core/branch/SurfaceCard/classNames.js.map +1 -1
- package/dist/core/branch/SurfaceCard/index.d.ts +6 -0
- package/dist/core/branch/SurfaceCard/index.d.ts.map +1 -1
- package/dist/core/branch/SurfaceCard/index.js +4 -4
- package/dist/core/branch/SurfaceCard/index.js.map +1 -1
- package/dist/core/branch/SurfaceListCard/index.d.ts +17 -1
- package/dist/core/branch/SurfaceListCard/index.d.ts.map +1 -1
- package/dist/core/branch/SurfaceListCard/index.js +10 -4
- package/dist/core/branch/SurfaceListCard/index.js.map +1 -1
- package/dist/core/branch/Tabs/index.js +1 -1
- package/dist/core/branch/Tabs/index.js.map +1 -1
- package/dist/core/branch/Toast/index.d.ts +75 -0
- package/dist/core/branch/Toast/index.d.ts.map +1 -0
- package/dist/core/branch/Toast/index.js +145 -0
- package/dist/core/branch/Toast/index.js.map +1 -0
- package/dist/core/composite/Alert/index.d.ts +40 -0
- package/dist/core/composite/Alert/index.d.ts.map +1 -0
- package/dist/core/composite/Alert/index.js +27 -0
- package/dist/core/composite/Alert/index.js.map +1 -0
- package/dist/core/composite/AvatarGroup/index.d.ts +23 -0
- package/dist/core/composite/AvatarGroup/index.d.ts.map +1 -0
- package/dist/core/composite/AvatarGroup/index.js +15 -0
- package/dist/core/composite/AvatarGroup/index.js.map +1 -0
- package/dist/core/composite/Breadcrumbs/index.d.ts +27 -0
- package/dist/core/composite/Breadcrumbs/index.d.ts.map +1 -0
- package/dist/core/composite/Breadcrumbs/index.js +16 -0
- package/dist/core/composite/Breadcrumbs/index.js.map +1 -0
- package/dist/core/composite/ButtonGroup/index.d.ts +14 -0
- package/dist/core/composite/ButtonGroup/index.d.ts.map +1 -0
- package/dist/core/composite/ButtonGroup/index.js +17 -0
- package/dist/core/composite/ButtonGroup/index.js.map +1 -0
- package/dist/core/composite/CheckboxGroup/index.d.ts +23 -0
- package/dist/core/composite/CheckboxGroup/index.d.ts.map +1 -0
- package/dist/core/composite/CheckboxGroup/index.js +21 -0
- package/dist/core/composite/CheckboxGroup/index.js.map +1 -0
- package/dist/core/composite/DescriptionList/index.d.ts +23 -0
- package/dist/core/composite/DescriptionList/index.d.ts.map +1 -0
- package/dist/core/composite/DescriptionList/index.js +8 -0
- package/dist/core/composite/DescriptionList/index.js.map +1 -0
- package/dist/core/composite/Fieldset/index.d.ts +17 -0
- package/dist/core/composite/Fieldset/index.d.ts.map +1 -0
- package/dist/core/composite/Fieldset/index.js +14 -0
- package/dist/core/composite/Fieldset/index.js.map +1 -0
- package/dist/core/composite/Form/index.d.ts +32 -0
- package/dist/core/composite/Form/index.d.ts.map +1 -0
- package/dist/core/composite/Form/index.js +25 -0
- package/dist/core/composite/Form/index.js.map +1 -0
- package/dist/core/composite/HorizontalScrollRegion/index.d.ts +5 -0
- package/dist/core/composite/HorizontalScrollRegion/index.d.ts.map +1 -1
- package/dist/core/composite/HorizontalScrollRegion/index.js +3 -2
- package/dist/core/composite/HorizontalScrollRegion/index.js.map +1 -1
- package/dist/core/composite/Pagination/index.d.ts +31 -0
- package/dist/core/composite/Pagination/index.d.ts.map +1 -0
- package/dist/core/composite/Pagination/index.js +42 -0
- package/dist/core/composite/Pagination/index.js.map +1 -0
- package/dist/core/composite/RadioGroup/index.d.ts +15 -0
- package/dist/core/composite/RadioGroup/index.d.ts.map +1 -0
- package/dist/core/composite/RadioGroup/index.js +20 -0
- package/dist/core/composite/RadioGroup/index.js.map +1 -0
- package/dist/core/composite/SegmentedControl/index.d.ts +24 -0
- package/dist/core/composite/SegmentedControl/index.d.ts.map +1 -0
- package/dist/core/composite/SegmentedControl/index.js +33 -0
- package/dist/core/composite/SegmentedControl/index.js.map +1 -0
- package/dist/core/composite/StaticStateRow/index.d.ts +6 -1
- package/dist/core/composite/StaticStateRow/index.d.ts.map +1 -1
- package/dist/core/composite/StaticStateRow/index.js +6 -1
- package/dist/core/composite/StaticStateRow/index.js.map +1 -1
- package/dist/core/composite/Stepper/index.d.ts +34 -0
- package/dist/core/composite/Stepper/index.d.ts.map +1 -0
- package/dist/core/composite/Stepper/index.js +27 -0
- package/dist/core/composite/Stepper/index.js.map +1 -0
- package/dist/core/composite/TagGroup/index.d.ts +41 -0
- package/dist/core/composite/TagGroup/index.d.ts.map +1 -0
- package/dist/core/composite/TagGroup/index.js +17 -0
- package/dist/core/composite/TagGroup/index.js.map +1 -0
- package/dist/core/composite/Timeline/index.d.ts +28 -0
- package/dist/core/composite/Timeline/index.d.ts.map +1 -0
- package/dist/core/composite/Timeline/index.js +14 -0
- package/dist/core/composite/Timeline/index.js.map +1 -0
- package/dist/core/composite/VerticalScrollRegion/index.d.ts +31 -1
- package/dist/core/composite/VerticalScrollRegion/index.d.ts.map +1 -1
- package/dist/core/composite/VerticalScrollRegion/index.js +16 -3
- package/dist/core/composite/VerticalScrollRegion/index.js.map +1 -1
- package/dist/core/composition/BottomNav/index.d.ts +33 -0
- package/dist/core/composition/BottomNav/index.d.ts.map +1 -0
- package/dist/core/composition/BottomNav/index.js +22 -0
- package/dist/core/composition/BottomNav/index.js.map +1 -0
- package/dist/core/composition/Footer/index.d.ts +35 -0
- package/dist/core/composition/Footer/index.d.ts.map +1 -0
- package/dist/core/composition/Footer/index.js +19 -0
- package/dist/core/composition/Footer/index.js.map +1 -0
- package/dist/core/composition/NavigationFeatureNav/index.d.ts +3 -0
- package/dist/core/composition/NavigationFeatureNav/index.d.ts.map +1 -1
- package/dist/core/composition/NavigationFeatureNav/index.js +3 -0
- package/dist/core/composition/NavigationFeatureNav/index.js.map +1 -1
- package/dist/core/composition/TopBar/index.d.ts +34 -0
- package/dist/core/composition/TopBar/index.d.ts.map +1 -0
- package/dist/core/composition/TopBar/index.js +15 -0
- package/dist/core/composition/TopBar/index.js.map +1 -0
- package/dist/core/composition/WorkspaceShell/index.d.ts +18 -1
- package/dist/core/composition/WorkspaceShell/index.d.ts.map +1 -1
- package/dist/core/composition/WorkspaceShell/index.js +10 -1
- package/dist/core/composition/WorkspaceShell/index.js.map +1 -1
- package/dist/core/dna.d.ts +26 -8
- package/dist/core/dna.d.ts.map +1 -1
- package/dist/core/dna.js +22 -4
- package/dist/core/dna.js.map +1 -1
- package/dist/core/index.d.ts +60 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/navigationClassNames.d.ts +3 -0
- package/dist/core/navigationClassNames.d.ts.map +1 -0
- package/dist/core/navigationClassNames.js +4 -0
- package/dist/core/navigationClassNames.js.map +1 -0
- package/dist/core/navigationKeys.d.ts +11 -0
- package/dist/core/navigationKeys.d.ts.map +1 -0
- package/dist/core/navigationKeys.js +44 -0
- package/dist/core/navigationKeys.js.map +1 -0
- package/dist/core/overlayScope.d.ts +42 -0
- package/dist/core/overlayScope.d.ts.map +1 -0
- package/dist/core/overlayScope.js +54 -0
- package/dist/core/overlayScope.js.map +1 -0
- package/dist/core/primitive/Avatar/index.d.ts +34 -0
- package/dist/core/primitive/Avatar/index.d.ts.map +1 -0
- package/dist/core/primitive/Avatar/index.js +24 -0
- package/dist/core/primitive/Avatar/index.js.map +1 -0
- package/dist/core/primitive/Badge/index.d.ts +6 -1
- package/dist/core/primitive/Badge/index.d.ts.map +1 -1
- package/dist/core/primitive/Badge/index.js +7 -2
- package/dist/core/primitive/Badge/index.js.map +1 -1
- package/dist/core/primitive/Checkbox/index.d.ts +25 -0
- package/dist/core/primitive/Checkbox/index.d.ts.map +1 -0
- package/dist/core/primitive/Checkbox/index.js +17 -0
- package/dist/core/primitive/Checkbox/index.js.map +1 -0
- package/dist/core/primitive/CloseButton/index.d.ts +17 -0
- package/dist/core/primitive/CloseButton/index.d.ts.map +1 -0
- package/dist/core/primitive/CloseButton/index.js +11 -0
- package/dist/core/primitive/CloseButton/index.js.map +1 -0
- package/dist/core/primitive/DateField/index.d.ts +33 -0
- package/dist/core/primitive/DateField/index.d.ts.map +1 -0
- package/dist/core/primitive/DateField/index.js +33 -0
- package/dist/core/primitive/DateField/index.js.map +1 -0
- package/dist/core/primitive/Field/index.d.ts +127 -0
- package/dist/core/primitive/Field/index.d.ts.map +1 -0
- package/dist/core/primitive/Field/index.js +100 -0
- package/dist/core/primitive/Field/index.js.map +1 -0
- package/dist/core/primitive/FileDropzone/index.d.ts +25 -0
- package/dist/core/primitive/FileDropzone/index.d.ts.map +1 -0
- package/dist/core/primitive/FileDropzone/index.js +35 -0
- package/dist/core/primitive/FileDropzone/index.js.map +1 -0
- package/dist/core/primitive/GrammarRoot/index.d.ts +6 -1
- package/dist/core/primitive/GrammarRoot/index.d.ts.map +1 -1
- package/dist/core/primitive/GrammarRoot/index.js +7 -2
- package/dist/core/primitive/GrammarRoot/index.js.map +1 -1
- package/dist/core/primitive/Icon/index.d.ts +7 -1
- package/dist/core/primitive/Icon/index.d.ts.map +1 -1
- package/dist/core/primitive/Icon/index.js +7 -2
- package/dist/core/primitive/Icon/index.js.map +1 -1
- package/dist/core/primitive/IconButton/index.d.ts +1 -1
- package/dist/core/primitive/IconButton/index.d.ts.map +1 -1
- package/dist/core/primitive/IconButton/index.js +2 -2
- package/dist/core/primitive/IconButton/index.js.map +1 -1
- package/dist/core/primitive/Image/index.d.ts +30 -0
- package/dist/core/primitive/Image/index.d.ts.map +1 -0
- package/dist/core/primitive/Image/index.js +29 -0
- package/dist/core/primitive/Image/index.js.map +1 -0
- package/dist/core/primitive/IncludedMark/index.d.ts +2 -1
- package/dist/core/primitive/IncludedMark/index.d.ts.map +1 -1
- package/dist/core/primitive/IncludedMark/index.js +3 -2
- package/dist/core/primitive/IncludedMark/index.js.map +1 -1
- package/dist/core/primitive/Kbd/index.d.ts +13 -0
- package/dist/core/primitive/Kbd/index.d.ts.map +1 -0
- package/dist/core/primitive/Kbd/index.js +14 -0
- package/dist/core/primitive/Kbd/index.js.map +1 -0
- package/dist/core/primitive/Label/index.d.ts +18 -4
- package/dist/core/primitive/Label/index.d.ts.map +1 -1
- package/dist/core/primitive/Label/index.js +4 -2
- package/dist/core/primitive/Label/index.js.map +1 -1
- package/dist/core/primitive/Link/index.d.ts +30 -0
- package/dist/core/primitive/Link/index.d.ts.map +1 -0
- package/dist/core/primitive/Link/index.js +17 -0
- package/dist/core/primitive/Link/index.js.map +1 -0
- package/dist/core/primitive/Meter/index.d.ts +16 -0
- package/dist/core/primitive/Meter/index.d.ts.map +1 -0
- package/dist/core/primitive/Meter/index.js +20 -0
- package/dist/core/primitive/Meter/index.js.map +1 -0
- package/dist/core/primitive/NumberField/index.d.ts +21 -0
- package/dist/core/primitive/NumberField/index.d.ts.map +1 -0
- package/dist/core/primitive/NumberField/index.js +15 -0
- package/dist/core/primitive/NumberField/index.js.map +1 -0
- package/dist/core/primitive/ProgressCircle/index.d.ts +13 -0
- package/dist/core/primitive/ProgressCircle/index.d.ts.map +1 -0
- package/dist/core/primitive/ProgressCircle/index.js +5 -0
- package/dist/core/primitive/ProgressCircle/index.js.map +1 -0
- package/dist/core/primitive/RankArtwork/index.d.ts +2 -1
- package/dist/core/primitive/RankArtwork/index.d.ts.map +1 -1
- package/dist/core/primitive/RankArtwork/index.js +3 -2
- package/dist/core/primitive/RankArtwork/index.js.map +1 -1
- package/dist/core/primitive/Rating/index.d.ts +26 -0
- package/dist/core/primitive/Rating/index.d.ts.map +1 -0
- package/dist/core/primitive/Rating/index.js +37 -0
- package/dist/core/primitive/Rating/index.js.map +1 -0
- package/dist/core/primitive/SearchField/index.d.ts +22 -0
- package/dist/core/primitive/SearchField/index.d.ts.map +1 -0
- package/dist/core/primitive/SearchField/index.js +15 -0
- package/dist/core/primitive/SearchField/index.js.map +1 -0
- package/dist/core/primitive/SectionHeader/index.d.ts +9 -2
- package/dist/core/primitive/SectionHeader/index.d.ts.map +1 -1
- package/dist/core/primitive/SectionHeader/index.js +8 -2
- package/dist/core/primitive/SectionHeader/index.js.map +1 -1
- package/dist/core/primitive/Skeleton/index.d.ts +21 -0
- package/dist/core/primitive/Skeleton/index.d.ts.map +1 -0
- package/dist/core/primitive/Skeleton/index.js +18 -0
- package/dist/core/primitive/Skeleton/index.js.map +1 -0
- package/dist/core/primitive/Slider/index.d.ts +26 -0
- package/dist/core/primitive/Slider/index.d.ts.map +1 -0
- package/dist/core/primitive/Slider/index.js +37 -0
- package/dist/core/primitive/Slider/index.js.map +1 -0
- package/dist/core/primitive/Spinner/index.d.ts +18 -0
- package/dist/core/primitive/Spinner/index.d.ts.map +1 -0
- package/dist/core/primitive/Spinner/index.js +11 -0
- package/dist/core/primitive/Spinner/index.js.map +1 -0
- package/dist/core/primitive/Switch/index.d.ts +13 -0
- package/dist/core/primitive/Switch/index.d.ts.map +1 -0
- package/dist/core/primitive/Switch/index.js +15 -0
- package/dist/core/primitive/Switch/index.js.map +1 -0
- package/dist/core/primitive/Textarea/index.d.ts +16 -0
- package/dist/core/primitive/Textarea/index.d.ts.map +1 -0
- package/dist/core/primitive/Textarea/index.js +20 -0
- package/dist/core/primitive/Textarea/index.js.map +1 -0
- package/dist/core/primitive/TimeField/index.d.ts +15 -0
- package/dist/core/primitive/TimeField/index.d.ts.map +1 -0
- package/dist/core/primitive/TimeField/index.js +13 -0
- package/dist/core/primitive/TimeField/index.js.map +1 -0
- package/dist/core/styles.css +32 -6
- package/dist/heritage/styles.css +21 -6
- package/dist/offset-pop/components-forms.css +405 -0
- package/dist/offset-pop/components-navigation.css +394 -0
- package/dist/offset-pop/components-overlays.css +253 -0
- package/dist/offset-pop/conformance.d.ts +64 -0
- package/dist/offset-pop/conformance.d.ts.map +1 -0
- package/dist/offset-pop/conformance.js +63 -0
- package/dist/offset-pop/conformance.js.map +1 -0
- package/dist/offset-pop/dna.d.ts +282 -0
- package/dist/offset-pop/dna.d.ts.map +1 -0
- package/dist/offset-pop/dna.js +276 -0
- package/dist/offset-pop/dna.js.map +1 -0
- package/dist/offset-pop/index.d.ts +4 -8
- package/dist/offset-pop/index.d.ts.map +1 -1
- package/dist/offset-pop/index.js +7 -18
- package/dist/offset-pop/index.js.map +1 -1
- package/dist/offset-pop/styles.css +203 -62
- package/package.json +33 -9
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Spinner as HeroSpinner } from "@heroui/react";
|
|
3
|
+
import { useEffect, useRef, useState, useSyncExternalStore } from "react";
|
|
4
|
+
import { Button } from "../../primitive/Button/index.js";
|
|
5
|
+
import { CloseButton } from "../../primitive/CloseButton/index.js";
|
|
6
|
+
export const DEFAULT_TOAST_TIMEOUT = 6000;
|
|
7
|
+
/** Resolve the effective auto-dismiss delay; `0` means the toast persists. */
|
|
8
|
+
export const toastTimeoutFor = (toast) => {
|
|
9
|
+
if (toast.timeout !== undefined)
|
|
10
|
+
return Math.max(0, toast.timeout);
|
|
11
|
+
if (toast.action !== undefined || toast.tone === "negative" || toast.tone === "pending")
|
|
12
|
+
return 0;
|
|
13
|
+
return DEFAULT_TOAST_TIMEOUT;
|
|
14
|
+
};
|
|
15
|
+
/** Create an isolated toast queue (one per app shell, or per test). */
|
|
16
|
+
export const createToastQueue = () => {
|
|
17
|
+
let toasts = [];
|
|
18
|
+
let sequence = 0;
|
|
19
|
+
const listeners = new Set();
|
|
20
|
+
const emit = () => { for (const listener of listeners)
|
|
21
|
+
listener(); };
|
|
22
|
+
return {
|
|
23
|
+
add: (options) => {
|
|
24
|
+
sequence += 1;
|
|
25
|
+
const id = `grammar-toast-${sequence}`;
|
|
26
|
+
toasts = [{ ...options, id, version: 0 }, ...toasts];
|
|
27
|
+
emit();
|
|
28
|
+
return id;
|
|
29
|
+
},
|
|
30
|
+
update: (id, options) => {
|
|
31
|
+
toasts = toasts.map((toast) => toast.id === id ? { ...toast, ...options, id, version: toast.version + 1 } : toast);
|
|
32
|
+
emit();
|
|
33
|
+
},
|
|
34
|
+
dismiss: (id) => {
|
|
35
|
+
const next = toasts.filter((toast) => toast.id !== id);
|
|
36
|
+
if (next.length === toasts.length)
|
|
37
|
+
return;
|
|
38
|
+
toasts = next;
|
|
39
|
+
emit();
|
|
40
|
+
},
|
|
41
|
+
clear: () => {
|
|
42
|
+
if (toasts.length === 0)
|
|
43
|
+
return;
|
|
44
|
+
toasts = [];
|
|
45
|
+
emit();
|
|
46
|
+
},
|
|
47
|
+
subscribe: (listener) => {
|
|
48
|
+
listeners.add(listener);
|
|
49
|
+
return () => { listeners.delete(listener); };
|
|
50
|
+
},
|
|
51
|
+
getSnapshot: () => toasts,
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
/** The shared app-wide queue a `Toaster` reads when no `queue` prop is given. */
|
|
55
|
+
export const toastQueue = createToastQueue();
|
|
56
|
+
/**
|
|
57
|
+
* BRANCH - `Toast`: one transient notification, rendered by `Toaster`.
|
|
58
|
+
*
|
|
59
|
+
* Escape dismisses a focused toast. The timer counts only while not paused, and restarts when the
|
|
60
|
+
* toast is updated. Tone is echoed on `data-grammar-tone`.
|
|
61
|
+
* Contract: A11Y-4 (decisions never time out) FOCUS-5 (Escape = close button) CORE-BOUNDARY-4 MOTION-2.
|
|
62
|
+
*/
|
|
63
|
+
export const Toast = ({ toast, dismissLabel, onDismiss, isPaused = false }) => {
|
|
64
|
+
const tone = toast.tone ?? "neutral";
|
|
65
|
+
const timeout = toastTimeoutFor(toast);
|
|
66
|
+
const remaining = useRef(timeout);
|
|
67
|
+
const seenVersion = useRef(toast.version);
|
|
68
|
+
const dismissRef = useRef(onDismiss);
|
|
69
|
+
dismissRef.current = onDismiss;
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (seenVersion.current !== toast.version) {
|
|
72
|
+
seenVersion.current = toast.version;
|
|
73
|
+
remaining.current = timeout;
|
|
74
|
+
}
|
|
75
|
+
if (isPaused || timeout <= 0)
|
|
76
|
+
return;
|
|
77
|
+
const startedAt = Date.now();
|
|
78
|
+
const handle = setTimeout(() => dismissRef.current(), Math.max(0, remaining.current));
|
|
79
|
+
return () => {
|
|
80
|
+
clearTimeout(handle);
|
|
81
|
+
remaining.current -= Date.now() - startedAt;
|
|
82
|
+
};
|
|
83
|
+
}, [isPaused, timeout, toast.version]);
|
|
84
|
+
const onKeyDown = (event) => {
|
|
85
|
+
if (event.key !== "Escape")
|
|
86
|
+
return;
|
|
87
|
+
event.stopPropagation();
|
|
88
|
+
onDismiss();
|
|
89
|
+
};
|
|
90
|
+
return (_jsxs("div", { "data-tier": "branch", "data-component": "Toast", "data-grammar-tone": tone, "data-grammar-overlay-surface": "toast", "data-persistent": timeout <= 0 ? "true" : "false", "data-contract": "A11Y-4 FOCUS-5 CORE-BOUNDARY-4 MOTION-2", className: "starci-core-toast", onKeyDown: onKeyDown, children: [tone === "pending" ? (_jsx("span", { className: "starci-core-toast-indicator", "aria-hidden": "true", "data-contract": "ICON-6", children: _jsx(HeroSpinner, { role: "presentation", "aria-hidden": "true", size: "sm", color: "current" }) })) : _jsx("span", { className: "starci-core-toast-indicator", "data-grammar-toast-indicator": tone, "aria-hidden": "true", "data-contract": "ICON-6" }), _jsxs("div", { className: "starci-core-toast-copy", children: [_jsx("p", { className: "starci-core-toast-title", children: toast.title }), toast.description === undefined ? null : _jsx("p", { className: "starci-core-toast-description", children: toast.description })] }), toast.action === undefined ? null : (_jsx("span", { className: "starci-core-toast-action", "data-grammar-toast-action": "true", children: _jsx(Button, { size: "sm", variant: "secondary", onPress: () => {
|
|
91
|
+
toast.action?.onAction();
|
|
92
|
+
onDismiss();
|
|
93
|
+
}, children: toast.action.label }) })), _jsx(CloseButton, { label: dismissLabel, size: "sm", onPress: onDismiss })] }));
|
|
94
|
+
};
|
|
95
|
+
const announcementFor = (toast) => (toast.description === undefined ? toast.title : `${toast.title}. ${toast.description}`);
|
|
96
|
+
const usePageHidden = () => {
|
|
97
|
+
const [hidden, setHidden] = useState(false);
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
const update = () => setHidden(document.visibilityState === "hidden");
|
|
100
|
+
update();
|
|
101
|
+
document.addEventListener("visibilitychange", update);
|
|
102
|
+
return () => document.removeEventListener("visibilitychange", update);
|
|
103
|
+
}, []);
|
|
104
|
+
return hidden;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* BRANCH - `Toaster`: the fixed notification region that renders a toast queue.
|
|
108
|
+
*
|
|
109
|
+
* Mount it ONCE inside the app's `GrammarRoot`: it is rendered in place (no portal), so it is always
|
|
110
|
+
* inside the family scope that mounted it. Announcements go through two persistent, visually hidden
|
|
111
|
+
* live regions (polite `role="status"`, assertive `role="alert"`) that exist before any toast
|
|
112
|
+
* arrives; the visible toasts are a labelled region of ordinary, keyboard-reachable content.
|
|
113
|
+
* Contract: region LAYOUT-4 (fixed); each live region FEEDBACK-3 (one announcement owner per urgency).
|
|
114
|
+
*/
|
|
115
|
+
export const Toaster = ({ label, dismissLabel, queue = toastQueue, placement = "bottom-end", maxVisible = 3 }) => {
|
|
116
|
+
const toasts = useSyncExternalStore(queue.subscribe, queue.getSnapshot, queue.getSnapshot);
|
|
117
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
118
|
+
const [hasFocus, setHasFocus] = useState(false);
|
|
119
|
+
const pageHidden = usePageHidden();
|
|
120
|
+
const [polite, setPolite] = useState("");
|
|
121
|
+
const [assertive, setAssertive] = useState("");
|
|
122
|
+
const announced = useRef(new Map());
|
|
123
|
+
const visible = toasts.slice(0, Math.max(1, maxVisible));
|
|
124
|
+
const isPaused = isHovered || hasFocus || pageHidden;
|
|
125
|
+
useEffect(() => {
|
|
126
|
+
const seen = announced.current;
|
|
127
|
+
for (const toast of [...visible].reverse()) {
|
|
128
|
+
if (seen.get(toast.id) === toast.version)
|
|
129
|
+
continue;
|
|
130
|
+
seen.set(toast.id, toast.version);
|
|
131
|
+
if (toast.tone === "negative")
|
|
132
|
+
setAssertive(announcementFor(toast));
|
|
133
|
+
else
|
|
134
|
+
setPolite(announcementFor(toast));
|
|
135
|
+
}
|
|
136
|
+
for (const id of seen.keys())
|
|
137
|
+
if (!toasts.some((toast) => toast.id === id))
|
|
138
|
+
seen.delete(id);
|
|
139
|
+
});
|
|
140
|
+
return (_jsxs("section", { "data-tier": "branch", "data-component": "Toaster", "data-placement": placement, "data-paused": isPaused ? "true" : "false", "data-contract": "LAYOUT-4", "aria-label": label, className: "starci-core-toaster", onPointerEnter: () => setIsHovered(true), onPointerLeave: () => setIsHovered(false), onFocus: () => setHasFocus(true), onBlur: (event) => {
|
|
141
|
+
if (!event.currentTarget.contains(event.relatedTarget))
|
|
142
|
+
setHasFocus(false);
|
|
143
|
+
}, children: [_jsx("span", { role: "status", "aria-live": "polite", "aria-atomic": "true", className: "starci-core-visually-hidden", "data-grammar-toaster-live": "polite", "data-contract": "FEEDBACK-3", children: polite }), _jsx("span", { role: "alert", "aria-live": "assertive", "aria-atomic": "true", className: "starci-core-visually-hidden", "data-grammar-toaster-live": "assertive", "data-contract": "FEEDBACK-3", children: assertive }), _jsx("ol", { className: "starci-core-toaster-list", children: visible.map((toast) => (_jsx("li", { className: "starci-core-toaster-item", children: _jsx(Toast, { toast: toast, dismissLabel: dismissLabel, isPaused: isPaused, onDismiss: () => queue.dismiss(toast.id) }) }, toast.id))) })] }));
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/Toast/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { PresentationState } from "../../../common/state.js";
|
|
3
|
+
export type AlertUrgency = "polite" | "assertive";
|
|
4
|
+
export type AlertAction = {
|
|
5
|
+
readonly label: string;
|
|
6
|
+
readonly onAction: () => void;
|
|
7
|
+
};
|
|
8
|
+
type AlertBase = {
|
|
9
|
+
readonly title: string;
|
|
10
|
+
readonly description?: ReactNode;
|
|
11
|
+
/** Render-neutral meaning of the banner. Default `informative`. */
|
|
12
|
+
readonly tone?: PresentationState;
|
|
13
|
+
readonly action?: AlertAction;
|
|
14
|
+
/**
|
|
15
|
+
* How the banner is announced when it appears. Default: `assertive` (`role="alert"`) for a
|
|
16
|
+
* `negative` tone, `polite` (`role="status"`) for everything else.
|
|
17
|
+
*/
|
|
18
|
+
readonly urgency?: AlertUrgency;
|
|
19
|
+
};
|
|
20
|
+
/** A dismissible banner must name its close action; a permanent one has neither prop. */
|
|
21
|
+
type Dismissible = {
|
|
22
|
+
readonly dismissLabel: string;
|
|
23
|
+
readonly onDismiss?: () => void;
|
|
24
|
+
};
|
|
25
|
+
type Permanent = {
|
|
26
|
+
readonly dismissLabel?: never;
|
|
27
|
+
readonly onDismiss?: never;
|
|
28
|
+
};
|
|
29
|
+
export type AlertProps = AlertBase & (Dismissible | Permanent);
|
|
30
|
+
/**
|
|
31
|
+
* COMPOSITE - `Alert`: an inline, in-flow banner about the region it sits in.
|
|
32
|
+
*
|
|
33
|
+
* It is not an overlay: it takes layout space and stays until resolved or dismissed. Dismissal is
|
|
34
|
+
* uncontrolled (the banner removes itself) and `onDismiss` reports it. Tone is echoed on
|
|
35
|
+
* `data-grammar-tone`; the vendor status supplies the default glyph, `pending` swaps it for a spinner.
|
|
36
|
+
* Contract: root FEEDBACK-3 (status/alert urgency on the owner); actions FEEDBACK-2 (recovery in place).
|
|
37
|
+
*/
|
|
38
|
+
export declare const Alert: (props: AlertProps) => import("react").JSX.Element | null;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/Alert/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAKjE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEjD,MAAM,MAAM,WAAW,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;CAChC,CAAA;AAED,KAAK,SAAS,GAAG;IACb,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAClC,CAAA;AAED,yFAAyF;AACzF,KAAK,WAAW,GAAG;IACf,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CAClC,CAAA;AAED,KAAK,SAAS,GAAG;IACb,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAA;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,CAAA;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,UAAU,uCA2CtC,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Alert as HeroAlert, Spinner as HeroSpinner } from "@heroui/react";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { vendorStatusFor } from "../../overlayScope.js";
|
|
5
|
+
import { Button } from "../../primitive/Button/index.js";
|
|
6
|
+
import { CloseButton } from "../../primitive/CloseButton/index.js";
|
|
7
|
+
/**
|
|
8
|
+
* COMPOSITE - `Alert`: an inline, in-flow banner about the region it sits in.
|
|
9
|
+
*
|
|
10
|
+
* It is not an overlay: it takes layout space and stays until resolved or dismissed. Dismissal is
|
|
11
|
+
* uncontrolled (the banner removes itself) and `onDismiss` reports it. Tone is echoed on
|
|
12
|
+
* `data-grammar-tone`; the vendor status supplies the default glyph, `pending` swaps it for a spinner.
|
|
13
|
+
* Contract: root FEEDBACK-3 (status/alert urgency on the owner); actions FEEDBACK-2 (recovery in place).
|
|
14
|
+
*/
|
|
15
|
+
export const Alert = (props) => {
|
|
16
|
+
const { title, description, tone = "informative", action, urgency } = props;
|
|
17
|
+
const [isDismissed, setIsDismissed] = useState(false);
|
|
18
|
+
if (isDismissed)
|
|
19
|
+
return null;
|
|
20
|
+
const resolvedUrgency = urgency ?? (tone === "negative" ? "assertive" : "polite");
|
|
21
|
+
const dismiss = () => {
|
|
22
|
+
setIsDismissed(true);
|
|
23
|
+
props.onDismiss?.();
|
|
24
|
+
};
|
|
25
|
+
return (_jsxs(HeroAlert, { "data-tier": "composite", "data-component": "Alert", "data-grammar-tone": tone, "data-urgency": resolvedUrgency, "data-contract": "FEEDBACK-3", role: resolvedUrgency === "assertive" ? "alert" : "status", status: vendorStatusFor(tone), className: "starci-core-alert", children: [_jsx(HeroAlert.Indicator, { className: "starci-core-alert-indicator", children: tone === "pending" ? _jsx(HeroSpinner, { "aria-hidden": "true", role: "presentation", size: "sm", color: "current" }) : undefined }), _jsxs(HeroAlert.Content, { className: "starci-core-alert-content", children: [_jsx(HeroAlert.Title, { className: "starci-core-alert-title", children: title }), description === undefined ? null : (_jsx(HeroAlert.Description, { className: "starci-core-alert-description", children: description }))] }), action === undefined && props.dismissLabel === undefined ? null : (_jsxs("span", { className: "starci-core-alert-actions", "data-grammar-alert-actions": "true", "data-contract": "FEEDBACK-2", children: [action === undefined ? null : (_jsx(Button, { size: "sm", variant: "secondary", onPress: action.onAction, children: action.label })), props.dismissLabel === undefined ? null : (_jsx(CloseButton, { label: props.dismissLabel, size: "sm", onPress: dismiss }))] }))] }));
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/Alert/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAmClE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAiB,EAAE,EAAE;IACvC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,GAAG,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAC3E,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,IAAI,WAAW;QAAE,OAAO,IAAI,CAAA;IAE5B,MAAM,eAAe,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IACjF,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,cAAc,CAAC,IAAI,CAAC,CAAA;QACpB,KAAK,CAAC,SAAS,EAAE,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,OAAO,CACH,MAAC,SAAS,iBACI,WAAW,oBACN,OAAO,uBACH,IAAI,kBACT,eAAe,mBACf,YAAY,EAC1B,IAAI,EAAE,eAAe,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAC1D,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,EAC7B,SAAS,EAAC,mBAAmB,aAE7B,KAAC,SAAS,CAAC,SAAS,IAAC,SAAS,EAAC,6BAA6B,YACvD,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAC,WAAW,mBAAa,MAAM,EAAC,IAAI,EAAC,cAAc,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,GAChG,EACtB,MAAC,SAAS,CAAC,OAAO,IAAC,SAAS,EAAC,2BAA2B,aACpD,KAAC,SAAS,CAAC,KAAK,IAAC,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAmB,EAC7E,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAChC,KAAC,SAAS,CAAC,WAAW,IAAC,SAAS,EAAC,+BAA+B,YAAE,WAAW,GAAyB,CACzG,IACe,EACnB,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC/D,gBAAM,SAAS,EAAC,2BAA2B,gCAA4B,MAAM,mBAAe,YAAY,aACnG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC3B,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,YAAG,MAAM,CAAC,KAAK,GAAU,CAC1F,EACA,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACvC,KAAC,WAAW,IAAC,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,OAAO,GAAI,CACzE,IACE,CACV,IACO,CACf,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type AvatarSize } from "../../primitive/Avatar/index.js";
|
|
2
|
+
export type AvatarGroupItem = {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly src?: string;
|
|
6
|
+
};
|
|
7
|
+
export type AvatarGroupProps = {
|
|
8
|
+
/** Names the group, e.g. who is in a space. */
|
|
9
|
+
readonly label: string;
|
|
10
|
+
readonly items: ReadonlyArray<AvatarGroupItem>;
|
|
11
|
+
/** Visible avatars before the rest collapse into an overflow count. */
|
|
12
|
+
readonly max?: number;
|
|
13
|
+
readonly size?: AvatarSize;
|
|
14
|
+
/** App-owned accessible text for the overflow count, e.g. "3 more people". */
|
|
15
|
+
readonly overflowLabel: (hiddenCount: number) => string;
|
|
16
|
+
readonly className?: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* A stacked set of avatars with one accessible overflow count.
|
|
20
|
+
* Contract: each avatar ICON-6 MEDIA-5 (named once, initials fallback), count ICON-6 (named, digits silent).
|
|
21
|
+
*/
|
|
22
|
+
export declare const AvatarGroup: ({ label, items, max, size, overflowLabel, className }: AvatarGroupProps) => import("react").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/AvatarGroup/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAG/F,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,CAAA;IAC9C,uEAAuE;IACvE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAA;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,uDAAkE,gBAAgB,gCAiC7G,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Avatar as HeroAvatar, AvatarGroup as HeroAvatarGroup } from "@heroui/react";
|
|
4
|
+
import { avatarA11yProps, avatarParts } from "../../primitive/Avatar/index.js";
|
|
5
|
+
import { navigationClassName } from "../../navigationClassNames.js";
|
|
6
|
+
/**
|
|
7
|
+
* A stacked set of avatars with one accessible overflow count.
|
|
8
|
+
* Contract: each avatar ICON-6 MEDIA-5 (named once, initials fallback), count ICON-6 (named, digits silent).
|
|
9
|
+
*/
|
|
10
|
+
export const AvatarGroup = ({ label, items, max = 4, size = "md", overflowLabel, className }) => {
|
|
11
|
+
const visible = items.slice(0, Math.max(0, max));
|
|
12
|
+
const hidden = items.length - visible.length;
|
|
13
|
+
return (_jsxs(HeroAvatarGroup, { "aria-label": label, className: navigationClassName("starci-core-avatar-group", className), "data-component": "AvatarGroup", "data-tier": "composite", "data-grammar-avatar-overflow": hidden > 0 ? "true" : "false", overlap: "ring", role: "group", size: size, children: [visible.map((item) => (_jsx(HeroAvatar, { ...avatarA11yProps(item.name, false), className: "starci-core-avatar", "data-component": "Avatar", "data-contract": "ICON-6 MEDIA-5", "data-grammar-avatar-size": size, children: avatarParts(item.name, item.src, undefined) }, item.id))), hidden > 0 ? (_jsx(HeroAvatarGroup.Count, { "aria-label": overflowLabel(hidden), "data-contract": "ICON-6", "data-grammar-avatar-count": "true", role: "img", children: _jsx("span", { "aria-hidden": "true", children: `+${hidden}` }) })) : null] }));
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/AvatarGroup/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAmB,MAAM,iCAAiC,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAoBnE;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,aAAa,EAAE,SAAS,EAAoB,EAAE,EAAE;IAC9G,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC5C,OAAO,CACH,MAAC,eAAe,kBACA,KAAK,EACjB,SAAS,EAAE,mBAAmB,CAAC,0BAA0B,EAAE,SAAS,CAAC,oBACtD,aAAa,eAClB,WAAW,kCACS,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAC3D,OAAO,EAAC,MAAM,EACd,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,IAAI,aAET,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,KAAC,UAAU,OAEH,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EACrC,SAAS,EAAC,oBAAoB,oBACf,QAAQ,mBACT,gBAAgB,8BACJ,IAAI,YAE7B,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,IAPvC,IAAI,CAAC,EAAE,CAQH,CAChB,CAAC,EACD,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACV,KAAC,eAAe,CAAC,KAAK,kBAAa,aAAa,CAAC,MAAM,CAAC,mBAAgB,QAAQ,+BAA2B,MAAM,EAAC,IAAI,EAAC,KAAK,YACxH,8BAAkB,MAAM,YAAE,IAAI,MAAM,EAAE,GAAQ,GAC1B,CAC3B,CAAC,CAAC,CAAC,IAAI,IACM,CACrB,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export type BreadcrumbItem = {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly label: string;
|
|
5
|
+
/** Ancestors carry a destination; the last item is the current page and needs none. */
|
|
6
|
+
readonly href?: string;
|
|
7
|
+
readonly leading?: ReactNode;
|
|
8
|
+
};
|
|
9
|
+
export type BreadcrumbsProps = {
|
|
10
|
+
/** Names the trail landmark, e.g. "Breadcrumb". */
|
|
11
|
+
readonly label: string;
|
|
12
|
+
readonly items: ReadonlyArray<BreadcrumbItem>;
|
|
13
|
+
/** Decorative separator; defaults to the vendor chevron. */
|
|
14
|
+
readonly separator?: ReactNode;
|
|
15
|
+
/** Same-document navigation for router-owned trails. */
|
|
16
|
+
readonly onAction?: (id: string) => void;
|
|
17
|
+
readonly className?: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* The hierarchical trail to the current page.
|
|
21
|
+
*
|
|
22
|
+
* The last item is the current page (`aria-current="page"`, not a link). At narrow widths the trail
|
|
23
|
+
* keeps one line and scrolls instead of wrapping, and long ancestor labels truncate.
|
|
24
|
+
* Contract: nav LAYOUT-3 OVERFLOW-3 (owns its inline scroll), item ACTION-3 (link vs current), leading ICON-6.
|
|
25
|
+
*/
|
|
26
|
+
export declare const Breadcrumbs: ({ label, items, separator, onAction, className }: BreadcrumbsProps) => import("react").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/Breadcrumbs/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,uFAAuF;IACvF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAC7C,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,kDAAkD,gBAAgB,gCAoC7F,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Breadcrumbs as HeroBreadcrumbs } from "@heroui/react";
|
|
4
|
+
import { navigationClassName } from "../../navigationClassNames.js";
|
|
5
|
+
/**
|
|
6
|
+
* The hierarchical trail to the current page.
|
|
7
|
+
*
|
|
8
|
+
* The last item is the current page (`aria-current="page"`, not a link). At narrow widths the trail
|
|
9
|
+
* keeps one line and scrolls instead of wrapping, and long ancestor labels truncate.
|
|
10
|
+
* Contract: nav LAYOUT-3 OVERFLOW-3 (owns its inline scroll), item ACTION-3 (link vs current), leading ICON-6.
|
|
11
|
+
*/
|
|
12
|
+
export const Breadcrumbs = ({ label, items, separator, onAction, className }) => (_jsx("nav", { "aria-label": label, className: navigationClassName("starci-core-breadcrumbs", className), "data-component": "Breadcrumbs", "data-contract": "LAYOUT-3 OVERFLOW-3", "data-tier": "composite", children: _jsx(HeroBreadcrumbs, { className: "starci-core-breadcrumbs-list", ...(separator === undefined ? {} : { separator }), ...(onAction === undefined ? {} : { onAction: (key) => onAction(String(key)) }), children: items.map((item, index) => {
|
|
13
|
+
const isCurrent = index === items.length - 1;
|
|
14
|
+
return (_jsx(HeroBreadcrumbs.Item, { id: item.id, className: "starci-core-breadcrumb", "data-contract": "ACTION-3", ...(item.href === undefined || isCurrent ? {} : { href: item.href }), children: _jsxs("span", { className: "starci-core-breadcrumb-label", "data-grammar-breadcrumb": "true", "data-grammar-current": isCurrent ? "true" : "false", children: [item.leading === undefined ? null : _jsx("span", { "aria-hidden": "true", className: "starci-core-breadcrumb-leading", "data-contract": "ICON-6", children: item.leading }), item.label] }) }, item.id));
|
|
15
|
+
}) }) }));
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/Breadcrumbs/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,eAAe,CAAA;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAqBnE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAoB,EAAE,EAAE,CAAC,CAC/F,4BACgB,KAAK,EACjB,SAAS,EAAE,mBAAmB,CAAC,yBAAyB,EAAE,SAAS,CAAC,oBACrD,aAAa,mBACd,qBAAqB,eACzB,WAAW,YAErB,KAAC,eAAe,IACZ,SAAS,EAAC,8BAA8B,KACpC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAC9C,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAoB,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAEhG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,SAAS,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;YAC5C,OAAO,CACH,KAAC,eAAe,CAAC,IAAI,IAEjB,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,SAAS,EAAC,wBAAwB,mBACpB,UAAU,KACpB,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,YAErE,gBACI,SAAS,EAAC,8BAA8B,6BAChB,MAAM,0BACR,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,aAEjD,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8BAAkB,MAAM,EAAC,SAAS,EAAC,gCAAgC,mBAAe,QAAQ,YAAE,IAAI,CAAC,OAAO,GAAQ,EACpJ,IAAI,CAAC,KAAK,IACR,IAbF,IAAI,CAAC,EAAE,CAcO,CAC1B,CAAA;QACL,CAAC,CAAC,GACY,GAChB,CACT,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export type ButtonGroupProps = {
|
|
3
|
+
/** Names the group (`role="group"`) for assistive technology. */
|
|
4
|
+
readonly label: string;
|
|
5
|
+
/** Grammar `Button`s (or `IconButton`s). They join visually and keep their own names. */
|
|
6
|
+
readonly children: ReactNode;
|
|
7
|
+
readonly orientation?: "horizontal" | "vertical";
|
|
8
|
+
/** Disables every Grammar Button and IconButton in the group. */
|
|
9
|
+
readonly isDisabled?: boolean;
|
|
10
|
+
readonly width?: "content" | "fill";
|
|
11
|
+
};
|
|
12
|
+
/** Related actions joined into one visual unit. Each button stays its own tab stop. */
|
|
13
|
+
export declare const ButtonGroup: ({ label, children, orientation, isDisabled, width }: ButtonGroupProps) => import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/ButtonGroup/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA0C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAI9E,MAAM,MAAM,gBAAgB,GAAG;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IAChD,iEAAiE;IACjE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CACtC,CAAA;AAaD,uFAAuF;AACvF,eAAO,MAAM,WAAW,GAAI,qDAAwF,gBAAgB,gCAgBnI,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { ButtonGroup as HeroButtonGroup } from "@heroui/react";
|
|
4
|
+
import { Children, cloneElement, isValidElement } from "react";
|
|
5
|
+
import { Button } from "../../primitive/Button/index.js";
|
|
6
|
+
import { IconButton } from "../../primitive/IconButton/index.js";
|
|
7
|
+
/*
|
|
8
|
+
* Grammar Button always states its own `isDisabled`, so the vendor group's disabled context (read
|
|
9
|
+
* only when a button leaves the prop unset) never reaches it. A disabled group therefore hands the
|
|
10
|
+
* state to its direct Grammar action children itself.
|
|
11
|
+
*/
|
|
12
|
+
const disableActions = (children) => Children.map(children, (child) => (isValidElement(child) && (child.type === Button || child.type === IconButton)
|
|
13
|
+
? cloneElement(child, { isDisabled: true })
|
|
14
|
+
: child));
|
|
15
|
+
/** Related actions joined into one visual unit. Each button stays its own tab stop. */
|
|
16
|
+
export const ButtonGroup = ({ label, children, orientation = "horizontal", isDisabled = false, width = "content" }) => (_jsx(HeroButtonGroup, { "data-tier": "composite", "data-component": "ButtonGroup", "data-contract": "FOCUS-2 TRUTH-2", "data-grammar-orientation": orientation, "data-grammar-disabled": isDisabled ? "true" : "false", "data-width": width, "aria-label": label, orientation: orientation, isDisabled: isDisabled, fullWidth: width === "fill", className: "starci-core-button-group", children: isDisabled ? disableActions(children) : children }));
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/ButtonGroup/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAkB,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAahE;;;;GAIG;AACH,MAAM,cAAc,GAAG,CAAC,QAAmB,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAC9E,cAAc,CAAoC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;IAC5G,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC,CAAC,KAAK,CACd,CAAC,CAAA;AAEF,uFAAuF;AACvF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,YAAY,EAAE,UAAU,GAAG,KAAK,EAAE,KAAK,GAAG,SAAS,EAAoB,EAAE,EAAE,CAAC,CACrI,KAAC,eAAe,iBACF,WAAW,oBACN,aAAa,mBACd,iBAAiB,8BACL,WAAW,2BACd,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,gBACxC,KAAK,gBACL,KAAK,EACjB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,KAAK,KAAK,MAAM,EAC3B,SAAS,EAAC,0BAA0B,YAEnC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GACnC,CACrB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import { type FieldControlProps } from "../../primitive/Field/index.js";
|
|
3
|
+
/** One option in a choice group. */
|
|
4
|
+
export type ChoiceOption = {
|
|
5
|
+
readonly value: string;
|
|
6
|
+
readonly label: ReactNode;
|
|
7
|
+
readonly description?: ReactNode;
|
|
8
|
+
readonly isDisabled?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type ChoiceOrientation = "vertical" | "horizontal";
|
|
11
|
+
export type CheckboxGroupProps = FieldControlProps & {
|
|
12
|
+
readonly options: ReadonlyArray<ChoiceOption>;
|
|
13
|
+
readonly value?: ReadonlyArray<string>;
|
|
14
|
+
readonly defaultValue?: ReadonlyArray<string>;
|
|
15
|
+
readonly onValueChange?: (value: Array<string>) => void;
|
|
16
|
+
readonly orientation?: ChoiceOrientation;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Several independent choices under one group name (`role="group"`, labelled by the group label).
|
|
20
|
+
* Required means "at least one", validated by the vendor; the group owns the one error slot.
|
|
21
|
+
*/
|
|
22
|
+
export declare const CheckboxGroup: ({ options, value, defaultValue, onValueChange, orientation, ...field }: CheckboxGroupProps) => import("react").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/CheckboxGroup/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAKH,KAAK,iBAAiB,EACzB,MAAM,gCAAgC,CAAA;AAGvC,oCAAoC;AACpC,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,YAAY,CAAA;AAEzD,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACjD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAC3C,CAAA;AAcD;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,wEAO3B,kBAAkB,gCA6BpB,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Checkbox as HeroCheckbox, CheckboxGroup as HeroCheckboxGroup } from "@heroui/react";
|
|
4
|
+
import { FieldDescription, FieldErrorText, FieldLabel, vendorFieldProps, } from "../../primitive/Field/index.js";
|
|
5
|
+
import { CheckboxItem } from "../../primitive/Checkbox/index.js";
|
|
6
|
+
/*
|
|
7
|
+
* Consumer hook: `starci-core-choice-group` names this control's root for a consumer or family
|
|
8
|
+
* stylesheet. No shipped sheet paints it: the root is drawn as a whole by `.starci-core-field`, so
|
|
9
|
+
* a rule on the hook adds to the shared anatomy and never has to replace it.
|
|
10
|
+
*/
|
|
11
|
+
/*
|
|
12
|
+
* Consumer hook: `starci-core-checkbox` names each option's root for a consumer or family
|
|
13
|
+
* stylesheet. No shipped sheet paints it: the root is drawn as a whole by `.starci-core-choice`, so
|
|
14
|
+
* a rule on the hook adds to the shared anatomy and never has to replace it.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Several independent choices under one group name (`role="group"`, labelled by the group label).
|
|
18
|
+
* Required means "at least one", validated by the vendor; the group owns the one error slot.
|
|
19
|
+
*/
|
|
20
|
+
export const CheckboxGroup = ({ options, value, defaultValue, onValueChange, orientation = "vertical", ...field }) => (_jsxs(HeroCheckboxGroup, { "data-tier": "composite", "data-component": "CheckboxGroup", "data-contract": "A11Y-1 FIELD-1 FIELD-2 CONTROL-STATE-3", "data-grammar-orientation": orientation, className: "starci-core-field starci-core-choice-group", ...vendorFieldProps(field), isReadOnly: field.isReadOnly === true, ...(value === undefined ? defaultValue === undefined ? {} : { defaultValue: [...defaultValue] } : { value: [...value] }), ...(onValueChange === undefined ? {} : { onChange: onValueChange }), children: [_jsx(FieldLabel, { isHidden: field.isLabelHidden, isRequired: field.isRequired, children: field.label }), _jsx(FieldDescription, { children: field.description }), _jsx("div", { className: "starci-core-choice-group-options", "data-grammar-field-control": "true", children: options.map((option) => (_jsx(HeroCheckbox, { value: option.value, isDisabled: option.isDisabled === true, className: "starci-core-choice starci-core-checkbox", "data-grammar-option": "true", children: _jsx(CheckboxItem, { label: option.label, description: option.description, isStandalone: false }) }, option.value))) }), _jsx(FieldErrorText, { children: field.errorMessage })] }));
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/CheckboxGroup/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAE5F,OAAO,EACH,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,gBAAgB,GAEnB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAoBhE;;;;GAIG;AAEH;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAAW,GAAG,UAAU,EACxB,GAAG,KAAK,EACS,EAAE,EAAE,CAAC,CACtB,MAAC,iBAAiB,iBACJ,WAAW,oBACN,eAAe,mBAChB,wCAAwC,8BAC5B,WAAW,EACrC,SAAS,EAAC,4CAA4C,KAClD,gBAAgB,CAAC,KAAK,CAAC,EAC3B,UAAU,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,KACjC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KACrH,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,aAEpE,KAAC,UAAU,IAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,YAAG,KAAK,CAAC,KAAK,GAAc,EACnG,KAAC,gBAAgB,cAAE,KAAK,CAAC,WAAW,GAAoB,EACxD,cAAK,SAAS,EAAC,kCAAkC,gCAA4B,MAAM,YAC9E,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACrB,KAAC,YAAY,IAET,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,UAAU,EAAE,MAAM,CAAC,UAAU,KAAK,IAAI,EACtC,SAAS,EAAC,yCAAyC,yBAC/B,MAAM,YAE1B,KAAC,YAAY,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,GAAI,IANtF,MAAM,CAAC,KAAK,CAON,CAClB,CAAC,GACA,EACN,KAAC,cAAc,cAAE,KAAK,CAAC,YAAY,GAAkB,IACrC,CACvB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export type DescriptionListItem = {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly term: ReactNode;
|
|
5
|
+
readonly description: ReactNode;
|
|
6
|
+
};
|
|
7
|
+
export type DescriptionListProps = {
|
|
8
|
+
readonly items: ReadonlyArray<DescriptionListItem>;
|
|
9
|
+
/**
|
|
10
|
+
* `columns` pairs each term with its value on one row and falls back to `stacked` below 30rem;
|
|
11
|
+
* `stacked` always puts the value under its term.
|
|
12
|
+
*/
|
|
13
|
+
readonly layout?: "columns" | "stacked";
|
|
14
|
+
/** Draw a separator between pairs. */
|
|
15
|
+
readonly isDivided?: boolean;
|
|
16
|
+
readonly className?: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Term/value pairs (details, metadata, settings summaries) as a real `<dl>`.
|
|
20
|
+
* Contract: HIERARCHY-3 (term precedes value in source and paint), TRUTH-1 (no tone carrier on facts).
|
|
21
|
+
*/
|
|
22
|
+
export declare const DescriptionList: ({ items, layout, isDivided, className }: DescriptionListProps) => import("react").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/DescriptionList/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAClD;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IACvC,sCAAsC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,yCAA4D,oBAAoB,gCAgB/G,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { navigationClassName } from "../../navigationClassNames.js";
|
|
3
|
+
/**
|
|
4
|
+
* Term/value pairs (details, metadata, settings summaries) as a real `<dl>`.
|
|
5
|
+
* Contract: HIERARCHY-3 (term precedes value in source and paint), TRUTH-1 (no tone carrier on facts).
|
|
6
|
+
*/
|
|
7
|
+
export const DescriptionList = ({ items, layout = "columns", isDivided = true, className }) => (_jsx("dl", { className: navigationClassName("starci-core-description-list", className), "data-component": "DescriptionList", "data-contract": "HIERARCHY-3 TRUTH-1", "data-tier": "composite", "data-grammar-description-layout": layout, "data-grammar-description-divided": isDivided ? "true" : "false", children: items.map((item) => (_jsxs("div", { className: "starci-core-description-pair", "data-grammar-description-pair": "true", children: [_jsx("dt", { className: "starci-core-description-term", children: item.term }), _jsx("dd", { className: "starci-core-description-value", children: item.description })] }, item.id))) }));
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/DescriptionList/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAoBnE;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,SAAS,EAAwB,EAAE,EAAE,CAAC,CACjH,aACI,SAAS,EAAE,mBAAmB,CAAC,8BAA8B,EAAE,SAAS,CAAC,oBAC1D,iBAAiB,mBAClB,qBAAqB,eACzB,WAAW,qCACY,MAAM,sCACL,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAE7D,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACjB,eAAmB,SAAS,EAAC,8BAA8B,mCAA+B,MAAM,aAC5F,aAAI,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,IAAI,GAAM,EAC7D,aAAI,SAAS,EAAC,+BAA+B,YAAE,IAAI,CAAC,WAAW,GAAM,KAF/D,IAAI,CAAC,EAAE,CAGX,CACT,CAAC,GACD,CACR,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export type FieldsetProps = {
|
|
3
|
+
/** The group's name, announced before every control inside it. */
|
|
4
|
+
readonly legend: ReactNode;
|
|
5
|
+
readonly isLegendHidden?: boolean;
|
|
6
|
+
readonly description?: ReactNode;
|
|
7
|
+
/** A cross-field problem (e.g. two values that disagree), not a single control's error. */
|
|
8
|
+
readonly errorMessage?: ReactNode;
|
|
9
|
+
readonly children: ReactNode;
|
|
10
|
+
/** Buttons that act on this group, laid out after the fields. */
|
|
11
|
+
readonly actions?: ReactNode;
|
|
12
|
+
/** Disables every control inside, including the ones rendered as `div` by the vendor. */
|
|
13
|
+
readonly isDisabled?: boolean;
|
|
14
|
+
};
|
|
15
|
+
/** A named group of related fields: a native `fieldset` + `legend` with the field rhythm. */
|
|
16
|
+
export declare const Fieldset: ({ legend, isLegendHidden, description, errorMessage, children, actions, isDisabled }: FieldsetProps) => import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/Fieldset/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG7C,MAAM,MAAM,aAAa,GAAG;IACxB,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED,6FAA6F;AAC7F,eAAO,MAAM,QAAQ,GAAI,sFAAsG,aAAa,gCAkC3I,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Fieldset as HeroFieldset } from "@heroui/react";
|
|
4
|
+
import { useId } from "react";
|
|
5
|
+
import { fieldStateAttributes } from "../../primitive/Field/index.js";
|
|
6
|
+
/** A named group of related fields: a native `fieldset` + `legend` with the field rhythm. */
|
|
7
|
+
export const Fieldset = ({ legend, isLegendHidden = false, description, errorMessage, children, actions, isDisabled = false }) => {
|
|
8
|
+
const id = useId().replace(/:/g, "");
|
|
9
|
+
const descriptionId = description == null ? undefined : `fieldset${id}-description`;
|
|
10
|
+
const errorId = errorMessage == null ? undefined : `fieldset${id}-error`;
|
|
11
|
+
const describedBy = [descriptionId, errorId].filter((part) => part !== undefined).join(" ");
|
|
12
|
+
return (_jsxs(HeroFieldset, { "data-tier": "composite", "data-component": "Fieldset", "data-contract": "A11Y-1 FIELD-2", className: "starci-core-fieldset", disabled: isDisabled, ...(describedBy === "" ? {} : { "aria-describedby": describedBy }), ...fieldStateAttributes({ isInvalid: errorMessage != null, isDisabled }), children: [_jsx(HeroFieldset.Legend, { className: isLegendHidden ? "starci-core-fieldset-legend starci-core-form-label--screen-reader" : "starci-core-fieldset-legend", "data-grammar-fieldset-legend": "true", children: legend }), descriptionId === undefined ? null : (_jsx("p", { id: descriptionId, className: "starci-core-field-description", "data-grammar-field-description": "true", children: description })), _jsx(HeroFieldset.Group, { className: "starci-core-fieldset-fields", "data-grammar-fieldset-fields": "true", children: children }), errorId === undefined ? null : (_jsx("p", { id: errorId, className: "starci-core-field-error", "data-grammar-field-error": "true", "data-contract": "FEEDBACK-1", children: errorMessage })), actions == null ? null : (_jsx(HeroFieldset.Actions, { className: "starci-core-fieldset-actions", "data-grammar-fieldset-actions": "true", children: actions }))] }));
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/Fieldset/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,KAAK,EAAkB,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAgBrE,6FAA6F;AAC7F,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,GAAG,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,KAAK,EAAiB,EAAE,EAAE;IAC5I,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACpC,MAAM,aAAa,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,cAAc,CAAA;IACnF,MAAM,OAAO,GAAG,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAA;IACxE,MAAM,WAAW,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAE3F,OAAO,CACH,MAAC,YAAY,iBACC,WAAW,oBACN,UAAU,mBACX,gBAAgB,EAC9B,SAAS,EAAC,sBAAsB,EAChC,QAAQ,EAAE,UAAU,KAChB,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC,KAC/D,oBAAoB,CAAC,EAAE,SAAS,EAAE,YAAY,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC,aAEzE,KAAC,YAAY,CAAC,MAAM,IAChB,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,mEAAmE,CAAC,CAAC,CAAC,6BAA6B,kCAClG,MAAM,YAElC,MAAM,GACW,EACrB,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAClC,YAAG,EAAE,EAAE,aAAa,EAAE,SAAS,EAAC,+BAA+B,oCAAgC,MAAM,YAAE,WAAW,GAAK,CAC1H,EACD,KAAC,YAAY,CAAC,KAAK,IAAC,SAAS,EAAC,6BAA6B,kCAA8B,MAAM,YAAE,QAAQ,GAAsB,EAC9H,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5B,YAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,yBAAyB,8BAA0B,MAAM,mBAAe,YAAY,YAAE,YAAY,GAAK,CACpI,EACA,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACtB,KAAC,YAAY,CAAC,OAAO,IAAC,SAAS,EAAC,8BAA8B,mCAA+B,MAAM,YAAE,OAAO,GAAwB,CACvI,IACU,CAClB,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { FormEvent, ReactNode } from "react";
|
|
2
|
+
/** Server-side errors keyed by field `name`; each named control shows its own. */
|
|
3
|
+
export type FormValidationErrors = Readonly<Record<string, string | ReadonlyArray<string>>>;
|
|
4
|
+
export type FormProps = {
|
|
5
|
+
readonly children: ReactNode;
|
|
6
|
+
/** Accessible name; gives the form the `form` landmark role. */
|
|
7
|
+
readonly label?: string;
|
|
8
|
+
readonly id?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Client submit. The browser navigation is prevented and the values arrive as `FormData`.
|
|
11
|
+
* Omit it and pass `action` for a native submit.
|
|
12
|
+
*/
|
|
13
|
+
readonly onSubmit?: (data: FormData, event: FormEvent<HTMLFormElement>) => void;
|
|
14
|
+
readonly onReset?: () => void;
|
|
15
|
+
readonly action?: string;
|
|
16
|
+
readonly method?: "get" | "post";
|
|
17
|
+
readonly validationErrors?: FormValidationErrors;
|
|
18
|
+
/**
|
|
19
|
+
* `native` (default) blocks submit and focuses the first invalid control; `aria` marks controls
|
|
20
|
+
* invalid in real time and lets the submit through for the app to decide.
|
|
21
|
+
*/
|
|
22
|
+
readonly validationBehavior?: "native" | "aria";
|
|
23
|
+
/** A submit is in flight: the form announces busy and ignores another submit. */
|
|
24
|
+
readonly isPending?: boolean;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The form boundary. Controls inside validate on submit (native constraint validation, required
|
|
28
|
+
* values, and any `validationErrors` from the server matched by field name) and show the message in
|
|
29
|
+
* their own error slot; the first invalid control receives focus.
|
|
30
|
+
*/
|
|
31
|
+
export declare const Form: ({ children, label, id, onSubmit, onReset, action, method, validationErrors, validationBehavior, isPending, }: FormProps) => import("react").JSX.Element;
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/Form/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGjD,kFAAkF;AAClF,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAE3F,MAAM,MAAM,SAAS,GAAG;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;IAC/E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,oBAAoB,CAAA;IAChD;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC/C,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,GAAI,8GAWlB,SAAS,gCAkCX,CAAA"}
|