@nanoporetech-digital/components 1.14.1 → 1.15.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/CHANGELOG.md +18 -0
- package/dist/cjs/{algolia-data-4d5ee8da.js → algolia-data-a98ccf4f.js} +2 -2
- package/dist/cjs/algolia-data-a98ccf4f.js.map +1 -0
- package/dist/cjs/algoliasearch.umd-5dc661c5.js +12 -0
- package/dist/cjs/algoliasearch.umd-5dc661c5.js.map +1 -0
- package/dist/cjs/{component-store-4dfd3a12.js → component-store-8d99743e.js} +2 -2
- package/dist/cjs/{component-store-4dfd3a12.js.map → component-store-8d99743e.js.map} +1 -1
- package/dist/cjs/{global-befb7a64.js → global-aa92d50f.js} +5 -3
- package/dist/cjs/global-aa92d50f.js.map +1 -0
- package/dist/cjs/{index-197e7a3f.js → index-f12395b8.js} +3 -1
- package/dist/cjs/index-f12395b8.js.map +1 -0
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/nano-accordion.cjs.entry.js +1 -1
- package/dist/cjs/nano-alert.cjs.entry.js +2 -2
- package/dist/cjs/nano-algolia-filter.cjs.entry.js +3 -3
- package/dist/cjs/nano-algolia-filter.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-algolia-input.cjs.entry.js +5 -5
- package/dist/cjs/nano-algolia-input.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-algolia-pagination.cjs.entry.js +2 -2
- package/dist/cjs/nano-algolia-results.cjs.entry.js +2 -2
- package/dist/cjs/nano-algolia.cjs.entry.js +5 -5
- package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-aspect-ratio.cjs.entry.js +1 -1
- package/dist/cjs/nano-checkbox-group.cjs.entry.js +2 -2
- package/dist/cjs/nano-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/nano-components.cjs.js +3 -3
- package/dist/cjs/nano-date-input.cjs.entry.js +43 -15
- package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-date-picker_2.cjs.entry.js +31 -11
- package/dist/cjs/nano-date-picker_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-details.cjs.entry.js +14 -8
- package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-dialog.cjs.entry.js +5 -9
- package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-drawer.cjs.entry.js +1 -1
- package/dist/cjs/nano-file-upload.cjs.entry.js +7 -14
- package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +4 -4
- package/dist/cjs/nano-global-search-results.cjs.entry.js +2 -2
- package/dist/cjs/nano-grid_3.cjs.entry.js +1 -1
- package/dist/cjs/nano-hero.cjs.entry.js +1 -1
- package/dist/cjs/nano-icon-button.cjs.entry.js +2 -2
- package/dist/cjs/nano-icon.cjs.entry.js +1 -1
- package/dist/cjs/nano-input.cjs.entry.js +12 -2
- package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-menu-drawer.cjs.entry.js +1 -1
- package/dist/cjs/nano-menu.cjs.entry.js +2 -2
- package/dist/cjs/nano-nav-item_2.cjs.entry.js +2 -2
- package/dist/cjs/nano-range.cjs.entry.js +2 -2
- package/dist/cjs/nano-rating.cjs.entry.js +1 -1
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js +1 -1
- package/dist/cjs/nano-select-option.cjs.entry.js +1 -1
- package/dist/cjs/nano-slide.cjs.entry.js +1 -1
- package/dist/cjs/nano-slides.cjs.entry.js +2 -2
- package/dist/cjs/nano-spinner.cjs.entry.js +2 -2
- package/dist/cjs/nano-sticker.cjs.entry.js +1 -1
- package/dist/cjs/nano-tab-content.cjs.entry.js +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js +3 -3
- package/dist/cjs/nano-tab.cjs.entry.js +2 -2
- package/dist/cjs/nano-tooltip.cjs.entry.js +1 -1
- package/dist/collection/components/accordion/accordion.js +1 -1
- package/dist/collection/components/alert/alert.css +3 -3
- package/dist/collection/components/alert/alert.js +1 -1
- package/dist/collection/components/algolia/algolia-data.js.map +1 -1
- package/dist/collection/components/algolia/algolia-filter.js +3 -3
- package/dist/collection/components/algolia/algolia-filter.js.map +1 -1
- package/dist/collection/components/algolia/algolia-input.js +7 -7
- package/dist/collection/components/algolia/algolia-input.js.map +1 -1
- package/dist/collection/components/algolia/algolia-results.js +1 -1
- package/dist/collection/components/algolia/algolia.js +7 -7
- package/dist/collection/components/algolia/algolia.js.map +1 -1
- package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js +7 -2
- package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js.map +1 -1
- package/dist/collection/components/checkbox/checkbox-group.css +2 -2
- package/dist/collection/components/checkbox/checkbox-group.js +2 -2
- package/dist/collection/components/checkbox/checkbox.css +2 -2
- package/dist/collection/components/checkbox/checkbox.js +3 -3
- package/dist/collection/components/date-input/date-input.css +0 -4
- package/dist/collection/components/date-input/date-input.js +70 -21
- package/dist/collection/components/date-input/date-input.js.map +1 -1
- package/dist/collection/components/date-picker/date-picker.css +15 -4
- package/dist/collection/components/date-picker/date-picker.js +44 -16
- package/dist/collection/components/date-picker/date-picker.js.map +1 -1
- package/dist/collection/components/details/details.css +3 -3
- package/dist/collection/components/details/details.js +13 -7
- package/dist/collection/components/details/details.js.map +1 -1
- package/dist/collection/components/dialog/dialog.css +2 -3
- package/dist/collection/components/dialog/dialog.js +6 -10
- package/dist/collection/components/dialog/dialog.js.map +1 -1
- package/dist/collection/components/dropdown/dropdown.js +2 -1
- package/dist/collection/components/dropdown/dropdown.js.map +1 -1
- package/dist/collection/components/file-upload/file-upload-interface.js.map +1 -1
- package/dist/collection/components/file-upload/file-upload.css +9 -17
- package/dist/collection/components/file-upload/file-upload.js +17 -20
- package/dist/collection/components/file-upload/file-upload.js.map +1 -1
- package/dist/collection/components/global-nav/global-nav.css +2 -2
- package/dist/collection/components/global-nav/global-nav.js +4 -4
- package/dist/collection/components/global-search-results/global-search-results.css +3 -3
- package/dist/collection/components/grid/grid-item.js +1 -1
- package/dist/collection/components/icon/icon.js +1 -1
- package/dist/collection/components/icon-button/icon-button.css +2 -2
- package/dist/collection/components/input/input.css +5 -6
- package/dist/collection/components/input/input.js +25 -6
- package/dist/collection/components/input/input.js.map +1 -1
- package/dist/collection/components/menu/menu.css +7 -7
- package/dist/collection/components/nav-item/nav-item.js +4 -4
- package/dist/collection/components/range/range.css +4 -4
- package/dist/collection/components/range/range.js +4 -4
- package/dist/collection/components/resize-observe/resize-observe.js +1 -1
- package/dist/collection/components/select/select.css +4 -4
- package/dist/collection/components/select/select.js +5 -5
- package/dist/collection/components/slides/slides.css +2 -2
- package/dist/collection/components/slides/slides.js +7 -7
- package/dist/collection/components/spinner/spinner.css +2 -2
- package/dist/collection/components/tabs/tab-group.css +6 -6
- package/dist/collection/components/tabs/tab-group.js +2 -2
- package/dist/collection/components/tabs/tab.css +2 -2
- package/dist/collection/global/script/global.js +4 -2
- package/dist/collection/global/script/global.js.map +1 -1
- package/dist/collection/utils/testing/index.js +91 -18
- package/dist/collection/utils/testing/index.js.map +1 -1
- package/dist/custom-elements/index.js +131 -74
- package/dist/custom-elements/index.js.map +1 -1
- package/dist/esm/{algolia-data-6db3f5f2.js → algolia-data-b31a9800.js} +2 -2
- package/dist/esm/algolia-data-b31a9800.js.map +1 -0
- package/dist/esm/algoliasearch.umd-7ecbe0e9.js +10 -0
- package/dist/esm/algoliasearch.umd-7ecbe0e9.js.map +1 -0
- package/dist/esm/{component-store-6736ee0f.js → component-store-93172454.js} +2 -2
- package/dist/esm/{component-store-6736ee0f.js.map → component-store-93172454.js.map} +1 -1
- package/dist/esm/{global-c85d24a2.js → global-118ae701.js} +5 -3
- package/dist/esm/global-118ae701.js.map +1 -0
- package/dist/esm/{index-8e9bc704.js → index-912ef959.js} +3 -1
- package/dist/esm/index-912ef959.js.map +1 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/nano-accordion.entry.js +1 -1
- package/dist/esm/nano-alert.entry.js +2 -2
- package/dist/esm/nano-algolia-filter.entry.js +3 -3
- package/dist/esm/nano-algolia-filter.entry.js.map +1 -1
- package/dist/esm/nano-algolia-input.entry.js +5 -5
- package/dist/esm/nano-algolia-input.entry.js.map +1 -1
- package/dist/esm/nano-algolia-pagination.entry.js +2 -2
- package/dist/esm/nano-algolia-results.entry.js +2 -2
- package/dist/esm/nano-algolia.entry.js +5 -5
- package/dist/esm/nano-algolia.entry.js.map +1 -1
- package/dist/esm/nano-aspect-ratio.entry.js +1 -1
- package/dist/esm/nano-checkbox-group.entry.js +2 -2
- package/dist/esm/nano-checkbox.entry.js +2 -2
- package/dist/esm/nano-components.js +3 -3
- package/dist/esm/nano-date-input.entry.js +43 -15
- package/dist/esm/nano-date-input.entry.js.map +1 -1
- package/dist/esm/nano-date-picker_2.entry.js +31 -11
- package/dist/esm/nano-date-picker_2.entry.js.map +1 -1
- package/dist/esm/nano-details.entry.js +14 -8
- package/dist/esm/nano-details.entry.js.map +1 -1
- package/dist/esm/nano-dialog.entry.js +5 -9
- package/dist/esm/nano-dialog.entry.js.map +1 -1
- package/dist/esm/nano-drawer.entry.js +1 -1
- package/dist/esm/nano-file-upload.entry.js +7 -14
- package/dist/esm/nano-file-upload.entry.js.map +1 -1
- package/dist/esm/nano-global-nav.entry.js +4 -4
- package/dist/esm/nano-global-search-results.entry.js +2 -2
- package/dist/esm/nano-grid_3.entry.js +1 -1
- package/dist/esm/nano-hero.entry.js +1 -1
- package/dist/esm/nano-icon-button.entry.js +2 -2
- package/dist/esm/nano-icon.entry.js +1 -1
- package/dist/esm/nano-input.entry.js +12 -2
- package/dist/esm/nano-input.entry.js.map +1 -1
- package/dist/esm/nano-menu-drawer.entry.js +1 -1
- package/dist/esm/nano-menu.entry.js +2 -2
- package/dist/esm/nano-nav-item_2.entry.js +2 -2
- package/dist/esm/nano-range.entry.js +2 -2
- package/dist/esm/nano-rating.entry.js +1 -1
- package/dist/esm/nano-resize-observe_2.entry.js +1 -1
- package/dist/esm/nano-select-option.entry.js +1 -1
- package/dist/esm/nano-slide.entry.js +1 -1
- package/dist/esm/nano-slides.entry.js +2 -2
- package/dist/esm/nano-spinner.entry.js +2 -2
- package/dist/esm/nano-sticker.entry.js +1 -1
- package/dist/esm/nano-tab-content.entry.js +1 -1
- package/dist/esm/nano-tab-group.entry.js +3 -3
- package/dist/esm/nano-tab.entry.js +2 -2
- package/dist/esm/nano-tooltip.entry.js +1 -1
- package/dist/esm-es5/{algolia-data-6db3f5f2.js → algolia-data-b31a9800.js} +2 -2
- package/dist/esm-es5/algolia-data-b31a9800.js.map +1 -0
- package/dist/esm-es5/algoliasearch.umd-7ecbe0e9.js +4 -0
- package/dist/esm-es5/algoliasearch.umd-7ecbe0e9.js.map +1 -0
- package/dist/esm-es5/{component-store-6736ee0f.js → component-store-93172454.js} +2 -2
- package/dist/esm-es5/{component-store-6736ee0f.js.map → component-store-93172454.js.map} +0 -0
- package/dist/esm-es5/{global-c85d24a2.js → global-118ae701.js} +2 -2
- package/dist/esm-es5/global-118ae701.js.map +1 -0
- package/dist/esm-es5/index-912ef959.js +2 -0
- package/dist/esm-es5/index-912ef959.js.map +1 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/loader.js.map +1 -1
- package/dist/esm-es5/nano-accordion.entry.js +1 -1
- package/dist/esm-es5/nano-alert.entry.js +1 -1
- package/dist/esm-es5/nano-algolia-filter.entry.js +1 -1
- package/dist/esm-es5/nano-algolia-filter.entry.js.map +1 -1
- package/dist/esm-es5/nano-algolia-input.entry.js +1 -1
- package/dist/esm-es5/nano-algolia-input.entry.js.map +1 -1
- package/dist/esm-es5/nano-algolia-pagination.entry.js +1 -1
- package/dist/esm-es5/nano-algolia-results.entry.js +1 -1
- package/dist/esm-es5/nano-algolia.entry.js +1 -1
- package/dist/esm-es5/nano-algolia.entry.js.map +1 -1
- package/dist/esm-es5/nano-aspect-ratio.entry.js +1 -1
- package/dist/esm-es5/nano-checkbox-group.entry.js +1 -1
- package/dist/esm-es5/nano-checkbox.entry.js +1 -1
- package/dist/esm-es5/nano-components.js +1 -1
- package/dist/esm-es5/nano-components.js.map +1 -1
- package/dist/esm-es5/nano-date-input.entry.js +1 -1
- package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
- package/dist/esm-es5/nano-date-picker_2.entry.js +1 -1
- package/dist/esm-es5/nano-date-picker_2.entry.js.map +1 -1
- package/dist/esm-es5/nano-details.entry.js +1 -1
- package/dist/esm-es5/nano-details.entry.js.map +1 -1
- package/dist/esm-es5/nano-dialog.entry.js +1 -1
- package/dist/esm-es5/nano-dialog.entry.js.map +1 -1
- package/dist/esm-es5/nano-drawer.entry.js +1 -1
- package/dist/esm-es5/nano-file-upload.entry.js +1 -1
- package/dist/esm-es5/nano-file-upload.entry.js.map +1 -1
- package/dist/esm-es5/nano-global-nav.entry.js +1 -1
- package/dist/esm-es5/nano-global-search-results.entry.js +1 -1
- package/dist/esm-es5/nano-grid_3.entry.js +1 -1
- package/dist/esm-es5/nano-hero.entry.js +1 -1
- package/dist/esm-es5/nano-icon-button.entry.js +1 -1
- package/dist/esm-es5/nano-icon.entry.js +1 -1
- package/dist/esm-es5/nano-input.entry.js +1 -1
- package/dist/esm-es5/nano-input.entry.js.map +1 -1
- package/dist/esm-es5/nano-menu-drawer.entry.js +1 -1
- package/dist/esm-es5/nano-menu.entry.js +1 -1
- package/dist/esm-es5/nano-nav-item_2.entry.js +1 -1
- package/dist/esm-es5/nano-range.entry.js +1 -1
- package/dist/esm-es5/nano-rating.entry.js +1 -1
- package/dist/esm-es5/nano-resize-observe_2.entry.js +1 -1
- package/dist/esm-es5/nano-select-option.entry.js +1 -1
- package/dist/esm-es5/nano-slide.entry.js +1 -1
- package/dist/esm-es5/nano-slides.entry.js +2 -2
- package/dist/esm-es5/nano-spinner.entry.js +1 -1
- package/dist/esm-es5/nano-sticker.entry.js +1 -1
- package/dist/esm-es5/nano-tab-content.entry.js +1 -1
- package/dist/esm-es5/nano-tab-group.entry.js +1 -1
- package/dist/esm-es5/nano-tab.entry.js +1 -1
- package/dist/esm-es5/nano-tooltip.entry.js +1 -1
- package/dist/nano-components/nano-components.esm.js +1 -1
- package/dist/nano-components/nano-components.esm.js.map +1 -1
- package/dist/nano-components/nano-components.js +1 -1
- package/dist/nano-components/{p-dbd71a33.system.entry.js → p-007c6041.system.entry.js} +2 -2
- package/dist/nano-components/{p-dbd71a33.system.entry.js.map → p-007c6041.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-83bf885b.entry.js → p-02177814.entry.js} +2 -2
- package/dist/nano-components/{p-83bf885b.entry.js.map → p-02177814.entry.js.map} +0 -0
- package/dist/nano-components/{p-df2764c8.system.entry.js → p-046af455.system.entry.js} +2 -2
- package/dist/nano-components/{p-df2764c8.system.entry.js.map → p-046af455.system.entry.js.map} +0 -0
- package/dist/nano-components/p-05c062ae.js +4 -0
- package/dist/nano-components/p-05c062ae.js.map +1 -0
- package/dist/nano-components/{p-4d17169a.entry.js → p-104a9d64.entry.js} +2 -2
- package/dist/nano-components/p-104a9d64.entry.js.map +1 -0
- package/dist/nano-components/{p-55b80a92.system.entry.js → p-10f24f67.system.entry.js} +2 -2
- package/dist/nano-components/{p-55b80a92.system.entry.js.map → p-10f24f67.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-6403dd02.system.entry.js → p-1c7614c4.system.entry.js} +2 -2
- package/dist/nano-components/p-1c7614c4.system.entry.js.map +1 -0
- package/dist/nano-components/{p-007c6ccc.system.entry.js → p-1d16e897.system.entry.js} +2 -2
- package/dist/nano-components/{p-007c6ccc.system.entry.js.map → p-1d16e897.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-daf1462f.system.entry.js → p-21a6f295.system.entry.js} +2 -2
- package/dist/nano-components/{p-daf1462f.system.entry.js.map → p-21a6f295.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-acbc08ea.system.entry.js → p-273b19b0.system.entry.js} +2 -2
- package/dist/nano-components/{p-acbc08ea.system.entry.js.map → p-273b19b0.system.entry.js.map} +0 -0
- package/dist/nano-components/p-28123e6e.entry.js +2 -0
- package/dist/nano-components/p-28123e6e.entry.js.map +1 -0
- package/dist/nano-components/{p-f1cd2d9b.entry.js → p-2ae39fa1.entry.js} +2 -2
- package/dist/nano-components/{p-f1cd2d9b.entry.js.map → p-2ae39fa1.entry.js.map} +0 -0
- package/dist/nano-components/{p-9393bfbb.system.entry.js → p-2edaf0eb.system.entry.js} +3 -3
- package/dist/nano-components/{p-9393bfbb.system.entry.js.map → p-2edaf0eb.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-e7e898f5.system.entry.js → p-2f876f68.system.entry.js} +2 -2
- package/dist/nano-components/{p-e7e898f5.system.entry.js.map → p-2f876f68.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-19962dda.system.entry.js → p-305ba54b.system.entry.js} +2 -2
- package/dist/nano-components/{p-19962dda.system.entry.js.map → p-305ba54b.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-5f9e92b0.system.entry.js → p-30a22cd0.system.entry.js} +2 -2
- package/dist/nano-components/{p-5f9e92b0.system.entry.js.map → p-30a22cd0.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-cc8fb176.system.entry.js → p-31c52d0a.system.entry.js} +2 -2
- package/dist/nano-components/{p-cc8fb176.system.entry.js.map → p-31c52d0a.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-c6f7ce64.system.entry.js → p-325f32b3.system.entry.js} +2 -2
- package/dist/nano-components/p-325f32b3.system.entry.js.map +1 -0
- package/dist/nano-components/{p-3f9a70f8.entry.js → p-3b2ea5fd.entry.js} +2 -2
- package/dist/nano-components/{p-3f9a70f8.entry.js.map → p-3b2ea5fd.entry.js.map} +0 -0
- package/dist/nano-components/{p-0283a2ec.js → p-4370f8ae.js} +2 -2
- package/dist/nano-components/p-4370f8ae.js.map +1 -0
- package/dist/nano-components/{p-8097b205.system.js → p-4647a31f.system.js} +2 -2
- package/dist/nano-components/{p-8097b205.system.js.map → p-4647a31f.system.js.map} +0 -0
- package/dist/nano-components/{p-447ed63d.system.entry.js → p-491096f0.system.entry.js} +2 -2
- package/dist/nano-components/p-491096f0.system.entry.js.map +1 -0
- package/dist/nano-components/{p-1de83f90.system.entry.js → p-4e21bfe1.system.entry.js} +2 -2
- package/dist/nano-components/{p-1de83f90.system.entry.js.map → p-4e21bfe1.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-6855167a.entry.js → p-4fa0b560.entry.js} +2 -2
- package/dist/nano-components/{p-6855167a.entry.js.map → p-4fa0b560.entry.js.map} +0 -0
- package/dist/nano-components/{p-7db31794.system.entry.js → p-4fbc3c8b.system.entry.js} +2 -2
- package/dist/nano-components/{p-7db31794.system.entry.js.map → p-4fbc3c8b.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-5198e4c6.system.js → p-508484f8.system.js} +2 -2
- package/dist/nano-components/p-508484f8.system.js.map +1 -0
- package/dist/nano-components/p-5672ebbb.system.entry.js +2 -0
- package/dist/nano-components/p-5672ebbb.system.entry.js.map +1 -0
- package/dist/nano-components/{p-7a8ea050.entry.js → p-574143b5.entry.js} +2 -2
- package/dist/nano-components/{p-7a8ea050.entry.js.map → p-574143b5.entry.js.map} +0 -0
- package/dist/nano-components/{p-ff530ea6.system.entry.js → p-57434dc5.system.entry.js} +2 -2
- package/dist/nano-components/{p-ff530ea6.system.entry.js.map → p-57434dc5.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-44cf7aeb.entry.js → p-574f1393.entry.js} +2 -2
- package/dist/nano-components/p-574f1393.entry.js.map +1 -0
- package/dist/nano-components/{p-24ad4b09.entry.js → p-580eac05.entry.js} +2 -2
- package/dist/nano-components/{p-24ad4b09.entry.js.map → p-580eac05.entry.js.map} +0 -0
- package/dist/nano-components/{p-fc9828c7.entry.js → p-59aba360.entry.js} +2 -2
- package/dist/nano-components/{p-fc9828c7.entry.js.map → p-59aba360.entry.js.map} +0 -0
- package/dist/nano-components/{p-c8945124.system.js → p-698a8ab3.system.js} +2 -2
- package/dist/nano-components/p-698a8ab3.system.js.map +1 -0
- package/dist/nano-components/{p-c05d2d62.entry.js → p-6a3eee01.entry.js} +2 -2
- package/dist/nano-components/{p-c05d2d62.entry.js.map → p-6a3eee01.entry.js.map} +0 -0
- package/dist/nano-components/{p-ddaa8946.entry.js → p-6aab52a0.entry.js} +2 -2
- package/dist/nano-components/p-6aab52a0.entry.js.map +1 -0
- package/dist/nano-components/{p-4b9a1f76.entry.js → p-6dc59ae8.entry.js} +2 -2
- package/dist/nano-components/{p-4b9a1f76.entry.js.map → p-6dc59ae8.entry.js.map} +0 -0
- package/dist/nano-components/{p-057177d7.entry.js → p-6eba639a.entry.js} +3 -3
- package/dist/nano-components/{p-057177d7.entry.js.map → p-6eba639a.entry.js.map} +0 -0
- package/dist/nano-components/{p-185dedd1.system.entry.js → p-73d969d0.system.entry.js} +2 -2
- package/dist/nano-components/{p-185dedd1.system.entry.js.map → p-73d969d0.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-4a319e09.system.entry.js → p-7dc79f13.system.entry.js} +2 -2
- package/dist/nano-components/{p-4a319e09.system.entry.js.map → p-7dc79f13.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-fd6ff03f.entry.js → p-7df31b1c.entry.js} +2 -2
- package/dist/nano-components/{p-fd6ff03f.entry.js.map → p-7df31b1c.entry.js.map} +0 -0
- package/dist/nano-components/{p-172053d0.system.entry.js → p-7e208086.system.entry.js} +2 -2
- package/dist/nano-components/{p-172053d0.system.entry.js.map → p-7e208086.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-173755c4.system.entry.js → p-7e4129b4.system.entry.js} +2 -2
- package/dist/nano-components/{p-173755c4.system.entry.js.map → p-7e4129b4.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-f3bb5f81.entry.js → p-7e68796f.entry.js} +2 -2
- package/dist/nano-components/{p-f3bb5f81.entry.js.map → p-7e68796f.entry.js.map} +0 -0
- package/dist/nano-components/{p-a17e6ab1.entry.js → p-81d7fd45.entry.js} +2 -2
- package/dist/nano-components/{p-a17e6ab1.entry.js.map → p-81d7fd45.entry.js.map} +0 -0
- package/dist/nano-components/{p-981f997c.entry.js → p-82571543.entry.js} +2 -2
- package/dist/nano-components/p-82571543.entry.js.map +1 -0
- package/dist/nano-components/{p-016c6482.system.entry.js → p-844a1134.system.entry.js} +2 -2
- package/dist/nano-components/{p-016c6482.system.entry.js.map → p-844a1134.system.entry.js.map} +0 -0
- package/dist/nano-components/p-8535a942.entry.js +2 -0
- package/dist/nano-components/{p-6d718c9a.entry.js.map → p-8535a942.entry.js.map} +1 -1
- package/dist/nano-components/{p-e422c66f.entry.js → p-8c1d85ae.entry.js} +2 -2
- package/dist/nano-components/{p-e422c66f.entry.js.map → p-8c1d85ae.entry.js.map} +0 -0
- package/dist/nano-components/{p-46f84983.system.entry.js → p-8ed6acea.system.entry.js} +2 -2
- package/dist/nano-components/{p-46f84983.system.entry.js.map → p-8ed6acea.system.entry.js.map} +0 -0
- package/dist/nano-components/p-9164e5e2.system.entry.js +2 -0
- package/dist/nano-components/p-9164e5e2.system.entry.js.map +1 -0
- package/dist/nano-components/{p-896b7462.system.entry.js → p-9371d81b.system.entry.js} +2 -2
- package/dist/nano-components/{p-896b7462.system.entry.js.map → p-9371d81b.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-b49d1e17.system.entry.js → p-95a4c3f2.system.entry.js} +2 -2
- package/dist/nano-components/{p-b49d1e17.system.entry.js.map → p-95a4c3f2.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-06cc7501.entry.js → p-96ba0d00.entry.js} +2 -2
- package/dist/nano-components/{p-06cc7501.entry.js.map → p-96ba0d00.entry.js.map} +0 -0
- package/dist/nano-components/p-99637978.entry.js +2 -0
- package/dist/nano-components/p-99637978.entry.js.map +1 -0
- package/dist/nano-components/{p-56a8af2c.entry.js → p-9ccd832b.entry.js} +2 -2
- package/dist/nano-components/{p-56a8af2c.entry.js.map → p-9ccd832b.entry.js.map} +0 -0
- package/dist/nano-components/{p-2116ecb5.js → p-a1680208.js} +2 -2
- package/dist/nano-components/{p-2116ecb5.js.map → p-a1680208.js.map} +0 -0
- package/dist/nano-components/{p-b4a53bea.entry.js → p-a53a193c.entry.js} +2 -2
- package/dist/nano-components/{p-b4a53bea.entry.js.map → p-a53a193c.entry.js.map} +0 -0
- package/dist/nano-components/{p-b74ba77b.system.entry.js → p-a7ac7964.system.entry.js} +2 -2
- package/dist/nano-components/{p-b74ba77b.system.entry.js.map → p-a7ac7964.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-30c68e8e.system.entry.js → p-aadd8c31.system.entry.js} +2 -2
- package/dist/nano-components/{p-30c68e8e.system.entry.js.map → p-aadd8c31.system.entry.js.map} +0 -0
- package/dist/nano-components/p-ab666582.entry.js +2 -0
- package/dist/nano-components/p-ab666582.entry.js.map +1 -0
- package/dist/nano-components/p-acd5d0f0.system.entry.js +2 -0
- package/dist/nano-components/p-acd5d0f0.system.entry.js.map +1 -0
- package/dist/nano-components/p-af9f6453.system.js +2 -0
- package/dist/nano-components/p-af9f6453.system.js.map +1 -0
- package/dist/nano-components/p-b1d3ab54.system.entry.js +2 -0
- package/dist/nano-components/p-b1d3ab54.system.entry.js.map +1 -0
- package/dist/nano-components/{p-bd04677f.entry.js → p-b3131821.entry.js} +2 -2
- package/dist/nano-components/{p-bd04677f.entry.js.map → p-b3131821.entry.js.map} +0 -0
- package/dist/nano-components/{p-ef46375f.entry.js → p-b7a58722.entry.js} +2 -2
- package/dist/nano-components/{p-ef46375f.entry.js.map → p-b7a58722.entry.js.map} +0 -0
- package/dist/nano-components/p-bb0619e6.js +2 -0
- package/dist/nano-components/p-bb0619e6.js.map +1 -0
- package/dist/nano-components/{p-081356e2.entry.js → p-c3f861c5.entry.js} +2 -2
- package/dist/nano-components/{p-081356e2.entry.js.map → p-c3f861c5.entry.js.map} +0 -0
- package/dist/nano-components/{p-ab384425.system.entry.js → p-c655e010.system.entry.js} +2 -2
- package/dist/nano-components/{p-ab384425.system.entry.js.map → p-c655e010.system.entry.js.map} +0 -0
- package/dist/nano-components/p-c72b22be.entry.js +2 -0
- package/dist/nano-components/p-c72b22be.entry.js.map +1 -0
- package/dist/nano-components/{p-d7ddc7e3.entry.js → p-d250987a.entry.js} +2 -2
- package/dist/nano-components/{p-d7ddc7e3.entry.js.map → p-d250987a.entry.js.map} +0 -0
- package/dist/nano-components/{p-b1badcb1.system.entry.js → p-d393d10a.system.entry.js} +2 -2
- package/dist/nano-components/{p-b1badcb1.system.entry.js.map → p-d393d10a.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-868872fa.entry.js → p-db271541.entry.js} +2 -2
- package/dist/nano-components/{p-868872fa.entry.js.map → p-db271541.entry.js.map} +0 -0
- package/dist/nano-components/p-dccd86ec.system.js +4 -0
- package/dist/nano-components/p-dccd86ec.system.js.map +1 -0
- package/dist/nano-components/p-e0cc37fb.entry.js +2 -0
- package/dist/nano-components/{p-b19e2af5.entry.js.map → p-e0cc37fb.entry.js.map} +1 -1
- package/dist/nano-components/{p-db4ba5d8.system.entry.js → p-e28536b4.system.entry.js} +2 -2
- package/dist/nano-components/{p-db4ba5d8.system.entry.js.map → p-e28536b4.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-b2804245.entry.js → p-ebf34764.entry.js} +2 -2
- package/dist/nano-components/{p-b2804245.entry.js.map → p-ebf34764.entry.js.map} +0 -0
- package/dist/nano-components/p-edddeaae.system.js +2 -0
- package/dist/nano-components/{p-f2d24fc6.system.js.map → p-edddeaae.system.js.map} +1 -1
- package/dist/nano-components/{p-d7a2499b.entry.js → p-ef5d9308.entry.js} +2 -2
- package/dist/nano-components/{p-d7a2499b.entry.js.map → p-ef5d9308.entry.js.map} +0 -0
- package/dist/nano-components/p-f234e064.system.entry.js +2 -0
- package/dist/nano-components/p-f234e064.system.entry.js.map +1 -0
- package/dist/nano-components/{p-6dae7bdd.system.entry.js → p-f27c9429.system.entry.js} +2 -2
- package/dist/nano-components/{p-6dae7bdd.system.entry.js.map → p-f27c9429.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-3c25067f.entry.js → p-f3688bce.entry.js} +2 -2
- package/dist/nano-components/{p-3c25067f.entry.js.map → p-f3688bce.entry.js.map} +0 -0
- package/dist/nano-components/{p-66a5132f.system.entry.js → p-f86db7c0.system.entry.js} +2 -2
- package/dist/nano-components/{p-66a5132f.system.entry.js.map → p-f86db7c0.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-7e259efb.system.entry.js → p-fa86645d.system.entry.js} +2 -2
- package/dist/nano-components/p-fa86645d.system.entry.js.map +1 -0
- package/dist/nano-components/{p-b5ff5764.entry.js → p-fdfa03d7.entry.js} +2 -2
- package/dist/nano-components/{p-b5ff5764.entry.js.map → p-fdfa03d7.entry.js.map} +0 -0
- package/dist/nano-components/p-ff2ff5b0.js +2 -0
- package/dist/nano-components/p-ff2ff5b0.js.map +1 -0
- package/dist/nano-components/p-ff5890b4.entry.js +2 -0
- package/dist/nano-components/p-ff5890b4.entry.js.map +1 -0
- package/dist/nano-components/{p-dbe19aba.entry.js → p-ffab923c.entry.js} +2 -2
- package/dist/nano-components/{p-dbe19aba.entry.js.map → p-ffab923c.entry.js.map} +0 -0
- package/dist/themes/nanopore.css +1 -1
- package/dist/types/components/date-input/date-input.d.ts +9 -0
- package/dist/types/components/date-picker/date-picker.d.ts +9 -4
- package/dist/types/components/details/details.d.ts +1 -0
- package/dist/types/components/file-upload/file-upload-interface.d.ts +4 -3
- package/dist/types/components/file-upload/file-upload.d.ts +2 -12
- package/dist/types/components/input/input.d.ts +1 -0
- package/dist/types/components.d.ts +16 -7
- package/dist/types/utils/testing/index.d.ts +4 -1
- package/docs-json.json +60 -31
- package/docs-vscode.json +4 -0
- package/package.json +8 -7
- package/dist/cjs/algolia-data-4d5ee8da.js.map +0 -1
- package/dist/cjs/algoliasearch.umd-51f0001d.js +0 -12
- package/dist/cjs/algoliasearch.umd-51f0001d.js.map +0 -1
- package/dist/cjs/global-befb7a64.js.map +0 -1
- package/dist/cjs/index-197e7a3f.js.map +0 -1
- package/dist/esm/algolia-data-6db3f5f2.js.map +0 -1
- package/dist/esm/algoliasearch.umd-2c129faa.js +0 -10
- package/dist/esm/algoliasearch.umd-2c129faa.js.map +0 -1
- package/dist/esm/global-c85d24a2.js.map +0 -1
- package/dist/esm/index-8e9bc704.js.map +0 -1
- package/dist/esm-es5/algolia-data-6db3f5f2.js.map +0 -1
- package/dist/esm-es5/algoliasearch.umd-2c129faa.js +0 -4
- package/dist/esm-es5/algoliasearch.umd-2c129faa.js.map +0 -1
- package/dist/esm-es5/global-c85d24a2.js.map +0 -1
- package/dist/esm-es5/index-8e9bc704.js +0 -2
- package/dist/esm-es5/index-8e9bc704.js.map +0 -1
- package/dist/nano-components/p-01e5c484.system.entry.js +0 -2
- package/dist/nano-components/p-01e5c484.system.entry.js.map +0 -1
- package/dist/nano-components/p-0283a2ec.js.map +0 -1
- package/dist/nano-components/p-03e4f363.system.js +0 -2
- package/dist/nano-components/p-03e4f363.system.js.map +0 -1
- package/dist/nano-components/p-19aecfb6.js +0 -2
- package/dist/nano-components/p-19aecfb6.js.map +0 -1
- package/dist/nano-components/p-23da4de5.js +0 -4
- package/dist/nano-components/p-23da4de5.js.map +0 -1
- package/dist/nano-components/p-2e2b4393.system.entry.js +0 -2
- package/dist/nano-components/p-2e2b4393.system.entry.js.map +0 -1
- package/dist/nano-components/p-32c68c7c.entry.js +0 -2
- package/dist/nano-components/p-32c68c7c.entry.js.map +0 -1
- package/dist/nano-components/p-38ed336b.entry.js +0 -2
- package/dist/nano-components/p-38ed336b.entry.js.map +0 -1
- package/dist/nano-components/p-447ed63d.system.entry.js.map +0 -1
- package/dist/nano-components/p-44cf7aeb.entry.js.map +0 -1
- package/dist/nano-components/p-4573be34.entry.js +0 -2
- package/dist/nano-components/p-4573be34.entry.js.map +0 -1
- package/dist/nano-components/p-4d17169a.entry.js.map +0 -1
- package/dist/nano-components/p-5198e4c6.system.js.map +0 -1
- package/dist/nano-components/p-6403dd02.system.entry.js.map +0 -1
- package/dist/nano-components/p-68eb3c21.entry.js +0 -2
- package/dist/nano-components/p-68eb3c21.entry.js.map +0 -1
- package/dist/nano-components/p-6d718c9a.entry.js +0 -2
- package/dist/nano-components/p-6edd2945.system.entry.js +0 -2
- package/dist/nano-components/p-6edd2945.system.entry.js.map +0 -1
- package/dist/nano-components/p-7e259efb.system.entry.js.map +0 -1
- package/dist/nano-components/p-981f997c.entry.js.map +0 -1
- package/dist/nano-components/p-b19e2af5.entry.js +0 -2
- package/dist/nano-components/p-c6f7ce64.system.entry.js.map +0 -1
- package/dist/nano-components/p-c8945124.system.js.map +0 -1
- package/dist/nano-components/p-cb750e49.system.js +0 -4
- package/dist/nano-components/p-cb750e49.system.js.map +0 -1
- package/dist/nano-components/p-ddaa8946.entry.js.map +0 -1
- package/dist/nano-components/p-eb090a2c.system.entry.js +0 -2
- package/dist/nano-components/p-eb090a2c.system.entry.js.map +0 -1
- package/dist/nano-components/p-f2d24fc6.system.js +0 -2
- package/dist/nano-components/p-f31f23ad.entry.js +0 -2
- package/dist/nano-components/p-f31f23ad.entry.js.map +0 -1
- package/dist/nano-components/p-fc189b6d.js +0 -2
- package/dist/nano-components/p-fc189b6d.js.map +0 -1
- package/dist/nano-components/p-fd4630d0.system.entry.js +0 -2
- package/dist/nano-components/p-fd4630d0.system.entry.js.map +0 -1
@@ -9,7 +9,7 @@
|
|
9
9
|
}
|
10
10
|
/**
|
11
11
|
* @prop --indicator-transition: Only relevant to placement 'start'. defaults to var(--nano-transition-fast, 0.3s);
|
12
|
-
* @prop --indicator-color: defaults to #90c6e7 on placement 'top' and #
|
12
|
+
* @prop --indicator-color: defaults to #90c6e7 on placement 'top' and #007495 on placement 'start';
|
13
13
|
* @prop --indicator-track-color: Only relevant to placement 'start'. defaults to #e4e6e8;
|
14
14
|
* @prop --indicator-size: defaults to 5px on placement 'top' and 2px on placement 'start';
|
15
15
|
|
@@ -28,7 +28,7 @@
|
|
28
28
|
* @prop --tabs-padding-bottom: defaults to 0;
|
29
29
|
* @prop --tabs-bg-rgb: defaults to var(--bg-color);
|
30
30
|
* @prop --tab-border-radius: defaults to var(--border-radius);
|
31
|
-
* @prop --tab-text-color: defaults to #
|
31
|
+
* @prop --tab-text-color: defaults to #007495 on placement 'top' and #455556 on placement 'start';
|
32
32
|
*/
|
33
33
|
:host {
|
34
34
|
--indicator-transition: var(--nano-transition-fast, 0.3s);
|
@@ -47,7 +47,7 @@
|
|
47
47
|
--tabs-padding-bottom: 0;
|
48
48
|
--tabs-bg-rgb: var(--background-rgb);
|
49
49
|
--tab-border-radius: var(--border-radius);
|
50
|
-
--tab-text-color: #
|
50
|
+
--tab-text-color: #007495;
|
51
51
|
--shadow-opacity: 0.1;
|
52
52
|
display: block;
|
53
53
|
position: relative;
|
@@ -81,16 +81,16 @@
|
|
81
81
|
--tabs-padding-top: 0;
|
82
82
|
--tabs-padding-bottom: 0;
|
83
83
|
--tab-text-color: #455556;
|
84
|
-
--indicator-color: #
|
84
|
+
--indicator-color: #007495;
|
85
85
|
--indicator-size: 2px;
|
86
86
|
}
|
87
87
|
|
88
88
|
:host(.nano-color) {
|
89
|
-
--indicator-color: var(--nano-color-tint, var(--nano-color-primary-tint, #
|
89
|
+
--indicator-color: var(--nano-color-tint, var(--nano-color-primary-tint, #2689a5));
|
90
90
|
--tab-text-color: rgba(var(--nano-color-base-rgb), 0.7);
|
91
91
|
}
|
92
92
|
:host(.nano-color) ::slotted(nano-tab) {
|
93
|
-
--active-text-color: var(--nano-color-shade, var(--nano-color-primary-shade, #
|
93
|
+
--active-text-color: var(--nano-color-shade, var(--nano-color-primary-shade, #00637f));
|
94
94
|
}
|
95
95
|
|
96
96
|
.nano-tab-group {
|
@@ -440,7 +440,7 @@ export class TabGroup {
|
|
440
440
|
"references": {
|
441
441
|
"Color": {
|
442
442
|
"location": "import",
|
443
|
-
"path": "/builds/
|
443
|
+
"path": "/builds/Xi7NpFYo/0/Digital/nano-components/packages/components/src/interface.d.ts"
|
444
444
|
}
|
445
445
|
}
|
446
446
|
},
|
@@ -483,7 +483,7 @@ export class TabGroup {
|
|
483
483
|
"references": {
|
484
484
|
"StorageMethods": {
|
485
485
|
"location": "import",
|
486
|
-
"path": "/builds/
|
486
|
+
"path": "/builds/Xi7NpFYo/0/Digital/nano-components/packages/components/src/utils/store/component-store.ts"
|
487
487
|
}
|
488
488
|
}
|
489
489
|
},
|
@@ -16,7 +16,7 @@
|
|
16
16
|
* @prop --active-bg-rgb: Defaults to var(--bg-rgb);
|
17
17
|
* @prop --disabled-bg-rgb: Defaults to var(--bg-rgb);
|
18
18
|
|
19
|
-
* @prop --text-color: Defaults to #
|
19
|
+
* @prop --text-color: Defaults to #007495;
|
20
20
|
* @prop --disabled-text-color: Defaults to #455556;
|
21
21
|
* @prop --active-text-color: Defaults to #0c5a71;
|
22
22
|
|
@@ -32,7 +32,7 @@
|
|
32
32
|
--bg-rgb: var(--nano-layer-bg-rgb, 255, 255, 255);
|
33
33
|
--active-bg-rgb: var(--bg-rgb);
|
34
34
|
--disabled-bg-rgb: var(--bg-rgb);
|
35
|
-
--text-color: #
|
35
|
+
--text-color: #007495;
|
36
36
|
--disabled-text-color: #455556;
|
37
37
|
--active-text-color: #0c5a71;
|
38
38
|
--h-font-size: 0.93em;
|
@@ -29,9 +29,11 @@ if (Build.isBrowser) {
|
|
29
29
|
return true;
|
30
30
|
};
|
31
31
|
if (!docIsReady()) {
|
32
|
-
|
33
|
-
if (docIsReady())
|
32
|
+
let mutationO = new MutationObserver((_) => {
|
33
|
+
if (docIsReady()) {
|
34
34
|
mutationO.disconnect();
|
35
|
+
mutationO = null;
|
36
|
+
}
|
35
37
|
});
|
36
38
|
mutationO.observe(document.documentElement, {
|
37
39
|
childList: false,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/global/script/global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,gBAAgB;AAEhB,OAAO,wBAAwB,CAAC;AAEhC,wBAAwB;AAExB,IACE,CAAC,CAAC,sBAAsB,IAAI,MAAM,CAAC;EACnC,CAAC,CAAC,2BAA2B,IAAI,MAAM,CAAC;EACxC,CAAC,CAAC,mBAAmB,IAAI,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,EACpE;EACA,MAAM;EACJ,yDAAyD,CAAC,uBAAuB,CAClF,CAAC;CACH;AAED,mBAAmB;AAEnB,IAAI,CAAC,CAAC,gBAAgB,IAAI,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;EACzD,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;IACf,MAAM;IACJ,mDAAmD,CAAC,0BAA0B,CAC/E,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;MACX,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC;IAC3D,CAAC,CAAC,CAAC;EACL,CAAC,EAAE,CAAC,CAAC,CAAC;CACP;;EAAM,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC;AAEhE,wDAAwD;AAExD,IAAI,KAAK,CAAC,SAAS,EAAE;EACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC;EACxC,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;MAAE,OAAO,KAAK,CAAC;IACzD,QAAQ,CAAC,eAAe,CAAC,aAAa,CACpC,IAAI,WAAW,CAAC,qBAAqB,CAAC,CACvC,CAAC;IACF,OAAO,IAAI,CAAC;EACd,CAAC,CAAC;EAEF,IAAI,CAAC,UAAU,EAAE,EAAE;IACjB,
|
1
|
+
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/global/script/global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,gBAAgB;AAEhB,OAAO,wBAAwB,CAAC;AAEhC,wBAAwB;AAExB,IACE,CAAC,CAAC,sBAAsB,IAAI,MAAM,CAAC;EACnC,CAAC,CAAC,2BAA2B,IAAI,MAAM,CAAC;EACxC,CAAC,CAAC,mBAAmB,IAAI,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,EACpE;EACA,MAAM;EACJ,yDAAyD,CAAC,uBAAuB,CAClF,CAAC;CACH;AAED,mBAAmB;AAEnB,IAAI,CAAC,CAAC,gBAAgB,IAAI,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;EACzD,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;IACf,MAAM;IACJ,mDAAmD,CAAC,0BAA0B,CAC/E,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;MACX,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC;IAC3D,CAAC,CAAC,CAAC;EACL,CAAC,EAAE,CAAC,CAAC,CAAC;CACP;;EAAM,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC;AAEhE,wDAAwD;AAExD,IAAI,KAAK,CAAC,SAAS,EAAE;EACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC;EACxC,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;MAAE,OAAO,KAAK,CAAC;IACzD,QAAQ,CAAC,eAAe,CAAC,aAAa,CACpC,IAAI,WAAW,CAAC,qBAAqB,CAAC,CACvC,CAAC;IACF,OAAO,IAAI,CAAC;EACd,CAAC,CAAC;EAEF,IAAI,CAAC,UAAU,EAAE,EAAE;IACjB,IAAI,SAAS,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE;MACzC,IAAI,UAAU,EAAE,EAAE;QAChB,SAAS,CAAC,UAAU,EAAE,CAAC;QACvB,SAAS,GAAG,IAAI,CAAC;OAClB;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE;MAC1C,SAAS,EAAE,KAAK;MAChB,OAAO,EAAE,KAAK;MACd,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;GACJ;CACF","sourcesContent":["import { Build } from '@stencil/core';\n\n// focus options\n\nimport 'focus-options-polyfill';\n\n// Intersection observer\n\nif (\n !('IntersectionObserver' in window) ||\n !('IntersectionObserverEntry' in window) ||\n !('intersectionRatio' in window.IntersectionObserverEntry.prototype)\n) {\n import(\n /* webpackChunkName: 'polyfills-intersection-observer' */ 'intersection-observer'\n );\n}\n\n// scroll-behaviour\n\nif (!('scrollBehavior' in document.documentElement.style)) {\n setTimeout((_) => {\n import(\n /* webpackChunkName: 'polyfills-scroll-behavior' */ 'scroll-behavior-polyfill'\n ).then((_) => {\n document.documentElement.style.scrollBehavior = 'smooth';\n });\n }, 0);\n} else document.documentElement.style.scrollBehavior = 'smooth';\n\n// fire global 'ready' event when everything is hydrated\n\nif (Build.isBrowser) {\n const docEle = document.documentElement;\n const docIsReady = () => {\n if (!docEle.classList.contains('hydrated')) return false;\n document.documentElement.dispatchEvent(\n new CustomEvent('nanoComponentsReady')\n );\n return true;\n };\n\n if (!docIsReady()) {\n let mutationO = new MutationObserver((_) => {\n if (docIsReady()) {\n mutationO.disconnect();\n mutationO = null;\n }\n });\n\n mutationO.observe(document.documentElement, {\n childList: false,\n subtree: false,\n attributes: true,\n });\n }\n}\n"]}
|
@@ -32,23 +32,17 @@ export class E2EPlayGround {
|
|
32
32
|
this.props = props;
|
33
33
|
this.page = await createPage({
|
34
34
|
html: `
|
35
|
-
<
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
${this.template.replace(/(\{\{ attrs \}\})/g, this.attrs)}
|
42
|
-
</body>
|
35
|
+
<style>
|
36
|
+
:root {
|
37
|
+
${this.css}
|
38
|
+
}
|
39
|
+
</style>
|
40
|
+
${this.template.replace(/(\{\{ attrs \}\})/g, this.attrs)}
|
43
41
|
`,
|
44
42
|
viewportWidth: this.viewportWidth,
|
45
43
|
viewportHeight: this.viewportHeight,
|
44
|
+
dir: docOpts ? docOpts.dir : 'ltr',
|
46
45
|
});
|
47
|
-
if (docOpts) {
|
48
|
-
await this.page.evaluate(() => {
|
49
|
-
document.dir = docOpts.dir;
|
50
|
-
});
|
51
|
-
}
|
52
46
|
return this.page;
|
53
47
|
}
|
54
48
|
reportA11y() {
|
@@ -90,18 +84,42 @@ export class E2EPlayGround {
|
|
90
84
|
}
|
91
85
|
}
|
92
86
|
}
|
93
|
-
export async function getFocusedElement(page) {
|
94
|
-
|
87
|
+
export async function getFocusedElement(page, shadowEleSelector = null) {
|
88
|
+
if (!shadowEleSelector)
|
89
|
+
return page.evaluateHandle(() => document.activeElement);
|
90
|
+
else {
|
91
|
+
return page.evaluateHandle((shadowEleSelector) => document.querySelector(shadowEleSelector).shadowRoot.activeElement, shadowEleSelector);
|
92
|
+
}
|
95
93
|
}
|
96
94
|
export async function createPage(optionsOrHtml) {
|
97
95
|
const options = typeof optionsOrHtml === 'string'
|
98
|
-
? { html: optionsOrHtml, viewportWidth: 600 }
|
96
|
+
? { html: optionsOrHtml, viewportWidth: 600, dir: 'ltr' }
|
99
97
|
: optionsOrHtml;
|
100
98
|
const page = (await newE2EPage());
|
99
|
+
// setup navigator langs for consistent localization
|
100
|
+
await page.evaluate(() => {
|
101
|
+
Object.defineProperty(navigator, 'language', {
|
102
|
+
get: function () {
|
103
|
+
return 'en-GB';
|
104
|
+
},
|
105
|
+
});
|
106
|
+
Object.defineProperty(navigator, 'languages', {
|
107
|
+
get: function () {
|
108
|
+
return ['en-GB'];
|
109
|
+
},
|
110
|
+
});
|
111
|
+
});
|
101
112
|
const viewport = Object.assign({ height: options.viewportHeight || page.viewport().height }, { width: options.viewportWidth });
|
113
|
+
// set viewport size
|
102
114
|
await page.setViewport(viewport);
|
115
|
+
// add content
|
103
116
|
await page.setContent(`<link rel="stylesheet" href="/themes/nanopore.css">
|
104
|
-
<div class="screenshot" style="padding: 1rem;">${options.html}</div>`, { waitUntil: '
|
117
|
+
<div class="screenshot" style="padding: 1rem;">${options.html}</div>`, { waitUntil: 'networkidle2' });
|
118
|
+
// set the direction - need to set here as stencil removes it on setContent
|
119
|
+
await page.evaluate((dir) => {
|
120
|
+
document.documentElement.setAttribute('dir', dir);
|
121
|
+
document.dir = dir;
|
122
|
+
}, options.dir);
|
105
123
|
// monkey patch screenshot function to add some extra features
|
106
124
|
const screenshot = page.screenshot;
|
107
125
|
page.screenshot = async function () {
|
@@ -120,6 +138,7 @@ export async function createPage(optionsOrHtml) {
|
|
120
138
|
width: Math.round(width),
|
121
139
|
height: options.viewportHeight || Math.round(height),
|
122
140
|
},
|
141
|
+
captureBeyondViewport: false,
|
123
142
|
});
|
124
143
|
};
|
125
144
|
await page.evaluate(async (source) => await window.eval(source), axe.source);
|
@@ -161,9 +180,63 @@ export const kebabize = (str) => {
|
|
161
180
|
};
|
162
181
|
export const screenshotSettings = (dirname) => {
|
163
182
|
return {
|
164
|
-
failureThreshold: 0.
|
183
|
+
failureThreshold: 0.002,
|
165
184
|
failureThresholdType: 'percent',
|
166
185
|
customSnapshotsDir: `${dirname}/__screenshots__/${process.platform}`,
|
167
186
|
};
|
168
187
|
};
|
188
|
+
export const waitForVisibleSnippet = (selector) => {
|
189
|
+
return `
|
190
|
+
(function () {
|
191
|
+
function isVisible(elem) {
|
192
|
+
if (!(elem instanceof Element)) throw Error('DomUtil: elem is not an element.');
|
193
|
+
const style = getComputedStyle(elem);
|
194
|
+
if (style.display === 'none') return false;
|
195
|
+
if (style.visibility !== 'visible') return false;
|
196
|
+
if (style.opacity < 0.1) return false;
|
197
|
+
if (elem.offsetWidth + elem.offsetHeight + elem.getBoundingClientRect().height +
|
198
|
+
elem.getBoundingClientRect().width === 0) {
|
199
|
+
return false;
|
200
|
+
}
|
201
|
+
const elemCenter = {
|
202
|
+
x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,
|
203
|
+
y: elem.getBoundingClientRect().top + elem.offsetHeight / 2
|
204
|
+
};
|
205
|
+
if (elemCenter.x < 0) return false;
|
206
|
+
if (elemCenter.x > (document.documentElement.clientWidth || window.innerWidth)) return false;
|
207
|
+
if (elemCenter.y < 0) return false;
|
208
|
+
if (elemCenter.y > (document.documentElement.clientHeight || window.innerHeight)) return false;
|
209
|
+
let pointContainer = document.elementFromPoint(elemCenter.x, elemCenter.y);
|
210
|
+
do {
|
211
|
+
if (pointContainer === elem) return true;
|
212
|
+
} while (pointContainer = pointContainer.parentNode);
|
213
|
+
return false;
|
214
|
+
}
|
215
|
+
return isVisible(document.querySelector("${selector}"));
|
216
|
+
})()
|
217
|
+
`;
|
218
|
+
};
|
219
|
+
export const stringifyFormSnippet = `
|
220
|
+
<div id="form-result"></div>
|
221
|
+
<script>
|
222
|
+
var form = document.querySelector('form');
|
223
|
+
var result = document.querySelector('#form-result');
|
224
|
+
form.addEventListener('submit', (e) => {
|
225
|
+
e.preventDefault();
|
226
|
+
var data = new FormData(event.target);
|
227
|
+
var object = {};
|
228
|
+
data.forEach((value, key) => {
|
229
|
+
// Reflect.has in favor of: object.hasOwnProperty(key)
|
230
|
+
if(!Reflect.has(object, key)){
|
231
|
+
object[key] = value;
|
232
|
+
return;
|
233
|
+
}
|
234
|
+
if(!Array.isArray(object[key])){
|
235
|
+
object[key] = [object[key]];
|
236
|
+
}
|
237
|
+
object[key].push(value);
|
238
|
+
});
|
239
|
+
result.innerHTML = JSON.stringify(object);
|
240
|
+
})
|
241
|
+
</script>`;
|
169
242
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,uBAAuB,CAAC;AAE5D,OAAO,GAAkC,MAAM,UAAU,CAAC;AAqB1D,MAAM,OAAO,aAAa;EAUxB,YAAY,KAAiD;IAJtD,kBAAa,GAAG,GAAG,CAAC;IAKzB,KAAK;MACH,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,KAAK,kBAAkB,KAAK,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;QAC/D,CAAC,CAAC,KAAK,CAAC;IACZ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC/B,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;EACvB,CAAC;EAED,IAAY,KAAK;IACf,IAAI,CAAC,IAAI,CAAC,KAAK;MAAE,OAAO,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;OAC9B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC;OACtD,IAAI,CAAC,GAAG,CAAC,CAAC;EACf,CAAC;EAED,IAAY,GAAG;IACb,IAAI,CAAC,IAAI,CAAC,OAAO;MAAE,OAAO,EAAE,CAAC;IAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;OAChC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC;OAC3C,IAAI,CAAC,IAAI,CAAC,CAAC;EAChB,CAAC;EAEM,KAAK,CAAC,OAAO,CAAC,KAAkB,EAAE,OAAgC;IACvE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;MAC/B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;MAChC,OAAO;KACR;IAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACnB,IAAI,CAAC,IAAI,GAAG,MAAM,UAAU,CAAC;MAC3B,IAAI,EAAE;;;;cAIE,IAAI,CAAC,GAAG;;;UAGZ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC;;KAE5D;MACC,aAAa,EAAE,IAAI,CAAC,aAAa;MACjC,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE;MACX,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC5B,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;MAC7B,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;EACnB,CAAC;EAEM,UAAU;IACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;MACjC,OAAO;KACR;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACxC,CAAC;EAEM,SAAS;IACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;MACjC,OAAO;KACR;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAClC,CAAC;EAEM,KAAK,CAAC,cAAc,CAAC,WAAmB,EAAE,MAAM,GAAG,IAAI;IAC5D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;MACjC,OAAO;KACR;IACD,IAAI,CAAC,WAAW,EAAE;MAChB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;MACpC,OAAO;KACR;IAED,IAAI,MAAM,EAAE;MACV,OAAO,CACL,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAC7B,CAAC,IAAI,EAAE,EAAE;QACP,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;QAChC,OAAO,QAAQ;WACZ,aAAa,CAAC,GAAG,CAAC;WAClB,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;MAC3C,CAAC,EACD,EAAE,EACF,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CACxB,CACF,CAAC,SAAS,EAAE,CAAC;KACf;SAAM;MACL,OAAO,CACL,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAC7B,CAAC,IAAI,EAAE,EAAE;QACP,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;QAChC,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG,GAAG,GAAG,GAAG,WAAW,CAAC,CAAC;MACzD,CAAC,EACD,EAAE,EACF,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CACxB,CACF,CAAC,SAAS,EAAE,CAAC;KACf;EACH,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAa;EACnD,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,aAA2C;EAC1E,MAAM,OAAO,GACX,OAAO,aAAa,KAAK,QAAQ;IAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE;IAC7C,CAAC,CAAC,aAAa,CAAC;EAEpB,MAAM,IAAI,GAAG,CAAC,MAAM,UAAU,EAAE,CAAgB,CAAC;EAEjD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC5B,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAC5D,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,CACjC,CAAC;EACF,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;EACjC,MAAM,IAAI,CAAC,UAAU,CACnB;qDACiD,OAAO,CAAC,IAAI,QAAQ,EACrE,EAAE,SAAS,EAAE,cAAc,EAAE,CAC9B,CAAC;EAEF,8DAA8D;EAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;EACnC,IAAI,CAAC,UAAU,GAAG,KAAK;IACrB,4DAA4D;IAC5D,wDAAwD;IACxD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAChD,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC;IAExD,MAAM,IAAI,CAAC,WAAW,CAAC;MACrB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK;MAC5B,MAAM,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;MAC3B,IAAI,EAAE;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACxB,MAAM,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;OACrD;KACF,CAAC,CAAC;EACL,CAAC,CAAC;EAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;EAE7E,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE,YAAqB,EAAE,EAAE;IAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;MACxD,MAAM,OAAO,GAAkB;QAC7B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QACpD,OAAO,EAAE,CAAC,CAAC,YAAY,GAAG,mBAAmB,CAAC,CAAC;OAChD,CAAC;MACF,MAAM,IAAI,GAAe,EAAE,CAAC;MAC5B,OAAO,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC,EAAE,YAAY,CAAC,CAAC;IAEjB,kGAAkG;IAClG,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU;OACjC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;OACzE,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE;MACpB,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CACjD,CAAC;MACF,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAClC,CAAC,CAAC,CAAC;IAEL,MAAM,MAAM,GAAG,UAAU;OACtB,GAAG,CACF,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,YAAY,UAAU,CAAC,EAAE,MACvD,UAAU,CAAC,WACb,KAAK,UAAU,CAAC,IAAI;sBACN,UAAU,CAAC,KAAK;OACzB,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;OAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CACnB;OACA,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;EAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,EAAE;EAC9B,OAAO,GAAG;KACP,KAAK,CAAC,EAAE,CAAC;KACT,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;IACnB,OAAO,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM;MACpC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE;MAClD,CAAC,CAAC,MAAM,CAAC;EACb,CAAC,CAAC;KACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAe,EACY,EAAE;EAC7B,OAAO;IACL,gBAAgB,EAAE,KAAK;IACvB,oBAAoB,EAAE,SAAS;IAC/B,kBAAkB,EAAE,GAAG,OAAO,oBAAoB,OAAO,CAAC,QAAQ,EAAE;GACrE,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { newE2EPage, E2EPage } from '@stencil/core/testing';\nimport { Page as PuppeteerPage } from 'puppeteer';\nimport axe, { RunOptions, ContextObject } from 'axe-core';\nimport { MatchImageSnapshotOptions } from 'jest-image-snapshot';\n\ndeclare global {\n interface Window {\n axe: typeof axe;\n }\n}\n\nexport interface NanoE2EPage\n extends E2EPage,\n Pick<PuppeteerPage, 'screenshot' | 'viewport'> {\n reportA11y: (contextQuery?: string) => Promise<string>;\n}\n\ntype NanoE2EPageOptions = {\n html: string;\n viewportWidth: number;\n viewportHeight?: number;\n};\n\nexport class E2EPlayGround<T> {\n public props: Partial<T>;\n public viewportHeight: number;\n /** element template string. Add `{{ attrs }}` to place the attributes */\n public template: string;\n public cssVars: { [key: string]: string };\n public viewportWidth = 600;\n public page: NanoE2EPage;\n public tag: string;\n\n constructor(setup: { template: string; tag: string } | string) {\n setup =\n typeof setup === 'string'\n ? { template: `<${setup} {{ attrs }}></${setup}>`, tag: setup }\n : setup;\n this.template = setup.template;\n this.tag = setup.tag;\n }\n\n private get attrs() {\n if (!this.props) return '';\n return Object.entries(this.props)\n .map(([attr, value]) => `${kebabize(attr)}=\"${value}\"`)\n .join(' ');\n }\n\n private get css() {\n if (!this.cssVars) return '';\n return Object.entries(this.cssVars)\n .map(([attr, value]) => `${attr}: ${value}`)\n .join('\\n');\n }\n\n public async newPage(props?: Partial<T>, docOpts?: { dir: 'rtl' | 'ltr' }) {\n if (!this.template || !this.tag) {\n console.warn('no template set');\n return;\n }\n\n this.props = props;\n this.page = await createPage({\n html: `\n <body>\n <style>\n :root {\n ${this.css}\n }\n </style>\n ${this.template.replace(/(\\{\\{ attrs \\}\\})/g, this.attrs)}\n </body>\n `,\n viewportWidth: this.viewportWidth,\n viewportHeight: this.viewportHeight,\n });\n\n if (docOpts) {\n await this.page.evaluate(() => {\n document.dir = docOpts.dir;\n });\n }\n return this.page;\n }\n\n public reportA11y() {\n if (!this.page) {\n console.warn('no page rendered');\n return;\n }\n return this.page.reportA11y(this.tag);\n }\n\n public component() {\n if (!this.page) {\n console.warn('no page rendered');\n return;\n }\n return this.page.find(this.tag);\n }\n\n public async componentQuery(selectorStr: string, shadow = true) {\n if (!this.page) {\n console.warn('no page rendered');\n return;\n }\n if (!selectorStr) {\n console.warn('selectorStr not set');\n return;\n }\n\n if (shadow) {\n return (\n await this.page.waitForFunction(\n (args) => {\n const [tag, selectorStr] = args;\n return document\n .querySelector(tag)\n .shadowRoot.querySelector(selectorStr);\n },\n {},\n [this.tag, selectorStr]\n )\n ).asElement();\n } else {\n return (\n await this.page.waitForFunction(\n (args) => {\n const [tag, selectorStr] = args;\n return document.querySelector(tag + ' ' + selectorStr);\n },\n {},\n [this.tag, selectorStr]\n )\n ).asElement();\n }\n }\n}\n\nexport async function getFocusedElement(page: E2EPage) {\n return page.evaluateHandle(() => document.activeElement);\n}\n\nexport async function createPage(optionsOrHtml?: string | NanoE2EPageOptions) {\n const options: NanoE2EPageOptions =\n typeof optionsOrHtml === 'string'\n ? { html: optionsOrHtml, viewportWidth: 600 }\n : optionsOrHtml;\n\n const page = (await newE2EPage()) as NanoE2EPage;\n\n const viewport = Object.assign(\n { height: options.viewportHeight || page.viewport().height },\n { width: options.viewportWidth }\n );\n await page.setViewport(viewport);\n await page.setContent(\n `<link rel=\"stylesheet\" href=\"/themes/nanopore.css\">\n <div class=\"screenshot\" style=\"padding: 1rem;\">${options.html}</div>`,\n { waitUntil: 'networkidle0' }\n );\n\n // monkey patch screenshot function to add some extra features\n const screenshot = page.screenshot;\n page.screenshot = async function () {\n // get the element's height, and set viewport to that height\n // this enables us to get full page, clipped screenshots\n const htmlElement = await page.$('.screenshot');\n let { width, height } = await htmlElement.boundingBox();\n\n await page.setViewport({\n width: page.viewport().width,\n height: options.viewportHeight || Math.round(height),\n });\n\n return screenshot.call(page, {\n clip: {\n x: 0,\n y: 0,\n width: Math.round(width),\n height: options.viewportHeight || Math.round(height),\n },\n });\n };\n\n await page.evaluate(async (source) => await window.eval(source), axe.source);\n\n page.reportA11y = async (contextQuery?: string) => {\n const result = await page.evaluate(async (contextQuery) => {\n const context: ContextObject = {\n include: contextQuery ? [[contextQuery]] : undefined,\n exclude: [[contextQuery + ' .button--primary']],\n };\n const opts: RunOptions = {};\n return await window.axe.run(context, opts);\n }, contextQuery);\n\n // we only want serious issues and we want to ignore nanopore buttons. We know though they're bad.\n const violations = result.violations\n .filter((violation) => [`serious`, `critical`].includes(violation.impact))\n .filter((violation) => {\n violation.nodes = violation.nodes.filter(\n (node) => !node.target.join().match('.button--')\n );\n return !!violation.nodes.length;\n });\n\n const outout = violations\n .map(\n (violations, index) => `(${index}) [Type: ${violations.id}]: ${\n violations.description\n } (${violations.help}).\n Elements: ${violations.nodes\n .map((node, index) => `[${index}]'${node.target}'`)\n .join(`, `)}.`\n )\n .join(`\\n\\n`);\n return outout;\n };\n\n return page;\n}\n\nexport const kebabize = (str) => {\n return str\n .split('')\n .map((letter, idx) => {\n return letter.toUpperCase() === letter\n ? `${idx !== 0 ? '-' : ''}${letter.toLowerCase()}`\n : letter;\n })\n .join('');\n};\n\nexport const screenshotSettings = (\n dirname: string\n): MatchImageSnapshotOptions => {\n return {\n failureThreshold: 0.001,\n failureThresholdType: 'percent',\n customSnapshotsDir: `${dirname}/__screenshots__/${process.platform}`,\n };\n};\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/testing/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { newE2EPage, E2EPage } from '@stencil/core/testing';\nimport { Page as PuppeteerPage } from 'puppeteer';\nimport axe, { RunOptions, ContextObject } from 'axe-core';\nimport { MatchImageSnapshotOptions } from 'jest-image-snapshot';\n\ndeclare global {\n interface Window {\n axe: typeof axe;\n }\n}\n\nexport interface NanoE2EPage\n extends E2EPage,\n Pick<PuppeteerPage, 'screenshot' | 'viewport'> {\n reportA11y: (contextQuery?: string) => Promise<string>;\n}\n\ntype NanoE2EPageOptions = {\n html: string;\n viewportWidth: number;\n viewportHeight?: number;\n dir: 'ltr' | 'rtl';\n};\n\nexport class E2EPlayGround<T> {\n public props: Partial<T>;\n public viewportHeight: number;\n /** element template string. Add `{{ attrs }}` to place the attributes */\n public template: string;\n public cssVars: { [key: string]: string };\n public viewportWidth = 600;\n public page: NanoE2EPage;\n public tag: string;\n\n constructor(setup: { template: string; tag: string } | string) {\n setup =\n typeof setup === 'string'\n ? { template: `<${setup} {{ attrs }}></${setup}>`, tag: setup }\n : setup;\n this.template = setup.template;\n this.tag = setup.tag;\n }\n\n private get attrs() {\n if (!this.props) return '';\n return Object.entries(this.props)\n .map(([attr, value]) => `${kebabize(attr)}=\"${value}\"`)\n .join(' ');\n }\n\n private get css() {\n if (!this.cssVars) return '';\n return Object.entries(this.cssVars)\n .map(([attr, value]) => `${attr}: ${value}`)\n .join('\\n');\n }\n\n public async newPage(props?: Partial<T>, docOpts?: { dir: 'rtl' | 'ltr' }) {\n if (!this.template || !this.tag) {\n console.warn('no template set');\n return;\n }\n\n this.props = props;\n this.page = await createPage({\n html: `\n <style>\n :root {\n ${this.css}\n }\n </style>\n ${this.template.replace(/(\\{\\{ attrs \\}\\})/g, this.attrs)}\n `,\n viewportWidth: this.viewportWidth,\n viewportHeight: this.viewportHeight,\n dir: docOpts ? docOpts.dir : 'ltr',\n });\n\n return this.page;\n }\n\n public reportA11y() {\n if (!this.page) {\n console.warn('no page rendered');\n return;\n }\n return this.page.reportA11y(this.tag);\n }\n\n public component() {\n if (!this.page) {\n console.warn('no page rendered');\n return;\n }\n return this.page.find(this.tag);\n }\n\n public async componentQuery(selectorStr: string, shadow = true) {\n if (!this.page) {\n console.warn('no page rendered');\n return;\n }\n if (!selectorStr) {\n console.warn('selectorStr not set');\n return;\n }\n\n if (shadow) {\n return (\n await this.page.waitForFunction(\n (args) => {\n const [tag, selectorStr] = args;\n return document\n .querySelector(tag)\n .shadowRoot.querySelector(selectorStr);\n },\n {},\n [this.tag, selectorStr]\n )\n ).asElement();\n } else {\n return (\n await this.page.waitForFunction(\n (args) => {\n const [tag, selectorStr] = args;\n return document.querySelector(tag + ' ' + selectorStr);\n },\n {},\n [this.tag, selectorStr]\n )\n ).asElement();\n }\n }\n}\n\nexport async function getFocusedElement(\n page: E2EPage,\n shadowEleSelector: string = null\n) {\n if (!shadowEleSelector)\n return page.evaluateHandle(() => document.activeElement);\n else {\n return page.evaluateHandle(\n (shadowEleSelector) =>\n document.querySelector(shadowEleSelector).shadowRoot.activeElement,\n shadowEleSelector\n );\n }\n}\n\nexport async function createPage(optionsOrHtml?: string | NanoE2EPageOptions) {\n const options: NanoE2EPageOptions =\n typeof optionsOrHtml === 'string'\n ? { html: optionsOrHtml, viewportWidth: 600, dir: 'ltr' }\n : optionsOrHtml;\n\n const page = (await newE2EPage()) as NanoE2EPage;\n\n // setup navigator langs for consistent localization\n await page.evaluate(() => {\n Object.defineProperty(navigator, 'language', {\n get: function () {\n return 'en-GB';\n },\n });\n Object.defineProperty(navigator, 'languages', {\n get: function () {\n return ['en-GB'];\n },\n });\n });\n const viewport = Object.assign(\n { height: options.viewportHeight || page.viewport().height },\n { width: options.viewportWidth }\n );\n // set viewport size\n await page.setViewport(viewport);\n\n // add content\n await page.setContent(\n `<link rel=\"stylesheet\" href=\"/themes/nanopore.css\">\n <div class=\"screenshot\" style=\"padding: 1rem;\">${options.html}</div>`,\n { waitUntil: 'networkidle2' }\n );\n\n // set the direction - need to set here as stencil removes it on setContent\n await page.evaluate((dir) => {\n document.documentElement.setAttribute('dir', dir);\n document.dir = dir;\n }, options.dir);\n\n // monkey patch screenshot function to add some extra features\n const screenshot = page.screenshot;\n page.screenshot = async function () {\n // get the element's height, and set viewport to that height\n // this enables us to get full page, clipped screenshots\n const htmlElement = await page.$('.screenshot');\n let { width, height } = await htmlElement.boundingBox();\n\n await page.setViewport({\n width: page.viewport().width,\n height: options.viewportHeight || Math.round(height),\n });\n\n return screenshot.call(page, {\n clip: {\n x: 0,\n y: 0,\n width: Math.round(width),\n height: options.viewportHeight || Math.round(height),\n },\n captureBeyondViewport: false,\n });\n };\n\n await page.evaluate(async (source) => await window.eval(source), axe.source);\n\n page.reportA11y = async (contextQuery?: string) => {\n const result = await page.evaluate(async (contextQuery) => {\n const context: ContextObject = {\n include: contextQuery ? [[contextQuery]] : undefined,\n exclude: [[contextQuery + ' .button--primary']],\n };\n const opts: RunOptions = {};\n return await window.axe.run(context, opts);\n }, contextQuery);\n\n // we only want serious issues and we want to ignore nanopore buttons. We know though they're bad.\n const violations = result.violations\n .filter((violation) => [`serious`, `critical`].includes(violation.impact))\n .filter((violation) => {\n violation.nodes = violation.nodes.filter(\n (node) => !node.target.join().match('.button--')\n );\n return !!violation.nodes.length;\n });\n\n const outout = violations\n .map(\n (violations, index) => `(${index}) [Type: ${violations.id}]: ${\n violations.description\n } (${violations.help}).\n Elements: ${violations.nodes\n .map((node, index) => `[${index}]'${node.target}'`)\n .join(`, `)}.`\n )\n .join(`\\n\\n`);\n return outout;\n };\n\n return page;\n}\n\nexport const kebabize = (str) => {\n return str\n .split('')\n .map((letter, idx) => {\n return letter.toUpperCase() === letter\n ? `${idx !== 0 ? '-' : ''}${letter.toLowerCase()}`\n : letter;\n })\n .join('');\n};\n\nexport const screenshotSettings = (\n dirname: string\n): MatchImageSnapshotOptions => {\n return {\n failureThreshold: 0.002,\n failureThresholdType: 'percent',\n customSnapshotsDir: `${dirname}/__screenshots__/${process.platform}`,\n };\n};\n\nexport const waitForVisibleSnippet = (selector) => {\n return `\n (function () {\n function isVisible(elem) {\n if (!(elem instanceof Element)) throw Error('DomUtil: elem is not an element.');\n const style = getComputedStyle(elem);\n if (style.display === 'none') return false;\n if (style.visibility !== 'visible') return false;\n if (style.opacity < 0.1) return false;\n if (elem.offsetWidth + elem.offsetHeight + elem.getBoundingClientRect().height +\n elem.getBoundingClientRect().width === 0) {\n return false;\n }\n const elemCenter = {\n x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,\n y: elem.getBoundingClientRect().top + elem.offsetHeight / 2\n };\n if (elemCenter.x < 0) return false;\n if (elemCenter.x > (document.documentElement.clientWidth || window.innerWidth)) return false;\n if (elemCenter.y < 0) return false;\n if (elemCenter.y > (document.documentElement.clientHeight || window.innerHeight)) return false;\n let pointContainer = document.elementFromPoint(elemCenter.x, elemCenter.y);\n do {\n if (pointContainer === elem) return true;\n } while (pointContainer = pointContainer.parentNode);\n return false;\n }\n return isVisible(document.querySelector(\"${selector}\"));\n })()\n`;\n};\n\nexport const stringifyFormSnippet = `\n<div id=\"form-result\"></div>\n<script>\n var form = document.querySelector('form');\n var result = document.querySelector('#form-result');\n form.addEventListener('submit', (e) => {\n e.preventDefault();\n var data = new FormData(event.target);\n var object = {};\n data.forEach((value, key) => {\n // Reflect.has in favor of: object.hasOwnProperty(key)\n if(!Reflect.has(object, key)){\n object[key] = value;\n return;\n }\n if(!Array.isArray(object[key])){\n object[key] = [object[key]];\n }\n object[key].push(value);\n });\n result.innerHTML = JSON.stringify(object);\n })\n</script>`;\n"]}
|