@iamproperty/components 7.0.0 → 7.1.0--beta2
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/assets/css/components/actionbar.css.map +1 -1
- package/assets/css/components/actionbar.global.css.map +1 -1
- package/assets/css/components/address-lookup.css.map +1 -1
- package/assets/css/components/applied-filters.css.map +1 -1
- package/assets/css/components/barchart.component.css +1 -1
- package/assets/css/components/barchart.component.css.map +1 -1
- package/assets/css/components/card.component.css +1 -1
- package/assets/css/components/card.component.css.map +1 -1
- package/assets/css/components/card.module.css.map +1 -1
- package/assets/css/components/carousel.component.css +1 -1
- package/assets/css/components/carousel.component.css.map +1 -1
- package/assets/css/components/carousel.config.css.map +1 -1
- package/assets/css/components/charts.config.css.map +1 -1
- package/assets/css/components/charts.css +1 -1
- package/assets/css/components/charts.css.map +1 -1
- package/assets/css/components/charts.module.css +1 -1
- package/assets/css/components/charts.module.css.map +1 -1
- package/assets/css/components/collapsible-side.css.map +1 -1
- package/assets/css/components/fileupload.css.map +1 -1
- package/assets/css/components/filter-card.component.css.map +1 -1
- package/assets/css/components/header.css.map +1 -1
- package/assets/css/components/inline-edit.css.map +1 -1
- package/assets/css/components/inline-edit.preload.css.map +1 -1
- package/assets/css/components/marketing.css.map +1 -1
- package/assets/css/components/multi-step.component.css.map +1 -1
- package/assets/css/components/multiselect.css +1 -1
- package/assets/css/components/multiselect.css.map +1 -1
- package/assets/css/components/multiselect.preload.css.map +1 -1
- package/assets/css/components/nav.css +1 -1
- package/assets/css/components/nav.css.map +1 -1
- package/assets/css/components/nav.docs.css.map +1 -1
- package/assets/css/components/nav.global.css +1 -1
- package/assets/css/components/nav.global.css.map +1 -1
- package/assets/css/components/nav.old.css +1 -1
- package/assets/css/components/nav.old.css.map +1 -1
- package/assets/css/components/nav.preload.css.map +1 -1
- package/assets/css/components/notification.css.map +1 -1
- package/assets/css/components/notification.global.css.map +1 -1
- package/assets/css/components/pagination.css.map +1 -1
- package/assets/css/components/property-searchbar.css +1 -1
- package/assets/css/components/property-searchbar.css.map +1 -1
- package/assets/css/components/record-card.component.css.map +1 -1
- package/assets/css/components/slider.css.map +1 -1
- package/assets/css/components/snapshot.css.map +1 -1
- package/assets/css/components/stepper.css.map +1 -1
- package/assets/css/components/table.css +1 -1
- package/assets/css/components/table.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/components/tabs.css.map +1 -1
- package/assets/css/components/testimonial.css.map +1 -1
- package/assets/css/components/timeline.css +1 -1
- package/assets/css/components/timeline.css.map +1 -1
- package/assets/css/components/video-card.component.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/js/components/_global.js +8 -8
- package/assets/js/components/accordion/accordion.component.js +13 -10
- package/assets/js/components/accordion/accordion.component.min.js +4 -4
- package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
- package/assets/js/components/actionbar/actionbar.component.js +97 -83
- package/assets/js/components/actionbar/actionbar.component.min.js +5 -5
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.js +30 -26
- package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
- package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.js +10 -6
- package/assets/js/components/applied-filters/applied-filters.component.min.js +3 -3
- package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
- package/assets/js/components/barchart/barchart.component.js +8 -7
- package/assets/js/components/barchart/barchart.component.min.js +4 -4
- package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
- package/assets/js/components/card/card.component.js +27 -12
- package/assets/js/components/card/card.component.min.js +3 -3
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.js +18 -12
- package/assets/js/components/carousel/carousel.component.min.js +4 -4
- package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
- package/assets/js/components/chart/chart.component.js +9 -8
- package/assets/js/components/collapsible-side/collapsible-side.component.js +20 -8
- 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/fileupload/fileupload.component.js +11 -7
- package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
- package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
- package/assets/js/components/filter-card/filter-card.component.js +19 -9
- package/assets/js/components/filter-card/filter-card.component.min.js +2 -2
- package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
- package/assets/js/components/filterlist/filterlist.component.js +10 -6
- package/assets/js/components/filterlist/filterlist.component.min.js +3 -3
- package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
- package/assets/js/components/header/header.component.js +8 -4
- package/assets/js/components/header/header.component.min.js +1 -1
- package/assets/js/components/header/header.component.min.js.map +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.js +43 -23
- package/assets/js/components/inline-edit/inline-edit.component.min.js +4 -4
- package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
- package/assets/js/components/marketing/marketing.component.js +11 -5
- 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/multi-step/multi-step.component.js +22 -19
- package/assets/js/components/multiselect/multiselect.component.js +62 -45
- package/assets/js/components/multiselect/multiselect.component.min.js +5 -5
- package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
- package/assets/js/components/nav/nav.component.js +57 -38
- package/assets/js/components/nav/nav.component.min.js +5 -5
- package/assets/js/components/nav/nav.component.min.js.map +1 -1
- package/assets/js/components/notification/notification.component.js +9 -5
- package/assets/js/components/notification/notification.component.min.js +5 -5
- package/assets/js/components/notification/notification.component.min.js.map +1 -1
- package/assets/js/components/pagination/pagination.component.js +18 -14
- package/assets/js/components/pagination/pagination.component.min.js +2 -2
- package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
- package/assets/js/components/record-card/record-card.component.js +10 -8
- package/assets/js/components/record-card/record-card.component.min.js +2 -2
- package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
- package/assets/js/components/search/search.component.js +22 -17
- package/assets/js/components/search/search.component.min.js +4 -4
- package/assets/js/components/search/search.component.min.js.map +1 -1
- package/assets/js/components/slider/slider.component.js +25 -21
- package/assets/js/components/slider/slider.component.min.js +3 -3
- package/assets/js/components/slider/slider.component.min.js.map +1 -1
- package/assets/js/components/table/table.component.js +30 -24
- package/assets/js/components/table/table.component.min.js +7 -7
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.js +10 -6
- package/assets/js/components/tabs/tabs.component.min.js +3 -3
- package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
- package/assets/js/components/video-card/video-card.component.js +45 -33
- package/assets/js/components/video-card/video-card.component.min.js +3 -3
- package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
- package/assets/js/components.bundle.js +1 -1
- package/assets/js/components.bundle.js.map +1 -1
- package/assets/js/components.js +35 -8
- package/assets/js/modules/applied-filters.js +20 -20
- package/assets/js/modules/carousel.js +65 -60
- package/assets/js/modules/chart.js +184 -134
- package/assets/js/modules/chart.module.js +74 -63
- package/assets/js/modules/data-layer.js +17 -17
- package/assets/js/modules/dialogs.js +47 -38
- package/assets/js/modules/drawer.js +1 -1
- package/assets/js/modules/dynamicEvents.js +24 -24
- package/assets/js/modules/file-upload.js +8 -9
- package/assets/js/modules/fileupload.js +5 -5
- package/assets/js/modules/filterlist.js +4 -4
- package/assets/js/modules/form.js +22 -18
- package/assets/js/modules/helpers.js +54 -44
- package/assets/js/modules/inputs.js +25 -21
- package/assets/js/modules/nav.js +3 -1
- package/assets/js/modules/notification.js +6 -6
- package/assets/js/modules/orderablelist.js +12 -12
- package/assets/js/modules/pagination.js +5 -5
- package/assets/js/modules/table.js +242 -181
- package/assets/js/modules/tabs.js +71 -60
- package/assets/js/modules/testimonial.js +11 -12
- 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/js/scripts.js +1 -1
- package/assets/js/tests/chart.spec.js +5 -5
- package/assets/js/tests/filterlist.spec.js +2 -2
- package/assets/js/tests/slider.spec.js +2 -2
- package/assets/js/tests/table.spec.js +2 -2
- package/assets/js/vendor/hibp.js +4 -4
- package/assets/sass/_components.scss +28 -40
- package/assets/sass/_corefiles.scss +22 -29
- package/assets/sass/_elements.scss +19 -19
- package/assets/sass/_fonts.scss +10 -7
- package/assets/sass/_func.scss +14 -14
- package/assets/sass/_functions/functions.scss +115 -90
- package/assets/sass/_functions/mixins.scss +72 -112
- package/assets/sass/_functions/utilities.scss +447 -393
- package/assets/sass/_functions/variables.scss +1357 -1371
- package/assets/sass/_print.scss +18 -16
- package/assets/sass/_tests/colours.spec.scss +15 -14
- package/assets/sass/_tests/func.spec.scss +1 -2
- package/assets/sass/_tests/mixins.spec.scss +9 -14
- package/assets/sass/_tests/typography.spec.scss +1 -2
- package/assets/sass/_utilities.scss +8 -12
- package/assets/sass/components/actionbar.global.scss +45 -64
- package/assets/sass/components/actionbar.scss +58 -84
- package/assets/sass/components/address-lookup.scss +9 -11
- package/assets/sass/components/applied-filters.scss +3 -7
- package/assets/sass/components/barchart.component.scss +68 -99
- package/assets/sass/components/card.component.scss +35 -50
- package/assets/sass/components/card.module.scss +34 -37
- package/assets/sass/components/carousel.component.scss +198 -177
- package/assets/sass/components/carousel.config.scss +13 -19
- package/assets/sass/components/charts.config.scss +16 -23
- package/assets/sass/components/charts.module.scss +139 -178
- package/assets/sass/components/charts.scss +173 -232
- package/assets/sass/components/collapsible-side.scss +65 -98
- package/assets/sass/components/fileupload.scss +17 -23
- package/assets/sass/components/filter-card.component.scss +21 -28
- package/assets/sass/components/header.scss +24 -37
- package/assets/sass/components/inline-edit.preload.scss +24 -45
- package/assets/sass/components/inline-edit.scss +4 -5
- package/assets/sass/components/marketing.scss +19 -14
- package/assets/sass/components/multi-step.component.scss +36 -42
- package/assets/sass/components/multiselect.preload.scss +9 -12
- package/assets/sass/components/multiselect.scss +20 -24
- package/assets/sass/components/nav.docs.scss +7 -15
- package/assets/sass/components/nav.global.scss +123 -177
- package/assets/sass/components/nav.old.scss +64 -135
- package/assets/sass/components/nav.preload.scss +11 -12
- package/assets/sass/components/nav.scss +126 -173
- package/assets/sass/components/notification.global.scss +2 -3
- package/assets/sass/components/notification.scss +17 -32
- package/assets/sass/components/pagination.scss +32 -44
- package/assets/sass/components/property-searchbar.scss +2 -6
- package/assets/sass/components/record-card.component.scss +42 -55
- package/assets/sass/components/slider.scss +38 -35
- package/assets/sass/components/snapshot.scss +4 -10
- package/assets/sass/components/stepper.scss +14 -22
- package/assets/sass/components/table.global.scss +130 -171
- package/assets/sass/components/table.scss +17 -27
- package/assets/sass/components/tabs.scss +23 -32
- package/assets/sass/components/testimonial.scss +6 -14
- package/assets/sass/components/timeline.scss +8 -12
- package/assets/sass/components/video-card.component.scss +9 -14
- package/assets/sass/components.reset.scss +5 -5
- package/assets/sass/core.scss +3 -3
- package/assets/sass/elements/admin-panel.scss +41 -45
- package/assets/sass/elements/badge-tag.scss +16 -26
- package/assets/sass/elements/brand.scss +13 -16
- package/assets/sass/elements/buttons.scss +80 -106
- package/assets/sass/elements/container.scss +24 -133
- package/assets/sass/elements/details.scss +30 -50
- package/assets/sass/elements/dialog.scss +4 -6
- package/assets/sass/elements/forms.scss +421 -437
- package/assets/sass/elements/icons.scss +3 -4
- package/assets/sass/elements/links.scss +17 -25
- package/assets/sass/elements/lists.scss +30 -47
- package/assets/sass/elements/media.scss +1 -4
- package/assets/sass/elements/modal.scss +54 -80
- package/assets/sass/elements/popover.scss +28 -45
- package/assets/sass/elements/progress.scss +30 -40
- package/assets/sass/elements/table.element.scss +10 -15
- package/assets/sass/elements/tooltips.scss +27 -49
- package/assets/sass/elements/type.scss +47 -53
- package/assets/sass/email.scss +7 -9
- package/assets/sass/error.scss +23 -20
- package/assets/sass/foundations/bs_grid.scss +0 -1
- package/assets/sass/foundations/grid.scss +120 -122
- package/assets/sass/foundations/reboot.scss +27 -35
- package/assets/sass/foundations/root.scss +21 -31
- package/assets/sass/helpers/dynamic.scss +5 -5
- package/assets/sass/helpers/line-clamp.scss +1 -2
- package/assets/sass/helpers/max-height.scss +28 -36
- package/assets/sass/helpers/wider-colours.scss +2 -5
- package/assets/sass/main.scss +4 -4
- package/assets/sass/templates/auth.scss +11 -18
- package/assets/sass/templates/form.scss +16 -29
- package/assets/ts/components/_global.ts +14 -17
- package/assets/ts/components/accordion/accordion.component.ts +23 -19
- package/assets/ts/components/actionbar/README.md +8 -7
- package/assets/ts/components/actionbar/actionbar.component.ts +170 -220
- package/assets/ts/components/address-lookup/address-lookup.component.ts +94 -130
- package/assets/ts/components/applied-filters/README.md +1 -1
- package/assets/ts/components/applied-filters/applied-filters.component.ts +16 -15
- package/assets/ts/components/barchart/barchart.component.ts +29 -26
- package/assets/ts/components/card/card.component.ts +56 -57
- package/assets/ts/components/carousel/README.md +8 -9
- package/assets/ts/components/carousel/carousel.component.ts +30 -33
- package/assets/ts/components/chart/README.md +1 -3
- package/assets/ts/components/chart/chart.component.ts +24 -36
- package/assets/ts/components/collapsible-side/README.md +1 -1
- package/assets/ts/components/collapsible-side/collapsible-side.component.ts +44 -57
- package/assets/ts/components/fileupload/README.md +3 -3
- package/assets/ts/components/fileupload/fileupload.component.ts +23 -28
- package/assets/ts/components/filter-card/filter-card.component.ts +32 -33
- package/assets/ts/components/filterlist/README.md +3 -3
- package/assets/ts/components/filterlist/filterlist.component.ts +18 -16
- package/assets/ts/components/header/README.md +8 -9
- package/assets/ts/components/header/header.component.ts +15 -16
- package/assets/ts/components/inline-edit/README.md +1 -0
- package/assets/ts/components/inline-edit/inline-edit.component.ts +71 -71
- package/assets/ts/components/marketing/marketing.component.ts +17 -16
- package/assets/ts/components/multi-step/multi-step.component.ts +114 -156
- package/assets/ts/components/multiselect/README.md +5 -5
- package/assets/ts/components/multiselect/multiselect.component.ts +116 -133
- package/assets/ts/components/nav/README.md +13 -13
- package/assets/ts/components/nav/nav.component.ts +171 -167
- package/assets/ts/components/notification/README.md +9 -9
- package/assets/ts/components/notification/notification.component.ts +33 -32
- package/assets/ts/components/pagination/README.md +12 -12
- package/assets/ts/components/pagination/pagination.component.ts +51 -69
- package/assets/ts/components/record-card/record-card.component.ts +24 -34
- package/assets/ts/components/search/README.md +6 -7
- package/assets/ts/components/search/search.component.ts +75 -91
- package/assets/ts/components/slider/slider.component.ts +62 -77
- package/assets/ts/components/table/README.md +8 -8
- package/assets/ts/components/table/table.component.ts +97 -134
- package/assets/ts/components/tabs/README.md +4 -4
- package/assets/ts/components/tabs/tabs.component.ts +16 -14
- package/assets/ts/components/video-card/video-card.component.ts +89 -93
- package/assets/ts/components.ts +44 -20
- package/assets/ts/html.d.ts +1 -7
- package/assets/ts/modules/applied-filters.ts +104 -135
- package/assets/ts/modules/card.module.ts +13 -18
- package/assets/ts/modules/carousel.ts +194 -195
- package/assets/ts/modules/chart.module.ts +201 -246
- package/assets/ts/modules/chart.ts +454 -472
- package/assets/ts/modules/data-layer.md +35 -31
- package/assets/ts/modules/data-layer.ts +18 -18
- package/assets/ts/modules/dialogs.ts +113 -117
- package/assets/ts/modules/drawer.ts +7 -9
- package/assets/ts/modules/dynamicEvents.ts +67 -100
- package/assets/ts/modules/file-upload.ts +43 -40
- package/assets/ts/modules/fileupload.ts +38 -60
- package/assets/ts/modules/filterlist.ts +14 -20
- package/assets/ts/modules/form.ts +126 -128
- package/assets/ts/modules/helpers.ts +114 -120
- package/assets/ts/modules/inputs.ts +88 -120
- package/assets/ts/modules/nav.ts +19 -18
- package/assets/ts/modules/notification.ts +28 -32
- package/assets/ts/modules/orderablelist.ts +90 -82
- package/assets/ts/modules/pagination.ts +14 -19
- package/assets/ts/modules/table.ts +516 -599
- package/assets/ts/modules/tabs.ts +120 -145
- package/assets/ts/modules/testimonial.ts +59 -64
- package/assets/ts/scripts.ts +7 -9
- package/assets/ts/tests/chart.spec.ts +11 -20
- package/assets/ts/tests/data-layer.spec.js +3 -4
- package/assets/ts/tests/filterlist.spec.ts +3 -6
- package/assets/ts/tests/slider.spec.ts +9 -15
- package/assets/ts/tests/table.spec.ts +7 -24
- package/assets/ts/vendor/hibp.ts +43 -43
- package/dist/components.es.js +280 -270
- package/dist/components.umd.js +67 -67
- package/dist/style.css +1 -1
- package/package.json +14 -4
- package/src/components/Accordion/Accordion.spec.js +25 -31
- package/src/components/Accordion/Accordion.vue +16 -19
- package/src/components/Accordion/AccordionItem.vue +39 -37
- package/src/components/Accordion/README.md +10 -12
- package/src/components/Actionbar/Actionbar.vue +15 -18
- package/src/components/Actionbar/README.md +8 -7
- package/src/components/AddressLookup/AddressLookup.vue +14 -16
- package/src/components/AppliedFilters/AppliedFilters.vue +14 -16
- package/src/components/Banner/Banner.spec.js +13 -15
- package/src/components/Banner/Banner.vue +19 -19
- package/src/components/Banner/README.md +8 -10
- package/src/components/BarChart/BarChart.vue +14 -16
- package/src/components/Card/Card.vue +13 -16
- package/src/components/Card/README.md +8 -8
- package/src/components/Carousel/Carousel.vue +15 -18
- package/src/components/Carousel/README.md +7 -7
- package/src/components/Chart/Chart.spec.js +64 -87
- package/src/components/Chart/Chart.vue +41 -40
- package/src/components/Chart/README.md +8 -9
- package/src/components/CollapsibleSideMenu/CollapsibleSideMenu.vue +8 -10
- package/src/components/CollapsibleSideMenu/README.md +1 -1
- package/src/components/FileUpload/FileUpload.vue +35 -40
- package/src/components/FileUpload/README.md +3 -3
- package/src/components/FilterCard/FilterCard.vue +14 -16
- package/src/components/Filterlist/Filterlist.vue +7 -9
- package/src/components/Filterlist/README.md +3 -3
- package/src/components/Header/Header.vue +23 -26
- package/src/components/Header/README.md +8 -9
- package/src/components/InlineEdit/InlineEdit.vue +26 -32
- package/src/components/Input/Input.vue +323 -233
- package/src/components/Input/README.md +11 -11
- package/src/components/Marketing/Marketing.vue +24 -27
- package/src/components/Marketing/README.md +7 -7
- package/src/components/MultiStep/MultiStep.vue +13 -15
- package/src/components/Multiselect/Multiselect.vue +14 -17
- package/src/components/Nav/Nav.vue +15 -29
- package/src/components/Nav/README.md +12 -12
- package/src/components/Nav-old/Nav.vue +88 -93
- package/src/components/Nav-old/README.md +11 -12
- package/src/components/NoteFeed/NoteFeed.vue +59 -56
- package/src/components/NoteFeed/README.md +6 -6
- package/src/components/Notification/Notification.vue +11 -15
- package/src/components/Notification/README.md +9 -9
- package/src/components/Pagination/Pagination.vue +14 -24
- package/src/components/Pagination/README.md +12 -12
- package/src/components/PropertySearchbar/PropertySearchbar.vue +191 -160
- package/src/components/PropertySearchbar/README.md +14 -15
- package/src/components/RecordCard/RecordCard.vue +14 -16
- package/src/components/Search/README.md +1 -1
- package/src/components/Search/Search.vue +13 -16
- package/src/components/Slider/Slider.vue +13 -16
- package/src/components/Snapshot/README.md +9 -10
- package/src/components/Snapshot/Snapshot.vue +15 -17
- package/src/components/Stepper/README.md +12 -13
- package/src/components/Stepper/Step.vue +22 -18
- package/src/components/Stepper/Stepper.spec.js +41 -46
- package/src/components/Stepper/Stepper.vue +17 -18
- package/src/components/Table/README.md +12 -11
- package/src/components/Table/Table.spec.js +17 -28
- package/src/components/Table/Table.vue +49 -48
- package/src/components/Tabs/README.md +8 -8
- package/src/components/Tabs/Tab.vue +21 -21
- package/src/components/Tabs/Tabs.vue +14 -17
- package/src/components/Testimonial/README.md +11 -12
- package/src/components/Testimonial/Testimonial.spec.js +22 -26
- package/src/components/Testimonial/Testimonial.vue +31 -25
- package/src/components/Timeline/README.md +3 -3
- package/src/components/Timeline/Timeline.spec.js +9 -11
- package/src/components/Timeline/Timeline.vue +10 -10
- package/src/components/VideoCard/VideoCard.vue +14 -16
- package/src/foundations/Logo/Logo.spec.js +30 -30
- package/src/foundations/Logo/Logo.vue +28 -28
- package/src/foundations/Logo/README.md +5 -4
- package/src/helpers/strings.js +11 -8
- package/src/index.js +27 -28
- package/src/vue-shim.d.ts +4 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ucfirst, unsnake, numberOfDays } from './helpers.js';
|
|
2
|
-
// #region Functions that setup and trigger other functions
|
|
2
|
+
// #region Functions that setup and trigger other functions
|
|
3
3
|
export const setupChart = (chartElement, chartOuter, tableElement) => {
|
|
4
4
|
// #region Reset the chart
|
|
5
5
|
// empty divs to re-populate
|
|
@@ -12,15 +12,19 @@ export const setupChart = (chartElement, chartOuter, tableElement) => {
|
|
|
12
12
|
const chartYaxis = chartOuter.querySelector('.chart__yaxis');
|
|
13
13
|
chartYaxis.innerHTML = ``;
|
|
14
14
|
// Remove old input fields
|
|
15
|
-
Array.from(chartOuter.querySelectorAll(':scope > input[type="checkbox"],:scope > input[type="radio"]')).map((element) => {
|
|
15
|
+
Array.from(chartOuter.querySelectorAll(':scope > input[type="checkbox"],:scope > input[type="radio"]')).map((element) => {
|
|
16
|
+
element.remove();
|
|
17
|
+
});
|
|
16
18
|
// #endregion
|
|
17
19
|
createTypeSwitcher(chartElement, chartKey, chartOptions);
|
|
18
|
-
|
|
20
|
+
const { xaxis, type } = getChartData(chartElement, chartOuter);
|
|
19
21
|
setCellData(chartElement, chartOuter, tableElement);
|
|
20
22
|
createChartKey(chartOuter, tableElement, chartKey);
|
|
21
23
|
createChartGuidelines(chartElement, chartOuter, chartGuidelines);
|
|
22
24
|
createChartYaxis(chartElement, chartOuter, chartYaxis);
|
|
23
|
-
const availableTypes = chartElement.hasAttribute('data-types')
|
|
25
|
+
const availableTypes = chartElement.hasAttribute('data-types')
|
|
26
|
+
? chartElement.getAttribute('data-types').split(',')
|
|
27
|
+
: [type];
|
|
24
28
|
if (availableTypes.includes('line')) {
|
|
25
29
|
createLines(chartElement, chartOuter);
|
|
26
30
|
}
|
|
@@ -29,7 +33,8 @@ export const setupChart = (chartElement, chartOuter, tableElement) => {
|
|
|
29
33
|
if (xaxis) {
|
|
30
34
|
createXaxis(chartElement, chartOuter, xaxis);
|
|
31
35
|
}
|
|
32
|
-
if (chartElement.hasAttribute('data-slope'))
|
|
36
|
+
if (chartElement.hasAttribute('data-slope'))
|
|
37
|
+
// Need to check attribute is there not its value
|
|
33
38
|
createSlope(chartElement, chartOuter);
|
|
34
39
|
if (chartElement.classList.contains('chart--show-totals'))
|
|
35
40
|
createKeyTotals(chartElement, chartOuter);
|
|
@@ -43,9 +48,11 @@ export const setupChart = (chartElement, chartOuter, tableElement) => {
|
|
|
43
48
|
// #region Event handlers and observers
|
|
44
49
|
export const setEventHandlers = function (chartElement, chartOuter) {
|
|
45
50
|
const showData = chartOuter.querySelectorAll(':scope > input[type="checkbox"]');
|
|
46
|
-
|
|
47
|
-
const availableTypes = chartElement.hasAttribute('data-types')
|
|
48
|
-
|
|
51
|
+
const { type } = getChartData(chartElement, chartOuter);
|
|
52
|
+
const availableTypes = chartElement.hasAttribute('data-types')
|
|
53
|
+
? chartElement.getAttribute('data-types').split(',')
|
|
54
|
+
: [type];
|
|
55
|
+
for (let i = 0; i < showData.length; i++) {
|
|
49
56
|
showData[i].addEventListener('change', function () {
|
|
50
57
|
if (availableTypes.includes('pie'))
|
|
51
58
|
createPies(chartOuter);
|
|
@@ -65,13 +72,15 @@ export const setEventHandlers = function (chartElement, chartOuter) {
|
|
|
65
72
|
export const setEventObservers = function (chartElement, chartOuter) {
|
|
66
73
|
if (chartElement.hasAttribute('data-series'))
|
|
67
74
|
return false;
|
|
68
|
-
|
|
69
|
-
|
|
75
|
+
const table = chartElement.querySelector('table');
|
|
76
|
+
const newTable = chartOuter.querySelector('table');
|
|
70
77
|
const attributesUpdated = (mutationList, observer) => {
|
|
71
78
|
observer.disconnect();
|
|
72
79
|
observer2.disconnect();
|
|
73
80
|
for (const mutation of mutationList) {
|
|
74
|
-
if (mutation.attributeName == 'class' ||
|
|
81
|
+
if (mutation.attributeName == 'class' ||
|
|
82
|
+
(mutation.type === 'attributes' && mutation.attributeName === 'data-total') ||
|
|
83
|
+
mutation.type === 'attributes') {
|
|
75
84
|
newTable.innerHTML = table.innerHTML;
|
|
76
85
|
setupChart(chartElement, chartOuter, newTable);
|
|
77
86
|
}
|
|
@@ -83,7 +92,7 @@ export const setEventObservers = function (chartElement, chartOuter) {
|
|
|
83
92
|
observer.disconnect();
|
|
84
93
|
observer2.disconnect();
|
|
85
94
|
for (const mutation of mutationList) {
|
|
86
|
-
if (mutation.type ==
|
|
95
|
+
if (mutation.type == 'characterData' || (mutation.type == 'childList' && mutation.addedNodes.length)) {
|
|
87
96
|
newTable.innerHTML = table.innerHTML;
|
|
88
97
|
setupChart(chartElement, chartOuter, newTable);
|
|
89
98
|
}
|
|
@@ -91,8 +100,8 @@ export const setEventObservers = function (chartElement, chartOuter) {
|
|
|
91
100
|
observer.observe(table, { characterData: true, subtree: true });
|
|
92
101
|
observer2.observe(chartElement, { attributes: true });
|
|
93
102
|
};
|
|
94
|
-
|
|
95
|
-
|
|
103
|
+
const observer = new MutationObserver(tableUpdated);
|
|
104
|
+
const observer2 = new MutationObserver(attributesUpdated);
|
|
96
105
|
observer.observe(table, { characterData: true, subtree: true });
|
|
97
106
|
observer2.observe(chartElement, { attributes: true });
|
|
98
107
|
return true;
|
|
@@ -100,24 +109,50 @@ export const setEventObservers = function (chartElement, chartOuter) {
|
|
|
100
109
|
// #endregion
|
|
101
110
|
// #region GET functions
|
|
102
111
|
export const getChartData = function (chartElement, chartOuter) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
112
|
+
const table = chartOuter.querySelector('.chart__wrapper table');
|
|
113
|
+
const min = chartElement.hasAttribute('data-min') ? chartElement.getAttribute('data-min') : 0;
|
|
114
|
+
const max = chartElement.hasAttribute('data-max')
|
|
115
|
+
? chartElement.getAttribute('data-max')
|
|
116
|
+
: getLargestValue(table);
|
|
117
|
+
const type = chartElement.hasAttribute('data-type') ? chartElement.getAttribute('data-type') : 'column';
|
|
118
|
+
const yaxis = chartElement.hasAttribute('data-yaxis') ? chartElement.getAttribute('data-yaxis').split(',') : [];
|
|
119
|
+
const guidelines = chartElement.hasAttribute('data-guidelines')
|
|
120
|
+
? chartElement.getAttribute('data-guidelines').split(',')
|
|
121
|
+
: [];
|
|
122
|
+
const targets = chartElement.hasAttribute('data-targets')
|
|
123
|
+
? JSON.parse(chartElement.getAttribute('data-targets'))
|
|
124
|
+
: null;
|
|
125
|
+
const events = chartElement.hasAttribute('data-events')
|
|
126
|
+
? JSON.parse(chartElement.getAttribute('data-events'))
|
|
127
|
+
: null;
|
|
128
|
+
const xaxis = chartElement.hasAttribute('data-xaxis')
|
|
129
|
+
? chartElement.getAttribute('data-xaxis').split(',')
|
|
130
|
+
: null;
|
|
131
|
+
const increment = chartElement.hasAttribute('data-increment') ? chartElement.getAttribute('data-increment') : null;
|
|
132
|
+
const start = chartElement.hasAttribute('data-start') ? chartElement.getAttribute('data-start') : 0;
|
|
133
|
+
const end = chartElement.hasAttribute('data-end')
|
|
134
|
+
? chartElement.getAttribute('data-end')
|
|
135
|
+
: getLargestValue(table); // TODO - get largest value from the data-xaxis
|
|
136
|
+
const slope = chartElement.hasAttribute('data-slope') ? chartElement.getAttribute('data-slope') : null;
|
|
137
|
+
const yInt = chartElement.hasAttribute('data-yint') ? chartElement.getAttribute('data-yint') : null;
|
|
138
|
+
return {
|
|
139
|
+
min,
|
|
140
|
+
max,
|
|
141
|
+
type,
|
|
142
|
+
yaxis,
|
|
143
|
+
targets,
|
|
144
|
+
events,
|
|
145
|
+
xaxis,
|
|
146
|
+
increment,
|
|
147
|
+
start,
|
|
148
|
+
end,
|
|
149
|
+
slope,
|
|
150
|
+
yInt,
|
|
151
|
+
guidelines,
|
|
152
|
+
};
|
|
118
153
|
};
|
|
119
154
|
function getLargestValue(table) {
|
|
120
|
-
|
|
155
|
+
const values = Array.from(table.querySelectorAll('tbody td:not(:first-child)')).map((element) => {
|
|
121
156
|
let currentValue = String(element.textContent);
|
|
122
157
|
currentValue = currentValue.replace('£', '');
|
|
123
158
|
currentValue = currentValue.replace('%', '');
|
|
@@ -125,7 +160,7 @@ function getLargestValue(table) {
|
|
|
125
160
|
currentValue = Number.parseFloat(currentValue);
|
|
126
161
|
return currentValue;
|
|
127
162
|
});
|
|
128
|
-
|
|
163
|
+
const largetValue = Math.max(...values);
|
|
129
164
|
// TO DO round to the nearest 10, 100, 1000 and so on
|
|
130
165
|
return Math.ceil(largetValue);
|
|
131
166
|
}
|
|
@@ -143,7 +178,7 @@ const getValues = function (value, min, max, start) {
|
|
|
143
178
|
}
|
|
144
179
|
// If the value is negative the position below the 0 line
|
|
145
180
|
if (min < 0) {
|
|
146
|
-
bottom = Math.abs((
|
|
181
|
+
bottom = Math.abs((min / (max - min)) * 100);
|
|
147
182
|
if (cleanValue < 0) {
|
|
148
183
|
percent = bottom - percent;
|
|
149
184
|
bottom = bottom - percent;
|
|
@@ -168,19 +203,21 @@ function getCoordinatesForPercent(percent, pieCount) {
|
|
|
168
203
|
// #region SET functions - set data attributes and classes
|
|
169
204
|
export const setCellData = function (chartElement, chartOuter, table) {
|
|
170
205
|
let { min, max } = getChartData(chartElement, chartOuter);
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
206
|
+
const chartType = chartElement.getAttribute('data-type');
|
|
207
|
+
const increment = chartElement.getAttribute('data-increment');
|
|
208
|
+
const incrementStart = chartElement.getAttribute('data-start');
|
|
209
|
+
const incrementEnd = chartElement.getAttribute('data-end');
|
|
210
|
+
const startDay = min;
|
|
176
211
|
// Change how gant charts are configured as this just seems bizarre now
|
|
177
|
-
if (increment ==
|
|
212
|
+
if (increment == 'days') {
|
|
178
213
|
max = numberOfDays(min, max);
|
|
179
214
|
min = 0;
|
|
180
|
-
chartElement.querySelector('tbody').setAttribute('style', `--single-day:${(
|
|
215
|
+
chartElement.querySelector('tbody').setAttribute('style', `--single-day:${(1 / max) * 100}%;`);
|
|
181
216
|
}
|
|
182
217
|
Array.from(table.querySelectorAll('tbody tr')).forEach((tr, index) => {
|
|
183
|
-
|
|
218
|
+
const group = tr.querySelector('td:first-child, th:first-child')
|
|
219
|
+
? tr.querySelector('td:first-child, th:first-child').innerHTML
|
|
220
|
+
: '';
|
|
184
221
|
let coverageStart = 100;
|
|
185
222
|
let coverageEnd = 0;
|
|
186
223
|
let cumulativeComparison = 0;
|
|
@@ -192,8 +229,8 @@ export const setCellData = function (chartElement, chartOuter, table) {
|
|
|
192
229
|
Array.from(tr.querySelectorAll('td:not([data-numeric]):not(:first-child)')).forEach((td) => {
|
|
193
230
|
let value = parseFloat(td.textContent.replace('£', '').replace('%', '').replace(',', ''));
|
|
194
231
|
let start = 0;
|
|
195
|
-
if (increment ==
|
|
196
|
-
|
|
232
|
+
if (increment == 'days') {
|
|
233
|
+
const dates = td.textContent.split(' - ');
|
|
197
234
|
if (dates[1]) {
|
|
198
235
|
value = numberOfDays(dates[0], dates[1]);
|
|
199
236
|
start = numberOfDays(startDay, dates[0]) - 1;
|
|
@@ -215,27 +252,27 @@ export const setCellData = function (chartElement, chartOuter, table) {
|
|
|
215
252
|
if (tr.querySelector('[data-label="Max"]')) {
|
|
216
253
|
tr.setAttribute('data-max', tr.querySelector('[data-label="Max"][data-numeric]').getAttribute('data-numeric'));
|
|
217
254
|
}
|
|
218
|
-
if ((chartType ==
|
|
255
|
+
if ((chartType == 'proportional' || chartType == 'waffle') && !tr.hasAttribute('data-total')) {
|
|
219
256
|
let total = 0;
|
|
220
257
|
Array.from(tr.querySelectorAll('td[data-numeric]:not(:first-child)')).forEach((td) => {
|
|
221
|
-
|
|
258
|
+
const display = getComputedStyle(td).display;
|
|
222
259
|
if (display == 'none')
|
|
223
260
|
return;
|
|
224
261
|
total += Number.parseFloat(td.getAttribute('data-numeric'));
|
|
225
262
|
});
|
|
226
263
|
tr.setAttribute('data-total', total);
|
|
227
264
|
}
|
|
228
|
-
|
|
229
|
-
|
|
265
|
+
const rowMin = tr.hasAttribute('data-min') ? tr.getAttribute('data-min') : min;
|
|
266
|
+
const rowMax = tr.hasAttribute('data-max') ? tr.getAttribute('data-max') : max;
|
|
230
267
|
// Add a useful index css var for the use of animatons.
|
|
231
268
|
tr.setAttribute('style', `--row-index:${index + 1};`);
|
|
232
269
|
if (rowMin < 0) {
|
|
233
|
-
|
|
270
|
+
const minBottom = Math.abs((rowMin / (rowMax - rowMin)) * 100);
|
|
234
271
|
chartElement.setAttribute('style', `--min-bottom: ${minBottom}%;`);
|
|
235
272
|
}
|
|
236
273
|
// Add css vars to cells
|
|
237
274
|
Array.from(tr.querySelectorAll('td[data-numeric]:not([data-label="Min"]):not([data-label="Max"]):not(:first-child)')).forEach((td) => {
|
|
238
|
-
|
|
275
|
+
const display = getComputedStyle(td).display;
|
|
239
276
|
if (display == 'none')
|
|
240
277
|
return;
|
|
241
278
|
const label = td.getAttribute('data-label');
|
|
@@ -245,22 +282,22 @@ export const setCellData = function (chartElement, chartOuter, table) {
|
|
|
245
282
|
if (!td.querySelector('span[data-group]'))
|
|
246
283
|
td.innerHTML = `<span data-group="${group}" data-label="${label}">${content}</span>`;
|
|
247
284
|
if (!td.hasAttribute('style')) {
|
|
248
|
-
|
|
285
|
+
const { percent, bottom, axis } = getValues(value, rowMin, rowMax, start);
|
|
249
286
|
td.setAttribute('data-percent', percent);
|
|
250
|
-
td.setAttribute(
|
|
287
|
+
td.setAttribute('style', `--bottom:${bottom}%;--percent:${percent}%;--axis:${axis}%;`);
|
|
251
288
|
if (tr.hasAttribute('data-total')) {
|
|
252
|
-
|
|
253
|
-
|
|
289
|
+
const rowTotal = tr.getAttribute('data-total');
|
|
290
|
+
const comparison = ((value - rowMin) / rowTotal) * 100;
|
|
254
291
|
cumulativeComparison += comparison;
|
|
255
292
|
td.setAttribute('data-comparison', comparison);
|
|
256
293
|
td.style.setProperty('--cumulative-comparision', `${cumulativeComparison}%`);
|
|
257
294
|
td.style.setProperty('--comparison', `${comparison}%`);
|
|
258
295
|
}
|
|
259
|
-
if (chartElement.classList.contains(
|
|
260
|
-
|
|
296
|
+
if (chartElement.classList.contains('chart--value-order')) {
|
|
297
|
+
const order = 10000 - Math.round(percent * 100);
|
|
261
298
|
td.style.setProperty('--order', `${order}%`);
|
|
262
299
|
}
|
|
263
|
-
if (chartType ==
|
|
300
|
+
if (chartType == 'dumbbell') {
|
|
264
301
|
if (percent < coverageStart) {
|
|
265
302
|
tr.style.setProperty('--coverage-start', `${percent}%`);
|
|
266
303
|
coverageStart = percent;
|
|
@@ -270,16 +307,16 @@ export const setCellData = function (chartElement, chartOuter, table) {
|
|
|
270
307
|
coverageEnd = percent;
|
|
271
308
|
}
|
|
272
309
|
}
|
|
273
|
-
if (chartType ==
|
|
310
|
+
if (chartType == 'waffle') {
|
|
274
311
|
let actualPercent = Math.round(td.getAttribute('data-comparison'));
|
|
275
312
|
// Prevent the chart from spilling out of the top
|
|
276
313
|
totalPercent += actualPercent;
|
|
277
314
|
if (totalPercent > 100)
|
|
278
315
|
actualPercent = actualPercent - (totalPercent - 100);
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
316
|
+
const percentMinusAfter = previousAfter != 0 ? actualPercent - (10 - previousAfter) : actualPercent;
|
|
317
|
+
const rowHeight = percentMinusAfter < 10 ? 10 : Math.floor(percentMinusAfter / 10) * 10;
|
|
318
|
+
const rowWidth = percentMinusAfter < 10 ? percentMinusAfter * 10 : 100;
|
|
319
|
+
const maxWidth = actualPercent * 10;
|
|
283
320
|
td.style.setProperty('--rowPosition', `${rowPosition}%`);
|
|
284
321
|
td.style.setProperty('--rowHeight', `${rowHeight}%`);
|
|
285
322
|
td.style.setProperty('--rowWidth', `${rowWidth}%`);
|
|
@@ -287,19 +324,19 @@ export const setCellData = function (chartElement, chartOuter, table) {
|
|
|
287
324
|
// Create the psuedo element variables for the the block that sticks out BELOW the main row
|
|
288
325
|
let beforeWidth = 0;
|
|
289
326
|
if (previousAfter != 0) {
|
|
290
|
-
beforeWidth = 100 -
|
|
327
|
+
beforeWidth = 100 - previousAfter * 10;
|
|
291
328
|
td.style.setProperty('--beforeWidth', `${beforeWidth}%`);
|
|
292
|
-
td.style.setProperty('--beforeHeight', `${10 / rowHeight * 100}%`);
|
|
329
|
+
td.style.setProperty('--beforeHeight', `${(10 / rowHeight) * 100}%`);
|
|
293
330
|
td.style.setProperty('--beforeLeft', `${previousAfter * 10}%`);
|
|
294
331
|
}
|
|
295
332
|
// Create the psuedo element variables for the the block that sticks out ABOVE the main row
|
|
296
|
-
|
|
297
|
-
|
|
333
|
+
const afterWidth = Math.round(percentMinusAfter - rowHeight) * 10;
|
|
334
|
+
const afterHeight = (10 / rowHeight) * 100;
|
|
298
335
|
td.style.setProperty('--afterWidth', `${afterWidth}%`);
|
|
299
336
|
td.style.setProperty('--afterHeight', `${afterHeight}%`);
|
|
300
337
|
// If the row width plus the previous after is under 10 it needs to be added to the new previousAfter variable
|
|
301
338
|
if (previousAfter + beforeWidth / 10 + rowWidth / 10 < 10)
|
|
302
|
-
previousAfter += beforeWidth / 10 +
|
|
339
|
+
previousAfter += beforeWidth / 10 + rowWidth / 10;
|
|
303
340
|
else if (percentMinusAfter < 10)
|
|
304
341
|
previousAfter = percentMinusAfter;
|
|
305
342
|
else
|
|
@@ -310,8 +347,13 @@ export const setCellData = function (chartElement, chartOuter, table) {
|
|
|
310
347
|
}
|
|
311
348
|
// totals
|
|
312
349
|
if (chartElement.classList.contains('chart--show-totals')) {
|
|
313
|
-
|
|
314
|
-
|
|
350
|
+
const chartTotal = chartElement.getAttribute('data-total')
|
|
351
|
+
? Number.parseFloat(chartElement.getAttribute('data-total'))
|
|
352
|
+
: 0;
|
|
353
|
+
const keyTotal = chartElement.querySelector(`.key[data-label="${label}"]`) &&
|
|
354
|
+
chartElement.querySelector(`.key[data-label="${label}"]`).getAttribute('data-total')
|
|
355
|
+
? Number.parseFloat(chartElement.querySelector(`.key[data-label="${label}"]`).getAttribute('data-total'))
|
|
356
|
+
: 0;
|
|
315
357
|
if (chartElement.querySelector(`.key[data-label="${label}"]`))
|
|
316
358
|
chartElement.querySelector(`.key[data-label="${label}"]`).setAttribute('data-total', keyTotal + value);
|
|
317
359
|
chartElement.setAttribute('data-total', chartTotal + value);
|
|
@@ -319,19 +361,19 @@ export const setCellData = function (chartElement, chartOuter, table) {
|
|
|
319
361
|
});
|
|
320
362
|
// Values for incremental charts i.e. histograms...
|
|
321
363
|
if (increment && incrementStart && incrementEnd) {
|
|
322
|
-
|
|
323
|
-
|
|
364
|
+
const firstCellValue = parseFloat(tr.querySelector('td:first-child').textContent.replace('£', '').replace('%', '').replace(',', ''));
|
|
365
|
+
const position = ((firstCellValue - incrementStart) / (incrementEnd - incrementStart)) * 100;
|
|
324
366
|
tr.setAttribute('style', `--position:${position}%;`);
|
|
325
367
|
}
|
|
326
368
|
});
|
|
327
369
|
};
|
|
328
370
|
export const setLongestLabel = function (chartOuter) {
|
|
329
|
-
|
|
330
|
-
|
|
371
|
+
const chartWrapper = chartOuter.querySelector('.chart__wrapper');
|
|
372
|
+
const table = chartOuter.querySelector('.chart table');
|
|
331
373
|
// set the longest label attr so that the bar chart knows what margin to set on the left
|
|
332
374
|
let longestLabel = '';
|
|
333
375
|
Array.from(table.querySelectorAll('tbody tr td:first-child')).forEach((td) => {
|
|
334
|
-
if (typeof td.textContent !=
|
|
376
|
+
if (typeof td.textContent != 'undefined' && td.textContent.length > longestLabel.length)
|
|
335
377
|
longestLabel = td.textContent;
|
|
336
378
|
});
|
|
337
379
|
chartWrapper.setAttribute('data-longest-label', longestLabel);
|
|
@@ -347,12 +389,16 @@ export const setLongestLabel = function (chartOuter) {
|
|
|
347
389
|
// #region CREATE function
|
|
348
390
|
export const createTypeSwitcher = function (chartElement, chartKey, chartOptions) {
|
|
349
391
|
const chartID = `chart-${Date.now() + (Math.floor(Math.random() * 100) + 1)}`;
|
|
350
|
-
const availableTypes = chartElement.hasAttribute('data-types')
|
|
392
|
+
const availableTypes = chartElement.hasAttribute('data-types')
|
|
393
|
+
? chartElement.getAttribute('data-types').split(',')
|
|
394
|
+
: [];
|
|
351
395
|
if (!chartElement.hasAttribute('data-types') && chartElement.hasAttribute('data-type'))
|
|
352
396
|
chartKey.insertAdjacentHTML('afterend', `<input type="radio" name="chart-type" value="${chartElement.getAttribute('data-type')}" checked="">`);
|
|
353
397
|
else if (chartElement.hasAttribute('data-types')) {
|
|
354
|
-
|
|
355
|
-
chartOptions.insertAdjacentHTML('beforebegin', availableTypes
|
|
398
|
+
const chartType = chartElement.hasAttribute('data-type') ? chartElement.getAttribute('data-type') : 'column';
|
|
399
|
+
chartOptions.insertAdjacentHTML('beforebegin', availableTypes
|
|
400
|
+
.map((type) => `<input type="radio" name="chart-type" value="${type}" id="${chartID}-${type}" ${chartType == type ? 'checked=""' : ''}>`)
|
|
401
|
+
.join(''));
|
|
356
402
|
chartOptions.insertAdjacentHTML('beforeend', availableTypes.map((type) => `<label for="${chartID}-${type}">${type}</label>`).join(''));
|
|
357
403
|
}
|
|
358
404
|
};
|
|
@@ -360,7 +406,7 @@ export const createChartKey = function (chartOuter, tableElement, chartKey) {
|
|
|
360
406
|
const chartID = `chart-${Date.now() + (Math.floor(Math.random() * 100) + 1)}`;
|
|
361
407
|
//const chartOuter = chartElement.querySelector('.chart__outer');
|
|
362
408
|
let previousInput;
|
|
363
|
-
|
|
409
|
+
const headings = Array.from(tableElement.querySelectorAll('thead th'));
|
|
364
410
|
headings.forEach((arrayElement, index) => {
|
|
365
411
|
if (index != 0) {
|
|
366
412
|
previousInput = createChartKeyItem(chartID, index, arrayElement.textContent, chartKey, chartOuter, previousInput);
|
|
@@ -372,7 +418,7 @@ export const createChartKey = function (chartOuter, tableElement, chartKey) {
|
|
|
372
418
|
return true;
|
|
373
419
|
};
|
|
374
420
|
function createChartKeyItem(chartID, index, text, chartKey, chartOuter, previousInput) {
|
|
375
|
-
|
|
421
|
+
const input = document.createElement('input');
|
|
376
422
|
input.setAttribute('name', `${chartID}-dataset-${index}`);
|
|
377
423
|
input.setAttribute('id', `${chartID}-dataset-${index}`);
|
|
378
424
|
input.setAttribute('checked', `checked`);
|
|
@@ -382,7 +428,7 @@ function createChartKeyItem(chartID, index, text, chartKey, chartOuter, previous
|
|
|
382
428
|
else
|
|
383
429
|
chartOuter.insertBefore(input, previousInput.nextSibling);
|
|
384
430
|
previousInput = input;
|
|
385
|
-
|
|
431
|
+
const label = document.createElement('label');
|
|
386
432
|
label.setAttribute('class', `key btn btn-action`);
|
|
387
433
|
label.setAttribute('for', `${chartID}-dataset-${index}`);
|
|
388
434
|
label.setAttribute('data-label', `${text}`);
|
|
@@ -394,8 +440,8 @@ export const createChartGuidelines = function (chartElement, chartOuter, chartGu
|
|
|
394
440
|
let { min, max, yaxis, increment, guidelines } = getChartData(chartElement, chartOuter);
|
|
395
441
|
if (guidelines.length)
|
|
396
442
|
yaxis = guidelines;
|
|
397
|
-
|
|
398
|
-
if (increment ==
|
|
443
|
+
const startDay = min;
|
|
444
|
+
if (increment == 'days') {
|
|
399
445
|
max = numberOfDays(min, max);
|
|
400
446
|
min = 0;
|
|
401
447
|
}
|
|
@@ -404,19 +450,19 @@ export const createChartGuidelines = function (chartElement, chartOuter, chartGu
|
|
|
404
450
|
chartGuidelines.setAttribute('class', 'chart__guidelines');
|
|
405
451
|
}
|
|
406
452
|
chartGuidelines.innerHTML = '';
|
|
407
|
-
for (
|
|
453
|
+
for (let i = 0; i < yaxis.length; i++) {
|
|
408
454
|
let value = parseFloat(yaxis[i].replace('£', '').replace('%', '').replace(',', ''));
|
|
409
|
-
if (increment ==
|
|
455
|
+
if (increment == 'days') {
|
|
410
456
|
value = numberOfDays(startDay, yaxis[i]) - 1;
|
|
411
457
|
}
|
|
412
|
-
|
|
458
|
+
const { axis } = getValues(value, min, max);
|
|
413
459
|
chartGuidelines.innerHTML += `<div class="guideline" style="--percent:${axis}%;"><span>${yaxis[i]}</span></div>`;
|
|
414
460
|
}
|
|
415
461
|
};
|
|
416
462
|
export const createChartYaxis = function (chartElement, chartOuter, chartYaxis) {
|
|
417
463
|
let { min, max, yaxis, increment } = getChartData(chartElement, chartOuter);
|
|
418
|
-
|
|
419
|
-
if (increment ==
|
|
464
|
+
const startDay = min;
|
|
465
|
+
if (increment == 'days') {
|
|
420
466
|
max = numberOfDays(min, max);
|
|
421
467
|
min = 0;
|
|
422
468
|
}
|
|
@@ -425,49 +471,49 @@ export const createChartYaxis = function (chartElement, chartOuter, chartYaxis)
|
|
|
425
471
|
chartYaxis.setAttribute('class', 'chart__yaxis');
|
|
426
472
|
}
|
|
427
473
|
chartYaxis.innerHTML = '';
|
|
428
|
-
for (
|
|
474
|
+
for (let i = 0; i < yaxis.length; i++) {
|
|
429
475
|
let value = parseFloat(yaxis[i].replace('£', '').replace('%', ''));
|
|
430
|
-
if (increment ==
|
|
476
|
+
if (increment == 'days') {
|
|
431
477
|
value = numberOfDays(startDay, yaxis[i]);
|
|
432
478
|
}
|
|
433
|
-
|
|
479
|
+
const { axis } = getValues(value, min, max);
|
|
434
480
|
chartYaxis.innerHTML += `<div class="axis__point" style="--percent:${axis}%;"><span>${yaxis[i]}</span></div>`;
|
|
435
481
|
}
|
|
436
482
|
};
|
|
437
483
|
export const createXaxis = function (chartElement, chartOuter, xaxis) {
|
|
438
484
|
const chart = chartOuter.querySelector('.chart');
|
|
439
485
|
let chartXaxis = chartOuter.querySelector('.chart__xaxis');
|
|
440
|
-
|
|
486
|
+
const { increment, start, end } = getChartData(chartElement, chartOuter);
|
|
441
487
|
if (!chartXaxis) {
|
|
442
488
|
chartXaxis = document.createElement('div');
|
|
443
489
|
chartXaxis.setAttribute('class', 'chart__xaxis');
|
|
444
490
|
}
|
|
445
491
|
if (increment && start && end) {
|
|
446
492
|
chartXaxis.innerHTML = '';
|
|
447
|
-
for (
|
|
448
|
-
|
|
449
|
-
|
|
493
|
+
for (let i = 0; i < xaxis.length; i++) {
|
|
494
|
+
const value = parseFloat(xaxis[i].replace('£', '').replace('%', ''));
|
|
495
|
+
const position = ((value - start) / (end - start)) * 100;
|
|
450
496
|
chartXaxis.innerHTML += `<div class="axis__point" style="--percent:${position}%;"><span>${xaxis[i]}</span></div>`;
|
|
451
497
|
}
|
|
452
498
|
}
|
|
453
499
|
chart.prepend(chartXaxis);
|
|
454
500
|
};
|
|
455
501
|
export const createLines = function (chartElement, chartOuter) {
|
|
456
|
-
|
|
457
|
-
|
|
502
|
+
const { min, max } = getChartData(chartElement, chartOuter);
|
|
503
|
+
const chartType = chartElement.getAttribute('data-type');
|
|
458
504
|
let returnString = '';
|
|
459
505
|
//let chartWrapper = chartOuter.querySelector('.chart__wrapper');
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
506
|
+
const linesWrapper = chartOuter.querySelector('.chart__lines');
|
|
507
|
+
const items = Array.from(chartOuter.querySelectorAll('tbody tr'));
|
|
508
|
+
const lines = [];
|
|
509
|
+
const linesCount = chartOuter.querySelectorAll('thead th:not(:first-child)').length;
|
|
510
|
+
const commands = [];
|
|
511
|
+
const animatelines = [];
|
|
512
|
+
const itemCount = items.length <= 1000 ? items.length : 1000;
|
|
467
513
|
let spacer = 200 / (itemCount - 1);
|
|
468
514
|
let spacerIndent = 0;
|
|
469
|
-
if (chartType ==
|
|
470
|
-
spacer = 200 /
|
|
515
|
+
if (chartType == 'combo') {
|
|
516
|
+
spacer = 200 / itemCount;
|
|
471
517
|
spacerIndent = spacer / 2;
|
|
472
518
|
}
|
|
473
519
|
// Creates the lines array from the fields array
|
|
@@ -480,13 +526,13 @@ export const createLines = function (chartElement, chartOuter) {
|
|
|
480
526
|
let counter = 0;
|
|
481
527
|
Array.from(chartOuter.querySelectorAll('tbody tr')).forEach((item) => {
|
|
482
528
|
const display = getComputedStyle(item).display;
|
|
483
|
-
if (display !=
|
|
529
|
+
if (display != 'none') {
|
|
484
530
|
Array.from(item.querySelectorAll('td:not(:first-child)')).forEach((cell, subindex) => {
|
|
485
531
|
if (!cell.classList.contains('chart__bar')) {
|
|
486
|
-
|
|
487
|
-
|
|
532
|
+
const value = cell.getAttribute('data-numeric');
|
|
533
|
+
const { axis } = getValues(value, min, max);
|
|
488
534
|
if (!Number.isNaN(axis)) {
|
|
489
|
-
lines[subindex] += `${commands[subindex]} ${
|
|
535
|
+
lines[subindex] += `${commands[subindex]} ${spacerIndent + spacer * counter} ${100 - axis} `;
|
|
490
536
|
animatelines[subindex] += `${commands[subindex]} ${spacer * counter} 100 `;
|
|
491
537
|
commands[subindex] = 'L';
|
|
492
538
|
}
|
|
@@ -508,10 +554,10 @@ export const createLines = function (chartElement, chartOuter) {
|
|
|
508
554
|
};
|
|
509
555
|
export const createPies = function (chartOuter) {
|
|
510
556
|
let returnString = '';
|
|
511
|
-
|
|
557
|
+
const chartInner = chartOuter.querySelector('.chart');
|
|
512
558
|
let pieWrapper = chartOuter.querySelector('.pies');
|
|
513
559
|
if (!pieWrapper) {
|
|
514
|
-
pieWrapper = document.createElement(
|
|
560
|
+
pieWrapper = document.createElement('div');
|
|
515
561
|
pieWrapper.setAttribute('class', 'pies');
|
|
516
562
|
chartInner.append(pieWrapper);
|
|
517
563
|
}
|
|
@@ -520,8 +566,8 @@ export const createPies = function (chartOuter) {
|
|
|
520
566
|
let tooltips = '';
|
|
521
567
|
let cumulativePercent = 0;
|
|
522
568
|
let total = 0;
|
|
523
|
-
|
|
524
|
-
|
|
569
|
+
const titleKey = item.querySelectorAll('td')[0];
|
|
570
|
+
const title = titleKey.innerHTML;
|
|
525
571
|
let pieCount = 0;
|
|
526
572
|
// Work out the total amount
|
|
527
573
|
Array.from(item.querySelectorAll('td')).forEach((td, subindex) => {
|
|
@@ -539,26 +585,26 @@ export const createPies = function (chartOuter) {
|
|
|
539
585
|
// Create the paths
|
|
540
586
|
Array.from(item.querySelectorAll('td')).forEach((td, subindex) => {
|
|
541
587
|
const display = getComputedStyle(td).display;
|
|
542
|
-
if (subindex != 0 && pieCount == 1 && display !=
|
|
588
|
+
if (subindex != 0 && pieCount == 1 && display != 'none') {
|
|
543
589
|
const pathData = `M 0 0 L 100 0 A 100 100 0 1 1 100 -0.01 L 0 0`;
|
|
544
590
|
paths += `<path d="${pathData}" style="${td.getAttribute('style')} --path-index: ${subindex};"></path>`;
|
|
545
591
|
tooltips += `<foreignObject x="-70" y="-70" width="140" height="140" ><div><span class="h5 mb-0"><span class="total d-block">${ucfirst(unsnake(title))}</span> ${ucfirst(unsnake(td.getAttribute('data-label')))}<br/> ${td.innerHTML}${td.hasAttribute('data-second') ? `${td.getAttribute('data-second-label')}: ${td.getAttribute('data-second')}` : ''}</span></div></foreignObject>`;
|
|
546
592
|
}
|
|
547
593
|
else if (subindex != 0) {
|
|
548
594
|
let value = td.getAttribute('data-numeric');
|
|
549
|
-
|
|
595
|
+
const hide = display == 'none' ? 'display: none;' : '';
|
|
550
596
|
value = value.replace('£', '');
|
|
551
597
|
value = value.replace('%', '');
|
|
552
598
|
value = value.replace(',', '');
|
|
553
599
|
value = Number.parseInt(value);
|
|
554
|
-
|
|
600
|
+
const percent = value / total;
|
|
555
601
|
const [startX, startY] = getCoordinatesForPercent(cumulativePercent, pieCount);
|
|
556
602
|
const [endX, endY] = getCoordinatesForPercent(cumulativePercent + percent, pieCount);
|
|
557
|
-
const largeArcFlag = percent > .5 ? 1 : 0; // if the slice is more than 50%, take the large arc (the long way around)
|
|
603
|
+
const largeArcFlag = percent > 0.5 ? 1 : 0; // if the slice is more than 50%, take the large arc (the long way around)
|
|
558
604
|
const pathData = [
|
|
559
605
|
`M 0 0`,
|
|
560
|
-
`L ${
|
|
561
|
-
`A 100 100 0 ${largeArcFlag} 1 ${
|
|
606
|
+
`L ${startX ? startX.toFixed(0) : 0} ${startY ? startY.toFixed(0) : 0}`, // Move
|
|
607
|
+
`A 100 100 0 ${largeArcFlag} 1 ${endX ? endX.toFixed(0) : 0} ${endY ? endY.toFixed(0) : 0}`, // Arc
|
|
562
608
|
`L 0 0`, // Line
|
|
563
609
|
].join(' ');
|
|
564
610
|
paths += `<path d="${pathData}" style="${td.getAttribute('style')} --path-index: ${subindex};${hide}"></path>`;
|
|
@@ -578,24 +624,24 @@ export const createSlope = function (chartElement, chartOuter) {
|
|
|
578
624
|
let totalY = 0;
|
|
579
625
|
let totalXY = 0;
|
|
580
626
|
let totalXsquared = 0;
|
|
581
|
-
|
|
582
|
-
|
|
627
|
+
const { min, max, start, end, slope, yInt } = getChartData(chartElement, chartOuter);
|
|
628
|
+
const chart = chartOuter.querySelector('.chart');
|
|
583
629
|
let slopeWrapper = chartOuter.querySelector('.slope');
|
|
584
630
|
if (!slopeWrapper) {
|
|
585
|
-
slopeWrapper = document.createElement(
|
|
631
|
+
slopeWrapper = document.createElement('div');
|
|
586
632
|
slopeWrapper.setAttribute('class', 'slope');
|
|
587
633
|
chart.prepend(slopeWrapper);
|
|
588
634
|
}
|
|
589
635
|
Array.from(chart.querySelectorAll('tbody tr')).forEach((tr) => {
|
|
590
636
|
const display = getComputedStyle(tr).display;
|
|
591
|
-
if (display !=
|
|
592
|
-
|
|
637
|
+
if (display != 'none') {
|
|
638
|
+
const x = parseFloat(tr.querySelector('td:first-child').textContent);
|
|
593
639
|
let y = 0;
|
|
594
640
|
Array.from(tr.querySelectorAll('td:not(:first-child)')).forEach((td) => {
|
|
595
641
|
y += parseFloat(td.getAttribute('data-numeric'));
|
|
596
642
|
});
|
|
597
|
-
|
|
598
|
-
|
|
643
|
+
const xy = x * y;
|
|
644
|
+
const xSquared = x * x;
|
|
599
645
|
totalX += x;
|
|
600
646
|
totalY += y;
|
|
601
647
|
totalXY += xy;
|
|
@@ -604,12 +650,12 @@ export const createSlope = function (chartElement, chartOuter) {
|
|
|
604
650
|
}
|
|
605
651
|
});
|
|
606
652
|
// Least squares method (https://www.youtube.com/watch?v=P8hT5nDai6A)
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
653
|
+
const m = slope ? parseFloat(slope) : (n * totalXY - totalX * totalY) / (n * totalXsquared - totalX * totalX); // Slope
|
|
654
|
+
const b = yInt ? parseFloat(yInt) : (totalY - m * totalX) / n; // Y intercept
|
|
655
|
+
const firstY = m * parseFloat(start) + b;
|
|
656
|
+
const lastY = m * parseFloat(end) + b;
|
|
657
|
+
const { percent: firstYPercent } = getValues(firstY, min, max);
|
|
658
|
+
const { percent: lastYPercent } = getValues(lastY, min, max);
|
|
613
659
|
slopeWrapper.innerHTML = `<svg viewBox="0 0 200 100" class="line" preserveAspectRatio="none"><path fill="none" d="M 0 ${100 - firstYPercent} L 200 ${100 - lastYPercent}" style="--path: path('M 0 100 L 200 100');"></path></svg>`;
|
|
614
660
|
};
|
|
615
661
|
function createKeyTotals(chartElement, chartOuter) {
|
|
@@ -627,17 +673,21 @@ function createKeyTotals(chartElement, chartOuter) {
|
|
|
627
673
|
Array.from(chartOuter.querySelectorAll('.chart__key .key[data-label]')).forEach((key) => {
|
|
628
674
|
if (key.querySelector('.chart__total'))
|
|
629
675
|
key.querySelector('.chart__total').remove();
|
|
630
|
-
|
|
676
|
+
const label = key.getAttribute('data-label');
|
|
631
677
|
let keyTotal = 0;
|
|
632
678
|
Array.from(chartOuter.querySelectorAll(`tbody td[data-label="${label}"]`)).forEach((td) => {
|
|
633
679
|
const value = Number.parseFloat(td.getAttribute('data-numeric'));
|
|
634
680
|
keyTotal += value;
|
|
635
681
|
});
|
|
636
|
-
|
|
682
|
+
const keyPercent = Math.round((keyTotal / chartTotal) * 100);
|
|
637
683
|
if (chartElement.hasAttribute('data-currency')) {
|
|
638
|
-
if (chartElement.getAttribute('data-currency') ==
|
|
684
|
+
if (chartElement.getAttribute('data-currency') == 'GBP') {
|
|
639
685
|
// @ts-ignore
|
|
640
|
-
keyTotal = new Intl.NumberFormat('en-GB', {
|
|
686
|
+
keyTotal = new Intl.NumberFormat('en-GB', {
|
|
687
|
+
style: 'currency',
|
|
688
|
+
currency: 'GBP',
|
|
689
|
+
trailingZeroDisplay: 'stripIfInteger',
|
|
690
|
+
}).format(keyTotal);
|
|
641
691
|
}
|
|
642
692
|
}
|
|
643
693
|
else if (chartElement.hasAttribute('data-total-format')) {
|