@tappify/extension-sdk 2.0.0 → 2.1.0-beta.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 (148) hide show
  1. package/README.md +208 -0
  2. package/dist/chunk-2CY5HVY7.mjs +59 -0
  3. package/dist/chunk-2CY5HVY7.mjs.map +1 -0
  4. package/dist/{chunk-2DBSVKAU.cjs → chunk-6HETNZJY.cjs} +1 -1
  5. package/dist/chunk-6HETNZJY.cjs.map +1 -0
  6. package/dist/{chunk-PYJMJF44.cjs → chunk-7YKH4LZN.cjs} +9 -2
  7. package/dist/chunk-7YKH4LZN.cjs.map +1 -0
  8. package/dist/{chunk-RMUWRESK.cjs → chunk-A74HCO6T.cjs} +31 -18
  9. package/dist/chunk-A74HCO6T.cjs.map +1 -0
  10. package/dist/chunk-BPCGXXMD.cjs +781 -0
  11. package/dist/chunk-BPCGXXMD.cjs.map +1 -0
  12. package/dist/chunk-EB5XWQAU.cjs +132 -0
  13. package/dist/chunk-EB5XWQAU.cjs.map +1 -0
  14. package/dist/{chunk-5AAPD5WV.cjs → chunk-GAUZYBXE.cjs} +11 -11
  15. package/dist/chunk-GAUZYBXE.cjs.map +1 -0
  16. package/dist/chunk-J5LGTIGS.mjs +10 -0
  17. package/dist/chunk-J5LGTIGS.mjs.map +1 -0
  18. package/dist/{chunk-ZT35X7KL.mjs → chunk-KZ5NGFUP.mjs} +22 -9
  19. package/dist/chunk-KZ5NGFUP.mjs.map +1 -0
  20. package/dist/chunk-NN263PGQ.cjs +70 -0
  21. package/dist/chunk-NN263PGQ.cjs.map +1 -0
  22. package/dist/{chunk-3YWVYA42.cjs → chunk-O357OJXL.cjs} +14 -18
  23. package/dist/chunk-O357OJXL.cjs.map +1 -0
  24. package/dist/chunk-ONJMPO3P.cjs +59 -0
  25. package/dist/chunk-ONJMPO3P.cjs.map +1 -0
  26. package/dist/{chunk-OPPYEA7F.cjs → chunk-PRCZMOLD.cjs} +3 -3
  27. package/dist/chunk-PRCZMOLD.cjs.map +1 -0
  28. package/dist/chunk-Q7SFCCGT.cjs +10 -0
  29. package/dist/chunk-Q7SFCCGT.cjs.map +1 -0
  30. package/dist/{chunk-QHM7XNRK.mjs → chunk-QA5AL3VZ.mjs} +2 -2
  31. package/dist/{chunk-QHM7XNRK.mjs.map → chunk-QA5AL3VZ.mjs.map} +1 -1
  32. package/dist/chunk-QJMZRV7A.mjs +132 -0
  33. package/dist/chunk-QJMZRV7A.mjs.map +1 -0
  34. package/dist/{chunk-CSTYBKZC.mjs → chunk-QXD7WVKK.mjs} +1 -1
  35. package/dist/chunk-QXD7WVKK.mjs.map +1 -0
  36. package/dist/{chunk-4C5Z3CIK.mjs → chunk-RBIQT75L.mjs} +2 -2
  37. package/dist/chunk-RBIQT75L.mjs.map +1 -0
  38. package/dist/{chunk-MNDVYPEP.mjs → chunk-SGCYEEXD.mjs} +9 -2
  39. package/dist/chunk-SGCYEEXD.mjs.map +1 -0
  40. package/dist/{chunk-BDCX6LRQ.mjs → chunk-SGEYDV3K.mjs} +3 -3
  41. package/dist/chunk-SGEYDV3K.mjs.map +1 -0
  42. package/dist/{chunk-IGK2AP6J.mjs → chunk-SLGOHIBL.mjs} +13 -17
  43. package/dist/chunk-SLGOHIBL.mjs.map +1 -0
  44. package/dist/chunk-SWG7CNTZ.mjs +781 -0
  45. package/dist/chunk-SWG7CNTZ.mjs.map +1 -0
  46. package/dist/{chunk-7KIKOH5H.cjs → chunk-VV7ELNRW.cjs} +3 -3
  47. package/dist/chunk-VV7ELNRW.cjs.map +1 -0
  48. package/dist/chunk-Z43DPNZ6.mjs +70 -0
  49. package/dist/chunk-Z43DPNZ6.mjs.map +1 -0
  50. package/dist/client-BO3kavn0.d.ts +25 -0
  51. package/dist/client-DE-vMgdO.d.cts +25 -0
  52. package/dist/codegen.cjs.map +1 -1
  53. package/dist/codegen.d.cts +43 -7
  54. package/dist/codegen.d.ts +43 -7
  55. package/dist/codegen.mjs.map +1 -1
  56. package/dist/{constants-DJ_KgZpN.d.cts → constants-Bh759FUI.d.cts} +44 -8
  57. package/dist/{constants-DJ_KgZpN.d.ts → constants-Bh759FUI.d.ts} +44 -8
  58. package/dist/{context-Dt6xh_5t.d.cts → context-DI0EJCRD.d.cts} +5 -4
  59. package/dist/{context-Ml7k_V14.d.ts → context-mr8R5CNt.d.ts} +5 -4
  60. package/dist/{errors-COsBh7kd.d.cts → errors-Cqh0wrqt.d.cts} +3 -2
  61. package/dist/{errors-COsBh7kd.d.ts → errors-Cqh0wrqt.d.ts} +3 -2
  62. package/dist/host.cjs +5 -4
  63. package/dist/host.cjs.map +1 -1
  64. package/dist/host.d.cts +5 -5
  65. package/dist/host.d.ts +5 -5
  66. package/dist/host.mjs +4 -3
  67. package/dist/host.mjs.map +1 -1
  68. package/dist/index.cjs +9 -656
  69. package/dist/index.cjs.map +1 -1
  70. package/dist/index.d.cts +69 -627
  71. package/dist/index.d.ts +69 -627
  72. package/dist/index.mjs +5 -652
  73. package/dist/index.mjs.map +1 -1
  74. package/dist/manifest.cjs +142 -86
  75. package/dist/manifest.cjs.map +1 -1
  76. package/dist/manifest.d.cts +97 -12
  77. package/dist/manifest.d.ts +97 -12
  78. package/dist/manifest.mjs +129 -73
  79. package/dist/manifest.mjs.map +1 -1
  80. package/dist/server.cjs +15 -66
  81. package/dist/server.cjs.map +1 -1
  82. package/dist/server.d.cts +6 -6
  83. package/dist/server.d.ts +6 -6
  84. package/dist/server.mjs +10 -61
  85. package/dist/server.mjs.map +1 -1
  86. package/dist/testing/index.cjs +73 -750
  87. package/dist/testing/index.cjs.map +1 -1
  88. package/dist/testing/index.d.cts +30 -11
  89. package/dist/testing/index.d.ts +30 -11
  90. package/dist/testing/index.mjs +89 -766
  91. package/dist/testing/index.mjs.map +1 -1
  92. package/dist/testing/jest.cjs +6 -5
  93. package/dist/testing/jest.cjs.map +1 -1
  94. package/dist/testing/jest.mjs +3 -2
  95. package/dist/testing/jest.mjs.map +1 -1
  96. package/dist/testing/vitest.cjs +6 -5
  97. package/dist/testing/vitest.cjs.map +1 -1
  98. package/dist/testing/vitest.d.cts +10 -0
  99. package/dist/testing/vitest.d.ts +10 -0
  100. package/dist/testing/vitest.mjs +3 -2
  101. package/dist/testing/vitest.mjs.map +1 -1
  102. package/dist/{types-DDAGLpov.d.ts → types-BdDaLnqs.d.cts} +4 -3
  103. package/dist/{types-DrpQSv_2.d.cts → types-uGHrRaOj.d.ts} +4 -3
  104. package/dist/ui/styles.css +740 -0
  105. package/dist/ui.cjs +1018 -0
  106. package/dist/ui.cjs.map +1 -0
  107. package/dist/ui.d.cts +231 -0
  108. package/dist/ui.d.ts +231 -0
  109. package/dist/ui.mjs +1018 -0
  110. package/dist/ui.mjs.map +1 -0
  111. package/dist/vite-preview-bootstrap.cjs +66 -0
  112. package/dist/vite-preview-bootstrap.cjs.map +1 -0
  113. package/dist/vite-preview-bootstrap.d.cts +15 -0
  114. package/dist/vite-preview-bootstrap.d.ts +15 -0
  115. package/dist/vite-preview-bootstrap.mjs +66 -0
  116. package/dist/vite-preview-bootstrap.mjs.map +1 -0
  117. package/dist/vite-preview.cjs +876 -0
  118. package/dist/vite-preview.cjs.map +1 -0
  119. package/dist/vite-preview.d.cts +9 -0
  120. package/dist/vite-preview.d.ts +9 -0
  121. package/dist/vite-preview.mjs +876 -0
  122. package/dist/vite-preview.mjs.map +1 -0
  123. package/dist/vite.cjs +320 -60
  124. package/dist/vite.cjs.map +1 -1
  125. package/dist/vite.d.cts +54 -8
  126. package/dist/vite.d.ts +54 -8
  127. package/dist/vite.mjs +312 -54
  128. package/dist/vite.mjs.map +1 -1
  129. package/dist/work-events-BlOVpK0k.d.ts +547 -0
  130. package/dist/work-events-D97EoqvS.d.cts +547 -0
  131. package/package.json +19 -2
  132. package/schema/extension-v2.json +440 -121
  133. package/dist/chunk-2DBSVKAU.cjs.map +0 -1
  134. package/dist/chunk-3YWVYA42.cjs.map +0 -1
  135. package/dist/chunk-4C5Z3CIK.mjs.map +0 -1
  136. package/dist/chunk-5AAPD5WV.cjs.map +0 -1
  137. package/dist/chunk-7KIKOH5H.cjs.map +0 -1
  138. package/dist/chunk-BDCX6LRQ.mjs.map +0 -1
  139. package/dist/chunk-CSTYBKZC.mjs.map +0 -1
  140. package/dist/chunk-IGK2AP6J.mjs.map +0 -1
  141. package/dist/chunk-MNDVYPEP.mjs.map +0 -1
  142. package/dist/chunk-OPPYEA7F.cjs.map +0 -1
  143. package/dist/chunk-PYJMJF44.cjs.map +0 -1
  144. package/dist/chunk-RMUWRESK.cjs.map +0 -1
  145. package/dist/chunk-ZT35X7KL.mjs.map +0 -1
  146. package/dist/handler-CZIlZ5vu.d.ts +0 -227
  147. package/dist/handler-kU9Jf36K.d.cts +0 -227
  148. package/dist/styles.css +0 -367
@@ -0,0 +1,740 @@
1
+ .tap-root {
2
+ --tappify-bg-paper: var(--bg-paper, #fdfdfd);
3
+ --tappify-bg-canvas: var(--bg-canvas, #f2f3ee);
4
+ --tappify-bg-light-gray: var(--bg-light-gray, #edf1f5);
5
+ --tappify-fg-primary: var(--fg-primary, #121212);
6
+ --tappify-fg-sub: var(--fg-sub, rgb(18 18 18 / 70%));
7
+ --tappify-divider: var(--divider, #d5d7da);
8
+ --tappify-lime: var(--lime, #b4d773);
9
+ --tappify-deep-green: var(--deep-green, #234e20);
10
+ --tappify-inverse: var(--inverse, #181920);
11
+ --tappify-fg-disabled: var(--fg-disabled, #6f757d);
12
+ --tappify-danger: var(--danger, #b42318);
13
+ --tappify-on-accent: var(--on-accent, #ffffff);
14
+ --tappify-space-4: 4px;
15
+ --tappify-space-8: 8px;
16
+ --tappify-space-12: 12px;
17
+ --tappify-space-16: 16px;
18
+ --tappify-space-24: 24px;
19
+ --tappify-space-32: 32px;
20
+ --tappify-space-40: 40px;
21
+ --tappify-radius-control: 8px;
22
+ --tappify-radius-card: 14px;
23
+ --tappify-radius-panel: 18px;
24
+ --tappify-control-height: 36px;
25
+
26
+ color: var(--tappify-fg-primary);
27
+ font-family: var(
28
+ --font-one-ui,
29
+ 'Inter Variable',
30
+ 'Inter',
31
+ system-ui,
32
+ sans-serif
33
+ );
34
+ font-size: 14px;
35
+ line-height: 1.45;
36
+ container-name: tap-mount;
37
+ container-type: inline-size;
38
+ }
39
+
40
+ .tap-root *,
41
+ .tap-root *::before,
42
+ .tap-root *::after {
43
+ box-sizing: border-box;
44
+ }
45
+
46
+ .tap-stack,
47
+ .tap-inline {
48
+ display: flex;
49
+ min-width: 0;
50
+ }
51
+
52
+ .tap-stack {
53
+ flex-direction: column;
54
+ }
55
+
56
+ .tap-inline {
57
+ flex-direction: row;
58
+ }
59
+
60
+ [data-gap='4'] {
61
+ gap: var(--tappify-space-4);
62
+ }
63
+
64
+ [data-gap='8'] {
65
+ gap: var(--tappify-space-8);
66
+ }
67
+
68
+ [data-gap='12'] {
69
+ gap: var(--tappify-space-12);
70
+ }
71
+
72
+ [data-gap='16'] {
73
+ gap: var(--tappify-space-16);
74
+ }
75
+
76
+ [data-gap='24'] {
77
+ gap: var(--tappify-space-24);
78
+ }
79
+
80
+ [data-gap='32'] {
81
+ gap: var(--tappify-space-32);
82
+ }
83
+
84
+ [data-gap='40'] {
85
+ gap: var(--tappify-space-40);
86
+ }
87
+
88
+ [data-align='start'] {
89
+ align-items: flex-start;
90
+ }
91
+
92
+ [data-align='center'] {
93
+ align-items: center;
94
+ }
95
+
96
+ [data-align='end'] {
97
+ align-items: flex-end;
98
+ }
99
+
100
+ [data-align='stretch'] {
101
+ align-items: stretch;
102
+ }
103
+
104
+ [data-justify='start'] {
105
+ justify-content: flex-start;
106
+ }
107
+
108
+ [data-justify='center'] {
109
+ justify-content: center;
110
+ }
111
+
112
+ [data-justify='end'] {
113
+ justify-content: flex-end;
114
+ }
115
+
116
+ [data-justify='between'] {
117
+ justify-content: space-between;
118
+ }
119
+
120
+ .tap-button {
121
+ min-height: var(--tappify-control-height);
122
+ display: inline-flex;
123
+ align-items: center;
124
+ justify-content: center;
125
+ gap: 6px;
126
+ border: 1px solid transparent;
127
+ border-radius: var(--tappify-radius-control);
128
+ padding: 0 var(--tappify-space-12);
129
+ font: inherit;
130
+ font-weight: 500;
131
+ white-space: nowrap;
132
+ cursor: pointer;
133
+ transition:
134
+ background-color 120ms ease,
135
+ border-color 120ms ease,
136
+ color 120ms ease,
137
+ opacity 120ms ease;
138
+ }
139
+
140
+ .tap-button:focus-visible {
141
+ outline: 2px solid var(--tappify-deep-green);
142
+ outline-offset: 2px;
143
+ }
144
+
145
+ .tap-button:hover:not(:disabled) {
146
+ opacity: 0.88;
147
+ }
148
+
149
+ .tap-button:active:not(:disabled) {
150
+ opacity: 0.74;
151
+ }
152
+
153
+ .tap-button[data-variant='primary'] {
154
+ color: var(--tappify-deep-green);
155
+ background: var(--tappify-lime);
156
+ }
157
+
158
+ .tap-button[data-variant='secondary'] {
159
+ color: var(--tappify-fg-primary);
160
+ background: var(--tappify-bg-paper);
161
+ border-color: var(--tappify-divider);
162
+ }
163
+
164
+ .tap-button[data-variant='tertiary'] {
165
+ color: var(--tappify-deep-green);
166
+ background: transparent;
167
+ }
168
+
169
+ .tap-button[data-variant='inverse'] {
170
+ color: var(--tappify-bg-paper);
171
+ background: var(--tappify-inverse);
172
+ }
173
+
174
+ .tap-button[data-variant='destructive'] {
175
+ color: var(--tappify-on-accent);
176
+ background: var(--tappify-danger);
177
+ }
178
+
179
+ .tap-button:disabled {
180
+ color: var(--tappify-fg-disabled);
181
+ cursor: not-allowed;
182
+ opacity: 0.8;
183
+ }
184
+
185
+ .tap-button[data-variant='primary']:disabled,
186
+ .tap-button[data-variant='secondary']:disabled,
187
+ .tap-button[data-variant='inverse']:disabled,
188
+ .tap-button[data-variant='destructive']:disabled {
189
+ background: var(--tappify-bg-light-gray);
190
+ }
191
+
192
+ .tap-button[data-variant='tertiary']:disabled {
193
+ background: transparent;
194
+ }
195
+
196
+ .tap-button[data-size='compact'],
197
+ .tap-button[data-size='sm'] {
198
+ min-height: 32px;
199
+ padding-inline: var(--tappify-space-12);
200
+ font-size: 13px;
201
+ }
202
+
203
+ .tap-button[data-size='xs'] {
204
+ min-height: 28px;
205
+ padding-inline: var(--tappify-space-8);
206
+ font-size: 12px;
207
+ }
208
+
209
+ .tap-button[data-size='lg'] {
210
+ min-height: 44px;
211
+ padding-inline: var(--tappify-space-24);
212
+ }
213
+
214
+ .tap-button[data-size^='icon'] {
215
+ width: var(--tappify-control-height);
216
+ padding: 0;
217
+ }
218
+
219
+ .tap-button[data-size='icon-xs'] {
220
+ width: 28px;
221
+ min-height: 28px;
222
+ }
223
+
224
+ .tap-button[data-size='icon-sm'] {
225
+ width: 32px;
226
+ min-height: 32px;
227
+ }
228
+
229
+ .tap-button[data-size='icon-lg'] {
230
+ width: 44px;
231
+ min-height: 44px;
232
+ }
233
+
234
+ .tap-button__spinner {
235
+ width: 14px;
236
+ height: 14px;
237
+ border: 2px solid currentcolor;
238
+ border-right-color: transparent;
239
+ border-radius: 50%;
240
+ animation: tappify-spin 700ms linear infinite;
241
+ }
242
+
243
+ @keyframes tappify-spin {
244
+ to {
245
+ transform: rotate(1turn);
246
+ }
247
+ }
248
+
249
+ .tap-ui-card {
250
+ display: flex;
251
+ flex-direction: column;
252
+ gap: var(--tappify-space-16);
253
+ min-width: 0;
254
+ padding: var(--tappify-space-24);
255
+ background: var(--tappify-bg-paper);
256
+ border-radius: var(--tappify-radius-card);
257
+ }
258
+
259
+ .tap-ui-card[data-size='sm'] {
260
+ gap: var(--tappify-space-12);
261
+ padding: var(--tappify-space-16);
262
+ }
263
+
264
+ .tap-card__header {
265
+ display: grid;
266
+ grid-template-columns: minmax(0, 1fr) auto;
267
+ gap: var(--tappify-space-4) var(--tappify-space-16);
268
+ align-items: start;
269
+ }
270
+
271
+ .tap-card__title {
272
+ font-size: 16px;
273
+ font-weight: 650;
274
+ line-height: 1.3;
275
+ }
276
+
277
+ .tap-card__description {
278
+ color: var(--tappify-fg-sub);
279
+ grid-column: 1;
280
+ }
281
+
282
+ .tap-card__action {
283
+ grid-column: 2;
284
+ grid-row: 1 / span 2;
285
+ }
286
+
287
+ .tap-card__content,
288
+ .tap-card__footer {
289
+ min-width: 0;
290
+ }
291
+
292
+ .tap-card__footer {
293
+ color: var(--tappify-fg-sub);
294
+ }
295
+
296
+ .tap-ui-page-header {
297
+ display: flex;
298
+ align-items: flex-start;
299
+ justify-content: space-between;
300
+ gap: var(--tappify-space-24);
301
+ }
302
+
303
+ .tap-page-header__copy {
304
+ min-width: 0;
305
+ }
306
+
307
+ .tap-page-header__title {
308
+ margin: 0;
309
+ font-size: 24px;
310
+ font-weight: 650;
311
+ line-height: 1.2;
312
+ }
313
+
314
+ .tap-page-header__description {
315
+ margin-top: var(--tappify-space-8);
316
+ color: var(--tappify-fg-sub);
317
+ }
318
+
319
+ .tap-page-header__actions {
320
+ display: flex;
321
+ align-items: center;
322
+ gap: var(--tappify-space-8);
323
+ flex: 0 0 auto;
324
+ }
325
+
326
+ @container tap-mount (max-width: 520px) {
327
+ .tap-ui-page-header {
328
+ flex-direction: column;
329
+ }
330
+
331
+ .tap-page-header__actions {
332
+ width: 100%;
333
+ flex-wrap: wrap;
334
+ }
335
+ }
336
+
337
+ @media (prefers-reduced-motion: reduce) {
338
+ .tap-button,
339
+ .tap-button__spinner {
340
+ transition: none;
341
+ animation: none;
342
+ }
343
+ }
344
+
345
+ .tap-ui-field {
346
+ display: flex;
347
+ flex-direction: column;
348
+ gap: var(--tappify-space-8);
349
+ min-width: 0;
350
+ }
351
+
352
+ .tap-field__label {
353
+ font-weight: 600;
354
+ line-height: 1.3;
355
+ }
356
+
357
+ .tap-field__description,
358
+ .tap-field__error {
359
+ font-size: 13px;
360
+ line-height: 1.4;
361
+ }
362
+
363
+ .tap-field__description {
364
+ color: var(--tappify-fg-sub);
365
+ }
366
+
367
+ .tap-field__error {
368
+ color: var(--tappify-danger);
369
+ }
370
+
371
+ .tap-ui-control {
372
+ width: 100%;
373
+ min-width: 0;
374
+ min-height: 49px;
375
+ padding: 0 var(--tappify-space-12);
376
+ color: var(--tappify-fg-primary);
377
+ background: var(--tappify-bg-paper);
378
+ border: 1px solid var(--tappify-divider);
379
+ border-radius: var(--tappify-radius-control);
380
+ font: inherit;
381
+ outline: none;
382
+ transition:
383
+ border-color 120ms ease,
384
+ box-shadow 120ms ease;
385
+ }
386
+
387
+ .tap-textarea {
388
+ min-height: 112px;
389
+ padding-block: var(--tappify-space-12);
390
+ resize: vertical;
391
+ }
392
+
393
+ .tap-ui-control:focus-visible,
394
+ .tap-checkbox:focus-visible {
395
+ border-color: var(--tappify-deep-green);
396
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--tappify-lime) 55%, transparent);
397
+ }
398
+
399
+ .tap-ui-control:disabled,
400
+ .tap-checkbox:disabled {
401
+ color: var(--tappify-fg-sub);
402
+ background: var(--tappify-bg-light-gray);
403
+ cursor: not-allowed;
404
+ opacity: 0.7;
405
+ }
406
+
407
+ .tap-ui-control[aria-invalid='true'],
408
+ .tap-checkbox[aria-invalid='true'] {
409
+ border-color: var(--tappify-danger);
410
+ }
411
+
412
+ .tap-checkbox {
413
+ appearance: none;
414
+ width: 18px;
415
+ height: 18px;
416
+ margin: 0;
417
+ display: inline-grid;
418
+ place-content: center;
419
+ flex: 0 0 auto;
420
+ background: var(--tappify-bg-paper);
421
+ border: 1px solid var(--tappify-divider);
422
+ border-radius: 5px;
423
+ cursor: pointer;
424
+ }
425
+
426
+ .tap-checkbox::before {
427
+ width: 9px;
428
+ height: 5px;
429
+ content: '';
430
+ border: solid var(--tappify-on-accent);
431
+ border-width: 0 0 2px 2px;
432
+ transform: rotate(-45deg) scale(0);
433
+ }
434
+
435
+ .tap-checkbox[data-state='checked'],
436
+ .tap-checkbox[data-state='indeterminate'] {
437
+ background: var(--tappify-deep-green);
438
+ border-color: var(--tappify-deep-green);
439
+ }
440
+
441
+ .tap-checkbox[data-state='checked']::before {
442
+ transform: rotate(-45deg) scale(1);
443
+ }
444
+
445
+ .tap-checkbox[data-state='indeterminate']::before {
446
+ height: 0;
447
+ border-width: 0 0 2px;
448
+ transform: rotate(0) scale(1);
449
+ }
450
+
451
+ .tap-schema-form {
452
+ display: flex;
453
+ flex-direction: column;
454
+ gap: var(--tappify-space-24);
455
+ }
456
+
457
+ .tap-checkbox-row {
458
+ display: flex;
459
+ align-items: center;
460
+ gap: var(--tappify-space-8);
461
+ cursor: pointer;
462
+ }
463
+
464
+ .tap-ui-field--checkbox > .tap-field__description,
465
+ .tap-ui-field--checkbox > .tap-field__error {
466
+ margin-inline-start: 26px;
467
+ }
468
+
469
+ .tap-schema-form__actions {
470
+ flex-wrap: wrap;
471
+ }
472
+
473
+ @container tap-mount (max-width: 420px) {
474
+ .tap-schema-form__actions {
475
+ align-items: stretch;
476
+ flex-direction: column-reverse;
477
+ }
478
+ }
479
+
480
+ .tap-ui-dialog-overlay {
481
+ position: fixed;
482
+ inset: 0;
483
+ z-index: 1000;
484
+ display: grid;
485
+ place-items: center;
486
+ padding: var(--tappify-space-24);
487
+ background: rgb(18 18 18 / 58%);
488
+ backdrop-filter: blur(2px);
489
+ animation: tappify-fade-in 140ms ease-out;
490
+ }
491
+
492
+ .tap-ui-dialog {
493
+ width: min(100%, 520px);
494
+ max-height: min(88vh, 860px);
495
+ display: flex;
496
+ flex-direction: column;
497
+ overflow: hidden;
498
+ color: var(--tappify-fg-primary);
499
+ background: var(--tappify-bg-paper);
500
+ border: 1px solid var(--tappify-divider);
501
+ border-radius: var(--tappify-radius-panel);
502
+ box-shadow: 0 24px 80px rgb(18 18 18 / 24%);
503
+ animation: tappify-dialog-in 160ms ease-out;
504
+ }
505
+
506
+ .tap-ui-dialog[data-surface='canvas'] {
507
+ background: var(--tappify-bg-canvas);
508
+ }
509
+
510
+ .tap-ui-dialog[data-size='compact'] {
511
+ width: min(100%, 360px);
512
+ }
513
+
514
+ .tap-ui-dialog[data-size='medium'],
515
+ .tap-ui-dialog[data-size='confirmation'] {
516
+ width: min(100%, 440px);
517
+ }
518
+
519
+ .tap-ui-dialog[data-size='large'] {
520
+ width: min(100%, 680px);
521
+ }
522
+
523
+ .tap-ui-dialog[data-size='wide'] {
524
+ width: min(100%, 880px);
525
+ }
526
+
527
+ .tap-dialog__header,
528
+ .tap-dialog__body,
529
+ .tap-dialog__footer {
530
+ padding-inline: var(--tappify-space-24);
531
+ }
532
+
533
+ .tap-dialog__header {
534
+ position: relative;
535
+ padding-block: var(--tappify-space-24) var(--tappify-space-16);
536
+ }
537
+
538
+ .tap-dialog__title {
539
+ margin: 0;
540
+ font-size: 20px;
541
+ font-weight: 650;
542
+ line-height: 1.25;
543
+ }
544
+
545
+ .tap-dialog__description {
546
+ margin-top: var(--tappify-space-8);
547
+ color: var(--tappify-fg-sub);
548
+ }
549
+
550
+ .tap-dialog__body {
551
+ min-height: 0;
552
+ padding-block: var(--tappify-space-16) var(--tappify-space-24);
553
+ overflow: auto;
554
+ }
555
+
556
+ .tap-dialog__footer {
557
+ display: flex;
558
+ align-items: center;
559
+ justify-content: flex-end;
560
+ gap: var(--tappify-space-8);
561
+ padding-block: var(--tappify-space-16) var(--tappify-space-24);
562
+ border-top: 1px solid var(--tappify-divider);
563
+ }
564
+
565
+ @keyframes tappify-fade-in {
566
+ from {
567
+ opacity: 0;
568
+ }
569
+ }
570
+
571
+ @keyframes tappify-dialog-in {
572
+ from {
573
+ opacity: 0;
574
+ transform: translateY(8px) scale(0.985);
575
+ }
576
+ }
577
+
578
+ @media (prefers-reduced-motion: reduce) {
579
+ .tap-ui-dialog-overlay,
580
+ .tap-ui-dialog {
581
+ animation: none;
582
+ }
583
+ }
584
+
585
+ @media (max-width: 560px) {
586
+ .tap-ui-dialog-overlay {
587
+ padding: var(--tappify-space-12);
588
+ }
589
+
590
+ .tap-ui-dialog {
591
+ max-height: calc(100vh - 24px);
592
+ }
593
+
594
+ .tap-dialog__footer {
595
+ align-items: stretch;
596
+ flex-direction: column-reverse;
597
+ }
598
+ }
599
+
600
+ .tap-ui-table-container {
601
+ width: 100%;
602
+ overflow-x: auto;
603
+ }
604
+
605
+ .tap-ui-table {
606
+ width: 100%;
607
+ border-spacing: 0;
608
+ border-collapse: collapse;
609
+ }
610
+
611
+ .tap-table__row {
612
+ border-bottom: 1px solid var(--tappify-divider);
613
+ }
614
+
615
+ .tap-table__row[data-variant='header'] {
616
+ height: 44px;
617
+ }
618
+
619
+ .tap-table__row[data-variant='body'] {
620
+ height: 48px;
621
+ }
622
+
623
+ .tap-table__head,
624
+ .tap-table__cell {
625
+ padding: var(--tappify-space-8) var(--tappify-space-12);
626
+ text-align: start;
627
+ white-space: nowrap;
628
+ }
629
+
630
+ .tap-table__head {
631
+ color: var(--tappify-fg-sub);
632
+ font-size: 13px;
633
+ font-weight: 600;
634
+ }
635
+
636
+ .tap-table__cell {
637
+ font-size: 14px;
638
+ }
639
+
640
+ .tap-metric {
641
+ display: grid;
642
+ grid-template-columns: minmax(0, 1fr) auto;
643
+ gap: var(--tappify-space-4) var(--tappify-space-12);
644
+ }
645
+
646
+ .tap-metric__label,
647
+ .tap-metric__description {
648
+ color: var(--tappify-fg-sub);
649
+ }
650
+
651
+ .tap-metric__label {
652
+ grid-column: 1 / -1;
653
+ font-size: 14px;
654
+ }
655
+
656
+ .tap-metric__value {
657
+ font-size: 28px;
658
+ font-weight: 650;
659
+ font-variant-numeric: tabular-nums;
660
+ line-height: 1.15;
661
+ }
662
+
663
+ .tap-metric__delta {
664
+ align-self: end;
665
+ padding-bottom: 2px;
666
+ color: var(--tappify-fg-sub);
667
+ font-variant-numeric: tabular-nums;
668
+ font-weight: 600;
669
+ }
670
+
671
+ .tap-metric__delta[data-direction='up'] {
672
+ color: var(--tappify-deep-green);
673
+ }
674
+
675
+ .tap-metric__delta[data-direction='down'] {
676
+ color: var(--tappify-danger);
677
+ }
678
+
679
+ .tap-metric__description {
680
+ grid-column: 1 / -1;
681
+ font-size: 13px;
682
+ }
683
+
684
+ .tap-ui-skeleton {
685
+ display: flex;
686
+ flex-direction: column;
687
+ gap: var(--tappify-space-8);
688
+ }
689
+
690
+ .tap-skeleton__line {
691
+ display: block;
692
+ width: 100%;
693
+ height: 12px;
694
+ border-radius: 999px;
695
+ background: linear-gradient(
696
+ 90deg,
697
+ var(--tappify-bg-light-gray) 25%,
698
+ var(--tappify-bg-paper) 50%,
699
+ var(--tappify-bg-light-gray) 75%
700
+ );
701
+ background-size: 200% 100%;
702
+ animation: tappify-skeleton 1.4s ease-in-out infinite;
703
+ }
704
+
705
+ @keyframes tappify-skeleton {
706
+ to {
707
+ background-position: -200% 0;
708
+ }
709
+ }
710
+
711
+ .tap-ui-state {
712
+ align-items: center;
713
+ justify-content: center;
714
+ min-height: 180px;
715
+ padding: var(--tappify-space-32) var(--tappify-space-24);
716
+ text-align: center;
717
+ color: var(--tappify-fg-sub);
718
+ }
719
+
720
+ .tap-state__title {
721
+ color: var(--tappify-fg-primary);
722
+ font-size: 18px;
723
+ font-weight: 650;
724
+ }
725
+
726
+ .tap-ui-state--error .tap-state__title,
727
+ .tap-state__code {
728
+ color: var(--tappify-danger);
729
+ }
730
+
731
+ .tap-state__code {
732
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
733
+ font-size: 12px;
734
+ }
735
+
736
+ @media (prefers-reduced-motion: reduce) {
737
+ .tap-skeleton__line {
738
+ animation: none;
739
+ }
740
+ }