{ "version": 3, "sources": ["node_modules/imba/src/imba/events/intersect.imba"], "sourcesContent": ["# imba$imbaPath=global\n\nimport {Event,CustomEvent,Element,Document} from '../dom/core'\nimport * as helpers from './helpers'\n\nexport def use_events_intersect\n\tyes\n\nconst observers = new (global.WeakMap || Map)\nexport const IntersectionEventDefaults = {threshold: [0]}\nconst viewport = {}\nconst defaults = IntersectionEventDefaults\n\ndef Event.intersect$handle\n\tlet obs = event.detail.observer\n\treturn modifiers._observer == obs\n\nclass IntersectionEvent < CustomEvent\n\t\n\tdef @in\n\t\treturn delta >= 0 and entry.isIntersecting\n\t\t\n\tdef @out\n\t\treturn delta < 0 # and entry.isIntersecting\n\t\t\n\tdef @css name = 'ratio'\n\t\ttarget.style.setProperty(\"--ratio\",ratio)\n\t\treturn yes\n\t\n\tdef @flag name, sel\n\t\tlet {state,step} = #context\n\t\tlet el = helpers.toElement(sel or '',target)\n\n\t\tif self.isIntersecting and !state[step]\n\t\t\tel.flags.incr(name)\n\t\t\tstate[step] = yes\n\t\telif state[step] and !self.isIntersecting\n\t\t\tel.flags.decr(name)\n\t\t\tstate[step] = no\n\t\treturn yes\n\n\ndef callback name, key\n\treturn do(entries,observer)\n\t\tlet map = observer.prevRatios ||= new WeakMap\n\t\t\n\t\tfor entry in entries\n\t\t\tlet prev = map.get(entry.target) or 0\n\t\t\tlet ratio = entry.intersectionRatio\n\t\t\tlet detail = {entry: entry, ratio: ratio, from: prev, delta: (ratio - prev), observer: observer }\n\t\t\tlet e = new CustomEvent(name, bubbles: false, detail: detail)\n\t\t\te.#extendType(IntersectionEvent)\n\t\t\te.entry = entry\n\t\t\te.isIntersecting = entry.isIntersecting\n\t\t\te.delta = detail.delta\n\t\t\te.ratio = detail.ratio\n\n\t\t\tmap.set(entry.target,ratio)\n\t\t\tentry.target.dispatchEvent(e)\n\t\treturn\n\ndef getIntersectionObserver opts = IntersectionEventDefaults\n\tlet key = opts.threshold.join('-') + opts.rootMargin\n\tif !opts.root and IntersectionEventDefaults.root\n\t\topts.root ||= IntersectionEventDefaults.root\n\tlet target = opts.root or viewport\n\tlet map = observers.get(target)\n\tmap || observers.set(target,map = {})\n\tmap[key] ||= new IntersectionObserver(callback('intersect',key),opts)\n\nextend class Element\n\tdef on$intersect mods,context,handler,o\n\t\tlet obs\n\t\tif mods.options\n\t\t\tlet th = [] \n\t\t\tlet opts = {threshold:th}\n\n\t\t\tfor arg in mods.options\n\t\t\t\tif arg isa Element or arg isa Document\n\t\t\t\t\topts.root = arg\n\t\t\t\telif typeof arg == 'number'\n\t\t\t\t\tth.push(arg)\n\t\t\t\telif typeof arg == 'string'\n\t\t\t\t\topts.rootMargin = arg\n\t\t\t\telif typeof arg == 'object'\n\t\t\t\t\tObject.assign(opts,arg)\n\t\t\t\t\t\n\t\t\tif th.length == 1\n\t\t\t\tlet num = th[0]\n\t\t\t\tif num > 1\n\t\t\t\t\tth[0] = 0\n\t\t\t\t\twhile th.length < num\n\t\t\t\t\t\tth.push(th.length / (num - 1))\n\n\t\t\tth.push(0) if th.length == 0\n\t\t\tobs = getIntersectionObserver(opts)\n\t\telse\n\t\t\tobs = getIntersectionObserver()\n\n\t\tmods._observer = obs\n\t\tobs.observe(this)\n\t\tself.addEventListener('intersect',handler,o)\n\t\treturn handler"], "mappings": ";wYAKO,YAAwB,CAC9B,MAAA,GAEK,GAAA,GAAiB,GAAA,YAAO,SAAW,KAC5B,EAA4B,CAAC,UAAW,CAAC,IAChD,EAAW,KAGP,iBAAgB,UAAA,CACrB,GAAA,GAAM,KAAA,MAAM,OAAO,SACvB,MAAO,MAAA,UAAU,WAAa,GAE/B,mBAA0B,EAAW,CAEhC,UAAG,CACN,MAAO,MAAA,OAAS,GAAM,KAAA,MAAM,eAEzB,WAAI,CACP,MAAO,MAAA,MAAQ,EAEZ,UAAK,EAAO,QAAO,CACtB,YAAA,OAAO,MAAM,YAAY,UAAU,KAAA,OAC5B,GAEJ,WAAM,EAAM,EAAG,CACd,GAAA,CAAC,MAAA,EAAM,KAAA,GAAK,KAAA,GACZ,EAAK,AAAQ,EAAU,GAAO,GAAG,KAAA,QAErC,MAAG,MAAK,gBAAoB,CAAA,EAAM,GACjC,GAAG,MAAM,KAAK,GACd,EAAM,GAAQ,IACV,EAAM,IAAW,CAAA,KAAK,gBAC1B,GAAG,MAAM,KAAK,GACd,EAAM,GAAQ,IACR,KAGT,WAAa,EAAM,EAAG,CACrB,MAAO,UAAG,EAAQ,EAAS,CACtB,GAAA,GAAM,EAAS,YAAT,GAAS,WAAmB,GAAA,UAEtC,OAAG,GAAA,EAAA,EAAA,EAAU,GAAO,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,IAAhB,GAAK,EAAA,GACJ,EAAO,EAAI,IAAI,EAAM,SAAW,EAChC,EAAQ,EAAM,kBACd,EAAS,CAAC,MAAO,EAAO,MAAO,EAAO,KAAM,EAAM,MAAQ,EAAQ,EAAO,SAAU,GACnF,EAAQ,GAAA,GAAY,EAAI,CAAE,QAAS,GAAO,OAAQ,IACtD,EAAC,GAAa,GACd,EAAE,MAAQ,EACV,EAAE,eAAiB,EAAM,eACzB,EAAE,MAAQ,EAAO,MACjB,EAAE,MAAQ,EAAO,MAEjB,EAAI,IAAI,EAAM,OAAO,GACrB,EAAM,OAAO,cAAc,KAG9B,WAA4B,EAAO,EAAyB,CACvD,GAAA,GAAM,EAAK,UAAU,KAAK,KAAO,EAAK,WAC1C,AAAI,CAAA,EAAK,MAAS,EAA0B,MAC3C,GAAK,MAAL,GAAK,KAAS,EAA0B,OACrC,GAAA,GAAS,EAAK,MAAQ,EACtB,EAAM,EAAU,IAAI,GACxB,UAAO,EAAU,IAAI,EAAO,EAAM,IAClC,EAAI,IAAJ,GAAI,GAAa,GAAA,sBAAqB,EAAS,YAAY,GAAK,IAE1D,WAAK,CACP,aAAa,EAAK,EAAQ,EAAQ,EAAC,CAClC,GAAA,GACJ,GAAG,EAAK,QAAO,CACV,GAAA,GAAK,GACL,EAAO,CAAC,UAAU,GAEtB,OAAG,GAAA,EAAA,EAAA,EAAQ,EAAK,SAAO,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,IAAnB,GAAG,EAAA,GACN,AAAG,YAAQ,IAAW,YAAQ,GAC7B,EAAK,KAAO,EACb,AAAY,MAAA,IAAO,SAClB,EAAG,KAAK,GACT,AAAY,MAAA,IAAO,SAClB,EAAK,WAAa,EACP,MAAA,IAAO,UAClB,OAAO,OAAO,EAAK,GAErB,GAAG,EAAG,QAAU,EAAC,CACZ,GAAA,GAAM,EAAG,GACb,GAAG,EAAM,MACR,EAAG,GAAK,EACF,EAAG,OAAS,GACjB,EAAG,KAAK,EAAG,OAAU,GAAM,IAEnB,AAAG,EAAG,QAAU,GAA3B,EAAG,KAAK,GACR,EAAM,EAAwB,OAE9B,GAAM,IAEP,SAAK,UAAY,EACjB,EAAI,QAAQ,MACZ,KAAK,iBAAiB,YAAY,EAAQ,GACnC,MAhCI,EAAO,UAAA,EAAA", "names": [] }