@qijenchen/design-system 0.1.0-beta.10

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 (507) hide show
  1. package/README.md +163 -0
  2. package/dist/components/Accordion/accordion.d.ts +37 -0
  3. package/dist/components/Accordion/accordion.d.ts.map +1 -0
  4. package/dist/components/Accordion/accordion.js +78 -0
  5. package/dist/components/Accordion/accordion.js.map +1 -0
  6. package/dist/components/Alert/alert.d.ts +47 -0
  7. package/dist/components/Alert/alert.d.ts.map +1 -0
  8. package/dist/components/Alert/alert.js +132 -0
  9. package/dist/components/Alert/alert.js.map +1 -0
  10. package/dist/components/AppShell/_demo-helpers.d.ts +49 -0
  11. package/dist/components/AppShell/_demo-helpers.d.ts.map +1 -0
  12. package/dist/components/AppShell/app-shell.d.ts +76 -0
  13. package/dist/components/AppShell/app-shell.d.ts.map +1 -0
  14. package/dist/components/AppShell/app-shell.js +214 -0
  15. package/dist/components/AppShell/app-shell.js.map +1 -0
  16. package/dist/components/AspectRatio/aspect-ratio.d.ts +40 -0
  17. package/dist/components/AspectRatio/aspect-ratio.d.ts.map +1 -0
  18. package/dist/components/AspectRatio/aspect-ratio.js +23 -0
  19. package/dist/components/AspectRatio/aspect-ratio.js.map +1 -0
  20. package/dist/components/Avatar/avatar.d.ts +85 -0
  21. package/dist/components/Avatar/avatar.d.ts.map +1 -0
  22. package/dist/components/Avatar/avatar.js +195 -0
  23. package/dist/components/Avatar/avatar.js.map +1 -0
  24. package/dist/components/Badge/badge.d.ts +43 -0
  25. package/dist/components/Badge/badge.d.ts.map +1 -0
  26. package/dist/components/Badge/badge.js +69 -0
  27. package/dist/components/Badge/badge.js.map +1 -0
  28. package/dist/components/Breadcrumb/breadcrumb.d.ts +163 -0
  29. package/dist/components/Breadcrumb/breadcrumb.d.ts.map +1 -0
  30. package/dist/components/Breadcrumb/breadcrumb.js +300 -0
  31. package/dist/components/Breadcrumb/breadcrumb.js.map +1 -0
  32. package/dist/components/BulkActionBar/bulk-action-bar.d.ts +46 -0
  33. package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -0
  34. package/dist/components/BulkActionBar/bulk-action-bar.js +78 -0
  35. package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -0
  36. package/dist/components/Button/button-group.d.ts +49 -0
  37. package/dist/components/Button/button-group.d.ts.map +1 -0
  38. package/dist/components/Button/button-group.js +46 -0
  39. package/dist/components/Button/button-group.js.map +1 -0
  40. package/dist/components/Button/button.d.ts +203 -0
  41. package/dist/components/Button/button.d.ts.map +1 -0
  42. package/dist/components/Button/button.js +309 -0
  43. package/dist/components/Button/button.js.map +1 -0
  44. package/dist/components/Calendar/calendar.d.ts +81 -0
  45. package/dist/components/Calendar/calendar.d.ts.map +1 -0
  46. package/dist/components/Calendar/calendar.js +282 -0
  47. package/dist/components/Calendar/calendar.js.map +1 -0
  48. package/dist/components/Carousel/carousel.d.ts +61 -0
  49. package/dist/components/Carousel/carousel.d.ts.map +1 -0
  50. package/dist/components/Carousel/carousel.js +276 -0
  51. package/dist/components/Carousel/carousel.js.map +1 -0
  52. package/dist/components/Chart/chart.d.ts +94 -0
  53. package/dist/components/Chart/chart.d.ts.map +1 -0
  54. package/dist/components/Chart/chart.js +233 -0
  55. package/dist/components/Chart/chart.js.map +1 -0
  56. package/dist/components/Checkbox/checkbox-group.d.ts +58 -0
  57. package/dist/components/Checkbox/checkbox-group.d.ts.map +1 -0
  58. package/dist/components/Checkbox/checkbox-group.js +28 -0
  59. package/dist/components/Checkbox/checkbox-group.js.map +1 -0
  60. package/dist/components/Checkbox/checkbox.d.ts +73 -0
  61. package/dist/components/Checkbox/checkbox.d.ts.map +1 -0
  62. package/dist/components/Checkbox/checkbox.js +125 -0
  63. package/dist/components/Checkbox/checkbox.js.map +1 -0
  64. package/dist/components/Chip/chip.d.ts +54 -0
  65. package/dist/components/Chip/chip.d.ts.map +1 -0
  66. package/dist/components/Chip/chip.js +224 -0
  67. package/dist/components/Chip/chip.js.map +1 -0
  68. package/dist/components/CircularProgress/circular-progress.d.ts +40 -0
  69. package/dist/components/CircularProgress/circular-progress.d.ts.map +1 -0
  70. package/dist/components/CircularProgress/circular-progress.js +118 -0
  71. package/dist/components/CircularProgress/circular-progress.js.map +1 -0
  72. package/dist/components/Coachmark/coachmark.d.ts +100 -0
  73. package/dist/components/Coachmark/coachmark.d.ts.map +1 -0
  74. package/dist/components/Coachmark/coachmark.js +107 -0
  75. package/dist/components/Coachmark/coachmark.js.map +1 -0
  76. package/dist/components/Combobox/combobox.d.ts +150 -0
  77. package/dist/components/Combobox/combobox.d.ts.map +1 -0
  78. package/dist/components/Combobox/combobox.js +595 -0
  79. package/dist/components/Combobox/combobox.js.map +1 -0
  80. package/dist/components/Command/command.d.ts +106 -0
  81. package/dist/components/Command/command.d.ts.map +1 -0
  82. package/dist/components/Command/command.js +123 -0
  83. package/dist/components/Command/command.js.map +1 -0
  84. package/dist/components/DataTable/active-editor-controller.d.ts +66 -0
  85. package/dist/components/DataTable/active-editor-controller.d.ts.map +1 -0
  86. package/dist/components/DataTable/cell-registry.d.ts +37 -0
  87. package/dist/components/DataTable/cell-registry.d.ts.map +1 -0
  88. package/dist/components/DataTable/cell-registry.js +377 -0
  89. package/dist/components/DataTable/cell-registry.js.map +1 -0
  90. package/dist/components/DataTable/column-types.d.ts +145 -0
  91. package/dist/components/DataTable/column-types.d.ts.map +1 -0
  92. package/dist/components/DataTable/column-types.js +17 -0
  93. package/dist/components/DataTable/column-types.js.map +1 -0
  94. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts +49 -0
  95. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts.map +1 -0
  96. package/dist/components/DataTable/data-table-filter-panel.d.ts +30 -0
  97. package/dist/components/DataTable/data-table-filter-panel.d.ts.map +1 -0
  98. package/dist/components/DataTable/data-table-interaction-layer.d.ts +78 -0
  99. package/dist/components/DataTable/data-table-interaction-layer.d.ts.map +1 -0
  100. package/dist/components/DataTable/data-table-interaction-layer.js +220 -0
  101. package/dist/components/DataTable/data-table-interaction-layer.js.map +1 -0
  102. package/dist/components/DataTable/data-table-sort-manager.d.ts +19 -0
  103. package/dist/components/DataTable/data-table-sort-manager.d.ts.map +1 -0
  104. package/dist/components/DataTable/data-table.d.ts +181 -0
  105. package/dist/components/DataTable/data-table.d.ts.map +1 -0
  106. package/dist/components/DataTable/data-table.js +1851 -0
  107. package/dist/components/DataTable/data-table.js.map +1 -0
  108. package/dist/components/DataTable/filter-operators.d.ts +116 -0
  109. package/dist/components/DataTable/filter-operators.d.ts.map +1 -0
  110. package/dist/components/DataTable/filter-tree.d.ts +66 -0
  111. package/dist/components/DataTable/filter-tree.d.ts.map +1 -0
  112. package/dist/components/DataTable/lib/column-meta.d.ts +49 -0
  113. package/dist/components/DataTable/lib/column-meta.d.ts.map +1 -0
  114. package/dist/components/DateGrid/date-grid.d.ts +61 -0
  115. package/dist/components/DateGrid/date-grid.d.ts.map +1 -0
  116. package/dist/components/DateGrid/date-grid.js +168 -0
  117. package/dist/components/DateGrid/date-grid.js.map +1 -0
  118. package/dist/components/DatePicker/date-picker.d.ts +119 -0
  119. package/dist/components/DatePicker/date-picker.d.ts.map +1 -0
  120. package/dist/components/DatePicker/date-picker.js +743 -0
  121. package/dist/components/DatePicker/date-picker.js.map +1 -0
  122. package/dist/components/DescriptionList/description-list.d.ts +60 -0
  123. package/dist/components/DescriptionList/description-list.d.ts.map +1 -0
  124. package/dist/components/DescriptionList/description-list.js +77 -0
  125. package/dist/components/DescriptionList/description-list.js.map +1 -0
  126. package/dist/components/Dialog/dialog.d.ts +54 -0
  127. package/dist/components/Dialog/dialog.d.ts.map +1 -0
  128. package/dist/components/Dialog/dialog.js +151 -0
  129. package/dist/components/Dialog/dialog.js.map +1 -0
  130. package/dist/components/DropdownMenu/dropdown-menu.d.ts +111 -0
  131. package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -0
  132. package/dist/components/DropdownMenu/dropdown-menu.js +288 -0
  133. package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -0
  134. package/dist/components/Empty/empty.d.ts +40 -0
  135. package/dist/components/Empty/empty.d.ts.map +1 -0
  136. package/dist/components/Empty/empty.js +66 -0
  137. package/dist/components/Empty/empty.js.map +1 -0
  138. package/dist/components/Field/field-context.d.ts +77 -0
  139. package/dist/components/Field/field-context.d.ts.map +1 -0
  140. package/dist/components/Field/field-context.js +37 -0
  141. package/dist/components/Field/field-context.js.map +1 -0
  142. package/dist/components/Field/field-types.d.ts +5 -0
  143. package/dist/components/Field/field-types.d.ts.map +1 -0
  144. package/dist/components/Field/field-types.js +13 -0
  145. package/dist/components/Field/field-types.js.map +1 -0
  146. package/dist/components/Field/field-wrapper.d.ts +17 -0
  147. package/dist/components/Field/field-wrapper.d.ts.map +1 -0
  148. package/dist/components/Field/field-wrapper.js +252 -0
  149. package/dist/components/Field/field-wrapper.js.map +1 -0
  150. package/dist/components/Field/field.d.ts +127 -0
  151. package/dist/components/Field/field.d.ts.map +1 -0
  152. package/dist/components/Field/field.js +295 -0
  153. package/dist/components/Field/field.js.map +1 -0
  154. package/dist/components/FieldControlGroup/field-control-group.d.ts +74 -0
  155. package/dist/components/FieldControlGroup/field-control-group.d.ts.map +1 -0
  156. package/dist/components/FieldControlGroup/field-control-group.js +62 -0
  157. package/dist/components/FieldControlGroup/field-control-group.js.map +1 -0
  158. package/dist/components/FileItem/file-item.d.ts +44 -0
  159. package/dist/components/FileItem/file-item.d.ts.map +1 -0
  160. package/dist/components/FileItem/file-item.js +202 -0
  161. package/dist/components/FileItem/file-item.js.map +1 -0
  162. package/dist/components/FileUpload/file-upload.d.ts +97 -0
  163. package/dist/components/FileUpload/file-upload.d.ts.map +1 -0
  164. package/dist/components/FileUpload/file-upload.js +231 -0
  165. package/dist/components/FileUpload/file-upload.js.map +1 -0
  166. package/dist/components/FileViewer/file-viewer-types.d.ts +73 -0
  167. package/dist/components/FileViewer/file-viewer-types.d.ts.map +1 -0
  168. package/dist/components/FileViewer/file-viewer.d.ts +82 -0
  169. package/dist/components/FileViewer/file-viewer.d.ts.map +1 -0
  170. package/dist/components/FileViewer/file-viewer.js +752 -0
  171. package/dist/components/FileViewer/file-viewer.js.map +1 -0
  172. package/dist/components/FileViewer/image-renderer.d.ts +9 -0
  173. package/dist/components/FileViewer/image-renderer.d.ts.map +1 -0
  174. package/dist/components/FileViewer/image-renderer.js +165 -0
  175. package/dist/components/FileViewer/image-renderer.js.map +1 -0
  176. package/dist/components/HoverCard/hover-card.d.ts +30 -0
  177. package/dist/components/HoverCard/hover-card.d.ts.map +1 -0
  178. package/dist/components/HoverCard/hover-card.js +61 -0
  179. package/dist/components/HoverCard/hover-card.js.map +1 -0
  180. package/dist/components/Input/input.d.ts +72 -0
  181. package/dist/components/Input/input.d.ts.map +1 -0
  182. package/dist/components/Input/input.js +148 -0
  183. package/dist/components/Input/input.js.map +1 -0
  184. package/dist/components/LinkInput/link-input.d.ts +46 -0
  185. package/dist/components/LinkInput/link-input.d.ts.map +1 -0
  186. package/dist/components/LinkInput/link-input.js +215 -0
  187. package/dist/components/LinkInput/link-input.js.map +1 -0
  188. package/dist/components/Menu/menu-item.d.ts +83 -0
  189. package/dist/components/Menu/menu-item.d.ts.map +1 -0
  190. package/dist/components/Menu/menu-item.js +209 -0
  191. package/dist/components/Menu/menu-item.js.map +1 -0
  192. package/dist/components/NameCard/name-card.d.ts +85 -0
  193. package/dist/components/NameCard/name-card.d.ts.map +1 -0
  194. package/dist/components/NameCard/name-card.js +153 -0
  195. package/dist/components/NameCard/name-card.js.map +1 -0
  196. package/dist/components/Notice/notice.d.ts +69 -0
  197. package/dist/components/Notice/notice.d.ts.map +1 -0
  198. package/dist/components/Notice/notice.js +121 -0
  199. package/dist/components/Notice/notice.js.map +1 -0
  200. package/dist/components/NumberInput/number-input.d.ts +57 -0
  201. package/dist/components/NumberInput/number-input.d.ts.map +1 -0
  202. package/dist/components/NumberInput/number-input.js +131 -0
  203. package/dist/components/NumberInput/number-input.js.map +1 -0
  204. package/dist/components/OverflowIndicator/overflow-indicator.d.ts +23 -0
  205. package/dist/components/OverflowIndicator/overflow-indicator.d.ts.map +1 -0
  206. package/dist/components/OverflowIndicator/overflow-indicator.js +111 -0
  207. package/dist/components/OverflowIndicator/overflow-indicator.js.map +1 -0
  208. package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts +57 -0
  209. package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts.map +1 -0
  210. package/dist/components/PeoplePicker/avatar-stack-overflow.js +35 -0
  211. package/dist/components/PeoplePicker/avatar-stack-overflow.js.map +1 -0
  212. package/dist/components/PeoplePicker/people-picker-helpers.d.ts +7 -0
  213. package/dist/components/PeoplePicker/people-picker-helpers.d.ts.map +1 -0
  214. package/dist/components/PeoplePicker/people-picker-helpers.js +25 -0
  215. package/dist/components/PeoplePicker/people-picker-helpers.js.map +1 -0
  216. package/dist/components/PeoplePicker/people-picker.d.ts +77 -0
  217. package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -0
  218. package/dist/components/PeoplePicker/people-picker.js +263 -0
  219. package/dist/components/PeoplePicker/people-picker.js.map +1 -0
  220. package/dist/components/PeoplePicker/person-display.d.ts +66 -0
  221. package/dist/components/PeoplePicker/person-display.d.ts.map +1 -0
  222. package/dist/components/PeoplePicker/person-display.js +203 -0
  223. package/dist/components/PeoplePicker/person-display.js.map +1 -0
  224. package/dist/components/Popover/popover.d.ts +50 -0
  225. package/dist/components/Popover/popover.d.ts.map +1 -0
  226. package/dist/components/Popover/popover.js +113 -0
  227. package/dist/components/Popover/popover.js.map +1 -0
  228. package/dist/components/ProgressBar/progress-bar.d.ts +37 -0
  229. package/dist/components/ProgressBar/progress-bar.d.ts.map +1 -0
  230. package/dist/components/ProgressBar/progress-bar.js +86 -0
  231. package/dist/components/ProgressBar/progress-bar.js.map +1 -0
  232. package/dist/components/RadioGroup/radio-group.d.ts +78 -0
  233. package/dist/components/RadioGroup/radio-group.d.ts.map +1 -0
  234. package/dist/components/RadioGroup/radio-group.js +153 -0
  235. package/dist/components/RadioGroup/radio-group.js.map +1 -0
  236. package/dist/components/Rating/rating.d.ts +46 -0
  237. package/dist/components/Rating/rating.d.ts.map +1 -0
  238. package/dist/components/Rating/rating.js +179 -0
  239. package/dist/components/Rating/rating.js.map +1 -0
  240. package/dist/components/ScrollArea/scroll-area.d.ts +45 -0
  241. package/dist/components/ScrollArea/scroll-area.d.ts.map +1 -0
  242. package/dist/components/ScrollArea/scroll-area.js +65 -0
  243. package/dist/components/ScrollArea/scroll-area.js.map +1 -0
  244. package/dist/components/SegmentedControl/segmented-control.d.ts +102 -0
  245. package/dist/components/SegmentedControl/segmented-control.d.ts.map +1 -0
  246. package/dist/components/SegmentedControl/segmented-control.js +171 -0
  247. package/dist/components/SegmentedControl/segmented-control.js.map +1 -0
  248. package/dist/components/Select/select.d.ts +102 -0
  249. package/dist/components/Select/select.d.ts.map +1 -0
  250. package/dist/components/Select/select.js +435 -0
  251. package/dist/components/Select/select.js.map +1 -0
  252. package/dist/components/SelectMenu/select-menu.d.ts +103 -0
  253. package/dist/components/SelectMenu/select-menu.d.ts.map +1 -0
  254. package/dist/components/SelectMenu/select-menu.js +239 -0
  255. package/dist/components/SelectMenu/select-menu.js.map +1 -0
  256. package/dist/components/SelectionControl/selection-item.d.ts +69 -0
  257. package/dist/components/SelectionControl/selection-item.d.ts.map +1 -0
  258. package/dist/components/SelectionControl/selection-item.js +142 -0
  259. package/dist/components/SelectionControl/selection-item.js.map +1 -0
  260. package/dist/components/Separator/separator.d.ts +17 -0
  261. package/dist/components/Separator/separator.d.ts.map +1 -0
  262. package/dist/components/Separator/separator.js +39 -0
  263. package/dist/components/Separator/separator.js.map +1 -0
  264. package/dist/components/Sheet/sheet.d.ts +56 -0
  265. package/dist/components/Sheet/sheet.d.ts.map +1 -0
  266. package/dist/components/Sheet/sheet.js +145 -0
  267. package/dist/components/Sheet/sheet.js.map +1 -0
  268. package/dist/components/Sidebar/sidebar.d.ts +195 -0
  269. package/dist/components/Sidebar/sidebar.d.ts.map +1 -0
  270. package/dist/components/Sidebar/sidebar.js +826 -0
  271. package/dist/components/Sidebar/sidebar.js.map +1 -0
  272. package/dist/components/Skeleton/skeleton.d.ts +16 -0
  273. package/dist/components/Skeleton/skeleton.d.ts.map +1 -0
  274. package/dist/components/Skeleton/skeleton.js +30 -0
  275. package/dist/components/Skeleton/skeleton.js.map +1 -0
  276. package/dist/components/Slider/slider.d.ts +48 -0
  277. package/dist/components/Slider/slider.d.ts.map +1 -0
  278. package/dist/components/Slider/slider.js +108 -0
  279. package/dist/components/Slider/slider.js.map +1 -0
  280. package/dist/components/Steps/steps.d.ts +71 -0
  281. package/dist/components/Steps/steps.d.ts.map +1 -0
  282. package/dist/components/Steps/steps.js +583 -0
  283. package/dist/components/Steps/steps.js.map +1 -0
  284. package/dist/components/Switch/switch.d.ts +112 -0
  285. package/dist/components/Switch/switch.d.ts.map +1 -0
  286. package/dist/components/Switch/switch.js +179 -0
  287. package/dist/components/Switch/switch.js.map +1 -0
  288. package/dist/components/Tabs/tabs.d.ts +104 -0
  289. package/dist/components/Tabs/tabs.d.ts.map +1 -0
  290. package/dist/components/Tabs/tabs.js +316 -0
  291. package/dist/components/Tabs/tabs.js.map +1 -0
  292. package/dist/components/Tag/tag.d.ts +86 -0
  293. package/dist/components/Tag/tag.d.ts.map +1 -0
  294. package/dist/components/Tag/tag.js +172 -0
  295. package/dist/components/Tag/tag.js.map +1 -0
  296. package/dist/components/Textarea/textarea.d.ts +74 -0
  297. package/dist/components/Textarea/textarea.d.ts.map +1 -0
  298. package/dist/components/Textarea/textarea.js +224 -0
  299. package/dist/components/Textarea/textarea.js.map +1 -0
  300. package/dist/components/TimePicker/time-columns.d.ts +46 -0
  301. package/dist/components/TimePicker/time-columns.d.ts.map +1 -0
  302. package/dist/components/TimePicker/time-columns.js +173 -0
  303. package/dist/components/TimePicker/time-columns.js.map +1 -0
  304. package/dist/components/TimePicker/time-picker.d.ts +94 -0
  305. package/dist/components/TimePicker/time-picker.d.ts.map +1 -0
  306. package/dist/components/TimePicker/time-picker.js +253 -0
  307. package/dist/components/TimePicker/time-picker.js.map +1 -0
  308. package/dist/components/Toast/toast.d.ts +61 -0
  309. package/dist/components/Toast/toast.d.ts.map +1 -0
  310. package/dist/components/Toast/toast.js +76 -0
  311. package/dist/components/Toast/toast.js.map +1 -0
  312. package/dist/components/Tooltip/tooltip.d.ts +20 -0
  313. package/dist/components/Tooltip/tooltip.d.ts.map +1 -0
  314. package/dist/components/Tooltip/tooltip.js +53 -0
  315. package/dist/components/Tooltip/tooltip.js.map +1 -0
  316. package/dist/components/TreeView/tree-view.d.ts +166 -0
  317. package/dist/components/TreeView/tree-view.d.ts.map +1 -0
  318. package/dist/components/TreeView/tree-view.js +617 -0
  319. package/dist/components/TreeView/tree-view.js.map +1 -0
  320. package/dist/hooks/use-controllable.d.ts +16 -0
  321. package/dist/hooks/use-controllable.d.ts.map +1 -0
  322. package/dist/hooks/use-controllable.js +26 -0
  323. package/dist/hooks/use-controllable.js.map +1 -0
  324. package/dist/hooks/use-is-narrow-viewport.d.ts +2 -0
  325. package/dist/hooks/use-is-narrow-viewport.d.ts.map +1 -0
  326. package/dist/hooks/use-is-narrow-viewport.js +19 -0
  327. package/dist/hooks/use-is-narrow-viewport.js.map +1 -0
  328. package/dist/hooks/use-is-touch-device.d.ts +8 -0
  329. package/dist/hooks/use-is-touch-device.d.ts.map +1 -0
  330. package/dist/hooks/use-is-touch-device.js +16 -0
  331. package/dist/hooks/use-is-touch-device.js.map +1 -0
  332. package/dist/hooks/use-overflow-items.d.ts +124 -0
  333. package/dist/hooks/use-overflow-items.d.ts.map +1 -0
  334. package/dist/hooks/use-overflow-items.js +97 -0
  335. package/dist/hooks/use-overflow-items.js.map +1 -0
  336. package/dist/index.d.ts +74 -0
  337. package/dist/index.d.ts.map +1 -0
  338. package/dist/index.js +371 -0
  339. package/dist/index.js.map +1 -0
  340. package/dist/lib/drag-visual.d.ts +158 -0
  341. package/dist/lib/drag-visual.d.ts.map +1 -0
  342. package/dist/lib/drag-visual.js +96 -0
  343. package/dist/lib/drag-visual.js.map +1 -0
  344. package/dist/lib/i18n/i18n-context.d.ts +105 -0
  345. package/dist/lib/i18n/i18n-context.d.ts.map +1 -0
  346. package/dist/lib/multi-select-ordering.d.ts +54 -0
  347. package/dist/lib/multi-select-ordering.d.ts.map +1 -0
  348. package/dist/lib/multi-select-ordering.js +13 -0
  349. package/dist/lib/multi-select-ordering.js.map +1 -0
  350. package/dist/lib/utils.d.ts +12 -0
  351. package/dist/lib/utils.d.ts.map +1 -0
  352. package/dist/lib/utils.js +79 -0
  353. package/dist/lib/utils.js.map +1 -0
  354. package/dist/patterns/element-anatomy/item-anatomy.d.ts +370 -0
  355. package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -0
  356. package/dist/patterns/element-anatomy/item-anatomy.js +272 -0
  357. package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -0
  358. package/dist/patterns/header-canonical/chrome-header.d.ts +80 -0
  359. package/dist/patterns/header-canonical/chrome-header.d.ts.map +1 -0
  360. package/dist/patterns/header-canonical/chrome-header.js +75 -0
  361. package/dist/patterns/header-canonical/chrome-header.js.map +1 -0
  362. package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts +101 -0
  363. package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts.map +1 -0
  364. package/dist/patterns/horizontal-overflow/horizontal-overflow.js +105 -0
  365. package/dist/patterns/horizontal-overflow/horizontal-overflow.js.map +1 -0
  366. package/dist/patterns/overlay-surface/overlay-surface.d.ts +28 -0
  367. package/dist/patterns/overlay-surface/overlay-surface.d.ts.map +1 -0
  368. package/dist/patterns/overlay-surface/overlay-surface.js +85 -0
  369. package/dist/patterns/overlay-surface/overlay-surface.js.map +1 -0
  370. package/dist/patterns/resize-handle/resize-handle.d.ts +102 -0
  371. package/dist/patterns/resize-handle/resize-handle.d.ts.map +1 -0
  372. package/dist/patterns/resize-handle/resize-handle.js +74 -0
  373. package/dist/patterns/resize-handle/resize-handle.js.map +1 -0
  374. package/dist/react-day-picker.css +457 -0
  375. package/dist/stories-helpers/anatomy/anatomy-utils.d.ts +40 -0
  376. package/dist/stories-helpers/anatomy/anatomy-utils.d.ts.map +1 -0
  377. package/dist/tokens/elevation/overlay-geometry.d.ts +12 -0
  378. package/dist/tokens/elevation/overlay-geometry.d.ts.map +1 -0
  379. package/dist/tokens/elevation/overlay-geometry.js +7 -0
  380. package/dist/tokens/elevation/overlay-geometry.js.map +1 -0
  381. package/dist/tokens/motion/motion.d.ts +15 -0
  382. package/dist/tokens/motion/motion.d.ts.map +1 -0
  383. package/dist/tokens/motion/motion.js +9 -0
  384. package/dist/tokens/motion/motion.js.map +1 -0
  385. package/dist/tokens/uiSize/icon-size.d.ts +53 -0
  386. package/dist/tokens/uiSize/icon-size.d.ts.map +1 -0
  387. package/package.json +92 -0
  388. package/src/README.md +32 -0
  389. package/src/components/Accordion/accordion.tsx +104 -0
  390. package/src/components/Alert/alert.tsx +188 -0
  391. package/src/components/AppShell/_demo-helpers.tsx +198 -0
  392. package/src/components/AppShell/app-shell.tsx +364 -0
  393. package/src/components/AspectRatio/aspect-ratio.tsx +58 -0
  394. package/src/components/Avatar/avatar.tsx +368 -0
  395. package/src/components/Badge/badge.tsx +104 -0
  396. package/src/components/Breadcrumb/breadcrumb.tsx +619 -0
  397. package/src/components/BulkActionBar/bulk-action-bar.tsx +156 -0
  398. package/src/components/Button/button-group.tsx +96 -0
  399. package/src/components/Button/button.tsx +539 -0
  400. package/src/components/Calendar/calendar.tsx +411 -0
  401. package/src/components/Carousel/carousel.tsx +371 -0
  402. package/src/components/Chart/chart.tsx +376 -0
  403. package/src/components/Checkbox/checkbox-group.tsx +94 -0
  404. package/src/components/Checkbox/checkbox.tsx +237 -0
  405. package/src/components/Chip/chip.tsx +359 -0
  406. package/src/components/CircularProgress/circular-progress.tsx +204 -0
  407. package/src/components/Coachmark/coachmark.tsx +255 -0
  408. package/src/components/Combobox/combobox.tsx +826 -0
  409. package/src/components/Command/command.tsx +187 -0
  410. package/src/components/DataTable/active-editor-controller.ts +72 -0
  411. package/src/components/DataTable/cell-registry.tsx +520 -0
  412. package/src/components/DataTable/column-types.ts +180 -0
  413. package/src/components/DataTable/data-table-column-visibility-panel.tsx +261 -0
  414. package/src/components/DataTable/data-table-filter-panel.tsx +813 -0
  415. package/src/components/DataTable/data-table-interaction-layer.tsx +483 -0
  416. package/src/components/DataTable/data-table-sort-manager.tsx +210 -0
  417. package/src/components/DataTable/data-table.css +165 -0
  418. package/src/components/DataTable/data-table.tsx +2924 -0
  419. package/src/components/DataTable/filter-operators.ts +225 -0
  420. package/src/components/DataTable/filter-tree.ts +313 -0
  421. package/src/components/DataTable/lib/column-meta.ts +79 -0
  422. package/src/components/DateGrid/date-grid.tsx +209 -0
  423. package/src/components/DatePicker/date-picker.tsx +1114 -0
  424. package/src/components/DescriptionList/description-list.tsx +141 -0
  425. package/src/components/Dialog/dialog.tsx +267 -0
  426. package/src/components/DropdownMenu/dropdown-menu.tsx +475 -0
  427. package/src/components/Empty/empty.tsx +108 -0
  428. package/src/components/Field/field-context.ts +136 -0
  429. package/src/components/Field/field-types.ts +52 -0
  430. package/src/components/Field/field-wrapper.tsx +348 -0
  431. package/src/components/Field/field.tsx +535 -0
  432. package/src/components/FieldControlGroup/field-control-group.tsx +136 -0
  433. package/src/components/FileItem/file-item.tsx +322 -0
  434. package/src/components/FileUpload/file-upload.tsx +326 -0
  435. package/src/components/FileViewer/file-viewer-types.ts +76 -0
  436. package/src/components/FileViewer/file-viewer.tsx +1065 -0
  437. package/src/components/FileViewer/image-renderer.tsx +256 -0
  438. package/src/components/HoverCard/hover-card.tsx +79 -0
  439. package/src/components/Input/input.tsx +233 -0
  440. package/src/components/LinkInput/link-input.tsx +304 -0
  441. package/src/components/Menu/menu-item.tsx +334 -0
  442. package/src/components/NameCard/name-card.tsx +319 -0
  443. package/src/components/Notice/notice.tsx +196 -0
  444. package/src/components/NumberInput/number-input.tsx +203 -0
  445. package/src/components/OverflowIndicator/overflow-indicator.tsx +156 -0
  446. package/src/components/PeoplePicker/avatar-stack-overflow.ts +100 -0
  447. package/src/components/PeoplePicker/people-picker-helpers.ts +76 -0
  448. package/src/components/PeoplePicker/people-picker.tsx +455 -0
  449. package/src/components/PeoplePicker/person-display.tsx +358 -0
  450. package/src/components/Popover/popover.tsx +183 -0
  451. package/src/components/ProgressBar/progress-bar.tsx +157 -0
  452. package/src/components/README.md +58 -0
  453. package/src/components/RadioGroup/radio-group.tsx +261 -0
  454. package/src/components/Rating/rating.tsx +295 -0
  455. package/src/components/ScrollArea/scroll-area.tsx +110 -0
  456. package/src/components/SegmentedControl/segmented-control.tsx +304 -0
  457. package/src/components/Select/select.tsx +658 -0
  458. package/src/components/SelectMenu/select-menu.tsx +430 -0
  459. package/src/components/SelectionControl/selection-item.tsx +261 -0
  460. package/src/components/Separator/separator.tsx +48 -0
  461. package/src/components/Sheet/sheet.tsx +240 -0
  462. package/src/components/Sidebar/sidebar.tsx +1280 -0
  463. package/src/components/Skeleton/skeleton.tsx +35 -0
  464. package/src/components/Slider/slider.tsx +158 -0
  465. package/src/components/Steps/steps.tsx +850 -0
  466. package/src/components/Switch/switch.tsx +285 -0
  467. package/src/components/Tabs/tabs.tsx +515 -0
  468. package/src/components/Tag/tag.tsx +246 -0
  469. package/src/components/Textarea/textarea.tsx +280 -0
  470. package/src/components/TimePicker/time-columns.tsx +260 -0
  471. package/src/components/TimePicker/time-picker.tsx +419 -0
  472. package/src/components/Toast/toast.tsx +129 -0
  473. package/src/components/Tooltip/tooltip.tsx +68 -0
  474. package/src/components/TreeView/tree-view.tsx +1031 -0
  475. package/src/hooks/use-controllable.ts +40 -0
  476. package/src/hooks/use-is-narrow-viewport.ts +19 -0
  477. package/src/hooks/use-is-touch-device.ts +21 -0
  478. package/src/hooks/use-overflow-items.ts +256 -0
  479. package/src/index.ts +85 -0
  480. package/src/lib/README.md +82 -0
  481. package/src/lib/drag-visual.ts +272 -0
  482. package/src/lib/i18n/README.md +60 -0
  483. package/src/lib/i18n/i18n-context.tsx +129 -0
  484. package/src/lib/multi-select-ordering.ts +61 -0
  485. package/src/lib/utils.ts +93 -0
  486. package/src/patterns/README.md +67 -0
  487. package/src/patterns/element-anatomy/item-anatomy.tsx +744 -0
  488. package/src/patterns/header-canonical/chrome-header.tsx +175 -0
  489. package/src/patterns/header-canonical/header-canonical.css +27 -0
  490. package/src/patterns/horizontal-overflow/horizontal-overflow.tsx +217 -0
  491. package/src/patterns/overlay-surface/overlay-surface.tsx +191 -0
  492. package/src/patterns/resize-handle/resize-handle.tsx +188 -0
  493. package/src/stories-helpers/anatomy/anatomy-utils.tsx +64 -0
  494. package/src/styles/preset.css +31 -0
  495. package/src/styles/tokens.css +35 -0
  496. package/src/tokens/README.md +53 -0
  497. package/src/tokens/color/primitives.css +429 -0
  498. package/src/tokens/color/semantic.css +539 -0
  499. package/src/tokens/elevation/overlay-geometry.ts +13 -0
  500. package/src/tokens/layoutSpace/layoutSpace.css +36 -0
  501. package/src/tokens/motion/motion.css +30 -0
  502. package/src/tokens/motion/motion.ts +17 -0
  503. package/src/tokens/opacity/opacity.css +23 -0
  504. package/src/tokens/radius/radius.css +19 -0
  505. package/src/tokens/typography/typography.css +118 -0
  506. package/src/tokens/uiSize/icon-size.ts +52 -0
  507. package/src/tokens/uiSize/uiSize.css +125 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-surface.js","sources":["../../../src/patterns/overlay-surface/overlay-surface.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\n/**\n * @internal — DS-internal primitive(2026-05-23 per `.claude/rules/ui-development.md` Public vs Internal canonical)。\n * end-user app 直接 import 無 functioning UI;由 Dialog / Sheet / Popover / HoverCard / Coachmark 等 DS overlay 元件 wrap 消費。\n *\n * Overlay Surface primitives — Dialog / Popover / Sheet 共用結構化 sub-components。\n *\n * 抽象這層避免各自硬寫 padding / border 導致漂移。有特殊行為(Dialog Close 按鈕 /\n * viewport-fill 高度)由 consumer 額外包裝,不污染 primitive。\n *\n * ── Header / Footer 高度 canonical(2026-04-22 v3 校準,user intent 精確實作)──\n * **Padding-based sizing**:`py-[var(--layout-space-tight)]`,高度 = max(child) + 2×tight\n * 不用 fixed `min-h`(先前誤用 min-h-chrome-header-height 會讓 bounded button 被鎖死在 48\n * slot 失去自然高度,違反 user 意圖)。\n *\n * 對齊 `--chrome-header-height`(48/56)的**條件**:header 只放 unbounded 控件(close X /\n * text variant button,**native sm + v5 unbounded trick layout 佔位 24**):\n * header = 24 + 2×tight = 48 md / 56 lg ✓。\n *\n * 若 header 塞 **bounded 控件**(primary / tertiary with bg/border):header 自然長高\n * (sm 28 + 2×12 = 52 md),因 bounded 按鈕有視覺邊界,padding 不會顯得過大 — 這是預期的。\n *\n * ── Unbounded controls 在 header canonical(v5 trick,2026-04-22)──\n * Dismiss X(always unbounded)+ text variant header action → **`size=\"sm\"` native**\n * + SurfaceHeader CSS 自動套負 my trick(對 `[data-unbounded]`),layout 佔位縮回 24\n * (xs 等同)。Rationale:button native size 跟 touch target 保留 sm(a11y 最小 24+ hit\n * target,視覺 render 仍 28/32),layout 佔位精確匹配 chrome-header-height 幾何。詳\n * `overlay-surface.spec.md`「Chrome dismiss size canonical」。\n *\n * **Notification banner family**(Notice / Alert / Toast,fixed `px-4 py-3` variant,\n * 無 padding-based header)→ dismiss 用 `size=\"xs\"` explicit(24 固定,無 trick)。\n *\n * ── Token 規則 ──\n * horizontal padding: `px-[var(--layout-space-loose)]`\n * vertical padding: `py-[var(--layout-space-tight)]`\n * 分隔線: `border-{b|t} border-divider`\n *\n * ── Body ──\n * Body padding-based(content area),`px-[var(--layout-space-loose)] py-[var(--layout-space-tight)]`。\n * Dialog / Sheet body 走 ScrollArea + chrome padding(`px-loose pt-tight pb-bottom`)。\n * List-as-region 場景(menu / Cmd+K)由 consumer 用 className override 撤 chrome padding +\n * 自管 list outer wrapper(詳 overlay-surface.spec.md「List-as-region in overlay body」)。\n */\n\n// Chrome-slot layout trick(2026-04-22 v5,2026-05-04 重思 parameterize):\n// **所有 unbounded control**(Button with `data-unbounded=\"true\"` — Button 自動在 variant=\"text\" 或 dismiss\n// 時標記)的 **native size 不變**(sm: 28 md / 32 lg),但 **layout 佔位** via 負 `my` 縮成 `--chrome-slot-h`。\n//\n// **Slot height = header title 的 line-height**(讓 button 不 dominate,title 自然撐 header)\n// - Default `var(--field-height-xs)` = 24,匹配 Dialog/Sheet text-body-lg (16 × 1.5 = 24)\n// - Popover/Coachmark override `--chrome-slot-h: 1.25rem` (20),匹配 text-body (14 × 1.5 ≈ 21,floor 20)\n//\n// Header 永遠 padding-based(無 min-h),但因 slot ≤ title line-height,header 高度由 title 主導:\n// - Dialog: max(24 title, 24 slot) + py-tight(12*2)= 48 ✓ chrome-header-height\n// - Popover: max(21 title, 20 slot) + py-tight(12*2)= 45 ✓ 自然輕量\n// Q10 穩定性:title-only / title+button / refresh in/out 全 case header 高度 = title + py(slot 不 dominate)\n//\n// 負 my 公式:(slot - native) / 2,density-aware:\n// Dialog md: (24 - 28) / 2 = -2px; lg: (24 - 32) / 2 = -4px\n// Popover md: (20 - 28) / 2 = -4px\nconst CHROME_UNBOUNDED_SLOT = '[&_[data-unbounded]]:my-[calc((var(--chrome-slot-h,var(--field-height-xs))-var(--field-height-sm))/2)]'\n\nexport interface SurfaceHeaderProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * 是否內含 Tabs。\n * true(無 tabsSlot)→ 移除自身 border-b。\n * 若提供 tabsSlot,自動 column mode + auto suppress border(不需手動傳 withTabs=true)。\n * 對齊 patterns/header-canonical/header-canonical.spec.md W1\n * 「Header semantic owner / TabsList paint owner in withTabs state」。\n */\n withTabs?: boolean\n /**\n * Tabs row slot(2026-05-18 加 per header-canonical.spec.md W2/W4 真實能用 + user-mandated fix)。\n * 提供時 SurfaceHeader 自動 column 結構:\n * row 1 = children(title + actions/dismiss,px-loose py-tight)\n * row 2 = tabsSlot 包在 `<div px-loose border-b border-divider>`\n * ↑ wrapper 提供 W2 padding inheritance + 全寬 paint(W1 視覺一條線)\n *\n * Consumer 傳:`tabsSlot={<TabsList>...</TabsList>}`,TabsContent 仍放 DialogBody 內。\n * `<Tabs>` root 必須 wrap 整 DialogContent(Radix TabsList ↔ TabsContent 同 root 連動)。\n *\n * 提供 tabsSlot 自動 withTabs=true,不需另傳 prop。\n */\n tabsSlot?: React.ReactNode\n}\n\nexport const SurfaceHeader = React.forwardRef<\n HTMLDivElement,\n SurfaceHeaderProps\n>(({ className, withTabs, tabsSlot, children, ...props }, ref) => {\n // tabsSlot 提供 → 自動 withTabs(consumer 不需手動兩個 prop)\n const hasTabs = tabsSlot != null || withTabs === true\n\n // Column mode(tabsSlot 提供時)— 對應 header-canonical.spec.md W2 + W4\n if (tabsSlot != null) {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col shrink-0', className)}\n {...props}\n >\n {/* Row 1:header content row(原 single-row behavior 不變,但 border-b 撤掉,row 2 wrapper 接管 paint)*/}\n <div\n className={cn(\n 'flex items-center gap-2',\n 'px-[var(--layout-space-loose)] py-[var(--layout-space-tight)]',\n CHROME_UNBOUNDED_SLOT,\n )}\n >\n {children}\n </div>\n {/* Row 2:tabsSlot wrapper — TabsList 全 dialog 寬 + 內 px-loose padding inset triggers\n 2026-05-18 v3 fix(user verbatim approval「你確定這樣是世界級的設計且符合我們一致的設計\n 語言和 SSOT...就這樣做」):\n - v1: wrapper border + TabsList border = 雙線(W1 違反)\n - v2: wrapper px-loose + TabsList w-full inside = border 只跨 dialog - 2×px-loose\n (不到 dialog 邊 user 抓「分隔線寬度應該要填滿整個 dialog」)\n - v3(本):wrapper 不 inset,TabsList 自己 px-loose 內 padding inset triggers\n → TabsList border-b 延展全 dialog 寬,triggers 對齊 header content\n 對齊既有 `tabs.spec.md:199`「TabsList 自身 border-b border-border 延展全 header 寬,因\n TabsList wrapper 是 block-level full-width」+ `:187-189`「selected 底線從 TabsList\n gray border 位置長出來」+ GitHub Primer UnderlineNav / Ant Design line type / Mantine\n default 共識(全派 TabsList 自畫 full-width underline)。*/}\n <div className=\"[&>[role=tablist]]:w-full [&>[role=tablist]]:px-[var(--layout-space-loose)]\">\n {tabsSlot}\n </div>\n </div>\n )\n }\n\n // Padding-based(預設) — Dialog/Sheet 用 body-lg title (16/24),自然撐 max(24 title, 24 button slot) = 24\n // → header = 24 + py-tight 12×2 = 48 chrome-header-height ✓ 穩定無需 min-h\n // Popover 等輕量 chrome 走 PopoverHeader override(min-h-10 + py-2 = 40,內 24 匹配 button slot)\n //\n // withTabs=true(無 tabsSlot,backward compat):移除 border-b,consumer 自畫\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center gap-2 shrink-0',\n !hasTabs && 'border-b border-divider',\n 'px-[var(--layout-space-loose)] py-[var(--layout-space-tight)]',\n CHROME_UNBOUNDED_SLOT,\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n})\nSurfaceHeader.displayName = 'SurfaceHeader'\n\nexport const SurfaceBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n // 2026-05-04 viewport-aware scroll canonical:\n // parent(PopoverContent / HoverCardContent / Dialog / Sheet)是 flex flex-col + max-h + overflow-hidden\n // header / footer shrink-0;Body flex-1 min-h-0 overflow-y-auto → 視窗太小時 body 內 scroll\n // 非 flex-col parent 內 flex-1/min-h-0 no-op,backward compat\n <div\n ref={ref}\n className={cn(\n 'flex-1 min-h-0 overflow-y-auto',\n 'px-[var(--layout-space-loose)] py-[var(--layout-space-tight)]',\n className,\n )}\n {...props}\n />\n))\nSurfaceBody.displayName = 'SurfaceBody'\n\nexport const SurfaceFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex items-center justify-end gap-2 shrink-0 border-t border-divider',\n 'px-[var(--layout-space-loose)] py-[var(--layout-space-tight)]',\n className,\n )}\n {...props}\n />\n))\nSurfaceFooter.displayName = 'SurfaceFooter'\n"],"names":[],"mappings":";;;AA8DA,MAAM,wBAAwB;AA2BvB,MAAM,gBAAgB,MAAM,WAGjC,CAAC,EAAE,WAAW,UAAU,UAAU,UAAU,GAAG,MAAA,GAAS,QAAQ;AAEhE,QAAM,UAAU,YAAY,QAAQ,aAAa;AAGjD,MAAI,YAAY,MAAM;AACpB,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW,GAAG,0BAA0B,SAAS;AAAA,QAChD,GAAG;AAAA,QAGJ,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAAA,cAGD;AAAA,YAAA;AAAA,UAAA;AAAA,UAcH,oBAAC,OAAA,EAAI,WAAU,+EACZ,UAAA,SAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAOA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,CAAC,WAAW;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AACD,cAAc,cAAc;AAErB,MAAM,cAAc,MAAM,WAG/B,CAAC,EAAE,WAAW,GAAG,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAK1B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAAA,CAEP;AACD,YAAY,cAAc;AAEnB,MAAM,gBAAgB,MAAM,WAGjC,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QAC1B;AAAA,EAAC;AAAA,EAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN,CACD;AACD,cAAc,cAAc;"}
@@ -0,0 +1,102 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * ResizeHandle — pattern primitive for drag-to-resize visual + a11y(2026-05-21 v1 ship per
4
+ * user「style 難道不用跟 data table column resize 維持 ssot」+「都照你建議做」approval)。
5
+ *
6
+ * ── 定位 ──
7
+ * 統一所有 drag-resize affordance 的視覺 / cursor / 命中區 / a11y attributes。
8
+ * Consumer 自管 drag math(TanStack column resize / Sidebar drag-resize / Aside drag-resize
9
+ * 各有不同 width state pathway,本 primitive 不耦合)。
10
+ *
11
+ * Consumers(roadmap per spec.md):
12
+ * - Phase 1(本 commit):primitive ship,DataTable / Sidebar / Aside 尚未 migrate
13
+ * - Phase 2(future):DataTable column resize migrate(TanStack `header.getResizeHandler()` 接入)
14
+ * - Phase 3(future):Sidebar drag-resize enable
15
+ * - Phase 4(future):AppShell Aside drag-resize enable
16
+ *
17
+ * ── 實作基礎 ──
18
+ * 視覺對齊 DataTable column resize 既有 canonical(7px 命中區 + 1px line + cursor:col-resize
19
+ * + hover border-hover + dragging primary)。direction='vertical' 同 idiom 軸換 row-resize。
20
+ *
21
+ * ── 消費的 SSOT ──
22
+ * - tokens: [--border-hover, --divider, --primary, --table-cell-py(只 DataTable consumer 用)]
23
+ * - patterns: none(self-contained primitive)
24
+ *
25
+ * ── World-class 對照 ──
26
+ * - AG Grid column resize handle(7-8px hit zone + 1px line)
27
+ * - Material X-DataGrid `MuiDataGrid-iconSeparator`(同 visual idiom)
28
+ * - Notion column / sidebar resize handle(同 cursor + line + hover affordance)
29
+ * - VS Code activity bar / sidebar resize(8px hit zone + bg highlight on drag)
30
+ * - Figma left panel resize(8px hit zone + 1px line)
31
+ *
32
+ * 統一共識:hit zone ≥ 7px(fingertip-friendly)/ 1px visual line(non-intrusive)/
33
+ * hover affordance(stronger line) / drag feedback(primary highlight) /
34
+ * a11y `role="separator"` + `aria-orientation` + 描述性 aria-label。
35
+ */
36
+ export interface ResizeHandleProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'role'> {
37
+ /**
38
+ * Drag 方向。`horizontal` = 拖拉左右(column resize / sidebar width);
39
+ * `vertical` = 拖拉上下(row resize / panel height)。決定 cursor + aria-orientation。
40
+ */
41
+ direction: 'horizontal' | 'vertical';
42
+ /**
43
+ * 命中區相對於容器位置。`end` = 右側(column right edge / sidebar right edge);
44
+ * `start` = 左側(較少用);`vertical` direction 同邏輯:end=bottom / start=top。
45
+ */
46
+ position?: 'start' | 'end';
47
+ /**
48
+ * 是否處於拖拉中。consumer 自管(eg. `header.column.getIsResizing?.()` for TanStack /
49
+ * `isDragging` boolean for sidebar)。primary 色 highlight feedback。
50
+ */
51
+ isResizing?: boolean;
52
+ /**
53
+ * 是否禁用拖拉。consumer 透過 col / panel 的 resizable flag 決定。
54
+ * 禁用時不 render cursor + 不 attach a11y role。
55
+ */
56
+ disabled?: boolean;
57
+ /** a11y 描述性 label。consumer 必傳(eg. 「拖曳調整欄寬」/「拖曳調整側欄寬度」)。 */
58
+ 'aria-label': string;
59
+ /**
60
+ * 是否畫 visual line(1px divider)。`false` = consumer 已 paint(eg. DataTable panel
61
+ * boundary col by panel-r 接管,不重複)。Default `true`。
62
+ */
63
+ showLine?: boolean;
64
+ /**
65
+ * Vertical line `top` / `bottom` inset(只 direction='horizontal' 用)。Default 0
66
+ * (full-height line)。DataTable 用 `var(--table-cell-py)` 縮到 cell padding 內(cell-fit line)。
67
+ */
68
+ lineInsetStart?: string;
69
+ /** 同上 inset 對位(bottom)。 */
70
+ lineInsetEnd?: string;
71
+ }
72
+ /**
73
+ * Primitive consumer pattern:
74
+ *
75
+ * ```tsx
76
+ * // DataTable column resize(future Phase 2 migrate sample)
77
+ * <ResizeHandle
78
+ * direction="horizontal"
79
+ * position="end"
80
+ * isResizing={header.column.getIsResizing?.()}
81
+ * disabled={!isResizable}
82
+ * aria-label="拖曳調整欄寬"
83
+ * onPointerDownCapture={(e) => {
84
+ * e.stopPropagation()
85
+ * header.getResizeHandler?.()(e.nativeEvent)
86
+ * }}
87
+ * lineInsetStart="var(--table-cell-py)"
88
+ * lineInsetEnd="var(--table-cell-py)"
89
+ * />
90
+ *
91
+ * // Sidebar drag-resize(future Phase 3 sample)
92
+ * <ResizeHandle
93
+ * direction="horizontal"
94
+ * position="end"
95
+ * isResizing={isDragging}
96
+ * aria-label="拖曳調整側欄寬度"
97
+ * onPointerDown={startDrag}
98
+ * />
99
+ * ```
100
+ */
101
+ export declare const ResizeHandle: React.ForwardRefExoticComponent<ResizeHandleProps & React.RefAttributes<HTMLSpanElement>>;
102
+ //# sourceMappingURL=resize-handle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize-handle.d.ts","sourceRoot":"","sources":["../../../src/patterns/resize-handle/resize-handle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAC5F;;;OAGG;IACH,SAAS,EAAE,YAAY,GAAG,UAAU,CAAA;IACpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;IAC1B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,YAAY,2FAmFxB,CAAA"}
@@ -0,0 +1,74 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../../lib/utils.js";
4
+ const ResizeHandle = React.forwardRef(
5
+ ({
6
+ direction,
7
+ position = "end",
8
+ isResizing,
9
+ disabled,
10
+ showLine = true,
11
+ lineInsetStart,
12
+ lineInsetEnd,
13
+ className,
14
+ ...props
15
+ }, ref) => {
16
+ const isHorizontal = direction === "horizontal";
17
+ const ariaOrientation = isHorizontal ? "vertical" : "horizontal";
18
+ const hitZoneStyle = isHorizontal ? {
19
+ position: "absolute",
20
+ top: 0,
21
+ bottom: 0,
22
+ width: 7,
23
+ ...position === "end" ? { right: 0, marginRight: -3 } : { left: 0, marginLeft: -3 },
24
+ cursor: disabled ? void 0 : "col-resize"
25
+ } : {
26
+ position: "absolute",
27
+ left: 0,
28
+ right: 0,
29
+ height: 7,
30
+ ...position === "end" ? { bottom: 0, marginBottom: -3 } : { top: 0, marginTop: -3 },
31
+ cursor: disabled ? void 0 : "row-resize"
32
+ };
33
+ const lineColorClass = isResizing ? "bg-primary" : disabled ? "bg-divider" : "bg-divider group-hover/resize:bg-[var(--border-hover)]";
34
+ const lineStyle = isHorizontal ? {
35
+ position: "absolute",
36
+ width: 1,
37
+ top: lineInsetStart ?? 0,
38
+ bottom: lineInsetEnd ?? 0,
39
+ ...position === "end" ? { right: 3 } : { left: 3 }
40
+ } : {
41
+ position: "absolute",
42
+ height: 1,
43
+ left: lineInsetStart ?? 0,
44
+ right: lineInsetEnd ?? 0,
45
+ ...position === "end" ? { bottom: 3 } : { top: 3 }
46
+ };
47
+ const { "aria-label": ariaLabel, style: extraStyle, ...restProps } = props;
48
+ return /* @__PURE__ */ jsx(
49
+ "span",
50
+ {
51
+ ref,
52
+ role: disabled ? void 0 : "separator",
53
+ "aria-orientation": disabled ? void 0 : ariaOrientation,
54
+ "aria-label": disabled ? void 0 : ariaLabel,
55
+ style: { ...hitZoneStyle, ...extraStyle },
56
+ className: cn("group/resize", !disabled && "select-none", className),
57
+ ...restProps,
58
+ children: showLine && /* @__PURE__ */ jsx(
59
+ "span",
60
+ {
61
+ "aria-hidden": true,
62
+ className: cn("transition-colors", lineColorClass),
63
+ style: lineStyle
64
+ }
65
+ )
66
+ }
67
+ );
68
+ }
69
+ );
70
+ ResizeHandle.displayName = "ResizeHandle";
71
+ export {
72
+ ResizeHandle
73
+ };
74
+ //# sourceMappingURL=resize-handle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize-handle.js","sources":["../../../src/patterns/resize-handle/resize-handle.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '@/lib/utils'\n\n/**\n * ResizeHandle — pattern primitive for drag-to-resize visual + a11y(2026-05-21 v1 ship per\n * user「style 難道不用跟 data table column resize 維持 ssot」+「都照你建議做」approval)。\n *\n * ── 定位 ──\n * 統一所有 drag-resize affordance 的視覺 / cursor / 命中區 / a11y attributes。\n * Consumer 自管 drag math(TanStack column resize / Sidebar drag-resize / Aside drag-resize\n * 各有不同 width state pathway,本 primitive 不耦合)。\n *\n * Consumers(roadmap per spec.md):\n * - Phase 1(本 commit):primitive ship,DataTable / Sidebar / Aside 尚未 migrate\n * - Phase 2(future):DataTable column resize migrate(TanStack `header.getResizeHandler()` 接入)\n * - Phase 3(future):Sidebar drag-resize enable\n * - Phase 4(future):AppShell Aside drag-resize enable\n *\n * ── 實作基礎 ──\n * 視覺對齊 DataTable column resize 既有 canonical(7px 命中區 + 1px line + cursor:col-resize\n * + hover border-hover + dragging primary)。direction='vertical' 同 idiom 軸換 row-resize。\n *\n * ── 消費的 SSOT ──\n * - tokens: [--border-hover, --divider, --primary, --table-cell-py(只 DataTable consumer 用)]\n * - patterns: none(self-contained primitive)\n *\n * ── World-class 對照 ──\n * - AG Grid column resize handle(7-8px hit zone + 1px line)\n * - Material X-DataGrid `MuiDataGrid-iconSeparator`(同 visual idiom)\n * - Notion column / sidebar resize handle(同 cursor + line + hover affordance)\n * - VS Code activity bar / sidebar resize(8px hit zone + bg highlight on drag)\n * - Figma left panel resize(8px hit zone + 1px line)\n *\n * 統一共識:hit zone ≥ 7px(fingertip-friendly)/ 1px visual line(non-intrusive)/\n * hover affordance(stronger line) / drag feedback(primary highlight) /\n * a11y `role=\"separator\"` + `aria-orientation` + 描述性 aria-label。\n */\nexport interface ResizeHandleProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'role'> {\n /**\n * Drag 方向。`horizontal` = 拖拉左右(column resize / sidebar width);\n * `vertical` = 拖拉上下(row resize / panel height)。決定 cursor + aria-orientation。\n */\n direction: 'horizontal' | 'vertical'\n /**\n * 命中區相對於容器位置。`end` = 右側(column right edge / sidebar right edge);\n * `start` = 左側(較少用);`vertical` direction 同邏輯:end=bottom / start=top。\n */\n position?: 'start' | 'end'\n /**\n * 是否處於拖拉中。consumer 自管(eg. `header.column.getIsResizing?.()` for TanStack /\n * `isDragging` boolean for sidebar)。primary 色 highlight feedback。\n */\n isResizing?: boolean\n /**\n * 是否禁用拖拉。consumer 透過 col / panel 的 resizable flag 決定。\n * 禁用時不 render cursor + 不 attach a11y role。\n */\n disabled?: boolean\n /** a11y 描述性 label。consumer 必傳(eg. 「拖曳調整欄寬」/「拖曳調整側欄寬度」)。 */\n 'aria-label': string\n /**\n * 是否畫 visual line(1px divider)。`false` = consumer 已 paint(eg. DataTable panel\n * boundary col by panel-r 接管,不重複)。Default `true`。\n */\n showLine?: boolean\n /**\n * Vertical line `top` / `bottom` inset(只 direction='horizontal' 用)。Default 0\n * (full-height line)。DataTable 用 `var(--table-cell-py)` 縮到 cell padding 內(cell-fit line)。\n */\n lineInsetStart?: string\n /** 同上 inset 對位(bottom)。 */\n lineInsetEnd?: string\n}\n\n/**\n * Primitive consumer pattern:\n *\n * ```tsx\n * // DataTable column resize(future Phase 2 migrate sample)\n * <ResizeHandle\n * direction=\"horizontal\"\n * position=\"end\"\n * isResizing={header.column.getIsResizing?.()}\n * disabled={!isResizable}\n * aria-label=\"拖曳調整欄寬\"\n * onPointerDownCapture={(e) => {\n * e.stopPropagation()\n * header.getResizeHandler?.()(e.nativeEvent)\n * }}\n * lineInsetStart=\"var(--table-cell-py)\"\n * lineInsetEnd=\"var(--table-cell-py)\"\n * />\n *\n * // Sidebar drag-resize(future Phase 3 sample)\n * <ResizeHandle\n * direction=\"horizontal\"\n * position=\"end\"\n * isResizing={isDragging}\n * aria-label=\"拖曳調整側欄寬度\"\n * onPointerDown={startDrag}\n * />\n * ```\n */\nexport const ResizeHandle = React.forwardRef<HTMLSpanElement, ResizeHandleProps>(\n (\n {\n direction,\n position = 'end',\n isResizing,\n disabled,\n showLine = true,\n lineInsetStart,\n lineInsetEnd,\n className,\n ...props\n },\n ref,\n ) => {\n const isHorizontal = direction === 'horizontal'\n const ariaOrientation = isHorizontal ? 'vertical' : 'horizontal' // separator's axis is perpendicular to drag\n\n // 命中區用 inline style 而非 Tailwind arbitrary values(避免 Tailwind v4 JIT 對新增 arbitrary\n // class 在 dev mode 不更新 stylesheet 的 quirk;7px 是 primitive constant 非 token,inline 妥當)。\n const hitZoneStyle: React.CSSProperties = isHorizontal\n ? {\n position: 'absolute',\n top: 0,\n bottom: 0,\n width: 7,\n ...(position === 'end' ? { right: 0, marginRight: -3 } : { left: 0, marginLeft: -3 }),\n cursor: disabled ? undefined : 'col-resize',\n }\n : {\n position: 'absolute',\n left: 0,\n right: 0,\n height: 7,\n ...(position === 'end' ? { bottom: 0, marginBottom: -3 } : { top: 0, marginTop: -3 }),\n cursor: disabled ? undefined : 'row-resize',\n }\n\n // Visual line — 1px,position 端對齊。dragging=primary / hover=border-hover / idle=divider\n const lineColorClass = isResizing\n ? 'bg-primary'\n : disabled\n ? 'bg-divider'\n : 'bg-divider group-hover/resize:bg-[var(--border-hover)]'\n\n const lineStyle: React.CSSProperties = isHorizontal\n ? {\n position: 'absolute',\n width: 1,\n top: lineInsetStart ?? 0,\n bottom: lineInsetEnd ?? 0,\n ...(position === 'end' ? { right: 3 } : { left: 3 }),\n }\n : {\n position: 'absolute',\n height: 1,\n left: lineInsetStart ?? 0,\n right: lineInsetEnd ?? 0,\n ...(position === 'end' ? { bottom: 3 } : { top: 3 }),\n }\n\n // 抽 aria-label / style 由我們管,其他 ...props 不重複\n const { 'aria-label': ariaLabel, style: extraStyle, ...restProps } = props\n return (\n <span\n ref={ref}\n role={disabled ? undefined : 'separator'}\n aria-orientation={disabled ? undefined : ariaOrientation}\n aria-label={disabled ? undefined : ariaLabel}\n style={{ ...hitZoneStyle, ...extraStyle }}\n className={cn('group/resize', !disabled && 'select-none', className)}\n {...restProps}\n >\n {showLine && (\n <span\n aria-hidden\n className={cn('transition-colors', lineColorClass)}\n style={lineStyle}\n />\n )}\n </span>\n )\n },\n)\nResizeHandle.displayName = 'ResizeHandle'\n"],"names":[],"mappings":";;;AAuGO,MAAM,eAAe,MAAM;AAAA,EAChC,CACE;AAAA,IACE;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,eAAe,cAAc;AACnC,UAAM,kBAAkB,eAAe,aAAa;AAIpD,UAAM,eAAoC,eACtC;AAAA,MACE,UAAU;AAAA,MACV,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,GAAI,aAAa,QAAQ,EAAE,OAAO,GAAG,aAAa,GAAA,IAAO,EAAE,MAAM,GAAG,YAAY,GAAA;AAAA,MAChF,QAAQ,WAAW,SAAY;AAAA,IAAA,IAEjC;AAAA,MACE,UAAU;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,GAAI,aAAa,QAAQ,EAAE,QAAQ,GAAG,cAAc,GAAA,IAAO,EAAE,KAAK,GAAG,WAAW,GAAA;AAAA,MAChF,QAAQ,WAAW,SAAY;AAAA,IAAA;AAIrC,UAAM,iBAAiB,aACnB,eACA,WACE,eACA;AAEN,UAAM,YAAiC,eACnC;AAAA,MACE,UAAU;AAAA,MACV,OAAO;AAAA,MACP,KAAK,kBAAkB;AAAA,MACvB,QAAQ,gBAAgB;AAAA,MACxB,GAAI,aAAa,QAAQ,EAAE,OAAO,EAAA,IAAM,EAAE,MAAM,EAAA;AAAA,IAAE,IAEpD;AAAA,MACE,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,MAAM,kBAAkB;AAAA,MACxB,OAAO,gBAAgB;AAAA,MACvB,GAAI,aAAa,QAAQ,EAAE,QAAQ,EAAA,IAAM,EAAE,KAAK,EAAA;AAAA,IAAE;AAIxD,UAAM,EAAE,cAAc,WAAW,OAAO,YAAY,GAAG,cAAc;AACrE,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAM,WAAW,SAAY;AAAA,QAC7B,oBAAkB,WAAW,SAAY;AAAA,QACzC,cAAY,WAAW,SAAY;AAAA,QACnC,OAAO,EAAE,GAAG,cAAc,GAAG,WAAA;AAAA,QAC7B,WAAW,GAAG,gBAAgB,CAAC,YAAY,eAAe,SAAS;AAAA,QAClE,GAAG;AAAA,QAEH,UAAA,YACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,WAAW,GAAG,qBAAqB,cAAc;AAAA,YACjD,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACT;AAAA,IAAA;AAAA,EAIR;AACF;AACA,aAAa,cAAc;"}
@@ -0,0 +1,457 @@
1
+ /* Variables declaration */
2
+ .rdp-root {
3
+ --rdp-accent-color: blue; /* The accent color used for selected days and UI elements. */
4
+ --rdp-accent-background-color: #f0f0ff; /* The accent background color used for selected days and UI elements. */
5
+
6
+ --rdp-day-height: 44px; /* The height of the day cells. */
7
+ --rdp-day-width: 44px; /* The width of the day cells. */
8
+
9
+ --rdp-day_button-border-radius: 100%; /* The border radius of the day cells. */
10
+ --rdp-day_button-border: 2px solid transparent; /* The border of the day cells. */
11
+ --rdp-day_button-height: 42px; /* The height of the day cells. */
12
+ --rdp-day_button-width: 42px; /* The width of the day cells. */
13
+
14
+ --rdp-selected-border: 2px solid var(--rdp-accent-color); /* The border of the selected days. */
15
+ --rdp-disabled-opacity: 0.5; /* The opacity of the disabled days. */
16
+ --rdp-outside-opacity: 0.75; /* The opacity of the days outside the current month. */
17
+ --rdp-today-color: var(--rdp-accent-color); /* The color of the today's date. */
18
+
19
+ --rdp-dropdown-gap: 0.5rem; /* The gap between the dropdowns used in the month captons. */
20
+
21
+ --rdp-months-gap: 2rem; /* The gap between the months in the multi-month view. */
22
+
23
+ --rdp-nav_button-disabled-opacity: 0.5; /* The opacity of the disabled navigation buttons. */
24
+ --rdp-nav_button-height: 2.25rem; /* The height of the navigation buttons. */
25
+ --rdp-nav_button-width: 2.25rem; /* The width of the navigation buttons. */
26
+ --rdp-nav-height: 2.75rem; /* The height of the navigation bar. */
27
+
28
+ --rdp-range_middle-background-color: var(--rdp-accent-background-color); /* The color of the background for days in the middle of a range. */
29
+ --rdp-range_middle-color: inherit; /* The color of the range text. */
30
+
31
+ --rdp-range_start-color: white; /* The color of the range text. */
32
+ --rdp-range_start-background: linear-gradient(
33
+ var(--rdp-gradient-direction),
34
+ transparent 50%,
35
+ var(--rdp-range_middle-background-color) 50%
36
+ ); /* Used for the background of the start of the selected range. */
37
+ --rdp-range_start-date-background-color: var(--rdp-accent-color); /* The background color of the date when at the start of the selected range. */
38
+
39
+ --rdp-range_end-background: linear-gradient(
40
+ var(--rdp-gradient-direction),
41
+ var(--rdp-range_middle-background-color) 50%,
42
+ transparent 50%
43
+ ); /* Used for the background of the end of the selected range. */
44
+ --rdp-range_end-color: white; /* The color of the range text. */
45
+ --rdp-range_end-date-background-color: var(--rdp-accent-color); /* The background color of the date when at the end of the selected range. */
46
+
47
+ --rdp-week_number-border-radius: 100%; /* The border radius of the week number. */
48
+ --rdp-week_number-border: 2px solid transparent; /* The border of the week number. */
49
+
50
+ --rdp-week_number-height: var(--rdp-day-height); /* The height of the week number cells. */
51
+ --rdp-week_number-opacity: 0.75; /* The opacity of the week number. */
52
+ --rdp-week_number-width: var(--rdp-day-width); /* The width of the week number cells. */
53
+ --rdp-weeknumber-text-align: center; /* The text alignment of the weekday cells. */
54
+
55
+ --rdp-weekday-opacity: 0.75; /* The opacity of the weekday. */
56
+ --rdp-weekday-padding: 0.5rem 0rem; /* The padding of the weekday. */
57
+ --rdp-weekday-text-align: center; /* The text alignment of the weekday cells. */
58
+
59
+ --rdp-gradient-direction: 90deg;
60
+
61
+ --rdp-animation_duration: 0.3s;
62
+ --rdp-animation_timing: cubic-bezier(0.4, 0, 0.2, 1);
63
+ }
64
+
65
+ .rdp-root[dir="rtl"] {
66
+ --rdp-gradient-direction: -90deg;
67
+ }
68
+
69
+ .rdp-root[data-broadcast-calendar="true"] {
70
+ --rdp-outside-opacity: unset;
71
+ }
72
+
73
+ /* Root of the component. */
74
+ .rdp-root {
75
+ position: relative; /* Required to position the navigation toolbar. */
76
+ box-sizing: border-box;
77
+ }
78
+
79
+ .rdp-root * {
80
+ box-sizing: border-box;
81
+ }
82
+
83
+ .rdp-day {
84
+ width: var(--rdp-day-width);
85
+ height: var(--rdp-day-height);
86
+ text-align: center;
87
+ }
88
+
89
+ .rdp-day_button {
90
+ background: none;
91
+ padding: 0;
92
+ margin: 0;
93
+ cursor: pointer;
94
+ font: inherit;
95
+ color: inherit;
96
+ justify-content: center;
97
+ align-items: center;
98
+ display: flex;
99
+
100
+ width: var(--rdp-day_button-width);
101
+ height: var(--rdp-day_button-height);
102
+ border: var(--rdp-day_button-border);
103
+ border-radius: var(--rdp-day_button-border-radius);
104
+ }
105
+
106
+ .rdp-day_button:disabled {
107
+ cursor: revert;
108
+ }
109
+
110
+ .rdp-caption_label {
111
+ z-index: 1;
112
+
113
+ position: relative;
114
+ display: inline-flex;
115
+ align-items: center;
116
+
117
+ white-space: nowrap;
118
+ border: 0;
119
+ }
120
+
121
+ .rdp-dropdown:focus-visible ~ .rdp-caption_label {
122
+ outline: 5px auto Highlight;
123
+ /* biome-ignore lint/suspicious/noDuplicateProperties: backward compatibility */
124
+ outline: 5px auto -webkit-focus-ring-color;
125
+ }
126
+
127
+ .rdp-button_next,
128
+ .rdp-button_previous {
129
+ border: none;
130
+ background: none;
131
+ padding: 0;
132
+ margin: 0;
133
+ cursor: pointer;
134
+ font: inherit;
135
+ color: inherit;
136
+ -moz-appearance: none;
137
+ -webkit-appearance: none;
138
+ display: inline-flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ position: relative;
142
+ appearance: none;
143
+
144
+ width: var(--rdp-nav_button-width);
145
+ height: var(--rdp-nav_button-height);
146
+ }
147
+
148
+ .rdp-button_next:disabled,
149
+ .rdp-button_next[aria-disabled="true"],
150
+ .rdp-button_previous:disabled,
151
+ .rdp-button_previous[aria-disabled="true"] {
152
+ cursor: revert;
153
+
154
+ opacity: var(--rdp-nav_button-disabled-opacity);
155
+ }
156
+
157
+ .rdp-chevron {
158
+ display: inline-block;
159
+ fill: var(--rdp-accent-color);
160
+ }
161
+
162
+ .rdp-root[dir="rtl"] .rdp-nav .rdp-chevron {
163
+ transform: rotate(180deg);
164
+ transform-origin: 50%;
165
+ }
166
+
167
+ .rdp-dropdowns {
168
+ position: relative;
169
+ display: inline-flex;
170
+ align-items: center;
171
+ gap: var(--rdp-dropdown-gap);
172
+ }
173
+ .rdp-dropdown {
174
+ z-index: 2;
175
+
176
+ /* Reset */
177
+ opacity: 0;
178
+ appearance: none;
179
+ position: absolute;
180
+ inset-block-start: 0;
181
+ inset-block-end: 0;
182
+ inset-inline-start: 0;
183
+ width: 100%;
184
+ margin: 0;
185
+ padding: 0;
186
+ cursor: inherit;
187
+ border: none;
188
+ line-height: inherit;
189
+ }
190
+
191
+ .rdp-dropdown_root {
192
+ position: relative;
193
+ display: inline-flex;
194
+ align-items: center;
195
+ }
196
+
197
+ .rdp-dropdown_root[data-disabled="true"] .rdp-chevron {
198
+ opacity: var(--rdp-disabled-opacity);
199
+ }
200
+
201
+ .rdp-month_caption {
202
+ display: flex;
203
+ align-content: center;
204
+ height: var(--rdp-nav-height);
205
+ font-weight: bold;
206
+ font-size: large;
207
+ }
208
+
209
+ .rdp-root[data-nav-layout="around"] .rdp-month,
210
+ .rdp-root[data-nav-layout="after"] .rdp-month {
211
+ position: relative;
212
+ }
213
+
214
+ .rdp-root[data-nav-layout="around"] .rdp-month_caption {
215
+ justify-content: center;
216
+ margin-inline-start: var(--rdp-nav_button-width);
217
+ margin-inline-end: var(--rdp-nav_button-width);
218
+ position: relative;
219
+ }
220
+
221
+ .rdp-root[data-nav-layout="around"] .rdp-button_previous {
222
+ position: absolute;
223
+ inset-inline-start: 0;
224
+ top: 0;
225
+ height: var(--rdp-nav-height);
226
+ display: inline-flex;
227
+ }
228
+
229
+ .rdp-root[data-nav-layout="around"] .rdp-button_next {
230
+ position: absolute;
231
+ inset-inline-end: 0;
232
+ top: 0;
233
+ height: var(--rdp-nav-height);
234
+ display: inline-flex;
235
+ justify-content: center;
236
+ }
237
+
238
+ .rdp-months {
239
+ position: relative;
240
+ display: flex;
241
+ flex-wrap: wrap;
242
+ gap: var(--rdp-months-gap);
243
+ max-width: fit-content;
244
+ }
245
+
246
+ .rdp-month_grid {
247
+ border-collapse: collapse;
248
+ }
249
+
250
+ .rdp-nav {
251
+ position: absolute;
252
+ inset-block-start: 0;
253
+ inset-inline-end: 0;
254
+
255
+ display: flex;
256
+ align-items: center;
257
+
258
+ height: var(--rdp-nav-height);
259
+ }
260
+
261
+ .rdp-weekday {
262
+ opacity: var(--rdp-weekday-opacity);
263
+ padding: var(--rdp-weekday-padding);
264
+ font-weight: 500;
265
+ font-size: smaller;
266
+ text-align: var(--rdp-weekday-text-align);
267
+ text-transform: var(--rdp-weekday-text-transform);
268
+ }
269
+
270
+ .rdp-week_number {
271
+ opacity: var(--rdp-week_number-opacity);
272
+ font-weight: 400;
273
+ font-size: small;
274
+ height: var(--rdp-week_number-height);
275
+ width: var(--rdp-week_number-width);
276
+ border: var(--rdp-week_number-border);
277
+ border-radius: var(--rdp-week_number-border-radius);
278
+ text-align: var(--rdp-weeknumber-text-align);
279
+ }
280
+
281
+ /* DAY MODIFIERS */
282
+ .rdp-today:not(.rdp-outside) {
283
+ color: var(--rdp-today-color);
284
+ }
285
+
286
+ .rdp-selected {
287
+ font-weight: bold;
288
+ font-size: large;
289
+ }
290
+
291
+ .rdp-selected .rdp-day_button {
292
+ border: var(--rdp-selected-border);
293
+ }
294
+
295
+ .rdp-outside {
296
+ opacity: var(--rdp-outside-opacity);
297
+ }
298
+
299
+ .rdp-disabled:not(.rdp-selected) {
300
+ opacity: var(--rdp-disabled-opacity);
301
+ }
302
+
303
+ .rdp-hidden {
304
+ visibility: hidden;
305
+ color: var(--rdp-range_start-color);
306
+ }
307
+
308
+ .rdp-range_start {
309
+ background: var(--rdp-range_start-background);
310
+ }
311
+
312
+ .rdp-range_start .rdp-day_button {
313
+ background-color: var(--rdp-range_start-date-background-color);
314
+ color: var(--rdp-range_start-color);
315
+ }
316
+
317
+ .rdp-range_middle {
318
+ background-color: var(--rdp-range_middle-background-color);
319
+ }
320
+
321
+ .rdp-range_middle .rdp-day_button {
322
+ border: unset;
323
+ border-radius: unset;
324
+ color: var(--rdp-range_middle-color);
325
+ }
326
+
327
+ .rdp-range_end {
328
+ background: var(--rdp-range_end-background);
329
+ color: var(--rdp-range_end-color);
330
+ }
331
+
332
+ .rdp-range_end .rdp-day_button {
333
+ color: var(--rdp-range_start-color);
334
+ background-color: var(--rdp-range_end-date-background-color);
335
+ }
336
+
337
+ .rdp-range_start.rdp-range_end {
338
+ background: revert;
339
+ }
340
+
341
+ .rdp-focusable {
342
+ cursor: pointer;
343
+ }
344
+
345
+ @keyframes rdp-slide_in_left {
346
+ 0% {
347
+ transform: translateX(-100%);
348
+ }
349
+ 100% {
350
+ transform: translateX(0);
351
+ }
352
+ }
353
+
354
+ @keyframes rdp-slide_in_right {
355
+ 0% {
356
+ transform: translateX(100%);
357
+ }
358
+ 100% {
359
+ transform: translateX(0);
360
+ }
361
+ }
362
+
363
+ @keyframes rdp-slide_out_left {
364
+ 0% {
365
+ transform: translateX(0);
366
+ }
367
+ 100% {
368
+ transform: translateX(-100%);
369
+ }
370
+ }
371
+
372
+ @keyframes rdp-slide_out_right {
373
+ 0% {
374
+ transform: translateX(0);
375
+ }
376
+ 100% {
377
+ transform: translateX(100%);
378
+ }
379
+ }
380
+
381
+ .rdp-weeks_before_enter {
382
+ animation: rdp-slide_in_left var(--rdp-animation_duration)
383
+ var(--rdp-animation_timing) forwards;
384
+ }
385
+
386
+ .rdp-weeks_before_exit {
387
+ animation: rdp-slide_out_left var(--rdp-animation_duration)
388
+ var(--rdp-animation_timing) forwards;
389
+ }
390
+
391
+ .rdp-weeks_after_enter {
392
+ animation: rdp-slide_in_right var(--rdp-animation_duration)
393
+ var(--rdp-animation_timing) forwards;
394
+ }
395
+
396
+ .rdp-weeks_after_exit {
397
+ animation: rdp-slide_out_right var(--rdp-animation_duration)
398
+ var(--rdp-animation_timing) forwards;
399
+ }
400
+
401
+ .rdp-root[dir="rtl"] .rdp-weeks_after_enter {
402
+ animation: rdp-slide_in_left var(--rdp-animation_duration)
403
+ var(--rdp-animation_timing) forwards;
404
+ }
405
+
406
+ .rdp-root[dir="rtl"] .rdp-weeks_before_exit {
407
+ animation: rdp-slide_out_right var(--rdp-animation_duration)
408
+ var(--rdp-animation_timing) forwards;
409
+ }
410
+
411
+ .rdp-root[dir="rtl"] .rdp-weeks_before_enter {
412
+ animation: rdp-slide_in_right var(--rdp-animation_duration)
413
+ var(--rdp-animation_timing) forwards;
414
+ }
415
+
416
+ .rdp-root[dir="rtl"] .rdp-weeks_after_exit {
417
+ animation: rdp-slide_out_left var(--rdp-animation_duration)
418
+ var(--rdp-animation_timing) forwards;
419
+ }
420
+
421
+ @keyframes rdp-fade_in {
422
+ from {
423
+ opacity: 0;
424
+ }
425
+ to {
426
+ opacity: 1;
427
+ }
428
+ }
429
+
430
+ @keyframes rdp-fade_out {
431
+ from {
432
+ opacity: 1;
433
+ }
434
+ to {
435
+ opacity: 0;
436
+ }
437
+ }
438
+
439
+ .rdp-caption_after_enter {
440
+ animation: rdp-fade_in var(--rdp-animation_duration)
441
+ var(--rdp-animation_timing) forwards;
442
+ }
443
+
444
+ .rdp-caption_after_exit {
445
+ animation: rdp-fade_out var(--rdp-animation_duration)
446
+ var(--rdp-animation_timing) forwards;
447
+ }
448
+
449
+ .rdp-caption_before_enter {
450
+ animation: rdp-fade_in var(--rdp-animation_duration)
451
+ var(--rdp-animation_timing) forwards;
452
+ }
453
+
454
+ .rdp-caption_before_exit {
455
+ animation: rdp-fade_out var(--rdp-animation_duration)
456
+ var(--rdp-animation_timing) forwards;
457
+ }