@edo-w/flatline-solid 0.2.0 → 0.2.1
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/README.md +16 -0
- package/dist/src/components/button/button.css +2 -1
- package/dist/src/components/combobox/combobox-group.css +1 -0
- package/dist/src/components/combobox/combobox-input.jsx +22 -11
- package/dist/src/components/combobox/combobox-input.jsx.map +1 -1
- package/dist/src/components/combobox/combobox-item.jsx +9 -2
- package/dist/src/components/combobox/combobox-item.jsx.map +1 -1
- package/dist/src/components/combobox/combobox-listbox.css +4 -1
- package/dist/src/components/combobox/combobox-root.jsx +54 -9
- package/dist/src/components/combobox/combobox-root.jsx.map +1 -1
- package/dist/src/components/combobox/context.d.ts +2 -0
- package/dist/src/components/combobox/context.js.map +1 -1
- package/dist/src/components/dropdown-menu/dropdown-menu-trigger.css +1 -0
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
```
|
|
2
|
+
===================================================================
|
|
3
|
+
= == ======== == ======== == ========
|
|
4
|
+
= ======== ======== ======== ======== ======== ======== ====
|
|
5
|
+
= ======== ======== ======== ======== ======== ======== ====
|
|
6
|
+
= ======== ======== ======== ======== ======== ======== ====
|
|
7
|
+
= ==== ======== ==== ======== ==== ========
|
|
8
|
+
= ======== ======== ======== ======== ======== ======== ====
|
|
9
|
+
= ======== ======== ======== ======== ======== ======== ====
|
|
10
|
+
= ======== ======== ======== ======== ======== ======== ====
|
|
11
|
+
= ======== == ======== == ======== == ====
|
|
12
|
+
===================================================================
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
# flatline
|
|
16
|
+
flatline is UI library for solid JS applications
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
--fl-button-inner-gap: var(--fl-size-2);
|
|
4
4
|
--fl-button-pad-x: var(--fl-size-2);
|
|
5
5
|
--fl-button-pad-y: var(--fl-size-1-5);
|
|
6
|
+
--fl-button-active-translate-y: 1px;
|
|
6
7
|
--fl-button-bg-color: var(--fl-color-gray-100);
|
|
7
8
|
--fl-button-bg-hover-color: color-mix(in oklab, var(--fl-button-bg-color), black 5%);
|
|
8
9
|
--fl-button-bg-active-color: color-mix(in oklab, var(--fl-button-bg-color), white 10%);
|
|
@@ -56,7 +57,7 @@
|
|
|
56
57
|
/* active state */
|
|
57
58
|
.fl-button:active:not(:disabled) {
|
|
58
59
|
background: var(--fl-button-bg-active-color);
|
|
59
|
-
transform: translateY(
|
|
60
|
+
transform: translateY(var(--fl-button-active-translate-y));
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
/* disabled state */
|
|
@@ -12,7 +12,20 @@ export function ComboboxInput(props) {
|
|
|
12
12
|
if (!(event.currentTarget instanceof HTMLInputElement)) {
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
const input = event.currentTarget;
|
|
16
|
+
const nextValue = input.value;
|
|
17
|
+
const selectionStart = input.selectionStart;
|
|
18
|
+
const selectionEnd = input.selectionEnd;
|
|
19
|
+
context.setInputValue(nextValue);
|
|
20
|
+
queueMicrotask(() => {
|
|
21
|
+
if (document.activeElement !== input) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (input.value !== nextValue || selectionStart === null || selectionEnd === null) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
input.setSelectionRange(selectionStart, selectionEnd);
|
|
28
|
+
});
|
|
16
29
|
};
|
|
17
30
|
const handleFocus = (event) => {
|
|
18
31
|
callEventHandler(local.onFocus, event);
|
|
@@ -31,6 +44,10 @@ export function ComboboxInput(props) {
|
|
|
31
44
|
context.highlightNext();
|
|
32
45
|
return;
|
|
33
46
|
}
|
|
47
|
+
if (context.visibleItems().length === 0) {
|
|
48
|
+
context.openAllOptions('first');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
34
51
|
context.openPopup('preserve');
|
|
35
52
|
return;
|
|
36
53
|
}
|
|
@@ -40,19 +57,13 @@ export function ComboboxInput(props) {
|
|
|
40
57
|
context.highlightPrevious();
|
|
41
58
|
return;
|
|
42
59
|
}
|
|
60
|
+
if (context.visibleItems().length === 0) {
|
|
61
|
+
context.openAllOptions('last');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
43
64
|
context.openPopup('preserve');
|
|
44
65
|
return;
|
|
45
66
|
}
|
|
46
|
-
if (event.key === 'Home' && context.isOpen()) {
|
|
47
|
-
event.preventDefault();
|
|
48
|
-
context.highlightFirst();
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
if (event.key === 'End' && context.isOpen()) {
|
|
52
|
-
event.preventDefault();
|
|
53
|
-
context.highlightLast();
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
67
|
if (event.key === 'Enter' && context.isOpen()) {
|
|
57
68
|
const activeItem = context.visibleItems().find((item) => item.key === context.highlightedKey());
|
|
58
69
|
if (activeItem) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox-input.jsx","sourceRoot":"","sources":["../../../../src/components/combobox/combobox-input.tsx"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAY,UAAU,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,MAAM,UAAU,aAAa,CAAC,KAAyB;IACtD,MAAM,OAAO,GAAG,kBAAkB,EAAY,CAAC;IAC/C,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IACrG,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAE/D,MAAM,WAAW,GAAwD,CAAC,KAAK,EAAE,EAAE;QAClF,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEvC,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,YAAY,gBAAgB,CAAC,EAAE,CAAC;YACxD,OAAO;QACR,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"combobox-input.jsx","sourceRoot":"","sources":["../../../../src/components/combobox/combobox-input.tsx"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAY,UAAU,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,MAAM,UAAU,aAAa,CAAC,KAAyB;IACtD,MAAM,OAAO,GAAG,kBAAkB,EAAY,CAAC;IAC/C,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IACrG,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAE/D,MAAM,WAAW,GAAwD,CAAC,KAAK,EAAE,EAAE;QAClF,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEvC,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,YAAY,gBAAgB,CAAC,EAAE,CAAC;YACxD,OAAO;QACR,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9B,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAExC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEjC,cAAc,CAAC,GAAG,EAAE;YACnB,IAAI,QAAQ,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;gBACtC,OAAO;YACR,CAAC;YAED,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,cAAc,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBACnF,OAAO;YACR,CAAC;YAED,KAAK,CAAC,iBAAiB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,WAAW,GAAwD,CAAC,KAAK,EAAE,EAAE;QAClF,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEvC,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9C,OAAO;QACR,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,aAAa,GAA2D,CAAC,KAAK,EAAE,EAAE;QACvF,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAEzC,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9C,OAAO;QACR,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtB,OAAO,CAAC,aAAa,EAAE,CAAC;gBACxB,OAAO;YACR,CAAC;YAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBAChC,OAAO;YACR,CAAC;YAED,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC9B,OAAO;QACR,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,OAAO;YACR,CAAC;YAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC/B,OAAO;YACR,CAAC;YAED,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC9B,OAAO;QACR,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;YAEhG,IAAI,UAAU,EAAE,CAAC;gBAChB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;YAED,OAAO;QACR,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;YAClC,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YAE7C,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;gBACrC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBACpD,OAAO;YACR,CAAC;YAED,IAAI,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,OAAO;YACR,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtB,KAAK,CAAC,cAAc,EAAE,CAAC;YACxB,CAAC;YAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO;QACR,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC,CAAC;IAEF,OAAO,CACN,CAAC,KAAK,CACL,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,QAAQ,CAAC,CAC9B,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CACzB,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CACnB,IAAI,CAAC,MAAM,CACX,IAAI,CAAC,UAAU,CACf,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAC5B,WAAW,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CACxD,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAC7B,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAC7B,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAC7B,iBAAiB,CAAC,MAAM,CACxB,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAChC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAC1E,qBAAqB,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAC3G,OAAO,CAAC,CAAC,WAAW,CAAC,CACrB,OAAO,CAAC,CAAC,WAAW,CAAC,CACrB,SAAS,CAAC,CAAC,aAAa,CAAC,CACzB,IAAI,IAAI,CAAC,EACR,CACF,CAAC;AACH,CAAC","sourcesContent":["import clsx from 'clsx/lite';\nimport { type JSX, splitProps } from 'solid-js';\nimport { comboboxClass } from './class';\nimport { useComboboxContext } from './context';\nimport type { ComboboxInputProps } from './types';\nimport { callEventHandler } from './util';\n\nexport function ComboboxInput(props: ComboboxInputProps) {\n\tconst context = useComboboxContext<any, any>();\n\tconst [local, rest] = splitProps(props, ['class', 'placeholder', 'onInput', 'onFocus', 'onKeyDown']);\n\tconst rootClass = () => clsx(comboboxClass.input, local.class);\n\n\tconst handleInput: JSX.EventHandlerUnion<HTMLInputElement, InputEvent> = (event) => {\n\t\tcallEventHandler(local.onInput, event);\n\n\t\tif (!(event.currentTarget instanceof HTMLInputElement)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst input = event.currentTarget;\n\t\tconst nextValue = input.value;\n\t\tconst selectionStart = input.selectionStart;\n\t\tconst selectionEnd = input.selectionEnd;\n\n\t\tcontext.setInputValue(nextValue);\n\n\t\tqueueMicrotask(() => {\n\t\t\tif (document.activeElement !== input) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (input.value !== nextValue || selectionStart === null || selectionEnd === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tinput.setSelectionRange(selectionStart, selectionEnd);\n\t\t});\n\t};\n\n\tconst handleFocus: JSX.EventHandlerUnion<HTMLInputElement, FocusEvent> = (event) => {\n\t\tcallEventHandler(local.onFocus, event);\n\n\t\tif (context.disabled() || context.readOnly()) {\n\t\t\treturn;\n\t\t}\n\t};\n\n\tconst handleKeyDown: JSX.EventHandlerUnion<HTMLInputElement, KeyboardEvent> = (event) => {\n\t\tcallEventHandler(local.onKeyDown, event);\n\n\t\tif (context.disabled() || context.readOnly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === 'ArrowDown') {\n\t\t\tevent.preventDefault();\n\n\t\t\tif (context.isOpen()) {\n\t\t\t\tcontext.highlightNext();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (context.visibleItems().length === 0) {\n\t\t\t\tcontext.openAllOptions('first');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontext.openPopup('preserve');\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === 'ArrowUp') {\n\t\t\tevent.preventDefault();\n\n\t\t\tif (context.isOpen()) {\n\t\t\t\tcontext.highlightPrevious();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (context.visibleItems().length === 0) {\n\t\t\t\tcontext.openAllOptions('last');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontext.openPopup('preserve');\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === 'Enter' && context.isOpen()) {\n\t\t\tconst activeItem = context.visibleItems().find((item) => item.key === context.highlightedKey());\n\n\t\t\tif (activeItem) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tcontext.selectItem(activeItem);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === 'Escape') {\n\t\t\tconst input = event.currentTarget;\n\t\t\tconst selectionStart = input.selectionStart ?? 0;\n\t\t\tconst selectionEnd = input.selectionEnd ?? 0;\n\n\t\t\tif (selectionStart !== selectionEnd) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tinput.setSelectionRange(selectionEnd, selectionEnd);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (context.selectedItem()) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tcontext.clearSelectedItem();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (context.isOpen()) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tcontext.closePopup(true);\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === 'Tab') {\n\t\t\tcontext.closePopup(true);\n\t\t}\n\t};\n\n\treturn (\n\t\t<input\n\t\t\tid={`${context.rootId}-input`}\n\t\t\tref={context.setInputRef}\n\t\t\tclass={rootClass()}\n\t\t\ttype=\"text\"\n\t\t\trole=\"combobox\"\n\t\t\tvalue={context.inputValue()}\n\t\t\tplaceholder={local.placeholder ?? context.placeholder()}\n\t\t\tdisabled={context.disabled()}\n\t\t\treadOnly={context.readOnly()}\n\t\t\trequired={context.required()}\n\t\t\taria-autocomplete=\"list\"\n\t\t\taria-expanded={context.isOpen()}\n\t\t\taria-controls={context.isOpen() ? `${context.rootId}-listbox` : undefined}\n\t\t\taria-activedescendant={context.highlightedKey() ? context.getItemId(context.highlightedKey()!) : undefined}\n\t\t\tonInput={handleInput}\n\t\t\tonFocus={handleFocus}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\t{...rest}\n\t\t/>\n\t);\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import clsx from 'clsx/lite';
|
|
2
|
-
import { splitProps } from 'solid-js';
|
|
2
|
+
import { createEffect, splitProps } from 'solid-js';
|
|
3
3
|
import { comboboxClass } from './class';
|
|
4
4
|
import { ComboboxItemContext, useComboboxContext } from './context';
|
|
5
5
|
import { callEventHandler } from './util';
|
|
@@ -9,6 +9,13 @@ export function ComboboxItem(props) {
|
|
|
9
9
|
const rootClass = () => clsx(comboboxClass.item, local.class);
|
|
10
10
|
const selected = () => context.selectedItem()?.key === local.item.key;
|
|
11
11
|
const highlighted = () => context.highlightedKey() === local.item.key;
|
|
12
|
+
let itemRef;
|
|
13
|
+
createEffect(() => {
|
|
14
|
+
if (!highlighted() || !itemRef || !context.shouldScrollHighlightedItem()) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
itemRef.scrollIntoView({ block: 'nearest' });
|
|
18
|
+
});
|
|
12
19
|
const handleMouseEnter = (event) => {
|
|
13
20
|
callEventHandler(local.onMouseEnter, event);
|
|
14
21
|
context.setHighlightedKey(local.item.key);
|
|
@@ -22,7 +29,7 @@ export function ComboboxItem(props) {
|
|
|
22
29
|
context.selectItem(local.item);
|
|
23
30
|
};
|
|
24
31
|
return (<ComboboxItemContext.Provider value={{ item: local.item, selected: selected(), highlighted: highlighted() }}>
|
|
25
|
-
<li id={context.getItemId(local.item.key)} class={rootClass()} role="option" aria-selected={selected()} data-selected={selected() ? '' : undefined} data-highlighted={highlighted() ? '' : undefined} data-disabled={local.item.disabled ? '' : undefined} onMouseEnter={handleMouseEnter} onMouseDown={handleMouseDown} onClick={handleClick} {...rest}>
|
|
32
|
+
<li id={context.getItemId(local.item.key)} ref={itemRef} class={rootClass()} role="option" aria-selected={selected()} data-selected={selected() ? '' : undefined} data-highlighted={highlighted() ? '' : undefined} data-disabled={local.item.disabled ? '' : undefined} onMouseEnter={handleMouseEnter} onMouseDown={handleMouseDown} onClick={handleClick} {...rest}>
|
|
26
33
|
{local.children}
|
|
27
34
|
</li>
|
|
28
35
|
</ComboboxItemContext.Provider>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox-item.jsx","sourceRoot":"","sources":["../../../../src/components/combobox/combobox-item.tsx"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAY,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"combobox-item.jsx","sourceRoot":"","sources":["../../../../src/components/combobox/combobox-item.tsx"],"names":[],"mappings":"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","sourcesContent":["import clsx from 'clsx/lite';\nimport { createEffect, type JSX, splitProps } from 'solid-js';\nimport { comboboxClass } from './class';\nimport { ComboboxItemContext, useComboboxContext } from './context';\nimport type { ComboboxItemProps } from './types';\nimport { callEventHandler } from './util';\n\nexport function ComboboxItem<TOption = any>(props: ComboboxItemProps<TOption>) {\n\tconst context = useComboboxContext<TOption, any>();\n\tconst [local, rest] = splitProps(props, ['class', 'item', 'children', 'onMouseEnter', 'onMouseDown', 'onClick']);\n\tconst rootClass = () => clsx(comboboxClass.item, local.class);\n\tconst selected = () => context.selectedItem()?.key === local.item.key;\n\tconst highlighted = () => context.highlightedKey() === local.item.key;\n\tlet itemRef: HTMLLIElement | undefined;\n\n\tcreateEffect(() => {\n\t\tif (!highlighted() || !itemRef || !context.shouldScrollHighlightedItem()) {\n\t\t\treturn;\n\t\t}\n\n\t\titemRef.scrollIntoView({ block: 'nearest' });\n\t});\n\n\tconst handleMouseEnter: JSX.EventHandlerUnion<HTMLLIElement, MouseEvent> = (event) => {\n\t\tcallEventHandler(local.onMouseEnter, event);\n\t\tcontext.setHighlightedKey(local.item.key);\n\t};\n\n\tconst handleMouseDown: JSX.EventHandlerUnion<HTMLLIElement, MouseEvent> = (event) => {\n\t\tcallEventHandler(local.onMouseDown, event);\n\t\tevent.preventDefault();\n\t};\n\n\tconst handleClick: JSX.EventHandlerUnion<HTMLLIElement, MouseEvent> = (event) => {\n\t\tcallEventHandler(local.onClick, event);\n\t\tcontext.selectItem(local.item);\n\t};\n\n\treturn (\n\t\t<ComboboxItemContext.Provider value={{ item: local.item, selected: selected(), highlighted: highlighted() }}>\n\t\t\t<li\n\t\t\t\tid={context.getItemId(local.item.key)}\n\t\t\t\tref={itemRef}\n\t\t\t\tclass={rootClass()}\n\t\t\t\trole=\"option\"\n\t\t\t\taria-selected={selected()}\n\t\t\t\tdata-selected={selected() ? '' : undefined}\n\t\t\t\tdata-highlighted={highlighted() ? '' : undefined}\n\t\t\t\tdata-disabled={local.item.disabled ? '' : undefined}\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\tonClick={handleClick}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{local.children}\n\t\t\t</li>\n\t\t</ComboboxItemContext.Provider>\n\t);\n}\n"]}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
@layer components {
|
|
2
2
|
.fl-combobox_listbox {
|
|
3
|
+
--fl-combobox-listbox-pad: var(--fl-size-2);
|
|
4
|
+
|
|
3
5
|
/* reset */
|
|
4
6
|
list-style: none;
|
|
5
7
|
|
|
6
8
|
/* layout */
|
|
7
9
|
max-height: inherit;
|
|
8
10
|
overflow-y: auto;
|
|
11
|
+
scroll-padding-block: var(--fl-combobox-listbox-pad);
|
|
9
12
|
|
|
10
13
|
/* spacing */
|
|
11
14
|
margin: 0;
|
|
12
|
-
padding: var(--fl-
|
|
15
|
+
padding: var(--fl-combobox-listbox-pad);
|
|
13
16
|
}
|
|
14
17
|
|
|
15
18
|
.fl-combobox_listbox:focus {
|
|
@@ -50,6 +50,7 @@ export function ComboboxRoot(props) {
|
|
|
50
50
|
const [internalInputValue, setInternalInputValue] = createSignal(local.defaultInputValue ?? '');
|
|
51
51
|
const [filterValue, setFilterValue] = createSignal('');
|
|
52
52
|
const [highlightedKey, setHighlightedKey] = createSignal(null);
|
|
53
|
+
const [shouldScrollHighlightedItem, setShouldScrollHighlightedItem] = createSignal(false);
|
|
53
54
|
const isControlledValue = () => local.value !== undefined;
|
|
54
55
|
const isControlledInputValue = () => local.inputValue !== undefined;
|
|
55
56
|
const isControlledOpen = () => local.open !== undefined;
|
|
@@ -160,16 +161,18 @@ export function ComboboxRoot(props) {
|
|
|
160
161
|
}
|
|
161
162
|
};
|
|
162
163
|
const restoreInputFromSelection = () => {
|
|
163
|
-
setDisplayedInputValue(selectedItem()?.label ?? '');
|
|
164
|
+
setDisplayedInputValue(selectedItem()?.label ?? '', isControlledInputValue());
|
|
164
165
|
setFilterValue('');
|
|
165
166
|
};
|
|
166
167
|
const highlightByIndex = (index) => {
|
|
167
168
|
const items = visibleItems();
|
|
168
169
|
if (items.length === 0) {
|
|
170
|
+
setShouldScrollHighlightedItem(false);
|
|
169
171
|
setHighlightedKey(null);
|
|
170
172
|
return;
|
|
171
173
|
}
|
|
172
|
-
const boundedIndex = (index
|
|
174
|
+
const boundedIndex = Math.min(Math.max(index, 0), items.length - 1);
|
|
175
|
+
setShouldScrollHighlightedItem(true);
|
|
173
176
|
setHighlightedKey(items[boundedIndex]?.key ?? null);
|
|
174
177
|
};
|
|
175
178
|
const highlightFirst = () => highlightByIndex(0);
|
|
@@ -198,6 +201,29 @@ export function ComboboxRoot(props) {
|
|
|
198
201
|
return;
|
|
199
202
|
}
|
|
200
203
|
if (selectedItem()) {
|
|
204
|
+
setShouldScrollHighlightedItem(true);
|
|
205
|
+
setHighlightedKey(selectedItem().key);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
highlightFirst();
|
|
210
|
+
};
|
|
211
|
+
const openAllOptions = (strategy = 'first') => {
|
|
212
|
+
if (local.disabled || local.readOnly || allItems().length === 0) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
setFilterValue('');
|
|
216
|
+
setOpen(true);
|
|
217
|
+
if (strategy === 'last') {
|
|
218
|
+
highlightLast();
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (strategy === 'preserve') {
|
|
222
|
+
if (highlightedKey() !== null) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (selectedItem()) {
|
|
226
|
+
setShouldScrollHighlightedItem(true);
|
|
201
227
|
setHighlightedKey(selectedItem().key);
|
|
202
228
|
return;
|
|
203
229
|
}
|
|
@@ -206,6 +232,7 @@ export function ComboboxRoot(props) {
|
|
|
206
232
|
};
|
|
207
233
|
const closePopup = (restoreInput = true) => {
|
|
208
234
|
setOpen(false);
|
|
235
|
+
setShouldScrollHighlightedItem(false);
|
|
209
236
|
setHighlightedKey(null);
|
|
210
237
|
if (restoreInput) {
|
|
211
238
|
restoreInputFromSelection();
|
|
@@ -218,6 +245,7 @@ export function ComboboxRoot(props) {
|
|
|
218
245
|
setSelectedOption(item.rawValue);
|
|
219
246
|
setDisplayedInputValue(item.label);
|
|
220
247
|
setFilterValue('');
|
|
248
|
+
setShouldScrollHighlightedItem(false);
|
|
221
249
|
setHighlightedKey(item.key);
|
|
222
250
|
if (local.closeOnSelection) {
|
|
223
251
|
setOpen(false);
|
|
@@ -226,7 +254,7 @@ export function ComboboxRoot(props) {
|
|
|
226
254
|
};
|
|
227
255
|
const clearPendingInput = () => {
|
|
228
256
|
if (selectedItem() === null) {
|
|
229
|
-
setDisplayedInputValue('');
|
|
257
|
+
setDisplayedInputValue('', isControlledInputValue());
|
|
230
258
|
setFilterValue('');
|
|
231
259
|
return;
|
|
232
260
|
}
|
|
@@ -234,21 +262,31 @@ export function ComboboxRoot(props) {
|
|
|
234
262
|
};
|
|
235
263
|
const clearSelectedItem = () => {
|
|
236
264
|
setSelectedOption(null);
|
|
237
|
-
setDisplayedInputValue('');
|
|
265
|
+
setDisplayedInputValue('', true);
|
|
238
266
|
setFilterValue('');
|
|
267
|
+
setShouldScrollHighlightedItem(false);
|
|
239
268
|
setHighlightedKey(null);
|
|
240
269
|
setOpen(false);
|
|
241
270
|
inputRef()?.focus();
|
|
242
271
|
};
|
|
243
272
|
createEffect(() => {
|
|
244
|
-
if (isControlledValue()
|
|
273
|
+
if (!isControlledValue()) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
if (selectedItem() !== null) {
|
|
245
277
|
restoreInputFromSelection();
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
setFilterValue('');
|
|
281
|
+
if (!isControlledInputValue()) {
|
|
282
|
+
setDisplayedInputValue('');
|
|
246
283
|
}
|
|
247
284
|
});
|
|
248
285
|
createEffect(() => {
|
|
249
286
|
const items = visibleItems();
|
|
250
287
|
const selected = selectedItem();
|
|
251
288
|
if (items.length === 0) {
|
|
289
|
+
setShouldScrollHighlightedItem(false);
|
|
252
290
|
setHighlightedKey(null);
|
|
253
291
|
setOpen(false);
|
|
254
292
|
return;
|
|
@@ -258,6 +296,7 @@ export function ComboboxRoot(props) {
|
|
|
258
296
|
}
|
|
259
297
|
if (isOpen()) {
|
|
260
298
|
if (selected && items.some((item) => item.key === selected.key)) {
|
|
299
|
+
setShouldScrollHighlightedItem(true);
|
|
261
300
|
setHighlightedKey(selected.key);
|
|
262
301
|
return;
|
|
263
302
|
}
|
|
@@ -286,11 +325,12 @@ export function ComboboxRoot(props) {
|
|
|
286
325
|
setInputRef,
|
|
287
326
|
inputValue,
|
|
288
327
|
setInputValue: (value) => {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
if (selectedItem() && value !== selectedItem().label) {
|
|
328
|
+
const selected = selectedItem();
|
|
329
|
+
if (selected && value !== selected.label) {
|
|
292
330
|
setSelectedOption(null);
|
|
293
331
|
}
|
|
332
|
+
setDisplayedInputValue(value, true);
|
|
333
|
+
setFilterValue(value);
|
|
294
334
|
if (value.trim() === '') {
|
|
295
335
|
closePopup(false);
|
|
296
336
|
return;
|
|
@@ -299,6 +339,7 @@ export function ComboboxRoot(props) {
|
|
|
299
339
|
},
|
|
300
340
|
isOpen,
|
|
301
341
|
openPopup,
|
|
342
|
+
openAllOptions,
|
|
302
343
|
closePopup,
|
|
303
344
|
togglePopup: () => {
|
|
304
345
|
if (isOpen()) {
|
|
@@ -311,7 +352,11 @@ export function ComboboxRoot(props) {
|
|
|
311
352
|
visibleItems,
|
|
312
353
|
selectedItem,
|
|
313
354
|
highlightedKey,
|
|
314
|
-
|
|
355
|
+
shouldScrollHighlightedItem,
|
|
356
|
+
setHighlightedKey: (key) => {
|
|
357
|
+
setShouldScrollHighlightedItem(false);
|
|
358
|
+
setHighlightedKey(key);
|
|
359
|
+
},
|
|
315
360
|
highlightNext,
|
|
316
361
|
highlightPrevious,
|
|
317
362
|
highlightFirst,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox-root.jsx","sourceRoot":"","sources":["../../../../src/components/combobox/combobox-root.tsx"],"names":[],"mappings":"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","sourcesContent":["import clsx from 'clsx/lite';\nimport {\n\tchildren,\n\tcreateEffect,\n\tcreateMemo,\n\tcreateSignal,\n\tcreateUniqueId,\n\ttype JSX,\n\tmergeProps,\n\tonCleanup,\n\tonMount,\n\tsplitProps,\n} from 'solid-js';\nimport { comboboxClass } from './class';\nimport { ComboboxContent } from './combobox-content';\nimport { ComboboxControl } from './combobox-control';\nimport { ComboboxInput } from './combobox-input';\nimport { ComboboxListbox } from './combobox-listbox';\nimport { ComboboxPortal } from './combobox-portal';\nimport { ComboboxTrigger } from './combobox-trigger';\nimport { ComboboxContext, type ComboboxContextValue } from './context';\nimport type { ComboboxGroupData, ComboboxItemData, ComboboxRootProps } from './types';\nimport {\n\tcallEventHandler,\n\tcreateContainsFilter,\n\tdefaultTextValue,\n\tresolveAccessor,\n\tresolveGroupChildren,\n} from './util';\n\nexport function ComboboxRoot<TOption, TOptionGroup = never>(props: ComboboxRootProps<TOption, TOptionGroup>) {\n\tconst merged = mergeProps(\n\t\t{\n\t\t\tcloseOnSelection: true,\n\t\t},\n\t\tprops,\n\t);\n\n\tconst [local, rest] = splitProps(merged, [\n\t\t'class',\n\t\t'children',\n\t\t'options',\n\t\t'optionValue',\n\t\t'optionTextValue',\n\t\t'optionLabel',\n\t\t'optionDisabled',\n\t\t'optionGroupChildren',\n\t\t'itemComponent',\n\t\t'groupComponent',\n\t\t'placeholder',\n\t\t'value',\n\t\t'defaultValue',\n\t\t'inputValue',\n\t\t'defaultInputValue',\n\t\t'onChange',\n\t\t'onInputChange',\n\t\t'open',\n\t\t'defaultOpen',\n\t\t'onOpenChange',\n\t\t'disabled',\n\t\t'readOnly',\n\t\t'required',\n\t\t'name',\n\t\t'closeOnSelection',\n\t\t'onFocusOut',\n\t]);\n\tconst resolvedChildren = children(() => local.children);\n\n\tconst rootId = createUniqueId();\n\tconst [rootRef, setRootRef] = createSignal<HTMLDivElement>();\n\tconst [inputRef, setInputRef] = createSignal<HTMLInputElement>();\n\tconst [internalValue, setInternalValue] = createSignal<TOption | null>(local.defaultValue ?? null);\n\tconst [internalOpen, setInternalOpen] = createSignal(Boolean(local.defaultOpen));\n\tconst [internalInputValue, setInternalInputValue] = createSignal(local.defaultInputValue ?? '');\n\tconst [filterValue, setFilterValue] = createSignal('');\n\tconst [highlightedKey, setHighlightedKey] = createSignal<string | null>(null);\n\tconst isControlledValue = () => local.value !== undefined;\n\tconst isControlledInputValue = () => local.inputValue !== undefined;\n\tconst isControlledOpen = () => local.open !== undefined;\n\tconst filter = createMemo(() => createContainsFilter<TOption>());\n\tconst inputValue = createMemo(() => {\n\t\tif (isControlledInputValue()) {\n\t\t\treturn local.inputValue ?? '';\n\t\t}\n\n\t\treturn internalInputValue();\n\t});\n\n\tconst normalizedGroups = createMemo<Array<ComboboxGroupData<TOptionGroup, TOption>>>(() => {\n\t\tconst groups: Array<ComboboxGroupData<TOptionGroup, TOption>> = [];\n\t\tconst looseItems: ComboboxItemData<TOption>[] = [];\n\t\tlet itemIndex = 0;\n\n\t\tfor (let index = 0; index < local.options.length; index += 1) {\n\t\t\tconst entry = local.options[index] as TOption | TOptionGroup;\n\t\t\tconst groupChildren = resolveGroupChildren(entry as TOptionGroup, local.optionGroupChildren);\n\n\t\t\tif (groupChildren !== undefined) {\n\t\t\t\tconst groupItems = groupChildren.map((option) => {\n\t\t\t\t\tconst value = String(resolveAccessor(option, local.optionValue, defaultTextValue));\n\t\t\t\t\tconst label = resolveAccessor(option, local.optionLabel, defaultTextValue);\n\t\t\t\t\tconst textValue = resolveAccessor(option, local.optionTextValue, () => label);\n\t\t\t\t\tconst disabled = Boolean(resolveAccessor(option, local.optionDisabled, () => false));\n\t\t\t\t\tconst item = {\n\t\t\t\t\t\tkey: `${value}-${itemIndex}`,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\ttextValue,\n\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\trawValue: option,\n\t\t\t\t\t};\n\n\t\t\t\t\titemIndex += 1;\n\n\t\t\t\t\treturn item;\n\t\t\t\t});\n\n\t\t\t\tgroups.push({\n\t\t\t\t\tkey: `group-${index}`,\n\t\t\t\t\ttextValue: defaultTextValue(entry),\n\t\t\t\t\trawValue: entry as TOptionGroup,\n\t\t\t\t\titems: groupItems,\n\t\t\t\t});\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst option = entry as TOption;\n\t\t\tconst value = String(resolveAccessor(option, local.optionValue, defaultTextValue));\n\t\t\tconst label = resolveAccessor(option, local.optionLabel, defaultTextValue);\n\t\t\tconst textValue = resolveAccessor(option, local.optionTextValue, () => label);\n\t\t\tconst disabled = Boolean(resolveAccessor(option, local.optionDisabled, () => false));\n\n\t\t\tlooseItems.push({\n\t\t\t\tkey: `${value}-${itemIndex}`,\n\t\t\t\tvalue,\n\t\t\t\tlabel,\n\t\t\t\ttextValue,\n\t\t\t\tdisabled,\n\t\t\t\trawValue: option,\n\t\t\t});\n\n\t\t\titemIndex += 1;\n\t\t}\n\n\t\tif (looseItems.length > 0) {\n\t\t\tgroups.unshift({\n\t\t\t\tkey: 'group-root',\n\t\t\t\ttextValue: '',\n\t\t\t\titems: looseItems,\n\t\t\t});\n\t\t}\n\n\t\treturn groups;\n\t});\n\n\tconst allItems = createMemo(() => normalizedGroups().flatMap((group) => group.items));\n\n\tconst selectedItem = createMemo(() => {\n\t\tlet selectedOption = internalValue();\n\n\t\tif (isControlledValue()) {\n\t\t\tselectedOption = local.value ?? null;\n\t\t}\n\n\t\tif (selectedOption == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst selectedValue = String(\n\t\t\tresolveAccessor<TOption, string | number>(\n\t\t\t\tselectedOption as TOption,\n\t\t\t\tlocal.optionValue,\n\t\t\t\tdefaultTextValue as (value: TOption) => string | number,\n\t\t\t),\n\t\t);\n\n\t\treturn allItems().find((item) => item.value === selectedValue) ?? null;\n\t});\n\n\tconst visibleGroups = createMemo(() => {\n\t\tconst currentInput = filterValue().trim();\n\n\t\treturn normalizedGroups()\n\t\t\t.map((group) => ({\n\t\t\t\t...group,\n\t\t\t\titems: group.items.filter((item) => filter()(item.rawValue, currentInput)),\n\t\t\t}))\n\t\t\t.filter((group) => group.items.length > 0);\n\t});\n\n\tconst visibleItems = createMemo(() => visibleGroups().flatMap((group) => group.items));\n\tconst isOpen = createMemo(\n\t\t() => (isControlledOpen() ? Boolean(local.open) : internalOpen()) && visibleItems().length > 0,\n\t);\n\n\tconst setOpen = (value: boolean) => {\n\t\tif (!isControlledOpen()) {\n\t\t\tsetInternalOpen(value);\n\t\t}\n\n\t\tlocal.onOpenChange?.(value);\n\t};\n\n\tconst setSelectedOption = (value: TOption | null) => {\n\t\tif (!isControlledValue()) {\n\t\t\tsetInternalValue(() => value);\n\t\t}\n\n\t\tlocal.onChange?.(value);\n\t};\n\n\tconst setDisplayedInputValue = (value: string, emitChange = false) => {\n\t\tif (!isControlledInputValue()) {\n\t\t\tsetInternalInputValue(value);\n\t\t}\n\n\t\tif (emitChange) {\n\t\t\tlocal.onInputChange?.(value);\n\t\t}\n\t};\n\n\tconst restoreInputFromSelection = () => {\n\t\tsetDisplayedInputValue(selectedItem()?.label ?? '');\n\t\tsetFilterValue('');\n\t};\n\n\tconst highlightByIndex = (index: number) => {\n\t\tconst items = visibleItems();\n\n\t\tif (items.length === 0) {\n\t\t\tsetHighlightedKey(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst boundedIndex = (index + items.length) % items.length;\n\t\tsetHighlightedKey(items[boundedIndex]?.key ?? null);\n\t};\n\n\tconst highlightFirst = () => highlightByIndex(0);\n\tconst highlightLast = () => highlightByIndex(visibleItems().length - 1);\n\n\tconst highlightNext = () => {\n\t\tconst items = visibleItems();\n\t\tconst index = items.findIndex((item) => item.key === highlightedKey());\n\t\thighlightByIndex(index >= 0 ? index + 1 : 0);\n\t};\n\n\tconst highlightPrevious = () => {\n\t\tconst items = visibleItems();\n\t\tconst index = items.findIndex((item) => item.key === highlightedKey());\n\t\thighlightByIndex(index >= 0 ? index - 1 : items.length - 1);\n\t};\n\n\tconst openPopup = (strategy: 'first' | 'last' | 'preserve' = 'first') => {\n\t\tif (local.disabled || local.readOnly || visibleItems().length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetOpen(true);\n\n\t\tif (strategy === 'last') {\n\t\t\thighlightLast();\n\t\t\treturn;\n\t\t}\n\n\t\tif (strategy === 'preserve') {\n\t\t\tif (highlightedKey() !== null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selectedItem()) {\n\t\t\t\tsetHighlightedKey(selectedItem()!.key);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\thighlightFirst();\n\t};\n\n\tconst closePopup = (restoreInput = true) => {\n\t\tsetOpen(false);\n\t\tsetHighlightedKey(null);\n\n\t\tif (restoreInput) {\n\t\t\trestoreInputFromSelection();\n\t\t}\n\t};\n\n\tconst selectItem = (item: ComboboxItemData<TOption>) => {\n\t\tif (item.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetSelectedOption(item.rawValue);\n\t\tsetDisplayedInputValue(item.label);\n\t\tsetFilterValue('');\n\t\tsetHighlightedKey(item.key);\n\n\t\tif (local.closeOnSelection) {\n\t\t\tsetOpen(false);\n\t\t}\n\n\t\tinputRef()?.focus();\n\t};\n\n\tconst clearPendingInput = () => {\n\t\tif (selectedItem() === null) {\n\t\t\tsetDisplayedInputValue('');\n\t\t\tsetFilterValue('');\n\t\t\treturn;\n\t\t}\n\n\t\trestoreInputFromSelection();\n\t};\n\n\tconst clearSelectedItem = () => {\n\t\tsetSelectedOption(null);\n\t\tsetDisplayedInputValue('');\n\t\tsetFilterValue('');\n\t\tsetHighlightedKey(null);\n\t\tsetOpen(false);\n\t\tinputRef()?.focus();\n\t};\n\n\tcreateEffect(() => {\n\t\tif (isControlledValue() && selectedItem() !== null) {\n\t\t\trestoreInputFromSelection();\n\t\t}\n\t});\n\n\tcreateEffect(() => {\n\t\tconst items = visibleItems();\n\t\tconst selected = selectedItem();\n\n\t\tif (items.length === 0) {\n\t\t\tsetHighlightedKey(null);\n\t\t\tsetOpen(false);\n\t\t\treturn;\n\t\t}\n\n\t\tif (highlightedKey() && items.some((item) => item.key === highlightedKey())) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isOpen()) {\n\t\t\tif (selected && items.some((item) => item.key === selected.key)) {\n\t\t\t\tsetHighlightedKey(selected.key);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\thighlightFirst();\n\t\t}\n\t});\n\n\tonMount(() => {\n\t\trestoreInputFromSelection();\n\n\t\tconst handlePointerDown = (event: PointerEvent) => {\n\t\t\tconst root = rootRef();\n\n\t\t\tif (!root || root.contains(event.target as Node)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclosePopup(true);\n\t\t};\n\n\t\tdocument.addEventListener('pointerdown', handlePointerDown);\n\n\t\tonCleanup(() => {\n\t\t\tdocument.removeEventListener('pointerdown', handlePointerDown);\n\t\t});\n\t});\n\n\tconst context: ComboboxContextValue<TOption, TOptionGroup> = {\n\t\trootId,\n\t\trootRef,\n\t\tsetRootRef,\n\t\tinputRef,\n\t\tsetInputRef,\n\t\tinputValue,\n\t\tsetInputValue: (value) => {\n\t\t\tsetDisplayedInputValue(value, true);\n\t\t\tsetFilterValue(value);\n\n\t\t\tif (selectedItem() && value !== selectedItem()!.label) {\n\t\t\t\tsetSelectedOption(null);\n\t\t\t}\n\n\t\t\tif (value.trim() === '') {\n\t\t\t\tclosePopup(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\topenPopup('first');\n\t\t},\n\t\tisOpen,\n\t\topenPopup,\n\t\tclosePopup,\n\t\ttogglePopup: () => {\n\t\t\tif (isOpen()) {\n\t\t\t\tclosePopup(true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\topenPopup('first');\n\t\t},\n\t\tvisibleGroups,\n\t\tvisibleItems,\n\t\tselectedItem,\n\t\thighlightedKey,\n\t\tsetHighlightedKey,\n\t\thighlightNext,\n\t\thighlightPrevious,\n\t\thighlightFirst,\n\t\thighlightLast,\n\t\tselectItem,\n\t\tgetItemId: (key) => `${rootId}-item-${key}`,\n\t\titemComponent: local.itemComponent,\n\t\tgroupComponent: local.groupComponent,\n\t\tplaceholder: () => local.placeholder,\n\t\tdisabled: () => Boolean(local.disabled),\n\t\treadOnly: () => Boolean(local.readOnly),\n\t\trequired: () => Boolean(local.required),\n\t\tname: () => local.name,\n\t\tclearPendingInput,\n\t\tclearSelectedItem,\n\t};\n\n\tconst rootClass = () => clsx(comboboxClass.root, local.class);\n\n\tconst handleFocusOut: JSX.FocusEventHandlerUnion<HTMLDivElement, FocusEvent> = (event) => {\n\t\tcallEventHandler(local.onFocusOut, event);\n\n\t\tconst nextTarget = event.relatedTarget as Node | null;\n\n\t\tif (nextTarget && rootRef()?.contains(nextTarget)) {\n\t\t\treturn;\n\t\t}\n\n\t\tqueueMicrotask(() => {\n\t\t\tconst activeElement = document.activeElement;\n\n\t\t\tif (activeElement instanceof Node && rootRef()?.contains(activeElement)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclosePopup(true);\n\t\t});\n\t};\n\n\treturn (\n\t\t<ComboboxContext.Provider value={context}>\n\t\t\t<div\n\t\t\t\tclass={rootClass()}\n\t\t\t\tref={setRootRef}\n\t\t\t\tonFocusOut={handleFocusOut}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{local.children ? (\n\t\t\t\t\tresolvedChildren()\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ComboboxControl>\n\t\t\t\t\t\t\t<ComboboxInput aria-label={local.placeholder ?? 'Combobox'} />\n\t\t\t\t\t\t\t<ComboboxTrigger />\n\t\t\t\t\t\t</ComboboxControl>\n\t\t\t\t\t\t<ComboboxPortal>\n\t\t\t\t\t\t\t<ComboboxContent>\n\t\t\t\t\t\t\t\t<ComboboxListbox />\n\t\t\t\t\t\t\t</ComboboxContent>\n\t\t\t\t\t\t</ComboboxPortal>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</ComboboxContext.Provider>\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"combobox-root.jsx","sourceRoot":"","sources":["../../../../src/components/combobox/combobox-root.tsx"],"names":[],"mappings":"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","sourcesContent":["import clsx from 'clsx/lite';\nimport {\n\tchildren,\n\tcreateEffect,\n\tcreateMemo,\n\tcreateSignal,\n\tcreateUniqueId,\n\ttype JSX,\n\tmergeProps,\n\tonCleanup,\n\tonMount,\n\tsplitProps,\n} from 'solid-js';\nimport { comboboxClass } from './class';\nimport { ComboboxContent } from './combobox-content';\nimport { ComboboxControl } from './combobox-control';\nimport { ComboboxInput } from './combobox-input';\nimport { ComboboxListbox } from './combobox-listbox';\nimport { ComboboxPortal } from './combobox-portal';\nimport { ComboboxTrigger } from './combobox-trigger';\nimport { ComboboxContext, type ComboboxContextValue } from './context';\nimport type { ComboboxGroupData, ComboboxItemData, ComboboxRootProps } from './types';\nimport {\n\tcallEventHandler,\n\tcreateContainsFilter,\n\tdefaultTextValue,\n\tresolveAccessor,\n\tresolveGroupChildren,\n} from './util';\n\nexport function ComboboxRoot<TOption, TOptionGroup = never>(props: ComboboxRootProps<TOption, TOptionGroup>) {\n\tconst merged = mergeProps(\n\t\t{\n\t\t\tcloseOnSelection: true,\n\t\t},\n\t\tprops,\n\t);\n\n\tconst [local, rest] = splitProps(merged, [\n\t\t'class',\n\t\t'children',\n\t\t'options',\n\t\t'optionValue',\n\t\t'optionTextValue',\n\t\t'optionLabel',\n\t\t'optionDisabled',\n\t\t'optionGroupChildren',\n\t\t'itemComponent',\n\t\t'groupComponent',\n\t\t'placeholder',\n\t\t'value',\n\t\t'defaultValue',\n\t\t'inputValue',\n\t\t'defaultInputValue',\n\t\t'onChange',\n\t\t'onInputChange',\n\t\t'open',\n\t\t'defaultOpen',\n\t\t'onOpenChange',\n\t\t'disabled',\n\t\t'readOnly',\n\t\t'required',\n\t\t'name',\n\t\t'closeOnSelection',\n\t\t'onFocusOut',\n\t]);\n\tconst resolvedChildren = children(() => local.children);\n\n\tconst rootId = createUniqueId();\n\tconst [rootRef, setRootRef] = createSignal<HTMLDivElement>();\n\tconst [inputRef, setInputRef] = createSignal<HTMLInputElement>();\n\tconst [internalValue, setInternalValue] = createSignal<TOption | null>(local.defaultValue ?? null);\n\tconst [internalOpen, setInternalOpen] = createSignal(Boolean(local.defaultOpen));\n\tconst [internalInputValue, setInternalInputValue] = createSignal(local.defaultInputValue ?? '');\n\tconst [filterValue, setFilterValue] = createSignal('');\n\tconst [highlightedKey, setHighlightedKey] = createSignal<string | null>(null);\n\tconst [shouldScrollHighlightedItem, setShouldScrollHighlightedItem] = createSignal(false);\n\tconst isControlledValue = () => local.value !== undefined;\n\tconst isControlledInputValue = () => local.inputValue !== undefined;\n\tconst isControlledOpen = () => local.open !== undefined;\n\tconst filter = createMemo(() => createContainsFilter<TOption>());\n\tconst inputValue = createMemo(() => {\n\t\tif (isControlledInputValue()) {\n\t\t\treturn local.inputValue ?? '';\n\t\t}\n\n\t\treturn internalInputValue();\n\t});\n\n\tconst normalizedGroups = createMemo<Array<ComboboxGroupData<TOptionGroup, TOption>>>(() => {\n\t\tconst groups: Array<ComboboxGroupData<TOptionGroup, TOption>> = [];\n\t\tconst looseItems: ComboboxItemData<TOption>[] = [];\n\t\tlet itemIndex = 0;\n\n\t\tfor (let index = 0; index < local.options.length; index += 1) {\n\t\t\tconst entry = local.options[index] as TOption | TOptionGroup;\n\t\t\tconst groupChildren = resolveGroupChildren(entry as TOptionGroup, local.optionGroupChildren);\n\n\t\t\tif (groupChildren !== undefined) {\n\t\t\t\tconst groupItems = groupChildren.map((option) => {\n\t\t\t\t\tconst value = String(resolveAccessor(option, local.optionValue, defaultTextValue));\n\t\t\t\t\tconst label = resolveAccessor(option, local.optionLabel, defaultTextValue);\n\t\t\t\t\tconst textValue = resolveAccessor(option, local.optionTextValue, () => label);\n\t\t\t\t\tconst disabled = Boolean(resolveAccessor(option, local.optionDisabled, () => false));\n\t\t\t\t\tconst item = {\n\t\t\t\t\t\tkey: `${value}-${itemIndex}`,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\ttextValue,\n\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\trawValue: option,\n\t\t\t\t\t};\n\n\t\t\t\t\titemIndex += 1;\n\n\t\t\t\t\treturn item;\n\t\t\t\t});\n\n\t\t\t\tgroups.push({\n\t\t\t\t\tkey: `group-${index}`,\n\t\t\t\t\ttextValue: defaultTextValue(entry),\n\t\t\t\t\trawValue: entry as TOptionGroup,\n\t\t\t\t\titems: groupItems,\n\t\t\t\t});\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst option = entry as TOption;\n\t\t\tconst value = String(resolveAccessor(option, local.optionValue, defaultTextValue));\n\t\t\tconst label = resolveAccessor(option, local.optionLabel, defaultTextValue);\n\t\t\tconst textValue = resolveAccessor(option, local.optionTextValue, () => label);\n\t\t\tconst disabled = Boolean(resolveAccessor(option, local.optionDisabled, () => false));\n\n\t\t\tlooseItems.push({\n\t\t\t\tkey: `${value}-${itemIndex}`,\n\t\t\t\tvalue,\n\t\t\t\tlabel,\n\t\t\t\ttextValue,\n\t\t\t\tdisabled,\n\t\t\t\trawValue: option,\n\t\t\t});\n\n\t\t\titemIndex += 1;\n\t\t}\n\n\t\tif (looseItems.length > 0) {\n\t\t\tgroups.unshift({\n\t\t\t\tkey: 'group-root',\n\t\t\t\ttextValue: '',\n\t\t\t\titems: looseItems,\n\t\t\t});\n\t\t}\n\n\t\treturn groups;\n\t});\n\n\tconst allItems = createMemo(() => normalizedGroups().flatMap((group) => group.items));\n\n\tconst selectedItem = createMemo(() => {\n\t\tlet selectedOption = internalValue();\n\n\t\tif (isControlledValue()) {\n\t\t\tselectedOption = local.value ?? null;\n\t\t}\n\n\t\tif (selectedOption == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst selectedValue = String(\n\t\t\tresolveAccessor<TOption, string | number>(\n\t\t\t\tselectedOption as TOption,\n\t\t\t\tlocal.optionValue,\n\t\t\t\tdefaultTextValue as (value: TOption) => string | number,\n\t\t\t),\n\t\t);\n\n\t\treturn allItems().find((item) => item.value === selectedValue) ?? null;\n\t});\n\n\tconst visibleGroups = createMemo(() => {\n\t\tconst currentInput = filterValue().trim();\n\n\t\treturn normalizedGroups()\n\t\t\t.map((group) => ({\n\t\t\t\t...group,\n\t\t\t\titems: group.items.filter((item) => filter()(item.rawValue, currentInput)),\n\t\t\t}))\n\t\t\t.filter((group) => group.items.length > 0);\n\t});\n\n\tconst visibleItems = createMemo(() => visibleGroups().flatMap((group) => group.items));\n\tconst isOpen = createMemo(\n\t\t() => (isControlledOpen() ? Boolean(local.open) : internalOpen()) && visibleItems().length > 0,\n\t);\n\n\tconst setOpen = (value: boolean) => {\n\t\tif (!isControlledOpen()) {\n\t\t\tsetInternalOpen(value);\n\t\t}\n\n\t\tlocal.onOpenChange?.(value);\n\t};\n\n\tconst setSelectedOption = (value: TOption | null) => {\n\t\tif (!isControlledValue()) {\n\t\t\tsetInternalValue(() => value);\n\t\t}\n\n\t\tlocal.onChange?.(value);\n\t};\n\n\tconst setDisplayedInputValue = (value: string, emitChange = false) => {\n\t\tif (!isControlledInputValue()) {\n\t\t\tsetInternalInputValue(value);\n\t\t}\n\n\t\tif (emitChange) {\n\t\t\tlocal.onInputChange?.(value);\n\t\t}\n\t};\n\n\tconst restoreInputFromSelection = () => {\n\t\tsetDisplayedInputValue(selectedItem()?.label ?? '', isControlledInputValue());\n\t\tsetFilterValue('');\n\t};\n\n\tconst highlightByIndex = (index: number) => {\n\t\tconst items = visibleItems();\n\n\t\tif (items.length === 0) {\n\t\t\tsetShouldScrollHighlightedItem(false);\n\t\t\tsetHighlightedKey(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst boundedIndex = Math.min(Math.max(index, 0), items.length - 1);\n\t\tsetShouldScrollHighlightedItem(true);\n\t\tsetHighlightedKey(items[boundedIndex]?.key ?? null);\n\t};\n\n\tconst highlightFirst = () => highlightByIndex(0);\n\tconst highlightLast = () => highlightByIndex(visibleItems().length - 1);\n\n\tconst highlightNext = () => {\n\t\tconst items = visibleItems();\n\t\tconst index = items.findIndex((item) => item.key === highlightedKey());\n\t\thighlightByIndex(index >= 0 ? index + 1 : 0);\n\t};\n\n\tconst highlightPrevious = () => {\n\t\tconst items = visibleItems();\n\t\tconst index = items.findIndex((item) => item.key === highlightedKey());\n\t\thighlightByIndex(index >= 0 ? index - 1 : items.length - 1);\n\t};\n\n\tconst openPopup = (strategy: 'first' | 'last' | 'preserve' = 'first') => {\n\t\tif (local.disabled || local.readOnly || visibleItems().length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetOpen(true);\n\n\t\tif (strategy === 'last') {\n\t\t\thighlightLast();\n\t\t\treturn;\n\t\t}\n\n\t\tif (strategy === 'preserve') {\n\t\t\tif (highlightedKey() !== null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selectedItem()) {\n\t\t\t\tsetShouldScrollHighlightedItem(true);\n\t\t\t\tsetHighlightedKey(selectedItem()!.key);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\thighlightFirst();\n\t};\n\n\tconst openAllOptions = (strategy: 'first' | 'last' | 'preserve' = 'first') => {\n\t\tif (local.disabled || local.readOnly || allItems().length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetFilterValue('');\n\t\tsetOpen(true);\n\n\t\tif (strategy === 'last') {\n\t\t\thighlightLast();\n\t\t\treturn;\n\t\t}\n\n\t\tif (strategy === 'preserve') {\n\t\t\tif (highlightedKey() !== null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selectedItem()) {\n\t\t\t\tsetShouldScrollHighlightedItem(true);\n\t\t\t\tsetHighlightedKey(selectedItem()!.key);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\thighlightFirst();\n\t};\n\n\tconst closePopup = (restoreInput = true) => {\n\t\tsetOpen(false);\n\t\tsetShouldScrollHighlightedItem(false);\n\t\tsetHighlightedKey(null);\n\n\t\tif (restoreInput) {\n\t\t\trestoreInputFromSelection();\n\t\t}\n\t};\n\n\tconst selectItem = (item: ComboboxItemData<TOption>) => {\n\t\tif (item.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetSelectedOption(item.rawValue);\n\t\tsetDisplayedInputValue(item.label);\n\t\tsetFilterValue('');\n\t\tsetShouldScrollHighlightedItem(false);\n\t\tsetHighlightedKey(item.key);\n\n\t\tif (local.closeOnSelection) {\n\t\t\tsetOpen(false);\n\t\t}\n\n\t\tinputRef()?.focus();\n\t};\n\n\tconst clearPendingInput = () => {\n\t\tif (selectedItem() === null) {\n\t\t\tsetDisplayedInputValue('', isControlledInputValue());\n\t\t\tsetFilterValue('');\n\t\t\treturn;\n\t\t}\n\n\t\trestoreInputFromSelection();\n\t};\n\n\tconst clearSelectedItem = () => {\n\t\tsetSelectedOption(null);\n\t\tsetDisplayedInputValue('', true);\n\t\tsetFilterValue('');\n\t\tsetShouldScrollHighlightedItem(false);\n\t\tsetHighlightedKey(null);\n\t\tsetOpen(false);\n\t\tinputRef()?.focus();\n\t};\n\n\tcreateEffect(() => {\n\t\tif (!isControlledValue()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (selectedItem() !== null) {\n\t\t\trestoreInputFromSelection();\n\t\t\treturn;\n\t\t}\n\n\t\tsetFilterValue('');\n\n\t\tif (!isControlledInputValue()) {\n\t\t\tsetDisplayedInputValue('');\n\t\t}\n\t});\n\n\tcreateEffect(() => {\n\t\tconst items = visibleItems();\n\t\tconst selected = selectedItem();\n\n\t\tif (items.length === 0) {\n\t\t\tsetShouldScrollHighlightedItem(false);\n\t\t\tsetHighlightedKey(null);\n\t\t\tsetOpen(false);\n\t\t\treturn;\n\t\t}\n\n\t\tif (highlightedKey() && items.some((item) => item.key === highlightedKey())) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isOpen()) {\n\t\t\tif (selected && items.some((item) => item.key === selected.key)) {\n\t\t\t\tsetShouldScrollHighlightedItem(true);\n\t\t\t\tsetHighlightedKey(selected.key);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\thighlightFirst();\n\t\t}\n\t});\n\n\tonMount(() => {\n\t\trestoreInputFromSelection();\n\n\t\tconst handlePointerDown = (event: PointerEvent) => {\n\t\t\tconst root = rootRef();\n\n\t\t\tif (!root || root.contains(event.target as Node)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclosePopup(true);\n\t\t};\n\n\t\tdocument.addEventListener('pointerdown', handlePointerDown);\n\n\t\tonCleanup(() => {\n\t\t\tdocument.removeEventListener('pointerdown', handlePointerDown);\n\t\t});\n\t});\n\n\tconst context: ComboboxContextValue<TOption, TOptionGroup> = {\n\t\trootId,\n\t\trootRef,\n\t\tsetRootRef,\n\t\tinputRef,\n\t\tsetInputRef,\n\t\tinputValue,\n\t\tsetInputValue: (value) => {\n\t\t\tconst selected = selectedItem();\n\n\t\t\tif (selected && value !== selected.label) {\n\t\t\t\tsetSelectedOption(null);\n\t\t\t}\n\n\t\t\tsetDisplayedInputValue(value, true);\n\t\t\tsetFilterValue(value);\n\n\t\t\tif (value.trim() === '') {\n\t\t\t\tclosePopup(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\topenPopup('first');\n\t\t},\n\t\tisOpen,\n\t\topenPopup,\n\t\topenAllOptions,\n\t\tclosePopup,\n\t\ttogglePopup: () => {\n\t\t\tif (isOpen()) {\n\t\t\t\tclosePopup(true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\topenPopup('first');\n\t\t},\n\t\tvisibleGroups,\n\t\tvisibleItems,\n\t\tselectedItem,\n\t\thighlightedKey,\n\t\tshouldScrollHighlightedItem,\n\t\tsetHighlightedKey: (key) => {\n\t\t\tsetShouldScrollHighlightedItem(false);\n\t\t\tsetHighlightedKey(key);\n\t\t},\n\t\thighlightNext,\n\t\thighlightPrevious,\n\t\thighlightFirst,\n\t\thighlightLast,\n\t\tselectItem,\n\t\tgetItemId: (key) => `${rootId}-item-${key}`,\n\t\titemComponent: local.itemComponent,\n\t\tgroupComponent: local.groupComponent,\n\t\tplaceholder: () => local.placeholder,\n\t\tdisabled: () => Boolean(local.disabled),\n\t\treadOnly: () => Boolean(local.readOnly),\n\t\trequired: () => Boolean(local.required),\n\t\tname: () => local.name,\n\t\tclearPendingInput,\n\t\tclearSelectedItem,\n\t};\n\n\tconst rootClass = () => clsx(comboboxClass.root, local.class);\n\n\tconst handleFocusOut: JSX.FocusEventHandlerUnion<HTMLDivElement, FocusEvent> = (event) => {\n\t\tcallEventHandler(local.onFocusOut, event);\n\n\t\tconst nextTarget = event.relatedTarget as Node | null;\n\n\t\tif (nextTarget && rootRef()?.contains(nextTarget)) {\n\t\t\treturn;\n\t\t}\n\n\t\tqueueMicrotask(() => {\n\t\t\tconst activeElement = document.activeElement;\n\n\t\t\tif (activeElement instanceof Node && rootRef()?.contains(activeElement)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclosePopup(true);\n\t\t});\n\t};\n\n\treturn (\n\t\t<ComboboxContext.Provider value={context}>\n\t\t\t<div\n\t\t\t\tclass={rootClass()}\n\t\t\t\tref={setRootRef}\n\t\t\t\tonFocusOut={handleFocusOut}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{local.children ? (\n\t\t\t\t\tresolvedChildren()\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ComboboxControl>\n\t\t\t\t\t\t\t<ComboboxInput aria-label={local.placeholder ?? 'Combobox'} />\n\t\t\t\t\t\t\t<ComboboxTrigger />\n\t\t\t\t\t\t</ComboboxControl>\n\t\t\t\t\t\t<ComboboxPortal>\n\t\t\t\t\t\t\t<ComboboxContent>\n\t\t\t\t\t\t\t\t<ComboboxListbox />\n\t\t\t\t\t\t\t</ComboboxContent>\n\t\t\t\t\t\t</ComboboxPortal>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</ComboboxContext.Provider>\n\t);\n}\n"]}
|
|
@@ -15,12 +15,14 @@ export interface ComboboxContextValue<TOption, TOptionGroup> {
|
|
|
15
15
|
setInputValue: (value: string) => void;
|
|
16
16
|
isOpen: Accessor<boolean>;
|
|
17
17
|
openPopup: (strategy?: 'first' | 'last' | 'preserve') => void;
|
|
18
|
+
openAllOptions: (strategy?: 'first' | 'last' | 'preserve') => void;
|
|
18
19
|
closePopup: (restoreInput?: boolean) => void;
|
|
19
20
|
togglePopup: () => void;
|
|
20
21
|
visibleGroups: Accessor<Array<ComboboxGroupData<TOptionGroup, TOption>>>;
|
|
21
22
|
visibleItems: Accessor<Array<ComboboxItemData<TOption>>>;
|
|
22
23
|
selectedItem: Accessor<ComboboxItemData<TOption> | null>;
|
|
23
24
|
highlightedKey: Accessor<string | null>;
|
|
25
|
+
shouldScrollHighlightedItem: Accessor<boolean>;
|
|
24
26
|
setHighlightedKey: (key: string | null) => void;
|
|
25
27
|
highlightNext: () => void;
|
|
26
28
|
highlightPrevious: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/components/combobox/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,aAAa,EAAe,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/components/combobox/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,aAAa,EAAe,UAAU,EAAE,MAAM,UAAU,CAAC;AA6CjG,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,EAAkC,CAAC;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,EAA0B,CAAC;AAE3E,MAAM,UAAU,kBAAkB;IACjC,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,OAAsD,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,sBAAsB;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,OAAqC,CAAC;AAC9C,CAAC","sourcesContent":["import { type Accessor, type Component, createContext, type Setter, useContext } from 'solid-js';\nimport type { ComboboxGroupData, ComboboxItemData, ComboboxRenderGroupProps, ComboboxRenderItemProps } from './types';\n\ninterface ComboboxItemState<TOption> {\n\titem: ComboboxItemData<TOption>;\n\tselected: boolean;\n\thighlighted: boolean;\n}\n\nexport interface ComboboxContextValue<TOption, TOptionGroup> {\n\trootId: string;\n\trootRef: Accessor<HTMLDivElement | undefined>;\n\tsetRootRef: Setter<HTMLDivElement | undefined>;\n\tinputRef: Accessor<HTMLInputElement | undefined>;\n\tsetInputRef: Setter<HTMLInputElement | undefined>;\n\tinputValue: Accessor<string>;\n\tsetInputValue: (value: string) => void;\n\tisOpen: Accessor<boolean>;\n\topenPopup: (strategy?: 'first' | 'last' | 'preserve') => void;\n\topenAllOptions: (strategy?: 'first' | 'last' | 'preserve') => void;\n\tclosePopup: (restoreInput?: boolean) => void;\n\ttogglePopup: () => void;\n\tvisibleGroups: Accessor<Array<ComboboxGroupData<TOptionGroup, TOption>>>;\n\tvisibleItems: Accessor<Array<ComboboxItemData<TOption>>>;\n\tselectedItem: Accessor<ComboboxItemData<TOption> | null>;\n\thighlightedKey: Accessor<string | null>;\n\tshouldScrollHighlightedItem: Accessor<boolean>;\n\tsetHighlightedKey: (key: string | null) => void;\n\thighlightNext: () => void;\n\thighlightPrevious: () => void;\n\thighlightFirst: () => void;\n\thighlightLast: () => void;\n\tselectItem: (item: ComboboxItemData<TOption>) => void;\n\tgetItemId: (key: string) => string;\n\titemComponent?: Component<ComboboxRenderItemProps<TOption>>;\n\tgroupComponent?: Component<ComboboxRenderGroupProps<TOptionGroup, TOption>>;\n\tplaceholder: Accessor<string | undefined>;\n\tdisabled: Accessor<boolean>;\n\treadOnly: Accessor<boolean>;\n\trequired: Accessor<boolean>;\n\tname: Accessor<string | undefined>;\n\tclearPendingInput: () => void;\n\tclearSelectedItem: () => void;\n}\n\nexport const ComboboxContext = createContext<ComboboxContextValue<any, any>>();\nexport const ComboboxItemContext = createContext<ComboboxItemState<any>>();\n\nexport function useComboboxContext<TOption, TOptionGroup>() {\n\tconst context = useContext(ComboboxContext);\n\n\tif (!context) {\n\t\tthrow new Error('Combobox components must be used within Combobox.');\n\t}\n\n\treturn context as ComboboxContextValue<TOption, TOptionGroup>;\n}\n\nexport function useComboboxItemContext<TOption>() {\n\tconst context = useContext(ComboboxItemContext);\n\n\tif (!context) {\n\t\tthrow new Error('Combobox item parts must be used within Combobox.Item.');\n\t}\n\n\treturn context as ComboboxItemState<TOption>;\n}\n"]}
|