@pzerelles/headlessui-svelte 2.0.0-next.1 → 2.1.2-next.10
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/dist/button/Button.svelte +61 -0
- package/dist/button/Button.svelte.d.ts +47 -0
- package/dist/button/index.d.ts +1 -0
- package/dist/button/index.js +1 -0
- package/dist/checkbox/Checkbox.svelte +95 -63
- package/dist/checkbox/Checkbox.svelte.d.ts +43 -29
- package/dist/close-button/CloseButton.svelte +11 -0
- package/dist/close-button/CloseButton.svelte.d.ts +48 -0
- package/dist/close-button/index.d.ts +1 -0
- package/dist/close-button/index.js +1 -0
- package/dist/combobox/Combobox.svelte +6 -0
- package/dist/combobox/Combobox.svelte.d.ts +50 -0
- package/dist/data-interactive/DataInteractive.svelte +41 -0
- package/dist/data-interactive/DataInteractive.svelte.d.ts +39 -0
- package/dist/data-interactive/index.d.ts +1 -0
- package/dist/data-interactive/index.js +1 -0
- package/dist/description/Description.svelte +16 -41
- package/dist/description/Description.svelte.d.ts +15 -23
- package/dist/description/context.svelte.d.ts +17 -0
- package/dist/description/context.svelte.js +51 -0
- package/dist/dialog/Dialog.svelte +51 -0
- package/dist/dialog/Dialog.svelte.d.ts +60 -0
- package/dist/dialog/DialogBackdrop.svelte +39 -0
- package/dist/dialog/DialogBackdrop.svelte.d.ts +38 -0
- package/dist/dialog/DialogPanel.svelte +46 -0
- package/dist/dialog/DialogPanel.svelte.d.ts +40 -0
- package/dist/dialog/DialogTitle.svelte +29 -0
- package/dist/dialog/DialogTitle.svelte.d.ts +34 -0
- package/dist/dialog/InternalDialog.svelte +233 -0
- package/dist/dialog/InternalDialog.svelte.d.ts +42 -0
- package/dist/dialog/context.svelte.d.ts +15 -0
- package/dist/dialog/context.svelte.js +16 -0
- package/dist/dialog/index.d.ts +4 -0
- package/dist/dialog/index.js +4 -0
- package/dist/field/Field.svelte +14 -17
- package/dist/field/Field.svelte.d.ts +21 -17
- package/dist/fieldset/Fieldset.svelte +19 -17
- package/dist/fieldset/Fieldset.svelte.d.ts +21 -17
- package/dist/focus-trap/FocusTrap.svelte +325 -0
- package/dist/focus-trap/FocusTrap.svelte.d.ts +46 -0
- package/dist/focus-trap/FocusTrapFeatures.d.ts +14 -0
- package/dist/focus-trap/FocusTrapFeatures.js +15 -0
- package/dist/hooks/document-overflow/adjust-scrollbar-padding.d.ts +2 -0
- package/dist/hooks/document-overflow/adjust-scrollbar-padding.js +18 -0
- package/dist/hooks/document-overflow/handle-ios-locking.d.ts +6 -0
- package/dist/hooks/document-overflow/handle-ios-locking.js +134 -0
- package/dist/hooks/document-overflow/overflow-store.d.ts +19 -0
- package/dist/hooks/document-overflow/overflow-store.js +76 -0
- package/dist/hooks/document-overflow/prevent-scroll.d.ts +2 -0
- package/dist/hooks/document-overflow/prevent-scroll.js +7 -0
- package/dist/hooks/document-overflow/use-document-overflow.svelte.d.ts +7 -0
- package/dist/hooks/document-overflow/use-document-overflow.svelte.js +27 -0
- package/dist/hooks/use-active-press.svelte.d.ts +14 -0
- package/dist/{actions/activePress.svelte.js → hooks/use-active-press.svelte.js} +33 -39
- package/dist/hooks/use-by-comparator.d.ts +2 -0
- package/dist/hooks/use-by-comparator.js +15 -0
- package/dist/hooks/use-controllable.svelte.d.ts +6 -0
- package/dist/hooks/use-controllable.svelte.js +34 -0
- package/dist/hooks/use-did-element-move.svelte.d.ts +6 -0
- package/dist/hooks/use-did-element-move.svelte.js +27 -0
- package/dist/hooks/use-disabled.d.ts +3 -0
- package/dist/hooks/use-disabled.js +9 -0
- package/dist/hooks/use-element-size.svelte.d.ts +7 -0
- package/dist/hooks/use-element-size.svelte.js +36 -0
- package/dist/hooks/use-escape.svelte.d.ts +5 -0
- package/dist/hooks/use-escape.svelte.js +26 -0
- package/dist/hooks/use-event-listener.svelte.d.ts +6 -0
- package/dist/hooks/use-event-listener.svelte.js +12 -0
- package/dist/hooks/use-flags.svelte.d.ts +8 -0
- package/dist/hooks/use-flags.svelte.js +18 -0
- package/dist/hooks/use-focus-ring.svelte.d.ts +10 -0
- package/dist/hooks/use-focus-ring.svelte.js +24 -0
- package/dist/hooks/use-hover.svelte.d.ts +26 -0
- package/dist/hooks/use-hover.svelte.js +124 -0
- package/dist/hooks/use-id.d.ts +1 -0
- package/dist/hooks/use-id.js +1 -0
- package/dist/hooks/use-inert-others.svelte.d.ts +32 -0
- package/dist/hooks/use-inert-others.svelte.js +114 -0
- package/dist/hooks/use-is-mounted.svelte.d.ts +3 -0
- package/dist/hooks/use-is-mounted.svelte.js +14 -0
- package/dist/hooks/use-is-top-layer.svelte.d.ts +29 -0
- package/dist/hooks/use-is-top-layer.svelte.js +82 -0
- package/dist/hooks/use-is-touch-device.svelte.d.ts +3 -0
- package/dist/hooks/use-is-touch-device.svelte.js +20 -0
- package/dist/hooks/use-on-disappear.svelte.d.ts +12 -0
- package/dist/hooks/use-on-disappear.svelte.js +38 -0
- package/dist/hooks/use-outside-click.svelte.d.ts +10 -0
- package/dist/hooks/use-outside-click.svelte.js +150 -0
- package/dist/hooks/use-reducer.d.ts +4 -0
- package/dist/hooks/use-reducer.js +11 -0
- package/dist/hooks/use-resolve-button-type.svelte.d.ts +10 -0
- package/dist/hooks/use-resolve-button-type.svelte.js +19 -0
- package/dist/hooks/use-root-containers.svelte.d.ts +9 -0
- package/dist/hooks/use-root-containers.svelte.js +50 -0
- package/dist/hooks/use-scroll-lock.svelte.d.ts +5 -0
- package/dist/hooks/use-scroll-lock.svelte.js +24 -0
- package/dist/hooks/use-sync-refs.d.ts +7 -0
- package/dist/hooks/use-sync-refs.js +22 -0
- package/dist/hooks/use-tab-direction.svelte.d.ts +7 -0
- package/dist/hooks/use-tab-direction.svelte.js +25 -0
- package/dist/hooks/use-text-value.svelte.d.ts +3 -0
- package/dist/hooks/use-text-value.svelte.js +20 -0
- package/dist/hooks/use-tracked-pointer.d.ts +4 -0
- package/dist/hooks/use-tracked-pointer.js +26 -0
- package/dist/hooks/use-transition.svelte.d.ts +20 -0
- package/dist/hooks/use-transition.svelte.js +253 -0
- package/dist/hooks/use-tree-walker.svelte.d.ts +8 -0
- package/dist/hooks/use-tree-walker.svelte.js +19 -0
- package/dist/hooks/use-watch.svelte.d.ts +4 -0
- package/dist/hooks/use-watch.svelte.js +16 -0
- package/dist/hooks/use-window-event.svelte.d.ts +6 -0
- package/dist/hooks/use-window-event.svelte.js +12 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +14 -0
- package/dist/input/Input.svelte +59 -0
- package/dist/input/Input.svelte.d.ts +50 -0
- package/dist/input/index.d.ts +1 -0
- package/dist/input/index.js +1 -0
- package/dist/internal/FocusSentinel.svelte +45 -0
- package/dist/internal/FocusSentinel.svelte.d.ts +20 -0
- package/dist/internal/ForcePortalRoot.svelte +6 -0
- package/dist/internal/ForcePortalRoot.svelte.d.ts +22 -0
- package/dist/internal/FormFields.svelte +2 -4
- package/dist/internal/FormFields.svelte.d.ts +9 -7
- package/dist/internal/FormResolver.svelte +11 -16
- package/dist/internal/FormResolver.svelte.d.ts +6 -4
- package/dist/internal/Hidden.svelte +6 -14
- package/dist/internal/Hidden.svelte.d.ts +36 -23
- package/dist/internal/HiddenFeatures.d.ts +5 -0
- package/dist/internal/HiddenFeatures.js +9 -0
- package/dist/internal/HoistFormFields.svelte.d.ts +5 -2
- package/dist/internal/MainTreeProvider.svelte +45 -0
- package/dist/internal/MainTreeProvider.svelte.d.ts +31 -0
- package/dist/internal/Portal.svelte.d.ts +5 -2
- package/dist/internal/close-provider.d.ts +7 -0
- package/dist/internal/close-provider.js +7 -0
- package/dist/internal/floating.svelte.d.ts +62 -0
- package/dist/internal/floating.svelte.js +488 -0
- package/dist/internal/frozen.svelte.d.ts +6 -0
- package/dist/internal/frozen.svelte.js +18 -0
- package/dist/internal/open-closed.d.ts +14 -0
- package/dist/internal/open-closed.js +17 -0
- package/dist/internal/portal-force-root.svelte.d.ts +6 -0
- package/dist/internal/portal-force-root.svelte.js +11 -0
- package/dist/label/Label.svelte +22 -49
- package/dist/label/Label.svelte.d.ts +19 -23
- package/dist/label/context.svelte.d.ts +17 -0
- package/dist/label/context.svelte.js +56 -0
- package/dist/legend/Legend.svelte +4 -3
- package/dist/legend/Legend.svelte.d.ts +33 -16
- package/dist/listbox/Listbox.svelte +434 -0
- package/dist/listbox/Listbox.svelte.d.ts +116 -0
- package/dist/listbox/ListboxButton.svelte +138 -0
- package/dist/listbox/ListboxButton.svelte.d.ts +50 -0
- package/dist/listbox/ListboxOption.svelte +135 -0
- package/dist/listbox/ListboxOption.svelte.d.ts +50 -0
- package/dist/listbox/ListboxOptions.svelte +268 -0
- package/dist/listbox/ListboxOptions.svelte.d.ts +55 -0
- package/dist/listbox/ListboxSelectedOption.svelte +33 -0
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +40 -0
- package/dist/listbox/ListboxStates.d.ts +12 -0
- package/dist/listbox/ListboxStates.js +15 -0
- package/dist/listbox/index.d.ts +5 -0
- package/dist/listbox/index.js +5 -0
- package/dist/menu/Menu.svelte +235 -0
- package/dist/menu/Menu.svelte.d.ts +42 -0
- package/dist/menu/MenuButton.svelte +127 -0
- package/dist/menu/MenuButton.svelte.d.ts +52 -0
- package/dist/menu/MenuHeading.svelte +19 -0
- package/dist/menu/MenuHeading.svelte.d.ts +39 -0
- package/dist/menu/MenuItem.svelte +114 -0
- package/dist/menu/MenuItem.svelte.d.ts +49 -0
- package/dist/menu/MenuItems.svelte +244 -0
- package/dist/menu/MenuItems.svelte.d.ts +55 -0
- package/dist/menu/MenuSection.svelte +14 -0
- package/dist/menu/MenuSection.svelte.d.ts +35 -0
- package/dist/menu/MenuSeparator.svelte +9 -0
- package/dist/menu/MenuSeparator.svelte.d.ts +35 -0
- package/dist/menu/context.svelte.d.ts +47 -0
- package/dist/menu/context.svelte.js +21 -0
- package/dist/menu/index.d.ts +7 -0
- package/dist/menu/index.js +7 -0
- package/dist/portal/InternalPortal.svelte +97 -0
- package/dist/portal/InternalPortal.svelte.d.ts +43 -0
- package/dist/portal/Portal.svelte +7 -0
- package/dist/portal/Portal.svelte.d.ts +23 -0
- package/dist/portal/PortalGroup.svelte +14 -0
- package/dist/portal/PortalGroup.svelte.d.ts +40 -0
- package/dist/switch/Switch.svelte +153 -0
- package/dist/switch/Switch.svelte.d.ts +61 -0
- package/dist/switch/SwitchGroup.svelte +37 -0
- package/dist/switch/SwitchGroup.svelte.d.ts +34 -0
- package/dist/switch/index.d.ts +2 -0
- package/dist/switch/index.js +2 -0
- package/dist/tabs/Tab.svelte +156 -0
- package/dist/tabs/Tab.svelte.d.ts +48 -0
- package/dist/tabs/TabGroup.svelte +241 -0
- package/dist/tabs/TabGroup.svelte.d.ts +67 -0
- package/dist/tabs/TabList.svelte +16 -0
- package/dist/tabs/TabList.svelte.d.ts +35 -0
- package/dist/tabs/TabPanel.svelte +61 -0
- package/dist/tabs/TabPanel.svelte.d.ts +47 -0
- package/dist/tabs/TabPanels.svelte +12 -0
- package/dist/tabs/TabPanels.svelte.d.ts +34 -0
- package/dist/tabs/index.d.ts +5 -0
- package/dist/tabs/index.js +5 -0
- package/dist/test-utils/accessability-assertions.d.ts +271 -0
- package/dist/test-utils/accessability-assertions.js +1572 -0
- package/dist/test-utils/fake-pointer.d.ts +24 -0
- package/dist/test-utils/fake-pointer.js +48 -0
- package/dist/test-utils/interactions.d.ts +61 -0
- package/dist/test-utils/interactions.js +453 -0
- package/dist/test-utils/suppress-console-logs.d.ts +7 -0
- package/dist/test-utils/suppress-console-logs.js +17 -0
- package/dist/textarea/Textarea.svelte +67 -0
- package/dist/textarea/Textarea.svelte.d.ts +50 -0
- package/dist/textarea/index.d.ts +1 -0
- package/dist/textarea/index.js +1 -0
- package/dist/transition/InternalTransitionChild.svelte +178 -0
- package/dist/transition/InternalTransitionChild.svelte.d.ts +55 -0
- package/dist/transition/Transition.svelte +89 -0
- package/dist/transition/Transition.svelte.d.ts +42 -0
- package/dist/transition/TransitionChild.svelte +16 -0
- package/dist/transition/TransitionChild.svelte.d.ts +44 -0
- package/dist/transition/context.svelte.d.ts +64 -0
- package/dist/transition/context.svelte.js +120 -0
- package/dist/transition/index.d.ts +2 -0
- package/dist/transition/index.js +2 -0
- package/dist/utils/ElementOrComponent.svelte +26 -0
- package/dist/utils/ElementOrComponent.svelte.d.ts +56 -0
- package/dist/utils/Generic.svelte +44 -0
- package/dist/utils/Generic.svelte.d.ts +35 -0
- package/dist/utils/StableCollection.svelte +43 -0
- package/dist/utils/StableCollection.svelte.d.ts +22 -0
- package/dist/utils/active-element-history.d.ts +1 -0
- package/dist/utils/active-element-history.js +35 -0
- package/dist/utils/alternative-types.d.ts +21 -0
- package/dist/utils/alternative-types.js +1 -0
- package/dist/utils/calculate-active-index.d.ts +25 -0
- package/dist/utils/calculate-active-index.js +74 -0
- package/dist/utils/class-names.d.ts +1 -0
- package/dist/utils/class-names.js +10 -0
- package/dist/utils/default-map.d.ts +5 -0
- package/dist/utils/default-map.js +15 -0
- package/dist/utils/disposables.d.ts +14 -12
- package/dist/utils/disposables.js +13 -10
- package/dist/utils/dom.d.ts +0 -2
- package/dist/utils/dom.js +2 -4
- package/dist/utils/env.d.ts +17 -0
- package/dist/utils/env.js +39 -0
- package/dist/utils/focus-management.d.ts +45 -0
- package/dist/utils/focus-management.js +242 -0
- package/dist/utils/focusVisible.svelte.d.ts +3 -3
- package/dist/utils/focusVisible.svelte.js +52 -41
- package/dist/utils/get-text-value.d.ts +1 -0
- package/dist/utils/get-text-value.js +71 -0
- package/dist/utils/id.d.ts +2 -2
- package/dist/utils/id.js +1 -1
- package/dist/utils/match.d.ts +1 -0
- package/dist/utils/match.js +13 -0
- package/dist/utils/on-document-ready.d.ts +1 -0
- package/dist/utils/on-document-ready.js +12 -0
- package/dist/utils/once.d.ts +1 -0
- package/dist/utils/once.js +9 -0
- package/dist/utils/owner.d.ts +1 -0
- package/dist/utils/owner.js +8 -0
- package/dist/utils/platform.d.ts +2 -0
- package/dist/utils/platform.js +17 -0
- package/dist/utils/ref.svelte.d.ts +4 -0
- package/dist/utils/ref.svelte.js +4 -0
- package/dist/utils/render.d.ts +34 -0
- package/dist/utils/render.js +119 -0
- package/dist/utils/state.d.ts +7 -1
- package/dist/utils/state.js +10 -6
- package/dist/utils/store.d.ts +11 -0
- package/dist/utils/store.js +20 -0
- package/dist/utils/types.d.ts +24 -0
- package/dist/utils/types.js +1 -0
- package/package.json +37 -29
- package/dist/actions/activePress.svelte.d.ts +0 -8
- package/dist/actions/focusRing.svelte.d.ts +0 -9
- package/dist/actions/focusRing.svelte.js +0 -34
- package/dist/utils/disabled.d.ts +0 -3
- package/dist/utils/disabled.js +0 -2
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
<script lang="ts" module>import { sortByDomNode } from "../utils/focus-management.js";
|
|
2
|
+
import { match } from "../utils/match.js";
|
|
3
|
+
import FocusSentinel from "../internal/FocusSentinel.svelte";
|
|
4
|
+
import { setContext, getContext, untrack } from "svelte";
|
|
5
|
+
const DEFAULT_TABS_TAG = "div";
|
|
6
|
+
export function useData(component) {
|
|
7
|
+
const context = getContext("TabsData");
|
|
8
|
+
if (!context) {
|
|
9
|
+
let err = new Error(`<${component} /> is missing a parent <Tab.Group /> component.`);
|
|
10
|
+
if (Error.captureStackTrace) Error.captureStackTrace(err, useData);
|
|
11
|
+
throw err;
|
|
12
|
+
}
|
|
13
|
+
return context;
|
|
14
|
+
}
|
|
15
|
+
export function useActions(component) {
|
|
16
|
+
const context = getContext("TabsActions");
|
|
17
|
+
if (!context) {
|
|
18
|
+
const err = new Error(`<${component} /> is missing a parent <Tab.Group /> component.`);
|
|
19
|
+
if (Error.captureStackTrace) Error.captureStackTrace(err, useActions);
|
|
20
|
+
throw err;
|
|
21
|
+
}
|
|
22
|
+
return context;
|
|
23
|
+
}
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_TABS_TAG">import StableCollection from "../utils/StableCollection.svelte";
|
|
27
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
28
|
+
var Direction = /* @__PURE__ */ ((Direction2) => {
|
|
29
|
+
Direction2[Direction2["Forwards"] = 0] = "Forwards";
|
|
30
|
+
Direction2[Direction2["Backwards"] = 1] = "Backwards";
|
|
31
|
+
return Direction2;
|
|
32
|
+
})(Direction || {});
|
|
33
|
+
var Ordering = /* @__PURE__ */ ((Ordering2) => {
|
|
34
|
+
Ordering2[Ordering2["Less"] = -1] = "Less";
|
|
35
|
+
Ordering2[Ordering2["Equal"] = 0] = "Equal";
|
|
36
|
+
Ordering2[Ordering2["Greater"] = 1] = "Greater";
|
|
37
|
+
return Ordering2;
|
|
38
|
+
})(Ordering || {});
|
|
39
|
+
const stateReducer = (initialState) => {
|
|
40
|
+
let _state2 = $state(initialState);
|
|
41
|
+
return {
|
|
42
|
+
get info() {
|
|
43
|
+
return _state2.info;
|
|
44
|
+
},
|
|
45
|
+
get selectedIndex() {
|
|
46
|
+
return _state2.selectedIndex;
|
|
47
|
+
},
|
|
48
|
+
get tabs() {
|
|
49
|
+
return _state2.tabs;
|
|
50
|
+
},
|
|
51
|
+
get panels() {
|
|
52
|
+
return _state2.panels;
|
|
53
|
+
},
|
|
54
|
+
setSelectedIndex(index) {
|
|
55
|
+
if (index === _state2.selectedIndex) return _state2;
|
|
56
|
+
let tabs = sortByDomNode(_state2.tabs, (tab) => tab.current ?? null);
|
|
57
|
+
let panels = sortByDomNode(_state2.panels, (panel) => panel.current ?? null);
|
|
58
|
+
let focusableTabs = tabs.filter((tab) => !tab?.current?.hasAttribute("disabled"));
|
|
59
|
+
let nextState = { ..._state2, tabs, panels };
|
|
60
|
+
if (
|
|
61
|
+
// Underflow
|
|
62
|
+
index < 0 || // Overflow
|
|
63
|
+
index > tabs.length - 1
|
|
64
|
+
) {
|
|
65
|
+
let direction = match(Math.sign(index - _state2.selectedIndex), {
|
|
66
|
+
[-1 /* Less */]: () => 1 /* Backwards */,
|
|
67
|
+
[0 /* Equal */]: () => {
|
|
68
|
+
return match(Math.sign(index), {
|
|
69
|
+
[-1 /* Less */]: () => 0 /* Forwards */,
|
|
70
|
+
[0 /* Equal */]: () => 0 /* Forwards */,
|
|
71
|
+
[1 /* Greater */]: () => 1 /* Backwards */
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
[1 /* Greater */]: () => 0 /* Forwards */
|
|
75
|
+
});
|
|
76
|
+
if (focusableTabs.length === 0) {
|
|
77
|
+
_state2 = nextState;
|
|
78
|
+
return _state2;
|
|
79
|
+
}
|
|
80
|
+
let nextSelectedIndex = match(direction, {
|
|
81
|
+
[0 /* Forwards */]: () => tabs.findIndex((tab) => tab === focusableTabs[0]),
|
|
82
|
+
[1 /* Backwards */]: () => tabs.findIndex((tab) => tab === focusableTabs[focusableTabs.length - 1])
|
|
83
|
+
});
|
|
84
|
+
_state2 = {
|
|
85
|
+
...nextState,
|
|
86
|
+
selectedIndex: nextSelectedIndex === -1 ? _state2.selectedIndex : nextSelectedIndex
|
|
87
|
+
};
|
|
88
|
+
return _state2;
|
|
89
|
+
}
|
|
90
|
+
let before = tabs.slice(0, index);
|
|
91
|
+
let after = tabs.slice(index);
|
|
92
|
+
let next = [...after, ...before].find((tab) => focusableTabs.some((_tab) => _tab === tab));
|
|
93
|
+
if (!next) {
|
|
94
|
+
_state2 = nextState;
|
|
95
|
+
return _state2;
|
|
96
|
+
}
|
|
97
|
+
let selectedIndex2 = tabs.findIndex((tab) => tab === next) ?? _state2.selectedIndex;
|
|
98
|
+
if (selectedIndex2 === -1) selectedIndex2 = _state2.selectedIndex;
|
|
99
|
+
_state2 = { ...nextState, selectedIndex: selectedIndex2 };
|
|
100
|
+
return _state2;
|
|
101
|
+
},
|
|
102
|
+
registerTab(tab) {
|
|
103
|
+
if (_state2.tabs.some((_tab) => _tab === tab)) return _state2;
|
|
104
|
+
_state2.tabs = sortByDomNode([..._state2.tabs, tab], (tab2) => tab2.current ?? null);
|
|
105
|
+
let activeTab = _state2.tabs[_state2.selectedIndex];
|
|
106
|
+
if (!_state2.info.isControlled) {
|
|
107
|
+
const selectedIndex2 = _state2.tabs.findIndex((tab2) => tab2 === activeTab);
|
|
108
|
+
if (selectedIndex2 !== _state2.selectedIndex) _state2.selectedIndex = selectedIndex2;
|
|
109
|
+
}
|
|
110
|
+
return _state2;
|
|
111
|
+
},
|
|
112
|
+
unregisterTab(tab) {
|
|
113
|
+
_state2.tabs = _state2.tabs.filter((_tab) => _tab !== tab);
|
|
114
|
+
return _state2;
|
|
115
|
+
},
|
|
116
|
+
registerPanel(panel) {
|
|
117
|
+
if (_state2.panels.some((_panel) => _panel === panel)) return _state2;
|
|
118
|
+
_state2.panels = sortByDomNode([..._state2.panels, panel], (panel2) => panel2.current ?? null);
|
|
119
|
+
return _state2;
|
|
120
|
+
},
|
|
121
|
+
unregisterPanel(panel) {
|
|
122
|
+
_state2.panels = _state2.panels.filter((_panel) => _panel !== panel);
|
|
123
|
+
return _state2;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
let {
|
|
128
|
+
ref = $bindable(),
|
|
129
|
+
defaultIndex = 0,
|
|
130
|
+
vertical = false,
|
|
131
|
+
manual = false,
|
|
132
|
+
onchange,
|
|
133
|
+
selectedIndex = void 0,
|
|
134
|
+
...theirProps
|
|
135
|
+
} = $props();
|
|
136
|
+
const orientation = $derived(vertical ? "vertical" : "horizontal");
|
|
137
|
+
const activation = $derived(manual ? "manual" : "auto");
|
|
138
|
+
const isControlled = $derived(selectedIndex !== void 0);
|
|
139
|
+
const _state = stateReducer({
|
|
140
|
+
info: { isControlled: selectedIndex !== void 0 },
|
|
141
|
+
selectedIndex: selectedIndex ?? defaultIndex,
|
|
142
|
+
tabs: [],
|
|
143
|
+
panels: []
|
|
144
|
+
});
|
|
145
|
+
$effect(() => {
|
|
146
|
+
untrack(() => _state.info).isControlled = isControlled;
|
|
147
|
+
});
|
|
148
|
+
const slot = $derived({
|
|
149
|
+
selectedIndex: _state.selectedIndex
|
|
150
|
+
});
|
|
151
|
+
const stableTabs = $derived(_state.tabs);
|
|
152
|
+
const tabsData = {
|
|
153
|
+
get orientation() {
|
|
154
|
+
return orientation;
|
|
155
|
+
},
|
|
156
|
+
get activation() {
|
|
157
|
+
return activation;
|
|
158
|
+
},
|
|
159
|
+
get info() {
|
|
160
|
+
return _state.info;
|
|
161
|
+
},
|
|
162
|
+
get selectedIndex() {
|
|
163
|
+
return _state.selectedIndex;
|
|
164
|
+
},
|
|
165
|
+
get tabs() {
|
|
166
|
+
return _state.tabs;
|
|
167
|
+
},
|
|
168
|
+
get panels() {
|
|
169
|
+
return _state.panels;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
const realSelectedIndex = $derived(isControlled ? selectedIndex : _state.selectedIndex);
|
|
173
|
+
const registerTab = (tab) => {
|
|
174
|
+
_state.registerTab(tab);
|
|
175
|
+
return () => _state.unregisterTab(tab);
|
|
176
|
+
};
|
|
177
|
+
const registerPanel = (panel) => {
|
|
178
|
+
_state.registerPanel(panel);
|
|
179
|
+
return () => _state.unregisterPanel(panel);
|
|
180
|
+
};
|
|
181
|
+
const change = (index) => {
|
|
182
|
+
if (realSelectedIndex !== index) {
|
|
183
|
+
onchange?.(index);
|
|
184
|
+
}
|
|
185
|
+
if (!isControlled) {
|
|
186
|
+
_state.setSelectedIndex(index);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
setContext("TabsActions", { registerTab, registerPanel, change });
|
|
190
|
+
setContext("TabsData", {
|
|
191
|
+
get orientation() {
|
|
192
|
+
return orientation;
|
|
193
|
+
},
|
|
194
|
+
get activation() {
|
|
195
|
+
return activation;
|
|
196
|
+
},
|
|
197
|
+
get info() {
|
|
198
|
+
return _state.info;
|
|
199
|
+
},
|
|
200
|
+
get selectedIndex() {
|
|
201
|
+
return _state.selectedIndex;
|
|
202
|
+
},
|
|
203
|
+
get tabs() {
|
|
204
|
+
return _state.tabs;
|
|
205
|
+
},
|
|
206
|
+
get panels() {
|
|
207
|
+
return _state.panels;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
$effect(() => {
|
|
211
|
+
const newSelectedIndex = selectedIndex ?? defaultIndex;
|
|
212
|
+
untrack(() => _state.setSelectedIndex(newSelectedIndex));
|
|
213
|
+
});
|
|
214
|
+
$effect(() => {
|
|
215
|
+
if (realSelectedIndex === void 0) return;
|
|
216
|
+
if (_state.tabs.length <= 0) return;
|
|
217
|
+
let sorted = sortByDomNode(_state.tabs, (tab) => tab.current ?? null);
|
|
218
|
+
let didOrderChange = sorted.some((tab, i) => _state.tabs[i] !== tab);
|
|
219
|
+
if (didOrderChange) {
|
|
220
|
+
change(sorted.findIndex((tab) => tab === _state.tabs[realSelectedIndex]));
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
</script>
|
|
224
|
+
|
|
225
|
+
<StableCollection>
|
|
226
|
+
{#if tabsData.tabs.length <= 0}
|
|
227
|
+
<FocusSentinel
|
|
228
|
+
onfocus={() => {
|
|
229
|
+
for (let tab of stableTabs) {
|
|
230
|
+
if (tab?.current?.tabIndex === 0) {
|
|
231
|
+
tab?.current?.focus()
|
|
232
|
+
return true
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return false
|
|
237
|
+
}}
|
|
238
|
+
/>
|
|
239
|
+
{/if}
|
|
240
|
+
<ElementOrComponent {theirProps} defaultTag={DEFAULT_TABS_TAG} name="TabGroup" bind:ref />
|
|
241
|
+
</StableCollection>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ElementType, Props } from "../utils/types.js";
|
|
2
|
+
declare const DEFAULT_TABS_TAG: "div";
|
|
3
|
+
type TabsRenderPropArg = {
|
|
4
|
+
selectedIndex: number;
|
|
5
|
+
};
|
|
6
|
+
type TabsPropsWeControl = never;
|
|
7
|
+
export type TabGroupProps<TTag extends ElementType = typeof DEFAULT_TABS_TAG> = Props<TTag, TabsRenderPropArg, TabsPropsWeControl, {
|
|
8
|
+
defaultIndex?: number;
|
|
9
|
+
onchange?: (index: number) => void;
|
|
10
|
+
selectedIndex?: number;
|
|
11
|
+
vertical?: boolean;
|
|
12
|
+
manual?: boolean;
|
|
13
|
+
}>;
|
|
14
|
+
interface StateDefinition {
|
|
15
|
+
info: {
|
|
16
|
+
isControlled: boolean;
|
|
17
|
+
};
|
|
18
|
+
selectedIndex: number;
|
|
19
|
+
tabs: MutableRefObject<HTMLElement | undefined>[];
|
|
20
|
+
panels: MutableRefObject<HTMLElement | undefined>[];
|
|
21
|
+
}
|
|
22
|
+
type TabsDataContext = StateDefinition & {
|
|
23
|
+
orientation: "horizontal" | "vertical";
|
|
24
|
+
activation: "manual" | "auto";
|
|
25
|
+
};
|
|
26
|
+
export declare function useData(component: string): TabsDataContext;
|
|
27
|
+
type TabsActionsContext = {
|
|
28
|
+
registerTab: (tab: MutableRefObject<HTMLElement | undefined>) => () => void;
|
|
29
|
+
registerPanel: (panel: MutableRefObject<HTMLElement | undefined>) => () => void;
|
|
30
|
+
change: (index: number) => void;
|
|
31
|
+
};
|
|
32
|
+
export declare function useActions(component: string): TabsActionsContext;
|
|
33
|
+
import type { MutableRefObject } from "../utils/ref.svelte.js";
|
|
34
|
+
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_TABS_TAG> {
|
|
35
|
+
props(): {
|
|
36
|
+
as?: TTag | undefined;
|
|
37
|
+
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "onchange" | "vertical" | "defaultIndex" | "selectedIndex" | "manual"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
38
|
+
children?: import("../utils/types.js").Children<TabsRenderPropArg> | undefined;
|
|
39
|
+
ref?: HTMLElement;
|
|
40
|
+
} & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
41
|
+
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: TabsRenderPropArg) => string) | undefined;
|
|
42
|
+
} : {}) & {
|
|
43
|
+
defaultIndex?: number;
|
|
44
|
+
onchange?: (index: number) => void;
|
|
45
|
+
selectedIndex?: number;
|
|
46
|
+
vertical?: boolean;
|
|
47
|
+
manual?: boolean;
|
|
48
|
+
};
|
|
49
|
+
events(): {} & {
|
|
50
|
+
[evt: string]: CustomEvent<any>;
|
|
51
|
+
};
|
|
52
|
+
slots(): {};
|
|
53
|
+
bindings(): "ref";
|
|
54
|
+
exports(): {};
|
|
55
|
+
}
|
|
56
|
+
interface $$IsomorphicComponent {
|
|
57
|
+
new <TTag extends ElementType = typeof DEFAULT_TABS_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
|
|
58
|
+
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
59
|
+
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
60
|
+
<TTag extends ElementType = typeof DEFAULT_TABS_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
61
|
+
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
62
|
+
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
63
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
64
|
+
}
|
|
65
|
+
declare const TabGroup: $$IsomorphicComponent;
|
|
66
|
+
type TabGroup<TTag extends ElementType = typeof DEFAULT_TABS_TAG> = InstanceType<typeof TabGroup<TTag>>;
|
|
67
|
+
export default TabGroup;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script lang="ts" module>const DEFAULT_LIST_TAG = "div";
|
|
2
|
+
</script>
|
|
3
|
+
|
|
4
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_LIST_TAG">import { useData } from "./TabGroup.svelte";
|
|
5
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
6
|
+
const data = useData("Tab.List");
|
|
7
|
+
const { orientation, selectedIndex } = $derived(data);
|
|
8
|
+
const slot = $derived({ selectedIndex });
|
|
9
|
+
let { ref = $bindable(), ...theirProps } = $props();
|
|
10
|
+
const ourProps = $derived({
|
|
11
|
+
role: "tablist",
|
|
12
|
+
"aria-orientation": orientation
|
|
13
|
+
});
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_LIST_TAG} name="TabList" bind:ref />
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ElementType, Props } from "../utils/types.js";
|
|
2
|
+
declare const DEFAULT_LIST_TAG: "div";
|
|
3
|
+
type ListRenderPropArg = {
|
|
4
|
+
selectedIndex: number;
|
|
5
|
+
};
|
|
6
|
+
type ListPropsWeControl = "aria-orientation" | "role";
|
|
7
|
+
export type TabListProps<TTag extends ElementType = typeof DEFAULT_LIST_TAG> = Props<TTag, ListRenderPropArg, ListPropsWeControl, {}>;
|
|
8
|
+
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_LIST_TAG> {
|
|
9
|
+
props(): {
|
|
10
|
+
as?: TTag | undefined;
|
|
11
|
+
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | ListPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
12
|
+
children?: import("../utils/types.js").Children<ListRenderPropArg> | undefined;
|
|
13
|
+
ref?: HTMLElement;
|
|
14
|
+
} & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
15
|
+
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: ListRenderPropArg) => string) | undefined;
|
|
16
|
+
} : {});
|
|
17
|
+
events(): {} & {
|
|
18
|
+
[evt: string]: CustomEvent<any>;
|
|
19
|
+
};
|
|
20
|
+
slots(): {};
|
|
21
|
+
bindings(): "ref";
|
|
22
|
+
exports(): {};
|
|
23
|
+
}
|
|
24
|
+
interface $$IsomorphicComponent {
|
|
25
|
+
new <TTag extends ElementType = typeof DEFAULT_LIST_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
|
|
26
|
+
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
27
|
+
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
28
|
+
<TTag extends ElementType = typeof DEFAULT_LIST_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
29
|
+
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
30
|
+
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
31
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
32
|
+
}
|
|
33
|
+
declare const TabList: $$IsomorphicComponent;
|
|
34
|
+
type TabList<TTag extends ElementType = typeof DEFAULT_LIST_TAG> = InstanceType<typeof TabList<TTag>>;
|
|
35
|
+
export default TabList;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<script lang="ts" module>const DEFAULT_PANEL_TAG = "div";
|
|
2
|
+
const PanelRenderFeatures = RenderFeatures.RenderStrategy | RenderFeatures.Static;
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_PANEL_TAG">import { useId } from "../hooks/use-id.js";
|
|
6
|
+
import { mergeProps, RenderFeatures } from "../utils/render.js";
|
|
7
|
+
import { useActions, useData } from "./TabGroup.svelte";
|
|
8
|
+
import { useStableCollectionIndex } from "../utils/StableCollection.svelte";
|
|
9
|
+
import { useFocusRing } from "../hooks/use-focus-ring.svelte.js";
|
|
10
|
+
import Hidden from "../internal/Hidden.svelte";
|
|
11
|
+
import { onMount } from "svelte";
|
|
12
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
13
|
+
const internalId = useId();
|
|
14
|
+
let {
|
|
15
|
+
ref = $bindable(),
|
|
16
|
+
id = `headlessui-tabs-panel-${internalId}`,
|
|
17
|
+
tabIndex = 0,
|
|
18
|
+
...theirProps
|
|
19
|
+
} = $props();
|
|
20
|
+
const data = useData("Tab.Panel");
|
|
21
|
+
const { selectedIndex, tabs, panels } = $derived(data);
|
|
22
|
+
const actions = useActions("Tab.Panel");
|
|
23
|
+
const panelRef = $derived({ current: ref });
|
|
24
|
+
onMount(() => actions.registerPanel(panelRef));
|
|
25
|
+
const mySSRIndex = useStableCollectionIndex("panels");
|
|
26
|
+
const myIndex = $derived.by(() => {
|
|
27
|
+
const index = tabs.findIndex((panel) => panel === panelRef);
|
|
28
|
+
return index === -1 ? mySSRIndex : index;
|
|
29
|
+
});
|
|
30
|
+
const selected = $derived(myIndex === selectedIndex);
|
|
31
|
+
const { isFocusVisible: focus, focusProps } = $derived(useFocusRing());
|
|
32
|
+
const slot = $derived({
|
|
33
|
+
selected,
|
|
34
|
+
focus
|
|
35
|
+
});
|
|
36
|
+
const ourProps = $derived(
|
|
37
|
+
mergeProps(
|
|
38
|
+
{
|
|
39
|
+
id,
|
|
40
|
+
role: "tabpanel",
|
|
41
|
+
"aria-labelledby": tabs[myIndex]?.current?.id,
|
|
42
|
+
tabIndex: selected ? 0 : -1
|
|
43
|
+
},
|
|
44
|
+
focusProps
|
|
45
|
+
)
|
|
46
|
+
);
|
|
47
|
+
</script>
|
|
48
|
+
|
|
49
|
+
{#if !selected && (theirProps.unmount ?? true) && !(theirProps.static ?? false)}
|
|
50
|
+
<Hidden aria-hidden="true" {...ourProps} bind:ref />
|
|
51
|
+
{:else}
|
|
52
|
+
<ElementOrComponent
|
|
53
|
+
{ourProps}
|
|
54
|
+
{theirProps}
|
|
55
|
+
{slot}
|
|
56
|
+
defaultTag={DEFAULT_PANEL_TAG}
|
|
57
|
+
features={PanelRenderFeatures}
|
|
58
|
+
name="TabPanel"
|
|
59
|
+
bind:ref
|
|
60
|
+
/>
|
|
61
|
+
{/if}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ElementType, Props } from "../utils/types.js";
|
|
2
|
+
declare const DEFAULT_PANEL_TAG: "div";
|
|
3
|
+
type PanelRenderPropArg = {
|
|
4
|
+
selected: boolean;
|
|
5
|
+
focus: boolean;
|
|
6
|
+
};
|
|
7
|
+
type PanelPropsWeControl = "role" | "aria-labelledby";
|
|
8
|
+
declare const PanelRenderFeatures: number;
|
|
9
|
+
export type TabPanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = Props<TTag, PanelRenderPropArg, PanelPropsWeControl, PropsForFeatures<typeof PanelRenderFeatures> & {
|
|
10
|
+
id?: string;
|
|
11
|
+
tabIndex?: number;
|
|
12
|
+
}>;
|
|
13
|
+
import { type PropsForFeatures } from "../utils/render.js";
|
|
14
|
+
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> {
|
|
15
|
+
props(): {
|
|
16
|
+
as?: TTag | undefined;
|
|
17
|
+
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "unmount" | "static" | "id" | "tabIndex" | PanelPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
18
|
+
children?: import("../utils/types.js").Children<PanelRenderPropArg> | undefined;
|
|
19
|
+
ref?: HTMLElement;
|
|
20
|
+
} & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
21
|
+
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: PanelRenderPropArg) => string) | undefined;
|
|
22
|
+
} : {}) & {
|
|
23
|
+
static?: boolean | undefined;
|
|
24
|
+
unmount?: boolean | undefined;
|
|
25
|
+
} & {
|
|
26
|
+
id?: string;
|
|
27
|
+
tabIndex?: number;
|
|
28
|
+
};
|
|
29
|
+
events(): {} & {
|
|
30
|
+
[evt: string]: CustomEvent<any>;
|
|
31
|
+
};
|
|
32
|
+
slots(): {};
|
|
33
|
+
bindings(): "ref";
|
|
34
|
+
exports(): {};
|
|
35
|
+
}
|
|
36
|
+
interface $$IsomorphicComponent {
|
|
37
|
+
new <TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
|
|
38
|
+
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
39
|
+
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
40
|
+
<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
41
|
+
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
42
|
+
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
43
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
44
|
+
}
|
|
45
|
+
declare const TabPanel: $$IsomorphicComponent;
|
|
46
|
+
type TabPanel<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = InstanceType<typeof TabPanel<TTag>>;
|
|
47
|
+
export default TabPanel;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<script lang="ts" module>import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
2
|
+
import { useData } from "./TabGroup.svelte";
|
|
3
|
+
let DEFAULT_PANELS_TAG = "div";
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_PANELS_TAG">const data = useData("Tab.Panels");
|
|
7
|
+
const { selectedIndex } = $derived(data);
|
|
8
|
+
const slot = $derived({ selectedIndex });
|
|
9
|
+
let { ref = $bindable(), ...theirProps } = $props();
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<ElementOrComponent {theirProps} {slot} defaultTag={DEFAULT_PANELS_TAG} name="TabPanel" bind:ref />
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ElementType, Props } from "../utils/types.js";
|
|
2
|
+
declare let DEFAULT_PANELS_TAG: "div";
|
|
3
|
+
type PanelsRenderPropArg = {
|
|
4
|
+
selectedIndex: number;
|
|
5
|
+
};
|
|
6
|
+
export type TabPanelsProps<TTag extends ElementType = typeof DEFAULT_PANELS_TAG> = Props<TTag, PanelsRenderPropArg>;
|
|
7
|
+
declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_PANELS_TAG> {
|
|
8
|
+
props(): {
|
|
9
|
+
as?: TTag | undefined;
|
|
10
|
+
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, "as" | "children" | "refName" | "class"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
11
|
+
children?: import("../utils/types.js").Children<PanelsRenderPropArg> | undefined;
|
|
12
|
+
ref?: HTMLElement;
|
|
13
|
+
} & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
14
|
+
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: PanelsRenderPropArg) => string) | undefined;
|
|
15
|
+
} : {});
|
|
16
|
+
events(): {} & {
|
|
17
|
+
[evt: string]: CustomEvent<any>;
|
|
18
|
+
};
|
|
19
|
+
slots(): {};
|
|
20
|
+
bindings(): "ref";
|
|
21
|
+
exports(): {};
|
|
22
|
+
}
|
|
23
|
+
interface $$IsomorphicComponent {
|
|
24
|
+
new <TTag extends ElementType = typeof DEFAULT_PANELS_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
|
|
25
|
+
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
26
|
+
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
27
|
+
<TTag extends ElementType = typeof DEFAULT_PANELS_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
28
|
+
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
29
|
+
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
30
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
31
|
+
}
|
|
32
|
+
declare const TabPanels: $$IsomorphicComponent;
|
|
33
|
+
type TabPanels<TTag extends ElementType = typeof DEFAULT_PANELS_TAG> = InstanceType<typeof TabPanels<TTag>>;
|
|
34
|
+
export default TabPanels;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as Tab, type TabProps } from "./Tab.svelte";
|
|
2
|
+
export { default as TabGroup, type TabGroupProps } from "./TabGroup.svelte";
|
|
3
|
+
export { default as TabList, type TabListProps } from "./TabList.svelte";
|
|
4
|
+
export { default as TabPanel, type TabPanelProps } from "./TabPanel.svelte";
|
|
5
|
+
export { default as TabPanels, type TabPanelsProps } from "./TabPanels.svelte";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as Tab } from "./Tab.svelte";
|
|
2
|
+
export { default as TabGroup } from "./TabGroup.svelte";
|
|
3
|
+
export { default as TabList } from "./TabList.svelte";
|
|
4
|
+
export { default as TabPanel } from "./TabPanel.svelte";
|
|
5
|
+
export { default as TabPanels } from "./TabPanels.svelte";
|