@proyecto-viviana/solidaria-components 0.3.2 → 0.4.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/dist/ActionBar.js +184 -0
- package/dist/ActionBar.js.map +1 -0
- package/dist/ActionBar.jsx +128 -0
- package/dist/ActionBar.jsx.map +1 -0
- package/dist/ActionGroup.js +179 -0
- package/dist/ActionGroup.js.map +1 -0
- package/dist/ActionGroup.jsx +129 -0
- package/dist/ActionGroup.jsx.map +1 -0
- package/dist/Alert.js +111 -0
- package/dist/Alert.js.map +1 -0
- package/dist/Alert.jsx +82 -0
- package/dist/Alert.jsx.map +1 -0
- package/dist/Autocomplete.js +130 -0
- package/dist/Autocomplete.js.map +1 -0
- package/dist/Autocomplete.jsx +116 -0
- package/dist/Autocomplete.jsx.map +1 -0
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Breadcrumbs.js +334 -0
- package/dist/Breadcrumbs.js.map +1 -0
- package/dist/Breadcrumbs.jsx +266 -0
- package/dist/Breadcrumbs.jsx.map +1 -0
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +348 -0
- package/dist/Button.js.map +1 -0
- package/dist/Button.jsx +314 -0
- package/dist/Button.jsx.map +1 -0
- package/dist/Calendar.d.ts +4 -4
- package/dist/Calendar.d.ts.map +1 -1
- package/dist/Calendar.js +538 -0
- package/dist/Calendar.js.map +1 -0
- package/dist/Calendar.jsx +333 -0
- package/dist/Calendar.jsx.map +1 -0
- package/dist/CalendarPicker.d.ts +33 -0
- package/dist/CalendarPicker.d.ts.map +1 -0
- package/dist/CalendarPicker.js +44 -0
- package/dist/CalendarPicker.js.map +1 -0
- package/dist/CalendarPicker.jsx +44 -0
- package/dist/CalendarPicker.jsx.map +1 -0
- package/dist/Checkbox.d.ts +83 -4
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Checkbox.js +923 -0
- package/dist/Checkbox.js.map +1 -0
- package/dist/Checkbox.jsx +707 -0
- package/dist/Checkbox.jsx.map +1 -0
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +202 -0
- package/dist/Collection.js.map +1 -0
- package/dist/Collection.jsx +152 -0
- package/dist/Collection.jsx.map +1 -0
- package/dist/Color.d.ts.map +1 -1
- package/dist/Color.js +1720 -0
- package/dist/Color.js.map +1 -0
- package/dist/Color.jsx +1344 -0
- package/dist/Color.jsx.map +1 -0
- package/dist/ColorEditor.js +208 -0
- package/dist/ColorEditor.js.map +1 -0
- package/dist/ColorEditor.jsx +120 -0
- package/dist/ColorEditor.jsx.map +1 -0
- package/dist/ComboBox.d.ts +4 -4
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +992 -0
- package/dist/ComboBox.js.map +1 -0
- package/dist/ComboBox.jsx +714 -0
- package/dist/ComboBox.jsx.map +1 -0
- package/dist/ContextualHelpTrigger.js +146 -0
- package/dist/ContextualHelpTrigger.js.map +1 -0
- package/dist/ContextualHelpTrigger.jsx +109 -0
- package/dist/ContextualHelpTrigger.jsx.map +1 -0
- package/dist/DateField.d.ts +3 -3
- package/dist/DateField.d.ts.map +1 -1
- package/dist/DateField.js +4 -0
- package/dist/DateField.jsx +4 -0
- package/dist/DateField2.js +499 -0
- package/dist/DateField2.js.map +1 -0
- package/dist/DateField2.jsx +317 -0
- package/dist/DateField2.jsx.map +1 -0
- package/dist/DatePicker.d.ts +4 -4
- package/dist/DatePicker.d.ts.map +1 -1
- package/dist/DatePicker.js +991 -0
- package/dist/DatePicker.js.map +1 -0
- package/dist/DatePicker.jsx +682 -0
- package/dist/DatePicker.jsx.map +1 -0
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Dialog.js +337 -0
- package/dist/Dialog.js.map +1 -0
- package/dist/Dialog.jsx +192 -0
- package/dist/Dialog.jsx.map +1 -0
- package/dist/Disclosure.d.ts.map +1 -1
- package/dist/Disclosure.js +328 -0
- package/dist/Disclosure.js.map +1 -0
- package/dist/Disclosure.jsx +230 -0
- package/dist/Disclosure.jsx.map +1 -0
- package/dist/DragAndDrop.d.ts.map +1 -1
- package/dist/DragAndDrop.js +176 -0
- package/dist/DragAndDrop.js.map +1 -0
- package/dist/DragAndDrop.jsx +160 -0
- package/dist/DragAndDrop.jsx.map +1 -0
- package/dist/DropZone.d.ts.map +1 -1
- package/dist/DropZone.js +189 -0
- package/dist/DropZone.js.map +1 -0
- package/dist/DropZone.jsx +144 -0
- package/dist/DropZone.jsx.map +1 -0
- package/dist/FieldError.js +66 -0
- package/dist/FieldError.js.map +1 -0
- package/dist/FieldError.jsx +47 -0
- package/dist/FieldError.jsx.map +1 -0
- package/dist/FileTrigger.js +79 -0
- package/dist/FileTrigger.js.map +1 -0
- package/dist/FileTrigger.jsx +49 -0
- package/dist/FileTrigger.jsx.map +1 -0
- package/dist/Focusable.js +70 -0
- package/dist/Focusable.js.map +1 -0
- package/dist/Focusable.jsx +69 -0
- package/dist/Focusable.jsx.map +1 -0
- package/dist/Form.js +99 -0
- package/dist/Form.js.map +1 -0
- package/dist/Form.jsx +73 -0
- package/dist/Form.jsx.map +1 -0
- package/dist/GridList.d.ts +34 -2
- package/dist/GridList.d.ts.map +1 -1
- package/dist/GridList.js +723 -0
- package/dist/GridList.js.map +1 -0
- package/dist/GridList.jsx +552 -0
- package/dist/GridList.jsx.map +1 -0
- package/dist/HiddenTimeInput.js +104 -0
- package/dist/HiddenTimeInput.js.map +1 -0
- package/dist/HiddenTimeInput.jsx +69 -0
- package/dist/HiddenTimeInput.jsx.map +1 -0
- package/dist/Icon.d.ts.map +1 -1
- package/dist/Icon.js +127 -0
- package/dist/Icon.js.map +1 -0
- package/dist/Icon.jsx +72 -0
- package/dist/Icon.jsx.map +1 -0
- package/dist/Keyboard.js +30 -0
- package/dist/Keyboard.js.map +1 -0
- package/dist/Keyboard.jsx +24 -0
- package/dist/Keyboard.jsx.map +1 -0
- package/dist/Landmark.js +134 -0
- package/dist/Landmark.js.map +1 -0
- package/dist/Landmark.jsx +118 -0
- package/dist/Landmark.jsx.map +1 -0
- package/dist/Link.d.ts.map +1 -1
- package/dist/Link.js +219 -0
- package/dist/Link.js.map +1 -0
- package/dist/Link.jsx +189 -0
- package/dist/Link.jsx.map +1 -0
- package/dist/ListBox.d.ts.map +1 -1
- package/dist/ListBox.js +670 -0
- package/dist/ListBox.js.map +1 -0
- package/dist/ListBox.jsx +508 -0
- package/dist/ListBox.jsx.map +1 -0
- package/dist/Menu.d.ts +27 -9
- package/dist/Menu.d.ts.map +1 -1
- package/dist/Menu.js +1254 -0
- package/dist/Menu.js.map +1 -0
- package/dist/Menu.jsx +1042 -0
- package/dist/Menu.jsx.map +1 -0
- package/dist/Meter.d.ts.map +1 -1
- package/dist/Meter.js +123 -0
- package/dist/Meter.js.map +1 -0
- package/dist/Meter.jsx +107 -0
- package/dist/Meter.jsx.map +1 -0
- package/dist/Modal.d.ts.map +1 -1
- package/dist/Modal.js +380 -0
- package/dist/Modal.js.map +1 -0
- package/dist/Modal.jsx +314 -0
- package/dist/Modal.jsx.map +1 -0
- package/dist/NumberField.d.ts +3 -3
- package/dist/NumberField.d.ts.map +1 -1
- package/dist/NumberField.js +573 -0
- package/dist/NumberField.js.map +1 -0
- package/dist/NumberField.jsx +443 -0
- package/dist/NumberField.jsx.map +1 -0
- package/dist/Popover.d.ts +10 -2
- package/dist/Popover.d.ts.map +1 -1
- package/dist/Popover.js +464 -0
- package/dist/Popover.js.map +1 -0
- package/dist/Popover.jsx +333 -0
- package/dist/Popover.jsx.map +1 -0
- package/dist/Pressable.js +69 -0
- package/dist/Pressable.js.map +1 -0
- package/dist/Pressable.jsx +68 -0
- package/dist/Pressable.jsx.map +1 -0
- package/dist/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar.js +130 -0
- package/dist/ProgressBar.js.map +1 -0
- package/dist/ProgressBar.jsx +114 -0
- package/dist/ProgressBar.jsx.map +1 -0
- package/dist/RadioGroup.d.ts +82 -4
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +931 -0
- package/dist/RadioGroup.js.map +1 -0
- package/dist/RadioGroup.jsx +681 -0
- package/dist/RadioGroup.jsx.map +1 -0
- package/dist/RangeCalendar.d.ts.map +1 -1
- package/dist/RangeCalendar.js +410 -0
- package/dist/RangeCalendar.js.map +1 -0
- package/dist/RangeCalendar.jsx +253 -0
- package/dist/RangeCalendar.jsx.map +1 -0
- package/dist/RouterProvider.js +118 -0
- package/dist/RouterProvider.js.map +1 -0
- package/dist/RouterProvider.jsx +112 -0
- package/dist/RouterProvider.jsx.map +1 -0
- package/dist/SearchField.d.ts +2 -2
- package/dist/SearchField.d.ts.map +1 -1
- package/dist/SearchField.js +643 -0
- package/dist/SearchField.js.map +1 -0
- package/dist/SearchField.jsx +526 -0
- package/dist/SearchField.jsx.map +1 -0
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +1031 -0
- package/dist/Select.js.map +1 -0
- package/dist/Select.jsx +744 -0
- package/dist/Select.jsx.map +1 -0
- package/dist/SelectionIndicator.d.ts.map +1 -1
- package/dist/SelectionIndicator.js +86 -0
- package/dist/SelectionIndicator.js.map +1 -0
- package/dist/SelectionIndicator.jsx +50 -0
- package/dist/SelectionIndicator.jsx.map +1 -0
- package/dist/Separator.js +97 -0
- package/dist/Separator.js.map +1 -0
- package/dist/Separator.jsx +85 -0
- package/dist/Separator.jsx.map +1 -0
- package/dist/SharedElementTransition.d.ts.map +1 -1
- package/dist/SharedElementTransition.js +165 -0
- package/dist/SharedElementTransition.js.map +1 -0
- package/dist/SharedElementTransition.jsx +138 -0
- package/dist/SharedElementTransition.jsx.map +1 -0
- package/dist/Slider.d.ts +33 -1
- package/dist/Slider.d.ts.map +1 -1
- package/dist/Slider.js +515 -0
- package/dist/Slider.js.map +1 -0
- package/dist/Slider.jsx +403 -0
- package/dist/Slider.jsx.map +1 -0
- package/dist/StepList.js +198 -0
- package/dist/StepList.js.map +1 -0
- package/dist/StepList.jsx +141 -0
- package/dist/StepList.jsx.map +1 -0
- package/dist/Switch.d.ts +65 -2
- package/dist/Switch.d.ts.map +1 -1
- package/dist/Switch.js +534 -0
- package/dist/Switch.js.map +1 -0
- package/dist/Switch.jsx +393 -0
- package/dist/Switch.jsx.map +1 -0
- package/dist/Table.d.ts +48 -0
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +1759 -0
- package/dist/Table.js.map +1 -0
- package/dist/Table.jsx +1348 -0
- package/dist/Table.jsx.map +1 -0
- package/dist/Tabs.d.ts +0 -4
- package/dist/Tabs.d.ts.map +1 -1
- package/dist/Tabs.js +595 -0
- package/dist/Tabs.js.map +1 -0
- package/dist/Tabs.jsx +367 -0
- package/dist/Tabs.jsx.map +1 -0
- package/dist/TagGroup.d.ts.map +1 -1
- package/dist/TagGroup.js +378 -0
- package/dist/TagGroup.js.map +1 -0
- package/dist/TagGroup.jsx +270 -0
- package/dist/TagGroup.jsx.map +1 -0
- package/dist/Text.d.ts +18 -6
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +42 -0
- package/dist/Text.js.map +1 -0
- package/dist/Text.jsx +35 -0
- package/dist/Text.jsx.map +1 -0
- package/dist/TextField.d.ts +6 -6
- package/dist/TextField.d.ts.map +1 -1
- package/dist/TextField.js +436 -0
- package/dist/TextField.js.map +1 -0
- package/dist/TextField.jsx +403 -0
- package/dist/TextField.jsx.map +1 -0
- package/dist/TimeField.d.ts +3 -3
- package/dist/TimeField.d.ts.map +1 -1
- package/dist/TimeField.js +372 -0
- package/dist/TimeField.js.map +1 -0
- package/dist/TimeField.jsx +224 -0
- package/dist/TimeField.jsx.map +1 -0
- package/dist/Toast.d.ts +14 -0
- package/dist/Toast.d.ts.map +1 -1
- package/dist/Toast.js +551 -0
- package/dist/Toast.js.map +1 -0
- package/dist/Toast.jsx +361 -0
- package/dist/Toast.jsx.map +1 -0
- package/dist/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton.js +123 -0
- package/dist/ToggleButton.js.map +1 -0
- package/dist/ToggleButton.jsx +88 -0
- package/dist/ToggleButton.jsx.map +1 -0
- package/dist/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButtonGroup.js +114 -0
- package/dist/ToggleButtonGroup.js.map +1 -0
- package/dist/ToggleButtonGroup.jsx +85 -0
- package/dist/ToggleButtonGroup.jsx.map +1 -0
- package/dist/Toolbar.js +112 -0
- package/dist/Toolbar.js.map +1 -0
- package/dist/Toolbar.jsx +92 -0
- package/dist/Toolbar.jsx.map +1 -0
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip.js +539 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/Tooltip.jsx +465 -0
- package/dist/Tooltip.jsx.map +1 -0
- package/dist/Tree.d.ts +14 -2
- package/dist/Tree.d.ts.map +1 -1
- package/dist/Tree.js +1424 -0
- package/dist/Tree.js.map +1 -0
- package/dist/Tree.jsx +1172 -0
- package/dist/Tree.jsx.map +1 -0
- package/dist/Virtualizer.d.ts +16 -2
- package/dist/Virtualizer.d.ts.map +1 -1
- package/dist/Virtualizer.js +2 -0
- package/dist/Virtualizer.jsx +2 -0
- package/dist/Virtualizer2.js +751 -0
- package/dist/Virtualizer2.js.map +1 -0
- package/dist/Virtualizer2.jsx +730 -0
- package/dist/Virtualizer2.jsx.map +1 -0
- package/dist/VirtualizerLayouts.d.ts +18 -0
- package/dist/VirtualizerLayouts.d.ts.map +1 -1
- package/dist/VisuallyHidden.js +42 -0
- package/dist/VisuallyHidden.js.map +1 -0
- package/dist/VisuallyHidden.jsx +35 -0
- package/dist/VisuallyHidden.jsx.map +1 -0
- package/dist/contexts.js +33 -0
- package/dist/contexts.js.map +1 -0
- package/dist/contexts.jsx +33 -0
- package/dist/contexts.jsx.map +1 -0
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -23932
- package/dist/index.jsx +70 -18337
- package/dist/useDragAndDrop.js +2 -0
- package/dist/useDragAndDrop.jsx +2 -0
- package/dist/useDragAndDrop2.js +395 -0
- package/dist/useDragAndDrop2.js.map +1 -0
- package/dist/useDragAndDrop2.jsx +395 -0
- package/dist/useDragAndDrop2.jsx.map +1 -0
- package/dist/utils.d.ts +83 -11
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +285 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.jsx +277 -0
- package/dist/utils.jsx.map +1 -0
- package/dist/virtualizer/Layout.js +144 -0
- package/dist/virtualizer/Layout.js.map +1 -0
- package/dist/virtualizer/Layout.jsx +144 -0
- package/dist/virtualizer/Layout.jsx.map +1 -0
- package/package.json +401 -4
- package/src/Breadcrumbs.tsx +3 -1
- package/src/Button.tsx +22 -2
- package/src/Calendar.tsx +27 -10
- package/src/CalendarPicker.tsx +73 -0
- package/src/Checkbox.tsx +539 -3
- package/src/Collection.tsx +9 -3
- package/src/Color.tsx +42 -14
- package/src/ComboBox.tsx +50 -6
- package/src/DateField.tsx +20 -2
- package/src/DatePicker.tsx +57 -5
- package/src/Dialog.tsx +13 -5
- package/src/Disclosure.tsx +3 -1
- package/src/DragAndDrop.tsx +3 -1
- package/src/DropZone.tsx +3 -1
- package/src/GridList.tsx +125 -24
- package/src/Icon.tsx +3 -1
- package/src/Link.tsx +3 -1
- package/src/ListBox.tsx +31 -4
- package/src/Menu.tsx +252 -128
- package/src/Meter.tsx +3 -1
- package/src/Modal.tsx +100 -52
- package/src/NumberField.tsx +51 -8
- package/src/Popover.tsx +40 -10
- package/src/ProgressBar.tsx +3 -1
- package/src/RadioGroup.tsx +468 -4
- package/src/RangeCalendar.tsx +3 -1
- package/src/SearchField.tsx +27 -3
- package/src/Select.tsx +22 -7
- package/src/SelectionIndicator.tsx +3 -1
- package/src/SharedElementTransition.tsx +3 -1
- package/src/Slider.tsx +159 -13
- package/src/Switch.tsx +395 -2
- package/src/Table.tsx +409 -95
- package/src/Tabs.tsx +16 -45
- package/src/TagGroup.tsx +3 -1
- package/src/Text.tsx +31 -10
- package/src/TextField.tsx +43 -5
- package/src/TimeField.tsx +20 -2
- package/src/Toast.tsx +79 -14
- package/src/ToggleButton.tsx +3 -1
- package/src/ToggleButtonGroup.tsx +3 -1
- package/src/Tooltip.tsx +3 -1
- package/src/Tree.tsx +77 -9
- package/src/Virtualizer.tsx +180 -31
- package/src/VirtualizerLayouts.ts +45 -10
- package/src/index.ts +50 -0
- package/src/utils.tsx +243 -27
- package/dist/index.js.map +0 -1
- package/dist/index.jsx.map +0 -1
package/dist/TagGroup.js
ADDED
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import { dataAttr, filterDOMProps, useRenderProps } from "./utils.js";
|
|
2
|
+
import { SharedElementTransition } from "./SharedElementTransition.js";
|
|
3
|
+
import { SelectionIndicatorContext } from "./SelectionIndicator.js";
|
|
4
|
+
import { className, createComponent, delegateEvents, effect, getNextElement, insert, memo, mergeProps, runHydrationEvents, setAttribute, setProperty, spread, style, template, use } from "solid-js/web";
|
|
5
|
+
import { For, Show, createContext, createMemo, createSignal, splitProps, useContext } from "solid-js";
|
|
6
|
+
import { createTag, createTagGroup } from "@proyecto-viviana/solidaria";
|
|
7
|
+
import { createListState } from "@proyecto-viviana/solid-stately";
|
|
8
|
+
//#region src/TagGroup.tsx
|
|
9
|
+
/**
|
|
10
|
+
* TagGroup component for solidaria-components
|
|
11
|
+
*
|
|
12
|
+
* Pre-wired headless tag group component that combines aria hooks.
|
|
13
|
+
* Port of react-aria-components/src/TagGroup.tsx
|
|
14
|
+
*
|
|
15
|
+
* A tag group is a focusable list of labels, categories, keywords, filters, or other items,
|
|
16
|
+
* with support for keyboard navigation, selection, and removal.
|
|
17
|
+
*/
|
|
18
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div>`), _tmpl$2 = /*#__PURE__*/ template(`<div><div>`), _tmpl$3 = /*#__PURE__*/ template(`<button type=button>`);
|
|
19
|
+
const TagGroupContext = createContext(null);
|
|
20
|
+
const TagListStateContext = createContext(null);
|
|
21
|
+
const TagContext = createContext(null);
|
|
22
|
+
function useTagGroupContext() {
|
|
23
|
+
return useContext(TagGroupContext);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A tag group is a focusable list of labels, categories, keywords, filters, or other items,
|
|
27
|
+
* with support for keyboard navigation, selection, and removal.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* <TagGroup label="Categories" onRemove={(keys) => removeItems(keys)}>
|
|
32
|
+
* <TagList items={items}>
|
|
33
|
+
* {(item) => <Tag id={item.id}>{item.name}</Tag>}
|
|
34
|
+
* </TagList>
|
|
35
|
+
* </TagGroup>
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
function TagGroup(props) {
|
|
39
|
+
const [local, domProps] = splitProps(props, [
|
|
40
|
+
"class",
|
|
41
|
+
"style",
|
|
42
|
+
"slot",
|
|
43
|
+
"children"
|
|
44
|
+
]);
|
|
45
|
+
return (() => {
|
|
46
|
+
var _el$ = getNextElement(_tmpl$);
|
|
47
|
+
spread(_el$, mergeProps(domProps, {
|
|
48
|
+
get ["class"]() {
|
|
49
|
+
return memo(() => typeof local.class === "string")() ? local.class : "solidaria-TagGroup";
|
|
50
|
+
},
|
|
51
|
+
get style() {
|
|
52
|
+
return memo(() => typeof local.style === "object")() ? local.style : void 0;
|
|
53
|
+
},
|
|
54
|
+
get slot() {
|
|
55
|
+
return local.slot;
|
|
56
|
+
}
|
|
57
|
+
}), false, true);
|
|
58
|
+
insert(_el$, () => props.children);
|
|
59
|
+
runHydrationEvents();
|
|
60
|
+
return _el$;
|
|
61
|
+
})();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* TagList contains the list of tags within a TagGroup.
|
|
65
|
+
*/
|
|
66
|
+
function TagList(props) {
|
|
67
|
+
const [local, domProps] = splitProps(props, [
|
|
68
|
+
"items",
|
|
69
|
+
"class",
|
|
70
|
+
"style",
|
|
71
|
+
"slot",
|
|
72
|
+
"renderEmptyState",
|
|
73
|
+
"children",
|
|
74
|
+
"selectionMode",
|
|
75
|
+
"selectionBehavior",
|
|
76
|
+
"selectedKeys",
|
|
77
|
+
"defaultSelectedKeys",
|
|
78
|
+
"onSelectionChange",
|
|
79
|
+
"disabledKeys",
|
|
80
|
+
"getKey",
|
|
81
|
+
"label",
|
|
82
|
+
"aria-label",
|
|
83
|
+
"aria-labelledby",
|
|
84
|
+
"aria-describedby",
|
|
85
|
+
"isDisabled",
|
|
86
|
+
"onRemove"
|
|
87
|
+
]);
|
|
88
|
+
const [gridRef, setGridRef] = createSignal(null);
|
|
89
|
+
const getKey = (item) => {
|
|
90
|
+
if (local.getKey) return local.getKey(item);
|
|
91
|
+
if (item.id !== void 0) return item.id;
|
|
92
|
+
if (item.key !== void 0) return item.key;
|
|
93
|
+
return String(item);
|
|
94
|
+
};
|
|
95
|
+
const state = createListState({
|
|
96
|
+
get items() {
|
|
97
|
+
return local.items;
|
|
98
|
+
},
|
|
99
|
+
getKey,
|
|
100
|
+
get selectionMode() {
|
|
101
|
+
return local.selectionMode ?? "none";
|
|
102
|
+
},
|
|
103
|
+
get selectionBehavior() {
|
|
104
|
+
return local.selectionBehavior ?? "toggle";
|
|
105
|
+
},
|
|
106
|
+
get selectedKeys() {
|
|
107
|
+
return local.selectedKeys;
|
|
108
|
+
},
|
|
109
|
+
get defaultSelectedKeys() {
|
|
110
|
+
return local.defaultSelectedKeys;
|
|
111
|
+
},
|
|
112
|
+
get onSelectionChange() {
|
|
113
|
+
return local.onSelectionChange;
|
|
114
|
+
},
|
|
115
|
+
get disabledKeys() {
|
|
116
|
+
return local.disabledKeys;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
const tagGroupAria = createTagGroup({
|
|
120
|
+
get "aria-label"() {
|
|
121
|
+
return local["aria-label"] ?? (!local["aria-labelledby"] ? local.label : void 0);
|
|
122
|
+
},
|
|
123
|
+
get "aria-labelledby"() {
|
|
124
|
+
return local["aria-labelledby"];
|
|
125
|
+
},
|
|
126
|
+
get "aria-describedby"() {
|
|
127
|
+
return local["aria-describedby"];
|
|
128
|
+
},
|
|
129
|
+
get isDisabled() {
|
|
130
|
+
return local.isDisabled;
|
|
131
|
+
},
|
|
132
|
+
get onRemove() {
|
|
133
|
+
return local.onRemove;
|
|
134
|
+
}
|
|
135
|
+
}, state, gridRef);
|
|
136
|
+
const [isFocused, setIsFocused] = createSignal(false);
|
|
137
|
+
const renderValues = createMemo(() => ({
|
|
138
|
+
isEmpty: local.items.length === 0,
|
|
139
|
+
isFocused: isFocused()
|
|
140
|
+
}));
|
|
141
|
+
const renderProps = useRenderProps({
|
|
142
|
+
class: local.class,
|
|
143
|
+
style: local.style,
|
|
144
|
+
defaultClassName: "solidaria-TagList"
|
|
145
|
+
}, renderValues);
|
|
146
|
+
const contextValue = {
|
|
147
|
+
state,
|
|
148
|
+
get onRemove() {
|
|
149
|
+
return local.onRemove;
|
|
150
|
+
},
|
|
151
|
+
get isDisabled() {
|
|
152
|
+
return local.isDisabled;
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
return createComponent(TagGroupContext.Provider, {
|
|
156
|
+
value: contextValue,
|
|
157
|
+
get children() {
|
|
158
|
+
return createComponent(TagListStateContext.Provider, {
|
|
159
|
+
value: state,
|
|
160
|
+
get children() {
|
|
161
|
+
var _el$2 = getNextElement(_tmpl$);
|
|
162
|
+
use(setGridRef, _el$2);
|
|
163
|
+
spread(_el$2, mergeProps(domProps, () => tagGroupAria.gridProps, {
|
|
164
|
+
get ["class"]() {
|
|
165
|
+
return renderProps.class();
|
|
166
|
+
},
|
|
167
|
+
get style() {
|
|
168
|
+
return renderProps.style();
|
|
169
|
+
},
|
|
170
|
+
"onFocus": () => {
|
|
171
|
+
setIsFocused(true);
|
|
172
|
+
state.setFocused(true);
|
|
173
|
+
},
|
|
174
|
+
"onBlur": (e) => {
|
|
175
|
+
const nextTarget = e.relatedTarget;
|
|
176
|
+
if (nextTarget && e.currentTarget.contains(nextTarget)) return;
|
|
177
|
+
setIsFocused(false);
|
|
178
|
+
state.setFocused(false);
|
|
179
|
+
},
|
|
180
|
+
get ["data-empty"]() {
|
|
181
|
+
return dataAttr(local.items.length === 0);
|
|
182
|
+
},
|
|
183
|
+
get ["data-focused"]() {
|
|
184
|
+
return dataAttr(isFocused());
|
|
185
|
+
}
|
|
186
|
+
}), false, true);
|
|
187
|
+
insert(_el$2, createComponent(SharedElementTransition, { get children() {
|
|
188
|
+
return createComponent(Show, {
|
|
189
|
+
get when() {
|
|
190
|
+
return local.items.length > 0;
|
|
191
|
+
},
|
|
192
|
+
get fallback() {
|
|
193
|
+
return local.renderEmptyState?.();
|
|
194
|
+
},
|
|
195
|
+
get children() {
|
|
196
|
+
return createComponent(For, {
|
|
197
|
+
get each() {
|
|
198
|
+
return local.items;
|
|
199
|
+
},
|
|
200
|
+
children: (item) => props.children(item)
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
} }));
|
|
205
|
+
runHydrationEvents();
|
|
206
|
+
return _el$2;
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* A Tag is an individual item within a TagList.
|
|
214
|
+
*/
|
|
215
|
+
function Tag(props) {
|
|
216
|
+
const [local, rest] = splitProps(props, [
|
|
217
|
+
"id",
|
|
218
|
+
"class",
|
|
219
|
+
"style",
|
|
220
|
+
"slot",
|
|
221
|
+
"isDisabled",
|
|
222
|
+
"textValue",
|
|
223
|
+
"onAction"
|
|
224
|
+
]);
|
|
225
|
+
const state = useContext(TagListStateContext);
|
|
226
|
+
const groupContext = useContext(TagGroupContext);
|
|
227
|
+
const [tagRef, setTagRef] = createSignal(null);
|
|
228
|
+
const tagAria = createTag({
|
|
229
|
+
get key() {
|
|
230
|
+
return local.id;
|
|
231
|
+
},
|
|
232
|
+
role: "row",
|
|
233
|
+
get isDisabled() {
|
|
234
|
+
return local.isDisabled || groupContext?.isDisabled;
|
|
235
|
+
},
|
|
236
|
+
get textValue() {
|
|
237
|
+
return local.textValue;
|
|
238
|
+
}
|
|
239
|
+
}, state, tagRef);
|
|
240
|
+
const normalizedRemoveButtonProps = createMemo(() => {
|
|
241
|
+
const raw = tagAria.removeButtonProps;
|
|
242
|
+
const rawHandler = typeof raw.onPress === "function" ? raw.onPress : void 0;
|
|
243
|
+
return {
|
|
244
|
+
...raw,
|
|
245
|
+
onPress: () => {
|
|
246
|
+
if (!tagAria.isDisabled && groupContext?.onRemove) {
|
|
247
|
+
groupContext.onRemove(new Set([local.id]));
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
rawHandler?.();
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
});
|
|
254
|
+
const renderValues = createMemo(() => ({
|
|
255
|
+
isSelected: tagAria.isSelected,
|
|
256
|
+
isDisabled: tagAria.isDisabled,
|
|
257
|
+
isFocused: tagAria.isFocused,
|
|
258
|
+
isPressed: tagAria.isPressed,
|
|
259
|
+
allowsRemoving: tagAria.allowsRemoving,
|
|
260
|
+
selectionMode: state?.selectionMode() ?? "none",
|
|
261
|
+
removeButtonProps: normalizedRemoveButtonProps()
|
|
262
|
+
}));
|
|
263
|
+
const renderProps = useRenderProps({
|
|
264
|
+
get children() {
|
|
265
|
+
return props.children;
|
|
266
|
+
},
|
|
267
|
+
class: local.class,
|
|
268
|
+
style: local.style,
|
|
269
|
+
defaultClassName: "solidaria-Tag"
|
|
270
|
+
}, renderValues);
|
|
271
|
+
const selectionIndicatorContext = createMemo(() => ({ isSelected: () => tagAria.isSelected }));
|
|
272
|
+
const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
|
|
273
|
+
return createComponent(SelectionIndicatorContext.Provider, {
|
|
274
|
+
get value() {
|
|
275
|
+
return selectionIndicatorContext();
|
|
276
|
+
},
|
|
277
|
+
get children() {
|
|
278
|
+
return createComponent(TagContext.Provider, {
|
|
279
|
+
value: {
|
|
280
|
+
get removeButtonProps() {
|
|
281
|
+
return normalizedRemoveButtonProps();
|
|
282
|
+
},
|
|
283
|
+
get allowsRemoving() {
|
|
284
|
+
return tagAria.allowsRemoving;
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
get children() {
|
|
288
|
+
var _el$3 = getNextElement(_tmpl$2), _el$4 = _el$3.firstChild;
|
|
289
|
+
use(setTagRef, _el$3);
|
|
290
|
+
spread(_el$3, mergeProps(domProps, () => tagAria.rowProps, {
|
|
291
|
+
get ["class"]() {
|
|
292
|
+
return renderProps.class();
|
|
293
|
+
},
|
|
294
|
+
get style() {
|
|
295
|
+
return renderProps.style();
|
|
296
|
+
},
|
|
297
|
+
"onClick": (event) => {
|
|
298
|
+
const rowClick = tagAria.rowProps.onClick;
|
|
299
|
+
if (typeof rowClick === "function") rowClick(event);
|
|
300
|
+
if (!tagAria.isDisabled && !event.target?.closest("button")) local.onAction?.(local.id);
|
|
301
|
+
},
|
|
302
|
+
get ["data-selected"]() {
|
|
303
|
+
return dataAttr(tagAria.isSelected);
|
|
304
|
+
},
|
|
305
|
+
get ["data-disabled"]() {
|
|
306
|
+
return dataAttr(tagAria.isDisabled);
|
|
307
|
+
},
|
|
308
|
+
get ["data-focused"]() {
|
|
309
|
+
return dataAttr(tagAria.isFocused);
|
|
310
|
+
},
|
|
311
|
+
get ["data-pressed"]() {
|
|
312
|
+
return dataAttr(tagAria.isPressed);
|
|
313
|
+
},
|
|
314
|
+
get ["data-allows-removing"]() {
|
|
315
|
+
return dataAttr(tagAria.allowsRemoving);
|
|
316
|
+
}
|
|
317
|
+
}), false, true);
|
|
318
|
+
spread(_el$4, mergeProps(() => tagAria.gridCellProps, { "style": { display: "contents" } }), false, true);
|
|
319
|
+
insert(_el$4, () => renderProps.renderChildren());
|
|
320
|
+
runHydrationEvents();
|
|
321
|
+
return _el$3;
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* TagRemoveButton is the button used to remove a tag.
|
|
329
|
+
* It should be placed inside a Tag component.
|
|
330
|
+
*/
|
|
331
|
+
function TagRemoveButton(props) {
|
|
332
|
+
const tagContext = useContext(TagContext);
|
|
333
|
+
const getRemoveButtonProps = () => props.buttonProps ?? tagContext?.removeButtonProps ?? {};
|
|
334
|
+
const getIsDisabled = () => Boolean(getRemoveButtonProps().isDisabled);
|
|
335
|
+
const rawId = getRemoveButtonProps().id;
|
|
336
|
+
const rawAriaLabel = getRemoveButtonProps()["aria-label"];
|
|
337
|
+
const rawAriaLabelledBy = getRemoveButtonProps()["aria-labelledby"];
|
|
338
|
+
const buttonId = typeof rawId === "string" ? rawId : void 0;
|
|
339
|
+
const ariaLabel = typeof rawAriaLabel === "string" ? rawAriaLabel : "Remove";
|
|
340
|
+
const ariaLabelledBy = typeof rawAriaLabelledBy === "string" ? rawAriaLabelledBy : void 0;
|
|
341
|
+
const handleClick = (event) => {
|
|
342
|
+
event.stopPropagation();
|
|
343
|
+
const handler = getRemoveButtonProps().onPress;
|
|
344
|
+
if (typeof handler === "function" && !getIsDisabled()) handler();
|
|
345
|
+
};
|
|
346
|
+
const stopRowPress = (event) => {
|
|
347
|
+
event.stopPropagation();
|
|
348
|
+
};
|
|
349
|
+
return (() => {
|
|
350
|
+
var _el$5 = getNextElement(_tmpl$3);
|
|
351
|
+
_el$5.$$click = handleClick;
|
|
352
|
+
_el$5.$$pointerdown = stopRowPress;
|
|
353
|
+
setAttribute(_el$5, "id", buttonId);
|
|
354
|
+
setAttribute(_el$5, "aria-label", ariaLabel);
|
|
355
|
+
setAttribute(_el$5, "aria-labelledby", ariaLabelledBy);
|
|
356
|
+
insert(_el$5, () => props.children ?? "×");
|
|
357
|
+
effect((_p$) => {
|
|
358
|
+
var _v$ = props.class ?? "solidaria-TagRemoveButton", _v$2 = props.style, _v$3 = getIsDisabled(), _v$4 = dataAttr(tagContext?.allowsRemoving ?? false);
|
|
359
|
+
_v$ !== _p$.e && className(_el$5, _p$.e = _v$);
|
|
360
|
+
_p$.t = style(_el$5, _v$2, _p$.t);
|
|
361
|
+
_v$3 !== _p$.a && setProperty(_el$5, "disabled", _p$.a = _v$3);
|
|
362
|
+
_v$4 !== _p$.o && setAttribute(_el$5, "data-allows-removing", _p$.o = _v$4);
|
|
363
|
+
return _p$;
|
|
364
|
+
}, {
|
|
365
|
+
e: void 0,
|
|
366
|
+
t: void 0,
|
|
367
|
+
a: void 0,
|
|
368
|
+
o: void 0
|
|
369
|
+
});
|
|
370
|
+
runHydrationEvents();
|
|
371
|
+
return _el$5;
|
|
372
|
+
})();
|
|
373
|
+
}
|
|
374
|
+
delegateEvents(["pointerdown", "click"]);
|
|
375
|
+
//#endregion
|
|
376
|
+
export { Tag, TagContext, TagGroup, TagGroupContext, TagList, TagListStateContext, TagRemoveButton, useTagGroupContext };
|
|
377
|
+
|
|
378
|
+
//# sourceMappingURL=TagGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TagGroup.js","names":["JSX","createContext","createMemo","createSignal","splitProps","useContext","For","Show","createTagGroup","createTag","AriaTagGroupProps","createListState","ListState","Key","SelectionMode","SelectionBehavior","RenderChildren","ClassNameOrFunction","StyleOrFunction","SlotProps","useRenderProps","filterDOMProps","dataAttr","SharedElementTransition","SelectionIndicatorContext","SelectionIndicatorContextValue","TagGroupRenderProps","isDisabled","isEmpty","TagGroupProps","Omit","HTMLAttributes","HTMLDivElement","children","Element","class","style","TagListRenderProps","isFocused","TagListProps","items","T","item","renderEmptyState","selectionMode","selectionBehavior","selectedKeys","Iterable","defaultSelectedKeys","onSelectionChange","keys","Set","disabledKeys","getKey","label","onRemove","TagRenderProps","isSelected","isPressed","allowsRemoving","removeButtonProps","Record","TagProps","id","textValue","onAction","key","TagGroupContextValue","state","TagContextValue","TagGroupContext","TagListStateContext","TagContext","useTagGroupContext","TagGroup","props","local","domProps","_el$","_$getNextElement","_tmpl$","_$spread","_$mergeProps","_$memo","undefined","slot","_$insert","_$runHydrationEvents","TagList","gridRef","setGridRef","String","tagGroupAria","aria-label","aria-labelledby","aria-describedby","setIsFocused","renderValues","length","renderProps","defaultClassName","contextValue","_$createComponent","Provider","value","_el$2","_$use","gridProps","onFocus","setFocused","e","nextTarget","relatedTarget","Node","currentTarget","contains","data-empty","data-focused","when","fallback","each","Tag","rest","groupContext","tagRef","setTagRef","tagAria","role","normalizedRemoveButtonProps","raw","rawHandler","onPress","selectionIndicatorContext","global","_el$3","_tmpl$2","_el$4","firstChild","rowProps","event","rowClick","onClick","EventHandler","MouseEvent","target","closest","data-selected","data-disabled","data-pressed","data-allows-removing","gridCellProps","display","renderChildren","TagRemoveButtonProps","CSSProperties","buttonProps","TagRemoveButton","tagContext","getRemoveButtonProps","getIsDisabled","Boolean","rawId","rawAriaLabel","rawAriaLabelledBy","buttonId","ariaLabel","ariaLabelledBy","handleClick","HTMLButtonElement","stopPropagation","handler","stopRowPress","PointerEvent","_el$5","_tmpl$3","$$click","$$pointerdown","_$setAttribute","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_$className","t","_$style","a","_$setProperty","o","_$delegateEvents"],"sources":["../src/TagGroup.tsx"],"sourcesContent":["/**\n * TagGroup component for solidaria-components\n *\n * Pre-wired headless tag group component that combines aria hooks.\n * Port of react-aria-components/src/TagGroup.tsx\n *\n * A tag group is a focusable list of labels, categories, keywords, filters, or other items,\n * with support for keyboard navigation, selection, and removal.\n */\n\nimport {\n type JSX,\n createContext,\n createMemo,\n createSignal,\n splitProps,\n useContext,\n For,\n Show,\n} from \"solid-js\";\nimport { createTagGroup, createTag, type AriaTagGroupProps } from \"@proyecto-viviana/solidaria\";\nimport {\n createListState,\n type ListState,\n type Key,\n type SelectionMode,\n type SelectionBehavior,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n} from \"./utils\";\nimport { SharedElementTransition } from \"./SharedElementTransition\";\nimport {\n SelectionIndicatorContext,\n type SelectionIndicatorContextValue,\n} from \"./SelectionIndicator\";\n\nexport interface TagGroupRenderProps {\n /** Whether the tag group is disabled. */\n isDisabled: boolean;\n /** Whether the tag list is empty. */\n isEmpty: boolean;\n}\n\nexport interface TagGroupProps\n extends\n Omit<AriaTagGroupProps, \"id\">,\n SlotProps,\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"class\" | \"style\" | \"children\"> {\n /** The children of the component. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TagGroupRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TagGroupRenderProps>;\n}\n\nexport interface TagListRenderProps {\n /** Whether the tag list is empty. */\n isEmpty: boolean;\n /** Whether the tag list is focused. */\n isFocused: boolean;\n}\n\nexport interface TagListProps<T>\n extends\n SlotProps,\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"class\" | \"style\" | \"children\" | \"onSelectionChange\"> {\n /** The items to display in the tag list. */\n items: T[];\n /** Function to render each item. */\n children: (item: T) => JSX.Element;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TagListRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TagListRenderProps>;\n /** Content to render when the list is empty. */\n renderEmptyState?: () => JSX.Element;\n /** The selection mode for the tag list. */\n selectionMode?: SelectionMode;\n /** How selection behaves in the collection. */\n selectionBehavior?: SelectionBehavior;\n /** The currently selected keys (controlled). */\n selectedKeys?: Iterable<Key>;\n /** The default selected keys (uncontrolled). */\n defaultSelectedKeys?: Iterable<Key>;\n /** Handler called when selection changes. */\n onSelectionChange?: (keys: \"all\" | Set<Key>) => void;\n /** Keys that are disabled. */\n disabledKeys?: Iterable<Key>;\n /** Function to get a unique key from an item. */\n getKey?: (item: T) => Key;\n /** Accessibility label. */\n label?: string;\n /** Custom aria-label. */\n \"aria-label\"?: string;\n /** Reference to external label element. */\n \"aria-labelledby\"?: string;\n /** Reference to description element. */\n \"aria-describedby\"?: string;\n /** Whether the tag list is disabled. */\n isDisabled?: boolean;\n /** Handler called when tags are removed. */\n onRemove?: (keys: Set<Key>) => void;\n}\n\nexport interface TagRenderProps {\n /** Whether the tag is selected. */\n isSelected: boolean;\n /** Whether the tag is disabled. */\n isDisabled: boolean;\n /** Whether the tag is focused. */\n isFocused: boolean;\n /** Whether the tag is pressed. */\n isPressed: boolean;\n /** Whether the tag allows removal. */\n allowsRemoving: boolean;\n /** The selection mode. */\n selectionMode: SelectionMode;\n /** Props for the remove button when removal is allowed. */\n removeButtonProps: Record<string, unknown>;\n}\n\nexport interface TagProps extends SlotProps {\n /** A unique key for this tag. */\n id: Key;\n /** Whether the tag is disabled. */\n isDisabled?: boolean;\n /** A text value for accessibility. */\n textValue?: string;\n /** The children of the component. A function may be provided to receive render props. */\n children?: RenderChildren<TagRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TagRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TagRenderProps>;\n /** Handler called when the tag is activated. */\n onAction?: (key: Key) => void;\n}\n\ninterface TagGroupContextValue {\n state: ListState;\n onRemove?: (keys: Set<Key>) => void;\n isDisabled?: boolean;\n}\n\ninterface TagContextValue {\n removeButtonProps: Record<string, unknown>;\n allowsRemoving: boolean;\n}\n\nexport const TagGroupContext = createContext<TagGroupContextValue | null>(null);\nexport const TagListStateContext = createContext<ListState | null>(null);\nexport const TagContext = createContext<TagContextValue | null>(null);\n\nexport function useTagGroupContext(): TagGroupContextValue | null {\n return useContext(TagGroupContext);\n}\n\n/**\n * A tag group is a focusable list of labels, categories, keywords, filters, or other items,\n * with support for keyboard navigation, selection, and removal.\n *\n * @example\n * ```tsx\n * <TagGroup label=\"Categories\" onRemove={(keys) => removeItems(keys)}>\n * <TagList items={items}>\n * {(item) => <Tag id={item.id}>{item.name}</Tag>}\n * </TagList>\n * </TagGroup>\n * ```\n */\nexport function TagGroup(props: TagGroupProps): JSX.Element {\n const [local, domProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"children\"]);\n\n // We need TagList to provide the state, so TagGroup just provides context\n return (\n <div\n {...domProps}\n class={typeof local.class === \"string\" ? local.class : \"solidaria-TagGroup\"}\n style={typeof local.style === \"object\" ? local.style : undefined}\n slot={local.slot}\n >\n {props.children}\n </div>\n );\n}\n\n/**\n * TagList contains the list of tags within a TagGroup.\n */\nexport function TagList<T extends { id?: Key; key?: Key }>(props: TagListProps<T>): JSX.Element {\n const [local, domProps] = splitProps(props, [\n \"items\",\n \"class\",\n \"style\",\n \"slot\",\n \"renderEmptyState\",\n \"children\",\n \"selectionMode\",\n \"selectionBehavior\",\n \"selectedKeys\",\n \"defaultSelectedKeys\",\n \"onSelectionChange\",\n \"disabledKeys\",\n \"getKey\",\n \"label\",\n \"aria-label\",\n \"aria-labelledby\",\n \"aria-describedby\",\n \"isDisabled\",\n \"onRemove\",\n ]);\n\n // Create a ref for the grid\n const [gridRef, setGridRef] = createSignal<HTMLDivElement | null>(null);\n\n // Default getKey function\n const getKey = (item: T): Key => {\n if (local.getKey) return local.getKey(item);\n if (item.id !== undefined) return item.id;\n if (item.key !== undefined) return item.key;\n return String(item);\n };\n\n const state = createListState({\n get items() {\n return local.items;\n },\n getKey,\n get selectionMode() {\n return local.selectionMode ?? \"none\";\n },\n get selectionBehavior() {\n return local.selectionBehavior ?? \"toggle\";\n },\n get selectedKeys() {\n return local.selectedKeys;\n },\n get defaultSelectedKeys() {\n return local.defaultSelectedKeys;\n },\n get onSelectionChange() {\n return local.onSelectionChange;\n },\n get disabledKeys() {\n return local.disabledKeys;\n },\n });\n\n // Create tag group accessibility props\n const tagGroupAria = createTagGroup(\n {\n get \"aria-label\"() {\n return local[\"aria-label\"] ?? (!local[\"aria-labelledby\"] ? local.label : undefined);\n },\n get \"aria-labelledby\"() {\n return local[\"aria-labelledby\"];\n },\n get \"aria-describedby\"() {\n return local[\"aria-describedby\"];\n },\n get isDisabled() {\n return local.isDisabled;\n },\n get onRemove() {\n return local.onRemove;\n },\n },\n state,\n gridRef,\n );\n\n const [isFocused, setIsFocused] = createSignal(false);\n\n const renderValues = createMemo<TagListRenderProps>(() => ({\n isEmpty: local.items.length === 0,\n isFocused: isFocused(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-TagList\",\n },\n renderValues,\n );\n\n const contextValue: TagGroupContextValue = {\n state,\n get onRemove() {\n return local.onRemove;\n },\n get isDisabled() {\n return local.isDisabled;\n },\n };\n\n return (\n <TagGroupContext.Provider value={contextValue}>\n <TagListStateContext.Provider value={state}>\n <div\n ref={setGridRef}\n {...domProps}\n {...tagGroupAria.gridProps}\n class={renderProps.class()}\n style={renderProps.style()}\n onFocus={() => {\n setIsFocused(true);\n state.setFocused(true);\n }}\n onBlur={(e) => {\n const nextTarget = e.relatedTarget as Node | null;\n if (nextTarget && e.currentTarget.contains(nextTarget)) {\n return;\n }\n\n setIsFocused(false);\n state.setFocused(false);\n }}\n data-empty={dataAttr(local.items.length === 0)}\n data-focused={dataAttr(isFocused())}\n >\n <SharedElementTransition>\n <Show when={local.items.length > 0} fallback={local.renderEmptyState?.()}>\n <For each={local.items}>{(item) => props.children(item)}</For>\n </Show>\n </SharedElementTransition>\n </div>\n </TagListStateContext.Provider>\n </TagGroupContext.Provider>\n );\n}\n\n/**\n * A Tag is an individual item within a TagList.\n */\nexport function Tag(props: TagProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"id\",\n \"class\",\n \"style\",\n \"slot\",\n \"isDisabled\",\n \"textValue\",\n \"onAction\",\n ]);\n\n const state = useContext(TagListStateContext);\n const groupContext = useContext(TagGroupContext);\n\n // Create a ref for the tag\n const [tagRef, setTagRef] = createSignal<HTMLDivElement | null>(null);\n\n // Create tag accessibility props\n const tagAria = createTag(\n {\n get key() {\n return local.id;\n },\n role: \"row\",\n get isDisabled() {\n return local.isDisabled || groupContext?.isDisabled;\n },\n get textValue() {\n return local.textValue;\n },\n },\n state!,\n tagRef,\n );\n\n const normalizedRemoveButtonProps = createMemo<Record<string, unknown>>(() => {\n const raw = tagAria.removeButtonProps;\n const rawHandler = typeof raw.onPress === \"function\" ? (raw.onPress as () => void) : undefined;\n return {\n ...raw,\n onPress: () => {\n if (!tagAria.isDisabled && groupContext?.onRemove) {\n groupContext.onRemove(new Set([local.id]));\n return;\n }\n rawHandler?.();\n },\n };\n });\n\n const renderValues = createMemo<TagRenderProps>(() => ({\n isSelected: tagAria.isSelected,\n isDisabled: tagAria.isDisabled,\n isFocused: tagAria.isFocused,\n isPressed: tagAria.isPressed,\n allowsRemoving: tagAria.allowsRemoving,\n selectionMode: state?.selectionMode() ?? \"none\",\n removeButtonProps: normalizedRemoveButtonProps(),\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Tag\",\n },\n renderValues,\n );\n\n const selectionIndicatorContext = createMemo<SelectionIndicatorContextValue>(() => ({\n isSelected: () => tagAria.isSelected,\n }));\n\n const domProps = createMemo(() => filterDOMProps(rest, { global: true }));\n\n return (\n <SelectionIndicatorContext.Provider value={selectionIndicatorContext()}>\n <TagContext.Provider\n value={{\n get removeButtonProps() {\n return normalizedRemoveButtonProps();\n },\n get allowsRemoving() {\n return tagAria.allowsRemoving;\n },\n }}\n >\n <div\n ref={setTagRef}\n {...domProps()}\n {...tagAria.rowProps}\n class={renderProps.class()}\n style={renderProps.style()}\n onClick={(event) => {\n const rowClick = tagAria.rowProps.onClick;\n if (typeof rowClick === \"function\") {\n (rowClick as JSX.EventHandler<HTMLDivElement, MouseEvent>)(event);\n }\n\n if (!tagAria.isDisabled && !(event.target as Element | null)?.closest(\"button\")) {\n local.onAction?.(local.id);\n }\n }}\n data-selected={dataAttr(tagAria.isSelected)}\n data-disabled={dataAttr(tagAria.isDisabled)}\n data-focused={dataAttr(tagAria.isFocused)}\n data-pressed={dataAttr(tagAria.isPressed)}\n data-allows-removing={dataAttr(tagAria.allowsRemoving)}\n >\n <div {...tagAria.gridCellProps} style={{ display: \"contents\" }}>\n {renderProps.renderChildren()}\n </div>\n </div>\n </TagContext.Provider>\n </SelectionIndicatorContext.Provider>\n );\n}\n\nexport interface TagRemoveButtonProps {\n /** The children of the button (usually an X icon). */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: string;\n /** The inline style for the element. */\n style?: JSX.CSSProperties;\n /** Explicit button props from Tag render props. */\n buttonProps?: Record<string, unknown>;\n}\n\n/**\n * TagRemoveButton is the button used to remove a tag.\n * It should be placed inside a Tag component.\n */\nexport function TagRemoveButton(props: TagRemoveButtonProps): JSX.Element {\n const tagContext = useContext(TagContext);\n const getRemoveButtonProps = () => props.buttonProps ?? tagContext?.removeButtonProps ?? {};\n const getIsDisabled = () => Boolean(getRemoveButtonProps().isDisabled);\n const rawId = getRemoveButtonProps().id;\n const rawAriaLabel = getRemoveButtonProps()[\"aria-label\"];\n const rawAriaLabelledBy = getRemoveButtonProps()[\"aria-labelledby\"];\n const buttonId: string | undefined = typeof rawId === \"string\" ? rawId : undefined;\n const ariaLabel: string = typeof rawAriaLabel === \"string\" ? rawAriaLabel : \"Remove\";\n const ariaLabelledBy: string | undefined =\n typeof rawAriaLabelledBy === \"string\" ? rawAriaLabelledBy : undefined;\n\n const handleClick: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (event) => {\n event.stopPropagation();\n const handler = getRemoveButtonProps().onPress;\n if (typeof handler === \"function\" && !getIsDisabled()) {\n (handler as () => void)();\n }\n };\n const stopRowPress: JSX.EventHandler<HTMLButtonElement, PointerEvent> = (event) => {\n event.stopPropagation();\n };\n\n return (\n <button\n type=\"button\"\n class={props.class ?? \"solidaria-TagRemoveButton\"}\n style={props.style}\n id={buttonId}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n disabled={getIsDisabled()}\n data-allows-removing={dataAttr(tagContext?.allowsRemoving ?? false)}\n onPointerDown={stopRowPress}\n onClick={handleClick}\n >\n {props.children ?? \"×\"}\n </button>\n );\n}\n\nexport type { Key, SelectionMode, SelectionBehavior };\n"],"mappings":"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"}
|