@manafishrov/ui 1.4.1 → 1.4.2
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/components/Select.d.ts +1 -1
- package/dist/components/Select.js +78 -76
- package/dist/components/Select.js.map +1 -1
- package/dist/primitives/selectTriggerRef.d.ts +1 -0
- package/dist/primitives/selectTriggerRef.js +22 -0
- package/dist/primitives/selectTriggerRef.js.map +1 -0
- package/package.json +1 -1
- package/src/components/Select.tsx +8 -9
- package/src/primitives/selectTriggerRef.ts +33 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Select as SelectPrimitive } from '@ark-ui/solid/select';
|
|
2
1
|
import { Component, ComponentProps, JSX, JSXElement } from 'solid-js';
|
|
2
|
+
import { Select as SelectPrimitive } from '@ark-ui/solid/select';
|
|
3
3
|
export declare const SelectControl: (props: SelectPrimitive.ControlProps) => JSX.Element;
|
|
4
4
|
export declare const SelectItemContext: (props: SelectPrimitive.ItemContextProps) => JSX.Element;
|
|
5
5
|
export declare const SelectHiddenSelect: (props: SelectPrimitive.HiddenSelectProps) => JSX.Element;
|
|
@@ -1,111 +1,113 @@
|
|
|
1
|
-
import { delegateEvents as
|
|
2
|
-
import { select_exports as
|
|
3
|
-
import { splitProps as i, For as I } from "solid-js";
|
|
1
|
+
import { delegateEvents as z, createComponent as r, mergeProps as l, spread as S, insert as h, For as C, effect as I, setAttribute as x, className as k, template as g } from "solid-js/web";
|
|
2
|
+
import { select_exports as o } from "../node_modules/.bun/@ark-ui_solid@5.34.1_2e1854f049906f04/node_modules/@ark-ui/solid/dist/chunk/RJHFA54S.js";
|
|
4
3
|
import { cn as n } from "../node_modules/.bun/tailwind-variants@3.2.2_7ac958b541464b98/node_modules/tailwind-variants/dist/index.js";
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
import _ from "../_virtual/check.js";
|
|
5
|
+
import T from "../_virtual/close.js";
|
|
6
|
+
import L from "../_virtual/expand-more.js";
|
|
7
|
+
import { createSelectTriggerRef as y } from "../primitives/selectTriggerRef.js";
|
|
8
|
+
import { splitProps as i } from "solid-js";
|
|
9
|
+
var P = /* @__PURE__ */ g("<div role=tablist data-slot=select-tabs>"), V = /* @__PURE__ */ g("<button type=button role=tab>"), A = /* @__PURE__ */ g("<div data-slot=select-separator>");
|
|
10
|
+
const N = o.Control, O = o.ItemContext, W = o.HiddenSelect, q = (t) => {
|
|
10
11
|
const [e, s] = i(t, ["class"]);
|
|
11
|
-
return o
|
|
12
|
+
return r(o.List, l({
|
|
12
13
|
"data-slot": "select-list",
|
|
13
14
|
get class() {
|
|
14
15
|
return n("p-1 max-h-[min(var(--available-height),300px)] overflow-y-auto", e.class);
|
|
15
16
|
}
|
|
16
17
|
}, s));
|
|
17
|
-
},
|
|
18
|
+
}, B = o.Context, D = (t) => {
|
|
18
19
|
const [e, s] = i(t, ["class", "items", "value", "onValueChange"]);
|
|
19
20
|
return (() => {
|
|
20
|
-
var a =
|
|
21
|
-
return
|
|
21
|
+
var a = P();
|
|
22
|
+
return S(a, l({
|
|
22
23
|
get class() {
|
|
23
24
|
return n("gap-1 p-1 inline-flex rounded-md bg-muted", e.class);
|
|
24
25
|
}
|
|
25
|
-
}, s), !1, !0), h(a,
|
|
26
|
+
}, s), !1, !0), h(a, r(C, {
|
|
26
27
|
get each() {
|
|
27
28
|
return e.items;
|
|
28
29
|
},
|
|
29
|
-
children: (
|
|
30
|
-
const p = () => e.value ===
|
|
30
|
+
children: (d) => {
|
|
31
|
+
const p = () => e.value === d.value;
|
|
31
32
|
return (() => {
|
|
32
|
-
var
|
|
33
|
-
return
|
|
34
|
-
typeof e.onValueChange == "function" &&
|
|
35
|
-
}, h(
|
|
36
|
-
var f =
|
|
37
|
-
return f !== c.e && (
|
|
33
|
+
var u = V();
|
|
34
|
+
return u.$$click = () => {
|
|
35
|
+
typeof e.onValueChange == "function" && d.disabled !== !0 && e.onValueChange(d.value);
|
|
36
|
+
}, h(u, () => d.label), I((c) => {
|
|
37
|
+
var f = d.disabled === !0, m = p(), v = p() ? "active" : "inactive", b = n("h-8 px-3 text-sm rounded-sm transition-colors", "data-[state=active]:shadow-sm data-[state=active]:bg-background data-[state=active]:text-foreground", "data-[state=inactive]:text-muted-foreground hover:data-[state=inactive]:text-foreground", "disabled:pointer-events-none disabled:opacity-50");
|
|
38
|
+
return f !== c.e && (u.disabled = c.e = f), m !== c.t && x(u, "aria-selected", c.t = m), v !== c.a && x(u, "data-state", c.a = v), b !== c.o && k(u, c.o = b), c;
|
|
38
39
|
}, {
|
|
39
40
|
e: void 0,
|
|
40
41
|
t: void 0,
|
|
41
42
|
a: void 0,
|
|
42
43
|
o: void 0
|
|
43
|
-
}),
|
|
44
|
+
}), u;
|
|
44
45
|
})();
|
|
45
46
|
}
|
|
46
47
|
})), a;
|
|
47
48
|
})();
|
|
48
|
-
},
|
|
49
|
+
}, E = (t) => {
|
|
49
50
|
const [e, s] = i(t, ["class", "positioning"]), a = {
|
|
50
51
|
placement: "bottom-start",
|
|
51
52
|
gutter: 4,
|
|
52
53
|
sameWidth: !0,
|
|
53
54
|
...e.positioning
|
|
54
55
|
};
|
|
55
|
-
return o
|
|
56
|
+
return r(o.Root, l({
|
|
56
57
|
get class() {
|
|
57
58
|
return n("flex w-full flex-col", e.class);
|
|
58
59
|
},
|
|
59
60
|
positioning: a
|
|
60
61
|
}, s));
|
|
61
|
-
},
|
|
62
|
-
Tabs:
|
|
63
|
-
}),
|
|
62
|
+
}, J = Object.assign(E, {
|
|
63
|
+
Tabs: D
|
|
64
|
+
}), Q = (t) => {
|
|
64
65
|
const [e, s] = i(t, ["class"]);
|
|
65
|
-
return o
|
|
66
|
+
return r(o.Label, l({
|
|
66
67
|
get class() {
|
|
67
68
|
return n("mb-1.5 gap-2 text-sm font-medium flex items-center leading-none select-none group-data-disabled:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", e.class);
|
|
68
69
|
}
|
|
69
70
|
}, s));
|
|
70
|
-
},
|
|
71
|
+
}, U = (t) => {
|
|
71
72
|
const [e, s] = i(t, ["class"]);
|
|
72
|
-
return o
|
|
73
|
+
return r(o.ItemGroup, l({
|
|
73
74
|
"data-slot": "select-group",
|
|
74
75
|
get class() {
|
|
75
76
|
return n("scroll-my-1", e.class);
|
|
76
77
|
}
|
|
77
78
|
}, s));
|
|
78
|
-
},
|
|
79
|
+
}, X = (t) => {
|
|
79
80
|
const [e, s] = i(t, ["class"]);
|
|
80
|
-
return o
|
|
81
|
+
return r(o.ValueText, l({
|
|
81
82
|
"data-slot": "select-value",
|
|
82
83
|
get class() {
|
|
83
84
|
return n("flex flex-1 text-left", e.class);
|
|
84
85
|
}
|
|
85
86
|
}, s));
|
|
86
|
-
},
|
|
87
|
-
const [e, s] = i(t, ["class", "size"]), a = e.size ?? "default";
|
|
88
|
-
return o
|
|
87
|
+
}, Y = (t) => {
|
|
88
|
+
const [e, s] = i(t, ["class", "size", "ref"]), a = e.size ?? "default", d = typeof e.ref == "function" ? y(e.ref) : y();
|
|
89
|
+
return r(o.Trigger, l({
|
|
90
|
+
ref: d,
|
|
89
91
|
"data-slot": "select-trigger",
|
|
90
92
|
"data-size": a,
|
|
91
93
|
get class() {
|
|
92
94
|
return n('px-2.5 text-sm *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*="size-"])]:size-4 gap-1.5 min-w-0 shadow-xs flex w-full items-center justify-between rounded-lg border border-input bg-transparent whitespace-nowrap transition-[color,box-shadow] outline-none select-none disabled:cursor-not-allowed disabled:opacity-50 data-placeholder-shown:text-muted-foreground *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center dark:bg-input/30 dark:hover:bg-input/50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*="size-"])]:text-muted-foreground', "data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)]", "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[focus-visible]:border-ring data-[focus-visible]:ring-[3px] data-[focus-visible]:ring-ring/50", "data-[invalid=true]:border-destructive data-[invalid=true]:ring-[3px] data-[invalid=true]:ring-destructive/20 dark:data-[invalid=true]:ring-destructive/40", "data-[disabled=true]:bg-input/50 data-[disabled=true]:opacity-50 dark:data-[disabled=true]:bg-input/80", "data-[readonly=true]:cursor-default data-[readonly=true]:focus-visible:border-input data-[readonly=true]:focus-visible:ring-0 data-[readonly=true]:data-[focus-visible]:border-input data-[readonly=true]:data-[focus-visible]:ring-0", e.class);
|
|
93
95
|
}
|
|
94
96
|
}, s));
|
|
95
|
-
},
|
|
97
|
+
}, Z = (t) => {
|
|
96
98
|
const [e, s] = i(t, ["class", "children"]);
|
|
97
|
-
return o
|
|
99
|
+
return r(o.Indicator, l({
|
|
98
100
|
get class() {
|
|
99
101
|
return n("opacity-50 transition-transform data-[state=open]:rotate-180", e.class);
|
|
100
102
|
}
|
|
101
103
|
}, s, {
|
|
102
104
|
get children() {
|
|
103
|
-
return e.children ??
|
|
105
|
+
return e.children ?? r(L, {
|
|
104
106
|
class: "size-4"
|
|
105
107
|
});
|
|
106
108
|
}
|
|
107
109
|
}));
|
|
108
|
-
},
|
|
110
|
+
}, w = (t, e) => {
|
|
109
111
|
if (typeof t == "function") {
|
|
110
112
|
t(e);
|
|
111
113
|
return;
|
|
@@ -114,104 +116,104 @@ const F = r.Control, M = r.ItemContext, N = r.HiddenSelect, O = (t) => {
|
|
|
114
116
|
const [s, a] = t;
|
|
115
117
|
s(a, e);
|
|
116
118
|
}
|
|
117
|
-
},
|
|
119
|
+
}, ee = (t) => {
|
|
118
120
|
const [e, s] = i(t, ["class", "children", "tabIndex", "onClick", "onKeyDown"]);
|
|
119
|
-
return o
|
|
121
|
+
return r(o.ClearTrigger, l({
|
|
120
122
|
get class() {
|
|
121
123
|
return n("p-0.5 rounded-[4px] text-muted-foreground transition-colors hover:text-foreground focus-visible:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none", e.class);
|
|
122
124
|
},
|
|
123
125
|
onClick: (a) => {
|
|
124
|
-
a.stopPropagation(),
|
|
126
|
+
a.stopPropagation(), w(e.onClick, a);
|
|
125
127
|
},
|
|
126
128
|
onKeyDown: (a) => {
|
|
127
|
-
(a.key === "Enter" || a.key === " ") && a.stopPropagation(),
|
|
129
|
+
(a.key === "Enter" || a.key === " ") && a.stopPropagation(), w(e.onKeyDown, a);
|
|
128
130
|
}
|
|
129
131
|
}, s, {
|
|
130
132
|
get tabIndex() {
|
|
131
133
|
return e.tabIndex ?? 0;
|
|
132
134
|
},
|
|
133
135
|
get children() {
|
|
134
|
-
return e.children ??
|
|
136
|
+
return e.children ?? r(T, {
|
|
135
137
|
class: "size-3.5"
|
|
136
138
|
});
|
|
137
139
|
}
|
|
138
140
|
}));
|
|
139
|
-
},
|
|
141
|
+
}, te = (t) => {
|
|
140
142
|
const [e, s] = i(t, ["class"]);
|
|
141
|
-
return o
|
|
143
|
+
return r(o.Positioner, l({
|
|
142
144
|
get class() {
|
|
143
145
|
return n("isolate z-50", e.class);
|
|
144
146
|
}
|
|
145
147
|
}, s));
|
|
146
|
-
},
|
|
148
|
+
}, se = (t) => {
|
|
147
149
|
const [e, s] = i(t, ["class"]);
|
|
148
|
-
return o
|
|
150
|
+
return r(o.Content, l({
|
|
149
151
|
"data-slot": "select-content",
|
|
150
152
|
get class() {
|
|
151
153
|
return n("shadow-md relative isolate z-50 max-h-(--available-height) w-(--reference-width) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-input bg-popover text-popover-foreground duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95", "outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[focus-visible]:border-ring data-[focus-visible]:ring-[3px] data-[focus-visible]:ring-ring/50", e.class);
|
|
152
154
|
}
|
|
153
155
|
}, s));
|
|
154
|
-
},
|
|
156
|
+
}, ae = (t) => {
|
|
155
157
|
const [e, s] = i(t, ["class"]);
|
|
156
|
-
return o
|
|
158
|
+
return r(o.ItemGroupLabel, l({
|
|
157
159
|
"data-slot": "select-group-label",
|
|
158
160
|
get class() {
|
|
159
161
|
return n("px-1.5 py-1 text-xs text-muted-foreground", e.class);
|
|
160
162
|
}
|
|
161
163
|
}, s));
|
|
162
|
-
},
|
|
164
|
+
}, re = (t) => {
|
|
163
165
|
const [e, s] = i(t, ["class", "children"]);
|
|
164
|
-
return o
|
|
166
|
+
return r(o.Item, l({
|
|
165
167
|
"data-slot": "select-item",
|
|
166
168
|
get class() {
|
|
167
169
|
return n("gap-2 py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:gap-2 relative flex w-full cursor-default items-center rounded-sm outline-hidden select-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 *:[span]:last:flex *:[span]:last:items-center", e.class);
|
|
168
170
|
}
|
|
169
171
|
}, s, {
|
|
170
172
|
get children() {
|
|
171
|
-
return [o
|
|
173
|
+
return [r(o.ItemText, {
|
|
172
174
|
class: "gap-2 flex flex-1 shrink-0 whitespace-nowrap",
|
|
173
175
|
get children() {
|
|
174
176
|
return e.children;
|
|
175
177
|
}
|
|
176
|
-
}), o
|
|
178
|
+
}), r(o.ItemIndicator, {
|
|
177
179
|
class: "right-2 size-4 pointer-events-none absolute flex items-center justify-center",
|
|
178
180
|
get children() {
|
|
179
|
-
return
|
|
181
|
+
return r(_, {
|
|
180
182
|
class: "pointer-events-none"
|
|
181
183
|
});
|
|
182
184
|
}
|
|
183
185
|
})];
|
|
184
186
|
}
|
|
185
187
|
}));
|
|
186
|
-
},
|
|
188
|
+
}, oe = (t) => {
|
|
187
189
|
const [e, s] = i(t, ["class"]);
|
|
188
190
|
return (() => {
|
|
189
|
-
var a =
|
|
190
|
-
return
|
|
191
|
+
var a = A();
|
|
192
|
+
return S(a, l({
|
|
191
193
|
get class() {
|
|
192
194
|
return n("-mx-1 my-1 pointer-events-none h-px bg-border", e.class);
|
|
193
195
|
}
|
|
194
196
|
}, s), !1, !1), a;
|
|
195
197
|
})();
|
|
196
198
|
};
|
|
197
|
-
|
|
199
|
+
z(["click"]);
|
|
198
200
|
export {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
201
|
+
J as Select,
|
|
202
|
+
ee as SelectClearTrigger,
|
|
203
|
+
se as SelectContent,
|
|
204
|
+
B as SelectContext,
|
|
205
|
+
N as SelectControl,
|
|
206
|
+
U as SelectGroup,
|
|
207
|
+
W as SelectHiddenSelect,
|
|
208
|
+
Z as SelectIndicator,
|
|
209
|
+
re as SelectItem,
|
|
210
|
+
O as SelectItemContext,
|
|
211
|
+
ae as SelectItemGroupLabel,
|
|
212
|
+
Q as SelectLabel,
|
|
213
|
+
q as SelectList,
|
|
214
|
+
te as SelectPositioner,
|
|
215
|
+
oe as SelectSeparator,
|
|
216
|
+
Y as SelectTrigger,
|
|
217
|
+
X as SelectValue
|
|
216
218
|
};
|
|
217
219
|
//# sourceMappingURL=Select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sources":["../../src/components/Select.tsx"],"sourcesContent":["import { Select as SelectPrimitive } from '@ark-ui/solid/select';\nimport {\n type Component,\n type ComponentProps,\n type JSX,\n type JSXElement,\n For,\n splitProps,\n} from 'solid-js';\nimport { cn } from 'tailwind-variants';\nimport CheckIcon from '~icons/material-symbols/check';\nimport CloseIcon from '~icons/material-symbols/close';\nimport ExpandMoreIcon from '~icons/material-symbols/expand-more';\n\nexport const SelectControl = SelectPrimitive.Control;\nexport const SelectItemContext = SelectPrimitive.ItemContext;\nexport const SelectHiddenSelect = SelectPrimitive.HiddenSelect;\nexport const SelectList: Component<SelectPrimitive.ListProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.List\n data-slot='select-list'\n class={cn('p-1 max-h-[min(var(--available-height),300px)] overflow-y-auto', local.class)}\n {...others}\n />\n );\n};\nexport const SelectContext = SelectPrimitive.Context;\n\ntype SelectComponent = (<TItem extends { value: string; label: string }>(\n props: SelectPrimitive.RootProps<TItem> & { class?: string },\n) => JSXElement) & {\n Tabs: <TItem extends { value: string; label: string }>(\n props: SelectTabsProps<TItem>,\n ) => JSXElement;\n};\n\nexport type SelectTabsTab<TItem extends { value: string; label: string }> = {\n value: TItem['value'];\n label: string;\n disabled?: boolean;\n};\n\nexport type SelectTabsProps<TItem extends { value: string; label: string }> =\n ComponentProps<'div'> & {\n items: SelectTabsTab<TItem>[];\n value?: TItem['value'];\n onValueChange?: (value: TItem['value']) => void;\n };\n\nconst SelectTabs = <TItem extends { value: string; label: string }>(\n props: SelectTabsProps<TItem>,\n): JSXElement => {\n const [local, others] = splitProps(props, ['class', 'items', 'value', 'onValueChange']);\n return (\n <div\n role='tablist'\n data-slot='select-tabs'\n class={cn('gap-1 p-1 inline-flex rounded-md bg-muted', local.class)}\n {...others}\n >\n <For each={local.items}>\n {(tab) => {\n const isActive = (): boolean => local.value === tab.value;\n return (\n <button\n type='button'\n role='tab'\n disabled={tab.disabled === true}\n aria-selected={isActive()}\n data-state={isActive() ? 'active' : 'inactive'}\n class={cn(\n 'h-8 px-3 text-sm rounded-sm transition-colors',\n 'data-[state=active]:shadow-sm data-[state=active]:bg-background data-[state=active]:text-foreground',\n 'data-[state=inactive]:text-muted-foreground hover:data-[state=inactive]:text-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n )}\n onClick={() => {\n if (typeof local.onValueChange === 'function' && tab.disabled !== true) {\n local.onValueChange(tab.value);\n }\n }}\n >\n {tab.label}\n </button>\n );\n }}\n </For>\n </div>\n );\n};\n\nconst SelectRoot = <TItem extends { value: string; label: string }>(\n props: SelectPrimitive.RootProps<TItem> & { class?: string },\n): JSXElement => {\n const [local, others] = splitProps(props, ['class', 'positioning']);\n\n const positioning: NonNullable<SelectPrimitive.RootProps<TItem>['positioning']> = {\n placement: 'bottom-start',\n gutter: 4,\n sameWidth: true,\n ...local.positioning,\n };\n\n return (\n <SelectPrimitive.Root\n class={cn('flex w-full flex-col', local.class)}\n positioning={positioning}\n {...others}\n />\n );\n};\n\nexport const Select: SelectComponent = Object.assign(SelectRoot, {\n Tabs: SelectTabs as SelectComponent['Tabs'],\n});\n\nexport const SelectLabel: Component<SelectPrimitive.LabelProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.Label\n class={cn(\n 'mb-1.5 gap-2 text-sm font-medium flex items-center leading-none select-none group-data-disabled:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n local.class,\n )}\n {...others}\n />\n );\n};\n\nexport const SelectGroup: Component<SelectPrimitive.ItemGroupProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.ItemGroup\n data-slot='select-group'\n class={cn('scroll-my-1', local.class)}\n {...others}\n />\n );\n};\n\nexport const SelectValue: Component<SelectPrimitive.ValueTextProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.ValueText\n data-slot='select-value'\n class={cn('flex flex-1 text-left', local.class)}\n {...others}\n />\n );\n};\n\nexport const SelectTrigger: Component<\n SelectPrimitive.TriggerProps & { size?: 'sm' | 'default' }\n> = (props) => {\n const [local, others] = splitProps(props, ['class', 'size']);\n const size = local.size ?? 'default';\n\n return (\n <SelectPrimitive.Trigger\n data-slot='select-trigger'\n data-size={size}\n class={cn(\n 'px-2.5 text-sm *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*=\"size-\"])]:size-4 gap-1.5 min-w-0 shadow-xs flex w-full items-center justify-between rounded-lg border border-input bg-transparent whitespace-nowrap transition-[color,box-shadow] outline-none select-none disabled:cursor-not-allowed disabled:opacity-50 data-placeholder-shown:text-muted-foreground *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center dark:bg-input/30 dark:hover:bg-input/50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:text-muted-foreground',\n 'data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)]',\n 'focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[focus-visible]:border-ring data-[focus-visible]:ring-[3px] data-[focus-visible]:ring-ring/50',\n 'data-[invalid=true]:border-destructive data-[invalid=true]:ring-[3px] data-[invalid=true]:ring-destructive/20 dark:data-[invalid=true]:ring-destructive/40',\n 'data-[disabled=true]:bg-input/50 data-[disabled=true]:opacity-50 dark:data-[disabled=true]:bg-input/80',\n 'data-[readonly=true]:cursor-default data-[readonly=true]:focus-visible:border-input data-[readonly=true]:focus-visible:ring-0 data-[readonly=true]:data-[focus-visible]:border-input data-[readonly=true]:data-[focus-visible]:ring-0',\n local.class,\n )}\n {...others}\n />\n );\n};\n\nexport const SelectIndicator: Component<SelectPrimitive.IndicatorProps> = (props) => {\n const [local, others] = splitProps(props, ['class', 'children']);\n return (\n <SelectPrimitive.Indicator\n class={cn('opacity-50 transition-transform data-[state=open]:rotate-180', local.class)}\n {...others}\n >\n {local.children ?? <ExpandMoreIcon class='size-4' />}\n </SelectPrimitive.Indicator>\n );\n};\n\nconst callEventHandler = <\n TElement,\n THandlerEvent extends Event,\n TEvent extends THandlerEvent & { currentTarget: TElement; target: Element },\n>(\n handler: JSX.EventHandlerUnion<TElement, THandlerEvent> | undefined,\n event: TEvent,\n): void => {\n if (typeof handler === 'function') {\n handler(event);\n return;\n }\n if (Array.isArray(handler)) {\n const [boundHandler, boundData] = handler;\n boundHandler(boundData, event);\n }\n};\n\nexport const SelectClearTrigger: Component<SelectPrimitive.ClearTriggerProps> = (props) => {\n const [local, others] = splitProps(props, [\n 'class',\n 'children',\n 'tabIndex',\n 'onClick',\n 'onKeyDown',\n ]);\n return (\n <SelectPrimitive.ClearTrigger\n class={cn(\n 'p-0.5 rounded-[4px] text-muted-foreground transition-colors hover:text-foreground focus-visible:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none',\n local.class,\n )}\n onClick={(event: MouseEvent & { currentTarget: HTMLButtonElement; target: Element }) => {\n event.stopPropagation();\n callEventHandler(local.onClick, event);\n }}\n onKeyDown={(event: KeyboardEvent & { currentTarget: HTMLButtonElement; target: Element }) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.stopPropagation();\n }\n callEventHandler(local.onKeyDown, event);\n }}\n {...others}\n tabIndex={local.tabIndex ?? 0}\n >\n {local.children ?? <CloseIcon class='size-3.5' />}\n </SelectPrimitive.ClearTrigger>\n );\n};\n\nexport const SelectPositioner: Component<SelectPrimitive.PositionerProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return <SelectPrimitive.Positioner class={cn('isolate z-50', local.class)} {...others} />;\n};\n\nexport const SelectContent: Component<SelectPrimitive.ContentProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.Content\n data-slot='select-content'\n class={cn(\n 'shadow-md relative isolate z-50 max-h-(--available-height) w-(--reference-width) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-input bg-popover text-popover-foreground duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[focus-visible]:border-ring data-[focus-visible]:ring-[3px] data-[focus-visible]:ring-ring/50',\n local.class,\n )}\n {...others}\n />\n );\n};\n\nexport const SelectItemGroupLabel: Component<SelectPrimitive.ItemGroupLabelProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.ItemGroupLabel\n data-slot='select-group-label'\n class={cn('px-1.5 py-1 text-xs text-muted-foreground', local.class)}\n {...others}\n />\n );\n};\n\nexport const SelectItem: Component<SelectPrimitive.ItemProps> = (props) => {\n const [local, others] = splitProps(props, ['class', 'children']);\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n class={cn(\n \"gap-2 py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:gap-2 relative flex w-full cursor-default items-center rounded-sm outline-hidden select-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 *:[span]:last:flex *:[span]:last:items-center\",\n local.class,\n )}\n {...others}\n >\n <SelectPrimitive.ItemText class='gap-2 flex flex-1 shrink-0 whitespace-nowrap'>\n {local.children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator class='right-2 size-4 pointer-events-none absolute flex items-center justify-center'>\n <CheckIcon class='pointer-events-none' />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n};\n\nexport const SelectSeparator: Component<ComponentProps<'div'>> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <div\n data-slot='select-separator'\n class={cn('-mx-1 my-1 pointer-events-none h-px bg-border', local.class)}\n {...others}\n />\n );\n};\n"],"names":["SelectControl","SelectPrimitive","Control","SelectItemContext","ItemContext","SelectHiddenSelect","HiddenSelect","SelectList","props","local","others","splitProps","_$createComponent","List","_$mergeProps","cn","class","SelectContext","Context","SelectTabs","_el$","_tmpl$","_$spread","_$insert","For","each","items","children","tab","isActive","value","_el$2","_tmpl$2","$$click","onValueChange","disabled","label","_$effect","_p$","_v$","_v$2","_v$3","_v$4","e","t","_$setAttribute","a","o","_$className","undefined","SelectRoot","positioning","placement","gutter","sameWidth","Root","Select","Object","assign","Tabs","SelectLabel","Label","SelectGroup","ItemGroup","SelectValue","ValueText","SelectTrigger","size","Trigger","SelectIndicator","Indicator","ExpandMoreIcon","callEventHandler","handler","event","Array","isArray","boundHandler","boundData","SelectClearTrigger","ClearTrigger","onClick","stopPropagation","onKeyDown","key","tabIndex","CloseIcon","SelectPositioner","Positioner","SelectContent","Content","SelectItemGroupLabel","ItemGroupLabel","SelectItem","Item","ItemText","ItemIndicator","CheckIcon","SelectSeparator","_el$3","_tmpl$3","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Select.js","sources":["../../src/components/Select.tsx"],"sourcesContent":["import type { Component, ComponentProps, JSX, JSXElement } from 'solid-js';\n\nimport { Select as SelectPrimitive } from '@ark-ui/solid/select';\nimport { cn } from 'tailwind-variants';\nimport CheckIcon from '~icons/material-symbols/check';\nimport CloseIcon from '~icons/material-symbols/close';\nimport ExpandMoreIcon from '~icons/material-symbols/expand-more';\n\nimport { createSelectTriggerRef } from '../primitives/selectTriggerRef';\n\nexport const SelectControl = SelectPrimitive.Control;\nexport const SelectItemContext = SelectPrimitive.ItemContext;\nexport const SelectHiddenSelect = SelectPrimitive.HiddenSelect;\nexport const SelectList: Component<SelectPrimitive.ListProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.List\n data-slot='select-list'\n class={cn('p-1 max-h-[min(var(--available-height),300px)] overflow-y-auto', local.class)}\n {...others}\n />\n );\n};\nexport const SelectContext = SelectPrimitive.Context;\n\ntype SelectComponent = (<TItem extends { value: string; label: string }>(\n props: SelectPrimitive.RootProps<TItem> & { class?: string },\n) => JSXElement) & {\n Tabs: <TItem extends { value: string; label: string }>(\n props: SelectTabsProps<TItem>,\n ) => JSXElement;\n};\n\nexport type SelectTabsTab<TItem extends { value: string; label: string }> = {\n value: TItem['value'];\n label: string;\n disabled?: boolean;\n};\n\nexport type SelectTabsProps<TItem extends { value: string; label: string }> =\n ComponentProps<'div'> & {\n items: SelectTabsTab<TItem>[];\n value?: TItem['value'];\n onValueChange?: (value: TItem['value']) => void;\n };\n\nconst SelectTabs = <TItem extends { value: string; label: string }>(\n props: SelectTabsProps<TItem>,\n): JSXElement => {\n const [local, others] = splitProps(props, ['class', 'items', 'value', 'onValueChange']);\n return (\n <div\n role='tablist'\n data-slot='select-tabs'\n class={cn('gap-1 p-1 inline-flex rounded-md bg-muted', local.class)}\n {...others}\n >\n <For each={local.items}>\n {(tab) => {\n const isActive = (): boolean => local.value === tab.value;\n return (\n <button\n type='button'\n role='tab'\n disabled={tab.disabled === true}\n aria-selected={isActive()}\n data-state={isActive() ? 'active' : 'inactive'}\n class={cn(\n 'h-8 px-3 text-sm rounded-sm transition-colors',\n 'data-[state=active]:shadow-sm data-[state=active]:bg-background data-[state=active]:text-foreground',\n 'data-[state=inactive]:text-muted-foreground hover:data-[state=inactive]:text-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n )}\n onClick={() => {\n if (typeof local.onValueChange === 'function' && tab.disabled !== true) {\n local.onValueChange(tab.value);\n }\n }}\n >\n {tab.label}\n </button>\n );\n }}\n </For>\n </div>\n );\n};\n\nconst SelectRoot = <TItem extends { value: string; label: string }>(\n props: SelectPrimitive.RootProps<TItem> & { class?: string },\n): JSXElement => {\n const [local, others] = splitProps(props, ['class', 'positioning']);\n\n const positioning: NonNullable<SelectPrimitive.RootProps<TItem>['positioning']> = {\n placement: 'bottom-start',\n gutter: 4,\n sameWidth: true,\n ...local.positioning,\n };\n\n return (\n <SelectPrimitive.Root\n class={cn('flex w-full flex-col', local.class)}\n positioning={positioning}\n {...others}\n />\n );\n};\n\nexport const Select: SelectComponent = Object.assign(SelectRoot, {\n Tabs: SelectTabs as SelectComponent['Tabs'],\n});\n\nexport const SelectLabel: Component<SelectPrimitive.LabelProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.Label\n class={cn(\n 'mb-1.5 gap-2 text-sm font-medium flex items-center leading-none select-none group-data-disabled:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n local.class,\n )}\n {...others}\n />\n );\n};\n\nexport const SelectGroup: Component<SelectPrimitive.ItemGroupProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.ItemGroup\n data-slot='select-group'\n class={cn('scroll-my-1', local.class)}\n {...others}\n />\n );\n};\n\nexport const SelectValue: Component<SelectPrimitive.ValueTextProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.ValueText\n data-slot='select-value'\n class={cn('flex flex-1 text-left', local.class)}\n {...others}\n />\n );\n};\n\nexport const SelectTrigger: Component<\n SelectPrimitive.TriggerProps & { size?: 'sm' | 'default' }\n> = (props) => {\n const [local, others] = splitProps(props, ['class', 'size', 'ref']);\n const size = local.size ?? 'default';\n const ref =\n typeof local.ref === 'function' ? createSelectTriggerRef(local.ref) : createSelectTriggerRef();\n\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot='select-trigger'\n data-size={size}\n class={cn(\n 'px-2.5 text-sm *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*=\"size-\"])]:size-4 gap-1.5 min-w-0 shadow-xs flex w-full items-center justify-between rounded-lg border border-input bg-transparent whitespace-nowrap transition-[color,box-shadow] outline-none select-none disabled:cursor-not-allowed disabled:opacity-50 data-placeholder-shown:text-muted-foreground *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center dark:bg-input/30 dark:hover:bg-input/50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:text-muted-foreground',\n 'data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)]',\n 'focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[focus-visible]:border-ring data-[focus-visible]:ring-[3px] data-[focus-visible]:ring-ring/50',\n 'data-[invalid=true]:border-destructive data-[invalid=true]:ring-[3px] data-[invalid=true]:ring-destructive/20 dark:data-[invalid=true]:ring-destructive/40',\n 'data-[disabled=true]:bg-input/50 data-[disabled=true]:opacity-50 dark:data-[disabled=true]:bg-input/80',\n 'data-[readonly=true]:cursor-default data-[readonly=true]:focus-visible:border-input data-[readonly=true]:focus-visible:ring-0 data-[readonly=true]:data-[focus-visible]:border-input data-[readonly=true]:data-[focus-visible]:ring-0',\n local.class,\n )}\n {...others}\n />\n );\n};\n\nexport const SelectIndicator: Component<SelectPrimitive.IndicatorProps> = (props) => {\n const [local, others] = splitProps(props, ['class', 'children']);\n return (\n <SelectPrimitive.Indicator\n class={cn('opacity-50 transition-transform data-[state=open]:rotate-180', local.class)}\n {...others}\n >\n {local.children ?? <ExpandMoreIcon class='size-4' />}\n </SelectPrimitive.Indicator>\n );\n};\n\nconst callEventHandler = <\n TElement,\n THandlerEvent extends Event,\n TEvent extends THandlerEvent & { currentTarget: TElement; target: Element },\n>(\n handler: JSX.EventHandlerUnion<TElement, THandlerEvent> | undefined,\n event: TEvent,\n): void => {\n if (typeof handler === 'function') {\n handler(event);\n return;\n }\n if (Array.isArray(handler)) {\n const [boundHandler, boundData] = handler;\n boundHandler(boundData, event);\n }\n};\n\nexport const SelectClearTrigger: Component<SelectPrimitive.ClearTriggerProps> = (props) => {\n const [local, others] = splitProps(props, [\n 'class',\n 'children',\n 'tabIndex',\n 'onClick',\n 'onKeyDown',\n ]);\n return (\n <SelectPrimitive.ClearTrigger\n class={cn(\n 'p-0.5 rounded-[4px] text-muted-foreground transition-colors hover:text-foreground focus-visible:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none',\n local.class,\n )}\n onClick={(event: MouseEvent & { currentTarget: HTMLButtonElement; target: Element }) => {\n event.stopPropagation();\n callEventHandler(local.onClick, event);\n }}\n onKeyDown={(event: KeyboardEvent & { currentTarget: HTMLButtonElement; target: Element }) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.stopPropagation();\n }\n callEventHandler(local.onKeyDown, event);\n }}\n {...others}\n tabIndex={local.tabIndex ?? 0}\n >\n {local.children ?? <CloseIcon class='size-3.5' />}\n </SelectPrimitive.ClearTrigger>\n );\n};\n\nexport const SelectPositioner: Component<SelectPrimitive.PositionerProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return <SelectPrimitive.Positioner class={cn('isolate z-50', local.class)} {...others} />;\n};\n\nexport const SelectContent: Component<SelectPrimitive.ContentProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.Content\n data-slot='select-content'\n class={cn(\n 'shadow-md relative isolate z-50 max-h-(--available-height) w-(--reference-width) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-input bg-popover text-popover-foreground duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[focus-visible]:border-ring data-[focus-visible]:ring-[3px] data-[focus-visible]:ring-ring/50',\n local.class,\n )}\n {...others}\n />\n );\n};\n\nexport const SelectItemGroupLabel: Component<SelectPrimitive.ItemGroupLabelProps> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <SelectPrimitive.ItemGroupLabel\n data-slot='select-group-label'\n class={cn('px-1.5 py-1 text-xs text-muted-foreground', local.class)}\n {...others}\n />\n );\n};\n\nexport const SelectItem: Component<SelectPrimitive.ItemProps> = (props) => {\n const [local, others] = splitProps(props, ['class', 'children']);\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n class={cn(\n \"gap-2 py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:gap-2 relative flex w-full cursor-default items-center rounded-sm outline-hidden select-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 *:[span]:last:flex *:[span]:last:items-center\",\n local.class,\n )}\n {...others}\n >\n <SelectPrimitive.ItemText class='gap-2 flex flex-1 shrink-0 whitespace-nowrap'>\n {local.children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator class='right-2 size-4 pointer-events-none absolute flex items-center justify-center'>\n <CheckIcon class='pointer-events-none' />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n};\n\nexport const SelectSeparator: Component<ComponentProps<'div'>> = (props) => {\n const [local, others] = splitProps(props, ['class']);\n return (\n <div\n data-slot='select-separator'\n class={cn('-mx-1 my-1 pointer-events-none h-px bg-border', local.class)}\n {...others}\n />\n );\n};\n"],"names":["SelectControl","SelectPrimitive","Control","SelectItemContext","ItemContext","SelectHiddenSelect","HiddenSelect","SelectList","props","local","others","splitProps","_$createComponent","List","_$mergeProps","cn","class","SelectContext","Context","SelectTabs","_el$","_tmpl$","_$spread","_$insert","_$For","each","items","children","tab","isActive","value","_el$2","_tmpl$2","$$click","onValueChange","disabled","label","_$effect","_p$","_v$","_v$2","_v$3","_v$4","e","t","_$setAttribute","a","o","_$className","undefined","SelectRoot","positioning","placement","gutter","sameWidth","Root","Select","Object","assign","Tabs","SelectLabel","Label","SelectGroup","ItemGroup","SelectValue","ValueText","SelectTrigger","size","ref","createSelectTriggerRef","Trigger","SelectIndicator","Indicator","ExpandMoreIcon","callEventHandler","handler","event","Array","isArray","boundHandler","boundData","SelectClearTrigger","ClearTrigger","onClick","stopPropagation","onKeyDown","key","tabIndex","CloseIcon","SelectPositioner","Positioner","SelectContent","Content","SelectItemGroupLabel","ItemGroupLabel","SelectItem","Item","ItemText","ItemIndicator","CheckIcon","SelectSeparator","_el$3","_tmpl$3","_$delegateEvents"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createSelectTriggerRef: (forwardRef?: (element: HTMLButtonElement) => void) => ((element: HTMLButtonElement) => void);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const a = (r) => {
|
|
2
|
+
let e = !1;
|
|
3
|
+
return (t) => {
|
|
4
|
+
t.addEventListener(
|
|
5
|
+
"pointerdown",
|
|
6
|
+
() => {
|
|
7
|
+
t.getAttribute("aria-expanded") === "true" && (e = !0);
|
|
8
|
+
},
|
|
9
|
+
!0
|
|
10
|
+
), t.addEventListener(
|
|
11
|
+
"click",
|
|
12
|
+
(i) => {
|
|
13
|
+
e && (e = !1, i.stopPropagation());
|
|
14
|
+
},
|
|
15
|
+
!0
|
|
16
|
+
), r && r(t);
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export {
|
|
20
|
+
a as createSelectTriggerRef
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=selectTriggerRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectTriggerRef.js","sources":["../../src/primitives/selectTriggerRef.ts"],"sourcesContent":["// Workaround for https://github.com/chakra-ui/ark/issues/3146\n// SolidJS event delegation causes interact-outside to close the select on pointerdown,\n// Then the delegated click re-opens it. We suppress that click when already open.\nexport const createSelectTriggerRef = (\n forwardRef?: (element: HTMLButtonElement) => void,\n): ((element: HTMLButtonElement) => void) => {\n let suppressNextClick = false;\n\n return (element: HTMLButtonElement): void => {\n element.addEventListener(\n 'pointerdown',\n () => {\n if (element.getAttribute('aria-expanded') === 'true') {\n suppressNextClick = true;\n }\n },\n true,\n );\n element.addEventListener(\n 'click',\n (event) => {\n if (suppressNextClick) {\n suppressNextClick = false;\n event.stopPropagation();\n }\n },\n true,\n );\n if (forwardRef) {\n forwardRef(element);\n }\n };\n};\n"],"names":["createSelectTriggerRef","forwardRef","suppressNextClick","element","event"],"mappings":"AAGO,MAAMA,IAAyB,CACpCC,MAC2C;AAC3C,MAAIC,IAAoB;AAExB,SAAO,CAACC,MAAqC;AAC3C,IAAAA,EAAQ;AAAA,MACN;AAAA,MACA,MAAM;AACJ,QAAIA,EAAQ,aAAa,eAAe,MAAM,WAC5CD,IAAoB;AAAA,MAExB;AAAA,MACA;AAAA,IAAA,GAEFC,EAAQ;AAAA,MACN;AAAA,MACA,CAACC,MAAU;AACT,QAAIF,MACFA,IAAoB,IACpBE,EAAM,gBAAA;AAAA,MAEV;AAAA,MACA;AAAA,IAAA,GAEEH,KACFA,EAAWE,CAAO;AAAA,EAEtB;AACF;"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
|
+
import type { Component, ComponentProps, JSX, JSXElement } from 'solid-js';
|
|
2
|
+
|
|
1
3
|
import { Select as SelectPrimitive } from '@ark-ui/solid/select';
|
|
2
|
-
import {
|
|
3
|
-
type Component,
|
|
4
|
-
type ComponentProps,
|
|
5
|
-
type JSX,
|
|
6
|
-
type JSXElement,
|
|
7
|
-
For,
|
|
8
|
-
splitProps,
|
|
9
|
-
} from 'solid-js';
|
|
10
4
|
import { cn } from 'tailwind-variants';
|
|
11
5
|
import CheckIcon from '~icons/material-symbols/check';
|
|
12
6
|
import CloseIcon from '~icons/material-symbols/close';
|
|
13
7
|
import ExpandMoreIcon from '~icons/material-symbols/expand-more';
|
|
14
8
|
|
|
9
|
+
import { createSelectTriggerRef } from '../primitives/selectTriggerRef';
|
|
10
|
+
|
|
15
11
|
export const SelectControl = SelectPrimitive.Control;
|
|
16
12
|
export const SelectItemContext = SelectPrimitive.ItemContext;
|
|
17
13
|
export const SelectHiddenSelect = SelectPrimitive.HiddenSelect;
|
|
@@ -153,11 +149,14 @@ export const SelectValue: Component<SelectPrimitive.ValueTextProps> = (props) =>
|
|
|
153
149
|
export const SelectTrigger: Component<
|
|
154
150
|
SelectPrimitive.TriggerProps & { size?: 'sm' | 'default' }
|
|
155
151
|
> = (props) => {
|
|
156
|
-
const [local, others] = splitProps(props, ['class', 'size']);
|
|
152
|
+
const [local, others] = splitProps(props, ['class', 'size', 'ref']);
|
|
157
153
|
const size = local.size ?? 'default';
|
|
154
|
+
const ref =
|
|
155
|
+
typeof local.ref === 'function' ? createSelectTriggerRef(local.ref) : createSelectTriggerRef();
|
|
158
156
|
|
|
159
157
|
return (
|
|
160
158
|
<SelectPrimitive.Trigger
|
|
159
|
+
ref={ref}
|
|
161
160
|
data-slot='select-trigger'
|
|
162
161
|
data-size={size}
|
|
163
162
|
class={cn(
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Workaround for https://github.com/chakra-ui/ark/issues/3146
|
|
2
|
+
// SolidJS event delegation causes interact-outside to close the select on pointerdown,
|
|
3
|
+
// Then the delegated click re-opens it. We suppress that click when already open.
|
|
4
|
+
export const createSelectTriggerRef = (
|
|
5
|
+
forwardRef?: (element: HTMLButtonElement) => void,
|
|
6
|
+
): ((element: HTMLButtonElement) => void) => {
|
|
7
|
+
let suppressNextClick = false;
|
|
8
|
+
|
|
9
|
+
return (element: HTMLButtonElement): void => {
|
|
10
|
+
element.addEventListener(
|
|
11
|
+
'pointerdown',
|
|
12
|
+
() => {
|
|
13
|
+
if (element.getAttribute('aria-expanded') === 'true') {
|
|
14
|
+
suppressNextClick = true;
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
true,
|
|
18
|
+
);
|
|
19
|
+
element.addEventListener(
|
|
20
|
+
'click',
|
|
21
|
+
(event) => {
|
|
22
|
+
if (suppressNextClick) {
|
|
23
|
+
suppressNextClick = false;
|
|
24
|
+
event.stopPropagation();
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
true,
|
|
28
|
+
);
|
|
29
|
+
if (forwardRef) {
|
|
30
|
+
forwardRef(element);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
};
|