@adartem/adlib-attributes 0.1.3 → 0.1.5
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.js +957 -1
- package/attributes.js.map +4 -4
- package/dist/chunk-IEGIKJKW.js +5776 -0
- package/dist/chunk-IEGIKJKW.js.map +7 -0
- package/dist/chunk-M2KO765Q.js +43 -0
- package/dist/chunk-M2KO765Q.js.map +7 -0
- package/dist/chunk-NS2GB4WB.js +63 -0
- package/dist/chunk-NS2GB4WB.js.map +7 -0
- package/dist/dist-46N2ZXQQ.js +80 -0
- package/dist/dist-46N2ZXQQ.js.map +7 -0
- package/dist/dist-4EIQOOMJ.js +331 -0
- package/dist/dist-4EIQOOMJ.js.map +7 -0
- package/dist/dist-6YSNCGWO.js +227 -0
- package/dist/dist-6YSNCGWO.js.map +7 -0
- package/dist/dist-7GSHUMRU.js +60 -0
- package/dist/dist-7GSHUMRU.js.map +7 -0
- package/dist/dist-ALT6N2V6.js +165 -0
- package/dist/dist-ALT6N2V6.js.map +7 -0
- package/dist/dist-BXD5YEF3.js +290 -0
- package/dist/dist-BXD5YEF3.js.map +7 -0
- package/dist/dist-D2J4YZM6.js +52 -0
- package/dist/dist-D2J4YZM6.js.map +7 -0
- package/dist/dist-D2X7FLMD.js +126 -0
- package/dist/dist-D2X7FLMD.js.map +7 -0
- package/dist/dist-DOOWCYTM.js +92 -0
- package/dist/dist-DOOWCYTM.js.map +7 -0
- package/dist/dist-GLBAV2CS.js +202 -0
- package/dist/dist-GLBAV2CS.js.map +7 -0
- package/dist/dist-GQHJZHTH.js +73 -0
- package/dist/dist-GQHJZHTH.js.map +7 -0
- package/dist/dist-H4ILPDRU.js +59 -0
- package/dist/dist-H4ILPDRU.js.map +7 -0
- package/dist/dist-IDJRFWAH.js +71 -0
- package/dist/dist-IDJRFWAH.js.map +7 -0
- package/dist/dist-KDCRSMGT.js +63 -0
- package/dist/dist-KDCRSMGT.js.map +7 -0
- package/dist/dist-KF5AKQ52.js +740 -0
- package/dist/dist-KF5AKQ52.js.map +7 -0
- package/dist/dist-KU26ZFEG.js +169 -0
- package/dist/dist-KU26ZFEG.js.map +7 -0
- package/dist/dist-M6QCD7TL.js +4281 -0
- package/dist/dist-M6QCD7TL.js.map +7 -0
- package/dist/dist-MBFKX56S.js +482 -0
- package/dist/dist-MBFKX56S.js.map +7 -0
- package/dist/dist-NOIPAOTU.js +131 -0
- package/dist/dist-NOIPAOTU.js.map +7 -0
- package/dist/dist-QPNIGMZA.js +33028 -0
- package/dist/dist-QPNIGMZA.js.map +7 -0
- package/dist/dist-RAOZ6VUA.js +14416 -0
- package/dist/dist-RAOZ6VUA.js.map +7 -0
- package/dist/dist-RQZGUXDL.js +102 -0
- package/dist/dist-RQZGUXDL.js.map +7 -0
- package/dist/dist-T4V65O5X.js +54 -0
- package/dist/dist-T4V65O5X.js.map +7 -0
- package/dist/dist-UFMW7V6T.js +317 -0
- package/dist/dist-UFMW7V6T.js.map +7 -0
- package/dist/dist-V7I3FQX7.js +1419 -0
- package/dist/dist-V7I3FQX7.js.map +7 -0
- package/dist/dist-XTGERRGU.js +160 -0
- package/dist/dist-XTGERRGU.js.map +7 -0
- package/dist/dist-YAVVMJ7W.js +72 -0
- package/dist/dist-YAVVMJ7W.js.map +7 -0
- package/dist/dist-YGJKGMK6.js +137 -0
- package/dist/dist-YGJKGMK6.js.map +7 -0
- package/package.json +7 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../rangeslider/src/index.ts", "../../rangeslider/src/actions/events.ts", "../../rangeslider/src/utils/constants.ts", "../../rangeslider/src/utils/selectors.ts", "../../rangeslider/src/actions/settings.ts", "../../rangeslider/src/actions/values.ts", "../../rangeslider/src/components/Fill.ts", "../../rangeslider/src/actions/a11y.ts", "../../rangeslider/src/actions/styles.ts", "../../rangeslider/src/components/Handle.ts", "../../rangeslider/src/factory.ts", "../../rangeslider/src/init.ts", "../../rangeslider/package.json"],
|
|
4
|
+
"sourcesContent": ["import { createCleanupBag, defineModule } from '@adartem/adlib-utils';\n\nimport { init as legacyInit } from './init';\nimport { MODULE_KEY } from './utils/constants';\n\nexport default defineModule({\n key: MODULE_KEY,\n init: async (core) => {\n void core;\n\n const bag = createCleanupBag();\n const res = await legacyInit();\n\n if (res && typeof (res as { destroy?: unknown }).destroy === 'function') {\n bag.add(() => {\n try {\n (res as { destroy: () => void }).destroy();\n } catch {\n // best-effort\n }\n });\n }\n\n return {\n key: MODULE_KEY,\n destroy: () => bag.run(),\n };\n },\n});\n\nexport { version } from '../package.json';\nexport { init } from './init';\nexport { ELEMENTS, MODULE_KEY, SETTINGS } from './utils/constants';\n", "/**\n * @returns The `clientX` property of an event.\n * @param e A {@link MouseEvent} or a {@link TouchEvent}\n */\nexport const getClientX = (e: MouseEvent | TouchEvent) => {\n if (e instanceof MouseEvent) return e.clientX;\n\n return e.touches[0].clientX;\n};\n", "import {\n ARROW_DOWN_KEY,\n ARROW_LEFT_KEY,\n ARROW_RIGHT_KEY,\n ARROW_UP_KEY,\n type AttributeElements,\n type AttributeSettings,\n type OptionsSchema,\n} from '@adartem/adlib-utils';\n\nexport const MODULE_KEY = 'ad-rangeslider' as const;\n\nexport const ELEMENTS = [\n /**\n * Defines a range slider instance element.\n */\n 'wrapper',\n\n /**\n * Defines the track of the slider.\n */\n 'track',\n\n /**\n * Defines the fill of the slider.\n */\n 'fill',\n\n /**\n * Defines a handle of the slider.\n */\n 'handle',\n\n /**\n * Defines an element to display a Handle's value.\n */\n 'display-value',\n] as const satisfies AttributeElements;\n\nexport const SETTINGS = {\n /**\n * Disables the range slider.\n */\n disabled: { key: 'disabled', values: ['true'] },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { key: 'a11y', values: ['false'] },\n} as const satisfies AttributeSettings;\n\nexport const OPTIONS = {\n min: { type: 'number' },\n max: { type: 'number' },\n start: { type: 'number' },\n step: { type: 'number' },\n update: { type: 'enum', values: ['move', 'release'] as const, default: 'move' },\n lazy: { type: 'boolean', default: false },\n formatdisplay: { type: 'string' },\n formatcompactdisplay: { type: 'string' },\n formatcurrency: { type: 'string' },\n formatcurrencydisplay: { type: 'string' },\n formatcurrencysign: { type: 'string' },\n formatmaximumsignificantdigits: { type: 'number' },\n formatmaximumfractiondigits: { type: 'number' },\n formatminimumfractiondigits: { type: 'number' },\n formatminimumintegerdigits: { type: 'number' },\n formatminimumsignificantdigits: { type: 'number' },\n formatnotation: { type: 'string' },\n formatnumberingsystem: { type: 'string' },\n formatroundingpriority: { type: 'string' },\n formatroundingincrement: { type: 'number' },\n formatroundingmode: { type: 'string' },\n formatsigndisplay: { type: 'string' },\n formatstyle: { type: 'string' },\n formattrailingzerodisplay: { type: 'string' },\n formatunit: { type: 'string' },\n formatunitdisplay: { type: 'string' },\n formatusegrouping: { type: 'string' },\n disabled: { type: 'boolean', default: false },\n a11y: { type: 'boolean', default: true },\n} as const satisfies OptionsSchema;\n\nexport const HANDLE_INCREMENT_KEYS = [ARROW_UP_KEY, ARROW_RIGHT_KEY];\nexport const HANDLE_DECREMENT_KEYS = [ARROW_DOWN_KEY, ARROW_LEFT_KEY];\nexport const HANDLE_KEYS = [...HANDLE_INCREMENT_KEYS, ...HANDLE_DECREMENT_KEYS];\n", "import { generateSelectors } from '@adartem/adlib-utils';\n\nimport { ELEMENTS, MODULE_KEY, SETTINGS } from './constants';\n\nexport const {\n getInstance,\n getPresenceSelector,\n getElementSelector,\n getSettingSelector,\n queryElement,\n queryAllElements,\n getAttribute,\n hasAttributeValue,\n} = generateSelectors(MODULE_KEY, ELEMENTS, SETTINGS);\n", "import { getDecimalPrecision, isFormField, readOptionsFromAttributes } from '@adartem/adlib-utils';\n\nimport { MODULE_KEY, OPTIONS } from '../utils/constants';\nimport { queryAllElements, queryElement } from '../utils/selectors';\n\n/**\n * Collects the required settings.\n * @param wrapperElement The wrapper element.\n * @returns The settings, if no errors were found.\n */\nexport const getSettings = (\n wrapperElement: HTMLElement,\n):\n | {\n trackElement: HTMLElement;\n fillElement: HTMLElement | null;\n handleElements: HTMLElement[];\n inputElements: HTMLInputElement[];\n displayValueElements: HTMLElement[];\n formatValueDisplay?: string;\n formatValueOptions: Intl.NumberFormatOptions;\n trackLeft: number;\n trackRight: number;\n trackWidth: number;\n minRange: number;\n maxRange: number;\n totalRange: number;\n step: number;\n precision: number;\n updateOnRelease: boolean;\n isLazy: boolean;\n }\n | undefined => {\n const trackElement = queryElement('track', { scope: wrapperElement });\n\n const fillElement = queryElement('fill', { scope: wrapperElement });\n\n const inputElements = [...wrapperElement.querySelectorAll('input')].filter(isFormField);\n\n const handleElements = queryAllElements('handle', { scope: wrapperElement });\n\n const displayValueElements = queryAllElements('display-value', { scope: wrapperElement });\n\n const options = readOptionsFromAttributes(wrapperElement, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n });\n\n const formatValueDisplay = options.formatdisplay;\n\n // Values come from DOM attributes and are validated at runtime by Intl.NumberFormat.\n const formatValueOptions = {\n compactDisplay: options.formatcompactdisplay,\n currency: options.formatcurrency,\n currencyDisplay: options.formatcurrencydisplay,\n currencySign: options.formatcurrencysign,\n maximumSignificantDigits: options.formatmaximumsignificantdigits,\n maximumFractionDigits: options.formatmaximumfractiondigits,\n minimumFractionDigits: options.formatminimumfractiondigits,\n minimumIntegerDigits: options.formatminimumintegerdigits,\n minimumSignificantDigits: options.formatminimumsignificantdigits,\n notation: options.formatnotation,\n numberingSystem: options.formatnumberingsystem,\n roundingPriority: options.formatroundingpriority,\n roundingIncrement: options.formatroundingincrement,\n roundingMode: options.formatroundingmode,\n signDisplay: options.formatsigndisplay,\n style: options.formatstyle,\n trailingZeroDisplay: options.formattrailingzerodisplay,\n unit: options.formatunit,\n unitDisplay: options.formatunitdisplay,\n useGrouping: options.formatusegrouping,\n } as Intl.NumberFormatOptions;\n\n const updateOnRelease = options.update === 'release';\n\n const isLazy = options.lazy ?? false;\n\n if (!handleElements.length || !trackElement) {\n console.error('The rangeslider is missing a Track element or a Handle element.');\n return;\n }\n\n const { left: trackLeft, right: trackRight } = trackElement.getBoundingClientRect();\n const trackWidth = trackElement.clientWidth;\n trackElement.style.position = 'relative';\n\n const minRange = options.min ?? 0;\n const maxRange = options.max ?? minRange + 1;\n const totalRange = maxRange - minRange;\n\n if (Number.isNaN(totalRange)) {\n console.error('Please make sure min and max are numbers.');\n return;\n }\n\n if (Math.sign(totalRange) === -1) {\n console.error(\"The min can't be greater than the max.\");\n return;\n }\n\n const step = options.step ?? totalRange / 100;\n const precision = getDecimalPrecision(step);\n\n if (totalRange % step > 0)\n console.error(\n `The provided step [${step}] doesn't fit the range [${minRange},${maxRange}], are you sure you want to use this value?`,\n );\n\n return {\n trackElement,\n fillElement,\n handleElements,\n inputElements,\n displayValueElements,\n formatValueDisplay,\n formatValueOptions,\n trackLeft,\n trackRight,\n trackWidth,\n minRange,\n maxRange,\n totalRange,\n step,\n precision,\n updateOnRelease,\n isLazy,\n };\n};\n", "import { isNotEmpty, isNumber } from '@adartem/adlib-utils';\n\nimport type { HandleInstances } from '../utils/types';\n\n/**\n * Returns the closest handle to an adjusted value.\n * @param adjustedValue The adjusted value through {@link adjustValueToStep}.\n * @param handles The {@link HandleInstances}.\n * @returns The closest valid `Handle`, if existing.\n */\nexport const getClosestValidHandle = (\n adjustedValue: number,\n [handle1, handle2]: HandleInstances,\n) => {\n const handle1Value = handle1.getValue();\n const handle2Value = handle2?.getValue();\n\n const closestValue = getClosestValue(adjustedValue, [handle1Value, handle2Value]);\n\n if (!isNumber(closestValue)) return;\n\n const [handle1MinValue, handle1MaxValue] = handle1.getConstraints();\n\n if (\n closestValue === handle1Value &&\n adjustedValue >= handle1MinValue &&\n adjustedValue <= handle1MaxValue\n ) {\n return handle1;\n }\n\n if (!handle2 || closestValue !== handle2Value) return;\n\n const [handle2MinValue, handle2MaxValue] = handle2.getConstraints();\n\n if (adjustedValue >= handle2MinValue && adjustedValue <= handle2MaxValue) return handle2;\n};\n\n/**\n * @returns The closest value from an array based on a reference value.\n * @param reference The reference value.\n * @param values The array of values to compare.\n */\nconst getClosestValue = (reference: number, values: (number | undefined)[]) => {\n const filteredValues = values.filter(isNotEmpty);\n\n if (!filteredValues.length) return;\n\n const closestValue = filteredValues.reduce((previous, current) =>\n Math.abs(current - reference) < Math.abs(previous - reference) ? current : previous,\n );\n\n return closestValue;\n};\n", "import type { Handle } from './Handle';\n\nexport class Fill {\n private readonly minRange;\n private readonly totalRange;\n\n private readonly handles: readonly [Handle, Handle | undefined];\n\n private trackWidth: number;\n\n constructor(\n public readonly element: HTMLElement,\n {\n minRange,\n maxRange,\n handles,\n trackWidth,\n }: {\n minRange: number;\n maxRange: number;\n handles: readonly [Handle, Handle | undefined];\n trackWidth: number;\n },\n ) {\n element.style.position = 'absolute';\n element.style.right = 'unset';\n\n this.minRange = minRange;\n this.totalRange = maxRange - minRange;\n\n this.handles = handles;\n\n this.trackWidth = trackWidth;\n\n this.update();\n }\n\n /**\n * Updates the stored track width.\n * The `update` method is fired from the Handles.\n * @param newTrackWidth The new track width.\n */\n public updateTrackWidth(newTrackWidth: number) {\n this.trackWidth = newTrackWidth;\n }\n\n /**\n * Updates the Fill width and position based on the handle's values.\n */\n public update(): void {\n const {\n element,\n trackWidth,\n minRange,\n totalRange,\n handles: [handle1, handle2],\n } = this;\n\n let left: number;\n let width: number;\n\n const leftOffset = ((handle1.getValue() - minRange) * trackWidth) / totalRange;\n\n if (handle2) {\n left = leftOffset;\n width = ((handle2.getValue() - handle1.getValue()) * trackWidth) / totalRange;\n } else {\n left = 0;\n width = leftOffset;\n }\n\n element.style.left = `${left}px`;\n element.style.width = `${width}px`;\n }\n}\n", "import {\n ARIA_LABEL_KEY,\n ARIA_LABELLEDBY_KEY,\n ARIA_ROLE_KEY,\n ARIA_ROLE_VALUES,\n TABINDEX_KEY,\n} from '@adartem/adlib-utils';\n\n/**\n * Sets the required `a11ty` attributes to a `Handle` element.\n * @param element The `Handle` element.\n * @param inputElement The correspondent `<input>` for the `Handle`, if existing.\n */\nexport const setHandleA11Y = (element: HTMLElement, inputElement?: HTMLInputElement) => {\n element.setAttribute(ARIA_ROLE_KEY, ARIA_ROLE_VALUES.slider);\n element.setAttribute(TABINDEX_KEY, '0');\n\n if (\n ![ARIA_LABEL_KEY, ARIA_LABELLEDBY_KEY].some((key) => element.getAttribute(key)) &&\n inputElement\n ) {\n element.setAttribute(ARIA_LABEL_KEY, inputElement.name);\n }\n};\n", "/**\n * Sets the required CSS styles to a `Handle` element.\n * @param element The `Handle` element.\n */\nexport const setHandleStyles = (element: HTMLElement) => {\n element.style.position = 'absolute';\n element.style.right = 'unset';\n element.style.top = `50%`;\n element.style.transform = 'translate(-50%, -50%)';\n};\n", "import {\n addListener,\n adjustValueToStep,\n ARIA_VALUEMAX_KEY,\n ARIA_VALUEMIN_KEY,\n ARIA_VALUENOW_KEY,\n setFormFieldValue,\n} from '@adartem/adlib-utils';\n\nimport { setHandleA11Y } from '../actions/a11y';\nimport { setHandleStyles } from '../actions/styles';\nimport { HANDLE_INCREMENT_KEYS, HANDLE_KEYS } from '../utils/constants';\nimport type { Fill } from './Fill';\n\nexport class Handle {\n public readonly destroy;\n\n private readonly index;\n private readonly minRange;\n private readonly maxRange;\n private readonly totalRange;\n private readonly step;\n private readonly precision;\n\n private readonly inputElement;\n private readonly displayValueElement;\n private readonly formatValueDisplay;\n private readonly formatValueOptions;\n\n private fill?: Fill;\n private sibling?: Handle;\n\n private trackWidth;\n\n private currentValue!: number;\n private minValue;\n private maxValue;\n\n private updatingInput = false;\n\n constructor(\n public readonly element: HTMLElement,\n {\n index,\n minRange,\n maxRange,\n trackWidth,\n step,\n precision,\n startValue,\n isLazy,\n inputElement,\n displayValueElement,\n formatValueDisplay,\n formatValueOptions,\n }: {\n index: number;\n minRange: number;\n maxRange: number;\n trackWidth: number;\n step: number;\n precision: number;\n startValue: number;\n isLazy: boolean;\n inputElement?: HTMLInputElement;\n displayValueElement?: HTMLElement;\n formatValueDisplay?: string;\n formatValueOptions: Intl.NumberFormatOptions;\n },\n ) {\n this.inputElement = inputElement;\n this.displayValueElement = displayValueElement;\n this.formatValueDisplay = formatValueDisplay;\n this.formatValueOptions = formatValueOptions;\n\n this.index = index;\n this.minRange = minRange;\n this.maxRange = maxRange;\n this.totalRange = maxRange - minRange;\n this.step = step;\n this.precision = precision;\n\n this.minValue = minRange;\n this.maxValue = maxRange;\n\n this.trackWidth = trackWidth;\n\n setHandleStyles(element);\n setHandleA11Y(element, inputElement);\n\n this.setValue(inputElement?.value ? parseFloat(inputElement.value) : startValue, !isLazy);\n this.destroy = this.listenEvents();\n }\n\n /**\n * Listens for internal events.\n */\n private listenEvents() {\n const { element, inputElement } = this;\n\n const cleanups = [\n addListener(element, 'keydown', (e) => this.handleKeyDown(e)),\n addListener(inputElement, 'change', () => this.handleInputChange()),\n ];\n\n return () => {\n for (const cleanup of cleanups) cleanup();\n };\n }\n\n /**\n * Handles when the keyboard is used when focusing the Handle.\n * @param e A `keydown` event.\n */\n private handleKeyDown(e: KeyboardEvent) {\n const { step, currentValue } = this;\n const { key } = e;\n\n if (!HANDLE_KEYS.includes(key)) return;\n\n e.preventDefault();\n\n if (HANDLE_INCREMENT_KEYS.includes(key)) this.setValue(currentValue + step);\n else this.setValue(currentValue - step);\n }\n\n /**\n * Handles when the value of the `<input>` element is updated by third party actions.\n */\n private handleInputChange() {\n const { inputElement, index, minRange, maxRange, step, precision, updatingInput } = this;\n if (!inputElement || updatingInput) return;\n\n const { value } = inputElement;\n\n const numericValue = parseFloat(value);\n\n if (numericValue) {\n this.setValue(adjustValueToStep(numericValue, step, precision, minRange));\n\n return;\n }\n\n this.setValue(index === 0 ? minRange : maxRange, false);\n }\n\n private formatValue(\n value: number,\n rawLocale = this.formatValueDisplay,\n options = this.formatValueOptions,\n ) {\n const locale = rawLocale === 'true' ? undefined : rawLocale;\n\n try {\n return new Intl.NumberFormat(locale, options).format(value);\n } catch {\n return new Intl.NumberFormat(window.navigator?.language || undefined, options).format(value);\n }\n }\n\n /**\n * Updates the Handle's position on the track.\n */\n private updatePosition() {\n const { currentValue, element, trackWidth, minRange, totalRange, fill } = this;\n\n const left = ((currentValue - minRange) * trackWidth) / totalRange;\n\n element.style.left = `${left}px`;\n\n fill?.update();\n }\n\n /**\n * @returns The current value of the Handle.\n */\n public getValue = (): number => this.currentValue;\n\n /**\n * Sets a new value to the Handle.\n * The Handle's position is automatically updated based on the new value.\n * @param newValue The new value to set.\n * @param updateInputElement Defines if the `<input>` element should be updated. Defaults to `true`.\n *\n * @returns `true` if the current value was updated.\n */\n public setValue(newValue: number, updateInputElement = true): boolean {\n const { currentValue, element, minValue, maxValue, displayValueElement, formatValueDisplay } =\n this;\n\n if (currentValue === newValue || newValue < minValue || newValue > maxValue) return false;\n\n this.currentValue = newValue;\n\n this.updatePosition();\n this.updateSiblingConstraints();\n\n const stringValue = `${newValue}`;\n\n element.setAttribute(ARIA_VALUENOW_KEY, stringValue);\n\n if (displayValueElement)\n displayValueElement.textContent = formatValueDisplay\n ? this.formatValue(newValue, formatValueDisplay)\n : stringValue;\n\n if (updateInputElement) this.updateInputElement();\n\n return true;\n }\n\n /**\n * Updates the input element's value.\n */\n public updateInputElement() {\n this.updatingInput = true;\n\n const { currentValue, inputElement } = this;\n\n if (!inputElement) return;\n\n setFormFieldValue(inputElement, currentValue.toFixed(2));\n\n this.updatingInput = false;\n }\n\n /**\n * @returns The Handle's constraints.\n */\n public getConstraints = (): [number, number] => [this.minValue, this.maxValue];\n\n /**\n * Sets new constraints to the Handle.\n * @param minValue The new minimum value.\n * @param maxValue The new maximum value.\n */\n public setConstraints(minValue: number, maxValue: number): void {\n const { element } = this;\n\n const minValFixed = minValue.toFixed(2);\n const maxValFixed = maxValue.toFixed(2);\n\n element.setAttribute(ARIA_VALUEMIN_KEY, minValFixed);\n element.setAttribute(ARIA_VALUEMAX_KEY, maxValFixed);\n\n this.minValue = Number(minValFixed);\n this.maxValue = Number(maxValFixed);\n }\n\n /**\n * Updates the sibling's constaints, if existing.\n */\n public updateSiblingConstraints() {\n const { index, sibling, step, minRange, maxRange, currentValue } = this;\n\n if (!sibling) return;\n\n if (index === 0) sibling.setConstraints(currentValue + step, maxRange);\n else sibling.setConstraints(minRange, currentValue - step);\n }\n\n /**\n * Updates the stored track width and the Handle's position on the track.\n * @param newTrackWidth The new track width.\n */\n public updateTrackWidth(newTrackWidth: number) {\n this.trackWidth = newTrackWidth;\n\n this.fill?.updateTrackWidth(newTrackWidth);\n this.updatePosition();\n }\n\n /**\n * Adds a `Fill` instance to the Handle.\n * @param fill A {@link Fill} instance.\n */\n public addFill(fill: Fill) {\n this.fill = fill;\n }\n\n /**\n * Adds a sibling Handle.\n * @param sibling A {@link Handle} instance.\n */\n public addSibling(sibling: Handle) {\n this.sibling = sibling;\n\n this.updateSiblingConstraints();\n }\n}\n", "import { adjustValueToStep, isNotEmpty, readOption } from '@adartem/adlib-utils';\n\nimport { Fill } from './components/Fill';\nimport { Handle } from './components/Handle';\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport type { HandleInstances, RangeSliderSettings } from './utils/types';\n\n/**\n * Creates {@link Handle} instances and sets them up.\n * @param settings The {@link RangeSliderSettings}.\n * @returns The new {@link Handle} instances.\n */\nexport const createHandleInstances = ({\n handleElements,\n inputElements,\n displayValueElements,\n formatValueDisplay,\n formatValueOptions,\n minRange,\n maxRange,\n trackWidth,\n step,\n precision,\n isLazy,\n}: RangeSliderSettings): HandleInstances | undefined => {\n const handles = handleElements\n .slice(0, 2)\n .map((handleElement, index) => {\n const rawStartValue =\n readOption(handleElement, MODULE_KEY, 'start', OPTIONS.start, {\n includeGlobal: false,\n }) ?? (index === 0 ? minRange : maxRange);\n\n let startValue = adjustValueToStep(rawStartValue, step, precision, minRange);\n\n const inputElement = inputElements[index];\n const displayValueElement = displayValueElements[index];\n\n if (startValue < minRange) {\n console.error(\n `The Handle start value [${startValue}] doesn't match the range, so it has been set to the min value [${minRange}].`,\n );\n startValue = minRange;\n }\n\n if (startValue > maxRange) {\n console.error(\n `The Handle start value [${startValue}] doesn't match the range, so it has been set to the max value [${maxRange}].`,\n );\n startValue = maxRange;\n }\n\n const handle = new Handle(handleElement, {\n index,\n minRange,\n maxRange,\n trackWidth,\n step,\n precision,\n startValue,\n inputElement,\n displayValueElement,\n formatValueOptions,\n formatValueDisplay,\n isLazy,\n });\n\n return handle;\n })\n .filter(isNotEmpty);\n\n if (!handles.length) return;\n\n // Sort them by start value\n if (handles.length > 1)\n handles.sort((handle1, handle2) => handle1.getValue() - handle2.getValue());\n\n const [handle1, handle2] = handles;\n\n // Add relationships\n if (handle2) {\n handle1.addSibling(handle2);\n handle2.addSibling(handle1);\n } else handle1.setConstraints(minRange, maxRange);\n\n return [handle1, handle2];\n};\n\n/**\n * Creates a `Fill` instance and adds it to the Handles.\n * @param settings The settings returned by {@link getSettings}.\n * @param handles The {@link HandleInstances} tuple.\n * @returns\n */\nexport const createFillInstance = (\n { fillElement, minRange, maxRange, trackWidth }: RangeSliderSettings,\n handles: HandleInstances,\n) => {\n if (!fillElement) return;\n\n const fill = new Fill(fillElement, { minRange, maxRange, trackWidth, handles });\n const [handle1, handle2] = handles;\n\n handle1.addFill(fill);\n handle2?.addFill(fill);\n};\n", "import {\n addListener,\n adjustValueToStep,\n type AdLibAttributeInit,\n createCleanupBag,\n getHiddenParent,\n isVisible,\n readOptionsFromAttributes,\n runActivationPipeline,\n waitWebflowReady,\n} from '@adartem/adlib-utils';\nimport debounce from 'just-debounce';\n\nimport { getClientX } from './actions/events';\nimport { getSettings } from './actions/settings';\nimport { getClosestValidHandle } from './actions/values';\nimport type { Handle } from './components/Handle';\nimport { createFillInstance, createHandleInstances } from './factory';\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport { queryAllElements } from './utils/selectors';\nimport type { HandleInstances } from './utils/types';\n\ninterface ModuleDiagnostics {\n activeCount: number;\n disabledCount: number;\n guardFailedCount: number;\n lastNonActivationReason?: 'disabled' | 'guard-failed';\n}\n\n/**\n * Inits the attribute.\n */\nexport const init: AdLibAttributeInit = async () => {\n const bag = createCleanupBag();\n\n await waitWebflowReady();\n\n const diagnostics: ModuleDiagnostics = {\n activeCount: 0,\n disabledCount: 0,\n guardFailedCount: 0,\n };\n\n const wrapperElements = queryAllElements('wrapper');\n const rangeSlidersData: Array<{ handles: HandleInstances; destroy: () => void }> = [];\n\n for (const wrapper of wrapperElements) {\n const result = await runActivationPipeline({\n el: wrapper,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () =>\n readOptionsFromAttributes(wrapper, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n }),\n action: () => {\n const rangeSliderData = initRangeSlider(wrapper);\n if (rangeSliderData) {\n bag.add(rangeSliderData.destroy);\n rangeSlidersData.push(rangeSliderData);\n }\n },\n });\n\n if (result.ok) {\n diagnostics.activeCount++;\n } else if (result.reason === 'disabled') {\n diagnostics.disabledCount++;\n diagnostics.lastNonActivationReason = 'disabled';\n } else if (result.reason === 'guard-failed') {\n diagnostics.guardFailedCount++;\n diagnostics.lastNonActivationReason = 'guard-failed';\n }\n }\n\n const handleInstances = rangeSlidersData.map(({ handles }) => handles);\n\n return {\n result: { handles: handleInstances, diagnostics },\n destroy() {\n bag.run();\n },\n };\n};\n\n/**\n * Inits a range slider.\n * @param wrapperElement The wrapper element.\n * @returns The {@link HandleInstances}.\n */\nconst initRangeSlider = (wrapperElement: HTMLElement) => {\n const bag = createCleanupBag();\n\n const settings = getSettings(wrapperElement);\n if (!settings) return;\n\n const handles = createHandleInstances(settings);\n if (!handles) return;\n\n createFillInstance(settings, handles);\n\n const { maxRange, minRange, step, precision, totalRange, trackElement, updateOnRelease } =\n settings;\n\n let { trackWidth, trackLeft, trackRight } = settings;\n let focusedHandle: Handle | undefined;\n let focusedHandleHasUpdated = false;\n\n /**\n * Calculates the value based on where the user clicked and adjusts it to the step increment,\n * @param clientX The event `clientX` value.\n */\n const calculateNewValue = (clientX: number) => {\n const value = minRange + ((clientX - trackLeft) * totalRange) / trackWidth;\n\n const adjustedValue = adjustValueToStep(value, step, precision, minRange);\n return adjustedValue;\n };\n\n /**\n * Handles when the user moves the cursor/finger while holding down a {@link Handle}.\n * @param e A `mousemove` or `touchmove` event.\n */\n const handleMouseMove = (e: MouseEvent | TouchEvent) => {\n if (!focusedHandle) return;\n\n if (e instanceof MouseEvent) e.preventDefault();\n\n const clientX = getClientX(e);\n const [minValue, maxValue] = focusedHandle.getConstraints();\n\n let value: number;\n\n if (trackLeft > clientX) value = minValue;\n else if (trackRight < clientX) value = maxValue;\n else value = calculateNewValue(clientX);\n\n const hasUpdatedValue = focusedHandle.setValue(value, !updateOnRelease);\n\n focusedHandleHasUpdated ||= hasUpdatedValue;\n };\n\n let dragCleanups: Array<() => void> = [];\n\n const cleanupDrag = () => {\n for (const cleanup of dragCleanups) cleanup();\n dragCleanups = [];\n };\n\n /**\n * Handles when the user releases the currently focused {@link Handle}.\n * @param e A `mouseup` or `touchend` event.\n */\n const handleMouseUp = (e: MouseEvent | TouchEvent) => {\n if (e.cancelable) e.preventDefault();\n\n cleanupDrag();\n\n if (updateOnRelease && focusedHandleHasUpdated) focusedHandle?.updateInputElement();\n\n focusedHandleHasUpdated = false;\n\n focusedHandle?.element.blur();\n focusedHandle = undefined;\n };\n\n /**\n * Handles when the user holds down a {@link Handle}.\n * @param e A `mousedown` or `touchstart` event.\n */\n const handleMouseDown = (e: MouseEvent | TouchEvent) => {\n if (e.cancelable) e.preventDefault();\n\n const clientX = getClientX(e);\n\n dragCleanups = [\n addListener(document, 'mousemove', handleMouseMove),\n addListener(document, 'touchmove', handleMouseMove, { passive: true }),\n addListener(document, 'mouseup', handleMouseUp),\n addListener(document, 'touchend', handleMouseUp),\n ];\n\n let value: number;\n\n if (trackLeft > clientX) value = minRange;\n else if (trackRight < clientX) value = maxRange;\n else value = calculateNewValue(clientX);\n\n const closestHandle = getClosestValidHandle(value, handles);\n if (!closestHandle) return;\n\n closestHandle.element.focus();\n\n focusedHandle = closestHandle;\n\n const hasUpdatedValue = closestHandle.setValue(value, !updateOnRelease);\n\n focusedHandleHasUpdated ||= hasUpdatedValue;\n };\n\n /**\n * Updates the stored `trackWidth` value and the Handles' position.\n */\n const handleDOMMutation = () => {\n trackWidth = trackElement.clientWidth;\n\n ({ left: trackLeft, right: trackRight } = trackElement.getBoundingClientRect());\n\n for (const handle of handles) {\n if (handle) handle.updateTrackWidth(trackWidth);\n }\n };\n\n /**\n * If the wrapper is initially hidden, observes mutations and performs the needed actions.\n */\n const observeWrapperVisibility = () => {\n const hiddenParent = getHiddenParent(wrapperElement);\n if (!hiddenParent) return;\n\n const observer = new MutationObserver(() => {\n if (isVisible(hiddenParent)) handleDOMMutation();\n });\n\n observer.observe(hiddenParent, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n });\n\n bag.add(() => observer.disconnect());\n };\n\n /**\n * Init events\n */\n observeWrapperVisibility();\n bag.add(addListener(trackElement, 'mousedown', handleMouseDown));\n bag.add(addListener(trackElement, 'touchstart', handleMouseDown, { passive: true }));\n bag.add(addListener(window, 'resize', debounce(handleDOMMutation, 50)));\n bag.add(cleanupDrag);\n\n return {\n handles,\n destroy: () => {\n bag.run();\n },\n };\n};\n", "{\n \"name\": \"@adartem/ad-rangeslider\",\n \"version\": \"0.1.0\",\n \"description\": \"Build a custom Range Slider Form component natively in Webflow.\",\n \"private\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"scripts\": {\n \"lint\": \"eslint ./src && prettier --check ./src\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"typecheck\": \"tsc --noEmit\",\n \"build\": \"tsup --config tsup.config.ts\",\n \"test\": \"vitest run -c ../../vitest.config.ts\",\n \"dev\": \"tsup --config tsup.config.ts --watch\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"just-debounce\": \"^1.1.0\",\n \"@adartem/adlib-utils\": \"workspace:*\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["getClientX", "e", "MODULE_KEY", "ELEMENTS", "SETTINGS", "OPTIONS", "HANDLE_INCREMENT_KEYS", "ARROW_UP_KEY", "ARROW_RIGHT_KEY", "HANDLE_DECREMENT_KEYS", "ARROW_DOWN_KEY", "ARROW_LEFT_KEY", "HANDLE_KEYS", "getInstance", "getPresenceSelector", "getElementSelector", "getSettingSelector", "queryElement", "queryAllElements", "getAttribute", "hasAttributeValue", "generateSelectors", "getSettings", "wrapperElement", "trackElement", "fillElement", "inputElements", "isFormField", "handleElements", "displayValueElements", "options", "readOptionsFromAttributes", "formatValueDisplay", "formatValueOptions", "updateOnRelease", "isLazy", "trackLeft", "trackRight", "trackWidth", "minRange", "maxRange", "totalRange", "step", "precision", "getDecimalPrecision", "getClosestValidHandle", "adjustedValue", "handle1", "handle2", "handle1Value", "handle2Value", "closestValue", "getClosestValue", "isNumber", "handle1MinValue", "handle1MaxValue", "handle2MinValue", "handle2MaxValue", "reference", "values", "filteredValues", "isNotEmpty", "previous", "current", "Fill", "element", "handles", "__publicField", "newTrackWidth", "left", "width", "leftOffset", "setHandleA11Y", "inputElement", "ARIA_ROLE_KEY", "ARIA_ROLE_VALUES", "TABINDEX_KEY", "ARIA_LABEL_KEY", "ARIA_LABELLEDBY_KEY", "key", "setHandleStyles", "Handle", "index", "startValue", "displayValueElement", "cleanups", "addListener", "cleanup", "currentValue", "updatingInput", "value", "numericValue", "adjustValueToStep", "rawLocale", "locale", "fill", "newValue", "updateInputElement", "minValue", "maxValue", "stringValue", "ARIA_VALUENOW_KEY", "setFormFieldValue", "minValFixed", "maxValFixed", "ARIA_VALUEMIN_KEY", "ARIA_VALUEMAX_KEY", "sibling", "createHandleInstances", "handleElement", "rawStartValue", "readOption", "createFillInstance", "init", "bag", "createCleanupBag", "waitWebflowReady", "diagnostics", "wrapperElements", "rangeSlidersData", "wrapper", "result", "runActivationPipeline", "rangeSliderData", "initRangeSlider", "settings", "focusedHandle", "focusedHandleHasUpdated", "calculateNewValue", "clientX", "handleMouseMove", "hasUpdatedValue", "dragCleanups", "cleanupDrag", "handleMouseUp", "handleMouseDown", "closestHandle", "handleDOMMutation", "handle", "hiddenParent", "getHiddenParent", "observer", "isVisible", "debounce", "version", "index_default", "defineModule", "core", "res"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Jo,
|
|
3
|
+
Nt,
|
|
4
|
+
Xt,
|
|
5
|
+
init_live_reload,
|
|
6
|
+
rr,
|
|
7
|
+
wn,
|
|
8
|
+
zo
|
|
9
|
+
} from "./chunk-IEGIKJKW.js";
|
|
10
|
+
|
|
11
|
+
// ../readtime/dist/index.js
|
|
12
|
+
init_live_reload();
|
|
13
|
+
var e = "ad-readtime";
|
|
14
|
+
var a = ["contents", "time"];
|
|
15
|
+
var r = { disabled: { key: "disabled", values: ["true"] }, wpm: { key: "wpm", defaultValue: "265", isNumeric: true }, decimals: { key: "decimals", defaultValue: "0", isNumeric: true }, a11y: { key: "a11y", values: ["false"] } };
|
|
16
|
+
var p = { wpm: { type: "number", default: 265 }, decimals: { type: "number", default: 0 }, a11y: { type: "boolean", default: true } };
|
|
17
|
+
var { getInstance: f, getPresenceSelector: D, getElementSelector: R, getSettingSelector: K, queryElement: y, queryAllElements: E, getAttribute: F, hasAttributeValue: G } = Jo(e, a, r);
|
|
18
|
+
var d = async () => {
|
|
19
|
+
await rr();
|
|
20
|
+
let n = Nt(), i = E("time"), t = { activeCount: 0, disabledCount: 0, guardFailedCount: 0 };
|
|
21
|
+
for (let s of i) {
|
|
22
|
+
let o = await Xt({ el: s, moduleKey: e, includeGlobal: false, guardsRegistry: {}, readOptions: () => zo(s, e, p, { includeGlobal: false }), action: (c) => {
|
|
23
|
+
let b = f(s), l = y("contents", { instance: b });
|
|
24
|
+
if (!l) return;
|
|
25
|
+
let g = l.innerText.match(/[\w\d''-]+/gi)?.length ?? 0, S = c.wpm ?? 265, u = c.decimals ?? 0, m = g / S;
|
|
26
|
+
s.textContent = !u && m < 0.5 ? "1" : m.toFixed(u);
|
|
27
|
+
} });
|
|
28
|
+
o.ok ? t.activeCount++ : o.reason === "disabled" ? (t.disabledCount++, t.lastNonActivationReason = "disabled") : o.reason === "guard-failed" && (t.guardFailedCount++, t.lastNonActivationReason = "guard-failed");
|
|
29
|
+
}
|
|
30
|
+
return { result: { diagnostics: t }, destroy() {
|
|
31
|
+
n.run();
|
|
32
|
+
} };
|
|
33
|
+
};
|
|
34
|
+
var T = "0.1.0";
|
|
35
|
+
var z = wn({ key: e, init: async (n) => {
|
|
36
|
+
let i = Nt(), t = await d();
|
|
37
|
+
return t && typeof t.destroy == "function" && i.add(() => {
|
|
38
|
+
try {
|
|
39
|
+
t.destroy();
|
|
40
|
+
} catch {
|
|
41
|
+
}
|
|
42
|
+
}), { key: e, destroy: () => i.run() };
|
|
43
|
+
} });
|
|
44
|
+
export {
|
|
45
|
+
a as ELEMENTS,
|
|
46
|
+
e as MODULE_KEY,
|
|
47
|
+
r as SETTINGS,
|
|
48
|
+
z as default,
|
|
49
|
+
d as init,
|
|
50
|
+
T as version
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=dist-D2J4YZM6.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../readtime/src/utils/constants.ts", "../../readtime/src/utils/selectors.ts", "../../readtime/src/init.ts", "../../readtime/package.json", "../../readtime/src/index.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type AttributeElements,\n type AttributeSettings,\n type OptionsSchema,\n} from '@adartem/adlib-utils';\n\nexport const MODULE_KEY = 'ad-readtime' as const;\n\nexport const ELEMENTS = [\n /**\n * Defines any wrapper that contains the content to be metered.\n */\n 'contents',\n\n /**\n * Defines the element that will display the time.\n */\n 'time',\n] as const satisfies AttributeElements;\n\nexport const SETTINGS = {\n /**\n * Defines if the module is disabled.\n */\n disabled: {\n key: 'disabled',\n values: ['true'],\n },\n\n /**\n * Defines the Words Per Minute ratio.\n */\n wpm: {\n key: 'wpm',\n defaultValue: '265',\n isNumeric: true,\n },\n\n /**\n * Defines the amount of decimals displayed in the time output.\n */\n decimals: {\n key: 'decimals',\n defaultValue: '0',\n isNumeric: true,\n },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { key: 'a11y', values: ['false'] },\n} as const satisfies AttributeSettings;\n\nexport const OPTIONS = {\n wpm: { type: 'number', default: 265 },\n decimals: { type: 'number', default: 0 },\n a11y: { type: 'boolean', default: true },\n} as const satisfies OptionsSchema;\n", "import { generateSelectors } from '@adartem/adlib-utils';\n\nimport { ELEMENTS, MODULE_KEY, SETTINGS } from './constants';\n\nexport const {\n getInstance,\n getPresenceSelector,\n getElementSelector,\n getSettingSelector,\n queryElement,\n queryAllElements,\n getAttribute,\n hasAttributeValue,\n} = generateSelectors(MODULE_KEY, ELEMENTS, SETTINGS);\n", "import {\n type AdLibAttributeInit,\n createCleanupBag,\n readOptionsFromAttributes,\n runActivationPipeline,\n waitWebflowReady,\n} from '@adartem/adlib-utils';\n\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport { getInstance, queryAllElements, queryElement } from './utils/selectors';\n\ninterface ModuleDiagnostics {\n activeCount: number;\n disabledCount: number;\n guardFailedCount: number;\n lastNonActivationReason?: 'disabled' | 'guard-failed';\n}\n\n/**\n * Inits the attribute.\n */\nexport const init: AdLibAttributeInit = async () => {\n await waitWebflowReady();\n\n const bag = createCleanupBag();\n const timeElements = queryAllElements('time');\n\n const diagnostics: ModuleDiagnostics = {\n activeCount: 0,\n disabledCount: 0,\n guardFailedCount: 0,\n };\n\n for (const timeElement of timeElements) {\n const result = await runActivationPipeline({\n el: timeElement,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () =>\n readOptionsFromAttributes(timeElement, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n }),\n action: (options) => {\n const instance = getInstance(timeElement);\n const contentsElement = queryElement('contents', { instance });\n if (!contentsElement) return;\n\n const wordsCount = contentsElement.innerText.match(/[\\w\\d''-]+/gi)?.length ?? 0;\n const wpm = options.wpm ?? 265;\n const decimals = options.decimals ?? 0;\n const readTime = wordsCount / wpm;\n\n timeElement.textContent = !decimals && readTime < 0.5 ? '1' : readTime.toFixed(decimals);\n },\n });\n\n if (result.ok) {\n diagnostics.activeCount++;\n } else if (result.reason === 'disabled') {\n diagnostics.disabledCount++;\n diagnostics.lastNonActivationReason = 'disabled';\n } else if (result.reason === 'guard-failed') {\n diagnostics.guardFailedCount++;\n diagnostics.lastNonActivationReason = 'guard-failed';\n }\n }\n\n return {\n result: { diagnostics },\n destroy() {\n bag.run();\n },\n };\n};\n", "{\n \"name\": \"@adartem/ad-readtime\",\n \"version\": \"0.1.0\",\n \"description\": \"Calculate and display the estimated read time of Rich Text content based on word count.\",\n \"private\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"scripts\": {\n \"lint\": \"eslint ./src && prettier --check ./src\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"typecheck\": \"tsc --noEmit\",\n \"build\": \"tsup --config tsup.config.ts\",\n \"test\": \"vitest run -c ../../vitest.config.ts\",\n \"dev\": \"tsup --config tsup.config.ts --watch\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"@adartem/adlib-utils\": \"workspace:*\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n", "import { createCleanupBag, defineModule } from '@adartem/adlib-utils';\n\nimport { init as legacyInit } from './init';\nimport { MODULE_KEY } from './utils/constants';\n\nexport default defineModule({\n key: MODULE_KEY,\n init: async (core) => {\n void core;\n\n const bag = createCleanupBag();\n const res = await legacyInit();\n\n if (res && typeof (res as { destroy?: unknown }).destroy === 'function') {\n bag.add(() => {\n try {\n (res as { destroy: () => void }).destroy();\n } catch {\n // best-effort\n }\n });\n }\n\n return {\n key: MODULE_KEY,\n destroy: () => bag.run(),\n };\n },\n});\n\nexport { version } from '../package.json';\nexport { init } from './init';\nexport { ELEMENTS, MODULE_KEY, SETTINGS } from './utils/constants';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;AAMO,IAAMA,IAAa;AAAnB,IAEMC,IAAW,CAItB,YAKA,MACF;AAZO,IAcMC,IAAW,EAItB,UAAU,EACR,KAAK,YACL,QAAQ,CAAC,MAAM,EACjB,GAKA,KAAK,EACH,KAAK,OACL,cAAc,OACd,WAAW,KACb,GAKA,UAAU,EACR,KAAK,YACL,cAAc,KACd,WAAW,KACb,GAMA,MAAM,EAAE,KAAK,QAAQ,QAAQ,CAAC,OAAO,EAAE,EACzC;AA9CO,IAgDMC,IAAU,EACrB,KAAK,EAAE,MAAM,UAAU,SAAS,IAAI,GACpC,UAAU,EAAE,MAAM,UAAU,SAAS,EAAE,GACvC,MAAM,EAAE,MAAM,WAAW,SAAS,KAAK,EACzC;ACtDO,IAAM,EACX,aAAAC,GACA,qBAAAC,GACA,oBAAAC,GACA,oBAAAC,GACA,cAAAC,GACA,kBAAAC,GACA,cAAAC,GACA,mBAAAC,EACF,IAAIC,GAAkBZ,GAAYC,GAAUC,CAAQ;ACQ7C,IAAMW,IAA2B,YAAY;AAClD,QAAMC,GAAAA;AAEN,MAAMC,IAAMC,GAAAA,GACNC,IAAeR,EAAiB,MAAM,GAEtCS,IAAiC,EACrC,aAAa,GACb,eAAe,GACf,kBAAkB,EACpB;AAEA,WAAWC,KAAeF,GAAc;AACtC,QAAMG,IAAS,MAAMC,GAAsB,EACzC,IAAIF,GACJ,WAAWnB,GACX,eAAe,OACf,gBAAgB,CAAA,GAChB,aAAa,MACXsB,GAA0BH,GAAanB,GAAYG,GAAS,EAC1D,eAAe,MACjB,CAAC,GACH,QAASoB,OAAY;AACnB,UAAMC,IAAWpB,EAAYe,CAAW,GAClCM,IAAkBjB,EAAa,YAAY,EAAE,UAAAgB,EAAS,CAAC;AAC7D,UAAI,CAACC,EAAiB;AAEtB,UAAMC,IAAaD,EAAgB,UAAU,MAAM,cAAc,GAAG,UAAU,GACxEE,IAAMJ,EAAQ,OAAO,KACrBK,IAAWL,EAAQ,YAAY,GAC/BM,IAAWH,IAAaC;AAE9BR,QAAY,cAAc,CAACS,KAAYC,IAAW,MAAM,MAAMA,EAAS,QAAQD,CAAQ;IACzF,EACF,CAAC;AAEGR,MAAO,KACTF,EAAY,gBACHE,EAAO,WAAW,cAC3BF,EAAY,iBACZA,EAAY,0BAA0B,cAC7BE,EAAO,WAAW,mBAC3BF,EAAY,oBACZA,EAAY,0BAA0B;EAE1C;AAEA,SAAO,EACL,QAAQ,EAAE,aAAAA,EAAY,GACtB,UAAU;AACRH,MAAI,IAAA;EACN,EACF;AACF;AAAA,ICxEEe,IAAW;ACGb,IAAOC,IAAQC,GAAa,EAC1B,KAAKhC,GACL,MAAM,OAAOiC,MAAS;AAGpB,MAAMlB,IAAMC,GAAAA,GACNkB,IAAM,MAAMrB,EAAAA;AAElB,SAAIqB,KAAO,OAAQA,EAA8B,WAAY,cAC3DnB,EAAI,IAAI,MAAM;AACZ,QAAI;AACDmB,QAAgC,QAAA;IACnC,QAAQ;IAER;EACF,CAAC,GAGI,EACL,KAAKlC,GACL,SAAS,MAAMe,EAAI,IAAA,EACrB;AACF,EACF,CAAC;",
|
|
6
|
+
"names": ["MODULE_KEY", "ELEMENTS", "SETTINGS", "OPTIONS", "getInstance", "getPresenceSelector", "getElementSelector", "getSettingSelector", "queryElement", "queryAllElements", "getAttribute", "hasAttributeValue", "generateSelectors", "init", "waitWebflowReady", "bag", "createCleanupBag", "timeElements", "diagnostics", "timeElement", "result", "runActivationPipeline", "readOptionsFromAttributes", "options", "instance", "contentsElement", "wordsCount", "wpm", "decimals", "readTime", "version", "index_default", "defineModule", "core", "res"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import {
|
|
2
|
+
At,
|
|
3
|
+
Dn,
|
|
4
|
+
Dt,
|
|
5
|
+
Jo,
|
|
6
|
+
Mn,
|
|
7
|
+
N,
|
|
8
|
+
Nt,
|
|
9
|
+
Xt,
|
|
10
|
+
_n,
|
|
11
|
+
at,
|
|
12
|
+
ie,
|
|
13
|
+
init_live_reload,
|
|
14
|
+
kn,
|
|
15
|
+
rr,
|
|
16
|
+
tn,
|
|
17
|
+
vt,
|
|
18
|
+
wn,
|
|
19
|
+
zo
|
|
20
|
+
} from "./chunk-IEGIKJKW.js";
|
|
21
|
+
|
|
22
|
+
// ../starrating/dist/index.js
|
|
23
|
+
init_live_reload();
|
|
24
|
+
var i = "ad-starrating";
|
|
25
|
+
var v = ["group", "star"];
|
|
26
|
+
var A = { disabled: { key: "disabled", values: ["true"] }, a11y: { key: "a11y", values: ["false"] } };
|
|
27
|
+
var p = { activeclass: { type: "string", default: `is-${at}-active` }, disabled: { type: "boolean", default: false }, a11y: { type: "boolean", default: true } };
|
|
28
|
+
var { getInstance: ie2, getPresenceSelector: ae, getElementSelector: m, getSettingSelector: le, queryElement: M, queryAllElements: w, getAttribute: ce, hasAttributeValue: ue } = Jo(i, v, A);
|
|
29
|
+
var L = (e) => e.closest(m("group"));
|
|
30
|
+
var f = (e) => e.closest(`.${N.radioField}`);
|
|
31
|
+
var E = (e) => M("star", { scope: e });
|
|
32
|
+
var R = (e) => `input[type="radio"]${e ? `[name="${e}"]` : ""}`;
|
|
33
|
+
var C = (e) => e.querySelector(R());
|
|
34
|
+
var S = (e = document, t) => [...e.querySelectorAll(R(t))];
|
|
35
|
+
var I = (e) => {
|
|
36
|
+
let t, o = document.querySelector(`${R(e)}:checked`);
|
|
37
|
+
if (o) {
|
|
38
|
+
let r = parseInt(o.value);
|
|
39
|
+
isNaN(r) || (t = r);
|
|
40
|
+
}
|
|
41
|
+
return t;
|
|
42
|
+
};
|
|
43
|
+
var g = (e, t, o) => {
|
|
44
|
+
let r = At(t, i, "activeclass", p.activeclass, { includeGlobal: false }), n = I(e), l = S(document, e);
|
|
45
|
+
for (let c of l) {
|
|
46
|
+
let s = f(c);
|
|
47
|
+
if (!s) continue;
|
|
48
|
+
let a = E(s);
|
|
49
|
+
if (!a) continue;
|
|
50
|
+
let u = At(a, i, "activeclass", p.activeclass, { includeGlobal: false }) || r;
|
|
51
|
+
if (!u) continue;
|
|
52
|
+
let d = parseInt(c.value), q = ie(o) && d <= o, D = ie(n) && d <= n;
|
|
53
|
+
q || D ? a.classList.add(u) : a.classList.remove(u);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
var y = /* @__PURE__ */ new Set();
|
|
57
|
+
var h = () => [kn(window, "input", G), kn(window, "mouseover", G), kn(window, "mouseover", U), () => y.clear()];
|
|
58
|
+
var G = ({ target: e }) => {
|
|
59
|
+
if (!tn(e)) return;
|
|
60
|
+
let t = f(e);
|
|
61
|
+
if (!t) return;
|
|
62
|
+
let o = L(e);
|
|
63
|
+
if (!o || !E(t)) return;
|
|
64
|
+
let n = C(t);
|
|
65
|
+
if (!n) return;
|
|
66
|
+
let { name: l, value: c } = n, s = parseInt(c);
|
|
67
|
+
isNaN(s) || (y.add(o), g(l, o, s));
|
|
68
|
+
};
|
|
69
|
+
var U = ({ target: e }) => {
|
|
70
|
+
if (y.size && tn(e)) for (let t of y) {
|
|
71
|
+
let o = L(e);
|
|
72
|
+
if (!o || t !== o) {
|
|
73
|
+
let r = E(t);
|
|
74
|
+
if (!r) continue;
|
|
75
|
+
let n = f(r);
|
|
76
|
+
if (!n) continue;
|
|
77
|
+
let l = C(n);
|
|
78
|
+
if (!l) continue;
|
|
79
|
+
g(l.name, t), y.delete(t);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
var _ = (e) => {
|
|
84
|
+
e.setAttribute(Mn, Dn.radiogroup);
|
|
85
|
+
let o = S(e).reduce((r, { name: n }) => (r.add(n), r), /* @__PURE__ */ new Set());
|
|
86
|
+
for (let r of o) g(r, e);
|
|
87
|
+
};
|
|
88
|
+
var T = async () => {
|
|
89
|
+
let e = Nt();
|
|
90
|
+
await rr();
|
|
91
|
+
let t = { activeCount: 0, disabledCount: 0, guardFailedCount: 0 }, o = w("group"), r = [], n = /* @__PURE__ */ new Map();
|
|
92
|
+
for (let s of o) {
|
|
93
|
+
let a = await Xt({ el: s, moduleKey: i, includeGlobal: false, guardsRegistry: {}, readOptions: () => zo(s, i, p, { includeGlobal: false }), action: (b) => {
|
|
94
|
+
if (_(s), r.push(s), b.a11y !== false) {
|
|
95
|
+
let u = s.querySelectorAll(m("star"));
|
|
96
|
+
for (let d of u) Dt(d), n.set(d, true);
|
|
97
|
+
}
|
|
98
|
+
} });
|
|
99
|
+
a.ok ? t.activeCount++ : a.reason === "disabled" ? (t.disabledCount++, t.lastNonActivationReason = "disabled") : a.reason === "guard-failed" && (t.guardFailedCount++, t.lastNonActivationReason = "guard-failed");
|
|
100
|
+
}
|
|
101
|
+
let l = _n(m("star"), { keydown: ({ event: s, el: a }) => {
|
|
102
|
+
n.get(a) && vt(s) && ((s.key === " " || s.key === "Spacebar") && s.preventDefault(), a.click());
|
|
103
|
+
} });
|
|
104
|
+
return e.add(l), h().forEach((s) => e.add(s)), { result: { groups: r, diagnostics: t }, destroy() {
|
|
105
|
+
e.run();
|
|
106
|
+
} };
|
|
107
|
+
};
|
|
108
|
+
var X = "0.1.0";
|
|
109
|
+
var De = wn({ key: i, init: async (e) => {
|
|
110
|
+
let t = Nt(), o = await T();
|
|
111
|
+
return o && typeof o.destroy == "function" && t.add(() => {
|
|
112
|
+
try {
|
|
113
|
+
o.destroy();
|
|
114
|
+
} catch {
|
|
115
|
+
}
|
|
116
|
+
}), { key: i, destroy: () => t.run() };
|
|
117
|
+
} });
|
|
118
|
+
export {
|
|
119
|
+
v as ELEMENTS,
|
|
120
|
+
i as MODULE_KEY,
|
|
121
|
+
A as SETTINGS,
|
|
122
|
+
De as default,
|
|
123
|
+
T as init,
|
|
124
|
+
X as version
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=dist-D2X7FLMD.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../starrating/src/utils/constants.ts", "../../starrating/src/utils/selectors.ts", "../../starrating/src/utils/helpers.ts", "../../starrating/src/actions/classes.ts", "../../starrating/src/actions/events.ts", "../../starrating/src/factory.ts", "../../starrating/src/init.ts", "../../starrating/package.json", "../../starrating/src/index.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type AttributeElements,\n type AttributeSettings,\n type OptionsSchema,\n STAR_RATING_ATTRIBUTE,\n} from '@adartem/adlib-utils';\n\nexport const MODULE_KEY = 'ad-starrating' as const;\n\nexport const ELEMENTS = [\n /**\n * Defines a stars wrapper.\n */\n 'group',\n\n /**\n * Defines a star element.\n */\n 'star',\n] as const satisfies AttributeElements;\n\nexport const SETTINGS = {\n /**\n * Disables the star rating group.\n */\n disabled: { key: 'disabled', values: ['true'] },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { key: 'a11y', values: ['false'] },\n} as const satisfies AttributeSettings;\n\nexport const OPTIONS = {\n activeclass: { type: 'string', default: `is-${STAR_RATING_ATTRIBUTE}-active` },\n disabled: { type: 'boolean', default: false },\n a11y: { type: 'boolean', default: true },\n} as const satisfies OptionsSchema;\n", "import { generateSelectors } from '@adartem/adlib-utils';\n\nimport { ELEMENTS, MODULE_KEY, SETTINGS } from './constants';\n\nexport const {\n getInstance,\n getPresenceSelector,\n getElementSelector,\n getSettingSelector,\n queryElement,\n queryAllElements,\n getAttribute,\n hasAttributeValue,\n} = generateSelectors(MODULE_KEY, ELEMENTS, SETTINGS);\n", "import { FORM_CSS_CLASSES } from '@adartem/adlib-utils';\n\nimport { getElementSelector, queryElement } from './selectors';\n\n/**\n * @returns The closest star rating group parent from a target.\n * @param target\n */\nexport const getClosestGroup = (target: Element) => target.closest(getElementSelector('group'));\n\n/**\n * @returns The closest Radio Field parent from a target.\n * @param target\n */\nexport const getClosestRadioField = (target: Element) =>\n target.closest<HTMLLabelElement>(`.${FORM_CSS_CLASSES.radioField}`);\n\n/**\n * @returns A child star element of the provided scope.\n * @param scope\n */\nexport const queryStar = (scope: Element) => queryElement('star', { scope });\n\n/**\n *\n * @returns A radio element selector.\n * Optionally, the selector can be narrowed down by name.\n * @param name\n */\nexport const getRadioSelector = (name?: string) =>\n `input[type=\"radio\"]${name ? `[name=\"${name}\"]` : ''}`;\n\n/**\n * @returns A child radio element of the provided scope.\n * @param scope\n */\nexport const queryRadio = (scope: Element) =>\n scope.querySelector<HTMLInputElement>(getRadioSelector());\n\n/**\n * @returns All radio elements.\n * If the name is provided, only the radio elements belonging to the same group are returned.\n *\n * @param name A radio group name.\n */\nexport const getAllRadios = (scope: Document | Element = document, name?: string) => [\n ...scope.querySelectorAll<HTMLInputElement>(getRadioSelector(name)),\n];\n\n/**\n * Gets the selected value of a Radio Group.\n * @param name The Radio Group Name.\n * @returns The selected value as an integer, if valid.\n */\nexport const getSelectedGroupValue = (name: string) => {\n let selectedValue: number | undefined;\n\n const selectedRadio = document.querySelector<HTMLInputElement>(\n `${getRadioSelector(name)}:checked`,\n );\n if (selectedRadio) {\n const rawSelectedValue = parseInt(selectedRadio.value);\n if (!isNaN(rawSelectedValue)) selectedValue = rawSelectedValue;\n }\n\n return selectedValue;\n};\n", "import { isNumber, readOption } from '@adartem/adlib-utils';\n\nimport { MODULE_KEY, OPTIONS } from '../utils/constants';\nimport {\n getAllRadios,\n getClosestRadioField,\n getSelectedGroupValue,\n queryStar,\n} from '../utils/helpers';\n\n/**\n * Adds/removes the active classes of a group's stars.\n * @param name\n * @param group\n * @param hoveredValue\n */\nexport const setClasses = (name: string, group: Element, hoveredValue?: number) => {\n const groupActiveClass = readOption(group, MODULE_KEY, 'activeclass', OPTIONS.activeclass, {\n includeGlobal: false,\n });\n\n const selectedValue = getSelectedGroupValue(name);\n\n const allRadios = getAllRadios(document, name);\n\n for (const radio of allRadios) {\n const radioField = getClosestRadioField(radio);\n if (!radioField) continue;\n\n const star = queryStar(radioField);\n if (!star) continue;\n\n const starActiveClass = readOption(star, MODULE_KEY, 'activeclass', OPTIONS.activeclass, {\n includeGlobal: false,\n });\n const activeClass = starActiveClass || groupActiveClass;\n if (!activeClass) continue;\n\n const value = parseInt(radio.value);\n\n const isHovered = isNumber(hoveredValue) && value <= hoveredValue;\n const isSelected = isNumber(selectedValue) && value <= selectedValue;\n const isActive = isHovered || isSelected;\n\n if (isActive) {\n star.classList.add(activeClass);\n } else {\n star.classList.remove(activeClass);\n }\n }\n};\n", "import { addListener, isElement } from '@adartem/adlib-utils';\n\nimport { getClosestGroup, getClosestRadioField, queryRadio, queryStar } from '../utils/helpers';\nimport { setClasses } from './classes';\n\n/**\n * Stores the currently active groups.\n */\nconst activeGroupsStore: Set<Element> = new Set();\n\n/**\n * Listens for all hover / unhover / focus events to trigger the stars.\n * @returns Cleanup callbacks.\n */\nexport const listenEvents = () => {\n const cleanups = [\n addListener(window, 'input', handleGroupHover),\n addListener(window, 'mouseover', handleGroupHover),\n addListener(window, 'mouseover', handleGroupUnhover),\n () => activeGroupsStore.clear(),\n ];\n\n return cleanups;\n};\n\n/**\n * Handles when the user hovers a group's stars.\n * @param e\n */\nconst handleGroupHover = ({ target }: Event) => {\n if (!isElement(target)) return;\n\n const radioField = getClosestRadioField(target);\n if (!radioField) return;\n\n const group = getClosestGroup(target);\n if (!group) return;\n\n const star = queryStar(radioField);\n if (!star) return;\n\n const radio = queryRadio(radioField);\n if (!radio) return;\n\n const { name, value } = radio;\n\n const hoveredValue = parseInt(value);\n if (isNaN(hoveredValue)) return;\n\n activeGroupsStore.add(group);\n\n setClasses(name, group, hoveredValue);\n};\n\n/**\n * Handles when the user stops hovering over a group's stars.\n * @param e\n */\nconst handleGroupUnhover = ({ target }: Event) => {\n if (!activeGroupsStore.size) return;\n if (!isElement(target)) return;\n\n for (const activeGroup of activeGroupsStore) {\n const group = getClosestGroup(target);\n\n if (!group || activeGroup !== group) {\n const star = queryStar(activeGroup);\n if (!star) continue;\n\n const radioField = getClosestRadioField(star);\n if (!radioField) continue;\n\n const radio = queryRadio(radioField);\n if (!radio) continue;\n\n setClasses(radio.name, activeGroup);\n activeGroupsStore.delete(activeGroup);\n }\n }\n};\n", "import { ARIA_ROLE_KEY, ARIA_ROLE_VALUES } from '@adartem/adlib-utils';\n\nimport { setClasses } from './actions/classes';\nimport { getAllRadios } from './utils/helpers';\n\n/**\n * Prepares a group with A11Y attributes and sets the initial state of the stars.\n * @param group\n */\nexport const initStarRatingGroup = (group: Element) => {\n // A11y\n group.setAttribute(ARIA_ROLE_KEY, ARIA_ROLE_VALUES.radiogroup);\n\n // Initial state\n const allRadios = getAllRadios(group);\n const allNames = allRadios.reduce<Set<string>>((acc, { name }) => {\n acc.add(name);\n return acc;\n }, new Set());\n\n for (const name of allNames) {\n setClasses(name, group);\n }\n};\n", "import {\n type AdLibAttributeInit,\n createCleanupBag,\n createDelegation,\n ensureButtonLike,\n isActivationKey,\n readOptionsFromAttributes,\n runActivationPipeline,\n waitWebflowReady,\n} from '@adartem/adlib-utils';\n\nimport { listenEvents } from './actions/events';\nimport { initStarRatingGroup } from './factory';\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport { getElementSelector, queryAllElements } from './utils/selectors';\n\ninterface ModuleDiagnostics {\n activeCount: number;\n disabledCount: number;\n guardFailedCount: number;\n lastNonActivationReason?: 'disabled' | 'guard-failed';\n}\n\n/**\n * Inits the attribute.\n */\nexport const init: AdLibAttributeInit = async () => {\n const bag = createCleanupBag();\n\n await waitWebflowReady();\n\n const diagnostics: ModuleDiagnostics = {\n activeCount: 0,\n disabledCount: 0,\n guardFailedCount: 0,\n };\n\n const groups = queryAllElements('group');\n const activeGroups: Element[] = [];\n const a11yMap = new Map<HTMLElement, boolean>();\n\n for (const group of groups) {\n const result = await runActivationPipeline({\n el: group,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () =>\n readOptionsFromAttributes(group, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n }),\n action: (options) => {\n initStarRatingGroup(group);\n activeGroups.push(group);\n\n if (options.a11y !== false) {\n const stars = group.querySelectorAll<HTMLElement>(getElementSelector('star'));\n for (const star of stars) {\n ensureButtonLike(star);\n a11yMap.set(star, true);\n }\n }\n },\n });\n\n if (result.ok) {\n diagnostics.activeCount++;\n } else if (result.reason === 'disabled') {\n diagnostics.disabledCount++;\n diagnostics.lastNonActivationReason = 'disabled';\n } else if (result.reason === 'guard-failed') {\n diagnostics.guardFailedCount++;\n diagnostics.lastNonActivationReason = 'guard-failed';\n }\n }\n\n // Delegation: star keydown (a11y)\n const destroyStarDelegation = createDelegation(getElementSelector('star'), {\n keydown: ({ event, el }) => {\n const a11yEnabled = a11yMap.get(el as HTMLElement);\n if (!a11yEnabled) return;\n if (!isActivationKey(event)) return;\n if (event.key === ' ' || event.key === 'Spacebar') event.preventDefault();\n (el as HTMLElement).click();\n },\n });\n bag.add(destroyStarDelegation);\n\n const cleanups = listenEvents();\n cleanups.forEach((cleanup) => bag.add(cleanup));\n\n return {\n result: { groups: activeGroups, diagnostics },\n destroy() {\n bag.run();\n },\n };\n};\n", "{\n \"name\": \"@adartem/ad-starrating\",\n \"version\": \"0.1.0\",\n \"description\": \"Star rating radio button component inside any Webflow form.\",\n \"private\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"scripts\": {\n \"lint\": \"eslint ./src && prettier --check ./src\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"typecheck\": \"tsc --noEmit\",\n \"build\": \"tsup --config tsup.config.ts\",\n \"test\": \"vitest run -c ../../vitest.config.ts\",\n \"dev\": \"tsup --config tsup.config.ts --watch\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"@adartem/adlib-utils\": \"workspace:*\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n", "import { createCleanupBag, defineModule } from '@adartem/adlib-utils';\n\nimport { init as legacyInit } from './init';\nimport { MODULE_KEY } from './utils/constants';\n\nexport default defineModule({\n key: MODULE_KEY,\n init: async (core) => {\n void core;\n\n const bag = createCleanupBag();\n const res = await legacyInit();\n\n if (res && typeof (res as { destroy?: unknown }).destroy === 'function') {\n bag.add(() => {\n try {\n (res as { destroy: () => void }).destroy();\n } catch {\n // best-effort\n }\n });\n }\n\n return {\n key: MODULE_KEY,\n destroy: () => bag.run(),\n };\n },\n});\n\nexport { version } from '../package.json';\nexport { init } from './init';\nexport { ELEMENTS, MODULE_KEY, SETTINGS } from './utils/constants';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["MODULE_KEY", "ELEMENTS", "SETTINGS", "OPTIONS", "STAR_RATING_ATTRIBUTE", "getInstance", "getPresenceSelector", "getElementSelector", "getSettingSelector", "queryElement", "queryAllElements", "getAttribute", "hasAttributeValue", "generateSelectors", "getClosestGroup", "target", "getClosestRadioField", "FORM_CSS_CLASSES", "queryStar", "scope", "getRadioSelector", "name", "queryRadio", "getAllRadios", "getSelectedGroupValue", "selectedValue", "selectedRadio", "rawSelectedValue", "setClasses", "group", "hoveredValue", "groupActiveClass", "readOption", "allRadios", "radio", "radioField", "star", "activeClass", "value", "isHovered", "isNumber", "isSelected", "activeGroupsStore", "listenEvents", "addListener", "handleGroupHover", "handleGroupUnhover", "isElement", "activeGroup", "initStarRatingGroup", "ARIA_ROLE_KEY", "ARIA_ROLE_VALUES", "allNames", "acc", "init", "bag", "createCleanupBag", "waitWebflowReady", "diagnostics", "groups", "activeGroups", "a11yMap", "result", "runActivationPipeline", "readOptionsFromAttributes", "options", "stars", "ensureButtonLike", "destroyStarDelegation", "createDelegation", "event", "el", "isActivationKey", "cleanup", "version", "index_default", "defineModule", "core", "res"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Dt,
|
|
3
|
+
Jo,
|
|
4
|
+
Nt,
|
|
5
|
+
Xt,
|
|
6
|
+
_n,
|
|
7
|
+
init_live_reload,
|
|
8
|
+
vt,
|
|
9
|
+
wn,
|
|
10
|
+
zo
|
|
11
|
+
} from "./chunk-IEGIKJKW.js";
|
|
12
|
+
|
|
13
|
+
// ../smartlightbox/dist/index.js
|
|
14
|
+
init_live_reload();
|
|
15
|
+
var s = "ad-smartlightbox";
|
|
16
|
+
var d = ["trigger-open", "trigger-close", "trigger-toggle", "lightbox"];
|
|
17
|
+
var c = { a11y: { key: "a11y", values: ["false"] } };
|
|
18
|
+
var u = { wait: { type: "number" }, disabled: { type: "boolean", default: false }, a11y: { type: "boolean", default: true } };
|
|
19
|
+
var { getInstance: x, getPresenceSelector: H, getElementSelector: l, getSettingSelector: G, queryElement: m, queryAllElements: P, getAttribute: R, hasAttributeValue: Y } = Jo(s, d, c);
|
|
20
|
+
var S = (t) => {
|
|
21
|
+
let n = x(t);
|
|
22
|
+
return m("lightbox", { instance: n, scope: t.parentElement ?? void 0 }) || m("lightbox", { instance: n });
|
|
23
|
+
};
|
|
24
|
+
var h = (t, n) => {
|
|
25
|
+
let { parentElement: o } = t;
|
|
26
|
+
if (!o) return;
|
|
27
|
+
let a = [...o.children].indexOf(t);
|
|
28
|
+
if (a < 0) return;
|
|
29
|
+
let i = () => {
|
|
30
|
+
o.insertBefore(t, o.children[a]);
|
|
31
|
+
};
|
|
32
|
+
return window.setTimeout(() => {
|
|
33
|
+
document.body.appendChild(t);
|
|
34
|
+
}, n), i;
|
|
35
|
+
};
|
|
36
|
+
var p = async () => {
|
|
37
|
+
let t = Nt(), n = { activeCount: 0, disabledCount: 0, guardFailedCount: 0 }, o = await Xt({ el: document.documentElement, moduleKey: s, includeGlobal: false, guardsRegistry: {}, readOptions: () => zo(document.documentElement, s, u, { includeGlobal: false }), action: (a) => {
|
|
38
|
+
if (a.a11y !== false) {
|
|
39
|
+
let e = [...document.querySelectorAll(l("trigger-open")), ...document.querySelectorAll(l("trigger-close")), ...document.querySelectorAll(l("trigger-toggle"))];
|
|
40
|
+
for (let r of e) Dt(r);
|
|
41
|
+
}
|
|
42
|
+
let i, y = a.wait, E = (e) => {
|
|
43
|
+
if (i) return;
|
|
44
|
+
let r = S(e);
|
|
45
|
+
r && (i = h(r, y));
|
|
46
|
+
}, b = () => {
|
|
47
|
+
i && window.setTimeout(() => {
|
|
48
|
+
i?.(), i = void 0;
|
|
49
|
+
}, y);
|
|
50
|
+
}, k = _n(l("trigger-open"), { click: ({ el: e }) => {
|
|
51
|
+
E(e);
|
|
52
|
+
}, keydown: ({ event: e, el: r }) => {
|
|
53
|
+
a.a11y !== false && vt(e) && ((e.key === " " || e.key === "Spacebar") && e.preventDefault(), r.click());
|
|
54
|
+
} }), T = _n(l("trigger-close"), { click: () => {
|
|
55
|
+
b();
|
|
56
|
+
}, keydown: ({ event: e, el: r }) => {
|
|
57
|
+
a.a11y !== false && vt(e) && ((e.key === " " || e.key === "Spacebar") && e.preventDefault(), r.click());
|
|
58
|
+
} }), L = _n(l("trigger-toggle"), { click: ({ el: e }) => {
|
|
59
|
+
i ? b() : E(e);
|
|
60
|
+
}, keydown: ({ event: e, el: r }) => {
|
|
61
|
+
a.a11y !== false && vt(e) && ((e.key === " " || e.key === "Spacebar") && e.preventDefault(), r.click());
|
|
62
|
+
} });
|
|
63
|
+
t.add(k), t.add(T), t.add(L), t.add(() => {
|
|
64
|
+
i?.();
|
|
65
|
+
}), t.add(() => {
|
|
66
|
+
i = void 0;
|
|
67
|
+
});
|
|
68
|
+
} });
|
|
69
|
+
return o.ok ? n.activeCount++ : o.reason === "disabled" ? (n.disabledCount++, n.lastNonActivationReason = "disabled") : o.reason === "guard-failed" && (n.guardFailedCount++, n.lastNonActivationReason = "guard-failed"), { result: { diagnostics: n }, destroy() {
|
|
70
|
+
t.run();
|
|
71
|
+
} };
|
|
72
|
+
};
|
|
73
|
+
var D = "0.1.0";
|
|
74
|
+
var oe = wn({ key: s, init: async (t) => {
|
|
75
|
+
let n = Nt(), o = await p();
|
|
76
|
+
return o && typeof o.destroy == "function" && n.add(() => {
|
|
77
|
+
try {
|
|
78
|
+
o.destroy();
|
|
79
|
+
} catch {
|
|
80
|
+
}
|
|
81
|
+
}), { key: s, destroy: () => n.run() };
|
|
82
|
+
} });
|
|
83
|
+
export {
|
|
84
|
+
d as ELEMENTS,
|
|
85
|
+
s as MODULE_KEY,
|
|
86
|
+
u as OPTIONS,
|
|
87
|
+
c as SETTINGS,
|
|
88
|
+
oe as default,
|
|
89
|
+
p as init,
|
|
90
|
+
D as version
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=dist-DOOWCYTM.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../smartlightbox/src/utils/constants.ts", "../../smartlightbox/src/utils/selectors.ts", "../../smartlightbox/src/actions/collect.ts", "../../smartlightbox/src/actions/move.ts", "../../smartlightbox/src/init.ts", "../../smartlightbox/package.json", "../../smartlightbox/src/index.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type AttributeElements,\n type AttributeSettings,\n type OptionsSchema,\n} from '@adartem/adlib-utils';\n\nexport const MODULE_KEY = 'ad-smartlightbox' as const;\n\nexport const ELEMENTS = [\n /**\n * Defines the trigger that appends the `lightbox` element as a direct child of the `<body>`.\n */\n 'trigger-open',\n\n /**\n * Defines the trigger that returns the `lightbox` to its previous position.\n */\n 'trigger-close',\n\n /**\n * Defines a trigger that toggles the open/close actions.\n */\n 'trigger-toggle',\n\n /**\n * Defines the element that has `position: fixed`.\n * If not defined, the `trigger-open` element is used.\n */\n 'lightbox',\n] as const satisfies AttributeElements;\n\nexport const SETTINGS = {\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { key: 'a11y', values: ['false'] },\n} as const satisfies AttributeSettings;\n\nexport const OPTIONS = {\n /**\n * Defines the timeout to wait before triggering the `close` state.\n */\n wait: { type: 'number' },\n\n /**\n * Disables the smart lightbox functionality.\n */\n disabled: { type: 'boolean', default: false },\n\n a11y: { type: 'boolean', default: true },\n} as const satisfies OptionsSchema;\n", "import { generateSelectors } from '@adartem/adlib-utils';\n\nimport { ELEMENTS, MODULE_KEY, SETTINGS } from './constants';\n\nexport const {\n getInstance,\n getPresenceSelector,\n getElementSelector,\n getSettingSelector,\n queryElement,\n queryAllElements,\n getAttribute,\n hasAttributeValue,\n} = generateSelectors(MODULE_KEY, ELEMENTS, SETTINGS);\n", "import { getInstance, queryElement } from '../utils/selectors';\n\n/**\n * Queries the correspondent fixed element of a specific trigger.\n * @param trigger The trigger element.\n */\nexport const getLightboxElement = (trigger: Element) => {\n const instance = getInstance(trigger);\n\n return (\n queryElement('lightbox', {\n instance,\n scope: trigger.parentElement ?? undefined,\n }) || queryElement('lightbox', { instance })\n );\n};\n", "/**\n * Moves an element to be a direct child of the `<body>`.\n * @param element The element to move.\n * @param timeout An optional timeout.\n * @returns A callback to restore the element's previous position.\n */\nexport const moveElementToBody = (element: Element, timeout?: number) => {\n const { parentElement } = element;\n if (!parentElement) return;\n\n const elementIndex = [...parentElement.children].indexOf(element);\n if (elementIndex < 0) return;\n\n // Create restore callback\n const restoreUntransformedElement = () => {\n parentElement.insertBefore(element, parentElement.children[elementIndex]);\n };\n\n // Init action\n window.setTimeout(() => {\n document.body.appendChild(element);\n }, timeout);\n\n return restoreUntransformedElement;\n};\n", "import {\n type AdLibAttributeInit,\n createCleanupBag,\n createDelegation,\n ensureButtonLike,\n isActivationKey,\n readOptionsFromAttributes,\n runActivationPipeline,\n} from '@adartem/adlib-utils';\n\nimport { getLightboxElement } from './actions/collect';\nimport { moveElementToBody } from './actions/move';\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport { getElementSelector } from './utils/selectors';\n\ninterface ModuleDiagnostics {\n activeCount: number;\n disabledCount: number;\n guardFailedCount: number;\n lastNonActivationReason?: 'disabled' | 'guard-failed';\n}\n\nexport const init: AdLibAttributeInit = async () => {\n const bag = createCleanupBag();\n\n const diagnostics: ModuleDiagnostics = {\n activeCount: 0,\n disabledCount: 0,\n guardFailedCount: 0,\n };\n\n const result = await runActivationPipeline({\n el: document.documentElement,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () =>\n readOptionsFromAttributes(document.documentElement, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n }),\n action: (options) => {\n // A11y: scan initial triggers and make them keyboard accessible\n if (options.a11y !== false) {\n const triggers = [\n ...document.querySelectorAll<HTMLElement>(getElementSelector('trigger-open')),\n ...document.querySelectorAll<HTMLElement>(getElementSelector('trigger-close')),\n ...document.querySelectorAll<HTMLElement>(getElementSelector('trigger-toggle')),\n ];\n\n for (const trigger of triggers) {\n ensureButtonLike(trigger);\n }\n }\n\n // State - only created if pipeline succeeds\n let restoreUntransformedElement: (() => void) | undefined;\n\n const timeout = options.wait;\n\n // Helper: open lightbox\n const openLightbox = (trigger: Element) => {\n if (restoreUntransformedElement) return;\n\n const lightboxElement = getLightboxElement(trigger);\n if (!lightboxElement) return;\n\n restoreUntransformedElement = moveElementToBody(lightboxElement, timeout);\n };\n\n // Helper: close lightbox\n const closeLightbox = () => {\n if (!restoreUntransformedElement) return;\n\n window.setTimeout(() => {\n restoreUntransformedElement?.();\n restoreUntransformedElement = undefined;\n }, timeout);\n };\n\n // Delegation: open triggers\n const destroyOpenDelegation = createDelegation(getElementSelector('trigger-open'), {\n click: ({ el }) => {\n openLightbox(el);\n },\n keydown: ({ event, el }) => {\n if (options.a11y === false) return;\n if (!isActivationKey(event)) return;\n if (event.key === ' ' || event.key === 'Spacebar') event.preventDefault();\n (el as HTMLElement).click();\n },\n });\n\n // Delegation: close triggers\n const destroyCloseDelegation = createDelegation(getElementSelector('trigger-close'), {\n click: () => {\n closeLightbox();\n },\n keydown: ({ event, el }) => {\n if (options.a11y === false) return;\n if (!isActivationKey(event)) return;\n if (event.key === ' ' || event.key === 'Spacebar') event.preventDefault();\n (el as HTMLElement).click();\n },\n });\n\n // Delegation: toggle triggers\n const destroyToggleDelegation = createDelegation(getElementSelector('trigger-toggle'), {\n click: ({ el }) => {\n if (restoreUntransformedElement) closeLightbox();\n else openLightbox(el);\n },\n keydown: ({ event, el }) => {\n if (options.a11y === false) return;\n if (!isActivationKey(event)) return;\n if (event.key === ' ' || event.key === 'Spacebar') event.preventDefault();\n (el as HTMLElement).click();\n },\n });\n\n bag.add(destroyOpenDelegation);\n bag.add(destroyCloseDelegation);\n bag.add(destroyToggleDelegation);\n\n bag.add(() => {\n restoreUntransformedElement?.();\n });\n bag.add(() => {\n restoreUntransformedElement = undefined;\n });\n },\n });\n\n if (result.ok) {\n diagnostics.activeCount++;\n } else if (result.reason === 'disabled') {\n diagnostics.disabledCount++;\n diagnostics.lastNonActivationReason = 'disabled';\n } else if (result.reason === 'guard-failed') {\n diagnostics.guardFailedCount++;\n diagnostics.lastNonActivationReason = 'guard-failed';\n }\n\n return {\n result: { diagnostics },\n destroy() {\n bag.run();\n },\n };\n};\n", "{\n \"name\": \"@adartem/ad-smartlightbox\",\n \"version\": \"0.1.0\",\n \"description\": \"Change the position of an opened lightbox to prevent unwanted `z-index`, `fixed` positioning, and `transform` issues.\",\n \"private\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"scripts\": {\n \"lint\": \"eslint ./src && prettier --check ./src\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"typecheck\": \"tsc --noEmit\",\n \"build\": \"tsup --config tsup.config.ts\",\n \"test\": \"vitest run -c ../../vitest.config.ts\",\n \"dev\": \"tsup --config tsup.config.ts --watch\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"@adartem/adlib-utils\": \"workspace:*\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n", "import { createCleanupBag, defineModule } from '@adartem/adlib-utils';\n\nimport { init as legacyInit } from './init';\nimport { MODULE_KEY } from './utils/constants';\n\nexport default defineModule({\n key: MODULE_KEY,\n init: async (core) => {\n void core;\n\n const bag = createCleanupBag();\n const res = await legacyInit();\n\n if (res && typeof (res as { destroy?: unknown }).destroy === 'function') {\n bag.add(() => {\n try {\n (res as { destroy: () => void }).destroy();\n } catch {\n // best-effort\n }\n });\n }\n\n return {\n key: MODULE_KEY,\n destroy: () => bag.run(),\n };\n },\n});\n\nexport { version } from '../package.json';\nexport { init } from './init';\nexport { ELEMENTS, MODULE_KEY, OPTIONS, SETTINGS } from './utils/constants';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["MODULE_KEY", "ELEMENTS", "SETTINGS", "OPTIONS", "getInstance", "getPresenceSelector", "getElementSelector", "getSettingSelector", "queryElement", "queryAllElements", "getAttribute", "hasAttributeValue", "generateSelectors", "getLightboxElement", "trigger", "instance", "moveElementToBody", "element", "timeout", "parentElement", "elementIndex", "restoreUntransformedElement", "init", "bag", "createCleanupBag", "diagnostics", "result", "runActivationPipeline", "readOptionsFromAttributes", "options", "triggers", "ensureButtonLike", "openLightbox", "lightboxElement", "closeLightbox", "destroyOpenDelegation", "createDelegation", "el", "event", "isActivationKey", "destroyCloseDelegation", "destroyToggleDelegation", "version", "index_default", "defineModule", "core", "res"]
|
|
7
|
+
}
|