@ketvietlab/design-system 0.1.16 → 0.1.18

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 (98) hide show
  1. package/README.md +29 -0
  2. package/dist/catalogue/catalogue.css +8 -0
  3. package/dist/catalogue/index.js +1 -1
  4. package/dist/catalogue/inventory-policy.json +35 -0
  5. package/dist/catalogue/inventory.generated.js +1 -1
  6. package/dist/catalogue/inventory.generated.js.map +1 -1
  7. package/dist/catalogue/inventory.generated.json +1073 -113
  8. package/dist/catalogue/registry.d.ts.map +1 -1
  9. package/dist/catalogue/registry.js +6 -0
  10. package/dist/catalogue/registry.js.map +1 -1
  11. package/dist/catalogue/specimens.d.ts.map +1 -1
  12. package/dist/catalogue/specimens.js +113 -8
  13. package/dist/catalogue/specimens.js.map +1 -1
  14. package/dist/contract/index.d.ts.map +1 -1
  15. package/dist/contract/index.js +6 -0
  16. package/dist/contract/index.js.map +1 -1
  17. package/dist/data-display/bar-chart/index.d.ts +61 -0
  18. package/dist/data-display/bar-chart/index.d.ts.map +1 -0
  19. package/dist/data-display/bar-chart/index.js +64 -0
  20. package/dist/data-display/bar-chart/index.js.map +1 -0
  21. package/dist/data-display/bar-chart/styles.css +191 -0
  22. package/dist/data-display/matrix/index.d.ts +36 -0
  23. package/dist/data-display/matrix/index.d.ts.map +1 -0
  24. package/dist/data-display/matrix/index.js +28 -0
  25. package/dist/data-display/matrix/index.js.map +1 -0
  26. package/dist/data-display/matrix/styles.css +148 -0
  27. package/dist/data-operations/timeframe-filter/index.d.ts +34 -0
  28. package/dist/data-operations/timeframe-filter/index.d.ts.map +1 -0
  29. package/dist/data-operations/timeframe-filter/index.js +30 -0
  30. package/dist/data-operations/timeframe-filter/index.js.map +1 -0
  31. package/dist/data-operations/timeframe-filter/styles.css +109 -0
  32. package/dist/foundations/tokens.css +10 -0
  33. package/dist/index.d.ts +11 -3
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +4 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/interactions/menu/index.d.ts +17 -2
  38. package/dist/interactions/menu/index.d.ts.map +1 -1
  39. package/dist/interactions/menu/index.js +21 -5
  40. package/dist/interactions/menu/index.js.map +1 -1
  41. package/dist/interactions/menu/styles.css +36 -0
  42. package/dist/layouts/app-navigation/styles.css +8 -0
  43. package/dist/layouts/layout/index.d.ts +43 -3
  44. package/dist/layouts/layout/index.d.ts.map +1 -1
  45. package/dist/layouts/layout/index.js +28 -4
  46. package/dist/layouts/layout/index.js.map +1 -1
  47. package/dist/layouts/layout/styles.css +182 -4
  48. package/dist/layouts/page-identity/index.d.ts +19 -0
  49. package/dist/layouts/page-identity/index.d.ts.map +1 -0
  50. package/dist/layouts/page-identity/index.js +6 -0
  51. package/dist/layouts/page-identity/index.js.map +1 -0
  52. package/dist/layouts/shell/index.d.ts +7 -11
  53. package/dist/layouts/shell/index.d.ts.map +1 -1
  54. package/dist/layouts/shell/index.js +12 -2
  55. package/dist/layouts/shell/index.js.map +1 -1
  56. package/dist/layouts/shell/styles.css +16 -31
  57. package/dist/patterns/data-table/index.d.ts.map +1 -1
  58. package/dist/patterns/data-table/index.js +1 -1
  59. package/dist/patterns/data-table/index.js.map +1 -1
  60. package/dist/patterns/data-table/styles.css +132 -43
  61. package/dist/patterns/list-chrome/index.d.ts +2 -2
  62. package/dist/patterns/list-chrome/index.d.ts.map +1 -1
  63. package/dist/patterns/list-chrome/index.js +4 -3
  64. package/dist/patterns/list-chrome/index.js.map +1 -1
  65. package/dist/patterns/list-chrome/styles.css +122 -40
  66. package/dist/patterns/list-page/styles.css +5 -1
  67. package/dist/patterns/modal-sheet/index.d.ts +9 -2
  68. package/dist/patterns/modal-sheet/index.d.ts.map +1 -1
  69. package/dist/patterns/modal-sheet/index.js +5 -1
  70. package/dist/patterns/modal-sheet/index.js.map +1 -1
  71. package/dist/patterns/modal-sheet/styles.css +1 -1
  72. package/dist/patterns/page-shell/index.d.ts +2 -23
  73. package/dist/patterns/page-shell/index.d.ts.map +1 -1
  74. package/dist/patterns/page-shell/index.js +1 -10
  75. package/dist/patterns/page-shell/index.js.map +1 -1
  76. package/dist/patterns/page-shell/styles.css +131 -0
  77. package/dist/patterns/patterns.css +1 -0
  78. package/dist/primitives/feedback/index.d.ts.map +1 -1
  79. package/dist/primitives/feedback/index.js +9 -2
  80. package/dist/primitives/feedback/index.js.map +1 -1
  81. package/dist/primitives/feedback/styles.css +42 -17
  82. package/dist/primitives/navigation/index.d.ts +11 -5
  83. package/dist/primitives/navigation/index.d.ts.map +1 -1
  84. package/dist/primitives/navigation/index.js +17 -2
  85. package/dist/primitives/navigation/index.js.map +1 -1
  86. package/dist/primitives/navigation/styles.css +101 -13
  87. package/dist/primitives/status/index.d.ts.map +1 -1
  88. package/dist/primitives/status/index.js +2 -2
  89. package/dist/primitives/status/index.js.map +1 -1
  90. package/dist/primitives/status/styles.css +8 -8
  91. package/dist/record/display/index.js +1 -1
  92. package/dist/record/display/index.js.map +1 -1
  93. package/dist/record/display/styles.css +2 -2
  94. package/dist/runtime/index.d.ts.map +1 -1
  95. package/dist/runtime/index.js +99 -4
  96. package/dist/runtime/index.js.map +1 -1
  97. package/dist/styles.css +2 -50
  98. package/package.json +2 -2
@@ -1,12 +1,14 @@
1
1
  @layer ket.app {
2
- :where([data-kv-design-system]) [data-ui="list-chrome"] {
2
+ :where([data-kv-design-system]) [data-ui="list-chrome"][data-pattern="list-chrome"] {
3
3
  display: grid;
4
4
  gap: var(--kv-space-2);
5
5
  width: 100%;
6
6
  min-width: 0;
7
7
  }
8
8
 
9
- :where([data-kv-design-system]) [data-ui="list-chrome-row"] {
9
+ :where([data-kv-design-system])
10
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
11
+ [data-ui="list-chrome-row"] {
10
12
  display: flex;
11
13
  flex-wrap: wrap;
12
14
  align-items: center;
@@ -14,21 +16,29 @@
14
16
  min-width: 0;
15
17
  }
16
18
 
17
- :where([data-kv-design-system]) [data-ui="list-chrome-row"]:empty {
19
+ :where([data-kv-design-system])
20
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
21
+ [data-ui="list-chrome-row"]:empty {
18
22
  display: none;
19
23
  }
20
24
 
21
- :where([data-kv-design-system]) [data-ui="list-chrome-row"][data-row="query"] {
25
+ :where([data-kv-design-system])
26
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
27
+ [data-ui="list-chrome-row"][data-row="query"] {
22
28
  flex-wrap: nowrap;
23
29
  align-items: center;
24
30
  }
25
31
 
26
- :where([data-kv-design-system]) [data-ui="list-chrome-row"][data-row="filters"] {
32
+ :where([data-kv-design-system])
33
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
34
+ [data-ui="list-chrome-row"][data-row="filters"] {
27
35
  flex: 0 1 auto;
28
36
  min-width: 0;
29
37
  }
30
38
 
31
- :where([data-kv-design-system]) [data-ui="list-chrome-row"][data-row="tail"] {
39
+ :where([data-kv-design-system])
40
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
41
+ [data-ui="list-chrome-row"][data-row="tail"] {
32
42
  flex: 0 1 auto;
33
43
  flex-wrap: nowrap;
34
44
  align-items: center;
@@ -36,12 +46,16 @@
36
46
  max-width: 100%;
37
47
  }
38
48
 
39
- :where([data-kv-design-system]) [data-ui="list-chrome-row"][data-row="meta"] {
49
+ :where([data-kv-design-system])
50
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
51
+ [data-ui="list-chrome-row"][data-row="meta"] {
40
52
  flex: 0 0 auto;
41
53
  flex-wrap: nowrap;
42
54
  }
43
55
 
44
- :where([data-kv-design-system]) [data-ui="list-search"] {
56
+ :where([data-kv-design-system])
57
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
58
+ [data-ui="list-search"] {
45
59
  display: flex;
46
60
  flex: 1 1 16rem;
47
61
  align-items: stretch;
@@ -52,13 +66,19 @@
52
66
  background: var(--kv-input-bg);
53
67
  }
54
68
 
55
- :where([data-kv-design-system]) [data-ui="list-search"]:focus-within {
69
+ :where([data-kv-design-system])
70
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
71
+ [data-ui="list-search"]:focus-within {
56
72
  border-color: var(--kv-input-border-focus);
57
73
  box-shadow: var(--kv-input-ring);
58
74
  }
59
75
 
60
- :where([data-kv-design-system]) [data-ui="list-search-label"],
61
- :where([data-kv-design-system]) [data-ui="list-sort-label"] {
76
+ :where([data-kv-design-system])
77
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
78
+ [data-ui="list-search-label"],
79
+ :where([data-kv-design-system])
80
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
81
+ [data-ui="list-sort-label"] {
62
82
  position: absolute;
63
83
  width: 1px;
64
84
  height: 1px;
@@ -67,8 +87,12 @@
67
87
  white-space: nowrap;
68
88
  }
69
89
 
70
- :where([data-kv-design-system]) [data-ui="list-search-input"],
71
- :where([data-kv-design-system]) [data-ui="list-sort-select"] {
90
+ :where([data-kv-design-system])
91
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
92
+ [data-ui="list-search-input"],
93
+ :where([data-kv-design-system])
94
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
95
+ [data-ui="list-sort-select"] {
72
96
  width: 100%;
73
97
  min-width: 0;
74
98
  min-height: var(--kv-control-height-compact);
@@ -79,7 +103,9 @@
79
103
  font: inherit;
80
104
  }
81
105
 
82
- :where([data-kv-design-system]) [data-ui="list-search-input"] {
106
+ :where([data-kv-design-system])
107
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
108
+ [data-ui="list-search-input"] {
83
109
  flex: 1 1 auto;
84
110
  width: 100%;
85
111
  min-width: 0;
@@ -91,19 +117,25 @@
91
117
  font: inherit;
92
118
  }
93
119
 
94
- :where([data-kv-design-system]) [data-ui="list-search-input"]:focus-visible {
120
+ :where([data-kv-design-system])
121
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
122
+ [data-ui="list-search-input"]:focus-visible {
95
123
  outline: none;
96
124
  box-shadow: none;
97
125
  }
98
126
 
99
- :where([data-kv-design-system]) [data-ui="list-search-submit"] {
127
+ :where([data-kv-design-system])
128
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
129
+ [data-ui="list-search-submit"] {
100
130
  display: inline-flex;
101
131
  align-items: center;
102
132
  padding-right: var(--kv-space-1);
103
133
  }
104
134
 
105
- :where([data-kv-design-system]) [data-ui="list-facets"],
106
- :where([data-kv-design-system]) [data-ui="list-view-switch"] {
135
+ :where([data-kv-design-system]) [data-ui="list-chrome"][data-pattern="list-chrome"] [data-ui="list-facets"],
136
+ :where([data-kv-design-system])
137
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
138
+ [data-ui="list-view-switch"] {
107
139
  display: flex;
108
140
  flex-wrap: wrap;
109
141
  align-items: center;
@@ -112,8 +144,8 @@
112
144
  max-width: 100%;
113
145
  }
114
146
 
115
- :where([data-kv-design-system]) [data-ui="list-facet"],
116
- :where([data-kv-design-system]) [data-ui="list-view"] {
147
+ :where([data-kv-design-system]) [data-ui="list-chrome"][data-pattern="list-chrome"] [data-ui="list-facet"],
148
+ :where([data-kv-design-system]) [data-ui="list-chrome"][data-pattern="list-chrome"] [data-ui="list-view"] {
117
149
  display: inline-flex;
118
150
  align-items: center;
119
151
  gap: var(--kv-space-1);
@@ -127,14 +159,20 @@
127
159
  text-decoration: none;
128
160
  }
129
161
 
130
- :where([data-kv-design-system]) [data-ui="list-facet"][data-active="true"],
131
- :where([data-kv-design-system]) [data-ui="list-view"][data-active="true"] {
162
+ :where([data-kv-design-system])
163
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
164
+ [data-ui="list-facet"][data-active="true"],
165
+ :where([data-kv-design-system])
166
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
167
+ [data-ui="list-view"][data-active="true"] {
132
168
  border-color: var(--kv-color-accent);
133
169
  background: var(--kv-color-accent-soft);
134
170
  color: var(--kv-color-accent);
135
171
  }
136
172
 
137
- :where([data-kv-design-system]) [data-ui="list-facet-count"] {
173
+ :where([data-kv-design-system])
174
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
175
+ [data-ui="list-facet-count"] {
138
176
  display: inline-grid;
139
177
  min-width: 1.375rem;
140
178
  padding: 0 var(--kv-space-1);
@@ -147,30 +185,38 @@
147
185
  text-align: center;
148
186
  }
149
187
 
150
- :where([data-kv-design-system]) [data-ui="list-sort"] {
188
+ :where([data-kv-design-system]) [data-ui="list-chrome"][data-pattern="list-chrome"] [data-ui="list-sort"] {
151
189
  display: inline-grid;
152
190
  grid-template-columns: minmax(8rem, 12rem) auto;
153
191
  align-items: center;
154
192
  gap: var(--kv-space-2);
155
193
  }
156
194
 
157
- :where([data-kv-design-system]) [data-ui="list-sort-select"] {
195
+ :where([data-kv-design-system])
196
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
197
+ [data-ui="list-sort-select"] {
158
198
  padding: 0 var(--kv-space-2);
159
199
  }
160
200
 
161
- :where([data-kv-design-system]) [data-ui="list-status"] {
201
+ :where([data-kv-design-system])
202
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
203
+ [data-ui="list-status"] {
162
204
  color: var(--kv-text-muted);
163
205
  font-size: var(--kv-text-sm);
164
206
  }
165
207
 
166
- :where([data-kv-design-system]) [data-ui="list-actions"] {
208
+ :where([data-kv-design-system])
209
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
210
+ [data-ui="list-actions"] {
167
211
  display: inline-flex;
168
212
  flex-wrap: wrap;
169
213
  justify-content: flex-end;
170
214
  gap: var(--kv-space-2);
171
215
  }
172
216
 
173
- :where([data-kv-design-system]) [data-ui="bulk-actions"] {
217
+ :where([data-kv-design-system])
218
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
219
+ [data-ui="bulk-actions"] {
174
220
  display: flex;
175
221
  flex-wrap: wrap;
176
222
  align-items: center;
@@ -180,11 +226,13 @@
180
226
  font-size: var(--kv-text-sm);
181
227
  }
182
228
 
183
- :where([data-kv-design-system]) [data-ui="bulk-actions"]:not([data-has-selection="true"]) {
229
+ :where([data-kv-design-system])
230
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
231
+ [data-ui="bulk-actions"]:not([data-has-selection="true"]) {
184
232
  display: none;
185
233
  }
186
234
 
187
- :where([data-kv-design-system]) [data-ui="pager-bar"] {
235
+ :where([data-kv-design-system]) [data-ui="list-chrome"][data-pattern="list-chrome"] [data-ui="pager-bar"] {
188
236
  display: flex;
189
237
  flex-wrap: nowrap;
190
238
  align-items: center;
@@ -195,12 +243,25 @@
195
243
  font-size: var(--kv-text-sm);
196
244
  }
197
245
 
198
- :where([data-kv-design-system]) [data-ui="bulk-actions"][data-has-selection="true"] {
246
+ :where([data-kv-design-system])
247
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
248
+ [data-ui="bulk-actions"][data-has-selection="true"] {
199
249
  color: var(--kv-text-secondary);
200
250
  }
201
251
 
202
- :where([data-kv-design-system]) [data-ui="bulk-summary"],
203
- :where([data-kv-design-system]) [data-ui="pager-summary"] {
252
+ /* The live selected-row figure the runtime rewrites as checkboxes change. */
253
+ :where([data-kv-design-system]) [data-ui="bulk-count"] {
254
+ color: var(--kv-color-ink);
255
+ font-weight: var(--kv-weight-semibold);
256
+ font-variant-numeric: tabular-nums;
257
+ }
258
+
259
+ :where([data-kv-design-system])
260
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
261
+ [data-ui="bulk-summary"],
262
+ :where([data-kv-design-system])
263
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
264
+ [data-ui="pager-summary"] {
204
265
  display: inline-flex;
205
266
  flex-wrap: nowrap;
206
267
  align-items: center;
@@ -209,17 +270,23 @@
209
270
  white-space: nowrap;
210
271
  }
211
272
 
212
- :where([data-kv-design-system]) [data-ui="bulk-action-list"],
213
- :where([data-kv-design-system]) [data-ui="pager-actions"],
214
- :where([data-kv-design-system]) [data-ui="pager-pages"] {
273
+ :where([data-kv-design-system])
274
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
275
+ [data-ui="bulk-action-list"],
276
+ :where([data-kv-design-system])
277
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
278
+ [data-ui="pager-actions"],
279
+ :where([data-kv-design-system])
280
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
281
+ [data-ui="pager-pages"] {
215
282
  display: inline-flex;
216
283
  flex-wrap: wrap;
217
284
  align-items: center;
218
285
  gap: var(--kv-space-1);
219
286
  }
220
287
 
221
- :where([data-kv-design-system]) [data-ui="pager-link"],
222
- :where([data-kv-design-system]) [data-ui="pager-page"] {
288
+ :where([data-kv-design-system]) [data-ui="list-chrome"][data-pattern="list-chrome"] [data-ui="pager-link"],
289
+ :where([data-kv-design-system]) [data-ui="list-chrome"][data-pattern="list-chrome"] [data-ui="pager-page"] {
223
290
  display: inline-grid;
224
291
  place-items: center;
225
292
  min-width: 2rem;
@@ -233,13 +300,28 @@
233
300
  text-decoration: none;
234
301
  }
235
302
 
236
- :where([data-kv-design-system]) [data-ui="pager-page"][data-active="true"] {
303
+ :where([data-kv-design-system])
304
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
305
+ [data-ui="pager-page"][data-active="true"] {
237
306
  border-color: var(--kv-color-accent);
238
307
  background: var(--kv-color-accent-soft);
239
308
  color: var(--kv-color-accent);
240
309
  }
241
310
 
242
- :where([data-kv-design-system]) [data-ui="pager-link"][data-disabled="true"] {
311
+ :where([data-kv-design-system])
312
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
313
+ [data-ui="pager-link"][data-disabled="true"] {
243
314
  opacity: 0.45;
244
315
  }
316
+
317
+ @media (max-width: 47.9375rem) {
318
+ :where([data-kv-design-system])
319
+ [data-ui="list-chrome"][data-pattern="list-chrome"]
320
+ [data-ui="list-sort"] {
321
+ flex: 1 1 8rem;
322
+ grid-template-columns: minmax(0, 1fr) auto;
323
+ min-width: 0;
324
+ max-width: 100%;
325
+ }
326
+ }
245
327
  }
@@ -134,6 +134,8 @@
134
134
  :where([data-kv-design-system])
135
135
  [data-ui="list-page"][data-variant="operational"]
136
136
  [data-ui="list-page-header"] {
137
+ display: grid;
138
+ min-width: 0;
137
139
  padding: var(--kv-space-4) var(--kv-page-padding-x);
138
140
  border-bottom: 1px solid var(--kv-panel-divider);
139
141
  background: var(--kv-page-chrome-bg);
@@ -143,8 +145,10 @@
143
145
  [data-ui="list-page"][data-variant="operational"]
144
146
  [data-ui="list-page-title-row"] {
145
147
  display: grid;
148
+ min-width: 0;
146
149
  grid-template-columns: minmax(0, 1fr) auto;
147
- gap: var(--kv-space-5);
150
+ align-items: center;
151
+ gap: var(--kv-space-4);
148
152
  }
149
153
 
150
154
  :where([data-kv-design-system])
@@ -4,13 +4,20 @@ export declare const ModalSheet: (props: {
4
4
  id: string;
5
5
  title: string;
6
6
  body: JSXChild;
7
- closeHref: string;
7
+ /** Required for `overlay`: a route modal closes by navigating. Ignored in `client` mode. */
8
+ closeHref?: string;
8
9
  closeLabel: string;
9
10
  description?: string | null;
10
11
  actions?: JSXChild;
11
12
  presentation?: 'sheet' | 'dialog';
12
13
  size?: 'default' | 'large';
13
- mode?: 'overlay' | 'embedded';
14
+ /**
15
+ * `overlay` is URL-owned: its close controls are links the route runtime
16
+ * follows. `client` belongs to a modal island that opens and closes it in the
17
+ * browser: close controls are buttons, and it carries no route-modal marker, so
18
+ * no navigation layer ever treats closing it as a page change.
19
+ */
20
+ mode?: 'overlay' | 'embedded' | 'client';
14
21
  unsavedPrompt?: string | null;
15
22
  }) => TemplateResult;
16
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/modal-sheet/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEtE,eAAO,MAAM,KAAK,YAChB,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,eAAe,CACP,CAAA;AAEV,eAAO,MAAM,UAAU,UAAW;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,QAAQ,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,QAAQ,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC1B,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B,KAAG,cA6CH,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/modal-sheet/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEtE,eAAO,MAAM,KAAK,YAChB,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,eAAe,CACP,CAAA;AAEV,eAAO,MAAM,UAAU,UAAW;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,QAAQ,CAAA;IACd,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,QAAQ,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC1B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAA;IACxC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B,KAAG,cAmEH,CAAA"}
@@ -11,5 +11,9 @@ export const HOOKS = [
11
11
  'modal-body',
12
12
  'modal-actions',
13
13
  ];
14
- export const ModalSheet = (props) => (_jsxs("div", { "data-ui": "modal-layer", "data-mode": props.mode ?? 'overlay', "data-route-modal": props.mode === 'embedded' ? null : 'true', "data-presentation": props.presentation ?? 'sheet', "data-unsaved-prompt": props.unsavedPrompt ?? null, children: [_jsx("a", { "data-ui": "modal-backdrop", href: props.closeHref, "aria-label": props.closeLabel, children: _jsx("span", { children: props.closeLabel }) }), _jsxs("section", { id: props.id, "data-ui": "modal-sheet", "data-size": props.size ?? 'default', role: "dialog", "aria-modal": props.mode === 'embedded' ? 'false' : 'true', "aria-labelledby": `${props.id}-title`, "aria-describedby": props.description ? `${props.id}-description` : null, tabindex: props.mode === 'embedded' ? null : '-1', children: [_jsxs("header", { "data-ui": "modal-head", children: [_jsxs("div", { "data-ui": "modal-heading", children: [_jsx("h2", { "data-ui": "modal-title", id: `${props.id}-title`, children: props.title }), !!props.description && (_jsx("p", { "data-ui": "modal-description", id: `${props.id}-description`, children: props.description }))] }), _jsx("a", { "data-ui": "modal-close", href: props.closeHref, "aria-label": props.closeLabel, title: props.closeLabel, children: "\u00D7" })] }), _jsx("div", { "data-ui": "modal-body", children: props.body }), props.actions !== undefined && _jsx("footer", { "data-ui": "modal-actions", children: props.actions })] })] }));
14
+ export const ModalSheet = (props) => {
15
+ const client = props.mode === 'client';
16
+ const embedded = props.mode === 'embedded';
17
+ return (_jsxs("div", { "data-ui": "modal-layer", "data-mode": props.mode ?? 'overlay', "data-route-modal": embedded || client ? null : 'true', "data-client-modal": client ? 'true' : null, "data-presentation": props.presentation ?? 'sheet', "data-unsaved-prompt": props.unsavedPrompt ?? null, children: [client ? (_jsx("button", { "data-ui": "modal-backdrop", type: "button", "aria-label": props.closeLabel, tabindex: "-1", children: _jsx("span", { children: props.closeLabel }) })) : (_jsx("a", { "data-ui": "modal-backdrop", href: props.closeHref ?? '#', "aria-label": props.closeLabel, children: _jsx("span", { children: props.closeLabel }) })), _jsxs("section", { id: props.id, "data-ui": "modal-sheet", "data-size": props.size ?? 'default', role: "dialog", "aria-modal": embedded ? 'false' : 'true', "aria-labelledby": `${props.id}-title`, "aria-describedby": props.description ? `${props.id}-description` : null, tabindex: embedded ? null : '-1', children: [_jsxs("header", { "data-ui": "modal-head", children: [_jsxs("div", { "data-ui": "modal-heading", children: [_jsx("h2", { "data-ui": "modal-title", id: `${props.id}-title`, children: props.title }), !!props.description && (_jsx("p", { "data-ui": "modal-description", id: `${props.id}-description`, children: props.description }))] }), client ? (_jsx("button", { "data-ui": "modal-close", type: "button", "aria-label": props.closeLabel, title: props.closeLabel, children: "\u00D7" })) : (_jsx("a", { "data-ui": "modal-close", href: props.closeHref ?? '#', "aria-label": props.closeLabel, title: props.closeLabel, children: "\u00D7" }))] }), _jsx("div", { "data-ui": "modal-body", children: props.body }), props.actions !== undefined && _jsx("footer", { "data-ui": "modal-actions", children: props.actions })] })] }));
18
+ };
15
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/patterns/modal-sheet/index.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,aAAa;IACb,mBAAmB;IACnB,aAAa;IACb,YAAY;IACZ,eAAe;CACP,CAAA;AAEV,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAY1B,EAAkB,EAAE,CAAC,CACpB,0BACU,aAAa,eACV,KAAK,CAAC,IAAI,IAAI,SAAS,sBAChB,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,uBACxC,KAAK,CAAC,YAAY,IAAI,OAAO,yBAC3B,KAAK,CAAC,aAAa,IAAI,IAAI,aAEhD,uBAAW,gBAAgB,EAAC,IAAI,EAAE,KAAK,CAAC,SAAS,gBAAc,KAAK,CAAC,UAAU,YAC7E,yBAAO,KAAK,CAAC,UAAU,GAAQ,GAC7B,EACJ,mBACE,EAAE,EAAE,KAAK,CAAC,EAAE,aACJ,aAAa,eACV,KAAK,CAAC,IAAI,IAAI,SAAS,EAClC,IAAI,EAAC,QAAQ,gBACD,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,qBACvC,GAAG,KAAK,CAAC,EAAE,QAAQ,sBAClB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,EACtE,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAEjD,6BAAgB,YAAY,aAC1B,0BAAa,eAAe,aAC1B,wBAAY,aAAa,EAAC,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,QAAQ,YAC9C,KAAK,CAAC,KAAK,GACT,EACJ,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,CACtB,uBAAW,mBAAmB,EAAC,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,cAAc,YACzD,KAAK,CAAC,WAAW,GAChB,CACL,IACG,EACN,uBACU,aAAa,EACrB,IAAI,EAAE,KAAK,CAAC,SAAS,gBACT,KAAK,CAAC,UAAU,EAC5B,KAAK,EAAE,KAAK,CAAC,UAAU,uBAGrB,IACG,EACT,yBAAa,YAAY,YAAE,KAAK,CAAC,IAAI,GAAO,EAC3C,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,4BAAgB,eAAe,YAAE,KAAK,CAAC,OAAO,GAAU,IAChF,IACN,CACP,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/patterns/modal-sheet/index.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,aAAa;IACb,mBAAmB;IACnB,aAAa;IACb,YAAY;IACZ,eAAe;CACP,CAAA;AAEV,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAmB1B,EAAkB,EAAE;IACnB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAA;IACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAK,UAAU,CAAA;IAC1C,OAAO,CACL,0BACU,aAAa,eACV,KAAK,CAAC,IAAI,IAAI,SAAS,sBAChB,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,uBACjC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,uBACtB,KAAK,CAAC,YAAY,IAAI,OAAO,yBAC3B,KAAK,CAAC,aAAa,IAAI,IAAI,aAE/C,MAAM,CAAC,CAAC,CAAC,CACR,4BAAgB,gBAAgB,EAAC,IAAI,EAAC,QAAQ,gBAAa,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAC,IAAI,YACxF,yBAAO,KAAK,CAAC,UAAU,GAAQ,GACxB,CACV,CAAC,CAAC,CAAC,CACF,uBAAW,gBAAgB,EAAC,IAAI,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG,gBAAc,KAAK,CAAC,UAAU,YACpF,yBAAO,KAAK,CAAC,UAAU,GAAQ,GAC7B,CACL,EACD,mBACE,EAAE,EAAE,KAAK,CAAC,EAAE,aACJ,aAAa,eACV,KAAK,CAAC,IAAI,IAAI,SAAS,EAClC,IAAI,EAAC,QAAQ,gBACD,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,qBACtB,GAAG,KAAK,CAAC,EAAE,QAAQ,sBAClB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,EACtE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAEhC,6BAAgB,YAAY,aAC1B,0BAAa,eAAe,aAC1B,wBAAY,aAAa,EAAC,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,QAAQ,YAC9C,KAAK,CAAC,KAAK,GACT,EACJ,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,CACtB,uBAAW,mBAAmB,EAAC,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,cAAc,YACzD,KAAK,CAAC,WAAW,GAChB,CACL,IACG,EACL,MAAM,CAAC,CAAC,CAAC,CACR,4BACU,aAAa,EACrB,IAAI,EAAC,QAAQ,gBACD,KAAK,CAAC,UAAU,EAC5B,KAAK,EAAE,KAAK,CAAC,UAAU,uBAGhB,CACV,CAAC,CAAC,CAAC,CACF,uBACU,aAAa,EACrB,IAAI,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG,gBAChB,KAAK,CAAC,UAAU,EAC5B,KAAK,EAAE,KAAK,CAAC,UAAU,uBAGrB,CACL,IACM,EACT,yBAAa,YAAY,YAAE,KAAK,CAAC,IAAI,GAAO,EAC3C,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,4BAAgB,eAAe,YAAE,KAAK,CAAC,OAAO,GAAU,IAChF,IACN,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -87,7 +87,7 @@
87
87
  [data-ui="modal-layer"][data-presentation="dialog"]
88
88
  [data-ui="modal-sheet"][data-size="large"] {
89
89
  width: min(75rem, 100%);
90
- height: min(62.5rem, calc(100dvh - var(--kv-space-12)));
90
+ height: auto;
91
91
  }
92
92
 
93
93
  :where([data-kv-design-system]) [data-ui="modal-layer"][data-mode="embedded"] [data-ui="modal-sheet"] {
@@ -1,24 +1,3 @@
1
- import type { JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
2
- export type PageIdentityKind = 'list-page' | 'record-page' | 'form-page' | 'workspace-page' | 'dashboard-page' | 'board-page';
3
- export type PageIdentityProps = {
4
- context?: JSXChild;
5
- eyebrow?: string | null;
6
- title: string;
7
- description?: string | null;
8
- status?: JSXChild;
9
- actions?: JSXChild;
10
- meta?: JSXChild;
11
- };
12
- type PageIdentityContentProps = PageIdentityProps & {
13
- groupDescription?: boolean;
14
- };
15
- /**
16
- * The single identity band shared by every full-page pattern.
17
- *
18
- * The pattern name remains in each hook so consumers can style the content
19
- * contract without reimplementing breadcrumbs, title hierarchy or actions.
20
- */
21
- export declare const pageIdentityContent: (kind: PageIdentityKind, props: PageIdentityContentProps) => TemplateResult;
22
- export declare const pageIdentity: (kind: PageIdentityKind, props: PageIdentityProps) => TemplateResult;
23
- export {};
1
+ export { pageIdentity, pageIdentityContent } from '../../layouts/page-identity/index.tsx';
2
+ export type { PageIdentityKind, PageIdentityProps } from '../../layouts/page-identity/index.tsx';
24
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/page-shell/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEtE,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,aAAa,GACb,WAAW,GACX,gBAAgB,GAChB,gBAAgB,GAChB,YAAY,CAAA;AAEhB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,QAAQ,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAA;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,KAAK,wBAAwB,GAAG,iBAAiB,GAAG;IAClD,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,SACxB,gBAAgB,SACf,wBAAwB,KAC9B,cAoBF,CAAA;AAED,eAAO,MAAM,YAAY,SAAU,gBAAgB,SAAS,iBAAiB,KAAG,cAK/E,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/page-shell/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AACzF,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA"}
@@ -1,11 +1,2 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
- /**
3
- * The single identity band shared by every full-page pattern.
4
- *
5
- * The pattern name remains in each hook so consumers can style the content
6
- * contract without reimplementing breadcrumbs, title hierarchy or actions.
7
- */
8
- export const pageIdentityContent = (kind, props) => (_jsxs(_Fragment, { children: [_jsxs("div", { "data-ui": `${kind}-heading`, children: [!!props.eyebrow && _jsx("p", { "data-ui": `${kind}-eyebrow`, children: props.eyebrow }), _jsxs("div", { "data-ui": `${kind}-title-row`, children: [_jsx("h1", { "data-ui": `${kind}-title`, children: props.title }), props.actions !== undefined && _jsx("div", { "data-ui": `${kind}-actions`, children: props.actions })] }), (props.groupDescription || props.status !== undefined) &&
9
- (!!props.description || props.status !== undefined) ? (_jsxs("div", { "data-ui": `${kind}-subline`, children: [!!props.description && _jsx("p", { "data-ui": `${kind}-description`, children: props.description }), props.status !== undefined && _jsx("span", { "data-ui": `${kind}-status`, children: props.status })] })) : (!!props.description && _jsx("p", { "data-ui": `${kind}-description`, children: props.description }))] }), props.meta !== undefined && _jsx("div", { "data-ui": `${kind}-meta`, children: props.meta })] }));
10
- export const pageIdentity = (kind, props) => (_jsxs(_Fragment, { children: [props.context !== undefined && _jsx("div", { "data-ui": `${kind}-context`, children: props.context }), _jsx("header", { "data-ui": `${kind}-header`, children: pageIdentityContent(kind, props) })] }));
1
+ export { pageIdentity, pageIdentityContent } from '../../layouts/page-identity/index.js';
11
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/patterns/page-shell/index.tsx"],"names":[],"mappings":";AAwBA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,IAAsB,EACtB,KAA+B,EACf,EAAE,CAAC,CACnB,8BACE,0BAAc,GAAG,IAAI,UAAU,aAC5B,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,uBAAY,GAAG,IAAI,UAAU,YAAG,KAAK,CAAC,OAAO,GAAK,EACtE,0BAAc,GAAG,IAAI,YAAY,aAC/B,wBAAa,GAAG,IAAI,QAAQ,YAAG,KAAK,CAAC,KAAK,GAAM,EAC/C,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,yBAAc,GAAG,IAAI,UAAU,YAAG,KAAK,CAAC,OAAO,GAAO,IAClF,EACL,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;oBACvD,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CACpD,0BAAc,GAAG,IAAI,UAAU,aAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,uBAAY,GAAG,IAAI,cAAc,YAAG,KAAK,CAAC,WAAW,GAAK,EACjF,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,0BAAe,GAAG,IAAI,SAAS,YAAG,KAAK,CAAC,MAAM,GAAQ,IACjF,CACP,CAAC,CAAC,CAAC,CACF,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,uBAAY,GAAG,IAAI,cAAc,YAAG,KAAK,CAAC,WAAW,GAAK,CAClF,IACG,EACL,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,yBAAc,GAAG,IAAI,OAAO,YAAG,KAAK,CAAC,IAAI,GAAO,IAC5E,CACJ,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAsB,EAAE,KAAwB,EAAkB,EAAE,CAAC,CAChG,8BACG,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,yBAAc,GAAG,IAAI,UAAU,YAAG,KAAK,CAAC,OAAO,GAAO,EACtF,4BAAiB,GAAG,IAAI,SAAS,YAAG,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAU,IAC7E,CACJ,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/patterns/page-shell/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sCAAuC,CAAA"}
@@ -0,0 +1,131 @@
1
+ @layer ket.app {
2
+ /* Every full-page recipe delegates its location and identity band to
3
+ `pageIdentity`. Keep the visual contract here, rather than allowing list,
4
+ record and workspace recipes to drift when their bodies evolve. */
5
+ :where([data-kv-design-system]) [data-kv-page-identity="header"] {
6
+ display: grid;
7
+ min-width: 0;
8
+ gap: 0;
9
+ padding: var(--kv-space-4) var(--kv-page-padding-x);
10
+ border-bottom: 1px solid var(--kv-panel-divider);
11
+ background: var(--kv-page-chrome-bg);
12
+ }
13
+
14
+ :where([data-kv-design-system]) [data-kv-page-identity="context"] {
15
+ display: flex;
16
+ min-width: 0;
17
+ min-height: var(--kv-table-header-height);
18
+ align-items: center;
19
+ padding-inline: var(--kv-page-padding-x);
20
+ border-bottom: 1px solid var(--kv-panel-divider);
21
+ background: var(--kv-page-chrome-bg);
22
+ }
23
+
24
+ :where([data-kv-design-system]) [data-kv-page-identity="heading"] {
25
+ display: grid;
26
+ min-width: 0;
27
+ gap: var(--kv-space-1);
28
+ }
29
+
30
+ :where([data-kv-design-system]) [data-kv-page-identity="title-row"] {
31
+ display: grid;
32
+ min-width: 0;
33
+ min-block-size: var(--kv-control-height);
34
+ grid-template-columns: minmax(0, 1fr) auto;
35
+ align-items: center;
36
+ gap: var(--kv-space-4);
37
+ }
38
+
39
+ :where([data-kv-design-system]) [data-kv-page-identity="title"] {
40
+ margin: 0;
41
+ overflow-wrap: anywhere;
42
+ color: var(--kv-text-main);
43
+ font-size: var(--kv-page-title-size);
44
+ font-weight: var(--kv-weight-semibold);
45
+ letter-spacing: 0;
46
+ line-height: var(--kv-leading-tight);
47
+ }
48
+
49
+ :where([data-kv-design-system]) [data-kv-page-identity="description"] {
50
+ max-width: 48rem;
51
+ margin: 0;
52
+ color: var(--kv-text-muted);
53
+ font-size: var(--kv-text-sm);
54
+ line-height: var(--kv-leading-normal);
55
+ }
56
+
57
+ :where([data-kv-design-system]) [data-kv-page-identity="eyebrow"] {
58
+ margin: 0;
59
+ color: var(--kv-accent);
60
+ font-size: var(--kv-text-2xs);
61
+ font-weight: var(--kv-weight-bold);
62
+ line-height: var(--kv-leading-tight);
63
+ text-transform: uppercase;
64
+ }
65
+
66
+ :where([data-kv-design-system]) [data-kv-page-identity="subline"] {
67
+ display: flex;
68
+ min-width: 0;
69
+ flex-wrap: wrap;
70
+ align-items: center;
71
+ gap: var(--kv-space-2);
72
+ }
73
+
74
+ :where([data-kv-design-system]) :is([data-kv-page-identity="status"], [data-kv-page-identity="meta"]) {
75
+ display: flex;
76
+ min-width: 0;
77
+ flex-wrap: wrap;
78
+ align-items: center;
79
+ gap: var(--kv-space-2);
80
+ }
81
+
82
+ :where([data-kv-design-system]) [data-kv-page-identity="actions"] {
83
+ display: flex;
84
+ min-width: 0;
85
+ flex-wrap: wrap;
86
+ align-items: center;
87
+ justify-content: flex-end;
88
+ gap: var(--kv-space-2);
89
+ }
90
+
91
+ /* An inline submit form is useful application semantics, but its normal form
92
+ chrome (a separator and 1rem top padding) is not page-header chrome. Make
93
+ it transparent only inside the shared action slot. */
94
+ :where([data-kv-design-system])
95
+ [data-kv-page-identity="actions"]
96
+ [data-ui="record-form"][data-layout="inline"][data-has-fields="false"] {
97
+ display: contents;
98
+ }
99
+
100
+ :where([data-kv-design-system])
101
+ [data-kv-page-identity="actions"]
102
+ [data-ui="record-form"][data-layout="inline"][data-has-fields="false"]
103
+ [data-ui="form-actions"] {
104
+ padding-top: 0;
105
+ border-top: 0;
106
+ }
107
+
108
+ @media (max-width: 42rem) {
109
+ :where([data-kv-design-system]) [data-kv-page-identity="context"] {
110
+ padding-inline: var(--kv-space-4);
111
+ }
112
+
113
+ :where([data-kv-design-system]) [data-kv-page-identity="header"] {
114
+ padding: var(--kv-space-4) var(--kv-space-4) var(--kv-space-3);
115
+ }
116
+
117
+ :where([data-kv-design-system]) [data-kv-page-identity="title-row"] {
118
+ grid-template-columns: minmax(0, 1fr);
119
+ align-items: stretch;
120
+ gap: var(--kv-space-3);
121
+ }
122
+
123
+ :where([data-kv-design-system]) [data-kv-page-identity="title"] {
124
+ font-size: var(--kv-text-lg);
125
+ }
126
+
127
+ :where([data-kv-design-system]) [data-kv-page-identity="actions"] {
128
+ justify-content: flex-start;
129
+ }
130
+ }
131
+ }
@@ -10,3 +10,4 @@
10
10
  @import "./form-page/styles.css";
11
11
  @import "./record-page/styles.css";
12
12
  @import "./workspace-page/styles.css";
13
+ @import "./page-shell/styles.css";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/primitives/feedback/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEtE,eAAO,MAAM,KAAK,YAChB,QAAQ,EACR,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,SAAS,EACT,eAAe,CACP,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEnE,eAAO,MAAM,MAAM,UAAW;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAA;CACnB,KAAG,cAaH,CAAA;AAED,eAAO,MAAM,UAAU,UAAW;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,QAAQ,CAAA;CAAE,KAAG,cAS1F,CAAA;AAED,eAAO,MAAM,YAAY,UAAW;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,cAavE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/primitives/feedback/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEtE,eAAO,MAAM,KAAK,YAChB,QAAQ,EACR,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,SAAS,EACT,eAAe,CACP,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAA;AAiCnE,eAAO,MAAM,MAAM,UAAW;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAA;CACnB,KAAG,cA2BH,CAAA;AAED,eAAO,MAAM,UAAU,UAAW;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,QAAQ,CAAA;CAAE,KAAG,cAS1F,CAAA;AAED,eAAO,MAAM,YAAY,UAAW;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,cAavE,CAAA"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
2
  import { each } from '@ketvietlab/ketjs-view';
3
3
  export const HOOKS = [
4
4
  'notice',
@@ -15,7 +15,14 @@ export const HOOKS = [
15
15
  'loading',
16
16
  'loading-label',
17
17
  ];
18
- export const Notice = (props) => (_jsxs("aside", { "data-ui": "notice", "data-tone": props.tone ?? 'info', role: props.tone === 'danger' ? 'alert' : 'status', children: [_jsx("span", { "data-ui": "notice-mark", "aria-hidden": "true" }), _jsxs("div", { "data-ui": "notice-copy", children: [_jsx("p", { "data-ui": "notice-title", children: props.title }), _jsx("p", { "data-ui": "notice-message", children: props.message })] }), props.actions !== undefined && _jsx("div", { "data-ui": "notice-actions", children: props.actions })] }));
18
+ // Lucide (ISC) glyphs, vendored per tone: info, circle-check, triangle-alert, circle-alert.
19
+ const NOTICE_ICONS = {
20
+ info: () => (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M12 16v-4" }), _jsx("path", { d: "M12 8h.01" })] })),
21
+ positive: () => (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "m9 12 2 2 4-4" })] })),
22
+ warning: () => (_jsxs(_Fragment, { children: [_jsx("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }), _jsx("path", { d: "M12 9v4" }), _jsx("path", { d: "M12 17h.01" })] })),
23
+ danger: () => (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M12 8v4" }), _jsx("path", { d: "M12 16h.01" })] })),
24
+ };
25
+ export const Notice = (props) => (_jsxs("aside", { "data-ui": "notice", "data-pattern": "notice", "data-tone": props.tone ?? 'info', role: props.tone === 'danger' ? 'alert' : 'status', children: [_jsx("span", { "data-ui": "notice-mark", "aria-hidden": "true", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true", focusable: "false", children: NOTICE_ICONS[props.tone ?? 'info']() }) }), _jsxs("div", { "data-ui": "notice-copy", children: [_jsx("p", { "data-ui": "notice-title", children: props.title }), _jsx("p", { "data-ui": "notice-message", children: props.message })] }), props.actions !== undefined && _jsx("div", { "data-ui": "notice-actions", children: props.actions })] }));
19
26
  export const EmptyState = (props) => (_jsxs("div", { "data-ui": "empty", role: "status", children: [_jsx("span", { "data-ui": "empty-mark", "aria-hidden": "true", children: "\u25C7" }), _jsx("p", { "data-ui": "empty-title", children: props.title }), _jsx("p", { "data-ui": "empty-message", children: props.message }), props.actions !== undefined && _jsx("div", { "data-ui": "empty-actions", children: props.actions })] }));
20
27
  export const LoadingState = (props) => (_jsxs("div", { "data-ui": "loading", role: "status", "aria-live": "polite", children: [_jsx("span", { "data-ui": "loading-label", children: props.label }), _jsx("div", { "data-ui": "skeleton", "aria-hidden": "true", children: each(Array.from({ length: Math.max(1, props.lines ?? 3) }), (_, index) => index, (_, index) => (_jsx("span", { "data-ui": "skeleton-line", "data-line": String(index + 1) }))) })] }));
21
28
  //# sourceMappingURL=index.js.map