@nanoporetech-digital/components 7.6.0 → 7.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{algolia-data-0447757c.js → algolia-data-ca9cd58e.js} +2 -2
- package/dist/cjs/{algolia-data-0447757c.js.map → algolia-data-ca9cd58e.js.map} +1 -1
- package/dist/cjs/app-globals-3e14cb71.js +41 -0
- package/dist/cjs/app-globals-3e14cb71.js.map +1 -0
- package/dist/cjs/{component-store-6a330cd1.js → component-store-b8d4bd91.js} +2 -2
- package/dist/cjs/{component-store-6a330cd1.js.map → component-store-b8d4bd91.js.map} +1 -1
- package/dist/cjs/{dom-756fcdac.js → dom-b99a1aec.js} +2 -2
- package/dist/cjs/{dom-756fcdac.js.map → dom-b99a1aec.js.map} +1 -1
- package/dist/cjs/{fade-2dd9dd8b.js → fade-6a5004f4.js} +4 -3
- package/dist/cjs/fade-6a5004f4.js.map +1 -0
- package/dist/cjs/form-control-5bb39cc2.js +82 -0
- package/dist/cjs/form-control-5bb39cc2.js.map +1 -0
- package/dist/cjs/{fullscreen-5d0422de.js → fullscreen-f5db9bbe.js} +4 -3
- package/dist/cjs/fullscreen-f5db9bbe.js.map +1 -0
- package/dist/cjs/{index-b6fa04fa.js → index-615cdb64.js} +4 -2
- package/dist/cjs/index-615cdb64.js.map +1 -0
- package/dist/cjs/{index-7795a8f6.js → index-a92a0379.js} +2 -2
- package/dist/cjs/{index-7795a8f6.js.map → index-a92a0379.js.map} +1 -1
- package/dist/cjs/index.cjs.js +20 -5
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/{lazyload-f181cb37.js → lazyload-13d72e60.js} +4 -3
- package/dist/cjs/lazyload-13d72e60.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/nano-accordion.cjs.entry.js +8 -6
- package/dist/cjs/nano-accordion.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-alert.cjs.entry.js +12 -11
- package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-algolia-filter.cjs.entry.js +7 -5
- package/dist/cjs/nano-algolia-filter.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-algolia-pagination.cjs.entry.js +4 -4
- package/dist/cjs/nano-algolia-results.cjs.entry.js +6 -4
- package/dist/cjs/nano-algolia-results.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-algolia.cjs.entry.js +14 -11
- package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-animation.cjs.entry.js +3 -2
- package/dist/cjs/nano-animation.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-checkbox-group.cjs.entry.js +6 -4
- package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-checkbox.cjs.entry.js +6 -5
- package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-components.cjs.js +6 -3
- package/dist/cjs/nano-components.cjs.js.map +1 -1
- package/dist/cjs/nano-datalist_3.cjs.entry.js +30 -28
- package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-date-input.cjs.entry.js +7 -6
- package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-date-picker.cjs.entry.js +16 -15
- package/dist/cjs/nano-date-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-details.cjs.entry.js +7 -6
- package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-dialog.cjs.entry.js +7 -6
- package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-drawer.cjs.entry.js +9 -8
- package/dist/cjs/nano-drawer.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-dropdown.cjs.entry.js +9 -7
- package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-field-validator.cjs.entry.js +17 -15
- package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-file-upload.cjs.entry.js +12 -11
- package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +30 -27
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +68 -66
- package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-search-results.cjs.entry.js +10 -6
- package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-grid-item.cjs.entry.js +2 -2
- package/dist/cjs/nano-grid_2.cjs.entry.js +6 -5
- package/dist/cjs/nano-grid_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-hero.cjs.entry.js +11 -10
- package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-icon-button_2.cjs.entry.js +6 -5
- package/dist/cjs/nano-icon-button_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-icon.cjs.entry.js +5 -3
- package/dist/cjs/nano-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-input.cjs.entry.js +9 -7
- package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-intersection-observe.cjs.entry.js +3 -2
- package/dist/cjs/nano-intersection-observe.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-menu-drawer.cjs.entry.js +10 -8
- package/dist/cjs/nano-menu-drawer.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-more-less.cjs.entry.js +5 -4
- package/dist/cjs/nano-more-less.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-overflow-nav.cjs.entry.js +7 -6
- package/dist/cjs/nano-overflow-nav.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-progress-bar.cjs.entry.js +7 -4
- package/dist/cjs/nano-progress-bar.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-range.cjs.entry.js +9 -7
- package/dist/cjs/nano-range.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-rating.cjs.entry.js +10 -9
- package/dist/cjs/nano-rating.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js +7 -6
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-slide.cjs.entry.js +3 -2
- package/dist/cjs/nano-slide.cjs.entry.js.map +1 -1
- package/dist/cjs/{nano-slides-612634dc.js → nano-slides-0a60315d.js} +15 -13
- package/dist/cjs/nano-slides-0a60315d.js.map +1 -0
- package/dist/cjs/nano-slides.cjs.entry.js +3 -2
- package/dist/cjs/nano-slides.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-sortable.cjs.entry.js +3 -2
- package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-spinner.cjs.entry.js +3 -2
- package/dist/cjs/nano-spinner.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-split-pane.cjs.entry.js +3 -2
- package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-sticker.cjs.entry.js +6 -5
- package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab-content.cjs.entry.js +5 -3
- package/dist/cjs/nano-tab-content.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js +16 -14
- package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab.cjs.entry.js +4 -3
- package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
- package/dist/cjs/{nano-table-99d6a3cc.js → nano-table-43fc3d23.js} +42 -40
- package/dist/cjs/nano-table-43fc3d23.js.map +1 -0
- package/dist/cjs/nano-table.cjs.entry.js +4 -3
- package/dist/cjs/nano-table.cjs.entry.js.map +1 -1
- package/dist/cjs/{page-dots-99dd88f6.js → page-dots-ecdd64d1.js} +4 -3
- package/dist/cjs/page-dots-ecdd64d1.js.map +1 -0
- package/dist/cjs/renderer-cd8b6098.js +63 -0
- package/dist/cjs/renderer-cd8b6098.js.map +1 -0
- package/dist/cjs/{scroll-772f7d0d.js → scroll-a3e5c6c6.js} +2 -2
- package/dist/cjs/{scroll-772f7d0d.js.map → scroll-a3e5c6c6.js.map} +1 -1
- package/dist/cjs/{table.worker-263468df.js → table.worker-ad250672.js} +5 -4
- package/dist/cjs/table.worker-ad250672.js.map +1 -0
- package/dist/collection/components/accordion/accordion.js +7 -5
- package/dist/collection/components/accordion/accordion.js.map +1 -1
- package/dist/collection/components/alert/alert.helpers.js +3 -2
- package/dist/collection/components/alert/alert.helpers.js.map +1 -1
- package/dist/collection/components/alert/alert.js +8 -7
- package/dist/collection/components/alert/alert.js.map +1 -1
- package/dist/collection/components/algolia/algolia-filter.js +5 -3
- package/dist/collection/components/algolia/algolia-filter.js.map +1 -1
- package/dist/collection/components/algolia/algolia-pagination.js +2 -2
- package/dist/collection/components/algolia/algolia-results.js +5 -3
- package/dist/collection/components/algolia/algolia-results.js.map +1 -1
- package/dist/collection/components/algolia/algolia.js +11 -8
- package/dist/collection/components/algolia/algolia.js.map +1 -1
- package/dist/collection/components/animation/animation.js +3 -2
- package/dist/collection/components/animation/animation.js.map +1 -1
- package/dist/collection/components/checkbox/checkbox-group.js +6 -4
- package/dist/collection/components/checkbox/checkbox-group.js.map +1 -1
- package/dist/collection/components/checkbox/checkbox.js +6 -5
- package/dist/collection/components/checkbox/checkbox.js.map +1 -1
- package/dist/collection/components/datalist/datalist.css +1 -1
- package/dist/collection/components/datalist/datalist.js +14 -13
- package/dist/collection/components/datalist/datalist.js.map +1 -1
- package/dist/collection/components/date-input/date-input.css +3 -3
- package/dist/collection/components/date-input/date-input.js +6 -5
- package/dist/collection/components/date-input/date-input.js.map +1 -1
- package/dist/collection/components/date-picker/date-picker.css +3 -3
- package/dist/collection/components/date-picker/date-picker.js +5 -4
- package/dist/collection/components/date-picker/date-picker.js.map +1 -1
- package/dist/collection/components/date-picker/duet-date-picker/date-picker-day.js +1 -1
- package/dist/collection/components/date-picker/duet-date-picker/date-picker-day.js.map +1 -1
- package/dist/collection/components/date-picker/duet-date-picker/date-picker-month.js +1 -1
- package/dist/collection/components/date-picker/duet-date-picker/date-picker-month.js.map +1 -1
- package/dist/collection/components/details/details.css +1 -1
- package/dist/collection/components/details/details.js +6 -5
- package/dist/collection/components/details/details.js.map +1 -1
- package/dist/collection/components/dialog/dialog.helpers.js +2 -1
- package/dist/collection/components/dialog/dialog.helpers.js.map +1 -1
- package/dist/collection/components/dialog/dialog.js +4 -3
- package/dist/collection/components/dialog/dialog.js.map +1 -1
- package/dist/collection/components/drawer/drawer.css +1 -1
- package/dist/collection/components/drawer/drawer.js +5 -4
- package/dist/collection/components/drawer/drawer.js.map +1 -1
- package/dist/collection/components/dropdown/dropdown.css +1 -1
- package/dist/collection/components/dropdown/dropdown.js +8 -6
- package/dist/collection/components/dropdown/dropdown.js.map +1 -1
- package/dist/collection/components/field-validator/field-validator.js +16 -14
- package/dist/collection/components/field-validator/field-validator.js.map +1 -1
- package/dist/collection/components/file-upload/file-upload.css +1 -1
- package/dist/collection/components/file-upload/file-upload.js +3 -2
- package/dist/collection/components/file-upload/file-upload.js.map +1 -1
- package/dist/collection/components/form-control/form-control.js +1 -1
- package/dist/collection/components/form-control/form-control.js.map +1 -1
- package/dist/collection/components/global-nav/global-nav-user-profile.js +3 -2
- package/dist/collection/components/global-nav/global-nav-user-profile.js.map +1 -1
- package/dist/collection/components/global-nav/global-nav.js +50 -48
- package/dist/collection/components/global-nav/global-nav.js.map +1 -1
- package/dist/collection/components/global-nav/style/global-nav.css +33 -33
- package/dist/collection/components/global-search-results/global-search-results.css +11 -11
- package/dist/collection/components/global-search-results/global-search-results.js +9 -5
- package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
- package/dist/collection/components/grid/grid-item.js +1 -1
- package/dist/collection/components/grid/grid.js +3 -2
- package/dist/collection/components/grid/grid.js.map +1 -1
- package/dist/collection/components/hero/hero.css +2 -2
- package/dist/collection/components/hero/hero.js +6 -5
- package/dist/collection/components/hero/hero.js.map +1 -1
- package/dist/collection/components/icon/icon.js +4 -2
- package/dist/collection/components/icon/icon.js.map +1 -1
- package/dist/collection/components/icon-button/icon-button.js +2 -2
- package/dist/collection/components/icon-button/icon-button.js.map +1 -1
- package/dist/collection/components/img/img.js +5 -4
- package/dist/collection/components/img/img.js.map +1 -1
- package/dist/collection/components/input/input.js +7 -5
- package/dist/collection/components/input/input.js.map +1 -1
- package/dist/collection/components/intersection-observe/intersection-observe.js +3 -2
- package/dist/collection/components/intersection-observe/intersection-observe.js.map +1 -1
- package/dist/collection/components/menu/menu.css +1 -1
- package/dist/collection/components/menu/menu.js +12 -10
- package/dist/collection/components/menu/menu.js.map +1 -1
- package/dist/collection/components/menu-drawer/menu-drawer.css +3 -3
- package/dist/collection/components/menu-drawer/menu-drawer.js +8 -6
- package/dist/collection/components/menu-drawer/menu-drawer.js.map +1 -1
- package/dist/collection/components/more-less/more-less.js +4 -3
- package/dist/collection/components/more-less/more-less.js.map +1 -1
- package/dist/collection/components/nav-item/nav-item.css +12 -12
- package/dist/collection/components/nav-item/nav-item.js +11 -9
- package/dist/collection/components/nav-item/nav-item.js.map +1 -1
- package/dist/collection/components/option/option.css +2 -2
- package/dist/collection/components/option/option.js +4 -3
- package/dist/collection/components/option/option.js.map +1 -1
- package/dist/collection/components/overflow-nav/overflow-nav.css +4 -4
- package/dist/collection/components/overflow-nav/overflow-nav.js +5 -4
- package/dist/collection/components/overflow-nav/overflow-nav.js.map +1 -1
- package/dist/collection/components/progress-bar/progress-bar.js +7 -4
- package/dist/collection/components/progress-bar/progress-bar.js.map +1 -1
- package/dist/collection/components/range/range.js +3 -1
- package/dist/collection/components/range/range.js.map +1 -1
- package/dist/collection/components/rating/rating.css +1 -1
- package/dist/collection/components/rating/rating.js +6 -5
- package/dist/collection/components/rating/rating.js.map +1 -1
- package/dist/collection/components/resize-observe/resize-observe.js +3 -2
- package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
- package/dist/collection/components/select/select.css +1 -5
- package/dist/collection/components/select/select.js +9 -7
- package/dist/collection/components/select/select.js.map +1 -1
- package/dist/collection/components/skeleton/skeleton.js +4 -3
- package/dist/collection/components/skeleton/skeleton.js.map +1 -1
- package/dist/collection/components/slides/slide.js +3 -2
- package/dist/collection/components/slides/slide.js.map +1 -1
- package/dist/collection/components/slides/slides.js +10 -8
- package/dist/collection/components/slides/slides.js.map +1 -1
- package/dist/collection/components/sortable/sortable.js +3 -2
- package/dist/collection/components/sortable/sortable.js.map +1 -1
- package/dist/collection/components/spinner/spinner.js +3 -2
- package/dist/collection/components/spinner/spinner.js.map +1 -1
- package/dist/collection/components/split-pane/split-pane.js +3 -2
- package/dist/collection/components/split-pane/split-pane.js.map +1 -1
- package/dist/collection/components/sticker/sticker.js +5 -4
- package/dist/collection/components/sticker/sticker.js.map +1 -1
- package/dist/collection/components/table/table.cell.js +3 -1
- package/dist/collection/components/table/table.cell.js.map +1 -1
- package/dist/collection/components/table/table.css +2 -2
- package/dist/collection/components/table/table.header.js +2 -1
- package/dist/collection/components/table/table.header.js.map +1 -1
- package/dist/collection/components/table/table.js +9 -8
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/components/table/table.row.js +1 -1
- package/dist/collection/components/table/table.row.js.map +1 -1
- package/dist/collection/components/tabs/tab-content.js +5 -3
- package/dist/collection/components/tabs/tab-content.js.map +1 -1
- package/dist/collection/components/tabs/tab-group.css +3 -3
- package/dist/collection/components/tabs/tab-group.js +12 -10
- package/dist/collection/components/tabs/tab-group.js.map +1 -1
- package/dist/collection/components/tabs/tab.js +4 -3
- package/dist/collection/components/tabs/tab.js.map +1 -1
- package/dist/collection/components/tooltip/tooltip.js +4 -3
- package/dist/collection/components/tooltip/tooltip.js.map +1 -1
- package/dist/collection/global/script/global.js +28 -23
- package/dist/collection/global/script/global.js.map +1 -1
- package/dist/collection/index.js +17 -2
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/utils/renderer.js +54 -0
- package/dist/collection/utils/renderer.js.map +1 -0
- package/dist/components/algolia.js +11 -8
- package/dist/components/algolia.js.map +1 -1
- package/dist/components/datalist.js +19 -30
- package/dist/components/datalist.js.map +1 -1
- package/dist/components/date-picker.js +6 -5
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dropdown.js +9 -7
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/form-control.js +1 -1
- package/dist/components/form-control.js.map +1 -1
- package/dist/components/global-nav-user-profile.js +3 -2
- package/dist/components/global-nav-user-profile.js.map +1 -1
- package/dist/components/grid.js +2 -1
- package/dist/components/grid.js.map +1 -1
- package/dist/components/icon-button.js +2 -2
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/icon.js +4 -2
- package/dist/components/icon.js.map +1 -1
- package/dist/components/img.js +5 -4
- package/dist/components/img.js.map +1 -1
- package/dist/components/index.js +48 -31
- package/dist/components/index.js.map +1 -1
- package/dist/components/input.js +7 -5
- package/dist/components/input.js.map +1 -1
- package/dist/components/menu.js +13 -11
- package/dist/components/menu.js.map +1 -1
- package/dist/components/nano-accordion.js +7 -5
- package/dist/components/nano-accordion.js.map +1 -1
- package/dist/components/nano-alert.js +8 -7
- package/dist/components/nano-alert.js.map +1 -1
- package/dist/components/nano-algolia-filter.js +5 -3
- package/dist/components/nano-algolia-filter.js.map +1 -1
- package/dist/components/nano-algolia-pagination.js +2 -2
- package/dist/components/nano-algolia-results.js +5 -3
- package/dist/components/nano-algolia-results.js.map +1 -1
- package/dist/components/nano-animation.js +3 -2
- package/dist/components/nano-animation.js.map +1 -1
- package/dist/components/nano-checkbox-group.js +6 -4
- package/dist/components/nano-checkbox-group.js.map +1 -1
- package/dist/components/nano-checkbox.js +6 -5
- package/dist/components/nano-checkbox.js.map +1 -1
- package/dist/components/nano-date-input.js +7 -6
- package/dist/components/nano-date-input.js.map +1 -1
- package/dist/components/nano-details.js +7 -6
- package/dist/components/nano-details.js.map +1 -1
- package/dist/components/nano-dialog.js +4 -3
- package/dist/components/nano-dialog.js.map +1 -1
- package/dist/components/nano-drawer.js +6 -5
- package/dist/components/nano-drawer.js.map +1 -1
- package/dist/components/nano-field-validator.js +16 -14
- package/dist/components/nano-field-validator.js.map +1 -1
- package/dist/components/nano-file-upload.js +4 -3
- package/dist/components/nano-file-upload.js.map +1 -1
- package/dist/components/nano-global-nav.js +51 -49
- package/dist/components/nano-global-nav.js.map +1 -1
- package/dist/components/nano-global-search-results.js +10 -6
- package/dist/components/nano-global-search-results.js.map +1 -1
- package/dist/components/nano-grid-item.js +1 -1
- package/dist/components/nano-hero.js +7 -6
- package/dist/components/nano-hero.js.map +1 -1
- package/dist/components/nano-intersection-observe.js +3 -2
- package/dist/components/nano-intersection-observe.js.map +1 -1
- package/dist/components/nano-menu-drawer.js +9 -7
- package/dist/components/nano-menu-drawer.js.map +1 -1
- package/dist/components/nano-more-less.js +4 -3
- package/dist/components/nano-more-less.js.map +1 -1
- package/dist/components/nano-overflow-nav.js +6 -5
- package/dist/components/nano-overflow-nav.js.map +1 -1
- package/dist/components/nano-range.js +3 -1
- package/dist/components/nano-range.js.map +1 -1
- package/dist/components/nano-rating.js +7 -6
- package/dist/components/nano-rating.js.map +1 -1
- package/dist/components/nano-slide.js +3 -2
- package/dist/components/nano-slide.js.map +1 -1
- package/dist/components/nano-slides.js +10 -8
- package/dist/components/nano-slides.js.map +1 -1
- package/dist/components/nano-sortable.js +3 -2
- package/dist/components/nano-sortable.js.map +1 -1
- package/dist/components/nano-split-pane.js +3 -2
- package/dist/components/nano-split-pane.js.map +1 -1
- package/dist/components/nano-tab-content.js +5 -3
- package/dist/components/nano-tab-content.js.map +1 -1
- package/dist/components/nano-tab-group.js +13 -11
- package/dist/components/nano-tab-group.js.map +1 -1
- package/dist/components/nano-tab.js +4 -3
- package/dist/components/nano-tab.js.map +1 -1
- package/dist/components/nano-table.js +38 -36
- package/dist/components/nano-table.js.map +1 -1
- package/dist/components/nav-item.js +12 -10
- package/dist/components/nav-item.js.map +1 -1
- package/dist/components/option.js +5 -4
- package/dist/components/option.js.map +1 -1
- package/dist/components/progress-bar.js +7 -4
- package/dist/components/progress-bar.js.map +1 -1
- package/dist/components/renderer.js +58 -0
- package/dist/components/renderer.js.map +1 -0
- package/dist/components/resize-observe.js +3 -2
- package/dist/components/resize-observe.js.map +1 -1
- package/dist/components/select.js +10 -8
- package/dist/components/select.js.map +1 -1
- package/dist/components/skeleton.js +4 -3
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/spinner.js +3 -2
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/sticker.js +5 -4
- package/dist/components/sticker.js.map +1 -1
- package/dist/components/tooltip.js +4 -3
- package/dist/components/tooltip.js.map +1 -1
- package/dist/esm/{algolia-data-8fc24341.js → algolia-data-f0f72f1d.js} +2 -2
- package/dist/esm/{algolia-data-8fc24341.js.map → algolia-data-f0f72f1d.js.map} +1 -1
- package/dist/esm/app-globals-f0120bbe.js +39 -0
- package/dist/esm/app-globals-f0120bbe.js.map +1 -0
- package/dist/esm/{component-store-b798181b.js → component-store-199a9fd8.js} +2 -2
- package/dist/esm/{component-store-b798181b.js.map → component-store-199a9fd8.js.map} +1 -1
- package/dist/esm/{dom-d7f9f24c.js → dom-fafdec9a.js} +2 -2
- package/dist/esm/{dom-d7f9f24c.js.map → dom-fafdec9a.js.map} +1 -1
- package/dist/esm/{fade-4ff5d9de.js → fade-ce1a4958.js} +4 -3
- package/dist/esm/fade-ce1a4958.js.map +1 -0
- package/dist/esm/{form-control-812999d0.js → form-control-f48fa873.js} +2 -2
- package/dist/esm/form-control-f48fa873.js.map +1 -0
- package/dist/esm/{fullscreen-382d7890.js → fullscreen-52d62028.js} +4 -3
- package/dist/esm/fullscreen-52d62028.js.map +1 -0
- package/dist/esm/{index-3118109b.js → index-6cc72cd9.js} +3 -3
- package/dist/esm/index-6cc72cd9.js.map +1 -0
- package/dist/esm/{index-d7a4a150.js → index-f5f7b950.js} +2 -2
- package/dist/esm/{index-d7a4a150.js.map → index-f5f7b950.js.map} +1 -1
- package/dist/esm/index.js +19 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{lazyload-49b745e4.js → lazyload-8ff69ba4.js} +4 -3
- package/dist/esm/lazyload-8ff69ba4.js.map +1 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/nano-accordion.entry.js +8 -6
- package/dist/esm/nano-accordion.entry.js.map +1 -1
- package/dist/esm/nano-alert.entry.js +10 -9
- package/dist/esm/nano-alert.entry.js.map +1 -1
- package/dist/esm/nano-algolia-filter.entry.js +7 -5
- package/dist/esm/nano-algolia-filter.entry.js.map +1 -1
- package/dist/esm/nano-algolia-pagination.entry.js +4 -4
- package/dist/esm/nano-algolia-results.entry.js +6 -4
- package/dist/esm/nano-algolia-results.entry.js.map +1 -1
- package/dist/esm/nano-algolia.entry.js +14 -11
- package/dist/esm/nano-algolia.entry.js.map +1 -1
- package/dist/esm/nano-animation.entry.js +3 -2
- package/dist/esm/nano-animation.entry.js.map +1 -1
- package/dist/esm/nano-checkbox-group.entry.js +6 -4
- package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
- package/dist/esm/nano-checkbox.entry.js +6 -5
- package/dist/esm/nano-checkbox.entry.js.map +1 -1
- package/dist/esm/nano-components.js +7 -4
- package/dist/esm/nano-components.js.map +1 -1
- package/dist/esm/nano-datalist_3.entry.js +30 -28
- package/dist/esm/nano-datalist_3.entry.js.map +1 -1
- package/dist/esm/nano-date-input.entry.js +7 -6
- package/dist/esm/nano-date-input.entry.js.map +1 -1
- package/dist/esm/nano-date-picker.entry.js +6 -5
- package/dist/esm/nano-date-picker.entry.js.map +1 -1
- package/dist/esm/nano-details.entry.js +7 -6
- package/dist/esm/nano-details.entry.js.map +1 -1
- package/dist/esm/nano-dialog.entry.js +7 -6
- package/dist/esm/nano-dialog.entry.js.map +1 -1
- package/dist/esm/nano-drawer.entry.js +9 -8
- package/dist/esm/nano-drawer.entry.js.map +1 -1
- package/dist/esm/nano-dropdown.entry.js +9 -7
- package/dist/esm/nano-dropdown.entry.js.map +1 -1
- package/dist/esm/nano-field-validator.entry.js +17 -15
- package/dist/esm/nano-field-validator.entry.js.map +1 -1
- package/dist/esm/nano-file-upload.entry.js +4 -3
- package/dist/esm/nano-file-upload.entry.js.map +1 -1
- package/dist/esm/nano-global-nav-user-profile_3.entry.js +23 -20
- package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
- package/dist/esm/nano-global-nav.entry.js +52 -50
- package/dist/esm/nano-global-nav.entry.js.map +1 -1
- package/dist/esm/nano-global-search-results.entry.js +10 -6
- package/dist/esm/nano-global-search-results.entry.js.map +1 -1
- package/dist/esm/nano-grid-item.entry.js +2 -2
- package/dist/esm/nano-grid_2.entry.js +6 -5
- package/dist/esm/nano-grid_2.entry.js.map +1 -1
- package/dist/esm/nano-hero.entry.js +7 -6
- package/dist/esm/nano-hero.entry.js.map +1 -1
- package/dist/esm/nano-icon-button_2.entry.js +6 -5
- package/dist/esm/nano-icon-button_2.entry.js.map +1 -1
- package/dist/esm/nano-icon.entry.js +4 -2
- package/dist/esm/nano-icon.entry.js.map +1 -1
- package/dist/esm/nano-input.entry.js +9 -7
- package/dist/esm/nano-input.entry.js.map +1 -1
- package/dist/esm/nano-intersection-observe.entry.js +3 -2
- package/dist/esm/nano-intersection-observe.entry.js.map +1 -1
- package/dist/esm/nano-menu-drawer.entry.js +10 -8
- package/dist/esm/nano-menu-drawer.entry.js.map +1 -1
- package/dist/esm/nano-more-less.entry.js +4 -3
- package/dist/esm/nano-more-less.entry.js.map +1 -1
- package/dist/esm/nano-overflow-nav.entry.js +7 -6
- package/dist/esm/nano-overflow-nav.entry.js.map +1 -1
- package/dist/esm/nano-progress-bar.entry.js +7 -4
- package/dist/esm/nano-progress-bar.entry.js.map +1 -1
- package/dist/esm/nano-range.entry.js +3 -1
- package/dist/esm/nano-range.entry.js.map +1 -1
- package/dist/esm/nano-rating.entry.js +7 -6
- package/dist/esm/nano-rating.entry.js.map +1 -1
- package/dist/esm/nano-resize-observe_2.entry.js +5 -4
- package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
- package/dist/esm/nano-slide.entry.js +3 -2
- package/dist/esm/nano-slide.entry.js.map +1 -1
- package/dist/esm/{nano-slides-c3eb1afe.js → nano-slides-2715825b.js} +15 -13
- package/dist/esm/nano-slides-2715825b.js.map +1 -0
- package/dist/esm/nano-slides.entry.js +3 -2
- package/dist/esm/nano-slides.entry.js.map +1 -1
- package/dist/esm/nano-sortable.entry.js +3 -2
- package/dist/esm/nano-sortable.entry.js.map +1 -1
- package/dist/esm/nano-spinner.entry.js +3 -2
- package/dist/esm/nano-spinner.entry.js.map +1 -1
- package/dist/esm/nano-split-pane.entry.js +3 -2
- package/dist/esm/nano-split-pane.entry.js.map +1 -1
- package/dist/esm/nano-sticker.entry.js +6 -5
- package/dist/esm/nano-sticker.entry.js.map +1 -1
- package/dist/esm/nano-tab-content.entry.js +5 -3
- package/dist/esm/nano-tab-content.entry.js.map +1 -1
- package/dist/esm/nano-tab-group.entry.js +16 -14
- package/dist/esm/nano-tab-group.entry.js.map +1 -1
- package/dist/esm/nano-tab.entry.js +4 -3
- package/dist/esm/nano-tab.entry.js.map +1 -1
- package/dist/esm/{nano-table-d15f6782.js → nano-table-4481d4e1.js} +42 -40
- package/dist/esm/nano-table-4481d4e1.js.map +1 -0
- package/dist/esm/nano-table.entry.js +4 -3
- package/dist/esm/nano-table.entry.js.map +1 -1
- package/dist/esm/{page-dots-986d3b32.js → page-dots-5b23db8c.js} +4 -3
- package/dist/esm/page-dots-5b23db8c.js.map +1 -0
- package/dist/esm/renderer-4bc3e2dc.js +58 -0
- package/dist/esm/renderer-4bc3e2dc.js.map +1 -0
- package/dist/esm/{scroll-f373a189.js → scroll-1afc6a4e.js} +2 -2
- package/dist/esm/{scroll-f373a189.js.map → scroll-1afc6a4e.js.map} +1 -1
- package/dist/esm/{table.worker-b7ee4edc.js → table.worker-1bc9c170.js} +5 -4
- package/dist/esm/table.worker-1bc9c170.js.map +1 -0
- package/dist/nano-components/{algolia-data-8fc24341.js → algolia-data-f0f72f1d.js} +2 -2
- package/dist/nano-components/app-globals-f0120bbe.js +5 -0
- package/dist/nano-components/app-globals-f0120bbe.js.map +1 -0
- package/dist/nano-components/{component-store-b798181b.js → component-store-199a9fd8.js} +2 -2
- package/dist/nano-components/{dom-d7f9f24c.js → dom-fafdec9a.js} +2 -2
- package/dist/nano-components/fade-ce1a4958.js +5 -0
- package/dist/nano-components/{fade-4ff5d9de.js.map → fade-ce1a4958.js.map} +1 -1
- package/dist/nano-components/form-control-f48fa873.js +5 -0
- package/dist/nano-components/form-control-f48fa873.js.map +1 -0
- package/dist/nano-components/fullscreen-52d62028.js +5 -0
- package/dist/nano-components/{fullscreen-382d7890.js.map → fullscreen-52d62028.js.map} +1 -1
- package/dist/nano-components/{index-3118109b.js → index-6cc72cd9.js} +3 -3
- package/dist/nano-components/index-6cc72cd9.js.map +1 -0
- package/dist/nano-components/{index-d7a4a150.js → index-f5f7b950.js} +2 -2
- package/dist/nano-components/index.esm.js +1 -1
- package/dist/nano-components/index.esm.js.map +1 -1
- package/dist/nano-components/lazyload-8ff69ba4.js +5 -0
- package/dist/nano-components/{lazyload-49b745e4.js.map → lazyload-8ff69ba4.js.map} +1 -1
- package/dist/nano-components/nano-accordion.entry.js +1 -1
- package/dist/nano-components/nano-accordion.entry.js.map +1 -1
- package/dist/nano-components/nano-alert.entry.js +1 -1
- package/dist/nano-components/nano-alert.entry.js.map +1 -1
- package/dist/nano-components/nano-algolia-filter.entry.js +1 -1
- package/dist/nano-components/nano-algolia-filter.entry.js.map +1 -1
- package/dist/nano-components/nano-algolia-pagination.entry.js +1 -1
- package/dist/nano-components/nano-algolia-results.entry.js +1 -1
- package/dist/nano-components/nano-algolia-results.entry.js.map +1 -1
- package/dist/nano-components/nano-algolia.entry.js +1 -1
- package/dist/nano-components/nano-algolia.entry.js.map +1 -1
- package/dist/nano-components/nano-animation.entry.js +1 -1
- package/dist/nano-components/nano-animation.entry.js.map +1 -1
- package/dist/nano-components/nano-checkbox-group.entry.js +1 -1
- package/dist/nano-components/nano-checkbox-group.entry.js.map +1 -1
- package/dist/nano-components/nano-checkbox.entry.js +1 -1
- package/dist/nano-components/nano-checkbox.entry.js.map +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-datalist_3.entry.js +1 -1
- package/dist/nano-components/nano-datalist_3.entry.js.map +1 -1
- package/dist/nano-components/nano-date-input.entry.js +1 -1
- package/dist/nano-components/nano-date-input.entry.js.map +1 -1
- package/dist/nano-components/nano-date-picker.entry.js +1 -1
- package/dist/nano-components/nano-date-picker.entry.js.map +1 -1
- package/dist/nano-components/nano-details.entry.js +1 -1
- package/dist/nano-components/nano-details.entry.js.map +1 -1
- package/dist/nano-components/nano-dialog.entry.js +1 -1
- package/dist/nano-components/nano-dialog.entry.js.map +1 -1
- package/dist/nano-components/nano-drawer.entry.js +1 -1
- package/dist/nano-components/nano-drawer.entry.js.map +1 -1
- package/dist/nano-components/nano-dropdown.entry.js +1 -1
- package/dist/nano-components/nano-dropdown.entry.js.map +1 -1
- package/dist/nano-components/nano-field-validator.entry.js +1 -1
- package/dist/nano-components/nano-field-validator.entry.js.map +1 -1
- package/dist/nano-components/nano-file-upload.entry.js +1 -1
- package/dist/nano-components/nano-file-upload.entry.js.map +1 -1
- package/dist/nano-components/nano-global-nav-user-profile_3.entry.js +1 -1
- package/dist/nano-components/nano-global-nav-user-profile_3.entry.js.map +1 -1
- package/dist/nano-components/nano-global-nav.entry.js +1 -1
- package/dist/nano-components/nano-global-nav.entry.js.map +1 -1
- package/dist/nano-components/nano-global-search-results.entry.js +1 -1
- package/dist/nano-components/nano-global-search-results.entry.js.map +1 -1
- package/dist/nano-components/nano-grid-item.entry.js +1 -1
- package/dist/nano-components/nano-grid-item.entry.js.map +1 -1
- package/dist/nano-components/nano-grid_2.entry.js +1 -1
- package/dist/nano-components/nano-grid_2.entry.js.map +1 -1
- package/dist/nano-components/nano-hero.entry.js +1 -1
- package/dist/nano-components/nano-hero.entry.js.map +1 -1
- package/dist/nano-components/nano-icon-button_2.entry.js +1 -1
- package/dist/nano-components/nano-icon-button_2.entry.js.map +1 -1
- package/dist/nano-components/nano-icon.entry.js +1 -1
- package/dist/nano-components/nano-icon.entry.js.map +1 -1
- package/dist/nano-components/nano-input.entry.js +1 -1
- package/dist/nano-components/nano-input.entry.js.map +1 -1
- package/dist/nano-components/nano-intersection-observe.entry.js +1 -1
- package/dist/nano-components/nano-intersection-observe.entry.js.map +1 -1
- package/dist/nano-components/nano-menu-drawer.entry.js +1 -1
- package/dist/nano-components/nano-menu-drawer.entry.js.map +1 -1
- package/dist/nano-components/nano-more-less.entry.js +1 -1
- package/dist/nano-components/nano-more-less.entry.js.map +1 -1
- package/dist/nano-components/nano-overflow-nav.entry.js +1 -1
- package/dist/nano-components/nano-overflow-nav.entry.js.map +1 -1
- package/dist/nano-components/nano-progress-bar.entry.js +1 -1
- package/dist/nano-components/nano-progress-bar.entry.js.map +1 -1
- package/dist/nano-components/nano-range.entry.js +1 -1
- package/dist/nano-components/nano-range.entry.js.map +1 -1
- package/dist/nano-components/nano-rating.entry.js +1 -1
- package/dist/nano-components/nano-rating.entry.js.map +1 -1
- package/dist/nano-components/nano-resize-observe_2.entry.js +1 -1
- package/dist/nano-components/nano-resize-observe_2.entry.js.map +1 -1
- package/dist/nano-components/nano-slide.entry.js +1 -1
- package/dist/nano-components/nano-slide.entry.js.map +1 -1
- package/dist/nano-components/{nano-slides-c3eb1afe.js → nano-slides-2715825b.js} +5 -5
- package/dist/nano-components/nano-slides-2715825b.js.map +1 -0
- package/dist/nano-components/nano-slides.entry.js +1 -1
- package/dist/nano-components/nano-sortable.entry.js +1 -1
- package/dist/nano-components/nano-sortable.entry.js.map +1 -1
- package/dist/nano-components/nano-spinner.entry.js +1 -1
- package/dist/nano-components/nano-spinner.entry.js.map +1 -1
- package/dist/nano-components/nano-split-pane.entry.js +1 -1
- package/dist/nano-components/nano-split-pane.entry.js.map +1 -1
- package/dist/nano-components/nano-sticker.entry.js +1 -1
- package/dist/nano-components/nano-sticker.entry.js.map +1 -1
- package/dist/nano-components/nano-tab-content.entry.js +1 -1
- package/dist/nano-components/nano-tab-content.entry.js.map +1 -1
- package/dist/nano-components/nano-tab-group.entry.js +1 -1
- package/dist/nano-components/nano-tab-group.entry.js.map +1 -1
- package/dist/nano-components/nano-tab.entry.js +1 -1
- package/dist/nano-components/nano-tab.entry.js.map +1 -1
- package/dist/nano-components/nano-table-4481d4e1.js +5 -0
- package/dist/nano-components/nano-table-4481d4e1.js.map +1 -0
- package/dist/nano-components/nano-table.entry.js +1 -1
- package/dist/nano-components/page-dots-5b23db8c.js +5 -0
- package/dist/nano-components/{page-dots-986d3b32.js.map → page-dots-5b23db8c.js.map} +1 -1
- package/dist/nano-components/renderer-4bc3e2dc.js +5 -0
- package/dist/nano-components/renderer-4bc3e2dc.js.map +1 -0
- package/dist/nano-components/{scroll-f373a189.js → scroll-1afc6a4e.js} +2 -2
- package/dist/nano-components/table.worker-1bc9c170.js +5 -0
- package/dist/stencil.config.js +1 -0
- package/dist/stencil.config.js.map +1 -1
- package/dist/types/global/script/global.d.ts +2 -0
- package/dist/types/index.d.ts +3 -2
- package/dist/types/utils/renderer.d.ts +27 -0
- package/docs-json.json +1 -12
- package/hydrate/index.js +453 -393
- package/hydrate/index.mjs +453 -393
- package/package.json +1 -1
- package/dist/cjs/app-globals-93d8b419.js +0 -39
- package/dist/cjs/app-globals-93d8b419.js.map +0 -1
- package/dist/cjs/fade-2dd9dd8b.js.map +0 -1
- package/dist/cjs/form-control-2d88adb2.js +0 -82
- package/dist/cjs/form-control-2d88adb2.js.map +0 -1
- package/dist/cjs/fullscreen-5d0422de.js.map +0 -1
- package/dist/cjs/index-b6fa04fa.js.map +0 -1
- package/dist/cjs/lazyload-f181cb37.js.map +0 -1
- package/dist/cjs/nano-slides-612634dc.js.map +0 -1
- package/dist/cjs/nano-table-99d6a3cc.js.map +0 -1
- package/dist/cjs/page-dots-99dd88f6.js.map +0 -1
- package/dist/cjs/table.worker-263468df.js.map +0 -1
- package/dist/esm/app-globals-d4ab01f2.js +0 -37
- package/dist/esm/app-globals-d4ab01f2.js.map +0 -1
- package/dist/esm/fade-4ff5d9de.js.map +0 -1
- package/dist/esm/form-control-812999d0.js.map +0 -1
- package/dist/esm/fullscreen-382d7890.js.map +0 -1
- package/dist/esm/index-3118109b.js.map +0 -1
- package/dist/esm/lazyload-49b745e4.js.map +0 -1
- package/dist/esm/nano-slides-c3eb1afe.js.map +0 -1
- package/dist/esm/nano-table-d15f6782.js.map +0 -1
- package/dist/esm/page-dots-986d3b32.js.map +0 -1
- package/dist/esm/table.worker-b7ee4edc.js.map +0 -1
- package/dist/nano-components/app-globals-d4ab01f2.js +0 -5
- package/dist/nano-components/app-globals-d4ab01f2.js.map +0 -1
- package/dist/nano-components/fade-4ff5d9de.js +0 -5
- package/dist/nano-components/form-control-812999d0.js +0 -5
- package/dist/nano-components/form-control-812999d0.js.map +0 -1
- package/dist/nano-components/fullscreen-382d7890.js +0 -5
- package/dist/nano-components/index-3118109b.js.map +0 -1
- package/dist/nano-components/lazyload-49b745e4.js +0 -5
- package/dist/nano-components/nano-slides-c3eb1afe.js.map +0 -1
- package/dist/nano-components/nano-table-d15f6782.js +0 -5
- package/dist/nano-components/nano-table-d15f6782.js.map +0 -1
- package/dist/nano-components/page-dots-986d3b32.js +0 -5
- package/dist/nano-components/table.worker-b7ee4edc.js +0 -5
- /package/dist/nano-components/{algolia-data-8fc24341.js.map → algolia-data-f0f72f1d.js.map} +0 -0
- /package/dist/nano-components/{component-store-b798181b.js.map → component-store-199a9fd8.js.map} +0 -0
- /package/dist/nano-components/{dom-d7f9f24c.js.map → dom-fafdec9a.js.map} +0 -0
- /package/dist/nano-components/{index-d7a4a150.js.map → index-f5f7b950.js.map} +0 -0
- /package/dist/nano-components/{scroll-f373a189.js.map → scroll-1afc6a4e.js.map} +0 -0
- /package/dist/nano-components/{table.worker-b7ee4edc.js.map → table.worker-1bc9c170.js.map} +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/custom-element-doc-generator.d.ts +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/generate-vue-component.d.ts +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/index.d.ts +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/output-vue.d.ts +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/plugin.d.ts +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/types.d.ts +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/utils.d.ts +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/stencil.config.d.ts +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/stencil.config.prod.d.ts +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/testing/mocks/intersection-observer.d.ts +0 -0
- /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/wdio.conf.d.ts +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"algolia.js","sourceRoot":"","sources":["../../../../src/components/algolia/algolia.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n h,\n Element,\n Host,\n Prop,\n Watch,\n State,\n Listen,\n Method,\n EventEmitter,\n Event,\n Build,\n writeTask,\n ComponentInterface,\n readTask,\n} from '@stencil/core';\nimport algoliasearch from 'algoliasearch/dist/algoliasearch-lite.esm.browser';\nimport { getDirectChildren } from '../../utils/dom';\nimport { PromiseQueue } from '../../utils/promise-queue';\nimport {\n ComponentStore,\n StorageMethods,\n} from '../../utils/store/component-store';\nimport { debounce } from '../../utils/throttle';\nimport { Squirrel } from './lib/template';\nimport { Universe, SearchChangeEvent } from './algolia-data';\nimport type {\n SearchClient as AlgoliaClient,\n SearchIndex as AlgoliaIndex,\n} from 'algoliasearch/lite';\nimport type {\n AlgoliaMultiResult,\n IndexResult,\n AlgoliaResultHit,\n PageChangeEventDetail,\n SearchIndex,\n FilterChangeEventDetail,\n AlgoliaFacet,\n AppliedFilter,\n} from './algolia-interface';\n\ninterface FacetFilterQueryBlock {\n or: Array<string>;\n and: Array<string>;\n not: Array<string>;\n name: string;\n}\ninterface FacetFilter extends FilterChangeEventDetail {\n element: HTMLNanoAlgoliaFilterElement;\n}\ntype FilterGroup = { [prop: string]: FacetFilter };\n\n/**\n * Algolia search container to contain and sync nano-algolia-results and nano-algolia-filter components.\n * @slot search-input - optional. Should contain an `input` or `nano-input` component.\n * @slot loader - optional. Elements to show when search results are loading.\n * @slot template - optional. Template string (format depends on 'tplEngine' property). May contain other algolia-... components with nested templates.\n * @slot output - Search result output. Will be a placeholder for template output or optionally nest algolia-... components.\n */\n@Component({\n tag: 'nano-algolia',\n shadow: true,\n styleUrl: 'algolia.scss',\n})\nexport class Algolia implements ComponentInterface {\n /* eslint-disable @stencil-community/strict-mutable */\n // filters that have an initial value\n private staticFacetFilters: FilterGroup = {};\n private dynFacetFilters: FilterGroup = {};\n private tplSlot: HTMLElement;\n private outputSlot: HTMLElement;\n private slottedInput: HTMLElement;\n private hasLoadSlot: boolean = false;\n private resultsDiv: HTMLDivElement;\n private defaultDiv: HTMLDivElement;\n private tpl: string;\n private facets: AlgoliaFacet;\n private placedAlgoliaEles: Element[] = [];\n private algoliaClient: AlgoliaClient;\n // lots of stuff happens asynchronously. This makes sure they fire in the correct order\n private promiseQueue = new PromiseQueue();\n\n @Element() host: HTMLNanoAlgoliaElement;\n\n // Internal state\n\n // filters that change via a template. They have no initial value\n @State() _dynFacetFilters: FilterGroup = {};\n @State() inputField: HTMLNanoInputElement | HTMLInputElement;\n @State() algoliaIndex: AlgoliaIndex;\n @State() indeces: IndexResult[] = [];\n @State() indexResults: IndexResult;\n @State() filterChanged: string = '';\n @State() currentHits: AlgoliaResultHit[];\n @State() changeEvent: SearchChangeEvent = SearchChangeEvent.Init;\n @State() isLoading: boolean = false;\n @State() wormholeState: any = this;\n\n // Public props\n\n /**\n * Show the result panel. By default it will automatically show when the result receives new hits.\n */\n @Prop({ mutable: true }) showResults: boolean = false;\n\n /**\n * The current algolia page of results currently being viewed or to get.\n */\n @Prop({ mutable: true }) resultsPage: number = 0;\n\n /**\n * An Algolia App ID key. Used in conjunction with 'searchIndex' & 'apiKey'.\n */\n @Prop({ mutable: true }) appId: string;\n\n /**\n * An Algolia API Key. Used in conjunction with 'searchIndex' & 'appId'.\n */\n @Prop({ mutable: true }) apiKey: string;\n\n /**\n * Algolia search index. Used in conjunction with 'apiKey' & 'appId'.\n * ```\n * { index: string, // algolia index name\n * domain?: string, // used in template filters to resolve incomplete url fields\n * filters?: [string], // algolia facets to retrive\n * hitsPerPage?: number,\n * name?: string // human readable index name\n * }\n * ```\n */\n @Prop({ mutable: true }) searchIndex: SearchIndex = {} as SearchIndex;\n\n /**\n * Algolia search index name. Alternative to 'searchIndex'.\n * A simplified shortcut for setting an index.\n * Properties such as hitsPerPage and facets will come from the algolia index\n */\n @Prop({ mutable: true }) searchIndexName: string = '';\n\n /**\n * JS querySelector string of a `nano-input` / `input` element from which\n * to listen to `nano-change` or `change` events and change the `query` prop.\n * Not required if an appropriate field is in the 'search-input' slot\n */\n @Prop() listenTo?: string = null;\n\n @Watch('listenTo')\n handleListenToChange() {\n if (!this.listenTo) return;\n\n const foundInput = document.querySelector(this.listenTo);\n if (\n ['nano-input', 'input'].includes(foundInput.tagName.toLocaleLowerCase())\n ) {\n this.inputField = foundInput as HTMLNanoInputElement;\n }\n }\n\n /**\n * The query string used to search the index. Will automatically be set with any slotted\n * `search-input` input elements or from elements linked to from `listen-to`\n */\n @Prop({ mutable: true }) query: string = '';\n\n /**\n * The external operator joining filter values.\n */\n @Prop() operator: 'or' | 'and' = 'and';\n\n /**\n * Query filters to apply to all searches.\n * Refer to https://www.algolia.com/doc/api-reference/api-parameters/filters for format.\n */\n @Prop() filters: Array<string> = [];\n\n /**\n * Template engine render function to use when rendering results and filters.\n * Defaults to Squirrel v8's render (https://squirrelly.js.org/).\n */\n @Prop() tplRenderFn: (...args: any[]) => any = Squirrel.render;\n\n /**\n * Changes the index without removing any current filters. Most appropriate for algolia replicas.\n */\n @Prop({ mutable: true }) replicaIndex: string = '';\n\n /**\n * Will maintain a search all / '*' on init and reset allowing for a view\n * then filter experience rather than a search first experience\n */\n @Prop({ mutable: true }) browseIndex: boolean = false;\n\n /**\n * Minimum number of characters before performing a search\n */\n @Prop() minChars: number = 2;\n\n /**\n * Store search queries (against this ID) to the component store.\n * Use in conjunction with storeMethod\n */\n @Prop() storeId?: string;\n\n /**\n * The method of storage.\n * Either session storage, url hash (after the '#') or url query (after the '?').\n */\n @Prop() storeMethod: StorageMethods = 'session';\n\n // Events\n\n /**\n * Emitted when the algolia element has been created.\n */\n @Event() nanoDidLoad!: EventEmitter<HTMLNanoAlgoliaElement>;\n\n /**\n * Emitted when results and all filters are shown and have loaded.\n */\n @Event({ bubbles: false }) nanoResultsShown!: EventEmitter<{\n meta: IndexResult;\n client: { apiKey: string; appId: string };\n }>;\n\n /**\n * Emitted before an algolia search.\n */\n @Event() nanoBeforeQuery!: EventEmitter<IndexResult>;\n\n /**\n * Emitted after an algolia search.\n */\n @Event() nanoAfterQuery!: EventEmitter<IndexResult>;\n\n /**\n * Emitted after an results have been updated\n */\n @Event() nanoNewResults!: EventEmitter<IndexResult>;\n\n // Public methods\n\n /**\n * @param facetName - will clear all filter selections of that type\n * @param facetValue - will remove a single filter selection\n * Remove facet filters (as set from nano-algolia-filter elements).\n * The omission or both will remove all facet filters\n */\n @Method()\n async removeFilters(facetName?: string, facetValue?: string) {\n if (!facetName && !facetValue) this.clearAllFacetFilters();\n else {\n Object.keys(this._dynFacetFilters).forEach((filterId) => {\n if (\n facetName &&\n this._dynFacetFilters[filterId].facetName === facetName\n ) {\n if (!facetValue) this._dynFacetFilters[filterId].element.value = '';\n else {\n this._dynFacetFilters[filterId].element.value =\n this._dynFacetFilters[filterId].value.filter(\n (val) => val !== facetValue\n );\n }\n }\n });\n }\n }\n\n // Listeners to external events\n\n // a child nano-algolia-... updated their template\n @Listen('nanoTplUpdated')\n onAllTplUpdate(ev: CustomEvent & { target: HTMLElement }) {\n ev.stopPropagation();\n\n if (ev.target.tagName === 'NANO-ALGOLIA-RESULTS') {\n requestAnimationFrame(() => {\n this.nanoNewResults.emit(this.indexResults);\n });\n }\n }\n\n // a nano-algolia-pagination or nano-algolia-results changed the page\n @Listen('nanoPageChanged')\n async onPageChange(ev?: CustomEvent) {\n if (!this.indexResults) return;\n let page = this.resultsPage;\n if (ev) {\n ev.stopPropagation();\n page = (ev.detail as PageChangeEventDetail).page;\n }\n\n page = Math.min(this.indexResults.totalPages - 1, page);\n page = Math.max(page, 0);\n\n if (this.indexResults.currentPage === page) return;\n\n this.indexResults.currentPage = page;\n await this.algoliaSearch(SearchChangeEvent.Page);\n }\n\n /**\n * nano-algolia-filter changed value.\n * If that happened before a indexResults were setup, it was a static filter.\n * Static filters persist accross search changes\n */\n @Listen('nanoFilterChanged')\n async onFilterChange(ev: CustomEvent) {\n ev.stopPropagation();\n\n const dynFilterObj: FilterGroup = {};\n const filter = ev.detail as FacetFilter;\n filter.element = ev.target as HTMLNanoAlgoliaFilterElement;\n\n if (this.indexResults) {\n if (this.staticFacetFilters[filter.filterId])\n this.staticFacetFilters[filter.filterId] = filter;\n else {\n dynFilterObj[filter.filterId] = filter;\n this._dynFacetFilters = { ...this._dynFacetFilters, ...dynFilterObj };\n }\n\n this.indexResults.appliedFilters = this.makeAppliedFilters();\n } else this.staticFacetFilters[filter.filterId] = filter;\n\n this.filterChanged =\n filter.value && filter.value.length ? filter.filterId : 'all';\n\n this.resetPage();\n this.algoliaSearch(SearchChangeEvent.Filter);\n }\n\n // Internal state watchers\n\n // Filters can fire a change event, cause a re-render then get detached.\n // This can cause filter dupes. Check to see if the original element is still in the DOM.\n @Watch('_dynFacetFilters')\n dynFacetFiltersChange() {\n Object.values(this._dynFacetFilters).forEach((filter) => {\n if (this.host.ownerDocument === filter.element.ownerDocument)\n this.dynFacetFilters[filter.filterId] = filter;\n else delete this.dynFacetFilters[filter.filterId];\n });\n }\n\n @Watch('browseIndex')\n browseIndexChange() {\n if (\n this.browseIndex &&\n (!this.query || this.query.length < this.minChars)\n ) {\n this.query = '*';\n }\n }\n\n @Watch('inputField')\n inputFieldSet() {\n if (!this.inputField) return;\n if (\n this.query !== '*' &&\n this.inputField &&\n this.inputField.value !== this.query\n )\n this.inputField.value = this.query;\n }\n\n @Watch('query')\n queryChange() {\n this.searchChange();\n }\n private searchChange = async () => {\n if (!this.algoliaIndex) return;\n\n if (!this.query || this.query.length < this.minChars) {\n if (!this.browseIndex) {\n if (!this.query || this.query.length === 0) {\n this.handleSearchReset();\n return;\n } else return;\n } else if (this.query !== '*') {\n this.query = '*';\n return;\n }\n }\n // Do an initialise search (setup searchIndex)\n this.isLoading = true;\n\n setTimeout(async () => {\n // Clear dynamic filters and reset page\n this.resetPage();\n\n await this.algoliaSearch(SearchChangeEvent.Init);\n // Populate master content - optionally from template\n await this.updateContent();\n\n setTimeout((_) => (this.isLoading = false), 800);\n this.showResults = true;\n this.nanoResultsShown.emit({\n meta: this.indexResults,\n client: { appId: this.appId, apiKey: this.apiKey },\n });\n }, 200);\n };\n\n @Watch('replicaIndex')\n async internalIndexSwitch() {\n if (\n !this.replicaIndex ||\n !this.indexResults ||\n this.indexResults.index === this.replicaIndex\n )\n return;\n this.indexResults.index = this.replicaIndex;\n this.algoliaIndex = this.algoliaClient.initIndex(this.indexResults.index);\n this.resetPage();\n this.algoliaSearch(SearchChangeEvent.Replica);\n }\n\n @Watch('resultsPage')\n pageChange() {\n this.onPageChange();\n }\n\n @Watch('searchIndexName')\n searchIndexNameChange() {\n if (\n !this.searchIndexName ||\n !this.searchIndexName.length ||\n (this.searchIndex && this.searchIndex.index === this.searchIndexName)\n )\n return;\n this.searchIndex = { index: this.searchIndexName };\n }\n\n @Watch('apiKey')\n @Watch('appId')\n initAlgoliaClient() {\n if (!this.appId || !this.apiKey) return;\n this.algoliaClient = algoliasearch(this.appId, this.apiKey);\n }\n\n @Watch('searchIndex')\n initAlgoliaIndex() {\n if (!this.algoliaClient || !this.searchIndex) return;\n if (this.searchIndex.index) {\n if (!this.searchIndex.hitsPerPage) this.searchIndex.hitsPerPage = 100;\n if (this.replicaIndex) this.searchIndex.index = this.replicaIndex;\n this.searchIndexName = this.searchIndex.index;\n this.algoliaIndex = this.algoliaClient.initIndex(this.searchIndex.index);\n this.searchChange();\n }\n }\n\n @Watch('showResults')\n showResultsChange() {\n if (!this.resultsDiv || !this.defaultDiv) return;\n\n if (this.showResults) {\n this.resultsDiv.style.width = this.host.scrollWidth + 'px';\n this.resultsDiv.style.minHeight = this.host.scrollHeight + 'px';\n\n writeTask(() => {\n this.resultsDiv.addEventListener('transitionend', this.onResultDisplay);\n this.resultsDiv.style.display = 'block';\n setTimeout(() => this.resultsDiv.classList.add('show'), 50);\n });\n } else {\n writeTask(() => {\n this.resultsDiv.classList.remove('shown');\n this.defaultDiv.style.display = 'block';\n setTimeout(() => {\n this.resultsDiv.addEventListener(\n 'transitionend',\n this.onResultDisplay\n );\n this.resultsDiv.classList.remove('show');\n\n if (this.slottedInput)\n this.slottedInput.focus({ preventScroll: true });\n else this.defaultDiv.focus({ preventScroll: true });\n }, 50);\n });\n }\n }\n\n @Watch('filters')\n handleFilterpropChange() {\n this.algoliaSearch(SearchChangeEvent.Init);\n }\n\n // Internal methods\n\n private fixDomain(results: AlgoliaMultiResult) {\n if (!this.searchIndex || !this.searchIndex.domain) return results;\n results.hits.map((hit) => {\n if (hit.url && !hit.url.match(/^http/))\n hit.url = location.protocol + '//' + this.searchIndex.domain + hit.url;\n });\n return results;\n }\n\n // Takes all current filters (dynamic and static)\n // and merges common filters' values togther\n private makeAppliedFilters = (): AppliedFilter[] => {\n const appliedFtrs: AppliedFilter[] = [];\n\n const makeAppliedFilter = (facetFilters: {\n [prop: string]: FacetFilter;\n }) => {\n Object.values(facetFilters).forEach((filter) => {\n if (filter.value && filter.value.length) {\n const found = appliedFtrs.find(\n (appFilter) => appFilter.name === filter.facetName\n );\n if (!found)\n appliedFtrs.push({\n name: filter.facetName,\n values: [...filter.value],\n });\n else found.values = [...found.values, ...filter.value];\n }\n });\n };\n makeAppliedFilter(this.dynFacetFilters);\n makeAppliedFilter(this.staticFacetFilters);\n\n if (appliedFtrs.length) return appliedFtrs;\n return null;\n };\n\n // Queue up a search\n private algoliaSearch = async (eventType: SearchChangeEvent) => {\n return this.promiseQueue.enqueue(() => this.queueSearch(eventType));\n };\n\n // Do a search\n private queueSearch = async (eventType: SearchChangeEvent) => {\n if (\n !this.algoliaIndex ||\n !this.query ||\n !this.searchIndex ||\n !this.searchIndex.index\n )\n return;\n\n this.nanoBeforeQuery.emit(this.indexResults);\n\n // clear all facet filters on init (new query)\n if (SearchChangeEvent.Init === eventType) this.clearAllFacetFilters();\n\n const searchParams: any = {\n filters: this.algoliaFilterStr(),\n page: this.indexResults ? this.indexResults.currentPage : 0,\n clickAnalytics: true,\n };\n\n if (this.searchIndex.filters)\n searchParams.facets = this.searchIndex.filters;\n if (this.searchIndex.hitsPerPage)\n searchParams.hitsPerPage = this.searchIndex.hitsPerPage;\n\n let result = (await this.algoliaIndex.search(\n this.query,\n searchParams\n )) as AlgoliaMultiResult;\n result = this.fixDomain(result);\n\n // set event type - this informs children components why things changed\n this.changeEvent = eventType;\n\n // Setup initial meta on new queries. Some of it should not change on filter / pagination\n if (eventType === SearchChangeEvent.Init || !this.indexResults) {\n this.indexResults = {\n queryID: result.queryID,\n currentPage: 0,\n totalHits: result.nbHits,\n hitsPerPage: null,\n origFilters: result.facets,\n query: this.query,\n domain: this.searchIndex.domain || null,\n totalHitsWithFilters: 0,\n results: [],\n totalPages: 0,\n appliedFilters: this.makeAppliedFilters(),\n indexName: this.searchIndex.name || null,\n index: this.searchIndex.index,\n searchIndex: this.searchIndex,\n };\n }\n\n this.indexResults.dynFilters = result.facets;\n this.indexResults.results = result.hits;\n this.indexResults.totalHitsWithFilters = result.nbHits;\n this.indexResults.currentPage = result.page;\n this.indexResults.totalPages = result.nbPages;\n this.indexResults.hitsPerPage = result.hitsPerPage;\n this.indexResults.query = result.query;\n // console.log('I GOT NEW RESULTS', eventType, this.query, this.algoliaFilterStr(), this.indexResults.results.length, this.indexResults.currentPage )\n\n if (\n this.changeEvent !== SearchChangeEvent.Page &&\n this.changeEvent !== SearchChangeEvent.Replica\n ) {\n this.facets = result.facets;\n }\n this.nanoAfterQuery.emit(this.indexResults);\n\n // current hits and page will cause re-renders in children components.\n // Wait a tick before firing otherwise events can fire in the wrong order\n return new Promise((resolve) => {\n setTimeout(() => resolve('tpl updated'), 20);\n }).then((_) => {\n this.currentHits = this.indexResults.results;\n this.resultsPage = this.indexResults.currentPage;\n });\n };\n\n private resetPage() {\n if (!this.indexResults) return;\n this.indexResults.currentPage = 0;\n }\n\n private clearAllFacetFilters() {\n Object.values(this._dynFacetFilters).forEach((filter) => {\n filter.element.value = '';\n });\n this._dynFacetFilters = {};\n }\n\n private algoliaFilterStr() {\n // groups applied facet filters (from algolia-filter components)\n // with their applied, 'internal' operators (and, or, not)\n\n const facetFilterObj: { [prop: string]: FacetFilterQueryBlock } = {};\n\n const groupFilters = (facetFilters: { [prop: string]: FacetFilter }) => {\n let filter: FilterChangeEventDetail;\n let filterOp: Array<string>;\n\n Object.keys(facetFilters).forEach((filterId) => {\n filter = facetFilters[filterId];\n facetFilterObj[filterId] = facetFilterObj[filterId] || {\n name: filter.facetName,\n or: [],\n and: [],\n not: [],\n };\n\n filterOp = facetFilterObj[filterId][filter.operator];\n if (filter.value && filter.value.length) {\n facetFilterObj[filterId][filter.operator] = [\n ...filterOp,\n ...filter.value,\n ];\n }\n });\n };\n\n groupFilters(this.dynFacetFilters);\n groupFilters(this.staticFacetFilters);\n\n const formatVal = (name: string, val: string) => {\n if (val.indexOf(' ') > -1) return name + ':\"' + val + '\"';\n else return name + ':' + val;\n };\n let filterStrParts: Array<string> = [];\n let operatorGrp: FacetFilterQueryBlock;\n let filterName: string;\n // let processedFilters: string[] = [];\n\n // joins all applied facet filter operator groups with the set 'outer'\n // operator into an algolia filter query string\n Object.values(facetFilterObj).forEach(function (filter) {\n Object.keys(filter)\n .filter((filterProp) => filterProp.match(/(or|and|not)/))\n .forEach((operator) => {\n operatorGrp = filter;\n filterName = filter.name;\n\n if (operator === 'or' || operator === 'and') {\n if (operatorGrp[operator].length) {\n filterStrParts.push(\n '( \\\n ' +\n operatorGrp[operator]\n .map((val) => {\n if (val.length) return formatVal(filterName, val);\n })\n .join(' ' + operator.toLocaleUpperCase() + ' ') +\n ' \\\n )'\n );\n }\n } else {\n if (operatorGrp.not.length) {\n filterStrParts.push(\n '( \\\n ' +\n operatorGrp[operator]\n .map((val) => {\n if (val.length)\n return 'NOT ' + formatVal(filterName, val);\n })\n .join(' AND ') +\n ' \\\n )'\n );\n }\n }\n });\n });\n\n // add in any static applied filters from filters prop\n filterStrParts = [...this.filters, ...filterStrParts];\n // console.log('filterStr:', filterStrParts.join(' ' + this.operator.toLocaleUpperCase() + ' '))\n return filterStrParts.join(' ' + this.operator.toLocaleUpperCase() + ' ');\n }\n\n @Listen('nanoChange', { target: 'body' })\n @Listen('change', { target: 'body' })\n handleInputChange(ev: CustomEvent | (Event & { target: HTMLElement })) {\n if (ev.target !== this.inputField) return;\n this.query = this.inputField.value;\n }\n\n private handleSearchReset = () => {\n this.showResults = false;\n this.indexResults = null;\n };\n\n private onResultDisplay = () => {\n writeTask(() => {\n this.resultsDiv.removeEventListener(\n 'transitionend',\n this.onResultDisplay\n );\n if (!this.showResults) this.resultsDiv.style.display = 'none';\n else {\n this.defaultDiv.style.display = 'none';\n this.resultsDiv.classList.add('shown');\n this.resultsDiv.style.minHeight = '';\n this.resultsDiv.style.width = '';\n }\n });\n };\n\n private async updateContent() {\n return this.promiseQueue.enqueue(() => this.updateContentQueue());\n }\n\n private async updateContentQueue() {\n const outputTo = this.outputSlot || this.resultsDiv;\n\n if (!outputTo || !this.tpl) return 'no tpl';\n\n const tmpCont = document.createElement('div');\n tmpCont.innerHTML = this.tpl;\n\n const algoliaEles: Element[] = [];\n this.placedAlgoliaEles = [];\n\n // take out children algolia elements 'cos they have their own templates\n // don't want to swap in their templates\n Array.from(\n tmpCont.querySelectorAll(\n 'nano-algolia, nano-algolia-filter, nano-algolia-results'\n )\n ).forEach((el, i) => {\n const placeholder = document.createElement('div');\n placeholder.dataset.placeholderId = i.toString();\n placeholder.classList.add('nano-ele-placeholder');\n algoliaEles.push(el);\n el.parentNode.replaceChild(placeholder, el);\n });\n\n // swap in template content\n // (all this nonsense htmlencodes any < or >)\n\n outputTo.innerHTML = this.tplRenderFn(\n tmpCont.innerHTML\n .replace(/>/gm, '>')\n .replace(/</gm, '<')\n .replace(/&/gm, '&'),\n this.indexResults\n );\n\n // put back in algolia elements\n Array.from(outputTo.querySelectorAll('div.nano-ele-placeholder')).forEach(\n (el: HTMLDivElement) => {\n el.parentNode.replaceChild(\n algoliaEles[parseInt(el.dataset.placeholderId)],\n el\n );\n this.placedAlgoliaEles.push(\n algoliaEles[parseInt(el.dataset.placeholderId)]\n );\n }\n );\n\n if (!this.placedAlgoliaEles.length) return Promise.resolve('algolia setup');\n\n // wait for all children algolia elements to resolve before calling 'done'\n return new Promise((resolve) => {\n const childrenResolver = (ev: CustomEvent) => {\n this.placedAlgoliaEles = this.placedAlgoliaEles.filter(\n (ele) => ele !== (ev.detail as HTMLElement)\n );\n if (!this.placedAlgoliaEles.length) {\n setTimeout(() => resolve('tpl updated'), 500);\n outputTo.removeEventListener('nanoTplUpdated', childrenResolver);\n }\n };\n outputTo.addEventListener('nanoTplUpdated', childrenResolver);\n });\n }\n\n // Stencil hooks\n\n componentWillLoad() {\n readTask((_) => {\n this.tplSlot = getDirectChildren(this.host, '[slot=\"template\"]')[0];\n this.outputSlot = getDirectChildren(this.host, '[slot=\"output\"]')[0];\n this.slottedInput = getDirectChildren(\n this.host,\n '[slot=\"search-input\"]'\n )[0];\n this.hasLoadSlot = !!getDirectChildren(this.host, '[slot=\"loader\"]')[0];\n if (this.tplSlot)\n this.tpl = this.tplSlot.innerHTML || this.tplSlot.innerText;\n\n // get input field to listen to\n if (\n this.slottedInput &&\n (this.slottedInput.tagName.toLocaleLowerCase() === 'nano-input' ||\n this.slottedInput instanceof HTMLInputElement)\n ) {\n this.inputField = this.slottedInput as HTMLNanoInputElement;\n } else if (this.slottedInput) {\n this.inputField = this.slottedInput.querySelector(\n 'nano-input, input:not([type=\"radio\"]):not([type=\"checkbox\"])'\n );\n } else this.handleListenToChange();\n\n writeTask((_) => {\n if (this.showResults && this.tpl) this.searchChange();\n });\n });\n\n this.searchIndexNameChange();\n this.initAlgoliaClient();\n this.initAlgoliaIndex();\n\n // Create wormwhole shared 'universe' (https://github.com/mihar-22/stencil-wormhole)\n Universe.create(this, this.wormholeState);\n\n if (this.storeId) {\n ComponentStore.init(\n this,\n ['query', 'replicaIndex'],\n this.storeMethod,\n this.storeId\n );\n ComponentStore.init(\n this,\n ['apiKey', 'appId', 'searchIndex'],\n 'session',\n this.storeId + '_api'\n );\n }\n this.internalIndexSwitch();\n }\n\n connectedCallback() {\n this.searchChange = debounce(this.searchChange, 300);\n this.browseIndexChange();\n\n if (!Build.isBrowser) return;\n this.host.dispatchEvent(\n new CustomEvent('nanoDidLoad', {\n detail: this.host,\n })\n );\n }\n\n render() {\n const wormholeState = {\n indexResults: this.indexResults,\n results: this.currentHits,\n filterChanged: this.filterChanged,\n tplRenderFn: this.tplRenderFn,\n resultsPage: this.resultsPage,\n changeEvent: this.changeEvent,\n facets: this.facets,\n algoliaIndex: this.algoliaIndex,\n searchIndex: this.searchIndex,\n globalStoreMethod: this.storeMethod,\n isLoading: this.isLoading,\n };\n return (\n <Host\n class={{\n 'show-results': this.showResults,\n 'is-loading': this.isLoading,\n }}\n aria-busy={this.isLoading}\n >\n {this.hasLoadSlot && (\n <div hidden={!this.isLoading}>\n <slot name=\"loader\" />\n </div>\n )}\n {!this.hasLoadSlot && (\n <div\n class={{\n loader: true,\n loading: this.isLoading,\n }}\n >\n <nano-spinner overlay type=\"circle\"></nano-spinner>\n </div>\n )}\n\n <Universe.Provider state={wormholeState}>\n <slot name=\"search-input\"></slot>\n <div class=\"results-container\" aria-live=\"polite\">\n <div ref={(div) => (this.resultsDiv = div)} class=\"results\">\n <slot name=\"output\" />\n </div>\n </div>\n </Universe.Provider>\n\n <div\n ref={(div) => (this.defaultDiv = div)}\n class=\"default\"\n tabindex=\"-1\"\n >\n <slot />\n </div>\n </Host>\n );\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"algolia.js","sourceRoot":"","sources":["../../../../src/components/algolia/algolia.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Host,\n Prop,\n Watch,\n State,\n Listen,\n Method,\n EventEmitter,\n Event,\n Build,\n writeTask,\n ComponentInterface,\n readTask,\n} from '@stencil/core';\nimport algoliasearch from 'algoliasearch/dist/algoliasearch-lite.esm.browser';\nimport { getDirectChildren } from '../../utils/dom';\nimport { PromiseQueue } from '../../utils/promise-queue';\nimport {\n ComponentStore,\n StorageMethods,\n} from '../../utils/store/component-store';\nimport { debounce } from '../../utils/throttle';\nimport { transformTag, h } from '../../utils/renderer';\nimport { Squirrel } from './lib/template';\nimport { Universe, SearchChangeEvent } from './algolia-data';\nimport type {\n SearchClient as AlgoliaClient,\n SearchIndex as AlgoliaIndex,\n} from 'algoliasearch/lite';\nimport type {\n AlgoliaMultiResult,\n IndexResult,\n AlgoliaResultHit,\n PageChangeEventDetail,\n SearchIndex,\n FilterChangeEventDetail,\n AlgoliaFacet,\n AppliedFilter,\n} from './algolia-interface';\n\ninterface FacetFilterQueryBlock {\n or: Array<string>;\n and: Array<string>;\n not: Array<string>;\n name: string;\n}\ninterface FacetFilter extends FilterChangeEventDetail {\n element: HTMLNanoAlgoliaFilterElement;\n}\ntype FilterGroup = { [prop: string]: FacetFilter };\n\n/**\n * Algolia search container to contain and sync nano-algolia-results and nano-algolia-filter components.\n * @slot search-input - optional. Should contain an `input` or `nano-input` component.\n * @slot loader - optional. Elements to show when search results are loading.\n * @slot template - optional. Template string (format depends on 'tplEngine' property). May contain other algolia-... components with nested templates.\n * @slot output - Search result output. Will be a placeholder for template output or optionally nest algolia-... components.\n */\n@Component({\n tag: 'nano-algolia',\n shadow: true,\n styleUrl: 'algolia.scss',\n})\nexport class Algolia implements ComponentInterface {\n /* eslint-disable @stencil-community/strict-mutable */\n // filters that have an initial value\n private staticFacetFilters: FilterGroup = {};\n private dynFacetFilters: FilterGroup = {};\n private tplSlot: HTMLElement;\n private outputSlot: HTMLElement;\n private slottedInput: HTMLElement;\n private hasLoadSlot: boolean = false;\n private resultsDiv: HTMLDivElement;\n private defaultDiv: HTMLDivElement;\n private tpl: string;\n private facets: AlgoliaFacet;\n private placedAlgoliaEles: Element[] = [];\n private algoliaClient: AlgoliaClient;\n // lots of stuff happens asynchronously. This makes sure they fire in the correct order\n private promiseQueue = new PromiseQueue();\n\n @Element() host: HTMLNanoAlgoliaElement;\n\n // Internal state\n\n // filters that change via a template. They have no initial value\n @State() _dynFacetFilters: FilterGroup = {};\n @State() inputField: HTMLNanoInputElement | HTMLInputElement;\n @State() algoliaIndex: AlgoliaIndex;\n @State() indeces: IndexResult[] = [];\n @State() indexResults: IndexResult;\n @State() filterChanged: string = '';\n @State() currentHits: AlgoliaResultHit[];\n @State() changeEvent: SearchChangeEvent = SearchChangeEvent.Init;\n @State() isLoading: boolean = false;\n @State() wormholeState: any = this;\n\n // Public props\n\n /**\n * Show the result panel. By default it will automatically show when the result receives new hits.\n */\n @Prop({ mutable: true }) showResults: boolean = false;\n\n /**\n * The current algolia page of results currently being viewed or to get.\n */\n @Prop({ mutable: true }) resultsPage: number = 0;\n\n /**\n * An Algolia App ID key. Used in conjunction with 'searchIndex' & 'apiKey'.\n */\n @Prop({ mutable: true }) appId: string;\n\n /**\n * An Algolia API Key. Used in conjunction with 'searchIndex' & 'appId'.\n */\n @Prop({ mutable: true }) apiKey: string;\n\n /**\n * Algolia search index. Used in conjunction with 'apiKey' & 'appId'.\n * ```\n * { index: string, // algolia index name\n * domain?: string, // used in template filters to resolve incomplete url fields\n * filters?: [string], // algolia facets to retrive\n * hitsPerPage?: number,\n * name?: string // human readable index name\n * }\n * ```\n */\n @Prop({ mutable: true }) searchIndex: SearchIndex = {} as SearchIndex;\n\n /**\n * Algolia search index name. Alternative to 'searchIndex'.\n * A simplified shortcut for setting an index.\n * Properties such as hitsPerPage and facets will come from the algolia index\n */\n @Prop({ mutable: true }) searchIndexName: string = '';\n\n /**\n * JS querySelector string of a `nano-input` / `input` element from which\n * to listen to `nano-change` or `change` events and change the `query` prop.\n * Not required if an appropriate field is in the 'search-input' slot\n */\n @Prop() listenTo?: string = null;\n\n @Watch('listenTo')\n handleListenToChange() {\n if (!this.listenTo) return;\n\n const foundInput = document.querySelector(this.listenTo);\n if (\n ['nano-input', 'input'].includes(foundInput.tagName.toLocaleLowerCase())\n ) {\n this.inputField = foundInput as HTMLNanoInputElement;\n }\n }\n\n /**\n * The query string used to search the index. Will automatically be set with any slotted\n * `search-input` input elements or from elements linked to from `listen-to`\n */\n @Prop({ mutable: true }) query: string = '';\n\n /**\n * The external operator joining filter values.\n */\n @Prop() operator: 'or' | 'and' = 'and';\n\n /**\n * Query filters to apply to all searches.\n * Refer to https://www.algolia.com/doc/api-reference/api-parameters/filters for format.\n */\n @Prop() filters: Array<string> = [];\n\n /**\n * Template engine render function to use when rendering results and filters.\n * Defaults to Squirrel v8's render (https://squirrelly.js.org/).\n */\n @Prop() tplRenderFn: (...args: any[]) => any = Squirrel.render;\n\n /**\n * Changes the index without removing any current filters. Most appropriate for algolia replicas.\n */\n @Prop({ mutable: true }) replicaIndex: string = '';\n\n /**\n * Will maintain a search all / '*' on init and reset allowing for a view\n * then filter experience rather than a search first experience\n */\n @Prop({ mutable: true }) browseIndex: boolean = false;\n\n /**\n * Minimum number of characters before performing a search\n */\n @Prop() minChars: number = 2;\n\n /**\n * Store search queries (against this ID) to the component store.\n * Use in conjunction with storeMethod\n */\n @Prop() storeId?: string;\n\n /**\n * The method of storage.\n * Either session storage, url hash (after the '#') or url query (after the '?').\n */\n @Prop() storeMethod: StorageMethods = 'session';\n\n // Events\n\n /**\n * Emitted when the algolia element has been created.\n */\n @Event() nanoDidLoad!: EventEmitter<HTMLNanoAlgoliaElement>;\n\n /**\n * Emitted when results and all filters are shown and have loaded.\n */\n @Event({ bubbles: false }) nanoResultsShown!: EventEmitter<{\n meta: IndexResult;\n client: { apiKey: string; appId: string };\n }>;\n\n /**\n * Emitted before an algolia search.\n */\n @Event() nanoBeforeQuery!: EventEmitter<IndexResult>;\n\n /**\n * Emitted after an algolia search.\n */\n @Event() nanoAfterQuery!: EventEmitter<IndexResult>;\n\n /**\n * Emitted after an results have been updated\n */\n @Event() nanoNewResults!: EventEmitter<IndexResult>;\n\n // Public methods\n\n /**\n * @param facetName - will clear all filter selections of that type\n * @param facetValue - will remove a single filter selection\n * Remove facet filters (as set from nano-algolia-filter elements).\n * The omission or both will remove all facet filters\n */\n @Method()\n async removeFilters(facetName?: string, facetValue?: string) {\n if (!facetName && !facetValue) this.clearAllFacetFilters();\n else {\n Object.keys(this._dynFacetFilters).forEach((filterId) => {\n if (\n facetName &&\n this._dynFacetFilters[filterId].facetName === facetName\n ) {\n if (!facetValue) this._dynFacetFilters[filterId].element.value = '';\n else {\n this._dynFacetFilters[filterId].element.value =\n this._dynFacetFilters[filterId].value.filter(\n (val) => val !== facetValue\n );\n }\n }\n });\n }\n }\n\n // Listeners to external events\n\n // a child nano-algolia-... updated their template\n @Listen('nanoTplUpdated')\n onAllTplUpdate(ev: CustomEvent & { target: HTMLElement }) {\n ev.stopPropagation();\n\n if (\n ev.target.tagName.toLowerCase() === transformTag('nano-algolia-results')\n ) {\n requestAnimationFrame(() => {\n this.nanoNewResults.emit(this.indexResults);\n });\n }\n }\n\n // a nano-algolia-pagination or nano-algolia-results changed the page\n @Listen('nanoPageChanged')\n async onPageChange(ev?: CustomEvent) {\n if (!this.indexResults) return;\n let page = this.resultsPage;\n if (ev) {\n ev.stopPropagation();\n page = (ev.detail as PageChangeEventDetail).page;\n }\n\n page = Math.min(this.indexResults.totalPages - 1, page);\n page = Math.max(page, 0);\n\n if (this.indexResults.currentPage === page) return;\n\n this.indexResults.currentPage = page;\n await this.algoliaSearch(SearchChangeEvent.Page);\n }\n\n /**\n * nano-algolia-filter changed value.\n * If that happened before a indexResults were setup, it was a static filter.\n * Static filters persist accross search changes\n */\n @Listen('nanoFilterChanged')\n async onFilterChange(ev: CustomEvent) {\n ev.stopPropagation();\n\n const dynFilterObj: FilterGroup = {};\n const filter = ev.detail as FacetFilter;\n filter.element = ev.target as HTMLNanoAlgoliaFilterElement;\n\n if (this.indexResults) {\n if (this.staticFacetFilters[filter.filterId])\n this.staticFacetFilters[filter.filterId] = filter;\n else {\n dynFilterObj[filter.filterId] = filter;\n this._dynFacetFilters = { ...this._dynFacetFilters, ...dynFilterObj };\n }\n\n this.indexResults.appliedFilters = this.makeAppliedFilters();\n } else this.staticFacetFilters[filter.filterId] = filter;\n\n this.filterChanged =\n filter.value && filter.value.length ? filter.filterId : 'all';\n\n this.resetPage();\n this.algoliaSearch(SearchChangeEvent.Filter);\n }\n\n // Internal state watchers\n\n // Filters can fire a change event, cause a re-render then get detached.\n // This can cause filter dupes. Check to see if the original element is still in the DOM.\n @Watch('_dynFacetFilters')\n dynFacetFiltersChange() {\n Object.values(this._dynFacetFilters).forEach((filter) => {\n if (this.host.ownerDocument === filter.element.ownerDocument)\n this.dynFacetFilters[filter.filterId] = filter;\n else delete this.dynFacetFilters[filter.filterId];\n });\n }\n\n @Watch('browseIndex')\n browseIndexChange() {\n if (\n this.browseIndex &&\n (!this.query || this.query.length < this.minChars)\n ) {\n this.query = '*';\n }\n }\n\n @Watch('inputField')\n inputFieldSet() {\n if (!this.inputField) return;\n if (\n this.query !== '*' &&\n this.inputField &&\n this.inputField.value !== this.query\n )\n this.inputField.value = this.query;\n }\n\n @Watch('query')\n queryChange() {\n this.searchChange();\n }\n private searchChange = async () => {\n if (!this.algoliaIndex) return;\n\n if (!this.query || this.query.length < this.minChars) {\n if (!this.browseIndex) {\n if (!this.query || this.query.length === 0) {\n this.handleSearchReset();\n return;\n } else return;\n } else if (this.query !== '*') {\n this.query = '*';\n return;\n }\n }\n // Do an initialise search (setup searchIndex)\n this.isLoading = true;\n\n setTimeout(async () => {\n // Clear dynamic filters and reset page\n this.resetPage();\n\n await this.algoliaSearch(SearchChangeEvent.Init);\n // Populate master content - optionally from template\n await this.updateContent();\n\n setTimeout((_) => (this.isLoading = false), 800);\n this.showResults = true;\n this.nanoResultsShown.emit({\n meta: this.indexResults,\n client: { appId: this.appId, apiKey: this.apiKey },\n });\n }, 200);\n };\n\n @Watch('replicaIndex')\n async internalIndexSwitch() {\n if (\n !this.replicaIndex ||\n !this.indexResults ||\n this.indexResults.index === this.replicaIndex\n )\n return;\n this.indexResults.index = this.replicaIndex;\n this.algoliaIndex = this.algoliaClient.initIndex(this.indexResults.index);\n this.resetPage();\n this.algoliaSearch(SearchChangeEvent.Replica);\n }\n\n @Watch('resultsPage')\n pageChange() {\n this.onPageChange();\n }\n\n @Watch('searchIndexName')\n searchIndexNameChange() {\n if (\n !this.searchIndexName ||\n !this.searchIndexName.length ||\n (this.searchIndex && this.searchIndex.index === this.searchIndexName)\n )\n return;\n this.searchIndex = { index: this.searchIndexName };\n }\n\n @Watch('apiKey')\n @Watch('appId')\n initAlgoliaClient() {\n if (!this.appId || !this.apiKey) return;\n this.algoliaClient = algoliasearch(this.appId, this.apiKey);\n }\n\n @Watch('searchIndex')\n initAlgoliaIndex() {\n if (!this.algoliaClient || !this.searchIndex) return;\n if (this.searchIndex.index) {\n if (!this.searchIndex.hitsPerPage) this.searchIndex.hitsPerPage = 100;\n if (this.replicaIndex) this.searchIndex.index = this.replicaIndex;\n this.searchIndexName = this.searchIndex.index;\n this.algoliaIndex = this.algoliaClient.initIndex(this.searchIndex.index);\n this.searchChange();\n }\n }\n\n @Watch('showResults')\n showResultsChange() {\n if (!this.resultsDiv || !this.defaultDiv) return;\n\n if (this.showResults) {\n this.resultsDiv.style.width = this.host.scrollWidth + 'px';\n this.resultsDiv.style.minHeight = this.host.scrollHeight + 'px';\n\n writeTask(() => {\n this.resultsDiv.addEventListener('transitionend', this.onResultDisplay);\n this.resultsDiv.style.display = 'block';\n setTimeout(() => this.resultsDiv.classList.add('show'), 50);\n });\n } else {\n writeTask(() => {\n this.resultsDiv.classList.remove('shown');\n this.defaultDiv.style.display = 'block';\n setTimeout(() => {\n this.resultsDiv.addEventListener(\n 'transitionend',\n this.onResultDisplay\n );\n this.resultsDiv.classList.remove('show');\n\n if (this.slottedInput)\n this.slottedInput.focus({ preventScroll: true });\n else this.defaultDiv.focus({ preventScroll: true });\n }, 50);\n });\n }\n }\n\n @Watch('filters')\n handleFilterpropChange() {\n this.algoliaSearch(SearchChangeEvent.Init);\n }\n\n // Internal methods\n\n private fixDomain(results: AlgoliaMultiResult) {\n if (!this.searchIndex || !this.searchIndex.domain) return results;\n results.hits.map((hit) => {\n if (hit.url && !hit.url.match(/^http/))\n hit.url = location.protocol + '//' + this.searchIndex.domain + hit.url;\n });\n return results;\n }\n\n // Takes all current filters (dynamic and static)\n // and merges common filters' values togther\n private makeAppliedFilters = (): AppliedFilter[] => {\n const appliedFtrs: AppliedFilter[] = [];\n\n const makeAppliedFilter = (facetFilters: {\n [prop: string]: FacetFilter;\n }) => {\n Object.values(facetFilters).forEach((filter) => {\n if (filter.value && filter.value.length) {\n const found = appliedFtrs.find(\n (appFilter) => appFilter.name === filter.facetName\n );\n if (!found)\n appliedFtrs.push({\n name: filter.facetName,\n values: [...filter.value],\n });\n else found.values = [...found.values, ...filter.value];\n }\n });\n };\n makeAppliedFilter(this.dynFacetFilters);\n makeAppliedFilter(this.staticFacetFilters);\n\n if (appliedFtrs.length) return appliedFtrs;\n return null;\n };\n\n // Queue up a search\n private algoliaSearch = async (eventType: SearchChangeEvent) => {\n return this.promiseQueue.enqueue(() => this.queueSearch(eventType));\n };\n\n // Do a search\n private queueSearch = async (eventType: SearchChangeEvent) => {\n if (\n !this.algoliaIndex ||\n !this.query ||\n !this.searchIndex ||\n !this.searchIndex.index\n )\n return;\n\n this.nanoBeforeQuery.emit(this.indexResults);\n\n // clear all facet filters on init (new query)\n if (SearchChangeEvent.Init === eventType) this.clearAllFacetFilters();\n\n const searchParams: any = {\n filters: this.algoliaFilterStr(),\n page: this.indexResults ? this.indexResults.currentPage : 0,\n clickAnalytics: true,\n };\n\n if (this.searchIndex.filters)\n searchParams.facets = this.searchIndex.filters;\n if (this.searchIndex.hitsPerPage)\n searchParams.hitsPerPage = this.searchIndex.hitsPerPage;\n\n let result = (await this.algoliaIndex.search(\n this.query,\n searchParams\n )) as AlgoliaMultiResult;\n result = this.fixDomain(result);\n\n // set event type - this informs children components why things changed\n this.changeEvent = eventType;\n\n // Setup initial meta on new queries. Some of it should not change on filter / pagination\n if (eventType === SearchChangeEvent.Init || !this.indexResults) {\n this.indexResults = {\n queryID: result.queryID,\n currentPage: 0,\n totalHits: result.nbHits,\n hitsPerPage: null,\n origFilters: result.facets,\n query: this.query,\n domain: this.searchIndex.domain || null,\n totalHitsWithFilters: 0,\n results: [],\n totalPages: 0,\n appliedFilters: this.makeAppliedFilters(),\n indexName: this.searchIndex.name || null,\n index: this.searchIndex.index,\n searchIndex: this.searchIndex,\n };\n }\n\n this.indexResults.dynFilters = result.facets;\n this.indexResults.results = result.hits;\n this.indexResults.totalHitsWithFilters = result.nbHits;\n this.indexResults.currentPage = result.page;\n this.indexResults.totalPages = result.nbPages;\n this.indexResults.hitsPerPage = result.hitsPerPage;\n this.indexResults.query = result.query;\n // console.log('I GOT NEW RESULTS', eventType, this.query, this.algoliaFilterStr(), this.indexResults.results.length, this.indexResults.currentPage )\n\n if (\n this.changeEvent !== SearchChangeEvent.Page &&\n this.changeEvent !== SearchChangeEvent.Replica\n ) {\n this.facets = result.facets;\n }\n this.nanoAfterQuery.emit(this.indexResults);\n\n // current hits and page will cause re-renders in children components.\n // Wait a tick before firing otherwise events can fire in the wrong order\n return new Promise((resolve) => {\n setTimeout(() => resolve('tpl updated'), 20);\n }).then((_) => {\n this.currentHits = this.indexResults.results;\n this.resultsPage = this.indexResults.currentPage;\n });\n };\n\n private resetPage() {\n if (!this.indexResults) return;\n this.indexResults.currentPage = 0;\n }\n\n private clearAllFacetFilters() {\n Object.values(this._dynFacetFilters).forEach((filter) => {\n filter.element.value = '';\n });\n this._dynFacetFilters = {};\n }\n\n private algoliaFilterStr() {\n // groups applied facet filters (from algolia-filter components)\n // with their applied, 'internal' operators (and, or, not)\n\n const facetFilterObj: { [prop: string]: FacetFilterQueryBlock } = {};\n\n const groupFilters = (facetFilters: { [prop: string]: FacetFilter }) => {\n let filter: FilterChangeEventDetail;\n let filterOp: Array<string>;\n\n Object.keys(facetFilters).forEach((filterId) => {\n filter = facetFilters[filterId];\n facetFilterObj[filterId] = facetFilterObj[filterId] || {\n name: filter.facetName,\n or: [],\n and: [],\n not: [],\n };\n\n filterOp = facetFilterObj[filterId][filter.operator];\n if (filter.value && filter.value.length) {\n facetFilterObj[filterId][filter.operator] = [\n ...filterOp,\n ...filter.value,\n ];\n }\n });\n };\n\n groupFilters(this.dynFacetFilters);\n groupFilters(this.staticFacetFilters);\n\n const formatVal = (name: string, val: string) => {\n if (val.indexOf(' ') > -1) return name + ':\"' + val + '\"';\n else return name + ':' + val;\n };\n let filterStrParts: Array<string> = [];\n let operatorGrp: FacetFilterQueryBlock;\n let filterName: string;\n // let processedFilters: string[] = [];\n\n // joins all applied facet filter operator groups with the set 'outer'\n // operator into an algolia filter query string\n Object.values(facetFilterObj).forEach(function (filter) {\n Object.keys(filter)\n .filter((filterProp) => filterProp.match(/(or|and|not)/))\n .forEach((operator) => {\n operatorGrp = filter;\n filterName = filter.name;\n\n if (operator === 'or' || operator === 'and') {\n if (operatorGrp[operator].length) {\n filterStrParts.push(\n '( \\\n ' +\n operatorGrp[operator]\n .map((val) => {\n if (val.length) return formatVal(filterName, val);\n })\n .join(' ' + operator.toLocaleUpperCase() + ' ') +\n ' \\\n )'\n );\n }\n } else {\n if (operatorGrp.not.length) {\n filterStrParts.push(\n '( \\\n ' +\n operatorGrp[operator]\n .map((val) => {\n if (val.length)\n return 'NOT ' + formatVal(filterName, val);\n })\n .join(' AND ') +\n ' \\\n )'\n );\n }\n }\n });\n });\n\n // add in any static applied filters from filters prop\n filterStrParts = [...this.filters, ...filterStrParts];\n // console.log('filterStr:', filterStrParts.join(' ' + this.operator.toLocaleUpperCase() + ' '))\n return filterStrParts.join(' ' + this.operator.toLocaleUpperCase() + ' ');\n }\n\n @Listen('nanoChange', { target: 'body' })\n @Listen('change', { target: 'body' })\n handleInputChange(ev: CustomEvent | (Event & { target: HTMLElement })) {\n if (ev.target !== this.inputField) return;\n this.query = this.inputField.value;\n }\n\n private handleSearchReset = () => {\n this.showResults = false;\n this.indexResults = null;\n };\n\n private onResultDisplay = () => {\n writeTask(() => {\n this.resultsDiv.removeEventListener(\n 'transitionend',\n this.onResultDisplay\n );\n if (!this.showResults) this.resultsDiv.style.display = 'none';\n else {\n this.defaultDiv.style.display = 'none';\n this.resultsDiv.classList.add('shown');\n this.resultsDiv.style.minHeight = '';\n this.resultsDiv.style.width = '';\n }\n });\n };\n\n private async updateContent() {\n return this.promiseQueue.enqueue(() => this.updateContentQueue());\n }\n\n private async updateContentQueue() {\n const outputTo = this.outputSlot || this.resultsDiv;\n\n if (!outputTo || !this.tpl) return 'no tpl';\n\n const tmpCont = document.createElement('div');\n tmpCont.innerHTML = this.tpl;\n\n const algoliaEles: Element[] = [];\n this.placedAlgoliaEles = [];\n\n // take out children algolia elements 'cos they have their own templates\n // don't want to swap in their templates\n Array.from(\n tmpCont.querySelectorAll(\n `${transformTag('nano-algolia')}, ${transformTag(\n 'nano-algolia-filter'\n )}, ${transformTag('nano-algolia-results')}`\n )\n ).forEach((el, i) => {\n const placeholder = document.createElement('div');\n placeholder.dataset.placeholderId = i.toString();\n placeholder.classList.add('nano-ele-placeholder');\n algoliaEles.push(el);\n el.parentNode.replaceChild(placeholder, el);\n });\n\n // swap in template content\n // (all this nonsense htmlencodes any < or >)\n\n outputTo.innerHTML = this.tplRenderFn(\n tmpCont.innerHTML\n .replace(/>/gm, '>')\n .replace(/</gm, '<')\n .replace(/&/gm, '&'),\n this.indexResults\n );\n\n // put back in algolia elements\n Array.from(outputTo.querySelectorAll('div.nano-ele-placeholder')).forEach(\n (el: HTMLDivElement) => {\n el.parentNode.replaceChild(\n algoliaEles[parseInt(el.dataset.placeholderId)],\n el\n );\n this.placedAlgoliaEles.push(\n algoliaEles[parseInt(el.dataset.placeholderId)]\n );\n }\n );\n\n if (!this.placedAlgoliaEles.length) return Promise.resolve('algolia setup');\n\n // wait for all children algolia elements to resolve before calling 'done'\n return new Promise((resolve) => {\n const childrenResolver = (ev: CustomEvent) => {\n this.placedAlgoliaEles = this.placedAlgoliaEles.filter(\n (ele) => ele !== (ev.detail as HTMLElement)\n );\n if (!this.placedAlgoliaEles.length) {\n setTimeout(() => resolve('tpl updated'), 500);\n outputTo.removeEventListener('nanoTplUpdated', childrenResolver);\n }\n };\n outputTo.addEventListener('nanoTplUpdated', childrenResolver);\n });\n }\n\n // Stencil hooks\n\n componentWillLoad() {\n readTask((_) => {\n this.tplSlot = getDirectChildren(this.host, '[slot=\"template\"]')[0];\n this.outputSlot = getDirectChildren(this.host, '[slot=\"output\"]')[0];\n this.slottedInput = getDirectChildren(\n this.host,\n '[slot=\"search-input\"]'\n )[0];\n this.hasLoadSlot = !!getDirectChildren(this.host, '[slot=\"loader\"]')[0];\n if (this.tplSlot)\n this.tpl = this.tplSlot.innerHTML || this.tplSlot.innerText;\n\n // get input field to listen to\n if (\n this.slottedInput &&\n (this.slottedInput.tagName.toLocaleLowerCase() ===\n transformTag('nano-input') ||\n this.slottedInput instanceof HTMLInputElement)\n ) {\n this.inputField = this.slottedInput as HTMLNanoInputElement;\n } else if (this.slottedInput) {\n this.inputField = this.slottedInput.querySelector(\n `${transformTag(\n 'nano-input'\n )}, input:not([type=\"radio\"]):not([type=\"checkbox\"])`\n );\n } else this.handleListenToChange();\n\n writeTask((_) => {\n if (this.showResults && this.tpl) this.searchChange();\n });\n });\n\n this.searchIndexNameChange();\n this.initAlgoliaClient();\n this.initAlgoliaIndex();\n\n // Create wormwhole shared 'universe' (https://github.com/mihar-22/stencil-wormhole)\n Universe.create(this, this.wormholeState);\n\n if (this.storeId) {\n ComponentStore.init(\n this,\n ['query', 'replicaIndex'],\n this.storeMethod,\n this.storeId\n );\n ComponentStore.init(\n this,\n ['apiKey', 'appId', 'searchIndex'],\n 'session',\n this.storeId + '_api'\n );\n }\n this.internalIndexSwitch();\n }\n\n connectedCallback() {\n this.searchChange = debounce(this.searchChange, 300);\n this.browseIndexChange();\n\n if (!Build.isBrowser) return;\n this.host.dispatchEvent(\n new CustomEvent('nanoDidLoad', {\n detail: this.host,\n })\n );\n }\n\n render() {\n const wormholeState = {\n indexResults: this.indexResults,\n results: this.currentHits,\n filterChanged: this.filterChanged,\n tplRenderFn: this.tplRenderFn,\n resultsPage: this.resultsPage,\n changeEvent: this.changeEvent,\n facets: this.facets,\n algoliaIndex: this.algoliaIndex,\n searchIndex: this.searchIndex,\n globalStoreMethod: this.storeMethod,\n isLoading: this.isLoading,\n };\n return (\n <Host\n class={{\n 'show-results': this.showResults,\n 'is-loading': this.isLoading,\n 'nano-algolia': true,\n }}\n aria-busy={this.isLoading}\n >\n {this.hasLoadSlot && (\n <div hidden={!this.isLoading}>\n <slot name=\"loader\" />\n </div>\n )}\n {!this.hasLoadSlot && (\n <div\n class={{\n loader: true,\n loading: this.isLoading,\n }}\n >\n <nano-spinner overlay type=\"circle\"></nano-spinner>\n </div>\n )}\n\n <Universe.Provider state={wormholeState}>\n <slot name=\"search-input\"></slot>\n <div class=\"results-container\" aria-live=\"polite\">\n <div ref={(div) => (this.resultsDiv = div)} class=\"results\">\n <slot name=\"output\" />\n </div>\n </div>\n </Universe.Provider>\n\n <div\n ref={(div) => (this.defaultDiv = div)}\n class=\"default\"\n tabindex=\"-1\"\n >\n <slot />\n </div>\n </Host>\n );\n }\n}\n"]}
|
@@ -1,7 +1,8 @@
|
|
1
1
|
/*!
|
2
2
|
* Web Components for Nanopore digital Web Apps
|
3
3
|
*/
|
4
|
-
import {
|
4
|
+
import { Host, } from "@stencil/core";
|
5
|
+
import { h } from "../../utils/renderer";
|
5
6
|
import { animations, easings } from "./animations";
|
6
7
|
/**
|
7
8
|
* Animate elements declaratively with [~100 baked-in presets](https://animate.style/), or make your own with custom keyframes.
|
@@ -160,7 +161,7 @@ export class NanoAnimation {
|
|
160
161
|
this.animation?.finish();
|
161
162
|
}
|
162
163
|
render() {
|
163
|
-
return (h(Host, { key: '
|
164
|
+
return (h(Host, { key: '72df233f997594e16f18fbe6009d5bc3849e8248', class: "nano-animation" }, h("slot", { key: 'cc651438b3697408a642e28369b77efe7c781716', ref: (slot) => {
|
164
165
|
this.defaultSlot = slot;
|
165
166
|
}, onSlotchange: this.handleSlotChange })));
|
166
167
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"animation.js","sourceRoot":"","sources":["../../../../src/components/animation/animation.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n Watch,\n h,\n ComponentInterface,\n EventEmitter,\n Event,\n Host,\n Method,\n State,\n} from '@stencil/core';\nimport { animations, easings } from './animations';\nimport { AnimationEasing, AnimationName } from './animation-interface';\n\n/**\n * Animate elements declaratively with [~100 baked-in presets](https://animate.style/), or make your own with custom keyframes.\n * Powered by the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API).\n *\n * @slot - The element to animate. Avoid slotting in more than one element, as subsequent ones will be ignored. To animate multiple elements, either wrap them in a single container or use multiple *nano-animation* elements.\n */\n@Component({\n tag: 'nano-animation',\n styles: /* css */ `\n :host {\n display: contents;\n }\n `,\n shadow: true,\n})\nexport class NanoAnimation implements ComponentInterface {\n private animation?: Animation;\n private hasStarted = false;\n\n @State() defaultSlot?: HTMLSlotElement;\n\n /** The name of the built-in animation to use. For custom animations, use the `keyframes` prop. */\n @Prop() name: AnimationName | 'none' = 'none';\n\n /**\n * Plays the animation. When omitted, the animation will be paused. This attribute will be automatically removed when\n * the animation finishes or gets canceled.\n */\n @Prop({ reflect: true, mutable: true }) play = false;\n\n /** The number of milliseconds to delay the start of the animation. */\n @Prop() delay = 0;\n\n /**\n * Determines the direction of playback as well as the behavior when reaching the end of an iteration.\n * [Learn more](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-direction)\n */\n @Prop() direction: PlaybackDirection = 'normal';\n\n /** The number of milliseconds each iteration of the animation takes to complete. */\n @Prop() duration = 1000;\n\n /**\n * The easing function to use for the animation. This can be a easing function or a custom easing function\n * such as `cubic-bezier(0, 1, .76, 1.14)`.\n */\n @Prop() easing: AnimationEasing = 'ease';\n\n /** The number of milliseconds to delay after the active period of an animation sequence. */\n @Prop() endDelay = 0;\n\n /** Sets how the animation applies styles to its target before and after its execution. */\n @Prop() fill: FillMode = 'auto';\n\n /** The number of iterations to run before the animation completes. Defaults to `Infinity`, which loops. */\n @Prop() iterations = Infinity;\n\n /** The offset at which to start the animation, usually between 0 (start) and 1 (end). */\n @Prop() iterationStart = 0;\n\n /** The keyframes to use for the animation. If this is set, `name` will be ignored. */\n @Prop() keyframes?: Keyframe[];\n\n /**\n * Sets the animation's playback rate. The default is `1`, which plays the animation at a normal speed. Setting this\n * to `2`, for example, will double the animation's speed. A negative value can be used to reverse the animation. This\n * value can be changed without causing the animation to restart.\n */\n @Prop() playbackRate = 1;\n\n /** Emitted when the animation is canceled. */\n @Event() nanoCancel: EventEmitter;\n\n /** Emitted when the animation finishes. */\n @Event() nanoFinish: EventEmitter;\n\n /** Emitted when the animation starts. */\n @Event() nanoStart: EventEmitter;\n\n /** Gets and sets the current animation time. */\n @Prop()\n get currentTime(): CSSNumberish {\n return this.animation?.currentTime ?? 0;\n }\n set currentTime(time: number) {\n if (this.animation) {\n this.animation.currentTime = time;\n }\n }\n\n connectedCallback() {\n this.createAnimation();\n }\n\n disconnectedCallback() {\n this.destroyAnimation();\n }\n\n private handleAnimationFinish = () => {\n this.play = false;\n this.hasStarted = false;\n this.nanoFinish.emit();\n };\n\n private handleAnimationCancel = () => {\n this.play = false;\n this.hasStarted = false;\n this.nanoCancel.emit();\n };\n\n private handleSlotChange = () => {\n this.destroyAnimation();\n this.createAnimation();\n };\n\n @Watch('defaultSlot')\n private async createAnimation() {\n if (!this.defaultSlot) return;\n\n const easing = easings[this.easing] ?? this.easing;\n const keyframes =\n this.keyframes ??\n (animations as unknown as Partial<Record<string, Keyframe[]>>)[this.name];\n const slot = this.defaultSlot;\n const element = slot.assignedElements()[0] as HTMLElement | undefined;\n\n if (!element || !keyframes) {\n return false;\n }\n\n this.destroyAnimation();\n this.animation = element.animate(keyframes, {\n delay: this.delay,\n direction: this.direction,\n duration: this.duration,\n easing,\n endDelay: this.endDelay,\n fill: this.fill,\n iterationStart: this.iterationStart,\n iterations: this.iterations,\n });\n this.animation.playbackRate = this.playbackRate;\n this.animation.addEventListener('cancel', this.handleAnimationCancel);\n this.animation.addEventListener('finish', this.handleAnimationFinish);\n\n if (this.play) {\n this.hasStarted = true;\n this.nanoStart.emit();\n } else {\n this.animation.pause();\n }\n\n return true;\n }\n\n private destroyAnimation() {\n if (this.animation) {\n this.animation.cancel();\n this.animation.removeEventListener('cancel', this.handleAnimationCancel);\n this.animation.removeEventListener('finish', this.handleAnimationFinish);\n this.hasStarted = false;\n }\n }\n\n @Watch('name')\n @Watch('delay')\n @Watch('direction')\n @Watch('duration')\n @Watch('easing')\n @Watch('endDelay')\n @Watch('fill')\n @Watch('iterations')\n @Watch('iterationStart')\n @Watch('keyframes')\n handleAnimationChange() {\n this.createAnimation();\n }\n\n @Watch('play')\n handlePlayChange() {\n if (this.animation) {\n if (this.play && !this.hasStarted) {\n this.hasStarted = true;\n this.nanoStart.emit();\n }\n\n if (this.play) {\n this.animation.play();\n } else {\n this.animation.pause();\n }\n\n return true;\n }\n return false;\n }\n\n @Watch('playbackRate')\n handlePlaybackRateChange() {\n if (this.animation) {\n this.animation.playbackRate = this.playbackRate;\n }\n }\n\n /** Clears all keyframe effects caused by this animation and aborts its playback. */\n @Method()\n async cancel() {\n this.animation?.cancel();\n }\n\n /** Sets the playback time to the end of the animation corresponding to the current playback direction. */\n @Method()\n async finish() {\n this.animation?.finish();\n }\n\n render() {\n return (\n <Host>\n <slot\n ref={(slot) => {\n this.defaultSlot = slot as HTMLSlotElement;\n }}\n onSlotchange={this.handleSlotChange}\n ></slot>\n </Host>\n );\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"animation.js","sourceRoot":"","sources":["../../../../src/components/animation/animation.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n Watch,\n ComponentInterface,\n EventEmitter,\n Event,\n Host,\n Method,\n State,\n} from '@stencil/core';\nimport { h } from '../../utils/renderer';\nimport { animations, easings } from './animations';\nimport { AnimationEasing, AnimationName } from './animation-interface';\n\n/**\n * Animate elements declaratively with [~100 baked-in presets](https://animate.style/), or make your own with custom keyframes.\n * Powered by the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API).\n *\n * @slot - The element to animate. Avoid slotting in more than one element, as subsequent ones will be ignored. To animate multiple elements, either wrap them in a single container or use multiple *nano-animation* elements.\n */\n@Component({\n tag: 'nano-animation',\n styles: /* css */ `\n :host {\n display: contents;\n }\n `,\n shadow: true,\n})\nexport class NanoAnimation implements ComponentInterface {\n private animation?: Animation;\n private hasStarted = false;\n\n @State() defaultSlot?: HTMLSlotElement;\n\n /** The name of the built-in animation to use. For custom animations, use the `keyframes` prop. */\n @Prop() name: AnimationName | 'none' = 'none';\n\n /**\n * Plays the animation. When omitted, the animation will be paused. This attribute will be automatically removed when\n * the animation finishes or gets canceled.\n */\n @Prop({ reflect: true, mutable: true }) play = false;\n\n /** The number of milliseconds to delay the start of the animation. */\n @Prop() delay = 0;\n\n /**\n * Determines the direction of playback as well as the behavior when reaching the end of an iteration.\n * [Learn more](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-direction)\n */\n @Prop() direction: PlaybackDirection = 'normal';\n\n /** The number of milliseconds each iteration of the animation takes to complete. */\n @Prop() duration = 1000;\n\n /**\n * The easing function to use for the animation. This can be a easing function or a custom easing function\n * such as `cubic-bezier(0, 1, .76, 1.14)`.\n */\n @Prop() easing: AnimationEasing = 'ease';\n\n /** The number of milliseconds to delay after the active period of an animation sequence. */\n @Prop() endDelay = 0;\n\n /** Sets how the animation applies styles to its target before and after its execution. */\n @Prop() fill: FillMode = 'auto';\n\n /** The number of iterations to run before the animation completes. Defaults to `Infinity`, which loops. */\n @Prop() iterations = Infinity;\n\n /** The offset at which to start the animation, usually between 0 (start) and 1 (end). */\n @Prop() iterationStart = 0;\n\n /** The keyframes to use for the animation. If this is set, `name` will be ignored. */\n @Prop() keyframes?: Keyframe[];\n\n /**\n * Sets the animation's playback rate. The default is `1`, which plays the animation at a normal speed. Setting this\n * to `2`, for example, will double the animation's speed. A negative value can be used to reverse the animation. This\n * value can be changed without causing the animation to restart.\n */\n @Prop() playbackRate = 1;\n\n /** Emitted when the animation is canceled. */\n @Event() nanoCancel: EventEmitter;\n\n /** Emitted when the animation finishes. */\n @Event() nanoFinish: EventEmitter;\n\n /** Emitted when the animation starts. */\n @Event() nanoStart: EventEmitter;\n\n /** Gets and sets the current animation time. */\n @Prop()\n get currentTime(): CSSNumberish {\n return this.animation?.currentTime ?? 0;\n }\n set currentTime(time: number) {\n if (this.animation) {\n this.animation.currentTime = time;\n }\n }\n\n connectedCallback() {\n this.createAnimation();\n }\n\n disconnectedCallback() {\n this.destroyAnimation();\n }\n\n private handleAnimationFinish = () => {\n this.play = false;\n this.hasStarted = false;\n this.nanoFinish.emit();\n };\n\n private handleAnimationCancel = () => {\n this.play = false;\n this.hasStarted = false;\n this.nanoCancel.emit();\n };\n\n private handleSlotChange = () => {\n this.destroyAnimation();\n this.createAnimation();\n };\n\n @Watch('defaultSlot')\n private async createAnimation() {\n if (!this.defaultSlot) return;\n\n const easing = easings[this.easing] ?? this.easing;\n const keyframes =\n this.keyframes ??\n (animations as unknown as Partial<Record<string, Keyframe[]>>)[this.name];\n const slot = this.defaultSlot;\n const element = slot.assignedElements()[0] as HTMLElement | undefined;\n\n if (!element || !keyframes) {\n return false;\n }\n\n this.destroyAnimation();\n this.animation = element.animate(keyframes, {\n delay: this.delay,\n direction: this.direction,\n duration: this.duration,\n easing,\n endDelay: this.endDelay,\n fill: this.fill,\n iterationStart: this.iterationStart,\n iterations: this.iterations,\n });\n this.animation.playbackRate = this.playbackRate;\n this.animation.addEventListener('cancel', this.handleAnimationCancel);\n this.animation.addEventListener('finish', this.handleAnimationFinish);\n\n if (this.play) {\n this.hasStarted = true;\n this.nanoStart.emit();\n } else {\n this.animation.pause();\n }\n\n return true;\n }\n\n private destroyAnimation() {\n if (this.animation) {\n this.animation.cancel();\n this.animation.removeEventListener('cancel', this.handleAnimationCancel);\n this.animation.removeEventListener('finish', this.handleAnimationFinish);\n this.hasStarted = false;\n }\n }\n\n @Watch('name')\n @Watch('delay')\n @Watch('direction')\n @Watch('duration')\n @Watch('easing')\n @Watch('endDelay')\n @Watch('fill')\n @Watch('iterations')\n @Watch('iterationStart')\n @Watch('keyframes')\n handleAnimationChange() {\n this.createAnimation();\n }\n\n @Watch('play')\n handlePlayChange() {\n if (this.animation) {\n if (this.play && !this.hasStarted) {\n this.hasStarted = true;\n this.nanoStart.emit();\n }\n\n if (this.play) {\n this.animation.play();\n } else {\n this.animation.pause();\n }\n\n return true;\n }\n return false;\n }\n\n @Watch('playbackRate')\n handlePlaybackRateChange() {\n if (this.animation) {\n this.animation.playbackRate = this.playbackRate;\n }\n }\n\n /** Clears all keyframe effects caused by this animation and aborts its playback. */\n @Method()\n async cancel() {\n this.animation?.cancel();\n }\n\n /** Sets the playback time to the end of the animation corresponding to the current playback direction. */\n @Method()\n async finish() {\n this.animation?.finish();\n }\n\n render() {\n return (\n <Host class=\"nano-animation\">\n <slot\n ref={(slot) => {\n this.defaultSlot = slot as HTMLSlotElement;\n }}\n onSlotchange={this.handleSlotChange}\n ></slot>\n </Host>\n );\n }\n}\n"]}
|
@@ -1,9 +1,10 @@
|
|
1
1
|
/*!
|
2
2
|
* Web Components for Nanopore digital Web Apps
|
3
3
|
*/
|
4
|
-
import {
|
4
|
+
import { Host, Build, } from "@stencil/core";
|
5
5
|
import { getClassMap } from "../../utils/theme";
|
6
6
|
import { debounce } from "../../utils/throttle";
|
7
|
+
import { transformTag, h } from "../../utils/renderer";
|
7
8
|
/**
|
8
9
|
* `nano-checkbox-group` is an optional wrapper for all `nano-checkbox` controls.
|
9
10
|
* It provides a convenient place to anchor a collective label and any validation issues.
|
@@ -207,6 +208,7 @@ export class CheckboxGroup {
|
|
207
208
|
if (!this.checkboxes?.length)
|
208
209
|
return;
|
209
210
|
this.checkboxTypes = getClassMap(this.checkboxes.map((cb) => 'types-' + (cb.type || 'checkbox')));
|
211
|
+
this.checkboxTypes['nano-checkbox-group'] = true;
|
210
212
|
}
|
211
213
|
handleDisabledChange() {
|
212
214
|
if (this.disabled === null || !this.checkboxes?.length)
|
@@ -241,7 +243,7 @@ export class CheckboxGroup {
|
|
241
243
|
mo.observe(this.host, { childList: true });
|
242
244
|
}
|
243
245
|
async handleSlotChange() {
|
244
|
-
this.checkboxes = Array.from(this.host.querySelectorAll('nano-checkbox'));
|
246
|
+
this.checkboxes = Array.from(this.host.querySelectorAll(transformTag('nano-checkbox')));
|
245
247
|
this.hasHelperSlot = !!this.host.querySelector('[slot="helper"]');
|
246
248
|
this.nativeCbs = await Promise.all(this.checkboxes.reduce((acc, cb) => {
|
247
249
|
acc.push(cb.getInputElement());
|
@@ -308,10 +310,10 @@ export class CheckboxGroup {
|
|
308
310
|
render() {
|
309
311
|
const legendId = this.grpId + '-lbl';
|
310
312
|
const moreId = this.showInlineError || this.hasHelperSlot ? this.grpId + '-more' : '';
|
311
|
-
return (h(Host, { key: '
|
313
|
+
return (h(Host, { key: '93c54171d768c6ef41eeb1d7e24b8d80c83af780', class: this.checkboxTypes }, h("fieldset", { key: '24457a9b9d1d5993eb2a6c78f2d39e057be99a2f', disabled: this.disabled, class: { nanogroupcb: true, 'show-error': this.showErrorMsg } }, h("legend", { key: '1e443d6d7970c8c3c8e03dbdc470d8cbf8ab60d2', id: legendId, class: {
|
312
314
|
nanogroupcb__legend: true,
|
313
315
|
'visually-hide': this.hideLegend,
|
314
|
-
} }, h("slot", { key: '
|
316
|
+
} }, h("slot", { key: 'fc853be6da9fe11a8f2e82f5d3c458587227a8be', name: "legend" }, this.legend)), h("div", { key: 'f5f0ffae9ae4987cfdb3bad2ccf92c3334d08895', class: "nanogroupcb__cbs", role: "group", "aria-labelledby": legendId + ' ' + moreId }, h("slot", { key: '559dba12b4fe7ec3b791986487a3c3615c6a3a11' })), (this.showInlineError || this.hasHelperSlot) && (h("div", { key: 'a1e9ce7fc24ec31ea12211073700670f08eb9f04', class: "nanogroupcb__more", id: moreId }, this.showInlineError ? (h("div", { class: "nanogroupcb__error" }, this.errorMessage)) : (''), h("div", { key: 'bb8bddba4822fe404c336b4c742c2865ff58c9d1', class: "nanogroupcb__help" }, h("slot", { key: '22e8b1b90d45bf6883a291239d01b8dc90c9b4d9', name: "helper" })))))));
|
315
317
|
}
|
316
318
|
static get is() { return "nano-checkbox-group"; }
|
317
319
|
static get encapsulation() { return "scoped"; }
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"checkbox-group.js","sourceRoot":"","sources":["../../../../src/components/checkbox/checkbox-group.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n Element,\n h,\n ComponentInterface,\n State,\n Listen,\n Watch,\n Host,\n Method,\n Event,\n EventEmitter,\n Build,\n} from '@stencil/core';\nimport { getClassMap } from '../../utils/theme';\nimport { debounce } from '../../utils/throttle';\nimport type {\n CssClassMap,\n ControlValidityEventDetail,\n ControlValidity,\n} from '../../types/shared';\n\n/**\n * `nano-checkbox-group` is an optional wrapper for all `nano-checkbox` controls.\n * It provides a convenient place to anchor a collective label and any validation issues.\n *\n * @slot - Used for grouping checkboxes inside the group wrapper\n * @slot legend - if you do not set a legend attribute, you can use this slot for more complex markup\n * @slot helper - helper text to accompany the form field underneath.\n */\n@Component({\n tag: 'nano-checkbox-group',\n styleUrl: 'checkbox-group.scss',\n scoped: true,\n})\nexport class CheckboxGroup implements ComponentInterface {\n private mo?: MutationObserver;\n private checkboxTypes: CssClassMap;\n private grpId = `nano-checkbox-group-${grpIds++}`;\n private ignoreValueSet = false;\n\n @Element() host: HTMLNanoCheckboxGroupElement;\n\n // internal state\n\n @State() checkboxes?: HTMLNanoCheckboxElement[];\n @State() nativeCbs: HTMLInputElement[];\n @State() errorMessage: string = '';\n @State() showErrorMsg = false;\n @State() hasHelperSlot = false;\n\n // public properties\n\n /**\n * When should the field perform validation\n */\n @Prop({ mutable: true }) validateOn?: 'dirty' | 'submit' | 'submitThenDirty' =\n 'submitThenDirty';\n\n /**\n * Whether to show validation errors underneath input\n */\n @Prop() showInlineError = true;\n\n /**\n * The minimum number of checkboxes required to be valid. Only relevant for checkbox type controls.\n * A validation error will be thrown if not enough controls are checked.\n */\n @Prop() min: number = 0;\n\n /**\n * The maximum number of checkboxes allowed. Only relevant for checkbox type controls.\n * Other controls will automatically be disabled upon reaching this number.\n */\n @Prop() max: number = null;\n\n /**\n * Disable all the nested form controls\n */\n @Prop({ reflect: true }) disabled: boolean | null = null;\n\n /**\n * A common label for children controls\n */\n @Prop() legend: string = '';\n\n /**\n * Visually hide the legend but still available to screen readers.\n */\n @Prop() hideLegend?: boolean = false;\n\n /**\n * This will be true when the control is in an invalid state.\n * Validity is determined by the `required` prop. Or if custom validity message is set. @readonly\n */\n @Prop({ reflect: true })\n get invalid() {\n return this._invalid;\n }\n @State() _invalid = false;\n\n /**\n * Current validation message - if any. @readonly\n */\n @Prop()\n get validityMessage() {\n return this.errorMessage;\n }\n\n /** The current, collective checkbox value */\n @Prop({ mutable: true }) value: string[] | string;\n\n @Watch('value')\n handleValuePropChange() {\n this.nanoChange.emit(this.value);\n\n // this change is coming from a checkbox being checked\n // so don't then change the checkbox state\n // (would cause an infinite loop)\n if (this.ignoreValueSet) return;\n\n // value has changed via prop directly, so update the checkbox's state\n this.setCbValue();\n }\n\n // Public methods\n\n /**\n * Get the current state of the control.\n * @param validateFirst - perform validation first before reporting\n * @returns `{ isValid: boolean, errorMessage: string }`\n */\n @Method()\n async reportValidity(validateFirst: boolean): Promise<ControlValidity> {\n return new Promise((resolve) => {\n if (validateFirst) {\n this.customValidate();\n this.showInlineValidation();\n }\n setTimeout(() => {\n resolve({\n isValid: !this.invalid,\n errorMessage: this.errorMessage,\n });\n }, 50);\n });\n }\n\n /**\n * Invalidate the field and show a custom error message.\n * To clear the error you will need to re-call this method with an empty string.\n * @param message - the error message to show\n * @param optVal - optionally supply an option value to target which checkbox to show invalidate against (default is the first)\n */\n @Method()\n async showError(message: string, optVal?: string) {\n let cb: HTMLNanoCheckboxElement;\n if (!this.checkboxes) return;\n if (optVal) cb = this.checkboxes.find((c) => c.value === optVal);\n if (!cb) cb = this.checkboxes[0];\n if (!cb) return;\n\n this.errorMessage = message;\n await cb.setError(message);\n if (this.showInlineError) this.showInlineValidation();\n }\n\n // Events\n\n /**\n * Called when a nested checkbox changes\n */\n @Event() nanoChange: EventEmitter<string | string[]>;\n\n /**\n * Called when validation is performed (which depends on `validateOn`).\n * @returns event.detail: `{ isValid: boolean, errorMessage: string, originalEvent: Event }`.\n */\n @Event() nanoValidate: EventEmitter<ControlValidityEventDetail>;\n\n // listeners & watchers\n\n @Listen('nanoChange')\n handleValueChange(ev: CustomEvent) {\n if (ev.target === this.host) return;\n this.setInternalValue();\n this.handleCbChange();\n }\n\n /**\n * Notes on validation... custom validation messages should be set\n * no matter whether we show inline messages or native html5.\n * this will mean forms cannot submit when there are pending validation issues.\n */\n @Watch('min')\n @Watch('max')\n handleCbChange() {\n if (this.invalid) {\n this.showErrorMsg = this._invalid = false;\n }\n this.showErrorMsg = this._invalid = this.customValidate();\n\n if (this.validateOn !== 'dirty') return;\n this.showInlineValidation();\n }\n\n @Watch('nativeCbs')\n customValidate() {\n if (\n !Build.isBrowser ||\n !this.nativeCbs ||\n !this.nativeCbs.length ||\n !this.checkboxes\n )\n return;\n\n const onlyRadios = this.nativeCbs.filter((cb) => cb?.type === 'radio');\n\n if (\n onlyRadios &&\n onlyRadios.length &&\n (this.showErrorMsg || this.validateOn === 'dirty')\n ) {\n const required = onlyRadios.find((cb) => cb.required);\n const checked = onlyRadios.filter((cb) => cb.checked);\n\n if (required && checked) {\n this.checkboxes.forEach((rd) => rd.reportValidity(false));\n return false;\n } else if (required && !checked) return true;\n }\n\n // we only care about checkbox controls.\n const onlyCbs = this.nativeCbs.filter((cb) => cb?.type === 'checkbox');\n if (!onlyCbs || !onlyCbs.length) return;\n\n const checked = onlyCbs.filter((cb) => cb.checked);\n const required = onlyCbs.find((cb) => cb.required);\n let invalid = false;\n\n if (required && !checked.find((cb) => cb === required)) return true;\n\n this.checkboxes.forEach((cb, i) => {\n const nativeCb = this.nativeCbs[i];\n cb.setError('');\n nativeCb.setCustomValidity('');\n\n if (this.min && checked.length < this.min) {\n this.errorMessage = `You must select a minimum of ${this.min} values.`;\n invalid = true;\n }\n if (this.max && checked.length > this.max) {\n this.errorMessage = `Only up to ${this.max} values are allowed.`;\n invalid = true;\n }\n\n if (invalid) {\n cb.setError(this.errorMessage, this.showErrorMsg);\n // bit fugly. We're just doing this 'cos stencil\n // methods are async and we want the validity message\n // asap to keep things in sync\n nativeCb.setCustomValidity(this.errorMessage);\n }\n });\n return invalid;\n }\n\n @Watch('checkboxes')\n handleComponentChange() {\n if (!this.checkboxes?.length) return;\n\n this.checkboxTypes = getClassMap(\n this.checkboxes.map((cb) => 'types-' + (cb.type || 'checkbox'))\n );\n }\n\n @Watch('disabled')\n @Watch('checkboxes')\n handleDisabledChange() {\n if (this.disabled === null || !this.checkboxes?.length) return;\n this.checkboxes.map((cb) => (cb.disabled = this.disabled));\n }\n\n // private methods\n\n private setInternalValue() {\n if (!this.nativeCbs?.length) return;\n\n this.ignoreValueSet = true;\n const radios = this.nativeCbs.filter((cb) => cb?.type === 'radio');\n if (radios?.length) {\n this.value = radios.find((cb) => cb.checked)?.value || null;\n return;\n }\n this.value = this.checkboxes.flatMap((cb) =>\n cb.checked ? [cb.value] : []\n );\n requestAnimationFrame(() => (this.ignoreValueSet = false));\n }\n\n private setCbValue() {\n this.checkboxes?.forEach((cb) => {\n if (\n cb.value === this.value ||\n (Array.isArray(this.value) && this.value.includes(cb.value))\n ) {\n cb.checked = true;\n }\n });\n }\n\n private attachSlotObserver() {\n if (!!this.mo || !window['MutationObserver']) return;\n const mo = (this.mo = new MutationObserver(() => this.handleSlotChange()));\n mo.observe(this.host, { childList: true });\n }\n\n private async handleSlotChange() {\n this.checkboxes = Array.from(this.host.querySelectorAll('nano-checkbox'));\n this.hasHelperSlot = !!this.host.querySelector('[slot=\"helper\"]');\n\n this.nativeCbs = await Promise.all(\n this.checkboxes.reduce((acc: Array<Promise<HTMLInputElement>>, cb) => {\n acc.push(cb.getInputElement());\n return acc;\n }, [])\n );\n\n this.nativeCbs.forEach((cb) => {\n if (cb) cb.addEventListener('invalid', this.handleInvalid);\n });\n }\n\n private handleInvalid = (ev: Event) => {\n this._invalid = true;\n\n if (this.validateOn === 'submit') {\n this._invalid = this.showErrorMsg = this.customValidate();\n }\n if (this.showInlineError) ev.preventDefault();\n\n this.showInlineValidation(ev);\n };\n\n private showInlineValidation = (ev?: Event) => {\n if (!this.nativeCbs || !this.nativeCbs.length) return;\n if (this.validateOn === 'submitThenDirty') this.validateOn = 'dirty';\n this.showErrorMsg = false;\n this._invalid = false;\n\n this.nativeCbs.forEach((cb, _i) => {\n if (!cb.validity.valid) {\n this.errorMessage = cb.validationMessage;\n this.showErrorMsg = true;\n this._invalid = true;\n }\n });\n\n this.nanoValidate.emit({\n isValid: !this.invalid,\n errorMessage: this.errorMessage,\n originalEvent: ev,\n });\n };\n\n // stencil hooks\n\n componentWillLoad() {\n this.handleValueChange = this.handleValueChange.bind(this);\n this.handleValueChange = debounce(this.handleValueChange, 1);\n this.showInlineValidation = debounce(this.showInlineValidation, 50);\n this.customValidate = this.customValidate.bind(this);\n this.handleDisabledChange();\n this.handleSlotChange();\n this.setCbValue();\n this.handleComponentChange();\n }\n\n connectedCallback() {\n this.attachSlotObserver();\n }\n\n disconnectedCallback() {\n if (this.mo) this.mo.disconnect();\n if (!this.nativeCbs?.length) return;\n\n this.nativeCbs.forEach((cb) => {\n if (cb) cb.removeEventListener('invalid', this.handleInvalid);\n });\n }\n\n render() {\n const legendId = this.grpId + '-lbl';\n const moreId =\n this.showInlineError || this.hasHelperSlot ? this.grpId + '-more' : '';\n\n return (\n <Host class={this.checkboxTypes}>\n <fieldset\n disabled={this.disabled}\n class={{ nanogroupcb: true, 'show-error': this.showErrorMsg }}\n >\n <legend\n id={legendId}\n class={{\n nanogroupcb__legend: true,\n 'visually-hide': this.hideLegend,\n }}\n >\n <slot name=\"legend\">{this.legend}</slot>\n </legend>\n <div\n class=\"nanogroupcb__cbs\"\n role=\"group\"\n aria-labelledby={legendId + ' ' + moreId}\n >\n <slot />\n </div>\n {(this.showInlineError || this.hasHelperSlot) && (\n <div class=\"nanogroupcb__more\" id={moreId}>\n {this.showInlineError ? (\n <div class=\"nanogroupcb__error\">{this.errorMessage}</div>\n ) : (\n ''\n )}\n <div class=\"nanogroupcb__help\">\n <slot name=\"helper\" />\n </div>\n </div>\n )}\n </fieldset>\n </Host>\n );\n }\n}\n\nlet grpIds = 0;\n"]}
|
1
|
+
{"version":3,"file":"checkbox-group.js","sourceRoot":"","sources":["../../../../src/components/checkbox/checkbox-group.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n Element,\n ComponentInterface,\n State,\n Listen,\n Watch,\n Host,\n Method,\n Event,\n EventEmitter,\n Build,\n} from '@stencil/core';\nimport { getClassMap } from '../../utils/theme';\nimport { debounce } from '../../utils/throttle';\nimport { transformTag, h } from '../../utils/renderer';\nimport type {\n CssClassMap,\n ControlValidityEventDetail,\n ControlValidity,\n} from '../../types/shared';\n\n/**\n * `nano-checkbox-group` is an optional wrapper for all `nano-checkbox` controls.\n * It provides a convenient place to anchor a collective label and any validation issues.\n *\n * @slot - Used for grouping checkboxes inside the group wrapper\n * @slot legend - if you do not set a legend attribute, you can use this slot for more complex markup\n * @slot helper - helper text to accompany the form field underneath.\n */\n@Component({\n tag: 'nano-checkbox-group',\n styleUrl: 'checkbox-group.scss',\n scoped: true,\n})\nexport class CheckboxGroup implements ComponentInterface {\n private mo?: MutationObserver;\n private checkboxTypes: CssClassMap;\n private grpId = `nano-checkbox-group-${grpIds++}`;\n private ignoreValueSet = false;\n\n @Element() host: HTMLNanoCheckboxGroupElement;\n\n // internal state\n\n @State() checkboxes?: HTMLNanoCheckboxElement[];\n @State() nativeCbs: HTMLInputElement[];\n @State() errorMessage: string = '';\n @State() showErrorMsg = false;\n @State() hasHelperSlot = false;\n\n // public properties\n\n /**\n * When should the field perform validation\n */\n @Prop({ mutable: true }) validateOn?: 'dirty' | 'submit' | 'submitThenDirty' =\n 'submitThenDirty';\n\n /**\n * Whether to show validation errors underneath input\n */\n @Prop() showInlineError = true;\n\n /**\n * The minimum number of checkboxes required to be valid. Only relevant for checkbox type controls.\n * A validation error will be thrown if not enough controls are checked.\n */\n @Prop() min: number = 0;\n\n /**\n * The maximum number of checkboxes allowed. Only relevant for checkbox type controls.\n * Other controls will automatically be disabled upon reaching this number.\n */\n @Prop() max: number = null;\n\n /**\n * Disable all the nested form controls\n */\n @Prop({ reflect: true }) disabled: boolean | null = null;\n\n /**\n * A common label for children controls\n */\n @Prop() legend: string = '';\n\n /**\n * Visually hide the legend but still available to screen readers.\n */\n @Prop() hideLegend?: boolean = false;\n\n /**\n * This will be true when the control is in an invalid state.\n * Validity is determined by the `required` prop. Or if custom validity message is set. @readonly\n */\n @Prop({ reflect: true })\n get invalid() {\n return this._invalid;\n }\n @State() _invalid = false;\n\n /**\n * Current validation message - if any. @readonly\n */\n @Prop()\n get validityMessage() {\n return this.errorMessage;\n }\n\n /** The current, collective checkbox value */\n @Prop({ mutable: true }) value: string[] | string;\n\n @Watch('value')\n handleValuePropChange() {\n this.nanoChange.emit(this.value);\n\n // this change is coming from a checkbox being checked\n // so don't then change the checkbox state\n // (would cause an infinite loop)\n if (this.ignoreValueSet) return;\n\n // value has changed via prop directly, so update the checkbox's state\n this.setCbValue();\n }\n\n // Public methods\n\n /**\n * Get the current state of the control.\n * @param validateFirst - perform validation first before reporting\n * @returns `{ isValid: boolean, errorMessage: string }`\n */\n @Method()\n async reportValidity(validateFirst: boolean): Promise<ControlValidity> {\n return new Promise((resolve) => {\n if (validateFirst) {\n this.customValidate();\n this.showInlineValidation();\n }\n setTimeout(() => {\n resolve({\n isValid: !this.invalid,\n errorMessage: this.errorMessage,\n });\n }, 50);\n });\n }\n\n /**\n * Invalidate the field and show a custom error message.\n * To clear the error you will need to re-call this method with an empty string.\n * @param message - the error message to show\n * @param optVal - optionally supply an option value to target which checkbox to show invalidate against (default is the first)\n */\n @Method()\n async showError(message: string, optVal?: string) {\n let cb: HTMLNanoCheckboxElement;\n if (!this.checkboxes) return;\n if (optVal) cb = this.checkboxes.find((c) => c.value === optVal);\n if (!cb) cb = this.checkboxes[0];\n if (!cb) return;\n\n this.errorMessage = message;\n await cb.setError(message);\n if (this.showInlineError) this.showInlineValidation();\n }\n\n // Events\n\n /**\n * Called when a nested checkbox changes\n */\n @Event() nanoChange: EventEmitter<string | string[]>;\n\n /**\n * Called when validation is performed (which depends on `validateOn`).\n * @returns event.detail: `{ isValid: boolean, errorMessage: string, originalEvent: Event }`.\n */\n @Event() nanoValidate: EventEmitter<ControlValidityEventDetail>;\n\n // listeners & watchers\n\n @Listen('nanoChange')\n handleValueChange(ev: CustomEvent) {\n if (ev.target === this.host) return;\n this.setInternalValue();\n this.handleCbChange();\n }\n\n /**\n * Notes on validation... custom validation messages should be set\n * no matter whether we show inline messages or native html5.\n * this will mean forms cannot submit when there are pending validation issues.\n */\n @Watch('min')\n @Watch('max')\n handleCbChange() {\n if (this.invalid) {\n this.showErrorMsg = this._invalid = false;\n }\n this.showErrorMsg = this._invalid = this.customValidate();\n\n if (this.validateOn !== 'dirty') return;\n this.showInlineValidation();\n }\n\n @Watch('nativeCbs')\n customValidate() {\n if (\n !Build.isBrowser ||\n !this.nativeCbs ||\n !this.nativeCbs.length ||\n !this.checkboxes\n )\n return;\n\n const onlyRadios = this.nativeCbs.filter((cb) => cb?.type === 'radio');\n\n if (\n onlyRadios &&\n onlyRadios.length &&\n (this.showErrorMsg || this.validateOn === 'dirty')\n ) {\n const required = onlyRadios.find((cb) => cb.required);\n const checked = onlyRadios.filter((cb) => cb.checked);\n\n if (required && checked) {\n this.checkboxes.forEach((rd) => rd.reportValidity(false));\n return false;\n } else if (required && !checked) return true;\n }\n\n // we only care about checkbox controls.\n const onlyCbs = this.nativeCbs.filter((cb) => cb?.type === 'checkbox');\n if (!onlyCbs || !onlyCbs.length) return;\n\n const checked = onlyCbs.filter((cb) => cb.checked);\n const required = onlyCbs.find((cb) => cb.required);\n let invalid = false;\n\n if (required && !checked.find((cb) => cb === required)) return true;\n\n this.checkboxes.forEach((cb, i) => {\n const nativeCb = this.nativeCbs[i];\n cb.setError('');\n nativeCb.setCustomValidity('');\n\n if (this.min && checked.length < this.min) {\n this.errorMessage = `You must select a minimum of ${this.min} values.`;\n invalid = true;\n }\n if (this.max && checked.length > this.max) {\n this.errorMessage = `Only up to ${this.max} values are allowed.`;\n invalid = true;\n }\n\n if (invalid) {\n cb.setError(this.errorMessage, this.showErrorMsg);\n // bit fugly. We're just doing this 'cos stencil\n // methods are async and we want the validity message\n // asap to keep things in sync\n nativeCb.setCustomValidity(this.errorMessage);\n }\n });\n return invalid;\n }\n\n @Watch('checkboxes')\n handleComponentChange() {\n if (!this.checkboxes?.length) return;\n\n this.checkboxTypes = getClassMap(\n this.checkboxes.map((cb) => 'types-' + (cb.type || 'checkbox'))\n );\n this.checkboxTypes['nano-checkbox-group'] = true;\n }\n\n @Watch('disabled')\n @Watch('checkboxes')\n handleDisabledChange() {\n if (this.disabled === null || !this.checkboxes?.length) return;\n this.checkboxes.map((cb) => (cb.disabled = this.disabled));\n }\n\n // private methods\n\n private setInternalValue() {\n if (!this.nativeCbs?.length) return;\n\n this.ignoreValueSet = true;\n const radios = this.nativeCbs.filter((cb) => cb?.type === 'radio');\n if (radios?.length) {\n this.value = radios.find((cb) => cb.checked)?.value || null;\n return;\n }\n this.value = this.checkboxes.flatMap((cb) =>\n cb.checked ? [cb.value] : []\n );\n requestAnimationFrame(() => (this.ignoreValueSet = false));\n }\n\n private setCbValue() {\n this.checkboxes?.forEach((cb) => {\n if (\n cb.value === this.value ||\n (Array.isArray(this.value) && this.value.includes(cb.value))\n ) {\n cb.checked = true;\n }\n });\n }\n\n private attachSlotObserver() {\n if (!!this.mo || !window['MutationObserver']) return;\n const mo = (this.mo = new MutationObserver(() => this.handleSlotChange()));\n mo.observe(this.host, { childList: true });\n }\n\n private async handleSlotChange() {\n this.checkboxes = Array.from(\n this.host.querySelectorAll(transformTag('nano-checkbox'))\n );\n this.hasHelperSlot = !!this.host.querySelector('[slot=\"helper\"]');\n\n this.nativeCbs = await Promise.all(\n this.checkboxes.reduce((acc: Array<Promise<HTMLInputElement>>, cb) => {\n acc.push(cb.getInputElement());\n return acc;\n }, [])\n );\n\n this.nativeCbs.forEach((cb) => {\n if (cb) cb.addEventListener('invalid', this.handleInvalid);\n });\n }\n\n private handleInvalid = (ev: Event) => {\n this._invalid = true;\n\n if (this.validateOn === 'submit') {\n this._invalid = this.showErrorMsg = this.customValidate();\n }\n if (this.showInlineError) ev.preventDefault();\n\n this.showInlineValidation(ev);\n };\n\n private showInlineValidation = (ev?: Event) => {\n if (!this.nativeCbs || !this.nativeCbs.length) return;\n if (this.validateOn === 'submitThenDirty') this.validateOn = 'dirty';\n this.showErrorMsg = false;\n this._invalid = false;\n\n this.nativeCbs.forEach((cb, _i) => {\n if (!cb.validity.valid) {\n this.errorMessage = cb.validationMessage;\n this.showErrorMsg = true;\n this._invalid = true;\n }\n });\n\n this.nanoValidate.emit({\n isValid: !this.invalid,\n errorMessage: this.errorMessage,\n originalEvent: ev,\n });\n };\n\n // stencil hooks\n\n componentWillLoad() {\n this.handleValueChange = this.handleValueChange.bind(this);\n this.handleValueChange = debounce(this.handleValueChange, 1);\n this.showInlineValidation = debounce(this.showInlineValidation, 50);\n this.customValidate = this.customValidate.bind(this);\n this.handleDisabledChange();\n this.handleSlotChange();\n this.setCbValue();\n this.handleComponentChange();\n }\n\n connectedCallback() {\n this.attachSlotObserver();\n }\n\n disconnectedCallback() {\n if (this.mo) this.mo.disconnect();\n if (!this.nativeCbs?.length) return;\n\n this.nativeCbs.forEach((cb) => {\n if (cb) cb.removeEventListener('invalid', this.handleInvalid);\n });\n }\n\n render() {\n const legendId = this.grpId + '-lbl';\n const moreId =\n this.showInlineError || this.hasHelperSlot ? this.grpId + '-more' : '';\n\n return (\n <Host class={this.checkboxTypes}>\n <fieldset\n disabled={this.disabled}\n class={{ nanogroupcb: true, 'show-error': this.showErrorMsg }}\n >\n <legend\n id={legendId}\n class={{\n nanogroupcb__legend: true,\n 'visually-hide': this.hideLegend,\n }}\n >\n <slot name=\"legend\">{this.legend}</slot>\n </legend>\n <div\n class=\"nanogroupcb__cbs\"\n role=\"group\"\n aria-labelledby={legendId + ' ' + moreId}\n >\n <slot />\n </div>\n {(this.showInlineError || this.hasHelperSlot) && (\n <div class=\"nanogroupcb__more\" id={moreId}>\n {this.showInlineError ? (\n <div class=\"nanogroupcb__error\">{this.errorMessage}</div>\n ) : (\n ''\n )}\n <div class=\"nanogroupcb__help\">\n <slot name=\"helper\" />\n </div>\n </div>\n )}\n </fieldset>\n </Host>\n );\n }\n}\n\nlet grpIds = 0;\n"]}
|
@@ -1,9 +1,10 @@
|
|
1
1
|
/*!
|
2
2
|
* Web Components for Nanopore digital Web Apps
|
3
3
|
*/
|
4
|
-
import {
|
4
|
+
import { Host, } from "@stencil/core";
|
5
5
|
import { focusVisible } from "../../utils/focus-visible";
|
6
6
|
import { createColorClasses } from "../../utils/theme";
|
7
|
+
import { transformTag, h } from "../../utils/renderer";
|
7
8
|
let checkboxIds = 0;
|
8
9
|
/**
|
9
10
|
* `nano-checkbox` is used to let a user choose one or more options from a limited number of options.
|
@@ -31,10 +32,10 @@ export class Checkbox {
|
|
31
32
|
const form = this.host.closest('form');
|
32
33
|
let ctrls;
|
33
34
|
if (form) {
|
34
|
-
ctrls = Array.from(form.querySelectorAll(
|
35
|
+
ctrls = Array.from(form.querySelectorAll(`${transformTag('nano-checkbox')}[name="${this.name}"]`));
|
35
36
|
}
|
36
37
|
else {
|
37
|
-
ctrls = Array.from(document.querySelectorAll(
|
38
|
+
ctrls = Array.from(document.querySelectorAll(`${transformTag('nano-checkbox')}[name="${this.name}"]`))?.filter((radio) => !radio.closest('form'));
|
38
39
|
}
|
39
40
|
ctrls.map((el) => {
|
40
41
|
if (el !== this.host)
|
@@ -213,14 +214,14 @@ export class Checkbox {
|
|
213
214
|
}
|
214
215
|
render() {
|
215
216
|
const labelId = this.inputId + '-lbl';
|
216
|
-
return (h(Host, { key: '
|
217
|
+
return (h(Host, { key: '743ba20f7dc131a5df0dbef97f12682228b3a49d', class: { ...createColorClasses(this.color), 'nano-checkbox': true } }, h("label", { key: '9b0f1649bcf44a7685c3e1f91da816e7283f41e0', class: {
|
217
218
|
nanocb: true,
|
218
219
|
'nanocb--checked': this.checked,
|
219
220
|
'nanocb--invalid': this.invalid,
|
220
221
|
'nanocb--disabled': this.disabled,
|
221
222
|
'nanocb--focused': this.hasFocus,
|
222
223
|
'nanocb--indeterminate': this.indeterminate,
|
223
|
-
}, htmlFor: this.inputId }, h("input", { key: '
|
224
|
+
}, htmlFor: this.inputId }, h("input", { key: '77bac537123647d224667f66ef9d8a3ea732af9a', type: this.inputType, name: this.name, form: this.form, required: this.required, checked: this.checked, disabled: this.disabled, value: this.value, "aria-labelledby": labelId, onBlur: this.handleBlur, onFocus: this.handleFocus, onChange: this.handleChange, ref: (input) => (this.input = input), id: this.inputId, onInvalid: this.handleInvalid }), h("span", { key: '6ee7540510d902daaf303edcc2a677e9819d3b00', class: 'nanocb__input nanocb__input--' + this.type }), h("div", { key: '0ea0aea0ca852394ae4a3ccc6eb998e990d61f01', id: labelId, class: 'nanocb__label nanocb__label--' + this.type }, this.label && !!this.label.length && h("span", { key: 'a1b43b59fc067cba5fd22b87add0c5352666ca2f' }, this.label), h("span", { key: 'e2a1abe3e02c9a3deeda47430b164a0b0f03982b', hidden: this.label && !!this.label.length }, h("slot", { key: '30738b530444fd2051465eb6ff9098ebb06e2e88' }))))));
|
224
225
|
}
|
225
226
|
static get is() { return "nano-checkbox"; }
|
226
227
|
static get encapsulation() { return "scoped"; }
|