@endfield-ui/react 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/NOTICE.md +4 -3
  2. package/README.md +32 -5
  3. package/dist/components/accordion/Accordion.d.ts +46 -0
  4. package/dist/components/accordion/Accordion.js +2 -0
  5. package/dist/components/accordion/index.d.ts +3 -0
  6. package/dist/components/alert/Alert.d.ts +28 -0
  7. package/dist/components/alert/Alert.js +2 -0
  8. package/dist/components/alert/index.d.ts +3 -0
  9. package/dist/components/avatar/Avatar.d.ts +24 -0
  10. package/dist/components/avatar/Avatar.js +2 -0
  11. package/dist/components/avatar/AvatarSwitcher.d.ts +46 -0
  12. package/dist/components/avatar/AvatarSwitcher.js +2 -0
  13. package/dist/components/avatar/index.d.ts +4 -0
  14. package/dist/components/back-to-top/BackToTop.d.ts +21 -0
  15. package/dist/components/back-to-top/BackToTop.js +2 -0
  16. package/dist/components/back-to-top/index.d.ts +3 -0
  17. package/dist/components/badge/Badge.d.ts +20 -0
  18. package/dist/components/badge/Badge.js +2 -0
  19. package/dist/components/badge/index.d.ts +3 -0
  20. package/dist/components/bracket-title/BracketTitle.d.ts +17 -0
  21. package/dist/components/bracket-title/BracketTitle.js +2 -0
  22. package/dist/components/bracket-title/index.d.ts +3 -0
  23. package/dist/components/breadcrumb/Breadcrumb.d.ts +26 -0
  24. package/dist/components/breadcrumb/Breadcrumb.js +2 -0
  25. package/dist/components/breadcrumb/index.d.ts +3 -0
  26. package/dist/components/button/Button.d.ts +50 -0
  27. package/dist/components/button/Button.js +2 -0
  28. package/dist/components/button/ButtonGroup.d.ts +21 -0
  29. package/dist/components/button/ButtonGroup.js +2 -0
  30. package/dist/components/button/index.d.ts +4 -0
  31. package/dist/components/calendar/Calendar.d.ts +57 -0
  32. package/dist/components/calendar/Calendar.js +2 -0
  33. package/dist/components/calendar/index.d.ts +3 -0
  34. package/dist/components/carousel/Carousel.d.ts +38 -0
  35. package/dist/components/carousel/Carousel.js +2 -0
  36. package/dist/components/carousel/index.d.ts +3 -0
  37. package/dist/components/carousel/snap-track.js +2 -0
  38. package/dist/components/checkbox/Checkbox.d.ts +18 -0
  39. package/dist/components/checkbox/Checkbox.js +2 -0
  40. package/dist/components/checkbox/choice-style.js +2 -0
  41. package/dist/components/checkbox/index.d.ts +3 -0
  42. package/dist/components/chip/FilterChip.d.ts +18 -0
  43. package/dist/components/chip/FilterChip.js +2 -0
  44. package/dist/components/chip/ResourceChip.d.ts +16 -0
  45. package/dist/components/chip/ResourceChip.js +2 -0
  46. package/dist/components/chip/capsule-style.d.ts +4 -0
  47. package/dist/components/chip/capsule-style.js +2 -0
  48. package/dist/components/chip/index.d.ts +4 -0
  49. package/dist/components/combobox/Combobox.d.ts +105 -0
  50. package/dist/components/combobox/Combobox.js +2 -0
  51. package/dist/components/combobox/index.d.ts +3 -0
  52. package/dist/components/completion-banner/CompletionBanner.d.ts +26 -0
  53. package/dist/components/completion-banner/CompletionBanner.js +2 -0
  54. package/dist/components/completion-banner/index.d.ts +3 -0
  55. package/dist/components/context-menu/ContextMenu.d.ts +30 -0
  56. package/dist/components/context-menu/ContextMenu.js +2 -0
  57. package/dist/components/context-menu/index.d.ts +3 -0
  58. package/dist/components/corner-brackets/CornerBrackets.d.ts +20 -0
  59. package/dist/components/corner-brackets/CornerBrackets.js +2 -0
  60. package/dist/components/corner-brackets/index.d.ts +3 -0
  61. package/dist/components/countdown/Countdown.d.ts +26 -0
  62. package/dist/components/countdown/Countdown.js +2 -0
  63. package/dist/components/countdown/index.d.ts +3 -0
  64. package/dist/components/dash-indicator/DashIndicator.d.ts +15 -0
  65. package/dist/components/dash-indicator/DashIndicator.js +2 -0
  66. package/dist/components/dash-indicator/index.d.ts +3 -0
  67. package/dist/components/data-row/DataRow.d.ts +58 -0
  68. package/dist/components/data-row/DataRow.js +2 -0
  69. package/dist/components/data-row/index.d.ts +3 -0
  70. package/dist/components/date-picker/DateField.js +2 -0
  71. package/dist/components/date-picker/DatePicker.d.ts +56 -0
  72. package/dist/components/date-picker/DatePicker.js +2 -0
  73. package/dist/components/date-picker/DateRangePicker.d.ts +57 -0
  74. package/dist/components/date-picker/DateRangePicker.js +2 -0
  75. package/dist/components/date-picker/index.d.ts +4 -0
  76. package/dist/components/dialog/Dialog.d.ts +55 -0
  77. package/dist/components/dialog/Dialog.js +2 -0
  78. package/dist/components/dialog/index.d.ts +3 -0
  79. package/dist/components/dialog/initial-focus.js +2 -0
  80. package/dist/components/dialog/overlay-style.js +2 -0
  81. package/dist/components/drawer/Drawer.d.ts +48 -0
  82. package/dist/components/drawer/Drawer.js +2 -0
  83. package/dist/components/drawer/index.d.ts +3 -0
  84. package/dist/components/dropdown-menu/DropdownMenu.d.ts +115 -0
  85. package/dist/components/dropdown-menu/DropdownMenu.js +2 -0
  86. package/dist/components/dropdown-menu/MenuCheck.js +2 -0
  87. package/dist/components/dropdown-menu/index.d.ts +3 -0
  88. package/dist/components/dropdown-menu/menu-style.d.ts +4 -0
  89. package/dist/components/dropdown-menu/menu-style.js +2 -0
  90. package/dist/components/empty-state/EmptyState.d.ts +22 -0
  91. package/dist/components/empty-state/EmptyState.js +2 -0
  92. package/dist/components/empty-state/index.d.ts +3 -0
  93. package/dist/components/field/Field.d.ts +58 -0
  94. package/dist/components/field/Field.js +2 -0
  95. package/dist/components/field/index.d.ts +3 -0
  96. package/dist/components/file-upload/FileItem.d.ts +50 -0
  97. package/dist/components/file-upload/FileItem.js +2 -0
  98. package/dist/components/file-upload/FileUpload.d.ts +82 -0
  99. package/dist/components/file-upload/FileUpload.js +2 -0
  100. package/dist/components/file-upload/index.d.ts +4 -0
  101. package/dist/components/flyout-bar/FlyoutBar.d.ts +46 -0
  102. package/dist/components/flyout-bar/FlyoutBar.js +2 -0
  103. package/dist/components/flyout-bar/index.d.ts +3 -0
  104. package/dist/components/ghost-text/GhostText.d.ts +21 -0
  105. package/dist/components/ghost-text/GhostText.js +2 -0
  106. package/dist/components/ghost-text/index.d.ts +3 -0
  107. package/dist/components/hatch/Hatch.d.ts +18 -0
  108. package/dist/components/hatch/Hatch.js +2 -0
  109. package/dist/components/hatch/index.d.ts +3 -0
  110. package/dist/components/hazard-stripe/HazardStripe.d.ts +15 -0
  111. package/dist/components/hazard-stripe/HazardStripe.js +2 -0
  112. package/dist/components/hazard-stripe/index.d.ts +3 -0
  113. package/dist/components/hover-card/HoverCard.d.ts +35 -0
  114. package/dist/components/hover-card/HoverCard.js +2 -0
  115. package/dist/components/hover-card/index.d.ts +3 -0
  116. package/dist/components/icon-button/IconButton.d.ts +21 -0
  117. package/dist/components/icon-button/IconButton.js +2 -0
  118. package/dist/components/icon-button/index.d.ts +3 -0
  119. package/dist/components/image-viewer/ImageViewer.d.ts +48 -0
  120. package/dist/components/image-viewer/ImageViewer.js +2 -0
  121. package/dist/components/image-viewer/index.d.ts +3 -0
  122. package/dist/components/input/Input.d.ts +27 -0
  123. package/dist/components/input/Input.js +2 -0
  124. package/dist/components/input/control-box.d.ts +5 -0
  125. package/dist/components/input/control-box.js +2 -0
  126. package/dist/components/input/index.d.ts +3 -0
  127. package/dist/components/input/value-chip.js +2 -0
  128. package/dist/components/item-slot/ItemGrid.d.ts +12 -0
  129. package/dist/components/item-slot/ItemGrid.js +2 -0
  130. package/dist/components/item-slot/ItemSlot.d.ts +54 -0
  131. package/dist/components/item-slot/ItemSlot.js +2 -0
  132. package/dist/components/item-slot/index.d.ts +4 -0
  133. package/dist/components/kbd/Kbd.d.ts +15 -0
  134. package/dist/components/kbd/Kbd.js +2 -0
  135. package/dist/components/kbd/index.d.ts +3 -0
  136. package/dist/components/link-element/LinkElement.d.ts +6 -0
  137. package/dist/components/link-element/LinkElement.js +2 -0
  138. package/dist/components/list/List.d.ts +46 -0
  139. package/dist/components/list/List.js +2 -0
  140. package/dist/components/list/band-style.js +2 -0
  141. package/dist/components/list/index.d.ts +3 -0
  142. package/dist/components/loader/Loader.d.ts +23 -0
  143. package/dist/components/loader/Loader.js +2 -0
  144. package/dist/components/loader/index.d.ts +3 -0
  145. package/dist/components/marquee/Marquee.d.ts +22 -0
  146. package/dist/components/marquee/Marquee.js +2 -0
  147. package/dist/components/marquee/index.d.ts +3 -0
  148. package/dist/components/media-card/MediaCard.d.ts +36 -0
  149. package/dist/components/media-card/MediaCard.js +2 -0
  150. package/dist/components/media-card/index.d.ts +3 -0
  151. package/dist/components/nav-action/NavAction.d.ts +34 -0
  152. package/dist/components/nav-action/NavAction.js +2 -0
  153. package/dist/components/nav-action/index.d.ts +3 -0
  154. package/dist/components/nav-menu/NavMenu.d.ts +57 -0
  155. package/dist/components/nav-menu/NavMenu.js +2 -0
  156. package/dist/components/nav-menu/index.d.ts +3 -0
  157. package/dist/components/navigator/Navigator.d.ts +27 -0
  158. package/dist/components/navigator/Navigator.js +2 -0
  159. package/dist/components/navigator/index.d.ts +3 -0
  160. package/dist/components/otp-input/OtpInput.d.ts +52 -0
  161. package/dist/components/otp-input/OtpInput.js +2 -0
  162. package/dist/components/otp-input/index.d.ts +3 -0
  163. package/dist/components/page-header/PageHeader.d.ts +56 -0
  164. package/dist/components/page-header/PageHeader.js +2 -0
  165. package/dist/components/page-header/index.d.ts +3 -0
  166. package/dist/components/pagination/Pagination.d.ts +29 -0
  167. package/dist/components/pagination/Pagination.js +2 -0
  168. package/dist/components/pagination/index.d.ts +3 -0
  169. package/dist/components/panel/Panel.d.ts +36 -0
  170. package/dist/components/panel/Panel.js +2 -0
  171. package/dist/components/panel/index.d.ts +3 -0
  172. package/dist/components/play-button/PlayButton.d.ts +20 -0
  173. package/dist/components/play-button/PlayButton.js +2 -0
  174. package/dist/components/play-button/index.d.ts +3 -0
  175. package/dist/components/popover/Popover.d.ts +36 -0
  176. package/dist/components/popover/Popover.js +2 -0
  177. package/dist/components/popover/index.d.ts +3 -0
  178. package/dist/components/popover/panel-style.js +2 -0
  179. package/dist/components/progress/Progress.d.ts +27 -0
  180. package/dist/components/progress/Progress.js +2 -0
  181. package/dist/components/progress/ProgressRing.d.ts +23 -0
  182. package/dist/components/progress/ProgressRing.js +2 -0
  183. package/dist/components/progress/index.d.ts +4 -0
  184. package/dist/components/radio/Radio.d.ts +33 -0
  185. package/dist/components/radio/Radio.js +2 -0
  186. package/dist/components/radio/index.d.ts +3 -0
  187. package/dist/components/rec-indicator/RecIndicator.d.ts +16 -0
  188. package/dist/components/rec-indicator/RecIndicator.js +2 -0
  189. package/dist/components/rec-indicator/index.d.ts +3 -0
  190. package/dist/components/registration-strip/RegistrationStrip.d.ts +16 -0
  191. package/dist/components/registration-strip/RegistrationStrip.js +2 -0
  192. package/dist/components/registration-strip/index.d.ts +3 -0
  193. package/dist/components/rolling-number/RollingNumber.d.ts +25 -0
  194. package/dist/components/rolling-number/RollingNumber.js +2 -0
  195. package/dist/components/rolling-number/index.d.ts +3 -0
  196. package/dist/components/schedule/Schedule.d.ts +78 -0
  197. package/dist/components/schedule/Schedule.js +2 -0
  198. package/dist/components/schedule/index.d.ts +3 -0
  199. package/dist/components/scroll-area/ScrollArea.d.ts +26 -0
  200. package/dist/components/scroll-area/ScrollArea.js +2 -0
  201. package/dist/components/scroll-area/index.d.ts +3 -0
  202. package/dist/components/scroll-hint/ScrollHint.d.ts +23 -0
  203. package/dist/components/scroll-hint/ScrollHint.js +2 -0
  204. package/dist/components/scroll-hint/index.d.ts +3 -0
  205. package/dist/components/section-title/SectionTitle.d.ts +33 -0
  206. package/dist/components/section-title/SectionTitle.js +2 -0
  207. package/dist/components/section-title/index.d.ts +3 -0
  208. package/dist/components/segmented-control/SegmentedControl.d.ts +49 -0
  209. package/dist/components/segmented-control/SegmentedControl.js +2 -0
  210. package/dist/components/segmented-control/index.d.ts +3 -0
  211. package/dist/components/select/Select.d.ts +95 -0
  212. package/dist/components/select/Select.js +2 -0
  213. package/dist/components/select/index.d.ts +3 -0
  214. package/dist/components/side-rail/SideRail.d.ts +62 -0
  215. package/dist/components/side-rail/SideRail.js +2 -0
  216. package/dist/components/side-rail/SideRailSub.d.ts +47 -0
  217. package/dist/components/side-rail/SideRailSub.js +2 -0
  218. package/dist/components/side-rail/index.d.ts +4 -0
  219. package/dist/components/skeleton/Skeleton.d.ts +22 -0
  220. package/dist/components/skeleton/Skeleton.js +2 -0
  221. package/dist/components/skeleton/index.d.ts +3 -0
  222. package/dist/components/slider/Slider.d.ts +63 -0
  223. package/dist/components/slider/Slider.js +2 -0
  224. package/dist/components/slider/index.d.ts +3 -0
  225. package/dist/components/sparkline/Sparkline.d.ts +32 -0
  226. package/dist/components/sparkline/Sparkline.js +2 -0
  227. package/dist/components/sparkline/index.d.ts +3 -0
  228. package/dist/components/spinner/Spinner.d.ts +19 -0
  229. package/dist/components/spinner/Spinner.js +2 -0
  230. package/dist/components/spinner/index.d.ts +3 -0
  231. package/dist/components/splash-screen/SplashScreen.d.ts +43 -0
  232. package/dist/components/splash-screen/SplashScreen.js +2 -0
  233. package/dist/components/splash-screen/index.d.ts +3 -0
  234. package/dist/components/stat/Stat.d.ts +22 -0
  235. package/dist/components/stat/Stat.js +2 -0
  236. package/dist/components/stat/index.d.ts +3 -0
  237. package/dist/components/stepper/Stepper.d.ts +29 -0
  238. package/dist/components/stepper/Stepper.js +2 -0
  239. package/dist/components/stepper/index.d.ts +3 -0
  240. package/dist/components/steps/Steps.d.ts +55 -0
  241. package/dist/components/steps/Steps.js +2 -0
  242. package/dist/components/steps/index.d.ts +3 -0
  243. package/dist/components/switch/Switch.d.ts +28 -0
  244. package/dist/components/switch/Switch.js +2 -0
  245. package/dist/components/switch/index.d.ts +3 -0
  246. package/dist/components/table/Table.d.ts +96 -0
  247. package/dist/components/table/Table.js +2 -0
  248. package/dist/components/table/index.d.ts +3 -0
  249. package/dist/components/tabs/Tabs.d.ts +39 -0
  250. package/dist/components/tabs/Tabs.js +2 -0
  251. package/dist/components/tabs/index.d.ts +3 -0
  252. package/dist/components/tag/Tag.d.ts +25 -0
  253. package/dist/components/tag/Tag.js +2 -0
  254. package/dist/components/tag/TagPair.d.ts +16 -0
  255. package/dist/components/tag/TagPair.js +2 -0
  256. package/dist/components/tag/index.d.ts +4 -0
  257. package/dist/components/tag-input/TagInput.d.ts +66 -0
  258. package/dist/components/tag-input/TagInput.js +3 -0
  259. package/dist/components/tag-input/index.d.ts +3 -0
  260. package/dist/components/term/Term.d.ts +19 -0
  261. package/dist/components/term/Term.js +2 -0
  262. package/dist/components/term/index.d.ts +3 -0
  263. package/dist/components/textarea/Textarea.d.ts +17 -0
  264. package/dist/components/textarea/Textarea.js +2 -0
  265. package/dist/components/textarea/index.d.ts +3 -0
  266. package/dist/components/texture/Texture.d.ts +19 -0
  267. package/dist/components/texture/Texture.js +2 -0
  268. package/dist/components/texture/index.d.ts +3 -0
  269. package/dist/components/tick-ring/TickRing.d.ts +22 -0
  270. package/dist/components/tick-ring/TickRing.js +2 -0
  271. package/dist/components/tick-ring/index.d.ts +3 -0
  272. package/dist/components/timeline/Timeline.d.ts +22 -0
  273. package/dist/components/timeline/Timeline.js +2 -0
  274. package/dist/components/timeline/index.d.ts +3 -0
  275. package/dist/components/toast/Toast.d.ts +45 -0
  276. package/dist/components/toast/Toast.js +2 -0
  277. package/dist/components/toast/index.d.ts +3 -0
  278. package/dist/components/toc/Toc.d.ts +46 -0
  279. package/dist/components/toc/Toc.js +2 -0
  280. package/dist/components/toc/index.d.ts +3 -0
  281. package/dist/components/toolbar/Toolbar.d.ts +97 -0
  282. package/dist/components/toolbar/Toolbar.js +2 -0
  283. package/dist/components/toolbar/index.d.ts +3 -0
  284. package/dist/components/tooltip/Tooltip.d.ts +47 -0
  285. package/dist/components/tooltip/Tooltip.js +2 -0
  286. package/dist/components/tooltip/index.d.ts +3 -0
  287. package/dist/components/top-bar/TopBar.d.ts +21 -0
  288. package/dist/components/top-bar/TopBar.js +2 -0
  289. package/dist/components/top-bar/index.d.ts +3 -0
  290. package/dist/components/viewfinder/Viewfinder.d.ts +35 -0
  291. package/dist/components/viewfinder/Viewfinder.js +2 -0
  292. package/dist/components/viewfinder/index.d.ts +3 -0
  293. package/dist/game/animated-dialog/AnimatedDialog.d.ts +53 -0
  294. package/dist/game/animated-dialog/AnimatedDialog.js +2 -0
  295. package/dist/game/animated-dialog/index.d.ts +3 -0
  296. package/dist/game/assets/splash_bg.jpg +0 -0
  297. package/dist/game/assets/splash_bg_portrait.jpg +0 -0
  298. package/dist/game/assets/splash_deco.svg +4 -0
  299. package/dist/game/assets/splash_logo.svg +1 -0
  300. package/dist/game/assets/splash_triangles.svg +4 -0
  301. package/dist/game/banner-alert/AlertIcons.js +2 -0
  302. package/dist/game/banner-alert/AlertModal.js +2 -0
  303. package/dist/game/banner-alert/BannerAlert.d.ts +6 -0
  304. package/dist/game/banner-alert/BannerAlert.js +2 -0
  305. package/dist/game/banner-alert/index.d.ts +3 -0
  306. package/dist/game/banner-alert/types.d.ts +48 -0
  307. package/dist/game/banner-alert/types.js +2 -0
  308. package/dist/game/banner-alert/useAlertActions.js +2 -0
  309. package/dist/game/banner-alert/useAlertGlitch.js +2 -0
  310. package/dist/game/full-width-alert/FullWidthAlert.d.ts +7 -0
  311. package/dist/game/full-width-alert/FullWidthAlert.js +2 -0
  312. package/dist/game/full-width-alert/index.d.ts +3 -0
  313. package/dist/game/item-card/ItemCard.d.ts +48 -0
  314. package/dist/game/item-card/ItemCard.js +2 -0
  315. package/dist/game/item-card/index.d.ts +3 -0
  316. package/dist/game/item-hover-card/ItemHoverCard.d.ts +31 -0
  317. package/dist/game/item-hover-card/ItemHoverCard.js +2 -0
  318. package/dist/game/item-hover-card/events.js +2 -0
  319. package/dist/game/item-hover-card/index.d.ts +3 -0
  320. package/dist/game/item-icon/ItemIcon.d.ts +5 -0
  321. package/dist/game/item-icon/ItemIcon.js +2 -0
  322. package/dist/game/item-icon/helpers.d.ts +22 -0
  323. package/dist/game/item-icon/helpers.js +2 -0
  324. package/dist/game/item-icon/index.d.ts +5 -0
  325. package/dist/game/item-icon/types.d.ts +32 -0
  326. package/dist/game/item-tooltip-card/ItemTooltipCard.d.ts +6 -0
  327. package/dist/game/item-tooltip-card/ItemTooltipCard.js +2 -0
  328. package/dist/game/item-tooltip-card/icons.js +2 -0
  329. package/dist/game/item-tooltip-card/index.d.ts +4 -0
  330. package/dist/game/item-tooltip-card/types.d.ts +40 -0
  331. package/dist/game/lib/core.d.ts +8 -0
  332. package/dist/game/lib/first-focusable.js +2 -0
  333. package/dist/game/resource-provenance.json +70 -1
  334. package/dist/game/rounded-button/RoundedButton.d.ts +22 -0
  335. package/dist/game/rounded-button/RoundedButton.js +2 -0
  336. package/dist/game/rounded-button/RoundedIconButton.d.ts +10 -0
  337. package/dist/game/rounded-button/RoundedIconButton.js +2 -0
  338. package/dist/game/rounded-button/index.d.ts +4 -0
  339. package/dist/game/rounded-select/RoundedSelect.d.ts +43 -0
  340. package/dist/game/rounded-select/RoundedSelect.js +2 -0
  341. package/dist/game/rounded-select/index.d.ts +3 -0
  342. package/dist/game/rounded-switch/RoundedSwitch.d.ts +16 -0
  343. package/dist/game/rounded-switch/RoundedSwitch.js +2 -0
  344. package/dist/game/rounded-switch/index.d.ts +3 -0
  345. package/dist/game/rounded-toggle/RoundedToggle.d.ts +23 -0
  346. package/dist/game/rounded-toggle/RoundedToggle.js +2 -0
  347. package/dist/game/rounded-toggle/index.d.ts +3 -0
  348. package/dist/game/rounded-toggle/keyboard.js +2 -0
  349. package/dist/game/rounded-toggle/spring-highlight.js +2 -0
  350. package/dist/game/splash-screen/EndfieldSplashScreen.d.ts +14 -0
  351. package/dist/game/splash-screen/EndfieldSplashScreen.js +2 -0
  352. package/dist/game/splash-screen/index.d.ts +3 -0
  353. package/dist/game/styles.css +1 -1
  354. package/dist/game.d.ts +29 -371
  355. package/dist/game.js +1 -2041
  356. package/dist/hooks/index.d.ts +7 -0
  357. package/dist/hooks/useAddedKeys.js +2 -0
  358. package/dist/hooks/useControllableState.d.ts +12 -0
  359. package/dist/hooks/useControllableState.js +2 -0
  360. package/dist/hooks/useFlip.js +2 -0
  361. package/dist/hooks/useInView.d.ts +15 -0
  362. package/dist/hooks/useInView.js +2 -0
  363. package/dist/hooks/useIndicator.js +2 -0
  364. package/dist/hooks/useLingering.js +2 -0
  365. package/dist/hooks/useOverflowing.js +2 -0
  366. package/dist/hooks/usePortalScope.d.ts +26 -0
  367. package/dist/hooks/usePortalScope.js +2 -0
  368. package/dist/hooks/usePresence.js +2 -0
  369. package/dist/hooks/useReducedMotion.d.ts +10 -0
  370. package/dist/hooks/useReducedMotion.js +2 -0
  371. package/dist/hooks/useScrollPosition.js +2 -0
  372. package/dist/hooks/useTheme.d.ts +21 -0
  373. package/dist/hooks/useTheme.js +2 -0
  374. package/dist/icons/ArrowCorner.d.ts +9 -0
  375. package/dist/icons/ArrowCorner.js +2 -0
  376. package/dist/icons/ArrowLeft.d.ts +8 -0
  377. package/dist/icons/ArrowLeft.js +2 -0
  378. package/dist/icons/ArrowRight.d.ts +8 -0
  379. package/dist/icons/ArrowRight.js +2 -0
  380. package/dist/icons/CalendarIcon.d.ts +12 -0
  381. package/dist/icons/CalendarIcon.js +2 -0
  382. package/dist/icons/Check.d.ts +9 -0
  383. package/dist/icons/Check.js +2 -0
  384. package/dist/icons/ChevronDown.d.ts +8 -0
  385. package/dist/icons/ChevronDown.js +2 -0
  386. package/dist/icons/ChevronLeft.d.ts +8 -0
  387. package/dist/icons/ChevronLeft.js +2 -0
  388. package/dist/icons/ChevronRight.d.ts +8 -0
  389. package/dist/icons/ChevronRight.js +2 -0
  390. package/dist/icons/Close.d.ts +8 -0
  391. package/dist/icons/Close.js +2 -0
  392. package/dist/icons/Crosshair.d.ts +9 -0
  393. package/dist/icons/Crosshair.js +2 -0
  394. package/dist/icons/Lock.d.ts +8 -0
  395. package/dist/icons/Lock.js +2 -0
  396. package/dist/icons/Menu.d.ts +9 -0
  397. package/dist/icons/Menu.js +2 -0
  398. package/dist/icons/Minus.d.ts +9 -0
  399. package/dist/icons/Minus.js +2 -0
  400. package/dist/icons/Plus.d.ts +8 -0
  401. package/dist/icons/Plus.js +2 -0
  402. package/dist/icons/StatusDanger.d.ts +9 -0
  403. package/dist/icons/StatusDanger.js +2 -0
  404. package/dist/icons/StatusInfo.d.ts +9 -0
  405. package/dist/icons/StatusInfo.js +2 -0
  406. package/dist/icons/StatusSuccess.d.ts +9 -0
  407. package/dist/icons/StatusSuccess.js +2 -0
  408. package/dist/icons/StatusWarning.d.ts +9 -0
  409. package/dist/icons/StatusWarning.js +2 -0
  410. package/dist/icons/TriangleRight.d.ts +9 -0
  411. package/dist/icons/TriangleRight.js +2 -0
  412. package/dist/icons/Upload.d.ts +9 -0
  413. package/dist/icons/Upload.js +2 -0
  414. package/dist/icons/createIcon.d.ts +16 -0
  415. package/dist/icons/createIcon.js +2 -0
  416. package/dist/icons/index.d.ts +23 -0
  417. package/dist/index.d.ts +209 -3505
  418. package/dist/index.js +1 -9625
  419. package/dist/lib/cn.d.ts +5 -0
  420. package/dist/lib/cn.js +2 -0
  421. package/dist/lib/create-lazy-context.js +2 -0
  422. package/dist/lib/date.js +2 -0
  423. package/dist/lib/decor.js +2 -0
  424. package/dist/lib/defined.js +2 -0
  425. package/dist/lib/file.js +2 -0
  426. package/dist/lib/focus-ring.js +2 -0
  427. package/dist/lib/inline-style.js +2 -0
  428. package/dist/lib/merge-refs.js +2 -0
  429. package/dist/lib/motion.js +2 -0
  430. package/dist/styles.css +1 -1
  431. package/package.json +17 -11
  432. package/src/components/accordion/Accordion.tsx +13 -5
  433. package/src/components/alert/Alert.tsx +1 -1
  434. package/src/components/avatar/AvatarSwitcher.tsx +7 -5
  435. package/src/components/carousel/Carousel.tsx +6 -5
  436. package/src/components/context-menu/ContextMenu.tsx +5 -2
  437. package/src/components/data-row/DataRow.tsx +10 -4
  438. package/src/components/date-picker/DateField.tsx +1 -3
  439. package/src/components/dropdown-menu/DropdownMenu.tsx +7 -4
  440. package/src/components/dropdown-menu/menu-style.ts +9 -3
  441. package/src/components/field/Field.tsx +10 -6
  442. package/src/components/file-upload/FileUpload.tsx +5 -2
  443. package/src/components/flyout-bar/FlyoutBar.tsx +1 -1
  444. package/src/components/image-viewer/ImageViewer.tsx +6 -5
  445. package/src/components/input/control-box.ts +30 -10
  446. package/src/components/list/List.tsx +7 -5
  447. package/src/components/nav-action/NavAction.tsx +4 -3
  448. package/src/components/nav-menu/NavMenu.tsx +13 -7
  449. package/src/components/otp-input/OtpInput.tsx +35 -43
  450. package/src/components/radio/Radio.tsx +7 -5
  451. package/src/components/schedule/Schedule.tsx +7 -5
  452. package/src/components/segmented-control/SegmentedControl.tsx +9 -7
  453. package/src/components/select/Select.tsx +11 -11
  454. package/src/components/side-rail/SideRail.tsx +15 -9
  455. package/src/components/side-rail/SideRailSub.tsx +12 -7
  456. package/src/components/splash-screen/SplashScreen.tsx +340 -0
  457. package/src/components/splash-screen/index.ts +1 -0
  458. package/src/components/steps/Steps.tsx +7 -5
  459. package/src/components/table/Table.tsx +23 -17
  460. package/src/components/tabs/Tabs.tsx +7 -5
  461. package/src/components/tag-input/TagInput.tsx +5 -2
  462. package/src/components/toast/Toast.tsx +12 -8
  463. package/src/components/toc/Toc.tsx +5 -4
  464. package/src/components/toolbar/Toolbar.tsx +7 -6
  465. package/src/components/tooltip/Tooltip.tsx +7 -4
  466. package/src/components/top-bar/TopBar.tsx +7 -2
  467. package/src/icons/ArrowCorner.tsx +1 -1
  468. package/src/icons/ArrowLeft.tsx +1 -1
  469. package/src/icons/ArrowRight.tsx +1 -1
  470. package/src/icons/CalendarIcon.tsx +1 -1
  471. package/src/icons/Check.tsx +4 -1
  472. package/src/icons/ChevronDown.tsx +4 -1
  473. package/src/icons/ChevronLeft.tsx +1 -1
  474. package/src/icons/ChevronRight.tsx +1 -1
  475. package/src/icons/Close.tsx +4 -1
  476. package/src/icons/Crosshair.tsx +1 -1
  477. package/src/icons/Lock.tsx +1 -1
  478. package/src/icons/Menu.tsx +4 -1
  479. package/src/icons/Minus.tsx +1 -1
  480. package/src/icons/Plus.tsx +4 -1
  481. package/src/icons/StatusDanger.tsx +1 -1
  482. package/src/icons/StatusInfo.tsx +1 -1
  483. package/src/icons/StatusSuccess.tsx +1 -1
  484. package/src/icons/StatusWarning.tsx +1 -1
  485. package/src/icons/TriangleRight.tsx +1 -1
  486. package/src/icons/Upload.tsx +1 -1
  487. package/src/index.ts +1 -0
  488. package/src/lib/cn.ts +1 -1
  489. package/src/lib/create-lazy-context.ts +6 -0
  490. package/src/styles/theme.css +33 -0
  491. package/src/styles/utilities.css +8 -0
  492. package/src/components/README.md +0 -190
  493. package/src/hooks/README.md +0 -20
  494. package/src/icons/README.md +0 -31
  495. package/src/lib/README.md +0 -19
  496. package/src/styles/README.md +0 -74
@@ -1,5 +1,4 @@
1
1
  import {
2
- createContext,
3
2
  useContext,
4
3
  type ComponentProps,
5
4
  type MouseEvent,
@@ -10,6 +9,7 @@ import { focusRingInset } from "../../lib/focus-ring";
10
9
  import { GhostText } from "../ghost-text/GhostText";
11
10
  import { LinkElement, type LinkRender } from "../link-element/LinkElement";
12
11
  import { bandCanvas, bandGap, bandRow } from "./band-style";
12
+ import { createLazyContext } from "../../lib/create-lazy-context";
13
13
 
14
14
  export type ListVariant = "plain" | "band";
15
15
 
@@ -21,12 +21,14 @@ export type ListProps = ComponentProps<"ul"> & {
21
21
  variant?: ListVariant;
22
22
  };
23
23
 
24
- const ListVariantContext = createContext<ListVariant>("plain");
24
+ const getListVariantContext =
25
+ /* @__PURE__ */ createLazyContext<ListVariant>("plain");
25
26
 
26
27
  /** 列表行的容器,外圈不描边。里面只放 `ListRow`。 */
27
28
  export function List({ variant = "plain", className, ...props }: ListProps) {
29
+ const ListVariantContext = getListVariantContext();
28
30
  return (
29
- <ListVariantContext value={variant}>
31
+ <ListVariantContext.Provider value={variant}>
30
32
  <ul
31
33
  {...props}
32
34
  data-variant={variant}
@@ -38,7 +40,7 @@ export function List({ variant = "plain", className, ...props }: ListProps) {
38
40
  className,
39
41
  )}
40
42
  />
41
- </ListVariantContext>
43
+ </ListVariantContext.Provider>
42
44
  );
43
45
  }
44
46
 
@@ -103,7 +105,7 @@ export function ListRow({
103
105
  children,
104
106
  ...props
105
107
  }: ListRowProps) {
106
- const band = useContext(ListVariantContext) === "band";
108
+ const band = useContext(getListVariantContext()) === "band";
107
109
  const isLink = href !== undefined || render !== undefined;
108
110
  const isButton = !isLink && onClick !== undefined;
109
111
  const interactive = (isLink || isButton) && !disabled;
@@ -1,5 +1,4 @@
1
1
  import {
2
- createContext,
3
2
  useContext,
4
3
  type ComponentProps,
5
4
  type MouseEvent,
@@ -9,11 +8,13 @@ import { TriangleRight } from "../../icons/TriangleRight";
9
8
  import { cn } from "../../lib/cn";
10
9
  import { focusRing } from "../../lib/focus-ring";
11
10
  import { LinkElement, type LinkRender } from "../link-element/LinkElement";
11
+ import { createLazyContext } from "../../lib/create-lazy-context";
12
12
 
13
13
  export type NavActionLayout = "inline" | "block" | "stacked";
14
14
 
15
15
  /** 侧轨和全屏菜单用它告诉里面的主行动块该怎么摆。不对外导出 */
16
- export const NavActionContext = createContext<NavActionLayout | null>(null);
16
+ export const getNavActionContext =
17
+ /* @__PURE__ */ createLazyContext<NavActionLayout | null>(null);
17
18
 
18
19
  type OwnProps = {
19
20
  /** 换掉默认的实心三角 */
@@ -65,7 +66,7 @@ export function NavAction({
65
66
  children,
66
67
  ...props
67
68
  }: NavActionProps) {
68
- const inherited = useContext(NavActionContext);
69
+ const inherited = useContext(getNavActionContext());
69
70
  const layout = layoutProp ?? inherited ?? "inline";
70
71
  const stacked = layout === "stacked";
71
72
 
@@ -1,6 +1,5 @@
1
1
  import { Dialog as BaseDialog } from "@base-ui/react/dialog";
2
2
  import {
3
- createContext,
4
3
  useContext,
5
4
  useRef,
6
5
  type ComponentProps,
@@ -18,10 +17,13 @@ import { firstFocusableIn } from "../dialog/initial-focus";
18
17
  import { GhostText } from "../ghost-text/GhostText";
19
18
  import { IconButton } from "../icon-button/IconButton";
20
19
  import { LinkElement, type LinkRender } from "../link-element/LinkElement";
21
- import { NavActionContext } from "../nav-action/NavAction";
20
+ import { getNavActionContext } from "../nav-action/NavAction";
21
+ import { createLazyContext } from "../../lib/create-lazy-context";
22
22
 
23
23
  /** 导航项点了之后要把菜单关上 */
24
- const NavMenuContext = createContext<() => void>(() => {});
24
+ const getNavMenuContext = /* @__PURE__ */ createLazyContext<() => void>(
25
+ () => {},
26
+ );
25
27
 
26
28
  export type NavMenuProps = {
27
29
  /** 菜单钮,通常是顶栏最右边的 `<IconButton>`。不传就用 `open` / `onOpenChange` 自己控制 */
@@ -68,6 +70,8 @@ export function NavMenu({
68
70
  className,
69
71
  children,
70
72
  }: NavMenuProps) {
73
+ const NavMenuContext = getNavMenuContext();
74
+ const NavActionContext = getNavActionContext();
71
75
  const [isOpen, setOpen] = useControllableState({
72
76
  value: open,
73
77
  defaultValue: defaultOpen,
@@ -114,11 +118,11 @@ export function NavMenu({
114
118
  ref={bodyRef}
115
119
  className="flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain"
116
120
  >
117
- <NavMenuContext value={() => setOpen(false)}>
121
+ <NavMenuContext.Provider value={() => setOpen(false)}>
118
122
  <nav aria-label={navLabel}>
119
123
  <ul className="flex flex-col gap-1 p-4">{children}</ul>
120
124
  </nav>
121
- </NavMenuContext>
125
+ </NavMenuContext.Provider>
122
126
 
123
127
  {tools && (
124
128
  <div className="mx-4 flex flex-wrap gap-1 bg-surface-muted p-1">
@@ -146,7 +150,9 @@ export function NavMenu({
146
150
 
147
151
  {footer && (
148
152
  <div className="flex shrink-0 flex-col gap-2 p-4">
149
- <NavActionContext value="block">{footer}</NavActionContext>
153
+ <NavActionContext.Provider value="block">
154
+ {footer}
155
+ </NavActionContext.Provider>
150
156
  </div>
151
157
  )}
152
158
  </div>
@@ -204,7 +210,7 @@ export function NavMenuItem({
204
210
  children,
205
211
  ...props
206
212
  }: NavMenuItemProps) {
207
- const close = useContext(NavMenuContext);
213
+ const close = useContext(getNavMenuContext());
208
214
  const isLink = href !== undefined || render !== undefined;
209
215
 
210
216
  const handleClick = (event: MouseEvent<HTMLElement>) => {
@@ -1,10 +1,10 @@
1
1
  import { OTPField as BaseOtpField } from "@base-ui/react/otp-field";
2
2
  import { Fragment, useId, type ComponentProps } from "react";
3
3
  import { cn } from "../../lib/cn";
4
- import { focusRing } from "../../lib/focus-ring";
5
4
  import { useFieldContext, useFieldControl } from "../field/Field";
6
5
  import {
7
- readOnlyFrame,
6
+ controlBox,
7
+ controlElement,
8
8
  type ControlSize,
9
9
  type ControlVariant,
10
10
  } from "../input/control-box";
@@ -53,21 +53,17 @@ export type OtpInputProps = Omit<
53
53
  slotLabel?: (position: number, length: number) => string;
54
54
  };
55
55
 
56
- /* 格子见方;容器窄了宽度可以让,高度不变 */
56
+ /* 格子见方;容器窄了宽度可以让,高度不变。字号在里面那个 <input> 上 */
57
57
  const slotSize: Record<ControlSize, string> = {
58
- sm: "h-8 w-8 text-base",
59
- md: "h-10 w-10 text-lg",
60
- lg: "h-14 w-14 text-2xl",
58
+ sm: "h-8 w-8",
59
+ md: "h-10 w-10",
60
+ lg: "h-14 w-14",
61
61
  };
62
62
 
63
- const slotFrame: Record<ControlVariant, string> = {
64
- sunken: "border-b-2",
65
- outline: "border",
66
- };
67
-
68
- const slotFill: Record<ControlVariant, string> = {
69
- sunken: "bg-surface-sunken",
70
- outline: "bg-surface",
63
+ const slotText: Record<ControlSize, string> = {
64
+ sm: "text-base",
65
+ md: "text-lg",
66
+ lg: "text-2xl",
71
67
  };
72
68
 
73
69
  const gapClass: Record<ControlSize, string> = {
@@ -132,27 +128,12 @@ export function OtpInput({
132
128
  const ownLabel = ariaLabelledBy ?? (ariaLabel ? labelId : undefined);
133
129
  const groupLabel = ownLabel ?? fieldContext?.labelId;
134
130
 
135
- const slotClass = cn(
136
- // 字色:空格是透明的,填上(基元给的 data-filled)才有颜色。下面那条颜色的过渡
137
- // 本来是给边线的,字色跟着它走——所以填进去的那一位是淡入的。光标另有自己的颜色
138
- "min-w-0 shrink text-center font-tech font-medium tabular-nums text-transparent caret-ink",
131
+ const inputClass = cn(
132
+ controlElement,
133
+ "h-full w-full text-center font-tech font-medium tabular-nums caret-ink text-transparent",
139
134
  "transition-colors duration-(--duration-fast) ease-standard",
140
135
  disabled ? "data-filled:text-ink-disabled" : "data-filled:text-ink",
141
- focusRing,
142
- slotSize[size],
143
- slotFrame[variant],
144
- readOnly
145
- ? // 只读:没有边线、底变透明。边线留透明的,尺寸不跳
146
- "border-transparent bg-transparent"
147
- : slotFill[variant],
148
- readOnly && !disabled && !invalid && readOnlyFrame,
149
- disabled
150
- ? "cursor-not-allowed border-line"
151
- : invalid
152
- ? "border-danger"
153
- : !readOnly &&
154
- // 悬停只在没聚焦时生效:聚焦中的格子不会因为鼠标经过而变浅
155
- "border-line-strong hover:not-focus:border-ink-secondary focus:border-ink",
136
+ slotText[size],
156
137
  );
157
138
 
158
139
  const group = groupSize !== undefined && groupSize > 0 ? groupSize : 0;
@@ -203,16 +184,27 @@ export function OtpInput({
203
184
  className="h-0.5 w-2 shrink-0 bg-line-strong forced-colors:bg-[CanvasText]"
204
185
  />
205
186
  )}
206
- <BaseOtpField.Input
207
- // 第一格的名称是字段的标签(或者上面那段隐藏的文字),说明文字也挂在它上面
208
- {...(index === 0
209
- ? { "aria-labelledby": ownLabel, "aria-describedby": describedBy }
210
- : { "aria-label": slotLabel(index + 1, length) })}
211
- aria-invalid={invalid || undefined}
212
- autoFocus={autoFocus && index === 0}
213
- autoCapitalize={uppercase ? "characters" : "none"}
214
- className={slotClass}
215
- />
187
+ <span
188
+ className={cn(
189
+ controlBox({ variant, invalid, disabled, readOnly }),
190
+ "shrink items-center justify-center",
191
+ slotSize[size],
192
+ )}
193
+ >
194
+ <BaseOtpField.Input
195
+ // 第一格的名称是字段的标签(或者上面那段隐藏的文字),说明文字也挂在它上面
196
+ {...(index === 0
197
+ ? {
198
+ "aria-labelledby": ownLabel,
199
+ "aria-describedby": describedBy,
200
+ }
201
+ : { "aria-label": slotLabel(index + 1, length) })}
202
+ aria-invalid={invalid || undefined}
203
+ autoFocus={autoFocus && index === 0}
204
+ autoCapitalize={uppercase ? "characters" : "none"}
205
+ className={inputClass}
206
+ />
207
+ </span>
216
208
  </Fragment>
217
209
  ))}
218
210
  </BaseOtpField.Root>
@@ -1,5 +1,4 @@
1
1
  import {
2
- createContext,
3
2
  useContext,
4
3
  useId,
5
4
  useMemo,
@@ -18,6 +17,7 @@ import {
18
17
  choiceMark,
19
18
  } from "../checkbox/choice-style";
20
19
  import { useFieldContext } from "../field/Field";
20
+ import { createLazyContext } from "../../lib/create-lazy-context";
21
21
 
22
22
  type RadioGroupContextValue = {
23
23
  name: string;
@@ -28,7 +28,8 @@ type RadioGroupContextValue = {
28
28
  invalid: boolean;
29
29
  };
30
30
 
31
- const RadioGroupContext = createContext<RadioGroupContextValue | null>(null);
31
+ const getRadioGroupContext =
32
+ /* @__PURE__ */ createLazyContext<RadioGroupContextValue | null>(null);
32
33
 
33
34
  export type RadioGroupOrientation = "vertical" | "horizontal";
34
35
 
@@ -64,6 +65,7 @@ export function RadioGroup({
64
65
  className,
65
66
  ...props
66
67
  }: RadioGroupProps) {
68
+ const RadioGroupContext = getRadioGroupContext();
67
69
  const field = useFieldContext();
68
70
  const autoName = useId();
69
71
  const [current, setCurrent] = useControllableState<string | undefined>({
@@ -92,7 +94,7 @@ export function RadioGroup({
92
94
  );
93
95
 
94
96
  return (
95
- <RadioGroupContext value={context}>
97
+ <RadioGroupContext.Provider value={context}>
96
98
  <div
97
99
  role="radiogroup"
98
100
  // 字段是 <fieldset> 时名称由 <legend> 给;否则指向字段的标签
@@ -109,7 +111,7 @@ export function RadioGroup({
109
111
  className,
110
112
  )}
111
113
  />
112
- </RadioGroupContext>
114
+ </RadioGroupContext.Provider>
113
115
  );
114
116
  }
115
117
 
@@ -134,7 +136,7 @@ export function Radio({
134
136
  children,
135
137
  ...props
136
138
  }: RadioProps) {
137
- const group = useContext(RadioGroupContext);
139
+ const group = useContext(getRadioGroupContext());
138
140
 
139
141
  const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
140
142
  onChange?.(event);
@@ -1,5 +1,4 @@
1
1
  import {
2
- createContext,
3
2
  useContext,
4
3
  useMemo,
5
4
  type ComponentProps,
@@ -14,6 +13,7 @@ import { decor } from "../../lib/decor";
14
13
  import { focusRingInset } from "../../lib/focus-ring";
15
14
  import { LinkElement, type LinkRender } from "../link-element/LinkElement";
16
15
  import { Tag } from "../tag/Tag";
16
+ import { createLazyContext } from "../../lib/create-lazy-context";
17
17
 
18
18
  type ScheduleContextValue = {
19
19
  start: string;
@@ -23,10 +23,11 @@ type ScheduleContextValue = {
23
23
  describe: (start: string, end: string) => string;
24
24
  };
25
25
 
26
- const ScheduleContext = createContext<ScheduleContextValue | null>(null);
26
+ const getScheduleContext =
27
+ /* @__PURE__ */ createLazyContext<ScheduleContextValue | null>(null);
27
28
 
28
29
  function useSchedule(part: string) {
29
- const context = useContext(ScheduleContext);
30
+ const context = useContext(getScheduleContext());
30
31
  if (!context) throw new Error(`${part} 要放在 Schedule 里面`);
31
32
  return context;
32
33
  }
@@ -86,6 +87,7 @@ export function Schedule({
86
87
  children,
87
88
  ...props
88
89
  }: ScheduleProps) {
90
+ const ScheduleContext = getScheduleContext();
89
91
  const [scrollerRef, overflowing] = useOverflowing();
90
92
  const dates = useMemo(() => eachDay(start, end), [start, end]);
91
93
  const days = dates.length;
@@ -125,7 +127,7 @@ export function Schedule({
125
127
  : null;
126
128
 
127
129
  return (
128
- <ScheduleContext value={context}>
130
+ <ScheduleContext.Provider value={context}>
129
131
  <div
130
132
  ref={scrollerRef}
131
133
  {...props}
@@ -257,7 +259,7 @@ export function Schedule({
257
259
  )}
258
260
  </div>
259
261
  </div>
260
- </ScheduleContext>
262
+ </ScheduleContext.Provider>
261
263
  );
262
264
  }
263
265
 
@@ -1,5 +1,4 @@
1
1
  import {
2
- createContext,
3
2
  useContext,
4
3
  useId,
5
4
  useMemo,
@@ -13,10 +12,12 @@ import { mergeRefs } from "../../lib/merge-refs";
13
12
  import { indicator, indicatorBox } from "../../lib/motion";
14
13
  import { useFieldContext } from "../field/Field";
15
14
  import {
15
+ controlLine,
16
16
  controlSize,
17
17
  type ControlSize,
18
18
  type ControlVariant,
19
19
  } from "../input/control-box";
20
+ import { createLazyContext } from "../../lib/create-lazy-context";
20
21
 
21
22
  export type SegmentedControlSize = ControlSize;
22
23
  export type SegmentedControlVariant = ControlVariant;
@@ -31,7 +32,8 @@ type SegmentedContextValue = {
31
32
  invalid: boolean;
32
33
  };
33
34
 
34
- const SegmentedContext = createContext<SegmentedContextValue | null>(null);
35
+ const getSegmentedContext =
36
+ /* @__PURE__ */ createLazyContext<SegmentedContextValue | null>(null);
35
37
 
36
38
  export type SegmentedControlProps = Omit<
37
39
  ComponentProps<"div">,
@@ -84,6 +86,7 @@ export function SegmentedControl({
84
86
  ref,
85
87
  ...props
86
88
  }: SegmentedControlProps) {
89
+ const SegmentedContext = getSegmentedContext();
87
90
  const field = useFieldContext();
88
91
  // 选中的那块底画在轨道上:换一段时是同一块滑过去
89
92
  const trackRef = useIndicator<HTMLDivElement>("[data-selected]");
@@ -115,7 +118,7 @@ export function SegmentedControl({
115
118
  );
116
119
 
117
120
  return (
118
- <SegmentedContext value={context}>
121
+ <SegmentedContext.Provider value={context}>
119
122
  <div
120
123
  role="radiogroup"
121
124
  // 字段是 <fieldset> 时名称由 <legend> 给;否则指向字段的标签
@@ -140,16 +143,15 @@ export function SegmentedControl({
140
143
  "forced-colors:after:bg-[Highlight] forced-colors:has-[[data-selected][data-disabled]]:after:bg-[GrayText]",
141
144
  track[variant],
142
145
  controlSize[size],
143
- // 和输入框一样靠边线说状态
144
146
  disabled
145
147
  ? "border-line"
146
148
  : invalid
147
149
  ? "border-danger"
148
- : "border-line-strong focus-within:border-ink",
150
+ : ["border-line-strong", controlLine(variant)],
149
151
  className,
150
152
  )}
151
153
  />
152
- </SegmentedContext>
154
+ </SegmentedContext.Provider>
153
155
  );
154
156
  }
155
157
 
@@ -182,7 +184,7 @@ export function Segment({
182
184
  children,
183
185
  ...props
184
186
  }: SegmentProps) {
185
- const context = useContext(SegmentedContext);
187
+ const context = useContext(getSegmentedContext());
186
188
  if (!context) {
187
189
  throw new Error("<Segment> 必须放在 <SegmentedControl> 里");
188
190
  }
@@ -1,6 +1,5 @@
1
1
  import { Select as BaseSelect } from "@base-ui/react/select";
2
2
  import {
3
- createContext,
4
3
  Fragment,
5
4
  useContext,
6
5
  useRef,
@@ -13,7 +12,7 @@ import { StatusDanger } from "../../icons/StatusDanger";
13
12
  import { TriangleRight } from "../../icons/TriangleRight";
14
13
  import { cn } from "../../lib/cn";
15
14
  import {
16
- MenuVariantContext,
15
+ getMenuVariantContext,
17
16
  menuGroupLabel,
18
17
  menuItem,
19
18
  menuItemCurrent,
@@ -31,6 +30,7 @@ import {
31
30
  type ControlSize,
32
31
  type ControlVariant,
33
32
  } from "../input/control-box";
33
+ import { createLazyContext } from "../../lib/create-lazy-context";
34
34
 
35
35
  export type SelectSize = ControlSize;
36
36
  export type SelectVariant = ControlVariant;
@@ -107,7 +107,7 @@ export type SelectMultipleProps = SelectCommonProps & {
107
107
  export type SelectProps = SelectSingleProps | SelectMultipleProps;
108
108
 
109
109
  /** 面板里的选项要知道自己在不在多选的下拉里 */
110
- const SelectMultipleContext = createContext(false);
110
+ const getSelectMultipleContext = /* @__PURE__ */ createLazyContext(false);
111
111
 
112
112
  function joinedLabels(selected: SelectOption[]) {
113
113
  return (
@@ -137,6 +137,8 @@ function joinedLabels(selected: SelectOption[]) {
137
137
  * 选项只有两三个、又都该一眼看到时,用单选或页签,不用它。
138
138
  */
139
139
  export function Select(props: SelectProps) {
140
+ const MenuVariantContext = getMenuVariantContext();
141
+ const SelectMultipleContext = getSelectMultipleContext();
140
142
  const {
141
143
  items,
142
144
  placeholder,
@@ -191,8 +193,6 @@ export function Select(props: SelectProps) {
191
193
  data-invalid={invalid ? "" : undefined}
192
194
  className={cn(
193
195
  controlBox({ variant, invalid, disabled, readOnly: false }),
194
- // 面板开着的时候边线保持聚焦的墨色
195
- !disabled && !invalid && "has-data-popup-open:border-ink",
196
196
  controlSize[size],
197
197
  className,
198
198
  )}
@@ -255,8 +255,8 @@ export function Select(props: SelectProps) {
255
255
  className={cn(menuPanel, "min-w-(--anchor-width)")}
256
256
  >
257
257
  <BaseSelect.List className="max-h-[min(var(--available-height),20rem)] overflow-y-auto overscroll-contain">
258
- <MenuVariantContext value={panelVariant}>
259
- <SelectMultipleContext value={multiple}>
258
+ <MenuVariantContext.Provider value={panelVariant}>
259
+ <SelectMultipleContext.Provider value={multiple}>
260
260
  {children ??
261
261
  items.map((item) => (
262
262
  <SelectItem
@@ -267,8 +267,8 @@ export function Select(props: SelectProps) {
267
267
  {item.label}
268
268
  </SelectItem>
269
269
  ))}
270
- </SelectMultipleContext>
271
- </MenuVariantContext>
270
+ </SelectMultipleContext.Provider>
271
+ </MenuVariantContext.Provider>
272
272
  </BaseSelect.List>
273
273
  </BaseSelect.Popup>
274
274
  </BaseSelect.Positioner>
@@ -322,8 +322,8 @@ export function SelectItem({
322
322
  children,
323
323
  ...props
324
324
  }: SelectItemProps) {
325
- const variant = useContext(MenuVariantContext);
326
- const multiple = useContext(SelectMultipleContext);
325
+ const variant = useContext(getMenuVariantContext());
326
+ const multiple = useContext(getSelectMultipleContext());
327
327
 
328
328
  return (
329
329
  <BaseSelect.Item
@@ -1,6 +1,5 @@
1
1
  import { Tooltip as BaseTooltip } from "@base-ui/react/tooltip";
2
2
  import {
3
- createContext,
4
3
  useContext,
5
4
  useMemo,
6
5
  type ComponentProps,
@@ -11,9 +10,14 @@ import { usePortalScope } from "../../hooks/usePortalScope";
11
10
  import { cn } from "../../lib/cn";
12
11
  import { focusRingInset } from "../../lib/focus-ring";
13
12
  import { LinkElement, type LinkRender } from "../link-element/LinkElement";
14
- import { NavActionContext } from "../nav-action/NavAction";
13
+ import { getNavActionContext } from "../nav-action/NavAction";
14
+ import { createLazyContext } from "../../lib/create-lazy-context";
15
15
 
16
- export const SideRailContext = createContext({ collapsed: false });
16
+ export const getSideRailContext = /* @__PURE__ */ createLazyContext<{
17
+ collapsed: boolean;
18
+ }>({
19
+ collapsed: false,
20
+ });
17
21
 
18
22
  /**
19
23
  * 一行栏目的样子:普通栏目和二级的父项共用。
@@ -92,10 +96,12 @@ export function SideRail({
92
96
  children,
93
97
  ...props
94
98
  }: SideRailProps) {
99
+ const SideRailContext = getSideRailContext();
100
+ const NavActionContext = getNavActionContext();
95
101
  const context = useMemo(() => ({ collapsed }), [collapsed]);
96
102
 
97
103
  return (
98
- <SideRailContext value={context}>
104
+ <SideRailContext.Provider value={context}>
99
105
  <nav
100
106
  {...props}
101
107
  data-collapsed={collapsed ? "" : undefined}
@@ -137,9 +143,9 @@ export function SideRail({
137
143
  <div
138
144
  className={cn("flex shrink-0 p-3", collapsed && "justify-center")}
139
145
  >
140
- <NavActionContext value={collapsed ? "stacked" : "block"}>
146
+ <NavActionContext.Provider value={collapsed ? "stacked" : "block"}>
141
147
  {action}
142
- </NavActionContext>
148
+ </NavActionContext.Provider>
143
149
  </div>
144
150
  )}
145
151
 
@@ -154,7 +160,7 @@ export function SideRail({
154
160
  </div>
155
161
  )}
156
162
  </nav>
157
- </SideRailContext>
163
+ </SideRailContext.Provider>
158
164
  );
159
165
  }
160
166
 
@@ -195,7 +201,7 @@ export function SideRailItem({
195
201
  children,
196
202
  ...props
197
203
  }: SideRailItemProps) {
198
- const { collapsed } = useContext(SideRailContext);
204
+ const { collapsed } = useContext(getSideRailContext());
199
205
  const { anchorRef, portalRef } = usePortalScope();
200
206
  const isLink = href !== undefined || render !== undefined;
201
207
 
@@ -294,7 +300,7 @@ export function SideRailGroup({
294
300
  children,
295
301
  ...props
296
302
  }: SideRailGroupProps) {
297
- const { collapsed } = useContext(SideRailContext);
303
+ const { collapsed } = useContext(getSideRailContext());
298
304
 
299
305
  return (
300
306
  <li {...props} className={cn("not-first:mt-2", className)}>
@@ -2,7 +2,6 @@ import { Collapsible as BaseCollapsible } from "@base-ui/react/collapsible";
2
2
  import { Menu as BaseMenu } from "@base-ui/react/menu";
3
3
  import {
4
4
  Children,
5
- createContext,
6
5
  isValidElement,
7
6
  useContext,
8
7
  useEffect,
@@ -25,10 +24,13 @@ import {
25
24
  menuPanel,
26
25
  } from "../dropdown-menu/menu-style";
27
26
  import { LinkElement, type LinkRender } from "../link-element/LinkElement";
28
- import { RailIcon, railItemClass, SideRailContext } from "./SideRail";
27
+ import { RailIcon, railItemClass, getSideRailContext } from "./SideRail";
28
+ import { createLazyContext } from "../../lib/create-lazy-context";
29
29
 
30
30
  /** 子项要知道自己是排在侧轨里,还是在收起时弹出的那块菜单里 */
31
- const SubContext = createContext<"list" | "menu">("list");
31
+ const getSubContext = /* @__PURE__ */ createLazyContext<"list" | "menu">(
32
+ "list",
33
+ );
32
34
 
33
35
  type SubOwnProps = {
34
36
  /** 图标。收起时只剩它 */
@@ -63,7 +65,8 @@ export function SideRailSub({
63
65
  children,
64
66
  ...props
65
67
  }: SideRailSubProps) {
66
- const { collapsed } = useContext(SideRailContext);
68
+ const SubContext = getSubContext();
69
+ const { collapsed } = useContext(getSideRailContext());
67
70
  const { anchorRef, portalRef } = usePortalScope();
68
71
 
69
72
  // 当前项在不在里面:从子元素上读,所以 SideRailSubItem 要直接放在这里
@@ -121,7 +124,9 @@ export function SideRailSub({
121
124
  <BaseMenu.GroupLabel className={menuGroupLabel}>
122
125
  {label}
123
126
  </BaseMenu.GroupLabel>
124
- <SubContext value="menu">{children}</SubContext>
127
+ <SubContext.Provider value="menu">
128
+ {children}
129
+ </SubContext.Provider>
125
130
  </BaseMenu.Group>
126
131
  </BaseMenu.Popup>
127
132
  </BaseMenu.Positioner>
@@ -167,7 +172,7 @@ export function SideRailSub({
167
172
  aria-label={label}
168
173
  className="relative before:absolute before:inset-y-0 before:left-8 before:w-px before:bg-line before:content-['']"
169
174
  >
170
- <SubContext value="list">{children}</SubContext>
175
+ <SubContext.Provider value="list">{children}</SubContext.Provider>
171
176
  </ul>
172
177
  </BaseCollapsible.Panel>
173
178
  </BaseCollapsible.Root>
@@ -208,7 +213,7 @@ export function SideRailSubItem({
208
213
  children,
209
214
  ...props
210
215
  }: SideRailSubItemProps) {
211
- const placement = useContext(SubContext);
216
+ const placement = useContext(getSubContext());
212
217
  const isLink = href !== undefined || render !== undefined;
213
218
 
214
219
  const content = (