@threadlabs/looma 0.1.23 → 0.1.24

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 (287) hide show
  1. package/dist/chunk-HNFCGIBP.js +8 -0
  2. package/dist/{chunk-GDMQKT5F.js → chunk-IMHSPETJ.js} +32 -30
  3. package/dist/chunk-NB6DBRXQ.js +323 -0
  4. package/dist/cjs/controlled-state-BFya8rAX.js +9 -0
  5. package/dist/cjs/icons-BAdjrnhS.js +680 -0
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/looma.cjs.js +1 -1
  8. package/dist/cjs/ui-affordance-scope.cjs.entry.js +1 -1
  9. package/dist/cjs/ui-avatar-group.cjs.entry.js +9 -17
  10. package/dist/cjs/ui-avatar.cjs.entry.js +2 -2
  11. package/dist/cjs/ui-badge.cjs.entry.js +2 -2
  12. package/dist/cjs/ui-button.cjs.entry.js +1 -1
  13. package/dist/cjs/ui-callout.cjs.entry.js +27 -0
  14. package/dist/cjs/ui-checkbox.cjs.entry.js +13 -7
  15. package/dist/cjs/ui-chip.cjs.entry.js +19 -0
  16. package/dist/cjs/ui-combobox.cjs.entry.js +3 -3
  17. package/dist/cjs/ui-context-menu.cjs.entry.js +1 -1
  18. package/dist/cjs/ui-dialog.cjs.entry.js +44 -8
  19. package/dist/cjs/ui-disclosure.cjs.entry.js +9 -6
  20. package/dist/cjs/ui-floating-action-button.cjs.entry.js +1 -1
  21. package/dist/cjs/ui-form-field.cjs.entry.js +59 -4
  22. package/dist/cjs/ui-icon-button.cjs.entry.js +1 -1
  23. package/dist/cjs/ui-input.cjs.entry.js +1 -1
  24. package/dist/cjs/ui-menu-item.cjs.entry.js +2 -2
  25. package/dist/cjs/ui-menu.cjs.entry.js +14 -9
  26. package/dist/cjs/ui-popover.cjs.entry.js +10 -7
  27. package/dist/cjs/ui-radio-group.cjs.entry.js +1 -1
  28. package/dist/cjs/ui-radio.cjs.entry.js +16 -7
  29. package/dist/cjs/ui-search-result-row.cjs.entry.js +1 -1
  30. package/dist/cjs/ui-search-shell.cjs.entry.js +1 -1
  31. package/dist/cjs/ui-select.cjs.entry.js +1 -1
  32. package/dist/cjs/ui-switch.cjs.entry.js +19 -10
  33. package/dist/cjs/ui-tabs.cjs.entry.js +10 -9
  34. package/dist/cjs/ui-textarea.cjs.entry.js +1 -1
  35. package/dist/cjs/ui-toast-region.cjs.entry.js +30 -19
  36. package/dist/cjs/ui-tooltip.cjs.entry.js +12 -8
  37. package/dist/cjs/ui-top-bar.cjs.entry.js +1 -1
  38. package/dist/cjs/ui-tree-item.cjs.entry.js +54 -617
  39. package/dist/cjs/ui-tree.cjs.entry.js +123 -11
  40. package/dist/collection/collection-manifest.json +2 -0
  41. package/dist/collection/components/ui-affordance-scope/ui-affordance-scope.js +1 -1
  42. package/dist/collection/components/ui-avatar/ui-avatar.css +4 -4
  43. package/dist/collection/components/ui-avatar/ui-avatar.js +1 -1
  44. package/dist/collection/components/ui-avatar-group/ui-avatar-group.css +2 -2
  45. package/dist/collection/components/ui-avatar-group/ui-avatar-group.js +8 -16
  46. package/dist/collection/components/ui-badge/ui-badge.css +64 -48
  47. package/dist/collection/components/ui-badge/ui-badge.js +1 -1
  48. package/dist/collection/components/ui-button/ui-button.js +1 -1
  49. package/dist/collection/components/ui-callout/ui-callout.css +74 -0
  50. package/dist/collection/components/ui-callout/ui-callout.js +59 -0
  51. package/dist/collection/components/ui-checkbox/ui-checkbox.js +16 -11
  52. package/dist/collection/components/ui-chip/ui-chip.css +43 -0
  53. package/dist/collection/components/ui-chip/ui-chip.js +45 -0
  54. package/dist/collection/components/ui-combobox/ui-combobox.js +3 -3
  55. package/dist/collection/components/ui-context-menu/ui-context-menu.js +1 -1
  56. package/dist/collection/components/ui-dialog/ui-dialog.js +49 -13
  57. package/dist/collection/components/ui-disclosure/ui-disclosure.js +12 -10
  58. package/dist/collection/components/ui-floating-action-button/ui-floating-action-button.js +1 -1
  59. package/dist/collection/components/ui-form-field/ui-form-field.js +59 -4
  60. package/dist/collection/components/ui-icon-button/ui-icon-button.js +1 -1
  61. package/dist/collection/components/ui-input/ui-input.js +1 -1
  62. package/dist/collection/components/ui-menu/ui-menu.css +12 -23
  63. package/dist/collection/components/ui-menu/ui-menu.js +16 -12
  64. package/dist/collection/components/ui-menu-item/ui-menu-item.css +9 -3
  65. package/dist/collection/components/ui-menu-item/ui-menu-item.js +1 -1
  66. package/dist/collection/components/ui-popover/ui-popover.css +14 -5
  67. package/dist/collection/components/ui-popover/ui-popover.js +12 -10
  68. package/dist/collection/components/ui-radio/ui-radio.js +24 -11
  69. package/dist/collection/components/ui-radio-group/ui-radio-group.js +1 -1
  70. package/dist/collection/components/ui-search-result-row/ui-search-result-row.js +1 -1
  71. package/dist/collection/components/ui-search-shell/ui-search-shell.js +1 -1
  72. package/dist/collection/components/ui-select/ui-select.js +1 -1
  73. package/dist/collection/components/ui-switch/ui-switch.js +22 -14
  74. package/dist/collection/components/ui-tabs/ui-tabs.js +13 -13
  75. package/dist/collection/components/ui-textarea/ui-textarea.js +1 -1
  76. package/dist/collection/components/ui-toast-region/ui-toast-region.js +30 -19
  77. package/dist/collection/components/ui-tooltip/ui-tooltip.css +16 -7
  78. package/dist/collection/components/ui-tooltip/ui-tooltip.js +14 -11
  79. package/dist/collection/components/ui-top-bar/ui-top-bar.js +1 -1
  80. package/dist/collection/components/ui-tree/ui-tree.css +2 -1
  81. package/dist/collection/components/ui-tree/ui-tree.js +122 -10
  82. package/dist/collection/components/ui-tree-item/ui-tree-item.js +61 -44
  83. package/dist/collection/icons.js +6 -1
  84. package/dist/collection/utils/controlled-state.js +4 -0
  85. package/dist/components/index.d.ts +4 -0
  86. package/dist/components/index.js +1 -1
  87. package/dist/components/p-Bk55QiUK.js +1 -0
  88. package/dist/components/p-BnGhGgTH.js +1 -0
  89. package/dist/components/p-CoFximGM.js +13 -0
  90. package/dist/components/p-DIGcRYAW.js +1 -0
  91. package/dist/components/ui-affordance-scope.js +1 -1
  92. package/dist/components/ui-avatar-group.js +1 -1
  93. package/dist/components/ui-avatar.js +1 -1
  94. package/dist/components/ui-badge.js +1 -1
  95. package/dist/components/ui-button.js +1 -1
  96. package/dist/components/ui-callout.d.ts +11 -0
  97. package/dist/components/ui-callout.js +1 -0
  98. package/dist/components/ui-checkbox.js +1 -1
  99. package/dist/components/ui-chip.d.ts +11 -0
  100. package/dist/components/ui-chip.js +1 -0
  101. package/dist/components/ui-combobox.js +1 -1
  102. package/dist/components/ui-context-menu.js +1 -1
  103. package/dist/components/ui-dialog.js +1 -1
  104. package/dist/components/ui-disclosure.js +1 -1
  105. package/dist/components/ui-floating-action-button.js +1 -1
  106. package/dist/components/ui-form-field.js +1 -1
  107. package/dist/components/ui-icon-button.js +1 -1
  108. package/dist/components/ui-input.js +1 -1
  109. package/dist/components/ui-menu-item.js +1 -1
  110. package/dist/components/ui-menu.js +1 -1
  111. package/dist/components/ui-popover.js +1 -1
  112. package/dist/components/ui-radio-group.js +1 -1
  113. package/dist/components/ui-radio.js +1 -1
  114. package/dist/components/ui-search-result-row.js +1 -1
  115. package/dist/components/ui-search-shell.js +1 -1
  116. package/dist/components/ui-select.js +1 -1
  117. package/dist/components/ui-switch.js +1 -1
  118. package/dist/components/ui-tabs.js +1 -1
  119. package/dist/components/ui-textarea.js +1 -1
  120. package/dist/components/ui-toast-region.js +1 -1
  121. package/dist/components/ui-tooltip.js +1 -1
  122. package/dist/components/ui-top-bar.js +1 -1
  123. package/dist/components/ui-tree-item.js +1 -13
  124. package/dist/components/ui-tree.js +1 -1
  125. package/dist/esm/controlled-state-BnGhGgTH.js +6 -0
  126. package/dist/esm/icons-CoFximGM.js +678 -0
  127. package/dist/esm/loader.js +1 -1
  128. package/dist/esm/looma.js +1 -1
  129. package/dist/esm/ui-affordance-scope.entry.js +1 -1
  130. package/dist/esm/ui-avatar-group.entry.js +9 -17
  131. package/dist/esm/ui-avatar.entry.js +2 -2
  132. package/dist/esm/ui-badge.entry.js +2 -2
  133. package/dist/esm/ui-button.entry.js +1 -1
  134. package/dist/esm/ui-callout.entry.js +25 -0
  135. package/dist/esm/ui-checkbox.entry.js +13 -7
  136. package/dist/esm/ui-chip.entry.js +17 -0
  137. package/dist/esm/ui-combobox.entry.js +3 -3
  138. package/dist/esm/ui-context-menu.entry.js +1 -1
  139. package/dist/esm/ui-dialog.entry.js +44 -8
  140. package/dist/esm/ui-disclosure.entry.js +9 -6
  141. package/dist/esm/ui-floating-action-button.entry.js +1 -1
  142. package/dist/esm/ui-form-field.entry.js +59 -4
  143. package/dist/esm/ui-icon-button.entry.js +1 -1
  144. package/dist/esm/ui-input.entry.js +1 -1
  145. package/dist/esm/ui-menu-item.entry.js +2 -2
  146. package/dist/esm/ui-menu.entry.js +14 -9
  147. package/dist/esm/ui-popover.entry.js +10 -7
  148. package/dist/esm/ui-radio-group.entry.js +1 -1
  149. package/dist/esm/ui-radio.entry.js +16 -7
  150. package/dist/esm/ui-search-result-row.entry.js +1 -1
  151. package/dist/esm/ui-search-shell.entry.js +1 -1
  152. package/dist/esm/ui-select.entry.js +1 -1
  153. package/dist/esm/ui-switch.entry.js +19 -10
  154. package/dist/esm/ui-tabs.entry.js +10 -9
  155. package/dist/esm/ui-textarea.entry.js +1 -1
  156. package/dist/esm/ui-toast-region.entry.js +30 -19
  157. package/dist/esm/ui-tooltip.entry.js +12 -8
  158. package/dist/esm/ui-top-bar.entry.js +1 -1
  159. package/dist/esm/ui-tree-item.entry.js +54 -617
  160. package/dist/esm/ui-tree.entry.js +123 -11
  161. package/dist/index.cjs +1224 -842
  162. package/dist/index.d.cts +5 -0
  163. package/dist/index.d.ts +5 -0
  164. package/dist/index.js +12 -2
  165. package/dist/looma/looma.esm.js +1 -1
  166. package/dist/looma/p-03f44c45.entry.js +1 -0
  167. package/dist/looma/p-08f80207.entry.js +1 -0
  168. package/dist/looma/{p-f74e5546.entry.js → p-13f8195a.entry.js} +1 -1
  169. package/dist/looma/{p-5a87b59d.entry.js → p-25e18ad6.entry.js} +1 -1
  170. package/dist/looma/p-2c03fa73.entry.js +1 -0
  171. package/dist/looma/{p-ed368426.entry.js → p-314d5c7c.entry.js} +1 -1
  172. package/dist/looma/{p-5da09f47.entry.js → p-3ef2a21b.entry.js} +1 -1
  173. package/dist/looma/{p-f0487ff3.entry.js → p-5a900d89.entry.js} +1 -1
  174. package/dist/looma/p-5fdcee1d.entry.js +1 -0
  175. package/dist/looma/{p-13347631.entry.js → p-672e3d16.entry.js} +1 -1
  176. package/dist/looma/{p-582973b5.entry.js → p-68430534.entry.js} +1 -1
  177. package/dist/looma/{p-add36e74.entry.js → p-72338f53.entry.js} +1 -1
  178. package/dist/looma/{p-a90d2821.entry.js → p-7ab661ec.entry.js} +1 -1
  179. package/dist/looma/p-7c4a225f.entry.js +1 -0
  180. package/dist/looma/p-82f2fa3d.entry.js +1 -0
  181. package/dist/looma/p-839faf55.entry.js +1 -0
  182. package/dist/looma/{p-7e0bb7f6.entry.js → p-8e254bc4.entry.js} +1 -1
  183. package/dist/looma/p-8e6b1001.entry.js +1 -0
  184. package/dist/looma/p-920656cf.entry.js +1 -0
  185. package/dist/looma/{p-40fe7fee.entry.js → p-97e8cb0e.entry.js} +1 -1
  186. package/dist/looma/p-9d2662ca.entry.js +1 -0
  187. package/dist/looma/p-9e1c4020.entry.js +1 -0
  188. package/dist/looma/p-BnGhGgTH.js +1 -0
  189. package/dist/looma/p-CoFximGM.js +13 -0
  190. package/dist/looma/{p-8b8840b8.entry.js → p-a63e2561.entry.js} +1 -1
  191. package/dist/looma/p-add67e4c.entry.js +1 -0
  192. package/dist/looma/p-b63f6d4f.entry.js +1 -0
  193. package/dist/looma/p-bd00d4e8.entry.js +1 -0
  194. package/dist/looma/p-cc915913.entry.js +1 -0
  195. package/dist/looma/p-cfba8f7c.entry.js +1 -0
  196. package/dist/looma/p-d56571a2.entry.js +1 -0
  197. package/dist/looma/{p-69a5557b.entry.js → p-e0f241ab.entry.js} +1 -1
  198. package/dist/looma/p-f1750fd7.entry.js +1 -0
  199. package/dist/looma/p-fd1e4d22.entry.js +1 -0
  200. package/dist/types/components/ui-avatar-group/ui-avatar-group.d.ts +1 -2
  201. package/dist/types/components/ui-callout/ui-callout.d.ts +6 -0
  202. package/dist/types/components/ui-checkbox/ui-checkbox.d.ts +2 -1
  203. package/dist/types/components/ui-chip/ui-chip.d.ts +6 -0
  204. package/dist/types/components/ui-dialog/ui-dialog.d.ts +7 -1
  205. package/dist/types/components/ui-disclosure/ui-disclosure.d.ts +2 -1
  206. package/dist/types/components/ui-form-field/ui-form-field.d.ts +8 -0
  207. package/dist/types/components/ui-menu/ui-menu.d.ts +2 -1
  208. package/dist/types/components/ui-popover/ui-popover.d.ts +2 -1
  209. package/dist/types/components/ui-radio/ui-radio.d.ts +4 -1
  210. package/dist/types/components/ui-switch/ui-switch.d.ts +2 -1
  211. package/dist/types/components/ui-tabs/ui-tabs.d.ts +2 -1
  212. package/dist/types/components/ui-toast-region/ui-toast-region.d.ts +3 -1
  213. package/dist/types/components/ui-tooltip/ui-tooltip.d.ts +2 -1
  214. package/dist/types/components/ui-tree/ui-tree.d.ts +12 -0
  215. package/dist/types/components/ui-tree-item/ui-tree-item.d.ts +11 -7
  216. package/dist/types/components.d.ts +110 -47
  217. package/dist/types/icons.d.ts +5 -0
  218. package/dist/types/utils/controlled-state.d.ts +4 -0
  219. package/dist/{ui-affordance-scope.entry-VO4C2MZX.js → ui-affordance-scope.entry-3TUZ6GLW.js} +2 -2
  220. package/dist/ui-avatar-group.entry-XGJKN25W.js +51 -0
  221. package/dist/{ui-avatar.entry-T6FU6ZYM.js → ui-avatar.entry-SN3G44HW.js} +3 -3
  222. package/dist/ui-badge.entry-B6WDCWJX.js +22 -0
  223. package/dist/{ui-button.entry-7UXMUGHN.js → ui-button.entry-AZYUELLV.js} +2 -2
  224. package/dist/ui-callout.entry-QRPWRMPC.js +32 -0
  225. package/dist/{ui-checkbox.entry-DMZJB3RE.js → ui-checkbox.entry-OB6GFC4M.js} +17 -8
  226. package/dist/ui-chip.entry-XSNPJXX3.js +22 -0
  227. package/dist/{ui-combobox.entry-ZCTPXEES.js → ui-combobox.entry-IIMMUJF7.js} +5 -5
  228. package/dist/{ui-context-menu.entry-2WMCBGCP.js → ui-context-menu.entry-AIULIE5Y.js} +5 -5
  229. package/dist/{ui-dialog.entry-WO23XOSW.js → ui-dialog.entry-QSYWYHLY.js} +50 -12
  230. package/dist/{ui-disclosure.entry-USX7OUEW.js → ui-disclosure.entry-3BJEYU3U.js} +13 -7
  231. package/dist/{ui-floating-action-button.entry-MXDIN7MV.js → ui-floating-action-button.entry-JEVNV6FI.js} +2 -2
  232. package/dist/ui-form-field.entry-PKSY7UU4.js +120 -0
  233. package/dist/{ui-icon-button.entry-MJUNXHBU.js → ui-icon-button.entry-TPX7BE7R.js} +2 -2
  234. package/dist/{ui-input.entry-AWG63YIG.js → ui-input.entry-6NCLNW4E.js} +2 -2
  235. package/dist/ui-menu-item.entry-KA2K3PKV.js +22 -0
  236. package/dist/{ui-menu.entry-IT3GW5TL.js → ui-menu.entry-7GDO5L2T.js} +22 -14
  237. package/dist/{ui-popover.entry-ZQQB4N6E.js → ui-popover.entry-FR6YRNK6.js} +17 -11
  238. package/dist/{ui-radio-group.entry-V7PCTS7I.js → ui-radio-group.entry-7QHXQSNO.js} +2 -2
  239. package/dist/{ui-radio.entry-JYH6TQBI.js → ui-radio.entry-YNMXKLDW.js} +20 -8
  240. package/dist/{ui-search-result-row.entry-JBNYXXUN.js → ui-search-result-row.entry-AHVVAAIO.js} +2 -2
  241. package/dist/{ui-search-shell.entry-TEAWE76O.js → ui-search-shell.entry-CNBEAMEZ.js} +2 -2
  242. package/dist/{ui-select.entry-F3A6TE2U.js → ui-select.entry-TUY6TCTC.js} +2 -2
  243. package/dist/{ui-switch.entry-MJIICMP2.js → ui-switch.entry-26LFI7B5.js} +23 -11
  244. package/dist/{ui-tabs.entry-6REFIUHV.js → ui-tabs.entry-LXB62RJJ.js} +14 -10
  245. package/dist/{ui-textarea.entry-OJTXCED7.js → ui-textarea.entry-JYGMGPX2.js} +2 -2
  246. package/dist/{ui-toast-region.entry-NOFXLKPS.js → ui-toast-region.entry-TOW4KZLZ.js} +32 -23
  247. package/dist/{ui-tooltip.entry-COWTWVHX.js → ui-tooltip.entry-SKFNYXPH.js} +19 -12
  248. package/dist/{ui-top-bar.entry-PIAWXJNV.js → ui-top-bar.entry-S3YP52EA.js} +2 -2
  249. package/dist/ui-tree-item.entry-LWYIPYLC.js +145 -0
  250. package/dist/{ui-tree.entry-XYI3ZFAZ.js → ui-tree.entry-LXKUQFRU.js} +114 -12
  251. package/editor/{chunk-QCOYOVQL.js → chunk-B5WVJOPV.js} +113 -97
  252. package/editor/extensions/index.d.ts +14 -6
  253. package/editor/extensions/index.js +1 -1
  254. package/editor/index.js +1 -1
  255. package/editor.css +37 -20
  256. package/package.json +1 -1
  257. package/styles.css +10 -0
  258. package/tokens.css +3 -0
  259. package/vue/{chunk-JLW23USW.js → chunk-D4AJULDE.js} +28 -16
  260. package/vue/editor/index.d.ts +5 -15
  261. package/vue/editor/index.js +1 -1
  262. package/vue/index.d.ts +325 -115
  263. package/vue/index.js +5 -1
  264. package/dist/components/p-CaietZcq.js +0 -1
  265. package/dist/components/p-DHd18bK7.js +0 -1
  266. package/dist/looma/p-14c081cf.entry.js +0 -1
  267. package/dist/looma/p-25366205.entry.js +0 -1
  268. package/dist/looma/p-2e3aa869.entry.js +0 -1
  269. package/dist/looma/p-446cda76.entry.js +0 -1
  270. package/dist/looma/p-4fc1b005.entry.js +0 -13
  271. package/dist/looma/p-6a8a4736.entry.js +0 -1
  272. package/dist/looma/p-6bf4038b.entry.js +0 -1
  273. package/dist/looma/p-8204fee6.entry.js +0 -1
  274. package/dist/looma/p-8238e0dc.entry.js +0 -1
  275. package/dist/looma/p-99d88efb.entry.js +0 -1
  276. package/dist/looma/p-a27669b1.entry.js +0 -1
  277. package/dist/looma/p-a6ee76b7.entry.js +0 -1
  278. package/dist/looma/p-b6398a6b.entry.js +0 -1
  279. package/dist/looma/p-d50faaff.entry.js +0 -1
  280. package/dist/looma/p-d77278ce.entry.js +0 -1
  281. package/dist/looma/p-d9ec13b7.entry.js +0 -1
  282. package/dist/looma/p-ecf8005f.entry.js +0 -1
  283. package/dist/ui-avatar-group.entry-TAXJRIIU.js +0 -59
  284. package/dist/ui-badge.entry-MZFYNBMJ.js +0 -22
  285. package/dist/ui-form-field.entry-7ZCMEHPY.js +0 -67
  286. package/dist/ui-menu-item.entry-HFTWG62N.js +0 -22
  287. package/dist/ui-tree-item.entry-BSEWNL2O.js +0 -389
@@ -3,13 +3,11 @@
3
3
  inset: auto;
4
4
  margin: 0;
5
5
  display: inline-block;
6
- border: 1px solid var(--ui-border-default);
7
- border-radius: var(--ui-radius-2);
8
- background: var(--ui-surface-elevated);
9
- color: var(--ui-text-primary);
10
- padding: var(--ui-space-2) var(--ui-space-3);
11
- font-size: var(--ui-font-size-sm);
12
- box-shadow: var(--ui-shadow-md);
6
+ box-sizing: border-box;
7
+ padding: 0;
8
+ border: 0;
9
+ border-radius: 0;
10
+ background: transparent;
13
11
  opacity: 0;
14
12
  transform: translateY(4px);
15
13
  transition:
@@ -19,6 +17,17 @@
19
17
  overlay var(--ui-motion-fast) allow-discrete;
20
18
  }
21
19
 
20
+ .tooltip__surface {
21
+ box-sizing: border-box;
22
+ border: 1px solid var(--ui-border-default);
23
+ border-radius: var(--ui-radius-2);
24
+ background: var(--ui-surface-elevated);
25
+ color: var(--ui-text-primary);
26
+ padding: var(--ui-space-2) var(--ui-space-3);
27
+ font-size: var(--ui-font-size-sm);
28
+ box-shadow: var(--ui-shadow-md);
29
+ }
30
+
22
31
  :host(:popover-open) { opacity: 1; transform: translateY(0); }
23
32
 
24
33
  @starting-style {
@@ -1,11 +1,13 @@
1
1
  import { Host, h } from "@stencil/core";
2
2
  import { openOverlay, closeOverlay } from "../../overlay/manager";
3
3
  import { dispatchDetail } from "../../utils/events";
4
+ import { controlledOrDefault, isControlled } from "../../utils/controlled-state";
4
5
  import { createAnchoredSurface, } from "../../overlay/positioning";
5
6
  export class UITooltip {
6
7
  host;
7
8
  for = '';
8
- open = false;
9
+ /** Controlled open state. Omit it to use defaultOpen and local interaction state. */
10
+ open;
9
11
  defaultOpen = false;
10
12
  placement = 'top-start';
11
13
  /** Pointer hover intent delay in milliseconds. Keyboard focus is immediate. */
@@ -26,7 +28,8 @@ export class UITooltip {
26
28
  hideTimer = null;
27
29
  syncFromProp() {
28
30
  this.clearTimers();
29
- this.internalOpen = this.open;
31
+ if (isControlled(this.open))
32
+ this.internalOpen = this.open;
30
33
  }
31
34
  resetSurface() {
32
35
  this.syncTrigger();
@@ -53,8 +56,7 @@ export class UITooltip {
53
56
  componentDidLoad() {
54
57
  if (!this.host.id)
55
58
  this.host.id = this.overlayId;
56
- this.syncFromProp();
57
- this.internalOpen = this.internalOpen || this.defaultOpen;
59
+ this.internalOpen = controlledOrDefault(this.open, this.defaultOpen);
58
60
  this.syncTrigger();
59
61
  this.setupSurface();
60
62
  this.host.addEventListener('pointerenter', this.onSurfaceEnter);
@@ -139,7 +141,8 @@ export class UITooltip {
139
141
  setInteractionOpen(nextOpen, trigger) {
140
142
  if (this.internalOpen === nextOpen)
141
143
  return;
142
- this.internalOpen = nextOpen;
144
+ if (!isControlled(this.open))
145
+ this.internalOpen = nextOpen;
143
146
  dispatchDetail(this.host, nextOpen ? 'open' : 'close', {
144
147
  open: nextOpen,
145
148
  reason: 'action',
@@ -196,7 +199,8 @@ export class UITooltip {
196
199
  if (reason === 'escape' || (reason === 'light-dismiss' && this.toggleOnClick)) {
197
200
  this.pinned = false;
198
201
  this.clearTimers();
199
- this.internalOpen = false;
202
+ if (!isControlled(this.open))
203
+ this.internalOpen = false;
200
204
  dispatchDetail(this.host, 'close', {
201
205
  open: false,
202
206
  reason,
@@ -205,7 +209,7 @@ export class UITooltip {
205
209
  }
206
210
  }
207
211
  render() {
208
- return (h(Host, { key: 'b0199c23316a707ae3e1e7c361f2838872f62221', role: "tooltip", hidden: !this.internalOpen, "data-open": this.internalOpen ? '' : undefined }, h("slot", { key: 'd0c7822f2f47848a509bf8e310806edbdb320f02' })));
212
+ return (h(Host, { key: 'ce34c51bc3a9c9f7f31b7f0d329175df0cee1ab3', role: "tooltip", hidden: !this.internalOpen, "data-open": this.internalOpen ? '' : undefined }, h("div", { key: 'e5bb2bcb146fe8ec3b4e9a6abb550961181e3c06', class: "tooltip__surface" }, h("slot", { key: 'bdb71bfcb0f72c212cbb5c64fb69510fdded4afb' }))));
209
213
  }
210
214
  static get is() { return "ui-tooltip"; }
211
215
  static get encapsulation() { return "shadow"; }
@@ -250,16 +254,15 @@ export class UITooltip {
250
254
  "references": {}
251
255
  },
252
256
  "required": false,
253
- "optional": false,
257
+ "optional": true,
254
258
  "docs": {
255
259
  "tags": [],
256
- "text": ""
260
+ "text": "Controlled open state. Omit it to use defaultOpen and local interaction state."
257
261
  },
258
262
  "getter": false,
259
263
  "setter": false,
260
264
  "reflect": false,
261
- "attribute": "open",
262
- "defaultValue": "false"
265
+ "attribute": "open"
263
266
  },
264
267
  "defaultOpen": {
265
268
  "type": "boolean",
@@ -27,7 +27,7 @@ export class UITopBar {
27
27
  this.hasActions = slotHasContent(this.actionsSlot);
28
28
  };
29
29
  render() {
30
- return (h(Host, { key: '730e45232ab2b86c2ac99dba773f4ca15d7c3c51' }, h("header", { key: 'f94f9b4f3f5930fda950895d2eec01d3ec175479', class: "top-bar", part: "base" }, h("div", { key: '038f6a404b0f159b4b826ada73d3c920266354c8', class: "top-bar__leading", hidden: !this.hasLeading }, h("slot", { key: '2d415368310c319eca3f3eb9b2c885ef79bb4107', name: "leading", ref: (el) => (this.leadingSlot = el), onSlotchange: this.syncSlots })), h("div", { key: 'dfd78b02066a91e9c610e4655a70da704ad65327', class: "top-bar__title" }, h("slot", { key: '499e24a864a31f6e400fd02aab4a3f960c87e572' })), h("div", { key: '5aa94952996487651dffecd2e351548631fa29b6', class: "top-bar__search", hidden: !this.hasSearch }, h("slot", { key: 'eddad95f8acf787ee0cead2a46e7961a06375d5c', name: "search", ref: (el) => (this.searchSlot = el), onSlotchange: this.syncSlots })), h("div", { key: 'dc69d492aa221a8beb888350bf101f8beeceede9', class: "top-bar__actions", hidden: !this.hasActions }, h("slot", { key: '7cde7e062f487da8209738a32415636c7a6b72f0', name: "actions", ref: (el) => (this.actionsSlot = el), onSlotchange: this.syncSlots })))));
30
+ return (h(Host, { key: 'b92aa4e03475b3e623212a1e98f45d5532860b51' }, h("header", { key: 'a3552708b0e424e762e100ee55fc6bfac4cd830a', class: "top-bar", part: "base" }, h("div", { key: '4c8a9e3a04ff23a615bf09e368f4212dd5b38157', class: "top-bar__leading", hidden: !this.hasLeading }, h("slot", { key: '64ecc99672b8fd37305810e0776a24bf87ea6f08', name: "leading", ref: (el) => (this.leadingSlot = el), onSlotchange: this.syncSlots })), h("div", { key: '37fc003aba2b87f7c8c0e654cd6810d7f231f365', class: "top-bar__title" }, h("slot", { key: 'e6c901c15852e83340ca8ad1e264fd5e35445e84' })), h("div", { key: '37b1ac319367eeded4182ada401a31e0b9c2555a', class: "top-bar__search", hidden: !this.hasSearch }, h("slot", { key: '0a8b5ef500dd843909bb35a1133be548411f3b71', name: "search", ref: (el) => (this.searchSlot = el), onSlotchange: this.syncSlots })), h("div", { key: '7e5054a3ed6ecfe8d9d8b1b36992843aa0fb62eb', class: "top-bar__actions", hidden: !this.hasActions }, h("slot", { key: '19fe59c5ba4da7f0ceda764948f1288bfaa2a41d', name: "actions", ref: (el) => (this.actionsSlot = el), onSlotchange: this.syncSlots })))));
31
31
  }
32
32
  static get is() { return "ui-top-bar"; }
33
33
  static get encapsulation() { return "shadow"; }
@@ -1,9 +1,10 @@
1
1
  :host {
2
2
  --ui-tree-indent: 16px;
3
+ --ui-tree-gutter: 0px;
3
4
 
4
5
  display: block;
5
6
  min-inline-size: 0;
6
- padding-inline-start: var(--ui-tree-gutter, 22px);
7
+ padding-inline-start: var(--ui-tree-gutter);
7
8
  }
8
9
 
9
10
  ::slotted(ui-tree-item) {
@@ -14,6 +14,8 @@ export class UITree {
14
14
  rejectedPosition = null;
15
15
  rejection = null;
16
16
  hoverIntent = null;
17
+ structureObserver = null;
18
+ tabStop = null;
17
19
  componentDidLoad() {
18
20
  this.hoverIntent = createHoverIntent(this.hoverExpandDelay, this.expandTarget);
19
21
  this.host.addEventListener('dragstart', this.onDragStart);
@@ -24,6 +26,11 @@ export class UITree {
24
26
  this.host.addEventListener('drop', this.onDrop);
25
27
  this.host.addEventListener('dragend', this.onDragEnd);
26
28
  this.host.addEventListener('keydown', this.onKeyDown);
29
+ this.host.addEventListener('focusin', this.onFocusIn);
30
+ this.host.addEventListener('ui-tree-expansion-change', this.onExpansionChange);
31
+ this.syncStructuralLevels();
32
+ this.structureObserver = new MutationObserver(this.syncStructuralLevels);
33
+ this.structureObserver.observe(this.host, { childList: true, subtree: true });
27
34
  }
28
35
  disconnectedCallback() {
29
36
  this.hoverIntent?.destroy();
@@ -35,10 +42,44 @@ export class UITree {
35
42
  this.host.removeEventListener('drop', this.onDrop);
36
43
  this.host.removeEventListener('dragend', this.onDragEnd);
37
44
  this.host.removeEventListener('keydown', this.onKeyDown);
45
+ this.host.removeEventListener('focusin', this.onFocusIn);
46
+ this.host.removeEventListener('ui-tree-expansion-change', this.onExpansionChange);
47
+ this.structureObserver?.disconnect();
48
+ this.structureObserver = null;
49
+ }
50
+ syncStructuralLevels = () => {
51
+ for (const item of Array.from(this.host.querySelectorAll('ui-tree-item'))) {
52
+ item.dispatchEvent(new CustomEvent('ui-tree-structure-sync'));
53
+ }
54
+ this.syncTabStop();
55
+ };
56
+ syncTabStop(preferred) {
57
+ const items = this.visibleItems();
58
+ const next = preferred && items.includes(preferred)
59
+ ? preferred
60
+ : this.tabStop && items.includes(this.tabStop)
61
+ ? this.tabStop
62
+ : items[0] ?? null;
63
+ this.tabStop = next;
64
+ for (const item of items) {
65
+ item.dispatchEvent(new CustomEvent('ui-tree-roving-tab-stop', {
66
+ detail: { active: item === next },
67
+ }));
68
+ }
38
69
  }
39
70
  itemFromEvent(event) {
40
71
  return event.composedPath().find(node => (node instanceof HTMLElement && node.localName === 'ui-tree-item')) ?? null;
41
72
  }
73
+ eventTargetsInteractiveContent(event) {
74
+ for (const node of event.composedPath()) {
75
+ if (node instanceof HTMLElement && node.localName === 'ui-tree-item')
76
+ break;
77
+ if (node instanceof HTMLElement && node.matches('a, button, input, select, textarea, [role="button"], [role="link"]')) {
78
+ return true;
79
+ }
80
+ }
81
+ return false;
82
+ }
42
83
  itemId(item) {
43
84
  return item.itemId || item.getAttribute('item-id') || '';
44
85
  }
@@ -86,9 +127,23 @@ export class UITree {
86
127
  const dropDepth = item.getAttribute('drop-depth');
87
128
  if (dropDepth !== null)
88
129
  return Number(dropDepth);
89
- if (item.depth !== undefined)
90
- return item.depth;
91
- return Number(item.getAttribute('depth')) || 1;
130
+ return Number(item.getAttribute('aria-level')) || 1;
131
+ }
132
+ subtreeDepth(item) {
133
+ if (item.subtreeDepth !== undefined)
134
+ return Math.max(0, Math.floor(item.subtreeDepth));
135
+ const override = item.getAttribute('subtree-depth');
136
+ if (override !== null)
137
+ return Math.max(0, Math.floor(Number(override)));
138
+ return Array.from(item.querySelectorAll('ui-tree-item')).reduce((deepest, descendant) => {
139
+ let nesting = 0;
140
+ let ancestor = descendant.parentElement?.closest('ui-tree-item') ?? null;
141
+ while (ancestor && ancestor !== item) {
142
+ nesting += 1;
143
+ ancestor = ancestor.parentElement?.closest('ui-tree-item') ?? null;
144
+ }
145
+ return ancestor === item ? Math.max(deepest, nesting + 1) : deepest;
146
+ }, 0);
92
147
  }
93
148
  dropRejection(source, target, position) {
94
149
  // A tree item can never move into (or beside) one of its own descendants.
@@ -108,9 +163,9 @@ export class UITree {
108
163
  return { reason: 'incompatible' };
109
164
  }
110
165
  const maxDepth = Math.max(0, Math.floor(this.maxDepth));
111
- if (maxDepth > 0 && source.subtreeDepth !== undefined) {
166
+ if (maxDepth > 0) {
112
167
  const targetDepth = Math.max(0, Math.floor(this.constraintDepth(target)));
113
- const subtreeDepth = Math.max(0, Math.floor(source.subtreeDepth));
168
+ const subtreeDepth = this.subtreeDepth(source);
114
169
  const resultingDepth = targetDepth + (position === 'inside' ? 1 : 0) + subtreeDepth;
115
170
  if (resultingDepth > maxDepth)
116
171
  return { reason: 'max-depth', maxDepth, resultingDepth };
@@ -306,7 +361,35 @@ export class UITree {
306
361
  return Array.from(this.host.querySelectorAll('ui-tree-item'))
307
362
  .filter(item => item.getClientRects().length > 0 && !item.hasAttribute('disabled'));
308
363
  }
364
+ parentItem(item) {
365
+ const parent = item.parentElement?.closest('ui-tree-item') ?? null;
366
+ return parent && this.host.contains(parent) ? parent : null;
367
+ }
368
+ firstVisibleChild(item, items) {
369
+ return items.find(candidate => this.parentItem(candidate) === item) ?? null;
370
+ }
371
+ focusItem(item) {
372
+ this.syncTabStop(item);
373
+ item.focus();
374
+ }
375
+ requestExpansion(item, expanded) {
376
+ item.dispatchEvent(new CustomEvent('ui-tree-request-expanded', {
377
+ detail: { expanded, trigger: 'keyboard' },
378
+ }));
379
+ }
380
+ onFocusIn = (event) => {
381
+ if (this.eventTargetsInteractiveContent(event))
382
+ return;
383
+ const item = this.itemFromEvent(event);
384
+ if (item)
385
+ this.syncTabStop(item);
386
+ };
387
+ onExpansionChange = () => {
388
+ requestAnimationFrame(() => this.syncTabStop());
389
+ };
309
390
  onKeyDown = (event) => {
391
+ if (this.eventTargetsInteractiveContent(event))
392
+ return;
310
393
  const current = this.itemFromEvent(event);
311
394
  if (!current)
312
395
  return;
@@ -314,14 +397,43 @@ export class UITree {
314
397
  const index = items.indexOf(current);
315
398
  if (index < 0)
316
399
  return;
317
- const next = event.key === 'ArrowDown' ? items[index + 1] : event.key === 'ArrowUp' ? items[index - 1] : null;
318
- if (!next)
400
+ const next = event.key === 'ArrowDown' ? items[index + 1]
401
+ : event.key === 'ArrowUp' ? items[index - 1]
402
+ : event.key === 'Home' ? items[0]
403
+ : event.key === 'End' ? items.at(-1)
404
+ : null;
405
+ if (next) {
406
+ event.preventDefault();
407
+ this.focusItem(next);
319
408
  return;
320
- event.preventDefault();
321
- next.focus();
409
+ }
410
+ if (event.key === 'ArrowLeft') {
411
+ if (current.getAttribute('aria-expanded') === 'true') {
412
+ event.preventDefault();
413
+ this.requestExpansion(current, false);
414
+ }
415
+ else if (this.parentItem(current)) {
416
+ event.preventDefault();
417
+ this.focusItem(this.parentItem(current));
418
+ }
419
+ return;
420
+ }
421
+ if (event.key === 'ArrowRight') {
422
+ if (current.getAttribute('aria-expanded') === 'false') {
423
+ event.preventDefault();
424
+ this.requestExpansion(current, true);
425
+ }
426
+ else if (current.getAttribute('aria-expanded') === 'true') {
427
+ const child = this.firstVisibleChild(current, items);
428
+ if (child) {
429
+ event.preventDefault();
430
+ this.focusItem(child);
431
+ }
432
+ }
433
+ }
322
434
  };
323
435
  render() {
324
- return (h(Host, { key: '474c2154d2abe3c76eee9c36bf552390089df6e8', role: "tree", "aria-label": this.label || 'Tree' }, h("slot", { key: '93aedd02f984dd33b5efc811fef417d1199917bd' })));
436
+ return (h(Host, { key: '549c09abc67dc60b16bf2d6b7d6346f214e9d6ae', role: "tree", "aria-label": this.label || 'Tree' }, h("slot", { key: 'fea59bde97611bf384e32ce4fb2b3eec9aca784f' })));
325
437
  }
326
438
  static get is() { return "ui-tree"; }
327
439
  static get encapsulation() { return "shadow"; }
@@ -7,11 +7,9 @@ export class UITreeItem {
7
7
  itemId = '';
8
8
  /** Accessible name used by the disclosure and drag handle. */
9
9
  label = '';
10
- /** One-based visual and semantic nesting level. */
11
- depth = 1;
12
- /** Application hierarchy depth used for drop constraints. Defaults to visual depth. */
10
+ /** Application hierarchy depth override used for drop constraints. Defaults to structural nesting. */
13
11
  dropDepth;
14
- /** Deepest descendant distance, used with the tree's max-depth drop constraint. */
12
+ /** Virtualized-tree descendant-depth override for the tree's max-depth drop constraint. */
15
13
  subtreeDepth;
16
14
  /** Whether this item accepts children and exposes disclosure behavior. */
17
15
  container = false;
@@ -23,37 +21,74 @@ export class UITreeItem {
23
21
  dropScope = '';
24
22
  /** Comma-separated drag kinds accepted as children. Empty accepts every kind. */
25
23
  accepts = '';
26
- /** Initial controlled expansion value. */
27
- expanded = false;
24
+ /** Controlled expansion value. When omitted, `default-expanded` initializes uncontrolled state. */
25
+ expanded;
28
26
  /** Initial uncontrolled expansion value. */
29
27
  defaultExpanded = false;
30
28
  selected = false;
31
29
  disabled = false;
32
30
  internalExpanded = false;
31
+ structuralLevel = 1;
32
+ tabStop = false;
33
33
  syncExpandedFromProp() {
34
- this.internalExpanded = this.expanded;
34
+ // A defined prop owns the rendered state; clearing it resumes the current
35
+ // uncontrolled state instead of replaying the initial default.
36
+ if (this.expanded !== undefined)
37
+ this.internalExpanded = this.expanded;
35
38
  }
36
39
  componentWillLoad() {
37
- this.internalExpanded = this.expanded || this.defaultExpanded;
40
+ this.internalExpanded = this.expanded ?? this.defaultExpanded;
41
+ this.updateStructuralLevel();
38
42
  }
39
- componentDidLoad() {
43
+ connectedCallback() {
40
44
  this.host.addEventListener('ui-tree-auto-expand', this.onAutoExpand);
45
+ this.host.addEventListener('ui-tree-structure-sync', this.updateStructuralLevel);
46
+ this.host.addEventListener('ui-tree-roving-tab-stop', this.onRovingTabStop);
47
+ this.host.addEventListener('ui-tree-request-expanded', this.onExpansionRequest);
41
48
  }
42
49
  disconnectedCallback() {
43
50
  this.host.removeEventListener('ui-tree-auto-expand', this.onAutoExpand);
51
+ this.host.removeEventListener('ui-tree-structure-sync', this.updateStructuralLevel);
52
+ this.host.removeEventListener('ui-tree-roving-tab-stop', this.onRovingTabStop);
53
+ this.host.removeEventListener('ui-tree-request-expanded', this.onExpansionRequest);
44
54
  }
55
+ updateStructuralLevel = () => {
56
+ const tree = this.host.closest('ui-tree');
57
+ let ancestor = this.host.parentElement?.closest('ui-tree-item') ?? null;
58
+ let level = 1;
59
+ while (ancestor && tree?.contains(ancestor)) {
60
+ level += 1;
61
+ ancestor = ancestor.parentElement?.closest('ui-tree-item') ?? null;
62
+ }
63
+ if (this.structuralLevel !== level)
64
+ this.structuralLevel = level;
65
+ };
45
66
  setExpanded(expanded, trigger) {
46
- if (!this.container || this.disabled || this.internalExpanded === expanded)
67
+ const current = this.isExpanded();
68
+ if (!this.container || this.disabled || current === expanded)
47
69
  return;
48
- this.internalExpanded = expanded;
70
+ if (this.expanded === undefined)
71
+ this.internalExpanded = expanded;
49
72
  dispatchDetail(this.host, 'expand', { id: this.itemId, expanded, trigger });
73
+ this.host.dispatchEvent(new CustomEvent('ui-tree-expansion-change'));
74
+ }
75
+ isExpanded() {
76
+ return this.expanded ?? this.internalExpanded;
50
77
  }
51
78
  onAutoExpand = () => {
52
79
  this.setExpanded(true, 'pointer');
53
80
  };
81
+ onRovingTabStop = (event) => {
82
+ this.tabStop = Boolean(event.detail?.active) && !this.disabled;
83
+ };
84
+ onExpansionRequest = (event) => {
85
+ const detail = event.detail;
86
+ if (typeof detail?.expanded === 'boolean')
87
+ this.setExpanded(detail.expanded, detail.trigger ?? 'keyboard');
88
+ };
54
89
  onDisclosureClick = (event) => {
55
90
  event.stopPropagation();
56
- this.setExpanded(!this.internalExpanded, eventToTrigger(event));
91
+ this.setExpanded(!this.isExpanded(), eventToTrigger(event));
57
92
  };
58
93
  onDisclosureKeydown = (event) => {
59
94
  if (event.key !== 'ArrowRight' && event.key !== 'ArrowLeft')
@@ -69,16 +104,17 @@ export class UITreeItem {
69
104
  const interactive = path.some((node) => node instanceof HTMLElement && (node.matches('a, button, input, select, textarea, [role="button"], [role="link"]')
70
105
  || node.getAttribute('slot') === 'actions'));
71
106
  if (!interactive)
72
- this.setExpanded(!this.internalExpanded, eventToTrigger(event));
107
+ this.setExpanded(!this.isExpanded(), eventToTrigger(event));
73
108
  };
74
109
  render() {
75
- const level = Math.max(1, Math.floor(this.depth));
76
- const disclosureLabel = `${this.internalExpanded ? 'Collapse' : 'Expand'} ${this.label || 'item'}`;
110
+ const level = this.structuralLevel;
111
+ const expanded = this.isExpanded();
112
+ const disclosureLabel = `${expanded ? 'Collapse' : 'Expand'} ${this.label || 'item'}`;
77
113
  const dragLabel = `Drag ${this.label || 'item'} to reorder`;
78
- return (h(Host, { key: '606f5fdac8a95489d0c62cd7d4918c6d5d0c759e', role: "treeitem", "aria-level": String(level), "aria-expanded": this.container ? String(this.internalExpanded) : undefined, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "data-container": this.container ? '' : undefined, "data-selected": this.selected ? '' : undefined, "data-disabled": this.disabled ? '' : undefined, "data-drag-type": this.dragType || 'item', "data-drop-scope": this.dropScope || undefined, "data-accepts": this.accepts || undefined, tabIndex: this.disabled ? -1 : 0, style: {
114
+ return (h(Host, { key: '36ad9eac3e0fe2a606e63294891b1c0697034b46', role: "treeitem", "aria-label": this.label || undefined, "aria-level": String(level), "aria-expanded": this.container ? String(expanded) : undefined, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "data-container": this.container ? '' : undefined, "data-selected": this.selected ? '' : undefined, "data-disabled": this.disabled ? '' : undefined, "data-drag-type": this.dragType || 'item', "data-drop-scope": this.dropScope || undefined, "data-accepts": this.accepts || undefined, tabIndex: this.disabled || !this.tabStop ? -1 : 0, style: {
79
115
  '--ui-tree-item-depth': String(level - 1),
80
116
  'margin-inline-start': level > 1 ? 'var(--ui-tree-indent, 16px)' : '0px',
81
- } }, h("div", { key: '2b4bb03d4b24ef668f22b08e803f7f43c2d63ae5', class: "row", part: "row", onClick: this.onRowClick }, this.sortable && !this.disabled ? (h("button", { class: "drag-handle", part: "drag-handle", type: "button", draggable: true, "aria-label": dragLabel, title: dragLabel }, h("span", { innerHTML: loomaIconMarkup('grip-vertical') }))) : null, this.container ? (h("button", { class: "disclosure", part: "disclosure", type: "button", "aria-label": disclosureLabel, "aria-expanded": String(this.internalExpanded), disabled: this.disabled, onClick: this.onDisclosureClick, onKeyDown: this.onDisclosureKeydown }, h("span", { class: { 'disclosure-icon': true, 'disclosure-icon--expanded': this.internalExpanded }, innerHTML: loomaIconMarkup('chevron-down') }))) : h("span", { class: "disclosure-spacer", "aria-hidden": "true" }), h("span", { key: 'e7b935158e35cdc6518bdd73d54c42dcfa211aee', class: "leading", part: "leading" }, h("slot", { key: '8448462349fd23b8be0fb673fc6e101bf94beaa7', name: "leading" })), h("span", { key: 'e0b6338e1ec9ec043446e42c5f03724adf7e1862', class: "label", part: "label" }, h("slot", { key: 'ed44e6f2ce3466c28d2b87fc7511399ecc339255' })), h("span", { key: '2aea78227904fe23cfc4b8e14852a4601e3cc34b', class: "actions", part: "actions" }, h("slot", { key: '7c6549008c2a54c3ea6fcdf9e0fdbe445d379922', name: "actions" })), h("span", { key: '05166ba04765bc518d6b95ca7ae5a67c4394d1bf', class: "drop-indicator row-drop-indicator", part: "drop-indicator", "aria-hidden": "true" })), this.container ? (h("div", { class: "children", part: "children", role: "group", hidden: !this.internalExpanded }, h("slot", { name: "children" }))) : null, h("span", { key: '7381d6e9e2a8f94695f29e73194b1603d79cefb9', class: "drop-indicator subtree-drop-indicator", part: "drop-indicator", "aria-hidden": "true" })));
117
+ } }, h("div", { key: 'e92f5bc73accef3b348559ea144e0b769c98c721', class: "row", part: "row", onClick: this.onRowClick }, this.sortable && !this.disabled ? (h("button", { class: "drag-handle", part: "drag-handle", type: "button", draggable: true, "aria-label": dragLabel, title: dragLabel }, h("span", { innerHTML: loomaIconMarkup('grip-vertical') }))) : null, this.container ? (h("button", { class: "disclosure", part: "disclosure", type: "button", "aria-label": disclosureLabel, "aria-expanded": String(expanded), disabled: this.disabled, onClick: this.onDisclosureClick, onKeyDown: this.onDisclosureKeydown }, h("span", { class: { 'disclosure-icon': true, 'disclosure-icon--expanded': expanded }, innerHTML: loomaIconMarkup('chevron-down') }))) : h("span", { class: "disclosure-spacer", "aria-hidden": "true" }), h("span", { key: 'dd2d0550d6846d0a4f80a4108968bfc32c18658f', class: "leading", part: "leading" }, h("slot", { key: '622d449a338dce57bc2e64aaf776471e8d3ce1b4', name: "leading" })), h("span", { key: '29c3e6ace4838ab941ada2547356288358faaeb2', class: "label", part: "label" }, h("slot", { key: 'f1594c11fa0b9fbe8a3c20df6edce19421cab148' })), h("span", { key: 'e4a6408f86b58a325145e713d116fc09322bb0d3', class: "actions", part: "actions" }, h("slot", { key: 'ff3afaf1089426e19ee1fc39c6567c3d40ca4272', name: "actions" })), h("span", { key: 'efcf23f7aad6c4353fa24bfe2a81001122335f72', class: "drop-indicator row-drop-indicator", part: "drop-indicator", "aria-hidden": "true" })), this.container ? (h("div", { class: "children", part: "children", role: "group", hidden: !expanded }, h("slot", { name: "children" }))) : null, h("span", { key: '21bfc8a6ad6e487cd044b5a3cbd7e8f900f2d1e1', class: "drop-indicator subtree-drop-indicator", part: "drop-indicator", "aria-hidden": "true" })));
82
118
  }
83
119
  static get is() { return "ui-tree-item"; }
84
120
  static get encapsulation() { return "shadow"; }
@@ -134,26 +170,6 @@ export class UITreeItem {
134
170
  "attribute": "label",
135
171
  "defaultValue": "''"
136
172
  },
137
- "depth": {
138
- "type": "number",
139
- "mutable": false,
140
- "complexType": {
141
- "original": "number",
142
- "resolved": "number",
143
- "references": {}
144
- },
145
- "required": false,
146
- "optional": false,
147
- "docs": {
148
- "tags": [],
149
- "text": "One-based visual and semantic nesting level."
150
- },
151
- "getter": false,
152
- "setter": false,
153
- "reflect": false,
154
- "attribute": "depth",
155
- "defaultValue": "1"
156
- },
157
173
  "dropDepth": {
158
174
  "type": "number",
159
175
  "mutable": false,
@@ -166,7 +182,7 @@ export class UITreeItem {
166
182
  "optional": true,
167
183
  "docs": {
168
184
  "tags": [],
169
- "text": "Application hierarchy depth used for drop constraints. Defaults to visual depth."
185
+ "text": "Application hierarchy depth override used for drop constraints. Defaults to structural nesting."
170
186
  },
171
187
  "getter": false,
172
188
  "setter": false,
@@ -185,7 +201,7 @@ export class UITreeItem {
185
201
  "optional": true,
186
202
  "docs": {
187
203
  "tags": [],
188
- "text": "Deepest descendant distance, used with the tree's max-depth drop constraint."
204
+ "text": "Virtualized-tree descendant-depth override for the tree's max-depth drop constraint."
189
205
  },
190
206
  "getter": false,
191
207
  "setter": false,
@@ -301,16 +317,15 @@ export class UITreeItem {
301
317
  "references": {}
302
318
  },
303
319
  "required": false,
304
- "optional": false,
320
+ "optional": true,
305
321
  "docs": {
306
322
  "tags": [],
307
- "text": "Initial controlled expansion value."
323
+ "text": "Controlled expansion value. When omitted, `default-expanded` initializes uncontrolled state."
308
324
  },
309
325
  "getter": false,
310
326
  "setter": false,
311
327
  "reflect": false,
312
- "attribute": "expanded",
313
- "defaultValue": "false"
328
+ "attribute": "expanded"
314
329
  },
315
330
  "defaultExpanded": {
316
331
  "type": "boolean",
@@ -376,7 +391,9 @@ export class UITreeItem {
376
391
  }
377
392
  static get states() {
378
393
  return {
379
- "internalExpanded": {}
394
+ "internalExpanded": {},
395
+ "structuralLevel": {},
396
+ "tabStop": {}
380
397
  };
381
398
  }
382
399
  static get elementRef() { return "host"; }
@@ -1,4 +1,4 @@
1
- import { AlignCenter, AlignLeft, AlignRight, Bold, Braces, ChevronDown, ChevronLeft, CodeXml, Columns3, Ellipsis, Eraser, GripHorizontal, GripVertical, Heading1, Heading2, Heading3, Highlighter, Image, Italic, List, ListOrdered, ListTodo, Merge, Minus, PaintBucket, PanelBottom, PanelLeft, PanelRight, PanelTop, Pilcrow, Plus, Quote, Redo2, Rows3, Split, Strikethrough, Table2, Trash2, Underline, Undo2, } from "lucide";
1
+ import { AlignCenter, AlignLeft, AlignRight, Bold, Braces, ChevronDown, ChevronLeft, CodeXml, CircleCheck, CircleX, Columns3, Ellipsis, Eraser, GripHorizontal, GripVertical, Heading1, Heading2, Heading3, Highlighter, Image, Info, Italic, List, ListOrdered, ListTodo, Merge, NotebookPen, Minus, PaintBucket, PanelBottom, PanelLeft, PanelRight, PanelTop, Pilcrow, Plus, Quote, Redo2, Rows3, Split, Strikethrough, Table2, Trash2, TriangleAlert, Underline, Undo2, } from "lucide";
2
2
  /** The opinionated Lucide set used by Looma's shipped interaction surfaces. */
3
3
  export const LOOMA_ICONS = {
4
4
  'align-center': AlignCenter,
@@ -6,6 +6,8 @@ export const LOOMA_ICONS = {
6
6
  'align-right': AlignRight,
7
7
  bold: Bold,
8
8
  braces: Braces,
9
+ 'circle-check': CircleCheck,
10
+ 'circle-x': CircleX,
9
11
  'chevron-down': ChevronDown,
10
12
  'chevron-left': ChevronLeft,
11
13
  'code-xml': CodeXml,
@@ -19,11 +21,13 @@ export const LOOMA_ICONS = {
19
21
  'heading-3': Heading3,
20
22
  highlighter: Highlighter,
21
23
  image: Image,
24
+ info: Info,
22
25
  italic: Italic,
23
26
  list: List,
24
27
  'list-ordered': ListOrdered,
25
28
  'list-todo': ListTodo,
26
29
  merge: Merge,
30
+ 'notebook-pen': NotebookPen,
27
31
  minus: Minus,
28
32
  'paint-bucket': PaintBucket,
29
33
  'panel-bottom': PanelBottom,
@@ -39,6 +43,7 @@ export const LOOMA_ICONS = {
39
43
  strikethrough: Strikethrough,
40
44
  table: Table2,
41
45
  trash: Trash2,
46
+ 'triangle-alert': TriangleAlert,
42
47
  underline: Underline,
43
48
  undo: Undo2,
44
49
  };
@@ -0,0 +1,4 @@
1
+ /** A state prop is controlled only when the consumer supplies a value. */
2
+ export const isControlled = (value) => value !== undefined;
3
+ /** Defaults apply only when a corresponding controlled prop is omitted. */
4
+ export const controlledOrDefault = (value, defaultValue) => value === undefined ? defaultValue : value;
@@ -9,8 +9,12 @@ export { UIBadge as UiBadge } from '../types/components/ui-badge/ui-badge';
9
9
  export { defineCustomElement as defineCustomElementUiBadge } from './ui-badge';
10
10
  export { UIButton as UiButton } from '../types/components/ui-button/ui-button';
11
11
  export { defineCustomElement as defineCustomElementUiButton } from './ui-button';
12
+ export { UICallout as UiCallout } from '../types/components/ui-callout/ui-callout';
13
+ export { defineCustomElement as defineCustomElementUiCallout } from './ui-callout';
12
14
  export { UICheckbox as UiCheckbox } from '../types/components/ui-checkbox/ui-checkbox';
13
15
  export { defineCustomElement as defineCustomElementUiCheckbox } from './ui-checkbox';
16
+ export { UIChip as UiChip } from '../types/components/ui-chip/ui-chip';
17
+ export { defineCustomElement as defineCustomElementUiChip } from './ui-chip';
14
18
  export { UICombobox as UiCombobox } from '../types/components/ui-combobox/ui-combobox';
15
19
  export { defineCustomElement as defineCustomElementUiCombobox } from './ui-combobox';
16
20
  export { UIContextMenu as UiContextMenu } from '../types/components/ui-context-menu/ui-context-menu';
@@ -1 +1 @@
1
- export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-Bh_1GxOD.js";export{UiAffordanceScope,defineCustomElement as defineCustomElementUiAffordanceScope}from"./ui-affordance-scope.js";export{UiAvatar,defineCustomElement as defineCustomElementUiAvatar}from"./ui-avatar.js";export{UiAvatarGroup,defineCustomElement as defineCustomElementUiAvatarGroup}from"./ui-avatar-group.js";export{UiBadge,defineCustomElement as defineCustomElementUiBadge}from"./ui-badge.js";export{UiButton,defineCustomElement as defineCustomElementUiButton}from"./ui-button.js";export{UiCheckbox,defineCustomElement as defineCustomElementUiCheckbox}from"./ui-checkbox.js";export{UiCombobox,defineCustomElement as defineCustomElementUiCombobox}from"./ui-combobox.js";export{UiContextMenu,defineCustomElement as defineCustomElementUiContextMenu}from"./ui-context-menu.js";export{UiDialog,defineCustomElement as defineCustomElementUiDialog}from"./ui-dialog.js";export{UiDisclosure,defineCustomElement as defineCustomElementUiDisclosure}from"./ui-disclosure.js";export{UiFloatingActionButton,defineCustomElement as defineCustomElementUiFloatingActionButton}from"./ui-floating-action-button.js";export{UiFormField,defineCustomElement as defineCustomElementUiFormField}from"./ui-form-field.js";export{UiIconButton,defineCustomElement as defineCustomElementUiIconButton}from"./ui-icon-button.js";export{UiInput,defineCustomElement as defineCustomElementUiInput}from"./ui-input.js";export{UiMenu,defineCustomElement as defineCustomElementUiMenu}from"./ui-menu.js";export{UiMenuItem,defineCustomElement as defineCustomElementUiMenuItem}from"./ui-menu-item.js";export{UiPopover,defineCustomElement as defineCustomElementUiPopover}from"./ui-popover.js";export{UiRadio,defineCustomElement as defineCustomElementUiRadio}from"./ui-radio.js";export{UiRadioGroup,defineCustomElement as defineCustomElementUiRadioGroup}from"./ui-radio-group.js";export{UiSearchResultRow,defineCustomElement as defineCustomElementUiSearchResultRow}from"./ui-search-result-row.js";export{UiSearchShell,defineCustomElement as defineCustomElementUiSearchShell}from"./ui-search-shell.js";export{UiSelect,defineCustomElement as defineCustomElementUiSelect}from"./ui-select.js";export{UiSwitch,defineCustomElement as defineCustomElementUiSwitch}from"./ui-switch.js";export{UiTabs,defineCustomElement as defineCustomElementUiTabs}from"./ui-tabs.js";export{UiTextarea,defineCustomElement as defineCustomElementUiTextarea}from"./ui-textarea.js";export{UiToastRegion,defineCustomElement as defineCustomElementUiToastRegion}from"./ui-toast-region.js";export{UiTooltip,defineCustomElement as defineCustomElementUiTooltip}from"./ui-tooltip.js";export{UiTopBar,defineCustomElement as defineCustomElementUiTopBar}from"./ui-top-bar.js";export{UiTree,defineCustomElement as defineCustomElementUiTree}from"./ui-tree.js";export{UiTreeItem,defineCustomElement as defineCustomElementUiTreeItem}from"./ui-tree-item.js";
1
+ export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-Bh_1GxOD.js";export{UiAffordanceScope,defineCustomElement as defineCustomElementUiAffordanceScope}from"./ui-affordance-scope.js";export{UiAvatar,defineCustomElement as defineCustomElementUiAvatar}from"./ui-avatar.js";export{UiAvatarGroup,defineCustomElement as defineCustomElementUiAvatarGroup}from"./ui-avatar-group.js";export{UiBadge,defineCustomElement as defineCustomElementUiBadge}from"./ui-badge.js";export{UiButton,defineCustomElement as defineCustomElementUiButton}from"./ui-button.js";export{UiCallout,defineCustomElement as defineCustomElementUiCallout}from"./ui-callout.js";export{UiCheckbox,defineCustomElement as defineCustomElementUiCheckbox}from"./ui-checkbox.js";export{UiChip,defineCustomElement as defineCustomElementUiChip}from"./ui-chip.js";export{UiCombobox,defineCustomElement as defineCustomElementUiCombobox}from"./ui-combobox.js";export{UiContextMenu,defineCustomElement as defineCustomElementUiContextMenu}from"./ui-context-menu.js";export{UiDialog,defineCustomElement as defineCustomElementUiDialog}from"./ui-dialog.js";export{UiDisclosure,defineCustomElement as defineCustomElementUiDisclosure}from"./ui-disclosure.js";export{UiFloatingActionButton,defineCustomElement as defineCustomElementUiFloatingActionButton}from"./ui-floating-action-button.js";export{UiFormField,defineCustomElement as defineCustomElementUiFormField}from"./ui-form-field.js";export{UiIconButton,defineCustomElement as defineCustomElementUiIconButton}from"./ui-icon-button.js";export{UiInput,defineCustomElement as defineCustomElementUiInput}from"./ui-input.js";export{UiMenu,defineCustomElement as defineCustomElementUiMenu}from"./ui-menu.js";export{UiMenuItem,defineCustomElement as defineCustomElementUiMenuItem}from"./ui-menu-item.js";export{UiPopover,defineCustomElement as defineCustomElementUiPopover}from"./ui-popover.js";export{UiRadio,defineCustomElement as defineCustomElementUiRadio}from"./ui-radio.js";export{UiRadioGroup,defineCustomElement as defineCustomElementUiRadioGroup}from"./ui-radio-group.js";export{UiSearchResultRow,defineCustomElement as defineCustomElementUiSearchResultRow}from"./ui-search-result-row.js";export{UiSearchShell,defineCustomElement as defineCustomElementUiSearchShell}from"./ui-search-shell.js";export{UiSelect,defineCustomElement as defineCustomElementUiSelect}from"./ui-select.js";export{UiSwitch,defineCustomElement as defineCustomElementUiSwitch}from"./ui-switch.js";export{UiTabs,defineCustomElement as defineCustomElementUiTabs}from"./ui-tabs.js";export{UiTextarea,defineCustomElement as defineCustomElementUiTextarea}from"./ui-textarea.js";export{UiToastRegion,defineCustomElement as defineCustomElementUiToastRegion}from"./ui-toast-region.js";export{UiTooltip,defineCustomElement as defineCustomElementUiTooltip}from"./ui-tooltip.js";export{UiTopBar,defineCustomElement as defineCustomElementUiTopBar}from"./ui-top-bar.js";export{UiTree,defineCustomElement as defineCustomElementUiTree}from"./ui-tree.js";export{UiTreeItem,defineCustomElement as defineCustomElementUiTreeItem}from"./ui-tree-item.js";
@@ -0,0 +1 @@
1
+ import{p as t,H as i,d as s,h as e,c as o,t as r}from"./p-Bh_1GxOD.js";import{o as h,c as n}from"./p-C-0syqXZ.js";import{d as a}from"./p-JwSoedEO.js";import{i as l,c}from"./p-BnGhGgTH.js";import{c as d}from"./p-DOulVJT7.js";const p=t(class extends i{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.opened=s(this,"open"),this.closed=s(this,"close")}get host(){return this}for="";open;defaultOpen=!1;placement="top-start";showDelay=500;hideDelay=100;toggleOnClick=!1;pinned=!1;focused=!1;opened;closed;internalOpen=!1;overlayId=`ui-tooltip-${Math.random().toString(36).slice(2,11)}`;trigger=null;surface=null;showTimer=null;hideTimer=null;syncFromProp(){this.clearTimers(),l(this.open)&&(this.internalOpen=this.open)}resetSurface(){this.syncTrigger(),this.setupSurface(),this.syncOverlay()}syncOverlay(){this.internalOpen?(this.surface?.show(),h({id:this.overlayId,modal:!1,element:this.host,relatedElements:this.trigger?[this.trigger]:void 0,dismissible:!0,requestClose:(t,i)=>this.handleRequestClose(t,i)})):(this.surface?.hide(),n(this.overlayId))}componentDidLoad(){this.host.id||(this.host.id=this.overlayId),this.internalOpen=c(this.open,this.defaultOpen),this.syncTrigger(),this.setupSurface(),this.host.addEventListener("pointerenter",this.onSurfaceEnter),this.host.addEventListener("pointerleave",this.onTriggerLeave),this.syncOverlay()}componentDidUpdate(){this.syncTrigger()}disconnectedCallback(){this.clearTimers(),this.detachTriggerListeners(),this.surface?.destroy(),this.surface=null,this.host.removeEventListener("pointerenter",this.onSurfaceEnter),this.host.removeEventListener("pointerleave",this.onTriggerLeave),n(this.overlayId)}syncTrigger(){const t=this.for?this.host.getRootNode().getElementById(this.for):this.host.previousElementSibling;t!==this.trigger&&(this.detachTriggerListeners(),this.trigger=t,this.attachTriggerListeners(),this.surface?.setAnchor(t))}setupSurface(){this.surface?.destroy(),this.surface=d(this.host,{anchor:this.trigger,placement:this.placement})}attachTriggerListeners(){if(this.detachTriggerListeners(),!this.trigger)return;const t=new Set((this.trigger.getAttribute("aria-describedby")||"").split(/\s+/).filter(Boolean));t.add(this.host.id),this.trigger.setAttribute("aria-describedby",[...t].join(" ")),this.trigger.addEventListener("click",this.onTriggerClick),this.trigger.addEventListener("keydown",this.onTriggerKeydown),this.trigger.addEventListener("pointerenter",this.onTriggerEnter),this.trigger.addEventListener("pointerleave",this.onTriggerLeave),this.trigger.addEventListener("focusin",this.onTriggerFocusIn),this.trigger.addEventListener("focusout",this.onTriggerFocusOut)}detachTriggerListeners(){if(!this.trigger)return;const t=(this.trigger.getAttribute("aria-describedby")||"").split(/\s+/).filter((t=>t&&t!==this.host.id));t.length?this.trigger.setAttribute("aria-describedby",t.join(" ")):this.trigger.removeAttribute("aria-describedby"),this.trigger.removeEventListener("click",this.onTriggerClick),this.trigger.removeEventListener("keydown",this.onTriggerKeydown),this.trigger.removeEventListener("pointerenter",this.onTriggerEnter),this.trigger.removeEventListener("pointerleave",this.onTriggerLeave),this.trigger.removeEventListener("focusin",this.onTriggerFocusIn),this.trigger.removeEventListener("focusout",this.onTriggerFocusOut)}clearShowTimer(){null!==this.showTimer&&(clearTimeout(this.showTimer),this.showTimer=null)}clearHideTimer(){null!==this.hideTimer&&(clearTimeout(this.hideTimer),this.hideTimer=null)}clearTimers(){this.clearShowTimer(),this.clearHideTimer()}setInteractionOpen(t,i){this.internalOpen!==t&&(l(this.open)||(this.internalOpen=t),a(this.host,t?"open":"close",{open:t,reason:"action",trigger:i}))}onSurfaceEnter=()=>this.clearHideTimer();onTriggerClick=t=>{this.toggleOnClick&&(this.clearTimers(),this.pinned=!this.pinned,this.setInteractionOpen(this.pinned,0===t.detail?"keyboard":"pointer"))};onTriggerKeydown=t=>{"Escape"===t.key&&this.clearTimers()};onTriggerEnter=t=>{"touch"!==t.pointerType&&(this.clearHideTimer(),this.internalOpen||null!==this.showTimer||(this.showTimer=setTimeout((()=>{this.showTimer=null,this.setInteractionOpen(!0,"pointer")}),Math.max(0,this.showDelay))))};onTriggerLeave=()=>{this.clearShowTimer(),this.focused||this.pinned||!this.internalOpen||null!==this.hideTimer||(this.hideTimer=setTimeout((()=>{this.hideTimer=null,this.setInteractionOpen(!1,"pointer")}),Math.max(0,this.hideDelay)))};onTriggerFocusIn=()=>{this.focused=!0,this.clearTimers(),this.setInteractionOpen(!0,"keyboard")};onTriggerFocusOut=t=>{const i=t.relatedTarget;i&&this.host.contains(i)||(this.focused=!1,this.pinned=!1,this.clearTimers(),this.setInteractionOpen(!1,"keyboard"))};handleRequestClose(t,i){("escape"===t||"light-dismiss"===t&&this.toggleOnClick)&&(this.pinned=!1,this.clearTimers(),l(this.open)||(this.internalOpen=!1),a(this.host,"close",{open:!1,reason:t,trigger:i}))}render(){return e(o,{key:"ce34c51bc3a9c9f7f31b7f0d329175df0cee1ab3",role:"tooltip",hidden:!this.internalOpen,"data-open":this.internalOpen?"":void 0},e("div",{key:"e5bb2bcb146fe8ec3b4e9a6abb550961181e3c06",class:"tooltip__surface"},e("slot",{key:"bdb71bfcb0f72c212cbb5c64fb69510fdded4afb"})))}static get watchers(){return{open:[{syncFromProp:0}],for:[{resetSurface:0}],placement:[{resetSurface:0}],internalOpen:[{syncOverlay:0}]}}static get style(){return":host{position:fixed;inset:auto;margin:0;display:inline-block;box-sizing:border-box;padding:0;border:0;border-radius:0;background:transparent;opacity:0;transform:translateY(4px);transition:opacity var(--ui-motion-fast) var(--ui-motion-ease), transform var(--ui-motion-fast) var(--ui-motion-ease), display var(--ui-motion-fast) allow-discrete, overlay var(--ui-motion-fast) allow-discrete}.tooltip__surface{box-sizing:border-box;border:1px solid var(--ui-border-default);border-radius:var(--ui-radius-2);background:var(--ui-surface-elevated);color:var(--ui-text-primary);padding:var(--ui-space-2) var(--ui-space-3);font-size:var(--ui-font-size-sm);box-shadow:var(--ui-shadow-md)}:host(:popover-open){opacity:1;transform:translateY(0)}@starting-style{:host(:popover-open){opacity:0;transform:translateY(4px)}}:host([hidden]){display:none !important}@media (prefers-reduced-motion: reduce){:host{transition:none}}"}},[769,"ui-tooltip",{for:[1],open:[4],defaultOpen:[4,"default-open"],placement:[1],showDelay:[2,"show-delay"],hideDelay:[2,"hide-delay"],toggleOnClick:[4,"toggle-on-click"],internalOpen:[32]},void 0,{open:[{syncFromProp:0}],for:[{resetSurface:0}],placement:[{resetSurface:0}],internalOpen:[{syncOverlay:0}]}]);function u(){"undefined"!=typeof customElements&&["ui-tooltip"].forEach((t=>{"ui-tooltip"===t&&(customElements.get(r(t))||customElements.define(r(t),p))}))}export{p as U,u as d}
@@ -0,0 +1 @@
1
+ const o=o=>void 0!==o,i=(o,i)=>void 0===o?i:o;export{i as c,o as i}