@dybo-ai/design 1.0.1 → 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 +17 -11
- package/README.md +12 -12
- 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 +8 -6
- 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
|
@@ -12,15 +12,17 @@ This `CLAUDE.md` is itself shipped to consumers (it's in `package.json`'s `files
|
|
|
12
12
|
|
|
13
13
|
`tokens.json` is canonical (values + original Figma variable names). Every other token surface is a **manually maintained mirror** of it — there is no code generation:
|
|
14
14
|
|
|
15
|
-
| File
|
|
16
|
-
|
|
17
|
-
| `tokens.mjs`
|
|
18
|
-
| `tokens.cjs`
|
|
19
|
-
| `theme.css`
|
|
20
|
-
| `
|
|
21
|
-
| `
|
|
15
|
+
| File | Mirrors tokens.json as... |
|
|
16
|
+
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
17
|
+
| `tokens.mjs` | ESM flat exports (`color`, `space`, `radius`, etc.) |
|
|
18
|
+
| `tokens.cjs` | CommonJS mirror of `tokens.mjs` |
|
|
19
|
+
| `theme.css` | CSS custom properties + `.dybo-*` helper classes (`.dybo-glass`, `.dybo-btn`, `.dybo-input`, `.dybo-badge`) |
|
|
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
|
|
|
@@ -31,11 +33,13 @@ This `CLAUDE.md` is itself shipped to consumers (it's in `package.json`'s `files
|
|
|
31
33
|
There is no build, lint, or test tooling in this repo — don't invent npm scripts that don't exist (`package.json` has no `scripts` field).
|
|
32
34
|
|
|
33
35
|
Publishing (manual, no CI):
|
|
36
|
+
|
|
34
37
|
```bash
|
|
35
38
|
npm version patch # or minor / major — see docs/SETUP.md Part D for the semver rule
|
|
36
39
|
npm publish
|
|
37
40
|
git push --follow-tags
|
|
38
41
|
```
|
|
42
|
+
|
|
39
43
|
`npm publish --dry-run` is useful to confirm the packed file list matches `package.json`'s `files` array before actually publishing. Publishing requires a `.npmrc` (git-ignored, copy from `.npmrc.example`) with a `GITHUB_TOKEN` that has `write:packages`.
|
|
40
44
|
|
|
41
45
|
## Design system rules for consuming apps
|
|
@@ -49,9 +53,11 @@ When building UI in a DYBO app, use `@dybo-ai/design`. Do not hard-code hex valu
|
|
|
49
53
|
- **Radius:** 12 (buttons/inputs), 20 (cards), 999 (pills).
|
|
50
54
|
|
|
51
55
|
How to consume (pick per app):
|
|
52
|
-
|
|
56
|
+
|
|
57
|
+
- Tailwind app → `@import "@dybo-ai/design/theme.css"` in CSS, use `dybo-*` utilities.
|
|
53
58
|
- Non-Tailwind → `import "@dybo-ai/design/theme.css"` and use `.dybo-glass`, `.dybo-btn`, `.dybo-input`, `.dybo-badge`.
|
|
54
|
-
-
|
|
55
|
-
-
|
|
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"`.
|
|
56
62
|
|
|
57
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/README.md
CHANGED
|
@@ -55,7 +55,7 @@ import "@dybo-ai/design/theme.css";
|
|
|
55
55
|
|
|
56
56
|
```tsx
|
|
57
57
|
import "@dybo-ai/design/theme.css";
|
|
58
|
-
import { Button, Card, Input, Badge } from "@dybo-ai/design
|
|
58
|
+
import { Button, Card, Input, Badge } from "@dybo-ai/design";
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
All components are TypeScript with `I`-prefixed interfaces.
|
|
@@ -87,7 +87,7 @@ import {
|
|
|
87
87
|
TopBar,
|
|
88
88
|
NavItem,
|
|
89
89
|
NavSection,
|
|
90
|
-
} from "@dybo-ai/design
|
|
90
|
+
} from "@dybo-ai/design";
|
|
91
91
|
|
|
92
92
|
function MyApp() {
|
|
93
93
|
return (
|
|
@@ -116,7 +116,7 @@ function MyApp() {
|
|
|
116
116
|
### Glassmorphism card
|
|
117
117
|
|
|
118
118
|
```tsx
|
|
119
|
-
import { Card, Button, Input } from "@dybo-ai/design
|
|
119
|
+
import { Card, Button, Input } from "@dybo-ai/design";
|
|
120
120
|
|
|
121
121
|
<Card>
|
|
122
122
|
<Input label="Name" placeholder="Enter your name" />
|
|
@@ -129,8 +129,8 @@ import { Card, Button, Input } from "@dybo-ai/design/react";
|
|
|
129
129
|
### DataTable
|
|
130
130
|
|
|
131
131
|
```tsx
|
|
132
|
-
import { DataTable } from "@dybo-ai/design
|
|
133
|
-
import type { IColumn } from "@dybo-ai/design
|
|
132
|
+
import { DataTable } from "@dybo-ai/design";
|
|
133
|
+
import type { IColumn } from "@dybo-ai/design";
|
|
134
134
|
|
|
135
135
|
interface IUser {
|
|
136
136
|
id: number;
|
|
@@ -161,7 +161,7 @@ const columns: IColumn<IUser>[] = [
|
|
|
161
161
|
|
|
162
162
|
```tsx
|
|
163
163
|
import { useState } from "react";
|
|
164
|
-
import { Tabs } from "@dybo-ai/design
|
|
164
|
+
import { Tabs } from "@dybo-ai/design";
|
|
165
165
|
|
|
166
166
|
const TABS = [
|
|
167
167
|
{ key: "federal", label: "Federal (IRS)" },
|
|
@@ -185,7 +185,7 @@ function ProjectDetail() {
|
|
|
185
185
|
### Overview grid
|
|
186
186
|
|
|
187
187
|
```tsx
|
|
188
|
-
import { OverviewGrid } from "@dybo-ai/design
|
|
188
|
+
import { OverviewGrid } from "@dybo-ai/design";
|
|
189
189
|
|
|
190
190
|
<OverviewGrid
|
|
191
191
|
fields={[
|
|
@@ -200,7 +200,7 @@ import { OverviewGrid } from "@dybo-ai/design/react";
|
|
|
200
200
|
### Alert
|
|
201
201
|
|
|
202
202
|
```tsx
|
|
203
|
-
import { Alert } from "@dybo-ai/design
|
|
203
|
+
import { Alert } from "@dybo-ai/design";
|
|
204
204
|
|
|
205
205
|
<Alert variant="danger" onClose={() => setError(null)}>
|
|
206
206
|
Failed to save. Please check the data and try again.
|
|
@@ -211,7 +211,7 @@ import { Alert } from "@dybo-ai/design/react";
|
|
|
211
211
|
|
|
212
212
|
```tsx
|
|
213
213
|
import { useState } from "react";
|
|
214
|
-
import { Modal, Button } from "@dybo-ai/design
|
|
214
|
+
import { Modal, Button } from "@dybo-ai/design";
|
|
215
215
|
|
|
216
216
|
function ConfirmDelete() {
|
|
217
217
|
const [open, setOpen] = useState(false);
|
|
@@ -245,7 +245,7 @@ function ConfirmDelete() {
|
|
|
245
245
|
### Login card
|
|
246
246
|
|
|
247
247
|
```tsx
|
|
248
|
-
import { LoginCard, Input, Button } from "@dybo-ai/design
|
|
248
|
+
import { LoginCard, Input, Button } from "@dybo-ai/design";
|
|
249
249
|
|
|
250
250
|
<LoginCard
|
|
251
251
|
logo={<img src="/logo.png" alt="DYBO" height={44} />}
|
|
@@ -273,7 +273,7 @@ import { LoginCard, Input, Button } from "@dybo-ai/design/react";
|
|
|
273
273
|
### Select
|
|
274
274
|
|
|
275
275
|
```tsx
|
|
276
|
-
import { Select } from "@dybo-ai/design
|
|
276
|
+
import { Select } from "@dybo-ai/design";
|
|
277
277
|
|
|
278
278
|
<Select
|
|
279
279
|
label="State"
|
|
@@ -292,7 +292,7 @@ import { Select } from "@dybo-ai/design/react";
|
|
|
292
292
|
## Tokens in JS/TS
|
|
293
293
|
|
|
294
294
|
```ts
|
|
295
|
-
import { color, space, radius } from "@dybo-ai/design";
|
|
295
|
+
import { color, space, radius } from "@dybo-ai/design/tokens";
|
|
296
296
|
|
|
297
297
|
color.brand.blue; // "#5878a7"
|
|
298
298
|
color.semantic.danger.solid; // "#a21a17"
|
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
|