@torpor/ui 0.2.0 → 0.3.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/CHANGELOG.md +35 -0
- package/dist/Accordion/Accordion.torp +44 -25
- package/dist/Accordion/AccordionContent.torp +18 -12
- package/dist/Accordion/AccordionHeader.torp +15 -8
- package/dist/Accordion/AccordionItem.torp +34 -17
- package/dist/Accordion/AccordionTrigger.torp +17 -10
- package/dist/Accordion/AccordionTypes.ts +6 -3
- package/dist/Accordion/index.d.ts +100 -35
- package/dist/Breadcrumb/Breadcrumb.torp +18 -10
- package/dist/Breadcrumb/BreadcrumbItem.torp +14 -7
- package/dist/Breadcrumb/BreadcrumbSeparator.torp +10 -3
- package/dist/Breadcrumb/index.d.ts +50 -21
- package/dist/Calendar/Calendar.torp +21 -14
- package/dist/Calendar/CalendarDay.torp +12 -4
- package/dist/Calendar/index.d.ts +16 -18
- package/dist/Contextual/Contextual.torp +125 -0
- package/dist/{Popover/PopoverContentContextual.torp → Contextual/ContextualContent.torp} +21 -12
- package/dist/Contextual/ContextualTrigger.torp +66 -0
- package/dist/Contextual/ContextualTypes.ts +30 -0
- package/dist/Contextual/index.d.ts +90 -0
- package/dist/Contextual/index.js +14 -0
- package/dist/Contextual/index.js.map +1 -0
- package/dist/Dialog/Dialog.torp +49 -73
- package/dist/Dialog/DialogBody.torp +15 -9
- package/dist/Dialog/DialogButton.torp +27 -13
- package/dist/Dialog/DialogFooter.torp +11 -3
- package/dist/Dialog/DialogHeader.torp +15 -8
- package/dist/Dialog/DialogTypes.ts +3 -2
- package/dist/Dialog/index.d.ts +83 -35
- package/dist/Disclosure/Disclosure.torp +34 -25
- package/dist/Disclosure/DisclosureContent.torp +18 -12
- package/dist/Disclosure/DisclosureHeader.torp +16 -9
- package/dist/Disclosure/DisclosureTrigger.torp +15 -8
- package/dist/Disclosure/DisclosureTypes.ts +0 -1
- package/dist/Disclosure/index.d.ts +67 -28
- package/dist/Drawer/Drawer.torp +109 -68
- package/dist/Drawer/DrawerContent.torp +80 -0
- package/dist/Drawer/DrawerOverlay.torp +38 -0
- package/dist/Drawer/DrawerTrigger.torp +35 -0
- package/dist/Drawer/DrawerTypes.ts +24 -0
- package/dist/Drawer/index.d.ts +96 -8
- package/dist/Drawer/index.js +13 -1
- package/dist/Form/Field.torp +91 -0
- package/dist/Form/Form.torp +129 -0
- package/dist/Form/FormTypes.ts +30 -0
- package/dist/Form/Input.torp +97 -0
- package/dist/Form/Label.torp +31 -0
- package/dist/Form/Message.torp +35 -0
- package/dist/Form/StandardSchemaV1.ts +70 -0
- package/dist/Form/index.d.ts +131 -0
- package/dist/Form/index.js +22 -0
- package/dist/Form/index.js.map +1 -0
- package/dist/Menu/Menu.torp +25 -15
- package/dist/Menu/MenuButton.torp +30 -13
- package/dist/Menu/MenuCheck.torp +29 -14
- package/dist/Menu/MenuGroup.torp +14 -6
- package/dist/Menu/MenuIndicator.torp +14 -7
- package/dist/Menu/MenuPopout.torp +23 -15
- package/dist/Menu/MenuPopoutContent.torp +17 -10
- package/dist/Menu/MenuPopoutTrigger.torp +23 -16
- package/dist/Menu/MenuRadio.torp +27 -16
- package/dist/Menu/MenuRadioGroup.torp +34 -15
- package/dist/Menu/MenuSeparator.torp +11 -3
- package/dist/Menu/MenuTypes.ts +7 -5
- package/dist/Menu/index.d.ts +176 -77
- package/dist/MenuBar/MenuBar.torp +24 -16
- package/dist/MenuBar/MenuBarItem.torp +24 -16
- package/dist/MenuBar/MenuBarItemContent.torp +18 -11
- package/dist/MenuBar/MenuBarItemTrigger.torp +15 -9
- package/dist/MenuBar/index.d.ts +79 -28
- package/dist/Modal/Modal.torp +118 -0
- package/dist/Modal/ModalContent.torp +77 -0
- package/dist/Modal/ModalOverlay.torp +38 -0
- package/dist/Modal/ModalTrigger.torp +50 -0
- package/dist/Modal/ModalTypes.ts +22 -0
- package/dist/Modal/index.d.ts +108 -0
- package/dist/Modal/index.js +33 -0
- package/dist/Modal/index.js.map +1 -0
- package/dist/Modal/showModal.ts +19 -0
- package/dist/Modal/showPrompt.ts +23 -0
- package/dist/NavMenu/NavMenu.torp +18 -10
- package/dist/NavMenu/NavMenuButton.torp +15 -10
- package/dist/NavMenu/NavMenuElement.torp +19 -11
- package/dist/NavMenu/NavMenuGroup.torp +13 -6
- package/dist/NavMenu/NavMenuGroupHeader.torp +15 -8
- package/dist/NavMenu/NavMenuLink.torp +21 -16
- package/dist/NavMenu/NavMenuPopout.torp +34 -18
- package/dist/NavMenu/NavMenuPopoutButton.torp +23 -18
- package/dist/NavMenu/NavMenuPopoutContent.torp +23 -13
- package/dist/NavMenu/NavMenuSeparator.torp +10 -3
- package/dist/NavMenu/index.d.ts +153 -70
- package/dist/Notification/Notification.torp +35 -16
- package/dist/Notification/NotificationClose.torp +10 -3
- package/dist/Notification/NotificationContainer.torp +11 -3
- package/dist/Notification/NotificationContent.torp +11 -3
- package/dist/Notification/index.d.ts +46 -28
- package/dist/Popover/Popover.torp +48 -28
- package/dist/Popover/PopoverContent.torp +42 -8
- package/dist/Popover/PopoverTrigger.torp +32 -3
- package/dist/Popover/PopoverTypes.ts +1 -1
- package/dist/Popover/index.d.ts +48 -111
- package/dist/Popover/index.js +1 -163
- package/dist/Popover/index.js.map +1 -1
- package/dist/TabGroup/TabContent.torp +20 -11
- package/dist/TabGroup/TabGroup.torp +58 -40
- package/dist/TabGroup/TabGroupTypes.ts +10 -5
- package/dist/TabGroup/TabHeader.torp +26 -10
- package/dist/TabGroup/TabList.torp +14 -7
- package/dist/TabGroup/TabTrigger.torp +17 -10
- package/dist/TabGroup/index.d.ts +101 -35
- package/dist/icons/ArrowDown.torp +5 -3
- package/dist/icons/ArrowLeft.torp +5 -3
- package/dist/icons/ArrowRight.torp +5 -3
- package/dist/icons/ArrowUp.torp +5 -3
- package/dist/icons/Bars.torp +5 -3
- package/dist/icons/Check.torp +5 -3
- package/dist/icons/ChevronDown.torp +5 -3
- package/dist/icons/ChevronLeft.torp +5 -3
- package/dist/icons/ChevronRight.torp +5 -3
- package/dist/icons/ChevronUp.torp +5 -3
- package/dist/icons/Cross.torp +5 -3
- package/dist/icons/IconTypes.ts +6 -0
- package/dist/icons/Loading.torp +5 -3
- package/dist/icons/Minus.torp +5 -3
- package/dist/icons/Plus.torp +5 -3
- package/dist/icons/index.d.ts +271 -126
- package/dist/index.d.ts +17 -4
- package/dist/metafile-esm.json +1 -1
- package/dist/motion/fade.ts +15 -6
- package/dist/motion/grow.ts +23 -0
- package/dist/motion/index.d.ts +19 -2
- package/dist/motion/index.js +93 -3
- package/dist/motion/index.js.map +1 -1
- package/dist/motion/measure.ts +28 -0
- package/dist/motion/slide.ts +45 -0
- package/dist/mount/clickPopover.ts +51 -0
- package/dist/mount/contextPopover.ts +51 -0
- package/dist/mount/hoverPopover.ts +58 -0
- package/package.json +28 -12
- package/scripts/postbuild.ts +11 -1
- package/src/Accordion/Accordion.torp +44 -25
- package/src/Accordion/AccordionContent.torp +18 -12
- package/src/Accordion/AccordionHeader.torp +15 -8
- package/src/Accordion/AccordionItem.torp +34 -17
- package/src/Accordion/AccordionTrigger.torp +17 -10
- package/src/Accordion/AccordionTypes.ts +6 -3
- package/src/Breadcrumb/Breadcrumb.torp +18 -10
- package/src/Breadcrumb/BreadcrumbItem.torp +14 -7
- package/src/Breadcrumb/BreadcrumbSeparator.torp +10 -3
- package/src/Calendar/Calendar.torp +21 -14
- package/src/Calendar/CalendarDay.torp +12 -4
- package/src/Contextual/Contextual.torp +125 -0
- package/src/{Popover/PopoverContentContextual.torp → Contextual/ContextualContent.torp} +21 -12
- package/src/Contextual/ContextualTrigger.torp +66 -0
- package/src/Contextual/ContextualTypes.ts +30 -0
- package/src/Contextual/index.ts +5 -0
- package/src/Dialog/Dialog.torp +49 -73
- package/src/Dialog/DialogBody.torp +15 -9
- package/src/Dialog/DialogButton.torp +27 -13
- package/src/Dialog/DialogFooter.torp +11 -3
- package/src/Dialog/DialogHeader.torp +15 -8
- package/src/Dialog/DialogTypes.ts +3 -2
- package/src/Disclosure/Disclosure.torp +34 -25
- package/src/Disclosure/DisclosureContent.torp +18 -12
- package/src/Disclosure/DisclosureHeader.torp +16 -9
- package/src/Disclosure/DisclosureTrigger.torp +15 -8
- package/src/Disclosure/DisclosureTypes.ts +0 -1
- package/src/Drawer/Drawer.torp +109 -68
- package/src/Drawer/DrawerContent.torp +80 -0
- package/src/Drawer/DrawerOverlay.torp +38 -0
- package/src/Drawer/DrawerTrigger.torp +35 -0
- package/src/Drawer/DrawerTypes.ts +24 -0
- package/src/Drawer/index.ts +4 -1
- package/src/Form/Field.torp +91 -0
- package/src/Form/Form.torp +129 -0
- package/src/Form/FormTypes.ts +30 -0
- package/src/Form/Input.torp +97 -0
- package/src/Form/Label.torp +31 -0
- package/src/Form/Message.torp +35 -0
- package/src/Form/StandardSchemaV1.ts +70 -0
- package/src/Form/index.ts +7 -0
- package/src/Menu/Menu.torp +25 -15
- package/src/Menu/MenuButton.torp +30 -13
- package/src/Menu/MenuCheck.torp +29 -14
- package/src/Menu/MenuGroup.torp +14 -6
- package/src/Menu/MenuIndicator.torp +14 -7
- package/src/Menu/MenuPopout.torp +23 -15
- package/src/Menu/MenuPopoutContent.torp +17 -10
- package/src/Menu/MenuPopoutTrigger.torp +23 -16
- package/src/Menu/MenuRadio.torp +27 -16
- package/src/Menu/MenuRadioGroup.torp +34 -15
- package/src/Menu/MenuSeparator.torp +11 -3
- package/src/Menu/MenuTypes.ts +7 -5
- package/src/MenuBar/MenuBar.torp +24 -16
- package/src/MenuBar/MenuBarItem.torp +24 -16
- package/src/MenuBar/MenuBarItemContent.torp +18 -11
- package/src/MenuBar/MenuBarItemTrigger.torp +15 -9
- package/src/Modal/Modal.torp +118 -0
- package/src/Modal/ModalContent.torp +77 -0
- package/src/Modal/ModalOverlay.torp +38 -0
- package/src/Modal/ModalTrigger.torp +50 -0
- package/src/Modal/ModalTypes.ts +22 -0
- package/src/Modal/index.ts +10 -0
- package/src/Modal/showModal.ts +19 -0
- package/src/Modal/showPrompt.ts +23 -0
- package/src/NavMenu/NavMenu.torp +18 -10
- package/src/NavMenu/NavMenuButton.torp +15 -10
- package/src/NavMenu/NavMenuElement.torp +19 -11
- package/src/NavMenu/NavMenuGroup.torp +13 -6
- package/src/NavMenu/NavMenuGroupHeader.torp +15 -8
- package/src/NavMenu/NavMenuLink.torp +21 -16
- package/src/NavMenu/NavMenuPopout.torp +34 -18
- package/src/NavMenu/NavMenuPopoutButton.torp +23 -18
- package/src/NavMenu/NavMenuPopoutContent.torp +23 -13
- package/src/NavMenu/NavMenuSeparator.torp +10 -3
- package/src/Notification/Notification.torp +35 -16
- package/src/Notification/NotificationClose.torp +10 -3
- package/src/Notification/NotificationContainer.torp +11 -3
- package/src/Notification/NotificationContent.torp +11 -3
- package/src/Popover/Popover.torp +48 -28
- package/src/Popover/PopoverContent.torp +42 -8
- package/src/Popover/PopoverTrigger.torp +32 -3
- package/src/Popover/PopoverTypes.ts +1 -1
- package/src/Popover/index.ts +1 -24
- package/src/Slider/Slider.torp +3 -3
- package/src/TabGroup/TabContent.torp +20 -11
- package/src/TabGroup/TabGroup.torp +58 -40
- package/src/TabGroup/TabGroupTypes.ts +10 -5
- package/src/TabGroup/TabHeader.torp +26 -10
- package/src/TabGroup/TabList.torp +14 -7
- package/src/TabGroup/TabTrigger.torp +17 -10
- package/src/icons/ArrowDown.torp +5 -3
- package/src/icons/ArrowLeft.torp +5 -3
- package/src/icons/ArrowRight.torp +5 -3
- package/src/icons/ArrowUp.torp +5 -3
- package/src/icons/Bars.torp +5 -3
- package/src/icons/Check.torp +5 -3
- package/src/icons/ChevronDown.torp +5 -3
- package/src/icons/ChevronLeft.torp +5 -3
- package/src/icons/ChevronRight.torp +5 -3
- package/src/icons/ChevronUp.torp +5 -3
- package/src/icons/Cross.torp +5 -3
- package/src/icons/IconTypes.ts +6 -0
- package/src/icons/Loading.torp +5 -3
- package/src/icons/Minus.torp +5 -3
- package/src/icons/Plus.torp +5 -3
- package/src/motion/fade.ts +15 -6
- package/src/motion/grow.ts +23 -0
- package/src/motion/index.ts +4 -1
- package/src/motion/measure.ts +28 -0
- package/src/motion/slide.ts +45 -0
- package/src/mount/clickPopover.ts +51 -0
- package/src/mount/contextPopover.ts +51 -0
- package/src/mount/hoverPopover.ts +58 -0
- package/test/Accordion/components/AccordionAccessibility.torp +1 -1
- package/test/Accordion/components/AccordionKeyboard.torp +1 -1
- package/test/Accordion/components/AccordionList.torp +1 -1
- package/test/Accordion/components/AccordionMultiple.torp +2 -2
- package/test/Accordion/components/AccordionSingle.torp +2 -2
- package/test/Dialog/accessibility-modal.test.ts +2 -2
- package/test/Dialog/components/DialogAccessibility.torp +8 -14
- package/test/Dialog/components/DialogFunction.torp +20 -4
- package/test/Dialog/components/DialogModal.torp +30 -0
- package/test/Dialog/components/DialogVariable.torp +7 -7
- package/test/Disclosure/accessibility.test.ts +3 -2
- package/test/Disclosure/components/DisclosureTest.torp +1 -1
- package/test/Disclosure/toggle.test.ts +3 -2
- package/test/Form/components/FieldTest.torp +25 -0
- package/test/Form/components/FormTest.torp +31 -0
- package/test/Form/components/InputTest.torp +9 -0
- package/test/Form/field.test.ts +34 -0
- package/test/Form/form.test.ts +34 -0
- package/test/Form/input.test.ts +19 -0
- package/test/Menu/accessibility.test.ts +3 -2
- package/test/Menu/basic.test.ts +11 -10
- package/test/Menu/components/MenuAccessibility.torp +5 -5
- package/test/Menu/components/MenuBasic.torp +5 -5
- package/test/MenuBar/accessibility.test.ts +3 -2
- package/test/MenuBar/basic.test.ts +3 -2
- package/test/NavMenu/basic.test.ts +1 -1
- package/test/NavMenu/components/{NavMenu.torp → NavMenuBasic.torp} +1 -1
- package/test/Notification/components/NotificationFunction.torp +0 -3
- package/test/Notification/components/NotificationVariable.torp +1 -1
- package/test/Popover/components/PopoverFunction.torp +37 -0
- package/test/Popover/components/PopoverTrigger.torp +36 -0
- package/test/Popover/components/{PromptVariable.torp → PopoverVariable.torp} +5 -3
- package/test/Popover/function.test.ts +2 -7
- package/test/Popover/trigger.test.ts +27 -0
- package/test/Popover/variable.test.ts +2 -2
- package/test/TabGroup/components/TabGroupAccessibility.torp +1 -1
- package/test/TabGroup/components/TabGroupKeyboard.torp +1 -1
- package/test/TabGroup/components/TabGroupList.torp +1 -1
- package/test/TabGroup/components/TabGroupTrigger.torp +1 -1
- package/tsup.config.ts +3 -1
- package/dist/Popover/PopoverContentAnchored.torp +0 -106
- package/dist/Popover/PopoverOverlay.torp +0 -30
- package/dist/Popover/PopoverTriggerContextual.torp +0 -37
- package/dist/Popover/PopoverTriggerHover.torp +0 -38
- package/dist/Popover/mountClickPopover.ts +0 -50
- package/dist/Popover/mountContextPopover.ts +0 -50
- package/dist/Popover/mountHoverPopover.ts +0 -57
- package/dist/Popover/showPopoverPrompt.ts +0 -23
- package/src/Popover/PopoverContentAnchored.torp +0 -106
- package/src/Popover/PopoverOverlay.torp +0 -30
- package/src/Popover/PopoverTriggerContextual.torp +0 -37
- package/src/Popover/PopoverTriggerHover.torp +0 -38
- package/src/Popover/mountClickPopover.ts +0 -50
- package/src/Popover/mountContextPopover.ts +0 -50
- package/src/Popover/mountHoverPopover.ts +0 -57
- package/src/Popover/showPopoverPrompt.ts +0 -23
- package/test/Dialog/components/CustomDialog.torp +0 -20
- package/test/Popover/components/PromptFunction.torp +0 -19
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# @torpor/ui
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 92438fc: !Edit: split Popover into Contextual, Modal and Popover
|
|
8
|
+
- 42c6b60: !Fix: transitions
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- 4f17acb: Fix: handle undefined $props in UI components
|
|
13
|
+
- Updated dependencies [255aad3]
|
|
14
|
+
- Updated dependencies [8b377a2]
|
|
15
|
+
- Updated dependencies [450b739]
|
|
16
|
+
- Updated dependencies [168dff3]
|
|
17
|
+
- Updated dependencies [fc60fe0]
|
|
18
|
+
- Updated dependencies [42c6b60]
|
|
19
|
+
- Updated dependencies [2818679]
|
|
20
|
+
- Updated dependencies [38fd0a5]
|
|
21
|
+
- Updated dependencies [3e6f3f7]
|
|
22
|
+
- Updated dependencies [051998b]
|
|
23
|
+
- @torpor/view@0.4.0
|
|
24
|
+
- @torpor/unplugin@0.2.1
|
|
25
|
+
|
|
26
|
+
## 0.2.1
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- 84f7d87: Fix: prop types
|
|
31
|
+
- 34d17f7: Feat: UI Form component and client-side submit
|
|
32
|
+
- Updated dependencies [f4716c5]
|
|
33
|
+
- Updated dependencies [1253f7a]
|
|
34
|
+
- Updated dependencies [6268e00]
|
|
35
|
+
- Updated dependencies [f2fb547]
|
|
36
|
+
- @torpor/view@0.3.2
|
|
37
|
+
|
|
3
38
|
## 0.2.0
|
|
4
39
|
|
|
5
40
|
### Minor Changes
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import { AccordionContextName, type AccordionContext, type ItemState } from "./AccordionTypes";
|
|
2
2
|
|
|
3
|
+
interface AccordionProps {
|
|
4
|
+
/** An ID for the root element */
|
|
5
|
+
id?: string;
|
|
6
|
+
/** Class name(s) for the root element */
|
|
7
|
+
class?: string,
|
|
8
|
+
/** Whether a single AccordionItem or multiple AccordionItems can be expanded at the same time */
|
|
9
|
+
type?: "single" | "multiple",
|
|
10
|
+
/** The value of the expanded AccordionItem, or an array of values if the type is "multiple" */
|
|
11
|
+
value?: string | string[],
|
|
12
|
+
/** If set to true, the user cannot interact with any items in the Accordion */
|
|
13
|
+
disabled?: boolean,
|
|
14
|
+
/** Raised when the expanded item(s) have changed */
|
|
15
|
+
onchange?: (value: string | string[]) => void,
|
|
16
|
+
}
|
|
17
|
+
|
|
3
18
|
/**
|
|
4
19
|
* A vertically stacked set of interactive headings that enable users to reveal
|
|
5
20
|
* or hide associated sections of content.
|
|
@@ -18,15 +33,19 @@ import { AccordionContextName, type AccordionContext, type ItemState } from "./A
|
|
|
18
33
|
* </AccordionItem>
|
|
19
34
|
* </Accordion>
|
|
20
35
|
* ```
|
|
21
|
-
*
|
|
22
|
-
* @prop {"single" | "multiple"} type -- Whether a single AccordionItem or multiple AccordionItems can be expanded at the same time
|
|
23
|
-
* @prop {string | string[]} value -- The value of the expanded AccordionItem, or an array of values if the type is "multiple"
|
|
24
|
-
* @prop {boolean} disabled -- If set to true, the user cannot interact with any items in the Accordion
|
|
25
|
-
* @prop {(value: string | string[]) => void} [onchange] -- Raised when the expanded item(s) have changed
|
|
26
36
|
*/
|
|
27
|
-
export default function Accordion($props:
|
|
28
|
-
$props
|
|
29
|
-
|
|
37
|
+
export default function Accordion($props: AccordionProps | undefined) {
|
|
38
|
+
let type = $props?.type ?? "single";
|
|
39
|
+
|
|
40
|
+
let $state = $watch({
|
|
41
|
+
value: $props?.value ?? (type === "single" ? "" : [] as string[])
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
$run(() => {
|
|
45
|
+
if ($props !== undefined) {
|
|
46
|
+
$props.value = $state.value;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
30
49
|
|
|
31
50
|
let itemStates: ItemState[] = [];
|
|
32
51
|
|
|
@@ -44,13 +63,13 @@ export default function Accordion($props: any) {
|
|
|
44
63
|
|
|
45
64
|
$run(() => {
|
|
46
65
|
// HACK: This should probably be done with setters?
|
|
47
|
-
let newValue = $
|
|
66
|
+
let newValue = $state.value;
|
|
48
67
|
|
|
49
68
|
// Get the value
|
|
50
|
-
switch (
|
|
69
|
+
switch (type) {
|
|
51
70
|
case "single": {
|
|
52
71
|
// Ensure the value passed in was a string (in case e.g. the user has set values to ints)
|
|
53
|
-
newValue = newValue
|
|
72
|
+
newValue = newValue.toString();
|
|
54
73
|
for (let item of itemStates) {
|
|
55
74
|
item.expanded = item.value === newValue;
|
|
56
75
|
}
|
|
@@ -69,18 +88,18 @@ export default function Accordion($props: any) {
|
|
|
69
88
|
}
|
|
70
89
|
|
|
71
90
|
// Set the value
|
|
72
|
-
$
|
|
91
|
+
$state.value = newValue;
|
|
73
92
|
})
|
|
74
93
|
|
|
75
94
|
$run(() => {
|
|
76
|
-
itemStates.forEach((s) => s.parentDisabled = $props
|
|
95
|
+
itemStates.forEach((s) => s.parentDisabled = $props?.disabled === true);
|
|
77
96
|
});
|
|
78
97
|
|
|
79
98
|
// Dispatch the change event when the value changes
|
|
80
99
|
let firstChange = true;
|
|
81
100
|
$run(() => {
|
|
82
|
-
const ev = $props
|
|
83
|
-
const value = $
|
|
101
|
+
const ev = $props?.onchange;
|
|
102
|
+
const value = $state.value;
|
|
84
103
|
if (firstChange) {
|
|
85
104
|
firstChange = false;
|
|
86
105
|
} else if (ev) {
|
|
@@ -100,21 +119,21 @@ export default function Accordion($props: any) {
|
|
|
100
119
|
}
|
|
101
120
|
|
|
102
121
|
// If we have a value, set whether the item should be expanded
|
|
103
|
-
if ($
|
|
104
|
-
switch (
|
|
122
|
+
if ($state.value) {
|
|
123
|
+
switch (type) {
|
|
105
124
|
case "single": {
|
|
106
|
-
itemState.expanded = $
|
|
125
|
+
itemState.expanded = $state.value === itemState.value;
|
|
107
126
|
break;
|
|
108
127
|
}
|
|
109
128
|
case "multiple": {
|
|
110
|
-
itemState.expanded = $
|
|
129
|
+
itemState.expanded = $state.value.includes(itemState.value);
|
|
111
130
|
break;
|
|
112
131
|
}
|
|
113
132
|
}
|
|
114
133
|
}
|
|
115
134
|
|
|
116
135
|
// Set whether the Accordion itself is disabled
|
|
117
|
-
itemState.parentDisabled = $props
|
|
136
|
+
itemState.parentDisabled = $props?.disabled === true
|
|
118
137
|
|
|
119
138
|
// Add the item's state to the array
|
|
120
139
|
itemStates.splice(itemState.index, 0, itemState);
|
|
@@ -131,13 +150,13 @@ export default function Accordion($props: any) {
|
|
|
131
150
|
}
|
|
132
151
|
|
|
133
152
|
function toggleItem(toggleValue: string) {
|
|
134
|
-
switch (
|
|
153
|
+
switch (type) {
|
|
135
154
|
case "single": {
|
|
136
155
|
for (let item of itemStates) {
|
|
137
156
|
// The item is expanded if it has the supplied value (i.e. if it was clicked) and if it
|
|
138
157
|
// wasn't already expanded (i.e. we collapse it if it was expanded and clicked)
|
|
139
158
|
if (item.value === toggleValue) {
|
|
140
|
-
$
|
|
159
|
+
$state.value = item.expanded ? "" : item.value;
|
|
141
160
|
break;
|
|
142
161
|
}
|
|
143
162
|
}
|
|
@@ -155,7 +174,7 @@ export default function Accordion($props: any) {
|
|
|
155
174
|
newValue.push(item.value);
|
|
156
175
|
}
|
|
157
176
|
}
|
|
158
|
-
$
|
|
177
|
+
$state.value = newValue.sort();
|
|
159
178
|
break;
|
|
160
179
|
}
|
|
161
180
|
}
|
|
@@ -198,8 +217,8 @@ export default function Accordion($props: any) {
|
|
|
198
217
|
|
|
199
218
|
@render {
|
|
200
219
|
<div
|
|
201
|
-
{$props
|
|
202
|
-
class={`torp-accordion ${$props
|
|
220
|
+
{$props?.id}
|
|
221
|
+
class={`torp-accordion ${$props?.class ?? ""}`.trim()}
|
|
203
222
|
>
|
|
204
223
|
<slot />
|
|
205
224
|
</div>
|
|
@@ -1,32 +1,38 @@
|
|
|
1
1
|
import getId from "../utils/getId";
|
|
2
2
|
import { AccordionItemContextName, type AccordionItemContext } from "./AccordionTypes";
|
|
3
3
|
|
|
4
|
+
interface AccordionContentProps {
|
|
5
|
+
/** An ID for the root element */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Class name(s) for the root element */
|
|
8
|
+
class?: string,
|
|
9
|
+
/** Whether this content should act as a region. Set this when the content contains heading elements or a nested Accordion */
|
|
10
|
+
ariaRegion?: boolean,
|
|
11
|
+
}
|
|
12
|
+
|
|
4
13
|
/**
|
|
5
14
|
* Content for an AccordionItem, which can be revealed or hidden by an associated AccordionTrigger.
|
|
6
|
-
*
|
|
7
|
-
* @prop {string} [id] -- An ID for the AccordionContent's div container
|
|
8
|
-
* @prop {boolean} [ariaRegion] -- Whether this content should act as a region. Set this when the content contains heading elements or a nested Accordion
|
|
9
15
|
*/
|
|
10
|
-
export default function AccordionContent($props:
|
|
11
|
-
|
|
16
|
+
export default function AccordionContent($props: AccordionContentProps | undefined) {
|
|
17
|
+
let defaultId = getId();
|
|
12
18
|
|
|
13
19
|
const context = $context[AccordionItemContextName] as AccordionItemContext;
|
|
14
20
|
if (!context) {
|
|
15
21
|
throw new Error("AccordionContent must be contained within an AccordionItem");
|
|
16
22
|
}
|
|
17
|
-
let $state =
|
|
23
|
+
let $state = context.state
|
|
18
24
|
|
|
19
25
|
// Set the content ID so that it can be used with aria-controls in AccordionTrigger
|
|
20
|
-
$state.contentId = $props
|
|
26
|
+
$state.contentId = $props?.id ?? defaultId;
|
|
21
27
|
|
|
22
28
|
@render {
|
|
23
29
|
<div
|
|
24
|
-
{$props
|
|
25
|
-
class={`torp-accordion-content ${$props
|
|
26
|
-
role={$props
|
|
30
|
+
id={$props?.id ?? defaultId}
|
|
31
|
+
class={`torp-accordion-content ${$props?.class ?? ""}`.trim()}
|
|
32
|
+
role={$props?.ariaRegion ? "region" : undefined}
|
|
27
33
|
aria-labelledby={$state.headerId}
|
|
28
|
-
data-state={$state.
|
|
29
|
-
data-disabled={$state.
|
|
34
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
35
|
+
data-disabled={$state.disabled ? "true" : undefined}
|
|
30
36
|
>
|
|
31
37
|
@if ($state.expanded) {
|
|
32
38
|
<slot />
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { AccordionItemContextName, type AccordionItemContext } from "./AccordionTypes";
|
|
2
2
|
|
|
3
|
+
interface AccordionHeaderProps {
|
|
4
|
+
/** An ID for the root element */
|
|
5
|
+
id?: string;
|
|
6
|
+
/** Class name(s) for the root element */
|
|
7
|
+
class?: string,
|
|
8
|
+
/** The type of HTML header to use */
|
|
9
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6",
|
|
10
|
+
}
|
|
11
|
+
|
|
3
12
|
/**
|
|
4
13
|
* The header for an AccordionItem, which contains the AccordionTrigger.
|
|
5
14
|
*
|
|
@@ -10,23 +19,21 @@ import { AccordionItemContextName, type AccordionItemContext } from "./Accordion
|
|
|
10
19
|
* <AccordionTrigger />
|
|
11
20
|
* </AccordionHeader>
|
|
12
21
|
* ```
|
|
13
|
-
*
|
|
14
|
-
* @prop {"h1" | "h2" | "h3" | "h4" | "h5" | "h6"} as -- The type of HTML header to use
|
|
15
22
|
*/
|
|
16
|
-
export default function AccordionHeader($props:
|
|
23
|
+
export default function AccordionHeader($props: AccordionHeaderProps | undefined) {
|
|
17
24
|
const context = $context[AccordionItemContextName] as AccordionItemContext;
|
|
18
25
|
if (!context) {
|
|
19
26
|
throw new Error("AccordionHeader must be contained within an AccordionItem");
|
|
20
27
|
}
|
|
21
|
-
let $state =
|
|
28
|
+
let $state = context.state
|
|
22
29
|
|
|
23
30
|
@render {
|
|
24
31
|
@// TODO: $props.as
|
|
25
32
|
<h4
|
|
26
|
-
{$props
|
|
27
|
-
class={`torp-accordion-header ${$props
|
|
28
|
-
data-state={$state.
|
|
29
|
-
data-disabled={$state.
|
|
33
|
+
{$props?.id}
|
|
34
|
+
class={`torp-accordion-header ${$props?.class ?? ""}`.trim()}
|
|
35
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
36
|
+
data-disabled={$state.disabled ? "true" : undefined}
|
|
30
37
|
>
|
|
31
38
|
<slot />
|
|
32
39
|
</h4>
|
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
import { AccordionContextName, AccordionItemContextName, type AccordionContext, type AccordionItemContext } from "./AccordionTypes";
|
|
1
|
+
import { AccordionContextName, AccordionItemContextName, type ItemState, type AccordionContext, type AccordionItemContext } from "./AccordionTypes";
|
|
2
|
+
|
|
3
|
+
interface AccordionItemProps {
|
|
4
|
+
/** An ID for the root element */
|
|
5
|
+
id?: string;
|
|
6
|
+
/** Class name(s) for the root element */
|
|
7
|
+
class?: string,
|
|
8
|
+
/** The index of this item in the Accordion. Set this if you will be inserting, removing or sorting items. If you don't set this, it will be set automatically */
|
|
9
|
+
index?: number,
|
|
10
|
+
/** A value for the item. Set this if you need more control over which item(s) are expanded. If you don't set this, the value will be set to the item's initial index */
|
|
11
|
+
value?: string,
|
|
12
|
+
/** If set to true, the user cannot interact with this AccordionItem */
|
|
13
|
+
disabled?: boolean,
|
|
14
|
+
/** Raised when this item is opened or closed */
|
|
15
|
+
ontoggle?: (open: boolean) => void,
|
|
16
|
+
}
|
|
2
17
|
|
|
3
18
|
/**
|
|
4
19
|
* An item in an Accordion, which must consist of an AccordionTrigger and an AccordionContent.
|
|
@@ -13,22 +28,17 @@ import { AccordionContextName, AccordionItemContextName, type AccordionContext,
|
|
|
13
28
|
* <AccordionContent />
|
|
14
29
|
* </AccordionItem>
|
|
15
30
|
* ```
|
|
16
|
-
*
|
|
17
|
-
* @prop {number} [index] -- The index of this item in the Accordion. Set this if you will be inserting, removing or sorting items. If you don't set this, it will be set automatically
|
|
18
|
-
* @prop {string} [value] -- A value for the item. Set this if you need more control over which item(s) are expanded. If you don't set this, the value will be set to the item's initial index
|
|
19
|
-
* @prop {boolean} [disabled] -- If set to true, the user cannot interact with this AccordionItem
|
|
20
|
-
* @prop {(boolean) => void} [ontoggle] -- Raised when this item is opened or closed
|
|
21
31
|
*/
|
|
22
|
-
export default function AccordionItem($props:
|
|
32
|
+
export default function AccordionItem($props: AccordionItemProps | undefined) {
|
|
23
33
|
let $state: ItemState = $watch({
|
|
24
34
|
index: -1,
|
|
25
35
|
value: "",
|
|
26
36
|
expanded: false,
|
|
27
|
-
|
|
37
|
+
headerId: "",
|
|
38
|
+
contentId: "",
|
|
39
|
+
disabled: $props?.disabled ?? false,
|
|
28
40
|
parentDisabled: false,
|
|
29
|
-
|
|
30
|
-
return this.expanded ? "open" : "closed";
|
|
31
|
-
},
|
|
41
|
+
setFocused
|
|
32
42
|
})
|
|
33
43
|
|
|
34
44
|
// Get stuff out of the AccordionContext
|
|
@@ -46,7 +56,7 @@ export default function AccordionItem($props: any) {
|
|
|
46
56
|
$context[AccordionItemContextName] = itemContext;
|
|
47
57
|
|
|
48
58
|
// Register this item with the parent Accordion, which will handle toggling expanded for all items
|
|
49
|
-
context.registerItem($state);
|
|
59
|
+
context.registerItem($state, setFocused);
|
|
50
60
|
|
|
51
61
|
// Remove the item from the parent Accordion when this item is destroyed
|
|
52
62
|
$run(() => {
|
|
@@ -58,7 +68,7 @@ export default function AccordionItem($props: any) {
|
|
|
58
68
|
// Dispatch the toggle event when the value of expanded changes
|
|
59
69
|
let firstToggle = true;
|
|
60
70
|
$run(() => {
|
|
61
|
-
const ev = $props
|
|
71
|
+
const ev = $props?.ontoggle;
|
|
62
72
|
const expanded = $state.expanded;
|
|
63
73
|
if (firstToggle) {
|
|
64
74
|
firstToggle = false;
|
|
@@ -67,12 +77,19 @@ export default function AccordionItem($props: any) {
|
|
|
67
77
|
}
|
|
68
78
|
});
|
|
69
79
|
|
|
80
|
+
// Called from the parent Accordion; pass the focus command along to the AccordionButton
|
|
81
|
+
function setFocused() {
|
|
82
|
+
if (itemContext.setHeaderFocused) {
|
|
83
|
+
itemContext.setHeaderFocused();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
70
87
|
@render {
|
|
71
88
|
<div
|
|
72
|
-
{$props
|
|
73
|
-
class={`torp-accordion-item ${$props
|
|
74
|
-
data-state={$state.
|
|
75
|
-
data-disabled={$state.
|
|
89
|
+
{$props?.id}
|
|
90
|
+
class={`torp-accordion-item ${$props?.class ?? ""}`.trim()}
|
|
91
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
92
|
+
data-disabled={$state.disabled ? "true" : undefined}
|
|
76
93
|
>
|
|
77
94
|
<slot />
|
|
78
95
|
</div>
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
import getId from "../utils/getId";
|
|
2
2
|
import { AccordionItemContextName, type AccordionItemContext } from "./AccordionTypes";
|
|
3
3
|
|
|
4
|
+
interface AccordionTriggerProps {
|
|
5
|
+
/** An ID for the root element */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Class name(s) for the root element */
|
|
8
|
+
class?: string,
|
|
9
|
+
}
|
|
10
|
+
|
|
4
11
|
/**
|
|
5
12
|
* A header button for an AccordionItem, which can be used to reveal or hide an associated AccordionContent.
|
|
6
13
|
*/
|
|
7
|
-
export default function AccordionTrigger() {
|
|
8
|
-
let
|
|
14
|
+
export default function AccordionTrigger($props: AccordionTriggerProps | undefined) {
|
|
15
|
+
let defaultId = getId();
|
|
9
16
|
|
|
10
|
-
|
|
17
|
+
let button: HTMLButtonElement;
|
|
11
18
|
|
|
12
19
|
// Get stuff out of the AccordionItemContext
|
|
13
20
|
const context = $context[AccordionItemContextName] as AccordionItemContext;
|
|
14
21
|
if (!context) {
|
|
15
22
|
throw new Error("AccordionTrigger must be contained within an AccordionItem");
|
|
16
23
|
}
|
|
17
|
-
let $state =
|
|
24
|
+
let $state = context.state;
|
|
18
25
|
|
|
19
26
|
// Set the header ID so that it can be used with aria-labelledby in AccordionContent
|
|
20
|
-
$state.headerId = $props
|
|
27
|
+
$state.headerId = $props?.id ?? defaultId;
|
|
21
28
|
|
|
22
29
|
// Let the item know how to set the button's focus
|
|
23
30
|
$state.setFocused = setFocused;
|
|
@@ -41,14 +48,14 @@ export default function AccordionTrigger() {
|
|
|
41
48
|
@render {
|
|
42
49
|
<button
|
|
43
50
|
type="button"
|
|
44
|
-
{$props
|
|
45
|
-
class={`torp-accordion-trigger ${$props
|
|
51
|
+
id={$props?.id ?? defaultId}
|
|
52
|
+
class={`torp-accordion-trigger ${$props?.class ?? ""}`.trim()}
|
|
46
53
|
disabled={$state.disabled || $state.parentDisabled}
|
|
47
54
|
aria-expanded={$state.expanded.toString()}
|
|
48
|
-
aria-disabled={$state.disabled}
|
|
55
|
+
aria-disabled={$state.disabled ? "true" : undefined}
|
|
49
56
|
aria-controls={$state.contentId}
|
|
50
|
-
data-state={$state.
|
|
51
|
-
data-disabled={$state.disabled}
|
|
57
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
58
|
+
data-disabled={$state.disabled ? "true" : undefined}
|
|
52
59
|
&ref={button}
|
|
53
60
|
onclick={handleClick}
|
|
54
61
|
onkeydown={handleKey}
|
|
@@ -13,21 +13,24 @@ export interface AccordionContext {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export interface AccordionItemContext {
|
|
16
|
-
/**
|
|
16
|
+
/** Raised when an AccordionItem is toggled */
|
|
17
17
|
toggleItem: (value: string) => void;
|
|
18
|
-
/**
|
|
18
|
+
/** Raised when an AccordionHeader receives a keyboard event */
|
|
19
19
|
handleHeaderKey: (index: number, e: KeyboardEvent) => void;
|
|
20
20
|
/** The reactive state for an AccordionItem */
|
|
21
21
|
state: ItemState;
|
|
22
|
+
/** Called in an AccordionItem when its header needs to be focused */
|
|
23
|
+
setHeaderFocused?: () => void;
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
export interface ItemState {
|
|
25
27
|
index: number;
|
|
26
28
|
value: string;
|
|
27
29
|
expanded: boolean;
|
|
30
|
+
headerId: string;
|
|
31
|
+
contentId: string;
|
|
28
32
|
disabled: boolean;
|
|
29
33
|
parentDisabled: boolean;
|
|
30
|
-
dataState: "open" | "closed";
|
|
31
34
|
/** Called in the Accordion when a header needs to be focused */
|
|
32
35
|
setFocused: () => void;
|
|
33
36
|
}
|
|
@@ -1,90 +1,155 @@
|
|
|
1
1
|
import { type SlotRender } from "@torpor/view";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
interface AccordionProps {
|
|
5
|
+
/** An ID for the root element */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Class name(s) for the root element */
|
|
8
|
+
class?: string,
|
|
9
|
+
/** Whether a single AccordionItem or multiple AccordionItems can be expanded at the same time */
|
|
10
|
+
type?: "single" | "multiple",
|
|
11
|
+
/** The value of the expanded AccordionItem, or an array of values if the type is "multiple" */
|
|
12
|
+
value?: string | string[],
|
|
13
|
+
/** If set to true, the user cannot interact with any items in the Accordion */
|
|
14
|
+
disabled?: boolean,
|
|
15
|
+
/** Raised when the expanded item(s) have changed */
|
|
16
|
+
onchange?: (value: string | string[]) => void,
|
|
17
|
+
}
|
|
18
|
+
|
|
4
19
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
20
|
+
* A vertically stacked set of interactive headings that enable users to reveal
|
|
21
|
+
* or hide associated sections of content.
|
|
22
|
+
*
|
|
23
|
+
* See [the WAI ARIA guidelines for Accordions](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/).
|
|
24
|
+
*
|
|
25
|
+
* The structure of an Accordion is:
|
|
26
|
+
*
|
|
27
|
+
* ```
|
|
28
|
+
* <Accordion>
|
|
29
|
+
* <AccordionItem>
|
|
30
|
+
* <AccordionHeader>
|
|
31
|
+
* <AccordionTrigger />
|
|
32
|
+
* </AccordionHeader>
|
|
33
|
+
* <AccordionContent />
|
|
34
|
+
* </AccordionItem>
|
|
35
|
+
* </Accordion>
|
|
36
|
+
* ```
|
|
11
37
|
*/
|
|
12
38
|
declare function Accordion(
|
|
13
39
|
$parent: ParentNode,
|
|
14
40
|
$anchor: Node | null,
|
|
15
|
-
$props:
|
|
41
|
+
$props: AccordionProps | undefined,
|
|
16
42
|
$context?: Record<PropertyKey, any>,
|
|
17
43
|
$slots?: Record<string, SlotRender>,
|
|
18
44
|
): void;
|
|
19
45
|
|
|
20
46
|
|
|
21
47
|
|
|
48
|
+
interface AccordionContentProps {
|
|
49
|
+
/** An ID for the root element */
|
|
50
|
+
id?: string;
|
|
51
|
+
/** Class name(s) for the root element */
|
|
52
|
+
class?: string,
|
|
53
|
+
/** Whether this content should act as a region. Set this when the content contains heading elements or a nested Accordion */
|
|
54
|
+
ariaRegion?: boolean,
|
|
55
|
+
}
|
|
56
|
+
|
|
22
57
|
/**
|
|
23
|
-
*
|
|
24
|
-
* @param $parent -- The parent node.
|
|
25
|
-
* @param $anchor -- The node to mount the component before.
|
|
26
|
-
* @param $props -- The values that have been passed into the component as properties.
|
|
27
|
-
* @param $context -- Values that have been passed into the component from its ancestors.
|
|
28
|
-
* @param $slots -- Functions for rendering children into slot nodes within the component.
|
|
58
|
+
* Content for an AccordionItem, which can be revealed or hidden by an associated AccordionTrigger.
|
|
29
59
|
*/
|
|
30
60
|
declare function AccordionContent(
|
|
31
61
|
$parent: ParentNode,
|
|
32
62
|
$anchor: Node | null,
|
|
33
|
-
$props:
|
|
63
|
+
$props: AccordionContentProps | undefined,
|
|
34
64
|
$context?: Record<PropertyKey, any>,
|
|
35
65
|
$slots?: Record<string, SlotRender>,
|
|
36
66
|
): void;
|
|
37
67
|
|
|
38
68
|
|
|
39
69
|
|
|
70
|
+
interface AccordionHeaderProps {
|
|
71
|
+
/** An ID for the root element */
|
|
72
|
+
id?: string;
|
|
73
|
+
/** Class name(s) for the root element */
|
|
74
|
+
class?: string,
|
|
75
|
+
/** The type of HTML header to use */
|
|
76
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6",
|
|
77
|
+
}
|
|
78
|
+
|
|
40
79
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
80
|
+
* The header for an AccordionItem, which contains the AccordionTrigger.
|
|
81
|
+
*
|
|
82
|
+
* The structure of an AccordionHeader is:
|
|
83
|
+
*
|
|
84
|
+
* ```
|
|
85
|
+
* <AccordionHeader>
|
|
86
|
+
* <AccordionTrigger />
|
|
87
|
+
* </AccordionHeader>
|
|
88
|
+
* ```
|
|
47
89
|
*/
|
|
48
90
|
declare function AccordionHeader(
|
|
49
91
|
$parent: ParentNode,
|
|
50
92
|
$anchor: Node | null,
|
|
51
|
-
$props:
|
|
93
|
+
$props: AccordionHeaderProps | undefined,
|
|
52
94
|
$context?: Record<PropertyKey, any>,
|
|
53
95
|
$slots?: Record<string, SlotRender>,
|
|
54
96
|
): void;
|
|
55
97
|
|
|
56
98
|
|
|
57
99
|
|
|
100
|
+
interface AccordionItemProps {
|
|
101
|
+
/** An ID for the root element */
|
|
102
|
+
id?: string;
|
|
103
|
+
/** Class name(s) for the root element */
|
|
104
|
+
class?: string,
|
|
105
|
+
/** The index of this item in the Accordion. Set this if you will be inserting, removing or sorting items. If you don't set this, it will be set automatically */
|
|
106
|
+
index?: number,
|
|
107
|
+
/** A value for the item. Set this if you need more control over which item(s) are expanded. If you don't set this, the value will be set to the item's initial index */
|
|
108
|
+
value?: string,
|
|
109
|
+
/** If set to true, the user cannot interact with this AccordionItem */
|
|
110
|
+
disabled?: boolean,
|
|
111
|
+
/** Raised when this item is opened or closed */
|
|
112
|
+
ontoggle?: (open: boolean) => void,
|
|
113
|
+
}
|
|
114
|
+
|
|
58
115
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
116
|
+
* An item in an Accordion, which must consist of an AccordionTrigger and an AccordionContent.
|
|
117
|
+
*
|
|
118
|
+
* The structure of an AccordionItem is:
|
|
119
|
+
*
|
|
120
|
+
* ```
|
|
121
|
+
* <AccordionItem>
|
|
122
|
+
* <AccordionHeader>
|
|
123
|
+
* <AccordionTrigger />
|
|
124
|
+
* </AccordionHeader>
|
|
125
|
+
* <AccordionContent />
|
|
126
|
+
* </AccordionItem>
|
|
127
|
+
* ```
|
|
65
128
|
*/
|
|
66
129
|
declare function AccordionItem(
|
|
67
130
|
$parent: ParentNode,
|
|
68
131
|
$anchor: Node | null,
|
|
69
|
-
$props:
|
|
132
|
+
$props: AccordionItemProps | undefined,
|
|
70
133
|
$context?: Record<PropertyKey, any>,
|
|
71
134
|
$slots?: Record<string, SlotRender>,
|
|
72
135
|
): void;
|
|
73
136
|
|
|
74
137
|
|
|
75
138
|
|
|
139
|
+
interface AccordionTriggerProps {
|
|
140
|
+
/** An ID for the root element */
|
|
141
|
+
id?: string;
|
|
142
|
+
/** Class name(s) for the root element */
|
|
143
|
+
class?: string,
|
|
144
|
+
}
|
|
145
|
+
|
|
76
146
|
/**
|
|
77
|
-
*
|
|
78
|
-
* @param $parent -- The parent node.
|
|
79
|
-
* @param $anchor -- The node to mount the component before.
|
|
80
|
-
* @param $props -- The values that have been passed into the component as properties.
|
|
81
|
-
* @param $context -- Values that have been passed into the component from its ancestors.
|
|
82
|
-
* @param $slots -- Functions for rendering children into slot nodes within the component.
|
|
147
|
+
* A header button for an AccordionItem, which can be used to reveal or hide an associated AccordionContent.
|
|
83
148
|
*/
|
|
84
149
|
declare function AccordionTrigger(
|
|
85
150
|
$parent: ParentNode,
|
|
86
151
|
$anchor: Node | null,
|
|
87
|
-
$props
|
|
152
|
+
$props: AccordionTriggerProps | undefined,
|
|
88
153
|
$context?: Record<PropertyKey, any>,
|
|
89
154
|
$slots?: Record<string, SlotRender>,
|
|
90
155
|
): void;
|