@dybo-ai/design 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CLAUDE.md CHANGED
@@ -17,10 +17,12 @@ This `CLAUDE.md` is itself shipped to consumers (it's in `package.json`'s `files
17
17
  | `tokens.mjs` | ESM flat exports (`color`, `space`, `radius`, etc.) |
18
18
  | `tokens.cjs` | CommonJS mirror of `tokens.mjs` |
19
19
  | `theme.css` | CSS custom properties + `.dybo-*` helper classes (`.dybo-glass`, `.dybo-btn`, `.dybo-input`, `.dybo-badge`) |
20
- | `tailwind-preset.cjs` | Tailwind theme extension (`dybo-*` utilities) |
21
- | `react/index.jsx` | Thin React wrappers (`Button`, `Card`, `Input`, `Badge`) over the `theme.css` classes — requires the consumer to import `theme.css` separately |
20
+ | `portal-tokens.css` | HSL shadcn drop-in for client portal / ticket prototype (`--background`, `--primary`, etc.) — mirrors `portal` namespace in `tokens.json` |
21
+ | `src/index.tsx` | React components over `theme.css` classes — requires the consumer to import `theme.css` separately |
22
22
 
23
- **When changing a token value or adding a new one, update all five in the same change.** There's no automated check that catches drift between them (a Style Dictionary generation pipeline is proposed but not implemented — see `docs/SETUP.md` Part E).
23
+ **When changing a token value or adding a new one, update all mirrors in the same change** (`tokens.json`, `tokens.mjs`, `tokens.cjs`, `theme.css`, and `portal-tokens.css` when portal HSL vars are affected). There's no automated check that catches drift between them (a Style Dictionary generation pipeline is proposed but not implemented — see `docs/SETUP.md` Part E).
24
+
25
+ `portal` namespace in `tokens.json` holds ticket-management / client-portal values (priority badges, ChatWoot statuses, operator background). See `docs/portal-token-mapping.md` for the full ticket ↔ dybo mapping.
24
26
 
25
27
  `assets/` holds static brand image files (currently the logo) — it's shipped via `package.json`'s `files` list and importable as `@dybo-ai/design/assets/<file>`, but it's not part of the token-mirror sync described above.
26
28
 
@@ -54,7 +56,8 @@ How to consume (pick per app):
54
56
 
55
57
  - Tailwind app → `@import "@dybo-ai/design/theme.css"` in CSS, use `dybo-*` utilities.
56
58
  - Non-Tailwind → `import "@dybo-ai/design/theme.css"` and use `.dybo-glass`, `.dybo-btn`, `.dybo-input`, `.dybo-badge`.
57
- - React `import { Button, Card, Input, Badge } from "@dybo-ai/design"` (also import the CSS).
58
- - Programmatic values → `import { color, space, radius } from "@dybo-ai/design/tokens"`.
59
+ - Client portal / Tickets (shadcn HSL) `@import "@dybo-ai/design/portal-tokens.css"` as drop-in for prototype `tokens.css`.
60
+ - React → `import { Button, Card, IconRail, ScopeTabs, PriorityBadge, TicketStatusBadge } from "@dybo-ai/design"` (also import the CSS).
61
+ - Programmatic values → `import { color, portal, space, radius } from "@dybo-ai/design/tokens"`.
59
62
 
60
63
  Reference `tokens.json` for the full token list and `docs/design-system.md` for rationale. Semantic "danger" is red `#a21a17` — ignore Figma's mislabeled orange "Feedback/Error".
package/dist/index.cjs CHANGED
@@ -112,13 +112,122 @@ function Badge({ status = "brand", className, ...props }) {
112
112
  );
113
113
  }
114
114
  var cx5 = (...c) => c.filter(Boolean).join(" ");
115
+ function IconRailItem({
116
+ active = false,
117
+ className,
118
+ children,
119
+ ...props
120
+ }) {
121
+ return /* @__PURE__ */ jsxRuntime.jsx(
122
+ "a",
123
+ {
124
+ className: cx5(
125
+ "dybo-icon-rail__item",
126
+ active ? "dybo-icon-rail__item--active" : void 0,
127
+ className
128
+ ),
129
+ ...props,
130
+ children
131
+ }
132
+ );
133
+ }
134
+ function IconRail({ brand, children, className }) {
135
+ return /* @__PURE__ */ jsxRuntime.jsxs("aside", { className: cx5("dybo-icon-rail", className), children: [
136
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dybo-icon-rail__brand", children: brand }),
137
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dybo-icon-rail__nav", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dybo-icon-rail__pill", children: /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "dybo-icon-rail__items", children }) }) })
138
+ ] });
139
+ }
140
+ var cx6 = (...c) => c.filter(Boolean).join(" ");
141
+ function NavTabs({ tabs, active, onChange, className }) {
142
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cx6("dybo-navtabs", className), role: "tablist", children: tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
143
+ "button",
144
+ {
145
+ type: "button",
146
+ role: "tab",
147
+ "aria-selected": tab.key === active,
148
+ disabled: tab.disabled,
149
+ className: cx6(
150
+ "dybo-navtab",
151
+ tab.key === active ? "dybo-navtab--active" : void 0
152
+ ),
153
+ onClick: () => !tab.disabled && onChange(tab.key),
154
+ children: tab.label
155
+ },
156
+ tab.key
157
+ )) });
158
+ }
159
+ var cx7 = (...c) => c.filter(Boolean).join(" ");
160
+ function ScopeTabs({ tabs, active, onChange, className }) {
161
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cx7("dybo-scope", className), role: "tablist", children: tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsxs(
162
+ "button",
163
+ {
164
+ type: "button",
165
+ role: "tab",
166
+ "aria-selected": tab.key === active,
167
+ disabled: tab.disabled,
168
+ className: cx7(
169
+ "dybo-scope-tab",
170
+ tab.key === active ? "dybo-scope-tab--active" : void 0
171
+ ),
172
+ onClick: () => !tab.disabled && onChange(tab.key),
173
+ children: [
174
+ tab.label,
175
+ tab.count !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "dybo-scope-count", children: tab.count })
176
+ ]
177
+ },
178
+ tab.key
179
+ )) });
180
+ }
181
+ var cx8 = (...c) => c.filter(Boolean).join(" ");
182
+ function PriorityBadge({
183
+ priority,
184
+ className,
185
+ children,
186
+ ...props
187
+ }) {
188
+ return /* @__PURE__ */ jsxRuntime.jsx(
189
+ "span",
190
+ {
191
+ className: cx8("dybo-priority", `dybo-priority--${priority}`, className),
192
+ ...props,
193
+ children: children ?? priority
194
+ }
195
+ );
196
+ }
197
+ var cx9 = (...c) => c.filter(Boolean).join(" ");
198
+ var defaultLabels = {
199
+ open: "Open",
200
+ pending: "Pending",
201
+ snoozed: "Snoozed",
202
+ resolved: "Resolved"
203
+ };
204
+ function TicketStatusBadge({
205
+ status,
206
+ className,
207
+ children,
208
+ ...props
209
+ }) {
210
+ return /* @__PURE__ */ jsxRuntime.jsx(
211
+ "span",
212
+ {
213
+ className: cx9(
214
+ "dybo-ticket-status",
215
+ `dybo-ticket-status--${status}`,
216
+ className
217
+ ),
218
+ ...props,
219
+ children: children ?? defaultLabels[status]
220
+ }
221
+ );
222
+ }
223
+ var cx10 = (...c) => c.filter(Boolean).join(" ");
115
224
  function AppShell({
116
225
  sidebar,
117
226
  topBar,
118
227
  children,
119
228
  className
120
229
  }) {
121
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx5("dybo-app-shell", className), children: [
230
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx10("dybo-app-shell", className), children: [
122
231
  sidebar,
123
232
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "dybo-main", children: [
124
233
  topBar,
@@ -126,7 +235,7 @@ function AppShell({
126
235
  ] })
127
236
  ] });
128
237
  }
129
- var cx6 = (...c) => c.filter(Boolean).join(" ");
238
+ var cx11 = (...c) => c.filter(Boolean).join(" ");
130
239
  function Sidebar({
131
240
  brand,
132
241
  children,
@@ -135,7 +244,7 @@ function Sidebar({
135
244
  onLogout,
136
245
  className
137
246
  }) {
138
- return /* @__PURE__ */ jsxRuntime.jsxs("aside", { className: cx6("dybo-sidebar", className), children: [
247
+ return /* @__PURE__ */ jsxRuntime.jsxs("aside", { className: cx11("dybo-sidebar", className), children: [
139
248
  brand && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dybo-sidebar__brand", children: brand }),
140
249
  /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "dybo-sidebar__nav", children }),
141
250
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "dybo-sidebar__footer", children: [
@@ -176,14 +285,14 @@ function Sidebar({
176
285
  ] })
177
286
  ] });
178
287
  }
179
- var cx7 = (...c) => c.filter(Boolean).join(" ");
288
+ var cx12 = (...c) => c.filter(Boolean).join(" ");
180
289
  function TopBar({ title, children, className }) {
181
- return /* @__PURE__ */ jsxRuntime.jsxs("header", { className: cx7("dybo-topbar", className), children: [
290
+ return /* @__PURE__ */ jsxRuntime.jsxs("header", { className: cx12("dybo-topbar", className), children: [
182
291
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "dybo-topbar__title", children: title }),
183
292
  children
184
293
  ] });
185
294
  }
186
- var cx8 = (...c) => c.filter(Boolean).join(" ");
295
+ var cx13 = (...c) => c.filter(Boolean).join(" ");
187
296
  function NavItem({
188
297
  label,
189
298
  href,
@@ -192,7 +301,7 @@ function NavItem({
192
301
  onClick,
193
302
  className
194
303
  }) {
195
- const baseClass = cx8(
304
+ const baseClass = cx13(
196
305
  "dybo-nav-item",
197
306
  active ? "dybo-nav-item--active" : void 0,
198
307
  className
@@ -209,7 +318,7 @@ function NavItem({
209
318
  function NavSection({ label }) {
210
319
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dybo-sidebar__section", children: label });
211
320
  }
212
- var cx9 = (...c) => c.filter(Boolean).join(" ");
321
+ var cx14 = (...c) => c.filter(Boolean).join(" ");
213
322
  function DataTable({
214
323
  columns,
215
324
  rows,
@@ -223,11 +332,11 @@ function DataTable({
223
332
  if (typeof rowKey === "function") return rowKey(row, index);
224
333
  return row[rowKey];
225
334
  }
226
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cx9("dybo-table-wrap", className), children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "dybo-table", children: [
335
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cx14("dybo-table-wrap", className), children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "dybo-table", children: [
227
336
  /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { children: columns.map((col) => /* @__PURE__ */ jsxRuntime.jsx(
228
337
  "th",
229
338
  {
230
- className: cx9(
339
+ className: cx14(
231
340
  col.align === "left" ? "left" : void 0,
232
341
  col.className
233
342
  ),
@@ -249,7 +358,7 @@ function DataTable({
249
358
  ) }) : rows.map((row, index) => /* @__PURE__ */ jsxRuntime.jsx(
250
359
  "tr",
251
360
  {
252
- className: cx9(
361
+ className: cx14(
253
362
  onRowClick ? "dybo-table__row--clickable" : void 0
254
363
  ),
255
364
  onClick: onRowClick ? () => onRowClick(row) : void 0,
@@ -258,7 +367,7 @@ function DataTable({
258
367
  return /* @__PURE__ */ jsxRuntime.jsx(
259
368
  "td",
260
369
  {
261
- className: cx9(
370
+ className: cx14(
262
371
  col.align === "left" ? "left" : void 0,
263
372
  col.className
264
373
  ),
@@ -272,16 +381,16 @@ function DataTable({
272
381
  )) })
273
382
  ] }) });
274
383
  }
275
- var cx10 = (...c) => c.filter(Boolean).join(" ");
384
+ var cx15 = (...c) => c.filter(Boolean).join(" ");
276
385
  function Tabs({ tabs, active, onChange, className }) {
277
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cx10("dybo-tabs", className), role: "tablist", children: tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
386
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cx15("dybo-tabs", className), role: "tablist", children: tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
278
387
  "button",
279
388
  {
280
389
  type: "button",
281
390
  role: "tab",
282
391
  "aria-selected": tab.key === active,
283
392
  disabled: tab.disabled,
284
- className: cx10(
393
+ className: cx15(
285
394
  "dybo-tab",
286
395
  tab.key === active ? "dybo-tab--active" : void 0
287
396
  ),
@@ -291,22 +400,22 @@ function Tabs({ tabs, active, onChange, className }) {
291
400
  tab.key
292
401
  )) });
293
402
  }
294
- var cx11 = (...c) => c.filter(Boolean).join(" ");
403
+ var cx16 = (...c) => c.filter(Boolean).join(" ");
295
404
  function OverviewField({
296
405
  label,
297
406
  value,
298
407
  className,
299
408
  style
300
409
  }) {
301
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx11("dybo-overview-field", className), style, children: [
410
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx16("dybo-overview-field", className), style, children: [
302
411
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "dybo-overview-field__label", children: label }),
303
412
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "dybo-overview-field__value", children: value })
304
413
  ] });
305
414
  }
306
415
  function OverviewGrid({ fields, className }) {
307
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cx11("dybo-overview-grid", className), children: fields.map((field, i) => /* @__PURE__ */ jsxRuntime.jsx(OverviewField, { ...field }, i)) });
416
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cx16("dybo-overview-grid", className), children: fields.map((field, i) => /* @__PURE__ */ jsxRuntime.jsx(OverviewField, { ...field }, i)) });
308
417
  }
309
- var cx12 = (...c) => c.filter(Boolean).join(" ");
418
+ var cx17 = (...c) => c.filter(Boolean).join(" ");
310
419
  function Select({
311
420
  label,
312
421
  error,
@@ -334,7 +443,7 @@ function Select({
334
443
  "select",
335
444
  {
336
445
  id: selectId,
337
- className: cx12("dybo-select", className),
446
+ className: cx17("dybo-select", className),
338
447
  style: error ? {
339
448
  borderColor: "var(--dybo-danger)",
340
449
  boxShadow: "0 0 0 3px rgba(162,26,23,0.12)"
@@ -365,7 +474,7 @@ var icons = {
365
474
  danger: "\u2715",
366
475
  info: "\u2139"
367
476
  };
368
- var cx13 = (...c) => c.filter(Boolean).join(" ");
477
+ var cx18 = (...c) => c.filter(Boolean).join(" ");
369
478
  function Alert({
370
479
  variant = "info",
371
480
  children,
@@ -375,7 +484,7 @@ function Alert({
375
484
  return /* @__PURE__ */ jsxRuntime.jsxs(
376
485
  "div",
377
486
  {
378
- className: cx13("dybo-alert", `dybo-alert--${variant}`, className),
487
+ className: cx18("dybo-alert", `dybo-alert--${variant}`, className),
379
488
  role: "alert",
380
489
  children: [
381
490
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { flexShrink: 0, fontWeight: 700 }, children: icons[variant] }),
@@ -470,14 +579,14 @@ function Modal({
470
579
  document.body
471
580
  );
472
581
  }
473
- var cx14 = (...c) => c.filter(Boolean).join(" ");
582
+ var cx19 = (...c) => c.filter(Boolean).join(" ");
474
583
  function LoginCard({
475
584
  logo,
476
585
  subtitle,
477
586
  children,
478
587
  className
479
588
  }) {
480
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dybo-login-wrap", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx14("dybo-login-card", className), children: [
589
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dybo-login-wrap", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx19("dybo-login-card", className), children: [
481
590
  logo && /* @__PURE__ */ jsxRuntime.jsx(
482
591
  "div",
483
592
  {
@@ -500,16 +609,22 @@ exports.Badge = Badge;
500
609
  exports.Button = Button;
501
610
  exports.Card = Card;
502
611
  exports.DataTable = DataTable;
612
+ exports.IconRail = IconRail;
613
+ exports.IconRailItem = IconRailItem;
503
614
  exports.Input = Input;
504
615
  exports.LoginCard = LoginCard;
505
616
  exports.Modal = Modal;
506
617
  exports.NavItem = NavItem;
507
618
  exports.NavSection = NavSection;
619
+ exports.NavTabs = NavTabs;
508
620
  exports.OverviewField = OverviewField;
509
621
  exports.OverviewGrid = OverviewGrid;
622
+ exports.PriorityBadge = PriorityBadge;
623
+ exports.ScopeTabs = ScopeTabs;
510
624
  exports.Select = Select;
511
625
  exports.Sidebar = Sidebar;
512
626
  exports.Tabs = Tabs;
627
+ exports.TicketStatusBadge = TicketStatusBadge;
513
628
  exports.TopBar = TopBar;
514
629
  //# sourceMappingURL=index.cjs.map
515
630
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/Badge.tsx","../src/components/AppShell.tsx","../src/components/Sidebar.tsx","../src/components/TopBar.tsx","../src/components/NavItem.tsx","../src/components/DataTable.tsx","../src/components/Tabs.tsx","../src/components/OverviewGrid.tsx","../src/components/Select.tsx","../src/components/Alert.tsx","../src/components/Modal.tsx","../src/components/LoginCard.tsx"],"names":["jsx","cx","jsxs","Fragment","useRef","useEffect","createPortal"],"mappings":";;;;;;;AAWA,IAAM,SAAA,GAAwC;AAAA,EAC5C,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,EAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,MAAA,CAAO;AAAA,EACrB,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,uBACEA,cAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,UAAA;AAAA,QACA,aAAa,OAAO,CAAA,CAAA;AAAA,QACpB,UAAU,IAAI,CAAA;AAAA,QACd;AAAA,OACF;AAAA,MACA,UAAU,QAAA,IAAY,OAAA;AAAA,MACrB,GAAG,KAAA;AAAA,MAEH,oBAAU,QAAA,GAAM;AAAA;AAAA,GACnB;AAEJ;ACpCA,IAAMC,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,IAAA,CAAK;AAAA,EACnB,OAAA,GAAU,EAAA;AAAA,EACV,KAAA,GAAQ,KAAA;AAAA,EACR,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAe;AACb,EAAA,uBACED,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,GAAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,MACrC,KAAA,EAAO;AAAA,QACL,OAAA;AAAA,QACA,UAAA,EAAY,QAAQ,gCAAA,GAAmC,MAAA;AAAA,QACvD,GAAG;AAAA,OACL;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACrBA,IAAMA,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,KAAA,CAAM,EAAE,KAAA,EAAO,KAAA,EAAO,WAAW,EAAA,EAAI,GAAG,OAAM,EAAgB;AAC5E,EAAA,MAAM,UAAU,EAAA,IAAM,KAAA,EAAO,aAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC9D,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,QAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,CAAA,EAAE,EAC5D,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCF,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,OAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,0BAAA;AAAA,UACV,UAAA,EAAY,gCAAA;AAAA,UACZ,KAAA,EAAO;AAAA,SACT;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,oBAEFA,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,OAAA;AAAA,QACJ,SAAA,EAAWC,GAAAA;AAAA,UACT,YAAA;AAAA,UACA,QAAQ,mBAAA,GAAsB,MAAA;AAAA,UAC9B;AAAA,SACF;AAAA,QACA,OACE,KAAA,GACI;AAAA,UACE,WAAA,EAAa,oBAAA;AAAA,UACb,SAAA,EAAW;AAAA,SACb,GACA,MAAA;AAAA,QAEL,GAAG;AAAA;AAAA,KACN;AAAA,IACC,yBACCD,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,0BAAA;AAAA,UACV,KAAA,EAAO,oBAAA;AAAA,UACP,UAAA,EAAY;AAAA,SACd;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;ACzCA,IAAMC,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,MAAM,EAAE,MAAA,GAAS,SAAS,SAAA,EAAW,GAAG,OAAM,EAAgB;AAC5E,EAAA,uBACED,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAWC,GAAAA,CAAG,YAAA,EAAc,CAAA,YAAA,EAAe,MAAM,IAAI,SAAS,CAAA;AAAA,MAC7D,GAAG;AAAA;AAAA,GACN;AAEJ;AChBA,IAAMA,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,QAAA,CAAS;AAAA,EACvB,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,uBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAWD,GAAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA,EAC3C,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,oBACDC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA;AAAA,MAAA,MAAA;AAAA,sBACDF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAgB,QAAA,EAAS;AAAA,KAAA,EAC1C;AAAA,GAAA,EACF,CAAA;AAEJ;ACXA,IAAMC,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,uBACEC,eAAAA,CAAC,OAAA,EAAA,EAAM,WAAWD,GAAAA,CAAG,cAAA,EAAgB,SAAS,CAAA,EAC3C,QAAA,EAAA;AAAA,IAAA,KAAA,oBAASD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAuB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACtDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAqB,QAAA,EAAS,CAAA;AAAA,oBAC7CE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,IAAA,oBACCA,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,UAAA,EAAY;AAAA,WACd;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,QAAQ,QAAA,EAAU,MAAA,EAAO,EAAI,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA;AAAA,YACzD,IAAA,CAAK,KAAA,oBACJA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,MAAA,EAAO,EAC/C,eAAK,KAAA,EACR;AAAA;AAAA;AAAA,OAEJ;AAAA,MAED,MAAA;AAAA,MACA,4BACCA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,QAAA;AAAA,UACT,KAAA,EAAO;AAAA,YACL,UAAA,EAAY,aAAA;AAAA,YACZ,MAAA,EAAQ,kCAAA;AAAA,YACR,KAAA,EAAO,0BAAA;AAAA,YACP,OAAA,EAAS,UAAA;AAAA,YACT,QAAA,EAAU,MAAA;AAAA,YACV,YAAA,EAAc,KAAA;AAAA,YACd,MAAA,EAAQ,SAAA;AAAA,YACR,UAAA,EAAY,SAAA;AAAA,YACZ,UAAA,EAAY;AAAA,WACd;AAAA,UACD,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AC/DA,IAAMC,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,MAAA,CAAO,EAAE,KAAA,EAAO,QAAA,EAAU,WAAU,EAAiB;AACnE,EAAA,uBACEC,eAAAA,CAAC,QAAA,EAAA,EAAO,WAAWD,GAAAA,CAAG,aAAA,EAAe,SAAS,CAAA,EAC5C,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IAC3C;AAAA,GAAA,EACH,CAAA;AAEJ;ACHA,IAAMC,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA,GAAS,KAAA;AAAA,EACT,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,SAAA,GAAYA,GAAAA;AAAA,IAChB,eAAA;AAAA,IACA,SAAS,uBAAA,GAA0B,MAAA;AAAA,IACnC;AAAA,GACF;AAEA,EAAA,MAAM,OAAA,mBACJC,eAAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,IAAA,mBACCH,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,YAAY,CAAA,EAAG,OAAA,EAAS,MAAA,EAAO,EAAI,gBAAK,CAAA,mBAEvDA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,oBAAA,EAAqB,CAAA;AAAA,IAEtC;AAAA,GAAA,EACH,CAAA;AAGF,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,uBACEA,cAAAA,CAAC,GAAA,EAAA,EAAE,MAAY,SAAA,EAAW,SAAA,EAAW,SAClC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,eAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAW,SAAA,EAAW,SACzC,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;AAEO,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAAqB;AACtD,EAAA,uBAAOA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAyB,QAAA,EAAA,KAAA,EAAM,CAAA;AACvD;ACrCA,IAAMC,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,SAAA,CAAgD;AAAA,EAC9D,OAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,GAAe,mBAAA;AAAA,EACf;AACF,CAAA,EAA0B;AACxB,EAAA,SAAS,SAAA,CAAU,KAAW,KAAA,EAAgC;AAC5D,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,IAAA,IAAI,OAAO,MAAA,KAAW,UAAA,EAAY,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA;AAC1D,IAAA,OAAO,IAAI,MAAM,CAAA;AAAA,EACnB;AAEA,EAAA,uBACED,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,GAAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAC7C,QAAA,kBAAAC,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,YAAA,EACf,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,WACC,QAAA,kBAAAA,cAAAA,CAAC,QACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAWC,GAAAA;AAAA,UACT,GAAA,CAAI,KAAA,KAAU,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,UAChC,GAAA,CAAI;AAAA,SACN;AAAA,QAEC,QAAA,EAAA,GAAA,CAAI;AAAA,OAAA;AAAA,MANA,GAAA,CAAI;AAAA,KAQZ,GACH,CAAA,EACF,CAAA;AAAA,oBACAD,eAAC,OAAA,EAAA,EACE,QAAA,EAAA,IAAA,CAAK,WAAW,CAAA,mBACfA,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAS,OAAA,CAAQ,MAAA;AAAA,QACjB,KAAA,EAAO;AAAA,UACL,SAAA,EAAW,QAAA;AAAA,UACX,OAAA,EAAS,MAAA;AAAA,UACT,KAAA,EAAO;AAAA,SACT;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,OAEL,CAAA,GAEA,IAAA,CAAK,IAAI,CAAC,GAAA,EAAK,0BACbA,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAWC,GAAAA;AAAA,UACT,aAAa,4BAAA,GAA+B;AAAA,SAC9C;AAAA,QACA,OAAA,EAAS,UAAA,GAAa,MAAM,UAAA,CAAW,GAAG,CAAA,GAAI,MAAA;AAAA,QAE7C,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACpB,UAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AACzB,UAAA,uBACED,cAAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAWC,GAAAA;AAAA,gBACT,GAAA,CAAI,KAAA,KAAU,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,gBAChC,GAAA,CAAI;AAAA,eACN;AAAA,cAEC,QAAA,EAAA,GAAA,CAAI,SACD,GAAA,CAAI,MAAA,CAAO,OAAO,GAAG,CAAA,GACrB,MAAA,CAAO,KAAA,IAAS,EAAE;AAAA,aAAA;AAAA,YARjB,GAAA,CAAI;AAAA,WASX;AAAA,QAEJ,CAAC;AAAA,OAAA;AAAA,MArBI,SAAA,CAAU,KAAK,KAAK;AAAA,KAuB5B,CAAA,EAEL;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AC3FA,IAAMA,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,KAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,WAAU,EAAe;AACtE,EAAA,uBACED,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,KAAG,WAAA,EAAa,SAAS,CAAA,EAAG,IAAA,EAAK,SAAA,EAC9C,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,wBACTD,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,KAAA;AAAA,MACL,eAAA,EAAe,IAAI,GAAA,KAAQ,MAAA;AAAA,MAC3B,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,SAAA,EAAWC,IAAAA;AAAA,QACT,UAAA;AAAA,QACA,GAAA,CAAI,GAAA,KAAQ,MAAA,GAAS,kBAAA,GAAqB;AAAA,OAC5C;AAAA,MACA,SAAS,MAAM,CAAC,IAAI,QAAA,IAAY,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,MAE/C,QAAA,EAAA,GAAA,CAAI;AAAA,KAAA;AAAA,IAXA,GAAA,CAAI;AAAA,GAaZ,CAAA,EACH,CAAA;AAEJ;ACpBA,IAAMA,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,uBACEC,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAWD,KAAG,qBAAA,EAAuB,SAAS,GAAG,KAAA,EACpD,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EAA8B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACpDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA8B,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EACtD,CAAA;AAEJ;AAEO,SAAS,YAAA,CAAa,EAAE,MAAA,EAAQ,SAAA,EAAU,EAAuB;AACtE,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,KAAG,oBAAA,EAAsB,SAAS,GAC/C,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,qBAClBD,cAAAA,CAAC,aAAA,EAAA,EAAuB,GAAG,KAAA,EAAA,EAAP,CAAc,CACnC,CAAA,EACH,CAAA;AAEJ;AC3BA,IAAMC,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,EAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,MAAM,WAAW,EAAA,IAAM,KAAA,EAAO,aAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC/D,EAAA,uBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,CAAA,EAAE,EAC5D,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCF,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,QAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,0BAAA;AAAA,UACV,UAAA,EAAY,gCAAA;AAAA,UACZ,KAAA,EAAO;AAAA,SACT;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,oBAEFE,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,QAAA;AAAA,QACJ,SAAA,EAAWD,IAAAA,CAAG,aAAA,EAAe,SAAS,CAAA;AAAA,QACtC,OACE,KAAA,GACI;AAAA,UACE,WAAA,EAAa,oBAAA;AAAA,UACb,SAAA,EAAW;AAAA,SACb,GACA,MAAA;AAAA,QAEL,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,WAAA,oBACCD,cAAAA,CAAC,QAAA,EAAA,EAAO,OAAM,EAAA,EAAG,QAAA,EAAQ,MACtB,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,UAED,QAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,eAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,UAAU,GAAA,CAAI,QAAA,EACrD,cAAI,KAAA,EAAA,EADM,GAAA,CAAI,KAEjB,CACD;AAAA;AAAA;AAAA,KACH;AAAA,IACC,yBACCA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,0BAAA;AAAA,UACV,KAAA,EAAO,oBAAA;AAAA,UACP,UAAA,EAAY;AAAA,SACd;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;ACpEA,IAAM,KAAA,GAAsC;AAAA,EAC1C,OAAA,EAAS,QAAA;AAAA,EACT,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAEA,IAAMC,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,KAAA,CAAM;AAAA,EACpB,OAAA,GAAU,MAAA;AAAA,EACV,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAgB;AACd,EAAA,uBACEC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAWD,IAAAA,CAAG,YAAA,EAAc,CAAA,YAAA,EAAe,OAAO,IAAI,SAAS,CAAA;AAAA,MAC/D,IAAA,EAAK,OAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,EAAG,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,CAAM,OAAO,CAAA,EAAE,CAAA;AAAA,wBACjEA,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,CAAA,IAAM,QAAA,EAAS,CAAA;AAAA,QACvC,2BACCA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,OAAA;AAAA,YACT,YAAA,EAAW,QAAA;AAAA,YACX,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,aAAA;AAAA,cACZ,MAAA,EAAQ,MAAA;AAAA,cACR,MAAA,EAAQ,SAAA;AAAA,cACR,KAAA,EAAO,SAAA;AAAA,cACP,OAAA,EAAS,OAAA;AAAA,cACT,UAAA,EAAY,CAAA;AAAA,cACZ,QAAA,EAAU,MAAA;AAAA,cACV,UAAA,EAAY,CAAA;AAAA,cACZ,OAAA,EAAS;AAAA,aACX;AAAA,YACD,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,GAEJ;AAEJ;AC3CO,SAAS,KAAA,CAAM;AAAA,EACpB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA,GAAW,GAAA;AAAA,EACX,eAAA,GAAkB;AACpB,CAAA,EAAgB;AACd,EAAA,MAAM,SAAA,GAAYI,aAAuB,IAAI,CAAA;AAE7C,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,SAAS,UAAU,CAAA,EAAkB;AACnC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,OAAA,EAAQ;AAAA,IAClC;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC9C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,SAAS,CAAA;AAAA,EAChE,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAElB,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,OAAOC,qBAAA;AAAA,oBACLN,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,qBAAA;AAAA,QACV,OAAA,EAAS,kBAAkB,OAAA,GAAU,MAAA;AAAA,QACrC,YAAA,EAAW,MAAA;AAAA,QACX,IAAA,EAAK,QAAA;AAAA,QAEL,QAAA,kBAAAE,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,SAAA;AAAA,YACL,SAAA,EAAU,YAAA;AAAA,YACV,KAAA,EAAO,EAAE,QAAA,EAAS;AAAA,YAClB,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YAElC,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,KAAA,mBAAQF,eAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qBAAqB,QAAA,EAAA,KAAA,EAAM,CAAA,mBAAQA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA;AAAA,gCAChEA,cAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,SAAA,EAAU,mBAAA;AAAA,oBACV,OAAA,EAAS,OAAA;AAAA,oBACT,YAAA,EAAW,QAAA;AAAA,oBAEX,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EACnD,QAAA,kBAAAA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,CAAA,EAAE,sBAAA;AAAA,wBACF,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAY,GAAA;AAAA,wBACZ,aAAA,EAAc;AAAA;AAAA,qBAChB,EACF;AAAA;AAAA;AACF,eAAA,EACF,CAAA;AAAA,8BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAoB,QAAA,EAAS,CAAA;AAAA,cAC3C,0BAAUA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAsB,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA;AACzD;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;ACjEA,IAAMC,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,uBACED,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWD,IAAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAC5C,QAAA,EAAA;AAAA,IAAA,IAAA,oBACCD,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,cAAA,EAAgB,QAAA;AAAA,UAChB,YAAA,EAAc;AAAA,SAChB;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,IAED,4BAAYA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAA6B,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,IAC/D;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ","file":"index.cjs","sourcesContent":["import { type ButtonHTMLAttributes } from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface IButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n loading?: boolean;\n}\n\nconst sizeClass: Record<ButtonSize, string> = {\n sm: \"dybo-btn--sm\",\n md: \"\",\n lg: \"dybo-btn--lg\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n disabled,\n className,\n children,\n ...props\n}: IButtonProps) {\n return (\n <button\n className={cx(\n \"dybo-btn\",\n `dybo-btn--${variant}`,\n sizeClass[size],\n className,\n )}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? \"…\" : children}\n </button>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport interface ICardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: number | string;\n solid?: boolean;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Card({\n padding = 24,\n solid = false,\n className,\n style,\n ...props\n}: ICardProps) {\n return (\n <div\n className={cx(\"dybo-glass\", className)}\n style={{\n padding,\n background: solid ? \"var(--dybo-surface-card-solid)\" : undefined,\n ...style,\n }}\n {...props}\n />\n );\n}\n","import { type InputHTMLAttributes } from \"react\";\n\nexport interface IInputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Input({ label, error, className, id, ...props }: IInputProps) {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={inputId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <input\n id={inputId}\n className={cx(\n \"dybo-input\",\n error ? \"dybo-input--error\" : undefined,\n className,\n )}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n />\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type BadgeStatus =\n | \"brand\"\n | \"resolved\"\n | \"high\"\n | \"medium\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport interface IBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status?: BadgeStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Badge({ status = \"brand\", className, ...props }: IBadgeProps) {\n return (\n <span\n className={cx(\"dybo-badge\", `dybo-badge--${status}`, className)}\n {...props}\n />\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface IAppShellProps {\n sidebar: ReactNode;\n topBar?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function AppShell({\n sidebar,\n topBar,\n children,\n className,\n}: IAppShellProps) {\n return (\n <div className={cx(\"dybo-app-shell\", className)}>\n {sidebar}\n <div className=\"dybo-main\">\n {topBar}\n <div className=\"dybo-content\">{children}</div>\n </div>\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ISidebarUser {\n name: string;\n email?: string;\n}\n\nexport interface ISidebarProps {\n brand?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n user?: ISidebarUser;\n onLogout?: () => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Sidebar({\n brand,\n children,\n footer,\n user,\n onLogout,\n className,\n}: ISidebarProps) {\n return (\n <aside className={cx(\"dybo-sidebar\", className)}>\n {brand && <div className=\"dybo-sidebar__brand\">{brand}</div>}\n <nav className=\"dybo-sidebar__nav\">{children}</nav>\n <div className=\"dybo-sidebar__footer\">\n {user && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n lineHeight: 1.3,\n }}\n >\n <b style={{ color: \"#fff\", fontSize: \"13px\" }}>{user.name}</b>\n {user.email && (\n <span style={{ color: \"#7f8592\", fontSize: \"11px\" }}>\n {user.email}\n </span>\n )}\n </div>\n )}\n {footer}\n {onLogout && (\n <button\n type=\"button\"\n onClick={onLogout}\n style={{\n background: \"transparent\",\n border: \"1px solid rgba(255,255,255,0.18)\",\n color: \"var(--dybo-sidebar-text)\",\n padding: \"6px 10px\",\n fontSize: \"12px\",\n borderRadius: \"8px\",\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n transition: \"background 0.15s, border-color 0.15s\",\n }}\n >\n Log out\n </button>\n )}\n </div>\n </aside>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ITopBarProps {\n title: string;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function TopBar({ title, children, className }: ITopBarProps) {\n return (\n <header className={cx(\"dybo-topbar\", className)}>\n <span className=\"dybo-topbar__title\">{title}</span>\n {children}\n </header>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface INavItemProps {\n label: string;\n href?: string;\n active?: boolean;\n icon?: ReactNode;\n onClick?: () => void;\n className?: string;\n}\n\nexport interface INavSectionProps {\n label: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavItem({\n label,\n href,\n active = false,\n icon,\n onClick,\n className,\n}: INavItemProps) {\n const baseClass = cx(\n \"dybo-nav-item\",\n active ? \"dybo-nav-item--active\" : undefined,\n className,\n );\n\n const content = (\n <>\n {icon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{icon}</span>\n ) : (\n <span className=\"dybo-nav-item__dot\" />\n )}\n {label}\n </>\n );\n\n if (href) {\n return (\n <a href={href} className={baseClass} onClick={onClick}>\n {content}\n </a>\n );\n }\n\n return (\n <button type=\"button\" className={baseClass} onClick={onClick}>\n {content}\n </button>\n );\n}\n\nexport function NavSection({ label }: INavSectionProps) {\n return <div className=\"dybo-sidebar__section\">{label}</div>;\n}\n","import { type ReactNode } from \"react\";\n\nexport type ColumnAlign = \"left\" | \"right\" | \"center\";\n\nexport interface IColumn<TRow = Record<string, unknown>> {\n key: string;\n label: string;\n align?: ColumnAlign;\n format?: (value: unknown, row: TRow) => ReactNode;\n className?: string;\n}\n\nexport interface IDataTableProps<\n TRow extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: IColumn<TRow>[];\n rows: TRow[];\n rowKey?: keyof TRow | ((row: TRow, index: number) => string | number);\n onRowClick?: (row: TRow) => void;\n emptyMessage?: string;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function DataTable<TRow extends Record<string, unknown>>({\n columns,\n rows,\n rowKey,\n onRowClick,\n emptyMessage = \"Nenhum resultado.\",\n className,\n}: IDataTableProps<TRow>) {\n function getRowKey(row: TRow, index: number): string | number {\n if (!rowKey) return index;\n if (typeof rowKey === \"function\") return rowKey(row, index);\n return row[rowKey] as string | number;\n }\n\n return (\n <div className={cx(\"dybo-table-wrap\", className)}>\n <table className=\"dybo-table\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n style={{\n textAlign: \"center\",\n padding: \"32px\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {emptyMessage}\n </td>\n </tr>\n ) : (\n rows.map((row, index) => (\n <tr\n key={getRowKey(row, index)}\n className={cx(\n onRowClick ? \"dybo-table__row--clickable\" : undefined,\n )}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n >\n {columns.map((col) => {\n const value = row[col.key];\n return (\n <td\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.format\n ? col.format(value, row)\n : String(value ?? \"\")}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n","export interface ITab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ITabsProps {\n tabs: ITab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Tabs({ tabs, active, onChange, className }: ITabsProps) {\n return (\n <div className={cx(\"dybo-tabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-tab\",\n tab.key === active ? \"dybo-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","import { type ReactNode, type CSSProperties } from \"react\";\n\nexport interface IOverviewField {\n label: string;\n value: ReactNode;\n className?: string;\n}\n\nexport interface IOverviewGridProps {\n fields: IOverviewField[];\n className?: string;\n}\n\nexport interface IOverviewFieldProps extends IOverviewField {\n style?: CSSProperties;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function OverviewField({\n label,\n value,\n className,\n style,\n}: IOverviewFieldProps) {\n return (\n <div className={cx(\"dybo-overview-field\", className)} style={style}>\n <span className=\"dybo-overview-field__label\">{label}</span>\n <span className=\"dybo-overview-field__value\">{value}</span>\n </div>\n );\n}\n\nexport function OverviewGrid({ fields, className }: IOverviewGridProps) {\n return (\n <div className={cx(\"dybo-overview-grid\", className)}>\n {fields.map((field, i) => (\n <OverviewField key={i} {...field} />\n ))}\n </div>\n );\n}\n","import { type SelectHTMLAttributes } from \"react\";\n\nexport interface ISelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ISelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n error?: string;\n options: ISelectOption[];\n placeholder?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Select({\n label,\n error,\n options,\n placeholder,\n className,\n id,\n ...props\n}: ISelectProps) {\n const selectId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={selectId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <select\n id={selectId}\n className={cx(\"dybo-select\", className)}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport type AlertVariant = \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport interface IAlertProps {\n variant?: AlertVariant;\n children: ReactNode;\n onClose?: () => void;\n className?: string;\n}\n\nconst icons: Record<AlertVariant, string> = {\n success: \"✓\",\n warning: \"⚠\",\n danger: \"✕\",\n info: \"ℹ\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Alert({\n variant = \"info\",\n children,\n onClose,\n className,\n}: IAlertProps) {\n return (\n <div\n className={cx(\"dybo-alert\", `dybo-alert--${variant}`, className)}\n role=\"alert\"\n >\n <span style={{ flexShrink: 0, fontWeight: 700 }}>{icons[variant]}</span>\n <span style={{ flexGrow: 1 }}>{children}</span>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Fechar\"\n style={{\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n color: \"inherit\",\n padding: \"0 4px\",\n flexShrink: 0,\n fontSize: \"16px\",\n lineHeight: 1,\n opacity: 0.7,\n }}\n >\n ×\n </button>\n )}\n </div>\n );\n}\n","import { type ReactNode, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface IModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n footer?: ReactNode;\n maxWidth?: number | string;\n closeOnBackdrop?: boolean;\n}\n\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n maxWidth = 520,\n closeOnBackdrop = true,\n}: IModalProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") onClose();\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose]);\n\n if (!open) return null;\n\n return createPortal(\n <div\n className=\"dybo-modal-backdrop\"\n onClick={closeOnBackdrop ? onClose : undefined}\n aria-modal=\"true\"\n role=\"dialog\"\n >\n <div\n ref={dialogRef}\n className=\"dybo-modal\"\n style={{ maxWidth }}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"dybo-modal__header\">\n {title ? <h2 className=\"dybo-modal__title\">{title}</h2> : <span />}\n <button\n type=\"button\"\n className=\"dybo-modal__close\"\n onClick={onClose}\n aria-label=\"Fechar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M2 2l12 12M14 2L2 14\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n <div className=\"dybo-modal__body\">{children}</div>\n {footer && <div className=\"dybo-modal__footer\">{footer}</div>}\n </div>\n </div>,\n document.body,\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ILoginCardProps {\n logo?: ReactNode;\n subtitle?: string;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function LoginCard({\n logo,\n subtitle,\n children,\n className,\n}: ILoginCardProps) {\n return (\n <div className=\"dybo-login-wrap\">\n <div className={cx(\"dybo-login-card\", className)}>\n {logo && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: 16,\n }}\n >\n {logo}\n </div>\n )}\n {subtitle && <p className=\"dybo-login-card__subtitle\">{subtitle}</p>}\n {children}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/Badge.tsx","../src/components/IconRail.tsx","../src/components/NavTabs.tsx","../src/components/ScopeTabs.tsx","../src/components/PriorityBadge.tsx","../src/components/TicketStatusBadge.tsx","../src/components/AppShell.tsx","../src/components/Sidebar.tsx","../src/components/TopBar.tsx","../src/components/NavItem.tsx","../src/components/DataTable.tsx","../src/components/Tabs.tsx","../src/components/OverviewGrid.tsx","../src/components/Select.tsx","../src/components/Alert.tsx","../src/components/Modal.tsx","../src/components/LoginCard.tsx"],"names":["jsx","cx","jsxs","Fragment","useRef","useEffect","createPortal"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type ButtonHTMLAttributes } from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface IButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n loading?: boolean;\n}\n\nconst sizeClass: Record<ButtonSize, string> = {\n sm: \"dybo-btn--sm\",\n md: \"\",\n lg: \"dybo-btn--lg\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n disabled,\n className,\n children,\n ...props\n}: IButtonProps) {\n return (\n <button\n className={cx(\n \"dybo-btn\",\n `dybo-btn--${variant}`,\n sizeClass[size],\n className,\n )}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? \"…\" : children}\n </button>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport interface ICardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: number | string;\n solid?: boolean;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Card({\n padding = 24,\n solid = false,\n className,\n style,\n ...props\n}: ICardProps) {\n return (\n <div\n className={cx(\"dybo-glass\", className)}\n style={{\n padding,\n background: solid ? \"var(--dybo-surface-card-solid)\" : undefined,\n ...style,\n }}\n {...props}\n />\n );\n}\n","import { type InputHTMLAttributes } from \"react\";\n\nexport interface IInputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Input({ label, error, className, id, ...props }: IInputProps) {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={inputId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <input\n id={inputId}\n className={cx(\n \"dybo-input\",\n error ? \"dybo-input--error\" : undefined,\n className,\n )}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n />\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type BadgeStatus =\n | \"brand\"\n | \"resolved\"\n | \"high\"\n | \"medium\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport interface IBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status?: BadgeStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Badge({ status = \"brand\", className, ...props }: IBadgeProps) {\n return (\n <span\n className={cx(\"dybo-badge\", `dybo-badge--${status}`, className)}\n {...props}\n />\n );\n}\n","import { type HTMLAttributes, type ReactNode } from \"react\";\n\nexport interface IIconRailItemProps extends HTMLAttributes<HTMLAnchorElement> {\n href?: string;\n active?: boolean;\n title?: string;\n children: ReactNode;\n}\n\nexport interface IIconRailProps {\n brand: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function IconRailItem({\n active = false,\n className,\n children,\n ...props\n}: IIconRailItemProps) {\n return (\n <a\n className={cx(\n \"dybo-icon-rail__item\",\n active ? \"dybo-icon-rail__item--active\" : undefined,\n className,\n )}\n {...props}\n >\n {children}\n </a>\n );\n}\n\nexport function IconRail({ brand, children, className }: IIconRailProps) {\n return (\n <aside className={cx(\"dybo-icon-rail\", className)}>\n <div className=\"dybo-icon-rail__brand\">{brand}</div>\n <div className=\"dybo-icon-rail__nav\">\n <div className=\"dybo-icon-rail__pill\">\n <nav className=\"dybo-icon-rail__items\">{children}</nav>\n </div>\n </div>\n </aside>\n );\n}\n","export interface INavTab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface INavTabsProps {\n tabs: INavTab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavTabs({ tabs, active, onChange, className }: INavTabsProps) {\n return (\n <div className={cx(\"dybo-navtabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-navtab\",\n tab.key === active ? \"dybo-navtab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","export interface IScopeTab {\n key: string;\n label: string;\n count?: number;\n disabled?: boolean;\n}\n\nexport interface IScopeTabsProps {\n tabs: IScopeTab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function ScopeTabs({ tabs, active, onChange, className }: IScopeTabsProps) {\n return (\n <div className={cx(\"dybo-scope\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-scope-tab\",\n tab.key === active ? \"dybo-scope-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n {tab.count !== undefined && (\n <span className=\"dybo-scope-count\">{tab.count}</span>\n )}\n </button>\n ))}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type PriorityLevel = \"urgent\" | \"high\" | \"medium\" | \"low\" | \"none\";\n\nexport interface IPriorityBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n priority: PriorityLevel;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function PriorityBadge({\n priority,\n className,\n children,\n ...props\n}: IPriorityBadgeProps) {\n return (\n <span\n className={cx(\"dybo-priority\", `dybo-priority--${priority}`, className)}\n {...props}\n >\n {children ?? priority}\n </span>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type TicketStatus = \"open\" | \"pending\" | \"snoozed\" | \"resolved\";\n\nexport interface ITicketStatusBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status: TicketStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nconst defaultLabels: Record<TicketStatus, string> = {\n open: \"Open\",\n pending: \"Pending\",\n snoozed: \"Snoozed\",\n resolved: \"Resolved\",\n};\n\nexport function TicketStatusBadge({\n status,\n className,\n children,\n ...props\n}: ITicketStatusBadgeProps) {\n return (\n <span\n className={cx(\n \"dybo-ticket-status\",\n `dybo-ticket-status--${status}`,\n className,\n )}\n {...props}\n >\n {children ?? defaultLabels[status]}\n </span>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface IAppShellProps {\n sidebar: ReactNode;\n topBar?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function AppShell({\n sidebar,\n topBar,\n children,\n className,\n}: IAppShellProps) {\n return (\n <div className={cx(\"dybo-app-shell\", className)}>\n {sidebar}\n <div className=\"dybo-main\">\n {topBar}\n <div className=\"dybo-content\">{children}</div>\n </div>\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ISidebarUser {\n name: string;\n email?: string;\n}\n\nexport interface ISidebarProps {\n brand?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n user?: ISidebarUser;\n onLogout?: () => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Sidebar({\n brand,\n children,\n footer,\n user,\n onLogout,\n className,\n}: ISidebarProps) {\n return (\n <aside className={cx(\"dybo-sidebar\", className)}>\n {brand && <div className=\"dybo-sidebar__brand\">{brand}</div>}\n <nav className=\"dybo-sidebar__nav\">{children}</nav>\n <div className=\"dybo-sidebar__footer\">\n {user && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n lineHeight: 1.3,\n }}\n >\n <b style={{ color: \"#fff\", fontSize: \"13px\" }}>{user.name}</b>\n {user.email && (\n <span style={{ color: \"#7f8592\", fontSize: \"11px\" }}>\n {user.email}\n </span>\n )}\n </div>\n )}\n {footer}\n {onLogout && (\n <button\n type=\"button\"\n onClick={onLogout}\n style={{\n background: \"transparent\",\n border: \"1px solid rgba(255,255,255,0.18)\",\n color: \"var(--dybo-sidebar-text)\",\n padding: \"6px 10px\",\n fontSize: \"12px\",\n borderRadius: \"8px\",\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n transition: \"background 0.15s, border-color 0.15s\",\n }}\n >\n Log out\n </button>\n )}\n </div>\n </aside>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ITopBarProps {\n title: string;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function TopBar({ title, children, className }: ITopBarProps) {\n return (\n <header className={cx(\"dybo-topbar\", className)}>\n <span className=\"dybo-topbar__title\">{title}</span>\n {children}\n </header>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface INavItemProps {\n label: string;\n href?: string;\n active?: boolean;\n icon?: ReactNode;\n onClick?: () => void;\n className?: string;\n}\n\nexport interface INavSectionProps {\n label: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavItem({\n label,\n href,\n active = false,\n icon,\n onClick,\n className,\n}: INavItemProps) {\n const baseClass = cx(\n \"dybo-nav-item\",\n active ? \"dybo-nav-item--active\" : undefined,\n className,\n );\n\n const content = (\n <>\n {icon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{icon}</span>\n ) : (\n <span className=\"dybo-nav-item__dot\" />\n )}\n {label}\n </>\n );\n\n if (href) {\n return (\n <a href={href} className={baseClass} onClick={onClick}>\n {content}\n </a>\n );\n }\n\n return (\n <button type=\"button\" className={baseClass} onClick={onClick}>\n {content}\n </button>\n );\n}\n\nexport function NavSection({ label }: INavSectionProps) {\n return <div className=\"dybo-sidebar__section\">{label}</div>;\n}\n","import { type ReactNode } from \"react\";\n\nexport type ColumnAlign = \"left\" | \"right\" | \"center\";\n\nexport interface IColumn<TRow = Record<string, unknown>> {\n key: string;\n label: string;\n align?: ColumnAlign;\n format?: (value: unknown, row: TRow) => ReactNode;\n className?: string;\n}\n\nexport interface IDataTableProps<\n TRow extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: IColumn<TRow>[];\n rows: TRow[];\n rowKey?: keyof TRow | ((row: TRow, index: number) => string | number);\n onRowClick?: (row: TRow) => void;\n emptyMessage?: string;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function DataTable<TRow extends Record<string, unknown>>({\n columns,\n rows,\n rowKey,\n onRowClick,\n emptyMessage = \"Nenhum resultado.\",\n className,\n}: IDataTableProps<TRow>) {\n function getRowKey(row: TRow, index: number): string | number {\n if (!rowKey) return index;\n if (typeof rowKey === \"function\") return rowKey(row, index);\n return row[rowKey] as string | number;\n }\n\n return (\n <div className={cx(\"dybo-table-wrap\", className)}>\n <table className=\"dybo-table\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n style={{\n textAlign: \"center\",\n padding: \"32px\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {emptyMessage}\n </td>\n </tr>\n ) : (\n rows.map((row, index) => (\n <tr\n key={getRowKey(row, index)}\n className={cx(\n onRowClick ? \"dybo-table__row--clickable\" : undefined,\n )}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n >\n {columns.map((col) => {\n const value = row[col.key];\n return (\n <td\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.format\n ? col.format(value, row)\n : String(value ?? \"\")}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n","export interface ITab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ITabsProps {\n tabs: ITab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Tabs({ tabs, active, onChange, className }: ITabsProps) {\n return (\n <div className={cx(\"dybo-tabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-tab\",\n tab.key === active ? \"dybo-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","import { type ReactNode, type CSSProperties } from \"react\";\n\nexport interface IOverviewField {\n label: string;\n value: ReactNode;\n className?: string;\n}\n\nexport interface IOverviewGridProps {\n fields: IOverviewField[];\n className?: string;\n}\n\nexport interface IOverviewFieldProps extends IOverviewField {\n style?: CSSProperties;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function OverviewField({\n label,\n value,\n className,\n style,\n}: IOverviewFieldProps) {\n return (\n <div className={cx(\"dybo-overview-field\", className)} style={style}>\n <span className=\"dybo-overview-field__label\">{label}</span>\n <span className=\"dybo-overview-field__value\">{value}</span>\n </div>\n );\n}\n\nexport function OverviewGrid({ fields, className }: IOverviewGridProps) {\n return (\n <div className={cx(\"dybo-overview-grid\", className)}>\n {fields.map((field, i) => (\n <OverviewField key={i} {...field} />\n ))}\n </div>\n );\n}\n","import { type SelectHTMLAttributes } from \"react\";\n\nexport interface ISelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ISelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n error?: string;\n options: ISelectOption[];\n placeholder?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Select({\n label,\n error,\n options,\n placeholder,\n className,\n id,\n ...props\n}: ISelectProps) {\n const selectId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={selectId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <select\n id={selectId}\n className={cx(\"dybo-select\", className)}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport type AlertVariant = \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport interface IAlertProps {\n variant?: AlertVariant;\n children: ReactNode;\n onClose?: () => void;\n className?: string;\n}\n\nconst icons: Record<AlertVariant, string> = {\n success: \"✓\",\n warning: \"⚠\",\n danger: \"✕\",\n info: \"ℹ\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Alert({\n variant = \"info\",\n children,\n onClose,\n className,\n}: IAlertProps) {\n return (\n <div\n className={cx(\"dybo-alert\", `dybo-alert--${variant}`, className)}\n role=\"alert\"\n >\n <span style={{ flexShrink: 0, fontWeight: 700 }}>{icons[variant]}</span>\n <span style={{ flexGrow: 1 }}>{children}</span>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Fechar\"\n style={{\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n color: \"inherit\",\n padding: \"0 4px\",\n flexShrink: 0,\n fontSize: \"16px\",\n lineHeight: 1,\n opacity: 0.7,\n }}\n >\n ×\n </button>\n )}\n </div>\n );\n}\n","import { type ReactNode, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface IModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n footer?: ReactNode;\n maxWidth?: number | string;\n closeOnBackdrop?: boolean;\n}\n\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n maxWidth = 520,\n closeOnBackdrop = true,\n}: IModalProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") onClose();\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose]);\n\n if (!open) return null;\n\n return createPortal(\n <div\n className=\"dybo-modal-backdrop\"\n onClick={closeOnBackdrop ? onClose : undefined}\n aria-modal=\"true\"\n role=\"dialog\"\n >\n <div\n ref={dialogRef}\n className=\"dybo-modal\"\n style={{ maxWidth }}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"dybo-modal__header\">\n {title ? <h2 className=\"dybo-modal__title\">{title}</h2> : <span />}\n <button\n type=\"button\"\n className=\"dybo-modal__close\"\n onClick={onClose}\n aria-label=\"Fechar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M2 2l12 12M14 2L2 14\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n <div className=\"dybo-modal__body\">{children}</div>\n {footer && <div className=\"dybo-modal__footer\">{footer}</div>}\n </div>\n </div>,\n document.body,\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ILoginCardProps {\n logo?: ReactNode;\n subtitle?: string;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function LoginCard({\n logo,\n subtitle,\n children,\n className,\n}: ILoginCardProps) {\n return (\n <div className=\"dybo-login-wrap\">\n <div className={cx(\"dybo-login-card\", className)}>\n {logo && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: 16,\n }}\n >\n {logo}\n </div>\n )}\n {subtitle && <p className=\"dybo-login-card__subtitle\">{subtitle}</p>}\n {children}\n </div>\n </div>\n );\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -28,6 +28,59 @@ interface IBadgeProps extends HTMLAttributes<HTMLSpanElement> {
28
28
  }
29
29
  declare function Badge({ status, className, ...props }: IBadgeProps): react.JSX.Element;
30
30
 
31
+ interface IIconRailItemProps extends HTMLAttributes<HTMLAnchorElement> {
32
+ href?: string;
33
+ active?: boolean;
34
+ title?: string;
35
+ children: ReactNode;
36
+ }
37
+ interface IIconRailProps {
38
+ brand: ReactNode;
39
+ children?: ReactNode;
40
+ className?: string;
41
+ }
42
+ declare function IconRailItem({ active, className, children, ...props }: IIconRailItemProps): react.JSX.Element;
43
+ declare function IconRail({ brand, children, className }: IIconRailProps): react.JSX.Element;
44
+
45
+ interface INavTab {
46
+ key: string;
47
+ label: string;
48
+ disabled?: boolean;
49
+ }
50
+ interface INavTabsProps {
51
+ tabs: INavTab[];
52
+ active: string;
53
+ onChange: (key: string) => void;
54
+ className?: string;
55
+ }
56
+ declare function NavTabs({ tabs, active, onChange, className }: INavTabsProps): react.JSX.Element;
57
+
58
+ interface IScopeTab {
59
+ key: string;
60
+ label: string;
61
+ count?: number;
62
+ disabled?: boolean;
63
+ }
64
+ interface IScopeTabsProps {
65
+ tabs: IScopeTab[];
66
+ active: string;
67
+ onChange: (key: string) => void;
68
+ className?: string;
69
+ }
70
+ declare function ScopeTabs({ tabs, active, onChange, className }: IScopeTabsProps): react.JSX.Element;
71
+
72
+ type PriorityLevel = "urgent" | "high" | "medium" | "low" | "none";
73
+ interface IPriorityBadgeProps extends HTMLAttributes<HTMLSpanElement> {
74
+ priority: PriorityLevel;
75
+ }
76
+ declare function PriorityBadge({ priority, className, children, ...props }: IPriorityBadgeProps): react.JSX.Element;
77
+
78
+ type TicketStatus = "open" | "pending" | "snoozed" | "resolved";
79
+ interface ITicketStatusBadgeProps extends HTMLAttributes<HTMLSpanElement> {
80
+ status: TicketStatus;
81
+ }
82
+ declare function TicketStatusBadge({ status, className, children, ...props }: ITicketStatusBadgeProps): react.JSX.Element;
83
+
31
84
  interface IAppShellProps {
32
85
  sidebar: ReactNode;
33
86
  topBar?: ReactNode;
@@ -158,4 +211,4 @@ interface ILoginCardProps {
158
211
  }
159
212
  declare function LoginCard({ logo, subtitle, children, className, }: ILoginCardProps): react.JSX.Element;
160
213
 
161
- export { Alert, type AlertVariant, AppShell, Badge, type BadgeStatus, Button, type ButtonSize, type ButtonVariant, Card, type ColumnAlign, DataTable, type IAlertProps, type IAppShellProps, type IBadgeProps, type IButtonProps, type ICardProps, type IColumn, type IDataTableProps, type IInputProps, type ILoginCardProps, type IModalProps, type INavItemProps, type INavSectionProps, type IOverviewField, type IOverviewFieldProps, type IOverviewGridProps, type ISelectOption, type ISelectProps, type ISidebarProps, type ISidebarUser, type ITab, type ITabsProps, type ITopBarProps, Input, LoginCard, Modal, NavItem, NavSection, OverviewField, OverviewGrid, Select, Sidebar, Tabs, TopBar };
214
+ export { Alert, type AlertVariant, AppShell, Badge, type BadgeStatus, Button, type ButtonSize, type ButtonVariant, Card, type ColumnAlign, DataTable, type IAlertProps, type IAppShellProps, type IBadgeProps, type IButtonProps, type ICardProps, type IColumn, type IDataTableProps, type IIconRailItemProps, type IIconRailProps, type IInputProps, type ILoginCardProps, type IModalProps, type INavItemProps, type INavSectionProps, type INavTab, type INavTabsProps, type IOverviewField, type IOverviewFieldProps, type IOverviewGridProps, type IPriorityBadgeProps, type IScopeTab, type IScopeTabsProps, type ISelectOption, type ISelectProps, type ISidebarProps, type ISidebarUser, type ITab, type ITabsProps, type ITicketStatusBadgeProps, type ITopBarProps, IconRail, IconRailItem, Input, LoginCard, Modal, NavItem, NavSection, NavTabs, OverviewField, OverviewGrid, PriorityBadge, type PriorityLevel, ScopeTabs, Select, Sidebar, Tabs, type TicketStatus, TicketStatusBadge, TopBar };