@helpwave/hightide 0.0.15 → 0.0.16

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 (111) hide show
  1. package/dist/index.d.mts +86 -2
  2. package/dist/index.d.ts +86 -2
  3. package/dist/index.js +5714 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +5541 -0
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/util/news.d.mts +9 -9
  8. package/dist/util/news.d.ts +9 -9
  9. package/package.json +11 -7
  10. package/dist/components/Span.d.mts +0 -2
  11. package/dist/components/Span.d.ts +0 -2
  12. package/dist/components/Span.js +0 -2
  13. package/dist/components/Span.js.map +0 -1
  14. package/dist/components/Span.mjs +0 -1
  15. package/dist/components/Span.mjs.map +0 -1
  16. package/dist/components/examples/InputGroupExample.d.mts +0 -11
  17. package/dist/components/examples/InputGroupExample.d.ts +0 -11
  18. package/dist/components/examples/InputGroupExample.js +0 -466
  19. package/dist/components/examples/InputGroupExample.js.map +0 -1
  20. package/dist/components/examples/InputGroupExample.mjs +0 -436
  21. package/dist/components/examples/InputGroupExample.mjs.map +0 -1
  22. package/dist/components/examples/MultiSelectExample.d.mts +0 -14
  23. package/dist/components/examples/MultiSelectExample.d.ts +0 -14
  24. package/dist/components/examples/MultiSelectExample.js +0 -661
  25. package/dist/components/examples/MultiSelectExample.js.map +0 -1
  26. package/dist/components/examples/MultiSelectExample.mjs +0 -631
  27. package/dist/components/examples/MultiSelectExample.mjs.map +0 -1
  28. package/dist/components/examples/SearchableSelectExample.d.mts +0 -13
  29. package/dist/components/examples/SearchableSelectExample.d.ts +0 -13
  30. package/dist/components/examples/SearchableSelectExample.js +0 -365
  31. package/dist/components/examples/SearchableSelectExample.js.map +0 -1
  32. package/dist/components/examples/SearchableSelectExample.mjs +0 -335
  33. package/dist/components/examples/SearchableSelectExample.mjs.map +0 -1
  34. package/dist/components/examples/SelectExample.d.mts +0 -9
  35. package/dist/components/examples/SelectExample.d.ts +0 -9
  36. package/dist/components/examples/SelectExample.js +0 -180
  37. package/dist/components/examples/SelectExample.js.map +0 -1
  38. package/dist/components/examples/SelectExample.mjs +0 -145
  39. package/dist/components/examples/SelectExample.mjs.map +0 -1
  40. package/dist/components/examples/StackingModals.d.mts +0 -8
  41. package/dist/components/examples/StackingModals.d.ts +0 -8
  42. package/dist/components/examples/StackingModals.js +0 -498
  43. package/dist/components/examples/StackingModals.js.map +0 -1
  44. package/dist/components/examples/StackingModals.mjs +0 -463
  45. package/dist/components/examples/StackingModals.mjs.map +0 -1
  46. package/dist/components/examples/TableExample.d.mts +0 -13
  47. package/dist/components/examples/TableExample.d.ts +0 -13
  48. package/dist/components/examples/TableExample.js +0 -853
  49. package/dist/components/examples/TableExample.js.map +0 -1
  50. package/dist/components/examples/TableExample.mjs +0 -823
  51. package/dist/components/examples/TableExample.mjs.map +0 -1
  52. package/dist/components/examples/TextareaExample.d.mts +0 -12
  53. package/dist/components/examples/TextareaExample.d.ts +0 -12
  54. package/dist/components/examples/TextareaExample.js +0 -176
  55. package/dist/components/examples/TextareaExample.js.map +0 -1
  56. package/dist/components/examples/TextareaExample.mjs +0 -141
  57. package/dist/components/examples/TextareaExample.mjs.map +0 -1
  58. package/dist/components/examples/TileExample.d.mts +0 -14
  59. package/dist/components/examples/TileExample.d.ts +0 -14
  60. package/dist/components/examples/TileExample.js +0 -79
  61. package/dist/components/examples/TileExample.js.map +0 -1
  62. package/dist/components/examples/TileExample.mjs +0 -44
  63. package/dist/components/examples/TileExample.mjs.map +0 -1
  64. package/dist/components/examples/Title.d.mts +0 -2
  65. package/dist/components/examples/Title.d.ts +0 -2
  66. package/dist/components/examples/Title.js +0 -2
  67. package/dist/components/examples/Title.js.map +0 -1
  68. package/dist/components/examples/Title.mjs +0 -1
  69. package/dist/components/examples/Title.mjs.map +0 -1
  70. package/dist/components/examples/date/DateTimePickerExample.d.mts +0 -18
  71. package/dist/components/examples/date/DateTimePickerExample.d.ts +0 -18
  72. package/dist/components/examples/date/DateTimePickerExample.js +0 -879
  73. package/dist/components/examples/date/DateTimePickerExample.js.map +0 -1
  74. package/dist/components/examples/date/DateTimePickerExample.mjs +0 -844
  75. package/dist/components/examples/date/DateTimePickerExample.mjs.map +0 -1
  76. package/dist/components/examples/properties/CheckboxPropertyExample.d.mts +0 -16
  77. package/dist/components/examples/properties/CheckboxPropertyExample.d.ts +0 -16
  78. package/dist/components/examples/properties/CheckboxPropertyExample.js +0 -349
  79. package/dist/components/examples/properties/CheckboxPropertyExample.js.map +0 -1
  80. package/dist/components/examples/properties/CheckboxPropertyExample.mjs +0 -314
  81. package/dist/components/examples/properties/CheckboxPropertyExample.mjs.map +0 -1
  82. package/dist/components/examples/properties/DatePropertyExample.d.mts +0 -16
  83. package/dist/components/examples/properties/DatePropertyExample.d.ts +0 -16
  84. package/dist/components/examples/properties/DatePropertyExample.js +0 -460
  85. package/dist/components/examples/properties/DatePropertyExample.js.map +0 -1
  86. package/dist/components/examples/properties/DatePropertyExample.mjs +0 -430
  87. package/dist/components/examples/properties/DatePropertyExample.mjs.map +0 -1
  88. package/dist/components/examples/properties/MultiSelectPropertyExample.d.mts +0 -18
  89. package/dist/components/examples/properties/MultiSelectPropertyExample.d.ts +0 -18
  90. package/dist/components/examples/properties/MultiSelectPropertyExample.js +0 -848
  91. package/dist/components/examples/properties/MultiSelectPropertyExample.js.map +0 -1
  92. package/dist/components/examples/properties/MultiSelectPropertyExample.mjs +0 -818
  93. package/dist/components/examples/properties/MultiSelectPropertyExample.mjs.map +0 -1
  94. package/dist/components/examples/properties/NumberPropertyExample.d.mts +0 -14
  95. package/dist/components/examples/properties/NumberPropertyExample.d.ts +0 -14
  96. package/dist/components/examples/properties/NumberPropertyExample.js +0 -456
  97. package/dist/components/examples/properties/NumberPropertyExample.js.map +0 -1
  98. package/dist/components/examples/properties/NumberPropertyExample.mjs +0 -426
  99. package/dist/components/examples/properties/NumberPropertyExample.mjs.map +0 -1
  100. package/dist/components/examples/properties/SelectPropertyExample.d.mts +0 -17
  101. package/dist/components/examples/properties/SelectPropertyExample.d.ts +0 -17
  102. package/dist/components/examples/properties/SelectPropertyExample.js +0 -584
  103. package/dist/components/examples/properties/SelectPropertyExample.js.map +0 -1
  104. package/dist/components/examples/properties/SelectPropertyExample.mjs +0 -554
  105. package/dist/components/examples/properties/SelectPropertyExample.mjs.map +0 -1
  106. package/dist/components/examples/properties/TextPropertyExample.d.mts +0 -16
  107. package/dist/components/examples/properties/TextPropertyExample.d.ts +0 -16
  108. package/dist/components/examples/properties/TextPropertyExample.js +0 -405
  109. package/dist/components/examples/properties/TextPropertyExample.js.map +0 -1
  110. package/dist/components/examples/properties/TextPropertyExample.mjs +0 -370
  111. package/dist/components/examples/properties/TextPropertyExample.mjs.map +0 -1
@@ -1,631 +0,0 @@
1
- // src/components/examples/MultiSelectExample.tsx
2
- import { useEffect as useEffect7, useState as useState8 } from "react";
3
-
4
- // src/components/user-input/MultiSelect.tsx
5
- import { useState as useState7 } from "react";
6
- import { Search } from "lucide-react";
7
-
8
- // src/hooks/useLanguage.tsx
9
- import { createContext, useContext, useEffect as useEffect2, useState as useState2 } from "react";
10
-
11
- // src/hooks/useLocalStorage.tsx
12
- import { useCallback, useEffect, useState } from "react";
13
-
14
- // src/hooks/useLanguage.tsx
15
- import { jsx } from "react/jsx-runtime";
16
- var DEFAULT_LANGUAGE = "en";
17
- var LanguageContext = createContext({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v });
18
- var useLanguage = () => useContext(LanguageContext);
19
-
20
- // src/hooks/useTranslation.ts
21
- var useTranslation = (defaults, translationOverwrite = {}) => {
22
- const { language: languageProp, translation: overwrite } = translationOverwrite;
23
- const { language: inferredLanguage } = useLanguage();
24
- const usedLanguage = languageProp ?? inferredLanguage;
25
- let defaultValues = defaults[usedLanguage];
26
- if (overwrite && overwrite[usedLanguage]) {
27
- defaultValues = { ...defaultValues, ...overwrite[usedLanguage] };
28
- }
29
- return defaultValues;
30
- };
31
-
32
- // src/util/simpleSearch.ts
33
- var MultiSearchWithMapping = (search, objects, mapping) => {
34
- return objects.filter((object) => {
35
- const mappedSearchKeywords = mapping(object).map((value) => value.toLowerCase().trim());
36
- return !!mappedSearchKeywords.find((value) => value.includes(search.toLowerCase().trim()));
37
- });
38
- };
39
-
40
- // src/components/user-input/MultiSelect.tsx
41
- import clsx4 from "clsx";
42
-
43
- // src/components/user-input/Menu.tsx
44
- import { useRef } from "react";
45
- import clsx from "clsx";
46
-
47
- // src/hooks/useOutsideClick.ts
48
- import { useEffect as useEffect3 } from "react";
49
- var useOutsideClick = (refs, handler) => {
50
- useEffect3(() => {
51
- const listener = (event) => {
52
- if (event.target === null) return;
53
- if (refs.some((ref) => !ref.current || ref.current.contains(event.target))) {
54
- return;
55
- }
56
- handler();
57
- };
58
- document.addEventListener("mousedown", listener);
59
- document.addEventListener("touchstart", listener);
60
- return () => {
61
- document.removeEventListener("mousedown", listener);
62
- document.removeEventListener("touchstart", listener);
63
- };
64
- }, [refs, handler]);
65
- };
66
-
67
- // src/hooks/useHoverState.ts
68
- import { useEffect as useEffect4, useState as useState3 } from "react";
69
- var defaultUseHoverStateProps = {
70
- closingDelay: 200,
71
- isDisabled: false
72
- };
73
- var useHoverState = (props = void 0) => {
74
- const { closingDelay, isDisabled } = { ...defaultUseHoverStateProps, ...props };
75
- const [isHovered, setIsHovered] = useState3(false);
76
- const [timer, setTimer] = useState3();
77
- const onMouseEnter = () => {
78
- if (isDisabled) {
79
- return;
80
- }
81
- clearTimeout(timer);
82
- setIsHovered(true);
83
- };
84
- const onMouseLeave = () => {
85
- if (isDisabled) {
86
- return;
87
- }
88
- setTimer(setTimeout(() => {
89
- setIsHovered(false);
90
- }, closingDelay));
91
- };
92
- useEffect4(() => {
93
- if (timer) {
94
- return () => {
95
- clearTimeout(timer);
96
- };
97
- }
98
- });
99
- useEffect4(() => {
100
- if (timer) {
101
- clearTimeout(timer);
102
- }
103
- }, [isDisabled]);
104
- return {
105
- isHovered,
106
- setIsHovered,
107
- handlers: { onMouseEnter, onMouseLeave }
108
- };
109
- };
110
-
111
- // src/components/user-input/Menu.tsx
112
- import { jsx as jsx2, jsxs } from "react/jsx-runtime";
113
- var MenuItem = ({
114
- children,
115
- onClick,
116
- alignment = "left",
117
- className
118
- }) => /* @__PURE__ */ jsx2(
119
- "div",
120
- {
121
- className: clsx("block px-3 py-1 bg-menu-background text-menu-text hover:brightness-90", {
122
- "text-right": alignment === "right",
123
- "text-left": alignment === "left"
124
- }, className),
125
- onClick,
126
- children
127
- }
128
- );
129
- var Menu = ({
130
- trigger,
131
- children,
132
- alignment = "tl",
133
- showOnHover = false,
134
- menuClassName = ""
135
- }) => {
136
- const { isHovered: isOpen, setIsHovered: setIsOpen, handlers } = useHoverState({ isDisabled: !showOnHover });
137
- const triggerRef = useRef(null);
138
- const menuRef = useRef(null);
139
- useOutsideClick([triggerRef, menuRef], () => setIsOpen(false));
140
- return /* @__PURE__ */ jsxs(
141
- "div",
142
- {
143
- className: "relative",
144
- ...handlers,
145
- children: [
146
- trigger(() => setIsOpen(!isOpen), triggerRef),
147
- isOpen ? /* @__PURE__ */ jsx2(
148
- "div",
149
- {
150
- ref: menuRef,
151
- onClick: (e) => e.stopPropagation(),
152
- className: clsx("absolute top-full mt-1 py-2 w-60 rounded-lg bg-menu-background text-menu-text ring-1 ring-slate-900/5 text-sm leading-6 font-semibold shadow-md z-[1]", {
153
- " top-[8px]": alignment[0] === "t",
154
- " bottom-[8px]": alignment[0] === "b",
155
- " left-[-8px]": alignment[1] === "l",
156
- " right-[-8px]": alignment[1] === "r"
157
- }, menuClassName),
158
- children
159
- }
160
- ) : null
161
- ]
162
- }
163
- );
164
- };
165
-
166
- // src/components/user-input/Input.tsx
167
- import {
168
- useEffect as useEffect6,
169
- useRef as useRef2,
170
- useState as useState5,
171
- forwardRef
172
- } from "react";
173
- import clsx2 from "clsx";
174
-
175
- // src/hooks/useSaveDelay.ts
176
- import { useEffect as useEffect5, useState as useState4 } from "react";
177
- function useSaveDelay(setNotificationStatus, delay) {
178
- const [updateTimer, setUpdateTimer] = useState4(void 0);
179
- const [notificationTimer, setNotificationTimer] = useState4(void 0);
180
- const restartTimer = (onSave) => {
181
- clearTimeout(updateTimer);
182
- setUpdateTimer(setTimeout(() => {
183
- onSave();
184
- setNotificationStatus(true);
185
- clearTimeout(notificationTimer);
186
- setNotificationTimer(setTimeout(() => {
187
- setNotificationStatus(false);
188
- clearTimeout(notificationTimer);
189
- }, delay));
190
- clearTimeout(updateTimer);
191
- }, delay));
192
- };
193
- const clearUpdateTimer = (hasSaved = true) => {
194
- clearTimeout(updateTimer);
195
- if (hasSaved) {
196
- setNotificationStatus(true);
197
- clearTimeout(notificationTimer);
198
- setNotificationTimer(setTimeout(() => {
199
- setNotificationStatus(false);
200
- clearTimeout(notificationTimer);
201
- }, delay));
202
- } else {
203
- setNotificationStatus(false);
204
- }
205
- };
206
- useEffect5(() => {
207
- return () => {
208
- clearTimeout(updateTimer);
209
- clearTimeout(notificationTimer);
210
- };
211
- }, []);
212
- return { restartTimer, clearUpdateTimer };
213
- }
214
- var useSaveDelay_default = useSaveDelay;
215
-
216
- // src/util/noop.ts
217
- var noop = () => void 0;
218
-
219
- // src/components/user-input/Label.tsx
220
- import { jsx as jsx3 } from "react/jsx-runtime";
221
- var styleMapping = {
222
- labelSmall: "textstyle-label-sm",
223
- labelMedium: "textstyle-label-md",
224
- labelBig: "textstyle-label-lg"
225
- };
226
- var Label = ({
227
- children,
228
- name,
229
- labelType = "labelSmall",
230
- ...props
231
- }) => {
232
- return /* @__PURE__ */ jsx3("label", { ...props, children: children ? children : /* @__PURE__ */ jsx3("span", { className: styleMapping[labelType], children: name }) });
233
- };
234
-
235
- // src/components/user-input/Input.tsx
236
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
237
- var ControlledInput = ({
238
- id,
239
- type = "text",
240
- value,
241
- label,
242
- onChange = noop,
243
- onChangeEvent = noop,
244
- className = "",
245
- onEditCompleted,
246
- expanded = true,
247
- onBlur,
248
- containerClassName,
249
- ...restProps
250
- }) => {
251
- const {
252
- restartTimer,
253
- clearUpdateTimer
254
- } = useSaveDelay_default(() => void 0, 3e3);
255
- const ref = useRef2(null);
256
- useEffect6(() => {
257
- if (restProps.autoFocus) {
258
- ref.current?.focus();
259
- }
260
- }, [restProps.autoFocus]);
261
- return /* @__PURE__ */ jsxs2("div", { className: clsx2({ "w-full": expanded }, containerClassName), children: [
262
- label && /* @__PURE__ */ jsx4(Label, { ...label, htmlFor: id, className: clsx2("mb-1", label.className) }),
263
- /* @__PURE__ */ jsx4(
264
- "input",
265
- {
266
- ref,
267
- value,
268
- id,
269
- type,
270
- className: clsx2("block bg-surface text-on-surface px-3 py-2 rounded-md w-full border-2 border-gray-200 hover:border-primary focus:outline-none focus:border-primary focus:ring-primary", className),
271
- onBlur: (event) => {
272
- if (onBlur) {
273
- onBlur(event);
274
- }
275
- if (onEditCompleted) {
276
- onEditCompleted(event.target.value, event);
277
- clearUpdateTimer();
278
- }
279
- },
280
- onChange: (e) => {
281
- const value2 = e.target.value;
282
- if (onEditCompleted) {
283
- restartTimer(() => {
284
- onEditCompleted(value2, e);
285
- clearUpdateTimer();
286
- });
287
- }
288
- onChange(value2, e);
289
- onChangeEvent(e);
290
- },
291
- ...restProps
292
- }
293
- )
294
- ] });
295
- };
296
- var FormInput = forwardRef(function FormInput2({
297
- id,
298
- labelText,
299
- errorText,
300
- className,
301
- labelClassName,
302
- errorClassName,
303
- containerClassName,
304
- required,
305
- ...restProps
306
- }, ref) {
307
- const input = /* @__PURE__ */ jsx4(
308
- "input",
309
- {
310
- ref,
311
- id,
312
- ...restProps,
313
- className: clsx2(
314
- "block bg-surface text-on-surface px-3 py-2 rounded-md w-full border-2 border-gray-200 hover:border-primary focus:outline-none focus:border-primary focus:ring-primary",
315
- {
316
- "focus:border-primary focus:ring-primary": !errorText,
317
- "focus:border-negative focus:ring-negative text-negative": !!errorText
318
- },
319
- className
320
- )
321
- }
322
- );
323
- return /* @__PURE__ */ jsxs2("div", { className: clsx2("flex flex-col gap-y-1", containerClassName), children: [
324
- labelText && /* @__PURE__ */ jsxs2("label", { htmlFor: id, className: clsx2("textstyle-label-md", labelClassName), children: [
325
- labelText,
326
- required && /* @__PURE__ */ jsx4("span", { className: "text-primary font-bold", children: "*" })
327
- ] }),
328
- input,
329
- errorText && /* @__PURE__ */ jsx4("label", { htmlFor: id, className: clsx2("text-negative", errorClassName), children: errorText })
330
- ] });
331
- });
332
-
333
- // src/components/user-input/Checkbox.tsx
334
- import { useState as useState6 } from "react";
335
- import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
336
- import { Check, Minus } from "lucide-react";
337
- import clsx3 from "clsx";
338
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
339
- var checkboxSizeMapping = {
340
- small: "size-4",
341
- medium: "size-6",
342
- large: "size-8"
343
- };
344
- var checkboxIconSizeMapping = {
345
- small: "size-3",
346
- medium: "size-5",
347
- large: "size-7"
348
- };
349
- var ControlledCheckbox = ({
350
- id,
351
- label,
352
- checked,
353
- disabled,
354
- onChange,
355
- onChangeTristate,
356
- size = "medium",
357
- className = "",
358
- containerClassName
359
- }) => {
360
- const usedSizeClass = checkboxSizeMapping[size];
361
- const innerIconSize = checkboxIconSizeMapping[size];
362
- const propagateChange = (checked2) => {
363
- if (onChangeTristate) {
364
- onChangeTristate(checked2);
365
- }
366
- if (onChange) {
367
- onChange(checked2 === "indeterminate" ? false : checked2);
368
- }
369
- };
370
- const changeValue = () => {
371
- const newValue = checked === "indeterminate" ? false : !checked;
372
- propagateChange(newValue);
373
- };
374
- return /* @__PURE__ */ jsxs3("div", { className: clsx3("row justify-center items-center", containerClassName), children: [
375
- /* @__PURE__ */ jsx5(
376
- CheckboxPrimitive.Root,
377
- {
378
- onCheckedChange: propagateChange,
379
- checked,
380
- disabled,
381
- id,
382
- className: clsx3(usedSizeClass, `items-center border-2 rounded outline-none focus:border-primary`, {
383
- "text-disabled-text border-disabled-text": disabled,
384
- "border-on-background": !disabled,
385
- "bg-primary/30 border-primary text-primary": checked === true || checked === "indeterminate",
386
- "hover:border-gray-400 focus:hover:border-primary": !checked
387
- }, className),
388
- children: /* @__PURE__ */ jsxs3(CheckboxPrimitive.Indicator, { children: [
389
- checked === true && /* @__PURE__ */ jsx5(Check, { className: innerIconSize }),
390
- checked === "indeterminate" && /* @__PURE__ */ jsx5(Minus, { className: innerIconSize })
391
- ] })
392
- }
393
- ),
394
- label && /* @__PURE__ */ jsx5(Label, { ...label, className: clsx3("cursor-pointer", label.className), htmlFor: id, onClick: changeValue })
395
- ] });
396
- };
397
-
398
- // src/components/user-input/MultiSelect.tsx
399
- import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
400
- var defaultMultiSelectTranslation = {
401
- en: {
402
- select: "Select",
403
- search: "Search",
404
- selected: "selected"
405
- },
406
- de: {
407
- select: "Ausw\xE4hlen",
408
- search: "Suche",
409
- selected: "ausgew\xE4hlt"
410
- }
411
- };
412
- var MultiSelect = ({
413
- overwriteTranslation,
414
- options,
415
- onChange,
416
- search,
417
- disabled = false,
418
- selectedDisplay,
419
- label,
420
- hintText,
421
- showDisabledOptions = true,
422
- className = "",
423
- triggerClassName = ""
424
- }) => {
425
- const translation = useTranslation(defaultMultiSelectTranslation, overwriteTranslation);
426
- const [searchText, setSearchText] = useState7(search?.initialSearch ?? "");
427
- let filteredOptions = options;
428
- const enableSearch = !!search;
429
- if (enableSearch && !!searchText) {
430
- filteredOptions = MultiSearchWithMapping(
431
- searchText,
432
- filteredOptions,
433
- (value) => search.searchMapping(value)
434
- );
435
- }
436
- if (!showDisabledOptions) {
437
- filteredOptions = filteredOptions.filter((value) => !value.disabled);
438
- }
439
- const selectedItems = options.filter((value) => value.selected);
440
- const menuButtonText = selectedItems.length === 0 ? hintText ?? translation.select : /* @__PURE__ */ jsx6("span", { children: `${selectedItems.length} ${translation.selected}` });
441
- const borderColor = "border-menu-border";
442
- return /* @__PURE__ */ jsxs4("div", { className: clsx4(className), children: [
443
- label && /* @__PURE__ */ jsx6(
444
- Label,
445
- {
446
- ...label,
447
- htmlFor: label.name,
448
- className: clsx4(" mb-1", label.className),
449
- labelType: label.labelType ?? "labelBig"
450
- }
451
- ),
452
- /* @__PURE__ */ jsxs4(
453
- Menu,
454
- {
455
- alignment: "t_",
456
- trigger: (onClick, ref) => /* @__PURE__ */ jsx6(
457
- "div",
458
- {
459
- ref,
460
- onClick: disabled ? void 0 : onClick,
461
- className: clsx4(
462
- borderColor,
463
- "bg-menu-background text-menu-text inline-w-full justify-between items-center rounded-lg border-2 px-4 py-2 font-medium",
464
- {
465
- "hover:brightness-90 hover:border-primary cursor-pointer": !disabled,
466
- "bg-disabled-background text-disabled cursor-not-allowed": disabled
467
- },
468
- triggerClassName
469
- ),
470
- children: selectedDisplay ? selectedDisplay({ items: options, disabled }) : menuButtonText
471
- }
472
- ),
473
- menuClassName: clsx4(
474
- "!rounded-lg !shadow-lg !max-h-[500px] !min-w-[400px] !max-w-[70vh] !overflow-y-auto !border !border-2",
475
- borderColor,
476
- { "!py-0": !enableSearch, "!pb-0": enableSearch }
477
- ),
478
- children: [
479
- enableSearch && /* @__PURE__ */ jsxs4("div", { className: "row gap-x-2 items-center px-2 py-2", children: [
480
- /* @__PURE__ */ jsx6(ControlledInput, { autoFocus: true, value: searchText, onChange: setSearchText }),
481
- /* @__PURE__ */ jsx6(Search, {})
482
- ] }, "selectSearch"),
483
- filteredOptions.map((option, index) => /* @__PURE__ */ jsx6(
484
- MenuItem,
485
- {
486
- className: clsx4({
487
- "cursor-not-allowed !bg-disabled-background !text-disabled-text hover:brightness-100": !!option.disabled,
488
- "cursor-pointer": !option.disabled
489
- }),
490
- children: /* @__PURE__ */ jsxs4(
491
- "div",
492
- {
493
- className: clsx4("overflow-hidden whitespace-nowrap text-ellipsis row items-center gap-x-2", option.className),
494
- onClick: () => {
495
- if (!option.disabled) {
496
- onChange(options.map((value) => value.value === option.value ? {
497
- ...option,
498
- selected: !value.selected
499
- } : value));
500
- }
501
- },
502
- children: [
503
- /* @__PURE__ */ jsx6(ControlledCheckbox, { checked: option.selected, disabled: option.disabled, size: "small" }),
504
- option.label
505
- ]
506
- }
507
- )
508
- },
509
- `item${index}`
510
- ))
511
- ]
512
- }
513
- )
514
- ] });
515
- };
516
-
517
- // src/components/ChipList.tsx
518
- import clsx5 from "clsx";
519
- import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
520
- var Chip = ({
521
- children,
522
- trailingIcon,
523
- color = "default",
524
- variant = "normal",
525
- className = "",
526
- ...restProps
527
- }) => {
528
- const colorMapping = {
529
- default: "text-tag-default-text bg-tag-default-background",
530
- dark: "text-tag-dark-text bg-tag-dark-background",
531
- red: "text-tag-red-text bg-tag-red-background",
532
- yellow: "text-tag-yellow-text bg-tag-yellow-background",
533
- green: "text-tag-green-text bg-tag-green-background",
534
- blue: "text-tag-blue-text bg-tag-blue-background",
535
- pink: "text-tag-pink-text bg-tag-pink-background"
536
- }[color];
537
- const colorMappingIcon = {
538
- default: "text-tag-default-icon",
539
- dark: "text-tag-dark-icon",
540
- red: "text-tag-red-icon",
541
- yellow: "text-tag-yellow-icon",
542
- green: "text-tag-green-icon",
543
- blue: "text-tag-blue-icon",
544
- pink: "text-tag-pink-icon"
545
- }[color];
546
- return /* @__PURE__ */ jsxs5(
547
- "div",
548
- {
549
- ...restProps,
550
- className: clsx5(
551
- `row w-fit px-2 py-1`,
552
- colorMapping,
553
- {
554
- "rounded-md": variant === "normal",
555
- "rounded-full": variant === "fullyRounded"
556
- },
557
- className
558
- ),
559
- children: [
560
- children,
561
- trailingIcon && /* @__PURE__ */ jsx7("span", { className: colorMappingIcon, children: trailingIcon })
562
- ]
563
- }
564
- );
565
- };
566
- var ChipList = ({
567
- list,
568
- className = ""
569
- }) => {
570
- return /* @__PURE__ */ jsx7("div", { className: clsx5("flex flex-wrap gap-x-4 gap-y-2", className), children: list.map((value, index) => /* @__PURE__ */ jsx7(
571
- Chip,
572
- {
573
- ...value,
574
- color: value.color ?? "dark",
575
- variant: value.variant ?? "normal",
576
- children: value.children
577
- },
578
- index
579
- )) });
580
- };
581
-
582
- // src/components/examples/MultiSelectExample.tsx
583
- import { jsx as jsx8 } from "react/jsx-runtime";
584
- var MultiSelectExample = ({
585
- options,
586
- hintText,
587
- enableSearch,
588
- onChange,
589
- useChipDisplay = false,
590
- ...props
591
- }) => {
592
- const [usedOptions, setUsedOptions] = useState8(options);
593
- useEffect7(() => {
594
- setUsedOptions(options);
595
- }, [options]);
596
- useEffect7(() => {
597
- setUsedOptions(options);
598
- }, [options]);
599
- useEffect7(() => {
600
- setUsedOptions(options.map((value) => ({ ...value, selected: false })));
601
- }, [hintText, options]);
602
- return /* @__PURE__ */ jsx8(
603
- MultiSelect,
604
- {
605
- options: usedOptions,
606
- onChange: (value) => {
607
- onChange(value);
608
- setUsedOptions(value);
609
- },
610
- hintText,
611
- search: enableSearch ? { initialSearch: "", searchMapping: (value) => [value.label] } : void 0,
612
- selectedDisplay: useChipDisplay ? ({ items }) => {
613
- const selected = items.filter((value) => value.selected);
614
- if (selected.length === 0) {
615
- return /* @__PURE__ */ jsx8("span", { children: "Select" });
616
- }
617
- return /* @__PURE__ */ jsx8(
618
- ChipList,
619
- {
620
- list: selected.map((value) => ({ children: value.label }))
621
- }
622
- );
623
- } : void 0,
624
- ...props
625
- }
626
- );
627
- };
628
- export {
629
- MultiSelectExample
630
- };
631
- //# sourceMappingURL=MultiSelectExample.mjs.map