@torpor/ui 0.2.1 → 0.3.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 (304) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/Accordion/Accordion.torp +29 -22
  3. package/dist/Accordion/AccordionContent.torp +7 -8
  4. package/dist/Accordion/AccordionHeader.torp +4 -6
  5. package/dist/Accordion/AccordionItem.torp +15 -12
  6. package/dist/Accordion/AccordionTrigger.torp +6 -7
  7. package/dist/Accordion/AccordionTypes.ts +4 -3
  8. package/dist/Accordion/index.d.ts +5 -5
  9. package/dist/Breadcrumb/Breadcrumb.torp +9 -10
  10. package/dist/Breadcrumb/BreadcrumbItem.torp +5 -7
  11. package/dist/Breadcrumb/BreadcrumbSeparator.torp +3 -5
  12. package/dist/Breadcrumb/index.d.ts +8 -7
  13. package/dist/Calendar/Calendar.torp +12 -13
  14. package/dist/Calendar/CalendarDay.torp +3 -3
  15. package/dist/Contextual/Contextual.torp +125 -0
  16. package/dist/{Popover/PopoverContentContextual.torp → Contextual/ContextualContent.torp} +15 -15
  17. package/dist/Contextual/ContextualTrigger.torp +66 -0
  18. package/dist/Contextual/ContextualTypes.ts +30 -0
  19. package/dist/Contextual/index.d.ts +90 -0
  20. package/dist/Contextual/index.js +14 -0
  21. package/dist/Contextual/index.js.map +1 -0
  22. package/dist/Dialog/Dialog.torp +38 -72
  23. package/dist/Dialog/DialogBody.torp +6 -8
  24. package/dist/Dialog/DialogButton.torp +14 -12
  25. package/dist/Dialog/DialogFooter.torp +3 -5
  26. package/dist/Dialog/DialogHeader.torp +6 -8
  27. package/dist/Dialog/DialogTypes.ts +3 -2
  28. package/dist/Dialog/index.d.ts +16 -11
  29. package/dist/Disclosure/Disclosure.torp +22 -23
  30. package/dist/Disclosure/DisclosureContent.torp +7 -8
  31. package/dist/Disclosure/DisclosureHeader.torp +5 -7
  32. package/dist/Disclosure/DisclosureTrigger.torp +7 -8
  33. package/dist/Disclosure/DisclosureTypes.ts +0 -1
  34. package/dist/Disclosure/index.d.ts +12 -12
  35. package/dist/Drawer/Drawer.torp +101 -70
  36. package/dist/Drawer/DrawerContent.torp +80 -0
  37. package/dist/Drawer/DrawerOverlay.torp +38 -0
  38. package/dist/Drawer/DrawerTrigger.torp +35 -0
  39. package/dist/Drawer/DrawerTypes.ts +24 -0
  40. package/dist/Drawer/index.d.ts +90 -3
  41. package/dist/Drawer/index.js +13 -1
  42. package/dist/Form/CheckBox.torp +91 -0
  43. package/dist/Form/Field.torp +2 -4
  44. package/dist/Form/File.torp +106 -0
  45. package/dist/Form/Form.torp +17 -10
  46. package/dist/Form/FormTypes.ts +5 -0
  47. package/dist/Form/Input.torp +28 -17
  48. package/dist/Form/Label.torp +1 -1
  49. package/dist/Form/Message.torp +1 -1
  50. package/dist/Form/Option.torp +24 -0
  51. package/dist/Form/Select.torp +97 -0
  52. package/dist/Form/TextArea.torp +101 -0
  53. package/dist/Form/index.d.ts +192 -5
  54. package/dist/Form/index.js +21 -1
  55. package/dist/Menu/Menu.torp +16 -15
  56. package/dist/Menu/MenuButton.torp +19 -13
  57. package/dist/Menu/MenuCheck.torp +18 -14
  58. package/dist/Menu/MenuGroup.torp +4 -6
  59. package/dist/Menu/MenuIndicator.torp +5 -7
  60. package/dist/Menu/MenuPopout.torp +12 -15
  61. package/dist/Menu/MenuPopoutContent.torp +6 -8
  62. package/dist/Menu/MenuPopoutTrigger.torp +12 -14
  63. package/dist/Menu/MenuRadio.torp +14 -14
  64. package/dist/Menu/MenuRadioGroup.torp +22 -14
  65. package/dist/Menu/MenuSeparator.torp +3 -5
  66. package/dist/Menu/MenuTypes.ts +7 -5
  67. package/dist/Menu/index.d.ts +28 -22
  68. package/dist/MenuBar/MenuBar.torp +13 -14
  69. package/dist/MenuBar/MenuBarItem.torp +13 -16
  70. package/dist/MenuBar/MenuBarItemContent.torp +7 -9
  71. package/dist/MenuBar/MenuBarItemTrigger.torp +6 -9
  72. package/dist/MenuBar/index.d.ts +16 -16
  73. package/dist/Modal/Modal.torp +118 -0
  74. package/dist/Modal/ModalContent.torp +77 -0
  75. package/dist/Modal/ModalOverlay.torp +38 -0
  76. package/dist/Modal/ModalTrigger.torp +50 -0
  77. package/dist/Modal/ModalTypes.ts +22 -0
  78. package/dist/Modal/index.d.ts +108 -0
  79. package/dist/Modal/index.js +33 -0
  80. package/dist/Modal/index.js.map +1 -0
  81. package/dist/Modal/showModal.ts +19 -0
  82. package/dist/Modal/showPrompt.ts +23 -0
  83. package/dist/NavMenu/NavMenu.torp +7 -8
  84. package/dist/NavMenu/NavMenuButton.torp +6 -8
  85. package/dist/NavMenu/NavMenuElement.torp +8 -8
  86. package/dist/NavMenu/NavMenuGroup.torp +4 -6
  87. package/dist/NavMenu/NavMenuGroupHeader.torp +5 -6
  88. package/dist/NavMenu/NavMenuLink.torp +8 -11
  89. package/dist/NavMenu/NavMenuPopout.torp +25 -17
  90. package/dist/NavMenu/NavMenuPopoutButton.torp +12 -13
  91. package/dist/NavMenu/NavMenuPopoutContent.torp +12 -12
  92. package/dist/NavMenu/NavMenuSeparator.torp +3 -5
  93. package/dist/NavMenu/index.d.ts +17 -11
  94. package/dist/Notification/Notification.torp +22 -13
  95. package/dist/Notification/NotificationClose.torp +3 -5
  96. package/dist/Notification/NotificationContainer.torp +3 -5
  97. package/dist/Notification/NotificationContent.torp +3 -5
  98. package/dist/Notification/index.d.ts +4 -4
  99. package/dist/Popover/Popover.torp +31 -25
  100. package/dist/Popover/PopoverContent.torp +35 -10
  101. package/dist/Popover/PopoverTrigger.torp +24 -4
  102. package/dist/Popover/PopoverTypes.ts +1 -1
  103. package/dist/Popover/index.d.ts +16 -124
  104. package/dist/Popover/index.js +1 -163
  105. package/dist/Popover/index.js.map +1 -1
  106. package/dist/TabGroup/TabContent.torp +12 -9
  107. package/dist/TabGroup/TabGroup.torp +41 -35
  108. package/dist/TabGroup/TabGroupTypes.ts +10 -5
  109. package/dist/TabGroup/TabHeader.torp +15 -8
  110. package/dist/TabGroup/TabList.torp +4 -6
  111. package/dist/TabGroup/TabTrigger.torp +8 -9
  112. package/dist/TabGroup/index.d.ts +14 -6
  113. package/dist/icons/ArrowDown.torp +3 -1
  114. package/dist/icons/ArrowLeft.torp +3 -1
  115. package/dist/icons/ArrowRight.torp +3 -1
  116. package/dist/icons/ArrowUp.torp +3 -1
  117. package/dist/icons/Bars.torp +3 -1
  118. package/dist/icons/Check.torp +3 -1
  119. package/dist/icons/ChevronDown.torp +3 -1
  120. package/dist/icons/ChevronLeft.torp +3 -1
  121. package/dist/icons/ChevronRight.torp +3 -1
  122. package/dist/icons/ChevronUp.torp +3 -1
  123. package/dist/icons/Cross.torp +3 -1
  124. package/dist/icons/IconTypes.ts +6 -0
  125. package/dist/icons/Loading.torp +3 -1
  126. package/dist/icons/Minus.torp +3 -1
  127. package/dist/icons/Plus.torp +3 -1
  128. package/dist/icons/index.d.ts +271 -14
  129. package/dist/index.d.ts +17 -4
  130. package/dist/metafile-esm.json +1 -1
  131. package/dist/motion/fade.ts +15 -6
  132. package/dist/motion/grow.ts +23 -0
  133. package/dist/motion/index.d.ts +19 -2
  134. package/dist/motion/index.js +93 -3
  135. package/dist/motion/index.js.map +1 -1
  136. package/dist/motion/measure.ts +28 -0
  137. package/dist/motion/slide.ts +45 -0
  138. package/dist/mount/clickPopover.ts +51 -0
  139. package/dist/mount/contextPopover.ts +51 -0
  140. package/dist/mount/hoverPopover.ts +58 -0
  141. package/package.json +21 -14
  142. package/scripts/postbuild.ts +11 -1
  143. package/src/Accordion/Accordion.torp +29 -22
  144. package/src/Accordion/AccordionContent.torp +7 -8
  145. package/src/Accordion/AccordionHeader.torp +4 -6
  146. package/src/Accordion/AccordionItem.torp +15 -12
  147. package/src/Accordion/AccordionTrigger.torp +6 -7
  148. package/src/Accordion/AccordionTypes.ts +4 -3
  149. package/src/Breadcrumb/Breadcrumb.torp +9 -10
  150. package/src/Breadcrumb/BreadcrumbItem.torp +5 -7
  151. package/src/Breadcrumb/BreadcrumbSeparator.torp +3 -5
  152. package/src/Calendar/Calendar.torp +12 -13
  153. package/src/Calendar/CalendarDay.torp +3 -3
  154. package/src/Contextual/Contextual.torp +125 -0
  155. package/src/{Popover/PopoverContentContextual.torp → Contextual/ContextualContent.torp} +15 -15
  156. package/src/Contextual/ContextualTrigger.torp +66 -0
  157. package/src/Contextual/ContextualTypes.ts +30 -0
  158. package/src/Contextual/index.ts +5 -0
  159. package/src/Dialog/Dialog.torp +38 -72
  160. package/src/Dialog/DialogBody.torp +6 -8
  161. package/src/Dialog/DialogButton.torp +14 -12
  162. package/src/Dialog/DialogFooter.torp +3 -5
  163. package/src/Dialog/DialogHeader.torp +6 -8
  164. package/src/Dialog/DialogTypes.ts +3 -2
  165. package/src/Disclosure/Disclosure.torp +22 -23
  166. package/src/Disclosure/DisclosureContent.torp +7 -8
  167. package/src/Disclosure/DisclosureHeader.torp +5 -7
  168. package/src/Disclosure/DisclosureTrigger.torp +7 -8
  169. package/src/Disclosure/DisclosureTypes.ts +0 -1
  170. package/src/Drawer/Drawer.torp +101 -70
  171. package/src/Drawer/DrawerContent.torp +80 -0
  172. package/src/Drawer/DrawerOverlay.torp +38 -0
  173. package/src/Drawer/DrawerTrigger.torp +35 -0
  174. package/src/Drawer/DrawerTypes.ts +24 -0
  175. package/src/Drawer/index.ts +4 -1
  176. package/src/Form/CheckBox.torp +91 -0
  177. package/src/Form/Field.torp +2 -4
  178. package/src/Form/File.torp +106 -0
  179. package/src/Form/Form.torp +17 -10
  180. package/src/Form/FormTypes.ts +5 -0
  181. package/src/Form/Input.torp +28 -17
  182. package/src/Form/Label.torp +1 -1
  183. package/src/Form/Message.torp +1 -1
  184. package/src/Form/Option.torp +24 -0
  185. package/src/Form/Select.torp +97 -0
  186. package/src/Form/TextArea.torp +101 -0
  187. package/src/Form/index.ts +6 -1
  188. package/src/Menu/Menu.torp +16 -15
  189. package/src/Menu/MenuButton.torp +19 -13
  190. package/src/Menu/MenuCheck.torp +18 -14
  191. package/src/Menu/MenuGroup.torp +4 -6
  192. package/src/Menu/MenuIndicator.torp +5 -7
  193. package/src/Menu/MenuPopout.torp +12 -15
  194. package/src/Menu/MenuPopoutContent.torp +6 -8
  195. package/src/Menu/MenuPopoutTrigger.torp +12 -14
  196. package/src/Menu/MenuRadio.torp +14 -14
  197. package/src/Menu/MenuRadioGroup.torp +22 -14
  198. package/src/Menu/MenuSeparator.torp +3 -5
  199. package/src/Menu/MenuTypes.ts +7 -5
  200. package/src/MenuBar/MenuBar.torp +13 -14
  201. package/src/MenuBar/MenuBarItem.torp +13 -16
  202. package/src/MenuBar/MenuBarItemContent.torp +7 -9
  203. package/src/MenuBar/MenuBarItemTrigger.torp +6 -9
  204. package/src/Modal/Modal.torp +118 -0
  205. package/src/Modal/ModalContent.torp +77 -0
  206. package/src/Modal/ModalOverlay.torp +38 -0
  207. package/src/Modal/ModalTrigger.torp +50 -0
  208. package/src/Modal/ModalTypes.ts +22 -0
  209. package/src/Modal/index.ts +10 -0
  210. package/src/Modal/showModal.ts +19 -0
  211. package/src/Modal/showPrompt.ts +23 -0
  212. package/src/NavMenu/NavMenu.torp +7 -8
  213. package/src/NavMenu/NavMenuButton.torp +6 -8
  214. package/src/NavMenu/NavMenuElement.torp +8 -8
  215. package/src/NavMenu/NavMenuGroup.torp +4 -6
  216. package/src/NavMenu/NavMenuGroupHeader.torp +5 -6
  217. package/src/NavMenu/NavMenuLink.torp +8 -11
  218. package/src/NavMenu/NavMenuPopout.torp +25 -17
  219. package/src/NavMenu/NavMenuPopoutButton.torp +12 -13
  220. package/src/NavMenu/NavMenuPopoutContent.torp +12 -12
  221. package/src/NavMenu/NavMenuSeparator.torp +3 -5
  222. package/src/Notification/Notification.torp +22 -13
  223. package/src/Notification/NotificationClose.torp +3 -5
  224. package/src/Notification/NotificationContainer.torp +3 -5
  225. package/src/Notification/NotificationContent.torp +3 -5
  226. package/src/Popover/Popover.torp +31 -25
  227. package/src/Popover/PopoverContent.torp +35 -10
  228. package/src/Popover/PopoverTrigger.torp +24 -4
  229. package/src/Popover/PopoverTypes.ts +1 -1
  230. package/src/Popover/index.ts +1 -24
  231. package/src/Slider/Slider.torp +3 -3
  232. package/src/TabGroup/TabContent.torp +12 -9
  233. package/src/TabGroup/TabGroup.torp +41 -35
  234. package/src/TabGroup/TabGroupTypes.ts +10 -5
  235. package/src/TabGroup/TabHeader.torp +15 -8
  236. package/src/TabGroup/TabList.torp +4 -6
  237. package/src/TabGroup/TabTrigger.torp +8 -9
  238. package/src/icons/ArrowDown.torp +3 -1
  239. package/src/icons/ArrowLeft.torp +3 -1
  240. package/src/icons/ArrowRight.torp +3 -1
  241. package/src/icons/ArrowUp.torp +3 -1
  242. package/src/icons/Bars.torp +3 -1
  243. package/src/icons/Check.torp +3 -1
  244. package/src/icons/ChevronDown.torp +3 -1
  245. package/src/icons/ChevronLeft.torp +3 -1
  246. package/src/icons/ChevronRight.torp +3 -1
  247. package/src/icons/ChevronUp.torp +3 -1
  248. package/src/icons/Cross.torp +3 -1
  249. package/src/icons/IconTypes.ts +6 -0
  250. package/src/icons/Loading.torp +3 -1
  251. package/src/icons/Minus.torp +3 -1
  252. package/src/icons/Plus.torp +3 -1
  253. package/src/motion/fade.ts +15 -6
  254. package/src/motion/grow.ts +23 -0
  255. package/src/motion/index.ts +4 -1
  256. package/src/motion/measure.ts +28 -0
  257. package/src/motion/slide.ts +45 -0
  258. package/src/mount/clickPopover.ts +51 -0
  259. package/src/mount/contextPopover.ts +51 -0
  260. package/src/mount/hoverPopover.ts +58 -0
  261. package/test/Accordion/components/AccordionAccessibility.torp +1 -3
  262. package/test/Accordion/components/AccordionKeyboard.torp +1 -3
  263. package/test/Accordion/components/AccordionList.torp +1 -3
  264. package/test/Accordion/components/AccordionMultiple.torp +2 -4
  265. package/test/Accordion/components/AccordionSingle.torp +2 -4
  266. package/test/Dialog/accessibility-modal.test.ts +2 -2
  267. package/test/Dialog/components/DialogAccessibility.torp +8 -14
  268. package/test/Dialog/components/DialogFunction.torp +20 -4
  269. package/test/Dialog/components/DialogModal.torp +30 -0
  270. package/test/Dialog/components/DialogVariable.torp +7 -7
  271. package/test/Disclosure/components/DisclosureTest.torp +1 -3
  272. package/test/Menu/components/MenuAccessibility.torp +5 -5
  273. package/test/Menu/components/MenuBasic.torp +5 -5
  274. package/test/Notification/components/NotificationFunction.torp +0 -3
  275. package/test/Notification/components/NotificationVariable.torp +1 -1
  276. package/test/Popover/components/PopoverFunction.torp +37 -0
  277. package/test/Popover/components/PopoverTrigger.torp +36 -0
  278. package/test/Popover/components/{PromptVariable.torp → PopoverVariable.torp} +5 -3
  279. package/test/Popover/function.test.ts +2 -7
  280. package/test/Popover/trigger.test.ts +27 -0
  281. package/test/Popover/variable.test.ts +2 -2
  282. package/test/TabGroup/components/TabGroupAccessibility.torp +1 -3
  283. package/test/TabGroup/components/TabGroupKeyboard.torp +1 -3
  284. package/test/TabGroup/components/TabGroupList.torp +1 -3
  285. package/test/TabGroup/components/TabGroupTrigger.torp +1 -3
  286. package/tsup.config.ts +2 -0
  287. package/dist/Popover/PopoverContentAnchored.torp +0 -113
  288. package/dist/Popover/PopoverOverlay.torp +0 -39
  289. package/dist/Popover/PopoverTriggerContextual.torp +0 -46
  290. package/dist/Popover/PopoverTriggerHover.torp +0 -47
  291. package/dist/Popover/mountClickPopover.ts +0 -50
  292. package/dist/Popover/mountContextPopover.ts +0 -50
  293. package/dist/Popover/mountHoverPopover.ts +0 -57
  294. package/dist/Popover/showPopoverPrompt.ts +0 -23
  295. package/src/Popover/PopoverContentAnchored.torp +0 -113
  296. package/src/Popover/PopoverOverlay.torp +0 -39
  297. package/src/Popover/PopoverTriggerContextual.torp +0 -46
  298. package/src/Popover/PopoverTriggerHover.torp +0 -47
  299. package/src/Popover/mountClickPopover.ts +0 -50
  300. package/src/Popover/mountContextPopover.ts +0 -50
  301. package/src/Popover/mountHoverPopover.ts +0 -57
  302. package/src/Popover/showPopoverPrompt.ts +0 -23
  303. package/test/Dialog/components/CustomDialog.torp +0 -20
  304. package/test/Popover/components/PromptFunction.torp +0 -19
@@ -0,0 +1,45 @@
1
+ import { type Animation } from "@torpor/view";
2
+ import measure from "./measure";
3
+
4
+ interface Options extends KeyframeAnimationOptions {
5
+ side: "left" | "right" | "top" | "bottom";
6
+ }
7
+
8
+ export default function slide(el: HTMLElement, options?: Options): Animation {
9
+ let position = options?.side ?? "left";
10
+ switch (position) {
11
+ case "left": {
12
+ el.style.left = "0px";
13
+ const width = measure(el, (el) => el.offsetWidth);
14
+ const keyframes = [
15
+ { transform: `translateX(-${width}px)` },
16
+ { transform: "translateX(0px)" },
17
+ ];
18
+ return { keyframes, options };
19
+ }
20
+ case "top": {
21
+ el.style.top = "0px";
22
+ const height = measure(el, (el) => el.offsetHeight);
23
+ const keyframes = [
24
+ { transform: `translateY(-${height}px)` },
25
+ { transform: "translateY(0px)" },
26
+ ];
27
+ return { keyframes, options };
28
+ }
29
+ case "right": {
30
+ el.style.right = "0px";
31
+ const width = measure(el, (el) => el.offsetWidth);
32
+ const keyframes = [{ transform: `translateX(${width}px)` }, { transform: "translateX(0px)" }];
33
+ return { keyframes, options };
34
+ }
35
+ case "bottom": {
36
+ el.style.bottom = "0px";
37
+ const height = measure(el, (el) => el.offsetHeight);
38
+ const keyframes = [
39
+ { transform: `translateY(${height}px)` },
40
+ { transform: "translateY(0px)" },
41
+ ];
42
+ return { keyframes, options };
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,51 @@
1
+ //import type { Component } from "@torpor/view";
2
+ //import showPopover from "../Modal/showModal";
3
+ //
4
+ //interface ClickPopoverOptions {
5
+ // popover: Component;
6
+ // props?: Record<PropertyKey, any>;
7
+ //}
8
+ //
9
+ ///**
10
+ // * A mount directive for showing a popover when an element is clicked.
11
+ // * @param node The element to show the popover for
12
+ // * @param options Options for showing the popover, consisting of the popover component and any props
13
+ // */
14
+ //export default function clickPopover(node: HTMLElement, options: ClickPopoverOptions) {
15
+ // const { popover, props } = options;
16
+ //
17
+ // // Add a click event handler to the node
18
+ // node.addEventListener("click", handleClick);
19
+ //
20
+ // function handleClick(e: MouseEvent) {
21
+ // e.preventDefault();
22
+ // show();
23
+ // }
24
+ //
25
+ // let div: HTMLDivElement;
26
+ //
27
+ // function show() {
28
+ // // Show the popover in a div
29
+ // if (div) {
30
+ // document.body.removeChild(div);
31
+ // }
32
+ // div = document.createElement("div");
33
+ // document.body.appendChild(div);
34
+ //
35
+ // showPopover(popover, node, props, div);
36
+ // }
37
+ //
38
+ // return {
39
+ // destroy(): void {
40
+ // // Remove the event listener from the node on destroy
41
+ // node.removeEventListener("click", handleClick);
42
+ //
43
+ // // Remove the div we added
44
+ // // TODO: Should we do this in more places?
45
+ // if (div) {
46
+ // document.body.removeChild(div);
47
+ // }
48
+ // },
49
+ // };
50
+ //}
51
+ //
@@ -0,0 +1,51 @@
1
+ //import type { Component } from "@torpor/view";
2
+ //import showPopover from "../Modal/showModal";
3
+ //
4
+ //interface ContextPopoverOptions {
5
+ // popover: Component;
6
+ // props?: Record<PropertyKey, any>;
7
+ //}
8
+ //
9
+ ///**
10
+ // * A mount directive for showing a popover when the user opens an element's context menu.
11
+ // * @param node The element to show the popover for
12
+ // * @param options Options for showing the popover, consisting of the popover component and any props
13
+ // */
14
+ //export default function contextPopover(node: HTMLElement, options: ContextPopoverOptions) {
15
+ // const { popover, props } = options;
16
+ //
17
+ // // Add a contextmenu event handler to the node
18
+ // node.addEventListener("contextmenu", handleClick);
19
+ //
20
+ // function handleClick(e: MouseEvent) {
21
+ // e.preventDefault();
22
+ // show();
23
+ // }
24
+ //
25
+ // let div: HTMLDivElement;
26
+ //
27
+ // function show() {
28
+ // // Show the popover in a div
29
+ // if (div) {
30
+ // document.body.removeChild(div);
31
+ // }
32
+ // div = document.createElement("div");
33
+ // document.body.appendChild(div);
34
+ //
35
+ // showPopover(popover, node, props, div);
36
+ // }
37
+ //
38
+ // return {
39
+ // destroy(): void {
40
+ // // Remove the event listener from the node on destroy
41
+ // node.removeEventListener("contextmenu", handleClick);
42
+ //
43
+ // // Remove the div we added
44
+ // // TODO: Should we do this in more places?
45
+ // if (div) {
46
+ // document.body.removeChild(div);
47
+ // }
48
+ // },
49
+ // };
50
+ //}
51
+ //
@@ -0,0 +1,58 @@
1
+ //import type { Component } from "@torpor/view";
2
+ //import showPopover from "../Modal/showModal";
3
+ //import hoverTrigger from "./hoverTrigger";
4
+ //
5
+ //interface HoverPopoverOptions {
6
+ // popover: Component;
7
+ // props?: Record<PropertyKey, any>;
8
+ // hoverDelay?: number;
9
+ // touchDelay?: number;
10
+ //}
11
+ //
12
+ ///**
13
+ // * A mount directive for showing a popover when an element is hovered.
14
+ // * @param node The element to show the popover for
15
+ // * @param options Options for showing the popover, consisting of the popover component, any props and delays for hover and touch
16
+ // */
17
+ //export default function hoverPopover(node: HTMLElement, options: HoverPopoverOptions): () => void {
18
+ // const { popover, props, hoverDelay, touchDelay } = options;
19
+ //
20
+ // let div: HTMLDivElement | undefined;
21
+ //
22
+ // function onHover(node: HTMLElement, e: MouseEvent | TouchEvent) {
23
+ // // Show the popover in a div
24
+ // if (div) {
25
+ // document.body.removeChild(div);
26
+ // }
27
+ // div = document.createElement("div");
28
+ // document.body.appendChild(div);
29
+ //
30
+ // // Get the position relative to the element, so we can reposition on scroll
31
+ // const rect = node.getBoundingClientRect();
32
+ // let position: { x: number; y: number };
33
+ // if (e.type.startsWith("mouse")) {
34
+ // const me = e as MouseEvent;
35
+ // position = { x: me.clientX - rect.left, y: me.clientY - rect.top };
36
+ // } else {
37
+ // const te = e as TouchEvent;
38
+ // position = {
39
+ // x: te.touches[0].clientX - rect.left,
40
+ // y: te.touches[0].clientY - rect.top,
41
+ // };
42
+ // }
43
+ // const allProps = Object.assign({}, props, { anchor: node, position });
44
+ //
45
+ // showPopover(popover, node, allProps, div);
46
+ // }
47
+ //
48
+ // function onExit() {
49
+ // // Remove the div
50
+ // if (div) {
51
+ // document.body.removeChild(div);
52
+ // div = undefined;
53
+ // }
54
+ // }
55
+ //
56
+ // return hoverTrigger(node, { onHover, onExit, hoverDelay, touchDelay });
57
+ //}
58
+ //
@@ -6,9 +6,7 @@ import {
6
6
  AccordionContent,
7
7
  } from "../../../src/Accordion/index";
8
8
 
9
- export default function AccordionAccessibility() {
10
- $props ??= $watch({});
11
-
9
+ export default function AccordionAccessibility($props: any) {
12
10
  @render {
13
11
  <Accordion value={$props.value} type="multiple">
14
12
  <AccordionItem>
@@ -6,9 +6,7 @@ import {
6
6
  AccordionContent,
7
7
  } from "../../../src/Accordion/index";
8
8
 
9
- export default function AccordionKeyboard() {
10
- $props ??= $watch({});
11
-
9
+ export default function AccordionKeyboard($props: any) {
12
10
  @render {
13
11
  <Accordion value={$props.value} type="multiple">
14
12
  <AccordionItem>
@@ -6,9 +6,7 @@ import {
6
6
  AccordionContent,
7
7
  } from "../../../src/Accordion/index";
8
8
 
9
- export default function AccordionList() {
10
- $props ??= $watch({});
11
-
9
+ export default function AccordionList($props: any) {
12
10
  @render {
13
11
  <Accordion value={$props.value}>
14
12
  @for (let item of $props.items) {
@@ -6,11 +6,9 @@ import {
6
6
  AccordionContent,
7
7
  } from "../../../src/Accordion/index";
8
8
 
9
- export default function AccordionMultiple() {
10
- $props ??= $watch({});
11
-
9
+ export default function AccordionMultiple($props: any) {
12
10
  @render {
13
- <Accordion value={$props.value} type="multiple">
11
+ <Accordion value={$props?.value} type="multiple">
14
12
  <AccordionItem>
15
13
  <AccordionHeader as="h4">
16
14
  <AccordionTrigger>Header 1</AccordionTrigger>
@@ -6,11 +6,9 @@ import {
6
6
  AccordionContent,
7
7
  } from "../../../src/Accordion/index";
8
8
 
9
- export default function AccordionSingle() {
10
- $props ??= $watch({});
11
-
9
+ export default function AccordionSingle($props: any) {
12
10
  @render {
13
- <Accordion value={$props.value}>
11
+ <Accordion value={$props?.value}>
14
12
  <AccordionItem>
15
13
  <AccordionHeader as="h4">
16
14
  <AccordionTrigger>Header 1</AccordionTrigger>
@@ -2,13 +2,13 @@ import { queryByText } from "@testing-library/dom";
2
2
  import "@testing-library/jest-dom/vitest";
3
3
  import { mount } from "@torpor/view";
4
4
  import { assert, describe, expect, it } from "vitest";
5
- import DialogAccessibility from "./components/DialogAccessibility.torp";
5
+ import DialogModal from "./components/DialogModal.torp";
6
6
 
7
7
  describe("Dialog", () => {
8
8
  it("Accessibility -- modal", async () => {
9
9
  const container = document.createElement("div");
10
10
  document.body.appendChild(container);
11
- mount(container, DialogAccessibility, { modal: true, ariaAnnounce: false });
11
+ mount(container, DialogModal, { modal: true, ariaAnnounce: false });
12
12
 
13
13
  // Tests from https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/
14
14
  // This is for a Dialog in a Popover with its modal property set to true
@@ -1,4 +1,3 @@
1
- import { Popover, PopoverContent } from "../../../src/Popover/index";
2
1
  import {
3
2
  Dialog,
4
3
  DialogHeader,
@@ -8,24 +7,19 @@ import {
8
7
  } from "../../../src/Dialog/index";
9
8
 
10
9
  export default function DialogAccessibility($props: any) {
11
- $props.modal ??= false;
12
10
  $props.alert ??= false;
13
11
  $props.ariaAnnounce ??= true;
14
12
 
15
13
  let color = "";
16
14
 
17
15
  @render {
18
- <Popover visible modal={$props.modal}>
19
- <PopoverContent>
20
- <Dialog alert={$props.alert}>
21
- <DialogHeader>Color preference</DialogHeader>
22
- <DialogBody ariaAnnounce={$props.ariaAnnounce}>Which color do you prefer?</DialogBody>
23
- <DialogFooter>
24
- <DialogButton value="blue" onclick={() => (color = "blue")}>Blue</DialogButton>
25
- <DialogButton value="red" onclick={() => (color = "red")}>Red</DialogButton>
26
- </DialogFooter>
27
- </Dialog>
28
- </PopoverContent>
29
- </Popover>
16
+ <Dialog alert={$props.alert}>
17
+ <DialogHeader>Color preference</DialogHeader>
18
+ <DialogBody ariaAnnounce={$props.ariaAnnounce}>Which color do you prefer?</DialogBody>
19
+ <DialogFooter>
20
+ <DialogButton value="blue" onclick={() => (color = "blue")}>Blue</DialogButton>
21
+ <DialogButton value="red" onclick={() => (color = "red")}>Red</DialogButton>
22
+ </DialogFooter>
23
+ </Dialog>
30
24
  }
31
25
  }
@@ -1,12 +1,11 @@
1
- import { showPopoverPrompt } from "../../../src/Popover";
2
- import CustomDialog from "./CustomDialog.torp";
1
+ import { Modal, ModalContent, showPrompt } from "../../../src/Modal/index";
2
+ import { Dialog, DialogBody, DialogFooter, DialogButton } from "../../../src/Dialog/index";
3
3
 
4
4
  export default function DialogFunction($props: any) {
5
5
  let $state = $watch({ color: "" });
6
6
 
7
7
  async function show() {
8
- // @ts-ignore
9
- $state.color = await showPopoverPrompt(CustomDialog, null, $parent);
8
+ $state.color = await showPrompt(CustomDialog, null, $parent);
10
9
  }
11
10
 
12
11
  @render {
@@ -18,3 +17,20 @@ export default function DialogFunction($props: any) {
18
17
  }
19
18
  }
20
19
 
20
+ function CustomDialog($props: any) {
21
+ @render {
22
+ <Modal visible callback={$props.callback}>
23
+ <ModalContent>
24
+ <Dialog>
25
+ <DialogBody>
26
+ <p>Which color do you prefer?</p>
27
+ </DialogBody>
28
+ <DialogFooter>
29
+ <DialogButton value="blue">Blue</DialogButton>
30
+ <DialogButton value="red">Red</DialogButton>
31
+ </DialogFooter>
32
+ </Dialog>
33
+ </ModalContent>
34
+ </Modal>
35
+ }
36
+ }
@@ -0,0 +1,30 @@
1
+ import { Modal, ModalContent } from "../../../src/Modal/index";
2
+ import {
3
+ Dialog,
4
+ DialogHeader,
5
+ DialogBody,
6
+ DialogFooter,
7
+ DialogButton
8
+ } from "../../../src/Dialog/index";
9
+
10
+ export default function DialogModal($props: any) {
11
+ $props.alert ??= false;
12
+ $props.ariaAnnounce ??= true;
13
+
14
+ let color = "";
15
+
16
+ @render {
17
+ <Modal visible>
18
+ <ModalContent>
19
+ <Dialog alert={$props.alert}>
20
+ <DialogHeader>Color preference</DialogHeader>
21
+ <DialogBody ariaAnnounce={$props.ariaAnnounce}>Which color do you prefer?</DialogBody>
22
+ <DialogFooter>
23
+ <DialogButton value="blue" onclick={() => (color = "blue")}>Blue</DialogButton>
24
+ <DialogButton value="red" onclick={() => (color = "red")}>Red</DialogButton>
25
+ </DialogFooter>
26
+ </Dialog>
27
+ </ModalContent>
28
+ </Modal>
29
+ }
30
+ }
@@ -1,14 +1,14 @@
1
- import { Popover, PopoverContent } from "../../../src/Popover/index";
1
+ import { Modal, ModalContent } from "../../../src/Modal/index";
2
2
  import { Dialog, DialogBody, DialogFooter, DialogButton } from "../../../src/Dialog/index";
3
3
 
4
4
  export default function DialogVariable($props: any) {
5
5
  let $state = $watch({
6
6
  color: "",
7
- showPopover: false
7
+ showModal: false
8
8
  });
9
9
 
10
10
  @render {
11
- <button type="button" onclick={(e) => ($state.showPopover = !$state.showPopover)}>
11
+ <button type="button" onclick={(e) => ($state.showModal = !$state.showModal)}>
12
12
  Show the modal
13
13
  </button>
14
14
 
@@ -16,8 +16,8 @@ export default function DialogVariable($props: any) {
16
16
  <p>Your favorite color is {$state.color}?!</p>
17
17
  }
18
18
 
19
- <Popover visible={$state.showPopover}>
20
- <PopoverContent>
19
+ <Modal &visible={$state.showModal}>
20
+ <ModalContent>
21
21
  <Dialog>
22
22
  <DialogBody>
23
23
  <p>Which color do you prefer?</p>
@@ -27,7 +27,7 @@ export default function DialogVariable($props: any) {
27
27
  <DialogButton value="red" onclick={() => ($state.color = "red")}>Red</DialogButton>
28
28
  </DialogFooter>
29
29
  </Dialog>
30
- </PopoverContent>
31
- </Popover>
30
+ </ModalContent>
31
+ </Modal>
32
32
  }
33
33
  }
@@ -6,10 +6,8 @@ import {
6
6
  } from "../../../src/Disclosure/index";
7
7
 
8
8
  export default function DisclosureAccessibility($props: { expanded: boolean }) {
9
- $props ??= $watch({ expanded: false });
10
-
11
9
  @render {
12
- <Disclosure {$props.expanded}>
10
+ <Disclosure {$props?.expanded}>
13
11
  <DisclosureHeader as="h4">
14
12
  <DisclosureTrigger>Disclosure header</DisclosureTrigger>
15
13
  </DisclosureHeader>
@@ -1,4 +1,4 @@
1
- import { Popover, PopoverContent } from "../../../src/Popover";
1
+ import { Modal, ModalContent } from "../../../src/Modal";
2
2
  import {
3
3
  Menu,
4
4
  MenuButton,
@@ -14,8 +14,8 @@ import {
14
14
 
15
15
  export default function MenuAccessibility() {
16
16
  @render {
17
- <Popover visible>
18
- <PopoverContent>
17
+ <Modal visible>
18
+ <ModalContent>
19
19
  <Menu ariaLabel="A menu">
20
20
  <MenuButton>Menu button</MenuButton>
21
21
  <MenuButton disabled>Disabled button</MenuButton>
@@ -53,7 +53,7 @@ export default function MenuAccessibility() {
53
53
  </MenuPopoutContent>
54
54
  </MenuPopout>
55
55
  </Menu>
56
- </PopoverContent>
57
- </Popover>
56
+ </ModalContent>
57
+ </Modal>
58
58
  }
59
59
  }
@@ -1,4 +1,4 @@
1
- import { Popover, PopoverContent } from "../../../src/Popover";
1
+ import { Modal, ModalContent } from "../../../src/Modal";
2
2
  import {
3
3
  Menu,
4
4
  MenuButton,
@@ -14,8 +14,8 @@ import {
14
14
 
15
15
  export default function MenuBasic() {
16
16
  @render {
17
- <Popover visible>
18
- <PopoverContent>
17
+ <Modal visible>
18
+ <ModalContent>
19
19
  <Menu ariaLabel="A menu">
20
20
  <MenuButton>Menu button</MenuButton>
21
21
  <MenuSeparator>---</MenuSeparator>
@@ -52,7 +52,7 @@ export default function MenuBasic() {
52
52
  </MenuPopoutContent>
53
53
  </MenuPopout>
54
54
  </Menu>
55
- </PopoverContent>
56
- </Popover>
55
+ </ModalContent>
56
+ </Modal>
57
57
  }
58
58
  }
@@ -1,8 +1,5 @@
1
1
  import {
2
- Notification,
3
2
  NotificationContainer,
4
- NotificationContent,
5
- NotificationClose,
6
3
  showNotification
7
4
  } from "../../../src/Notification/index";
8
5
  import CustomNotification from "./CustomNotification.torp";
@@ -10,7 +10,7 @@ export default function NotificationVariable() {
10
10
  });
11
11
 
12
12
  @render {
13
- <button type="button" onclick={(e) => ($state.showNotification = !$state.showNotification)}>
13
+ <button type="button" onclick={() => ($state.showNotification = !$state.showNotification)}>
14
14
  Show a notification
15
15
  </button>
16
16
 
@@ -0,0 +1,37 @@
1
+ import { Popover, PopoverContent, showPopover } from "../../../src/Popover/index";
2
+ import {
3
+ Dialog,
4
+ DialogBody,
5
+ DialogFooter,
6
+ DialogButton
7
+ } from "../../../src/Dialog/index";
8
+
9
+ export default function PopoverFunction() {
10
+ let anchor;
11
+
12
+ async function show() {
13
+ showPopover(CustomDialog, anchor);
14
+ }
15
+
16
+ @render {
17
+ <button type="button" &ref={anchor} onclick={show}>Show the prompt</button>
18
+ }
19
+ }
20
+
21
+ function CustomDialog($props) {
22
+ @render {
23
+ <Popover visible {$props.anchor}>
24
+ <PopoverContent>
25
+ <Dialog>
26
+ <DialogBody>
27
+ <p>Which color do you prefer?</p>
28
+ </DialogBody>
29
+ <DialogFooter>
30
+ <DialogButton value="blue">Blue</DialogButton>
31
+ <DialogButton value="red">Red</DialogButton>
32
+ </DialogFooter>
33
+ </Dialog>
34
+ </PopoverContent>
35
+ </Popover>
36
+ }
37
+ }
@@ -0,0 +1,36 @@
1
+ import { Popover, PopoverContent, PopoverTrigger } from "../../../src/Popover/index";
2
+ import {
3
+ Dialog,
4
+ DialogBody,
5
+ DialogFooter,
6
+ DialogButton
7
+ } from "../../../src/Dialog/index";
8
+
9
+ export default function PopoverTriggerTest() {
10
+ let $state = $watch({
11
+ color: "",
12
+ });
13
+
14
+ @render {
15
+ @if ($state.color) {
16
+ <p>Your favorite color is {$state.color}?!</p>
17
+ }
18
+
19
+ <Popover &visible={$state.showPopover}>
20
+ <PopoverTrigger>
21
+ Show the prompt
22
+ </PopoverTrigger>
23
+ <PopoverContent>
24
+ <Dialog>
25
+ <DialogBody>
26
+ <p>Which color do you prefer?</p>
27
+ </DialogBody>
28
+ <DialogFooter>
29
+ <DialogButton value="blue" onclick={() => ($state.color = "blue")}>Blue</DialogButton>
30
+ <DialogButton value="red" onclick={() => ($state.color = "red")}>Red</DialogButton>
31
+ </DialogFooter>
32
+ </Dialog>
33
+ </PopoverContent>
34
+ </Popover>
35
+ }
36
+ }
@@ -6,14 +6,16 @@ import {
6
6
  DialogButton
7
7
  } from "../../../src/Dialog/index";
8
8
 
9
- export default function PromptVariable() {
9
+ export default function PopoverVariable() {
10
10
  let $state = $watch({
11
11
  color: "",
12
12
  showPopover: false
13
13
  });
14
14
 
15
+ let button: HTMLButtonElement;
16
+
15
17
  @render {
16
- <button type="button" onclick={(e) => ($state.showPopover = !$state.showPopover)}>
18
+ <button type="button" onclick={() => ($state.showPopover = !$state.showPopover)} &ref={button}>
17
19
  Show the prompt
18
20
  </button>
19
21
 
@@ -21,7 +23,7 @@ export default function PromptVariable() {
21
23
  <p>Your favorite color is {$state.color}?!</p>
22
24
  }
23
25
 
24
- <Popover &visible={$state.showPopover}>
26
+ <Popover &visible={$state.showPopover} anchor={button}>
25
27
  <PopoverContent>
26
28
  <Dialog>
27
29
  <DialogBody>
@@ -3,13 +3,13 @@ import "@testing-library/jest-dom/vitest";
3
3
  import userEvent from "@testing-library/user-event";
4
4
  import { mount } from "@torpor/view";
5
5
  import { describe, expect, it } from "vitest";
6
- import PromptFunction from "./components/PromptFunction.torp";
6
+ import PopoverFunction from "./components/PopoverFunction.torp";
7
7
 
8
8
  describe("Prompt", () => {
9
9
  it("Showing with a function", async () => {
10
10
  const container = document.createElement("div");
11
11
  document.body.appendChild(container);
12
- mount(container, PromptFunction);
12
+ mount(container, PopoverFunction);
13
13
 
14
14
  // By default, the prompt shouldn't be shown
15
15
  expect(queryByText(container, "Which color do you prefer?")).not.toBeInTheDocument();
@@ -17,10 +17,5 @@ describe("Prompt", () => {
17
17
  // Clicking the button should show the prompt
18
18
  await userEvent.click(getByText(container, "Show the prompt"));
19
19
  expect(queryByText(container, "Which color do you prefer?")).toBeInTheDocument();
20
-
21
- // Clicking the blue button should hide the prompt and set the value
22
- await userEvent.click(getByText(container, "Blue"));
23
- expect(queryByText(container, "Which color do you prefer?")).not.toBeInTheDocument();
24
- expect(queryByText(container, "Your favorite color is blue?!")).toBeInTheDocument();
25
20
  });
26
21
  });