@crisp-ui-kit/crisp 0.5.0 → 0.7.1

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 (472) hide show
  1. package/README.md +14 -0
  2. package/dist/accordion.css +9 -1
  3. package/dist/appshell.css +12 -4
  4. package/dist/authshell.css +57 -0
  5. package/dist/authshell.d.ts +7 -0
  6. package/dist/avatargroup.css +2 -2
  7. package/dist/badge.css +4 -4
  8. package/dist/barchart.css +13 -5
  9. package/dist/board.css +9 -1
  10. package/dist/bulkbar.css +11 -3
  11. package/dist/button.css +15 -1
  12. package/dist/button.d.ts +2 -1
  13. package/dist/card.css +8 -0
  14. package/dist/checkbox.css +17 -1
  15. package/dist/cjs/components/accordion/accordion.js +69 -0
  16. package/dist/cjs/components/accordion/accordion.recipe.js +26 -0
  17. package/dist/cjs/components/accordion/index.js +7 -0
  18. package/dist/cjs/components/avatar/avatar.js +44 -0
  19. package/dist/cjs/components/avatar/avatar.recipe.js +42 -0
  20. package/dist/cjs/components/avatar/index.js +7 -0
  21. package/dist/cjs/components/avatargroup/avatargroup.js +52 -0
  22. package/dist/cjs/components/avatargroup/avatargroup.recipe.js +18 -0
  23. package/dist/cjs/components/avatargroup/index.js +7 -0
  24. package/dist/cjs/components/badge/badge.js +44 -0
  25. package/dist/cjs/components/badge/badge.recipe.js +68 -0
  26. package/dist/cjs/components/badge/index.js +7 -0
  27. package/dist/cjs/components/barchart/barchart.js +45 -0
  28. package/dist/cjs/components/barchart/barchart.recipe.js +34 -0
  29. package/dist/cjs/components/barchart/index.js +7 -0
  30. package/dist/cjs/components/breadcrumb/breadcrumb.js +53 -0
  31. package/dist/cjs/components/breadcrumb/breadcrumb.recipe.js +21 -0
  32. package/dist/cjs/components/breadcrumb/index.js +7 -0
  33. package/dist/cjs/components/bulkbar/bulkbar.js +53 -0
  34. package/dist/cjs/components/bulkbar/bulkbar.recipe.js +31 -0
  35. package/dist/cjs/components/bulkbar/index.js +8 -0
  36. package/dist/cjs/components/button/button.js +62 -0
  37. package/dist/cjs/components/button/button.recipe.js +58 -0
  38. package/dist/cjs/components/button/index.js +7 -0
  39. package/dist/cjs/components/callout/callout.js +25 -0
  40. package/dist/cjs/components/callout/callout.recipe.js +29 -0
  41. package/dist/cjs/components/callout/index.js +7 -0
  42. package/dist/cjs/components/card/card.js +54 -0
  43. package/dist/cjs/components/card/card.recipe.js +31 -0
  44. package/dist/cjs/components/card/index.js +10 -0
  45. package/dist/cjs/components/checkbox/checkbox.js +56 -0
  46. package/dist/cjs/components/checkbox/checkbox.recipe.js +34 -0
  47. package/dist/cjs/components/checkbox/index.js +7 -0
  48. package/dist/cjs/components/columncalc/columncalc.js +139 -0
  49. package/dist/cjs/components/columncalc/columncalc.recipe.js +33 -0
  50. package/dist/cjs/components/columncalc/index.js +10 -0
  51. package/dist/cjs/components/contextmenu/contextmenu.js +78 -0
  52. package/dist/cjs/components/contextmenu/contextmenu.recipe.js +24 -0
  53. package/dist/cjs/components/contextmenu/index.js +7 -0
  54. package/dist/cjs/components/datatable/datatable.js +508 -0
  55. package/dist/cjs/components/datatable/datatable.recipe.js +113 -0
  56. package/dist/cjs/components/datatable/index.js +7 -0
  57. package/dist/cjs/components/datepicker/datepicker.js +153 -0
  58. package/dist/cjs/components/datepicker/datepicker.recipe.js +190 -0
  59. package/dist/cjs/components/datepicker/index.js +19 -0
  60. package/dist/cjs/components/datepickerfield/datepickerfield.js +85 -0
  61. package/dist/cjs/components/datepickerfield/datepickerfield.recipe.js +44 -0
  62. package/dist/cjs/components/datepickerfield/index.js +7 -0
  63. package/dist/cjs/components/dialog/dialog.js +86 -0
  64. package/dist/cjs/components/dialog/dialog.recipe.js +35 -0
  65. package/dist/cjs/components/dialog/index.js +9 -0
  66. package/dist/cjs/components/divider/divider.js +10 -0
  67. package/dist/cjs/components/divider/divider.recipe.js +17 -0
  68. package/dist/cjs/components/divider/index.js +7 -0
  69. package/dist/cjs/components/donutchart/donutchart.js +41 -0
  70. package/dist/cjs/components/donutchart/donutchart.recipe.js +30 -0
  71. package/dist/cjs/components/donutchart/index.js +7 -0
  72. package/dist/cjs/components/drawer/drawer.js +80 -0
  73. package/dist/cjs/components/drawer/drawer.recipe.js +30 -0
  74. package/dist/cjs/components/drawer/index.js +9 -0
  75. package/dist/cjs/components/emptystate/emptystate.js +10 -0
  76. package/dist/cjs/components/emptystate/emptystate.recipe.js +34 -0
  77. package/dist/cjs/components/emptystate/index.js +7 -0
  78. package/dist/cjs/components/formfield/formfield.js +50 -0
  79. package/dist/cjs/components/formfield/formfield.recipe.js +22 -0
  80. package/dist/cjs/components/formfield/index.js +7 -0
  81. package/dist/cjs/components/input/index.js +7 -0
  82. package/dist/cjs/components/input/input.js +47 -0
  83. package/dist/cjs/components/input/input.recipe.js +59 -0
  84. package/dist/cjs/components/kbd/index.js +7 -0
  85. package/dist/cjs/components/kbd/kbd.js +44 -0
  86. package/dist/cjs/components/kbd/kbd.recipe.js +23 -0
  87. package/dist/cjs/components/linechart/index.js +7 -0
  88. package/dist/cjs/components/linechart/linechart.js +57 -0
  89. package/dist/cjs/components/linechart/linechart.recipe.js +35 -0
  90. package/dist/cjs/components/menu/index.js +14 -0
  91. package/dist/cjs/components/menu/menu-keyboard.js +117 -0
  92. package/dist/cjs/components/menu/menu.js +144 -0
  93. package/dist/cjs/components/menu/menu.recipe.js +54 -0
  94. package/dist/cjs/components/multiselect/index.js +7 -0
  95. package/dist/cjs/components/multiselect/multiselect.js +161 -0
  96. package/dist/cjs/components/multiselect/multiselect.recipe.js +71 -0
  97. package/dist/cjs/components/popover/index.js +7 -0
  98. package/dist/cjs/components/popover/popover.js +106 -0
  99. package/dist/cjs/components/popover/popover.recipe.js +21 -0
  100. package/dist/cjs/components/progress/index.js +7 -0
  101. package/dist/cjs/components/progress/progress.js +26 -0
  102. package/dist/cjs/components/progress/progress.recipe.js +20 -0
  103. package/dist/cjs/components/radiogroup/index.js +8 -0
  104. package/dist/cjs/components/radiogroup/radiogroup.js +83 -0
  105. package/dist/cjs/components/radiogroup/radiogroup.recipe.js +40 -0
  106. package/dist/cjs/components/resizablepanel/index.js +12 -0
  107. package/dist/cjs/components/resizablepanel/resizablepanel.js +176 -0
  108. package/dist/cjs/components/resizablepanel/resizablepanel.recipe.js +69 -0
  109. package/dist/cjs/components/segmented/index.js +7 -0
  110. package/dist/cjs/components/segmented/segmented.js +95 -0
  111. package/dist/cjs/components/segmented/segmented.recipe.js +23 -0
  112. package/dist/cjs/components/select/index.js +7 -0
  113. package/dist/cjs/components/select/select.js +180 -0
  114. package/dist/cjs/components/select/select.recipe.js +79 -0
  115. package/dist/cjs/components/skeleton/index.js +7 -0
  116. package/dist/cjs/components/skeleton/skeleton.js +13 -0
  117. package/dist/cjs/components/skeleton/skeleton.recipe.js +17 -0
  118. package/dist/cjs/components/spinner/index.js +7 -0
  119. package/dist/cjs/components/spinner/spinner.js +15 -0
  120. package/dist/cjs/components/spinner/spinner.recipe.js +16 -0
  121. package/dist/cjs/components/stagebar/index.js +7 -0
  122. package/dist/cjs/components/stagebar/stagebar.js +26 -0
  123. package/dist/cjs/components/stagebar/stagebar.recipe.js +17 -0
  124. package/dist/cjs/components/statcard/index.js +7 -0
  125. package/dist/cjs/components/statcard/statcard.js +15 -0
  126. package/dist/cjs/components/statcard/statcard.recipe.js +37 -0
  127. package/dist/cjs/components/switch/index.js +7 -0
  128. package/dist/cjs/components/switch/switch.js +58 -0
  129. package/dist/cjs/components/switch/switch.recipe.js +29 -0
  130. package/dist/cjs/components/table/index.js +14 -0
  131. package/dist/cjs/components/table/table.js +66 -0
  132. package/dist/cjs/components/table/table.recipe.js +43 -0
  133. package/dist/cjs/components/tabletoolbar/index.js +20 -0
  134. package/dist/cjs/components/tabletoolbar/tabletoolbar.chrome.js +84 -0
  135. package/dist/cjs/components/tabletoolbar/tabletoolbar.js +237 -0
  136. package/dist/cjs/components/tabletoolbar/tabletoolbar.recipe.js +26 -0
  137. package/dist/cjs/components/tabs/index.js +7 -0
  138. package/dist/cjs/components/tabs/tabs.js +106 -0
  139. package/dist/cjs/components/tabs/tabs.recipe.js +36 -0
  140. package/dist/cjs/components/textarea/index.js +7 -0
  141. package/dist/cjs/components/textarea/textarea.js +56 -0
  142. package/dist/cjs/components/textarea/textarea.recipe.js +46 -0
  143. package/dist/cjs/components/toast/index.js +8 -0
  144. package/dist/cjs/components/toast/toast.js +95 -0
  145. package/dist/cjs/components/toast/toast.recipe.js +31 -0
  146. package/dist/cjs/components/tooltip/index.js +7 -0
  147. package/dist/cjs/components/tooltip/tooltip.js +95 -0
  148. package/dist/cjs/components/tooltip/tooltip.recipe.js +16 -0
  149. package/dist/cjs/components/wheelpicker/index.js +7 -0
  150. package/dist/cjs/components/wheelpicker/wheelpicker.js +134 -0
  151. package/dist/cjs/components/wheelpicker/wheelpicker.recipe.js +95 -0
  152. package/dist/cjs/core/cx.js +8 -0
  153. package/dist/cjs/core/define.js +6 -0
  154. package/dist/cjs/core/index.js +11 -0
  155. package/dist/cjs/core/primitive.js +49 -0
  156. package/dist/cjs/core/resolve.js +44 -0
  157. package/dist/cjs/core/types.js +2 -0
  158. package/dist/cjs/index.js +92 -0
  159. package/dist/cjs/package.json +3 -0
  160. package/dist/cjs/product/appshell/appshell.js +104 -0
  161. package/dist/cjs/product/appshell/appshell.recipe.js +30 -0
  162. package/dist/cjs/product/appshell/index.js +7 -0
  163. package/dist/cjs/product/authshell/authshell.js +21 -0
  164. package/dist/cjs/product/authshell/authshell.recipe.js +67 -0
  165. package/dist/cjs/product/authshell/index.js +7 -0
  166. package/dist/cjs/product/board/board.js +78 -0
  167. package/dist/cjs/product/board/board.recipe.js +31 -0
  168. package/dist/cjs/product/board/index.js +7 -0
  169. package/dist/cjs/product/command/command.js +238 -0
  170. package/dist/cjs/product/command/command.recipe.js +47 -0
  171. package/dist/cjs/product/command/index.js +8 -0
  172. package/dist/cjs/product/entitycard/entitycard.js +14 -0
  173. package/dist/cjs/product/entitycard/entitycard.recipe.js +32 -0
  174. package/dist/cjs/product/entitycard/index.js +7 -0
  175. package/dist/cjs/product/flowcanvas/flowcanvas.js +121 -0
  176. package/dist/cjs/product/flowcanvas/flowcanvas.recipe.js +28 -0
  177. package/dist/cjs/product/flowcanvas/index.js +7 -0
  178. package/dist/cjs/product/inbox/inbox.js +16 -0
  179. package/dist/cjs/product/inbox/inbox.recipe.js +46 -0
  180. package/dist/cjs/product/inbox/index.js +7 -0
  181. package/dist/cjs/product/listpage/index.js +8 -0
  182. package/dist/cjs/product/listpage/listpage.js +25 -0
  183. package/dist/cjs/product/listpage/listpage.recipe.js +46 -0
  184. package/dist/cjs/product/navitem/index.js +5 -0
  185. package/dist/cjs/product/navitem/navitem.js +44 -0
  186. package/dist/cjs/product/navitem/navitem.recipe.js +36 -0
  187. package/dist/cjs/product/onboarding/index.js +7 -0
  188. package/dist/cjs/product/onboarding/onboarding.js +17 -0
  189. package/dist/cjs/product/onboarding/onboarding.recipe.js +44 -0
  190. package/dist/cjs/product/recordpage/index.js +7 -0
  191. package/dist/cjs/product/recordpage/recordpage.js +409 -0
  192. package/dist/cjs/product/recordpage/recordpage.recipe.js +162 -0
  193. package/dist/cjs/product/recordpanel/index.js +7 -0
  194. package/dist/cjs/product/recordpanel/recordpanel.js +83 -0
  195. package/dist/cjs/product/recordpanel/recordpanel.recipe.js +51 -0
  196. package/dist/cjs/product/recordstable/company-logos.js +29 -0
  197. package/dist/cjs/product/recordstable/index.js +10 -0
  198. package/dist/cjs/product/recordstable/recordstable.js +1092 -0
  199. package/dist/cjs/product/recordstable/recordstable.recipe.js +152 -0
  200. package/dist/cjs/product/recordstable/recordstable.tag.js +21 -0
  201. package/dist/cjs/product/richtext/index.js +7 -0
  202. package/dist/cjs/product/richtext/richtext.js +147 -0
  203. package/dist/cjs/product/richtext/richtext.recipe.js +43 -0
  204. package/dist/cjs/product/settingssection/index.js +7 -0
  205. package/dist/cjs/product/settingssection/settingssection.js +14 -0
  206. package/dist/cjs/product/settingssection/settingssection.recipe.js +23 -0
  207. package/dist/cjs/product/settingsshell/index.js +7 -0
  208. package/dist/cjs/product/settingsshell/settingsshell.js +59 -0
  209. package/dist/cjs/product/settingsshell/settingsshell.recipe.js +46 -0
  210. package/dist/cjs/product/sidebar/index.js +13 -0
  211. package/dist/cjs/product/sidebar/sidebar.js +148 -0
  212. package/dist/cjs/product/sidebar/sidebar.recipe.js +46 -0
  213. package/dist/cjs/product/tasklist/index.js +7 -0
  214. package/dist/cjs/product/tasklist/tasklist.js +19 -0
  215. package/dist/cjs/product/tasklist/tasklist.recipe.js +38 -0
  216. package/dist/cjs/product/trialbanner/index.js +7 -0
  217. package/dist/cjs/product/trialbanner/trialbanner.js +13 -0
  218. package/dist/cjs/product/trialbanner/trialbanner.recipe.js +32 -0
  219. package/dist/cjs/product/viewtoggle/index.js +7 -0
  220. package/dist/cjs/product/viewtoggle/viewtoggle.js +55 -0
  221. package/dist/cjs/product/viewtoggle/viewtoggle.recipe.js +27 -0
  222. package/dist/cjs/tokens/contract.js +21 -0
  223. package/dist/cjs/tokens/elevation.js +47 -0
  224. package/dist/cjs/tokens/index.js +18 -0
  225. package/dist/cjs/tokens/palette.js +63 -0
  226. package/dist/cjs/tokens/scale.js +70 -0
  227. package/dist/cjs/tokens/semantic.js +57 -0
  228. package/dist/columncalc.css +26 -0
  229. package/dist/columncalc.d.ts +7 -0
  230. package/dist/command.css +34 -1
  231. package/dist/contextmenu.css +10 -2
  232. package/dist/datatable.css +60 -14
  233. package/dist/datepicker.css +175 -19
  234. package/dist/datepicker.d.ts +2 -2
  235. package/dist/datepickerfield.css +27 -0
  236. package/dist/datepickerfield.d.ts +7 -0
  237. package/dist/dialog.css +10 -2
  238. package/dist/donutchart.css +8 -0
  239. package/dist/drawer.css +13 -5
  240. package/dist/entitycard.css +10 -2
  241. package/dist/esm/components/accordion/accordion.js +17 -16
  242. package/dist/esm/components/accordion/accordion.recipe.js +1 -1
  243. package/dist/esm/components/avatargroup/avatargroup.js +2 -2
  244. package/dist/esm/components/avatargroup/avatargroup.recipe.js +2 -2
  245. package/dist/esm/components/badge/badge.recipe.js +4 -4
  246. package/dist/esm/components/barchart/barchart.js +15 -2
  247. package/dist/esm/components/barchart/barchart.recipe.js +10 -5
  248. package/dist/esm/components/breadcrumb/breadcrumb.js +2 -2
  249. package/dist/esm/components/bulkbar/bulkbar.js +2 -2
  250. package/dist/esm/components/bulkbar/bulkbar.recipe.js +4 -4
  251. package/dist/esm/components/button/button.js +13 -2
  252. package/dist/esm/components/button/button.recipe.js +20 -4
  253. package/dist/esm/components/callout/callout.js +2 -2
  254. package/dist/esm/components/checkbox/checkbox.recipe.js +9 -1
  255. package/dist/esm/components/columncalc/columncalc.js +100 -0
  256. package/dist/esm/components/columncalc/columncalc.recipe.js +30 -0
  257. package/dist/esm/components/columncalc/index.js +1 -0
  258. package/dist/esm/components/contextmenu/contextmenu.recipe.js +4 -4
  259. package/dist/esm/components/datatable/datatable.js +276 -49
  260. package/dist/esm/components/datatable/datatable.recipe.js +54 -16
  261. package/dist/esm/components/datepicker/datepicker.js +104 -53
  262. package/dist/esm/components/datepicker/datepicker.recipe.js +180 -25
  263. package/dist/esm/components/datepicker/index.js +1 -1
  264. package/dist/esm/components/datepickerfield/datepickerfield.js +49 -0
  265. package/dist/esm/components/datepickerfield/datepickerfield.recipe.js +41 -0
  266. package/dist/esm/components/datepickerfield/index.js +2 -0
  267. package/dist/esm/components/dialog/dialog.js +2 -2
  268. package/dist/esm/components/dialog/dialog.recipe.js +4 -4
  269. package/dist/esm/components/divider/divider.js +2 -2
  270. package/dist/esm/components/donutchart/donutchart.js +2 -2
  271. package/dist/esm/components/drawer/drawer.js +2 -2
  272. package/dist/esm/components/drawer/drawer.recipe.js +6 -6
  273. package/dist/esm/components/emptystate/emptystate.js +2 -2
  274. package/dist/esm/components/formfield/formfield.js +2 -2
  275. package/dist/esm/components/input/input.js +6 -3
  276. package/dist/esm/components/input/input.recipe.js +38 -5
  277. package/dist/esm/components/linechart/linechart.js +15 -2
  278. package/dist/esm/components/linechart/linechart.recipe.js +10 -5
  279. package/dist/esm/components/menu/index.js +1 -0
  280. package/dist/esm/components/menu/menu-keyboard.js +80 -0
  281. package/dist/esm/components/menu/menu.js +27 -60
  282. package/dist/esm/components/menu/menu.recipe.js +5 -5
  283. package/dist/esm/components/multiselect/multiselect.js +10 -3
  284. package/dist/esm/components/multiselect/multiselect.recipe.js +8 -8
  285. package/dist/esm/components/popover/popover.js +2 -2
  286. package/dist/esm/components/popover/popover.recipe.js +2 -2
  287. package/dist/esm/components/progress/progress.js +3 -3
  288. package/dist/esm/components/radiogroup/radiogroup.js +2 -2
  289. package/dist/esm/components/radiogroup/radiogroup.recipe.js +1 -1
  290. package/dist/esm/components/resizablepanel/index.js +2 -0
  291. package/dist/esm/components/resizablepanel/resizablepanel.js +135 -0
  292. package/dist/esm/components/resizablepanel/resizablepanel.recipe.js +66 -0
  293. package/dist/esm/components/segmented/segmented.js +2 -2
  294. package/dist/esm/components/select/select.js +2 -2
  295. package/dist/esm/components/select/select.recipe.js +6 -6
  296. package/dist/esm/components/skeleton/skeleton.js +5 -2
  297. package/dist/esm/components/spinner/spinner.js +3 -2
  298. package/dist/esm/components/stagebar/stagebar.js +2 -2
  299. package/dist/esm/components/statcard/statcard.js +2 -2
  300. package/dist/esm/components/table/table.recipe.js +6 -6
  301. package/dist/esm/components/tabletoolbar/tabletoolbar.chrome.js +3 -3
  302. package/dist/esm/components/tabletoolbar/tabletoolbar.js +21 -13
  303. package/dist/esm/components/tabs/tabs.js +2 -2
  304. package/dist/esm/components/tabs/tabs.recipe.js +4 -4
  305. package/dist/esm/components/textarea/textarea.js +5 -5
  306. package/dist/esm/components/textarea/textarea.recipe.js +16 -4
  307. package/dist/esm/components/toast/toast.js +4 -4
  308. package/dist/esm/components/toast/toast.recipe.js +2 -2
  309. package/dist/esm/components/tooltip/tooltip.js +21 -7
  310. package/dist/esm/components/wheelpicker/index.js +2 -0
  311. package/dist/esm/components/wheelpicker/wheelpicker.js +98 -0
  312. package/dist/esm/components/wheelpicker/wheelpicker.recipe.js +92 -0
  313. package/dist/esm/index.js +5 -0
  314. package/dist/esm/product/appshell/appshell.js +33 -9
  315. package/dist/esm/product/appshell/appshell.recipe.js +4 -4
  316. package/dist/esm/product/authshell/authshell.js +18 -0
  317. package/dist/esm/product/authshell/authshell.recipe.js +64 -0
  318. package/dist/esm/product/authshell/index.js +2 -0
  319. package/dist/esm/product/board/board.js +2 -2
  320. package/dist/esm/product/board/board.recipe.js +1 -1
  321. package/dist/esm/product/command/command.js +19 -6
  322. package/dist/esm/product/command/command.recipe.js +27 -2
  323. package/dist/esm/product/entitycard/entitycard.js +2 -2
  324. package/dist/esm/product/entitycard/entitycard.recipe.js +2 -2
  325. package/dist/esm/product/flowcanvas/flowcanvas.js +4 -4
  326. package/dist/esm/product/inbox/inbox.recipe.js +1 -1
  327. package/dist/esm/product/listpage/listpage.recipe.js +3 -3
  328. package/dist/esm/product/navitem/navitem.recipe.js +13 -1
  329. package/dist/esm/product/onboarding/onboarding.js +2 -2
  330. package/dist/esm/product/onboarding/onboarding.recipe.js +2 -2
  331. package/dist/esm/product/recordpage/recordpage.js +133 -47
  332. package/dist/esm/product/recordpage/recordpage.recipe.js +19 -17
  333. package/dist/esm/product/recordpanel/recordpanel.js +4 -4
  334. package/dist/esm/product/recordpanel/recordpanel.recipe.js +12 -16
  335. package/dist/esm/product/recordstable/recordstable.js +157 -66
  336. package/dist/esm/product/recordstable/recordstable.recipe.js +23 -23
  337. package/dist/esm/product/recordstable/recordstable.tag.js +18 -0
  338. package/dist/esm/product/richtext/richtext.js +3 -3
  339. package/dist/esm/product/richtext/richtext.recipe.js +3 -3
  340. package/dist/esm/product/settingssection/settingssection.js +2 -2
  341. package/dist/esm/product/settingsshell/settingsshell.js +2 -2
  342. package/dist/esm/product/settingsshell/settingsshell.recipe.js +7 -2
  343. package/dist/esm/product/sidebar/sidebar.js +2 -2
  344. package/dist/esm/product/sidebar/sidebar.recipe.js +27 -2
  345. package/dist/esm/product/tasklist/tasklist.js +4 -4
  346. package/dist/esm/product/trialbanner/trialbanner.js +2 -2
  347. package/dist/esm/product/trialbanner/trialbanner.recipe.js +2 -2
  348. package/dist/esm/product/viewtoggle/viewtoggle.js +10 -2
  349. package/dist/esm/product/viewtoggle/viewtoggle.recipe.js +1 -1
  350. package/dist/esm/tokens/elevation.js +44 -0
  351. package/dist/esm/tokens/index.js +1 -0
  352. package/dist/esm/tokens/palette.js +30 -0
  353. package/dist/esm/tokens/scale.js +7 -0
  354. package/dist/esm/tokens/semantic.js +24 -0
  355. package/dist/inbox.css +9 -1
  356. package/dist/input.css +32 -4
  357. package/dist/linechart.css +5 -5
  358. package/dist/listpage.css +11 -3
  359. package/dist/menu.css +11 -3
  360. package/dist/multiselect.css +14 -6
  361. package/dist/native/tokens.d.ts +16 -0
  362. package/dist/native/tokens.js +221 -0
  363. package/dist/navitem.css +21 -1
  364. package/dist/onboarding.css +10 -2
  365. package/dist/popover.css +8 -0
  366. package/dist/progress.css +8 -0
  367. package/dist/radiogroup.css +9 -1
  368. package/dist/recordpage.css +22 -12
  369. package/dist/recordpanel.css +25 -15
  370. package/dist/recordstable.css +37 -23
  371. package/dist/resizablepanel.css +53 -0
  372. package/dist/resizablepanel.d.ts +7 -0
  373. package/dist/richtext.css +11 -3
  374. package/dist/segmented.css +8 -0
  375. package/dist/select.css +12 -4
  376. package/dist/settingsshell.css +15 -2
  377. package/dist/sidebar.css +34 -1
  378. package/dist/skeleton.css +8 -0
  379. package/dist/spinner.css +8 -0
  380. package/dist/stagebar.css +8 -0
  381. package/dist/styles.css +2061 -1111
  382. package/dist/switch.css +8 -0
  383. package/dist/table.css +14 -6
  384. package/dist/tabletoolbar.css +8 -0
  385. package/dist/tabs.css +12 -4
  386. package/dist/tasklist.css +8 -0
  387. package/dist/textarea.css +23 -3
  388. package/dist/toast.css +10 -2
  389. package/dist/tokens.css +29 -0
  390. package/dist/tokens.json +217 -0
  391. package/dist/tooltip.css +8 -0
  392. package/dist/trialbanner.css +8 -0
  393. package/dist/types/components/accordion/accordion.d.ts +10 -8
  394. package/dist/types/components/avatargroup/avatargroup.d.ts +2 -2
  395. package/dist/types/components/barchart/barchart.d.ts +4 -2
  396. package/dist/types/components/breadcrumb/breadcrumb.d.ts +2 -2
  397. package/dist/types/components/bulkbar/bulkbar.d.ts +4 -2
  398. package/dist/types/components/button/button.d.ts +8 -0
  399. package/dist/types/components/button/button.recipe.d.ts +12 -0
  400. package/dist/types/components/callout/callout.d.ts +2 -2
  401. package/dist/types/components/columncalc/columncalc.d.ts +49 -0
  402. package/dist/types/components/columncalc/columncalc.recipe.d.ts +3 -0
  403. package/dist/types/components/columncalc/index.d.ts +1 -0
  404. package/dist/types/components/datatable/datatable.d.ts +58 -3
  405. package/dist/types/components/datepicker/datepicker.d.ts +41 -18
  406. package/dist/types/components/datepicker/datepicker.recipe.d.ts +25 -2
  407. package/dist/types/components/datepicker/index.d.ts +1 -1
  408. package/dist/types/components/datepickerfield/datepickerfield.d.ts +35 -0
  409. package/dist/types/components/datepickerfield/datepickerfield.recipe.d.ts +5 -0
  410. package/dist/types/components/datepickerfield/index.d.ts +2 -0
  411. package/dist/types/components/dialog/dialog.d.ts +3 -1
  412. package/dist/types/components/divider/divider.d.ts +2 -2
  413. package/dist/types/components/donutchart/donutchart.d.ts +2 -2
  414. package/dist/types/components/drawer/drawer.d.ts +3 -1
  415. package/dist/types/components/emptystate/emptystate.d.ts +2 -2
  416. package/dist/types/components/formfield/formfield.d.ts +7 -4
  417. package/dist/types/components/input/input.d.ts +8 -2
  418. package/dist/types/components/linechart/linechart.d.ts +4 -2
  419. package/dist/types/components/menu/index.d.ts +1 -0
  420. package/dist/types/components/menu/menu-keyboard.d.ts +33 -0
  421. package/dist/types/components/menu/menu.d.ts +7 -1
  422. package/dist/types/components/multiselect/multiselect.d.ts +8 -4
  423. package/dist/types/components/popover/popover.d.ts +4 -1
  424. package/dist/types/components/progress/progress.d.ts +2 -2
  425. package/dist/types/components/radiogroup/radiogroup.d.ts +2 -2
  426. package/dist/types/components/resizablepanel/index.d.ts +2 -0
  427. package/dist/types/components/resizablepanel/resizablepanel.d.ts +75 -0
  428. package/dist/types/components/resizablepanel/resizablepanel.recipe.d.ts +3 -0
  429. package/dist/types/components/segmented/segmented.d.ts +2 -2
  430. package/dist/types/components/select/select.d.ts +2 -2
  431. package/dist/types/components/skeleton/skeleton.d.ts +2 -2
  432. package/dist/types/components/spinner/spinner.d.ts +2 -2
  433. package/dist/types/components/stagebar/stagebar.d.ts +2 -2
  434. package/dist/types/components/statcard/statcard.d.ts +2 -2
  435. package/dist/types/components/tabletoolbar/tabletoolbar.d.ts +28 -2
  436. package/dist/types/components/tabs/tabs.d.ts +2 -2
  437. package/dist/types/components/toast/toast.d.ts +7 -1
  438. package/dist/types/components/tooltip/tooltip.d.ts +8 -1
  439. package/dist/types/components/wheelpicker/index.d.ts +2 -0
  440. package/dist/types/components/wheelpicker/wheelpicker.d.ts +37 -0
  441. package/dist/types/components/wheelpicker/wheelpicker.recipe.d.ts +26 -0
  442. package/dist/types/index.d.ts +5 -0
  443. package/dist/types/product/appshell/appshell.d.ts +16 -2
  444. package/dist/types/product/authshell/authshell.d.ts +28 -0
  445. package/dist/types/product/authshell/authshell.recipe.d.ts +3 -0
  446. package/dist/types/product/authshell/index.d.ts +2 -0
  447. package/dist/types/product/board/board.d.ts +2 -2
  448. package/dist/types/product/command/command.d.ts +25 -1
  449. package/dist/types/product/entitycard/entitycard.d.ts +2 -2
  450. package/dist/types/product/flowcanvas/flowcanvas.d.ts +9 -1
  451. package/dist/types/product/onboarding/onboarding.d.ts +7 -1
  452. package/dist/types/product/recordpage/recordpage.d.ts +65 -1
  453. package/dist/types/product/recordpanel/recordpanel.d.ts +8 -2
  454. package/dist/types/product/recordstable/recordstable.d.ts +90 -1
  455. package/dist/types/product/recordstable/recordstable.tag.d.ts +10 -0
  456. package/dist/types/product/richtext/richtext.d.ts +5 -1
  457. package/dist/types/product/settingssection/settingssection.d.ts +2 -2
  458. package/dist/types/product/settingsshell/settingsshell.d.ts +6 -2
  459. package/dist/types/product/sidebar/sidebar.d.ts +8 -0
  460. package/dist/types/product/tasklist/tasklist.d.ts +5 -1
  461. package/dist/types/product/trialbanner/trialbanner.d.ts +2 -2
  462. package/dist/types/product/viewtoggle/viewtoggle.d.ts +11 -5
  463. package/dist/types/tokens/contract.d.ts +14 -3
  464. package/dist/types/tokens/elevation.d.ts +44 -0
  465. package/dist/types/tokens/index.d.ts +1 -0
  466. package/dist/types/tokens/palette.d.ts +40 -0
  467. package/dist/types/tokens/scale.d.ts +7 -0
  468. package/dist/types/tokens/semantic.d.ts +19 -0
  469. package/dist/viewtoggle.css +9 -1
  470. package/dist/wheelpicker.css +68 -0
  471. package/dist/wheelpicker.d.ts +7 -0
  472. package/package.json +160 -68
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ // Dimensional scale — the single source of raw px for spacing, radius, and
3
+ // component sizing. Theme-invariant (identical in light/dark), so it is emitted
4
+ // once into :root, unlike the color tokens which flip per theme.
5
+ //
6
+ // Derived by measuring the live Attio app (not taste): its spacing is a
7
+ // 2px-granular / 4px-base scale — the values 1,2,4,6,8,10,12,16 account for
8
+ // nearly every gap/pad/margin in the sidebar. Radii cluster at 6/8/9 + a pill.
9
+ // Recipes MUST reference these through the contract (`c.space[...]`), never a
10
+ // literal px — this file is the only exception.
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.weight = exports.text = exports.font = exports.size = exports.radius = exports.space = void 0;
13
+ // Spacing: gaps, padding, margins. Keys follow the Tailwind step convention
14
+ // (0.5 = half a 4px step = 2px) so the numbers stay legible to consumers.
15
+ exports.space = {
16
+ px: "1px", // hairline — the 1px gap between rows in a dense nav list
17
+ "0.5": "2px",
18
+ "1": "4px",
19
+ "1.5": "6px",
20
+ "2": "8px",
21
+ "2.5": "10px",
22
+ "3": "12px",
23
+ "4": "16px",
24
+ "5": "20px",
25
+ "6": "24px",
26
+ "8": "32px", // overlay / empty-state padding
27
+ };
28
+ // Corner radius. sm/md/lg are the three Attio uses on stacked surfaces
29
+ // (inputs, rows, tiles); full is the pill.
30
+ exports.radius = {
31
+ chip: "7px", // tag / chip corner — the single most used radius in Attio
32
+ sm: "6px", // chips, badges
33
+ md: "8px", // inputs, search box
34
+ lg: "9px", // rows, tiles, list items
35
+ xl: "12px", // overlay items (command rows)
36
+ "2xl": "16px", // overlay panels (command surface)
37
+ full: "999px", // pills
38
+ };
39
+ // Component sizing — recurring measured dimensions that are neither spacing nor
40
+ // radius (row height, header height, the nav icon box).
41
+ exports.size = {
42
+ icon: "16px", // nav / control glyph box
43
+ chip: "22px", // tag / chip height — Attio's most repeated small control
44
+ row: "28px", // nav item · search · control height
45
+ menuRow: "32px", // overlay row: menu item, select option, bulk-bar button
46
+ tableRow: "36px", // data-grid row height
47
+ tableHeader: "40px", // data-grid header row height
48
+ header: "48px", // workspace-switcher header height
49
+ calendarCell: "48px", // calendar day cell / header rhythm (seed x12)
50
+ calendarPill: "42px", // round day highlight inside a calendar cell
51
+ };
52
+ // Typography — Attio's UI runs entirely on Inter. Sizes measured in the sidebar
53
+ // collapse onto 11/12/13/14/16 (lg = 14px is the default body/label size);
54
+ // weights are 400/500/600 with 500 the UI default.
55
+ exports.font = {
56
+ sans: '"Inter", system-ui, -apple-system, "Segoe UI", sans-serif',
57
+ };
58
+ exports.text = {
59
+ xs: "11px",
60
+ sm: "12px",
61
+ md: "13px",
62
+ lg: "14px", // default body / nav-label size
63
+ xl: "16px",
64
+ };
65
+ exports.weight = {
66
+ regular: "400",
67
+ medium: "500", // default UI weight
68
+ semibold: "600",
69
+ bold: "700", // seed-design's font-weight-bold, for the seed-styled calendar
70
+ };
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.semantic = void 0;
4
+ exports.semantic = {
5
+ bgBrandSolid: "brand600",
6
+ bgBrandSolidPressed: "brand700",
7
+ fgOnBrand: "white",
8
+ // text on a solid success/warning/danger fill. Those tone tokens BRIGHTEN in
9
+ // dark (they are tuned for tinted backgrounds and coloured text), so white on
10
+ // them drops to 2.42:1 -- dark ink clears AA on every tone in both themes.
11
+ fgOnTone: "ink",
12
+ bgSurface: "gray00",
13
+ bgRaised: "gray50",
14
+ borderDefault: "line200",
15
+ borderSubtle: "line100",
16
+ ringNeutral: "ringNeutral",
17
+ bgTileActive: "tileActive",
18
+ shadowTileActive: "tileActiveShadow",
19
+ bgOverlayFrost: "overlayFrost",
20
+ shadowOverlay1: "shadowOverlay1",
21
+ shadowOverlay2: "shadowOverlay2",
22
+ shadowOverlay3: "shadowOverlay3",
23
+ bgPopover: "popoverBg",
24
+ ringPopover: "ringPopover",
25
+ shadowPopover1: "shadowPopover1",
26
+ shadowPopover2: "shadowPopover2",
27
+ shadowPopover3: "shadowPopover3",
28
+ fgPrimary: "gray900",
29
+ fgMuted: "gray400",
30
+ bgDanger: "red600",
31
+ /** Fill for a SOLID destructive control that carries white text. */
32
+ bgDangerSolid: "red700",
33
+ /** The 2px ring a text field shows while focused. */
34
+ strokeFieldFocus: "fieldFocus",
35
+ /** Unavailable/disabled content: unselected wheel rows, unpickable dates. */
36
+ fgDisabled: "disabledFg",
37
+ /** Weak neutral fill: the wheel's band, the calendar's today pill and range bridge. */
38
+ bgNeutralWeak: "neutralWeak",
39
+ /** The selected calendar day's fill, and the text on it. */
40
+ bgNeutralInverted: "neutralInverted",
41
+ fgOnNeutralInverted: "onNeutralInverted",
42
+ /** Weekday header row. */
43
+ fgNeutralSubtle: "neutralSubtle",
44
+ /** Date numerals. */
45
+ fgNeutralMuted: "neutralMuted",
46
+ /** Keyboard focus ring, for controls that show one inside themselves. */
47
+ strokeFocusRing: "focusRing",
48
+ bgSuccess: "green600",
49
+ bgWarning: "amber600",
50
+ bgOrange: "orange600",
51
+ bgCyan: "cyan600",
52
+ bgPurple: "purple600",
53
+ bgSidebar: "graySidebar",
54
+ // #fbfbfb — Attio's subtle raised fill; the active tab pill uses the same
55
+ // value as the sidebar, so it shares the palette entry under a neutral name.
56
+ bgSubtle: "graySidebar",
57
+ };
@@ -0,0 +1,26 @@
1
+ .columncalc {
2
+ display: flex; align-items: stretch; width: 100%; height: 100%; font-family: var(--font-sans);
3
+ /* Menu wraps its trigger in a flex div that sizes to content, which would
4
+ shrink the button back to its text. Make the wrapper fill too, so the
5
+ whole cell stays clickable. */
6
+ & .menu { width: 100%; height: 100%; }
7
+ /* Attio's hit target is the WHOLE summary cell -- measured 246x37 with
8
+ padding 0 12px, not a content-sized chip. Clicking anywhere in the cell
9
+ opens the aggregation menu. */
10
+ & .columncalc-trigger { display: flex; align-items: center; gap: var(--space-1); width: 100%; height: 100%; min-height: var(--size-tableRow); margin: 0; padding: 0 var(--space-3); border: none; border-radius: var(--radius-md); background: transparent; color: var(--fg-muted); font-family: inherit; font-size: var(--text-md); font-weight: var(--weight-medium); white-space: nowrap; cursor: pointer; transition: background-color .12s, color .12s; }
11
+ & .columncalc-trigger:hover { background: color-mix(in srgb, var(--fg-primary) 4%, transparent); color: var(--fg-primary); }
12
+ & .columncalc-trigger svg { flex-shrink: 0; opacity: 0.7; }
13
+ & .columncalc-trigger[data-align="right"] { justify-content: flex-end; }
14
+ & .columncalc-placeholder { overflow: hidden; text-overflow: ellipsis; }
15
+ & .columncalc-value { color: var(--fg-primary); font-variant-numeric: tabular-nums; }
16
+ & .columncalc-op { color: var(--fg-muted); }
17
+ & .columncalc-section { padding: var(--space-1-5) var(--space-2) var(--space-1); font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--fg-muted); }
18
+ }
19
+
20
+ @media (prefers-reduced-motion: reduce) {
21
+ .columncalc, .columncalc * {
22
+ animation-duration: 0.01ms !important;
23
+ animation-iteration-count: 1 !important;
24
+ transition-duration: 0.01ms !important;
25
+ }
26
+ }
@@ -0,0 +1,7 @@
1
+ import type { RecipeFn } from "../core/types";
2
+
3
+ export interface ColumncalcVariants {
4
+
5
+ }
6
+
7
+ export declare const columncalcRecipe: RecipeFn<{ }>;
package/dist/command.css CHANGED
@@ -1,3 +1,36 @@
1
1
  .command {
2
- display: contents; font-family: var(--font-sans); & .command-content, & .command-card { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } & .command-backdrop { position: fixed; inset: 0; z-index: 50; background: transparent; } & .command-positioner { position: fixed; inset: 0; z-index: 51; display: flex; align-items: flex-start; justify-content: center; padding: 15vh var(--space-4) var(--space-4); } & .command-content { position: relative; display: flex; flex-direction: column; box-sizing: border-box; width: 90vw; max-width: 748px; max-height: 70vh; padding: var(--space-1); border-radius: var(--radius-2xl); background: color-mix(in srgb, var(--bg-overlay-frost) 60%, transparent); backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); box-shadow: 0 8px 28px -6px var(--shadow-overlay1), 0 18px 88px -4px var(--shadow-overlay2), 0 0 1px var(--shadow-overlay3); opacity: 1; transform: scale(1); transition: opacity 0.2s ease, transform 0.2s ease; @starting-style { opacity: 0; transform: scale(0.97); } } & .command-card { display: flex; flex-direction: column; flex: 1; min-height: 0; box-sizing: border-box; border-radius: var(--radius-xl); background: var(--bg-surface); box-shadow: 0 0 0 1px color-mix(in srgb, var(--fg-primary) 8%, transparent); overflow: hidden; } & .command-control { display: flex; align-items: center; gap: var(--space-2-5); height: 52px; flex-shrink: 0; padding: 0 var(--space-4); border-bottom: 1px solid var(--border-subtle); color: var(--fg-muted); } & .command-control svg { flex-shrink: 0; } & .command-input { flex: 1; min-width: 0; border: none; outline: none; background: transparent; font-family: var(--font-sans); font-size: var(--text-xl); color: var(--fg-primary); } & .command-input::placeholder { color: var(--fg-muted); } & .command-list { flex: 1; min-height: 0; overflow-y: auto; padding: var(--space-1) var(--space-2-5); display: flex; flex-direction: column; gap: var(--space-px); } & .command-empty { padding: var(--space-8) var(--space-3); text-align: center; font-size: var(--text-md); color: var(--fg-muted); } & .command-item { box-sizing: border-box; display: flex; align-items: center; gap: var(--space-2); height: 36px; padding-inline: var(--space-2-5); border-radius: var(--radius-xl); font-size: var(--text-lg); color: var(--fg-primary); cursor: pointer; } & .command-item svg { flex-shrink: 0; color: var(--fg-muted); } & .command-item[data-highlighted] { background: color-mix(in srgb, var(--fg-primary) 4%, transparent); } & .command-item-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } & .command-item-shortcut { margin-left: auto; flex-shrink: 0; display: flex; align-items: center; gap: var(--space-0-5); } & .command-group-label { padding: var(--space-2) var(--space-2-5) var(--space-1); font-size: var(--text-sm); font-weight: var(--weight-medium); color: color-mix(in srgb, var(--fg-primary) 63%, transparent); } & .command-list > .command-group-label:first-child { padding-top: var(--space-1); } & .command-footer { display: flex; align-items: center; justify-content: space-between; flex-shrink: 0; height: 44px; padding: 0 var(--space-2-5); border-top: 1px solid var(--border-subtle); } & .command-footer-nav { display: flex; align-items: center; gap: var(--space-1-5); font-size: var(--text-sm); color: var(--fg-muted); } & .command-footer-action { display: flex; align-items: center; gap: var(--space-2); height: 28px; max-width: 60%; padding: 0 var(--space-1) 0 var(--space-2-5); border: none; border-radius: var(--radius-md); background: var(--bg-brand-solid); color: var(--fg-on-brand); font-family: inherit; font-size: var(--text-md); font-weight: var(--weight-medium); cursor: pointer; } & .command-footer-action:disabled { opacity: 0.5; cursor: default; } & .command-footer-action-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } & .command-footer-key { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 var(--space-1); border-radius: var(--radius-sm); background: rgba(255,255,255,0.22); font-size: var(--text-xs); }
2
+ display: contents; font-family: var(--font-sans)
3
+ ; & .command-content, & .command-card { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
4
+ & .command-backdrop { position: fixed; inset: 0; z-index: 50; background: transparent; }
5
+ & .command-positioner { position: fixed; inset: 0; z-index: 51; display: flex; align-items: flex-start; justify-content: center; padding: 15vh var(--space-4) var(--space-4); }
6
+ & .command-content { position: relative; display: flex; flex-direction: column; box-sizing: border-box; width: 90vw; max-width: 748px; max-height: 70vh; padding: var(--space-1); border-radius: var(--radius-2xl); background: color-mix(in srgb, var(--bg-overlay-frost) 60%, transparent); backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); box-shadow: 0 8px 28px -6px var(--shadow-overlay1), 0 18px 88px -4px var(--shadow-overlay2), 0 0 1px var(--shadow-overlay3); opacity: 1; transform: scale(1); transition: opacity 0.2s ease, transform 0.2s ease; @starting-style { opacity: 0; transform: scale(0.97); } }
7
+ & .command-card { display: flex; flex-direction: column; flex: 1; min-height: 0; box-sizing: border-box; border-radius: var(--radius-xl); background: var(--bg-surface); box-shadow: 0 0 0 1px color-mix(in srgb, var(--fg-primary) 8%, transparent); overflow: hidden; }
8
+ & .command-control { display: flex; align-items: center; gap: var(--space-2-5); height: 52px; flex-shrink: 0; padding: 0 var(--space-4); border-bottom: 1px solid var(--border-subtle); color: var(--fg-muted); }
9
+ & .command-control svg { flex-shrink: 0; }
10
+ & .command-input { flex: 1; min-width: 0; border: none; outline: none; background: transparent; font-family: var(--font-sans); font-size: var(--text-xl); color: var(--fg-primary); }
11
+ & .command-input::placeholder { color: var(--fg-muted); }
12
+ & .command-list { flex: 1; min-height: 0; overflow-y: auto; padding: var(--space-1) var(--space-2-5); display: flex; flex-direction: column; gap: var(--space-px); }
13
+ & .command-empty { padding: var(--space-8) var(--space-3); text-align: center; font-size: var(--text-md); color: var(--fg-muted); }
14
+ & .command-item { box-sizing: border-box; display: flex; align-items: center; gap: var(--space-2); height: 36px; padding-inline: var(--space-2-5); border-radius: var(--radius-xl); font-size: var(--text-lg); color: var(--fg-primary); cursor: pointer; }
15
+ & .command-item svg { flex-shrink: 0; color: var(--fg-muted); }
16
+ & .command-item[data-highlighted] { background: color-mix(in srgb, var(--fg-primary) 4%, transparent); }
17
+ & .command-item-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
18
+ & .command-item-shortcut { margin-inline-start: auto; flex-shrink: 0; display: flex; align-items: center; gap: var(--space-0-5); }
19
+ & .command-group-label { padding: var(--space-2) var(--space-2-5) var(--space-1); font-size: var(--text-sm); font-weight: var(--weight-medium); color: color-mix(in srgb, var(--fg-primary) 63%, transparent); }
20
+ & .command-list > .command-group-label:first-child { padding-top: var(--space-1); }
21
+ & .command-footer { display: flex; align-items: center; justify-content: space-between; flex-shrink: 0; height: 44px; padding: 0 var(--space-2-5); border-top: 1px solid var(--border-subtle); }
22
+ & .command-footer-nav { display: flex; align-items: center; gap: var(--space-1-5); font-size: var(--text-sm); color: var(--fg-muted); }
23
+ & .command-footer-action { display: flex; align-items: center; gap: var(--space-2); height: 28px; max-width: 60%; padding: 0 var(--space-1) 0 var(--space-2-5); border: none; border-radius: var(--radius-md); background: var(--bg-brand-solid); color: var(--fg-on-brand); font-family: inherit; font-size: var(--text-md); font-weight: var(--weight-medium); cursor: pointer; }
24
+ & .command-footer-action:disabled { opacity: 0.5; cursor: default; }
25
+ & .command-footer-action-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
26
+ & .command-footer-key { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 var(--space-1); border-radius: var(--radius-sm); background: rgba(255,255,255,0.22); font-size: var(--text-xs); }
27
+
28
+ }
29
+
30
+ @media (prefers-reduced-motion: reduce) {
31
+ .command, .command * {
32
+ animation-duration: 0.01ms !important;
33
+ animation-iteration-count: 1 !important;
34
+ transition-duration: 0.01ms !important;
35
+ }
3
36
  }
@@ -1,12 +1,20 @@
1
1
  .contextmenu {
2
2
  display: contents; font-family: var(--font-sans);
3
3
  & .contextmenu-content { position: fixed; z-index: 60; min-width: 200px; box-sizing: border-box; padding: var(--space-1); border-radius: var(--radius-xl); background: var(--bg-popover); box-shadow: inset 0 0 0 1px var(--ring-popover), 0 0 0 1px var(--shadow-popover1), 0 4px 8px -4px var(--shadow-popover2), 0 4px 12px -2px var(--shadow-popover3); opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease; transform-origin: top left; @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
4
- & .contextmenu-item { display: flex; align-items: center; gap: var(--space-2); width: 100%; height: 32px; box-sizing: border-box; padding: 0 var(--space-2); margin: 0; border: none; border-radius: var(--radius-md); background: none; color: var(--fg-primary); font-family: inherit; font-size: var(--text-lg); text-align: left; white-space: nowrap; cursor: pointer; }
4
+ & .contextmenu-item { display: flex; align-items: center; gap: var(--space-2); width: 100%; height: var(--size-menuRow); box-sizing: border-box; padding: 0 var(--space-2); margin: 0; border: none; border-radius: var(--radius-md); background: none; color: var(--fg-primary); font-family: inherit; font-size: var(--text-lg); text-align: start; white-space: nowrap; cursor: pointer; }
5
5
  & .contextmenu-item svg { flex-shrink: 0; color: var(--fg-muted); }
6
6
  & .contextmenu-item:hover { background: color-mix(in srgb, var(--fg-primary) 6%, transparent); }
7
7
  & .contextmenu-item--danger { color: var(--bg-danger); }
8
8
  & .contextmenu-item--danger svg { color: var(--bg-danger); }
9
9
  & .contextmenu-item--danger:hover { background: color-mix(in srgb, var(--bg-danger) 10%, transparent); }
10
- & .contextmenu-shortcut { margin-left: auto; padding-left: var(--space-3); color: var(--fg-muted); font-size: var(--text-sm); }
10
+ & .contextmenu-shortcut { margin-inline-start: auto; padding-inline-start: var(--space-3); color: var(--fg-muted); font-size: var(--text-sm); }
11
11
  & .contextmenu-sep { height: 1px; margin: var(--space-1) 0; border: none; background: var(--border-subtle); }
12
12
  }
13
+
14
+ @media (prefers-reduced-motion: reduce) {
15
+ .contextmenu, .contextmenu * {
16
+ animation-duration: 0.01ms !important;
17
+ animation-iteration-count: 1 !important;
18
+ transition-duration: 0.01ms !important;
19
+ }
20
+ }
@@ -2,26 +2,51 @@
2
2
  display: flex; flex-direction: column; gap: var(--space-2-5); font-family: var(--font-sans);
3
3
  & .datatable-toolbar { display: flex; align-items: center; gap: var(--space-2); }
4
4
  & .datatable-search { position: relative; flex: 1; max-width: 280px; display: inline-flex; align-items: center; }
5
- & .datatable-search svg { position: absolute; left: var(--space-2); color: var(--fg-muted); pointer-events: none; }
6
- & .datatable-search input { width: 100%; height: 32px; padding: 0 var(--space-2) 0 var(--space-6); border: none; border-radius: var(--radius-md); background: var(--bg-surface); box-shadow: 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); font-family: inherit; font-size: var(--text-lg); color: var(--fg-primary); outline: none; transition: box-shadow .15s; }
5
+ & .datatable-search svg { position: absolute; inset-inline-start: var(--space-2); color: var(--fg-muted); pointer-events: none; }
6
+ & .datatable-search input { width: 100%; height: 32px; padding: 0 var(--space-2) 0 var(--space-6); border: none; border-radius: var(--radius-md); background: var(--bg-surface); box-shadow: inset 0 0 0 1px var(--ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); font-family: inherit; font-size: var(--text-lg); color: var(--fg-primary); outline: none; transition: box-shadow .15s; }
7
7
  & .datatable-search input::placeholder { color: var(--fg-muted); }
8
8
  & .datatable-search input:focus { box-shadow: inset 0 0 0 1px var(--bg-brand-solid); }
9
- & .datatable-count { margin-left: auto; font-size: var(--text-md); color: var(--fg-muted); }
10
- & .datatable-th-inner { display: inline-flex; align-items: center; gap: var(--space-1-5); width: 100%; height: 100%; }
9
+ & .datatable-count { margin-inline-start: auto; font-size: var(--text-md); color: var(--fg-muted); }
10
+ /* Attio's header cell has no padding of its own -- the button owns the
11
+ full cell so the whole header is clickable (its own inset is 12px).
12
+ Mirrors the summary-row fix. */
13
+ & th { padding: 0; }
14
+ /* Same wrapper trap as AUTHORING.md Lesson 40 (ColumnCalc's summary trigger):
15
+ Menu wraps its trigger in a flex div that sizes to its content, so a
16
+ long header grew past the column instead of filling it -- with nothing
17
+ left to squeeze, the label's own ellipsis CSS (below) had no properly
18
+ -sized box to truncate against, and the th's own overflow hard-clipped
19
+ it with no "...". Fill the wrapper, scoped to th so Menu's default
20
+ (correct everywhere else) is untouched. */
21
+ & th .menu { width: 100%; height: 100%; }
22
+ & .datatable-th-inner { display: inline-flex; align-items: center; gap: var(--space-1-5); width: 100%; min-width: 0; height: 100%; }
11
23
  & .datatable-th-inner > svg { flex-shrink: 0; color: var(--fg-muted); }
12
- & .datatable-th-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
13
- & .datatable-sort { display: inline-flex; align-items: center; gap: var(--space-1-5); width: 100%; height: 100%; margin: 0; padding: 0; border: none; background: none; font: inherit; letter-spacing: inherit; color: inherit; text-align: left; cursor: pointer; }
24
+ /* Attio's summary cell has NO padding of its own -- the calculation trigger
25
+ owns the whole 246x37 area so a click anywhere in the cell opens the
26
+ menu. Zero the cell's inset and let ColumnCalc supply the 12px. */
27
+ & tfoot td { padding: 0; }
28
+ /* Group heading row -- Attio groups a view under a subtle label with the
29
+ bucket's count beside it. */
30
+ & .datatable-viewsettings { display: inline-flex; align-items: center; gap: var(--space-1-5); height: var(--size-row); margin: 0; padding: 0 var(--space-2); border: none; border-radius: var(--radius-md); background: transparent; color: var(--fg-muted); font-family: inherit; font-size: var(--text-md); font-weight: var(--weight-medium); white-space: nowrap; cursor: pointer; transition: background-color .12s, color .12s; }
31
+ & .datatable-viewsettings:hover { background: color-mix(in srgb, var(--fg-primary) 4%, transparent); color: var(--fg-primary); }
32
+ & .datatable-group-label { padding: var(--space-1-5) var(--space-2) var(--space-1); font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--fg-muted); }
33
+ & .datatable-group { height: var(--size-menuRow); padding: 0 var(--space-3); background: var(--bg-subtle); border-bottom: 1px solid var(--border-subtle); font-size: var(--text-md); font-weight: var(--weight-medium); color: color-mix(in srgb, var(--fg-primary) 63%, transparent); }
34
+ & .datatable-group-count { margin-inline-start: var(--space-1-5); color: var(--fg-muted); font-variant-numeric: tabular-nums; }
35
+ & .datatable-th-rename { width: 100%; min-width: 0; height: var(--size-row); margin: 0; padding: 0 var(--space-1); border: none; border-radius: var(--radius-md); background: var(--bg-surface); box-shadow: inset 0 0 0 1px var(--bg-brand-solid); font-family: inherit; font-size: var(--text-lg); font-weight: var(--weight-medium); color: var(--fg-primary); outline: none; }
36
+ & .datatable-th-rename:focus { box-shadow: inset 0 0 0 1px var(--bg-brand-solid); }
37
+ & .datatable-th-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
38
+ & .datatable-sort { display: flex; align-items: center; gap: var(--space-1-5); width: 100%; min-width: 0; height: 100%; margin: 0; padding: 0 var(--space-2); border: none; background: none; font: inherit; letter-spacing: inherit; color: inherit; text-align: start; cursor: pointer; }
14
39
  & th[data-align="right"] .datatable-sort { justify-content: flex-end; }
15
- & .datatable-chevron { margin-left: auto; flex-shrink: 0; color: var(--fg-muted); opacity: 0; transition: opacity .12s; }
16
- & th[data-align="right"] .datatable-chevron { margin-left: 0; }
40
+ & .datatable-chevron { margin-inline-start: auto; flex-shrink: 0; color: var(--fg-muted); opacity: 0; transition: opacity .12s; }
41
+ & th[data-align="right"] .datatable-chevron { margin-inline-start: 0; }
17
42
  & .datatable-sort:hover .datatable-chevron { opacity: 0.6; }
18
43
  & .datatable-sort[data-sorted] .datatable-chevron { opacity: 1; color: var(--fg-primary); }
19
44
  /* sticky first column(s) + horizontal scroll shadow — RecordsTable's feel */
20
45
  & th[data-sticky], & td[data-sticky] { position: sticky; z-index: 1; background: var(--bg-surface); }
21
46
  & th[data-sticky] { z-index: 3; }
22
- & tbody tr[data-selected] td[data-sticky] { background: color-mix(in srgb, var(--bg-brand-solid) 6%, var(--bg-surface)); }
23
- & tbody tr:hover td[data-sticky] { background: color-mix(in srgb, var(--fg-primary) 3%, var(--bg-surface)); }
24
- & .table-scroll[data-scrolled-x] [data-sticky-edge] { clip-path: inset(0 -14px 0 0); box-shadow: 8px 0 12px -8px rgba(28,40,64,0.22); }
47
+ & tbody tr[data-selected] td[data-sticky] { background: color-mix(in srgb, var(--bg-brand-solid) 10%, var(--bg-surface)); }
48
+ & tbody tr:hover td[data-sticky] { background: color-mix(in srgb, var(--fg-primary) 4%, var(--bg-surface)); }
49
+ & .table-scroll[data-scrolled-x] [data-sticky-edge] { clip-path: inset(0 -38px 0 0); box-shadow: 6px 0 16px 4px rgba(0,0,0,0.12); }
25
50
  /* add-row + summary footer */
26
51
  & .datatable-addcell { padding: 0; border-top: none; }
27
52
  & .datatable-addrow { display: flex; align-items: center; gap: var(--space-2); width: 100%; height: var(--size-tableRow); padding: 0 var(--space-2); border: none; border-top: 1px solid var(--border-subtle); background: var(--bg-surface); color: var(--fg-muted); font-family: inherit; font-size: var(--text-lg); cursor: pointer; transition: background-color .12s; }
@@ -29,10 +54,11 @@
29
54
  & .datatable-addrow svg { flex-shrink: 0; }
30
55
  & .datatable-check { display: flex; align-items: center; justify-content: center; }
31
56
  & .datatable-col-check { width: 40px; padding: 0; text-align: center; }
32
- & tbody tr[data-selected] td { background: color-mix(in srgb, var(--bg-brand-solid) 6%, var(--bg-surface)); }
33
- & tbody tr[data-selected]:hover td { background: color-mix(in srgb, var(--bg-brand-solid) 10%, var(--bg-surface)); }
57
+ & tbody tr[data-selected] td { background: color-mix(in srgb, var(--bg-brand-solid) 10%, var(--bg-surface)); }
58
+ & tbody tr[data-selected]:hover td { background: color-mix(in srgb, var(--fg-primary) 4%, color-mix(in srgb, var(--bg-brand-solid) 10%, var(--bg-surface))); }
34
59
  & .datatable-editable:hover { background: color-mix(in srgb, var(--fg-primary) 4%, var(--bg-surface)); cursor: text; }
35
60
  & .datatable-edit { width: 100%; height: 28px; margin: 0; padding: 0 var(--space-1-5); border: none; border-radius: var(--radius-sm); background: var(--bg-surface); box-shadow: inset 0 0 0 1px var(--bg-brand-solid); font-family: inherit; font-size: var(--text-lg); color: var(--fg-primary); outline: none; vertical-align: middle; }
61
+ & .datatable-edit:focus { box-shadow: inset 0 0 0 1px var(--bg-brand-solid); }
36
62
  & .datatable-empty { padding: var(--space-8) var(--space-3); text-align: center; color: var(--fg-muted); font-size: var(--text-lg); }
37
63
  /* fixed layout so column widths (and resize) are exact — like RecordsTable */
38
64
  & table { table-layout: fixed; }
@@ -47,7 +73,7 @@
47
73
  & .datatable-avatar[data-tone="success"] { background: var(--bg-success); } & .datatable-avatar[data-tone="warning"] { background: var(--bg-warning); } & .datatable-avatar[data-tone="danger"] { background: var(--bg-danger); } & .datatable-avatar[data-tone="purple"] { background: var(--bg-purple); } & .datatable-avatar[data-tone="cyan"] { background: var(--bg-cyan); } & .datatable-avatar[data-tone="orange"] { background: var(--bg-orange); }
48
74
  & .datatable-avatar img { width: 100%; height: 100%; border-radius: inherit; object-fit: cover; }
49
75
  & .datatable-tags { display: flex; align-items: center; gap: var(--space-1); overflow: hidden; }
50
- & .datatable-tag { display: inline-flex; align-items: center; height: 22px; padding: 0 var(--space-1); border-radius: 7px; font-size: var(--text-lg); line-height: 20px; font-weight: var(--weight-medium); white-space: nowrap; background: color-mix(in srgb, var(--fg-primary) 6%, transparent); color: color-mix(in srgb, var(--fg-primary) 82%, transparent); }
76
+ & .datatable-tag { display: inline-flex; align-items: center; height: var(--size-chip); padding: 0 var(--space-1); border-radius: var(--radius-chip); font-size: var(--text-lg); line-height: 20px; font-weight: var(--weight-medium); white-space: nowrap; background: color-mix(in srgb, var(--fg-primary) 6%, transparent); color: color-mix(in srgb, var(--fg-primary) 82%, transparent); }
51
77
  & .datatable-tag[data-tone="brand"] { background: color-mix(in srgb, var(--bg-brand-solid) 14%, transparent); color: color-mix(in srgb, var(--bg-brand-solid) 82%, var(--fg-primary)); }
52
78
  & .datatable-tag[data-tone="success"] { background: color-mix(in srgb, var(--bg-success) 16%, transparent); color: color-mix(in srgb, var(--bg-success) 78%, var(--fg-primary)); }
53
79
  & .datatable-tag[data-tone="warning"] { background: color-mix(in srgb, var(--bg-warning) 18%, transparent); color: color-mix(in srgb, var(--bg-warning) 82%, var(--fg-primary)); }
@@ -57,4 +83,24 @@
57
83
  & .datatable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--bg-orange) 16%, transparent); color: color-mix(in srgb, var(--bg-orange) 82%, var(--fg-primary)); }
58
84
  & .datatable-num { font-variant-numeric: tabular-nums; }
59
85
  & .datatable-muted { color: var(--fg-muted); }
86
+ /* row drag-to-reorder -- Attio's Settings > Objects > Attributes measures
87
+ a leading 20px grip column, a 16px grip icon, and the row's own
88
+ hairline doubling as the drop indicator (it tints toward the brand
89
+ colour as the active drop target). The affordance + geometry are
90
+ measured; the drag MECHANISM is crisp's existing house idiom -- HTML5
91
+ draggable + dataTransfer, the same one column reorder already uses
92
+ (RecordsTable's reorderColumn) -- not Attio's own proprietary
93
+ pointer-events implementation. */
94
+ & .datatable-col-grip { width: 20px; padding: 0; text-align: center; }
95
+ & .datatable-grip { display: inline-flex; align-items: center; justify-content: center; width: 100%; height: 100%; margin: 0; border: none; border-radius: 0; background: none; font-family: inherit; color: var(--fg-muted); cursor: grab; }
96
+ & .datatable-grip:active { cursor: grabbing; }
97
+ & tbody tr[data-drop-target] td, & tbody tr[data-drop-target] th { box-shadow: inset 0 2px 0 0 var(--bg-brand-solid); transition: box-shadow .12s; }
98
+ }
99
+
100
+ @media (prefers-reduced-motion: reduce) {
101
+ .datatable, .datatable * {
102
+ animation-duration: 0.01ms !important;
103
+ animation-iteration-count: 1 !important;
104
+ transition-duration: 0.01ms !important;
105
+ }
60
106
  }
@@ -1,21 +1,177 @@
1
1
  .datepicker {
2
- display: contents; font-family: var(--font-sans);
3
- & .datepicker-trigger { display: inline-flex; align-items: center; gap: var(--space-2); box-sizing: border-box; height: 32px; padding: 0 var(--space-2-5); margin: 0; border: none; border-radius: var(--radius-md); background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--fg-primary) 7%, transparent); color: var(--fg-primary); font-family: inherit; font-size: var(--text-lg); white-space: nowrap; cursor: pointer; }
4
- & .datepicker-trigger[data-ghost] { background: transparent; box-shadow: none; }
5
- & .datepicker-trigger[data-ghost]:hover { background: color-mix(in srgb, var(--fg-primary) 4%, transparent); }
6
- & .datepicker-trigger[data-placeholder] { color: var(--fg-muted); }
7
- & .datepicker-trigger svg { flex-shrink: 0; color: var(--fg-muted); }
8
- & .datepicker-cal { width: 244px; }
9
- & .datepicker-head { display: flex; align-items: center; justify-content: space-between; height: 30px; padding: 0 var(--space-1); }
10
- & .datepicker-title { font-size: var(--text-md); font-weight: var(--weight-semibold); color: var(--fg-primary); }
11
- & .datepicker-nav { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; margin: 0; padding: 0; border: none; border-radius: var(--radius-md); background: none; color: var(--fg-muted); cursor: pointer; }
12
- & .datepicker-nav:hover { background: color-mix(in srgb, var(--fg-primary) 6%, transparent); color: var(--fg-primary); }
13
- & .datepicker-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; margin-top: var(--space-1); }
14
- & .datepicker-dow { display: flex; align-items: center; justify-content: center; height: 24px; font-size: var(--text-xs); font-weight: var(--weight-medium); color: var(--fg-muted); }
15
- & .datepicker-day { display: flex; align-items: center; justify-content: center; height: 30px; margin: 0; padding: 0; border: none; border-radius: var(--radius-md); background: none; color: var(--fg-primary); font-family: inherit; font-size: var(--text-md); cursor: pointer; }
16
- & .datepicker-day:hover { background: color-mix(in srgb, var(--fg-primary) 6%, transparent); }
17
- & .datepicker-day[data-outside] { color: var(--fg-muted); opacity: 0.5; }
18
- & .datepicker-day[data-today] { box-shadow: inset 0 0 0 1px var(--border-default); }
19
- & .datepicker-day[data-selected] { background: var(--bg-brand-solid); color: var(--fg-on-brand); }
20
- & .datepicker-day[data-selected]:hover { background: var(--bg-brand-solid-pressed); }
2
+
3
+ position: relative; box-sizing: border-box; width: 100%; min-width: 0;
4
+ font-family: var(--font-sans); color: var(--fg-neutral-muted); background: var(--bg-surface);
5
+
6
+ & .datepicker-header {
7
+ display: flex; align-items: center; justify-content: space-between;
8
+ height: var(--size-calendarCell);
9
+ }
10
+ & .datepicker-header-label {
11
+ display: inline-flex; align-items: center; gap: var(--space-1);
12
+ height: 100%; min-width: 0; border: 0; padding: 0 var(--space-1);
13
+ border-radius: var(--radius-md); background: transparent; cursor: pointer;
14
+ color: var(--fg-primary); font-family: inherit;
15
+ font-size: var(--text-xl); line-height: 22px; font-weight: var(--weight-bold);
16
+ white-space: nowrap;
17
+ outline: 2px solid transparent; outline-offset: -2px;
18
+ transition: outline-color .2s ease;
19
+ }
20
+ & .datepicker-header-label:focus-visible { outline-color: var(--stroke-focus-ring); }
21
+ & .datepicker-header-chevron { display: inline-flex; transition: transform .2s ease; }
22
+ & .datepicker-header-chevron[data-open] { transform: rotate(180deg); }
23
+
24
+ & .datepicker-nav { display: flex; align-items: center; }
25
+ & .datepicker-nav-button {
26
+ display: inline-flex; align-items: center; justify-content: center;
27
+ width: var(--size-menuRow); height: var(--size-menuRow); padding: 0;
28
+ border: none; border-radius: var(--radius-md); background: none;
29
+ color: var(--fg-muted); font-family: inherit; cursor: pointer;
30
+ outline: 2px solid transparent; outline-offset: -2px;
31
+ transition: background-color .12s, outline-color .2s ease;
32
+ }
33
+ & .datepicker-nav-button:hover { background: var(--bg-raised); }
34
+ & .datepicker-nav-button:focus-visible { outline-color: var(--stroke-focus-ring); }
35
+ & .datepicker-nav-button:disabled { opacity: .4; cursor: not-allowed; }
36
+
37
+ & .datepicker-weekday-row {
38
+ display: grid; grid-template-columns: repeat(7, minmax(0, 1fr));
39
+ position: relative; z-index: 2; background: var(--bg-surface);
40
+ }
41
+ & .datepicker-weekday {
42
+ display: flex; align-items: center; justify-content: center;
43
+ height: var(--size-calendarCell); color: var(--fg-neutral-subtle);
44
+ font-size: var(--text-lg); line-height: 19px; font-weight: var(--weight-medium);
45
+ }
46
+
47
+ & .datepicker-months { display: grid; grid-template-columns: minmax(0, 1fr); align-items: start; min-width: 0; }
48
+ & .datepicker-months[data-wheel-open] { visibility: hidden; }
49
+ & .datepicker-month { min-width: 0; }
50
+ & .datepicker-month-label {
51
+ display: flex; align-items: center; height: var(--size-calendarCell);
52
+ color: var(--fg-primary); font-size: var(--text-xl); line-height: 22px;
53
+ font-weight: var(--weight-bold);
54
+ }
55
+
56
+ & .datepicker-grid { display: grid; min-width: 0; }
57
+ & .datepicker-week-row { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); }
58
+
59
+ & .datepicker-cell {
60
+ position: relative; min-width: 0; min-height: var(--size-calendarCell);
61
+ isolation: isolate;
62
+ }
63
+ & .datepicker-empty-cell { min-height: var(--size-calendarCell); }
64
+
65
+ /* The bridge joining days inside a completed range.
66
+ The endpoints do NOT carry data-in-range -- only the interior days do --
67
+ so these are three independent rules, not a base plus two modifiers. A
68
+ modifier that sets only inset-inline-start never generates a pseudo
69
+ element on an endpoint, which leaves a half-cell of white between the
70
+ endpoint's pill and the run of grey beside it. Each rule declares its
71
+ own content. */
72
+ & .datepicker-cell[data-range-complete][data-in-range]::before {
73
+ content: ""; position: absolute; z-index: -1; inset-inline: 0;
74
+ top: calc((var(--size-calendarCell) - var(--size-calendarPill)) / 2); height: var(--size-calendarPill); background: var(--bg-neutral-weak);
75
+ }
76
+ & .datepicker-cell[data-range-complete][data-range-start]:not([data-range-end])::before {
77
+ content: ""; position: absolute; z-index: -1;
78
+ inset-inline-start: 50%; inset-inline-end: 0;
79
+ top: calc((var(--size-calendarCell) - var(--size-calendarPill)) / 2); height: var(--size-calendarPill); background: var(--bg-neutral-weak);
80
+ }
81
+ & .datepicker-cell[data-range-complete][data-range-end]:not([data-range-start])::before {
82
+ content: ""; position: absolute; z-index: -1;
83
+ inset-inline-start: 0; inset-inline-end: 50%;
84
+ top: calc((var(--size-calendarCell) - var(--size-calendarPill)) / 2); height: var(--size-calendarPill); background: var(--bg-neutral-weak);
85
+ }
86
+
87
+ & .datepicker-date {
88
+ position: relative; display: flex; width: 100%; height: 100%;
89
+ min-height: var(--size-calendarCell); min-width: 0;
90
+ align-items: flex-start; justify-content: center;
91
+ border: 0; padding: 0; background: transparent; cursor: pointer;
92
+ color: var(--fg-neutral-muted); font: inherit; outline: none;
93
+ isolation: isolate;
94
+ }
95
+ /* the round day highlight, behind the numeral */
96
+ & .datepicker-date::before {
97
+ content: ""; position: absolute; z-index: -1; top: calc((var(--size-calendarCell) - var(--size-calendarPill)) / 2); left: 50%;
98
+ width: var(--size-calendarPill); height: var(--size-calendarPill);
99
+ border-radius: var(--radius-full);
100
+ background: transparent; transform: translateX(-50%);
101
+ }
102
+ & .datepicker-date[data-today]::before { background: var(--bg-neutral-weak); }
103
+ & .datepicker-date[data-selected]::before { background: var(--bg-neutral-inverted); }
104
+ & .datepicker-date[data-selected] { color: var(--fg-on-neutral-inverted); }
105
+ & .datepicker-date[data-in-range] { color: var(--fg-neutral-muted); }
106
+ & .datepicker-date[data-in-range]::before { background: transparent; }
107
+ & .datepicker-date[data-unavailable] { color: var(--fg-disabled); }
108
+ & .datepicker-date:disabled { color: var(--fg-disabled); cursor: not-allowed; }
109
+ & .datepicker-date:focus-visible::after {
110
+ content: ""; position: absolute; top: calc((var(--size-calendarCell) - var(--size-calendarPill)) / 2); left: 50%;
111
+ width: var(--size-calendarPill); height: var(--size-calendarPill);
112
+ transform: translateX(-50%); border-radius: var(--radius-full);
113
+ outline: 2px solid var(--stroke-focus-ring); outline-offset: -2px;
114
+ }
115
+
116
+ & .datepicker-date-content {
117
+ position: relative; z-index: 1; display: flex; width: 100%;
118
+ min-height: var(--size-calendarCell); min-width: 0; box-sizing: border-box;
119
+ flex-direction: column; align-items: center; gap: 3px;
120
+ padding-top: calc((var(--size-calendarCell) - var(--size-calendarPill)) / 2); color: inherit;
121
+ font-size: var(--text-xl); line-height: 22px; font-weight: var(--weight-medium);
122
+ font-variant-numeric: tabular-nums;
123
+ }
124
+ /* The numeral is its own 42px flex box so it centres on the 42px pill.
125
+ Without this the content column top-aligns the glyph and the pill reads
126
+ as offset — the cell is 48px, the pill 42px inset 3px, and only a
127
+ 42px-tall numeral box shares the pill's centre line. */
128
+ & .datepicker-date-content > [data-date-picker-day] {
129
+ display: flex; min-height: var(--size-calendarPill); flex-shrink: 0;
130
+ align-items: center; justify-content: center;
131
+ }
132
+
133
+ /* the year/month wheel, laid over the grid it replaces */
134
+ & .datepicker-wheel-container {
135
+ position: absolute; z-index: 1; inset-inline: 0;
136
+ top: var(--size-calendarCell); bottom: 0;
137
+ display: flex; align-items: center; overflow: hidden;
138
+ background: var(--bg-surface);
139
+ }
140
+ & .datepicker-wheel { width: 100%; }
141
+
142
+ & .datepicker-continuous-scroll {
143
+ height: 100%; min-height: 0; overflow-y: auto;
144
+ overscroll-behavior: contain; scrollbar-width: none;
145
+ }
146
+ & .datepicker-continuous-scroll::-webkit-scrollbar { display: none; }
147
+ & .datepicker-continuous-content { display: flex; flex-direction: column; }
148
+
149
+ /* announced, never drawn */
150
+ & .datepicker-live-region {
151
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
152
+ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
153
+ }
154
+
155
+ }
156
+ .datepicker--visibleRange_month {
157
+
158
+ }
159
+ .datepicker--visibleRange_twoMonths {
160
+ & .datepicker-months { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--space-6); }
161
+ & .datepicker-two-month-header { display: flex; align-items: center; justify-content: space-between; height: var(--size-calendarCell); }
162
+ & .datepicker-two-month-label { color: var(--fg-primary); font-size: var(--text-xl); line-height: 22px; font-weight: var(--weight-bold); }
163
+ }
164
+ .datepicker--visibleRange_week {
165
+
166
+ }
167
+ .datepicker--visibleRange_continuous {
168
+ & .datepicker-weekday-row { position: sticky; top: 0; }
169
+ }
170
+
171
+ @media (prefers-reduced-motion: reduce) {
172
+ .datepicker, .datepicker * {
173
+ animation-duration: 0.01ms !important;
174
+ animation-iteration-count: 1 !important;
175
+ transition-duration: 0.01ms !important;
176
+ }
21
177
  }
@@ -1,7 +1,7 @@
1
1
  import type { RecipeFn } from "../core/types";
2
2
 
3
3
  export interface DatepickerVariants {
4
-
4
+ visibleRange?: "month" | "twoMonths" | "week" | "continuous";
5
5
  }
6
6
 
7
- export declare const datepickerRecipe: RecipeFn<{ }>;
7
+ export declare const datepickerRecipe: RecipeFn<{ visibleRange: { month: string; twoMonths: string; week: string; continuous: string } }>;
@@ -0,0 +1,27 @@
1
+ .datepickerfield {
2
+
3
+ display: inline-flex; font-family: var(--font-sans);
4
+
5
+ & .datepickerfield-trigger {
6
+ display: inline-flex; align-items: center; gap: var(--space-2);
7
+ box-sizing: border-box; height: 32px; padding: 0 var(--space-2-5); margin: 0;
8
+ border: none; border-radius: var(--radius-md); background: transparent;
9
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--fg-primary) 7%, transparent);
10
+ color: var(--fg-primary); font-family: inherit; font-size: var(--text-lg);
11
+ white-space: nowrap; cursor: pointer;
12
+ }
13
+ & .datepickerfield-trigger[data-ghost] { background: transparent; box-shadow: none; }
14
+ & .datepickerfield-trigger[data-ghost]:hover { background: color-mix(in srgb, var(--fg-primary) 4%, transparent); }
15
+ & .datepickerfield-trigger[data-placeholder] { color: var(--fg-muted); }
16
+ & .datepickerfield-trigger svg { flex-shrink: 0; color: var(--fg-muted); }
17
+
18
+ & .datepickerfield-panel { padding: var(--space-2); width: 300px; }
19
+ & .datepickerfield-presets { display: flex; flex-wrap: wrap; gap: var(--space-1); margin-top: var(--space-2); }
20
+ & .datepickerfield-preset {
21
+ height: var(--size-chip); padding: 0 var(--space-2); border: none;
22
+ border-radius: var(--radius-chip); background: var(--bg-raised); color: var(--fg-primary);
23
+ font-family: inherit; font-size: var(--text-sm); cursor: pointer;
24
+ }
25
+ & .datepickerfield-preset:hover { background: color-mix(in srgb, var(--fg-primary) 8%, transparent); }
26
+
27
+ }
@@ -0,0 +1,7 @@
1
+ import type { RecipeFn } from "../core/types";
2
+
3
+ export interface DatepickerfieldVariants {
4
+
5
+ }
6
+
7
+ export declare const datepickerfieldRecipe: RecipeFn<{ }>;