@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,115 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/portal */
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 { getRootDocument } from "@deepfuture/dui-core/dom";
11
+ /** Structural styles only — layout CSS. */
12
+ const styles = css `
13
+ :host {
14
+ display: contents;
15
+ }
16
+ `;
17
+ /**
18
+ * `<dui-portal>` — Teleports light DOM children to a target container.
19
+ *
20
+ * Children are moved back into the portal when the element disconnects,
21
+ * allowing the portal and its children to be moved or garbage-collected
22
+ * correctly.
23
+ *
24
+ * @slot - Content to teleport.
25
+ * @attr {string} target - CSS selector for the destination container (default: "body").
26
+ * @attr {"shadow" | "document"} target-root - Where to resolve the target selector.
27
+ */
28
+ export class DuiPortal extends LitElement {
29
+ static { this.tagName = "dui-portal"; }
30
+ static { this.styles = [styles]; }
31
+ #target_accessor_storage = "body";
32
+ /** CSS selector for the destination container. */
33
+ get target() { return this.#target_accessor_storage; }
34
+ set target(value) { this.#target_accessor_storage = value; }
35
+ #targetRoot_accessor_storage = "document";
36
+ /** Where to resolve the target selector: "document" (default) or "shadow". */
37
+ get targetRoot() { return this.#targetRoot_accessor_storage; }
38
+ set targetRoot(value) { this.#targetRoot_accessor_storage = value; }
39
+ #targetElement_accessor_storage;
40
+ /** Direct element reference for cross-shadow-root targets. Takes precedence over `target` selector. */
41
+ get targetElement() { return this.#targetElement_accessor_storage; }
42
+ set targetElement(value) { this.#targetElement_accessor_storage = value; }
43
+ #container = undefined;
44
+ #movedNodes = new Set();
45
+ #isMoving = false;
46
+ #queryTarget() {
47
+ const root = getRootDocument(this, {
48
+ composed: this.targetRoot === "document",
49
+ });
50
+ return root?.querySelector(this.target) ?? undefined;
51
+ }
52
+ connectedCallback() {
53
+ super.connectedCallback();
54
+ this.#container = this.targetElement ?? this.#queryTarget();
55
+ if (this.#container && this.childNodes.length > 0) {
56
+ this.#moveChildrenToTarget();
57
+ }
58
+ }
59
+ disconnectedCallback() {
60
+ super.disconnectedCallback();
61
+ this.#detach();
62
+ }
63
+ updated(changed) {
64
+ if (changed.has("target") ||
65
+ changed.has("targetRoot") ||
66
+ changed.has("targetElement")) {
67
+ this.#detach();
68
+ this.#attach();
69
+ }
70
+ }
71
+ #attach() {
72
+ this.#container = this.targetElement ?? this.#queryTarget();
73
+ this.#moveChildrenToTarget();
74
+ }
75
+ #detach() {
76
+ if (this.#movedNodes.size === 0)
77
+ return;
78
+ this.#isMoving = true;
79
+ for (const node of this.#movedNodes) {
80
+ this.append(node);
81
+ }
82
+ this.#movedNodes.clear();
83
+ this.#isMoving = false;
84
+ this.#container = undefined;
85
+ }
86
+ #moveChildrenToTarget() {
87
+ if (!this.#container) {
88
+ throw new Error(`Portal target does not exist: ${this.target}`);
89
+ }
90
+ this.#isMoving = true;
91
+ const nodes = Array.from(this.childNodes);
92
+ for (const node of nodes) {
93
+ this.#container.appendChild(node);
94
+ this.#movedNodes.add(node);
95
+ }
96
+ this.#isMoving = false;
97
+ }
98
+ #handleSlotChange = () => {
99
+ if (this.#isMoving || !this.#container)
100
+ return;
101
+ this.#moveChildrenToTarget();
102
+ };
103
+ render() {
104
+ return html `<slot @slotchange=${this.#handleSlotChange}></slot>`;
105
+ }
106
+ }
107
+ __decorate([
108
+ property({ type: String })
109
+ ], DuiPortal.prototype, "target", null);
110
+ __decorate([
111
+ property({ type: String, attribute: "target-root", reflect: true })
112
+ ], DuiPortal.prototype, "targetRoot", null);
113
+ __decorate([
114
+ property({ attribute: false })
115
+ ], DuiPortal.prototype, "targetElement", null);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { DuiPortal } from "./index.js";
2
+ if (!customElements.get(DuiPortal.tagName)) {
3
+ customElements.define(DuiPortal.tagName, DuiPortal);
4
+ }
@@ -0,0 +1,5 @@
1
+ export { DuiPreviewCard, openChangeEvent } from "./preview-card.js";
2
+ export type { PreviewCardOpenChangeDetail } from "./preview-card.js";
3
+ export { DuiPreviewCardTrigger } from "./preview-card-trigger.js";
4
+ export { DuiPreviewCardPopup } from "./preview-card-popup.js";
5
+ export type { PreviewCardContext, PreviewCardSide } from "./preview-card-context.js";
@@ -0,0 +1,3 @@
1
+ export { DuiPreviewCard, openChangeEvent } from "./preview-card.js";
2
+ export { DuiPreviewCardTrigger } from "./preview-card-trigger.js";
3
+ export { DuiPreviewCardPopup } from "./preview-card-popup.js";
@@ -0,0 +1,16 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/preview-card */
2
+ export type PreviewCardSide = "top" | "bottom";
3
+ export type PreviewCardContext = {
4
+ readonly open: boolean;
5
+ readonly triggerId: string;
6
+ readonly popupId: string;
7
+ readonly side: PreviewCardSide;
8
+ readonly sideOffset: number;
9
+ readonly triggerEl: HTMLElement | undefined;
10
+ readonly openPreviewCard: () => void;
11
+ readonly closePreviewCard: () => void;
12
+ readonly setTriggerEl: (el: HTMLElement | undefined) => void;
13
+ };
14
+ export declare const previewCardContext: {
15
+ __context__: PreviewCardContext;
16
+ };
@@ -0,0 +1,3 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/preview-card */
2
+ import { createContext } from "@lit/context";
3
+ export const previewCardContext = createContext(Symbol("dui-preview-card"));
@@ -0,0 +1,16 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/preview-card */
2
+ import { LitElement, type TemplateResult } from "lit";
3
+ /**
4
+ * `<dui-preview-card-popup>` — The preview card popup content container.
5
+ *
6
+ * @slot - Preview card content.
7
+ */
8
+ export declare class DuiPreviewCardPopup extends LitElement {
9
+ #private;
10
+ static tagName: "dui-preview-card-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,167 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/preview-card */
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 { previewCardContext } from "./preview-card-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-4);
26
+ border-radius: var(--radius-md);
27
+ background: var(--popover);
28
+ color: var(--popover-foreground);
29
+ font-family: var(--font-sans);
30
+ font-size: var(--font-size-sm);
31
+ line-height: var(--line-height-normal);
32
+ box-shadow: var(--shadow-lg);
33
+ border: var(--border-width-thin) solid var(--border);
34
+ max-width: var(--max-width, var(--space-80));
35
+ pointer-events: auto;
36
+ transform-origin: var(--transform-origin, center);
37
+ opacity: 1;
38
+ transform: scale(1);
39
+ transition-property: opacity, transform;
40
+ transition-duration: var(--duration-fast);
41
+ transition-timing-function: var(--ease-out-3);
42
+ }
43
+
44
+ .Popup[data-starting-style],
45
+ .Popup[data-ending-style] {
46
+ opacity: 0;
47
+ transform: scale(0.96);
48
+ }
49
+
50
+ .Popup[data-side="top"] {
51
+ --transform-origin: bottom center;
52
+ }
53
+
54
+ .Popup[data-side="bottom"] {
55
+ --transform-origin: top center;
56
+ }
57
+
58
+ .Arrow {
59
+ position: absolute;
60
+ width: 10px;
61
+ height: 6px;
62
+ }
63
+
64
+ .Arrow[data-side="top"] {
65
+ bottom: -5px;
66
+ left: 50%;
67
+ transform: translateX(-50%);
68
+ }
69
+
70
+ .Arrow[data-side="bottom"] {
71
+ top: -5px;
72
+ left: 50%;
73
+ transform: translateX(-50%) rotate(180deg);
74
+ }
75
+
76
+ .Arrow .arrow-fill {
77
+ fill: var(--popover);
78
+ }
79
+
80
+ .Arrow .arrow-stroke {
81
+ fill: none;
82
+ stroke: var(--border);
83
+ stroke-width: 1px;
84
+ }
85
+ `,
86
+ ];
87
+ /**
88
+ * `<dui-preview-card-popup>` — The preview card popup content container.
89
+ *
90
+ * @slot - Preview card content.
91
+ */
92
+ export class DuiPreviewCardPopup extends LitElement {
93
+ static { this.tagName = "dui-preview-card-popup"; }
94
+ static { this.styles = [base, hostStyles]; }
95
+ #showArrow_accessor_storage = true;
96
+ /** Whether to show an arrow pointing to the trigger. */
97
+ get showArrow() { return this.#showArrow_accessor_storage; }
98
+ set showArrow(value) { this.#showArrow_accessor_storage = value; }
99
+ #side_accessor_storage = "top";
100
+ get #side() { return this.#side_accessor_storage; }
101
+ set #side(value) { this.#side_accessor_storage = value; }
102
+ #ctx = new ContextConsumer(this, {
103
+ context: previewCardContext,
104
+ subscribe: true,
105
+ });
106
+ #wasOpen = false;
107
+ #portal = new FloatingPortalController(this, {
108
+ getAnchor: () => this.#ctx.value?.triggerEl,
109
+ matchWidth: false,
110
+ placement: "top",
111
+ offset: 8,
112
+ styles: portalPopupStyles,
113
+ contentContainer: ".PreviewCardContent",
114
+ onPosition: ({ placement }) => {
115
+ const actualSide = placement.split("-")[0];
116
+ if (actualSide !== this.#side) {
117
+ this.#side = actualSide;
118
+ }
119
+ },
120
+ renderPopup: (portal) => {
121
+ const popupId = this.#ctx.value?.popupId ?? "";
122
+ return html `
123
+ <div
124
+ class="Popup"
125
+ id="${popupId}"
126
+ role="tooltip"
127
+ ?data-starting-style="${portal.isStarting}"
128
+ ?data-ending-style="${portal.isEnding}"
129
+ data-side="${this.#side}"
130
+ @mouseenter="${this.#handleMouseEnter}"
131
+ @mouseleave="${this.#handleMouseLeave}"
132
+ >
133
+ <div class="PreviewCardContent"></div>
134
+ ${this.showArrow ? renderArrow(this.#side) : ""}
135
+ </div>
136
+ `;
137
+ },
138
+ });
139
+ #handleMouseEnter = () => {
140
+ this.#ctx.value?.openPreviewCard();
141
+ };
142
+ #handleMouseLeave = () => {
143
+ this.#ctx.value?.closePreviewCard();
144
+ };
145
+ updated() {
146
+ const isOpen = this.#ctx.value?.open ?? false;
147
+ if (isOpen && !this.#wasOpen) {
148
+ this.#updatePlacement();
149
+ this.#portal.open();
150
+ }
151
+ else if (!isOpen && this.#wasOpen) {
152
+ this.#portal.close();
153
+ }
154
+ this.#wasOpen = isOpen;
155
+ }
156
+ #updatePlacement() {
157
+ const side = this.#ctx.value?.side ?? "top";
158
+ this.#portal.placement = side;
159
+ this.#portal.offset = this.#ctx.value?.sideOffset ?? 8;
160
+ }
161
+ render() {
162
+ return html `<slot></slot>`;
163
+ }
164
+ }
165
+ __decorate([
166
+ property({ type: Boolean, attribute: "show-arrow" })
167
+ ], DuiPreviewCardPopup.prototype, "showArrow", null);
@@ -0,0 +1,13 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/preview-card */
2
+ import { LitElement, type TemplateResult } from "lit";
3
+ /**
4
+ * `<dui-preview-card-trigger>` — The element that triggers the preview card on hover/focus.
5
+ *
6
+ * @slot - Content that triggers the preview card.
7
+ */
8
+ export declare class DuiPreviewCardTrigger extends LitElement {
9
+ #private;
10
+ static tagName: "dui-preview-card-trigger";
11
+ static styles: import("lit").CSSResult[];
12
+ render(): TemplateResult;
13
+ }
@@ -0,0 +1,75 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/preview-card */
2
+ import { css, html, LitElement } from "lit";
3
+ import { ContextConsumer } from "@lit/context";
4
+ import { base } from "@deepfuture/dui-core/base";
5
+ import { previewCardContext } from "./preview-card-context.js";
6
+ const hostStyles = css `
7
+ :host {
8
+ display: contents;
9
+ }
10
+ `;
11
+ const componentStyles = css `
12
+ .Trigger {
13
+ display: contents;
14
+ }
15
+ `;
16
+ /**
17
+ * `<dui-preview-card-trigger>` — The element that triggers the preview card on hover/focus.
18
+ *
19
+ * @slot - Content that triggers the preview card.
20
+ */
21
+ export class DuiPreviewCardTrigger extends LitElement {
22
+ static { this.tagName = "dui-preview-card-trigger"; }
23
+ static { this.styles = [base, hostStyles, componentStyles]; }
24
+ #ctx = new ContextConsumer(this, {
25
+ context: previewCardContext,
26
+ subscribe: true,
27
+ });
28
+ #handleMouseEnter = () => {
29
+ this.#updateTriggerEl();
30
+ this.#ctx.value?.openPreviewCard();
31
+ };
32
+ #handleMouseLeave = () => {
33
+ this.#ctx.value?.closePreviewCard();
34
+ };
35
+ #handleFocus = () => {
36
+ this.#updateTriggerEl();
37
+ this.#ctx.value?.openPreviewCard();
38
+ };
39
+ #handleBlur = () => {
40
+ this.#ctx.value?.closePreviewCard();
41
+ };
42
+ #handleKeyDown = (e) => {
43
+ if (e.key === "Escape" && this.#ctx.value?.open) {
44
+ this.#ctx.value?.closePreviewCard();
45
+ }
46
+ };
47
+ #updateTriggerEl() {
48
+ const slot = this.shadowRoot?.querySelector("slot");
49
+ const slotted = slot?.assignedElements({ flatten: true });
50
+ const el = slotted?.[0] ?? this;
51
+ this.#ctx.value?.setTriggerEl(el);
52
+ }
53
+ render() {
54
+ const isOpen = this.#ctx.value?.open ?? false;
55
+ const popupId = this.#ctx.value?.popupId ?? "";
56
+ const triggerId = this.#ctx.value?.triggerId ?? "";
57
+ return html `
58
+ <span
59
+ class="Trigger"
60
+ part="trigger"
61
+ id="${triggerId}"
62
+ tabindex="0"
63
+ aria-describedby="${isOpen ? popupId : ""}"
64
+ ?data-popup-open="${isOpen}"
65
+ @mouseenter="${this.#handleMouseEnter}"
66
+ @mouseleave="${this.#handleMouseLeave}"
67
+ @focus="${this.#handleFocus}"
68
+ @blur="${this.#handleBlur}"
69
+ @keydown="${this.#handleKeyDown}"
70
+ >
71
+ <slot></slot>
72
+ </span>
73
+ `;
74
+ }
75
+ }
@@ -0,0 +1,34 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/preview-card */
2
+ import { LitElement, type PropertyValues, type TemplateResult } from "lit";
3
+ import { type PreviewCardSide } from "./preview-card-context.js";
4
+ export type PreviewCardOpenChangeDetail = {
5
+ open: boolean;
6
+ };
7
+ export declare const openChangeEvent: (detail: PreviewCardOpenChangeDetail) => CustomEvent<PreviewCardOpenChangeDetail>;
8
+ /**
9
+ * `<dui-preview-card>` — A preview card root that provides context for trigger and popup.
10
+ *
11
+ * @slot - Default slot for dui-preview-card-trigger and dui-preview-card-popup.
12
+ * @fires open-change - Dispatched when the preview card opens or closes.
13
+ */
14
+ export declare class DuiPreviewCard extends LitElement {
15
+ #private;
16
+ static tagName: "dui-preview-card";
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 preview card appears on. */
23
+ accessor side: PreviewCardSide;
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
+ connectedCallback(): void;
31
+ disconnectedCallback(): void;
32
+ protected willUpdate(changed: PropertyValues): void;
33
+ render(): TemplateResult;
34
+ }
@@ -0,0 +1,164 @@
1
+ /** Ported from original DUI: deep-future-app/app/client/components/dui/preview-card */
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-preview-card>` — A preview card root that provides context for trigger and popup.
20
+ *
21
+ * @slot - Default slot for dui-preview-card-trigger and dui-preview-card-popup.
22
+ * @fires open-change - Dispatched when the preview card opens or closes.
23
+ */
24
+ export class DuiPreviewCard extends LitElement {
25
+ static { this.tagName = "dui-preview-card"; }
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 preview card appears on. */
37
+ get side() { return this.#side_accessor_storage; }
38
+ set side(value) { this.#side_accessor_storage = value; }
39
+ #sideOffset_accessor_storage = 8;
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 = 400;
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 = 300;
48
+ /** Delay before closing in milliseconds. */
49
+ get closeDelay() { return this.#closeDelay_accessor_storage; }
50
+ set closeDelay(value) { this.#closeDelay_accessor_storage = value; }
51
+ #internalOpen_accessor_storage = false;
52
+ get #internalOpen() { return this.#internalOpen_accessor_storage; }
53
+ set #internalOpen(value) { this.#internalOpen_accessor_storage = value; }
54
+ #triggerEl_accessor_storage;
55
+ get #triggerEl() { return this.#triggerEl_accessor_storage; }
56
+ set #triggerEl(value) { this.#triggerEl_accessor_storage = value; }
57
+ #openTimeout;
58
+ #closeTimeout;
59
+ #triggerId = `preview-card-trigger-${crypto.randomUUID().slice(0, 8)}`;
60
+ #popupId = `preview-card-popup-${crypto.randomUUID().slice(0, 8)}`;
61
+ #ctx_accessor_storage = {
62
+ open: false,
63
+ triggerId: this.#triggerId,
64
+ popupId: this.#popupId,
65
+ side: "top",
66
+ sideOffset: 8,
67
+ triggerEl: undefined,
68
+ openPreviewCard: () => this.#scheduleOpen(),
69
+ closePreviewCard: () => this.#scheduleClose(),
70
+ setTriggerEl: (el) => this.#setTriggerEl(el),
71
+ };
72
+ get #ctx() { return this.#ctx_accessor_storage; }
73
+ set #ctx(value) { this.#ctx_accessor_storage = value; }
74
+ connectedCallback() {
75
+ super.connectedCallback();
76
+ if (this.defaultOpen) {
77
+ this.#internalOpen = true;
78
+ }
79
+ }
80
+ disconnectedCallback() {
81
+ super.disconnectedCallback();
82
+ this.#clearTimeouts();
83
+ }
84
+ willUpdate(changed) {
85
+ const isOpen = this.open || this.#internalOpen;
86
+ if (changed.has("open") ||
87
+ changed.has("side") ||
88
+ changed.has("sideOffset") ||
89
+ this.#ctx.open !== isOpen ||
90
+ this.#ctx.triggerEl !== this.#triggerEl) {
91
+ this.#ctx = {
92
+ ...this.#ctx,
93
+ open: isOpen,
94
+ side: this.side,
95
+ sideOffset: this.sideOffset,
96
+ triggerEl: this.#triggerEl,
97
+ };
98
+ }
99
+ }
100
+ #clearTimeouts() {
101
+ if (this.#openTimeout) {
102
+ clearTimeout(this.#openTimeout);
103
+ this.#openTimeout = undefined;
104
+ }
105
+ if (this.#closeTimeout) {
106
+ clearTimeout(this.#closeTimeout);
107
+ this.#closeTimeout = undefined;
108
+ }
109
+ }
110
+ #scheduleOpen() {
111
+ this.#clearTimeouts();
112
+ if (this.delay <= 0) {
113
+ this.#doOpen();
114
+ }
115
+ else {
116
+ this.#openTimeout = setTimeout(() => this.#doOpen(), this.delay);
117
+ }
118
+ }
119
+ #scheduleClose() {
120
+ this.#clearTimeouts();
121
+ if (this.closeDelay <= 0) {
122
+ this.#doClose();
123
+ }
124
+ else {
125
+ this.#closeTimeout = setTimeout(() => this.#doClose(), this.closeDelay);
126
+ }
127
+ }
128
+ #doOpen() {
129
+ if (this.#internalOpen)
130
+ return;
131
+ this.#internalOpen = true;
132
+ this.dispatchEvent(openChangeEvent({ open: true }));
133
+ }
134
+ #doClose() {
135
+ if (!this.#internalOpen)
136
+ return;
137
+ this.#internalOpen = false;
138
+ this.dispatchEvent(openChangeEvent({ open: false }));
139
+ }
140
+ #setTriggerEl(el) {
141
+ this.#triggerEl = el;
142
+ }
143
+ render() {
144
+ return html `<slot></slot>`;
145
+ }
146
+ }
147
+ __decorate([
148
+ property({ type: Boolean, reflect: true })
149
+ ], DuiPreviewCard.prototype, "open", null);
150
+ __decorate([
151
+ property({ type: Boolean, attribute: "default-open" })
152
+ ], DuiPreviewCard.prototype, "defaultOpen", null);
153
+ __decorate([
154
+ property({ reflect: true })
155
+ ], DuiPreviewCard.prototype, "side", null);
156
+ __decorate([
157
+ property({ type: Number, attribute: "side-offset" })
158
+ ], DuiPreviewCard.prototype, "sideOffset", null);
159
+ __decorate([
160
+ property({ type: Number })
161
+ ], DuiPreviewCard.prototype, "delay", null);
162
+ __decorate([
163
+ property({ type: Number, attribute: "close-delay" })
164
+ ], DuiPreviewCard.prototype, "closeDelay", null);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import { DuiPreviewCard } from "./preview-card.js";
2
+ import { DuiPreviewCardTrigger } from "./preview-card-trigger.js";
3
+ import { DuiPreviewCardPopup } from "./preview-card-popup.js";
4
+ if (!customElements.get(DuiPreviewCard.tagName)) {
5
+ customElements.define(DuiPreviewCard.tagName, DuiPreviewCard);
6
+ }
7
+ if (!customElements.get(DuiPreviewCardTrigger.tagName)) {
8
+ customElements.define(DuiPreviewCardTrigger.tagName, DuiPreviewCardTrigger);
9
+ }
10
+ if (!customElements.get(DuiPreviewCardPopup.tagName)) {
11
+ customElements.define(DuiPreviewCardPopup.tagName, DuiPreviewCardPopup);
12
+ }
@@ -0,0 +1 @@
1
+ export { DuiProgress } from "./progress.js";
@@ -0,0 +1 @@
1
+ export { DuiProgress } from "./progress.js";
@@ -0,0 +1,19 @@
1
+ import { LitElement, type TemplateResult } from "lit";
2
+ /**
3
+ * `<dui-progress>` — A progress bar indicating completion status.
4
+ *
5
+ * Set `value` to a number for determinate progress, or leave `null` for indeterminate.
6
+ *
7
+ * @csspart root - The outer container.
8
+ * @csspart track - The progress track.
9
+ * @csspart indicator - The filled indicator.
10
+ */
11
+ export declare class DuiProgress extends LitElement {
12
+ #private;
13
+ static tagName: "dui-progress";
14
+ static styles: import("lit").CSSResult[];
15
+ accessor value: number | null;
16
+ accessor min: number;
17
+ accessor max: number;
18
+ render(): TemplateResult;
19
+ }