@torpor/ui 0.4.0 → 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 (342) hide show
  1. package/README.md +83 -7
  2. package/dist/Accordion/Accordion.torp +42 -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 +1 -1
  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 +24 -3
  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 +55 -144
  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/Charts/GridLines.torp +4 -4
  46. package/dist/Charts/LineChart.torp +55 -178
  47. package/dist/Charts/PieChart.torp +14 -20
  48. package/dist/Charts/ScatterChart.torp +45 -38
  49. package/dist/Charts/SparkLine.torp +16 -19
  50. package/dist/Charts/XAxis.torp +11 -11
  51. package/dist/Charts/YAxis.torp +8 -8
  52. package/dist/Charts/index.d.ts +328 -79
  53. package/dist/Charts/index.js +17 -34
  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 +32 -50
  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 +4 -17
  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 +24 -17
  91. package/dist/Dialog/DialogBody.torp +5 -9
  92. package/dist/Dialog/DialogButton.torp +12 -12
  93. package/dist/Dialog/DialogFooter.torp +3 -7
  94. package/dist/Dialog/DialogHeader.torp +6 -10
  95. package/dist/Dialog/index.d.ts +27 -27
  96. package/dist/Dialog/index.js +6 -22
  97. package/dist/Disclosure/Disclosure.torp +18 -18
  98. package/dist/Disclosure/DisclosureContent.torp +5 -6
  99. package/dist/Disclosure/DisclosureHeader.torp +7 -11
  100. package/dist/Disclosure/DisclosureTrigger.torp +4 -5
  101. package/dist/Disclosure/index.d.ts +14 -16
  102. package/dist/Disclosure/index.js +5 -18
  103. package/dist/Drawer/Drawer.torp +19 -49
  104. package/dist/Drawer/DrawerContent.torp +67 -13
  105. package/dist/Drawer/DrawerOverlay.torp +4 -4
  106. package/dist/Drawer/DrawerTrigger.torp +16 -4
  107. package/dist/Drawer/DrawerTypes.ts +3 -0
  108. package/dist/Drawer/index.d.ts +16 -20
  109. package/dist/Drawer/index.js +5 -18
  110. package/dist/FocusGroup/FocusGroup.torp +70 -0
  111. package/dist/FocusGroup/FocusGroupButton.torp +59 -0
  112. package/dist/FocusGroup/FocusGroupTypes.ts +14 -0
  113. package/dist/FocusGroup/index.d.ts +44 -0
  114. package/dist/FocusGroup/index.js +3 -0
  115. package/dist/Form/CheckBox.torp +27 -18
  116. package/dist/Form/Field.torp +17 -17
  117. package/dist/Form/File.torp +31 -22
  118. package/dist/Form/FileDrop.torp +187 -0
  119. package/dist/Form/Form.torp +24 -22
  120. package/dist/Form/FormTypes.ts +2 -0
  121. package/dist/Form/FormValues.torp +37 -0
  122. package/dist/Form/Hidden.torp +4 -12
  123. package/dist/Form/Input.torp +38 -32
  124. package/dist/Form/Label.torp +3 -3
  125. package/dist/Form/Message.torp +13 -5
  126. package/dist/Form/MessageSummary.torp +5 -4
  127. package/dist/Form/Option.torp +11 -7
  128. package/dist/Form/Select.torp +32 -28
  129. package/dist/Form/TextArea.torp +35 -31
  130. package/dist/Form/Toggle.torp +109 -0
  131. package/dist/Form/index.d.ts +178 -79
  132. package/dist/Form/index.js +16 -50
  133. package/dist/ListBox/ListBox.torp +253 -150
  134. package/dist/ListBox/ListBoxItem.torp +54 -30
  135. package/dist/ListBox/ListBoxSeparator.torp +5 -2
  136. package/dist/ListBox/ListBoxTypes.ts +23 -5
  137. package/dist/ListBox/LoadedListBoxItems.torp +41 -0
  138. package/dist/ListBox/index.d.ts +56 -17
  139. package/dist/ListBox/index.js +4 -14
  140. package/dist/MaskedInput/MaskedInput.torp +143 -0
  141. package/dist/MaskedInput/index.d.ts +52 -0
  142. package/dist/MaskedInput/index.js +2 -0
  143. package/dist/Menu/Menu.torp +86 -71
  144. package/dist/Menu/MenuButton.torp +17 -10
  145. package/dist/Menu/MenuCheck.torp +22 -18
  146. package/dist/Menu/MenuGroup.torp +4 -4
  147. package/dist/Menu/MenuIndicator.torp +5 -13
  148. package/dist/Menu/MenuPopout.torp +20 -50
  149. package/dist/Menu/MenuPopoutContent.torp +15 -66
  150. package/dist/Menu/MenuPopoutTrigger.torp +19 -100
  151. package/dist/Menu/MenuRadio.torp +25 -26
  152. package/dist/Menu/MenuRadioGroup.torp +25 -68
  153. package/dist/Menu/MenuSeparator.torp +3 -2
  154. package/dist/Menu/MenuTypes.ts +9 -19
  155. package/dist/Menu/index.d.ts +45 -51
  156. package/dist/Menu/index.js +12 -46
  157. package/dist/MenuBar/MenuBar.torp +31 -83
  158. package/dist/MenuBar/MenuBarItem.torp +33 -51
  159. package/dist/MenuBar/MenuBarItemContent.torp +15 -101
  160. package/dist/MenuBar/MenuBarItemTrigger.torp +20 -55
  161. package/dist/MenuBar/MenuBarTypes.ts +11 -10
  162. package/dist/MenuBar/index.d.ts +17 -19
  163. package/dist/MenuBar/index.js +5 -18
  164. package/dist/Modal/Modal.torp +22 -47
  165. package/dist/Modal/ModalContent.torp +21 -44
  166. package/dist/Modal/ModalOverlay.torp +4 -4
  167. package/dist/Modal/ModalTrigger.torp +16 -32
  168. package/dist/Modal/ModalTypes.ts +5 -16
  169. package/dist/Modal/index.d.ts +17 -29
  170. package/dist/Modal/index.js +29 -28
  171. package/dist/Modal/index.js.map +1 -1
  172. package/dist/Modal/showPrompt.ts +2 -2
  173. package/dist/NavMenu/NavMenu.torp +22 -111
  174. package/dist/NavMenu/NavMenuButton.torp +7 -8
  175. package/dist/NavMenu/NavMenuElement.torp +6 -7
  176. package/dist/NavMenu/NavMenuGroup.torp +5 -5
  177. package/dist/NavMenu/NavMenuGroupHeader.torp +5 -8
  178. package/dist/NavMenu/NavMenuLink.torp +7 -10
  179. package/dist/NavMenu/NavMenuPopout.torp +15 -60
  180. package/dist/NavMenu/NavMenuPopoutContent.torp +14 -73
  181. package/dist/NavMenu/NavMenuPopoutTrigger.torp +17 -99
  182. package/dist/NavMenu/NavMenuSeparator.torp +3 -7
  183. package/dist/NavMenu/NavMenuTypes.ts +4 -14
  184. package/dist/NavMenu/index.d.ts +40 -44
  185. package/dist/NavMenu/index.js +11 -42
  186. package/dist/Notification/Notification.torp +12 -24
  187. package/dist/Notification/NotificationClose.torp +6 -3
  188. package/dist/Notification/NotificationContainer.torp +3 -7
  189. package/dist/Notification/NotificationContent.torp +3 -7
  190. package/dist/Notification/NotificationTypes.ts +1 -1
  191. package/dist/Notification/index.d.ts +15 -12
  192. package/dist/Notification/index.js +22 -32
  193. package/dist/Notification/index.js.map +1 -1
  194. package/dist/NumberInput/NumberInput.torp +255 -0
  195. package/dist/NumberInput/index.d.ts +44 -0
  196. package/dist/NumberInput/index.js +2 -0
  197. package/dist/Pagination/Pagination.torp +41 -34
  198. package/dist/Pagination/PaginationItem.torp +50 -13
  199. package/dist/Pagination/PaginationTypes.ts +3 -6
  200. package/dist/Pagination/buildPages.ts +9 -5
  201. package/dist/Pagination/index.d.ts +19 -9
  202. package/dist/Pagination/index.js +3 -40
  203. package/dist/Popover/Popover.torp +32 -50
  204. package/dist/Popover/PopoverContent.torp +27 -76
  205. package/dist/Popover/PopoverHover.torp +90 -0
  206. package/dist/Popover/PopoverTrigger.torp +17 -40
  207. package/dist/Popover/PopoverTypes.ts +4 -17
  208. package/dist/Popover/index.d.ts +40 -25
  209. package/dist/Popover/index.js +18 -18
  210. package/dist/Popover/index.js.map +1 -1
  211. package/dist/Progress/Progress.torp +88 -0
  212. package/dist/Progress/index.d.ts +37 -0
  213. package/dist/Progress/index.js +2 -0
  214. package/dist/Rating/Rating.torp +225 -0
  215. package/dist/Rating/index.d.ts +44 -0
  216. package/dist/Rating/index.js +2 -0
  217. package/dist/SegmentedControl/SegmentedControl.torp +233 -0
  218. package/dist/SegmentedControl/SegmentedControlTypes.ts +26 -0
  219. package/dist/SegmentedControl/SegmentedItem.torp +78 -0
  220. package/dist/SegmentedControl/index.d.ts +74 -0
  221. package/dist/SegmentedControl/index.js +3 -0
  222. package/dist/SelectBox/SelectBox.torp +107 -53
  223. package/dist/SelectBox/SelectBoxContent.torp +45 -19
  224. package/dist/SelectBox/SelectBoxTrigger.torp +108 -8
  225. package/dist/SelectBox/SelectBoxTypes.ts +26 -11
  226. package/dist/SelectBox/index.d.ts +39 -54
  227. package/dist/SelectBox/index.js +5 -18
  228. package/dist/Slider/Slider.torp +248 -0
  229. package/dist/Slider/index.d.ts +45 -0
  230. package/dist/Slider/index.js +2 -0
  231. package/dist/Splitter/Splitter.torp +156 -0
  232. package/dist/Splitter/SplitterHandle.torp +161 -0
  233. package/dist/Splitter/SplitterPane.torp +63 -0
  234. package/dist/Splitter/SplitterTypes.ts +31 -0
  235. package/dist/Splitter/index.d.ts +103 -0
  236. package/dist/Splitter/index.js +4 -0
  237. package/dist/Stepper/Stepper.torp +146 -0
  238. package/dist/Stepper/StepperMarker.torp +24 -0
  239. package/dist/Stepper/StepperNext.torp +44 -0
  240. package/dist/Stepper/StepperPrevious.torp +44 -0
  241. package/dist/Stepper/StepperStep.torp +90 -0
  242. package/dist/Stepper/StepperTypes.ts +30 -0
  243. package/dist/Stepper/index.d.ts +149 -0
  244. package/dist/Stepper/index.js +6 -0
  245. package/dist/TabGroup/TabContent.torp +6 -6
  246. package/dist/TabGroup/TabGroup.torp +97 -113
  247. package/dist/TabGroup/TabGroupTypes.ts +1 -1
  248. package/dist/TabGroup/TabHeader.torp +23 -19
  249. package/dist/TabGroup/TabList.torp +8 -21
  250. package/dist/TabGroup/TabTrigger.torp +6 -7
  251. package/dist/TabGroup/index.d.ts +26 -26
  252. package/dist/TabGroup/index.js +6 -22
  253. package/dist/TagInput/TagInput.torp +378 -0
  254. package/dist/TagInput/index.d.ts +48 -0
  255. package/dist/TagInput/index.js +2 -0
  256. package/dist/TimePicker/TimePicker.torp +462 -0
  257. package/dist/TimePicker/index.d.ts +53 -0
  258. package/dist/TimePicker/index.js +2 -0
  259. package/dist/ToolBar/ToolBar.torp +29 -110
  260. package/dist/ToolBar/ToolBarButton.torp +7 -8
  261. package/dist/ToolBar/ToolBarElement.torp +7 -11
  262. package/dist/ToolBar/ToolBarPopout.torp +16 -68
  263. package/dist/ToolBar/ToolBarPopoutContent.torp +15 -73
  264. package/dist/ToolBar/ToolBarPopoutTrigger.torp +19 -110
  265. package/dist/ToolBar/ToolBarSeparator.torp +3 -7
  266. package/dist/ToolBar/ToolBarTypes.ts +7 -14
  267. package/dist/ToolBar/index.d.ts +30 -32
  268. package/dist/ToolBar/index.js +8 -30
  269. package/dist/Tree/Tree.torp +395 -0
  270. package/dist/Tree/TreeItem.torp +176 -0
  271. package/dist/Tree/TreeItemChildren.torp +60 -0
  272. package/dist/Tree/TreeItemContent.torp +46 -0
  273. package/dist/Tree/TreeItemLabel.torp +94 -0
  274. package/dist/Tree/TreeItemTrigger.torp +78 -0
  275. package/dist/Tree/TreeLoadedChildren.torp +122 -0
  276. package/dist/Tree/TreeTypes.ts +63 -0
  277. package/dist/Tree/index.d.ts +262 -0
  278. package/dist/Tree/index.js +7 -0
  279. package/dist/icons/ChevronDoubleLeft.torp +19 -0
  280. package/dist/icons/ChevronDoubleRight.torp +19 -0
  281. package/dist/icons/index.d.ts +61 -1
  282. package/dist/icons/index.js +17 -58
  283. package/dist/loader-DEeG5vFY.js +44 -0
  284. package/dist/loader-DEeG5vFY.js.map +1 -0
  285. package/dist/motion/index.d.ts +12 -8
  286. package/dist/motion/index.d.ts.map +1 -0
  287. package/dist/motion/index.js +72 -88
  288. package/dist/motion/index.js.map +1 -1
  289. package/dist/mount/draggable.ts +63 -0
  290. package/dist/mount/dropTarget.ts +108 -0
  291. package/dist/mount/hoverTrigger.ts +1 -1
  292. package/dist/utils/$handle.ts +23 -0
  293. package/dist/utils/LoadedItems.torp +47 -0
  294. package/dist/utils/PopoutClickTrigger.torp +99 -0
  295. package/dist/utils/PopoutTypes.ts +59 -12
  296. package/dist/utils/SubmenuPopout.torp +89 -0
  297. package/dist/utils/SubmenuPopoutContent.torp +87 -0
  298. package/dist/utils/SubmenuPopoutTrigger.torp +160 -0
  299. package/dist/utils/chartColors.ts +13 -13
  300. package/dist/utils/chartLayout.ts +143 -0
  301. package/dist/utils/colorUtils.ts +103 -0
  302. package/dist/utils/createItemGroup.ts +152 -0
  303. package/dist/utils/dateUtils.ts +8 -7
  304. package/dist/utils/documentEvents.ts +4 -4
  305. package/dist/utils/dragState.ts +86 -0
  306. package/dist/utils/focusGroup.ts +204 -0
  307. package/dist/utils/focusItem.ts +44 -0
  308. package/dist/utils/formField.ts +70 -0
  309. package/dist/utils/hoverOpen.ts +50 -0
  310. package/dist/utils/hoverReveal.ts +194 -0
  311. package/dist/utils/loader.ts +113 -0
  312. package/dist/utils/maskUtils.ts +98 -0
  313. package/dist/utils/popoutContent.ts +137 -0
  314. package/dist/utils/reorderList.ts +52 -0
  315. package/package.json +97 -22
  316. package/dist/Accordion/index.js.map +0 -1
  317. package/dist/Breadcrumb/index.js.map +0 -1
  318. package/dist/Calendar/index.js.map +0 -1
  319. package/dist/Charts/index.js.map +0 -1
  320. package/dist/Contextual/index.js.map +0 -1
  321. package/dist/Dialog/index.js.map +0 -1
  322. package/dist/Disclosure/index.js.map +0 -1
  323. package/dist/Drawer/index.js.map +0 -1
  324. package/dist/Form/index.js.map +0 -1
  325. package/dist/ListBox/index.js.map +0 -1
  326. package/dist/Menu/index.js.map +0 -1
  327. package/dist/MenuBar/index.js.map +0 -1
  328. package/dist/NavMenu/index.js.map +0 -1
  329. package/dist/Pagination/index.js.map +0 -1
  330. package/dist/SelectBox/SelectBoxInput.torp +0 -95
  331. package/dist/SelectBox/index.js.map +0 -1
  332. package/dist/TabGroup/index.js.map +0 -1
  333. package/dist/ToolBar/index.js.map +0 -1
  334. package/dist/icons/index.js.map +0 -1
  335. package/dist/index.d.ts +0 -19
  336. package/dist/metafile-esm.json +0 -1
  337. package/dist/motion/fade.ts +0 -16
  338. package/dist/motion/grow.ts +0 -23
  339. package/dist/motion/measure.ts +0 -28
  340. package/dist/motion/slide.ts +0 -45
  341. package/dist/mount/index.d.ts +0 -2
  342. package/dist/utils/index.d.ts +0 -2
@@ -5,30 +5,24 @@ interface DrawerProps {
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 drawer is modal. If true, an overlay should be supplied to obscure outside content, and only the drawer content will be visible to screen readers */
12
- modal?: boolean,
12
+ modal?: boolean;
13
13
  /** Whether the drawer is visible */
14
- visible?: boolean,
14
+ visible: Bindable<boolean | undefined>;
15
15
  /** Which side of the window to show the drawer from */
16
- position?: "left" | "right" | "top" | "bottom",
17
- /** A function to be called when the user selects a response */
18
- callback?: ((value: any) => void),
19
- /** Raised when the drawer is opened or closed */
20
- ontoggle?: (open: boolean) => void,
16
+ position?: "left" | "right" | "top" | "bottom";
21
17
  /** Raised when the drawer has opened */
22
- onopen?: () => void,
18
+ onopen?: () => void;
23
19
  /** Raised when the drawer has closed */
24
- onclose?: (result: any) => void,
20
+ onclose?: (result: any) => void;
25
21
  }
26
22
 
27
23
  /**
28
24
  * A drawer that can be used to show rich content or obtain information from a user.
29
25
  *
30
- * See [the WAI ARIA guidelines for Dialogs](https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/).
31
- *
32
26
  * The structure of a Drawer is:
33
27
  *
34
28
  * ```
@@ -52,9 +46,11 @@ interface DrawerContentProps {
52
46
  /** An ID for the root element */
53
47
  id?: string;
54
48
  /** Classes for the root element */
55
- class?: ClassValue,
49
+ class?: ClassValue;
56
50
  /** Styles for the root element */
57
- style?: StyleValue,
51
+ style?: StyleValue;
52
+ /** An ARIA label for describing the drawer to screen readers */
53
+ ariaLabel?: string;
58
54
  }
59
55
 
60
56
  /**
@@ -74,9 +70,9 @@ interface DrawerOverlayProps {
74
70
  /** An ID for the root element */
75
71
  id?: string;
76
72
  /** Classes for the root element */
77
- class?: ClassValue,
73
+ class?: ClassValue;
78
74
  /** Styles for the root element */
79
- style?: StyleValue,
75
+ style?: StyleValue;
80
76
  }
81
77
 
82
78
  /**
@@ -97,9 +93,9 @@ interface DrawerTriggerProps {
97
93
  /** An ID for the root element */
98
94
  id?: string;
99
95
  /** Classes for the root element */
100
- class?: ClassValue,
96
+ class?: ClassValue;
101
97
  /** Styles for the root element */
102
- style?: StyleValue,
98
+ style?: StyleValue;
103
99
  }
104
100
 
105
101
  /**
@@ -113,4 +109,4 @@ declare function DrawerTrigger(
113
109
  $slots?: Record<string, SlotRender>,
114
110
  ): void;
115
111
 
116
- export { Drawer, DrawerContent, DrawerOverlay, DrawerTrigger };
112
+ export { Drawer, DrawerContent, DrawerOverlay, DrawerTrigger };
@@ -1,18 +1,5 @@
1
- // src/Drawer/Drawer.torp
2
- import Drawer_default from "./Drawer.torp";
3
-
4
- // src/Drawer/DrawerContent.torp
5
- import DrawerContent_default from "./DrawerContent.torp";
6
-
7
- // src/Drawer/DrawerOverlay.torp
8
- import DrawerOverlay_default from "./DrawerOverlay.torp";
9
-
10
- // src/Drawer/DrawerTrigger.torp
11
- import DrawerTrigger_default from "./DrawerTrigger.torp";
12
- export {
13
- Drawer_default as Drawer,
14
- DrawerContent_default as DrawerContent,
15
- DrawerOverlay_default as DrawerOverlay,
16
- DrawerTrigger_default as DrawerTrigger
17
- };
18
- //# sourceMappingURL=index.js.map
1
+ import Drawer from "./Drawer.torp";
2
+ import DrawerContent from "./DrawerContent.torp";
3
+ import DrawerOverlay from "./DrawerOverlay.torp";
4
+ import DrawerTrigger from "./DrawerTrigger.torp";
5
+ export { Drawer, DrawerContent, DrawerOverlay, DrawerTrigger };
@@ -0,0 +1,70 @@
1
+ import type { ClassValue, StyleValue } from "@torpor/view";
2
+ import { createFocusGroup } from "../utils/focusGroup";
3
+ import {
4
+ type FocusGroupContext,
5
+ FocusGroupContextName,
6
+ } from "./FocusGroupTypes";
7
+
8
+ interface FocusGroupProps {
9
+ /** An ID for the root element */
10
+ id?: string;
11
+ /** Classes for the root element */
12
+ class?: ClassValue;
13
+ /** Styles for the root element */
14
+ style?: StyleValue;
15
+ /**
16
+ * The orientation of the group, which affects which arrow keys move
17
+ * within it (default "horizontal")
18
+ */
19
+ orientation?: "horizontal" | "vertical";
20
+ /** An accessible name for the group */
21
+ ariaLabel?: string;
22
+ }
23
+
24
+ /**
25
+ * A group of buttons (or any focusable elements) that behaves as a single
26
+ * tab stop: tabbing into the group lands on one item, and the arrow keys
27
+ * move focus between items -- Home and End jump to the ends. Disabled items
28
+ * are skipped.
29
+ *
30
+ * Wrap any set of controls in it:
31
+ *
32
+ * ```
33
+ * <FocusGroup ariaLabel="Text options">
34
+ * <FocusGroupButton onclick={bold}>Bold</FocusGroupButton>
35
+ * <FocusGroupButton onclick={italic}>Italic</FocusGroupButton>
36
+ * </FocusGroup>
37
+ * ```
38
+ *
39
+ * Use ToolBar instead when the group needs popouts or separators; use
40
+ * SegmentedControl when exactly one item must be active.
41
+ */
42
+ export default function FocusGroup($props?: FocusGroupProps) {
43
+ const orientation = $props?.orientation ?? "horizontal";
44
+ const group = createFocusGroup();
45
+
46
+ const context: FocusGroupContext = {
47
+ registerItem: (item) => group.registerItem(item),
48
+ removeItem: (index) => group.removeItem(index),
49
+ handleItemFocus: (index) => group.handleItemFocus(index),
50
+ handleItemKey: (e) => {
51
+ group.handleGroupKey(group.getFocusIndex(), e, {
52
+ vertical: orientation === "vertical",
53
+ });
54
+ },
55
+ isTabStop: (index) => group.isTabStop(index),
56
+ };
57
+ $context[FocusGroupContextName] = context;
58
+
59
+ @render {
60
+ <div
61
+ {$props?.id}
62
+ class={["torp-focus-group", $props?.class]}
63
+ {$props?.style}
64
+ role="group"
65
+ aria-label={$props?.ariaLabel}
66
+ >
67
+ <slot />
68
+ </div>
69
+ }
70
+ }
@@ -0,0 +1,59 @@
1
+ import type { ClassValue, StyleValue } from "@torpor/view";
2
+ import {
3
+ type FocusGroupContext,
4
+ FocusGroupContextName,
5
+ } from "./FocusGroupTypes";
6
+
7
+ interface FocusGroupButtonProps {
8
+ /** An ID for the root element */
9
+ id?: string;
10
+ /** Classes for the root element */
11
+ class?: ClassValue;
12
+ /** Styles for the root element */
13
+ style?: StyleValue;
14
+ /** Whether this button is disabled */
15
+ disabled?: boolean;
16
+ /** Raised when the button is clicked */
17
+ onclick?: (e: MouseEvent) => void;
18
+ }
19
+
20
+ /**
21
+ * A button inside a FocusGroup. The group's tab stop roves with focus:
22
+ * it starts on the first button and lands wherever focus last rested.
23
+ */
24
+ export default function FocusGroupButton($props?: FocusGroupButtonProps) {
25
+ let button: HTMLButtonElement;
26
+
27
+ const context = $context[FocusGroupContextName] as FocusGroupContext;
28
+ if (!context) {
29
+ throw new Error("FocusGroupButton must be contained within a FocusGroup");
30
+ }
31
+
32
+ function setFocused() {
33
+ button.focus();
34
+ }
35
+
36
+ const { index } = context.registerItem({ setFocused, disabled: $props?.disabled });
37
+
38
+ $run(() => {
39
+ return () => context.removeItem(index);
40
+ });
41
+
42
+ @render {
43
+ <button
44
+ {$props?.id}
45
+ class={["torp-focus-group-button", $props?.class]}
46
+ {$props?.style}
47
+ type="button"
48
+ tabindex={context.isTabStop(index) ? 0 : -1}
49
+ {$props?.disabled}
50
+ aria-disabled={$props?.disabled ? "true" : undefined}
51
+ onclick={$props?.onclick}
52
+ onkeydown={(e: KeyboardEvent) => context.handleItemKey(e)}
53
+ onfocus={() => context.handleItemFocus(index)}
54
+ &ref={button}
55
+ >
56
+ <slot />
57
+ </button>
58
+ }
59
+ }
@@ -0,0 +1,14 @@
1
+ import type { FocusItemState } from "../utils/focusGroup";
2
+
3
+ export const FocusGroupContextName: unique symbol = Symbol.for("torp.FocusGroupItem");
4
+
5
+ export type { FocusItemState };
6
+
7
+ export interface FocusGroupContext {
8
+ registerItem: (item: FocusItemState) => { index: number };
9
+ removeItem: (index: number) => void;
10
+ handleItemFocus: (index: number) => void;
11
+ handleItemKey: (e: KeyboardEvent) => void;
12
+ /** Whether item `index` is currently the group's single tab stop */
13
+ isTabStop: (index: number) => boolean;
14
+ }
@@ -0,0 +1,44 @@
1
+ import { type SlotRender } from "@torpor/view";
2
+
3
+
4
+ /**
5
+ * A group of buttons (or any focusable elements) that behaves as a single
6
+ * tab stop: tabbing into the group lands on one item, and the arrow keys
7
+ * move focus between items -- Home and End jump to the ends. Disabled items
8
+ * are skipped.
9
+ *
10
+ * Wrap any set of controls in it:
11
+ *
12
+ * ```
13
+ * <FocusGroup ariaLabel="Text options">
14
+ * <FocusGroupButton onclick={bold}>Bold</FocusGroupButton>
15
+ * <FocusGroupButton onclick={italic}>Italic</FocusGroupButton>
16
+ * </FocusGroup>
17
+ * ```
18
+ *
19
+ * Use ToolBar instead when the group needs popouts or separators; use
20
+ * SegmentedControl when exactly one item must be active.
21
+ */
22
+ declare function FocusGroup(
23
+ $parent: ParentNode,
24
+ $anchor: Node | null,
25
+ $props?: FocusGroupProps,
26
+ $context?: Record<PropertyKey, any>,
27
+ $slots?: Record<string, SlotRender>,
28
+ ): void;
29
+
30
+
31
+
32
+ /**
33
+ * A button inside a FocusGroup. The group's tab stop roves with focus:
34
+ * it starts on the first button and lands wherever focus last rested.
35
+ */
36
+ declare function FocusGroupButton(
37
+ $parent: ParentNode,
38
+ $anchor: Node | null,
39
+ $props?: FocusGroupButtonProps,
40
+ $context?: Record<PropertyKey, any>,
41
+ $slots?: Record<string, SlotRender>,
42
+ ): void;
43
+
44
+ export { FocusGroup, FocusGroupButton };
@@ -0,0 +1,3 @@
1
+ import FocusGroup from "./FocusGroup.torp";
2
+ import FocusGroupButton from "./FocusGroupButton.torp";
3
+ export { FocusGroup, FocusGroupButton };
@@ -1,25 +1,30 @@
1
1
  import type { ClassValue, StyleValue } from "@torpor/view";
2
2
  import getId from "../utils/getId";
3
- import { FormContextName, FieldContextName, type FormContext, type FieldContext } from "./FormTypes";
3
+ import {
4
+ type FieldContext,
5
+ FieldContextName,
6
+ type FormContext,
7
+ FormContextName,
8
+ } from "./FormTypes";
4
9
 
5
10
  interface CheckBoxProps {
6
11
  /** An ID for the root element */
7
12
  id?: string;
8
13
  /** Classes for the root element */
9
- class?: ClassValue,
14
+ class?: ClassValue;
10
15
  /** Styles for the root element */
11
- style?: StyleValue,
16
+ style?: StyleValue;
12
17
  /** The name of the checkbox's form data field */
13
- name?: string,
18
+ name?: string;
14
19
  /** Whether the checkbox is checked */
15
- checked?: boolean,
20
+ checked?: boolean;
16
21
  /** An ARIA label for describing the checkbox to screen readers when there is no associated label element */
17
- ariaLabel?: string,
22
+ ariaLabel?: string;
18
23
  /** Raised on change */
19
- onchange?: (e: Event) => void,
24
+ onchange?: (e: Event) => void;
20
25
  /** Raised on input */
21
- oninput?: (e: Event) => void,
22
- };
26
+ oninput?: (e: Event) => void;
27
+ }
23
28
 
24
29
  /**
25
30
  * A checkbox input in a form.
@@ -27,7 +32,7 @@ interface CheckBoxProps {
27
32
  export default function CheckBox($props: CheckBoxProps | undefined) {
28
33
  let defaultId = getId();
29
34
 
30
- let name = $props?.name
35
+ let name = $props?.name;
31
36
 
32
37
  let blurred = false;
33
38
 
@@ -39,13 +44,15 @@ export default function CheckBox($props: CheckBoxProps | undefined) {
39
44
  }
40
45
 
41
46
  // Use the FieldContext's state, or create a new one
42
- let $state = fieldContext?.state ?? $watch({
43
- inputId: $props?.id ?? defaultId,
44
- value: $props?.checked,
45
- errors: {} as Record<string, string>,
46
- valid: false,
47
- message: "",
48
- });
47
+ let $state =
48
+ fieldContext?.state ??
49
+ $watch({
50
+ inputId: $props?.id ?? defaultId,
51
+ value: $props?.checked,
52
+ errors: {} as Record<string, string>,
53
+ valid: false,
54
+ message: "",
55
+ });
49
56
 
50
57
  // Binding
51
58
  $run(() => {
@@ -85,7 +92,9 @@ export default function CheckBox($props: CheckBoxProps | undefined) {
85
92
  &checked={$state.value}
86
93
  aria-label={$props?.ariaLabel}
87
94
  data-valid={$state.valid ? "valid" : "invalid"}
88
- onchange={$props?.onchange}
95
+ aria-describedby={$state.messageId}
96
+ aria-invalid={fieldContext && !$state.valid ? "true" : undefined}
97
+ {$props?.onchange}
89
98
  oninput={handleInput}
90
99
  onblur={handleBlur}
91
100
  />
@@ -1,27 +1,27 @@
1
- import type { ClassValue, StyleValue } from "@torpor/view";
1
+ import type { Bindable, ClassValue, StyleValue } from "@torpor/view";
2
2
  import {
3
- FormContextName,
3
+ type FieldContext,
4
4
  FieldContextName,
5
- type ValidationIssue,
6
5
  type FormContext,
7
- type FieldContext,
6
+ FormContextName,
7
+ type ValidationIssue,
8
8
  } from "./FormTypes";
9
- import { StandardSchemaV1 } from "./StandardSchemaV1"
9
+ import { StandardSchemaV1 } from "./StandardSchemaV1";
10
10
 
11
11
  interface FieldProps {
12
12
  /** An ID for the root element */
13
13
  id?: string;
14
14
  /** Classes for the root element */
15
- class?: ClassValue,
15
+ class?: ClassValue;
16
16
  /** Styles for the root element */
17
- style?: StyleValue,
17
+ style?: StyleValue;
18
18
  /** The name of the data that this field contains */
19
- name: string,
19
+ name: string;
20
20
  /** The data value that this field is bound to */
21
- value?: any,
21
+ value: Bindable<any>;
22
22
  /** The schema validator to use for this form */
23
- schema?: StandardSchemaV1,
24
- };
23
+ schema?: StandardSchemaV1;
24
+ }
25
25
 
26
26
  /**
27
27
  * A field in a form which automatically links up a Label and/or an input
@@ -36,14 +36,14 @@ export default function Field($props: FieldProps) {
36
36
  return this.issues.find((i) => i.path === $props.name) === undefined;
37
37
  },
38
38
  get message() {
39
- return this.issues.filter((i) => i.path === $props.name).map((i) => i.message).join("\n");
39
+ return this.issues
40
+ .filter((i) => i.path === $props.name)
41
+ .map((i) => i.message)
42
+ .join("\n");
40
43
  },
41
44
  });
42
45
 
43
- // Binding
44
- $run(() => {
45
- $props.value = $state.value;
46
- });
46
+ $bind($state, $props, "value");
47
47
 
48
48
  // Get stuff out of the FormContext, if applicable
49
49
  const formContext = $context[FormContextName] as FormContext;
@@ -57,7 +57,7 @@ export default function Field($props: FieldProps) {
57
57
  let context: FieldContext = {
58
58
  name: $props.name,
59
59
  state: $state,
60
- validate: handleValidate
60
+ validate: handleValidate,
61
61
  };
62
62
  $context[FieldContextName] = context;
63
63
 
@@ -1,31 +1,36 @@
1
1
  import type { ClassValue, StyleValue } from "@torpor/view";
2
2
  import getId from "../utils/getId";
3
- import { FormContextName, FieldContextName, type FormContext, type FieldContext } from "./FormTypes";
3
+ import {
4
+ type FieldContext,
5
+ FieldContextName,
6
+ type FormContext,
7
+ FormContextName,
8
+ } from "./FormTypes";
4
9
 
5
10
  interface FileProps {
6
11
  /** An ID for the root element */
7
12
  id?: string;
8
13
  /** Classes for the root element */
9
- class?: ClassValue,
14
+ class?: ClassValue;
10
15
  /** Styles for the root element */
11
- style?: StyleValue,
16
+ style?: StyleValue;
12
17
  /** The name of the input's form data field */
13
- name?: string,
18
+ name?: string;
14
19
  /** The type of files that this input accepts e.g. `image/*` */
15
- accept?: string,
20
+ accept?: string;
16
21
  /** Text to display when the input value is empty */
17
- placeholder?: string,
22
+ placeholder?: string;
18
23
  /** Whether the input should be readonly */
19
- readonly?: boolean,
24
+ readonly?: boolean;
20
25
  /** The maximum number of characters allowed for the input value */
21
- maxlength?: number,
26
+ maxlength?: number;
22
27
  /** An ARIA label for describing the input to screen readers when there is no associated label element */
23
- ariaLabel?: string,
28
+ ariaLabel?: string;
24
29
  /** Raised on change */
25
- onchange?: (e: Event) => void,
30
+ onchange?: (e: Event) => void;
26
31
  /** Raised on input */
27
- oninput?: (e: Event) => void,
28
- };
32
+ oninput?: (e: Event) => void;
33
+ }
29
34
 
30
35
  /**
31
36
  * A file input in a form.
@@ -33,7 +38,7 @@ interface FileProps {
33
38
  export default function File($props: FileProps | undefined) {
34
39
  let defaultId = getId();
35
40
 
36
- let name = $props?.name
41
+ let name = $props?.name;
37
42
 
38
43
  let blurred = false;
39
44
 
@@ -50,14 +55,16 @@ export default function File($props: FileProps | undefined) {
50
55
  }
51
56
 
52
57
  // Use the FieldContext's state, or create a new one
53
- let $state = fieldContext?.state ?? $watch({
54
- inputId: $props?.id ?? defaultId,
55
- // You can't use value with a file input
56
- value: null,
57
- errors: {} as Record<string, string>,
58
- valid: false,
59
- message: "",
60
- });
58
+ let $state =
59
+ fieldContext?.state ??
60
+ $watch({
61
+ inputId: $props?.id ?? defaultId,
62
+ // You can't use value with a file input
63
+ value: null,
64
+ errors: {} as Record<string, string>,
65
+ valid: false,
66
+ message: "",
67
+ });
61
68
 
62
69
  // Set the input ID now that we know it and it will get linked with the associated label
63
70
  $state.inputId = $props?.id ?? defaultId;
@@ -94,7 +101,9 @@ export default function File($props: FileProps | undefined) {
94
101
  {$props?.maxlength}
95
102
  aria-label={$props?.ariaLabel}
96
103
  data-valid={$state.valid ? "valid" : "invalid"}
97
- onchange={$props?.onchange}
104
+ aria-describedby={$state.messageId}
105
+ aria-invalid={fieldContext && !$state.valid ? "true" : undefined}
106
+ {$props?.onchange}
98
107
  oninput={handleInput}
99
108
  onblur={handleBlur}
100
109
  />