@donotdev/components 0.0.12 → 0.0.14

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 (179) hide show
  1. package/dist/advanced/Bento/Bento.d.ts +0 -9
  2. package/dist/advanced/Bento/Bento.d.ts.map +1 -1
  3. package/dist/advanced/Bento/Bento.js +10 -0
  4. package/dist/advanced/Code/Code.d.ts +1 -9
  5. package/dist/advanced/Code/Code.d.ts.map +1 -1
  6. package/dist/advanced/Code/CodeContent.d.ts.map +1 -1
  7. package/dist/advanced/Code/CodeContent.js +5 -1
  8. package/dist/advanced/Code/CodeSkeleton.d.ts.map +1 -1
  9. package/dist/advanced/Code/CodeSkeleton.js +2 -1
  10. package/dist/advanced/JsonViewer/JsonViewer.d.ts.map +1 -1
  11. package/dist/advanced/JsonViewer/JsonViewer.js +2 -1
  12. package/dist/atomic/Accordion/index.d.ts.map +1 -1
  13. package/dist/atomic/Accordion/index.js +1 -1
  14. package/dist/atomic/ActionButton/index.d.ts.map +1 -1
  15. package/dist/atomic/AlertDialog/AlertDialogPrimitive.d.ts.map +1 -1
  16. package/dist/atomic/AlertDialog/index.js +2 -2
  17. package/dist/atomic/Avatar/AvatarPrimitive.d.ts +1 -1
  18. package/dist/atomic/Avatar/AvatarPrimitive.d.ts.map +1 -1
  19. package/dist/atomic/Avatar/AvatarPrimitive.js +0 -1
  20. package/dist/atomic/Blockquote/index.d.ts +1 -9
  21. package/dist/atomic/Blockquote/index.d.ts.map +1 -1
  22. package/dist/atomic/Button/index.d.ts +18 -1
  23. package/dist/atomic/Button/index.d.ts.map +1 -1
  24. package/dist/atomic/Button/index.js +15 -5
  25. package/dist/atomic/Calendar/index.d.ts.map +1 -1
  26. package/dist/atomic/Calendar/index.js +3 -2
  27. package/dist/atomic/Checkbox/CheckboxPrimitive.d.ts +1 -1
  28. package/dist/atomic/Checkbox/CheckboxPrimitive.d.ts.map +1 -1
  29. package/dist/atomic/Checkbox/CheckboxPrimitive.js +0 -1
  30. package/dist/atomic/Checkbox/index.d.ts +17 -3
  31. package/dist/atomic/Checkbox/index.d.ts.map +1 -1
  32. package/dist/atomic/Checkbox/index.js +22 -6
  33. package/dist/atomic/Collapsible/CollapsiblePrimitive.d.ts +1 -1
  34. package/dist/atomic/Collapsible/CollapsiblePrimitive.d.ts.map +1 -1
  35. package/dist/atomic/Collapsible/CollapsiblePrimitive.js +0 -1
  36. package/dist/atomic/Collapsible/index.d.ts.map +1 -1
  37. package/dist/atomic/Collapsible/index.js +6 -2
  38. package/dist/atomic/Combobox/index.d.ts.map +1 -1
  39. package/dist/atomic/Combobox/index.js +4 -4
  40. package/dist/atomic/CommandDialog/index.d.ts.map +1 -1
  41. package/dist/atomic/CommandDialog/index.js +1 -1
  42. package/dist/atomic/ContextMenu/ContextMenuPrimitive.d.ts +1 -1
  43. package/dist/atomic/ContextMenu/ContextMenuPrimitive.d.ts.map +1 -1
  44. package/dist/atomic/ContextMenu/ContextMenuPrimitive.js +0 -1
  45. package/dist/atomic/ContextMenu/index.d.ts.map +1 -1
  46. package/dist/atomic/Dialog/DialogPrimitive.d.ts.map +1 -1
  47. package/dist/atomic/Dialog/index.d.ts.map +1 -1
  48. package/dist/atomic/Dialog/index.js +1 -1
  49. package/dist/atomic/DropdownMenu/index.d.ts.map +1 -1
  50. package/dist/atomic/DropdownMenu/index.js +17 -3
  51. package/dist/atomic/DualCard/index.d.ts +10 -2
  52. package/dist/atomic/DualCard/index.d.ts.map +1 -1
  53. package/dist/atomic/DualCard/index.js +3 -3
  54. package/dist/atomic/FeatureFallback/index.js +1 -1
  55. package/dist/atomic/HoverCard/HoverCardPrimitive.d.ts +1 -1
  56. package/dist/atomic/HoverCard/HoverCardPrimitive.d.ts.map +1 -1
  57. package/dist/atomic/HoverCard/HoverCardPrimitive.js +0 -1
  58. package/dist/atomic/HoverCard/index.js +1 -1
  59. package/dist/atomic/Icons/Partner/providerIcons.d.ts.map +1 -1
  60. package/dist/atomic/Icons/Partner/providerIcons.js +17 -1
  61. package/dist/atomic/Input/index.d.ts +6 -1
  62. package/dist/atomic/Input/index.d.ts.map +1 -1
  63. package/dist/atomic/Input/index.js +17 -5
  64. package/dist/atomic/Label/FloatingLabel.d.ts +26 -10
  65. package/dist/atomic/Label/FloatingLabel.d.ts.map +1 -1
  66. package/dist/atomic/Label/FloatingLabel.js +14 -14
  67. package/dist/atomic/Label/index.d.ts +1 -1
  68. package/dist/atomic/Label/index.d.ts.map +1 -1
  69. package/dist/atomic/Label/index.js +1 -1
  70. package/dist/atomic/List/index.d.ts +8 -0
  71. package/dist/atomic/List/index.d.ts.map +1 -1
  72. package/dist/atomic/List/index.js +1 -1
  73. package/dist/atomic/NavigationMenu/NavigationMenuPrimitive.d.ts +1 -1
  74. package/dist/atomic/NavigationMenu/NavigationMenuPrimitive.d.ts.map +1 -1
  75. package/dist/atomic/NavigationMenu/NavigationMenuPrimitive.js +0 -1
  76. package/dist/atomic/NavigationMenu/index.d.ts +1 -1
  77. package/dist/atomic/NavigationMenu/index.d.ts.map +1 -1
  78. package/dist/atomic/NavigationMenu/index.js +10 -1
  79. package/dist/atomic/Pagination/index.d.ts +7 -29
  80. package/dist/atomic/Pagination/index.d.ts.map +1 -1
  81. package/dist/atomic/Pagination/index.js +101 -71
  82. package/dist/atomic/PasswordInput/index.d.ts +1 -1
  83. package/dist/atomic/PasswordInput/index.d.ts.map +1 -1
  84. package/dist/atomic/PasswordInput/index.js +5 -1
  85. package/dist/atomic/Popover/index.d.ts +0 -8
  86. package/dist/atomic/Popover/index.d.ts.map +1 -1
  87. package/dist/atomic/Popover/index.js +1 -1
  88. package/dist/atomic/PortalButton/index.d.ts +8 -0
  89. package/dist/atomic/PortalButton/index.d.ts.map +1 -1
  90. package/dist/atomic/PortalButton/index.js +1 -1
  91. package/dist/atomic/Progress/ProgressPrimitive.d.ts +1 -1
  92. package/dist/atomic/Progress/ProgressPrimitive.d.ts.map +1 -1
  93. package/dist/atomic/Progress/ProgressPrimitive.js +0 -1
  94. package/dist/atomic/Progress/index.d.ts +8 -0
  95. package/dist/atomic/Progress/index.d.ts.map +1 -1
  96. package/dist/atomic/Progress/index.js +1 -1
  97. package/dist/atomic/RadioGroup/index.d.ts +0 -9
  98. package/dist/atomic/RadioGroup/index.d.ts.map +1 -1
  99. package/dist/atomic/RadioGroup/index.js +2 -2
  100. package/dist/atomic/RangeInput/index.d.ts +45 -0
  101. package/dist/atomic/RangeInput/index.d.ts.map +1 -0
  102. package/dist/atomic/RangeInput/index.js +63 -0
  103. package/dist/atomic/ScrollArea/ScrollAreaPrimitive.d.ts +1 -1
  104. package/dist/atomic/ScrollArea/ScrollAreaPrimitive.d.ts.map +1 -1
  105. package/dist/atomic/ScrollArea/ScrollAreaPrimitive.js +0 -1
  106. package/dist/atomic/Section/index.d.ts +0 -32
  107. package/dist/atomic/Section/index.d.ts.map +1 -1
  108. package/dist/atomic/Section/index.js +4 -4
  109. package/dist/atomic/Select/SelectPrimitive.d.ts +1 -1
  110. package/dist/atomic/Select/SelectPrimitive.d.ts.map +1 -1
  111. package/dist/atomic/Select/SelectPrimitive.js +0 -1
  112. package/dist/atomic/Select/index.d.ts.map +1 -1
  113. package/dist/atomic/Select/index.js +2 -1
  114. package/dist/atomic/Separator/SeparatorPrimitive.d.ts +1 -1
  115. package/dist/atomic/Separator/SeparatorPrimitive.d.ts.map +1 -1
  116. package/dist/atomic/Separator/SeparatorPrimitive.js +0 -1
  117. package/dist/atomic/Separator/index.d.ts +1 -1
  118. package/dist/atomic/Separator/index.d.ts.map +1 -1
  119. package/dist/atomic/Separator/index.js +0 -1
  120. package/dist/atomic/Sheet/index.d.ts +3 -1
  121. package/dist/atomic/Sheet/index.d.ts.map +1 -1
  122. package/dist/atomic/Sheet/index.js +3 -3
  123. package/dist/atomic/Slider/SliderPrimitive.d.ts +1 -1
  124. package/dist/atomic/Slider/SliderPrimitive.d.ts.map +1 -1
  125. package/dist/atomic/Slider/SliderPrimitive.js +0 -1
  126. package/dist/atomic/Slider/index.d.ts +3 -2
  127. package/dist/atomic/Slider/index.d.ts.map +1 -1
  128. package/dist/atomic/Slider/index.js +9 -7
  129. package/dist/atomic/Slot/index.d.ts.map +1 -1
  130. package/dist/atomic/Stepper/index.js +1 -1
  131. package/dist/atomic/Switch/SwitchPrimitive.d.ts +1 -1
  132. package/dist/atomic/Switch/SwitchPrimitive.d.ts.map +1 -1
  133. package/dist/atomic/Switch/SwitchPrimitive.js +0 -1
  134. package/dist/atomic/Switch/index.d.ts +3 -2
  135. package/dist/atomic/Switch/index.d.ts.map +1 -1
  136. package/dist/atomic/Switch/index.js +2 -3
  137. package/dist/atomic/Table/index.d.ts +20 -5
  138. package/dist/atomic/Table/index.d.ts.map +1 -1
  139. package/dist/atomic/Table/index.js +92 -22
  140. package/dist/atomic/Tabs/TabsPrimitive.d.ts +1 -1
  141. package/dist/atomic/Tabs/TabsPrimitive.d.ts.map +1 -1
  142. package/dist/atomic/Tabs/TabsPrimitive.js +0 -1
  143. package/dist/atomic/Tabs/index.js +1 -1
  144. package/dist/atomic/Tag/index.d.ts +8 -0
  145. package/dist/atomic/Tag/index.d.ts.map +1 -1
  146. package/dist/atomic/Tag/index.js +1 -1
  147. package/dist/atomic/Text/index.js +1 -1
  148. package/dist/atomic/Textarea/index.d.ts +4 -0
  149. package/dist/atomic/Textarea/index.d.ts.map +1 -1
  150. package/dist/atomic/Textarea/index.js +3 -3
  151. package/dist/atomic/Toaster/Toast.types.d.ts +17 -0
  152. package/dist/atomic/Toaster/Toast.types.d.ts.map +1 -0
  153. package/dist/atomic/Toaster/Toast.types.js +2 -0
  154. package/dist/atomic/Toaster/ToastPrimitive.d.ts +1 -1
  155. package/dist/atomic/Toaster/ToastPrimitive.d.ts.map +1 -1
  156. package/dist/atomic/ToggleGroup/ToggleGroupPrimitive.d.ts +1 -1
  157. package/dist/atomic/ToggleGroup/ToggleGroupPrimitive.d.ts.map +1 -1
  158. package/dist/atomic/Tooltip/TooltipPrimitive.d.ts +1 -1
  159. package/dist/atomic/Tooltip/TooltipPrimitive.d.ts.map +1 -1
  160. package/dist/atomic/Tooltip/TooltipPrimitive.js +0 -1
  161. package/dist/atomic/Tooltip/index.d.ts +6 -12
  162. package/dist/atomic/Tooltip/index.d.ts.map +1 -1
  163. package/dist/atomic/Tooltip/index.js +13 -23
  164. package/dist/atomic/VideoPlayer/index.d.ts +11 -1
  165. package/dist/atomic/VideoPlayer/index.d.ts.map +1 -1
  166. package/dist/atomic/VideoPlayer/index.js +6 -8
  167. package/dist/atomic/VisuallyHidden/VisuallyHiddenPrimitive.d.ts.map +1 -1
  168. package/dist/atomic/index.d.ts +2 -0
  169. package/dist/atomic/index.d.ts.map +1 -1
  170. package/dist/atomic/index.js +1 -0
  171. package/dist/hooks/index.d.ts +2 -1
  172. package/dist/hooks/index.d.ts.map +1 -1
  173. package/dist/hooks/useToast.d.ts +2 -33
  174. package/dist/hooks/useToast.d.ts.map +1 -1
  175. package/dist/hooks/useToast.js +1 -0
  176. package/dist/index.js +4 -4
  177. package/dist/styles/index.css +489 -95
  178. package/dist/utils/variants.d.ts.map +1 -1
  179. package/package.json +1 -1
@@ -2201,6 +2201,20 @@ em {
2201
2201
  padding-inline-start: var(--gap-md);
2202
2202
  }
2203
2203
 
2204
+ /* Bare mode - no visual chrome, used inside FloatingLabel or custom wrappers */
2205
+
2206
+ [data-bare] {
2207
+ border: none !important;
2208
+ box-shadow: none !important;
2209
+ background: transparent !important;
2210
+ }
2211
+
2212
+ [data-bare]:hover,[data-bare]:focus,[data-bare]:focus-visible {
2213
+ border-color: transparent !important;
2214
+ box-shadow: none !important;
2215
+ outline: none !important;
2216
+ }
2217
+
2204
2218
  /* Password strength bar height override */
2205
2219
 
2206
2220
  .dndev-password-strength-bar {
@@ -2716,6 +2730,34 @@ em {
2716
2730
 
2717
2731
  /* Label styling moved to patterns.css (.dndev-interactive-label) */
2718
2732
 
2733
+ /* Loading state */
2734
+
2735
+ [data-loading] {
2736
+ cursor: wait;
2737
+ pointer-events: none;
2738
+ }
2739
+
2740
+ /* Button spinner - inherits size from button font-size */
2741
+
2742
+ .dndev-button-spinner {
2743
+ flex-shrink: 0;
2744
+ }
2745
+
2746
+ /* Progress ring for upload percentage */
2747
+
2748
+ .dndev-button-progress {
2749
+ display: inline-flex;
2750
+ align-items: center;
2751
+ justify-content: center;
2752
+ flex-shrink: 0;
2753
+ }
2754
+
2755
+ .dndev-progress-ring {
2756
+ width: 1em;
2757
+ height: 1em;
2758
+ transform: rotate(-90deg);
2759
+ }
2760
+
2719
2761
  /* packages/components/src/atomic/Calendar/Calendar.css */
2720
2762
 
2721
2763
  /**
@@ -3274,6 +3316,7 @@ em {
3274
3316
 
3275
3317
  .dndev-collapsible-content[data-state='open'] {
3276
3318
  animation: slideDown var(--dur-normal) var(--ease-in-out);
3319
+ overflow: visible; /* Allow dropdowns/overlays to escape when open */
3277
3320
  }
3278
3321
 
3279
3322
  .dndev-collapsible-content[data-state='closed'] {
@@ -4406,6 +4449,18 @@ em {
4406
4449
 
4407
4450
  /* packages/components/src/atomic/Input/Input.css */
4408
4451
 
4452
+ /* Hide number input spinners - cleaner UI for price/range inputs */
4453
+
4454
+ input[type='number']::-webkit-inner-spin-button,
4455
+ input[type='number']::-webkit-outer-spin-button {
4456
+ -webkit-appearance: none;
4457
+ margin: 0;
4458
+ }
4459
+
4460
+ input[type='number'] {
4461
+ -moz-appearance: textfield;
4462
+ }
4463
+
4409
4464
  /* Input with leading icon (search, etc.) */
4410
4465
 
4411
4466
  .dndev-input-with-leading-icon {
@@ -4604,47 +4659,79 @@ em {
4604
4659
  margin-inline-start: var(--gap-sm);
4605
4660
  }
4606
4661
 
4607
- /* Floating Label - positioned absolutely at top of input fields */
4662
+ /* Floating Fieldset - native border-cutting via legend */
4608
4663
 
4609
- .dndev-floating-label {
4610
- position: absolute;
4611
- inset-inline-start: var(--gap-md);
4612
- top: calc(-1 * var(--font-size-xs) / 2 - 1px);
4664
+ .dndev-floating-fieldset {
4665
+ position: relative;
4666
+ border: var(--border-hairline) solid var(--line-2);
4667
+ border-radius: var(--radius-interactive);
4668
+ margin: 0;
4669
+ padding: 0;
4670
+ background-color: transparent;
4671
+ transition: all var(--dur-normal) var(--ease-in-out);
4672
+ text-align: start;
4673
+ /* Flex-aware: allow fieldset to shrink in flex containers */
4674
+ min-width: 0;
4675
+ width: 100%;
4676
+ }
4677
+
4678
+ .dndev-floating-fieldset:hover {
4679
+ border-color: var(--ring);
4680
+ }
4681
+
4682
+ .dndev-floating-fieldset:focus-within {
4683
+ border-color: var(--ring);
4684
+ }
4685
+
4686
+ .dndev-floating-fieldset[data-disabled='true'] {
4687
+ opacity: var(--opacity-muted);
4688
+ cursor: not-allowed;
4689
+ }
4690
+
4691
+ /* Legend sits on border - browser natively cuts border */
4692
+
4693
+ .dndev-floating-legend {
4694
+ margin-inline-start: var(--gap-sm);
4695
+ padding: 0 var(--gap-sm);
4613
4696
  font-size: var(--font-size-xs);
4614
4697
  font-weight: 500;
4615
- pointer-events: none;
4616
- z-index: 1;
4617
- background-color: var(--background);
4618
- padding: 0 var(--gap-sm);
4619
4698
  line-height: 1;
4620
4699
  color: var(--foreground);
4700
+ /* Ellipsis by default */
4701
+ max-width: 100%;
4702
+ overflow: hidden;
4703
+ text-overflow: ellipsis;
4704
+ white-space: nowrap;
4621
4705
  }
4622
4706
 
4623
- /* Inherit background when inside floating containers (dropdowns, menus, popovers) */
4707
+ .dndev-floating-legend label {
4708
+ cursor: default;
4709
+ display: inline-flex;
4710
+ align-items: center;
4711
+ gap: var(--gap-tight);
4712
+ }
4624
4713
 
4625
- .dndev-floating .dndev-floating-label,
4626
- .dndev-menu-content .dndev-floating-label,
4627
- [class*='dndev-dropdown'] .dndev-floating-label,
4628
- [class*='dndev-navigation'] .dndev-floating-label {
4629
- background-color: var(--popover);
4630
- color: var(--popover-foreground);
4714
+ .dndev-floating-fieldset[data-disabled='true'] .dndev-floating-legend {
4715
+ color: var(--muted-foreground);
4631
4716
  }
4632
4717
 
4633
- /* When floating container has blank glow, use solid popover background */
4718
+ /* Disable truncation when explicitly set to false */
4634
4719
 
4635
- .dndev-floating[data-glow='blank'] .dndev-floating-label {
4636
- background-color: var(--popover);
4720
+ .dndev-floating-legend[data-truncate='false'] {
4721
+ max-width: none;
4722
+ overflow: visible;
4723
+ text-overflow: clip;
4724
+ white-space: normal;
4637
4725
  }
4638
4726
 
4639
- .dndev-floating-label[data-disabled='true'] {
4640
- color: var(--muted-foreground);
4641
- }
4727
+ /* Input inside fieldset uses bare mode via data-bare attribute (set by Input component) */
4642
4728
 
4643
- .dndev-floating-label[data-truncate='true'] {
4644
- max-width: calc(100% - var(--gap-md) * 2);
4645
- overflow: hidden;
4646
- text-overflow: ellipsis;
4647
- white-space: nowrap;
4729
+ /* This rule is kept for non-Input children that might need border removal */
4730
+
4731
+ .dndev-floating-fieldset > .dndev-input:not([data-bare]) {
4732
+ border: none;
4733
+ box-shadow: none;
4734
+ background: transparent;
4648
4735
  }
4649
4736
 
4650
4737
  /* packages/components/src/atomic/List/List.css */
@@ -4995,11 +5082,33 @@ em {
4995
5082
  /* packages/components/src/atomic/Pagination/Pagination.css */
4996
5083
 
4997
5084
  .dndev-pagination {
5085
+ display: flex;
5086
+ flex-direction: row;
5087
+ align-items: center;
5088
+ justify-content: space-between;
5089
+ gap: var(--gap-md);
5090
+ width: 100%;
5091
+ }
5092
+
5093
+ .dndev-pagination-info {
5094
+ display: none;
5095
+ }
5096
+
5097
+ .dndev-pagination-size {
5098
+ display: flex;
5099
+ align-items: center;
5100
+ }
5101
+
5102
+ .dndev-pagination-size-label {
5103
+ display: none;
5104
+ }
5105
+
5106
+ .dndev-pagination-nav {
4998
5107
  display: flex;
4999
5108
  align-items: center;
5000
5109
  justify-content: center;
5001
5110
  gap: var(--gap-sm);
5002
- flex-wrap: wrap;
5111
+ width: 100%;
5003
5112
  }
5004
5113
 
5005
5114
  .dndev-pagination-list {
@@ -5011,57 +5120,36 @@ em {
5011
5120
  margin: 0;
5012
5121
  }
5013
5122
 
5014
- .dndev-pagination-item {
5015
- display: flex;
5016
- align-items: center;
5017
- justify-content: center;
5018
- }
5019
-
5020
5123
  .dndev-pagination-button {
5021
- min-width: var(--touch-target);
5124
+ width: var(--touch-target);
5022
5125
  height: var(--touch-target);
5023
- display: flex;
5126
+ padding: 0;
5127
+ flex-shrink: 0;
5128
+ display: inline-flex;
5024
5129
  align-items: center;
5025
5130
  justify-content: center;
5026
- gap: var(--gap-sm);
5027
- border-radius: var(--radius-interactive);
5028
- font-weight: 500;
5029
- transition: var(--transition-fast);
5030
- cursor: pointer;
5031
- border: var(--border-hairline) solid var(--line-2);
5032
- background: transparent;
5033
- color: var(--foreground);
5034
- padding: var(--gap-sm) var(--gap-md);
5035
5131
  }
5036
5132
 
5037
- .dndev-pagination-button:hover:not(:disabled) {
5038
- background: var(--accent);
5039
- color: var(--accent-foreground);
5040
- }
5133
+ /* Desktop: Show all elements in one row */
5041
5134
 
5042
- .dndev-pagination-button:focus-visible {
5043
- outline: 2px solid var(--ring);
5044
- outline-offset: 2px;
5135
+ @media (min-width: 768px) {
5136
+ .dndev-pagination-info,
5137
+ .dndev-pagination-size {
5138
+ display: flex;
5139
+ align-items: center;
5140
+ white-space: nowrap;
5045
5141
  }
5046
5142
 
5047
- .dndev-pagination-button:disabled {
5048
- opacity: var(--opacity-muted);
5049
- cursor: not-allowed;
5143
+ .dndev-pagination-size-label {
5144
+ margin-right: var(--gap-sm);
5050
5145
  }
5051
5146
 
5052
- .dndev-pagination-button[aria-current='page'] {
5053
- background: var(--primary);
5054
- color: var(--primary-foreground);
5055
- border-color: var(--primary);
5147
+ .dndev-pagination-nav {
5148
+ justify-content: flex-end;
5149
+ width: auto;
5150
+ margin-left: auto;
5151
+ /* Push to right */
5056
5152
  }
5057
-
5058
- .dndev-pagination-ellipsis {
5059
- display: flex;
5060
- align-items: center;
5061
- justify-content: center;
5062
- width: var(--touch-target);
5063
- height: var(--touch-target);
5064
- color: var(--muted-foreground);
5065
5153
  }
5066
5154
 
5067
5155
  /* packages/components/src/atomic/Popover/Popover.css */
@@ -5634,50 +5722,214 @@ em {
5634
5722
  display: flex;
5635
5723
  flex-direction: column;
5636
5724
  z-index: var(--z-modal);
5637
- border-radius: var(--radius-floating); /* Square like floating panels */
5725
+ background: var(--card);
5726
+ /* Ensure background is opaque */
5727
+ color: var(--card-foreground);
5728
+ box-shadow: var(--shadow-xl);
5729
+ /* Focus Tunnel: Deep elevation */
5730
+ overflow: hidden;
5731
+ /* Scroll Trap: Container clips overflow */
5638
5732
 
5639
- /* Sheet positioning by side */
5733
+ /* Motion Physics: Base state */
5734
+ will-change: transform, opacity;
5735
+
5736
+ /* Open state animation - "Heavy" ease for premium feel */
5640
5737
  }
5641
5738
 
5739
+ .dndev-sheet-content[data-state='open'] {
5740
+ animation: sheet-slide-in var(--dur-heavy) var(--ease-heavy);
5741
+ }
5742
+
5743
+ /* Closed state animation */
5744
+
5745
+ .dndev-sheet-content[data-state='closed'] {
5746
+ animation: sheet-slide-out var(--dur-normal) var(--ease-in-out);
5747
+ }
5748
+
5749
+ /* Sheet positioning by side - SPATIAL METAPHOR */
5750
+
5751
+ /* RIGHT / LEFT (Desktop Panels) */
5752
+
5642
5753
  .dndev-sheet-content[data-side='right'],.dndev-sheet-content[data-side='left'] {
5643
5754
  top: 0;
5644
5755
  bottom: 0;
5645
5756
  width: 80%;
5646
5757
  max-width: 56rem;
5758
+ /* Standard panel width */
5759
+ height: 100%;
5760
+ /* Full height */
5761
+ border-radius: 0;
5762
+ /* Square edges for panel metaphor */
5647
5763
  }
5648
5764
 
5649
5765
  .dndev-sheet-content[data-side='right'] {
5766
+ /* Physical positioning: right edge */
5650
5767
  right: 0;
5768
+ left: auto;
5769
+ /* Border on logical start (left in LTR, right in RTL) */
5770
+ border-inline-start: var(--border-hairline) solid var(--line-1);
5651
5771
  }
5652
5772
 
5653
5773
  .dndev-sheet-content[data-side='left'] {
5774
+ /* Physical positioning: left edge */
5654
5775
  left: 0;
5776
+ right: auto;
5777
+ /* Border on logical end (right in LTR, left in RTL) */
5778
+ border-inline-end: var(--border-hairline) solid var(--line-1);
5655
5779
  }
5656
5780
 
5781
+ /* TOP / BOTTOM (Mobile Cards) */
5782
+
5657
5783
  .dndev-sheet-content[data-side='top'],.dndev-sheet-content[data-side='bottom'] {
5658
5784
  left: 0;
5659
5785
  right: 0;
5660
- height: 80%;
5661
- max-height: 56rem;
5662
- overflow: hidden;
5786
+ /* Card metaphor: Detached from opposite edge */
5787
+ height: auto;
5788
+ max-height: 92dvh;
5789
+ /* Never touch top edge */
5790
+ width: 100%;
5791
+ margin-left: auto;
5792
+ margin-right: auto;
5793
+
5794
+ /* On larger screens, constrain width */
5663
5795
  }
5664
5796
 
5797
+ @media (width >=768px) {
5798
+
5799
+ .dndev-sheet-content[data-side='top'],.dndev-sheet-content[data-side='bottom'] {
5800
+ max-width: 56rem;
5801
+ width: 90%;
5802
+ border-radius: var(--radius-lg);
5803
+ /* Fully rounded card on desktop */
5804
+ }
5805
+ }
5806
+
5665
5807
  .dndev-sheet-content[data-side='top'] {
5666
5808
  top: 0;
5809
+ border-bottom: var(--border-hairline) solid var(--line-1);
5810
+ /* Rounded bottom corners only */
5811
+ border-bottom-left-radius: var(--radius-lg);
5812
+ border-bottom-right-radius: var(--radius-lg);
5667
5813
  }
5668
5814
 
5669
5815
  .dndev-sheet-content[data-side='bottom'] {
5670
5816
  bottom: 0;
5817
+ border-top: var(--border-hairline) solid var(--line-1);
5818
+ /* Rounded top corners only */
5819
+ border-top-left-radius: var(--radius-lg);
5820
+ border-top-right-radius: var(--radius-lg);
5671
5821
  }
5672
5822
 
5823
+ /* DRAG HANDLE PILL - Visual affordance for draggable sheets */
5824
+
5825
+ .dndev-sheet-drag-handle {
5826
+ width: 2.5rem;
5827
+ height: 0.25rem;
5828
+ background: var(--line-2);
5829
+ border-radius: var(--radius-full);
5830
+ margin: var(--gap-sm) auto 0;
5831
+ flex-shrink: 0;
5832
+ cursor: grab;
5833
+ transition: background-color var(--dur-fast) var(--ease-in-out);
5834
+ }
5835
+
5836
+ .dndev-sheet-drag-handle:active {
5837
+ cursor: grabbing;
5838
+ }
5839
+
5840
+ /* Positioning for bottom sheets */
5841
+
5842
+ .dndev-sheet-content[data-side='bottom'] > .dndev-sheet-drag-handle {
5843
+ margin-top: var(--gap-sm);
5844
+ margin-bottom: 0;
5845
+ }
5846
+
5847
+ /* Positioning for top sheets */
5848
+
5849
+ .dndev-sheet-content[data-side='top'] > .dndev-sheet-drag-handle {
5850
+ margin-top: max(var(--gap-sm), env(safe-area-inset-top));
5851
+ margin-bottom: 0;
5852
+ }
5853
+
5854
+ /* HEADER - Pinned, No Padding (Tight Layout) */
5855
+
5856
+ /* Industry standard: Title always on start, X always on end (consistent across all sides) */
5857
+
5673
5858
  .dndev-sheet-header {
5674
5859
  display: flex;
5675
5860
  align-items: center;
5676
5861
  justify-content: space-between;
5677
5862
  gap: var(--gap-md);
5678
5863
  flex-shrink: 0;
5864
+ /* Never shrink */
5679
5865
  min-height: var(--touch-target);
5680
- margin-bottom: var(--gap-md);
5866
+ /* No padding - tight layout: [ Title X ] */
5867
+ padding-block: 0;
5868
+ /* RTL-aware: padding on logical start only */
5869
+ padding-inline-start: var(--gap-md);
5870
+ padding-inline-end: 0; /* X button has its own spacing */
5871
+ border-bottom: var(--border-hairline) solid var(--line-1);
5872
+ /* Separator */
5873
+
5874
+ /* Thumb Ergonomics: Top Safe Area (only for top sheets) */
5875
+ }
5876
+
5877
+ .dndev-sheet-content[data-side='top'] .dndev-sheet-header {
5878
+ padding-top: max(0, env(safe-area-inset-top));
5879
+ }
5880
+
5881
+ /* Adjust header padding when drag handle is present (sibling selector) */
5882
+
5883
+ .dndev-sheet-content[data-side='bottom']
5884
+ .dndev-sheet-drag-handle
5885
+ ~ .dndev-sheet-header,
5886
+ .dndev-sheet-content[data-side='top']
5887
+ .dndev-sheet-drag-handle
5888
+ ~ .dndev-sheet-header {
5889
+ padding-top: 0;
5890
+ }
5891
+
5892
+ /* BODY - Scrollable */
5893
+
5894
+ .dndev-sheet-body {
5895
+ flex: 1;
5896
+ /* Consumes available space */
5897
+ overflow-y: auto;
5898
+ /* Independent scroll */
5899
+ overflow-x: hidden;
5900
+ padding: var(--gap-md);
5901
+ overscroll-behavior: contain;
5902
+ /* Prevent body scroll chaining */
5903
+ }
5904
+
5905
+ /* FOOTER - Pinned */
5906
+
5907
+ .dndev-sheet-footer {
5908
+ flex-shrink: 0;
5909
+ /* Never shrink */
5910
+ padding: var(--gap-md);
5911
+ border-top: var(--border-hairline) solid var(--line-1);
5912
+ /* Separator */
5913
+ display: flex;
5914
+ flex-direction: column-reverse;
5915
+ /* Mobile-first stacking */
5916
+ gap: var(--gap-sm);
5917
+
5918
+ /* Desktop: Row layout */
5919
+ }
5920
+
5921
+ @media (width >=640px) {
5922
+
5923
+ .dndev-sheet-footer {
5924
+ flex-direction: row;
5925
+ justify-content: flex-end;
5926
+ }
5927
+ }
5928
+
5929
+ .dndev-sheet-footer {
5930
+
5931
+ /* Thumb Ergonomics: Bottom Safe Area (Home Indicator) */
5932
+ padding-bottom: max(var(--gap-md), env(safe-area-inset-bottom));
5681
5933
  }
5682
5934
 
5683
5935
  .dndev-sheet-title {
@@ -5687,9 +5939,12 @@ em {
5687
5939
  }
5688
5940
 
5689
5941
  .dndev-sheet-close {
5690
- position: absolute;
5691
- top: var(--gap-md);
5692
- inset-inline-end: var(--gap-md);
5942
+ /* Position relative - flex handles alignment */
5943
+ position: relative;
5944
+ margin-inline-start: auto;
5945
+ /* Push to end (RTL-aware: end = right in LTR, left in RTL) */
5946
+ margin-inline-end: var(--gap-sm);
5947
+ /* Spacing from edge - use margin not padding to keep icon centered */
5693
5948
  opacity: var(--opacity-muted);
5694
5949
  }
5695
5950
 
@@ -5697,9 +5952,56 @@ em {
5697
5952
  opacity: 1;
5698
5953
  }
5699
5954
 
5700
- .dndev-sheet-footer {
5701
- flex-shrink: 0;
5702
- margin-top: var(--gap-md);
5955
+ /* ===========================
5956
+ ANIMATIONS (Motion Physics)
5957
+ =========================== */
5958
+
5959
+ /* Slide In/Out Keyframes - Context Aware */
5960
+
5961
+ @keyframes sheet-slide-in {
5962
+ from {
5963
+ opacity: 0;
5964
+ transform: var(--slide-enter-transform);
5965
+ }
5966
+
5967
+ to {
5968
+ opacity: 1;
5969
+ transform: translate(0, 0);
5970
+ }
5971
+ }
5972
+
5973
+ @keyframes sheet-slide-out {
5974
+ from {
5975
+ opacity: 1;
5976
+ transform: translate(0, 0);
5977
+ }
5978
+
5979
+ to {
5980
+ opacity: 0;
5981
+ transform: var(--slide-exit-transform);
5982
+ }
5983
+ }
5984
+
5985
+ /* Define Transforms based on Side */
5986
+
5987
+ .dndev-sheet-content[data-side='right'] {
5988
+ --slide-enter-transform: translateX(100%);
5989
+ --slide-exit-transform: translateX(100%);
5990
+ }
5991
+
5992
+ .dndev-sheet-content[data-side='left'] {
5993
+ --slide-enter-transform: translateX(-100%);
5994
+ --slide-exit-transform: translateX(-100%);
5995
+ }
5996
+
5997
+ .dndev-sheet-content[data-side='bottom'] {
5998
+ --slide-enter-transform: translateY(100%);
5999
+ --slide-exit-transform: translateY(100%);
6000
+ }
6001
+
6002
+ .dndev-sheet-content[data-side='top'] {
6003
+ --slide-enter-transform: translateY(-100%);
6004
+ --slide-exit-transform: translateY(-100%);
5703
6005
  }
5704
6006
 
5705
6007
  /* packages/components/src/atomic/Skeleton/Skeleton.css */
@@ -6372,7 +6674,8 @@ em {
6372
6674
 
6373
6675
  .dndev-switch-label {
6374
6676
  font-size: var(--font-size-sm);
6375
- transition: color var(--dur-normal) var(--ease-in-out),
6677
+ transition:
6678
+ color var(--dur-normal) var(--ease-in-out),
6376
6679
  font-weight var(--dur-normal) var(--ease-in-out);
6377
6680
  white-space: nowrap;
6378
6681
  }
@@ -6381,16 +6684,14 @@ em {
6381
6684
 
6382
6685
  .dndev-switch-with-labels:not(:has(.dndev-switch[data-state='checked']))
6383
6686
  .dndev-switch-label-unchecked,
6384
- .dndev-switch-with-labels[data-checked='false']
6385
- .dndev-switch-label-unchecked {
6687
+ .dndev-switch-with-labels[data-checked='false'] .dndev-switch-label-unchecked {
6386
6688
  color: var(--foreground);
6387
6689
  font-weight: var(--font-weight-medium);
6388
6690
  }
6389
6691
 
6390
6692
  .dndev-switch-with-labels:has(.dndev-switch[data-state='checked'])
6391
6693
  .dndev-switch-label-unchecked,
6392
- .dndev-switch-with-labels[data-checked='true']
6393
- .dndev-switch-label-unchecked {
6694
+ .dndev-switch-with-labels[data-checked='true'] .dndev-switch-label-unchecked {
6394
6695
  color: var(--muted-foreground);
6395
6696
  font-weight: var(--font-weight-normal);
6396
6697
  }
@@ -6399,16 +6700,14 @@ em {
6399
6700
 
6400
6701
  .dndev-switch-with-labels:has(.dndev-switch[data-state='checked'])
6401
6702
  .dndev-switch-label-checked,
6402
- .dndev-switch-with-labels[data-checked='true']
6403
- .dndev-switch-label-checked {
6703
+ .dndev-switch-with-labels[data-checked='true'] .dndev-switch-label-checked {
6404
6704
  color: var(--foreground);
6405
6705
  font-weight: var(--font-weight-medium);
6406
6706
  }
6407
6707
 
6408
6708
  .dndev-switch-with-labels:not(:has(.dndev-switch[data-state='checked']))
6409
6709
  .dndev-switch-label-checked,
6410
- .dndev-switch-with-labels[data-checked='false']
6411
- .dndev-switch-label-checked {
6710
+ .dndev-switch-with-labels[data-checked='false'] .dndev-switch-label-checked {
6412
6711
  color: var(--muted-foreground);
6413
6712
  font-weight: var(--font-weight-normal);
6414
6713
  }
@@ -6431,7 +6730,21 @@ em {
6431
6730
  }
6432
6731
 
6433
6732
  .dndev-table-header {
6434
- /* Base header styles */
6733
+ background-color: var(--accent);
6734
+ }
6735
+
6736
+ /* Filter row above header */
6737
+
6738
+ .dndev-table-filter-row {
6739
+ border: 1px solid var(--border);
6740
+ border-bottom: none;
6741
+ }
6742
+
6743
+ .dndev-table-filter-row .dndev-table-head {
6744
+ background-color: var(--muted);
6745
+ padding: var(--gap-xs);
6746
+ height: auto;
6747
+ min-height: auto;
6435
6748
  }
6436
6749
 
6437
6750
  .dndev-table-body {
@@ -6449,6 +6762,12 @@ em {
6449
6762
  background-color: color-mix(in oklab, var(--accent) 15%, transparent);
6450
6763
  }
6451
6764
 
6765
+ /* Cursor pointer for clickable rows */
6766
+
6767
+ .dndev-table-row.dndev-cursor-pointer {
6768
+ cursor: pointer;
6769
+ }
6770
+
6452
6771
  /* Zebra striping for data tables */
6453
6772
 
6454
6773
  .dndev-table-body .dndev-table-row:nth-child(even) {
@@ -6487,22 +6806,34 @@ em {
6487
6806
  padding-block: var(--gap-sm);
6488
6807
  }
6489
6808
 
6490
- .dndev-table-head[data-sortable='true'] {
6809
+ /* Header cells use accent foreground for contrast */
6810
+
6811
+ .dndev-table-header .dndev-table-head {
6812
+ color: var(--accent-foreground);
6813
+ }
6814
+
6815
+ [data-sortable='true']:is(.dndev-table-header .dndev-table-head) {
6491
6816
  cursor: pointer;
6492
6817
  }
6493
6818
 
6494
- .dndev-table-head[data-align='center'] {
6819
+ [data-align='center']:is(.dndev-table-header .dndev-table-head) {
6495
6820
  text-align: center;
6496
6821
  }
6497
6822
 
6498
- .dndev-table-head[data-align='end'] {
6823
+ [data-align='end']:is(.dndev-table-header .dndev-table-head) {
6499
6824
  text-align: end;
6500
6825
  }
6501
6826
 
6502
- .dndev-table-head[data-align='start'] {
6827
+ [data-align='start']:is(.dndev-table-header .dndev-table-head) {
6503
6828
  text-align: start;
6504
6829
  }
6505
6830
 
6831
+ /* Active filter indicator */
6832
+
6833
+ .dndev-table-filter-active {
6834
+ color: var(--primary);
6835
+ }
6836
+
6506
6837
  /* Table cell (td) styles */
6507
6838
 
6508
6839
  .dndev-table-cell {
@@ -6510,6 +6841,7 @@ em {
6510
6841
  padding-inline: var(--gap-md);
6511
6842
  padding-block: var(--gap-sm);
6512
6843
  min-height: var(--touch-target);
6844
+ line-height: 1.5; /* Ensure consistent line height for empty cells */
6513
6845
  }
6514
6846
 
6515
6847
  .dndev-table-cell[data-align='center'] {
@@ -6543,8 +6875,8 @@ em {
6543
6875
  /* Input components inside grid cells should be borderless and fit snugly */
6544
6876
 
6545
6877
  .dndev-table-grid .dndev-table-cell .dndev-input,
6546
- .dndev-table-grid .dndev-table-cell input[type="text"],
6547
- .dndev-table-grid .dndev-table-cell input[type="number"] {
6878
+ .dndev-table-grid .dndev-table-cell input[type='text'],
6879
+ .dndev-table-grid .dndev-table-cell input[type='number'] {
6548
6880
  border: none;
6549
6881
  background: transparent;
6550
6882
  width: 100%;
@@ -6588,6 +6920,64 @@ em {
6588
6920
  padding-inline-start: calc(var(--gap-md) + var(--icon-md) + var(--gap-sm));
6589
6921
  }
6590
6922
 
6923
+ /* Skeleton rows - apply standard skeleton pulse animation to entire rows */
6924
+
6925
+ /* Keep existing background colors (zebra striping) - just add opacity pulse */
6926
+
6927
+ .dndev-table-body .dndev-table-row.dndev-skeleton-row {
6928
+ animation: dndev-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
6929
+ pointer-events: none;
6930
+
6931
+ /* Keep hover state but disabled (pointer-events: none prevents hover) */
6932
+ }
6933
+
6934
+ :is(.dndev-table-body .dndev-table-row.dndev-skeleton-row):hover {
6935
+ /* Inherit from parent .dndev-table-row hover styles */
6936
+ }
6937
+
6938
+ /* Even rows keep their var(--muted) background, just pulse */
6939
+
6940
+ .dndev-table-body .dndev-table-row.dndev-skeleton-row:nth-child(even) {
6941
+ animation: dndev-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
6942
+ }
6943
+
6944
+ :is(.dndev-table-body .dndev-table-row.dndev-skeleton-row:nth-child(even)):hover {
6945
+ /* Inherit from parent .dndev-table-row:nth-child(even) hover styles */
6946
+ }
6947
+
6948
+ /* Skeleton bars inside cells - adapt to row background for visibility */
6949
+
6950
+ /* Odd rows (transparent background): use default var(--muted) skeleton */
6951
+
6952
+ /* Even rows (var(--muted) background): use lighter skeleton for contrast */
6953
+
6954
+ .dndev-table-body .dndev-table-row.dndev-skeleton-row .dndev-skeleton {
6955
+ background-color: var(--muted);
6956
+ }
6957
+
6958
+ .dndev-table-body
6959
+ .dndev-table-row.dndev-skeleton-row:nth-child(even)
6960
+ .dndev-skeleton {
6961
+ /* Even rows have var(--muted) background, so skeleton should be lighter for contrast */
6962
+ background-color: color-mix(
6963
+ in oklab,
6964
+ var(--muted) 60%,
6965
+ var(--foreground) 40%
6966
+ );
6967
+ }
6968
+
6969
+ /* Use the same pulse animation as standard skeleton (from Skeleton.css) */
6970
+
6971
+ @keyframes dndev-pulse {
6972
+ 0%,
6973
+ 100% {
6974
+ opacity: 1;
6975
+ }
6976
+ 50% {
6977
+ opacity: var(--opacity-muted);
6978
+ }
6979
+ }
6980
+
6591
6981
  /* packages/components/src/atomic/Tabs/Tabs.css */
6592
6982
 
6593
6983
  /* Tabs list: use flexbox for natural wrapping, not grid */
@@ -8147,6 +8537,10 @@ h4[data-variant='code'] {
8147
8537
  pointer-events: auto;
8148
8538
  }
8149
8539
 
8540
+ .dndev-cursor-pointer {
8541
+ cursor: pointer;
8542
+ }
8543
+
8150
8544
  .dndev-aspect-video {
8151
8545
  aspect-ratio: 16 / 9;
8152
8546
  }