@pathscale/ui 0.0.1 → 0.0.3

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 (131) hide show
  1. package/dist/Accordion-JZGWxBMK.d.ts +27 -0
  2. package/dist/Autocomplete-gLkjMHrc.d.ts +28 -0
  3. package/dist/Checkbox-BjaweaOH.d.ts +40 -0
  4. package/dist/Field-DfUn85_1.d.ts +49 -0
  5. package/dist/{Input-BQbTzjIO.d.ts → Input-C1bm4HGf.d.ts} +1 -1
  6. package/dist/Pagination-CJtlFMHy.d.ts +43 -0
  7. package/dist/Progress-gN0xqhAF.d.ts +64 -0
  8. package/dist/Select-CWCDBvec.d.ts +44 -0
  9. package/dist/Steps-1miUeyCD.d.ts +34 -0
  10. package/dist/Switch-BiKX7HZ2.d.ts +72 -0
  11. package/dist/Table-CGa6Nop3.d.ts +39 -0
  12. package/dist/Tabs-BEnRV6GG.d.ts +42 -0
  13. package/dist/Tag-BPrhn-Ne.d.ts +42 -0
  14. package/dist/Timeline-Bd4SxHMT.d.ts +14 -0
  15. package/dist/Tooltip-BfPongoz.d.ts +53 -0
  16. package/dist/Upload-BrFuZ4JA.d.ts +39 -0
  17. package/dist/chunk/3IHANYRN.js +98 -0
  18. package/dist/chunk/3VOILEMN.js +187 -0
  19. package/dist/chunk/4TWLQ3IA.js +103 -0
  20. package/dist/chunk/6SBH3KSM.jsx +96 -0
  21. package/dist/chunk/7ROVLN3J.js +175 -0
  22. package/dist/chunk/BBDVIXAH.jsx +194 -0
  23. package/dist/chunk/{4RCWSX7S.jsx → C4745OZS.jsx} +7 -7
  24. package/dist/chunk/C4YO33NN.jsx +179 -0
  25. package/dist/chunk/CJZGTNJZ.js +115 -0
  26. package/dist/chunk/D2BEL4SM.jsx +169 -0
  27. package/dist/chunk/DBQ7IOPU.js +189 -0
  28. package/dist/chunk/DNTGSCVF.jsx +100 -0
  29. package/dist/chunk/DSTUGZW6.jsx +81 -0
  30. package/dist/chunk/ELRAUORW.jsx +179 -0
  31. package/dist/chunk/FKSQPGOD.jsx +170 -0
  32. package/dist/chunk/FPUQ25SO.js +137 -0
  33. package/dist/chunk/GLEAR2TS.jsx +160 -0
  34. package/dist/chunk/GMIXRYN3.js +138 -0
  35. package/dist/chunk/HWAGW5N4.jsx +118 -0
  36. package/dist/chunk/JWRGKHDO.js +172 -0
  37. package/dist/chunk/KV6LTJHI.jsx +175 -0
  38. package/dist/chunk/LAQPAV5I.jsx +187 -0
  39. package/dist/chunk/LI3HCFL7.jsx +132 -0
  40. package/dist/chunk/MAX47D6F.js +99 -0
  41. package/dist/chunk/{2JGZSAW5.js → MI773TMC.js} +6 -6
  42. package/dist/chunk/MMTAND25.jsx +126 -0
  43. package/dist/chunk/MXG3MBEN.jsx +148 -0
  44. package/dist/chunk/MYERRMTM.js +200 -0
  45. package/dist/chunk/NZKPDBTE.js +118 -0
  46. package/dist/chunk/OSJ3P7PI.js +189 -0
  47. package/dist/chunk/P2L6LFLS.js +144 -0
  48. package/dist/chunk/QLESLIWS.jsx +110 -0
  49. package/dist/chunk/QONDPQ2I.jsx +105 -0
  50. package/dist/chunk/QYEMOKUG.js +125 -0
  51. package/dist/chunk/S3ZDSQSV.js +98 -0
  52. package/dist/chunk/SCJSBRV2.jsx +39 -0
  53. package/dist/chunk/STKRVQR6.jsx +130 -0
  54. package/dist/chunk/{NZZRKP74.js → TFLJI242.js} +1 -25
  55. package/dist/chunk/TT2JYGLU.js +218 -0
  56. package/dist/chunk/V6Y5E7BL.js +133 -0
  57. package/dist/chunk/VN5BKHA2.jsx +97 -0
  58. package/dist/chunk/WOT36Q7O.js +166 -0
  59. package/dist/chunk/WUZETUQR.js +92 -0
  60. package/dist/chunk/XD34JKSU.jsx +201 -0
  61. package/dist/chunk/{GA2HCFRS.jsx → YAQK2KFY.jsx} +1 -35
  62. package/dist/chunk/YMO6RPS6.js +26 -0
  63. package/dist/components/Progress/index.d.ts +4 -39
  64. package/dist/components/Progress/index.js +1 -278
  65. package/dist/components/Progress/index.jsx +4 -199
  66. package/dist/components/accordion/index.d.ts +5 -24
  67. package/dist/components/accordion/index.js +1 -118
  68. package/dist/components/accordion/index.jsx +3 -100
  69. package/dist/components/autocomplete/index.d.ts +8 -0
  70. package/dist/components/autocomplete/index.js +1 -0
  71. package/dist/components/autocomplete/index.jsx +7 -0
  72. package/dist/components/avatar/index.js +1 -1
  73. package/dist/components/avatar/index.jsx +3 -3
  74. package/dist/components/breadcrumb/index.d.ts +2 -2
  75. package/dist/components/breadcrumb/index.js +1 -133
  76. package/dist/components/breadcrumb/index.jsx +4 -120
  77. package/dist/components/button/index.js +1 -1
  78. package/dist/components/button/index.jsx +2 -1
  79. package/dist/components/checkbox/index.d.ts +5 -37
  80. package/dist/components/checkbox/index.js +1 -137
  81. package/dist/components/checkbox/index.jsx +3 -143
  82. package/dist/components/dropdown/index.d.ts +43 -0
  83. package/dist/components/dropdown/index.js +1 -0
  84. package/dist/components/dropdown/index.jsx +12 -0
  85. package/dist/components/field/index.d.ts +7 -0
  86. package/dist/components/field/index.js +1 -0
  87. package/dist/components/field/index.jsx +7 -0
  88. package/dist/components/input/index.d.ts +2 -2
  89. package/dist/components/menu/index.d.ts +66 -0
  90. package/dist/components/menu/index.js +1 -0
  91. package/dist/components/menu/index.jsx +11 -0
  92. package/dist/components/navbar/index.d.ts +74 -0
  93. package/dist/components/navbar/index.js +1 -0
  94. package/dist/components/navbar/index.jsx +11 -0
  95. package/dist/components/pagination/index.d.ts +5 -40
  96. package/dist/components/pagination/index.js +1 -189
  97. package/dist/components/pagination/index.jsx +3 -174
  98. package/dist/components/select/index.d.ts +5 -41
  99. package/dist/components/select/index.js +1 -98
  100. package/dist/components/select/index.jsx +3 -91
  101. package/dist/components/steps/index.d.ts +8 -0
  102. package/dist/components/steps/index.js +1 -0
  103. package/dist/components/steps/index.jsx +7 -0
  104. package/dist/components/switch/index.d.ts +5 -69
  105. package/dist/components/switch/index.js +1 -144
  106. package/dist/components/switch/index.jsx +3 -155
  107. package/dist/components/table/index.d.ts +8 -0
  108. package/dist/components/table/index.js +1 -0
  109. package/dist/components/table/index.jsx +7 -0
  110. package/dist/components/tabs/index.d.ts +5 -39
  111. package/dist/components/tabs/index.js +1 -166
  112. package/dist/components/tabs/index.jsx +3 -170
  113. package/dist/components/tag/index.d.ts +5 -39
  114. package/dist/components/tag/index.js +1 -115
  115. package/dist/components/tag/index.jsx +3 -127
  116. package/dist/components/timeline/index.d.ts +7 -0
  117. package/dist/components/timeline/index.js +1 -0
  118. package/dist/components/timeline/index.jsx +7 -0
  119. package/dist/components/toast/index.d.ts +24 -0
  120. package/dist/components/toast/index.js +1 -0
  121. package/dist/components/toast/index.jsx +11 -0
  122. package/dist/components/tooltip/index.d.ts +5 -50
  123. package/dist/components/tooltip/index.js +1 -103
  124. package/dist/components/tooltip/index.jsx +3 -95
  125. package/dist/components/upload/index.d.ts +5 -36
  126. package/dist/components/upload/index.js +1 -98
  127. package/dist/components/upload/index.jsx +3 -105
  128. package/dist/index.d.ts +22 -2
  129. package/dist/index.js +23 -2
  130. package/dist/index.jsx +108 -8
  131. package/package.json +1 -1
@@ -0,0 +1,194 @@
1
+ import {
2
+ classes,
3
+ cva
4
+ } from "./P7WPLZNA.jsx";
5
+
6
+ // src/components/navbar/Navbar.tsx
7
+ import {
8
+ splitProps,
9
+ Show
10
+ } from "solid-js";
11
+
12
+ // src/components/navbar/Navbar.styles.ts
13
+ var navbarStyles = cva("flex items-center px-4", {
14
+ variants: {
15
+ color: {
16
+ info: "bg-blue-500 text-white",
17
+ primary: "bg-indigo-600 text-white",
18
+ success: "bg-green-500 text-white",
19
+ light: "bg-white text-gray-800"
20
+ }
21
+ },
22
+ defaultVariants: {
23
+ color: "info"
24
+ }
25
+ });
26
+ var navbarItemStyles = cva(
27
+ "px-3 py-2 rounded transition-colors",
28
+ {
29
+ variants: {
30
+ active: {
31
+ true: "font-semibold border-b-2 border-current",
32
+ false: "hover:bg-gray-200"
33
+ },
34
+ tag: {
35
+ div: "",
36
+ a: ""
37
+ }
38
+ },
39
+ defaultVariants: {
40
+ active: false,
41
+ tag: "div"
42
+ }
43
+ }
44
+ );
45
+ var navbarDropdownStyles = cva("relative", {
46
+ variants: {
47
+ hoverable: {
48
+ true: "group",
49
+ false: ""
50
+ }
51
+ },
52
+ defaultVariants: {
53
+ hoverable: false
54
+ }
55
+ });
56
+ var dropdownMenuStyles = cva(
57
+ "absolute mt-2 bg-white text-gray-800 rounded shadow-lg hidden group-hover:block",
58
+ {
59
+ variants: {
60
+ align: {
61
+ left: "left-0",
62
+ right: "right-0"
63
+ }
64
+ },
65
+ defaultVariants: {
66
+ align: "left"
67
+ }
68
+ }
69
+ );
70
+ var imageStyles = cva("", {
71
+ variants: {
72
+ rounded: {
73
+ true: "rounded-full",
74
+ false: ""
75
+ },
76
+ size: {
77
+ sm: "w-6 h-6",
78
+ md: "w-8 h-8",
79
+ lg: "w-12 h-12"
80
+ },
81
+ bordered: {
82
+ true: "border border-gray-200",
83
+ false: ""
84
+ }
85
+ },
86
+ defaultVariants: {
87
+ rounded: false,
88
+ size: "md",
89
+ bordered: false
90
+ }
91
+ });
92
+
93
+ // src/components/navbar/Navbar.tsx
94
+ var Navbar = (props) => {
95
+ const [local, variantProps, other] = splitProps(
96
+ props,
97
+ ["class", "className", "brand", "start", "end"],
98
+ Object.keys(navbarStyles.variantKeys ?? {})
99
+ );
100
+ return <nav
101
+ class={classes(
102
+ navbarStyles({ color: variantProps.color }),
103
+ local.class,
104
+ local.className
105
+ )}
106
+ {...other}
107
+ >
108
+ <Show when={local.brand}>
109
+ <div class="flex-shrink-0 mr-4">{local.brand}</div>
110
+ </Show>
111
+
112
+ <Show when={local.start}>
113
+ <div class="flex-1 flex items-center space-x-2">{local.start}</div>
114
+ </Show>
115
+
116
+ <Show when={local.end}>
117
+ <div class="flex-1 flex justify-end space-x-2">{local.end}</div>
118
+ </Show>
119
+ </nav>;
120
+ };
121
+ var Navbar_default = Navbar;
122
+
123
+ // src/components/navbar/NavbarItem.tsx
124
+ import {
125
+ splitProps as splitProps2
126
+ } from "solid-js";
127
+ import { Dynamic } from "solid-js/web";
128
+ var NavbarItem = (props) => {
129
+ const [local, variantProps, other] = splitProps2(
130
+ props,
131
+ [
132
+ "class",
133
+ "className",
134
+ "active",
135
+ "href",
136
+ "tag",
137
+ "to",
138
+ "children"
139
+ ],
140
+ Object.keys(navbarItemStyles.variantKeys ?? {})
141
+ );
142
+ const Tag = local.tag === "a" || local.href || local.to ? "a" : "div";
143
+ return <Dynamic
144
+ component={Tag}
145
+ class={classes(
146
+ navbarItemStyles({
147
+ active: !!local.active,
148
+ tag: local.tag ?? (Tag === "a" ? "a" : "div")
149
+ }),
150
+ local.class,
151
+ local.className
152
+ )}
153
+ href={local.href ?? local.to}
154
+ {...other}
155
+ >
156
+ {local.children}
157
+ </Dynamic>;
158
+ };
159
+ var NavbarItem_default = NavbarItem;
160
+
161
+ // src/components/navbar/NavbarDropdown.tsx
162
+ import { splitProps as splitProps3, Show as Show2 } from "solid-js";
163
+ var NavbarDropdown = (props) => {
164
+ const [local, variantProps, other] = splitProps3(
165
+ props,
166
+ ["class", "className", "label", "hoverable", "children"],
167
+ [
168
+ ...Object.keys(navbarDropdownStyles.variantKeys ?? {}),
169
+ ...Object.keys(dropdownMenuStyles.variantKeys ?? {})
170
+ ]
171
+ );
172
+ return <div
173
+ class={classes(
174
+ navbarDropdownStyles({ hoverable: !!local.hoverable }),
175
+ local.class,
176
+ local.className
177
+ )}
178
+ {...other}
179
+ >
180
+ <div class="cursor-pointer">{local.label}</div>
181
+ <Show2 when={local.hoverable}>
182
+ <div class={dropdownMenuStyles({ align: variantProps.align })}>
183
+ {local.children}
184
+ </div>
185
+ </Show2>
186
+ </div>;
187
+ };
188
+ var NavbarDropdown_default = NavbarDropdown;
189
+
190
+ export {
191
+ Navbar_default,
192
+ NavbarItem_default,
193
+ NavbarDropdown_default
194
+ };
@@ -2,7 +2,7 @@ import {
2
2
  cva
3
3
  } from "./P7WPLZNA.jsx";
4
4
 
5
- // src/components/Avatar/Avatar.tsx
5
+ // src/components/avatar/Avatar.tsx
6
6
  import {
7
7
  createSignal,
8
8
  createMemo,
@@ -13,7 +13,7 @@ import {
13
13
  untrack
14
14
  } from "solid-js";
15
15
 
16
- // src/components/Avatar/Avatar.styles.ts
16
+ // src/components/avatar/Avatar.styles.ts
17
17
  var avatarVariants = cva(
18
18
  [
19
19
  "flex items-center justify-center mx-1",
@@ -47,7 +47,7 @@ var avatarVariants = cva(
47
47
  }
48
48
  );
49
49
 
50
- // src/components/Avatar/utils.ts
50
+ // src/components/avatar/utils.ts
51
51
  function parseCaption(alt) {
52
52
  if (!alt) return "";
53
53
  const parts = alt.split(" ");
@@ -57,7 +57,7 @@ function parseCaption(alt) {
57
57
  return "";
58
58
  }
59
59
 
60
- // src/components/Avatar/Avatar.tsx
60
+ // src/components/avatar/Avatar.tsx
61
61
  var Avatar = (rawProps) => {
62
62
  const props = mergeProps({ alt: "User Avatar" }, rawProps);
63
63
  const [variantProps, otherProps] = splitProps(props, [
@@ -93,9 +93,9 @@ var Avatar = (rawProps) => {
93
93
  };
94
94
  var Avatar_default = Avatar;
95
95
 
96
- // src/components/Avatar/index.ts
97
- var Avatar_default2 = Avatar_default;
96
+ // src/components/avatar/index.ts
97
+ var avatar_default = Avatar_default;
98
98
 
99
99
  export {
100
- Avatar_default2 as Avatar_default
100
+ avatar_default
101
101
  };
@@ -0,0 +1,179 @@
1
+ import {
2
+ cva
3
+ } from "./P7WPLZNA.jsx";
4
+
5
+ // src/components/autocomplete/Autocomplete.tsx
6
+ import {
7
+ createSignal,
8
+ createEffect,
9
+ For,
10
+ Show,
11
+ onCleanup
12
+ } from "solid-js";
13
+
14
+ // src/components/autocomplete/Autocomplete.styles.ts
15
+ var autocompleteWrapperClass = "relative w-full";
16
+ var inputBoxClass = cva(
17
+ "w-full rounded-md border border-gray-300 px-4 py-2 text-sm outline-none transition-colors",
18
+ {
19
+ variants: {
20
+ state: {
21
+ default: "bg-white text-gray-800 hover:border-gray-400 focus:border-blue-500 focus:ring-1 focus:ring-blue-500",
22
+ disabled: "bg-gray-100 text-gray-400 cursor-not-allowed"
23
+ },
24
+ size: {
25
+ sm: "text-sm py-1 px-2",
26
+ md: "text-sm py-2 px-4",
27
+ lg: "text-base py-3 px-4"
28
+ }
29
+ },
30
+ defaultVariants: {
31
+ state: "default",
32
+ size: "md"
33
+ }
34
+ }
35
+ );
36
+ var dropdownMenuClass = cva(
37
+ "absolute left-0 right-0 z-10 mt-1 rounded-md border border-gray-200 bg-white shadow-md max-h-60 overflow-auto text-sm",
38
+ {
39
+ variants: {
40
+ isOpen: {
41
+ true: "block",
42
+ false: "hidden"
43
+ }
44
+ },
45
+ defaultVariants: {
46
+ isOpen: true
47
+ }
48
+ }
49
+ );
50
+ var dropdownItemClass = cva(
51
+ "w-full text-left px-4 py-2 cursor-pointer transition-colors",
52
+ {
53
+ variants: {
54
+ active: {
55
+ true: "bg-blue-500 text-white",
56
+ false: "hover:bg-gray-100 text-gray-800"
57
+ }
58
+ },
59
+ defaultVariants: {
60
+ active: false
61
+ }
62
+ }
63
+ );
64
+ var dropdownEmptyClass = "px-4 py-2 text-sm text-gray-500";
65
+ var labelClass = "block text-sm font-medium text-gray-700 mb-1";
66
+
67
+ // src/components/autocomplete/Autocomplete.tsx
68
+ var Autocomplete = (props) => {
69
+ const [search, setSearch] = createSignal(props.value?.toString() || "");
70
+ const [isOpen, setIsOpen] = createSignal(false);
71
+ const [filtered, setFiltered] = createSignal(
72
+ props.items
73
+ );
74
+ const [highlightIndex, setHighlightIndex] = createSignal(-1);
75
+ let wrapperRef;
76
+ const filterItems = (val) => {
77
+ const lower = val.toLowerCase();
78
+ setFiltered(
79
+ props.items.filter(
80
+ (item) => item.toString().toLowerCase().includes(lower)
81
+ )
82
+ );
83
+ };
84
+ const handleInput = (e) => {
85
+ const val = e.target.value;
86
+ setSearch(val);
87
+ filterItems(val);
88
+ setIsOpen(true);
89
+ setHighlightIndex(-1);
90
+ };
91
+ const handleKeyDown = (e) => {
92
+ if (!isOpen()) return;
93
+ if (e.key === "ArrowDown") {
94
+ setHighlightIndex((prev) => Math.min(prev + 1, filtered().length - 1));
95
+ e.preventDefault();
96
+ }
97
+ if (e.key === "ArrowUp") {
98
+ setHighlightIndex((prev) => Math.max(prev - 1, 0));
99
+ e.preventDefault();
100
+ }
101
+ if (e.key === "Enter" && filtered()[highlightIndex()]) {
102
+ const selected = filtered()[highlightIndex()];
103
+ setSearch(selected?.toString() ?? "");
104
+ props.onChange?.(selected);
105
+ setIsOpen(false);
106
+ }
107
+ if (e.key === "Escape") {
108
+ setIsOpen(false);
109
+ }
110
+ };
111
+ const handleSelect = (item) => {
112
+ setSearch(item.toString());
113
+ props.onChange?.(item);
114
+ setIsOpen(false);
115
+ };
116
+ const handleClickOutside = (e) => {
117
+ if (!wrapperRef?.contains(e.target)) {
118
+ setIsOpen(false);
119
+ }
120
+ };
121
+ createEffect(() => {
122
+ if (props.value !== void 0) {
123
+ setSearch(props.value.toString());
124
+ }
125
+ });
126
+ createEffect(() => {
127
+ document.addEventListener("click", handleClickOutside);
128
+ onCleanup(() => {
129
+ document.removeEventListener("click", handleClickOutside);
130
+ });
131
+ });
132
+ return <div class={autocompleteWrapperClass} ref={wrapperRef}>
133
+ <Show when={props.label}>
134
+ <label class={labelClass}>{props.label}</label>
135
+ </Show>
136
+
137
+ <input
138
+ type="text"
139
+ value={search()}
140
+ onInput={handleInput}
141
+ onKeyDown={handleKeyDown}
142
+ onFocus={() => setIsOpen(true)}
143
+ disabled={props.disabled}
144
+ autocomplete="off"
145
+ class={inputBoxClass({
146
+ size: props.size,
147
+ state: props.state ?? (props.disabled ? "disabled" : "default")
148
+ })}
149
+ />
150
+
151
+ <Show when={isOpen()}>
152
+ <div class={dropdownMenuClass()}>
153
+ <Show
154
+ when={filtered().length > 0}
155
+ fallback={<div class={dropdownEmptyClass}>No data available</div>}
156
+ >
157
+ <For each={filtered()}>
158
+ {(item, i) => <div
159
+ class={dropdownItemClass({
160
+ active: i() === highlightIndex()
161
+ })}
162
+ onMouseDown={() => handleSelect(item)}
163
+ >
164
+ {item}
165
+ </div>}
166
+ </For>
167
+ </Show>
168
+ </div>
169
+ </Show>
170
+ </div>;
171
+ };
172
+ var Autocomplete_default = Autocomplete;
173
+
174
+ // src/components/autocomplete/index.ts
175
+ var autocomplete_default = Autocomplete_default;
176
+
177
+ export {
178
+ autocomplete_default
179
+ };
@@ -0,0 +1,115 @@
1
+ import { cva, classes } from './HKS7ET6T.js';
2
+ import { delegateEvents, template, spread, mergeProps, insert, createComponent, effect, setAttribute, className } from 'solid-js/web';
3
+ import { splitProps, createMemo, untrack, Show } from 'solid-js';
4
+
5
+ // src/components/tag/Tag.styles.ts
6
+ var tagVariants = cva(
7
+ [
8
+ "inline-flex items-center gap-2 px-3 py-1 text-sm rounded",
9
+ "transition select-none"
10
+ ],
11
+ {
12
+ variants: {
13
+ size: {
14
+ normal: "text-xs px-2 py-0.5",
15
+ medium: "text-sm px-3 py-1",
16
+ large: "text-base px-4 py-2"
17
+ },
18
+ type: {
19
+ primary: "bg-blue-500 text-white",
20
+ info: "bg-sky-500 text-white",
21
+ success: "bg-green-500 text-white",
22
+ warning: "bg-yellow-500 text-black",
23
+ danger: "bg-red-500 text-white",
24
+ dark: "bg-zinc-800 text-white",
25
+ light: "bg-gray-100 text-black"
26
+ },
27
+ rounded: {
28
+ true: "rounded-full",
29
+ false: ""
30
+ },
31
+ closable: {
32
+ true: "pr-1",
33
+ false: ""
34
+ }
35
+ },
36
+ defaultVariants: {
37
+ size: "normal"
38
+ }
39
+ }
40
+ );
41
+
42
+ // src/components/tag/Tag.tsx
43
+ var _tmpl$ = /* @__PURE__ */ template(`<button type=button class="ml-2 text-xs text-white hover:opacity-80">`);
44
+ var _tmpl$2 = /* @__PURE__ */ template(`<button type=button>`);
45
+ var _tmpl$3 = /* @__PURE__ */ template(`<div role=group><span role=status><span class=truncate>`);
46
+ var Tag = (props) => {
47
+ const [localProps, variantProps, otherProps] = splitProps(props, ["closable", "attached", "onClose", "ariaCloseLabel", "closeIcon", "children", "type"], ["class", ...tagVariants.variantKeys]);
48
+ const isAttachedClosable = createMemo(() => untrack(() => localProps.attached && localProps.closable));
49
+ const isClosable = createMemo(() => untrack(() => localProps.closable && !localProps.attached));
50
+ const tagClasses = createMemo(() => classes(tagVariants({
51
+ ...variantProps,
52
+ closable: localProps.closable
53
+ }), variantProps.class));
54
+ const attachedButtonClasses = createMemo(() => tagVariants({
55
+ ...variantProps,
56
+ class: "ml-1 text-xs hover:opacity-80"
57
+ }));
58
+ const handleClose = (e) => {
59
+ untrack(() => {
60
+ if (typeof localProps.onClose === "function") {
61
+ localProps.onClose(e);
62
+ }
63
+ });
64
+ };
65
+ return (() => {
66
+ var _el$ = _tmpl$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild;
67
+ spread(_el$2, mergeProps({
68
+ get ["class"]() {
69
+ return tagClasses();
70
+ }
71
+ }, otherProps), false, true);
72
+ insert(_el$3, () => localProps.children);
73
+ insert(_el$2, createComponent(Show, {
74
+ get when() {
75
+ return isClosable();
76
+ },
77
+ get children() {
78
+ var _el$4 = _tmpl$();
79
+ _el$4.$$click = handleClose;
80
+ insert(_el$4, () => localProps.closeIcon ?? "\xD7");
81
+ effect(() => setAttribute(_el$4, "aria-label", localProps.ariaCloseLabel ?? "Remove tag"));
82
+ return _el$4;
83
+ }
84
+ }), null);
85
+ insert(_el$, createComponent(Show, {
86
+ get when() {
87
+ return isAttachedClosable();
88
+ },
89
+ get children() {
90
+ var _el$5 = _tmpl$2();
91
+ _el$5.$$click = handleClose;
92
+ insert(_el$5, () => localProps.closeIcon ?? "\xD7");
93
+ effect((_p$) => {
94
+ var _v$ = localProps.ariaCloseLabel ?? "Remove tag", _v$2 = attachedButtonClasses();
95
+ _v$ !== _p$.e && setAttribute(_el$5, "aria-label", _p$.e = _v$);
96
+ _v$2 !== _p$.t && className(_el$5, _p$.t = _v$2);
97
+ return _p$;
98
+ }, {
99
+ e: void 0,
100
+ t: void 0
101
+ });
102
+ return _el$5;
103
+ }
104
+ }), null);
105
+ effect(() => className(_el$, isAttachedClosable() ? "tags has-addons" : void 0));
106
+ return _el$;
107
+ })();
108
+ };
109
+ var Tag_default = Tag;
110
+ delegateEvents(["click"]);
111
+
112
+ // src/components/tag/index.ts
113
+ var tag_default = Tag_default;
114
+
115
+ export { tag_default };
@@ -0,0 +1,169 @@
1
+ import {
2
+ buttonVariants
3
+ } from "./YAQK2KFY.jsx";
4
+ import {
5
+ classes,
6
+ cva
7
+ } from "./P7WPLZNA.jsx";
8
+
9
+ // src/components/dropdown/Dropdown.tsx
10
+ import {
11
+ splitProps as splitProps2,
12
+ createMemo,
13
+ Show
14
+ } from "solid-js";
15
+
16
+ // src/components/dropdown/useDropdown.ts
17
+ import { createSignal, onMount, onCleanup } from "solid-js";
18
+ function useDropdown(trigger, disabled = false) {
19
+ const [open, setOpen] = createSignal(false);
20
+ let ref;
21
+ const toggle = () => {
22
+ if (!disabled && trigger === "click") {
23
+ setOpen((v) => !v);
24
+ }
25
+ };
26
+ const onEnter = () => {
27
+ if (!disabled && trigger === "hover") setOpen(true);
28
+ };
29
+ const onLeave = () => {
30
+ if (!disabled && trigger === "hover") setOpen(false);
31
+ };
32
+ const onClickOutside = (e) => {
33
+ if (trigger === "click" && ref && !ref.contains(e.target)) {
34
+ setOpen(false);
35
+ }
36
+ };
37
+ onMount(() => {
38
+ document.addEventListener("click", onClickOutside);
39
+ onCleanup(() => document.removeEventListener("click", onClickOutside));
40
+ });
41
+ return {
42
+ open,
43
+ ref: (el) => ref = el,
44
+ toggle,
45
+ onEnter,
46
+ onLeave
47
+ };
48
+ }
49
+
50
+ // src/components/dropdown/DropdownMenu.tsx
51
+ import { splitProps } from "solid-js";
52
+
53
+ // src/components/dropdown/Dropdown.styles.ts
54
+ var dropdownVariants = cva(
55
+ [
56
+ "absolute mt-2 shadow-lg z-10",
57
+ "w-max rounded-md bg-white border border-gray-300",
58
+ "transition-all duration-150 ease-in-out",
59
+ "flex flex-col"
60
+ ],
61
+ {
62
+ variants: {
63
+ position: {
64
+ "bottom-left": "left-0 top-full text-black",
65
+ "bottom-right": "right-0 top-full text-black",
66
+ "top-left": "left-0 bottom-full text-black",
67
+ "top-right": "right-0 bottom-full text-black"
68
+ },
69
+ open: {
70
+ true: "block",
71
+ false: "hidden"
72
+ }
73
+ },
74
+ defaultVariants: {
75
+ position: "bottom-left",
76
+ open: false
77
+ }
78
+ }
79
+ );
80
+ var dropdownItemVariants = cva(
81
+ "px-4 py-2 cursor-pointer transition-colors duration-150 ease-in-out hover:bg-gray-100",
82
+ {
83
+ variants: {
84
+ hasLink: { true: "p-0 text-blue-600 hover:underline", false: "" }
85
+ },
86
+ defaultVariants: { hasLink: false }
87
+ }
88
+ );
89
+
90
+ // src/components/dropdown/DropdownMenu.tsx
91
+ var DropdownMenu = (props) => {
92
+ const [local, other] = splitProps(props, ["open", "position", "children"]);
93
+ return <div
94
+ class={dropdownVariants({ open: local.open, position: local.position })}
95
+ {...other}
96
+ id="dropdown-menu"
97
+ role="menu"
98
+ >
99
+ {local.children}
100
+ </div>;
101
+ };
102
+ var DropdownMenu_default = DropdownMenu;
103
+
104
+ // src/components/dropdown/Dropdown.tsx
105
+ var Dropdown = (props) => {
106
+ const [localProps, variantProps, restProps] = splitProps2(
107
+ props,
108
+ ["label", "disabledLabel", "trigger", "children", "disabled", "color", "class", "className"],
109
+ Object.keys(dropdownVariants.variantKeys ?? {})
110
+ );
111
+ const { open, ref, toggle, onEnter, onLeave } = useDropdown(
112
+ localProps.trigger ?? "click",
113
+ !!localProps.disabled
114
+ );
115
+ const labelContent = createMemo(
116
+ () => localProps.disabled ? localProps.disabledLabel ?? localProps.label : localProps.label ?? "Toggle"
117
+ );
118
+ const containerClass = createMemo(
119
+ () => classes("relative inline-block", localProps.class, localProps.className)
120
+ );
121
+ const buttonClass = createMemo(
122
+ () => buttonVariants({
123
+ color: "primary"
124
+ })
125
+ );
126
+ return <div
127
+ ref={ref}
128
+ onMouseEnter={onEnter}
129
+ onMouseLeave={onLeave}
130
+ class={containerClass()}
131
+ {...restProps}
132
+ >
133
+ <button
134
+ type="button"
135
+ onClick={(e) => {
136
+ e.preventDefault();
137
+ if (localProps.trigger === "click") toggle();
138
+ }}
139
+ class={buttonClass()}
140
+ aria-disabled={localProps.disabled}
141
+ disabled={localProps.disabled}
142
+ aria-controls="dropdown-menu"
143
+ >
144
+ {labelContent()}
145
+ </button>
146
+
147
+ <Show when={open()}>
148
+ <DropdownMenu_default open {...variantProps}>
149
+ {localProps.children}
150
+ </DropdownMenu_default>
151
+ </Show>
152
+ </div>;
153
+ };
154
+ var Dropdown_default = Dropdown;
155
+
156
+ // src/components/dropdown/DropdownItem.tsx
157
+ import "solid-js";
158
+ var DropdownItem = ({ hasLink = false, children }) => {
159
+ return <div class={dropdownItemVariants({ hasLink })}>
160
+ {children}
161
+ </div>;
162
+ };
163
+ var DropdownItem_default = DropdownItem;
164
+
165
+ export {
166
+ DropdownMenu_default,
167
+ Dropdown_default,
168
+ DropdownItem_default
169
+ };