@petrarca/sonnet-playground 0.2.0 → 0.4.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/README.md +142 -0
- package/dist/PlayAdvancedComponents-ZYK66UII.js +8 -0
- package/dist/PlayColorPalette-IWECRZUS.js +8 -0
- package/dist/PlayCoreComponents-GXFMB24T.js +8 -0
- package/dist/PlayDataComponents-M4SJ4XEL.js +8 -0
- package/dist/PlayFormComponents-4E2A2Y2W.js +8 -0
- package/dist/PlayFormWidgets-IWJJQ5XL.js +8 -0
- package/dist/PlayForms-FOF3XE6G.js +7 -0
- package/dist/PlayGraph-3F56PREG.js +7 -0
- package/dist/PlayJsonEditor-SYZYEJEA.js +7 -0
- package/dist/PlayShellApi-5O6VYR2X.js +8 -0
- package/dist/PlayShellApi-5O6VYR2X.js.map +1 -0
- package/dist/PlayTypography-T6SMPHUB.js +8 -0
- package/dist/PlayTypography-T6SMPHUB.js.map +1 -0
- package/dist/chunk-32DDRRWU.js +617 -0
- package/dist/chunk-32DDRRWU.js.map +1 -0
- package/dist/chunk-4Y4JFKAK.js +240 -0
- package/dist/chunk-4Y4JFKAK.js.map +1 -0
- package/dist/{chunk-QIETZUEN.js → chunk-6DZ3TSV4.js} +66 -71
- package/dist/chunk-6DZ3TSV4.js.map +1 -0
- package/dist/{chunk-CYNK2P2Q.js → chunk-7IBZEHLI.js} +14 -13
- package/dist/chunk-7IBZEHLI.js.map +1 -0
- package/dist/chunk-C2EZ2ECG.js +40 -0
- package/dist/chunk-C2EZ2ECG.js.map +1 -0
- package/dist/chunk-CQ6PGFRV.js +341 -0
- package/dist/chunk-CQ6PGFRV.js.map +1 -0
- package/dist/{chunk-A3IK3CVW.js → chunk-DA3BIB5N.js} +24 -25
- package/dist/{chunk-A3IK3CVW.js.map → chunk-DA3BIB5N.js.map} +1 -1
- package/dist/chunk-DZB6WFHA.js +401 -0
- package/dist/chunk-DZB6WFHA.js.map +1 -0
- package/dist/{chunk-KAT24CQQ.js → chunk-FZ3ZC7VM.js} +8 -6
- package/dist/chunk-FZ3ZC7VM.js.map +1 -0
- package/dist/{chunk-PGI54O43.js → chunk-VOC5VZG2.js} +84 -46
- package/dist/chunk-VOC5VZG2.js.map +1 -0
- package/dist/{chunk-TZGJH7YS.js → chunk-YEBK2TUW.js} +325 -331
- package/dist/chunk-YEBK2TUW.js.map +1 -0
- package/dist/chunk-YOOWJORD.js +934 -0
- package/dist/chunk-YOOWJORD.js.map +1 -0
- package/dist/index.d.ts +10 -6
- package/dist/index.js +41 -17
- package/dist/index.js.map +1 -1
- package/dist/pages/index.d.ts +15 -11
- package/dist/pages/index.js +20 -12
- package/package.json +6 -6
- package/dist/PlayColorPalette-UFMTJTUB.js +0 -8
- package/dist/PlayCoreComponents-7QCDFQLT.js +0 -7
- package/dist/PlayDataComponents-GZSRTW4F.js +0 -7
- package/dist/PlayFormComponents-RJB6WZHD.js +0 -7
- package/dist/PlayFormWidgets-OFV7TJKH.js +0 -7
- package/dist/PlayForms-24XX5DC6.js +0 -7
- package/dist/PlayGraph-FLGLSUWV.js +0 -8
- package/dist/PlayJsonEditor-4L5INQPU.js +0 -7
- package/dist/PlayTypography-ID6DLFZD.js +0 -8
- package/dist/chunk-5V27QDAY.js +0 -617
- package/dist/chunk-5V27QDAY.js.map +0 -1
- package/dist/chunk-CYNK2P2Q.js.map +0 -1
- package/dist/chunk-FTN2A5YL.js +0 -20
- package/dist/chunk-FTN2A5YL.js.map +0 -1
- package/dist/chunk-GYKEPHHA.js +0 -1154
- package/dist/chunk-GYKEPHHA.js.map +0 -1
- package/dist/chunk-KAT24CQQ.js.map +0 -1
- package/dist/chunk-P7I5IDXA.js +0 -432
- package/dist/chunk-P7I5IDXA.js.map +0 -1
- package/dist/chunk-PGI54O43.js.map +0 -1
- package/dist/chunk-QIETZUEN.js.map +0 -1
- package/dist/chunk-TZGJH7YS.js.map +0 -1
- /package/dist/{PlayColorPalette-UFMTJTUB.js.map → PlayAdvancedComponents-ZYK66UII.js.map} +0 -0
- /package/dist/{PlayCoreComponents-7QCDFQLT.js.map → PlayColorPalette-IWECRZUS.js.map} +0 -0
- /package/dist/{PlayDataComponents-GZSRTW4F.js.map → PlayCoreComponents-GXFMB24T.js.map} +0 -0
- /package/dist/{PlayFormComponents-RJB6WZHD.js.map → PlayDataComponents-M4SJ4XEL.js.map} +0 -0
- /package/dist/{PlayFormWidgets-OFV7TJKH.js.map → PlayFormComponents-4E2A2Y2W.js.map} +0 -0
- /package/dist/{PlayForms-24XX5DC6.js.map → PlayFormWidgets-IWJJQ5XL.js.map} +0 -0
- /package/dist/{PlayGraph-FLGLSUWV.js.map → PlayForms-FOF3XE6G.js.map} +0 -0
- /package/dist/{PlayJsonEditor-4L5INQPU.js.map → PlayGraph-3F56PREG.js.map} +0 -0
- /package/dist/{PlayTypography-ID6DLFZD.js.map → PlayJsonEditor-SYZYEJEA.js.map} +0 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PlaygroundSection
|
|
3
|
+
} from "./chunk-C2EZ2ECG.js";
|
|
4
|
+
|
|
5
|
+
// src/pages/PlayShellApi.tsx
|
|
6
|
+
import { Button } from "@petrarca/sonnet-ui";
|
|
7
|
+
import {
|
|
8
|
+
notification,
|
|
9
|
+
dialog,
|
|
10
|
+
navigation,
|
|
11
|
+
panel,
|
|
12
|
+
sidePane
|
|
13
|
+
} from "@petrarca/sonnet-shell";
|
|
14
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
+
function PlayShellApi() {
|
|
16
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
17
|
+
/* @__PURE__ */ jsx(
|
|
18
|
+
PlaygroundSection,
|
|
19
|
+
{
|
|
20
|
+
title: "notification",
|
|
21
|
+
description: "Toasts via the shell notification API \u2014 wraps Sonner.",
|
|
22
|
+
variant: "card",
|
|
23
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
24
|
+
/* @__PURE__ */ jsx(
|
|
25
|
+
Button,
|
|
26
|
+
{
|
|
27
|
+
variant: "outline",
|
|
28
|
+
size: "sm",
|
|
29
|
+
onClick: () => notification.success("Operation completed."),
|
|
30
|
+
children: "success()"
|
|
31
|
+
}
|
|
32
|
+
),
|
|
33
|
+
/* @__PURE__ */ jsx(
|
|
34
|
+
Button,
|
|
35
|
+
{
|
|
36
|
+
variant: "outline",
|
|
37
|
+
size: "sm",
|
|
38
|
+
onClick: () => notification.error("Something went wrong."),
|
|
39
|
+
children: "error()"
|
|
40
|
+
}
|
|
41
|
+
),
|
|
42
|
+
/* @__PURE__ */ jsx(
|
|
43
|
+
Button,
|
|
44
|
+
{
|
|
45
|
+
variant: "outline",
|
|
46
|
+
size: "sm",
|
|
47
|
+
onClick: () => notification.warning("Proceed with caution."),
|
|
48
|
+
children: "warning()"
|
|
49
|
+
}
|
|
50
|
+
),
|
|
51
|
+
/* @__PURE__ */ jsx(
|
|
52
|
+
Button,
|
|
53
|
+
{
|
|
54
|
+
variant: "outline",
|
|
55
|
+
size: "sm",
|
|
56
|
+
onClick: () => notification.info("Here is some information."),
|
|
57
|
+
children: "info()"
|
|
58
|
+
}
|
|
59
|
+
),
|
|
60
|
+
/* @__PURE__ */ jsx(
|
|
61
|
+
Button,
|
|
62
|
+
{
|
|
63
|
+
variant: "outline",
|
|
64
|
+
size: "sm",
|
|
65
|
+
onClick: () => notification.promise(
|
|
66
|
+
new Promise((resolve) => setTimeout(resolve, 2e3)),
|
|
67
|
+
{
|
|
68
|
+
loading: "Loading...",
|
|
69
|
+
success: "Done!",
|
|
70
|
+
error: "Failed."
|
|
71
|
+
}
|
|
72
|
+
),
|
|
73
|
+
children: "promise()"
|
|
74
|
+
}
|
|
75
|
+
),
|
|
76
|
+
/* @__PURE__ */ jsx(
|
|
77
|
+
Button,
|
|
78
|
+
{
|
|
79
|
+
variant: "outline",
|
|
80
|
+
size: "sm",
|
|
81
|
+
onClick: () => notification.dismiss(),
|
|
82
|
+
children: "dismiss()"
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
] })
|
|
86
|
+
}
|
|
87
|
+
),
|
|
88
|
+
/* @__PURE__ */ jsx(
|
|
89
|
+
PlaygroundSection,
|
|
90
|
+
{
|
|
91
|
+
title: "dialog",
|
|
92
|
+
description: "Confirmation dialog via the shell dialog API.",
|
|
93
|
+
variant: "card",
|
|
94
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
95
|
+
/* @__PURE__ */ jsx(
|
|
96
|
+
Button,
|
|
97
|
+
{
|
|
98
|
+
variant: "outline",
|
|
99
|
+
size: "sm",
|
|
100
|
+
onClick: async () => {
|
|
101
|
+
const confirmed = await dialog.confirm({
|
|
102
|
+
title: "Delete Resource",
|
|
103
|
+
description: "This will permanently delete the resource. Are you sure?",
|
|
104
|
+
confirmLabel: "Delete",
|
|
105
|
+
variant: "destructive"
|
|
106
|
+
});
|
|
107
|
+
notification.info(
|
|
108
|
+
confirmed ? "User confirmed." : "User cancelled."
|
|
109
|
+
);
|
|
110
|
+
},
|
|
111
|
+
children: "confirm() \u2014 destructive"
|
|
112
|
+
}
|
|
113
|
+
),
|
|
114
|
+
/* @__PURE__ */ jsx(
|
|
115
|
+
Button,
|
|
116
|
+
{
|
|
117
|
+
variant: "outline",
|
|
118
|
+
size: "sm",
|
|
119
|
+
onClick: async () => {
|
|
120
|
+
const confirmed = await dialog.confirm({
|
|
121
|
+
title: "Save Changes",
|
|
122
|
+
description: "Do you want to save your changes?"
|
|
123
|
+
});
|
|
124
|
+
notification.info(
|
|
125
|
+
confirmed ? "User confirmed." : "User cancelled."
|
|
126
|
+
);
|
|
127
|
+
},
|
|
128
|
+
children: "confirm() \u2014 default"
|
|
129
|
+
}
|
|
130
|
+
)
|
|
131
|
+
] })
|
|
132
|
+
}
|
|
133
|
+
),
|
|
134
|
+
/* @__PURE__ */ jsx(
|
|
135
|
+
PlaygroundSection,
|
|
136
|
+
{
|
|
137
|
+
title: "navigation",
|
|
138
|
+
description: "Programmatic navigation via the shell navigation API.",
|
|
139
|
+
variant: "card",
|
|
140
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
141
|
+
/* @__PURE__ */ jsx(
|
|
142
|
+
Button,
|
|
143
|
+
{
|
|
144
|
+
variant: "outline",
|
|
145
|
+
size: "sm",
|
|
146
|
+
onClick: () => navigation.goTo("/home"),
|
|
147
|
+
children: 'goTo("/home")'
|
|
148
|
+
}
|
|
149
|
+
),
|
|
150
|
+
/* @__PURE__ */ jsx(
|
|
151
|
+
Button,
|
|
152
|
+
{
|
|
153
|
+
variant: "outline",
|
|
154
|
+
size: "sm",
|
|
155
|
+
onClick: () => navigation.goTo("/playground"),
|
|
156
|
+
children: 'goTo("/playground")'
|
|
157
|
+
}
|
|
158
|
+
),
|
|
159
|
+
/* @__PURE__ */ jsx(
|
|
160
|
+
Button,
|
|
161
|
+
{
|
|
162
|
+
variant: "outline",
|
|
163
|
+
size: "sm",
|
|
164
|
+
onClick: () => navigation.openCommandMenu(),
|
|
165
|
+
children: "openCommandMenu()"
|
|
166
|
+
}
|
|
167
|
+
),
|
|
168
|
+
/* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: () => navigation.back(), children: "back()" })
|
|
169
|
+
] })
|
|
170
|
+
}
|
|
171
|
+
),
|
|
172
|
+
/* @__PURE__ */ jsx(
|
|
173
|
+
PlaygroundSection,
|
|
174
|
+
{
|
|
175
|
+
title: "panel",
|
|
176
|
+
description: "Shell-managed slide-over panel \u2014 renders content inside a Sheet owned by the shell.",
|
|
177
|
+
variant: "card",
|
|
178
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
179
|
+
/* @__PURE__ */ jsx(
|
|
180
|
+
Button,
|
|
181
|
+
{
|
|
182
|
+
variant: "outline",
|
|
183
|
+
size: "sm",
|
|
184
|
+
onClick: () => panel.open({
|
|
185
|
+
title: "Panel Demo",
|
|
186
|
+
description: "This is a shell-managed slide-over panel.",
|
|
187
|
+
content: /* @__PURE__ */ jsxs("div", { className: "p-4 space-y-3", children: [
|
|
188
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm", children: "This content is rendered inside the shell's Sheet component." }),
|
|
189
|
+
/* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
|
|
190
|
+
"Use ",
|
|
191
|
+
/* @__PURE__ */ jsx("code", { children: "panel.open()" }),
|
|
192
|
+
" to show any React content in a slide-over panel."
|
|
193
|
+
] })
|
|
194
|
+
] })
|
|
195
|
+
}),
|
|
196
|
+
children: "open() \u2014 narrow"
|
|
197
|
+
}
|
|
198
|
+
),
|
|
199
|
+
/* @__PURE__ */ jsx(
|
|
200
|
+
Button,
|
|
201
|
+
{
|
|
202
|
+
variant: "outline",
|
|
203
|
+
size: "sm",
|
|
204
|
+
onClick: () => panel.open({
|
|
205
|
+
title: "Wide Panel",
|
|
206
|
+
content: /* @__PURE__ */ jsxs("div", { className: "p-4 space-y-3", children: [
|
|
207
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Wide panel (default)" }),
|
|
208
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: 'width="default" gives a wider panel for more complex content.' })
|
|
209
|
+
] }),
|
|
210
|
+
width: "default"
|
|
211
|
+
}),
|
|
212
|
+
children: "open() \u2014 default width"
|
|
213
|
+
}
|
|
214
|
+
),
|
|
215
|
+
/* @__PURE__ */ jsx(
|
|
216
|
+
Button,
|
|
217
|
+
{
|
|
218
|
+
variant: "outline",
|
|
219
|
+
size: "sm",
|
|
220
|
+
onClick: () => panel.open({
|
|
221
|
+
title: "Full Coverage",
|
|
222
|
+
content: /* @__PURE__ */ jsxs("div", { className: "p-4 space-y-3", children: [
|
|
223
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Full coverage panel" }),
|
|
224
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: 'coverage="full" overlays the entire content area.' })
|
|
225
|
+
] }),
|
|
226
|
+
width: "default",
|
|
227
|
+
coverage: "full"
|
|
228
|
+
}),
|
|
229
|
+
children: "open() \u2014 full coverage"
|
|
230
|
+
}
|
|
231
|
+
),
|
|
232
|
+
/* @__PURE__ */ jsx(
|
|
233
|
+
Button,
|
|
234
|
+
{
|
|
235
|
+
variant: "outline",
|
|
236
|
+
size: "sm",
|
|
237
|
+
onClick: () => panel.open({
|
|
238
|
+
title: "Resizable Panel",
|
|
239
|
+
description: "Drag the left edge to resize. Double-click to reset.",
|
|
240
|
+
content: /* @__PURE__ */ jsxs("div", { className: "p-4 space-y-3", children: [
|
|
241
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Resizable panel" }),
|
|
242
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "resizable=true \xB7 defaultWidth=640 \xB7 minWidth=320 \xB7 maxWidth=1000" })
|
|
243
|
+
] }),
|
|
244
|
+
width: "default",
|
|
245
|
+
resizable: true,
|
|
246
|
+
minWidth: 320,
|
|
247
|
+
maxWidth: 1e3
|
|
248
|
+
}),
|
|
249
|
+
children: "open() \u2014 resizable"
|
|
250
|
+
}
|
|
251
|
+
)
|
|
252
|
+
] })
|
|
253
|
+
}
|
|
254
|
+
),
|
|
255
|
+
/* @__PURE__ */ jsx(
|
|
256
|
+
PlaygroundSection,
|
|
257
|
+
{
|
|
258
|
+
title: "sidePane",
|
|
259
|
+
description: "Persistent inline resizable panel. Sits beside the content area \u2014 the main view shrinks rather than being overlaid. Drag the edge to resize; double-click to reset.",
|
|
260
|
+
variant: "card",
|
|
261
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
262
|
+
/* @__PURE__ */ jsx(
|
|
263
|
+
Button,
|
|
264
|
+
{
|
|
265
|
+
variant: "outline",
|
|
266
|
+
size: "sm",
|
|
267
|
+
onClick: () => sidePane.open({
|
|
268
|
+
moduleId: "shell-demo-narrow",
|
|
269
|
+
defaultWidth: 240,
|
|
270
|
+
minWidth: 180,
|
|
271
|
+
maxWidth: 400,
|
|
272
|
+
content: /* @__PURE__ */ jsxs("div", { className: "p-4 space-y-3", children: [
|
|
273
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Narrow pane (240px)" }),
|
|
274
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "defaultWidth=240 minWidth=180 maxWidth=400" })
|
|
275
|
+
] })
|
|
276
|
+
}),
|
|
277
|
+
children: "open() \u2014 narrow"
|
|
278
|
+
}
|
|
279
|
+
),
|
|
280
|
+
/* @__PURE__ */ jsx(
|
|
281
|
+
Button,
|
|
282
|
+
{
|
|
283
|
+
variant: "outline",
|
|
284
|
+
size: "sm",
|
|
285
|
+
onClick: () => sidePane.open({
|
|
286
|
+
moduleId: "shell-demo-wide",
|
|
287
|
+
defaultWidth: 480,
|
|
288
|
+
minWidth: 320,
|
|
289
|
+
maxWidth: 800,
|
|
290
|
+
content: /* @__PURE__ */ jsxs("div", { className: "p-4 space-y-3", children: [
|
|
291
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Wide pane (480px)" }),
|
|
292
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "defaultWidth=480 minWidth=320 maxWidth=800" })
|
|
293
|
+
] })
|
|
294
|
+
}),
|
|
295
|
+
children: "open() \u2014 wide"
|
|
296
|
+
}
|
|
297
|
+
),
|
|
298
|
+
/* @__PURE__ */ jsx(
|
|
299
|
+
Button,
|
|
300
|
+
{
|
|
301
|
+
variant: "outline",
|
|
302
|
+
size: "sm",
|
|
303
|
+
onClick: () => sidePane.toggle({
|
|
304
|
+
moduleId: "shell-demo-toggle",
|
|
305
|
+
defaultWidth: 320,
|
|
306
|
+
content: /* @__PURE__ */ jsxs("div", { className: "p-4 space-y-3", children: [
|
|
307
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Toggle pane" }),
|
|
308
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Click again to close. Same moduleId toggles." })
|
|
309
|
+
] })
|
|
310
|
+
}),
|
|
311
|
+
children: "toggle()"
|
|
312
|
+
}
|
|
313
|
+
),
|
|
314
|
+
/* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: () => sidePane.close(), children: "close()" })
|
|
315
|
+
] })
|
|
316
|
+
}
|
|
317
|
+
),
|
|
318
|
+
/* @__PURE__ */ jsx(
|
|
319
|
+
PlaygroundSection,
|
|
320
|
+
{
|
|
321
|
+
title: "CommandMenu (Cmd+K)",
|
|
322
|
+
description: "Open the command palette programmatically. Modules can register commands that appear here via the commands array in their ShellModule definition.",
|
|
323
|
+
variant: "card",
|
|
324
|
+
children: /* @__PURE__ */ jsx(
|
|
325
|
+
Button,
|
|
326
|
+
{
|
|
327
|
+
variant: "outline",
|
|
328
|
+
size: "sm",
|
|
329
|
+
onClick: () => navigation.openCommandMenu(),
|
|
330
|
+
children: "Open CommandMenu"
|
|
331
|
+
}
|
|
332
|
+
)
|
|
333
|
+
}
|
|
334
|
+
)
|
|
335
|
+
] });
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
export {
|
|
339
|
+
PlayShellApi
|
|
340
|
+
};
|
|
341
|
+
//# sourceMappingURL=chunk-CQ6PGFRV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pages/PlayShellApi.tsx"],"sourcesContent":["import { Button } from \"@petrarca/sonnet-ui\";\nimport {\n notification,\n dialog,\n navigation,\n panel,\n sidePane,\n} from \"@petrarca/sonnet-shell\";\nimport { PlaygroundSection } from \"../PlaygroundSection\";\n\n/**\n * PlayShellApi -- playground page that exercises the shell API surface.\n *\n * Covers: notification, dialog, navigation, panel, sidePane,\n * and the command menu (Cmd+K).\n */\nexport default function PlayShellApi() {\n return (\n <div className=\"space-y-6\">\n {/* ── notification ─────────────────────────────────────────── */}\n <PlaygroundSection\n title=\"notification\"\n description=\"Toasts via the shell notification API — wraps Sonner.\"\n variant=\"card\"\n >\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => notification.success(\"Operation completed.\")}\n >\n success()\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => notification.error(\"Something went wrong.\")}\n >\n error()\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => notification.warning(\"Proceed with caution.\")}\n >\n warning()\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => notification.info(\"Here is some information.\")}\n >\n info()\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n notification.promise(\n new Promise((resolve) => setTimeout(resolve, 2000)),\n {\n loading: \"Loading...\",\n success: \"Done!\",\n error: \"Failed.\",\n },\n )\n }\n >\n promise()\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => notification.dismiss()}\n >\n dismiss()\n </Button>\n </div>\n </PlaygroundSection>\n\n {/* ── dialog ───────────────────────────────────────────────── */}\n <PlaygroundSection\n title=\"dialog\"\n description=\"Confirmation dialog via the shell dialog API.\"\n variant=\"card\"\n >\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={async () => {\n const confirmed = await dialog.confirm({\n title: \"Delete Resource\",\n description:\n \"This will permanently delete the resource. Are you sure?\",\n confirmLabel: \"Delete\",\n variant: \"destructive\",\n });\n notification.info(\n confirmed ? \"User confirmed.\" : \"User cancelled.\",\n );\n }}\n >\n confirm() — destructive\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={async () => {\n const confirmed = await dialog.confirm({\n title: \"Save Changes\",\n description: \"Do you want to save your changes?\",\n });\n notification.info(\n confirmed ? \"User confirmed.\" : \"User cancelled.\",\n );\n }}\n >\n confirm() — default\n </Button>\n </div>\n </PlaygroundSection>\n\n {/* ── navigation ───────────────────────────────────────────── */}\n <PlaygroundSection\n title=\"navigation\"\n description=\"Programmatic navigation via the shell navigation API.\"\n variant=\"card\"\n >\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => navigation.goTo(\"/home\")}\n >\n goTo(\"/home\")\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => navigation.goTo(\"/playground\")}\n >\n goTo(\"/playground\")\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => navigation.openCommandMenu()}\n >\n openCommandMenu()\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => navigation.back()}>\n back()\n </Button>\n </div>\n </PlaygroundSection>\n\n {/* ── panel ────────────────────────────────────────────────── */}\n <PlaygroundSection\n title=\"panel\"\n description=\"Shell-managed slide-over panel — renders content inside a Sheet owned by the shell.\"\n variant=\"card\"\n >\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n panel.open({\n title: \"Panel Demo\",\n description: \"This is a shell-managed slide-over panel.\",\n content: (\n <div className=\"p-4 space-y-3\">\n <p className=\"text-sm\">\n This content is rendered inside the shell's Sheet\n component.\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Use <code>panel.open()</code> to show any React content in\n a slide-over panel.\n </p>\n </div>\n ),\n })\n }\n >\n open() — narrow\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n panel.open({\n title: \"Wide Panel\",\n content: (\n <div className=\"p-4 space-y-3\">\n <p className=\"text-sm font-medium\">Wide panel (default)</p>\n <p className=\"text-xs text-muted-foreground\">\n width=\"default\" gives a wider panel for more complex\n content.\n </p>\n </div>\n ),\n width: \"default\",\n })\n }\n >\n open() — default width\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n panel.open({\n title: \"Full Coverage\",\n content: (\n <div className=\"p-4 space-y-3\">\n <p className=\"text-sm font-medium\">Full coverage panel</p>\n <p className=\"text-xs text-muted-foreground\">\n coverage=\"full\" overlays the entire content area.\n </p>\n </div>\n ),\n width: \"default\",\n coverage: \"full\",\n })\n }\n >\n open() — full coverage\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n panel.open({\n title: \"Resizable Panel\",\n description:\n \"Drag the left edge to resize. Double-click to reset.\",\n content: (\n <div className=\"p-4 space-y-3\">\n <p className=\"text-sm font-medium\">Resizable panel</p>\n <p className=\"text-xs text-muted-foreground\">\n resizable=true · defaultWidth=640 · minWidth=320 ·\n maxWidth=1000\n </p>\n </div>\n ),\n width: \"default\",\n resizable: true,\n minWidth: 320,\n maxWidth: 1000,\n })\n }\n >\n open() — resizable\n </Button>\n </div>\n </PlaygroundSection>\n\n {/* ── sidePane ─────────────────────────────────────────────── */}\n <PlaygroundSection\n title=\"sidePane\"\n description=\"Persistent inline resizable panel. Sits beside the content area — the main view shrinks rather than being overlaid. Drag the edge to resize; double-click to reset.\"\n variant=\"card\"\n >\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n sidePane.open({\n moduleId: \"shell-demo-narrow\",\n defaultWidth: 240,\n minWidth: 180,\n maxWidth: 400,\n content: (\n <div className=\"p-4 space-y-3\">\n <p className=\"text-sm font-medium\">Narrow pane (240px)</p>\n <p className=\"text-xs text-muted-foreground\">\n defaultWidth=240 minWidth=180 maxWidth=400\n </p>\n </div>\n ),\n })\n }\n >\n open() — narrow\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n sidePane.open({\n moduleId: \"shell-demo-wide\",\n defaultWidth: 480,\n minWidth: 320,\n maxWidth: 800,\n content: (\n <div className=\"p-4 space-y-3\">\n <p className=\"text-sm font-medium\">Wide pane (480px)</p>\n <p className=\"text-xs text-muted-foreground\">\n defaultWidth=480 minWidth=320 maxWidth=800\n </p>\n </div>\n ),\n })\n }\n >\n open() — wide\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n sidePane.toggle({\n moduleId: \"shell-demo-toggle\",\n defaultWidth: 320,\n content: (\n <div className=\"p-4 space-y-3\">\n <p className=\"text-sm font-medium\">Toggle pane</p>\n <p className=\"text-xs text-muted-foreground\">\n Click again to close. Same moduleId toggles.\n </p>\n </div>\n ),\n })\n }\n >\n toggle()\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => sidePane.close()}>\n close()\n </Button>\n </div>\n </PlaygroundSection>\n\n {/* ── CommandMenu (Cmd+K) ──────────────────────────────────── */}\n <PlaygroundSection\n title=\"CommandMenu (Cmd+K)\"\n description=\"Open the command palette programmatically. Modules can register commands that appear here via the commands array in their ShellModule definition.\"\n variant=\"card\"\n >\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => navigation.openCommandMenu()}\n >\n Open CommandMenu\n </Button>\n </PlaygroundSection>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PlaygroundSection
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-C2EZ2ECG.js";
|
|
4
4
|
|
|
5
5
|
// src/pages/PlayColorPalette.tsx
|
|
6
6
|
import { Separator, Badge } from "@petrarca/sonnet-ui";
|
|
@@ -31,32 +31,31 @@ function PaletteRow({
|
|
|
31
31
|
] }, shade)) })
|
|
32
32
|
] });
|
|
33
33
|
}
|
|
34
|
-
var
|
|
35
|
-
"teal",
|
|
36
|
-
"indigo",
|
|
37
|
-
"blue",
|
|
38
|
-
"violet",
|
|
39
|
-
"grape",
|
|
40
|
-
"cyan",
|
|
41
|
-
"green",
|
|
42
|
-
"orange",
|
|
43
|
-
"yellow",
|
|
44
|
-
"red",
|
|
45
|
-
"pink"
|
|
46
|
-
|
|
47
|
-
var ICON_COLORS = [
|
|
48
|
-
{ name: "teal", bg: "bg-teal-100", fg: "text-teal-600" },
|
|
49
|
-
{ name: "violet", bg: "bg-violet-100", fg: "text-violet-600" },
|
|
50
|
-
{ name: "indigo", bg: "bg-indigo-100", fg: "text-indigo-600" },
|
|
51
|
-
{ name: "blue", bg: "bg-blue-100", fg: "text-blue-600" },
|
|
52
|
-
{ name: "grape", bg: "bg-purple-100", fg: "text-purple-600" },
|
|
53
|
-
{ name: "amber", bg: "bg-amber-100", fg: "text-amber-600" }
|
|
34
|
+
var COLOR_REGISTRY = [
|
|
35
|
+
{ name: "teal", tailwind: "teal", badge: true, icon: true },
|
|
36
|
+
{ name: "indigo", tailwind: "indigo", badge: true, icon: true },
|
|
37
|
+
{ name: "blue", tailwind: "blue", badge: true, icon: true },
|
|
38
|
+
{ name: "violet", tailwind: "violet", badge: true, icon: true },
|
|
39
|
+
{ name: "grape", tailwind: "purple", badge: true, icon: true },
|
|
40
|
+
{ name: "cyan", tailwind: "cyan", badge: true, icon: false },
|
|
41
|
+
{ name: "green", tailwind: "green", badge: true, icon: false },
|
|
42
|
+
{ name: "orange", tailwind: "orange", badge: true, icon: false },
|
|
43
|
+
{ name: "yellow", tailwind: "yellow", badge: true, icon: false },
|
|
44
|
+
{ name: "red", tailwind: "red", badge: true, icon: false },
|
|
45
|
+
{ name: "pink", tailwind: "pink", badge: true, icon: false },
|
|
46
|
+
{ name: "amber", tailwind: "amber", badge: false, icon: true }
|
|
54
47
|
];
|
|
48
|
+
var BADGE_COLORS = COLOR_REGISTRY.filter((c) => c.badge);
|
|
49
|
+
var ICON_COLORS = COLOR_REGISTRY.filter((c) => c.icon).map((c) => ({
|
|
50
|
+
name: c.name,
|
|
51
|
+
bg: `bg-${c.tailwind}-100`,
|
|
52
|
+
fg: `text-${c.tailwind}-600`
|
|
53
|
+
}));
|
|
55
54
|
function PlayColorPalette() {
|
|
56
|
-
return /* @__PURE__ */ jsxs("div", { className: "w-full
|
|
55
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-full max-w-4xl space-y-6", children: [
|
|
57
56
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
58
57
|
/* @__PURE__ */ jsx("h1", { children: "Color Palette" }),
|
|
59
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
58
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mt-1 text-balance", children: "Living reference for the color system. Semantic tokens, extended palette, badge colors, icon accents, and usage guidance." })
|
|
60
59
|
] }),
|
|
61
60
|
/* @__PURE__ */ jsx(Separator, {}),
|
|
62
61
|
/* @__PURE__ */ jsx(
|
|
@@ -147,7 +146,7 @@ function PlayColorPalette() {
|
|
|
147
146
|
{
|
|
148
147
|
title: "Badge Colors",
|
|
149
148
|
description: "All valid badgeColor variants on the Badge component. Note: amber has no badge variant \u2014 use orange for a warm inactive state.",
|
|
150
|
-
children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2 border rounded-md p-6 bg-card", children: BADGE_COLORS.map((
|
|
149
|
+
children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2 border rounded-md p-6 bg-card", children: BADGE_COLORS.map(({ name }) => /* @__PURE__ */ jsx(Badge, { badgeColor: name, children: name }, name)) })
|
|
151
150
|
}
|
|
152
151
|
),
|
|
153
152
|
/* @__PURE__ */ jsx(Separator, {}),
|
|
@@ -209,4 +208,4 @@ function PlayColorPalette() {
|
|
|
209
208
|
export {
|
|
210
209
|
PlayColorPalette
|
|
211
210
|
};
|
|
212
|
-
//# sourceMappingURL=chunk-
|
|
211
|
+
//# sourceMappingURL=chunk-DA3BIB5N.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pages/PlayColorPalette.tsx"],"sourcesContent":["// Color Palette Playground\n//\n// Living reference for the color system. Shows semantic design tokens,\n// the extended badge color palette, and usage guidance.\nimport React from \"react\";\nimport { Separator, Badge } from \"@petrarca/sonnet-ui\";\nimport { PlaygroundSection as Section } from \"../PlaygroundSection\";\n\nfunction Swatch({\n name,\n bgClass,\n tailwind,\n}: {\n name: string;\n bgClass: string;\n tailwind: string;\n}): React.ReactElement {\n return (\n <div className=\"flex items-center gap-3\">\n <div className={`w-10 h-10 rounded-md shrink-0 ${bgClass}`} />\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium\">{name}</p>\n <code className=\"text-xs font-mono text-faint-foreground\">\n {tailwind}\n </code>\n </div>\n </div>\n );\n}\n\nfunction PaletteRow({\n color,\n label,\n}: {\n color: string;\n label?: string;\n}): React.ReactElement {\n const shades = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const;\n return (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-mono text-faint-foreground\">\n {label ?? color}\n </p>\n <div className=\"flex gap-1.5\">\n {shades.map((shade) => (\n <div key={shade} className=\"flex flex-col items-center gap-1\">\n <div className={`w-10 h-10 rounded-md bg-${color}-${shade}`} />\n <span className=\"text-[10px] font-mono text-faint-foreground\">\n {shade}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\n// All valid badgeColor values on the Badge component.\nconst BADGE_COLORS = [\n \"teal\",\n \"indigo\",\n \"blue\",\n \"violet\",\n \"grape\",\n \"cyan\",\n \"green\",\n \"orange\",\n \"yellow\",\n \"red\",\n \"pink\",\n] as const;\n\n// Icon accent pairings (bg-*-100 / text-*-600) used on cards and feature indicators.\nconst ICON_COLORS: { name: string; bg: string; fg: string }[] = [\n { name: \"teal\", bg: \"bg-teal-100\", fg: \"text-teal-600\" },\n { name: \"violet\", bg: \"bg-violet-100\", fg: \"text-violet-600\" },\n { name: \"indigo\", bg: \"bg-indigo-100\", fg: \"text-indigo-600\" },\n { name: \"blue\", bg: \"bg-blue-100\", fg: \"text-blue-600\" },\n { name: \"grape\", bg: \"bg-purple-100\", fg: \"text-purple-600\" },\n { name: \"amber\", bg: \"bg-amber-100\", fg: \"text-amber-600\" },\n];\n\n/** Color Palette playground -- living reference for the design system color tokens. */\nexport default function PlayColorPalette(): React.ReactElement {\n return (\n <div className=\"w-full py-12 px-4 max-w-4xl space-y-12\">\n <div>\n <h1>Color Palette</h1>\n <p className=\"text-base text-muted-foreground mt-1 text-balance\">\n Living reference for the color system. Semantic tokens, extended\n palette, badge colors, icon accents, and usage guidance.\n </p>\n </div>\n\n <Separator />\n\n {/* Semantic design tokens */}\n <Section\n title=\"Semantic Tokens\"\n description=\"CSS custom properties from index.css. These adapt to light/dark mode automatically. Never use raw Tailwind colors for surfaces or text.\"\n >\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"space-y-3 border rounded-md p-4 bg-card\">\n <p className=\"heading-compact text-muted-foreground\">Surfaces</p>\n <Swatch\n name=\"background\"\n bgClass=\"bg-background border\"\n tailwind=\"bg-background\"\n />\n <Swatch name=\"card\" bgClass=\"bg-card border\" tailwind=\"bg-card\" />\n <Swatch name=\"muted\" bgClass=\"bg-muted\" tailwind=\"bg-muted\" />\n <Swatch name=\"accent\" bgClass=\"bg-accent\" tailwind=\"bg-accent\" />\n <Swatch\n name=\"popover\"\n bgClass=\"bg-popover border\"\n tailwind=\"bg-popover\"\n />\n </div>\n <div className=\"space-y-3 border rounded-md p-4 bg-card\">\n <p className=\"heading-compact text-muted-foreground\">Interactive</p>\n <Swatch name=\"primary\" bgClass=\"bg-primary\" tailwind=\"bg-primary\" />\n <Swatch\n name=\"secondary\"\n bgClass=\"bg-secondary\"\n tailwind=\"bg-secondary\"\n />\n <Swatch\n name=\"destructive\"\n bgClass=\"bg-destructive\"\n tailwind=\"bg-destructive\"\n />\n <Swatch\n name=\"border\"\n bgClass=\"bg-border\"\n tailwind=\"border / bg-border\"\n />\n <Swatch name=\"ring\" bgClass=\"bg-ring\" tailwind=\"ring / bg-ring\" />\n </div>\n </div>\n </Section>\n\n <Separator />\n\n {/* Extended palette */}\n <Section\n title=\"Extended Palette\"\n description=\"Full shade ramps for colors used as accents, badges, and status indicators. Preferred range: 100 background, 600-800 text.\"\n >\n <div className=\"space-y-6 border rounded-md p-6 bg-card\">\n <PaletteRow color=\"teal\" />\n <PaletteRow color=\"indigo\" />\n <PaletteRow color=\"blue\" />\n <PaletteRow color=\"violet\" />\n <PaletteRow color=\"purple\" label=\"purple (grape)\" />\n <PaletteRow color=\"amber\" />\n <PaletteRow color=\"orange\" />\n <PaletteRow color=\"cyan\" />\n <PaletteRow color=\"green\" />\n <PaletteRow color=\"red\" />\n <PaletteRow color=\"pink\" />\n <PaletteRow color=\"yellow\" />\n </div>\n </Section>\n\n <Separator />\n\n {/* Badge colors */}\n <Section\n title=\"Badge Colors\"\n description=\"All valid badgeColor variants on the Badge component. Note: amber has no badge variant — use orange for a warm inactive state.\"\n >\n <div className=\"flex flex-wrap gap-2 border rounded-md p-6 bg-card\">\n {BADGE_COLORS.map((color) => (\n <Badge key={color} badgeColor={color}>\n {color}\n </Badge>\n ))}\n </div>\n </Section>\n\n <Separator />\n\n {/* Icon accent colors */}\n <Section\n title=\"Icon Accent Colors\"\n description=\"The 100/600 bg/text pairings used for card icons and feature indicators. amber is only used as an icon accent, not a badge color.\"\n >\n <div className=\"flex flex-wrap gap-4 border rounded-md p-6 bg-card\">\n {ICON_COLORS.map(({ name, bg, fg }) => (\n <div key={name} className=\"flex flex-col items-center gap-2\">\n <div\n className={`flex items-center justify-center w-12 h-12 rounded-md ${bg} ${fg}`}\n >\n <span className=\"text-lg font-semibold\">Aa</span>\n </div>\n <span className=\"text-xs font-mono text-faint-foreground\">\n {name}\n </span>\n </div>\n ))}\n </div>\n </Section>\n\n <Separator />\n\n {/* Status mapping */}\n <Section\n title=\"Status Colors\"\n description=\"Canonical badge color assignments for organization lifecycle status.\"\n >\n <div className=\"flex gap-3 border rounded-md p-6 bg-card\">\n <Badge badgeColor=\"teal\">active</Badge>\n <Badge badgeColor=\"indigo\">created</Badge>\n <Badge badgeColor=\"orange\">inactive</Badge>\n </div>\n </Section>\n\n <Separator />\n\n {/* Usage guidance */}\n <Section title=\"Usage Guidance\">\n <div className=\"space-y-3 text-sm\">\n <div className=\"border rounded-md p-4 bg-card space-y-1\">\n <p className=\"font-medium\">\n Use semantic tokens for surfaces and text\n </p>\n <p className=\"text-muted-foreground\">\n Always use{\" \"}\n <code className=\"text-xs font-mono bg-muted px-1 rounded\">\n bg-background\n </code>\n ,{\" \"}\n <code className=\"text-xs font-mono bg-muted px-1 rounded\">\n bg-card\n </code>\n ,{\" \"}\n <code className=\"text-xs font-mono bg-muted px-1 rounded\">\n text-foreground\n </code>\n , etc. for layout surfaces and body text. Never use raw Tailwind\n grays (text-gray-*, bg-slate-*).\n </p>\n </div>\n <div className=\"border rounded-md p-4 bg-card space-y-1\">\n <p className=\"font-medium\">Use extended palette for accents only</p>\n <p className=\"text-muted-foreground\">\n Badges, status indicators, and icon containers are the only\n sanctioned uses of raw Tailwind palette colors. Stick to the\n 100/600-800 range for the muted, autumn-like feel.\n </p>\n </div>\n </div>\n </Section>\n </div>\n );\n}\n"],"mappings":";;;;;AAKA,SAAS,WAAW,aAAa;AAc3B,cACA,YADA;AAXN,SAAS,OAAO;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACF,GAIuB;AACrB,SACE,qBAAC,SAAI,WAAU,2BACb;AAAA,wBAAC,SAAI,WAAW,iCAAiC,OAAO,IAAI;AAAA,IAC5D,qBAAC,SAAI,WAAU,WACb;AAAA,0BAAC,OAAE,WAAU,uBAAuB,gBAAK;AAAA,MACzC,oBAAC,UAAK,WAAU,2CACb,oBACH;AAAA,OACF;AAAA,KACF;AAEJ;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AACF,GAGuB;AACrB,QAAM,SAAS,CAAC,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAC/D,SACE,qBAAC,SAAI,WAAU,eACb;AAAA,wBAAC,OAAE,WAAU,2CACV,mBAAS,OACZ;AAAA,IACA,oBAAC,SAAI,WAAU,gBACZ,iBAAO,IAAI,CAAC,UACX,qBAAC,SAAgB,WAAU,oCACzB;AAAA,0BAAC,SAAI,WAAW,2BAA2B,KAAK,IAAI,KAAK,IAAI;AAAA,MAC7D,oBAAC,UAAK,WAAU,+CACb,iBACH;AAAA,SAJQ,KAKV,CACD,GACH;AAAA,KACF;AAEJ;AAGA,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGA,IAAM,cAA0D;AAAA,EAC9D,EAAE,MAAM,QAAQ,IAAI,eAAe,IAAI,gBAAgB;AAAA,EACvD,EAAE,MAAM,UAAU,IAAI,iBAAiB,IAAI,kBAAkB;AAAA,EAC7D,EAAE,MAAM,UAAU,IAAI,iBAAiB,IAAI,kBAAkB;AAAA,EAC7D,EAAE,MAAM,QAAQ,IAAI,eAAe,IAAI,gBAAgB;AAAA,EACvD,EAAE,MAAM,SAAS,IAAI,iBAAiB,IAAI,kBAAkB;AAAA,EAC5D,EAAE,MAAM,SAAS,IAAI,gBAAgB,IAAI,iBAAiB;AAC5D;AAGe,SAAR,mBAAwD;AAC7D,SACE,qBAAC,SAAI,WAAU,0CACb;AAAA,yBAAC,SACC;AAAA,0BAAC,QAAG,2BAAa;AAAA,MACjB,oBAAC,OAAE,WAAU,qDAAoD,uIAGjE;AAAA,OACF;AAAA,IAEA,oBAAC,aAAU;AAAA,IAGX;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,aAAY;AAAA,QAEZ,+BAAC,SAAI,WAAU,yCACb;AAAA,+BAAC,SAAI,WAAU,2CACb;AAAA,gCAAC,OAAE,WAAU,yCAAwC,sBAAQ;AAAA,YAC7D;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,UAAS;AAAA;AAAA,YACX;AAAA,YACA,oBAAC,UAAO,MAAK,QAAO,SAAQ,kBAAiB,UAAS,WAAU;AAAA,YAChE,oBAAC,UAAO,MAAK,SAAQ,SAAQ,YAAW,UAAS,YAAW;AAAA,YAC5D,oBAAC,UAAO,MAAK,UAAS,SAAQ,aAAY,UAAS,aAAY;AAAA,YAC/D;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,UAAS;AAAA;AAAA,YACX;AAAA,aACF;AAAA,UACA,qBAAC,SAAI,WAAU,2CACb;AAAA,gCAAC,OAAE,WAAU,yCAAwC,yBAAW;AAAA,YAChE,oBAAC,UAAO,MAAK,WAAU,SAAQ,cAAa,UAAS,cAAa;AAAA,YAClE;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,UAAS;AAAA;AAAA,YACX;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,UAAS;AAAA;AAAA,YACX;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,UAAS;AAAA;AAAA,YACX;AAAA,YACA,oBAAC,UAAO,MAAK,QAAO,SAAQ,WAAU,UAAS,kBAAiB;AAAA,aAClE;AAAA,WACF;AAAA;AAAA,IACF;AAAA,IAEA,oBAAC,aAAU;AAAA,IAGX;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,aAAY;AAAA,QAEZ,+BAAC,SAAI,WAAU,2CACb;AAAA,8BAAC,cAAW,OAAM,QAAO;AAAA,UACzB,oBAAC,cAAW,OAAM,UAAS;AAAA,UAC3B,oBAAC,cAAW,OAAM,QAAO;AAAA,UACzB,oBAAC,cAAW,OAAM,UAAS;AAAA,UAC3B,oBAAC,cAAW,OAAM,UAAS,OAAM,kBAAiB;AAAA,UAClD,oBAAC,cAAW,OAAM,SAAQ;AAAA,UAC1B,oBAAC,cAAW,OAAM,UAAS;AAAA,UAC3B,oBAAC,cAAW,OAAM,QAAO;AAAA,UACzB,oBAAC,cAAW,OAAM,SAAQ;AAAA,UAC1B,oBAAC,cAAW,OAAM,OAAM;AAAA,UACxB,oBAAC,cAAW,OAAM,QAAO;AAAA,UACzB,oBAAC,cAAW,OAAM,UAAS;AAAA,WAC7B;AAAA;AAAA,IACF;AAAA,IAEA,oBAAC,aAAU;AAAA,IAGX;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,aAAY;AAAA,QAEZ,8BAAC,SAAI,WAAU,sDACZ,uBAAa,IAAI,CAAC,UACjB,oBAAC,SAAkB,YAAY,OAC5B,mBADS,KAEZ,CACD,GACH;AAAA;AAAA,IACF;AAAA,IAEA,oBAAC,aAAU;AAAA,IAGX;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,aAAY;AAAA,QAEZ,8BAAC,SAAI,WAAU,sDACZ,sBAAY,IAAI,CAAC,EAAE,MAAM,IAAI,GAAG,MAC/B,qBAAC,SAAe,WAAU,oCACxB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,yDAAyD,EAAE,IAAI,EAAE;AAAA,cAE5E,8BAAC,UAAK,WAAU,yBAAwB,gBAAE;AAAA;AAAA,UAC5C;AAAA,UACA,oBAAC,UAAK,WAAU,2CACb,gBACH;AAAA,aARQ,IASV,CACD,GACH;AAAA;AAAA,IACF;AAAA,IAEA,oBAAC,aAAU;AAAA,IAGX;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,aAAY;AAAA,QAEZ,+BAAC,SAAI,WAAU,4CACb;AAAA,8BAAC,SAAM,YAAW,QAAO,oBAAM;AAAA,UAC/B,oBAAC,SAAM,YAAW,UAAS,qBAAO;AAAA,UAClC,oBAAC,SAAM,YAAW,UAAS,sBAAQ;AAAA,WACrC;AAAA;AAAA,IACF;AAAA,IAEA,oBAAC,aAAU;AAAA,IAGX,oBAAC,qBAAQ,OAAM,kBACb,+BAAC,SAAI,WAAU,qBACb;AAAA,2BAAC,SAAI,WAAU,2CACb;AAAA,4BAAC,OAAE,WAAU,eAAc,uDAE3B;AAAA,QACA,qBAAC,OAAE,WAAU,yBAAwB;AAAA;AAAA,UACxB;AAAA,UACX,oBAAC,UAAK,WAAU,2CAA0C,2BAE1D;AAAA,UAAO;AAAA,UACL;AAAA,UACF,oBAAC,UAAK,WAAU,2CAA0C,qBAE1D;AAAA,UAAO;AAAA,UACL;AAAA,UACF,oBAAC,UAAK,WAAU,2CAA0C,6BAE1D;AAAA,UAAO;AAAA,WAGT;AAAA,SACF;AAAA,MACA,qBAAC,SAAI,WAAU,2CACb;AAAA,4BAAC,OAAE,WAAU,eAAc,mDAAqC;AAAA,QAChE,oBAAC,OAAE,WAAU,yBAAwB,yLAIrC;AAAA,SACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/pages/PlayColorPalette.tsx"],"sourcesContent":["// Color Palette Playground\n//\n// Living reference for the color system. Shows semantic design tokens,\n// the extended badge color palette, and usage guidance.\nimport React from \"react\";\nimport { Separator, Badge } from \"@petrarca/sonnet-ui\";\nimport { PlaygroundSection as Section } from \"../PlaygroundSection\";\n\nfunction Swatch({\n name,\n bgClass,\n tailwind,\n}: {\n name: string;\n bgClass: string;\n tailwind: string;\n}): React.ReactElement {\n return (\n <div className=\"flex items-center gap-3\">\n <div className={`w-10 h-10 rounded-md shrink-0 ${bgClass}`} />\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium\">{name}</p>\n <code className=\"text-xs font-mono text-faint-foreground\">\n {tailwind}\n </code>\n </div>\n </div>\n );\n}\n\nfunction PaletteRow({\n color,\n label,\n}: {\n color: string;\n label?: string;\n}): React.ReactElement {\n const shades = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const;\n return (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-mono text-faint-foreground\">\n {label ?? color}\n </p>\n <div className=\"flex gap-1.5\">\n {shades.map((shade) => (\n <div key={shade} className=\"flex flex-col items-center gap-1\">\n <div className={`w-10 h-10 rounded-md bg-${color}-${shade}`} />\n <span className=\"text-[10px] font-mono text-faint-foreground\">\n {shade}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\n// Single source of truth for the extended color palette.\n// badge: valid as a badgeColor prop value.\n// icon: valid as an icon accent (bg-*-100 / text-*-600 pairing).\n// Note: amber is icon-only (no badge variant — use orange for warm inactive states).\n// grape maps to the purple Tailwind scale.\nconst COLOR_REGISTRY = [\n { name: \"teal\", tailwind: \"teal\", badge: true, icon: true },\n { name: \"indigo\", tailwind: \"indigo\", badge: true, icon: true },\n { name: \"blue\", tailwind: \"blue\", badge: true, icon: true },\n { name: \"violet\", tailwind: \"violet\", badge: true, icon: true },\n { name: \"grape\", tailwind: \"purple\", badge: true, icon: true },\n { name: \"cyan\", tailwind: \"cyan\", badge: true, icon: false },\n { name: \"green\", tailwind: \"green\", badge: true, icon: false },\n { name: \"orange\", tailwind: \"orange\", badge: true, icon: false },\n { name: \"yellow\", tailwind: \"yellow\", badge: true, icon: false },\n { name: \"red\", tailwind: \"red\", badge: true, icon: false },\n { name: \"pink\", tailwind: \"pink\", badge: true, icon: false },\n { name: \"amber\", tailwind: \"amber\", badge: false, icon: true },\n] as const;\n\nconst BADGE_COLORS = COLOR_REGISTRY.filter((c) => c.badge);\nconst ICON_COLORS = COLOR_REGISTRY.filter((c) => c.icon).map((c) => ({\n name: c.name,\n bg: `bg-${c.tailwind}-100`,\n fg: `text-${c.tailwind}-600`,\n}));\n\n/** Color Palette playground -- living reference for the design system color tokens. */\nexport default function PlayColorPalette(): React.ReactElement {\n return (\n <div className=\"w-full max-w-4xl space-y-6\">\n <div>\n <h1>Color Palette</h1>\n <p className=\"text-sm text-muted-foreground mt-1 text-balance\">\n Living reference for the color system. Semantic tokens, extended\n palette, badge colors, icon accents, and usage guidance.\n </p>\n </div>\n\n <Separator />\n\n {/* Semantic design tokens */}\n <Section\n title=\"Semantic Tokens\"\n description=\"CSS custom properties from index.css. These adapt to light/dark mode automatically. Never use raw Tailwind colors for surfaces or text.\"\n >\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"space-y-3 border rounded-md p-4 bg-card\">\n <p className=\"heading-compact text-muted-foreground\">Surfaces</p>\n <Swatch\n name=\"background\"\n bgClass=\"bg-background border\"\n tailwind=\"bg-background\"\n />\n <Swatch name=\"card\" bgClass=\"bg-card border\" tailwind=\"bg-card\" />\n <Swatch name=\"muted\" bgClass=\"bg-muted\" tailwind=\"bg-muted\" />\n <Swatch name=\"accent\" bgClass=\"bg-accent\" tailwind=\"bg-accent\" />\n <Swatch\n name=\"popover\"\n bgClass=\"bg-popover border\"\n tailwind=\"bg-popover\"\n />\n </div>\n <div className=\"space-y-3 border rounded-md p-4 bg-card\">\n <p className=\"heading-compact text-muted-foreground\">Interactive</p>\n <Swatch name=\"primary\" bgClass=\"bg-primary\" tailwind=\"bg-primary\" />\n <Swatch\n name=\"secondary\"\n bgClass=\"bg-secondary\"\n tailwind=\"bg-secondary\"\n />\n <Swatch\n name=\"destructive\"\n bgClass=\"bg-destructive\"\n tailwind=\"bg-destructive\"\n />\n <Swatch\n name=\"border\"\n bgClass=\"bg-border\"\n tailwind=\"border / bg-border\"\n />\n <Swatch name=\"ring\" bgClass=\"bg-ring\" tailwind=\"ring / bg-ring\" />\n </div>\n </div>\n </Section>\n\n <Separator />\n\n {/* Extended palette */}\n <Section\n title=\"Extended Palette\"\n description=\"Full shade ramps for colors used as accents, badges, and status indicators. Preferred range: 100 background, 600-800 text.\"\n >\n <div className=\"space-y-6 border rounded-md p-6 bg-card\">\n <PaletteRow color=\"teal\" />\n <PaletteRow color=\"indigo\" />\n <PaletteRow color=\"blue\" />\n <PaletteRow color=\"violet\" />\n <PaletteRow color=\"purple\" label=\"purple (grape)\" />\n <PaletteRow color=\"amber\" />\n <PaletteRow color=\"orange\" />\n <PaletteRow color=\"cyan\" />\n <PaletteRow color=\"green\" />\n <PaletteRow color=\"red\" />\n <PaletteRow color=\"pink\" />\n <PaletteRow color=\"yellow\" />\n </div>\n </Section>\n\n <Separator />\n\n {/* Badge colors */}\n <Section\n title=\"Badge Colors\"\n description=\"All valid badgeColor variants on the Badge component. Note: amber has no badge variant — use orange for a warm inactive state.\"\n >\n <div className=\"flex flex-wrap gap-2 border rounded-md p-6 bg-card\">\n {BADGE_COLORS.map(({ name }) => (\n <Badge key={name} badgeColor={name}>\n {name}\n </Badge>\n ))}\n </div>\n </Section>\n\n <Separator />\n\n {/* Icon accent colors */}\n <Section\n title=\"Icon Accent Colors\"\n description=\"The 100/600 bg/text pairings used for card icons and feature indicators. amber is only used as an icon accent, not a badge color.\"\n >\n <div className=\"flex flex-wrap gap-4 border rounded-md p-6 bg-card\">\n {ICON_COLORS.map(({ name, bg, fg }) => (\n <div key={name} className=\"flex flex-col items-center gap-2\">\n <div\n className={`flex items-center justify-center w-12 h-12 rounded-md ${bg} ${fg}`}\n >\n <span className=\"text-lg font-semibold\">Aa</span>\n </div>\n <span className=\"text-xs font-mono text-faint-foreground\">\n {name}\n </span>\n </div>\n ))}\n </div>\n </Section>\n\n <Separator />\n\n {/* Status mapping */}\n <Section\n title=\"Status Colors\"\n description=\"Canonical badge color assignments for organization lifecycle status.\"\n >\n <div className=\"flex gap-3 border rounded-md p-6 bg-card\">\n <Badge badgeColor=\"teal\">active</Badge>\n <Badge badgeColor=\"indigo\">created</Badge>\n <Badge badgeColor=\"orange\">inactive</Badge>\n </div>\n </Section>\n\n <Separator />\n\n {/* Usage guidance */}\n <Section title=\"Usage Guidance\">\n <div className=\"space-y-3 text-sm\">\n <div className=\"border rounded-md p-4 bg-card space-y-1\">\n <p className=\"font-medium\">\n Use semantic tokens for surfaces and text\n </p>\n <p className=\"text-muted-foreground\">\n Always use{\" \"}\n <code className=\"text-xs font-mono bg-muted px-1 rounded\">\n bg-background\n </code>\n ,{\" \"}\n <code className=\"text-xs font-mono bg-muted px-1 rounded\">\n bg-card\n </code>\n ,{\" \"}\n <code className=\"text-xs font-mono bg-muted px-1 rounded\">\n text-foreground\n </code>\n , etc. for layout surfaces and body text. Never use raw Tailwind\n grays (text-gray-*, bg-slate-*).\n </p>\n </div>\n <div className=\"border rounded-md p-4 bg-card space-y-1\">\n <p className=\"font-medium\">Use extended palette for accents only</p>\n <p className=\"text-muted-foreground\">\n Badges, status indicators, and icon containers are the only\n sanctioned uses of raw Tailwind palette colors. Stick to the\n 100/600-800 range for the muted, autumn-like feel.\n </p>\n </div>\n </div>\n </Section>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|