@luminescent/ui 0.4.2 → 0.5.0

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.
@@ -1,4 +1,4 @@
1
- import { componentQrl, inlinedQrl, _jsxQ, _fnSignal, _restProps, _jsxS, _jsxC, Slot, useStylesQrl, _jsxBranch, _IMMUTABLE, useStore, _wrapSignal, useLexicalScope } from "@builder.io/qwik";
1
+ import { componentQrl, inlinedQrl, _jsxQ, _fnSignal, _restProps, _jsxS, _jsxC, Slot, _jsxBranch, _IMMUTABLE, useStylesQrl, useStore, _wrapSignal, useLexicalScope } from "@builder.io/qwik";
2
2
  import { isServer } from "@builder.io/qwik/build";
3
3
  import { Fragment } from "@builder.io/qwik/jsx-runtime";
4
4
  const Anchor = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => /* @__PURE__ */ _jsxQ("span", null, {
@@ -8,21 +8,22 @@ const Anchor = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) =
8
8
  ], "p0.id")
9
9
  }, null, 3, "Oa_0"), "Anchor_component_O7y4zyaazA0"));
10
10
  const buttonColorClasses = {
11
- blue: "bg-blue-600/90 border-blue-500 hover:bg-blue-500 focus:bg-blue-500",
12
- purple: "bg-purple-600/90 border-purple-500 hover:bg-purple-500 focus:bg-purple-500",
13
- pink: "bg-pink-600/90 border-pink-500 hover:bg-pink-500 focus:bg-pink-500",
14
- gray: "bg-gray-800/90 border-gray-700 hover:bg-gray-700 focus:bg-gray-700",
15
- red: "bg-red-700/90 border-red-600 hover:bg-red-600 focus:bg-red-600",
16
- green: "bg-green-700/90 border-green-600 hover:bg-green-600 focus:bg-green-600",
17
- yellow: "bg-yellow-700/90 border-yellow-600 hover:bg-yellow-600 focus:bg-yellow-600"
11
+ blue: "bg-blue-600/90 border-blue-500 hover:bg-blue-500 active:bg-blue-400 focus:border-blue-400",
12
+ purple: "bg-purple-600/90 border-purple-500 hover:bg-purple-500 active:bg-purple-400 focus:border-purple-400",
13
+ pink: "bg-pink-600/90 border-pink-500 hover:bg-pink-500 active:bg-pink-400 focus:border-pink-400",
14
+ gray: "bg-gray-700/90 border-gray-600 hover:bg-gray-600 active:bg-gray-500 focus:border-gray-500",
15
+ darkgray: "bg-gray-800/90 border-gray-700 hover:bg-gray-700 active:bg-gray-600 focus:border-gray-600",
16
+ red: "bg-red-700/90 border-red-600 hover:bg-red-600 active:bg-red-500 focus:border-red-500",
17
+ green: "bg-green-700/90 border-green-600 hover:bg-green-600 active:bg-green-500 focus:border-green-500",
18
+ yellow: "bg-yellow-700/90 border-yellow-600 hover:bg-yellow-600 active:bg-yellow-500 focus:border-yellow-500"
18
19
  };
19
20
  const sizeClasses = {
20
- sm: "text-sm px-2 py-1 rounded-md gap-2",
21
+ sm: "text-sm px-2 py-1 rounded-md gap-2 active:px-1",
21
22
  md: "text-base px-4 py-2 rounded-md gap-3",
22
23
  lg: "text-base px-6 py-3 rounded-lg gap-3",
23
24
  xl: "text-base px-8 py-4 rounded-xl gap-4"
24
25
  };
25
- const buttonClass = "relative flex items-center gap-3 transition ease-in-out border text-gray-50 fill-gray-50 disabled:opacity-50";
26
+ const buttonClass = "relative flex items-center gap-3 transition ease-in-out border text-gray-50 fill-gray-50 disabled:opacity-50 hover:shadow-lg active:scale-95";
26
27
  const Button = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
27
28
  const props1 = _restProps(props, [
28
29
  "color",
@@ -30,7 +31,7 @@ const Button = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) =
30
31
  ]);
31
32
  props1.class = {
32
33
  [buttonClass]: true,
33
- [buttonColorClasses[props.color ?? "gray"]]: true,
34
+ [buttonColorClasses[props.color ?? "darkgray"]]: true,
34
35
  [sizeClasses[props.size ?? "md"]]: true,
35
36
  ...props1.class
36
37
  };
@@ -46,7 +47,7 @@ const ButtonAnchor = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((pr
46
47
  ]);
47
48
  props1.class = {
48
49
  [buttonClass]: true,
49
- [buttonColorClasses[props.color ?? "gray"]]: true,
50
+ [buttonColorClasses[props.color ?? "darkgray"]]: true,
50
51
  [sizeClasses[props.size ?? "md"]]: true,
51
52
  ...props1.class
52
53
  };
@@ -56,7 +57,9 @@ const ButtonAnchor = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((pr
56
57
  }, null, 0, "7H_3");
57
58
  }, "ButtonAnchor_component_vQT9xS0lqew"));
58
59
  const LoadingIcon = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
59
- return /* @__PURE__ */ _jsxS("svg", {
60
+ return /* @__PURE__ */ _jsxQ("div", null, {
61
+ class: "animate-spin"
62
+ }, /* @__PURE__ */ _jsxS("svg", {
60
63
  ...props,
61
64
  children: [
62
65
  /* @__PURE__ */ _jsxQ("circle", null, {
@@ -74,23 +77,17 @@ const LoadingIcon = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((pro
74
77
  }, null, 3, null)
75
78
  ]
76
79
  }, {
77
- class: _fnSignal((p0) => ({
78
- "animate-spin": true,
79
- ...p0.class
80
- }), [
81
- props
82
- ], '{"animate-spin":true,...p0.class}'),
83
- fill: "none",
84
80
  viewBox: "0 0 24 24",
85
81
  xmlns: "http://www.w3.org/2000/svg"
86
- }, 0, "XP_0");
82
+ }, 0, null), 1, "XP_0");
87
83
  }, "LoadingIcon_component_iXFSRNToIus"));
88
84
  const cardColorClasses = {
89
85
  pink: {
90
86
  card: {
91
87
  bg_blobs: "bg-pink-400/10 border-pink-400/20",
92
88
  bg: "bg-pink-400/60 border-pink-400",
93
- hover: "hover:bg-pink-400/20"
89
+ hover: "hover:bg-pink-400/20",
90
+ click: "active:bg-pink-300/20"
94
91
  },
95
92
  blobs: [
96
93
  "bg-pink-400",
@@ -100,9 +97,10 @@ const cardColorClasses = {
100
97
  },
101
98
  red: {
102
99
  card: {
103
- bg_blobs: "bg-purple-400/10 border-purple-400/20",
100
+ bg_blobs: "bg-red-400/10 border-red-400/20",
104
101
  bg: "bg-red-400/60 border-red-400",
105
- hover: "hover:bg-purple-400/20"
102
+ hover: "hover:bg-red-400/20",
103
+ click: "active:bg-red-300/20"
106
104
  },
107
105
  blobs: [
108
106
  "bg-red-400",
@@ -114,7 +112,8 @@ const cardColorClasses = {
114
112
  card: {
115
113
  bg_blobs: "bg-orange-400/10 border-orange-400/20",
116
114
  bg: "bg-orange-400/60 border-orange-400",
117
- hover: "hover:bg-orange-400/20"
115
+ hover: "hover:bg-orange-400/20",
116
+ click: "active:bg-orange-300/20"
118
117
  },
119
118
  blobs: [
120
119
  "bg-orange-400",
@@ -126,7 +125,8 @@ const cardColorClasses = {
126
125
  card: {
127
126
  bg_blobs: "bg-yellow-400/10 border-yellow-400/20",
128
127
  bg: "bg-yellow-400/60 border-yellow-400",
129
- hover: "hover:bg-yellow-400/20"
128
+ hover: "hover:bg-yellow-400/20",
129
+ click: "active:bg-yellow-300/20"
130
130
  },
131
131
  blobs: [
132
132
  "bg-yellow-400",
@@ -138,7 +138,8 @@ const cardColorClasses = {
138
138
  card: {
139
139
  bg_blobs: "bg-green-400/10 border-green-400/20",
140
140
  bg: "bg-green-400/60 border-green-400",
141
- hover: "hover:bg-green-400/20"
141
+ hover: "hover:bg-green-400/20",
142
+ click: "active:bg-green-300/20"
142
143
  },
143
144
  blobs: [
144
145
  "bg-green-400",
@@ -150,7 +151,8 @@ const cardColorClasses = {
150
151
  card: {
151
152
  bg_blobs: "bg-blue-400/10 border-blue-400/20",
152
153
  bg: "bg-blue-400/60 border-blue-400",
153
- hover: "hover:bg-blue-400/20"
154
+ hover: "hover:bg-blue-400/20",
155
+ click: "active:bg-blue-300/20"
154
156
  },
155
157
  blobs: [
156
158
  "bg-blue-400",
@@ -162,7 +164,8 @@ const cardColorClasses = {
162
164
  card: {
163
165
  bg_blobs: "bg-purple-400/10 border-purple-400/20",
164
166
  bg: "bg-purple-400/60 border-purple-400",
165
- hover: "hover:bg-purple-400/20"
167
+ hover: "hover:bg-purple-400/20",
168
+ click: "active:bg-purple-300/20"
166
169
  },
167
170
  blobs: [
168
171
  "bg-purple-400",
@@ -174,7 +177,8 @@ const cardColorClasses = {
174
177
  card: {
175
178
  bg_blobs: "bg-gray-400/10 border-gray-400/20",
176
179
  bg: "bg-gray-400/60 border-gray-400",
177
- hover: "hover:bg-gray-400/20"
180
+ hover: "hover:bg-gray-400/20",
181
+ click: "active:bg-gray-300/20"
178
182
  },
179
183
  blobs: [
180
184
  "bg-gray-400",
@@ -186,7 +190,8 @@ const cardColorClasses = {
186
190
  card: {
187
191
  bg_blobs: "bg-gray-800/10 border-gray-800/20",
188
192
  bg: "bg-gray-800/60 border-gray-800",
189
- hover: "hover:bg-gray-800/20"
193
+ hover: "hover:bg-gray-800/20",
194
+ click: "active:bg-gray-700/20"
190
195
  },
191
196
  blobs: [
192
197
  "bg-gray-400",
@@ -198,7 +203,8 @@ const cardColorClasses = {
198
203
  card: {
199
204
  bg_blobs: "bg-gray-900/10 border-gray-900/20",
200
205
  bg: "bg-gray-900/60 border-gray-900",
201
- hover: "hover:bg-gray-900/20"
206
+ hover: "hover:bg-gray-900/20",
207
+ click: "active:bg-gray-800/20"
202
208
  },
203
209
  blobs: [
204
210
  "bg-gray-400",
@@ -219,17 +225,12 @@ const blobClasses = [
219
225
  const Card = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
220
226
  const props1 = _restProps(props, [
221
227
  "color",
222
- "hoverable",
228
+ "hover",
223
229
  "href",
224
230
  "row",
225
231
  "blobs"
226
232
  ]);
227
- useStylesQrl(/* @__PURE__ */ inlinedQrl(`
228
- .-animation-delay-5 { animation-delay: -5s; }
229
- .-animation-delay-10 { animation-delay: -10s; }
230
- `, "Card_component_useStyles_POiiuoB0EmE"));
231
233
  const blob = Math.round(Math.random() * 6);
232
- const button = !!props1.onClick$ || props.hoverable;
233
234
  return /* @__PURE__ */ _jsxS("div", {
234
235
  ...props1,
235
236
  children: /* @__PURE__ */ _jsxQ("div", null, {
@@ -244,7 +245,7 @@ const Card = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) =>
244
245
  ], "p0.href")
245
246
  }, null, 3, "OW_0"),
246
247
  /* @__PURE__ */ _jsxQ("div", null, {
247
- class: "relative z-10"
248
+ class: "relative"
248
249
  }, /* @__PURE__ */ _jsxQ("div", null, {
249
250
  class: _fnSignal((p0) => ({
250
251
  "flex gap-4": true,
@@ -255,7 +256,7 @@ const Card = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) =>
255
256
  ], '{"flex gap-4":true,"flex-col":!p0.row,"flex-row items-center":p0.row}')
256
257
  }, /* @__PURE__ */ _jsxC(Slot, null, 3, "OW_1"), 1, null), 1, null),
257
258
  props.blobs && /* @__PURE__ */ _jsxQ("div", null, {
258
- class: "absolute -z-10 inset-0 w-full h-full transition-all overflow-clip",
259
+ class: "absolute -z-10 inset-0 w-full h-full transition-all overflow-clip animate-in fade-in anim-duration-[2s]",
259
260
  style: {
260
261
  containerType: "size"
261
262
  }
@@ -270,7 +271,7 @@ const Card = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) =>
270
271
  /* @__PURE__ */ _jsxQ("div", {
271
272
  class: {
272
273
  "absolute top-0 w-[30cqw] h-[30cqw] rounded-full opacity-20 ease-in-out blur-xl": true,
273
- "-animation-delay-5": true,
274
+ "anim-delay-[-5s]": true,
274
275
  [blobClasses[blob]]: true,
275
276
  [cardColorClasses[props.color ?? "darkgray"].blobs[1]]: true
276
277
  }
@@ -278,7 +279,7 @@ const Card = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) =>
278
279
  /* @__PURE__ */ _jsxQ("div", {
279
280
  class: {
280
281
  "absolute top-0 w-[30cqw] h-[30cqw] rounded-full opacity-20 ease-in-out blur-xl": true,
281
- "-animation-delay-10": true,
282
+ "anim-delay-[-10s]": true,
282
283
  [blobClasses[blob]]: true,
283
284
  [cardColorClasses[props.color ?? "darkgray"].blobs[2]]: true
284
285
  }
@@ -289,8 +290,8 @@ const Card = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) =>
289
290
  "flex-1 relative border rounded-lg group transition-all": true,
290
291
  [cardColorClasses[props.color ?? "darkgray"].card.bg]: !props.blobs,
291
292
  [cardColorClasses[props.color ?? "darkgray"].card.bg_blobs]: props.blobs,
292
- [cardColorClasses[props.color ?? "darkgray"].card.hover]: props.hoverable,
293
- "hover:shadow-lg cursor-pointer": button,
293
+ [cardColorClasses[props.color ?? "darkgray"].card.hover + " hover:shadow-lg"]: props.hover,
294
+ [cardColorClasses[props.color ?? "darkgray"].card.click + " active:scale-[99%] cursor-pointer"]: props.hover == "clickable",
294
295
  ...props1.class
295
296
  }
296
297
  }, null, 0, "OW_3");
@@ -345,12 +346,13 @@ const CardHeader = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((prop
345
346
  }, 3, "OW_7"), 1, "OW_8")
346
347
  ], 1, "OW_9");
347
348
  }, "CardHeader_component_2xQZ6Uv7R4A"));
349
+ const InputClasses = "transition ease-in-out text-lg border border-gray-700 bg-gray-800 text-gray-50 hover:bg-gray-700 hover:shadow-lg focus:bg-gray-700 focus:outline-none focus:border-gray-400 rounded-md px-3 py-2";
348
350
  const TextInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
349
351
  return /* @__PURE__ */ _jsxQ("div", null, {
350
352
  class: "flex flex-col"
351
353
  }, [
352
354
  /* @__PURE__ */ _jsxQ("label", null, {
353
- class: "mb-2",
355
+ class: "pb-2",
354
356
  for: _fnSignal((p0) => p0.id, [
355
357
  props
356
358
  ], "p0.id")
@@ -365,7 +367,7 @@ const TextInputRaw = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((pr
365
367
  return /* @__PURE__ */ _jsxS("input", {
366
368
  ...props,
367
369
  class: {
368
- "transition ease-in-out text-lg border border-gray-700 bg-gray-800 text-gray-50 hover:bg-gray-700 focus:bg-gray-700 rounded-md px-3 py-2": true,
370
+ [InputClasses]: true,
369
371
  ...props.class
370
372
  }
371
373
  }, null, 0, "dC_3");
@@ -434,8 +436,7 @@ class Color {
434
436
  this._updateBrightness();
435
437
  }
436
438
  _updateBrightness() {
437
- const { r, g, b } = this._rgba;
438
- this._brightness = (r * 299 + g * 587 + b * 114) / 1e3;
439
+ this._brightness = getBrightness(this._rgba);
439
440
  this._isDark = this._brightness < 0.5;
440
441
  this._isLight = !this._isDark;
441
442
  }
@@ -461,6 +462,10 @@ class Color {
461
462
  return this._isLight;
462
463
  }
463
464
  }
465
+ function getBrightness(color) {
466
+ const { r, g, b } = color;
467
+ return (r * 299 + g * 587 + b * 114) / 1e3;
468
+ }
464
469
  function hexNumberToRgb(color) {
465
470
  const r = (color >> 16 & 255) / 255;
466
471
  const g = (color >> 8 & 255) / 255;
@@ -874,7 +879,8 @@ const ColorInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((prop
874
879
  const props1 = _restProps(props, [
875
880
  "onInput$",
876
881
  "value",
877
- "presetColors"
882
+ "presetColors",
883
+ "preview"
878
884
  ]);
879
885
  useStylesQrl(/* @__PURE__ */ inlinedQrl(`
880
886
  .color-picker {
@@ -890,6 +896,7 @@ const ColorInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((prop
890
896
  backdrop-filter: blur(10px);
891
897
  user-select: none;
892
898
  position: relative;
899
+ z-index: 1000;
893
900
  }
894
901
 
895
902
  .color-picker-saturation {
@@ -918,8 +925,7 @@ const ColorInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((prop
918
925
  top: -7px;
919
926
  left: -7px;
920
927
  box-sizing: border-box;
921
- z-index: 10;
922
- }
928
+ ≈ }
923
929
 
924
930
  .color-picker-hue {
925
931
  width: 8px;
@@ -961,11 +967,10 @@ const ColorInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((prop
961
967
  top: -6px;
962
968
  left: -4px;
963
969
  box-sizing: border-box;
964
- z-index: 10;
965
970
  }
966
971
  `, "ColorInput_component_useStyles_SMNFl4Oy0IA"));
967
972
  const store = useStore({
968
- value: (props.value ?? "#FFFFFF") || "#FFFFFF"
973
+ value: (props.value ?? "#000000") || "#FFFFFF"
969
974
  });
970
975
  return /* @__PURE__ */ _jsxQ("div", null, null, [
971
976
  /* @__PURE__ */ _jsxQ("label", {
@@ -981,7 +986,7 @@ const ColorInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((prop
981
986
  onBlur$: /* @__PURE__ */ inlinedQrl(() => {
982
987
  const [props12] = useLexicalScope();
983
988
  const pickerDiv = document.getElementById(`${props12.id}-color-picker`);
984
- pickerDiv.style.display = "none";
989
+ pickerDiv.classList.add("opacity-0", "pointer-events-none", "scale-95");
985
990
  }, "ColorInput_component_div_TextInputRaw_onBlur_giB7aSy8tnc", [
986
991
  props1
987
992
  ]),
@@ -1009,23 +1014,25 @@ const ColorInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((prop
1009
1014
  picker.setColor(element.value);
1010
1015
  });
1011
1016
  }
1012
- pickerDiv.style.display = "block";
1017
+ pickerDiv.classList.remove("opacity-0", "pointer-events-none", "scale-95");
1013
1018
  }, "ColorInput_component_div_TextInputRaw_onFocus_9bHrhSeTgfI", [
1014
1019
  props1,
1015
1020
  props,
1016
1021
  store
1017
1022
  ]),
1018
- get style() {
1019
- return {
1020
- borderLeft: `40px solid ${store.value}`
1021
- };
1022
- },
1023
+ style: (props.preview ?? "left") == "full" ? {
1024
+ backgroundColor: `${store.value}`,
1025
+ color: getBrightness(hexNumberToRgb(hexStringToNumber(store.value))) > 0.5 ? "black" : "white"
1026
+ } : (props.preview ?? "left") == "left" ? {
1027
+ borderLeft: `40px solid ${store.value}`
1028
+ } : (props.preview ?? "left") == "right" ? {
1029
+ borderRight: `40px solid ${store.value}`
1030
+ } : (props.preview ?? "left") == "top" ? {
1031
+ borderTop: `10px solid ${store.value}`
1032
+ } : (props.preview ?? "left") == "bottom" ? {
1033
+ borderBottom: `10px solid ${store.value}`
1034
+ } : {},
1023
1035
  [_IMMUTABLE]: {
1024
- style: _fnSignal((p0) => ({
1025
- borderLeft: `40px solid ${p0.value}`
1026
- }), [
1027
- store
1028
- ], "{borderLeft:`40px solid ${p0.value}`}"),
1029
1036
  value: _fnSignal((p0) => p0.value, [
1030
1037
  store
1031
1038
  ], "p0.value")
@@ -1034,7 +1041,7 @@ const ColorInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((prop
1034
1041
  /* @__PURE__ */ _jsxQ("div", {
1035
1042
  id: `${props1.id}-color-picker`
1036
1043
  }, {
1037
- class: "hidden absolute mt-2"
1044
+ class: "absolute mt-2 opacity-0 transition-all pointer-events-none scale-95"
1038
1045
  }, null, 3, null)
1039
1046
  ], 1, "0s_2");
1040
1047
  }, "ColorInput_component_jilGo0Bn3Ps"));
@@ -1081,7 +1088,7 @@ const NumberInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((pro
1081
1088
  class: "flex flex-col"
1082
1089
  }, [
1083
1090
  /* @__PURE__ */ _jsxQ("label", null, {
1084
- class: "mb-2",
1091
+ class: "pb-2",
1085
1092
  for: _fnSignal((p0) => p0.id, [
1086
1093
  props
1087
1094
  ], "p0.id")
@@ -1100,6 +1107,16 @@ const NumberInputRaw = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((
1100
1107
  "value",
1101
1108
  "step"
1102
1109
  ]);
1110
+ useStylesQrl(/* @__PURE__ */ inlinedQrl(`
1111
+ input::-webkit-outer-spin-button,
1112
+ input::-webkit-inner-spin-button {
1113
+ -webkit-appearance: none;
1114
+ margin: 0;
1115
+ }
1116
+ input[type=number] {
1117
+ -moz-appearance: textfield;
1118
+ }
1119
+ `, "NumberInputRaw_component_useStyles_v5EsWTMt0DU"));
1103
1120
  const store = useStore({
1104
1121
  value: props.value ?? 0
1105
1122
  });
@@ -1111,37 +1128,52 @@ const NumberInputRaw = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((
1111
1128
  props
1112
1129
  ], '{"flex text-gray-50":true,"gap-2":!p0.input}')
1113
1130
  }, [
1114
- /* @__PURE__ */ _jsxQ("button", {
1115
- class: {
1116
- "flex justify-center items-center transition ease-in-out border border-gray-700 bg-gray-800 text-2xl hover:bg-gray-600 h-full py-1.5 cursor-pointer": true,
1117
- "px-3 rounded-l-md border-r-0": props.input,
1118
- "w-[50%] rounded-md": !props.input,
1119
- "opacity-50 pointer-events-none": props1.min ? store.value <= props1.min : false
1131
+ /* @__PURE__ */ _jsxC(Button, {
1132
+ get color() {
1133
+ return props.input ? "gray" : "darkgray";
1120
1134
  },
1121
- disabled: props1.min ? store.value <= props1.min : false
1122
- }, {
1123
1135
  "aria-label": "Decrement",
1124
1136
  "data-action": "decrement",
1137
+ disabled: props1.min ? store.value <= props1.min : false,
1125
1138
  onClick$: /* @__PURE__ */ inlinedQrl((event, element) => {
1126
1139
  const [props2, store2] = useLexicalScope();
1127
1140
  store2.value = store2.value - (props2.step ?? 1);
1128
1141
  props2.onDecrement$(event, element, store2);
1129
- }, "NumberInputRaw_component_div_button_onClick_LHGh2R4kyY0", [
1142
+ }, "NumberInputRaw_component_div_Button_onClick_PgKg57gfX0I", [
1130
1143
  props,
1131
1144
  store
1132
- ])
1133
- }, /* @__PURE__ */ _jsxC(Minus, {
1134
- class: "fill-current",
1135
- width: "24",
1145
+ ]),
1146
+ get class() {
1147
+ return {
1148
+ "mr-2": props.input
1149
+ };
1150
+ },
1151
+ children: /* @__PURE__ */ _jsxC(Minus, {
1152
+ class: "fill-current",
1153
+ width: "24",
1154
+ [_IMMUTABLE]: {
1155
+ class: _IMMUTABLE,
1156
+ width: _IMMUTABLE
1157
+ }
1158
+ }, 3, "gk_3"),
1136
1159
  [_IMMUTABLE]: {
1137
- class: _IMMUTABLE,
1138
- width: _IMMUTABLE
1160
+ "aria-label": _IMMUTABLE,
1161
+ class: _fnSignal((p0) => ({
1162
+ "mr-2": p0.input
1163
+ }), [
1164
+ props
1165
+ ], '{"mr-2":p0.input}'),
1166
+ color: _fnSignal((p0) => p0.input ? "gray" : "darkgray", [
1167
+ props
1168
+ ], 'p0.input?"gray":"darkgray"'),
1169
+ "data-action": _IMMUTABLE,
1170
+ onClick$: _IMMUTABLE
1139
1171
  }
1140
- }, 3, "gk_3"), 1, null),
1172
+ }, 1, "gk_4"),
1141
1173
  props.input && /* @__PURE__ */ _jsxS("input", {
1142
1174
  ...props1,
1143
1175
  class: {
1144
- "transition ease-in-out text-lg text-center border border-gray-600 bg-gray-700 hover:bg-gray-600 focus:bg-gray-500 px-3 py-1 w-full": true,
1176
+ [InputClasses]: true,
1145
1177
  ...props1.class
1146
1178
  }
1147
1179
  }, {
@@ -1152,158 +1184,238 @@ const NumberInputRaw = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((
1152
1184
  value: _fnSignal((p0) => p0.value, [
1153
1185
  store
1154
1186
  ], "p0.value")
1155
- }, 0, "gk_4"),
1156
- /* @__PURE__ */ _jsxQ("button", {
1157
- class: {
1158
- "flex justify-center items-center transition ease-in-out border border-gray-700 bg-gray-800 text-2xl hover:bg-gray-600 h-full py-1.5 cursor-pointer": true,
1159
- "px-3 rounded-r-md border-l-0": props.input,
1160
- "w-[50%] rounded-md": !props.input,
1161
- "opacity-50 pointer-events-none": props1.max ? store.value >= props1.max : false
1187
+ }, 0, "gk_5"),
1188
+ /* @__PURE__ */ _jsxC(Button, {
1189
+ get color() {
1190
+ return props.input ? "gray" : "darkgray";
1162
1191
  },
1163
- disabled: props1.max ? store.value >= props1.max : false
1164
- }, {
1165
1192
  "aria-label": "Increment",
1166
1193
  "data-action": "increment",
1194
+ disabled: props1.max ? store.value >= props1.max : false,
1167
1195
  onClick$: /* @__PURE__ */ inlinedQrl((event, element) => {
1168
1196
  const [props2, store2] = useLexicalScope();
1169
1197
  store2.value = store2.value + (props2.step ?? 1);
1170
1198
  props2.onIncrement$(event, element, store2);
1171
- }, "NumberInputRaw_component_div_button_onClick_1_c8jSdtGD9sk", [
1199
+ }, "NumberInputRaw_component_div_Button_onClick_1_UzVlUpg1uGs", [
1172
1200
  props,
1173
1201
  store
1174
- ])
1175
- }, /* @__PURE__ */ _jsxC(Plus, {
1176
- class: "fill-current",
1177
- width: "24",
1202
+ ]),
1203
+ get class() {
1204
+ return {
1205
+ "ml-2": props.input
1206
+ };
1207
+ },
1208
+ children: /* @__PURE__ */ _jsxC(Plus, {
1209
+ class: "fill-current",
1210
+ width: "24",
1211
+ [_IMMUTABLE]: {
1212
+ class: _IMMUTABLE,
1213
+ width: _IMMUTABLE
1214
+ }
1215
+ }, 3, "gk_6"),
1178
1216
  [_IMMUTABLE]: {
1179
- class: _IMMUTABLE,
1180
- width: _IMMUTABLE
1217
+ "aria-label": _IMMUTABLE,
1218
+ class: _fnSignal((p0) => ({
1219
+ "ml-2": p0.input
1220
+ }), [
1221
+ props
1222
+ ], '{"ml-2":p0.input}'),
1223
+ color: _fnSignal((p0) => p0.input ? "gray" : "darkgray", [
1224
+ props
1225
+ ], 'p0.input?"gray":"darkgray"'),
1226
+ "data-action": _IMMUTABLE,
1227
+ onClick$: _IMMUTABLE
1181
1228
  }
1182
- }, 3, "gk_5"), 1, null)
1183
- ], 1, "gk_6");
1229
+ }, 1, "gk_7")
1230
+ ], 1, "gk_8");
1184
1231
  }, "NumberInputRaw_component_8sGf0eS1rvo"));
1185
- const OutputField = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1232
+ const ChevronDown = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1233
+ return /* @__PURE__ */ _jsxS("svg", {
1234
+ ...props,
1235
+ children: /* @__PURE__ */ _jsxQ("path", null, {
1236
+ d: "M112 184l144 144 144-144",
1237
+ fill: "none",
1238
+ stroke: "currentColor",
1239
+ "stroke-linecap": "round",
1240
+ "stroke-linejoin": "round",
1241
+ "stroke-width": "48"
1242
+ }, null, 3, null)
1243
+ }, {
1244
+ height: _fnSignal((p0) => p0.width, [
1245
+ props
1246
+ ], "p0.width"),
1247
+ viewBox: "0 0 512 512",
1248
+ xmlns: "http://www.w3.org/2000/svg"
1249
+ }, 0, "rN_0");
1250
+ }, "ChevronDown_component_V0linof0cMQ"));
1251
+ const SelectInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1186
1252
  return /* @__PURE__ */ _jsxQ("div", null, {
1187
1253
  class: "flex flex-col"
1188
1254
  }, [
1189
1255
  /* @__PURE__ */ _jsxQ("label", null, {
1190
- class: "mb-2",
1256
+ class: "pb-2",
1191
1257
  for: _fnSignal((p0) => p0.id, [
1192
1258
  props
1193
1259
  ], "p0.id")
1194
- }, /* @__PURE__ */ _jsxC(Slot, null, 3, "ze_0"), 1, null),
1195
- /* @__PURE__ */ _jsxC(OutputFieldRaw, {
1196
- ...props,
1197
- children: void 0
1198
- }, 0, "ze_1")
1199
- ], 1, "ze_2");
1200
- }, "OutputField_component_6Kc38ThYgF4"));
1201
- const OutputFieldRaw = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1260
+ }, /* @__PURE__ */ _jsxC(Slot, null, 3, "cA_0"), 1, null),
1261
+ /* @__PURE__ */ _jsxC(SelectInputRaw, {
1262
+ ...props
1263
+ }, 0, "cA_1")
1264
+ ], 1, "cA_2");
1265
+ }, "SelectInput_component_m80ag1KuJSk"));
1266
+ const SelectInputRaw = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1202
1267
  const props1 = _restProps(props, [
1203
- "onChange$"
1268
+ "id",
1269
+ "values"
1204
1270
  ]);
1205
- const alertsStore = useStore({
1206
- alerts: []
1207
- }, {
1208
- deep: true
1271
+ const store = useStore({
1272
+ opened: false
1209
1273
  });
1210
- return /* @__PURE__ */ _jsxC(Fragment, {
1211
- children: [
1212
- /* @__PURE__ */ _jsxS("textarea", {
1213
- ...props1,
1214
- class: {
1215
- "transition ease-in-out cursor-pointer text-lg border border-gray-700 bg-gray-800 text-gray-50 hover:bg-gray-700 focus:bg-gray-700 rounded-md px-3 py-2 break-words": true,
1216
- ...props1.class
1217
- },
1218
- onChange$: /* @__PURE__ */ inlinedQrl((event, element) => {
1219
- const [alertsStore2, props2] = useLexicalScope();
1220
- if (props2.onChange$)
1221
- props2.onChange$(event, element, alertsStore2);
1222
- }, "OutputFieldRaw_component__Fragment_textarea_onChange_sGG9tIcP0OY", [
1223
- alertsStore,
1224
- props
1225
- ]),
1226
- onClick$: /* @__PURE__ */ inlinedQrl((event, element) => {
1227
- const [alertsStore2] = useLexicalScope();
1228
- navigator.clipboard.writeText(element.value);
1229
- const alert = {
1230
- class: "text-green-500",
1231
- text: "Copied to clipboard!"
1232
- };
1233
- alertsStore2.alerts.push(alert);
1234
- setTimeout(() => {
1235
- alertsStore2.alerts.splice(alertsStore2.alerts.indexOf(alert), 1);
1236
- }, 1e3);
1237
- }, "OutputFieldRaw_component__Fragment_textarea_onClick_7OWCYv02KFs", [
1238
- alertsStore
1239
- ])
1240
- }, null, 0, null),
1241
- alertsStore.alerts.map((alert, i) => /* @__PURE__ */ _jsxQ("p", {
1242
- class: _wrapSignal(alert, "class"),
1243
- dangerouslySetInnerHTML: _wrapSignal(alert, "text")
1244
- }, null, null, 3, `output-alert${i}`))
1245
- ]
1246
- }, 1, "ze_3");
1247
- }, "OutputFieldRaw_component_OxiM0W3AR0o"));
1248
- const SelectInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1249
1274
  return /* @__PURE__ */ _jsxQ("div", null, {
1250
- class: "flex flex-col"
1275
+ class: "relative"
1251
1276
  }, [
1252
- /* @__PURE__ */ _jsxQ("label", null, {
1253
- class: "mb-2",
1254
- for: _fnSignal((p0) => p0.id, [
1277
+ /* @__PURE__ */ _jsxS("select", {
1278
+ ...props1,
1279
+ children: props.values.map((value, i) => {
1280
+ return /* @__PURE__ */ _jsxQ("option", {
1281
+ value: _wrapSignal(value, "value")
1282
+ }, null, value.name, 1, i);
1283
+ })
1284
+ }, {
1285
+ class: {
1286
+ "hidden": true
1287
+ },
1288
+ id: _fnSignal((p0) => p0.id, [
1255
1289
  props
1256
1290
  ], "p0.id")
1257
- }, /* @__PURE__ */ _jsxC(Slot, {
1258
- name: "label",
1291
+ }, 0, null),
1292
+ /* @__PURE__ */ _jsxC(Button, {
1293
+ children: [
1294
+ /* @__PURE__ */ _jsxQ("span", null, {
1295
+ id: _fnSignal((p0) => `lui-${p0.id}-name`, [
1296
+ props
1297
+ ], "`lui-${p0.id}-name`")
1298
+ }, props.values.find((value) => value.value.toString() === props1.value)?.name ?? props.values[0].name, 1, null),
1299
+ /* @__PURE__ */ _jsxC(ChevronDown, {
1300
+ width: 20,
1301
+ get class() {
1302
+ return {
1303
+ "transition-all duration-200": true,
1304
+ "transform rotate-180": store.opened
1305
+ };
1306
+ },
1307
+ [_IMMUTABLE]: {
1308
+ class: _fnSignal((p0) => ({
1309
+ "transition-all duration-200": true,
1310
+ "transform rotate-180": p0.opened
1311
+ }), [
1312
+ store
1313
+ ], '{"transition-all duration-200":true,"transform rotate-180":p0.opened}'),
1314
+ width: _IMMUTABLE
1315
+ }
1316
+ }, 3, "cA_3")
1317
+ ],
1318
+ class: {
1319
+ ...props1.class
1320
+ },
1321
+ onClick$: /* @__PURE__ */ inlinedQrl(() => {
1322
+ const [store2] = useLexicalScope();
1323
+ store2.opened = !store2.opened;
1324
+ }, "SelectInputRaw_component_div_Button_onClick_9Gkbglaqsdw", [
1325
+ store
1326
+ ]),
1259
1327
  [_IMMUTABLE]: {
1260
- name: _IMMUTABLE
1328
+ onClick$: _IMMUTABLE
1261
1329
  }
1262
- }, 3, "cA_0"), 1, null),
1263
- /* @__PURE__ */ _jsxC(SelectInputRaw, {
1264
- ...props,
1265
- children: /* @__PURE__ */ _jsxC(Slot, null, 3, "cA_1")
1266
- }, 0, "cA_2")
1267
- ], 1, "cA_3");
1268
- }, "SelectInput_component_m80ag1KuJSk"));
1269
- const SelectInputRaw = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1270
- const props1 = _restProps(props, [
1271
- "transparent"
1272
- ]);
1273
- return /* @__PURE__ */ _jsxS("select", {
1274
- ...props1,
1275
- children: /* @__PURE__ */ _jsxC(Slot, null, 3, "cA_4"),
1276
- class: {
1277
- "transition ease-in-out text-lg border border-gray-700 bg-gray-800 text-gray-50 hover:bg-gray-700 focus:bg-gray-700 rounded-md px-2 py-3": true,
1278
- "border-0 bg-transparent": props.transparent,
1279
- ...props1.class
1280
- }
1281
- }, null, 0, "cA_5");
1330
+ }, 1, "cA_4"),
1331
+ /* @__PURE__ */ _jsxQ("div", {
1332
+ class: {
1333
+ "transition-all absolute top-full p-1 mt-2 gap-1 left-0 bg-gray-800/50 backdrop-blur-xl flex flex-col rounded-lg border border-gray-700 z-[1000] max-h-72 overflow-scroll": true,
1334
+ "pointer-events-none opacity-0 scale-95": !store.opened
1335
+ }
1336
+ }, {
1337
+ id: _fnSignal((p0) => `lui-${p0.id}-opts`, [
1338
+ props
1339
+ ], "`lui-${p0.id}-opts`")
1340
+ }, props.values.map((value, i) => {
1341
+ return /* @__PURE__ */ _jsxC(Button, {
1342
+ onClick$: /* @__PURE__ */ inlinedQrl(() => {
1343
+ const [props2, store2, value2] = useLexicalScope();
1344
+ store2.opened = false;
1345
+ const select = document.getElementById(props2.id);
1346
+ select.value = value2.value.toString();
1347
+ const name = document.getElementById(`lui-${props2.id}-name`);
1348
+ name.textContent = value2.name;
1349
+ select.dispatchEvent(new Event("change"));
1350
+ }, "SelectInputRaw_component_div_div_Button_onClick_mLa0FdeKCLw", [
1351
+ props,
1352
+ store,
1353
+ value
1354
+ ]),
1355
+ get class() {
1356
+ return {
1357
+ "border-0 bg-transparent": true,
1358
+ "opacity-0": !store.opened
1359
+ };
1360
+ },
1361
+ children: _wrapSignal(value, "name"),
1362
+ [_IMMUTABLE]: {
1363
+ class: _fnSignal((p0) => ({
1364
+ "border-0 bg-transparent": true,
1365
+ "opacity-0": !p0.opened
1366
+ }), [
1367
+ store
1368
+ ], '{"border-0 bg-transparent":true,"opacity-0":!p0.opened}')
1369
+ }
1370
+ }, 1, i);
1371
+ }), 1, null)
1372
+ ], 1, "cA_5");
1282
1373
  }, "SelectInputRaw_component_Itdx5yPeQd4"));
1283
- const TextAreaInput = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1374
+ const TextArea = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1284
1375
  return /* @__PURE__ */ _jsxQ("div", null, {
1285
1376
  class: "flex flex-col"
1286
1377
  }, [
1287
1378
  /* @__PURE__ */ _jsxQ("label", null, {
1288
- class: "mb-2",
1379
+ class: "pb-2",
1289
1380
  for: _fnSignal((p0) => p0.id, [
1290
1381
  props
1291
1382
  ], "p0.id")
1292
- }, /* @__PURE__ */ _jsxC(Slot, null, 3, "8U_0"), 1, null),
1293
- /* @__PURE__ */ _jsxC(TextAreaInputRaw, {
1383
+ }, /* @__PURE__ */ _jsxC(Slot, null, 3, "UP_0"), 1, null),
1384
+ /* @__PURE__ */ _jsxC(TextAreaRaw, {
1294
1385
  ...props
1295
- }, 0, "8U_1")
1296
- ], 1, "8U_2");
1297
- }, "TextAreaInput_component_5hzQkVgFVlw"));
1298
- const TextAreaInputRaw = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1299
- return /* @__PURE__ */ _jsxS("textarea", {
1300
- ...props,
1301
- class: {
1302
- "transition ease-in-out text-lg border border-gray-700 bg-gray-800 text-gray-50 hover:bg-gray-700 focus:bg-gray-700 rounded-md px-3 py-2 resize-y w-full h-32": true,
1303
- ...props.class
1304
- }
1305
- }, null, 0, "8U_3");
1306
- }, "TextAreaInputRaw_component_CupRtuvzbEs"));
1386
+ }, 0, "UP_1")
1387
+ ], 1, "UP_2");
1388
+ }, "TextArea_component_rWDoQFL2c0g"));
1389
+ const TextAreaRaw = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1390
+ const props1 = _restProps(props, [
1391
+ "output"
1392
+ ]);
1393
+ return /* @__PURE__ */ _jsxC(Fragment, {
1394
+ children: /* @__PURE__ */ _jsxS("textarea", {
1395
+ ...props1,
1396
+ class: {
1397
+ [InputClasses]: true,
1398
+ "h-32": true,
1399
+ "cursor-pointer active:bg-gray-600": props.output,
1400
+ ...props1.class
1401
+ },
1402
+ onClick$: props.output ? /* @__PURE__ */ inlinedQrl((event, element) => {
1403
+ navigator.clipboard.writeText(element.value);
1404
+ const notification = document.createElement("div");
1405
+ notification.className = "fixed bottom-0 right-0 px-6 py-4 m-6 bg-green-600/50 border border-green-500 text-gray-50 rounded-md shadow-lg whitespace-nowrap backdrop-blur-xl";
1406
+ notification.innerText = "Copied to clipboard!";
1407
+ document.body.appendChild(notification);
1408
+ setTimeout(() => {
1409
+ notification.remove();
1410
+ }, 1e3);
1411
+ }, "TextAreaRaw_component__Fragment_textarea_onClick_YAQUkxxJ6Sg") : void 0
1412
+ }, {
1413
+ readOnly: _fnSignal((p0) => p0.output, [
1414
+ props
1415
+ ], "p0.output")
1416
+ }, 0, null)
1417
+ }, 1, "UP_3");
1418
+ }, "TextAreaRaw_component_PZiPScYxgNk"));
1307
1419
  const Toggle = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1308
1420
  const props1 = _restProps(props, [
1309
1421
  "center"
@@ -1330,10 +1442,12 @@ const Toggle = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) =
1330
1442
  }, 0, null),
1331
1443
  /* @__PURE__ */ _jsxQ("div", null, {
1332
1444
  class: {
1333
- "transition ease-in-out w-12 h-7 rounded-md peer bg-gray-800 border border-gray-700 hover:bg-gray-700": true,
1334
- "peer-checked:bg-blue-700 peer-checked:border-blue-600 peer-checked:hover:bg-blue-600": true,
1335
- "after:content-[''] after:absolute after:top-[4px] after:left-[4px] after:bg-gray-700 after:border after:border-gray-600 hover:after:bg-gray-600 after:rounded-md after:h-5 after:w-5 after:transition-all after:ease-in-out": true,
1336
- "peer-checked:after:translate-x-full peer-checked:after:bg-blue-500 peer-checked:after:border-blue-400 peer-checked:hover:after:bg-blue-400": true
1445
+ "transition ease-in-out w-12 h-7 rounded-md peer border hover:shadow-lg": true,
1446
+ "bg-gray-800 border-gray-700 hover:bg-gray-700 active:bg-gray-600": true,
1447
+ "after:content-[''] after:absolute after:top-[4px] after:left-[4px] after:border after:rounded-md after:h-5 after:w-5 after:transition-all after:ease-in-out": true,
1448
+ "after:bg-gray-700 after:border-gray-600 after:hover:bg-gray-600 after:active:bg-gray-500": true,
1449
+ "peer-checked:bg-blue-700 peer-checked:border-blue-600 peer-checked:hover:bg-blue-600 peer-checked:active:bg-blue-500": true,
1450
+ "peer-checked:after:translate-x-full peer-checked:after:bg-blue-600 peer-checked:after:border-blue-500 peer-checked:after:hover:bg-blue-500 peer-checked:after:active:bg-blue-400": true
1337
1451
  }
1338
1452
  }, null, 3, null)
1339
1453
  ], 1, null),
@@ -1782,6 +1896,7 @@ export {
1782
1896
  Card,
1783
1897
  CardHeader,
1784
1898
  ColorInput,
1899
+ InputClasses,
1785
1900
  LoadingIcon,
1786
1901
  LogoBirdflop,
1787
1902
  LogoDiscord,
@@ -1796,12 +1911,10 @@ export {
1796
1911
  LogoWaterfall,
1797
1912
  NumberInput,
1798
1913
  NumberInputRaw,
1799
- OutputField,
1800
- OutputFieldRaw,
1801
1914
  SelectInput,
1802
1915
  SelectInputRaw,
1803
- TextAreaInput,
1804
- TextAreaInputRaw,
1916
+ TextArea,
1917
+ TextAreaRaw,
1805
1918
  TextInput,
1806
1919
  TextInputRaw,
1807
1920
  Toggle,