@fusion.dev/helix-headless 0.145.0 → 0.147.0

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 (343) hide show
  1. package/custom-elements.json +12286 -4281
  2. package/dist/accordion/item/accordion-item.d.ts +51 -18
  3. package/dist/accordion/item/accordion-item.js +45 -13
  4. package/dist/accordion/root/accordion-root.d.ts +16 -7
  5. package/dist/accordion/root/accordion-root.js +3 -3
  6. package/dist/announcement/root/announcement-root.d.ts +16 -6
  7. package/dist/announcement/root/announcement-root.js +37 -7
  8. package/dist/app-header/root/app-header-root.d.ts +7 -2
  9. package/dist/app-header/root/app-header-root.js +9 -1
  10. package/dist/app-header/sectioning.d.ts +3 -1
  11. package/dist/app-header/sectioning.js +3 -2
  12. package/dist/area-chart/root/area-chart-root.d.ts +18 -1
  13. package/dist/area-chart/root/area-chart-root.js +11 -3
  14. package/dist/avatar/group/avatar-group.d.ts +20 -14
  15. package/dist/avatar/group/avatar-group.js +17 -19
  16. package/dist/avatar/root/avatar-root.d.ts +31 -1
  17. package/dist/avatar/root/avatar-root.js +11 -1
  18. package/dist/badge/root/badge-root.d.ts +60 -7
  19. package/dist/badge/root/badge-root.js +89 -6
  20. package/dist/bar-chart/root/bar-chart-root.d.ts +18 -1
  21. package/dist/bar-chart/root/bar-chart-root.js +48 -20
  22. package/dist/bar-chart/stack.d.ts +25 -0
  23. package/dist/bar-chart/stack.js +27 -0
  24. package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +14 -0
  25. package/dist/breadcrumbs/breadcrumb/breadcrumb.js +12 -2
  26. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +25 -0
  27. package/dist/breadcrumbs/root/breadcrumbs-root.js +51 -4
  28. package/dist/button/root/button-root.d.ts +50 -38
  29. package/dist/button/root/button-root.js +42 -53
  30. package/dist/button/submitter.d.ts +27 -0
  31. package/dist/button/submitter.js +25 -0
  32. package/dist/button-group/root/button-group-root.d.ts +2 -1
  33. package/dist/button-group/root/button-group-root.js +5 -1
  34. package/dist/canvas/node/canvas-node.d.ts +4 -3
  35. package/dist/canvas/node/canvas-node.js +3 -2
  36. package/dist/canvas/root/canvas-root.js +2 -2
  37. package/dist/card/root/card-root.d.ts +36 -4
  38. package/dist/card/root/card-root.js +29 -10
  39. package/dist/carousel/root/carousel-root.d.ts +43 -4
  40. package/dist/carousel/root/carousel-root.js +40 -12
  41. package/dist/carousel/stops.d.ts +20 -0
  42. package/dist/carousel/stops.js +30 -0
  43. package/dist/chat/message/chat-message.js +5 -4
  44. package/dist/chat/naming.d.ts +5 -1
  45. package/dist/chat/naming.js +4 -2
  46. package/dist/chat/root/chat-root.d.ts +40 -4
  47. package/dist/chat/root/chat-root.js +32 -6
  48. package/dist/checkbox/root/checkbox-root.d.ts +20 -0
  49. package/dist/checkbox/root/checkbox-root.js +18 -7
  50. package/dist/checkbox-group/root/checkbox-group-root.d.ts +8 -2
  51. package/dist/checkbox-group/root/checkbox-group-root.js +14 -11
  52. package/dist/checkbox-group/select-all.d.ts +21 -0
  53. package/dist/checkbox-group/select-all.js +7 -0
  54. package/dist/code-block/highlight.d.ts +15 -0
  55. package/dist/code-block/highlight.js +4 -0
  56. package/dist/code-block/root/code-block-root.d.ts +79 -10
  57. package/dist/code-block/root/code-block-root.js +74 -5
  58. package/dist/color-input/root/color-input-root.d.ts +14 -0
  59. package/dist/color-input/root/color-input-root.js +17 -7
  60. package/dist/color-picker/channels.js +1 -2
  61. package/dist/color-picker/root/color-picker-root.d.ts +53 -16
  62. package/dist/color-picker/root/color-picker-root.js +155 -46
  63. package/dist/color-picker/wheel.d.ts +17 -0
  64. package/dist/color-picker/wheel.js +6 -0
  65. package/dist/combobox/root/combobox-root.d.ts +56 -0
  66. package/dist/combobox/root/combobox-root.js +92 -15
  67. package/dist/command/root/command-root.d.ts +19 -2
  68. package/dist/command/root/command-root.js +24 -23
  69. package/dist/copy-button/root/copy-button-root.d.ts +21 -1
  70. package/dist/copy-button/root/copy-button-root.js +16 -4
  71. package/dist/data-table/index.d.ts +1 -1
  72. package/dist/data-table/index.js +1 -1
  73. package/dist/data-table/keys.d.ts +6 -0
  74. package/dist/data-table/keys.js +14 -0
  75. package/dist/data-table/root/data-table-root.d.ts +27 -18
  76. package/dist/data-table/root/data-table-root.js +31 -57
  77. package/dist/data-table/tree.d.ts +16 -1
  78. package/dist/data-table/tree.js +2 -3
  79. package/dist/date-input/root/date-input-root.d.ts +11 -2
  80. package/dist/date-input/root/date-input-root.js +26 -12
  81. package/dist/date-picker/root/date-picker-root.d.ts +14 -9
  82. package/dist/date-picker/root/date-picker-root.js +33 -22
  83. package/dist/description-list/item/description-list-item.d.ts +18 -4
  84. package/dist/description-list/item/description-list-item.js +8 -4
  85. package/dist/dialog/description.js +15 -1
  86. package/dist/dialog/root/dialog-root.d.ts +8 -2
  87. package/dist/dialog/root/dialog-root.js +16 -1
  88. package/dist/divider/root/divider-root.d.ts +3 -0
  89. package/dist/divider/root/divider-root.js +2 -1
  90. package/dist/donut-chart/root/donut-chart-root.d.ts +31 -0
  91. package/dist/donut-chart/root/donut-chart-root.js +55 -1
  92. package/dist/donut-chart/slice-label.d.ts +35 -0
  93. package/dist/donut-chart/slice-label.js +11 -0
  94. package/dist/drawer/reveal.d.ts +8 -0
  95. package/dist/drawer/reveal.js +1 -0
  96. package/dist/drawer/root/drawer-root.d.ts +63 -2
  97. package/dist/drawer/root/drawer-root.js +75 -4
  98. package/dist/drilldown/item/drilldown-item.d.ts +21 -1
  99. package/dist/drilldown/item/drilldown-item.js +40 -5
  100. package/dist/drilldown/root/drilldown-root.d.ts +21 -3
  101. package/dist/drilldown/root/drilldown-root.js +22 -3
  102. package/dist/element-events.generated.js +35 -6
  103. package/dist/empty/root/empty-root.d.ts +34 -2
  104. package/dist/empty/root/empty-root.js +26 -4
  105. package/dist/file-input/root/file-input-root.d.ts +99 -8
  106. package/dist/file-input/root/file-input-root.js +120 -22
  107. package/dist/file-input/screen.d.ts +2 -1
  108. package/dist/file-input/status.d.ts +24 -0
  109. package/dist/file-input/status.js +10 -0
  110. package/dist/filter-input/chip/filter-chip.d.ts +23 -0
  111. package/dist/filter-input/chip/filter-chip.js +11 -2
  112. package/dist/filter-input/menu/filter-menu.d.ts +2 -0
  113. package/dist/filter-input/menu/filter-menu.js +12 -4
  114. package/dist/filter-input/root/filter-input-root.d.ts +38 -6
  115. package/dist/filter-input/root/filter-input-root.js +18 -28
  116. package/dist/filter-input/suggest.d.ts +28 -3
  117. package/dist/filter-input/suggest.js +18 -8
  118. package/dist/format-date/options.d.ts +3 -4
  119. package/dist/format-date/options.js +2 -2
  120. package/dist/format-date/root/format-date-root.d.ts +27 -17
  121. package/dist/format-date/root/format-date-root.js +27 -48
  122. package/dist/heatmap/root/buckets.d.ts +21 -0
  123. package/dist/heatmap/root/buckets.js +34 -0
  124. package/dist/heatmap/root/heatmap-root.d.ts +83 -11
  125. package/dist/heatmap/root/heatmap-root.js +104 -12
  126. package/dist/icon/index.d.ts +1 -1
  127. package/dist/icon/index.js +1 -1
  128. package/dist/icon/registry.d.ts +26 -1
  129. package/dist/icon/registry.js +12 -1
  130. package/dist/icon/root/icon-root.d.ts +25 -1
  131. package/dist/icon/root/icon-root.js +44 -12
  132. package/dist/icon/root/index.d.ts +1 -1
  133. package/dist/icon/root/index.js +1 -1
  134. package/dist/icon/settle.d.ts +7 -0
  135. package/dist/icon/settle.js +10 -0
  136. package/dist/icon-button/root/icon-button-root.d.ts +2 -0
  137. package/dist/image/root/image-root.d.ts +14 -1
  138. package/dist/image/root/image-root.js +7 -2
  139. package/dist/input/root/input-root.d.ts +34 -3
  140. package/dist/input/root/input-root.js +17 -4
  141. package/dist/kbd/keys.d.ts +29 -0
  142. package/dist/kbd/keys.js +52 -0
  143. package/dist/kbd/root/kbd-root.d.ts +52 -1
  144. package/dist/kbd/root/kbd-root.js +40 -47
  145. package/dist/legend/hidden-series.d.ts +10 -2
  146. package/dist/legend/hidden-series.js +5 -2
  147. package/dist/legend/root/legend-root.d.ts +77 -12
  148. package/dist/legend/root/legend-root.js +71 -17
  149. package/dist/lightbox/root/lightbox-root.d.ts +98 -10
  150. package/dist/lightbox/root/lightbox-root.js +153 -18
  151. package/dist/lightbox/zoom-controller.d.ts +59 -0
  152. package/dist/lightbox/zoom-controller.js +128 -0
  153. package/dist/lightbox/zoom.d.ts +24 -0
  154. package/dist/lightbox/zoom.js +18 -0
  155. package/dist/line-chart/root/line-chart-root.d.ts +38 -1
  156. package/dist/line-chart/root/line-chart-root.js +31 -3
  157. package/dist/list/item/list-item.d.ts +2 -0
  158. package/dist/list/item/list-item.js +11 -2
  159. package/dist/list/root/list-root.d.ts +70 -13
  160. package/dist/list/root/list-root.js +91 -13
  161. package/dist/list/selection.d.ts +54 -7
  162. package/dist/list/selection.js +32 -7
  163. package/dist/listbox/root/listbox-root.d.ts +44 -4
  164. package/dist/listbox/root/listbox-root.js +72 -34
  165. package/dist/loader/busy.d.ts +10 -0
  166. package/dist/loader/busy.js +11 -0
  167. package/dist/loader/root/loader-root.d.ts +9 -2
  168. package/dist/loader/root/loader-root.js +23 -3
  169. package/dist/megamenu/hand-over.d.ts +75 -0
  170. package/dist/megamenu/hand-over.js +67 -0
  171. package/dist/megamenu/root/megamenu-root.d.ts +80 -15
  172. package/dist/megamenu/root/megamenu-root.js +76 -19
  173. package/dist/menu/item/menu-item.d.ts +51 -2
  174. package/dist/menu/item/menu-item.js +50 -26
  175. package/dist/menu/root/menu-root.d.ts +17 -0
  176. package/dist/menu/root/menu-root.js +2 -2
  177. package/dist/meter/root/meter-root.d.ts +62 -1
  178. package/dist/meter/root/meter-root.js +38 -16
  179. package/dist/navigation/root/navigation-root.d.ts +2 -1
  180. package/dist/navigation/root/navigation-root.js +2 -2
  181. package/dist/notifications/root/notifications-root.d.ts +20 -4
  182. package/dist/notifications/root/notifications-root.js +30 -8
  183. package/dist/number-input/grain.d.ts +28 -0
  184. package/dist/number-input/grain.js +14 -0
  185. package/dist/number-input/root/number-input-root.d.ts +34 -9
  186. package/dist/number-input/root/number-input-root.js +31 -25
  187. package/dist/object-inspector/root/object-inspector-root.d.ts +88 -33
  188. package/dist/object-inspector/root/object-inspector-root.js +134 -92
  189. package/dist/object-inspector/rows.d.ts +18 -0
  190. package/dist/object-inspector/rows.js +33 -0
  191. package/dist/option/index.d.ts +1 -0
  192. package/dist/option/index.js +1 -0
  193. package/dist/option/root/option-root.d.ts +5 -3
  194. package/dist/option/separator/option-separator.d.ts +30 -0
  195. package/dist/option/separator/option-separator.js +21 -0
  196. package/dist/outline/root/outline-root.d.ts +30 -0
  197. package/dist/outline/root/outline-root.js +17 -13
  198. package/dist/pagination/size/pagination-size.d.ts +6 -0
  199. package/dist/pagination/size/pagination-size.js +5 -3
  200. package/dist/pin-input/code.d.ts +37 -0
  201. package/dist/pin-input/code.js +25 -0
  202. package/dist/pin-input/root/pin-input-root.d.ts +116 -115
  203. package/dist/pin-input/root/pin-input-root.js +163 -155
  204. package/dist/popover/hide-outside.d.ts +14 -0
  205. package/dist/popover/hide-outside.js +34 -0
  206. package/dist/popover/root/popover-root.d.ts +64 -8
  207. package/dist/popover/root/popover-root.js +67 -4
  208. package/dist/progress/root/progress-root.d.ts +47 -0
  209. package/dist/progress/root/progress-root.js +34 -16
  210. package/dist/qr-code/export.d.ts +45 -1
  211. package/dist/qr-code/export.js +28 -0
  212. package/dist/qr-code/name.d.ts +11 -0
  213. package/dist/qr-code/name.js +7 -0
  214. package/dist/qr-code/root/qr-code-root.d.ts +36 -11
  215. package/dist/qr-code/root/qr-code-root.js +58 -11
  216. package/dist/quote/marks.d.ts +8 -0
  217. package/dist/quote/marks.js +5 -0
  218. package/dist/quote/root/quote-root.d.ts +14 -2
  219. package/dist/quote/root/quote-root.js +23 -1
  220. package/dist/radio/group/radio-group.d.ts +15 -0
  221. package/dist/radio/root/radio-root.d.ts +6 -2
  222. package/dist/radio/root/radio-root.js +7 -2
  223. package/dist/rating/root/rating-root.d.ts +30 -12
  224. package/dist/rating/root/rating-root.js +27 -27
  225. package/dist/scatter-chart/fit.d.ts +15 -0
  226. package/dist/scatter-chart/fit.js +35 -0
  227. package/dist/scatter-chart/root/scatter-chart-root.d.ts +51 -1
  228. package/dist/scatter-chart/root/scatter-chart-root.js +64 -24
  229. package/dist/scroll-area/root/scroll-area-root.d.ts +22 -51
  230. package/dist/scroll-area/root/scroll-area-root.js +57 -173
  231. package/dist/scroll-area/scrollbar-controller.d.ts +111 -0
  232. package/dist/scroll-area/scrollbar-controller.js +172 -0
  233. package/dist/scroll-area/scrollbar.d.ts +27 -8
  234. package/dist/scroll-area/scrollbar.js +10 -1
  235. package/dist/select/align.d.ts +47 -0
  236. package/dist/select/align.js +7 -0
  237. package/dist/select/root/select-root.d.ts +71 -0
  238. package/dist/select/root/select-root.js +78 -6
  239. package/dist/skeleton/root/skeleton-root.d.ts +3 -0
  240. package/dist/skeleton/root/skeleton-root.js +4 -2
  241. package/dist/skip-link/root/skip-link-root.js +2 -2
  242. package/dist/slider/root/slider-root.d.ts +59 -5
  243. package/dist/slider/root/slider-root.js +45 -3
  244. package/dist/sparkline/readings.d.ts +36 -0
  245. package/dist/sparkline/readings.js +36 -0
  246. package/dist/sparkline/root/sparkline-root.d.ts +121 -7
  247. package/dist/sparkline/root/sparkline-root.js +160 -26
  248. package/dist/speed-dial/item/speed-dial-item.d.ts +1 -1
  249. package/dist/speed-dial/item/speed-dial-item.js +2 -2
  250. package/dist/speed-dial/root/speed-dial-root.d.ts +6 -0
  251. package/dist/speed-dial/root/speed-dial-root.js +11 -3
  252. package/dist/splitter/root/splitter-root.d.ts +10 -12
  253. package/dist/splitter/root/splitter-root.js +211 -204
  254. package/dist/stat/root/stat-root.d.ts +14 -5
  255. package/dist/stat/root/stat-root.js +21 -5
  256. package/dist/steps/reach.d.ts +5 -0
  257. package/dist/steps/reach.js +3 -0
  258. package/dist/steps/root/steps-root.d.ts +56 -3
  259. package/dist/steps/root/steps-root.js +50 -6
  260. package/dist/steps/step/step.d.ts +8 -0
  261. package/dist/steps/step/step.js +8 -3
  262. package/dist/switch/root/switch-root.d.ts +10 -0
  263. package/dist/table/column/table-column.d.ts +6 -10
  264. package/dist/table/column/table-column.js +8 -20
  265. package/dist/table/root/table-root.d.ts +31 -10
  266. package/dist/table/root/table-root.js +14 -18
  267. package/dist/table/row/table-row.d.ts +24 -0
  268. package/dist/table/row/table-row.js +37 -1
  269. package/dist/tabs/panel/tab-panel.d.ts +16 -3
  270. package/dist/tabs/panel/tab-panel.js +34 -5
  271. package/dist/tabs/root/tabs-root.d.ts +17 -3
  272. package/dist/tabs/root/tabs-root.js +1 -1
  273. package/dist/tabs/tab/tab.d.ts +5 -0
  274. package/dist/tabs/tab/tab.js +5 -2
  275. package/dist/tag/group/tag-group.d.ts +44 -5
  276. package/dist/tag/group/tag-group.js +60 -9
  277. package/dist/tag/root/tag-root.js +9 -2
  278. package/dist/textarea/root/textarea-root.d.ts +41 -2
  279. package/dist/textarea/root/textarea-root.js +39 -1
  280. package/dist/time-input/root/time-input-root.d.ts +10 -2
  281. package/dist/time-input/root/time-input-root.js +24 -13
  282. package/dist/time-picker/root/time-picker-root.d.ts +28 -17
  283. package/dist/time-picker/root/time-picker-root.js +18 -29
  284. package/dist/time-picker/wheel-name.d.ts +9 -0
  285. package/dist/time-picker/wheel-name.js +15 -0
  286. package/dist/timeline/group/timeline-group.js +2 -2
  287. package/dist/toast/item/toast-item.d.ts +16 -3
  288. package/dist/toast/item/toast-item.js +22 -6
  289. package/dist/toast/root/toast-root.d.ts +34 -4
  290. package/dist/toast/root/toast-root.js +74 -13
  291. package/dist/toast/words.d.ts +12 -0
  292. package/dist/toast/words.js +25 -0
  293. package/dist/toggle/group/toggle-group.d.ts +52 -7
  294. package/dist/toggle/group/toggle-group.js +58 -44
  295. package/dist/toggle/root/toggle-root.js +2 -4
  296. package/dist/toolbar/root/toolbar-root.d.ts +21 -5
  297. package/dist/toolbar/root/toolbar-root.js +52 -8
  298. package/dist/tooltip/root/tooltip-root.d.ts +20 -3
  299. package/dist/tooltip/root/tooltip-root.js +18 -1
  300. package/dist/tour/back.d.ts +10 -0
  301. package/dist/tour/back.js +8 -0
  302. package/dist/tour/root/tour-root.d.ts +45 -2
  303. package/dist/tour/root/tour-root.js +53 -8
  304. package/dist/tour/stop/tour-stop.d.ts +3 -0
  305. package/dist/tour/stop/tour-stop.js +3 -3
  306. package/dist/tree/item/tree-item.d.ts +7 -3
  307. package/dist/tree/item/tree-item.js +3 -0
  308. package/dist/tree/root/tree-root.d.ts +24 -3
  309. package/dist/tree/root/tree-root.js +32 -13
  310. package/dist/tree/selection.js +2 -15
  311. package/dist/trend/figure.d.ts +16 -0
  312. package/dist/trend/figure.js +8 -0
  313. package/dist/trend/root/trend-root.d.ts +83 -19
  314. package/dist/trend/root/trend-root.js +59 -8
  315. package/dist/video/media-events.d.ts +13 -18
  316. package/dist/video/media-events.js +1 -5
  317. package/dist/video/root/extra-controls.d.ts +12 -0
  318. package/dist/video/root/extra-controls.js +6 -2
  319. package/dist/video/root/video-root.d.ts +23 -6
  320. package/dist/video/root/video-root.js +19 -10
  321. package/dist/video-playlist/menu/video-playlist-menu.d.ts +2 -0
  322. package/dist/video-playlist/menu/video-playlist-menu.js +2 -1
  323. package/dist/video-playlist/root/video-playlist-root.d.ts +17 -1
  324. package/dist/video-playlist/root/video-playlist-root.js +3 -0
  325. package/dist/virtual-list/fill.d.ts +11 -8
  326. package/dist/virtual-list/fill.js +10 -17
  327. package/dist/virtual-list/keys.d.ts +16 -7
  328. package/dist/virtual-list/keys.js +17 -6
  329. package/dist/virtual-list/plan.d.ts +65 -0
  330. package/dist/virtual-list/plan.js +27 -0
  331. package/dist/virtual-list/root/virtual-list-root.d.ts +136 -13
  332. package/dist/virtual-list/root/virtual-list-root.js +218 -51
  333. package/lint.json +1 -1
  334. package/package.json +8 -8
  335. package/types/jsx.d.ts +7441 -1458
  336. package/types/svelte.d.ts +1 -0
  337. package/types/vue.d.ts +1501 -326
  338. package/dist/chat/relative-clock.d.ts +0 -39
  339. package/dist/chat/relative-clock.js +0 -31
  340. package/dist/data-table/root/order.d.ts +0 -141
  341. package/dist/data-table/root/order.js +0 -76
  342. package/dist/tag/selection.d.ts +0 -10
  343. package/dist/tag/selection.js +0 -12
@@ -4,19 +4,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { CopyController, capturePointer, colorName, customElement, drawIcon, fillTemplate, formatColor, HelixFormElement, HelixSampleEndEvent, HelixSampleStartEvent, hostAria, hueName, isRtl, MixinControllerValue, parseColor, splitValues, toCss, } from '@fusion.dev/helix-core';
7
+ import { CopyController, capturePointer, clamp, colorName, customElement, drawIcon, fillTemplate, formatColor, formatNumber, HelixFormElement, HelixSampleEndEvent, HelixSampleStartEvent, hostAria, hueName, isRtl, KeyboardNavigationController, localeOf, MixinControllerValue, MixinPickerFeedback, parseColor, rovingStop, splitValues, toCss, wordsConverter, } from '@fusion.dev/helix-core';
8
8
  import { eyedropper } from '@fusion.dev/helix-icons';
9
9
  import { nothing } from 'lit';
10
10
  import { property, state } from 'lit/decorators.js';
11
11
  import { live } from 'lit/directives/live.js';
12
12
  import { html } from 'lit/static-html.js';
13
13
  import { channelFields, writeChannel } from '../channels.js';
14
+ import { hueAt } from '../wheel.js';
14
15
  import '../../button/index.js';
15
16
  import '../../button-group/index.js';
16
17
  import '../../slider/index.js';
17
18
  const FORMATS = ['hex', 'rgb', 'hsl'];
18
19
  const START = { alpha: 100, brightness: 100, hue: 0, saturation: 100 };
19
- let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinControllerValue(HelixFormElement) {
20
+ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinPickerFeedback(MixinControllerValue(HelixFormElement)) {
20
21
  constructor() {
21
22
  super(...arguments);
22
23
  this.alpha = false;
@@ -31,7 +32,6 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
31
32
  this.formatLabel = 'Syntax: {format}. Change it.';
32
33
  this.greenLabel = 'Green';
33
34
  this.hueLabel = 'Hue';
34
- this.invalid = false;
35
35
  this.lightnessLabel = 'Lightness';
36
36
  this.noEyedropper = false;
37
37
  this.noFormat = false;
@@ -45,6 +45,7 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
45
45
  this.swatches = '';
46
46
  this.toolsLabel = 'Color tools';
47
47
  this.valueLabel = 'Color';
48
+ this.wheel = false;
48
49
  this.sampling = false;
49
50
  this.owned = false;
50
51
  this.announcesInput = true;
@@ -79,11 +80,39 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
79
80
  this.copier = new CopyController(this);
80
81
  this.handleSwatch = (preset) => {
81
82
  const parsed = parseColor(preset);
82
- if (parsed) {
83
+ if (!parsed) {
84
+ return;
85
+ }
86
+ const format = this.format ?? 'hex';
87
+ const fields = channelFields(preset, parsed, format, this.alpha);
88
+ const first = fields[0];
89
+ const exact = first && writeChannel(fields, format, this.alpha, first.channel, first.value);
90
+ if (exact) {
91
+ this.takeWritten(exact);
92
+ }
93
+ else {
83
94
  this.move(parsed);
84
- this.settle();
85
95
  }
96
+ this.settle();
86
97
  };
98
+ this.swatchKeys = new KeyboardNavigationController(this, {
99
+ items: () => [
100
+ ...(this.renderRoot?.querySelectorAll('[part="swatches"] [part="swatch"]') ??
101
+ []),
102
+ ].map((swatch, index) => ({
103
+ contains: (node) => swatch === node,
104
+ disabled: false,
105
+ focusItem: () => {
106
+ this.swatchAt = index;
107
+ swatch.focus();
108
+ },
109
+ select: () => { },
110
+ selected: false,
111
+ })),
112
+ origin: 'focus',
113
+ selects: () => false,
114
+ wrap: false,
115
+ });
87
116
  this.handleFormat = () => {
88
117
  if (this.readOnly) {
89
118
  return;
@@ -141,20 +170,45 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
141
170
  const down = Math.min(1, Math.max(0, (event.clientY - box.top) / box.height));
142
171
  this.move({ brightness: Math.round((1 - down) * 100), saturation: Math.round(across * 100) });
143
172
  };
173
+ this.handleWheelPointer = (event) => {
174
+ const wheel = event.currentTarget;
175
+ const grid = this.partNamed('grid');
176
+ if (this.isDisabled || (grid && event.composedPath().includes(grid))) {
177
+ return;
178
+ }
179
+ if (event.type === 'pointerup' || event.type === 'pointercancel') {
180
+ if (wheel.hasPointerCapture(event.pointerId)) {
181
+ this.settle();
182
+ }
183
+ return;
184
+ }
185
+ if (event.type === 'pointerdown') {
186
+ capturePointer(wheel, event.pointerId);
187
+ this.partNamed('wheel-hue')?.focus();
188
+ }
189
+ else if (!wheel.hasPointerCapture(event.pointerId)) {
190
+ return;
191
+ }
192
+ event.preventDefault();
193
+ const box = wheel.getBoundingClientRect();
194
+ if (box.width > 0 && box.height > 0) {
195
+ this.move({ hue: hueAt(event.clientX, event.clientY, box) });
196
+ }
197
+ };
144
198
  this.handleAreaKeydown = (event) => {
145
199
  if (this.isDisabled || this.readOnly) {
146
200
  return;
147
201
  }
148
202
  const color = this.color;
149
203
  const along = isRtl(this) ? -1 : 1;
150
- const clamp = (at) => Math.min(100, Math.max(0, at));
204
+ const held = (at) => clamp(at, 0, 100);
151
205
  const moves = {
152
- ArrowDown: { brightness: clamp(color.brightness - 1) },
153
- ArrowLeft: { saturation: clamp(color.saturation - along) },
154
- ArrowRight: { saturation: clamp(color.saturation + along) },
155
- ArrowUp: { brightness: clamp(color.brightness + 1) },
156
- PageDown: { brightness: clamp(color.brightness - 10) },
157
- PageUp: { brightness: clamp(color.brightness + 10) },
206
+ ArrowDown: { brightness: held(color.brightness - 1) },
207
+ ArrowLeft: { saturation: held(color.saturation - along) },
208
+ ArrowRight: { saturation: held(color.saturation + along) },
209
+ ArrowUp: { brightness: held(color.brightness + 1) },
210
+ PageDown: { brightness: held(color.brightness - 10) },
211
+ PageUp: { brightness: held(color.brightness + 10) },
158
212
  };
159
213
  const next = moves[event.key];
160
214
  if (!next) {
@@ -297,9 +351,10 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
297
351
  part="channel"
298
352
  exportparts="control: channel-control, feedback: channel-feedback, field: channel-field,
299
353
  hint: channel-hint, label: channel-label, marker: channel-marker,
300
- marker-label: channel-marker-label, markers: channel-markers, output: channel-output"
354
+ marker-label: channel-marker-label, markers: channel-markers, output: channel-output,
355
+ tooltip: channel-tooltip, tooltips: channel-tooltips"
301
356
  data-channel=${channel}
302
- aria-invalid=${this.invalid ? 'true' : nothing}
357
+ aria-invalid=${this.marked ? 'true' : nothing}
303
358
  label=${label}
304
359
  max=${max}
305
360
  min="0"
@@ -337,7 +392,6 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
337
392
  }
338
393
  willUpdate(changed) {
339
394
  super.willUpdate(changed);
340
- this.internals.ariaInvalid = this.invalid ? 'true' : null;
341
395
  const outside = [...(this.internals.labels ?? [])];
342
396
  hostAria(this.internals, { labelledBy: outside, role: outside.length > 0 ? 'group' : '' });
343
397
  if (!this.hydrating) {
@@ -349,7 +403,7 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
349
403
  ${this.sampling && !this.noEyedropper
350
404
  ? html `<${this.tag('button')}
351
405
  part="eyedropper"
352
- exportparts="button: eyedropper-button, live: eyedropper-live, text: eyedropper-text"
406
+ exportparts="button: eyedropper-button, live: eyedropper-live, spinner: eyedropper-spinner, text: eyedropper-text"
353
407
  label=${this.eyedropperLabel}
354
408
  ?disabled=${this.isDisabled}
355
409
  @click=${this.handleEyeDropper}
@@ -361,7 +415,7 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
361
415
  ? nothing
362
416
  : html `<${this.tag('button')}
363
417
  part="format"
364
- exportparts="button: format-button, live: format-live, text: format-text"
418
+ exportparts="button: format-button, live: format-live, spinner: format-spinner, text: format-text"
365
419
  label=${fillTemplate(this.formatLabel, { format: this.format ?? 'hex' })}
366
420
  ?disabled=${this.isDisabled}
367
421
  @click=${this.handleFormat}
@@ -370,16 +424,49 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
370
424
  </${this.tag('button')}>`}
371
425
  </${this.tag('button-group')}>`;
372
426
  }
427
+ renderSwatches(painted) {
428
+ const presets = this.presets;
429
+ const chosen = presets.map((preset) => {
430
+ const parsed = parseColor(preset);
431
+ return parsed !== null && toCss(parsed) === painted;
432
+ });
433
+ const indexes = presets.map((_, index) => index);
434
+ const stop = rovingStop(indexes, this.swatchAt, { selected: (index) => chosen[index] === true });
435
+ return html `<div
436
+ part="swatches"
437
+ role="listbox"
438
+ aria-label=${this.presetsLabel}
439
+ aria-orientation="horizontal"
440
+ >
441
+ ${presets.map((preset, index) => {
442
+ const parsed = parseColor(preset);
443
+ return html `<button
444
+ part="swatch"
445
+ type="button"
446
+ role="option"
447
+ tabindex=${index === stop ? '0' : '-1'}
448
+ aria-label=${parsed ? colorName(parsed, this.colorWords, localeOf(this)) : preset}
449
+ aria-selected=${chosen[index] ? 'true' : 'false'}
450
+ style="--color-picker-swatch: ${preset}"
451
+ ?disabled=${this.isDisabled}
452
+ @click=${() => {
453
+ this.swatchAt = index;
454
+ this.handleSwatch(preset);
455
+ }}
456
+ ></button>`;
457
+ })}
458
+ </div>`;
459
+ }
373
460
  render() {
374
461
  const color = this.color;
375
462
  const painted = toCss(color);
376
- const named = colorName(color, this.colorWords, this.lang);
463
+ const named = colorName(color, this.colorWords, localeOf(this));
377
464
  const both = `${this.saturationLabel} ${color.saturation}%, ${this.brightnessLabel} ${color.brightness}%, ${named}`;
378
465
  const reversed = `${this.brightnessLabel} ${color.brightness}%, ${this.saturationLabel} ${color.saturation}%, ${named}`;
379
- const hue = hueName({ alpha: 100, brightness: 100, hue: color.hue, saturation: 100 }, this.colorWords, this.lang);
466
+ const hue = hueName({ alpha: 100, brightness: 100, hue: color.hue, saturation: 100 }, this.colorWords, localeOf(this));
380
467
  const owner = this.getAttribute('aria-label')?.trim();
381
468
  const axisName = (channel) => (owner ? `${owner}, ${channel}` : channel);
382
- return html `<div
469
+ const area = html `<div
383
470
  part="grid"
384
471
  style="--color-picker-hue: ${color.hue}; --color-picker-saturation: ${color.saturation}%; --color-picker-brightness: ${color.brightness}%"
385
472
  @pointerdown=${this.handleGridPointer}
@@ -394,8 +481,9 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
394
481
  min="0"
395
482
  max="100"
396
483
  aria-label=${axisName(this.saturationLabel)}
484
+ aria-describedby=${this.feedback === '' ? nothing : 'feedback'}
397
485
  aria-valuetext=${both}
398
- aria-invalid=${this.invalid ? 'true' : nothing}
486
+ aria-invalid=${this.marked ? 'true' : nothing}
399
487
  .value=${String(color.saturation)}
400
488
  ?disabled=${this.isDisabled}
401
489
  @input=${(event) => this.takeArea('saturation', event)}
@@ -409,14 +497,43 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
409
497
  max="100"
410
498
  tabindex="-1"
411
499
  aria-label=${axisName(this.brightnessLabel)}
500
+ aria-describedby=${this.feedback === '' ? nothing : 'feedback'}
412
501
  aria-valuetext=${reversed}
413
- aria-invalid=${this.invalid ? 'true' : nothing}
502
+ aria-invalid=${this.marked ? 'true' : nothing}
414
503
  .value=${String(color.brightness)}
415
504
  ?disabled=${this.isDisabled}
416
505
  @input=${(event) => this.takeArea('brightness', event)}
417
506
  @change=${() => this.settle()}
418
507
  />
419
- </div>
508
+ </div>`;
509
+ return html `${this.wheel
510
+ ? html `<div
511
+ part="wheel"
512
+ style="--color-picker-hue: ${color.hue}"
513
+ @pointerdown=${this.handleWheelPointer}
514
+ @pointermove=${this.handleWheelPointer}
515
+ @pointerup=${this.handleWheelPointer}
516
+ @pointercancel=${this.handleWheelPointer}
517
+ >
518
+ ${''}
519
+ <input
520
+ part="wheel-hue"
521
+ type="range"
522
+ min="0"
523
+ max="360"
524
+ dir="ltr"
525
+ aria-label=${axisName(this.hueLabel)}
526
+ aria-describedby=${this.feedback === '' ? nothing : 'feedback'}
527
+ aria-valuetext=${`${color.hue}, ${hue}`}
528
+ aria-invalid=${this.marked ? 'true' : nothing}
529
+ .value=${String(color.hue)}
530
+ ?disabled=${this.isDisabled}
531
+ @input=${(event) => this.takeArea('hue', event)}
532
+ @change=${() => this.settle()}
533
+ />
534
+ ${area}
535
+ </div>`
536
+ : area}
420
537
 
421
538
  <div part="controls" style="--color-picker-hue: ${color.hue}; --color-picker-swatch: ${painted}">
422
539
  <button
@@ -430,8 +547,10 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
430
547
  @click=${() => this.copier.copy(this.value)}
431
548
  ></button>
432
549
  <div part="channels">
433
- ${this.renderChannel('hue', this.hueLabel, 360, color.hue, `{value}, ${hue}`)}
434
- ${this.alpha ? this.renderChannel('alpha', this.opacityLabel, 100, color.alpha) : nothing}
550
+ ${this.wheel ? nothing : this.renderChannel('hue', this.hueLabel, 360, color.hue, `{value}, ${hue}`)}
551
+ ${this.alpha
552
+ ? this.renderChannel('alpha', this.opacityLabel, 100, color.alpha, formatNumber(color.alpha / 100, localeOf(this), { style: 'percent' }))
553
+ : nothing}
435
554
  </div>
436
555
  </div>
437
556
  ${this.channelFields ? this.renderFields(color) : nothing}
@@ -447,7 +566,8 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
447
566
  part="value"
448
567
  type="text"
449
568
  aria-label=${this.valueLabel}
450
- aria-invalid=${this.invalid ? 'true' : nothing}
569
+ aria-describedby=${this.feedback === '' ? nothing : 'feedback'}
570
+ aria-invalid=${this.marked ? 'true' : nothing}
451
571
  autocomplete=${this.autocomplete || nothing}
452
572
  spellcheck="false"
453
573
  .value=${this.value}
@@ -462,22 +582,8 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
462
582
  ${this.tools ? html `${this.renderTools()}` : nothing}
463
583
  </div>
464
584
 
465
- ${this.presets.length === 0
466
- ? nothing
467
- : html `<div part="swatches" role="group" aria-label=${this.presetsLabel}>
468
- ${this.presets.map((preset) => {
469
- const parsed = parseColor(preset);
470
- return html `<button
471
- part="swatch"
472
- type="button"
473
- aria-label=${parsed ? colorName(parsed, this.colorWords, this.lang) : preset}
474
- aria-pressed=${parsed !== null && toCss(parsed) === painted ? 'true' : 'false'}
475
- style="--color-picker-swatch: ${preset}"
476
- ?disabled=${this.isDisabled}
477
- @click=${() => this.handleSwatch(preset)}
478
- ></button>`;
479
- })}
480
- </div>`}`;
585
+ ${this.presets.length === 0 ? nothing : this.renderSwatches(painted)}
586
+ ${this.renderPickerFeedback()}`;
481
587
  }
482
588
  };
483
589
  __decorate([
@@ -499,7 +605,7 @@ __decorate([
499
605
  property({ attribute: 'channel-fields', type: Boolean })
500
606
  ], HelixHeadlessColorPicker.prototype, "channelFields", void 0);
501
607
  __decorate([
502
- property({ attribute: 'color-words', type: Object })
608
+ property({ attribute: 'color-words', converter: wordsConverter })
503
609
  ], HelixHeadlessColorPicker.prototype, "colorWords", void 0);
504
610
  __decorate([
505
611
  property({ attribute: 'copied-label' })
@@ -522,9 +628,6 @@ __decorate([
522
628
  __decorate([
523
629
  property({ attribute: 'hue-label' })
524
630
  ], HelixHeadlessColorPicker.prototype, "hueLabel", void 0);
525
- __decorate([
526
- property({ reflect: true, type: Boolean })
527
- ], HelixHeadlessColorPicker.prototype, "invalid", void 0);
528
631
  __decorate([
529
632
  property({ attribute: 'lightness-label' })
530
633
  ], HelixHeadlessColorPicker.prototype, "lightnessLabel", void 0);
@@ -567,12 +670,18 @@ __decorate([
567
670
  __decorate([
568
671
  property({ attribute: 'value-missing-message' })
569
672
  ], HelixHeadlessColorPicker.prototype, "valueMissingMessage", void 0);
673
+ __decorate([
674
+ property({ reflect: true, type: Boolean })
675
+ ], HelixHeadlessColorPicker.prototype, "wheel", void 0);
570
676
  __decorate([
571
677
  state()
572
678
  ], HelixHeadlessColorPicker.prototype, "moved", void 0);
573
679
  __decorate([
574
680
  state()
575
681
  ], HelixHeadlessColorPicker.prototype, "sampling", void 0);
682
+ __decorate([
683
+ state()
684
+ ], HelixHeadlessColorPicker.prototype, "swatchAt", void 0);
576
685
  HelixHeadlessColorPicker = __decorate([
577
686
  customElement('helix-headless-color-picker')
578
687
  ], HelixHeadlessColorPicker);
@@ -0,0 +1,17 @@
1
+ /** A box on the screen, as `getBoundingClientRect` gives one. */
2
+ export interface WheelBox {
3
+ height: number;
4
+ left: number;
5
+ top: number;
6
+ width: number;
7
+ }
8
+ /**
9
+ * The hue at a point on a hue wheel: degrees clockwise from the top, 0 to
10
+ * 359, the way React Aria's ColorWheel and every paint program lay hue out.
11
+ *
12
+ * Measured from the box's center, so a press anywhere in the wheel answers,
13
+ * not only one on the ring: the ring is the target a reader aims at, and a
14
+ * press a little inside it still means the hue in that direction. Clockwise
15
+ * whatever the writing direction, since a circle has no line of text.
16
+ */
17
+ export declare const hueAt: (x: number, y: number, box: WheelBox) => number;
@@ -0,0 +1,6 @@
1
+ export const hueAt = (x, y, box) => {
2
+ const across = x - (box.left + box.width / 2);
3
+ const down = y - (box.top + box.height / 2);
4
+ const degrees = Math.round((Math.atan2(across, -down) * 180) / Math.PI);
5
+ return (degrees + 360) % 360;
6
+ };
@@ -43,11 +43,13 @@ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusi
43
43
  * @slot - The options.
44
44
  * @slot empty - What the list shows when typing hides every option, for content richer than `empty-text`.
45
45
  * @slot end - After the text, for a unit or a clear button.
46
+ * @slot error - What the list shows while `load-error` is set, for content richer than its text.
46
47
  * @slot feedback - The message that says what is wrong, for content richer than a string. It shows while there is a message.
47
48
  * @slot hint - The hint, for content richer than plain text.
48
49
  * @slot indicator - Replaces the caret that shows the field opens a list.
49
50
  * @slot label - The label, for content richer than plain text.
50
51
  * @slot loading - What the list shows while the options load, for content richer than `loading-text`.
52
+ * @slot no-results - What the list shows when typing hides every option, for content richer than `no-results-text`.
51
53
  * @slot start - Before the text, for an icon.
52
54
  *
53
55
  * @event {Event} change - Fired after the value changes.
@@ -56,6 +58,7 @@ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusi
56
58
  * @event {HelixBeforeOpenEvent} helix-before-open - Fired before the panel opens. Cancelable: cancel it to keep the panel closed.
57
59
  * @event {HelixCreateEvent} helix-create - Fired when the user adds a value that is not in the list. Cancelable.
58
60
  * @event {HelixFilterEvent} helix-filter - Fired as the user types, with the text the list is filtered by. Cancelable: cancel it to leave the list unfiltered and do the filtering yourself.
61
+ * @event {HelixLoadMoreEvent} helix-load-more - Fired once the list is scrolled within a screen of its end, once for each number of options, and not while `loading` is set. Add the next page and set `loading` while you fetch it.
59
62
  * @event {Event} input - Fired after the value changes.
60
63
  * @event {ToggleEvent} toggle - Fired when the panel opens or closes, with `newState` and `oldState`.
61
64
  *
@@ -69,6 +72,7 @@ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusi
69
72
  * @csspart label - The label above the field.
70
73
  * @csspart listbox - The list inside the panel.
71
74
  * @csspart listbox-empty - Shown when a filter has hidden everything.
75
+ * @csspart listbox-error - Shown while `load-error` is set.
72
76
  * @csspart listbox-feedback - The inner list's error message.
73
77
  * @csspart listbox-filter-icon - The icon beside the list's filter field.
74
78
  * @csspart listbox-filter-mark - The glyph beside the filter field, where none is slotted.
@@ -90,7 +94,9 @@ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusi
90
94
  * @csspart tag-start - The category before the label.
91
95
  * @csspart tags - The row of chosen options, when `multiple` is set.
92
96
  *
97
+ * @cssstate error - While `load-error` is set.
93
98
  * @cssstate invalid - The control has an error to show, from the browser's validation or from your `feedback`.
99
+ * @cssstate no-results - What was typed hid every option of a list that has some.
94
100
  * @cssstate open - While the list is open.
95
101
  */
96
102
  export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
@@ -133,10 +139,26 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
133
139
  * Text shown when the filter hides every option.
134
140
  */
135
141
  emptyText: string;
142
+ /**
143
+ * How long typing rests before the list is narrowed and `helix-filter` is
144
+ * sent, in milliseconds.
145
+ *
146
+ * For options filtered on a server, where `helix-filter` starts a request: a
147
+ * delay sends one request for a word instead of one per letter. The arrow
148
+ * keys, Enter and Escape narrow at once on what was typed. `0` narrows on
149
+ * every keystroke. See Listbox's `filter-delay`.
150
+ */
151
+ filterDelay: number;
136
152
  /**
137
153
  * The list's name, read by screen readers. The list has no visible name.
138
154
  */
139
155
  listLabel: string;
156
+ /**
157
+ * What the list says when its options could not be loaded, such as after a
158
+ * request to a server fails. Empty is no error. Passed to the list, which
159
+ * shows it under any options there are and tells screen readers.
160
+ */
161
+ loadError: string;
140
162
  /**
141
163
  * Whether the options are still loading.
142
164
  *
@@ -168,6 +190,18 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
168
190
  * element is responsible for.
169
191
  */
170
192
  multiple: boolean;
193
+ /**
194
+ * The text shown when typing hides every one of the options, where there are
195
+ * some. Absent, `empty-text` shows. See Listbox's `no-results-text`.
196
+ */
197
+ noResultsText?: string;
198
+ /**
199
+ * What opens the list: `input`, typing or pressing Down; `focus`, also
200
+ * arriving in the field, by Tab or a press; or `manual`, only Down, Alt+Down
201
+ * or a press on the caret, so typing narrows a list the reader has asked
202
+ * for. React Aria's `menuTrigger`.
203
+ */
204
+ openOn: 'focus' | 'input' | 'manual';
171
205
  /**
172
206
  * Text shown while nothing has been chosen.
173
207
  */
@@ -302,6 +336,17 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
302
336
  * is a thing a consumer may do.
303
337
  */
304
338
  private get showing();
339
+ /**
340
+ * The list's `error` and `no-results` states on the host too, so a page
341
+ * styles the whole control from them, as WA's combobox and its status slots
342
+ * allow. The list keeps its own, which only a stylesheet inside this shadow
343
+ * root could reach.
344
+ *
345
+ * Read once the list has drawn the filter, since `hidden` is what the
346
+ * filter writes onto an option: a filter that hid every option of a list
347
+ * that has some, with nothing loading.
348
+ */
349
+ private markStatus;
305
350
  /**
306
351
  * What the create row would add, or nothing where there is nothing to add.
307
352
  *
@@ -358,6 +403,17 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
358
403
  */
359
404
  private moveAroundCreate;
360
405
  private readonly handleInput;
406
+ /**
407
+ * Arriving in the field opens the list where `open-on` is `focus`, unless
408
+ * this element is handing focus back to it as the list closes.
409
+ */
410
+ private readonly handleFocus;
411
+ /** Whether `close` is putting focus back in the field, which opens nothing. */
412
+ private refocusing;
413
+ /** The narrowing waiting out `filterDelay`, if any. */
414
+ private readonly narrowing;
415
+ /** Narrows the list to what was typed, and finds the completion in what is left. */
416
+ private narrow;
361
417
  /**
362
418
  * The words of the first option the typing begins, or nothing.
363
419
  *