@f0rbit/ui 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/server.js ADDED
@@ -0,0 +1,794 @@
1
+ import { ssrElement, mergeProps, escape, ssr, isServer, createComponent, Portal, ssrAttribute, ssrStyle } from 'solid-js/web';
2
+ import { createContext, splitProps, onMount, onCleanup, Show, useContext, createSignal, createEffect, For } from 'solid-js';
3
+
4
+ // src/components/Button.tsx
5
+ var _tmpl$ = '<span class="spinner spinner-sm"></span>';
6
+ var variantClasses = {
7
+ primary: "",
8
+ secondary: "btn-secondary",
9
+ ghost: "btn-ghost",
10
+ danger: "btn-danger"
11
+ };
12
+ var sizeClasses = {
13
+ sm: "btn-sm",
14
+ md: "",
15
+ lg: "btn-lg"
16
+ };
17
+ function Button(props) {
18
+ const [local, rest] = splitProps(props, ["variant", "size", "icon", "label", "loading", "class", "disabled", "children"]);
19
+ const classes = () => {
20
+ const parts = ["btn"];
21
+ parts.push(variantClasses[local.variant ?? "primary"]);
22
+ if (local.size && local.size !== "md") {
23
+ parts.push(sizeClasses[local.size]);
24
+ }
25
+ if (local.icon) {
26
+ parts.push("btn-icon");
27
+ }
28
+ if (local.class) {
29
+ parts.push(local.class);
30
+ }
31
+ return parts.join(" ");
32
+ };
33
+ return ssrElement("button", mergeProps({
34
+ get ["class"]() {
35
+ return classes();
36
+ },
37
+ get ["aria-label"]() {
38
+ return local.icon ? local.label : void 0;
39
+ },
40
+ get disabled() {
41
+ return local.disabled || local.loading;
42
+ }
43
+ }, rest), local.loading ? _tmpl$ : escape(local.children), false);
44
+ }
45
+ var variantClasses2 = {
46
+ default: "",
47
+ success: "badge-success",
48
+ error: "badge-error",
49
+ warning: "badge-warning",
50
+ info: "badge-info",
51
+ accent: "badge-accent"
52
+ };
53
+ function Badge(props) {
54
+ const [local, rest] = splitProps(props, ["variant", "class", "children"]);
55
+ const classes = () => {
56
+ const parts = ["badge"];
57
+ const variant = local.variant ?? "default";
58
+ if (variant !== "default") {
59
+ parts.push(variantClasses2[variant]);
60
+ }
61
+ if (local.class) {
62
+ parts.push(local.class);
63
+ }
64
+ return parts.join(" ");
65
+ };
66
+ return ssrElement("span", mergeProps({
67
+ get ["class"]() {
68
+ return classes();
69
+ }
70
+ }, rest), escape(local.children), false);
71
+ }
72
+ function Card(props) {
73
+ const [local, rest] = splitProps(props, ["interactive", "class", "children"]);
74
+ const classes = () => {
75
+ const parts = ["card"];
76
+ if (local.interactive) {
77
+ parts.push("card-interactive");
78
+ }
79
+ if (local.class) {
80
+ parts.push(local.class);
81
+ }
82
+ return parts.join(" ");
83
+ };
84
+ return ssrElement("div", mergeProps({
85
+ get ["class"]() {
86
+ return classes();
87
+ }
88
+ }, rest), escape(local.children), false);
89
+ }
90
+ function CardHeader(props) {
91
+ const [local, rest] = splitProps(props, ["class", "children"]);
92
+ return ssrElement("div", mergeProps({
93
+ get ["class"]() {
94
+ return `card-header ${local.class ?? ""}`.trim();
95
+ }
96
+ }, rest), escape(local.children), false);
97
+ }
98
+ function CardTitle(props) {
99
+ const [local, rest] = splitProps(props, ["class", "children"]);
100
+ return ssrElement("h3", mergeProps({
101
+ get ["class"]() {
102
+ return `card-title ${local.class ?? ""}`.trim();
103
+ }
104
+ }, rest), escape(local.children), false);
105
+ }
106
+ function CardDescription(props) {
107
+ const [local, rest] = splitProps(props, ["class", "children"]);
108
+ return ssrElement("p", mergeProps({
109
+ get ["class"]() {
110
+ return `card-description ${local.class ?? ""}`.trim();
111
+ }
112
+ }, rest), escape(local.children), false);
113
+ }
114
+ function CardContent(props) {
115
+ const [local, rest] = splitProps(props, ["class", "children"]);
116
+ return ssrElement("div", mergeProps({
117
+ get ["class"]() {
118
+ return `card-content ${local.class ?? ""}`.trim();
119
+ }
120
+ }, rest), escape(local.children), false);
121
+ }
122
+ function CardFooter(props) {
123
+ const [local, rest] = splitProps(props, ["class", "children"]);
124
+ return ssrElement("div", mergeProps({
125
+ get ["class"]() {
126
+ return `card-footer ${local.class ?? ""}`.trim();
127
+ }
128
+ }, rest), escape(local.children), false);
129
+ }
130
+ function Input(props) {
131
+ const [local, rest] = splitProps(props, ["error", "class", "disabled"]);
132
+ const classes = () => `input ${local.error ? "input-error" : ""} ${local.class ?? ""}`.trim();
133
+ return ssrElement("input", mergeProps({
134
+ get ["class"]() {
135
+ return classes();
136
+ },
137
+ get disabled() {
138
+ return local.disabled;
139
+ }
140
+ }, rest), void 0, false);
141
+ }
142
+ function Textarea(props) {
143
+ const [local, rest] = splitProps(props, ["error", "class", "disabled"]);
144
+ const classes = () => `textarea ${local.error ? "input-error" : ""} ${local.class ?? ""}`.trim();
145
+ return ssrElement("textarea", mergeProps({
146
+ get ["class"]() {
147
+ return classes();
148
+ },
149
+ get disabled() {
150
+ return local.disabled;
151
+ }
152
+ }, rest), void 0, false);
153
+ }
154
+ function Select(props) {
155
+ const [local, rest] = splitProps(props, ["error", "class", "disabled", "children"]);
156
+ const classes = () => `select ${local.error ? "input-error" : ""} ${local.class ?? ""}`.trim();
157
+ return ssrElement("select", mergeProps({
158
+ get ["class"]() {
159
+ return classes();
160
+ },
161
+ get disabled() {
162
+ return local.disabled;
163
+ }
164
+ }, rest), escape(local.children), false);
165
+ }
166
+ var _tmpl$2 = '<span class="status-dot"></span>';
167
+ var _tmpl$22 = ["<span>", "</span>"];
168
+ var stateClasses = {
169
+ active: "status-active",
170
+ inactive: "status-inactive",
171
+ error: "status-error",
172
+ pending: "status-pending"
173
+ };
174
+ var defaultLabels = {
175
+ active: "Active",
176
+ inactive: "Inactive",
177
+ error: "Error",
178
+ pending: "Pending"
179
+ };
180
+ function Status(props) {
181
+ const [local, rest] = splitProps(props, ["state", "label", "class"]);
182
+ const classes = () => {
183
+ const parts = ["status", stateClasses[local.state]];
184
+ if (local.class) {
185
+ parts.push(local.class);
186
+ }
187
+ return parts.join(" ");
188
+ };
189
+ const displayLabel = () => local.label ?? defaultLabels[local.state];
190
+ return ssrElement("span", mergeProps({
191
+ get ["class"]() {
192
+ return classes();
193
+ }
194
+ }, rest), [ssr(_tmpl$2), ssr(_tmpl$22, escape(displayLabel()))], false);
195
+ }
196
+ var _tmpl$3 = ['<span class="stat-value">', "</span>"];
197
+ var _tmpl$23 = ['<span class="stat-label">', "</span>"];
198
+ function Stat(props) {
199
+ const [local, rest] = splitProps(props, ["value", "label", "class"]);
200
+ return ssrElement("div", mergeProps({
201
+ get ["class"]() {
202
+ return local.class ? `stat ${local.class}` : "stat";
203
+ }
204
+ }, rest), [ssr(_tmpl$3, escape(local.value)), ssr(_tmpl$23, escape(local.label))], false);
205
+ }
206
+ var sizeClasses2 = {
207
+ sm: "spinner-sm",
208
+ md: "",
209
+ lg: "spinner-lg"
210
+ };
211
+ function Spinner(props) {
212
+ const [local, rest] = splitProps(props, ["size", "class"]);
213
+ const classes = () => {
214
+ const parts = ["spinner"];
215
+ const size = local.size ?? "md";
216
+ if (size !== "md") {
217
+ parts.push(sizeClasses2[size]);
218
+ }
219
+ if (local.class) {
220
+ parts.push(local.class);
221
+ }
222
+ return parts.join(" ");
223
+ };
224
+ return ssrElement("span", mergeProps({
225
+ get ["class"]() {
226
+ return classes();
227
+ }
228
+ }, rest), void 0, false);
229
+ }
230
+ var _tmpl$4 = '<path d="m9 18 6-6-6-6"></path>';
231
+ function Chevron(props) {
232
+ const [local, rest] = splitProps(props, ["expanded", "facing", "size", "class"]);
233
+ const classes = () => {
234
+ const parts = ["chevron"];
235
+ if (local.facing === "down") {
236
+ parts.push("chevron-down");
237
+ }
238
+ if (local.expanded) {
239
+ parts.push("active");
240
+ }
241
+ if (local.class) {
242
+ parts.push(local.class);
243
+ }
244
+ return parts.join(" ");
245
+ };
246
+ const size = () => local.size ?? "1em";
247
+ return ssrElement("svg", mergeProps({
248
+ get ["class"]() {
249
+ return classes();
250
+ },
251
+ viewBox: "0 0 24 24",
252
+ get width() {
253
+ return size();
254
+ },
255
+ get height() {
256
+ return size();
257
+ },
258
+ fill: "none",
259
+ stroke: "currentColor",
260
+ "stroke-width": "2",
261
+ "stroke-linecap": "round",
262
+ "stroke-linejoin": "round"
263
+ }, rest), ssr(_tmpl$4), false);
264
+ }
265
+ var _tmpl$5 = ['<div class="empty">', "", "", "", "</div>"];
266
+ var _tmpl$24 = ['<div class="empty-icon">', "</div>"];
267
+ var _tmpl$32 = ['<h3 class="empty-title">', "</h3>"];
268
+ var _tmpl$42 = ['<p class="empty-description">', "</p>"];
269
+ function Empty(props) {
270
+ const [local] = splitProps(props, ["icon", "title", "description", "children"]);
271
+ return ssr(_tmpl$5, local.icon && ssr(_tmpl$24, escape(local.icon)), local.title && ssr(_tmpl$32, escape(local.title)), local.description && ssr(_tmpl$42, escape(local.description)), escape(local.children));
272
+ }
273
+ var _tmpl$6 = ['<div class="overlay" role="presentation">', "</div>"];
274
+ var _tmpl$25 = '<button type="button" class="modal-close" aria-label="Close"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button>';
275
+ var ModalContext = createContext();
276
+ function Modal(props) {
277
+ const [local, rest] = splitProps(props, ["open", "onClose", "class", "children"]);
278
+ const handleKeyDown = (e) => {
279
+ if (e.key === "Escape" && local.open) {
280
+ local.onClose();
281
+ }
282
+ };
283
+ onMount(() => {
284
+ if (isServer) return;
285
+ document.addEventListener("keydown", handleKeyDown);
286
+ });
287
+ onCleanup(() => {
288
+ if (isServer) return;
289
+ document.removeEventListener("keydown", handleKeyDown);
290
+ });
291
+ const classes = () => `modal ${local.class ?? ""}`.trim();
292
+ return createComponent(Show, {
293
+ get when() {
294
+ return local.open;
295
+ },
296
+ get children() {
297
+ return createComponent(Portal, {
298
+ get children() {
299
+ return createComponent(ModalContext.Provider, {
300
+ get value() {
301
+ return {
302
+ onClose: local.onClose
303
+ };
304
+ },
305
+ get children() {
306
+ return ssr(_tmpl$6, ssrElement("dialog", mergeProps({
307
+ get ["class"]() {
308
+ return classes();
309
+ },
310
+ open: true,
311
+ "aria-modal": "true"
312
+ }, rest), escape(local.children), false));
313
+ }
314
+ });
315
+ }
316
+ });
317
+ }
318
+ });
319
+ }
320
+ function ModalHeader(props) {
321
+ const [local, rest] = splitProps(props, ["class", "children"]);
322
+ const ctx = useContext(ModalContext);
323
+ return ssrElement("div", mergeProps({
324
+ get ["class"]() {
325
+ return `modal-header ${local.class ?? ""}`.trim();
326
+ }
327
+ }, rest), [escape(local.children), escape(createComponent(Show, {
328
+ when: ctx,
329
+ get children() {
330
+ return ssr(_tmpl$25);
331
+ }
332
+ }))], false);
333
+ }
334
+ function ModalTitle(props) {
335
+ const [local, rest] = splitProps(props, ["class", "children"]);
336
+ return ssrElement("h2", mergeProps({
337
+ get ["class"]() {
338
+ return `modal-title ${local.class ?? ""}`.trim();
339
+ }
340
+ }, rest), escape(local.children), false);
341
+ }
342
+ function ModalBody(props) {
343
+ const [local, rest] = splitProps(props, ["class", "children"]);
344
+ return ssrElement("div", mergeProps({
345
+ get ["class"]() {
346
+ return `modal-body ${local.class ?? ""}`.trim();
347
+ }
348
+ }, rest), escape(local.children), false);
349
+ }
350
+ function ModalFooter(props) {
351
+ const [local, rest] = splitProps(props, ["class", "children"]);
352
+ return ssrElement("div", mergeProps({
353
+ get ["class"]() {
354
+ return `modal-footer ${local.class ?? ""}`.trim();
355
+ }
356
+ }, rest), escape(local.children), false);
357
+ }
358
+ var _tmpl$7 = ['<div class="dropdown">', "</div>"];
359
+ var _tmpl$26 = ['<div class="dropdown-trigger">', "</div>"];
360
+ var _tmpl$33 = ['<div class="dropdown-menu">', "</div>"];
361
+ var _tmpl$43 = '<div class="dropdown-divider"></div>';
362
+ var DropdownContext = createContext();
363
+ function Dropdown(props) {
364
+ const [open, setOpen] = createSignal(false);
365
+ const close = () => setOpen(false);
366
+ const handleClickOutside = (e) => {
367
+ {
368
+ close();
369
+ }
370
+ };
371
+ const handleKeyDown = (e) => {
372
+ if (e.key === "Escape" && open()) {
373
+ close();
374
+ }
375
+ };
376
+ onMount(() => {
377
+ if (isServer) return;
378
+ document.addEventListener("click", handleClickOutside);
379
+ document.addEventListener("keydown", handleKeyDown);
380
+ });
381
+ onCleanup(() => {
382
+ if (isServer) return;
383
+ document.removeEventListener("click", handleClickOutside);
384
+ document.removeEventListener("keydown", handleKeyDown);
385
+ });
386
+ return createComponent(DropdownContext.Provider, {
387
+ value: {
388
+ open,
389
+ setOpen,
390
+ close
391
+ },
392
+ get children() {
393
+ return ssr(_tmpl$7, escape(props.children));
394
+ }
395
+ });
396
+ }
397
+ function DropdownTrigger(props) {
398
+ useContext(DropdownContext);
399
+ return ssr(_tmpl$26, escape(props.children));
400
+ }
401
+ function DropdownMenu(props) {
402
+ const ctx = useContext(DropdownContext);
403
+ return createComponent(Show, {
404
+ get when() {
405
+ return ctx?.open();
406
+ },
407
+ get children() {
408
+ return ssr(_tmpl$33, escape(props.children));
409
+ }
410
+ });
411
+ }
412
+ function DropdownItem(props) {
413
+ const [local, rest] = splitProps(props, ["onClick", "active", "children"]);
414
+ useContext(DropdownContext);
415
+ const classes = () => `dropdown-item ${local.active ? "active" : ""}`.trim();
416
+ return ssrElement("button", mergeProps({
417
+ type: "button",
418
+ get ["class"]() {
419
+ return classes();
420
+ }
421
+ }, rest), escape(local.children), false);
422
+ }
423
+ function DropdownDivider() {
424
+ return ssr(_tmpl$43);
425
+ }
426
+ var _tmpl$8 = ["<div", ' style="', '">', "</div>"];
427
+ var _tmpl$27 = ['<button class="clamp-toggle">', "</button>"];
428
+ function Clamp(props) {
429
+ const [local, rest] = splitProps(props, ["lines", "showMoreText", "showLessText", "class", "children"]);
430
+ const lines = () => local.lines ?? 3;
431
+ const showMoreText = () => local.showMoreText ?? "show more";
432
+ const showLessText = () => local.showLessText ?? "show less";
433
+ const [expanded, setExpanded] = createSignal(false);
434
+ const [overflows, setOverflows] = createSignal(false);
435
+ const wrapperClasses = () => `clamp ${local.class ?? ""}`.trim();
436
+ const contentClasses = () => expanded() ? "clamp-content" : "clamp-content clamp-clamped";
437
+ return ssrElement("div", mergeProps({
438
+ get ["class"]() {
439
+ return wrapperClasses();
440
+ }
441
+ }, rest), [ssr(_tmpl$8, ssrAttribute("class", escape(contentClasses(), true), false), ssrStyle(`--clamp-lines: ${lines()}`), escape(local.children)), escape(createComponent(Show, {
442
+ get when() {
443
+ return overflows() || expanded();
444
+ },
445
+ get children() {
446
+ return ssr(_tmpl$27, expanded() ? escape(showLessText()) : escape(showMoreText()));
447
+ }
448
+ }))], false);
449
+ }
450
+ var _tmpl$9 = ['<div class="collapsible-content">', "</div>"];
451
+ var _tmpl$28 = ['<div class="collapsible"><button class="collapsible-trigger">', "", "</button>", "</div>"];
452
+ function Collapsible(props) {
453
+ const [local, rest] = splitProps(props, ["defaultOpen", "open", "onOpenChange", "children", "trigger"]);
454
+ const [internalOpen, setInternalOpen] = createSignal(local.defaultOpen ?? false);
455
+ const isControlled = () => local.open !== void 0;
456
+ const isOpen = () => isControlled() ? local.open : internalOpen();
457
+ return ssr(_tmpl$28, escape(local.trigger), escape(createComponent(Chevron, {
458
+ "class": "collapsible-chevron",
459
+ get expanded() {
460
+ return isOpen();
461
+ }
462
+ })), escape(createComponent(Show, {
463
+ get when() {
464
+ return isOpen();
465
+ },
466
+ get children() {
467
+ return ssr(_tmpl$9, escape(local.children));
468
+ }
469
+ })));
470
+ }
471
+ var _tmpl$10 = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="13 4 6 12 3 9"></polyline></svg>';
472
+ var _tmpl$29 = ["<div", ">", "</div>"];
473
+ var _tmpl$34 = ['<div class="step-description">', "</div>"];
474
+ var _tmpl$44 = ["<div", '><div class="step-title">', "</div>", "</div>"];
475
+ var _tmpl$52 = ["<div", "></div>"];
476
+ var StepperContext = createContext();
477
+ var statusClasses = {
478
+ completed: "step-completed",
479
+ current: "step-current",
480
+ upcoming: "step-upcoming"
481
+ };
482
+ function CheckIcon() {
483
+ return ssr(_tmpl$10);
484
+ }
485
+ var StepContext = createContext();
486
+ function Step(props) {
487
+ const [local, rest] = splitProps(props, ["title", "description", "icon", "status", "class"]);
488
+ const stepperCtx = useContext(StepperContext);
489
+ const stepCtx = useContext(StepContext);
490
+ const stepNumber = stepperCtx?.registerStep() ?? 1;
491
+ const orientation = () => stepCtx?.orientation() ?? "horizontal";
492
+ const status = () => local.status ?? "upcoming";
493
+ const isVertical = () => orientation() === "vertical";
494
+ const classes = () => {
495
+ const parts = ["step", statusClasses[status()]];
496
+ if (isVertical()) {
497
+ parts.push("vertical-connector-item");
498
+ }
499
+ if (local.class) {
500
+ parts.push(local.class);
501
+ }
502
+ return parts.join(" ");
503
+ };
504
+ const indicatorClasses = () => {
505
+ const parts = ["step-indicator"];
506
+ if (isVertical()) {
507
+ parts.push("vertical-indicator");
508
+ }
509
+ return parts.join(" ");
510
+ };
511
+ const contentClasses = () => {
512
+ const parts = ["step-content"];
513
+ if (isVertical()) {
514
+ parts.push("vertical-content");
515
+ }
516
+ return parts.join(" ");
517
+ };
518
+ const connectorClasses = () => {
519
+ const parts = ["step-connector"];
520
+ if (isVertical()) {
521
+ parts.push("vertical-connector");
522
+ }
523
+ return parts.join(" ");
524
+ };
525
+ const indicator = () => {
526
+ if (status() === "completed") {
527
+ return createComponent(CheckIcon, {});
528
+ }
529
+ if (local.icon) {
530
+ return local.icon;
531
+ }
532
+ return stepNumber;
533
+ };
534
+ return ssrElement("div", mergeProps({
535
+ get ["class"]() {
536
+ return classes();
537
+ }
538
+ }, rest), [ssr(_tmpl$29, ssrAttribute("class", escape(indicatorClasses(), true), false), escape(indicator())), ssr(_tmpl$44, ssrAttribute("class", escape(contentClasses(), true), false), escape(local.title), escape(createComponent(Show, {
539
+ get when() {
540
+ return local.description;
541
+ },
542
+ get children() {
543
+ return ssr(_tmpl$34, escape(local.description));
544
+ }
545
+ }))), ssr(_tmpl$52, ssrAttribute("class", escape(connectorClasses(), true), false))], false);
546
+ }
547
+ function Stepper(props) {
548
+ const [local, rest] = splitProps(props, ["orientation", "class", "children"]);
549
+ let stepCounter = 0;
550
+ const registerStep = () => ++stepCounter;
551
+ const orientation = () => local.orientation ?? "horizontal";
552
+ const classes = () => {
553
+ const parts = ["stepper", orientation() === "horizontal" ? "stepper-horizontal" : "stepper-vertical"];
554
+ if (local.class) {
555
+ parts.push(local.class);
556
+ }
557
+ return parts.join(" ");
558
+ };
559
+ return createComponent(StepperContext.Provider, {
560
+ value: {
561
+ registerStep
562
+ },
563
+ get children() {
564
+ return createComponent(StepContext.Provider, {
565
+ value: {
566
+ orientation
567
+ },
568
+ get children() {
569
+ return ssrElement("div", mergeProps({
570
+ get ["class"]() {
571
+ return classes();
572
+ }
573
+ }, rest), escape(local.children), false);
574
+ }
575
+ });
576
+ }
577
+ });
578
+ }
579
+ var TabsContext = createContext();
580
+ function Tabs(props) {
581
+ const [local, rest] = splitProps(props, ["defaultValue", "value", "onValueChange", "children", "class"]);
582
+ const [internalValue, setInternalValue] = createSignal(local.defaultValue ?? "");
583
+ const isControlled = () => local.value !== void 0;
584
+ const activeTab = () => isControlled() ? local.value : internalValue();
585
+ const setActiveTab = (id) => {
586
+ if (!isControlled()) {
587
+ setInternalValue(id);
588
+ }
589
+ local.onValueChange?.(id);
590
+ };
591
+ const classes = () => `tabs ${local.class ?? ""}`.trim();
592
+ return createComponent(TabsContext.Provider, {
593
+ value: {
594
+ activeTab,
595
+ setActiveTab
596
+ },
597
+ get children() {
598
+ return ssrElement("div", mergeProps({
599
+ get ["class"]() {
600
+ return classes();
601
+ }
602
+ }, rest), escape(local.children), false);
603
+ }
604
+ });
605
+ }
606
+ function TabList(props) {
607
+ const [local, rest] = splitProps(props, ["children", "class"]);
608
+ const classes = () => `tab-list ${local.class ?? ""}`.trim();
609
+ return ssrElement("div", mergeProps({
610
+ get ["class"]() {
611
+ return classes();
612
+ },
613
+ role: "tablist"
614
+ }, rest), escape(local.children), false);
615
+ }
616
+ function Tab(props) {
617
+ const [local, rest] = splitProps(props, ["value", "children", "class"]);
618
+ const ctx = useContext(TabsContext);
619
+ const isActive = () => ctx?.activeTab() === local.value;
620
+ const classes = () => {
621
+ const parts = ["tab"];
622
+ if (isActive()) {
623
+ parts.push("active");
624
+ }
625
+ if (local.class) {
626
+ parts.push(local.class);
627
+ }
628
+ return parts.join(" ");
629
+ };
630
+ return ssrElement("button", mergeProps({
631
+ type: "button",
632
+ role: "tab",
633
+ get ["aria-selected"]() {
634
+ return isActive();
635
+ },
636
+ get tabIndex() {
637
+ return isActive() ? 0 : -1;
638
+ },
639
+ get ["class"]() {
640
+ return classes();
641
+ }
642
+ }, rest), escape(local.children), false);
643
+ }
644
+ function TabPanel(props) {
645
+ const [local, rest] = splitProps(props, ["value", "children", "class"]);
646
+ const ctx = useContext(TabsContext);
647
+ const isActive = () => ctx?.activeTab() === local.value;
648
+ const classes = () => `tab-panel ${local.class ?? ""}`.trim();
649
+ return createComponent(Show, {
650
+ get when() {
651
+ return isActive();
652
+ },
653
+ get children() {
654
+ return ssrElement("div", mergeProps({
655
+ get ["class"]() {
656
+ return classes();
657
+ },
658
+ role: "tabpanel"
659
+ }, rest), escape(local.children), false);
660
+ }
661
+ });
662
+ }
663
+ var _tmpl$11 = ["<label", ">", '<span class="checkbox-box" aria-hidden="true"><svg class="checkbox-check" viewBox="0 0 12 12" fill="none"><path d="M2 6L5 9L10 3" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="checkbox-indeterminate"></span></span>', "</label>"];
664
+ var _tmpl$210 = ['<span class="checkbox-content">', "", "</span>"];
665
+ var _tmpl$35 = ['<span class="checkbox-label">', "</span>"];
666
+ var _tmpl$45 = ['<span class="checkbox-description">', "</span>"];
667
+ function Checkbox(props) {
668
+ const [local, rest] = splitProps(props, ["label", "description", "indeterminate", "class", "disabled", "id"]);
669
+ const setIndeterminate = () => {
670
+ };
671
+ onMount(setIndeterminate);
672
+ createEffect(setIndeterminate);
673
+ const classes = () => `checkbox ${local.disabled ? "checkbox-disabled" : ""} ${local.class ?? ""}`.trim();
674
+ const inputId = () => local.id ?? (local.label ? `checkbox-${local.label.toLowerCase().replace(/\s+/g, "-")}` : void 0);
675
+ return ssr(_tmpl$11, ssrAttribute("class", escape(classes(), true), false), ssrElement("input", mergeProps({
676
+ type: "checkbox",
677
+ "class": "checkbox-input",
678
+ get id() {
679
+ return inputId();
680
+ },
681
+ get disabled() {
682
+ return local.disabled;
683
+ }
684
+ }, rest), void 0, false), (local.label || local.description) && ssr(_tmpl$210, local.label && ssr(_tmpl$35, escape(local.label)), local.description && ssr(_tmpl$45, escape(local.description))));
685
+ }
686
+ var _tmpl$12 = ["<label", ">", '<span class="toggle-track"><span class="toggle-knob"></span></span>', "</label>"];
687
+ var _tmpl$211 = ['<span class="toggle-content">', "", "</span>"];
688
+ var _tmpl$36 = ['<span class="toggle-label">', "</span>"];
689
+ var _tmpl$46 = ['<span class="toggle-description">', "</span>"];
690
+ function Toggle(props) {
691
+ const [local, rest] = splitProps(props, ["label", "description", "size", "class", "disabled"]);
692
+ const size = () => local.size ?? "md";
693
+ const classes = () => `toggle ${size() === "sm" ? "toggle-sm" : ""} ${local.disabled ? "toggle-disabled" : ""} ${local.class ?? ""}`.trim();
694
+ return ssr(_tmpl$12, ssrAttribute("class", escape(classes(), true), false), ssrElement("input", mergeProps({
695
+ type: "checkbox",
696
+ "class": "toggle-input",
697
+ role: "switch",
698
+ get disabled() {
699
+ return local.disabled;
700
+ }
701
+ }, rest), void 0, false), (local.label || local.description) && ssr(_tmpl$211, local.label && ssr(_tmpl$36, escape(local.label)), local.description && ssr(_tmpl$46, escape(local.description))));
702
+ }
703
+ var _tmpl$13 = '<span class="form-field-required" aria-hidden="true">*</span>';
704
+ var _tmpl$212 = ['<label class="form-field-label"', ">", "", "</label>"];
705
+ var _tmpl$37 = ['<span class="form-field-description">', "</span>"];
706
+ var _tmpl$47 = ['<span class="form-field-error" role="alert">', "</span>"];
707
+ function FormField(props) {
708
+ const [local, rest] = splitProps(props, ["label", "error", "description", "required", "children", "id", "class"]);
709
+ const classes = () => `form-field ${local.error ? "form-field-has-error" : ""} ${local.class ?? ""}`.trim();
710
+ return ssrElement("div", mergeProps({
711
+ get ["class"]() {
712
+ return classes();
713
+ }
714
+ }, rest), [ssr(_tmpl$212, ssrAttribute("for", escape(local.id, true), false), escape(local.label), escape(createComponent(Show, {
715
+ get when() {
716
+ return local.required;
717
+ },
718
+ get children() {
719
+ return ssr(_tmpl$13);
720
+ }
721
+ }))), escape(createComponent(Show, {
722
+ get when() {
723
+ return local.description;
724
+ },
725
+ get children() {
726
+ return ssr(_tmpl$37, escape(local.description));
727
+ }
728
+ })), escape(local.children), escape(createComponent(Show, {
729
+ get when() {
730
+ return local.error;
731
+ },
732
+ get children() {
733
+ return ssr(_tmpl$47, escape(local.error));
734
+ }
735
+ }))], false);
736
+ }
737
+ var _tmpl$14 = '<div class="timeline-dot"></div>';
738
+ var _tmpl$213 = ['<div class="timeline-description">', "</div>"];
739
+ var _tmpl$38 = ['<div class="timeline-timestamp">', "</div>"];
740
+ var _tmpl$48 = ['<div class="', '"><div class="timeline-indicator vertical-indicator">', '</div><div class="vertical-connector"></div><div class="timeline-content vertical-content"><div class="timeline-title">', "</div>", "", "</div></div>"];
741
+ var variantClasses3 = {
742
+ default: "",
743
+ success: "timeline-item-success",
744
+ error: "timeline-item-error",
745
+ warning: "timeline-item-warning",
746
+ info: "timeline-item-info"
747
+ };
748
+ function DefaultDot() {
749
+ return ssr(_tmpl$14);
750
+ }
751
+ function Timeline(props) {
752
+ const [local, rest] = splitProps(props, ["items", "class"]);
753
+ const classes = () => {
754
+ const parts = ["timeline"];
755
+ if (local.class) parts.push(local.class);
756
+ return parts.join(" ");
757
+ };
758
+ return ssrElement("div", mergeProps({
759
+ get ["class"]() {
760
+ return classes();
761
+ }
762
+ }, rest), escape(createComponent(For, {
763
+ get each() {
764
+ return local.items;
765
+ },
766
+ children: (item, index) => ssr(_tmpl$48, `timeline-item vertical-connector-item ${escape(variantClasses3[item.variant ?? "default"], true)}`, escape(createComponent(Show, {
767
+ get when() {
768
+ return item.icon;
769
+ },
770
+ get fallback() {
771
+ return createComponent(DefaultDot, {});
772
+ },
773
+ get children() {
774
+ return item.icon;
775
+ }
776
+ })), escape(item.title), escape(createComponent(Show, {
777
+ get when() {
778
+ return item.description;
779
+ },
780
+ get children() {
781
+ return ssr(_tmpl$213, escape(item.description));
782
+ }
783
+ })), escape(createComponent(Show, {
784
+ get when() {
785
+ return item.timestamp;
786
+ },
787
+ get children() {
788
+ return ssr(_tmpl$38, escape(item.timestamp));
789
+ }
790
+ })))
791
+ })), false);
792
+ }
793
+
794
+ export { Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Chevron, Clamp, Collapsible, Dropdown, DropdownDivider, DropdownItem, DropdownMenu, DropdownTrigger, Empty, FormField, Input, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle, Select, Spinner, Stat, Status, Step, Stepper, Tab, TabList, TabPanel, Tabs, Textarea, Timeline, Toggle };