@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 +8 -5
- package/dist/index.cjs +139 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +54 -1
- package/dist/index.d.ts +54 -1
- package/dist/index.js +134 -25
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
- package/portal-tokens.css +184 -0
- package/theme.css +284 -0
- package/tokens.cjs +132 -8
- package/tokens.json +74 -2
- package/tokens.mjs +130 -7
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
|
-
| `
|
|
21
|
-
| `
|
|
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
|
|
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
|
-
-
|
|
58
|
-
-
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
288
|
+
var cx12 = (...c) => c.filter(Boolean).join(" ");
|
|
180
289
|
function TopBar({ title, children, className }) {
|
|
181
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("header", { className:
|
|
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
|
|
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 =
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
384
|
+
var cx15 = (...c) => c.filter(Boolean).join(" ");
|
|
276
385
|
function Tabs({ tabs, active, onChange, className }) {
|
|
277
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className:
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
package/dist/index.cjs.map
CHANGED
|
@@ -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":"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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 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 };
|