@starci/grammar 0.1.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.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/common/index.d.ts +74 -0
  4. package/dist/common/index.d.ts.map +1 -0
  5. package/dist/common/index.js +203 -0
  6. package/dist/common/index.js.map +1 -0
  7. package/dist/common/styles.css +2 -0
  8. package/dist/core/StateMark.d.ts +6 -0
  9. package/dist/core/StateMark.d.ts.map +1 -0
  10. package/dist/core/StateMark.js +9 -0
  11. package/dist/core/StateMark.js.map +1 -0
  12. package/dist/core/branch/Rail/index.d.ts +17 -0
  13. package/dist/core/branch/Rail/index.d.ts.map +1 -0
  14. package/dist/core/branch/Rail/index.js +11 -0
  15. package/dist/core/branch/Rail/index.js.map +1 -0
  16. package/dist/core/branch/SurfaceCard/index.d.ts +34 -0
  17. package/dist/core/branch/SurfaceCard/index.d.ts.map +1 -0
  18. package/dist/core/branch/SurfaceCard/index.js +14 -0
  19. package/dist/core/branch/SurfaceCard/index.js.map +1 -0
  20. package/dist/core/branch/SurfaceListCard/index.d.ts +29 -0
  21. package/dist/core/branch/SurfaceListCard/index.d.ts.map +1 -0
  22. package/dist/core/branch/SurfaceListCard/index.js +16 -0
  23. package/dist/core/branch/SurfaceListCard/index.js.map +1 -0
  24. package/dist/core/contracts.d.ts +190 -0
  25. package/dist/core/contracts.d.ts.map +1 -0
  26. package/dist/core/contracts.js +91 -0
  27. package/dist/core/contracts.js.map +1 -0
  28. package/dist/core/grammar.d.ts +18 -0
  29. package/dist/core/grammar.d.ts.map +1 -0
  30. package/dist/core/grammar.js +27 -0
  31. package/dist/core/grammar.js.map +1 -0
  32. package/dist/core/index.d.ts +8 -0
  33. package/dist/core/index.d.ts.map +1 -0
  34. package/dist/core/index.js +8 -0
  35. package/dist/core/index.js.map +1 -0
  36. package/dist/core/rules.d.ts +45 -0
  37. package/dist/core/rules.d.ts.map +1 -0
  38. package/dist/core/rules.js +45 -0
  39. package/dist/core/rules.js.map +1 -0
  40. package/dist/core/state.d.ts +10 -0
  41. package/dist/core/state.d.ts.map +1 -0
  42. package/dist/core/state.js +24 -0
  43. package/dist/core/state.js.map +1 -0
  44. package/dist/core/styles.css +193 -0
  45. package/dist/offset-pop/index.d.ts +266 -0
  46. package/dist/offset-pop/index.d.ts.map +1 -0
  47. package/dist/offset-pop/index.js +69 -0
  48. package/dist/offset-pop/index.js.map +1 -0
  49. package/dist/offset-pop/styles.css +393 -0
  50. package/package.json +72 -0
@@ -0,0 +1,393 @@
1
+ @layer starci-grammar.offset-pop.tokens,
2
+ starci-grammar.offset-pop.foundation,
3
+ starci-grammar.offset-pop.components,
4
+ starci-grammar.offset-pop.composition,
5
+ starci-grammar.offset-pop.states,
6
+ starci-grammar.offset-pop.responsive;
7
+
8
+ @layer starci-grammar.offset-pop.tokens {
9
+ [data-grammar="offset-pop"] {
10
+ color-scheme: light;
11
+
12
+ --offset-pop-canvas: #fff8ef;
13
+ --offset-pop-canvas-dot: rgb(28 21 36 / 12%);
14
+ --offset-pop-ink: #1c1524;
15
+ --offset-pop-muted: #716a76;
16
+ --offset-pop-surface: #fffdf9;
17
+ --offset-pop-surface-muted: #f8dbe8;
18
+ --offset-pop-pink: #ff3593;
19
+ --offset-pop-yellow: #ffd447;
20
+ --offset-pop-mint: #91e4ca;
21
+ --offset-pop-blush: #f8d8e6;
22
+ --offset-pop-critical: #e84a5f;
23
+
24
+ --offset-pop-outline-width: 2px;
25
+ --offset-pop-divider-width: 2px;
26
+ --offset-pop-shadow-x: 6px;
27
+ --offset-pop-shadow-y: 7px;
28
+ --offset-pop-shadow-blur: 0;
29
+ --offset-pop-shadow-spread: 0;
30
+ --offset-pop-radius-surface: 1.5rem;
31
+ --offset-pop-radius-control: 1.125rem;
32
+ --offset-pop-radius-pill: 999px;
33
+ --offset-pop-focus-width: 3px;
34
+ --offset-pop-focus-gap: 3px;
35
+ --offset-pop-press-x: 3px;
36
+ --offset-pop-press-y: 4px;
37
+ --offset-pop-rotation-low: -3deg;
38
+ --offset-pop-rotation-high: 3deg;
39
+ --offset-pop-overlap: clamp(1rem, 4cqi, 3rem);
40
+ --offset-pop-dot-step: 24px;
41
+ --offset-pop-transition: 140ms cubic-bezier(.2, .8, .2, 1);
42
+ --offset-pop-display-weight: 900;
43
+ --offset-pop-display-tracking: -.045em;
44
+ }
45
+
46
+ [data-theme="dark"][data-grammar="offset-pop"],
47
+ .dark [data-grammar="offset-pop"] {
48
+ color-scheme: dark;
49
+
50
+ --offset-pop-canvas: #17121d;
51
+ --offset-pop-canvas-dot: rgb(255 248 239 / 14%);
52
+ --offset-pop-ink: #fff8ef;
53
+ --offset-pop-muted: #c8bdca;
54
+ --offset-pop-surface: #251d2c;
55
+ --offset-pop-surface-muted: #3b2936;
56
+ --offset-pop-shadow-ink: #050306;
57
+ }
58
+ }
59
+
60
+ @layer starci-grammar.offset-pop.foundation {
61
+ [data-grammar="offset-pop"] {
62
+ --offset-pop-shadow-ink: var(--offset-pop-ink);
63
+
64
+ color: var(--offset-pop-ink);
65
+ background-color: var(--offset-pop-canvas);
66
+ }
67
+
68
+ [data-grammar="offset-pop"] [data-grammar-dot-field] {
69
+ background-color: var(--offset-pop-canvas);
70
+ background-image: radial-gradient(
71
+ circle,
72
+ var(--offset-pop-canvas-dot) 1px,
73
+ transparent 1.25px
74
+ );
75
+ background-position: center;
76
+ background-size: var(--offset-pop-dot-step) var(--offset-pop-dot-step);
77
+ }
78
+
79
+ [data-grammar="offset-pop"] [data-grammar-display] {
80
+ color: var(--offset-pop-ink);
81
+ font-weight: var(--offset-pop-display-weight);
82
+ letter-spacing: var(--offset-pop-display-tracking);
83
+ line-height: .96;
84
+ text-wrap: balance;
85
+ }
86
+
87
+ [data-grammar="offset-pop"] [data-grammar-muted] {
88
+ color: var(--offset-pop-muted);
89
+ }
90
+
91
+ [data-grammar="offset-pop"] [data-grammar-accent="pink"] {
92
+ --offset-pop-local-accent: var(--offset-pop-pink);
93
+ }
94
+
95
+ [data-grammar="offset-pop"] [data-grammar-accent="yellow"] {
96
+ --offset-pop-local-accent: var(--offset-pop-yellow);
97
+ }
98
+
99
+ [data-grammar="offset-pop"] [data-grammar-accent="mint"] {
100
+ --offset-pop-local-accent: var(--offset-pop-mint);
101
+ }
102
+
103
+ [data-grammar="offset-pop"] [data-grammar-accent="blush"] {
104
+ --offset-pop-local-accent: var(--offset-pop-blush);
105
+ }
106
+ }
107
+
108
+ @layer starci-grammar.offset-pop.components {
109
+ [data-grammar="offset-pop"] [data-grammar-surface] {
110
+ position: relative;
111
+ border: var(--offset-pop-outline-width) solid var(--offset-pop-ink);
112
+ border-radius: var(--offset-pop-radius-surface);
113
+ color: var(--offset-pop-ink);
114
+ background: var(--offset-pop-surface);
115
+ }
116
+
117
+ [data-grammar="offset-pop"] [data-grammar-surface][data-grammar-surface-depth="top"] {
118
+ box-shadow:
119
+ var(--offset-pop-shadow-x)
120
+ var(--offset-pop-shadow-y)
121
+ var(--offset-pop-shadow-blur)
122
+ var(--offset-pop-shadow-spread)
123
+ var(--offset-pop-shadow-ink);
124
+ }
125
+
126
+ [data-grammar="offset-pop"] [data-grammar-surface][data-grammar-surface-depth="nested"] {
127
+ box-shadow: none;
128
+ background: color-mix(in srgb, var(--offset-pop-surface) 88%, transparent);
129
+ }
130
+
131
+ [data-grammar="offset-pop"] [data-grammar-surface-label] {
132
+ color: var(--offset-pop-ink);
133
+ font-weight: 800;
134
+ letter-spacing: -.015em;
135
+ }
136
+
137
+ [data-grammar="offset-pop"] [data-grammar-surface-content] {
138
+ min-inline-size: 0;
139
+ }
140
+
141
+ [data-grammar="offset-pop"] [data-grammar-list] {
142
+ overflow: clip;
143
+ border-radius: calc(var(--offset-pop-radius-surface) - var(--offset-pop-outline-width));
144
+ }
145
+
146
+ [data-grammar="offset-pop"] [data-grammar-row] {
147
+ border-block-end: var(--offset-pop-divider-width) solid var(--offset-pop-ink);
148
+ background: transparent;
149
+ }
150
+
151
+ [data-grammar="offset-pop"] [data-grammar-row]:last-child {
152
+ border-block-end: 0;
153
+ }
154
+
155
+ [data-grammar="offset-pop"] [data-grammar-state-mark] {
156
+ color: var(--offset-pop-ink);
157
+ background: var(--offset-pop-mint);
158
+ border: var(--offset-pop-outline-width) solid var(--offset-pop-ink);
159
+ border-radius: var(--offset-pop-radius-pill);
160
+ }
161
+
162
+ [data-grammar="offset-pop"] [data-grammar-rail] {
163
+ color: var(--offset-pop-ink);
164
+ background: var(--offset-pop-canvas);
165
+ border-inline-end: var(--offset-pop-outline-width) solid var(--offset-pop-ink);
166
+ }
167
+
168
+ [data-grammar="offset-pop"] [data-grammar-rail-body] {
169
+ scrollbar-color: var(--offset-pop-ink) transparent;
170
+ scrollbar-width: thin;
171
+ }
172
+
173
+ [data-grammar="offset-pop"] [data-grammar-band] {
174
+ color: var(--offset-pop-ink);
175
+ background: var(--offset-pop-local-accent, var(--offset-pop-pink));
176
+ border-block: var(--offset-pop-outline-width) solid var(--offset-pop-ink);
177
+ }
178
+
179
+ [data-grammar="offset-pop"] [data-grammar-band] > * + * {
180
+ border-inline-start: var(--offset-pop-divider-width) solid color-mix(in srgb, var(--offset-pop-ink) 35%, transparent);
181
+ }
182
+
183
+ [data-grammar="offset-pop"] [data-grammar-emphasis] {
184
+ position: relative;
185
+ z-index: 0;
186
+ color: var(--offset-pop-pink);
187
+ white-space: nowrap;
188
+ }
189
+
190
+ [data-grammar="offset-pop"] [data-grammar-emphasis]::after {
191
+ position: absolute;
192
+ z-index: -1;
193
+ inset: 52% -.08em -.08em;
194
+ border: var(--offset-pop-outline-width) solid currentColor;
195
+ border-radius: 50%;
196
+ content: "";
197
+ transform: rotate(-2deg);
198
+ pointer-events: none;
199
+ }
200
+ }
201
+
202
+ @layer starci-grammar.offset-pop.composition {
203
+ [data-grammar="offset-pop"] [data-grammar-floating-cluster] {
204
+ container: offset-pop-cluster / inline-size;
205
+ isolation: isolate;
206
+ display: grid;
207
+ grid-template: minmax(20rem, 1fr) / minmax(0, 1fr);
208
+ min-inline-size: 0;
209
+ padding:
210
+ calc(var(--offset-pop-shadow-y) + .75rem)
211
+ calc(var(--offset-pop-shadow-x) + .75rem);
212
+ }
213
+
214
+ [data-grammar="offset-pop"] [data-grammar-floating-item] {
215
+ grid-area: 1 / 1;
216
+ inline-size: min(78%, 22rem);
217
+ min-inline-size: 0;
218
+ align-self: start;
219
+ justify-self: start;
220
+ transform: rotate(var(--offset-pop-item-rotation, 0deg));
221
+ transform-origin: center;
222
+ z-index: var(--offset-pop-item-layer, 1);
223
+ }
224
+
225
+ [data-grammar="offset-pop"] [data-grammar-floating-item]:nth-child(3n + 1) {
226
+ --offset-pop-item-layer: 1;
227
+ --offset-pop-item-rotation: var(--offset-pop-rotation-low);
228
+ }
229
+
230
+ [data-grammar="offset-pop"] [data-grammar-floating-item]:nth-child(3n + 2) {
231
+ --offset-pop-item-layer: 2;
232
+ --offset-pop-item-rotation: var(--offset-pop-rotation-high);
233
+
234
+ align-self: center;
235
+ justify-self: end;
236
+ margin-block-start: var(--offset-pop-overlap);
237
+ }
238
+
239
+ [data-grammar="offset-pop"] [data-grammar-floating-item]:nth-child(3n) {
240
+ --offset-pop-item-layer: 3;
241
+ --offset-pop-item-rotation: -1deg;
242
+
243
+ align-self: end;
244
+ justify-self: center;
245
+ inline-size: min(68%, 18rem);
246
+ }
247
+
248
+ [data-grammar="offset-pop"] [data-grammar-floating-item]:focus-within {
249
+ z-index: 10;
250
+ }
251
+ }
252
+
253
+ @layer starci-grammar.offset-pop.states {
254
+ [data-grammar="offset-pop"] [data-grammar-surface],
255
+ [data-grammar="offset-pop"] [data-grammar-row] {
256
+ transition:
257
+ transform var(--offset-pop-transition),
258
+ box-shadow var(--offset-pop-transition),
259
+ background-color var(--offset-pop-transition),
260
+ opacity var(--offset-pop-transition);
261
+ }
262
+
263
+ [data-grammar="offset-pop"] [data-grammar-whole-action] {
264
+ border-radius: inherit;
265
+ outline: 0;
266
+ }
267
+
268
+ [data-grammar="offset-pop"] [data-grammar-surface]:has([data-grammar-whole-action]:focus-visible),
269
+ [data-grammar="offset-pop"] [data-grammar-row]:focus-within {
270
+ outline: var(--offset-pop-focus-width) solid var(--offset-pop-pink);
271
+ outline-offset: var(--offset-pop-focus-gap);
272
+ }
273
+
274
+ [data-grammar="offset-pop"] [data-grammar-surface][data-grammar-surface-depth="top"]:has([data-grammar-whole-action]:active) {
275
+ box-shadow:
276
+ calc(var(--offset-pop-shadow-x) - var(--offset-pop-press-x))
277
+ calc(var(--offset-pop-shadow-y) - var(--offset-pop-press-y))
278
+ 0
279
+ 0
280
+ var(--offset-pop-shadow-ink);
281
+ transform: translate(var(--offset-pop-press-x), var(--offset-pop-press-y));
282
+ }
283
+
284
+ [data-grammar="offset-pop"] [data-grammar-surface][data-grammar-surface-depth="nested"]:has([data-grammar-whole-action]:active) {
285
+ transform: translateY(1px);
286
+ }
287
+
288
+ [data-grammar="offset-pop"] [data-grammar-row]:has(:is(a, button):hover) {
289
+ background: color-mix(in srgb, var(--offset-pop-yellow) 32%, transparent);
290
+ }
291
+
292
+ [data-grammar="offset-pop"] [data-grammar-state="affirmative"] [data-grammar-state-mark] {
293
+ background: var(--offset-pop-mint);
294
+ }
295
+
296
+ [data-grammar="offset-pop"] [data-grammar-state="informative"] [data-grammar-state-mark] {
297
+ background: var(--offset-pop-blush);
298
+ }
299
+
300
+ [data-grammar="offset-pop"] [data-grammar-state="cautionary"] [data-grammar-state-mark] {
301
+ background: var(--offset-pop-yellow);
302
+ }
303
+
304
+ [data-grammar="offset-pop"] [data-grammar-state="negative"] [data-grammar-state-mark] {
305
+ color: var(--offset-pop-surface);
306
+ background: var(--offset-pop-critical);
307
+ }
308
+
309
+ [data-grammar="offset-pop"] [data-grammar-state="unavailable"] {
310
+ box-shadow: none;
311
+ opacity: .56;
312
+ transform: none;
313
+ cursor: not-allowed;
314
+ }
315
+
316
+ [data-grammar="offset-pop"] [data-grammar-state="pending"] {
317
+ pointer-events: none;
318
+ }
319
+
320
+ [data-grammar="offset-pop"] [data-grammar-state="pending"] > * {
321
+ animation: none;
322
+ }
323
+ }
324
+
325
+ @layer starci-grammar.offset-pop.responsive {
326
+ @container offset-pop-cluster (max-width: 34rem) {
327
+ [data-grammar="offset-pop"] [data-grammar-floating-cluster] {
328
+ display: flex;
329
+ flex-direction: column;
330
+ gap: 1rem;
331
+ min-block-size: auto;
332
+ }
333
+
334
+ [data-grammar="offset-pop"] [data-grammar-floating-item] {
335
+ inline-size: 100%;
336
+ margin: 0;
337
+ transform: rotate(0deg);
338
+ }
339
+ }
340
+
341
+ @container (max-width: 40rem) {
342
+ [data-grammar="offset-pop"] {
343
+ --offset-pop-shadow-x: 4px;
344
+ --offset-pop-shadow-y: 5px;
345
+ --offset-pop-radius-surface: 1.25rem;
346
+ --offset-pop-overlap: .75rem;
347
+ }
348
+
349
+ [data-grammar="offset-pop"] [data-grammar-band] {
350
+ grid-template-columns: repeat(2, minmax(0, 1fr));
351
+ }
352
+
353
+ [data-grammar="offset-pop"] [data-grammar-band] > * + * {
354
+ border-inline-start: 0;
355
+ }
356
+
357
+ [data-grammar="offset-pop"] [data-grammar-band] > :nth-child(even) {
358
+ border-inline-start: var(--offset-pop-divider-width) solid color-mix(in srgb, var(--offset-pop-ink) 35%, transparent);
359
+ }
360
+
361
+ [data-grammar="offset-pop"] [data-grammar-band] > :nth-child(n + 3) {
362
+ border-block-start: var(--offset-pop-divider-width) solid color-mix(in srgb, var(--offset-pop-ink) 35%, transparent);
363
+ }
364
+ }
365
+
366
+ @media (prefers-reduced-motion: reduce) {
367
+ [data-grammar="offset-pop"] {
368
+ --offset-pop-transition: 0ms linear;
369
+ }
370
+
371
+ [data-grammar="offset-pop"] [data-grammar-floating-item],
372
+ [data-grammar="offset-pop"] [data-grammar-emphasis]::after {
373
+ transform: none;
374
+ }
375
+ }
376
+
377
+ @media (forced-colors: active) {
378
+ [data-grammar="offset-pop"] [data-grammar-surface],
379
+ [data-grammar="offset-pop"] [data-grammar-state-mark],
380
+ [data-grammar="offset-pop"] [data-grammar-rail],
381
+ [data-grammar="offset-pop"] [data-grammar-band] {
382
+ border-color: CanvasText;
383
+ color: CanvasText;
384
+ background: Canvas;
385
+ box-shadow: none;
386
+ }
387
+
388
+ [data-grammar="offset-pop"] [data-grammar-surface]:has([data-grammar-whole-action]:focus-visible),
389
+ [data-grammar="offset-pop"] [data-grammar-row]:focus-within {
390
+ outline-color: Highlight;
391
+ }
392
+ }
393
+ }
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@starci/grammar",
3
+ "version": "0.1.0",
4
+ "description": "Business-neutral StarCi UI contracts and versioned Grammar bundles.",
5
+ "keywords": [
6
+ "starci",
7
+ "design-system",
8
+ "ui-contracts",
9
+ "grammar"
10
+ ],
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/starci-lab/starci-academy-fe.git",
14
+ "directory": "packages/grammar"
15
+ },
16
+ "bugs": {
17
+ "url": "https://github.com/starci-lab/starci-academy-fe/issues"
18
+ },
19
+ "homepage": "https://github.com/starci-lab/starci-academy-fe/tree/main/packages/grammar#readme",
20
+ "type": "module",
21
+ "sideEffects": [
22
+ "./dist/**/*.css"
23
+ ],
24
+ "files": [
25
+ "dist",
26
+ "README.md",
27
+ "LICENSE"
28
+ ],
29
+ "exports": {
30
+ "./common": {
31
+ "types": "./dist/common/index.d.ts",
32
+ "import": "./dist/common/index.js"
33
+ },
34
+ "./common.css": "./dist/common/styles.css",
35
+ "./common/styles.css": "./dist/common/styles.css",
36
+ "./core": {
37
+ "types": "./dist/core/index.d.ts",
38
+ "import": "./dist/core/index.js"
39
+ },
40
+ "./core.css": "./dist/core/styles.css",
41
+ "./core/styles.css": "./dist/core/styles.css",
42
+ "./offset-pop": {
43
+ "types": "./dist/offset-pop/index.d.ts",
44
+ "import": "./dist/offset-pop/index.js"
45
+ },
46
+ "./offset-pop.css": "./dist/offset-pop/styles.css",
47
+ "./offset-pop/styles.css": "./dist/offset-pop/styles.css",
48
+ "./package.json": "./package.json"
49
+ },
50
+ "scripts": {
51
+ "build": "node scripts/clean.mjs && tsc -p tsconfig.build.json && node scripts/copy-css.mjs",
52
+ "typecheck": "tsc -p tsconfig.build.json --noEmit",
53
+ "test": "npm run build && node --test src/common/index.test.mjs src/core/index.test.mjs src/offset-pop/index.test.mjs && vitest run --config vitest.config.ts src/offset-pop/styles.spec.ts",
54
+ "prepack": "npm run typecheck && npm test"
55
+ },
56
+ "engines": {
57
+ "node": ">=20"
58
+ },
59
+ "peerDependencies": {
60
+ "react": ">=18"
61
+ },
62
+ "devDependencies": {
63
+ "@types/react": "^19.0.0",
64
+ "react": "^19.0.0",
65
+ "typescript": "^5.0.0",
66
+ "vitest": "^4.1.11"
67
+ },
68
+ "license": "MIT",
69
+ "publishConfig": {
70
+ "access": "public"
71
+ }
72
+ }