@justanarthur/modo-ui 0.6.0-canary.8 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +66 -164
  2. package/dist/base.css +4 -141
  3. package/dist/blocks/sidebar-app/index.js +26 -40
  4. package/dist/components/AI/input-message/index.js +16 -23
  5. package/dist/components/AI/thinking-indicator/index.js +6 -9
  6. package/dist/components/accordion/index.d.ts +11 -39
  7. package/dist/components/accordion/index.js +13 -18
  8. package/dist/components/badge/index.d.ts +11 -18
  9. package/dist/components/badge/index.js +7 -12
  10. package/dist/components/button/index.d.ts +17 -53
  11. package/dist/components/button/index.js +6 -11
  12. package/dist/components/card/index.d.ts +9 -32
  13. package/dist/components/card/index.js +11 -17
  14. package/dist/components/copy/index.d.ts +8 -41
  15. package/dist/components/copy/index.js +9 -15
  16. package/dist/components/inputs/checkbox/index.d.ts +9 -28
  17. package/dist/components/inputs/checkbox/index.js +13 -18
  18. package/dist/components/inputs/color-picker/index.d.ts +14 -22
  19. package/dist/components/inputs/color-picker/index.js +18 -26
  20. package/dist/components/inputs/combobox/index.d.ts +20 -85
  21. package/dist/components/inputs/combobox/index.js +18 -27
  22. package/dist/components/inputs/date-time/calendar/index.d.ts +18 -24
  23. package/dist/components/inputs/date-time/calendar/index.js +11 -15
  24. package/dist/components/inputs/date-time/date-picker/index.d.ts +16 -105
  25. package/dist/components/inputs/date-time/date-picker/index.js +25 -35
  26. package/dist/components/inputs/date-time/date-range-picker/index.d.ts +12 -106
  27. package/dist/components/inputs/date-time/date-range-picker/index.js +24 -35
  28. package/dist/components/inputs/date-time/duration-picker/index.d.ts +13 -66
  29. package/dist/components/inputs/date-time/duration-picker/index.js +24 -33
  30. package/dist/components/inputs/date-time/month-picker/index.d.ts +10 -60
  31. package/dist/components/inputs/date-time/month-picker/index.js +23 -32
  32. package/dist/components/inputs/date-time/time-picker/index.d.ts +10 -58
  33. package/dist/components/inputs/date-time/time-picker/index.js +24 -33
  34. package/dist/components/inputs/input/index.d.ts +13 -95
  35. package/dist/components/inputs/input/index.js +9 -18
  36. package/dist/components/inputs/radio/index.d.ts +5 -20
  37. package/dist/components/inputs/radio/index.js +12 -16
  38. package/dist/components/inputs/search/index.d.ts +3 -3
  39. package/dist/components/inputs/search/index.js +18 -26
  40. package/dist/components/inputs/select/index.d.ts +23 -99
  41. package/dist/components/inputs/select/index.js +14 -29
  42. package/dist/components/inputs/slider/index.d.ts +0 -9
  43. package/dist/components/inputs/slider/index.js +5 -8
  44. package/dist/components/inputs/switch/index.d.ts +2 -8
  45. package/dist/components/inputs/switch/index.js +12 -15
  46. package/dist/components/inputs/textarea/index.d.ts +1 -20
  47. package/dist/components/inputs/textarea/index.js +6 -9
  48. package/dist/components/navigation/sidebar/index.d.ts +21 -44
  49. package/dist/components/navigation/sidebar/index.js +31 -42
  50. package/dist/components/navigation/tabs/index.d.ts +2 -8
  51. package/dist/components/navigation/tabs/index.js +10 -15
  52. package/dist/components/navigation/tabs-subtle/index.js +10 -13
  53. package/dist/components/overlays/alert-dialog/index.d.ts +16 -135
  54. package/dist/components/overlays/alert-dialog/index.js +13 -23
  55. package/dist/components/overlays/command/index.d.ts +20 -25
  56. package/dist/components/overlays/command/index.js +17 -25
  57. package/dist/components/overlays/context-menu/index.d.ts +17 -39
  58. package/dist/components/overlays/context-menu/index.js +18 -29
  59. package/dist/components/overlays/dialog/index.d.ts +16 -42
  60. package/dist/components/overlays/dialog/index.js +12 -20
  61. package/dist/components/overlays/dropdown/index.d.ts +34 -304
  62. package/dist/components/overlays/dropdown/index.js +17 -44
  63. package/dist/components/overlays/popover/index.d.ts +12 -38
  64. package/dist/components/overlays/popover/index.js +9 -13
  65. package/dist/components/overlays/preview-card/index.js +8 -12
  66. package/dist/components/overlays/sheet/index.d.ts +8 -25
  67. package/dist/components/overlays/sheet/index.js +13 -19
  68. package/dist/components/overlays/toast/index.d.ts +50 -209
  69. package/dist/components/overlays/toast/index.js +10 -23
  70. package/dist/components/overlays/tooltip/index.d.ts +21 -123
  71. package/dist/components/overlays/tooltip/index.js +6 -16
  72. package/dist/components/table/index.d.ts +8 -63
  73. package/dist/components/table/index.js +9 -20
  74. package/dist/index.d.ts +1048 -2999
  75. package/dist/index.js +82 -231
  76. package/dist/preset.d.ts +0 -22
  77. package/dist/preset.js +2 -24
  78. package/dist/primitives/code/index.js +5 -8
  79. package/dist/primitives/craft/index.js +6 -10
  80. package/dist/primitives/fluid-hover/index.js +8 -10
  81. package/dist/primitives/morph/index.js +10 -16
  82. package/dist/primitives/motion/index.js +8 -11
  83. package/dist/primitives/scroll-area/index.js +3 -5
  84. package/dist/primitives/sizes/index.js +4 -6
  85. package/dist/primitives/surface/index.js +4 -6
  86. package/dist/shared/{components-4y816hwp.js → components-0q0sqfh4.js} +49 -27
  87. package/dist/shared/components-0sn7ypjw.js +61 -0
  88. package/dist/shared/{components-vc864c51.js → components-11da9ajg.js} +5 -8
  89. package/dist/shared/components-1434p1mh.js +123 -0
  90. package/dist/shared/{components-t2a3qmy9.js → components-1z6tdadk.js} +24 -40
  91. package/dist/shared/{components-qs4rkqsj.js → components-27nnvrwe.js} +14 -15
  92. package/dist/shared/{components-av5t26rc.js → components-2dxkv6zm.js} +7 -8
  93. package/dist/shared/{components-wqrvqq5p.js → components-2ecg8svx.js} +152 -234
  94. package/dist/shared/{components-3ydr2fqe.js → components-2ph6t61s.js} +34 -37
  95. package/dist/shared/{components-6gk118w3.js → components-39jq9va1.js} +24 -29
  96. package/dist/shared/components-3ky44908.js +9 -0
  97. package/dist/shared/{components-y1qvbawa.js → components-3mkepka5.js} +25 -28
  98. package/dist/shared/{components-xqszvkj4.js → components-4700p9kz.js} +22 -24
  99. package/dist/shared/{components-yhgq0qxx.js → components-59efxjd9.js} +12 -13
  100. package/dist/shared/{components-9j9abkct.js → components-5vgpnxgy.js} +27 -51
  101. package/dist/shared/{components-8tt3xbb5.js → components-5xc2j8jz.js} +18 -19
  102. package/dist/shared/{components-jymmaevv.js → components-6p8tfcd6.js} +29 -57
  103. package/dist/shared/{components-4nck8acq.js → components-7r3etddy.js} +54 -19
  104. package/dist/shared/{components-skfd7kff.js → components-8snj490h.js} +32 -78
  105. package/dist/shared/{components-ctqmge8t.js → components-b0eac83j.js} +30 -9
  106. package/dist/shared/{components-9sttq78t.js → components-b2wyq2cq.js} +59 -41
  107. package/dist/shared/{components-vkwq2k96.js → components-b3c5et5b.js} +38 -49
  108. package/dist/shared/{components-rrbpmfx4.js → components-c6s6b43g.js} +2 -3
  109. package/dist/shared/{components-pw06rbxq.js → components-chacnk61.js} +19 -19
  110. package/dist/shared/{components-71nbt03m.js → components-cv16mryv.js} +7 -26
  111. package/dist/shared/{components-eqze3y30.js → components-d6xtjht3.js} +30 -35
  112. package/dist/shared/{components-5y5shqfd.js → components-dk0gjr5a.js} +18 -19
  113. package/dist/shared/{components-khspp26b.js → components-fzrq6tr3.js} +34 -37
  114. package/dist/shared/{components-km7fhgbk.js → components-gc5vtq2f.js} +30 -66
  115. package/dist/shared/components-gf5s6ap9.js +42 -0
  116. package/dist/shared/{components-qqcmtrbv.js → components-gz8zf3ec.js} +55 -56
  117. package/dist/shared/{components-mattt5jp.js → components-h2ajmhwn.js} +35 -107
  118. package/dist/shared/{components-awra5sff.js → components-hqeq3w9q.js} +16 -24
  119. package/dist/shared/{components-5tzhqbcw.js → components-hw9yk32z.js} +24 -36
  120. package/dist/shared/components-hyq23phv.js +310 -0
  121. package/dist/shared/{components-8mt5bsv6.js → components-jbbmdr74.js} +22 -41
  122. package/dist/shared/{components-dcc02hs2.js → components-jjw69c4c.js} +4 -7
  123. package/dist/shared/{components-2syq4mwc.js → components-jthe1pwb.js} +420 -139
  124. package/dist/shared/{components-r7q1zm7r.js → components-jwst3vtj.js} +76 -224
  125. package/dist/shared/{components-qdm3yh26.js → components-kvr7f9hy.js} +10 -19
  126. package/dist/shared/{components-s8yqk2dc.js → components-kwa6mrf9.js} +11 -46
  127. package/dist/shared/{components-de99ykt7.js → components-men63rwj.js} +2 -3
  128. package/dist/shared/{components-6b0zb8z3.js → components-mjthm1kf.js} +9 -13
  129. package/dist/shared/{components-2c64r8c9.js → components-n42c79bz.js} +22 -23
  130. package/dist/shared/{components-tz1fv35x.js → components-n7mjr357.js} +2 -3
  131. package/dist/shared/components-ng72k97e.js +128 -0
  132. package/dist/shared/{components-dyae0y7h.js → components-pbmqctfa.js} +65 -169
  133. package/dist/shared/{components-px2zm7dc.js → components-q5xj5c16.js} +8 -9
  134. package/dist/shared/components-raknhppb.js +64 -0
  135. package/dist/shared/{components-8rb25gbe.js → components-rr7a6ja9.js} +27 -59
  136. package/dist/shared/{components-5012r6gr.js → components-s083f38z.js} +34 -164
  137. package/dist/shared/components-s5ngg32c.js +267 -0
  138. package/dist/shared/components-sn1rxx1d.js +143 -0
  139. package/dist/shared/{components-r8eqs7gz.js → components-ta7shw28.js} +4 -4
  140. package/dist/shared/{components-9as3rf68.js → components-vc7vq5nz.js} +3 -6
  141. package/dist/shared/{components-ft3zdc79.js → components-vfbhxf5r.js} +5 -6
  142. package/dist/shared/components-vynjtrk6.js +19 -0
  143. package/dist/shared/{components-w0xq6q9k.js → components-w1r67ag9.js} +149 -294
  144. package/dist/shared/{components-z0bqtvcp.js → components-w90endve.js} +72 -71
  145. package/dist/shared/{components-t5pk5nmc.js → components-wvp1m52g.js} +102 -149
  146. package/dist/shared/components-wy9jpqny.js +146 -0
  147. package/dist/shared/{components-5sxjeh6h.js → components-y9y0g8er.js} +28 -52
  148. package/dist/shared/components-ypp01w3p.js +986 -0
  149. package/dist/shared/{components-t50hrswb.js → components-zfnmn5d4.js} +36 -82
  150. package/dist/shared/{components-jqpefjsn.js → components-zrkzcayz.js} +6 -54
  151. package/dist/shared/{components-vf45j12c.js → components-zx6b6yby.js} +18 -4
  152. package/dist/styles.css +32 -320
  153. package/dist/tailwind.css +0 -16
  154. package/dist/tokens.css +0 -67
  155. package/package.json +4 -227
  156. package/DESIGN.md +0 -623
  157. package/blocks/sidebar-app/examples.mdx +0 -33
  158. package/blocks/sidebar-app/index.tsx +0 -218
  159. package/blocks/sidebar-app/inset-topbar.tsx +0 -25
  160. package/blocks/sidebar-app/menu-grid.ts +0 -26
  161. package/blocks/sidebar-app/nav-data.ts +0 -36
  162. package/blocks/sidebar-app/search-field.tsx +0 -48
  163. package/blocks/sidebar-app/user-footer.tsx +0 -67
  164. package/blocks/sidebar-app/workspace-header.tsx +0 -129
  165. package/components/AI/input-message/examples.mdx +0 -130
  166. package/components/AI/input-message/file-thumbnail.tsx +0 -173
  167. package/components/AI/input-message/index.tsx +0 -1385
  168. package/components/AI/thinking-indicator/examples.mdx +0 -27
  169. package/components/AI/thinking-indicator/index.tsx +0 -210
  170. package/components/accordion/examples.mdx +0 -233
  171. package/components/accordion/index.tsx +0 -1071
  172. package/components/avatar/examples.mdx +0 -95
  173. package/components/avatar/index.tsx +0 -129
  174. package/components/badge/change-demo.tsx +0 -29
  175. package/components/badge/examples.mdx +0 -124
  176. package/components/badge/index.tsx +0 -225
  177. package/components/badge/variants.ts +0 -73
  178. package/components/button/examples.mdx +0 -168
  179. package/components/button/index.tsx +0 -424
  180. package/components/button/loading-demo.tsx +0 -25
  181. package/components/button/variants.ts +0 -168
  182. package/components/card/examples.mdx +0 -251
  183. package/components/card/index.tsx +0 -1070
  184. package/components/copy/examples.mdx +0 -125
  185. package/components/copy/index.tsx +0 -662
  186. package/components/inputs/checkbox/examples.mdx +0 -87
  187. package/components/inputs/checkbox/index.tsx +0 -611
  188. package/components/inputs/checkbox/select-all-demo.tsx +0 -48
  189. package/components/inputs/color-picker/examples.mdx +0 -111
  190. package/components/inputs/color-picker/index.tsx +0 -1981
  191. package/components/inputs/color-picker/variants.ts +0 -401
  192. package/components/inputs/combobox/examples.mdx +0 -366
  193. package/components/inputs/combobox/index.tsx +0 -1527
  194. package/components/inputs/combobox/remote-demo.tsx +0 -105
  195. package/components/inputs/date-time/calendar/examples.mdx +0 -45
  196. package/components/inputs/date-time/calendar/index.tsx +0 -370
  197. package/components/inputs/date-time/calendar/use-month-window.ts +0 -173
  198. package/components/inputs/date-time/date-picker/examples.mdx +0 -243
  199. package/components/inputs/date-time/date-picker/index.tsx +0 -476
  200. package/components/inputs/date-time/date-picker/masked-date-input.tsx +0 -348
  201. package/components/inputs/date-time/date-range-picker/examples.mdx +0 -93
  202. package/components/inputs/date-time/date-range-picker/index.tsx +0 -525
  203. package/components/inputs/date-time/duration-picker/examples.mdx +0 -40
  204. package/components/inputs/date-time/duration-picker/index.tsx +0 -253
  205. package/components/inputs/date-time/month-picker/examples.mdx +0 -45
  206. package/components/inputs/date-time/month-picker/index.tsx +0 -254
  207. package/components/inputs/date-time/picker-shell.tsx +0 -581
  208. package/components/inputs/date-time/time-columns.tsx +0 -94
  209. package/components/inputs/date-time/time-picker/examples.mdx +0 -57
  210. package/components/inputs/date-time/time-picker/index.tsx +0 -227
  211. package/components/inputs/field/examples.mdx +0 -117
  212. package/components/inputs/field/index.tsx +0 -268
  213. package/components/inputs/file-dropzone/examples.mdx +0 -83
  214. package/components/inputs/file-dropzone/file-row.tsx +0 -201
  215. package/components/inputs/file-dropzone/index.tsx +0 -316
  216. package/components/inputs/file-dropzone/upload-demo.tsx +0 -67
  217. package/components/inputs/file-dropzone/variants.ts +0 -94
  218. package/components/inputs/input/examples.mdx +0 -166
  219. package/components/inputs/input/index.tsx +0 -494
  220. package/components/inputs/input/password-demo.tsx +0 -30
  221. package/components/inputs/label/examples.mdx +0 -67
  222. package/components/inputs/label/index.tsx +0 -85
  223. package/components/inputs/number-input/examples.mdx +0 -69
  224. package/components/inputs/number-input/index.tsx +0 -221
  225. package/components/inputs/radio/examples.mdx +0 -77
  226. package/components/inputs/radio/index.tsx +0 -636
  227. package/components/inputs/search/examples.mdx +0 -74
  228. package/components/inputs/search/index.tsx +0 -333
  229. package/components/inputs/select/examples.mdx +0 -296
  230. package/components/inputs/select/index.tsx +0 -1044
  231. package/components/inputs/select/variants.ts +0 -32
  232. package/components/inputs/slider/examples.mdx +0 -153
  233. package/components/inputs/slider/index.tsx +0 -1867
  234. package/components/inputs/switch/examples.mdx +0 -96
  235. package/components/inputs/switch/index.tsx +0 -504
  236. package/components/inputs/textarea/examples.mdx +0 -126
  237. package/components/inputs/textarea/index.tsx +0 -207
  238. package/components/navigation/navigation-menu/examples.mdx +0 -136
  239. package/components/navigation/navigation-menu/index.tsx +0 -704
  240. package/components/navigation/pagination/examples.mdx +0 -74
  241. package/components/navigation/pagination/index.tsx +0 -401
  242. package/components/navigation/sidebar/examples.mdx +0 -325
  243. package/components/navigation/sidebar/index.tsx +0 -453
  244. package/components/navigation/sidebar/sidebar-core.tsx +0 -1408
  245. package/components/navigation/sidebar/sidebar-menu.tsx +0 -1495
  246. package/components/navigation/sidebar/sidebar.css +0 -74
  247. package/components/navigation/sidebar/variants.ts +0 -55
  248. package/components/navigation/tabs/examples.mdx +0 -89
  249. package/components/navigation/tabs/index.tsx +0 -494
  250. package/components/navigation/tabs-subtle/examples.mdx +0 -49
  251. package/components/navigation/tabs-subtle/index.tsx +0 -512
  252. package/components/overlays/alert-dialog/examples.mdx +0 -123
  253. package/components/overlays/alert-dialog/index.tsx +0 -276
  254. package/components/overlays/alert-dialog/pending-demo.tsx +0 -36
  255. package/components/overlays/command/examples.mdx +0 -113
  256. package/components/overlays/command/index.tsx +0 -425
  257. package/components/overlays/context-menu/examples.mdx +0 -56
  258. package/components/overlays/context-menu/index.tsx +0 -279
  259. package/components/overlays/dialog/examples.mdx +0 -165
  260. package/components/overlays/dialog/index.tsx +0 -451
  261. package/components/overlays/dropdown/dropdown-search.tsx +0 -395
  262. package/components/overlays/dropdown/examples.mdx +0 -444
  263. package/components/overlays/dropdown/index.tsx +0 -1241
  264. package/components/overlays/dropdown/menu-item.tsx +0 -510
  265. package/components/overlays/dropdown/menu-parts.tsx +0 -725
  266. package/components/overlays/popover/anchored-demo.tsx +0 -59
  267. package/components/overlays/popover/examples.mdx +0 -203
  268. package/components/overlays/popover/index.tsx +0 -317
  269. package/components/overlays/preview-card/examples.mdx +0 -61
  270. package/components/overlays/preview-card/index.tsx +0 -204
  271. package/components/overlays/sheet/examples.mdx +0 -101
  272. package/components/overlays/sheet/index.tsx +0 -307
  273. package/components/overlays/toast/examples.mdx +0 -85
  274. package/components/overlays/toast/global-demo.tsx +0 -72
  275. package/components/overlays/toast/index.tsx +0 -544
  276. package/components/overlays/toast/manager.ts +0 -193
  277. package/components/overlays/tooltip/examples.mdx +0 -106
  278. package/components/overlays/tooltip/index.tsx +0 -539
  279. package/components/progress/examples.mdx +0 -59
  280. package/components/progress/index.tsx +0 -174
  281. package/components/progress/progress.css +0 -49
  282. package/components/progress/step-demo.tsx +0 -27
  283. package/components/table/examples.mdx +0 -188
  284. package/components/table/index.tsx +0 -535
  285. package/components/table/sort-demo.tsx +0 -61
  286. package/dist/components/avatar/index.d.ts +0 -46
  287. package/dist/components/avatar/index.js +0 -19
  288. package/dist/components/badge/variants.d.ts +0 -33
  289. package/dist/components/badge/variants.js +0 -10
  290. package/dist/components/button/variants.d.ts +0 -39
  291. package/dist/components/button/variants.js +0 -8
  292. package/dist/components/inputs/color-picker/variants.d.ts +0 -61
  293. package/dist/components/inputs/color-picker/variants.js +0 -28
  294. package/dist/components/inputs/field/index.d.ts +0 -116
  295. package/dist/components/inputs/field/index.js +0 -29
  296. package/dist/components/inputs/file-dropzone/index.d.ts +0 -167
  297. package/dist/components/inputs/file-dropzone/index.js +0 -33
  298. package/dist/components/inputs/file-dropzone/variants.d.ts +0 -35
  299. package/dist/components/inputs/file-dropzone/variants.js +0 -12
  300. package/dist/components/inputs/label/index.d.ts +0 -32
  301. package/dist/components/inputs/label/index.js +0 -11
  302. package/dist/components/inputs/number-input/index.d.ts +0 -87
  303. package/dist/components/inputs/number-input/index.js +0 -21
  304. package/dist/components/inputs/select/variants.d.ts +0 -5
  305. package/dist/components/inputs/select/variants.js +0 -6
  306. package/dist/components/navigation/navigation-menu/index.d.ts +0 -126
  307. package/dist/components/navigation/navigation-menu/index.js +0 -41
  308. package/dist/components/navigation/pagination/index.d.ts +0 -75
  309. package/dist/components/navigation/pagination/index.js +0 -41
  310. package/dist/components/navigation/sidebar/variants.d.ts +0 -25
  311. package/dist/components/navigation/sidebar/variants.js +0 -28
  312. package/dist/components/progress/index.d.ts +0 -56
  313. package/dist/components/progress/index.js +0 -15
  314. package/dist/docs/index.d.ts +0 -83
  315. package/dist/docs/index.js +0 -288
  316. package/dist/docs/vite.d.ts +0 -31
  317. package/dist/docs/vite.js +0 -45
  318. package/dist/lib/date-locale.d.ts +0 -26
  319. package/dist/lib/date-locale.js +0 -24
  320. package/dist/lib/field-classes.d.ts +0 -149
  321. package/dist/lib/field-classes.js +0 -41
  322. package/dist/lib/field-variants.d.ts +0 -47
  323. package/dist/lib/field-variants.js +0 -26
  324. package/dist/lib/fluid-hover-highlight.d.ts +0 -112
  325. package/dist/lib/fluid-hover-highlight.js +0 -17
  326. package/dist/lib/focus-ring.d.ts +0 -18
  327. package/dist/lib/focus-ring.js +0 -11
  328. package/dist/lib/goo-indicator.d.ts +0 -46
  329. package/dist/lib/goo-indicator.js +0 -14
  330. package/dist/lib/icon-context.d.ts +0 -30
  331. package/dist/lib/icon-context.js +0 -12
  332. package/dist/lib/inert.d.ts +0 -9
  333. package/dist/lib/inert.js +0 -8
  334. package/dist/lib/morph-layers.d.ts +0 -93
  335. package/dist/lib/morph-layers.js +0 -13
  336. package/dist/lib/morph-part.d.ts +0 -21
  337. package/dist/lib/morph-part.js +0 -12
  338. package/dist/lib/popup.d.ts +0 -20
  339. package/dist/lib/popup.js +0 -12
  340. package/dist/lib/reduced-motion.d.ts +0 -9
  341. package/dist/lib/reduced-motion.js +0 -6
  342. package/dist/lib/row-index.d.ts +0 -10
  343. package/dist/lib/row-index.js +0 -8
  344. package/dist/lib/row-order.d.ts +0 -28
  345. package/dist/lib/row-order.js +0 -10
  346. package/dist/lib/scroll-column.d.ts +0 -31
  347. package/dist/lib/scroll-column.js +0 -19
  348. package/dist/lib/shape-context.d.ts +0 -30
  349. package/dist/lib/shape-context.js +0 -13
  350. package/dist/lib/shape-radius.d.ts +0 -19
  351. package/dist/lib/shape-radius.js +0 -6
  352. package/dist/lib/size-context.d.ts +0 -94
  353. package/dist/lib/size-context.js +0 -20
  354. package/dist/lib/size-scale.d.ts +0 -79
  355. package/dist/lib/size-scale.js +0 -8
  356. package/dist/lib/slot.d.ts +0 -39
  357. package/dist/lib/slot.js +0 -14
  358. package/dist/lib/springs.d.ts +0 -44
  359. package/dist/lib/springs.js +0 -8
  360. package/dist/lib/surface-classes.d.ts +0 -19
  361. package/dist/lib/surface-classes.js +0 -10
  362. package/dist/lib/surface-context.d.ts +0 -9
  363. package/dist/lib/surface-context.js +0 -8
  364. package/dist/lib/use-controllable-state.d.ts +0 -2
  365. package/dist/lib/use-controllable-state.js +0 -6
  366. package/dist/lib/use-fluid-hover.d.ts +0 -138
  367. package/dist/lib/use-fluid-hover.js +0 -14
  368. package/dist/lib/use-is-mobile.d.ts +0 -2
  369. package/dist/lib/use-is-mobile.js +0 -6
  370. package/dist/lib/use-keyboard-nav-gate.d.ts +0 -20
  371. package/dist/lib/use-keyboard-nav-gate.js +0 -7
  372. package/dist/lib/use-merge-split.d.ts +0 -47
  373. package/dist/lib/use-merge-split.js +0 -15
  374. package/dist/lib/use-morph.d.ts +0 -101
  375. package/dist/lib/use-morph.js +0 -20
  376. package/dist/lib/use-touch-primary.d.ts +0 -2
  377. package/dist/lib/use-touch-primary.js +0 -6
  378. package/dist/lib/utils.d.ts +0 -3
  379. package/dist/lib/utils.js +0 -6
  380. package/dist/primitives/separator/index.d.ts +0 -25
  381. package/dist/primitives/separator/index.js +0 -9
  382. package/dist/primitives/skeleton/index.d.ts +0 -35
  383. package/dist/primitives/skeleton/index.js +0 -13
  384. package/dist/shared/components-124epb7f.js +0 -53
  385. package/dist/shared/components-1kab3j44.js +0 -337
  386. package/dist/shared/components-26snnbs9.js +0 -322
  387. package/dist/shared/components-34txk9rj.js +0 -35
  388. package/dist/shared/components-3h92d94m.js +0 -23
  389. package/dist/shared/components-4vfm04wq.js +0 -82
  390. package/dist/shared/components-54nq988h.js +0 -123
  391. package/dist/shared/components-7s7pykk5.js +0 -281
  392. package/dist/shared/components-7zkhz3r8.js +0 -399
  393. package/dist/shared/components-8v644a0s.js +0 -298
  394. package/dist/shared/components-a4evvq8h.js +0 -271
  395. package/dist/shared/components-adkarj8n.js +0 -35
  396. package/dist/shared/components-b1e239g3.js +0 -28
  397. package/dist/shared/components-b94t6qtj.js +0 -143
  398. package/dist/shared/components-c9yr4ed1.js +0 -44
  399. package/dist/shared/components-cwg1d0w6.js +0 -254
  400. package/dist/shared/components-d3shbwqq.js +0 -95
  401. package/dist/shared/components-dhgk6mbt.js +0 -16
  402. package/dist/shared/components-drxrtnp2.js +0 -25
  403. package/dist/shared/components-ej4r7wmj.js +0 -482
  404. package/dist/shared/components-f7h57m6t.js +0 -59
  405. package/dist/shared/components-fejdzvqc.js +0 -448
  406. package/dist/shared/components-gx4h5rbb.js +0 -40
  407. package/dist/shared/components-gyt7my41.js +0 -328
  408. package/dist/shared/components-h6p86be3.js +0 -19
  409. package/dist/shared/components-h83az0bz.js +0 -33
  410. package/dist/shared/components-hdzrqqpx.js +0 -55
  411. package/dist/shared/components-krtx3m5b.js +0 -84
  412. package/dist/shared/components-kswxnm3h.js +0 -24
  413. package/dist/shared/components-mpa2y6x8.js +0 -277
  414. package/dist/shared/components-mrbaxt8q.js +0 -62
  415. package/dist/shared/components-pt5ftm4p.js +0 -38
  416. package/dist/shared/components-rpw4md2b.js +0 -179
  417. package/dist/shared/components-rtadhd9j.js +0 -64
  418. package/dist/shared/components-tz4gaf1v.js +0 -23
  419. package/dist/shared/components-wbbckbw8.js +0 -34
  420. package/dist/shared/components-xdqmt6ed.js +0 -20
  421. package/dist/shared/components-xjkdvnbg.js +0 -107
  422. package/dist/shared/components-z3v0n0de.js +0 -11
  423. package/dist/shared/components-z6dfqtyt.js +0 -1545
  424. package/dist/tokens/colors.css +0 -230
  425. package/dist/tokens/motion.css +0 -40
  426. package/dist/tokens/radius.css +0 -10
  427. package/dist/tokens/spacing.css +0 -9
  428. package/dist/tokens/typography.css +0 -119
  429. package/docs/chrome.css +0 -120
  430. package/docs/chrome.tsx +0 -283
  431. package/docs/index.ts +0 -9
  432. package/docs/vite.ts +0 -85
  433. package/index.ts +0 -60
  434. package/lib/date-locale.ts +0 -195
  435. package/lib/field-classes.ts +0 -121
  436. package/lib/field-variants.ts +0 -117
  437. package/lib/fluid-hover-highlight.tsx +0 -139
  438. package/lib/focus-ring.tsx +0 -46
  439. package/lib/goo-indicator.tsx +0 -261
  440. package/lib/icon-context.tsx +0 -310
  441. package/lib/inert.ts +0 -22
  442. package/lib/morph-layers.tsx +0 -102
  443. package/lib/morph-part.tsx +0 -49
  444. package/lib/popup.ts +0 -52
  445. package/lib/reduced-motion.ts +0 -19
  446. package/lib/row-index.tsx +0 -29
  447. package/lib/row-order.tsx +0 -126
  448. package/lib/scroll-column.tsx +0 -273
  449. package/lib/shape-context.tsx +0 -138
  450. package/lib/shape-radius.ts +0 -67
  451. package/lib/size-context.tsx +0 -66
  452. package/lib/size-scale.ts +0 -115
  453. package/lib/slot.ts +0 -115
  454. package/lib/springs.ts +0 -62
  455. package/lib/surface-classes.ts +0 -58
  456. package/lib/surface-context.tsx +0 -21
  457. package/lib/use-controllable-state.ts +0 -44
  458. package/lib/use-fluid-hover.ts +0 -541
  459. package/lib/use-is-mobile.ts +0 -25
  460. package/lib/use-keyboard-nav-gate.ts +0 -45
  461. package/lib/use-merge-split.tsx +0 -209
  462. package/lib/use-morph.ts +0 -557
  463. package/lib/use-touch-primary.tsx +0 -43
  464. package/lib/utils.ts +0 -37
  465. package/preset.ts +0 -199
  466. package/primitives/code/examples.mdx +0 -27
  467. package/primitives/code/index.tsx +0 -80
  468. package/primitives/craft/demos.tsx +0 -173
  469. package/primitives/craft/examples.mdx +0 -142
  470. package/primitives/craft/index.tsx +0 -76
  471. package/primitives/fluid-hover/examples.mdx +0 -84
  472. package/primitives/fluid-hover/index.tsx +0 -316
  473. package/primitives/morph/examples.mdx +0 -139
  474. package/primitives/morph/index.tsx +0 -192
  475. package/primitives/motion/examples.mdx +0 -100
  476. package/primitives/motion/index.tsx +0 -160
  477. package/primitives/scroll-area/examples.mdx +0 -58
  478. package/primitives/scroll-area/index.tsx +0 -204
  479. package/primitives/separator/examples.mdx +0 -30
  480. package/primitives/separator/index.tsx +0 -53
  481. package/primitives/sizes/examples.mdx +0 -167
  482. package/primitives/sizes/index.tsx +0 -89
  483. package/primitives/skeleton/examples.mdx +0 -51
  484. package/primitives/skeleton/index.tsx +0 -72
  485. package/primitives/skeleton/skeleton.css +0 -15
  486. package/primitives/surface/examples.mdx +0 -173
  487. package/primitives/surface/index.tsx +0 -109
  488. package/primitives/surface/surface.css +0 -176
  489. /package/dist/shared/{components-3ey0hzpb.js → components-1v7rxytx.js} +0 -0
  490. /package/dist/shared/{components-jcnjay5g.js → components-ezxhrmer.js} +0 -0
@@ -1,74 +0,0 @@
1
- import Pagination from './index'
2
-
3
- # Basics
4
-
5
- ## Pages
6
-
7
- The current page melts from page to page, and the hover glides along the strip. A click between two pages lands on the lit one.
8
-
9
- <Pagination pageCount={12} defaultPage={5} />
10
-
11
- ## Few pages
12
-
13
- With nothing to skip, every page shows.
14
-
15
- <Pagination pageCount={5} defaultPage={2} />
16
-
17
- ## First and last
18
-
19
- `edges` adds buttons to the ends, for long runs of pages.
20
-
21
- <Pagination pageCount={40} defaultPage={18} edges />
22
-
23
- # Controls
24
-
25
- ## Jump to a page
26
-
27
- `variant="input"` swaps the strip for a field: type a page and press Enter. First and last come with it.
28
-
29
- <Pagination pageCount={24} defaultPage={3} variant="input" />
30
-
31
- ## Page size
32
-
33
- Setting `defaultPageSize` (or `pageSize`) adds a Select of `pageSizes`, the layout a data table footer uses.
34
-
35
- <Pagination pageCount={8} variant="input" defaultPageSize={20} />
36
-
37
- With `pageSizeLabel=""` the caption goes and `pageSizeAriaLabel` still names the Select.
38
-
39
- <Pagination pageCount={8} variant="input" defaultPageSize={20} pageSizeLabel="" pageSizeAriaLabel="Rows per page" />
40
-
41
- # Options
42
-
43
- ## Compact
44
-
45
- The strip steps down the size ladder with everything around it, the page-size menu included.
46
-
47
- <div className="flex flex-col gap-4">
48
- <Pagination pageCount={20} defaultPage={10} size="compact" />
49
- <Pagination pageCount={20} defaultPage={10} variant="input" defaultPageSize={10} size="compact" />
50
- </div>
51
-
52
- ## Translated labels
53
-
54
- Every label is a prop: the buttons' names, the field's name and the page-size caption.
55
-
56
- <Pagination
57
- pageCount={8}
58
- defaultPage={2}
59
- variant="input"
60
- defaultPageSize={10}
61
- label="Stránkovanie"
62
- firstLabel="Prvá strana"
63
- previousLabel="Predchádzajúca strana"
64
- nextLabel="Ďalšia strana"
65
- lastLabel="Posledná strana"
66
- pageLabel="Strana"
67
- pageSizeLabel="Riadkov na stranu"
68
- />
69
-
70
- ## Disabled
71
-
72
- `disabled` holds every control, e.g. while the next page loads.
73
-
74
- <Pagination pageCount={12} defaultPage={4} disabled />
@@ -1,401 +0,0 @@
1
- /*
2
- * Local addition (not part of Fluid Functionalism): page navigation in the
3
- * system's motion language, from the Pagination template in the modo-ui skill
4
- * (`references/authoring.md`). The current page is a liquid indicator
5
- * (`lib/goo-indicator.tsx`) that melts from page to page and one fluid hover
6
- * highlight runs along the strip. Extended for data tables: first / last
7
- * buttons, a jump-to-page field (`variant="input"`), a page-size Select and
8
- * every label as a prop.
9
- */
10
-
11
- import { type KeyboardEvent, useEffect, useRef, useState } from 'react'
12
- import { FluidHoverHighlight } from '../../../lib/fluid-hover-highlight'
13
- import { GooIndicator } from '../../../lib/goo-indicator'
14
- import { type IconName, useIcon } from '../../../lib/icon-context'
15
- import { useShape } from '../../../lib/shape-context'
16
- import { type SizeVariant, useSize } from '../../../lib/size-context'
17
- import { useControllableState } from '../../../lib/use-controllable-state'
18
- import {
19
- type ItemRect,
20
- type UseFluidHoverReturn,
21
- useFluidHover,
22
- useRegisterFluidHoverItem,
23
- } from '../../../lib/use-fluid-hover'
24
- import { cn } from '../../../lib/utils'
25
- import { SizeProvider } from '../../../primitives/sizes'
26
- import Button from '../../button'
27
- import { Input } from '../../inputs/input'
28
- import Select from '../../inputs/select'
29
-
30
- // Literal tables: UnoCSS only generates the classes it can read whole.
31
- const SQUARE = { default: 'min-w-9', compact: 'min-w-7' }
32
- const FIELD = { default: 'w-14', compact: 'w-12' }
33
-
34
- type Slot = number | 'gap'
35
-
36
- type PaginationVariant = 'pages' | 'input'
37
-
38
- /** The ends, the current page and its siblings, and a gap wherever pages are skipped. */
39
- function slots(page: number, total: number, siblings: number): Slot[] {
40
- const shown = new Set([1, total])
41
- for (let p = page - siblings; p <= page + siblings; p++) if (p >= 1 && p <= total) shown.add(p)
42
-
43
- const result: Slot[] = []
44
- let previous = 0
45
- for (const p of [...shown].sort((a, b) => a - b)) {
46
- // A gap of one page shows that page: an ellipsis would be no shorter.
47
- if (p - previous === 2) result.push(p - 1)
48
- else if (p - previous > 2) result.push('gap')
49
- result.push(p)
50
- previous = p
51
- }
52
- return result
53
- }
54
-
55
- interface PageButtonProps {
56
- page: number
57
- index: number
58
- current: boolean
59
- lit: boolean
60
- disabled: boolean
61
- register: UseFluidHoverReturn['registerItem']
62
- onSelect: (page: number) => void
63
- }
64
-
65
- function PageButton({ page, index, current, lit, disabled, register, onSelect }: PageButtonProps) {
66
- const ref = useRef<HTMLButtonElement>(null)
67
- const size = useSize()
68
- const shape = useShape()
69
- useRegisterFluidHoverItem(register, index, ref)
70
-
71
- return (
72
- <button
73
- ref={ref}
74
- type="button"
75
- aria-current={current ? 'page' : undefined}
76
- disabled={disabled}
77
- onClick={() => onSelect(page)}
78
- className={cn(
79
- 'relative z-10 flex cursor-pointer items-center justify-center px-2 tabular-nums outline-none transition-[opacity] duration-fast focus-visible:ring-1 focus-visible:ring-focus-ring disabled:pointer-events-none disabled:opacity-50',
80
- size.control,
81
- SQUARE[size.variant],
82
- shape.button,
83
- )}
84
- >
85
- {/* The invisible semibold copy holds the width, so the current page turns semibold without moving its neighbours. */}
86
- <span className={cn('inline-grid', size.text)}>
87
- <span aria-hidden="true" className="invisible col-start-1 row-start-1 weight-semibold">
88
- {page}
89
- </span>
90
- <span
91
- className={cn(
92
- 'col-start-1 row-start-1 transition-[color,font-variation-settings] duration-fast',
93
- current || lit ? 'text-foreground' : 'text-muted-foreground',
94
- current ? 'weight-semibold' : 'weight-normal',
95
- )}
96
- >
97
- {page}
98
- </span>
99
- </span>
100
- </button>
101
- )
102
- }
103
-
104
- interface PageStripProps {
105
- current: number
106
- total: number
107
- siblings: number
108
- disabled: boolean
109
- onSelect: (page: number) => void
110
- }
111
-
112
- /** The page buttons: one fluid hover, a liquid current-page indicator. */
113
- function PageStrip({ current, total, siblings, disabled, onSelect }: PageStripProps) {
114
- const size = useSize()
115
- const shape = useShape()
116
- const containerRef = useRef<HTMLDivElement>(null)
117
- const hover = useFluidHover(containerRef, { axis: 'x' })
118
-
119
- const list = slots(current, total, siblings)
120
- const pages = list.filter((slot): slot is number => slot !== 'gap')
121
- // A page change can re-key the strip; hold the last measured rect so the
122
- // indicator travels from where it was instead of blinking out mid-measure.
123
- const measured = hover.isMeasured ? hover.itemRects[pages.indexOf(current)] : undefined
124
- const lastRect = useRef<ItemRect | undefined>(measured)
125
- if (measured) lastRect.current = measured
126
-
127
- return (
128
- <div ref={containerRef} {...hover.handlers} className="relative flex items-center gap-1">
129
- {lastRect.current && (
130
- <GooIndicator rect={lastRect.current} className={cn('bg-accent', shape.bg)} opacity={disabled ? 0.5 : 1} />
131
- )}
132
- <FluidHoverHighlight hover={hover} hidden={disabled} className={shape.bg} />
133
- {list.map((slot, i) =>
134
- slot === 'gap' ? (
135
- <span
136
- key={`gap-${i}`}
137
- aria-hidden="true"
138
- className={cn(
139
- 'flex items-center justify-center text-muted-foreground',
140
- size.control,
141
- SQUARE[size.variant],
142
- size.text,
143
- )}
144
- >
145
- …
146
- </span>
147
- ) : (
148
- <PageButton
149
- key={slot}
150
- page={slot}
151
- index={pages.indexOf(slot)}
152
- current={slot === current}
153
- lit={hover.activeIndex === pages.indexOf(slot)}
154
- disabled={disabled}
155
- register={hover.registerItem}
156
- onSelect={onSelect}
157
- />
158
- ),
159
- )}
160
- </div>
161
- )
162
- }
163
-
164
- interface PageFieldProps {
165
- current: number
166
- total: number
167
- disabled: boolean
168
- label: string
169
- onSelect: (page: number) => void
170
- }
171
-
172
- /** Jump to a page: type a number, Enter or leaving the field goes there, Escape puts the current page back. */
173
- function PageField({ current, total, disabled, label, onSelect }: PageFieldProps) {
174
- const size = useSize()
175
- const [draft, setDraft] = useState(String(current))
176
-
177
- useEffect(() => setDraft(String(current)), [current])
178
-
179
- const commit = () => {
180
- const page = Number(draft)
181
- if (Number.isInteger(page) && page >= 1 && page <= total) onSelect(page)
182
- else setDraft(String(current))
183
- }
184
-
185
- const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {
186
- if (event.key === 'Enter') commit()
187
- if (event.key === 'Escape') setDraft(String(current))
188
- }
189
-
190
- return (
191
- <div className={cn('flex items-center', size.gap)}>
192
- <Input
193
- variant="bordered"
194
- inputMode="numeric"
195
- aria-label={label}
196
- value={draft}
197
- onChange={value => setDraft(value.replace(/\D/g, ''))}
198
- onKeyDown={onKeyDown}
199
- onBlur={commit}
200
- disabled={disabled || total <= 1}
201
- className={cn('tabular-nums', FIELD[size.variant])}
202
- />
203
- <span className={cn('whitespace-nowrap tabular-nums text-muted-foreground', size.text)}>/ {total}</span>
204
- </div>
205
- )
206
- }
207
-
208
- interface PaginationProps {
209
- /** Number of pages. Below 1 it counts as 1. */
210
- pageCount: number
211
- /** Controlled current page, counted from 1. Pair with `onPageChange`. */
212
- page?: number
213
- /** Initial page, for an uncontrolled pagination. Defaults to `1`. */
214
- defaultPage?: number
215
- /** Called with the new page whenever it changes. */
216
- onPageChange?: (page: number) => void
217
- /** Page buttons along a strip, or a field to type the page into (the dense layout data tables use). Defaults to `'pages'`. */
218
- variant?: PaginationVariant
219
- /** Pages shown on each side of the current one before a gap, with `variant="pages"`. Defaults to `1`. */
220
- siblings?: number
221
- /** Show the first and last page buttons. Defaults to on with `variant="input"` and off with `variant="pages"`. */
222
- edges?: boolean
223
- /** Controlled page size: shows the page-size Select. Pair with `onPageSizeChange`. */
224
- pageSize?: number
225
- /** Initial page size, for an uncontrolled page-size Select; setting it shows the Select. */
226
- defaultPageSize?: number
227
- /** The page sizes the Select offers. Defaults to `[10, 20, 30, 40, 50]`. */
228
- pageSizes?: number[]
229
- /** Called with the new page size whenever it changes. */
230
- onPageSizeChange?: (pageSize: number) => void
231
- /** Disables every control, e.g. while a page loads. Defaults to `false`. */
232
- disabled?: boolean
233
- /** Accessible name of the `nav`. Defaults to `'Pagination'`. */
234
- label?: string
235
- /** Accessible name of the first page button. Defaults to `'First page'`. */
236
- firstLabel?: string
237
- /** Accessible name of the previous page button. Defaults to `'Previous page'`. */
238
- previousLabel?: string
239
- /** Accessible name of the next page button. Defaults to `'Next page'`. */
240
- nextLabel?: string
241
- /** Accessible name of the last page button. Defaults to `'Last page'`. */
242
- lastLabel?: string
243
- /** Accessible name of the page field, with `variant="input"`. Defaults to `'Page'`. */
244
- pageLabel?: string
245
- /** Text before the page-size Select, also its accessible name unless `pageSizeAriaLabel` is set; an empty string shows none. Defaults to `'Rows per page'`. */
246
- pageSizeLabel?: string
247
- /** Accessible name of the page-size Select, for when it should differ from the visible `pageSizeLabel` (or that is empty). Defaults to `pageSizeLabel`, else `'Rows per page'`. */
248
- pageSizeAriaLabel?: string
249
- /** Pins the strip to one step of the size ladder (36px default, 28px compact). Defaults to the surrounding SizeProvider. */
250
- size?: SizeVariant
251
- /** Classes for the `nav` root. */
252
- className?: string
253
- }
254
-
255
- interface StepProps {
256
- icon: IconName
257
- label: string
258
- disabled: boolean
259
- onClick: () => void
260
- }
261
-
262
- function Step({ icon, label, disabled, onClick }: StepProps) {
263
- const size = useSize()
264
- const Icon = useIcon(icon)
265
- return (
266
- <Button
267
- variant="ghost"
268
- size={size.variant === 'compact' ? 'icon-compact' : 'icon'}
269
- aria-label={label}
270
- disabled={disabled}
271
- onClick={onClick}
272
- >
273
- <Icon />
274
- </Button>
275
- )
276
- }
277
-
278
- /**
279
- * Page navigation: first, previous, the pages or a field to jump to one,
280
- * next and last, with an optional page-size Select for data tables.
281
- *
282
- * With the default `variant="pages"` the strip shows the first and last
283
- * pages and the current page's neighbours, with a gap wherever pages are
284
- * skipped. The current page is a liquid indicator: picking another page melts
285
- * it across the strip (see the liquid indicators in Morph), and its number
286
- * turns semibold without moving the others. One fluid hover highlight runs
287
- * along the page buttons, so a click between two pages lands on the lit one.
288
- *
289
- * `variant="input"` swaps the strip for a field showing the current page and
290
- * the page count (`3 / 12`): type a page and press Enter, or leave the field,
291
- * to go there; Escape puts the current page back. It brings first and last
292
- * buttons with it (`edges`).
293
- *
294
- * Setting `pageSize` or `defaultPageSize` adds a Select of `pageSizes`. Every
295
- * label is a prop, so a translated app passes its own strings. Works
296
- * controlled (`page` + `onPageChange`, `pageSize` + `onPageSizeChange`) or
297
- * uncontrolled (`defaultPage`, `defaultPageSize`).
298
- *
299
- * @example {@include ./examples.mdx}
300
- */
301
- function Pagination({
302
- pageCount,
303
- page,
304
- defaultPage = 1,
305
- onPageChange,
306
- variant = 'pages',
307
- siblings = 1,
308
- edges: edgesProp,
309
- pageSize,
310
- defaultPageSize,
311
- pageSizes = [10, 20, 30, 40, 50],
312
- onPageSizeChange,
313
- disabled = false,
314
- label = 'Pagination',
315
- firstLabel = 'First page',
316
- previousLabel = 'Previous page',
317
- nextLabel = 'Next page',
318
- lastLabel = 'Last page',
319
- pageLabel = 'Page',
320
- pageSizeLabel = 'Rows per page',
321
- pageSizeAriaLabel,
322
- size: sizeProp,
323
- className,
324
- }: PaginationProps) {
325
- const [requested, setCurrent] = useControllableState(page, defaultPage, onPageChange)
326
- const [rows, setRows] = useControllableState(pageSize, defaultPageSize ?? pageSizes[0] ?? 10, onPageSizeChange)
327
- const size = useSize(sizeProp)
328
- const total = Math.max(1, pageCount)
329
- const current = Math.min(Math.max(1, requested), total)
330
- const edges = edgesProp ?? variant === 'input'
331
- const withPageSize = pageSize !== undefined || defaultPageSize !== undefined
332
-
333
- const nav = (
334
- <nav aria-label={label} className={cn('flex flex-wrap items-center', size.gap, className)}>
335
- <div className={cn('flex items-center', size.gap)}>
336
- {edges && (
337
- <Step
338
- icon="chevrons-left"
339
- label={firstLabel}
340
- disabled={disabled || current <= 1}
341
- onClick={() => setCurrent(1)}
342
- />
343
- )}
344
- <Step
345
- icon="chevron-left"
346
- label={previousLabel}
347
- disabled={disabled || current <= 1}
348
- onClick={() => setCurrent(current - 1)}
349
- />
350
- {variant === 'input' ? (
351
- <PageField current={current} total={total} disabled={disabled} label={pageLabel} onSelect={setCurrent} />
352
- ) : (
353
- <PageStrip current={current} total={total} siblings={siblings} disabled={disabled} onSelect={setCurrent} />
354
- )}
355
- <Step
356
- icon="chevron-right"
357
- label={nextLabel}
358
- disabled={disabled || current >= total}
359
- onClick={() => setCurrent(current + 1)}
360
- />
361
- {edges && (
362
- <Step
363
- icon="chevrons-right"
364
- label={lastLabel}
365
- disabled={disabled || current >= total}
366
- onClick={() => setCurrent(total)}
367
- />
368
- )}
369
- </div>
370
-
371
- {withPageSize && (
372
- <div className={cn('flex items-center', size.gap)}>
373
- {pageSizeLabel && (
374
- <span className={cn('whitespace-nowrap text-muted-foreground', size.text)}>{pageSizeLabel}</span>
375
- )}
376
- <Select value={String(rows)} onValueChange={value => setRows(Number(value))} disabled={disabled}>
377
- <Select.Trigger
378
- aria-label={pageSizeAriaLabel || pageSizeLabel || 'Rows per page'}
379
- className="min-w-0 tabular-nums"
380
- />
381
- <Select.Content>
382
- {pageSizes.map((option, i) => (
383
- <Select.Item key={option} index={i} value={String(option)}>
384
- {option}
385
- </Select.Item>
386
- ))}
387
- </Select.Content>
388
- </Select>
389
- </div>
390
- )}
391
- </nav>
392
- )
393
-
394
- // A size prop pins the whole strip, the page buttons and the Select's menu included.
395
- return sizeProp ? <SizeProvider size={sizeProp}>{nav}</SizeProvider> : nav
396
- }
397
-
398
- export type { PaginationProps, PaginationVariant }
399
- export { Pagination }
400
-
401
- export default Pagination