@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,154 @@
|
|
|
1
|
+
import { type TemplateResult } from 'lit';
|
|
2
|
+
import { HelixHeadlessIconButton } from '../../icon-button/root/icon-button-root.js';
|
|
3
|
+
import '../../tooltip/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* @summary A button that puts a string on the clipboard and says it did.
|
|
6
|
+
*
|
|
7
|
+
* @description
|
|
8
|
+
* **The confirmation is the component.** Writing to the clipboard is three
|
|
9
|
+
* lines; what makes this worth an element is that the platform gives a reader
|
|
10
|
+
* no feedback at all. A press that copies and looks identical to a press that
|
|
11
|
+
* failed is a control nobody trusts, so they press it again, and the second
|
|
12
|
+
* press is indistinguishable from the first.
|
|
13
|
+
*
|
|
14
|
+
* **Announced after the write, never before.** A clipboard write is a
|
|
15
|
+
* permission the browser may refuse, and it is refused for real reasons: an
|
|
16
|
+
* insecure origin, a document that is not focused, a user agent that requires a
|
|
17
|
+
* gesture this press did not qualify as. So the confirmation and the event both
|
|
18
|
+
* wait for the promise, and a refusal leaves the button exactly as it was.
|
|
19
|
+
* `HelixCopyEvent` is not cancelable for the same reason: by the time there is
|
|
20
|
+
* anything to say, it has already happened.
|
|
21
|
+
*
|
|
22
|
+
* **An icon button, extending IconButton.** Both of this button's faces are
|
|
23
|
+
* icons and it never carries a word, so it is the square control rather than a
|
|
24
|
+
* text button that happens to hold a glyph: it inherits the square box, and
|
|
25
|
+
* with it the rule that an icon-only control must be named. `label` is not
|
|
26
|
+
* optional here for the same reason it is not optional there, and the two
|
|
27
|
+
* faces make it sharper: the accessible name has to describe the press, not
|
|
28
|
+
* whichever picture is showing when a reader arrives.
|
|
29
|
+
*
|
|
30
|
+
* `data-copied`, not a reflected `copied`. State never reflects here: a
|
|
31
|
+
* serialized `copied` attribute would come back from a paste as a button
|
|
32
|
+
* claiming to have copied something it never held.
|
|
33
|
+
*
|
|
34
|
+
* @since 0.1.0
|
|
35
|
+
* @status experimental
|
|
36
|
+
* @category actions
|
|
37
|
+
* @aliases Copy, Copy to clipboard
|
|
38
|
+
* @documentation https://helix.fusion.dev/components/copy-button
|
|
39
|
+
*
|
|
40
|
+
* @slot - The resting icon. Falls back to a clipboard.
|
|
41
|
+
* @slot copied - What replaces it once the write succeeds. Falls back to a check.
|
|
42
|
+
*
|
|
43
|
+
* @event {HelixCopyEvent} helix-copy - Fired after the clipboard write succeeds.
|
|
44
|
+
*
|
|
45
|
+
* @csspart button - The inner button.
|
|
46
|
+
* @csspart mark - The clipboard glyph, and the confirmation that replaces it.
|
|
47
|
+
* @csspart tooltip - The bubble, forwarded from the tooltip inside.
|
|
48
|
+
* @csspart tooltip-arrow - The point, resting against the trigger.
|
|
49
|
+
*/
|
|
50
|
+
export declare class HelixHeadlessCopyButton extends HelixHeadlessIconButton {
|
|
51
|
+
/**
|
|
52
|
+
* What goes on the clipboard.
|
|
53
|
+
*
|
|
54
|
+
* **Narrows `Button.value`, which is the submit value, and the two agree.**
|
|
55
|
+
* A copy button is `type="button"` and never submits, so the inherited
|
|
56
|
+
* meaning has nothing to act on; where a consumer changes the type, what it
|
|
57
|
+
* submits is what it copies, which is the reading anybody would expect of one
|
|
58
|
+
* property called `value`. Declared here rather than inherited because the
|
|
59
|
+
* clipboard is what this component is about and its own page should say so.
|
|
60
|
+
*/
|
|
61
|
+
value: string;
|
|
62
|
+
/**
|
|
63
|
+
* What it is called, and says, before a press.
|
|
64
|
+
*
|
|
65
|
+
* Defaulted rather than left empty. An icon-only control must be named, and
|
|
66
|
+
* the name of this one is not a judgment call: every copy button in the
|
|
67
|
+
* world is called Copy. A consumer with a better word still sets it.
|
|
68
|
+
*/
|
|
69
|
+
label: string;
|
|
70
|
+
/**
|
|
71
|
+
* What it is called, and says, after one.
|
|
72
|
+
*
|
|
73
|
+
* `attribute` written out, because Lit lowercases a property name rather than
|
|
74
|
+
* dash-casing it, and `copiedlabel` is not what anyone would type.
|
|
75
|
+
*/
|
|
76
|
+
copiedLabel: string;
|
|
77
|
+
/**
|
|
78
|
+
* The words for the state it is in, used twice on purpose.
|
|
79
|
+
*
|
|
80
|
+
* The tooltip is the visible confirmation and the accessible name is the
|
|
81
|
+
* spoken one, and they have to be the same words. A tooltip that changes to
|
|
82
|
+
* Copied while the accessible name stays Copy tells a sighted reader it
|
|
83
|
+
* worked and leaves a screen reader user pressing a button that never
|
|
84
|
+
* acknowledges anything. Changing the name of the focused element is what
|
|
85
|
+
* makes the announcement happen at all.
|
|
86
|
+
*/
|
|
87
|
+
private get says();
|
|
88
|
+
/**
|
|
89
|
+
* The write, the confirmation, the timer and the event, all of them shared.
|
|
90
|
+
*
|
|
91
|
+
* **This was a second implementation of `CopyController` with the hard half
|
|
92
|
+
* left out.** It reached straight for `navigator.clipboard.writeText` and had
|
|
93
|
+
* no `execCommand` fallback, so it was inert in a sandboxed iframe without
|
|
94
|
+
* `allow-same-origin`, which is the sandbox every example on the docs site
|
|
95
|
+
* runs in: the guard on the API existing does not help there, because the
|
|
96
|
+
* object exists and the write rejects. A copy button that does nothing is
|
|
97
|
+
* indistinguishable from a broken one, and this one was doing nothing in the
|
|
98
|
+
* one place a reader is most likely to try it.
|
|
99
|
+
*
|
|
100
|
+
* The controller also carries the two things this had wrong on its own terms:
|
|
101
|
+
* it checks the host is still connected after the await, because writing is
|
|
102
|
+
* asynchronous and `hostDisconnected` clears a timer that does not exist yet,
|
|
103
|
+
* and it registers itself so the timer is released without an override here.
|
|
104
|
+
*/
|
|
105
|
+
private readonly clipboard;
|
|
106
|
+
private get copied();
|
|
107
|
+
private readonly handleCopy;
|
|
108
|
+
/**
|
|
109
|
+
* Both faces, drawn rather than demanded.
|
|
110
|
+
*
|
|
111
|
+
* Slot fallback, which is this library's answer for content a component has a
|
|
112
|
+
* sensible default for: a copy button with no icons is not a copy button, and
|
|
113
|
+
* making every consumer slot the same clipboard is asking them to supply the
|
|
114
|
+
* one thing the component is sure about. Slotting anything replaces it, at
|
|
115
|
+
* assignment time, with no property to set and nothing for the server and the
|
|
116
|
+
* client to disagree about.
|
|
117
|
+
*/
|
|
118
|
+
private static icon;
|
|
119
|
+
protected render(): TemplateResult;
|
|
120
|
+
/**
|
|
121
|
+
* The mark for the resting state, behind a seam a tier can move.
|
|
122
|
+
*
|
|
123
|
+
* Two seams and not one taking the state, because the two marks are two
|
|
124
|
+
* decisions: a tier changing the clipboard for a house glyph has no reason to
|
|
125
|
+
* touch the confirmation, and the stylesheet already treats them separately,
|
|
126
|
+
* the check holding its green through a hover where this one does not.
|
|
127
|
+
*/
|
|
128
|
+
protected renderCopyIcon(): TemplateResult;
|
|
129
|
+
/**
|
|
130
|
+
* The mark for the moment after a press, behind a seam of its own.
|
|
131
|
+
*
|
|
132
|
+
* Both slots render and CSS shows one, which is why this is a slot rather
|
|
133
|
+
* than a branch: swapping which slot exists would unassign the consumer's
|
|
134
|
+
* content on every press, and an element that leaves and re-enters the tree
|
|
135
|
+
* loses focus with it, so the button a reader just pressed would stop being
|
|
136
|
+
* the focused element mid-press.
|
|
137
|
+
*/
|
|
138
|
+
protected renderCopiedIcon(): TemplateResult;
|
|
139
|
+
/**
|
|
140
|
+
* The bubble the control sits inside, behind a seam.
|
|
141
|
+
*
|
|
142
|
+
* It takes the control rather than rendering it, because this one wraps: a
|
|
143
|
+
* tier above overriding it can drop the tooltip entirely and return the
|
|
144
|
+
* button, put something else around it, or keep the tooltip and change only
|
|
145
|
+
* how it is anchored, and every one of those is a normal thing to want.
|
|
146
|
+
* Rendering the button here as well would make all three a rewrite.
|
|
147
|
+
*/
|
|
148
|
+
protected renderTooltip(control: TemplateResult): TemplateResult;
|
|
149
|
+
}
|
|
150
|
+
declare global {
|
|
151
|
+
interface HTMLElementTagNameMap {
|
|
152
|
+
'helix-headless-copy-button': HelixHeadlessCopyButton;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
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
|
+
var HelixHeadlessCopyButton_1;
|
|
8
|
+
import { CopyController, customElement } from '@fusion.dev/helix-core';
|
|
9
|
+
import { check, copy } from '@fusion.dev/helix-icons';
|
|
10
|
+
import { nothing } from 'lit';
|
|
11
|
+
import { property } from 'lit/decorators.js';
|
|
12
|
+
import { unsafeSVG } from 'lit/directives/unsafe-svg.js';
|
|
13
|
+
import { html } from 'lit/static-html.js';
|
|
14
|
+
import { HelixHeadlessIconButton } from '../../icon-button/root/icon-button-root.js';
|
|
15
|
+
import '../../tooltip/index.js';
|
|
16
|
+
/** How long the confirmation stands before the button goes back to itself. */
|
|
17
|
+
const CONFIRM = 1600;
|
|
18
|
+
/**
|
|
19
|
+
* @summary A button that puts a string on the clipboard and says it did.
|
|
20
|
+
*
|
|
21
|
+
* @description
|
|
22
|
+
* **The confirmation is the component.** Writing to the clipboard is three
|
|
23
|
+
* lines; what makes this worth an element is that the platform gives a reader
|
|
24
|
+
* no feedback at all. A press that copies and looks identical to a press that
|
|
25
|
+
* failed is a control nobody trusts, so they press it again, and the second
|
|
26
|
+
* press is indistinguishable from the first.
|
|
27
|
+
*
|
|
28
|
+
* **Announced after the write, never before.** A clipboard write is a
|
|
29
|
+
* permission the browser may refuse, and it is refused for real reasons: an
|
|
30
|
+
* insecure origin, a document that is not focused, a user agent that requires a
|
|
31
|
+
* gesture this press did not qualify as. So the confirmation and the event both
|
|
32
|
+
* wait for the promise, and a refusal leaves the button exactly as it was.
|
|
33
|
+
* `HelixCopyEvent` is not cancelable for the same reason: by the time there is
|
|
34
|
+
* anything to say, it has already happened.
|
|
35
|
+
*
|
|
36
|
+
* **An icon button, extending IconButton.** Both of this button's faces are
|
|
37
|
+
* icons and it never carries a word, so it is the square control rather than a
|
|
38
|
+
* text button that happens to hold a glyph: it inherits the square box, and
|
|
39
|
+
* with it the rule that an icon-only control must be named. `label` is not
|
|
40
|
+
* optional here for the same reason it is not optional there, and the two
|
|
41
|
+
* faces make it sharper: the accessible name has to describe the press, not
|
|
42
|
+
* whichever picture is showing when a reader arrives.
|
|
43
|
+
*
|
|
44
|
+
* `data-copied`, not a reflected `copied`. State never reflects here: a
|
|
45
|
+
* serialized `copied` attribute would come back from a paste as a button
|
|
46
|
+
* claiming to have copied something it never held.
|
|
47
|
+
*
|
|
48
|
+
* @since 0.1.0
|
|
49
|
+
* @status experimental
|
|
50
|
+
* @category actions
|
|
51
|
+
* @aliases Copy, Copy to clipboard
|
|
52
|
+
* @documentation https://helix.fusion.dev/components/copy-button
|
|
53
|
+
*
|
|
54
|
+
* @slot - The resting icon. Falls back to a clipboard.
|
|
55
|
+
* @slot copied - What replaces it once the write succeeds. Falls back to a check.
|
|
56
|
+
*
|
|
57
|
+
* @event {HelixCopyEvent} helix-copy - Fired after the clipboard write succeeds.
|
|
58
|
+
*
|
|
59
|
+
* @csspart button - The inner button.
|
|
60
|
+
* @csspart mark - The clipboard glyph, and the confirmation that replaces it.
|
|
61
|
+
* @csspart tooltip - The bubble, forwarded from the tooltip inside.
|
|
62
|
+
* @csspart tooltip-arrow - The point, resting against the trigger.
|
|
63
|
+
*/
|
|
64
|
+
let HelixHeadlessCopyButton = HelixHeadlessCopyButton_1 = class HelixHeadlessCopyButton extends HelixHeadlessIconButton {
|
|
65
|
+
constructor() {
|
|
66
|
+
super(...arguments);
|
|
67
|
+
/**
|
|
68
|
+
* What goes on the clipboard.
|
|
69
|
+
*
|
|
70
|
+
* **Narrows `Button.value`, which is the submit value, and the two agree.**
|
|
71
|
+
* A copy button is `type="button"` and never submits, so the inherited
|
|
72
|
+
* meaning has nothing to act on; where a consumer changes the type, what it
|
|
73
|
+
* submits is what it copies, which is the reading anybody would expect of one
|
|
74
|
+
* property called `value`. Declared here rather than inherited because the
|
|
75
|
+
* clipboard is what this component is about and its own page should say so.
|
|
76
|
+
*/
|
|
77
|
+
this.value = '';
|
|
78
|
+
/**
|
|
79
|
+
* What it is called, and says, before a press.
|
|
80
|
+
*
|
|
81
|
+
* Defaulted rather than left empty. An icon-only control must be named, and
|
|
82
|
+
* the name of this one is not a judgment call: every copy button in the
|
|
83
|
+
* world is called Copy. A consumer with a better word still sets it.
|
|
84
|
+
*/
|
|
85
|
+
this.label = 'Copy';
|
|
86
|
+
/**
|
|
87
|
+
* What it is called, and says, after one.
|
|
88
|
+
*
|
|
89
|
+
* `attribute` written out, because Lit lowercases a property name rather than
|
|
90
|
+
* dash-casing it, and `copiedlabel` is not what anyone would type.
|
|
91
|
+
*/
|
|
92
|
+
this.copiedLabel = 'Copied';
|
|
93
|
+
/*
|
|
94
|
+
* Whether the confirmation is showing.
|
|
95
|
+
*
|
|
96
|
+
* `@state`, so it is the component's and not API: a consumer setting this
|
|
97
|
+
* would be claiming a copy happened, which is the one thing this element
|
|
98
|
+
* exists to be honest about.
|
|
99
|
+
*/
|
|
100
|
+
/**
|
|
101
|
+
* The write, the confirmation, the timer and the event, all of them shared.
|
|
102
|
+
*
|
|
103
|
+
* **This was a second implementation of `CopyController` with the hard half
|
|
104
|
+
* left out.** It reached straight for `navigator.clipboard.writeText` and had
|
|
105
|
+
* no `execCommand` fallback, so it was inert in a sandboxed iframe without
|
|
106
|
+
* `allow-same-origin`, which is the sandbox every example on the docs site
|
|
107
|
+
* runs in: the guard on the API existing does not help there, because the
|
|
108
|
+
* object exists and the write rejects. A copy button that does nothing is
|
|
109
|
+
* indistinguishable from a broken one, and this one was doing nothing in the
|
|
110
|
+
* one place a reader is most likely to try it.
|
|
111
|
+
*
|
|
112
|
+
* The controller also carries the two things this had wrong on its own terms:
|
|
113
|
+
* it checks the host is still connected after the await, because writing is
|
|
114
|
+
* asynchronous and `hostDisconnected` clears a timer that does not exist yet,
|
|
115
|
+
* and it registers itself so the timer is released without an override here.
|
|
116
|
+
*/
|
|
117
|
+
this.clipboard = new CopyController(this, { after: CONFIRM });
|
|
118
|
+
this.handleCopy = async () => {
|
|
119
|
+
if (this.isDisabled) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
await this.clipboard.copy(this.value);
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The words for the state it is in, used twice on purpose.
|
|
127
|
+
*
|
|
128
|
+
* The tooltip is the visible confirmation and the accessible name is the
|
|
129
|
+
* spoken one, and they have to be the same words. A tooltip that changes to
|
|
130
|
+
* Copied while the accessible name stays Copy tells a sighted reader it
|
|
131
|
+
* worked and leaves a screen reader user pressing a button that never
|
|
132
|
+
* acknowledges anything. Changing the name of the focused element is what
|
|
133
|
+
* makes the announcement happen at all.
|
|
134
|
+
*/
|
|
135
|
+
get says() {
|
|
136
|
+
return this.copied ? this.copiedLabel : this.label;
|
|
137
|
+
}
|
|
138
|
+
get copied() {
|
|
139
|
+
return this.clipboard.copied;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Both faces, drawn rather than demanded.
|
|
143
|
+
*
|
|
144
|
+
* Slot fallback, which is this library's answer for content a component has a
|
|
145
|
+
* sensible default for: a copy button with no icons is not a copy button, and
|
|
146
|
+
* making every consumer slot the same clipboard is asking them to supply the
|
|
147
|
+
* one thing the component is sure about. Slotting anything replaces it, at
|
|
148
|
+
* assignment time, with no property to set and nothing for the server and the
|
|
149
|
+
* client to disagree about.
|
|
150
|
+
*/
|
|
151
|
+
static icon(glyph) {
|
|
152
|
+
return html `<svg part="mark" fill="currentColor" viewBox=${glyph.viewBox} aria-hidden="true">
|
|
153
|
+
${unsafeSVG(glyph.content)}
|
|
154
|
+
</svg>`;
|
|
155
|
+
}
|
|
156
|
+
render() {
|
|
157
|
+
return this.renderTooltip(html `<button
|
|
158
|
+
part="button"
|
|
159
|
+
type="button"
|
|
160
|
+
aria-label=${this.says}
|
|
161
|
+
data-copied=${this.copied ? '' : nothing}
|
|
162
|
+
?disabled=${this.isDisabled}
|
|
163
|
+
@click=${this.handleCopy}
|
|
164
|
+
>
|
|
165
|
+
${this.renderCopiedIcon()} ${this.renderCopyIcon()}
|
|
166
|
+
</button>`);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* The mark for the resting state, behind a seam a tier can move.
|
|
170
|
+
*
|
|
171
|
+
* Two seams and not one taking the state, because the two marks are two
|
|
172
|
+
* decisions: a tier changing the clipboard for a house glyph has no reason to
|
|
173
|
+
* touch the confirmation, and the stylesheet already treats them separately,
|
|
174
|
+
* the check holding its green through a hover where this one does not.
|
|
175
|
+
*/
|
|
176
|
+
renderCopyIcon() {
|
|
177
|
+
return html `<slot ?hidden=${this.copied}>${HelixHeadlessCopyButton_1.icon(copy)}</slot>`;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* The mark for the moment after a press, behind a seam of its own.
|
|
181
|
+
*
|
|
182
|
+
* Both slots render and CSS shows one, which is why this is a slot rather
|
|
183
|
+
* than a branch: swapping which slot exists would unassign the consumer's
|
|
184
|
+
* content on every press, and an element that leaves and re-enters the tree
|
|
185
|
+
* loses focus with it, so the button a reader just pressed would stop being
|
|
186
|
+
* the focused element mid-press.
|
|
187
|
+
*/
|
|
188
|
+
renderCopiedIcon() {
|
|
189
|
+
return html `<slot name="copied" ?hidden=${!this.copied}
|
|
190
|
+
>${HelixHeadlessCopyButton_1.icon(check)}</slot
|
|
191
|
+
>`;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* The bubble the control sits inside, behind a seam.
|
|
195
|
+
*
|
|
196
|
+
* It takes the control rather than rendering it, because this one wraps: a
|
|
197
|
+
* tier above overriding it can drop the tooltip entirely and return the
|
|
198
|
+
* button, put something else around it, or keep the tooltip and change only
|
|
199
|
+
* how it is anchored, and every one of those is a normal thing to want.
|
|
200
|
+
* Rendering the button here as well would make all three a rewrite.
|
|
201
|
+
*/
|
|
202
|
+
renderTooltip(control) {
|
|
203
|
+
/* `persist`, because this bubble is the confirmation rather than a hint
|
|
204
|
+
about it. Without it the tooltip hid on the same click that swapped its
|
|
205
|
+
content to Copied, so the words this component takes such care over were
|
|
206
|
+
written and then taken off screen in the same frame. */
|
|
207
|
+
return html `<${this.tag('tooltip')} content=${this.says} persist
|
|
208
|
+
exportparts="arrow: tooltip-arrow, tooltip">
|
|
209
|
+
${control}
|
|
210
|
+
</${this.tag('tooltip')}>`;
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
__decorate([
|
|
214
|
+
property()
|
|
215
|
+
], HelixHeadlessCopyButton.prototype, "value", void 0);
|
|
216
|
+
__decorate([
|
|
217
|
+
property()
|
|
218
|
+
], HelixHeadlessCopyButton.prototype, "label", void 0);
|
|
219
|
+
__decorate([
|
|
220
|
+
property({ attribute: 'copied-label' })
|
|
221
|
+
], HelixHeadlessCopyButton.prototype, "copiedLabel", void 0);
|
|
222
|
+
HelixHeadlessCopyButton = HelixHeadlessCopyButton_1 = __decorate([
|
|
223
|
+
customElement('helix-headless-copy-button')
|
|
224
|
+
], HelixHeadlessCopyButton);
|
|
225
|
+
export { HelixHeadlessCopyButton };
|