@ds-mo/ui 15.9.1 → 15.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +1 -1
- package/dist/agent.json +159 -1
- package/dist/angular/ds-map-marker.d.ts +18 -0
- package/dist/angular/ds-map-marker.js +43 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +1 -0
- package/dist/angular/proxies.d.ts +1 -0
- package/dist/angular/proxies.js +1 -0
- package/dist/components/THIRD-PARTY-NOTICES +1 -1
- package/dist/components/bundled-dependencies.json +1 -1
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-bar-action.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-page-title.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-breadcrumb.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-inverted.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-calendar.js +1 -1
- package/dist/components/ds-card-action-center.js +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-navigation.js +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-settings-scope.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-checkbox-group.js +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-data-customize.js +1 -1
- package/dist/components/ds-data-filter.js +1 -1
- package/dist/components/ds-data-group.js +1 -1
- package/dist/components/ds-data-preferences.js +1 -1
- package/dist/components/ds-data-saved-views.js +1 -1
- package/dist/components/ds-data-search.js +1 -1
- package/dist/components/ds-data-sort.js +1 -1
- package/dist/components/ds-data-toolbar.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-filter-menu.js +1 -1
- package/dist/components/ds-inline-banner-settings.js +1 -1
- package/dist/components/ds-input-date.js +1 -1
- package/dist/components/ds-input-time.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-map-cluster-marker.js +1 -1
- package/dist/components/ds-map-cluster-marker.js.map +1 -1
- package/dist/components/ds-map-entity-marker.js +1 -1
- package/dist/components/ds-map-entity-marker.js.map +1 -1
- package/dist/components/ds-map-marker.d.ts +11 -0
- package/dist/components/ds-map-marker.js +2 -0
- package/dist/components/ds-map-marker.js.map +1 -0
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-bubble.js +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-navigation-tab-group.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-paper-texture.js +1 -1
- package/dist/components/ds-radio-tile.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-score.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-select-toggle.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-setting-row-checkbox.js +1 -1
- package/dist/components/ds-setting-row-radio.js +1 -1
- package/dist/components/ds-setting-row-toggle.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-textarea.js +1 -1
- package/dist/components/ds-time-picker.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/{p-BREDkBUv.js → p-0EpjqRWc.js} +2 -2
- package/dist/components/{p-D3JCih82.js → p-2ZV8JA88.js} +2 -2
- package/dist/components/p-6QYDIPd1.js +2 -0
- package/dist/components/{p-BcmJBzB6.js.map → p-6QYDIPd1.js.map} +1 -1
- package/dist/components/{p-B1dnisok.js → p-87FjWil8.js} +2 -2
- package/dist/components/{p-C4t7HnfZ.js → p-BBZz2Dvg.js} +2 -2
- package/dist/components/p-BC9xYdJD.js +2 -0
- package/dist/components/{p-CWc6Blcp.js.map → p-BC9xYdJD.js.map} +1 -1
- package/dist/components/p-BE9ladwu.js +2 -0
- package/dist/components/{p-B9ZhRwE3.js.map → p-BE9ladwu.js.map} +1 -1
- package/dist/components/{p-Du8LT8JS.js → p-BM-UYlIS.js} +2 -2
- package/dist/components/{p-C4YUkrr0.js → p-BQE2Uj4p.js} +2 -2
- package/dist/components/{p-BjD1eFx6.js → p-BfdYb8L4.js} +2 -2
- package/dist/components/{p-SXaH5TeC.js → p-BgpzSEWv.js} +2 -2
- package/dist/components/{p-YFjXYN8s.js → p-BjLGayCj.js} +2 -2
- package/dist/components/{p-kL4EOsx5.js → p-BrB05_X8.js} +2 -2
- package/dist/components/{p-Bls48_RF.js → p-BtSEQ-FW.js} +2 -2
- package/dist/components/{p-B7EfrM6C.js → p-BuwYiPCW.js} +2 -2
- package/dist/components/{p-Tf6odBOV.js → p-Bx_72ylJ.js} +2 -2
- package/dist/components/{p-C2e7BkNn.js → p-CAARHqjE.js} +2 -2
- package/dist/components/{p-D1tmszmN.js → p-CEm0AoDR.js} +2 -2
- package/dist/components/{p-DiyL2sI5.js → p-CHYYRdRJ.js} +2 -2
- package/dist/components/{p-BbvAWFJA.js → p-CTAF7SkL.js} +2 -2
- package/dist/components/{p-Bjm-Rk_x.js → p-CYRTkP1A.js} +2 -2
- package/dist/components/p-CeXf9-X3.js.map +1 -1
- package/dist/components/{p--_bPiNCd.js → p-CgYDQSLW.js} +2 -2
- package/dist/components/{p-eKnJNQtL.js → p-Ch00yccW.js} +2 -2
- package/dist/components/{p-CG4vPDhg.js → p-ChsBscqZ.js} +2 -2
- package/dist/components/p-CipTqNIr.js +2 -0
- package/dist/components/{p-zopMP2ze.js.map → p-CipTqNIr.js.map} +1 -1
- package/dist/components/{p-C7_awFtr.js → p-Cnzry0_v.js} +2 -2
- package/dist/components/{p-CantpOo3.js → p-CqfYCn-e.js} +2 -2
- package/dist/components/{p-BAcdqJaa.js → p-CsPqGA8B.js} +2 -2
- package/dist/components/{p-BNN9KkXe.js → p-Cw1ljgW1.js} +2 -2
- package/dist/components/{p-BWJb2rih.js → p-CzTJAO2J.js} +2 -2
- package/dist/components/{p-IfsszNF0.js → p-D2rASHHq.js} +2 -2
- package/dist/components/{p-3SCy1PHa.js → p-DDawngok.js} +2 -2
- package/dist/components/{p-CWAeg9jl.js → p-DKg181YU.js} +2 -2
- package/dist/components/{p-5aZVNYQz.js → p-DQeUT9o2.js} +2 -2
- package/dist/components/{p-BqZWKYsS.js → p-DSpKpoSG.js} +2 -2
- package/dist/components/{p-DagrkX2v.js → p-DoRgzvup.js} +2 -2
- package/dist/components/{p-CJSIvfpo.js → p-DwuqJhR5.js} +2 -2
- package/dist/components/{p-C6EXrs1S.js → p-Dx7wJaLv.js} +2 -2
- package/dist/components/{p-BWnL2SWn.js → p-M9pOLcyK.js} +2 -2
- package/dist/components/{p-BJf49edB.js → p-PNY7auMh.js} +2 -2
- package/dist/components/{p-topqlGsI.js → p-YmJYwnhW.js} +2 -2
- package/dist/components/{p-Dvw7N7TH.js → p-cktJHlYv.js} +2 -2
- package/dist/components/{p-n_OBbh94.js → p-hWKa8Jn8.js} +2 -2
- package/dist/components/{p-UWU23pbX.js → p-hmvu1lmP.js} +2 -2
- package/dist/components/{p-D-TeAVxE.js → p-iEhBF5Oi.js} +2 -2
- package/dist/components/{p-C62g3d5y.js → p-kQ6wvk-r.js} +2 -2
- package/dist/components/p-lJeAJKa5.js +2 -0
- package/dist/components/{p-DWXpMWIp.js.map → p-lJeAJKa5.js.map} +1 -1
- package/dist/components/{p-DcMbWqTd.js → p-uAtciSyr.js} +2 -2
- package/dist/components/{p-QGtBlTMt.js → p-xCqqM1Rg.js} +2 -2
- package/dist/components/{p-CCoJ7CBB.js → p-y2Sdv9M3.js} +2 -2
- package/dist/components/{p-DHpcv_Os.js → p-z_8aZHHo.js} +2 -2
- package/dist/docs/components.json +251 -1
- package/dist/lint/index.js +1 -1
- package/dist/mcp-data/registry/agent-activity.json +1 -1
- package/dist/mcp-data/registry/agent-questionnaire.json +1 -1
- package/dist/mcp-data/registry/agent-response.json +1 -1
- package/dist/mcp-data/registry/agent-source-list.json +1 -1
- package/dist/mcp-data/registry/agent-tool-call.json +1 -1
- package/dist/mcp-data/registry/attachment-list.json +1 -1
- package/dist/mcp-data/registry/avatar.json +1 -1
- package/dist/mcp-data/registry/badge.json +1 -1
- package/dist/mcp-data/registry/banner.json +1 -1
- package/dist/mcp-data/registry/bar-action.json +1 -1
- package/dist/mcp-data/registry/bar-nav.json +1 -1
- package/dist/mcp-data/registry/bar-page-title.json +1 -1
- package/dist/mcp-data/registry/bar-title.json +1 -1
- package/dist/mcp-data/registry/bar-workflow.json +1 -1
- package/dist/mcp-data/registry/breadcrumb.json +1 -1
- package/dist/mcp-data/registry/button-filled.json +1 -1
- package/dist/mcp-data/registry/button-inverted.json +1 -1
- package/dist/mcp-data/registry/button-unfilled.json +1 -1
- package/dist/mcp-data/registry/calendar.json +1 -1
- package/dist/mcp-data/registry/card-action-center.json +1 -1
- package/dist/mcp-data/registry/card-chart.json +1 -1
- package/dist/mcp-data/registry/card-navigation.json +1 -1
- package/dist/mcp-data/registry/card-overview.json +1 -1
- package/dist/mcp-data/registry/card-setting.json +1 -1
- package/dist/mcp-data/registry/card-settings-scope.json +1 -1
- package/dist/mcp-data/registry/chart-legend.json +1 -1
- package/dist/mcp-data/registry/chart.json +1 -1
- package/dist/mcp-data/registry/checkbox-group.json +1 -1
- package/dist/mcp-data/registry/checkbox.json +1 -1
- package/dist/mcp-data/registry/chip.json +1 -1
- package/dist/mcp-data/registry/code-block.json +1 -1
- package/dist/mcp-data/registry/conversation-list-item.json +1 -1
- package/dist/mcp-data/registry/conversation-list-section.json +1 -1
- package/dist/mcp-data/registry/conversation-list.json +1 -1
- package/dist/mcp-data/registry/data-customize.json +1 -1
- package/dist/mcp-data/registry/data-filter.json +1 -1
- package/dist/mcp-data/registry/data-group.json +1 -1
- package/dist/mcp-data/registry/data-preferences.json +1 -1
- package/dist/mcp-data/registry/data-saved-views.json +1 -1
- package/dist/mcp-data/registry/data-search.json +1 -1
- package/dist/mcp-data/registry/data-sort.json +1 -1
- package/dist/mcp-data/registry/data-toolbar.json +1 -1
- package/dist/mcp-data/registry/divider.json +1 -1
- package/dist/mcp-data/registry/empty-state.json +1 -1
- package/dist/mcp-data/registry/field.json +1 -1
- package/dist/mcp-data/registry/filter-menu.json +1 -1
- package/dist/mcp-data/registry/icon.json +1 -1
- package/dist/mcp-data/registry/inline-banner-settings.json +1 -1
- package/dist/mcp-data/registry/input-date.json +1 -1
- package/dist/mcp-data/registry/input-time.json +1 -1
- package/dist/mcp-data/registry/input.json +1 -1
- package/dist/mcp-data/registry/loader.json +1 -1
- package/dist/mcp-data/registry/map-cluster-marker.json +9 -2
- package/dist/mcp-data/registry/map-entity-marker.json +9 -2
- package/dist/mcp-data/registry/map-marker.json +288 -0
- package/dist/mcp-data/registry/markdown.json +1 -1
- package/dist/mcp-data/registry/menu.json +1 -1
- package/dist/mcp-data/registry/message-actions.json +1 -1
- package/dist/mcp-data/registry/message-bubble.json +1 -1
- package/dist/mcp-data/registry/message-composer.json +1 -1
- package/dist/mcp-data/registry/message-scroller.json +1 -1
- package/dist/mcp-data/registry/message.json +1 -1
- package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
- package/dist/mcp-data/registry/mobile-header.json +1 -1
- package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
- package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
- package/dist/mcp-data/registry/modal.json +1 -1
- package/dist/mcp-data/registry/navigation-tab-group.json +1 -1
- package/dist/mcp-data/registry/pagination.json +1 -1
- package/dist/mcp-data/registry/panel-nav.json +1 -1
- package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
- package/dist/mcp-data/registry/panel-tool-header.json +1 -1
- package/dist/mcp-data/registry/panel-tool-search.json +1 -1
- package/dist/mcp-data/registry/panel-tools.json +1 -1
- package/dist/mcp-data/registry/paper-texture.json +1 -1
- package/dist/mcp-data/registry/radio-tile.json +1 -1
- package/dist/mcp-data/registry/radio.json +1 -1
- package/dist/mcp-data/registry/registry.json +162 -1
- package/dist/mcp-data/registry/score.json +1 -1
- package/dist/mcp-data/registry/scroll-overlay.json +1 -1
- package/dist/mcp-data/registry/select-toggle.json +1 -1
- package/dist/mcp-data/registry/select.json +1 -1
- package/dist/mcp-data/registry/setting-row-checkbox.json +1 -1
- package/dist/mcp-data/registry/setting-row-radio.json +1 -1
- package/dist/mcp-data/registry/setting-row-toggle.json +1 -1
- package/dist/mcp-data/registry/shell-app.json +1 -1
- package/dist/mcp-data/registry/shell-page.json +1 -1
- package/dist/mcp-data/registry/shell-tools.json +1 -1
- package/dist/mcp-data/registry/skeleton.json +1 -1
- package/dist/mcp-data/registry/slider.json +1 -1
- package/dist/mcp-data/registry/swatch-picker.json +1 -1
- package/dist/mcp-data/registry/switch.json +1 -1
- package/dist/mcp-data/registry/tab-group.json +1 -1
- package/dist/mcp-data/registry/table.json +1 -1
- package/dist/mcp-data/registry/tag.json +1 -1
- package/dist/mcp-data/registry/text.json +1 -1
- package/dist/mcp-data/registry/textarea.json +1 -1
- package/dist/mcp-data/registry/time-picker.json +1 -1
- package/dist/mcp-data/registry/toast.json +1 -1
- package/dist/mcp-data/registry/tooltip-chart.json +1 -1
- package/dist/mcp-data/registry/tooltip.json +1 -1
- package/dist/mcp-data/registry/typing-indicator.json +1 -1
- package/dist/react/components.d.ts +1 -0
- package/dist/react/components.js +1 -0
- package/dist/react/ds-map-marker.d.ts +12 -0
- package/dist/react/ds-map-marker.js +12 -0
- package/dist/types/components/MapMarker/MapMarker.d.ts +22 -0
- package/dist/types/components.d.ts +93 -0
- package/dist/vue/components.d.ts +1 -0
- package/dist/vue/components.js +1 -0
- package/dist/vue/ds-map-marker.d.ts +3 -0
- package/dist/vue/ds-map-marker.js +15 -0
- package/package.json +3 -3
- package/dist/components/p-B9ZhRwE3.js +0 -2
- package/dist/components/p-BcmJBzB6.js +0 -2
- package/dist/components/p-CWc6Blcp.js +0 -2
- package/dist/components/p-DWXpMWIp.js +0 -2
- package/dist/components/p-zopMP2ze.js +0 -2
- /package/dist/components/{p-BREDkBUv.js.map → p-0EpjqRWc.js.map} +0 -0
- /package/dist/components/{p-D3JCih82.js.map → p-2ZV8JA88.js.map} +0 -0
- /package/dist/components/{p-B1dnisok.js.map → p-87FjWil8.js.map} +0 -0
- /package/dist/components/{p-C4t7HnfZ.js.map → p-BBZz2Dvg.js.map} +0 -0
- /package/dist/components/{p-Du8LT8JS.js.map → p-BM-UYlIS.js.map} +0 -0
- /package/dist/components/{p-C4YUkrr0.js.map → p-BQE2Uj4p.js.map} +0 -0
- /package/dist/components/{p-BjD1eFx6.js.map → p-BfdYb8L4.js.map} +0 -0
- /package/dist/components/{p-SXaH5TeC.js.map → p-BgpzSEWv.js.map} +0 -0
- /package/dist/components/{p-YFjXYN8s.js.map → p-BjLGayCj.js.map} +0 -0
- /package/dist/components/{p-kL4EOsx5.js.map → p-BrB05_X8.js.map} +0 -0
- /package/dist/components/{p-Bls48_RF.js.map → p-BtSEQ-FW.js.map} +0 -0
- /package/dist/components/{p-B7EfrM6C.js.map → p-BuwYiPCW.js.map} +0 -0
- /package/dist/components/{p-Tf6odBOV.js.map → p-Bx_72ylJ.js.map} +0 -0
- /package/dist/components/{p-C2e7BkNn.js.map → p-CAARHqjE.js.map} +0 -0
- /package/dist/components/{p-D1tmszmN.js.map → p-CEm0AoDR.js.map} +0 -0
- /package/dist/components/{p-DiyL2sI5.js.map → p-CHYYRdRJ.js.map} +0 -0
- /package/dist/components/{p-BbvAWFJA.js.map → p-CTAF7SkL.js.map} +0 -0
- /package/dist/components/{p-Bjm-Rk_x.js.map → p-CYRTkP1A.js.map} +0 -0
- /package/dist/components/{p--_bPiNCd.js.map → p-CgYDQSLW.js.map} +0 -0
- /package/dist/components/{p-eKnJNQtL.js.map → p-Ch00yccW.js.map} +0 -0
- /package/dist/components/{p-CG4vPDhg.js.map → p-ChsBscqZ.js.map} +0 -0
- /package/dist/components/{p-C7_awFtr.js.map → p-Cnzry0_v.js.map} +0 -0
- /package/dist/components/{p-CantpOo3.js.map → p-CqfYCn-e.js.map} +0 -0
- /package/dist/components/{p-BAcdqJaa.js.map → p-CsPqGA8B.js.map} +0 -0
- /package/dist/components/{p-BNN9KkXe.js.map → p-Cw1ljgW1.js.map} +0 -0
- /package/dist/components/{p-BWJb2rih.js.map → p-CzTJAO2J.js.map} +0 -0
- /package/dist/components/{p-IfsszNF0.js.map → p-D2rASHHq.js.map} +0 -0
- /package/dist/components/{p-3SCy1PHa.js.map → p-DDawngok.js.map} +0 -0
- /package/dist/components/{p-CWAeg9jl.js.map → p-DKg181YU.js.map} +0 -0
- /package/dist/components/{p-5aZVNYQz.js.map → p-DQeUT9o2.js.map} +0 -0
- /package/dist/components/{p-BqZWKYsS.js.map → p-DSpKpoSG.js.map} +0 -0
- /package/dist/components/{p-DagrkX2v.js.map → p-DoRgzvup.js.map} +0 -0
- /package/dist/components/{p-CJSIvfpo.js.map → p-DwuqJhR5.js.map} +0 -0
- /package/dist/components/{p-C6EXrs1S.js.map → p-Dx7wJaLv.js.map} +0 -0
- /package/dist/components/{p-BWnL2SWn.js.map → p-M9pOLcyK.js.map} +0 -0
- /package/dist/components/{p-BJf49edB.js.map → p-PNY7auMh.js.map} +0 -0
- /package/dist/components/{p-topqlGsI.js.map → p-YmJYwnhW.js.map} +0 -0
- /package/dist/components/{p-Dvw7N7TH.js.map → p-cktJHlYv.js.map} +0 -0
- /package/dist/components/{p-n_OBbh94.js.map → p-hWKa8Jn8.js.map} +0 -0
- /package/dist/components/{p-UWU23pbX.js.map → p-hmvu1lmP.js.map} +0 -0
- /package/dist/components/{p-D-TeAVxE.js.map → p-iEhBF5Oi.js.map} +0 -0
- /package/dist/components/{p-C62g3d5y.js.map → p-kQ6wvk-r.js.map} +0 -0
- /package/dist/components/{p-DcMbWqTd.js.map → p-uAtciSyr.js.map} +0 -0
- /package/dist/components/{p-QGtBlTMt.js.map → p-xCqqM1Rg.js.map} +0 -0
- /package/dist/components/{p-CCoJ7CBB.js.map → p-y2Sdv9M3.js.map} +0 -0
- /package/dist/components/{p-DHpcv_Os.js.map → p-z_8aZHHo.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{p as e,H as t,h as n,a as i,t as o}from"./index.js";const s=`#version 300 es\nprecision mediump float;\n\nlayout(location = 0) in vec4 a_position;\n\nuniform vec2 u_resolution;\nuniform float u_pixelRatio;\nuniform float u_imageAspectRatio;\nuniform float u_originX;\nuniform float u_originY;\nuniform float u_worldWidth;\nuniform float u_worldHeight;\nuniform float u_fit;\nuniform float u_scale;\nuniform float u_rotation;\nuniform float u_offsetX;\nuniform float u_offsetY;\n\nout vec2 v_objectUV;\nout vec2 v_objectBoxSize;\nout vec2 v_responsiveUV;\nout vec2 v_responsiveBoxGivenSize;\nout vec2 v_patternUV;\nout vec2 v_patternBoxSize;\nout vec2 v_imageUV;\n\nvec3 getBoxSize(float boxRatio, vec2 givenBoxSize) {\n vec2 box = vec2(0.);\n // fit = none\n box.x = boxRatio * min(givenBoxSize.x / boxRatio, givenBoxSize.y);\n float noFitBoxWidth = box.x;\n if (u_fit == 1.) { // fit = contain\n box.x = boxRatio * min(u_resolution.x / boxRatio, u_resolution.y);\n } else if (u_fit == 2.) { // fit = cover\n box.x = boxRatio * max(u_resolution.x / boxRatio, u_resolution.y);\n }\n box.y = box.x / boxRatio;\n return vec3(box, noFitBoxWidth);\n}\n\nvoid main() {\n gl_Position = a_position;\n\n vec2 uv = gl_Position.xy * .5;\n vec2 boxOrigin = vec2(.5 - u_originX, u_originY - .5);\n vec2 givenBoxSize = vec2(u_worldWidth, u_worldHeight);\n givenBoxSize = max(givenBoxSize, vec2(1.)) * u_pixelRatio;\n float r = u_rotation * 3.14159265358979323846 / 180.;\n mat2 graphicRotation = mat2(cos(r), sin(r), -sin(r), cos(r));\n vec2 graphicOffset = vec2(-u_offsetX, u_offsetY);\n\n\n // ===================================================\n\n float fixedRatio = 1.;\n vec2 fixedRatioBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n\n v_objectBoxSize = getBoxSize(fixedRatio, fixedRatioBoxGivenSize).xy;\n vec2 objectWorldScale = u_resolution.xy / v_objectBoxSize;\n\n v_objectUV = uv;\n v_objectUV *= objectWorldScale;\n v_objectUV += boxOrigin * (objectWorldScale - 1.);\n v_objectUV += graphicOffset;\n v_objectUV /= u_scale;\n v_objectUV = graphicRotation * v_objectUV;\n\n // ===================================================\n\n v_responsiveBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n float responsiveRatio = v_responsiveBoxGivenSize.x / v_responsiveBoxGivenSize.y;\n vec2 responsiveBoxSize = getBoxSize(responsiveRatio, v_responsiveBoxGivenSize).xy;\n vec2 responsiveBoxScale = u_resolution.xy / responsiveBoxSize;\n\n #ifdef ADD_HELPERS\n v_responsiveHelperBox = uv;\n v_responsiveHelperBox *= responsiveBoxScale;\n v_responsiveHelperBox += boxOrigin * (responsiveBoxScale - 1.);\n #endif\n\n v_responsiveUV = uv;\n v_responsiveUV *= responsiveBoxScale;\n v_responsiveUV += boxOrigin * (responsiveBoxScale - 1.);\n v_responsiveUV += graphicOffset;\n v_responsiveUV /= u_scale;\n v_responsiveUV.x *= responsiveRatio;\n v_responsiveUV = graphicRotation * v_responsiveUV;\n v_responsiveUV.x /= responsiveRatio;\n\n // ===================================================\n\n float patternBoxRatio = givenBoxSize.x / givenBoxSize.y;\n vec2 patternBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n patternBoxRatio = patternBoxGivenSize.x / patternBoxGivenSize.y;\n\n vec3 boxSizeData = getBoxSize(patternBoxRatio, patternBoxGivenSize);\n v_patternBoxSize = boxSizeData.xy;\n float patternBoxNoFitBoxWidth = boxSizeData.z;\n vec2 patternBoxScale = u_resolution.xy / v_patternBoxSize;\n\n v_patternUV = uv;\n v_patternUV += graphicOffset / patternBoxScale;\n v_patternUV += boxOrigin;\n v_patternUV -= boxOrigin / patternBoxScale;\n v_patternUV *= u_resolution.xy;\n v_patternUV /= u_pixelRatio;\n if (u_fit > 0.) {\n v_patternUV *= (patternBoxNoFitBoxWidth / v_patternBoxSize.x);\n }\n v_patternUV /= u_scale;\n v_patternUV = graphicRotation * v_patternUV;\n v_patternUV += boxOrigin / patternBoxScale;\n v_patternUV -= boxOrigin;\n // x100 is a default multiplier between vertex and fragmant shaders\n // we use it to avoid UV presision issues\n v_patternUV *= .01;\n\n // ===================================================\n\n vec2 imageBoxSize;\n if (u_fit == 1.) { // contain\n imageBoxSize.x = min(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;\n } else if (u_fit == 2.) { // cover\n imageBoxSize.x = max(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;\n } else {\n imageBoxSize.x = min(10.0, 10.0 / u_imageAspectRatio * u_imageAspectRatio);\n }\n imageBoxSize.y = imageBoxSize.x / u_imageAspectRatio;\n vec2 imageBoxScale = u_resolution.xy / imageBoxSize;\n\n v_imageUV = uv;\n v_imageUV *= imageBoxScale;\n v_imageUV += boxOrigin * (imageBoxScale - 1.);\n v_imageUV += graphicOffset;\n v_imageUV /= u_scale;\n v_imageUV.x *= u_imageAspectRatio;\n v_imageUV = graphicRotation * v_imageUV;\n v_imageUV.x /= u_imageAspectRatio;\n\n v_imageUV += .5;\n v_imageUV.y = 1. - v_imageUV.y;\n}`;const r=1920*1080*4;class a{parentElement;canvasElement;gl;program=null;uniformLocations={};fragmentShader;rafId=null;lastRenderTime=0;currentFrame=0;speed=0;currentSpeed=0;providedUniforms;mipmaps=[];hasBeenDisposed=false;resolutionChanged=true;textures=new Map;minPixelRatio;maxPixelCount;isSafari=u();uniformCache={};textureUnitMap=new Map;ownerDocument;constructor(e,t,n,i,o=0,s=0,a=2,A=r,l=[]){if(e?.nodeType===1){this.parentElement=e}else{throw new Error("Paper Shaders: parent element must be an HTMLElement")}this.ownerDocument=e.ownerDocument;if(!this.ownerDocument.querySelector("style[data-paper-shader]")){const e=this.ownerDocument.createElement("style");e.innerHTML=c;e.setAttribute("data-paper-shader","");this.ownerDocument.head.prepend(e)}const u=this.ownerDocument.createElement("canvas");this.canvasElement=u;this.parentElement.prepend(u);this.fragmentShader=t;this.providedUniforms=n;this.mipmaps=l;this.currentFrame=s;this.minPixelRatio=a;this.maxPixelCount=A;const f=u.getContext("webgl2",i);if(!f){throw new Error("Paper Shaders: WebGL is not supported in this browser")}this.gl=f;this.initProgram();this.setupPositionAttribute();this.setupUniforms();this.setUniformValues(this.providedUniforms);this.setupResizeObserver();visualViewport?.addEventListener("resize",this.handleVisualViewportChange);this.setupIntersectionObserver();this.setSpeed(o);this.parentElement.setAttribute("data-paper-shader","");this.parentElement.paperShaderMount=this;this.ownerDocument.addEventListener("visibilitychange",this.handleDocumentVisibilityChange)}initProgram=()=>{const e=l(this.gl,s,this.fragmentShader);if(!e)return;this.program=e};setupPositionAttribute=()=>{const e=this.gl.getAttribLocation(this.program,"a_position");const t=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,t);const n=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1];this.gl.bufferData(this.gl.ARRAY_BUFFER,new Float32Array(n),this.gl.STATIC_DRAW);this.gl.enableVertexAttribArray(e);this.gl.vertexAttribPointer(e,2,this.gl.FLOAT,false,0,0)};setupUniforms=()=>{const e={u_time:this.gl.getUniformLocation(this.program,"u_time"),u_pixelRatio:this.gl.getUniformLocation(this.program,"u_pixelRatio"),u_resolution:this.gl.getUniformLocation(this.program,"u_resolution")};Object.entries(this.providedUniforms).forEach((([t,n])=>{e[t]=this.gl.getUniformLocation(this.program,t);if(n instanceof HTMLImageElement){const n=`${t}AspectRatio`;e[n]=this.gl.getUniformLocation(this.program,n)}}));this.uniformLocations=e};renderScale=1;parentWidth=0;parentHeight=0;parentDevicePixelWidth=0;parentDevicePixelHeight=0;devicePixelsSupported=false;intersectionObserver=null;isInViewport=true;resizeObserver=null;setupResizeObserver=()=>{this.resizeObserver=new ResizeObserver((([e])=>{if(e?.borderBoxSize[0]){const t=e.devicePixelContentBoxSize?.[0];if(t!==void 0){this.devicePixelsSupported=true;this.parentDevicePixelWidth=t.inlineSize;this.parentDevicePixelHeight=t.blockSize}this.parentWidth=e.borderBoxSize[0].inlineSize;this.parentHeight=e.borderBoxSize[0].blockSize}this.handleResize()}));this.resizeObserver.observe(this.parentElement)};setupIntersectionObserver=()=>{const e=this.ownerDocument.defaultView;if(!e?.IntersectionObserver)return;this.intersectionObserver=new e.IntersectionObserver((([e])=>{this.isInViewport=e?.isIntersecting??true;this.updateCurrentSpeed()}));this.intersectionObserver.observe(this.parentElement)};handleVisualViewportChange=()=>{this.resizeObserver?.disconnect();this.setupResizeObserver()};handleResize=()=>{let e=0;let t=0;const n=Math.max(1,window.devicePixelRatio);const i=visualViewport?.scale??1;if(this.devicePixelsSupported){const o=Math.max(1,this.minPixelRatio/n);e=this.parentDevicePixelWidth*o*i;t=this.parentDevicePixelHeight*o*i}else{let o=Math.max(n,this.minPixelRatio)*i;if(this.isSafari){const e=f(this.ownerDocument);o*=Math.max(1,e)}e=Math.round(this.parentWidth)*o;t=Math.round(this.parentHeight)*o}const o=Math.sqrt(this.maxPixelCount)/Math.sqrt(e*t);const s=Math.min(1,o);const r=Math.round(e*s);const a=Math.round(t*s);const A=r/Math.round(this.parentWidth);if(this.canvasElement.width!==r||this.canvasElement.height!==a||this.renderScale!==A){this.renderScale=A;this.canvasElement.width=r;this.canvasElement.height=a;this.resolutionChanged=true;this.gl.viewport(0,0,this.gl.canvas.width,this.gl.canvas.height);this.render(performance.now())}};render=e=>{if(this.hasBeenDisposed)return;if(this.program===null){console.warn("Tried to render before program or gl was initialized");return}const t=e-this.lastRenderTime;this.lastRenderTime=e;if(this.currentSpeed!==0){this.currentFrame+=t*this.currentSpeed}this.gl.clear(this.gl.COLOR_BUFFER_BIT);this.gl.useProgram(this.program);this.gl.uniform1f(this.uniformLocations.u_time,this.currentFrame*.001);if(this.resolutionChanged){this.gl.uniform2f(this.uniformLocations.u_resolution,this.gl.canvas.width,this.gl.canvas.height);this.gl.uniform1f(this.uniformLocations.u_pixelRatio,this.renderScale);this.resolutionChanged=false}this.gl.drawArrays(this.gl.TRIANGLES,0,6);if(this.currentSpeed!==0){this.requestRender()}else{this.rafId=null}};requestRender=()=>{if(this.rafId!==null){cancelAnimationFrame(this.rafId)}this.rafId=requestAnimationFrame(this.render)};setTextureUniform=(e,t)=>{if(!t.complete||t.naturalWidth===0){throw new Error(`Paper Shaders: image for uniform ${e} must be fully loaded`)}const n=this.textures.get(e);if(n){this.gl.deleteTexture(n)}if(!this.textureUnitMap.has(e)){this.textureUnitMap.set(e,this.textureUnitMap.size)}const i=this.textureUnitMap.get(e);this.gl.activeTexture(this.gl.TEXTURE0+i);const o=this.gl.createTexture();this.gl.bindTexture(this.gl.TEXTURE_2D,o);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR);this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t);if(this.mipmaps.includes(e)){this.gl.generateMipmap(this.gl.TEXTURE_2D);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR_MIPMAP_LINEAR)}const s=this.gl.getError();if(s!==this.gl.NO_ERROR||o===null){console.error("Paper Shaders: WebGL error when uploading texture:",s);return}this.textures.set(e,o);const r=this.uniformLocations[e];if(r){this.gl.uniform1i(r,i);const n=`${e}AspectRatio`;const o=this.uniformLocations[n];if(o){const e=t.naturalWidth/t.naturalHeight;this.gl.uniform1f(o,e)}}};areUniformValuesEqual=(e,t)=>{if(e===t)return true;if(Array.isArray(e)&&Array.isArray(t)&&e.length===t.length){return e.every(((e,n)=>this.areUniformValuesEqual(e,t[n])))}return false};setUniformValues=e=>{this.gl.useProgram(this.program);Object.entries(e).forEach((([e,t])=>{let n=t;if(t instanceof HTMLImageElement){n=`${t.src.slice(0,200)}|${t.naturalWidth}x${t.naturalHeight}`}if(this.areUniformValuesEqual(this.uniformCache[e],n))return;this.uniformCache[e]=n;const i=this.uniformLocations[e];if(!i){console.warn(`Uniform location for ${e} not found`);return}if(t instanceof HTMLImageElement){this.setTextureUniform(e,t)}else if(Array.isArray(t)){let n=null;let o=null;if(t[0]!==void 0&&Array.isArray(t[0])){const i=t[0].length;if(t.every((e=>e.length===i))){n=t.flat();o=i}else{console.warn(`All child arrays must be the same length for ${e}`);return}}else{n=t;o=n.length}switch(o){case 2:this.gl.uniform2fv(i,n);break;case 3:this.gl.uniform3fv(i,n);break;case 4:this.gl.uniform4fv(i,n);break;case 9:this.gl.uniformMatrix3fv(i,false,n);break;case 16:this.gl.uniformMatrix4fv(i,false,n);break;default:console.warn(`Unsupported uniform array length: ${o}`)}}else if(typeof t==="number"){this.gl.uniform1f(i,t)}else if(typeof t==="boolean"){this.gl.uniform1i(i,t?1:0)}else{console.warn(`Unsupported uniform type for ${e}: ${typeof t}`)}}))};getCurrentFrame=()=>this.currentFrame;setFrame=e=>{this.currentFrame=e;this.lastRenderTime=performance.now();this.render(performance.now())};setSpeed=(e=1)=>{this.speed=e;this.updateCurrentSpeed()};updateCurrentSpeed=()=>{this.setCurrentSpeed(this.ownerDocument.hidden||!this.isInViewport?0:this.speed)};setCurrentSpeed=e=>{this.currentSpeed=e;if(this.rafId===null&&e!==0){this.lastRenderTime=performance.now();this.rafId=requestAnimationFrame(this.render)}if(this.rafId!==null&&e===0){cancelAnimationFrame(this.rafId);this.rafId=null}};setMaxPixelCount=(e=r)=>{this.maxPixelCount=e;this.handleResize()};setMinPixelRatio=(e=2)=>{this.minPixelRatio=e;this.handleResize()};setUniforms=e=>{this.setUniformValues(e);this.providedUniforms={...this.providedUniforms,...e};this.render(performance.now())};handleDocumentVisibilityChange=()=>{this.updateCurrentSpeed()};dispose=()=>{this.hasBeenDisposed=true;if(this.rafId!==null){cancelAnimationFrame(this.rafId);this.rafId=null}if(this.gl&&this.program){this.textures.forEach((e=>{this.gl.deleteTexture(e)}));this.textures.clear();this.gl.deleteProgram(this.program);this.program=null;this.gl.bindBuffer(this.gl.ARRAY_BUFFER,null);this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER,null);this.gl.bindRenderbuffer(this.gl.RENDERBUFFER,null);this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,null);this.gl.getError()}if(this.resizeObserver){this.resizeObserver.disconnect();this.resizeObserver=null}if(this.intersectionObserver){this.intersectionObserver.disconnect();this.intersectionObserver=null}visualViewport?.removeEventListener("resize",this.handleVisualViewportChange);this.ownerDocument.removeEventListener("visibilitychange",this.handleDocumentVisibilityChange);this.uniformLocations={};this.canvasElement.remove();delete this.parentElement.paperShaderMount}}function A(e,t,n){const i=e.createShader(t);if(!i)return null;e.shaderSource(i,n);e.compileShader(i);if(!e.getShaderParameter(i,e.COMPILE_STATUS)){console.error("An error occurred compiling the shaders: "+e.getShaderInfoLog(i));e.deleteShader(i);return null}return i}function l(e,t,n){const i=e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT);const o=i?i.precision:null;if(o&&o<23){t=t.replace(/precision\s+(lowp|mediump)\s+float;/g,"precision highp float;");n=n.replace(/precision\s+(lowp|mediump)\s+float/g,"precision highp float").replace(/\b(uniform|varying|attribute)\s+(lowp|mediump)\s+(\w+)/g,"$1 highp $3")}const s=A(e,e.VERTEX_SHADER,t);const r=A(e,e.FRAGMENT_SHADER,n);if(!s||!r)return null;const a=e.createProgram();if(!a)return null;e.attachShader(a,s);e.attachShader(a,r);e.linkProgram(a);if(!e.getProgramParameter(a,e.LINK_STATUS)){console.error("Unable to initialize the shader program: "+e.getProgramInfoLog(a));e.deleteProgram(a);e.deleteShader(s);e.deleteShader(r);return null}e.detachShader(a,s);e.detachShader(a,r);e.deleteShader(s);e.deleteShader(r);return a}const c=`@layer paper-shaders {\n :where([data-paper-shader]) {\n isolation: isolate;\n position: relative;\n\n & canvas {\n contain: strict;\n display: block;\n position: absolute;\n inset: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n border-radius: inherit;\n corner-shape: inherit;\n }\n }\n}`;function u(){const e=navigator.userAgent.toLowerCase();return e.includes("safari")&&!e.includes("chrome")&&!e.includes("android")}function f(e){const t=visualViewport?.scale??1;const n=visualViewport?.width??window.innerWidth;const i=window.innerWidth-e.documentElement.clientWidth;const o=t*n+i;const s=outerWidth/o;const r=Math.round(100*s);if(r%5===0){return r/100}if(r===33){return 1/3}if(r===67){return 2/3}if(r===133){return 4/3}return s}const h={none:0,contain:1,cover:2};const g=`\n#define TWO_PI 6.28318530718\n#define PI 3.14159265358979323846\n`;const p=`\nvec2 rotate(vec2 uv, float th) {\n return mat2(cos(th), sin(th), -sin(th), cos(th)) * uv;\n}\n`;const B=`\n float randomR(vec2 p) {\n vec2 uv = floor(p) / 100. + .5;\n return texture(u_noiseTexture, fract(uv)).r;\n }\n`;const m=`\nfloat fiberRandom(vec2 p) {\n vec2 uv = floor(p) / 100.;\n return texture(u_noiseTexture, fract(uv)).b;\n}\n\nfloat fiberValueNoise(vec2 st) {\n vec2 i = floor(st);\n vec2 f = fract(st);\n float a = fiberRandom(i);\n float b = fiberRandom(i + vec2(1.0, 0.0));\n float c = fiberRandom(i + vec2(0.0, 1.0));\n float d = fiberRandom(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n float x1 = mix(a, b, u.x);\n float x2 = mix(c, d, u.x);\n return mix(x1, x2, u.y);\n}\n\nfloat fiberNoiseFbm(in vec2 n, vec2 seedOffset) {\n float total = 0.0, amplitude = 1.;\n for (int i = 0; i < 4; i++) {\n n = rotate(n, .7);\n total += fiberValueNoise(n + seedOffset) * amplitude;\n n *= 2.;\n amplitude *= 0.6;\n }\n return total;\n}\n\nfloat fiberNoise(vec2 uv, vec2 seedOffset) {\n float epsilon = 0.001;\n float n1 = fiberNoiseFbm(uv + vec2(epsilon, 0.0), seedOffset);\n float n2 = fiberNoiseFbm(uv - vec2(epsilon, 0.0), seedOffset);\n float n3 = fiberNoiseFbm(uv + vec2(0.0, epsilon), seedOffset);\n float n4 = fiberNoiseFbm(uv - vec2(0.0, epsilon), seedOffset);\n return length(vec2(n1 - n2, n3 - n4)) / (2.0 * epsilon);\n}\n`;const d=`#version 300 es\nprecision mediump float;\n\nuniform vec2 u_resolution;\nuniform float u_pixelRatio;\n\nuniform vec4 u_colorFront;\nuniform vec4 u_colorBack;\n\nuniform sampler2D u_image;\nuniform float u_imageAspectRatio;\n\nuniform float u_contrast;\nuniform float u_roughness;\nuniform float u_fiber;\nuniform float u_fiberSize;\nuniform float u_crumples;\nuniform float u_crumpleSize;\nuniform float u_folds;\nuniform float u_foldCount;\nuniform float u_drops;\nuniform float u_seed;\nuniform float u_fade;\n\nuniform sampler2D u_noiseTexture;\n\nin vec2 v_imageUV;\n\nout vec4 fragColor;\n\nfloat getUvFrame(vec2 uv) {\n float aax = 2. * fwidth(uv.x);\n float aay = 2. * fwidth(uv.y);\n\n float left = smoothstep(0., aax, uv.x);\n float right = 1. - smoothstep(1. - aax, 1., uv.x);\n float bottom = smoothstep(0., aay, uv.y);\n float top = 1. - smoothstep(1. - aay, 1., uv.y);\n\n return left * right * bottom * top;\n}\n\n${g}\n${p}\n${B}\nfloat valueNoise(vec2 st) {\n vec2 i = floor(st);\n vec2 f = fract(st);\n float a = randomR(i);\n float b = randomR(i + vec2(1.0, 0.0));\n float c = randomR(i + vec2(0.0, 1.0));\n float d = randomR(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n float x1 = mix(a, b, u.x);\n float x2 = mix(c, d, u.x);\n return mix(x1, x2, u.y);\n}\nfloat fbm(vec2 n) {\n float total = 0.0, amplitude = .4;\n for (int i = 0; i < 3; i++) {\n total += valueNoise(n) * amplitude;\n n *= 1.99;\n amplitude *= 0.65;\n }\n return total;\n}\n\n\nfloat randomG(vec2 p) {\n vec2 uv = floor(p) / 50. + .5;\n return texture(u_noiseTexture, fract(uv)).g;\n}\nfloat roughness(vec2 p) {\n p *= .1;\n float o = 0.;\n for (float i = 0.; ++i < 4.; p *= 2.1) {\n vec4 w = vec4(floor(p), ceil(p));\n vec2 f = fract(p);\n o += mix(\n mix(randomG(w.xy), randomG(w.xw), f.y),\n mix(randomG(w.zy), randomG(w.zw), f.y),\n f.x);\n o += .2 / exp(2. * abs(sin(.2 * p.x + .5 * p.y)));\n }\n return o / 3.;\n}\n\n${m}\n\nvec2 randomGB(vec2 p) {\n vec2 uv = floor(p) / 50. + .5;\n return texture(u_noiseTexture, fract(uv)).gb;\n}\nfloat crumpledNoise(vec2 t, float pw) {\n vec2 p = floor(t);\n float wsum = 0.;\n float cl = 0.;\n for (int y = -1; y < 2; y += 1) {\n for (int x = -1; x < 2; x += 1) {\n vec2 b = vec2(float(x), float(y));\n vec2 q = b + p;\n vec2 q2 = q - floor(q / 8.) * 8.;\n vec2 c = q + randomGB(q2);\n vec2 r = c - t;\n float w = pow(smoothstep(0., 1., 1. - abs(r.x)), pw) * pow(smoothstep(0., 1., 1. - abs(r.y)), pw);\n cl += (.5 + .5 * sin((q2.x + q2.y * 5.) * 8.)) * w;\n wsum += w;\n }\n }\n return pow(wsum != 0.0 ? cl / wsum : 0.0, .5) * 2.;\n}\nfloat crumplesShape(vec2 uv) {\n return crumpledNoise(uv * .25, 16.) * crumpledNoise(uv * .5, 2.);\n}\n\n\nvec2 folds(vec2 uv) {\n vec3 pp = vec3(0.);\n float l = 9.;\n for (float i = 0.; i < 15.; i++) {\n if (i >= u_foldCount) break;\n vec2 rand = randomGB(vec2(i, i * u_seed));\n float an = rand.x * TWO_PI;\n vec2 p = vec2(cos(an), sin(an)) * rand.y;\n float dist = distance(uv, p);\n l = min(l, dist);\n\n if (l == dist) {\n pp.xy = (uv - p.xy);\n pp.z = dist;\n }\n }\n return mix(pp.xy, vec2(0.), pow(pp.z, .25));\n}\n\nfloat drops(vec2 uv) {\n vec2 iDropsUV = floor(uv);\n vec2 fDropsUV = fract(uv);\n float dropsMinDist = 1.;\n for (int j = -1; j <= 1; j++) {\n for (int i = -1; i <= 1; i++) {\n vec2 neighbor = vec2(float(i), float(j));\n vec2 offset = randomGB(iDropsUV + neighbor);\n offset = .5 + .5 * sin(10. * u_seed + TWO_PI * offset);\n vec2 pos = neighbor + offset - fDropsUV;\n float dist = length(pos);\n dropsMinDist = min(dropsMinDist, dropsMinDist*dist);\n }\n }\n return 1. - smoothstep(.05, .09, pow(dropsMinDist, .5));\n}\n\nfloat lst(float edge0, float edge1, float x) {\n return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n}\n\nvoid main() {\n\n vec2 imageUV = v_imageUV;\n vec2 patternUV = v_imageUV - .5;\n patternUV = 5. * (patternUV * vec2(u_imageAspectRatio, 1.));\n\n vec2 roughnessUv = 1.5 * (gl_FragCoord.xy - .5 * u_resolution) / u_pixelRatio;\n float roughness = roughness(roughnessUv + vec2(1., 0.)) - roughness(roughnessUv - vec2(1., 0.));\n\n vec2 crumplesUV = fract(patternUV * .02 / u_crumpleSize - u_seed) * 32.;\n float crumples = u_crumples * (crumplesShape(crumplesUV + vec2(.05, 0.)) - crumplesShape(crumplesUV));\n\n vec2 fiberUV = 2. / u_fiberSize * patternUV;\n float fiber = fiberNoise(fiberUV, vec2(0.));\n fiber = .5 * u_fiber * (fiber - 1.);\n\n vec2 normal = vec2(0.);\n vec2 normalImage = vec2(0.);\n\n vec2 foldsUV = patternUV * .12;\n foldsUV = rotate(foldsUV, 4. * u_seed);\n vec2 w = folds(foldsUV);\n foldsUV = rotate(foldsUV + .007 * cos(u_seed), .01 * sin(u_seed));\n vec2 w2 = folds(foldsUV);\n\n float drops = u_drops * drops(patternUV * 2.);\n\n float fade = u_fade * fbm(.17 * patternUV + 10. * u_seed);\n fade = clamp(8. * fade * fade * fade, 0., 1.);\n\n w = mix(w, vec2(0.), fade);\n w2 = mix(w2, vec2(0.), fade);\n crumples = mix(crumples, 0., fade);\n drops = mix(drops, 0., fade);\n fiber *= mix(1., .5, fade);\n roughness *= mix(1., .5, fade);\n\n normal.xy += u_folds * min(5. * u_contrast, 1.) * 4. * max(vec2(0.), w + w2);\n normalImage.xy += u_folds * 2. * w;\n\n normal.xy += crumples;\n normalImage.xy += 1.5 * crumples;\n\n normal.xy += 3. * drops;\n normalImage.xy += .2 * drops;\n\n normal.xy += u_roughness * 1.5 * roughness;\n normal.xy += fiber;\n\n normalImage += u_roughness * .75 * roughness;\n normalImage += .2 * fiber;\n\n vec3 lightPos = vec3(1., 2., 1.);\n float res = dot(normalize(vec3(normal, 9.5 - 9. * pow(u_contrast, .1))), normalize(lightPos));\n\n vec3 fgColor = u_colorFront.rgb * u_colorFront.a;\n float fgOpacity = u_colorFront.a;\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n float bgOpacity = u_colorBack.a;\n\n imageUV += .02 * normalImage;\n float frame = getUvFrame(imageUV);\n vec4 image = texture(u_image, imageUV);\n image.rgb += .6 * pow(u_contrast, .4) * (res - .7);\n\n frame *= image.a;\n\n vec3 color = fgColor * res;\n float opacity = fgOpacity * res;\n\n color += bgColor * (1. - opacity);\n opacity += bgOpacity * (1. - opacity);\n opacity = mix(opacity, 1., frame);\n\n color -= .007 * drops;\n\n color.rgb = mix(color, image.rgb, frame);\n\n fragColor = vec4(color, opacity);\n}\n`;function x(e){if(Array.isArray(e)){if(e.length===4)return e;if(e.length===3)return[...e,1];return I}if(typeof e!=="string"){return I}let t,n,i,o=1;if(e.startsWith("#")){[t,n,i,o]=w(e)}else if(e.startsWith("rgb")){const s=v(e);if(s===null)return I;[t,n,i,o]=s}else if(e.startsWith("hsl")){const s=Q(e);if(s===null)return I;[t,n,i,o]=E(s)}else{console.error("Unsupported color format",e);return I}return[C(t,0,1),C(n,0,1),C(i,0,1),C(o,0,1)]}function w(e){e=e.replace(/^#/,"");if(e.length===3||e.length===4){e=e.split("").map((e=>e+e)).join("")}if(e.length===6){e=e+"ff"}if(!/^[0-9a-f]{8}$/i.test(e)){console.warn("Invalid hex color");return I}const t=parseInt(e.slice(0,2),16)/255;const n=parseInt(e.slice(2,4),16)/255;const i=parseInt(e.slice(4,6),16)/255;const o=parseInt(e.slice(6,8),16)/255;return[t,n,i,o]}function v(e){const t=e.match(/^rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([0-9.]+))?\s*\)$/i);if(!t)return null;return[parseInt(t[1]??"0")/255,parseInt(t[2]??"0")/255,parseInt(t[3]??"0")/255,t[4]===void 0?1:parseFloat(t[4])]}function Q(e){const t=e.match(/^hsla?\s*\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(?:,\s*([0-9.]+))?\s*\)$/i);if(!t)return null;return[parseInt(t[1]??"0"),parseInt(t[2]??"0"),parseInt(t[3]??"0"),t[4]===void 0?1:parseFloat(t[4])]}function E(e){const[t,n,i,o]=e;const s=t/360;const r=n/100;const a=i/100;let A,l,c;if(n===0){A=l=c=a}else{const e=(e,t,n)=>{if(n<0)n+=1;if(n>1)n-=1;if(n<1/6)return e+(t-e)*6*n;if(n<1/2)return t;if(n<2/3)return e+(t-e)*(2/3-n)*6;return e};const t=a<.5?a*(1+r):a+r-a*r;const n=2*a-t;A=e(n,t,s+1/3);l=e(n,t,s);c=e(n,t,s-1/3)}return[A,l,c,o]}const C=(e,t,n)=>Math.min(Math.max(e,t),n);const I=[.5,.5,.5,1];function U(){if(typeof window==="undefined"){return void 0}const e=new Image;e.src=S;return e}const S="data:image/png;base64,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";const b="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";const F={colorFront:"#b8b8b8",colorBack:"#ffffff",contrast:.3,roughness:.4,fiber:.3,fiberSize:.2,crumples:.3,crumpleSize:.35,folds:.65,foldCount:5,fade:0,drops:.2,seed:5.8,fit:"cover",scale:.6,rotation:0,originX:.5,originY:.5,offsetX:0,offsetY:0,worldWidth:0,worldHeight:0,speed:0,frame:0,minPixelRatio:2,maxPixelCount:1920*1080*4,opacity:1};const M=()=>`.sc-ds-paper-texture-h{position:absolute;inset:0;display:block;overflow:hidden;pointer-events:none;opacity:var(--ds-paper-texture-opacity, 1)}.paper-texture__mount.sc-ds-paper-texture{position:absolute;inset:0;width:100%;height:100%;overflow:hidden;isolation:isolate}.paper-texture__mount[data-paper-shader].sc-ds-paper-texture canvas.sc-ds-paper-texture{z-index:0}[data-paper-texture-error].sc-ds-paper-texture-h{display:none}`;let D;let V;function G(e){if(e.complete){return e.naturalWidth>0?Promise.resolve(e):Promise.reject(new Error(`Paper texture image failed to load: ${e.src}`))}return new Promise(((t,n)=>{const i=()=>{s();t(e)};const o=()=>{s();n(new Error(`Paper texture image failed to load: ${e.src}`))};const s=()=>{e.removeEventListener("load",i);e.removeEventListener("error",o)};e.addEventListener("load",i,{once:true});e.addEventListener("error",o,{once:true})}))}function R(e){if(e instanceof HTMLImageElement)return G(e);const t=new Image;if(e&&e!==b)t.crossOrigin="anonymous";t.src=e||b;return G(t)}function k(){D??(D=R(b));return D}function y(){V??(V=Promise.resolve(U()).then((e=>{if(!e)throw new Error("Paper texture noise texture is unavailable");return G(e)})));return V}const W=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.config={};this.syncGeneration=0;this.hasLoaded=false}componentDidLoad(){this.hasLoaded=true;void this.syncShader()}connectedCallback(){if(this.hasLoaded)void this.syncShader()}disconnectedCallback(){this.syncGeneration+=1;this.disposeShader()}onConfigChange(){if(this.hasLoaded)void this.syncShader()}resolvedConfig(){return{...F,...this.config??{}}}async syncShader(){const e=++this.syncGeneration;const t=this.resolvedConfig();try{const[n,i]=await Promise.all([R(t.image).catch((()=>k())),y()]);if(e!==this.syncGeneration||!this.el.isConnected)return;const o=this.buildUniforms(t,n,i);const s=this.el.querySelector(".paper-texture__mount");if(!s)return;if(!this.shaderMount){this.shaderMount=new a(s,d,o,undefined,t.speed,t.frame,t.minPixelRatio,t.maxPixelCount,["u_image"])}else{this.shaderMount.setUniforms(o);this.shaderMount.setSpeed(t.speed);this.shaderMount.setFrame(t.frame);this.shaderMount.setMinPixelRatio(t.minPixelRatio);this.shaderMount.setMaxPixelCount(t.maxPixelCount)}this.el.removeAttribute("data-paper-texture-error")}catch(t){if(e!==this.syncGeneration)return;this.disposeShader();this.el.querySelector(".paper-texture__mount")?.replaceChildren();this.el.setAttribute("data-paper-texture-error","unavailable");console.warn("[ds-paper-texture] WebGL2 paper texture unavailable.",t)}}buildUniforms(e,t,n){return{u_image:t,u_noiseTexture:n,u_colorFront:x(e.colorFront),u_colorBack:x(e.colorBack),u_contrast:e.contrast,u_roughness:e.roughness,u_fiber:e.fiber,u_fiberSize:e.fiberSize,u_crumples:e.crumples,u_crumpleSize:e.crumpleSize,u_foldCount:e.foldCount,u_folds:e.folds,u_fade:e.fade,u_drops:e.drops,u_seed:e.seed,u_fit:h[e.fit],u_scale:e.scale,u_rotation:e.rotation,u_offsetX:e.offsetX,u_offsetY:e.offsetY,u_originX:e.originX,u_originY:e.originY,u_worldWidth:e.worldWidth,u_worldHeight:e.worldHeight}}disposeShader(){this.shaderMount?.dispose();this.shaderMount=undefined}render(){const e=this.resolvedConfig();return n(i,{key:"2f8613c99f8a406510ec99e00af9674b5af2178e","aria-hidden":"true",style:{"--ds-paper-texture-opacity":String(e.opacity)}},n("div",{key:"9c79942065ee6ec82a7a5816704918ede528ff7e",class:"paper-texture__mount"}))}get el(){return this}static get watchers(){return{config:[{onConfigChange:0}]}}static get style(){return M()}},[2,"ds-paper-texture",{config:[16]},undefined,{config:[{onConfigChange:0}]}]);function H(){if(typeof customElements==="undefined"){return}const e=["ds-paper-texture"];e.forEach((e=>{switch(e){case"ds-paper-texture":if(!customElements.get(o(e))){customElements.define(o(e),W)}break}}))}H();export{W as P,H as d};
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{p as e,H as t,h as n,a as i,t as o}from"./index.js";const s=`#version 300 es\nprecision mediump float;\n\nlayout(location = 0) in vec4 a_position;\n\nuniform vec2 u_resolution;\nuniform float u_pixelRatio;\nuniform float u_imageAspectRatio;\nuniform float u_originX;\nuniform float u_originY;\nuniform float u_worldWidth;\nuniform float u_worldHeight;\nuniform float u_fit;\nuniform float u_scale;\nuniform float u_rotation;\nuniform float u_offsetX;\nuniform float u_offsetY;\n\nout vec2 v_objectUV;\nout vec2 v_objectBoxSize;\nout vec2 v_responsiveUV;\nout vec2 v_responsiveBoxGivenSize;\nout vec2 v_patternUV;\nout vec2 v_patternBoxSize;\nout vec2 v_imageUV;\n\nvec3 getBoxSize(float boxRatio, vec2 givenBoxSize) {\n vec2 box = vec2(0.);\n // fit = none\n box.x = boxRatio * min(givenBoxSize.x / boxRatio, givenBoxSize.y);\n float noFitBoxWidth = box.x;\n if (u_fit == 1.) { // fit = contain\n box.x = boxRatio * min(u_resolution.x / boxRatio, u_resolution.y);\n } else if (u_fit == 2.) { // fit = cover\n box.x = boxRatio * max(u_resolution.x / boxRatio, u_resolution.y);\n }\n box.y = box.x / boxRatio;\n return vec3(box, noFitBoxWidth);\n}\n\nvoid main() {\n gl_Position = a_position;\n\n vec2 uv = gl_Position.xy * .5;\n vec2 boxOrigin = vec2(.5 - u_originX, u_originY - .5);\n vec2 givenBoxSize = vec2(u_worldWidth, u_worldHeight);\n givenBoxSize = max(givenBoxSize, vec2(1.)) * u_pixelRatio;\n float r = u_rotation * 3.14159265358979323846 / 180.;\n mat2 graphicRotation = mat2(cos(r), sin(r), -sin(r), cos(r));\n vec2 graphicOffset = vec2(-u_offsetX, u_offsetY);\n\n\n // ===================================================\n\n float fixedRatio = 1.;\n vec2 fixedRatioBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n\n v_objectBoxSize = getBoxSize(fixedRatio, fixedRatioBoxGivenSize).xy;\n vec2 objectWorldScale = u_resolution.xy / v_objectBoxSize;\n\n v_objectUV = uv;\n v_objectUV *= objectWorldScale;\n v_objectUV += boxOrigin * (objectWorldScale - 1.);\n v_objectUV += graphicOffset;\n v_objectUV /= u_scale;\n v_objectUV = graphicRotation * v_objectUV;\n\n // ===================================================\n\n v_responsiveBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n float responsiveRatio = v_responsiveBoxGivenSize.x / v_responsiveBoxGivenSize.y;\n vec2 responsiveBoxSize = getBoxSize(responsiveRatio, v_responsiveBoxGivenSize).xy;\n vec2 responsiveBoxScale = u_resolution.xy / responsiveBoxSize;\n\n #ifdef ADD_HELPERS\n v_responsiveHelperBox = uv;\n v_responsiveHelperBox *= responsiveBoxScale;\n v_responsiveHelperBox += boxOrigin * (responsiveBoxScale - 1.);\n #endif\n\n v_responsiveUV = uv;\n v_responsiveUV *= responsiveBoxScale;\n v_responsiveUV += boxOrigin * (responsiveBoxScale - 1.);\n v_responsiveUV += graphicOffset;\n v_responsiveUV /= u_scale;\n v_responsiveUV.x *= responsiveRatio;\n v_responsiveUV = graphicRotation * v_responsiveUV;\n v_responsiveUV.x /= responsiveRatio;\n\n // ===================================================\n\n float patternBoxRatio = givenBoxSize.x / givenBoxSize.y;\n vec2 patternBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n patternBoxRatio = patternBoxGivenSize.x / patternBoxGivenSize.y;\n\n vec3 boxSizeData = getBoxSize(patternBoxRatio, patternBoxGivenSize);\n v_patternBoxSize = boxSizeData.xy;\n float patternBoxNoFitBoxWidth = boxSizeData.z;\n vec2 patternBoxScale = u_resolution.xy / v_patternBoxSize;\n\n v_patternUV = uv;\n v_patternUV += graphicOffset / patternBoxScale;\n v_patternUV += boxOrigin;\n v_patternUV -= boxOrigin / patternBoxScale;\n v_patternUV *= u_resolution.xy;\n v_patternUV /= u_pixelRatio;\n if (u_fit > 0.) {\n v_patternUV *= (patternBoxNoFitBoxWidth / v_patternBoxSize.x);\n }\n v_patternUV /= u_scale;\n v_patternUV = graphicRotation * v_patternUV;\n v_patternUV += boxOrigin / patternBoxScale;\n v_patternUV -= boxOrigin;\n // x100 is a default multiplier between vertex and fragmant shaders\n // we use it to avoid UV presision issues\n v_patternUV *= .01;\n\n // ===================================================\n\n vec2 imageBoxSize;\n if (u_fit == 1.) { // contain\n imageBoxSize.x = min(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;\n } else if (u_fit == 2.) { // cover\n imageBoxSize.x = max(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;\n } else {\n imageBoxSize.x = min(10.0, 10.0 / u_imageAspectRatio * u_imageAspectRatio);\n }\n imageBoxSize.y = imageBoxSize.x / u_imageAspectRatio;\n vec2 imageBoxScale = u_resolution.xy / imageBoxSize;\n\n v_imageUV = uv;\n v_imageUV *= imageBoxScale;\n v_imageUV += boxOrigin * (imageBoxScale - 1.);\n v_imageUV += graphicOffset;\n v_imageUV /= u_scale;\n v_imageUV.x *= u_imageAspectRatio;\n v_imageUV = graphicRotation * v_imageUV;\n v_imageUV.x /= u_imageAspectRatio;\n\n v_imageUV += .5;\n v_imageUV.y = 1. - v_imageUV.y;\n}`;const r=1920*1080*4;class a{parentElement;canvasElement;gl;program=null;uniformLocations={};fragmentShader;rafId=null;lastRenderTime=0;currentFrame=0;speed=0;currentSpeed=0;providedUniforms;mipmaps=[];hasBeenDisposed=false;resolutionChanged=true;textures=new Map;minPixelRatio;maxPixelCount;isSafari=u();uniformCache={};textureUnitMap=new Map;ownerDocument;constructor(e,t,n,i,o=0,s=0,a=2,A=r,l=[]){if(e?.nodeType===1){this.parentElement=e}else{throw new Error("Paper Shaders: parent element must be an HTMLElement")}this.ownerDocument=e.ownerDocument;if(!this.ownerDocument.querySelector("style[data-paper-shader]")){const e=this.ownerDocument.createElement("style");e.innerHTML=c;e.setAttribute("data-paper-shader","");this.ownerDocument.head.prepend(e)}const u=this.ownerDocument.createElement("canvas");this.canvasElement=u;this.parentElement.prepend(u);this.fragmentShader=t;this.providedUniforms=n;this.mipmaps=l;this.currentFrame=s;this.minPixelRatio=a;this.maxPixelCount=A;const f=u.getContext("webgl2",i);if(!f){throw new Error("Paper Shaders: WebGL is not supported in this browser")}this.gl=f;this.initProgram();this.setupPositionAttribute();this.setupUniforms();this.setUniformValues(this.providedUniforms);this.setupResizeObserver();visualViewport?.addEventListener("resize",this.handleVisualViewportChange);this.setupIntersectionObserver();this.setSpeed(o);this.parentElement.setAttribute("data-paper-shader","");this.parentElement.paperShaderMount=this;this.ownerDocument.addEventListener("visibilitychange",this.handleDocumentVisibilityChange)}initProgram=()=>{const e=l(this.gl,s,this.fragmentShader);if(!e)return;this.program=e};setupPositionAttribute=()=>{const e=this.gl.getAttribLocation(this.program,"a_position");const t=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,t);const n=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1];this.gl.bufferData(this.gl.ARRAY_BUFFER,new Float32Array(n),this.gl.STATIC_DRAW);this.gl.enableVertexAttribArray(e);this.gl.vertexAttribPointer(e,2,this.gl.FLOAT,false,0,0)};setupUniforms=()=>{const e={u_time:this.gl.getUniformLocation(this.program,"u_time"),u_pixelRatio:this.gl.getUniformLocation(this.program,"u_pixelRatio"),u_resolution:this.gl.getUniformLocation(this.program,"u_resolution")};Object.entries(this.providedUniforms).forEach((([t,n])=>{e[t]=this.gl.getUniformLocation(this.program,t);if(n instanceof HTMLImageElement){const n=`${t}AspectRatio`;e[n]=this.gl.getUniformLocation(this.program,n)}}));this.uniformLocations=e};renderScale=1;parentWidth=0;parentHeight=0;parentDevicePixelWidth=0;parentDevicePixelHeight=0;devicePixelsSupported=false;intersectionObserver=null;isInViewport=true;resizeObserver=null;setupResizeObserver=()=>{this.resizeObserver=new ResizeObserver((([e])=>{if(e?.borderBoxSize[0]){const t=e.devicePixelContentBoxSize?.[0];if(t!==void 0){this.devicePixelsSupported=true;this.parentDevicePixelWidth=t.inlineSize;this.parentDevicePixelHeight=t.blockSize}this.parentWidth=e.borderBoxSize[0].inlineSize;this.parentHeight=e.borderBoxSize[0].blockSize}this.handleResize()}));this.resizeObserver.observe(this.parentElement)};setupIntersectionObserver=()=>{const e=this.ownerDocument.defaultView;if(!e?.IntersectionObserver)return;this.intersectionObserver=new e.IntersectionObserver((([e])=>{this.isInViewport=e?.isIntersecting??true;this.updateCurrentSpeed()}));this.intersectionObserver.observe(this.parentElement)};handleVisualViewportChange=()=>{this.resizeObserver?.disconnect();this.setupResizeObserver()};handleResize=()=>{let e=0;let t=0;const n=Math.max(1,window.devicePixelRatio);const i=visualViewport?.scale??1;if(this.devicePixelsSupported){const o=Math.max(1,this.minPixelRatio/n);e=this.parentDevicePixelWidth*o*i;t=this.parentDevicePixelHeight*o*i}else{let o=Math.max(n,this.minPixelRatio)*i;if(this.isSafari){const e=f(this.ownerDocument);o*=Math.max(1,e)}e=Math.round(this.parentWidth)*o;t=Math.round(this.parentHeight)*o}const o=Math.sqrt(this.maxPixelCount)/Math.sqrt(e*t);const s=Math.min(1,o);const r=Math.round(e*s);const a=Math.round(t*s);const A=r/Math.round(this.parentWidth);if(this.canvasElement.width!==r||this.canvasElement.height!==a||this.renderScale!==A){this.renderScale=A;this.canvasElement.width=r;this.canvasElement.height=a;this.resolutionChanged=true;this.gl.viewport(0,0,this.gl.canvas.width,this.gl.canvas.height);this.render(performance.now())}};render=e=>{if(this.hasBeenDisposed)return;if(this.program===null){console.warn("Tried to render before program or gl was initialized");return}const t=e-this.lastRenderTime;this.lastRenderTime=e;if(this.currentSpeed!==0){this.currentFrame+=t*this.currentSpeed}this.gl.clear(this.gl.COLOR_BUFFER_BIT);this.gl.useProgram(this.program);this.gl.uniform1f(this.uniformLocations.u_time,this.currentFrame*.001);if(this.resolutionChanged){this.gl.uniform2f(this.uniformLocations.u_resolution,this.gl.canvas.width,this.gl.canvas.height);this.gl.uniform1f(this.uniformLocations.u_pixelRatio,this.renderScale);this.resolutionChanged=false}this.gl.drawArrays(this.gl.TRIANGLES,0,6);if(this.currentSpeed!==0){this.requestRender()}else{this.rafId=null}};requestRender=()=>{if(this.rafId!==null){cancelAnimationFrame(this.rafId)}this.rafId=requestAnimationFrame(this.render)};setTextureUniform=(e,t)=>{if(!t.complete||t.naturalWidth===0){throw new Error(`Paper Shaders: image for uniform ${e} must be fully loaded`)}const n=this.textures.get(e);if(n){this.gl.deleteTexture(n)}if(!this.textureUnitMap.has(e)){this.textureUnitMap.set(e,this.textureUnitMap.size)}const i=this.textureUnitMap.get(e);this.gl.activeTexture(this.gl.TEXTURE0+i);const o=this.gl.createTexture();this.gl.bindTexture(this.gl.TEXTURE_2D,o);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR);this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t);if(this.mipmaps.includes(e)){this.gl.generateMipmap(this.gl.TEXTURE_2D);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR_MIPMAP_LINEAR)}const s=this.gl.getError();if(s!==this.gl.NO_ERROR||o===null){console.error("Paper Shaders: WebGL error when uploading texture:",s);return}this.textures.set(e,o);const r=this.uniformLocations[e];if(r){this.gl.uniform1i(r,i);const n=`${e}AspectRatio`;const o=this.uniformLocations[n];if(o){const e=t.naturalWidth/t.naturalHeight;this.gl.uniform1f(o,e)}}};areUniformValuesEqual=(e,t)=>{if(e===t)return true;if(Array.isArray(e)&&Array.isArray(t)&&e.length===t.length){return e.every(((e,n)=>this.areUniformValuesEqual(e,t[n])))}return false};setUniformValues=e=>{this.gl.useProgram(this.program);Object.entries(e).forEach((([e,t])=>{let n=t;if(t instanceof HTMLImageElement){n=`${t.src.slice(0,200)}|${t.naturalWidth}x${t.naturalHeight}`}if(this.areUniformValuesEqual(this.uniformCache[e],n))return;this.uniformCache[e]=n;const i=this.uniformLocations[e];if(!i){console.warn(`Uniform location for ${e} not found`);return}if(t instanceof HTMLImageElement){this.setTextureUniform(e,t)}else if(Array.isArray(t)){let n=null;let o=null;if(t[0]!==void 0&&Array.isArray(t[0])){const i=t[0].length;if(t.every((e=>e.length===i))){n=t.flat();o=i}else{console.warn(`All child arrays must be the same length for ${e}`);return}}else{n=t;o=n.length}switch(o){case 2:this.gl.uniform2fv(i,n);break;case 3:this.gl.uniform3fv(i,n);break;case 4:this.gl.uniform4fv(i,n);break;case 9:this.gl.uniformMatrix3fv(i,false,n);break;case 16:this.gl.uniformMatrix4fv(i,false,n);break;default:console.warn(`Unsupported uniform array length: ${o}`)}}else if(typeof t==="number"){this.gl.uniform1f(i,t)}else if(typeof t==="boolean"){this.gl.uniform1i(i,t?1:0)}else{console.warn(`Unsupported uniform type for ${e}: ${typeof t}`)}}))};getCurrentFrame=()=>this.currentFrame;setFrame=e=>{this.currentFrame=e;this.lastRenderTime=performance.now();this.render(performance.now())};setSpeed=(e=1)=>{this.speed=e;this.updateCurrentSpeed()};updateCurrentSpeed=()=>{this.setCurrentSpeed(this.ownerDocument.hidden||!this.isInViewport?0:this.speed)};setCurrentSpeed=e=>{this.currentSpeed=e;if(this.rafId===null&&e!==0){this.lastRenderTime=performance.now();this.rafId=requestAnimationFrame(this.render)}if(this.rafId!==null&&e===0){cancelAnimationFrame(this.rafId);this.rafId=null}};setMaxPixelCount=(e=r)=>{this.maxPixelCount=e;this.handleResize()};setMinPixelRatio=(e=2)=>{this.minPixelRatio=e;this.handleResize()};setUniforms=e=>{this.setUniformValues(e);this.providedUniforms={...this.providedUniforms,...e};this.render(performance.now())};handleDocumentVisibilityChange=()=>{this.updateCurrentSpeed()};dispose=()=>{this.hasBeenDisposed=true;if(this.rafId!==null){cancelAnimationFrame(this.rafId);this.rafId=null}if(this.gl&&this.program){this.textures.forEach((e=>{this.gl.deleteTexture(e)}));this.textures.clear();this.gl.deleteProgram(this.program);this.program=null;this.gl.bindBuffer(this.gl.ARRAY_BUFFER,null);this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER,null);this.gl.bindRenderbuffer(this.gl.RENDERBUFFER,null);this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,null);this.gl.getError()}if(this.resizeObserver){this.resizeObserver.disconnect();this.resizeObserver=null}if(this.intersectionObserver){this.intersectionObserver.disconnect();this.intersectionObserver=null}visualViewport?.removeEventListener("resize",this.handleVisualViewportChange);this.ownerDocument.removeEventListener("visibilitychange",this.handleDocumentVisibilityChange);this.uniformLocations={};this.canvasElement.remove();delete this.parentElement.paperShaderMount}}function A(e,t,n){const i=e.createShader(t);if(!i)return null;e.shaderSource(i,n);e.compileShader(i);if(!e.getShaderParameter(i,e.COMPILE_STATUS)){console.error("An error occurred compiling the shaders: "+e.getShaderInfoLog(i));e.deleteShader(i);return null}return i}function l(e,t,n){const i=e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT);const o=i?i.precision:null;if(o&&o<23){t=t.replace(/precision\s+(lowp|mediump)\s+float;/g,"precision highp float;");n=n.replace(/precision\s+(lowp|mediump)\s+float/g,"precision highp float").replace(/\b(uniform|varying|attribute)\s+(lowp|mediump)\s+(\w+)/g,"$1 highp $3")}const s=A(e,e.VERTEX_SHADER,t);const r=A(e,e.FRAGMENT_SHADER,n);if(!s||!r)return null;const a=e.createProgram();if(!a)return null;e.attachShader(a,s);e.attachShader(a,r);e.linkProgram(a);if(!e.getProgramParameter(a,e.LINK_STATUS)){console.error("Unable to initialize the shader program: "+e.getProgramInfoLog(a));e.deleteProgram(a);e.deleteShader(s);e.deleteShader(r);return null}e.detachShader(a,s);e.detachShader(a,r);e.deleteShader(s);e.deleteShader(r);return a}const c=`@layer paper-shaders {\n :where([data-paper-shader]) {\n isolation: isolate;\n position: relative;\n\n & canvas {\n contain: strict;\n display: block;\n position: absolute;\n inset: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n border-radius: inherit;\n corner-shape: inherit;\n }\n }\n}`;function u(){const e=navigator.userAgent.toLowerCase();return e.includes("safari")&&!e.includes("chrome")&&!e.includes("android")}function f(e){const t=visualViewport?.scale??1;const n=visualViewport?.width??window.innerWidth;const i=window.innerWidth-e.documentElement.clientWidth;const o=t*n+i;const s=outerWidth/o;const r=Math.round(100*s);if(r%5===0){return r/100}if(r===33){return 1/3}if(r===67){return 2/3}if(r===133){return 4/3}return s}const h={none:0,contain:1,cover:2};const g=`\n#define TWO_PI 6.28318530718\n#define PI 3.14159265358979323846\n`;const p=`\nvec2 rotate(vec2 uv, float th) {\n return mat2(cos(th), sin(th), -sin(th), cos(th)) * uv;\n}\n`;const B=`\n float randomR(vec2 p) {\n vec2 uv = floor(p) / 100. + .5;\n return texture(u_noiseTexture, fract(uv)).r;\n }\n`;const m=`\nfloat fiberRandom(vec2 p) {\n vec2 uv = floor(p) / 100.;\n return texture(u_noiseTexture, fract(uv)).b;\n}\n\nfloat fiberValueNoise(vec2 st) {\n vec2 i = floor(st);\n vec2 f = fract(st);\n float a = fiberRandom(i);\n float b = fiberRandom(i + vec2(1.0, 0.0));\n float c = fiberRandom(i + vec2(0.0, 1.0));\n float d = fiberRandom(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n float x1 = mix(a, b, u.x);\n float x2 = mix(c, d, u.x);\n return mix(x1, x2, u.y);\n}\n\nfloat fiberNoiseFbm(in vec2 n, vec2 seedOffset) {\n float total = 0.0, amplitude = 1.;\n for (int i = 0; i < 4; i++) {\n n = rotate(n, .7);\n total += fiberValueNoise(n + seedOffset) * amplitude;\n n *= 2.;\n amplitude *= 0.6;\n }\n return total;\n}\n\nfloat fiberNoise(vec2 uv, vec2 seedOffset) {\n float epsilon = 0.001;\n float n1 = fiberNoiseFbm(uv + vec2(epsilon, 0.0), seedOffset);\n float n2 = fiberNoiseFbm(uv - vec2(epsilon, 0.0), seedOffset);\n float n3 = fiberNoiseFbm(uv + vec2(0.0, epsilon), seedOffset);\n float n4 = fiberNoiseFbm(uv - vec2(0.0, epsilon), seedOffset);\n return length(vec2(n1 - n2, n3 - n4)) / (2.0 * epsilon);\n}\n`;const d=`#version 300 es\nprecision mediump float;\n\nuniform vec2 u_resolution;\nuniform float u_pixelRatio;\n\nuniform vec4 u_colorFront;\nuniform vec4 u_colorBack;\n\nuniform sampler2D u_image;\nuniform float u_imageAspectRatio;\n\nuniform float u_contrast;\nuniform float u_roughness;\nuniform float u_fiber;\nuniform float u_fiberSize;\nuniform float u_crumples;\nuniform float u_crumpleSize;\nuniform float u_folds;\nuniform float u_foldCount;\nuniform float u_drops;\nuniform float u_seed;\nuniform float u_fade;\n\nuniform sampler2D u_noiseTexture;\n\nin vec2 v_imageUV;\n\nout vec4 fragColor;\n\nfloat getUvFrame(vec2 uv) {\n float aax = 2. * fwidth(uv.x);\n float aay = 2. * fwidth(uv.y);\n\n float left = smoothstep(0., aax, uv.x);\n float right = 1. - smoothstep(1. - aax, 1., uv.x);\n float bottom = smoothstep(0., aay, uv.y);\n float top = 1. - smoothstep(1. - aay, 1., uv.y);\n\n return left * right * bottom * top;\n}\n\n${g}\n${p}\n${B}\nfloat valueNoise(vec2 st) {\n vec2 i = floor(st);\n vec2 f = fract(st);\n float a = randomR(i);\n float b = randomR(i + vec2(1.0, 0.0));\n float c = randomR(i + vec2(0.0, 1.0));\n float d = randomR(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n float x1 = mix(a, b, u.x);\n float x2 = mix(c, d, u.x);\n return mix(x1, x2, u.y);\n}\nfloat fbm(vec2 n) {\n float total = 0.0, amplitude = .4;\n for (int i = 0; i < 3; i++) {\n total += valueNoise(n) * amplitude;\n n *= 1.99;\n amplitude *= 0.65;\n }\n return total;\n}\n\n\nfloat randomG(vec2 p) {\n vec2 uv = floor(p) / 50. + .5;\n return texture(u_noiseTexture, fract(uv)).g;\n}\nfloat roughness(vec2 p) {\n p *= .1;\n float o = 0.;\n for (float i = 0.; ++i < 4.; p *= 2.1) {\n vec4 w = vec4(floor(p), ceil(p));\n vec2 f = fract(p);\n o += mix(\n mix(randomG(w.xy), randomG(w.xw), f.y),\n mix(randomG(w.zy), randomG(w.zw), f.y),\n f.x);\n o += .2 / exp(2. * abs(sin(.2 * p.x + .5 * p.y)));\n }\n return o / 3.;\n}\n\n${m}\n\nvec2 randomGB(vec2 p) {\n vec2 uv = floor(p) / 50. + .5;\n return texture(u_noiseTexture, fract(uv)).gb;\n}\nfloat crumpledNoise(vec2 t, float pw) {\n vec2 p = floor(t);\n float wsum = 0.;\n float cl = 0.;\n for (int y = -1; y < 2; y += 1) {\n for (int x = -1; x < 2; x += 1) {\n vec2 b = vec2(float(x), float(y));\n vec2 q = b + p;\n vec2 q2 = q - floor(q / 8.) * 8.;\n vec2 c = q + randomGB(q2);\n vec2 r = c - t;\n float w = pow(smoothstep(0., 1., 1. - abs(r.x)), pw) * pow(smoothstep(0., 1., 1. - abs(r.y)), pw);\n cl += (.5 + .5 * sin((q2.x + q2.y * 5.) * 8.)) * w;\n wsum += w;\n }\n }\n return pow(wsum != 0.0 ? cl / wsum : 0.0, .5) * 2.;\n}\nfloat crumplesShape(vec2 uv) {\n return crumpledNoise(uv * .25, 16.) * crumpledNoise(uv * .5, 2.);\n}\n\n\nvec2 folds(vec2 uv) {\n vec3 pp = vec3(0.);\n float l = 9.;\n for (float i = 0.; i < 15.; i++) {\n if (i >= u_foldCount) break;\n vec2 rand = randomGB(vec2(i, i * u_seed));\n float an = rand.x * TWO_PI;\n vec2 p = vec2(cos(an), sin(an)) * rand.y;\n float dist = distance(uv, p);\n l = min(l, dist);\n\n if (l == dist) {\n pp.xy = (uv - p.xy);\n pp.z = dist;\n }\n }\n return mix(pp.xy, vec2(0.), pow(pp.z, .25));\n}\n\nfloat drops(vec2 uv) {\n vec2 iDropsUV = floor(uv);\n vec2 fDropsUV = fract(uv);\n float dropsMinDist = 1.;\n for (int j = -1; j <= 1; j++) {\n for (int i = -1; i <= 1; i++) {\n vec2 neighbor = vec2(float(i), float(j));\n vec2 offset = randomGB(iDropsUV + neighbor);\n offset = .5 + .5 * sin(10. * u_seed + TWO_PI * offset);\n vec2 pos = neighbor + offset - fDropsUV;\n float dist = length(pos);\n dropsMinDist = min(dropsMinDist, dropsMinDist*dist);\n }\n }\n return 1. - smoothstep(.05, .09, pow(dropsMinDist, .5));\n}\n\nfloat lst(float edge0, float edge1, float x) {\n return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n}\n\nvoid main() {\n\n vec2 imageUV = v_imageUV;\n vec2 patternUV = v_imageUV - .5;\n patternUV = 5. * (patternUV * vec2(u_imageAspectRatio, 1.));\n\n vec2 roughnessUv = 1.5 * (gl_FragCoord.xy - .5 * u_resolution) / u_pixelRatio;\n float roughness = roughness(roughnessUv + vec2(1., 0.)) - roughness(roughnessUv - vec2(1., 0.));\n\n vec2 crumplesUV = fract(patternUV * .02 / u_crumpleSize - u_seed) * 32.;\n float crumples = u_crumples * (crumplesShape(crumplesUV + vec2(.05, 0.)) - crumplesShape(crumplesUV));\n\n vec2 fiberUV = 2. / u_fiberSize * patternUV;\n float fiber = fiberNoise(fiberUV, vec2(0.));\n fiber = .5 * u_fiber * (fiber - 1.);\n\n vec2 normal = vec2(0.);\n vec2 normalImage = vec2(0.);\n\n vec2 foldsUV = patternUV * .12;\n foldsUV = rotate(foldsUV, 4. * u_seed);\n vec2 w = folds(foldsUV);\n foldsUV = rotate(foldsUV + .007 * cos(u_seed), .01 * sin(u_seed));\n vec2 w2 = folds(foldsUV);\n\n float drops = u_drops * drops(patternUV * 2.);\n\n float fade = u_fade * fbm(.17 * patternUV + 10. * u_seed);\n fade = clamp(8. * fade * fade * fade, 0., 1.);\n\n w = mix(w, vec2(0.), fade);\n w2 = mix(w2, vec2(0.), fade);\n crumples = mix(crumples, 0., fade);\n drops = mix(drops, 0., fade);\n fiber *= mix(1., .5, fade);\n roughness *= mix(1., .5, fade);\n\n normal.xy += u_folds * min(5. * u_contrast, 1.) * 4. * max(vec2(0.), w + w2);\n normalImage.xy += u_folds * 2. * w;\n\n normal.xy += crumples;\n normalImage.xy += 1.5 * crumples;\n\n normal.xy += 3. * drops;\n normalImage.xy += .2 * drops;\n\n normal.xy += u_roughness * 1.5 * roughness;\n normal.xy += fiber;\n\n normalImage += u_roughness * .75 * roughness;\n normalImage += .2 * fiber;\n\n vec3 lightPos = vec3(1., 2., 1.);\n float res = dot(normalize(vec3(normal, 9.5 - 9. * pow(u_contrast, .1))), normalize(lightPos));\n\n vec3 fgColor = u_colorFront.rgb * u_colorFront.a;\n float fgOpacity = u_colorFront.a;\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n float bgOpacity = u_colorBack.a;\n\n imageUV += .02 * normalImage;\n float frame = getUvFrame(imageUV);\n vec4 image = texture(u_image, imageUV);\n image.rgb += .6 * pow(u_contrast, .4) * (res - .7);\n\n frame *= image.a;\n\n vec3 color = fgColor * res;\n float opacity = fgOpacity * res;\n\n color += bgColor * (1. - opacity);\n opacity += bgOpacity * (1. - opacity);\n opacity = mix(opacity, 1., frame);\n\n color -= .007 * drops;\n\n color.rgb = mix(color, image.rgb, frame);\n\n fragColor = vec4(color, opacity);\n}\n`;function x(e){if(Array.isArray(e)){if(e.length===4)return e;if(e.length===3)return[...e,1];return I}if(typeof e!=="string"){return I}let t,n,i,o=1;if(e.startsWith("#")){[t,n,i,o]=w(e)}else if(e.startsWith("rgb")){const s=v(e);if(s===null)return I;[t,n,i,o]=s}else if(e.startsWith("hsl")){const s=Q(e);if(s===null)return I;[t,n,i,o]=E(s)}else{console.error("Unsupported color format",e);return I}return[C(t,0,1),C(n,0,1),C(i,0,1),C(o,0,1)]}function w(e){e=e.replace(/^#/,"");if(e.length===3||e.length===4){e=e.split("").map((e=>e+e)).join("")}if(e.length===6){e=e+"ff"}if(!/^[0-9a-f]{8}$/i.test(e)){console.warn("Invalid hex color");return I}const t=parseInt(e.slice(0,2),16)/255;const n=parseInt(e.slice(2,4),16)/255;const i=parseInt(e.slice(4,6),16)/255;const o=parseInt(e.slice(6,8),16)/255;return[t,n,i,o]}function v(e){const t=e.match(/^rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([0-9.]+))?\s*\)$/i);if(!t)return null;return[parseInt(t[1]??"0")/255,parseInt(t[2]??"0")/255,parseInt(t[3]??"0")/255,t[4]===void 0?1:parseFloat(t[4])]}function Q(e){const t=e.match(/^hsla?\s*\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(?:,\s*([0-9.]+))?\s*\)$/i);if(!t)return null;return[parseInt(t[1]??"0"),parseInt(t[2]??"0"),parseInt(t[3]??"0"),t[4]===void 0?1:parseFloat(t[4])]}function E(e){const[t,n,i,o]=e;const s=t/360;const r=n/100;const a=i/100;let A,l,c;if(n===0){A=l=c=a}else{const e=(e,t,n)=>{if(n<0)n+=1;if(n>1)n-=1;if(n<1/6)return e+(t-e)*6*n;if(n<1/2)return t;if(n<2/3)return e+(t-e)*(2/3-n)*6;return e};const t=a<.5?a*(1+r):a+r-a*r;const n=2*a-t;A=e(n,t,s+1/3);l=e(n,t,s);c=e(n,t,s-1/3)}return[A,l,c,o]}const C=(e,t,n)=>Math.min(Math.max(e,t),n);const I=[.5,.5,.5,1];function U(){if(typeof window==="undefined"){return void 0}const e=new Image;e.src=b;return e}const b="data:image/png;base64,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";const S="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";const F={colorFront:"#b8b8b8",colorBack:"#ffffff",contrast:.3,roughness:.4,fiber:.3,fiberSize:.2,crumples:.3,crumpleSize:.35,folds:.65,foldCount:5,fade:0,drops:.2,seed:5.8,fit:"cover",scale:.6,rotation:0,originX:.5,originY:.5,offsetX:0,offsetY:0,worldWidth:0,worldHeight:0,speed:0,frame:0,minPixelRatio:2,maxPixelCount:1920*1080*4,opacity:1};const M=()=>`.sc-ds-paper-texture-h{position:absolute;inset:0;display:block;overflow:hidden;pointer-events:none;opacity:var(--ds-paper-texture-opacity, 1)}.paper-texture__mount.sc-ds-paper-texture{position:absolute;inset:0;width:100%;height:100%;overflow:hidden;isolation:isolate}.paper-texture__mount[data-paper-shader].sc-ds-paper-texture canvas.sc-ds-paper-texture{z-index:0}[data-paper-texture-error].sc-ds-paper-texture-h{display:none}`;let D;let V;function G(e){if(e.complete){return e.naturalWidth>0?Promise.resolve(e):Promise.reject(new Error(`Paper texture image failed to load: ${e.src}`))}return new Promise(((t,n)=>{const i=()=>{s();t(e)};const o=()=>{s();n(new Error(`Paper texture image failed to load: ${e.src}`))};const s=()=>{e.removeEventListener("load",i);e.removeEventListener("error",o)};e.addEventListener("load",i,{once:true});e.addEventListener("error",o,{once:true})}))}function R(e){if(e instanceof HTMLImageElement)return G(e);const t=new Image;if(e&&e!==S)t.crossOrigin="anonymous";t.src=e||S;return G(t)}function k(){D??(D=R(S));return D}function y(){V??(V=Promise.resolve(U()).then((e=>{if(!e)throw new Error("Paper texture noise texture is unavailable");return G(e)})));return V}const W=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.config={};this.syncGeneration=0;this.hasLoaded=false}componentDidLoad(){this.hasLoaded=true;void this.syncShader()}connectedCallback(){if(this.hasLoaded)void this.syncShader()}disconnectedCallback(){this.syncGeneration+=1;this.disposeShader()}onConfigChange(){if(this.hasLoaded)void this.syncShader()}resolvedConfig(){return{...F,...this.config??{}}}async syncShader(){const e=++this.syncGeneration;const t=this.resolvedConfig();try{const[n,i]=await Promise.all([R(t.image).catch((()=>k())),y()]);if(e!==this.syncGeneration||!this.el.isConnected)return;const o=this.buildUniforms(t,n,i);const s=this.el.querySelector(".paper-texture__mount");if(!s)return;if(!this.shaderMount){this.shaderMount=new a(s,d,o,undefined,t.speed,t.frame,t.minPixelRatio,t.maxPixelCount,["u_image"])}else{this.shaderMount.setUniforms(o);this.shaderMount.setSpeed(t.speed);this.shaderMount.setFrame(t.frame);this.shaderMount.setMinPixelRatio(t.minPixelRatio);this.shaderMount.setMaxPixelCount(t.maxPixelCount)}this.el.removeAttribute("data-paper-texture-error")}catch(t){if(e!==this.syncGeneration)return;this.disposeShader();this.el.querySelector(".paper-texture__mount")?.replaceChildren();this.el.setAttribute("data-paper-texture-error","unavailable");console.warn("[ds-paper-texture] WebGL2 paper texture unavailable.",t)}}buildUniforms(e,t,n){return{u_image:t,u_noiseTexture:n,u_colorFront:x(e.colorFront),u_colorBack:x(e.colorBack),u_contrast:e.contrast,u_roughness:e.roughness,u_fiber:e.fiber,u_fiberSize:e.fiberSize,u_crumples:e.crumples,u_crumpleSize:e.crumpleSize,u_foldCount:e.foldCount,u_folds:e.folds,u_fade:e.fade,u_drops:e.drops,u_seed:e.seed,u_fit:h[e.fit],u_scale:e.scale,u_rotation:e.rotation,u_offsetX:e.offsetX,u_offsetY:e.offsetY,u_originX:e.originX,u_originY:e.originY,u_worldWidth:e.worldWidth,u_worldHeight:e.worldHeight}}disposeShader(){this.shaderMount?.dispose();this.shaderMount=undefined}render(){const e=this.resolvedConfig();return n(i,{key:"11398247bb39eae20ae016b9508cc78a8457135b","aria-hidden":"true",style:{"--ds-paper-texture-opacity":String(e.opacity)}},n("div",{key:"05cdbe379634b4267ec4ddd7ac2f37838d8bcd78",class:"paper-texture__mount"}))}get el(){return this}static get watchers(){return{config:[{onConfigChange:0}]}}static get style(){return M()}},[2,"ds-paper-texture",{config:[16]},undefined,{config:[{onConfigChange:0}]}]);function H(){if(typeof customElements==="undefined"){return}const e=["ds-paper-texture"];e.forEach((e=>{switch(e){case"ds-paper-texture":if(!customElements.get(o(e))){customElements.define(o(e),W)}break}}))}H();export{W as P,H as d};
|
|
2
|
+
//# sourceMappingURL=p-BBZz2Dvg.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{p as e,H as t,c as s,h as r,a,t as i}from"./index.js";import{l as o,t as d}from"./p-TVkFIMXz.js";import{d as n}from"./p-CTAF7SkL.js";import{D as c}from"./p-DOUk4KoT.js";import{s as l,r as h}from"./p-DGVZhrMd.js";import{C as x}from"./p-CuwopElg.js";import{c as f}from"./p-DuFm-ieS.js";const u=()=>`.text-field-support.sc-ds-textarea{display:flex;align-items:baseline;gap:var(--dimension-space-100);width:100%}.text-field-support.sc-ds-textarea>.sc-ds-textarea:first-child:not(.text-field-count){flex:1;min-width:0}.text-field-count.sc-ds-textarea{flex:none;white-space:nowrap}@media (forced-colors: active){.sc-ds-textarea:root,.sc-ds-textarea-h,.ds-forced-colors-scope.sc-ds-textarea{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-interaction-fill.sc-ds-textarea-h,.ds-interaction-fill.sc-ds-textarea{position:var(--ds-interaction-position, relative);z-index:var(--ds-interaction-z-index, 0);cursor:default;--ds-interaction-hover:var(--color-interaction-hover);--ds-interaction-pressed:var(--color-interaction-pressed);--ds-interaction-active:var(--color-interaction-active-brand);--ds-interaction-border-width:0px;--ds-interaction-border-color:transparent;--ds-interaction-divider-width:0px;--ds-interaction-divider-color:transparent;--ds-interaction-divider-inline-start-width:0px;--ds-interaction-divider-inline-start-color:transparent;--ds-interaction-divider-inline-end-width:0px;--ds-interaction-divider-inline-end-color:transparent}.ds-interaction-fill.sc-ds-textarea-h::before,.ds-interaction-fill.sc-ds-textarea::before,.ds-interaction-fill.sc-ds-textarea-h::after,.ds-interaction-fill.sc-ds-textarea::after{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;pointer-events:none;cursor:inherit;transition:none}.ds-interaction-fill.sc-ds-textarea-h::before,.ds-interaction-fill.sc-ds-textarea::before{z-index:1}.ds-interaction-fill.sc-ds-textarea-h::after,.ds-interaction-fill.sc-ds-textarea::after{z-index:3;box-shadow:inset 0 calc(-1 * var(--ds-interaction-divider-width)) 0 var(--ds-interaction-divider-color), inset var(--ds-interaction-divider-inline-start-width) 0 0 var(--ds-interaction-divider-inline-start-color), inset calc(-1 * var(--ds-interaction-divider-inline-end-width)) 0 0 var(--ds-interaction-divider-inline-end-color), inset 0 0 0 var(--ds-interaction-border-width) var(--ds-interaction-border-color)}.ds-interaction-fill--bordered.sc-ds-textarea-h,.ds-interaction-fill--bordered.sc-ds-textarea{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--color-border-secondary)}.ds-interaction-fill--selected.sc-ds-textarea-h::before,.ds-interaction-fill--selected.sc-ds-textarea::before{background:var(--ds-interaction-active)}.ds-interaction-fill--selected.sc-ds-textarea-h,.ds-interaction-fill--selected.sc-ds-textarea{--ds-interaction-dot-ring:var(--ds-interaction-active)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-textarea-h:hover:not(:disabled)::after,.ds-interaction-fill.sc-ds-textarea:hover:not(:disabled)::after{background:var(--ds-interaction-hover)}}.ds-interaction-fill.sc-ds-textarea-h:active:not(:disabled)::after,.ds-interaction-fill.sc-ds-textarea:active:not(:disabled)::after{background:var(--ds-interaction-pressed)}.ds-interaction-fill--grouped.sc-ds-textarea-h::after,.ds-interaction-fill--grouped.sc-ds-textarea::after,.ds-interaction-fill--grouped.sc-ds-textarea-h:active:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-textarea:active:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill--grouped.sc-ds-textarea-h:hover:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-textarea:hover:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}}.ds-interaction-fill--grouped.sc-ds-textarea-h,.ds-interaction-fill--grouped.sc-ds-textarea{--ds-interaction-divider-width:var(--ds-interaction-group-divider-width, 0px);--ds-interaction-divider-color:var(--ds-interaction-group-divider-color, transparent);--ds-interaction-divider-inline-start-width:var( --ds-interaction-group-divider-inline-start-width, 0px );--ds-interaction-divider-inline-start-color:var( --ds-interaction-group-divider-inline-start-color, transparent );--ds-interaction-divider-inline-end-width:var( --ds-interaction-group-divider-inline-end-width, 0px );--ds-interaction-divider-inline-end-color:var( --ds-interaction-group-divider-inline-end-color, transparent )}.ds-interaction-fill.sc-ds-textarea-h>.ds-interaction-fill__content.sc-ds-textarea,.ds-interaction-fill.sc-ds-textarea>.ds-interaction-fill__content.sc-ds-textarea,.ds-interaction-fill__content.sc-ds-textarea{position:relative;z-index:2;cursor:inherit}.ds-interaction-fill--on-faint.sc-ds-textarea-h,.ds-interaction-fill--on-faint.sc-ds-textarea{--ds-interaction-active:var(--color-interaction-active)}.ds-interaction-fill--on-medium.sc-ds-textarea-h,.ds-interaction-fill--on-medium.sc-ds-textarea{--ds-interaction-hover:var(--color-interaction-on-medium-background-hover);--ds-interaction-pressed:var(--color-interaction-on-medium-background-pressed);--ds-interaction-active:var(--color-interaction-on-medium-background-active);--ds-focus-ring-color:var(--color-interaction-on-medium-background-focus)}.ds-interaction-fill--on-bold.sc-ds-textarea-h,.ds-interaction-fill--on-bold.sc-ds-textarea{--ds-interaction-hover:var(--color-interaction-on-bold-background-hover);--ds-interaction-pressed:var(--color-interaction-on-bold-background-pressed);--ds-interaction-active:var(--color-interaction-on-bold-background-active);--ds-focus-ring-color:var(--color-interaction-on-bold-background-focus)}.ds-interaction-fill--on-strong.sc-ds-textarea-h,.ds-interaction-fill--on-strong.sc-ds-textarea{--ds-interaction-hover:var(--color-interaction-on-strong-background-hover);--ds-interaction-pressed:var(--color-interaction-on-strong-background-pressed);--ds-interaction-active:var(--color-interaction-on-strong-background-active);--ds-focus-ring-color:var(--color-interaction-on-strong-background-focus)}.ds-interaction-fill--on-translucent.sc-ds-textarea-h,.ds-interaction-fill--on-translucent.sc-ds-textarea{--ds-interaction-hover:var(--color-translucent-interaction-hover);--ds-interaction-pressed:var(--color-translucent-interaction-pressed);--ds-interaction-active:var(--color-translucent-interaction-active-brand);--ds-focus-ring-color:var(--color-translucent-interaction-focus)}.ds-interaction-fill--on-inverted.sc-ds-textarea-h,.ds-interaction-fill--on-inverted.sc-ds-textarea{--ds-interaction-hover:var(--color-inverted-interaction-hover);--ds-interaction-pressed:var(--color-inverted-interaction-pressed);--ds-interaction-active:var(--color-inverted-interaction-active-brand);--ds-focus-ring-color:var(--color-inverted-interaction-focus)}.ds-interaction-fill--on-media.sc-ds-textarea-h,.ds-interaction-fill--on-media.sc-ds-textarea{--ds-interaction-hover:var(--color-media-interaction-hover);--ds-interaction-pressed:var(--color-media-interaction-pressed);--ds-interaction-active:var(--color-media-interaction-active);--ds-focus-ring-color:var(--color-media-interaction-focus)}.ds-interaction-fill--on-always-dark.sc-ds-textarea-h,.ds-interaction-fill--on-always-dark.sc-ds-textarea{--ds-interaction-hover:var(--color-always-dark-interaction-hover);--ds-interaction-pressed:var(--color-always-dark-interaction-pressed);--ds-interaction-active:var(--color-always-dark-interaction-active-brand);--ds-focus-ring-color:var(--color-always-dark-interaction-focus)}.ds-interaction-fill--on-chrome.sc-ds-textarea-h,.ds-interaction-fill--on-chrome.sc-ds-textarea{--ds-interaction-hover:var(--color-chrome-interaction-hover);--ds-interaction-pressed:var(--color-chrome-interaction-pressed);--ds-interaction-active:var(--color-chrome-interaction-active);--ds-focus-ring-color:var(--color-chrome-interaction-focus)}.ds-interaction-fill--on-navigation.sc-ds-textarea-h,.ds-interaction-fill--on-navigation.sc-ds-textarea{--ds-interaction-hover:var(--color-navigation-interaction-hover);--ds-interaction-pressed:var(--color-navigation-interaction-pressed);--ds-interaction-active:var(--color-navigation-interaction-active);--ds-focus-ring-color:var(--color-navigation-interaction-focus)}.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-textarea-h:not(:disabled)::after,.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-textarea:not(:disabled)::after{background:var(--ds-interaction-pressed)}@media (forced-colors: active){.ds-interaction-fill.sc-ds-textarea-h::after,.ds-interaction-fill.sc-ds-textarea::after{box-shadow:none;outline:var(--ds-interaction-border-width) solid var(--ds-forced-color-control-boundary);outline-offset:calc(-1 * var(--ds-interaction-border-width))}.ds-interaction-fill--surface-open.sc-ds-textarea-h:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill--surface-open.sc-ds-textarea:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after{outline:var(--dimension-stroke-width-025) dashed var(--ds-forced-color-control-boundary);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}.ds-interaction-fill--selected.sc-ds-textarea-h::before,.ds-interaction-fill--selected.sc-ds-textarea::before{background:transparent;outline:var(--dimension-stroke-width-025) solid var(--ds-forced-color-selected);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}}@media (forced-colors: active) and (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-textarea-h:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill.sc-ds-textarea:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after{outline-color:var(--ds-forced-color-selected);outline-width:var(--dimension-stroke-width-012)}}@media (forced-colors: active){.sc-ds-textarea:root,.sc-ds-textarea-h,.ds-forced-colors-scope.sc-ds-textarea{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-textarea-h{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}.ds-focus-ring.sc-ds-textarea-h,.ds-focus-ring.sc-ds-textarea,.ds-focus-ring-inset.sc-ds-textarea-h,.ds-focus-ring-inset.sc-ds-textarea{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-textarea-h:focus-visible,.ds-focus-ring.sc-ds-textarea:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring.ds-focus-ring--visible.sc-ds-textarea-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-textarea{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring-inset.sc-ds-textarea-h:focus-visible,.ds-focus-ring-inset.sc-ds-textarea:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-textarea-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-textarea:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-textarea-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-textarea{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-textarea-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-textarea::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}@media (forced-colors: active){.sc-ds-textarea-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}@media (forced-colors: active){.sc-ds-textarea:root,.sc-ds-textarea-h,.ds-forced-colors-scope.sc-ds-textarea{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-control-inactive.sc-ds-textarea-h,.ds-control-inactive.sc-ds-textarea{opacity:var(--effect-opacity-medium);pointer-events:none;cursor:not-allowed}@media (forced-colors: active){.ds-control-inactive.sc-ds-textarea-h,.ds-control-inactive.sc-ds-textarea{color:var(--ds-forced-color-disabled);opacity:1}}.sc-ds-textarea-h,.sc-ds-textarea:where(.ds-table),.sc-ds-textarea:where(.tooltip-popup),.sc-ds-textarea:where(.ds-radius){--ds-radius-control:var(--dimension-radius-025);--ds-radius-card:var(--dimension-radius-050);--ds-radius-modal:var(--dimension-radius-050);--ds-radius-menu:var(--dimension-radius-075);--ds-radius-tooltip-control:var(--dimension-radius-025);--ds-radius-tooltip-menu:var(--dimension-radius-075);--ds-radius-table:var(--dimension-radius-050)}.ds-control--lg.sc-ds-textarea,.ds-control--lg.sc-ds-textarea-h,.ds-control--md.sc-ds-textarea-h,.ds-control--md.sc-ds-textarea,.ds-control--sm.sc-ds-textarea-h,.ds-control--sm.sc-ds-textarea,.ds-control--xs.sc-ds-textarea-h,.ds-control--xs.sc-ds-textarea{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-textarea-h,.ds-control--lg.sc-ds-textarea{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-textarea-h,.ds-control--md.sc-ds-textarea{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-textarea-h,.ds-control--sm.sc-ds-textarea{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-textarea-h,.ds-control--xs.sc-ds-textarea{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-control-width--hug.sc-ds-textarea-h,.ds-control-width--hug.sc-ds-textarea{width:fit-content;max-width:100%;flex:0 0 auto}.ds-control-width--fill.sc-ds-textarea-h,.ds-control-width--fill.sc-ds-textarea{width:100%;min-width:0;flex:1 1 auto;align-self:stretch}.ds-field-stack.sc-ds-textarea-h,.ds-field-stack.sc-ds-textarea{display:flex;flex-direction:column;gap:var(--dimension-space-050)}.ds-field-stack.ds-field-stack--supporting-inset.sc-ds-textarea-h .error-text.sc-ds-textarea,.ds-field-stack.ds-field-stack--supporting-inset.sc-ds-textarea .error-text.sc-ds-textarea,.ds-field-stack.ds-field-stack--supporting-inset.sc-ds-textarea .field__description.sc-ds-textarea,.ds-field-stack.ds-field-stack--supporting-inset.sc-ds-textarea .field__error.sc-ds-textarea{padding-inline:calc( var(--ds-control-padding-inline, var(--dimension-space-075)) + var(--ds-control-label-inset, var(--dimension-space-025)) )}.ds-text--display-medium.sc-ds-textarea-h,.ds-text--display-medium.sc-ds-textarea{font-size:var(--typography-fontsize-3xl);line-height:var(--typography-lineheight-3xl)}.ds-text--display-small.sc-ds-textarea-h,.ds-text--display-small.sc-ds-textarea{font-size:var(--typography-fontsize-2xl);line-height:var(--typography-lineheight-2xl)}.ds-text--title-large.sc-ds-textarea-h,.ds-text--title-large.sc-ds-textarea{font-size:var(--typography-fontsize-xl);line-height:var(--typography-lineheight-xl)}.ds-text--title-medium.sc-ds-textarea-h,.ds-text--title-medium.sc-ds-textarea{font-size:var(--typography-fontsize-lg);line-height:var(--typography-lineheight-lg)}.ds-text--title-small.sc-ds-textarea-h,.ds-text--title-small.sc-ds-textarea{font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md)}.ds-text--body-large.sc-ds-textarea-h,.ds-text--body-large.sc-ds-textarea{font-size:var(--typography-fontsize-lg);line-height:var(--typography-lineheight-lg)}.ds-text--body-medium.sc-ds-textarea-h,.ds-text--body-medium.sc-ds-textarea{font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md)}.ds-text--body-small.sc-ds-textarea-h,.ds-text--body-small.sc-ds-textarea{font-size:var(--typography-fontsize-sm);line-height:var(--typography-lineheight-sm)}.ds-text--caption.sc-ds-textarea-h,.ds-text--caption.sc-ds-textarea{font-size:var(--typography-fontsize-xs);line-height:var(--typography-lineheight-xs);text-transform:uppercase}.ds-text--display-medium.ds-text--emphasis.sc-ds-textarea-h,.ds-text--display-small.ds-text--emphasis.sc-ds-textarea-h,.ds-text--display-medium.ds-text--emphasis.sc-ds-textarea,.ds-text--display-small.ds-text--emphasis.sc-ds-textarea{font-weight:var(--typography-weight-bold);letter-spacing:var(--typography-letterspacing-negative-double)}.ds-text--display-medium.ds-text--regular.sc-ds-textarea-h,.ds-text--display-small.ds-text--regular.sc-ds-textarea-h,.ds-text--display-medium.ds-text--regular.sc-ds-textarea,.ds-text--display-small.ds-text--regular.sc-ds-textarea{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-large.ds-text--emphasis.sc-ds-textarea-h,.ds-text--title-large.ds-text--emphasis.sc-ds-textarea{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative-double)}.ds-text--title-large.ds-text--regular.sc-ds-textarea-h,.ds-text--title-large.ds-text--regular.sc-ds-textarea{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-medium.ds-text--emphasis.sc-ds-textarea-h,.ds-text--title-small.ds-text--emphasis.sc-ds-textarea-h,.ds-text--title-medium.ds-text--emphasis.sc-ds-textarea,.ds-text--title-small.ds-text--emphasis.sc-ds-textarea{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-medium.ds-text--regular.sc-ds-textarea-h,.ds-text--title-small.ds-text--regular.sc-ds-textarea-h,.ds-text--title-medium.ds-text--regular.sc-ds-textarea,.ds-text--title-small.ds-text--regular.sc-ds-textarea{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-large.ds-text--emphasis.sc-ds-textarea-h,.ds-text--body-medium.ds-text--emphasis.sc-ds-textarea-h,.ds-text--body-large.ds-text--emphasis.sc-ds-textarea,.ds-text--body-medium.ds-text--emphasis.sc-ds-textarea{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--body-large.ds-text--regular.sc-ds-textarea-h,.ds-text--body-medium.ds-text--regular.sc-ds-textarea-h,.ds-text--body-large.ds-text--regular.sc-ds-textarea,.ds-text--body-medium.ds-text--regular.sc-ds-textarea{font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-small.ds-text--emphasis.sc-ds-textarea-h,.ds-text--body-small.ds-text--emphasis.sc-ds-textarea{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-small.ds-text--regular.sc-ds-textarea-h,.ds-text--body-small.ds-text--regular.sc-ds-textarea{font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-none)}.ds-text--caption.ds-text--emphasis.sc-ds-textarea-h,.ds-text--caption.ds-text--emphasis.sc-ds-textarea{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-positive)}.ds-text--caption.ds-text--regular.sc-ds-textarea-h,.ds-text--caption.ds-text--regular.sc-ds-textarea{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-positive)}@media (forced-colors: active){.sc-ds-textarea:root,.sc-ds-textarea-h,.ds-forced-colors-scope.sc-ds-textarea{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.textarea-host.sc-ds-textarea-h{display:inline-flex;--ds-textarea-fg:var(--color-foreground-primary);--ds-textarea-placeholder:var(--color-foreground-secondary);--ds-textarea-placeholder-active:var(--color-foreground-quaternary);--ds-textarea-border:var(--color-border-secondary)}.ds-control-width--fill.sc-ds-textarea-h,.ds-control-width--fill.sc-ds-textarea-h .textarea-control.sc-ds-textarea{width:100%}.textarea-control.sc-ds-textarea{display:flex;box-sizing:border-box;min-width:0;overflow:hidden;background:transparent;border:none;border-radius:var(--ds-control-radius, var(--dimension-radius-025));color:var(--ds-textarea-fg)}.textarea-control--resizable.sc-ds-textarea{padding-block-end:var(--dimension-space-025);padding-inline-end:var(--dimension-space-025)}.textarea-control--bordered.sc-ds-textarea{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--ds-textarea-border)}.textarea-control--error.sc-ds-textarea{--ds-interaction-border-width:var(--dimension-stroke-width-018);--ds-interaction-border-color:var(--color-border-bold-negative)}.textarea-control--bordered.sc-ds-textarea:focus-within:not(.textarea-control--error){--ds-interaction-border-width:var(--dimension-stroke-width-018);--ds-interaction-border-color:var(--color-border-bold-brand)}.ds-control-inactive.sc-ds-textarea-h .textarea-control.sc-ds-textarea::after{background:transparent}.native-textarea.sc-ds-textarea{position:relative;z-index:2;box-sizing:border-box;min-width:0;width:100%;padding-block:var(--ds-control-padding-inline, var(--dimension-space-075));padding-inline:calc( var(--ds-control-padding-inline, var(--dimension-space-075)) + var(--ds-control-label-inset, var(--dimension-space-025)) );background:transparent;border:none;border-radius:inherit;outline:none;color:var(--ds-textarea-fg);font-family:inherit;-webkit-appearance:none;appearance:none}.native-textarea--resize-vertical.sc-ds-textarea{resize:vertical}.native-textarea--resize-none.sc-ds-textarea{resize:none}.native-textarea.sc-ds-textarea:disabled{cursor:not-allowed}.native-textarea.sc-ds-textarea:read-only:not(:disabled){cursor:default}.native-textarea.sc-ds-textarea::placeholder{color:var(--ds-textarea-placeholder)}.native-textarea.sc-ds-textarea:focus::placeholder{color:var(--ds-textarea-placeholder-active)}.error-text.sc-ds-textarea{width:100%}@media (forced-colors: active){.textarea-control--bordered.sc-ds-textarea:focus-within:not(.textarea-control--error)::after{outline-color:var(--ds-forced-color-selected)}.textarea-control--error.sc-ds-textarea::after{outline-style:dashed}}`;let v=0;const g=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.dsChange=s(this,"dsChange",7);this.internals=this.attachInternals();this.generatedId=`ds-textarea-${++v}`;this.errorId=`${this.generatedId}-error`;this.value="";this.disabled=false;this.readOnly=false;this.required=false;this.requiredMessage=c;this.lengthBehavior="error";this.showCharacterCount=true;this.rows=4;this.resize="vertical";this.inputMode="";this.enterKeyHint="";this.spellCheck=true;this.size="md";this.width="fill";this.hasBorder=true;this.hasInteractionFill=true;this.isInactive=false;this.autoFocus=false;this.error=false;this.ariaLabel=null;this.constraintMessage="";this.submitted=false;this.initialValue="";this.formDisabled=false;this.focused=false;this.touched=false;this.handleInput=e=>{this.value=e.target.value;this.dsChange.emit(this.value)};this.handleFocus=()=>{this.focused=true};this.handleBlur=()=>{this.focused=false;this.touched=true}}get managedByField(){return Boolean(this.el.closest("ds-field"))}get visibleConstraintMessage(){return this.touched||this.submitted||this.maxLength!==undefined&&this.value.length>this.maxLength?this.constraintMessage:""}get hasCounter(){return this.showCharacterCount&&o(this.maxLength)!==undefined}componentWillLoad(){this.initialValue=this.value;this.syncFormValue()}syncFormValue(){const e=this.isInactive||this.disabled||this.formDisabled;l(this.internals,this.value,{inactive:e});const t=e||this.readOnly?{flags:{},message:""}:d(this);this.constraintMessage=t.message;this.internals.setValidity(t.flags,t.message)}formDisabledCallback(e){this.formDisabled=e;this.syncFormValue()}formResetCallback(){this.value=this.initialValue;this.touched=false;this.submitted=false}formStateRestoreCallback(e){this.value=h(e)}async setFocus(){this.textareaEl?.focus()}render(){const e=this.inputId??this.generatedId;const t=this.isInactive||this.disabled||this.formDisabled;const s=this.value.length>0;const i=this.value!==this.initialValue;const d=this.error&&this.errorMessage?this.errorMessage:this.visibleConstraintMessage;const n=this.error||Boolean(this.visibleConstraintMessage);const c=Boolean(d)&&!this.managedByField;const l=this.hasCounter&&!this.managedByField;const h=x[this.size];const u=Number.isFinite(this.rows)?Math.max(1,Math.floor(this.rows)):4;const v=[this.ariaDescribedby,c?this.errorId:undefined,l?`${this.generatedId}-count`:undefined].filter(Boolean).join(" ")||undefined;return r(a,{key:"3c7acdfb56826fd2722b08259771f362bdbf0f32",class:{"textarea-host":true,"ds-field-stack":true,"ds-field-stack--supporting-inset":!this.hasBorder,"ds-control-inactive":t,[`ds-control--${this.size}`]:true,...f(this.width)},"data-disabled":t?"":undefined,"data-readonly":this.readOnly?"":undefined,"data-required":this.required?"":undefined,"data-invalid":n?"":undefined,"data-constraint-message":this.visibleConstraintMessage||undefined,"data-character-count":this.hasCounter?String(this.value.length):undefined,"data-character-limit":this.hasCounter?String(o(this.maxLength)):undefined,onInvalid:()=>{this.submitted=true},"data-filled":s?"":undefined,"data-focused":this.focused?"":undefined,"data-dirty":i?"":undefined,"data-touched":this.touched?"":undefined},r("div",{key:"1a6d436a49b6c617687cd45b8c1629e8be79aefc",class:{"textarea-control":true,"textarea-control--resizable":this.resize==="vertical","textarea-control--bordered":this.hasBorder,"textarea-control--error":this.hasBorder&&n,"ds-interaction-fill":this.hasInteractionFill,[`ds-control--${this.size}`]:true}},r("textarea",{key:"5d0c93806973dc148e793683cd680a8b984a77d8",ref:e=>{this.textareaEl=e},id:e,value:this.value,placeholder:this.placeholder,rows:u,disabled:t,readOnly:this.readOnly,required:this.required,minLength:o(this.minLength),maxLength:this.lengthBehavior==="restrict"?o(this.maxLength):undefined,autoFocus:this.autoFocus,autoComplete:this.autoComplete,inputMode:this.inputMode||undefined,enterKeyHint:this.enterKeyHint||undefined,spellcheck:this.spellCheck,class:`native-textarea native-textarea--resize-${this.resize} ds-text--${h.replace("text-","")} ds-text--regular ds-interaction-fill__content`,"aria-label":this.ariaLabel,"aria-labelledby":this.ariaLabelledby,"aria-describedby":v,"aria-invalid":n?"true":undefined,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur})),(c||l)&&r("div",{key:"095ac3f5abb4c25c211c75346af4410a7d1e5fcc",class:"text-field-support"},c&&r("ds-text",{key:"1153a61f31b6b6e60a83c35e6f4e867baac8a720",class:"error-text",as:"div",variant:"text-body-small",color:"negative",textId:this.errorId,role:"alert"},d),l&&r("ds-text",{key:"60e62fe3ced1022d9bf690f6a446618da4936a92",as:"span",class:"text-field-count",variant:"text-body-small",color:n?"negative":"secondary",textId:`${this.generatedId}-count`},this.value.length,"/",o(this.maxLength))))}static get formAssociated(){return true}get el(){return this}static get watchers(){return{value:[{syncFormValue:0}],disabled:[{syncFormValue:0}],isInactive:[{syncFormValue:0}],required:[{syncFormValue:0}],readOnly:[{syncFormValue:0}],minLength:[{syncFormValue:0}],maxLength:[{syncFormValue:0}],requiredMessage:[{syncFormValue:0}]}}static get style(){return u()}},[66,"ds-textarea",{value:[1025],name:[513],form:[513],disabled:[516],readOnly:[516,"read-only"],required:[516],requiredMessage:[1,"required-message"],minLength:[2,"min-length"],maxLength:[2,"max-length"],lengthBehavior:[1,"length-behavior"],showCharacterCount:[4,"show-character-count"],placeholder:[1],rows:[2],resize:[1],autoComplete:[1,"autocomplete"],inputMode:[1,"inputmode"],enterKeyHint:[1,"enterkeyhint"],spellCheck:[4,"spellcheck"],size:[1],width:[1],hasBorder:[4,"has-border"],hasInteractionFill:[4,"has-interaction-fill"],isInactive:[4,"is-inactive"],autoFocus:[4,"auto-focus"],error:[4],errorMessage:[1,"error-message"],inputId:[1,"input-id"],ariaLabel:[1,"aria-label"],ariaLabelledby:[1,"aria-labelledby"],ariaDescribedby:[1,"aria-describedby"],constraintMessage:[32],submitted:[32],formDisabled:[32],focused:[32],touched:[32],setFocus:[64]},undefined,{value:[{syncFormValue:0}],disabled:[{syncFormValue:0}],isInactive:[{syncFormValue:0}],required:[{syncFormValue:0}],readOnly:[{syncFormValue:0}],minLength:[{syncFormValue:0}],maxLength:[{syncFormValue:0}],requiredMessage:[{syncFormValue:0}]}]);function p(){if(typeof customElements==="undefined"){return}const e=["ds-textarea","ds-text"];e.forEach((e=>{switch(e){case"ds-textarea":if(!customElements.get(i(e))){customElements.define(i(e),g)}break;case"ds-text":if(!customElements.get(i(e))){n()}break}}))}p();export{g as T,p as d};
|
|
2
|
+
//# sourceMappingURL=p-BC9xYdJD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["textareaCss","idCounter","Textarea","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","generatedId","errorId","value","disabled","readOnly","required","requiredMessage","DEFAULT_REQUIRED_MESSAGE","lengthBehavior","showCharacterCount","rows","resize","inputMode","enterKeyHint","spellCheck","size","width","hasBorder","hasInteractionFill","isInactive","autoFocus","error","ariaLabel","constraintMessage","submitted","initialValue","formDisabled","focused","touched","handleInput","event","target","dsChange","emit","handleFocus","handleBlur","managedByField","Boolean","el","closest","visibleConstraintMessage","maxLength","undefined","length","hasCounter","lengthLimit","componentWillLoad","syncFormValue","inactive","setFormControlValue","internals","validity","flags","message","textConstraintValidity","setValidity","formDisabledCallback","formResetCallback","formStateRestoreCallback","state","restoreStringFormState","setFocus","textareaEl","focus","render","inputId","filled","dirty","errorMessage","invalid","showError","showCounter","textVariant","CONTROL_TEXT_VARIANT","Number","isFinite","Math","max","floor","describedBy","ariaDescribedby","filter","join","h","Host","key","class","controlWidthClass","String","onInvalid","ref","element","id","placeholder","minLength","autoComplete","spellcheck","replace","ariaLabelledby","onInput","onFocus","onBlur","as","variant","color","textId","role"],"sources":["src/wc/components/Textarea/Textarea.css?tag=ds-textarea&encapsulation=scoped","src/wc/components/Textarea/Textarea.tsx"],"sourcesContent":["@import '../../utils/text-field-support.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/control-inactive.css';\n@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/control-width.css';\n@import '../../utils/field-stack.css';\n@import '../../utils/typography.css';\n@import '../../utils/forced-colors.css';\n\n:host(.textarea-host) {\n display: inline-flex;\n --ds-textarea-fg: var(--color-foreground-primary);\n --ds-textarea-placeholder: var(--color-foreground-secondary);\n --ds-textarea-placeholder-active: var(--color-foreground-quaternary);\n --ds-textarea-border: var(--color-border-secondary);\n}\n\n:host(.ds-control-width--fill),\n:host(.ds-control-width--fill) .textarea-control {\n width: 100%;\n}\n\n.textarea-control {\n display: flex;\n box-sizing: border-box;\n min-width: 0;\n overflow: hidden;\n background: transparent;\n border: none;\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n color: var(--ds-textarea-fg);\n}\n\n.textarea-control--resizable {\n padding-block-end: var(--dimension-space-025);\n padding-inline-end: var(--dimension-space-025);\n}\n\n.textarea-control--bordered {\n --ds-interaction-border-width: var(--dimension-stroke-width-012);\n --ds-interaction-border-color: var(--ds-textarea-border);\n}\n\n.textarea-control--error {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-negative);\n}\n\n.textarea-control--bordered:focus-within:not(.textarea-control--error) {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-brand);\n}\n\n:host(.ds-control-inactive) .textarea-control::after {\n background: transparent;\n}\n\n.native-textarea {\n position: relative;\n z-index: 2;\n box-sizing: border-box;\n min-width: 0;\n width: 100%;\n padding-block: var(--ds-control-padding-inline, var(--dimension-space-075));\n padding-inline: calc(\n var(--ds-control-padding-inline, var(--dimension-space-075)) +\n var(--ds-control-label-inset, var(--dimension-space-025))\n );\n background: transparent;\n border: none;\n border-radius: inherit;\n outline: none;\n color: var(--ds-textarea-fg);\n font-family: inherit;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.native-textarea--resize-vertical {\n resize: vertical;\n}\n\n.native-textarea--resize-none {\n resize: none;\n}\n\n.native-textarea:disabled {\n cursor: not-allowed;\n}\n\n.native-textarea:read-only:not(:disabled) {\n cursor: default;\n}\n\n.native-textarea::placeholder {\n color: var(--ds-textarea-placeholder);\n}\n\n.native-textarea:focus::placeholder {\n color: var(--ds-textarea-placeholder-active);\n}\n\n.error-text {\n width: 100%;\n}\n\n@media (forced-colors: active) {\n .textarea-control--bordered:focus-within:not(.textarea-control--error)::after {\n outline-color: var(--ds-forced-color-selected);\n }\n\n .textarea-control--error::after {\n outline-style: dashed;\n }\n}\n","import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport {\n controlWidthClass,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n restoreStringFormState,\n setFormControlValue,\n type ControlWidth,\n} from '../../utils';\n\nimport { lengthLimit, textConstraintValidity } from '../../utils/text-constraints';\n\nexport type TextareaSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type TextareaWidth = ControlWidth;\nexport type TextareaResize = 'vertical' | 'none';\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-textarea',\n styleUrl: 'Textarea.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Textarea {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private generatedId = `ds-textarea-${++idCounter}`;\n private errorId = `${this.generatedId}-error`;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop({ reflect: true }) name: string | undefined;\n @Prop({ reflect: true }) form: string | undefined;\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Keeps the value focusable and submittable while preventing edits. */\n @Prop({ reflect: true }) readOnly: boolean = false;\n @Prop({ reflect: true }) required: boolean = false;\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n /** Minimum non-empty text length, in native UTF-16 code units. */\n @Prop() minLength: number | undefined;\n /** Maximum text length. A visible counter accompanies this constraint by default. */\n @Prop() maxLength: number | undefined;\n /** Error preserves extra text; restrict uses the browser's hard input limit. */\n @Prop() lengthBehavior: 'error' | 'restrict' = 'error';\n @Prop() showCharacterCount: boolean = true;\n @Prop() placeholder: string | undefined;\n /** Visible text rows before the field scrolls. */\n @Prop() rows: number = 4;\n /** Whether the user can resize the field vertically. */\n @Prop() resize: TextareaResize = 'vertical';\n /** Native browser autofill hint. */\n @Prop({ attribute: 'autocomplete' }) autoComplete: string | undefined;\n /** Preferred virtual keyboard without changing the value semantics. */\n @Prop({ attribute: 'inputmode' }) inputMode: string = '';\n /** Preferred virtual-keyboard action label. */\n @Prop({ attribute: 'enterkeyhint' }) enterKeyHint: string = '';\n /** Whether the browser should check spelling and grammar. */\n @Prop({ attribute: 'spellcheck' }) spellCheck: boolean = true;\n /** Control density for typography and inset spacing. */\n @Prop() size: TextareaSize = 'md';\n /** Width fit — fill the parent (default) or hug the available content. */\n @Prop() width: TextareaWidth = 'fill';\n /** Show the standard inset border, including focused and invalid strokes. */\n @Prop() hasBorder: boolean = true;\n /** Show the standard hover and pressed fill when the field is not embedded in interactive chrome. */\n @Prop() hasInteractionFill: boolean = true;\n @Prop() isInactive: boolean = false;\n @Prop() autoFocus: boolean = false;\n @Prop() error: boolean = false;\n @Prop() errorMessage: string | undefined;\n /** Associates the internal textarea with an external <label>. */\n @Prop() inputId: string | undefined;\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n @Prop({ attribute: 'aria-describedby' }) ariaDescribedby: string | undefined;\n\n @Event() dsChange!: EventEmitter<string>;\n\n @State() private constraintMessage = '';\n @State() private submitted = false;\n private get managedByField(): boolean {\n return Boolean(this.el.closest('ds-field'));\n }\n private get visibleConstraintMessage(): string {\n return this.touched ||\n this.submitted ||\n (this.maxLength !== undefined && this.value.length > this.maxLength)\n ? this.constraintMessage\n : '';\n }\n private get hasCounter(): boolean {\n return this.showCharacterCount && lengthLimit(this.maxLength) !== undefined;\n }\n\n private initialValue = '';\n private textareaEl?: HTMLTextAreaElement;\n @State() private formDisabled = false;\n @State() private focused = false;\n @State() private touched = false;\n\n componentWillLoad() {\n this.initialValue = this.value;\n this.syncFormValue();\n }\n\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n @Watch('readOnly')\n @Watch('minLength')\n @Watch('maxLength')\n @Watch('requiredMessage')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n setFormControlValue(this.internals, this.value, { inactive });\n const validity =\n inactive || this.readOnly ? { flags: {}, message: '' } : textConstraintValidity(this);\n this.constraintMessage = validity.message;\n this.internals.setValidity(validity.flags, validity.message);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.initialValue;\n this.touched = false;\n this.submitted = false;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this.value = restoreStringFormState(state);\n }\n\n @Method()\n async setFocus() {\n this.textareaEl?.focus();\n }\n\n private handleInput = (event: Event) => {\n this.value = (event.target as HTMLTextAreaElement).value;\n this.dsChange.emit(this.value);\n };\n\n private handleFocus = () => {\n this.focused = true;\n };\n\n private handleBlur = () => {\n this.focused = false;\n this.touched = true;\n };\n\n render() {\n const inputId = this.inputId ?? this.generatedId;\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const filled = this.value.length > 0;\n const dirty = this.value !== this.initialValue;\n const message =\n this.error && this.errorMessage ? this.errorMessage : this.visibleConstraintMessage;\n const invalid = this.error || Boolean(this.visibleConstraintMessage);\n const showError = Boolean(message) && !this.managedByField;\n const showCounter = this.hasCounter && !this.managedByField;\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const rows = Number.isFinite(this.rows) ? Math.max(1, Math.floor(this.rows)) : 4;\n const describedBy =\n [\n this.ariaDescribedby,\n showError ? this.errorId : undefined,\n showCounter ? `${this.generatedId}-count` : undefined,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <Host\n class={{\n 'textarea-host': true,\n 'ds-field-stack': true,\n 'ds-field-stack--supporting-inset': !this.hasBorder,\n 'ds-control-inactive': inactive,\n [`ds-control--${this.size}`]: true,\n ...controlWidthClass(this.width),\n }}\n data-disabled={inactive ? '' : undefined}\n data-readonly={this.readOnly ? '' : undefined}\n data-required={this.required ? '' : undefined}\n data-invalid={invalid ? '' : undefined}\n data-constraint-message={this.visibleConstraintMessage || undefined}\n data-character-count={this.hasCounter ? String(this.value.length) : undefined}\n data-character-limit={this.hasCounter ? String(lengthLimit(this.maxLength)) : undefined}\n onInvalid={() => {\n this.submitted = true;\n }}\n data-filled={filled ? '' : undefined}\n data-focused={this.focused ? '' : undefined}\n data-dirty={dirty ? '' : undefined}\n data-touched={this.touched ? '' : undefined}\n >\n <div\n class={{\n 'textarea-control': true,\n 'textarea-control--resizable': this.resize === 'vertical',\n 'textarea-control--bordered': this.hasBorder,\n 'textarea-control--error': this.hasBorder && invalid,\n 'ds-interaction-fill': this.hasInteractionFill,\n [`ds-control--${this.size}`]: true,\n }}\n >\n <textarea\n ref={element => {\n this.textareaEl = element;\n }}\n id={inputId}\n value={this.value}\n placeholder={this.placeholder}\n rows={rows}\n disabled={inactive}\n readOnly={this.readOnly}\n required={this.required}\n minLength={lengthLimit(this.minLength)}\n maxLength={this.lengthBehavior === 'restrict' ? lengthLimit(this.maxLength) : undefined}\n autoFocus={this.autoFocus}\n autoComplete={this.autoComplete}\n inputMode={this.inputMode || undefined}\n enterKeyHint={this.enterKeyHint || undefined}\n spellcheck={this.spellCheck}\n class={`native-textarea native-textarea--resize-${this.resize} ds-text--${textVariant.replace('text-', '')} ds-text--regular ds-interaction-fill__content`}\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledby}\n aria-describedby={describedBy}\n aria-invalid={invalid ? 'true' : undefined}\n onInput={this.handleInput}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n </div>\n {(showError || showCounter) && (\n <div class=\"text-field-support\">\n {showError && (\n <ds-text\n class=\"error-text\"\n as=\"div\"\n variant=\"text-body-small\"\n color=\"negative\"\n textId={this.errorId}\n role=\"alert\"\n >\n {message}\n </ds-text>\n )}\n {showCounter && (\n <ds-text\n as=\"span\"\n class=\"text-field-count\"\n variant=\"text-body-small\"\n color={invalid ? 'negative' : 'secondary'}\n textId={`${this.generatedId}-count`}\n >\n {this.value.length}/{lengthLimit(this.maxLength)}\n </ds-text>\n )}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["textareaCss","idCounter","Textarea","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","generatedId","errorId","value","disabled","readOnly","required","requiredMessage","DEFAULT_REQUIRED_MESSAGE","lengthBehavior","showCharacterCount","rows","resize","inputMode","enterKeyHint","spellCheck","size","width","hasBorder","hasInteractionFill","isInactive","autoFocus","error","ariaLabel","constraintMessage","submitted","initialValue","formDisabled","focused","touched","handleInput","event","target","dsChange","emit","handleFocus","handleBlur","managedByField","Boolean","el","closest","visibleConstraintMessage","maxLength","undefined","length","hasCounter","lengthLimit","componentWillLoad","syncFormValue","inactive","setFormControlValue","internals","validity","flags","message","textConstraintValidity","setValidity","formDisabledCallback","formResetCallback","formStateRestoreCallback","state","restoreStringFormState","setFocus","textareaEl","focus","render","inputId","filled","dirty","errorMessage","invalid","showError","showCounter","textVariant","CONTROL_TEXT_VARIANT","Number","isFinite","Math","max","floor","describedBy","ariaDescribedby","filter","join","h","Host","key","class","controlWidthClass","String","onInvalid","ref","element","id","placeholder","minLength","autoComplete","spellcheck","replace","ariaLabelledby","onInput","onFocus","onBlur","as","variant","color","textId","role"],"sources":["src/wc/components/Textarea/Textarea.css?tag=ds-textarea&encapsulation=scoped","src/wc/components/Textarea/Textarea.tsx"],"sourcesContent":["@import '../../utils/text-field-support.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/control-inactive.css';\n@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/control-width.css';\n@import '../../utils/field-stack.css';\n@import '../../utils/typography.css';\n@import '../../utils/forced-colors.css';\n\n:host(.textarea-host) {\n display: inline-flex;\n --ds-textarea-fg: var(--color-foreground-primary);\n --ds-textarea-placeholder: var(--color-foreground-secondary);\n --ds-textarea-placeholder-active: var(--color-foreground-quaternary);\n --ds-textarea-border: var(--color-border-secondary);\n}\n\n:host(.ds-control-width--fill),\n:host(.ds-control-width--fill) .textarea-control {\n width: 100%;\n}\n\n.textarea-control {\n display: flex;\n box-sizing: border-box;\n min-width: 0;\n overflow: hidden;\n background: transparent;\n border: none;\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n color: var(--ds-textarea-fg);\n}\n\n.textarea-control--resizable {\n padding-block-end: var(--dimension-space-025);\n padding-inline-end: var(--dimension-space-025);\n}\n\n.textarea-control--bordered {\n --ds-interaction-border-width: var(--dimension-stroke-width-012);\n --ds-interaction-border-color: var(--ds-textarea-border);\n}\n\n.textarea-control--error {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-negative);\n}\n\n.textarea-control--bordered:focus-within:not(.textarea-control--error) {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-brand);\n}\n\n:host(.ds-control-inactive) .textarea-control::after {\n background: transparent;\n}\n\n.native-textarea {\n position: relative;\n z-index: 2;\n box-sizing: border-box;\n min-width: 0;\n width: 100%;\n padding-block: var(--ds-control-padding-inline, var(--dimension-space-075));\n padding-inline: calc(\n var(--ds-control-padding-inline, var(--dimension-space-075)) +\n var(--ds-control-label-inset, var(--dimension-space-025))\n );\n background: transparent;\n border: none;\n border-radius: inherit;\n outline: none;\n color: var(--ds-textarea-fg);\n font-family: inherit;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.native-textarea--resize-vertical {\n resize: vertical;\n}\n\n.native-textarea--resize-none {\n resize: none;\n}\n\n.native-textarea:disabled {\n cursor: not-allowed;\n}\n\n.native-textarea:read-only:not(:disabled) {\n cursor: default;\n}\n\n.native-textarea::placeholder {\n color: var(--ds-textarea-placeholder);\n}\n\n.native-textarea:focus::placeholder {\n color: var(--ds-textarea-placeholder-active);\n}\n\n.error-text {\n width: 100%;\n}\n\n@media (forced-colors: active) {\n .textarea-control--bordered:focus-within:not(.textarea-control--error)::after {\n outline-color: var(--ds-forced-color-selected);\n }\n\n .textarea-control--error::after {\n outline-style: dashed;\n }\n}\n","import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport {\n controlWidthClass,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n restoreStringFormState,\n setFormControlValue,\n type ControlWidth,\n} from '../../utils';\n\nimport { lengthLimit, textConstraintValidity } from '../../utils/text-constraints';\n\nexport type TextareaSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type TextareaWidth = ControlWidth;\nexport type TextareaResize = 'vertical' | 'none';\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-textarea',\n styleUrl: 'Textarea.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Textarea {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private generatedId = `ds-textarea-${++idCounter}`;\n private errorId = `${this.generatedId}-error`;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop({ reflect: true }) name: string | undefined;\n @Prop({ reflect: true }) form: string | undefined;\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Keeps the value focusable and submittable while preventing edits. */\n @Prop({ reflect: true }) readOnly: boolean = false;\n @Prop({ reflect: true }) required: boolean = false;\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n /** Minimum non-empty text length, in native UTF-16 code units. */\n @Prop() minLength: number | undefined;\n /** Maximum text length. A visible counter accompanies this constraint by default. */\n @Prop() maxLength: number | undefined;\n /** Error preserves extra text; restrict uses the browser's hard input limit. */\n @Prop() lengthBehavior: 'error' | 'restrict' = 'error';\n @Prop() showCharacterCount: boolean = true;\n @Prop() placeholder: string | undefined;\n /** Visible text rows before the field scrolls. */\n @Prop() rows: number = 4;\n /** Whether the user can resize the field vertically. */\n @Prop() resize: TextareaResize = 'vertical';\n /** Native browser autofill hint. */\n @Prop({ attribute: 'autocomplete' }) autoComplete: string | undefined;\n /** Preferred virtual keyboard without changing the value semantics. */\n @Prop({ attribute: 'inputmode' }) inputMode: string = '';\n /** Preferred virtual-keyboard action label. */\n @Prop({ attribute: 'enterkeyhint' }) enterKeyHint: string = '';\n /** Whether the browser should check spelling and grammar. */\n @Prop({ attribute: 'spellcheck' }) spellCheck: boolean = true;\n /** Control density for typography and inset spacing. */\n @Prop() size: TextareaSize = 'md';\n /** Width fit — fill the parent (default) or hug the available content. */\n @Prop() width: TextareaWidth = 'fill';\n /** Show the standard inset border, including focused and invalid strokes. */\n @Prop() hasBorder: boolean = true;\n /** Show the standard hover and pressed fill when the field is not embedded in interactive chrome. */\n @Prop() hasInteractionFill: boolean = true;\n @Prop() isInactive: boolean = false;\n @Prop() autoFocus: boolean = false;\n @Prop() error: boolean = false;\n @Prop() errorMessage: string | undefined;\n /** Associates the internal textarea with an external <label>. */\n @Prop() inputId: string | undefined;\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n @Prop({ attribute: 'aria-describedby' }) ariaDescribedby: string | undefined;\n\n @Event() dsChange!: EventEmitter<string>;\n\n @State() private constraintMessage = '';\n @State() private submitted = false;\n private get managedByField(): boolean {\n return Boolean(this.el.closest('ds-field'));\n }\n private get visibleConstraintMessage(): string {\n return this.touched ||\n this.submitted ||\n (this.maxLength !== undefined && this.value.length > this.maxLength)\n ? this.constraintMessage\n : '';\n }\n private get hasCounter(): boolean {\n return this.showCharacterCount && lengthLimit(this.maxLength) !== undefined;\n }\n\n private initialValue = '';\n private textareaEl?: HTMLTextAreaElement;\n @State() private formDisabled = false;\n @State() private focused = false;\n @State() private touched = false;\n\n componentWillLoad() {\n this.initialValue = this.value;\n this.syncFormValue();\n }\n\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n @Watch('readOnly')\n @Watch('minLength')\n @Watch('maxLength')\n @Watch('requiredMessage')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n setFormControlValue(this.internals, this.value, { inactive });\n const validity =\n inactive || this.readOnly ? { flags: {}, message: '' } : textConstraintValidity(this);\n this.constraintMessage = validity.message;\n this.internals.setValidity(validity.flags, validity.message);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.initialValue;\n this.touched = false;\n this.submitted = false;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this.value = restoreStringFormState(state);\n }\n\n @Method()\n async setFocus() {\n this.textareaEl?.focus();\n }\n\n private handleInput = (event: Event) => {\n this.value = (event.target as HTMLTextAreaElement).value;\n this.dsChange.emit(this.value);\n };\n\n private handleFocus = () => {\n this.focused = true;\n };\n\n private handleBlur = () => {\n this.focused = false;\n this.touched = true;\n };\n\n render() {\n const inputId = this.inputId ?? this.generatedId;\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const filled = this.value.length > 0;\n const dirty = this.value !== this.initialValue;\n const message =\n this.error && this.errorMessage ? this.errorMessage : this.visibleConstraintMessage;\n const invalid = this.error || Boolean(this.visibleConstraintMessage);\n const showError = Boolean(message) && !this.managedByField;\n const showCounter = this.hasCounter && !this.managedByField;\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const rows = Number.isFinite(this.rows) ? Math.max(1, Math.floor(this.rows)) : 4;\n const describedBy =\n [\n this.ariaDescribedby,\n showError ? this.errorId : undefined,\n showCounter ? `${this.generatedId}-count` : undefined,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <Host\n class={{\n 'textarea-host': true,\n 'ds-field-stack': true,\n 'ds-field-stack--supporting-inset': !this.hasBorder,\n 'ds-control-inactive': inactive,\n [`ds-control--${this.size}`]: true,\n ...controlWidthClass(this.width),\n }}\n data-disabled={inactive ? '' : undefined}\n data-readonly={this.readOnly ? '' : undefined}\n data-required={this.required ? '' : undefined}\n data-invalid={invalid ? '' : undefined}\n data-constraint-message={this.visibleConstraintMessage || undefined}\n data-character-count={this.hasCounter ? String(this.value.length) : undefined}\n data-character-limit={this.hasCounter ? String(lengthLimit(this.maxLength)) : undefined}\n onInvalid={() => {\n this.submitted = true;\n }}\n data-filled={filled ? '' : undefined}\n data-focused={this.focused ? '' : undefined}\n data-dirty={dirty ? '' : undefined}\n data-touched={this.touched ? '' : undefined}\n >\n <div\n class={{\n 'textarea-control': true,\n 'textarea-control--resizable': this.resize === 'vertical',\n 'textarea-control--bordered': this.hasBorder,\n 'textarea-control--error': this.hasBorder && invalid,\n 'ds-interaction-fill': this.hasInteractionFill,\n [`ds-control--${this.size}`]: true,\n }}\n >\n <textarea\n ref={element => {\n this.textareaEl = element;\n }}\n id={inputId}\n value={this.value}\n placeholder={this.placeholder}\n rows={rows}\n disabled={inactive}\n readOnly={this.readOnly}\n required={this.required}\n minLength={lengthLimit(this.minLength)}\n maxLength={this.lengthBehavior === 'restrict' ? lengthLimit(this.maxLength) : undefined}\n autoFocus={this.autoFocus}\n autoComplete={this.autoComplete}\n inputMode={this.inputMode || undefined}\n enterKeyHint={this.enterKeyHint || undefined}\n spellcheck={this.spellCheck}\n class={`native-textarea native-textarea--resize-${this.resize} ds-text--${textVariant.replace('text-', '')} ds-text--regular ds-interaction-fill__content`}\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledby}\n aria-describedby={describedBy}\n aria-invalid={invalid ? 'true' : undefined}\n onInput={this.handleInput}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n </div>\n {(showError || showCounter) && (\n <div class=\"text-field-support\">\n {showError && (\n <ds-text\n class=\"error-text\"\n as=\"div\"\n variant=\"text-body-small\"\n color=\"negative\"\n textId={this.errorId}\n role=\"alert\"\n >\n {message}\n </ds-text>\n )}\n {showCounter && (\n <ds-text\n as=\"span\"\n class=\"text-field-count\"\n variant=\"text-body-small\"\n color={invalid ? 'negative' : 'secondary'}\n textId={`${this.generatedId}-count`}\n >\n {this.value.length}/{lengthLimit(this.maxLength)}\n </ds-text>\n )}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"mSAAA,MAAMA,EAAc,IAAM,oktBC4B1B,IAAIC,EAAY,E,MAQHC,EAAQC,EAAA,MAAAD,UAAAE,EANrB,WAAAC,CAAAC,G,qHAUUC,KAAAC,YAAc,iBAAiBP,IAC/BM,KAAAE,QAAU,GAAGF,KAAKC,oBAEDD,KAAAG,MAAgB,GAGhBH,KAAAI,SAAoB,MAEpBJ,KAAAK,SAAoB,MACpBL,KAAAM,SAAoB,MACrCN,KAAAO,gBAA0BC,EAM1BR,KAAAS,eAAuC,QACvCT,KAAAU,mBAA8B,KAG9BV,KAAAW,KAAe,EAEfX,KAAAY,OAAyB,WAICZ,KAAAa,UAAoB,GAEjBb,KAAAc,aAAuB,GAEzBd,KAAAe,WAAsB,KAEjDf,KAAAgB,KAAqB,KAErBhB,KAAAiB,MAAuB,OAEvBjB,KAAAkB,UAAqB,KAErBlB,KAAAmB,mBAA8B,KAC9BnB,KAAAoB,WAAsB,MACtBpB,KAAAqB,UAAqB,MACrBrB,KAAAsB,MAAiB,MAIUtB,KAAAuB,UAA2B,KAM7CvB,KAAAwB,kBAAoB,GACpBxB,KAAAyB,UAAY,MAerBzB,KAAA0B,aAAe,GAEN1B,KAAA2B,aAAe,MACf3B,KAAA4B,QAAU,MACV5B,KAAA6B,QAAU,MA4CnB7B,KAAA8B,YAAeC,IACrB/B,KAAKG,MAAS4B,EAAMC,OAA+B7B,MACnDH,KAAKiC,SAASC,KAAKlC,KAAKG,MAAM,EAGxBH,KAAAmC,YAAc,KACpBnC,KAAK4B,QAAU,IAAI,EAGb5B,KAAAoC,WAAa,KACnBpC,KAAK4B,QAAU,MACf5B,KAAK6B,QAAU,IAAI,CAqHtB,CA9LC,kBAAYQ,GACV,OAAOC,QAAQtC,KAAKuC,GAAGC,QAAQ,Y,CAEjC,4BAAYC,GACV,OAAOzC,KAAK6B,SACV7B,KAAKyB,WACJzB,KAAK0C,YAAcC,WAAa3C,KAAKG,MAAMyC,OAAS5C,KAAK0C,UACxD1C,KAAKwB,kBACL,E,CAEN,cAAYqB,GACV,OAAO7C,KAAKU,oBAAsBoC,EAAY9C,KAAK0C,aAAeC,S,CASpE,iBAAAI,GACE/C,KAAK0B,aAAe1B,KAAKG,MACzBH,KAAKgD,e,CAWP,aAAAA,GACE,MAAMC,EAAWjD,KAAKoB,YAAcpB,KAAKI,UAAYJ,KAAK2B,aAC1DuB,EAAoBlD,KAAKmD,UAAWnD,KAAKG,MAAO,CAAE8C,aAClD,MAAMG,EACJH,GAAYjD,KAAKK,SAAW,CAAEgD,MAAO,GAAIC,QAAS,IAAOC,EAAuBvD,MAClFA,KAAKwB,kBAAoB4B,EAASE,QAClCtD,KAAKmD,UAAUK,YAAYJ,EAASC,MAAOD,EAASE,Q,CAGtD,oBAAAG,CAAqBrD,GACnBJ,KAAK2B,aAAevB,EACpBJ,KAAKgD,e,CAGP,iBAAAU,GACE1D,KAAKG,MAAQH,KAAK0B,aAClB1B,KAAK6B,QAAU,MACf7B,KAAKyB,UAAY,K,CAGnB,wBAAAkC,CAAyBC,GACvB5D,KAAKG,MAAQ0D,EAAuBD,E,CAItC,cAAME,GACJ9D,KAAK+D,YAAYC,O,CAiBnB,MAAAC,GACE,MAAMC,EAAUlE,KAAKkE,SAAWlE,KAAKC,YACrC,MAAMgD,EAAWjD,KAAKoB,YAAcpB,KAAKI,UAAYJ,KAAK2B,aAC1D,MAAMwC,EAASnE,KAAKG,MAAMyC,OAAS,EACnC,MAAMwB,EAAQpE,KAAKG,QAAUH,KAAK0B,aAClC,MAAM4B,EACJtD,KAAKsB,OAAStB,KAAKqE,aAAerE,KAAKqE,aAAerE,KAAKyC,yBAC7D,MAAM6B,EAAUtE,KAAKsB,OAASgB,QAAQtC,KAAKyC,0BAC3C,MAAM8B,EAAYjC,QAAQgB,KAAatD,KAAKqC,eAC5C,MAAMmC,EAAcxE,KAAK6C,aAAe7C,KAAKqC,eAC7C,MAAMoC,EAAcC,EAAqB1E,KAAKgB,MAC9C,MAAML,EAAOgE,OAAOC,SAAS5E,KAAKW,MAAQkE,KAAKC,IAAI,EAAGD,KAAKE,MAAM/E,KAAKW,OAAS,EAC/E,MAAMqE,EACJ,CACEhF,KAAKiF,gBACLV,EAAYvE,KAAKE,QAAUyC,UAC3B6B,EAAc,GAAGxE,KAAKC,oBAAsB0C,WAE3CuC,OAAO5C,SACP6C,KAAK,MAAQxC,UAElB,OACEyC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,gBAAiB,KACjB,iBAAkB,KAClB,oCAAqCvF,KAAKkB,UAC1C,sBAAuB+B,EACvB,CAAC,eAAejD,KAAKgB,QAAS,QAC3BwE,EAAkBxF,KAAKiB,QAC3B,gBACcgC,EAAW,GAAKN,UAAS,gBACzB3C,KAAKK,SAAW,GAAKsC,UAAS,gBAC9B3C,KAAKM,SAAW,GAAKqC,UAAS,eAC/B2B,EAAU,GAAK3B,UAAS,0BACb3C,KAAKyC,0BAA4BE,UAAS,uBAC7C3C,KAAK6C,WAAa4C,OAAOzF,KAAKG,MAAMyC,QAAUD,UAAS,uBACvD3C,KAAK6C,WAAa4C,OAAO3C,EAAY9C,KAAK0C,YAAcC,UAC9E+C,UAAW,KACT1F,KAAKyB,UAAY,IAAI,EACtB,cACY0C,EAAS,GAAKxB,UAAS,eACtB3C,KAAK4B,QAAU,GAAKe,UAAS,aAC/ByB,EAAQ,GAAKzB,UAAS,eACpB3C,KAAK6B,QAAU,GAAKc,WAElCyC,EAAA,OAAAE,IAAA,2CACEC,MAAO,CACL,mBAAoB,KACpB,8BAA+BvF,KAAKY,SAAW,WAC/C,6BAA8BZ,KAAKkB,UACnC,0BAA2BlB,KAAKkB,WAAaoD,EAC7C,sBAAuBtE,KAAKmB,mBAC5B,CAAC,eAAenB,KAAKgB,QAAS,OAGhCoE,EAAA,YAAAE,IAAA,2CACEK,IAAKC,IACH5F,KAAK+D,WAAa6B,CAAO,EAE3BC,GAAI3B,EACJ/D,MAAOH,KAAKG,MACZ2F,YAAa9F,KAAK8F,YAClBnF,KAAMA,EACNP,SAAU6C,EACV5C,SAAUL,KAAKK,SACfC,SAAUN,KAAKM,SACfyF,UAAWjD,EAAY9C,KAAK+F,WAC5BrD,UAAW1C,KAAKS,iBAAmB,WAAaqC,EAAY9C,KAAK0C,WAAaC,UAC9EtB,UAAWrB,KAAKqB,UAChB2E,aAAchG,KAAKgG,aACnBnF,UAAWb,KAAKa,WAAa8B,UAC7B7B,aAAcd,KAAKc,cAAgB6B,UACnCsD,WAAYjG,KAAKe,WACjBwE,MAAO,2CAA2CvF,KAAKY,mBAAmB6D,EAAYyB,QAAQ,QAAS,oDAAmD,aAC9IlG,KAAKuB,UAAS,kBACTvB,KAAKmG,eAAc,mBAClBnB,EAAW,eACfV,EAAU,OAAS3B,UACjCyD,QAASpG,KAAK8B,YACduE,QAASrG,KAAKmC,YACdmE,OAAQtG,KAAKoC,eAGfmC,GAAaC,IACbY,EAAA,OAAAE,IAAA,2CAAKC,MAAM,sBACRhB,GACCa,EAAA,WAAAE,IAAA,2CACEC,MAAM,aACNgB,GAAG,MACHC,QAAQ,kBACRC,MAAM,WACNC,OAAQ1G,KAAKE,QACbyG,KAAK,SAEJrD,GAGJkB,GACCY,EAAA,WAAAE,IAAA,2CACEiB,GAAG,OACHhB,MAAM,mBACNiB,QAAQ,kBACRC,MAAOnC,EAAU,WAAa,YAC9BoC,OAAQ,GAAG1G,KAAKC,qBAEfD,KAAKG,MAAMyC,OAAM,IAAGE,EAAY9C,KAAK0C,a","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{p as e,H as o,h as s,a as t,t as a}from"./index.js";import{C as d}from"./p-BnhGV__o.js";import{d as i}from"./p-CzTJAO2J.js";import{d as n}from"./p-BrB05_X8.js";import{d as c}from"./p-BVsVUnAw.js";import{d as r}from"./p-0XTyQNRG.js";import{d as l}from"./p-CTAF7SkL.js";import{d as b}from"./p-PNY7auMh.js";const f=()=>`.sc-ds-code-block-h{display:block;width:100%;min-width:0;box-sizing:border-box;-webkit-user-select:none;user-select:none}.code-block.sc-ds-code-block{width:100%;min-width:0;margin:0;overflow:hidden;border-radius:var(--dimension-radius-050);background:var(--color-background-strong-neutral);color:var(--color-foreground-faint-neutral);box-sizing:border-box}.code-block__header.sc-ds-code-block{display:flex;align-items:center;justify-content:space-between;gap:var(--dimension-space-100);min-height:var(--dimension-size-400);padding:var(--dimension-space-050) var(--dimension-space-100);background:var(--color-background-strong-neutral);box-sizing:border-box}pre.sc-ds-code-block{margin:0;padding:var(--dimension-space-150);overflow:auto;font-family:var( --typography-font-family-code, 'Fira Code', ui-monospace, 'SFMono-Regular', 'Cascadia Code', 'Roboto Mono', Menlo, Monaco, Consolas, 'Liberation Mono', monospace );font-size:var(--typography-fontsize-sm);font-variant-ligatures:var(--ds-code-font-variant-ligatures, normal);font-weight:var(--typography-weight-regular);line-height:var(--typography-lineheight-sm);letter-spacing:var(--typography-letterspacing-none);tab-size:2;-webkit-user-select:text;user-select:text}code.sc-ds-code-block{font:inherit;white-space:pre}`;const p=e(class e extends o{constructor(e){super();if(e!==false){this.__registerHost()}this.code="";this.language="";this.filename="";this.copied=false;this.copyFeedback=new d((e=>{this.copied=e}));this.copy=async()=>{await this.copyFeedback.copy(this.code)}}connectedCallback(){this.copyFeedback.connect()}handleCodeChange(){this.copyFeedback.reset()}disconnectedCallback(){this.copyFeedback.disconnect()}render(){const e=this.filename||this.language||"Code";return s(t,{key:"bf59b12fad24ccce0f645f96d7e3d165faa7a99e"},s("figure",{key:"a570ec37303143c6141a4d582f5e3d97d57d61b7",class:"code-block"},s("figcaption",{key:"53563363469413b4b8d6a203893b30902041653e",class:"code-block__header"},s("ds-text",{key:"e3e08fad862786ac543f206701693765e9d1402f",as:"span",variant:"text-caption",emphasis:true,color:"on-strong"},e),s("ds-tooltip",{key:"fd6d1a26fb85a706bcb0902dbe60923ad6c4265a",label:this.copied?"Copied":"Copy code",side:"bottom",size:"sm"},s("ds-button-unfilled",{key:"d878626be70801df24eb67899c38fdf52626124c",variant:"icon",icon:this.copied?"Check":"Copy",size:"xs","aria-label":this.copied?"Copied":"Copy code",hasBorder:false,onDsClick:this.copy}))),s("pre",{key:"46dac40da59cbb9650f1f7e8995d59a2f31c78e2"},s("code",{key:"2429b29d700529adc19cd6332f3de79741784442"},this.code))))}static get watchers(){return{code:[{handleCodeChange:0}]}}static get style(){return f()}},[2,"ds-code-block",{code:[1],language:[1],filename:[1],copied:[32]},undefined,{code:[{handleCodeChange:0}]}]);function m(){if(typeof customElements==="undefined"){return}const e=["ds-code-block","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-text","ds-tooltip"];e.forEach((e=>{switch(e){case"ds-code-block":if(!customElements.get(a(e))){customElements.define(a(e),p)}break;case"ds-badge":if(!customElements.get(a(e))){i()}break;case"ds-button-unfilled":if(!customElements.get(a(e))){n()}break;case"ds-icon":if(!customElements.get(a(e))){c()}break;case"ds-loader":if(!customElements.get(a(e))){r()}break;case"ds-text":if(!customElements.get(a(e))){l()}break;case"ds-tooltip":if(!customElements.get(a(e))){b()}break}}))}m();export{p as C,m as d};
|
|
2
|
+
//# sourceMappingURL=p-BE9ladwu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["codeBlockCss","CodeBlock","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","code","language","filename","copied","copyFeedback","ClipboardFeedbackController","copy","async","connectedCallback","connect","handleCodeChange","reset","disconnectedCallback","disconnect","render","label","h","Host","key","class","as","variant","emphasis","color","side","size","icon","hasBorder","onDsClick"],"sources":["src/wc/components/CodeBlock/CodeBlock.css?tag=ds-code-block&encapsulation=scoped","src/wc/components/CodeBlock/CodeBlock.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.code-block {\n width: 100%;\n min-width: 0;\n margin: 0;\n overflow: hidden;\n border-radius: var(--dimension-radius-050);\n background: var(--color-background-strong-neutral);\n color: var(--color-foreground-faint-neutral);\n box-sizing: border-box;\n}\n\n.code-block__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--dimension-space-100);\n min-height: var(--dimension-size-400);\n padding: var(--dimension-space-050) var(--dimension-space-100);\n background: var(--color-background-strong-neutral);\n box-sizing: border-box;\n}\n\npre {\n margin: 0;\n padding: var(--dimension-space-150);\n overflow: auto;\n font-family: var(\n --typography-font-family-code,\n 'Fira Code',\n ui-monospace,\n 'SFMono-Regular',\n 'Cascadia Code',\n 'Roboto Mono',\n Menlo,\n Monaco,\n Consolas,\n 'Liberation Mono',\n monospace\n );\n font-size: var(--typography-fontsize-sm);\n font-variant-ligatures: var(--ds-code-font-variant-ligatures, normal);\n font-weight: var(--typography-weight-regular);\n line-height: var(--typography-lineheight-sm);\n letter-spacing: var(--typography-letterspacing-none);\n tab-size: 2;\n -webkit-user-select: text;\n user-select: text;\n}\n\ncode {\n font: inherit;\n white-space: pre;\n}\n","import { Component, h, Host, Prop, State, Watch } from '@stencil/core';\nimport { ClipboardFeedbackController } from '../../utils/clipboard';\n\n@Component({\n tag: 'ds-code-block',\n styleUrl: 'CodeBlock.css',\n scoped: true,\n})\nexport class CodeBlock {\n @Prop() code: string = '';\n @Prop() language: string = '';\n @Prop() filename: string = '';\n\n @State() private copied: boolean = false;\n private readonly copyFeedback = new ClipboardFeedbackController(copied => {\n this.copied = copied;\n });\n\n connectedCallback() {\n this.copyFeedback.connect();\n }\n\n @Watch('code')\n handleCodeChange() {\n this.copyFeedback.reset();\n }\n\n disconnectedCallback() {\n this.copyFeedback.disconnect();\n }\n\n private copy = async () => {\n await this.copyFeedback.copy(this.code);\n };\n\n render() {\n const label = this.filename || this.language || 'Code';\n return (\n <Host>\n <figure class=\"code-block\">\n <figcaption class=\"code-block__header\">\n <ds-text as=\"span\" variant=\"text-caption\" emphasis color=\"on-strong\">\n {label}\n </ds-text>\n <ds-tooltip label={this.copied ? 'Copied' : 'Copy code'} side=\"bottom\" size=\"sm\">\n <ds-button-unfilled\n variant=\"icon\"\n icon={this.copied ? 'Check' : 'Copy'}\n size=\"xs\"\n aria-label={this.copied ? 'Copied' : 'Copy code'}\n hasBorder={false}\n onDsClick={this.copy}\n />\n </ds-tooltip>\n </figcaption>\n <pre>\n <code>{this.code}</code>\n </pre>\n </figure>\n </Host>\n );\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["codeBlockCss","CodeBlock","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","code","language","filename","copied","copyFeedback","ClipboardFeedbackController","copy","async","connectedCallback","connect","handleCodeChange","reset","disconnectedCallback","disconnect","render","label","h","Host","key","class","as","variant","emphasis","color","side","size","icon","hasBorder","onDsClick"],"sources":["src/wc/components/CodeBlock/CodeBlock.css?tag=ds-code-block&encapsulation=scoped","src/wc/components/CodeBlock/CodeBlock.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.code-block {\n width: 100%;\n min-width: 0;\n margin: 0;\n overflow: hidden;\n border-radius: var(--dimension-radius-050);\n background: var(--color-background-strong-neutral);\n color: var(--color-foreground-faint-neutral);\n box-sizing: border-box;\n}\n\n.code-block__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--dimension-space-100);\n min-height: var(--dimension-size-400);\n padding: var(--dimension-space-050) var(--dimension-space-100);\n background: var(--color-background-strong-neutral);\n box-sizing: border-box;\n}\n\npre {\n margin: 0;\n padding: var(--dimension-space-150);\n overflow: auto;\n font-family: var(\n --typography-font-family-code,\n 'Fira Code',\n ui-monospace,\n 'SFMono-Regular',\n 'Cascadia Code',\n 'Roboto Mono',\n Menlo,\n Monaco,\n Consolas,\n 'Liberation Mono',\n monospace\n );\n font-size: var(--typography-fontsize-sm);\n font-variant-ligatures: var(--ds-code-font-variant-ligatures, normal);\n font-weight: var(--typography-weight-regular);\n line-height: var(--typography-lineheight-sm);\n letter-spacing: var(--typography-letterspacing-none);\n tab-size: 2;\n -webkit-user-select: text;\n user-select: text;\n}\n\ncode {\n font: inherit;\n white-space: pre;\n}\n","import { Component, h, Host, Prop, State, Watch } from '@stencil/core';\nimport { ClipboardFeedbackController } from '../../utils/clipboard';\n\n@Component({\n tag: 'ds-code-block',\n styleUrl: 'CodeBlock.css',\n scoped: true,\n})\nexport class CodeBlock {\n @Prop() code: string = '';\n @Prop() language: string = '';\n @Prop() filename: string = '';\n\n @State() private copied: boolean = false;\n private readonly copyFeedback = new ClipboardFeedbackController(copied => {\n this.copied = copied;\n });\n\n connectedCallback() {\n this.copyFeedback.connect();\n }\n\n @Watch('code')\n handleCodeChange() {\n this.copyFeedback.reset();\n }\n\n disconnectedCallback() {\n this.copyFeedback.disconnect();\n }\n\n private copy = async () => {\n await this.copyFeedback.copy(this.code);\n };\n\n render() {\n const label = this.filename || this.language || 'Code';\n return (\n <Host>\n <figure class=\"code-block\">\n <figcaption class=\"code-block__header\">\n <ds-text as=\"span\" variant=\"text-caption\" emphasis color=\"on-strong\">\n {label}\n </ds-text>\n <ds-tooltip label={this.copied ? 'Copied' : 'Copy code'} side=\"bottom\" size=\"sm\">\n <ds-button-unfilled\n variant=\"icon\"\n icon={this.copied ? 'Check' : 'Copy'}\n size=\"xs\"\n aria-label={this.copied ? 'Copied' : 'Copy code'}\n hasBorder={false}\n onDsClick={this.copy}\n />\n </ds-tooltip>\n </figcaption>\n <pre>\n <code>{this.code}</code>\n </pre>\n </figure>\n </Host>\n );\n }\n}\n"],"mappings":"uTAAA,MAAMA,EAAe,IAAM,wyC,MCQdC,EAASC,EAAA,MAAAD,UAAAE,EALtB,WAAAC,CAAAC,G,4CAMUC,KAAAC,KAAe,GACfD,KAAAE,SAAmB,GACnBF,KAAAG,SAAmB,GAEVH,KAAAI,OAAkB,MAClBJ,KAAAK,aAAe,IAAIC,GAA4BF,IAC9DJ,KAAKI,OAASA,CAAM,IAgBdJ,KAAAO,KAAOC,gBACPR,KAAKK,aAAaE,KAAKP,KAAKC,KAAK,CA8B1C,CA5CC,iBAAAQ,GACET,KAAKK,aAAaK,S,CAIpB,gBAAAC,GACEX,KAAKK,aAAaO,O,CAGpB,oBAAAC,GACEb,KAAKK,aAAaS,Y,CAOpB,MAAAC,GACE,MAAMC,EAAQhB,KAAKG,UAAYH,KAAKE,UAAY,OAChD,OACEe,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,UAAAE,IAAA,2CAAQC,MAAM,cACZH,EAAA,cAAAE,IAAA,2CAAYC,MAAM,sBAChBH,EAAA,WAAAE,IAAA,2CAASE,GAAG,OAAOC,QAAQ,eAAeC,SAAQ,KAACC,MAAM,aACtDR,GAEHC,EAAA,cAAAE,IAAA,2CAAYH,MAAOhB,KAAKI,OAAS,SAAW,YAAaqB,KAAK,SAASC,KAAK,MAC1ET,EAAA,sBAAAE,IAAA,2CACEG,QAAQ,OACRK,KAAM3B,KAAKI,OAAS,QAAU,OAC9BsB,KAAK,KAAI,aACG1B,KAAKI,OAAS,SAAW,YACrCwB,UAAW,MACXC,UAAW7B,KAAKO,SAItBU,EAAA,OAAAE,IAAA,4CACEF,EAAA,QAAAE,IAAA,4CAAOnB,KAAKC,Q","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{p as e,H as r,c as s,h as t,a as i,t as o}from"./index.js";import{C as n}from"./p-DlsjHRU3.js";import{d}from"./p-BbvAWFJA.js";import{r as c}from"./p-CbrDF2gA.js";const a=()=>`@media (forced-colors: active){.sc-ds-breadcrumb:root,.sc-ds-breadcrumb-h,.ds-forced-colors-scope.sc-ds-breadcrumb{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-breadcrumb-h{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}.ds-focus-ring.sc-ds-breadcrumb-h,.ds-focus-ring.sc-ds-breadcrumb,.ds-focus-ring-inset.sc-ds-breadcrumb-h,.ds-focus-ring-inset.sc-ds-breadcrumb{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-breadcrumb-h:focus-visible,.ds-focus-ring.sc-ds-breadcrumb:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring.ds-focus-ring--visible.sc-ds-breadcrumb-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-breadcrumb{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring-inset.sc-ds-breadcrumb-h:focus-visible,.ds-focus-ring-inset.sc-ds-breadcrumb:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-breadcrumb-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-breadcrumb:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-breadcrumb-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-breadcrumb{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-breadcrumb-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-breadcrumb::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}@media (forced-colors: active){.sc-ds-breadcrumb-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}.ds-visually-hidden.sc-ds-breadcrumb-h,.ds-visually-hidden.sc-ds-breadcrumb{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sc-ds-breadcrumb:where(.ds-text-decoration,.ds-text-action).sc-ds-breadcrumb{text-decoration-color:var(--ds-text-decoration-color, var(--color-foreground-tertiary));text-decoration-thickness:var(--ds-text-decoration-thickness, var(--dimension-stroke-width-012));text-underline-offset:var(--ds-text-decoration-offset, var(--dimension-space-025))}.ds-text-action.sc-ds-breadcrumb{--ds-text-action-foreground:var(--color-foreground-bold-brand);--ds-text-decoration-color:var(--ds-text-action-foreground);color:var(--ds-text-action-foreground);text-decoration-line:none}.ds-text-action--on-medium.sc-ds-breadcrumb{--ds-text-action-foreground:var(--color-foreground-on-medium-background-primary);--ds-text-decoration-color:var(--color-foreground-on-medium-background-secondary);text-decoration-line:underline}.ds-text-action--on-strong.sc-ds-breadcrumb{--ds-text-action-foreground:var(--color-foreground-on-strong-background-primary);--ds-text-decoration-color:var(--color-foreground-on-strong-background-secondary);text-decoration-line:underline}.ds-text-action--on-bold.sc-ds-breadcrumb{--ds-text-action-foreground:var(--color-foreground-on-bold-background-primary);--ds-text-decoration-color:var(--color-foreground-on-bold-background-secondary);text-decoration-line:underline}@media (hover: hover) and (pointer: fine){.ds-text-action.sc-ds-breadcrumb:hover{text-decoration-line:underline}}@media (forced-colors: active){.ds-text-action.sc-ds-breadcrumb{text-decoration-line:underline;text-decoration-color:currentcolor}}.sc-ds-breadcrumb-h{position:relative;display:block;min-width:0;box-sizing:border-box}.breadcrumb.sc-ds-breadcrumb{inline-size:100%;min-width:0}.breadcrumb__list.sc-ds-breadcrumb{display:flex;align-items:center;box-sizing:border-box;inline-size:100%;min-width:0;margin:0;padding:0;overflow:hidden;list-style:none}.breadcrumb__item.sc-ds-breadcrumb{display:flex;flex:0 0 auto;align-items:center;min-width:0}.breadcrumb__separator.sc-ds-breadcrumb{flex:0 0 auto;margin-inline:var(--dimension-space-050);user-select:none}.breadcrumb__link.sc-ds-breadcrumb,.breadcrumb__current.sc-ds-breadcrumb{display:inline-flex;flex:0 0 auto;min-width:0;overflow:hidden;padding:0;border:0;border-radius:var(--dimension-radius-025);background:transparent;color:var(--color-foreground-secondary);font:inherit;text-decoration:none}.breadcrumb__link.sc-ds-breadcrumb{cursor:default}a.breadcrumb__link.sc-ds-breadcrumb{cursor:pointer}@media (hover: hover) and (pointer: fine){.breadcrumb__link.sc-ds-breadcrumb:hover .breadcrumb__label.sc-ds-breadcrumb{text-decoration-line:underline}}.breadcrumb__label.sc-ds-breadcrumb{--ds-text-decoration-color:var(--color-foreground-quaternary);display:inline-block;inline-size:var(--breadcrumb-label-width, auto);min-width:0}.breadcrumb__measurements.sc-ds-breadcrumb{position:absolute;inset:0 auto auto 0;visibility:hidden;pointer-events:none;white-space:nowrap}.breadcrumb__measurement.sc-ds-breadcrumb{display:inline-block;inline-size:max-content;max-inline-size:none}`;const u=e(class e extends r{constructor(e){super();if(e!==false){this.__registerHost()}this.dsSelect=s(this,"dsSelect",7);this.items=[];this.ariaLabel="Breadcrumb";this.labelWidths=[];this.collapsedLabels=[];this.measurementElements=[];this.separatorElements=[];this.hasLoaded=false;this.connectionTasks=new n((()=>this.el.isConnected))}connectedCallback(){if(this.hasLoaded)this.connectResources()}componentDidLoad(){this.hasLoaded=true;this.connectResources()}connectResources(){if(!this.el.isConnected)return;this.observeContainer();this.scheduleMeasurement();void document.fonts?.ready.then(this.connectionTasks.guard((()=>this.scheduleMeasurement())))}componentDidRender(){this.observeContainer();this.scheduleMeasurement()}disconnectedCallback(){this.connectionTasks.cancel();this.resizeObserver?.disconnect();this.resizeObserver=undefined;this.observedElement=undefined;this.measurementFrame=undefined}handleItemsChange(){this.labelWidths=[];this.collapsedLabels=[];this.scheduleMeasurement()}observeContainer(){if(!this.el.isConnected||!this.navElement||this.observedElement===this.navElement)return;this.resizeObserver??(this.resizeObserver=new ResizeObserver((()=>this.scheduleMeasurement())));this.resizeObserver.disconnect();this.resizeObserver.observe(this.navElement);this.observedElement=this.navElement}scheduleMeasurement(){if(!this.el.isConnected||this.measurementFrame!==undefined)return;this.measurementFrame=this.connectionTasks.frame((()=>{this.measurementFrame=undefined;this.measureLabels()}))}measureLabels(){if(!this.navElement||!this.listElement||!this.ellipsisMeasurement||this.items.length===0)return;const e=this.items.map(((e,r)=>this.measurementElements[r]?.getBoundingClientRect().width??0));const r=this.ellipsisMeasurement.getBoundingClientRect().width;if(e.some((e=>e===0))||r===0)return;const s=this.separatorElements.reduce(((e,r)=>{const s=getComputedStyle(r);return e+r.getBoundingClientRect().width+Number.parseFloat(s.marginInlineStart)+Number.parseFloat(s.marginInlineEnd)}),0);const t=Math.max(0,this.navElement.clientWidth-s);const i=e.map((e=>Math.min(e,r)));const o=[...i];let n=Math.max(0,t-i.reduce(((e,r)=>e+r),0));for(let r=e.length-1;r>=0&&n>0;r-=1){const s=Math.min(n,e[r]-i[r]);o[r]+=s;n-=s}const d=o.length!==this.labelWidths.length||o.some(((e,r)=>Math.abs(e-(this.labelWidths[r]??0))>.25));const c=o.map(((r,s)=>e[s]>i[s]&&Math.abs(r-i[s])<=.25));const a=c.length!==this.collapsedLabels.length||c.some(((e,r)=>e!==this.collapsedLabels[r]));if(d)this.labelWidths=o;if(a)this.collapsedLabels=c}handleSelect(e,r){const s=this.dsSelect.emit({item:e,originalEvent:r});if(s.defaultPrevented)r.preventDefault()}renderItem(e,r){const s=this.labelWidths[r];const i=this.collapsedLabels[r]??false;const o=[t("ds-text",{class:"breadcrumb__label ds-text-decoration",as:"span",variant:"text-caption",color:"inherit",lineTruncation:i?"none":1,"aria-hidden":i?"true":undefined,style:s===undefined?undefined:{"--breadcrumb-label-width":`${s}px`}},i?"…":e.label),i?t("span",{class:"breadcrumb__accessible-label ds-visually-hidden"},e.label):null];if(e.isCurrent){return t("span",{class:"breadcrumb__current","aria-current":"page","aria-label":e.ariaLabel},o)}const n=c(e.href);if(n){return t("a",{class:"breadcrumb__link ds-focus-ring",href:n,"aria-label":e.ariaLabel,onClick:r=>this.handleSelect(e,r)},o)}return t("button",{class:"breadcrumb__link ds-focus-ring",type:"button","aria-label":e.ariaLabel,onClick:r=>this.handleSelect(e,r)},o)}render(){if(this.items.length===0)return null;this.measurementElements=[];this.separatorElements=[];return t(i,null,t("nav",{class:"breadcrumb","aria-label":this.ariaLabel,ref:e=>{this.navElement=e}},t("div",{class:"breadcrumb__measurements","aria-hidden":"true"},this.items.map(((e,r)=>t("ds-text",{class:"breadcrumb__measurement",as:"span",variant:"text-caption",color:"inherit",ref:e=>{if(e)this.measurementElements[r]=e}},e.label))),t("ds-text",{class:"breadcrumb__measurement",as:"span",variant:"text-caption",color:"inherit",ref:e=>{this.ellipsisMeasurement=e}},"…")),t("ol",{class:"breadcrumb__list",ref:e=>{this.listElement=e}},this.items.map(((e,r)=>t("li",{class:"breadcrumb__item",key:e.id},r>0?t("ds-text",{class:"breadcrumb__separator",as:"span",variant:"text-caption",color:"tertiary","aria-hidden":"true",ref:e=>{if(e)this.separatorElements[r-1]=e}},"/"):null,this.renderItem(e,r)))))))}get el(){return this}static get watchers(){return{items:[{handleItemsChange:0}]}}static get style(){return a()}},[2,"ds-breadcrumb",{items:[16],ariaLabel:[1,"aria-label"],labelWidths:[32],collapsedLabels:[32]},undefined,{items:[{handleItemsChange:0}]}]);function l(){if(typeof customElements==="undefined"){return}const e=["ds-breadcrumb","ds-text"];e.forEach((e=>{switch(e){case"ds-breadcrumb":if(!customElements.get(o(e))){customElements.define(o(e),u)}break;case"ds-text":if(!customElements.get(o(e))){d()}break}}))}l();export{u as B,l as d};
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{p as e,H as r,c as s,h as t,a as i,t as o}from"./index.js";import{C as n}from"./p-DlsjHRU3.js";import{d}from"./p-CTAF7SkL.js";import{r as c}from"./p-CbrDF2gA.js";const a=()=>`@media (forced-colors: active){.sc-ds-breadcrumb:root,.sc-ds-breadcrumb-h,.ds-forced-colors-scope.sc-ds-breadcrumb{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-breadcrumb-h{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}.ds-focus-ring.sc-ds-breadcrumb-h,.ds-focus-ring.sc-ds-breadcrumb,.ds-focus-ring-inset.sc-ds-breadcrumb-h,.ds-focus-ring-inset.sc-ds-breadcrumb{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-breadcrumb-h:focus-visible,.ds-focus-ring.sc-ds-breadcrumb:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring.ds-focus-ring--visible.sc-ds-breadcrumb-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-breadcrumb{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring-inset.sc-ds-breadcrumb-h:focus-visible,.ds-focus-ring-inset.sc-ds-breadcrumb:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-breadcrumb-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-breadcrumb:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-breadcrumb-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-breadcrumb{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-breadcrumb-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-breadcrumb::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}@media (forced-colors: active){.sc-ds-breadcrumb-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}.ds-visually-hidden.sc-ds-breadcrumb-h,.ds-visually-hidden.sc-ds-breadcrumb{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sc-ds-breadcrumb:where(.ds-text-decoration,.ds-text-action).sc-ds-breadcrumb{text-decoration-color:var(--ds-text-decoration-color, var(--color-foreground-tertiary));text-decoration-thickness:var(--ds-text-decoration-thickness, var(--dimension-stroke-width-012));text-underline-offset:var(--ds-text-decoration-offset, var(--dimension-space-025))}.ds-text-action.sc-ds-breadcrumb{--ds-text-action-foreground:var(--color-foreground-bold-brand);--ds-text-decoration-color:var(--ds-text-action-foreground);color:var(--ds-text-action-foreground);text-decoration-line:none}.ds-text-action--on-medium.sc-ds-breadcrumb{--ds-text-action-foreground:var(--color-foreground-on-medium-background-primary);--ds-text-decoration-color:var(--color-foreground-on-medium-background-secondary);text-decoration-line:underline}.ds-text-action--on-strong.sc-ds-breadcrumb{--ds-text-action-foreground:var(--color-foreground-on-strong-background-primary);--ds-text-decoration-color:var(--color-foreground-on-strong-background-secondary);text-decoration-line:underline}.ds-text-action--on-bold.sc-ds-breadcrumb{--ds-text-action-foreground:var(--color-foreground-on-bold-background-primary);--ds-text-decoration-color:var(--color-foreground-on-bold-background-secondary);text-decoration-line:underline}@media (hover: hover) and (pointer: fine){.ds-text-action.sc-ds-breadcrumb:hover{text-decoration-line:underline}}@media (forced-colors: active){.ds-text-action.sc-ds-breadcrumb{text-decoration-line:underline;text-decoration-color:currentcolor}}.sc-ds-breadcrumb-h{position:relative;display:block;min-width:0;box-sizing:border-box}.breadcrumb.sc-ds-breadcrumb{inline-size:100%;min-width:0}.breadcrumb__list.sc-ds-breadcrumb{display:flex;align-items:center;box-sizing:border-box;inline-size:100%;min-width:0;margin:0;padding:0;overflow:hidden;list-style:none}.breadcrumb__item.sc-ds-breadcrumb{display:flex;flex:0 0 auto;align-items:center;min-width:0}.breadcrumb__separator.sc-ds-breadcrumb{flex:0 0 auto;margin-inline:var(--dimension-space-050);user-select:none}.breadcrumb__link.sc-ds-breadcrumb,.breadcrumb__current.sc-ds-breadcrumb{display:inline-flex;flex:0 0 auto;min-width:0;overflow:hidden;padding:0;border:0;border-radius:var(--dimension-radius-025);background:transparent;color:var(--color-foreground-secondary);font:inherit;text-decoration:none}.breadcrumb__link.sc-ds-breadcrumb{cursor:default}a.breadcrumb__link.sc-ds-breadcrumb{cursor:pointer}@media (hover: hover) and (pointer: fine){.breadcrumb__link.sc-ds-breadcrumb:hover .breadcrumb__label.sc-ds-breadcrumb{text-decoration-line:underline}}.breadcrumb__label.sc-ds-breadcrumb{--ds-text-decoration-color:var(--color-foreground-quaternary);display:inline-block;inline-size:var(--breadcrumb-label-width, auto);min-width:0}.breadcrumb__measurements.sc-ds-breadcrumb{position:absolute;inset:0 auto auto 0;visibility:hidden;pointer-events:none;white-space:nowrap}.breadcrumb__measurement.sc-ds-breadcrumb{display:inline-block;inline-size:max-content;max-inline-size:none}`;const u=e(class e extends r{constructor(e){super();if(e!==false){this.__registerHost()}this.dsSelect=s(this,"dsSelect",7);this.items=[];this.ariaLabel="Breadcrumb";this.labelWidths=[];this.collapsedLabels=[];this.measurementElements=[];this.separatorElements=[];this.hasLoaded=false;this.connectionTasks=new n((()=>this.el.isConnected))}connectedCallback(){if(this.hasLoaded)this.connectResources()}componentDidLoad(){this.hasLoaded=true;this.connectResources()}connectResources(){if(!this.el.isConnected)return;this.observeContainer();this.scheduleMeasurement();void document.fonts?.ready.then(this.connectionTasks.guard((()=>this.scheduleMeasurement())))}componentDidRender(){this.observeContainer();this.scheduleMeasurement()}disconnectedCallback(){this.connectionTasks.cancel();this.resizeObserver?.disconnect();this.resizeObserver=undefined;this.observedElement=undefined;this.measurementFrame=undefined}handleItemsChange(){this.labelWidths=[];this.collapsedLabels=[];this.scheduleMeasurement()}observeContainer(){if(!this.el.isConnected||!this.navElement||this.observedElement===this.navElement)return;this.resizeObserver??(this.resizeObserver=new ResizeObserver((()=>this.scheduleMeasurement())));this.resizeObserver.disconnect();this.resizeObserver.observe(this.navElement);this.observedElement=this.navElement}scheduleMeasurement(){if(!this.el.isConnected||this.measurementFrame!==undefined)return;this.measurementFrame=this.connectionTasks.frame((()=>{this.measurementFrame=undefined;this.measureLabels()}))}measureLabels(){if(!this.navElement||!this.listElement||!this.ellipsisMeasurement||this.items.length===0)return;const e=this.items.map(((e,r)=>this.measurementElements[r]?.getBoundingClientRect().width??0));const r=this.ellipsisMeasurement.getBoundingClientRect().width;if(e.some((e=>e===0))||r===0)return;const s=this.separatorElements.reduce(((e,r)=>{const s=getComputedStyle(r);return e+r.getBoundingClientRect().width+Number.parseFloat(s.marginInlineStart)+Number.parseFloat(s.marginInlineEnd)}),0);const t=Math.max(0,this.navElement.clientWidth-s);const i=e.map((e=>Math.min(e,r)));const o=[...i];let n=Math.max(0,t-i.reduce(((e,r)=>e+r),0));for(let r=e.length-1;r>=0&&n>0;r-=1){const s=Math.min(n,e[r]-i[r]);o[r]+=s;n-=s}const d=o.length!==this.labelWidths.length||o.some(((e,r)=>Math.abs(e-(this.labelWidths[r]??0))>.25));const c=o.map(((r,s)=>e[s]>i[s]&&Math.abs(r-i[s])<=.25));const a=c.length!==this.collapsedLabels.length||c.some(((e,r)=>e!==this.collapsedLabels[r]));if(d)this.labelWidths=o;if(a)this.collapsedLabels=c}handleSelect(e,r){const s=this.dsSelect.emit({item:e,originalEvent:r});if(s.defaultPrevented)r.preventDefault()}renderItem(e,r){const s=this.labelWidths[r];const i=this.collapsedLabels[r]??false;const o=[t("ds-text",{class:"breadcrumb__label ds-text-decoration",as:"span",variant:"text-caption",color:"inherit",lineTruncation:i?"none":1,"aria-hidden":i?"true":undefined,style:s===undefined?undefined:{"--breadcrumb-label-width":`${s}px`}},i?"…":e.label),i?t("span",{class:"breadcrumb__accessible-label ds-visually-hidden"},e.label):null];if(e.isCurrent){return t("span",{class:"breadcrumb__current","aria-current":"page","aria-label":e.ariaLabel},o)}const n=c(e.href);if(n){return t("a",{class:"breadcrumb__link ds-focus-ring",href:n,"aria-label":e.ariaLabel,onClick:r=>this.handleSelect(e,r)},o)}return t("button",{class:"breadcrumb__link ds-focus-ring",type:"button","aria-label":e.ariaLabel,onClick:r=>this.handleSelect(e,r)},o)}render(){if(this.items.length===0)return null;this.measurementElements=[];this.separatorElements=[];return t(i,null,t("nav",{class:"breadcrumb","aria-label":this.ariaLabel,ref:e=>{this.navElement=e}},t("div",{class:"breadcrumb__measurements","aria-hidden":"true"},this.items.map(((e,r)=>t("ds-text",{class:"breadcrumb__measurement",as:"span",variant:"text-caption",color:"inherit",ref:e=>{if(e)this.measurementElements[r]=e}},e.label))),t("ds-text",{class:"breadcrumb__measurement",as:"span",variant:"text-caption",color:"inherit",ref:e=>{this.ellipsisMeasurement=e}},"…")),t("ol",{class:"breadcrumb__list",ref:e=>{this.listElement=e}},this.items.map(((e,r)=>t("li",{class:"breadcrumb__item",key:e.id},r>0?t("ds-text",{class:"breadcrumb__separator",as:"span",variant:"text-caption",color:"tertiary","aria-hidden":"true",ref:e=>{if(e)this.separatorElements[r-1]=e}},"/"):null,this.renderItem(e,r)))))))}get el(){return this}static get watchers(){return{items:[{handleItemsChange:0}]}}static get style(){return a()}},[2,"ds-breadcrumb",{items:[16],ariaLabel:[1,"aria-label"],labelWidths:[32],collapsedLabels:[32]},undefined,{items:[{handleItemsChange:0}]}]);function l(){if(typeof customElements==="undefined"){return}const e=["ds-breadcrumb","ds-text"];e.forEach((e=>{switch(e){case"ds-breadcrumb":if(!customElements.get(o(e))){customElements.define(o(e),u)}break;case"ds-text":if(!customElements.get(o(e))){d()}break}}))}l();export{u as B,l as d};
|
|
2
|
+
//# sourceMappingURL=p-BM-UYlIS.js.map
|