@endfield-ui/react 1.2.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 (477) hide show
  1. package/README.md +8 -3
  2. package/dist/components/accordion/Accordion.d.ts +46 -0
  3. package/dist/components/accordion/Accordion.js +2 -0
  4. package/dist/components/accordion/index.d.ts +3 -0
  5. package/dist/components/alert/Alert.d.ts +28 -0
  6. package/dist/components/alert/Alert.js +2 -0
  7. package/dist/components/alert/index.d.ts +3 -0
  8. package/dist/components/avatar/Avatar.d.ts +24 -0
  9. package/dist/components/avatar/Avatar.js +2 -0
  10. package/dist/components/avatar/AvatarSwitcher.d.ts +46 -0
  11. package/dist/components/avatar/AvatarSwitcher.js +2 -0
  12. package/dist/components/avatar/index.d.ts +4 -0
  13. package/dist/components/back-to-top/BackToTop.d.ts +21 -0
  14. package/dist/components/back-to-top/BackToTop.js +2 -0
  15. package/dist/components/back-to-top/index.d.ts +3 -0
  16. package/dist/components/badge/Badge.d.ts +20 -0
  17. package/dist/components/badge/Badge.js +2 -0
  18. package/dist/components/badge/index.d.ts +3 -0
  19. package/dist/components/bracket-title/BracketTitle.d.ts +17 -0
  20. package/dist/components/bracket-title/BracketTitle.js +2 -0
  21. package/dist/components/bracket-title/index.d.ts +3 -0
  22. package/dist/components/breadcrumb/Breadcrumb.d.ts +26 -0
  23. package/dist/components/breadcrumb/Breadcrumb.js +2 -0
  24. package/dist/components/breadcrumb/index.d.ts +3 -0
  25. package/dist/components/button/Button.d.ts +50 -0
  26. package/dist/components/button/Button.js +2 -0
  27. package/dist/components/button/ButtonGroup.d.ts +21 -0
  28. package/dist/components/button/ButtonGroup.js +2 -0
  29. package/dist/components/button/index.d.ts +4 -0
  30. package/dist/components/calendar/Calendar.d.ts +57 -0
  31. package/dist/components/calendar/Calendar.js +2 -0
  32. package/dist/components/calendar/index.d.ts +3 -0
  33. package/dist/components/carousel/Carousel.d.ts +38 -0
  34. package/dist/components/carousel/Carousel.js +2 -0
  35. package/dist/components/carousel/index.d.ts +3 -0
  36. package/dist/components/carousel/snap-track.js +2 -0
  37. package/dist/components/checkbox/Checkbox.d.ts +18 -0
  38. package/dist/components/checkbox/Checkbox.js +2 -0
  39. package/dist/components/checkbox/choice-style.js +2 -0
  40. package/dist/components/checkbox/index.d.ts +3 -0
  41. package/dist/components/chip/FilterChip.d.ts +18 -0
  42. package/dist/components/chip/FilterChip.js +2 -0
  43. package/dist/components/chip/ResourceChip.d.ts +16 -0
  44. package/dist/components/chip/ResourceChip.js +2 -0
  45. package/dist/components/chip/capsule-style.d.ts +4 -0
  46. package/dist/components/chip/capsule-style.js +2 -0
  47. package/dist/components/chip/index.d.ts +4 -0
  48. package/dist/components/combobox/Combobox.d.ts +105 -0
  49. package/dist/components/combobox/Combobox.js +2 -0
  50. package/dist/components/combobox/index.d.ts +3 -0
  51. package/dist/components/completion-banner/CompletionBanner.d.ts +26 -0
  52. package/dist/components/completion-banner/CompletionBanner.js +2 -0
  53. package/dist/components/completion-banner/index.d.ts +3 -0
  54. package/dist/components/context-menu/ContextMenu.d.ts +30 -0
  55. package/dist/components/context-menu/ContextMenu.js +2 -0
  56. package/dist/components/context-menu/index.d.ts +3 -0
  57. package/dist/components/corner-brackets/CornerBrackets.d.ts +20 -0
  58. package/dist/components/corner-brackets/CornerBrackets.js +2 -0
  59. package/dist/components/corner-brackets/index.d.ts +3 -0
  60. package/dist/components/countdown/Countdown.d.ts +26 -0
  61. package/dist/components/countdown/Countdown.js +2 -0
  62. package/dist/components/countdown/index.d.ts +3 -0
  63. package/dist/components/dash-indicator/DashIndicator.d.ts +15 -0
  64. package/dist/components/dash-indicator/DashIndicator.js +2 -0
  65. package/dist/components/dash-indicator/index.d.ts +3 -0
  66. package/dist/components/data-row/DataRow.d.ts +58 -0
  67. package/dist/components/data-row/DataRow.js +2 -0
  68. package/dist/components/data-row/index.d.ts +3 -0
  69. package/dist/components/date-picker/DateField.js +2 -0
  70. package/dist/components/date-picker/DatePicker.d.ts +56 -0
  71. package/dist/components/date-picker/DatePicker.js +2 -0
  72. package/dist/components/date-picker/DateRangePicker.d.ts +57 -0
  73. package/dist/components/date-picker/DateRangePicker.js +2 -0
  74. package/dist/components/date-picker/index.d.ts +4 -0
  75. package/dist/components/dialog/Dialog.d.ts +55 -0
  76. package/dist/components/dialog/Dialog.js +2 -0
  77. package/dist/components/dialog/index.d.ts +3 -0
  78. package/dist/components/dialog/initial-focus.js +2 -0
  79. package/dist/components/dialog/overlay-style.js +2 -0
  80. package/dist/components/drawer/Drawer.d.ts +48 -0
  81. package/dist/components/drawer/Drawer.js +2 -0
  82. package/dist/components/drawer/index.d.ts +3 -0
  83. package/dist/components/dropdown-menu/DropdownMenu.d.ts +115 -0
  84. package/dist/components/dropdown-menu/DropdownMenu.js +2 -0
  85. package/dist/components/dropdown-menu/MenuCheck.js +2 -0
  86. package/dist/components/dropdown-menu/index.d.ts +3 -0
  87. package/dist/components/dropdown-menu/menu-style.d.ts +4 -0
  88. package/dist/components/dropdown-menu/menu-style.js +2 -0
  89. package/dist/components/empty-state/EmptyState.d.ts +22 -0
  90. package/dist/components/empty-state/EmptyState.js +2 -0
  91. package/dist/components/empty-state/index.d.ts +3 -0
  92. package/dist/components/field/Field.d.ts +58 -0
  93. package/dist/components/field/Field.js +2 -0
  94. package/dist/components/field/index.d.ts +3 -0
  95. package/dist/components/file-upload/FileItem.d.ts +50 -0
  96. package/dist/components/file-upload/FileItem.js +2 -0
  97. package/dist/components/file-upload/FileUpload.d.ts +82 -0
  98. package/dist/components/file-upload/FileUpload.js +2 -0
  99. package/dist/components/file-upload/index.d.ts +4 -0
  100. package/dist/components/flyout-bar/FlyoutBar.d.ts +46 -0
  101. package/dist/components/flyout-bar/FlyoutBar.js +2 -0
  102. package/dist/components/flyout-bar/index.d.ts +3 -0
  103. package/dist/components/ghost-text/GhostText.d.ts +21 -0
  104. package/dist/components/ghost-text/GhostText.js +2 -0
  105. package/dist/components/ghost-text/index.d.ts +3 -0
  106. package/dist/components/hatch/Hatch.d.ts +18 -0
  107. package/dist/components/hatch/Hatch.js +2 -0
  108. package/dist/components/hatch/index.d.ts +3 -0
  109. package/dist/components/hazard-stripe/HazardStripe.d.ts +15 -0
  110. package/dist/components/hazard-stripe/HazardStripe.js +2 -0
  111. package/dist/components/hazard-stripe/index.d.ts +3 -0
  112. package/dist/components/hover-card/HoverCard.d.ts +35 -0
  113. package/dist/components/hover-card/HoverCard.js +2 -0
  114. package/dist/components/hover-card/index.d.ts +3 -0
  115. package/dist/components/icon-button/IconButton.d.ts +21 -0
  116. package/dist/components/icon-button/IconButton.js +2 -0
  117. package/dist/components/icon-button/index.d.ts +3 -0
  118. package/dist/components/image-viewer/ImageViewer.d.ts +48 -0
  119. package/dist/components/image-viewer/ImageViewer.js +2 -0
  120. package/dist/components/image-viewer/index.d.ts +3 -0
  121. package/dist/components/input/Input.d.ts +27 -0
  122. package/dist/components/input/Input.js +2 -0
  123. package/dist/components/input/control-box.d.ts +5 -0
  124. package/dist/components/input/control-box.js +2 -0
  125. package/dist/components/input/index.d.ts +3 -0
  126. package/dist/components/input/value-chip.js +2 -0
  127. package/dist/components/item-slot/ItemGrid.d.ts +12 -0
  128. package/dist/components/item-slot/ItemGrid.js +2 -0
  129. package/dist/components/item-slot/ItemSlot.d.ts +54 -0
  130. package/dist/components/item-slot/ItemSlot.js +2 -0
  131. package/dist/components/item-slot/index.d.ts +4 -0
  132. package/dist/components/kbd/Kbd.d.ts +15 -0
  133. package/dist/components/kbd/Kbd.js +2 -0
  134. package/dist/components/kbd/index.d.ts +3 -0
  135. package/dist/components/link-element/LinkElement.d.ts +6 -0
  136. package/dist/components/link-element/LinkElement.js +2 -0
  137. package/dist/components/list/List.d.ts +46 -0
  138. package/dist/components/list/List.js +2 -0
  139. package/dist/components/list/band-style.js +2 -0
  140. package/dist/components/list/index.d.ts +3 -0
  141. package/dist/components/loader/Loader.d.ts +23 -0
  142. package/dist/components/loader/Loader.js +2 -0
  143. package/dist/components/loader/index.d.ts +3 -0
  144. package/dist/components/marquee/Marquee.d.ts +22 -0
  145. package/dist/components/marquee/Marquee.js +2 -0
  146. package/dist/components/marquee/index.d.ts +3 -0
  147. package/dist/components/media-card/MediaCard.d.ts +36 -0
  148. package/dist/components/media-card/MediaCard.js +2 -0
  149. package/dist/components/media-card/index.d.ts +3 -0
  150. package/dist/components/nav-action/NavAction.d.ts +34 -0
  151. package/dist/components/nav-action/NavAction.js +2 -0
  152. package/dist/components/nav-action/index.d.ts +3 -0
  153. package/dist/components/nav-menu/NavMenu.d.ts +57 -0
  154. package/dist/components/nav-menu/NavMenu.js +2 -0
  155. package/dist/components/nav-menu/index.d.ts +3 -0
  156. package/dist/components/navigator/Navigator.d.ts +27 -0
  157. package/dist/components/navigator/Navigator.js +2 -0
  158. package/dist/components/navigator/index.d.ts +3 -0
  159. package/dist/components/otp-input/OtpInput.d.ts +52 -0
  160. package/dist/components/otp-input/OtpInput.js +2 -0
  161. package/dist/components/otp-input/index.d.ts +3 -0
  162. package/dist/components/page-header/PageHeader.d.ts +56 -0
  163. package/dist/components/page-header/PageHeader.js +2 -0
  164. package/dist/components/page-header/index.d.ts +3 -0
  165. package/dist/components/pagination/Pagination.d.ts +29 -0
  166. package/dist/components/pagination/Pagination.js +2 -0
  167. package/dist/components/pagination/index.d.ts +3 -0
  168. package/dist/components/panel/Panel.d.ts +36 -0
  169. package/dist/components/panel/Panel.js +2 -0
  170. package/dist/components/panel/index.d.ts +3 -0
  171. package/dist/components/play-button/PlayButton.d.ts +20 -0
  172. package/dist/components/play-button/PlayButton.js +2 -0
  173. package/dist/components/play-button/index.d.ts +3 -0
  174. package/dist/components/popover/Popover.d.ts +36 -0
  175. package/dist/components/popover/Popover.js +2 -0
  176. package/dist/components/popover/index.d.ts +3 -0
  177. package/dist/components/popover/panel-style.js +2 -0
  178. package/dist/components/progress/Progress.d.ts +27 -0
  179. package/dist/components/progress/Progress.js +2 -0
  180. package/dist/components/progress/ProgressRing.d.ts +23 -0
  181. package/dist/components/progress/ProgressRing.js +2 -0
  182. package/dist/components/progress/index.d.ts +4 -0
  183. package/dist/components/radio/Radio.d.ts +33 -0
  184. package/dist/components/radio/Radio.js +2 -0
  185. package/dist/components/radio/index.d.ts +3 -0
  186. package/dist/components/rec-indicator/RecIndicator.d.ts +16 -0
  187. package/dist/components/rec-indicator/RecIndicator.js +2 -0
  188. package/dist/components/rec-indicator/index.d.ts +3 -0
  189. package/dist/components/registration-strip/RegistrationStrip.d.ts +16 -0
  190. package/dist/components/registration-strip/RegistrationStrip.js +2 -0
  191. package/dist/components/registration-strip/index.d.ts +3 -0
  192. package/dist/components/rolling-number/RollingNumber.d.ts +25 -0
  193. package/dist/components/rolling-number/RollingNumber.js +2 -0
  194. package/dist/components/rolling-number/index.d.ts +3 -0
  195. package/dist/components/schedule/Schedule.d.ts +78 -0
  196. package/dist/components/schedule/Schedule.js +2 -0
  197. package/dist/components/schedule/index.d.ts +3 -0
  198. package/dist/components/scroll-area/ScrollArea.d.ts +26 -0
  199. package/dist/components/scroll-area/ScrollArea.js +2 -0
  200. package/dist/components/scroll-area/index.d.ts +3 -0
  201. package/dist/components/scroll-hint/ScrollHint.d.ts +23 -0
  202. package/dist/components/scroll-hint/ScrollHint.js +2 -0
  203. package/dist/components/scroll-hint/index.d.ts +3 -0
  204. package/dist/components/section-title/SectionTitle.d.ts +33 -0
  205. package/dist/components/section-title/SectionTitle.js +2 -0
  206. package/dist/components/section-title/index.d.ts +3 -0
  207. package/dist/components/segmented-control/SegmentedControl.d.ts +49 -0
  208. package/dist/components/segmented-control/SegmentedControl.js +2 -0
  209. package/dist/components/segmented-control/index.d.ts +3 -0
  210. package/dist/components/select/Select.d.ts +95 -0
  211. package/dist/components/select/Select.js +2 -0
  212. package/dist/components/select/index.d.ts +3 -0
  213. package/dist/components/side-rail/SideRail.d.ts +62 -0
  214. package/dist/components/side-rail/SideRail.js +2 -0
  215. package/dist/components/side-rail/SideRailSub.d.ts +47 -0
  216. package/dist/components/side-rail/SideRailSub.js +2 -0
  217. package/dist/components/side-rail/index.d.ts +4 -0
  218. package/dist/components/skeleton/Skeleton.d.ts +22 -0
  219. package/dist/components/skeleton/Skeleton.js +2 -0
  220. package/dist/components/skeleton/index.d.ts +3 -0
  221. package/dist/components/slider/Slider.d.ts +63 -0
  222. package/dist/components/slider/Slider.js +2 -0
  223. package/dist/components/slider/index.d.ts +3 -0
  224. package/dist/components/sparkline/Sparkline.d.ts +32 -0
  225. package/dist/components/sparkline/Sparkline.js +2 -0
  226. package/dist/components/sparkline/index.d.ts +3 -0
  227. package/dist/components/spinner/Spinner.d.ts +19 -0
  228. package/dist/components/spinner/Spinner.js +2 -0
  229. package/dist/components/spinner/index.d.ts +3 -0
  230. package/dist/components/splash-screen/SplashScreen.d.ts +43 -0
  231. package/dist/components/splash-screen/SplashScreen.js +2 -0
  232. package/dist/components/splash-screen/index.d.ts +3 -0
  233. package/dist/components/stat/Stat.d.ts +22 -0
  234. package/dist/components/stat/Stat.js +2 -0
  235. package/dist/components/stat/index.d.ts +3 -0
  236. package/dist/components/stepper/Stepper.d.ts +29 -0
  237. package/dist/components/stepper/Stepper.js +2 -0
  238. package/dist/components/stepper/index.d.ts +3 -0
  239. package/dist/components/steps/Steps.d.ts +55 -0
  240. package/dist/components/steps/Steps.js +2 -0
  241. package/dist/components/steps/index.d.ts +3 -0
  242. package/dist/components/switch/Switch.d.ts +28 -0
  243. package/dist/components/switch/Switch.js +2 -0
  244. package/dist/components/switch/index.d.ts +3 -0
  245. package/dist/components/table/Table.d.ts +96 -0
  246. package/dist/components/table/Table.js +2 -0
  247. package/dist/components/table/index.d.ts +3 -0
  248. package/dist/components/tabs/Tabs.d.ts +39 -0
  249. package/dist/components/tabs/Tabs.js +2 -0
  250. package/dist/components/tabs/index.d.ts +3 -0
  251. package/dist/components/tag/Tag.d.ts +25 -0
  252. package/dist/components/tag/Tag.js +2 -0
  253. package/dist/components/tag/TagPair.d.ts +16 -0
  254. package/dist/components/tag/TagPair.js +2 -0
  255. package/dist/components/tag/index.d.ts +4 -0
  256. package/dist/components/tag-input/TagInput.d.ts +66 -0
  257. package/dist/components/tag-input/TagInput.js +3 -0
  258. package/dist/components/tag-input/index.d.ts +3 -0
  259. package/dist/components/term/Term.d.ts +19 -0
  260. package/dist/components/term/Term.js +2 -0
  261. package/dist/components/term/index.d.ts +3 -0
  262. package/dist/components/textarea/Textarea.d.ts +17 -0
  263. package/dist/components/textarea/Textarea.js +2 -0
  264. package/dist/components/textarea/index.d.ts +3 -0
  265. package/dist/components/texture/Texture.d.ts +19 -0
  266. package/dist/components/texture/Texture.js +2 -0
  267. package/dist/components/texture/index.d.ts +3 -0
  268. package/dist/components/tick-ring/TickRing.d.ts +22 -0
  269. package/dist/components/tick-ring/TickRing.js +2 -0
  270. package/dist/components/tick-ring/index.d.ts +3 -0
  271. package/dist/components/timeline/Timeline.d.ts +22 -0
  272. package/dist/components/timeline/Timeline.js +2 -0
  273. package/dist/components/timeline/index.d.ts +3 -0
  274. package/dist/components/toast/Toast.d.ts +45 -0
  275. package/dist/components/toast/Toast.js +2 -0
  276. package/dist/components/toast/index.d.ts +3 -0
  277. package/dist/components/toc/Toc.d.ts +46 -0
  278. package/dist/components/toc/Toc.js +2 -0
  279. package/dist/components/toc/index.d.ts +3 -0
  280. package/dist/components/toolbar/Toolbar.d.ts +97 -0
  281. package/dist/components/toolbar/Toolbar.js +2 -0
  282. package/dist/components/toolbar/index.d.ts +3 -0
  283. package/dist/components/tooltip/Tooltip.d.ts +47 -0
  284. package/dist/components/tooltip/Tooltip.js +2 -0
  285. package/dist/components/tooltip/index.d.ts +3 -0
  286. package/dist/components/top-bar/TopBar.d.ts +21 -0
  287. package/dist/components/top-bar/TopBar.js +2 -0
  288. package/dist/components/top-bar/index.d.ts +3 -0
  289. package/dist/components/viewfinder/Viewfinder.d.ts +35 -0
  290. package/dist/components/viewfinder/Viewfinder.js +2 -0
  291. package/dist/components/viewfinder/index.d.ts +3 -0
  292. package/dist/game/animated-dialog/AnimatedDialog.d.ts +53 -0
  293. package/dist/game/animated-dialog/AnimatedDialog.js +2 -0
  294. package/dist/game/animated-dialog/index.d.ts +3 -0
  295. package/dist/game/banner-alert/AlertIcons.js +2 -0
  296. package/dist/game/banner-alert/AlertModal.js +2 -0
  297. package/dist/game/banner-alert/BannerAlert.d.ts +6 -0
  298. package/dist/game/banner-alert/BannerAlert.js +2 -0
  299. package/dist/game/banner-alert/index.d.ts +3 -0
  300. package/dist/game/banner-alert/types.d.ts +48 -0
  301. package/dist/game/banner-alert/types.js +2 -0
  302. package/dist/game/banner-alert/useAlertActions.js +2 -0
  303. package/dist/game/banner-alert/useAlertGlitch.js +2 -0
  304. package/dist/game/full-width-alert/FullWidthAlert.d.ts +7 -0
  305. package/dist/game/full-width-alert/FullWidthAlert.js +2 -0
  306. package/dist/game/full-width-alert/index.d.ts +3 -0
  307. package/dist/game/item-card/ItemCard.d.ts +48 -0
  308. package/dist/game/item-card/ItemCard.js +2 -0
  309. package/dist/game/item-card/index.d.ts +3 -0
  310. package/dist/game/item-hover-card/ItemHoverCard.d.ts +31 -0
  311. package/dist/game/item-hover-card/ItemHoverCard.js +2 -0
  312. package/dist/game/item-hover-card/events.js +2 -0
  313. package/dist/game/item-hover-card/index.d.ts +3 -0
  314. package/dist/game/item-icon/ItemIcon.d.ts +5 -0
  315. package/dist/game/item-icon/ItemIcon.js +2 -0
  316. package/dist/game/item-icon/helpers.d.ts +22 -0
  317. package/dist/game/item-icon/helpers.js +2 -0
  318. package/dist/game/item-icon/index.d.ts +5 -0
  319. package/dist/game/item-icon/types.d.ts +32 -0
  320. package/dist/game/item-tooltip-card/ItemTooltipCard.d.ts +6 -0
  321. package/dist/game/item-tooltip-card/ItemTooltipCard.js +2 -0
  322. package/dist/game/item-tooltip-card/icons.js +2 -0
  323. package/dist/game/item-tooltip-card/index.d.ts +4 -0
  324. package/dist/game/item-tooltip-card/types.d.ts +40 -0
  325. package/dist/game/lib/core.d.ts +8 -0
  326. package/dist/game/lib/first-focusable.js +2 -0
  327. package/dist/game/rounded-button/RoundedButton.d.ts +22 -0
  328. package/dist/game/rounded-button/RoundedButton.js +2 -0
  329. package/dist/game/rounded-button/RoundedIconButton.d.ts +10 -0
  330. package/dist/game/rounded-button/RoundedIconButton.js +2 -0
  331. package/dist/game/rounded-button/index.d.ts +4 -0
  332. package/dist/game/rounded-select/RoundedSelect.d.ts +43 -0
  333. package/dist/game/rounded-select/RoundedSelect.js +2 -0
  334. package/dist/game/rounded-select/index.d.ts +3 -0
  335. package/dist/game/rounded-switch/RoundedSwitch.d.ts +16 -0
  336. package/dist/game/rounded-switch/RoundedSwitch.js +2 -0
  337. package/dist/game/rounded-switch/index.d.ts +3 -0
  338. package/dist/game/rounded-toggle/RoundedToggle.d.ts +23 -0
  339. package/dist/game/rounded-toggle/RoundedToggle.js +2 -0
  340. package/dist/game/rounded-toggle/index.d.ts +3 -0
  341. package/dist/game/rounded-toggle/keyboard.js +2 -0
  342. package/dist/game/rounded-toggle/spring-highlight.js +2 -0
  343. package/dist/game/splash-screen/EndfieldSplashScreen.d.ts +14 -0
  344. package/dist/game/splash-screen/EndfieldSplashScreen.js +2 -0
  345. package/dist/game/splash-screen/index.d.ts +3 -0
  346. package/dist/game.d.ts +29 -383
  347. package/dist/game.js +1 -2068
  348. package/dist/hooks/index.d.ts +7 -0
  349. package/dist/hooks/useAddedKeys.js +2 -0
  350. package/dist/hooks/useControllableState.d.ts +12 -0
  351. package/dist/hooks/useControllableState.js +2 -0
  352. package/dist/hooks/useFlip.js +2 -0
  353. package/dist/hooks/useInView.d.ts +15 -0
  354. package/dist/hooks/useInView.js +2 -0
  355. package/dist/hooks/useIndicator.js +2 -0
  356. package/dist/hooks/useLingering.js +2 -0
  357. package/dist/hooks/useOverflowing.js +2 -0
  358. package/dist/hooks/usePortalScope.d.ts +26 -0
  359. package/dist/hooks/usePortalScope.js +2 -0
  360. package/dist/hooks/usePresence.js +2 -0
  361. package/dist/hooks/useReducedMotion.d.ts +10 -0
  362. package/dist/hooks/useReducedMotion.js +2 -0
  363. package/dist/hooks/useScrollPosition.js +2 -0
  364. package/dist/hooks/useTheme.d.ts +21 -0
  365. package/dist/hooks/useTheme.js +2 -0
  366. package/dist/icons/ArrowCorner.d.ts +9 -0
  367. package/dist/icons/ArrowCorner.js +2 -0
  368. package/dist/icons/ArrowLeft.d.ts +8 -0
  369. package/dist/icons/ArrowLeft.js +2 -0
  370. package/dist/icons/ArrowRight.d.ts +8 -0
  371. package/dist/icons/ArrowRight.js +2 -0
  372. package/dist/icons/CalendarIcon.d.ts +12 -0
  373. package/dist/icons/CalendarIcon.js +2 -0
  374. package/dist/icons/Check.d.ts +9 -0
  375. package/dist/icons/Check.js +2 -0
  376. package/dist/icons/ChevronDown.d.ts +8 -0
  377. package/dist/icons/ChevronDown.js +2 -0
  378. package/dist/icons/ChevronLeft.d.ts +8 -0
  379. package/dist/icons/ChevronLeft.js +2 -0
  380. package/dist/icons/ChevronRight.d.ts +8 -0
  381. package/dist/icons/ChevronRight.js +2 -0
  382. package/dist/icons/Close.d.ts +8 -0
  383. package/dist/icons/Close.js +2 -0
  384. package/dist/icons/Crosshair.d.ts +9 -0
  385. package/dist/icons/Crosshair.js +2 -0
  386. package/dist/icons/Lock.d.ts +8 -0
  387. package/dist/icons/Lock.js +2 -0
  388. package/dist/icons/Menu.d.ts +9 -0
  389. package/dist/icons/Menu.js +2 -0
  390. package/dist/icons/Minus.d.ts +9 -0
  391. package/dist/icons/Minus.js +2 -0
  392. package/dist/icons/Plus.d.ts +8 -0
  393. package/dist/icons/Plus.js +2 -0
  394. package/dist/icons/StatusDanger.d.ts +9 -0
  395. package/dist/icons/StatusDanger.js +2 -0
  396. package/dist/icons/StatusInfo.d.ts +9 -0
  397. package/dist/icons/StatusInfo.js +2 -0
  398. package/dist/icons/StatusSuccess.d.ts +9 -0
  399. package/dist/icons/StatusSuccess.js +2 -0
  400. package/dist/icons/StatusWarning.d.ts +9 -0
  401. package/dist/icons/StatusWarning.js +2 -0
  402. package/dist/icons/TriangleRight.d.ts +9 -0
  403. package/dist/icons/TriangleRight.js +2 -0
  404. package/dist/icons/Upload.d.ts +9 -0
  405. package/dist/icons/Upload.js +2 -0
  406. package/dist/icons/createIcon.d.ts +16 -0
  407. package/dist/icons/createIcon.js +2 -0
  408. package/dist/icons/index.d.ts +23 -0
  409. package/dist/index.d.ts +209 -3546
  410. package/dist/index.js +1 -9848
  411. package/dist/lib/cn.d.ts +5 -0
  412. package/dist/lib/cn.js +2 -0
  413. package/dist/lib/create-lazy-context.js +2 -0
  414. package/dist/lib/date.js +2 -0
  415. package/dist/lib/decor.js +2 -0
  416. package/dist/lib/defined.js +2 -0
  417. package/dist/lib/file.js +2 -0
  418. package/dist/lib/focus-ring.js +2 -0
  419. package/dist/lib/inline-style.js +2 -0
  420. package/dist/lib/merge-refs.js +2 -0
  421. package/dist/lib/motion.js +2 -0
  422. package/package.json +17 -11
  423. package/src/components/accordion/Accordion.tsx +13 -5
  424. package/src/components/avatar/AvatarSwitcher.tsx +7 -5
  425. package/src/components/carousel/Carousel.tsx +6 -5
  426. package/src/components/context-menu/ContextMenu.tsx +5 -2
  427. package/src/components/data-row/DataRow.tsx +10 -4
  428. package/src/components/date-picker/DateField.tsx +1 -1
  429. package/src/components/dropdown-menu/DropdownMenu.tsx +7 -4
  430. package/src/components/dropdown-menu/menu-style.ts +3 -2
  431. package/src/components/field/Field.tsx +10 -6
  432. package/src/components/flyout-bar/FlyoutBar.tsx +1 -1
  433. package/src/components/image-viewer/ImageViewer.tsx +6 -5
  434. package/src/components/list/List.tsx +7 -5
  435. package/src/components/nav-action/NavAction.tsx +4 -3
  436. package/src/components/nav-menu/NavMenu.tsx +13 -7
  437. package/src/components/radio/Radio.tsx +7 -5
  438. package/src/components/schedule/Schedule.tsx +7 -5
  439. package/src/components/segmented-control/SegmentedControl.tsx +7 -5
  440. package/src/components/select/Select.tsx +11 -9
  441. package/src/components/side-rail/SideRail.tsx +15 -9
  442. package/src/components/side-rail/SideRailSub.tsx +12 -7
  443. package/src/components/steps/Steps.tsx +7 -5
  444. package/src/components/table/Table.tsx +23 -17
  445. package/src/components/tabs/Tabs.tsx +7 -5
  446. package/src/components/toast/Toast.tsx +8 -5
  447. package/src/components/toc/Toc.tsx +5 -4
  448. package/src/components/toolbar/Toolbar.tsx +7 -6
  449. package/src/components/tooltip/Tooltip.tsx +7 -4
  450. package/src/components/top-bar/TopBar.tsx +7 -2
  451. package/src/icons/ArrowCorner.tsx +1 -1
  452. package/src/icons/ArrowLeft.tsx +1 -1
  453. package/src/icons/ArrowRight.tsx +1 -1
  454. package/src/icons/CalendarIcon.tsx +1 -1
  455. package/src/icons/Check.tsx +4 -1
  456. package/src/icons/ChevronDown.tsx +4 -1
  457. package/src/icons/ChevronLeft.tsx +1 -1
  458. package/src/icons/ChevronRight.tsx +1 -1
  459. package/src/icons/Close.tsx +4 -1
  460. package/src/icons/Crosshair.tsx +1 -1
  461. package/src/icons/Lock.tsx +1 -1
  462. package/src/icons/Menu.tsx +4 -1
  463. package/src/icons/Minus.tsx +1 -1
  464. package/src/icons/Plus.tsx +4 -1
  465. package/src/icons/StatusDanger.tsx +1 -1
  466. package/src/icons/StatusInfo.tsx +1 -1
  467. package/src/icons/StatusSuccess.tsx +1 -1
  468. package/src/icons/StatusWarning.tsx +1 -1
  469. package/src/icons/TriangleRight.tsx +1 -1
  470. package/src/icons/Upload.tsx +1 -1
  471. package/src/lib/cn.ts +1 -1
  472. package/src/lib/create-lazy-context.ts +6 -0
  473. package/src/components/README.md +0 -191
  474. package/src/hooks/README.md +0 -20
  475. package/src/icons/README.md +0 -31
  476. package/src/lib/README.md +0 -19
  477. package/src/styles/README.md +0 -77
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{focusRingInset as t}from"../../lib/focus-ring.js";import{createLazyContext as n}from"../../lib/create-lazy-context.js";import{mergeRefs as r}from"../../lib/merge-refs.js";import{useScrollPosition as i}from"../../hooks/useScrollPosition.js";import{LinkElement as a}from"../link-element/LinkElement.js";import{indicator as o}from"../../lib/motion.js";import{useIndicator as s}from"../../hooks/useIndicator.js";import{dropEmptyStyle as c}from"../../lib/inline-style.js";import{Children as l,useCallback as u,useContext as d,useEffect as f,useId as p,useMemo as m,useRef as h,useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";const y=/* @__PURE__ */ n({active:null,pick:()=>{}});function b(e){let t=e.map(e=>e.style.getPropertyValue(`scroll-behavior`));for(let t of e)t.style.setProperty(`scroll-behavior`,`smooth`);let n=e.map(e=>e===document.documentElement?window:e),r,i=()=>{clearTimeout(r);for(let e of n)e.removeEventListener(`scroll`,a);e.forEach((e,n)=>{e.style.setProperty(`scroll-behavior`,t[n]),c(e)})};function a(){clearTimeout(r),r=setTimeout(i,150)}for(let e of n)e.addEventListener(`scroll`,a,{passive:!0});return a(),i}function x({title:t,offset:n=0,target:a,onActiveChange:c,"aria-label":d,className:x,ref:S,children:C,...w}){let T=y(),E=h(null),D=s(`[aria-current]`),O=p(),k=l.count(C),A=u(({scrolled:e,room:t})=>{let r=E.current;if(!r)return null;let i=a?.current,o=i?i.getBoundingClientRect().top:0,s=null,c=null;for(let e of r.querySelectorAll(`[data-toc-section]`)){let t=e.dataset.tocSection,r=document.getElementById(t);r&&(c=t,r.getBoundingClientRect().top-o<=n+1&&(s=t))}return t>0&&e>=t-1?c:s},[a,n,k]),j=i(a,A,null),[M,N]=g(null);f(()=>{if(M===null)return;let e=a?.current??window,t=!1,n=setTimeout(()=>{t=!0},150),r=()=>{t?N(null):(clearTimeout(n),n=setTimeout(()=>{t=!0},150))};return e.addEventListener(`scroll`,r,{passive:!0}),()=>{clearTimeout(n),e.removeEventListener(`scroll`,r)}},[M,a]);let P=M??j,F=h(null);f(()=>()=>F.current?.(),[]);let I=u(e=>{if(N(e),F.current?.(),F.current=null,!document.getElementById(e)||typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let t=a?.current;F.current=b(t?[t,document.documentElement]:[document.documentElement])},[a]),L=h(c);L.current=c;let R=h(null);f(()=>{R.current!==P&&(R.current=P,L.current?.(P))},[P]),f(()=>{let e=E.current;if(!e||P===null||e.scrollHeight<=e.clientHeight+1)return;let t=e.querySelector(`[aria-current]`);if(!t)return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();r.top<n.top?e.scrollTop-=n.top-r.top+8:r.bottom>n.bottom&&(e.scrollTop+=r.bottom-n.bottom+8)},[P]);let z=m(()=>({active:P,pick:I}),[P,I]),B=t!=null&&t!==!1;return/* @__PURE__ */ v(`nav`,{...w,ref:r(E,S),"aria-label":d??(B?void 0:`本页目录`),"aria-labelledby":d===void 0&&B?O:void 0,className:e(`text-sm text-ink`,x),children:[B&&/* @__PURE__ */ _(`p`,{id:O,className:`mb-2 pl-4 font-tech text-xs text-ink-secondary`,children:t}),/* @__PURE__ */ _(`ul`,{ref:D,className:e(`before:absolute before:inset-y-0 before:left-0 before:-z-1 before:w-px before:bg-line before:content-['']`,o,`after:top-1 after:h-[calc(var(--indicator-h)-0.5rem)] after:w-[3px] after:translate-y-(--indicator-y) after:bg-ink`,`forced-colors:after:bg-[Highlight]`),children:/* @__PURE__ */ _(T.Provider,{value:z,children:C})})]})}const S={1:`pl-4`,2:`pl-7`,3:`pl-10`},C=e=>{let t=e?.split(`#`)[1];if(t)try{return decodeURIComponent(t)}catch{return t}};function w({href:n,section:r=C(n),level:i=1,render:o,onClick:s,children:c,...l}){let{active:u,pick:f}=d(y()),p=r!==void 0&&r===u;return/* @__PURE__ */ _(`li`,{...l,children:/* @__PURE__ */ _(a,{render:o,href:n,"data-toc-section":r,"data-level":i,"aria-current":p?`location`:void 0,onClick:e=>{s?.(e),!e.defaultPrevented&&r!==void 0&&f(r)},className:e(`relative block py-2 pr-2 leading-snug wrap-anywhere`,`transition-colors duration-(--duration-fast) ease-standard`,t,S[i],p?`text-ink before:absolute before:inset-y-1 before:left-0 before:w-[3px] before:bg-ink before:content-[''] in-data-indicator:before:hidden forced-colors:before:bg-[Highlight]`:`text-ink-secondary hover:text-ink`),children:c})})}export{x as Toc,w as TocItem};
@@ -0,0 +1,3 @@
1
+
2
+ import { Toc, TocItem, TocItemProps, TocLevel, TocProps } from "./Toc.js";
3
+ export { Toc, TocItem, type TocItemProps, type TocLevel, type TocProps };
@@ -0,0 +1,97 @@
1
+
2
+ import { LinkRender } from "../link-element/LinkElement.js";
3
+ import { ComponentProps, MouseEvent, ReactNode } from "react";
4
+ //#region src/components/toolbar/Toolbar.d.ts
5
+ export type ToolbarSize = "sm" | "md";
6
+ export type ToolbarVariant = "sunken" | "outline";
7
+ export type ToolbarOrientation = "horizontal" | "vertical";
8
+ export type ToolbarProps = Omit<ComponentProps<"div">, "aria-label" | "style"> & {
9
+ /** 这条工具栏管的是什么:"表格工具" */
10
+ "aria-label": string;
11
+ /** 带子高 32 / 40px(里面的钮 28 / 36px),默认 `md`。触屏上用 `md` */
12
+ size?: ToolbarSize;
13
+ /**
14
+ * - `sunken` 凹陷的底,默认;
15
+ * - `outline` 四边描边,放在凹陷底色的区域里时用。
16
+ */
17
+ variant?: ToolbarVariant;
18
+ /** 竖排时方向键换成上下 */
19
+ orientation?: ToolbarOrientation;
20
+ /** 整条禁用 */
21
+ disabled?: boolean;
22
+ };
23
+ /**
24
+ * 工具栏:一排作用于同一个对象的小工具,收在一条带子里。整条只占一个 Tab 停靠点,
25
+ * 方向键在各项之间走。里面放 `ToolbarButton`、`ToolbarToggle`、`ToolbarToggleGroup`、
26
+ * `ToolbarGroup`、`ToolbarSeparator`。
27
+ *
28
+ * 不在里面放输入框:左右方向键在输入框里是移光标。
29
+ */
30
+ export declare function Toolbar({ size, variant, orientation, disabled, className, onKeyDown, ...props }: ToolbarProps): import("react").JSX.Element;
31
+ /** 有字的钮名称就是字;只有图标的必须另给名称 */
32
+ type ItemContentProps = {
33
+ children: ReactNode;
34
+ "aria-label"?: string;
35
+ } | {
36
+ children?: undefined;
37
+ "aria-label": string;
38
+ };
39
+ type ButtonOwnProps = {
40
+ /** 图标,在文字左边 */
41
+ icon?: ReactNode;
42
+ disabled?: boolean;
43
+ /** 传了就渲染成链接 */
44
+ href?: string;
45
+ target?: string;
46
+ rel?: string;
47
+ /** 用这个元素代替 `<a>`(路由库的链接组件)。传了就按链接处理 */
48
+ render?: LinkRender;
49
+ onClick?: (event: MouseEvent<HTMLElement>) => void;
50
+ };
51
+ export type ToolbarButtonProps = ButtonOwnProps & ItemContentProps & Omit<ComponentProps<"button">, keyof ButtonOwnProps | "children" | "aria-label" | "style">;
52
+ /**
53
+ * 工具栏里的一个钮。只有图标时是方的,必须有 `aria-label`。
54
+ * 可以交给 `Menu` / `Popover` 的 `trigger`,也可以用 `Tooltip` 包住。
55
+ */
56
+ export declare function ToolbarButton({ icon, disabled, href, target, rel, render, onClick, type, className, children, ...props }: ToolbarButtonProps): import("react").JSX.Element;
57
+ type ToggleOwnProps = {
58
+ /** 图标,在文字左边 */
59
+ icon?: ReactNode;
60
+ /** 受控的按下状态。放在 `ToolbarToggleGroup` 里时不用它,用 `value` */
61
+ pressed?: boolean;
62
+ /** 非受控时一开始是不是按下的 */
63
+ defaultPressed?: boolean;
64
+ onPressedChange?: (pressed: boolean) => void;
65
+ /** 在 `ToolbarToggleGroup` 里是这一个钮的标识:组的 `value` 里放的就是它 */
66
+ value?: string;
67
+ disabled?: boolean;
68
+ };
69
+ export type ToolbarToggleProps = ToggleOwnProps & ItemContentProps & Omit<ComponentProps<"button">, keyof ToggleOwnProps | "children" | "aria-label" | "aria-pressed" | "style">;
70
+ /** 开关钮:按下是墨底黄记号。单独用,或者几个放进 `ToolbarToggleGroup`。 */
71
+ export declare function ToolbarToggle({ icon, pressed, defaultPressed, onPressedChange, value, disabled, type, className, children, ...props }: ToolbarToggleProps): import("react").JSX.Element;
72
+ export type ToolbarToggleGroupProps = Omit<ComponentProps<"div">, "aria-label" | "defaultValue" | "onChange" | "style"> & {
73
+ /** 这一组管的是什么:"行高" */
74
+ "aria-label": string;
75
+ /** 按下的那几个钮的 `value` */
76
+ value?: string[];
77
+ defaultValue?: string[];
78
+ onValueChange?: (value: string[]) => void;
79
+ /** 可以同时按下几个。默认按下这个,那个就弹起来;一个都不按也可以 */
80
+ multiple?: boolean;
81
+ disabled?: boolean;
82
+ };
83
+ /** 一组开关钮。值是数组:没有按下的就是空的。 */
84
+ export declare function ToolbarToggleGroup({ value, defaultValue, onValueChange, multiple, disabled, className, ...props }: ToolbarToggleGroupProps): import("react").JSX.Element;
85
+ export type ToolbarGroupProps = Omit<ComponentProps<"div">, "aria-label" | "style"> & {
86
+ /** 这一组管的是什么 */
87
+ "aria-label": string;
88
+ /** 整组禁用 */
89
+ disabled?: boolean;
90
+ };
91
+ /** 把几个钮在读屏里算成一组。看上去没有区别;要分开看,中间放 `ToolbarSeparator`。 */
92
+ export declare function ToolbarGroup({ className, ...props }: ToolbarGroupProps): import("react").JSX.Element;
93
+ export type ToolbarSeparatorProps = Omit<ComponentProps<"div">, "style">;
94
+ /** 分隔:一条短线,方向和工具栏垂直。 */
95
+ export declare function ToolbarSeparator({ className, ...props }: ToolbarSeparatorProps): import("react").JSX.Element;
96
+ //#endregion
97
+ export {};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{focusRing as t}from"../../lib/focus-ring.js";import{createLazyContext as n}from"../../lib/create-lazy-context.js";import{useContext as r,useMemo as i}from"react";import{Fragment as a,jsx as o,jsxs as s}from"react/jsx-runtime";import{Toggle as c}from"@base-ui/react/toggle";import{ToggleGroup as l}from"@base-ui/react/toggle-group";import{Toolbar as u}from"@base-ui/react/toolbar";const d=/* @__PURE__ */ n({size:`md`,orientation:`horizontal`}),f={sunken:`bg-surface-sunken p-0.5`,outline:`border border-line-strong bg-surface p-px`},p={sunken:`forced-colors:outline forced-colors:-outline-offset-1 forced-colors:outline-[ButtonText] forced-colors:data-disabled:outline-[GrayText]`,outline:`forced-colors:border-[ButtonText] forced-colors:data-disabled:border-[GrayText]`};function m({size:t=`md`,variant:n=`sunken`,orientation:r=`horizontal`,disabled:a=!1,className:s,onKeyDown:c,...l}){let m=d(),h=i(()=>({size:t,orientation:r}),[t,r]),g=e=>{let t=e.defaultPrevented;if(c?.(e),!t&&e.defaultPrevented||e.key!==`Home`&&e.key!==`End`)return;let n=e.currentTarget.querySelectorAll(`button[tabindex], a[tabindex]`),r=e.key===`Home`?n[0]:n[n.length-1];r&&(e.preventDefault(),r.focus())};return/* @__PURE__ */ o(m.Provider,{value:h,children:/* @__PURE__ */ o(u.Root,{...l,orientation:r,disabled:a,onKeyDown:g,"data-size":t,"data-variant":n,className:e(`inline-flex max-w-full gap-0.5 text-ink`,r===`vertical`?`flex-col`:`flex-wrap items-center`,f[n],p[n],s)})})}const h={sm:`h-7 min-w-7 after:absolute after:-inset-x-0.5 after:-inset-y-1.5 after:content-['']`,md:`h-9 min-w-9 after:absolute after:-inset-0.5 after:content-['']`},g={sm:`px-2`,md:`px-2.5`},_={sm:`[&_svg]:size-4`,md:`[&_svg]:size-5`},v=[`group/item relative inline-flex shrink-0 items-center justify-center gap-1.5`,`text-sm leading-none font-medium whitespace-nowrap text-ink-secondary select-none`,`transition-colors duration-(--duration-fast) ease-standard`,`hover:bg-ink/5 hover:text-ink active:bg-ink/10`,`data-pressed:bg-surface-inverse data-pressed:text-ink-inverse`,`data-popup-open:bg-surface-inverse data-popup-open:text-ink-inverse`,`data-disabled:cursor-not-allowed data-disabled:bg-transparent data-disabled:text-ink-disabled`,`data-disabled:data-pressed:bg-disabled data-disabled:data-pressed:text-on-disabled`,`forced-colors:data-pressed:forced-color-adjust-none forced-colors:data-pressed:outline-[Highlight]`,`forced-colors:data-pressed:bg-[Highlight] forced-colors:data-pressed:text-[HighlightText]`,`forced-colors:data-disabled:data-pressed:bg-[GrayText] forced-colors:data-disabled:data-pressed:text-[Canvas]`,`forced-colors:data-disabled:text-[GrayText]`,`focus-visible:z-1`,t].join(` `),y=[`flex shrink-0`,`group-data-pressed/item:text-accent-ink-inverse`,`group-data-popup-open/item:text-accent-ink-inverse`,`group-data-disabled/item:group-data-pressed/item:text-on-disabled`,`forced-colors:group-data-pressed/item:text-[HighlightText]`,`forced-colors:group-data-disabled/item:group-data-pressed/item:text-[Canvas]`].join(` `);function b(t,n){let{size:i}=r(d());return e(v,h[i],t?_[i]:[g[i],`[&_svg]:size-4`],n)}function x({icon:e,children:t}){return/* @__PURE__ */ s(a,{children:[e&&/* @__PURE__ */ o(`span`,{className:y,children:e}),t]})}const S=e=>e!=null&&e!==!1;function C({icon:e,disabled:t=!1,href:n,target:r,rel:i,render:a,onClick:s,type:c=`button`,className:l,children:d,...f}){let p=b(!S(d),l),m=/* @__PURE__ */ o(x,{icon:e,children:d});return n!==void 0||a!==void 0?/* @__PURE__ */ o(u.Link,{...f,render:a,href:t?void 0:n,target:r,rel:i,role:t&&a===void 0?`link`:void 0,"aria-disabled":t||void 0,"data-disabled":t?``:void 0,onClick:t?e=>e.preventDefault():s,className:p,children:m}):/* @__PURE__ */ o(u.Button,{...f,type:c,disabled:t,onClick:s,className:p,children:m})}function w({icon:e,pressed:t,defaultPressed:n,onPressedChange:r,value:i,disabled:a=!1,type:s=`button`,className:l,children:d,...f}){let p=b(!S(d),l);return/* @__PURE__ */ o(u.Button,{...f,type:s,disabled:a,render:/* @__PURE__ */ o(c,{pressed:t,defaultPressed:n,onPressedChange:r&&(e=>r(e)),value:i}),className:p,children:/* @__PURE__ */ o(x,{icon:e,children:d})})}const T=`flex gap-0.5 data-[orientation=horizontal]:flex-wrap data-[orientation=horizontal]:items-center data-[orientation=vertical]:flex-col`;function E({value:t,defaultValue:n,onValueChange:i,multiple:a=!1,disabled:s,className:c,...u}){let{orientation:f}=r(d());return/* @__PURE__ */ o(l,{...u,value:t,defaultValue:n,onValueChange:i&&(e=>i(e)),multiple:a,disabled:s,orientation:f,className:e(T,c)})}function D({className:t,...n}){return/* @__PURE__ */ o(u.Group,{...n,className:e(T,t)})}function O({className:t,...n}){return/* @__PURE__ */ o(u.Separator,{...n,className:e(`shrink-0 self-center bg-line-strong`,`forced-colors:bg-[ButtonText] forced-colors:in-data-disabled:bg-[GrayText]`,`data-[orientation=vertical]:mx-1 data-[orientation=vertical]:h-4 data-[orientation=vertical]:w-px`,`data-[orientation=horizontal]:my-1 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-4`,t)})}export{m as Toolbar,C as ToolbarButton,D as ToolbarGroup,O as ToolbarSeparator,w as ToolbarToggle,E as ToolbarToggleGroup};
@@ -0,0 +1,3 @@
1
+
2
+ import { Toolbar, ToolbarButton, ToolbarButtonProps, ToolbarGroup, ToolbarGroupProps, ToolbarOrientation, ToolbarProps, ToolbarSeparator, ToolbarSeparatorProps, ToolbarSize, ToolbarToggle, ToolbarToggleGroup, ToolbarToggleGroupProps, ToolbarToggleProps, ToolbarVariant } from "./Toolbar.js";
3
+ export { Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarGroup, type ToolbarGroupProps, type ToolbarOrientation, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, type ToolbarSize, ToolbarToggle, ToolbarToggleGroup, type ToolbarToggleGroupProps, type ToolbarToggleProps, type ToolbarVariant };
@@ -0,0 +1,47 @@
1
+
2
+ import { ReactElement, ReactNode } from "react";
3
+ //#region src/components/tooltip/Tooltip.d.ts
4
+ export type TooltipSide = "top" | "bottom" | "left" | "right";
5
+ export type TooltipAlign = "start" | "center" | "end";
6
+ export type TooltipProviderProps = {
7
+ /** 这一组提示统一的延迟,毫秒 */
8
+ delay?: number;
9
+ /** 一个提示消失后多久之内,旁边的提示不用再等延迟,毫秒。默认 400 */
10
+ timeout?: number;
11
+ children: ReactNode;
12
+ };
13
+ /**
14
+ * 可选。包住一组相邻的提示(工具栏):第一个出现之后,移到旁边的不用再等延迟。
15
+ */
16
+ export declare function TooltipProvider({ delay, timeout, children }: TooltipProviderProps): import("react").JSX.Element;
17
+ export type TooltipProps = {
18
+ /** 提示的内容:一句话,不放交互元素 */
19
+ content: ReactNode;
20
+ /** 触发元素:一个能接收 `ref` 与事件的元素(按钮、链接) */
21
+ children: ReactElement<Record<string, unknown>>;
22
+ /** 出现在触发元素的哪一侧,放不下时自动翻到对面。默认 `top` */
23
+ side?: TooltipSide;
24
+ align?: TooltipAlign;
25
+ /**
26
+ * 悬停多久后出现,毫秒,默认 300。键盘聚焦时立刻出现;消失不延迟。
27
+ * 在 `TooltipProvider` 里不传时跟随它的 `delay`。
28
+ */
29
+ delay?: number;
30
+ /** 指向触发元素的小三角,默认有。关掉后提示贴着触发元素 */
31
+ arrow?: boolean;
32
+ open?: boolean;
33
+ defaultOpen?: boolean;
34
+ onOpenChange?: (open: boolean) => void;
35
+ /** 不再出现 */
36
+ disabled?: boolean;
37
+ /** 给提示本身 */
38
+ className?: string;
39
+ };
40
+ /**
41
+ * 悬停或键盘聚焦时出现的一句说明。触屏上不出现:必要的信息不要只放在这里。
42
+ *
43
+ * 触发元素要有自己的可访问名称(图标按钮的 `aria-label`)。提示的内容会作为
44
+ * 补充说明关联给读屏;它和 `aria-label` 一字不差时不再重复关联。
45
+ */
46
+ export declare function Tooltip({ content, children, side, align, delay, arrow, open, defaultOpen, onOpenChange, disabled, className }: TooltipProps): import("react").JSX.Element;
47
+ //#endregion
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{createLazyContext as t}from"../../lib/create-lazy-context.js";import{usePortalScope as n}from"../../hooks/usePortalScope.js";import{enterFromSide as r}from"../../lib/motion.js";import{cloneElement as i,useContext as a,useId as o,useSyncExternalStore as s}from"react";import{jsx as c,jsxs as l}from"react/jsx-runtime";import{Tooltip as u}from"@base-ui/react/tooltip";import{createPortal as d}from"react-dom";const f=/* @__PURE__ */ t(!1);function p({delay:e=300,timeout:t,children:n}){let r=f();return/* @__PURE__ */ c(u.Provider,{delay:e,timeout:t,children:/* @__PURE__ */ c(r.Provider,{value:!0,children:n})})}const m=()=>()=>{};function h({id:e,children:t}){return s(m,()=>!0,()=>!1)?d(/* @__PURE__ */ c(`span`,{id:e,hidden:!0,children:t}),document.body):null}function g({content:t,children:s,side:d=`top`,align:p=`center`,delay:m,arrow:g=!0,open:_,defaultOpen:v,onOpenChange:y,disabled:b=!1,className:x}){let S=o(),C=a(f()),{anchorRef:w,portalRef:T}=n({invertTheme:!0}),E=s.props[`aria-label`],D=typeof t==`string`&&typeof E==`string`&&t.trim()===E.trim(),O=!b&&!D,k=s.props[`aria-describedby`],A=O?i(s,{"aria-describedby":typeof k==`string`?`${k} ${S}`:S}):s;return/* @__PURE__ */ l(u.Root,{open:_,defaultOpen:v,onOpenChange:y&&(e=>y(e)),disabled:b,children:[/* @__PURE__ */ c(u.Trigger,{ref:w,render:A,delay:m??(C?void 0:300)}),O&&/* @__PURE__ */ c(h,{id:S,children:t}),/* @__PURE__ */ c(u.Portal,{ref:T,children:/* @__PURE__ */ c(u.Positioner,{side:d,align:p,sideOffset:g?8:2,className:`z-(--z-overlay)`,children:/* @__PURE__ */ l(u.Popup,{className:e(`relative max-w-64 border border-transparent bg-surface-raised px-2.5 py-1.5 text-sm wrap-anywhere text-ink`,`origin-(--transform-origin) transition-[opacity,translate] duration-(--duration-fast) ease-standard`,`data-ending-style:opacity-0 data-instant:transition-none data-starting-style:opacity-0`,r,x),children:[g&&/* @__PURE__ */ c(u.Arrow,{"aria-hidden":`true`,className:e(`size-2 rotate-45 bg-surface-raised forced-colors:hidden`,`data-[side=bottom]:-top-1 data-[side=left]:-right-1 data-[side=right]:-left-1 data-[side=top]:-bottom-1`)}),t]})})})]})}export{g as Tooltip,p as TooltipProvider};
@@ -0,0 +1,3 @@
1
+
2
+ import { Tooltip, TooltipAlign, TooltipProps, TooltipProvider, TooltipProviderProps, TooltipSide } from "./Tooltip.js";
3
+ export { Tooltip, type TooltipAlign, type TooltipProps, TooltipProvider, type TooltipProviderProps, type TooltipSide };
@@ -0,0 +1,21 @@
1
+
2
+ import { ComponentProps, ReactNode } from "react";
3
+ //#region src/components/top-bar/TopBar.d.ts
4
+ export type TopBarProps = ComponentProps<"header"> & {
5
+ /** 最左边的标志。本库不带标志,传你自己的 */
6
+ brand?: ReactNode;
7
+ /** 工具图标钮:几个 `IconButton` */
8
+ tools?: ReactNode;
9
+ /** 主行动:放一个 `NavAction` */
10
+ action?: ReactNode;
11
+ /** 最右边的菜单钮:放一个 `NavMenu`(它自己带着触发按钮) */
12
+ menu?: ReactNode;
13
+ };
14
+ /**
15
+ * 顶栏:窄屏上的主导航。从左到右是标志、空白、工具图标钮、主行动、菜单钮;
16
+ * 栏目本身不排在这一条里,收进 `NavMenu`。
17
+ *
18
+ * 默认 `sticky` 贴在顶上。它只管排版,各格放什么由使用方给。
19
+ */
20
+ export declare function TopBar({ brand, tools, action, menu, className, children, ...props }: TopBarProps): import("react").JSX.Element;
21
+ //#endregion
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{getNavActionContext as t}from"../nav-action/NavAction.js";import{jsx as n,jsxs as r}from"react/jsx-runtime";function i({brand:i,tools:a,action:o,menu:s,className:c,children:l,...u}){let d=t();return/* @__PURE__ */ r(`header`,{...u,className:e(`sticky top-0 z-(--z-nav) flex h-14 shrink-0 items-center gap-2 border-b border-line bg-surface px-4 text-ink shadow-lg`,c),children:[i&&/* @__PURE__ */ n(`div`,{className:`flex min-w-0 items-center`,children:i}),/* @__PURE__ */ n(`div`,{className:`min-w-0 flex-1`,children:l}),a&&/* @__PURE__ */ n(`div`,{className:`flex shrink-0 items-center gap-1`,children:a}),o&&/* @__PURE__ */ n(d.Provider,{value:`inline`,children:o}),s]})}export{i as TopBar};
@@ -0,0 +1,3 @@
1
+
2
+ import { TopBar, TopBarProps } from "./TopBar.js";
3
+ export { TopBar, type TopBarProps };
@@ -0,0 +1,35 @@
1
+
2
+ import { ComponentProps, ReactNode } from "react";
3
+ //#region src/components/viewfinder/Viewfinder.d.ts
4
+ export type ViewfinderSize = "sm" | "md";
5
+ export type ViewfinderReadouts = {
6
+ topLeft?: ReactNode;
7
+ topRight?: ReactNode;
8
+ bottomLeft?: ReactNode;
9
+ bottomRight?: ReactNode;
10
+ };
11
+ export type ViewfinderProps = ComponentProps<"div"> & {
12
+ /** 取景角的臂长:16px 或 24px */
13
+ size?: ViewfinderSize;
14
+ /** 正中放一个小准星,标出焦点 */
15
+ crosshair?: boolean;
16
+ /**
17
+ * 挂上的时候取景角落位:八段短线各自从角上伸出来,播一次。
18
+ * 默认不动——取景角平时是静态的装饰。要它晚一点再动(等外面那一层先淡入完),
19
+ * 在外层设 `--bracket-delay`
20
+ */
21
+ animate?: boolean;
22
+ /**
23
+ * 四个角上的读数:坐标、比例、版本、时间码。
24
+ * 必须是真实的数据;没有就不放。
25
+ */
26
+ readouts?: ViewfinderReadouts;
27
+ };
28
+ /**
29
+ * 取景角:框住一张图、一片地图区域、一个焦点,标的是"范围",不是选中。
30
+ * 里面放被框住的内容;压在深色画面上时给它加 `data-theme="dark"`。
31
+ *
32
+ * 只用在展示性的画面上,一屏一处。取景角与准星是装饰,读数是真实信息、读屏读得到。
33
+ */
34
+ export declare function Viewfinder({ size, crosshair, animate, readouts, className, children, ...props }: ViewfinderProps): import("react").JSX.Element;
35
+ //#endregion
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{decor as t}from"../../lib/decor.js";import{jsx as n,jsxs as r}from"react/jsx-runtime";const i={sm:`[--bracket-arm:16px]`,md:`[--bracket-arm:24px]`},a={topLeft:`top-5 left-5`,topRight:`top-5 right-5 text-right`,bottomLeft:`bottom-5 left-5`,bottomRight:`right-5 bottom-5 text-right`};function o({size:o=`sm`,crosshair:s=!1,animate:c=!1,readouts:l,className:u,children:d,...f}){return/* @__PURE__ */ r(`div`,{...f,className:e(`relative text-ink`,u),children:[d,/* @__PURE__ */ n(`span`,{"aria-hidden":`true`,className:e(t,`corner-brackets absolute inset-3 [--bracket-color:currentColor] [--bracket-offset:0px] [--bracket-width:1.5px]`,i[o],c&&`after:animate-bracket-in after:[animation-delay:var(--bracket-delay,0s)]`)}),s&&/* @__PURE__ */ n(`svg`,{"aria-hidden":`true`,focusable:`false`,viewBox:`0 0 12 12`,fill:`none`,stroke:`currentColor`,strokeWidth:1.5,className:e(`pointer-events-none select-none forced-colors:hidden print:hidden`,`absolute top-1/2 left-1/2 size-3 -translate-1/2 text-accent-ink`),children:/* @__PURE__ */ n(`path`,{d:`M6 0v12M0 6h12`})}),l&&Object.keys(a).map(t=>l[t]!==void 0&&/* @__PURE__ */ n(`span`,{"data-corner":t,className:e(`pointer-events-none absolute font-tech text-xs leading-none text-ink-secondary tabular-nums`,a[t]),children:l[t]},t))]})}export{o as Viewfinder};
@@ -0,0 +1,3 @@
1
+
2
+ import { Viewfinder, ViewfinderProps, ViewfinderReadouts, ViewfinderSize } from "./Viewfinder.js";
3
+ export { Viewfinder, type ViewfinderProps, type ViewfinderReadouts, type ViewfinderSize };
@@ -0,0 +1,53 @@
1
+
2
+ import { CSSProperties, ComponentProps, ReactElement, ReactNode } from "react";
3
+ import { Dialog } from "@base-ui/react/dialog";
4
+ //#region src/game/animated-dialog/AnimatedDialog.d.ts
5
+ type PopupProps = ComponentProps<typeof Dialog.Popup>;
6
+ type PortalProps = ComponentProps<typeof Dialog.Portal>;
7
+ type CloseAction = () => boolean | void | PromiseLike<boolean | void>;
8
+ type SlotClassName = string | ((open: boolean) => string);
9
+ export type AnimatedDialogClassNames = {
10
+ backdrop?: SlotClassName;
11
+ alert?: SlotClassName;
12
+ contentContainer?: SlotClassName;
13
+ header?: SlotClassName;
14
+ title?: SlotClassName;
15
+ footer?: SlotClassName;
16
+ close?: SlotClassName;
17
+ };
18
+ export type AnimatedDialogProps = Omit<ComponentProps<"div">, "title" | "children" | "onClose" | "className" | "style"> & {
19
+ trigger?: ReactElement<Record<string, unknown>>;
20
+ open?: boolean;
21
+ defaultOpen?: boolean;
22
+ onOpenChange?: (open: boolean) => void;
23
+ title: ReactNode;
24
+ description?: ReactNode;
25
+ icon?: ReactNode;
26
+ width?: CSSProperties["width"];
27
+ height?: CSSProperties["height"];
28
+ className?: string;
29
+ classNames?: AnimatedDialogClassNames;
30
+ /** 点遮罩是否请求关闭。默认允许。 */
31
+ dismissible?: boolean;
32
+ /** Esc 是否请求关闭。未传时跟随 dismissible。 */
33
+ keyboardCloseable?: boolean;
34
+ /** 所有内部关闭请求都会执行;返回 false 或失败时保持打开。 */
35
+ onClose?: CloseAction;
36
+ /** 遮罩与 Esc 请求先执行此回调,再执行 onClose。 */
37
+ onDismiss?: CloseAction;
38
+ closeLabel?: string;
39
+ initialFocus?: PopupProps["initialFocus"];
40
+ finalFocus?: PopupProps["finalFocus"];
41
+ keepMounted?: boolean;
42
+ /**
43
+ * 是不是模态。默认是。传 `false` 时不锁焦点、不锁页面滚动,页面的其余部分照常能用——
44
+ * 配上 `container` 可以把弹窗嵌在页面的一块区域里展示。
45
+ */
46
+ modal?: boolean;
47
+ /** 弹层挂到哪个元素里。默认挂在 `<body>` 下 */
48
+ container?: PortalProps["container"];
49
+ children?: ReactNode;
50
+ };
51
+ export declare function AnimatedDialog({ trigger, open: controlledOpen, defaultOpen, onOpenChange, title, description, icon, width, height, className, classNames, dismissible, keyboardCloseable, onClose, onDismiss, closeLabel, initialFocus, finalFocus, keepMounted, modal, container, children, ...popupProps }: AnimatedDialogProps): import("react").JSX.Element;
52
+ //#endregion
53
+ export {};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{usePortalScope as t}from"../../hooks/usePortalScope.js";import{firstFocusableIn as n}from"../lib/first-focusable.js";import{useCallback as r,useLayoutEffect as i,useRef as a,useState as o}from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{Dialog as l}from"@base-ui/react/dialog";function u(e,t){return typeof e==`function`?e(t):e}function d({trigger:d,open:f,defaultOpen:p=!1,onOpenChange:m,title:h,description:g,icon:_,width:v,height:y,className:b,classNames:x,dismissible:S=!0,keyboardCloseable:C,onClose:w,onDismiss:T,closeLabel:E=`关闭`,initialFocus:D,finalFocus:O,keepMounted:k=!1,modal:A,container:j,children:M,...N}){let[P,F]=o(p),I=f??P,[L,R]=o(!1),z=a({open:I,session:0,locked:!1,mounted:!0}),B=a(null),{anchorRef:V,portalRef:H}=t(),U=r(()=>n(B)(),[]);i(()=>{let e=z.current;return e.mounted=!0,()=>{e.mounted=!1,e.session+=1,e.locked=!1}},[]),i(()=>{z.current.open!==I&&(z.current.open=I,z.current.session+=1,z.current.locked=!1,R(!1))},[I]);let W=r(e=>{f===void 0&&F(e),m?.(e)},[f,m]),G=r(async e=>{let t=z.current;if(!t.open||t.locked||!t.mounted)return;t.locked=!0;let n=t.session;R(!0);let r=()=>z.current.mounted&&z.current.open&&z.current.session===n;try{if(e&&(await T?.()===!1||!r()))return;await w?.()!==!1&&r()&&W(!1)}catch{}finally{r()&&(z.current.locked=!1,R(!1))}},[w,T,W]);return/* @__PURE__ */ c(l.Root,{open:I,onOpenChange:(e,t)=>{if(e){W(!0);return}if(t.cancel(),t.reason===`escape-key`&&!(C??S))return;let n=t.reason===`escape-key`||t.reason===`outside-press`||t.reason===`focus-out`;(!n||t.reason===`escape-key`||S)&&G(n)},disablePointerDismissal:!S,modal:A,children:[d&&/* @__PURE__ */ s(l.Trigger,{ref:V,render:d}),/* @__PURE__ */ c(l.Portal,{ref:H,keepMounted:k,container:j,children:[/* @__PURE__ */ s(l.Backdrop,{className:e(`ef-animated-dialog-backdrop`,u(x?.backdrop,I))}),/* @__PURE__ */ s(l.Viewport,{className:`ef-animated-dialog-viewport`,children:/* @__PURE__ */ c(l.Popup,{...N,"aria-busy":L||void 0,initialFocus:D??U,finalFocus:O,style:{width:v,height:y},className:e(`ef-animated-dialog`,b,u(x?.alert,I)),children:[/* @__PURE__ */ c(`header`,{className:e(`ef-animated-dialog__header`,u(x?.header,I)),children:[/* @__PURE__ */ c(`div`,{"aria-hidden":`true`,className:`ef-animated-dialog__top-strip`,children:[/* @__PURE__ */ s(`span`,{className:`ef-animated-dialog__yellow-block`}),/* @__PURE__ */ c(`span`,{className:`ef-animated-dialog__top-deco`,children:[/* @__PURE__ */ c(`svg`,{viewBox:`0 0 120 10`,children:[/* @__PURE__ */ s(`polygon`,{points:`0,2 7,2 3.5,8`,fill:`currentColor`}),/* @__PURE__ */ s(`text`,{x:`7`,y:`7`,fontSize:`7`,fontStyle:`italic`,children:`//`}),/* @__PURE__ */ s(`text`,{x:`16`,y:`7`,fontSize:`7`,children:`ARKNIGHTS:ENDFIELD`})]}),/* @__PURE__ */ c(`svg`,{viewBox:`0 0 10 10`,className:`ef-animated-dialog__plus`,children:[/* @__PURE__ */ s(`rect`,{x:`0.5`,y:`0.5`,width:`9`,height:`9`,fill:`none`,stroke:`currentColor`}),/* @__PURE__ */ s(`path`,{d:`M5 2.5v5M2.5 5h5`,stroke:`currentColor`})]})]})]}),/* @__PURE__ */ c(`div`,{className:`ef-animated-dialog__title-band`,children:[/* @__PURE__ */ s(`div`,{"aria-hidden":`true`,className:`ef-animated-dialog__icon-slot`,children:/* @__PURE__ */ s(`span`,{className:`ef-animated-dialog__icon`,children:_})}),/* @__PURE__ */ s(l.Title,{className:e(`ef-animated-dialog__title`,u(x?.title,I)),children:/* @__PURE__ */ s(`span`,{children:h})}),/* @__PURE__ */ s(`span`,{"aria-hidden":`true`,className:`ef-animated-dialog__title-deco`,children:`ENDFIELD`})]}),/* @__PURE__ */ s(`div`,{className:`ef-animated-dialog__close-motion`,children:/* @__PURE__ */ s(l.Close,{"aria-label":E,"aria-disabled":L||void 0,className:e(`ef-animated-dialog__close`,u(x?.close,I)),children:/* @__PURE__ */ s(`svg`,{"aria-hidden":`true`,viewBox:`0 0 205 205`,fill:`currentColor`,fillRule:`evenodd`,children:/* @__PURE__ */ s(`path`,{d:`M0 25L25 0L205 180L180 205ZM25 205L0 180L180 0L205 25Z`})})})}),/* @__PURE__ */ s(`div`,{"aria-hidden":`true`,className:`ef-animated-dialog__separator`})]}),/* @__PURE__ */ c(`div`,{"data-theme":`light`,className:e(`ef-animated-dialog__content`,u(x?.contentContainer,I)),children:[/* @__PURE__ */ c(`div`,{ref:B,className:`ef-animated-dialog__body`,children:[g&&/* @__PURE__ */ s(l.Description,{className:`ef-animated-dialog__description`,children:g}),M]}),/* @__PURE__ */ s(`span`,{"aria-hidden":`true`,className:`ef-animated-dialog__registration`})]}),/* @__PURE__ */ c(`footer`,{"aria-hidden":`true`,className:e(`ef-animated-dialog__footer`,u(x?.footer,I)),children:[/* @__PURE__ */ s(`span`,{className:`ef-animated-dialog__footer-square`}),/* @__PURE__ */ s(`span`,{className:`ef-animated-dialog__footer-outline`}),/* @__PURE__ */ s(`span`,{className:`ef-animated-dialog__footer-hatch`})]})]})})]})]})}export{d as AnimatedDialog};
@@ -0,0 +1,3 @@
1
+
2
+ import { AnimatedDialog, AnimatedDialogClassNames, AnimatedDialogProps } from "./AnimatedDialog.js";
3
+ export { AnimatedDialog, type AnimatedDialogClassNames, type AnimatedDialogProps };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{jsx as e}from"react/jsx-runtime";function t(){return/* @__PURE__ */ e(`svg`,{viewBox:`0 0 24 24`,fill:`none`,width:`1em`,height:`1em`,"aria-hidden":`true`,children:/* @__PURE__ */ e(`path`,{d:`M4.89163 13.2687L9.16582 17.5427L18.7085 8`,stroke:`currentColor`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`})})}function n(){return/* @__PURE__ */ e(`svg`,{viewBox:`0 0 1024 1024`,width:`1em`,height:`1em`,"aria-hidden":`true`,children:/* @__PURE__ */ e(`path`,{fill:`currentColor`,d:`M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z`})})}export{n as AlertCloseIcon,t as AlertTickIcon};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{usePortalScope as t}from"../../hooks/usePortalScope.js";import{alertSlotClass as n}from"./types.js";import{useAlertActions as r}from"./useAlertActions.js";import{useCallback as i,useLayoutEffect as a,useRef as o}from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{Dialog as l}from"@base-ui/react/dialog";function u(e){let t=e.querySelectorAll(`a[href],button,input:not([type="hidden"]),select,textarea,[tabindex],[contenteditable="true"]`);return Array.from(t).some(e=>{if(e.matches(`:disabled`)||e.hasAttribute(`tabindex`)&&e.tabIndex<0||e.closest(`[hidden],[inert],[aria-hidden="true"]`))return!1;let t=getComputedStyle(e);return t.display!==`none`&&t.visibility!==`hidden`})}function d({trigger:d,open:f,defaultOpen:p,onOpenChange:m,title:h,description:g,dismissible:_=!0,keyboardCloseable:v,loading:y,hideCancel:b=!1,cancelText:x,confirmText:ee,showIcon:te,width:S,height:C,className:w,classNames:T,onConfirm:E,onCancel:D,onDismiss:O,onClose:k,initialFocus:A,finalFocus:j,keepMounted:M=!1,modal:N,container:P,popupClassName:F,backdropClassName:I,viewportClassName:L,children:R,ref:z,...B}){let{open:V,busy:H,updateOpen:U,run:W}=r({open:f,defaultOpen:p,onOpenChange:m,loading:y,onConfirm:E,onCancel:D,onDismiss:O,onClose:k}),{anchorRef:G,portalRef:K}=t(),q=o(null),J=o(null),Y=o(null),X=o(null),Z=o(!1),Q=i(()=>{let e=b?Y.current:J.current;return e&&!e.disabled?e:q.current??!0},[b]),$=i(e=>{if(q.current=e,typeof z==`function`)return z(e);z&&(z.current=e)},[z]);return a(()=>{let e=q.current,t=Z.current;if(Z.current=H,!V||!e)return;let n=e.ownerDocument.activeElement;if(H)(n===e.ownerDocument.body||n instanceof HTMLElement&&e.contains(n)&&n.matches(`:disabled`))&&e.focus({preventScroll:!0});else if(t&&n===e){let t=X.current;t&&e.contains(t)&&!t.matches(`:disabled`)&&t.focus({preventScroll:!0})}},[H,V]),/* @__PURE__ */ c(l.Root,{open:V,onOpenChange:(e,t)=>{if(e){U(!0);return}if(t.cancel(),t.reason===`escape-key`&&!(v??_))return;let n=t.reason===`escape-key`||t.reason===`outside-press`||t.reason===`focus-out`;(!n||t.reason===`escape-key`||_)&&W(n?`dismiss`:`close`)},disablePointerDismissal:!_||H,modal:N,children:[d&&/* @__PURE__ */ s(l.Trigger,{ref:G,render:d}),/* @__PURE__ */ c(l.Portal,{ref:K,keepMounted:M,container:P,children:[/* @__PURE__ */ s(l.Backdrop,{className:e(I,n(T?.backdrop,V))}),/* @__PURE__ */ s(l.Viewport,{className:e(`ef-alert-modal-viewport`,L),children:/* @__PURE__ */ c(l.Popup,{...B,onFocusCapture:e=>{B.onFocusCapture?.(e),e.target instanceof HTMLElement&&e.target!==e.currentTarget&&e.currentTarget.contains(e.target)&&(X.current=e.target)},onKeyDownCapture:e=>{B.onKeyDownCapture?.(e),V&&H&&e.key===`Tab`&&e.target instanceof Node&&e.currentTarget.contains(e.target)&&!u(e.currentTarget)&&(e.preventDefault(),e.currentTarget.focus({preventScroll:!0}))},ref:$,role:`alertdialog`,"aria-busy":H||void 0,"data-theme":`light`,initialFocus:A??Q,finalFocus:j,style:{width:S,height:C},className:e(F,w,n(T?.alert,V)),children:[/* @__PURE__ */ s(l.Title,{className:`ef-alert-modal-sr-only`,children:h}),g&&/* @__PURE__ */ s(l.Description,{className:`ef-alert-modal-sr-only`,children:g}),R({open:V,busy:H,cancelRef:J,confirmRef:Y,confirm:()=>{W(`confirm`)},cancel:()=>{W(`cancel`)}})]})})]})]})}export{d as AlertModal};
@@ -0,0 +1,6 @@
1
+
2
+ import { AlertModalProps } from "./types.js";
3
+ //#region src/game/banner-alert/BannerAlert.d.ts
4
+ export type BannerAlertProps = AlertModalProps;
5
+ export declare function BannerAlert({ children, width, hideCancel, cancelText, confirmText, showIcon, classNames, ...props }: BannerAlertProps): import("react").JSX.Element;
6
+ //#endregion
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{RoundedButton as t}from"../rounded-button/RoundedButton.js";import{AlertCloseIcon as n,AlertTickIcon as r}from"./AlertIcons.js";import{alertSlotClass as i}from"./types.js";import{AlertModal as a}from"./AlertModal.js";import{useAlertGlitch as o}from"./useAlertGlitch.js";import{Fragment as s,jsx as c,jsxs as l}from"react/jsx-runtime";function u({children:e,width:t=`30em`,hideCancel:n=!1,cancelText:r=`取消`,confirmText:i=`确认`,showIcon:o=!0,classNames:s,...l}){return/* @__PURE__ */ c(a,{...l,width:t,hideCancel:n,classNames:s,popupClassName:`ef-banner-alert`,backdropClassName:`ef-banner-alert-backdrop`,children:t=>/* @__PURE__ */ c(d,{...t,hideCancel:n,cancelText:r,confirmText:i,showIcon:o,classNames:s,children:e})})}function d({open:a,busy:u,cancelRef:d,confirmRef:f,cancel:p,confirm:m,hideCancel:h,cancelText:g,confirmText:_,showIcon:v,classNames:y,children:b}){let{contentRef:x,actionsRef:S}=o(a);return/* @__PURE__ */ l(s,{children:[/* @__PURE__ */ l(`div`,{"aria-hidden":`true`,className:`ef-banner-alert__banner`,children:[/* @__PURE__ */ c(`span`,{}),/* @__PURE__ */ c(`span`,{})]}),/* @__PURE__ */ c(`div`,{ref:x,className:e(`ef-banner-alert__content`,i(y?.content,a)),children:/* @__PURE__ */ c(`div`,{className:`ef-banner-alert__body`,children:b})}),/* @__PURE__ */ l(`div`,{ref:S,className:`ef-banner-alert__actions`,"data-hide-cancel":h?``:void 0,children:[!h&&/* @__PURE__ */ c(t,{ref:d,variant:`default`,text:g,showIcon:v,disabled:u,onClick:p,icon:/* @__PURE__ */ c(n,{}),className:`ef-banner-alert__button`}),/* @__PURE__ */ c(t,{ref:f,variant:`primary`,text:_,showIcon:v,disabled:u,loading:u,onClick:m,icon:/* @__PURE__ */ c(r,{}),className:`ef-banner-alert__button`})]})]})}export{u as BannerAlert};
@@ -0,0 +1,3 @@
1
+
2
+ import { BannerAlert, BannerAlertProps } from "./BannerAlert.js";
3
+ export { BannerAlert, type BannerAlertProps };
@@ -0,0 +1,48 @@
1
+
2
+ import { CSSProperties, ComponentProps, ReactElement, ReactNode, RefObject } from "react";
3
+ import { Dialog } from "@base-ui/react/dialog";
4
+ //#region src/game/banner-alert/types.d.ts
5
+ type PopupProps = ComponentProps<typeof Dialog.Popup>;
6
+ type PortalProps = ComponentProps<typeof Dialog.Portal>;
7
+ export type AlertAction = () => boolean | void | PromiseLike<boolean | void>;
8
+ export type AlertClassName = string | ((open: boolean) => string);
9
+ export type AlertClassNames = {
10
+ backdrop?: AlertClassName;
11
+ alert?: AlertClassName;
12
+ content?: AlertClassName;
13
+ };
14
+ export type AlertModalProps = Omit<ComponentProps<"div">, "title" | "children" | "onClose" | "onCancel" | "style"> & {
15
+ trigger?: ReactElement<Record<string, unknown>>;
16
+ open?: boolean;
17
+ defaultOpen?: boolean;
18
+ onOpenChange?: (open: boolean) => void;
19
+ title: ReactNode;
20
+ description?: ReactNode;
21
+ dismissible?: boolean;
22
+ keyboardCloseable?: boolean;
23
+ hideCancel?: boolean;
24
+ cancelText?: string;
25
+ confirmText?: string;
26
+ loading?: boolean;
27
+ showIcon?: boolean;
28
+ width?: CSSProperties["width"];
29
+ height?: CSSProperties["height"];
30
+ classNames?: AlertClassNames;
31
+ onConfirm?: AlertAction;
32
+ onCancel?: AlertAction;
33
+ onDismiss?: AlertAction;
34
+ onClose?: AlertAction;
35
+ initialFocus?: PopupProps["initialFocus"];
36
+ finalFocus?: PopupProps["finalFocus"];
37
+ keepMounted?: boolean;
38
+ /**
39
+ * 是不是模态。默认是。传 `false` 时不锁焦点、不锁页面滚动,页面的其余部分照常能用——
40
+ * 配上 `container` 可以把弹窗嵌在页面的一块区域里展示。
41
+ */
42
+ modal?: boolean;
43
+ /** 弹层挂到哪个元素里。默认挂在 `<body>` 下 */
44
+ container?: PortalProps["container"];
45
+ children?: ReactNode;
46
+ };
47
+ //#endregion
48
+ export {};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import"@base-ui/react/dialog";function e(e,t){return typeof e==`function`?e(t):e}export{e as alertSlotClass};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{useCallback as e,useLayoutEffect as t,useRef as n,useState as r}from"react";function i({open:i,defaultOpen:a=!1,onOpenChange:o,loading:s=!1,onConfirm:c,onCancel:l,onDismiss:u,onClose:d}){let[f,p]=r(a),[m,h]=r(!1),g=i??f,_=n({open:g,loading:s,mounted:!0,locked:!1,session:0});t(()=>{let e=_.current;return e.mounted=!0,()=>{e.mounted=!1,e.locked=!1,e.session+=1}},[]),t(()=>{_.current.loading=s,_.current.open!==g&&(_.current.open=g,_.current.session+=1,_.current.locked=!1,h(!1))},[g,s]);let v=e(e=>{i===void 0&&p(e),o?.(e)},[i,o]),y=e(async e=>{let t=_.current;if(!t.open||!t.mounted||t.loading||t.locked)return;t.locked=!0,h(!0);let n=t.session,r=()=>_.current.mounted&&_.current.open&&_.current.session===n;try{let t={confirm:c,cancel:l,dismiss:u,close:void 0}[e];if(await t?.()===!1||!r())return;await d?.()!==!1&&r()&&v(!1)}catch{}finally{r()&&(_.current.locked=!1,h(!1))}},[c,l,u,d,v]);return{open:g,busy:s||m,updateOpen:v,run:y}}export{i as useAlertActions};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{useLayoutEffect as e,useRef as t}from"react";const n=[0,1,1,0,0,1,1,0,0,1],r=[0,.48,.82,.85,.87,.9,.92,.95,.97,1],i=n.map((e,t)=>({opacity:e,offset:r[t]}));function a(n){let r=t(null),a=t(null);return e(()=>{if(!n)return;let e=[r.current,a.current].filter(e=>e!==null),t=window.matchMedia?.(`(prefers-reduced-motion: reduce)`),o=e.flatMap(e=>{if(e.style.removeProperty(`--ef-game-alert-exit-opacity`),e.style.opacity=`1`,t?.matches||typeof e.animate!=`function`)return[];e.style.opacity=`0`;let n=e.animate(i,{duration:205,easing:`ease-out`,fill:`both`});return n.onfinish=()=>{e.style.opacity=`1`,n.cancel()},[{node:e,animation:n}]}),s=()=>{for(let{node:e,animation:t}of o)e.style.opacity=`1`,t.cancel()},c=()=>{t?.matches&&s()};return t?.addEventListener(`change`,c),()=>{t?.removeEventListener(`change`,c);for(let{node:e,animation:t}of o)e.style.setProperty(`--ef-game-alert-exit-opacity`,getComputedStyle(e).opacity),t.cancel(),e.style.opacity=`1`}},[n]),{contentRef:r,actionsRef:a}}export{a as useAlertGlitch};
@@ -0,0 +1,7 @@
1
+
2
+ import { AlertModalProps } from "../banner-alert/types.js";
3
+ //#region src/game/full-width-alert/FullWidthAlert.d.ts
4
+ export type FullWidthAlertProps = Omit<AlertModalProps, "width">;
5
+ /** 横贯视口的确认面板,底部按钮突出于面板下沿。 */
6
+ export declare function FullWidthAlert({ hideCancel, cancelText, confirmText, showIcon, height, classNames, children, ...props }: FullWidthAlertProps): import("react").JSX.Element;
7
+ //#endregion
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{RoundedButton as t}from"../rounded-button/RoundedButton.js";import{AlertCloseIcon as n,AlertTickIcon as r}from"../banner-alert/AlertIcons.js";import{alertSlotClass as i}from"../banner-alert/types.js";import{AlertModal as a}from"../banner-alert/AlertModal.js";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";import{ScrollArea as l}from"@base-ui/react/scroll-area";function u({hideCancel:u=!1,cancelText:d=`取消`,confirmText:f=`确认`,showIcon:p=!0,height:m=`auto`,classNames:h,children:g,..._}){return/* @__PURE__ */ s(a,{..._,hideCancel:u,height:m,classNames:h,popupClassName:`ef-full-width-alert`,backdropClassName:`ef-full-width-alert-backdrop`,viewportClassName:`ef-full-width-alert-viewport`,children:({open:a,busy:m,cancelRef:_,confirmRef:v,cancel:y,confirm:b})=>/* @__PURE__ */ c(o,{children:[/* @__PURE__ */ c(`div`,{"aria-hidden":`true`,className:`ef-full-width-alert-decoration`,children:[/* @__PURE__ */ s(`span`,{className:`ef-full-width-alert-logo`}),/* @__PURE__ */ s(`span`,{className:`ef-full-width-alert-color-bar`}),/* @__PURE__ */ c(`div`,{className:`ef-full-width-alert-banner`,children:[/* @__PURE__ */ s(`span`,{className:`ef-full-width-alert-banner-left`}),/* @__PURE__ */ s(`span`,{className:`ef-full-width-alert-banner-right`})]})]}),/* @__PURE__ */ s(`div`,{className:e(`ef-full-width-alert-content`,i(h?.content,a)),children:/* @__PURE__ */ c(l.Root,{className:`ef-full-width-alert-scroll-area`,children:[/* @__PURE__ */ s(l.Viewport,{className:`ef-full-width-alert-viewport-content`,style:{overflowX:`hidden`},render:(e,t)=>/* @__PURE__ */ s(`div`,{...e,role:t.hasOverflowY?`region`:`presentation`,"aria-label":t.hasOverflowY?`内容`:void 0,tabIndex:t.hasOverflowY?0:-1}),children:/* @__PURE__ */ s(l.Content,{className:`ef-full-width-alert-body`,children:g})}),/* @__PURE__ */ s(l.Scrollbar,{orientation:`vertical`,className:`ef-full-width-alert-scrollbar`,children:/* @__PURE__ */ s(l.Thumb,{className:`ef-full-width-alert-thumb`})})]})}),/* @__PURE__ */ c(`div`,{className:`ef-full-width-alert-actions`,children:[!u&&/* @__PURE__ */ c(`div`,{className:`ef-full-width-alert-action`,children:[/* @__PURE__ */ s(`span`,{"aria-hidden":`true`,className:`ef-full-width-alert-action-backing`}),/* @__PURE__ */ s(t,{ref:_,variant:`default`,text:d,showIcon:p,disabled:m,onClick:y,icon:/* @__PURE__ */ s(n,{}),className:`ef-full-width-alert-button`})]}),/* @__PURE__ */ c(`div`,{className:`ef-full-width-alert-action`,children:[/* @__PURE__ */ s(`span`,{"aria-hidden":`true`,className:`ef-full-width-alert-action-backing`}),/* @__PURE__ */ s(t,{ref:v,variant:`primary`,text:f,showIcon:p,loading:m,disabled:m,onClick:b,icon:/* @__PURE__ */ s(r,{}),className:`ef-full-width-alert-button`})]})]})]})})}export{u as FullWidthAlert};
@@ -0,0 +1,3 @@
1
+
2
+ import { FullWidthAlert, FullWidthAlertProps } from "./FullWidthAlert.js";
3
+ export { FullWidthAlert, type FullWidthAlertProps };
@@ -0,0 +1,48 @@
1
+
2
+ import { ItemIconImageRenderer, ItemIconLayers } from "../item-icon/types.js";
3
+ import "../item-icon/index.js";
4
+ import { CSSProperties, ReactNode } from "react";
5
+ //#region src/game/item-card/ItemCard.d.ts
6
+ export type ItemCardKind = "weapon" | "item" | "enemy" | "";
7
+ export type ItemCardVariant = "banner" | "inventory";
8
+ export type ItemCardSelectionAction = {
9
+ onSelect: () => void;
10
+ ariaLabel?: string;
11
+ selected?: boolean;
12
+ disabled?: boolean;
13
+ disabledReason?: string;
14
+ };
15
+ export type ItemCardLinkProps = {
16
+ href: string;
17
+ children: ReactNode;
18
+ className: string;
19
+ "aria-label": string;
20
+ "data-item-tooltip-id"?: string;
21
+ };
22
+ export type ItemCardLinkRenderer = (props: ItemCardLinkProps) => ReactNode;
23
+ export type ItemCardProps = {
24
+ kind: ItemCardKind;
25
+ name: string;
26
+ imageUrl: string;
27
+ rarity: number;
28
+ itemId?: string;
29
+ /** 实际链接地址;组件不转换 Wiki 文章标题。 */
30
+ href?: string;
31
+ variant?: ItemCardVariant;
32
+ count?: number;
33
+ showName?: boolean;
34
+ className?: string;
35
+ style?: CSSProperties;
36
+ icon?: ItemIconLayers;
37
+ action?: ItemCardSelectionAction;
38
+ badges?: ReactNode;
39
+ ariaLabel?: string;
40
+ fallback?: ReactNode;
41
+ renderImage?: ItemIconImageRenderer;
42
+ renderLink?: ItemCardLinkRenderer;
43
+ renderName?: (name: string) => ReactNode;
44
+ renderCount?: (count: number) => ReactNode;
45
+ };
46
+ /** Wiki 物品卡片:名称横条或库存数量横条,共用完整图层图标。 */
47
+ export declare const ItemCard: import("react").MemoExoticComponent<({ kind, name, imageUrl, rarity, itemId, href, variant, count, showName, className, style, icon, action, badges, ariaLabel, fallback, renderImage, renderLink, renderName, renderCount }: ItemCardProps) => string | number | bigint | boolean | import("react").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | Iterable<ReactNode> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined> | null | undefined>;
48
+ //#endregion
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{EMPTY_ITEM_ICON_LAYERS as t}from"../item-icon/helpers.js";import{ItemIcon as n}from"../item-icon/ItemIcon.js";import{memo as r}from"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";const o={weapon:`武器`,item:`物品`,enemy:`敌人`};function s(e){return e===`weapon`||e===`item`||e===`enemy`}function c(e){return Math.min(Math.max(Math.trunc(e),1),6)}function l(e){let t=0;for(let n of e)t+=(n.codePointAt(0)??0)<11904?.5:1;return t>0?`clamp(9px, calc(100cqw / ${t}), 14px)`:void 0}const u=/* @__PURE__ */ r(function({kind:r,name:u,imageUrl:d,rarity:f,itemId:p,href:m,variant:h=`banner`,count:g=0,showName:_=!0,className:v,style:y,icon:b,action:x,badges:S,ariaLabel:C,fallback:w,renderImage:T,renderLink:E,renderName:D,renderCount:O}){if(!s(r))return null;let k=Number.isFinite(f)&&f>0&&(b?.iconShowRarity??!0),A=h===`inventory`,j={...t,...b,iconUrl:d},M=C||u||o[r],N=D?D(u):u||`—`,P=/* @__PURE__ */ a(`div`,{className:`ef-item-card-tile`,children:[/* @__PURE__ */ i(`span`,{"aria-hidden":`true`,className:`ef-item-card-background`}),/* @__PURE__ */ i(`div`,{className:`ef-item-card-art`,children:/* @__PURE__ */ i(n,{layers:j,alt:u,className:`ef-item-card-icon`,renderImage:T,fallback:w===void 0?/* @__PURE__ */ i(`span`,{className:`ef-item-card-fallback`,children:`NO IMAGE`}):w})}),S?/* @__PURE__ */ i(`div`,{className:`ef-item-card-badges`,children:S}):null,/* @__PURE__ */ a(`div`,{className:`ef-item-card-strip`,children:[/* @__PURE__ */ i(`span`,{"aria-hidden":`true`,className:`ef-item-card-edge`}),/* @__PURE__ */ i(`div`,{className:`ef-item-card-strip-content`,children:A?/* @__PURE__ */ i(`span`,{className:`ef-item-card-count`,children:O?O(g):g>0?g:`\xA0`}):/* @__PURE__ */ i(`span`,{className:`ef-item-card-name`,style:{fontSize:l(u)},title:u,children:_?N:`\xA0`})})]})]}),F=/* @__PURE__ */ a(`div`,{className:e(`ef-item-card`,v),style:y,"data-kind":r,"data-variant":h,"data-rarity":k?c(f):void 0,"data-item-tooltip-id":!x&&!m&&r===`item`?p:void 0,children:[P,A&&_&&/* @__PURE__ */ i(`span`,{className:`ef-item-card-caption`,title:u,children:N})]});if(x)return/* @__PURE__ */ a(`button`,{type:`button`,onClick:x.onSelect,disabled:x.disabled,"aria-pressed":x.selected,"aria-label":[x.ariaLabel||M,x.disabledReason].filter(Boolean).join(` · `),className:`ef-item-card-action`,"data-selected":x.selected?``:void 0,children:[F,x.disabledReason&&/* @__PURE__ */ i(`span`,{className:`ef-item-card-disabled-reason`,children:x.disabledReason})]});if(m){let e={href:m,children:F,className:`ef-item-card-link`,"aria-label":M,"data-item-tooltip-id":r===`item`?p:void 0};return E?E(e):/* @__PURE__ */ i(`a`,{...e})}return F});export{u as ItemCard};
@@ -0,0 +1,3 @@
1
+
2
+ import { ItemCard, ItemCardKind, ItemCardLinkProps, ItemCardLinkRenderer, ItemCardProps, ItemCardSelectionAction, ItemCardVariant } from "./ItemCard.js";
3
+ export { ItemCard, type ItemCardKind, type ItemCardLinkProps, type ItemCardLinkRenderer, type ItemCardProps, type ItemCardSelectionAction, type ItemCardVariant };
@@ -0,0 +1,31 @@
1
+
2
+ import { ItemTooltipCardProps, ItemTooltipItem } from "../item-tooltip-card/types.js";
3
+ import "../item-tooltip-card/index.js";
4
+ import { CSSProperties, HTMLAttributes, ReactNode, RefObject } from "react";
5
+ //#region src/game/item-hover-card/ItemHoverCard.d.ts
6
+ export type ItemHoverCardLayerProps = {
7
+ /** 由使用方的本地数据或缓存解析;组件不发请求。 */
8
+ resolveItem: (itemId: string, host: HTMLElement) => ItemTooltipItem | null | undefined;
9
+ root?: HTMLElement | Document;
10
+ rootRef?: RefObject<HTMLElement | null>;
11
+ disabled?: boolean;
12
+ /** 默认只在 768px 以上、支持精细指针悬停的设备启用。 */
13
+ disableOnMobile?: boolean;
14
+ openDelay?: number;
15
+ closeDelay?: number;
16
+ gap?: number;
17
+ width?: CSSProperties["width"];
18
+ className?: string;
19
+ style?: CSSProperties;
20
+ cardProps?: Omit<ItemTooltipCardProps, "item">;
21
+ onOpenChange?: (open: boolean, itemId: string | null) => void;
22
+ };
23
+ /** 一个监听层为网格内所有 data-item-tooltip-id 提供物品预览。 */
24
+ export declare function ItemHoverCardLayer({ resolveItem, root, rootRef, disabled, disableOnMobile, openDelay, closeDelay, gap, width, className, style, cardProps, onOpenChange }: ItemHoverCardLayerProps): import("react").JSX.Element | null;
25
+ export type ItemHoverCardProps = Omit<ItemHoverCardLayerProps, "resolveItem" | "root" | "rootRef"> & {
26
+ item: ItemTooltipItem;
27
+ children: ReactNode;
28
+ triggerProps?: Omit<HTMLAttributes<HTMLSpanElement>, "children">;
29
+ };
30
+ export declare function ItemHoverCard({ item, children, triggerProps, ...layerProps }: ItemHoverCardProps): import("react").JSX.Element;
31
+ //#endregion
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{cn as e}from"../../lib/cn.js";import{usePortalScope as t}from"../../hooks/usePortalScope.js";import{ItemTooltipCard as n}from"../item-tooltip-card/ItemTooltipCard.js";import{bindItemHoverEvents as r}from"./events.js";import{useCallback as i,useEffect as a,useId as o,useLayoutEffect as s,useRef as c,useState as l}from"react";import{jsx as u,jsxs as d}from"react/jsx-runtime";import{Popover as f}from"@base-ui/react/popover";import{flushSync as p}from"react-dom";function m({resolveItem:e,root:t,rootRef:n,disabled:o=!1,disableOnMobile:d=!0,openDelay:f=180,closeDelay:p=160,gap:m=8,width:g=320,className:_,style:v,cardProps:y,onOpenChange:b}){let[x,S]=l(null),C=c(null),w=c(null),T=c(null),E=c(e),D=c({root:t,rootRef:n}),O=c(b);s(()=>{E.current=e,D.current={root:t,rootRef:n},O.current=b});let k=i(()=>w.current?.close(),[]);a(()=>{let e=o?null:n?.current??t??document,i=T.current,a=e?e.ownerDocument??e:null,s=n?n.current:t??e;if(x&&!s?.contains(x.host)&&w.current?.close(),i&&i.root===a&&i.disableOnMobile===d&&i.openDelay===f&&i.closeDelay===p||(i?.dispose(),T.current=null,!e))return;let c=(e.ownerDocument??e).defaultView.matchMedia(`(min-width: 768px) and (hover: hover) and (pointer: fine)`),l=()=>{w.current?.close(),w.current?.dispose(),w.current=null,(!d||c.matches)&&(w.current=r({root:e,rootOf:()=>{let e=D.current;return e.rootRef?e.rootRef.current:e.root??a},anchorOf:e=>{let t=e.dataset.itemTooltipId;return t&&E.current(t,e)?{host:e,itemId:t}:null},openDelay:f,closeDelay:p},S,()=>C.current))};l(),c.addEventListener(`change`,l),T.current={root:a,disableOnMobile:d,openDelay:f,closeDelay:p,dispose:()=>{c.removeEventListener(`change`,l),w.current?.close(),w.current?.dispose(),w.current=null}}}),a(()=>()=>{T.current?.dispose(),T.current=null},[]);let A=x?.host.dataset.itemTooltipId,j=!o&&x&&A?e(A,x.host):null,M=j?A??null:null;return a(()=>{O.current?.(!!M,M)},[M]),!x||!j?null:/* @__PURE__ */ u(h,{anchor:x,item:j,panelRef:C,close:k,dismiss:e=>w.current?.dismiss(e),gap:m,width:g,className:_,style:v,cardProps:y})}function h({anchor:r,item:i,panelRef:c,close:l,dismiss:d,gap:m,width:h,className:g,style:_,cardProps:v}){let y=o(),{anchorRef:b,portalRef:x}=t();return s(()=>{let e=r.host.ownerDocument,t=[`aria-controls`,`aria-expanded`,`aria-haspopup`],n=null,i=[],a=()=>{n&&t.forEach((e,t)=>{let r=i[t];r==null?n?.removeAttribute(e):n?.setAttribute(e,r)})},o=()=>{let o=r.host.contains(e.activeElement)?e.activeElement:r.host;o!==n&&(a(),n=o,i=t.map(e=>n.getAttribute(e)),n.setAttribute(`aria-controls`,y),n.setAttribute(`aria-expanded`,`true`),n.setAttribute(`aria-haspopup`,`dialog`))};o();let s=e=>{if(e.defaultPrevented)return;let t=c.current?.querySelector(`a[href],button:not(:disabled),[tabindex='0']`);e.key===`Tab`&&!t?p(l):e.key===`ArrowDown`&&t&&(e.preventDefault(),t.focus({preventScroll:!0}))};return r.host.addEventListener(`keydown`,s),r.host.addEventListener(`focusin`,o),()=>{r.host.removeEventListener(`keydown`,s),r.host.removeEventListener(`focusin`,o),a()}},[r.host,l,y,c]),a(()=>{let e=typeof IntersectionObserver>`u`?null:new IntersectionObserver(e=>{e.some(e=>!e.isIntersecting)&&l()});return e?.observe(r.host),()=>e?.disconnect()},[r.host,l]),/* @__PURE__ */ u(f.Root,{open:!0,onOpenChange:(e,t)=>{e||(t.reason===`focus-out`?t.cancel():d(t.reason===`escape-key`))},children:/* @__PURE__ */ u(f.Portal,{ref:e=>{b(r.host),x(e)},container:r.host.closest(`dialog,[role='dialog'],[role='alertdialog']`)??void 0,children:/* @__PURE__ */ u(f.Positioner,{anchor:r.host,positionMethod:`fixed`,side:`right`,align:`start`,sideOffset:m,collisionBoundary:[],collisionPadding:8,collisionAvoidance:{side:`flip`,align:`shift`},className:`ef-item-hover-positioner`,style:{width:h,..._},children:/* @__PURE__ */ u(f.Popup,{ref:c,id:y,"aria-label":i.name,initialFocus:!1,finalFocus:!1,"data-item-tooltip-panel":``,className:e(`ef-item-hover-panel`,g),children:/* @__PURE__ */ u(n,{...v,item:i})})})})})}function g({item:t,children:n,triggerProps:r,...i}){let a=c(null),s=o();return/* @__PURE__ */ d(`span`,{...r,className:e(`ef-item-hover-trigger`,r?.className),ref:a,"data-item-tooltip-id":s,children:[n,/* @__PURE__ */ u(m,{...i,rootRef:a,resolveItem:()=>t})]})}export{g as ItemHoverCard,m as ItemHoverCardLayer};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ function e(e,t,n){let r=e.root.ownerDocument??e.root,i=r.defaultView,a=null,o=null,s=null,c=null,l,u,d=!1,f,p=null,m=()=>{i.clearTimeout(l),i.clearTimeout(u),l=u=void 0},h=()=>{m(),a=null,f=void 0,p=null,d=!1,M(),t(null)},g=e=>e instanceof Node&&!!n()?.contains(e),_=e=>g(e)||e instanceof Node&&!!a?.contains(e),v=t=>{if(!(t instanceof Element)||g(t)||t.closest(`[inert], [aria-disabled='true'], :disabled`))return null;let n=t.closest(`[data-item-tooltip-id]`),r=e.rootOf?e.rootOf():e.root;return!n||!r?.contains(n)||n.closest(`[inert], [aria-disabled='true'], :disabled`)?null:e.anchorOf(n)?n:null},y=(n,r,s)=>{n!==o&&(o=null,i.clearTimeout(u),u=void 0,n===a&&d?(p=s,f!==n.dataset.itemTooltipId&&(f=n.dataset.itemTooltipId,t(e.anchorOf(n)))):n===a&&l!==void 0&&r>0||(m(),a=n,f=n.dataset.itemTooltipId,p=s,d=!1,j(),t(null),l=i.setTimeout(()=>{l=void 0;let r=n.isConnected&&v(s)===n?e.anchorOf(n):null;if(a===n){if(!r)return h();d=!0,f=n.dataset.itemTooltipId,t(r)}},Math.max(0,r))))},b=()=>{_(c)||_(r.activeElement)?(i.clearTimeout(u),u=void 0):(m(),u=i.setTimeout(h,Math.max(0,e.closeDelay)))},x=(e,t)=>{e instanceof Node&&o?.contains(e)&&!(t instanceof Node&&o.contains(t))&&(o=null)},S=t=>{if(t.pointerType===`touch`)return;if(c=t.target,g(t.target))return m();let n=v(t.target);n&&y(n,e.openDelay,t.target)},C=e=>{e.pointerType!==`touch`&&(c=e.relatedTarget,x(e.target,e.relatedTarget),a&&_(e.target)&&!_(e.relatedTarget)&&b())},w=e=>{if(g(e.target))return m();let t=v(e.target);t&&(s=e.target instanceof HTMLElement?e.target:t,y(t,0,e.target))},T=e=>{x(e.target,e.relatedTarget),a&&_(e.target)&&!_(e.relatedTarget)&&b()},E=e=>{a&&!g(e.target)&&h()},D=(e=!1)=>{let t=e=>!(!e?.isConnected||e.closest(`[hidden],[inert],[aria-disabled='true'],:disabled`)),n=e&&g(r.activeElement)&&a?s&&t(s)&&a.contains(s)?s:Array.from(a.querySelectorAll(`a[href],button:not(:disabled),[tabindex='0']`)).find(t)??(t(a)&&a.matches(`a[href],button,[tabindex]`)?a:null)??(t(a.closest(`[role='dialog']`))?a.closest(`[role='dialog']`):null):null;o=a,h(),n?.isConnected&&n.focus({preventScroll:!0})},O=[[`pointerover`,S],[`pointerout`,C],[`focusin`,w],[`focusout`,T]];for(let[e,t]of O)r.addEventListener(e,t);let k=new MutationObserver(()=>{if(a){if(v(p)!==a||!a.isConnected)return D(!0);if(d&&f!==a.dataset.itemTooltipId){f=a.dataset.itemTooltipId;let n=e.anchorOf(a);n?t(n):D(!0)}}}),A=!1;function j(){A||(A=!0,k.observe(r,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[`data-item-tooltip-id`,`disabled`,`inert`,`aria-disabled`]}),i.addEventListener(`scroll`,E,!0),i.addEventListener(`resize`,h))}function M(){A&&(A=!1,k.disconnect(),i.removeEventListener(`scroll`,E,!0),i.removeEventListener(`resize`,h))}return{close:h,dismiss:D,dispose(){m(),M();for(let[e,t]of O)r.removeEventListener(e,t)}}}export{e as bindItemHoverEvents};
@@ -0,0 +1,3 @@
1
+
2
+ import { ItemHoverCard, ItemHoverCardLayer, ItemHoverCardLayerProps, ItemHoverCardProps } from "./ItemHoverCard.js";
3
+ export { ItemHoverCard, ItemHoverCardLayer, type ItemHoverCardLayerProps, type ItemHoverCardProps };
@@ -0,0 +1,5 @@
1
+
2
+ import { ItemIconProps } from "./types.js";
3
+ //#region src/game/item-icon/ItemIcon.d.ts
4
+ export declare function ItemIcon({ layers, alt, className, style, fallback, loading, renderImage }: ItemIconProps): import("react").JSX.Element;
5
+ //#endregion