lisn.js
Version:
Simply handle user gestures and actions. Includes widgets.
1 lines • 5.85 kB
Source Map (JSON)
{"version":3,"file":"track-scroll.cjs","names":["MH","_interopRequireWildcard","require","_validation","_scrollWatcher","_widget","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TrackScroll","Widget","element","instance","DUMMY_ID","isInstanceOf","register","registerWidget","WIDGET_NAME","config","configValidator","constructor","id","ScrollWatcher","reuse","trackScroll","assign","scrollable","onDestroy","noTrackScroll","exports","threshold","validateNumber","debounceWindow"],"sources":["../../../src/ts/widgets/track-scroll.ts"],"sourcesContent":["/**\n * @module Widgets\n */\n\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\nimport { validateNumber } from \"@lisn/utils/validation\";\n\nimport { ScrollWatcher } from \"@lisn/watchers/scroll-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 ScrollWatcher}. If you are using\n * the JavaScript API, you should use the {@link ScrollWatcher} directly. The\n * purpose of this widget is to expose the watcher's ability to track scroll\n * and set relevant CSS properties via the HTML API. See\n * {@link ScrollWatcher.trackScroll}.\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-scroll` class or `data-lisn-track-scroll` attribute set on\n * the element that constitutes the widget.\n *\n * @example\n * This will track scroll on this element and set the relevant CSS properties.\n *\n * ```html\n * <div class=\"lisn-track-scroll\"></div>\n * ```\n *\n * @example\n * As above but with custom options\n *\n * ```html\n * <div data-lisn-track-scroll=\"threshold=0 | debounce-window=0\"></div>\n * ```\n */\nexport class TrackScroll extends Widget {\n static get(element: Element): TrackScroll | null {\n const instance = super.get(element, DUMMY_ID);\n if (MH.isInstanceOf(instance, TrackScroll)) {\n return instance;\n }\n return null;\n }\n\n static register() {\n registerWidget(\n WIDGET_NAME,\n (element, config) => {\n if (!TrackScroll.get(element)) {\n return new TrackScroll(element, config);\n }\n return null;\n },\n configValidator,\n );\n }\n\n constructor(element: Element, config?: TrackScrollConfig) {\n super(element, { id: DUMMY_ID });\n\n ScrollWatcher.reuse().trackScroll(\n null,\n MH.assign(\n {\n scrollable: element,\n },\n config,\n ),\n );\n\n this.onDestroy(() => ScrollWatcher.reuse().noTrackScroll(null, element));\n }\n}\n\n/**\n * @interface\n */\nexport type TrackScrollConfig = {\n /**\n * Corresponds to\n * {@link Watchers/ScrollWatcher.OnScrollOptions.threshold | OnScrollOptions.threshold}.\n *\n * @defaultValue undefined // ScrollWatcher default\n */\n threshold?: number;\n\n /**\n * Corresponds to\n * {@link Watchers/ScrollWatcher.OnScrollOptions.debounceWindow | OnScrollOptions.debounceWindow}.\n *\n * @defaultValue undefined // ScrollWatcher default\n */\n debounceWindow?: number;\n};\n\n// --------------------\n\nconst WIDGET_NAME = \"track-scroll\";\n// Only one TrackScroll widget per element is allowed, but Widget requires a\n// non-blank ID.\nconst DUMMY_ID = WIDGET_NAME;\n\nconst configValidator: WidgetConfigValidatorObject<TrackScrollConfig> = {\n threshold: validateNumber,\n debounceWindow: validateNumber,\n};\n"],"mappings":";;;;;;AAIA,IAAAA,EAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,cAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AAI8B,SAAAD,wBAAAK,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAP,uBAAA,YAAAA,CAAAK,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAd9B;AACA;AACA;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMkB,WAAW,SAASC,cAAM,CAAC;EACtC,OAAOR,GAAGA,CAACS,OAAgB,EAAsB;IAC/C,MAAMC,QAAQ,GAAG,KAAK,CAACV,GAAG,CAACS,OAAO,EAAEE,QAAQ,CAAC;IAC7C,IAAI7B,EAAE,CAAC8B,YAAY,CAACF,QAAQ,EAAEH,WAAW,CAAC,EAAE;MAC1C,OAAOG,QAAQ;IACjB;IACA,OAAO,IAAI;EACb;EAEA,OAAOG,QAAQA,CAAA,EAAG;IAChB,IAAAC,sBAAc,EACZC,WAAW,EACX,CAACN,OAAO,EAAEO,MAAM,KAAK;MACnB,IAAI,CAACT,WAAW,CAACP,GAAG,CAACS,OAAO,CAAC,EAAE;QAC7B,OAAO,IAAIF,WAAW,CAACE,OAAO,EAAEO,MAAM,CAAC;MACzC;MACA,OAAO,IAAI;IACb,CAAC,EACDC,eACF,CAAC;EACH;EAEAC,WAAWA,CAACT,OAAgB,EAAEO,MAA0B,EAAE;IACxD,KAAK,CAACP,OAAO,EAAE;MAAEU,EAAE,EAAER;IAAS,CAAC,CAAC;IAEhCS,4BAAa,CAACC,KAAK,CAAC,CAAC,CAACC,WAAW,CAC/B,IAAI,EACJxC,EAAE,CAACyC,MAAM,CACP;MACEC,UAAU,EAAEf;IACd,CAAC,EACDO,MACF,CACF,CAAC;IAED,IAAI,CAACS,SAAS,CAAC,MAAML,4BAAa,CAACC,KAAK,CAAC,CAAC,CAACK,aAAa,CAAC,IAAI,EAAEjB,OAAO,CAAC,CAAC;EAC1E;AACF;;AAEA;AACA;AACA;AAFAkB,OAAA,CAAApB,WAAA,GAAAA,WAAA;AAqBA;;AAEA,MAAMQ,WAAW,GAAG,cAAc;AAClC;AACA;AACA,MAAMJ,QAAQ,GAAGI,WAAW;AAE5B,MAAME,eAA+D,GAAG;EACtEW,SAAS,EAAEC,0BAAc;EACzBC,cAAc,EAAED;AAClB,CAAC","ignoreList":[]}