@torpor/ui 0.3.7 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/README.md +83 -7
  2. package/dist/Accordion/Accordion.torp +43 -165
  3. package/dist/Accordion/AccordionContent.torp +6 -6
  4. package/dist/Accordion/AccordionHeader.torp +7 -11
  5. package/dist/Accordion/AccordionItem.torp +24 -24
  6. package/dist/Accordion/AccordionTrigger.torp +17 -8
  7. package/dist/Accordion/AccordionTypes.ts +6 -6
  8. package/dist/Accordion/index.d.ts +23 -25
  9. package/dist/Accordion/index.js +6 -22
  10. package/dist/Breadcrumb/Breadcrumb.torp +12 -10
  11. package/dist/Breadcrumb/BreadcrumbItem.torp +6 -6
  12. package/dist/Breadcrumb/BreadcrumbList.torp +21 -0
  13. package/dist/Breadcrumb/BreadcrumbSeparator.torp +4 -4
  14. package/dist/Breadcrumb/index.d.ts +39 -15
  15. package/dist/Breadcrumb/index.js +5 -14
  16. package/dist/Calendar/Calendar.torp +163 -156
  17. package/dist/Calendar/CalendarDay.torp +91 -45
  18. package/dist/Calendar/CalendarDayHeader.torp +36 -0
  19. package/dist/Calendar/CalendarGrid.torp +104 -0
  20. package/dist/Calendar/CalendarGridHeader.torp +43 -0
  21. package/dist/Calendar/CalendarHeader.torp +48 -0
  22. package/dist/Calendar/CalendarHeaderTrigger.torp +54 -0
  23. package/dist/Calendar/CalendarTypes.ts +25 -4
  24. package/dist/Calendar/buildDays.ts +54 -0
  25. package/dist/Calendar/index.d.ts +191 -5
  26. package/dist/Calendar/index.js +8 -10
  27. package/dist/Carousel/Carousel.torp +180 -0
  28. package/dist/Carousel/CarouselIndicators.torp +65 -0
  29. package/dist/Carousel/CarouselNext.torp +43 -0
  30. package/dist/Carousel/CarouselPrevious.torp +44 -0
  31. package/dist/Carousel/CarouselSlide.torp +57 -0
  32. package/dist/Carousel/CarouselTypes.ts +28 -0
  33. package/dist/Carousel/index.d.ts +147 -0
  34. package/dist/Carousel/index.js +6 -0
  35. package/dist/Charts/BarChart.torp +70 -0
  36. package/dist/Charts/Chart.torp +120 -0
  37. package/dist/Charts/ChartBars.torp +78 -0
  38. package/dist/Charts/ChartColumns.torp +66 -0
  39. package/dist/Charts/ChartGrid.torp +54 -0
  40. package/dist/Charts/ChartLines.torp +60 -0
  41. package/dist/Charts/ChartTypes.ts +25 -0
  42. package/dist/Charts/ChartXAxis.torp +83 -0
  43. package/dist/Charts/ChartYAxis.torp +105 -0
  44. package/dist/Charts/ColumnChart.torp +70 -0
  45. package/dist/{Chart → Charts}/GridLines.torp +7 -4
  46. package/dist/Charts/LineChart.torp +73 -0
  47. package/dist/{Chart → Charts}/PieChart.torp +14 -20
  48. package/dist/{Chart → Charts}/ScatterChart.torp +45 -38
  49. package/dist/{Chart → Charts}/SparkLine.torp +16 -19
  50. package/dist/{Chart → Charts}/XAxis.torp +18 -12
  51. package/dist/{Chart → Charts}/YAxis.torp +15 -9
  52. package/dist/Charts/index.d.ts +469 -0
  53. package/dist/Charts/index.js +17 -0
  54. package/dist/ColorPicker/ColorPalette.torp +154 -0
  55. package/dist/ColorPicker/ColorPicker.torp +157 -0
  56. package/dist/ColorPicker/index.d.ts +85 -0
  57. package/dist/ColorPicker/index.js +3 -0
  58. package/dist/ComboBox/ComboBox.torp +205 -0
  59. package/dist/ComboBox/ComboBoxContent.torp +112 -0
  60. package/dist/ComboBox/ComboBoxInput.torp +145 -0
  61. package/dist/ComboBox/ComboBoxTrigger.torp +49 -0
  62. package/dist/ComboBox/ComboBoxTypes.ts +39 -0
  63. package/dist/ComboBox/index.d.ts +152 -0
  64. package/dist/ComboBox/index.js +6 -0
  65. package/dist/CommandPalette/CommandPalette.torp +220 -0
  66. package/dist/CommandPalette/CommandTypes.ts +14 -0
  67. package/dist/CommandPalette/index.d.ts +45 -0
  68. package/dist/CommandPalette/index.js +2 -0
  69. package/dist/Contextual/Contextual.torp +39 -52
  70. package/dist/Contextual/ContextualContent.torp +29 -73
  71. package/dist/Contextual/ContextualHover.torp +112 -0
  72. package/dist/Contextual/ContextualTrigger.torp +31 -42
  73. package/dist/Contextual/ContextualTypes.ts +5 -18
  74. package/dist/Contextual/index.d.ts +44 -27
  75. package/dist/Contextual/index.js +5 -14
  76. package/dist/DataGrid/DataGrid.torp +496 -0
  77. package/dist/DataGrid/DataGridTypes.ts +25 -0
  78. package/dist/DataGrid/index.d.ts +90 -0
  79. package/dist/DataGrid/index.js +3 -0
  80. package/dist/DataGrid/sortRows.ts +32 -0
  81. package/dist/DatePicker/DatePicker.torp +222 -0
  82. package/dist/DatePicker/DatePickerHeader.torp +20 -0
  83. package/dist/DatePicker/index.d.ts +55 -0
  84. package/dist/DatePicker/index.js +2 -0
  85. package/dist/DateRangePicker/DateRangePicker.torp +311 -0
  86. package/dist/DateRangePicker/DateRangePickerDay.torp +137 -0
  87. package/dist/DateRangePicker/DateRangePickerTypes.ts +21 -0
  88. package/dist/DateRangePicker/index.d.ts +76 -0
  89. package/dist/DateRangePicker/index.js +3 -0
  90. package/dist/Dialog/Dialog.torp +33 -30
  91. package/dist/Dialog/DialogBody.torp +5 -9
  92. package/dist/Dialog/DialogButton.torp +14 -11
  93. package/dist/Dialog/DialogFooter.torp +3 -7
  94. package/dist/Dialog/DialogHeader.torp +6 -10
  95. package/dist/Dialog/DialogTypes.ts +2 -2
  96. package/dist/Dialog/index.d.ts +28 -26
  97. package/dist/Dialog/index.js +6 -22
  98. package/dist/Disclosure/Disclosure.torp +18 -18
  99. package/dist/Disclosure/DisclosureContent.torp +5 -6
  100. package/dist/Disclosure/DisclosureHeader.torp +7 -11
  101. package/dist/Disclosure/DisclosureTrigger.torp +4 -5
  102. package/dist/Disclosure/DisclosureTypes.ts +1 -1
  103. package/dist/Disclosure/index.d.ts +14 -16
  104. package/dist/Disclosure/index.js +5 -18
  105. package/dist/Drawer/Drawer.torp +21 -51
  106. package/dist/Drawer/DrawerContent.torp +67 -13
  107. package/dist/Drawer/DrawerOverlay.torp +4 -4
  108. package/dist/Drawer/DrawerTrigger.torp +16 -4
  109. package/dist/Drawer/DrawerTypes.ts +4 -1
  110. package/dist/Drawer/index.d.ts +16 -20
  111. package/dist/Drawer/index.js +5 -18
  112. package/dist/FocusGroup/FocusGroup.torp +70 -0
  113. package/dist/FocusGroup/FocusGroupButton.torp +59 -0
  114. package/dist/FocusGroup/FocusGroupTypes.ts +14 -0
  115. package/dist/FocusGroup/index.d.ts +44 -0
  116. package/dist/FocusGroup/index.js +3 -0
  117. package/dist/Form/CheckBox.torp +28 -20
  118. package/dist/Form/Field.torp +17 -17
  119. package/dist/Form/File.torp +31 -22
  120. package/dist/Form/FileDrop.torp +187 -0
  121. package/dist/Form/Form.torp +24 -22
  122. package/dist/Form/FormTypes.ts +2 -0
  123. package/dist/Form/FormValues.torp +37 -0
  124. package/dist/Form/Hidden.torp +4 -12
  125. package/dist/Form/Input.torp +38 -32
  126. package/dist/Form/Label.torp +3 -3
  127. package/dist/Form/Message.torp +13 -5
  128. package/dist/Form/MessageSummary.torp +39 -0
  129. package/dist/Form/Option.torp +11 -7
  130. package/dist/Form/Select.torp +32 -28
  131. package/dist/Form/TextArea.torp +35 -31
  132. package/dist/Form/Toggle.torp +109 -0
  133. package/dist/Form/index.d.ts +198 -77
  134. package/dist/Form/index.js +16 -46
  135. package/dist/ListBox/ListBox.torp +374 -0
  136. package/dist/ListBox/ListBoxItem.torp +131 -0
  137. package/dist/ListBox/ListBoxSeparator.torp +29 -0
  138. package/dist/ListBox/ListBoxTypes.ts +41 -0
  139. package/dist/ListBox/LoadedListBoxItems.torp +41 -0
  140. package/dist/ListBox/index.d.ts +136 -0
  141. package/dist/ListBox/index.js +4 -0
  142. package/dist/MaskedInput/MaskedInput.torp +143 -0
  143. package/dist/MaskedInput/index.d.ts +52 -0
  144. package/dist/MaskedInput/index.js +2 -0
  145. package/dist/Menu/Menu.torp +90 -70
  146. package/dist/Menu/MenuButton.torp +17 -10
  147. package/dist/Menu/MenuCheck.torp +22 -18
  148. package/dist/Menu/MenuGroup.torp +4 -4
  149. package/dist/Menu/MenuIndicator.torp +5 -13
  150. package/dist/Menu/MenuPopout.torp +20 -50
  151. package/dist/Menu/MenuPopoutContent.torp +15 -66
  152. package/dist/Menu/MenuPopoutTrigger.torp +19 -100
  153. package/dist/Menu/MenuRadio.torp +25 -26
  154. package/dist/Menu/MenuRadioGroup.torp +25 -68
  155. package/dist/Menu/MenuSeparator.torp +3 -2
  156. package/dist/Menu/MenuTypes.ts +12 -21
  157. package/dist/Menu/index.d.ts +45 -51
  158. package/dist/Menu/index.js +12 -46
  159. package/dist/MenuBar/MenuBar.torp +31 -83
  160. package/dist/MenuBar/MenuBarItem.torp +34 -55
  161. package/dist/MenuBar/MenuBarItemContent.torp +15 -101
  162. package/dist/MenuBar/MenuBarItemTrigger.torp +20 -55
  163. package/dist/MenuBar/MenuBarTypes.ts +13 -12
  164. package/dist/MenuBar/index.d.ts +17 -19
  165. package/dist/MenuBar/index.js +5 -18
  166. package/dist/Modal/Modal.torp +28 -48
  167. package/dist/Modal/ModalContent.torp +21 -44
  168. package/dist/Modal/ModalOverlay.torp +4 -4
  169. package/dist/Modal/ModalTrigger.torp +16 -32
  170. package/dist/Modal/ModalTypes.ts +6 -17
  171. package/dist/Modal/index.d.ts +17 -29
  172. package/dist/Modal/index.js +29 -28
  173. package/dist/Modal/index.js.map +1 -1
  174. package/dist/Modal/showPrompt.ts +2 -2
  175. package/dist/NavMenu/NavMenu.torp +22 -104
  176. package/dist/NavMenu/NavMenuButton.torp +10 -8
  177. package/dist/NavMenu/NavMenuElement.torp +6 -7
  178. package/dist/NavMenu/NavMenuGroup.torp +5 -5
  179. package/dist/NavMenu/NavMenuGroupHeader.torp +5 -8
  180. package/dist/NavMenu/NavMenuLink.torp +7 -10
  181. package/dist/NavMenu/NavMenuPopout.torp +16 -61
  182. package/dist/NavMenu/NavMenuPopoutContent.torp +14 -73
  183. package/dist/NavMenu/NavMenuPopoutTrigger.torp +47 -0
  184. package/dist/NavMenu/NavMenuSeparator.torp +3 -6
  185. package/dist/NavMenu/NavMenuTypes.ts +6 -15
  186. package/dist/NavMenu/index.d.ts +55 -55
  187. package/dist/NavMenu/index.js +11 -42
  188. package/dist/Notification/Notification.torp +12 -24
  189. package/dist/Notification/NotificationClose.torp +6 -3
  190. package/dist/Notification/NotificationContainer.torp +3 -7
  191. package/dist/Notification/NotificationContent.torp +3 -7
  192. package/dist/Notification/NotificationTypes.ts +1 -1
  193. package/dist/Notification/index.d.ts +15 -12
  194. package/dist/Notification/index.js +22 -32
  195. package/dist/Notification/index.js.map +1 -1
  196. package/dist/NumberInput/NumberInput.torp +255 -0
  197. package/dist/NumberInput/index.d.ts +44 -0
  198. package/dist/NumberInput/index.js +2 -0
  199. package/dist/Pagination/Pagination.torp +152 -0
  200. package/dist/Pagination/PaginationItem.torp +137 -0
  201. package/dist/Pagination/PaginationTypes.ts +22 -0
  202. package/dist/Pagination/buildPages.ts +61 -0
  203. package/dist/Pagination/index.d.ts +63 -0
  204. package/dist/Pagination/index.js +3 -0
  205. package/dist/Popover/Popover.torp +39 -52
  206. package/dist/Popover/PopoverContent.torp +27 -76
  207. package/dist/Popover/PopoverHover.torp +90 -0
  208. package/dist/Popover/PopoverTrigger.torp +17 -40
  209. package/dist/Popover/PopoverTypes.ts +5 -18
  210. package/dist/Popover/index.d.ts +40 -25
  211. package/dist/Popover/index.js +18 -18
  212. package/dist/Popover/index.js.map +1 -1
  213. package/dist/Progress/Progress.torp +88 -0
  214. package/dist/Progress/index.d.ts +37 -0
  215. package/dist/Progress/index.js +2 -0
  216. package/dist/Rating/Rating.torp +225 -0
  217. package/dist/Rating/index.d.ts +44 -0
  218. package/dist/Rating/index.js +2 -0
  219. package/dist/SegmentedControl/SegmentedControl.torp +233 -0
  220. package/dist/SegmentedControl/SegmentedControlTypes.ts +26 -0
  221. package/dist/SegmentedControl/SegmentedItem.torp +78 -0
  222. package/dist/SegmentedControl/index.d.ts +74 -0
  223. package/dist/SegmentedControl/index.js +3 -0
  224. package/dist/SelectBox/SelectBox.torp +190 -0
  225. package/dist/SelectBox/SelectBoxContent.torp +107 -0
  226. package/dist/SelectBox/SelectBoxTrigger.torp +141 -0
  227. package/dist/SelectBox/SelectBoxTypes.ts +33 -0
  228. package/dist/SelectBox/index.d.ts +112 -0
  229. package/dist/SelectBox/index.js +5 -0
  230. package/dist/Slider/Slider.torp +248 -0
  231. package/dist/Slider/index.d.ts +45 -0
  232. package/dist/Slider/index.js +2 -0
  233. package/dist/Splitter/Splitter.torp +156 -0
  234. package/dist/Splitter/SplitterHandle.torp +161 -0
  235. package/dist/Splitter/SplitterPane.torp +63 -0
  236. package/dist/Splitter/SplitterTypes.ts +31 -0
  237. package/dist/Splitter/index.d.ts +103 -0
  238. package/dist/Splitter/index.js +4 -0
  239. package/dist/Stepper/Stepper.torp +146 -0
  240. package/dist/Stepper/StepperMarker.torp +24 -0
  241. package/dist/Stepper/StepperNext.torp +44 -0
  242. package/dist/Stepper/StepperPrevious.torp +44 -0
  243. package/dist/Stepper/StepperStep.torp +90 -0
  244. package/dist/Stepper/StepperTypes.ts +30 -0
  245. package/dist/Stepper/index.d.ts +149 -0
  246. package/dist/Stepper/index.js +6 -0
  247. package/dist/TabGroup/TabContent.torp +6 -6
  248. package/dist/TabGroup/TabGroup.torp +97 -113
  249. package/dist/TabGroup/TabGroupTypes.ts +3 -3
  250. package/dist/TabGroup/TabHeader.torp +23 -19
  251. package/dist/TabGroup/TabList.torp +8 -21
  252. package/dist/TabGroup/TabTrigger.torp +6 -7
  253. package/dist/TabGroup/index.d.ts +26 -26
  254. package/dist/TabGroup/index.js +6 -22
  255. package/dist/TagInput/TagInput.torp +378 -0
  256. package/dist/TagInput/index.d.ts +48 -0
  257. package/dist/TagInput/index.js +2 -0
  258. package/dist/TimePicker/TimePicker.torp +462 -0
  259. package/dist/TimePicker/index.d.ts +53 -0
  260. package/dist/TimePicker/index.js +2 -0
  261. package/dist/ToolBar/ToolBar.torp +117 -0
  262. package/dist/ToolBar/ToolBarButton.torp +56 -0
  263. package/dist/ToolBar/ToolBarElement.torp +51 -0
  264. package/dist/ToolBar/ToolBarPopout.torp +45 -0
  265. package/dist/ToolBar/ToolBarPopoutContent.torp +34 -0
  266. package/dist/ToolBar/ToolBarPopoutTrigger.torp +47 -0
  267. package/dist/ToolBar/ToolBarSeparator.torp +21 -0
  268. package/dist/ToolBar/ToolBarTypes.ts +28 -0
  269. package/dist/ToolBar/index.d.ts +210 -0
  270. package/dist/ToolBar/index.js +8 -0
  271. package/dist/Tree/Tree.torp +395 -0
  272. package/dist/Tree/TreeItem.torp +176 -0
  273. package/dist/Tree/TreeItemChildren.torp +60 -0
  274. package/dist/Tree/TreeItemContent.torp +46 -0
  275. package/dist/Tree/TreeItemLabel.torp +94 -0
  276. package/dist/Tree/TreeItemTrigger.torp +78 -0
  277. package/dist/Tree/TreeLoadedChildren.torp +122 -0
  278. package/dist/Tree/TreeTypes.ts +63 -0
  279. package/dist/Tree/index.d.ts +262 -0
  280. package/dist/Tree/index.js +7 -0
  281. package/dist/icons/ChevronDoubleLeft.torp +19 -0
  282. package/dist/icons/ChevronDoubleRight.torp +19 -0
  283. package/dist/icons/index.d.ts +61 -1
  284. package/dist/icons/index.js +17 -58
  285. package/dist/loader-DEeG5vFY.js +44 -0
  286. package/dist/loader-DEeG5vFY.js.map +1 -0
  287. package/dist/motion/index.d.ts +12 -8
  288. package/dist/motion/index.d.ts.map +1 -0
  289. package/dist/motion/index.js +72 -88
  290. package/dist/motion/index.js.map +1 -1
  291. package/dist/mount/draggable.ts +63 -0
  292. package/dist/mount/dropTarget.ts +108 -0
  293. package/dist/mount/hoverTrigger.ts +1 -1
  294. package/dist/utils/$handle.ts +23 -0
  295. package/dist/utils/LoadedItems.torp +47 -0
  296. package/dist/utils/PopoutClickTrigger.torp +99 -0
  297. package/dist/utils/PopoutTypes.ts +82 -0
  298. package/dist/utils/SubmenuPopout.torp +89 -0
  299. package/dist/utils/SubmenuPopoutContent.torp +87 -0
  300. package/dist/utils/SubmenuPopoutTrigger.torp +160 -0
  301. package/dist/utils/chartColors.ts +13 -13
  302. package/dist/utils/chartLayout.ts +143 -0
  303. package/dist/utils/chartUtils.ts +1 -1
  304. package/dist/utils/colorUtils.ts +103 -0
  305. package/dist/utils/createItemGroup.ts +152 -0
  306. package/dist/utils/dateUtils.ts +8 -7
  307. package/dist/utils/documentEvents.ts +4 -4
  308. package/dist/utils/dragState.ts +86 -0
  309. package/dist/utils/focusGroup.ts +204 -0
  310. package/dist/utils/focusItem.ts +44 -0
  311. package/dist/utils/formField.ts +70 -0
  312. package/dist/utils/hoverOpen.ts +50 -0
  313. package/dist/utils/hoverReveal.ts +194 -0
  314. package/dist/utils/loader.ts +113 -0
  315. package/dist/utils/maskUtils.ts +98 -0
  316. package/dist/utils/popoutContent.ts +137 -0
  317. package/dist/utils/reorderList.ts +52 -0
  318. package/package.json +116 -25
  319. package/dist/Accordion/index.js.map +0 -1
  320. package/dist/Breadcrumb/index.js.map +0 -1
  321. package/dist/Calendar/index.js.map +0 -1
  322. package/dist/Chart/BarChart.torp +0 -159
  323. package/dist/Chart/LineChart.torp +0 -196
  324. package/dist/Chart/index.d.ts +0 -220
  325. package/dist/Chart/index.js +0 -34
  326. package/dist/Chart/index.js.map +0 -1
  327. package/dist/Contextual/index.js.map +0 -1
  328. package/dist/Dialog/index.js.map +0 -1
  329. package/dist/Disclosure/index.js.map +0 -1
  330. package/dist/Drawer/index.js.map +0 -1
  331. package/dist/Form/index.js.map +0 -1
  332. package/dist/Menu/index.js.map +0 -1
  333. package/dist/MenuBar/index.js.map +0 -1
  334. package/dist/NavMenu/NavMenuPopoutButton.torp +0 -129
  335. package/dist/NavMenu/index.js.map +0 -1
  336. package/dist/TabGroup/index.js.map +0 -1
  337. package/dist/icons/index.js.map +0 -1
  338. package/dist/index.d.ts +0 -19
  339. package/dist/metafile-esm.json +0 -1
  340. package/dist/motion/fade.ts +0 -16
  341. package/dist/motion/grow.ts +0 -23
  342. package/dist/motion/measure.ts +0 -28
  343. package/dist/motion/slide.ts +0 -45
  344. package/dist/mount/index.d.ts +0 -2
  345. package/dist/utils/index.d.ts +0 -2
  346. /package/dist/{Chart → Charts}/DataSeries.ts +0 -0
@@ -1,15 +1,15 @@
1
1
  import type { ClassValue, StyleValue } from "@torpor/view";
2
- import { NavMenuGroupContextName, type NavMenuGroupContext } from "./NavMenuTypes";
2
+ import { type NavMenuGroupContext, NavMenuGroupContextName } from "./NavMenuTypes";
3
3
 
4
4
  interface NavMenuGroupProps {
5
5
  /** An ID for the root element */
6
6
  id?: string;
7
7
  /** Classes for the root element */
8
- class?: ClassValue,
8
+ class?: ClassValue;
9
9
  /** Styles for the root element */
10
- style?: StyleValue,
10
+ style?: StyleValue;
11
11
  /** An ARIA label for describing the group to screen readers */
12
- ariaLabel?: string,
12
+ ariaLabel?: string;
13
13
  }
14
14
 
15
15
  /**
@@ -17,7 +17,7 @@ interface NavMenuGroupProps {
17
17
  */
18
18
  export default function NavMenuGroup($props: NavMenuGroupProps | undefined) {
19
19
  let $state = $watch({
20
- headerId: ""
20
+ headerId: "",
21
21
  });
22
22
 
23
23
  // Set the context to pass down to items
@@ -1,16 +1,14 @@
1
1
  import type { ClassValue, StyleValue } from "@torpor/view";
2
2
  import getId from "../utils/getId";
3
- import { NavMenuGroupContextName, type NavMenuGroupContext } from "./NavMenuTypes";
3
+ import { type NavMenuGroupContext, NavMenuGroupContextName } from "./NavMenuTypes";
4
4
 
5
5
  interface NavMenuGroupHeaderProps {
6
6
  /** An ID for the root element */
7
7
  id?: string;
8
8
  /** Classes for the root element */
9
- class?: ClassValue,
9
+ class?: ClassValue;
10
10
  /** Styles for the root element */
11
- style?: StyleValue,
12
- /** The type of HTML header to use */
13
- as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6",
11
+ style?: StyleValue;
14
12
  }
15
13
 
16
14
  /**
@@ -29,13 +27,12 @@ export default function NavMenuGroupHeader($props: NavMenuGroupHeaderProps | und
29
27
  $state.headerId = $props?.id ?? defaultId;
30
28
 
31
29
  @render {
32
- @// TODO: self={$props.as}
33
- <h4
30
+ <div
34
31
  id={$props?.id ?? defaultId}
35
32
  class={["torp-nav-menu-group-header", $props?.class]}
36
33
  {$props?.style}
37
34
  >
38
35
  <slot />
39
- </h4>
36
+ </div>
40
37
  }
41
38
  }
@@ -1,19 +1,19 @@
1
1
  import type { ClassValue, StyleValue } from "@torpor/view";
2
- import { NavMenuContextName, type NavMenuContext } from "./NavMenuTypes";
2
+ import { type NavMenuContext, NavMenuContextName } from "./NavMenuTypes";
3
3
 
4
4
  interface NavMenuLinkProps {
5
5
  /** An ID for the root element */
6
6
  id?: string;
7
7
  /** Classes for the root element */
8
- class?: ClassValue,
8
+ class?: ClassValue;
9
9
  /** Styles for the root element */
10
- style?: StyleValue,
10
+ style?: StyleValue;
11
11
  /** The URL for the menu link */
12
- href: string,
12
+ href: string;
13
13
  /** Whether the menu link should open in a new tab/window */
14
- newWindow?: boolean,
14
+ newWindow?: boolean;
15
15
  /** Whether this link is disabled */
16
- disabled?: boolean,
16
+ disabled?: boolean;
17
17
  }
18
18
 
19
19
  /**
@@ -31,7 +31,7 @@ export default function NavMenuLink($props: NavMenuLinkProps | undefined) {
31
31
  const { registerItem, handleItemKey, handleItemFocus } = menuContext;
32
32
 
33
33
  // Register this item with the parent NavMenu and store the index
34
- const { index } = registerItem(setFocused);
34
+ const { index } = registerItem({ setFocused, disabled: $props?.disabled });
35
35
 
36
36
  function setFocused() {
37
37
  link.focus();
@@ -47,10 +47,7 @@ export default function NavMenuLink($props: NavMenuLinkProps | undefined) {
47
47
  target={$props?.newWindow ? "_blank" : undefined}
48
48
  role="menuitem"
49
49
  aria-disabled={$props?.disabled ? "true" : undefined}
50
- data-disabled={$props?.disabled ? "true" : undefined}
51
- onkeydown
52
50
  onkeydown={handleItemKey}
53
- onclick
54
51
  onfocus={() => handleItemFocus(index)}
55
52
  &ref={link}
56
53
  >
@@ -1,89 +1,44 @@
1
- import type { ClassValue, StyleValue } from "@torpor/view";
2
- import { NavMenuPopoutContextName, type NavMenuPopoutContext } from "./NavMenuTypes";
1
+ import type { Bindable, ClassValue, StyleValue } from "@torpor/view";
2
+ import SubmenuPopout from "../utils/SubmenuPopout.torp";
3
3
 
4
4
  interface NavMenuPopoutProps {
5
5
  /** An ID for the root element */
6
6
  id?: string;
7
7
  /** Classes for the root element */
8
- class?: ClassValue,
8
+ class?: ClassValue;
9
9
  /** Styles for the root element */
10
- style?: StyleValue,
10
+ style?: StyleValue;
11
11
  /** Whether the popout is visible */
12
- visible?: boolean,
13
- /** Raised when the popout is opened or closed */
14
- ontoggle?: (open: boolean) => void,
12
+ visible: Bindable<boolean | undefined>;
15
13
  /** Raised when the popout has opened */
16
- onopen?: () => void,
14
+ onopen?: () => void;
17
15
  /** Raised when the popout has closed */
18
- onclose?: (result: any) => void,
16
+ onclose?: (result: any) => void;
19
17
  }
20
18
 
21
19
  /**
22
- * A popout that is attached to a menu button and can be used to show a submenu.
20
+ * A popout that is attached to a nav menu button and can be used to show a submenu.
23
21
  *
24
22
  * The structure of a NavMenuPopout is:
25
23
  *
26
24
  * ```
27
25
  * <NavMenuPopout>
28
- * <NavMenuPopoutButton />
26
+ * <NavMenuPopoutTrigger />
29
27
  * <NavMenuPopoutContent />
30
28
  * </NavMenuPopout>
31
29
  * ```
32
30
  */
33
31
  export default function NavMenuPopout($props: NavMenuPopoutProps | undefined) {
34
- let $state = $watch({
35
- visible: false
36
- });
37
-
38
- // Sync props and state
39
- $run(() => {
40
- $state.visible = $props?.visible ?? false;
41
- });
42
- $run(() => {
43
- if ($props !== undefined) {
44
- $props.visible = $state.visible;
45
- }
46
- });
47
-
48
- let result: any;
49
-
50
- // Set the context to pass down to items
51
- let context: NavMenuPopoutContext = {
52
- state: $state,
53
- };
54
- $context[NavMenuPopoutContextName] = context;
55
-
56
- // Dispatch the toggle event when the popout is opened or closed
57
- let firstToggle = true;
58
- $run(() => {
59
- const ontoggle = $props?.ontoggle;
60
- const onopen = $props?.onopen;
61
- const onclose = $props?.onclose;
62
- const visible = $state.visible;
63
- if (firstToggle) {
64
- firstToggle = false;
65
- } else {
66
- if (ontoggle) ontoggle(visible);
67
- if (visible) {
68
- if (onopen) onopen()
69
- } else {
70
- if (onclose) onclose(result);
71
- }
72
- }
73
- });
74
-
75
- function handleMouseLeave() {
76
- $state.visible = false;
77
- }
78
-
79
32
  @render {
80
- <div
81
- {$props?.id}
33
+ <SubmenuPopout
34
+ id={$props?.id}
82
35
  class={["torp-nav-menu-popout", $props?.class]}
83
- {$props?.style}
84
- onmouseleave={handleMouseLeave}
36
+ style={$props?.style}
37
+ visible={$props?.visible}
38
+ onopen={$props?.onopen}
39
+ onclose={$props?.onclose}
85
40
  >
86
41
  <slot />
87
- </div>
42
+ </SubmenuPopout>
88
43
  }
89
44
  }
@@ -1,19 +1,17 @@
1
1
  import type { ClassValue, StyleValue } from "@torpor/view";
2
- import getScrollParent from "../utils/getScrollParent";
3
- import setPopoverPosition from "../utils/setPopoverPosition";
4
- import { NavMenuPopoutContextName, type NavMenuPopoutContext } from "./NavMenuTypes";
2
+ import SubmenuPopoutContent from "../utils/SubmenuPopoutContent.torp";
5
3
 
6
4
  interface NavMenuPopoutContentProps {
7
5
  /** An ID for the root element */
8
6
  id?: string;
9
7
  /** Classes for the root element */
10
- class?: ClassValue,
8
+ class?: ClassValue;
11
9
  /** Styles for the root element */
12
- style?: StyleValue,
10
+ style?: StyleValue;
13
11
  /** Where the popout will be shown, relative to the popout button */
14
- side?: "top" | "right" | "bottom" | "left",
12
+ side?: "top" | "right" | "bottom" | "left";
15
13
  /** How the popout will be aligned, relative to the popout button */
16
- alignment?: "start" | "center" | "end",
14
+ alignment?: "start" | "center" | "end";
17
15
  }
18
16
 
19
17
  /**
@@ -21,72 +19,15 @@ interface NavMenuPopoutContentProps {
21
19
  *
22
20
  */
23
21
  export default function NavMenuPopoutContent($props: NavMenuPopoutContentProps | undefined) {
24
- let div: HTMLDivElement;
25
- let shown = false;
26
-
27
- // Get stuff out of the NavMenuPopoutContext
28
- const context = $context[NavMenuPopoutContextName] as NavMenuPopoutContext;
29
- if (!context) {
30
- throw new Error("NavMenuPopoutContent must be contained within a NavMenuPopout");
31
- }
32
- let $state = context.state;
33
-
34
- $run(() => {
35
- if (!$state.visible) {
36
- hide();
37
- }
38
- });
39
-
40
- function show() {
41
- shown = true;
42
-
43
- // Set the position and listen for window resize and scroll to reset the position
44
- setPosition();
45
- const anchorElement = context.anchorElement!
46
- const scrollParent = getScrollParent(anchorElement)
47
- scrollParent.addEventListener("resize", setPosition);
48
- scrollParent.addEventListener("scroll", setPosition);
49
- if (context.focusFirstElement) {
50
- context.focusFirstElement();
51
- }
52
- }
53
-
54
- function hide() {
55
- if (!shown) return;
56
-
57
- // Stop listening for window resize and focus the anchor element per WAI guidelines
58
- const anchorElement = context.anchorElement!
59
- const scrollParent = getScrollParent(anchorElement)
60
- scrollParent.removeEventListener("resize", setPosition);
61
- scrollParent.removeEventListener("scroll", setPosition);
62
- if (anchorElement.focus) {
63
- anchorElement.focus();
64
- }
65
- }
66
-
67
- function setPosition() {
68
- if (!context.anchorElement) {
69
- throw new Error("NavMenuPopoutContent must have an anchor element");
70
- }
71
-
72
- if (div) {
73
- let side = $props?.side ?? "bottom";
74
- let alignment = $props?.alignment ?? "start";
75
- setPopoverPosition(context.anchorElement, div, side, alignment);
76
- }
77
- }
78
-
79
22
  @render {
80
- @if ($state.visible) {
81
- <div
82
- {$props?.id}
83
- class={["torp-nav-menu-popout-content", $props?.class]}
84
- {$props?.style}
85
- &ref={div}
86
- onmount={show}
87
- >
88
- <slot />
89
- </div>
90
- }
23
+ <SubmenuPopoutContent
24
+ id={$props?.id}
25
+ class={["torp-nav-menu-popout-content", $props?.class]}
26
+ style={$props?.style}
27
+ side={$props?.side}
28
+ alignment={$props?.alignment}
29
+ >
30
+ <slot />
31
+ </SubmenuPopoutContent>
91
32
  }
92
33
  }
@@ -0,0 +1,47 @@
1
+ import type { ClassValue, StyleValue } from "@torpor/view";
2
+ import SubmenuPopoutTrigger from "../utils/SubmenuPopoutTrigger.torp";
3
+ import { type NavMenuContext, NavMenuContextName } from "./NavMenuTypes";
4
+
5
+ interface NavMenuPopoutTriggerProps {
6
+ /** An ID for the root element */
7
+ id?: string;
8
+ /** Classes for the root element */
9
+ class?: ClassValue;
10
+ /** Styles for the root element */
11
+ style?: StyleValue;
12
+ /** The delay before showing the popout, in milliseconds */
13
+ hoverDelay?: number;
14
+ /** Whether this button is disabled */
15
+ disabled?: boolean;
16
+ }
17
+
18
+ /**
19
+ * A button that is placed in a NavMenu and signals a response by a user.
20
+ *
21
+ */
22
+ export default function NavMenuPopoutTrigger($props: NavMenuPopoutTriggerProps | undefined) {
23
+ // Get stuff out of the NavMenuContext
24
+ const menuContext = $context[NavMenuContextName] as NavMenuContext;
25
+ if (!menuContext) {
26
+ throw new Error("NavMenuPopoutTrigger must be contained within a NavMenu");
27
+ }
28
+ const { registerItem, handleItemKey, handleItemFocus } = menuContext;
29
+
30
+ @render {
31
+ <SubmenuPopoutTrigger
32
+ id={$props?.id}
33
+ class={["torp-nav-menu-popout-button", $props?.class]}
34
+ style={$props?.style}
35
+ hoverDelay={$props?.hoverDelay}
36
+ disabled={$props?.disabled}
37
+ role="menuitem"
38
+ tabindex="-1"
39
+ openKey="ArrowRight"
40
+ registerItem={registerItem}
41
+ handleItemKey={handleItemKey}
42
+ handleItemFocus={handleItemFocus}
43
+ >
44
+ <slot />
45
+ </SubmenuPopoutTrigger>
46
+ }
47
+ }
@@ -4,9 +4,9 @@ interface NavMenuSeparatorProps {
4
4
  /** An ID for the root element */
5
5
  id?: string;
6
6
  /** Classes for the root element */
7
- class?: ClassValue,
7
+ class?: ClassValue;
8
8
  /** Styles for the root element */
9
- style?: StyleValue,
9
+ style?: StyleValue;
10
10
  }
11
11
 
12
12
  /**
@@ -14,10 +14,7 @@ interface NavMenuSeparatorProps {
14
14
  */
15
15
  export default function NavMenuSeparator($props: NavMenuSeparatorProps | undefined) {
16
16
  @render {
17
- <div
18
- {$props?.id}
19
- class={`torp-nav-menu-separator ${$props?.class ?? ""}`.trim()} role="separator"
20
- >
17
+ <div {$props?.id} class={["torp-nav-menu-separator", $props?.class]} role="separator">
21
18
  <slot />
22
19
  </div>
23
20
  }
@@ -1,6 +1,7 @@
1
- export const NavMenuContextName = "NavMenu";
2
- export const NavMenuPopoutContextName = "NavMenuPopout";
3
- export const NavMenuGroupContextName = "NavMenuGroup";
1
+ import type { SubmenuItemState } from "../utils/PopoutTypes";
2
+
3
+ export const NavMenuContextName: unique symbol = Symbol.for("torp.NavMenu");
4
+ export const NavMenuGroupContextName: unique symbol = Symbol.for("torp.NavMenuGroup");
4
5
 
5
6
  export interface NavMenuContext {
6
7
  /** Called from a NavMenuLink or NavMenuButton when its button is focused */
@@ -10,15 +11,7 @@ export interface NavMenuContext {
10
11
  handleItemKey: (e: KeyboardEvent) => void;
11
12
 
12
13
  /** Called from each NavMenuLink or NavMenuButton to register itself with this NavMenu */
13
- registerItem: (setFocused: () => void) => { index: number };
14
- }
15
-
16
- export interface NavMenuPopoutContext {
17
- state: {
18
- visible: boolean;
19
- };
20
- anchorElement?: HTMLElement;
21
- focusFirstElement?: () => void;
14
+ registerItem: (item: ItemState) => { index: number };
22
15
  }
23
16
 
24
17
  export interface NavMenuGroupContext {
@@ -27,6 +20,4 @@ export interface NavMenuGroupContext {
27
20
  };
28
21
  }
29
22
 
30
- export interface ItemState {
31
- setFocused: () => void;
32
- }
23
+ export type ItemState = SubmenuItemState;
@@ -5,13 +5,13 @@ interface NavMenuProps {
5
5
  /** An ID for the root element */
6
6
  id?: string;
7
7
  /** Classes for the root element */
8
- class?: ClassValue,
8
+ class?: ClassValue;
9
9
  /** Styles for the root element */
10
- style?: StyleValue,
10
+ style?: StyleValue;
11
11
  /** An ARIA label for describing the menu to screen readers */
12
- ariaLabel?: string | undefined,
12
+ ariaLabel?: string | undefined;
13
13
  /** The orientation of the menu, which affects keyboard navigation */
14
- orientation?: "horizontal" | "vertical",
14
+ orientation?: "horizontal" | "vertical";
15
15
  }
16
16
 
17
17
  /**
@@ -44,11 +44,15 @@ interface NavMenuButtonProps {
44
44
  /** An ID for the root element */
45
45
  id?: string;
46
46
  /** Classes for the root element */
47
- class?: ClassValue,
47
+ class?: ClassValue;
48
48
  /** Styles for the root element */
49
- style?: StyleValue,
49
+ style?: StyleValue;
50
50
  /** Whether this button is disabled */
51
- disabled?: boolean,
51
+ disabled?: boolean;
52
+ /** Raised when the button is clicked */
53
+ onclick?: (e: MouseEvent) => void;
54
+ /** Raised when a key is pressed down */
55
+ onkeydown?: (e: KeyboardEvent) => void;
52
56
  }
53
57
 
54
58
  /**
@@ -69,13 +73,13 @@ interface NavMenuElementProps {
69
73
  /** An ID for the root element */
70
74
  id?: string;
71
75
  /** Classes for the root element */
72
- class?: ClassValue,
76
+ class?: ClassValue;
73
77
  /** Styles for the root element */
74
- style?: StyleValue,
78
+ style?: StyleValue;
75
79
  /** Whether this button is disabled */
76
- disabled?: boolean,
80
+ disabled?: boolean;
77
81
  /** An element that can be focused via keyboard navigation */
78
- element?: HTMLElement,
82
+ element?: HTMLElement;
79
83
  }
80
84
 
81
85
  /**
@@ -96,11 +100,11 @@ interface NavMenuGroupProps {
96
100
  /** An ID for the root element */
97
101
  id?: string;
98
102
  /** Classes for the root element */
99
- class?: ClassValue,
103
+ class?: ClassValue;
100
104
  /** Styles for the root element */
101
- style?: StyleValue,
105
+ style?: StyleValue;
102
106
  /** An ARIA label for describing the group to screen readers */
103
- ariaLabel?: string,
107
+ ariaLabel?: string;
104
108
  }
105
109
 
106
110
  /**
@@ -120,11 +124,9 @@ interface NavMenuGroupHeaderProps {
120
124
  /** An ID for the root element */
121
125
  id?: string;
122
126
  /** Classes for the root element */
123
- class?: ClassValue,
127
+ class?: ClassValue;
124
128
  /** Styles for the root element */
125
- style?: StyleValue,
126
- /** The type of HTML header to use */
127
- as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6",
129
+ style?: StyleValue;
128
130
  }
129
131
 
130
132
  /**
@@ -144,15 +146,15 @@ interface NavMenuLinkProps {
144
146
  /** An ID for the root element */
145
147
  id?: string;
146
148
  /** Classes for the root element */
147
- class?: ClassValue,
149
+ class?: ClassValue;
148
150
  /** Styles for the root element */
149
- style?: StyleValue,
151
+ style?: StyleValue;
150
152
  /** The URL for the menu link */
151
- href: string,
153
+ href: string;
152
154
  /** Whether the menu link should open in a new tab/window */
153
- newWindow?: boolean,
155
+ newWindow?: boolean;
154
156
  /** Whether this link is disabled */
155
- disabled?: boolean,
157
+ disabled?: boolean;
156
158
  }
157
159
 
158
160
  /**
@@ -173,27 +175,25 @@ interface NavMenuPopoutProps {
173
175
  /** An ID for the root element */
174
176
  id?: string;
175
177
  /** Classes for the root element */
176
- class?: ClassValue,
178
+ class?: ClassValue;
177
179
  /** Styles for the root element */
178
- style?: StyleValue,
180
+ style?: StyleValue;
179
181
  /** Whether the popout is visible */
180
- visible?: boolean,
181
- /** Raised when the popout is opened or closed */
182
- ontoggle?: (open: boolean) => void,
182
+ visible: Bindable<boolean | undefined>;
183
183
  /** Raised when the popout has opened */
184
- onopen?: () => void,
184
+ onopen?: () => void;
185
185
  /** Raised when the popout has closed */
186
- onclose?: (result: any) => void,
186
+ onclose?: (result: any) => void;
187
187
  }
188
188
 
189
189
  /**
190
- * A popout that is attached to a menu button and can be used to show a submenu.
190
+ * A popout that is attached to a nav menu button and can be used to show a submenu.
191
191
  *
192
192
  * The structure of a NavMenuPopout is:
193
193
  *
194
194
  * ```
195
195
  * <NavMenuPopout>
196
- * <NavMenuPopoutButton />
196
+ * <NavMenuPopoutTrigger />
197
197
  * <NavMenuPopoutContent />
198
198
  * </NavMenuPopout>
199
199
  * ```
@@ -208,54 +208,54 @@ declare function NavMenuPopout(
208
208
 
209
209
 
210
210
 
211
- interface NavMenuPopoutButtonProps {
211
+ interface NavMenuPopoutContentProps {
212
212
  /** An ID for the root element */
213
213
  id?: string;
214
214
  /** Classes for the root element */
215
- class?: ClassValue,
215
+ class?: ClassValue;
216
216
  /** Styles for the root element */
217
- style?: StyleValue,
218
- /** The delay before showing the popout, in milliseconds */
219
- hoverDelay?: number,
220
- /** Whether this button is disabled */
221
- disabled?: boolean,
217
+ style?: StyleValue;
218
+ /** Where the popout will be shown, relative to the popout button */
219
+ side?: "top" | "right" | "bottom" | "left";
220
+ /** How the popout will be aligned, relative to the popout button */
221
+ alignment?: "start" | "center" | "end";
222
222
  }
223
223
 
224
224
  /**
225
- * A button that is placed in a NavMenu and signals a response by a user.
225
+ * The content that is displayed for a NavMenuPopout when it is open.
226
226
  *
227
227
  */
228
- declare function NavMenuPopoutButton(
228
+ declare function NavMenuPopoutContent(
229
229
  $parent: ParentNode,
230
230
  $anchor: Node | null,
231
- $props: NavMenuPopoutButtonProps | undefined,
231
+ $props: NavMenuPopoutContentProps | undefined,
232
232
  $context?: Record<PropertyKey, any>,
233
233
  $slots?: Record<string, SlotRender>,
234
234
  ): void;
235
235
 
236
236
 
237
237
 
238
- interface NavMenuPopoutContentProps {
238
+ interface NavMenuPopoutTriggerProps {
239
239
  /** An ID for the root element */
240
240
  id?: string;
241
241
  /** Classes for the root element */
242
- class?: ClassValue,
242
+ class?: ClassValue;
243
243
  /** Styles for the root element */
244
- style?: StyleValue,
245
- /** Where the popout will be shown, relative to the popout button */
246
- side?: "top" | "right" | "bottom" | "left",
247
- /** How the popout will be aligned, relative to the popout button */
248
- alignment?: "start" | "center" | "end",
244
+ style?: StyleValue;
245
+ /** The delay before showing the popout, in milliseconds */
246
+ hoverDelay?: number;
247
+ /** Whether this button is disabled */
248
+ disabled?: boolean;
249
249
  }
250
250
 
251
251
  /**
252
- * The content that is displayed for a NavMenuPopout when it is open.
252
+ * A button that is placed in a NavMenu and signals a response by a user.
253
253
  *
254
254
  */
255
- declare function NavMenuPopoutContent(
255
+ declare function NavMenuPopoutTrigger(
256
256
  $parent: ParentNode,
257
257
  $anchor: Node | null,
258
- $props: NavMenuPopoutContentProps | undefined,
258
+ $props: NavMenuPopoutTriggerProps | undefined,
259
259
  $context?: Record<PropertyKey, any>,
260
260
  $slots?: Record<string, SlotRender>,
261
261
  ): void;
@@ -266,9 +266,9 @@ interface NavMenuSeparatorProps {
266
266
  /** An ID for the root element */
267
267
  id?: string;
268
268
  /** Classes for the root element */
269
- class?: ClassValue,
269
+ class?: ClassValue;
270
270
  /** Styles for the root element */
271
- style?: StyleValue,
271
+ style?: StyleValue;
272
272
  }
273
273
 
274
274
  /**
@@ -282,4 +282,4 @@ declare function NavMenuSeparator(
282
282
  $slots?: Record<string, SlotRender>,
283
283
  ): void;
284
284
 
285
- export { NavMenu, NavMenuButton, NavMenuElement, NavMenuGroup, NavMenuGroupHeader, NavMenuLink, NavMenuPopout, NavMenuPopoutButton, NavMenuPopoutContent, NavMenuSeparator };
285
+ export { NavMenu, NavMenuButton, NavMenuElement, NavMenuGroup, NavMenuGroupHeader, NavMenuLink, NavMenuPopout, NavMenuPopoutContent, NavMenuPopoutTrigger, NavMenuSeparator };