@iamproperty/components 7.7.1--beta6 → 7.7.1--beta8
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/README.md +4 -4
- package/assets/bootstrap/README.md +247 -247
- package/assets/bootstrap/js/index.esm.js +19 -19
- package/assets/bootstrap/js/index.umd.js +34 -34
- package/assets/bootstrap/js/src/alert.js +87 -87
- package/assets/bootstrap/js/src/base-component.js +85 -85
- package/assets/bootstrap/js/src/button.js +72 -72
- package/assets/bootstrap/js/src/carousel.js +475 -475
- package/assets/bootstrap/js/src/collapse.js +302 -302
- package/assets/bootstrap/js/src/dom/data.js +55 -55
- package/assets/bootstrap/js/src/dom/event-handler.js +320 -320
- package/assets/bootstrap/js/src/dom/manipulator.js +71 -71
- package/assets/bootstrap/js/src/dom/selector-engine.js +83 -83
- package/assets/bootstrap/js/src/dropdown.js +445 -445
- package/assets/bootstrap/js/src/modal.js +373 -373
- package/assets/bootstrap/js/src/offcanvas.js +283 -283
- package/assets/bootstrap/js/src/popover.js +97 -97
- package/assets/bootstrap/js/src/scrollspy.js +290 -290
- package/assets/bootstrap/js/src/tab.js +307 -307
- package/assets/bootstrap/js/src/toast.js +220 -220
- package/assets/bootstrap/js/src/tooltip.js +651 -651
- package/assets/bootstrap/js/src/util/backdrop.js +149 -149
- package/assets/bootstrap/js/src/util/component-functions.js +34 -34
- package/assets/bootstrap/js/src/util/config.js +66 -66
- package/assets/bootstrap/js/src/util/focustrap.js +115 -115
- package/assets/bootstrap/js/src/util/index.js +336 -336
- package/assets/bootstrap/js/src/util/sanitizer.js +118 -118
- package/assets/bootstrap/js/src/util/scrollbar.js +114 -114
- package/assets/bootstrap/js/src/util/swipe.js +146 -146
- package/assets/bootstrap/js/src/util/template-factory.js +160 -160
- package/assets/bootstrap/package.json +180 -180
- package/assets/bootstrap/scss/_accordion.scss +146 -146
- package/assets/bootstrap/scss/_button-group.scss +142 -142
- package/assets/bootstrap/scss/_buttons.scss +186 -186
- package/assets/bootstrap/scss/_carousel.scss +229 -229
- package/assets/bootstrap/scss/_dropdown.scss +248 -248
- package/assets/bootstrap/scss/_functions.scss +302 -302
- package/assets/bootstrap/scss/_list-group.scss +191 -191
- package/assets/bootstrap/scss/_modal.scss +237 -237
- package/assets/bootstrap/scss/_nav.scss +172 -172
- package/assets/bootstrap/scss/_navbar.scss +276 -276
- package/assets/bootstrap/scss/_offcanvas.scss +143 -143
- package/assets/bootstrap/scss/_pagination.scss +109 -109
- package/assets/bootstrap/scss/_popover.scss +196 -196
- package/assets/bootstrap/scss/_toasts.scss +70 -70
- package/assets/bootstrap/scss/_variables-dark.scss +87 -87
- package/assets/bootstrap/scss/_variables.scss +1633 -1633
- package/assets/bootstrap/scss/bootstrap-utilities.scss +15 -15
- package/assets/bootstrap/scss/forms/_floating-labels.scss +74 -74
- package/assets/bootstrap/scss/forms/_input-group.scss +129 -129
- package/assets/bootstrap/scss/helpers/_focus-ring.scss +5 -5
- package/assets/bootstrap/scss/helpers/_icon-link.scss +25 -25
- package/assets/bootstrap/scss/mixins/_banner.scss +9 -9
- package/assets/bootstrap/scss/mixins/_color-mode.scss +21 -21
- package/assets/bootstrap/scss/mixins/_forms.scss +152 -152
- package/assets/bootstrap/scss/mixins/_table-variants.scss +24 -24
- package/assets/bootstrap/scss/mixins/_utilities.scss +97 -97
- package/assets/css/components/{header.css → header.component.css} +1 -1
- package/assets/css/components/header.component.css.map +1 -0
- package/assets/css/components/header.preload.css +1 -0
- package/assets/css/components/header.preload.css.map +1 -0
- package/assets/css/components/nav.component.css +1 -1
- package/assets/css/components/nav.component.css.map +1 -1
- package/assets/css/components/notification.css +1 -1
- package/assets/css/components/notification.css.map +1 -1
- package/assets/css/components/table-basic.global.css +1 -1
- package/assets/css/components/table-basic.global.css.map +1 -1
- package/assets/css/components/table.global.css +1 -1
- package/assets/css/components/table.global.css.map +1 -1
- package/assets/css/core.min.css +1 -1
- package/assets/css/core.min.css.map +1 -1
- package/assets/css/style.min.css +1 -1
- package/assets/css/style.min.css.map +1 -1
- package/assets/favicons/README.md +20 -20
- package/assets/favicons/browserconfig.xml +9 -9
- package/assets/favicons/manifest.json +31 -31
- package/assets/favicons/safari-pinned-tab.svg +35 -35
- package/assets/favicons/site.webmanifest +20 -20
- package/assets/js/components/accordion/accordion.component.js +14 -14
- package/assets/js/components/accordion/accordion.component.min.js +1 -1
- package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
- package/assets/js/components/actionbar/actionbar.component.js +66 -66
- package/assets/js/components/actionbar/actionbar.component.min.js +1 -1
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.js +58 -58
- package/assets/js/components/address-lookup/address-lookup.component.min.js +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
- package/assets/js/components/advanced-select/advanced-select.component.js +18 -18
- package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
- package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.js +6 -6
- package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
- package/assets/js/components/barchart/barchart.component.min.js +1 -1
- package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
- package/assets/js/components/bento-grid/bento-grid.component.js +9 -9
- package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
- package/assets/js/components/bento-grid/bento-grid.component.min.js.map +1 -1
- package/assets/js/components/calendar/calendar.component.min.js +1 -1
- package/assets/js/components/card/card.component.min.js +1 -1
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.min.js +1 -1
- package/assets/js/components/collapsible-side/collapsible-side.component.js +20 -20
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
- package/assets/js/components/config/config.component.js +53 -53
- package/assets/js/components/config/config.component.min.js +1 -1
- package/assets/js/components/config/config.component.min.js.map +1 -1
- package/assets/js/components/content/content.component.js +9 -9
- package/assets/js/components/content/content.component.min.js +1 -1
- package/assets/js/components/content/content.component.min.js.map +1 -1
- package/assets/js/components/darkmode/darkmode.component.js +4 -4
- package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
- package/assets/js/components/darkmode/darkmode.component.min.js.map +1 -1
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js.map +1 -1
- package/assets/js/components/fileupload/fileupload.component.js +16 -16
- package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
- package/assets/js/components/filter-card/filter-card.component.js +7 -7
- package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
- package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
- package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
- package/assets/js/components/form/form.component.js +4 -4
- package/assets/js/components/form/form.component.min.js +1 -1
- package/assets/js/components/form/form.component.min.js.map +1 -1
- package/assets/js/components/header/header.component.js +54 -54
- package/assets/js/components/header/header.component.min.js +2 -2
- package/assets/js/components/header/header.component.min.js.map +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.js +16 -16
- package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
- package/assets/js/components/input/input.component.js +10 -10
- package/assets/js/components/input/input.component.min.js +1 -1
- package/assets/js/components/input/input.component.min.js.map +1 -1
- package/assets/js/components/input-range/input-range.component.js +8 -8
- package/assets/js/components/input-range/input-range.component.min.js +1 -1
- package/assets/js/components/input-range/input-range.component.min.js.map +1 -1
- package/assets/js/components/marketing/marketing.component.js +10 -10
- package/assets/js/components/marketing/marketing.component.min.js +1 -1
- package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
- package/assets/js/components/menu/menu.component.js +6 -6
- package/assets/js/components/menu/menu.component.min.js +1 -1
- package/assets/js/components/menu/menu.component.min.js.map +1 -1
- package/assets/js/components/milestone/milestone.component.min.js +1 -1
- package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
- package/assets/js/components/modal/modal.component.js +21 -21
- package/assets/js/components/modal/modal.component.min.js +1 -1
- package/assets/js/components/modal/modal.component.min.js.map +1 -1
- package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
- package/assets/js/components/multi-step-modal/multi-step-modal.component.js +11 -11
- package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +1 -1
- package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js.map +1 -1
- package/assets/js/components/multiselect/multiselect.component.js +20 -20
- package/assets/js/components/multiselect/multiselect.component.min.js +1 -1
- package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
- package/assets/js/components/nav/nav.component.js +45 -45
- package/assets/js/components/nav/nav.component.min.js +2 -2
- package/assets/js/components/nav/nav.component.min.js.map +1 -1
- package/assets/js/components/notification/notification.component.js +14 -13
- package/assets/js/components/notification/notification.component.min.js +5 -4
- package/assets/js/components/notification/notification.component.min.js.map +1 -1
- package/assets/js/components/pagination/pagination.component.js +39 -39
- package/assets/js/components/pagination/pagination.component.min.js +1 -1
- package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
- package/assets/js/components/password/password.component.js +10 -10
- package/assets/js/components/password/password.component.min.js +1 -1
- package/assets/js/components/password/password.component.min.js.map +1 -1
- package/assets/js/components/popover/popover.component.js +7 -7
- package/assets/js/components/popover/popover.component.min.js +1 -1
- package/assets/js/components/popover/popover.component.min.js.map +1 -1
- package/assets/js/components/rank/rank.component.js +359 -359
- package/assets/js/components/rank/rank.component.min.js +1 -1
- package/assets/js/components/rank/rank.component.min.js.map +1 -1
- package/assets/js/components/rankings/rankings.component.js +16 -16
- package/assets/js/components/rankings/rankings.component.min.js +1 -1
- package/assets/js/components/rankings/rankings.component.min.js.map +1 -1
- package/assets/js/components/rating/rating.component.js +9 -9
- package/assets/js/components/rating/rating.component.min.js +1 -1
- package/assets/js/components/rating/rating.component.min.js.map +1 -1
- package/assets/js/components/record-card/record-card.component.min.js +1 -1
- package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
- package/assets/js/components/search/search.component.js +17 -17
- package/assets/js/components/search/search.component.min.js +1 -1
- package/assets/js/components/search/search.component.min.js.map +1 -1
- package/assets/js/components/slider/slider.component.js +12 -12
- package/assets/js/components/slider/slider.component.min.js +1 -1
- package/assets/js/components/slider/slider.component.min.js.map +1 -1
- package/assets/js/components/split-button/split-button.component.js +18 -18
- package/assets/js/components/split-button/split-button.component.min.js +1 -1
- package/assets/js/components/split-button/split-button.component.min.js.map +1 -1
- package/assets/js/components/std-address-lookup/std-address-lookup.component.js +113 -113
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +1 -1
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
- package/assets/js/components/table/table.component.js +15 -15
- package/assets/js/components/table/table.component.min.js +2 -2
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/table-ajax/table-ajax.component.js +15 -15
- package/assets/js/components/table-ajax/table-ajax.component.min.js +2 -2
- package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
- package/assets/js/components/table-basic/table-basic.component.js +15 -15
- package/assets/js/components/table-basic/table-basic.component.min.js +2 -2
- package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
- package/assets/js/components/table-no-submit/table-no-submit.component.js +15 -15
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js +2 -2
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
- package/assets/js/components/table-submit/table-submit.component.js +15 -15
- package/assets/js/components/table-submit/table-submit.component.min.js +2 -2
- package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.js +17 -17
- package/assets/js/components/tabs/tabs.component.min.js +1 -1
- package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
- package/assets/js/components/tag/tag.component.js +12 -12
- package/assets/js/components/tag/tag.component.min.js +1 -1
- package/assets/js/components/tag/tag.component.min.js.map +1 -1
- package/assets/js/components/tooltip/tooltip.component.js +8 -8
- package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
- package/assets/js/components/tooltip/tooltip.component.min.js.map +1 -1
- package/assets/js/components/video/video.component.js +9 -9
- package/assets/js/components/video/video.component.min.js +1 -1
- package/assets/js/components/video/video.component.min.js.map +1 -1
- package/assets/js/components/video-card/video-card.component.js +12 -12
- package/assets/js/components/video-card/video-card.component.min.js +1 -1
- package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
- package/assets/js/components/video-modal/video-modal.component.js +13 -13
- package/assets/js/components/video-modal/video-modal.component.min.js +1 -1
- package/assets/js/components/video-modal/video-modal.component.min.js.map +1 -1
- package/assets/js/components/word-count/word-count.component.min.js +1 -1
- package/assets/js/modules/card.module.js +14 -14
- package/assets/js/modules/chart.module.js +4 -4
- package/assets/js/modules/integration-tests.js +3 -3
- package/assets/js/modules/table.js +2 -2
- package/assets/js/modules/videos.js +6 -6
- package/assets/js/scripts.bundle.js +1 -1
- package/assets/js/scripts.bundle.js.map +1 -1
- package/assets/js/scripts.bundle.min.js +1 -1
- package/assets/js/scripts.bundle.min.js.map +1 -1
- package/assets/sass/_bs_grid.scss +41 -41
- package/assets/sass/_bs_utilities.scss +51 -51
- package/assets/sass/_components.scss +151 -162
- package/assets/sass/_corefiles.scss +31 -31
- package/assets/sass/_elements.scss +30 -30
- package/assets/sass/_fonts.scss +28 -28
- package/assets/sass/_func.scss +2 -2
- package/assets/sass/_functions/bs_functions.scss +487 -487
- package/assets/sass/_functions/bs_mixins.scss +2103 -2103
- package/assets/sass/_functions/bs_utilities.scss +922 -922
- package/assets/sass/_functions/bs_variables.scss +1701 -1701
- package/assets/sass/_functions/functions.scss +48 -48
- package/assets/sass/_functions/mixins.scss +1 -1
- package/assets/sass/_grid.scss +320 -320
- package/assets/sass/_print.scss +64 -64
- package/assets/sass/_utilities.scss +35 -35
- package/assets/sass/components/actionbar.component.scss +421 -421
- package/assets/sass/components/actionbar.global.scss +115 -115
- package/assets/sass/components/address-lookup.component.scss +160 -160
- package/assets/sass/components/address-lookup.preload.scss +90 -90
- package/assets/sass/components/applied-filters.scss +19 -19
- package/assets/sass/components/barchart.component.scss +347 -347
- package/assets/sass/components/bento-grid.component.scss +109 -109
- package/assets/sass/components/bento-grid.global.scss +248 -248
- package/assets/sass/components/calendar.component.scss +1272 -1272
- package/assets/sass/components/calendar.config.scss +423 -423
- package/assets/sass/components/card.component.scss +187 -187
- package/assets/sass/components/card.module.scss +154 -154
- package/assets/sass/components/carousel.component.scss +631 -631
- package/assets/sass/components/carousel.config.scss +84 -84
- package/assets/sass/components/charts.config.scss +86 -86
- package/assets/sass/components/charts.module.scss +588 -588
- package/assets/sass/components/charts.scss +1298 -1298
- package/assets/sass/components/collapsible-side.scss +307 -307
- package/assets/sass/components/config.component.scss +235 -235
- package/assets/sass/components/content.component.scss +18 -18
- package/assets/sass/components/darkmode.component.scss +20 -20
- package/assets/sass/components/doughnutchart.component.scss +206 -206
- package/assets/sass/components/fileupload.scss +162 -162
- package/assets/sass/components/filter-card.component.scss +99 -99
- package/assets/sass/components/{header.scss → header.component.scss} +249 -251
- package/assets/sass/components/header.preload.scss +26 -0
- package/assets/sass/components/inline-edit.preload.scss +203 -203
- package/assets/sass/components/inline-edit.scss +40 -40
- package/assets/sass/components/input-range.component.scss +46 -46
- package/assets/sass/components/input.component.scss +101 -101
- package/assets/sass/components/marketing.component.scss +65 -65
- package/assets/sass/components/menu.component.scss +161 -161
- package/assets/sass/components/menu.global.scss +82 -82
- package/assets/sass/components/milestone.scss +216 -216
- package/assets/sass/components/modal.component.scss +252 -252
- package/assets/sass/components/multi-step-modal.component.scss +255 -255
- package/assets/sass/components/multi-step-modal.global.scss +91 -91
- package/assets/sass/components/multi-step.component.scss +144 -144
- package/assets/sass/components/multiselect.preload.scss +8 -8
- package/assets/sass/components/multiselect.scss +238 -238
- package/assets/sass/components/nav.component.scss +718 -718
- package/assets/sass/components/nav.docs.scss +55 -55
- package/assets/sass/components/nav.global.scss +870 -870
- package/assets/sass/components/nav.preload.scss +54 -54
- package/assets/sass/components/notification.scss +204 -217
- package/assets/sass/components/pagination.scss +237 -237
- package/assets/sass/components/password.component.scss +55 -55
- package/assets/sass/components/popover.component.scss +28 -28
- package/assets/sass/components/property-searchbar.scss +139 -139
- package/assets/sass/components/rank.component.scss +275 -275
- package/assets/sass/components/rankings.component.scss +70 -70
- package/assets/sass/components/rankings.global.scss +140 -140
- package/assets/sass/components/rating.component.css +211 -211
- package/assets/sass/components/record-card.component.scss +191 -191
- package/assets/sass/components/slider.scss +127 -127
- package/assets/sass/components/snapshot.scss +65 -65
- package/assets/sass/components/split-button.component.scss +83 -83
- package/assets/sass/components/stepper.scss +157 -157
- package/assets/sass/components/table-basic.component.scss +136 -136
- package/assets/sass/components/table-basic.global.scss +676 -676
- package/assets/sass/components/table.component.scss +51 -51
- package/assets/sass/components/table.global.scss +399 -398
- package/assets/sass/components/tabs.component.scss +34 -34
- package/assets/sass/components/tabs.config.scss +258 -258
- package/assets/sass/components/tag.component.scss +59 -59
- package/assets/sass/components/tag.preload.scss +20 -20
- package/assets/sass/components/testimonial.scss +125 -125
- package/assets/sass/components/timeline.scss +92 -92
- package/assets/sass/components/tooltip.component.scss +148 -148
- package/assets/sass/components/video-card.component.scss +48 -48
- package/assets/sass/components/video-modal.component.scss +26 -26
- package/assets/sass/components/video.component.scss +74 -74
- package/assets/sass/components/word-count.component.scss +26 -26
- package/assets/sass/core.scss +4 -4
- package/assets/sass/elements/admin-panel.css +310 -310
- package/assets/sass/elements/badge-tag.css +101 -101
- package/assets/sass/elements/brand.css +80 -80
- package/assets/sass/elements/button__group.css +135 -135
- package/assets/sass/elements/buttons--action.css +71 -71
- package/assets/sass/elements/buttons--compact.css +168 -168
- package/assets/sass/elements/buttons--global.css +239 -239
- package/assets/sass/elements/buttons--secondary.css +18 -18
- package/assets/sass/elements/buttons--special.css +164 -164
- package/assets/sass/elements/buttons--tertiary.css +51 -51
- package/assets/sass/elements/buttons.scss +9 -9
- package/assets/sass/elements/code.css +45 -45
- package/assets/sass/elements/container.scss +118 -118
- package/assets/sass/elements/details.css +224 -224
- package/assets/sass/elements/dialog.scss +75 -75
- package/assets/sass/elements/dropdown.css +85 -85
- package/assets/sass/elements/feature.css +174 -174
- package/assets/sass/elements/forms.scss +1337 -1337
- package/assets/sass/elements/highlight.css +76 -76
- package/assets/sass/elements/hr.css +41 -41
- package/assets/sass/elements/icons.css +48 -48
- package/assets/sass/elements/input.scss +212 -212
- package/assets/sass/elements/label.css +20 -20
- package/assets/sass/elements/links--collapsible-side.scss +129 -129
- package/assets/sass/elements/links--global.scss +155 -155
- package/assets/sass/elements/links--video.scss +73 -73
- package/assets/sass/elements/links.scss +4 -4
- package/assets/sass/elements/lists--breadcrumbs.scss +26 -26
- package/assets/sass/elements/lists--steps.css +171 -171
- package/assets/sass/elements/lists--tick-list.scss +112 -112
- package/assets/sass/elements/lists.scss +99 -99
- package/assets/sass/elements/media.css +20 -20
- package/assets/sass/elements/modal.scss +411 -411
- package/assets/sass/elements/popover.scss +259 -259
- package/assets/sass/elements/prefix.scss +139 -139
- package/assets/sass/elements/progress.scss +208 -208
- package/assets/sass/elements/table.element.scss +144 -144
- package/assets/sass/elements/textarea.css +84 -84
- package/assets/sass/elements/toggle-button.css +49 -49
- package/assets/sass/elements/tooltips.scss +152 -152
- package/assets/sass/elements/type.css +166 -166
- package/assets/sass/email.scss +68 -68
- package/assets/sass/error.scss +31 -31
- package/assets/sass/foundations/animations.scss +2 -2
- package/assets/sass/foundations/colours.scss +104 -104
- package/assets/sass/foundations/reboot.scss +166 -166
- package/assets/sass/foundations/root.scss +269 -269
- package/assets/sass/main.scss +7 -7
- package/assets/sass/templates/auth.scss +106 -106
- package/assets/sass/templates/form.scss +95 -95
- package/assets/sass/utilities/align.css +24 -24
- package/assets/sass/utilities/border.css +65 -65
- package/assets/sass/utilities/clearfix.css +8 -8
- package/assets/sass/utilities/colours.scss +43 -43
- package/assets/sass/utilities/columns.css +61 -61
- package/assets/sass/utilities/display.scss +89 -89
- package/assets/sass/utilities/fixed.css +16 -16
- package/assets/sass/utilities/flex.scss +291 -291
- package/assets/sass/utilities/font-awesome-iso-fallbacks.css +43 -43
- package/assets/sass/utilities/gap.css +25 -25
- package/assets/sass/utilities/gradients.css +39 -39
- package/assets/sass/utilities/js-display.css +12 -12
- package/assets/sass/utilities/line-clamp.css +24 -24
- package/assets/sass/utilities/margins.scss +74 -74
- package/assets/sass/utilities/max-height.scss +93 -93
- package/assets/sass/utilities/opacity.css +20 -20
- package/assets/sass/utilities/order.css +104 -104
- package/assets/sass/utilities/overflow.css +16 -16
- package/assets/sass/utilities/paddings.scss +33 -33
- package/assets/sass/utilities/pointer-events.css +8 -8
- package/assets/sass/utilities/position.css +67 -67
- package/assets/sass/utilities/ratio.css +33 -33
- package/assets/sass/utilities/rounded.css +56 -56
- package/assets/sass/utilities/shadow.css +6 -6
- package/assets/sass/utilities/sizes.css +92 -92
- package/assets/sass/utilities/sticky.css +38 -38
- package/assets/sass/utilities/text-truncate.css +6 -6
- package/assets/sass/utilities/text.css +190 -190
- package/assets/sass/utilities/visible.css +8 -8
- package/assets/sass/utilities/visually-hidden.css +13 -13
- package/assets/sass/utilities/wider-colours.scss +8 -8
- package/assets/svg/illustrations/table.svg +165 -165
- package/assets/svg/logo.svg +56 -56
- package/assets/ts/components/accordion/accordion.component.ts +77 -77
- package/assets/ts/components/actionbar/actionbar.component.ts +567 -567
- package/assets/ts/components/address-lookup/address-lookup.component.ts +672 -672
- package/assets/ts/components/advanced-select/advanced-select.component.ts +116 -116
- package/assets/ts/components/applied-filters/applied-filters.component.ts +37 -37
- package/assets/ts/components/bento-grid/bento-grid.component.ts +88 -88
- package/assets/ts/components/collapsible-side/collapsible-side.component.ts +165 -165
- package/assets/ts/components/config/config.component.ts +699 -699
- package/assets/ts/components/content/content.component.ts +78 -78
- package/assets/ts/components/darkmode/darkmode.component.ts +108 -108
- package/assets/ts/components/fileupload/fileupload.component.ts +74 -74
- package/assets/ts/components/filter-card/filter-card.component.ts +106 -106
- package/assets/ts/components/form/form.component.ts +102 -102
- package/assets/ts/components/header/header.component.ts +97 -97
- package/assets/ts/components/inline-edit/inline-edit.component.ts +212 -212
- package/assets/ts/components/input/input.component.ts +278 -278
- package/assets/ts/components/input-range/input-range.component.ts +78 -78
- package/assets/ts/components/marketing/marketing.component.ts +44 -44
- package/assets/ts/components/menu/menu.component.ts +212 -212
- package/assets/ts/components/modal/modal.component.ts +184 -184
- package/assets/ts/components/multi-step-modal/multi-step-modal.component.ts +304 -304
- package/assets/ts/components/multiselect/multiselect.component.ts +349 -349
- package/assets/ts/components/nav/nav.component.ts +369 -369
- package/assets/ts/components/notification/notification.component.ts +173 -172
- package/assets/ts/components/pagination/pagination.component.ts +213 -213
- package/assets/ts/components/password/password.component.ts +118 -118
- package/assets/ts/components/popover/popover.component.ts +50 -50
- package/assets/ts/components/rank/rank.component.ts +394 -394
- package/assets/ts/components/rankings/rankings.component.ts +79 -79
- package/assets/ts/components/rating/rating.component.ts +86 -86
- package/assets/ts/components/search/search.component.ts +244 -244
- package/assets/ts/components/slider/slider.component.ts +170 -170
- package/assets/ts/components/split-button/split-button.component.ts +63 -63
- package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +1919 -1919
- package/assets/ts/components/table/table.component.ts +94 -94
- package/assets/ts/components/table-ajax/table-ajax.component.ts +70 -70
- package/assets/ts/components/table-basic/table-basic.component.ts +56 -56
- package/assets/ts/components/table-no-submit/table-no-submit.component.ts +130 -130
- package/assets/ts/components/table-submit/table-submit.component.ts +71 -71
- package/assets/ts/components/tabs/tabs.component.ts +70 -70
- package/assets/ts/components/tag/tag.component.ts +104 -104
- package/assets/ts/components/tooltip/tooltip.component.ts +98 -98
- package/assets/ts/components/video/video.component.ts +74 -74
- package/assets/ts/components/video-card/video-card.component.ts +129 -129
- package/assets/ts/components/video-modal/video-modal.component.ts +88 -88
- package/assets/ts/modules/advanced-select.ts +186 -186
- package/assets/ts/modules/applied-filters.ts +238 -238
- package/assets/ts/modules/card.module.ts +46 -46
- package/assets/ts/modules/chart.module.ts +594 -594
- package/assets/ts/modules/data-layer.md +71 -71
- package/assets/ts/modules/dialogs.ts +259 -259
- package/assets/ts/modules/dropdown.ts +216 -216
- package/assets/ts/modules/helper.test.ts +143 -143
- package/assets/ts/modules/helpers.ts +212 -212
- package/assets/ts/modules/integration-tests.ts +525 -525
- package/assets/ts/modules/modal.ts +45 -45
- package/assets/ts/modules/password.ts +82 -82
- package/assets/ts/modules/table.ts +1500 -1500
- package/assets/ts/modules/test.ts +22 -22
- package/assets/ts/modules/videos.ts +233 -233
- package/assets/ts/scripts.ts +111 -111
- package/dist/components.es.js +25 -25
- package/dist/components.umd.js +10 -9
- package/package.json +115 -115
- package/src/components/AdvancedSelect/AdvancedSelect.vue +28 -28
- package/src/components/Config/Config.vue +23 -23
- package/src/components/DarkMode/DarkMode.vue +19 -19
- package/src/components/Filterlist/Filterlist.vue +23 -23
- package/src/components/Form/Form.vue +22 -22
- package/src/components/Header/Header.vue +36 -36
- package/src/components/Input/Input.vue +22 -22
- package/src/components/InputRange/InputRange.vue +22 -22
- package/src/components/Modal/Modal.vue +22 -22
- package/src/components/MultiStepModal/MultiStepModal.vue +23 -23
- package/src/components/NoteFeed/NoteFeed.vue +82 -82
- package/src/components/Password/Password.vue +23 -23
- package/src/components/Popover/Popover.vue +22 -22
- package/src/components/PropertySearchbar/PropertySearchbar.vue +235 -235
- package/src/components/PropertySearchbar/README.md +25 -25
- package/src/components/Rating/Rating.vue +22 -22
- package/src/components/STDAddressLookup/STDAddressLookup.vue +22 -22
- package/src/components/Snapshot/Snapshot.vue +30 -30
- package/src/components/Tag/Tag.vue +22 -22
- package/src/components/Tooltip/Tooltip.vue +22 -22
- package/src/components/Video/Video.vue +22 -22
- package/src/components/VideoModal/VideoModal.vue +22 -22
- package/assets/bootstrap/dist/css/bootstrap-grid.css +0 -4124
- package/assets/bootstrap/dist/css/bootstrap-grid.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-grid.min.css +0 -7
- package/assets/bootstrap/dist/css/bootstrap-grid.min.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-grid.rtl.css +0 -4123
- package/assets/bootstrap/dist/css/bootstrap-grid.rtl.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-grid.rtl.min.css +0 -7
- package/assets/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-reboot.css +0 -488
- package/assets/bootstrap/dist/css/bootstrap-reboot.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-reboot.min.css +0 -7
- package/assets/bootstrap/dist/css/bootstrap-reboot.min.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-reboot.rtl.css +0 -485
- package/assets/bootstrap/dist/css/bootstrap-reboot.rtl.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-reboot.rtl.min.css +0 -7
- package/assets/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-utilities.css +0 -4197
- package/assets/bootstrap/dist/css/bootstrap-utilities.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-utilities.min.css +0 -7
- package/assets/bootstrap/dist/css/bootstrap-utilities.min.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-utilities.rtl.css +0 -4188
- package/assets/bootstrap/dist/css/bootstrap-utilities.rtl.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap-utilities.rtl.min.css +0 -7
- package/assets/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap.css +0 -10907
- package/assets/bootstrap/dist/css/bootstrap.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap.min.css +0 -7
- package/assets/bootstrap/dist/css/bootstrap.min.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap.rtl.css +0 -10867
- package/assets/bootstrap/dist/css/bootstrap.rtl.css.map +0 -1
- package/assets/bootstrap/dist/css/bootstrap.rtl.min.css +0 -7
- package/assets/bootstrap/dist/css/bootstrap.rtl.min.css.map +0 -1
- package/assets/bootstrap/dist/js/bootstrap.bundle.js +0 -7066
- package/assets/bootstrap/dist/js/bootstrap.bundle.js.map +0 -1
- package/assets/bootstrap/dist/js/bootstrap.bundle.min.js +0 -7
- package/assets/bootstrap/dist/js/bootstrap.bundle.min.js.map +0 -1
- package/assets/bootstrap/dist/js/bootstrap.esm.js +0 -5204
- package/assets/bootstrap/dist/js/bootstrap.esm.js.map +0 -1
- package/assets/bootstrap/dist/js/bootstrap.esm.min.js +0 -7
- package/assets/bootstrap/dist/js/bootstrap.esm.min.js.map +0 -1
- package/assets/bootstrap/dist/js/bootstrap.js +0 -5251
- package/assets/bootstrap/dist/js/bootstrap.js.map +0 -1
- package/assets/bootstrap/dist/js/bootstrap.min.js +0 -7
- package/assets/bootstrap/dist/js/bootstrap.min.js.map +0 -1
- package/assets/bootstrap/js/dist/alert.js +0 -100
- package/assets/bootstrap/js/dist/alert.js.map +0 -1
- package/assets/bootstrap/js/dist/base-component.js +0 -100
- package/assets/bootstrap/js/dist/base-component.js.map +0 -1
- package/assets/bootstrap/js/dist/button.js +0 -82
- package/assets/bootstrap/js/dist/button.js.map +0 -1
- package/assets/bootstrap/js/dist/carousel.js +0 -471
- package/assets/bootstrap/js/dist/carousel.js.map +0 -1
- package/assets/bootstrap/js/dist/collapse.js +0 -311
- package/assets/bootstrap/js/dist/collapse.js.map +0 -1
- package/assets/bootstrap/js/dist/dom/data.js +0 -67
- package/assets/bootstrap/js/dist/dom/data.js.map +0 -1
- package/assets/bootstrap/js/dist/dom/event-handler.js +0 -284
- package/assets/bootstrap/js/dist/dom/event-handler.js.map +0 -1
- package/assets/bootstrap/js/dist/dom/manipulator.js +0 -85
- package/assets/bootstrap/js/dist/dom/manipulator.js.map +0 -1
- package/assets/bootstrap/js/dist/dom/selector-engine.js +0 -86
- package/assets/bootstrap/js/dist/dom/selector-engine.js.map +0 -1
- package/assets/bootstrap/js/dist/dropdown.js +0 -471
- package/assets/bootstrap/js/dist/dropdown.js.map +0 -1
- package/assets/bootstrap/js/dist/modal.js +0 -397
- package/assets/bootstrap/js/dist/modal.js.map +0 -1
- package/assets/bootstrap/js/dist/offcanvas.js +0 -298
- package/assets/bootstrap/js/dist/offcanvas.js.map +0 -1
- package/assets/bootstrap/js/dist/popover.js +0 -102
- package/assets/bootstrap/js/dist/popover.js.map +0 -1
- package/assets/bootstrap/js/dist/scrollspy.js +0 -308
- package/assets/bootstrap/js/dist/scrollspy.js.map +0 -1
- package/assets/bootstrap/js/dist/tab.js +0 -334
- package/assets/bootstrap/js/dist/tab.js.map +0 -1
- package/assets/bootstrap/js/dist/toast.js +0 -237
- package/assets/bootstrap/js/dist/toast.js.map +0 -1
- package/assets/bootstrap/js/dist/tooltip.js +0 -663
- package/assets/bootstrap/js/dist/tooltip.js.map +0 -1
- package/assets/bootstrap/js/dist/util/backdrop.js +0 -166
- package/assets/bootstrap/js/dist/util/backdrop.js.map +0 -1
- package/assets/bootstrap/js/dist/util/component-functions.js +0 -47
- package/assets/bootstrap/js/dist/util/component-functions.js.map +0 -1
- package/assets/bootstrap/js/dist/util/config.js +0 -80
- package/assets/bootstrap/js/dist/util/config.js.map +0 -1
- package/assets/bootstrap/js/dist/util/focustrap.js +0 -130
- package/assets/bootstrap/js/dist/util/focustrap.js.map +0 -1
- package/assets/bootstrap/js/dist/util/index.js +0 -351
- package/assets/bootstrap/js/dist/util/index.js.map +0 -1
- package/assets/bootstrap/js/dist/util/sanitizer.js +0 -123
- package/assets/bootstrap/js/dist/util/sanitizer.js.map +0 -1
- package/assets/bootstrap/js/dist/util/scrollbar.js +0 -139
- package/assets/bootstrap/js/dist/util/scrollbar.js.map +0 -1
- package/assets/bootstrap/js/dist/util/swipe.js +0 -156
- package/assets/bootstrap/js/dist/util/swipe.js.map +0 -1
- package/assets/bootstrap/js/dist/util/template-factory.js +0 -178
- package/assets/bootstrap/js/dist/util/template-factory.js.map +0 -1
- package/assets/css/components/header.css.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advanced-select.component.min.js","sources":["../../modules/advanced-select.js","../../modules/helpers.js","advanced-select.component.js"],"sourcesContent":["function advancedSelect(advancedSelect, displayInputField, datalist, isSearch = false) {\n let currentFocus = -1;\n const datalistWrapper = datalist.closest('.datalist__wrapper') ? datalist.closest('.datalist__wrapper') : datalist;\n // Hide the default datalist\n displayInputField.setAttribute('data-list', displayInputField.getAttribute('list'));\n displayInputField.setAttribute('list', '');\n if (displayInputField.hasAttribute('placeholder'))\n displayInputField.setAttribute('data-placeholder', displayInputField.getAttribute('placeholder'));\n if (displayInputField.hasAttribute('placeholder'))\n displayInputField.setAttribute('data-original-placeholder', displayInputField.getAttribute('placeholder'));\n displayInputField.addEventListener('focus', function () {\n if (displayInputField.value != \"\") {\n displayInputField.setAttribute('placeholder', displayInputField.value);\n displayInputField.setAttribute('data-value', displayInputField.value);\n }\n displayInputField.value = '';\n });\n displayInputField.addEventListener('blur', function () {\n if (displayInputField.hasAttribute('data-value')) {\n displayInputField.value = displayInputField.getAttribute('data-value');\n }\n if (displayInputField.hasAttribute('data-placeholder'))\n displayInputField.setAttribute('placeholder', displayInputField.getAttribute('data-placeholder'));\n });\n for (const option of datalist.options) {\n if (option.innerHTML == '')\n option.innerHTML = option.value;\n }\n datalist.addEventListener('click', function (event) {\n var _a;\n if (event && event.target instanceof HTMLElement && event.target.closest('option')) {\n const option = event.target.closest('option');\n const optionText = ((_a = option.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || option.value;\n // Store actual value on the original input\n const originalInput = advancedSelect.querySelector('input[type=\"hidden\"]');\n if (originalInput) {\n originalInput.value = option.value;\n originalInput.setAttribute('value', option.value);\n }\n // Show label text in the visible field\n displayInputField.value = optionText;\n displayInputField.setAttribute('data-value', optionText);\n displayInputField.setAttribute('placeholder', optionText);\n if (typeof window.triggerDynamicEvent == 'function')\n window.triggerDynamicEvent(displayInputField);\n for (const optionInner of datalist.options) {\n optionInner.classList.remove('active');\n }\n option.classList.add('active');\n setTimeout(() => {\n advancedSelect.dispatchEvent(new CustomEvent('update-value', {\n detail: {\n value: option.value,\n text: optionText,\n },\n }));\n }, 0);\n }\n });\n displayInputField.addEventListener('input', function () {\n displayInputField.removeAttribute('data-value');\n currentFocus = -1;\n if (advancedSelect.tagName != \"IAM-ADDRESS-LOOKUP\") {\n const text = displayInputField.value.toUpperCase();\n for (const option of datalist.options) {\n const optionText = (option.textContent || option.value).toUpperCase();\n if (optionText.indexOf(text) > -1) {\n option.style.display = 'block';\n option.classList.remove('hide');\n }\n else {\n option.style.display = 'none';\n option.classList.add('hide');\n }\n }\n }\n });\n advancedSelect.addEventListener('keydown', function (e) {\n if (e.keyCode == 40) {\n currentFocus++;\n addActive(datalist.options);\n }\n else if (e.keyCode == 38) {\n currentFocus--;\n addActive(datalist.options);\n }\n else if (e.keyCode == 13) {\n e.preventDefault();\n if (currentFocus > -1) {\n /*and simulate a click on the \"active\" item:*/\n if (datalist.options)\n datalist.options[currentFocus].click();\n }\n }\n });\n function addActive(x) {\n if (!x)\n return false;\n removeActive(x);\n if (currentFocus >= x.length)\n currentFocus = 0;\n if (currentFocus < 0)\n currentFocus = x.length - 1;\n x[currentFocus].classList.add('active');\n }\n function removeActive(x) {\n if (!x)\n return false;\n for (let i = 0; i < x.length; i++) {\n x[i].classList.remove('active');\n }\n }\n // Add the empty button\n displayInputField\n .closest('label')\n .insertAdjacentHTML('beforeend', '<button class=\"empty btn btn-action\" type=\"button\"><i class=\"fa-light fa-times me-0\"></i></button>');\n const emptyField = () => {\n const originalInput = advancedSelect.querySelector('input[type=\"hidden\"]');\n if (originalInput) {\n originalInput.value = '';\n originalInput.setAttribute('value', '');\n }\n displayInputField.removeAttribute('placeholder');\n if (displayInputField.hasAttribute('data-original-placeholder'))\n displayInputField.setAttribute('placeholder', displayInputField.getAttribute('data-original-placeholder'));\n displayInputField.removeAttribute('data-value');\n displayInputField.value = '';\n for (const optionInner of datalist.options) {\n optionInner.classList.remove('active');\n optionInner.classList.remove('hide');\n optionInner.removeAttribute('style');\n }\n const updateEvent = new CustomEvent('close-button-pressed');\n advancedSelect.dispatchEvent(updateEvent);\n // Notify consumers the value was cleared\n advancedSelect.dispatchEvent(new CustomEvent('update-value', {\n detail: {\n value: '',\n text: '',\n },\n }));\n };\n const closeBtn = advancedSelect.querySelector('.empty') ? advancedSelect.querySelector('.empty') : advancedSelect.shadowRoot.querySelector('.empty');\n closeBtn.addEventListener('click', function (e) {\n emptyField();\n });\n advancedSelect.addEventListener('empty', function (e) {\n emptyField();\n });\n}\nexport default advancedSelect;\n","/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add('js-enabled');\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add('ie');\n }\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n const detail = document.querySelector(`detail${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n else if (detail instanceof HTMLElement)\n detail.addAttribute('open');\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () {\n checkElements(location.hash);\n }, false);\n addEventListener('popstate', (event) => {\n if (event && event.state && event.state.type && event.state.type == 'pagination') {\n const form = document.querySelector(`#${event.state.form}`);\n const pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event('submit'));\n }\n });\n Array.from(document.querySelectorAll('form')).forEach((form) => {\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n form.addEventListener('submit', (event) => {\n var _a;\n if (form.querySelector(':invalid')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n });\n }\n });\n document.addEventListener('click', (event) => {\n var _a;\n if (event && event.target instanceof HTMLElement && event.target.matches('form button:not([type=button])')) {\n const form = event.target.closest('form');\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') ||\n form.querySelector('.pwd-checker[data-strength=\"1\"]') ||\n form.querySelector('.pwd-checker[data-strength=\"2\"]')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n if (document.querySelector('.dialog--transactional[open], .dialog--acknowledgement[open]')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n Array.from(document.querySelectorAll('label progress')).forEach((progress) => {\n const label = progress.closest('label');\n label.setAttribute('data-percent', progress.getAttribute('value'));\n });\n};\nexport const isNumeric = function (str) {\n if (typeof str != 'string')\n return false; // we only process strings!\n return (!isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str\n .split(' ')\n .map((s) => ucfirst(s))\n .join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\nexport const numberOfDays = function (startDateString, endDateString) {\n const convertStart = startDateString.split('/');\n const convertEnd = endDateString.split('/');\n const dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n const dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);\n if (dateStart == 'Invalid Date')\n throw 'Start date is not a valid date';\n if (dateEnd == 'Invalid Date')\n throw 'End date is not a valid date';\n // To calculate the time difference of two dates\n const diffTime = dateEnd.getTime() - dateStart.getTime();\n const numberOfDays = diffTime / (1000 * 3600 * 24) + 1;\n if (numberOfDays < 0)\n throw 'The start date should be before the end date';\n return numberOfDays;\n};\n// Used to get values from nested json objects\nexport const resolvePath = (object, path, defaultValue) => path\n // eslint-disable-next-line no-useless-escape\n .split(/[\\.\\[\\]\\'\\\"]/)\n .filter((p) => p)\n .reduce((o, p) => (o ? o[p] : defaultValue), object);\nexport const isTraversable = (o) => Array.isArray(o) || (o !== null && ['function', 'object'].includes(typeof o));\nexport const getSwipeDirection = (touchstartX, touchstartY, touchendX, touchendY) => {\n const limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n const pageWidth = window.innerWidth || document.body.clientWidth;\n const treshold = Math.max(1, Math.floor(0.01 * pageWidth));\n const x = touchendX - touchstartX;\n const y = touchendY - touchstartY;\n const xy = Math.abs(x / y);\n const yx = Math.abs(y / x);\n if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n if (yx <= limit) {\n if (x < 0) {\n return 'left';\n }\n else {\n return 'right';\n }\n }\n if (xy <= limit) {\n if (y < 0) {\n return 'top';\n }\n else {\n return 'bottom';\n }\n }\n }\n else {\n return 'tap';\n }\n};\nexport const uniqueID = (index = 1) => {\n const ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n};\nexport const isValidPostcode = (searchValue) => {\n const regexp = /^([A-Z][A-HJ-Y]?[0-9][A-Z0-9]? ?[0-9][A-Z]{2}|GIR ?0A{2})$/gmi;\n return regexp.test(searchValue.trim());\n};\n","import advancedSelect from '../../modules/advanced-select';\nimport { safeID } from '../../modules/helpers';\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n event: 'customElementRegistered',\n element: 'Advanced select',\n});\nclass iamAdvancedSelect extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css')\n ? document.body.getAttribute('data-core-css')\n : `${assetLocation}/css/core.min.css`;\n const template = document.createElement('template');\n template.innerHTML = `\r\n <style>\r\n @import \"${coreCSS}\";\r\n input {\r\n background: red;\r\n }\r\n input:not(.is-invalid):not(:invalid) {\r\n background: none!important;\r\n }\r\n .optional-text {\r\n display: none;\r\n } \r\n .js-hide {\r\n display: none !important;\r\n }\r\n </style>\r\n <link rel=\"stylesheet\" href=\"https://kit.fontawesome.com/8bd0fca975.css\" crossorigin=\"anonymous\" />\r\n <slot></slot>\r\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n var _a, _b;\n // Clone original input field, re-name and use for display purposes\n const inputField = this.querySelector('input');\n if (!inputField)\n return;\n const displayInputField = inputField.cloneNode();\n displayInputField.value = '';\n displayInputField.removeAttribute('value');\n displayInputField.setAttribute('name', `${inputField.getAttribute('name')}Alt`);\n inputField.removeAttribute('data-change-events');\n displayInputField.removeAttribute('id');\n let datalist = this.querySelector('datalist');\n inputField.after(displayInputField);\n // Hide original input field\n inputField.setAttribute('type', 'hidden');\n // if data list does not exist then create one and append\n if (!datalist) {\n datalist = document.createElement('datalist');\n const listID = safeID('list');\n datalist.setAttribute('id', listID);\n searchWrapper.appendChild(datalist);\n displayInputField.setAttribute('list', listID);\n }\n else {\n displayInputField.setAttribute('list', datalist.id);\n }\n if (datalist && datalist.querySelector(`[value=\"${inputField.value}\"]`)) {\n (_a = datalist.querySelector(`[value=\"${inputField.value}\"]`)) === null || _a === void 0 ? void 0 : _a.classList.add('active');\n }\n advancedSelect(this, displayInputField, datalist);\n // Apply initial value passed to the component host or original input\n const initialValue = this.getAttribute('value') || inputField.value || '';\n if (!initialValue)\n return;\n inputField.value = initialValue;\n inputField.setAttribute('value', initialValue);\n let displayValue = initialValue;\n if (datalist) {\n const selectedOption = Array.from(datalist.querySelectorAll('option')).find((option) => {\n return option.getAttribute('value') === initialValue;\n });\n if (selectedOption) {\n displayValue = ((_b = selectedOption.textContent) === null || _b === void 0 ? void 0 : _b.trim()) || selectedOption.value;\n }\n Array.from(datalist.querySelectorAll('option')).forEach((option) => {\n const isMatch = option.getAttribute('value') === initialValue;\n option.classList.toggle('active', isMatch);\n });\n }\n displayInputField.value = displayValue;\n displayInputField.setAttribute('placeholder', displayValue);\n displayInputField.setAttribute('data-value', displayValue);\n displayInputField.removeAttribute('value');\n }\n}\nexport default iamAdvancedSelect;\n"],"names":["advancedSelect","displayInputField","datalist","isSearch","currentFocus","option","event","_a","optionText","originalInput","optionInner","text","addActive","x","removeActive","i","emptyField","updateEvent","snake","str","safeID","iamAdvancedSelect","assetLocation","coreCSS","template","_b","inputField","listID","initialValue","displayValue","selectedOption","isMatch"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"advanced-select.component.min.js","sources":["../../modules/advanced-select.js","../../modules/helpers.js","advanced-select.component.js"],"sourcesContent":["function advancedSelect(advancedSelect, displayInputField, datalist, isSearch = false) {\n let currentFocus = -1;\n const datalistWrapper = datalist.closest('.datalist__wrapper') ? datalist.closest('.datalist__wrapper') : datalist;\n // Hide the default datalist\n displayInputField.setAttribute('data-list', displayInputField.getAttribute('list'));\n displayInputField.setAttribute('list', '');\n if (displayInputField.hasAttribute('placeholder'))\n displayInputField.setAttribute('data-placeholder', displayInputField.getAttribute('placeholder'));\n if (displayInputField.hasAttribute('placeholder'))\n displayInputField.setAttribute('data-original-placeholder', displayInputField.getAttribute('placeholder'));\n displayInputField.addEventListener('focus', function () {\n if (displayInputField.value != \"\") {\n displayInputField.setAttribute('placeholder', displayInputField.value);\n displayInputField.setAttribute('data-value', displayInputField.value);\n }\n displayInputField.value = '';\n });\n displayInputField.addEventListener('blur', function () {\n if (displayInputField.hasAttribute('data-value')) {\n displayInputField.value = displayInputField.getAttribute('data-value');\n }\n if (displayInputField.hasAttribute('data-placeholder'))\n displayInputField.setAttribute('placeholder', displayInputField.getAttribute('data-placeholder'));\n });\n for (const option of datalist.options) {\n if (option.innerHTML == '')\n option.innerHTML = option.value;\n }\n datalist.addEventListener('click', function (event) {\n var _a;\n if (event && event.target instanceof HTMLElement && event.target.closest('option')) {\n const option = event.target.closest('option');\n const optionText = ((_a = option.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || option.value;\n // Store actual value on the original input\n const originalInput = advancedSelect.querySelector('input[type=\"hidden\"]');\n if (originalInput) {\n originalInput.value = option.value;\n originalInput.setAttribute('value', option.value);\n }\n // Show label text in the visible field\n displayInputField.value = optionText;\n displayInputField.setAttribute('data-value', optionText);\n displayInputField.setAttribute('placeholder', optionText);\n if (typeof window.triggerDynamicEvent == 'function')\n window.triggerDynamicEvent(displayInputField);\n for (const optionInner of datalist.options) {\n optionInner.classList.remove('active');\n }\n option.classList.add('active');\n setTimeout(() => {\n advancedSelect.dispatchEvent(new CustomEvent('update-value', {\n detail: {\n value: option.value,\n text: optionText,\n },\n }));\n }, 0);\n }\n });\n displayInputField.addEventListener('input', function () {\n displayInputField.removeAttribute('data-value');\n currentFocus = -1;\n if (advancedSelect.tagName != \"IAM-ADDRESS-LOOKUP\") {\n const text = displayInputField.value.toUpperCase();\n for (const option of datalist.options) {\n const optionText = (option.textContent || option.value).toUpperCase();\n if (optionText.indexOf(text) > -1) {\n option.style.display = 'block';\n option.classList.remove('hide');\n }\n else {\n option.style.display = 'none';\n option.classList.add('hide');\n }\n }\n }\n });\n advancedSelect.addEventListener('keydown', function (e) {\n if (e.keyCode == 40) {\n currentFocus++;\n addActive(datalist.options);\n }\n else if (e.keyCode == 38) {\n currentFocus--;\n addActive(datalist.options);\n }\n else if (e.keyCode == 13) {\n e.preventDefault();\n if (currentFocus > -1) {\n /*and simulate a click on the \"active\" item:*/\n if (datalist.options)\n datalist.options[currentFocus].click();\n }\n }\n });\n function addActive(x) {\n if (!x)\n return false;\n removeActive(x);\n if (currentFocus >= x.length)\n currentFocus = 0;\n if (currentFocus < 0)\n currentFocus = x.length - 1;\n x[currentFocus].classList.add('active');\n }\n function removeActive(x) {\n if (!x)\n return false;\n for (let i = 0; i < x.length; i++) {\n x[i].classList.remove('active');\n }\n }\n // Add the empty button\n displayInputField\n .closest('label')\n .insertAdjacentHTML('beforeend', '<button class=\"empty btn btn-action\" type=\"button\"><i class=\"fa-light fa-times me-0\"></i></button>');\n const emptyField = () => {\n const originalInput = advancedSelect.querySelector('input[type=\"hidden\"]');\n if (originalInput) {\n originalInput.value = '';\n originalInput.setAttribute('value', '');\n }\n displayInputField.removeAttribute('placeholder');\n if (displayInputField.hasAttribute('data-original-placeholder'))\n displayInputField.setAttribute('placeholder', displayInputField.getAttribute('data-original-placeholder'));\n displayInputField.removeAttribute('data-value');\n displayInputField.value = '';\n for (const optionInner of datalist.options) {\n optionInner.classList.remove('active');\n optionInner.classList.remove('hide');\n optionInner.removeAttribute('style');\n }\n const updateEvent = new CustomEvent('close-button-pressed');\n advancedSelect.dispatchEvent(updateEvent);\n // Notify consumers the value was cleared\n advancedSelect.dispatchEvent(new CustomEvent('update-value', {\n detail: {\n value: '',\n text: '',\n },\n }));\n };\n const closeBtn = advancedSelect.querySelector('.empty') ? advancedSelect.querySelector('.empty') : advancedSelect.shadowRoot.querySelector('.empty');\n closeBtn.addEventListener('click', function (e) {\n emptyField();\n });\n advancedSelect.addEventListener('empty', function (e) {\n emptyField();\n });\n}\nexport default advancedSelect;\n","/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add('js-enabled');\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add('ie');\n }\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n const detail = document.querySelector(`detail${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n else if (detail instanceof HTMLElement)\n detail.addAttribute('open');\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () {\n checkElements(location.hash);\n }, false);\n addEventListener('popstate', (event) => {\n if (event && event.state && event.state.type && event.state.type == 'pagination') {\n const form = document.querySelector(`#${event.state.form}`);\n const pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event('submit'));\n }\n });\n Array.from(document.querySelectorAll('form')).forEach((form) => {\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n form.addEventListener('submit', (event) => {\n var _a;\n if (form.querySelector(':invalid')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n });\n }\n });\n document.addEventListener('click', (event) => {\n var _a;\n if (event && event.target instanceof HTMLElement && event.target.matches('form button:not([type=button])')) {\n const form = event.target.closest('form');\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') ||\n form.querySelector('.pwd-checker[data-strength=\"1\"]') ||\n form.querySelector('.pwd-checker[data-strength=\"2\"]')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n if (document.querySelector('.dialog--transactional[open], .dialog--acknowledgement[open]')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n Array.from(document.querySelectorAll('label progress')).forEach((progress) => {\n const label = progress.closest('label');\n label.setAttribute('data-percent', progress.getAttribute('value'));\n });\n};\nexport const isNumeric = function (str) {\n if (typeof str != 'string')\n return false; // we only process strings!\n return (!isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str\n .split(' ')\n .map((s) => ucfirst(s))\n .join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\nexport const numberOfDays = function (startDateString, endDateString) {\n const convertStart = startDateString.split('/');\n const convertEnd = endDateString.split('/');\n const dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n const dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);\n if (dateStart == 'Invalid Date')\n throw 'Start date is not a valid date';\n if (dateEnd == 'Invalid Date')\n throw 'End date is not a valid date';\n // To calculate the time difference of two dates\n const diffTime = dateEnd.getTime() - dateStart.getTime();\n const numberOfDays = diffTime / (1000 * 3600 * 24) + 1;\n if (numberOfDays < 0)\n throw 'The start date should be before the end date';\n return numberOfDays;\n};\n// Used to get values from nested json objects\nexport const resolvePath = (object, path, defaultValue) => path\n // eslint-disable-next-line no-useless-escape\n .split(/[\\.\\[\\]\\'\\\"]/)\n .filter((p) => p)\n .reduce((o, p) => (o ? o[p] : defaultValue), object);\nexport const isTraversable = (o) => Array.isArray(o) || (o !== null && ['function', 'object'].includes(typeof o));\nexport const getSwipeDirection = (touchstartX, touchstartY, touchendX, touchendY) => {\n const limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n const pageWidth = window.innerWidth || document.body.clientWidth;\n const treshold = Math.max(1, Math.floor(0.01 * pageWidth));\n const x = touchendX - touchstartX;\n const y = touchendY - touchstartY;\n const xy = Math.abs(x / y);\n const yx = Math.abs(y / x);\n if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n if (yx <= limit) {\n if (x < 0) {\n return 'left';\n }\n else {\n return 'right';\n }\n }\n if (xy <= limit) {\n if (y < 0) {\n return 'top';\n }\n else {\n return 'bottom';\n }\n }\n }\n else {\n return 'tap';\n }\n};\nexport const uniqueID = (index = 1) => {\n const ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n};\nexport const isValidPostcode = (searchValue) => {\n const regexp = /^([A-Z][A-HJ-Y]?[0-9][A-Z0-9]? ?[0-9][A-Z]{2}|GIR ?0A{2})$/gmi;\n return regexp.test(searchValue.trim());\n};\n","import advancedSelect from '../../modules/advanced-select';\nimport { safeID } from '../../modules/helpers';\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n event: 'customElementRegistered',\n element: 'Advanced select',\n});\nclass iamAdvancedSelect extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const coreCSS = document.body.hasAttribute('data-core-css')\n ? document.body.getAttribute('data-core-css')\n : `${assetLocation}/css/core.min.css`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n @import \"${coreCSS}\";\n input {\n background: red;\n }\n input:not(.is-invalid):not(:invalid) {\n background: none!important;\n }\n .optional-text {\n display: none;\n } \n .js-hide {\n display: none !important;\n }\n </style>\n <link rel=\"stylesheet\" href=\"https://kit.fontawesome.com/8bd0fca975.css\" crossorigin=\"anonymous\" />\n <slot></slot>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n var _a, _b;\n // Clone original input field, re-name and use for display purposes\n const inputField = this.querySelector('input');\n if (!inputField)\n return;\n const displayInputField = inputField.cloneNode();\n displayInputField.value = '';\n displayInputField.removeAttribute('value');\n displayInputField.setAttribute('name', `${inputField.getAttribute('name')}Alt`);\n inputField.removeAttribute('data-change-events');\n displayInputField.removeAttribute('id');\n let datalist = this.querySelector('datalist');\n inputField.after(displayInputField);\n // Hide original input field\n inputField.setAttribute('type', 'hidden');\n // if data list does not exist then create one and append\n if (!datalist) {\n datalist = document.createElement('datalist');\n const listID = safeID('list');\n datalist.setAttribute('id', listID);\n searchWrapper.appendChild(datalist);\n displayInputField.setAttribute('list', listID);\n }\n else {\n displayInputField.setAttribute('list', datalist.id);\n }\n if (datalist && datalist.querySelector(`[value=\"${inputField.value}\"]`)) {\n (_a = datalist.querySelector(`[value=\"${inputField.value}\"]`)) === null || _a === void 0 ? void 0 : _a.classList.add('active');\n }\n advancedSelect(this, displayInputField, datalist);\n // Apply initial value passed to the component host or original input\n const initialValue = this.getAttribute('value') || inputField.value || '';\n if (!initialValue)\n return;\n inputField.value = initialValue;\n inputField.setAttribute('value', initialValue);\n let displayValue = initialValue;\n if (datalist) {\n const selectedOption = Array.from(datalist.querySelectorAll('option')).find((option) => {\n return option.getAttribute('value') === initialValue;\n });\n if (selectedOption) {\n displayValue = ((_b = selectedOption.textContent) === null || _b === void 0 ? void 0 : _b.trim()) || selectedOption.value;\n }\n Array.from(datalist.querySelectorAll('option')).forEach((option) => {\n const isMatch = option.getAttribute('value') === initialValue;\n option.classList.toggle('active', isMatch);\n });\n }\n displayInputField.value = displayValue;\n displayInputField.setAttribute('placeholder', displayValue);\n displayInputField.setAttribute('data-value', displayValue);\n displayInputField.removeAttribute('value');\n }\n}\nexport default iamAdvancedSelect;\n"],"names":["advancedSelect","displayInputField","datalist","isSearch","currentFocus","option","event","_a","optionText","originalInput","optionInner","text","addActive","x","removeActive","i","emptyField","updateEvent","snake","str","safeID","iamAdvancedSelect","assetLocation","coreCSS","template","_b","inputField","listID","initialValue","displayValue","selectedOption","isMatch"],"mappings":"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"}
|
|
@@ -15,12 +15,12 @@ class iamAppliedFilters extends HTMLElement {
|
|
|
15
15
|
const loadCSS = `@import "${assetLocation}/css/components/applied-filters.css";`;
|
|
16
16
|
const classList = this.classList.toString();
|
|
17
17
|
const template = document.createElement('template');
|
|
18
|
-
template.innerHTML = `
|
|
19
|
-
<style>
|
|
20
|
-
${loadCSS}
|
|
21
|
-
</style>
|
|
22
|
-
<div class="applied-filters ${classList}"></div>
|
|
23
|
-
<slot></slot>
|
|
18
|
+
template.innerHTML = `
|
|
19
|
+
<style>
|
|
20
|
+
${loadCSS}
|
|
21
|
+
</style>
|
|
22
|
+
<div class="applied-filters ${classList}"></div>
|
|
23
|
+
<slot></slot>
|
|
24
24
|
`;
|
|
25
25
|
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
26
26
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* iamKey v7.7.1--
|
|
2
|
+
* iamKey v7.7.1--beta8
|
|
3
3
|
* Copyright 2022-2026 iamproperty
|
|
4
4
|
*/function E(t,m){const g=t.closest("dialog"),b=(e,o,r=!1)=>{let s=!1,a=o.getAttribute("name");if(!a)return!1;a.includes("[]")&&(a=a.replace("[]",`[${o.value}]`));let l=e.querySelector(`[data-name="${a}"]`);l&&o.getAttribute("type")=="checkbox"&&(s=!o.checked);const c=o.getAttribute("data-filter-text");if(l||(l=document.createElement("button"),e.appendChild(l)),l.setAttribute("type","button"),l.classList.add("filter"),l.classList.add("tag"),r||l.classList.add("tag--not-set"),l.setAttribute("data-name",a),l.innerHTML=c.replace("$value",o.value),(!o.value||s)&&l.remove(),o.parentNode.closest("[data-filter-text]")){const i=o.parentNode.closest("[data-filter-text]");let v=!0;if(a="",i.querySelectorAll("input").forEach((u,n)=>{const p=u.getAttribute("name");if(a+=`${n!=0?",":""}${p}`,e.querySelector(`[data-name="${p}"]`)&&e.querySelector(`[data-name="${p}"]`).remove(),u.value){const d=document.createElement("button");d.setAttribute("type","button"),d.classList.add("filter"),d.classList.add("tag"),r||l.classList.add("tag--not-set"),d.setAttribute("data-name",p),d.innerHTML=c.replace("$value",u.value),e.appendChild(d)}else v=!1}),e.querySelector(`[data-name="${a}"]`)&&e.querySelector(`[data-name="${a}"]`).remove(),v){let u=i.getAttribute("data-filter-text");i.querySelectorAll("input").forEach((p,d)=>{const y=p.getAttribute("name");e.querySelector(`[data-name="${y}"]`)&&e.querySelector(`[data-name="${y}"]`).remove(),u=u.replace(`$${d+1}`,p.value)});const n=document.createElement("button");n.setAttribute("type","button"),n.classList.add("filter"),n.classList.add("tag"),r||l.classList.add("tag--not-set"),n.setAttribute("data-name",a),n.innerHTML=u,e.appendChild(n)}}},f=(e=!1)=>{m.innerHTML="",Array.from(t.querySelectorAll('input:is([type="checkbox"],[type="radio"]):checked, input:not([type="checkbox"], [type="radio"])')).forEach(o=>{b(m,o,e)})};f(!0),Array.from(t.querySelectorAll("input[data-filter-text]")).forEach(e=>{e.addEventListener("change",function(o){var r;const s=!t.closest("dialog");if(!t.hasAttribute("data-keep-same")&&!t.querySelector("dialog")&&b(m,e,s),s){const a=new CustomEvent("update");(r=t.parentElement.closest("iam-applied-filters"))===null||r===void 0||r.dispatchEvent(a)}})});const h=e=>{if(!e?.hasAttribute("data-name"))return!1;const o=e.getAttribute("data-name").split(",");for(let r=0;r<o.length;r++){const s=o[r];let a=`[name="${s}"]`;s.match(/\[(.*)\]/)&&(a=`[value="${s.replace(/.*\[(.*)\]/,"$1")}"]`);const l=t.querySelectorAll(a);for(let c=0;c<l.length;c++){const i=l[c];i.getAttribute("type")!="radio"&&i.getAttribute("type")!="checkbox"?i.value="":i.checked=!1;const v=new CustomEvent("change");i?.dispatchEvent(v)}}e.remove(),f()};if(m.addEventListener("click",function(e){if(e&&e.target instanceof HTMLElement&&e.target.closest(".filter")){const o=e.target.closest(".filter"),r=o.getAttribute("data-name");h(o);const s=new CustomEvent("filter-clicked",{detail:r});if(t.dispatchEvent(s),t.querySelector("dialog iam-applied-filters")){const a=new CustomEvent("filter",{detail:r});t.querySelector("dialog iam-applied-filters").dispatchEvent(a)}}},!1),t.addEventListener("filter",e=>{const o=t.shadowRoot.querySelector(`[data-name="${e.detail}"]`);h(o)}),t.addEventListener("set-filters",e=>{f(!0)}),g){const e=t.querySelector(".btn-primary")?t.querySelector(".btn-primary"):t.shadowRoot.querySelector(".btn-primary");e?.addEventListener("click",o=>{const r=new CustomEvent("update"),s=new CustomEvent("submit");if(t.dispatchEvent(s),t.parentElement.closest("iam-applied-filters")&&t.parentElement.closest("iam-applied-filters").dispatchEvent(r),t.parentElement&&t.parentElement.closest("iam-applied-filters")&&!t.parentElement.closest("iam-applied-filters").closest("dialog")){const a=new CustomEvent("set-filters");t.parentElement.closest("iam-applied-filters").dispatchEvent(a)}if(f(!0),!t.querySelector(".btn-primary").hasAttribute("command")){g.close();const a=new Event("close");g.dispatchEvent(a)}})}}window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"Applied Filters"});class k extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const m=this.classList.toString(),g=document.createElement("template");g.innerHTML=`
|
|
5
5
|
<style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applied-filters.component.min.js","sources":["../../modules/applied-filters.js","applied-filters.component.js"],"sourcesContent":["function createAppliedFilters(container, filters) {\n const dialog = container.closest('dialog');\n const addFilterButton = (filters, input, setFilter = false) => {\n let shouldRemoveFilter = false;\n let inputName = input.getAttribute('name');\n if (!inputName) {\n return false;\n }\n if (inputName.includes('[]')) {\n inputName = inputName.replace('[]', `[${input.value}]`);\n }\n let filter = filters.querySelector(`[data-name=\"${inputName}\"]`);\n if (filter && input.getAttribute('type') == 'checkbox')\n shouldRemoveFilter = !input.checked ? true : false;\n const filterText = input.getAttribute('data-filter-text');\n if (!filter) {\n filter = document.createElement('button');\n filters.appendChild(filter);\n }\n filter.setAttribute('type', 'button');\n filter.classList.add('filter');\n filter.classList.add('tag');\n if (!setFilter)\n filter.classList.add('tag--not-set');\n filter.setAttribute('data-name', inputName);\n filter.innerHTML = filterText.replace('$value', input.value);\n // If the value\n if (!input.value || shouldRemoveFilter)\n filter.remove();\n // If input has an ancestor with data-filter and all of inputs in that parent have been filled in then we need to transform the filter\n if (input.parentNode.closest('[data-filter-text]')) {\n const parent = input.parentNode.closest('[data-filter-text]');\n let allValuesSet = true;\n inputName = '';\n parent.querySelectorAll('input').forEach((element, index) => {\n const name = element.getAttribute('name');\n // create a joined inputname for the parent filter\n inputName += `${index != 0 ? ',' : ''}${name}`;\n if (filters.querySelector(`[data-name=\"${name}\"]`))\n filters.querySelector(`[data-name=\"${name}\"]`).remove();\n if (element.value) {\n const childFilter = document.createElement('button');\n childFilter.setAttribute('type', 'button');\n childFilter.classList.add('filter');\n childFilter.classList.add('tag');\n if (!setFilter)\n filter.classList.add('tag--not-set');\n childFilter.setAttribute('data-name', name);\n childFilter.innerHTML = filterText.replace('$value', element.value);\n filters.appendChild(childFilter);\n }\n else\n allValuesSet = false;\n });\n if (filters.querySelector(`[data-name=\"${inputName}\"]`))\n filters.querySelector(`[data-name=\"${inputName}\"]`).remove();\n if (allValuesSet) {\n let newFilterText = parent.getAttribute('data-filter-text');\n parent.querySelectorAll('input').forEach((element, index) => {\n const name = element.getAttribute('name');\n // Remove all the child filter tags\n if (filters.querySelector(`[data-name=\"${name}\"]`))\n filters.querySelector(`[data-name=\"${name}\"]`).remove();\n newFilterText = newFilterText.replace(`$${index + 1}`, element.value);\n });\n const parentFilter = document.createElement('button');\n parentFilter.setAttribute('type', 'button');\n parentFilter.classList.add('filter');\n parentFilter.classList.add('tag');\n if (!setFilter)\n filter.classList.add('tag--not-set');\n parentFilter.setAttribute('data-name', inputName);\n parentFilter.innerHTML = newFilterText;\n filters.appendChild(parentFilter);\n }\n }\n };\n const checkForChecked = (setFilter = false) => {\n filters.innerHTML = '';\n Array.from(container.querySelectorAll('input:is([type=\"checkbox\"],[type=\"radio\"]):checked, input:not([type=\"checkbox\"], [type=\"radio\"])')).forEach((input) => {\n addFilterButton(filters, input, setFilter);\n });\n };\n // Check for which inputs have been set, setting true sets the filter as set (blue)\n checkForChecked(true);\n // Create the main event listener for the component watching for inputs to change\n Array.from(container.querySelectorAll('input[data-filter-text]')).forEach((input) => {\n input.addEventListener('change', function (event) {\n var _a;\n const setFilter = container.closest('dialog') ? false : true;\n if (!container.hasAttribute('data-keep-same') && !container.querySelector('dialog'))\n addFilterButton(filters, input, setFilter);\n if (setFilter) {\n const event = new CustomEvent('update');\n (_a = container.parentElement.closest('iam-applied-filters')) === null || _a === void 0 ? void 0 : _a.dispatchEvent(event);\n }\n });\n });\n const filterClicked = (filter) => {\n if (!(filter === null || filter === void 0 ? void 0 : filter.hasAttribute('data-name')))\n return false;\n const names = filter.getAttribute('data-name').split(',');\n for (let t = 0; t < names.length; t++) {\n const name = names[t];\n let selector = `[name=\"${name}\"]`;\n if (name.match(/\\[(.*)\\]/)) {\n //const newName = name.replace(/\\[(.*)\\]/, `[]`);\n const value = name.replace(/.*\\[(.*)\\]/, `$1`);\n selector = `[value=\"${value}\"]`;\n }\n const inputs = container.querySelectorAll(selector);\n for (let i = 0; i < inputs.length; i++) {\n const input = inputs[i];\n if (input.getAttribute('type') != 'radio' && input.getAttribute('type') != 'checkbox') {\n input.value = '';\n }\n else {\n input.checked = false;\n }\n const changeEvent = new CustomEvent('change');\n input === null || input === void 0 ? void 0 : input.dispatchEvent(changeEvent);\n }\n }\n filter.remove();\n checkForChecked();\n };\n filters.addEventListener('click', function (event) {\n if (event && event.target instanceof HTMLElement && event.target.closest('.filter')) {\n const filter = event.target.closest('.filter');\n const filterName = filter.getAttribute('data-name');\n filterClicked(filter);\n const clickedEvent = new CustomEvent('filter-clicked', { 'detail': filterName });\n container.dispatchEvent(clickedEvent);\n // If you clicked on the filter on the parent component we want to tell the child component which filter to copy\n if (container.querySelector('dialog iam-applied-filters')) {\n const event = new CustomEvent('filter', { 'detail': filterName });\n container.querySelector('dialog iam-applied-filters').dispatchEvent(event);\n }\n }\n }, false);\n // Listen for \n container.addEventListener('filter', (e) => {\n const filter = container.shadowRoot.querySelector(`[data-name=\"${e.detail}\"]`);\n filterClicked(filter);\n });\n container.addEventListener('set-filters', (e) => {\n checkForChecked(true);\n });\n if (dialog) {\n const primaryButton = container.querySelector('.btn-primary') ? container.querySelector('.btn-primary') : container.shadowRoot.querySelector('.btn-primary');\n // Force the filters inside of the dialog to effect the filters above\n primaryButton === null || primaryButton === void 0 ? void 0 : primaryButton.addEventListener('click', (e) => {\n const event = new CustomEvent('update');\n const submitEvent = new CustomEvent('submit');\n container.dispatchEvent(submitEvent);\n if (container.parentElement.closest('iam-applied-filters'))\n container.parentElement.closest('iam-applied-filters').dispatchEvent(event);\n if (container.parentElement && container.parentElement.closest('iam-applied-filters') && !container.parentElement.closest('iam-applied-filters').closest('dialog')) {\n const event = new CustomEvent('set-filters');\n container.parentElement.closest('iam-applied-filters').dispatchEvent(event);\n }\n checkForChecked(true);\n if (!container.querySelector('.btn-primary').hasAttribute('command')) {\n dialog.close();\n const event = new Event('close');\n dialog.dispatchEvent(event);\n }\n });\n }\n}\nexport default createAppliedFilters;\n","import createAppliedFilters from '../../modules/applied-filters';\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n event: 'customElementRegistered',\n element: 'Applied Filters',\n});\nclass iamAppliedFilters extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/applied-filters.css\";`;\n const classList = this.classList.toString();\n const template = document.createElement('template');\n template.innerHTML = `\r\n <style>\r\n ${loadCSS}\r\n </style>\r\n <div class=\"applied-filters ${classList}\"></div>\r\n <slot></slot>\r\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n createAppliedFilters(this, this.shadowRoot.querySelector('.applied-filters'));\n }\n}\nexport default iamAppliedFilters;\n"],"names":["createAppliedFilters","container","filters","dialog","addFilterButton","input","setFilter","shouldRemoveFilter","inputName","filter","filterText","parent","allValuesSet","element","index","name","childFilter","newFilterText","parentFilter","checkForChecked","event","_a","filterClicked","names","t","selector","inputs","i","changeEvent","filterName","clickedEvent","primaryButton","e","submitEvent","iamAppliedFilters","classList","template"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"applied-filters.component.min.js","sources":["../../modules/applied-filters.js","applied-filters.component.js"],"sourcesContent":["function createAppliedFilters(container, filters) {\n const dialog = container.closest('dialog');\n const addFilterButton = (filters, input, setFilter = false) => {\n let shouldRemoveFilter = false;\n let inputName = input.getAttribute('name');\n if (!inputName) {\n return false;\n }\n if (inputName.includes('[]')) {\n inputName = inputName.replace('[]', `[${input.value}]`);\n }\n let filter = filters.querySelector(`[data-name=\"${inputName}\"]`);\n if (filter && input.getAttribute('type') == 'checkbox')\n shouldRemoveFilter = !input.checked ? true : false;\n const filterText = input.getAttribute('data-filter-text');\n if (!filter) {\n filter = document.createElement('button');\n filters.appendChild(filter);\n }\n filter.setAttribute('type', 'button');\n filter.classList.add('filter');\n filter.classList.add('tag');\n if (!setFilter)\n filter.classList.add('tag--not-set');\n filter.setAttribute('data-name', inputName);\n filter.innerHTML = filterText.replace('$value', input.value);\n // If the value\n if (!input.value || shouldRemoveFilter)\n filter.remove();\n // If input has an ancestor with data-filter and all of inputs in that parent have been filled in then we need to transform the filter\n if (input.parentNode.closest('[data-filter-text]')) {\n const parent = input.parentNode.closest('[data-filter-text]');\n let allValuesSet = true;\n inputName = '';\n parent.querySelectorAll('input').forEach((element, index) => {\n const name = element.getAttribute('name');\n // create a joined inputname for the parent filter\n inputName += `${index != 0 ? ',' : ''}${name}`;\n if (filters.querySelector(`[data-name=\"${name}\"]`))\n filters.querySelector(`[data-name=\"${name}\"]`).remove();\n if (element.value) {\n const childFilter = document.createElement('button');\n childFilter.setAttribute('type', 'button');\n childFilter.classList.add('filter');\n childFilter.classList.add('tag');\n if (!setFilter)\n filter.classList.add('tag--not-set');\n childFilter.setAttribute('data-name', name);\n childFilter.innerHTML = filterText.replace('$value', element.value);\n filters.appendChild(childFilter);\n }\n else\n allValuesSet = false;\n });\n if (filters.querySelector(`[data-name=\"${inputName}\"]`))\n filters.querySelector(`[data-name=\"${inputName}\"]`).remove();\n if (allValuesSet) {\n let newFilterText = parent.getAttribute('data-filter-text');\n parent.querySelectorAll('input').forEach((element, index) => {\n const name = element.getAttribute('name');\n // Remove all the child filter tags\n if (filters.querySelector(`[data-name=\"${name}\"]`))\n filters.querySelector(`[data-name=\"${name}\"]`).remove();\n newFilterText = newFilterText.replace(`$${index + 1}`, element.value);\n });\n const parentFilter = document.createElement('button');\n parentFilter.setAttribute('type', 'button');\n parentFilter.classList.add('filter');\n parentFilter.classList.add('tag');\n if (!setFilter)\n filter.classList.add('tag--not-set');\n parentFilter.setAttribute('data-name', inputName);\n parentFilter.innerHTML = newFilterText;\n filters.appendChild(parentFilter);\n }\n }\n };\n const checkForChecked = (setFilter = false) => {\n filters.innerHTML = '';\n Array.from(container.querySelectorAll('input:is([type=\"checkbox\"],[type=\"radio\"]):checked, input:not([type=\"checkbox\"], [type=\"radio\"])')).forEach((input) => {\n addFilterButton(filters, input, setFilter);\n });\n };\n // Check for which inputs have been set, setting true sets the filter as set (blue)\n checkForChecked(true);\n // Create the main event listener for the component watching for inputs to change\n Array.from(container.querySelectorAll('input[data-filter-text]')).forEach((input) => {\n input.addEventListener('change', function (event) {\n var _a;\n const setFilter = container.closest('dialog') ? false : true;\n if (!container.hasAttribute('data-keep-same') && !container.querySelector('dialog'))\n addFilterButton(filters, input, setFilter);\n if (setFilter) {\n const event = new CustomEvent('update');\n (_a = container.parentElement.closest('iam-applied-filters')) === null || _a === void 0 ? void 0 : _a.dispatchEvent(event);\n }\n });\n });\n const filterClicked = (filter) => {\n if (!(filter === null || filter === void 0 ? void 0 : filter.hasAttribute('data-name')))\n return false;\n const names = filter.getAttribute('data-name').split(',');\n for (let t = 0; t < names.length; t++) {\n const name = names[t];\n let selector = `[name=\"${name}\"]`;\n if (name.match(/\\[(.*)\\]/)) {\n //const newName = name.replace(/\\[(.*)\\]/, `[]`);\n const value = name.replace(/.*\\[(.*)\\]/, `$1`);\n selector = `[value=\"${value}\"]`;\n }\n const inputs = container.querySelectorAll(selector);\n for (let i = 0; i < inputs.length; i++) {\n const input = inputs[i];\n if (input.getAttribute('type') != 'radio' && input.getAttribute('type') != 'checkbox') {\n input.value = '';\n }\n else {\n input.checked = false;\n }\n const changeEvent = new CustomEvent('change');\n input === null || input === void 0 ? void 0 : input.dispatchEvent(changeEvent);\n }\n }\n filter.remove();\n checkForChecked();\n };\n filters.addEventListener('click', function (event) {\n if (event && event.target instanceof HTMLElement && event.target.closest('.filter')) {\n const filter = event.target.closest('.filter');\n const filterName = filter.getAttribute('data-name');\n filterClicked(filter);\n const clickedEvent = new CustomEvent('filter-clicked', { 'detail': filterName });\n container.dispatchEvent(clickedEvent);\n // If you clicked on the filter on the parent component we want to tell the child component which filter to copy\n if (container.querySelector('dialog iam-applied-filters')) {\n const event = new CustomEvent('filter', { 'detail': filterName });\n container.querySelector('dialog iam-applied-filters').dispatchEvent(event);\n }\n }\n }, false);\n // Listen for \n container.addEventListener('filter', (e) => {\n const filter = container.shadowRoot.querySelector(`[data-name=\"${e.detail}\"]`);\n filterClicked(filter);\n });\n container.addEventListener('set-filters', (e) => {\n checkForChecked(true);\n });\n if (dialog) {\n const primaryButton = container.querySelector('.btn-primary') ? container.querySelector('.btn-primary') : container.shadowRoot.querySelector('.btn-primary');\n // Force the filters inside of the dialog to effect the filters above\n primaryButton === null || primaryButton === void 0 ? void 0 : primaryButton.addEventListener('click', (e) => {\n const event = new CustomEvent('update');\n const submitEvent = new CustomEvent('submit');\n container.dispatchEvent(submitEvent);\n if (container.parentElement.closest('iam-applied-filters'))\n container.parentElement.closest('iam-applied-filters').dispatchEvent(event);\n if (container.parentElement && container.parentElement.closest('iam-applied-filters') && !container.parentElement.closest('iam-applied-filters').closest('dialog')) {\n const event = new CustomEvent('set-filters');\n container.parentElement.closest('iam-applied-filters').dispatchEvent(event);\n }\n checkForChecked(true);\n if (!container.querySelector('.btn-primary').hasAttribute('command')) {\n dialog.close();\n const event = new Event('close');\n dialog.dispatchEvent(event);\n }\n });\n }\n}\nexport default createAppliedFilters;\n","import createAppliedFilters from '../../modules/applied-filters';\n// Data layer Web component created\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n event: 'customElementRegistered',\n element: 'Applied Filters',\n});\nclass iamAppliedFilters extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/applied-filters.css\";`;\n const classList = this.classList.toString();\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n ${loadCSS}\n </style>\n <div class=\"applied-filters ${classList}\"></div>\n <slot></slot>\n `;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n createAppliedFilters(this, this.shadowRoot.querySelector('.applied-filters'));\n }\n}\nexport default iamAppliedFilters;\n"],"names":["createAppliedFilters","container","filters","dialog","addFilterButton","input","setFilter","shouldRemoveFilter","inputName","filter","filterText","parent","allValuesSet","element","index","name","childFilter","newFilterText","parentFilter","checkForChecked","event","_a","filterClicked","names","t","selector","inputs","i","changeEvent","filterName","clickedEvent","primaryButton","e","submitEvent","iamAppliedFilters","classList","template"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* iamKey v7.7.1--
|
|
2
|
+
* iamKey v7.7.1--beta8
|
|
3
3
|
* Copyright 2022-2026 iamproperty
|
|
4
4
|
*/const M=t=>t.charAt(0).toUpperCase()+t.slice(1),q=t=>t.replace(/_/g," "),N=(t,r)=>{for(let a=1;a<=10;a++){if(t.hasAttribute(`data-colour-${a}`)){const o=t.getAttribute(`data-colour-${a}`);t.style.setProperty(`--chart-colour-${a}`,`var(--chart-colour-${o})`),t.style.setProperty(`--chart-colour-${a}-hover`,`var(--chart-colour-${o}-hover)`)}Array.from(r.querySelectorAll(`[data-colour-${a}]`)).forEach(o=>{const e=o.getAttribute(`data-colour-${a}`);o.style.setProperty(`--chart-colour-${a}`,`var(--chart-colour-${e})`),o.style.setProperty(`--chart-colour-${a}-hover`,`var(--chart-colour-${e}-hover)`)})}return!0},k=(t,r,a)=>{if(t.tagName=="IAM-DOUGHNUTCHART")return R(t,r,a),!0;const o=r.querySelector(".chart__key");o.innerHTML="";const e=r.querySelector(".chart__guidelines");e.innerHTML="";const i=r.querySelector(".chart__yaxis");i.innerHTML="",Array.from(r.querySelectorAll(':scope > input[type="checkbox"],:scope > input[type="radio"]')).map(c=>{c.remove()});const{xaxis:n}=g(t);return A(t,a),T(r,a,o),X(t,e),E(t,i),n&&Y(r),!0},R=(t,r,a)=>{const o=r.querySelector(".chart__key");return o.innerHTML="",Array.from(r.querySelectorAll(':scope > input[type="checkbox"],:scope > input[type="radio"]')).map(e=>{e.remove()}),A(t,a),T(r,a,o),H(r),!0},V=function(t,r){const a=r.querySelector(".chart");a.addEventListener("mousemove",n=>{if(n&&n.target instanceof HTMLElement&&n.target.closest("td:not(:first-child")){const d=n.target.closest("td:not(:first-child").getBoundingClientRect(),s=n.clientX-d.left,l=n.clientY-d.top;a.setAttribute("style",`--cursor-x: ${s}px; --cursor-y: ${l}px;`)}});const o=r.querySelectorAll("label");Array.from(o).forEach(n=>{r.querySelector(`input#${n.getAttribute("for")}`).checked?n.setAttribute("part","key-checked"):n.setAttribute("part","key-unchecked")});const e=t.querySelector("table"),i=r.querySelector("table");r.addEventListener("change",function(n){const c=n.target,d=new CustomEvent("view-change",{detail:{"data-dataset":c.getAttribute("data-dataset"),label:c.getAttribute("data-label"),checked:c.checked}});t.dispatchEvent(d),Array.from(o).forEach(s=>{var l;!((l=r.querySelector(`input#${s.getAttribute("for")}`))===null||l===void 0)&&l.checked?s.setAttribute("part","key-checked"):s.setAttribute("part","key-unchecked")}),i.innerHTML=e.innerHTML,A(t,i),t.tagName=="IAM-DOUGHNUTCHART"&&H(r)})},U=function(t,r){const a=t.querySelector("table"),o=r.querySelector("table"),e=(d,s)=>{s.disconnect(),c.disconnect();for(const l of d)(l.attributeName=="class"||l.type==="attributes"||l.type==="attributes")&&(o.innerHTML=a.innerHTML,k(t,r,o));s.observe(a,{characterData:!0,subtree:!0}),c.observe(t,{attributes:!0})},i=(d,s)=>{s.disconnect(),c.disconnect();for(const l of d)(l.type=="characterData"||l.type=="childList"&&l.addedNodes.length)&&(o.innerHTML=a.innerHTML,k(t,r,o));s.observe(a,{characterData:!0,subtree:!0}),c.observe(t,{attributes:!0})},n=new MutationObserver(i),c=new MutationObserver(e);return n.observe(a,{characterData:!0,subtree:!0}),c.observe(t,{attributes:!0}),!0};function C(t,r){r>1&&(t=t-.25);const a=Math.cos(2*Math.PI*t),o=Math.sin(2*Math.PI*t);return[a*100,o*100]}const g=function(t){const r=t.shadowRoot.querySelector(".chart__wrapper table"),a=t.hasAttribute("data-min")?t.getAttribute("data-min"):0,o=t.hasAttribute("data-max")?t.getAttribute("data-max"):j(t,r),e=t.hasAttribute("data-yaxis")?t.getAttribute("data-yaxis").split(","):[],i=t.hasAttribute("data-guidelines")?t.getAttribute("data-guidelines").split(","):[],n=t.hasAttribute("data-xaxis")?t.getAttribute("data-xaxis").split(","):null;return{min:a,max:o,yaxis:e,xaxis:n,guidelines:i}};function j(t,r){const a=t.classList.contains("chart--stacked")?"tbody tr":"tbody td:not(:first-child)",o=Array.from(r.querySelectorAll(a)).map(i=>i.getAttribute("data-numeric")),e=Math.max(...o);return Math.ceil(e)}const x=function(t,r,a,o){let e=String(t);e=e.replace("\xA3",""),e=e.replace("%",""),e=e.replace(",",""),e=Number.parseFloat(e);let i=(e-r)/(a-r)*100,n=i,c=0;return o&&o!=0&&(c=(o-r)/(a-r)*100),r<0&&(c=Math.abs(r/(a-r)*100),e<0?(i=c-i,c=c-i,n=c):(i=i-c,n=i+c)),{percent:i,axis:n,bottom:c}},A=function(t,r){Array.from(r.querySelectorAll("tbody tr")).forEach(e=>{let i=0;Array.from(e.querySelectorAll("td:not(:first-child)")).forEach(n=>{const c=n.cloneNode(!0);Array.from(c.querySelectorAll("*")).forEach(l=>{l.remove()});const d=parseFloat(c.textContent.replace("\xA3","").replace("%","").replace(",",""));n.setAttribute("data-numeric",d),n.setAttribute("data-value",c.textContent),getComputedStyle(n).display!="none"&&(i+=d),Array.from(n.querySelectorAll("a, button")).forEach((l,m)=>{m==0&&l.insertAdjacentHTML("beforeBegin","<hr/>"),l.classList.add("btn"),l.classList.add("btn-tertiary")})}),e.setAttribute("data-numeric",i)});const{min:a,max:o}=g(t);Array.from(r.querySelectorAll("tbody tr")).forEach((e,i)=>{const n=e.querySelector("td:first-child, th:first-child")?e.querySelector("td:first-child, th:first-child").textContent:"";e.setAttribute("part","group");const c=(e.getAttribute("data-numeric")-a)/(o-a)*100;e.style.setProperty("--percent",`${c}%`),Array.from(e.querySelectorAll("td:not([data-label])")).forEach((l,m)=>{m==0?l.setAttribute("part","xaxis-label"):l.setAttribute("part","value"),e.querySelectorAll("td").length>2&&l.setAttribute("data-label",r.querySelectorAll("thead th")[m].textContent)});const d=e.hasAttribute("data-min")?e.getAttribute("data-min"):a,s=e.hasAttribute("data-max")?e.getAttribute("data-max"):o;if(d<0){const l=Math.abs(d/(s-d)*100);t.setAttribute("style",`--min-bottom: ${l}%;`)}e.style.setProperty("--row-index",i+1),Array.from(e.querySelectorAll('td[data-numeric]:not([data-label="Min"]):not([data-label="Max"]):not(:first-child)')).forEach(l=>{if(getComputedStyle(l).display=="none")return;const f=l.innerHTML,v=Number.parseFloat(l.getAttribute("data-numeric")),h=Number.parseFloat(l.getAttribute("data-start"));if(l.querySelector("span[data-group]")||(l.innerHTML=`<span data-group="${n}" ${l.hasAttribute("data-label")?`data-label="${l.getAttribute("data-label")}"`:""} part="popover">${f}</span>`),!l.hasAttribute("style")){const{percent:u,bottom:y,axis:p}=x(v,d,s,h);l.setAttribute("data-percent",u),l.setAttribute("style",`--bottom:${y}%;--percent:${u}%;--axis:${p}%;`)}})})},I=function(t){const r=t.querySelector(".chart__wrapper"),a=t.querySelector(".chart__spacer span"),o=t.querySelector(".chart table");let e="";Array.from(o.querySelectorAll("tbody tr td:first-child")).forEach(i=>{typeof i.textContent<"u"&&i.textContent.length>e.length&&(e=i.textContent)}),r.setAttribute("data-longest-label",e),a.innerHTML=e},B=function(t){const r=t.querySelector(".chart__wrapper"),a=t.querySelector(".chart table");let o="";Array.from(a.querySelectorAll("tbody tr td:not(:first-child)")).forEach(e=>{typeof e.getAttribute("data-value")<"u"&&e.getAttribute("data-value").length>o.length&&(o=e.getAttribute("data-value"))}),r.setAttribute("data-longest-value",o)},T=function(t,r,a){const o=`chart-${Date.now()+(Math.floor(Math.random()*100)+1)}`;let e;const i=Array.from(r.querySelectorAll("thead th"));return i.forEach((n,c)=>{c!=0&&(e=K(o,c,n.textContent,a,t,e)),c==50&&(i.length=c+1)}),!0};function K(t,r,a,o,e,i){var n;const c=document.createElement("input");c.setAttribute("name",`${t}-dataset-${r}`),c.setAttribute("id",`${t}-dataset-${r}`),c.setAttribute("data-dataset",`${r}`),c.setAttribute("data-label",`${a}`),c.checked=!0,c.setAttribute("type","checkbox"),r==1?e.prepend(c):e.insertBefore(c,i.nextSibling),i=c;const d=document.createElement("label");d.setAttribute("class","key btn btn-action"),d.setAttribute("for",`${t}-dataset-${r}`),d.setAttribute("data-label",`${a}`),d.setAttribute("part","key");const s=(n=e.querySelector(`tbody tr td:nth-child(${r+1})`))===null||n===void 0?void 0:n.getAttribute("data-numeric");return d.setAttribute("data-numeric",s),d.innerHTML=`${a}`,o.append(d),i}const X=function(t,r){const{min:a,max:o,yaxis:e}=g(t);let{guidelines:i}=g(t);i.length||(i=e),r.innerHTML="";for(let n=0;n<i.length;n++){const c=parseFloat(i[n].replace("\xA3","").replace("%","").replace(",","")),{axis:d}=x(c,a,o);r.innerHTML+=`<div class="guideline" style="--percent:${d}%;">${e.indexOf(i[n])!=-1?`<span>${i[n]}</span>`:""}</div>`}},E=function(t,r){const{min:a,max:o,yaxis:e}=g(t);r.innerHTML="";for(let i=0;i<e.length;i++){const n=parseFloat(e[i].replace("\xA3","").replace("%","")),{axis:c}=x(n,a,o);r.innerHTML+=`<div class="axis__point" style="--percent:${c}%;"><span>${e[i]}</span></div>`}},Y=function(t){const r=t.querySelector(".chart");let a=t.querySelector(".chart__xaxis");a||(a=document.createElement("div"),a.setAttribute("class","chart__xaxis")),r.prepend(a)},G=function(t){const r=t.querySelectorAll("thead th[title], tbody th[title]:first-child, tbody td[title]:first-child");Array.from(r).forEach(a=>{const o=`tooltip-${Date.now()}-${Math.floor(Math.random()*100)}`;a.innerHTML=`<button class="tooltip" popovertarget="${o}" part="tooltip" style="anchor-name: --${o};">${a.textContent}</button><span id="${o}" style="position-anchor: --${o};" popover part="tooltip__content" class="tooltip__content">${a.getAttribute("title")}</span>`})},H=function(t){let r="";const a=t.querySelector(".chart");let o=t.querySelector(".doughnuts");o||(o=document.createElement("div"),o.setAttribute("class","doughnuts"),a.append(o)),Array.from(a.querySelectorAll("tbody tr")).forEach((e,i)=>{let n="",c="",d=0,s=0;const m=e.querySelectorAll("td")[0].innerHTML;let f=0;const v=e.getAttribute("data-numeric");Array.from(e.querySelectorAll("td")).forEach((h,u)=>{const y=getComputedStyle(h).display;if(u!=0&&y!="none"){let p=h.getAttribute("data-numeric");p=p.replace("\xA3",""),p=p.replace("%",""),p=p.replace(",",""),p=Number.parseInt(p),s+=p,f++}}),Array.from(e.querySelectorAll("td")).forEach((h,u)=>{var y,p;const _=getComputedStyle(h).display;if(u!=0&&f==1&&_!="none")n+=`<path d="M 0 0 L 100 0 A 100 100 0 1 1 100 -0.01 L 0 0" style="${h.getAttribute("style")} --path-index: ${u};"></path>`,c+=`<span class="h5 mb-0" part="popover">${M(q(h.getAttribute("data-label"))).trim()}<br/>${h.hasAttribute("data-second")?`${h.getAttribute("data-second-label")}: ${h.getAttribute("data-second")}<br/>`:""}${(y=h.querySelector('[part="popover"]'))===null||y===void 0?void 0:y.innerHTML}</span>`;else if(u!=0){let b=h.getAttribute("data-numeric");const F=_=="none"?"display: none;":"";b=b.replace("\xA3",""),b=b.replace("%",""),b=b.replace(",",""),b=Number.parseInt(b);const w=b/s,[z,$]=C(d,f),[S,L]=C(d+w,f),D=w>.5?1:0,P=["M 0 0",`L ${z?z.toFixed(0):0} ${$?$.toFixed(0):0}`,`A 100 100 0 ${D} 1 ${S?S.toFixed(0):0} ${L?L.toFixed(0):0}`,"L 0 0"].join(" ");n+=`<path d="${P}" style="${h.getAttribute("style")} --path-index: ${u};${F}"></path>`,c+=`<span class="h5 mb-0" part="popover">${M(q(h.getAttribute("data-label"))).trim()}<br/>${h.hasAttribute("data-second")?`${h.getAttribute("data-second-label")}: ${h.getAttribute("data-second")}<br/>`:""}${(p=h.querySelector('[part="popover"]'))===null||p===void 0?void 0:p.innerHTML}</span>`,_!="none"&&(d+=w)}}),r+=`<div class="doughnut">
|
|
5
5
|
<svg viewBox="-105 -105 210 210" preserveAspectRatio="none" style="--row-index: ${i+1};">${n}</svg>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"barchart.component.min.js","sources":["../../modules/helpers.js","../../modules/chart.module.js","../_global.js","barchart.component.js"],"sourcesContent":["/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add('js-enabled');\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add('ie');\n }\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n const detail = document.querySelector(`detail${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n else if (detail instanceof HTMLElement)\n detail.addAttribute('open');\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () {\n checkElements(location.hash);\n }, false);\n addEventListener('popstate', (event) => {\n if (event && event.state && event.state.type && event.state.type == 'pagination') {\n const form = document.querySelector(`#${event.state.form}`);\n const pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event('submit'));\n }\n });\n Array.from(document.querySelectorAll('form')).forEach((form) => {\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n form.addEventListener('submit', (event) => {\n var _a;\n if (form.querySelector(':invalid')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n });\n }\n });\n document.addEventListener('click', (event) => {\n var _a;\n if (event && event.target instanceof HTMLElement && event.target.matches('form button:not([type=button])')) {\n const form = event.target.closest('form');\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') ||\n form.querySelector('.pwd-checker[data-strength=\"1\"]') ||\n form.querySelector('.pwd-checker[data-strength=\"2\"]')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n if (document.querySelector('.dialog--transactional[open], .dialog--acknowledgement[open]')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n Array.from(document.querySelectorAll('label progress')).forEach((progress) => {\n const label = progress.closest('label');\n label.setAttribute('data-percent', progress.getAttribute('value'));\n });\n};\nexport const isNumeric = function (str) {\n if (typeof str != 'string')\n return false; // we only process strings!\n return (!isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str\n .split(' ')\n .map((s) => ucfirst(s))\n .join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\nexport const numberOfDays = function (startDateString, endDateString) {\n const convertStart = startDateString.split('/');\n const convertEnd = endDateString.split('/');\n const dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n const dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);\n if (dateStart == 'Invalid Date')\n throw 'Start date is not a valid date';\n if (dateEnd == 'Invalid Date')\n throw 'End date is not a valid date';\n // To calculate the time difference of two dates\n const diffTime = dateEnd.getTime() - dateStart.getTime();\n const numberOfDays = diffTime / (1000 * 3600 * 24) + 1;\n if (numberOfDays < 0)\n throw 'The start date should be before the end date';\n return numberOfDays;\n};\n// Used to get values from nested json objects\nexport const resolvePath = (object, path, defaultValue) => path\n // eslint-disable-next-line no-useless-escape\n .split(/[\\.\\[\\]\\'\\\"]/)\n .filter((p) => p)\n .reduce((o, p) => (o ? o[p] : defaultValue), object);\nexport const isTraversable = (o) => Array.isArray(o) || (o !== null && ['function', 'object'].includes(typeof o));\nexport const getSwipeDirection = (touchstartX, touchstartY, touchendX, touchendY) => {\n const limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n const pageWidth = window.innerWidth || document.body.clientWidth;\n const treshold = Math.max(1, Math.floor(0.01 * pageWidth));\n const x = touchendX - touchstartX;\n const y = touchendY - touchstartY;\n const xy = Math.abs(x / y);\n const yx = Math.abs(y / x);\n if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n if (yx <= limit) {\n if (x < 0) {\n return 'left';\n }\n else {\n return 'right';\n }\n }\n if (xy <= limit) {\n if (y < 0) {\n return 'top';\n }\n else {\n return 'bottom';\n }\n }\n }\n else {\n return 'tap';\n }\n};\nexport const uniqueID = (index = 1) => {\n const ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n};\nexport const isValidPostcode = (searchValue) => {\n const regexp = /^([A-Z][A-HJ-Y]?[0-9][A-Z0-9]? ?[0-9][A-Z]{2}|GIR ?0A{2})$/gmi;\n return regexp.test(searchValue.trim());\n};\n","import { ucfirst, unsnake } from './helpers';\n// #region Functions that setup and trigger other functions\nexport const addClasses = (chartElement, chartOuter) => {\n // add colour classes\n for (let i = 1; i <= 10; i++) {\n if (chartElement.hasAttribute(`data-colour-${i}`)) {\n const colour = chartElement.getAttribute(`data-colour-${i}`);\n chartElement.style.setProperty(`--chart-colour-${i}`, `var(--chart-colour-${colour})`);\n chartElement.style.setProperty(`--chart-colour-${i}-hover`, `var(--chart-colour-${colour}-hover)`);\n }\n Array.from(chartOuter.querySelectorAll(`[data-colour-${i}]`)).forEach((element) => {\n const colour = element.getAttribute(`data-colour-${i}`);\n element.style.setProperty(`--chart-colour-${i}`, `var(--chart-colour-${colour})`);\n element.style.setProperty(`--chart-colour-${i}-hover`, `var(--chart-colour-${colour}-hover)`);\n });\n }\n return true;\n};\nexport const setupChart = (chartElement, chartOuter, tableElement) => {\n if (chartElement.tagName == 'IAM-DOUGHNUTCHART') {\n setupDoughnutChart(chartElement, chartOuter, tableElement);\n return true;\n }\n // #region Reset the chart\n // empty divs to re-populate\n const chartKey = chartOuter.querySelector('.chart__key');\n chartKey.innerHTML = '';\n const chartGuidelines = chartOuter.querySelector('.chart__guidelines');\n chartGuidelines.innerHTML = ``;\n const chartYaxis = chartOuter.querySelector('.chart__yaxis');\n chartYaxis.innerHTML = ``;\n // Remove old input fields\n Array.from(chartOuter.querySelectorAll(':scope > input[type=\"checkbox\"],:scope > input[type=\"radio\"]')).map((element) => {\n element.remove();\n });\n // #endregion\n const { xaxis } = getChartData(chartElement);\n setCellData(chartElement, tableElement);\n createChartKey(chartOuter, tableElement, chartKey);\n createChartGuidelines(chartElement, chartGuidelines);\n createChartYaxis(chartElement, chartYaxis);\n if (xaxis) {\n createXaxis(chartOuter);\n }\n return true;\n};\nexport const setupDoughnutChart = (chartElement, chartOuter, tableElement) => {\n // #region Reset the chart\n // empty divs to re-populate\n const chartKey = chartOuter.querySelector('.chart__key');\n chartKey.innerHTML = '';\n // Remove old input fields\n Array.from(chartOuter.querySelectorAll(':scope > input[type=\"checkbox\"],:scope > input[type=\"radio\"]')).map((element) => {\n element.remove();\n });\n // #endregion\n setCellData(chartElement, tableElement);\n createChartKey(chartOuter, tableElement, chartKey);\n createdoughnuts(chartOuter);\n return true;\n};\n// #endregion\n// #region Event handlers and observers\nexport const setEventListener = function (chartElement, chartOuter) {\n const chart = chartOuter.querySelector('.chart');\n chart.addEventListener('mousemove', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('td:not(:first-child')) {\n const column = event.target.closest('td:not(:first-child');\n const rect = column.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n chart.setAttribute('style', `--cursor-x: ${x}px; --cursor-y: ${y}px;`);\n }\n });\n // Use the part for the chart items to pass through states to the pages CSS\n const labels = chartOuter.querySelectorAll('label');\n Array.from(labels).forEach((label) => {\n if (chartOuter.querySelector(`input#${label.getAttribute('for')}`).checked)\n label.setAttribute('part', 'key-checked');\n else\n label.setAttribute('part', 'key-unchecked');\n });\n const table = chartElement.querySelector('table');\n const shadowTable = chartOuter.querySelector('table');\n chartOuter.addEventListener('change', function (event) {\n const eventTarget = event.target;\n const customEvent = new CustomEvent('view-change', {\n detail: {\n 'data-dataset': eventTarget.getAttribute('data-dataset'),\n label: eventTarget.getAttribute('data-label'),\n checked: eventTarget.checked,\n },\n });\n chartElement.dispatchEvent(customEvent);\n Array.from(labels).forEach((label) => {\n var _a;\n if ((_a = chartOuter.querySelector(`input#${label.getAttribute('for')}`)) === null || _a === void 0 ? void 0 : _a.checked)\n label.setAttribute('part', 'key-checked');\n else\n label.setAttribute('part', 'key-unchecked');\n });\n shadowTable.innerHTML = table.innerHTML;\n setCellData(chartElement, shadowTable);\n if (chartElement.tagName == 'IAM-DOUGHNUTCHART') {\n createdoughnuts(chartOuter);\n }\n });\n};\nexport const setEventObservers = function (chartElement, chartOuter) {\n const table = chartElement.querySelector('table');\n const shadowTable = chartOuter.querySelector('table');\n const attributesUpdated = (mutationList, observer) => {\n observer.disconnect();\n observer2.disconnect();\n for (const mutation of mutationList) {\n if (mutation.attributeName == 'class' || mutation.type === 'attributes' || mutation.type === 'attributes') {\n shadowTable.innerHTML = table.innerHTML;\n setupChart(chartElement, chartOuter, shadowTable);\n }\n }\n observer.observe(table, { characterData: true, subtree: true });\n observer2.observe(chartElement, { attributes: true });\n };\n const tableUpdated = (mutationList, observer) => {\n observer.disconnect();\n observer2.disconnect();\n for (const mutation of mutationList) {\n if (mutation.type == 'characterData' || (mutation.type == 'childList' && mutation.addedNodes.length)) {\n shadowTable.innerHTML = table.innerHTML;\n setupChart(chartElement, chartOuter, shadowTable);\n }\n }\n observer.observe(table, { characterData: true, subtree: true });\n observer2.observe(chartElement, { attributes: true });\n };\n const observer = new MutationObserver(tableUpdated);\n const observer2 = new MutationObserver(attributesUpdated);\n observer.observe(table, { characterData: true, subtree: true });\n observer2.observe(chartElement, { attributes: true });\n return true;\n};\nfunction getCoordinatesForPercent(percent, doughnutCount) {\n // This moves the start point to the top middle point like a clock\n if (doughnutCount > 1)\n percent = percent - 0.25;\n const x = Math.cos(2 * Math.PI * percent);\n const y = Math.sin(2 * Math.PI * percent);\n return [x * 100, y * 100];\n}\n// #endregion\n// #region GET functions\nexport const getChartData = function (chartElement) {\n const table = chartElement.shadowRoot.querySelector('.chart__wrapper table');\n const min = chartElement.hasAttribute('data-min') ? chartElement.getAttribute('data-min') : 0;\n const max = chartElement.hasAttribute('data-max')\n ? chartElement.getAttribute('data-max')\n : getLargestValue(chartElement, table);\n //let type:string = chartElement.hasAttribute('data-type') ? chartElement.getAttribute('data-type') : 'column';\n const yaxis = chartElement.hasAttribute('data-yaxis') ? chartElement.getAttribute('data-yaxis').split(',') : [];\n const guidelines = chartElement.hasAttribute('data-guidelines')\n ? chartElement.getAttribute('data-guidelines').split(',')\n : [];\n //let targets:any = chartElement.hasAttribute('data-targets') ? JSON.parse(chartElement.getAttribute('data-targets')) : null;\n //let events:any = chartElement.hasAttribute('data-events') ? JSON.parse(chartElement.getAttribute('data-events')) : null;\n const xaxis = chartElement.hasAttribute('data-xaxis')\n ? chartElement.getAttribute('data-xaxis').split(',')\n : null;\n //let increment = chartElement.hasAttribute('data-increment') ? chartElement.getAttribute('data-increment'): null;\n //let start:any = chartElement.hasAttribute('data-start') ? chartElement.getAttribute('data-start') : 0;\n //let end:any = chartElement.hasAttribute('data-end') ? chartElement.getAttribute('data-end') : getLargestValue(chartElement,table); // TODO - get largest value from the data-xaxis\n //let slope:any = chartElement.hasAttribute('data-slope') ? chartElement.getAttribute('data-slope') : null;\n //let yInt:any = chartElement.hasAttribute('data-yint') ? chartElement.getAttribute('data-yint') : null;\n return { min, max, yaxis, xaxis, guidelines };\n};\nfunction getLargestValue(chartElement, table) {\n const selector = chartElement.classList.contains('chart--stacked') ? 'tbody tr' : 'tbody td:not(:first-child)';\n const values = Array.from(table.querySelectorAll(selector)).map((element) => {\n const currentValue = element.getAttribute('data-numeric');\n return currentValue;\n });\n const largestValue = Math.max(...values);\n // TO DO round to the nearest 10, 100, 1000 and so on\n return Math.ceil(largestValue);\n}\nconst getValues = function (value, min, max, start) {\n let cleanValue = String(value);\n cleanValue = cleanValue.replace('£', '');\n cleanValue = cleanValue.replace('%', '');\n cleanValue = cleanValue.replace(',', '');\n cleanValue = Number.parseFloat(cleanValue);\n let percent = ((cleanValue - min) / (max - min)) * 100;\n let axis = percent;\n let bottom = 0;\n if (start && start != 0) {\n bottom = ((start - min) / (max - min)) * 100;\n }\n // If the value is negative the position below the 0 line\n if (min < 0) {\n bottom = Math.abs((min / (max - min)) * 100);\n if (cleanValue < 0) {\n percent = bottom - percent;\n bottom = bottom - percent;\n axis = bottom;\n }\n else {\n percent = percent - bottom;\n axis = percent + bottom;\n }\n }\n return { percent, axis, bottom };\n};\n// #endregion\n// #region SET functions - set data attributes and classes\nexport const setCellData = function (chartElement, table) {\n Array.from(table.querySelectorAll('tbody tr')).forEach((tr) => {\n let rowValue = 0;\n // Set the data numeric value if not set\n Array.from(tr.querySelectorAll('td:not(:first-child)')).forEach((td) => {\n // Ignore the buttons and links inside\n const copyTD = td.cloneNode(true);\n Array.from(copyTD.querySelectorAll('*')).forEach((element) => {\n element.remove();\n });\n const value = parseFloat(copyTD.textContent.replace('£', '').replace('%', '').replace(',', ''));\n td.setAttribute('data-numeric', value);\n td.setAttribute('data-value', copyTD.textContent);\n const display = getComputedStyle(td).display;\n if (display != 'none')\n rowValue += value;\n Array.from(td.querySelectorAll('a, button')).forEach((element, index) => {\n if (index == 0) {\n element.insertAdjacentHTML('beforeBegin', '<hr/>');\n }\n element.classList.add('btn');\n element.classList.add('btn-tertiary');\n });\n });\n tr.setAttribute('data-numeric', rowValue);\n });\n const { min, max } = getChartData(chartElement);\n Array.from(table.querySelectorAll('tbody tr')).forEach((tr, index) => {\n const group = tr.querySelector('td:first-child, th:first-child')\n ? tr.querySelector('td:first-child, th:first-child').textContent\n : '';\n tr.setAttribute('part', 'group');\n const percent = ((tr.getAttribute('data-numeric') - min) / (max - min)) * 100;\n tr.style.setProperty('--percent', `${percent}%`);\n // Set the data label value if not set\n Array.from(tr.querySelectorAll('td:not([data-label])')).forEach((td, index) => {\n if (index == 0)\n td.setAttribute('part', 'xaxis-label'); // PART\n else\n td.setAttribute('part', 'value');\n if (tr.querySelectorAll('td').length > 2)\n td.setAttribute('data-label', table.querySelectorAll('thead th')[index].textContent);\n });\n const rowMin = tr.hasAttribute('data-min') ? tr.getAttribute('data-min') : min;\n const rowMax = tr.hasAttribute('data-max') ? tr.getAttribute('data-max') : max;\n if (rowMin < 0) {\n const minBottom = Math.abs((rowMin / (rowMax - rowMin)) * 100);\n chartElement.setAttribute('style', `--min-bottom: ${minBottom}%;`);\n }\n // Add a useful index css var for the use of animatons.\n tr.style.setProperty('--row-index', index + 1);\n // Add css vars to cells\n Array.from(tr.querySelectorAll('td[data-numeric]:not([data-label=\"Min\"]):not([data-label=\"Max\"]):not(:first-child)')).forEach((td) => {\n const display = getComputedStyle(td).display;\n if (display == 'none')\n return;\n const content = td.innerHTML;\n const value = Number.parseFloat(td.getAttribute('data-numeric'));\n const start = Number.parseFloat(td.getAttribute('data-start'));\n if (!td.querySelector('span[data-group]'))\n td.innerHTML = `<span data-group=\"${group}\" ${td.hasAttribute('data-label') ? `data-label=\"${td.getAttribute('data-label')}\"` : ''} part=\"popover\">${content}</span>`;\n if (!td.hasAttribute('style')) {\n const { percent, bottom, axis } = getValues(value, rowMin, rowMax, start);\n td.setAttribute('data-percent', percent);\n td.setAttribute('style', `--bottom:${bottom}%;--percent:${percent}%;--axis:${axis}%;`);\n }\n });\n });\n};\nexport const setLongestLabel = function (chartOuter) {\n const chartWrapper = chartOuter.querySelector('.chart__wrapper');\n const chartSpacer = chartOuter.querySelector('.chart__spacer span');\n const table = chartOuter.querySelector('.chart table');\n // set the longest label attr so that the bar chart knows what margin to set on the left\n let longestLabel = '';\n Array.from(table.querySelectorAll('tbody tr td:first-child')).forEach((td) => {\n if (typeof td.textContent != 'undefined' && td.textContent.length > longestLabel.length) {\n longestLabel = td.textContent;\n }\n });\n chartWrapper.setAttribute('data-longest-label', longestLabel);\n chartSpacer.innerHTML = longestLabel;\n};\nexport const setLongestValue = function (chartOuter) {\n const chartWrapper = chartOuter.querySelector('.chart__wrapper');\n const table = chartOuter.querySelector('.chart table');\n let longestValue = '';\n Array.from(table.querySelectorAll('tbody tr td:not(:first-child)')).forEach((td) => {\n if (typeof td.getAttribute('data-value') != 'undefined' &&\n td.getAttribute('data-value').length > longestValue.length) {\n longestValue = td.getAttribute('data-value');\n }\n });\n chartWrapper.setAttribute('data-longest-value', longestValue);\n};\n// #endregion\n// #region CREATE function\nexport const createChartKey = function (chartOuter, tableElement, chartKey) {\n const chartID = `chart-${Date.now() + (Math.floor(Math.random() * 100) + 1)}`;\n //const chartOuter = chartElement.querySelector('.chart__outer');\n let previousInput;\n const headings = Array.from(tableElement.querySelectorAll('thead th'));\n headings.forEach((arrayElement, index) => {\n if (index != 0) {\n previousInput = createChartKeyItem(chartID, index, arrayElement.textContent, chartKey, chartOuter, previousInput);\n }\n if (index == 50) {\n headings.length = index + 1;\n }\n });\n return true;\n};\nfunction createChartKeyItem(chartID, index, text, chartKey, chartOuter, previousInput) {\n var _a;\n const input = document.createElement('input');\n input.setAttribute('name', `${chartID}-dataset-${index}`);\n input.setAttribute('id', `${chartID}-dataset-${index}`);\n input.setAttribute('data-dataset', `${index}`);\n input.setAttribute('data-label', `${text}`);\n input.checked = true;\n input.setAttribute('type', `checkbox`);\n if (index == 1)\n chartOuter.prepend(input);\n else\n chartOuter.insertBefore(input, previousInput.nextSibling);\n previousInput = input;\n const label = document.createElement('label');\n label.setAttribute('class', `key btn btn-action`);\n label.setAttribute('for', `${chartID}-dataset-${index}`);\n label.setAttribute('data-label', `${text}`);\n label.setAttribute('part', `key`);\n const total = (_a = chartOuter.querySelector(`tbody tr td:nth-child(${index + 1})`)) === null || _a === void 0 ? void 0 : _a.getAttribute('data-numeric');\n label.setAttribute('data-numeric', total);\n label.innerHTML = `${text}`;\n chartKey.append(label);\n return previousInput;\n}\nexport const createChartGuidelines = function (chartElement, chartGuidelines) {\n const { min, max, yaxis } = getChartData(chartElement);\n let { guidelines } = getChartData(chartElement);\n if (!guidelines.length)\n guidelines = yaxis;\n chartGuidelines.innerHTML = '';\n for (let i = 0; i < guidelines.length; i++) {\n const value = parseFloat(guidelines[i].replace('£', '').replace('%', '').replace(',', ''));\n const { axis } = getValues(value, min, max);\n chartGuidelines.innerHTML += `<div class=\"guideline\" style=\"--percent:${axis}%;\">${yaxis.indexOf(guidelines[i]) != -1 ? `<span>${guidelines[i]}</span>` : ''}</div>`;\n }\n};\nexport const createChartYaxis = function (chartElement, chartYaxis) {\n const { min, max, yaxis } = getChartData(chartElement);\n chartYaxis.innerHTML = '';\n for (let i = 0; i < yaxis.length; i++) {\n const value = parseFloat(yaxis[i].replace('£', '').replace('%', ''));\n const { axis } = getValues(value, min, max);\n chartYaxis.innerHTML += `<div class=\"axis__point\" style=\"--percent:${axis}%;\"><span>${yaxis[i]}</span></div>`;\n }\n};\nexport const createXaxis = function (chartOuter) {\n const chart = chartOuter.querySelector('.chart');\n let chartXaxis = chartOuter.querySelector('.chart__xaxis');\n if (!chartXaxis) {\n chartXaxis = document.createElement('div');\n chartXaxis.setAttribute('class', 'chart__xaxis');\n }\n chart.prepend(chartXaxis);\n};\nexport const createTooltips = function (chartOuter) {\n const titles = chartOuter.querySelectorAll('thead th[title], tbody th[title]:first-child, tbody td[title]:first-child');\n Array.from(titles).forEach((title) => {\n const tooltipId = `tooltip-${Date.now()}-${Math.floor(Math.random() * 100)}`;\n title.innerHTML = `<button class=\"tooltip\" popovertarget=\"${tooltipId}\" part=\"tooltip\" style=\"anchor-name: --${tooltipId};\">${title.textContent}</button><span id=\"${tooltipId}\" style=\"position-anchor: --${tooltipId};\" popover part=\"tooltip__content\" class=\"tooltip__content\">${title.getAttribute('title')}</span>`;\n //title.removeAttribute('title'); // TODO add a supports query for anchor positioning\n });\n};\nexport const createdoughnuts = function (chartOuter) {\n let returnString = '';\n const chartInner = chartOuter.querySelector('.chart');\n let doughnutWrapper = chartOuter.querySelector('.doughnuts');\n if (!doughnutWrapper) {\n doughnutWrapper = document.createElement('div');\n doughnutWrapper.setAttribute('class', 'doughnuts');\n chartInner.append(doughnutWrapper);\n }\n Array.from(chartInner.querySelectorAll('tbody tr')).forEach((item, index) => {\n let paths = '';\n let tooltips = '';\n let cumulativePercent = 0;\n let total = 0;\n const titleKey = item.querySelectorAll('td')[0];\n const title = titleKey.innerHTML;\n let doughnutCount = 0;\n const rowTotal = item.getAttribute('data-numeric');\n // Work out the total amount\n Array.from(item.querySelectorAll('td')).forEach((td, subindex) => {\n const display = getComputedStyle(td).display;\n if (subindex != 0 && display != 'none') {\n let value = td.getAttribute('data-numeric');\n value = value.replace('£', '');\n value = value.replace('%', '');\n value = value.replace(',', '');\n value = Number.parseInt(value);\n total += value;\n doughnutCount++;\n }\n });\n // Create the paths\n Array.from(item.querySelectorAll('td')).forEach((td, subindex) => {\n var _a, _b;\n const display = getComputedStyle(td).display;\n if (subindex != 0 && doughnutCount == 1 && display != 'none') {\n const pathData = `M 0 0 L 100 0 A 100 100 0 1 1 100 -0.01 L 0 0`;\n paths += `<path d=\"${pathData}\" style=\"${td.getAttribute('style')} --path-index: ${subindex};\"></path>`;\n tooltips += `<span class=\"h5 mb-0\" part=\"popover\">${ucfirst(unsnake(td.getAttribute('data-label'))).trim()}<br/>${td.hasAttribute('data-second') ? `${td.getAttribute('data-second-label')}: ${td.getAttribute('data-second')}<br/>` : ''}${(_a = td.querySelector('[part=\"popover\"]')) === null || _a === void 0 ? void 0 : _a.innerHTML}</span>`;\n }\n else if (subindex != 0) {\n let value = td.getAttribute('data-numeric');\n const hide = display == 'none' ? 'display: none;' : '';\n value = value.replace('£', '');\n value = value.replace('%', '');\n value = value.replace(',', '');\n value = Number.parseInt(value);\n const percent = value / total;\n const [startX, startY] = getCoordinatesForPercent(cumulativePercent, doughnutCount);\n const [endX, endY] = getCoordinatesForPercent(cumulativePercent + percent, doughnutCount);\n const largeArcFlag = percent > 0.5 ? 1 : 0; // if the slice is more than 50%, take the large arc (the long way around)\n const pathData = [\n `M 0 0`,\n `L ${startX ? startX.toFixed(0) : 0} ${startY ? startY.toFixed(0) : 0}`, // Move\n `A 100 100 0 ${largeArcFlag} 1 ${endX ? endX.toFixed(0) : 0} ${endY ? endY.toFixed(0) : 0}`, // Arc\n `L 0 0`, // Line\n ].join(' ');\n paths += `<path d=\"${pathData}\" style=\"${td.getAttribute('style')} --path-index: ${subindex};${hide}\"></path>`;\n tooltips += `<span class=\"h5 mb-0\" part=\"popover\">${ucfirst(unsnake(td.getAttribute('data-label'))).trim()}<br/>${td.hasAttribute('data-second') ? `${td.getAttribute('data-second-label')}: ${td.getAttribute('data-second')}<br/>` : ''}${(_b = td.querySelector('[part=\"popover\"]')) === null || _b === void 0 ? void 0 : _b.innerHTML}</span>`;\n // each slice starts where the last slice ended, so keep a cumulative percent\n if (display != 'none')\n cumulativePercent += percent;\n }\n });\n returnString += `<div class=\"doughnut\">\r\n <svg viewBox=\"-105 -105 210 210\" preserveAspectRatio=\"none\" style=\"--row-index: ${index + 1};\">${paths}</svg>\r\n <div class=\"doughnut__title\" data-numeric=\"${rowTotal}\"><span class=\"h5 mb-0\">${title}</span></div>\r\n <div class=\"tooltips\">${tooltips}</div>\r\n</div>`;\n });\n doughnutWrapper.innerHTML = returnString;\n};\n// #endregion\nexport default setupChart;\n","export const trackComponentRegistered = (componentName) => {\n // Data layer Web component created\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: 'customElementRegistered',\n element: componentName,\n });\n};\nexport const trackComponent = (component, componentName, trackEvents) => {\n // Data layer Web component created\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: 'customElementAdded',\n element: componentName,\n });\n trackEvents.forEach((eventName) => {\n component.addEventListener(eventName, function (event) {\n const eventDetails = {\n event: eventName,\n element: componentName,\n target: event.target,\n };\n Object.keys(event.detail).forEach((eventKey) => {\n const eventDetail = event.detail[eventKey];\n eventDetails[eventKey] = eventDetail;\n });\n window.dataLayer.push(eventDetails);\n });\n });\n return true;\n};\n","import { addClasses, setupChart, setEventListener, setEventObservers, setLongestLabel, setLongestValue, createTooltips, } from '../../modules/chart.module';\nimport { trackComponent, trackComponentRegistered } from '../_global';\ntrackComponentRegistered('iam-barchart');\nclass iamBarChart extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/barchart.component.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n \n ${loadCSS}\n </style>\n <div class=\"chart__outer\" part=\"outer\">\n <div class=\"chart__key\" part=\"chart-key\"></div>\n <div class=\"chart__wrapper\" part=\"wrapper\">\n <div class=\"chart__yaxis\" part=\"yaxis\"></div>\n <div class=\"chart\" part=\"chart\">\n <div class=\"chart__guidelines\" part=\"guidelines\"></div>\n </div>\n </div>\n <div class=\"chart__spacer\"><span part=\"spacer\"></span</div>\n </div>`;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const chartComponent = this;\n //const chartID = `chart-${Date.now() + (Math.floor(Math.random() * 100) + 1)}`;\n const orginalTable = this.querySelector('table');\n const clonedTable = orginalTable.cloneNode(true);\n const chart = this.shadowRoot.querySelector('.chart');\n const chartOuter = this.shadowRoot.querySelector('.chart__outer');\n const barCount = chart.querySelectorAll('td:not(:first-child)').length;\n chart.appendChild(clonedTable);\n addClasses(chartComponent, chartOuter);\n if (barCount <= 10) {\n chartComponent.classList.add('chart--fit-content');\n }\n if (barCount <= 5) {\n chartComponent.classList.add('chart--no-scale');\n }\n setupChart(chartComponent, chartOuter, clonedTable);\n setEventObservers(chartComponent, chartOuter);\n setEventListener(chartComponent, chartOuter);\n setLongestLabel(chartOuter);\n setLongestValue(chartOuter);\n createTooltips(chartOuter);\n trackComponent(chartComponent, 'iam-barchart', ['view-change']);\n }\n}\nexport default iamBarChart;\n"],"names":["ucfirst","str","unsnake","addClasses","chartElement","chartOuter","i","colour","element","setupChart","tableElement","setupDoughnutChart","chartKey","chartGuidelines","chartYaxis","xaxis","getChartData","setCellData","createChartKey","createChartGuidelines","createChartYaxis","createXaxis","createdoughnuts","setEventListener","chart","event","rect","x","y","labels","label","table","shadowTable","eventTarget","customEvent","_a","setEventObservers","attributesUpdated","mutationList","observer","observer2","mutation","tableUpdated","getCoordinatesForPercent","percent","doughnutCount","min","max","getLargestValue","yaxis","guidelines","selector","values","largestValue","getValues","value","start","cleanValue","axis","bottom","tr","rowValue","td","copyTD","index","group","rowMin","rowMax","minBottom","content","setLongestLabel","chartWrapper","chartSpacer","longestLabel","setLongestValue","longestValue","chartID","previousInput","headings","arrayElement","createChartKeyItem","text","input","total","chartXaxis","createTooltips","titles","title","tooltipId","returnString","chartInner","doughnutWrapper","item","paths","tooltips","cumulativePercent","rowTotal","subindex","display","_b","hide","startX","startY","endX","endY","largeArcFlag","pathData","trackComponentRegistered","componentName","trackComponent","component","trackEvents","eventName","eventDetails","eventKey","eventDetail","iamBarChart","template","chartComponent","clonedTable","barCount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"barchart.component.min.js","sources":["../../modules/helpers.js","../../modules/chart.module.js","../_global.js","barchart.component.js"],"sourcesContent":["/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add('js-enabled');\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add('ie');\n }\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n const detail = document.querySelector(`detail${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n else if (detail instanceof HTMLElement)\n detail.addAttribute('open');\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () {\n checkElements(location.hash);\n }, false);\n addEventListener('popstate', (event) => {\n if (event && event.state && event.state.type && event.state.type == 'pagination') {\n const form = document.querySelector(`#${event.state.form}`);\n const pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event('submit'));\n }\n });\n Array.from(document.querySelectorAll('form')).forEach((form) => {\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n form.addEventListener('submit', (event) => {\n var _a;\n if (form.querySelector(':invalid')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n });\n }\n });\n document.addEventListener('click', (event) => {\n var _a;\n if (event && event.target instanceof HTMLElement && event.target.matches('form button:not([type=button])')) {\n const form = event.target.closest('form');\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') ||\n form.querySelector('.pwd-checker[data-strength=\"1\"]') ||\n form.querySelector('.pwd-checker[data-strength=\"2\"]')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n if (document.querySelector('.dialog--transactional[open], .dialog--acknowledgement[open]')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n Array.from(document.querySelectorAll('label progress')).forEach((progress) => {\n const label = progress.closest('label');\n label.setAttribute('data-percent', progress.getAttribute('value'));\n });\n};\nexport const isNumeric = function (str) {\n if (typeof str != 'string')\n return false; // we only process strings!\n return (!isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str\n .split(' ')\n .map((s) => ucfirst(s))\n .join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\nexport const numberOfDays = function (startDateString, endDateString) {\n const convertStart = startDateString.split('/');\n const convertEnd = endDateString.split('/');\n const dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n const dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);\n if (dateStart == 'Invalid Date')\n throw 'Start date is not a valid date';\n if (dateEnd == 'Invalid Date')\n throw 'End date is not a valid date';\n // To calculate the time difference of two dates\n const diffTime = dateEnd.getTime() - dateStart.getTime();\n const numberOfDays = diffTime / (1000 * 3600 * 24) + 1;\n if (numberOfDays < 0)\n throw 'The start date should be before the end date';\n return numberOfDays;\n};\n// Used to get values from nested json objects\nexport const resolvePath = (object, path, defaultValue) => path\n // eslint-disable-next-line no-useless-escape\n .split(/[\\.\\[\\]\\'\\\"]/)\n .filter((p) => p)\n .reduce((o, p) => (o ? o[p] : defaultValue), object);\nexport const isTraversable = (o) => Array.isArray(o) || (o !== null && ['function', 'object'].includes(typeof o));\nexport const getSwipeDirection = (touchstartX, touchstartY, touchendX, touchendY) => {\n const limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n const pageWidth = window.innerWidth || document.body.clientWidth;\n const treshold = Math.max(1, Math.floor(0.01 * pageWidth));\n const x = touchendX - touchstartX;\n const y = touchendY - touchstartY;\n const xy = Math.abs(x / y);\n const yx = Math.abs(y / x);\n if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n if (yx <= limit) {\n if (x < 0) {\n return 'left';\n }\n else {\n return 'right';\n }\n }\n if (xy <= limit) {\n if (y < 0) {\n return 'top';\n }\n else {\n return 'bottom';\n }\n }\n }\n else {\n return 'tap';\n }\n};\nexport const uniqueID = (index = 1) => {\n const ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n};\nexport const isValidPostcode = (searchValue) => {\n const regexp = /^([A-Z][A-HJ-Y]?[0-9][A-Z0-9]? ?[0-9][A-Z]{2}|GIR ?0A{2})$/gmi;\n return regexp.test(searchValue.trim());\n};\n","import { ucfirst, unsnake } from './helpers';\n// #region Functions that setup and trigger other functions\nexport const addClasses = (chartElement, chartOuter) => {\n // add colour classes\n for (let i = 1; i <= 10; i++) {\n if (chartElement.hasAttribute(`data-colour-${i}`)) {\n const colour = chartElement.getAttribute(`data-colour-${i}`);\n chartElement.style.setProperty(`--chart-colour-${i}`, `var(--chart-colour-${colour})`);\n chartElement.style.setProperty(`--chart-colour-${i}-hover`, `var(--chart-colour-${colour}-hover)`);\n }\n Array.from(chartOuter.querySelectorAll(`[data-colour-${i}]`)).forEach((element) => {\n const colour = element.getAttribute(`data-colour-${i}`);\n element.style.setProperty(`--chart-colour-${i}`, `var(--chart-colour-${colour})`);\n element.style.setProperty(`--chart-colour-${i}-hover`, `var(--chart-colour-${colour}-hover)`);\n });\n }\n return true;\n};\nexport const setupChart = (chartElement, chartOuter, tableElement) => {\n if (chartElement.tagName == 'IAM-DOUGHNUTCHART') {\n setupDoughnutChart(chartElement, chartOuter, tableElement);\n return true;\n }\n // #region Reset the chart\n // empty divs to re-populate\n const chartKey = chartOuter.querySelector('.chart__key');\n chartKey.innerHTML = '';\n const chartGuidelines = chartOuter.querySelector('.chart__guidelines');\n chartGuidelines.innerHTML = ``;\n const chartYaxis = chartOuter.querySelector('.chart__yaxis');\n chartYaxis.innerHTML = ``;\n // Remove old input fields\n Array.from(chartOuter.querySelectorAll(':scope > input[type=\"checkbox\"],:scope > input[type=\"radio\"]')).map((element) => {\n element.remove();\n });\n // #endregion\n const { xaxis } = getChartData(chartElement);\n setCellData(chartElement, tableElement);\n createChartKey(chartOuter, tableElement, chartKey);\n createChartGuidelines(chartElement, chartGuidelines);\n createChartYaxis(chartElement, chartYaxis);\n if (xaxis) {\n createXaxis(chartOuter);\n }\n return true;\n};\nexport const setupDoughnutChart = (chartElement, chartOuter, tableElement) => {\n // #region Reset the chart\n // empty divs to re-populate\n const chartKey = chartOuter.querySelector('.chart__key');\n chartKey.innerHTML = '';\n // Remove old input fields\n Array.from(chartOuter.querySelectorAll(':scope > input[type=\"checkbox\"],:scope > input[type=\"radio\"]')).map((element) => {\n element.remove();\n });\n // #endregion\n setCellData(chartElement, tableElement);\n createChartKey(chartOuter, tableElement, chartKey);\n createdoughnuts(chartOuter);\n return true;\n};\n// #endregion\n// #region Event handlers and observers\nexport const setEventListener = function (chartElement, chartOuter) {\n const chart = chartOuter.querySelector('.chart');\n chart.addEventListener('mousemove', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('td:not(:first-child')) {\n const column = event.target.closest('td:not(:first-child');\n const rect = column.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n chart.setAttribute('style', `--cursor-x: ${x}px; --cursor-y: ${y}px;`);\n }\n });\n // Use the part for the chart items to pass through states to the pages CSS\n const labels = chartOuter.querySelectorAll('label');\n Array.from(labels).forEach((label) => {\n if (chartOuter.querySelector(`input#${label.getAttribute('for')}`).checked)\n label.setAttribute('part', 'key-checked');\n else\n label.setAttribute('part', 'key-unchecked');\n });\n const table = chartElement.querySelector('table');\n const shadowTable = chartOuter.querySelector('table');\n chartOuter.addEventListener('change', function (event) {\n const eventTarget = event.target;\n const customEvent = new CustomEvent('view-change', {\n detail: {\n 'data-dataset': eventTarget.getAttribute('data-dataset'),\n label: eventTarget.getAttribute('data-label'),\n checked: eventTarget.checked,\n },\n });\n chartElement.dispatchEvent(customEvent);\n Array.from(labels).forEach((label) => {\n var _a;\n if ((_a = chartOuter.querySelector(`input#${label.getAttribute('for')}`)) === null || _a === void 0 ? void 0 : _a.checked)\n label.setAttribute('part', 'key-checked');\n else\n label.setAttribute('part', 'key-unchecked');\n });\n shadowTable.innerHTML = table.innerHTML;\n setCellData(chartElement, shadowTable);\n if (chartElement.tagName == 'IAM-DOUGHNUTCHART') {\n createdoughnuts(chartOuter);\n }\n });\n};\nexport const setEventObservers = function (chartElement, chartOuter) {\n const table = chartElement.querySelector('table');\n const shadowTable = chartOuter.querySelector('table');\n const attributesUpdated = (mutationList, observer) => {\n observer.disconnect();\n observer2.disconnect();\n for (const mutation of mutationList) {\n if (mutation.attributeName == 'class' || mutation.type === 'attributes' || mutation.type === 'attributes') {\n shadowTable.innerHTML = table.innerHTML;\n setupChart(chartElement, chartOuter, shadowTable);\n }\n }\n observer.observe(table, { characterData: true, subtree: true });\n observer2.observe(chartElement, { attributes: true });\n };\n const tableUpdated = (mutationList, observer) => {\n observer.disconnect();\n observer2.disconnect();\n for (const mutation of mutationList) {\n if (mutation.type == 'characterData' || (mutation.type == 'childList' && mutation.addedNodes.length)) {\n shadowTable.innerHTML = table.innerHTML;\n setupChart(chartElement, chartOuter, shadowTable);\n }\n }\n observer.observe(table, { characterData: true, subtree: true });\n observer2.observe(chartElement, { attributes: true });\n };\n const observer = new MutationObserver(tableUpdated);\n const observer2 = new MutationObserver(attributesUpdated);\n observer.observe(table, { characterData: true, subtree: true });\n observer2.observe(chartElement, { attributes: true });\n return true;\n};\nfunction getCoordinatesForPercent(percent, doughnutCount) {\n // This moves the start point to the top middle point like a clock\n if (doughnutCount > 1)\n percent = percent - 0.25;\n const x = Math.cos(2 * Math.PI * percent);\n const y = Math.sin(2 * Math.PI * percent);\n return [x * 100, y * 100];\n}\n// #endregion\n// #region GET functions\nexport const getChartData = function (chartElement) {\n const table = chartElement.shadowRoot.querySelector('.chart__wrapper table');\n const min = chartElement.hasAttribute('data-min') ? chartElement.getAttribute('data-min') : 0;\n const max = chartElement.hasAttribute('data-max')\n ? chartElement.getAttribute('data-max')\n : getLargestValue(chartElement, table);\n //let type:string = chartElement.hasAttribute('data-type') ? chartElement.getAttribute('data-type') : 'column';\n const yaxis = chartElement.hasAttribute('data-yaxis') ? chartElement.getAttribute('data-yaxis').split(',') : [];\n const guidelines = chartElement.hasAttribute('data-guidelines')\n ? chartElement.getAttribute('data-guidelines').split(',')\n : [];\n //let targets:any = chartElement.hasAttribute('data-targets') ? JSON.parse(chartElement.getAttribute('data-targets')) : null;\n //let events:any = chartElement.hasAttribute('data-events') ? JSON.parse(chartElement.getAttribute('data-events')) : null;\n const xaxis = chartElement.hasAttribute('data-xaxis')\n ? chartElement.getAttribute('data-xaxis').split(',')\n : null;\n //let increment = chartElement.hasAttribute('data-increment') ? chartElement.getAttribute('data-increment'): null;\n //let start:any = chartElement.hasAttribute('data-start') ? chartElement.getAttribute('data-start') : 0;\n //let end:any = chartElement.hasAttribute('data-end') ? chartElement.getAttribute('data-end') : getLargestValue(chartElement,table); // TODO - get largest value from the data-xaxis\n //let slope:any = chartElement.hasAttribute('data-slope') ? chartElement.getAttribute('data-slope') : null;\n //let yInt:any = chartElement.hasAttribute('data-yint') ? chartElement.getAttribute('data-yint') : null;\n return { min, max, yaxis, xaxis, guidelines };\n};\nfunction getLargestValue(chartElement, table) {\n const selector = chartElement.classList.contains('chart--stacked') ? 'tbody tr' : 'tbody td:not(:first-child)';\n const values = Array.from(table.querySelectorAll(selector)).map((element) => {\n const currentValue = element.getAttribute('data-numeric');\n return currentValue;\n });\n const largestValue = Math.max(...values);\n // TO DO round to the nearest 10, 100, 1000 and so on\n return Math.ceil(largestValue);\n}\nconst getValues = function (value, min, max, start) {\n let cleanValue = String(value);\n cleanValue = cleanValue.replace('£', '');\n cleanValue = cleanValue.replace('%', '');\n cleanValue = cleanValue.replace(',', '');\n cleanValue = Number.parseFloat(cleanValue);\n let percent = ((cleanValue - min) / (max - min)) * 100;\n let axis = percent;\n let bottom = 0;\n if (start && start != 0) {\n bottom = ((start - min) / (max - min)) * 100;\n }\n // If the value is negative the position below the 0 line\n if (min < 0) {\n bottom = Math.abs((min / (max - min)) * 100);\n if (cleanValue < 0) {\n percent = bottom - percent;\n bottom = bottom - percent;\n axis = bottom;\n }\n else {\n percent = percent - bottom;\n axis = percent + bottom;\n }\n }\n return { percent, axis, bottom };\n};\n// #endregion\n// #region SET functions - set data attributes and classes\nexport const setCellData = function (chartElement, table) {\n Array.from(table.querySelectorAll('tbody tr')).forEach((tr) => {\n let rowValue = 0;\n // Set the data numeric value if not set\n Array.from(tr.querySelectorAll('td:not(:first-child)')).forEach((td) => {\n // Ignore the buttons and links inside\n const copyTD = td.cloneNode(true);\n Array.from(copyTD.querySelectorAll('*')).forEach((element) => {\n element.remove();\n });\n const value = parseFloat(copyTD.textContent.replace('£', '').replace('%', '').replace(',', ''));\n td.setAttribute('data-numeric', value);\n td.setAttribute('data-value', copyTD.textContent);\n const display = getComputedStyle(td).display;\n if (display != 'none')\n rowValue += value;\n Array.from(td.querySelectorAll('a, button')).forEach((element, index) => {\n if (index == 0) {\n element.insertAdjacentHTML('beforeBegin', '<hr/>');\n }\n element.classList.add('btn');\n element.classList.add('btn-tertiary');\n });\n });\n tr.setAttribute('data-numeric', rowValue);\n });\n const { min, max } = getChartData(chartElement);\n Array.from(table.querySelectorAll('tbody tr')).forEach((tr, index) => {\n const group = tr.querySelector('td:first-child, th:first-child')\n ? tr.querySelector('td:first-child, th:first-child').textContent\n : '';\n tr.setAttribute('part', 'group');\n const percent = ((tr.getAttribute('data-numeric') - min) / (max - min)) * 100;\n tr.style.setProperty('--percent', `${percent}%`);\n // Set the data label value if not set\n Array.from(tr.querySelectorAll('td:not([data-label])')).forEach((td, index) => {\n if (index == 0)\n td.setAttribute('part', 'xaxis-label'); // PART\n else\n td.setAttribute('part', 'value');\n if (tr.querySelectorAll('td').length > 2)\n td.setAttribute('data-label', table.querySelectorAll('thead th')[index].textContent);\n });\n const rowMin = tr.hasAttribute('data-min') ? tr.getAttribute('data-min') : min;\n const rowMax = tr.hasAttribute('data-max') ? tr.getAttribute('data-max') : max;\n if (rowMin < 0) {\n const minBottom = Math.abs((rowMin / (rowMax - rowMin)) * 100);\n chartElement.setAttribute('style', `--min-bottom: ${minBottom}%;`);\n }\n // Add a useful index css var for the use of animatons.\n tr.style.setProperty('--row-index', index + 1);\n // Add css vars to cells\n Array.from(tr.querySelectorAll('td[data-numeric]:not([data-label=\"Min\"]):not([data-label=\"Max\"]):not(:first-child)')).forEach((td) => {\n const display = getComputedStyle(td).display;\n if (display == 'none')\n return;\n const content = td.innerHTML;\n const value = Number.parseFloat(td.getAttribute('data-numeric'));\n const start = Number.parseFloat(td.getAttribute('data-start'));\n if (!td.querySelector('span[data-group]'))\n td.innerHTML = `<span data-group=\"${group}\" ${td.hasAttribute('data-label') ? `data-label=\"${td.getAttribute('data-label')}\"` : ''} part=\"popover\">${content}</span>`;\n if (!td.hasAttribute('style')) {\n const { percent, bottom, axis } = getValues(value, rowMin, rowMax, start);\n td.setAttribute('data-percent', percent);\n td.setAttribute('style', `--bottom:${bottom}%;--percent:${percent}%;--axis:${axis}%;`);\n }\n });\n });\n};\nexport const setLongestLabel = function (chartOuter) {\n const chartWrapper = chartOuter.querySelector('.chart__wrapper');\n const chartSpacer = chartOuter.querySelector('.chart__spacer span');\n const table = chartOuter.querySelector('.chart table');\n // set the longest label attr so that the bar chart knows what margin to set on the left\n let longestLabel = '';\n Array.from(table.querySelectorAll('tbody tr td:first-child')).forEach((td) => {\n if (typeof td.textContent != 'undefined' && td.textContent.length > longestLabel.length) {\n longestLabel = td.textContent;\n }\n });\n chartWrapper.setAttribute('data-longest-label', longestLabel);\n chartSpacer.innerHTML = longestLabel;\n};\nexport const setLongestValue = function (chartOuter) {\n const chartWrapper = chartOuter.querySelector('.chart__wrapper');\n const table = chartOuter.querySelector('.chart table');\n let longestValue = '';\n Array.from(table.querySelectorAll('tbody tr td:not(:first-child)')).forEach((td) => {\n if (typeof td.getAttribute('data-value') != 'undefined' &&\n td.getAttribute('data-value').length > longestValue.length) {\n longestValue = td.getAttribute('data-value');\n }\n });\n chartWrapper.setAttribute('data-longest-value', longestValue);\n};\n// #endregion\n// #region CREATE function\nexport const createChartKey = function (chartOuter, tableElement, chartKey) {\n const chartID = `chart-${Date.now() + (Math.floor(Math.random() * 100) + 1)}`;\n //const chartOuter = chartElement.querySelector('.chart__outer');\n let previousInput;\n const headings = Array.from(tableElement.querySelectorAll('thead th'));\n headings.forEach((arrayElement, index) => {\n if (index != 0) {\n previousInput = createChartKeyItem(chartID, index, arrayElement.textContent, chartKey, chartOuter, previousInput);\n }\n if (index == 50) {\n headings.length = index + 1;\n }\n });\n return true;\n};\nfunction createChartKeyItem(chartID, index, text, chartKey, chartOuter, previousInput) {\n var _a;\n const input = document.createElement('input');\n input.setAttribute('name', `${chartID}-dataset-${index}`);\n input.setAttribute('id', `${chartID}-dataset-${index}`);\n input.setAttribute('data-dataset', `${index}`);\n input.setAttribute('data-label', `${text}`);\n input.checked = true;\n input.setAttribute('type', `checkbox`);\n if (index == 1)\n chartOuter.prepend(input);\n else\n chartOuter.insertBefore(input, previousInput.nextSibling);\n previousInput = input;\n const label = document.createElement('label');\n label.setAttribute('class', `key btn btn-action`);\n label.setAttribute('for', `${chartID}-dataset-${index}`);\n label.setAttribute('data-label', `${text}`);\n label.setAttribute('part', `key`);\n const total = (_a = chartOuter.querySelector(`tbody tr td:nth-child(${index + 1})`)) === null || _a === void 0 ? void 0 : _a.getAttribute('data-numeric');\n label.setAttribute('data-numeric', total);\n label.innerHTML = `${text}`;\n chartKey.append(label);\n return previousInput;\n}\nexport const createChartGuidelines = function (chartElement, chartGuidelines) {\n const { min, max, yaxis } = getChartData(chartElement);\n let { guidelines } = getChartData(chartElement);\n if (!guidelines.length)\n guidelines = yaxis;\n chartGuidelines.innerHTML = '';\n for (let i = 0; i < guidelines.length; i++) {\n const value = parseFloat(guidelines[i].replace('£', '').replace('%', '').replace(',', ''));\n const { axis } = getValues(value, min, max);\n chartGuidelines.innerHTML += `<div class=\"guideline\" style=\"--percent:${axis}%;\">${yaxis.indexOf(guidelines[i]) != -1 ? `<span>${guidelines[i]}</span>` : ''}</div>`;\n }\n};\nexport const createChartYaxis = function (chartElement, chartYaxis) {\n const { min, max, yaxis } = getChartData(chartElement);\n chartYaxis.innerHTML = '';\n for (let i = 0; i < yaxis.length; i++) {\n const value = parseFloat(yaxis[i].replace('£', '').replace('%', ''));\n const { axis } = getValues(value, min, max);\n chartYaxis.innerHTML += `<div class=\"axis__point\" style=\"--percent:${axis}%;\"><span>${yaxis[i]}</span></div>`;\n }\n};\nexport const createXaxis = function (chartOuter) {\n const chart = chartOuter.querySelector('.chart');\n let chartXaxis = chartOuter.querySelector('.chart__xaxis');\n if (!chartXaxis) {\n chartXaxis = document.createElement('div');\n chartXaxis.setAttribute('class', 'chart__xaxis');\n }\n chart.prepend(chartXaxis);\n};\nexport const createTooltips = function (chartOuter) {\n const titles = chartOuter.querySelectorAll('thead th[title], tbody th[title]:first-child, tbody td[title]:first-child');\n Array.from(titles).forEach((title) => {\n const tooltipId = `tooltip-${Date.now()}-${Math.floor(Math.random() * 100)}`;\n title.innerHTML = `<button class=\"tooltip\" popovertarget=\"${tooltipId}\" part=\"tooltip\" style=\"anchor-name: --${tooltipId};\">${title.textContent}</button><span id=\"${tooltipId}\" style=\"position-anchor: --${tooltipId};\" popover part=\"tooltip__content\" class=\"tooltip__content\">${title.getAttribute('title')}</span>`;\n //title.removeAttribute('title'); // TODO add a supports query for anchor positioning\n });\n};\nexport const createdoughnuts = function (chartOuter) {\n let returnString = '';\n const chartInner = chartOuter.querySelector('.chart');\n let doughnutWrapper = chartOuter.querySelector('.doughnuts');\n if (!doughnutWrapper) {\n doughnutWrapper = document.createElement('div');\n doughnutWrapper.setAttribute('class', 'doughnuts');\n chartInner.append(doughnutWrapper);\n }\n Array.from(chartInner.querySelectorAll('tbody tr')).forEach((item, index) => {\n let paths = '';\n let tooltips = '';\n let cumulativePercent = 0;\n let total = 0;\n const titleKey = item.querySelectorAll('td')[0];\n const title = titleKey.innerHTML;\n let doughnutCount = 0;\n const rowTotal = item.getAttribute('data-numeric');\n // Work out the total amount\n Array.from(item.querySelectorAll('td')).forEach((td, subindex) => {\n const display = getComputedStyle(td).display;\n if (subindex != 0 && display != 'none') {\n let value = td.getAttribute('data-numeric');\n value = value.replace('£', '');\n value = value.replace('%', '');\n value = value.replace(',', '');\n value = Number.parseInt(value);\n total += value;\n doughnutCount++;\n }\n });\n // Create the paths\n Array.from(item.querySelectorAll('td')).forEach((td, subindex) => {\n var _a, _b;\n const display = getComputedStyle(td).display;\n if (subindex != 0 && doughnutCount == 1 && display != 'none') {\n const pathData = `M 0 0 L 100 0 A 100 100 0 1 1 100 -0.01 L 0 0`;\n paths += `<path d=\"${pathData}\" style=\"${td.getAttribute('style')} --path-index: ${subindex};\"></path>`;\n tooltips += `<span class=\"h5 mb-0\" part=\"popover\">${ucfirst(unsnake(td.getAttribute('data-label'))).trim()}<br/>${td.hasAttribute('data-second') ? `${td.getAttribute('data-second-label')}: ${td.getAttribute('data-second')}<br/>` : ''}${(_a = td.querySelector('[part=\"popover\"]')) === null || _a === void 0 ? void 0 : _a.innerHTML}</span>`;\n }\n else if (subindex != 0) {\n let value = td.getAttribute('data-numeric');\n const hide = display == 'none' ? 'display: none;' : '';\n value = value.replace('£', '');\n value = value.replace('%', '');\n value = value.replace(',', '');\n value = Number.parseInt(value);\n const percent = value / total;\n const [startX, startY] = getCoordinatesForPercent(cumulativePercent, doughnutCount);\n const [endX, endY] = getCoordinatesForPercent(cumulativePercent + percent, doughnutCount);\n const largeArcFlag = percent > 0.5 ? 1 : 0; // if the slice is more than 50%, take the large arc (the long way around)\n const pathData = [\n `M 0 0`,\n `L ${startX ? startX.toFixed(0) : 0} ${startY ? startY.toFixed(0) : 0}`, // Move\n `A 100 100 0 ${largeArcFlag} 1 ${endX ? endX.toFixed(0) : 0} ${endY ? endY.toFixed(0) : 0}`, // Arc\n `L 0 0`, // Line\n ].join(' ');\n paths += `<path d=\"${pathData}\" style=\"${td.getAttribute('style')} --path-index: ${subindex};${hide}\"></path>`;\n tooltips += `<span class=\"h5 mb-0\" part=\"popover\">${ucfirst(unsnake(td.getAttribute('data-label'))).trim()}<br/>${td.hasAttribute('data-second') ? `${td.getAttribute('data-second-label')}: ${td.getAttribute('data-second')}<br/>` : ''}${(_b = td.querySelector('[part=\"popover\"]')) === null || _b === void 0 ? void 0 : _b.innerHTML}</span>`;\n // each slice starts where the last slice ended, so keep a cumulative percent\n if (display != 'none')\n cumulativePercent += percent;\n }\n });\n returnString += `<div class=\"doughnut\">\n <svg viewBox=\"-105 -105 210 210\" preserveAspectRatio=\"none\" style=\"--row-index: ${index + 1};\">${paths}</svg>\n <div class=\"doughnut__title\" data-numeric=\"${rowTotal}\"><span class=\"h5 mb-0\">${title}</span></div>\n <div class=\"tooltips\">${tooltips}</div>\n</div>`;\n });\n doughnutWrapper.innerHTML = returnString;\n};\n// #endregion\nexport default setupChart;\n","export const trackComponentRegistered = (componentName) => {\n // Data layer Web component created\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: 'customElementRegistered',\n element: componentName,\n });\n};\nexport const trackComponent = (component, componentName, trackEvents) => {\n // Data layer Web component created\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: 'customElementAdded',\n element: componentName,\n });\n trackEvents.forEach((eventName) => {\n component.addEventListener(eventName, function (event) {\n const eventDetails = {\n event: eventName,\n element: componentName,\n target: event.target,\n };\n Object.keys(event.detail).forEach((eventKey) => {\n const eventDetail = event.detail[eventKey];\n eventDetails[eventKey] = eventDetail;\n });\n window.dataLayer.push(eventDetails);\n });\n });\n return true;\n};\n","import { addClasses, setupChart, setEventListener, setEventObservers, setLongestLabel, setLongestValue, createTooltips, } from '../../modules/chart.module';\nimport { trackComponent, trackComponentRegistered } from '../_global';\ntrackComponentRegistered('iam-barchart');\nclass iamBarChart extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n const assetLocation = document.body.hasAttribute('data-assets-location')\n ? document.body.getAttribute('data-assets-location')\n : '/assets';\n const loadCSS = `@import \"${assetLocation}/css/components/barchart.component.css\";`;\n const template = document.createElement('template');\n template.innerHTML = `\n <style>\n ${this.hasAttribute('css') ? `@import \"${this.getAttribute('css')}\";` : ``}\n \n ${loadCSS}\n </style>\n <div class=\"chart__outer\" part=\"outer\">\n <div class=\"chart__key\" part=\"chart-key\"></div>\n <div class=\"chart__wrapper\" part=\"wrapper\">\n <div class=\"chart__yaxis\" part=\"yaxis\"></div>\n <div class=\"chart\" part=\"chart\">\n <div class=\"chart__guidelines\" part=\"guidelines\"></div>\n </div>\n </div>\n <div class=\"chart__spacer\"><span part=\"spacer\"></span</div>\n </div>`;\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n }\n connectedCallback() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const chartComponent = this;\n //const chartID = `chart-${Date.now() + (Math.floor(Math.random() * 100) + 1)}`;\n const orginalTable = this.querySelector('table');\n const clonedTable = orginalTable.cloneNode(true);\n const chart = this.shadowRoot.querySelector('.chart');\n const chartOuter = this.shadowRoot.querySelector('.chart__outer');\n const barCount = chart.querySelectorAll('td:not(:first-child)').length;\n chart.appendChild(clonedTable);\n addClasses(chartComponent, chartOuter);\n if (barCount <= 10) {\n chartComponent.classList.add('chart--fit-content');\n }\n if (barCount <= 5) {\n chartComponent.classList.add('chart--no-scale');\n }\n setupChart(chartComponent, chartOuter, clonedTable);\n setEventObservers(chartComponent, chartOuter);\n setEventListener(chartComponent, chartOuter);\n setLongestLabel(chartOuter);\n setLongestValue(chartOuter);\n createTooltips(chartOuter);\n trackComponent(chartComponent, 'iam-barchart', ['view-change']);\n }\n}\nexport default iamBarChart;\n"],"names":["ucfirst","str","unsnake","addClasses","chartElement","chartOuter","i","colour","element","setupChart","tableElement","setupDoughnutChart","chartKey","chartGuidelines","chartYaxis","xaxis","getChartData","setCellData","createChartKey","createChartGuidelines","createChartYaxis","createXaxis","createdoughnuts","setEventListener","chart","event","rect","x","y","labels","label","table","shadowTable","eventTarget","customEvent","_a","setEventObservers","attributesUpdated","mutationList","observer","observer2","mutation","tableUpdated","getCoordinatesForPercent","percent","doughnutCount","min","max","getLargestValue","yaxis","guidelines","selector","values","largestValue","getValues","value","start","cleanValue","axis","bottom","tr","rowValue","td","copyTD","index","group","rowMin","rowMax","minBottom","content","setLongestLabel","chartWrapper","chartSpacer","longestLabel","setLongestValue","longestValue","chartID","previousInput","headings","arrayElement","createChartKeyItem","text","input","total","chartXaxis","createTooltips","titles","title","tooltipId","returnString","chartInner","doughnutWrapper","item","paths","tooltips","cumulativePercent","rowTotal","subindex","display","_b","hide","startX","startY","endX","endY","largeArcFlag","pathData","trackComponentRegistered","componentName","trackComponent","component","trackEvents","eventName","eventDetails","eventKey","eventDetail","iamBarChart","template","chartComponent","clonedTable","barCount"],"mappings":"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"}
|
|
@@ -14,15 +14,15 @@ class iamBentoGrid extends HTMLElement {
|
|
|
14
14
|
const loadCSS = `@import "${assetLocation}/css/components/bento-grid.component.css";`;
|
|
15
15
|
const loadExtraCSS = `@import "${assetLocation}/css/components/bento-grid.global.css";`;
|
|
16
16
|
const template = document.createElement('template');
|
|
17
|
-
template.innerHTML = `
|
|
18
|
-
<style>
|
|
19
|
-
${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
|
|
20
|
-
|
|
21
|
-
${loadCSS}
|
|
22
|
-
</style>
|
|
23
|
-
<div class="wrapper">
|
|
24
|
-
<slot></slot>
|
|
25
|
-
</div>
|
|
17
|
+
template.innerHTML = `
|
|
18
|
+
<style>
|
|
19
|
+
${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
|
|
20
|
+
|
|
21
|
+
${loadCSS}
|
|
22
|
+
</style>
|
|
23
|
+
<div class="wrapper">
|
|
24
|
+
<slot></slot>
|
|
25
|
+
</div>
|
|
26
26
|
`;
|
|
27
27
|
(_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.appendChild(template.content.cloneNode(true));
|
|
28
28
|
if (!document.getElementById('bentogridGlobal'))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* iamKey v7.7.1--
|
|
2
|
+
* iamKey v7.7.1--beta8
|
|
3
3
|
* Copyright 2022-2026 iamproperty
|
|
4
4
|
*/window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"bento-grid"});class n extends HTMLElement{constructor(){var o;super(),this.attachShadow({mode:"open"}),document.body.hasAttribute("data-assets-location")&&document.body.getAttribute("data-assets-location");const t=document.createElement("template");t.innerHTML=`
|
|
5
5
|
<style>
|