lisn.js
Version:
Simply handle user gestures and actions. Includes widgets.
1 lines • 6.06 kB
Source Map (JSON)
{"version":3,"file":"track-size.cjs","names":["MH","_interopRequireWildcard","require","_validation","_sizeWatcher","_widget","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TrackSize","Widget","element","instance","DUMMY_ID","isInstanceOf","register","registerWidget","WIDGET_NAME","config","configValidator","constructor","id","SizeWatcher","reuse","trackSize","assign","target","onDestroy","noTrackSize","exports","threshold","validateNumber","debounceWindow"],"sources":["../../../src/ts/widgets/track-size.ts"],"sourcesContent":["/**\n * @module Widgets\n */\n\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\nimport { validateNumber } from \"@lisn/utils/validation\";\n\nimport { SizeWatcher } from \"@lisn/watchers/size-watcher\";\n\nimport {\n Widget,\n WidgetConfigValidatorObject,\n registerWidget,\n} from \"@lisn/widgets/widget\";\n\n/**\n * This is a simple wrapper around the {@link SizeWatcher}. If you are using\n * the JavaScript API, you should use the {@link SizeWatcher} directly. The\n * purpose of this widget is to expose the watcher's ability to track size\n * and set relevant CSS properties via the HTML API. See\n * {@link SizeWatcher.trackSize}.\n *\n * -----\n *\n * To use with auto-widgets (HTML API) (see\n * {@link Settings.settings.autoWidgets | settings.autoWidgets}), the following\n * CSS classes or data attributes are recognized:\n * - `lisn-track-size` class or `data-lisn-track-size` attribute set on\n * the element that constitutes the widget.\n *\n * This widget does not support configuration and uses the default\n * {@link SizeWatcher} configuration except for resize threshold equal to 0.\n *\n * @example\n * This will track the size of this element and set the relevant CSS\n * properties. It will use the default {@link SizeWatcher} options and resize\n * threshold of 0.\n *\n * ```html\n * <div class=\"lisn-track-size\"></div>\n * ```\n *\n * @example\n * As above but with custom options\n *\n * ```html\n * <div data-lisn-track-size=\"threshold=0 | debounce-window=0\"></div>\n * ```\n */\nexport class TrackSize extends Widget {\n static get(element: Element): TrackSize | null {\n const instance = super.get(element, DUMMY_ID);\n if (MH.isInstanceOf(instance, TrackSize)) {\n return instance;\n }\n return null;\n }\n\n static register() {\n registerWidget(\n WIDGET_NAME,\n (element, config) => {\n if (!TrackSize.get(element)) {\n return new TrackSize(element, config);\n }\n return null;\n },\n configValidator,\n );\n }\n\n constructor(element: Element, config?: TrackSizeConfig) {\n super(element, { id: DUMMY_ID });\n\n SizeWatcher.reuse().trackSize(\n null,\n MH.assign(\n {\n target: element,\n },\n config,\n ),\n );\n\n this.onDestroy(() => SizeWatcher.reuse().noTrackSize(null, element));\n }\n}\n\n/**\n * @interface\n *\n * @since v1.2.0\n */\nexport type TrackSizeConfig = {\n /**\n * Corresponds to\n * {@link Watchers/SizeWatcher.OnResizeOptions.threshold | OnResizeOptions.threshold}.\n *\n * @defaultValue undefined // SizeWatcher default\n */\n threshold?: number;\n\n /**\n * Corresponds to\n * {@link Watchers/SizeWatcher.OnResizeOptions.debounceWindow | OnResizeOptions.debounceWindow}.\n *\n * @defaultValue undefined // SizeWatcher default\n */\n debounceWindow?: number;\n};\n\n// --------------------\n\nconst WIDGET_NAME = \"track-size\";\n// Only one TrackSize widget per element is allowed, but Widget requires a\n// non-blank ID.\nconst DUMMY_ID = WIDGET_NAME;\n\nconst configValidator: WidgetConfigValidatorObject<TrackSizeConfig> = {\n threshold: validateNumber,\n debounceWindow: validateNumber,\n};\n"],"mappings":"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","ignoreList":[]}