@hortonstudio/main 1.2.4 → 1.2.6
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/attributes-master/.changeset/README.md +8 -0
- package/attributes-master/.changeset/config.json +11 -0
- package/attributes-master/.gitattributes +2 -0
- package/attributes-master/.github/ISSUE_TEMPLATE/bug_report.md +42 -0
- package/attributes-master/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/attributes-master/.github/workflows/ci.yml +66 -0
- package/attributes-master/.github/workflows/release.yml +40 -0
- package/attributes-master/.prettierignore +3 -0
- package/attributes-master/.prettierrc +8 -0
- package/attributes-master/.vscode/extensions.json +3 -0
- package/attributes-master/.vscode/settings.json +7 -0
- package/attributes-master/CONTRIBUTING.md +72 -0
- package/attributes-master/LICENSE.md +201 -0
- package/attributes-master/README.md +31 -0
- package/attributes-master/eslint.config.js +3 -0
- package/attributes-master/package.json +34 -0
- package/attributes-master/packages/accordion/CHANGELOG.md +89 -0
- package/attributes-master/packages/accordion/README.md +31 -0
- package/attributes-master/packages/accordion/package.json +25 -0
- package/attributes-master/packages/accordion/src/actions/a11y.ts +39 -0
- package/attributes-master/packages/accordion/src/actions/classes.ts +27 -0
- package/attributes-master/packages/accordion/src/actions/content.ts +42 -0
- package/attributes-master/packages/accordion/src/actions/list.ts +36 -0
- package/attributes-master/packages/accordion/src/actions/query.ts +27 -0
- package/attributes-master/packages/accordion/src/actions/settings.ts +61 -0
- package/attributes-master/packages/accordion/src/factory.ts +145 -0
- package/attributes-master/packages/accordion/src/index.ts +3 -0
- package/attributes-master/packages/accordion/src/init.ts +37 -0
- package/attributes-master/packages/accordion/src/utils/constants.ts +62 -0
- package/attributes-master/packages/accordion/src/utils/helpers.ts +5 -0
- package/attributes-master/packages/accordion/src/utils/selectors.ts +12 -0
- package/attributes-master/packages/accordion/src/utils/types.ts +23 -0
- package/attributes-master/packages/accordion/tsconfig.json +3 -0
- package/attributes-master/packages/attributes/CHANGELOG.md +564 -0
- package/attributes-master/packages/attributes/README.md +66 -0
- package/attributes-master/packages/attributes/bin/build.ts +107 -0
- package/attributes-master/packages/attributes/bin/live-reload.js +1 -0
- package/attributes-master/packages/attributes/package.json +77 -0
- package/attributes-master/packages/attributes/playwright.config.ts +89 -0
- package/attributes-master/packages/attributes/src/attributes.ts +153 -0
- package/attributes-master/packages/attributes/src/load.ts +125 -0
- package/attributes-master/packages/attributes/tests/accordion.spec.ts +137 -0
- package/attributes-master/packages/attributes/tests/codehighlight.spec.ts +23 -0
- package/attributes-master/packages/attributes/tests/combobox.spec.ts +321 -0
- package/attributes-master/packages/attributes/tests/copyclip.spec.ts +19 -0
- package/attributes-master/packages/attributes/tests/displayvalues.spec.ts +48 -0
- package/attributes-master/packages/attributes/tests/favcustom.spec.ts +23 -0
- package/attributes-master/packages/attributes/tests/inject.spec.ts +40 -0
- package/attributes-master/packages/attributes/tests/inputactive.spec.ts +77 -0
- package/attributes-master/packages/attributes/tests/inputcounter.spec.ts +83 -0
- package/attributes-master/packages/attributes/tests/list.spec.ts +800 -0
- package/attributes-master/packages/attributes/tests/mirrorclick.spec.ts +22 -0
- package/attributes-master/packages/attributes/tests/mirrorinput.spec.ts +37 -0
- package/attributes-master/packages/attributes/tests/modal.spec.ts +34 -0
- package/attributes-master/packages/attributes/tests/numbercount.spec.ts +40 -0
- package/attributes-master/packages/attributes/tests/readtime.spec.ts +19 -0
- package/attributes-master/packages/attributes/tests/selectcustom.spec.ts +51 -0
- package/attributes-master/packages/attributes/tests/socialshare.spec.ts +54 -0
- package/attributes-master/packages/attributes/tests/starrating.spec.ts +79 -0
- package/attributes-master/packages/attributes/tests/toc.spec.ts +38 -0
- package/attributes-master/packages/attributes/tests/utils/index.ts +16 -0
- package/attributes-master/packages/attributes/tsconfig.json +6 -0
- package/attributes-master/packages/autovideo/CHANGELOG.md +182 -0
- package/attributes-master/packages/autovideo/README.md +31 -0
- package/attributes-master/packages/autovideo/package.json +22 -0
- package/attributes-master/packages/autovideo/src/index.ts +3 -0
- package/attributes-master/packages/autovideo/src/init.ts +52 -0
- package/attributes-master/packages/autovideo/src/types.ts +5 -0
- package/attributes-master/packages/autovideo/src/utils/constants.ts +4 -0
- package/attributes-master/packages/autovideo/tsconfig.json +3 -0
- package/attributes-master/packages/codehighlight/CHANGELOG.md +185 -0
- package/attributes-master/packages/codehighlight/README.md +27 -0
- package/attributes-master/packages/codehighlight/package.json +23 -0
- package/attributes-master/packages/codehighlight/src/actions/import.ts +50 -0
- package/attributes-master/packages/codehighlight/src/index.ts +3 -0
- package/attributes-master/packages/codehighlight/src/init.ts +53 -0
- package/attributes-master/packages/codehighlight/src/utils/constants.ts +24 -0
- package/attributes-master/packages/codehighlight/src/utils/selectors.ts +5 -0
- package/attributes-master/packages/codehighlight/src/utils/themes.ts +202 -0
- package/attributes-master/packages/codehighlight/tsconfig.json +3 -0
- package/attributes-master/packages/combobox/CHANGELOG.md +99 -0
- package/attributes-master/packages/combobox/README.md +27 -0
- package/attributes-master/packages/combobox/package.json +23 -0
- package/attributes-master/packages/combobox/src/actions/a11y.ts +29 -0
- package/attributes-master/packages/combobox/src/actions/body/index.ts +12 -0
- package/attributes-master/packages/combobox/src/actions/clearDropdown/index.ts +37 -0
- package/attributes-master/packages/combobox/src/actions/dropdownList/index.ts +220 -0
- package/attributes-master/packages/combobox/src/actions/dropdownToggle/index.ts +34 -0
- package/attributes-master/packages/combobox/src/actions/events.ts +75 -0
- package/attributes-master/packages/combobox/src/actions/input/index.ts +235 -0
- package/attributes-master/packages/combobox/src/actions/observe.ts +158 -0
- package/attributes-master/packages/combobox/src/actions/populate.ts +97 -0
- package/attributes-master/packages/combobox/src/actions/selectElement/index.ts +23 -0
- package/attributes-master/packages/combobox/src/actions/settings.ts +134 -0
- package/attributes-master/packages/combobox/src/actions/state.ts +34 -0
- package/attributes-master/packages/combobox/src/index.ts +3 -0
- package/attributes-master/packages/combobox/src/init.ts +52 -0
- package/attributes-master/packages/combobox/src/utils/constants.ts +48 -0
- package/attributes-master/packages/combobox/src/utils/dropdowns.ts +120 -0
- package/attributes-master/packages/combobox/src/utils/index.ts +1 -0
- package/attributes-master/packages/combobox/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/combobox/src/utils/types.ts +14 -0
- package/attributes-master/packages/combobox/tsconfig.json +3 -0
- package/attributes-master/packages/copyclip/CHANGELOG.md +213 -0
- package/attributes-master/packages/copyclip/README.md +27 -0
- package/attributes-master/packages/copyclip/package.json +23 -0
- package/attributes-master/packages/copyclip/src/factory.ts +67 -0
- package/attributes-master/packages/copyclip/src/index.ts +3 -0
- package/attributes-master/packages/copyclip/src/init.ts +68 -0
- package/attributes-master/packages/copyclip/src/utils/constants.ts +40 -0
- package/attributes-master/packages/copyclip/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/copyclip/tsconfig.json +3 -0
- package/attributes-master/packages/displayvalues/CHANGELOG.md +164 -0
- package/attributes-master/packages/displayvalues/README.md +27 -0
- package/attributes-master/packages/displayvalues/package.json +22 -0
- package/attributes-master/packages/displayvalues/src/actions/collect.ts +17 -0
- package/attributes-master/packages/displayvalues/src/actions/events.ts +22 -0
- package/attributes-master/packages/displayvalues/src/actions/sync.ts +23 -0
- package/attributes-master/packages/displayvalues/src/index.ts +3 -0
- package/attributes-master/packages/displayvalues/src/init.ts +31 -0
- package/attributes-master/packages/displayvalues/src/utils/constants.ts +20 -0
- package/attributes-master/packages/displayvalues/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/displayvalues/src/utils/stores.ts +3 -0
- package/attributes-master/packages/displayvalues/tsconfig.json +3 -0
- package/attributes-master/packages/docs/CHANGELOG.md +108 -0
- package/attributes-master/packages/docs/README.md +3 -0
- package/attributes-master/packages/docs/bin/build.js +92 -0
- package/attributes-master/packages/docs/bin/live-reload.js +1 -0
- package/attributes-master/packages/docs/package.json +40 -0
- package/attributes-master/packages/docs/src/copy.ts +260 -0
- package/attributes-master/packages/docs/src/x-ray.ts +377 -0
- package/attributes-master/packages/docs/tsconfig.json +3 -0
- package/attributes-master/packages/favcustom/CHANGELOG.md +194 -0
- package/attributes-master/packages/favcustom/README.md +27 -0
- package/attributes-master/packages/favcustom/package.json +22 -0
- package/attributes-master/packages/favcustom/src/index.ts +3 -0
- package/attributes-master/packages/favcustom/src/init.ts +30 -0
- package/attributes-master/packages/favcustom/src/utils/constants.ts +10 -0
- package/attributes-master/packages/favcustom/src/utils/selectors.ts +5 -0
- package/attributes-master/packages/favcustom/tsconfig.json +3 -0
- package/attributes-master/packages/formsubmit/CHANGELOG.md +161 -0
- package/attributes-master/packages/formsubmit/README.md +51 -0
- package/attributes-master/packages/formsubmit/package.json +22 -0
- package/attributes-master/packages/formsubmit/src/actions/redirect.ts +9 -0
- package/attributes-master/packages/formsubmit/src/actions/reset.ts +49 -0
- package/attributes-master/packages/formsubmit/src/actions/submit.ts +34 -0
- package/attributes-master/packages/formsubmit/src/components/Form.ts +231 -0
- package/attributes-master/packages/formsubmit/src/factory.ts +62 -0
- package/attributes-master/packages/formsubmit/src/index.ts +3 -0
- package/attributes-master/packages/formsubmit/src/init.ts +24 -0
- package/attributes-master/packages/formsubmit/src/utils/attributes.ts +19 -0
- package/attributes-master/packages/formsubmit/src/utils/constants.ts +89 -0
- package/attributes-master/packages/formsubmit/src/utils/dom.ts +76 -0
- package/attributes-master/packages/formsubmit/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/formsubmit/src/utils/types.ts +7 -0
- package/attributes-master/packages/formsubmit/tsconfig.json +3 -0
- package/attributes-master/packages/inject/CHANGELOG.md +117 -0
- package/attributes-master/packages/inject/README.md +60 -0
- package/attributes-master/packages/inject/package.json +22 -0
- package/attributes-master/packages/inject/src/actions/collect.ts +125 -0
- package/attributes-master/packages/inject/src/actions/css.ts +27 -0
- package/attributes-master/packages/inject/src/actions/prefetch.ts +44 -0
- package/attributes-master/packages/inject/src/factory.ts +123 -0
- package/attributes-master/packages/inject/src/index.ts +3 -0
- package/attributes-master/packages/inject/src/init.ts +22 -0
- package/attributes-master/packages/inject/src/utils/constants.ts +89 -0
- package/attributes-master/packages/inject/src/utils/helpers.ts +36 -0
- package/attributes-master/packages/inject/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/inject/src/utils/types.ts +16 -0
- package/attributes-master/packages/inject/tsconfig.json +3 -0
- package/attributes-master/packages/inputactive/CHANGELOG.md +58 -0
- package/attributes-master/packages/inputactive/README.md +25 -0
- package/attributes-master/packages/inputactive/package.json +22 -0
- package/attributes-master/packages/inputactive/src/actions/classes.ts +43 -0
- package/attributes-master/packages/inputactive/src/factory.ts +24 -0
- package/attributes-master/packages/inputactive/src/index.ts +3 -0
- package/attributes-master/packages/inputactive/src/init.ts +18 -0
- package/attributes-master/packages/inputactive/src/utils/constants.ts +13 -0
- package/attributes-master/packages/inputactive/src/utils/selectors.ts +5 -0
- package/attributes-master/packages/inputactive/tsconfig.json +3 -0
- package/attributes-master/packages/inputcounter/CHANGELOG.md +110 -0
- package/attributes-master/packages/inputcounter/README.md +25 -0
- package/attributes-master/packages/inputcounter/package.json +22 -0
- package/attributes-master/packages/inputcounter/src/actions/a11y.ts +23 -0
- package/attributes-master/packages/inputcounter/src/actions/buttons.ts +61 -0
- package/attributes-master/packages/inputcounter/src/actions/input.ts +31 -0
- package/attributes-master/packages/inputcounter/src/actions/style.ts +12 -0
- package/attributes-master/packages/inputcounter/src/factory.ts +51 -0
- package/attributes-master/packages/inputcounter/src/index.ts +3 -0
- package/attributes-master/packages/inputcounter/src/init.ts +22 -0
- package/attributes-master/packages/inputcounter/src/utils/constants.ts +59 -0
- package/attributes-master/packages/inputcounter/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/inputcounter/tsconfig.json +3 -0
- package/attributes-master/packages/list/CHANGELOG.md +185 -0
- package/attributes-master/packages/list/README.md +331 -0
- package/attributes-master/packages/list/package.json +37 -0
- package/attributes-master/packages/list/src/combine/index.ts +38 -0
- package/attributes-master/packages/list/src/components/List.ts +861 -0
- package/attributes-master/packages/list/src/components/ListItem.ts +229 -0
- package/attributes-master/packages/list/src/components/index.ts +2 -0
- package/attributes-master/packages/list/src/factory.ts +130 -0
- package/attributes-master/packages/list/src/filter/dynamic/conditions.ts +639 -0
- package/attributes-master/packages/list/src/filter/dynamic/groups.ts +221 -0
- package/attributes-master/packages/list/src/filter/dynamic/index.ts +119 -0
- package/attributes-master/packages/list/src/filter/dynamic/utils.ts +44 -0
- package/attributes-master/packages/list/src/filter/elements.ts +93 -0
- package/attributes-master/packages/list/src/filter/filter.ts +118 -0
- package/attributes-master/packages/list/src/filter/filter.worker.ts +152 -0
- package/attributes-master/packages/list/src/filter/index.ts +94 -0
- package/attributes-master/packages/list/src/filter/standard/conditions.ts +123 -0
- package/attributes-master/packages/list/src/filter/standard/facets.ts +253 -0
- package/attributes-master/packages/list/src/filter/standard/index.ts +176 -0
- package/attributes-master/packages/list/src/filter/standard/query.ts +111 -0
- package/attributes-master/packages/list/src/filter/tags.ts +314 -0
- package/attributes-master/packages/list/src/filter/types.ts +62 -0
- package/attributes-master/packages/list/src/filter/utils.ts +126 -0
- package/attributes-master/packages/list/src/index.ts +4 -0
- package/attributes-master/packages/list/src/init.ts +38 -0
- package/attributes-master/packages/list/src/load/all.ts +27 -0
- package/attributes-master/packages/list/src/load/elements.ts +39 -0
- package/attributes-master/packages/list/src/load/index.ts +63 -0
- package/attributes-master/packages/list/src/load/infinite.ts +79 -0
- package/attributes-master/packages/list/src/load/load.ts +191 -0
- package/attributes-master/packages/list/src/load/more.ts +97 -0
- package/attributes-master/packages/list/src/load/pagination.ts +402 -0
- package/attributes-master/packages/list/src/nest/index.ts +198 -0
- package/attributes-master/packages/list/src/prevnext/index.ts +98 -0
- package/attributes-master/packages/list/src/select/index.ts +56 -0
- package/attributes-master/packages/list/src/slider/index.ts +62 -0
- package/attributes-master/packages/list/src/sort/buttons.ts +96 -0
- package/attributes-master/packages/list/src/sort/dropdown.ts +179 -0
- package/attributes-master/packages/list/src/sort/index.ts +81 -0
- package/attributes-master/packages/list/src/sort/query.ts +63 -0
- package/attributes-master/packages/list/src/sort/select.ts +67 -0
- package/attributes-master/packages/list/src/sort/sort.ts +79 -0
- package/attributes-master/packages/list/src/sort/types.ts +28 -0
- package/attributes-master/packages/list/src/static/index.ts +73 -0
- package/attributes-master/packages/list/src/tabs/index.ts +97 -0
- package/attributes-master/packages/list/src/utils/constants.ts +728 -0
- package/attributes-master/packages/list/src/utils/dom.ts +108 -0
- package/attributes-master/packages/list/src/utils/pagination.ts +14 -0
- package/attributes-master/packages/list/src/utils/selectors.ts +18 -0
- package/attributes-master/packages/list/src/utils/store.ts +5 -0
- package/attributes-master/packages/list/tsconfig.json +3 -0
- package/attributes-master/packages/mirrorclick/CHANGELOG.md +171 -0
- package/attributes-master/packages/mirrorclick/README.md +25 -0
- package/attributes-master/packages/mirrorclick/package.json +22 -0
- package/attributes-master/packages/mirrorclick/src/index.ts +3 -0
- package/attributes-master/packages/mirrorclick/src/init.ts +35 -0
- package/attributes-master/packages/mirrorclick/src/utils/constants.ts +20 -0
- package/attributes-master/packages/mirrorclick/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/mirrorclick/tsconfig.json +3 -0
- package/attributes-master/packages/mirrorinput/CHANGELOG.md +172 -0
- package/attributes-master/packages/mirrorinput/README.md +25 -0
- package/attributes-master/packages/mirrorinput/package.json +22 -0
- package/attributes-master/packages/mirrorinput/src/index.ts +3 -0
- package/attributes-master/packages/mirrorinput/src/init.ts +48 -0
- package/attributes-master/packages/mirrorinput/src/utils/constants.ts +15 -0
- package/attributes-master/packages/mirrorinput/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/mirrorinput/tsconfig.json +3 -0
- package/attributes-master/packages/modal/CHANGELOG.md +94 -0
- package/attributes-master/packages/modal/README.md +29 -0
- package/attributes-master/packages/modal/package.json +23 -0
- package/attributes-master/packages/modal/src/actions/a11y.ts +46 -0
- package/attributes-master/packages/modal/src/actions/modal.ts +164 -0
- package/attributes-master/packages/modal/src/actions/settings.ts +21 -0
- package/attributes-master/packages/modal/src/factory.ts +26 -0
- package/attributes-master/packages/modal/src/index.ts +3 -0
- package/attributes-master/packages/modal/src/init.ts +22 -0
- package/attributes-master/packages/modal/src/utils/constants.ts +54 -0
- package/attributes-master/packages/modal/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/modal/src/utils/types.ts +12 -0
- package/attributes-master/packages/modal/tsconfig.json +3 -0
- package/attributes-master/packages/numbercount/CHANGELOG.md +90 -0
- package/attributes-master/packages/numbercount/README.md +27 -0
- package/attributes-master/packages/numbercount/package.json +23 -0
- package/attributes-master/packages/numbercount/src/actions/a11y.ts +26 -0
- package/attributes-master/packages/numbercount/src/actions/animate.ts +43 -0
- package/attributes-master/packages/numbercount/src/actions/observe.ts +44 -0
- package/attributes-master/packages/numbercount/src/factory.ts +31 -0
- package/attributes-master/packages/numbercount/src/index.ts +3 -0
- package/attributes-master/packages/numbercount/src/init.ts +22 -0
- package/attributes-master/packages/numbercount/src/utils/constants.ts +40 -0
- package/attributes-master/packages/numbercount/src/utils/helpers.ts +31 -0
- package/attributes-master/packages/numbercount/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/numbercount/tsconfig.json +3 -0
- package/attributes-master/packages/queryparam/CHANGELOG.md +118 -0
- package/attributes-master/packages/queryparam/README.md +25 -0
- package/attributes-master/packages/queryparam/package.json +22 -0
- package/attributes-master/packages/queryparam/src/factory.ts +51 -0
- package/attributes-master/packages/queryparam/src/index.ts +3 -0
- package/attributes-master/packages/queryparam/src/init.ts +40 -0
- package/attributes-master/packages/queryparam/src/utils/constants.ts +18 -0
- package/attributes-master/packages/queryparam/src/utils/selectors.ts +5 -0
- package/attributes-master/packages/queryparam/tsconfig.json +3 -0
- package/attributes-master/packages/rangeslider/CHANGELOG.md +236 -0
- package/attributes-master/packages/rangeslider/README.md +95 -0
- package/attributes-master/packages/rangeslider/package.json +23 -0
- package/attributes-master/packages/rangeslider/src/actions/a11y.ts +21 -0
- package/attributes-master/packages/rangeslider/src/actions/events.ts +9 -0
- package/attributes-master/packages/rangeslider/src/actions/settings.ts +97 -0
- package/attributes-master/packages/rangeslider/src/actions/styles.ts +10 -0
- package/attributes-master/packages/rangeslider/src/actions/values.ts +47 -0
- package/attributes-master/packages/rangeslider/src/components/Fill.ts +70 -0
- package/attributes-master/packages/rangeslider/src/components/Handle.ts +281 -0
- package/attributes-master/packages/rangeslider/src/factory.ts +100 -0
- package/attributes-master/packages/rangeslider/src/index.ts +3 -0
- package/attributes-master/packages/rangeslider/src/init.ts +194 -0
- package/attributes-master/packages/rangeslider/src/utils/constants.ts +87 -0
- package/attributes-master/packages/rangeslider/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/rangeslider/src/utils/types.ts +6 -0
- package/attributes-master/packages/rangeslider/tsconfig.json +3 -0
- package/attributes-master/packages/readtime/CHANGELOG.md +108 -0
- package/attributes-master/packages/readtime/README.md +25 -0
- package/attributes-master/packages/readtime/package.json +22 -0
- package/attributes-master/packages/readtime/src/factory.ts +21 -0
- package/attributes-master/packages/readtime/src/index.ts +3 -0
- package/attributes-master/packages/readtime/src/init.ts +19 -0
- package/attributes-master/packages/readtime/src/utils/constants.ts +33 -0
- package/attributes-master/packages/readtime/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/readtime/tsconfig.json +3 -0
- package/attributes-master/packages/removequery/CHANGELOG.md +8 -0
- package/attributes-master/packages/removequery/README.md +25 -0
- package/attributes-master/packages/removequery/package.json +22 -0
- package/attributes-master/packages/removequery/src/index.ts +3 -0
- package/attributes-master/packages/removequery/src/init.ts +18 -0
- package/attributes-master/packages/removequery/src/utils/constants.ts +5 -0
- package/attributes-master/packages/removequery/tsconfig.json +3 -0
- package/attributes-master/packages/scrolldisable/CHANGELOG.md +164 -0
- package/attributes-master/packages/scrolldisable/README.md +29 -0
- package/attributes-master/packages/scrolldisable/package.json +27 -0
- package/attributes-master/packages/scrolldisable/src/click.ts +40 -0
- package/attributes-master/packages/scrolldisable/src/display.ts +117 -0
- package/attributes-master/packages/scrolldisable/src/index.ts +3 -0
- package/attributes-master/packages/scrolldisable/src/init.ts +36 -0
- package/attributes-master/packages/scrolldisable/src/scroll.ts +63 -0
- package/attributes-master/packages/scrolldisable/src/utils/constants.ts +56 -0
- package/attributes-master/packages/scrolldisable/src/utils/selectors.ts +6 -0
- package/attributes-master/packages/scrolldisable/tsconfig.json +3 -0
- package/attributes-master/packages/selectcustom/CHANGELOG.md +242 -0
- package/attributes-master/packages/selectcustom/README.md +25 -0
- package/attributes-master/packages/selectcustom/package.json +23 -0
- package/attributes-master/packages/selectcustom/src/actions/a11y.ts +29 -0
- package/attributes-master/packages/selectcustom/src/actions/events.ts +159 -0
- package/attributes-master/packages/selectcustom/src/actions/observe.ts +83 -0
- package/attributes-master/packages/selectcustom/src/actions/populate.ts +67 -0
- package/attributes-master/packages/selectcustom/src/actions/settings.ts +68 -0
- package/attributes-master/packages/selectcustom/src/actions/state.ts +41 -0
- package/attributes-master/packages/selectcustom/src/index.ts +3 -0
- package/attributes-master/packages/selectcustom/src/init.ts +51 -0
- package/attributes-master/packages/selectcustom/src/utils/constants.ts +34 -0
- package/attributes-master/packages/selectcustom/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/selectcustom/src/utils/types.ts +14 -0
- package/attributes-master/packages/selectcustom/tsconfig.json +3 -0
- package/attributes-master/packages/sliderdots/CHANGELOG.md +220 -0
- package/attributes-master/packages/sliderdots/README.md +27 -0
- package/attributes-master/packages/sliderdots/package.json +22 -0
- package/attributes-master/packages/sliderdots/src/actions/events.ts +26 -0
- package/attributes-master/packages/sliderdots/src/actions/observe.ts +40 -0
- package/attributes-master/packages/sliderdots/src/actions/populate.ts +46 -0
- package/attributes-master/packages/sliderdots/src/actions/sync.ts +28 -0
- package/attributes-master/packages/sliderdots/src/actions/wait.ts +28 -0
- package/attributes-master/packages/sliderdots/src/factory.ts +57 -0
- package/attributes-master/packages/sliderdots/src/index.ts +3 -0
- package/attributes-master/packages/sliderdots/src/init.ts +30 -0
- package/attributes-master/packages/sliderdots/src/utils/constants.ts +33 -0
- package/attributes-master/packages/sliderdots/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/sliderdots/src/utils/types.ts +7 -0
- package/attributes-master/packages/sliderdots/tsconfig.json +3 -0
- package/attributes-master/packages/smartlightbox/CHANGELOG.md +203 -0
- package/attributes-master/packages/smartlightbox/README.md +25 -0
- package/attributes-master/packages/smartlightbox/package.json +22 -0
- package/attributes-master/packages/smartlightbox/src/actions/collect.ts +15 -0
- package/attributes-master/packages/smartlightbox/src/actions/move.ts +25 -0
- package/attributes-master/packages/smartlightbox/src/index.ts +3 -0
- package/attributes-master/packages/smartlightbox/src/init.ts +61 -0
- package/attributes-master/packages/smartlightbox/src/utils/constants.ts +31 -0
- package/attributes-master/packages/smartlightbox/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/smartlightbox/tsconfig.json +3 -0
- package/attributes-master/packages/socialshare/CHANGELOG.md +170 -0
- package/attributes-master/packages/socialshare/README.md +25 -0
- package/attributes-master/packages/socialshare/package.json +25 -0
- package/attributes-master/packages/socialshare/src/actions/collect.ts +93 -0
- package/attributes-master/packages/socialshare/src/actions/share.ts +91 -0
- package/attributes-master/packages/socialshare/src/actions/trigger.ts +46 -0
- package/attributes-master/packages/socialshare/src/factory.ts +149 -0
- package/attributes-master/packages/socialshare/src/index.ts +3 -0
- package/attributes-master/packages/socialshare/src/init.ts +35 -0
- package/attributes-master/packages/socialshare/src/utils/constants.ts +94 -0
- package/attributes-master/packages/socialshare/src/utils/dom.ts +8 -0
- package/attributes-master/packages/socialshare/src/utils/selectors.ts +6 -0
- package/attributes-master/packages/socialshare/src/utils/stores.ts +10 -0
- package/attributes-master/packages/socialshare/src/utils/types.ts +34 -0
- package/attributes-master/packages/socialshare/tsconfig.json +3 -0
- package/attributes-master/packages/starrating/CHANGELOG.md +70 -0
- package/attributes-master/packages/starrating/README.md +25 -0
- package/attributes-master/packages/starrating/package.json +22 -0
- package/attributes-master/packages/starrating/src/actions/classes.ts +41 -0
- package/attributes-master/packages/starrating/src/actions/events.ts +80 -0
- package/attributes-master/packages/starrating/src/factory.ts +24 -0
- package/attributes-master/packages/starrating/src/index.ts +3 -0
- package/attributes-master/packages/starrating/src/init.ts +24 -0
- package/attributes-master/packages/starrating/src/utils/constants.ts +20 -0
- package/attributes-master/packages/starrating/src/utils/helpers.ts +63 -0
- package/attributes-master/packages/starrating/src/utils/selectors.ts +9 -0
- package/attributes-master/packages/starrating/tsconfig.json +3 -0
- package/attributes-master/packages/template/README.md +25 -0
- package/attributes-master/packages/template/package.json +22 -0
- package/attributes-master/packages/template/src/actions/console.ts +4 -0
- package/attributes-master/packages/template/src/index.ts +3 -0
- package/attributes-master/packages/template/src/init.ts +14 -0
- package/attributes-master/packages/template/src/utils/constants.ts +18 -0
- package/attributes-master/packages/template/src/utils/selectors.ts +5 -0
- package/attributes-master/packages/template/tsconfig.json +3 -0
- package/attributes-master/packages/toc/CHANGELOG.md +192 -0
- package/attributes-master/packages/toc/README.md +25 -0
- package/attributes-master/packages/toc/package.json +23 -0
- package/attributes-master/packages/toc/src/actions/collect.ts +136 -0
- package/attributes-master/packages/toc/src/actions/create.ts +44 -0
- package/attributes-master/packages/toc/src/actions/events.ts +29 -0
- package/attributes-master/packages/toc/src/actions/observe.ts +31 -0
- package/attributes-master/packages/toc/src/actions/populate.ts +68 -0
- package/attributes-master/packages/toc/src/actions/prepare.ts +25 -0
- package/attributes-master/packages/toc/src/actions/scroll.ts +33 -0
- package/attributes-master/packages/toc/src/components/TOCItem.ts +88 -0
- package/attributes-master/packages/toc/src/factory.ts +47 -0
- package/attributes-master/packages/toc/src/index.ts +3 -0
- package/attributes-master/packages/toc/src/init.ts +37 -0
- package/attributes-master/packages/toc/src/utils/constants.ts +55 -0
- package/attributes-master/packages/toc/src/utils/helpers.ts +23 -0
- package/attributes-master/packages/toc/src/utils/selectors.ts +6 -0
- package/attributes-master/packages/toc/src/utils/types.ts +21 -0
- package/attributes-master/packages/toc/tsconfig.json +3 -0
- package/attributes-master/packages/utils/CHANGELOG.md +43 -0
- package/attributes-master/packages/utils/package.json +27 -0
- package/attributes-master/packages/utils/src/animations/factory.ts +100 -0
- package/attributes-master/packages/utils/src/animations/index.ts +73 -0
- package/attributes-master/packages/utils/src/animations/types.ts +37 -0
- package/attributes-master/packages/utils/src/components/Interaction.ts +79 -0
- package/attributes-master/packages/utils/src/components/Renderer.ts +59 -0
- package/attributes-master/packages/utils/src/components/index.ts +2 -0
- package/attributes-master/packages/utils/src/constants/a11y.ts +50 -0
- package/attributes-master/packages/utils/src/constants/attributes.ts +57 -0
- package/attributes-master/packages/utils/src/constants/index.ts +5 -0
- package/attributes-master/packages/utils/src/constants/keyboard.ts +10 -0
- package/attributes-master/packages/utils/src/constants/webflow.ts +74 -0
- package/attributes-master/packages/utils/src/helpers/dates.ts +17 -0
- package/attributes-master/packages/utils/src/helpers/dom.ts +82 -0
- package/attributes-master/packages/utils/src/helpers/events.ts +59 -0
- package/attributes-master/packages/utils/src/helpers/fetch.ts +217 -0
- package/attributes-master/packages/utils/src/helpers/forms.ts +238 -0
- package/attributes-master/packages/utils/src/helpers/guards.ts +138 -0
- package/attributes-master/packages/utils/src/helpers/index.ts +11 -0
- package/attributes-master/packages/utils/src/helpers/numbers.ts +86 -0
- package/attributes-master/packages/utils/src/helpers/selectors.ts +249 -0
- package/attributes-master/packages/utils/src/helpers/strings.ts +19 -0
- package/attributes-master/packages/utils/src/helpers/wait.ts +36 -0
- package/attributes-master/packages/utils/src/helpers/webflow.ts +117 -0
- package/attributes-master/packages/utils/src/index.ts +5 -0
- package/attributes-master/packages/utils/src/types/core.ts +100 -0
- package/attributes-master/packages/utils/src/types/dom.ts +31 -0
- package/attributes-master/packages/utils/src/types/index.ts +4 -0
- package/attributes-master/packages/utils/src/types/utils.ts +20 -0
- package/attributes-master/packages/utils/src/types/webflow.ts +147 -0
- package/attributes-master/packages/utils/tsconfig.json +3 -0
- package/attributes-master/packages/videohls/CHANGELOG.md +76 -0
- package/attributes-master/packages/videohls/README.md +27 -0
- package/attributes-master/packages/videohls/package.json +26 -0
- package/attributes-master/packages/videohls/src/actions/list.ts +23 -0
- package/attributes-master/packages/videohls/src/actions/video.ts +44 -0
- package/attributes-master/packages/videohls/src/index.ts +3 -0
- package/attributes-master/packages/videohls/src/init.ts +28 -0
- package/attributes-master/packages/videohls/src/utils/constants.ts +12 -0
- package/attributes-master/packages/videohls/src/utils/selectors.ts +5 -0
- package/attributes-master/packages/videohls/src/utils/stores.ts +3 -0
- package/attributes-master/packages/videohls/tsconfig.json +3 -0
- package/attributes-master/pnpm-lock.yaml +3317 -0
- package/attributes-master/pnpm-workspace.yaml +3 -0
- package/attributes-master/tsconfig.json +6 -0
- package/index.js +173 -257
- package/package.json +1 -1
@@ -0,0 +1,281 @@
|
|
1
|
+
import {
|
2
|
+
addListener,
|
3
|
+
adjustValueToStep,
|
4
|
+
ARIA_VALUEMAX_KEY,
|
5
|
+
ARIA_VALUEMIN_KEY,
|
6
|
+
ARIA_VALUENOW_KEY,
|
7
|
+
setFormFieldValue,
|
8
|
+
} from '@finsweet/attributes-utils';
|
9
|
+
|
10
|
+
import { setHandleA11Y } from '../actions/a11y';
|
11
|
+
import { setHandleStyles } from '../actions/styles';
|
12
|
+
import { HANDLE_INCREMENT_KEYS, HANDLE_KEYS } from '../utils/constants';
|
13
|
+
import type { Fill } from './Fill';
|
14
|
+
|
15
|
+
export class Handle {
|
16
|
+
public readonly destroy;
|
17
|
+
|
18
|
+
private readonly index;
|
19
|
+
private readonly minRange;
|
20
|
+
private readonly maxRange;
|
21
|
+
private readonly totalRange;
|
22
|
+
private readonly step;
|
23
|
+
private readonly precision;
|
24
|
+
|
25
|
+
private readonly inputElement;
|
26
|
+
private readonly displayValueElement;
|
27
|
+
private readonly formatValueDisplay;
|
28
|
+
|
29
|
+
private fill?: Fill;
|
30
|
+
private sibling?: Handle;
|
31
|
+
|
32
|
+
private trackWidth;
|
33
|
+
|
34
|
+
private currentValue!: number;
|
35
|
+
private minValue;
|
36
|
+
private maxValue;
|
37
|
+
|
38
|
+
private updatingInput = false;
|
39
|
+
|
40
|
+
constructor(
|
41
|
+
public readonly element: HTMLElement,
|
42
|
+
{
|
43
|
+
index,
|
44
|
+
minRange,
|
45
|
+
maxRange,
|
46
|
+
trackWidth,
|
47
|
+
step,
|
48
|
+
precision,
|
49
|
+
startValue,
|
50
|
+
isLazy,
|
51
|
+
inputElement,
|
52
|
+
displayValueElement,
|
53
|
+
formatValueDisplay,
|
54
|
+
}: {
|
55
|
+
index: number;
|
56
|
+
minRange: number;
|
57
|
+
maxRange: number;
|
58
|
+
trackWidth: number;
|
59
|
+
step: number;
|
60
|
+
precision: number;
|
61
|
+
startValue: number;
|
62
|
+
isLazy: boolean;
|
63
|
+
inputElement?: HTMLInputElement;
|
64
|
+
displayValueElement?: HTMLElement;
|
65
|
+
formatValueDisplay?: string;
|
66
|
+
}
|
67
|
+
) {
|
68
|
+
this.inputElement = inputElement;
|
69
|
+
this.displayValueElement = displayValueElement;
|
70
|
+
this.formatValueDisplay = formatValueDisplay;
|
71
|
+
|
72
|
+
this.index = index;
|
73
|
+
this.minRange = minRange;
|
74
|
+
this.maxRange = maxRange;
|
75
|
+
this.totalRange = maxRange - minRange;
|
76
|
+
this.step = step;
|
77
|
+
this.precision = precision;
|
78
|
+
|
79
|
+
this.minValue = minRange;
|
80
|
+
this.maxValue = maxRange;
|
81
|
+
|
82
|
+
this.trackWidth = trackWidth;
|
83
|
+
|
84
|
+
setHandleStyles(element);
|
85
|
+
setHandleA11Y(element, inputElement);
|
86
|
+
|
87
|
+
this.setValue(inputElement?.value ? parseFloat(inputElement.value) : startValue, !isLazy);
|
88
|
+
this.destroy = this.listenEvents();
|
89
|
+
}
|
90
|
+
|
91
|
+
/**
|
92
|
+
* Listens for internal events.
|
93
|
+
*/
|
94
|
+
private listenEvents() {
|
95
|
+
const { element, inputElement } = this;
|
96
|
+
|
97
|
+
const cleanups = [
|
98
|
+
addListener(element, 'keydown', (e) => this.handleKeyDown(e)),
|
99
|
+
addListener(inputElement, 'change', () => this.handleInputChange()),
|
100
|
+
];
|
101
|
+
|
102
|
+
return () => {
|
103
|
+
for (const cleanup of cleanups) cleanup();
|
104
|
+
};
|
105
|
+
}
|
106
|
+
|
107
|
+
/**
|
108
|
+
* Handles when the keyboard is used when focusing the Handle.
|
109
|
+
* @param e A `keydown` event.
|
110
|
+
*/
|
111
|
+
private handleKeyDown(e: KeyboardEvent) {
|
112
|
+
const { step, currentValue } = this;
|
113
|
+
const { key } = e;
|
114
|
+
|
115
|
+
if (!HANDLE_KEYS.includes(key)) return;
|
116
|
+
|
117
|
+
e.preventDefault();
|
118
|
+
|
119
|
+
if (HANDLE_INCREMENT_KEYS.includes(key)) this.setValue(currentValue + step);
|
120
|
+
else this.setValue(currentValue - step);
|
121
|
+
}
|
122
|
+
|
123
|
+
/**
|
124
|
+
* Handles when the value of the `<input>` element is updated by third party actions.
|
125
|
+
*/
|
126
|
+
private handleInputChange() {
|
127
|
+
const { inputElement, index, minRange, maxRange, step, precision, updatingInput } = this;
|
128
|
+
if (!inputElement || updatingInput) return;
|
129
|
+
|
130
|
+
const { value } = inputElement;
|
131
|
+
|
132
|
+
const numericValue = parseFloat(value);
|
133
|
+
|
134
|
+
if (numericValue) {
|
135
|
+
this.setValue(adjustValueToStep(numericValue, step, precision, minRange));
|
136
|
+
|
137
|
+
return;
|
138
|
+
}
|
139
|
+
|
140
|
+
this.setValue(index === 0 ? minRange : maxRange, false);
|
141
|
+
}
|
142
|
+
|
143
|
+
private formatValue(value: number, rawLocale: string) {
|
144
|
+
const locale = rawLocale === 'true' ? undefined : rawLocale;
|
145
|
+
|
146
|
+
try {
|
147
|
+
return value.toLocaleString(locale);
|
148
|
+
} catch {
|
149
|
+
return value.toLocaleString(window.navigator?.language || undefined);
|
150
|
+
}
|
151
|
+
}
|
152
|
+
|
153
|
+
/**
|
154
|
+
* Updates the Handle's position on the track.
|
155
|
+
*/
|
156
|
+
private updatePosition() {
|
157
|
+
const { currentValue, element, trackWidth, minRange, totalRange, fill } = this;
|
158
|
+
|
159
|
+
const left = ((currentValue - minRange) * trackWidth) / totalRange;
|
160
|
+
|
161
|
+
element.style.left = `${left}px`;
|
162
|
+
|
163
|
+
fill?.update();
|
164
|
+
}
|
165
|
+
|
166
|
+
/**
|
167
|
+
* @returns The current value of the Handle.
|
168
|
+
*/
|
169
|
+
public getValue = (): number => this.currentValue;
|
170
|
+
|
171
|
+
/**
|
172
|
+
* Sets a new value to the Handle.
|
173
|
+
* The Handle's position is automatically updated based on the new value.
|
174
|
+
* @param newValue The new value to set.
|
175
|
+
* @param updateInputElement Defines if the `<input>` element should be updated. Defaults to `true`.
|
176
|
+
*
|
177
|
+
* @returns `true` if the current value was updated.
|
178
|
+
*/
|
179
|
+
public setValue(newValue: number, updateInputElement = true): boolean {
|
180
|
+
const { currentValue, element, minValue, maxValue, displayValueElement, formatValueDisplay } = this;
|
181
|
+
|
182
|
+
if (currentValue === newValue || newValue < minValue || newValue > maxValue) return false;
|
183
|
+
|
184
|
+
this.currentValue = newValue;
|
185
|
+
|
186
|
+
this.updatePosition();
|
187
|
+
this.updateSiblingConstraints();
|
188
|
+
|
189
|
+
const stringValue = `${newValue}`;
|
190
|
+
|
191
|
+
element.setAttribute(ARIA_VALUENOW_KEY, stringValue);
|
192
|
+
|
193
|
+
if (displayValueElement)
|
194
|
+
displayValueElement.textContent = formatValueDisplay
|
195
|
+
? this.formatValue(newValue, formatValueDisplay)
|
196
|
+
: stringValue;
|
197
|
+
|
198
|
+
if (updateInputElement) this.updateInputElement();
|
199
|
+
|
200
|
+
return true;
|
201
|
+
}
|
202
|
+
|
203
|
+
/**
|
204
|
+
* Updates the input element's value.
|
205
|
+
*/
|
206
|
+
public updateInputElement() {
|
207
|
+
this.updatingInput = true;
|
208
|
+
|
209
|
+
const { currentValue, inputElement } = this;
|
210
|
+
|
211
|
+
if (!inputElement) return;
|
212
|
+
|
213
|
+
setFormFieldValue(inputElement, currentValue.toFixed(2));
|
214
|
+
|
215
|
+
this.updatingInput = false;
|
216
|
+
}
|
217
|
+
|
218
|
+
/**
|
219
|
+
* @returns The Handle's constraints.
|
220
|
+
*/
|
221
|
+
public getConstraints = (): [number, number] => [this.minValue, this.maxValue];
|
222
|
+
|
223
|
+
/**
|
224
|
+
* Sets new constraints to the Handle.
|
225
|
+
* @param minValue The new minimum value.
|
226
|
+
* @param maxValue The new maximum value.
|
227
|
+
*/
|
228
|
+
public setConstraints(minValue: number, maxValue: number): void {
|
229
|
+
const { element } = this;
|
230
|
+
|
231
|
+
const minValFixed = minValue.toFixed(2);
|
232
|
+
const maxValFixed = maxValue.toFixed(2);
|
233
|
+
|
234
|
+
element.setAttribute(ARIA_VALUEMIN_KEY, minValFixed);
|
235
|
+
element.setAttribute(ARIA_VALUEMAX_KEY, maxValFixed);
|
236
|
+
|
237
|
+
this.minValue = Number(minValFixed);
|
238
|
+
this.maxValue = Number(maxValFixed);
|
239
|
+
}
|
240
|
+
|
241
|
+
/**
|
242
|
+
* Updates the sibling's constaints, if existing.
|
243
|
+
*/
|
244
|
+
public updateSiblingConstraints() {
|
245
|
+
const { index, sibling, step, minRange, maxRange, currentValue } = this;
|
246
|
+
|
247
|
+
if (!sibling) return;
|
248
|
+
|
249
|
+
if (index === 0) sibling.setConstraints(currentValue + step, maxRange);
|
250
|
+
else sibling.setConstraints(minRange, currentValue - step);
|
251
|
+
}
|
252
|
+
|
253
|
+
/**
|
254
|
+
* Updates the stored track width and the Handle's position on the track.
|
255
|
+
* @param newTrackWidth The new track width.
|
256
|
+
*/
|
257
|
+
public updateTrackWidth(newTrackWidth: number) {
|
258
|
+
this.trackWidth = newTrackWidth;
|
259
|
+
|
260
|
+
this.fill?.updateTrackWidth(newTrackWidth);
|
261
|
+
this.updatePosition();
|
262
|
+
}
|
263
|
+
|
264
|
+
/**
|
265
|
+
* Adds a `Fill` instance to the Handle.
|
266
|
+
* @param fill A {@link Fill} instance.
|
267
|
+
*/
|
268
|
+
public addFill(fill: Fill) {
|
269
|
+
this.fill = fill;
|
270
|
+
}
|
271
|
+
|
272
|
+
/**
|
273
|
+
* Adds a sibling Handle.
|
274
|
+
* @param sibling A {@link Handle} instance.
|
275
|
+
*/
|
276
|
+
public addSibling(sibling: Handle) {
|
277
|
+
this.sibling = sibling;
|
278
|
+
|
279
|
+
this.updateSiblingConstraints();
|
280
|
+
}
|
281
|
+
}
|
@@ -0,0 +1,100 @@
|
|
1
|
+
import { adjustValueToStep, isNotEmpty } from '@finsweet/attributes-utils';
|
2
|
+
|
3
|
+
import { Fill } from './components/Fill';
|
4
|
+
import { Handle } from './components/Handle';
|
5
|
+
import { getAttribute } from './utils/selectors';
|
6
|
+
import type { HandleInstances, RangeSliderSettings } from './utils/types';
|
7
|
+
|
8
|
+
/**
|
9
|
+
* Creates {@link Handle} instances and sets them up.
|
10
|
+
* @param settings The {@link RangeSliderSettings}.
|
11
|
+
* @returns The new {@link Handle} instances.
|
12
|
+
*/
|
13
|
+
export const createHandleInstances = ({
|
14
|
+
handleElements,
|
15
|
+
inputElements,
|
16
|
+
displayValueElements,
|
17
|
+
formatValueDisplay,
|
18
|
+
minRange,
|
19
|
+
maxRange,
|
20
|
+
trackWidth,
|
21
|
+
step,
|
22
|
+
precision,
|
23
|
+
isLazy,
|
24
|
+
}: RangeSliderSettings): HandleInstances | undefined => {
|
25
|
+
const handles = handleElements
|
26
|
+
.slice(0, 2)
|
27
|
+
.map((handleElement, index) => {
|
28
|
+
const rawStartValue = parseFloat(getAttribute(handleElement, 'start') || `${index === 0 ? minRange : maxRange}`);
|
29
|
+
|
30
|
+
let startValue = adjustValueToStep(rawStartValue, step, precision, minRange);
|
31
|
+
|
32
|
+
const inputElement = inputElements[index];
|
33
|
+
const displayValueElement = displayValueElements[index];
|
34
|
+
|
35
|
+
if (startValue < minRange) {
|
36
|
+
console.error(
|
37
|
+
`The Handle start value [${startValue}] doesn't match the range, so it has been set to the min value [${minRange}].`
|
38
|
+
);
|
39
|
+
startValue = minRange;
|
40
|
+
}
|
41
|
+
|
42
|
+
if (startValue > maxRange) {
|
43
|
+
console.error(
|
44
|
+
`The Handle start value [${startValue}] doesn't match the range, so it has been set to the max value [${maxRange}].`
|
45
|
+
);
|
46
|
+
startValue = maxRange;
|
47
|
+
}
|
48
|
+
|
49
|
+
const handle = new Handle(handleElement, {
|
50
|
+
index,
|
51
|
+
minRange,
|
52
|
+
maxRange,
|
53
|
+
trackWidth,
|
54
|
+
step,
|
55
|
+
precision,
|
56
|
+
startValue,
|
57
|
+
inputElement,
|
58
|
+
displayValueElement,
|
59
|
+
formatValueDisplay,
|
60
|
+
isLazy,
|
61
|
+
});
|
62
|
+
|
63
|
+
return handle;
|
64
|
+
})
|
65
|
+
.filter(isNotEmpty);
|
66
|
+
|
67
|
+
if (!handles.length) return;
|
68
|
+
|
69
|
+
// Sort them by start value
|
70
|
+
if (handles.length > 1) handles.sort((handle1, handle2) => handle1.getValue() - handle2.getValue());
|
71
|
+
|
72
|
+
const [handle1, handle2] = handles;
|
73
|
+
|
74
|
+
// Add relationships
|
75
|
+
if (handle2) {
|
76
|
+
handle1.addSibling(handle2);
|
77
|
+
handle2.addSibling(handle1);
|
78
|
+
} else handle1.setConstraints(minRange, maxRange);
|
79
|
+
|
80
|
+
return [handle1, handle2];
|
81
|
+
};
|
82
|
+
|
83
|
+
/**
|
84
|
+
* Creates a `Fill` instance and adds it to the Handles.
|
85
|
+
* @param settings The settings returned by {@link getSettings}.
|
86
|
+
* @param handles The {@link HandleInstances} tuple.
|
87
|
+
* @returns
|
88
|
+
*/
|
89
|
+
export const createFillInstance = (
|
90
|
+
{ fillElement, minRange, maxRange, trackWidth }: RangeSliderSettings,
|
91
|
+
handles: HandleInstances
|
92
|
+
) => {
|
93
|
+
if (!fillElement) return;
|
94
|
+
|
95
|
+
const fill = new Fill(fillElement, { minRange, maxRange, trackWidth, handles });
|
96
|
+
const [handle1, handle2] = handles;
|
97
|
+
|
98
|
+
handle1.addFill(fill);
|
99
|
+
handle2?.addFill(fill);
|
100
|
+
};
|
@@ -0,0 +1,194 @@
|
|
1
|
+
import {
|
2
|
+
addListener,
|
3
|
+
adjustValueToStep,
|
4
|
+
type FinsweetAttributeInit,
|
5
|
+
getHiddenParent,
|
6
|
+
isNotEmpty,
|
7
|
+
isVisible,
|
8
|
+
noop,
|
9
|
+
waitWebflowReady,
|
10
|
+
} from '@finsweet/attributes-utils';
|
11
|
+
import debounce from 'just-debounce';
|
12
|
+
|
13
|
+
import { getClientX } from './actions/events';
|
14
|
+
import { getSettings } from './actions/settings';
|
15
|
+
import { getClosestValidHandle } from './actions/values';
|
16
|
+
import type { Handle } from './components/Handle';
|
17
|
+
import { createFillInstance, createHandleInstances } from './factory';
|
18
|
+
import { queryAllElements } from './utils/selectors';
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Inits the attribute.
|
22
|
+
*/
|
23
|
+
export const init: FinsweetAttributeInit = async () => {
|
24
|
+
await waitWebflowReady();
|
25
|
+
|
26
|
+
const wrapperElements = queryAllElements('wrapper');
|
27
|
+
|
28
|
+
const rangeSlidersData = wrapperElements.map(initRangeSlider).filter(isNotEmpty);
|
29
|
+
|
30
|
+
const handleInstances = rangeSlidersData.map(({ handles }) => handles);
|
31
|
+
|
32
|
+
return {
|
33
|
+
result: handleInstances,
|
34
|
+
destroy() {
|
35
|
+
for (const { destroy } of rangeSlidersData) destroy();
|
36
|
+
},
|
37
|
+
};
|
38
|
+
};
|
39
|
+
|
40
|
+
/**
|
41
|
+
* Inits a range slider.
|
42
|
+
* @param wrapperElement The wrapper element.
|
43
|
+
* @returns The {@link HandleInstances}.
|
44
|
+
*/
|
45
|
+
const initRangeSlider = (wrapperElement: HTMLElement) => {
|
46
|
+
const settings = getSettings(wrapperElement);
|
47
|
+
if (!settings) return;
|
48
|
+
|
49
|
+
const handles = createHandleInstances(settings);
|
50
|
+
if (!handles) return;
|
51
|
+
|
52
|
+
createFillInstance(settings, handles);
|
53
|
+
|
54
|
+
const { maxRange, minRange, step, precision, totalRange, trackElement, updateOnRelease } = settings;
|
55
|
+
|
56
|
+
let { trackWidth, trackLeft, trackRight } = settings;
|
57
|
+
let focusedHandle: Handle | undefined;
|
58
|
+
let focusedHandleHasUpdated = false;
|
59
|
+
|
60
|
+
/**
|
61
|
+
* Calculates the value based on where the user clicked and adjusts it to the step increment,
|
62
|
+
* @param clientX The event `clientX` value.
|
63
|
+
*/
|
64
|
+
const calculateNewValue = (clientX: number) => {
|
65
|
+
const value = minRange + ((clientX - trackLeft) * totalRange) / trackWidth;
|
66
|
+
|
67
|
+
const adjustedValue = adjustValueToStep(value, step, precision, minRange);
|
68
|
+
return adjustedValue;
|
69
|
+
};
|
70
|
+
|
71
|
+
/**
|
72
|
+
* Handles when the user moves the cursor/finger while holding down a {@link Handle}.
|
73
|
+
* @param e A `mousemove` or `touchmove` event.
|
74
|
+
*/
|
75
|
+
const handleMouseMove = (e: MouseEvent | TouchEvent) => {
|
76
|
+
if (!focusedHandle) return;
|
77
|
+
|
78
|
+
if (e instanceof MouseEvent) e.preventDefault();
|
79
|
+
|
80
|
+
const clientX = getClientX(e);
|
81
|
+
const [minValue, maxValue] = focusedHandle.getConstraints();
|
82
|
+
|
83
|
+
let value: number;
|
84
|
+
|
85
|
+
if (trackLeft > clientX) value = minValue;
|
86
|
+
else if (trackRight < clientX) value = maxValue;
|
87
|
+
else value = calculateNewValue(clientX);
|
88
|
+
|
89
|
+
const hasUpdatedValue = focusedHandle.setValue(value, !updateOnRelease);
|
90
|
+
|
91
|
+
focusedHandleHasUpdated ||= hasUpdatedValue;
|
92
|
+
};
|
93
|
+
|
94
|
+
/**
|
95
|
+
* Handles when the user releases the currently focused {@link Handle}.
|
96
|
+
* @param e A `mouseup` or `touchend` event.
|
97
|
+
*/
|
98
|
+
const handleMouseUp = (e: MouseEvent | TouchEvent) => {
|
99
|
+
if (e.cancelable) e.preventDefault();
|
100
|
+
|
101
|
+
document.removeEventListener('mousemove', handleMouseMove);
|
102
|
+
document.removeEventListener('touchmove', handleMouseMove);
|
103
|
+
document.removeEventListener('mouseup', handleMouseUp);
|
104
|
+
document.removeEventListener('touchend', handleMouseUp);
|
105
|
+
|
106
|
+
if (updateOnRelease && focusedHandleHasUpdated) focusedHandle?.updateInputElement();
|
107
|
+
|
108
|
+
focusedHandleHasUpdated = false;
|
109
|
+
|
110
|
+
focusedHandle?.element.blur();
|
111
|
+
focusedHandle = undefined;
|
112
|
+
};
|
113
|
+
|
114
|
+
/**
|
115
|
+
* Handles when the user holds down a {@link Handle}.
|
116
|
+
* @param e A `mousedown` or `touchstart` event.
|
117
|
+
*/
|
118
|
+
const handleMouseDown = (e: MouseEvent | TouchEvent) => {
|
119
|
+
if (e.cancelable) e.preventDefault();
|
120
|
+
|
121
|
+
const clientX = getClientX(e);
|
122
|
+
|
123
|
+
document.addEventListener('mousemove', handleMouseMove);
|
124
|
+
document.addEventListener('touchmove', handleMouseMove, { passive: true });
|
125
|
+
document.addEventListener('mouseup', handleMouseUp);
|
126
|
+
document.addEventListener('touchend', handleMouseUp);
|
127
|
+
|
128
|
+
let value: number;
|
129
|
+
|
130
|
+
if (trackLeft > clientX) value = minRange;
|
131
|
+
else if (trackRight < clientX) value = maxRange;
|
132
|
+
else value = calculateNewValue(clientX);
|
133
|
+
|
134
|
+
const closestHandle = getClosestValidHandle(value, handles);
|
135
|
+
if (!closestHandle) return;
|
136
|
+
|
137
|
+
closestHandle.element.focus();
|
138
|
+
|
139
|
+
focusedHandle = closestHandle;
|
140
|
+
|
141
|
+
const hasUpdatedValue = closestHandle.setValue(value, !updateOnRelease);
|
142
|
+
|
143
|
+
focusedHandleHasUpdated ||= hasUpdatedValue;
|
144
|
+
};
|
145
|
+
|
146
|
+
/**
|
147
|
+
* Updates the stored `trackWidth` value and the Handles' position.
|
148
|
+
*/
|
149
|
+
const handleDOMMutation = () => {
|
150
|
+
trackWidth = trackElement.clientWidth;
|
151
|
+
|
152
|
+
({ left: trackLeft, right: trackRight } = trackElement.getBoundingClientRect());
|
153
|
+
|
154
|
+
for (const handle of handles) {
|
155
|
+
if (handle) handle.updateTrackWidth(trackWidth);
|
156
|
+
}
|
157
|
+
};
|
158
|
+
|
159
|
+
/**
|
160
|
+
* If the wrapper is initially hidden, observes mutations and performs the needed actions.
|
161
|
+
*/
|
162
|
+
const observeWrapperVisibility = () => {
|
163
|
+
const hiddenParent = getHiddenParent(wrapperElement);
|
164
|
+
if (!hiddenParent) return noop;
|
165
|
+
|
166
|
+
const observer = new MutationObserver(() => {
|
167
|
+
if (isVisible(hiddenParent)) handleDOMMutation();
|
168
|
+
});
|
169
|
+
|
170
|
+
observer.observe(hiddenParent, {
|
171
|
+
attributes: true,
|
172
|
+
attributeFilter: ['style', 'class'],
|
173
|
+
});
|
174
|
+
|
175
|
+
return () => observer.disconnect();
|
176
|
+
};
|
177
|
+
|
178
|
+
/**
|
179
|
+
* Init events
|
180
|
+
*/
|
181
|
+
const cleanups = [
|
182
|
+
observeWrapperVisibility(),
|
183
|
+
addListener(trackElement, 'mousedown', handleMouseDown),
|
184
|
+
addListener(trackElement, 'touchstart', handleMouseDown, { passive: true }),
|
185
|
+
addListener(window, 'resize', debounce(handleDOMMutation, 50)),
|
186
|
+
];
|
187
|
+
|
188
|
+
return {
|
189
|
+
handles,
|
190
|
+
destroy: () => {
|
191
|
+
for (const cleanup of cleanups) cleanup();
|
192
|
+
},
|
193
|
+
};
|
194
|
+
};
|
@@ -0,0 +1,87 @@
|
|
1
|
+
import {
|
2
|
+
ARROW_DOWN_KEY,
|
3
|
+
ARROW_LEFT_KEY,
|
4
|
+
ARROW_RIGHT_KEY,
|
5
|
+
ARROW_UP_KEY,
|
6
|
+
type AttributeElements,
|
7
|
+
type AttributeSettings,
|
8
|
+
} from '@finsweet/attributes-utils';
|
9
|
+
|
10
|
+
export const ELEMENTS = [
|
11
|
+
/**
|
12
|
+
* Defines a range slider instance element.
|
13
|
+
*/
|
14
|
+
'wrapper',
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Defines the track of the slider.
|
18
|
+
*/
|
19
|
+
'track',
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Defines the fill of the slider.
|
23
|
+
*/
|
24
|
+
'fill',
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Defines a handle of the slider.
|
28
|
+
*/
|
29
|
+
'handle',
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Defines an element to display a Handle's value.
|
33
|
+
*/
|
34
|
+
'display-value',
|
35
|
+
] as const satisfies AttributeElements;
|
36
|
+
|
37
|
+
export const SETTINGS = {
|
38
|
+
/**
|
39
|
+
* Defines the minimum value of the range.
|
40
|
+
*/
|
41
|
+
min: { key: 'min' },
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Defines the maximum value of the range.
|
45
|
+
*/
|
46
|
+
max: { key: 'max' },
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Defines the start value of a handle.
|
50
|
+
* Must be applied to a handle element {@link ATTRIBUTES.element.values.handle}.
|
51
|
+
*/
|
52
|
+
start: { key: 'start' },
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Defines the step of the values.
|
56
|
+
*/
|
57
|
+
step: { key: 'step' },
|
58
|
+
|
59
|
+
/**
|
60
|
+
* Defines if the Handles' value display should be formatted.
|
61
|
+
*/
|
62
|
+
formatdisplay: {
|
63
|
+
key: 'formatdisplay',
|
64
|
+
values: ['true'],
|
65
|
+
},
|
66
|
+
|
67
|
+
/**
|
68
|
+
* Defines when should the <input> elements be updated.
|
69
|
+
*/
|
70
|
+
update: {
|
71
|
+
key: 'update',
|
72
|
+
values: ['move', 'release'],
|
73
|
+
defaultValue: 'move',
|
74
|
+
},
|
75
|
+
|
76
|
+
/**
|
77
|
+
* Defines if the input values should be updated lazily.
|
78
|
+
*/
|
79
|
+
lazy: {
|
80
|
+
key: 'lazy',
|
81
|
+
values: ['true'],
|
82
|
+
},
|
83
|
+
} as const satisfies AttributeSettings;
|
84
|
+
|
85
|
+
export const HANDLE_INCREMENT_KEYS = [ARROW_UP_KEY, ARROW_RIGHT_KEY];
|
86
|
+
export const HANDLE_DECREMENT_KEYS = [ARROW_DOWN_KEY, ARROW_LEFT_KEY];
|
87
|
+
export const HANDLE_KEYS = [...HANDLE_INCREMENT_KEYS, ...HANDLE_DECREMENT_KEYS];
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { generateSelectors, RANGE_SLIDER_ATTRIBUTE } from '@finsweet/attributes-utils';
|
2
|
+
|
3
|
+
import { ELEMENTS, SETTINGS } from './constants';
|
4
|
+
|
5
|
+
export const { queryElement, queryAllElements, hasAttributeValue, getAttribute } = generateSelectors(
|
6
|
+
RANGE_SLIDER_ATTRIBUTE,
|
7
|
+
ELEMENTS,
|
8
|
+
SETTINGS
|
9
|
+
);
|