@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,168 @@
|
|
|
1
|
+
import { HelixElement } from '@fusion.dev/helix-core';
|
|
2
|
+
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
|
+
import type { HelixHeadlessNotification } from '../notification/notification.js';
|
|
4
|
+
declare const HelixHeadlessNotifications_base: (new (...args: any[]) => import("@fusion.dev/helix-core").CollectionElement) & typeof HelixElement;
|
|
5
|
+
/**
|
|
6
|
+
* @summary A feed a reader comes back to, made of notifications they may not have seen.
|
|
7
|
+
*
|
|
8
|
+
* @description
|
|
9
|
+
* **Slotted children rather than a data property**, which is the opposite of the
|
|
10
|
+
* choice `helix-data-table` made and correct for the opposite reason. A table's
|
|
11
|
+
* rows are homogeneous values a consumer wants windowed; a notification is a
|
|
12
|
+
* small piece of somebody's own markup, with an avatar and a link and a button
|
|
13
|
+
* in it, and there are tens of them rather than thousands. Writing them out is
|
|
14
|
+
* the web-component reading of a list and lets an item hold anything.
|
|
15
|
+
*
|
|
16
|
+
* **The cost is stated rather than discovered: this does not virtualize, and it
|
|
17
|
+
* cannot.** Windowing needs the list to own the data, and here the consumer owns
|
|
18
|
+
* it: N notifications is N elements by construction. That is the same trade
|
|
19
|
+
* `25-data-table.md` §2.2 rejected for a table and accepts here, because the
|
|
20
|
+
* sizes are not comparable. A feed that really does hold thousands wants a data
|
|
21
|
+
* table with a custom cell, and this component will not grow into one.
|
|
22
|
+
*
|
|
23
|
+
* **Read state is reported, never invented.** Marking read is usually a round
|
|
24
|
+
* trip: this element asks its items and each item asks the consumer, so a
|
|
25
|
+
* refused `helix-read` leaves everything alone and a consumer who owns `read`
|
|
26
|
+
* sees nothing change until they say so. `unread` is derived from the items and
|
|
27
|
+
* reflected, so a stylesheet and a badge can both read it without either of them
|
|
28
|
+
* counting.
|
|
29
|
+
*
|
|
30
|
+
* @since 0.1.0
|
|
31
|
+
* @status experimental
|
|
32
|
+
* @category feedback
|
|
33
|
+
* @aliases Notification feed, Inbox, Activity
|
|
34
|
+
* @documentation https://helix.fusion.dev/components/notifications
|
|
35
|
+
*
|
|
36
|
+
* @slot - The notifications, as `helix-notification` children.
|
|
37
|
+
* @slot footer - Below the list, for a link to everything.
|
|
38
|
+
* @slot header - Above the list, for a title and the mark-all control.
|
|
39
|
+
*
|
|
40
|
+
* @event {HelixReadEvent} helix-read - Fired by an item, and by this element when everything is marked read. Cancelable.
|
|
41
|
+
*
|
|
42
|
+
* @csspart empty - Shown when there is nothing in the feed.
|
|
43
|
+
* @csspart footer - The region below the list.
|
|
44
|
+
* @csspart header - The region above the list.
|
|
45
|
+
* @csspart list - The list itself.
|
|
46
|
+
* @csspart loading - Shown while the feed is still on its way.
|
|
47
|
+
* @csspart mark-all - The control that marks everything read.
|
|
48
|
+
*/
|
|
49
|
+
export declare class HelixHeadlessNotifications extends HelixHeadlessNotifications_base {
|
|
50
|
+
/**
|
|
51
|
+
* Nothing is assigned by name, so the items land in a list and the rest does not.
|
|
52
|
+
*
|
|
53
|
+
* `role="listitem"` under anything but a `list` is a list item belonging to
|
|
54
|
+
* nothing, and the items are ordinary children a consumer writes with no
|
|
55
|
+
* `slot`. Manual assignment is the only way to wrap them without editing the
|
|
56
|
+
* consumer's markup, which is a change a React consumer's hydration reports
|
|
57
|
+
* and does not patch up.
|
|
58
|
+
*/
|
|
59
|
+
static shadowRootOptions: ShadowRootInit;
|
|
60
|
+
/**
|
|
61
|
+
* Accessible name for the feed.
|
|
62
|
+
*/
|
|
63
|
+
label: string;
|
|
64
|
+
/**
|
|
65
|
+
* Whether to draw a control that marks everything read.
|
|
66
|
+
*/
|
|
67
|
+
markAll: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Label for that control.
|
|
70
|
+
*/
|
|
71
|
+
markAllLabel: string;
|
|
72
|
+
/**
|
|
73
|
+
* How many items are unread, counted from the items themselves.
|
|
74
|
+
*
|
|
75
|
+
* Read-only for the reason it is derived: a count the consumer could set is a
|
|
76
|
+
* second source of truth for something the items already know, and the first
|
|
77
|
+
* time the two disagreed the badge would be right and the list would not.
|
|
78
|
+
*
|
|
79
|
+
* **The attribute is written in `updated` rather than reflected, and the
|
|
80
|
+
* difference is a bug that shipped.** `@property({ reflect: true })` on a
|
|
81
|
+
* getter with no setter reflects once: Lit reflects what is in
|
|
82
|
+
* `changedProperties`, and nothing puts a derived getter there after the first
|
|
83
|
+
* update. Measured with two items, one marked read: the property answered 1
|
|
84
|
+
* and the attribute still said 2, so a badge reading the attribute showed a
|
|
85
|
+
* count for an item the reader had just opened.
|
|
86
|
+
*/
|
|
87
|
+
get unread(): number;
|
|
88
|
+
/** The notifications declared as children, in the order they are written. */
|
|
89
|
+
get items(): HelixHeadlessNotification[];
|
|
90
|
+
/**
|
|
91
|
+
* Marks every unread item read, and reports how many actually moved.
|
|
92
|
+
*
|
|
93
|
+
* **Through each item's own request rather than by writing its property**,
|
|
94
|
+
* which is what makes one refusal refuse one item: a consumer who owns some
|
|
95
|
+
* items and not others gets the right answer for each, and a server that
|
|
96
|
+
* rejects one does not silently mark the rest.
|
|
97
|
+
*/
|
|
98
|
+
markEveryoneRead(): number;
|
|
99
|
+
/** Items arrive from the light DOM, which changes no property here. */
|
|
100
|
+
private readonly handleSlotChange;
|
|
101
|
+
/**
|
|
102
|
+
* An item's own read event, heard on the way past, so the count follows.
|
|
103
|
+
*
|
|
104
|
+
* `unread` is derived from the items and nothing about an item changing tells
|
|
105
|
+
* Lit to look again. Not stopped: the event is the consumer's to hear, and
|
|
106
|
+
* this element is a bystander that happens to need to redraw.
|
|
107
|
+
*/
|
|
108
|
+
private readonly handleRead;
|
|
109
|
+
private assign;
|
|
110
|
+
connectedCallback(): void;
|
|
111
|
+
disconnectedCallback(): void;
|
|
112
|
+
protected willUpdate(changed: PropertyValues): void;
|
|
113
|
+
/**
|
|
114
|
+
* Says whether anything in the feed has media, so every item can hold the
|
|
115
|
+
* column open whether or not it has one of its own.
|
|
116
|
+
*
|
|
117
|
+
* **A fact no item can answer for itself**, which is why it is here. An item
|
|
118
|
+
* knows about its own media slot and nothing about its neighbors, so a feed
|
|
119
|
+
* where some rows have an avatar and some do not drew two different left
|
|
120
|
+
* edges for its text and had no way to notice: measured on a four item feed,
|
|
121
|
+
* the rows without media started their text 32 pixels to the left of the rows
|
|
122
|
+
* with it. The styled tier turns this into a width; this tier ships no
|
|
123
|
+
* stylesheet and is unaffected.
|
|
124
|
+
*
|
|
125
|
+
* Read off the light DOM rather than off the items, so it does not depend on
|
|
126
|
+
* which children have upgraded by the time this runs.
|
|
127
|
+
*/
|
|
128
|
+
private markMedia;
|
|
129
|
+
/**
|
|
130
|
+
* Says on each region whether anything is in it.
|
|
131
|
+
*
|
|
132
|
+
* **The stylesheet used to ask, and could not.** The rule read
|
|
133
|
+
* `[part="header"]:not(:has(> slot:has(*)))`, which is two faults at once.
|
|
134
|
+
* `:has()` may not be nested inside `:has()`, so the selector fails to parse
|
|
135
|
+
* and the whole rule is discarded; and a slot's assigned nodes are not its DOM
|
|
136
|
+
* children, so `slot:has(*)` reports whether the slot has *fallback* rather
|
|
137
|
+
* than whether a consumer filled it, and would have been false either way.
|
|
138
|
+
* Both verified in a browser: `insertRule` throws a `SyntaxError` on the
|
|
139
|
+
* first, and an assigned element still leaves `slot.matches(':has(*)')` false.
|
|
140
|
+
* A feed with no header drew its rule under nothing, and one with no footer
|
|
141
|
+
* drew another over nothing.
|
|
142
|
+
*
|
|
143
|
+
* `slotFilled` is what the rest of the library already asks with. It is said
|
|
144
|
+
* on the region inside this shadow root rather than on the host, because an
|
|
145
|
+
* attribute written onto the host is a change to markup the consumer rendered,
|
|
146
|
+
* which React reports on hydration and does not patch up.
|
|
147
|
+
*/
|
|
148
|
+
private markEmpty;
|
|
149
|
+
/**
|
|
150
|
+
* One region, hidden when its slot holds nothing and nothing of ours fills it.
|
|
151
|
+
*
|
|
152
|
+
* `hidden` beside the `data-empty` mirror: `data-empty` is the hook the styled
|
|
153
|
+
* sheet reads, and this tier ships no sheet, so an empty region left in the box
|
|
154
|
+
* tree would be a gap a headless consumer cannot close without knowing to look
|
|
155
|
+
* for it. The styled rule stays too, because that sheet sets `display` on these
|
|
156
|
+
* parts and therefore outranks the UA's `[hidden]` one.
|
|
157
|
+
*/
|
|
158
|
+
private markRegion;
|
|
159
|
+
protected updated(changed: PropertyValues): void;
|
|
160
|
+
protected render(): TemplateResult;
|
|
161
|
+
private readonly handleMarkAll;
|
|
162
|
+
}
|
|
163
|
+
declare global {
|
|
164
|
+
interface HTMLElementTagNameMap {
|
|
165
|
+
'helix-headless-notifications': HelixHeadlessNotifications;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
export {};
|
|
@@ -0,0 +1,291 @@
|
|
|
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, HelixReadEvent, hostAria, MixinCollection, slotFilled, } from '@fusion.dev/helix-core';
|
|
8
|
+
import { html, nothing } from 'lit';
|
|
9
|
+
import { property } from 'lit/decorators.js';
|
|
10
|
+
/**
|
|
11
|
+
* @summary A feed a reader comes back to, made of notifications they may not have seen.
|
|
12
|
+
*
|
|
13
|
+
* @description
|
|
14
|
+
* **Slotted children rather than a data property**, which is the opposite of the
|
|
15
|
+
* choice `helix-data-table` made and correct for the opposite reason. A table's
|
|
16
|
+
* rows are homogeneous values a consumer wants windowed; a notification is a
|
|
17
|
+
* small piece of somebody's own markup, with an avatar and a link and a button
|
|
18
|
+
* in it, and there are tens of them rather than thousands. Writing them out is
|
|
19
|
+
* the web-component reading of a list and lets an item hold anything.
|
|
20
|
+
*
|
|
21
|
+
* **The cost is stated rather than discovered: this does not virtualize, and it
|
|
22
|
+
* cannot.** Windowing needs the list to own the data, and here the consumer owns
|
|
23
|
+
* it: N notifications is N elements by construction. That is the same trade
|
|
24
|
+
* `25-data-table.md` §2.2 rejected for a table and accepts here, because the
|
|
25
|
+
* sizes are not comparable. A feed that really does hold thousands wants a data
|
|
26
|
+
* table with a custom cell, and this component will not grow into one.
|
|
27
|
+
*
|
|
28
|
+
* **Read state is reported, never invented.** Marking read is usually a round
|
|
29
|
+
* trip: this element asks its items and each item asks the consumer, so a
|
|
30
|
+
* refused `helix-read` leaves everything alone and a consumer who owns `read`
|
|
31
|
+
* sees nothing change until they say so. `unread` is derived from the items and
|
|
32
|
+
* reflected, so a stylesheet and a badge can both read it without either of them
|
|
33
|
+
* counting.
|
|
34
|
+
*
|
|
35
|
+
* @since 0.1.0
|
|
36
|
+
* @status experimental
|
|
37
|
+
* @category feedback
|
|
38
|
+
* @aliases Notification feed, Inbox, Activity
|
|
39
|
+
* @documentation https://helix.fusion.dev/components/notifications
|
|
40
|
+
*
|
|
41
|
+
* @slot - The notifications, as `helix-notification` children.
|
|
42
|
+
* @slot footer - Below the list, for a link to everything.
|
|
43
|
+
* @slot header - Above the list, for a title and the mark-all control.
|
|
44
|
+
*
|
|
45
|
+
* @event {HelixReadEvent} helix-read - Fired by an item, and by this element when everything is marked read. Cancelable.
|
|
46
|
+
*
|
|
47
|
+
* @csspart empty - Shown when there is nothing in the feed.
|
|
48
|
+
* @csspart footer - The region below the list.
|
|
49
|
+
* @csspart header - The region above the list.
|
|
50
|
+
* @csspart list - The list itself.
|
|
51
|
+
* @csspart loading - Shown while the feed is still on its way.
|
|
52
|
+
* @csspart mark-all - The control that marks everything read.
|
|
53
|
+
*/
|
|
54
|
+
let HelixHeadlessNotifications = class HelixHeadlessNotifications extends MixinCollection(HelixElement) {
|
|
55
|
+
constructor() {
|
|
56
|
+
super(...arguments);
|
|
57
|
+
/**
|
|
58
|
+
* Accessible name for the feed.
|
|
59
|
+
*/
|
|
60
|
+
this.label = '';
|
|
61
|
+
/**
|
|
62
|
+
* Whether to draw a control that marks everything read.
|
|
63
|
+
*/
|
|
64
|
+
this.markAll = false;
|
|
65
|
+
/**
|
|
66
|
+
* Label for that control.
|
|
67
|
+
*/
|
|
68
|
+
this.markAllLabel = 'Mark all as read';
|
|
69
|
+
/** Items arrive from the light DOM, which changes no property here. */
|
|
70
|
+
this.handleSlotChange = () => {
|
|
71
|
+
this.assign();
|
|
72
|
+
this.requestUpdate();
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* An item's own read event, heard on the way past, so the count follows.
|
|
76
|
+
*
|
|
77
|
+
* `unread` is derived from the items and nothing about an item changing tells
|
|
78
|
+
* Lit to look again. Not stopped: the event is the consumer's to hear, and
|
|
79
|
+
* this element is a bystander that happens to need to redraw.
|
|
80
|
+
*/
|
|
81
|
+
this.handleRead = () => {
|
|
82
|
+
/* After the item has applied it, not before: read synchronously the count
|
|
83
|
+
would be the one from before the change and the badge would trail by one
|
|
84
|
+
every time. */
|
|
85
|
+
queueMicrotask(() => this.requestUpdate());
|
|
86
|
+
};
|
|
87
|
+
this.handleMarkAll = () => {
|
|
88
|
+
this.markEveryoneRead();
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Nothing is assigned by name, so the items land in a list and the rest does not.
|
|
93
|
+
*
|
|
94
|
+
* `role="listitem"` under anything but a `list` is a list item belonging to
|
|
95
|
+
* nothing, and the items are ordinary children a consumer writes with no
|
|
96
|
+
* `slot`. Manual assignment is the only way to wrap them without editing the
|
|
97
|
+
* consumer's markup, which is a change a React consumer's hydration reports
|
|
98
|
+
* and does not patch up.
|
|
99
|
+
*/
|
|
100
|
+
static { this.shadowRootOptions = {
|
|
101
|
+
...HelixElement.shadowRootOptions,
|
|
102
|
+
slotAssignment: 'manual',
|
|
103
|
+
}; }
|
|
104
|
+
/**
|
|
105
|
+
* How many items are unread, counted from the items themselves.
|
|
106
|
+
*
|
|
107
|
+
* Read-only for the reason it is derived: a count the consumer could set is a
|
|
108
|
+
* second source of truth for something the items already know, and the first
|
|
109
|
+
* time the two disagreed the badge would be right and the list would not.
|
|
110
|
+
*
|
|
111
|
+
* **The attribute is written in `updated` rather than reflected, and the
|
|
112
|
+
* difference is a bug that shipped.** `@property({ reflect: true })` on a
|
|
113
|
+
* getter with no setter reflects once: Lit reflects what is in
|
|
114
|
+
* `changedProperties`, and nothing puts a derived getter there after the first
|
|
115
|
+
* update. Measured with two items, one marked read: the property answered 1
|
|
116
|
+
* and the attribute still said 2, so a badge reading the attribute showed a
|
|
117
|
+
* count for an item the reader had just opened.
|
|
118
|
+
*/
|
|
119
|
+
get unread() {
|
|
120
|
+
return this.items.filter((item) => !item.read).length;
|
|
121
|
+
}
|
|
122
|
+
/** The notifications declared as children, in the order they are written. */
|
|
123
|
+
get items() {
|
|
124
|
+
/* `?? []` is the server. Lit's element shim carries attributes and not a
|
|
125
|
+
tree, so `children` is undefined there, and this getter is reached from
|
|
126
|
+
`unread`, which is reflected and therefore read during the first update. */
|
|
127
|
+
return [...(this.children ?? [])].filter((child) => 'isNotification' in child && child.isNotification === true);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Marks every unread item read, and reports how many actually moved.
|
|
131
|
+
*
|
|
132
|
+
* **Through each item's own request rather than by writing its property**,
|
|
133
|
+
* which is what makes one refusal refuse one item: a consumer who owns some
|
|
134
|
+
* items and not others gets the right answer for each, and a server that
|
|
135
|
+
* rejects one does not silently mark the rest.
|
|
136
|
+
*/
|
|
137
|
+
markEveryoneRead() {
|
|
138
|
+
if (!this.dispatchEvent(new HelixReadEvent({ read: true }))) {
|
|
139
|
+
return 0;
|
|
140
|
+
}
|
|
141
|
+
let moved = 0;
|
|
142
|
+
for (const item of this.items) {
|
|
143
|
+
if (!item.read && item.markRead(true)) {
|
|
144
|
+
moved += 1;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
this.requestUpdate();
|
|
148
|
+
return moved;
|
|
149
|
+
}
|
|
150
|
+
assign() {
|
|
151
|
+
const root = this.renderRoot;
|
|
152
|
+
const list = root?.querySelector?.('slot[name="items"]');
|
|
153
|
+
if (!list?.assign) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const items = this.items;
|
|
157
|
+
list.assign(...items);
|
|
158
|
+
for (const name of ['header', 'footer']) {
|
|
159
|
+
const slot = root?.querySelector?.(`slot[name="${name}"]`);
|
|
160
|
+
slot?.assign?.(...[...this.children].filter((child) => child.getAttribute('slot') === name));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
connectedCallback() {
|
|
164
|
+
super.connectedCallback();
|
|
165
|
+
this.addEventListener('helix-read', this.handleRead);
|
|
166
|
+
}
|
|
167
|
+
disconnectedCallback() {
|
|
168
|
+
super.disconnectedCallback();
|
|
169
|
+
this.removeEventListener('helix-read', this.handleRead);
|
|
170
|
+
}
|
|
171
|
+
willUpdate(changed) {
|
|
172
|
+
super.willUpdate(changed);
|
|
173
|
+
hostAria(this.internals, { label: this.label || 'Notifications', role: 'region' });
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Says whether anything in the feed has media, so every item can hold the
|
|
177
|
+
* column open whether or not it has one of its own.
|
|
178
|
+
*
|
|
179
|
+
* **A fact no item can answer for itself**, which is why it is here. An item
|
|
180
|
+
* knows about its own media slot and nothing about its neighbors, so a feed
|
|
181
|
+
* where some rows have an avatar and some do not drew two different left
|
|
182
|
+
* edges for its text and had no way to notice: measured on a four item feed,
|
|
183
|
+
* the rows without media started their text 32 pixels to the left of the rows
|
|
184
|
+
* with it. The styled tier turns this into a width; this tier ships no
|
|
185
|
+
* stylesheet and is unaffected.
|
|
186
|
+
*
|
|
187
|
+
* Read off the light DOM rather than off the items, so it does not depend on
|
|
188
|
+
* which children have upgraded by the time this runs.
|
|
189
|
+
*/
|
|
190
|
+
markMedia() {
|
|
191
|
+
this.toggleState('media', this.items.some((item) => item.querySelector(':scope > [slot="media"]') !== null));
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Says on each region whether anything is in it.
|
|
195
|
+
*
|
|
196
|
+
* **The stylesheet used to ask, and could not.** The rule read
|
|
197
|
+
* `[part="header"]:not(:has(> slot:has(*)))`, which is two faults at once.
|
|
198
|
+
* `:has()` may not be nested inside `:has()`, so the selector fails to parse
|
|
199
|
+
* and the whole rule is discarded; and a slot's assigned nodes are not its DOM
|
|
200
|
+
* children, so `slot:has(*)` reports whether the slot has *fallback* rather
|
|
201
|
+
* than whether a consumer filled it, and would have been false either way.
|
|
202
|
+
* Both verified in a browser: `insertRule` throws a `SyntaxError` on the
|
|
203
|
+
* first, and an assigned element still leaves `slot.matches(':has(*)')` false.
|
|
204
|
+
* A feed with no header drew its rule under nothing, and one with no footer
|
|
205
|
+
* drew another over nothing.
|
|
206
|
+
*
|
|
207
|
+
* `slotFilled` is what the rest of the library already asks with. It is said
|
|
208
|
+
* on the region inside this shadow root rather than on the host, because an
|
|
209
|
+
* attribute written onto the host is a change to markup the consumer rendered,
|
|
210
|
+
* which React reports on hydration and does not patch up.
|
|
211
|
+
*/
|
|
212
|
+
markEmpty() {
|
|
213
|
+
/* The header is not empty while this element is drawing its own control into
|
|
214
|
+
it, which is the case the old selector spelled with a second `:not`. */
|
|
215
|
+
this.markRegion('header', ['header'], '[part="mark-all"]');
|
|
216
|
+
this.markRegion('footer', ['footer']);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* One region, hidden when its slot holds nothing and nothing of ours fills it.
|
|
220
|
+
*
|
|
221
|
+
* `hidden` beside the `data-empty` mirror: `data-empty` is the hook the styled
|
|
222
|
+
* sheet reads, and this tier ships no sheet, so an empty region left in the box
|
|
223
|
+
* tree would be a gap a headless consumer cannot close without knowing to look
|
|
224
|
+
* for it. The styled rule stays too, because that sheet sets `display` on these
|
|
225
|
+
* parts and therefore outranks the UA's `[hidden]` one.
|
|
226
|
+
*/
|
|
227
|
+
markRegion(part, slots, occupied) {
|
|
228
|
+
const region = this.renderRoot?.querySelector(`[part="${part}"]`);
|
|
229
|
+
const empty = !slots.some((name) => slotFilled(this.renderRoot?.querySelector(`slot[name="${name}"]`))) && !(occupied && this.renderRoot?.querySelector(occupied));
|
|
230
|
+
region?.toggleAttribute('data-empty', empty);
|
|
231
|
+
region?.toggleAttribute('hidden', empty);
|
|
232
|
+
}
|
|
233
|
+
updated(changed) {
|
|
234
|
+
super.updated(changed);
|
|
235
|
+
/* Before `markEmpty`, which reads what is assigned: on a feed with no items
|
|
236
|
+
nothing else ever schedules a second update, so a header asked about
|
|
237
|
+
before its slot was filled stayed hidden for the life of the element. The
|
|
238
|
+
empty feed is the one state where the header is the only thing on screen,
|
|
239
|
+
and it was the one state that lost it. */
|
|
240
|
+
this.assign();
|
|
241
|
+
this.markEmpty();
|
|
242
|
+
this.markMedia();
|
|
243
|
+
/* Written after the render rather than reflected during it, so it follows
|
|
244
|
+
every change rather than only the first, and so the server's output and a
|
|
245
|
+
hydrating consumer's markup agree that neither has it yet. */
|
|
246
|
+
/* **Zero is the absence of the attribute, not `unread="0"`.** Writing it at
|
|
247
|
+
rest put an attribute on the host that a consumer's server never sent, and
|
|
248
|
+
the comment above claimed the opposite: writing in `updated` is not "after
|
|
249
|
+
hydration", it is the same microtask checkpoint `firstUpdated` runs in,
|
|
250
|
+
which is exactly how `data-settled` was a bug on three routes. Only a
|
|
251
|
+
departure from resting writes. */
|
|
252
|
+
const unread = this.unread > 0 ? String(this.unread) : null;
|
|
253
|
+
if (this.getAttribute('unread') !== unread) {
|
|
254
|
+
if (unread === null) {
|
|
255
|
+
this.removeAttribute('unread');
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
this.setAttribute('unread', unread);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
render() {
|
|
263
|
+
const hasItems = this.items.length > 0;
|
|
264
|
+
return html `<div part="header">
|
|
265
|
+
<slot name="header"></slot>
|
|
266
|
+
${this.markAll && this.unread > 0
|
|
267
|
+
? html `<button part="mark-all" type="button" @click=${this.handleMarkAll}>
|
|
268
|
+
${this.markAllLabel}
|
|
269
|
+
</button>`
|
|
270
|
+
: nothing}
|
|
271
|
+
</div>
|
|
272
|
+
<div part="list" role="list" aria-busy=${this.loading ? 'true' : nothing}>
|
|
273
|
+
<slot name="items" @slotchange=${this.handleSlotChange}></slot>
|
|
274
|
+
${this.renderStatus(hasItems)}
|
|
275
|
+
</div>
|
|
276
|
+
<div part="footer"><slot name="footer"></slot></div>`;
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
__decorate([
|
|
280
|
+
property()
|
|
281
|
+
], HelixHeadlessNotifications.prototype, "label", void 0);
|
|
282
|
+
__decorate([
|
|
283
|
+
property({ attribute: 'mark-all', type: Boolean })
|
|
284
|
+
], HelixHeadlessNotifications.prototype, "markAll", void 0);
|
|
285
|
+
__decorate([
|
|
286
|
+
property({ attribute: 'mark-all-label' })
|
|
287
|
+
], HelixHeadlessNotifications.prototype, "markAllLabel", void 0);
|
|
288
|
+
HelixHeadlessNotifications = __decorate([
|
|
289
|
+
customElement('helix-headless-notifications')
|
|
290
|
+
], HelixHeadlessNotifications);
|
|
291
|
+
export { HelixHeadlessNotifications };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './root/number-input-root.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './root/number-input-root.js';
|