@nexus-cross/design-system 1.0.6-beta.2 → 1.0.7

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 (403) hide show
  1. package/DESIGN.md +185 -0
  2. package/cursor-rules/nexus-ui-api.mdc +223 -7
  3. package/cursor-rules/nexus-ui-components.mdc +44 -17
  4. package/dist/alert.js +16 -0
  5. package/dist/alert.mjs +3 -0
  6. package/dist/badge.js +16 -0
  7. package/dist/badge.mjs +3 -0
  8. package/dist/breadcrumb.js +12 -0
  9. package/dist/breadcrumb.mjs +3 -0
  10. package/dist/chunks/chunk-22O6YUYH.mjs +5 -0
  11. package/dist/chunks/chunk-2N2EPBO4.js +120 -0
  12. package/dist/chunks/{chunk-AFSEYJZT.js → chunk-2T7RUYEK.js} +175 -50
  13. package/dist/chunks/chunk-2UPGFY6E.mjs +76 -0
  14. package/dist/chunks/{chunk-VGO4Z2WH.js → chunk-3RK3UT2O.js} +50 -12
  15. package/dist/chunks/chunk-3ZWN66YH.js +53 -0
  16. package/dist/chunks/chunk-5PQ3UCKF.js +99 -0
  17. package/dist/chunks/chunk-6BWOKTVQ.mjs +87 -0
  18. package/dist/chunks/chunk-6DBRL6NA.mjs +81 -0
  19. package/dist/chunks/{chunk-HNLI646G.mjs → chunk-AAITRHED.mjs} +51 -13
  20. package/dist/chunks/chunk-B5O6W3Z4.mjs +73 -0
  21. package/dist/chunks/chunk-BJM3NDT2.mjs +368 -0
  22. package/dist/chunks/chunk-C2DSAJTL.js +109 -0
  23. package/dist/chunks/chunk-CUTMLBC3.mjs +86 -0
  24. package/dist/chunks/chunk-CV4GMFWP.js +174 -0
  25. package/dist/chunks/chunk-DICN6GKE.js +99 -0
  26. package/dist/chunks/chunk-DYPPVXQF.js +143 -0
  27. package/dist/chunks/chunk-EJY7IVSK.mjs +31 -0
  28. package/dist/chunks/chunk-FUIBYZZ4.mjs +98 -0
  29. package/dist/chunks/chunk-H2G5FMRN.mjs +75 -0
  30. package/dist/chunks/chunk-H2V7RHYV.mjs +120 -0
  31. package/dist/chunks/chunk-MMCA33FW.mjs +85 -0
  32. package/dist/chunks/chunk-NZHK76R3.js +109 -0
  33. package/dist/chunks/chunk-OE5BAEBE.js +7 -0
  34. package/dist/chunks/chunk-P73MEU7N.mjs +150 -0
  35. package/dist/chunks/chunk-PDJTSQOC.js +59 -0
  36. package/dist/chunks/chunk-S2GMEC43.js +109 -0
  37. package/dist/chunks/chunk-X3CTJ7TD.js +108 -0
  38. package/dist/chunks/chunk-XGIJZ3NZ.js +160 -0
  39. package/dist/chunks/chunk-YO5MSDPX.mjs +36 -0
  40. package/dist/chunks/chunk-ZI4LN2B2.js +96 -0
  41. package/dist/chunks/chunk-ZU4AWAFT.mjs +137 -0
  42. package/dist/component-tokens/button.d.ts +3 -0
  43. package/dist/component-tokens/button.d.ts.map +1 -0
  44. package/dist/component-tokens/index.d.ts +3 -0
  45. package/dist/component-tokens/index.d.ts.map +1 -0
  46. package/dist/component-tokens/types.d.ts +19 -0
  47. package/dist/component-tokens/types.d.ts.map +1 -0
  48. package/dist/{accordion.d.mts → components/Accordion.d.ts} +2 -3
  49. package/dist/components/Accordion.d.ts.map +1 -0
  50. package/dist/components/Alert.d.ts +16 -0
  51. package/dist/components/Alert.d.ts.map +1 -0
  52. package/dist/{avatar.d.mts → components/Avatar.d.ts} +5 -6
  53. package/dist/components/Avatar.d.ts.map +1 -0
  54. package/dist/components/Badge.d.ts +17 -0
  55. package/dist/components/Badge.d.ts.map +1 -0
  56. package/dist/components/Breadcrumb.d.ts +15 -0
  57. package/dist/components/Breadcrumb.d.ts.map +1 -0
  58. package/dist/{button.d.mts → components/Button.d.ts} +5 -6
  59. package/dist/components/Button.d.ts.map +1 -0
  60. package/dist/{carousel.d.mts → components/Carousel.d.ts} +5 -6
  61. package/dist/components/Carousel.d.ts.map +1 -0
  62. package/dist/{checkbox.d.mts → components/CheckBox.d.ts} +6 -7
  63. package/dist/components/CheckBox.d.ts.map +1 -0
  64. package/dist/{chip.d.mts → components/Chip.d.ts} +6 -7
  65. package/dist/components/Chip.d.ts.map +1 -0
  66. package/dist/{client-only.d.mts → components/ClientOnly.d.ts} +4 -5
  67. package/dist/components/ClientOnly.d.ts.map +1 -0
  68. package/dist/{countdown.d.mts → components/Countdown.d.ts} +3 -3
  69. package/dist/components/Countdown.d.ts.map +1 -0
  70. package/dist/{counter.d.mts → components/Counter.d.ts} +3 -3
  71. package/dist/components/Counter.d.ts.map +1 -0
  72. package/dist/{data-list.d.mts → components/DataList.d.ts} +4 -5
  73. package/dist/components/DataList.d.ts.map +1 -0
  74. package/dist/components/DatePicker.d.ts +17 -0
  75. package/dist/components/DatePicker.d.ts.map +1 -0
  76. package/dist/{divider.d.mts → components/Divider.d.ts} +5 -6
  77. package/dist/components/Divider.d.ts.map +1 -0
  78. package/dist/{drawer.d.mts → components/Drawer.d.ts} +13 -15
  79. package/dist/components/Drawer.d.ts.map +1 -0
  80. package/dist/components/DropdownMenu.d.ts +30 -0
  81. package/dist/components/DropdownMenu.d.ts.map +1 -0
  82. package/dist/{ellipsis.d.mts → components/Ellipsis.d.ts} +4 -5
  83. package/dist/components/Ellipsis.d.ts.map +1 -0
  84. package/dist/components/EmptyState.d.ts +15 -0
  85. package/dist/components/EmptyState.d.ts.map +1 -0
  86. package/dist/{error-boundary.d.mts → components/ErrorBoundary.d.ts} +4 -5
  87. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  88. package/dist/{infinite-scroll.d.mts → components/InfiniteScroll.d.ts} +5 -6
  89. package/dist/components/InfiniteScroll.d.ts.map +1 -0
  90. package/dist/{marquee.d.mts → components/Marquee.d.ts} +3 -3
  91. package/dist/components/Marquee.d.ts.map +1 -0
  92. package/dist/{number-input.d.mts → components/NumberInput.d.ts} +10 -12
  93. package/dist/components/NumberInput.d.ts.map +1 -0
  94. package/dist/components/NxImage.d.ts +13 -0
  95. package/dist/components/NxImage.d.ts.map +1 -0
  96. package/dist/{pagination.d.mts → components/Pagination.d.ts} +6 -7
  97. package/dist/components/Pagination.d.ts.map +1 -0
  98. package/dist/components/Popover.d.ts +23 -0
  99. package/dist/components/Popover.d.ts.map +1 -0
  100. package/dist/{price-input.d.mts → components/PriceInput.d.ts} +5 -6
  101. package/dist/components/PriceInput.d.ts.map +1 -0
  102. package/dist/components/Progress.d.ts +17 -0
  103. package/dist/components/Progress.d.ts.map +1 -0
  104. package/dist/{radio-group.d.mts → components/RadioGroup.d.ts} +6 -7
  105. package/dist/components/RadioGroup.d.ts.map +1 -0
  106. package/dist/{select.d.mts → components/Select.d.ts} +7 -10
  107. package/dist/components/Select.d.ts.map +1 -0
  108. package/dist/{skeleton.d.mts → components/Skeleton.d.ts} +3 -3
  109. package/dist/components/Skeleton.d.ts.map +1 -0
  110. package/dist/components/Slider.d.ts +19 -0
  111. package/dist/components/Slider.d.ts.map +1 -0
  112. package/dist/{spinner.d.mts → components/Spinner.d.ts} +3 -3
  113. package/dist/components/Spinner.d.ts.map +1 -0
  114. package/dist/components/Stepper.d.ts +19 -0
  115. package/dist/components/Stepper.d.ts.map +1 -0
  116. package/dist/{switch.d.mts → components/Switch.d.ts} +5 -6
  117. package/dist/components/Switch.d.ts.map +1 -0
  118. package/dist/{tab.d.mts → components/Tab.d.ts} +7 -9
  119. package/dist/components/Tab.d.ts.map +1 -0
  120. package/dist/components/TagInput.d.ts +20 -0
  121. package/dist/components/TagInput.d.ts.map +1 -0
  122. package/dist/components/TextArea.d.ts +18 -0
  123. package/dist/components/TextArea.d.ts.map +1 -0
  124. package/dist/{text-input.d.mts → components/TextInput.d.ts} +5 -6
  125. package/dist/components/TextInput.d.ts.map +1 -0
  126. package/dist/{theme-provider.d.mts → components/ThemeProvider.d.ts} +3 -3
  127. package/dist/components/ThemeProvider.d.ts.map +1 -0
  128. package/dist/components/ToggleGroup.d.ts +35 -0
  129. package/dist/components/ToggleGroup.d.ts.map +1 -0
  130. package/dist/{tooltip.d.mts → components/Tooltip.d.ts} +6 -10
  131. package/dist/components/Tooltip.d.ts.map +1 -0
  132. package/dist/{virtual-scroll.d.mts → components/VirtualScroll.d.ts} +4 -4
  133. package/dist/components/VirtualScroll.d.ts.map +1 -0
  134. package/dist/date-picker.js +12 -0
  135. package/dist/date-picker.mjs +3 -0
  136. package/dist/dropdown-menu.js +32 -0
  137. package/dist/dropdown-menu.mjs +3 -0
  138. package/dist/empty-state.js +16 -0
  139. package/dist/empty-state.mjs +3 -0
  140. package/dist/hooks/useCheckDevice.d.ts +4 -4
  141. package/dist/hooks/useCheckDevice.d.ts.map +1 -0
  142. package/dist/hooks/useClickOutside.d.ts +2 -2
  143. package/dist/hooks/useClickOutside.d.ts.map +1 -0
  144. package/dist/hooks/useDraggableBottomSheet.d.ts +3 -3
  145. package/dist/hooks/useDraggableBottomSheet.d.ts.map +1 -0
  146. package/dist/hooks/useDraggableWindow.d.ts +5 -7
  147. package/dist/hooks/useDraggableWindow.d.ts.map +1 -0
  148. package/dist/hooks/useInView.d.ts +3 -3
  149. package/dist/hooks/useInView.d.ts.map +1 -0
  150. package/dist/hooks/useModal.d.ts +48 -2
  151. package/dist/hooks/useModal.d.ts.map +1 -0
  152. package/dist/index.d.ts +100 -77
  153. package/dist/index.d.ts.map +1 -0
  154. package/dist/index.js +269 -157
  155. package/dist/index.mjs +30 -18
  156. package/dist/modal/Modal.d.ts +52 -0
  157. package/dist/modal/Modal.d.ts.map +1 -0
  158. package/dist/modal/components/ModalComponent.d.ts +22 -0
  159. package/dist/modal/components/ModalComponent.d.ts.map +1 -0
  160. package/dist/modal/components/ModalContainer.d.ts +9 -0
  161. package/dist/modal/components/ModalContainer.d.ts.map +1 -0
  162. package/dist/modal/components/ModalPortal.d.ts +8 -0
  163. package/dist/modal/components/ModalPortal.d.ts.map +1 -0
  164. package/dist/modal/components/ModalPortalTarget.d.ts +7 -0
  165. package/dist/modal/components/ModalPortalTarget.d.ts.map +1 -0
  166. package/dist/modal/components/ModalTemplate.d.ts +20 -0
  167. package/dist/modal/components/ModalTemplate.d.ts.map +1 -0
  168. package/dist/modal/components/ModalTemplate.variants.d.ts +29 -0
  169. package/dist/modal/components/ModalTemplate.variants.d.ts.map +1 -0
  170. package/dist/modal/constants.d.ts +3 -0
  171. package/dist/modal/constants.d.ts.map +1 -0
  172. package/dist/modal/index.d.ts +11 -82
  173. package/dist/modal/index.d.ts.map +1 -0
  174. package/dist/modal/index.js +12 -12
  175. package/dist/modal/index.mjs +3 -3
  176. package/dist/modal/types.d.ts +90 -0
  177. package/dist/modal/types.d.ts.map +1 -0
  178. package/dist/number-input.js +4 -4
  179. package/dist/number-input.mjs +1 -1
  180. package/dist/nx-image.js +12 -0
  181. package/dist/nx-image.mjs +3 -0
  182. package/dist/progress.js +16 -0
  183. package/dist/progress.mjs +3 -0
  184. package/dist/schemas/_all.json +840 -13
  185. package/dist/schemas/accordion.d.ts +67 -0
  186. package/dist/schemas/accordion.d.ts.map +1 -0
  187. package/dist/schemas/alert.d.ts +30 -0
  188. package/dist/schemas/alert.d.ts.map +1 -0
  189. package/dist/schemas/alert.json +49 -0
  190. package/dist/schemas/avatar.d.ts +30 -0
  191. package/dist/schemas/avatar.d.ts.map +1 -0
  192. package/dist/schemas/badge.d.ts +33 -0
  193. package/dist/schemas/badge.d.ts.map +1 -0
  194. package/dist/schemas/badge.json +76 -0
  195. package/dist/schemas/breadcrumb.d.ts +38 -0
  196. package/dist/schemas/breadcrumb.d.ts.map +1 -0
  197. package/dist/schemas/breadcrumb.json +47 -0
  198. package/dist/schemas/button.d.ts +42 -0
  199. package/dist/schemas/button.d.ts.map +1 -0
  200. package/dist/schemas/carousel.d.ts +48 -0
  201. package/dist/schemas/carousel.d.ts.map +1 -0
  202. package/dist/schemas/checkbox.d.ts +48 -0
  203. package/dist/schemas/checkbox.d.ts.map +1 -0
  204. package/dist/schemas/chip.d.ts +30 -0
  205. package/dist/schemas/chip.d.ts.map +1 -0
  206. package/dist/schemas/client-only.d.ts +12 -0
  207. package/dist/schemas/client-only.d.ts.map +1 -0
  208. package/dist/schemas/countdown.d.ts +52 -0
  209. package/dist/schemas/countdown.d.ts.map +1 -0
  210. package/dist/schemas/counter.d.ts +36 -0
  211. package/dist/schemas/counter.d.ts.map +1 -0
  212. package/dist/schemas/data-list.d.ts +33 -0
  213. package/dist/schemas/data-list.d.ts.map +1 -0
  214. package/dist/schemas/date-picker.d.ts +36 -0
  215. package/dist/schemas/date-picker.d.ts.map +1 -0
  216. package/dist/schemas/datePicker.json +56 -0
  217. package/dist/schemas/divider.d.ts +21 -0
  218. package/dist/schemas/divider.d.ts.map +1 -0
  219. package/dist/schemas/drawer.d.ts +95 -0
  220. package/dist/schemas/drawer.d.ts.map +1 -0
  221. package/dist/schemas/dropdown-menu.d.ts +64 -0
  222. package/dist/schemas/dropdown-menu.d.ts.map +1 -0
  223. package/dist/schemas/dropdownMenu.json +83 -0
  224. package/dist/schemas/ellipsis.d.ts +30 -0
  225. package/dist/schemas/ellipsis.d.ts.map +1 -0
  226. package/dist/schemas/empty-state.d.ts +27 -0
  227. package/dist/schemas/empty-state.d.ts.map +1 -0
  228. package/dist/schemas/emptyState.json +44 -0
  229. package/dist/schemas/error-boundary.d.ts +15 -0
  230. package/dist/schemas/error-boundary.d.ts.map +1 -0
  231. package/dist/schemas/index.d.ts +47 -0
  232. package/dist/schemas/index.d.ts.map +1 -0
  233. package/dist/schemas/infinite-scroll.d.ts +39 -0
  234. package/dist/schemas/infinite-scroll.d.ts.map +1 -0
  235. package/dist/schemas/marquee.d.ts +27 -0
  236. package/dist/schemas/marquee.d.ts.map +1 -0
  237. package/dist/schemas/modal.d.ts +176 -0
  238. package/dist/schemas/modal.d.ts.map +1 -0
  239. package/dist/schemas/number-input.d.ts +72 -0
  240. package/dist/schemas/number-input.d.ts.map +1 -0
  241. package/dist/schemas/numberInput.json +27 -8
  242. package/dist/schemas/nx-image.d.ts +33 -0
  243. package/dist/schemas/nx-image.d.ts.map +1 -0
  244. package/dist/schemas/nxImage.json +56 -0
  245. package/dist/schemas/pagination.d.ts +27 -0
  246. package/dist/schemas/pagination.d.ts.map +1 -0
  247. package/dist/schemas/popover.d.ts +39 -0
  248. package/dist/schemas/popover.d.ts.map +1 -0
  249. package/dist/schemas/price-input.d.ts +63 -0
  250. package/dist/schemas/price-input.d.ts.map +1 -0
  251. package/dist/schemas/progress.d.ts +30 -0
  252. package/dist/schemas/progress.d.ts.map +1 -0
  253. package/dist/schemas/progress.json +63 -0
  254. package/dist/schemas/radio-group.d.ts +61 -0
  255. package/dist/schemas/radio-group.d.ts.map +1 -0
  256. package/dist/schemas/select.d.ts +52 -0
  257. package/dist/schemas/select.d.ts.map +1 -0
  258. package/dist/schemas/skeleton.d.ts +27 -0
  259. package/dist/schemas/skeleton.d.ts.map +1 -0
  260. package/dist/schemas/slider.d.ts +45 -0
  261. package/dist/schemas/slider.d.ts.map +1 -0
  262. package/dist/schemas/slider.json +78 -0
  263. package/dist/schemas/spinner.d.ts +21 -0
  264. package/dist/schemas/spinner.d.ts.map +1 -0
  265. package/dist/schemas/stepper.d.ts +39 -0
  266. package/dist/schemas/stepper.d.ts.map +1 -0
  267. package/dist/schemas/stepper.json +73 -0
  268. package/dist/schemas/switch.d.ts +33 -0
  269. package/dist/schemas/switch.d.ts.map +1 -0
  270. package/dist/schemas/tab.d.ts +61 -0
  271. package/dist/schemas/tab.d.ts.map +1 -0
  272. package/dist/schemas/table.d.ts +113 -0
  273. package/dist/schemas/table.d.ts.map +1 -0
  274. package/dist/schemas/tag-input.d.ts +39 -0
  275. package/dist/schemas/tag-input.d.ts.map +1 -0
  276. package/dist/schemas/tagInput.json +70 -0
  277. package/dist/schemas/text-area.d.ts +69 -0
  278. package/dist/schemas/text-area.d.ts.map +1 -0
  279. package/dist/schemas/text-input.d.ts +78 -0
  280. package/dist/schemas/text-input.d.ts.map +1 -0
  281. package/dist/schemas/textArea.json +26 -1
  282. package/dist/schemas/theme-provider.d.ts +36 -0
  283. package/dist/schemas/theme-provider.d.ts.map +1 -0
  284. package/dist/schemas/toast.d.ts +91 -0
  285. package/dist/schemas/toast.d.ts.map +1 -0
  286. package/dist/schemas/toggle-group.d.ts +58 -0
  287. package/dist/schemas/toggle-group.d.ts.map +1 -0
  288. package/dist/schemas/toggleGroup.json +88 -0
  289. package/dist/schemas/tooltip.d.ts +33 -0
  290. package/dist/schemas/tooltip.d.ts.map +1 -0
  291. package/dist/schemas/virtual-scroll.d.ts +67 -0
  292. package/dist/schemas/virtual-scroll.d.ts.map +1 -0
  293. package/dist/schemas.js +177 -7
  294. package/dist/schemas.mjs +166 -8
  295. package/dist/slider.js +16 -0
  296. package/dist/slider.mjs +3 -0
  297. package/dist/stepper.js +16 -0
  298. package/dist/stepper.mjs +3 -0
  299. package/dist/styles/.generated/built.d.ts +3 -0
  300. package/dist/styles/.generated/built.d.ts.map +1 -0
  301. package/dist/styles/inject-layer.d.ts +2 -0
  302. package/dist/styles/inject-layer.d.ts.map +1 -0
  303. package/dist/styles/inject.d.ts +2 -0
  304. package/dist/styles/inject.d.ts.map +1 -0
  305. package/dist/styles/layer.js +2 -2
  306. package/dist/styles/layer.mjs +1 -1
  307. package/dist/styles.css +1655 -162
  308. package/dist/styles.js +2 -2
  309. package/dist/styles.layered.css +1655 -162
  310. package/dist/styles.mjs +1 -1
  311. package/dist/table/Table.d.ts +20 -0
  312. package/dist/table/Table.d.ts.map +1 -0
  313. package/dist/table/TableHighlightContext.d.ts +11 -0
  314. package/dist/table/TableHighlightContext.d.ts.map +1 -0
  315. package/dist/table/TableRow.d.ts +17 -0
  316. package/dist/table/TableRow.d.ts.map +1 -0
  317. package/dist/table/TdColumn.d.ts +14 -0
  318. package/dist/table/TdColumn.d.ts.map +1 -0
  319. package/dist/table/index.d.ts +23 -0
  320. package/dist/table/index.d.ts.map +1 -0
  321. package/dist/table/types.d.ts +27 -0
  322. package/dist/table/types.d.ts.map +1 -0
  323. package/dist/table.js +7 -7
  324. package/dist/table.mjs +1 -1
  325. package/dist/tag-input.js +16 -0
  326. package/dist/tag-input.mjs +3 -0
  327. package/dist/text-area.js +3 -3
  328. package/dist/text-area.mjs +1 -1
  329. package/dist/toast/Toast.d.ts +8 -0
  330. package/dist/toast/Toast.d.ts.map +1 -0
  331. package/dist/toast/index.d.ts +6 -0
  332. package/dist/toast/index.d.ts.map +1 -0
  333. package/dist/{toast.d.ts → toast/useToast.d.ts} +4 -14
  334. package/dist/toast/useToast.d.ts.map +1 -0
  335. package/dist/toggle-group.js +16 -0
  336. package/dist/toggle-group.mjs +3 -0
  337. package/dist/utils/cn.d.ts +3 -5
  338. package/dist/utils/cn.d.ts.map +1 -0
  339. package/dist/utils/scroll.d.ts +3 -4
  340. package/dist/utils/scroll.d.ts.map +1 -0
  341. package/package.json +104 -38
  342. package/scripts/setup-cursor-rules.cjs +15 -1
  343. package/dist/accordion.d.ts +0 -28
  344. package/dist/avatar.d.ts +0 -17
  345. package/dist/button.d.ts +0 -17
  346. package/dist/carousel.d.ts +0 -36
  347. package/dist/checkbox.d.ts +0 -21
  348. package/dist/chip.d.ts +0 -16
  349. package/dist/chunks/chunk-26BUGBOY.mjs +0 -57
  350. package/dist/chunks/chunk-CLGH2RTS.js +0 -7
  351. package/dist/chunks/chunk-ECVAVQUY.mjs +0 -243
  352. package/dist/chunks/chunk-UPCWJWXR.mjs +0 -5
  353. package/dist/chunks/chunk-WR55D4ZS.js +0 -80
  354. package/dist/client-only.d.ts +0 -13
  355. package/dist/countdown.d.ts +0 -27
  356. package/dist/counter.d.ts +0 -15
  357. package/dist/data-list.d.ts +0 -33
  358. package/dist/divider.d.ts +0 -14
  359. package/dist/drawer.d.ts +0 -42
  360. package/dist/ellipsis.d.ts +0 -16
  361. package/dist/error-boundary.d.ts +0 -20
  362. package/dist/hooks/useCheckDevice.d.mts +0 -47
  363. package/dist/hooks/useClickOutside.d.mts +0 -12
  364. package/dist/hooks/useDraggableBottomSheet.d.mts +0 -24
  365. package/dist/hooks/useDraggableWindow.d.mts +0 -21
  366. package/dist/hooks/useInView.d.mts +0 -14
  367. package/dist/hooks/useModal.d.mts +0 -2
  368. package/dist/index.d.mts +0 -77
  369. package/dist/infinite-scroll.d.ts +0 -26
  370. package/dist/marquee.d.ts +0 -12
  371. package/dist/modal/index.d.mts +0 -87
  372. package/dist/number-input.d.ts +0 -38
  373. package/dist/pagination.d.ts +0 -22
  374. package/dist/popover.d.mts +0 -25
  375. package/dist/popover.d.ts +0 -25
  376. package/dist/price-input.d.ts +0 -36
  377. package/dist/radio-group.d.ts +0 -29
  378. package/dist/schemas.d.mts +0 -1689
  379. package/dist/schemas.d.ts +0 -1689
  380. package/dist/select.d.ts +0 -31
  381. package/dist/skeleton.d.ts +0 -15
  382. package/dist/spinner.d.ts +0 -9
  383. package/dist/styles/layer.d.mts +0 -3
  384. package/dist/styles/layer.d.ts +0 -3
  385. package/dist/styles.d.mts +0 -3
  386. package/dist/styles.d.ts +0 -3
  387. package/dist/switch.d.ts +0 -15
  388. package/dist/tab.d.ts +0 -36
  389. package/dist/table.d.mts +0 -80
  390. package/dist/table.d.ts +0 -80
  391. package/dist/text-area.d.mts +0 -15
  392. package/dist/text-area.d.ts +0 -15
  393. package/dist/text-input.d.ts +0 -21
  394. package/dist/theme-provider.d.ts +0 -25
  395. package/dist/toast.d.mts +0 -42
  396. package/dist/tooltip.d.ts +0 -24
  397. package/dist/useModal-BsGIcP8t.d.mts +0 -128
  398. package/dist/useModal-BsGIcP8t.d.ts +0 -128
  399. package/dist/utils/cn.d.mts +0 -5
  400. package/dist/utils/scroll.d.mts +0 -4
  401. package/dist/virtual-scroll.d.ts +0 -34
  402. package/dist/chunks/{chunk-3VFBPFZF.mjs → chunk-CWMLTXOH.mjs} +2 -2
  403. package/dist/chunks/{chunk-U53UA76K.js → chunk-HFBTS42N.js} +2 -2
package/dist/styles.css CHANGED
@@ -92,7 +92,10 @@
92
92
  /* ── Shared: Shadow ── */
93
93
  --shadow-comp-sm: var(--shadow-elevation-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));
94
94
  --shadow-comp-md: var(--shadow-elevation-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));
95
- --shadow-comp-lg: var(--shadow-elevation-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
95
+ --shadow-comp-lg: var(
96
+ --shadow-elevation-lg,
97
+ 0 10px 15px -3px rgb(0 0 0 / 0.1)
98
+ );
96
99
 
97
100
  /* ── Shared: Overlay ── */
98
101
  --color-comp-overlay: var(--color-overlay-dim, rgba(0, 0, 0, 0.6));
@@ -134,6 +137,14 @@
134
137
  box-shadow: var(--shadow-comp-btn);
135
138
  transition-property: color, background-color, border-color;
136
139
  transition-duration: 200ms;
140
+ border: none;
141
+ background: none;
142
+ cursor: pointer;
143
+ font: inherit;
144
+ color: inherit;
145
+ padding: 0;
146
+ margin: 0;
147
+ text-decoration: none;
137
148
  }
138
149
  .nexus-btn:disabled,
139
150
  .nexus-btn[aria-disabled='true'] {
@@ -368,7 +379,9 @@
368
379
  font-weight: 500;
369
380
  line-height: 1;
370
381
  color: var(--color-text-primary);
371
- transition: border-color 200ms, box-shadow 200ms;
382
+ transition:
383
+ border-color 200ms,
384
+ box-shadow 200ms;
372
385
  }
373
386
  :where(.nexus-text-input) {
374
387
  width: 100%;
@@ -397,15 +410,18 @@
397
410
 
398
411
  /* ── Sizes ── */
399
412
  .nexus-text-input--xl {
400
- padding: calc(var(--spacing-padding-md, 1rem) - 1px) var(--spacing-padding-md, 1rem);
413
+ padding: calc(var(--spacing-padding-md, 1rem) - 1px)
414
+ var(--spacing-padding-md, 1rem);
401
415
  font-size: var(--text-text-base, 1rem);
402
416
  }
403
417
  .nexus-text-input--lg {
404
- padding: calc(var(--spacing-padding-sm, 0.75rem) - 1px) var(--spacing-padding-sm, 0.75rem);
418
+ padding: calc(var(--spacing-padding-sm, 0.75rem) - 1px)
419
+ var(--spacing-padding-sm, 0.75rem);
405
420
  font-size: var(--text-text-base, 1rem);
406
421
  }
407
422
  .nexus-text-input--md {
408
- padding: calc(var(--spacing-padding-xs, 0.5rem) - 1px) var(--spacing-padding-sm, 0.75rem);
423
+ padding: calc(var(--spacing-padding-xs, 0.5rem) - 1px)
424
+ var(--spacing-padding-sm, 0.75rem);
409
425
  font-size: var(--text-text-sm, 0.875rem);
410
426
  }
411
427
 
@@ -501,13 +517,15 @@
501
517
  text-decoration: underline;
502
518
  transition: color 150ms;
503
519
  }
504
- .nexus-price-input-field__balance:hover .nexus-price-input-field__balance-value {
520
+ .nexus-price-input-field__balance:hover
521
+ .nexus-price-input-field__balance-value {
505
522
  color: var(--color-text-primary);
506
523
  }
507
524
  .nexus-price-input-field__balance-value--exceeded {
508
525
  color: var(--color-status-danger);
509
526
  }
510
- .nexus-price-input-field__balance:hover .nexus-price-input-field__balance-value--exceeded {
527
+ .nexus-price-input-field__balance:hover
528
+ .nexus-price-input-field__balance-value--exceeded {
511
529
  color: var(--color-status-danger);
512
530
  }
513
531
  .nexus-price-input-field__description {
@@ -532,7 +550,9 @@
532
550
  font-weight: 500;
533
551
  line-height: 1;
534
552
  color: var(--color-text-primary);
535
- transition: border-color 200ms, box-shadow 200ms;
553
+ transition:
554
+ border-color 200ms,
555
+ box-shadow 200ms;
536
556
  }
537
557
  :where(.nexus-price-input) {
538
558
  width: 100%;
@@ -561,15 +581,18 @@
561
581
 
562
582
  /* ── Sizes ── */
563
583
  .nexus-price-input--xl {
564
- padding: calc(var(--spacing-padding-md, 1rem) - 1px) var(--spacing-padding-md, 1rem);
584
+ padding: calc(var(--spacing-padding-md, 1rem) - 1px)
585
+ var(--spacing-padding-md, 1rem);
565
586
  font-size: var(--text-text-base, 1rem);
566
587
  }
567
588
  .nexus-price-input--lg {
568
- padding: calc(var(--spacing-padding-sm, 0.75rem) - 1px) var(--spacing-padding-sm, 0.75rem);
589
+ padding: calc(var(--spacing-padding-sm, 0.75rem) - 1px)
590
+ var(--spacing-padding-sm, 0.75rem);
569
591
  font-size: var(--text-text-base, 1rem);
570
592
  }
571
593
  .nexus-price-input--md {
572
- padding: calc(var(--spacing-padding-xs, 0.5rem) - 1px) var(--spacing-padding-sm, 0.75rem);
594
+ padding: calc(var(--spacing-padding-xs, 0.5rem) - 1px)
595
+ var(--spacing-padding-sm, 0.75rem);
573
596
  font-size: var(--text-text-sm, 0.875rem);
574
597
  }
575
598
 
@@ -611,52 +634,137 @@
611
634
  TextArea
612
635
  ═══════════════════════════════════════════ */
613
636
 
637
+ /* ── Field wrapper ── */
638
+ .nexus-textarea-field {
639
+ display: flex;
640
+ flex-direction: column;
641
+ gap: 0.25rem;
642
+ }
643
+ .nexus-textarea-field__label {
644
+ font-size: var(--text-label-semibold-md, 0.875rem);
645
+ font-weight: 600;
646
+ color: var(--color-text-tertiary);
647
+ line-height: 1;
648
+ }
649
+ .nexus-textarea-field__footer {
650
+ display: flex;
651
+ align-items: center;
652
+ gap: 0.5rem;
653
+ }
654
+ .nexus-textarea-field__description {
655
+ flex: 1;
656
+ min-width: 0;
657
+ font-size: var(--text-text-xs, 0.75rem);
658
+ color: var(--color-text-tertiary);
659
+ line-height: 1.5;
660
+ letter-spacing: -0.12px;
661
+ }
662
+ .nexus-textarea-field__description--error {
663
+ color: var(--color-status-danger-intense, #d20625);
664
+ }
665
+ .nexus-textarea-field__count {
666
+ font-size: var(--text-text-xs, 0.75rem);
667
+ color: var(--color-text-tertiary);
668
+ line-height: 1.5;
669
+ letter-spacing: -0.12px;
670
+ text-align: right;
671
+ flex-shrink: 0;
672
+ margin-left: auto;
673
+ }
674
+ .nexus-textarea-field__count--error {
675
+ color: var(--color-status-danger-intense, #d20625);
676
+ }
677
+
678
+ /* ── Textarea box ── */
614
679
  .nexus-textarea {
615
- border-radius: var(--radius-corner-md, 0.375rem);
680
+ border-radius: var(--radius-corner-md, 0.5rem);
616
681
  border: 1px solid var(--color-border-default);
617
682
  background: var(--color-surface-default);
618
- padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
619
- font-size: var(--text-text-sm, 0.875rem);
620
683
  color: var(--color-text-primary);
621
- transition-property: border-color;
622
- transition-duration: 200ms;
684
+ font-weight: 500;
685
+ line-height: 1.5;
686
+ transition:
687
+ border-color 200ms,
688
+ box-shadow 200ms;
623
689
  resize: none;
690
+ min-height: 100px;
691
+ padding: var(--spacing-padding-sm, 0.75rem);
624
692
  }
625
693
  :where(.nexus-textarea) {
626
694
  width: 100%;
627
695
  }
628
696
  .nexus-textarea::placeholder {
629
- color: var(--color-text-tertiary);
697
+ color: var(--color-text-muted);
630
698
  }
631
699
  .nexus-textarea:focus-visible {
632
700
  outline: none;
633
701
  }
634
- .nexus-textarea:disabled {
635
- cursor: not-allowed;
636
- opacity: 0.5;
702
+
703
+ /* Hover */
704
+ .nexus-textarea:hover:not(.nexus-textarea--disabled):not(:focus) {
705
+ border-color: var(--color-border-default-hover);
706
+ box-shadow: 0 0 0 0.5px var(--color-border-default-hover);
637
707
  }
708
+
709
+ /* Focus — default */
638
710
  .nexus-textarea--default:focus {
639
- border-color: var(--color-text-primary);
711
+ border-color: var(--color-accent-primary);
712
+ box-shadow: 0 0 0 0.5px var(--color-accent-primary);
640
713
  }
714
+
715
+ /* Error */
641
716
  .nexus-textarea--error {
642
- border-color: var(--color-status-danger);
717
+ border-color: var(--color-status-danger-focus, #e62848);
718
+ box-shadow: 0 0 0 0.5px var(--color-status-danger-focus, #e62848);
643
719
  }
644
720
  .nexus-textarea--error:focus {
645
- border-color: var(--color-status-danger);
721
+ border-color: var(--color-status-danger-focus, #e62848);
722
+ box-shadow: 0 0 0 0.5px var(--color-status-danger-focus, #e62848);
646
723
  }
647
- .nexus-textarea-wrap {
648
- display: flex;
649
- flex-direction: column;
724
+
725
+ /* Disabled */
726
+ .nexus-textarea--disabled {
727
+ cursor: not-allowed;
728
+ background: var(
729
+ --color-surface-default-disabled,
730
+ var(--color-surface-strong)
731
+ );
732
+ border-color: var(--color-border-medium);
733
+ color: var(--color-text-muted);
650
734
  }
651
- .nexus-textarea-count {
652
- margin-top: 0.25rem;
653
- text-align: right;
654
- font-size: var(--text-text-xs, 0.75rem);
655
- color: var(--color-text-tertiary);
735
+
736
+ /* ── Sizes ── */
737
+ .nexus-textarea--lg {
738
+ font-size: var(--text-text-medium-base, 1rem);
739
+ letter-spacing: -0.16px;
656
740
  }
657
- .nexus-textarea-count__current {
658
- color: var(--color-text-primary);
659
- font-weight: 500;
741
+ .nexus-textarea--md {
742
+ font-size: var(--text-text-medium-sm, 0.875rem);
743
+ letter-spacing: -0.14px;
744
+ }
745
+
746
+ /* ── Resize modes ── */
747
+ .nexus-textarea--resize-default {
748
+ resize: vertical;
749
+ }
750
+ .nexus-textarea--resize-auto {
751
+ resize: none;
752
+ overflow: hidden;
753
+ }
754
+
755
+ /* ── Custom scrollbar ── */
756
+ .nexus-textarea:not(.nexus-textarea--resize-auto) {
757
+ overflow-y: auto;
758
+ }
759
+ .nexus-textarea::-webkit-scrollbar {
760
+ width: 5px;
761
+ }
762
+ .nexus-textarea::-webkit-scrollbar-track {
763
+ background: transparent;
764
+ }
765
+ .nexus-textarea::-webkit-scrollbar-thumb {
766
+ background: var(--color-icon-muted, #c6d0da);
767
+ border-radius: var(--radius-corner-full, 9999px);
660
768
  }
661
769
 
662
770
  /* ═══════════════════════════════════════════
@@ -665,81 +773,167 @@
665
773
 
666
774
  .nexus-number-input {
667
775
  display: flex;
668
- align-items: center;
669
- border-radius: var(--radius-corner-md, 0.375rem);
670
- border: 1px solid var(--color-border-default);
671
- background: var(--color-surface-default);
672
- color: var(--color-text-primary);
673
- transition: border-color 200ms, box-shadow 200ms;
776
+ flex-direction: column;
777
+ align-items: stretch;
674
778
  }
675
779
  :where(.nexus-number-input) {
676
780
  width: 100%;
677
781
  }
678
- .nexus-number-input:hover:not(.nexus-number-input--disabled):not(:focus-within) {
679
- box-shadow: 0 0 0 0.5px var(--color-border-default);
782
+
783
+ /* ── Header (label + max) ── */
784
+ .nexus-number-input__header {
785
+ display: flex;
786
+ align-items: center;
787
+ justify-content: space-between;
788
+ margin-bottom: 4px;
680
789
  }
681
- .nexus-number-input--default:focus-within {
682
- border-color: var(--color-accent-primary);
683
- box-shadow: 0 0 0 0.5px var(--color-accent-primary);
790
+ .nexus-number-input__label {
791
+ font-size: var(--text-label-semibold-md, 0.875rem);
792
+ font-weight: var(--font-weight-label-semibold-md, 600);
793
+ line-height: 1;
794
+ color: var(--color-text-tertiary);
684
795
  }
685
- .nexus-number-input--error {
686
- border-color: var(--color-status-danger);
796
+ .nexus-number-input__max {
797
+ display: flex;
798
+ align-items: center;
799
+ gap: 4px;
800
+ margin: 0;
801
+ margin-left: auto;
802
+ padding: 0;
803
+ border: none;
804
+ background: none;
805
+ font-size: var(--text-text-xs, 0.75rem);
806
+ font-weight: 400;
807
+ line-height: 1.5;
808
+ letter-spacing: -0.01em;
809
+ cursor: pointer;
687
810
  }
688
- .nexus-number-input--error:focus-within {
689
- border-color: var(--color-status-danger);
690
- box-shadow: 0 0 0 0.5px var(--color-status-danger);
811
+ .nexus-number-input__max:disabled {
812
+ cursor: default;
691
813
  }
692
- .nexus-number-input--xl {
693
- height: 3.5rem;
694
- font-size: var(--text-text-base, 1rem);
814
+ .nexus-number-input__max-text {
815
+ color: var(--color-text-tertiary);
695
816
  }
696
- .nexus-number-input--lg {
697
- height: 3rem;
698
- font-size: var(--text-text-base, 1rem);
817
+ .nexus-number-input__max-value {
818
+ color: var(--color-text-secondary);
819
+ text-decoration: underline;
699
820
  }
700
- .nexus-number-input--md {
701
- height: 2.5rem;
702
- font-size: var(--text-text-sm, 0.875rem);
821
+ .nexus-number-input__max-value--exceeded {
822
+ color: var(--color-status-danger-intense);
703
823
  }
704
- .nexus-number-input--sm {
705
- height: 2rem;
706
- font-size: var(--text-text-xs, 0.75rem);
824
+
825
+ /* ── Container (the bordered input box) ── */
826
+ .nexus-number-input__container {
827
+ display: flex;
828
+ align-items: center;
829
+ border-radius: var(--radius-corner-md, 0.5rem);
830
+ border: 1px solid var(--color-border-default);
831
+ background: var(--color-surface-default);
832
+ outline: 0.5px solid transparent;
833
+ transition:
834
+ border-color var(--duration-transition-fast, 150ms),
835
+ outline-color var(--duration-transition-fast, 150ms);
836
+ }
837
+ .nexus-number-input--basic .nexus-number-input__container {
838
+ overflow: clip;
839
+ }
840
+ .nexus-number-input:not(.nexus-number-input--disabled):not(
841
+ .nexus-number-input--error
842
+ )
843
+ .nexus-number-input__container:hover {
844
+ border-color: var(--color-border-default-hover);
845
+ outline-color: var(--color-border-default-hover);
707
846
  }
708
- .nexus-number-input--disabled {
709
- opacity: 0.5;
710
- cursor: not-allowed;
847
+ .nexus-number-input:not(.nexus-number-input--disabled):not(
848
+ .nexus-number-input--error
849
+ )
850
+ .nexus-number-input__container:focus-within {
851
+ border-color: var(--color-accent-primary-focus);
852
+ outline-color: var(--color-accent-primary-focus);
853
+ }
854
+ .nexus-number-input--error .nexus-number-input__container {
855
+ border-color: var(--color-status-danger-focus);
856
+ outline-color: var(--color-status-danger-focus);
857
+ }
858
+ .nexus-number-input--disabled .nexus-number-input__container {
859
+ background: var(--color-surface-strong);
860
+ border-color: var(--color-border-medium);
861
+ pointer-events: none;
862
+ }
863
+ .nexus-number-input--disabled .nexus-number-input__label {
864
+ color: var(--color-text-muted);
865
+ }
866
+ .nexus-number-input--disabled .nexus-number-input__max {
867
+ cursor: default;
868
+ }
869
+ .nexus-number-input--disabled .nexus-number-input__max-text,
870
+ .nexus-number-input--disabled .nexus-number-input__max-value {
871
+ color: var(--color-text-muted);
872
+ text-decoration: none;
873
+ }
874
+ .nexus-number-input--disabled .nexus-number-input__step {
875
+ color: var(--color-text-muted);
876
+ }
877
+ .nexus-number-input--disabled .nexus-number-input__bind-btn {
878
+ background: var(--color-surface-strong);
879
+ color: var(--color-text-muted);
711
880
  }
881
+ .nexus-number-input--disabled .nexus-number-input__description {
882
+ color: var(--color-text-muted);
883
+ }
884
+
885
+ /* ── Input field ── */
712
886
  .nexus-number-input__field {
713
- height: 100%;
714
- width: 100%;
715
- min-width: 0;
716
887
  flex: 1;
888
+ min-width: 0;
889
+ border: none;
717
890
  background: transparent;
718
891
  outline: none;
892
+ font-size: var(--text-label-lg, 1rem);
893
+ font-weight: var(--font-weight-label-lg, 500);
894
+ line-height: 1;
895
+ color: var(--color-text-primary);
719
896
  }
720
897
  .nexus-number-input__field::placeholder {
721
- color: var(--color-text-tertiary);
898
+ color: var(--color-text-muted);
722
899
  }
723
900
  .nexus-number-input__field:focus-visible {
724
901
  outline: none;
725
902
  }
726
- .nexus-number-input__field--xl {
727
- padding-inline: var(--spacing-padding-lg, 1.25rem);
903
+ .nexus-number-input--disabled .nexus-number-input__field {
904
+ color: var(--color-text-muted);
905
+ cursor: not-allowed;
728
906
  }
729
- .nexus-number-input__field--lg {
730
- padding-inline: var(--spacing-padding-md, 1rem);
907
+
908
+ /* ── Size: field padding (basic) ── */
909
+ .nexus-number-input--basic.nexus-number-input--lg .nexus-number-input__field {
910
+ padding: var(--spacing-padding-sm, 0.75rem);
731
911
  }
732
- .nexus-number-input__field--md {
733
- padding-inline: var(--spacing-padding-sm, 0.75rem);
912
+ .nexus-number-input--basic.nexus-number-input--xl .nexus-number-input__field {
913
+ padding: var(--spacing-padding-md, 1rem);
734
914
  }
735
- .nexus-number-input__field--sm {
736
- padding-inline: 0.625rem;
915
+
916
+ /* ── Size: field padding (bind) ── */
917
+ .nexus-number-input--bind .nexus-number-input__container {
918
+ padding-inline: var(--spacing-padding-xs, 0.5rem);
919
+ }
920
+ .nexus-number-input--bind .nexus-number-input__field {
921
+ text-align: center;
922
+ }
923
+ .nexus-number-input--bind.nexus-number-input--lg .nexus-number-input__field {
924
+ padding: var(--spacing-padding-sm, 0.75rem);
737
925
  }
926
+ .nexus-number-input--bind.nexus-number-input--xl .nexus-number-input__field {
927
+ padding: var(--spacing-padding-md, 1rem) var(--spacing-padding-sm, 0.75rem);
928
+ }
929
+
930
+ /* ── Basic variant: chevron buttons column ── */
738
931
  .nexus-number-input__buttons {
739
932
  display: flex;
740
933
  flex-direction: column;
934
+ align-self: stretch;
741
935
  border-left: 1px solid var(--color-border-default);
742
- height: 100%;
936
+ width: 24px;
743
937
  flex-shrink: 0;
744
938
  }
745
939
  .nexus-number-input__step {
@@ -747,29 +941,84 @@
747
941
  flex: 1;
748
942
  align-items: center;
749
943
  justify-content: center;
750
- padding-inline: 0.375rem;
751
- color: var(--color-text-tertiary);
752
- transition-property: color, background-color;
753
- transition-duration: 150ms;
944
+ padding: 0;
945
+ margin: 0;
946
+ border: none;
947
+ background: var(--color-surface-subtle);
948
+ cursor: pointer;
949
+ color: var(--color-icon-secondary);
950
+ transition:
951
+ color var(--duration-transition-fast, 150ms),
952
+ background-color var(--duration-transition-fast, 150ms);
754
953
  }
755
954
  .nexus-number-input__step:hover {
756
- color: var(--color-text-primary);
757
- background: var(--color-surface-hover);
955
+ background: var(--color-surface-subtle-hover);
956
+ color: var(--color-icon-primary);
758
957
  }
759
958
  .nexus-number-input__step:disabled {
760
- opacity: 0.4;
959
+ color: var(--color-text-muted);
761
960
  pointer-events: none;
762
961
  }
763
962
  .nexus-number-input__step--up {
764
- border-top-right-radius: var(--radius-corner-md, 0.375rem);
765
963
  border-bottom: 1px solid var(--color-border-default);
766
964
  }
767
- .nexus-number-input__step--down {
768
- border-bottom-right-radius: var(--radius-corner-md, 0.375rem);
965
+ .nexus-number-input__chevron-icon {
966
+ width: 8px;
967
+ height: 5px;
769
968
  }
770
- .nexus-number-input__step-icon {
771
- width: 0.75rem;
772
- height: 0.75rem;
969
+ .nexus-number-input__chevron-icon--down {
970
+ transform: scaleY(-1);
971
+ }
972
+
973
+ /* ── Bind variant: +/- buttons ── */
974
+ .nexus-number-input__bind-btn {
975
+ display: flex;
976
+ align-items: center;
977
+ justify-content: center;
978
+ flex-shrink: 0;
979
+ width: 24px;
980
+ height: 24px;
981
+ padding: 0;
982
+ margin: 0;
983
+ border: none;
984
+ border-radius: var(--radius-corner-sm, 0.25rem);
985
+ background: var(--color-surface-subtle);
986
+ color: var(--color-icon-secondary);
987
+ cursor: pointer;
988
+ overflow: clip;
989
+ transition:
990
+ color var(--duration-transition-fast, 150ms),
991
+ background-color var(--duration-transition-fast, 150ms);
992
+ }
993
+ .nexus-number-input__bind-btn:hover {
994
+ background: var(--color-surface-subtle-hover);
995
+ color: var(--color-icon-primary);
996
+ }
997
+ .nexus-number-input__bind-btn:disabled {
998
+ color: var(--color-text-muted);
999
+ pointer-events: none;
1000
+ }
1001
+ .nexus-number-input--xl .nexus-number-input__bind-btn {
1002
+ width: 30px;
1003
+ height: 30px;
1004
+ }
1005
+ .nexus-number-input__bind-icon {
1006
+ width: 16px;
1007
+ height: 16px;
1008
+ }
1009
+
1010
+ /* ── Description ── */
1011
+ .nexus-number-input__description {
1012
+ margin: 0;
1013
+ font-size: var(--text-text-xs, 0.75rem);
1014
+ font-weight: 400;
1015
+ line-height: 1.5;
1016
+ letter-spacing: -0.01em;
1017
+ color: var(--color-text-tertiary);
1018
+ height: 18px;
1019
+ }
1020
+ .nexus-number-input__description--error {
1021
+ color: var(--color-status-danger-intense);
773
1022
  }
774
1023
 
775
1024
  /* ═══════════════════════════════════════════
@@ -1094,6 +1343,12 @@
1094
1343
  user-select: none;
1095
1344
  border-radius: 9999px;
1096
1345
  border: 1px solid transparent;
1346
+ background: transparent;
1347
+ cursor: pointer;
1348
+ font-family: inherit;
1349
+ padding: 0;
1350
+ margin: 0;
1351
+ text-decoration: none;
1097
1352
  }
1098
1353
  .nexus-chip[aria-disabled='true'] {
1099
1354
  opacity: 0.5;
@@ -1154,45 +1409,341 @@
1154
1409
  }
1155
1410
 
1156
1411
  /* ═══════════════════════════════════════════
1157
- Pagination
1412
+ Badge
1158
1413
  ═══════════════════════════════════════════ */
1159
1414
 
1160
- .nexus-pagination {
1161
- display: flex;
1162
- align-items: center;
1163
- gap: var(--spacing-gap-xs, 0.25rem);
1164
- }
1165
- .nexus-pagination--sm {
1166
- font-size: var(--text-text-xs, 0.75rem);
1167
- }
1168
- .nexus-pagination--md {
1169
- font-size: var(--text-text-sm, 0.875rem);
1415
+ .nexus-badge-wrapper {
1416
+ position: relative;
1170
1417
  }
1171
- .nexus-page-btn {
1418
+ .nexus-badge {
1419
+ --nexus-badge-offset-x: 0px;
1420
+ --nexus-badge-offset-y: 0px;
1421
+ box-sizing: border-box;
1172
1422
  display: inline-flex;
1173
1423
  align-items: center;
1174
1424
  justify-content: center;
1175
- border-radius: var(--radius-corner-md, 0.375rem);
1176
- font-weight: 500;
1177
- transition-property: color, background-color;
1178
- transition-duration: 150ms;
1179
- user-select: none;
1180
- border: 1px solid transparent;
1181
- }
1182
- .nexus-page-btn:disabled {
1183
- opacity: 0.4;
1184
- pointer-events: none;
1185
- }
1186
- .nexus-page-btn--sm {
1187
- width: 1.75rem;
1188
- height: 1.75rem;
1425
+ min-width: 1.25rem;
1426
+ height: 1.25rem;
1427
+ padding: 0 0.35rem;
1428
+ border-radius: var(--radius-corner-full, 9999px);
1189
1429
  font-size: var(--text-text-xs, 0.75rem);
1430
+ font-weight: var(--font-weight-label-semibold-sm, 600);
1431
+ line-height: 1;
1432
+ color: var(--color-text-inverted);
1433
+ }
1434
+ .nexus-badge--positioned {
1435
+ position: absolute;
1436
+ top: 0;
1437
+ right: 0;
1438
+ z-index: 1;
1439
+ transform: translate(
1440
+ calc(50% + var(--nexus-badge-offset-x)),
1441
+ calc(-50% + var(--nexus-badge-offset-y))
1442
+ );
1443
+ }
1444
+ .nexus-badge--dot {
1445
+ min-width: 0;
1446
+ padding: 0;
1447
+ }
1448
+ .nexus-badge--dot.nexus-badge--sm {
1449
+ width: 0.375rem;
1450
+ height: 0.375rem;
1451
+ }
1452
+ .nexus-badge--dot.nexus-badge--md {
1453
+ width: 0.5rem;
1454
+ height: 0.5rem;
1455
+ }
1456
+ .nexus-badge--dot.nexus-badge--lg {
1457
+ width: 0.625rem;
1458
+ height: 0.625rem;
1459
+ }
1460
+ .nexus-badge--danger {
1461
+ background: var(--color-status-danger);
1462
+ color: var(--color-static-white);
1463
+ }
1464
+ .nexus-badge--primary {
1465
+ background: var(--color-accent-primary);
1466
+ color: var(--color-accent-on-primary);
1467
+ }
1468
+ .nexus-badge--secondary {
1469
+ background: var(--color-accent-secondary);
1470
+ color: var(--color-accent-on-secondary);
1471
+ }
1472
+ .nexus-badge--info {
1473
+ background: var(--color-status-info);
1474
+ color: var(--color-static-white);
1475
+ }
1476
+ .nexus-badge--success {
1477
+ background: var(--color-status-success);
1478
+ color: var(--color-static-white);
1479
+ }
1480
+ .nexus-badge--warning {
1481
+ background: var(--color-status-warning);
1482
+ color: var(--color-static-black);
1483
+ }
1484
+ .nexus-badge--sm:not(.nexus-badge--dot) {
1485
+ min-width: 1rem;
1486
+ height: 1rem;
1487
+ padding: 0 0.25rem;
1488
+ font-size: 0.625rem;
1489
+ }
1490
+ .nexus-badge--lg:not(.nexus-badge--dot) {
1491
+ min-width: 1.5rem;
1492
+ height: 1.5rem;
1493
+ padding: 0 0.45rem;
1494
+ font-size: var(--text-text-sm, 0.875rem);
1495
+ }
1496
+
1497
+ /* ═══════════════════════════════════════════
1498
+ Progress
1499
+ ═══════════════════════════════════════════ */
1500
+
1501
+ .nexus-progress-wrapper {
1502
+ display: flex;
1503
+ flex-direction: column;
1504
+ gap: var(--spacing-gap-xs, 0.25rem);
1505
+ width: 100%;
1506
+ }
1507
+ .nexus-progress__header {
1508
+ display: flex;
1509
+ justify-content: space-between;
1510
+ align-items: center;
1511
+ gap: var(--spacing-gap-sm, 0.5rem);
1512
+ }
1513
+ .nexus-progress__label {
1514
+ font-size: var(--text-text-sm, 0.875rem);
1515
+ color: var(--color-text-primary);
1516
+ }
1517
+ .nexus-progress__value {
1518
+ font-size: var(--text-text-sm, 0.875rem);
1519
+ color: var(--color-text-secondary);
1520
+ font-variant-numeric: tabular-nums;
1521
+ }
1522
+ .nexus-progress {
1523
+ position: relative;
1524
+ width: 100%;
1525
+ overflow: hidden;
1526
+ border-radius: var(--radius-corner-full, 9999px);
1527
+ background: var(--color-surface-strong);
1528
+ }
1529
+ .nexus-progress--sm {
1530
+ height: 0.25rem;
1531
+ }
1532
+ .nexus-progress--md {
1533
+ height: 0.375rem;
1534
+ }
1535
+ .nexus-progress--lg {
1536
+ height: 0.5rem;
1537
+ }
1538
+ .nexus-progress__bar {
1539
+ height: 100%;
1540
+ border-radius: inherit;
1541
+ transition: width var(--duration-transition-normal, 200ms)
1542
+ var(--ease-transition-normal, cubic-bezier(0, 0, 0.2, 1));
1543
+ }
1544
+ .nexus-progress--primary .nexus-progress__bar {
1545
+ background: var(--color-accent-primary);
1546
+ }
1547
+ .nexus-progress--success .nexus-progress__bar {
1548
+ background: var(--color-status-success);
1549
+ }
1550
+ .nexus-progress--warning .nexus-progress__bar {
1551
+ background: var(--color-status-warning);
1552
+ }
1553
+ .nexus-progress--danger .nexus-progress__bar {
1554
+ background: var(--color-status-danger);
1555
+ }
1556
+ .nexus-progress--info .nexus-progress__bar {
1557
+ background: var(--color-status-info);
1558
+ }
1559
+ .nexus-progress__bar--indeterminate {
1560
+ position: absolute;
1561
+ left: 0;
1562
+ top: 0;
1563
+ bottom: 0;
1564
+ width: 35% !important;
1565
+ animation: nexus-progress-indeterminate 1.1s
1566
+ var(--ease-transition-normal, cubic-bezier(0, 0, 0.2, 1)) infinite;
1567
+ }
1568
+ @keyframes nexus-progress-indeterminate {
1569
+ 0% {
1570
+ transform: translateX(-100%);
1571
+ }
1572
+ 100% {
1573
+ transform: translateX(calc(100% / 0.35 * 3));
1574
+ }
1575
+ }
1576
+
1577
+ /* ═══════════════════════════════════════════
1578
+ Alert
1579
+ ═══════════════════════════════════════════ */
1580
+
1581
+ .nexus-alert {
1582
+ display: flex;
1583
+ align-items: flex-start;
1584
+ gap: var(--spacing-gap-sm, 0.5rem);
1585
+ padding: var(--spacing-padding-md, 1rem);
1586
+ border-radius: var(--radius-corner-md, 8px);
1587
+ border-width: var(--border-width-stroke-thin, 1px);
1588
+ border-style: solid;
1589
+ }
1590
+ .nexus-alert__icon {
1591
+ flex-shrink: 0;
1592
+ margin-top: 0.125rem;
1593
+ line-height: 0;
1594
+ }
1595
+ .nexus-alert__icon-svg {
1596
+ width: 1.25rem;
1597
+ height: 1.25rem;
1598
+ }
1599
+ .nexus-alert__body {
1600
+ flex: 1;
1601
+ min-width: 0;
1602
+ }
1603
+ .nexus-alert__title {
1604
+ margin: 0;
1605
+ font-weight: var(--font-weight-heading-h7, 600);
1606
+ font-size: var(--text-text-sm, 0.875rem);
1607
+ color: var(--color-text-primary);
1608
+ }
1609
+ .nexus-alert__description {
1610
+ margin-top: var(--spacing-gap-xs, 0.25rem);
1611
+ font-size: var(--text-text-sm, 0.875rem);
1612
+ color: var(--color-text-secondary);
1613
+ }
1614
+ .nexus-alert__action {
1615
+ flex-shrink: 0;
1616
+ align-self: center;
1617
+ }
1618
+ .nexus-alert__close {
1619
+ flex-shrink: 0;
1620
+ display: inline-flex;
1621
+ align-items: center;
1622
+ justify-content: center;
1623
+ margin: 0;
1624
+ padding: var(--spacing-padding-2xs, 0.25rem);
1625
+ border: none;
1626
+ border-radius: var(--radius-corner-sm, 4px);
1627
+ background: transparent;
1628
+ cursor: pointer;
1629
+ font: inherit;
1630
+ color: var(--color-icon-secondary);
1631
+ transition: color var(--duration-transition-fast, 150ms)
1632
+ var(--ease-transition-fast, ease);
1633
+ }
1634
+ .nexus-alert__close:hover {
1635
+ color: var(--color-icon-primary);
1636
+ }
1637
+ .nexus-alert__close-icon {
1638
+ width: 1rem;
1639
+ height: 1rem;
1640
+ }
1641
+ .nexus-alert--info {
1642
+ background: color-mix(
1643
+ in srgb,
1644
+ var(--color-status-info-dim) 45%,
1645
+ var(--color-surface-default)
1646
+ );
1647
+ border-color: color-mix(
1648
+ in srgb,
1649
+ var(--color-status-info) 28%,
1650
+ var(--color-border-default)
1651
+ );
1652
+ }
1653
+ .nexus-alert--info .nexus-alert__icon {
1654
+ color: var(--color-status-info-intense);
1655
+ }
1656
+ .nexus-alert--success {
1657
+ background: color-mix(
1658
+ in srgb,
1659
+ var(--color-status-success-dim) 45%,
1660
+ var(--color-surface-default)
1661
+ );
1662
+ border-color: color-mix(
1663
+ in srgb,
1664
+ var(--color-status-success) 28%,
1665
+ var(--color-border-default)
1666
+ );
1667
+ }
1668
+ .nexus-alert--success .nexus-alert__icon {
1669
+ color: var(--color-status-success-intense);
1670
+ }
1671
+ .nexus-alert--warning {
1672
+ background: color-mix(
1673
+ in srgb,
1674
+ var(--color-status-warning-dim) 45%,
1675
+ var(--color-surface-default)
1676
+ );
1677
+ border-color: color-mix(
1678
+ in srgb,
1679
+ var(--color-status-warning) 28%,
1680
+ var(--color-border-default)
1681
+ );
1682
+ }
1683
+ .nexus-alert--warning .nexus-alert__icon {
1684
+ color: var(--color-status-warning-intense);
1685
+ }
1686
+ .nexus-alert--danger {
1687
+ background: color-mix(
1688
+ in srgb,
1689
+ var(--color-status-danger-dim) 45%,
1690
+ var(--color-surface-default)
1691
+ );
1692
+ border-color: color-mix(
1693
+ in srgb,
1694
+ var(--color-status-danger) 28%,
1695
+ var(--color-border-default)
1696
+ );
1697
+ }
1698
+ .nexus-alert--danger .nexus-alert__icon {
1699
+ color: var(--color-status-danger-intense);
1700
+ }
1701
+
1702
+ /* ═══════════════════════════════════════════
1703
+ Pagination
1704
+ ═══════════════════════════════════════════ */
1705
+
1706
+ .nexus-pagination {
1707
+ display: flex;
1708
+ align-items: center;
1709
+ gap: var(--spacing-gap-xs, 0.25rem);
1710
+ }
1711
+ .nexus-pagination--sm {
1712
+ font-size: var(--text-text-xs, 0.75rem);
1713
+ }
1714
+ .nexus-pagination--md {
1715
+ font-size: var(--text-text-sm, 0.875rem);
1716
+ }
1717
+ .nexus-page-btn {
1718
+ display: inline-flex;
1719
+ align-items: center;
1720
+ justify-content: center;
1721
+ border-radius: var(--radius-corner-md, 0.375rem);
1722
+ font-weight: 500;
1723
+ transition-property: color, background-color;
1724
+ transition-duration: 150ms;
1725
+ user-select: none;
1726
+ border: 1px solid transparent;
1727
+ background: transparent;
1728
+ cursor: pointer;
1729
+ font-family: inherit;
1730
+ padding: 0;
1731
+ margin: 0;
1732
+ }
1733
+ .nexus-page-btn:disabled {
1734
+ opacity: 0.4;
1735
+ pointer-events: none;
1736
+ }
1737
+ .nexus-page-btn--sm {
1738
+ width: 1.75rem;
1739
+ height: 1.75rem;
1740
+ font-size: var(--text-text-xs, 0.75rem);
1741
+ }
1742
+ .nexus-page-btn--md {
1743
+ width: 2.25rem;
1744
+ height: 2.25rem;
1745
+ font-size: var(--text-text-sm, 0.875rem);
1190
1746
  }
1191
- .nexus-page-btn--md {
1192
- width: 2.25rem;
1193
- height: 2.25rem;
1194
- font-size: var(--text-text-sm, 0.875rem);
1195
- }
1196
1747
  .nexus-page-btn--active {
1197
1748
  background: var(--color-accent-primary);
1198
1749
  color: var(--color-static-white);
@@ -1240,6 +1791,12 @@
1240
1791
  outline: none;
1241
1792
  transition-property: color, background-color, border-color;
1242
1793
  transition-duration: 150ms;
1794
+ border: none;
1795
+ background: transparent;
1796
+ cursor: pointer;
1797
+ font-family: inherit;
1798
+ padding: 0;
1799
+ margin: 0;
1243
1800
  }
1244
1801
  .nexus-tab-trigger--line {
1245
1802
  padding: 0.625rem var(--spacing-padding-md, 1rem);
@@ -1425,8 +1982,13 @@
1425
1982
  justify-content: space-between;
1426
1983
  border-radius: var(--radius-corner-sm, 0.25rem);
1427
1984
  border: 1px solid var(--color-border-default);
1985
+ background: var(--color-surface-default, transparent);
1428
1986
  color: var(--color-text-primary);
1429
1987
  font-size: var(--text-text-sm, 0.875rem);
1988
+ font-family: inherit;
1989
+ cursor: pointer;
1990
+ padding: 0;
1991
+ margin: 0;
1430
1992
  transition-property: border-color;
1431
1993
  transition-duration: 200ms;
1432
1994
  }
@@ -1512,12 +2074,24 @@
1512
2074
  animation: nexus-select-slide-out 100ms ease-in forwards;
1513
2075
  }
1514
2076
  @keyframes nexus-select-slide-in {
1515
- from { opacity: 0; transform: translateY(-4px) scaleY(0.96); }
1516
- to { opacity: 1; transform: translateY(0) scaleY(1); }
2077
+ from {
2078
+ opacity: 0;
2079
+ transform: translateY(-4px) scaleY(0.96);
2080
+ }
2081
+ to {
2082
+ opacity: 1;
2083
+ transform: translateY(0) scaleY(1);
2084
+ }
1517
2085
  }
1518
2086
  @keyframes nexus-select-slide-out {
1519
- from { opacity: 1; transform: translateY(0) scaleY(1); }
1520
- to { opacity: 0; transform: translateY(-4px) scaleY(0.96); }
2087
+ from {
2088
+ opacity: 1;
2089
+ transform: translateY(0) scaleY(1);
2090
+ }
2091
+ to {
2092
+ opacity: 0;
2093
+ transform: translateY(-4px) scaleY(0.96);
2094
+ }
1521
2095
  }
1522
2096
  .nexus-select-content--sm {
1523
2097
  width: 4rem;
@@ -1561,39 +2135,321 @@
1561
2135
  }
1562
2136
 
1563
2137
  /* ═══════════════════════════════════════════
1564
- Tooltip
2138
+ DropdownMenu
1565
2139
  ═══════════════════════════════════════════ */
1566
2140
 
1567
- .nexus-tooltip-content {
1568
- z-index: 50;
1569
- display: flex;
2141
+ .nexus-dropdown-content {
2142
+ position: relative;
2143
+ z-index: var(--z-index-layer-dropdown, 10);
2144
+ min-width: 10rem;
1570
2145
  overflow: hidden;
1571
- border-radius: var(--radius-corner-md, 0.375rem);
1572
- padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
1573
- font-size: var(--text-text-sm, 0.875rem);
1574
- }
1575
- .nexus-tooltip--light {
2146
+ border-radius: var(--radius-corner-md, 0.5rem);
1576
2147
  border: 1px solid var(--color-border-default);
1577
- background: var(--color-static-white);
1578
- color: var(--color-static-black);
1579
- box-shadow: var(--shadow-comp-md);
1580
- }
1581
- .nexus-tooltip--dark {
1582
- border: none;
1583
- background: var(--color-static-black);
1584
- color: var(--color-static-white);
1585
- }
1586
- .nexus-tooltip-arrow--dark {
1587
- fill: var(--color-static-black);
2148
+ background: var(--color-surface-default);
2149
+ padding: var(--spacing-padding-xs, 0.5rem);
2150
+ box-shadow: var(--shadow-comp-lg);
2151
+ color: var(--color-text-primary);
2152
+ transform-origin: var(--radix-dropdown-menu-content-transform-origin);
2153
+ will-change: transform, opacity;
1588
2154
  }
1589
- .nexus-tooltip-arrow--light {
1590
- fill: var(--color-static-white);
2155
+ .nexus-dropdown-content[data-state='open'] {
2156
+ animation: nexus-dropdown-in 150ms ease-out;
1591
2157
  }
1592
- .nexus-tooltip-trigger {
1593
- cursor: default;
2158
+ .nexus-dropdown-content[data-state='closed'] {
2159
+ animation: nexus-dropdown-out 100ms ease-in forwards;
1594
2160
  }
1595
-
1596
- /* ═══════════════════════════════════════════
2161
+ @keyframes nexus-dropdown-in {
2162
+ from {
2163
+ opacity: 0;
2164
+ transform: scale(0.96);
2165
+ }
2166
+ to {
2167
+ opacity: 1;
2168
+ transform: scale(1);
2169
+ }
2170
+ }
2171
+ @keyframes nexus-dropdown-out {
2172
+ from {
2173
+ opacity: 1;
2174
+ transform: scale(1);
2175
+ }
2176
+ to {
2177
+ opacity: 0;
2178
+ transform: scale(0.96);
2179
+ }
2180
+ }
2181
+ .nexus-dropdown-separator {
2182
+ margin: var(--spacing-padding-xs, 0.5rem)
2183
+ calc(-1 * var(--spacing-padding-xs, 0.5rem));
2184
+ height: 1px;
2185
+ background: var(--color-border-default);
2186
+ }
2187
+ .nexus-dropdown-item {
2188
+ position: relative;
2189
+ display: flex;
2190
+ width: 100%;
2191
+ cursor: default;
2192
+ align-items: center;
2193
+ gap: var(--spacing-gap-sm, 0.5rem);
2194
+ border-radius: var(--radius-corner-sm, 0.25rem);
2195
+ padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
2196
+ font-size: var(--text-text-sm, 0.875rem);
2197
+ color: var(--color-text-primary);
2198
+ outline: none;
2199
+ user-select: none;
2200
+ transition: background-color 150ms ease;
2201
+ }
2202
+ .nexus-dropdown-item[data-highlighted] {
2203
+ background: var(--color-surface-hover);
2204
+ }
2205
+ .nexus-dropdown-item[data-disabled] {
2206
+ pointer-events: none;
2207
+ opacity: var(--opacity-disabled-element, 0.4);
2208
+ }
2209
+ .nexus-dropdown-item--danger {
2210
+ color: var(--color-status-danger);
2211
+ }
2212
+ .nexus-dropdown-item--danger[data-highlighted] {
2213
+ background: var(--color-status-danger-dim);
2214
+ color: var(--color-status-danger-intense);
2215
+ }
2216
+ .nexus-dropdown-item__icon {
2217
+ display: inline-flex;
2218
+ flex-shrink: 0;
2219
+ color: var(--color-icon-secondary);
2220
+ }
2221
+ .nexus-dropdown-item--danger .nexus-dropdown-item__icon {
2222
+ color: var(--color-status-danger);
2223
+ }
2224
+
2225
+ /* ═══════════════════════════════════════════
2226
+ ToggleGroup
2227
+ ═══════════════════════════════════════════ */
2228
+
2229
+ .nexus-toggle-group {
2230
+ display: inline-flex;
2231
+ align-items: stretch;
2232
+ position: relative;
2233
+ border-radius: var(--radius-corner-md, 0.5rem);
2234
+ }
2235
+ .nexus-toggle-group--default {
2236
+ background: var(--color-surface-subtle);
2237
+ padding: var(--spacing-padding-2xs, 0.25rem);
2238
+ gap: var(--spacing-gap-xs, 0.25rem);
2239
+ }
2240
+
2241
+ /* ── Sliding indicator ── */
2242
+ .nexus-toggle-group__indicator {
2243
+ position: absolute;
2244
+ top: 0;
2245
+ left: 0;
2246
+ border-radius: var(--radius-corner-sm, 0.25rem);
2247
+ background: var(--color-surface-default);
2248
+ box-shadow: var(--shadow-sm);
2249
+ pointer-events: none;
2250
+ z-index: 0;
2251
+ will-change: transform, width;
2252
+ }
2253
+ .nexus-toggle-group__indicator--animated {
2254
+ transition:
2255
+ transform 200ms cubic-bezier(0, 0, 0.2, 1),
2256
+ width 200ms cubic-bezier(0, 0, 0.2, 1);
2257
+ }
2258
+ .nexus-toggle-group--outline {
2259
+ border: 1px solid var(--color-border-default);
2260
+ padding: var(--spacing-padding-2xs, 0.25rem);
2261
+ gap: 0;
2262
+ }
2263
+ .nexus-toggle-group__item {
2264
+ display: inline-flex;
2265
+ align-items: center;
2266
+ justify-content: center;
2267
+ gap: var(--spacing-gap-xs, 0.25rem);
2268
+ border-radius: var(--radius-corner-sm, 0.25rem);
2269
+ border: none;
2270
+ background: transparent;
2271
+ font-size: var(--text-text-sm, 0.875rem);
2272
+ font-weight: var(--font-weight-text-medium-sm, 500);
2273
+ color: var(--color-text-secondary);
2274
+ cursor: pointer;
2275
+ transition: color var(--duration-transition-normal, 200ms)
2276
+ var(--ease-transition-fast);
2277
+ outline: none;
2278
+ position: relative;
2279
+ z-index: 1;
2280
+ }
2281
+ .nexus-toggle-group__item:focus-visible {
2282
+ box-shadow:
2283
+ 0 0 0 2px var(--color-surface-default),
2284
+ 0 0 0 4px var(--color-accent-primary-focus);
2285
+ }
2286
+ .nexus-toggle-group__item[data-disabled] {
2287
+ pointer-events: none;
2288
+ opacity: var(--opacity-disabled-element, 0.4);
2289
+ }
2290
+ .nexus-toggle-group--default .nexus-toggle-group__item[data-state='on'] {
2291
+ color: var(--color-text-primary);
2292
+ }
2293
+ .nexus-toggle-group--outline .nexus-toggle-group__item {
2294
+ padding-inline: var(--spacing-padding-sm, 0.75rem);
2295
+ }
2296
+ .nexus-toggle-group--outline .nexus-toggle-group__item[data-state='on'] {
2297
+ background: var(--color-accent-primary-dim);
2298
+ color: var(--color-accent-primary-intense);
2299
+ }
2300
+ .nexus-toggle-group--outline
2301
+ .nexus-toggle-group__item:not([data-state='on']):hover {
2302
+ background: var(--color-surface-hover);
2303
+ color: var(--color-text-primary);
2304
+ }
2305
+ .nexus-toggle-group--sm .nexus-toggle-group__item {
2306
+ min-height: var(--size-control-sm, 2rem);
2307
+ padding-inline: var(--spacing-padding-sm, 0.75rem);
2308
+ }
2309
+ .nexus-toggle-group--md .nexus-toggle-group__item {
2310
+ min-height: var(--size-control-md, 2.5rem);
2311
+ padding-inline: var(--spacing-padding-md, 1rem);
2312
+ }
2313
+ .nexus-toggle-group--lg .nexus-toggle-group__item {
2314
+ min-height: var(--size-control-lg, 3rem);
2315
+ padding-inline: var(--spacing-padding-lg, 1.5rem);
2316
+ }
2317
+ .nexus-toggle-group__icon {
2318
+ display: inline-flex;
2319
+ flex-shrink: 0;
2320
+ color: var(--color-icon-secondary);
2321
+ }
2322
+ .nexus-toggle-group__item[data-state='on'] .nexus-toggle-group__icon {
2323
+ color: var(--color-icon-primary);
2324
+ }
2325
+
2326
+ /* ═══════════════════════════════════════════
2327
+ Slider
2328
+ ═══════════════════════════════════════════ */
2329
+
2330
+ .nexus-slider-wrapper {
2331
+ display: flex;
2332
+ width: 100%;
2333
+ flex-direction: column;
2334
+ gap: var(--spacing-gap-sm, 0.5rem);
2335
+ }
2336
+ .nexus-slider__header {
2337
+ display: flex;
2338
+ align-items: center;
2339
+ justify-content: space-between;
2340
+ gap: var(--spacing-gap-md, 1rem);
2341
+ }
2342
+ .nexus-slider__label {
2343
+ font-size: var(--text-label-md, 0.875rem);
2344
+ font-weight: var(--font-weight-label-md, 500);
2345
+ color: var(--color-text-primary);
2346
+ }
2347
+ .nexus-slider__value {
2348
+ font-size: var(--text-text-sm, 0.875rem);
2349
+ font-variant-numeric: tabular-nums;
2350
+ color: var(--color-text-secondary);
2351
+ }
2352
+ .nexus-slider {
2353
+ position: relative;
2354
+ display: flex;
2355
+ width: 100%;
2356
+ touch-action: none;
2357
+ user-select: none;
2358
+ align-items: center;
2359
+ }
2360
+ .nexus-slider[data-disabled] {
2361
+ opacity: var(--opacity-disabled-element, 0.4);
2362
+ pointer-events: none;
2363
+ }
2364
+ .nexus-slider__track {
2365
+ position: relative;
2366
+ flex-grow: 1;
2367
+ overflow: hidden;
2368
+ border-radius: var(--radius-corner-full, 9999px);
2369
+ background: var(--color-surface-strong);
2370
+ }
2371
+ .nexus-slider__range {
2372
+ position: absolute;
2373
+ height: 100%;
2374
+ border-radius: var(--radius-corner-full, 9999px);
2375
+ background: var(--color-accent-primary);
2376
+ }
2377
+ .nexus-slider__thumb {
2378
+ display: block;
2379
+ flex-shrink: 0;
2380
+ border-radius: var(--radius-corner-full, 9999px);
2381
+ border: 2px solid var(--color-accent-primary);
2382
+ background: var(--color-surface-default);
2383
+ box-shadow: var(--shadow-sm);
2384
+ outline: none;
2385
+ transition:
2386
+ box-shadow 150ms ease,
2387
+ transform 150ms ease;
2388
+ }
2389
+ .nexus-slider__thumb:hover {
2390
+ box-shadow: var(--shadow-md);
2391
+ }
2392
+ .nexus-slider__thumb:focus-visible {
2393
+ box-shadow:
2394
+ 0 0 0 2px var(--color-surface-default),
2395
+ 0 0 0 4px var(--color-accent-primary-focus);
2396
+ }
2397
+ .nexus-slider--sm .nexus-slider__track {
2398
+ height: 0.25rem;
2399
+ }
2400
+ .nexus-slider--sm .nexus-slider__thumb {
2401
+ width: 0.875rem;
2402
+ height: 0.875rem;
2403
+ }
2404
+ .nexus-slider--md .nexus-slider__track {
2405
+ height: 0.375rem;
2406
+ }
2407
+ .nexus-slider--md .nexus-slider__thumb {
2408
+ width: 1.125rem;
2409
+ height: 1.125rem;
2410
+ }
2411
+ .nexus-slider--lg .nexus-slider__track {
2412
+ height: 0.5rem;
2413
+ }
2414
+ .nexus-slider--lg .nexus-slider__thumb {
2415
+ width: 1.25rem;
2416
+ height: 1.25rem;
2417
+ }
2418
+
2419
+ /* ═══════════════════════════════════════════
2420
+ Tooltip
2421
+ ═══════════════════════════════════════════ */
2422
+
2423
+ .nexus-tooltip-content {
2424
+ z-index: 50;
2425
+ display: flex;
2426
+ overflow: hidden;
2427
+ border-radius: var(--radius-corner-md, 0.375rem);
2428
+ padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
2429
+ font-size: var(--text-text-sm, 0.875rem);
2430
+ }
2431
+ .nexus-tooltip--light {
2432
+ border: 1px solid var(--color-border-default);
2433
+ background: var(--color-static-white);
2434
+ color: var(--color-static-black);
2435
+ box-shadow: var(--shadow-comp-md);
2436
+ }
2437
+ .nexus-tooltip--dark {
2438
+ border: none;
2439
+ background: var(--color-static-black);
2440
+ color: var(--color-static-white);
2441
+ }
2442
+ .nexus-tooltip-arrow--dark {
2443
+ fill: var(--color-static-black);
2444
+ }
2445
+ .nexus-tooltip-arrow--light {
2446
+ fill: var(--color-static-white);
2447
+ }
2448
+ .nexus-tooltip-trigger {
2449
+ cursor: default;
2450
+ }
2451
+
2452
+ /* ═══════════════════════════════════════════
1597
2453
  Popover
1598
2454
  ═══════════════════════════════════════════ */
1599
2455
 
@@ -1616,12 +2472,24 @@
1616
2472
  animation: nexus-popover-out 100ms ease-in forwards;
1617
2473
  }
1618
2474
  @keyframes nexus-popover-in {
1619
- from { opacity: 0; transform: scale(0.95); }
1620
- to { opacity: 1; transform: scale(1); }
2475
+ from {
2476
+ opacity: 0;
2477
+ transform: scale(0.95);
2478
+ }
2479
+ to {
2480
+ opacity: 1;
2481
+ transform: scale(1);
2482
+ }
1621
2483
  }
1622
2484
  @keyframes nexus-popover-out {
1623
- from { opacity: 1; transform: scale(1); }
1624
- to { opacity: 0; transform: scale(0.95); }
2485
+ from {
2486
+ opacity: 1;
2487
+ transform: scale(1);
2488
+ }
2489
+ to {
2490
+ opacity: 0;
2491
+ transform: scale(0.95);
2492
+ }
1625
2493
  }
1626
2494
  .nexus-popover-arrow {
1627
2495
  fill: var(--color-surface-default);
@@ -1727,7 +2595,15 @@
1727
2595
  flex: 1;
1728
2596
  align-items: center;
1729
2597
  justify-content: space-between;
2598
+ padding: 0;
1730
2599
  padding-block: var(--spacing-padding-md, 1rem);
2600
+ margin: 0;
2601
+ border: none;
2602
+ background: transparent;
2603
+ cursor: pointer;
2604
+ font: inherit;
2605
+ color: inherit;
2606
+ text-align: left;
1731
2607
  transition: all 150ms;
1732
2608
  }
1733
2609
  .nexus-accordion-trigger[data-state='open'] > .nexus-accordion-chevron {
@@ -1832,6 +2708,10 @@
1832
2708
  border: 1px solid var(--color-border-default);
1833
2709
  box-shadow: var(--shadow-comp-sm);
1834
2710
  color: var(--color-text-primary);
2711
+ cursor: pointer;
2712
+ font: inherit;
2713
+ padding: 0;
2714
+ margin: 0;
1835
2715
  transition-property: background-color;
1836
2716
  transition-duration: 150ms;
1837
2717
  }
@@ -1862,6 +2742,9 @@
1862
2742
  width: 0.5rem;
1863
2743
  height: 0.5rem;
1864
2744
  border-radius: 9999px;
2745
+ border: none;
2746
+ padding: 0;
2747
+ cursor: pointer;
1865
2748
  transition-property: background-color;
1866
2749
  transition-duration: 150ms;
1867
2750
  }
@@ -1908,11 +2791,7 @@
1908
2791
  color: var(--color-status-positive);
1909
2792
  }
1910
2793
  .nexus-toast--error {
1911
- border-color: color-mix(
1912
- in srgb,
1913
- var(--color-status-danger) 30%,
1914
- transparent
1915
- );
2794
+ border-color: color-mix(in srgb, var(--color-status-danger) 30%, transparent);
1916
2795
  background: color-mix(in srgb, var(--color-status-danger) 10%, transparent);
1917
2796
  color: var(--color-status-danger);
1918
2797
  }
@@ -2049,7 +2928,6 @@
2049
2928
  }
2050
2929
  .nexus-td__inner {
2051
2930
  border-radius: var(--radius-corner-md, 0.375rem);
2052
- padding: 2px 0.25rem;
2053
2931
  transition-property: background-color;
2054
2932
  transition-duration: 150ms;
2055
2933
  }
@@ -2209,6 +3087,9 @@
2209
3087
  cursor: pointer;
2210
3088
  align-items: center;
2211
3089
  justify-content: flex-end;
3090
+ border: none;
3091
+ background: transparent;
3092
+ padding: 0;
2212
3093
  }
2213
3094
  .nexus-modal-close-btn--bottom-sheet {
2214
3095
  position: relative;
@@ -2567,3 +3448,615 @@
2567
3448
  opacity: 1;
2568
3449
  }
2569
3450
  }
3451
+
3452
+ /* ═══════════════════════════════════════════
3453
+ EmptyState
3454
+ ═══════════════════════════════════════════ */
3455
+
3456
+ .nexus-empty-state {
3457
+ display: flex;
3458
+ flex-direction: column;
3459
+ align-items: center;
3460
+ justify-content: center;
3461
+ text-align: center;
3462
+ gap: var(--spacing-gap-sm, 0.5rem);
3463
+ padding: var(--spacing-padding-lg, 1.5rem);
3464
+ color: var(--color-text-primary);
3465
+ }
3466
+ .nexus-empty-state__icon {
3467
+ display: flex;
3468
+ align-items: center;
3469
+ justify-content: center;
3470
+ margin-bottom: var(--spacing-gap-xs, 0.25rem);
3471
+ color: var(--color-icon-muted);
3472
+ }
3473
+ .nexus-empty-state__default-icon {
3474
+ width: var(--size-icon-xl, 2rem);
3475
+ height: var(--size-icon-xl, 2rem);
3476
+ }
3477
+ .nexus-empty-state--sm .nexus-empty-state__default-icon {
3478
+ width: var(--size-icon-lg, 1.5rem);
3479
+ height: var(--size-icon-lg, 1.5rem);
3480
+ }
3481
+ .nexus-empty-state--lg .nexus-empty-state__default-icon {
3482
+ width: var(--size-control-md, 2.5rem);
3483
+ height: var(--size-control-md, 2.5rem);
3484
+ }
3485
+ .nexus-empty-state__title {
3486
+ margin: 0;
3487
+ font-size: var(--text-heading-h6, 1rem);
3488
+ font-weight: var(--font-weight-heading-h6, 600);
3489
+ letter-spacing: var(--letter-spacing-heading-h6, 0);
3490
+ color: var(--color-text-primary);
3491
+ }
3492
+ .nexus-empty-state__description {
3493
+ margin: 0;
3494
+ max-width: 24rem;
3495
+ font-size: var(--text-text-sm, 0.875rem);
3496
+ font-weight: var(--font-weight-text-sm, 400);
3497
+ letter-spacing: var(--letter-spacing-text-sm, -0.01em);
3498
+ color: var(--color-text-secondary);
3499
+ }
3500
+ .nexus-empty-state__action {
3501
+ margin-top: var(--spacing-gap-sm, 0.5rem);
3502
+ }
3503
+ .nexus-empty-state--sm {
3504
+ padding: var(--spacing-padding-md, 1rem);
3505
+ gap: var(--spacing-gap-xs, 0.25rem);
3506
+ }
3507
+ .nexus-empty-state--sm .nexus-empty-state__title {
3508
+ font-size: var(--text-text-semibold-sm, 0.875rem);
3509
+ }
3510
+ .nexus-empty-state--sm .nexus-empty-state__description {
3511
+ font-size: var(--text-text-xs, 0.75rem);
3512
+ }
3513
+ .nexus-empty-state--lg {
3514
+ padding: var(--spacing-padding-xl, 2rem);
3515
+ gap: var(--spacing-gap-md, 1rem);
3516
+ }
3517
+ .nexus-empty-state--lg .nexus-empty-state__title {
3518
+ font-size: var(--text-heading-h5, 1.125rem);
3519
+ }
3520
+
3521
+ /* ═══════════════════════════════════════════
3522
+ Breadcrumb
3523
+ ═══════════════════════════════════════════ */
3524
+
3525
+ .nexus-breadcrumb {
3526
+ font-size: var(--text-text-sm, 0.875rem);
3527
+ line-height: 1.25;
3528
+ }
3529
+ .nexus-breadcrumb__list {
3530
+ display: flex;
3531
+ flex-wrap: wrap;
3532
+ align-items: center;
3533
+ list-style: none;
3534
+ margin: 0;
3535
+ padding: 0;
3536
+ gap: 0;
3537
+ }
3538
+ .nexus-breadcrumb__item {
3539
+ display: inline-flex;
3540
+ align-items: center;
3541
+ }
3542
+ .nexus-breadcrumb__separator {
3543
+ display: inline-flex;
3544
+ align-items: center;
3545
+ margin: 0 var(--spacing-gap-xs, 0.25rem);
3546
+ color: var(--color-icon-tertiary);
3547
+ user-select: none;
3548
+ }
3549
+ .nexus-breadcrumb__separator-icon {
3550
+ width: var(--size-icon-xs, 0.75rem);
3551
+ height: var(--size-icon-xs, 0.75rem);
3552
+ }
3553
+ .nexus-breadcrumb__link {
3554
+ color: var(--color-text-secondary);
3555
+ text-decoration: none;
3556
+ transition: color 150ms ease;
3557
+ }
3558
+ .nexus-breadcrumb__link:hover {
3559
+ color: var(--color-text-primary);
3560
+ }
3561
+ .nexus-breadcrumb__link--btn {
3562
+ border: none;
3563
+ background: none;
3564
+ cursor: pointer;
3565
+ font: inherit;
3566
+ padding: 0;
3567
+ }
3568
+ .nexus-breadcrumb__current {
3569
+ color: var(--color-text-primary);
3570
+ font-weight: var(--font-weight-text-medium-sm, 500);
3571
+ }
3572
+ .nexus-breadcrumb__ellipsis {
3573
+ color: var(--color-text-tertiary);
3574
+ user-select: none;
3575
+ }
3576
+
3577
+ /* ═══════════════════════════════════════════
3578
+ Stepper
3579
+ ═══════════════════════════════════════════ */
3580
+
3581
+ .nexus-stepper {
3582
+ width: 100%;
3583
+ }
3584
+
3585
+ /* ── Horizontal ── */
3586
+ .nexus-stepper--horizontal {
3587
+ display: flex;
3588
+ flex-direction: row;
3589
+ align-items: flex-start;
3590
+ }
3591
+ .nexus-stepper--horizontal .nexus-stepper__step {
3592
+ flex: 1;
3593
+ min-width: 0;
3594
+ display: flex;
3595
+ flex-direction: column;
3596
+ align-items: center;
3597
+ text-align: center;
3598
+ }
3599
+ .nexus-stepper--horizontal .nexus-stepper__indicator-wrap {
3600
+ display: flex;
3601
+ flex-direction: row;
3602
+ align-items: center;
3603
+ width: 100%;
3604
+ justify-content: center;
3605
+ }
3606
+ .nexus-stepper--horizontal .nexus-stepper__connector {
3607
+ flex: 1;
3608
+ height: 2px;
3609
+ background: var(--color-border-default);
3610
+ transition: background var(--duration-transition-normal, 200ms)
3611
+ var(--ease-transition-normal);
3612
+ }
3613
+ .nexus-stepper--horizontal .nexus-stepper__connector--hidden {
3614
+ visibility: hidden;
3615
+ }
3616
+ .nexus-stepper--horizontal .nexus-stepper__connector--completed {
3617
+ background: var(--color-accent-primary);
3618
+ }
3619
+ .nexus-stepper--horizontal .nexus-stepper__content {
3620
+ margin-top: var(--spacing-gap-sm, 0.5rem);
3621
+ padding: 0 var(--spacing-padding-2xs, 0.25rem);
3622
+ }
3623
+
3624
+ /* ── Vertical ── */
3625
+ .nexus-stepper--vertical {
3626
+ display: flex;
3627
+ flex-direction: column;
3628
+ gap: 0;
3629
+ }
3630
+ .nexus-stepper--vertical .nexus-stepper__step {
3631
+ display: flex;
3632
+ flex-direction: row;
3633
+ align-items: stretch;
3634
+ gap: var(--spacing-gap-sm, 0.5rem);
3635
+ }
3636
+ .nexus-stepper--vertical .nexus-stepper__indicator-wrap {
3637
+ display: flex;
3638
+ flex-direction: column;
3639
+ align-items: center;
3640
+ flex-shrink: 0;
3641
+ }
3642
+ .nexus-stepper--vertical .nexus-stepper__connector {
3643
+ width: 2px;
3644
+ flex: 1;
3645
+ min-height: var(--spacing-padding-sm, 0.75rem);
3646
+ background: var(--color-border-default);
3647
+ transition: background var(--duration-transition-normal, 200ms)
3648
+ var(--ease-transition-normal);
3649
+ }
3650
+ .nexus-stepper--vertical .nexus-stepper__connector--completed {
3651
+ background: var(--color-accent-primary);
3652
+ }
3653
+ .nexus-stepper--vertical .nexus-stepper__content {
3654
+ padding: var(--spacing-padding-xs, 0.5rem) 0;
3655
+ }
3656
+
3657
+ /* ── Indicator (공통) ── */
3658
+ .nexus-stepper__indicator {
3659
+ display: inline-flex;
3660
+ align-items: center;
3661
+ justify-content: center;
3662
+ flex-shrink: 0;
3663
+ width: var(--size-control-sm, 2rem);
3664
+ height: var(--size-control-sm, 2rem);
3665
+ border-radius: var(--radius-corner-full, 9999px);
3666
+ border: 2px solid var(--color-border-medium);
3667
+ background: var(--color-surface-default);
3668
+ font-size: var(--text-text-sm, 0.875rem);
3669
+ font-weight: var(--font-weight-text-medium-sm, 500);
3670
+ color: var(--color-text-secondary);
3671
+ transition: all var(--duration-transition-normal, 200ms)
3672
+ var(--ease-transition-normal);
3673
+ }
3674
+ .nexus-stepper--sm .nexus-stepper__indicator {
3675
+ width: 1.75rem;
3676
+ height: 1.75rem;
3677
+ font-size: var(--text-text-xs, 0.75rem);
3678
+ }
3679
+ .nexus-stepper__check {
3680
+ width: var(--size-icon-sm, 1rem);
3681
+ height: var(--size-icon-sm, 1rem);
3682
+ }
3683
+ .nexus-stepper--sm .nexus-stepper__check {
3684
+ width: var(--size-icon-xs, 0.75rem);
3685
+ height: var(--size-icon-xs, 0.75rem);
3686
+ }
3687
+
3688
+ /* ── State colors ── */
3689
+ .nexus-stepper__step--completed .nexus-stepper__indicator {
3690
+ border-color: var(--color-accent-primary);
3691
+ background: var(--color-accent-primary);
3692
+ color: var(--color-accent-on-primary);
3693
+ }
3694
+ .nexus-stepper__step--active .nexus-stepper__indicator {
3695
+ border-color: var(--color-accent-primary);
3696
+ color: var(--color-accent-primary);
3697
+ background: var(--color-surface-default);
3698
+ box-shadow: 0 0 0 3px
3699
+ color-mix(in srgb, var(--color-accent-primary) 20%, transparent);
3700
+ }
3701
+ .nexus-stepper__step--error .nexus-stepper__indicator {
3702
+ border-color: var(--color-status-danger);
3703
+ color: var(--color-status-danger);
3704
+ background: var(--color-surface-default);
3705
+ box-shadow: 0 0 0 3px
3706
+ color-mix(in srgb, var(--color-status-danger) 20%, transparent);
3707
+ }
3708
+ .nexus-stepper__step--pending .nexus-stepper__indicator {
3709
+ border-color: var(--color-border-default);
3710
+ color: var(--color-text-tertiary);
3711
+ }
3712
+
3713
+ /* ── Labels ── */
3714
+ .nexus-stepper__label {
3715
+ display: block;
3716
+ font-size: var(--text-text-sm, 0.875rem);
3717
+ font-weight: var(--font-weight-text-medium-sm, 500);
3718
+ color: var(--color-text-primary);
3719
+ }
3720
+ .nexus-stepper--sm .nexus-stepper__label {
3721
+ font-size: var(--text-text-xs, 0.75rem);
3722
+ }
3723
+ .nexus-stepper__description {
3724
+ display: block;
3725
+ margin-top: var(--spacing-gap-xs, 0.25rem);
3726
+ font-size: var(--text-text-xs, 0.75rem);
3727
+ color: var(--color-text-secondary);
3728
+ }
3729
+ .nexus-stepper__step--pending .nexus-stepper__label {
3730
+ color: var(--color-text-secondary);
3731
+ }
3732
+ .nexus-stepper__step--pending .nexus-stepper__description {
3733
+ color: var(--color-text-muted);
3734
+ }
3735
+
3736
+ /* ═══════════════════════════════════════════
3737
+ TagInput
3738
+ ═══════════════════════════════════════════ */
3739
+
3740
+ .nexus-tag-input-wrapper {
3741
+ display: flex;
3742
+ flex-direction: column;
3743
+ gap: var(--spacing-gap-xs, 0.25rem);
3744
+ }
3745
+ .nexus-tag-input__label {
3746
+ font-size: var(--text-label-md, 0.875rem);
3747
+ font-weight: var(--font-weight-label-md, 500);
3748
+ color: var(--color-text-primary);
3749
+ }
3750
+ .nexus-tag-input {
3751
+ display: flex;
3752
+ flex-wrap: wrap;
3753
+ align-items: center;
3754
+ gap: var(--spacing-gap-xs, 0.25rem);
3755
+ padding: var(--spacing-padding-xs, 0.5rem);
3756
+ border: var(--border-width-stroke-default, 1px) solid
3757
+ var(--color-border-default);
3758
+ border-radius: var(--radius-corner-md, 0.5rem);
3759
+ background: var(--color-surface-default);
3760
+ cursor: text;
3761
+ transition: border-color 150ms ease;
3762
+ }
3763
+ .nexus-tag-input:focus-within {
3764
+ border-color: var(--color-border-default-focus, var(--color-accent-primary));
3765
+ }
3766
+ .nexus-tag-input--disabled {
3767
+ opacity: var(--opacity-disabled-element, 0.4);
3768
+ cursor: not-allowed;
3769
+ pointer-events: none;
3770
+ }
3771
+ .nexus-tag-input--sm {
3772
+ padding: var(--spacing-padding-2xs, 0.25rem);
3773
+ gap: 0.125rem;
3774
+ font-size: var(--text-text-xs, 0.75rem);
3775
+ }
3776
+ .nexus-tag-input--md {
3777
+ font-size: var(--text-text-sm, 0.875rem);
3778
+ }
3779
+ .nexus-tag-input--lg {
3780
+ padding: var(--spacing-padding-sm, 0.75rem);
3781
+ font-size: var(--text-text-base, 1rem);
3782
+ }
3783
+ .nexus-tag-input__tag {
3784
+ display: inline-flex;
3785
+ align-items: center;
3786
+ gap: 0.25rem;
3787
+ padding: 0.125rem 0.5rem;
3788
+ border-radius: var(--radius-corner-sm, 0.25rem);
3789
+ background: var(--color-surface-subtle);
3790
+ color: var(--color-text-primary);
3791
+ font-size: inherit;
3792
+ line-height: 1.5;
3793
+ white-space: nowrap;
3794
+ }
3795
+ .nexus-tag-input__tag-close {
3796
+ display: inline-flex;
3797
+ align-items: center;
3798
+ justify-content: center;
3799
+ border: none;
3800
+ background: transparent;
3801
+ cursor: pointer;
3802
+ padding: 0;
3803
+ margin: 0;
3804
+ color: var(--color-icon-tertiary);
3805
+ transition: color 150ms;
3806
+ }
3807
+ .nexus-tag-input__tag-close:hover {
3808
+ color: var(--color-icon-primary);
3809
+ }
3810
+ .nexus-tag-input__tag-close-icon {
3811
+ width: 0.75rem;
3812
+ height: 0.75rem;
3813
+ }
3814
+ .nexus-tag-input__input {
3815
+ flex: 1;
3816
+ min-width: 4rem;
3817
+ border: none;
3818
+ outline: none;
3819
+ background: transparent;
3820
+ font: inherit;
3821
+ color: var(--color-text-primary);
3822
+ padding: 0.125rem 0;
3823
+ }
3824
+ .nexus-tag-input__input::placeholder {
3825
+ color: var(--color-text-muted);
3826
+ }
3827
+ .nexus-tag-input__description {
3828
+ font-size: var(--text-text-xs, 0.75rem);
3829
+ color: var(--color-text-secondary);
3830
+ }
3831
+
3832
+ /* ═══════════════════════════════════════════
3833
+ NxImage
3834
+ ═══════════════════════════════════════════ */
3835
+
3836
+ .nexus-image {
3837
+ position: relative;
3838
+ overflow: hidden;
3839
+ display: block;
3840
+ background: var(--color-surface-subtle);
3841
+ }
3842
+ .nexus-image__fallback {
3843
+ display: flex;
3844
+ align-items: center;
3845
+ justify-content: center;
3846
+ width: 100%;
3847
+ height: 100%;
3848
+ min-height: 4rem;
3849
+ color: var(--color-icon-muted);
3850
+ }
3851
+ .nexus-image__fallback-icon {
3852
+ width: var(--size-icon-xl, 2rem);
3853
+ height: var(--size-icon-xl, 2rem);
3854
+ }
3855
+ .nexus-image__skeleton {
3856
+ position: absolute;
3857
+ inset: 0;
3858
+ background: linear-gradient(
3859
+ 90deg,
3860
+ var(--color-surface-subtle) 25%,
3861
+ var(--color-surface-default) 50%,
3862
+ var(--color-surface-subtle) 75%
3863
+ );
3864
+ background-size: 200% 100%;
3865
+ animation: nexus-shimmer 1.5s infinite;
3866
+ }
3867
+ .nexus-image__img {
3868
+ display: block;
3869
+ width: 100%;
3870
+ height: 100%;
3871
+ opacity: 0;
3872
+ transition: opacity 300ms ease;
3873
+ }
3874
+ .nexus-image__img--loaded {
3875
+ opacity: 1;
3876
+ }
3877
+ .nexus-image__img--cover {
3878
+ object-fit: cover;
3879
+ }
3880
+ .nexus-image__img--contain {
3881
+ object-fit: contain;
3882
+ }
3883
+ .nexus-image__img--fill {
3884
+ object-fit: fill;
3885
+ }
3886
+ .nexus-image__img--none {
3887
+ object-fit: none;
3888
+ }
3889
+
3890
+ @keyframes nexus-shimmer {
3891
+ 0% {
3892
+ background-position: -200% 0;
3893
+ }
3894
+ 100% {
3895
+ background-position: 200% 0;
3896
+ }
3897
+ }
3898
+
3899
+ /* ═══════════════════════════════════════════
3900
+ DatePicker / Calendar
3901
+ ═══════════════════════════════════════════ */
3902
+
3903
+ .nexus-datepicker {
3904
+ position: relative;
3905
+ display: inline-block;
3906
+ }
3907
+ .nexus-datepicker__trigger {
3908
+ display: inline-flex;
3909
+ align-items: center;
3910
+ gap: var(--spacing-gap-sm, 0.5rem);
3911
+ padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
3912
+ border: var(--border-width-stroke-default, 1px) solid
3913
+ var(--color-border-default);
3914
+ border-radius: var(--radius-corner-md, 0.5rem);
3915
+ background: var(--color-surface-default);
3916
+ font: inherit;
3917
+ font-size: var(--text-text-sm, 0.875rem);
3918
+ color: var(--color-text-primary);
3919
+ cursor: pointer;
3920
+ transition: border-color 150ms;
3921
+ min-width: 10rem;
3922
+ }
3923
+ .nexus-datepicker__trigger:hover {
3924
+ border-color: var(--color-border-default-hover);
3925
+ }
3926
+ .nexus-datepicker__trigger:disabled {
3927
+ opacity: var(--opacity-disabled-element, 0.4);
3928
+ cursor: not-allowed;
3929
+ }
3930
+ .nexus-datepicker__trigger--placeholder span {
3931
+ color: var(--color-text-muted);
3932
+ }
3933
+ .nexus-datepicker__icon {
3934
+ width: var(--size-icon-sm, 1rem);
3935
+ height: var(--size-icon-sm, 1rem);
3936
+ flex-shrink: 0;
3937
+ color: var(--color-icon-secondary);
3938
+ }
3939
+ .nexus-datepicker__popover {
3940
+ position: absolute;
3941
+ top: calc(100% + 4px);
3942
+ left: 0;
3943
+ z-index: var(--z-index-layer-popover, 30);
3944
+ background: var(--color-surface-default);
3945
+ border: var(--border-width-stroke-default, 1px) solid
3946
+ var(--color-border-default);
3947
+ border-radius: var(--radius-corner-lg, 0.75rem);
3948
+ box-shadow: var(--shadow-lg, 0 2px 8px -1px rgb(0 0 0 / 0.12));
3949
+ padding: var(--spacing-padding-sm, 0.75rem);
3950
+ animation: nexus-fade-in 150ms ease;
3951
+ }
3952
+
3953
+ .nexus-calendar {
3954
+ font-size: var(--text-text-sm, 0.875rem);
3955
+ }
3956
+ .nexus-calendar__months {
3957
+ display: flex;
3958
+ flex-direction: column;
3959
+ gap: var(--spacing-gap-sm, 0.5rem);
3960
+ }
3961
+ .nexus-calendar__caption {
3962
+ display: flex;
3963
+ justify-content: center;
3964
+ align-items: center;
3965
+ padding: var(--spacing-padding-2xs, 0.25rem) 0;
3966
+ font-weight: var(--font-weight-text-semibold-sm, 600);
3967
+ color: var(--color-text-primary);
3968
+ }
3969
+ .nexus-calendar__nav {
3970
+ display: flex;
3971
+ gap: var(--spacing-gap-xs, 0.25rem);
3972
+ }
3973
+ .nexus-calendar__nav-btn {
3974
+ display: inline-flex;
3975
+ align-items: center;
3976
+ justify-content: center;
3977
+ width: var(--size-control-sm, 2rem);
3978
+ height: var(--size-control-sm, 2rem);
3979
+ border: none;
3980
+ background: transparent;
3981
+ border-radius: var(--radius-corner-sm, 0.25rem);
3982
+ cursor: pointer;
3983
+ color: var(--color-icon-secondary);
3984
+ transition: background 150ms;
3985
+ }
3986
+ .nexus-calendar__nav-btn:hover {
3987
+ background: var(--color-surface-default-hover);
3988
+ }
3989
+ .nexus-calendar__grid {
3990
+ width: 100%;
3991
+ border-collapse: collapse;
3992
+ }
3993
+ .nexus-calendar__head-row {
3994
+ display: flex;
3995
+ }
3996
+ .nexus-calendar__head-cell {
3997
+ width: var(--size-control-sm, 2rem);
3998
+ text-align: center;
3999
+ font-size: var(--text-text-xs, 0.75rem);
4000
+ font-weight: var(--font-weight-text-medium-xs, 500);
4001
+ color: var(--color-text-tertiary);
4002
+ padding: var(--spacing-padding-2xs, 0.25rem) 0;
4003
+ }
4004
+ .nexus-calendar__row {
4005
+ display: flex;
4006
+ }
4007
+ .nexus-calendar__cell {
4008
+ text-align: center;
4009
+ }
4010
+ .nexus-calendar__day {
4011
+ display: inline-flex;
4012
+ align-items: center;
4013
+ justify-content: center;
4014
+ width: var(--size-control-sm, 2rem);
4015
+ height: var(--size-control-sm, 2rem);
4016
+ border: none;
4017
+ background: transparent;
4018
+ border-radius: var(--radius-corner-sm, 0.25rem);
4019
+ cursor: pointer;
4020
+ font: inherit;
4021
+ font-size: var(--text-text-sm, 0.875rem);
4022
+ color: var(--color-text-primary);
4023
+ transition:
4024
+ background 150ms,
4025
+ color 150ms;
4026
+ }
4027
+ .nexus-calendar__day:hover {
4028
+ background: var(--color-surface-default-hover);
4029
+ }
4030
+ .nexus-calendar__day--selected {
4031
+ background: var(--color-accent-primary);
4032
+ color: var(--color-accent-on-primary);
4033
+ }
4034
+ .nexus-calendar__day--selected:hover {
4035
+ background: var(--color-accent-primary-hover);
4036
+ }
4037
+ .nexus-calendar__day--today {
4038
+ font-weight: var(--font-weight-text-semibold-sm, 600);
4039
+ border: var(--border-width-stroke-default, 1px) solid
4040
+ var(--color-accent-primary);
4041
+ }
4042
+ .nexus-calendar__day--outside {
4043
+ color: var(--color-text-muted);
4044
+ opacity: 0.5;
4045
+ }
4046
+ .nexus-calendar__day--disabled {
4047
+ color: var(--color-text-muted);
4048
+ opacity: var(--opacity-disabled-element, 0.4);
4049
+ cursor: not-allowed;
4050
+ pointer-events: none;
4051
+ }
4052
+
4053
+ @keyframes nexus-fade-in {
4054
+ from {
4055
+ opacity: 0;
4056
+ transform: translateY(-4px);
4057
+ }
4058
+ to {
4059
+ opacity: 1;
4060
+ transform: translateY(0);
4061
+ }
4062
+ }