@threadlabs/looma 0.31.2 → 0.31.4

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 (417) hide show
  1. package/components/shared/overlay.js +1 -1
  2. package/components/ui-editor-toolbar/ui-editor-toolbar.html +1 -0
  3. package/components/ui-popover/ui-popover.html +11 -0
  4. package/dist/index.js +1 -1
  5. package/package.json +3 -3
  6. package/styles/ui-action-bar.css +1 -1
  7. package/styles/ui-affordance-scope.css +1 -1
  8. package/styles/ui-avatar-group.css +1 -1
  9. package/styles/ui-avatar.css +1 -1
  10. package/styles/ui-badge.css +1 -1
  11. package/styles/ui-breadcrumb-item.css +1 -1
  12. package/styles/ui-breadcrumbs.css +1 -1
  13. package/styles/ui-button.css +1 -1
  14. package/styles/ui-callout.css +1 -1
  15. package/styles/ui-card.css +1 -1
  16. package/styles/ui-checkbox.css +1 -1
  17. package/styles/ui-cluster.css +1 -1
  18. package/styles/ui-combobox.css +393 -1
  19. package/styles/ui-container.css +1 -1
  20. package/styles/ui-context-menu.css +1 -1
  21. package/styles/ui-cover.css +1 -1
  22. package/styles/ui-description-item.css +1 -1
  23. package/styles/ui-description-list.css +1 -1
  24. package/styles/ui-dialog.css +232 -1
  25. package/styles/ui-disclosure.css +1 -1
  26. package/styles/ui-editable.css +1 -1
  27. package/styles/ui-editor-block-actions.css +1 -1
  28. package/styles/ui-editor-chip-editor.css +1 -1
  29. package/styles/ui-editor-code-language.css +1 -1
  30. package/styles/ui-editor-footnote-editor.css +1 -1
  31. package/styles/ui-editor-image-toolbar.css +1 -1
  32. package/styles/ui-editor-insert-table-grid.css +1 -1
  33. package/styles/ui-editor-link-card.css +1 -1
  34. package/styles/ui-editor-link-form.css +1 -1
  35. package/styles/ui-editor-mention-menu-item.css +1 -1
  36. package/styles/ui-editor-mention-menu.css +1 -1
  37. package/styles/ui-editor-slash-menu-group.css +1 -1
  38. package/styles/ui-editor-slash-menu-item.css +1 -1
  39. package/styles/ui-editor-slash-menu.css +1 -1
  40. package/styles/ui-editor-surface.css +1 -1
  41. package/styles/ui-editor-table-context-menu.css +1 -1
  42. package/styles/ui-editor-table-overlay.css +1 -1
  43. package/styles/ui-editor-table-toolbar.css +1 -1
  44. package/styles/ui-editor-toolbar.css +2 -1
  45. package/styles/ui-floating-action-button.css +1 -1
  46. package/styles/ui-form-field.css +1 -1
  47. package/styles/ui-grid.css +1 -1
  48. package/styles/ui-icon-button.css +1 -1
  49. package/styles/ui-icon.css +1 -1
  50. package/styles/ui-image.css +1 -1
  51. package/styles/ui-input-group.css +1 -1
  52. package/styles/ui-input.css +1 -1
  53. package/styles/ui-list-item.css +1 -1
  54. package/styles/ui-list.css +1 -1
  55. package/styles/ui-listbox.css +97 -1
  56. package/styles/ui-menu-group.css +1 -1
  57. package/styles/ui-menu-item.css +1 -1
  58. package/styles/ui-menu.css +1 -1
  59. package/styles/ui-meter.css +1 -1
  60. package/styles/ui-nav-item.css +1 -1
  61. package/styles/ui-page-header.css +1 -1
  62. package/styles/ui-popover.css +12 -1
  63. package/styles/ui-radio-group.css +1 -1
  64. package/styles/ui-radio.css +1 -1
  65. package/styles/ui-reel.css +1 -1
  66. package/styles/ui-scroll-area.css +1 -1
  67. package/styles/ui-search-result-row.css +1 -1
  68. package/styles/ui-search-shell.css +1 -1
  69. package/styles/ui-section.css +1 -1
  70. package/styles/ui-select.css +1 -1
  71. package/styles/ui-separator.css +1 -1
  72. package/styles/ui-sidebar.css +1 -1
  73. package/styles/ui-spinner.css +1 -1
  74. package/styles/ui-stack.css +1 -1
  75. package/styles/ui-status-message.css +1 -1
  76. package/styles/ui-swatch.css +1 -1
  77. package/styles/ui-switch.css +1 -1
  78. package/styles/ui-switcher.css +1 -1
  79. package/styles/ui-table.css +1 -1
  80. package/styles/ui-tabs.css +1 -1
  81. package/styles/ui-text.css +1 -1
  82. package/styles/ui-textarea.css +1 -1
  83. package/styles/ui-toast-region.css +199 -1
  84. package/styles/ui-toast.css +77 -1
  85. package/styles/ui-tooltip.css +1 -1
  86. package/styles/ui-top-bar.css +1 -1
  87. package/styles/ui-tree-item.css +559 -1
  88. package/styles/ui-tree.css +1 -1
  89. package/vanilla/UiActionBar.d.ts +1 -1
  90. package/vanilla/UiActionBar.js +1 -1
  91. package/vanilla/UiAffordanceScope.d.ts +1 -1
  92. package/vanilla/UiAffordanceScope.js +1 -1
  93. package/vanilla/UiAvatar.d.ts +1 -1
  94. package/vanilla/UiAvatar.js +1 -1
  95. package/vanilla/UiAvatarGroup.d.ts +1 -1
  96. package/vanilla/UiAvatarGroup.js +1 -1
  97. package/vanilla/UiBadge.d.ts +1 -1
  98. package/vanilla/UiBadge.js +1 -1
  99. package/vanilla/UiBreadcrumbItem.d.ts +1 -1
  100. package/vanilla/UiBreadcrumbItem.js +1 -1
  101. package/vanilla/UiBreadcrumbs.d.ts +1 -1
  102. package/vanilla/UiBreadcrumbs.js +1 -1
  103. package/vanilla/UiButton.d.ts +1 -1
  104. package/vanilla/UiButton.js +1 -1
  105. package/vanilla/UiCallout.d.ts +1 -1
  106. package/vanilla/UiCallout.js +1 -1
  107. package/vanilla/UiCard.d.ts +1 -1
  108. package/vanilla/UiCard.js +1 -1
  109. package/vanilla/UiCheckbox.d.ts +1 -1
  110. package/vanilla/UiCheckbox.js +1 -1
  111. package/vanilla/UiCluster.d.ts +1 -1
  112. package/vanilla/UiCluster.js +1 -1
  113. package/vanilla/UiCombobox.d.ts +1 -1
  114. package/vanilla/UiCombobox.js +2 -2
  115. package/vanilla/UiContainer.d.ts +1 -1
  116. package/vanilla/UiContainer.js +1 -1
  117. package/vanilla/UiContextMenu.d.ts +1 -1
  118. package/vanilla/UiContextMenu.js +1 -1
  119. package/vanilla/UiCover.d.ts +1 -1
  120. package/vanilla/UiCover.js +1 -1
  121. package/vanilla/UiDescriptionItem.d.ts +1 -1
  122. package/vanilla/UiDescriptionItem.js +1 -1
  123. package/vanilla/UiDescriptionList.d.ts +1 -1
  124. package/vanilla/UiDescriptionList.js +1 -1
  125. package/vanilla/UiDialog.d.ts +1 -1
  126. package/vanilla/UiDialog.js +1 -1
  127. package/vanilla/UiDisclosure.d.ts +1 -1
  128. package/vanilla/UiDisclosure.js +1 -1
  129. package/vanilla/UiEditable.d.ts +1 -1
  130. package/vanilla/UiEditable.js +1 -1
  131. package/vanilla/UiEditorBlockActions.d.ts +1 -1
  132. package/vanilla/UiEditorBlockActions.js +1 -1
  133. package/vanilla/UiEditorChipEditor.d.ts +1 -1
  134. package/vanilla/UiEditorChipEditor.js +1 -1
  135. package/vanilla/UiEditorCodeLanguage.d.ts +1 -1
  136. package/vanilla/UiEditorCodeLanguage.js +1 -1
  137. package/vanilla/UiEditorFootnoteEditor.d.ts +1 -1
  138. package/vanilla/UiEditorFootnoteEditor.js +1 -1
  139. package/vanilla/UiEditorImageToolbar.d.ts +1 -1
  140. package/vanilla/UiEditorImageToolbar.js +1 -1
  141. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  142. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  143. package/vanilla/UiEditorLinkCard.d.ts +1 -1
  144. package/vanilla/UiEditorLinkCard.js +1 -1
  145. package/vanilla/UiEditorLinkForm.d.ts +1 -1
  146. package/vanilla/UiEditorLinkForm.js +1 -1
  147. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  148. package/vanilla/UiEditorMentionMenu.js +1 -1
  149. package/vanilla/UiEditorMentionMenuItem.d.ts +1 -1
  150. package/vanilla/UiEditorMentionMenuItem.js +1 -1
  151. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  152. package/vanilla/UiEditorSlashMenu.js +1 -1
  153. package/vanilla/UiEditorSlashMenuGroup.d.ts +1 -1
  154. package/vanilla/UiEditorSlashMenuGroup.js +1 -1
  155. package/vanilla/UiEditorSlashMenuItem.d.ts +1 -1
  156. package/vanilla/UiEditorSlashMenuItem.js +1 -1
  157. package/vanilla/UiEditorSurface.d.ts +1 -1
  158. package/vanilla/UiEditorSurface.js +1 -1
  159. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  160. package/vanilla/UiEditorTableContextMenu.js +1 -1
  161. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  162. package/vanilla/UiEditorTableOverlay.js +1 -1
  163. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  164. package/vanilla/UiEditorTableToolbar.js +1 -1
  165. package/vanilla/UiEditorToolbar.d.ts +1 -1
  166. package/vanilla/UiEditorToolbar.js +1 -1
  167. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  168. package/vanilla/UiFloatingActionButton.js +1 -1
  169. package/vanilla/UiFormField.d.ts +1 -1
  170. package/vanilla/UiFormField.js +1 -1
  171. package/vanilla/UiGrid.d.ts +1 -1
  172. package/vanilla/UiGrid.js +1 -1
  173. package/vanilla/UiIcon.d.ts +1 -1
  174. package/vanilla/UiIcon.js +1 -1
  175. package/vanilla/UiIconButton.d.ts +1 -1
  176. package/vanilla/UiIconButton.js +1 -1
  177. package/vanilla/UiImage.d.ts +1 -1
  178. package/vanilla/UiImage.js +1 -1
  179. package/vanilla/UiInput.d.ts +1 -1
  180. package/vanilla/UiInput.js +1 -1
  181. package/vanilla/UiInputGroup.d.ts +1 -1
  182. package/vanilla/UiInputGroup.js +1 -1
  183. package/vanilla/UiList.d.ts +1 -1
  184. package/vanilla/UiList.js +1 -1
  185. package/vanilla/UiListItem.d.ts +1 -1
  186. package/vanilla/UiListItem.js +1 -1
  187. package/vanilla/UiListbox.d.ts +1 -1
  188. package/vanilla/UiListbox.js +2 -2
  189. package/vanilla/UiMenu.d.ts +1 -1
  190. package/vanilla/UiMenu.js +1 -1
  191. package/vanilla/UiMenuGroup.d.ts +1 -1
  192. package/vanilla/UiMenuGroup.js +1 -1
  193. package/vanilla/UiMenuItem.d.ts +1 -1
  194. package/vanilla/UiMenuItem.js +1 -1
  195. package/vanilla/UiMeter.d.ts +1 -1
  196. package/vanilla/UiMeter.js +1 -1
  197. package/vanilla/UiNavItem.d.ts +1 -1
  198. package/vanilla/UiNavItem.js +1 -1
  199. package/vanilla/UiPageHeader.d.ts +1 -1
  200. package/vanilla/UiPageHeader.js +1 -1
  201. package/vanilla/UiPopover.d.ts +2 -1
  202. package/vanilla/UiPopover.js +6 -6
  203. package/vanilla/UiRadio.d.ts +1 -1
  204. package/vanilla/UiRadio.js +1 -1
  205. package/vanilla/UiRadioGroup.d.ts +1 -1
  206. package/vanilla/UiRadioGroup.js +1 -1
  207. package/vanilla/UiReel.d.ts +1 -1
  208. package/vanilla/UiReel.js +1 -1
  209. package/vanilla/UiScrollArea.d.ts +1 -1
  210. package/vanilla/UiScrollArea.js +1 -1
  211. package/vanilla/UiSearchResultRow.d.ts +1 -1
  212. package/vanilla/UiSearchResultRow.js +1 -1
  213. package/vanilla/UiSearchShell.d.ts +1 -1
  214. package/vanilla/UiSearchShell.js +1 -1
  215. package/vanilla/UiSection.d.ts +1 -1
  216. package/vanilla/UiSection.js +1 -1
  217. package/vanilla/UiSelect.d.ts +1 -1
  218. package/vanilla/UiSelect.js +1 -1
  219. package/vanilla/UiSeparator.d.ts +1 -1
  220. package/vanilla/UiSeparator.js +1 -1
  221. package/vanilla/UiSidebar.d.ts +1 -1
  222. package/vanilla/UiSidebar.js +1 -1
  223. package/vanilla/UiSpinner.d.ts +1 -1
  224. package/vanilla/UiSpinner.js +1 -1
  225. package/vanilla/UiStack.d.ts +1 -1
  226. package/vanilla/UiStack.js +1 -1
  227. package/vanilla/UiStatusMessage.d.ts +1 -1
  228. package/vanilla/UiStatusMessage.js +1 -1
  229. package/vanilla/UiSwatch.d.ts +1 -1
  230. package/vanilla/UiSwatch.js +1 -1
  231. package/vanilla/UiSwitch.d.ts +1 -1
  232. package/vanilla/UiSwitch.js +1 -1
  233. package/vanilla/UiSwitcher.d.ts +1 -1
  234. package/vanilla/UiSwitcher.js +1 -1
  235. package/vanilla/UiTable.d.ts +1 -1
  236. package/vanilla/UiTable.js +1 -1
  237. package/vanilla/UiTabs.d.ts +1 -1
  238. package/vanilla/UiTabs.js +1 -1
  239. package/vanilla/UiText.d.ts +1 -1
  240. package/vanilla/UiText.js +1 -1
  241. package/vanilla/UiTextarea.d.ts +1 -1
  242. package/vanilla/UiTextarea.js +1 -1
  243. package/vanilla/UiToast.d.ts +1 -1
  244. package/vanilla/UiToast.js +1 -1
  245. package/vanilla/UiToastRegion.d.ts +1 -1
  246. package/vanilla/UiToastRegion.js +1 -1
  247. package/vanilla/UiTooltip.d.ts +1 -1
  248. package/vanilla/UiTooltip.js +1 -1
  249. package/vanilla/UiTopBar.d.ts +1 -1
  250. package/vanilla/UiTopBar.js +1 -1
  251. package/vanilla/UiTree.d.ts +1 -1
  252. package/vanilla/UiTree.js +1 -1
  253. package/vanilla/UiTreeItem.d.ts +1 -1
  254. package/vanilla/UiTreeItem.js +1 -1
  255. package/vue/UiActionBar.vue +1 -1
  256. package/vue/UiAffordanceScope.vue +1 -1
  257. package/vue/UiAvatar.vue +1 -1
  258. package/vue/UiAvatarGroup.vue +1 -1
  259. package/vue/UiBadge.vue +1 -1
  260. package/vue/UiBreadcrumbItem.vue +1 -1
  261. package/vue/UiBreadcrumbs.vue +1 -1
  262. package/vue/UiButton.vue +1 -1
  263. package/vue/UiCallout.vue +1 -1
  264. package/vue/UiCard.vue +1 -1
  265. package/vue/UiCheckbox.vue +1 -1
  266. package/vue/UiCluster.vue +1 -1
  267. package/vue/UiCombobox.vue +362 -4
  268. package/vue/UiContainer.vue +1 -1
  269. package/vue/UiContextMenu.vue +1 -1
  270. package/vue/UiCover.vue +1 -1
  271. package/vue/UiDescriptionItem.vue +1 -1
  272. package/vue/UiDescriptionList.vue +1 -1
  273. package/vue/UiDialog.vue +200 -1
  274. package/vue/UiDisclosure.vue +1 -1
  275. package/vue/UiEditable.vue +1 -1
  276. package/vue/UiEditorBlockActions.vue +1 -1
  277. package/vue/UiEditorChipEditor.vue +1 -1
  278. package/vue/UiEditorCodeLanguage.vue +1 -1
  279. package/vue/UiEditorFootnoteEditor.vue +1 -1
  280. package/vue/UiEditorImageToolbar.vue +1 -1
  281. package/vue/UiEditorInsertTableGrid.vue +1 -1
  282. package/vue/UiEditorLinkCard.vue +1 -1
  283. package/vue/UiEditorLinkForm.vue +1 -1
  284. package/vue/UiEditorMentionMenu.vue +1 -1
  285. package/vue/UiEditorMentionMenuItem.vue +1 -1
  286. package/vue/UiEditorSlashMenu.vue +1 -1
  287. package/vue/UiEditorSlashMenuGroup.vue +1 -1
  288. package/vue/UiEditorSlashMenuItem.vue +1 -1
  289. package/vue/UiEditorSurface.vue +1 -1
  290. package/vue/UiEditorTableContextMenu.vue +1 -1
  291. package/vue/UiEditorTableOverlay.vue +1 -1
  292. package/vue/UiEditorTableToolbar.vue +1 -1
  293. package/vue/UiEditorToolbar.vue +2 -1
  294. package/vue/UiFloatingActionButton.vue +1 -1
  295. package/vue/UiFormField.vue +1 -1
  296. package/vue/UiGrid.vue +1 -1
  297. package/vue/UiIcon.vue +1 -1
  298. package/vue/UiIconButton.vue +1 -1
  299. package/vue/UiImage.vue +1 -1
  300. package/vue/UiInput.vue +1 -1
  301. package/vue/UiInputGroup.vue +1 -1
  302. package/vue/UiList.vue +1 -1
  303. package/vue/UiListItem.vue +1 -1
  304. package/vue/UiListbox.vue +79 -1
  305. package/vue/UiMenu.vue +1 -1
  306. package/vue/UiMenuGroup.vue +1 -1
  307. package/vue/UiMenuItem.vue +1 -1
  308. package/vue/UiMeter.vue +1 -1
  309. package/vue/UiNavItem.vue +1 -1
  310. package/vue/UiPageHeader.vue +1 -1
  311. package/vue/UiPopover.d.ts +6 -0
  312. package/vue/UiPopover.vue +32 -2
  313. package/vue/UiRadio.vue +1 -1
  314. package/vue/UiRadioGroup.vue +1 -1
  315. package/vue/UiReel.vue +1 -1
  316. package/vue/UiScrollArea.vue +1 -1
  317. package/vue/UiSearchResultRow.vue +1 -1
  318. package/vue/UiSearchShell.vue +1 -1
  319. package/vue/UiSection.vue +1 -1
  320. package/vue/UiSelect.vue +1 -1
  321. package/vue/UiSeparator.vue +1 -1
  322. package/vue/UiSidebar.vue +1 -1
  323. package/vue/UiSpinner.vue +1 -1
  324. package/vue/UiStack.vue +1 -1
  325. package/vue/UiStatusMessage.vue +1 -1
  326. package/vue/UiSwatch.vue +1 -1
  327. package/vue/UiSwitch.vue +1 -1
  328. package/vue/UiSwitcher.vue +1 -1
  329. package/vue/UiTable.vue +1 -1
  330. package/vue/UiTabs.vue +1 -1
  331. package/vue/UiText.vue +1 -1
  332. package/vue/UiTextarea.vue +1 -1
  333. package/vue/UiToast.vue +62 -1
  334. package/vue/UiToastRegion.vue +142 -1
  335. package/vue/UiTooltip.vue +1 -1
  336. package/vue/UiTopBar.vue +1 -1
  337. package/vue/UiTree.vue +1 -1
  338. package/vue/UiTreeItem.vue +635 -1
  339. package/vue/chunks/UiActionBar.js +1 -1
  340. package/vue/chunks/UiAffordanceScope.js +1 -1
  341. package/vue/chunks/UiAvatar.js +1 -1
  342. package/vue/chunks/UiAvatarGroup.js +1 -1
  343. package/vue/chunks/UiBadge.js +1 -1
  344. package/vue/chunks/UiBreadcrumbItem.js +1 -1
  345. package/vue/chunks/UiBreadcrumbs.js +1 -1
  346. package/vue/chunks/UiButton.js +1 -1
  347. package/vue/chunks/UiCallout.js +1 -1
  348. package/vue/chunks/UiCard.js +1 -1
  349. package/vue/chunks/UiCheckbox.js +1 -1
  350. package/vue/chunks/UiCluster.js +1 -1
  351. package/vue/chunks/UiCombobox.js +2 -1
  352. package/vue/chunks/UiContainer.js +1 -1
  353. package/vue/chunks/UiContextMenu.js +1 -1
  354. package/vue/chunks/UiCover.js +1 -1
  355. package/vue/chunks/UiDescriptionItem.js +1 -1
  356. package/vue/chunks/UiDescriptionList.js +1 -1
  357. package/vue/chunks/UiDialog.js +1 -1
  358. package/vue/chunks/UiDisclosure.js +1 -1
  359. package/vue/chunks/UiEditable.js +1 -1
  360. package/vue/chunks/UiEditorInsertTableGrid.js +1 -1
  361. package/vue/chunks/UiEditorMentionMenu.js +1 -1
  362. package/vue/chunks/UiEditorMentionMenuItem.js +1 -1
  363. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  364. package/vue/chunks/UiEditorSlashMenuGroup.js +1 -1
  365. package/vue/chunks/UiEditorSlashMenuItem.js +1 -1
  366. package/vue/chunks/UiEditorSurface.js +1 -1
  367. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  368. package/vue/chunks/UiEditorTableOverlay.js +1 -1
  369. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  370. package/vue/chunks/UiEditorToolbar.js +1 -1
  371. package/vue/chunks/UiFloatingActionButton.js +1 -1
  372. package/vue/chunks/UiFormField.js +1 -1
  373. package/vue/chunks/UiGrid.js +1 -1
  374. package/vue/chunks/UiIcon.js +1 -1
  375. package/vue/chunks/UiIconButton.js +1 -1
  376. package/vue/chunks/UiImage.js +1 -1
  377. package/vue/chunks/UiInput.js +1 -1
  378. package/vue/chunks/UiInputGroup.js +1 -1
  379. package/vue/chunks/UiList.js +1 -1
  380. package/vue/chunks/UiListItem.js +1 -1
  381. package/vue/chunks/UiListbox.js +2 -1
  382. package/vue/chunks/UiMenu.js +1 -1
  383. package/vue/chunks/UiMenuGroup.js +1 -1
  384. package/vue/chunks/UiMenuItem.js +1 -1
  385. package/vue/chunks/UiMeter.js +1 -1
  386. package/vue/chunks/UiNavItem.js +1 -1
  387. package/vue/chunks/UiPageHeader.js +1 -1
  388. package/vue/chunks/UiPopover.js +23 -1
  389. package/vue/chunks/UiRadio.js +1 -1
  390. package/vue/chunks/UiRadioGroup.js +1 -1
  391. package/vue/chunks/UiReel.js +1 -1
  392. package/vue/chunks/UiScrollArea.js +1 -1
  393. package/vue/chunks/UiSearchResultRow.js +1 -1
  394. package/vue/chunks/UiSearchShell.js +1 -1
  395. package/vue/chunks/UiSection.js +1 -1
  396. package/vue/chunks/UiSelect.js +1 -1
  397. package/vue/chunks/UiSeparator.js +1 -1
  398. package/vue/chunks/UiSidebar.js +1 -1
  399. package/vue/chunks/UiSpinner.js +1 -1
  400. package/vue/chunks/UiStack.js +1 -1
  401. package/vue/chunks/UiStatusMessage.js +1 -1
  402. package/vue/chunks/UiSwatch.js +1 -1
  403. package/vue/chunks/UiSwitch.js +1 -1
  404. package/vue/chunks/UiSwitcher.js +1 -1
  405. package/vue/chunks/UiTable.js +1 -1
  406. package/vue/chunks/UiTabs.js +1 -1
  407. package/vue/chunks/UiText.js +1 -1
  408. package/vue/chunks/UiTextarea.js +1 -1
  409. package/vue/chunks/UiToast.js +1 -1
  410. package/vue/chunks/UiToastRegion.js +1 -1
  411. package/vue/chunks/UiTooltip.js +1 -1
  412. package/vue/chunks/UiTopBar.js +1 -1
  413. package/vue/chunks/UiTree.js +1 -1
  414. package/vue/chunks/UiTreeItem.js +1 -1
  415. package/vue/components.css +1742 -395
  416. package/vue/editor/index.js +26 -4
  417. package/vue/host.ts +1 -1
@@ -945,12 +945,12 @@ ol:where([data-hn-ui-breadcrumbs]) {
945
945
  }
946
946
 
947
947
  /* A rounded SVG arc grows and recedes over a quiet full-circle track. */
948
- @keyframes ui-spinner-rotate-87fd2b5f {
948
+ @keyframes ui-spinner-rotate-f38ab49c {
949
949
  100% {
950
950
  transform: rotate(1turn);
951
951
  }
952
952
  }
953
- @keyframes ui-spinner-dash-87fd2b5f {
953
+ @keyframes ui-spinner-dash-f38ab49c {
954
954
  0% {
955
955
  stroke-dasharray: 1, 150;
956
956
  stroke-dashoffset: 0;
@@ -986,7 +986,7 @@ svg {
986
986
  display: block;
987
987
  inline-size: 100%;
988
988
  block-size: 100%;
989
- animation: ui-spinner-rotate-87fd2b5f 2s linear infinite;
989
+ animation: ui-spinner-rotate-f38ab49c 2s linear infinite;
990
990
  }
991
991
  circle {
992
992
  stroke-width: 3;
@@ -999,7 +999,7 @@ circle {
999
999
  stroke: currentColor;
1000
1000
  stroke-dasharray: 90, 150;
1001
1001
  stroke-dashoffset: 0;
1002
- animation: ui-spinner-dash-87fd2b5f 1.5s ease-in-out infinite;
1002
+ animation: ui-spinner-dash-f38ab49c 1.5s ease-in-out infinite;
1003
1003
  }
1004
1004
  @media (prefers-reduced-motion: reduce) {
1005
1005
  svg,.arc {
@@ -1783,7 +1783,7 @@ html[data-ui-input-modality="touch"]
1783
1783
  /* The label, and under it an optional line saying what the choice means. */
1784
1784
 
1785
1785
  /* Centre the tick's box and lift it slightly for the rotated check shape. */
1786
- @keyframes ui-checkbox-check-aac88235 {
1786
+ @keyframes ui-checkbox-check-6120eba6 {
1787
1787
  from {
1788
1788
  opacity: 0;
1789
1789
  transform: translateY(-0.09rem) rotate(45deg) scale(0.55);
@@ -1878,7 +1878,7 @@ input:checked:where([data-hn-ui-checkbox])::after {
1878
1878
  border-width: 0 0.125rem 0.125rem 0;
1879
1879
  opacity: 1;
1880
1880
  transform: translateY(-0.09rem) rotate(45deg);
1881
- animation: ui-checkbox-check-aac88235 180ms var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1))
1881
+ animation: ui-checkbox-check-6120eba6 180ms var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1))
1882
1882
  both;
1883
1883
  }
1884
1884
  input:indeterminate:where([data-hn-ui-checkbox])::after {
@@ -2654,148 +2654,490 @@ button:where([data-hn-ui-combobox]) {
2654
2654
  display: none;
2655
2655
  }
2656
2656
  }
2657
+ @scope ([data-slotted~="ui-combobox"]:not([data-hn])) to ([data-hn], [data-slotted]) {
2658
+ :where(.ui-combobox):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2659
+ /* Hooks do not inherit, so the parts below read them from the root. */
2660
+ --_ui-combobox-label-text: var(--ui-combobox-label-text);
2661
+ --_ui-combobox-label-font-size: var(--ui-combobox-label-font-size);
2662
+ --_ui-combobox-affordance-text: var(--ui-combobox-affordance-text);
2663
+ --_ui-combobox-max-block-size: var(--ui-combobox-max-block-size);
2664
+ --_ui-combobox-option-text: var(--ui-combobox-option-text);
2665
+ --_ui-combobox-message-text: var(--ui-combobox-message-text);
2666
+ --_ui-combobox-option-check: var(--ui-combobox-option-check);
2667
+ --_ui-combobox-item-min-block-size: var(--ui-combobox-item-min-block-size);
2668
+ --_ui-combobox-item-input-min-inline-size: var(--ui-combobox-item-input-min-inline-size);
2669
+ --_ui-combobox-item-item-max-inline-size: var(--ui-combobox-item-item-max-inline-size);
2670
+ --_ui-combobox-radius: var(--ui-combobox-radius);
2671
+ --_ui-combobox-invalid-border: var(--ui-combobox-invalid-border);
2672
+ --_ui-combobox-popup-surface: var(--ui-combobox-popup-surface);
2673
+ --_ui-combobox-popup-border: var(--ui-combobox-popup-border);
2674
+ --_ui-combobox-popup-radius: var(--ui-combobox-popup-radius);
2675
+ --_ui-combobox-popup-shadow: var(--ui-combobox-popup-shadow);
2657
2676
 
2658
- /* This component's hooks style the element they are set on, and never a nested one. */
2659
- @property --ui-container-gutters {
2660
- syntax: "*";
2661
- inherits: false;
2662
- }
2663
- @property --ui-container-measure {
2664
- syntax: "*";
2665
- inherits: false;
2677
+ --_row: var(--ui-control-size-md);
2678
+ display: grid;
2679
+ gap: var(--ui-space-1);
2680
+ min-inline-size: 0;
2681
+ color: var(--ui-text-primary);
2682
+ font: inherit;
2666
2683
  }
2667
-
2668
- /* A component that sets its display still honours the hidden attribute on its root. */
2669
- @scope (.ui-container) to ([data-hn]) {
2670
- :scope:where([data-hn-ui-container]) {
2671
- --_container-measure: 65ch;
2672
- --_container-gutters: var(--ui-space-4);
2673
- display: block;
2674
- inline-size: 100%;
2675
- max-inline-size: var(--ui-container-measure, var(--_container-measure));
2676
- margin-inline: auto;
2677
- padding-inline: var(--ui-container-gutters, var(--_container-gutters));
2684
+ label:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2685
+ color: var(--_ui-combobox-label-text, var(--ui-text-primary));
2686
+ font-size: var(--_ui-combobox-label-font-size, var(--ui-font-size-sm));
2687
+ font-weight: 500;
2678
2688
  }
2679
- :scope[data-ui-container-state~="measure=narrow"]:where([data-hn-ui-container]) {
2680
- --_container-measure: 45ch;
2689
+ .control:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2690
+ display: flex;
2691
+ align-items: center;
2692
+ gap: var(--ui-space-2);
2693
+ min-inline-size: 0;
2681
2694
  }
2682
- :scope[data-ui-container-state~="fill"]:where([data-hn-ui-container]) {
2695
+ .field:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2683
2696
  box-sizing: border-box;
2697
+ min-block-size: var(--_row);
2698
+ flex: 1 1 auto;
2684
2699
  display: flex;
2685
- flex-direction: column;
2686
- flex: 1;
2687
2700
  min-inline-size: 0;
2688
- min-block-size: 0;
2701
+ border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-default));
2702
+ border-radius: var(--_ui-combobox-radius, var(--ui-field-radius, var(--ui-radius-md)));
2703
+ background: var(--ui-control-surface, var(--ui-surface-default));
2704
+ box-shadow: var(--ui-control-inset);
2705
+ transition:
2706
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
2707
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
2689
2708
  }
2690
- :scope[data-ui-container-state~="measure=wide"]:where([data-hn-ui-container]) {
2691
- --_container-measure: 80ch;
2709
+ .field:focus-within:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2710
+ border-color: var(--ui-control-focus, var(--ui-accent-solid));
2711
+ box-shadow:
2712
+ var(--ui-control-inset),
2713
+ var(--ui-control-focus-halo-shadow);
2692
2714
  }
2693
- :scope[data-ui-container-state~="gutters=s"]:where([data-hn-ui-container]) {
2694
- --_container-gutters: var(--ui-space-3);
2715
+ .entry:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2716
+ display: flex;
2717
+ flex: 1 1 auto;
2718
+ min-inline-size: 0;
2695
2719
  }
2696
- :scope[data-ui-container-state~="gutters=m"]:where([data-hn-ui-container]) {
2697
- --_container-gutters: var(--ui-space-4);
2720
+ .help:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2721
+ flex: none;
2722
+ display: inline-flex;
2723
+ align-items: center;
2724
+ justify-content: center;
2725
+ inline-size: var(--ui-control-size-sm);
2726
+ block-size: var(--ui-control-size-sm);
2727
+ padding: 0;
2728
+ border: 0;
2729
+ border-radius: var(--ui-radius-round);
2730
+ background: transparent;
2731
+ color: var(--ui-text-secondary);
2732
+ cursor: pointer;
2733
+ transition:
2734
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
2735
+ color var(--ui-motion-fast) var(--ui-motion-ease);
2698
2736
  }
2699
- :scope[data-ui-container-state~="gutters=l"]:where([data-hn-ui-container]) {
2700
- --_container-gutters: var(--ui-space-5);
2737
+ .help:hover:enabled:where(:scope, :scope *):where([data-hn-ui-combobox]),.help[aria-expanded="true"]:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2738
+ background: color-mix(in srgb, currentColor 8%, transparent);
2739
+ color: var(--ui-text-primary);
2701
2740
  }
2702
- :scope[hidden]:where([data-hn-ui-container]) {
2703
- display: none;
2741
+ .help:focus-visible:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2742
+ outline: none;
2743
+ box-shadow: var(--ui-focus-halo);
2704
2744
  }
2745
+ .help:disabled:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2746
+ color: var(--ui-disabled-text);
2747
+ cursor: not-allowed;
2705
2748
  }
2706
-
2707
- /* This component's hooks style the element they are set on, and never a nested one. */
2708
- @property --ui-context-menu-surface {
2709
- syntax: "*";
2710
- inherits: false;
2749
+ .help-icon:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2750
+ inline-size: var(--ui-icon-size-sm);
2751
+ block-size: var(--ui-icon-size-sm);
2711
2752
  }
2712
- @property --ui-context-menu-border {
2713
- syntax: "*";
2714
- inherits: false;
2753
+ input:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where(:scope, :scope
2754
+ *):where([data-hn-ui-combobox])::selection {
2755
+ background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
2756
+ color: inherit;
2715
2757
  }
2716
- @property --ui-context-menu-radius {
2717
- syntax: "*";
2718
- inherits: false;
2758
+ input:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2759
+ appearance: none;
2760
+ width: 100%;
2761
+ min-inline-size: 0;
2762
+ min-block-size: calc(var(--_row) - 2 * var(--ui-border-width));
2763
+ box-sizing: border-box;
2764
+ border: 0;
2765
+ border-radius: inherit;
2766
+ background: transparent;
2767
+ color: inherit;
2768
+ font: inherit;
2769
+ line-height: var(--ui-line-height-tight);
2770
+ padding: var(--ui-space-2) var(--ui-space-3);
2771
+ margin: 0;
2772
+ outline: none;
2719
2773
  }
2720
- @property --ui-context-menu-shadow {
2721
- syntax: "*";
2722
- inherits: false;
2774
+ :where(.ui-combobox)[data-ui-combobox-state~="size=sm"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2775
+ --_row: var(--ui-control-size-sm);
2723
2776
  }
2724
- @property --ui-context-menu-z-index {
2725
- syntax: "*";
2726
- inherits: false;
2777
+ :where(.ui-combobox)[data-ui-combobox-state~="size=sm"]
2778
+ input:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2779
+ padding: var(--ui-space-1) var(--ui-space-2);
2780
+ font-size: var(--ui-font-size-sm);
2727
2781
  }
2728
-
2729
- /* A component that sets its display still honours the hidden attribute on its root. */
2730
- @scope (.ui-context-menu) to ([data-hn]) {
2731
- :scope:where([data-hn-ui-context-menu]) {
2732
- /* Hooks do not inherit, so the parts below read them from the root. */
2733
- --_ui-context-menu-surface: var(--ui-context-menu-surface);
2734
- --_ui-context-menu-border: var(--ui-context-menu-border);
2735
- --_ui-context-menu-radius: var(--ui-context-menu-radius);
2736
- --_ui-context-menu-shadow: var(--ui-context-menu-shadow);
2737
- --_ui-context-menu-z-index: var(--ui-context-menu-z-index);
2738
-
2739
- display: contents;
2782
+ :where(.ui-combobox)[data-ui-combobox-state~="size=lg"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2783
+ --_row: var(--ui-control-size-lg);
2740
2784
  }
2741
- .menu:where([data-hn-ui-context-menu]) {
2742
- position: fixed;
2743
- inset: auto;
2744
- margin: 0;
2745
- display: flex;
2746
- flex-direction: column;
2785
+ :where(.ui-combobox)[data-ui-combobox-state~="size=lg"]
2786
+ input:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2787
+ padding: var(--ui-space-3) var(--ui-space-4);
2788
+ font-size: var(--ui-font-size-md);
2789
+ }
2790
+ button:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2791
+ appearance: none;
2792
+ display: inline-grid;
2793
+ place-items: center;
2794
+ align-self: stretch;
2795
+ border: 0;
2796
+ border-radius: var(--ui-radius-md);
2797
+ background: transparent;
2798
+ color: var(--_ui-combobox-affordance-text, var(--ui-text-secondary));
2799
+ font: inherit;
2800
+ font-weight: 400;
2801
+ min-inline-size: 2rem;
2802
+ padding: 0 var(--ui-space-1);
2803
+ cursor: pointer;
2804
+ }
2805
+ .affordance-icon:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2806
+ display: block;
2807
+ inline-size: var(--ui-icon-size-sm);
2808
+ block-size: var(--ui-icon-size-sm);
2809
+ }
2810
+ button:hover:enabled:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2811
+ background: var(--ui-surface-muted);
2812
+ color: var(--ui-text-primary);
2813
+ }
2814
+ button:focus-visible:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2815
+ outline: none;
2816
+ background: var(--ui-surface-muted);
2817
+ box-shadow: inset 0 0 0 var(--ui-focus-width)
2818
+ color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
2819
+ }
2820
+ input:disabled:where(:scope, :scope *):where([data-hn-ui-combobox]),button:disabled:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2821
+ color: var(--ui-disabled-text);
2822
+ cursor: not-allowed;
2823
+ }
2824
+ .field:has(input:disabled):where(:scope, :scope *):where([data-hn-ui-combobox]) {
2825
+ background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
2826
+ }
2827
+ :where(.ui-combobox)[data-ui-combobox-state~="validationStatus=error"]
2828
+ .field:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]),:where(.ui-combobox)[data-ui-combobox-state~="invalid"]
2829
+ .field:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2830
+ border-color: var(
2831
+ --_ui-combobox-invalid-border,
2832
+ var(--ui-field-danger, var(--ui-danger-solid, var(--ui-accent-active)))
2833
+ );
2834
+ }
2835
+ .popup:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2747
2836
  box-sizing: border-box;
2837
+ min-inline-size: 12rem;
2838
+ max-inline-size: calc(100vw - 1rem);
2839
+ max-block-size: var(--_ui-combobox-max-block-size, 18rem);
2840
+ overflow: auto;
2841
+ margin: 0;
2748
2842
  padding: var(--ui-space-1);
2843
+ border: var(--ui-border-width) solid
2844
+ var(--_ui-combobox-popup-border, var(--ui-overlay-border, var(--ui-border-strong)));
2845
+ border-radius: var(--_ui-combobox-popup-radius, var(--ui-overlay-radius, var(--ui-radius-md)));
2749
2846
  background: var(
2750
- --_ui-context-menu-surface,
2847
+ --_ui-combobox-popup-surface,
2751
2848
  var(--ui-overlay-surface, var(--ui-surface-elevated))
2752
2849
  );
2753
- border: var(--ui-border-width) solid
2754
- var(--_ui-context-menu-border, var(--ui-overlay-border, var(--ui-border-strong)));
2755
- border-radius: var(--_ui-context-menu-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
2850
+ color: var(--ui-text-primary);
2756
2851
  box-shadow: var(
2757
- --_ui-context-menu-shadow,
2852
+ --_ui-combobox-popup-shadow,
2758
2853
  var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
2759
2854
  );
2760
- outline: 0;
2761
- overflow: auto;
2762
- z-index: var(--_ui-context-menu-z-index, 1000);
2763
- min-width: 12rem;
2764
- opacity: 0;
2765
- transform: translateY(-4px) scale(0.99);
2766
- transition:
2767
- opacity var(--ui-motion-fast) var(--ui-motion-ease),
2768
- transform var(--ui-motion-fast) var(--ui-motion-ease),
2769
- display var(--ui-motion-fast) allow-discrete,
2770
- overlay var(--ui-motion-fast) allow-discrete;
2771
- }
2772
- .menu hr:where([data-hn-ui-context-menu]) {
2773
- align-self: stretch;
2774
- block-size: 0;
2775
- margin: var(--ui-space-1) 0;
2776
- border: 0;
2777
- border-block-start: var(--ui-border-width) solid var(--ui-border-divider);
2778
- }
2779
- .menu:popover-open:where([data-hn-ui-context-menu]) {
2780
- opacity: 1;
2781
- transform: translateY(0) scale(1);
2782
- }
2783
- @starting-style {
2784
- .menu:popover-open:where([data-hn-ui-context-menu]) {
2785
- opacity: 0;
2786
- transform: translateY(-4px) scale(0.99);
2787
- }
2788
2855
  }
2789
- .menu[hidden]:where([data-hn-ui-context-menu]),.menu[popover]:not(:popover-open):where([data-hn-ui-context-menu]) {
2856
+ [hidden]:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2790
2857
  display: none;
2791
2858
  }
2792
- @media (prefers-reduced-motion: reduce) {
2793
- .menu:where([data-hn-ui-context-menu]) {
2794
- transition: none;
2795
- }
2859
+ .option[aria-disabled="true"]:where(:scope, :scope *)
2860
+ .primary:where([data-hn-ui-combobox]),.option[aria-disabled="true"]:where(:scope, :scope *)
2861
+ .secondary:where([data-hn-ui-combobox]) {
2862
+ color: var(--ui-disabled-text);
2796
2863
  }
2797
- :scope[hidden]:where([data-hn-ui-context-menu]) {
2798
- display: none;
2864
+ .primary:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2865
+ display: block;
2866
+ color: var(--_ui-combobox-option-text, inherit);
2867
+ font-weight: 500;
2868
+ }
2869
+ .detail:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2870
+ display: grid;
2871
+ gap: var(--ui-space-0-5);
2872
+ min-inline-size: 0;
2873
+ }
2874
+ .line:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2875
+ display: flex;
2876
+ flex-wrap: wrap;
2877
+ align-items: center;
2878
+ gap: var(--ui-space-2);
2879
+ }
2880
+ .description:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2881
+ color: var(--ui-text-muted);
2882
+ font-size: var(--ui-font-size-sm);
2883
+ line-height: var(--ui-line-height-md);
2884
+ }
2885
+ .message:where(:scope, :scope *):where([data-hn-ui-combobox]),.group:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2886
+ color: var(--_ui-combobox-message-text, var(--ui-text-secondary));
2887
+ font-weight: 400;
2888
+ font-size: var(--ui-font-size-sm);
2889
+ line-height: var(--ui-line-height-md);
2890
+ overflow-wrap: anywhere;
2891
+ }
2892
+ .group:where(:scope, :scope *):where([data-hn-ui-combobox]),.popup:where(:scope, :scope *) .message:where([data-hn-ui-combobox]) {
2893
+ padding: var(--ui-space-2) var(--ui-space-3);
2894
+ }
2895
+ .sr-only:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2896
+ position: absolute;
2897
+ inline-size: 1px;
2898
+ block-size: 1px;
2899
+ overflow: hidden;
2900
+ clip-path: inset(50%);
2901
+ white-space: nowrap;
2902
+ }
2903
+ @media (pointer: coarse) {
2904
+ :where(.ui-combobox):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2905
+ --_row: max(var(--ui-control-size-md), var(--ui-control-min-block-size));
2906
+ }
2907
+ button:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2908
+ min-inline-size: 2.75rem;
2909
+ min-block-size: calc(var(--_row) - 2 * var(--ui-border-width));
2910
+ }
2911
+ /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
2912
+ body-size text: below 16px, iOS zooms the page into the focused field. */
2913
+ :where(.ui-combobox)[data-ui-combobox-state~="size=sm"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2914
+ --_row: var(--ui-control-min-block-size);
2915
+ }
2916
+ :where(.ui-combobox)[data-ui-combobox-state~="size=sm"]
2917
+ input:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2918
+ font-size: inherit;
2919
+ }
2920
+ }
2921
+ @media (forced-colors: active) {
2922
+ .field:where(:scope, :scope *):where([data-hn-ui-combobox]),.popup:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2923
+ border-color: CanvasText;
2924
+ }
2925
+ .option.active:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2926
+ outline-color: Highlight;
2927
+ }
2928
+ }
2929
+ :where(.ui-combobox)[data-ui-combobox-state~="multiple"]
2930
+ .field:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2931
+ align-items: center;
2932
+ min-block-size: var(--_ui-combobox-item-min-block-size, var(--_row));
2933
+ padding: var(--ui-space-1);
2934
+ }
2935
+ :where(.ui-combobox)[data-ui-combobox-state~="multiple"]
2936
+ .entry:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2937
+ align-items: center;
2938
+ gap: var(--ui-space-1);
2939
+ overflow-x: auto;
2940
+ scrollbar-width: none;
2941
+ }
2942
+ :where(.ui-combobox)[data-ui-combobox-state~="multiple"]
2943
+ .entry:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox])::-webkit-scrollbar {
2944
+ display: none;
2945
+ }
2946
+ :where(.ui-combobox)[data-ui-combobox-state~="multiple"]
2947
+ input:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2948
+ flex: 1 0 var(--_ui-combobox-item-input-min-inline-size, 5rem);
2949
+ width: auto;
2950
+ min-block-size: 1.75rem;
2951
+ padding: var(--ui-space-0-5) var(--ui-space-1);
2952
+ }
2953
+ :where(.ui-combobox)[data-ui-combobox-state~="multiple"]:where(.ui-combobox)[data-ui-combobox-state~="size=sm"]
2954
+ .field:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2955
+ min-block-size: 0;
2956
+ padding: var(--ui-space-0-5);
2957
+ }
2958
+ :where(.ui-combobox)[data-ui-combobox-state~="multiple"]:where(.ui-combobox)[data-ui-combobox-state~="size=sm"]
2959
+ input:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2960
+ min-block-size: calc(var(--_row) - 2 * var(--ui-border-width) - 2 * var(--ui-space-0-5));
2961
+ padding: 0 var(--ui-space-1);
2962
+ }
2963
+ :where(.ui-combobox)[data-ui-combobox-state~="multiple"]:where(.ui-combobox)[data-ui-combobox-state~="size=lg"]
2964
+ .field:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2965
+ min-block-size: 0;
2966
+ }
2967
+ :where(.ui-combobox)[data-ui-combobox-state~="multiple"]:where(.ui-combobox)[data-ui-combobox-state~="size=lg"]
2968
+ input:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2969
+ min-block-size: calc(
2970
+ var(--ui-control-size-lg) - 2 * var(--ui-border-width) - 2 * var(--ui-space-1)
2971
+ );
2972
+ }
2973
+ .item:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2974
+ appearance: none;
2975
+ display: inline-flex;
2976
+ flex: none;
2977
+ min-inline-size: 0;
2978
+ max-inline-size: min(100%, var(--_ui-combobox-item-item-max-inline-size, 12rem));
2979
+ overflow: hidden;
2980
+ padding: 0;
2981
+ border: 0;
2982
+ border-radius: var(--ui-radius-sm);
2983
+ background: transparent;
2984
+ color: inherit;
2985
+ font: inherit;
2986
+ cursor: default;
2987
+ }
2988
+ .item:focus-visible:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2989
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
2990
+ outline-offset: var(--ui-border-width);
2991
+ }
2992
+ .item:disabled:where(:scope, :scope *):where([data-hn-ui-combobox]) {
2993
+ color: var(--ui-disabled-text);
2994
+ }
2995
+ :where(.ui-combobox)[hidden]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
2996
+ display: none;
2997
+ }
2998
+ }
2999
+
3000
+ /* This component's hooks style the element they are set on, and never a nested one. */
3001
+ @property --ui-container-gutters {
3002
+ syntax: "*";
3003
+ inherits: false;
3004
+ }
3005
+ @property --ui-container-measure {
3006
+ syntax: "*";
3007
+ inherits: false;
3008
+ }
3009
+
3010
+ /* A component that sets its display still honours the hidden attribute on its root. */
3011
+ @scope (.ui-container) to ([data-hn]) {
3012
+ :scope:where([data-hn-ui-container]) {
3013
+ --_container-measure: 65ch;
3014
+ --_container-gutters: var(--ui-space-4);
3015
+ display: block;
3016
+ inline-size: 100%;
3017
+ max-inline-size: var(--ui-container-measure, var(--_container-measure));
3018
+ margin-inline: auto;
3019
+ padding-inline: var(--ui-container-gutters, var(--_container-gutters));
3020
+ }
3021
+ :scope[data-ui-container-state~="measure=narrow"]:where([data-hn-ui-container]) {
3022
+ --_container-measure: 45ch;
3023
+ }
3024
+ :scope[data-ui-container-state~="fill"]:where([data-hn-ui-container]) {
3025
+ box-sizing: border-box;
3026
+ display: flex;
3027
+ flex-direction: column;
3028
+ flex: 1;
3029
+ min-inline-size: 0;
3030
+ min-block-size: 0;
3031
+ }
3032
+ :scope[data-ui-container-state~="measure=wide"]:where([data-hn-ui-container]) {
3033
+ --_container-measure: 80ch;
3034
+ }
3035
+ :scope[data-ui-container-state~="gutters=s"]:where([data-hn-ui-container]) {
3036
+ --_container-gutters: var(--ui-space-3);
3037
+ }
3038
+ :scope[data-ui-container-state~="gutters=m"]:where([data-hn-ui-container]) {
3039
+ --_container-gutters: var(--ui-space-4);
3040
+ }
3041
+ :scope[data-ui-container-state~="gutters=l"]:where([data-hn-ui-container]) {
3042
+ --_container-gutters: var(--ui-space-5);
3043
+ }
3044
+ :scope[hidden]:where([data-hn-ui-container]) {
3045
+ display: none;
3046
+ }
3047
+ }
3048
+
3049
+ /* This component's hooks style the element they are set on, and never a nested one. */
3050
+ @property --ui-context-menu-surface {
3051
+ syntax: "*";
3052
+ inherits: false;
3053
+ }
3054
+ @property --ui-context-menu-border {
3055
+ syntax: "*";
3056
+ inherits: false;
3057
+ }
3058
+ @property --ui-context-menu-radius {
3059
+ syntax: "*";
3060
+ inherits: false;
3061
+ }
3062
+ @property --ui-context-menu-shadow {
3063
+ syntax: "*";
3064
+ inherits: false;
3065
+ }
3066
+ @property --ui-context-menu-z-index {
3067
+ syntax: "*";
3068
+ inherits: false;
3069
+ }
3070
+
3071
+ /* A component that sets its display still honours the hidden attribute on its root. */
3072
+ @scope (.ui-context-menu) to ([data-hn]) {
3073
+ :scope:where([data-hn-ui-context-menu]) {
3074
+ /* Hooks do not inherit, so the parts below read them from the root. */
3075
+ --_ui-context-menu-surface: var(--ui-context-menu-surface);
3076
+ --_ui-context-menu-border: var(--ui-context-menu-border);
3077
+ --_ui-context-menu-radius: var(--ui-context-menu-radius);
3078
+ --_ui-context-menu-shadow: var(--ui-context-menu-shadow);
3079
+ --_ui-context-menu-z-index: var(--ui-context-menu-z-index);
3080
+
3081
+ display: contents;
3082
+ }
3083
+ .menu:where([data-hn-ui-context-menu]) {
3084
+ position: fixed;
3085
+ inset: auto;
3086
+ margin: 0;
3087
+ display: flex;
3088
+ flex-direction: column;
3089
+ box-sizing: border-box;
3090
+ padding: var(--ui-space-1);
3091
+ background: var(
3092
+ --_ui-context-menu-surface,
3093
+ var(--ui-overlay-surface, var(--ui-surface-elevated))
3094
+ );
3095
+ border: var(--ui-border-width) solid
3096
+ var(--_ui-context-menu-border, var(--ui-overlay-border, var(--ui-border-strong)));
3097
+ border-radius: var(--_ui-context-menu-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
3098
+ box-shadow: var(
3099
+ --_ui-context-menu-shadow,
3100
+ var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
3101
+ );
3102
+ outline: 0;
3103
+ overflow: auto;
3104
+ z-index: var(--_ui-context-menu-z-index, 1000);
3105
+ min-width: 12rem;
3106
+ opacity: 0;
3107
+ transform: translateY(-4px) scale(0.99);
3108
+ transition:
3109
+ opacity var(--ui-motion-fast) var(--ui-motion-ease),
3110
+ transform var(--ui-motion-fast) var(--ui-motion-ease),
3111
+ display var(--ui-motion-fast) allow-discrete,
3112
+ overlay var(--ui-motion-fast) allow-discrete;
3113
+ }
3114
+ .menu hr:where([data-hn-ui-context-menu]) {
3115
+ align-self: stretch;
3116
+ block-size: 0;
3117
+ margin: var(--ui-space-1) 0;
3118
+ border: 0;
3119
+ border-block-start: var(--ui-border-width) solid var(--ui-border-divider);
3120
+ }
3121
+ .menu:popover-open:where([data-hn-ui-context-menu]) {
3122
+ opacity: 1;
3123
+ transform: translateY(0) scale(1);
3124
+ }
3125
+ @starting-style {
3126
+ .menu:popover-open:where([data-hn-ui-context-menu]) {
3127
+ opacity: 0;
3128
+ transform: translateY(-4px) scale(0.99);
3129
+ }
3130
+ }
3131
+ .menu[hidden]:where([data-hn-ui-context-menu]),.menu[popover]:not(:popover-open):where([data-hn-ui-context-menu]) {
3132
+ display: none;
3133
+ }
3134
+ @media (prefers-reduced-motion: reduce) {
3135
+ .menu:where([data-hn-ui-context-menu]) {
3136
+ transition: none;
3137
+ }
3138
+ }
3139
+ :scope[hidden]:where([data-hn-ui-context-menu]) {
3140
+ display: none;
2799
3141
  }
2800
3142
  }
2801
3143
 
@@ -3042,13 +3384,13 @@ dd:where([data-hn-ui-description-item]) {
3042
3384
  /* A CSS-drawn X. */
3043
3385
 
3044
3386
  /* A touch target, like Button on coarse pointers. */
3045
- @keyframes ui-dialog-enter-0e4bd8b5 {
3387
+ @keyframes ui-dialog-enter-3b5ed45a {
3046
3388
  from {
3047
3389
  opacity: 0;
3048
3390
  transform: scale(0.96);
3049
3391
  }
3050
3392
  }
3051
- @keyframes ui-dialog-backdrop-enter-0e4bd8b5 {
3393
+ @keyframes ui-dialog-backdrop-enter-3b5ed45a {
3052
3394
  from {
3053
3395
  background-color: transparent;
3054
3396
  }
@@ -3096,7 +3438,7 @@ from {
3096
3438
  pointer-events: auto;
3097
3439
  opacity: 1;
3098
3440
  transform: scale(1);
3099
- animation: ui-dialog-enter-0e4bd8b5 var(--ui-dialog-duration, var(--ui-motion-base))
3441
+ animation: ui-dialog-enter-3b5ed45a var(--ui-dialog-duration, var(--ui-motion-base))
3100
3442
  var(--ui-motion-ease);
3101
3443
  }
3102
3444
  :scope[data-ui-dialog-state~="size=sm"]:where([data-hn-ui-dialog]) {
@@ -3217,7 +3559,7 @@ footer:empty:where([data-hn-ui-dialog]) {
3217
3559
  }
3218
3560
  :scope[open]:modal:where([data-hn-ui-dialog])::backdrop {
3219
3561
  background-color: var(--ui-overlay-backdrop);
3220
- animation: ui-dialog-backdrop-enter-0e4bd8b5 var(--_ui-dialog-duration, var(--ui-motion-base))
3562
+ animation: ui-dialog-backdrop-enter-3b5ed45a var(--_ui-dialog-duration, var(--ui-motion-base))
3221
3563
  var(--ui-motion-ease);
3222
3564
  }
3223
3565
  :scope[open][data-ui-backdrop-hidden]:where([data-hn-ui-dialog])::backdrop {
@@ -3226,24 +3568,205 @@ footer:empty:where([data-hn-ui-dialog]) {
3226
3568
  transition: none;
3227
3569
  }
3228
3570
  }
3571
+ @scope ([data-slotted~="ui-dialog"]:not([data-hn])) to ([data-hn], [data-slotted]) {
3572
+ :where(.ui-dialog):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
3573
+ /* Hooks do not inherit, so the parts below read them from the root. */
3574
+ --_ui-dialog-duration: var(--ui-dialog-duration);
3229
3575
 
3230
- /* This component's hooks style the element they are set on, and never a nested one. */
3231
- @property --ui-disclosure-trigger-min-block-size {
3232
- syntax: "*";
3233
- inherits: false;
3234
- }
3235
- @property --ui-disclosure-trigger-padding-block {
3236
- syntax: "*";
3237
- inherits: false;
3238
- }
3239
- @property --ui-disclosure-trigger-padding-inline {
3240
- syntax: "*";
3241
- inherits: false;
3242
- }
3243
-
3244
- /* Density resolves into the summary row's own values; the public tokens still override them. */
3245
-
3246
- /* An accordion row, not a field: no enclosing box, just a divider, so it never reads as a
3576
+ position: fixed;
3577
+ inset: 0;
3578
+ box-sizing: border-box;
3579
+ inline-size: min(
3580
+ calc(100% - var(--ui-dialog-viewport-gap, var(--ui-space-4)) * 2),
3581
+ var(--ui-dialog-max-width, var(--_ui-dialog-size, 440px))
3582
+ );
3583
+ max-inline-size: none;
3584
+ max-block-size: calc(100dvh - var(--ui-dialog-viewport-gap, var(--ui-space-4)) * 2);
3585
+ margin: auto;
3586
+ padding: 0;
3587
+ overflow: hidden;
3588
+ flex-direction: column;
3589
+ background: var(--ui-dialog-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
3590
+ border: var(--ui-border-width) solid
3591
+ var(--ui-dialog-border, var(--ui-overlay-border, var(--ui-border-strong)));
3592
+ border-radius: var(--ui-dialog-radius, var(--ui-overlay-radius, var(--ui-radius-dialog)));
3593
+ box-shadow: var(
3594
+ --ui-dialog-shadow,
3595
+ var(--ui-overlay-shadow, var(--ui-elevation-dialog, var(--ui-shadow-xl)))
3596
+ );
3597
+ visibility: hidden;
3598
+ pointer-events: none;
3599
+ opacity: 0;
3600
+ transform: scale(0.96);
3601
+ transition:
3602
+ opacity var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease),
3603
+ transform var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease),
3604
+ visibility var(--ui-dialog-duration, var(--ui-motion-base)),
3605
+ display var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete,
3606
+ overlay var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete;
3607
+ }
3608
+ :where(.ui-dialog)[open]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
3609
+ display: flex;
3610
+ visibility: visible;
3611
+ pointer-events: auto;
3612
+ opacity: 1;
3613
+ transform: scale(1);
3614
+ animation: ui-dialog-enter-3b5ed45a var(--ui-dialog-duration, var(--ui-motion-base))
3615
+ var(--ui-motion-ease);
3616
+ }
3617
+ :where(.ui-dialog)[data-ui-dialog-state~="size=sm"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
3618
+ --_ui-dialog-size: 360px;
3619
+ }
3620
+ :where(.ui-dialog)[data-ui-dialog-state~="size=lg"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
3621
+ --_ui-dialog-size: 640px;
3622
+ }
3623
+ :where(.ui-dialog)[data-ui-dialog-state~="size=fullscreen"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
3624
+ inset: 0;
3625
+ inline-size: 100%;
3626
+ block-size: 100dvh;
3627
+ max-block-size: none;
3628
+ margin: 0;
3629
+ border-radius: var(--ui-dialog-radius, 0);
3630
+ }
3631
+ :where(.ui-dialog)[data-ui-dialog-state~="alert"]
3632
+ .close:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
3633
+ display: none;
3634
+ }
3635
+ header:where(:scope, :scope *):where([data-hn-ui-dialog]) {
3636
+ display: flex;
3637
+ align-items: center;
3638
+ gap: var(--ui-space-3);
3639
+ flex: none;
3640
+ /* The title's ink sits inside its line box and the taller close target. Balance that
3641
+ visible top inset against the action row's bottom inset, not just the boxes. */
3642
+ padding: calc(var(--ui-space-3) + var(--ui-space-1) / 2) var(--ui-space-3) var(--ui-space-3)
3643
+ var(--ui-space-5);
3644
+ }
3645
+ :where(.ui-dialog)[data-ui-dialog-state~="alert"]
3646
+ header:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
3647
+ padding: var(--ui-space-5) var(--ui-space-5) var(--ui-space-3);
3648
+ }
3649
+ :where(.ui-dialog)
3650
+ .title:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
3651
+ flex: 1;
3652
+ min-inline-size: 0;
3653
+ margin: 0;
3654
+ padding: 0;
3655
+ border: 0;
3656
+ color: var(--ui-text-primary);
3657
+ letter-spacing: normal;
3658
+ font-size: var(--ui-font-size-lg);
3659
+ font-weight: var(--ui-font-semibold);
3660
+ line-height: var(--ui-line-height-tight);
3661
+ }
3662
+ .close:where(:scope, :scope *):where([data-hn-ui-dialog]) {
3663
+ display: inline-grid;
3664
+ place-items: center;
3665
+ flex: none;
3666
+ margin-inline-start: auto;
3667
+ inline-size: var(--ui-control-size-sm);
3668
+ block-size: var(--ui-control-size-sm);
3669
+ padding: 0;
3670
+ border: 0;
3671
+ border-radius: var(--ui-radius-round);
3672
+ background: transparent;
3673
+ color: var(--ui-text-secondary);
3674
+ cursor: pointer;
3675
+ transition:
3676
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
3677
+ color var(--ui-motion-fast) var(--ui-motion-ease);
3678
+ }
3679
+ .close:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where(:scope, :scope
3680
+ *):where([data-hn-ui-dialog])::before,.close:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where(:scope, :scope
3681
+ *):where([data-hn-ui-dialog])::after {
3682
+ content: "";
3683
+ grid-area: 1 / 1;
3684
+ inline-size: 0.875rem;
3685
+ block-size: 1.5px;
3686
+ border-radius: 1px;
3687
+ background: currentColor;
3688
+ transform: rotate(45deg);
3689
+ }
3690
+ .close:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where(:scope, :scope
3691
+ *):where([data-hn-ui-dialog])::after {
3692
+ transform: rotate(-45deg);
3693
+ }
3694
+ .close:hover:where(:scope, :scope *):where([data-hn-ui-dialog]) {
3695
+ background: var(--ui-surface-muted);
3696
+ color: var(--ui-text-primary);
3697
+ }
3698
+ .close:focus-visible:where(:scope, :scope *):where([data-hn-ui-dialog]) {
3699
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
3700
+ outline-offset: var(--ui-focus-width);
3701
+ }
3702
+ @media (pointer: coarse) {
3703
+ .close:where(:scope, :scope *):where([data-hn-ui-dialog]) {
3704
+ inline-size: var(--ui-control-min-block-size);
3705
+ block-size: var(--ui-control-min-block-size);
3706
+ }
3707
+ }
3708
+ html[data-ui-input-modality="touch"]
3709
+ :where(.ui-dialog)
3710
+ .close:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
3711
+ inline-size: var(--ui-control-min-block-size);
3712
+ block-size: var(--ui-control-min-block-size);
3713
+ }
3714
+ .body:where(:scope, :scope *):where([data-hn-ui-dialog]) {
3715
+ display: flex;
3716
+ flex-direction: column;
3717
+ flex: 1 1 auto;
3718
+ min-block-size: 0;
3719
+ padding: var(--ui-space-3) var(--ui-space-5) var(--ui-space-5);
3720
+ }
3721
+ footer:where(:scope, :scope *):where([data-hn-ui-dialog]) {
3722
+ display: flex;
3723
+ flex: none;
3724
+ flex-wrap: wrap;
3725
+ justify-content: flex-end;
3726
+ gap: var(--ui-space-2);
3727
+ padding: 0 var(--ui-space-5) var(--ui-space-5);
3728
+ }
3729
+ footer:empty:where(:scope, :scope *):where([data-hn-ui-dialog]) {
3730
+ display: none;
3731
+ }
3732
+ :where(.ui-dialog):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog])::backdrop {
3733
+ background-color: transparent;
3734
+ transition:
3735
+ background-color var(--_ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease),
3736
+ display var(--_ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease)
3737
+ allow-discrete,
3738
+ overlay var(--_ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease)
3739
+ allow-discrete;
3740
+ }
3741
+ :where(.ui-dialog)[open]:modal:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog])::backdrop {
3742
+ background-color: var(--ui-overlay-backdrop);
3743
+ animation: ui-dialog-backdrop-enter-3b5ed45a var(--_ui-dialog-duration, var(--ui-motion-base))
3744
+ var(--ui-motion-ease);
3745
+ }
3746
+ :where(.ui-dialog)[open][data-ui-backdrop-hidden]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog])::backdrop {
3747
+ background-color: transparent;
3748
+ animation: none;
3749
+ transition: none;
3750
+ }
3751
+ }
3752
+
3753
+ /* This component's hooks style the element they are set on, and never a nested one. */
3754
+ @property --ui-disclosure-trigger-min-block-size {
3755
+ syntax: "*";
3756
+ inherits: false;
3757
+ }
3758
+ @property --ui-disclosure-trigger-padding-block {
3759
+ syntax: "*";
3760
+ inherits: false;
3761
+ }
3762
+ @property --ui-disclosure-trigger-padding-inline {
3763
+ syntax: "*";
3764
+ inherits: false;
3765
+ }
3766
+
3767
+ /* Density resolves into the summary row's own values; the public tokens still override them. */
3768
+
3769
+ /* An accordion row, not a field: no enclosing box, just a divider, so it never reads as a
3247
3770
  * select or combobox. Stacked disclosures share their dividers. */
3248
3771
 
3249
3772
  /* A bounded accordion owns one flexible body, so its trigger never scrolls away. The
@@ -4843,6 +5366,7 @@ legend.sr-only:where([data-hn-ui-radio-group]) {
4843
5366
  margin: 0 var(--ui-editor-toolbar-divider-margin, 4px);
4844
5367
  }
4845
5368
  :scope[data-ui-editor-toolbar-state~="floating"]:where([data-hn-ui-editor-toolbar]) {
5369
+ box-sizing: border-box;
4846
5370
  position: relative;
4847
5371
  top: auto;
4848
5372
  width: max-content;
@@ -5389,6 +5913,8 @@ html[data-ui-input-modality="touch"] :scope:where([data-hn-ui-icon-button])::aft
5389
5913
  syntax: "*";
5390
5914
  inherits: false;
5391
5915
  }
5916
+
5917
+ /* A toolbar or card can supply its own surface, including an unclipped shadow. */
5392
5918
  @scope (.ui-popover) to ([data-hn]) {
5393
5919
  :scope:where([data-hn-ui-popover]) {
5394
5920
  --_ui-popover-surface: var(--ui-popover-surface);
@@ -5425,6 +5951,13 @@ html[data-ui-input-modality="touch"] :scope:where([data-hn-ui-icon-button])::aft
5425
5951
  var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
5426
5952
  );
5427
5953
  }
5954
+ :scope[data-ui-popover-state~="bare"] .surface:where([data-hn-ui-popover]) {
5955
+ overflow: visible;
5956
+ padding: 0;
5957
+ border: 0;
5958
+ background: transparent;
5959
+ box-shadow: none;
5960
+ }
5428
5961
  :scope:not([data-ui-popover-state~="internalOpen"]):where([data-hn-ui-popover]) {
5429
5962
  display: none;
5430
5963
  }
@@ -7489,6 +8022,73 @@ ul:where([data-hn-ui-editor-slash-menu-group]) {
7489
8022
  display: none;
7490
8023
  }
7491
8024
  }
8025
+ @scope ([data-slotted~="ui-listbox"]:not([data-hn])) to ([data-hn], [data-slotted]) {
8026
+ :where(.ui-listbox):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-listbox"]))):where([data-hn-ui-listbox]) {
8027
+ position: relative;
8028
+ box-sizing: border-box;
8029
+ display: block;
8030
+ inline-size: 100%;
8031
+ min-inline-size: 0;
8032
+ margin: 0;
8033
+ padding: var(--ui-space-1);
8034
+ border: var(--ui-border-width) solid var(--ui-listbox-border, var(--ui-control-border));
8035
+ border-radius: var(--ui-listbox-radius, var(--ui-field-radius, var(--ui-radius-md)));
8036
+ background: var(--ui-listbox-surface, var(--ui-control-surface));
8037
+ color: var(--ui-text-primary);
8038
+ font: inherit;
8039
+ line-height: var(--ui-line-height-md);
8040
+ box-shadow: var(--ui-control-inset);
8041
+ outline: none;
8042
+ }
8043
+ .choices:where(:scope, :scope *):where([data-hn-ui-listbox]) {
8044
+ display: flex;
8045
+ flex-direction: column;
8046
+ max-block-size: calc(max(2, var(--_rows, 5)) * var(--ui-control-size-md));
8047
+ }
8048
+ :where(.ui-listbox):not([data-enhanced]):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-listbox"]))):where([data-hn-ui-listbox]) {
8049
+ padding: 0;
8050
+ border: 0;
8051
+ background: transparent;
8052
+ box-shadow: none;
8053
+ }
8054
+ :where(.ui-listbox):not([data-enhanced])
8055
+ .choices:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-listbox"]))):where([data-hn-ui-listbox]),:where(.ui-listbox)[data-enhanced]
8056
+ .fallback:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-listbox"]))):where([data-hn-ui-listbox]) {
8057
+ display: none;
8058
+ }
8059
+ .fallback:where(:scope, :scope *):where([data-hn-ui-listbox]) {
8060
+ box-sizing: border-box;
8061
+ inline-size: 100%;
8062
+ font: inherit;
8063
+ }
8064
+ .validity:where(:scope, :scope *):where([data-hn-ui-listbox]) {
8065
+ position: absolute;
8066
+ inline-size: 1px;
8067
+ block-size: 1px;
8068
+ overflow: hidden;
8069
+ clip-path: inset(50%);
8070
+ opacity: 0;
8071
+ pointer-events: none;
8072
+ }
8073
+ :where(.ui-listbox):focus-visible:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-listbox"]))):where([data-hn-ui-listbox]) {
8074
+ border-color: var(--ui-control-focus);
8075
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
8076
+ outline-offset: var(--ui-focus-width);
8077
+ box-shadow: var(--ui-listbox-focus-shadow, var(--ui-focus-halo));
8078
+ }
8079
+ :where(.ui-listbox)[aria-invalid="true"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-listbox"]))):where([data-hn-ui-listbox]) {
8080
+ border-color: var(--ui-listbox-invalid-border, var(--ui-field-danger, var(--ui-danger)));
8081
+ }
8082
+ :where(.ui-listbox)[aria-disabled="true"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-listbox"]))):where([data-hn-ui-listbox]) {
8083
+ background: var(--ui-control-surface-disabled);
8084
+ color: var(--ui-disabled-text);
8085
+ box-shadow: none;
8086
+ cursor: not-allowed;
8087
+ }
8088
+ :where(.ui-listbox)[hidden]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-listbox"]))):where([data-hn-ui-listbox]) {
8089
+ display: none;
8090
+ }
8091
+ }
7492
8092
 
7493
8093
  @scope (.ui-menu-group) to ([data-hn]) {
7494
8094
  :scope:where([data-hn-ui-menu-group]) {
@@ -9408,36 +10008,95 @@ input:where([data-hn-ui-switch]),input:where([data-hn-ui-switch])::after {
9408
10008
  display: none;
9409
10009
  }
9410
10010
  }
10011
+ @scope ([data-slotted~="ui-toast"]:not([data-hn])) to ([data-hn], [data-slotted]) {
10012
+ :where(.ui-toast):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast"]))):where([data-hn-ui-toast]) {
10013
+ --_ui-toast-accent: var(--ui-border-strong);
10014
+ --_ui-toast-surface: var(--ui-surface-muted);
9411
10015
 
9412
- /* This component's hooks style the element they are set on, and never a nested one. */
9413
- @property --ui-toast-region-surface {
9414
- syntax: "*";
9415
- inherits: false;
9416
- }
9417
- @property --ui-toast-region-border {
9418
- syntax: "*";
9419
- inherits: false;
9420
- }
9421
- @property --ui-toast-region-radius {
9422
- syntax: "*";
9423
- inherits: false;
9424
- }
9425
- @property --ui-toast-region-shadow {
9426
- syntax: "*";
9427
- inherits: false;
9428
- }
9429
- @property --ui-toast-region-enter-duration {
9430
- syntax: "*";
9431
- inherits: false;
9432
- }
9433
- @property --ui-toast-region-exit-duration {
9434
- syntax: "*";
9435
- inherits: false;
9436
- }
9437
-
9438
- /* Leaving slides on down and fades; the controller removes the toast when this ends. */
9439
- @keyframes ui-toast-enter-cab264c9 {
9440
- from {
10016
+ display: flex;
10017
+ align-items: center;
10018
+ gap: var(--ui-space-2);
10019
+ box-sizing: border-box;
10020
+ inline-size: 100%;
10021
+ margin: 0;
10022
+ padding: var(--ui-space-3) var(--ui-space-4);
10023
+ /* The close button's internal space supplies the rest of the trailing inset. */
10024
+ padding-inline-end: var(--ui-space-2);
10025
+ border: var(--ui-border-width) solid
10026
+ var(
10027
+ --ui-toast-border,
10028
+ var(--ui-overlay-border, var(--ui-toast-accent, var(--_ui-toast-accent)))
10029
+ );
10030
+ border-radius: var(--ui-toast-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
10031
+ background: var(--ui-toast-surface, var(--ui-overlay-surface, var(--_ui-toast-surface)));
10032
+ color: var(--ui-text-primary);
10033
+ font-family: var(--ui-font-family-sans);
10034
+ font-size: var(--ui-font-size-sm);
10035
+ font-weight: var(--ui-font-normal);
10036
+ line-height: var(--ui-line-height-md);
10037
+ box-shadow: var(
10038
+ --ui-toast-shadow,
10039
+ var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
10040
+ );
10041
+ pointer-events: auto;
10042
+ }
10043
+ :where(.ui-toast)[data-ui-toast-state~="tone=info"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast"]))):where([data-hn-ui-toast]) {
10044
+ --_ui-toast-accent: var(--ui-info-solid);
10045
+ --_ui-toast-surface: var(--ui-info-soft);
10046
+ }
10047
+ :where(.ui-toast)[data-ui-toast-state~="tone=success"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast"]))):where([data-hn-ui-toast]) {
10048
+ --_ui-toast-accent: var(--ui-success-solid);
10049
+ --_ui-toast-surface: var(--ui-success-soft);
10050
+ }
10051
+ :where(.ui-toast)[data-ui-toast-state~="tone=warning"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast"]))):where([data-hn-ui-toast]) {
10052
+ --_ui-toast-accent: var(--ui-warning-solid);
10053
+ --_ui-toast-surface: var(--ui-warning-soft);
10054
+ }
10055
+ :where(.ui-toast)[data-ui-toast-state~="tone=danger"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast"]))):where([data-hn-ui-toast]) {
10056
+ --_ui-toast-accent: var(--ui-danger-solid);
10057
+ --_ui-toast-surface: var(--ui-danger-soft);
10058
+ }
10059
+ .message:where(:scope, :scope *):where([data-hn-ui-toast]) {
10060
+ min-inline-size: 0;
10061
+ flex: 1;
10062
+ }
10063
+ .action:not(:has(> *)):where(:scope, :scope *):where([data-hn-ui-toast]) {
10064
+ display: none;
10065
+ }
10066
+ :where(.ui-toast)[hidden]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast"]))):where([data-hn-ui-toast]) {
10067
+ display: none;
10068
+ }
10069
+ }
10070
+
10071
+ /* This component's hooks style the element they are set on, and never a nested one. */
10072
+ @property --ui-toast-region-surface {
10073
+ syntax: "*";
10074
+ inherits: false;
10075
+ }
10076
+ @property --ui-toast-region-border {
10077
+ syntax: "*";
10078
+ inherits: false;
10079
+ }
10080
+ @property --ui-toast-region-radius {
10081
+ syntax: "*";
10082
+ inherits: false;
10083
+ }
10084
+ @property --ui-toast-region-shadow {
10085
+ syntax: "*";
10086
+ inherits: false;
10087
+ }
10088
+ @property --ui-toast-region-enter-duration {
10089
+ syntax: "*";
10090
+ inherits: false;
10091
+ }
10092
+ @property --ui-toast-region-exit-duration {
10093
+ syntax: "*";
10094
+ inherits: false;
10095
+ }
10096
+
10097
+ /* Leaving slides on down and fades; the controller removes the toast when this ends. */
10098
+ @keyframes ui-toast-enter-1bebce00 {
10099
+ from {
9441
10100
  opacity: 0;
9442
10101
  transform: translateY(-1rem);
9443
10102
  }
@@ -9446,7 +10105,7 @@ to {
9446
10105
  transform: translateY(0);
9447
10106
  }
9448
10107
  }
9449
- @keyframes ui-toast-exit-cab264c9 {
10108
+ @keyframes ui-toast-exit-1bebce00 {
9450
10109
  from {
9451
10110
  opacity: 1;
9452
10111
  transform: translateY(0);
@@ -9456,7 +10115,7 @@ to {
9456
10115
  transform: translateY(0.75rem);
9457
10116
  }
9458
10117
  }
9459
- @keyframes ui-toast-enter-bottom-cab264c9 {
10118
+ @keyframes ui-toast-enter-bottom-1bebce00 {
9460
10119
  from {
9461
10120
  opacity: 0;
9462
10121
  transform: translateY(1rem);
@@ -9466,7 +10125,7 @@ to {
9466
10125
  transform: translateY(0);
9467
10126
  }
9468
10127
  }
9469
- @keyframes ui-toast-exit-bottom-cab264c9 {
10128
+ @keyframes ui-toast-exit-bottom-1bebce00 {
9470
10129
  from {
9471
10130
  opacity: 1;
9472
10131
  transform: translateY(0);
@@ -9557,7 +10216,7 @@ to {
9557
10216
  --_ui-toast-region-shadow,
9558
10217
  var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
9559
10218
  );
9560
- animation: ui-toast-enter-cab264c9 var(--_ui-toast-region-enter-duration, 0.32s)
10219
+ animation: ui-toast-enter-1bebce00 var(--_ui-toast-region-enter-duration, 0.32s)
9561
10220
  var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
9562
10221
  }
9563
10222
  .toast[data-tone="info"]:where([data-hn-ui-toast-region]) {
@@ -9577,17 +10236,17 @@ to {
9577
10236
  --_ui-toast-region-tone-surface: var(--ui-danger-soft);
9578
10237
  }
9579
10238
  .toast.closing:where([data-hn-ui-toast-region]) {
9580
- animation: ui-toast-exit-cab264c9 var(--_ui-toast-region-exit-duration, 0.22s) var(--ui-motion-ease)
10239
+ animation: ui-toast-exit-1bebce00 var(--_ui-toast-region-exit-duration, 0.22s) var(--ui-motion-ease)
9581
10240
  both;
9582
10241
  pointer-events: none;
9583
10242
  }
9584
10243
  :is(:scope[data-ui-toast-region-state~="placement=bottom"], :scope[data-ui-toast-region-state~="placement=bottom-start"], :scope[data-ui-toast-region-state~="placement=bottom-end"])
9585
10244
  .toast:where([data-hn-ui-toast-region]) {
9586
- animation-name: ui-toast-enter-bottom-cab264c9;
10245
+ animation-name: ui-toast-enter-bottom-1bebce00;
9587
10246
  }
9588
10247
  :is(:scope[data-ui-toast-region-state~="placement=bottom"], :scope[data-ui-toast-region-state~="placement=bottom-start"], :scope[data-ui-toast-region-state~="placement=bottom-end"])
9589
10248
  .toast.closing:where([data-hn-ui-toast-region]) {
9590
- animation-name: ui-toast-exit-bottom-cab264c9;
10249
+ animation-name: ui-toast-exit-bottom-1bebce00;
9591
10250
  }
9592
10251
  @media (prefers-reduced-motion: reduce) {
9593
10252
  .toast:where([data-hn-ui-toast-region]),.toast.closing:where([data-hn-ui-toast-region]) {
@@ -9605,6 +10264,130 @@ to {
9605
10264
  display: none;
9606
10265
  }
9607
10266
  }
10267
+ @scope ([data-slotted~="ui-toast-region"]:not([data-hn])) to ([data-hn], [data-slotted]) {
10268
+ :where(.ui-toast-region):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]) {
10269
+ /* Hooks do not inherit, so the parts below read them from the root. */
10270
+ --_ui-toast-region-surface: var(--ui-toast-region-surface);
10271
+ --_ui-toast-region-border: var(--ui-toast-region-border);
10272
+ --_ui-toast-region-radius: var(--ui-toast-region-radius);
10273
+ --_ui-toast-region-shadow: var(--ui-toast-region-shadow);
10274
+ --_ui-toast-region-enter-duration: var(--ui-toast-region-enter-duration);
10275
+ --_ui-toast-region-exit-duration: var(--ui-toast-region-exit-duration);
10276
+
10277
+ position: fixed;
10278
+ top: calc(var(--ui-space-4) + env(safe-area-inset-top));
10279
+ right: auto;
10280
+ bottom: auto;
10281
+ left: 50%;
10282
+ transform: translateX(-50%);
10283
+ z-index: 9999;
10284
+ display: grid;
10285
+ gap: var(--ui-space-2);
10286
+ inline-size: min(24rem, calc(100vw - var(--ui-space-4) * 2));
10287
+ max-inline-size: 100%;
10288
+ box-sizing: border-box;
10289
+ margin: 0;
10290
+ padding: 0;
10291
+ overflow: visible;
10292
+ border: 0;
10293
+ outline: 0;
10294
+ background: transparent;
10295
+ box-shadow: none;
10296
+ pointer-events: none;
10297
+ }
10298
+ :where(.ui-toast-region):not(:popover-open):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]) {
10299
+ display: none;
10300
+ }
10301
+ :where(.ui-toast-region)[data-ui-toast-region-state~="placement=top-start"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]),:where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom-start"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]) {
10302
+ left: auto;
10303
+ right: auto;
10304
+ inset-inline-start: calc(var(--ui-space-4) + env(safe-area-inset-left));
10305
+ transform: none;
10306
+ }
10307
+ :where(.ui-toast-region)[data-ui-toast-region-state~="placement=top-end"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]),:where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom-end"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]) {
10308
+ left: auto;
10309
+ right: auto;
10310
+ inset-inline-end: calc(var(--ui-space-4) + env(safe-area-inset-right));
10311
+ transform: none;
10312
+ }
10313
+ :where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]),:where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom-start"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]),:where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom-end"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]) {
10314
+ top: auto;
10315
+ bottom: calc(var(--ui-space-4) + env(safe-area-inset-bottom));
10316
+ }
10317
+ .toast:where(:scope, :scope *):where([data-hn-ui-toast-region]) {
10318
+ --_ui-toast-region-accent: var(--ui-border-strong);
10319
+ --_ui-toast-region-tone-surface: var(--ui-surface-muted);
10320
+ display: grid;
10321
+ grid-template-columns: 1fr auto;
10322
+ gap: var(--ui-space-2);
10323
+ align-items: start;
10324
+ border: var(--ui-border-width) solid
10325
+ var(--_ui-toast-region-border, var(--ui-overlay-border, var(--_ui-toast-region-accent)));
10326
+ border-radius: var(--_ui-toast-region-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
10327
+ padding: var(--ui-space-3) var(--ui-space-4);
10328
+ /* The close button's internal space supplies the rest of the trailing inset. */
10329
+ padding-inline-end: var(--ui-space-2);
10330
+ background: var(
10331
+ --_ui-toast-region-surface,
10332
+ var(--ui-overlay-surface, var(--_ui-toast-region-tone-surface))
10333
+ );
10334
+ color: var(--ui-text-primary);
10335
+ font-family: var(--ui-font-family-sans);
10336
+ font-size: var(--ui-font-size-sm);
10337
+ font-weight: var(--ui-font-normal);
10338
+ line-height: var(--ui-line-height-md);
10339
+ box-shadow: var(
10340
+ --_ui-toast-region-shadow,
10341
+ var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
10342
+ );
10343
+ animation: ui-toast-enter-1bebce00 var(--_ui-toast-region-enter-duration, 0.32s)
10344
+ var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
10345
+ }
10346
+ .toast[data-tone="info"]:where(:scope, :scope *):where([data-hn-ui-toast-region]) {
10347
+ --_ui-toast-region-accent: var(--ui-info-solid);
10348
+ --_ui-toast-region-tone-surface: var(--ui-info-soft);
10349
+ }
10350
+ .toast[data-tone="success"]:where(:scope, :scope *):where([data-hn-ui-toast-region]) {
10351
+ --_ui-toast-region-accent: var(--ui-success-solid);
10352
+ --_ui-toast-region-tone-surface: var(--ui-success-soft);
10353
+ }
10354
+ .toast[data-tone="warning"]:where(:scope, :scope *):where([data-hn-ui-toast-region]) {
10355
+ --_ui-toast-region-accent: var(--ui-warning-solid);
10356
+ --_ui-toast-region-tone-surface: var(--ui-warning-soft);
10357
+ }
10358
+ .toast[data-tone="danger"]:where(:scope, :scope *):where([data-hn-ui-toast-region]) {
10359
+ --_ui-toast-region-accent: var(--ui-danger-solid);
10360
+ --_ui-toast-region-tone-surface: var(--ui-danger-soft);
10361
+ }
10362
+ .toast.closing:where(:scope, :scope *):where([data-hn-ui-toast-region]) {
10363
+ animation: ui-toast-exit-1bebce00 var(--_ui-toast-region-exit-duration, 0.22s) var(--ui-motion-ease)
10364
+ both;
10365
+ pointer-events: none;
10366
+ }
10367
+ :is(:where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom"], :where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom-start"], :where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom-end"])
10368
+ .toast:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]) {
10369
+ animation-name: ui-toast-enter-bottom-1bebce00;
10370
+ }
10371
+ :is(:where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom"], :where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom-start"], :where(.ui-toast-region)[data-ui-toast-region-state~="placement=bottom-end"])
10372
+ .toast.closing:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]) {
10373
+ animation-name: ui-toast-exit-bottom-1bebce00;
10374
+ }
10375
+ @media (prefers-reduced-motion: reduce) {
10376
+ .toast:where(:scope, :scope *):where([data-hn-ui-toast-region]),.toast.closing:where(:scope, :scope *):where([data-hn-ui-toast-region]) {
10377
+ animation: none;
10378
+ }
10379
+ }
10380
+ .message:where(:scope, :scope *):where([data-hn-ui-toast-region]) {
10381
+ min-inline-size: 0;
10382
+ align-self: center;
10383
+ }
10384
+ .dismiss:where(:scope, :scope *):where([data-hn-ui-toast-region]) {
10385
+ align-self: center;
10386
+ }
10387
+ :where(.ui-toast-region)[hidden]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-toast-region"]))):where([data-hn-ui-toast-region]) {
10388
+ display: none;
10389
+ }
10390
+ }
9608
10391
 
9609
10392
  /* This component's hooks style the element they are set on, and never a nested one. */
9610
10393
  @property --ui-top-bar-actions-gap {
@@ -9713,102 +10496,620 @@ to {
9713
10496
  --_ui-default-tree-item-font-size: var(--ui-font-size-sm);
9714
10497
  --_ui-default-tree-item-label-padding-block: 0;
9715
10498
  }
9716
- :scope:where([data-hn-ui-tree]) {
9717
- /* Hooks do not inherit: the tree hands its own to its items here, and a tree nested in an item
9718
- starts again from its own settings. */
9719
- --_ui-tree-indent: var(--ui-tree-indent);
9720
- --_ui-tree-drop-color: var(--ui-tree-drop-color);
9721
- --_ui-default-tree-item-marquee: initial;
9722
- --_ui-default-tree-item-min-block-size: initial;
9723
- --_ui-default-tree-item-font-size: initial;
9724
- --_ui-default-tree-item-label-padding-block: initial;
9725
- display: block;
9726
- min-inline-size: 0;
9727
- padding-inline-start: var(--ui-tree-gutter, 0px);
10499
+ :scope:where([data-hn-ui-tree]) {
10500
+ /* Hooks do not inherit: the tree hands its own to its items here, and a tree nested in an item
10501
+ starts again from its own settings. */
10502
+ --_ui-tree-indent: var(--ui-tree-indent);
10503
+ --_ui-tree-drop-color: var(--ui-tree-drop-color);
10504
+ --_ui-default-tree-item-marquee: initial;
10505
+ --_ui-default-tree-item-min-block-size: initial;
10506
+ --_ui-default-tree-item-font-size: initial;
10507
+ --_ui-default-tree-item-label-padding-block: initial;
10508
+ display: block;
10509
+ min-inline-size: 0;
10510
+ padding-inline-start: var(--ui-tree-gutter, 0px);
10511
+ }
10512
+ :scope[data-move-mode]:where([data-hn-ui-tree])::after {
10513
+ content: "Choose a destination row, or use Up and Down; Right nests inside a branch. Enter places it, Escape cancels.";
10514
+ display: block;
10515
+ padding: var(--ui-space-2);
10516
+ color: var(--ui-text-secondary);
10517
+ font-size: var(--ui-font-size-sm);
10518
+ }
10519
+ :scope[hidden]:where([data-hn-ui-tree]) {
10520
+ display: none;
10521
+ }
10522
+ }
10523
+
10524
+ /* This component's hooks style the element they are set on, and never a nested one. */
10525
+ @property --ui-tree-item-depth {
10526
+ syntax: "*";
10527
+ inherits: false;
10528
+ }
10529
+ @property --ui-tree-item-font-size {
10530
+ syntax: "*";
10531
+ inherits: false;
10532
+ }
10533
+ @property --ui-tree-item-label-padding-block {
10534
+ syntax: "*";
10535
+ inherits: false;
10536
+ }
10537
+ @property --ui-tree-item-label-padding-inline {
10538
+ syntax: "*";
10539
+ inherits: false;
10540
+ }
10541
+ @property --ui-tree-item-min-block-size {
10542
+ syntax: "*";
10543
+ inherits: false;
10544
+ }
10545
+
10546
+ /* Selection is the same surface recipe as destination and choice rows. */
10547
+
10548
+ /* Child combinators: drop feedback belongs to this item's own row, not the rows nested in it. */
10549
+
10550
+ /* Lucide grip-vertical, filling the handle as in Looma 0.2. */
10551
+
10552
+ /* Slotted content is outside this scope, so :has() cannot see it; hide only a truly empty slot. */
10553
+
10554
+ /* Icons match the label's size (as in Knit's tree): an unsized SVG would otherwise render 300×150. */
10555
+
10556
+ /* The label spans the row's height and centres its content, so slotted content (a link) can
10557
+ stretch to fill the row as its own hit area; the padding tokens remove the inset. */
10558
+
10559
+ /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
10560
+ its own text and reading as overflow. */
10561
+
10562
+ /* The controls sit over the label's end, so the text fades out where they begin. The fade is
10563
+ the truncation mark while it shows: an ellipsis under it would read as a second one. */
10564
+
10565
+ /* A hovered row reads its whole name: the label slides far enough to show the end, rests
10566
+ there, and starts again. Only when it actually overflows — the controller measures by how
10567
+ much — after the controls have taken their place over its end — and hands over the distance
10568
+ and a duration from it, so every name moves at the same speed. */
10569
+
10570
+ /* This comes after the hover fade, which it replaces at the same specificity. While the name
10571
+ slides, the label reaches back under the icon (the controller measures how far) with its text
10572
+ where it was, and fades out across the gap before the icon, fully gone where the icon begins
10573
+ to cover it: the name slips under the icon rather than stopping at a hard edge beside it. */
10574
+ @keyframes ui-tree-item-marquee-fc4c8748 {
10575
+ from {
10576
+ transform: translateX(0);
10577
+ }
10578
+ to {
10579
+ transform: translateX(var(--_marquee-distance));
10580
+ }
10581
+ }
10582
+
10583
+ /* Reduced motion keeps the fade, which already says the name continues. */
10584
+
10585
+ /* Without hover there is no reveal, so the controls keep their own column. */
10586
+
10587
+ /* The handle sits beside what it drags. A leaf row has no disclosure, so the handle takes that
10588
+ empty column, right before the icon; a branch's disclosure is there, so its handle sits just
10589
+ outside the row. It is bare until pointed at: a resting surface behind it read as a faint
10590
+ patch rather than as a control. */
10591
+
10592
+ /* A component that sets its display still honours the hidden attribute on its root. */
10593
+ @scope (.ui-tree-item) to ([data-hn]) {
10594
+ :scope:where([data-hn-ui-tree-item]) {
10595
+ /* Hooks do not inherit, so the parts below read them from the root. The tree's density
10596
+ sets the defaults, in --_ui-default-*. */
10597
+ --_ui-tree-item-min-block-size: var(
10598
+ --ui-tree-item-min-block-size,
10599
+ var(--_ui-default-tree-item-min-block-size)
10600
+ );
10601
+ --_ui-tree-item-font-size: var(
10602
+ --ui-tree-item-font-size,
10603
+ var(--_ui-default-tree-item-font-size)
10604
+ );
10605
+ --_ui-tree-item-label-padding-block: var(
10606
+ --ui-tree-item-label-padding-block,
10607
+ var(--_ui-default-tree-item-label-padding-block)
10608
+ );
10609
+ --_ui-tree-item-label-padding-inline: var(--ui-tree-item-label-padding-inline);
10610
+
10611
+ --_tree-row-min-height: 32px;
10612
+ --_tree-disclosure-size: 16px;
10613
+
10614
+ position: relative;
10615
+ display: block;
10616
+ min-inline-size: 0;
10617
+ margin-inline-start: calc(var(--_ui-tree-item-indent-step, 0) * var(--_ui-tree-indent, 16px));
10618
+ }
10619
+ .row:where([data-hn-ui-tree-item]) {
10620
+ position: relative;
10621
+ display: grid;
10622
+ grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr);
10623
+ align-items: center;
10624
+ min-block-size: var(--_ui-tree-item-min-block-size, var(--_tree-row-min-height));
10625
+ min-inline-size: 0;
10626
+ font-size: var(--_ui-tree-item-font-size, var(--ui-font-size-sm));
10627
+ border-radius: var(--ui-selection-radius);
10628
+ color: var(--ui-text-secondary);
10629
+ transition:
10630
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
10631
+ color var(--ui-motion-fast) var(--ui-motion-ease),
10632
+ opacity var(--ui-motion-fast) var(--ui-motion-ease),
10633
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
10634
+ min-block-size var(--ui-motion-base) var(--ui-motion-ease);
10635
+ }
10636
+ .row:hover:where([data-hn-ui-tree-item]),.row:focus-within:where([data-hn-ui-tree-item]) {
10637
+ color: var(--ui-text-primary);
10638
+ background: var(--_ui-selection-context-surface, var(--ui-surface-muted));
10639
+ box-shadow: inset 0 0 0 var(--ui-border-width)
10640
+ var(--_ui-selection-context-border, var(--ui-selection-border));
10641
+ }
10642
+ :scope[data-ui-tree-item-state~="selected"] > .row:where([data-hn-ui-tree-item]) {
10643
+ color: var(--_ui-selection-context-text, var(--ui-selection-text));
10644
+ background: var(--_ui-selection-context-surface, var(--ui-selection-surface));
10645
+ box-shadow: inset 0 0 0 var(--ui-border-width)
10646
+ var(--_ui-selection-context-border, var(--ui-selection-border));
10647
+ }
10648
+ :scope[data-ui-tree-item-state~="selected"]:not([aria-disabled="true"])
10649
+ > .row
10650
+ > .leading:where([data-hn-ui-tree-item]) {
10651
+ color: var(--_ui-selection-context-text, var(--ui-selection-text));
10652
+ }
10653
+ :scope[data-ui-tree-item-state~="disabled"] .row:where([data-hn-ui-tree-item]) {
10654
+ color: var(--ui-disabled-text);
10655
+ background: var(--ui-disabled-surface);
10656
+ box-shadow: none;
10657
+ }
10658
+ :scope[data-dragging]:not([data-move-source]) .row:where([data-hn-ui-tree-item]) {
10659
+ opacity: 0.42;
10660
+ }
10661
+ :scope[data-move-source] > .row > .label:where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .leading:where([data-hn-ui-tree-item]) {
10662
+ opacity: 0.42;
10663
+ }
10664
+ :scope:focus:where([data-hn-ui-tree-item]) {
10665
+ outline: none;
10666
+ }
10667
+ :scope:focus-visible .row:where([data-hn-ui-tree-item]) {
10668
+ box-shadow: 0 0 0 var(--ui-focus-width) var(--ui-focus-ring);
10669
+ }
10670
+ :scope[data-drop-position="inside"] > .row:where([data-hn-ui-tree-item]) {
10671
+ background: var(--ui-accent-subtle);
10672
+ box-shadow: inset 0 0 0 var(--ui-accent-line-width)
10673
+ var(--_ui-tree-drop-color, var(--ui-accent-solid));
10674
+ }
10675
+ .disclosure:where([data-hn-ui-tree-item]),.disclosure-spacer:where([data-hn-ui-tree-item]) {
10676
+ grid-column: 1;
10677
+ grid-row: 1;
10678
+ inline-size: var(--_tree-disclosure-size);
10679
+ block-size: 28px;
10680
+ }
10681
+ .disclosure:where([data-hn-ui-tree-item]) {
10682
+ display: grid;
10683
+ /* Start-aligned: the chevron's ink, not its hit area, aligns with the content above it. */
10684
+ place-items: center start;
10685
+ padding: 0;
10686
+ color: var(--ui-text-muted);
10687
+ background: transparent;
10688
+ border: 0;
10689
+ border-radius: var(--ui-radius-sm);
10690
+ cursor: pointer;
10691
+ }
10692
+ .disclosure[hidden]:where([data-hn-ui-tree-item]) {
10693
+ display: none;
10694
+ }
10695
+ .selection-hit:where([data-hn-ui-tree-item]) {
10696
+ display: none;
10697
+ grid-column: 2;
10698
+ grid-row: 1;
10699
+ place-items: center;
10700
+ inline-size: 1.25rem;
10701
+ block-size: var(--_ui-tree-item-min-block-size, var(--_tree-row-min-height));
10702
+ cursor: pointer;
10703
+ }
10704
+ .selection-checkbox:where([data-hn-ui-tree-item]) {
10705
+ inline-size: 1rem;
10706
+ block-size: 1rem;
10707
+ margin: 0;
10708
+ accent-color: var(--ui-accent-solid);
10709
+ }
10710
+ :scope[data-selection-mode="multiple"] > .row:where([data-hn-ui-tree-item]) {
10711
+ grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr);
10712
+ }
10713
+ :scope[data-selection-mode="multiple"]
10714
+ > .row
10715
+ > .selection-hit:where([data-hn-ui-tree-item]) {
10716
+ display: grid;
10717
+ }
10718
+ :scope[data-selection-mode="multiple"] > .row > .leading:where([data-hn-ui-tree-item]) {
10719
+ grid-column: 3;
10720
+ }
10721
+ :scope[data-selection-mode="multiple"] > .row > .label:where([data-hn-ui-tree-item]) {
10722
+ grid-column: 4;
10723
+ }
10724
+ .disclosure:hover:where([data-hn-ui-tree-item]) {
10725
+ color: var(--ui-text-primary);
10726
+ background: var(--ui-surface-elevated);
10727
+ }
10728
+ .disclosure-icon:where([data-hn-ui-tree-item]) {
10729
+ display: grid;
10730
+ place-items: center;
10731
+ inline-size: 12px;
10732
+ block-size: 12px;
10733
+ transform: rotate(-90deg);
10734
+ transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
10735
+ }
10736
+ .disclosure-icon:where([data-hn-ui-tree-item])::before {
10737
+ display: block;
10738
+ inline-size: 0.375rem;
10739
+ block-size: 0.375rem;
10740
+ border-inline-end: 1.5px solid currentColor;
10741
+ border-block-end: 1.5px solid currentColor;
10742
+ content: "";
10743
+ /* A chevron's ink sits below its box centre; lift it so it centres optically (in either rotation). */
10744
+ transform: translateY(-20%) rotate(45deg);
10745
+ }
10746
+ :scope[aria-expanded="true"]
10747
+ > .row
10748
+ > .disclosure
10749
+ > .disclosure-icon:where([data-hn-ui-tree-item]) {
10750
+ transform: rotate(0deg);
10751
+ }
10752
+ .drag-handle svg:where([data-hn-ui-tree-item]) {
10753
+ display: block;
10754
+ inline-size: 100%;
10755
+ block-size: 100%;
10756
+ }
10757
+ .leading:where([data-hn-ui-tree-item]) {
10758
+ display: inline-grid;
10759
+ place-items: center;
10760
+ grid-column: 2;
10761
+ grid-row: 1;
10762
+ inline-size: 1em;
10763
+ block-size: 1em;
10764
+ margin-inline-start: var(--ui-space-1);
10765
+ color: var(--ui-text-muted);
10766
+ /* Above the label, so a sliding name passes under the icon. */
10767
+ position: relative;
10768
+ z-index: 1;
10769
+ }
10770
+ .leading:empty:where([data-hn-ui-tree-item]) {
10771
+ display: none;
10772
+ }
10773
+ :where(:not([data-hn-ui-tree-item])):is(svg),:where(:not([data-hn-ui-tree-item])):is(img) {
10774
+ display: block;
10775
+ inline-size: 1em;
10776
+ block-size: 1em;
10777
+ flex: none;
10778
+ }
10779
+ .label:where([data-hn-ui-tree-item]) {
10780
+ grid-column: 3;
10781
+ grid-row: 1;
10782
+ align-self: stretch;
10783
+ display: flex;
10784
+ align-items: center;
10785
+ min-inline-size: 0;
10786
+ /* The cell clips: a name longer than the row slides inside it rather than over its icons. */
10787
+ overflow: hidden;
10788
+ padding: var(--_ui-tree-item-label-padding-block, var(--ui-space-1))
10789
+ var(--_ui-tree-item-label-padding-inline, var(--ui-space-2));
10790
+ /* The length of the fade before the controls. The label's one flex child lays out no gap; this
10791
+ is where the controller reads the length in pixels to stop a sliding name before the fade. */
10792
+ column-gap: var(--ui-space-1);
10793
+ }
10794
+ .label-text:where([data-hn-ui-tree-item]) {
10795
+ display: flex;
10796
+ align-items: center;
10797
+ /* Stretches, so slotted content can still be the row's full-height hit area. */
10798
+ align-self: stretch;
10799
+ block-size: 100%;
10800
+ min-inline-size: 0;
10801
+ inline-size: 100%;
10802
+ white-space: nowrap;
10803
+ }
10804
+ .label-text > :where(:not([data-hn-ui-tree-item])):is(*) {
10805
+ flex: 1 1 auto;
10806
+ min-inline-size: 0;
10807
+ }
10808
+ .row:hover > .label:where([data-hn-ui-tree-item]),.row:focus-within > .label:where([data-hn-ui-tree-item]),:scope[data-ui-tree-item-state~="actionsVisible"]
10809
+ > .row
10810
+ > .label:where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .label:where([data-hn-ui-tree-item]) {
10811
+ text-overflow: clip;
10812
+ mask-image: linear-gradient(
10813
+ to right,
10814
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
10815
+ transparent calc(100% - var(--_tree-actions-width, 1.75rem))
10816
+ );
10817
+ }
10818
+ .row:hover > .label:dir(rtl):where([data-hn-ui-tree-item]),.row:focus-within > .label:dir(rtl):where([data-hn-ui-tree-item]),:scope[data-ui-tree-item-state~="actionsVisible"]
10819
+ > .row
10820
+ > .label:dir(rtl):where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .label:dir(rtl):where([data-hn-ui-tree-item]) {
10821
+ mask-image: linear-gradient(
10822
+ to left,
10823
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
10824
+ transparent calc(100% - var(--_tree-actions-width, 1.75rem))
10825
+ );
10826
+ }
10827
+ .row[data-ui-marquee] > .label > .label-text:where([data-hn-ui-tree-item]) {
10828
+ /* Once per pass: the controller restarts it after a rest at the end, so the name holds still
10829
+ long enough to read rather than sliding back and forth. */
10830
+ animation: ui-tree-item-marquee-fc4c8748 var(--_marquee-duration) linear 0.5s 1 normal forwards;
10831
+ will-change: transform;
10832
+ }
10833
+ .row[data-ui-marquee] > .label:where([data-hn-ui-tree-item]) {
10834
+ margin-inline-start: calc(-1 * var(--_marquee-lead, 0px));
10835
+ padding-inline-start: calc(
10836
+ var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
10837
+ );
10838
+ mask-image: linear-gradient(
10839
+ to right,
10840
+ transparent var(--_marquee-icon-width, 0px),
10841
+ #000 calc(
10842
+ var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
10843
+ ),
10844
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
10845
+ transparent calc(100% - var(--_tree-actions-width, 1.75rem))
10846
+ );
10847
+ }
10848
+ .row[data-ui-marquee] > .label:dir(rtl):where([data-hn-ui-tree-item]) {
10849
+ mask-image: linear-gradient(
10850
+ to left,
10851
+ transparent var(--_marquee-icon-width, 0px),
10852
+ #000 calc(
10853
+ var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
10854
+ ),
10855
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
10856
+ transparent calc(100% - var(--_tree-actions-width, 1.75rem))
10857
+ );
10858
+ }
10859
+ @media (prefers-reduced-motion: reduce) {
10860
+ .row[data-ui-marquee] > .label > .label-text:where([data-hn-ui-tree-item]) {
10861
+ animation: none;
10862
+ }
10863
+ }
10864
+ .row:hover > .label > :where(:not([data-hn-ui-tree-item])):is(*),.row:focus-within > .label > :where(:not([data-hn-ui-tree-item])):is(*) {
10865
+ text-overflow: clip;
10866
+ }
10867
+ .actions:where([data-hn-ui-tree-item]) {
10868
+ position: absolute;
10869
+ z-index: 1;
10870
+ inset-block: 0;
10871
+ inset-inline-end: 0;
10872
+ display: inline-flex;
10873
+ align-items: center;
10874
+ min-inline-size: 0;
10875
+ opacity: 0;
10876
+ pointer-events: none;
10877
+ transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
10878
+ }
10879
+ .row:hover > .actions:where([data-hn-ui-tree-item]),.row:focus-within > .actions:where([data-hn-ui-tree-item]),:scope[data-ui-tree-item-state~="actionsVisible"]
10880
+ > .row
10881
+ > .actions:where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .actions:where([data-hn-ui-tree-item]) {
10882
+ opacity: 1;
10883
+ pointer-events: auto;
10884
+ }
10885
+ @media (hover: none), (pointer: coarse) {
10886
+ .row:where([data-hn-ui-tree-item]) {
10887
+ grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
10888
+ }
10889
+ .actions:where([data-hn-ui-tree-item]) {
10890
+ position: static;
10891
+ grid-column: 4;
10892
+ grid-row: 1;
10893
+ padding-inline-start: 0;
10894
+ background: none;
10895
+ opacity: 1;
10896
+ pointer-events: auto;
10897
+ }
10898
+ .row:is(:hover, :focus-within) > .label:where([data-hn-ui-tree-item]),.row:is(:hover, :focus-within) > .label:dir(rtl):where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .label:where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .label:dir(rtl):where([data-hn-ui-tree-item]) {
10899
+ mask-image: none;
10900
+ }
10901
+ .row[data-ui-marquee] > .label:where([data-hn-ui-tree-item]) {
10902
+ mask-image: linear-gradient(
10903
+ to right,
10904
+ transparent var(--_marquee-icon-width, 0px),
10905
+ #000 calc(
10906
+ var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
10907
+ )
10908
+ );
10909
+ }
10910
+
10911
+ /* Persistent content has its own column on touch. Fade only the label's end. */
10912
+ :scope[data-ui-tree-item-state~="actionsVisible"]
10913
+ > .row
10914
+ > .label:where([data-hn-ui-tree-item]) {
10915
+ mask-image: linear-gradient(to right, #000 calc(100% - var(--ui-space-1)), transparent 100%);
10916
+ }
10917
+ :scope[data-ui-tree-item-state~="actionsVisible"]
10918
+ > .row
10919
+ > .label:dir(rtl):where([data-hn-ui-tree-item]) {
10920
+ mask-image: linear-gradient(to left, #000 calc(100% - var(--ui-space-1)), transparent 100%);
10921
+ }
10922
+ .row[data-ui-marquee] > .label:dir(rtl):where([data-hn-ui-tree-item]) {
10923
+ mask-image: linear-gradient(
10924
+ to left,
10925
+ transparent var(--_marquee-icon-width, 0px),
10926
+ #000 calc(
10927
+ var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
10928
+ )
10929
+ );
10930
+ }
10931
+ :scope[data-selection-mode="multiple"] > .row:where([data-hn-ui-tree-item]) {
10932
+ grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr) auto;
10933
+ }
10934
+ :scope[data-selection-mode="multiple"]
10935
+ > .row
10936
+ > .actions:where([data-hn-ui-tree-item]) {
10937
+ grid-column: 5;
10938
+ }
10939
+ }
10940
+ .drag-handle:where([data-hn-ui-tree-item]) {
10941
+ position: absolute;
10942
+ z-index: 2;
10943
+ inset-block-start: 50%;
10944
+ inset-inline-start: 0;
10945
+ inline-size: var(--_tree-disclosure-size);
10946
+ block-size: 24px;
10947
+ display: grid;
10948
+ place-items: center;
10949
+ padding: 5px 2px;
10950
+ color: var(--ui-text-muted);
10951
+ background: transparent;
10952
+ border: 0;
10953
+ border-radius: var(--ui-radius-sm);
10954
+ cursor: grab;
10955
+ /* Hidden until the row is hovered, but always hittable: the handle sits outside the row, and moving
10956
+ the pointer onto it must not hide it on the way. */
10957
+ opacity: 0;
10958
+ transform: translateY(-50%);
10959
+ transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
10960
+ }
10961
+ .row:hover .drag-handle:where([data-hn-ui-tree-item]),.drag-handle:hover:where([data-hn-ui-tree-item]),.drag-handle:focus-visible:where([data-hn-ui-tree-item]),:scope[data-dragging] > .row > .drag-handle:where([data-hn-ui-tree-item]) {
10962
+ opacity: 1;
10963
+ }
10964
+ :scope[data-ui-tree-item-state~="isContainer"]
10965
+ > .row
10966
+ > .drag-handle:where([data-hn-ui-tree-item]) {
10967
+ inset-inline-start: calc(-1 * var(--_tree-disclosure-size) - 2px);
10968
+ }
10969
+ .drag-handle:hover:where([data-hn-ui-tree-item]),.drag-handle:focus-visible:where([data-hn-ui-tree-item]) {
10970
+ color: var(--ui-text-primary);
10971
+ background: var(--ui-surface-hover);
10972
+ }
10973
+ .drag-handle:active:where([data-hn-ui-tree-item]) {
10974
+ cursor: grabbing;
10975
+ }
10976
+ .drop-indicator:where([data-hn-ui-tree-item]) {
10977
+ position: absolute;
10978
+ z-index: 3;
10979
+ inset-inline: 1px;
10980
+ display: none;
10981
+ block-size: var(--ui-accent-line-width);
10982
+ border-radius: var(--ui-radius-round);
10983
+ background: var(--_ui-tree-drop-color, var(--ui-accent-solid));
10984
+ pointer-events: none;
10985
+ }
10986
+ .drop-indicator:where([data-hn-ui-tree-item])::before,.drop-indicator:where([data-hn-ui-tree-item])::after {
10987
+ content: "";
10988
+ position: absolute;
10989
+ inset-block-start: 50%;
10990
+ inline-size: 7px;
10991
+ block-size: 7px;
10992
+ border: var(--ui-accent-line-width) solid var(--_ui-tree-drop-color, var(--ui-accent-solid));
10993
+ border-radius: var(--ui-radius-round);
10994
+ background: var(--ui-surface-elevated);
10995
+ transform: translateY(-50%);
10996
+ }
10997
+ .drop-indicator:where([data-hn-ui-tree-item])::before {
10998
+ inset-inline-start: -1px;
10999
+ }
11000
+ .drop-indicator:where([data-hn-ui-tree-item])::after {
11001
+ inset-inline-end: -1px;
11002
+ }
11003
+ :scope[data-drop-position="before"]
11004
+ > .row
11005
+ > .row-drop-indicator:where([data-hn-ui-tree-item]) {
11006
+ display: block;
11007
+ inset-block-start: calc(-0.5 * var(--ui-accent-line-width));
11008
+ }
11009
+ :scope[data-drop-position="after"]
11010
+ > .subtree-drop-indicator:where([data-hn-ui-tree-item]) {
11011
+ display: block;
11012
+ inset-block-end: calc(-0.5 * var(--ui-accent-line-width));
11013
+ }
11014
+ .children[hidden]:where([data-hn-ui-tree-item]) {
11015
+ display: none;
11016
+ }
11017
+ html[data-ui-input-modality="touch"] :scope:where([data-hn-ui-tree-item]) {
11018
+ --_tree-row-min-height: 44px;
11019
+ }
11020
+ html[data-ui-input-modality="touch"] :scope .row:where([data-hn-ui-tree-item]) {
11021
+ grid-template-columns: 44px var(--_tree-disclosure-size) auto minmax(0, 1fr);
11022
+ }
11023
+ html[data-ui-input-modality="touch"] :scope .drag-handle:where([data-hn-ui-tree-item]),html[data-ui-input-modality="touch"]
11024
+ :scope[data-ui-tree-item-state~="isContainer"]
11025
+ > .row
11026
+ > .drag-handle:where([data-hn-ui-tree-item]) {
11027
+ position: relative;
11028
+ grid-column: 1;
11029
+ grid-row: 1;
11030
+ inset: auto;
11031
+ inline-size: 44px;
11032
+ block-size: 44px;
11033
+ padding: 14px;
11034
+ opacity: 1;
11035
+ transform: none;
11036
+ cursor: pointer;
11037
+ }
11038
+ html[data-ui-input-modality="touch"] :scope .disclosure:where([data-hn-ui-tree-item]) {
11039
+ grid-column: 2;
11040
+ }
11041
+ html[data-ui-input-modality="touch"] :scope .leading:where([data-hn-ui-tree-item]) {
11042
+ grid-column: 3;
11043
+ }
11044
+ html[data-ui-input-modality="touch"] :scope .label:where([data-hn-ui-tree-item]) {
11045
+ grid-column: 4;
11046
+ }
11047
+ html[data-ui-input-modality="touch"]
11048
+ :scope[data-selection-mode="multiple"]
11049
+ > .row:where([data-hn-ui-tree-item]) {
11050
+ grid-template-columns: 44px var(--_tree-disclosure-size) 44px auto minmax(0, 1fr);
11051
+ }
11052
+ html[data-ui-input-modality="touch"]
11053
+ :scope[data-selection-mode="multiple"]
11054
+ > .row
11055
+ > .selection-hit:where([data-hn-ui-tree-item]) {
11056
+ grid-column: 3;
11057
+ inline-size: 44px;
11058
+ block-size: 44px;
11059
+ }
11060
+ html[data-ui-input-modality="touch"]
11061
+ :scope[data-selection-mode="multiple"]
11062
+ > .row
11063
+ > .leading:where([data-hn-ui-tree-item]) {
11064
+ grid-column: 4;
11065
+ }
11066
+ html[data-ui-input-modality="touch"]
11067
+ :scope[data-selection-mode="multiple"]
11068
+ > .row
11069
+ > .label:where([data-hn-ui-tree-item]) {
11070
+ grid-column: 5;
9728
11071
  }
9729
- :scope[data-move-mode]:where([data-hn-ui-tree])::after {
9730
- content: "Choose a destination row, or use Up and Down; Right nests inside a branch. Enter places it, Escape cancels.";
9731
- display: block;
9732
- padding: var(--ui-space-2);
9733
- color: var(--ui-text-secondary);
9734
- font-size: var(--ui-font-size-sm);
11072
+ @media (hover: none), (pointer: coarse) {
11073
+ html[data-ui-input-modality="touch"] :scope .row:where([data-hn-ui-tree-item]) {
11074
+ grid-template-columns: 44px var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
9735
11075
  }
9736
- :scope[hidden]:where([data-hn-ui-tree]) {
9737
- display: none;
11076
+ html[data-ui-input-modality="touch"] :scope .actions:where([data-hn-ui-tree-item]) {
11077
+ grid-column: 5;
9738
11078
  }
11079
+ html[data-ui-input-modality="touch"]
11080
+ :scope[data-selection-mode="multiple"]
11081
+ > .row:where([data-hn-ui-tree-item]) {
11082
+ grid-template-columns: 44px var(--_tree-disclosure-size) 44px auto minmax(0, 1fr) auto;
9739
11083
  }
9740
-
9741
- /* This component's hooks style the element they are set on, and never a nested one. */
9742
- @property --ui-tree-item-depth {
9743
- syntax: "*";
9744
- inherits: false;
11084
+ html[data-ui-input-modality="touch"]
11085
+ :scope[data-selection-mode="multiple"]
11086
+ > .row
11087
+ > .actions:where([data-hn-ui-tree-item]) {
11088
+ grid-column: 6;
9745
11089
  }
9746
- @property --ui-tree-item-font-size {
9747
- syntax: "*";
9748
- inherits: false;
9749
11090
  }
9750
- @property --ui-tree-item-label-padding-block {
9751
- syntax: "*";
9752
- inherits: false;
11091
+ @media (prefers-reduced-motion: reduce) {
11092
+ .row:where([data-hn-ui-tree-item]),.disclosure-icon:where([data-hn-ui-tree-item]),.drag-handle:where([data-hn-ui-tree-item]) {
11093
+ transition: none;
9753
11094
  }
9754
- @property --ui-tree-item-label-padding-inline {
9755
- syntax: "*";
9756
- inherits: false;
9757
11095
  }
9758
- @property --ui-tree-item-min-block-size {
9759
- syntax: "*";
9760
- inherits: false;
11096
+ @media (forced-colors: active) {
11097
+ :scope:focus-visible > .row:where([data-hn-ui-tree-item]) {
11098
+ outline: var(--ui-focus-width) solid Highlight;
11099
+ outline-offset: calc(-1 * var(--ui-focus-width));
9761
11100
  }
9762
-
9763
- /* Selection is the same surface recipe as destination and choice rows. */
9764
-
9765
- /* Child combinators: drop feedback belongs to this item's own row, not the rows nested in it. */
9766
-
9767
- /* Lucide grip-vertical, filling the handle as in Looma 0.2. */
9768
-
9769
- /* Slotted content is outside this scope, so :has() cannot see it; hide only a truly empty slot. */
9770
-
9771
- /* Icons match the label's size (as in Knit's tree): an unsized SVG would otherwise render 300×150. */
9772
-
9773
- /* The label spans the row's height and centres its content, so slotted content (a link) can
9774
- stretch to fill the row as its own hit area; the padding tokens remove the inset. */
9775
-
9776
- /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
9777
- its own text and reading as overflow. */
9778
-
9779
- /* The controls sit over the label's end, so the text fades out where they begin. The fade is
9780
- the truncation mark while it shows: an ellipsis under it would read as a second one. */
9781
-
9782
- /* A hovered row reads its whole name: the label slides far enough to show the end, rests
9783
- there, and starts again. Only when it actually overflows — the controller measures by how
9784
- much — after the controls have taken their place over its end — and hands over the distance
9785
- and a duration from it, so every name moves at the same speed. */
9786
-
9787
- /* This comes after the hover fade, which it replaces at the same specificity. While the name
9788
- slides, the label reaches back under the icon (the controller measures how far) with its text
9789
- where it was, and fades out across the gap before the icon, fully gone where the icon begins
9790
- to cover it: the name slips under the icon rather than stopping at a hard edge beside it. */
9791
- @keyframes ui-tree-item-marquee-16fe002b {
9792
- from {
9793
- transform: translateX(0);
11101
+ :scope[data-ui-tree-item-state~="selected"]:not(:focus-visible):not([aria-disabled="true"])
11102
+ > .row:where([data-hn-ui-tree-item]) {
11103
+ outline: var(--ui-border-width) solid Highlight;
11104
+ outline-offset: calc(-1 * var(--ui-border-width));
9794
11105
  }
9795
- to {
9796
- transform: translateX(var(--_marquee-distance));
9797
11106
  }
11107
+ :scope[hidden]:where([data-hn-ui-tree-item]) {
11108
+ display: none;
9798
11109
  }
9799
-
9800
- /* Reduced motion keeps the fade, which already says the name continues. */
9801
-
9802
- /* Without hover there is no reveal, so the controls keep their own column. */
9803
-
9804
- /* The handle sits beside what it drags. A leaf row has no disclosure, so the handle takes that
9805
- empty column, right before the icon; a branch's disclosure is there, so its handle sits just
9806
- outside the row. It is bare until pointed at: a resting surface behind it read as a faint
9807
- patch rather than as a control. */
9808
-
9809
- /* A component that sets its display still honours the hidden attribute on its root. */
9810
- @scope (.ui-tree-item) to ([data-hn]) {
9811
- :scope:where([data-hn-ui-tree-item]) {
11110
+ }
11111
+ @scope ([data-slotted~="ui-tree-item"]:not([data-hn])) to ([data-hn], [data-slotted]) {
11112
+ :where(.ui-tree-item):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9812
11113
  /* Hooks do not inherit, so the parts below read them from the root. The tree's density
9813
11114
  sets the defaults, in --_ui-default-*. */
9814
11115
  --_ui-tree-item-min-block-size: var(
@@ -9833,7 +11134,7 @@ to {
9833
11134
  min-inline-size: 0;
9834
11135
  margin-inline-start: calc(var(--_ui-tree-item-indent-step, 0) * var(--_ui-tree-indent, 16px));
9835
11136
  }
9836
- .row:where([data-hn-ui-tree-item]) {
11137
+ .row:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9837
11138
  position: relative;
9838
11139
  display: grid;
9839
11140
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr);
@@ -9850,52 +11151,61 @@ to {
9850
11151
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
9851
11152
  min-block-size var(--ui-motion-base) var(--ui-motion-ease);
9852
11153
  }
9853
- .row:hover:where([data-hn-ui-tree-item]),.row:focus-within:where([data-hn-ui-tree-item]) {
11154
+ .row:hover:where(:scope, :scope *):where([data-hn-ui-tree-item]),.row:focus-within:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9854
11155
  color: var(--ui-text-primary);
9855
11156
  background: var(--_ui-selection-context-surface, var(--ui-surface-muted));
9856
11157
  box-shadow: inset 0 0 0 var(--ui-border-width)
9857
11158
  var(--_ui-selection-context-border, var(--ui-selection-border));
9858
11159
  }
9859
- :scope[data-ui-tree-item-state~="selected"] > .row:where([data-hn-ui-tree-item]) {
11160
+ :where(.ui-tree-item)[data-ui-tree-item-state~="selected"]
11161
+ > .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9860
11162
  color: var(--_ui-selection-context-text, var(--ui-selection-text));
9861
11163
  background: var(--_ui-selection-context-surface, var(--ui-selection-surface));
9862
11164
  box-shadow: inset 0 0 0 var(--ui-border-width)
9863
11165
  var(--_ui-selection-context-border, var(--ui-selection-border));
9864
11166
  }
9865
- :scope[data-ui-tree-item-state~="selected"]:not([aria-disabled="true"])
11167
+ :where(.ui-tree-item)[data-ui-tree-item-state~="selected"]:not([aria-disabled="true"])
9866
11168
  > .row
9867
- > .leading:where([data-hn-ui-tree-item]) {
11169
+ > .leading:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9868
11170
  color: var(--_ui-selection-context-text, var(--ui-selection-text));
9869
11171
  }
9870
- :scope[data-ui-tree-item-state~="disabled"] .row:where([data-hn-ui-tree-item]) {
11172
+ :where(.ui-tree-item)[data-ui-tree-item-state~="disabled"]
11173
+ .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9871
11174
  color: var(--ui-disabled-text);
9872
11175
  background: var(--ui-disabled-surface);
9873
11176
  box-shadow: none;
9874
11177
  }
9875
- :scope[data-dragging]:not([data-move-source]) .row:where([data-hn-ui-tree-item]) {
11178
+ :where(.ui-tree-item)[data-dragging]:not([data-move-source])
11179
+ .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9876
11180
  opacity: 0.42;
9877
11181
  }
9878
- :scope[data-move-source] > .row > .label:where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .leading:where([data-hn-ui-tree-item]) {
11182
+ :where(.ui-tree-item)[data-move-source]
11183
+ > .row
11184
+ > .label:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]),:where(.ui-tree-item)[data-move-source]
11185
+ > .row
11186
+ > .leading:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9879
11187
  opacity: 0.42;
9880
11188
  }
9881
- :scope:focus:where([data-hn-ui-tree-item]) {
11189
+ :where(.ui-tree-item):focus:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9882
11190
  outline: none;
9883
11191
  }
9884
- :scope:focus-visible .row:where([data-hn-ui-tree-item]) {
11192
+ :where(.ui-tree-item):focus-visible
11193
+ .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9885
11194
  box-shadow: 0 0 0 var(--ui-focus-width) var(--ui-focus-ring);
9886
11195
  }
9887
- :scope[data-drop-position="inside"] > .row:where([data-hn-ui-tree-item]) {
11196
+ :where(.ui-tree-item)[data-drop-position="inside"]
11197
+ > .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9888
11198
  background: var(--ui-accent-subtle);
9889
11199
  box-shadow: inset 0 0 0 var(--ui-accent-line-width)
9890
11200
  var(--_ui-tree-drop-color, var(--ui-accent-solid));
9891
11201
  }
9892
- .disclosure:where([data-hn-ui-tree-item]),.disclosure-spacer:where([data-hn-ui-tree-item]) {
11202
+ .disclosure:where(:scope, :scope *):where([data-hn-ui-tree-item]),.disclosure-spacer:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9893
11203
  grid-column: 1;
9894
11204
  grid-row: 1;
9895
11205
  inline-size: var(--_tree-disclosure-size);
9896
11206
  block-size: 28px;
9897
11207
  }
9898
- .disclosure:where([data-hn-ui-tree-item]) {
11208
+ .disclosure:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9899
11209
  display: grid;
9900
11210
  /* Start-aligned: the chevron's ink, not its hit area, aligns with the content above it. */
9901
11211
  place-items: center start;
@@ -9906,10 +11216,10 @@ to {
9906
11216
  border-radius: var(--ui-radius-sm);
9907
11217
  cursor: pointer;
9908
11218
  }
9909
- .disclosure[hidden]:where([data-hn-ui-tree-item]) {
11219
+ .disclosure[hidden]:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9910
11220
  display: none;
9911
11221
  }
9912
- .selection-hit:where([data-hn-ui-tree-item]) {
11222
+ .selection-hit:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9913
11223
  display: none;
9914
11224
  grid-column: 2;
9915
11225
  grid-row: 1;
@@ -9918,31 +11228,36 @@ to {
9918
11228
  block-size: var(--_ui-tree-item-min-block-size, var(--_tree-row-min-height));
9919
11229
  cursor: pointer;
9920
11230
  }
9921
- .selection-checkbox:where([data-hn-ui-tree-item]) {
11231
+ .selection-checkbox:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9922
11232
  inline-size: 1rem;
9923
11233
  block-size: 1rem;
9924
11234
  margin: 0;
9925
11235
  accent-color: var(--ui-accent-solid);
9926
11236
  }
9927
- :scope[data-selection-mode="multiple"] > .row:where([data-hn-ui-tree-item]) {
11237
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
11238
+ > .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9928
11239
  grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr);
9929
11240
  }
9930
- :scope[data-selection-mode="multiple"]
11241
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
9931
11242
  > .row
9932
- > .selection-hit:where([data-hn-ui-tree-item]) {
11243
+ > .selection-hit:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9933
11244
  display: grid;
9934
11245
  }
9935
- :scope[data-selection-mode="multiple"] > .row > .leading:where([data-hn-ui-tree-item]) {
11246
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
11247
+ > .row
11248
+ > .leading:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9936
11249
  grid-column: 3;
9937
11250
  }
9938
- :scope[data-selection-mode="multiple"] > .row > .label:where([data-hn-ui-tree-item]) {
11251
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
11252
+ > .row
11253
+ > .label:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9939
11254
  grid-column: 4;
9940
11255
  }
9941
- .disclosure:hover:where([data-hn-ui-tree-item]) {
11256
+ .disclosure:hover:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9942
11257
  color: var(--ui-text-primary);
9943
11258
  background: var(--ui-surface-elevated);
9944
11259
  }
9945
- .disclosure-icon:where([data-hn-ui-tree-item]) {
11260
+ .disclosure-icon:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9946
11261
  display: grid;
9947
11262
  place-items: center;
9948
11263
  inline-size: 12px;
@@ -9950,7 +11265,8 @@ to {
9950
11265
  transform: rotate(-90deg);
9951
11266
  transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
9952
11267
  }
9953
- .disclosure-icon:where([data-hn-ui-tree-item])::before {
11268
+ .disclosure-icon:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where(:scope, :scope
11269
+ *):where([data-hn-ui-tree-item])::before {
9954
11270
  display: block;
9955
11271
  inline-size: 0.375rem;
9956
11272
  block-size: 0.375rem;
@@ -9960,18 +11276,18 @@ to {
9960
11276
  /* A chevron's ink sits below its box centre; lift it so it centres optically (in either rotation). */
9961
11277
  transform: translateY(-20%) rotate(45deg);
9962
11278
  }
9963
- :scope[aria-expanded="true"]
11279
+ :where(.ui-tree-item)[aria-expanded="true"]
9964
11280
  > .row
9965
11281
  > .disclosure
9966
- > .disclosure-icon:where([data-hn-ui-tree-item]) {
11282
+ > .disclosure-icon:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
9967
11283
  transform: rotate(0deg);
9968
11284
  }
9969
- .drag-handle svg:where([data-hn-ui-tree-item]) {
11285
+ .drag-handle:where(:scope, :scope *) svg:where([data-hn-ui-tree-item]) {
9970
11286
  display: block;
9971
11287
  inline-size: 100%;
9972
11288
  block-size: 100%;
9973
11289
  }
9974
- .leading:where([data-hn-ui-tree-item]) {
11290
+ .leading:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9975
11291
  display: inline-grid;
9976
11292
  place-items: center;
9977
11293
  grid-column: 2;
@@ -9984,16 +11300,10 @@ to {
9984
11300
  position: relative;
9985
11301
  z-index: 1;
9986
11302
  }
9987
- .leading:empty:where([data-hn-ui-tree-item]) {
11303
+ .leading:empty:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9988
11304
  display: none;
9989
11305
  }
9990
- :where(:not([data-hn-ui-tree-item])):is(svg),:where(:not([data-hn-ui-tree-item])):is(img) {
9991
- display: block;
9992
- inline-size: 1em;
9993
- block-size: 1em;
9994
- flex: none;
9995
- }
9996
- .label:where([data-hn-ui-tree-item]) {
11306
+ .label:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
9997
11307
  grid-column: 3;
9998
11308
  grid-row: 1;
9999
11309
  align-self: stretch;
@@ -10008,7 +11318,7 @@ to {
10008
11318
  is where the controller reads the length in pixels to stop a sliding name before the fade. */
10009
11319
  column-gap: var(--ui-space-1);
10010
11320
  }
10011
- .label-text:where([data-hn-ui-tree-item]) {
11321
+ .label-text:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
10012
11322
  display: flex;
10013
11323
  align-items: center;
10014
11324
  /* Stretches, so slotted content can still be the row's full-height hit area. */
@@ -10018,13 +11328,11 @@ to {
10018
11328
  inline-size: 100%;
10019
11329
  white-space: nowrap;
10020
11330
  }
10021
- .label-text > :where(:not([data-hn-ui-tree-item])):is(*) {
10022
- flex: 1 1 auto;
10023
- min-inline-size: 0;
10024
- }
10025
- .row:hover > .label:where([data-hn-ui-tree-item]),.row:focus-within > .label:where([data-hn-ui-tree-item]),:scope[data-ui-tree-item-state~="actionsVisible"]
11331
+ .row:hover:where(:scope, :scope *) > .label:where([data-hn-ui-tree-item]),.row:focus-within:where(:scope, :scope *) > .label:where([data-hn-ui-tree-item]),:where(.ui-tree-item)[data-ui-tree-item-state~="actionsVisible"]
10026
11332
  > .row
10027
- > .label:where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .label:where([data-hn-ui-tree-item]) {
11333
+ > .label:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]),:where(.ui-tree-item)[data-move-source]
11334
+ > .row
11335
+ > .label:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10028
11336
  text-overflow: clip;
10029
11337
  mask-image: linear-gradient(
10030
11338
  to right,
@@ -10032,22 +11340,27 @@ to {
10032
11340
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
10033
11341
  );
10034
11342
  }
10035
- .row:hover > .label:dir(rtl):where([data-hn-ui-tree-item]),.row:focus-within > .label:dir(rtl):where([data-hn-ui-tree-item]),:scope[data-ui-tree-item-state~="actionsVisible"]
11343
+ .row:hover:where(:scope, :scope *) > .label:dir(rtl):where([data-hn-ui-tree-item]),.row:focus-within:where(:scope, :scope *)
11344
+ > .label:dir(rtl):where([data-hn-ui-tree-item]),:where(.ui-tree-item)[data-ui-tree-item-state~="actionsVisible"]
10036
11345
  > .row
10037
- > .label:dir(rtl):where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .label:dir(rtl):where([data-hn-ui-tree-item]) {
11346
+ > .label:dir(rtl):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]),:where(.ui-tree-item)[data-move-source]
11347
+ > .row
11348
+ > .label:dir(rtl):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10038
11349
  mask-image: linear-gradient(
10039
11350
  to left,
10040
11351
  #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
10041
11352
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
10042
11353
  );
10043
11354
  }
10044
- .row[data-ui-marquee] > .label > .label-text:where([data-hn-ui-tree-item]) {
11355
+ .row[data-ui-marquee]:where(:scope, :scope *)
11356
+ > .label
11357
+ > .label-text:where([data-hn-ui-tree-item]) {
10045
11358
  /* Once per pass: the controller restarts it after a rest at the end, so the name holds still
10046
11359
  long enough to read rather than sliding back and forth. */
10047
- animation: ui-tree-item-marquee-16fe002b var(--_marquee-duration) linear 0.5s 1 normal forwards;
11360
+ animation: ui-tree-item-marquee-fc4c8748 var(--_marquee-duration) linear 0.5s 1 normal forwards;
10048
11361
  will-change: transform;
10049
11362
  }
10050
- .row[data-ui-marquee] > .label:where([data-hn-ui-tree-item]) {
11363
+ .row[data-ui-marquee]:where(:scope, :scope *) > .label:where([data-hn-ui-tree-item]) {
10051
11364
  margin-inline-start: calc(-1 * var(--_marquee-lead, 0px));
10052
11365
  padding-inline-start: calc(
10053
11366
  var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
@@ -10062,7 +11375,8 @@ to {
10062
11375
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
10063
11376
  );
10064
11377
  }
10065
- .row[data-ui-marquee] > .label:dir(rtl):where([data-hn-ui-tree-item]) {
11378
+ .row[data-ui-marquee]:where(:scope, :scope *)
11379
+ > .label:dir(rtl):where([data-hn-ui-tree-item]) {
10066
11380
  mask-image: linear-gradient(
10067
11381
  to left,
10068
11382
  transparent var(--_marquee-icon-width, 0px),
@@ -10074,14 +11388,13 @@ to {
10074
11388
  );
10075
11389
  }
10076
11390
  @media (prefers-reduced-motion: reduce) {
10077
- .row[data-ui-marquee] > .label > .label-text:where([data-hn-ui-tree-item]) {
11391
+ .row[data-ui-marquee]:where(:scope, :scope *)
11392
+ > .label
11393
+ > .label-text:where([data-hn-ui-tree-item]) {
10078
11394
  animation: none;
10079
11395
  }
10080
11396
  }
10081
- .row:hover > .label > :where(:not([data-hn-ui-tree-item])):is(*),.row:focus-within > .label > :where(:not([data-hn-ui-tree-item])):is(*) {
10082
- text-overflow: clip;
10083
- }
10084
- .actions:where([data-hn-ui-tree-item]) {
11397
+ .actions:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
10085
11398
  position: absolute;
10086
11399
  z-index: 1;
10087
11400
  inset-block: 0;
@@ -10093,17 +11406,19 @@ to {
10093
11406
  pointer-events: none;
10094
11407
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
10095
11408
  }
10096
- .row:hover > .actions:where([data-hn-ui-tree-item]),.row:focus-within > .actions:where([data-hn-ui-tree-item]),:scope[data-ui-tree-item-state~="actionsVisible"]
11409
+ .row:hover:where(:scope, :scope *) > .actions:where([data-hn-ui-tree-item]),.row:focus-within:where(:scope, :scope *) > .actions:where([data-hn-ui-tree-item]),:where(.ui-tree-item)[data-ui-tree-item-state~="actionsVisible"]
10097
11410
  > .row
10098
- > .actions:where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .actions:where([data-hn-ui-tree-item]) {
11411
+ > .actions:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]),:where(.ui-tree-item)[data-move-source]
11412
+ > .row
11413
+ > .actions:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10099
11414
  opacity: 1;
10100
11415
  pointer-events: auto;
10101
11416
  }
10102
11417
  @media (hover: none), (pointer: coarse) {
10103
- .row:where([data-hn-ui-tree-item]) {
11418
+ .row:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
10104
11419
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
10105
11420
  }
10106
- .actions:where([data-hn-ui-tree-item]) {
11421
+ .actions:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
10107
11422
  position: static;
10108
11423
  grid-column: 4;
10109
11424
  grid-row: 1;
@@ -10112,10 +11427,16 @@ to {
10112
11427
  opacity: 1;
10113
11428
  pointer-events: auto;
10114
11429
  }
10115
- .row:is(:hover, :focus-within) > .label:where([data-hn-ui-tree-item]),.row:is(:hover, :focus-within) > .label:dir(rtl):where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .label:where([data-hn-ui-tree-item]),:scope[data-move-source] > .row > .label:dir(rtl):where([data-hn-ui-tree-item]) {
11430
+ .row:is(:hover, :focus-within):where(:scope, :scope *)
11431
+ > .label:where([data-hn-ui-tree-item]),.row:is(:hover, :focus-within):where(:scope, :scope *)
11432
+ > .label:dir(rtl):where([data-hn-ui-tree-item]),:where(.ui-tree-item)[data-move-source]
11433
+ > .row
11434
+ > .label:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]),:where(.ui-tree-item)[data-move-source]
11435
+ > .row
11436
+ > .label:dir(rtl):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10116
11437
  mask-image: none;
10117
11438
  }
10118
- .row[data-ui-marquee] > .label:where([data-hn-ui-tree-item]) {
11439
+ .row[data-ui-marquee]:where(:scope, :scope *) > .label:where([data-hn-ui-tree-item]) {
10119
11440
  mask-image: linear-gradient(
10120
11441
  to right,
10121
11442
  transparent var(--_marquee-icon-width, 0px),
@@ -10126,17 +11447,18 @@ to {
10126
11447
  }
10127
11448
 
10128
11449
  /* Persistent content has its own column on touch. Fade only the label's end. */
10129
- :scope[data-ui-tree-item-state~="actionsVisible"]
11450
+ :where(.ui-tree-item)[data-ui-tree-item-state~="actionsVisible"]
10130
11451
  > .row
10131
- > .label:where([data-hn-ui-tree-item]) {
11452
+ > .label:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10132
11453
  mask-image: linear-gradient(to right, #000 calc(100% - var(--ui-space-1)), transparent 100%);
10133
11454
  }
10134
- :scope[data-ui-tree-item-state~="actionsVisible"]
11455
+ :where(.ui-tree-item)[data-ui-tree-item-state~="actionsVisible"]
10135
11456
  > .row
10136
- > .label:dir(rtl):where([data-hn-ui-tree-item]) {
11457
+ > .label:dir(rtl):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10137
11458
  mask-image: linear-gradient(to left, #000 calc(100% - var(--ui-space-1)), transparent 100%);
10138
11459
  }
10139
- .row[data-ui-marquee] > .label:dir(rtl):where([data-hn-ui-tree-item]) {
11460
+ .row[data-ui-marquee]:where(:scope, :scope *)
11461
+ > .label:dir(rtl):where([data-hn-ui-tree-item]) {
10140
11462
  mask-image: linear-gradient(
10141
11463
  to left,
10142
11464
  transparent var(--_marquee-icon-width, 0px),
@@ -10145,16 +11467,17 @@ to {
10145
11467
  )
10146
11468
  );
10147
11469
  }
10148
- :scope[data-selection-mode="multiple"] > .row:where([data-hn-ui-tree-item]) {
11470
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
11471
+ > .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10149
11472
  grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr) auto;
10150
11473
  }
10151
- :scope[data-selection-mode="multiple"]
11474
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
10152
11475
  > .row
10153
- > .actions:where([data-hn-ui-tree-item]) {
11476
+ > .actions:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10154
11477
  grid-column: 5;
10155
11478
  }
10156
11479
  }
10157
- .drag-handle:where([data-hn-ui-tree-item]) {
11480
+ .drag-handle:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
10158
11481
  position: absolute;
10159
11482
  z-index: 2;
10160
11483
  inset-block-start: 50%;
@@ -10175,22 +11498,24 @@ to {
10175
11498
  transform: translateY(-50%);
10176
11499
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
10177
11500
  }
10178
- .row:hover .drag-handle:where([data-hn-ui-tree-item]),.drag-handle:hover:where([data-hn-ui-tree-item]),.drag-handle:focus-visible:where([data-hn-ui-tree-item]),:scope[data-dragging] > .row > .drag-handle:where([data-hn-ui-tree-item]) {
11501
+ .row:hover:where(:scope, :scope *) .drag-handle:where([data-hn-ui-tree-item]),.drag-handle:hover:where(:scope, :scope *):where([data-hn-ui-tree-item]),.drag-handle:focus-visible:where(:scope, :scope *):where([data-hn-ui-tree-item]),:where(.ui-tree-item)[data-dragging]
11502
+ > .row
11503
+ > .drag-handle:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10179
11504
  opacity: 1;
10180
11505
  }
10181
- :scope[data-ui-tree-item-state~="isContainer"]
11506
+ :where(.ui-tree-item)[data-ui-tree-item-state~="isContainer"]
10182
11507
  > .row
10183
- > .drag-handle:where([data-hn-ui-tree-item]) {
11508
+ > .drag-handle:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10184
11509
  inset-inline-start: calc(-1 * var(--_tree-disclosure-size) - 2px);
10185
11510
  }
10186
- .drag-handle:hover:where([data-hn-ui-tree-item]),.drag-handle:focus-visible:where([data-hn-ui-tree-item]) {
11511
+ .drag-handle:hover:where(:scope, :scope *):where([data-hn-ui-tree-item]),.drag-handle:focus-visible:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
10187
11512
  color: var(--ui-text-primary);
10188
11513
  background: var(--ui-surface-hover);
10189
11514
  }
10190
- .drag-handle:active:where([data-hn-ui-tree-item]) {
11515
+ .drag-handle:active:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
10191
11516
  cursor: grabbing;
10192
11517
  }
10193
- .drop-indicator:where([data-hn-ui-tree-item]) {
11518
+ .drop-indicator:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
10194
11519
  position: absolute;
10195
11520
  z-index: 3;
10196
11521
  inset-inline: 1px;
@@ -10200,7 +11525,9 @@ to {
10200
11525
  background: var(--_ui-tree-drop-color, var(--ui-accent-solid));
10201
11526
  pointer-events: none;
10202
11527
  }
10203
- .drop-indicator:where([data-hn-ui-tree-item])::before,.drop-indicator:where([data-hn-ui-tree-item])::after {
11528
+ .drop-indicator:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where(:scope, :scope
11529
+ *):where([data-hn-ui-tree-item])::before,.drop-indicator:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where(:scope, :scope
11530
+ *):where([data-hn-ui-tree-item])::after {
10204
11531
  content: "";
10205
11532
  position: absolute;
10206
11533
  inset-block-start: 50%;
@@ -10211,36 +11538,43 @@ to {
10211
11538
  background: var(--ui-surface-elevated);
10212
11539
  transform: translateY(-50%);
10213
11540
  }
10214
- .drop-indicator:where([data-hn-ui-tree-item])::before {
11541
+ .drop-indicator:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where(:scope, :scope
11542
+ *):where([data-hn-ui-tree-item])::before {
10215
11543
  inset-inline-start: -1px;
10216
11544
  }
10217
- .drop-indicator:where([data-hn-ui-tree-item])::after {
11545
+ .drop-indicator:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where(:scope, :scope
11546
+ *):where([data-hn-ui-tree-item])::after {
10218
11547
  inset-inline-end: -1px;
10219
11548
  }
10220
- :scope[data-drop-position="before"]
11549
+ :where(.ui-tree-item)[data-drop-position="before"]
10221
11550
  > .row
10222
- > .row-drop-indicator:where([data-hn-ui-tree-item]) {
11551
+ > .row-drop-indicator:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10223
11552
  display: block;
10224
11553
  inset-block-start: calc(-0.5 * var(--ui-accent-line-width));
10225
11554
  }
10226
- :scope[data-drop-position="after"]
10227
- > .subtree-drop-indicator:where([data-hn-ui-tree-item]) {
11555
+ :where(.ui-tree-item)[data-drop-position="after"]
11556
+ > .subtree-drop-indicator:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10228
11557
  display: block;
10229
11558
  inset-block-end: calc(-0.5 * var(--ui-accent-line-width));
10230
11559
  }
10231
- .children[hidden]:where([data-hn-ui-tree-item]) {
11560
+ .children[hidden]:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
10232
11561
  display: none;
10233
11562
  }
10234
- html[data-ui-input-modality="touch"] :scope:where([data-hn-ui-tree-item]) {
11563
+ html[data-ui-input-modality="touch"]
11564
+ :where(.ui-tree-item):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10235
11565
  --_tree-row-min-height: 44px;
10236
11566
  }
10237
- html[data-ui-input-modality="touch"] :scope .row:where([data-hn-ui-tree-item]) {
11567
+ html[data-ui-input-modality="touch"]
11568
+ :where(.ui-tree-item)
11569
+ .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10238
11570
  grid-template-columns: 44px var(--_tree-disclosure-size) auto minmax(0, 1fr);
10239
11571
  }
10240
- html[data-ui-input-modality="touch"] :scope .drag-handle:where([data-hn-ui-tree-item]),html[data-ui-input-modality="touch"]
10241
- :scope[data-ui-tree-item-state~="isContainer"]
11572
+ html[data-ui-input-modality="touch"]
11573
+ :where(.ui-tree-item)
11574
+ .drag-handle:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]),html[data-ui-input-modality="touch"]
11575
+ :where(.ui-tree-item)[data-ui-tree-item-state~="isContainer"]
10242
11576
  > .row
10243
- > .drag-handle:where([data-hn-ui-tree-item]) {
11577
+ > .drag-handle:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10244
11578
  position: relative;
10245
11579
  grid-column: 1;
10246
11580
  grid-row: 1;
@@ -10252,76 +11586,87 @@ html[data-ui-input-modality="touch"] :scope .drag-handle:where([data-hn-ui-tree-
10252
11586
  transform: none;
10253
11587
  cursor: pointer;
10254
11588
  }
10255
- html[data-ui-input-modality="touch"] :scope .disclosure:where([data-hn-ui-tree-item]) {
11589
+ html[data-ui-input-modality="touch"]
11590
+ :where(.ui-tree-item)
11591
+ .disclosure:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10256
11592
  grid-column: 2;
10257
11593
  }
10258
- html[data-ui-input-modality="touch"] :scope .leading:where([data-hn-ui-tree-item]) {
11594
+ html[data-ui-input-modality="touch"]
11595
+ :where(.ui-tree-item)
11596
+ .leading:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10259
11597
  grid-column: 3;
10260
11598
  }
10261
- html[data-ui-input-modality="touch"] :scope .label:where([data-hn-ui-tree-item]) {
11599
+ html[data-ui-input-modality="touch"]
11600
+ :where(.ui-tree-item)
11601
+ .label:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10262
11602
  grid-column: 4;
10263
11603
  }
10264
11604
  html[data-ui-input-modality="touch"]
10265
- :scope[data-selection-mode="multiple"]
10266
- > .row:where([data-hn-ui-tree-item]) {
11605
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
11606
+ > .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10267
11607
  grid-template-columns: 44px var(--_tree-disclosure-size) 44px auto minmax(0, 1fr);
10268
11608
  }
10269
11609
  html[data-ui-input-modality="touch"]
10270
- :scope[data-selection-mode="multiple"]
11610
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
10271
11611
  > .row
10272
- > .selection-hit:where([data-hn-ui-tree-item]) {
11612
+ > .selection-hit:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10273
11613
  grid-column: 3;
10274
11614
  inline-size: 44px;
10275
11615
  block-size: 44px;
10276
11616
  }
10277
11617
  html[data-ui-input-modality="touch"]
10278
- :scope[data-selection-mode="multiple"]
11618
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
10279
11619
  > .row
10280
- > .leading:where([data-hn-ui-tree-item]) {
11620
+ > .leading:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10281
11621
  grid-column: 4;
10282
11622
  }
10283
11623
  html[data-ui-input-modality="touch"]
10284
- :scope[data-selection-mode="multiple"]
11624
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
10285
11625
  > .row
10286
- > .label:where([data-hn-ui-tree-item]) {
11626
+ > .label:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10287
11627
  grid-column: 5;
10288
11628
  }
10289
11629
  @media (hover: none), (pointer: coarse) {
10290
- html[data-ui-input-modality="touch"] :scope .row:where([data-hn-ui-tree-item]) {
11630
+ html[data-ui-input-modality="touch"]
11631
+ :where(.ui-tree-item)
11632
+ .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10291
11633
  grid-template-columns: 44px var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
10292
11634
  }
10293
- html[data-ui-input-modality="touch"] :scope .actions:where([data-hn-ui-tree-item]) {
11635
+ html[data-ui-input-modality="touch"]
11636
+ :where(.ui-tree-item)
11637
+ .actions:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10294
11638
  grid-column: 5;
10295
11639
  }
10296
11640
  html[data-ui-input-modality="touch"]
10297
- :scope[data-selection-mode="multiple"]
10298
- > .row:where([data-hn-ui-tree-item]) {
11641
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
11642
+ > .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10299
11643
  grid-template-columns: 44px var(--_tree-disclosure-size) 44px auto minmax(0, 1fr) auto;
10300
11644
  }
10301
11645
  html[data-ui-input-modality="touch"]
10302
- :scope[data-selection-mode="multiple"]
11646
+ :where(.ui-tree-item)[data-selection-mode="multiple"]
10303
11647
  > .row
10304
- > .actions:where([data-hn-ui-tree-item]) {
11648
+ > .actions:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10305
11649
  grid-column: 6;
10306
11650
  }
10307
11651
  }
10308
11652
  @media (prefers-reduced-motion: reduce) {
10309
- .row:where([data-hn-ui-tree-item]),.disclosure-icon:where([data-hn-ui-tree-item]),.drag-handle:where([data-hn-ui-tree-item]) {
11653
+ .row:where(:scope, :scope *):where([data-hn-ui-tree-item]),.disclosure-icon:where(:scope, :scope *):where([data-hn-ui-tree-item]),.drag-handle:where(:scope, :scope *):where([data-hn-ui-tree-item]) {
10310
11654
  transition: none;
10311
11655
  }
10312
11656
  }
10313
11657
  @media (forced-colors: active) {
10314
- :scope:focus-visible > .row:where([data-hn-ui-tree-item]) {
11658
+ :where(.ui-tree-item):focus-visible
11659
+ > .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10315
11660
  outline: var(--ui-focus-width) solid Highlight;
10316
11661
  outline-offset: calc(-1 * var(--ui-focus-width));
10317
11662
  }
10318
- :scope[data-ui-tree-item-state~="selected"]:not(:focus-visible):not([aria-disabled="true"])
10319
- > .row:where([data-hn-ui-tree-item]) {
11663
+ :where(.ui-tree-item)[data-ui-tree-item-state~="selected"]:not(:focus-visible):not([aria-disabled="true"])
11664
+ > .row:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10320
11665
  outline: var(--ui-border-width) solid Highlight;
10321
11666
  outline-offset: calc(-1 * var(--ui-border-width));
10322
11667
  }
10323
11668
  }
10324
- :scope[hidden]:where([data-hn-ui-tree-item]) {
11669
+ :where(.ui-tree-item)[hidden]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where([data-hn-ui-tree-item]) {
10325
11670
  display: none;
10326
11671
  }
10327
11672
  }
@@ -10773,15 +12118,6 @@ html[data-ui-input-modality="touch"]
10773
12118
  background: transparent;
10774
12119
  }
10775
12120
 
10776
- /* The floating toolbar supplies the surface; the containing popover only
10777
- positions it beside the app-owned trigger. */
10778
- .looma-editor__formatting-popover {
10779
- --ui-popover-padding: 0;
10780
- --ui-popover-surface: transparent;
10781
- --ui-popover-border: transparent;
10782
- --ui-popover-shadow: none;
10783
- }
10784
-
10785
12121
  .looma-editor__chip-popover {
10786
12122
  inline-size: min(15rem, calc(100vw - 2rem));
10787
12123
  }
@@ -11003,7 +12339,7 @@ html[data-ui-input-modality="touch"]
11003
12339
  width: 3px;
11004
12340
  background: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
11005
12341
  }
11006
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
12342
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
11007
12343
  @supports (-moz-appearance: none) {
11008
12344
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
11009
12345
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -11552,7 +12888,7 @@ html[data-ui-input-modality="touch"]
11552
12888
 
11553
12889
  /* A component that sets its display still honours the hidden attribute on its root. */
11554
12890
  }
11555
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
12891
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
11556
12892
  @supports (-moz-appearance: none) {
11557
12893
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
11558
12894
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -11586,7 +12922,7 @@ html[data-ui-input-modality="touch"]
11586
12922
 
11587
12923
  /* A component that sets its display still honours the hidden attribute on its root. */
11588
12924
  }
11589
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
12925
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
11590
12926
  @supports (-moz-appearance: none) {
11591
12927
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
11592
12928
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -11687,7 +13023,7 @@ html[data-ui-input-modality="touch"]
11687
13023
 
11688
13024
  /* A component that sets its display still honours the hidden attribute on its root. */
11689
13025
  }
11690
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
13026
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
11691
13027
  @supports (-moz-appearance: none) {
11692
13028
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
11693
13029
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -11818,7 +13154,7 @@ html[data-ui-input-modality="touch"]
11818
13154
 
11819
13155
  /* A component that sets its display still honours the hidden attribute on its root. */
11820
13156
  }
11821
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
13157
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
11822
13158
  @supports (-moz-appearance: none) {
11823
13159
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
11824
13160
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -11872,7 +13208,7 @@ html[data-ui-input-modality="touch"]
11872
13208
 
11873
13209
  /* A component that sets its display still honours the hidden attribute on its root. */
11874
13210
  }
11875
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
13211
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
11876
13212
  @supports (-moz-appearance: none) {
11877
13213
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
11878
13214
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -12348,7 +13684,7 @@ html[data-ui-input-modality="touch"]
12348
13684
 
12349
13685
  /* A component that sets its display still honours the hidden attribute on its root. */
12350
13686
  }
12351
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
13687
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
12352
13688
  @supports (-moz-appearance: none) {
12353
13689
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
12354
13690
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -12446,7 +13782,7 @@ html[data-ui-input-modality="touch"]
12446
13782
 
12447
13783
  /* A component that sets its display still honours the hidden attribute on its root. */
12448
13784
  }
12449
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
13785
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
12450
13786
  @supports (-moz-appearance: none) {
12451
13787
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
12452
13788
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -12610,7 +13946,7 @@ html[data-ui-input-modality="touch"]
12610
13946
  @media (prefers-reduced-motion: reduce) {
12611
13947
  }
12612
13948
  }
12613
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
13949
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
12614
13950
  @supports (-moz-appearance: none) {
12615
13951
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
12616
13952
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -12805,7 +14141,7 @@ html[data-ui-input-modality="touch"]
12805
14141
 
12806
14142
  /* A component that sets its display still honours the hidden attribute on its root. */
12807
14143
  }
12808
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
14144
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
12809
14145
  @supports (-moz-appearance: none) {
12810
14146
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
12811
14147
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -12877,6 +14213,15 @@ html[data-ui-input-modality="touch"]
12877
14213
  box-shadow: var(--_ui-popover-shadow, var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg))));
12878
14214
  }
12879
14215
 
14216
+ /* A toolbar or card can supply its own surface, including an unclipped shadow. */
14217
+ :scope:where([data-component~="ui-popover"])[data-ui-popover-state~="bare"] .surface {
14218
+ overflow: visible;
14219
+ padding: 0;
14220
+ border: 0;
14221
+ background: transparent;
14222
+ box-shadow: none;
14223
+ }
14224
+
12880
14225
  :scope:where([data-component~="ui-popover"]):not([data-ui-popover-state~="internalOpen"]) {
12881
14226
  display: none;
12882
14227
  }
@@ -12932,13 +14277,15 @@ html[data-ui-input-modality="touch"]
12932
14277
  @scope ([data-component~="ui-popover"]) to ([data-component]) {
12933
14278
  /* This component's hooks style the element they are set on, and never a nested one. */
12934
14279
 
14280
+ /* A toolbar or card can supply its own surface, including an unclipped shadow. */
14281
+
12935
14282
  @starting-style {
12936
14283
  }
12937
14284
 
12938
14285
  @media (prefers-reduced-motion: reduce) {
12939
14286
  }
12940
14287
  }
12941
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
14288
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
12942
14289
  @supports (-moz-appearance: none) {
12943
14290
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
12944
14291
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -13025,7 +14372,7 @@ html[data-ui-input-modality="touch"]
13025
14372
 
13026
14373
  /* A component that sets its display still honours the hidden attribute on its root. */
13027
14374
  }
13028
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
14375
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
13029
14376
  @supports (-moz-appearance: none) {
13030
14377
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
13031
14378
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -13179,7 +14526,7 @@ html[data-ui-input-modality="touch"]
13179
14526
 
13180
14527
  /* A component that sets its display still honours the hidden attribute on its root. */
13181
14528
  }
13182
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
14529
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
13183
14530
  @supports (-moz-appearance: none) {
13184
14531
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
13185
14532
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -13424,7 +14771,7 @@ html[data-ui-input-modality="touch"]
13424
14771
  @media (prefers-reduced-motion: reduce) {
13425
14772
  }
13426
14773
  }
13427
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
14774
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
13428
14775
  @supports (-moz-appearance: none) {
13429
14776
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
13430
14777
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -13645,7 +14992,7 @@ html[data-ui-input-modality="touch"]
13645
14992
 
13646
14993
  /* A component that sets its display still honours the hidden attribute on its root. */
13647
14994
  }
13648
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
14995
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
13649
14996
  @supports (-moz-appearance: none) {
13650
14997
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
13651
14998
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -13869,7 +15216,7 @@ html[data-ui-input-modality="touch"]
13869
15216
 
13870
15217
  /* A component that sets its display still honours the hidden attribute on its root. */
13871
15218
  }
13872
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
15219
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
13873
15220
  @supports (-moz-appearance: none) {
13874
15221
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
13875
15222
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -14080,7 +15427,7 @@ html[data-ui-input-modality="touch"]
14080
15427
 
14081
15428
  /* A component that sets its display still honours the hidden attribute on its root. */
14082
15429
  }
14083
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
15430
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
14084
15431
  @supports (-moz-appearance: none) {
14085
15432
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
14086
15433
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -14135,7 +15482,7 @@ html[data-ui-input-modality="touch"]
14135
15482
 
14136
15483
  /* The root is the hr, so the rules name :host; a bare hr matches only a descendant. */
14137
15484
  }
14138
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
15485
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
14139
15486
  @supports (-moz-appearance: none) {
14140
15487
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
14141
15488
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
@@ -14315,7 +15662,7 @@ html[data-ui-input-modality="touch"]
14315
15662
 
14316
15663
  /* A component that sets its display still honours the hidden attribute on its root. */
14317
15664
  }
14318
- /* Generated by HTML Next 1.0.0-alpha.67. Do not edit. */
15665
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
14319
15666
  @supports (-moz-appearance: none) {
14320
15667
  :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
14321
15668
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }