@pine-ds/core 3.28.0 → 3.30.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/components/form.js +1 -1
- package/components/pds-avatar.js +1 -1
- package/components/pds-checkbox2.js +1 -1
- package/components/pds-combobox.js +2 -2
- package/components/pds-input.js +1 -1
- package/components/pds-link2.js +1 -1
- package/components/pds-modal.js +1 -1
- package/components/pds-multiselect.js +1 -1
- package/components/pds-radio.js +1 -1
- package/components/pds-select.js +1 -1
- package/components/pds-switch.js +1 -1
- package/components/pds-tab.js +1 -1
- package/components/pds-tabpanel.js +1 -1
- package/components/pds-tabs.js +1 -1
- package/components/pds-text2.js +1 -1
- package/components/pds-textarea.js +1 -1
- package/components/pds-toast.js +1 -1
- package/components/pds-tooltip.js +1 -1
- package/dist/cjs/{form-CpM5Z8q7.js → form-MhwfKTuo.js} +11 -7
- package/dist/cjs/{index-DBhfI2Jq.js → index-BdFrBXCD.js} +5 -1
- package/dist/cjs/{index-DGBoDsAL.js → index-CKNNY-lQ.js} +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/mock-pds-modal.cjs.entry.js +1 -1
- package/dist/cjs/pds-accordion.cjs.entry.js +2 -2
- package/dist/cjs/pds-alert.cjs.entry.js +1 -1
- package/dist/cjs/pds-avatar.cjs.entry.js +39 -8
- package/dist/cjs/pds-box.cjs.entry.js +1 -1
- package/dist/cjs/pds-button.cjs.entry.js +2 -2
- package/dist/cjs/pds-checkbox.cjs.entry.js +6 -6
- package/dist/cjs/pds-chip.cjs.entry.js +2 -2
- package/dist/cjs/pds-combobox.cjs.entry.js +21 -5
- package/dist/cjs/pds-container.cjs.entry.js +1 -1
- package/dist/cjs/pds-copytext.cjs.entry.js +2 -2
- package/dist/cjs/pds-divider.cjs.entry.js +1 -1
- package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +1 -1
- package/dist/cjs/pds-dropdown-menu-separator.cjs.entry.js +1 -1
- package/dist/cjs/pds-dropdown-menu.cjs.entry.js +1 -1
- package/dist/cjs/pds-filter.cjs.entry.js +2 -2
- package/dist/cjs/pds-filters.cjs.entry.js +1 -1
- package/dist/cjs/pds-icon.cjs.entry.js +1 -1
- package/dist/cjs/pds-image.cjs.entry.js +1 -1
- package/dist/cjs/pds-input.cjs.entry.js +4 -4
- package/dist/cjs/pds-link.cjs.entry.js +12 -5
- package/dist/cjs/pds-loader.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal-content.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal-footer.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal-header.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal.cjs.entry.js +36 -6
- package/dist/cjs/pds-multiselect.cjs.entry.js +7 -7
- package/dist/cjs/pds-popover.cjs.entry.js +1 -1
- package/dist/cjs/pds-progress.cjs.entry.js +1 -1
- package/dist/cjs/pds-property.cjs.entry.js +1 -1
- package/dist/cjs/pds-radio-group.cjs.entry.js +3 -3
- package/dist/cjs/pds-radio.cjs.entry.js +7 -7
- package/dist/cjs/pds-row.cjs.entry.js +1 -1
- package/dist/cjs/pds-select.cjs.entry.js +9 -4
- package/dist/cjs/pds-sortable-item.cjs.entry.js +2 -2
- package/dist/cjs/pds-sortable.cjs.entry.js +1 -1
- package/dist/cjs/pds-switch.cjs.entry.js +6 -6
- package/dist/cjs/pds-tab.cjs.entry.js +41 -6
- package/dist/cjs/pds-table-body.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-cell.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-head-cell.cjs.entry.js +2 -2
- package/dist/cjs/pds-table-head.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-row.cjs.entry.js +1 -1
- package/dist/cjs/pds-table.cjs.entry.js +1 -1
- package/dist/cjs/pds-tabpanel.cjs.entry.js +8 -3
- package/dist/cjs/pds-tabs.cjs.entry.js +74 -3
- package/dist/cjs/pds-text.cjs.entry.js +2 -2
- package/dist/cjs/pds-textarea.cjs.entry.js +7 -7
- package/dist/cjs/pds-toast.cjs.entry.js +4 -4
- package/dist/cjs/pds-tooltip.cjs.entry.js +3 -3
- package/dist/cjs/pine-core.cjs.js +2 -2
- package/dist/collection/components/pds-avatar/pds-avatar.css +29 -0
- package/dist/collection/components/pds-avatar/pds-avatar.js +105 -5
- package/dist/collection/components/pds-avatar/stories/pds-avatar.stories.js +23 -0
- package/dist/collection/components/pds-button/pds-button.js +1 -1
- package/dist/collection/components/pds-button/stories/pds-button.stories.js +25 -0
- package/dist/collection/components/pds-checkbox/pds-checkbox.js +3 -3
- package/dist/collection/components/pds-combobox/pds-combobox.css +32 -0
- package/dist/collection/components/pds-combobox/pds-combobox.js +76 -3
- package/dist/collection/components/pds-combobox/stories/pds-combobox.stories.js +25 -0
- package/dist/collection/components/pds-input/pds-input.js +1 -1
- package/dist/collection/components/pds-link/pds-link.css +10 -0
- package/dist/collection/components/pds-link/pds-link.js +32 -2
- package/dist/collection/components/pds-link/stories/pds-link.stories.js +14 -0
- package/dist/collection/components/pds-modal/pds-modal.js +58 -5
- package/dist/collection/components/pds-modal/stories/pds-modal.stories.js +77 -0
- package/dist/collection/components/pds-multiselect/pds-multiselect.css +2 -2
- package/dist/collection/components/pds-multiselect/pds-multiselect.js +3 -3
- package/dist/collection/components/pds-radio/pds-radio.css +6 -0
- package/dist/collection/components/pds-radio/pds-radio.js +3 -3
- package/dist/collection/components/pds-select/pds-select.js +7 -2
- package/dist/collection/components/pds-switch/pds-switch.js +3 -3
- package/dist/collection/components/pds-tabs/pds-tab/pds-tab.css +4 -4
- package/dist/collection/components/pds-tabs/pds-tab/pds-tab.js +161 -5
- package/dist/collection/components/pds-tabs/pds-tabpanel/pds-tabpanel.css +9 -0
- package/dist/collection/components/pds-tabs/pds-tabpanel/pds-tabpanel.js +29 -1
- package/dist/collection/components/pds-tabs/pds-tabs.css +14 -0
- package/dist/collection/components/pds-tabs/pds-tabs.js +146 -4
- package/dist/collection/components/pds-tabs/stories/pds-tabs.stories.js +43 -0
- package/dist/collection/components/pds-text/pds-text.js +1 -1
- package/dist/collection/components/pds-textarea/pds-textarea.js +4 -4
- package/dist/collection/components/pds-toast/pds-toast.js +3 -3
- package/dist/collection/components/pds-tooltip/pds-tooltip.js +2 -2
- package/dist/collection/utils/form.js +11 -7
- package/dist/docs.json +466 -6
- package/dist/esm/{form-C3xDZBme.js → form-BuRbS7Hp.js} +11 -7
- package/dist/esm/{index-D4ys0pep.js → index-BjlFq0VD.js} +1 -1
- package/dist/esm/{index-CaRgVPt7.js → index-NNDTPCWx.js} +5 -2
- package/dist/esm/loader.js +3 -3
- package/dist/esm/mock-pds-modal.entry.js +1 -1
- package/dist/esm/pds-accordion.entry.js +2 -2
- package/dist/esm/pds-alert.entry.js +1 -1
- package/dist/esm/pds-avatar.entry.js +39 -8
- package/dist/esm/pds-box.entry.js +1 -1
- package/dist/esm/pds-button.entry.js +2 -2
- package/dist/esm/pds-checkbox.entry.js +6 -6
- package/dist/esm/pds-chip.entry.js +2 -2
- package/dist/esm/pds-combobox.entry.js +21 -5
- package/dist/esm/pds-container.entry.js +1 -1
- package/dist/esm/pds-copytext.entry.js +2 -2
- package/dist/esm/pds-divider.entry.js +1 -1
- package/dist/esm/pds-dropdown-menu-item.entry.js +1 -1
- package/dist/esm/pds-dropdown-menu-separator.entry.js +1 -1
- package/dist/esm/pds-dropdown-menu.entry.js +1 -1
- package/dist/esm/pds-filter.entry.js +2 -2
- package/dist/esm/pds-filters.entry.js +1 -1
- package/dist/esm/pds-icon.entry.js +1 -1
- package/dist/esm/pds-image.entry.js +1 -1
- package/dist/esm/pds-input.entry.js +4 -4
- package/dist/esm/pds-link.entry.js +12 -5
- package/dist/esm/pds-loader.entry.js +1 -1
- package/dist/esm/pds-modal-content.entry.js +1 -1
- package/dist/esm/pds-modal-footer.entry.js +1 -1
- package/dist/esm/pds-modal-header.entry.js +1 -1
- package/dist/esm/pds-modal.entry.js +36 -6
- package/dist/esm/pds-multiselect.entry.js +7 -7
- package/dist/esm/pds-popover.entry.js +1 -1
- package/dist/esm/pds-progress.entry.js +1 -1
- package/dist/esm/pds-property.entry.js +1 -1
- package/dist/esm/pds-radio-group.entry.js +3 -3
- package/dist/esm/pds-radio.entry.js +7 -7
- package/dist/esm/pds-row.entry.js +1 -1
- package/dist/esm/pds-select.entry.js +9 -4
- package/dist/esm/pds-sortable-item.entry.js +2 -2
- package/dist/esm/pds-sortable.entry.js +1 -1
- package/dist/esm/pds-switch.entry.js +6 -6
- package/dist/esm/pds-tab.entry.js +41 -6
- package/dist/esm/pds-table-body.entry.js +1 -1
- package/dist/esm/pds-table-cell.entry.js +1 -1
- package/dist/esm/pds-table-head-cell.entry.js +2 -2
- package/dist/esm/pds-table-head.entry.js +1 -1
- package/dist/esm/pds-table-row.entry.js +1 -1
- package/dist/esm/pds-table.entry.js +1 -1
- package/dist/esm/pds-tabpanel.entry.js +8 -3
- package/dist/esm/pds-tabs.entry.js +74 -3
- package/dist/esm/pds-text.entry.js +2 -2
- package/dist/esm/pds-textarea.entry.js +7 -7
- package/dist/esm/pds-toast.entry.js +4 -4
- package/dist/esm/pds-tooltip.entry.js +3 -3
- package/dist/esm/pine-core.js +3 -3
- package/dist/esm-es5/form-BuRbS7Hp.js +1 -0
- package/dist/esm-es5/{index-CaRgVPt7.js → index-NNDTPCWx.js} +2 -2
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/mock-pds-modal.entry.js +1 -1
- package/dist/esm-es5/pds-accordion.entry.js +1 -1
- package/dist/esm-es5/pds-alert.entry.js +1 -1
- package/dist/esm-es5/pds-avatar.entry.js +1 -1
- package/dist/esm-es5/pds-box.entry.js +1 -1
- package/dist/esm-es5/pds-button.entry.js +1 -1
- package/dist/esm-es5/pds-checkbox.entry.js +1 -1
- package/dist/esm-es5/pds-chip.entry.js +1 -1
- package/dist/esm-es5/pds-combobox.entry.js +2 -2
- package/dist/esm-es5/pds-container.entry.js +1 -1
- package/dist/esm-es5/pds-copytext.entry.js +1 -1
- package/dist/esm-es5/pds-divider.entry.js +1 -1
- package/dist/esm-es5/pds-dropdown-menu-item.entry.js +1 -1
- package/dist/esm-es5/pds-dropdown-menu-separator.entry.js +1 -1
- package/dist/esm-es5/pds-dropdown-menu.entry.js +1 -1
- package/dist/esm-es5/pds-filter.entry.js +1 -1
- package/dist/esm-es5/pds-filters.entry.js +1 -1
- package/dist/esm-es5/pds-icon.entry.js +1 -1
- package/dist/esm-es5/pds-image.entry.js +1 -1
- package/dist/esm-es5/pds-input.entry.js +1 -1
- package/dist/esm-es5/pds-link.entry.js +1 -1
- package/dist/esm-es5/pds-loader.entry.js +1 -1
- package/dist/esm-es5/pds-modal-content.entry.js +1 -1
- package/dist/esm-es5/pds-modal-footer.entry.js +1 -1
- package/dist/esm-es5/pds-modal-header.entry.js +1 -1
- package/dist/esm-es5/pds-modal.entry.js +1 -1
- package/dist/esm-es5/pds-multiselect.entry.js +1 -1
- package/dist/esm-es5/pds-popover.entry.js +1 -1
- package/dist/esm-es5/pds-progress.entry.js +1 -1
- package/dist/esm-es5/pds-property.entry.js +1 -1
- package/dist/esm-es5/pds-radio-group.entry.js +1 -1
- package/dist/esm-es5/pds-radio.entry.js +1 -1
- package/dist/esm-es5/pds-row.entry.js +1 -1
- package/dist/esm-es5/pds-select.entry.js +1 -1
- package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
- package/dist/esm-es5/pds-sortable.entry.js +1 -1
- package/dist/esm-es5/pds-switch.entry.js +1 -1
- package/dist/esm-es5/pds-tab.entry.js +1 -1
- package/dist/esm-es5/pds-table-body.entry.js +1 -1
- package/dist/esm-es5/pds-table-cell.entry.js +1 -1
- package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
- package/dist/esm-es5/pds-table-head.entry.js +1 -1
- package/dist/esm-es5/pds-table-row.entry.js +1 -1
- package/dist/esm-es5/pds-table.entry.js +1 -1
- package/dist/esm-es5/pds-tabpanel.entry.js +1 -1
- package/dist/esm-es5/pds-tabs.entry.js +1 -1
- package/dist/esm-es5/pds-text.entry.js +1 -1
- package/dist/esm-es5/pds-textarea.entry.js +1 -1
- package/dist/esm-es5/pds-toast.entry.js +1 -1
- package/dist/esm-es5/pds-tooltip.entry.js +1 -1
- package/dist/esm-es5/pine-core.js +1 -1
- package/dist/pine-core/p-02805a93.system.entry.js +1 -0
- package/dist/pine-core/{p-571d6bef.system.entry.js → p-076aaa00.system.entry.js} +1 -1
- package/dist/pine-core/p-0a09ccbe.entry.js +1 -0
- package/dist/pine-core/p-0a4f2d5f.system.entry.js +1 -0
- package/dist/pine-core/p-12154189.system.entry.js +1 -0
- package/dist/pine-core/p-1482053d.entry.js +1 -0
- package/dist/pine-core/{p-44f58d33.system.entry.js → p-1deded6e.system.entry.js} +1 -1
- package/dist/pine-core/p-1e87e72a.entry.js +1 -0
- package/dist/pine-core/{p-fa81009f.system.entry.js → p-1f20608e.system.entry.js} +1 -1
- package/dist/pine-core/{p-27ac77c3.entry.js → p-1fb985bb.entry.js} +1 -1
- package/dist/pine-core/{p-855dfc31.system.entry.js → p-20e0d06c.system.entry.js} +1 -1
- package/dist/pine-core/p-24fcf841.system.entry.js +1 -0
- package/dist/pine-core/{p-c273210a.entry.js → p-292cf8f9.entry.js} +1 -1
- package/dist/pine-core/p-2d1cc047.entry.js +1 -0
- package/dist/pine-core/{p-002c420f.system.entry.js → p-2ec460e1.system.entry.js} +1 -1
- package/dist/pine-core/{p-e0cfb931.system.entry.js → p-2fc127b4.system.entry.js} +1 -1
- package/dist/pine-core/p-31679dbc.system.entry.js +1 -0
- package/dist/pine-core/{p-d09ae46d.system.entry.js → p-3170d53b.system.entry.js} +1 -1
- package/dist/pine-core/{p-0451fdf7.entry.js → p-39ad92fc.entry.js} +1 -1
- package/dist/pine-core/{p-974bf0c5.entry.js → p-39c6e6c9.entry.js} +1 -1
- package/dist/pine-core/p-3c09f2d4.system.entry.js +1 -0
- package/dist/pine-core/{p-d5c1f85e.system.entry.js → p-3c6300a8.system.entry.js} +1 -1
- package/dist/pine-core/{p-3ad9bcef.system.entry.js → p-3cece186.system.entry.js} +1 -1
- package/dist/pine-core/{p-8a00e32b.system.entry.js → p-3e3b3bf6.system.entry.js} +1 -1
- package/dist/pine-core/p-43268325.system.entry.js +1 -0
- package/dist/pine-core/{p-52f7115b.entry.js → p-43a1d9d7.entry.js} +1 -1
- package/dist/pine-core/{p-13ec2343.entry.js → p-43ef94bc.entry.js} +1 -1
- package/dist/pine-core/{p-618ba6d5.system.entry.js → p-464ec4eb.system.entry.js} +1 -1
- package/dist/pine-core/{p-ee6f914c.entry.js → p-47708864.entry.js} +1 -1
- package/dist/pine-core/{p-ccb889d8.system.entry.js → p-507e831f.system.entry.js} +1 -1
- package/dist/pine-core/{p-3fa80c5a.system.entry.js → p-559042b7.system.entry.js} +1 -1
- package/dist/pine-core/p-5aa59b20.entry.js +2 -0
- package/dist/pine-core/p-5c229a7f.entry.js +1 -0
- package/dist/pine-core/{p-5c6c2f79.system.entry.js → p-5c7a72aa.system.entry.js} +1 -1
- package/dist/pine-core/{p-71ca8845.system.entry.js → p-5e6e8d4e.system.entry.js} +1 -1
- package/dist/pine-core/{p-6a2373d0.system.entry.js → p-606418b7.system.entry.js} +1 -1
- package/dist/pine-core/{p-22bfa998.entry.js → p-6254d112.entry.js} +1 -1
- package/dist/pine-core/{p-5a2df1e2.entry.js → p-62f75f84.entry.js} +1 -1
- package/dist/pine-core/{p-041243ee.system.entry.js → p-69372e72.system.entry.js} +1 -1
- package/dist/pine-core/p-69e1a82b.system.entry.js +3 -0
- package/dist/pine-core/p-6f82e8dc.system.entry.js +1 -0
- package/dist/pine-core/{p-1e3beca4.system.entry.js → p-7153efaf.system.entry.js} +1 -1
- package/dist/pine-core/{p-7aca41d9.system.entry.js → p-7803c5b6.system.entry.js} +1 -1
- package/dist/pine-core/{p-74e06c8d.system.entry.js → p-78cd9f97.system.entry.js} +1 -1
- package/dist/pine-core/{p-edf4e4eb.system.entry.js → p-79598750.system.entry.js} +1 -1
- package/dist/pine-core/p-7a7954b2.system.entry.js +1 -0
- package/dist/pine-core/{p-3ba36512.system.entry.js → p-7b85115b.system.entry.js} +1 -1
- package/dist/pine-core/{p-83eb33d4.entry.js → p-7bac161d.entry.js} +1 -1
- package/dist/pine-core/{p-e70c9002.entry.js → p-7d15be6a.entry.js} +1 -1
- package/dist/pine-core/{p-621fdce1.entry.js → p-7e065b59.entry.js} +1 -1
- package/dist/pine-core/p-809e0506.entry.js +1 -0
- package/dist/pine-core/{p-73b81009.entry.js → p-83e8f145.entry.js} +1 -1
- package/dist/pine-core/{p-c7c17fe3.system.entry.js → p-85f7428b.system.entry.js} +1 -1
- package/dist/pine-core/{p-568bb210.system.entry.js → p-86d12f3c.system.entry.js} +1 -1
- package/dist/pine-core/{p-ae840ec4.entry.js → p-87ba6d2b.entry.js} +1 -1
- package/dist/pine-core/{p-e48161a5.entry.js → p-8c0040c4.entry.js} +1 -1
- package/dist/pine-core/{p-a659cce1.entry.js → p-8c85f53a.entry.js} +1 -1
- package/dist/pine-core/{p-20f39b93.system.entry.js → p-8d6fd5a7.system.entry.js} +1 -1
- package/dist/pine-core/{p-3f19666c.entry.js → p-92f648ba.entry.js} +1 -1
- package/dist/pine-core/{p-e620e492.system.entry.js → p-9374cf48.system.entry.js} +1 -1
- package/dist/pine-core/{p-babd0607.system.entry.js → p-9aaee1e9.system.entry.js} +1 -1
- package/dist/pine-core/p-B1rytYxP.system.js +1 -0
- package/dist/pine-core/p-BuRbS7Hp.js +1 -0
- package/dist/pine-core/p-BxIzb-Wc.system.js +1 -0
- package/dist/pine-core/{p-CdwliqhD.system.js → p-DVZjHa4_.system.js} +2 -2
- package/dist/pine-core/p-NNDTPCWx.js +2 -0
- package/dist/pine-core/{p-ba88ff60.system.entry.js → p-a03c12a4.system.entry.js} +1 -1
- package/dist/pine-core/p-a07b331a.entry.js +1 -0
- package/dist/pine-core/p-a0edb4ad.entry.js +1 -0
- package/dist/pine-core/{p-2cc1ec4c.entry.js → p-a9ef5295.entry.js} +1 -1
- package/dist/pine-core/p-aa0753e1.entry.js +1 -0
- package/dist/pine-core/{p-334b7c30.entry.js → p-ac2775b5.entry.js} +1 -1
- package/dist/pine-core/{p-a1750a54.entry.js → p-b0058cb0.entry.js} +1 -1
- package/dist/pine-core/p-b0674b8d.entry.js +1 -0
- package/dist/pine-core/{p-5f36fafa.system.entry.js → p-b5c760c8.system.entry.js} +1 -1
- package/dist/pine-core/{p-3a1b7302.system.entry.js → p-b6812452.system.entry.js} +1 -1
- package/dist/pine-core/{p-2b0cb8c4.system.entry.js → p-b89583e7.system.entry.js} +1 -1
- package/dist/pine-core/{p-5584a56b.entry.js → p-b9380ce8.entry.js} +1 -1
- package/dist/pine-core/{p-7a4da839.entry.js → p-bf759fc0.entry.js} +1 -1
- package/dist/pine-core/{p-791d357a.entry.js → p-c1932447.entry.js} +1 -1
- package/dist/pine-core/{p-cce83ef0.entry.js → p-c2688710.entry.js} +1 -1
- package/dist/pine-core/{p-46de2438.entry.js → p-c35fe2e2.entry.js} +1 -1
- package/dist/pine-core/{p-ef71710b.system.entry.js → p-c3748812.system.entry.js} +2 -2
- package/dist/pine-core/{p-59a5dd77.system.entry.js → p-c52ad43b.system.entry.js} +1 -1
- package/dist/pine-core/p-c625d5ea.system.entry.js +1 -0
- package/dist/pine-core/{p-25f8690f.entry.js → p-caf73216.entry.js} +1 -1
- package/dist/pine-core/{p-587a15ee.system.entry.js → p-cf389430.system.entry.js} +1 -1
- package/dist/pine-core/{p-ae2b466a.system.entry.js → p-d00f54f0.system.entry.js} +1 -1
- package/dist/pine-core/{p-7874fe2b.entry.js → p-d037308b.entry.js} +1 -1
- package/dist/pine-core/{p-52e9ec4f.entry.js → p-d281464e.entry.js} +1 -1
- package/dist/pine-core/{p-04f8b32a.entry.js → p-d70201bb.entry.js} +1 -1
- package/dist/pine-core/{p-9865431f.system.entry.js → p-d9cb26fe.system.entry.js} +1 -1
- package/dist/pine-core/{p-44388b8f.system.entry.js → p-dc460e2d.system.entry.js} +1 -1
- package/dist/pine-core/{p-01dba061.entry.js → p-dcc4ee5e.entry.js} +1 -1
- package/dist/pine-core/{p-f366f064.entry.js → p-def5d3d3.entry.js} +1 -1
- package/dist/pine-core/p-dfa70d20.entry.js +1 -0
- package/dist/pine-core/{p-c3a99f39.entry.js → p-eb42ca18.entry.js} +1 -1
- package/dist/pine-core/{p-59c60e5b.entry.js → p-ebe218f8.entry.js} +1 -1
- package/dist/pine-core/{p-889fce8a.entry.js → p-ec2c0e57.entry.js} +2 -2
- package/dist/pine-core/{p-fb68e503.system.entry.js → p-eed4b552.system.entry.js} +1 -1
- package/dist/pine-core/p-f6d1469d.entry.js +1 -0
- package/dist/pine-core/p-fb17773a.system.entry.js +1 -0
- package/dist/pine-core/p-fef6694d.entry.js +1 -0
- package/dist/pine-core/{p-0bf56f61.entry.js → p-ff1e9a32.entry.js} +1 -1
- package/dist/pine-core/p-ff3399ed.entry.js +1 -0
- package/dist/pine-core/pine-core.css +1 -1
- package/dist/pine-core/pine-core.esm.js +1 -1
- package/dist/pine-core/pine-core.js +1 -1
- package/dist/types/components/pds-avatar/pds-avatar.d.ts +25 -0
- package/dist/types/components/pds-button/pds-button.d.ts +1 -1
- package/dist/types/components/pds-combobox/pds-combobox.d.ts +14 -0
- package/dist/types/components/pds-link/pds-link.d.ts +7 -0
- package/dist/types/components/pds-modal/pds-modal.d.ts +10 -0
- package/dist/types/components/pds-select/pds-select.d.ts +1 -0
- package/dist/types/components/pds-tabs/pds-tab/pds-tab.d.ts +42 -0
- package/dist/types/components/pds-tabs/pds-tabpanel/pds-tabpanel.d.ts +5 -0
- package/dist/types/components/pds-tabs/pds-tabs.d.ts +25 -2
- package/dist/types/components.d.ts +172 -5
- package/dist/types/utils/form.d.ts +4 -1
- package/dist/vscode.html-data.json +10909 -0
- package/hydrate/index.js +291 -65
- package/hydrate/index.mjs +291 -65
- package/package.json +2 -2
- package/dist/esm-es5/form-C3xDZBme.js +0 -1
- package/dist/pine-core/p-003f91b1.system.entry.js +0 -1
- package/dist/pine-core/p-006398c3.system.entry.js +0 -1
- package/dist/pine-core/p-1f4910b0.system.entry.js +0 -1
- package/dist/pine-core/p-2af1d1d3.system.entry.js +0 -1
- package/dist/pine-core/p-3876b9be.entry.js +0 -1
- package/dist/pine-core/p-4abec102.system.entry.js +0 -3
- package/dist/pine-core/p-4e49712d.entry.js +0 -1
- package/dist/pine-core/p-63e0d4a5.system.entry.js +0 -1
- package/dist/pine-core/p-65fb166c.system.entry.js +0 -1
- package/dist/pine-core/p-6c5aacad.entry.js +0 -1
- package/dist/pine-core/p-7247fb4f.entry.js +0 -2
- package/dist/pine-core/p-73dd2a2b.entry.js +0 -1
- package/dist/pine-core/p-7520a715.system.entry.js +0 -1
- package/dist/pine-core/p-7766e970.entry.js +0 -1
- package/dist/pine-core/p-7b954dbf.entry.js +0 -1
- package/dist/pine-core/p-8065c732.entry.js +0 -1
- package/dist/pine-core/p-835d9f18.system.entry.js +0 -1
- package/dist/pine-core/p-B1u-QvFn.system.js +0 -1
- package/dist/pine-core/p-C3xDZBme.js +0 -1
- package/dist/pine-core/p-C61CFP22.system.js +0 -1
- package/dist/pine-core/p-CaRgVPt7.js +0 -2
- package/dist/pine-core/p-a982ac91.system.entry.js +0 -1
- package/dist/pine-core/p-ab957ace.system.entry.js +0 -1
- package/dist/pine-core/p-af48e6ae.entry.js +0 -1
- package/dist/pine-core/p-b1b317a5.entry.js +0 -1
- package/dist/pine-core/p-bdf18687.entry.js +0 -1
- package/dist/pine-core/p-db1572a3.entry.js +0 -1
- package/dist/pine-core/p-e291db30.entry.js +0 -1
- package/dist/pine-core/p-e77c5c08.system.entry.js +0 -1
- package/dist/pine-core/p-f2cf8e76.entry.js +0 -1
- package/dist/pine-core/p-fda3f3c6.entry.js +0 -1
- /package/dist/esm-es5/{index-D4ys0pep.js → index-BjlFq0VD.js} +0 -0
- /package/dist/pine-core/{p-D4ys0pep.js → p-BjlFq0VD.js} +0 -0
- /package/dist/pine-core/{p-C62JIZmE.system.js → p-WYNNo1N0.system.js} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
|
-
import { isSpecTest } from "../../utils/form";
|
|
2
|
+
import { assignDescription, isSpecTest, messageId } from "../../utils/form";
|
|
3
3
|
import { autoUpdate, computePosition, flip, offset, shift } from "@floating-ui/dom";
|
|
4
4
|
import { debounceEvent } from "../../utils/utils";
|
|
5
5
|
import DOMPurify from "dompurify";
|
|
@@ -1450,6 +1450,19 @@ export class PdsCombobox {
|
|
|
1450
1450
|
,
|
|
1451
1451
|
large: chipProps.large, icon: chipProps.icon, dot: chipProps.dot, class: "pds-combobox__option-chip" }, this.getOptionLabel(option)));
|
|
1452
1452
|
}
|
|
1453
|
+
// Mirrors pds-multiselect and pds-select: an error message on its own puts the
|
|
1454
|
+
// field in an invalid state, so assistive tech agrees with the visual treatment.
|
|
1455
|
+
isInvalid() {
|
|
1456
|
+
return Boolean(this.invalid) || Boolean(this.errorMessage);
|
|
1457
|
+
}
|
|
1458
|
+
renderMessages() {
|
|
1459
|
+
const hasErrorMessage = Boolean(this.errorMessage);
|
|
1460
|
+
const showHelperMessage = Boolean(this.helperMessage) && !hasErrorMessage;
|
|
1461
|
+
return [
|
|
1462
|
+
showHelperMessage && (h("p", { class: "pds-combobox__helper", id: messageId(this.componentId, 'helper') }, this.helperMessage)),
|
|
1463
|
+
hasErrorMessage && (h("p", { class: "pds-combobox__error", id: messageId(this.componentId, 'error'), "aria-live": "assertive" }, h("pds-icon", { icon: "danger", size: "small", "aria-hidden": "true" }), this.errorMessage)),
|
|
1464
|
+
];
|
|
1465
|
+
}
|
|
1453
1466
|
render() {
|
|
1454
1467
|
const triggerClass = [
|
|
1455
1468
|
'pds-combobox__button-trigger',
|
|
@@ -1458,10 +1471,13 @@ export class PdsCombobox {
|
|
|
1458
1471
|
]
|
|
1459
1472
|
.filter(Boolean)
|
|
1460
1473
|
.join(' ');
|
|
1461
|
-
return (h(Host, { key: '
|
|
1474
|
+
return (h(Host, { key: '115a28c139b06d852de925536a7345958730265b', "aria-disabled": this.disabled ? 'true' : null }, h("div", { key: 'b0ede014fa6bfda054aa641556afa82c8240be52', class: "pds-combobox", tabIndex: -1, onFocusout: this.onComboboxFocusOut, part: "combobox" }, this.label && !this.hideLabel && (h("label", { key: 'befefbc617146f1b5f896988608a6a57f6ff826c', htmlFor: this.componentId, class: "pds-combobox__label" }, this.label)), this.trigger === 'input' ? (h("div", { class: "pds-combobox__input-wrapper", style: { width: this.triggerWidth } }, h("input", { ref: el => {
|
|
1462
1475
|
this.inputEl = el;
|
|
1463
1476
|
this.triggerEl = el;
|
|
1464
|
-
}, class:
|
|
1477
|
+
}, class: {
|
|
1478
|
+
'pds-combobox__input': true,
|
|
1479
|
+
'pds-combobox__input--invalid': this.isInvalid(),
|
|
1480
|
+
}, type: "text", role: "combobox", "aria-autocomplete": "list", "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.isOpen && this.highlightedIndex >= 0 ? this.optionDomId(this.highlightedIndex) : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.hideLabel ? this.label : undefined, id: this.componentId, value: this.displayText, placeholder: this.placeholder, disabled: this.disabled, onInput: this.handleInput, onClick: this.handleInputClick, onKeyDown: this.handleKeyDown, autocomplete: "off", part: "input" }), h("pds-icon", { icon: "enlarge", "aria-hidden": "true", class: "pds-combobox__input-icon" }))) : this.trigger === 'chip' ? (h("div", { class: this.getChipTriggerClass(), style: { width: this.triggerWidth }, role: "combobox", "aria-haspopup": "listbox", "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.isOpen && this.highlightedIndex >= 0 ? this.optionDomId(this.highlightedIndex) : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.hideLabel ? this.label : undefined, id: this.componentId, tabIndex: this.disabled ? -1 : 0, onClick: this.onButtonTriggerClick, "data-layout": this.customTriggerContent, onKeyDown: this.onButtonTriggerKeyDown, onKeyUp: this.onButtonTriggerKeyUp, ref: el => (this.triggerEl = el), part: "chip-trigger" }, this.renderChipTriggerContent())) : (h("div", { class: triggerClass, style: { width: this.triggerWidth }, role: "combobox", "aria-haspopup": "listbox", "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.isOpen && this.highlightedIndex >= 0 ? this.optionDomId(this.highlightedIndex) : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.hideLabel ? this.label : undefined, id: this.componentId, tabIndex: this.disabled ? -1 : 0, onClick: this.onButtonTriggerClick, "data-layout": this.customTriggerContent, onKeyDown: this.onButtonTriggerKeyDown, onKeyUp: this.onButtonTriggerKeyUp, ref: el => (this.triggerEl = el), part: "button-trigger" }, this.renderButtonTriggerContent())), this.renderMessages(), h("div", { key: '5458993624cf3b2cd70026001a289cb3328b955e', style: { display: 'none' } }, h("slot", { key: '03178355e67f7347f832725d26fafe6281bd2541', onSlotchange: () => this.updateOptions() })), this.renderDropdown())));
|
|
1465
1481
|
}
|
|
1466
1482
|
static get is() { return "pds-combobox"; }
|
|
1467
1483
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1582,6 +1598,25 @@ export class PdsCombobox {
|
|
|
1582
1598
|
"attribute": "disabled",
|
|
1583
1599
|
"defaultValue": "false"
|
|
1584
1600
|
},
|
|
1601
|
+
"errorMessage": {
|
|
1602
|
+
"type": "string",
|
|
1603
|
+
"mutable": false,
|
|
1604
|
+
"complexType": {
|
|
1605
|
+
"original": "string",
|
|
1606
|
+
"resolved": "string",
|
|
1607
|
+
"references": {}
|
|
1608
|
+
},
|
|
1609
|
+
"required": false,
|
|
1610
|
+
"optional": true,
|
|
1611
|
+
"docs": {
|
|
1612
|
+
"tags": [],
|
|
1613
|
+
"text": "Error message to display."
|
|
1614
|
+
},
|
|
1615
|
+
"getter": false,
|
|
1616
|
+
"setter": false,
|
|
1617
|
+
"reflect": false,
|
|
1618
|
+
"attribute": "error-message"
|
|
1619
|
+
},
|
|
1585
1620
|
"dropdownPlacement": {
|
|
1586
1621
|
"type": "string",
|
|
1587
1622
|
"mutable": false,
|
|
@@ -1651,6 +1686,25 @@ export class PdsCombobox {
|
|
|
1651
1686
|
"attribute": "dropdown-mount",
|
|
1652
1687
|
"defaultValue": "'host'"
|
|
1653
1688
|
},
|
|
1689
|
+
"helperMessage": {
|
|
1690
|
+
"type": "string",
|
|
1691
|
+
"mutable": false,
|
|
1692
|
+
"complexType": {
|
|
1693
|
+
"original": "string",
|
|
1694
|
+
"resolved": "string",
|
|
1695
|
+
"references": {}
|
|
1696
|
+
},
|
|
1697
|
+
"required": false,
|
|
1698
|
+
"optional": true,
|
|
1699
|
+
"docs": {
|
|
1700
|
+
"tags": [],
|
|
1701
|
+
"text": "Helper message to display below the combobox."
|
|
1702
|
+
},
|
|
1703
|
+
"getter": false,
|
|
1704
|
+
"setter": false,
|
|
1705
|
+
"reflect": false,
|
|
1706
|
+
"attribute": "helper-message"
|
|
1707
|
+
},
|
|
1654
1708
|
"hideLabel": {
|
|
1655
1709
|
"type": "boolean",
|
|
1656
1710
|
"mutable": false,
|
|
@@ -1671,6 +1725,25 @@ export class PdsCombobox {
|
|
|
1671
1725
|
"attribute": "hide-label",
|
|
1672
1726
|
"defaultValue": "false"
|
|
1673
1727
|
},
|
|
1728
|
+
"invalid": {
|
|
1729
|
+
"type": "boolean",
|
|
1730
|
+
"mutable": false,
|
|
1731
|
+
"complexType": {
|
|
1732
|
+
"original": "boolean",
|
|
1733
|
+
"resolved": "boolean",
|
|
1734
|
+
"references": {}
|
|
1735
|
+
},
|
|
1736
|
+
"required": false,
|
|
1737
|
+
"optional": true,
|
|
1738
|
+
"docs": {
|
|
1739
|
+
"tags": [],
|
|
1740
|
+
"text": "If true, the combobox is in an invalid state."
|
|
1741
|
+
},
|
|
1742
|
+
"getter": false,
|
|
1743
|
+
"setter": false,
|
|
1744
|
+
"reflect": false,
|
|
1745
|
+
"attribute": "invalid"
|
|
1746
|
+
},
|
|
1674
1747
|
"label": {
|
|
1675
1748
|
"type": "string",
|
|
1676
1749
|
"mutable": false,
|
|
@@ -10,7 +10,10 @@ export default {
|
|
|
10
10
|
dropdownPlacement: 'bottom-start',
|
|
11
11
|
dropdownMount: 'host',
|
|
12
12
|
dropdownWidth: '236px',
|
|
13
|
+
errorMessage: null,
|
|
14
|
+
helperMessage: null,
|
|
13
15
|
hideLabel: false,
|
|
16
|
+
invalid: false,
|
|
14
17
|
maxHeight: null,
|
|
15
18
|
mode: 'filter',
|
|
16
19
|
trigger: 'input',
|
|
@@ -38,7 +41,10 @@ const BaseTemplate = (args) => html`
|
|
|
38
41
|
dropdown-placement=${args.dropdownPlacement}
|
|
39
42
|
dropdown-mount=${args.dropdownMount}
|
|
40
43
|
dropdown-width=${args.dropdownWidth}
|
|
44
|
+
error-message=${args.errorMessage}
|
|
45
|
+
helper-message=${args.helperMessage}
|
|
41
46
|
hide-label=${args.hideLabel}
|
|
47
|
+
invalid=${args.invalid}
|
|
42
48
|
max-height=${args.maxHeight}
|
|
43
49
|
label=${args.label}
|
|
44
50
|
placeholder=${args.placeholder}
|
|
@@ -70,6 +76,25 @@ Default.args = {
|
|
|
70
76
|
value: 'panda',
|
|
71
77
|
};
|
|
72
78
|
|
|
79
|
+
export const HelperMessage = BaseTemplate.bind();
|
|
80
|
+
HelperMessage.args = {
|
|
81
|
+
componentId: 'combobox-helper-story',
|
|
82
|
+
name: 'favoriteAnimal',
|
|
83
|
+
label: 'Favorite Animal',
|
|
84
|
+
placeholder: 'placeholder_text',
|
|
85
|
+
helperMessage: 'Start typing to filter the list.',
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export const ErrorMessage = BaseTemplate.bind();
|
|
89
|
+
ErrorMessage.args = {
|
|
90
|
+
componentId: 'combobox-error-story',
|
|
91
|
+
name: 'favoriteAnimal',
|
|
92
|
+
label: 'Favorite Animal',
|
|
93
|
+
placeholder: 'placeholder_text',
|
|
94
|
+
errorMessage: 'Please choose an animal.',
|
|
95
|
+
invalid: true,
|
|
96
|
+
};
|
|
97
|
+
|
|
73
98
|
export const ButtonTrigger = BaseTemplate.bind();
|
|
74
99
|
ButtonTrigger.args = {
|
|
75
100
|
componentId: 'combobox-button-trigger-story',
|
|
@@ -289,7 +289,7 @@ export class PdsInput {
|
|
|
289
289
|
return (h(Host, { key: 'ecf4cc212e5c3ebc18082b790803e6b2ccb8ca77', "aria-disabled": this.disabled ? 'true' : null, "aria-readonly": this.readonly ? 'true' : null, "has-prefix": this.hasPrefix ? 'true' : null, "has-suffix": this.hasSuffix ? 'true' : null, "has-prepend": this.hasPrepend ? 'true' : null, "has-append": this.hasAppend ? 'true' : null, "has-action": this.hasAction && !this.hideLabel ? 'true' : null, "full-width": this.fullWidth ? 'true' : null }, h("div", { key: 'acdf92a30068fc04a17816ec6d85295b47e512ee', class: "pds-input" }, label && (h("div", { key: '4569f0b3761db89e85a090eff6af1c47cb562115', class: {
|
|
290
290
|
'pds-input__label-wrapper': true,
|
|
291
291
|
'visually-hidden': this.hideLabel,
|
|
292
|
-
} }, h("label", { key: '90b0a863d78115fa158429db11548fc2a9ee5ae6', htmlFor: componentId, class: "pds-input__label" }, h("span", { key: '3d440aaafc4daeffe45152cd23d27472d7ebf85a' }, label, this.required && h("span", { key: 'c7bf6ef6191e961a106b8885cab604aa89730eba', class: "pds-input__required-indicator" }, " *"))), !this.hideLabel && this.renderAction())), h("div", { key: '81f0b8a347bc9a06c753b9f31f5e30ac78e45adb', class: inputWrapperClasses }, this.renderPrepend(), this.renderPrefix(), h("input", Object.assign({ key: '
|
|
292
|
+
} }, h("label", { key: '90b0a863d78115fa158429db11548fc2a9ee5ae6', htmlFor: componentId, class: "pds-input__label" }, h("span", { key: '3d440aaafc4daeffe45152cd23d27472d7ebf85a' }, label, this.required && h("span", { key: 'c7bf6ef6191e961a106b8885cab604aa89730eba', class: "pds-input__required-indicator" }, " *"))), !this.hideLabel && this.renderAction())), h("div", { key: '81f0b8a347bc9a06c753b9f31f5e30ac78e45adb', class: inputWrapperClasses }, this.renderPrepend(), this.renderPrefix(), h("input", Object.assign({ key: '41ed8dab6f7c71c6c382627ca4dc48bb95c1161d', ref: (input) => (this.nativeInput = input), class: "pds-input__field", "aria-describedby": assignDescription(componentId, invalid, helperMessage, errorMessage), "aria-invalid": invalid ? "true" : undefined, autocomplete: this.autocomplete, disabled: disabled, id: componentId, max: this.max, maxlength: this.maxlength, min: this.min, minlength: this.minlength, name: this.name, pattern: this.pattern, placeholder: this.placeholder, readOnly: this.readonly, required: this.required, step: this.step, type: this.type, value: value, onInput: this.onInputEvent, onChange: this.onChangeEvent, onBlur: this.onBlurEvent, onFocus: this.onFocusEvent, onKeyDown: this.onKeyDownEvent, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd }, this.inheritedAttributes)), this.renderSuffix(), this.renderAppend()), helperMessage && (h("p", { key: '4791ddeb01b758a94a2fddfec6093b9b39eefafa', class: "pds-input__helper-message", id: messageId(componentId, 'helper') }, helperMessage)), errorMessage && (h("p", { key: 'd0a22ae4b0e400e1d5df55e35c0aaaa5c5ea3ab7', class: "pds-input__error-message", id: messageId(componentId, 'error') }, h("pds-icon", { key: '69975cdcc15e5ab6df9e2c354977e2c6dae18f6e', "aria-hidden": "true", icon: danger, size: "small" }), errorMessage)))));
|
|
293
293
|
}
|
|
294
294
|
static get is() { return "pds-input"; }
|
|
295
295
|
static get encapsulation() { return "shadow"; }
|
|
@@ -70,4 +70,14 @@
|
|
|
70
70
|
.pds-link--plain:hover {
|
|
71
71
|
color: var(--color, var(--pds-context-link-color-hover, var(--pine-color-text-hover)));
|
|
72
72
|
text-decoration: underline;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
:host([active]) .pds-link {
|
|
76
|
+
color: var(--pds-context-link-color, var(--pine-color-text-strong));
|
|
77
|
+
text-decoration: underline;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
:host([active]) .pds-link:hover {
|
|
81
|
+
color: var(--pds-context-link-color-hover, var(--pine-color-text-strong));
|
|
82
|
+
text-decoration: underline;
|
|
73
83
|
}
|
|
@@ -7,6 +7,13 @@ import { launch } from "@pine-ds/icons/icons";
|
|
|
7
7
|
*/
|
|
8
8
|
export class PdsLink {
|
|
9
9
|
constructor() {
|
|
10
|
+
/**
|
|
11
|
+
* Marks the link as the current/active navigation item — for tab strips and
|
|
12
|
+
* nav rails built from links. Applies the active treatment (persistent
|
|
13
|
+
* underline + strong text) and sets `aria-current="page"`.
|
|
14
|
+
* @defaultValue false
|
|
15
|
+
*/
|
|
16
|
+
this.active = false;
|
|
10
17
|
/**
|
|
11
18
|
* Determines whether the link should open in a new tab.
|
|
12
19
|
* @defaultValue false
|
|
@@ -49,8 +56,8 @@ export class PdsLink {
|
|
|
49
56
|
const targetValue = this.target || (this.external ? '_blank' : undefined);
|
|
50
57
|
const showExternalIcon = this.external;
|
|
51
58
|
const relValue = targetValue === '_blank' ? 'noopener noreferrer' : undefined;
|
|
52
|
-
return (h("a", { key: '
|
|
53
|
-
h("pds-icon", { key: '
|
|
59
|
+
return (h("a", { key: '5d0c5a0a5b8b80a8cdff802a3d78dad85a9ccdc4', class: this.classNames(), download: this.download, href: this.href, id: this.componentId, part: "link", "aria-current": this.active ? 'page' : undefined, target: targetValue, rel: relValue, style: this.setLinkStyles(), "data-turbo": this.turbo || undefined, "data-turbo-frame": this.turboFrame || undefined, "data-turbo-action": this.turboAction || undefined, "data-turbo-method": this.turboMethod || undefined, "data-turbo-confirm": this.turboConfirm || undefined, "data-turbo-stream": this.turboStream || undefined, "data-turbo-prefetch": this.turboPrefetch || undefined, "data-turbo-preload": this.turboPreload || undefined }, h("slot", { key: '06b7be14d867eae1b7acba8570f1e94bdf840fbb' }, this.href), showExternalIcon &&
|
|
60
|
+
h("pds-icon", { key: '678414f7d20fd20b6931cc401163180c3ad0094c', icon: launch, size: this.fontSize })));
|
|
54
61
|
}
|
|
55
62
|
static get is() { return "pds-link"; }
|
|
56
63
|
static get encapsulation() { return "shadow"; }
|
|
@@ -66,6 +73,29 @@ export class PdsLink {
|
|
|
66
73
|
}
|
|
67
74
|
static get properties() {
|
|
68
75
|
return {
|
|
76
|
+
"active": {
|
|
77
|
+
"type": "boolean",
|
|
78
|
+
"mutable": false,
|
|
79
|
+
"complexType": {
|
|
80
|
+
"original": "boolean",
|
|
81
|
+
"resolved": "boolean",
|
|
82
|
+
"references": {}
|
|
83
|
+
},
|
|
84
|
+
"required": false,
|
|
85
|
+
"optional": false,
|
|
86
|
+
"docs": {
|
|
87
|
+
"tags": [{
|
|
88
|
+
"name": "defaultValue",
|
|
89
|
+
"text": "false"
|
|
90
|
+
}],
|
|
91
|
+
"text": "Marks the link as the current/active navigation item \u2014 for tab strips and\nnav rails built from links. Applies the active treatment (persistent\nunderline + strong text) and sets `aria-current=\"page\"`."
|
|
92
|
+
},
|
|
93
|
+
"getter": false,
|
|
94
|
+
"setter": false,
|
|
95
|
+
"reflect": true,
|
|
96
|
+
"attribute": "active",
|
|
97
|
+
"defaultValue": "false"
|
|
98
|
+
},
|
|
69
99
|
"color": {
|
|
70
100
|
"type": "string",
|
|
71
101
|
"mutable": false,
|
|
@@ -58,3 +58,17 @@ WithoutCustomTextInSlot.args = {
|
|
|
58
58
|
fontSize: 'lg',
|
|
59
59
|
variant: 'inline'
|
|
60
60
|
};
|
|
61
|
+
|
|
62
|
+
// A per-URL tab strip built from links (pds-tabs is an in-page panel switcher,
|
|
63
|
+
// not navigation). `active` marks the current destination — persistent underline
|
|
64
|
+
// + strong text, and `aria-current="page"`, which is the correct ARIA token for
|
|
65
|
+
// links that navigate to distinct pages.
|
|
66
|
+
export const NavTabs = {
|
|
67
|
+
render: () => html`
|
|
68
|
+
<nav aria-label="Club sections" style="display: flex; gap: var(--pine-dimension-md);">
|
|
69
|
+
<pds-link href="/clubs/1/chat" font-size="md" ?active=${true}>Chat</pds-link>
|
|
70
|
+
<pds-link href="/clubs/1/resources" font-size="md" variant="plain">Resources</pds-link>
|
|
71
|
+
<pds-link href="/clubs/1/members" font-size="md" variant="plain">Members</pds-link>
|
|
72
|
+
</nav>
|
|
73
|
+
`,
|
|
74
|
+
};
|
|
@@ -22,6 +22,16 @@ export class PdsModal {
|
|
|
22
22
|
* @default true
|
|
23
23
|
*/
|
|
24
24
|
this.scrollable = true;
|
|
25
|
+
/**
|
|
26
|
+
* Whether the modal opens outside the browser top layer as a non-modal dialog.
|
|
27
|
+
* When `true` it opens with `dialog.show()` instead of `dialog.showModal()`, so
|
|
28
|
+
* overlays rendered elsewhere in the DOM (file pickers, editor menus) can display
|
|
29
|
+
* above it via `z-index`. The page is not made inert and focus is not trapped in
|
|
30
|
+
* this mode. Read when the modal opens; changing it while the modal is open is
|
|
31
|
+
* not supported.
|
|
32
|
+
* @default false
|
|
33
|
+
*/
|
|
34
|
+
this.disableTopLayer = false;
|
|
25
35
|
/**
|
|
26
36
|
* Stores the list of focusable elements in the modal
|
|
27
37
|
*/
|
|
@@ -43,6 +53,13 @@ export class PdsModal {
|
|
|
43
53
|
return;
|
|
44
54
|
// Handle Escape key to close the modal
|
|
45
55
|
if (e.key === 'Escape') {
|
|
56
|
+
// In non-top-layer mode, focus can move into an overlay stacked above the
|
|
57
|
+
// modal (the reason disableTopLayer exists). If that overlay owns focus,
|
|
58
|
+
// leave Escape to it rather than dismissing this modal out from under it.
|
|
59
|
+
const active = document.activeElement;
|
|
60
|
+
if (this.disableTopLayer && active && active !== document.body && !this.el.contains(active)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
46
63
|
// Always prevent native dialog close behavior
|
|
47
64
|
e.preventDefault();
|
|
48
65
|
// Only close if backdropDismiss is enabled and this is the innermost modal
|
|
@@ -53,6 +70,11 @@ export class PdsModal {
|
|
|
53
70
|
}
|
|
54
71
|
// Handle Tab key for focus trapping
|
|
55
72
|
if (e.key === 'Tab') {
|
|
73
|
+
// In non-top-layer mode the modal is deliberately not focus-isolated: focus
|
|
74
|
+
// must be able to leave it into overlays stacked above (the whole point of
|
|
75
|
+
// disableTopLayer), so do not trap Tab here.
|
|
76
|
+
if (this.disableTopLayer)
|
|
77
|
+
return;
|
|
56
78
|
// If there are no focusable elements, do nothing
|
|
57
79
|
if (this.focusableElements.length === 0)
|
|
58
80
|
return;
|
|
@@ -170,8 +192,16 @@ export class PdsModal {
|
|
|
170
192
|
try {
|
|
171
193
|
// Store the currently focused element to restore focus when modal closes
|
|
172
194
|
this.previousActiveElement = document.activeElement;
|
|
173
|
-
//
|
|
174
|
-
|
|
195
|
+
// showModal() promotes the dialog to the browser top layer (and makes the
|
|
196
|
+
// rest of the page inert), which prevents any overlay outside the dialog
|
|
197
|
+
// from ever painting above it. show() opens a non-modal dialog that stays
|
|
198
|
+
// in the normal stacking context so those overlays can stack above it.
|
|
199
|
+
if (this.disableTopLayer) {
|
|
200
|
+
this.modalRef.show();
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
this.modalRef.showModal();
|
|
204
|
+
}
|
|
175
205
|
this.open = true;
|
|
176
206
|
// Update focusable elements and set initial focus
|
|
177
207
|
// Using a longer timeout to ensure all components are fully rendered
|
|
@@ -233,14 +263,14 @@ export class PdsModal {
|
|
|
233
263
|
return thisZIndex === maxZIndex;
|
|
234
264
|
}
|
|
235
265
|
render() {
|
|
236
|
-
return (h("dialog", { key: '
|
|
266
|
+
return (h("dialog", { key: 'd345ea0a585213fd7879a2fe27071705fbdba79b', class: {
|
|
237
267
|
'pds-modal__backdrop': true,
|
|
238
268
|
'open': this.open
|
|
239
|
-
}, "aria-modal":
|
|
269
|
+
}, "aria-modal": this.disableTopLayer ? 'false' : 'true', "aria-labelledby": `${this.componentId}-heading`, onClick: this.handleBackdropClick }, h("div", { key: '34c9a222d58ffd9736a36ab6848679186167e878', class: {
|
|
240
270
|
'pds-modal': true,
|
|
241
271
|
[`pds-modal--${this.size}`]: true,
|
|
242
272
|
'pds-modal--scrollable': this.scrollable
|
|
243
|
-
}, part: "modal" }, h("slot", { key: '
|
|
273
|
+
}, part: "modal" }, h("slot", { key: '4eef9c3001b6a7c972fa8e49fa3f0b140c7fe7ce' }))));
|
|
244
274
|
}
|
|
245
275
|
static get is() { return "pds-modal"; }
|
|
246
276
|
static get originalStyleUrls() {
|
|
@@ -365,6 +395,29 @@ export class PdsModal {
|
|
|
365
395
|
"reflect": false,
|
|
366
396
|
"attribute": "scrollable",
|
|
367
397
|
"defaultValue": "true"
|
|
398
|
+
},
|
|
399
|
+
"disableTopLayer": {
|
|
400
|
+
"type": "boolean",
|
|
401
|
+
"mutable": false,
|
|
402
|
+
"complexType": {
|
|
403
|
+
"original": "boolean",
|
|
404
|
+
"resolved": "boolean",
|
|
405
|
+
"references": {}
|
|
406
|
+
},
|
|
407
|
+
"required": false,
|
|
408
|
+
"optional": false,
|
|
409
|
+
"docs": {
|
|
410
|
+
"tags": [{
|
|
411
|
+
"name": "default",
|
|
412
|
+
"text": "false"
|
|
413
|
+
}],
|
|
414
|
+
"text": "Whether the modal opens outside the browser top layer as a non-modal dialog.\nWhen `true` it opens with `dialog.show()` instead of `dialog.showModal()`, so\noverlays rendered elsewhere in the DOM (file pickers, editor menus) can display\nabove it via `z-index`. The page is not made inert and focus is not trapped in\nthis mode. Read when the modal opens; changing it while the modal is open is\nnot supported."
|
|
415
|
+
},
|
|
416
|
+
"getter": false,
|
|
417
|
+
"setter": false,
|
|
418
|
+
"reflect": false,
|
|
419
|
+
"attribute": "disable-top-layer",
|
|
420
|
+
"defaultValue": "false"
|
|
368
421
|
}
|
|
369
422
|
};
|
|
370
423
|
}
|
|
@@ -8,6 +8,7 @@ export default {
|
|
|
8
8
|
args: {
|
|
9
9
|
backdropDismiss: true,
|
|
10
10
|
componentId: 'modal-demo',
|
|
11
|
+
disableTopLayer: false,
|
|
11
12
|
open: false,
|
|
12
13
|
scrollable: true,
|
|
13
14
|
size: 'md',
|
|
@@ -26,6 +27,7 @@ const BaseTemplate = (args) => html`
|
|
|
26
27
|
component-id="${args.componentId}"
|
|
27
28
|
size="${args.size}"
|
|
28
29
|
?backdrop-dismiss=${args.backdropDismiss}
|
|
30
|
+
?disable-top-layer=${args.disableTopLayer}
|
|
29
31
|
scrollable="${args.scrollable}"
|
|
30
32
|
?open=${args.open}
|
|
31
33
|
key="${args.scrollable ? 'scrollable' : 'non-scrollable'}"
|
|
@@ -652,3 +654,78 @@ export const CustomBorders = CustomBordersTemplate.bind({});
|
|
|
652
654
|
CustomBorders.args = {
|
|
653
655
|
componentId: 'custom-borders-modal',
|
|
654
656
|
};
|
|
657
|
+
|
|
658
|
+
// Demonstrates `disable-top-layer`: the modal opens as a non-modal dialog
|
|
659
|
+
// (dialog.show()) so an overlay appended to document.body can display above it.
|
|
660
|
+
// With the default top-layer behavior the same overlay would render behind the
|
|
661
|
+
// modal and be unreachable.
|
|
662
|
+
const DisableTopLayerTemplate = (args) => html`
|
|
663
|
+
<div style="padding: 1rem;">
|
|
664
|
+
<pds-button onClick="document.querySelector('#${args.componentId}').open = true">
|
|
665
|
+
Open Modal (disable-top-layer)
|
|
666
|
+
</pds-button>
|
|
667
|
+
|
|
668
|
+
<pds-modal
|
|
669
|
+
id="${args.componentId}"
|
|
670
|
+
component-id="${args.componentId}"
|
|
671
|
+
size="${args.size}"
|
|
672
|
+
?backdrop-dismiss=${args.backdropDismiss}
|
|
673
|
+
?disable-top-layer=${args.disableTopLayer}
|
|
674
|
+
?open=${args.open}
|
|
675
|
+
>
|
|
676
|
+
<pds-modal-header>
|
|
677
|
+
<pds-box direction="column" fit padding="md">
|
|
678
|
+
<pds-box align-items="center" fit justify-content="space-between">
|
|
679
|
+
<pds-text tag="h2" size="h3">Modal Title</pds-text>
|
|
680
|
+
<pds-button
|
|
681
|
+
class="pds-modal__close"
|
|
682
|
+
variant="unstyled"
|
|
683
|
+
icon-only="true"
|
|
684
|
+
onclick="document.querySelector('#${args.componentId}').open = false"
|
|
685
|
+
aria-label="Close modal"
|
|
686
|
+
part="close-button"
|
|
687
|
+
>
|
|
688
|
+
<pds-icon slot="start" name="remove" aria-hidden="true"></pds-icon>
|
|
689
|
+
</pds-button>
|
|
690
|
+
</pds-box>
|
|
691
|
+
</pds-box>
|
|
692
|
+
</pds-modal-header>
|
|
693
|
+
|
|
694
|
+
<pds-modal-content>
|
|
695
|
+
<pds-box fit direction="column" padding-inline-start="md" padding-inline-end="md" gap="sm">
|
|
696
|
+
<p>
|
|
697
|
+
This modal uses <code>disable-top-layer</code>, so it renders in the normal stacking
|
|
698
|
+
context instead of the browser top layer.
|
|
699
|
+
</p>
|
|
700
|
+
<p>
|
|
701
|
+
An overlay appended to <code>document.body</code> with a higher <code>z-index</code> can
|
|
702
|
+
therefore display above it — useful for file pickers, rich-text editor menus, and
|
|
703
|
+
other body-mounted overlays that would otherwise be trapped behind a top-layer dialog.
|
|
704
|
+
</p>
|
|
705
|
+
<pds-button
|
|
706
|
+
variant="secondary"
|
|
707
|
+
onclick="(function(){var o=document.createElement('button');o.type='button';o.textContent='Overlay above the modal — focusable, keyboard-dismissable. Click or press Enter.';o.setAttribute('style','position:fixed;inset:auto 2rem 2rem auto;max-width:20rem;padding:1rem;border:0;text-align:start;border-radius:8px;background:#111;color:#fff;z-index:2147483647;cursor:pointer;box-shadow:0 8px 24px rgba(0,0,0,.4)');var modal=document.querySelector('#${args.componentId}');var remove=function(){o.remove()};o.onclick=remove;o.addEventListener('keydown',function(e){if(e.key==='Escape')remove()});if(modal)modal.addEventListener('pdsModalClose',remove,{once:true});document.body.appendChild(o);o.focus();})()"
|
|
708
|
+
>
|
|
709
|
+
Show overlay above modal
|
|
710
|
+
</pds-button>
|
|
711
|
+
</pds-box>
|
|
712
|
+
</pds-modal-content>
|
|
713
|
+
|
|
714
|
+
<pds-modal-footer>
|
|
715
|
+
<pds-box justify-content="end" fit padding="md" gap="sm">
|
|
716
|
+
<pds-button variant="secondary" onclick="document.querySelector('#${args.componentId}').open = false">
|
|
717
|
+
Close
|
|
718
|
+
</pds-button>
|
|
719
|
+
</pds-box>
|
|
720
|
+
</pds-modal-footer>
|
|
721
|
+
</pds-modal>
|
|
722
|
+
</div>
|
|
723
|
+
`;
|
|
724
|
+
|
|
725
|
+
export const DisableTopLayer = DisableTopLayerTemplate.bind({});
|
|
726
|
+
DisableTopLayer.args = {
|
|
727
|
+
componentId: 'disable-top-layer-modal',
|
|
728
|
+
disableTopLayer: true,
|
|
729
|
+
size: 'md',
|
|
730
|
+
open: false,
|
|
731
|
+
};
|
|
@@ -291,7 +291,7 @@
|
|
|
291
291
|
|
|
292
292
|
.pds-multiselect__helper {
|
|
293
293
|
color: var(--pine-color-text-message);
|
|
294
|
-
font: var(--pine-typography-body-sm);
|
|
294
|
+
font: var(--pine-typography-body-sm-medium);
|
|
295
295
|
margin-block-start: var(--pine-dimension-2xs);
|
|
296
296
|
margin-inline-start: var(--pine-dimension-none);
|
|
297
297
|
}
|
|
@@ -300,7 +300,7 @@
|
|
|
300
300
|
align-items: flex-start;
|
|
301
301
|
color: var(--pine-color-text-message-danger);
|
|
302
302
|
display: flex;
|
|
303
|
-
font: var(--pine-typography-body-sm);
|
|
303
|
+
font: var(--pine-typography-body-sm-medium);
|
|
304
304
|
gap: var(--pine-dimension-2xs);
|
|
305
305
|
margin-block-start: var(--pine-dimension-2xs);
|
|
306
306
|
margin-inline-start: var(--pine-dimension-none);
|
|
@@ -1031,16 +1031,16 @@ export class PdsMultiselect {
|
|
|
1031
1031
|
'pds-multiselect__trigger--invalid': this.invalid || !!this.errorMessage,
|
|
1032
1032
|
'pds-multiselect__trigger--has-value': hasSelections,
|
|
1033
1033
|
'pds-multiselect__trigger--pill-inline': true,
|
|
1034
|
-
}, onClick: this.handleTriggerClick }, this.renderInlinePills(), h("button", { ref: el => (this.triggerEl = el), type: "button", id: this.componentId, part: "pill-toggle", class: "pds-multiselect__pill-toggle", disabled: this.disabled, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-labelledby": this.label ? `${this.componentId}-label` : undefined, "aria-required": this.required ? 'true' : undefined, "aria-describedby": assignDescription(this.componentId, this.invalid || !!this.errorMessage, this.
|
|
1034
|
+
}, onClick: this.handleTriggerClick }, this.renderInlinePills(), h("button", { ref: el => (this.triggerEl = el), type: "button", id: this.componentId, part: "pill-toggle", class: "pds-multiselect__pill-toggle", disabled: this.disabled, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-labelledby": this.label ? `${this.componentId}-label` : undefined, "aria-required": this.required ? 'true' : undefined, "aria-describedby": assignDescription(this.componentId, this.invalid || !!this.errorMessage, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid || !!this.errorMessage ? 'true' : undefined, onKeyDown: this.handleTriggerKeyDown }, h("pds-icon", { class: "pds-multiselect__icon", icon: enlarge })))) : (h("button", { ref: el => (this.triggerEl = el), type: "button", part: "trigger", class: {
|
|
1035
1035
|
'pds-multiselect__trigger': true,
|
|
1036
1036
|
'pds-multiselect__trigger--open': this.isOpen,
|
|
1037
1037
|
'pds-multiselect__trigger--disabled': this.disabled,
|
|
1038
1038
|
'pds-multiselect__trigger--invalid': this.invalid || !!this.errorMessage,
|
|
1039
1039
|
'pds-multiselect__trigger--has-value': hasSelections,
|
|
1040
|
-
}, id: this.componentId, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-describedby": assignDescription(this.componentId, this.invalid || !!this.errorMessage, this.
|
|
1040
|
+
}, id: this.componentId, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-describedby": assignDescription(this.componentId, this.invalid || !!this.errorMessage, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid || !!this.errorMessage ? 'true' : undefined, onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, h("span", { class: {
|
|
1041
1041
|
'pds-multiselect__trigger-text': true,
|
|
1042
1042
|
'pds-multiselect__trigger-text--placeholder': !hasSelections || (this.selectedDisplay === 'pill' && this.pillPosition === 'below'),
|
|
1043
|
-
} }, this.getTriggerText()), h("pds-icon", { class: "pds-multiselect__icon", icon: enlarge }))), this.renderDropdown()), this.selectedDisplay === 'pill' && this.pillPosition === 'below' && this.renderBelowPills(), h("span", { key: '
|
|
1043
|
+
} }, this.getTriggerText()), h("pds-icon", { class: "pds-multiselect__icon", icon: enlarge }))), this.renderDropdown()), this.selectedDisplay === 'pill' && this.pillPosition === 'below' && this.renderBelowPills(), h("span", { key: '199804f5352818d32542864e3a61f7a9364cc2e3', class: "visually-hidden", "aria-live": "polite", "aria-atomic": "true" }, this.removalAnnouncement), this.helperMessage && !(this.errorMessage && this.errorMessage.length > 0) && (h("p", { key: 'e6855ff0aaf18f59dced2df5d636cadb4d47427b', class: "pds-multiselect__helper", id: messageId(this.componentId, 'helper') }, this.helperMessage)), this.errorMessage && (h("p", { key: '29eae23d8db31b9b9c292d5cd1dc5f641613ed32', class: "pds-multiselect__error", id: messageId(this.componentId, 'error') }, h("pds-icon", { key: 'aad6fd945998957cd28ab6eb97c4d80f0a732ea5', icon: danger, size: "small" }), this.errorMessage)), h("div", { key: '7d0d56a1e097cfc0c7396c1957d16014cb071b1e', style: { display: 'none' } }, h("slot", { key: '6e7fc9dbdab3977248439aa5ea14f13e0f45bbc6' })))));
|
|
1044
1044
|
}
|
|
1045
1045
|
static get is() { return "pds-multiselect"; }
|
|
1046
1046
|
static get encapsulation() { return "shadow"; }
|
|
@@ -59,6 +59,9 @@
|
|
|
59
59
|
color: var(--pine-color-text-label-disabled);
|
|
60
60
|
cursor: not-allowed;
|
|
61
61
|
}
|
|
62
|
+
:host(.has-border):has(input:disabled) label::after {
|
|
63
|
+
cursor: not-allowed;
|
|
64
|
+
}
|
|
62
65
|
:host(.has-border).is-invalid .pds-radio__message--error {
|
|
63
66
|
color: var(--pine-color-text-message-danger);
|
|
64
67
|
}
|
|
@@ -255,6 +258,9 @@ label:has(input:disabled) {
|
|
|
255
258
|
color: var(--pine-color-text-label-disabled);
|
|
256
259
|
cursor: not-allowed;
|
|
257
260
|
}
|
|
261
|
+
:host(.has-image).is-disabled label::after {
|
|
262
|
+
cursor: not-allowed;
|
|
263
|
+
}
|
|
258
264
|
:host(.has-image).is-disabled .pds-radio__message {
|
|
259
265
|
color: var(--pine-color-text-label-disabled);
|
|
260
266
|
}
|
|
@@ -80,11 +80,11 @@ export class PdsRadio {
|
|
|
80
80
|
}
|
|
81
81
|
render() {
|
|
82
82
|
const renderLabelAndMessages = () => [
|
|
83
|
-
h("label", { htmlFor: this.componentId, key: `${this.componentId}-label` }, h("input", { key: '
|
|
83
|
+
h("label", { htmlFor: this.componentId, key: `${this.componentId}-label` }, h("input", { key: 'ca6cb85ace418259f13b6be404e125d4c1c3a778', "aria-describedby": assignDescription(this.componentId, this.invalid, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid ? "true" : undefined, type: "radio", id: this.componentId, name: this.name, value: this.value, checked: this.checked, required: this.required, disabled: this.disabled, onChange: this.handleRadioChange, class: this.hasImage() ? 'visually-hidden' : '' }), h("span", { key: '968c3dcc6b3e18a177db0570a9104b4755827a3e', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)),
|
|
84
84
|
this.helperMessage && (h("div", { key: `${this.componentId}-helper`, class: 'pds-radio__message', id: messageId(this.componentId, 'helper') }, this.helperMessage)),
|
|
85
|
-
this.errorMessage && (h("div", { key: `${this.componentId}-error`, class: `pds-radio__message pds-radio__message--error`, id: messageId(this.componentId, 'error'), "aria-live": "assertive" }, h("pds-icon", { key: '
|
|
85
|
+
this.errorMessage && (h("div", { key: `${this.componentId}-error`, class: `pds-radio__message pds-radio__message--error`, id: messageId(this.componentId, 'error'), "aria-live": "assertive" }, h("pds-icon", { key: '2dec1d43ade25a8ff70301fb661174eff5efadeb', icon: danger, size: "small" }), this.errorMessage))
|
|
86
86
|
];
|
|
87
|
-
return (h(Host, { key: '
|
|
87
|
+
return (h(Host, { key: '75563601db01d7db2a4c4e74364c0bb2d57ac9ae', class: this.classNames() }, this.hasImage() && (h("div", { key: '120ca4dd9d3828cda49c0f7539f429e2aaa89329', class: "pds-radio__image-container", part: "image-container" }, h("slot", { key: 'a03496e1acc3799740aa20342408de97991cad68', name: "image", onSlotchange: () => (this._hasImage = this.hasImageSlot()) }))), this.hasImage() ? (h("div", { class: "pds-radio__content-wrapper" }, renderLabelAndMessages())) : (renderLabelAndMessages())));
|
|
88
88
|
}
|
|
89
89
|
static get is() { return "pds-radio"; }
|
|
90
90
|
static get encapsulation() { return "scoped"; }
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Host, h } from "@stencil/core";
|
|
2
|
-
import { isSpecTest, messageId, exposeTypeProperty } from "../../utils/form";
|
|
2
|
+
import { assignDescription, isSpecTest, messageId, exposeTypeProperty } from "../../utils/form";
|
|
3
3
|
import { danger, enlarge } from "@pine-ds/icons/icons";
|
|
4
4
|
/**
|
|
5
5
|
* @slot action - Content to be displayed in the label area, typically for help icons or links
|
|
@@ -140,6 +140,11 @@ export class PdsSelect {
|
|
|
140
140
|
return null;
|
|
141
141
|
return (h("div", { class: "pds-select__message" }, this.getHelperMessage(), this.getErrorMessage()));
|
|
142
142
|
}
|
|
143
|
+
// The field also renders as invalid whenever an error message is present, via
|
|
144
|
+
// `select:has(~ .pds-select__message .pds-select__error-message)` in the styles.
|
|
145
|
+
isInvalid() {
|
|
146
|
+
return Boolean(this.invalid) || Boolean(this.errorMessage);
|
|
147
|
+
}
|
|
143
148
|
classNames() {
|
|
144
149
|
const classNames = [];
|
|
145
150
|
if (this.invalid) {
|
|
@@ -223,7 +228,7 @@ export class PdsSelect {
|
|
|
223
228
|
}
|
|
224
229
|
render() {
|
|
225
230
|
const hasAction = this.el.querySelector('[slot="action"]') !== null;
|
|
226
|
-
return (h(Host, { key: '
|
|
231
|
+
return (h(Host, { key: 'c74f5e86a09bd3fe6e8048ca103ec9aa66a98fc6', "aria-disabled": this.disabled ? 'true' : null, class: this.classNames(), "has-action": hasAction && !this.hideLabel ? 'true' : null }, h("div", { key: '76de23d6b0d9e32fab48e09a8f6ee3211e196115', class: "pds-select" }, !this.hideLabel && (h("div", { key: '1db87074447cbc819e6b06dd89135d018656a471', class: "pds-select__label-wrapper" }, h("label", { key: 'bc28c3b3361a19ee14a1b79edda736340009d87d', htmlFor: this.componentId }, h("span", { key: 'f0828e0e83c7c0d7cf50e08df4b861dad4df9eb9', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)), hasAction && this.renderAction())), h("select", { key: 'd7d254887c976a95ad1f1da2ea540d6d3f986630', "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-label": this.hideLabel ? this.label : undefined, autocomplete: this.autocomplete || undefined, class: "pds-select__field", disabled: this.disabled, id: this.componentId, multiple: this.multiple, name: this.name, onBlur: this.onBlur, onChange: this.onSelectUpdate, onFocus: this.onFocus, onKeyDown: this.onKeyDown, part: "select", required: this.required, ref: (el) => (this.selectEl = el) }), h("div", { key: '793a84d41bd5e18d64757238704a053b1135a83c', "aria-hidden": "true", class: "hidden", ref: (el) => (this.slotContainer = el) }, h("slot", { key: '27ed9ff31bbf83fcbd2ed8dd2b23b97422b18d25', onSlotchange: this.handleSlotChange })), this.renderMessages(), !this.multiple && h("pds-icon", { key: '43d415eab0fc8a3c02e19848a5622ea43f04256e', "aria-hidden": "true", class: "pds-select__select-icon", icon: enlarge }))));
|
|
227
232
|
}
|
|
228
233
|
static get is() { return "pds-select"; }
|
|
229
234
|
static get encapsulation() { return "shadow"; }
|