@devalok/shilp-sutra 0.30.0 → 0.32.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 (266) hide show
  1. package/README.md +82 -239
  2. package/dist/_chunks/badge-group.js +123 -171
  3. package/dist/_chunks/document-preview.js +92 -0
  4. package/dist/_chunks/file-preview.js +511 -0
  5. package/dist/_chunks/image-preview.js +90 -0
  6. package/dist/_chunks/primitives.js +109 -109
  7. package/dist/_chunks/stat-row.js +144 -124
  8. package/dist/_chunks/use-calendar.js +558 -490
  9. package/dist/ai/block-renderer.d.ts +2 -1
  10. package/dist/ai/block-renderer.d.ts.map +1 -1
  11. package/dist/ai/block-renderer.js +30 -29
  12. package/dist/ai/blocks/block-table.d.ts.map +1 -1
  13. package/dist/ai/blocks/confirm.d.ts.map +1 -1
  14. package/dist/ai/blocks/divider.d.ts.map +1 -1
  15. package/dist/ai/blocks/error.d.ts.map +1 -1
  16. package/dist/ai/blocks/info.d.ts.map +1 -1
  17. package/dist/ai/blocks/loading.d.ts.map +1 -1
  18. package/dist/ai/blocks/stat-row.d.ts.map +1 -1
  19. package/dist/ai/blocks/success.d.ts.map +1 -1
  20. package/dist/ai/blocks/text.d.ts.map +1 -1
  21. package/dist/ai/command-bar.d.ts +18 -0
  22. package/dist/ai/command-bar.d.ts.map +1 -1
  23. package/dist/ai/command-bar.js +126 -125
  24. package/dist/ai/conversation.d.ts +13 -1
  25. package/dist/ai/conversation.d.ts.map +1 -1
  26. package/dist/ai/conversation.js +78 -78
  27. package/dist/ai/types.d.ts +0 -1
  28. package/dist/ai/types.d.ts.map +1 -1
  29. package/dist/ai/types.js +1 -0
  30. package/dist/composed/bulk-action-bar.d.ts +6 -4
  31. package/dist/composed/bulk-action-bar.d.ts.map +1 -1
  32. package/dist/composed/bulk-action-bar.js +102 -58
  33. package/dist/composed/command-palette.d.ts +9 -0
  34. package/dist/composed/command-palette.d.ts.map +1 -1
  35. package/dist/composed/command-palette.js +68 -68
  36. package/dist/composed/confirm-dialog.d.ts +1 -1
  37. package/dist/composed/confirm-dialog.d.ts.map +1 -1
  38. package/dist/composed/confirm-dialog.js +10 -10
  39. package/dist/composed/content-card.d.ts.map +1 -1
  40. package/dist/composed/date-picker/date-picker.d.ts +11 -1
  41. package/dist/composed/date-picker/date-picker.d.ts.map +1 -1
  42. package/dist/composed/date-picker/month-picker.d.ts.map +1 -1
  43. package/dist/composed/date-picker/year-picker.d.ts.map +1 -1
  44. package/dist/composed/deadline-indicator.d.ts +1 -1
  45. package/dist/composed/deadline-indicator.d.ts.map +1 -1
  46. package/dist/composed/deadline-indicator.js +39 -36
  47. package/dist/composed/emoji-picker.d.ts +6 -0
  48. package/dist/composed/emoji-picker.d.ts.map +1 -1
  49. package/dist/composed/emoji-picker.js +22 -20
  50. package/dist/composed/error-boundary.d.ts +21 -1
  51. package/dist/composed/error-boundary.d.ts.map +1 -1
  52. package/dist/composed/error-boundary.js +47 -32
  53. package/dist/composed/file-preview/audio-preview.d.ts +7 -0
  54. package/dist/composed/file-preview/audio-preview.d.ts.map +1 -0
  55. package/dist/composed/file-preview/document-preview.d.ts +7 -0
  56. package/dist/composed/file-preview/document-preview.d.ts.map +1 -0
  57. package/dist/composed/file-preview/embed-preview.d.ts +7 -0
  58. package/dist/composed/file-preview/embed-preview.d.ts.map +1 -0
  59. package/dist/composed/file-preview/image-preview.d.ts +7 -0
  60. package/dist/composed/file-preview/image-preview.d.ts.map +1 -0
  61. package/dist/composed/file-preview/shared.d.ts +20 -0
  62. package/dist/composed/file-preview/shared.d.ts.map +1 -0
  63. package/dist/composed/file-preview/video-preview.d.ts +6 -0
  64. package/dist/composed/file-preview/video-preview.d.ts.map +1 -0
  65. package/dist/composed/file-preview.d.ts.map +1 -1
  66. package/dist/composed/file-preview.js +10 -662
  67. package/dist/composed/filter-bar.d.ts +10 -2
  68. package/dist/composed/filter-bar.d.ts.map +1 -1
  69. package/dist/composed/filter-bar.js +42 -43
  70. package/dist/composed/form-section.d.ts +1 -1
  71. package/dist/composed/form-section.d.ts.map +1 -1
  72. package/dist/composed/form-section.js +22 -21
  73. package/dist/composed/index.d.ts +2 -2
  74. package/dist/composed/index.d.ts.map +1 -1
  75. package/dist/composed/index.js +58 -57
  76. package/dist/composed/inline-edit.d.ts +1 -1
  77. package/dist/composed/inline-edit.d.ts.map +1 -1
  78. package/dist/composed/inline-edit.js +33 -32
  79. package/dist/composed/lib/string-utils.d.ts.map +1 -1
  80. package/dist/composed/loading-skeleton.d.ts.map +1 -1
  81. package/dist/composed/markdown-viewer.d.ts +1 -1
  82. package/dist/composed/markdown-viewer.d.ts.map +1 -1
  83. package/dist/composed/markdown-viewer.js +60 -59
  84. package/dist/composed/master-detail.d.ts +11 -7
  85. package/dist/composed/master-detail.d.ts.map +1 -1
  86. package/dist/composed/master-detail.js +123 -84
  87. package/dist/composed/page-header.d.ts.map +1 -1
  88. package/dist/composed/page-skeletons.d.ts.map +1 -1
  89. package/dist/composed/priority-indicator.d.ts +1 -0
  90. package/dist/composed/priority-indicator.js +1 -0
  91. package/dist/composed/responsive-overlay.d.ts +8 -0
  92. package/dist/composed/responsive-overlay.d.ts.map +1 -1
  93. package/dist/composed/rich-text-editor.d.ts +11 -3
  94. package/dist/composed/rich-text-editor.d.ts.map +1 -1
  95. package/dist/composed/rich-text-editor.js +21 -20
  96. package/dist/composed/schedule-view.d.ts +9 -1
  97. package/dist/composed/schedule-view.d.ts.map +1 -1
  98. package/dist/hooks/index.d.ts +2 -0
  99. package/dist/hooks/index.d.ts.map +1 -1
  100. package/dist/hooks/index.js +8 -4
  101. package/dist/hooks/use-touch-device.d.ts +12 -0
  102. package/dist/hooks/use-touch-device.d.ts.map +1 -0
  103. package/dist/hooks/use-touch-device.js +13 -0
  104. package/dist/hooks/use-viewport-height.d.ts +11 -0
  105. package/dist/hooks/use-viewport-height.d.ts.map +1 -0
  106. package/dist/hooks/use-viewport-height.js +16 -0
  107. package/dist/shell/bottom-navbar.d.ts.map +1 -1
  108. package/dist/shell/bottom-navbar.js +72 -63
  109. package/dist/shell/command-registry.d.ts.map +1 -1
  110. package/dist/shell/notification-center.d.ts.map +1 -1
  111. package/dist/shell/notification-center.js +77 -77
  112. package/dist/shell/top-bar.d.ts +2 -2
  113. package/dist/shell/top-bar.d.ts.map +1 -1
  114. package/dist/shell/top-bar.js +61 -60
  115. package/dist/tailwind/index.cjs +51 -7
  116. package/dist/tailwind/preset.d.ts.map +1 -1
  117. package/dist/tailwind/preset.js +51 -7
  118. package/dist/tokens/primitives.css +3 -1
  119. package/dist/tokens/semantic.css +16 -13
  120. package/dist/tokens/typography.css +33 -4
  121. package/dist/ui/alert.d.ts +1 -0
  122. package/dist/ui/alert.d.ts.map +1 -1
  123. package/dist/ui/alert.js +42 -37
  124. package/dist/ui/autocomplete.d.ts.map +1 -1
  125. package/dist/ui/autocomplete.js +38 -39
  126. package/dist/ui/badge.d.ts +110 -2
  127. package/dist/ui/badge.d.ts.map +1 -1
  128. package/dist/ui/banner.d.ts.map +1 -1
  129. package/dist/ui/banner.js +8 -7
  130. package/dist/ui/button.d.ts +2 -2
  131. package/dist/ui/button.d.ts.map +1 -1
  132. package/dist/ui/button.js +54 -74
  133. package/dist/ui/card.d.ts +5 -1
  134. package/dist/ui/card.d.ts.map +1 -1
  135. package/dist/ui/card.js +111 -79
  136. package/dist/ui/charts/area-chart.d.ts +2 -0
  137. package/dist/ui/charts/area-chart.d.ts.map +1 -1
  138. package/dist/ui/charts/bar-chart.d.ts +2 -0
  139. package/dist/ui/charts/bar-chart.d.ts.map +1 -1
  140. package/dist/ui/charts/chart-container.d.ts +2 -0
  141. package/dist/ui/charts/chart-container.d.ts.map +1 -1
  142. package/dist/ui/charts/index.js +583 -577
  143. package/dist/ui/charts/line-chart.d.ts +2 -0
  144. package/dist/ui/charts/line-chart.d.ts.map +1 -1
  145. package/dist/ui/charts/pie-chart.d.ts +2 -0
  146. package/dist/ui/charts/pie-chart.d.ts.map +1 -1
  147. package/dist/ui/charts/radar-chart.d.ts +2 -0
  148. package/dist/ui/charts/radar-chart.d.ts.map +1 -1
  149. package/dist/ui/checkbox.d.ts +2 -0
  150. package/dist/ui/checkbox.d.ts.map +1 -1
  151. package/dist/ui/checkbox.js +36 -27
  152. package/dist/ui/code.d.ts.map +1 -1
  153. package/dist/ui/color-input.js +5 -5
  154. package/dist/ui/combobox.d.ts +6 -1
  155. package/dist/ui/combobox.d.ts.map +1 -1
  156. package/dist/ui/combobox.js +1 -1
  157. package/dist/ui/container.d.ts.map +1 -1
  158. package/dist/ui/context-menu.js +1 -1
  159. package/dist/ui/data-table-body.d.ts +12 -0
  160. package/dist/ui/data-table-body.d.ts.map +1 -0
  161. package/dist/ui/data-table-body.js +219 -0
  162. package/dist/ui/data-table-bulk-actions.d.ts +19 -0
  163. package/dist/ui/data-table-bulk-actions.d.ts.map +1 -0
  164. package/dist/ui/data-table-bulk-actions.js +61 -0
  165. package/dist/ui/data-table-card.d.ts +9 -0
  166. package/dist/ui/data-table-card.d.ts.map +1 -0
  167. package/dist/ui/data-table-card.js +73 -0
  168. package/dist/ui/data-table-context.d.ts +62 -0
  169. package/dist/ui/data-table-context.d.ts.map +1 -0
  170. package/dist/ui/data-table-context.js +48 -0
  171. package/dist/ui/data-table-header.d.ts +10 -0
  172. package/dist/ui/data-table-header.d.ts.map +1 -0
  173. package/dist/ui/data-table-header.js +141 -0
  174. package/dist/ui/data-table-pagination.d.ts +13 -0
  175. package/dist/ui/data-table-pagination.d.ts.map +1 -0
  176. package/dist/ui/data-table-pagination.js +84 -0
  177. package/dist/ui/data-table.d.ts +11 -9
  178. package/dist/ui/data-table.d.ts.map +1 -1
  179. package/dist/ui/data-table.js +258 -573
  180. package/dist/ui/dialog.d.ts +6 -2
  181. package/dist/ui/dialog.d.ts.map +1 -1
  182. package/dist/ui/dialog.js +84 -82
  183. package/dist/ui/dropdown-menu.js +1 -1
  184. package/dist/ui/hover-card.d.ts +7 -0
  185. package/dist/ui/hover-card.d.ts.map +1 -1
  186. package/dist/ui/hover-card.js +3 -3
  187. package/dist/ui/icon-group.d.ts +2 -4
  188. package/dist/ui/icon-group.d.ts.map +1 -1
  189. package/dist/ui/icon-group.js +22 -23
  190. package/dist/ui/index.d.ts +1 -2
  191. package/dist/ui/index.d.ts.map +1 -1
  192. package/dist/ui/index.js +94 -99
  193. package/dist/ui/label.js +1 -1
  194. package/dist/ui/lib/bottom-sheet.d.ts +16 -0
  195. package/dist/ui/lib/bottom-sheet.d.ts.map +1 -0
  196. package/dist/ui/lib/date-utils.d.ts.map +1 -1
  197. package/dist/ui/lib/motion.d.ts.map +1 -1
  198. package/dist/ui/lib/utils.d.ts.map +1 -1
  199. package/dist/ui/menubar.d.ts.map +1 -1
  200. package/dist/ui/menubar.js +64 -73
  201. package/dist/ui/navigation-menu.d.ts.map +1 -1
  202. package/dist/ui/navigation-menu.js +40 -44
  203. package/dist/ui/number-input.d.ts.map +1 -1
  204. package/dist/ui/number-input.js +19 -17
  205. package/dist/ui/popover.d.ts.map +1 -1
  206. package/dist/ui/popover.js +107 -32
  207. package/dist/ui/progress-ring.d.ts.map +1 -1
  208. package/dist/ui/progress-ring.js +80 -80
  209. package/dist/ui/progress.js +4 -4
  210. package/dist/ui/radio.d.ts +5 -2
  211. package/dist/ui/radio.d.ts.map +1 -1
  212. package/dist/ui/radio.js +29 -20
  213. package/dist/ui/search-input.d.ts.map +1 -1
  214. package/dist/ui/search-input.js +13 -12
  215. package/dist/ui/segmented-control.d.ts +6 -108
  216. package/dist/ui/segmented-control.d.ts.map +1 -1
  217. package/dist/ui/segmented-control.js +86 -272
  218. package/dist/ui/select.d.ts +3 -1
  219. package/dist/ui/select.d.ts.map +1 -1
  220. package/dist/ui/select.js +83 -71
  221. package/dist/ui/separator.js +5 -5
  222. package/dist/ui/sheet.d.ts +2 -0
  223. package/dist/ui/sheet.d.ts.map +1 -1
  224. package/dist/ui/sheet.js +102 -84
  225. package/dist/ui/sidebar.d.ts.map +1 -1
  226. package/dist/ui/sidebar.js +200 -175
  227. package/dist/ui/skeleton.d.ts.map +1 -1
  228. package/dist/ui/slider.js +14 -14
  229. package/dist/ui/stack.d.ts.map +1 -1
  230. package/dist/ui/status-dot.js +8 -8
  231. package/dist/ui/stepper.d.ts.map +1 -1
  232. package/dist/ui/stepper.js +33 -31
  233. package/dist/ui/switch.js +3 -3
  234. package/dist/ui/table.d.ts.map +1 -1
  235. package/dist/ui/tabs.d.ts +7 -0
  236. package/dist/ui/tabs.d.ts.map +1 -1
  237. package/dist/ui/tabs.js +102 -76
  238. package/dist/ui/text.d.ts.map +1 -1
  239. package/dist/ui/toast-types.d.ts +0 -1
  240. package/dist/ui/toast-types.d.ts.map +1 -1
  241. package/dist/ui/toast-types.js +0 -1
  242. package/dist/ui/toast.d.ts.map +1 -1
  243. package/dist/ui/toast.js +156 -150
  244. package/dist/ui/toggle-group.js +1 -1
  245. package/dist/ui/toggle.js +1 -1
  246. package/dist/ui/tooltip.js +3 -3
  247. package/dist/ui/visually-hidden.d.ts.map +1 -1
  248. package/docs/components/ui/alert.md +3 -0
  249. package/docs/components/ui/badge.md +3 -0
  250. package/docs/components/ui/card.md +4 -0
  251. package/docs/components/ui/data-table-body.md +13 -0
  252. package/docs/components/ui/data-table-bulk-actions.md +13 -0
  253. package/docs/components/ui/data-table-card.md +13 -0
  254. package/docs/components/ui/data-table-context.md +13 -0
  255. package/docs/components/ui/data-table-header.md +13 -0
  256. package/docs/components/ui/data-table-pagination.md +13 -0
  257. package/docs/components/ui/select.md +4 -0
  258. package/docs/components/ui/tabs.md +4 -0
  259. package/llms-full.txt +97 -48
  260. package/llms.txt +46 -1
  261. package/package.json +37 -7
  262. package/dist/ui/chip.d.ts +0 -19
  263. package/dist/ui/chip.d.ts.map +0 -1
  264. package/dist/ui/chip.js +0 -14
  265. package/dist/ui/lib/use-ripple.d.ts +0 -14
  266. package/dist/ui/lib/use-ripple.d.ts.map +0 -1
@@ -38,6 +38,12 @@ const s = {
38
38
  * set it explicitly in your own tailwind.config — your config takes precedence.
39
39
  */
40
40
  darkMode: "class",
41
+ safelist: [
42
+ "py-ds-02",
43
+ "py-ds-03",
44
+ "py-ds-05",
45
+ "py-ds-07"
46
+ ],
41
47
  theme: {
42
48
  extend: {
43
49
  // Breakpoints must be static values — CSS custom properties cannot be used
@@ -349,6 +355,14 @@ const s = {
349
355
  "0%": { transform: "scaleX(1)" },
350
356
  "100%": { transform: "scaleX(0)" }
351
357
  },
358
+ "popover-in": {
359
+ from: { opacity: "0", transform: "scale(0.95)" },
360
+ to: { opacity: "1", transform: "scale(1)" }
361
+ },
362
+ "popover-out": {
363
+ from: { opacity: "1", transform: "scale(1)" },
364
+ to: { opacity: "0", transform: "scale(0.95)" }
365
+ },
352
366
  "processing-ants": {
353
367
  to: { "--border-angle": "360deg" }
354
368
  }
@@ -364,6 +378,8 @@ const s = {
364
378
  "skeleton-shimmer": "skeleton-shimmer var(--duration-slow-02) var(--ease-linear) infinite",
365
379
  "caret-blink": "caret-blink 1.25s ease-out infinite",
366
380
  "timer-bar": "timer-bar linear forwards",
381
+ "popover-in": "popover-in 150ms var(--ease-productive-entrance)",
382
+ "popover-out": "popover-out 100ms var(--ease-productive-exit)",
367
383
  "processing-ants-ambient": "processing-ants 3s linear infinite",
368
384
  "processing-ants-working": "processing-ants 2s linear infinite",
369
385
  "processing-ants-urgent": "processing-ants 1s linear infinite"
@@ -386,7 +402,8 @@ const s = {
386
402
  error: "var(--shadow-error)",
387
403
  warning: "var(--shadow-warning)",
388
404
  "ring-sm": "var(--shadow-ring-sm)",
389
- ring: "var(--shadow-ring)"
405
+ ring: "var(--shadow-ring)",
406
+ kbd: "var(--shadow-kbd)"
390
407
  },
391
408
  transitionDuration: {
392
409
  instant: "var(--duration-instant)",
@@ -417,9 +434,6 @@ const s = {
417
434
  popover: "var(--z-popover)",
418
435
  toast: "var(--z-toast)",
419
436
  tooltip: "var(--z-tooltip)"
420
- },
421
- fontVariantNumeric: {
422
- tabular: "tabular-nums"
423
437
  }
424
438
  }
425
439
  },
@@ -430,25 +444,55 @@ const s = {
430
444
  syntax: '"<angle>"',
431
445
  "initial-value": "0deg",
432
446
  inherits: "false"
447
+ },
448
+ // Prevent iOS Safari auto-zoom on inputs with font-size < 16px
449
+ "@media screen and (max-width: 767px)": {
450
+ 'input:not([type="checkbox"]):not([type="radio"]), textarea, select': {
451
+ "font-size": "max(16px, 1em) !important"
452
+ }
433
453
  }
434
454
  }), a({
455
+ ".tabular-nums": { "font-variant-numeric": "tabular-nums" },
456
+ ".touch-target": {
457
+ position: "relative"
458
+ },
459
+ ".touch-target::before": {
460
+ content: '""',
461
+ position: "absolute",
462
+ top: "50%",
463
+ left: "50%",
464
+ transform: "translate(-50%, -50%)",
465
+ "min-width": "44px",
466
+ "min-height": "44px"
467
+ },
435
468
  ".focus-ring": {
436
469
  "&:focus-visible": {
437
470
  outline: "none",
438
- "box-shadow": "0 0 0 2px var(--color-surface-base), 0 0 0 4px var(--color-accent-9)"
471
+ "box-shadow": "0 0 0 var(--border-focus-width) var(--color-surface-base), 0 0 0 calc(var(--border-focus-width) + var(--border-focus-offset)) var(--color-accent-9)"
439
472
  }
440
473
  },
441
474
  ".focus-ring-inset": {
442
475
  "&:focus-visible": {
443
476
  outline: "none",
444
- "box-shadow": "inset 0 0 0 2px var(--color-accent-9)"
477
+ "box-shadow": "inset 0 0 0 var(--border-focus-width) var(--color-accent-9)"
445
478
  }
446
479
  },
447
480
  ".focus-ring-sm": {
448
481
  "&:focus-visible": {
449
482
  outline: "none",
450
- "box-shadow": "0 0 0 1px var(--color-accent-7)"
483
+ "box-shadow": "0 0 0 var(--border-focus-width) var(--color-accent-7)"
451
484
  }
485
+ },
486
+ // Safe area inset utilities for notched/island devices
487
+ ".pt-safe": { "padding-top": "env(safe-area-inset-top, 0px)" },
488
+ ".pb-safe": { "padding-bottom": "env(safe-area-inset-bottom, 0px)" },
489
+ ".pl-safe": { "padding-left": "env(safe-area-inset-left, 0px)" },
490
+ ".pr-safe": { "padding-right": "env(safe-area-inset-right, 0px)" },
491
+ ".p-safe": {
492
+ "padding-top": "env(safe-area-inset-top, 0px)",
493
+ "padding-bottom": "env(safe-area-inset-bottom, 0px)",
494
+ "padding-left": "env(safe-area-inset-left, 0px)",
495
+ "padding-right": "env(safe-area-inset-right, 0px)"
452
496
  }
453
497
  });
454
498
  })
@@ -1 +1 @@
1
- {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/tailwind/preset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,QAAA,MAAM,MAAM,EAAE,OAAO,CAAC,MAAM,CA8a3B,CAAA;AAED,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/tailwind/preset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,QAAA,MAAM,MAAM,EAAE,OAAO,CAAC,MAAM,CAud3B,CAAA;AAED,eAAe,MAAM,CAAA"}
@@ -5,6 +5,12 @@ const s = {
5
5
  * set it explicitly in your own tailwind.config — your config takes precedence.
6
6
  */
7
7
  darkMode: "class",
8
+ safelist: [
9
+ "py-ds-02",
10
+ "py-ds-03",
11
+ "py-ds-05",
12
+ "py-ds-07"
13
+ ],
8
14
  theme: {
9
15
  extend: {
10
16
  // Breakpoints must be static values — CSS custom properties cannot be used
@@ -316,6 +322,14 @@ const s = {
316
322
  "0%": { transform: "scaleX(1)" },
317
323
  "100%": { transform: "scaleX(0)" }
318
324
  },
325
+ "popover-in": {
326
+ from: { opacity: "0", transform: "scale(0.95)" },
327
+ to: { opacity: "1", transform: "scale(1)" }
328
+ },
329
+ "popover-out": {
330
+ from: { opacity: "1", transform: "scale(1)" },
331
+ to: { opacity: "0", transform: "scale(0.95)" }
332
+ },
319
333
  "processing-ants": {
320
334
  to: { "--border-angle": "360deg" }
321
335
  }
@@ -331,6 +345,8 @@ const s = {
331
345
  "skeleton-shimmer": "skeleton-shimmer var(--duration-slow-02) var(--ease-linear) infinite",
332
346
  "caret-blink": "caret-blink 1.25s ease-out infinite",
333
347
  "timer-bar": "timer-bar linear forwards",
348
+ "popover-in": "popover-in 150ms var(--ease-productive-entrance)",
349
+ "popover-out": "popover-out 100ms var(--ease-productive-exit)",
334
350
  "processing-ants-ambient": "processing-ants 3s linear infinite",
335
351
  "processing-ants-working": "processing-ants 2s linear infinite",
336
352
  "processing-ants-urgent": "processing-ants 1s linear infinite"
@@ -353,7 +369,8 @@ const s = {
353
369
  error: "var(--shadow-error)",
354
370
  warning: "var(--shadow-warning)",
355
371
  "ring-sm": "var(--shadow-ring-sm)",
356
- ring: "var(--shadow-ring)"
372
+ ring: "var(--shadow-ring)",
373
+ kbd: "var(--shadow-kbd)"
357
374
  },
358
375
  transitionDuration: {
359
376
  instant: "var(--duration-instant)",
@@ -384,9 +401,6 @@ const s = {
384
401
  popover: "var(--z-popover)",
385
402
  toast: "var(--z-toast)",
386
403
  tooltip: "var(--z-tooltip)"
387
- },
388
- fontVariantNumeric: {
389
- tabular: "tabular-nums"
390
404
  }
391
405
  }
392
406
  },
@@ -397,25 +411,55 @@ const s = {
397
411
  syntax: '"<angle>"',
398
412
  "initial-value": "0deg",
399
413
  inherits: "false"
414
+ },
415
+ // Prevent iOS Safari auto-zoom on inputs with font-size < 16px
416
+ "@media screen and (max-width: 767px)": {
417
+ 'input:not([type="checkbox"]):not([type="radio"]), textarea, select': {
418
+ "font-size": "max(16px, 1em) !important"
419
+ }
400
420
  }
401
421
  }), a({
422
+ ".tabular-nums": { "font-variant-numeric": "tabular-nums" },
423
+ ".touch-target": {
424
+ position: "relative"
425
+ },
426
+ ".touch-target::before": {
427
+ content: '""',
428
+ position: "absolute",
429
+ top: "50%",
430
+ left: "50%",
431
+ transform: "translate(-50%, -50%)",
432
+ "min-width": "44px",
433
+ "min-height": "44px"
434
+ },
402
435
  ".focus-ring": {
403
436
  "&:focus-visible": {
404
437
  outline: "none",
405
- "box-shadow": "0 0 0 2px var(--color-surface-base), 0 0 0 4px var(--color-accent-9)"
438
+ "box-shadow": "0 0 0 var(--border-focus-width) var(--color-surface-base), 0 0 0 calc(var(--border-focus-width) + var(--border-focus-offset)) var(--color-accent-9)"
406
439
  }
407
440
  },
408
441
  ".focus-ring-inset": {
409
442
  "&:focus-visible": {
410
443
  outline: "none",
411
- "box-shadow": "inset 0 0 0 2px var(--color-accent-9)"
444
+ "box-shadow": "inset 0 0 0 var(--border-focus-width) var(--color-accent-9)"
412
445
  }
413
446
  },
414
447
  ".focus-ring-sm": {
415
448
  "&:focus-visible": {
416
449
  outline: "none",
417
- "box-shadow": "0 0 0 1px var(--color-accent-7)"
450
+ "box-shadow": "0 0 0 var(--border-focus-width) var(--color-accent-7)"
418
451
  }
452
+ },
453
+ // Safe area inset utilities for notched/island devices
454
+ ".pt-safe": { "padding-top": "env(safe-area-inset-top, 0px)" },
455
+ ".pb-safe": { "padding-bottom": "env(safe-area-inset-bottom, 0px)" },
456
+ ".pl-safe": { "padding-left": "env(safe-area-inset-left, 0px)" },
457
+ ".pr-safe": { "padding-right": "env(safe-area-inset-right, 0px)" },
458
+ ".p-safe": {
459
+ "padding-top": "env(safe-area-inset-top, 0px)",
460
+ "padding-bottom": "env(safe-area-inset-bottom, 0px)",
461
+ "padding-left": "env(safe-area-inset-left, 0px)",
462
+ "padding-right": "env(safe-area-inset-right, 0px)"
419
463
  }
420
464
  });
421
465
  })
@@ -91,7 +91,9 @@
91
91
  --green-11: oklch(0.43 0.1032 145);
92
92
  --green-12: oklch(0.32 0.0589 145);
93
93
 
94
- /* ── Yellow — H:85 ── */
94
+ /* ── Yellow — H:85 ── RESERVED — not referenced by semantic tokens.
95
+ Kept for consumer apps that may use primitives directly.
96
+ Warning status uses amber-bright scale instead. */
95
97
  --yellow-1: oklch(0.99 0.0037 85);
96
98
  --yellow-2: oklch(0.97 0.0111 85);
97
99
  --yellow-3: oklch(0.93 0.0258 85);
@@ -112,9 +112,9 @@
112
112
  --color-surface-fg: var(--neutral-12);
113
113
  --color-surface-fg-muted: var(--neutral-11);
114
114
  --color-surface-fg-subtle: var(--neutral-8);
115
- --color-surface-border: var(--neutral-5);
116
- --color-surface-border-strong: var(--neutral-6);
117
- --color-surface-border-subtle: var(--neutral-4);
115
+ --color-surface-border: var(--neutral-6); /* was neutral-5; bumped for WCAG 1.4.11 non-text contrast */
116
+ --color-surface-border-strong: var(--neutral-7); /* was neutral-6 */
117
+ --color-surface-border-subtle: var(--neutral-5); /* was neutral-4 */
118
118
  --color-backdrop: oklch(0 0 0 / 0.4);
119
119
 
120
120
  /* ═══════════════════════════════════════════════════════════
@@ -292,6 +292,9 @@
292
292
  /* Shadow transition */
293
293
  --shadow-transition: box-shadow var(--duration-fast-02) var(--ease-productive-standard);
294
294
 
295
+ /* Keyboard shortcut badge shadow */
296
+ --shadow-kbd: inset 0 -1px 0 oklch(0 0 0 / 0.1);
297
+
295
298
  /* Shadow primitives (internal) */
296
299
  --shadow-xs:
297
300
  0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
@@ -417,12 +420,12 @@
417
420
  .dark {
418
421
  color-scheme: dark;
419
422
 
420
- /* Foreground on accent flips in dark mode */
421
- --color-accent-fg: var(--neutral-12);
422
- --color-secondary-fg: var(--neutral-12);
423
- --color-error-fg: var(--neutral-12);
424
- --color-success-fg: var(--neutral-12);
425
- --color-info-fg: var(--neutral-12);
423
+ /* Foreground on solid accent/status backgrounds pure white on brand colors */
424
+ --color-accent-fg: var(--neutral-0);
425
+ --color-secondary-fg: var(--neutral-0);
426
+ --color-error-fg: var(--neutral-0);
427
+ --color-success-fg: var(--neutral-0);
428
+ --color-info-fg: var(--neutral-0);
426
429
 
427
430
  /* Warning: amber-bright dark ramp for dark mode */
428
431
  --color-warning-2: var(--amber-bright-2);
@@ -433,7 +436,7 @@
433
436
  --color-warning-9: var(--amber-bright-9);
434
437
  --color-warning-10: var(--amber-bright-10);
435
438
  --color-warning-11: var(--amber-bright-11);
436
- --color-warning-fg: var(--neutral-12);
439
+ --color-warning-fg: var(--neutral-0);
437
440
 
438
441
  /* Dark mode borders need lower contrast — bright borders look harsh.
439
442
  Drop to step 3/4 for subtle resting borders that don't overpower surfaces */
@@ -441,10 +444,10 @@
441
444
  --color-surface-base: var(--neutral-1); /* 0.11L — dark page */
442
445
  --color-surface-raised: var(--neutral-2); /* 0.17L — lighter cards */
443
446
 
444
- --color-surface-border: var(--neutral-3);
445
- --color-surface-border-strong: var(--neutral-4);
447
+ --color-surface-border: var(--neutral-4); /* was neutral-3; bumped for contrast */
448
+ --color-surface-border-strong: var(--neutral-5); /* was neutral-4 */
446
449
  --color-surface-overlay: oklch(0.13 0.0002 350);
447
- --color-surface-border-subtle: var(--neutral-2);
450
+ --color-surface-border-subtle: var(--neutral-3); /* was neutral-2 = same as raised = invisible (1:1) */
448
451
  --color-backdrop: oklch(0 0 0 / 0.6);
449
452
 
450
453
  /* Overlay */
@@ -39,7 +39,17 @@
39
39
  font-display: swap;
40
40
  }
41
41
 
42
- /* ── Title Scale (T1–T7) ───────────────────────────────────────── */
42
+ /* ── DEPRECATED Title Scale (T1–T7) ────────────────────────────────
43
+ * @deprecated Use typography-semantic.css tokens instead:
44
+ * T1-Reg → --typo-heading-2xl (60px)
45
+ * T2-Reg → --typo-heading-xl (48px)
46
+ * T3-Reg → --typo-heading-lg (36px)
47
+ * T4-Reg → --typo-heading-md (32px)
48
+ * T5-Reg → --typo-heading-sm (24px)
49
+ * T6-Reg → --typo-heading-xs (20px)
50
+ * T7-Reg → --typo-heading-xs (20px, tighter)
51
+ * These classes will be removed in v1.0.
52
+ * ──────────────────────────────────────────────────────────────── */
43
53
 
44
54
  .T1-Reg {
45
55
  font-family: inherit;
@@ -103,7 +113,15 @@
103
113
  letter-spacing: -0.48px;
104
114
  }
105
115
 
106
- /* ── Body Scale (B1–B8) ────────────────────────────────────────── */
116
+ /* ── DEPRECATED Body Scale (B1–B8) ─────────────────────────────────
117
+ * @deprecated Use typography-semantic.css tokens instead:
118
+ * B1-Reg → --typo-body-lg (16px)
119
+ * B2-Reg → --typo-body-md (14px)
120
+ * B3-Reg → --typo-body-sm (12px)
121
+ * B4-Reg → --typo-body-xs (10px)
122
+ * B5-B8 → Use body-lg/md/sm/xs with weight overrides
123
+ * These classes will be removed in v1.0.
124
+ * ──────────────────────────────────────────────────────────────── */
107
125
 
108
126
  .B1-Reg {
109
127
  font-family: inherit;
@@ -184,7 +202,15 @@
184
202
  letter-spacing: -0.32px;
185
203
  }
186
204
 
187
- /* ── Label Scale (L1–L6) ───────────────────────────────────────── */
205
+ /* ── DEPRECATED Label Scale (L1–L6) ────────────────────────────────
206
+ * @deprecated Use typography-semantic.css tokens instead:
207
+ * L1 → --typo-label-lg (16px)
208
+ * L2 → --typo-label-md (14px)
209
+ * L3 → --typo-label-sm (12px)
210
+ * L4 → --typo-label-xs (10px)
211
+ * L5-L6 → Use label-sm/xs with weight overrides
212
+ * These classes will be removed in v1.0.
213
+ * ──────────────────────────────────────────────────────────────── */
188
214
 
189
215
  .L1 {
190
216
  font-family: inherit;
@@ -236,7 +262,10 @@
236
262
  text-transform: uppercase;
237
263
  }
238
264
 
239
- /* ── Paragraph Scale (P1–P7) ───────────────────────────────────── */
265
+ /* ── DEPRECATED Paragraph Scale (P1–P7) ────────────────────────────
266
+ * @deprecated Use typography-semantic.css --typo-body-* tokens instead.
267
+ * These classes will be removed in v1.0.
268
+ * ──────────────────────────────────────────────────────────────── */
240
269
  /* NOTE: P2 (0.36px tracking) and B5-Reg (0.32px tracking) are near-identical
241
270
  at 16px/140%. P2 is for paragraph blocks, B5-Reg for inline body text. */
242
271
 
@@ -4,6 +4,7 @@ import * as React from 'react';
4
4
  declare const alertVariants: (props?: ({
5
5
  variant?: "outline" | "filled" | "subtle" | null | undefined;
6
6
  color?: "success" | "error" | "info" | "warning" | "neutral" | null | undefined;
7
+ size?: "sm" | "md" | "lg" | null | undefined;
7
8
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
8
9
  /**
9
10
  * Props for Alert — an inline message block with a colored icon, optional title, optional body,
@@ -1 +1 @@
1
- {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/ui/alert.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAMjE,QAAA,MAAM,aAAa;;;8EAuClB,CAAA;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,EACzD,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,QAAA,MAAM,KAAK,mFA0CV,CAAA;AAGD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/ui/alert.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAMjE,QAAA,MAAM,aAAa;;;;8EA4ClB,CAAA;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,EACzD,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,QAAA,MAAM,KAAK,mFA+CV,CAAA;AAGD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"}
package/dist/ui/alert.js CHANGED
@@ -1,14 +1,14 @@
1
1
  "use client";
2
- import { jsx as e, jsxs as n } from "react/jsx-runtime";
3
- import { IconInfoCircle as o, IconAlertCircle as x, IconAlertTriangle as p, IconCircleCheck as N, IconX as h } from "@tabler/icons-react";
4
- import * as r from "react";
5
- import { a as w } from "../_chunks/vendor-utils.js";
6
- import { cn as y } from "./lib/utils.js";
7
- import { springs as I, motionProps as A } from "./lib/motion.js";
8
- import { Icon as c } from "./icon.js";
9
- import { A as C, m as k } from "../_chunks/framer.js";
10
- const V = w(
11
- "relative flex gap-ds-04 rounded-ds-lg border p-ds-05",
2
+ import { jsx as r, jsxs as c } from "react/jsx-runtime";
3
+ import { IconInfoCircle as i, IconAlertCircle as y, IconAlertTriangle as C, IconCircleCheck as A, IconX as k } from "@tabler/icons-react";
4
+ import * as s from "react";
5
+ import { a as V } from "../_chunks/vendor-utils.js";
6
+ import { cn as t } from "./lib/utils.js";
7
+ import { springs as S, motionProps as j } from "./lib/motion.js";
8
+ import { Icon as l } from "./icon.js";
9
+ import { A as R, m as E } from "../_chunks/framer.js";
10
+ const P = V(
11
+ "relative flex rounded-ds-lg border",
12
12
  {
13
13
  variants: {
14
14
  variant: {
@@ -22,6 +22,11 @@ const V = w(
22
22
  warning: "",
23
23
  error: "",
24
24
  neutral: ""
25
+ },
26
+ size: {
27
+ sm: "gap-ds-03 p-ds-03",
28
+ md: "gap-ds-04 p-ds-05",
29
+ lg: "gap-ds-05 p-ds-07"
25
30
  }
26
31
  },
27
32
  compoundVariants: [
@@ -44,44 +49,44 @@ const V = w(
44
49
  { variant: "outline", color: "error", className: "bg-transparent border-error-7 text-error-11" },
45
50
  { variant: "outline", color: "neutral", className: "bg-transparent border-surface-border-strong text-surface-fg [&>svg]:text-surface-fg-muted" }
46
51
  ],
47
- defaultVariants: { variant: "subtle", color: "info" }
52
+ defaultVariants: { variant: "subtle", color: "info", size: "md" }
48
53
  }
49
- ), j = {
50
- info: o,
51
- success: N,
52
- warning: p,
53
- error: x,
54
- neutral: o
55
- }, R = r.forwardRef(
56
- ({ className: i, variant: l = "subtle", color: t = "info", title: s, onDismiss: a, children: f, ...d }, u) => {
57
- const m = j[t ?? "info"], [g, b] = r.useState(!0), v = r.useCallback(() => {
58
- b(!1);
59
- }, []);
60
- return /* @__PURE__ */ e(C, { onExitComplete: a, children: g && /* @__PURE__ */ n(
61
- k.div,
54
+ ), T = {
55
+ info: i,
56
+ success: A,
57
+ warning: C,
58
+ error: y,
59
+ neutral: i
60
+ }, D = s.forwardRef(
61
+ ({ className: d, variant: m = "subtle", color: a = "info", size: e = "md", title: n, onDismiss: o, children: f, ...g }, u) => {
62
+ const b = T[a ?? "info"], [x, v] = s.useState(!0), p = s.useCallback(() => {
63
+ v(!1);
64
+ }, []), N = e === "sm" ? "sm" : e === "lg" ? "lg" : "md", h = e === "sm" ? "xs" : "sm", w = e === "sm" ? "text-ds-xs" : "text-ds-md", I = e === "sm" ? "text-ds-sm" : e === "lg" ? "text-ds-lg" : "text-ds-md";
65
+ return /* @__PURE__ */ r(R, { onExitComplete: o, children: x && /* @__PURE__ */ c(
66
+ E.div,
62
67
  {
63
68
  ref: u,
64
69
  initial: { opacity: 1, y: 0 },
65
70
  animate: { opacity: 1, y: 0 },
66
71
  exit: { opacity: 0, y: -8 },
67
- transition: I.snappy,
68
- className: y(V({ variant: l, color: t }), i),
72
+ transition: S.snappy,
73
+ className: t(P({ variant: m, color: a, size: e }), d),
69
74
  role: "alert",
70
- ...A(d),
75
+ ...j(g),
71
76
  children: [
72
- /* @__PURE__ */ e(c, { icon: m, size: "md", className: "mt-ds-01 shrink-0" }),
73
- /* @__PURE__ */ n("div", { className: "flex-1 min-w-0", children: [
74
- s && /* @__PURE__ */ e("p", { className: "text-ds-md font-semibold mb-ds-01", children: s }),
75
- /* @__PURE__ */ e("div", { className: "text-ds-md text-surface-fg-muted", children: f })
77
+ /* @__PURE__ */ r(l, { icon: b, size: N, className: "mt-ds-01 shrink-0" }),
78
+ /* @__PURE__ */ c("div", { className: "flex-1 min-w-0", children: [
79
+ n && /* @__PURE__ */ r("p", { className: t(I, "font-semibold mb-ds-01"), children: n }),
80
+ /* @__PURE__ */ r("div", { className: t(w, "text-surface-fg-muted"), children: f })
76
81
  ] }),
77
- a && /* @__PURE__ */ e(
82
+ o && /* @__PURE__ */ r(
78
83
  "button",
79
84
  {
80
85
  type: "button",
81
- onClick: v,
86
+ onClick: p,
82
87
  className: "shrink-0 min-h-ds-xs min-w-ds-xs flex items-center justify-center rounded-ds-sm text-surface-fg-subtle transition-colors duration-fast-01 ease-productive-standard hover:text-surface-fg-muted hover:bg-surface-raised-hover active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-9",
83
88
  "aria-label": "Dismiss",
84
- children: /* @__PURE__ */ e(c, { icon: h, size: "sm" })
89
+ children: /* @__PURE__ */ r(l, { icon: k, size: h })
85
90
  }
86
91
  )
87
92
  ]
@@ -89,8 +94,8 @@ const V = w(
89
94
  ) });
90
95
  }
91
96
  );
92
- R.displayName = "Alert";
97
+ D.displayName = "Alert";
93
98
  export {
94
- R as Alert,
95
- V as alertVariants
99
+ D as Alert,
100
+ P as alertVariants
96
101
  };
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../src/ui/autocomplete.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAe9B,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,KAAK,iBAAiB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAC9D,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,KAAK,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACjC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,QAAA,MAAM,YAAY;aAVP,kBAAkB,EAAE;YACrB,kBAAkB,GAAG,IAAI;oBACjB,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI;kBACtC,MAAM;gBACR,MAAM;eACP,OAAO;gBACN,MAAM;SACb,MAAM;0CA8LZ,CAAA;AAGD,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,CAAA"}
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../src/ui/autocomplete.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAe9B,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,KAAK,iBAAiB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAC9D,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,KAAK,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACjC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,QAAA,MAAM,YAAY;aAVP,kBAAkB,EAAE;YACrB,kBAAkB,GAAG,IAAI;oBACjB,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI;kBACtC,MAAM;gBACR,MAAM;eACP,OAAO;gBACN,MAAM;SACb,MAAM;0CAiMZ,CAAA;AAGD,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,CAAA"}