@diniz/webcomponents 1.1.3 → 1.1.4

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,27 +1,27 @@
1
- var x = Object.defineProperty;
2
- var y = (u, s, t) => s in u ? x(u, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : u[s] = t;
3
- var c = (u, s, t) => y(u, typeof s != "symbol" ? s + "" : s, t);
1
+ var $ = Object.defineProperty;
2
+ var A = (l, i, t) => i in l ? $(l, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[i] = t;
3
+ var p = (l, i, t) => A(l, typeof i != "symbol" ? i + "" : i, t);
4
4
  import k from "feather-icons";
5
- function w(u) {
6
- let s = u;
5
+ function E(l) {
6
+ let i = l;
7
7
  const t = /* @__PURE__ */ new Set();
8
8
  return {
9
- get: () => s,
9
+ get: () => i,
10
10
  set: (e) => {
11
- Object.is(s, e) || (s = e, t.forEach((a) => a(s)));
11
+ Object.is(i, e) || (i = e, t.forEach((a) => a(i)));
12
12
  },
13
13
  subscribe: (e) => (t.add(e), () => t.delete(e))
14
14
  };
15
15
  }
16
- class b extends HTMLElement {
16
+ class g extends HTMLElement {
17
17
  constructor() {
18
18
  super();
19
- c(this, "state");
20
- c(this, "signalUnsubs");
19
+ p(this, "state");
20
+ p(this, "signalUnsubs");
21
21
  this.attachShadow({ mode: "open" }), this.state = {}, this.signalUnsubs = /* @__PURE__ */ new Set();
22
22
  }
23
23
  useSignal(t) {
24
- const e = w(t), a = e.subscribe(() => this.render());
24
+ const e = E(t), a = e.subscribe(() => this.render());
25
25
  return this.signalUnsubs.add(a), e;
26
26
  }
27
27
  setState(t) {
@@ -36,61 +36,97 @@ class b extends HTMLElement {
36
36
  render() {
37
37
  }
38
38
  }
39
- const g = ':root{--color-primary: #24ec71;--color-primary-contrast: #ffffff;--color-ink: #0f172a;--color-muted: #f1f5f9;--color-header: #f8fafc;--color-border: #e2e8f0;--color-border-strong: #cbd5f5;--color-nav-bg: #222222;--color-nav-text: #ffffff;--shadow-primary: 0 8px 18px rgba(31, 111, 235, .25);--focus-ring: #9ec5ff;--radius-pill: 999px;--radius-md: 12px;--color-page-bg: #ffffff;--color-page-text: #0f172a}body{background:var(--color-page-bg);color:var(--color-page-text);margin:0;font-family:Segoe UI,system-ui,-apple-system,sans-serif}:host([data-ui="button"]){display:inline-block}:host([data-ui="table"]){display:block}:host([data-ui="layout"]){display:block}:host([data-ui="sidebar"]){display:block}.btn{align-items:center;border:1px solid transparent;border-radius:var(--radius-pill);cursor:pointer;display:inline-flex;font-family:inherit;font-size:.95rem;font-weight:600;gap:.5rem;line-height:1;padding:.65rem 1.2rem;transition:transform .12s ease,box-shadow .12s ease,background-color .12s ease}.btn:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{cursor:not-allowed;opacity:.6}.btn.primary{background:var(--color-primary);color:var(--color-primary-contrast);box-shadow:var(--shadow-primary)}.btn.secondary{background:var(--color-muted);color:var(--color-ink);border-color:var(--color-border-strong)}.btn.ghost{background:transparent;color:var(--color-primary);border-color:var(--color-border-strong)}.btn.danger{background:#ef4444;color:#fff;border-color:#ef4444}.btn-danger:hover{background:#6626dc;border-color:#dc2626}.btn.has-icon{line-height:1.2}.btn .btn-icon{width:18px;height:18px;flex-shrink:0}.btn .btn-icon svg{width:100%;height:100%}.btn.icon-only{padding:.65rem;aspect-ratio:1}.btn.icon-only.sm{padding:.45rem}.btn.icon-only.lg{padding:.8rem}.btn.sm .btn-icon{width:14px;height:14px}.btn.lg .btn-icon{width:22px;height:22px}.btn.sm{font-size:.85rem;padding:.45rem .9rem;box-shadow:0 4px 12px #a7124426}.btn.md{font-size:.95rem;padding:.65rem 1.2rem}.btn.lg{font-size:1.05rem;padding:.8rem 1.5rem}.table-wrap{border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}table{border-collapse:collapse;width:100%}thead{background:var(--color-header)}th,td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid var(--color-border);font-size:.95rem;border-right:1px solid var(--color-border)}tr:last-child td{border-bottom:none}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.actions-cell{display:flex;gap:.5rem;justify-content:center}.app-nav{padding:1rem;background:var(--color-nav-bg);color:var(--color-nav-text)}.app-link{color:var(--color-nav-text);margin-right:1rem;text-decoration:none}.signal-demo,.theme-toggle{margin-top:16px;display:flex;align-items:center;gap:12px}.data-table{margin-top:15px}.dashboard-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:24px;padding:24px}.dashboard-sidebar{background:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:18px}.sidebar-title{margin:0 0 12px;font-size:1rem}.sidebar-nav{display:flex;flex-direction:column;gap:10px}.sidebar-link{color:var(--color-ink);text-decoration:none;font-weight:600}.dashboard-main{display:flex;flex-direction:column;gap:12px}.dashboard-actions{display:flex;flex-wrap:wrap;gap:12px}@media (max-width: 900px){.dashboard-layout{grid-template-columns:1fr}}:host([data-ui="input"]){display:block}.input-wrapper{display:flex;flex-direction:column;gap:.35rem}.input-label{font-size:.9rem;font-weight:600;color:var(--color-ink)}.input-field{padding:.6rem .85rem;font-size:.95rem;font-family:inherit;border:1.5px solid var(--color-border);border-radius:6px;background:var(--color-page-bg);color:var(--color-page-text);transition:border-color .15s ease,box-shadow .15s ease;outline:none}.input-field::placeholder{color:#94a3b8}.input-field:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #24ec7126}.input-field:disabled{background:var(--color-muted);cursor:not-allowed;opacity:.7}.input-wrapper.invalid .input-field{border-color:#ef4444}.input-wrapper.invalid .input-field:focus{box-shadow:0 0 0 3px #ef444426}.input-error{font-size:.8rem;color:#ef4444;display:flex;align-items:center;gap:.25rem}.input-error.hidden{display:none}:host([data-ui="checkbox"]){display:inline-flex;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none}:host([data-ui="checkbox"][disabled]){cursor:not-allowed;opacity:.6}.checkbox-container{display:inline-flex;align-items:center;gap:.75rem}.checkbox-box{position:relative;display:inline-flex;align-items:center;justify-content:center;border:2px solid var(--color-border, #cbd5e1);border-radius:var(--radius-sm, 4px);background:#fff;transition:all .2s;flex-shrink:0;box-sizing:border-box}.checkbox-box.size-sm{min-width:16px;max-width:16px;min-height:16px;max-height:16px}.checkbox-box.size-md{min-width:18px;max-width:18px;min-height:18px;max-height:18px}.checkbox-box.size-lg{min-width:20px;max-width:20px;min-height:20px;max-height:20px}.checkbox-box:hover:not(.disabled){border-color:var(--color-primary, #24ec71)}.checkbox-box.checked,.checkbox-box.indeterminate{background:var(--color-primary, #24ec71);border-color:var(--color-primary, #24ec71)}.checkbox-box.disabled{background:var(--color-muted, #f1f5f9);cursor:not-allowed}.checkbox-icon{display:none;color:#fff;position:absolute}.checkbox-box.checked .checkbox-icon.check,.checkbox-box.indeterminate .checkbox-icon.minus{display:block}.checkbox-icon.check{width:12px;height:12px}.checkbox-icon.minus{width:10px;height:10px}.checkbox-label{font-size:.95rem;color:var(--color-ink, #0f172a);line-height:1.5}.checkbox-container.size-sm .checkbox-label{font-size:.875rem}.checkbox-container.size-lg .checkbox-label{font-size:1rem}input[type=checkbox]{position:absolute;opacity:0;pointer-events:none}.modal-backdrop{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:9999;animation:fadeIn .2s ease-out}.modal-backdrop.open{display:flex;align-items:center;justify-content:center;padding:1rem}.modal-content{background:var(--color-surface, white);border-radius:var(--radius-lg, 16px);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;max-height:90vh;display:flex;flex-direction:column;width:100%;animation:slideUp .2s ease-out}.modal-content.sm{max-width:400px}.modal-content.md{max-width:600px}.modal-content.lg{max-width:800px}.modal-content.xl{max-width:1200px}.modal-content.full{max-width:95vw}.modal-header{padding:1.5rem;border-bottom:1px solid var(--color-border, #e2e8f0);display:flex;align-items:center;justify-content:space-between}.modal-title{font-size:1.25rem;font-weight:600;color:var(--color-ink, #0f172a);margin:0}.modal-close{background:none;border:none;cursor:pointer;padding:.5rem;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md, 8px);color:var(--color-text-muted, #64748b);transition:all .2s}.modal-close:hover{background:var(--color-muted, #f1f5f9);color:var(--color-ink, #0f172a)}.modal-body{padding:1.5rem;overflow-y:auto;flex:1}.modal-footer{padding:1.5rem;border-top:1px solid var(--color-border, #e2e8f0);display:flex;gap:.75rem;justify-content:flex-end}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}:host([data-ui="select"]){display:block;width:90%}.select-container{position:relative;width:100%}.select-label{display:block;margin-bottom:.5rem;font-size:.875rem;font-weight:500;color:var(--color-ink, #0f172a)}.select-trigger{width:100%;padding:.625rem 1rem;background:#fff;border:1px solid var(--color-border, #e2e8f0);border-radius:var(--radius-md, 8px);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s;font-size:.95rem;color:var(--color-ink, #0f172a)}.select-trigger:hover:not(:disabled){border-color:var(--color-primary, #24ec71)}.select-trigger:focus{outline:none;border-color:var(--color-primary, #24ec71);box-shadow:0 0 0 3px #24ec711a}.select-trigger:disabled{background:var(--color-muted, #f1f5f9);cursor:not-allowed;opacity:.6}.select-trigger.open{border-color:var(--color-primary, #24ec71)}.select-placeholder{color:var(--color-text-muted, #94a3b8);flex:1;text-align:left}.select-placeholder.has-selection{color:var(--color-ink, #0f172a)}.select-arrow{display:flex;transition:transform .2s;color:var(--color-text-muted, #64748b)}.select-arrow.open{transform:rotate(180deg)}.select-dropdown{position:absolute;top:calc(100% + .25rem);left:0;right:0;background:#fff;border:1px solid var(--color-border, #e2e8f0);border-radius:var(--radius-md, 8px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;max-height:300px;overflow-y:auto;z-index:1000;display:none;animation:slideDown .15s ease-out}.select-dropdown.open{display:block}.select-search{width:100%;padding:.625rem 1rem;border:none;border-bottom:1px solid var(--color-border, #e2e8f0);font-size:.95rem;outline:none}.select-search:focus{background:var(--color-muted, #f1f5f9)}.select-option{padding:.625rem 1rem;cursor:pointer;transition:background .15s;color:var(--color-ink, #0f172a);font-size:.95rem}.select-option:hover:not(.disabled){background:var(--color-muted, #f1f5f9)}.select-option.selected{background:#24ec711a;color:var(--color-primary, #24ec71);font-weight:500}.select-option.disabled{opacity:.5;cursor:not-allowed}.select-empty{padding:1rem;text-align:center;color:var(--color-text-muted, #94a3b8);font-size:.875rem}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}:host([data-ui="pagination"]){display:block}.pagination-container{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.pagination-info{font-size:.9rem;color:var(--color-ink);opacity:.7}.pagination{display:flex;align-items:center;gap:.25rem}.page-btn{min-width:2.5rem;height:2.5rem;padding:.5rem;border:1px solid var(--color-border);background:#fff;color:var(--color-ink);font-size:.9rem;font-weight:500;border-radius:6px;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.page-btn:hover:not(:disabled):not(.active){background:var(--color-muted);border-color:var(--color-border-strong)}.page-btn:disabled{opacity:.4;cursor:not-allowed}.page-btn.active{background:var(--color-primary);color:var(--color-primary-contrast);border-color:var(--color-primary);font-weight:600}.page-btn.ellipsis{border:none;background:transparent;cursor:default;pointer-events:none}.nav-btn{padding:.5rem .75rem}.nav-btn svg{width:16px;height:16px}:host([data-ui="date-picker"]){display:inline-block;width:100%;max-width:300px}.date-picker-container{position:relative;display:flex;flex-direction:column;gap:.5rem}.date-input-wrapper{position:relative;display:flex;align-items:center;border:1px solid var(--color-border);border-radius:var(--radius-md);background:#fff;transition:all .2s ease}.date-input-wrapper:hover:not(.disabled){border-color:var(--color-border-strong)}.date-input-wrapper:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 3px #24ec711a;outline:none}.date-input-wrapper.disabled{background:var(--color-muted);cursor:not-allowed;opacity:.6}.formatted-input{flex:1;border:none;padding:.75rem 1rem;font-size:.95rem;font-family:inherit;background:transparent;color:var(--color-ink);outline:none}.formatted-input:disabled{cursor:not-allowed;color:var(--color-ink);opacity:.7}.formatted-input::placeholder{color:#94a3b8;opacity:.7}.formatted-input.invalid{color:#dc2626}.hidden-date-input{position:absolute;opacity:0;pointer-events:none;width:0;height:0}.calendar-btn{padding:.5rem;margin-right:.5rem;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-ink);opacity:.6;transition:all .2s ease;border-radius:6px}.calendar-btn:hover:not(:disabled){background:var(--color-muted);opacity:1}.calendar-btn:disabled{cursor:not-allowed;opacity:.3}.calendar-icon{width:20px;height:20px}.format-label{font-size:.75rem;color:var(--color-ink);opacity:.6;padding:0 .25rem;font-weight:500}';
40
- class $ extends b {
39
+ const f = ':root{--color-primary: #24ec71;--color-primary-contrast: #ffffff;--color-ink: #0f172a;--color-muted: #f1f5f9;--color-header: #34a8eb;--color-border: #f3f5f7;--color-border-strong: #cbd5f5;--color-nav-bg: #222222;--color-nav-text: #ffffff;--shadow-primary: 0 8px 18px rgba(31, 111, 235, .25);--focus-ring: #9ec5ff;--radius-pill: 999px;--radius-md: 12px;--color-page-bg: #ffffff;--color-page-text: #0f172a}body{background:var(--color-page-bg);color:var(--color-page-text);margin:0;font-family:Segoe UI,system-ui,-apple-system,sans-serif}:host([data-ui="button"]){display:inline-block}:host([data-ui="table"]){display:block}:host([data-ui="layout"]){display:block}:host([data-ui="sidebar"]){display:block}.btn{align-items:center;border:1px solid transparent;border-radius:var(--radius-pill);cursor:pointer;display:inline-flex;font-family:inherit;font-size:.95rem;font-weight:600;gap:.5rem;line-height:1;padding:.65rem 1.2rem;transition:transform .12s ease,box-shadow .12s ease,background-color .12s ease}.btn:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{cursor:not-allowed;opacity:.6}.btn.primary{background:var(--color-primary);color:var(--color-primary-contrast);box-shadow:var(--shadow-primary)}.btn.secondary{background:var(--color-muted);color:var(--color-ink);border-color:var(--color-border-strong)}.btn.ghost{background:transparent;color:var(--color-primary);border-color:var(--color-border-strong)}.btn.danger{background:#ef4444;color:#fff;border-color:#ef4444}.btn-danger:hover{background:#6626dc;border-color:#dc2626}.btn.has-icon{line-height:1.2}.btn .btn-icon{width:18px;height:18px;flex-shrink:0}.btn .btn-icon svg{width:100%;height:100%}.btn.icon-only{padding:.65rem;aspect-ratio:1}.btn.icon-only.sm{padding:.45rem}.btn.icon-only.lg{padding:.8rem}.btn.sm .btn-icon{width:14px;height:14px}.btn.lg .btn-icon{width:22px;height:22px}.btn.sm{font-size:.85rem;padding:.45rem .9rem;box-shadow:0 4px 12px #a7124426}.btn.md{font-size:.95rem;padding:.65rem 1.2rem}.btn.lg{font-size:1.05rem;padding:.8rem 1.5rem}.table-wrap{border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}table{border-collapse:collapse;width:100%}thead{background:var(--color-header)}th,td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid var(--color-border);font-size:.95rem;border-right:1px solid var(--color-border)}tr:last-child td{border-bottom:none}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.actions-cell{display:flex;gap:.5rem;justify-content:center}.app-nav{padding:1rem;background:var(--color-nav-bg);color:var(--color-nav-text)}.app-link{color:var(--color-nav-text);margin-right:1rem;text-decoration:none}.signal-demo,.theme-toggle{margin-top:16px;display:flex;align-items:center;gap:12px}.data-table{margin-top:15px}.dashboard-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:24px;padding:24px}.dashboard-sidebar{background:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:18px}.sidebar-title{margin:0 0 12px;font-size:1rem}.sidebar-nav{display:flex;flex-direction:column;gap:10px}.sidebar-link{color:var(--color-ink);text-decoration:none;font-weight:600}.dashboard-main{display:flex;flex-direction:column;gap:12px}.dashboard-actions{display:flex;flex-wrap:wrap;gap:12px}@media (max-width: 900px){.dashboard-layout{grid-template-columns:1fr}}:host([data-ui="input"]){display:block}.input-wrapper{display:flex;flex-direction:column;gap:.35rem}.input-label{font-size:.9rem;font-weight:600;color:var(--color-ink)}.input-field{padding:.6rem .85rem;font-size:.95rem;font-family:inherit;border:1.5px solid var(--color-border);border-radius:6px;background:var(--color-page-bg);color:var(--color-page-text);transition:border-color .15s ease,box-shadow .15s ease;outline:none}.input-field::placeholder{color:#94a3b8}.input-field:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #24ec7126}.input-field:disabled{background:var(--color-muted);cursor:not-allowed;opacity:.7}.input-wrapper.invalid .input-field{border-color:#ef4444}.input-wrapper.invalid .input-field:focus{box-shadow:0 0 0 3px #ef444426}.input-error{font-size:.8rem;color:#ef4444;display:flex;align-items:center;gap:.25rem}.input-error.hidden{display:none}:host([data-ui="checkbox"]){display:inline-flex;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none}:host([data-ui="checkbox"][disabled]){cursor:not-allowed;opacity:.6}.checkbox-container{display:inline-flex;align-items:center;gap:.75rem}.checkbox-box{position:relative;display:inline-flex;align-items:center;justify-content:center;border:2px solid var(--color-border, #cbd5e1);border-radius:var(--radius-sm, 4px);background:#fff;transition:all .2s;flex-shrink:0;box-sizing:border-box}.checkbox-box.size-sm{min-width:16px;max-width:16px;min-height:16px;max-height:16px}.checkbox-box.size-md{min-width:18px;max-width:18px;min-height:18px;max-height:18px}.checkbox-box.size-lg{min-width:20px;max-width:20px;min-height:20px;max-height:20px}.checkbox-box:hover:not(.disabled){border-color:var(--color-primary, #24ec71)}.checkbox-box.checked,.checkbox-box.indeterminate{background:var(--color-primary, #24ec71);border-color:var(--color-primary, #24ec71)}.checkbox-box.disabled{background:var(--color-muted, #f1f5f9);cursor:not-allowed}.checkbox-icon{display:none;color:#fff;position:absolute}.checkbox-box.checked .checkbox-icon.check,.checkbox-box.indeterminate .checkbox-icon.minus{display:block}.checkbox-icon.check{width:12px;height:12px}.checkbox-icon.minus{width:10px;height:10px}.checkbox-label{font-size:.95rem;color:var(--color-ink, #0f172a);line-height:1.5}.checkbox-container.size-sm .checkbox-label{font-size:.875rem}.checkbox-container.size-lg .checkbox-label{font-size:1rem}input[type=checkbox]{position:absolute;opacity:0;pointer-events:none}.modal-backdrop{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:9999;animation:fadeIn .2s ease-out}.modal-backdrop.open{display:flex;align-items:center;justify-content:center;padding:1rem}.modal-content{background:var(--color-surface, white);border-radius:var(--radius-lg, 16px);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;max-height:90vh;display:flex;flex-direction:column;width:100%;animation:slideUp .2s ease-out}.modal-content.sm{max-width:400px}.modal-content.md{max-width:600px}.modal-content.lg{max-width:800px}.modal-content.xl{max-width:1200px}.modal-content.full{max-width:95vw}.modal-header{padding:1.5rem;border-bottom:1px solid var(--color-border, #e2e8f0);display:flex;align-items:center;justify-content:space-between}.modal-title{font-size:1.25rem;font-weight:600;color:var(--color-ink, #0f172a);margin:0}.modal-close{background:none;border:none;cursor:pointer;padding:.5rem;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md, 8px);color:var(--color-text-muted, #64748b);transition:all .2s}.modal-close:hover{background:var(--color-muted, #f1f5f9);color:var(--color-ink, #0f172a)}.modal-body{padding:1.5rem;overflow-y:auto;flex:1}.modal-footer{padding:1.5rem;border-top:1px solid var(--color-border, #e2e8f0);display:flex;gap:.75rem;justify-content:flex-end}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}:host([data-ui="select"]){display:block;width:90%}.select-container{position:relative;width:100%}.select-label{display:block;margin-bottom:.5rem;font-size:.875rem;font-weight:500;color:var(--color-ink, #0f172a)}.select-trigger{width:100%;padding:.625rem 1rem;background:#fff;border:1px solid var(--color-border, #e2e8f0);border-radius:var(--radius-md, 8px);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s;font-size:.95rem;color:var(--color-ink, #0f172a)}.select-trigger:hover:not(:disabled){border-color:var(--color-primary, #24ec71)}.select-trigger:focus{outline:none;border-color:var(--color-primary, #24ec71);box-shadow:0 0 0 3px #24ec711a}.select-trigger:disabled{background:var(--color-muted, #f1f5f9);cursor:not-allowed;opacity:.6}.select-trigger.open{border-color:var(--color-primary, #24ec71)}.select-placeholder{color:var(--color-text-muted, #94a3b8);flex:1;text-align:left}.select-placeholder.has-selection{color:var(--color-ink, #0f172a)}.select-arrow{display:flex;transition:transform .2s;color:var(--color-text-muted, #64748b)}.select-arrow.open{transform:rotate(180deg)}.select-dropdown{position:absolute;top:calc(100% + .25rem);left:0;right:0;background:#fff;border:1px solid var(--color-border, #e2e8f0);border-radius:var(--radius-md, 8px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;max-height:300px;overflow-y:auto;z-index:1000;display:none;animation:slideDown .15s ease-out}.select-dropdown.open{display:block}.select-search{width:100%;padding:.625rem 1rem;border:none;border-bottom:1px solid var(--color-border, #e2e8f0);font-size:.95rem;outline:none}.select-search:focus{background:var(--color-muted, #f1f5f9)}.select-option{padding:.625rem 1rem;cursor:pointer;transition:background .15s;color:var(--color-ink, #0f172a);font-size:.95rem}.select-option:hover:not(.disabled){background:var(--color-muted, #f1f5f9)}.select-option.selected{background:#24ec711a;color:var(--color-primary, #24ec71);font-weight:500}.select-option.disabled{opacity:.5;cursor:not-allowed}.select-empty{padding:1rem;text-align:center;color:var(--color-text-muted, #94a3b8);font-size:.875rem}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}:host([data-ui="upload"]){display:block;width:100%}.upload{display:flex;flex-direction:column;gap:.75rem}.upload-label{font-size:.9rem;font-weight:700;color:var(--color-ink)}.upload-drop{border:1.5px dashed rgba(36,236,113,.55);border-radius:16px;background:linear-gradient(135deg,#24ec7114,#34a8eb14);padding:1.25rem 1.5rem;position:relative;transition:border-color .2s ease,box-shadow .2s ease,transform .2s ease}.upload-drop.dragging{border-color:var(--color-primary);box-shadow:0 16px 30px #24ec712e;transform:translateY(-2px)}.upload-drop.disabled{opacity:.6;cursor:not-allowed}.upload-input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer}.upload-content{display:grid;grid-template-columns:auto 1fr auto;gap:1rem;align-items:center}.upload-icon{width:46px;height:46px;border-radius:14px;display:grid;place-items:center;background:#0f172a;color:#fff;box-shadow:0 12px 20px #0f172a2e}.upload-icon svg{width:20px;height:20px}.upload-title{font-weight:700;color:var(--color-ink)}.upload-sub{font-size:.85rem;color:var(--color-text-muted, #64748b);margin-top:.2rem}.upload-btn{border:none;border-radius:999px;padding:.45rem 1rem;font-size:.85rem;font-weight:700;background:#0f172a;color:#fff;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}.upload-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 16px #0f172a2e}.upload-btn:disabled{cursor:not-allowed;opacity:.5}.upload-helper{font-size:.85rem;color:var(--color-text-muted, #64748b)}.upload-list{list-style:none;padding:0;margin:0;display:grid;gap:.5rem}.upload-list li{display:grid;grid-template-columns:1fr auto auto;gap:.75rem;align-items:center;padding:.6rem .75rem;border-radius:12px;background:#fff;border:1px solid rgba(148,163,184,.35);font-size:.9rem;color:var(--color-ink)}.upload-meta{font-size:.78rem;color:var(--color-text-muted, #64748b)}.upload-remove{border:none;background:#ef44441a;color:#b91c1c;padding:.25rem .65rem;border-radius:999px;font-size:.75rem;font-weight:600;cursor:pointer}.upload-remove:hover{background:#ef444433}:host([data-ui="pagination"]){display:block}.pagination-container{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.pagination-info{font-size:.9rem;color:var(--color-ink);opacity:.7}.pagination{display:flex;align-items:center;gap:.25rem}.page-btn{min-width:2.5rem;height:2.5rem;padding:.5rem;border:1px solid var(--color-border);background:#fff;color:var(--color-ink);font-size:.9rem;font-weight:500;border-radius:6px;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.page-btn:hover:not(:disabled):not(.active){background:var(--color-muted);border-color:var(--color-border-strong)}.page-btn:disabled{opacity:.4;cursor:not-allowed}.page-btn.active{background:var(--color-primary);color:var(--color-primary-contrast);border-color:var(--color-primary);font-weight:600}.page-btn.ellipsis{border:none;background:transparent;cursor:default;pointer-events:none}.nav-btn{padding:.5rem .75rem}.nav-btn svg{width:16px;height:16px}:host([data-ui="stepper"]){display:block}.stepper-wrap{width:100%}.stepper-empty{padding:1rem;border:1px dashed var(--color-border);border-radius:var(--radius-md);color:var(--color-text-muted, #64748b);text-align:center;font-size:.9rem}.stepper{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:1.25rem}.stepper.vertical{flex-direction:column;gap:1rem}.step{display:flex;align-items:center;position:relative}.stepper.vertical .step{flex-direction:column;align-items:flex-start}.step-trigger{display:flex;align-items:center;gap:.75rem;background:transparent;border:none;padding:0;cursor:pointer;text-align:left;font-family:inherit;color:var(--color-ink)}.step-trigger:disabled{cursor:not-allowed;opacity:.5}.step-node{width:2.1rem;height:2.1rem;border-radius:12px;background:var(--color-muted);border:1px solid var(--color-border-strong);display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:.9rem;color:var(--color-ink);box-shadow:inset 0 0 0 1px #fff9}.step-text{display:flex;flex-direction:column;gap:.2rem}.step-title{font-weight:700;letter-spacing:.2px;font-size:.98rem}.step-desc{font-size:.85rem;color:var(--color-text-muted, #64748b)}.step-connector{width:48px;height:2px;margin:0 .65rem;background:linear-gradient(90deg,var(--color-border),rgba(255,255,255,0));flex-shrink:0}.stepper.vertical .step-connector{width:2px;height:28px;margin:.65rem 0 .25rem 1.05rem;background:linear-gradient(180deg,var(--color-border),rgba(255,255,255,0))}.step.complete .step-node{background:linear-gradient(135deg,#24ec71,#34a8eb);color:#0f172a;border-color:transparent;box-shadow:0 8px 18px #24ec7140}.step.complete .step-connector{background:linear-gradient(90deg,#24ec71,#34a8eb)}.stepper.vertical .step.complete .step-connector{background:linear-gradient(180deg,#24ec71,#34a8eb)}.step.active .step-node{background:#fff;color:var(--color-ink);border-color:var(--color-primary);box-shadow:0 0 0 4px #24ec712e,0 12px 20px #24ec7138;animation:stepGlow 1.6s ease-in-out infinite}.step.active .step-title{color:var(--color-ink)}.step.upcoming .step-title{color:var(--color-ink);opacity:.7}.step.error .step-node{background:#fee2e2;border-color:#f87171;color:#991b1b;box-shadow:0 8px 16px #ef444433}.step.warning .step-node{background:#fef3c7;border-color:#f59e0b;color:#92400e;box-shadow:0 8px 16px #f59e0b33}.stepper.sm .step-node{width:1.65rem;height:1.65rem;font-size:.75rem;border-radius:10px}.stepper.sm .step-title{font-size:.9rem}.stepper.sm .step-desc{font-size:.78rem}.stepper.lg .step-node{width:2.6rem;height:2.6rem;font-size:1.05rem;border-radius:14px}.stepper.lg .step-title{font-size:1.1rem}.stepper.lg .step-desc{font-size:.92rem}@keyframes stepGlow{0%,to{transform:translateY(0)}50%{transform:translateY(-2px)}}:host([data-ui="date-picker"]){display:block;width:100%}.date-picker-label{display:block;font-size:.9rem;font-weight:500;color:var(--color-ink);margin-bottom:.5rem}.date-picker-container{position:relative;display:flex;flex-direction:column;gap:.5rem}.date-input-wrapper{position:relative;display:flex;align-items:center;border:1px solid var(--color-border);border-radius:var(--radius-md);background:#fff;transition:all .2s ease}.date-input-wrapper:hover:not(.disabled){border-color:var(--color-border-strong)}.date-input-wrapper:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 3px #24ec711a;outline:none}.date-input-wrapper.disabled{background:var(--color-muted);cursor:not-allowed;opacity:.6}.formatted-input{flex:1;border:none;padding:.75rem 1rem;font-size:.95rem;font-family:inherit;background:transparent;color:var(--color-ink);outline:none}.formatted-input:disabled{cursor:not-allowed;color:var(--color-ink);opacity:.7}.formatted-input::placeholder{color:#94a3b8;opacity:.7}.formatted-input.invalid{color:#dc2626}.hidden-date-input{position:absolute;opacity:0;width:100%;height:100%;top:0;left:0;pointer-events:none;cursor:pointer}.calendar-btn{padding:.5rem;margin-right:.5rem;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-ink);opacity:.6;transition:all .2s ease;border-radius:6px}.calendar-btn:hover:not(:disabled){background:var(--color-muted);opacity:1}.calendar-btn:disabled{cursor:not-allowed;opacity:.3}.calendar-icon{width:20px;height:20px}.format-label{font-size:.75rem;color:var(--color-ink);opacity:.6;padding:0 .25rem;font-weight:500}#ui-datepicker-div,.datepicker,.react-datepicker-popper{z-index:99999!important}';
40
+ class C extends g {
41
41
  connectedCallback() {
42
- this.setAttribute("data-ui", "button"), super.connectedCallback();
42
+ this.setAttribute("data-ui", "button"), super.connectedCallback(), this.attachClickHandler();
43
43
  }
44
44
  static get observedAttributes() {
45
45
  return ["variant", "size", "disabled", "type", "icon", "icon-position"];
46
46
  }
47
47
  attributeChangedCallback() {
48
- this.render();
48
+ this.render(), this.attachClickHandler();
49
+ }
50
+ attachClickHandler() {
51
+ if (!this.shadowRoot) return;
52
+ const i = this.shadowRoot.querySelector("button");
53
+ if (!i) return;
54
+ const t = i._clickHandler;
55
+ t && i.removeEventListener("click", t);
56
+ const e = (a) => {
57
+ const s = this.getType();
58
+ if (this.hasAttribute("disabled")) {
59
+ a.preventDefault(), a.stopPropagation();
60
+ return;
61
+ }
62
+ if (s === "submit") {
63
+ a.preventDefault(), a.stopPropagation();
64
+ let r = this.closest("form");
65
+ if (!r) {
66
+ let o = this.parentElement;
67
+ for (; o; ) {
68
+ if (o.tagName === "FORM") {
69
+ r = o;
70
+ break;
71
+ }
72
+ o = o.parentElement;
73
+ }
74
+ }
75
+ if (r) {
76
+ const o = new Event("submit", {
77
+ bubbles: !0,
78
+ cancelable: !0
79
+ });
80
+ r.dispatchEvent(o);
81
+ }
82
+ }
83
+ };
84
+ i._clickHandler = e, i.addEventListener("click", e);
49
85
  }
50
86
  getVariant() {
51
- const s = this.getAttribute("variant");
52
- return s === "secondary" || s === "ghost" || s === "danger" ? s : "primary";
87
+ const i = this.getAttribute("variant");
88
+ return i === "secondary" || i === "ghost" || i === "danger" ? i : "primary";
53
89
  }
54
90
  getSize() {
55
- const s = this.getAttribute("size");
56
- return s === "sm" || s === "lg" ? s : "md";
91
+ const i = this.getAttribute("size");
92
+ return i === "sm" || i === "lg" ? i : "md";
57
93
  }
58
94
  getType() {
59
95
  return this.getAttribute("type") ?? "button";
60
96
  }
61
97
  getIcon() {
62
98
  var a;
63
- const s = this.getAttribute("icon");
64
- if (!s) return null;
65
- const t = s.trim();
99
+ const i = this.getAttribute("icon");
100
+ if (!i) return null;
101
+ const t = i.trim();
66
102
  return { html: `<span class="btn-icon">${((a = k.icons[t]) == null ? void 0 : a.toSvg()) || ""}</span>`, name: t };
67
103
  }
68
104
  getIconPosition() {
69
105
  return this.getAttribute("icon-position") === "right" ? "right" : "left";
70
106
  }
71
107
  render() {
72
- const s = this.getVariant(), t = this.getSize(), e = this.hasAttribute("disabled"), a = this.getType(), i = this.getIcon(), r = this.getIconPosition(), o = i !== null, n = i ? i.html : "", l = this.innerHTML.trim(), h = o && !l;
73
- let p;
74
- o && l ? p = r === "left" ? `${n}<span>${l}</span>` : `<span>${l}</span>${n}` : o ? p = n : p = l, this.shadowRoot.innerHTML = `
75
- <style>${g}</style>
108
+ const i = this.getVariant(), t = this.getSize(), e = this.hasAttribute("disabled"), a = this.getType(), s = this.getIcon(), n = this.getIconPosition(), r = s !== null, o = s ? s.html : "", d = this.innerHTML.trim(), c = r && !d;
109
+ let h;
110
+ r && d ? h = n === "left" ? `${o}<span>${d}</span>` : `<span>${d}</span>${o}` : r ? h = o : h = d, this.shadowRoot.innerHTML = `
111
+ <style>${f}</style>
76
112
  <button
77
113
  part="button"
78
- class="btn ${s} ${t}${o ? " has-icon" : ""}${h ? " icon-only" : ""}"
114
+ class="btn ${i} ${t}${r ? " has-icon" : ""}${c ? " icon-only" : ""}"
79
115
  type="${a}"
80
116
  ${e ? "disabled" : ""}
81
117
  >
82
- ${p}
118
+ ${h}
83
119
  </button>
84
120
  `;
85
121
  }
86
122
  }
87
- customElements.define("ui-button", $);
88
- class A extends b {
123
+ customElements.define("ui-button", C);
124
+ class S extends g {
89
125
  constructor() {
90
126
  super();
91
- c(this, "inputEl", null);
92
- c(this, "customValidator", null);
93
- c(this, "validationRule", null);
127
+ p(this, "inputEl", null);
128
+ p(this, "customValidator", null);
129
+ p(this, "validationRule", null);
94
130
  this.state = {
95
131
  value: "",
96
132
  valid: !0,
@@ -212,39 +248,39 @@ class A extends b {
212
248
  return this.hasAttribute("type") || this.hasAttribute("label") || this.hasAttribute("placeholder") || this.hasAttribute("required") || this.hasAttribute("pattern") || this.hasAttribute("disabled") || this.hasAttribute("name") || this.hasAttribute("minlength") || this.hasAttribute("maxlength") || this.hasAttribute("min") || this.hasAttribute("max") || this.hasAttribute("error-message") || this.hasAttribute("custom-error") || this.hasAttribute("validate");
213
249
  }
214
250
  render() {
215
- const t = this.getType(), e = this.getLabel(), a = this.getPlaceholder(), i = this.getName(), r = this.getErrorMessage(), o = this.hasAttribute("required"), n = this.getAttribute("pattern"), l = this.getAttribute("minlength"), h = this.getAttribute("maxlength"), p = this.getAttribute("min"), d = this.getAttribute("max"), m = this.hasAttribute("disabled"), f = !this.state.valid && this.state.touched, v = e !== "";
251
+ const t = this.getType(), e = this.getLabel(), a = this.getPlaceholder(), s = this.getName(), n = this.getErrorMessage(), r = this.hasAttribute("required"), o = this.getAttribute("pattern"), d = this.getAttribute("minlength"), c = this.getAttribute("maxlength"), h = this.getAttribute("min"), u = this.getAttribute("max"), b = this.hasAttribute("disabled"), m = !this.state.valid && this.state.touched, v = e !== "";
216
252
  this.shadowRoot.innerHTML = `
217
- <style>${g}</style>
218
- <div class="input-wrapper${f ? " invalid" : ""}${m ? " disabled" : ""}">
219
- ${v ? `<label class="input-label">${e}${o ? " *" : ""}</label>` : ""}
253
+ <style>${f}</style>
254
+ <div class="input-wrapper${m ? " invalid" : ""}${b ? " disabled" : ""}">
255
+ ${v ? `<label class="input-label">${e}${r ? " *" : ""}</label>` : ""}
220
256
  <input
221
257
  part="input"
222
258
  class="input-field"
223
259
  type="${t}"
224
260
  placeholder="${a}"
225
- name="${i}"
261
+ name="${s}"
226
262
  .value="${this.state.value}"
227
- ${o ? "required" : ""}
228
- ${n ? `pattern="${n}"` : ""}
229
- ${l ? `minlength="${l}"` : ""}
230
- ${h ? `maxlength="${h}"` : ""}
231
- ${p ? `min="${p}"` : ""}
232
- ${d ? `max="${d}"` : ""}
233
- ${m ? "disabled" : ""}
234
- aria-invalid="${f}"
235
- aria-describedby="${i}-error"
263
+ ${r ? "required" : ""}
264
+ ${o ? `pattern="${o}"` : ""}
265
+ ${d ? `minlength="${d}"` : ""}
266
+ ${c ? `maxlength="${c}"` : ""}
267
+ ${h ? `min="${h}"` : ""}
268
+ ${u ? `max="${u}"` : ""}
269
+ ${b ? "disabled" : ""}
270
+ aria-invalid="${m}"
271
+ aria-describedby="${s}-error"
236
272
  />
237
- <span class="input-error${f && r ? "" : " hidden"}" id="${i}-error" role="alert">${r}</span>
273
+ <span class="input-error${m && n ? "" : " hidden"}" id="${s}-error" role="alert">${n}</span>
238
274
  </div>
239
275
  `, this.inputEl = this.shadowRoot.querySelector(".input-field"), this.inputEl && (this.inputEl.addEventListener("input", this.handleInput.bind(this)), this.inputEl.addEventListener("blur", this.handleBlur.bind(this)));
240
276
  }
241
277
  }
242
- customElements.define("ui-input", A);
243
- class E extends b {
278
+ customElements.define("ui-input", S);
279
+ class z extends g {
244
280
  constructor() {
245
281
  super(...arguments);
246
- c(this, "columns", []);
247
- c(this, "rows", []);
282
+ p(this, "columns", []);
283
+ p(this, "rows", []);
248
284
  }
249
285
  connectedCallback() {
250
286
  this.setAttribute("data-ui", "table"), super.connectedCallback();
@@ -256,52 +292,69 @@ class E extends b {
256
292
  return { columns: this.columns, rows: this.rows };
257
293
  }
258
294
  render() {
259
- const t = this.columns.filter((i) => i.visible !== !1), e = t.map(
260
- (i) => `<th class="align-${i.align ?? "left"}">${i.label}</th>`
295
+ const t = this.columns.filter((s) => s.visible !== !1), e = t.map(
296
+ (s) => `<th class="align-${s.align ?? "left"}">${s.label}</th>`
261
297
  ).join(""), a = this.rows.map(
262
- (i, r) => `<tr data-row-index="${r}">${t.map(
263
- (o) => o.actions ? `<td class="align-center actions-cell">
264
- ${o.actions.edit ? `<ui-button variant="primary" class='action-btn' icon='edit' size="sm" data-action="edit" data-row-index="${r}">Edit</ui-button>` : ""}
265
- ${o.actions.delete ? `<ui-button variant="danger" class='action-btn' icon='trash' size="sm" data-action="delete" data-row-index="${r}">Delete</ui-button>` : ""}
266
- </td>` : `<td class="align-${o.align ?? "left"}">${String(
267
- i[o.key] ?? ""
298
+ (s, n) => `<tr data-row-index="${n}">${t.map(
299
+ (r) => r.actions ? `<td class="align-center actions-cell">
300
+ ${r.actions.edit ? `<ui-button variant="primary" class='action-btn' icon='edit' size="sm" data-action="edit" data-row-index="${n}">Edit</ui-button>` : ""}
301
+ ${r.actions.delete ? `<ui-button variant="danger" class='action-btn' icon='trash' size="sm" data-action="delete" data-row-index="${n}">Delete</ui-button>` : ""}
302
+ </td>` : `<td class="align-${r.align ?? "left"}">${String(
303
+ s[r.key] ?? ""
268
304
  )}</td>`
269
305
  ).join("")}</tr>`
270
306
  ).join("");
271
307
  this.shadowRoot.innerHTML = `
272
- <style>${g}</style>
308
+ <style>${f}</style>
273
309
  <div class="table-wrap">
274
310
  <table>
275
311
  <thead><tr>${e}</tr></thead>
276
312
  <tbody>${a}</tbody>
277
313
  </table>
278
314
  </div>
279
- `, this.shadowRoot.querySelectorAll(".action-btn").forEach((i) => {
280
- i.addEventListener("click", (r) => {
281
- const o = r.currentTarget, n = o.dataset.action, l = parseInt(o.dataset.rowIndex || "0", 10), h = n === "edit" ? "edit-action" : "delete-action";
282
- this.dispatchEvent(new CustomEvent(h, {
315
+ `, this.shadowRoot.querySelectorAll(".action-btn").forEach((s) => {
316
+ s.addEventListener("click", (n) => {
317
+ const r = n.currentTarget, o = r.dataset.action, d = parseInt(r.dataset.rowIndex || "0", 10), c = o === "edit" ? "edit-action" : "delete-action";
318
+ this.dispatchEvent(new CustomEvent(c, {
283
319
  bubbles: !0,
284
320
  composed: !0,
285
- detail: { row: this.rows[l], rowIndex: l }
321
+ detail: { row: this.rows[d], rowIndex: d }
286
322
  }));
287
323
  });
288
324
  });
289
325
  }
290
326
  }
291
- customElements.define("ui-table", E);
292
- class C extends b {
327
+ customElements.define("ui-table", z);
328
+ class L extends g {
293
329
  constructor() {
294
330
  super(...arguments);
295
- c(this, "inputElement", null);
331
+ p(this, "inputElement", null);
332
+ p(this, "isConnected", !1);
333
+ p(this, "isInternalUpdate", !1);
334
+ p(this, "hasRendered", !1);
296
335
  }
297
336
  connectedCallback() {
298
- this.setAttribute("data-ui", "date-picker"), super.connectedCallback(), this.attachEventListeners();
337
+ this.setAttribute("data-ui", "date-picker"), super.connectedCallback(), this.isConnected = !0;
299
338
  }
300
339
  static get observedAttributes() {
301
- return ["value", "format", "min", "max", "disabled", "placeholder"];
340
+ return ["value", "format", "min", "max", "disabled", "placeholder", "label"];
302
341
  }
303
- attributeChangedCallback() {
304
- this.render(), this.attachEventListeners();
342
+ attributeChangedCallback(t, e, a) {
343
+ if (!(!this.isConnected || e === a)) {
344
+ if (this.isInternalUpdate && t === "value") {
345
+ this.isInternalUpdate = !1;
346
+ return;
347
+ }
348
+ t === "value" ? this.updateInputValues() : this.render();
349
+ }
350
+ }
351
+ updateInputValues() {
352
+ if (!this.shadowRoot) return;
353
+ const t = this.shadowRoot.querySelector(".formatted-input"), e = this.shadowRoot.querySelector('input[type="date"]');
354
+ if (t && e) {
355
+ const a = this.getValue(), s = this.getFormat(), n = this.formatDate(a, s);
356
+ t.value = n, e.value = a;
357
+ }
305
358
  }
306
359
  getFormat() {
307
360
  const t = this.getAttribute("format");
@@ -319,6 +372,9 @@ class C extends b {
319
372
  getPlaceholder() {
320
373
  return this.getAttribute("placeholder") || this.getFormat();
321
374
  }
375
+ getLabel() {
376
+ return this.getAttribute("label") || "";
377
+ }
322
378
  isDisabled() {
323
379
  return this.hasAttribute("disabled");
324
380
  }
@@ -329,16 +385,16 @@ class C extends b {
329
385
  if (!t) return "";
330
386
  const a = t.split("-");
331
387
  if (a.length !== 3) return t;
332
- const [i, r, o] = a;
388
+ const [s, n, r] = a;
333
389
  switch (e) {
334
390
  case "DD/MM/YYYY":
335
- return `${o}/${r}/${i}`;
391
+ return `${r}/${n}/${s}`;
336
392
  case "MM/DD/YYYY":
337
- return `${r}/${o}/${i}`;
393
+ return `${n}/${r}/${s}`;
338
394
  case "DD-MM-YYYY":
339
- return `${o}-${r}-${i}`;
395
+ return `${r}-${n}-${s}`;
340
396
  case "MM-DD-YYYY":
341
- return `${r}-${o}-${i}`;
397
+ return `${n}-${r}-${s}`;
342
398
  case "YYYY-MM-DD":
343
399
  default:
344
400
  return t;
@@ -349,46 +405,54 @@ class C extends b {
349
405
  */
350
406
  parseDate(t, e) {
351
407
  if (!t) return "";
352
- let a, i, r, o;
408
+ let a, s, n, r;
353
409
  switch (e) {
354
410
  case "DD/MM/YYYY":
355
411
  if (a = t.split("/"), a.length !== 3) return "";
356
- [o, r, i] = a;
412
+ [r, n, s] = a;
357
413
  break;
358
414
  case "MM/DD/YYYY":
359
415
  if (a = t.split("/"), a.length !== 3) return "";
360
- [r, o, i] = a;
416
+ [n, r, s] = a;
361
417
  break;
362
418
  case "DD-MM-YYYY":
363
419
  if (a = t.split("-"), a.length !== 3) return "";
364
- [o, r, i] = a;
420
+ [r, n, s] = a;
365
421
  break;
366
422
  case "MM-DD-YYYY":
367
423
  if (a = t.split("-"), a.length !== 3) return "";
368
- [r, o, i] = a;
424
+ [n, r, s] = a;
369
425
  break;
370
426
  case "YYYY-MM-DD":
371
427
  default:
372
428
  return t;
373
429
  }
374
- return r = r.padStart(2, "0"), o = o.padStart(2, "0"), `${i}-${r}-${o}`;
430
+ return n = n.padStart(2, "0"), r = r.padStart(2, "0"), `${s}-${n}-${r}`;
375
431
  }
376
432
  attachEventListeners() {
377
433
  if (!this.shadowRoot) return;
378
434
  const t = this.shadowRoot.querySelector(".formatted-input"), e = this.shadowRoot.querySelector('input[type="date"]'), a = this.shadowRoot.querySelector(".calendar-btn");
379
435
  if (!t || !e) return;
380
- const i = () => {
381
- const r = t.value, o = this.getFormat(), n = this.parseDate(r, o);
382
- this.isValidDate(n) ? (e.value = n, t.classList.remove("invalid"), this.dispatchDateChange(n)) : r === "" ? (e.value = "", t.classList.remove("invalid"), this.dispatchDateChange("")) : t.classList.add("invalid");
436
+ const s = () => {
437
+ const n = t.value, r = this.getFormat(), o = this.parseDate(n, r);
438
+ this.isValidDate(o) ? (e.value = o, t.classList.remove("invalid"), this.dispatchDateChange(o)) : n === "" ? (e.value = "", t.classList.remove("invalid"), this.dispatchDateChange("")) : t.classList.add("invalid");
383
439
  };
384
- t.addEventListener("blur", i), t.addEventListener("keydown", (r) => {
385
- r.key === "Enter" && (i(), t.blur());
386
- }), e.addEventListener("change", (r) => {
387
- const n = r.target.value, l = this.getFormat(), h = this.formatDate(n, l);
388
- t.value = h, t.classList.remove("invalid"), this.dispatchDateChange(n);
389
- }), a && a.addEventListener("click", () => {
390
- var r;
391
- (r = e.showPicker) == null || r.call(e);
440
+ t.addEventListener("blur", s), t.addEventListener("keydown", (n) => {
441
+ n.key === "Enter" && (s(), t.blur());
442
+ }), e.addEventListener("change", (n) => {
443
+ const o = n.target.value, d = this.getFormat(), c = this.formatDate(o, d);
444
+ t.value = c, t.classList.remove("invalid"), this.dispatchDateChange(o);
445
+ }), a && a.addEventListener("click", async (n) => {
446
+ n.preventDefault(), n.stopPropagation(), e.style.pointerEvents = "auto";
447
+ try {
448
+ typeof e.showPicker == "function" ? e.showPicker() : (e.focus(), e.click());
449
+ } catch (r) {
450
+ console.log("Date picker error:", r), e.focus(), e.click();
451
+ } finally {
452
+ setTimeout(() => {
453
+ e.style.pointerEvents = "none";
454
+ }, 100);
455
+ }
392
456
  });
393
457
  }
394
458
  isValidDate(t) {
@@ -408,7 +472,7 @@ class C extends b {
408
472
  bubbles: !0,
409
473
  composed: !0
410
474
  })
411
- ), this.setAttribute("value", t);
475
+ ), this.isInternalUpdate = !0, this.setAttribute("value", t);
412
476
  }
413
477
  /**
414
478
  * Get the current value in ISO format (YYYY-MM-DD)
@@ -436,23 +500,24 @@ class C extends b {
436
500
  this.setAttribute("value", "");
437
501
  }
438
502
  render() {
439
- const t = this.getValue(), e = this.getFormat(), a = this.getMin(), i = this.getMax(), r = this.isDisabled(), o = this.getPlaceholder(), n = this.formatDate(t, e);
503
+ const t = this.getValue(), e = this.getFormat(), a = this.getMin(), s = this.getMax(), n = this.isDisabled(), r = this.getPlaceholder(), o = this.getLabel(), d = this.formatDate(t, e), c = o !== "";
440
504
  this.shadowRoot.innerHTML = `
441
- <style>${g}</style>
505
+ <style>${f}</style>
442
506
  <div class="date-picker-container">
443
- <div class="date-input-wrapper ${r ? "disabled" : ""}">
507
+ ${c ? `<label class="date-picker-label">${o}</label>` : ""}
508
+ <div class="date-input-wrapper ${n ? "disabled" : ""}">
444
509
  <input
445
510
  type="text"
446
511
  class="formatted-input"
447
512
  part="input"
448
- value="${n}"
449
- placeholder="${o}"
450
- ${r ? "disabled" : ""}
513
+ value="${d}"
514
+ placeholder="${r}"
515
+ ${n ? "disabled" : ""}
451
516
  />
452
517
  <button
453
518
  class="calendar-btn"
454
519
  type="button"
455
- ${r ? "disabled" : ""}
520
+ ${n ? "disabled" : ""}
456
521
  title="Open calendar"
457
522
  >
458
523
  <svg class="calendar-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -464,22 +529,22 @@ class C extends b {
464
529
  class="hidden-date-input"
465
530
  value="${t}"
466
531
  ${a ? `min="${a}"` : ""}
467
- ${i ? `max="${i}"` : ""}
468
- ${r ? "disabled" : ""}
532
+ ${s ? `max="${s}"` : ""}
533
+ ${n ? "disabled" : ""}
469
534
  />
470
535
  </div>
471
536
  <div class="format-label">Format: ${e}</div>
472
537
  </div>
473
- `;
538
+ `, this.attachEventListeners(), this.hasRendered = !0;
474
539
  }
475
540
  }
476
- customElements.define("ui-date-picker", C);
477
- class S extends b {
541
+ customElements.define("ui-date-picker", L);
542
+ class I extends g {
478
543
  constructor() {
479
544
  super(...arguments);
480
- c(this, "_total", 0);
481
- c(this, "_currentPage", 1);
482
- c(this, "_pageSize", 10);
545
+ p(this, "_total", 0);
546
+ p(this, "_currentPage", 1);
547
+ p(this, "_pageSize", 10);
483
548
  }
484
549
  connectedCallback() {
485
550
  this.setAttribute("data-ui", "pagination"), super.connectedCallback();
@@ -539,17 +604,17 @@ class S extends b {
539
604
  getPageNumbers() {
540
605
  const t = this.totalPages, e = this._currentPage;
541
606
  if (t <= 7)
542
- return Array.from({ length: t }, (i, r) => r + 1);
607
+ return Array.from({ length: t }, (s, n) => n + 1);
543
608
  const a = [];
544
609
  return e <= 3 ? a.push(1, 2, 3, 4, "...", t) : e >= t - 2 ? a.push(1, "...", t - 3, t - 2, t - 1, t) : a.push(1, "...", e - 1, e, e + 1, "...", t), a;
545
610
  }
546
611
  render() {
547
- const t = this.totalPages, e = this._currentPage, a = this.getPageNumbers(), i = (e - 1) * this._pageSize + 1, r = Math.min(e * this._pageSize, this._total);
612
+ const t = this.totalPages, e = this._currentPage, a = this.getPageNumbers(), s = (e - 1) * this._pageSize + 1, n = Math.min(e * this._pageSize, this._total);
548
613
  this.shadowRoot.innerHTML = `
549
- <style>${g}</style>
614
+ <style>${f}</style>
550
615
  <div class="pagination-container">
551
616
  <div class="pagination-info">
552
- ${this._total > 0 ? `Showing ${i} to ${r} of ${this._total}` : "No results"}
617
+ ${this._total > 0 ? `Showing ${s} to ${n} of ${this._total}` : "No results"}
553
618
  </div>
554
619
  ${t > 1 ? `
555
620
  <nav class="pagination" role="navigation" aria-label="Pagination">
@@ -563,14 +628,14 @@ class S extends b {
563
628
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"/>
564
629
  </svg>
565
630
  </button>
566
- ${a.map((o) => o === "..." ? '<button class="page-btn ellipsis" disabled>...</button>' : `
631
+ ${a.map((r) => r === "..." ? '<button class="page-btn ellipsis" disabled>...</button>' : `
567
632
  <button
568
- class="page-btn ${o === e ? "active" : ""}"
569
- data-page="${o}"
570
- aria-label="Page ${o}"
571
- ${o === e ? 'aria-current="page"' : ""}
633
+ class="page-btn ${r === e ? "active" : ""}"
634
+ data-page="${r}"
635
+ aria-label="Page ${r}"
636
+ ${r === e ? 'aria-current="page"' : ""}
572
637
  >
573
- ${o}
638
+ ${r}
574
639
  </button>
575
640
  `).join("")}
576
641
  <button
@@ -592,23 +657,23 @@ class S extends b {
592
657
  this.shadowRoot && this.shadowRoot.addEventListener("click", (t) => {
593
658
  const a = t.target.closest(".page-btn");
594
659
  if (!a || a.disabled) return;
595
- const i = a.dataset.page;
596
- if (i === "prev")
660
+ const s = a.dataset.page;
661
+ if (s === "prev")
597
662
  this.handlePageChange(this._currentPage - 1);
598
- else if (i === "next")
663
+ else if (s === "next")
599
664
  this.handlePageChange(this._currentPage + 1);
600
- else if (i) {
601
- const r = parseInt(i, 10);
602
- isNaN(r) || this.handlePageChange(r);
665
+ else if (s) {
666
+ const n = parseInt(s, 10);
667
+ isNaN(n) || this.handlePageChange(n);
603
668
  }
604
669
  });
605
670
  }
606
671
  }
607
- customElements.define("ui-pagination", S);
608
- class L extends b {
672
+ customElements.define("ui-pagination", I);
673
+ class M extends g {
609
674
  constructor() {
610
675
  super(...arguments);
611
- c(this, "isOpen", this.useSignal(!1));
676
+ p(this, "isOpen", this.useSignal(!1));
612
677
  }
613
678
  connectedCallback() {
614
679
  this.setAttribute("data-ui", "modal"), super.connectedCallback(), this.setupEventListeners();
@@ -637,7 +702,7 @@ class L extends b {
637
702
  const t = this.isOpen.get(), e = this.getAttribute("title") || "", a = this.getAttribute("size") || "md";
638
703
  this.shadowRoot.innerHTML = `
639
704
  <style>
640
- ${g}
705
+ ${f}
641
706
 
642
707
  ::slotted([slot="footer"]) {
643
708
  display: flex;
@@ -648,7 +713,7 @@ class L extends b {
648
713
  </style>
649
714
 
650
715
  <div class="modal-backdrop ${t ? "open" : ""}" part="backdrop">
651
- <div class="modal-content ${a}" part="content" @click="${(o) => o.stopPropagation()}">
716
+ <div class="modal-content ${a}" part="content" @click="${(r) => r.stopPropagation()}">
652
717
  ${e ? `
653
718
  <div class="modal-header" part="header">
654
719
  <h2 class="modal-title">${e}</h2>
@@ -671,18 +736,18 @@ class L extends b {
671
736
  </div>
672
737
  </div>
673
738
  `;
674
- const i = this.shadowRoot.querySelector(".modal-backdrop"), r = this.shadowRoot.querySelector(".modal-close");
675
- i == null || i.addEventListener("click", (o) => this.handleBackdropClick(o)), r == null || r.addEventListener("click", () => this.close());
739
+ const s = this.shadowRoot.querySelector(".modal-backdrop"), n = this.shadowRoot.querySelector(".modal-close");
740
+ s == null || s.addEventListener("click", (r) => this.handleBackdropClick(r)), n == null || n.addEventListener("click", () => this.close());
676
741
  }
677
742
  }
678
- customElements.define("ui-modal", L);
679
- class Y extends b {
743
+ customElements.define("ui-modal", M);
744
+ class R extends g {
680
745
  constructor() {
681
746
  super(...arguments);
682
- c(this, "isOpen", this.useSignal(!1));
683
- c(this, "selectedValue", this.useSignal(""));
684
- c(this, "searchTerm", this.useSignal(""));
685
- c(this, "options", []);
747
+ p(this, "isOpen", this.useSignal(!1));
748
+ p(this, "selectedValue", this.useSignal(""));
749
+ p(this, "searchTerm", this.useSignal(""));
750
+ p(this, "options", []);
686
751
  }
687
752
  connectedCallback() {
688
753
  this.setAttribute("data-ui", "select"), super.connectedCallback(), this.parseOptions(), this.setupClickOutside();
@@ -734,15 +799,15 @@ class Y extends b {
734
799
  return (e == null ? void 0 : e.label) || this.getAttribute("placeholder") || "Select an option";
735
800
  }
736
801
  render() {
737
- const t = this.isOpen.get(), e = this.hasAttribute("disabled"), a = this.hasAttribute("searchable"), i = this.getAttribute("label") || "", r = this.getSelectedLabel(), o = this.getFilteredOptions(), n = this.selectedValue.get() !== "";
802
+ const t = this.isOpen.get(), e = this.hasAttribute("disabled"), a = this.hasAttribute("searchable"), s = this.getAttribute("label") || "", n = this.getSelectedLabel(), r = this.getFilteredOptions(), o = this.selectedValue.get() !== "";
738
803
  this.shadowRoot.innerHTML = `
739
- <style>${g}</style>
804
+ <style>${f}</style>
740
805
 
741
806
  <div class="select-container">
742
- ${i ? `<label class="select-label">${i}</label>` : ""}
807
+ ${s ? `<label class="select-label">${s}</label>` : ""}
743
808
 
744
809
  <div class="select-trigger ${t ? "open" : ""}" part="trigger" tabindex="0" ${e ? "disabled" : ""}>
745
- <span class="select-placeholder ${n ? "has-selection" : ""}">${r}</span>
810
+ <span class="select-placeholder ${o ? "has-selection" : ""}">${n}</span>
746
811
  <span class="select-arrow ${t ? "open" : ""}">
747
812
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
748
813
  <polyline points="6 9 12 15 18 9"></polyline>
@@ -760,13 +825,13 @@ class Y extends b {
760
825
  >
761
826
  ` : ""}
762
827
 
763
- ${o.length > 0 ? o.map((d) => `
828
+ ${r.length > 0 ? r.map((u) => `
764
829
  <div
765
- class="select-option ${d.value === this.selectedValue.get() ? "selected" : ""} ${d.disabled ? "disabled" : ""}"
766
- data-value="${d.value}"
830
+ class="select-option ${u.value === this.selectedValue.get() ? "selected" : ""} ${u.disabled ? "disabled" : ""}"
831
+ data-value="${u.value}"
767
832
  part="option"
768
833
  >
769
- ${d.label}
834
+ ${u.label}
770
835
  </div>
771
836
  `).join("") : `
772
837
  <div class="select-empty">No options found</div>
@@ -774,25 +839,25 @@ class Y extends b {
774
839
  </div>
775
840
  </div>
776
841
  `;
777
- const l = this.shadowRoot.querySelector(".select-trigger"), h = this.shadowRoot.querySelector(".select-search"), p = this.shadowRoot.querySelectorAll(".select-option:not(.disabled)");
778
- l == null || l.addEventListener("click", () => this.toggleDropdown()), l == null || l.addEventListener("keydown", (d) => {
779
- (d.key === "Enter" || d.key === " ") && (d.preventDefault(), this.toggleDropdown());
780
- }), h == null || h.addEventListener("input", (d) => {
781
- this.handleSearch(d.target.value);
782
- }), h == null || h.addEventListener("click", (d) => d.stopPropagation()), p.forEach((d) => {
783
- d.addEventListener("click", () => {
784
- const m = d.getAttribute("data-value");
785
- m && this.selectOption(m);
842
+ const d = this.shadowRoot.querySelector(".select-trigger"), c = this.shadowRoot.querySelector(".select-search"), h = this.shadowRoot.querySelectorAll(".select-option:not(.disabled)");
843
+ d == null || d.addEventListener("click", () => this.toggleDropdown()), d == null || d.addEventListener("keydown", (u) => {
844
+ (u.key === "Enter" || u.key === " ") && (u.preventDefault(), this.toggleDropdown());
845
+ }), c == null || c.addEventListener("input", (u) => {
846
+ this.handleSearch(u.target.value);
847
+ }), c == null || c.addEventListener("click", (u) => u.stopPropagation()), h.forEach((u) => {
848
+ u.addEventListener("click", () => {
849
+ const b = u.getAttribute("data-value");
850
+ b && this.selectOption(b);
786
851
  });
787
852
  });
788
853
  }
789
854
  }
790
- customElements.define("ui-select", Y);
791
- class z extends b {
855
+ customElements.define("ui-select", R);
856
+ class D extends g {
792
857
  constructor() {
793
858
  super(...arguments);
794
- c(this, "checked", this.useSignal(!1));
795
- c(this, "indeterminate", this.useSignal(!1));
859
+ p(this, "checked", this.useSignal(!1));
860
+ p(this, "indeterminate", this.useSignal(!1));
796
861
  }
797
862
  connectedCallback() {
798
863
  this.setAttribute("data-ui", "checkbox"), super.connectedCallback();
@@ -820,21 +885,21 @@ class z extends b {
820
885
  this.indeterminate.set(t), t ? this.setAttribute("indeterminate", "") : this.removeAttribute("indeterminate");
821
886
  }
822
887
  render() {
823
- const t = this.checked.get(), e = this.indeterminate.get(), a = this.hasAttribute("disabled"), i = this.getAttribute("label") || "", r = this.getAttribute("size") || "md", o = {
888
+ const t = this.checked.get(), e = this.indeterminate.get(), a = this.hasAttribute("disabled"), s = this.getAttribute("label") || "", n = this.getAttribute("size") || "md", r = {
824
889
  sm: "size-sm",
825
890
  md: "size-md",
826
891
  lg: "size-lg"
827
892
  };
828
893
  this.shadowRoot.innerHTML = `
829
- <style>${g}</style>
894
+ <style>${f}</style>
830
895
 
831
- <label class="checkbox-container ${o[r]}">
896
+ <label class="checkbox-container ${r[n]}">
832
897
  <input
833
898
  type="checkbox"
834
899
  ${t ? "checked" : ""}
835
900
  ${a ? "disabled" : ""}
836
901
  >
837
- <div class="checkbox-box ${o[r]} ${t ? "checked" : ""} ${e ? "indeterminate" : ""} ${a ? "disabled" : ""}" part="checkbox">
902
+ <div class="checkbox-box ${r[n]} ${t ? "checked" : ""} ${e ? "indeterminate" : ""} ${a ? "disabled" : ""}" part="checkbox">
838
903
  <svg class="checkbox-icon check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3">
839
904
  <polyline points="20 6 9 17 4 12"></polyline>
840
905
  </svg>
@@ -842,30 +907,30 @@ class z extends b {
842
907
  <line x1="5" y1="12" x2="19" y2="12"></line>
843
908
  </svg>
844
909
  </div>
845
- ${i ? `<span class="checkbox-label">${i}</span>` : "<slot></slot>"}
910
+ ${s ? `<span class="checkbox-label">${s}</span>` : "<slot></slot>"}
846
911
  </label>
847
912
  `;
848
- const n = this.shadowRoot.querySelector(".checkbox-container");
849
- n == null || n.addEventListener("click", (l) => {
850
- l.preventDefault(), this.handleChange();
913
+ const o = this.shadowRoot.querySelector(".checkbox-container");
914
+ o == null || o.addEventListener("click", (d) => {
915
+ d.preventDefault(), this.handleChange();
851
916
  });
852
917
  }
853
918
  }
854
- customElements.define("ui-checkbox", z);
855
- const D = ':host{display:block}.tabs{background:var(--color-page-bg);border-radius:16px;box-shadow:0 1px 3px #0000000a,0 4px 12px #00000008;overflow:hidden;position:relative}.tablist{display:flex;position:relative;padding:8px;gap:4px;background:linear-gradient(180deg,#fafafa,#f5f5f5);border-bottom:1px solid rgba(0,0,0,.04)}.tab-indicator{position:absolute;bottom:8px;height:calc(100% - 16px);background:var(--color-page-bg);border-radius:10px;box-shadow:0 2px 8px #0000000f,0 1px 2px #0000000a;transition:transform .28s cubic-bezier(.4,0,.2,1),width .28s cubic-bezier(.4,0,.2,1);pointer-events:none;z-index:0}::slotted([slot="tab"]){-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;color:#64748b;cursor:pointer;font:600 13px/1 DM Sans,system-ui,-apple-system,sans-serif;letter-spacing:.02em;padding:10px 18px;position:relative;transition:color .2s ease;-webkit-user-select:none;user-select:none;white-space:nowrap;z-index:1}::slotted([slot="tab"]:hover){color:var(--color-ink)}::slotted([slot="tab"].is-active){color:var(--color-ink)}::slotted([slot="tab"]:focus-visible){outline:none}::slotted([slot="tab"]:focus-visible):after{content:"";position:absolute;top:6px;right:6px;bottom:6px;left:6px;border:2px solid var(--color-primary);border-radius:8px;pointer-events:none}.panels{padding:24px 28px;min-height:200px}::slotted([slot="panel"]){animation:fadeIn .3s ease}::slotted([slot="panel"]:not(.is-active)){display:none}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion: reduce){.tab-indicator{transition:none}::slotted([slot="panel"]){animation:none}}';
856
- class R extends b {
919
+ customElements.define("ui-checkbox", D);
920
+ const T = ':host{display:block}.tabs{background:var(--color-page-bg);border-radius:16px;box-shadow:0 1px 3px #0000000a,0 4px 12px #00000008;overflow:hidden;position:relative}.tablist{display:flex;position:relative;padding:8px;gap:4px;background:linear-gradient(180deg,#fafafa,#f5f5f5);border-bottom:1px solid rgba(0,0,0,.04)}.tab-indicator{position:absolute;bottom:8px;height:calc(100% - 16px);background:var(--color-page-bg);border-radius:10px;box-shadow:0 2px 8px #0000000f,0 1px 2px #0000000a;transition:transform .28s cubic-bezier(.4,0,.2,1),width .28s cubic-bezier(.4,0,.2,1);pointer-events:none;z-index:0}::slotted([slot="tab"]){-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;color:#64748b;cursor:pointer;font:600 13px/1 DM Sans,system-ui,-apple-system,sans-serif;letter-spacing:.02em;padding:10px 18px;position:relative;transition:color .2s ease;-webkit-user-select:none;user-select:none;white-space:nowrap;z-index:1}::slotted([slot="tab"]:hover){color:var(--color-ink)}::slotted([slot="tab"].is-active){color:var(--color-ink)}::slotted([slot="tab"]:focus-visible){outline:none}::slotted([slot="tab"]:focus-visible):after{content:"";position:absolute;top:6px;right:6px;bottom:6px;left:6px;border:2px solid var(--color-primary);border-radius:8px;pointer-events:none}.panels{padding:24px 28px;min-height:200px}::slotted([slot="panel"]){animation:fadeIn .3s ease}::slotted([slot="panel"]:not(.is-active)){display:none}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion: reduce){.tab-indicator{transition:none}::slotted([slot="panel"]){animation:none}}';
921
+ class Y extends g {
857
922
  constructor() {
858
923
  super(...arguments);
859
- c(this, "activeId", null);
860
- c(this, "indicator", null);
861
- c(this, "handleTabClick", (t) => {
924
+ p(this, "activeId", null);
925
+ p(this, "indicator", null);
926
+ p(this, "handleTabClick", (t) => {
862
927
  const e = t.target;
863
928
  if (!e) return;
864
929
  const a = e.closest('[slot="tab"][data-tab]');
865
930
  if (!a) return;
866
931
  t.preventDefault();
867
- const i = a.getAttribute("data-tab");
868
- i && this.setActive(i);
932
+ const s = a.getAttribute("data-tab");
933
+ s && this.setActive(s);
869
934
  });
870
935
  }
871
936
  static get observedAttributes() {
@@ -899,47 +964,47 @@ class R extends b {
899
964
  }
900
965
  getActiveId(t) {
901
966
  const e = this.getAttribute("active");
902
- if (e && t.some((i) => i.getAttribute("data-tab") === e))
967
+ if (e && t.some((s) => s.getAttribute("data-tab") === e))
903
968
  return e;
904
- if (this.activeId && t.some((i) => i.getAttribute("data-tab") === this.activeId))
969
+ if (this.activeId && t.some((s) => s.getAttribute("data-tab") === this.activeId))
905
970
  return this.activeId;
906
- const a = t.find((i) => i.getAttribute("data-tab"));
971
+ const a = t.find((s) => s.getAttribute("data-tab"));
907
972
  return (a == null ? void 0 : a.getAttribute("data-tab")) ?? null;
908
973
  }
909
974
  syncTabs() {
910
975
  const t = this.getTabs(), e = this.getPanels();
911
976
  if (t.length === 0) return;
912
977
  const a = this.getActiveId(t);
913
- a && (this.activeId = a, this.getAttribute("active") !== a && this.setAttribute("active", a), t.forEach((i) => {
914
- const r = i.getAttribute("data-tab");
915
- if (!r) return;
916
- const o = i.id || `tab-${r}`, n = r === a;
917
- i.id = o, i.setAttribute("role", "tab"), i.setAttribute("aria-selected", String(n)), i.setAttribute("tabindex", n ? "0" : "-1"), i.classList.toggle("is-active", n);
918
- }), e.forEach((i) => {
919
- const r = i.getAttribute("data-tab");
920
- if (!r) return;
921
- const o = i.id || `panel-${r}`, n = r === a;
922
- i.id = o, i.setAttribute("role", "tabpanel"), i.toggleAttribute("hidden", !n), i.classList.toggle("is-active", n);
923
- const l = t.find((h) => h.getAttribute("data-tab") === r);
924
- l && (l.setAttribute("aria-controls", o), i.setAttribute("aria-labelledby", l.id));
978
+ a && (this.activeId = a, this.getAttribute("active") !== a && this.setAttribute("active", a), t.forEach((s) => {
979
+ const n = s.getAttribute("data-tab");
980
+ if (!n) return;
981
+ const r = s.id || `tab-${n}`, o = n === a;
982
+ s.id = r, s.setAttribute("role", "tab"), s.setAttribute("aria-selected", String(o)), s.setAttribute("tabindex", o ? "0" : "-1"), s.classList.toggle("is-active", o);
983
+ }), e.forEach((s) => {
984
+ const n = s.getAttribute("data-tab");
985
+ if (!n) return;
986
+ const r = s.id || `panel-${n}`, o = n === a;
987
+ s.id = r, s.setAttribute("role", "tabpanel"), s.toggleAttribute("hidden", !o), s.classList.toggle("is-active", o);
988
+ const d = t.find((c) => c.getAttribute("data-tab") === n);
989
+ d && (d.setAttribute("aria-controls", r), s.setAttribute("aria-labelledby", d.id));
925
990
  }), this.updateIndicator(t, a));
926
991
  }
927
992
  updateIndicator(t, e) {
928
993
  if (!this.indicator) return;
929
- const a = t.find((n) => n.getAttribute("data-tab") === e);
994
+ const a = t.find((o) => o.getAttribute("data-tab") === e);
930
995
  if (!a) return;
931
- const i = this.shadowRoot.querySelector(".tablist");
932
- if (!i) return;
933
- a.getBoundingClientRect(), i.getBoundingClientRect();
934
- const r = t.indexOf(a);
935
- let o = 0;
936
- for (let n = 0; n < r; n++)
937
- o += t[n].offsetWidth;
938
- this.indicator.style.transform = `translateX(${o}px)`, this.indicator.style.width = `${a.offsetWidth}px`;
996
+ const s = this.shadowRoot.querySelector(".tablist");
997
+ if (!s) return;
998
+ a.getBoundingClientRect(), s.getBoundingClientRect();
999
+ const n = t.indexOf(a);
1000
+ let r = 0;
1001
+ for (let o = 0; o < n; o++)
1002
+ r += t[o].offsetWidth;
1003
+ this.indicator.style.transform = `translateX(${r}px)`, this.indicator.style.width = `${a.offsetWidth}px`;
939
1004
  }
940
1005
  render() {
941
1006
  this.shadowRoot.innerHTML = `
942
- <style>${g}${D}</style>
1007
+ <style>${f}${T}</style>
943
1008
  <div class="tabs">
944
1009
  <div class="tablist" role="tablist">
945
1010
  <div class="tab-indicator"></div>
@@ -954,9 +1019,9 @@ class R extends b {
954
1019
  t == null || t.addEventListener("slotchange", () => this.syncTabs()), e == null || e.addEventListener("slotchange", () => this.syncTabs()), requestAnimationFrame(() => this.syncTabs());
955
1020
  }
956
1021
  }
957
- customElements.define("ui-tabs", R);
958
- const M = ':host{display:block;--card-transition: all .3s cubic-bezier(.4, 0, .2, 1)}:host([data-ui="card"]){display:block}.card{background:#fff;padding:24px;box-sizing:border-box;width:100%;position:relative;transition:var(--card-transition);overflow:hidden}.card.rounded{border-radius:16px}.card.square{border-radius:0}.card.default{border:1px solid #e5e7eb;background:#fff}.card.elevated{border:none;background:linear-gradient(to bottom,#fff,#fafbfc)}.card.bordered{border:2px solid #e5e7eb;background:#fff}.card.ghost{border:1px dashed #d1d5db;background:transparent}.card.default:hover{border-color:#d1d5db;transform:translateY(-2px)}.card.elevated:hover{transform:translateY(-4px)}.card.bordered:hover{border-color:#9ca3af;background:#fafbfc}.card.ghost:hover{border-color:#9ca3af;background:#f9fafb80}.card.elevated:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;padding:2px;background:linear-gradient(135deg,#6366f11a,#ec48991a);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:0;transition:opacity .3s ease;pointer-events:none}.card.elevated:hover:before{opacity:1}.card ::slotted(*:first-child){margin-top:0}.card ::slotted(*:last-child){margin-bottom:0}.card:focus-within{outline:2px solid #9ec5ff;outline-offset:2px}@media (max-width: 768px){.card{padding:20px}.card.rounded{border-radius:12px}}@media (max-width: 480px){.card{padding:16px}.card.rounded{border-radius:10px}}@media print{.card{border:1px solid #e5e7eb;box-shadow:none!important;page-break-inside:avoid}}';
959
- class T extends b {
1022
+ customElements.define("ui-tabs", Y);
1023
+ const q = ':host{display:block;--card-transition: all .3s cubic-bezier(.4, 0, .2, 1)}:host([data-ui="card"]){display:block}.card{background:#fff;padding:24px;box-sizing:border-box;width:100%;position:relative;transition:var(--card-transition);overflow:hidden}.card.rounded{border-radius:16px}.card.square{border-radius:0}.card.default{border:1px solid #e5e7eb;background:#fff}.card.elevated{border:none;background:linear-gradient(to bottom,#fff,#fafbfc)}.card.bordered{border:2px solid #e5e7eb;background:#fff}.card.ghost{border:1px dashed #d1d5db;background:transparent}.card.default:hover{border-color:#d1d5db;transform:translateY(-2px)}.card.elevated:hover{transform:translateY(-4px)}.card.bordered:hover{border-color:#9ca3af;background:#fafbfc}.card.ghost:hover{border-color:#9ca3af;background:#f9fafb80}.card.elevated:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;padding:2px;background:linear-gradient(135deg,#6366f11a,#ec48991a);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:0;transition:opacity .3s ease;pointer-events:none}.card.elevated:hover:before{opacity:1}.card ::slotted(*:first-child){margin-top:0}.card ::slotted(*:last-child){margin-bottom:0}.card:focus-within{outline:2px solid #9ec5ff;outline-offset:2px}@media (max-width: 768px){.card{padding:20px}.card.rounded{border-radius:12px}}@media (max-width: 480px){.card{padding:16px}.card.rounded{border-radius:10px}}@media print{.card{border:1px solid #e5e7eb;box-shadow:none!important;page-break-inside:avoid}}';
1024
+ class P extends g {
960
1025
  connectedCallback() {
961
1026
  this.setAttribute("data-ui", "card"), super.connectedCallback();
962
1027
  }
@@ -976,71 +1041,433 @@ class T extends b {
976
1041
  return this.getAttribute("rounded") !== "false";
977
1042
  }
978
1043
  getVariant() {
979
- const s = this.getAttribute("variant");
980
- return s === "elevated" || s === "bordered" || s === "ghost" ? s : "default";
1044
+ const i = this.getAttribute("variant");
1045
+ return i === "elevated" || i === "bordered" || i === "ghost" ? i : "default";
981
1046
  }
982
1047
  getElevation() {
983
- const s = this.getAttribute("elevation");
984
- return s === "none" || s === "sm" || s === "md" || s === "lg" || s === "xl" ? s : "sm";
1048
+ const i = this.getAttribute("elevation");
1049
+ return i === "none" || i === "sm" || i === "md" || i === "lg" || i === "xl" ? i : "sm";
985
1050
  }
986
1051
  render() {
987
- const s = this.getShadow(), t = this.getShadowColor(), e = this.getRounded(), a = this.getVariant(), i = this.getElevation();
988
- let r = "none";
989
- if (s)
990
- switch (i) {
1052
+ const i = this.getShadow(), t = this.getShadowColor(), e = this.getRounded(), a = this.getVariant(), s = this.getElevation();
1053
+ let n = "none";
1054
+ if (i)
1055
+ switch (s) {
991
1056
  case "sm":
992
- r = `0 1px 2px rgba(${t}, 0.05), 0 1px 3px rgba(${t}, 0.1)`;
1057
+ n = `0 1px 2px rgba(${t}, 0.05), 0 1px 3px rgba(${t}, 0.1)`;
993
1058
  break;
994
1059
  case "md":
995
- r = `0 4px 6px rgba(${t}, 0.07), 0 2px 4px rgba(${t}, 0.06)`;
1060
+ n = `0 4px 6px rgba(${t}, 0.07), 0 2px 4px rgba(${t}, 0.06)`;
996
1061
  break;
997
1062
  case "lg":
998
- r = `0 10px 15px rgba(${t}, 0.1), 0 4px 6px rgba(${t}, 0.05)`;
1063
+ n = `0 10px 15px rgba(${t}, 0.1), 0 4px 6px rgba(${t}, 0.05)`;
999
1064
  break;
1000
1065
  case "xl":
1001
- r = `0 20px 25px rgba(${t}, 0.15), 0 10px 10px rgba(${t}, 0.04)`;
1066
+ n = `0 20px 25px rgba(${t}, 0.15), 0 10px 10px rgba(${t}, 0.04)`;
1002
1067
  break;
1003
1068
  default:
1004
- r = "none";
1069
+ n = "none";
1005
1070
  }
1006
1071
  this.shadowRoot.innerHTML = `
1007
1072
  <style>
1008
- ${g}
1009
- ${M}
1073
+ ${f}
1074
+ ${q}
1010
1075
 
1011
1076
  .card.custom-shadow {
1012
- box-shadow: ${r};
1077
+ box-shadow: ${n};
1013
1078
  }
1014
1079
 
1015
1080
  .card.custom-shadow:hover {
1016
- box-shadow: ${s && i !== "none" ? r.replace(/rgba\(([^)]+), ([\d.]+)\)/g, (o, n, l) => `rgba(${n}, ${Math.min(parseFloat(l) * 1.3, 0.25)})`) : "none"};
1081
+ box-shadow: ${i && s !== "none" ? n.replace(/rgba\(([^)]+), ([\d.]+)\)/g, (r, o, d) => `rgba(${o}, ${Math.min(parseFloat(d) * 1.3, 0.25)})`) : "none"};
1017
1082
  }
1018
1083
  </style>
1019
- <div class="card ${a} ${e ? "rounded" : "square"} ${s ? "custom-shadow" : "no-shadow"}">
1084
+ <div class="card ${a} ${e ? "rounded" : "square"} ${i ? "custom-shadow" : "no-shadow"}">
1020
1085
  <slot></slot>
1021
1086
  </div>
1022
1087
  `;
1023
1088
  }
1024
1089
  }
1025
- customElements.define("ui-card", T);
1026
- class I {
1090
+ customElements.define("ui-card", P);
1091
+ const O = ":host{--toast-success: #10b981;--toast-error: #ef4444;--toast-warning: #f59e0b;--toast-info: #3b82f6;--toast-bg: rgba(255, 255, 255, .95);--toast-blur: blur(12px);--toast-shadow: 0 8px 32px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .08);--toast-border: rgba(255, 255, 255, .3);--toast-text: #1e293b;--toast-radius: 14px;--toast-icon-size: 20px}.toast-container{position:fixed;z-index:10000;pointer-events:none;display:flex;flex-direction:column;gap:12px;max-width:420px;padding:16px}.toast-container.top-right{top:0;right:0}.toast-container.top-left{top:0;left:0}.toast-container.bottom-right{bottom:0;right:0;flex-direction:column-reverse}.toast-container.bottom-left{bottom:0;left:0;flex-direction:column-reverse}.toast-container.top-center{top:0;left:50%;transform:translate(-50%)}.toast-container.bottom-center{bottom:0;left:50%;transform:translate(-50%);flex-direction:column-reverse}.toast{pointer-events:auto;background:var(--toast-bg);backdrop-filter:var(--toast-blur);-webkit-backdrop-filter:var(--toast-blur);border:1px solid var(--toast-border);border-radius:var(--toast-radius);box-shadow:var(--toast-shadow);padding:16px 20px;min-width:300px;max-width:100%;display:flex;align-items:flex-start;gap:14px;position:relative;overflow:hidden;opacity:0;transform:translate(100px);animation:toastSlideIn .4s cubic-bezier(.16,1,.3,1) forwards}.toast.closing{animation:toastSlideOut .3s cubic-bezier(.5,0,.75,0) forwards}.toast-container.top-left .toast,.toast-container.bottom-left .toast{transform:translate(-100px);animation:toastSlideInLeft .4s cubic-bezier(.16,1,.3,1) forwards}.toast-container.top-left .toast.closing,.toast-container.bottom-left .toast.closing{animation:toastSlideOutLeft .3s cubic-bezier(.5,0,.75,0) forwards}.toast-container.top-center .toast,.toast-container.bottom-center .toast{transform:translateY(-50px);animation:toastSlideInTop .4s cubic-bezier(.16,1,.3,1) forwards}.toast-container.top-center .toast.closing,.toast-container.bottom-center .toast.closing{animation:toastSlideOutTop .3s cubic-bezier(.5,0,.75,0) forwards}.toast-icon{flex-shrink:0;width:var(--toast-icon-size);height:var(--toast-icon-size);display:flex;align-items:center;justify-content:center;margin-top:2px}.toast-icon svg{width:100%;height:100%;stroke-width:2.5}.toast.success .toast-icon{color:var(--toast-success)}.toast.error .toast-icon{color:var(--toast-error)}.toast.warning .toast-icon{color:var(--toast-warning)}.toast.info .toast-icon{color:var(--toast-info)}.toast.success:before{background:linear-gradient(135deg,var(--toast-success),rgba(16,185,129,.7))}.toast.error:before{background:linear-gradient(135deg,var(--toast-error),rgba(239,68,68,.7))}.toast.warning:before{background:linear-gradient(135deg,var(--toast-warning),rgba(245,158,11,.7))}.toast.info:before{background:linear-gradient(135deg,var(--toast-info),rgba(59,130,246,.7))}.toast-content{flex:1;min-width:0}.toast-title{margin:0 0 4px;font-size:15px;font-weight:600;color:var(--toast-text);line-height:1.4}.toast-description{margin:0;font-size:13.5px;color:#64748b;line-height:1.5}.toast-close{flex-shrink:0;width:20px;height:20px;padding:0;border:none;background:transparent;color:#94a3b8;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .15s ease;margin-top:2px}.toast-close:hover{background:#0000000d;color:var(--toast-text)}.toast-close svg{width:14px;height:14px;stroke-width:2.5}.toast-progress{position:absolute;bottom:0;left:0;height:3px;width:100%;border-radius:0 0 var(--toast-radius) var(--toast-radius);overflow:hidden;background:#0000000d}.toast-progress-bar{height:100%;width:100%;transform-origin:left;animation:toastProgress var(--duration) linear forwards}.toast.success .toast-progress-bar{background:var(--toast-success)}.toast.error .toast-progress-bar{background:var(--toast-error)}.toast.warning .toast-progress-bar{background:var(--toast-warning)}.toast.info .toast-progress-bar{background:var(--toast-info)}@keyframes toastSlideIn{0%{opacity:0;transform:translate(100px) scale(.95)}to{opacity:1;transform:translate(0) scale(1)}}@keyframes toastSlideOut{0%{opacity:1;transform:translate(0) scale(1)}to{opacity:0;transform:translate(100px) scale(.95)}}@keyframes toastSlideInLeft{0%{opacity:0;transform:translate(-100px) scale(.95)}to{opacity:1;transform:translate(0) scale(1)}}@keyframes toastSlideOutLeft{0%{opacity:1;transform:translate(0) scale(1)}to{opacity:0;transform:translate(-100px) scale(.95)}}@keyframes toastSlideInTop{0%{opacity:0;transform:translateY(-50px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes toastSlideOutTop{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-50px) scale(.95)}}@keyframes toastProgress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@media (prefers-color-scheme: dark){:host{--toast-bg: rgba(30, 41, 59, .95);--toast-border: rgba(255, 255, 255, .1);--toast-text: #f1f5f9;--toast-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .2)}.toast-description{color:#94a3b8}.toast-close{color:#64748b}.toast-close:hover{background:#ffffff1a;color:var(--toast-text)}.toast-progress{background:#ffffff1a}}@media (max-width: 480px){.toast-container{max-width:calc(100vw - 32px);left:16px!important;right:16px!important;transform:none!important;padding:12px}.toast{min-width:0;width:100%}}";
1092
+ class H extends g {
1093
+ constructor() {
1094
+ super(...arguments);
1095
+ p(this, "toasts", /* @__PURE__ */ new Map());
1096
+ p(this, "toastCounter", 0);
1097
+ }
1098
+ connectedCallback() {
1099
+ this.setAttribute("data-ui", "toast"), super.connectedCallback();
1100
+ }
1101
+ static get observedAttributes() {
1102
+ return ["position"];
1103
+ }
1104
+ attributeChangedCallback() {
1105
+ this.render();
1106
+ }
1107
+ getPosition() {
1108
+ const t = this.getAttribute("position");
1109
+ return t === "top-left" || t === "bottom-right" || t === "bottom-left" || t === "top-center" || t === "bottom-center" ? t : "top-right";
1110
+ }
1111
+ getIcon(t) {
1112
+ var s;
1113
+ const a = {
1114
+ success: "check-circle",
1115
+ error: "x-circle",
1116
+ warning: "alert-triangle",
1117
+ info: "info"
1118
+ }[t];
1119
+ return ((s = k.icons[a]) == null ? void 0 : s.toSvg()) || "";
1120
+ }
1121
+ /**
1122
+ * Show a toast notification
1123
+ * @param config Toast configuration
1124
+ * @returns Toast ID for manual dismissal
1125
+ */
1126
+ show(t) {
1127
+ const {
1128
+ title: e,
1129
+ description: a = "",
1130
+ type: s = "info",
1131
+ duration: n = 5e3,
1132
+ closable: r = !0
1133
+ } = t, o = `toast-${++this.toastCounter}`, d = this.getIcon(s), c = document.createElement("div");
1134
+ c.className = `toast ${s}`, c.setAttribute("role", "alert"), c.setAttribute("aria-live", "polite"), c.innerHTML = `
1135
+ <div class="toast-icon">${d}</div>
1136
+ <div class="toast-content">
1137
+ <div class="toast-title">${this.escapeHtml(e)}</div>
1138
+ ${a ? `<div class="toast-description">${this.escapeHtml(a)}</div>` : ""}
1139
+ </div>
1140
+ ${r ? `
1141
+ <button class="toast-close" aria-label="Close notification">
1142
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor">
1143
+ <line x1="18" y1="6" x2="6" y2="18"></line>
1144
+ <line x1="6" y1="6" x2="18" y2="18"></line>
1145
+ </svg>
1146
+ </button>
1147
+ ` : ""}
1148
+ ${n > 0 ? `
1149
+ <div class="toast-progress">
1150
+ <div class="toast-progress-bar" style="--duration: ${n}ms"></div>
1151
+ </div>
1152
+ ` : ""}
1153
+ `;
1154
+ const h = this.shadowRoot.querySelector(".toast-container");
1155
+ if (h && h.appendChild(c), r) {
1156
+ const b = c.querySelector(".toast-close");
1157
+ b == null || b.addEventListener("click", () => this.dismiss(o));
1158
+ }
1159
+ let u;
1160
+ return n > 0 && (u = window.setTimeout(() => {
1161
+ this.dismiss(o);
1162
+ }, n)), this.toasts.set(o, { element: c, timer: u }), this.dispatchEvent(
1163
+ new CustomEvent("toast-show", {
1164
+ bubbles: !0,
1165
+ composed: !0,
1166
+ detail: { id: o, ...t }
1167
+ })
1168
+ ), o;
1169
+ }
1170
+ /**
1171
+ * Dismiss a specific toast
1172
+ */
1173
+ dismiss(t) {
1174
+ const e = this.toasts.get(t);
1175
+ e && (e.timer && clearTimeout(e.timer), e.element.classList.add("closing"), setTimeout(() => {
1176
+ e.element.remove(), this.toasts.delete(t), this.dispatchEvent(
1177
+ new CustomEvent("toast-dismiss", {
1178
+ bubbles: !0,
1179
+ composed: !0,
1180
+ detail: { id: t }
1181
+ })
1182
+ );
1183
+ }, 300));
1184
+ }
1185
+ /**
1186
+ * Dismiss all toasts
1187
+ */
1188
+ dismissAll() {
1189
+ Array.from(this.toasts.keys()).forEach((e) => this.dismiss(e));
1190
+ }
1191
+ /**
1192
+ * Convenience methods for different toast types
1193
+ */
1194
+ success(t, e, a) {
1195
+ return this.show({ title: t, description: e, type: "success", duration: a });
1196
+ }
1197
+ error(t, e, a) {
1198
+ return this.show({ title: t, description: e, type: "error", duration: a });
1199
+ }
1200
+ warning(t, e, a) {
1201
+ return this.show({ title: t, description: e, type: "warning", duration: a });
1202
+ }
1203
+ info(t, e, a) {
1204
+ return this.show({ title: t, description: e, type: "info", duration: a });
1205
+ }
1206
+ escapeHtml(t) {
1207
+ const e = document.createElement("div");
1208
+ return e.textContent = t, e.innerHTML;
1209
+ }
1210
+ render() {
1211
+ const t = this.getPosition();
1212
+ this.shadowRoot.innerHTML = `
1213
+ <style>
1214
+ ${f}
1215
+ ${O}
1216
+ </style>
1217
+ <div class="toast-container ${t}"></div>
1218
+ `;
1219
+ }
1220
+ }
1221
+ customElements.define("ui-toast", H);
1222
+ class F extends g {
1027
1223
  constructor() {
1028
- c(this, "baseURL", "");
1029
- c(this, "defaultHeaders", {
1224
+ super(...arguments);
1225
+ p(this, "steps", []);
1226
+ }
1227
+ connectedCallback() {
1228
+ this.setAttribute("data-ui", "stepper"), super.connectedCallback(), this.parseSteps();
1229
+ }
1230
+ static get observedAttributes() {
1231
+ return ["steps", "active", "orientation", "size"];
1232
+ }
1233
+ attributeChangedCallback(t, e, a) {
1234
+ if (t === "steps" && e !== a && this.parseSteps(), t === "active" && e !== a) {
1235
+ this.render();
1236
+ return;
1237
+ }
1238
+ this.render();
1239
+ }
1240
+ parseSteps() {
1241
+ const t = this.getAttribute("steps");
1242
+ if (!t) {
1243
+ this.steps = [];
1244
+ return;
1245
+ }
1246
+ try {
1247
+ const e = JSON.parse(t);
1248
+ this.steps = Array.isArray(e) ? e : [];
1249
+ } catch (e) {
1250
+ console.error("Invalid steps JSON", e), this.steps = [];
1251
+ }
1252
+ }
1253
+ getOrientation() {
1254
+ return this.getAttribute("orientation") === "vertical" ? "vertical" : "horizontal";
1255
+ }
1256
+ getSize() {
1257
+ const t = this.getAttribute("size");
1258
+ return t === "sm" || t === "lg" ? t : "md";
1259
+ }
1260
+ getActiveIndex(t) {
1261
+ const e = parseInt(this.getAttribute("active") || "1", 10);
1262
+ return Number.isNaN(e) || t <= 0 ? 1 : Math.min(Math.max(e, 1), t);
1263
+ }
1264
+ resolveState(t, e, a) {
1265
+ return t.state ? t.state : e + 1 < a ? "complete" : e + 1 === a ? "active" : "upcoming";
1266
+ }
1267
+ setActive(t) {
1268
+ const e = this.steps.length;
1269
+ if (e === 0) return;
1270
+ const a = Math.min(Math.max(t, 1), e);
1271
+ if (a === this.getActiveIndex(e)) return;
1272
+ this.setAttribute("active", String(a));
1273
+ const s = this.steps[a - 1], n = this.resolveState(s, a - 1, a);
1274
+ this.dispatchEvent(
1275
+ new CustomEvent("step-change", {
1276
+ bubbles: !0,
1277
+ composed: !0,
1278
+ detail: { index: a, step: s, state: n }
1279
+ })
1280
+ );
1281
+ }
1282
+ escapeHtml(t) {
1283
+ const e = document.createElement("div");
1284
+ return e.textContent = t, e.innerHTML;
1285
+ }
1286
+ render() {
1287
+ const t = this.getOrientation(), e = this.getSize(), a = this.steps, s = a.length, n = this.getActiveIndex(s);
1288
+ this.shadowRoot.innerHTML = `
1289
+ <style>${f}</style>
1290
+ <div class="stepper-wrap">
1291
+ ${s === 0 ? '<div class="stepper-empty">No steps configured</div>' : `
1292
+ <ol class="stepper ${t} ${e}" role="list">
1293
+ ${a.map((r, o) => {
1294
+ const d = this.resolveState(r, o, n), c = d === "active", h = r.disabled ? "disabled" : "";
1295
+ return `
1296
+ <li class="step ${d} ${h}" data-state="${d}">
1297
+ <button class="step-trigger" data-index="${o}" ${r.disabled ? "disabled" : ""} aria-current="${c ? "step" : "false"}">
1298
+ <span class="step-node">${o + 1}</span>
1299
+ <span class="step-text">
1300
+ <span class="step-title">${this.escapeHtml(r.title || `Step ${o + 1}`)}</span>
1301
+ ${r.description ? `<span class="step-desc">${this.escapeHtml(r.description)}</span>` : ""}
1302
+ </span>
1303
+ </button>
1304
+ ${o < s - 1 ? '<span class="step-connector" aria-hidden="true"></span>' : ""}
1305
+ </li>
1306
+ `;
1307
+ }).join("")}
1308
+ </ol>
1309
+ `}
1310
+ </div>
1311
+ `, this.shadowRoot.querySelectorAll(".step-trigger").forEach((r) => {
1312
+ r.addEventListener("click", () => {
1313
+ const o = parseInt(r.dataset.index || "0", 10);
1314
+ Number.isNaN(o) || this.setActive(o + 1);
1315
+ });
1316
+ });
1317
+ }
1318
+ }
1319
+ customElements.define("ui-stepper", F);
1320
+ class V extends g {
1321
+ constructor() {
1322
+ super(...arguments);
1323
+ p(this, "files", this.useSignal([]));
1324
+ p(this, "isDragging", this.useSignal(!1));
1325
+ }
1326
+ connectedCallback() {
1327
+ this.setAttribute("data-ui", "upload"), super.connectedCallback();
1328
+ }
1329
+ static get observedAttributes() {
1330
+ return ["accept", "multiple", "disabled", "label", "helper", "name"];
1331
+ }
1332
+ attributeChangedCallback() {
1333
+ this.render();
1334
+ }
1335
+ get value() {
1336
+ return this.files.get().map((t) => t.name).join(", ");
1337
+ }
1338
+ get filesValue() {
1339
+ return this.files.get();
1340
+ }
1341
+ set filesValue(t) {
1342
+ this.setFiles(t);
1343
+ }
1344
+ clear() {
1345
+ this.setFiles([]);
1346
+ }
1347
+ isDisabled() {
1348
+ return this.hasAttribute("disabled");
1349
+ }
1350
+ isMultiple() {
1351
+ return this.hasAttribute("multiple");
1352
+ }
1353
+ getAccept() {
1354
+ return this.getAttribute("accept") || "";
1355
+ }
1356
+ getLabel() {
1357
+ return this.getAttribute("label") || "Upload files";
1358
+ }
1359
+ getHelper() {
1360
+ return this.getAttribute("helper") || "";
1361
+ }
1362
+ setFiles(t) {
1363
+ const e = this.isMultiple() ? t : t.slice(0, 1);
1364
+ this.files.set(e), this.dispatchEvent(
1365
+ new CustomEvent("upload-change", {
1366
+ bubbles: !0,
1367
+ composed: !0,
1368
+ detail: { files: e }
1369
+ })
1370
+ );
1371
+ }
1372
+ formatSize(t) {
1373
+ if (t < 1024) return `${t} B`;
1374
+ const e = t / 1024;
1375
+ return e < 1024 ? `${e.toFixed(1)} KB` : `${(e / 1024).toFixed(1)} MB`;
1376
+ }
1377
+ syncInputFiles(t, e) {
1378
+ const a = new DataTransfer();
1379
+ e.forEach((s) => a.items.add(s)), t.files = a.files;
1380
+ }
1381
+ render() {
1382
+ const t = this.getAccept(), e = this.getLabel(), a = this.getHelper(), s = this.isDisabled(), n = this.isMultiple(), r = this.isDragging.get(), o = this.files.get();
1383
+ this.shadowRoot.innerHTML = `
1384
+ <style>${f}</style>
1385
+ <div class="upload">
1386
+ ${e ? `<label class="upload-label">${e}</label>` : ""}
1387
+ <div class="upload-drop ${r ? "dragging" : ""} ${s ? "disabled" : ""}" part="dropzone">
1388
+ <input
1389
+ class="upload-input"
1390
+ type="file"
1391
+ ${n ? "multiple" : ""}
1392
+ ${t ? `accept="${t}"` : ""}
1393
+ ${s ? "disabled" : ""}
1394
+ >
1395
+ <div class="upload-content">
1396
+ <div class="upload-icon" aria-hidden="true">
1397
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1398
+ <path d="M12 16V4"></path>
1399
+ <path d="M8 8l4-4 4 4"></path>
1400
+ <path d="M4 16v4h16v-4"></path>
1401
+ </svg>
1402
+ </div>
1403
+ <div class="upload-text">
1404
+ <div class="upload-title">Drop files here or browse</div>
1405
+ <div class="upload-sub">
1406
+ ${t ? `Accepted: ${t}` : "Any file type supported"}
1407
+ </div>
1408
+ </div>
1409
+ <button class="upload-btn" type="button" ${s ? "disabled" : ""}>Browse</button>
1410
+ </div>
1411
+ </div>
1412
+ ${a ? `<div class="upload-helper">${a}</div>` : ""}
1413
+ ${o.length ? `
1414
+ <ul class="upload-list">
1415
+ ${o.map(
1416
+ (b, m) => `
1417
+ <li>
1418
+ <span>${b.name}</span>
1419
+ <span class="upload-meta">${this.formatSize(b.size)}</span>
1420
+ <button class="upload-remove" data-index="${m}" type="button">Remove</button>
1421
+ </li>
1422
+ `
1423
+ ).join("")}
1424
+ </ul>
1425
+ ` : ""}
1426
+ </div>
1427
+ `;
1428
+ const d = this.shadowRoot.querySelector(".upload-drop"), c = this.shadowRoot.querySelector(".upload-input"), h = this.shadowRoot.querySelector(".upload-btn"), u = this.shadowRoot.querySelectorAll(".upload-remove");
1429
+ !d || !c || (o.length ? this.syncInputFiles(c, o) : c.value = "", d.addEventListener("dragover", (b) => {
1430
+ s || (b.preventDefault(), this.isDragging.set(!0));
1431
+ }), d.addEventListener("dragleave", () => {
1432
+ this.isDragging.set(!1);
1433
+ }), d.addEventListener("drop", (b) => {
1434
+ var v;
1435
+ if (s) return;
1436
+ b.preventDefault(), this.isDragging.set(!1);
1437
+ const m = Array.from(((v = b.dataTransfer) == null ? void 0 : v.files) ?? []);
1438
+ m.length && (this.setFiles(m), this.syncInputFiles(c, this.files.get()));
1439
+ }), c.addEventListener("change", () => {
1440
+ const b = Array.from(c.files ?? []);
1441
+ this.setFiles(b);
1442
+ }), h == null || h.addEventListener("click", () => {
1443
+ s || c.click();
1444
+ }), u.forEach((b) => {
1445
+ b.addEventListener("click", () => {
1446
+ const m = parseInt(b.dataset.index || "0", 10), v = this.files.get().filter((_, w) => w !== m);
1447
+ this.setFiles(v), this.syncInputFiles(c, v);
1448
+ });
1449
+ }));
1450
+ }
1451
+ }
1452
+ customElements.define("ui-upload", V);
1453
+ class U {
1454
+ constructor() {
1455
+ p(this, "baseURL", "");
1456
+ p(this, "defaultHeaders", {
1030
1457
  "Content-Type": "application/json"
1031
1458
  });
1032
- c(this, "defaultTimeout", 3e4);
1033
- c(this, "interceptors", {
1459
+ p(this, "defaultTimeout", 3e4);
1460
+ p(this, "interceptors", {
1034
1461
  request: {
1035
1462
  handlers: [],
1036
- use: (s, t) => {
1037
- this.interceptors.request.handlers.push({ onFulfilled: s, onRejected: t });
1463
+ use: (i, t) => {
1464
+ this.interceptors.request.handlers.push({ onFulfilled: i, onRejected: t });
1038
1465
  }
1039
1466
  },
1040
1467
  response: {
1041
1468
  handlers: [],
1042
- use: (s, t) => {
1043
- this.interceptors.response.handlers.push({ onFulfilled: s, onRejected: t });
1469
+ use: (i, t) => {
1470
+ this.interceptors.response.handlers.push({ onFulfilled: i, onRejected: t });
1044
1471
  }
1045
1472
  }
1046
1473
  });
@@ -1048,8 +1475,8 @@ class I {
1048
1475
  /**
1049
1476
  * Set base URL for all requests
1050
1477
  */
1051
- setBaseURL(s) {
1052
- this.baseURL = s;
1478
+ setBaseURL(i) {
1479
+ this.baseURL = i;
1053
1480
  }
1054
1481
  /**
1055
1482
  * Get currently set base URL
@@ -1060,84 +1487,84 @@ class I {
1060
1487
  /**
1061
1488
  * Set default headers for all requests
1062
1489
  */
1063
- setDefaultHeaders(s) {
1064
- this.defaultHeaders = { ...this.defaultHeaders, ...s };
1490
+ setDefaultHeaders(i) {
1491
+ this.defaultHeaders = { ...this.defaultHeaders, ...i };
1065
1492
  }
1066
1493
  /**
1067
1494
  * Set default timeout for all requests (in ms)
1068
1495
  */
1069
- setDefaultTimeout(s) {
1070
- this.defaultTimeout = s;
1496
+ setDefaultTimeout(i) {
1497
+ this.defaultTimeout = i;
1071
1498
  }
1072
1499
  /**
1073
1500
  * Execute request with interceptors
1074
1501
  */
1075
- async executeRequest(s, t) {
1076
- const e = s.startsWith("http") ? s : this.baseURL + s;
1502
+ async executeRequest(i, t) {
1503
+ const e = i.startsWith("http") ? i : this.baseURL + i;
1077
1504
  let a = {
1078
1505
  method: "GET",
1079
1506
  headers: { ...this.defaultHeaders },
1080
1507
  timeout: this.defaultTimeout,
1081
1508
  ...t
1082
1509
  };
1083
- for (const o of this.interceptors.request.handlers)
1510
+ for (const r of this.interceptors.request.handlers)
1084
1511
  try {
1085
- a = await o.onFulfilled(a);
1086
- } catch (n) {
1087
- if (o.onRejected)
1088
- a = await o.onRejected(n);
1512
+ a = await r.onFulfilled(a);
1513
+ } catch (o) {
1514
+ if (r.onRejected)
1515
+ a = await r.onRejected(o);
1089
1516
  else
1090
- throw n;
1517
+ throw o;
1091
1518
  }
1092
- const i = new AbortController(), r = setTimeout(() => i.abort(), a.timeout || this.defaultTimeout);
1519
+ const s = new AbortController(), n = setTimeout(() => s.abort(), a.timeout || this.defaultTimeout);
1093
1520
  try {
1094
- const o = {
1521
+ const r = {
1095
1522
  method: a.method,
1096
1523
  headers: a.headers,
1097
- signal: i.signal
1524
+ signal: s.signal
1098
1525
  };
1099
- a.body && a.method !== "GET" && (o.body = (typeof a.body == "string", a.body));
1100
- const n = await fetch(e, o);
1101
- let l;
1102
- const h = n.headers.get("content-type");
1103
- h != null && h.includes("application/json") ? l = n.ok ? await n.json() : null : h != null && h.includes("text") ? l = await n.text() : l = await n.blob();
1104
- let p = {
1105
- status: n.status,
1106
- statusText: n.statusText,
1107
- headers: n.headers,
1108
- data: l
1526
+ a.body && a.method !== "GET" && (r.body = (typeof a.body == "string", a.body));
1527
+ const o = await fetch(e, r);
1528
+ let d;
1529
+ const c = o.headers.get("content-type");
1530
+ c != null && c.includes("application/json") ? d = o.ok ? await o.json() : null : c != null && c.includes("text") ? d = await o.text() : d = await o.blob();
1531
+ let h = {
1532
+ status: o.status,
1533
+ statusText: o.statusText,
1534
+ headers: o.headers,
1535
+ data: d
1109
1536
  };
1110
- if (!n.ok) {
1111
- const d = new Error(`HTTP ${n.status}: ${n.statusText}`);
1112
- throw d.response = p, d.config = a, d;
1537
+ if (!o.ok) {
1538
+ const u = new Error(`HTTP ${o.status}: ${o.statusText}`);
1539
+ throw u.response = h, u.config = a, u;
1113
1540
  }
1114
- for (const d of this.interceptors.response.handlers)
1541
+ for (const u of this.interceptors.response.handlers)
1115
1542
  try {
1116
- p = await d.onFulfilled(p);
1117
- } catch (m) {
1118
- if (d.onRejected)
1119
- p = await d.onRejected(m);
1543
+ h = await u.onFulfilled(h);
1544
+ } catch (b) {
1545
+ if (u.onRejected)
1546
+ h = await u.onRejected(b);
1120
1547
  else
1121
- throw m;
1548
+ throw b;
1122
1549
  }
1123
- return p.data;
1124
- } catch (o) {
1125
- throw o instanceof Error && o.name === "AbortError" ? new Error(`Request timeout after ${a.timeout}ms`) : o;
1550
+ return h.data;
1551
+ } catch (r) {
1552
+ throw r instanceof Error && r.name === "AbortError" ? new Error(`Request timeout after ${a.timeout}ms`) : r;
1126
1553
  } finally {
1127
- clearTimeout(r);
1554
+ clearTimeout(n);
1128
1555
  }
1129
1556
  }
1130
1557
  /**
1131
1558
  * GET request
1132
1559
  */
1133
- async get(s, t) {
1134
- return this.executeRequest(s, { ...t, method: "GET" });
1560
+ async get(i, t) {
1561
+ return this.executeRequest(i, { ...t, method: "GET" });
1135
1562
  }
1136
1563
  /**
1137
1564
  * POST request
1138
1565
  */
1139
- async post(s, t, e) {
1140
- return this.executeRequest(s, {
1566
+ async post(i, t, e) {
1567
+ return this.executeRequest(i, {
1141
1568
  ...e,
1142
1569
  method: "POST",
1143
1570
  body: typeof t == "string" || t instanceof FormData ? t : JSON.stringify(t)
@@ -1146,8 +1573,8 @@ class I {
1146
1573
  /**
1147
1574
  * PUT request
1148
1575
  */
1149
- async put(s, t, e) {
1150
- return this.executeRequest(s, {
1576
+ async put(i, t, e) {
1577
+ return this.executeRequest(i, {
1151
1578
  ...e,
1152
1579
  method: "PUT",
1153
1580
  body: typeof t == "string" || t instanceof FormData ? t : JSON.stringify(t)
@@ -1156,8 +1583,8 @@ class I {
1156
1583
  /**
1157
1584
  * PATCH request
1158
1585
  */
1159
- async patch(s, t, e) {
1160
- return this.executeRequest(s, {
1586
+ async patch(i, t, e) {
1587
+ return this.executeRequest(i, {
1161
1588
  ...e,
1162
1589
  method: "PATCH",
1163
1590
  body: typeof t == "string" || t instanceof FormData ? t : JSON.stringify(t)
@@ -1166,28 +1593,129 @@ class I {
1166
1593
  /**
1167
1594
  * DELETE request
1168
1595
  */
1169
- async delete(s, t) {
1170
- return this.executeRequest(s, { ...t, method: "DELETE" });
1596
+ async delete(i, t) {
1597
+ return this.executeRequest(i, { ...t, method: "DELETE" });
1171
1598
  }
1172
1599
  /**
1173
1600
  * HEAD request
1174
1601
  */
1175
- async head(s, t) {
1176
- return this.executeRequest(s, { ...t, method: "HEAD" });
1602
+ async head(i, t) {
1603
+ return this.executeRequest(i, { ...t, method: "HEAD" });
1604
+ }
1605
+ }
1606
+ const J = new U();
1607
+ function x(l, i) {
1608
+ return l ? l.querySelector(i) : null;
1609
+ }
1610
+ function G(l, i) {
1611
+ return l ? l.querySelectorAll(i) : [];
1612
+ }
1613
+ function X(l, i) {
1614
+ return l ? l.querySelector(`#${i}`) : null;
1615
+ }
1616
+ function K(l, i, t, e, a) {
1617
+ if (!l) return null;
1618
+ const s = l.querySelector(`#${i}`);
1619
+ return s ? (s.addEventListener(t, e, a), s) : null;
1620
+ }
1621
+ function Q(l, i) {
1622
+ return x(l, i);
1623
+ }
1624
+ function Z(l, i) {
1625
+ return x(l, i);
1626
+ }
1627
+ function tt(l, i) {
1628
+ return x(l, i);
1629
+ }
1630
+ const N = "input, select, textarea, ui-input, ui-select, ui-date-picker, ui-checkbox, ui-upload";
1631
+ function y(l) {
1632
+ return l.getAttribute("name") || l.getAttribute("id") || "";
1633
+ }
1634
+ function j(l) {
1635
+ const i = l.tagName.toLowerCase();
1636
+ if (i === "ui-checkbox")
1637
+ return l.hasAttribute("checked");
1638
+ if (i === "ui-upload") {
1639
+ const a = l == null ? void 0 : l.filesValue;
1640
+ return Array.isArray(a) && a.length > 0 ? a : [];
1641
+ }
1642
+ const t = l == null ? void 0 : l.value;
1643
+ if (typeof t == "string" && t !== "")
1644
+ return t;
1645
+ const e = l.getAttribute("value");
1646
+ return e || "";
1647
+ }
1648
+ function et(l, i = {}) {
1649
+ const { includeDisabled: t = !1, includeEmpty: e = !0 } = i, a = {}, s = /* @__PURE__ */ new Map();
1650
+ l.querySelectorAll('input[type="checkbox"]').forEach((r) => {
1651
+ const o = y(r);
1652
+ o && s.set(o, (s.get(o) || 0) + 1);
1653
+ });
1654
+ const n = Array.from(l.querySelectorAll(N));
1655
+ for (const r of n) {
1656
+ if (!t && (r.disabled || r.hasAttribute("disabled"))) continue;
1657
+ const o = y(r);
1658
+ if (!o) continue;
1659
+ if (r instanceof HTMLInputElement) {
1660
+ const c = r.type;
1661
+ if (c === "checkbox") {
1662
+ if ((s.get(o) || 0) > 1) {
1663
+ const u = a[o] || [];
1664
+ r.checked && u.push(r.value || "on"), a[o] = u;
1665
+ } else
1666
+ a[o] = r.checked;
1667
+ continue;
1668
+ }
1669
+ if (c === "radio") {
1670
+ r.checked && (a[o] = r.value);
1671
+ continue;
1672
+ }
1673
+ if (c === "file") {
1674
+ const h = Array.from(r.files ?? []);
1675
+ (e || h.length > 0) && (a[o] = h);
1676
+ continue;
1677
+ }
1678
+ (e || r.value !== "") && (a[o] = r.value);
1679
+ continue;
1680
+ }
1681
+ if (r instanceof HTMLSelectElement) {
1682
+ if (r.multiple) {
1683
+ const c = Array.from(r.selectedOptions).map((h) => h.value);
1684
+ (e || c.length > 0) && (a[o] = c);
1685
+ } else (e || r.value !== "") && (a[o] = r.value);
1686
+ continue;
1687
+ }
1688
+ if (r instanceof HTMLTextAreaElement) {
1689
+ (e || r.value !== "") && (a[o] = r.value);
1690
+ continue;
1691
+ }
1692
+ const d = j(r);
1693
+ (e || (Array.isArray(d) ? d.length > 0 : d !== "")) && (a[o] = d);
1177
1694
  }
1695
+ return a;
1178
1696
  }
1179
- const O = new I();
1180
1697
  export {
1181
- I as HTTPClient,
1182
- $ as UIButton,
1183
- T as UICard,
1184
- z as UICheckbox,
1185
- C as UIDatePicker,
1186
- A as UIInput,
1187
- L as UIModal,
1188
- S as UIPagination,
1189
- Y as UISelect,
1190
- E as UITable,
1191
- R as UITabs,
1192
- O as http
1698
+ U as HTTPClient,
1699
+ C as UIButton,
1700
+ P as UICard,
1701
+ D as UICheckbox,
1702
+ L as UIDatePicker,
1703
+ S as UIInput,
1704
+ M as UIModal,
1705
+ I as UIPagination,
1706
+ R as UISelect,
1707
+ F as UIStepper,
1708
+ z as UITable,
1709
+ Y as UITabs,
1710
+ H as UIToast,
1711
+ V as UIUpload,
1712
+ K as addEventListenerById,
1713
+ X as getElementById,
1714
+ et as getFormValues,
1715
+ J as http,
1716
+ x as queryElement,
1717
+ G as queryElements,
1718
+ tt as queryModal,
1719
+ Z as queryPagination,
1720
+ Q as queryTable
1193
1721
  };