@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
@@ -1,39 +0,0 @@
1
- import { disableScroll } from "../mount/disableScroll";
2
- import { PopoverContextName, type PopoverContext } from "./PopoverTypes";
3
-
4
- interface PopoverOverlayProps {
5
- /** An ID for the root element */
6
- id?: string;
7
- /** Class name(s) for the root element */
8
- class?: string,
9
- }
10
-
11
- /**
12
- * The background overlay for a Popover. Adding an overlay automatically sets the Popover to modal.
13
- */
14
- export default function PopoverOverlay($props: PopoverOverlayProps) {
15
- $props ??= $watch({});
16
-
17
- // Get stuff out of the PopoverContext
18
- const context = $context[PopoverContextName] as PopoverContext;
19
- if (!context) {
20
- throw new Error("PopoverOverlay must be contained within a Popover");
21
- }
22
- let $state = context.state;
23
-
24
- // Any Popover with an overlay is modal
25
- context.modal = true;
26
-
27
- @render {
28
- @if ($state.visible) {
29
- <div
30
- {$props.id}
31
- class={`torp-popover-overlay ${$props.class ?? ""}`.trim()}
32
- tabindex="-1"
33
- onmount={(el) => disableScroll(el)}
34
- >
35
- <slot />
36
- </div>
37
- }
38
- }
39
- }
@@ -1,46 +0,0 @@
1
- import { PopoverContextName, type PopoverContext } from "./PopoverTypes";
2
-
3
- interface PopoverTriggerContextualProps {
4
- /** An ID for the root element */
5
- id?: string;
6
- /** Class name(s) for the root element */
7
- class?: string,
8
- }
9
-
10
- /**
11
- * The element that causes a Popover to appear or disappear when right-clicked.
12
- */
13
- export default function PopoverTriggerContextual($props: PopoverTriggerContextualProps) {
14
- $props ??= $watch({});
15
-
16
- // Get stuff out of the PopoverContext
17
- const context = $context[PopoverContextName] as PopoverContext;
18
- if (!context) {
19
- throw new Error("PopoverTriggerContextual must be contained within a Popover");
20
- }
21
- let $state = context.state;
22
-
23
- function handleContextual(e: MouseEvent & { currentTarget: EventTarget & HTMLDivElement }) {
24
- e.preventDefault();
25
- if ($state.position) {
26
- // Get the position relative to the element, so we can reposition on scroll
27
- const rect = e.currentTarget.getBoundingClientRect();
28
- const x = e.clientX - rect.left;
29
- const y = e.clientY - rect.top;
30
- $state.position = { x, y };
31
- //$state.position = { x: window.scrollX + e.clientX, y: window.scrollY + e.clientY };
32
- }
33
- $state.visible = !$state.visible;
34
- }
35
-
36
- @render {
37
- <div
38
- {$props.id}
39
- class={`torp-popover-trigger-contextual ${$props.class ?? ""}`.trim()}
40
- oncontextmenu={handleContextual}
41
- &ref={context.anchorElement}
42
- >
43
- <slot />
44
- </div>
45
- }
46
- }
@@ -1,47 +0,0 @@
1
-
2
- import { PopoverContextName, type PopoverContext } from "./PopoverTypes";
3
- import hoverTrigger from "../mount/hoverTrigger";
4
-
5
- interface PopoverTriggerHoverProps {
6
- /** An ID for the root element */
7
- id?: string;
8
- /** Class name(s) for the root element */
9
- class?: string,
10
- }
11
-
12
- /**
13
- * The div that causes a Popover to appear or disappear when hovered.
14
- */
15
- export default function PopoverTriggerHover($props: PopoverTriggerHoverProps) {
16
- $props ??= $watch({});
17
-
18
- // Get stuff out of the PopoverContext
19
- const context = $context[PopoverContextName] as PopoverContext;
20
- if (!context) {
21
- throw new Error("PopoverTriggerHover must be contained within a Popover");
22
- }
23
- let $state = context.state;
24
-
25
- function handleHover(node: HTMLElement, e: TouchEvent | MouseEvent) {
26
- if ($state.position) {
27
- // Get the position relative to the element, so we can reposition on scroll
28
- const rect = node.getBoundingClientRect();
29
- const x = e.clientX - rect.left;
30
- const y = e.clientY - rect.top;
31
- $state.position = { x, y };
32
- //$state.position = { x: window.scrollX + e.clientX, y: window.scrollY + e.clientY };
33
- }
34
- $state.visible = !$state.visible
35
- }
36
-
37
- @render {
38
- <div
39
- {$props.id}
40
- class={`torp-popover-trigger-hover ${$props.class ?? ""}`.trim()}
41
- onmount={(el) => hoverTrigger(el, { onHover: handleHover, onExit: handleHover })}
42
- &ref={context.anchorElement}
43
- >
44
- <slot />
45
- </div>
46
- }
47
- }
@@ -1,50 +0,0 @@
1
- import type { Component } from "@torpor/view";
2
- import showPopover from "./showPopover";
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
- }
@@ -1,50 +0,0 @@
1
- import type { Component } from "@torpor/view";
2
- import showPopover from "./showPopover";
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
- }
@@ -1,57 +0,0 @@
1
- import type { Component } from "@torpor/view";
2
- import hoverTrigger from "../mount/hoverTrigger";
3
- import showPopover from "./showPopover";
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
- }
@@ -1,23 +0,0 @@
1
- import type { Component } from "@torpor/view";
2
-
3
- /**
4
- * Shows a popover component in code, and asynchronously returns the value selected by the user.
5
- * @param popover The popover component
6
- * @param props The properties for the popover component
7
- * @param target The target element to show the popover in
8
- * @returns The value selected by the user
9
- */
10
- export default function showPopoverPrompt(
11
- popover: Component,
12
- props?: Record<PropertyKey, any>,
13
- target?: Element,
14
- ): Promise<void> {
15
- return new Promise((resolve) => {
16
- // Add the promise as the callback
17
- const allProps = Object.assign({}, props, { callback: resolve });
18
-
19
- // Create the popover
20
- // TODO: This needs to clean up after itself, like the use methods do
21
- popover(target || document.body, null, allProps);
22
- });
23
- }
@@ -1,20 +0,0 @@
1
- import { Popover, PopoverContent } from "../../../src/Popover/index";
2
- import { Dialog, DialogBody, DialogFooter, DialogButton } from "../../../src/Dialog/index";
3
-
4
- export default function CustomDialog($props: any) {
5
- @render {
6
- <Popover visible callback={$props.callback}>
7
- <PopoverContent>
8
- <Dialog>
9
- <DialogBody>
10
- <p>Which color do you prefer?</p>
11
- </DialogBody>
12
- <DialogFooter>
13
- <DialogButton value="blue">Blue</DialogButton>
14
- <DialogButton value="red">Red</DialogButton>
15
- </DialogFooter>
16
- </Dialog>
17
- </PopoverContent>
18
- </Popover>
19
- }
20
- }
@@ -1,19 +0,0 @@
1
- import { showPopover } from "../../../src/Popover/index";
2
- import CustomDialog from "./CustomDialog.torp";
3
-
4
- export default function PromptFunction() {
5
- let anchor;
6
- let $state = $watch({ color: "" });
7
-
8
- async function show() {
9
- showPopover(CustomDialog, anchor, { callback: (x) => $state.color = x });
10
- }
11
-
12
- @render {
13
- <button type="button" &ref={anchor} onclick={show}>Show the prompt</button>
14
-
15
- @if ($state.color) {
16
- <p>Your favorite color is {$state.color}?!</p>
17
- }
18
- }
19
- }