@deepfuture/dui-components 0.0.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 (380) hide show
  1. package/accordion/accordion-context.d.ts +15 -0
  2. package/accordion/accordion-context.js +3 -0
  3. package/accordion/accordion-item.d.ts +22 -0
  4. package/accordion/accordion-item.js +254 -0
  5. package/accordion/accordion.d.ts +20 -0
  6. package/accordion/accordion.js +185 -0
  7. package/accordion/index.d.ts +3 -0
  8. package/accordion/index.js +2 -0
  9. package/accordion/register.d.ts +1 -0
  10. package/accordion/register.js +8 -0
  11. package/alert-dialog/alert-dialog-close.d.ts +15 -0
  12. package/alert-dialog/alert-dialog-close.js +35 -0
  13. package/alert-dialog/alert-dialog-context.d.ts +13 -0
  14. package/alert-dialog/alert-dialog-context.js +3 -0
  15. package/alert-dialog/alert-dialog-popup.d.ts +34 -0
  16. package/alert-dialog/alert-dialog-popup.js +260 -0
  17. package/alert-dialog/alert-dialog-trigger.d.ts +15 -0
  18. package/alert-dialog/alert-dialog-trigger.js +52 -0
  19. package/alert-dialog/alert-dialog.d.ts +30 -0
  20. package/alert-dialog/alert-dialog.js +97 -0
  21. package/alert-dialog/index.d.ts +6 -0
  22. package/alert-dialog/index.js +4 -0
  23. package/alert-dialog/register.d.ts +1 -0
  24. package/alert-dialog/register.js +16 -0
  25. package/all.d.ts +86 -0
  26. package/all.js +191 -0
  27. package/avatar/avatar.d.ts +41 -0
  28. package/avatar/avatar.js +188 -0
  29. package/avatar/index.d.ts +2 -0
  30. package/avatar/index.js +1 -0
  31. package/avatar/register.d.ts +1 -0
  32. package/avatar/register.js +4 -0
  33. package/badge/badge.d.ts +14 -0
  34. package/badge/badge.js +43 -0
  35. package/badge/index.d.ts +2 -0
  36. package/badge/index.js +1 -0
  37. package/badge/register.d.ts +1 -0
  38. package/badge/register.js +4 -0
  39. package/breadcrumb/breadcrumb-ellipsis.d.ts +14 -0
  40. package/breadcrumb/breadcrumb-ellipsis.js +39 -0
  41. package/breadcrumb/breadcrumb-item.d.ts +13 -0
  42. package/breadcrumb/breadcrumb-item.js +31 -0
  43. package/breadcrumb/breadcrumb-link.d.ts +14 -0
  44. package/breadcrumb/breadcrumb-link.js +32 -0
  45. package/breadcrumb/breadcrumb-page.d.ts +13 -0
  46. package/breadcrumb/breadcrumb-page.js +36 -0
  47. package/breadcrumb/breadcrumb-separator.d.ts +14 -0
  48. package/breadcrumb/breadcrumb-separator.js +36 -0
  49. package/breadcrumb/breadcrumb.d.ts +14 -0
  50. package/breadcrumb/breadcrumb.js +38 -0
  51. package/breadcrumb/index.d.ts +6 -0
  52. package/breadcrumb/index.js +6 -0
  53. package/breadcrumb/register.d.ts +1 -0
  54. package/breadcrumb/register.js +14 -0
  55. package/button/button.d.ts +38 -0
  56. package/button/button.js +143 -0
  57. package/button/index.d.ts +2 -0
  58. package/button/index.js +1 -0
  59. package/button/register.d.ts +1 -0
  60. package/button/register.js +4 -0
  61. package/calendar/calendar.d.ts +33 -0
  62. package/calendar/calendar.js +428 -0
  63. package/calendar/index.d.ts +1 -0
  64. package/calendar/index.js +1 -0
  65. package/calendar/register.d.ts +1 -0
  66. package/calendar/register.js +4 -0
  67. package/center/center.d.ts +14 -0
  68. package/center/center.js +37 -0
  69. package/center/index.d.ts +1 -0
  70. package/center/index.js +1 -0
  71. package/center/register.d.ts +1 -0
  72. package/center/register.js +4 -0
  73. package/checkbox/checkbox-group-context.d.ts +11 -0
  74. package/checkbox/checkbox-group-context.js +3 -0
  75. package/checkbox/checkbox-group.d.ts +34 -0
  76. package/checkbox/checkbox-group.js +128 -0
  77. package/checkbox/checkbox.d.ts +46 -0
  78. package/checkbox/checkbox.js +314 -0
  79. package/checkbox/index.d.ts +3 -0
  80. package/checkbox/index.js +2 -0
  81. package/checkbox/register.d.ts +1 -0
  82. package/checkbox/register.js +8 -0
  83. package/collapsible/collapsible.d.ts +22 -0
  84. package/collapsible/collapsible.js +227 -0
  85. package/collapsible/index.d.ts +1 -0
  86. package/collapsible/index.js +1 -0
  87. package/collapsible/register.d.ts +1 -0
  88. package/collapsible/register.js +4 -0
  89. package/combobox/combobox.d.ts +46 -0
  90. package/combobox/combobox.js +524 -0
  91. package/combobox/index.d.ts +2 -0
  92. package/combobox/index.js +1 -0
  93. package/combobox/register.d.ts +1 -0
  94. package/combobox/register.js +4 -0
  95. package/command/command-context.d.ts +30 -0
  96. package/command/command-context.js +3 -0
  97. package/command/command-empty.d.ts +10 -0
  98. package/command/command-empty.js +50 -0
  99. package/command/command-group.d.ts +15 -0
  100. package/command/command-group.js +79 -0
  101. package/command/command-input.d.ts +13 -0
  102. package/command/command-input.js +106 -0
  103. package/command/command-item.d.ts +20 -0
  104. package/command/command-item.js +175 -0
  105. package/command/command-list.d.ts +9 -0
  106. package/command/command-list.js +43 -0
  107. package/command/command-score.d.ts +6 -0
  108. package/command/command-score.js +31 -0
  109. package/command/command-separator.d.ts +7 -0
  110. package/command/command-separator.js +15 -0
  111. package/command/command-shortcut.d.ts +7 -0
  112. package/command/command-shortcut.js +16 -0
  113. package/command/command.d.ts +25 -0
  114. package/command/command.js +278 -0
  115. package/command/index.d.ts +10 -0
  116. package/command/index.js +9 -0
  117. package/command/register.d.ts +1 -0
  118. package/command/register.js +22 -0
  119. package/data-table/data-table.d.ts +59 -0
  120. package/data-table/data-table.js +416 -0
  121. package/data-table/index.d.ts +2 -0
  122. package/data-table/index.js +1 -0
  123. package/data-table/register.d.ts +1 -0
  124. package/data-table/register.js +4 -0
  125. package/dialog/dialog-close.d.ts +15 -0
  126. package/dialog/dialog-close.js +35 -0
  127. package/dialog/dialog-context.d.ts +13 -0
  128. package/dialog/dialog-context.js +3 -0
  129. package/dialog/dialog-popup.d.ts +36 -0
  130. package/dialog/dialog-popup.js +277 -0
  131. package/dialog/dialog-trigger.d.ts +15 -0
  132. package/dialog/dialog-trigger.js +52 -0
  133. package/dialog/dialog.d.ts +30 -0
  134. package/dialog/dialog.js +97 -0
  135. package/dialog/index.d.ts +6 -0
  136. package/dialog/index.js +4 -0
  137. package/dialog/register.d.ts +1 -0
  138. package/dialog/register.js +16 -0
  139. package/dropzone/dropzone.d.ts +74 -0
  140. package/dropzone/dropzone.js +357 -0
  141. package/dropzone/index.d.ts +2 -0
  142. package/dropzone/index.js +1 -0
  143. package/dropzone/register.d.ts +1 -0
  144. package/dropzone/register.js +4 -0
  145. package/field/field-context.d.ts +20 -0
  146. package/field/field-context.js +2 -0
  147. package/field/index.d.ts +2 -0
  148. package/field/index.js +1 -0
  149. package/global.d.ts +189 -0
  150. package/hstack/hstack.d.ts +25 -0
  151. package/hstack/hstack.js +141 -0
  152. package/hstack/index.d.ts +2 -0
  153. package/hstack/index.js +1 -0
  154. package/hstack/register.d.ts +1 -0
  155. package/hstack/register.js +4 -0
  156. package/icon/icon.d.ts +16 -0
  157. package/icon/icon.js +34 -0
  158. package/icon/index.d.ts +1 -0
  159. package/icon/index.js +1 -0
  160. package/icon/register.d.ts +1 -0
  161. package/icon/register.js +4 -0
  162. package/input/index.d.ts +1 -0
  163. package/input/index.js +1 -0
  164. package/input/input.d.ts +47 -0
  165. package/input/input.js +205 -0
  166. package/input/register.d.ts +1 -0
  167. package/input/register.js +4 -0
  168. package/link/index.d.ts +1 -0
  169. package/link/index.js +1 -0
  170. package/link/link.d.ts +27 -0
  171. package/link/link.js +57 -0
  172. package/link/register.d.ts +1 -0
  173. package/link/register.js +4 -0
  174. package/menu/index.d.ts +2 -0
  175. package/menu/index.js +2 -0
  176. package/menu/menu-item.d.ts +17 -0
  177. package/menu/menu-item.js +62 -0
  178. package/menu/menu.d.ts +15 -0
  179. package/menu/menu.js +228 -0
  180. package/menu/register.d.ts +1 -0
  181. package/menu/register.js +8 -0
  182. package/menubar/index.d.ts +2 -0
  183. package/menubar/index.js +1 -0
  184. package/menubar/menubar-context.d.ts +9 -0
  185. package/menubar/menubar-context.js +2 -0
  186. package/menubar/menubar.d.ts +19 -0
  187. package/menubar/menubar.js +130 -0
  188. package/menubar/register.d.ts +1 -0
  189. package/menubar/register.js +4 -0
  190. package/number-field/index.d.ts +1 -0
  191. package/number-field/index.js +1 -0
  192. package/number-field/number-field.d.ts +34 -0
  193. package/number-field/number-field.js +326 -0
  194. package/number-field/register.d.ts +1 -0
  195. package/number-field/register.js +4 -0
  196. package/package.json +217 -0
  197. package/page-inset/index.d.ts +1 -0
  198. package/page-inset/index.js +1 -0
  199. package/page-inset/page-inset.d.ts +28 -0
  200. package/page-inset/page-inset.js +103 -0
  201. package/page-inset/register.d.ts +1 -0
  202. package/page-inset/register.js +4 -0
  203. package/popover/index.d.ts +6 -0
  204. package/popover/index.js +4 -0
  205. package/popover/popover-close.d.ts +13 -0
  206. package/popover/popover-close.js +33 -0
  207. package/popover/popover-context.d.ts +17 -0
  208. package/popover/popover-context.js +3 -0
  209. package/popover/popover-popup.d.ts +20 -0
  210. package/popover/popover-popup.js +176 -0
  211. package/popover/popover-trigger.d.ts +13 -0
  212. package/popover/popover-trigger.js +57 -0
  213. package/popover/popover.d.ts +30 -0
  214. package/popover/popover.js +140 -0
  215. package/popover/register.d.ts +1 -0
  216. package/popover/register.js +16 -0
  217. package/portal/index.d.ts +2 -0
  218. package/portal/index.js +1 -0
  219. package/portal/portal.d.ts +29 -0
  220. package/portal/portal.js +115 -0
  221. package/portal/register.d.ts +1 -0
  222. package/portal/register.js +4 -0
  223. package/preview-card/index.d.ts +5 -0
  224. package/preview-card/index.js +3 -0
  225. package/preview-card/preview-card-context.d.ts +16 -0
  226. package/preview-card/preview-card-context.js +3 -0
  227. package/preview-card/preview-card-popup.d.ts +16 -0
  228. package/preview-card/preview-card-popup.js +167 -0
  229. package/preview-card/preview-card-trigger.d.ts +13 -0
  230. package/preview-card/preview-card-trigger.js +75 -0
  231. package/preview-card/preview-card.d.ts +34 -0
  232. package/preview-card/preview-card.js +164 -0
  233. package/preview-card/register.d.ts +1 -0
  234. package/preview-card/register.js +12 -0
  235. package/progress/index.d.ts +1 -0
  236. package/progress/index.js +1 -0
  237. package/progress/progress.d.ts +19 -0
  238. package/progress/progress.js +94 -0
  239. package/progress/register.d.ts +1 -0
  240. package/progress/register.js +4 -0
  241. package/radio/index.d.ts +3 -0
  242. package/radio/index.js +2 -0
  243. package/radio/radio-group-context.d.ts +11 -0
  244. package/radio/radio-group-context.js +2 -0
  245. package/radio/radio-group.d.ts +37 -0
  246. package/radio/radio-group.js +135 -0
  247. package/radio/radio.d.ts +27 -0
  248. package/radio/radio.js +204 -0
  249. package/radio/register.d.ts +1 -0
  250. package/radio/register.js +8 -0
  251. package/scroll-area/index.d.ts +1 -0
  252. package/scroll-area/index.js +1 -0
  253. package/scroll-area/register.d.ts +1 -0
  254. package/scroll-area/register.js +4 -0
  255. package/scroll-area/scroll-area.d.ts +38 -0
  256. package/scroll-area/scroll-area.js +453 -0
  257. package/select/index.d.ts +2 -0
  258. package/select/index.js +1 -0
  259. package/select/register.d.ts +1 -0
  260. package/select/register.js +4 -0
  261. package/select/select.d.ts +36 -0
  262. package/select/select.js +404 -0
  263. package/separator/index.d.ts +1 -0
  264. package/separator/index.js +1 -0
  265. package/separator/register.d.ts +1 -0
  266. package/separator/register.js +4 -0
  267. package/separator/separator.d.ts +12 -0
  268. package/separator/separator.js +50 -0
  269. package/sidebar/index.d.ts +16 -0
  270. package/sidebar/index.js +13 -0
  271. package/sidebar/register.d.ts +1 -0
  272. package/sidebar/register.js +52 -0
  273. package/sidebar/sidebar-content.d.ts +14 -0
  274. package/sidebar/sidebar-content.js +30 -0
  275. package/sidebar/sidebar-context.d.ts +15 -0
  276. package/sidebar/sidebar-context.js +3 -0
  277. package/sidebar/sidebar-footer.d.ts +12 -0
  278. package/sidebar/sidebar-footer.js +21 -0
  279. package/sidebar/sidebar-group-label.d.ts +17 -0
  280. package/sidebar/sidebar-group-label.js +49 -0
  281. package/sidebar/sidebar-group.d.ts +15 -0
  282. package/sidebar/sidebar-group.js +29 -0
  283. package/sidebar/sidebar-header.d.ts +12 -0
  284. package/sidebar/sidebar-header.js +21 -0
  285. package/sidebar/sidebar-inset.d.ts +15 -0
  286. package/sidebar/sidebar-inset.js +29 -0
  287. package/sidebar/sidebar-menu-button.d.ts +31 -0
  288. package/sidebar/sidebar-menu-button.js +201 -0
  289. package/sidebar/sidebar-menu-item.d.ts +12 -0
  290. package/sidebar/sidebar-menu-item.js +20 -0
  291. package/sidebar/sidebar-menu.d.ts +14 -0
  292. package/sidebar/sidebar-menu.js +30 -0
  293. package/sidebar/sidebar-provider.d.ts +34 -0
  294. package/sidebar/sidebar-provider.js +157 -0
  295. package/sidebar/sidebar-separator.d.ts +12 -0
  296. package/sidebar/sidebar-separator.js +24 -0
  297. package/sidebar/sidebar-trigger.d.ts +16 -0
  298. package/sidebar/sidebar-trigger.js +50 -0
  299. package/sidebar/sidebar.d.ts +21 -0
  300. package/sidebar/sidebar.js +228 -0
  301. package/slider/index.d.ts +1 -0
  302. package/slider/index.js +1 -0
  303. package/slider/register.d.ts +1 -0
  304. package/slider/register.js +4 -0
  305. package/slider/slider.d.ts +37 -0
  306. package/slider/slider.js +268 -0
  307. package/spinner/index.d.ts +1 -0
  308. package/spinner/index.js +1 -0
  309. package/spinner/register.d.ts +1 -0
  310. package/spinner/register.js +4 -0
  311. package/spinner/spinner.d.ts +18 -0
  312. package/spinner/spinner.js +138 -0
  313. package/switch/index.d.ts +1 -0
  314. package/switch/index.js +1 -0
  315. package/switch/register.d.ts +1 -0
  316. package/switch/register.js +4 -0
  317. package/switch/switch.d.ts +29 -0
  318. package/switch/switch.js +201 -0
  319. package/tabs/index.d.ts +6 -0
  320. package/tabs/index.js +5 -0
  321. package/tabs/register.d.ts +1 -0
  322. package/tabs/register.js +10 -0
  323. package/tabs/tab.d.ts +16 -0
  324. package/tabs/tab.js +98 -0
  325. package/tabs/tabs-context.d.ts +8 -0
  326. package/tabs/tabs-context.js +2 -0
  327. package/tabs/tabs-indicator.d.ts +11 -0
  328. package/tabs/tabs-indicator.js +27 -0
  329. package/tabs/tabs-list.d.ts +17 -0
  330. package/tabs/tabs-list.js +85 -0
  331. package/tabs/tabs-panel.d.ts +18 -0
  332. package/tabs/tabs-panel.js +85 -0
  333. package/tabs/tabs.d.ts +24 -0
  334. package/tabs/tabs.js +111 -0
  335. package/textarea/index.d.ts +2 -0
  336. package/textarea/index.js +1 -0
  337. package/textarea/register.d.ts +1 -0
  338. package/textarea/register.js +4 -0
  339. package/textarea/textarea.d.ts +37 -0
  340. package/textarea/textarea.js +170 -0
  341. package/toggle/index.d.ts +3 -0
  342. package/toggle/index.js +2 -0
  343. package/toggle/register.d.ts +1 -0
  344. package/toggle/register.js +8 -0
  345. package/toggle/toggle-group-context.d.ts +9 -0
  346. package/toggle/toggle-group-context.js +2 -0
  347. package/toggle/toggle-group.d.ts +27 -0
  348. package/toggle/toggle-group.js +163 -0
  349. package/toggle/toggle.d.ts +25 -0
  350. package/toggle/toggle.js +124 -0
  351. package/toolbar/index.d.ts +1 -0
  352. package/toolbar/index.js +1 -0
  353. package/toolbar/register.d.ts +1 -0
  354. package/toolbar/register.js +4 -0
  355. package/toolbar/toolbar.d.ts +15 -0
  356. package/toolbar/toolbar.js +89 -0
  357. package/tooltip/index.d.ts +5 -0
  358. package/tooltip/index.js +3 -0
  359. package/tooltip/register.d.ts +1 -0
  360. package/tooltip/register.js +12 -0
  361. package/tooltip/tooltip-context.d.ts +17 -0
  362. package/tooltip/tooltip-context.js +3 -0
  363. package/tooltip/tooltip-popup.d.ts +16 -0
  364. package/tooltip/tooltip-popup.js +162 -0
  365. package/tooltip/tooltip-trigger.d.ts +15 -0
  366. package/tooltip/tooltip-trigger.js +110 -0
  367. package/tooltip/tooltip.d.ts +36 -0
  368. package/tooltip/tooltip.js +176 -0
  369. package/trunc/index.d.ts +1 -0
  370. package/trunc/index.js +1 -0
  371. package/trunc/register.d.ts +1 -0
  372. package/trunc/register.js +4 -0
  373. package/trunc/trunc.d.ts +19 -0
  374. package/trunc/trunc.js +68 -0
  375. package/vstack/index.d.ts +1 -0
  376. package/vstack/index.js +1 -0
  377. package/vstack/register.d.ts +1 -0
  378. package/vstack/register.js +4 -0
  379. package/vstack/vstack.d.ts +17 -0
  380. package/vstack/vstack.js +83 -0
@@ -0,0 +1,3 @@
1
+ export { DuiTooltip, openChangeEvent } from "./tooltip.js";
2
+ export { DuiTooltipTrigger } from "./tooltip-trigger.js";
3
+ export { DuiTooltipPopup } from "./tooltip-popup.js";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import { DuiTooltip } from "./tooltip.js";
2
+ import { DuiTooltipTrigger } from "./tooltip-trigger.js";
3
+ import { DuiTooltipPopup } from "./tooltip-popup.js";
4
+ if (!customElements.get(DuiTooltip.tagName)) {
5
+ customElements.define(DuiTooltip.tagName, DuiTooltip);
6
+ }
7
+ if (!customElements.get(DuiTooltipTrigger.tagName)) {
8
+ customElements.define(DuiTooltipTrigger.tagName, DuiTooltipTrigger);
9
+ }
10
+ if (!customElements.get(DuiTooltipPopup.tagName)) {
11
+ customElements.define(DuiTooltipPopup.tagName, DuiTooltipPopup);
12
+ }
@@ -0,0 +1,17 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/tooltip */
2
+ export type TooltipSide = "top" | "bottom";
3
+ export type TooltipContext = {
4
+ readonly open: boolean;
5
+ readonly triggerId: string;
6
+ readonly popupId: string;
7
+ readonly side: TooltipSide;
8
+ readonly sideOffset: number;
9
+ readonly disabled: boolean;
10
+ readonly openTooltip: () => void;
11
+ readonly closeTooltip: () => void;
12
+ readonly setTriggerEl: (el: HTMLElement | undefined) => void;
13
+ readonly triggerEl: HTMLElement | undefined;
14
+ };
15
+ export declare const tooltipContext: {
16
+ __context__: TooltipContext;
17
+ };
@@ -0,0 +1,3 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/tooltip */
2
+ import { createContext } from "@lit/context";
3
+ export const tooltipContext = createContext(Symbol("dui-tooltip"));
@@ -0,0 +1,16 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/tooltip */
2
+ import { LitElement, type TemplateResult } from "lit";
3
+ /**
4
+ * `<dui-tooltip-popup>` — The tooltip popup content container.
5
+ *
6
+ * @slot - Tooltip content.
7
+ */
8
+ export declare class DuiTooltipPopup extends LitElement {
9
+ #private;
10
+ static tagName: "dui-tooltip-popup";
11
+ static styles: import("lit").CSSResult[];
12
+ /** Whether to show an arrow pointing to the trigger. */
13
+ accessor showArrow: boolean;
14
+ updated(): void;
15
+ render(): TemplateResult;
16
+ }
@@ -0,0 +1,162 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/tooltip */
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ import { css, html, LitElement } from "lit";
9
+ import { property } from "lit/decorators.js";
10
+ import { ContextConsumer } from "@lit/context";
11
+ import { base } from "@deepfuture/dui-core/base";
12
+ import { tooltipContext } from "./tooltip-context.js";
13
+ import { FloatingPortalController } from "@deepfuture/dui-core/floating-portal-controller";
14
+ import { renderArrow, } from "@deepfuture/dui-core/floating-popup-utils";
15
+ const hostStyles = css `
16
+ :host {
17
+ display: none;
18
+ }
19
+ `;
20
+ /** Styles injected into the portal positioner. */
21
+ const portalPopupStyles = [
22
+ css `
23
+ .Popup {
24
+ box-sizing: border-box;
25
+ padding: var(--space-0_5) var(--space-1_5);
26
+ border-radius: var(--radius-sm);
27
+ background: color-mix(
28
+ in oklch,
29
+ var(--foreground) 90%,
30
+ oklch(0 0 0 / 0)
31
+ );
32
+ backdrop-filter: blur(5px);
33
+ color: var(--background);
34
+ font-family: var(--font-sans);
35
+ font-size: var(--font-size-xs);
36
+ line-height: var(--line-height-snug);
37
+ box-shadow: var(--shadow-sm);
38
+ max-width: 20rem;
39
+ pointer-events: auto;
40
+ transform-origin: var(--transform-origin, center);
41
+ opacity: 1;
42
+ transform: scale(1);
43
+ transition-property: opacity, transform;
44
+ transition-duration: var(--duration-fastest);
45
+ transition-timing-function: var(--ease-out-3);
46
+ }
47
+
48
+ .Popup[data-starting-style],
49
+ .Popup[data-ending-style] {
50
+ opacity: 0;
51
+ transform: scale(0.96);
52
+ }
53
+
54
+ .Popup[data-side="top"] {
55
+ --transform-origin: bottom center;
56
+ }
57
+
58
+ .Popup[data-side="bottom"] {
59
+ --transform-origin: top center;
60
+ }
61
+
62
+ .Arrow {
63
+ position: absolute;
64
+ width: 10px;
65
+ height: 6px;
66
+ }
67
+
68
+ .Arrow[data-side="top"] {
69
+ bottom: -5px;
70
+ left: 50%;
71
+ transform: translateX(-50%);
72
+ }
73
+
74
+ .Arrow[data-side="bottom"] {
75
+ top: -5px;
76
+ left: 50%;
77
+ transform: translateX(-50%) rotate(180deg);
78
+ }
79
+
80
+ .Arrow .arrow-fill {
81
+ fill: color-mix(in oklch, var(--foreground) 90%, oklch(0 0 0 / 0));
82
+ }
83
+
84
+ .Arrow .arrow-stroke {
85
+ fill: none;
86
+ stroke: none;
87
+ }
88
+ `,
89
+ ];
90
+ /**
91
+ * `<dui-tooltip-popup>` — The tooltip popup content container.
92
+ *
93
+ * @slot - Tooltip content.
94
+ */
95
+ export class DuiTooltipPopup extends LitElement {
96
+ static { this.tagName = "dui-tooltip-popup"; }
97
+ static { this.styles = [base, hostStyles]; }
98
+ #showArrow_accessor_storage = true;
99
+ /** Whether to show an arrow pointing to the trigger. */
100
+ get showArrow() { return this.#showArrow_accessor_storage; }
101
+ set showArrow(value) { this.#showArrow_accessor_storage = value; }
102
+ #side_accessor_storage = "top";
103
+ get #side() { return this.#side_accessor_storage; }
104
+ set #side(value) { this.#side_accessor_storage = value; }
105
+ #ctx = new ContextConsumer(this, {
106
+ context: tooltipContext,
107
+ subscribe: true,
108
+ });
109
+ #wasOpen = false;
110
+ #portal = new FloatingPortalController(this, {
111
+ getAnchor: () => this.#ctx.value?.triggerEl,
112
+ matchWidth: false,
113
+ placement: "top",
114
+ offset: 6,
115
+ styles: portalPopupStyles,
116
+ contentContainer: ".Content",
117
+ onPosition: ({ placement }) => {
118
+ const actualSide = placement.split("-")[0];
119
+ if (actualSide !== this.#side) {
120
+ this.#side = actualSide;
121
+ }
122
+ },
123
+ renderPopup: (portal) => {
124
+ const popupId = this.#ctx.value?.popupId ?? "";
125
+ return html `
126
+ <div
127
+ class="Popup"
128
+ id="${popupId}"
129
+ role="tooltip"
130
+ ?data-starting-style="${portal.isStarting}"
131
+ ?data-ending-style="${portal.isEnding}"
132
+ data-side="${this.#side}"
133
+ >
134
+ <div class="Content"></div>
135
+ ${this.showArrow ? renderArrow(this.#side) : ""}
136
+ </div>
137
+ `;
138
+ },
139
+ });
140
+ updated() {
141
+ const isOpen = this.#ctx.value?.open ?? false;
142
+ if (isOpen && !this.#wasOpen) {
143
+ this.#updatePlacement();
144
+ this.#portal.open();
145
+ }
146
+ else if (!isOpen && this.#wasOpen) {
147
+ this.#portal.close();
148
+ }
149
+ this.#wasOpen = isOpen;
150
+ }
151
+ #updatePlacement() {
152
+ const side = this.#ctx.value?.side ?? "top";
153
+ this.#portal.placement = side;
154
+ this.#portal.offset = this.#ctx.value?.sideOffset ?? 6;
155
+ }
156
+ render() {
157
+ return html `<slot></slot>`;
158
+ }
159
+ }
160
+ __decorate([
161
+ property({ type: Boolean, attribute: "show-arrow" })
162
+ ], DuiTooltipPopup.prototype, "showArrow", null);
@@ -0,0 +1,15 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/tooltip */
2
+ import { LitElement, type TemplateResult } from "lit";
3
+ /**
4
+ * `<dui-tooltip-trigger>` — The element that triggers the tooltip on hover/focus.
5
+ *
6
+ * @slot - Content that triggers the tooltip.
7
+ */
8
+ export declare class DuiTooltipTrigger extends LitElement {
9
+ #private;
10
+ static tagName: "dui-tooltip-trigger";
11
+ static styles: import("lit").CSSResult[];
12
+ /** Disable the trigger. */
13
+ accessor disabled: boolean;
14
+ render(): TemplateResult;
15
+ }
@@ -0,0 +1,110 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/tooltip */
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ import { css, html, LitElement } from "lit";
9
+ import { property } from "lit/decorators.js";
10
+ import { ContextConsumer } from "@lit/context";
11
+ import { base } from "@deepfuture/dui-core/base";
12
+ import { tooltipContext } from "./tooltip-context.js";
13
+ const hostStyles = css `
14
+ :host {
15
+ display: contents;
16
+ }
17
+ `;
18
+ const componentStyles = css `
19
+ .Trigger {
20
+ display: inline-flex;
21
+ align-items: center;
22
+ justify-content: center;
23
+ background: none;
24
+ border: none;
25
+ padding: 0;
26
+ margin: 0;
27
+ font: inherit;
28
+ color: inherit;
29
+ cursor: inherit;
30
+ }
31
+
32
+ .Trigger[data-disabled] {
33
+ cursor: not-allowed;
34
+ }
35
+ `;
36
+ /**
37
+ * `<dui-tooltip-trigger>` — The element that triggers the tooltip on hover/focus.
38
+ *
39
+ * @slot - Content that triggers the tooltip.
40
+ */
41
+ export class DuiTooltipTrigger extends LitElement {
42
+ static { this.tagName = "dui-tooltip-trigger"; }
43
+ static { this.styles = [base, hostStyles, componentStyles]; }
44
+ #disabled_accessor_storage = false;
45
+ /** Disable the trigger. */
46
+ get disabled() { return this.#disabled_accessor_storage; }
47
+ set disabled(value) { this.#disabled_accessor_storage = value; }
48
+ #ctx = new ContextConsumer(this, {
49
+ context: tooltipContext,
50
+ subscribe: true,
51
+ });
52
+ #handleMouseEnter = () => {
53
+ if (this.#isDisabled)
54
+ return;
55
+ this.#updateTriggerEl();
56
+ this.#ctx.value?.openTooltip();
57
+ };
58
+ #handleMouseLeave = () => {
59
+ this.#ctx.value?.closeTooltip();
60
+ };
61
+ #handleFocus = () => {
62
+ if (this.#isDisabled)
63
+ return;
64
+ this.#updateTriggerEl();
65
+ this.#ctx.value?.openTooltip();
66
+ };
67
+ #handleBlur = () => {
68
+ this.#ctx.value?.closeTooltip();
69
+ };
70
+ #handleKeyDown = (e) => {
71
+ if (e.key === "Escape" && this.#ctx.value?.open) {
72
+ this.#ctx.value?.closeTooltip();
73
+ }
74
+ };
75
+ #updateTriggerEl() {
76
+ const trigger = this.shadowRoot?.querySelector('[part="trigger"]') ??
77
+ this;
78
+ this.#ctx.value?.setTriggerEl(trigger);
79
+ }
80
+ get #isDisabled() {
81
+ return this.disabled || (this.#ctx.value?.disabled ?? false);
82
+ }
83
+ render() {
84
+ const isOpen = this.#ctx.value?.open ?? false;
85
+ const popupId = this.#ctx.value?.popupId ?? "";
86
+ const triggerId = this.#ctx.value?.triggerId ?? "";
87
+ return html `
88
+ <span
89
+ class="Trigger"
90
+ part="trigger"
91
+ id="${triggerId}"
92
+ role="button"
93
+ tabindex="0"
94
+ aria-describedby="${isOpen ? popupId : ""}"
95
+ ?data-popup-open="${isOpen}"
96
+ ?data-disabled="${this.#isDisabled}"
97
+ @mouseenter="${this.#handleMouseEnter}"
98
+ @mouseleave="${this.#handleMouseLeave}"
99
+ @focus="${this.#handleFocus}"
100
+ @blur="${this.#handleBlur}"
101
+ @keydown="${this.#handleKeyDown}"
102
+ >
103
+ <slot></slot>
104
+ </span>
105
+ `;
106
+ }
107
+ }
108
+ __decorate([
109
+ property({ type: Boolean, reflect: true })
110
+ ], DuiTooltipTrigger.prototype, "disabled", null);
@@ -0,0 +1,36 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/tooltip */
2
+ import { LitElement, type PropertyValues, type TemplateResult } from "lit";
3
+ import { type TooltipSide } from "./tooltip-context.js";
4
+ export type TooltipOpenChangeDetail = {
5
+ open: boolean;
6
+ };
7
+ export declare const openChangeEvent: (detail: TooltipOpenChangeDetail) => CustomEvent<TooltipOpenChangeDetail>;
8
+ /**
9
+ * `<dui-tooltip>` — A tooltip root that provides context for trigger and popup.
10
+ *
11
+ * @slot - Default slot for dui-tooltip-trigger and dui-tooltip-popup.
12
+ * @fires open-change - Dispatched when the tooltip opens or closes.
13
+ */
14
+ export declare class DuiTooltip extends LitElement {
15
+ #private;
16
+ static tagName: "dui-tooltip";
17
+ static styles: import("lit").CSSResult[];
18
+ /** Controlled open state. */
19
+ accessor open: boolean;
20
+ /** Default open state for uncontrolled usage. */
21
+ accessor defaultOpen: boolean;
22
+ /** Which side of the trigger the tooltip appears on. */
23
+ accessor side: TooltipSide;
24
+ /** Offset from the trigger in pixels. */
25
+ accessor sideOffset: number;
26
+ /** Delay before opening in milliseconds. */
27
+ accessor delay: number;
28
+ /** Delay before closing in milliseconds. */
29
+ accessor closeDelay: number;
30
+ /** Disable the tooltip. */
31
+ accessor disabled: boolean;
32
+ connectedCallback(): void;
33
+ disconnectedCallback(): void;
34
+ protected willUpdate(changed: PropertyValues): void;
35
+ render(): TemplateResult;
36
+ }
@@ -0,0 +1,176 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/tooltip */
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ import { css, html, LitElement } from "lit";
9
+ import { property } from "lit/decorators.js";
10
+ import { base } from "@deepfuture/dui-core/base";
11
+ import { customEvent } from "@deepfuture/dui-core/event";
12
+ export const openChangeEvent = customEvent("open-change", { bubbles: true, composed: true });
13
+ const hostStyles = css `
14
+ :host {
15
+ display: contents;
16
+ }
17
+ `;
18
+ /**
19
+ * `<dui-tooltip>` — A tooltip root that provides context for trigger and popup.
20
+ *
21
+ * @slot - Default slot for dui-tooltip-trigger and dui-tooltip-popup.
22
+ * @fires open-change - Dispatched when the tooltip opens or closes.
23
+ */
24
+ export class DuiTooltip extends LitElement {
25
+ static { this.tagName = "dui-tooltip"; }
26
+ static { this.styles = [base, hostStyles]; }
27
+ #open_accessor_storage = false;
28
+ /** Controlled open state. */
29
+ get open() { return this.#open_accessor_storage; }
30
+ set open(value) { this.#open_accessor_storage = value; }
31
+ #defaultOpen_accessor_storage = false;
32
+ /** Default open state for uncontrolled usage. */
33
+ get defaultOpen() { return this.#defaultOpen_accessor_storage; }
34
+ set defaultOpen(value) { this.#defaultOpen_accessor_storage = value; }
35
+ #side_accessor_storage = "top";
36
+ /** Which side of the trigger the tooltip appears on. */
37
+ get side() { return this.#side_accessor_storage; }
38
+ set side(value) { this.#side_accessor_storage = value; }
39
+ #sideOffset_accessor_storage = 6;
40
+ /** Offset from the trigger in pixels. */
41
+ get sideOffset() { return this.#sideOffset_accessor_storage; }
42
+ set sideOffset(value) { this.#sideOffset_accessor_storage = value; }
43
+ #delay_accessor_storage = 500;
44
+ /** Delay before opening in milliseconds. */
45
+ get delay() { return this.#delay_accessor_storage; }
46
+ set delay(value) { this.#delay_accessor_storage = value; }
47
+ #closeDelay_accessor_storage = 0;
48
+ /** Delay before closing in milliseconds. */
49
+ get closeDelay() { return this.#closeDelay_accessor_storage; }
50
+ set closeDelay(value) { this.#closeDelay_accessor_storage = value; }
51
+ #disabled_accessor_storage = false;
52
+ /** Disable the tooltip. */
53
+ get disabled() { return this.#disabled_accessor_storage; }
54
+ set disabled(value) { this.#disabled_accessor_storage = value; }
55
+ #internalOpen_accessor_storage = false;
56
+ get #internalOpen() { return this.#internalOpen_accessor_storage; }
57
+ set #internalOpen(value) { this.#internalOpen_accessor_storage = value; }
58
+ #triggerEl_accessor_storage;
59
+ get #triggerEl() { return this.#triggerEl_accessor_storage; }
60
+ set #triggerEl(value) { this.#triggerEl_accessor_storage = value; }
61
+ #openTimeout;
62
+ #closeTimeout;
63
+ #triggerId = `tooltip-trigger-${crypto.randomUUID().slice(0, 8)}`;
64
+ #popupId = `tooltip-popup-${crypto.randomUUID().slice(0, 8)}`;
65
+ #ctx_accessor_storage = {
66
+ open: false,
67
+ triggerId: this.#triggerId,
68
+ popupId: this.#popupId,
69
+ side: "top",
70
+ sideOffset: 6,
71
+ disabled: false,
72
+ triggerEl: undefined,
73
+ openTooltip: () => this.#scheduleOpen(),
74
+ closeTooltip: () => this.#scheduleClose(),
75
+ setTriggerEl: (el) => this.#setTriggerEl(el),
76
+ };
77
+ get #ctx() { return this.#ctx_accessor_storage; }
78
+ set #ctx(value) { this.#ctx_accessor_storage = value; }
79
+ connectedCallback() {
80
+ super.connectedCallback();
81
+ if (this.defaultOpen && !this.disabled) {
82
+ this.#internalOpen = true;
83
+ }
84
+ }
85
+ disconnectedCallback() {
86
+ super.disconnectedCallback();
87
+ this.#clearTimeouts();
88
+ }
89
+ willUpdate(changed) {
90
+ const isOpen = this.open || this.#internalOpen;
91
+ if (changed.has("open") ||
92
+ changed.has("side") ||
93
+ changed.has("sideOffset") ||
94
+ changed.has("disabled") ||
95
+ this.#ctx.open !== isOpen ||
96
+ this.#ctx.triggerEl !== this.#triggerEl) {
97
+ this.#ctx = {
98
+ ...this.#ctx,
99
+ open: isOpen,
100
+ side: this.side,
101
+ sideOffset: this.sideOffset,
102
+ disabled: this.disabled,
103
+ triggerEl: this.#triggerEl,
104
+ };
105
+ }
106
+ }
107
+ #clearTimeouts() {
108
+ if (this.#openTimeout) {
109
+ clearTimeout(this.#openTimeout);
110
+ this.#openTimeout = undefined;
111
+ }
112
+ if (this.#closeTimeout) {
113
+ clearTimeout(this.#closeTimeout);
114
+ this.#closeTimeout = undefined;
115
+ }
116
+ }
117
+ #scheduleOpen() {
118
+ if (this.disabled)
119
+ return;
120
+ this.#clearTimeouts();
121
+ if (this.delay <= 0) {
122
+ this.#doOpen();
123
+ }
124
+ else {
125
+ this.#openTimeout = setTimeout(() => this.#doOpen(), this.delay);
126
+ }
127
+ }
128
+ #scheduleClose() {
129
+ this.#clearTimeouts();
130
+ if (this.closeDelay <= 0) {
131
+ this.#doClose();
132
+ }
133
+ else {
134
+ this.#closeTimeout = setTimeout(() => this.#doClose(), this.closeDelay);
135
+ }
136
+ }
137
+ #doOpen() {
138
+ if (this.#internalOpen)
139
+ return;
140
+ this.#internalOpen = true;
141
+ this.dispatchEvent(openChangeEvent({ open: true }));
142
+ }
143
+ #doClose() {
144
+ if (!this.#internalOpen)
145
+ return;
146
+ this.#internalOpen = false;
147
+ this.dispatchEvent(openChangeEvent({ open: false }));
148
+ }
149
+ #setTriggerEl(el) {
150
+ this.#triggerEl = el;
151
+ }
152
+ render() {
153
+ return html `<slot></slot>`;
154
+ }
155
+ }
156
+ __decorate([
157
+ property({ type: Boolean, reflect: true })
158
+ ], DuiTooltip.prototype, "open", null);
159
+ __decorate([
160
+ property({ type: Boolean, attribute: "default-open" })
161
+ ], DuiTooltip.prototype, "defaultOpen", null);
162
+ __decorate([
163
+ property({ reflect: true })
164
+ ], DuiTooltip.prototype, "side", null);
165
+ __decorate([
166
+ property({ type: Number, attribute: "side-offset" })
167
+ ], DuiTooltip.prototype, "sideOffset", null);
168
+ __decorate([
169
+ property({ type: Number })
170
+ ], DuiTooltip.prototype, "delay", null);
171
+ __decorate([
172
+ property({ type: Number, attribute: "close-delay" })
173
+ ], DuiTooltip.prototype, "closeDelay", null);
174
+ __decorate([
175
+ property({ type: Boolean, reflect: true })
176
+ ], DuiTooltip.prototype, "disabled", null);
@@ -0,0 +1 @@
1
+ export { DuiTrunc } from "./trunc.js";
package/trunc/index.js ADDED
@@ -0,0 +1 @@
1
+ export { DuiTrunc } from "./trunc.js";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { DuiTrunc } from "./trunc.js";
2
+ if (!customElements.get(DuiTrunc.tagName)) {
3
+ customElements.define(DuiTrunc.tagName, DuiTrunc);
4
+ }
@@ -0,0 +1,19 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/trunc */
2
+ import { LitElement, type TemplateResult } from "lit";
3
+ /**
4
+ * Text truncation with ellipsis.
5
+ *
6
+ * By default, truncates to a single line using `max-width` (default `20rem`).
7
+ * Set `max-lines` to clamp to N visible lines instead.
8
+ * Both attributes can be combined: `max-width` constrains inline size,
9
+ * `max-lines` constrains block size.
10
+ */
11
+ export declare class DuiTrunc extends LitElement {
12
+ static tagName: "dui-trunc";
13
+ static styles: import("lit").CSSResult[];
14
+ /** Maximum inline size before single-line truncation kicks in. */
15
+ accessor maxWidth: string;
16
+ /** Maximum number of visible lines before clamping. */
17
+ accessor maxLines: number | undefined;
18
+ render(): TemplateResult;
19
+ }
package/trunc/trunc.js ADDED
@@ -0,0 +1,68 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/trunc */
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ import { css, html, LitElement } from "lit";
9
+ import { property } from "lit/decorators.js";
10
+ import { styleMap } from "lit/directives/style-map.js";
11
+ import { base } from "@deepfuture/dui-core/base";
12
+ const styles = css `
13
+ :host {
14
+ display: block;
15
+ }
16
+
17
+ [part="root"] {
18
+ overflow: hidden;
19
+ }
20
+
21
+ :host(:not([max-lines])) [part="root"] {
22
+ display: block;
23
+ white-space: nowrap;
24
+ text-overflow: ellipsis;
25
+ }
26
+
27
+ :host([max-lines]) [part="root"] {
28
+ display: -webkit-box;
29
+ -webkit-box-orient: vertical;
30
+ }
31
+ `;
32
+ /**
33
+ * Text truncation with ellipsis.
34
+ *
35
+ * By default, truncates to a single line using `max-width` (default `20rem`).
36
+ * Set `max-lines` to clamp to N visible lines instead.
37
+ * Both attributes can be combined: `max-width` constrains inline size,
38
+ * `max-lines` constrains block size.
39
+ */
40
+ export class DuiTrunc extends LitElement {
41
+ static { this.tagName = "dui-trunc"; }
42
+ static { this.styles = [base, styles]; }
43
+ #maxWidth_accessor_storage = "20rem";
44
+ /** Maximum inline size before single-line truncation kicks in. */
45
+ get maxWidth() { return this.#maxWidth_accessor_storage; }
46
+ set maxWidth(value) { this.#maxWidth_accessor_storage = value; }
47
+ #maxLines_accessor_storage;
48
+ /** Maximum number of visible lines before clamping. */
49
+ get maxLines() { return this.#maxLines_accessor_storage; }
50
+ set maxLines(value) { this.#maxLines_accessor_storage = value; }
51
+ render() {
52
+ const clamp = this.maxLines !== undefined
53
+ ? Math.max(1, this.maxLines).toString()
54
+ : undefined;
55
+ const dynamicStyles = styleMap({
56
+ "max-width": this.maxWidth,
57
+ "-webkit-line-clamp": clamp,
58
+ "line-clamp": clamp,
59
+ });
60
+ return html `<div part="root" style=${dynamicStyles}><slot></slot></div>`;
61
+ }
62
+ }
63
+ __decorate([
64
+ property({ attribute: "max-width" })
65
+ ], DuiTrunc.prototype, "maxWidth", null);
66
+ __decorate([
67
+ property({ attribute: "max-lines", type: Number, reflect: true })
68
+ ], DuiTrunc.prototype, "maxLines", null);
@@ -0,0 +1 @@
1
+ export { DuiVstack } from "./vstack.js";
@@ -0,0 +1 @@
1
+ export { DuiVstack } from "./vstack.js";
@@ -0,0 +1 @@
1
+ export {};