@fusion.dev/helix-headless 0.0.0-dev
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.
- package/LICENSE +21 -0
- package/custom-elements.json +75202 -0
- package/dist/accordion/index.d.ts +2 -0
- package/dist/accordion/index.js +2 -0
- package/dist/accordion/item/accordion-item.d.ts +141 -0
- package/dist/accordion/item/accordion-item.js +214 -0
- package/dist/accordion/root/accordion-root.d.ts +57 -0
- package/dist/accordion/root/accordion-root.js +96 -0
- package/dist/announcement/index.d.ts +1 -0
- package/dist/announcement/index.js +1 -0
- package/dist/announcement/root/announcement-root.d.ts +106 -0
- package/dist/announcement/root/announcement-root.js +144 -0
- package/dist/app-header/index.d.ts +1 -0
- package/dist/app-header/index.js +1 -0
- package/dist/app-header/root/app-header-root.d.ts +113 -0
- package/dist/app-header/root/app-header-root.js +147 -0
- package/dist/avatar/group/avatar-group.d.ts +116 -0
- package/dist/avatar/group/avatar-group.js +136 -0
- package/dist/avatar/index.d.ts +2 -0
- package/dist/avatar/index.js +2 -0
- package/dist/avatar/root/avatar-root.d.ts +71 -0
- package/dist/avatar/root/avatar-root.js +147 -0
- package/dist/badge/index.d.ts +1 -0
- package/dist/badge/index.js +1 -0
- package/dist/badge/root/badge-root.d.ts +61 -0
- package/dist/badge/root/badge-root.js +121 -0
- package/dist/bar-chart/index.d.ts +1 -0
- package/dist/bar-chart/index.js +1 -0
- package/dist/bar-chart/root/bar-chart-root.d.ts +266 -0
- package/dist/bar-chart/root/bar-chart-root.js +515 -0
- package/dist/blockquote/index.d.ts +1 -0
- package/dist/blockquote/index.js +1 -0
- package/dist/blockquote/root/blockquote-root.d.ts +51 -0
- package/dist/blockquote/root/blockquote-root.js +84 -0
- package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +104 -0
- package/dist/breadcrumbs/breadcrumb/breadcrumb.js +137 -0
- package/dist/breadcrumbs/index.d.ts +2 -0
- package/dist/breadcrumbs/index.js +2 -0
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +77 -0
- package/dist/breadcrumbs/root/breadcrumbs-root.js +94 -0
- package/dist/button/index.d.ts +1 -0
- package/dist/button/index.js +1 -0
- package/dist/button/root/button-root.d.ts +251 -0
- package/dist/button/root/button-root.js +401 -0
- package/dist/button-group/index.d.ts +1 -0
- package/dist/button-group/index.js +1 -0
- package/dist/button-group/root/button-group-root.d.ts +62 -0
- package/dist/button-group/root/button-group-root.js +62 -0
- package/dist/callout/index.d.ts +1 -0
- package/dist/callout/index.js +1 -0
- package/dist/callout/root/callout-root.d.ts +72 -0
- package/dist/callout/root/callout-root.js +90 -0
- package/dist/card/index.d.ts +1 -0
- package/dist/card/index.js +1 -0
- package/dist/card/root/card-root.d.ts +54 -0
- package/dist/card/root/card-root.js +71 -0
- package/dist/carousel/index.d.ts +1 -0
- package/dist/carousel/index.js +1 -0
- package/dist/carousel/root/carousel-root.d.ts +399 -0
- package/dist/carousel/root/carousel-root.js +723 -0
- package/dist/chat/composer/chat-composer.d.ts +160 -0
- package/dist/chat/composer/chat-composer.js +273 -0
- package/dist/chat/index.d.ts +3 -0
- package/dist/chat/index.js +3 -0
- package/dist/chat/message/chat-message.d.ts +170 -0
- package/dist/chat/message/chat-message.js +271 -0
- package/dist/chat/root/chat-root.d.ts +216 -0
- package/dist/chat/root/chat-root.js +389 -0
- package/dist/checkbox/index.d.ts +1 -0
- package/dist/checkbox/index.js +1 -0
- package/dist/checkbox/root/checkbox-root.d.ts +108 -0
- package/dist/checkbox/root/checkbox-root.js +207 -0
- package/dist/checkbox-group/index.d.ts +1 -0
- package/dist/checkbox-group/index.js +1 -0
- package/dist/checkbox-group/root/checkbox-group-root.d.ts +155 -0
- package/dist/checkbox-group/root/checkbox-group-root.js +293 -0
- package/dist/code/index.d.ts +1 -0
- package/dist/code/index.js +1 -0
- package/dist/code/root/code-root.d.ts +36 -0
- package/dist/code/root/code-root.js +43 -0
- package/dist/code-block/index.d.ts +1 -0
- package/dist/code-block/index.js +1 -0
- package/dist/code-block/root/code-block-root.d.ts +112 -0
- package/dist/code-block/root/code-block-root.js +155 -0
- package/dist/color-input/index.d.ts +1 -0
- package/dist/color-input/index.js +1 -0
- package/dist/color-input/root/color-input-root.d.ts +227 -0
- package/dist/color-input/root/color-input-root.js +456 -0
- package/dist/color-picker/color.d.ts +74 -0
- package/dist/color-picker/color.js +238 -0
- package/dist/color-picker/index.d.ts +2 -0
- package/dist/color-picker/index.js +2 -0
- package/dist/color-picker/root/color-picker-root.d.ts +303 -0
- package/dist/color-picker/root/color-picker-root.js +576 -0
- package/dist/combobox/index.d.ts +1 -0
- package/dist/combobox/index.js +1 -0
- package/dist/combobox/root/combobox-root.d.ts +396 -0
- package/dist/combobox/root/combobox-root.js +808 -0
- package/dist/command/index.d.ts +1 -0
- package/dist/command/index.js +1 -0
- package/dist/command/root/command-root.d.ts +166 -0
- package/dist/command/root/command-root.js +353 -0
- package/dist/copy-button/index.d.ts +1 -0
- package/dist/copy-button/index.js +1 -0
- package/dist/copy-button/root/copy-button-root.d.ts +154 -0
- package/dist/copy-button/root/copy-button-root.js +225 -0
- package/dist/data-table/index.d.ts +2 -0
- package/dist/data-table/index.js +2 -0
- package/dist/data-table/root/data-table-root.d.ts +392 -0
- package/dist/data-table/root/data-table-root.js +729 -0
- package/dist/data-table/root/order.d.ts +116 -0
- package/dist/data-table/root/order.js +175 -0
- package/dist/date-input/index.d.ts +1 -0
- package/dist/date-input/index.js +1 -0
- package/dist/date-input/root/date-input-root.d.ts +361 -0
- package/dist/date-input/root/date-input-root.js +791 -0
- package/dist/date-picker/index.d.ts +1 -0
- package/dist/date-picker/index.js +1 -0
- package/dist/date-picker/root/date-picker-root.d.ts +361 -0
- package/dist/date-picker/root/date-picker-root.js +837 -0
- package/dist/dialog/index.d.ts +1 -0
- package/dist/dialog/index.js +1 -0
- package/dist/dialog/root/dialog-root.d.ts +185 -0
- package/dist/dialog/root/dialog-root.js +319 -0
- package/dist/divider/index.d.ts +1 -0
- package/dist/divider/index.js +1 -0
- package/dist/divider/root/divider-root.d.ts +68 -0
- package/dist/divider/root/divider-root.js +116 -0
- package/dist/donut-chart/index.d.ts +1 -0
- package/dist/donut-chart/index.js +1 -0
- package/dist/donut-chart/root/donut-chart-root.d.ts +209 -0
- package/dist/donut-chart/root/donut-chart-root.js +395 -0
- package/dist/drawer/index.d.ts +1 -0
- package/dist/drawer/index.js +1 -0
- package/dist/drawer/root/drawer-root.d.ts +144 -0
- package/dist/drawer/root/drawer-root.js +222 -0
- package/dist/drilldown/index.d.ts +2 -0
- package/dist/drilldown/index.js +2 -0
- package/dist/drilldown/item/drilldown-item.d.ts +87 -0
- package/dist/drilldown/item/drilldown-item.js +152 -0
- package/dist/drilldown/root/drilldown-root.d.ts +115 -0
- package/dist/drilldown/root/drilldown-root.js +263 -0
- package/dist/element-events.generated.d.ts +1 -0
- package/dist/element-events.generated.js +125 -0
- package/dist/empty/index.d.ts +1 -0
- package/dist/empty/index.js +1 -0
- package/dist/empty/root/empty-root.d.ts +47 -0
- package/dist/empty/root/empty-root.js +68 -0
- package/dist/file-input/index.d.ts +1 -0
- package/dist/file-input/index.js +1 -0
- package/dist/file-input/root/file-input-root.d.ts +196 -0
- package/dist/file-input/root/file-input-root.js +488 -0
- package/dist/format-date/index.d.ts +1 -0
- package/dist/format-date/index.js +1 -0
- package/dist/format-date/root/format-date-root.d.ts +151 -0
- package/dist/format-date/root/format-date-root.js +266 -0
- package/dist/heatmap/index.d.ts +2 -0
- package/dist/heatmap/index.js +2 -0
- package/dist/heatmap/root/buckets.d.ts +62 -0
- package/dist/heatmap/root/buckets.js +85 -0
- package/dist/heatmap/root/heatmap-root.d.ts +330 -0
- package/dist/heatmap/root/heatmap-root.js +526 -0
- package/dist/icon/index.d.ts +1 -0
- package/dist/icon/index.js +1 -0
- package/dist/icon/root/icon-root.d.ts +53 -0
- package/dist/icon/root/icon-root.js +93 -0
- package/dist/icon-button/index.d.ts +1 -0
- package/dist/icon-button/index.js +1 -0
- package/dist/icon-button/root/icon-button-root.d.ts +40 -0
- package/dist/icon-button/root/icon-button-root.js +46 -0
- package/dist/image/index.d.ts +1 -0
- package/dist/image/index.js +1 -0
- package/dist/image/root/image-root.d.ts +213 -0
- package/dist/image/root/image-root.js +335 -0
- package/dist/index.d.ts +99 -0
- package/dist/index.js +99 -0
- package/dist/input/index.d.ts +1 -0
- package/dist/input/index.js +1 -0
- package/dist/input/root/input-root.d.ts +281 -0
- package/dist/input/root/input-root.js +472 -0
- package/dist/kbd/index.d.ts +1 -0
- package/dist/kbd/index.js +1 -0
- package/dist/kbd/root/kbd-root.d.ts +98 -0
- package/dist/kbd/root/kbd-root.js +230 -0
- package/dist/legend/index.d.ts +1 -0
- package/dist/legend/index.js +1 -0
- package/dist/legend/root/legend-root.d.ts +83 -0
- package/dist/legend/root/legend-root.js +125 -0
- package/dist/line-chart/index.d.ts +1 -0
- package/dist/line-chart/index.js +1 -0
- package/dist/line-chart/root/line-chart-root.d.ts +238 -0
- package/dist/line-chart/root/line-chart-root.js +365 -0
- package/dist/list/index.d.ts +2 -0
- package/dist/list/index.js +2 -0
- package/dist/list/item/list-item.d.ts +95 -0
- package/dist/list/item/list-item.js +148 -0
- package/dist/list/root/list-root.d.ts +72 -0
- package/dist/list/root/list-root.js +61 -0
- package/dist/listbox/index.d.ts +1 -0
- package/dist/listbox/index.js +1 -0
- package/dist/listbox/root/listbox-root.d.ts +357 -0
- package/dist/listbox/root/listbox-root.js +890 -0
- package/dist/loader/index.d.ts +1 -0
- package/dist/loader/index.js +1 -0
- package/dist/loader/root/loader-root.d.ts +52 -0
- package/dist/loader/root/loader-root.js +74 -0
- package/dist/megamenu/index.d.ts +1 -0
- package/dist/megamenu/index.js +1 -0
- package/dist/megamenu/root/megamenu-root.d.ts +254 -0
- package/dist/megamenu/root/megamenu-root.js +526 -0
- package/dist/menu/index.d.ts +2 -0
- package/dist/menu/index.js +2 -0
- package/dist/menu/item/menu-item.d.ts +231 -0
- package/dist/menu/item/menu-item.js +405 -0
- package/dist/menu/root/menu-root.d.ts +158 -0
- package/dist/menu/root/menu-root.js +422 -0
- package/dist/meter/index.d.ts +1 -0
- package/dist/meter/index.js +1 -0
- package/dist/meter/root/meter-root.d.ts +234 -0
- package/dist/meter/root/meter-root.js +316 -0
- package/dist/navigation/index.d.ts +1 -0
- package/dist/navigation/index.js +1 -0
- package/dist/navigation/root/navigation-root.d.ts +55 -0
- package/dist/navigation/root/navigation-root.js +130 -0
- package/dist/notifications/index.d.ts +2 -0
- package/dist/notifications/index.js +2 -0
- package/dist/notifications/notification/notification.d.ts +181 -0
- package/dist/notifications/notification/notification.js +305 -0
- package/dist/notifications/root/notifications-root.d.ts +168 -0
- package/dist/notifications/root/notifications-root.js +291 -0
- package/dist/number-input/index.d.ts +1 -0
- package/dist/number-input/index.js +1 -0
- package/dist/number-input/root/number-input-root.d.ts +282 -0
- package/dist/number-input/root/number-input-root.js +592 -0
- package/dist/option/group/option-group.d.ts +38 -0
- package/dist/option/group/option-group.js +58 -0
- package/dist/option/index.d.ts +2 -0
- package/dist/option/index.js +2 -0
- package/dist/option/root/option-root.d.ts +194 -0
- package/dist/option/root/option-root.js +247 -0
- package/dist/outline/index.d.ts +1 -0
- package/dist/outline/index.js +1 -0
- package/dist/outline/root/outline-root.d.ts +237 -0
- package/dist/outline/root/outline-root.js +519 -0
- package/dist/pagination/index.d.ts +3 -0
- package/dist/pagination/index.js +3 -0
- package/dist/pagination/root/pagination-root.d.ts +390 -0
- package/dist/pagination/root/pagination-root.js +695 -0
- package/dist/pagination/size/pagination-size.d.ts +127 -0
- package/dist/pagination/size/pagination-size.js +232 -0
- package/dist/pagination/summary/pagination-summary.d.ts +90 -0
- package/dist/pagination/summary/pagination-summary.js +145 -0
- package/dist/pin-input/index.d.ts +1 -0
- package/dist/pin-input/index.js +1 -0
- package/dist/pin-input/root/pin-input-root.d.ts +292 -0
- package/dist/pin-input/root/pin-input-root.js +553 -0
- package/dist/popover/index.d.ts +1 -0
- package/dist/popover/index.js +1 -0
- package/dist/popover/root/popover-root.d.ts +108 -0
- package/dist/popover/root/popover-root.js +231 -0
- package/dist/progress/index.d.ts +1 -0
- package/dist/progress/index.js +1 -0
- package/dist/progress/root/progress-root.d.ts +125 -0
- package/dist/progress/root/progress-root.js +212 -0
- package/dist/qr-code/index.d.ts +1 -0
- package/dist/qr-code/index.js +1 -0
- package/dist/qr-code/root/qr-code-root.d.ts +93 -0
- package/dist/qr-code/root/qr-code-root.js +233 -0
- package/dist/quote/index.d.ts +1 -0
- package/dist/quote/index.js +1 -0
- package/dist/quote/root/quote-root.d.ts +36 -0
- package/dist/quote/root/quote-root.js +50 -0
- package/dist/radio/group/radio-group.d.ts +84 -0
- package/dist/radio/group/radio-group.js +170 -0
- package/dist/radio/index.d.ts +2 -0
- package/dist/radio/index.js +2 -0
- package/dist/radio/root/radio-root.d.ts +102 -0
- package/dist/radio/root/radio-root.js +151 -0
- package/dist/rating/index.d.ts +1 -0
- package/dist/rating/index.js +1 -0
- package/dist/rating/root/rating-root.d.ts +242 -0
- package/dist/rating/root/rating-root.js +484 -0
- package/dist/scroll-area/index.d.ts +1 -0
- package/dist/scroll-area/index.js +1 -0
- package/dist/scroll-area/root/scroll-area-root.d.ts +96 -0
- package/dist/scroll-area/root/scroll-area-root.js +215 -0
- package/dist/select/index.d.ts +1 -0
- package/dist/select/index.js +1 -0
- package/dist/select/root/select-root.d.ts +170 -0
- package/dist/select/root/select-root.js +419 -0
- package/dist/skeleton/index.d.ts +1 -0
- package/dist/skeleton/index.js +1 -0
- package/dist/skeleton/root/skeleton-root.d.ts +31 -0
- package/dist/skeleton/root/skeleton-root.js +42 -0
- package/dist/slider/index.d.ts +1 -0
- package/dist/slider/index.js +1 -0
- package/dist/slider/root/slider-root.d.ts +235 -0
- package/dist/slider/root/slider-root.js +488 -0
- package/dist/sparkline/index.d.ts +1 -0
- package/dist/sparkline/index.js +1 -0
- package/dist/sparkline/root/sparkline-root.d.ts +147 -0
- package/dist/sparkline/root/sparkline-root.js +278 -0
- package/dist/speed-dial/index.d.ts +2 -0
- package/dist/speed-dial/index.js +2 -0
- package/dist/speed-dial/item/speed-dial-item.d.ts +71 -0
- package/dist/speed-dial/item/speed-dial-item.js +113 -0
- package/dist/speed-dial/root/speed-dial-root.d.ts +122 -0
- package/dist/speed-dial/root/speed-dial-root.js +251 -0
- package/dist/splitter/index.d.ts +1 -0
- package/dist/splitter/index.js +1 -0
- package/dist/splitter/root/splitter-root.d.ts +491 -0
- package/dist/splitter/root/splitter-root.js +1030 -0
- package/dist/stat/group/stat-group.d.ts +30 -0
- package/dist/stat/group/stat-group.js +47 -0
- package/dist/stat/index.d.ts +2 -0
- package/dist/stat/index.js +2 -0
- package/dist/stat/root/stat-root.d.ts +62 -0
- package/dist/stat/root/stat-root.js +51 -0
- package/dist/steps/index.d.ts +2 -0
- package/dist/steps/index.js +2 -0
- package/dist/steps/root/steps-root.d.ts +110 -0
- package/dist/steps/root/steps-root.js +130 -0
- package/dist/steps/step/step.d.ts +139 -0
- package/dist/steps/step/step.js +215 -0
- package/dist/switch/index.d.ts +1 -0
- package/dist/switch/index.js +1 -0
- package/dist/switch/root/switch-root.d.ts +74 -0
- package/dist/switch/root/switch-root.js +153 -0
- package/dist/table/cell/table-cell.d.ts +34 -0
- package/dist/table/cell/table-cell.js +52 -0
- package/dist/table/column/table-column.d.ts +165 -0
- package/dist/table/column/table-column.js +222 -0
- package/dist/table/index.d.ts +4 -0
- package/dist/table/index.js +4 -0
- package/dist/table/root/table-root.d.ts +98 -0
- package/dist/table/root/table-root.js +161 -0
- package/dist/table/row/table-row.d.ts +27 -0
- package/dist/table/row/table-row.js +42 -0
- package/dist/tabs/index.d.ts +3 -0
- package/dist/tabs/index.js +3 -0
- package/dist/tabs/panel/tab-panel.d.ts +67 -0
- package/dist/tabs/panel/tab-panel.js +98 -0
- package/dist/tabs/root/tabs-root.d.ts +123 -0
- package/dist/tabs/root/tabs-root.js +217 -0
- package/dist/tabs/tab/tab.d.ts +64 -0
- package/dist/tabs/tab/tab.js +116 -0
- package/dist/tag/index.d.ts +1 -0
- package/dist/tag/index.js +1 -0
- package/dist/tag/root/tag-root.d.ts +41 -0
- package/dist/tag/root/tag-root.js +67 -0
- package/dist/textarea/index.d.ts +1 -0
- package/dist/textarea/index.js +1 -0
- package/dist/textarea/root/textarea-root.d.ts +215 -0
- package/dist/textarea/root/textarea-root.js +380 -0
- package/dist/time-input/index.d.ts +1 -0
- package/dist/time-input/index.js +1 -0
- package/dist/time-input/root/time-input-root.d.ts +322 -0
- package/dist/time-input/root/time-input-root.js +661 -0
- package/dist/time-picker/index.d.ts +1 -0
- package/dist/time-picker/index.js +1 -0
- package/dist/time-picker/root/time-picker-root.d.ts +380 -0
- package/dist/time-picker/root/time-picker-root.js +669 -0
- package/dist/timeline/index.d.ts +2 -0
- package/dist/timeline/index.js +2 -0
- package/dist/timeline/item/timeline-item.d.ts +81 -0
- package/dist/timeline/item/timeline-item.js +128 -0
- package/dist/timeline/root/timeline-root.d.ts +52 -0
- package/dist/timeline/root/timeline-root.js +72 -0
- package/dist/toast/index.d.ts +2 -0
- package/dist/toast/index.js +2 -0
- package/dist/toast/item/toast-item.d.ts +183 -0
- package/dist/toast/item/toast-item.js +345 -0
- package/dist/toast/root/toast-root.d.ts +72 -0
- package/dist/toast/root/toast-root.js +87 -0
- package/dist/toggle/group/toggle-group.d.ts +140 -0
- package/dist/toggle/group/toggle-group.js +278 -0
- package/dist/toggle/index.d.ts +2 -0
- package/dist/toggle/index.js +2 -0
- package/dist/toggle/root/toggle-root.d.ts +99 -0
- package/dist/toggle/root/toggle-root.js +146 -0
- package/dist/toolbar/index.d.ts +1 -0
- package/dist/toolbar/index.js +1 -0
- package/dist/toolbar/root/toolbar-root.d.ts +105 -0
- package/dist/toolbar/root/toolbar-root.js +260 -0
- package/dist/tooltip/index.d.ts +1 -0
- package/dist/tooltip/index.js +1 -0
- package/dist/tooltip/root/tooltip-root.d.ts +388 -0
- package/dist/tooltip/root/tooltip-root.js +707 -0
- package/dist/tour/index.d.ts +2 -0
- package/dist/tour/index.js +2 -0
- package/dist/tour/root/tour-root.d.ts +161 -0
- package/dist/tour/root/tour-root.js +351 -0
- package/dist/tour/stop/tour-stop.d.ts +131 -0
- package/dist/tour/stop/tour-stop.js +249 -0
- package/dist/tree/index.d.ts +2 -0
- package/dist/tree/index.js +2 -0
- package/dist/tree/item/tree-item.d.ts +208 -0
- package/dist/tree/item/tree-item.js +381 -0
- package/dist/tree/root/tree-root.d.ts +88 -0
- package/dist/tree/root/tree-root.js +287 -0
- package/dist/trend/index.d.ts +1 -0
- package/dist/trend/index.js +1 -0
- package/dist/trend/root/trend-root.d.ts +67 -0
- package/dist/trend/root/trend-root.js +106 -0
- package/dist/video/index.d.ts +1 -0
- package/dist/video/index.js +1 -0
- package/dist/video/root/video-root.d.ts +711 -0
- package/dist/video/root/video-root.js +1821 -0
- package/dist/video-playlist/index.d.ts +3 -0
- package/dist/video-playlist/index.js +3 -0
- package/dist/video-playlist/item/video-playlist-item.d.ts +101 -0
- package/dist/video-playlist/item/video-playlist-item.js +162 -0
- package/dist/video-playlist/menu/video-playlist-menu.d.ts +121 -0
- package/dist/video-playlist/menu/video-playlist-menu.js +237 -0
- package/dist/video-playlist/root/video-playlist-root.d.ts +108 -0
- package/dist/video-playlist/root/video-playlist-root.js +218 -0
- package/dist/virtual-list/index.d.ts +1 -0
- package/dist/virtual-list/index.js +1 -0
- package/dist/virtual-list/root/virtual-list-root.d.ts +121 -0
- package/dist/virtual-list/root/virtual-list-root.js +221 -0
- package/jsx.d.ts +49767 -0
- package/package.json +77 -0
- package/svelte.d.ts +129 -0
- package/vue.d.ts +9242 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { HelixElement } from '@fusion.dev/helix-core';
|
|
2
|
+
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
|
+
/**
|
|
4
|
+
* @summary One choice in a radio group.
|
|
5
|
+
*
|
|
6
|
+
* @description
|
|
7
|
+
* Renders a `<button role="radio">`, not an `<input type="radio">`, and the
|
|
8
|
+
* reason is the shadow boundary rather than preference: native radios group by
|
|
9
|
+
* sharing a `name` within a form, and a radio inside a shadow root cannot join
|
|
10
|
+
* a group on the other side of it. The group is the form control here, so the
|
|
11
|
+
* option only has to say what it is and announce when it is chosen.
|
|
12
|
+
*
|
|
13
|
+
* **It carries no label of its own.** A radio is named by the words beside it,
|
|
14
|
+
* which is its own content, and the label, hint and message of the *set* belong
|
|
15
|
+
* to the group. This is the one control in the family that takes nothing from
|
|
16
|
+
* `MixinField`, because a lone radio is not a control: it is an answer to one.
|
|
17
|
+
*
|
|
18
|
+
* Selection is announced rather than applied. The item dispatches, the group
|
|
19
|
+
* decides, and the group writes `selected` back. An item that set itself would
|
|
20
|
+
* be a second source of truth for which one is on.
|
|
21
|
+
*
|
|
22
|
+
* @since 0.1.0
|
|
23
|
+
* @status experimental
|
|
24
|
+
* @category forms
|
|
25
|
+
* @aliases Option, Choice
|
|
26
|
+
* @documentation https://helix.fusion.dev/components/radio
|
|
27
|
+
*
|
|
28
|
+
* @slot - The words naming this choice.
|
|
29
|
+
* @slot icon - A mark shown beside them, or instead of them under
|
|
30
|
+
* `appearance="chip"`, where the words become the accessible name and the mark
|
|
31
|
+
* is what a reader picks between. Separate from the default slot because the
|
|
32
|
+
* chip has to hide one and show the other, and they are both in the same place
|
|
33
|
+
* otherwise.
|
|
34
|
+
*
|
|
35
|
+
* @event {HelixSelectEvent} helix-select - Fired when this choice is made. Cancelable: refusing it takes the decision and nothing moves.
|
|
36
|
+
*
|
|
37
|
+
* @csspart box - The circle.
|
|
38
|
+
* @csspart item - The button, which is the whole row.
|
|
39
|
+
* @csspart label - The words beside it.
|
|
40
|
+
* @csspart mark - The dot inside it.
|
|
41
|
+
*/
|
|
42
|
+
export declare class HelixHeadlessRadio extends HelixElement {
|
|
43
|
+
/**
|
|
44
|
+
* Whether this choice can be made.
|
|
45
|
+
*/
|
|
46
|
+
disabled: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Whether the markup declared this one chosen, which is what a reset returns to.
|
|
49
|
+
*
|
|
50
|
+
* `<option selected>` reflects to `defaultSelected` and `option.selected` is
|
|
51
|
+
* live state that does not reflect, and those are two different facts. This
|
|
52
|
+
* element has one `selected` doing both jobs, so what is captured here is what
|
|
53
|
+
* the markup said at upgrade, before anything could overwrite it: read the
|
|
54
|
+
* attribute later and the listbox's own writes answer instead.
|
|
55
|
+
*
|
|
56
|
+
* **The deeper half is 302 and is not this.** State reflecting under the
|
|
57
|
+
* declaration's name is the fault `TreeItem` already avoids by mirroring to
|
|
58
|
+
* `data-selected`, and four families here still write `selected` back into a
|
|
59
|
+
* consumer's markup. Splitting them means moving what every stylesheet selects
|
|
60
|
+
* on, which is a change of its own rather than a property being added.
|
|
61
|
+
*/
|
|
62
|
+
get defaultSelected(): boolean;
|
|
63
|
+
set defaultSelected(next: boolean);
|
|
64
|
+
/** What the markup said, read once at construction for the reason above. */
|
|
65
|
+
private seeded;
|
|
66
|
+
/**
|
|
67
|
+
* Whether this is the current choice.
|
|
68
|
+
*
|
|
69
|
+
* Written by the group.
|
|
70
|
+
*/
|
|
71
|
+
selected: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Identifies this choice to the group, and is what the form submits.
|
|
74
|
+
*/
|
|
75
|
+
value: string;
|
|
76
|
+
/** Moves focus to this choice, for the group's arrow keys. */
|
|
77
|
+
focusItem(): void;
|
|
78
|
+
/** Makes this choice and announces it. */
|
|
79
|
+
select(): void;
|
|
80
|
+
/**
|
|
81
|
+
* Mirrors the chosen state where a stylesheet can select on it.
|
|
82
|
+
*
|
|
83
|
+
* **A custom state and not the `selected` attribute it used to reflect.** The
|
|
84
|
+
* parent writes this: a listbox choosing a row, a tab strip moving the tab, a
|
|
85
|
+
* radio group answering for its set. Reflected, that put the element's own
|
|
86
|
+
* bookkeeping onto markup a consumer wrote and a consumer's server never sent,
|
|
87
|
+
* which React reconciles and reports as a mismatch, and which a serialized
|
|
88
|
+
* element pasted back declares as a choice nobody made. `ElementInternals`
|
|
89
|
+
* holds it instead, where it is not in the DOM at all.
|
|
90
|
+
*
|
|
91
|
+
* Reading `selected` is unaffected and so is writing it: the attribute still
|
|
92
|
+
* seeds the property, which is what `<helix-radio selected>` in a consumer's
|
|
93
|
+
* markup means. What stops is the write back. See 302 and 304.
|
|
94
|
+
*/
|
|
95
|
+
protected willUpdate(changed: PropertyValues): void;
|
|
96
|
+
protected render(): TemplateResult;
|
|
97
|
+
}
|
|
98
|
+
declare global {
|
|
99
|
+
interface HTMLElementTagNameMap {
|
|
100
|
+
'helix-headless-radio': HelixHeadlessRadio;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { customElement, HelixElement, HelixSelectEvent } from '@fusion.dev/helix-core';
|
|
8
|
+
import { html } from 'lit';
|
|
9
|
+
import { property } from 'lit/decorators.js';
|
|
10
|
+
/**
|
|
11
|
+
* @summary One choice in a radio group.
|
|
12
|
+
*
|
|
13
|
+
* @description
|
|
14
|
+
* Renders a `<button role="radio">`, not an `<input type="radio">`, and the
|
|
15
|
+
* reason is the shadow boundary rather than preference: native radios group by
|
|
16
|
+
* sharing a `name` within a form, and a radio inside a shadow root cannot join
|
|
17
|
+
* a group on the other side of it. The group is the form control here, so the
|
|
18
|
+
* option only has to say what it is and announce when it is chosen.
|
|
19
|
+
*
|
|
20
|
+
* **It carries no label of its own.** A radio is named by the words beside it,
|
|
21
|
+
* which is its own content, and the label, hint and message of the *set* belong
|
|
22
|
+
* to the group. This is the one control in the family that takes nothing from
|
|
23
|
+
* `MixinField`, because a lone radio is not a control: it is an answer to one.
|
|
24
|
+
*
|
|
25
|
+
* Selection is announced rather than applied. The item dispatches, the group
|
|
26
|
+
* decides, and the group writes `selected` back. An item that set itself would
|
|
27
|
+
* be a second source of truth for which one is on.
|
|
28
|
+
*
|
|
29
|
+
* @since 0.1.0
|
|
30
|
+
* @status experimental
|
|
31
|
+
* @category forms
|
|
32
|
+
* @aliases Option, Choice
|
|
33
|
+
* @documentation https://helix.fusion.dev/components/radio
|
|
34
|
+
*
|
|
35
|
+
* @slot - The words naming this choice.
|
|
36
|
+
* @slot icon - A mark shown beside them, or instead of them under
|
|
37
|
+
* `appearance="chip"`, where the words become the accessible name and the mark
|
|
38
|
+
* is what a reader picks between. Separate from the default slot because the
|
|
39
|
+
* chip has to hide one and show the other, and they are both in the same place
|
|
40
|
+
* otherwise.
|
|
41
|
+
*
|
|
42
|
+
* @event {HelixSelectEvent} helix-select - Fired when this choice is made. Cancelable: refusing it takes the decision and nothing moves.
|
|
43
|
+
*
|
|
44
|
+
* @csspart box - The circle.
|
|
45
|
+
* @csspart item - The button, which is the whole row.
|
|
46
|
+
* @csspart label - The words beside it.
|
|
47
|
+
* @csspart mark - The dot inside it.
|
|
48
|
+
*/
|
|
49
|
+
let HelixHeadlessRadio = class HelixHeadlessRadio extends HelixElement {
|
|
50
|
+
constructor() {
|
|
51
|
+
super(...arguments);
|
|
52
|
+
/**
|
|
53
|
+
* Whether this choice can be made.
|
|
54
|
+
*/
|
|
55
|
+
this.disabled = false;
|
|
56
|
+
/** What the markup said, read once at construction for the reason above. */
|
|
57
|
+
this.seeded = this.hasAttribute('selected');
|
|
58
|
+
/**
|
|
59
|
+
* Whether this is the current choice.
|
|
60
|
+
*
|
|
61
|
+
* Written by the group.
|
|
62
|
+
*/
|
|
63
|
+
this.selected = false;
|
|
64
|
+
/**
|
|
65
|
+
* Identifies this choice to the group, and is what the form submits.
|
|
66
|
+
*/
|
|
67
|
+
this.value = '';
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Whether the markup declared this one chosen, which is what a reset returns to.
|
|
71
|
+
*
|
|
72
|
+
* `<option selected>` reflects to `defaultSelected` and `option.selected` is
|
|
73
|
+
* live state that does not reflect, and those are two different facts. This
|
|
74
|
+
* element has one `selected` doing both jobs, so what is captured here is what
|
|
75
|
+
* the markup said at upgrade, before anything could overwrite it: read the
|
|
76
|
+
* attribute later and the listbox's own writes answer instead.
|
|
77
|
+
*
|
|
78
|
+
* **The deeper half is 302 and is not this.** State reflecting under the
|
|
79
|
+
* declaration's name is the fault `TreeItem` already avoids by mirroring to
|
|
80
|
+
* `data-selected`, and four families here still write `selected` back into a
|
|
81
|
+
* consumer's markup. Splitting them means moving what every stylesheet selects
|
|
82
|
+
* on, which is a change of its own rather than a property being added.
|
|
83
|
+
*/
|
|
84
|
+
get defaultSelected() {
|
|
85
|
+
return this.seeded;
|
|
86
|
+
}
|
|
87
|
+
set defaultSelected(next) {
|
|
88
|
+
this.seeded = next;
|
|
89
|
+
}
|
|
90
|
+
/** Moves focus to this choice, for the group's arrow keys. */
|
|
91
|
+
focusItem() {
|
|
92
|
+
this.renderRoot.querySelector('[part="item"]')?.focus();
|
|
93
|
+
}
|
|
94
|
+
/** Makes this choice and announces it. */
|
|
95
|
+
select() {
|
|
96
|
+
if (this.disabled) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.dispatchEvent(new HelixSelectEvent({ value: this.value }));
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Mirrors the chosen state where a stylesheet can select on it.
|
|
103
|
+
*
|
|
104
|
+
* **A custom state and not the `selected` attribute it used to reflect.** The
|
|
105
|
+
* parent writes this: a listbox choosing a row, a tab strip moving the tab, a
|
|
106
|
+
* radio group answering for its set. Reflected, that put the element's own
|
|
107
|
+
* bookkeeping onto markup a consumer wrote and a consumer's server never sent,
|
|
108
|
+
* which React reconciles and reports as a mismatch, and which a serialized
|
|
109
|
+
* element pasted back declares as a choice nobody made. `ElementInternals`
|
|
110
|
+
* holds it instead, where it is not in the DOM at all.
|
|
111
|
+
*
|
|
112
|
+
* Reading `selected` is unaffected and so is writing it: the attribute still
|
|
113
|
+
* seeds the property, which is what `<helix-radio selected>` in a consumer's
|
|
114
|
+
* markup means. What stops is the write back. See 302 and 304.
|
|
115
|
+
*/
|
|
116
|
+
willUpdate(changed) {
|
|
117
|
+
super.willUpdate(changed);
|
|
118
|
+
this.toggleState('selected', this.selected);
|
|
119
|
+
}
|
|
120
|
+
render() {
|
|
121
|
+
/* Roving `tabindex`: one stop for the whole set, which is what a radio
|
|
122
|
+
group is in the tab order, and the arrow keys move within it. The group
|
|
123
|
+
owns the keys, because moving between items is a fact about the set. */
|
|
124
|
+
return html `<button
|
|
125
|
+
part="item"
|
|
126
|
+
type="button"
|
|
127
|
+
role="radio"
|
|
128
|
+
aria-checked=${this.selected ? 'true' : 'false'}
|
|
129
|
+
?disabled=${this.disabled}
|
|
130
|
+
tabindex=${this.selected ? '0' : '-1'}
|
|
131
|
+
@click=${() => this.select()}
|
|
132
|
+
>
|
|
133
|
+
<span part="box"><span part="mark" aria-hidden="true"></span></span>
|
|
134
|
+
<slot name="icon"></slot>
|
|
135
|
+
<span part="label"><slot></slot></span>
|
|
136
|
+
</button>`;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
__decorate([
|
|
140
|
+
property({ reflect: true, type: Boolean })
|
|
141
|
+
], HelixHeadlessRadio.prototype, "disabled", void 0);
|
|
142
|
+
__decorate([
|
|
143
|
+
property({ type: Boolean })
|
|
144
|
+
], HelixHeadlessRadio.prototype, "selected", void 0);
|
|
145
|
+
__decorate([
|
|
146
|
+
property()
|
|
147
|
+
], HelixHeadlessRadio.prototype, "value", void 0);
|
|
148
|
+
HelixHeadlessRadio = __decorate([
|
|
149
|
+
customElement('helix-headless-radio')
|
|
150
|
+
], HelixHeadlessRadio);
|
|
151
|
+
export { HelixHeadlessRadio };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './root/rating-root.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './root/rating-root.js';
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { HelixFormElement, KeyboardNavigationController } from '@fusion.dev/helix-core';
|
|
2
|
+
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
|
+
declare const HelixHeadlessRating_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerValueInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinFieldInterface) & typeof HelixFormElement;
|
|
4
|
+
/**
|
|
5
|
+
* @summary A score out of a few marks, given or shown.
|
|
6
|
+
*
|
|
7
|
+
* @description
|
|
8
|
+
* **Half marks decide the shape, so they are decided first.** Supporting them
|
|
9
|
+
* means the value is not an integer and the targets are not the marks: five
|
|
10
|
+
* stars at a half step is ten places to press, and a mark that is filled to the
|
|
11
|
+
* middle. Everything else follows from that, which is why `step` is here rather
|
|
12
|
+
* than added later, when the pointer handling would have to be rewritten around
|
|
13
|
+
* it.
|
|
14
|
+
*
|
|
15
|
+
* **A partial mark is the whole mark, clipped.** Not a second glyph filled to
|
|
16
|
+
* the middle: that needs a matching pair drawn for every mark anybody uses, and
|
|
17
|
+
* the moment a consumer wants a heart or a circle they need to draw one too. The
|
|
18
|
+
* fill is the same marks over the same marks, cut off partway, so any mark works
|
|
19
|
+
* and any fraction does.
|
|
20
|
+
*
|
|
21
|
+
* **Read-only is not this control greyed out, it is a different thing.** The
|
|
22
|
+
* commoner use is showing a score nobody is being asked for, a product's
|
|
23
|
+
* average, and that is not a control at all: it takes no focus, answers no keys,
|
|
24
|
+
* has no options to choose between, and reads as one thing rather than as five.
|
|
25
|
+
* So `readonly` is `role="img"` with the score in its name, where the control is
|
|
26
|
+
* a radio group. A disabled control is still a control and still says so; this
|
|
27
|
+
* is not one.
|
|
28
|
+
*
|
|
29
|
+
* **Moving is choosing here**, which is the radio group's reading and the
|
|
30
|
+
* opposite of `Menu`'s: arriving at four stars *is* rating it four, because
|
|
31
|
+
* nothing else follows and there is nothing to confirm. That is what
|
|
32
|
+
* `KeyboardNavigationController` takes `selects` for, and why this can use it
|
|
33
|
+
* where a menu cannot.
|
|
34
|
+
*
|
|
35
|
+
* **The mark is a stylesheet's, not a slot's.** A slot projects its content
|
|
36
|
+
* once, and there are two layers of marks here: slotting a star would put it in
|
|
37
|
+
* the track or the fill and leave the other empty. So the mark is a shape the
|
|
38
|
+
* styled tier masks with, which is also what lets a partial one be a clip of the
|
|
39
|
+
* whole rather than a second drawing of it.
|
|
40
|
+
*
|
|
41
|
+
* The properties below are written by this component and read by whoever draws
|
|
42
|
+
* it. A consumer sets none of them: they carry a number this element computed
|
|
43
|
+
* and CSS cannot, which is what lets a stylesheet on this tier draw the thing
|
|
44
|
+
* without measuring anything itself.
|
|
45
|
+
*
|
|
46
|
+
* @since 0.1.0
|
|
47
|
+
* @status experimental
|
|
48
|
+
* @category forms
|
|
49
|
+
* @aliases Stars, Score, Review score
|
|
50
|
+
* @documentation https://helix.fusion.dev/components/rating
|
|
51
|
+
*
|
|
52
|
+
* @event {Event} change - Announced with it, the choice being the commit.
|
|
53
|
+
* @event {HelixBeforeChangeEvent} helix-before-change - Fired before the score changes, and cancelable.
|
|
54
|
+
* @event {Event} input - Announced once the value has moved.
|
|
55
|
+
*
|
|
56
|
+
* @csspart feedback - What is wrong with it.
|
|
57
|
+
* @csspart fill - The filled marks, clipped to the score.
|
|
58
|
+
* @csspart hint - Help under the marks, while nothing is wrong.
|
|
59
|
+
* @csspart label - The question, over the marks.
|
|
60
|
+
* @csspart mark - One mark, in either layer.
|
|
61
|
+
* @csspart marks - The row of marks.
|
|
62
|
+
* @csspart option - One place a reader can press, which is one step.
|
|
63
|
+
* @csspart track - The unfilled marks.
|
|
64
|
+
* @csspart value - The score written out, under `show-value`.
|
|
65
|
+
*
|
|
66
|
+
* @cssproperty --rating-full - How many marks are wholly filled.
|
|
67
|
+
* @cssproperty --rating-part - How much of the next mark is filled, 0 to 1.
|
|
68
|
+
* @cssproperty --rating-step - The width of one step, as a fraction of a mark.
|
|
69
|
+
* @cssproperty --rating-steps - How many steps one mark is divided into.
|
|
70
|
+
*/
|
|
71
|
+
export declare class HelixHeadlessRating extends HelixHeadlessRating_base {
|
|
72
|
+
protected readonly announcesInput = false;
|
|
73
|
+
/**
|
|
74
|
+
* How many marks there are.
|
|
75
|
+
*/
|
|
76
|
+
max: number;
|
|
77
|
+
/**
|
|
78
|
+
* The lowest score a reader can give, which is what clearing returns to.
|
|
79
|
+
*
|
|
80
|
+
* Zero rather than one, because "no rating" and "the worst rating" are
|
|
81
|
+
* different answers and a control that cannot express the first has to
|
|
82
|
+
* pretend the second. A survey that requires an answer says so with
|
|
83
|
+
* `required`, not by making one unreachable.
|
|
84
|
+
*/
|
|
85
|
+
min: number;
|
|
86
|
+
/**
|
|
87
|
+
* The smallest part of a mark that can be chosen.
|
|
88
|
+
*
|
|
89
|
+
* `0.5` is the half star, and it is the reason the value is a number rather
|
|
90
|
+
* than an index: with halves, five marks are ten answers.
|
|
91
|
+
*/
|
|
92
|
+
step: number;
|
|
93
|
+
/**
|
|
94
|
+
* Whether this shows a score rather than asks for one.
|
|
95
|
+
*
|
|
96
|
+
* A readout is not a control that has been switched off. It takes no focus,
|
|
97
|
+
* answers no keys, and reads as one thing: see the note on the class.
|
|
98
|
+
*/
|
|
99
|
+
readOnly: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* How the score is read out, where "3.5 out of 5" is not what it should say.
|
|
102
|
+
*
|
|
103
|
+
* A rating out of five is one of the few places a screen reader gets a worse
|
|
104
|
+
* answer from the value than from a sentence: "3.5" alone is a number without
|
|
105
|
+
* a subject. This names the readout, where a control is named by its `label`
|
|
106
|
+
* and each of its options by the score that option is.
|
|
107
|
+
*/
|
|
108
|
+
valueText: string;
|
|
109
|
+
/**
|
|
110
|
+
* Whether the score is written out beside the marks.
|
|
111
|
+
*
|
|
112
|
+
* Marks say roughly, and a number says exactly. Four and a bit stars is not a
|
|
113
|
+
* reading anyone can repeat, which is why a product's average is nearly always
|
|
114
|
+
* printed next to them. `Meter` spells its reading the same way and under the
|
|
115
|
+
* same attribute.
|
|
116
|
+
*
|
|
117
|
+
* It follows the pointer, because it labels what the marks are showing rather
|
|
118
|
+
* than what the form holds: a label that disagreed with the marks under the
|
|
119
|
+
* reader's own cursor would be worse than no label.
|
|
120
|
+
*/
|
|
121
|
+
showValue: boolean;
|
|
122
|
+
/**
|
|
123
|
+
* The shape a consumer slotted, if they slotted one.
|
|
124
|
+
*
|
|
125
|
+
* Read rather than projected. A `<slot>` shows its content once and a rating
|
|
126
|
+
* needs the shape as many times as there are marks, twice over because there
|
|
127
|
+
* are two layers, so the slot here is a way of being handed the shape rather
|
|
128
|
+
* than a place the shape is drawn. What is handed over gets cloned into every
|
|
129
|
+
* position.
|
|
130
|
+
*
|
|
131
|
+
* **One shape, not one per position.** A rating is a quantity of identical
|
|
132
|
+
* marks and the fill is a clip across all of them, so a row whose third mark
|
|
133
|
+
* is a different drawing from its first is not a rating: it is a set of
|
|
134
|
+
* choices, which is `Radio.Group` and already carries a value and a name on
|
|
135
|
+
* each of its own options. Anything past the first slotted element is
|
|
136
|
+
* ignored.
|
|
137
|
+
*/
|
|
138
|
+
private markSource;
|
|
139
|
+
/**
|
|
140
|
+
* What the pointer is over, which is shown instead of the score while it is.
|
|
141
|
+
*/
|
|
142
|
+
private previewing;
|
|
143
|
+
protected readonly keys: KeyboardNavigationController;
|
|
144
|
+
/** The score, as a number, clamped to what the marks can show. */
|
|
145
|
+
get score(): number;
|
|
146
|
+
/** Every score a reader can choose, which is `max / step` of them. */
|
|
147
|
+
private get steps();
|
|
148
|
+
/**
|
|
149
|
+
* The options, as the shared controller wants them.
|
|
150
|
+
*
|
|
151
|
+
* Adapters rather than elements, because these are buttons this element drew
|
|
152
|
+
* rather than a consumer's custom elements: the interface asks for five
|
|
153
|
+
* things and a `<button>` in a shadow root can answer all five without being
|
|
154
|
+
* dressed up as a component to do it.
|
|
155
|
+
*/
|
|
156
|
+
private get options();
|
|
157
|
+
/** The pointer drawing a score, while one is. */
|
|
158
|
+
private dragging;
|
|
159
|
+
/**
|
|
160
|
+
* One clone per place a mark goes, kept so a render does not remake them.
|
|
161
|
+
*
|
|
162
|
+
* A drag renders on every pointer move, and handing Lit a fresh node each
|
|
163
|
+
* time would swap every mark in the row on every frame of a gesture whose
|
|
164
|
+
* whole point is that only the fill moves.
|
|
165
|
+
*/
|
|
166
|
+
private readonly clones;
|
|
167
|
+
/** The shape for one place, or nothing when the stylesheet is drawing it. */
|
|
168
|
+
private markFor;
|
|
169
|
+
private readonly handleMarkSlot;
|
|
170
|
+
/**
|
|
171
|
+
* The step under a point on the row, or the nearest one to it.
|
|
172
|
+
*
|
|
173
|
+
* Asked of the boxes rather than worked out from `max` and `step`, because
|
|
174
|
+
* where a step sits is the stylesheet's arithmetic and this would be a second
|
|
175
|
+
* copy of it that could disagree. The browser has already laid the targets
|
|
176
|
+
* out; this reads them back.
|
|
177
|
+
*
|
|
178
|
+
* Nearest rather than only a hit, so a drag that runs off the end of the row
|
|
179
|
+
* pins to the last mark instead of stopping at whatever it last touched, and
|
|
180
|
+
* a pointer in the half-gap outside the first mark still answers.
|
|
181
|
+
*/
|
|
182
|
+
private scoreAt;
|
|
183
|
+
/**
|
|
184
|
+
* Dragging across the marks draws a score, and letting go chooses it.
|
|
185
|
+
*
|
|
186
|
+
* One press and a slide is how a rating is given on a phone, and on a desktop
|
|
187
|
+
* it is how somebody who overshoots corrects without lifting. Pointer capture
|
|
188
|
+
* is what makes it one gesture: without it the events go to whichever target
|
|
189
|
+
* the pointer crossed into, and a drag that leaves the row stops reporting.
|
|
190
|
+
*
|
|
191
|
+
* Nothing is chosen until release, so a drag that ends back where it started,
|
|
192
|
+
* or off the element entirely, has asked for nothing.
|
|
193
|
+
*/
|
|
194
|
+
private readonly handleDragStart;
|
|
195
|
+
private readonly handleDragMove;
|
|
196
|
+
private readonly handleDragEnd;
|
|
197
|
+
private readonly handleDragCancel;
|
|
198
|
+
/**
|
|
199
|
+
* Reports the value, and whether the form may go without one.
|
|
200
|
+
*
|
|
201
|
+
* **`required` was on the API page and did nothing.** The mixin brings it,
|
|
202
|
+
* so it printed on the reference page and read as supported, and nothing here
|
|
203
|
+
* ever called `setValidity`: a form holding an unrated required rating
|
|
204
|
+
* submitted, measured, with `:valid` true and the entry present but empty.
|
|
205
|
+
* This is the case `min` argues for in its own note, that "no rating" and
|
|
206
|
+
* "the worst rating" are different answers and a survey that requires one
|
|
207
|
+
* says so with `required`.
|
|
208
|
+
*
|
|
209
|
+
* **Empty is `value === ''` rather than a score of zero**, because zero is a
|
|
210
|
+
* rating a reader can deliberately give when `min` allows it, and refusing to
|
|
211
|
+
* submit it would be the control disagreeing with the property that permits
|
|
212
|
+
* it. What `required` asks is whether they answered at all.
|
|
213
|
+
*
|
|
214
|
+
* `Slider` is deliberately not given the same treatment: a native
|
|
215
|
+
* `<input type="range" required>` is always valid, because a range always
|
|
216
|
+
* holds a number, and matching the platform there is the point.
|
|
217
|
+
*/
|
|
218
|
+
private sync;
|
|
219
|
+
private readonly handleOptionClick;
|
|
220
|
+
private readonly handleOptionEnter;
|
|
221
|
+
private readonly handleLeave;
|
|
222
|
+
connectedCallback(): void;
|
|
223
|
+
disconnectedCallback(): void;
|
|
224
|
+
protected updated(changed: PropertyValues): void;
|
|
225
|
+
protected firstUpdated(changed: PropertyValues): void;
|
|
226
|
+
protected render(): TemplateResult;
|
|
227
|
+
/**
|
|
228
|
+
* The value as a number, or `NaN` while the control is empty.
|
|
229
|
+
*
|
|
230
|
+
* `NaN` and not zero, which is the trap the platform already avoids: `Number('')`
|
|
231
|
+
* is zero, so an empty control would report a number it does not hold and a
|
|
232
|
+
* form would submit it.
|
|
233
|
+
*/
|
|
234
|
+
get valueAsNumber(): number;
|
|
235
|
+
set valueAsNumber(count: number);
|
|
236
|
+
}
|
|
237
|
+
declare global {
|
|
238
|
+
interface HTMLElementTagNameMap {
|
|
239
|
+
'helix-headless-rating': HelixHeadlessRating;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
export {};
|