@oneplatformdev/ui 0.1.99-beta.7 → 0.1.99-beta.70

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.
Files changed (170) hide show
  1. package/Accordion/Accordion.d.ts +1 -1
  2. package/Accordion/Accordion.d.ts.map +1 -1
  3. package/Accordion/Accordion.js +48 -26
  4. package/Accordion/Accordion.js.map +1 -1
  5. package/AlertDialog/AlertDialog.stories.js +3 -2
  6. package/AlertDialog/AlertDialog.stories.js.map +1 -1
  7. package/AlertDialog/AlertDialogRoot.d.ts.map +1 -1
  8. package/AlertDialog/AlertDialogRoot.js +26 -24
  9. package/AlertDialog/AlertDialogRoot.js.map +1 -1
  10. package/Badge/badgeVariants.d.ts +1 -1
  11. package/Button/Button.d.ts +7 -1
  12. package/Button/Button.d.ts.map +1 -1
  13. package/Button/Button.js +49 -51
  14. package/Button/Button.js.map +1 -1
  15. package/Button/Button.types.d.ts +12 -0
  16. package/Button/Button.types.d.ts.map +1 -1
  17. package/Button/Button.utils.d.ts +3 -0
  18. package/Button/Button.utils.d.ts.map +1 -0
  19. package/Button/Button.utils.js +14 -0
  20. package/Button/Button.utils.js.map +1 -0
  21. package/Button/ButtonCounterBadge.d.ts +7 -0
  22. package/Button/ButtonCounterBadge.d.ts.map +1 -0
  23. package/Button/ButtonCounterBadge.js +20 -0
  24. package/Button/ButtonCounterBadge.js.map +1 -0
  25. package/Button/buttonVariants.d.ts +11 -20
  26. package/Button/buttonVariants.d.ts.map +1 -1
  27. package/Button/buttonVariants.js +76 -12
  28. package/Button/buttonVariants.js.map +1 -1
  29. package/Button/index.d.ts +1 -0
  30. package/Button/index.d.ts.map +1 -1
  31. package/Button/index.js +6 -3
  32. package/Button/index.js.map +1 -1
  33. package/ButtonIcon/ButtonIcon.d.ts +6 -1
  34. package/ButtonIcon/ButtonIcon.d.ts.map +1 -1
  35. package/ButtonIcon/ButtonIcon.js +69 -51
  36. package/ButtonIcon/ButtonIcon.js.map +1 -1
  37. package/ButtonIcon/ButtonIcon.stories.js +94 -65
  38. package/ButtonIcon/ButtonIcon.stories.js.map +1 -1
  39. package/ButtonIcon/buttonIconVariants.d.ts +1 -1
  40. package/ButtonIcon/buttonIconVariants.d.ts.map +1 -1
  41. package/ButtonIcon/buttonIconVariants.js +7 -6
  42. package/ButtonIcon/buttonIconVariants.js.map +1 -1
  43. package/CHANGELOG.md +743 -0
  44. package/Calendar/Calendar.js +5 -4
  45. package/Calendar/Calendar.js.map +1 -1
  46. package/Combobox/Combobox.d.ts +1 -1
  47. package/Combobox/Combobox.d.ts.map +1 -1
  48. package/Combobox/Combobox.js +206 -191
  49. package/Combobox/Combobox.js.map +1 -1
  50. package/Combobox/Combobox.stories.js +208 -0
  51. package/Combobox/Combobox.stories.js.map +1 -0
  52. package/Combobox/Combobox.types.d.ts +34 -19
  53. package/Combobox/Combobox.types.d.ts.map +1 -1
  54. package/Combobox/ComboboxOptionItem.d.ts +2 -3
  55. package/Combobox/ComboboxOptionItem.d.ts.map +1 -1
  56. package/Combobox/ComboboxOptionItem.js +44 -21
  57. package/Combobox/ComboboxOptionItem.js.map +1 -1
  58. package/Combobox/ComboboxOptions.d.ts +2 -2
  59. package/Combobox/ComboboxOptions.d.ts.map +1 -1
  60. package/Combobox/ComboboxOptions.js +49 -49
  61. package/Combobox/ComboboxOptions.js.map +1 -1
  62. package/Command/Command.d.ts.map +1 -1
  63. package/Command/Command.js +10 -7
  64. package/Command/Command.js.map +1 -1
  65. package/DataTable/DataTable.js +16 -15
  66. package/DataTable/DataTable.js.map +1 -1
  67. package/Dialog/Dialog.d.ts.map +1 -1
  68. package/Dialog/Dialog.js +35 -24
  69. package/Dialog/Dialog.js.map +1 -1
  70. package/Dialog/Dialog.types.d.ts +4 -0
  71. package/Dialog/Dialog.types.d.ts.map +1 -0
  72. package/Dialog/Dialog.types.js +2 -0
  73. package/Dialog/Dialog.types.js.map +1 -0
  74. package/Dialog/index.d.ts +1 -0
  75. package/Dialog/index.d.ts.map +1 -1
  76. package/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  77. package/DropdownMenu/DropdownMenu.js +33 -20
  78. package/DropdownMenu/DropdownMenu.js.map +1 -1
  79. package/Form/Form.d.ts.map +1 -1
  80. package/Form/Form.js.map +1 -1
  81. package/Form/FormRenderControl.d.ts +1 -1
  82. package/Form/FormRenderControl.d.ts.map +1 -1
  83. package/Form/FormRenderControl.js +54 -14
  84. package/Form/FormRenderControl.js.map +1 -1
  85. package/Form/FormRenderControl.types.d.ts +4 -1
  86. package/Form/FormRenderControl.types.d.ts.map +1 -1
  87. package/FormCombobox/FormCombobox.d.ts.map +1 -1
  88. package/FormCombobox/FormCombobox.js +15 -13
  89. package/FormCombobox/FormCombobox.js.map +1 -1
  90. package/FormDatePicker/FormDatePicker.d.ts.map +1 -1
  91. package/FormDatePicker/FormDatePicker.js +18 -16
  92. package/FormDatePicker/FormDatePicker.js.map +1 -1
  93. package/FormDropzone/FormDropzone.d.ts.map +1 -1
  94. package/FormDropzone/FormDropzone.js +11 -9
  95. package/FormDropzone/FormDropzone.js.map +1 -1
  96. package/FormInput/FormInput.d.ts.map +1 -1
  97. package/FormInput/FormInput.js +27 -25
  98. package/FormInput/FormInput.js.map +1 -1
  99. package/FormSelect/FormSelect.d.ts.map +1 -1
  100. package/FormSelect/FormSelect.js +21 -17
  101. package/FormSelect/FormSelect.js.map +1 -1
  102. package/FormTextarea/FormTextarea.d.ts.map +1 -1
  103. package/FormTextarea/FormTextarea.js +15 -13
  104. package/FormTextarea/FormTextarea.js.map +1 -1
  105. package/InfoBlock/InfoBlock.d.ts +7 -0
  106. package/InfoBlock/InfoBlock.d.ts.map +1 -0
  107. package/InfoBlock/InfoBlock.js +27 -0
  108. package/InfoBlock/InfoBlock.js.map +1 -0
  109. package/InfoBlock/InfoBlock.stories.js +14 -0
  110. package/InfoBlock/InfoBlock.stories.js.map +1 -0
  111. package/InfoBlock/InfoBlock.types.d.ts +8 -0
  112. package/InfoBlock/InfoBlock.types.d.ts.map +1 -0
  113. package/InfoBlock/InfoBlock.types.js +2 -0
  114. package/InfoBlock/InfoBlock.types.js.map +1 -0
  115. package/InfoBlock/index.d.ts +3 -0
  116. package/InfoBlock/index.d.ts.map +1 -0
  117. package/InfoBlock/index.js +5 -0
  118. package/InfoBlock/index.js.map +1 -0
  119. package/InfoBlock/infoBlockVariants.d.ts +6 -0
  120. package/InfoBlock/infoBlockVariants.d.ts.map +1 -0
  121. package/InfoBlock/infoBlockVariants.js +26 -0
  122. package/InfoBlock/infoBlockVariants.js.map +1 -0
  123. package/Input/Input.js +1 -1
  124. package/Input/Input.js.map +1 -1
  125. package/Input/inputVariants.d.ts.map +1 -1
  126. package/Input/inputVariants.js +5 -4
  127. package/Input/inputVariants.js.map +1 -1
  128. package/LoadedIcon/LoadedIcon.d.ts.map +1 -1
  129. package/LoadedIcon/LoadedIcon.js +3 -1
  130. package/LoadedIcon/LoadedIcon.js.map +1 -1
  131. package/LoadingMask/LoadingMask.d.ts +1 -2
  132. package/LoadingMask/LoadingMask.d.ts.map +1 -1
  133. package/LoadingMask/LoadingMask.js +8 -8
  134. package/LoadingMask/LoadingMask.js.map +1 -1
  135. package/LoadingMask/LoadingMask.types.d.ts +1 -0
  136. package/LoadingMask/LoadingMask.types.d.ts.map +1 -1
  137. package/Resizable/Resizable.d.ts +5 -20
  138. package/Resizable/Resizable.d.ts.map +1 -1
  139. package/Resizable/Resizable.js +48 -31
  140. package/Resizable/Resizable.js.map +1 -1
  141. package/Resizable/Resizable.stories.js +140 -0
  142. package/Resizable/Resizable.stories.js.map +1 -0
  143. package/Search/Search.d.ts.map +1 -1
  144. package/Search/Search.js +41 -32
  145. package/Search/Search.js.map +1 -1
  146. package/Search/Search.stories.js +17 -0
  147. package/Search/Search.stories.js.map +1 -0
  148. package/TablePagination/TablePagination.js +9 -8
  149. package/TablePagination/TablePagination.js.map +1 -1
  150. package/Textarea/Textarea.d.ts.map +1 -1
  151. package/Textarea/Textarea.js +48 -43
  152. package/Textarea/Textarea.js.map +1 -1
  153. package/Textarea/Textarea.stories.js +1 -1
  154. package/Textarea/Textarea.stories.js.map +1 -1
  155. package/Textarea/Textarea.types.d.ts +3 -1
  156. package/Textarea/Textarea.types.d.ts.map +1 -1
  157. package/Tooltip/Tooltip.d.ts.map +1 -1
  158. package/Tooltip/Tooltip.js +41 -29
  159. package/Tooltip/Tooltip.js.map +1 -1
  160. package/Tooltip/Tooltip.types.d.ts +1 -0
  161. package/Tooltip/Tooltip.types.d.ts.map +1 -1
  162. package/Tooltip/tooltipVariants.d.ts +4 -0
  163. package/Tooltip/tooltipVariants.d.ts.map +1 -0
  164. package/Tooltip/tooltipVariants.js +23 -0
  165. package/Tooltip/tooltipVariants.js.map +1 -0
  166. package/index.d.ts +1 -0
  167. package/index.d.ts.map +1 -1
  168. package/index.js +335 -330
  169. package/index.js.map +1 -1
  170. package/package.json +4 -4
@@ -0,0 +1,208 @@
1
+ import { jsx as t, jsxs as u } from "react/jsx-runtime";
2
+ import { useState as g, useMemo as x } from "react";
3
+ import { Combobox as f } from "./Combobox.js";
4
+ const h = (e) => new Promise((n) => setTimeout(n, e)), v = (e = []) => {
5
+ const n = [], a = (l) => {
6
+ if (l?.length)
7
+ for (const s of l)
8
+ n.push(s), s.items?.length && a(s.items);
9
+ };
10
+ return a(e), n;
11
+ }, d = (e, n = 350) => async (a) => {
12
+ await h(n);
13
+ const l = (a ?? "").trim().toLowerCase();
14
+ if (!l) return e;
15
+ const s = v(e), b = new Set(
16
+ s.filter((i) => String(i.label).toLowerCase().includes(l)).map((i) => String(i.value))
17
+ ), m = (i) => i.map((c) => {
18
+ const p = c.items?.length ? m(c.items) : void 0;
19
+ return !(b.has(String(c.value)) || String(c.label).toLowerCase().includes(l)) && !p?.length ? null : { ...c, items: p };
20
+ }).filter(Boolean);
21
+ return m(e);
22
+ }, r = [
23
+ { value: "ua", label: "Ukraine" },
24
+ { value: "pl", label: "Poland" },
25
+ { value: "de", label: "Germany" },
26
+ { value: "fr", label: "France" },
27
+ { value: "es", label: "Spain" },
28
+ { value: "it", label: "Italy" }
29
+ ], y = [
30
+ {
31
+ value: "europe",
32
+ label: "Europe",
33
+ items: [
34
+ { value: "ua", label: "Ukraine" },
35
+ { value: "pl", label: "Poland" },
36
+ { value: "de", label: "Germany" },
37
+ { value: "fr", label: "France" }
38
+ ]
39
+ },
40
+ {
41
+ value: "north-america",
42
+ label: "North America",
43
+ items: [
44
+ { value: "us", label: "United States" },
45
+ { value: "ca", label: "Canada" },
46
+ { value: "mx", label: "Mexico" }
47
+ ]
48
+ }
49
+ ];
50
+ function o({ initialValue: e = "", ...n }) {
51
+ const [a, l] = g(e), s = x(
52
+ () => n.fetchOptions,
53
+ // eslint-disable-next-line react-hooks/exhaustive-deps
54
+ []
55
+ );
56
+ return /* @__PURE__ */ u("div", { className: "max-w-sm", children: [
57
+ /* @__PURE__ */ t(f, { ...n, value: a, onChange: l, fetchOptions: s }),
58
+ /* @__PURE__ */ u("div", { className: "mt-3 text-xs text-muted-foreground", children: [
59
+ "value: ",
60
+ /* @__PURE__ */ t("span", { className: "font-mono", children: String(a || "") })
61
+ ] })
62
+ ] });
63
+ }
64
+ const w = {
65
+ title: "Combobox",
66
+ component: f,
67
+ parameters: {
68
+ layout: "centered"
69
+ },
70
+ args: {
71
+ placeholder: "Select option...",
72
+ searchLabel: "Type to search...",
73
+ emptyLabel: "No options",
74
+ disabled: !1,
75
+ fetchOptions: d(r, 250)
76
+ },
77
+ argTypes: {
78
+ fetchOptions: { control: !1 },
79
+ onChange: { control: !1 },
80
+ onMount: { control: !1 },
81
+ emptyAction: { control: !1 },
82
+ commandInputAction: { control: !1 },
83
+ listHeadAction: { control: !1 },
84
+ options: { control: !1 },
85
+ value: { control: !1 }
86
+ },
87
+ decorators: [
88
+ (e) => /* @__PURE__ */ t("div", { className: "p-6 w-[420px]", children: /* @__PURE__ */ t(e, {}) })
89
+ ]
90
+ }, A = {
91
+ render: (e) => /* @__PURE__ */ t(o, { ...e })
92
+ }, L = {
93
+ render: (e) => /* @__PURE__ */ t(o, { ...e, initialValue: "pl" })
94
+ }, k = {
95
+ args: { disabled: !0 },
96
+ render: (e) => /* @__PURE__ */ t(o, { ...e, initialValue: "de" })
97
+ }, F = {
98
+ args: {
99
+ options: r,
100
+ fetchOptions: async () => r
101
+ },
102
+ render: (e) => /* @__PURE__ */ t(o, { ...e })
103
+ }, M = {
104
+ args: {
105
+ fetchOptions: d(r, 1200)
106
+ },
107
+ render: (e) => /* @__PURE__ */ t(o, { ...e })
108
+ }, P = {
109
+ args: {
110
+ emptyLabel: "Nothing found",
111
+ emptyAction: (e) => {
112
+ const n = !!e.search?.trim();
113
+ return /* @__PURE__ */ t(
114
+ "button",
115
+ {
116
+ type: "button",
117
+ className: "inline-flex items-center justify-center rounded-md border px-3 py-1.5 text-sm",
118
+ disabled: !n,
119
+ onClick: () => {
120
+ const a = e.search.trim(), l = { value: a, label: `Create "${a}"` };
121
+ e.setOptions([l]), e.setLoading(!1);
122
+ },
123
+ children: "Create option"
124
+ }
125
+ );
126
+ }
127
+ },
128
+ render: (e) => /* @__PURE__ */ t(o, { ...e })
129
+ }, T = {
130
+ args: {
131
+ commandInputAction: (e) => /* @__PURE__ */ u("div", { className: "px-3 py-2 flex items-center justify-between text-xs text-muted-foreground", children: [
132
+ /* @__PURE__ */ u("span", { children: [
133
+ "results: ",
134
+ /* @__PURE__ */ t("span", { className: "font-mono", children: e.options.length })
135
+ ] }),
136
+ /* @__PURE__ */ t(
137
+ "button",
138
+ {
139
+ type: "button",
140
+ className: "underline",
141
+ onClick: () => {
142
+ e.setSearch(""), e.setLoading(!1);
143
+ },
144
+ children: "Clear search"
145
+ }
146
+ )
147
+ ] })
148
+ },
149
+ render: (e) => /* @__PURE__ */ t(o, { ...e })
150
+ }, I = {
151
+ args: {
152
+ listHeadAction: (e) => /* @__PURE__ */ t(
153
+ "button",
154
+ {
155
+ type: "button",
156
+ className: "w-full text-left px-3 py-2 text-sm",
157
+ onClick: () => {
158
+ e.setSearch(""), e.setOpen(!1);
159
+ },
160
+ children: "Close list"
161
+ }
162
+ )
163
+ },
164
+ render: (e) => /* @__PURE__ */ t(o, { ...e })
165
+ }, W = {
166
+ args: {
167
+ listFooterAction: (e) => /* @__PURE__ */ t(
168
+ "button",
169
+ {
170
+ type: "button",
171
+ className: "w-full text-left px-3 py-2 text-sm",
172
+ onClick: () => {
173
+ e.setSearch(""), e.setOpen(!1);
174
+ },
175
+ children: "Add new option"
176
+ }
177
+ )
178
+ },
179
+ render: (e) => /* @__PURE__ */ t(o, { ...e })
180
+ }, E = {
181
+ args: {
182
+ fetchOptions: d(y, 250)
183
+ },
184
+ render: (e) => /* @__PURE__ */ t(o, { ...e })
185
+ }, V = {
186
+ args: {
187
+ fetchOptions: d(r, 250),
188
+ onMount: async (e) => {
189
+ await h(900), e.setOptions(r), e.setLoading(!1);
190
+ }
191
+ },
192
+ render: (e) => /* @__PURE__ */ t(o, { ...e })
193
+ };
194
+ export {
195
+ A as Default,
196
+ k as Disabled,
197
+ P as EmptyStateWithAction,
198
+ E as NestedOptions,
199
+ V as OnMountPrefetch,
200
+ M as SlowFetchLoading,
201
+ T as WithCommandInputAction,
202
+ W as WithListFooterAction,
203
+ I as WithListHeadAction,
204
+ F as WithStaticOptionsProp,
205
+ L as WithValueSelected,
206
+ w as default
207
+ };
208
+ //# sourceMappingURL=Combobox.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.stories.js","sources":["../../src/Combobox/Combobox.stories.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react';\n\nimport { Combobox } from './Combobox';\nimport type {\n ComboboxCallbackStateParams,\n ComboboxOption,\n ComboboxProps,\n} from './Combobox.types';\n\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\nconst flatten = (nodes: ComboboxOption[] = []): ComboboxOption[] => {\n const res: ComboboxOption[] = [];\n const walk = (list?: ComboboxOption[]) => {\n if (!list?.length) return;\n for (const n of list) {\n res.push(n);\n if (n.items?.length) walk(n.items);\n }\n };\n walk(nodes);\n return res;\n};\n\nconst createFetchOptions =\n (all: ComboboxOption[], delayMs = 350): ComboboxProps['fetchOptions'] =>\n async (search?: string) => {\n await sleep(delayMs);\n\n const q = (search ?? '').trim().toLowerCase();\n if (!q) return all;\n\n // simple \"contains\" search across flattened options; then return top-level filtered\n // (enough for Storybook demos; your real API can do better)\n const allFlat = flatten(all);\n const matchedValues = new Set(\n allFlat\n .filter((o) => String(o.label).toLowerCase().includes(q))\n .map((o) => String(o.value)),\n );\n\n const filterTree = (list: ComboboxOption[]): ComboboxOption[] => {\n return list\n .map((n) => {\n const items = n.items?.length ? filterTree(n.items) : undefined;\n const selfMatch =\n matchedValues.has(String(n.value)) ||\n String(n.label).toLowerCase().includes(q);\n\n if (!selfMatch && !items?.length) return null;\n return { ...n, items };\n })\n .filter(Boolean) as ComboboxOption[];\n };\n\n return filterTree(all);\n };\n\nconst BASE_OPTIONS: ComboboxOption[] = [\n { value: 'ua', label: 'Ukraine' },\n { value: 'pl', label: 'Poland' },\n { value: 'de', label: 'Germany' },\n { value: 'fr', label: 'France' },\n { value: 'es', label: 'Spain' },\n { value: 'it', label: 'Italy' },\n];\n\nconst NESTED_OPTIONS: ComboboxOption[] = [\n {\n value: 'europe',\n label: 'Europe',\n items: [\n { value: 'ua', label: 'Ukraine' },\n { value: 'pl', label: 'Poland' },\n { value: 'de', label: 'Germany' },\n { value: 'fr', label: 'France' },\n ],\n },\n {\n value: 'north-america',\n label: 'North America',\n items: [\n { value: 'us', label: 'United States' },\n { value: 'ca', label: 'Canada' },\n { value: 'mx', label: 'Mexico' },\n ],\n },\n];\n\ntype ControlledProps = Omit<ComboboxProps, 'value' | 'onChange'> & {\n initialValue?: ComboboxProps['value'];\n};\n\nfunction ControlledCombobox({ initialValue = '', ...args }: ControlledProps) {\n const [value, setValue] = useState<ComboboxProps['value']>(initialValue);\n\n // keep stable reference if someone passes inline fetchOptions\n const fetchOptions = useMemo(\n () => args.fetchOptions,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n return (\n <div className=\"max-w-sm\">\n <Combobox {...args} value={value} onChange={setValue} fetchOptions={fetchOptions} />\n <div className=\"mt-3 text-xs text-muted-foreground\">\n value: <span className=\"font-mono\">{String(value || '')}</span>\n </div>\n </div>\n );\n}\n\nconst meta = {\n title: 'Combobox',\n component: Combobox,\n parameters: {\n layout: 'centered',\n },\n args: {\n placeholder: 'Select option...',\n searchLabel: 'Type to search...',\n emptyLabel: 'No options',\n disabled: false,\n fetchOptions: createFetchOptions(BASE_OPTIONS, 250),\n },\n argTypes: {\n fetchOptions: { control: false },\n onChange: { control: false },\n onMount: { control: false },\n emptyAction: { control: false },\n commandInputAction: { control: false },\n listHeadAction: { control: false },\n options: { control: false },\n value: { control: false },\n },\n decorators: [\n (Story) => (\n <div className=\"p-6 w-[420px]\">\n <Story />\n </div>\n ),\n ],\n} satisfies Meta<typeof Combobox>;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\n/** 1) Default (async options) */\nexport const Default: Story = {\n render: (args) => <ControlledCombobox {...args} />,\n};\n\n/** 2) With initial selected value */\nexport const WithValueSelected: Story = {\n render: (args) => <ControlledCombobox {...args} initialValue=\"pl\" />,\n};\n\n/** 3) Disabled */\nexport const Disabled: Story = {\n args: { disabled: true },\n render: (args) => <ControlledCombobox {...args} initialValue=\"de\" />,\n};\n\n/** 4) Static options via `options` prop (no async needed, but fetchOptions still required) */\nexport const WithStaticOptionsProp: Story = {\n args: {\n options: BASE_OPTIONS,\n fetchOptions: async () => BASE_OPTIONS,\n },\n render: (args) => <ControlledCombobox {...args} />,\n};\n\n/** 5) Slow fetch to show loading state on open/search */\nexport const SlowFetchLoading: Story = {\n args: {\n fetchOptions: createFetchOptions(BASE_OPTIONS, 1200),\n },\n render: (args) => <ControlledCombobox {...args} />,\n};\n\n/** 6) Empty state with action (search something like \"zzz\") */\nexport const EmptyStateWithAction: Story = {\n args: {\n emptyLabel: 'Nothing found',\n emptyAction: (st: ComboboxCallbackStateParams) => {\n const canCreate = Boolean(st.search?.trim());\n return (\n <button\n type=\"button\"\n className=\"inline-flex items-center justify-center rounded-md border px-3 py-1.5 text-sm\"\n disabled={!canCreate}\n onClick={() => {\n const v = st.search.trim();\n const next: ComboboxOption = { value: v, label: `Create \"${v}\"` };\n st.setOptions([next]);\n st.setLoading(false);\n }}\n >\n Create option\n </button>\n );\n },\n },\n render: (args) => <ControlledCombobox {...args} />,\n};\n\n/** 7) commandInputAction (helper row under input) */\nexport const WithCommandInputAction: Story = {\n args: {\n commandInputAction: (st: ComboboxCallbackStateParams) => (\n <div className=\"px-3 py-2 flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n results: <span className=\"font-mono\">{st.options.length}</span>\n </span>\n <button\n type=\"button\"\n className=\"underline\"\n onClick={() => {\n st.setSearch('');\n st.setLoading(false);\n }}\n >\n Clear search\n </button>\n </div>\n ),\n },\n render: (args) => <ControlledCombobox {...args} />,\n};\n\n/** 8) listHeadAction (top action inside list) */\nexport const WithListHeadAction: Story = {\n args: {\n listHeadAction: (st: ComboboxCallbackStateParams) => (\n <button\n type=\"button\"\n className=\"w-full text-left px-3 py-2 text-sm\"\n onClick={() => {\n st.setSearch('');\n st.setOpen(false);\n }}\n >\n Close list\n </button>\n ),\n },\n render: (args) => <ControlledCombobox {...args} />,\n};\n\n/** 9) listHeadAction (footer action outside of list) */\nexport const WithListFooterAction: Story = {\n args: {\n listFooterAction: (st: ComboboxCallbackStateParams) => (\n <button\n type=\"button\"\n className=\"w-full text-left px-3 py-2 text-sm\"\n onClick={() => {\n st.setSearch('');\n st.setOpen(false);\n }}\n >\n Add new option\n </button>\n ),\n },\n render: (args) => <ControlledCombobox {...args} />,\n};\n\n/** 10) Nested options tree */\nexport const NestedOptions: Story = {\n args: {\n fetchOptions: createFetchOptions(NESTED_OPTIONS, 250),\n },\n render: (args) => <ControlledCombobox {...args} />,\n};\n\n/** 11) onMount initial loading (simulate prefetch on mount) */\nexport const OnMountPrefetch: Story = {\n args: {\n fetchOptions: createFetchOptions(BASE_OPTIONS, 250),\n onMount: async (st: ComboboxCallbackStateParams) => {\n await sleep(900);\n st.setOptions(BASE_OPTIONS);\n st.setLoading(false);\n },\n },\n render: (args) => <ControlledCombobox {...args} />,\n};\n"],"names":["sleep","ms","r","flatten","nodes","res","walk","list","n","createFetchOptions","all","delayMs","search","q","allFlat","matchedValues","o","filterTree","items","BASE_OPTIONS","NESTED_OPTIONS","ControlledCombobox","initialValue","args","value","setValue","useState","fetchOptions","useMemo","jsxs","jsx","Combobox","meta","Story","Default","WithValueSelected","Disabled","WithStaticOptionsProp","SlowFetchLoading","EmptyStateWithAction","st","canCreate","v","next","WithCommandInputAction","WithListHeadAction","WithListFooterAction","NestedOptions","OnMountPrefetch"],"mappings":"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"}
@@ -1,14 +1,19 @@
1
1
  import { Dispatch, ReactNode, SetStateAction } from 'react';
2
- export interface ComboboxOption {
2
+ export interface ComboboxOption<Data extends object = object> {
3
3
  value: string;
4
4
  label: string;
5
- items?: ComboboxOption[];
5
+ items?: ComboboxOption<Data>[];
6
+ node?: Data;
7
+ path?: string[];
8
+ parent?: string;
9
+ level?: number;
10
+ matched?: boolean;
6
11
  }
7
- export interface ComboboxCallbackStateParams {
8
- options: ComboboxOption[];
9
- setOptions: Dispatch<SetStateAction<ComboboxOption[]>>;
10
- selectedOption?: ComboboxOption;
11
- setSelectedOption: Dispatch<SetStateAction<ComboboxOption | undefined>>;
12
+ export interface ComboboxCallbackStateParams<Data extends object = object> {
13
+ options: ComboboxOption<Data>[];
14
+ setOptions: Dispatch<SetStateAction<ComboboxOption<Data>[]>>;
15
+ selectedOption?: ComboboxOption<Data>;
16
+ setSelectedOption: Dispatch<SetStateAction<ComboboxOption<Data> | undefined>>;
12
17
  search: string;
13
18
  setSearch: Dispatch<SetStateAction<string>>;
14
19
  open: boolean;
@@ -18,33 +23,43 @@ export interface ComboboxCallbackStateParams {
18
23
  isEmptyList: boolean;
19
24
  isSearchedEmptyList: boolean;
20
25
  }
21
- export interface IComboboxOptionsNodeProps {
26
+ export interface IComboboxOptionsNodeHandlersProps<Data extends object = object> {
27
+ defaultNodeOpen?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);
28
+ defaultNodeDisabled?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);
29
+ defaultNodeMatched?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);
30
+ defaultNodeMuted?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);
31
+ defaultNodeInteractive?: boolean | ((option: ComboboxOption<Data>, deep: number) => boolean | undefined);
32
+ }
33
+ export interface IComboboxOptionsNodeProps<Data extends object = object> extends IComboboxOptionsNodeHandlersProps<Data> {
34
+ searchTerm?: string;
22
35
  value?: string;
23
- option: ComboboxOption;
24
- onChangeOption?: (option: ComboboxOption) => void;
36
+ option: ComboboxOption<Data>;
37
+ onChangeOption?: (option: ComboboxOption<Data>) => void;
25
38
  deep?: number;
26
39
  setOpen: Dispatch<SetStateAction<boolean>>;
27
40
  }
28
- export interface IComboboxOptionsProps extends Omit<IComboboxOptionsNodeProps, 'option'> {
29
- options?: ComboboxOption[];
41
+ export interface IComboboxOptionsProps<Data extends object = object> extends Omit<IComboboxOptionsNodeProps<Data>, 'option'>, IComboboxOptionsNodeHandlersProps<Data> {
42
+ options?: ComboboxOption<Data>[];
30
43
  }
31
- export interface ComboboxProps {
44
+ export interface ComboboxProps<Data extends object = object> extends IComboboxOptionsNodeHandlersProps {
32
45
  value: string;
33
46
  onChange: (value: string) => void;
34
47
  placeholder?: string;
35
48
  searchLabel?: string;
36
49
  disabled?: boolean;
37
- fetchOptions: (search?: string) => Promise<ComboboxOption[]>;
38
- options?: ComboboxOption[];
50
+ fetchOptions: (search?: string) => Promise<ComboboxOption<Data>[]>;
51
+ options?: ComboboxOption<Data>[];
39
52
  /** Command Empty list label*/
40
53
  emptyLabel?: string;
41
54
  /** Command Empty list action */
42
- emptyAction?: ((params: ComboboxCallbackStateParams) => ReactNode) | ReactNode;
55
+ emptyAction?: ((params: ComboboxCallbackStateParams<Data>) => ReactNode) | ReactNode;
43
56
  /** Command Input footer action */
44
- commandInputAction?: ((params: ComboboxCallbackStateParams) => ReactNode) | ReactNode;
57
+ commandInputAction?: ((params: ComboboxCallbackStateParams<Data>) => ReactNode) | ReactNode;
45
58
  /** Command List first element action */
46
- listHeadAction?: ((params: ComboboxCallbackStateParams) => ReactNode) | ReactNode;
59
+ listHeadAction?: ((params: ComboboxCallbackStateParams<Data>) => ReactNode) | ReactNode;
60
+ /** Command List footer element action */
61
+ listFooterAction?: ((params: ComboboxCallbackStateParams<Data>) => ReactNode) | ReactNode;
47
62
  /** Callback for load data on start component */
48
- onMount?: (params: ComboboxCallbackStateParams) => Promise<void>;
63
+ onMount?: (params: ComboboxCallbackStateParams<Data>) => Promise<void>;
49
64
  }
50
65
  //# sourceMappingURL=Combobox.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.types.d.ts","sourceRoot":"","sources":["../../src/Combobox/Combobox.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,UAAU,EAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;IACvD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iBAAiB,EAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC,CAAA;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;CAC3C;AAED,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,yBAAyB,EAAE,QAAQ,CAAC;IACjD,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,2BAA2B,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAC/E,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,2BAA2B,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IACtF,wCAAwC;IACxC,cAAc,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,2BAA2B,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAClF,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE"}
1
+ {"version":3,"file":"Combobox.types.d.ts","sourceRoot":"","sources":["../../src/Combobox/Combobox.types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
+ import { PropsWithChildren } from 'react';
1
2
  import { IComboboxOptionsNodeProps } from './Combobox.types';
2
- export declare const ComboboxOptionItem: import('react').ForwardRefExoticComponent<IComboboxOptionsNodeProps & {
3
- children?: import('react').ReactNode | undefined;
4
- } & import('react').RefAttributes<HTMLDivElement>>;
3
+ export declare const ComboboxOptionItem: <Data extends object>(props: PropsWithChildren<IComboboxOptionsNodeProps<Data>>) => import("react/jsx-runtime").JSX.Element;
5
4
  //# sourceMappingURL=ComboboxOptionItem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxOptionItem.d.ts","sourceRoot":"","sources":["../../src/Combobox/ComboboxOptionItem.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAM7D,eAAO,MAAM,kBAAkB;;kDAsC7B,CAAC"}
1
+ {"version":3,"file":"ComboboxOptionItem.d.ts","sourceRoot":"","sources":["../../src/Combobox/ComboboxOptionItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAK7D,eAAO,MAAM,kBAAkB,GAAI,IAAI,SAAS,MAAM,EAAE,OAAO,iBAAiB,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,4CA2EhH,CAAA"}
@@ -1,38 +1,61 @@
1
- import { jsxs as s, jsx as a } from "react/jsx-runtime";
2
- import { forwardRef as c } from "react";
3
- import { CommandItem as f } from "../Command/Command.js";
4
- import { Check as d } from "lucide-react";
5
- import { cn as t } from "@oneplatformdev/utils";
6
- const u = 8, C = c((i, n) => {
7
- const { children: r, setOpen: m, option: e, onChangeOption: o, value: l = "", deep: p = 0 } = i;
8
- return /* @__PURE__ */ s(
9
- f,
1
+ import { jsxs as m, jsx as s } from "react/jsx-runtime";
2
+ import { CommandItem as v } from "../Command/Command.js";
3
+ import { Check as y } from "lucide-react";
4
+ import { cn as p } from "@oneplatformdev/utils";
5
+ const h = 24, C = (d) => {
6
+ const {
7
+ children: f,
8
+ setOpen: i,
9
+ option: e,
10
+ onChangeOption: r,
11
+ value: c = "",
12
+ deep: t = 0,
13
+ defaultNodeDisabled: o,
14
+ defaultNodeMatched: n,
15
+ defaultNodeMuted: l,
16
+ defaultNodeInteractive: a
17
+ } = d;
18
+ return /* @__PURE__ */ m(
19
+ v,
10
20
  {
11
- ref: n,
12
21
  value: e.value,
22
+ "data-matched": e.matched ?? !0,
13
23
  onSelect: () => {
14
- l === e.value ? o?.({ value: "", label: "" }) : o?.(e), m(!1);
24
+ if (!(typeof a == "function" ? a(e, t) : a ?? !0)) return i(!1);
25
+ c === e.value ? r?.({ value: "", label: "" }) : r?.(e), i(!1);
15
26
  },
27
+ className: "py-0",
16
28
  style: {
17
- paddingLeft: (p + 1) * u
29
+ "--deep-space": `${t * h}px`
18
30
  },
31
+ disabled: typeof o == "function" ? o(e, t) : o ?? !1,
19
32
  children: [
20
- r,
21
- /* @__PURE__ */ a(
33
+ /* @__PURE__ */ s(
34
+ "div",
35
+ {
36
+ style: { paddingLeft: "var(--deep-space)" },
37
+ className: "relative w-10 aspect-square",
38
+ children: f
39
+ }
40
+ ),
41
+ /* @__PURE__ */ s(
22
42
  "span",
23
43
  {
24
- className: t(
25
- "overflow-hidden whitespace-wrap text-ellipsis line-clamp-2"
44
+ className: p(
45
+ "overflow-hidden whitespace-wrap text-ellipsis line-clamp-2",
46
+ (typeof n == "function" ? n(e, t) : n ?? !1) && "font-bold",
47
+ (typeof l == "function" ? l(e, t) : l ?? !1) && "text-opacity-80",
48
+ !(typeof a == "function" ? a(e, t) : a ?? !0) && "pointer-events-none"
26
49
  ),
27
50
  children: e.label
28
51
  }
29
52
  ),
30
- /* @__PURE__ */ a(
31
- d,
53
+ /* @__PURE__ */ s(
54
+ y,
32
55
  {
33
- className: t(
56
+ className: p(
34
57
  "ml-auto",
35
- l === e.value ? "opacity-100" : "opacity-0"
58
+ c === e.value ? "opacity-100" : "opacity-0"
36
59
  )
37
60
  }
38
61
  )
@@ -40,7 +63,7 @@ const u = 8, C = c((i, n) => {
40
63
  },
41
64
  e.value
42
65
  );
43
- });
66
+ };
44
67
  export {
45
68
  C as ComboboxOptionItem
46
69
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxOptionItem.js","sources":["../../src/Combobox/ComboboxOptionItem.tsx"],"sourcesContent":["import { forwardRef, PropsWithChildren } from 'react';\nimport { CommandItem } from '../Command';\nimport { IComboboxOptionsNodeProps } from './Combobox.types';\nimport { Check } from 'lucide-react';\nimport { cn } from '@oneplatformdev/utils';\n\nconst DEEP_OFFSET = 8;\n\nexport const ComboboxOptionItem = forwardRef<\n HTMLDivElement,\n PropsWithChildren<IComboboxOptionsNodeProps>\n>((props, ref) => {\n const { children, setOpen, option, onChangeOption, value = '', deep = 0 } = props;\n return (\n <CommandItem\n ref={ref}\n key={option.value}\n value={option.value}\n onSelect={() => {\n if (value === option.value) {\n onChangeOption?.({ value: '', label: '' });\n } else {\n onChangeOption?.(option);\n }\n setOpen(false);\n }}\n style={{\n paddingLeft: (deep + 1) * DEEP_OFFSET,\n }}\n >\n {children}\n <span\n className={cn(\n 'overflow-hidden whitespace-wrap text-ellipsis line-clamp-2'\n )}\n >\n {option.label}\n </span>\n <Check\n className={cn(\n 'ml-auto',\n value === option.value ? 'opacity-100' : 'opacity-0'\n )}\n />\n </CommandItem>\n );\n});\n"],"names":["DEEP_OFFSET","ComboboxOptionItem","forwardRef","props","ref","children","setOpen","option","onChangeOption","value","deep","jsxs","CommandItem","jsx","cn","Check"],"mappings":";;;;;AAMA,MAAMA,IAAc,GAEPC,IAAqBC,EAGhC,CAACC,GAAOC,MAAQ;AAChB,QAAM,EAAE,UAAAC,GAAU,SAAAC,GAAS,QAAAC,GAAQ,gBAAAC,GAAgB,OAAAC,IAAQ,IAAI,MAAAC,IAAO,EAAA,IAAMP;AAC5E,SACE,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAAR;AAAA,MAEA,OAAOG,EAAO;AAAA,MACd,UAAU,MAAM;AACd,QAAIE,MAAUF,EAAO,QACnBC,IAAiB,EAAE,OAAO,IAAI,OAAO,IAAI,IAEzCA,IAAiBD,CAAM,GAEzBD,EAAQ,EAAK;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,cAAcI,IAAO,KAAKV;AAAA,MAAA;AAAA,MAG3B,UAAA;AAAA,QAAAK;AAAA,QACD,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC;AAAA,cACT;AAAA,YAAA;AAAA,YAGD,UAAAP,EAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAEV,gBAAAM;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,WAAWD;AAAA,cACT;AAAA,cACAL,MAAUF,EAAO,QAAQ,gBAAgB;AAAA,YAAA;AAAA,UAC3C;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IA3BKA,EAAO;AAAA,EAAA;AA8BlB,CAAC;"}
1
+ {"version":3,"file":"ComboboxOptionItem.js","sources":["../../src/Combobox/ComboboxOptionItem.tsx"],"sourcesContent":["import { CSSProperties, PropsWithChildren } from 'react';\nimport { CommandItem } from '../Command';\nimport { IComboboxOptionsNodeProps } from './Combobox.types';\nimport { Check } from 'lucide-react';\nimport { cn } from '@oneplatformdev/utils';\n\nconst DEEP_OFFSET = 24;\nexport const ComboboxOptionItem = <Data extends object>(props: PropsWithChildren<IComboboxOptionsNodeProps<Data>>) => {\n const {\n children,\n setOpen,\n option,\n onChangeOption,\n value = '',\n deep = 0,\n defaultNodeDisabled,\n defaultNodeMatched,\n defaultNodeMuted,\n defaultNodeInteractive,\n } = props;\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n data-matched={option.matched ?? true}\n onSelect={() => {\n const interactive = typeof defaultNodeInteractive === \"function\"\n ? defaultNodeInteractive(option, deep)\n : defaultNodeInteractive ?? true\n if(!interactive) return setOpen(false);\n if (value === option.value) {\n onChangeOption?.({ value: '', label: '' });\n } else {\n onChangeOption?.(option);\n }\n setOpen(false);\n }}\n className='py-0'\n style={{\n '--deep-space': `${deep * DEEP_OFFSET}px`,\n } as CSSProperties}\n disabled={typeof defaultNodeDisabled === \"function\"\n ? defaultNodeDisabled(option, deep)\n : defaultNodeDisabled ?? false}\n >\n <div\n style={{ paddingLeft: 'var(--deep-space)' }}\n className='relative w-10 aspect-square'\n >\n {children}\n </div>\n <span\n className={cn(\n 'overflow-hidden whitespace-wrap text-ellipsis line-clamp-2',\n (() => {\n return typeof defaultNodeMatched === \"function\"\n ? defaultNodeMatched(option, deep)\n : defaultNodeMatched ?? false\n })() && 'font-bold',\n (() => {\n return typeof defaultNodeMuted === \"function\"\n ? defaultNodeMuted(option, deep)\n : defaultNodeMuted ?? false\n })() && 'text-opacity-80',\n (() => {\n const res = typeof defaultNodeInteractive === \"function\"\n ? defaultNodeInteractive(option, deep)\n : defaultNodeInteractive ?? true\n return !res;\n })() && 'pointer-events-none',\n )}\n >\n {option.label}\n </span>\n <Check\n className={cn(\n 'ml-auto',\n value === option.value ? 'opacity-100' : 'opacity-0'\n )}\n />\n </CommandItem>\n );\n}\n"],"names":["DEEP_OFFSET","ComboboxOptionItem","props","children","setOpen","option","onChangeOption","value","deep","defaultNodeDisabled","defaultNodeMatched","defaultNodeMuted","defaultNodeInteractive","jsxs","CommandItem","jsx","cn","Check"],"mappings":";;;;AAMA,MAAMA,IAAc,IACPC,IAAqB,CAAsBC,MAA8D;AACpH,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,QAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,MAAAC,IAAO;AAAA,IACP,qBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,wBAAAC;AAAA,EAAA,IACEV;AACJ,SACE,gBAAAW;AAAA,IAACC;AAAA,IAAA;AAAA,MAEC,OAAOT,EAAO;AAAA,MACd,gBAAcA,EAAO,WAAW;AAAA,MAChC,UAAU,MAAM;AAId,YAAG,EAHiB,OAAOO,KAA2B,aAClDA,EAAuBP,GAAQG,CAAI,IACnCI,KAA0B,IACb,QAAOR,EAAQ,EAAK;AACrC,QAAIG,MAAUF,EAAO,QACnBC,IAAiB,EAAE,OAAO,IAAI,OAAO,IAAI,IAEzCA,IAAiBD,CAAM,GAEzBD,EAAQ,EAAK;AAAA,MACf;AAAA,MACA,WAAU;AAAA,MACV,OAAO;AAAA,QACL,gBAAgB,GAAGI,IAAOR,CAAW;AAAA,MAAA;AAAA,MAEvC,UAAU,OAAOS,KAAwB,aACrCA,EAAoBJ,GAAQG,CAAI,IAChCC,KAAuB;AAAA,MAE3B,UAAA;AAAA,QAAA,gBAAAM;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO,EAAE,aAAa,oBAAA;AAAA,YACtB,WAAU;AAAA,YAET,UAAAZ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH,gBAAAY;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC;AAAA,cACT;AAAA,eAEO,OAAON,KAAuB,aACjCA,EAAmBL,GAAQG,CAAI,IAC/BE,KAAsB,OAClB;AAAA,eAEC,OAAOC,KAAqB,aAC/BA,EAAiBN,GAAQG,CAAI,IAC7BG,KAAoB,OAClB;AAAA,cAKC,EAHK,OAAOC,KAA2B,aAC1CA,EAAuBP,GAAQG,CAAI,IACnCI,KAA0B,OAExB;AAAA,YAAA;AAAA,YAGT,UAAAP,EAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAEV,gBAAAU;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,WAAWD;AAAA,cACT;AAAA,cACAT,MAAUF,EAAO,QAAQ,gBAAgB;AAAA,YAAA;AAAA,UAC3C;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAzDKA,EAAO;AAAA,EAAA;AA4DlB;"}
@@ -1,4 +1,4 @@
1
1
  import { IComboboxOptionsNodeProps, IComboboxOptionsProps } from './Combobox.types';
2
- export declare const ComboboxOptionsNode: import('react').ForwardRefExoticComponent<IComboboxOptionsNodeProps & import('react').RefAttributes<HTMLDivElement>>;
3
- export declare const ComboboxOptions: import('react').ForwardRefExoticComponent<IComboboxOptionsProps & import('react').RefAttributes<HTMLDivElement>>;
2
+ export declare const ComboboxOptionsNode: <Data extends object>(props: IComboboxOptionsNodeProps<Data>) => import("react/jsx-runtime").JSX.Element;
3
+ export declare const ComboboxOptions: <Data extends object>(props: IComboboxOptionsProps<Data>) => import("react/jsx-runtime").JSX.Element;
4
4
  //# sourceMappingURL=ComboboxOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxOptions.d.ts","sourceRoot":"","sources":["../../src/Combobox/ComboboxOptions.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAY1B,eAAO,MAAM,mBAAmB,sHA4D9B,CAAC;AAEH,eAAO,MAAM,eAAe,kHAY1B,CAAC"}
1
+ {"version":3,"file":"ComboboxOptions.d.ts","sourceRoot":"","sources":["../../src/Combobox/ComboboxOptions.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAY1B,eAAO,MAAM,mBAAmB,GAAI,IAAI,SAAS,MAAM,EAAE,OAAO,yBAAyB,CAAC,IAAI,CAAC,4CAqE9F,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,IAAI,SAAS,MAAM,EAAE,OAAO,qBAAqB,CAAC,IAAI,CAAC,4CAStF,CAAA"}
@@ -1,65 +1,65 @@
1
- import { jsx as o, jsxs as m } from "react/jsx-runtime";
2
- import { Button as u } from "../Button/Button.js";
3
- import "../Button/buttonVariants.js";
4
- import { forwardRef as c, useState as h } from "react";
5
- import { Collapsible as b, CollapsibleTrigger as g, CollapsibleContent as C } from "../Collapsible/Collapsible.js";
1
+ import { jsx as e, jsxs as u } from "react/jsx-runtime";
2
+ import { useState as b } from "react";
3
+ import { Collapsible as h, CollapsibleTrigger as g, CollapsibleContent as x } from "../Collapsible/Collapsible.js";
6
4
  import { ComboboxOptionItem as p } from "./ComboboxOptionItem.js";
7
- import { ChevronDownIcon as x } from "lucide-react";
8
- import { cn as a } from "@oneplatformdev/utils";
9
- const d = c((e, n) => {
10
- const { option: s, deep: i = 0 } = e, [t, l] = h(!0);
11
- return s?.items?.length ? /* @__PURE__ */ m(
12
- b,
5
+ import { ChevronRightIcon as C } from "lucide-react";
6
+ import { cn as l } from "@oneplatformdev/utils";
7
+ import { ButtonIcon as v } from "../ButtonIcon/ButtonIcon.js";
8
+ import "../ButtonIcon/buttonIconVariants.js";
9
+ const m = (t) => {
10
+ const { option: o, deep: n = 0, defaultNodeOpen: r, defaultNodeDisabled: s, searchTerm: d } = t, [i, c] = b(() => typeof r == "function" ? r(o, n) : r ?? (!!d || !n));
11
+ return o?.items?.length ? /* @__PURE__ */ u(
12
+ h,
13
13
  {
14
- ref: n,
15
- open: t,
16
- onOpenChange: l,
17
- "data-opened": t,
18
- className: a("group/collapsible"),
14
+ open: i,
15
+ onOpenChange: c,
16
+ "data-opened": i,
17
+ className: l("group/collapsible"),
18
+ disabled: typeof s == "function" ? s(o, n) : s ?? !1,
19
19
  children: [
20
- /* @__PURE__ */ o(p, { ...e, children: /* @__PURE__ */ o(g, { asChild: !0, children: /* @__PURE__ */ m(
21
- u,
20
+ /* @__PURE__ */ e(p, { ...t, children: /* @__PURE__ */ e(g, { asChild: !0, children: /* @__PURE__ */ e("div", { className: "aspect-square size-10 absolute top-0 letf-0 -translate-x-2", children: /* @__PURE__ */ e(
21
+ v,
22
22
  {
23
- onClick: (r) => {
24
- r?.preventDefault(), r?.stopPropagation(), l((f) => !f);
23
+ onClick: (a) => {
24
+ a?.preventDefault(), a?.stopPropagation(), c((f) => !f);
25
25
  },
26
26
  type: "button",
27
27
  variant: "ghost",
28
- size: "sm",
29
- className: a("aspect-square size-6", "transition-transform"),
30
- children: [
31
- /* @__PURE__ */ o(
32
- x,
33
- {
34
- className: a(
35
- "size-5!",
36
- "transition-transform",
37
- t && "rotate-180"
38
- )
39
- }
40
- ),
41
- /* @__PURE__ */ o("span", { className: "sr-only", children: "Toggle" })
42
- ]
28
+ color: "secondary",
29
+ className: l(
30
+ "bg-transparent hover:bg-transparent active:bg-transparent focus:bg-transparent"
31
+ ),
32
+ icon: /* @__PURE__ */ e(
33
+ C,
34
+ {
35
+ strokeWidth: 2,
36
+ className: l(
37
+ "text-[#06080D]",
38
+ "transition-transform",
39
+ i && "rotate-90"
40
+ )
41
+ }
42
+ )
43
43
  }
44
- ) }) }),
45
- /* @__PURE__ */ o(C, { children: /* @__PURE__ */ o("div", { className: "flex flex-col gap-0", children: s?.items.map((r) => /* @__PURE__ */ o(
46
- d,
44
+ ) }) }) }),
45
+ /* @__PURE__ */ e(x, { children: /* @__PURE__ */ e("div", { className: "flex flex-col gap-0", children: o?.items.map((a) => /* @__PURE__ */ e(
46
+ m,
47
47
  {
48
- ...e,
49
- deep: i + 1,
50
- option: r
48
+ ...t,
49
+ deep: n + 1,
50
+ option: a
51
51
  },
52
- r.value
52
+ a.value
53
53
  )) }) })
54
54
  ]
55
55
  }
56
- ) : /* @__PURE__ */ o(p, { ...e, ref: n });
57
- }), I = c((e, n) => {
58
- const { options: s = [], ...i } = e;
59
- return /* @__PURE__ */ o("div", { ref: n, className: "flex flex-col gap-0", children: s.map((t) => /* @__PURE__ */ o(d, { ...i, option: t }, t.value)) });
60
- });
56
+ ) : /* @__PURE__ */ e(p, { ...t });
57
+ }, q = (t) => {
58
+ const { options: o = [], ...n } = t;
59
+ return /* @__PURE__ */ e("div", { className: "flex flex-col gap-0", children: o.map((r) => /* @__PURE__ */ e(m, { ...n, option: r }, r.value)) });
60
+ };
61
61
  export {
62
- I as ComboboxOptions,
63
- d as ComboboxOptionsNode
62
+ q as ComboboxOptions,
63
+ m as ComboboxOptionsNode
64
64
  };
65
65
  //# sourceMappingURL=ComboboxOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxOptions.js","sources":["../../src/Combobox/ComboboxOptions.tsx"],"sourcesContent":["import {\n IComboboxOptionsNodeProps,\n IComboboxOptionsProps,\n} from './Combobox.types';\nimport { Button } from '../Button';\nimport { forwardRef, useState } from 'react';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../Collapsible';\nimport { ComboboxOptionItem } from './ComboboxOptionItem';\nimport { ChevronDownIcon } from 'lucide-react';\nimport { cn } from '@oneplatformdev/utils';\n\nexport const ComboboxOptionsNode = forwardRef<\n HTMLDivElement,\n IComboboxOptionsNodeProps\n>((props, ref) => {\n const { option, deep = 0 } = props;\n\n const [open, onOpenChange] = useState(true);\n\n if (!option?.items?.length) {\n return <ComboboxOptionItem {...props} ref={ref} />;\n }\n return (\n <Collapsible\n ref={ref}\n open={open}\n onOpenChange={onOpenChange}\n data-opened={open}\n className={cn('group/collapsible')}\n >\n <ComboboxOptionItem {...props}>\n <CollapsibleTrigger asChild>\n <Button\n onClick={(e) => {\n e?.preventDefault();\n e?.stopPropagation();\n onOpenChange((prev) => !prev);\n }}\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn('aspect-square size-6', 'transition-transform')}\n >\n <ChevronDownIcon\n className={cn(\n 'size-5!',\n 'transition-transform',\n open && 'rotate-180'\n )}\n />\n <span className=\"sr-only\">Toggle</span>\n </Button>\n </CollapsibleTrigger>\n </ComboboxOptionItem>\n\n <CollapsibleContent>\n <div className=\"flex flex-col gap-0\">\n {option?.items.map((opt) => {\n return (\n <ComboboxOptionsNode\n key={opt.value}\n {...props}\n deep={deep + 1}\n option={opt}\n />\n );\n })}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n});\n\nexport const ComboboxOptions = forwardRef<\n HTMLDivElement,\n IComboboxOptionsProps\n>((props, ref) => {\n const { options = [], ...rest } = props;\n return (\n <div ref={ref} className=\"flex flex-col gap-0\">\n {options.map((option) => (\n <ComboboxOptionsNode key={option.value} {...rest} option={option} />\n ))}\n </div>\n );\n});\n"],"names":["ComboboxOptionsNode","forwardRef","props","ref","option","deep","open","onOpenChange","useState","jsxs","Collapsible","cn","jsx","ComboboxOptionItem","CollapsibleTrigger","Button","e","prev","ChevronDownIcon","CollapsibleContent","opt","ComboboxOptions","options","rest"],"mappings":";;;;;;;;AAeO,MAAMA,IAAsBC,EAGjC,CAACC,GAAOC,MAAQ;AAChB,QAAM,EAAE,QAAAC,GAAQ,MAAAC,IAAO,EAAA,IAAMH,GAEvB,CAACI,GAAMC,CAAY,IAAIC,EAAS,EAAI;AAE1C,SAAKJ,GAAQ,OAAO,SAIlB,gBAAAK;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAAP;AAAA,MACA,MAAAG;AAAA,MACA,cAAAC;AAAA,MACA,eAAaD;AAAA,MACb,WAAWK,EAAG,mBAAmB;AAAA,MAEjC,UAAA;AAAA,QAAA,gBAAAC,EAACC,KAAoB,GAAGX,GACtB,UAAA,gBAAAU,EAACE,GAAA,EAAmB,SAAO,IACzB,UAAA,gBAAAL;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,SAAS,CAACC,MAAM;AACd,cAAAA,GAAG,eAAA,GACHA,GAAG,gBAAA,GACHT,EAAa,CAACU,MAAS,CAACA,CAAI;AAAA,YAC9B;AAAA,YACA,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,WAAWN,EAAG,wBAAwB,sBAAsB;AAAA,YAE5D,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAACM;AAAA,gBAAA;AAAA,kBACC,WAAWP;AAAA,oBACT;AAAA,oBACA;AAAA,oBACAL,KAAQ;AAAA,kBAAA;AAAA,gBACV;AAAA,cAAA;AAAA,cAEF,gBAAAM,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA,SAAA,CAAM;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAEpC,EAAA,CACF;AAAA,QAEA,gBAAAA,EAACO,GAAA,EACC,UAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,uBACZ,UAAAR,GAAQ,MAAM,IAAI,CAACgB,MAEhB,gBAAAR;AAAA,UAACZ;AAAA,UAAA;AAAA,YAEE,GAAGE;AAAA,YACJ,MAAMG,IAAO;AAAA,YACb,QAAQe;AAAA,UAAA;AAAA,UAHHA,EAAI;AAAA,QAAA,CAMd,GACH,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAhDK,gBAAAR,EAACC,GAAA,EAAoB,GAAGX,GAAO,KAAAC,EAAA,CAAU;AAmDpD,CAAC,GAEYkB,IAAkBpB,EAG7B,CAACC,GAAOC,MAAQ;AAChB,QAAM,EAAE,SAAAmB,IAAU,CAAA,GAAI,GAAGC,MAASrB;AAClC,2BACG,OAAA,EAAI,KAAAC,GAAU,WAAU,uBACtB,YAAQ,IAAI,CAACC,MACZ,gBAAAQ,EAACZ,KAAwC,GAAGuB,GAAM,QAAAnB,KAAxBA,EAAO,KAAiC,CACnE,GACH;AAEJ,CAAC;"}
1
+ {"version":3,"file":"ComboboxOptions.js","sources":["../../src/Combobox/ComboboxOptions.tsx"],"sourcesContent":["import {\n IComboboxOptionsNodeProps,\n IComboboxOptionsProps,\n} from './Combobox.types';\nimport { useState } from 'react';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../Collapsible';\nimport { ComboboxOptionItem } from './ComboboxOptionItem';\nimport { ChevronRightIcon } from 'lucide-react';\nimport { cn } from '@oneplatformdev/utils';\nimport { ButtonIcon } from \"../ButtonIcon\";\n\nexport const ComboboxOptionsNode = <Data extends object>(props: IComboboxOptionsNodeProps<Data>) => {\n const { option, deep = 0, defaultNodeOpen, defaultNodeDisabled, searchTerm } = props;\n\n const [open, onOpenChange] = useState(() => {\n const def = !!searchTerm || !deep;\n return typeof defaultNodeOpen === \"function\"\n ? defaultNodeOpen(option, deep)\n : defaultNodeOpen ?? def\n });\n\n if (!option?.items?.length) {\n return <ComboboxOptionItem {...props} />;\n }\n return (\n <Collapsible\n open={open}\n onOpenChange={onOpenChange}\n data-opened={open}\n className={cn('group/collapsible')}\n disabled={typeof defaultNodeDisabled === \"function\"\n ? defaultNodeDisabled(option, deep)\n : defaultNodeDisabled ?? false}\n >\n <ComboboxOptionItem {...props}>\n <CollapsibleTrigger asChild>\n <div className='aspect-square size-10 absolute top-0 letf-0 -translate-x-2'>\n <ButtonIcon\n onClick={(e) => {\n e?.preventDefault();\n e?.stopPropagation();\n onOpenChange((prev) => !prev);\n }}\n type=\"button\"\n variant=\"ghost\"\n color='secondary'\n className={cn(\n 'bg-transparent hover:bg-transparent active:bg-transparent focus:bg-transparent'\n )}\n icon={(\n <ChevronRightIcon\n strokeWidth={2}\n className={cn(\n 'text-[#06080D]',\n 'transition-transform',\n open && 'rotate-90'\n )}\n />\n )}\n />\n </div>\n </CollapsibleTrigger>\n </ComboboxOptionItem>\n\n <CollapsibleContent>\n <div className=\"flex flex-col gap-0\">\n {option?.items.map((opt) => {\n return (\n <ComboboxOptionsNode\n key={opt.value}\n {...props}\n deep={deep + 1}\n option={opt}\n />\n );\n })}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\nexport const ComboboxOptions = <Data extends object>(props: IComboboxOptionsProps<Data>) => {\n const { options = [], ...rest } = props;\n return (\n <div className=\"flex flex-col gap-0\">\n {options.map((option) => (\n <ComboboxOptionsNode key={option.value} {...rest} option={option} />\n ))}\n </div>\n );\n}\n"],"names":["ComboboxOptionsNode","props","option","deep","defaultNodeOpen","defaultNodeDisabled","searchTerm","open","onOpenChange","useState","jsxs","Collapsible","cn","jsx","ComboboxOptionItem","CollapsibleTrigger","ButtonIcon","e","prev","ChevronRightIcon","CollapsibleContent","opt","ComboboxOptions","options","rest"],"mappings":";;;;;;;;AAeO,MAAMA,IAAsB,CAAsBC,MAA2C;AAClG,QAAM,EAAE,QAAAC,GAAQ,MAAAC,IAAO,GAAG,iBAAAC,GAAiB,qBAAAC,GAAqB,YAAAC,MAAeL,GAEzE,CAACM,GAAMC,CAAY,IAAIC,EAAS,MAE7B,OAAOL,KAAoB,aAC9BA,EAAgBF,GAAQC,CAAI,IAC5BC,MAHQ,CAAC,CAACE,KAAc,CAACH,EAI9B;AAED,SAAKD,GAAQ,OAAO,SAIlB,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAJ;AAAA,MACA,cAAAC;AAAA,MACA,eAAaD;AAAA,MACb,WAAWK,EAAG,mBAAmB;AAAA,MACjC,UAAU,OAAOP,KAAwB,aACrCA,EAAoBH,GAAQC,CAAI,IAChCE,KAAuB;AAAA,MAE3B,UAAA;AAAA,QAAA,gBAAAQ,EAACC,GAAA,EAAoB,GAAGb,GACtB,UAAA,gBAAAY,EAACE,GAAA,EAAmB,SAAO,IACzB,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,8DACb,UAAA,gBAAAA;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,SAAS,CAACC,MAAM;AACd,cAAAA,GAAG,eAAA,GACHA,GAAG,gBAAA,GACHT,EAAa,CAACU,MAAS,CAACA,CAAI;AAAA,YAC9B;AAAA,YACA,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,OAAM;AAAA,YACN,WAAWN;AAAA,cACT;AAAA,YAAA;AAAA,YAEF,MACE,gBAAAC;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,aAAa;AAAA,gBACb,WAAWP;AAAA,kBACT;AAAA,kBACA;AAAA,kBACAL,KAAQ;AAAA,gBAAA;AAAA,cACV;AAAA,YAAA;AAAA,UACF;AAAA,QAAA,EAEJ,CACF,GACF,GACF;AAAA,QAEA,gBAAAM,EAACO,GAAA,EACC,UAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,uBACZ,UAAAX,GAAQ,MAAM,IAAI,CAACmB,MAEhB,gBAAAR;AAAA,UAACb;AAAA,UAAA;AAAA,YAEE,GAAGC;AAAA,YACJ,MAAME,IAAO;AAAA,YACb,QAAQkB;AAAA,UAAA;AAAA,UAHHA,EAAI;AAAA,QAAA,CAMd,GACH,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAvDK,gBAAAR,EAACC,GAAA,EAAoB,GAAGb,EAAA,CAAO;AA0D1C,GAEaqB,IAAkB,CAAsBrB,MAAuC;AAC1F,QAAM,EAAE,SAAAsB,IAAU,CAAA,GAAI,GAAGC,MAASvB;AAClC,2BACG,OAAA,EAAI,WAAU,uBACZ,UAAAsB,EAAQ,IAAI,CAACrB,MACZ,gBAAAW,EAACb,GAAA,EAAwC,GAAGwB,GAAM,QAAAtB,EAAA,GAAxBA,EAAO,KAAiC,CACnE,GACH;AAEJ;"}