gbs-add-block 2.0.4 → 2.3.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 (129) hide show
  1. package/.gbs/skills/gbs-components/SKILL.md +190 -134
  2. package/.gbs/skills/gbs-components/references/install.md +25 -3
  3. package/.gbs/skills/gbs-components/references/styling.md +246 -201
  4. package/CHANGELOG.md +74 -0
  5. package/README.md +157 -11
  6. package/index.cjs +212 -3
  7. package/package.json +41 -10
  8. package/schema/passport-v1.schema.json +204 -0
  9. package/source/beta-components/accordion/passport.json +259 -0
  10. package/source/beta-components/accordion/styles.css +207 -208
  11. package/source/beta-components/alert/passport.json +250 -0
  12. package/source/beta-components/alert/styles.css +154 -155
  13. package/source/beta-components/avatar/passport.json +294 -0
  14. package/source/beta-components/avatar/styles.css +201 -203
  15. package/source/beta-components/badge/passport.json +332 -0
  16. package/source/beta-components/badge/styles.css +203 -204
  17. package/source/beta-components/breadcrumb/passport.json +243 -0
  18. package/source/beta-components/breadcrumb/styles.css +138 -139
  19. package/source/beta-components/button/passport.json +402 -0
  20. package/source/beta-components/button/passport.manual.json +31 -0
  21. package/source/beta-components/button/styles.css +232 -233
  22. package/source/beta-components/card/passport.json +337 -0
  23. package/source/beta-components/card/styles.css +230 -231
  24. package/source/beta-components/checkbox/passport.json +456 -0
  25. package/source/beta-components/checkbox/styles.css +211 -212
  26. package/source/beta-components/combobox/passport.json +456 -0
  27. package/source/beta-components/combobox/styles.css +419 -417
  28. package/source/beta-components/data-grid/agent/coerce.ts +368 -0
  29. package/source/beta-components/data-grid/agent/contract.ts +410 -0
  30. package/source/beta-components/data-grid/agent/dataset.ts +92 -0
  31. package/source/beta-components/data-grid/agent/engine.ts +470 -0
  32. package/source/beta-components/data-grid/agent/executors.ts +155 -0
  33. package/source/beta-components/data-grid/agent/index.ts +79 -0
  34. package/source/beta-components/data-grid/agent/intent.ts +324 -0
  35. package/source/beta-components/data-grid/agent/operations.ts +335 -0
  36. package/source/beta-components/data-grid/agent/validate.ts +630 -0
  37. package/source/beta-components/data-grid/agent/webmcp.ts +107 -0
  38. package/source/beta-components/data-grid/index.ts +14 -7
  39. package/source/beta-components/data-grid/passport.json +1051 -0
  40. package/source/beta-components/data-grid/passport.manual.json +255 -0
  41. package/source/beta-components/data-grid/react/AskGrid.tsx +164 -0
  42. package/source/beta-components/data-grid/react/DataGrid.tsx +39 -0
  43. package/source/beta-components/data-grid/styles.css +874 -717
  44. package/source/beta-components/date-picker/passport.json +407 -0
  45. package/source/beta-components/date-picker/styles.css +445 -446
  46. package/source/beta-components/dialog/passport.json +344 -0
  47. package/source/beta-components/dialog/styles.css +280 -278
  48. package/source/beta-components/file-uploader/passport.json +518 -0
  49. package/source/beta-components/file-uploader/styles.css +394 -395
  50. package/source/beta-components/input/passport.json +536 -0
  51. package/source/beta-components/input/styles.css +295 -296
  52. package/source/beta-components/menu/passport.json +322 -0
  53. package/source/beta-components/menu/styles.css +224 -222
  54. package/source/beta-components/modal/passport.json +289 -0
  55. package/source/beta-components/modal/styles.css +241 -239
  56. package/source/beta-components/number-input/passport.json +541 -0
  57. package/source/beta-components/number-input/styles.css +230 -231
  58. package/source/beta-components/popover/passport.json +238 -0
  59. package/source/beta-components/popover/styles.css +148 -146
  60. package/source/beta-components/progress/passport.json +270 -0
  61. package/source/beta-components/progress/styles.css +200 -202
  62. package/source/beta-components/radio-group/passport.json +477 -0
  63. package/source/beta-components/radio-group/styles.css +241 -242
  64. package/source/beta-components/shared/core/agent/adapter.ts +65 -0
  65. package/source/beta-components/shared/core/agent/history.ts +120 -0
  66. package/source/beta-components/shared/core/agent/index.ts +46 -0
  67. package/source/beta-components/shared/core/agent/numbers.ts +217 -0
  68. package/source/beta-components/shared/core/agent/schema.ts +180 -0
  69. package/source/beta-components/shared/core/agent/types.ts +169 -0
  70. package/source/beta-components/shared/core/agent/webmcp.ts +328 -0
  71. package/source/beta-components/shared/index.ts +9 -0
  72. package/source/beta-components/shared/react/GramproAIProvider.tsx +50 -0
  73. package/source/beta-components/shared/react/useAskAgent.ts +217 -0
  74. package/source/beta-components/shared/styles.css +79 -0
  75. package/source/beta-components/shared/version.json +4 -4
  76. package/source/beta-components/shared/version.ts +6 -6
  77. package/source/beta-components/skeleton/passport.json +251 -0
  78. package/source/beta-components/skeleton/styles.css +185 -186
  79. package/source/beta-components/spinner/passport.json +245 -0
  80. package/source/beta-components/spinner/styles.css +145 -146
  81. package/source/beta-components/switch/passport.json +421 -0
  82. package/source/beta-components/switch/styles.css +194 -196
  83. package/source/beta-components/tabs/passport.json +315 -0
  84. package/source/beta-components/tabs/styles.css +234 -235
  85. package/source/beta-components/textarea/passport.json +382 -0
  86. package/source/beta-components/textarea/styles.css +158 -159
  87. package/source/beta-components/toaster/passport.json +221 -0
  88. package/source/beta-components/toaster/styles.css +282 -283
  89. package/source/beta-components/tooltip/passport.json +170 -0
  90. package/source/beta-components/tooltip/styles.css +71 -72
  91. package/tools/env.cjs +61 -0
  92. package/tools/passport/cli.cjs +79 -0
  93. package/tools/passport/extract.cjs +493 -0
  94. package/tools/passport/index.cjs +185 -0
  95. package/tools/passport/merge.cjs +131 -0
  96. package/tools/passport/policy.cjs +65 -0
  97. package/tools/passport/validate.cjs +277 -0
  98. package/tools/ts-require.cjs +79 -0
  99. package/source/beta-components/accordion/__tests__/core.test.ts +0 -58
  100. package/source/beta-components/alert/__tests__/core.test.ts +0 -17
  101. package/source/beta-components/avatar/__tests__/core.test.ts +0 -88
  102. package/source/beta-components/badge/__tests__/core.test.ts +0 -46
  103. package/source/beta-components/breadcrumb/__tests__/core.test.ts +0 -58
  104. package/source/beta-components/button/__tests__/core.test.ts +0 -31
  105. package/source/beta-components/card/__tests__/core.test.ts +0 -57
  106. package/source/beta-components/checkbox/__tests__/core.test.ts +0 -40
  107. package/source/beta-components/combobox/__tests__/core.test.ts +0 -134
  108. package/source/beta-components/data-grid/__tests__/core.test.ts +0 -356
  109. package/source/beta-components/data-grid/__tests__/export.test.ts +0 -70
  110. package/source/beta-components/data-grid/__tests__/pdf.test.ts +0 -209
  111. package/source/beta-components/date-picker/__tests__/core.test.ts +0 -273
  112. package/source/beta-components/dialog/__tests__/core.test.ts +0 -86
  113. package/source/beta-components/file-uploader/__tests__/core.test.ts +0 -395
  114. package/source/beta-components/input/__tests__/core.test.ts +0 -75
  115. package/source/beta-components/menu/__tests__/core.test.ts +0 -120
  116. package/source/beta-components/modal/__tests__/core.test.ts +0 -55
  117. package/source/beta-components/number-input/__tests__/core.test.ts +0 -151
  118. package/source/beta-components/progress/__tests__/core.test.ts +0 -56
  119. package/source/beta-components/radio-group/__tests__/core.test.ts +0 -64
  120. package/source/beta-components/shared/__tests__/boundaries.test.ts +0 -95
  121. package/source/beta-components/shared/__tests__/core.test.ts +0 -55
  122. package/source/beta-components/shared/__tests__/position.test.ts +0 -143
  123. package/source/beta-components/skeleton/__tests__/core.test.ts +0 -41
  124. package/source/beta-components/spinner/__tests__/core.test.ts +0 -48
  125. package/source/beta-components/switch/__tests__/core.test.ts +0 -64
  126. package/source/beta-components/tabs/__tests__/core.test.ts +0 -51
  127. package/source/beta-components/textarea/__tests__/core.test.ts +0 -38
  128. package/source/beta-components/toaster/__tests__/core.test.ts +0 -256
  129. package/source/beta-components/tooltip/__tests__/core.test.ts +0 -42
@@ -1,278 +1,280 @@
1
- /*
2
- * Dialog styles (alert, confirm and prompt).
3
- *
4
- * Tokens read the shared --gbs-* variables when they are set on an ancestor
5
- * (set them on :root to theme every component at once) and fall back to the
6
- * same default palette otherwise. Rules live in the `components` layer, so utility classes passed
7
- * through `className` / `classNames` override them.
8
- */
9
- @layer theme, base, components, utilities;
10
-
11
- @layer components {
12
- .dl-root {
13
- --dl-bg: var(--gbs-bg, var(--dg-bg, light-dark(#ffffff, #0b0b0e)));
14
- --dl-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
15
- --dl-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
16
- --dl-border: var(--gbs-border, var(--dg-border, light-dark(#e4e4e7, #27272a)));
17
- --dl-hover: var(--gbs-hover, var(--dg-hover, light-dark(#f4f4f5, #1f1f23)));
18
- --dl-input-bg: var(--gbs-input-bg, var(--dg-input-bg, light-dark(#ffffff, #121216)));
19
- --dl-accent: var(--gbs-accent, var(--dg-accent, light-dark(#2563eb, #60a5fa)));
20
- --dl-accent-fg: var(--gbs-accent-fg, var(--dg-accent-fg, light-dark(#ffffff, #0b1220)));
21
- --dl-focus: var(--gbs-focus, var(--dg-focus, light-dark(#2563eb, #60a5fa)));
22
- --dl-danger: var(--gbs-danger, var(--dg-danger, light-dark(#dc2626, #f87171)));
23
- --dl-danger-fg: var(--gbs-danger-fg, light-dark(#ffffff, #1c0606));
24
- --dl-success: var(--gbs-success, light-dark(#15803d, #4ade80));
25
- --dl-warning: var(--gbs-warning, light-dark(#d97706, #fbbf24));
26
- --dl-info: var(--gbs-info, var(--gbs-accent, var(--dg-accent, light-dark(#2563eb, #60a5fa))));
27
- --dl-shadow: 0 24px 64px -16px light-dark(rgb(0 0 0 / 0.3), rgb(0 0 0 / 0.8));
28
- --dl-backdrop: var(--gbs-backdrop, light-dark(rgb(9 9 11 / 0.45), rgb(0 0 0 / 0.65)));
29
- --dl-radius: var(--gbs-radius, var(--dg-radius, 12px));
30
- --dl-font-size: var(--gbs-font-size, var(--dg-font-size, 13px));
31
- --dl-width: 420px;
32
- --dl-intent: transparent;
33
- --dl-duration: 200ms;
34
-
35
- color-scheme: inherit;
36
- box-sizing: border-box;
37
- width: min(var(--dl-width), 100vw - 32px);
38
- max-width: none;
39
- max-height: calc(100dvh - 32px);
40
- margin: auto;
41
- padding: 0;
42
- overflow: auto;
43
- border: 1px solid var(--dl-border);
44
- border-radius: var(--dl-radius);
45
- background: var(--dl-bg);
46
- color: var(--dl-fg);
47
- box-shadow: var(--dl-shadow);
48
- font-size: var(--dl-font-size);
49
- line-height: 1.5;
50
- opacity: 0;
51
- scale: 0.96;
52
- transition:
53
- opacity var(--dl-duration) ease,
54
- scale var(--dl-duration) ease,
55
- overlay var(--dl-duration) allow-discrete,
56
- display var(--dl-duration) allow-discrete;
57
- }
58
- .dl-root[open] {
59
- opacity: 1;
60
- scale: 1;
61
- }
62
- @starting-style {
63
- .dl-root[open] {
64
- opacity: 0;
65
- scale: 0.96;
66
- }
67
- }
68
-
69
- .dl-root::backdrop {
70
- background: var(--dl-backdrop, rgb(9 9 11 / 0.45));
71
- opacity: 0;
72
- transition:
73
- opacity var(--dl-duration) ease,
74
- overlay var(--dl-duration) allow-discrete,
75
- display var(--dl-duration) allow-discrete;
76
- }
77
- .dl-root[open]::backdrop {
78
- opacity: 1;
79
- }
80
- @starting-style {
81
- .dl-root[open]::backdrop {
82
- opacity: 0;
83
- }
84
- }
85
-
86
- :where(.dark, [data-theme="dark"]) .dl-root {
87
- color-scheme: dark;
88
- }
89
- :where(.light, [data-theme="light"]) .dl-root {
90
- color-scheme: light;
91
- }
92
-
93
- :where(.dl-root) *,
94
- :where(.dl-root) *::before,
95
- :where(.dl-root) *::after {
96
- box-sizing: border-box;
97
- }
98
-
99
- :root:has(.dl-root[open]) {
100
- overflow: hidden;
101
- }
102
-
103
- .dl-root[data-size="md"] {
104
- --dl-width: 540px;
105
- }
106
- .dl-root[data-intent="info"] {
107
- --dl-intent: var(--dl-info);
108
- }
109
- .dl-root[data-intent="success"] {
110
- --dl-intent: var(--dl-success);
111
- }
112
- .dl-root[data-intent="warning"] {
113
- --dl-intent: var(--dl-warning);
114
- }
115
- .dl-root[data-intent="danger"] {
116
- --dl-intent: var(--dl-danger);
117
- }
118
-
119
- /* ------------------------------------------------------------ content */
120
-
121
- .dl-body {
122
- display: flex;
123
- align-items: flex-start;
124
- gap: 14px;
125
- padding: 20px 20px 16px;
126
- }
127
- .dl-icon {
128
- display: grid;
129
- flex: none;
130
- place-items: center;
131
- width: 38px;
132
- height: 38px;
133
- border-radius: 50%;
134
- background: color-mix(in oklab, var(--dl-intent), transparent 86%);
135
- color: var(--dl-intent);
136
- }
137
- .dl-text {
138
- display: flex;
139
- flex: 1 1 auto;
140
- flex-direction: column;
141
- gap: 6px;
142
- min-width: 0;
143
- }
144
- .dl-title {
145
- margin: 0;
146
- font-size: 1.15em;
147
- font-weight: 600;
148
- line-height: 1.35;
149
- overflow-wrap: anywhere;
150
- }
151
- .dl-description {
152
- color: var(--dl-muted);
153
- overflow-wrap: anywhere;
154
- }
155
-
156
- .dl-field {
157
- display: flex;
158
- flex-direction: column;
159
- gap: 4px;
160
- margin-top: 6px;
161
- }
162
- .dl-label {
163
- font-weight: 500;
164
- }
165
- .dl-input {
166
- width: 100%;
167
- height: 36px;
168
- padding: 0 10px;
169
- border: 1px solid var(--dl-border);
170
- border-radius: 8px;
171
- background: var(--dl-input-bg);
172
- color: inherit;
173
- font: inherit;
174
- }
175
- .dl-input:focus-visible {
176
- outline: 2px solid var(--dl-focus);
177
- outline-offset: -1px;
178
- }
179
- .dl-input[aria-invalid="true"] {
180
- border-color: var(--dl-danger);
181
- outline-color: var(--dl-danger);
182
- }
183
- .dl-error {
184
- margin: 0;
185
- color: var(--dl-danger);
186
- font-size: 0.92em;
187
- }
188
-
189
- /* ------------------------------------------------------------ actions */
190
-
191
- .dl-actions {
192
- display: flex;
193
- flex-wrap: wrap;
194
- justify-content: flex-end;
195
- gap: 8px;
196
- padding: 12px 20px;
197
- border-top: 1px solid var(--dl-border);
198
- background: var(--gbs-header-bg, var(--dg-header-bg, light-dark(#fafafa, #111114)));
199
- }
200
- .dl-button {
201
- display: inline-flex;
202
- align-items: center;
203
- justify-content: center;
204
- gap: 6px;
205
- min-width: 80px;
206
- height: 34px;
207
- padding: 0 14px;
208
- border: 1px solid var(--dl-border);
209
- border-radius: 8px;
210
- background: var(--dl-bg);
211
- color: inherit;
212
- font: inherit;
213
- font-weight: 500;
214
- white-space: nowrap;
215
- cursor: pointer;
216
- }
217
- .dl-button:hover:not([aria-disabled="true"]) {
218
- background: var(--dl-hover);
219
- }
220
- .dl-button[data-variant="primary"] {
221
- border-color: var(--dl-accent);
222
- background: var(--dl-accent);
223
- color: var(--dl-accent-fg);
224
- }
225
- .dl-button[data-variant="danger"] {
226
- border-color: var(--dl-danger);
227
- background: var(--dl-danger);
228
- color: var(--dl-danger-fg);
229
- }
230
- .dl-button[data-variant="primary"]:hover:not([aria-disabled="true"]) {
231
- background: color-mix(in oklab, var(--dl-accent), var(--dl-fg) 12%);
232
- }
233
- .dl-button[data-variant="danger"]:hover:not([aria-disabled="true"]) {
234
- background: color-mix(in oklab, var(--dl-danger), var(--dl-fg) 12%);
235
- }
236
- .dl-button:focus-visible {
237
- outline: 2px solid var(--dl-focus);
238
- outline-offset: 2px;
239
- }
240
- .dl-button[aria-disabled="true"] {
241
- opacity: 0.65;
242
- cursor: progress;
243
- }
244
-
245
- .dl-spinner {
246
- animation: dl-spin 0.7s linear infinite;
247
- }
248
- @keyframes dl-spin {
249
- to {
250
- transform: rotate(360deg);
251
- }
252
- }
253
-
254
- @media (max-width: 480px) {
255
- .dl-actions {
256
- flex-direction: column-reverse;
257
- }
258
- .dl-button {
259
- width: 100%;
260
- }
261
- }
262
-
263
- @media (prefers-reduced-motion: reduce) {
264
- .dl-root,
265
- .dl-root::backdrop {
266
- transition-duration: 0s;
267
- }
268
- .dl-spinner {
269
- animation-duration: 2s;
270
- }
271
- }
272
-
273
- @media (forced-colors: active) {
274
- .dl-root {
275
- border: 1px solid CanvasText;
276
- }
277
- }
278
- }
1
+ /*
2
+ * Dialog styles (alert, confirm and prompt).
3
+ *
4
+ * Tokens read the shared --gbs-* variables when they are set on an ancestor
5
+ * (set them on :root to theme every component at once) and fall back to the
6
+ * same default palette otherwise. Rules are unlayered: they beat a framework
7
+ * reset on specificity, and lose to anything you pass through `className`.
8
+ * With Tailwind v4, import this file after the framework and inside its
9
+ * components layer - see the README.
10
+ */
11
+
12
+ .dl-root {
13
+ --dl-bg: var(--gbs-bg, var(--dg-bg, light-dark(#ffffff, #0b0b0e)));
14
+ --dl-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
15
+ --dl-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
16
+ --dl-border: var(--gbs-border, var(--dg-border, light-dark(#e4e4e7, #27272a)));
17
+ --dl-hover: var(--gbs-hover, var(--dg-hover, light-dark(#f4f4f5, #1f1f23)));
18
+ --dl-input-bg: var(--gbs-input-bg, var(--dg-input-bg, light-dark(#ffffff, #121216)));
19
+ --dl-accent: var(--gbs-accent, var(--dg-accent, light-dark(#2563eb, #60a5fa)));
20
+ --dl-accent-fg: var(--gbs-accent-fg, var(--dg-accent-fg, light-dark(#ffffff, #0b1220)));
21
+ --dl-focus: var(--gbs-focus, var(--dg-focus, light-dark(#2563eb, #60a5fa)));
22
+ --dl-danger: var(--gbs-danger, var(--dg-danger, light-dark(#dc2626, #f87171)));
23
+ --dl-danger-fg: var(--gbs-danger-fg, light-dark(#ffffff, #1c0606));
24
+ --dl-success: var(--gbs-success, light-dark(#15803d, #4ade80));
25
+ --dl-warning: var(--gbs-warning, light-dark(#d97706, #fbbf24));
26
+ --dl-info: var(--gbs-info, var(--gbs-accent, var(--dg-accent, light-dark(#2563eb, #60a5fa))));
27
+ --dl-shadow: 0 24px 64px -16px light-dark(rgb(0 0 0 / 0.3), rgb(0 0 0 / 0.8));
28
+ --dl-backdrop: var(--gbs-backdrop, light-dark(rgb(9 9 11 / 0.45), rgb(0 0 0 / 0.65)));
29
+ --dl-radius: var(--gbs-radius, var(--dg-radius, 12px));
30
+ --dl-font-size: var(--gbs-font-size, var(--dg-font-size, 13px));
31
+ --dl-width: 420px;
32
+ --dl-intent: transparent;
33
+ --dl-duration: 200ms;
34
+
35
+ color-scheme: inherit;
36
+ box-sizing: border-box;
37
+ width: min(var(--dl-width), 100vw - 32px);
38
+ max-width: none;
39
+ max-height: calc(100dvh - 32px);
40
+ margin: auto;
41
+ padding: 0;
42
+ overflow: auto;
43
+ border: 1px solid var(--dl-border);
44
+ border-radius: var(--dl-radius);
45
+ background: var(--dl-bg);
46
+ color: var(--dl-fg);
47
+ box-shadow: var(--dl-shadow);
48
+ font-size: var(--dl-font-size);
49
+ line-height: 1.5;
50
+ opacity: 0;
51
+ scale: 0.96;
52
+ transition:
53
+ opacity var(--dl-duration) ease,
54
+ scale var(--dl-duration) ease,
55
+ overlay var(--dl-duration) allow-discrete,
56
+ display var(--dl-duration) allow-discrete;
57
+ scrollbar-width: var(--gbs-scrollbar-width, thin);
58
+ scrollbar-color: var(--gbs-scrollbar-thumb, light-dark(#c4c4ca, #3f3f46))
59
+ var(--gbs-scrollbar-track, transparent);
60
+ }
61
+ .dl-root[open] {
62
+ opacity: 1;
63
+ scale: 1;
64
+ }
65
+ @starting-style {
66
+ .dl-root[open] {
67
+ opacity: 0;
68
+ scale: 0.96;
69
+ }
70
+ }
71
+
72
+ .dl-root::backdrop {
73
+ background: var(--dl-backdrop, rgb(9 9 11 / 0.45));
74
+ opacity: 0;
75
+ transition:
76
+ opacity var(--dl-duration) ease,
77
+ overlay var(--dl-duration) allow-discrete,
78
+ display var(--dl-duration) allow-discrete;
79
+ }
80
+ .dl-root[open]::backdrop {
81
+ opacity: 1;
82
+ }
83
+ @starting-style {
84
+ .dl-root[open]::backdrop {
85
+ opacity: 0;
86
+ }
87
+ }
88
+
89
+ :where(.dark, [data-theme="dark"]) .dl-root {
90
+ color-scheme: dark;
91
+ }
92
+ :where(.light, [data-theme="light"]) .dl-root {
93
+ color-scheme: light;
94
+ }
95
+
96
+ :where(.dl-root) *,
97
+ :where(.dl-root) *::before,
98
+ :where(.dl-root) *::after {
99
+ box-sizing: border-box;
100
+ }
101
+
102
+ :root:has(.dl-root[open]) {
103
+ overflow: hidden;
104
+ }
105
+
106
+ .dl-root[data-size="md"] {
107
+ --dl-width: 540px;
108
+ }
109
+ .dl-root[data-intent="info"] {
110
+ --dl-intent: var(--dl-info);
111
+ }
112
+ .dl-root[data-intent="success"] {
113
+ --dl-intent: var(--dl-success);
114
+ }
115
+ .dl-root[data-intent="warning"] {
116
+ --dl-intent: var(--dl-warning);
117
+ }
118
+ .dl-root[data-intent="danger"] {
119
+ --dl-intent: var(--dl-danger);
120
+ }
121
+
122
+ /* ------------------------------------------------------------ content */
123
+
124
+ .dl-body {
125
+ display: flex;
126
+ align-items: flex-start;
127
+ gap: 14px;
128
+ padding: 20px 20px 16px;
129
+ }
130
+ .dl-icon {
131
+ display: grid;
132
+ flex: none;
133
+ place-items: center;
134
+ width: 38px;
135
+ height: 38px;
136
+ border-radius: 50%;
137
+ background: color-mix(in oklab, var(--dl-intent), transparent 86%);
138
+ color: var(--dl-intent);
139
+ }
140
+ .dl-text {
141
+ display: flex;
142
+ flex: 1 1 auto;
143
+ flex-direction: column;
144
+ gap: 6px;
145
+ min-width: 0;
146
+ }
147
+ .dl-title {
148
+ margin: 0;
149
+ font-size: 1.15em;
150
+ font-weight: 600;
151
+ line-height: 1.35;
152
+ overflow-wrap: anywhere;
153
+ }
154
+ .dl-description {
155
+ color: var(--dl-muted);
156
+ overflow-wrap: anywhere;
157
+ }
158
+
159
+ .dl-field {
160
+ display: flex;
161
+ flex-direction: column;
162
+ gap: 4px;
163
+ margin-top: 6px;
164
+ }
165
+ .dl-label {
166
+ font-weight: 500;
167
+ }
168
+ .dl-input {
169
+ width: 100%;
170
+ height: 36px;
171
+ padding: 0 10px;
172
+ border: 1px solid var(--dl-border);
173
+ border-radius: 8px;
174
+ background: var(--dl-input-bg);
175
+ color: inherit;
176
+ font: inherit;
177
+ }
178
+ .dl-input:focus-visible {
179
+ outline: 2px solid var(--dl-focus);
180
+ outline-offset: -1px;
181
+ }
182
+ .dl-input[aria-invalid="true"] {
183
+ border-color: var(--dl-danger);
184
+ outline-color: var(--dl-danger);
185
+ }
186
+ .dl-error {
187
+ margin: 0;
188
+ color: var(--dl-danger);
189
+ font-size: 0.92em;
190
+ }
191
+
192
+ /* ------------------------------------------------------------ actions */
193
+
194
+ .dl-actions {
195
+ display: flex;
196
+ flex-wrap: wrap;
197
+ justify-content: flex-end;
198
+ gap: 8px;
199
+ padding: 12px 20px;
200
+ border-top: 1px solid var(--dl-border);
201
+ background: var(--gbs-header-bg, var(--dg-header-bg, light-dark(#fafafa, #111114)));
202
+ }
203
+ .dl-button {
204
+ display: inline-flex;
205
+ align-items: center;
206
+ justify-content: center;
207
+ gap: 6px;
208
+ min-width: 80px;
209
+ height: 34px;
210
+ padding: 0 14px;
211
+ border: 1px solid var(--dl-border);
212
+ border-radius: 8px;
213
+ background: var(--dl-bg);
214
+ color: inherit;
215
+ font: inherit;
216
+ font-weight: 500;
217
+ white-space: nowrap;
218
+ cursor: pointer;
219
+ }
220
+ .dl-button:hover:not([aria-disabled="true"]) {
221
+ background: var(--dl-hover);
222
+ }
223
+ .dl-button[data-variant="primary"] {
224
+ border-color: var(--dl-accent);
225
+ background: var(--dl-accent);
226
+ color: var(--dl-accent-fg);
227
+ }
228
+ .dl-button[data-variant="danger"] {
229
+ border-color: var(--dl-danger);
230
+ background: var(--dl-danger);
231
+ color: var(--dl-danger-fg);
232
+ }
233
+ .dl-button[data-variant="primary"]:hover:not([aria-disabled="true"]) {
234
+ background: color-mix(in oklab, var(--dl-accent), var(--dl-fg) 12%);
235
+ }
236
+ .dl-button[data-variant="danger"]:hover:not([aria-disabled="true"]) {
237
+ background: color-mix(in oklab, var(--dl-danger), var(--dl-fg) 12%);
238
+ }
239
+ .dl-button:focus-visible {
240
+ outline: 2px solid var(--dl-focus);
241
+ outline-offset: 2px;
242
+ }
243
+ .dl-button[aria-disabled="true"] {
244
+ opacity: 0.65;
245
+ cursor: progress;
246
+ }
247
+
248
+ .dl-spinner {
249
+ animation: dl-spin 0.7s linear infinite;
250
+ }
251
+ @keyframes dl-spin {
252
+ to {
253
+ transform: rotate(360deg);
254
+ }
255
+ }
256
+
257
+ @media (max-width: 480px) {
258
+ .dl-actions {
259
+ flex-direction: column-reverse;
260
+ }
261
+ .dl-button {
262
+ width: 100%;
263
+ }
264
+ }
265
+
266
+ @media (prefers-reduced-motion: reduce) {
267
+ .dl-root,
268
+ .dl-root::backdrop {
269
+ transition-duration: 0s;
270
+ }
271
+ .dl-spinner {
272
+ animation-duration: 2s;
273
+ }
274
+ }
275
+
276
+ @media (forced-colors: active) {
277
+ .dl-root {
278
+ border: 1px solid CanvasText;
279
+ }
280
+ }