@petrarca/sonnet-playground 0.1.2

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.
Files changed (41) hide show
  1. package/dist/PlayColorPalette-UFMTJTUB.js +8 -0
  2. package/dist/PlayColorPalette-UFMTJTUB.js.map +1 -0
  3. package/dist/PlayCoreComponents-7QCDFQLT.js +7 -0
  4. package/dist/PlayCoreComponents-7QCDFQLT.js.map +1 -0
  5. package/dist/PlayDataComponents-GZSRTW4F.js +7 -0
  6. package/dist/PlayDataComponents-GZSRTW4F.js.map +1 -0
  7. package/dist/PlayFormComponents-RJB6WZHD.js +7 -0
  8. package/dist/PlayFormComponents-RJB6WZHD.js.map +1 -0
  9. package/dist/PlayFormWidgets-OFV7TJKH.js +7 -0
  10. package/dist/PlayFormWidgets-OFV7TJKH.js.map +1 -0
  11. package/dist/PlayForms-24XX5DC6.js +7 -0
  12. package/dist/PlayForms-24XX5DC6.js.map +1 -0
  13. package/dist/PlayJsonEditor-4L5INQPU.js +7 -0
  14. package/dist/PlayJsonEditor-4L5INQPU.js.map +1 -0
  15. package/dist/PlayTypography-ID6DLFZD.js +8 -0
  16. package/dist/PlayTypography-ID6DLFZD.js.map +1 -0
  17. package/dist/chunk-5V27QDAY.js +617 -0
  18. package/dist/chunk-5V27QDAY.js.map +1 -0
  19. package/dist/chunk-A3IK3CVW.js +212 -0
  20. package/dist/chunk-A3IK3CVW.js.map +1 -0
  21. package/dist/chunk-CYNK2P2Q.js +411 -0
  22. package/dist/chunk-CYNK2P2Q.js.map +1 -0
  23. package/dist/chunk-FTN2A5YL.js +20 -0
  24. package/dist/chunk-FTN2A5YL.js.map +1 -0
  25. package/dist/chunk-GYKEPHHA.js +1154 -0
  26. package/dist/chunk-GYKEPHHA.js.map +1 -0
  27. package/dist/chunk-KAT24CQQ.js +125 -0
  28. package/dist/chunk-KAT24CQQ.js.map +1 -0
  29. package/dist/chunk-P7I5IDXA.js +432 -0
  30. package/dist/chunk-P7I5IDXA.js.map +1 -0
  31. package/dist/chunk-QIETZUEN.js +885 -0
  32. package/dist/chunk-QIETZUEN.js.map +1 -0
  33. package/dist/chunk-TZGJH7YS.js +837 -0
  34. package/dist/chunk-TZGJH7YS.js.map +1 -0
  35. package/dist/index.d.ts +160 -0
  36. package/dist/index.js +328 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/pages/index.d.ts +69 -0
  39. package/dist/pages/index.js +36 -0
  40. package/dist/pages/index.js.map +1 -0
  41. package/package.json +54 -0
@@ -0,0 +1,411 @@
1
+ import {
2
+ PlaygroundSection
3
+ } from "./chunk-FTN2A5YL.js";
4
+
5
+ // src/pages/PlayTypography.tsx
6
+ import { Separator } from "@petrarca/sonnet-ui";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ function Specimen({
9
+ label,
10
+ className,
11
+ text
12
+ }) {
13
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
14
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: label }),
15
+ /* @__PURE__ */ jsx("p", { className, children: text ?? "The quick brown fox jumps over the lazy dog" })
16
+ ] });
17
+ }
18
+ function ColorSwatch({
19
+ name,
20
+ className,
21
+ cssVar
22
+ }) {
23
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
24
+ /* @__PURE__ */ jsxs("span", { className: `${className} text-sm`, children: [
25
+ name,
26
+ ": The quick brown fox jumps over the lazy dog"
27
+ ] }),
28
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground ml-auto shrink-0", children: cssVar })
29
+ ] });
30
+ }
31
+ function PlayTypography() {
32
+ return /* @__PURE__ */ jsxs("div", { className: "w-full py-12 px-4 max-w-4xl space-y-12", children: [
33
+ /* @__PURE__ */ jsxs("div", { children: [
34
+ /* @__PURE__ */ jsx("h1", { children: "Typography" }),
35
+ /* @__PURE__ */ jsxs("p", { className: "text-base text-muted-foreground mt-1 text-balance", children: [
36
+ "Living style-guide for the typography system. Every specimen uses the sanctioned classes from",
37
+ " ",
38
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono bg-muted px-1.5 py-0.5 rounded", children: "docs/design/typography.md" }),
39
+ "."
40
+ ] })
41
+ ] }),
42
+ /* @__PURE__ */ jsx(Separator, {}),
43
+ /* @__PURE__ */ jsx(
44
+ PlaygroundSection,
45
+ {
46
+ title: "Font Families",
47
+ description: "Inter (sans) for UI, JetBrains Mono (mono) for code and data IDs.",
48
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
49
+ /* @__PURE__ */ jsx(Specimen, { label: "font-sans (Inter)", className: "font-sans text-base" }),
50
+ /* @__PURE__ */ jsx(
51
+ Specimen,
52
+ {
53
+ label: "font-mono (JetBrains Mono)",
54
+ className: "font-mono text-base"
55
+ }
56
+ )
57
+ ] })
58
+ }
59
+ ),
60
+ /* @__PURE__ */ jsx(Separator, {}),
61
+ /* @__PURE__ */ jsx(
62
+ PlaygroundSection,
63
+ {
64
+ title: "Type Scale",
65
+ description: "Sanctioned sizes from text-xs (12px) to text-3xl (30px).",
66
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
67
+ /* @__PURE__ */ jsx(Specimen, { label: "text-3xl \u2014 30px", className: "text-3xl" }),
68
+ /* @__PURE__ */ jsx(Specimen, { label: "text-2xl \u2014 24px", className: "text-2xl" }),
69
+ /* @__PURE__ */ jsx(Specimen, { label: "text-xl \u2014 20px", className: "text-xl" }),
70
+ /* @__PURE__ */ jsx(Specimen, { label: "text-lg \u2014 18px", className: "text-lg" }),
71
+ /* @__PURE__ */ jsx(Specimen, { label: "text-base \u2014 16px", className: "text-base" }),
72
+ /* @__PURE__ */ jsx(Specimen, { label: "text-sm \u2014 14px (workhorse)", className: "text-sm" }),
73
+ /* @__PURE__ */ jsx(Specimen, { label: "text-xs \u2014 12px", className: "text-xs" })
74
+ ] })
75
+ }
76
+ ),
77
+ /* @__PURE__ */ jsx(Separator, {}),
78
+ /* @__PURE__ */ jsxs(
79
+ PlaygroundSection,
80
+ {
81
+ title: "Font Weights",
82
+ description: "Three sanctioned weights. font-bold (700) and above are prohibited.",
83
+ children: [
84
+ /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
85
+ /* @__PURE__ */ jsx(
86
+ Specimen,
87
+ {
88
+ label: "font-normal (400) \u2014 body text, paragraphs",
89
+ className: "text-base font-normal"
90
+ }
91
+ ),
92
+ /* @__PURE__ */ jsx(
93
+ Specimen,
94
+ {
95
+ label: "font-medium (500) \u2014 labels, buttons, interactive elements",
96
+ className: "text-base font-medium"
97
+ }
98
+ ),
99
+ /* @__PURE__ */ jsx(
100
+ Specimen,
101
+ {
102
+ label: "font-semibold (600) \u2014 headings, card titles (max weight)",
103
+ className: "text-base font-semibold"
104
+ }
105
+ )
106
+ ] }),
107
+ /* @__PURE__ */ jsxs("div", { className: "mt-4 p-3 border border-destructive/20 bg-destructive/5 rounded-md", children: [
108
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive font-medium", children: "Prohibited weights" }),
109
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-6 mt-2", children: [
110
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground line-through", children: "font-bold (700)" }),
111
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground line-through", children: "font-extrabold (800)" }),
112
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground line-through", children: "font-black (900)" })
113
+ ] })
114
+ ] })
115
+ ]
116
+ }
117
+ ),
118
+ /* @__PURE__ */ jsx(Separator, {}),
119
+ /* @__PURE__ */ jsx(
120
+ PlaygroundSection,
121
+ {
122
+ title: "Heading Hierarchy",
123
+ description: "Named utility classes mapped to HTML heading elements via the base layer.",
124
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-4 border rounded-md p-6 bg-card", children: [
125
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
126
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "h1 / .heading-page \u2014 text-2xl font-semibold tracking-tight" }),
127
+ /* @__PURE__ */ jsx("h1", { children: "Page Title" })
128
+ ] }),
129
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
130
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "h2 / .heading-section \u2014 text-xl font-semibold" }),
131
+ /* @__PURE__ */ jsx("h2", { children: "Section Heading" })
132
+ ] }),
133
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
134
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "h3 / .heading-sub \u2014 text-base font-medium" }),
135
+ /* @__PURE__ */ jsx("h3", { children: "Subsection Heading" })
136
+ ] }),
137
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
138
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "h4 / .heading-component \u2014 text-sm font-medium" }),
139
+ /* @__PURE__ */ jsx("h4", { children: "Component Heading" })
140
+ ] }),
141
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
142
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "h6 / .heading-compact \u2014 text-xs font-medium" }),
143
+ /* @__PURE__ */ jsx("h6", { children: "Compact Heading" })
144
+ ] }),
145
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
146
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: ".heading-meta \u2014 text-xs font-medium font-mono uppercase tracking-wider" }),
147
+ /* @__PURE__ */ jsx("div", { className: "heading-meta", children: "Meta Heading" })
148
+ ] })
149
+ ] })
150
+ }
151
+ ),
152
+ /* @__PURE__ */ jsx(Separator, {}),
153
+ /* @__PURE__ */ jsx(
154
+ PlaygroundSection,
155
+ {
156
+ title: "Text Color Hierarchy",
157
+ description: "Three semantic tiers. Never use hardcoded grays (text-gray-*, text-slate-*).",
158
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-3 border rounded-md p-6 bg-card", children: [
159
+ /* @__PURE__ */ jsx(
160
+ ColorSwatch,
161
+ {
162
+ name: "foreground",
163
+ className: "text-foreground",
164
+ cssVar: "--foreground"
165
+ }
166
+ ),
167
+ /* @__PURE__ */ jsx(
168
+ ColorSwatch,
169
+ {
170
+ name: "muted-foreground",
171
+ className: "text-muted-foreground",
172
+ cssVar: "--muted-foreground"
173
+ }
174
+ ),
175
+ /* @__PURE__ */ jsx(
176
+ ColorSwatch,
177
+ {
178
+ name: "faint-foreground",
179
+ className: "text-faint-foreground",
180
+ cssVar: "--faint-foreground"
181
+ }
182
+ )
183
+ ] })
184
+ }
185
+ ),
186
+ /* @__PURE__ */ jsx(Separator, {}),
187
+ /* @__PURE__ */ jsx(
188
+ PlaygroundSection,
189
+ {
190
+ title: "Line Height & Letter Spacing",
191
+ description: "Sanctioned line-height and tracking classes.",
192
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
193
+ /* @__PURE__ */ jsx(
194
+ Specimen,
195
+ {
196
+ label: "leading-none (1.0) \u2014 compact labels, card titles",
197
+ className: "text-sm leading-none"
198
+ }
199
+ ),
200
+ /* @__PURE__ */ jsx(Specimen, { label: "default \u2014 most text", className: "text-sm" }),
201
+ /* @__PURE__ */ jsx(
202
+ Specimen,
203
+ {
204
+ label: "leading-relaxed (1.625) \u2014 multi-line descriptions",
205
+ className: "text-sm leading-relaxed",
206
+ text: "This is a longer paragraph to demonstrate relaxed line height. It should feel airy and comfortable to read, especially in descriptions and body content that spans multiple lines."
207
+ }
208
+ ),
209
+ /* @__PURE__ */ jsx(
210
+ Specimen,
211
+ {
212
+ label: "tracking-tight (-0.025em) \u2014 headings",
213
+ className: "text-2xl font-semibold tracking-tight",
214
+ text: "Page Title With Tracking"
215
+ }
216
+ ),
217
+ /* @__PURE__ */ jsx(
218
+ Specimen,
219
+ {
220
+ label: "tracking-wider (0.05em) \u2014 meta headings",
221
+ className: "heading-meta",
222
+ text: "Category Label"
223
+ }
224
+ )
225
+ ] })
226
+ }
227
+ ),
228
+ /* @__PURE__ */ jsx(Separator, {}),
229
+ /* @__PURE__ */ jsxs(
230
+ PlaygroundSection,
231
+ {
232
+ title: "Numeric Typography",
233
+ description: "tabular-nums for aligned digits. font-mono for IDs and codes.",
234
+ children: [
235
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-6", children: [
236
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2 border rounded-md p-4 bg-card", children: [
237
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "Without tabular-nums" }),
238
+ /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
239
+ /* @__PURE__ */ jsx("p", { className: "text-2xl font-semibold", children: "1,111" }),
240
+ /* @__PURE__ */ jsx("p", { className: "text-2xl font-semibold", children: "8,888" }),
241
+ /* @__PURE__ */ jsx("p", { className: "text-2xl font-semibold", children: "42.7%" })
242
+ ] })
243
+ ] }),
244
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2 border rounded-md p-4 bg-card", children: [
245
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "With tabular-nums" }),
246
+ /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
247
+ /* @__PURE__ */ jsx("p", { className: "text-2xl font-semibold tabular-nums", children: "1,111" }),
248
+ /* @__PURE__ */ jsx("p", { className: "text-2xl font-semibold tabular-nums", children: "8,888" }),
249
+ /* @__PURE__ */ jsx("p", { className: "text-2xl font-semibold tabular-nums", children: "42.7%" })
250
+ ] })
251
+ ] })
252
+ ] }),
253
+ /* @__PURE__ */ jsxs("div", { className: "mt-4 space-y-2", children: [
254
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "font-mono for IDs and codes" }),
255
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
256
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-mono text-muted-foreground", children: "ent_a1b2c3d4e5f6" }),
257
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-mono text-muted-foreground", children: "sk_live_51O2jK2eZvKYlo2C0" }),
258
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-mono text-muted-foreground", children: "sha256:9f86d081884c7d659a2feaa0" })
259
+ ] })
260
+ ] })
261
+ ]
262
+ }
263
+ ),
264
+ /* @__PURE__ */ jsx(Separator, {}),
265
+ /* @__PURE__ */ jsx(
266
+ PlaygroundSection,
267
+ {
268
+ title: "Text Overflow Handling",
269
+ description: "Patterns for dynamic content that can exceed its container.",
270
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
271
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
272
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "truncate \u2014 single-line ellipsis" }),
273
+ /* @__PURE__ */ jsx("p", { className: "text-sm truncate max-w-xs border rounded px-2 py-1", children: "This is a very long sidebar item name that will definitely overflow its container and needs to be truncated with an ellipsis" })
274
+ ] }),
275
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
276
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "line-clamp-2 \u2014 multi-line clamp" }),
277
+ /* @__PURE__ */ jsx("p", { className: "text-sm line-clamp-2 max-w-sm border rounded px-2 py-1", children: "This is a card description that can span multiple lines. It will be clamped to exactly two lines. Any content beyond two lines will be hidden and replaced with an ellipsis. This sentence should be hidden." })
278
+ ] }),
279
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
280
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "whitespace-nowrap \u2014 prevent wrapping (buttons, badges)" }),
281
+ /* @__PURE__ */ jsx("span", { className: "text-sm whitespace-nowrap border rounded px-2 py-1 inline-block", children: "Badge text that never wraps" })
282
+ ] })
283
+ ] })
284
+ }
285
+ ),
286
+ /* @__PURE__ */ jsx(Separator, {}),
287
+ /* @__PURE__ */ jsx(
288
+ PlaygroundSection,
289
+ {
290
+ title: "Component Typography Patterns",
291
+ description: "Standard text treatments for common UI components.",
292
+ children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [
293
+ /* @__PURE__ */ jsxs("div", { className: "border rounded-lg p-4 bg-card space-y-1.5", children: [
294
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "Card" }),
295
+ /* @__PURE__ */ jsx("p", { className: "text-lg font-semibold leading-none tracking-tight", children: "Card Title" }),
296
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Card description with muted foreground color." }),
297
+ /* @__PURE__ */ jsx("p", { className: "text-2xl font-semibold tabular-nums mt-2", children: "$12,345" }),
298
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "+20.1% from last month" })
299
+ ] }),
300
+ /* @__PURE__ */ jsxs("div", { className: "border rounded-lg p-4 bg-card space-y-1.5", children: [
301
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "Dialog" }),
302
+ /* @__PURE__ */ jsx("p", { className: "text-lg font-semibold leading-none tracking-tight", children: "Dialog Title" }),
303
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Dialog description providing context for the action." })
304
+ ] }),
305
+ /* @__PURE__ */ jsxs("div", { className: "border rounded-lg p-4 bg-card space-y-3", children: [
306
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "Interactive Elements" }),
307
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
308
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium leading-none", children: "Form Label" }),
309
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Help text for the field." })
310
+ ] }),
311
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
312
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium bg-primary text-primary-foreground rounded-md px-3 py-1.5", children: "Button" }),
313
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-medium bg-secondary text-secondary-foreground rounded-full px-2.5 py-0.5", children: "Badge" })
314
+ ] })
315
+ ] }),
316
+ /* @__PURE__ */ jsxs("div", { className: "border rounded-lg p-4 bg-card space-y-2", children: [
317
+ /* @__PURE__ */ jsx("code", { className: "text-xs font-mono text-faint-foreground", children: "Table" }),
318
+ /* @__PURE__ */ jsxs("table", { className: "w-full text-sm", children: [
319
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { className: "border-b", children: [
320
+ /* @__PURE__ */ jsx("th", { className: "text-left font-medium text-foreground py-1", children: "Name" }),
321
+ /* @__PURE__ */ jsx("th", { className: "text-right font-medium text-foreground py-1", children: "Count" })
322
+ ] }) }),
323
+ /* @__PURE__ */ jsxs("tbody", { children: [
324
+ /* @__PURE__ */ jsxs("tr", { className: "border-b", children: [
325
+ /* @__PURE__ */ jsx("td", { className: "py-1", children: "Entities" }),
326
+ /* @__PURE__ */ jsx("td", { className: "text-right tabular-nums", children: "1,234" })
327
+ ] }),
328
+ /* @__PURE__ */ jsxs("tr", { className: "border-b", children: [
329
+ /* @__PURE__ */ jsx("td", { className: "py-1", children: "Relations" }),
330
+ /* @__PURE__ */ jsx("td", { className: "text-right tabular-nums", children: "567" })
331
+ ] }),
332
+ /* @__PURE__ */ jsxs("tr", { children: [
333
+ /* @__PURE__ */ jsx("td", { className: "py-1", children: "Schemas" }),
334
+ /* @__PURE__ */ jsx("td", { className: "text-right tabular-nums", children: "89" })
335
+ ] })
336
+ ] })
337
+ ] })
338
+ ] })
339
+ ] })
340
+ }
341
+ ),
342
+ /* @__PURE__ */ jsx(Separator, {}),
343
+ /* @__PURE__ */ jsx(
344
+ PlaygroundSection,
345
+ {
346
+ title: "Responsive Typography",
347
+ description: "Patterns that adapt to viewport size.",
348
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
349
+ /* @__PURE__ */ jsx(
350
+ Specimen,
351
+ {
352
+ label: "Responsive heading: text-xl md:text-2xl",
353
+ className: "text-xl md:text-2xl font-semibold tracking-tight",
354
+ text: "This heading scales up on wider viewports"
355
+ }
356
+ ),
357
+ /* @__PURE__ */ jsx(
358
+ Specimen,
359
+ {
360
+ label: "Responsive input: text-base md:text-sm (prevents iOS zoom)",
361
+ className: "text-base md:text-sm border rounded px-2 py-1",
362
+ text: "Input text that's 16px on mobile, 14px on desktop"
363
+ }
364
+ ),
365
+ /* @__PURE__ */ jsx(
366
+ Specimen,
367
+ {
368
+ label: "text-balance \u2014 prevents orphaned words",
369
+ className: "text-2xl font-semibold tracking-tight text-balance max-w-sm",
370
+ text: "This heading uses text-balance for better line breaks"
371
+ }
372
+ )
373
+ ] })
374
+ }
375
+ ),
376
+ /* @__PURE__ */ jsx(Separator, {}),
377
+ /* @__PURE__ */ jsx(
378
+ PlaygroundSection,
379
+ {
380
+ title: "Font Rendering",
381
+ description: "Antialiased rendering is applied globally via the body class.",
382
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-2 text-sm", children: [
383
+ /* @__PURE__ */ jsxs("p", { children: [
384
+ "The",
385
+ " ",
386
+ /* @__PURE__ */ jsx("code", { className: "font-mono text-xs bg-muted px-1 py-0.5 rounded", children: "antialiased" }),
387
+ " ",
388
+ "class on",
389
+ " ",
390
+ /* @__PURE__ */ jsx("code", { className: "font-mono text-xs bg-muted px-1 py-0.5 rounded", children: "<body>" }),
391
+ " ",
392
+ "enables",
393
+ " ",
394
+ /* @__PURE__ */ jsx("code", { className: "font-mono text-xs bg-muted px-1 py-0.5 rounded", children: "-webkit-font-smoothing: antialiased" }),
395
+ " ",
396
+ "and",
397
+ " ",
398
+ /* @__PURE__ */ jsx("code", { className: "font-mono text-xs bg-muted px-1 py-0.5 rounded", children: "-moz-osx-font-smoothing: grayscale" }),
399
+ "."
400
+ ] }),
401
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "This makes text render thinner and crisper, matching the look of polished dashboard UIs like Supabase and shadcn/ui." })
402
+ ] })
403
+ }
404
+ )
405
+ ] });
406
+ }
407
+
408
+ export {
409
+ PlayTypography
410
+ };
411
+ //# sourceMappingURL=chunk-CYNK2P2Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pages/PlayTypography.tsx"],"sourcesContent":["// Typography Playground\n//\n// Living style-guide for the typography system defined in\n// docs/design/typography.md. Every specimen uses the sanctioned\n// classes so it doubles as a visual regression surface.\nimport React from \"react\";\nimport { Separator } from \"@petrarca/sonnet-ui\";\nimport { PlaygroundSection as Section } from \"../PlaygroundSection\";\n\nfunction Specimen({\n label,\n className,\n text,\n}: {\n label: string;\n className: string;\n text?: string;\n}) {\n return (\n <div className=\"flex flex-col gap-1\">\n <code className=\"text-xs font-mono text-faint-foreground\">{label}</code>\n <p className={className}>\n {text ?? \"The quick brown fox jumps over the lazy dog\"}\n </p>\n </div>\n );\n}\n\nfunction ColorSwatch({\n name,\n className,\n cssVar,\n}: {\n name: string;\n className: string;\n cssVar: string;\n}) {\n return (\n <div className=\"flex items-center gap-3\">\n <span className={`${className} text-sm`}>\n {name}: The quick brown fox jumps over the lazy dog\n </span>\n <code className=\"text-xs font-mono text-faint-foreground ml-auto shrink-0\">\n {cssVar}\n </code>\n </div>\n );\n}\n\nexport default function PlayTypography(): React.ReactElement {\n return (\n <div className=\"w-full py-12 px-4 max-w-4xl space-y-12\">\n {/* ── Page header ──────────────────────────────────────────── */}\n <div>\n <h1>Typography</h1>\n <p className=\"text-base text-muted-foreground mt-1 text-balance\">\n Living style-guide for the typography system. Every specimen uses the\n sanctioned classes from{\" \"}\n <code className=\"text-xs font-mono bg-muted px-1.5 py-0.5 rounded\">\n docs/design/typography.md\n </code>\n .\n </p>\n </div>\n\n <Separator />\n\n {/* ── 1. Font Families ─────────────────────────────────────── */}\n <Section\n title=\"Font Families\"\n description=\"Inter (sans) for UI, JetBrains Mono (mono) for code and data IDs.\"\n >\n <div className=\"space-y-3\">\n <Specimen label=\"font-sans (Inter)\" className=\"font-sans text-base\" />\n <Specimen\n label=\"font-mono (JetBrains Mono)\"\n className=\"font-mono text-base\"\n />\n </div>\n </Section>\n\n <Separator />\n\n {/* ── 2. Type Scale ────────────────────────────────────────── */}\n <Section\n title=\"Type Scale\"\n description=\"Sanctioned sizes from text-xs (12px) to text-3xl (30px).\"\n >\n <div className=\"space-y-4\">\n <Specimen label=\"text-3xl — 30px\" className=\"text-3xl\" />\n <Specimen label=\"text-2xl — 24px\" className=\"text-2xl\" />\n <Specimen label=\"text-xl — 20px\" className=\"text-xl\" />\n <Specimen label=\"text-lg — 18px\" className=\"text-lg\" />\n <Specimen label=\"text-base — 16px\" className=\"text-base\" />\n <Specimen label=\"text-sm — 14px (workhorse)\" className=\"text-sm\" />\n <Specimen label=\"text-xs — 12px\" className=\"text-xs\" />\n </div>\n </Section>\n\n <Separator />\n\n {/* ── 3. Font Weights ──────────────────────────────────────── */}\n <Section\n title=\"Font Weights\"\n description=\"Three sanctioned weights. font-bold (700) and above are prohibited.\"\n >\n <div className=\"space-y-3\">\n <Specimen\n label=\"font-normal (400) — body text, paragraphs\"\n className=\"text-base font-normal\"\n />\n <Specimen\n label=\"font-medium (500) — labels, buttons, interactive elements\"\n className=\"text-base font-medium\"\n />\n <Specimen\n label=\"font-semibold (600) — headings, card titles (max weight)\"\n className=\"text-base font-semibold\"\n />\n </div>\n\n <div className=\"mt-4 p-3 border border-destructive/20 bg-destructive/5 rounded-md\">\n <p className=\"text-sm text-destructive font-medium\">\n Prohibited weights\n </p>\n <div className=\"flex gap-6 mt-2\">\n <span className=\"text-sm text-muted-foreground line-through\">\n font-bold (700)\n </span>\n <span className=\"text-sm text-muted-foreground line-through\">\n font-extrabold (800)\n </span>\n <span className=\"text-sm text-muted-foreground line-through\">\n font-black (900)\n </span>\n </div>\n </div>\n </Section>\n\n <Separator />\n\n {/* ── 4. Heading Hierarchy ─────────────────────────────────── */}\n <Section\n title=\"Heading Hierarchy\"\n description=\"Named utility classes mapped to HTML heading elements via the base layer.\"\n >\n <div className=\"space-y-4 border rounded-md p-6 bg-card\">\n <div className=\"flex flex-col gap-1\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n h1 / .heading-page — text-2xl font-semibold tracking-tight\n </code>\n <h1>Page Title</h1>\n </div>\n\n <div className=\"flex flex-col gap-1\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n h2 / .heading-section — text-xl font-semibold\n </code>\n <h2>Section Heading</h2>\n </div>\n\n <div className=\"flex flex-col gap-1\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n h3 / .heading-sub — text-base font-medium\n </code>\n <h3>Subsection Heading</h3>\n </div>\n\n <div className=\"flex flex-col gap-1\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n h4 / .heading-component — text-sm font-medium\n </code>\n <h4>Component Heading</h4>\n </div>\n\n <div className=\"flex flex-col gap-1\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n h6 / .heading-compact — text-xs font-medium\n </code>\n <h6>Compact Heading</h6>\n </div>\n\n <div className=\"flex flex-col gap-1\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n .heading-meta — text-xs font-medium font-mono uppercase\n tracking-wider\n </code>\n <div className=\"heading-meta\">Meta Heading</div>\n </div>\n </div>\n </Section>\n\n <Separator />\n\n {/* ── 5. Text Color Hierarchy ──────────────────────────────── */}\n <Section\n title=\"Text Color Hierarchy\"\n description=\"Three semantic tiers. Never use hardcoded grays (text-gray-*, text-slate-*).\"\n >\n <div className=\"space-y-3 border rounded-md p-6 bg-card\">\n <ColorSwatch\n name=\"foreground\"\n className=\"text-foreground\"\n cssVar=\"--foreground\"\n />\n <ColorSwatch\n name=\"muted-foreground\"\n className=\"text-muted-foreground\"\n cssVar=\"--muted-foreground\"\n />\n <ColorSwatch\n name=\"faint-foreground\"\n className=\"text-faint-foreground\"\n cssVar=\"--faint-foreground\"\n />\n </div>\n </Section>\n\n <Separator />\n\n {/* ── 6. Line Height & Letter Spacing ──────────────────────── */}\n <Section\n title=\"Line Height & Letter Spacing\"\n description=\"Sanctioned line-height and tracking classes.\"\n >\n <div className=\"space-y-4\">\n <Specimen\n label=\"leading-none (1.0) — compact labels, card titles\"\n className=\"text-sm leading-none\"\n />\n <Specimen label=\"default — most text\" className=\"text-sm\" />\n <Specimen\n label=\"leading-relaxed (1.625) — multi-line descriptions\"\n className=\"text-sm leading-relaxed\"\n text=\"This is a longer paragraph to demonstrate relaxed line height. It should feel airy and comfortable to read, especially in descriptions and body content that spans multiple lines.\"\n />\n <Specimen\n label=\"tracking-tight (-0.025em) — headings\"\n className=\"text-2xl font-semibold tracking-tight\"\n text=\"Page Title With Tracking\"\n />\n <Specimen\n label=\"tracking-wider (0.05em) — meta headings\"\n className=\"heading-meta\"\n text=\"Category Label\"\n />\n </div>\n </Section>\n\n <Separator />\n\n {/* ── 7. Numeric Typography ────────────────────────────────── */}\n <Section\n title=\"Numeric Typography\"\n description=\"tabular-nums for aligned digits. font-mono for IDs and codes.\"\n >\n <div className=\"grid grid-cols-2 gap-6\">\n <div className=\"space-y-2 border rounded-md p-4 bg-card\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n Without tabular-nums\n </code>\n <div className=\"space-y-0.5\">\n <p className=\"text-2xl font-semibold\">1,111</p>\n <p className=\"text-2xl font-semibold\">8,888</p>\n <p className=\"text-2xl font-semibold\">42.7%</p>\n </div>\n </div>\n <div className=\"space-y-2 border rounded-md p-4 bg-card\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n With tabular-nums\n </code>\n <div className=\"space-y-0.5\">\n <p className=\"text-2xl font-semibold tabular-nums\">1,111</p>\n <p className=\"text-2xl font-semibold tabular-nums\">8,888</p>\n <p className=\"text-2xl font-semibold tabular-nums\">42.7%</p>\n </div>\n </div>\n </div>\n\n <div className=\"mt-4 space-y-2\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n font-mono for IDs and codes\n </code>\n <div className=\"space-y-1\">\n <p className=\"text-xs font-mono text-muted-foreground\">\n ent_a1b2c3d4e5f6\n </p>\n <p className=\"text-xs font-mono text-muted-foreground\">\n sk_live_51O2jK2eZvKYlo2C0\n </p>\n <p className=\"text-xs font-mono text-muted-foreground\">\n sha256:9f86d081884c7d659a2feaa0\n </p>\n </div>\n </div>\n </Section>\n\n <Separator />\n\n {/* ── 8. Text Overflow ─────────────────────────────────────── */}\n <Section\n title=\"Text Overflow Handling\"\n description=\"Patterns for dynamic content that can exceed its container.\"\n >\n <div className=\"space-y-4\">\n <div className=\"space-y-1\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n truncate — single-line ellipsis\n </code>\n <p className=\"text-sm truncate max-w-xs border rounded px-2 py-1\">\n This is a very long sidebar item name that will definitely\n overflow its container and needs to be truncated with an ellipsis\n </p>\n </div>\n\n <div className=\"space-y-1\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n line-clamp-2 — multi-line clamp\n </code>\n <p className=\"text-sm line-clamp-2 max-w-sm border rounded px-2 py-1\">\n This is a card description that can span multiple lines. It will\n be clamped to exactly two lines. Any content beyond two lines will\n be hidden and replaced with an ellipsis. This sentence should be\n hidden.\n </p>\n </div>\n\n <div className=\"space-y-1\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n whitespace-nowrap — prevent wrapping (buttons, badges)\n </code>\n <span className=\"text-sm whitespace-nowrap border rounded px-2 py-1 inline-block\">\n Badge text that never wraps\n </span>\n </div>\n </div>\n </Section>\n\n <Separator />\n\n {/* ── 9. Component Patterns ────────────────────────────────── */}\n <Section\n title=\"Component Typography Patterns\"\n description=\"Standard text treatments for common UI components.\"\n >\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {/* Card pattern */}\n <div className=\"border rounded-lg p-4 bg-card space-y-1.5\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n Card\n </code>\n <p className=\"text-lg font-semibold leading-none tracking-tight\">\n Card Title\n </p>\n <p className=\"text-sm text-muted-foreground\">\n Card description with muted foreground color.\n </p>\n <p className=\"text-2xl font-semibold tabular-nums mt-2\">$12,345</p>\n <p className=\"text-xs text-muted-foreground\">\n +20.1% from last month\n </p>\n </div>\n\n {/* Dialog pattern */}\n <div className=\"border rounded-lg p-4 bg-card space-y-1.5\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n Dialog\n </code>\n <p className=\"text-lg font-semibold leading-none tracking-tight\">\n Dialog Title\n </p>\n <p className=\"text-sm text-muted-foreground\">\n Dialog description providing context for the action.\n </p>\n </div>\n\n {/* Button / Label pattern */}\n <div className=\"border rounded-lg p-4 bg-card space-y-3\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n Interactive Elements\n </code>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium leading-none\">Form Label</p>\n <p className=\"text-sm text-muted-foreground\">\n Help text for the field.\n </p>\n </div>\n <div className=\"flex gap-2\">\n <span className=\"text-sm font-medium bg-primary text-primary-foreground rounded-md px-3 py-1.5\">\n Button\n </span>\n <span className=\"text-xs font-medium bg-secondary text-secondary-foreground rounded-full px-2.5 py-0.5\">\n Badge\n </span>\n </div>\n </div>\n\n {/* Table pattern */}\n <div className=\"border rounded-lg p-4 bg-card space-y-2\">\n <code className=\"text-xs font-mono text-faint-foreground\">\n Table\n </code>\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b\">\n <th className=\"text-left font-medium text-foreground py-1\">\n Name\n </th>\n <th className=\"text-right font-medium text-foreground py-1\">\n Count\n </th>\n </tr>\n </thead>\n <tbody>\n <tr className=\"border-b\">\n <td className=\"py-1\">Entities</td>\n <td className=\"text-right tabular-nums\">1,234</td>\n </tr>\n <tr className=\"border-b\">\n <td className=\"py-1\">Relations</td>\n <td className=\"text-right tabular-nums\">567</td>\n </tr>\n <tr>\n <td className=\"py-1\">Schemas</td>\n <td className=\"text-right tabular-nums\">89</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </Section>\n\n <Separator />\n\n {/* ── 10. Responsive Typography ────────────────────────────── */}\n <Section\n title=\"Responsive Typography\"\n description=\"Patterns that adapt to viewport size.\"\n >\n <div className=\"space-y-3\">\n <Specimen\n label=\"Responsive heading: text-xl md:text-2xl\"\n className=\"text-xl md:text-2xl font-semibold tracking-tight\"\n text=\"This heading scales up on wider viewports\"\n />\n <Specimen\n label=\"Responsive input: text-base md:text-sm (prevents iOS zoom)\"\n className=\"text-base md:text-sm border rounded px-2 py-1\"\n text=\"Input text that's 16px on mobile, 14px on desktop\"\n />\n <Specimen\n label=\"text-balance — prevents orphaned words\"\n className=\"text-2xl font-semibold tracking-tight text-balance max-w-sm\"\n text=\"This heading uses text-balance for better line breaks\"\n />\n </div>\n </Section>\n\n <Separator />\n\n {/* ── 11. Font Rendering ───────────────────────────────────── */}\n <Section\n title=\"Font Rendering\"\n description=\"Antialiased rendering is applied globally via the body class.\"\n >\n <div className=\"space-y-2 text-sm\">\n <p>\n The{\" \"}\n <code className=\"font-mono text-xs bg-muted px-1 py-0.5 rounded\">\n antialiased\n </code>{\" \"}\n class on{\" \"}\n <code className=\"font-mono text-xs bg-muted px-1 py-0.5 rounded\">\n &lt;body&gt;\n </code>{\" \"}\n enables{\" \"}\n <code className=\"font-mono text-xs bg-muted px-1 py-0.5 rounded\">\n -webkit-font-smoothing: antialiased\n </code>{\" \"}\n and{\" \"}\n <code className=\"font-mono text-xs bg-muted px-1 py-0.5 rounded\">\n -moz-osx-font-smoothing: grayscale\n </code>\n .\n </p>\n <p className=\"text-muted-foreground\">\n This makes text render thinner and crisper, matching the look of\n polished dashboard UIs like Supabase and shadcn/ui.\n </p>\n </div>\n </Section>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,20 @@
1
+ // src/PlaygroundSection.tsx
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ function PlaygroundSection({
4
+ title,
5
+ description,
6
+ children
7
+ }) {
8
+ return /* @__PURE__ */ jsxs("section", { className: "space-y-4", children: [
9
+ /* @__PURE__ */ jsxs("div", { children: [
10
+ /* @__PURE__ */ jsx("h2", { children: title }),
11
+ description && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mt-1", children: description })
12
+ ] }),
13
+ children
14
+ ] });
15
+ }
16
+
17
+ export {
18
+ PlaygroundSection
19
+ };
20
+ //# sourceMappingURL=chunk-FTN2A5YL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/PlaygroundSection.tsx"],"sourcesContent":["/**\n * Shared section wrapper for playground pages.\n *\n * Provides a consistent titled section with optional description,\n * used across all playground demo pages.\n */\nimport React from \"react\";\n\ninterface PlaygroundSectionProps {\n title: string;\n description?: string;\n children: React.ReactNode;\n}\n\n/** Titled section wrapper used across playground pages. */\nexport function PlaygroundSection({\n title,\n description,\n children,\n}: PlaygroundSectionProps): React.ReactElement {\n return (\n <section className=\"space-y-4\">\n <div>\n <h2>{title}</h2>\n {description && (\n <p className=\"text-sm text-muted-foreground mt-1\">{description}</p>\n )}\n </div>\n {children}\n </section>\n );\n}\n"],"mappings":";AAsBM,SACE,KADF;AAPC,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,GAA+C;AAC7C,SACE,qBAAC,aAAQ,WAAU,aACjB;AAAA,yBAAC,SACC;AAAA,0BAAC,QAAI,iBAAM;AAAA,MACV,eACC,oBAAC,OAAE,WAAU,sCAAsC,uBAAY;AAAA,OAEnE;AAAA,IACC;AAAA,KACH;AAEJ;","names":[]}