@ably/ui 17.13.0-dev.de27db52 → 17.13.1-dev.c839343a
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/AGENTS.md +337 -0
- package/core/Accordion/types.js.map +1 -1
- package/core/Accordion.js +1 -1
- package/core/Accordion.js.map +1 -1
- package/core/CodeSnippet/languages.js +1 -1
- package/core/CodeSnippet/languages.js.map +1 -1
- package/core/CodeSnippet.js +1 -1
- package/core/CodeSnippet.js.map +1 -1
- package/core/Expander.js +1 -1
- package/core/Expander.js.map +1 -1
- package/core/Icon/components/icon-display-ephemeral-messages-dark-col.js +2 -0
- package/core/Icon/components/icon-display-ephemeral-messages-dark-col.js.map +1 -0
- package/core/Icon/components/icon-display-message-annotations-dark-col.js +2 -0
- package/core/Icon/components/icon-display-message-annotations-dark-col.js.map +1 -0
- package/core/Icon/components/icon-display-other-mono.js +2 -0
- package/core/Icon/components/icon-display-other-mono.js.map +1 -0
- package/core/Icon/components/icon-display-other.js +2 -0
- package/core/Icon/components/icon-display-other.js.map +1 -0
- package/core/Icon/components/icon-gui-checklist-checked.js +1 -1
- package/core/Icon/components/icon-gui-checklist-checked.js.map +1 -1
- package/core/Icon/components/icon-gui-code-doc.js +1 -1
- package/core/Icon/components/icon-gui-code-doc.js.map +1 -1
- package/core/Icon/components/icon-gui-cursor.js +1 -1
- package/core/Icon/components/icon-gui-cursor.js.map +1 -1
- package/core/Icon/components/icon-gui-expand.js +1 -1
- package/core/Icon/components/icon-gui-expand.js.map +1 -1
- package/core/Icon/components/icon-gui-filter-flow-step-0.js +1 -1
- package/core/Icon/components/icon-gui-filter-flow-step-0.js.map +1 -1
- package/core/Icon/components/icon-gui-flower-growth.js +1 -1
- package/core/Icon/components/icon-gui-flower-growth.js.map +1 -1
- package/core/Icon/components/icon-gui-glasses.js +1 -1
- package/core/Icon/components/icon-gui-glasses.js.map +1 -1
- package/core/Icon/components/icon-gui-mouse.js +1 -1
- package/core/Icon/components/icon-gui-mouse.js.map +1 -1
- package/core/Icon/components/icon-gui-pitfall.js +1 -1
- package/core/Icon/components/icon-gui-pitfall.js.map +1 -1
- package/core/Icon/components/icon-gui-quote-marks-fill.js +1 -1
- package/core/Icon/components/icon-gui-quote-marks-fill.js.map +1 -1
- package/core/Icon/components/icon-product-other-mono.js +2 -0
- package/core/Icon/components/icon-product-other-mono.js.map +1 -0
- package/core/Icon/components/icon-product-other.js +2 -0
- package/core/Icon/components/icon-product-other.js.map +1 -0
- package/core/Icon/components/index.js +1 -1
- package/core/Icon/components/index.js.map +1 -1
- package/core/Icon/computed-icons/display-icons.js +1 -1
- package/core/Icon/computed-icons/display-icons.js.map +1 -1
- package/core/hooks/use-content-height.js +1 -1
- package/core/hooks/use-content-height.js.map +1 -1
- package/core/hooks/use-themed-scrollpoints.js +1 -1
- package/core/hooks/use-themed-scrollpoints.js.map +1 -1
- package/core/hooks/use-themed-scrollpoints.test.js +1 -1
- package/core/hooks/use-themed-scrollpoints.test.js.map +1 -1
- package/core/icons/display/icon-display-ephemeral-messages-dark-col.svg +6 -0
- package/core/icons/display/icon-display-message-annotations-dark-col.svg +11 -0
- package/core/icons/gui/icon-gui-checklist-checked.svg +1 -1
- package/core/icons/gui/icon-gui-code-doc.svg +1 -1
- package/core/icons/gui/icon-gui-cursor.svg +1 -1
- package/core/icons/gui/icon-gui-expand.svg +1 -1
- package/core/icons/gui/icon-gui-filter-flow-step-0.svg +3 -3
- package/core/icons/gui/icon-gui-flower-growth.svg +1 -1
- package/core/icons/gui/icon-gui-glasses.svg +1 -1
- package/core/icons/gui/icon-gui-mouse.svg +1 -1
- package/core/icons/gui/icon-gui-pitfall.svg +1 -1
- package/core/icons/gui/icon-gui-quote-marks-fill.svg +2 -2
- package/core/insights/posthog.js +1 -1
- package/core/insights/posthog.js.map +1 -1
- package/core/sprites-display.svg +1 -1
- package/core/sprites-gui.svg +1 -1
- package/index.d.ts +83 -14
- package/package.json +9 -9
- package/core/CookieMessage/component.css +0 -15
- package/core/CookieMessage.js +0 -2
- package/core/CookieMessage.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/hooks/use-themed-scrollpoints.ts"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport { ThemedScrollpoint } from \"../Header/types\";\n\nconst HEADER_HEIGHT = 64;\n\nexport function useThemedScrollpoints(\n scrollpoints: ThemedScrollpoint[],\n): string {\n const [activeClassName, setActiveClassName] = useState<string>(\"\");\n\n const previousClassNameRef = useRef<string>(\"\");\n const observerRef = useRef<IntersectionObserver | null>(null);\n const initialCheckDoneRef = useRef<boolean>(false);\n const intersectingElementsRef = useRef<\n Map<string, IntersectionObserverEntry>\n >(new Map());\n\n useEffect(() => {\n if (scrollpoints.length === 0) {\n return;\n }\n\n const intersectingElements = intersectingElementsRef.current;\n\n
|
|
1
|
+
{"version":3,"sources":["../../../src/core/hooks/use-themed-scrollpoints.ts"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport { ThemedScrollpoint } from \"../Header/types\";\n\nconst HEADER_HEIGHT = 64;\n\nexport function useThemedScrollpoints(\n scrollpoints: ThemedScrollpoint[],\n): string {\n const [activeClassName, setActiveClassName] = useState<string>(\"\");\n\n const previousClassNameRef = useRef<string>(\"\");\n const observerRef = useRef<IntersectionObserver | null>(null);\n const initialCheckDoneRef = useRef<boolean>(false);\n const rafIdRef = useRef<number | null>(null);\n const intersectingElementsRef = useRef<\n Map<string, IntersectionObserverEntry>\n >(new Map());\n\n useEffect(() => {\n if (scrollpoints.length === 0) {\n // Clear active className when scrollpoints becomes empty\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setActiveClassName(\"\");\n previousClassNameRef.current = \"\";\n return;\n }\n\n let isMounted = true;\n const intersectingElements = intersectingElementsRef.current;\n\n // Function to find and update the best matching scrollpoint\n const updateBestMatch = (useEntryRects = false) => {\n // Find the best match from ALL currently intersecting elements\n // Strategy: Pick the element whose top edge is closest to the header position\n // Use scrollpoints array order as tiebreaker when distances are equal\n let bestMatch: {\n scrollpoint: ThemedScrollpoint;\n distance: number;\n index: number;\n } | null = null;\n\n for (const [id, entry] of intersectingElements) {\n const scrollpointIndex = scrollpoints.findIndex((sp) => sp.id === id);\n if (scrollpointIndex === -1) continue;\n\n const scrollpoint = scrollpoints[scrollpointIndex];\n\n // For observer callbacks, use entry.boundingClientRect (for test compatibility)\n // For scroll handler, get fresh position data\n const rect = useEntryRects\n ? (entry.boundingClientRect ?? entry.target.getBoundingClientRect())\n : entry.target.getBoundingClientRect();\n\n // Only consider elements at or past the header line\n // This prevents selecting elements that are marked as \"intersecting\" by rootMargin\n // but haven't actually reached the header position yet\n if (rect.top > HEADER_HEIGHT) continue;\n\n // Calculate distance from element's top edge to header position\n const distance = Math.abs(rect.top - HEADER_HEIGHT);\n\n // Pick element with smallest distance; if equal, pick earlier in scrollpoints array\n if (\n !bestMatch ||\n distance < bestMatch.distance ||\n (distance === bestMatch.distance &&\n scrollpointIndex < bestMatch.index)\n ) {\n bestMatch = { scrollpoint, distance, index: scrollpointIndex };\n }\n }\n\n if (\n bestMatch &&\n bestMatch.scrollpoint.className !== previousClassNameRef.current\n ) {\n previousClassNameRef.current = bestMatch.scrollpoint.className;\n setActiveClassName(bestMatch.scrollpoint.className);\n }\n };\n\n observerRef.current = new IntersectionObserver(\n (entries) => {\n // Update the map of currently intersecting elements\n for (const entry of entries) {\n const id = (entry.target as HTMLElement).id;\n if (entry.isIntersecting) {\n intersectingElements.set(id, entry);\n } else {\n intersectingElements.delete(id);\n }\n }\n\n // Schedule best match calculation using entry rects\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n if (!isMounted) return;\n updateBestMatch(true); // Use entry.boundingClientRect\n });\n },\n {\n rootMargin: `-${HEADER_HEIGHT}px 0px 0px 0px`,\n threshold: 0,\n },\n );\n\n // Lightweight scroll handler to re-evaluate on scroll (gets fresh position data)\n const handleScroll = () => {\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n if (!isMounted) return;\n updateBestMatch(false); // Get fresh position data\n });\n };\n\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n scrollpoints.forEach(({ id }) => {\n const element = document.getElementById(id);\n if (element) {\n observerRef.current?.observe(element);\n } else {\n console.warn(\n `useThemedScrollpoints: Element with id \"${id}\" not found in DOM`,\n );\n }\n });\n\n // Manually check initial intersection state since IntersectionObserver\n // callbacks only fire on changes, not on initial observation\n // Use a small timeout to ensure DOM is fully laid out\n const timeoutId = setTimeout(() => {\n if (initialCheckDoneRef.current) {\n return;\n }\n initialCheckDoneRef.current = true;\n\n // Manually populate the intersection map for initial check\n // (observer callbacks haven't fired yet)\n for (const scrollpoint of scrollpoints) {\n const element = document.getElementById(scrollpoint.id);\n if (element) {\n // Create a minimal entry with just the target\n intersectingElements.set(scrollpoint.id, {\n target: element,\n } as unknown as IntersectionObserverEntry);\n }\n }\n\n // Run initial best match calculation (gets fresh position data)\n updateBestMatch(false);\n }, 0);\n\n return () => {\n isMounted = false;\n clearTimeout(timeoutId);\n window.removeEventListener(\"scroll\", handleScroll);\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n observerRef.current?.disconnect();\n observerRef.current = null;\n initialCheckDoneRef.current = false;\n intersectingElements.clear();\n };\n }, [scrollpoints]);\n\n return activeClassName;\n}\n"],"names":["useState","useEffect","useRef","HEADER_HEIGHT","useThemedScrollpoints","scrollpoints","activeClassName","setActiveClassName","previousClassNameRef","observerRef","initialCheckDoneRef","rafIdRef","intersectingElementsRef","Map","length","current","isMounted","intersectingElements","updateBestMatch","useEntryRects","bestMatch","id","entry","scrollpointIndex","findIndex","sp","scrollpoint","rect","boundingClientRect","target","getBoundingClientRect","top","distance","Math","abs","index","className","IntersectionObserver","entries","isIntersecting","set","delete","cancelAnimationFrame","requestAnimationFrame","rootMargin","threshold","handleScroll","window","addEventListener","passive","forEach","element","document","getElementById","observe","console","warn","timeoutId","setTimeout","clearTimeout","removeEventListener","disconnect","clear"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{describe,it,expect,beforeEach,afterEach,vi}from"vitest";import{renderHook,act}from"@testing-library/react";import{useThemedScrollpoints}from"./use-themed-scrollpoints";describe("useThemedScrollpoints",()=>{let observerCallback;let mockObserve;let mockUnobserve;let mockDisconnect;beforeEach(()=>{vi.useFakeTimers();mockObserve=vi.fn();mockUnobserve=vi.fn();mockDisconnect=vi.fn();global.IntersectionObserver=vi.fn(callback=>{observerCallback=callback;return{observe:mockObserve,unobserve:mockUnobserve,disconnect:mockDisconnect}});global.requestAnimationFrame=vi.fn(cb=>{cb(0);return 0})});afterEach(()=>{vi.clearAllMocks();vi.useRealTimers();document.body.innerHTML=""});it("returns first scrollpoint className on mount",()=>{const elem1=document.createElement("div");elem1.id="zone1";elem1.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:200});const elem2=document.createElement("div");elem2.id="zone2";elem2.getBoundingClientRect=vi.fn().mockReturnValue({top:200,bottom:400});document.body.appendChild(elem1);document.body.appendChild(elem2);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}];const{result}=renderHook(()=>useThemedScrollpoints(scrollpoints));expect(result.current).toBe("");act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-light")});it("returns empty string when no scrollpoints provided",()=>{const{result}=renderHook(()=>useThemedScrollpoints([]));expect(result.current).toBe("")});it("does not create IntersectionObserver when no scrollpoints provided",()=>{renderHook(()=>useThemedScrollpoints([]));expect(IntersectionObserver).not.toHaveBeenCalled()});it("creates IntersectionObserver with correct config",()=>{const scrollpoints=[{id:"zone1",className:"theme-light"}];const elem=document.createElement("div");elem.id="zone1";document.body.appendChild(elem);renderHook(()=>useThemedScrollpoints(scrollpoints));expect(IntersectionObserver).toHaveBeenCalledWith(expect.any(Function),expect.objectContaining({rootMargin:"-64px 0px 0px 0px",threshold:0}))});it("observes all scrollpoint elements that exist in DOM",()=>{const elem1=document.createElement("div");elem1.id="zone1";const elem2=document.createElement("div");elem2.id="zone2";document.body.appendChild(elem1);document.body.appendChild(elem2);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}];renderHook(()=>useThemedScrollpoints(scrollpoints));expect(mockObserve).toHaveBeenCalledTimes(2);expect(mockObserve).toHaveBeenCalledWith(elem1);expect(mockObserve).toHaveBeenCalledWith(elem2)});it("logs warning for missing DOM elements",()=>{const consoleWarn=vi.spyOn(console,"warn").mockImplementation(()=>{});const scrollpoints=[{id:"non-existent",className:"theme"}];renderHook(()=>useThemedScrollpoints(scrollpoints));expect(consoleWarn).toHaveBeenCalledWith(expect.stringContaining('Element with id "non-existent" not found'));consoleWarn.mockRestore()});it("observes existing elements and warns about missing ones",()=>{const consoleWarn=vi.spyOn(console,"warn").mockImplementation(()=>{});const elem=document.createElement("div");elem.id="zone1";document.body.appendChild(elem);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"missing",className:"theme-dark"}];renderHook(()=>useThemedScrollpoints(scrollpoints));expect(mockObserve).toHaveBeenCalledTimes(1);expect(mockObserve).toHaveBeenCalledWith(elem);expect(consoleWarn).toHaveBeenCalledWith(expect.stringContaining('Element with id "missing" not found'));consoleWarn.mockRestore()});it("updates className when intersection occurs",()=>{const elem1=document.createElement("div");elem1.id="zone1";elem1.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:200});const elem2=document.createElement("div");elem2.id="zone2";elem2.getBoundingClientRect=vi.fn().mockReturnValue({top:50,bottom:250});document.body.appendChild(elem1);document.body.appendChild(elem2);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}];const{result}=renderHook(()=>useThemedScrollpoints(scrollpoints));act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-dark");act(()=>{observerCallback([{target:elem1,isIntersecting:true,boundingClientRect:{top:60,bottom:260,left:0,right:0,x:0,y:60,width:0,height:200}},{target:elem2,isIntersecting:true,boundingClientRect:{top:100,bottom:300,left:0,right:0,x:0,y:100,width:0,height:200}}],{})});expect(result.current).toBe("theme-light")});it("does not update className if same scrollpoint intersects again",()=>{const elem=document.createElement("div");elem.id="zone1";elem.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:200});document.body.appendChild(elem);const scrollpoints=[{id:"zone1",className:"theme-light"}];const{result}=renderHook(()=>useThemedScrollpoints(scrollpoints));act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-light");const renderCount=result.current;observerCallback([{target:elem,isIntersecting:true,boundingClientRect:{top:0,bottom:200,left:0,right:0,x:0,y:0,width:0,height:200}}],{});expect(result.current).toBe(renderCount)});it("ignores non-intersecting entries",()=>{const elem1=document.createElement("div");elem1.id="zone1";elem1.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:200});const elem2=document.createElement("div");elem2.id="zone2";elem2.getBoundingClientRect=vi.fn().mockReturnValue({top:200,bottom:400});document.body.appendChild(elem1);document.body.appendChild(elem2);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}];const{result}=renderHook(()=>useThemedScrollpoints(scrollpoints));act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-light");observerCallback([{target:elem2,isIntersecting:false}],{});expect(result.current).toBe("theme-light")});it("uses closest element to header when multiple entries intersect",()=>{const elem1=document.createElement("div");elem1.id="zone1";elem1.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:50});const elem2=document.createElement("div");elem2.id="zone2";elem2.getBoundingClientRect=vi.fn().mockReturnValue({top:60,bottom:200});const elem3=document.createElement("div");elem3.id="zone3";elem3.getBoundingClientRect=vi.fn().mockReturnValue({top:10,bottom:100});document.body.appendChild(elem1);document.body.appendChild(elem2);document.body.appendChild(elem3);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"},{id:"zone3",className:"theme-blue"}];const{result}=renderHook(()=>useThemedScrollpoints(scrollpoints));act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-dark");act(()=>{observerCallback([{target:elem1,isIntersecting:false,boundingClientRect:{top:0,bottom:50,left:0,right:0,x:0,y:0,width:0,height:50}},{target:elem2,isIntersecting:true,boundingClientRect:{top:100,bottom:300,left:0,right:0,x:0,y:100,width:0,height:200}},{target:elem3,isIntersecting:true,boundingClientRect:{top:62,bottom:152,left:0,right:0,x:0,y:62,width:0,height:90}}],{})});expect(result.current).toBe("theme-blue")});it("disconnects observer on unmount",()=>{const elem=document.createElement("div");elem.id="zone1";document.body.appendChild(elem);const scrollpoints=[{id:"zone1",className:"theme-light"}];const{unmount}=renderHook(()=>useThemedScrollpoints(scrollpoints));unmount();expect(mockDisconnect).toHaveBeenCalled()});it("recreates observer when scrollpoints change",()=>{const elem1=document.createElement("div");elem1.id="zone1";const elem2=document.createElement("div");elem2.id="zone2";document.body.appendChild(elem1);document.body.appendChild(elem2);const{rerender}=renderHook(({scrollpoints})=>useThemedScrollpoints(scrollpoints),{initialProps:{scrollpoints:[{id:"zone1",className:"theme-light"}]}});expect(IntersectionObserver).toHaveBeenCalledTimes(1);expect(mockObserve).toHaveBeenCalledTimes(1);rerender({scrollpoints:[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}]});expect(mockDisconnect).toHaveBeenCalledTimes(1);expect(IntersectionObserver).toHaveBeenCalledTimes(2);expect(mockObserve).toHaveBeenCalledTimes(3)});it("uses requestAnimationFrame for state updates",()=>{const elem=document.createElement("div");elem.id="zone1";document.body.appendChild(elem);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}];renderHook(()=>useThemedScrollpoints(scrollpoints));const rafSpy=vi.spyOn(global,"requestAnimationFrame");observerCallback([{target:elem,isIntersecting:true}],{});expect(rafSpy).toHaveBeenCalled();rafSpy.mockRestore()})});
|
|
1
|
+
import{describe,it,expect,beforeEach,afterEach,vi}from"vitest";import{renderHook,act}from"@testing-library/react";import{useThemedScrollpoints}from"./use-themed-scrollpoints";describe("useThemedScrollpoints",()=>{let observerCallback;let mockObserve;let mockUnobserve;let mockDisconnect;let originalIntersectionObserver;let originalRequestAnimationFrame;beforeEach(()=>{vi.useFakeTimers();originalIntersectionObserver=global.IntersectionObserver;originalRequestAnimationFrame=global.requestAnimationFrame;mockObserve=vi.fn();mockUnobserve=vi.fn();mockDisconnect=vi.fn();global.IntersectionObserver=vi.fn(callback=>{observerCallback=callback;return{observe:mockObserve,unobserve:mockUnobserve,disconnect:mockDisconnect}});global.requestAnimationFrame=vi.fn(cb=>{cb(0);return 0})});afterEach(()=>{vi.clearAllMocks();vi.useRealTimers();document.body.innerHTML="";global.IntersectionObserver=originalIntersectionObserver;global.requestAnimationFrame=originalRequestAnimationFrame});it("returns first scrollpoint className on mount",()=>{const elem1=document.createElement("div");elem1.id="zone1";elem1.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:200});const elem2=document.createElement("div");elem2.id="zone2";elem2.getBoundingClientRect=vi.fn().mockReturnValue({top:200,bottom:400});document.body.appendChild(elem1);document.body.appendChild(elem2);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}];const{result}=renderHook(()=>useThemedScrollpoints(scrollpoints));expect(result.current).toBe("");act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-light")});it("returns empty string when no scrollpoints provided",()=>{const{result}=renderHook(()=>useThemedScrollpoints([]));expect(result.current).toBe("")});it("clears activeClassName when scrollpoints changes from non-empty to empty",()=>{const elem=document.createElement("div");elem.id="zone1";elem.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:200});document.body.appendChild(elem);const{result,rerender}=renderHook(({scrollpoints})=>useThemedScrollpoints(scrollpoints),{initialProps:{scrollpoints:[{id:"zone1",className:"theme-light"}]}});act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-light");rerender({scrollpoints:[]});expect(result.current).toBe("")});it("does not create IntersectionObserver when no scrollpoints provided",()=>{renderHook(()=>useThemedScrollpoints([]));expect(IntersectionObserver).not.toHaveBeenCalled()});it("creates IntersectionObserver with correct config",()=>{const scrollpoints=[{id:"zone1",className:"theme-light"}];const elem=document.createElement("div");elem.id="zone1";document.body.appendChild(elem);renderHook(()=>useThemedScrollpoints(scrollpoints));expect(IntersectionObserver).toHaveBeenCalledWith(expect.any(Function),expect.objectContaining({rootMargin:"-64px 0px 0px 0px",threshold:0}))});it("observes all scrollpoint elements that exist in DOM",()=>{const elem1=document.createElement("div");elem1.id="zone1";const elem2=document.createElement("div");elem2.id="zone2";document.body.appendChild(elem1);document.body.appendChild(elem2);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}];renderHook(()=>useThemedScrollpoints(scrollpoints));expect(mockObserve).toHaveBeenCalledTimes(2);expect(mockObserve).toHaveBeenCalledWith(elem1);expect(mockObserve).toHaveBeenCalledWith(elem2)});it("logs warning for missing DOM elements",()=>{const consoleWarn=vi.spyOn(console,"warn").mockImplementation(()=>{});const scrollpoints=[{id:"non-existent",className:"theme"}];renderHook(()=>useThemedScrollpoints(scrollpoints));expect(consoleWarn).toHaveBeenCalledWith(expect.stringContaining('Element with id "non-existent" not found'));consoleWarn.mockRestore()});it("observes existing elements and warns about missing ones",()=>{const consoleWarn=vi.spyOn(console,"warn").mockImplementation(()=>{});const elem=document.createElement("div");elem.id="zone1";document.body.appendChild(elem);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"missing",className:"theme-dark"}];renderHook(()=>useThemedScrollpoints(scrollpoints));expect(mockObserve).toHaveBeenCalledTimes(1);expect(mockObserve).toHaveBeenCalledWith(elem);expect(consoleWarn).toHaveBeenCalledWith(expect.stringContaining('Element with id "missing" not found'));consoleWarn.mockRestore()});it("updates className when intersection occurs",()=>{const elem1=document.createElement("div");elem1.id="zone1";elem1.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:200});const elem2=document.createElement("div");elem2.id="zone2";elem2.getBoundingClientRect=vi.fn().mockReturnValue({top:50,bottom:250});document.body.appendChild(elem1);document.body.appendChild(elem2);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}];const{result}=renderHook(()=>useThemedScrollpoints(scrollpoints));act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-dark");act(()=>{observerCallback([{target:elem1,isIntersecting:true,boundingClientRect:{top:60,bottom:260,left:0,right:0,x:0,y:60,width:0,height:200}},{target:elem2,isIntersecting:true,boundingClientRect:{top:100,bottom:300,left:0,right:0,x:0,y:100,width:0,height:200}}],{})});expect(result.current).toBe("theme-light")});it("does not update className if same scrollpoint intersects again",()=>{const elem=document.createElement("div");elem.id="zone1";elem.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:200});document.body.appendChild(elem);const scrollpoints=[{id:"zone1",className:"theme-light"}];const{result}=renderHook(()=>useThemedScrollpoints(scrollpoints));act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-light");const renderCount=result.current;observerCallback([{target:elem,isIntersecting:true,boundingClientRect:{top:0,bottom:200,left:0,right:0,x:0,y:0,width:0,height:200}}],{});expect(result.current).toBe(renderCount)});it("ignores non-intersecting entries",()=>{const elem1=document.createElement("div");elem1.id="zone1";elem1.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:200});const elem2=document.createElement("div");elem2.id="zone2";elem2.getBoundingClientRect=vi.fn().mockReturnValue({top:200,bottom:400});document.body.appendChild(elem1);document.body.appendChild(elem2);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}];const{result}=renderHook(()=>useThemedScrollpoints(scrollpoints));act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-light");observerCallback([{target:elem2,isIntersecting:false}],{});expect(result.current).toBe("theme-light")});it("uses closest element to header when multiple entries intersect",()=>{const elem1=document.createElement("div");elem1.id="zone1";elem1.getBoundingClientRect=vi.fn().mockReturnValue({top:0,bottom:50});const elem2=document.createElement("div");elem2.id="zone2";elem2.getBoundingClientRect=vi.fn().mockReturnValue({top:60,bottom:200});const elem3=document.createElement("div");elem3.id="zone3";elem3.getBoundingClientRect=vi.fn().mockReturnValue({top:10,bottom:100});document.body.appendChild(elem1);document.body.appendChild(elem2);document.body.appendChild(elem3);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"},{id:"zone3",className:"theme-blue"}];const{result}=renderHook(()=>useThemedScrollpoints(scrollpoints));act(()=>{vi.runAllTimers()});expect(result.current).toBe("theme-dark");act(()=>{observerCallback([{target:elem1,isIntersecting:false,boundingClientRect:{top:0,bottom:50,left:0,right:0,x:0,y:0,width:0,height:50}},{target:elem2,isIntersecting:true,boundingClientRect:{top:100,bottom:300,left:0,right:0,x:0,y:100,width:0,height:200}},{target:elem3,isIntersecting:true,boundingClientRect:{top:62,bottom:152,left:0,right:0,x:0,y:62,width:0,height:90}}],{})});expect(result.current).toBe("theme-blue")});it("disconnects observer on unmount",()=>{const elem=document.createElement("div");elem.id="zone1";document.body.appendChild(elem);const scrollpoints=[{id:"zone1",className:"theme-light"}];const{unmount}=renderHook(()=>useThemedScrollpoints(scrollpoints));unmount();expect(mockDisconnect).toHaveBeenCalled()});it("recreates observer when scrollpoints change",()=>{const elem1=document.createElement("div");elem1.id="zone1";const elem2=document.createElement("div");elem2.id="zone2";document.body.appendChild(elem1);document.body.appendChild(elem2);const{rerender}=renderHook(({scrollpoints})=>useThemedScrollpoints(scrollpoints),{initialProps:{scrollpoints:[{id:"zone1",className:"theme-light"}]}});expect(IntersectionObserver).toHaveBeenCalledTimes(1);expect(mockObserve).toHaveBeenCalledTimes(1);rerender({scrollpoints:[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}]});expect(mockDisconnect).toHaveBeenCalledTimes(1);expect(IntersectionObserver).toHaveBeenCalledTimes(2);expect(mockObserve).toHaveBeenCalledTimes(3)});it("uses requestAnimationFrame for state updates",()=>{const elem=document.createElement("div");elem.id="zone1";document.body.appendChild(elem);const scrollpoints=[{id:"zone1",className:"theme-light"},{id:"zone2",className:"theme-dark"}];renderHook(()=>useThemedScrollpoints(scrollpoints));const rafSpy=vi.spyOn(global,"requestAnimationFrame");observerCallback([{target:elem,isIntersecting:true}],{});expect(rafSpy).toHaveBeenCalled();rafSpy.mockRestore()})});
|
|
2
2
|
//# sourceMappingURL=use-themed-scrollpoints.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/hooks/use-themed-scrollpoints.test.ts"],"sourcesContent":["/**\n * @vitest-environment jsdom\n */\n\nimport { describe, it, expect, beforeEach, afterEach, vi } from \"vitest\";\nimport { renderHook, act } from \"@testing-library/react\";\nimport { useThemedScrollpoints } from \"./use-themed-scrollpoints\";\n\ndescribe(\"useThemedScrollpoints\", () => {\n let observerCallback: IntersectionObserverCallback;\n let mockObserve: ReturnType<typeof vi.fn>;\n let mockUnobserve: ReturnType<typeof vi.fn>;\n let mockDisconnect: ReturnType<typeof vi.fn>;\n\n beforeEach(() => {\n vi.useFakeTimers();\n\n // Mock IntersectionObserver\n mockObserve = vi.fn();\n mockUnobserve = vi.fn();\n mockDisconnect = vi.fn();\n\n global.IntersectionObserver = vi.fn((callback) => {\n observerCallback = callback;\n return {\n observe: mockObserve,\n unobserve: mockUnobserve,\n disconnect: mockDisconnect,\n };\n }) as unknown as typeof IntersectionObserver;\n\n // Mock requestAnimationFrame\n global.requestAnimationFrame = vi.fn((cb) => {\n cb(0);\n return 0;\n });\n });\n\n afterEach(() => {\n vi.clearAllMocks();\n vi.useRealTimers();\n document.body.innerHTML = \"\";\n });\n\n it(\"returns first scrollpoint className on mount\", () => {\n // Create DOM elements\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n elem1.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 200 });\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n elem2.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 200, bottom: 400 });\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ];\n\n const { result } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n // Initial state is empty\n expect(result.current).toBe(\"\");\n\n // Advance timer to trigger initial check\n act(() => {\n vi.runAllTimers();\n });\n\n // Should now have the first scrollpoint's className\n expect(result.current).toBe(\"theme-light\");\n });\n\n it(\"returns empty string when no scrollpoints provided\", () => {\n const { result } = renderHook(() => useThemedScrollpoints([]));\n expect(result.current).toBe(\"\");\n });\n\n it(\"does not create IntersectionObserver when no scrollpoints provided\", () => {\n renderHook(() => useThemedScrollpoints([]));\n\n expect(IntersectionObserver).not.toHaveBeenCalled();\n });\n\n it(\"creates IntersectionObserver with correct config\", () => {\n const scrollpoints = [{ id: \"zone1\", className: \"theme-light\" }];\n\n // Create DOM element\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n document.body.appendChild(elem);\n\n renderHook(() => useThemedScrollpoints(scrollpoints));\n\n expect(IntersectionObserver).toHaveBeenCalledWith(\n expect.any(Function),\n expect.objectContaining({\n rootMargin: \"-64px 0px 0px 0px\",\n threshold: 0,\n }),\n );\n });\n\n it(\"observes all scrollpoint elements that exist in DOM\", () => {\n // Create DOM elements\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ];\n\n renderHook(() => useThemedScrollpoints(scrollpoints));\n\n expect(mockObserve).toHaveBeenCalledTimes(2);\n expect(mockObserve).toHaveBeenCalledWith(elem1);\n expect(mockObserve).toHaveBeenCalledWith(elem2);\n });\n\n it(\"logs warning for missing DOM elements\", () => {\n const consoleWarn = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n const scrollpoints = [{ id: \"non-existent\", className: \"theme\" }];\n\n renderHook(() => useThemedScrollpoints(scrollpoints));\n\n expect(consoleWarn).toHaveBeenCalledWith(\n expect.stringContaining('Element with id \"non-existent\" not found'),\n );\n\n consoleWarn.mockRestore();\n });\n\n it(\"observes existing elements and warns about missing ones\", () => {\n const consoleWarn = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n // Create only one element\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n document.body.appendChild(elem);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"missing\", className: \"theme-dark\" },\n ];\n\n renderHook(() => useThemedScrollpoints(scrollpoints));\n\n expect(mockObserve).toHaveBeenCalledTimes(1);\n expect(mockObserve).toHaveBeenCalledWith(elem);\n expect(consoleWarn).toHaveBeenCalledWith(\n expect.stringContaining('Element with id \"missing\" not found'),\n );\n\n consoleWarn.mockRestore();\n });\n\n it(\"updates className when intersection occurs\", () => {\n // Create DOM elements\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n elem1.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 200 });\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n elem2.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 50, bottom: 250 });\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ];\n\n const { result } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n // Wait for initial check\n // elem2 (top=50) is closer to header (64) than elem1 (top=0)\n // distance for elem1: |0 - 64| = 64\n // distance for elem2: |50 - 64| = 14\n act(() => {\n vi.runAllTimers();\n });\n expect(result.current).toBe(\"theme-dark\");\n\n // Simulate scrolling - elem1 moves closer to header position\n act(() => {\n observerCallback(\n [\n {\n target: elem1,\n isIntersecting: true,\n boundingClientRect: {\n top: 60,\n bottom: 260,\n left: 0,\n right: 0,\n x: 0,\n y: 60,\n width: 0,\n height: 200,\n },\n } as unknown as IntersectionObserverEntry,\n {\n target: elem2,\n isIntersecting: true,\n boundingClientRect: {\n top: 100,\n bottom: 300,\n left: 0,\n right: 0,\n x: 0,\n y: 100,\n width: 0,\n height: 200,\n },\n } as unknown as IntersectionObserverEntry,\n ],\n {} as IntersectionObserver,\n );\n });\n\n // elem1 is now closer to header (distance=4 vs elem2 distance=36)\n expect(result.current).toBe(\"theme-light\");\n });\n\n it(\"does not update className if same scrollpoint intersects again\", () => {\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n elem.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 200 });\n document.body.appendChild(elem);\n\n const scrollpoints = [{ id: \"zone1\", className: \"theme-light\" }];\n\n const { result } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n // Wait for initial check\n act(() => {\n vi.runAllTimers();\n });\n expect(result.current).toBe(\"theme-light\");\n\n // Simulate intersection with same element\n const renderCount = result.current;\n observerCallback(\n [\n {\n target: elem,\n isIntersecting: true,\n boundingClientRect: {\n top: 0,\n bottom: 200,\n left: 0,\n right: 0,\n x: 0,\n y: 0,\n width: 0,\n height: 200,\n },\n } as unknown as IntersectionObserverEntry,\n ],\n {} as IntersectionObserver,\n );\n\n // Should not trigger re-render (className unchanged)\n expect(result.current).toBe(renderCount);\n });\n\n it(\"ignores non-intersecting entries\", () => {\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n elem1.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 200 });\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n elem2.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 200, bottom: 400 });\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ];\n\n const { result } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n // Wait for initial check\n act(() => {\n vi.runAllTimers();\n });\n expect(result.current).toBe(\"theme-light\");\n\n // Simulate non-intersecting entry\n observerCallback(\n [\n {\n target: elem2,\n isIntersecting: false,\n } as unknown as IntersectionObserverEntry,\n ],\n {} as IntersectionObserver,\n );\n\n // Should remain unchanged\n expect(result.current).toBe(\"theme-light\");\n });\n\n it(\"uses closest element to header when multiple entries intersect\", () => {\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n elem1.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 50 });\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n // zone2 top is at 60, which is closer to HEADER_HEIGHT (64) than zone3\n elem2.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 60, bottom: 200 });\n const elem3 = document.createElement(\"div\");\n elem3.id = \"zone3\";\n elem3.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 10, bottom: 100 });\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n document.body.appendChild(elem3);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n { id: \"zone3\", className: \"theme-blue\" },\n ];\n\n const { result } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n // Wait for initial check\n // elem2 (top=60) is closest to header (64) with distance=4\n // elem3 (top=10) has distance=54\n // elem1 (top=0) doesn't contain header (bottom=50 < 64)\n act(() => {\n vi.runAllTimers();\n });\n expect(result.current).toBe(\"theme-dark\");\n\n // Simulate scrolling where elem3 becomes closest to header\n act(() => {\n observerCallback(\n [\n {\n target: elem1,\n isIntersecting: false,\n boundingClientRect: {\n top: 0,\n bottom: 50,\n left: 0,\n right: 0,\n x: 0,\n y: 0,\n width: 0,\n height: 50,\n },\n } as unknown as IntersectionObserverEntry,\n {\n target: elem2,\n isIntersecting: true,\n boundingClientRect: {\n top: 100,\n bottom: 300,\n left: 0,\n right: 0,\n x: 0,\n y: 100,\n width: 0,\n height: 200,\n },\n } as unknown as IntersectionObserverEntry,\n {\n target: elem3,\n isIntersecting: true,\n boundingClientRect: {\n top: 62,\n bottom: 152,\n left: 0,\n right: 0,\n x: 0,\n y: 62,\n width: 0,\n height: 90,\n },\n } as unknown as IntersectionObserverEntry,\n ],\n {} as IntersectionObserver,\n );\n });\n\n // elem3 is now closest to HEADER_HEIGHT (64)\n // distance for elem2: |100 - 64| = 36\n // distance for elem3: |62 - 64| = 2\n expect(result.current).toBe(\"theme-blue\");\n });\n\n it(\"disconnects observer on unmount\", () => {\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n document.body.appendChild(elem);\n\n const scrollpoints = [{ id: \"zone1\", className: \"theme-light\" }];\n\n const { unmount } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n unmount();\n\n expect(mockDisconnect).toHaveBeenCalled();\n });\n\n it(\"recreates observer when scrollpoints change\", () => {\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n\n const { rerender } = renderHook(\n ({ scrollpoints }) => useThemedScrollpoints(scrollpoints),\n {\n initialProps: {\n scrollpoints: [{ id: \"zone1\", className: \"theme-light\" }],\n },\n },\n );\n\n expect(IntersectionObserver).toHaveBeenCalledTimes(1);\n expect(mockObserve).toHaveBeenCalledTimes(1);\n\n // Change scrollpoints\n rerender({\n scrollpoints: [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ],\n });\n\n // Should disconnect old observer and create new one\n expect(mockDisconnect).toHaveBeenCalledTimes(1);\n expect(IntersectionObserver).toHaveBeenCalledTimes(2);\n expect(mockObserve).toHaveBeenCalledTimes(3); // 1 from first render + 2 from second\n });\n\n it(\"uses requestAnimationFrame for state updates\", () => {\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n document.body.appendChild(elem);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ];\n\n renderHook(() => useThemedScrollpoints(scrollpoints));\n\n const rafSpy = vi.spyOn(global, \"requestAnimationFrame\");\n\n // Simulate intersection\n observerCallback(\n [\n {\n target: elem,\n isIntersecting: true,\n } as unknown as IntersectionObserverEntry,\n ],\n {} as IntersectionObserver,\n );\n\n expect(rafSpy).toHaveBeenCalled();\n\n rafSpy.mockRestore();\n });\n});\n"],"names":["describe","it","expect","beforeEach","afterEach","vi","renderHook","act","useThemedScrollpoints","observerCallback","mockObserve","mockUnobserve","mockDisconnect","useFakeTimers","fn","global","IntersectionObserver","callback","observe","unobserve","disconnect","requestAnimationFrame","cb","clearAllMocks","useRealTimers","document","body","innerHTML","elem1","createElement","id","getBoundingClientRect","mockReturnValue","top","bottom","elem2","appendChild","scrollpoints","className","result","current","toBe","runAllTimers","not","toHaveBeenCalled","elem","toHaveBeenCalledWith","any","Function","objectContaining","rootMargin","threshold","toHaveBeenCalledTimes","consoleWarn","spyOn","console","mockImplementation","stringContaining","mockRestore","target","isIntersecting","boundingClientRect","left","right","x","y","width","height","renderCount","elem3","unmount","rerender","initialProps","rafSpy"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/hooks/use-themed-scrollpoints.test.ts"],"sourcesContent":["/**\n * @vitest-environment jsdom\n */\n\nimport { describe, it, expect, beforeEach, afterEach, vi } from \"vitest\";\nimport { renderHook, act } from \"@testing-library/react\";\nimport { useThemedScrollpoints } from \"./use-themed-scrollpoints\";\n\ndescribe(\"useThemedScrollpoints\", () => {\n let observerCallback: IntersectionObserverCallback;\n let mockObserve: ReturnType<typeof vi.fn>;\n let mockUnobserve: ReturnType<typeof vi.fn>;\n let mockDisconnect: ReturnType<typeof vi.fn>;\n let originalIntersectionObserver: typeof IntersectionObserver;\n let originalRequestAnimationFrame: typeof requestAnimationFrame;\n\n beforeEach(() => {\n vi.useFakeTimers();\n\n // Save originals to prevent test pollution\n originalIntersectionObserver = global.IntersectionObserver;\n originalRequestAnimationFrame = global.requestAnimationFrame;\n\n // Mock IntersectionObserver\n mockObserve = vi.fn();\n mockUnobserve = vi.fn();\n mockDisconnect = vi.fn();\n\n global.IntersectionObserver = vi.fn((callback) => {\n observerCallback = callback;\n return {\n observe: mockObserve,\n unobserve: mockUnobserve,\n disconnect: mockDisconnect,\n };\n }) as unknown as typeof IntersectionObserver;\n\n // Mock requestAnimationFrame\n global.requestAnimationFrame = vi.fn((cb) => {\n cb(0);\n return 0;\n });\n });\n\n afterEach(() => {\n vi.clearAllMocks();\n vi.useRealTimers();\n document.body.innerHTML = \"\";\n // Restore originals to prevent test pollution\n global.IntersectionObserver = originalIntersectionObserver;\n global.requestAnimationFrame = originalRequestAnimationFrame;\n });\n\n it(\"returns first scrollpoint className on mount\", () => {\n // Create DOM elements\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n elem1.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 200 });\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n elem2.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 200, bottom: 400 });\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ];\n\n const { result } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n // Initial state is empty\n expect(result.current).toBe(\"\");\n\n // Advance timer to trigger initial check\n act(() => {\n vi.runAllTimers();\n });\n\n // Should now have the first scrollpoint's className\n expect(result.current).toBe(\"theme-light\");\n });\n\n it(\"returns empty string when no scrollpoints provided\", () => {\n const { result } = renderHook(() => useThemedScrollpoints([]));\n expect(result.current).toBe(\"\");\n });\n\n it(\"clears activeClassName when scrollpoints changes from non-empty to empty\", () => {\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n elem.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 200 });\n document.body.appendChild(elem);\n\n const { result, rerender } = renderHook(\n ({ scrollpoints }) => useThemedScrollpoints(scrollpoints),\n {\n initialProps: {\n scrollpoints: [{ id: \"zone1\", className: \"theme-light\" }],\n },\n },\n );\n\n // Wait for initial check\n act(() => {\n vi.runAllTimers();\n });\n expect(result.current).toBe(\"theme-light\");\n\n // Change to empty scrollpoints\n rerender({ scrollpoints: [] });\n\n // Should clear the className\n expect(result.current).toBe(\"\");\n });\n\n it(\"does not create IntersectionObserver when no scrollpoints provided\", () => {\n renderHook(() => useThemedScrollpoints([]));\n\n expect(IntersectionObserver).not.toHaveBeenCalled();\n });\n\n it(\"creates IntersectionObserver with correct config\", () => {\n const scrollpoints = [{ id: \"zone1\", className: \"theme-light\" }];\n\n // Create DOM element\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n document.body.appendChild(elem);\n\n renderHook(() => useThemedScrollpoints(scrollpoints));\n\n expect(IntersectionObserver).toHaveBeenCalledWith(\n expect.any(Function),\n expect.objectContaining({\n rootMargin: \"-64px 0px 0px 0px\",\n threshold: 0,\n }),\n );\n });\n\n it(\"observes all scrollpoint elements that exist in DOM\", () => {\n // Create DOM elements\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ];\n\n renderHook(() => useThemedScrollpoints(scrollpoints));\n\n expect(mockObserve).toHaveBeenCalledTimes(2);\n expect(mockObserve).toHaveBeenCalledWith(elem1);\n expect(mockObserve).toHaveBeenCalledWith(elem2);\n });\n\n it(\"logs warning for missing DOM elements\", () => {\n const consoleWarn = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n const scrollpoints = [{ id: \"non-existent\", className: \"theme\" }];\n\n renderHook(() => useThemedScrollpoints(scrollpoints));\n\n expect(consoleWarn).toHaveBeenCalledWith(\n expect.stringContaining('Element with id \"non-existent\" not found'),\n );\n\n consoleWarn.mockRestore();\n });\n\n it(\"observes existing elements and warns about missing ones\", () => {\n const consoleWarn = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n // Create only one element\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n document.body.appendChild(elem);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"missing\", className: \"theme-dark\" },\n ];\n\n renderHook(() => useThemedScrollpoints(scrollpoints));\n\n expect(mockObserve).toHaveBeenCalledTimes(1);\n expect(mockObserve).toHaveBeenCalledWith(elem);\n expect(consoleWarn).toHaveBeenCalledWith(\n expect.stringContaining('Element with id \"missing\" not found'),\n );\n\n consoleWarn.mockRestore();\n });\n\n it(\"updates className when intersection occurs\", () => {\n // Create DOM elements\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n elem1.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 200 });\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n elem2.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 50, bottom: 250 });\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ];\n\n const { result } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n // Wait for initial check\n // elem2 (top=50) is closer to header (64) than elem1 (top=0)\n // distance for elem1: |0 - 64| = 64\n // distance for elem2: |50 - 64| = 14\n act(() => {\n vi.runAllTimers();\n });\n expect(result.current).toBe(\"theme-dark\");\n\n // Simulate scrolling - elem1 moves closer to header position\n act(() => {\n observerCallback(\n [\n {\n target: elem1,\n isIntersecting: true,\n boundingClientRect: {\n top: 60,\n bottom: 260,\n left: 0,\n right: 0,\n x: 0,\n y: 60,\n width: 0,\n height: 200,\n },\n } as unknown as IntersectionObserverEntry,\n {\n target: elem2,\n isIntersecting: true,\n boundingClientRect: {\n top: 100,\n bottom: 300,\n left: 0,\n right: 0,\n x: 0,\n y: 100,\n width: 0,\n height: 200,\n },\n } as unknown as IntersectionObserverEntry,\n ],\n {} as IntersectionObserver,\n );\n });\n\n // elem1 is now closer to header (distance=4 vs elem2 distance=36)\n expect(result.current).toBe(\"theme-light\");\n });\n\n it(\"does not update className if same scrollpoint intersects again\", () => {\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n elem.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 200 });\n document.body.appendChild(elem);\n\n const scrollpoints = [{ id: \"zone1\", className: \"theme-light\" }];\n\n const { result } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n // Wait for initial check\n act(() => {\n vi.runAllTimers();\n });\n expect(result.current).toBe(\"theme-light\");\n\n // Simulate intersection with same element\n const renderCount = result.current;\n observerCallback(\n [\n {\n target: elem,\n isIntersecting: true,\n boundingClientRect: {\n top: 0,\n bottom: 200,\n left: 0,\n right: 0,\n x: 0,\n y: 0,\n width: 0,\n height: 200,\n },\n } as unknown as IntersectionObserverEntry,\n ],\n {} as IntersectionObserver,\n );\n\n // Should not trigger re-render (className unchanged)\n expect(result.current).toBe(renderCount);\n });\n\n it(\"ignores non-intersecting entries\", () => {\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n elem1.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 200 });\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n elem2.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 200, bottom: 400 });\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ];\n\n const { result } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n // Wait for initial check\n act(() => {\n vi.runAllTimers();\n });\n expect(result.current).toBe(\"theme-light\");\n\n // Simulate non-intersecting entry\n observerCallback(\n [\n {\n target: elem2,\n isIntersecting: false,\n } as unknown as IntersectionObserverEntry,\n ],\n {} as IntersectionObserver,\n );\n\n // Should remain unchanged\n expect(result.current).toBe(\"theme-light\");\n });\n\n it(\"uses closest element to header when multiple entries intersect\", () => {\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n elem1.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 0, bottom: 50 });\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n // zone2 top is at 60, which is closer to HEADER_HEIGHT (64) than zone3\n elem2.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 60, bottom: 200 });\n const elem3 = document.createElement(\"div\");\n elem3.id = \"zone3\";\n elem3.getBoundingClientRect = vi\n .fn()\n .mockReturnValue({ top: 10, bottom: 100 });\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n document.body.appendChild(elem3);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n { id: \"zone3\", className: \"theme-blue\" },\n ];\n\n const { result } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n // Wait for initial check\n // elem2 (top=60) is closest to header (64) with distance=4\n // elem3 (top=10) has distance=54\n // elem1 (top=0) doesn't contain header (bottom=50 < 64)\n act(() => {\n vi.runAllTimers();\n });\n expect(result.current).toBe(\"theme-dark\");\n\n // Simulate scrolling where elem3 becomes closest to header\n act(() => {\n observerCallback(\n [\n {\n target: elem1,\n isIntersecting: false,\n boundingClientRect: {\n top: 0,\n bottom: 50,\n left: 0,\n right: 0,\n x: 0,\n y: 0,\n width: 0,\n height: 50,\n },\n } as unknown as IntersectionObserverEntry,\n {\n target: elem2,\n isIntersecting: true,\n boundingClientRect: {\n top: 100,\n bottom: 300,\n left: 0,\n right: 0,\n x: 0,\n y: 100,\n width: 0,\n height: 200,\n },\n } as unknown as IntersectionObserverEntry,\n {\n target: elem3,\n isIntersecting: true,\n boundingClientRect: {\n top: 62,\n bottom: 152,\n left: 0,\n right: 0,\n x: 0,\n y: 62,\n width: 0,\n height: 90,\n },\n } as unknown as IntersectionObserverEntry,\n ],\n {} as IntersectionObserver,\n );\n });\n\n // elem3 is now closest to HEADER_HEIGHT (64)\n // distance for elem2: |100 - 64| = 36\n // distance for elem3: |62 - 64| = 2\n expect(result.current).toBe(\"theme-blue\");\n });\n\n it(\"disconnects observer on unmount\", () => {\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n document.body.appendChild(elem);\n\n const scrollpoints = [{ id: \"zone1\", className: \"theme-light\" }];\n\n const { unmount } = renderHook(() => useThemedScrollpoints(scrollpoints));\n\n unmount();\n\n expect(mockDisconnect).toHaveBeenCalled();\n });\n\n it(\"recreates observer when scrollpoints change\", () => {\n const elem1 = document.createElement(\"div\");\n elem1.id = \"zone1\";\n const elem2 = document.createElement(\"div\");\n elem2.id = \"zone2\";\n document.body.appendChild(elem1);\n document.body.appendChild(elem2);\n\n const { rerender } = renderHook(\n ({ scrollpoints }) => useThemedScrollpoints(scrollpoints),\n {\n initialProps: {\n scrollpoints: [{ id: \"zone1\", className: \"theme-light\" }],\n },\n },\n );\n\n expect(IntersectionObserver).toHaveBeenCalledTimes(1);\n expect(mockObserve).toHaveBeenCalledTimes(1);\n\n // Change scrollpoints\n rerender({\n scrollpoints: [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ],\n });\n\n // Should disconnect old observer and create new one\n expect(mockDisconnect).toHaveBeenCalledTimes(1);\n expect(IntersectionObserver).toHaveBeenCalledTimes(2);\n expect(mockObserve).toHaveBeenCalledTimes(3); // 1 from first render + 2 from second\n });\n\n it(\"uses requestAnimationFrame for state updates\", () => {\n const elem = document.createElement(\"div\");\n elem.id = \"zone1\";\n document.body.appendChild(elem);\n\n const scrollpoints = [\n { id: \"zone1\", className: \"theme-light\" },\n { id: \"zone2\", className: \"theme-dark\" },\n ];\n\n renderHook(() => useThemedScrollpoints(scrollpoints));\n\n const rafSpy = vi.spyOn(global, \"requestAnimationFrame\");\n\n // Simulate intersection\n observerCallback(\n [\n {\n target: elem,\n isIntersecting: true,\n } as unknown as IntersectionObserverEntry,\n ],\n {} as IntersectionObserver,\n );\n\n expect(rafSpy).toHaveBeenCalled();\n\n rafSpy.mockRestore();\n });\n});\n"],"names":["describe","it","expect","beforeEach","afterEach","vi","renderHook","act","useThemedScrollpoints","observerCallback","mockObserve","mockUnobserve","mockDisconnect","originalIntersectionObserver","originalRequestAnimationFrame","useFakeTimers","global","IntersectionObserver","requestAnimationFrame","fn","callback","observe","unobserve","disconnect","cb","clearAllMocks","useRealTimers","document","body","innerHTML","elem1","createElement","id","getBoundingClientRect","mockReturnValue","top","bottom","elem2","appendChild","scrollpoints","className","result","current","toBe","runAllTimers","elem","rerender","initialProps","not","toHaveBeenCalled","toHaveBeenCalledWith","any","Function","objectContaining","rootMargin","threshold","toHaveBeenCalledTimes","consoleWarn","spyOn","console","mockImplementation","stringContaining","mockRestore","target","isIntersecting","boundingClientRect","left","right","x","y","width","height","renderCount","elem3","unmount","rafSpy"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M0.75 21.75C0.75 33.348 10.152 42.75 21.75 42.75C33.348 42.75 42.75 33.348 42.75 21.75C42.75 10.152 33.348 0.75 21.75 0.75" stroke="#FF5416" stroke-width="1.5" stroke-linecap="round" stroke-dasharray="1.5 5"/>
|
|
3
|
+
<rect x="10.75" y="13.75" width="22" height="16" rx="1.86335" stroke="#C6CED9" stroke-width="1.60714"/>
|
|
4
|
+
<path d="M11.75 14.75L22.0601 21.75L31.75 14.75" stroke="#C6CED9" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
5
|
+
<path d="M0.75 21.75C0.75 10.152 10.152 0.75 21.75 0.75" stroke="#FF5416" stroke-width="1.5" stroke-linecap="round" stroke-dasharray="1.5 5"/>
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg width="45" height="48" viewBox="0 0 45 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.1372 42.3263C15.9301 42.685 15.4714 42.8079 15.1127 42.6008L15.1026 42.595C14.7439 42.3879 14.621 41.9292 14.8281 41.5705C15.0352 41.2118 15.4939 41.0889 15.8526 41.296L15.8627 41.3018C16.2214 41.5089 16.3443 41.9676 16.1372 42.3263ZM28.8632 42.3263C28.6561 41.9676 28.779 41.5089 29.1377 41.3018L29.1477 41.296C29.5064 41.0889 29.9651 41.2118 30.1722 41.5705C30.3793 41.9292 30.2564 42.3879 29.8977 42.595L29.8877 42.6008C29.529 42.8079 29.0703 42.685 28.8632 42.3263ZM33.8807 39.4294C33.6736 39.0707 33.7965 38.612 34.1552 38.4049L34.1652 38.3991C34.5239 38.192 34.9826 38.3149 35.1897 38.6736C35.3968 39.0324 35.2739 39.4911 34.9152 39.6982L34.9052 39.7039C34.5465 39.911 34.0878 39.7881 33.8807 39.4294ZM11.1197 39.4294C10.9126 39.7881 10.4539 39.911 10.0951 39.7039L10.0851 39.6982C9.72641 39.4911 9.6035 39.0324 9.81061 38.6736C10.0177 38.3149 10.4764 38.192 10.8351 38.3991L10.8451 38.4049C11.2039 38.612 11.3268 39.0707 11.1197 39.4294ZM41.5527 27.6526C41.1385 27.6526 40.8027 27.3168 40.8027 26.9026L40.8027 26.8911C40.8027 26.4768 41.1385 26.1411 41.5527 26.1411C41.9669 26.1411 42.3027 26.4768 42.3027 26.8911L42.3027 26.9026C42.3027 27.3168 41.9669 27.6526 41.5527 27.6526ZM3.44762 27.6526C3.0334 27.6526 2.69762 27.3168 2.69762 26.9026L2.69762 26.891C2.69762 26.4768 3.0334 26.141 3.44762 26.141C3.86183 26.141 4.19762 26.4768 4.19762 26.891L4.19762 26.9026C4.19762 27.3168 3.86183 27.6526 3.44762 27.6526ZM41.5527 21.8589C41.1385 21.8589 40.8027 21.5231 40.8027 21.1089L40.8027 21.0973C40.8027 20.6831 41.1385 20.3473 41.5527 20.3473C41.9669 20.3473 42.3027 20.6831 42.3027 21.0973L42.3027 21.1089C42.3027 21.5231 41.9669 21.8589 41.5527 21.8589ZM3.44762 21.8589C3.0334 21.8589 2.69762 21.5231 2.69762 21.1089L2.69762 21.0973C2.69762 20.6831 3.0334 20.3473 3.44762 20.3473C3.86183 20.3473 4.19762 20.6831 4.19762 21.0973L4.19762 21.1089C4.19762 21.5231 3.86183 21.8589 3.44762 21.8589ZM35.1897 9.32629C34.9826 9.68501 34.5239 9.80791 34.1652 9.60081L34.1552 9.59503C33.7965 9.38792 33.6736 8.92923 33.8807 8.57051C34.0878 8.21179 34.5465 8.08888 34.9052 8.29599L34.9152 8.30177C35.2739 8.50888 35.3969 8.96757 35.1897 9.32629ZM9.81061 9.32629C9.60351 8.96757 9.72641 8.50887 10.0851 8.30177L10.0951 8.29599C10.4539 8.08888 10.9126 8.21179 11.1197 8.5705C11.3268 8.92922 11.2039 9.38792 10.8451 9.59503L10.8351 9.6008C10.4764 9.80791 10.0177 9.68501 9.81061 9.32629ZM30.1722 6.42942C29.9651 6.78814 29.5064 6.91105 29.1477 6.70394L29.1377 6.69816C28.779 6.49105 28.6561 6.03236 28.8632 5.67364C29.0703 5.31492 29.529 5.19202 29.8877 5.39912L29.8977 5.4049C30.2564 5.61201 30.3793 6.0707 30.1722 6.42942ZM14.8281 6.42942C14.621 6.0707 14.7439 5.61201 15.1027 5.4049L15.1127 5.39912C15.4714 5.19201 15.9301 5.31492 16.1372 5.67364C16.3443 6.03236 16.2214 6.49105 15.8627 6.69816L15.8527 6.70394C15.4939 6.91105 15.0352 6.78814 14.8281 6.42942Z" fill="#C6CED9"/>
|
|
3
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.5 8C24.7091 8 26.5 6.20914 26.5 4C26.5 1.79086 24.7091 0 22.5 0C20.2909 0 18.5 1.79086 18.5 4C18.5 6.20914 20.2909 8 22.5 8Z" fill="#FF5416"/>
|
|
4
|
+
<path d="M40.5 38C42.7091 38 44.5 36.2091 44.5 34C44.5 31.7909 42.7091 30 40.5 30C38.2909 30 36.5 31.7909 36.5 34C36.5 36.2091 38.2909 38 40.5 38Z" fill="#FF5416"/>
|
|
5
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.90967 10C1.35738 10 0.909668 10.4477 0.909668 11V17C0.909668 17.5523 1.35738 18 1.90967 18H7.90967C8.46195 18 8.90967 17.5523 8.90967 17V11C8.90967 10.4477 8.46195 10 7.90967 10H1.90967Z" fill="#FF5416"/>
|
|
6
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.5 40C18.9477 40 18.5 40.4477 18.5 41V47C18.5 47.5523 18.9477 48 19.5 48H25.5C26.0523 48 26.5 47.5523 26.5 47V41C26.5 40.4477 26.0523 40 25.5 40H19.5Z" fill="#FF5416"/>
|
|
7
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M41.366 10.5C40.9811 9.83333 40.0189 9.83333 39.634 10.5L36.1699 16.5C35.785 17.1667 36.2661 18 37.0359 18H43.9641C44.7339 18 45.215 17.1667 44.8301 16.5L41.366 10.5Z" fill="#FF5416"/>
|
|
8
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.33162 30.5C4.94672 29.8333 3.98447 29.8333 3.59957 30.5L0.135467 36.5C-0.249434 37.1667 0.231691 38 1.00149 38H7.92969C8.69949 38 9.18062 37.1667 8.79572 36.5L5.33162 30.5Z" fill="#FF5416"/>
|
|
9
|
+
<rect x="12.6875" y="17" width="20.125" height="14" rx="1.75" stroke="#C6CED9" stroke-width="1.5"/>
|
|
10
|
+
<path d="M13.3437 17.6562L23.0417 24.4375L32.1562 17.6562" stroke="#C6CED9" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
11
|
+
</svg>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.75 4C2.75 3.30964 3.30964 2.75 4 2.75H15C15.4142 2.75 15.75 2.41421 15.75 2C15.75 1.58579 15.4142 1.25 15 1.25H4C2.48122 1.25 1.25 2.48122 1.25 4V20C1.25 21.5188 2.48122 22.75 4 22.75H20C21.5188 22.75 22.75 21.5188 22.75 20V9.47619C22.75 9.06198 22.4142 8.72619 22 8.72619C21.5858 8.72619 21.25 9.06198 21.25 9.47619V20C21.25 20.6904 20.6904 21.25 20 21.25H4C3.30964 21.25 2.75 20.6904 2.75 20V4ZM20.624 3.41603C20.8538 3.07138 20.7607 2.60573 20.416 2.37596C20.0714 2.1462 19.6057 2.23933 19.376 2.58397L11.9449 13.7306L8.58565 9.53148C8.32689 9.20803 7.85493 9.15559 7.53148 9.41435C7.20803 9.67311 7.15559 10.1451 7.41435 10.4685L11.4143 15.4685C11.5638 15.6554 11.7935 15.7597 12.0325 15.7493C12.2716 15.7389 12.4913 15.6151 12.624 15.416L20.624 3.41603Z" fill="
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.75 4C2.75 3.30964 3.30964 2.75 4 2.75H15C15.4142 2.75 15.75 2.41421 15.75 2C15.75 1.58579 15.4142 1.25 15 1.25H4C2.48122 1.25 1.25 2.48122 1.25 4V20C1.25 21.5188 2.48122 22.75 4 22.75H20C21.5188 22.75 22.75 21.5188 22.75 20V9.47619C22.75 9.06198 22.4142 8.72619 22 8.72619C21.5858 8.72619 21.25 9.06198 21.25 9.47619V20C21.25 20.6904 20.6904 21.25 20 21.25H4C3.30964 21.25 2.75 20.6904 2.75 20V4ZM20.624 3.41603C20.8538 3.07138 20.7607 2.60573 20.416 2.37596C20.0714 2.1462 19.6057 2.23933 19.376 2.58397L11.9449 13.7306L8.58565 9.53148C8.32689 9.20803 7.85493 9.15559 7.53148 9.41435C7.20803 9.67311 7.15559 10.1451 7.41435 10.4685L11.4143 15.4685C11.5638 15.6554 11.7935 15.7597 12.0325 15.7493C12.2716 15.7389 12.4913 15.6151 12.624 15.416L20.624 3.41603Z" fill="currentColor"/>
|
|
3
3
|
</svg>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M20 22.5H4C3.72386 22.5 3.5 22.2761 3.5 22V2C3.5 1.72386 3.72386 1.5 4 1.5H14.7574C15.1552 1.5 15.5367 1.65804 15.818 1.93934L20.0607 6.18198C20.342 6.46328 20.5 6.84482 20.5 7.24264V22C20.5 22.2761 20.2761 22.5 20 22.5ZM21.1213 5.12132L16.8787 0.87868C16.3161 0.316071 15.553 0 14.7574 0H4C2.89543 0 2 0.89543 2 2V22C2 23.1046 2.89543 24 4 24H20C21.1046 24 22 23.1046 22 22V7.24264C22 6.44699 21.6839 5.68393 21.1213 5.12132ZM9.48014 8.07619C9.79835 7.81101 9.84134 7.33809 9.57617 7.01988C9.31099 6.70167 8.83807 6.65868 8.51986 6.92385L5.51986 9.42385C5.34887 9.56635 5.25 9.77743 5.25 10C5.25 10.2226 5.34887 10.4337 5.51986 10.5762L8.51986 13.0762C8.83807 13.3414 9.31099 13.2984 9.57617 12.9802C9.84134 12.6619 9.79835 12.189 9.48014 11.9239L7.17154 10L9.48014 8.07619ZM13.7155 6.28158C14.1123 6.40061 14.3374 6.81872 14.2184 7.21546L11.2184 17.2155C11.0994 17.6122 10.6812 17.8373 10.2845 17.7183C9.88776 17.5993 9.66262 17.1812 9.78164 16.7844L12.7816 6.78444C12.9007 6.3877 13.3188 6.16256 13.7155 6.28158ZM14.5199 12.0762C14.2017 11.811 14.1587 11.3381 14.4238 11.0199C14.689 10.7017 15.1619 10.6587 15.4801 10.9239L18.4801 13.4239C18.6511 13.5663 18.75 13.7774 18.75 14C18.75 14.2226 18.6511 14.4337 18.4801 14.5762L15.4801 17.0762C15.1619 17.3414 14.689 17.2984 14.4238 16.9802C14.1587 16.6619 14.2017 16.189 14.5199 15.9239L16.8285 14L14.5199 12.0762Z" fill="
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M20 22.5H4C3.72386 22.5 3.5 22.2761 3.5 22V2C3.5 1.72386 3.72386 1.5 4 1.5H14.7574C15.1552 1.5 15.5367 1.65804 15.818 1.93934L20.0607 6.18198C20.342 6.46328 20.5 6.84482 20.5 7.24264V22C20.5 22.2761 20.2761 22.5 20 22.5ZM21.1213 5.12132L16.8787 0.87868C16.3161 0.316071 15.553 0 14.7574 0H4C2.89543 0 2 0.89543 2 2V22C2 23.1046 2.89543 24 4 24H20C21.1046 24 22 23.1046 22 22V7.24264C22 6.44699 21.6839 5.68393 21.1213 5.12132ZM9.48014 8.07619C9.79835 7.81101 9.84134 7.33809 9.57617 7.01988C9.31099 6.70167 8.83807 6.65868 8.51986 6.92385L5.51986 9.42385C5.34887 9.56635 5.25 9.77743 5.25 10C5.25 10.2226 5.34887 10.4337 5.51986 10.5762L8.51986 13.0762C8.83807 13.3414 9.31099 13.2984 9.57617 12.9802C9.84134 12.6619 9.79835 12.189 9.48014 11.9239L7.17154 10L9.48014 8.07619ZM13.7155 6.28158C14.1123 6.40061 14.3374 6.81872 14.2184 7.21546L11.2184 17.2155C11.0994 17.6122 10.6812 17.8373 10.2845 17.7183C9.88776 17.5993 9.66262 17.1812 9.78164 16.7844L12.7816 6.78444C12.9007 6.3877 13.3188 6.16256 13.7155 6.28158ZM14.5199 12.0762C14.2017 11.811 14.1587 11.3381 14.4238 11.0199C14.689 10.7017 15.1619 10.6587 15.4801 10.9239L18.4801 13.4239C18.6511 13.5663 18.75 13.7774 18.75 14C18.75 14.2226 18.6511 14.4337 18.4801 14.5762L15.4801 17.0762C15.1619 17.3414 14.689 17.2984 14.4238 16.9802C14.1587 16.6619 14.2017 16.189 14.5199 15.9239L16.8285 14L14.5199 12.0762Z" fill="currentColor"/>
|
|
3
3
|
</svg>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M3.13514 2.05579L21.45 9.0167C22.1532 9.28395 22.1915 10.2931 21.5107 10.616L14.3709 14.0027C14.1629 14.1014 14.0029 14.2832 13.9279 14.506L11.6035 21.4172C11.3542 22.1584 10.3529 22.2041 10.0409 21.4885L2.07622 3.22313C1.77086 2.52285 2.43569 1.78995 3.13514 2.05579Z" stroke="
|
|
2
|
+
<path d="M3.13514 2.05579L21.45 9.0167C22.1532 9.28395 22.1915 10.2931 21.5107 10.616L14.3709 14.0027C14.1629 14.1014 14.0029 14.2832 13.9279 14.506L11.6035 21.4172C11.3542 22.1584 10.3529 22.2041 10.0409 21.4885L2.07622 3.22313C1.77086 2.52285 2.43569 1.78995 3.13514 2.05579Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/>
|
|
3
3
|
</svg>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.1174 16.434C15.8214 16.7628 15.8481 17.2694 16.1769 17.5653C16.5058 17.8613 17.0123 17.8346 17.3082 17.5058L21.7821 12.5348C21.9172 12.3914 22 12.1982 22 11.9856C22 11.7782 21.9212 11.5892 21.7919 11.4469L17.3082 6.46514C17.0123 6.13629 16.5058 6.10963 16.1769 6.4056C15.8481 6.70156 15.8214 7.20807 16.1174 7.53691L19.4002 11.1845L6.24565 11.1845C5.80323 11.1845 5.44458 11.5432 5.44458 11.9856C5.44458 12.428 5.80323 12.7867 6.24565 12.7867L19.4 12.7867L16.1174 16.434Z" fill="
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.1174 16.434C15.8214 16.7628 15.8481 17.2694 16.1769 17.5653C16.5058 17.8613 17.0123 17.8346 17.3082 17.5058L21.7821 12.5348C21.9172 12.3914 22 12.1982 22 11.9856C22 11.7782 21.9212 11.5892 21.7919 11.4469L17.3082 6.46514C17.0123 6.13629 16.5058 6.10963 16.1769 6.4056C15.8481 6.70156 15.8214 7.20807 16.1174 7.53691L19.4002 11.1845L6.24565 11.1845C5.80323 11.1845 5.44458 11.5432 5.44458 11.9856C5.44458 12.428 5.80323 12.7867 6.24565 12.7867L19.4 12.7867L16.1174 16.434Z" fill="currentColor"/>
|
|
3
3
|
<path d="M2 18.6998L2 5.22314" stroke="black" stroke-width="1.5" stroke-linecap="round"/>
|
|
4
4
|
</svg>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.3939 2.24805H1.68177H22.3939ZM1.68177 2.24805L1.68055 2.24805L1.68177 2.24805ZM22.3939 2.24805C22.6537 2.24792 22.904 2.32367 23.1188 2.46046C23.3329 2.59689 23.5018 2.78725 23.6159 3.00505C23.7297 3.22241 23.7879 3.46429 23.7888 3.70656C23.7898 3.94884 23.7337 4.1907 23.6217 4.40889L23.618 4.41617L21.547 8.34759C21.4173 8.59388 21.1618 8.74805 20.8834 8.74805H3.19527C2.9169 8.74805 2.66144 8.59388 2.5317 8.34759L0.458356 4.41162C0.345453 4.19369 0.288521 3.95179 0.28885 3.70936C0.289179 3.46693 0.346784 3.22517 0.460324 3.00753C0.573994 2.78964 0.742361 2.59905 0.95604 2.46221C1.17052 2.32486 1.4206 2.24847 1.68055 2.24805M22.2745 3.74805H1.8042L3.64789 7.24805H20.4308L22.2745 3.74805ZM22.395 3.74805C22.3947 3.74805 22.3953 3.74805 22.395 3.74805V3.74805Z" fill="
|
|
3
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.56487 10.248H20.5111C20.511 10.248 20.5112 10.248 20.5111 10.248C20.7467 10.2479 20.9747 10.3151 21.1711 10.4374C21.3671 10.5595 21.5228 10.7307 21.6285 10.9279C21.7338 11.1246 21.788 11.3441 21.7888 11.5642C21.7897 11.7844 21.7375 12.0038 21.6339 12.2013L21.6301 12.2086L19.9356 15.3538C19.8048 15.5966 19.5512 15.748 19.2753 15.748H4.80319C4.52734 15.748 4.27375 15.5966 4.14292 15.3538L2.44603 12.204C2.34149 12.0067 2.28854 11.7872 2.28885 11.5669C2.28916 11.3465 2.34273 11.1271 2.44786 10.9301C2.55312 10.7328 2.70839 10.5615 2.90399 10.439C3.10017 10.3161 3.32785 10.2484 3.56368 10.248L3.56487 10.248ZM20.1743 11.748L18.8275 14.248H5.25105L3.9042 11.748H20.1743ZM20.5122 11.748C20.5119 11.748 20.5125 11.748 20.5122 11.748V11.748Z" fill="
|
|
4
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.44683 17.248L5.44798 17.248L18.6283 17.248C18.6282 17.248 18.6284 17.248 18.6283 17.248C18.8378 17.248 19.0419 17.3055 19.2194 17.4121C19.3969 17.5187 19.5404 17.6697 19.6389 17.8468C19.7369 18.0234 19.788 18.2218 19.7888 18.4218C19.7897 18.6218 19.7404 18.8202 19.6439 18.9976L19.6399 19.005L18.322 21.3638C18.1894 21.6011 17.939 21.748 17.6672 21.748H6.41112C6.13938 21.748 5.88891 21.6011 5.75637 21.3638L4.43591 19.0004C4.33852 18.8231 4.28856 18.6246 4.28885 18.4244C4.28914 18.2241 4.33968 18.0258 4.4376 17.8488C4.53563 17.6716 4.67876 17.5204 4.85587 17.4135C5.03327 17.3063 5.23716 17.2484 5.44683 17.248ZM18.0652 18.748H6.01317L6.85121 20.248H17.2271L18.0652 18.748Z" fill="
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.3939 2.24805H1.68177H22.3939ZM1.68177 2.24805L1.68055 2.24805L1.68177 2.24805ZM22.3939 2.24805C22.6537 2.24792 22.904 2.32367 23.1188 2.46046C23.3329 2.59689 23.5018 2.78725 23.6159 3.00505C23.7297 3.22241 23.7879 3.46429 23.7888 3.70656C23.7898 3.94884 23.7337 4.1907 23.6217 4.40889L23.618 4.41617L21.547 8.34759C21.4173 8.59388 21.1618 8.74805 20.8834 8.74805H3.19527C2.9169 8.74805 2.66144 8.59388 2.5317 8.34759L0.458356 4.41162C0.345453 4.19369 0.288521 3.95179 0.28885 3.70936C0.289179 3.46693 0.346784 3.22517 0.460324 3.00753C0.573994 2.78964 0.742361 2.59905 0.95604 2.46221C1.17052 2.32486 1.4206 2.24847 1.68055 2.24805M22.2745 3.74805H1.8042L3.64789 7.24805H20.4308L22.2745 3.74805ZM22.395 3.74805C22.3947 3.74805 22.3953 3.74805 22.395 3.74805V3.74805Z" fill="currentColor"/>
|
|
3
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.56487 10.248H20.5111C20.511 10.248 20.5112 10.248 20.5111 10.248C20.7467 10.2479 20.9747 10.3151 21.1711 10.4374C21.3671 10.5595 21.5228 10.7307 21.6285 10.9279C21.7338 11.1246 21.788 11.3441 21.7888 11.5642C21.7897 11.7844 21.7375 12.0038 21.6339 12.2013L21.6301 12.2086L19.9356 15.3538C19.8048 15.5966 19.5512 15.748 19.2753 15.748H4.80319C4.52734 15.748 4.27375 15.5966 4.14292 15.3538L2.44603 12.204C2.34149 12.0067 2.28854 11.7872 2.28885 11.5669C2.28916 11.3465 2.34273 11.1271 2.44786 10.9301C2.55312 10.7328 2.70839 10.5615 2.90399 10.439C3.10017 10.3161 3.32785 10.2484 3.56368 10.248L3.56487 10.248ZM20.1743 11.748L18.8275 14.248H5.25105L3.9042 11.748H20.1743ZM20.5122 11.748C20.5119 11.748 20.5125 11.748 20.5122 11.748V11.748Z" fill="currentColor"/>
|
|
4
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.44683 17.248L5.44798 17.248L18.6283 17.248C18.6282 17.248 18.6284 17.248 18.6283 17.248C18.8378 17.248 19.0419 17.3055 19.2194 17.4121C19.3969 17.5187 19.5404 17.6697 19.6389 17.8468C19.7369 18.0234 19.788 18.2218 19.7888 18.4218C19.7897 18.6218 19.7404 18.8202 19.6439 18.9976L19.6399 19.005L18.322 21.3638C18.1894 21.6011 17.939 21.748 17.6672 21.748H6.41112C6.13938 21.748 5.88891 21.6011 5.75637 21.3638L4.43591 19.0004C4.33852 18.8231 4.28856 18.6246 4.28885 18.4244C4.28914 18.2241 4.33968 18.0258 4.4376 17.8488C4.53563 17.6716 4.67876 17.5204 4.85587 17.4135C5.03327 17.3063 5.23716 17.2484 5.44683 17.248ZM18.0652 18.748H6.01317L6.85121 20.248H17.2271L18.0652 18.748Z" fill="currentColor"/>
|
|
5
5
|
</svg>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.0359 2.1066C17.3709 1.86298 17.445 1.39391 17.2013 1.05892C16.9577 0.723935 16.4886 0.649872 16.1537 0.893501C13.6789 2.6933 12.3979 5.3426 11.754 7.88226C11.2082 10.035 11.1072 12.1566 11.1432 13.7273H6.73206H5.91212H4.65568C4.24146 13.7273 3.90568 14.0631 3.90568 14.4773C3.90568 14.8916 4.24146 15.2273 4.65568 15.2273H6.04604L6.465 19.9196C6.59515 21.3774 7.81662 22.4947 9.28017 22.4947H14.5658C16.0294 22.4947 17.2508 21.3774 17.381 19.9196L17.7999 15.2273H19.1903C19.6045 15.2273 19.9403 14.8916 19.9403 14.4773C19.9403 14.0631 19.6045 13.7273 19.1903 13.7273H17.9339H17.1139H12.6436C12.6075 12.2443 12.701 10.2507 13.208 8.25091C13.8012 5.91109 14.9426 3.62901 17.0359 2.1066ZM11.9129 15.2273H11.9318H16.294L15.8869 19.7862C15.8259 20.4703 15.2526 20.9947 14.5658 20.9947H9.28017C8.59335 20.9947 8.02013 20.4703 7.95905 19.7862L7.55201 15.2273H11.9129ZM10.4336 8.82808L10.0434 8.18755L10.784 8.06874C10.8322 8.36952 10.6938 8.66961 10.4336 8.82808ZM1.54297 4.26526C1.33985 3.54329 1.33999 3.54325 1.34015 3.54321L1.34053 3.5431L1.34157 3.54281L1.34473 3.54193L1.35534 3.53899L1.39319 3.5287C1.42564 3.51997 1.47231 3.50763 1.53175 3.49245C1.65057 3.46211 1.82074 3.42036 2.03057 3.37348C2.44924 3.27993 3.03066 3.16488 3.68005 3.07978C4.32721 2.99497 5.05673 2.93789 5.76785 2.96607C6.47061 2.99392 7.20624 3.10662 7.83527 3.39686C9.1036 3.9821 9.82908 5.23084 10.2292 6.1928C10.4363 6.6906 10.5736 7.15363 10.6593 7.49166C10.7023 7.66139 10.7328 7.80146 10.7528 7.90095C10.7628 7.95075 10.7703 7.99051 10.7754 8.0189L10.7813 8.05281L10.7831 8.06309L10.7836 8.0665L10.7838 8.06777L10.7839 8.06829C10.7839 8.06852 10.784 8.06874 10.0434 8.18755C10.4336 8.82808 10.4334 8.8282 10.4332 8.82832L10.4328 8.82859L10.4317 8.82926L10.4287 8.83105L10.4198 8.8364L10.3901 8.85389C10.3652 8.86843 10.3301 8.88858 10.2857 8.91326C10.197 8.96257 10.0707 9.03027 9.9136 9.10768C9.6008 9.26183 9.15942 9.45786 8.6463 9.62335C7.65473 9.94315 6.23384 10.2015 4.96551 9.61628C4.33648 9.32604 3.77336 8.83946 3.29613 8.32284C2.81322 7.80008 2.38325 7.20798 2.02781 6.66055C1.67115 6.11124 1.38139 5.59421 1.18087 5.21496C1.08038 5.02489 1.00172 4.86832 0.947696 4.75823C0.920673 4.70316 0.899778 4.65964 0.885361 4.62928L0.868627 4.5938L0.863978 4.58383L0.862597 4.58085L0.862144 4.57987L0.861977 4.57951C0.86191 4.57937 0.86185 4.57923 1.54297 4.26526ZM1.54297 4.26526L1.33985 3.54329C1.12857 3.60273 0.953927 3.75174 0.861969 3.95104C0.770011 4.15033 0.769967 4.37991 0.86185 4.57923L1.54297 4.26526ZM2.64785 4.77507C2.81878 5.08581 3.03489 5.45713 3.28589 5.84371C3.61314 6.34773 3.9916 6.86512 4.39796 7.30502C4.81 7.75106 5.21698 8.08033 5.59396 8.25428C6.33763 8.59742 7.2986 8.48192 8.18588 8.19576C8.57968 8.06875 8.9274 7.9183 9.18783 7.79275C9.11435 7.51313 9.00318 7.15094 8.84426 6.7689C8.48621 5.90811 7.95048 5.10201 7.20681 4.75886C6.82983 4.58492 6.31521 4.48894 5.70845 4.4649C5.11005 4.44118 4.4708 4.48898 3.87496 4.56706C3.41795 4.62695 2.99519 4.70348 2.64785 4.77507ZM9.65423 7.54645C9.65438 7.54636 9.65436 7.54637 9.65419 7.54648L9.65423 7.54645ZM15.9067 6.75421L15.4112 6.19118C15.1825 6.39243 15.0982 6.71201 15.198 6.99983L15.9067 6.75421ZM22.9682 8.61561C23.5844 8.18811 23.5843 8.18799 23.5842 8.18786L23.584 8.18756L23.5835 8.18678L23.5819 8.18449L23.5767 8.17708L23.5585 8.15129C23.5429 8.12939 23.5205 8.09822 23.4919 8.05898C23.4346 7.98054 23.352 7.86958 23.2479 7.73573C23.0403 7.46881 22.7444 7.10692 22.3918 6.72874C22.0407 6.35219 21.6232 5.9485 21.1715 5.60482C20.7265 5.26622 20.2081 4.95467 19.656 4.80915C18.5409 4.51522 17.4373 4.93046 16.7083 5.31611C16.3277 5.51745 16.0083 5.73253 15.7842 5.89672C15.6716 5.97926 15.5816 6.05007 15.5182 6.10149C15.4865 6.12722 15.4614 6.14819 15.4434 6.16343L15.4218 6.18192L15.4151 6.18775L15.4128 6.18977L15.4119 6.19055L15.4115 6.19088C15.4113 6.19103 15.4112 6.19118 15.9067 6.75421C15.198 6.99983 15.1981 7.00004 15.1982 7.00026L15.1983 7.00073L15.1987 7.00185L15.1997 7.00475L15.2027 7.01313L15.2124 7.03988C15.2205 7.06201 15.2321 7.09263 15.2469 7.13065C15.2767 7.20659 15.3201 7.3126 15.3774 7.43992C15.4914 7.69322 15.6633 8.03779 15.8952 8.40059C16.3394 9.09551 17.0949 10.0008 18.21 10.2948C18.7621 10.4403 19.3667 10.4248 19.9208 10.3495C20.4832 10.2732 21.0455 10.1277 21.5366 9.9732C22.0298 9.81798 22.4656 9.64896 22.7778 9.51904C22.9343 9.45388 23.0609 9.39808 23.1494 9.35807C23.1937 9.33805 23.2285 9.32195 23.2529 9.31057L23.2814 9.29712L23.2896 9.29323L23.2921 9.29203L23.293 9.29161L23.2933 9.29145C23.2935 9.29139 23.2936 9.29133 22.9682 8.61561ZM22.9682 8.61561L23.5844 8.18811C23.7095 8.36844 23.7493 8.59454 23.6934 8.80678C23.6374 9.01901 23.4913 9.19609 23.2936 9.29133L22.9682 8.61561ZM21.2947 7.75168C21.4733 7.94321 21.6365 8.13111 21.7787 8.30206C21.5707 8.38072 21.3361 8.46376 21.0863 8.54237C20.6446 8.68138 20.1696 8.80198 19.719 8.86316C19.2601 8.92548 18.876 8.91907 18.5924 8.8443C18.036 8.69765 17.5443 8.1953 17.1591 7.5927C17.0234 7.38046 16.9122 7.17335 16.826 6.99655C16.9881 6.8852 17.187 6.75982 17.4097 6.64203C18.0418 6.30762 18.7173 6.11295 19.2737 6.2596C19.5573 6.33437 19.8947 6.51813 20.2632 6.79855C20.6251 7.07392 20.9789 7.41299 21.2947 7.75168Z" fill="
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.0359 2.1066C17.3709 1.86298 17.445 1.39391 17.2013 1.05892C16.9577 0.723935 16.4886 0.649872 16.1537 0.893501C13.6789 2.6933 12.3979 5.3426 11.754 7.88226C11.2082 10.035 11.1072 12.1566 11.1432 13.7273H6.73206H5.91212H4.65568C4.24146 13.7273 3.90568 14.0631 3.90568 14.4773C3.90568 14.8916 4.24146 15.2273 4.65568 15.2273H6.04604L6.465 19.9196C6.59515 21.3774 7.81662 22.4947 9.28017 22.4947H14.5658C16.0294 22.4947 17.2508 21.3774 17.381 19.9196L17.7999 15.2273H19.1903C19.6045 15.2273 19.9403 14.8916 19.9403 14.4773C19.9403 14.0631 19.6045 13.7273 19.1903 13.7273H17.9339H17.1139H12.6436C12.6075 12.2443 12.701 10.2507 13.208 8.25091C13.8012 5.91109 14.9426 3.62901 17.0359 2.1066ZM11.9129 15.2273H11.9318H16.294L15.8869 19.7862C15.8259 20.4703 15.2526 20.9947 14.5658 20.9947H9.28017C8.59335 20.9947 8.02013 20.4703 7.95905 19.7862L7.55201 15.2273H11.9129ZM10.4336 8.82808L10.0434 8.18755L10.784 8.06874C10.8322 8.36952 10.6938 8.66961 10.4336 8.82808ZM1.54297 4.26526C1.33985 3.54329 1.33999 3.54325 1.34015 3.54321L1.34053 3.5431L1.34157 3.54281L1.34473 3.54193L1.35534 3.53899L1.39319 3.5287C1.42564 3.51997 1.47231 3.50763 1.53175 3.49245C1.65057 3.46211 1.82074 3.42036 2.03057 3.37348C2.44924 3.27993 3.03066 3.16488 3.68005 3.07978C4.32721 2.99497 5.05673 2.93789 5.76785 2.96607C6.47061 2.99392 7.20624 3.10662 7.83527 3.39686C9.1036 3.9821 9.82908 5.23084 10.2292 6.1928C10.4363 6.6906 10.5736 7.15363 10.6593 7.49166C10.7023 7.66139 10.7328 7.80146 10.7528 7.90095C10.7628 7.95075 10.7703 7.99051 10.7754 8.0189L10.7813 8.05281L10.7831 8.06309L10.7836 8.0665L10.7838 8.06777L10.7839 8.06829C10.7839 8.06852 10.784 8.06874 10.0434 8.18755C10.4336 8.82808 10.4334 8.8282 10.4332 8.82832L10.4328 8.82859L10.4317 8.82926L10.4287 8.83105L10.4198 8.8364L10.3901 8.85389C10.3652 8.86843 10.3301 8.88858 10.2857 8.91326C10.197 8.96257 10.0707 9.03027 9.9136 9.10768C9.6008 9.26183 9.15942 9.45786 8.6463 9.62335C7.65473 9.94315 6.23384 10.2015 4.96551 9.61628C4.33648 9.32604 3.77336 8.83946 3.29613 8.32284C2.81322 7.80008 2.38325 7.20798 2.02781 6.66055C1.67115 6.11124 1.38139 5.59421 1.18087 5.21496C1.08038 5.02489 1.00172 4.86832 0.947696 4.75823C0.920673 4.70316 0.899778 4.65964 0.885361 4.62928L0.868627 4.5938L0.863978 4.58383L0.862597 4.58085L0.862144 4.57987L0.861977 4.57951C0.86191 4.57937 0.86185 4.57923 1.54297 4.26526ZM1.54297 4.26526L1.33985 3.54329C1.12857 3.60273 0.953927 3.75174 0.861969 3.95104C0.770011 4.15033 0.769967 4.37991 0.86185 4.57923L1.54297 4.26526ZM2.64785 4.77507C2.81878 5.08581 3.03489 5.45713 3.28589 5.84371C3.61314 6.34773 3.9916 6.86512 4.39796 7.30502C4.81 7.75106 5.21698 8.08033 5.59396 8.25428C6.33763 8.59742 7.2986 8.48192 8.18588 8.19576C8.57968 8.06875 8.9274 7.9183 9.18783 7.79275C9.11435 7.51313 9.00318 7.15094 8.84426 6.7689C8.48621 5.90811 7.95048 5.10201 7.20681 4.75886C6.82983 4.58492 6.31521 4.48894 5.70845 4.4649C5.11005 4.44118 4.4708 4.48898 3.87496 4.56706C3.41795 4.62695 2.99519 4.70348 2.64785 4.77507ZM9.65423 7.54645C9.65438 7.54636 9.65436 7.54637 9.65419 7.54648L9.65423 7.54645ZM15.9067 6.75421L15.4112 6.19118C15.1825 6.39243 15.0982 6.71201 15.198 6.99983L15.9067 6.75421ZM22.9682 8.61561C23.5844 8.18811 23.5843 8.18799 23.5842 8.18786L23.584 8.18756L23.5835 8.18678L23.5819 8.18449L23.5767 8.17708L23.5585 8.15129C23.5429 8.12939 23.5205 8.09822 23.4919 8.05898C23.4346 7.98054 23.352 7.86958 23.2479 7.73573C23.0403 7.46881 22.7444 7.10692 22.3918 6.72874C22.0407 6.35219 21.6232 5.9485 21.1715 5.60482C20.7265 5.26622 20.2081 4.95467 19.656 4.80915C18.5409 4.51522 17.4373 4.93046 16.7083 5.31611C16.3277 5.51745 16.0083 5.73253 15.7842 5.89672C15.6716 5.97926 15.5816 6.05007 15.5182 6.10149C15.4865 6.12722 15.4614 6.14819 15.4434 6.16343L15.4218 6.18192L15.4151 6.18775L15.4128 6.18977L15.4119 6.19055L15.4115 6.19088C15.4113 6.19103 15.4112 6.19118 15.9067 6.75421C15.198 6.99983 15.1981 7.00004 15.1982 7.00026L15.1983 7.00073L15.1987 7.00185L15.1997 7.00475L15.2027 7.01313L15.2124 7.03988C15.2205 7.06201 15.2321 7.09263 15.2469 7.13065C15.2767 7.20659 15.3201 7.3126 15.3774 7.43992C15.4914 7.69322 15.6633 8.03779 15.8952 8.40059C16.3394 9.09551 17.0949 10.0008 18.21 10.2948C18.7621 10.4403 19.3667 10.4248 19.9208 10.3495C20.4832 10.2732 21.0455 10.1277 21.5366 9.9732C22.0298 9.81798 22.4656 9.64896 22.7778 9.51904C22.9343 9.45388 23.0609 9.39808 23.1494 9.35807C23.1937 9.33805 23.2285 9.32195 23.2529 9.31057L23.2814 9.29712L23.2896 9.29323L23.2921 9.29203L23.293 9.29161L23.2933 9.29145C23.2935 9.29139 23.2936 9.29133 22.9682 8.61561ZM22.9682 8.61561L23.5844 8.18811C23.7095 8.36844 23.7493 8.59454 23.6934 8.80678C23.6374 9.01901 23.4913 9.19609 23.2936 9.29133L22.9682 8.61561ZM21.2947 7.75168C21.4733 7.94321 21.6365 8.13111 21.7787 8.30206C21.5707 8.38072 21.3361 8.46376 21.0863 8.54237C20.6446 8.68138 20.1696 8.80198 19.719 8.86316C19.2601 8.92548 18.876 8.91907 18.5924 8.8443C18.036 8.69765 17.5443 8.1953 17.1591 7.5927C17.0234 7.38046 16.9122 7.17335 16.826 6.99655C16.9881 6.8852 17.187 6.75982 17.4097 6.64203C18.0418 6.30762 18.7173 6.11295 19.2737 6.2596C19.5573 6.33437 19.8947 6.51813 20.2632 6.79855C20.6251 7.07392 20.9789 7.41299 21.2947 7.75168Z" fill="currentColor"/>
|
|
3
3
|
</svg>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.35001 5.5C2.35001 4.5335 3.13351 3.75 4.10001 3.75C5.0665 3.75 5.85001 4.5335 5.85001 5.5V7C5.85001 7.41421 6.18579 7.75 6.60001 7.75C7.01422 7.75 7.35001 7.41421 7.35001 7V5.5C7.35001 3.70507 5.89493 2.25 4.10001 2.25C2.30508 2.25 0.850006 3.70508 0.850006 5.5V18C0.850006 18.4142 1.18579 18.75 1.60001 18.75C1.87785 18.75 2.1204 18.5989 2.25 18.3744V19C2.25 20.5188 3.48122 21.75 5 21.75H8C9.51878 21.75 10.75 20.5188 10.75 19V18.75H13.25V19C13.25 20.5188 14.4812 21.75 16 21.75H19C20.5188 21.75 21.75 20.5188 21.75 19V18.3745C21.8796 18.599 22.1221 18.75 22.3999 18.75C22.8141 18.75 23.1499 18.4142 23.1499 18V5.5C23.1499 3.70508 21.6949 2.25 19.8999 2.25C18.105 2.25 16.6499 3.70507 16.6499 5.5V7C16.6499 7.41421 16.9857 7.75 17.3999 7.75C17.8141 7.75 18.1499 7.41421 18.1499 7V5.5C18.1499 4.5335 18.9334 3.75 19.8999 3.75C20.8664 3.75 21.6499 4.5335 21.6499 5.5V16.2623C21.3276 15.1018 20.2632 14.25 19 14.25H16C14.4812 14.25 13.25 15.4812 13.25 17V17.25H10.75V17C10.75 15.4812 9.51878 14.25 8 14.25H5C3.73667 14.25 2.67231 15.1019 2.35001 16.2625V5.5ZM3.75 17C3.75 16.3096 4.30964 15.75 5 15.75H8C8.69036 15.75 9.25 16.3096 9.25 17V19C9.25 19.6904 8.69036 20.25 8 20.25H5C4.30964 20.25 3.75 19.6904 3.75 19V17ZM16 15.75C15.3096 15.75 14.75 16.3096 14.75 17V19C14.75 19.6904 15.3096 20.25 16 20.25H19C19.6904 20.25 20.25 19.6904 20.25 19V17C20.25 16.3096 19.6904 15.75 19 15.75H16Z" fill="
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.35001 5.5C2.35001 4.5335 3.13351 3.75 4.10001 3.75C5.0665 3.75 5.85001 4.5335 5.85001 5.5V7C5.85001 7.41421 6.18579 7.75 6.60001 7.75C7.01422 7.75 7.35001 7.41421 7.35001 7V5.5C7.35001 3.70507 5.89493 2.25 4.10001 2.25C2.30508 2.25 0.850006 3.70508 0.850006 5.5V18C0.850006 18.4142 1.18579 18.75 1.60001 18.75C1.87785 18.75 2.1204 18.5989 2.25 18.3744V19C2.25 20.5188 3.48122 21.75 5 21.75H8C9.51878 21.75 10.75 20.5188 10.75 19V18.75H13.25V19C13.25 20.5188 14.4812 21.75 16 21.75H19C20.5188 21.75 21.75 20.5188 21.75 19V18.3745C21.8796 18.599 22.1221 18.75 22.3999 18.75C22.8141 18.75 23.1499 18.4142 23.1499 18V5.5C23.1499 3.70508 21.6949 2.25 19.8999 2.25C18.105 2.25 16.6499 3.70507 16.6499 5.5V7C16.6499 7.41421 16.9857 7.75 17.3999 7.75C17.8141 7.75 18.1499 7.41421 18.1499 7V5.5C18.1499 4.5335 18.9334 3.75 19.8999 3.75C20.8664 3.75 21.6499 4.5335 21.6499 5.5V16.2623C21.3276 15.1018 20.2632 14.25 19 14.25H16C14.4812 14.25 13.25 15.4812 13.25 17V17.25H10.75V17C10.75 15.4812 9.51878 14.25 8 14.25H5C3.73667 14.25 2.67231 15.1019 2.35001 16.2625V5.5ZM3.75 17C3.75 16.3096 4.30964 15.75 5 15.75H8C8.69036 15.75 9.25 16.3096 9.25 17V19C9.25 19.6904 8.69036 20.25 8 20.25H5C4.30964 20.25 3.75 19.6904 3.75 19V17ZM16 15.75C15.3096 15.75 14.75 16.3096 14.75 17V19C14.75 19.6904 15.3096 20.25 16 20.25H19C19.6904 20.25 20.25 19.6904 20.25 19V17C20.25 16.3096 19.6904 15.75 19 15.75H16Z" fill="currentColor"/>
|
|
3
3
|
</svg>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 0.25C7.71979 0.25 4.25 3.71979 4.25 8V16C4.25 20.2802 7.71979 23.75 12 23.75C16.2802 23.75 19.75 20.2802 19.75 16V8C19.75 3.71979 16.2802 0.25 12 0.25ZM5.75 8C5.75 4.54822 8.54822 1.75 12 1.75C15.4518 1.75 18.25 4.54822 18.25 8V16C18.25 19.4518 15.4518 22.25 12 22.25C8.54822 22.25 5.75 19.4518 5.75 16V8ZM12 8C12.8284 8 13.5 7.32843 13.5 6.5C13.5 5.67157 12.8284 5 12 5C11.1716 5 10.5 5.67157 10.5 6.5C10.5 7.32843 11.1716 8 12 8Z" fill="
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 0.25C7.71979 0.25 4.25 3.71979 4.25 8V16C4.25 20.2802 7.71979 23.75 12 23.75C16.2802 23.75 19.75 20.2802 19.75 16V8C19.75 3.71979 16.2802 0.25 12 0.25ZM5.75 8C5.75 4.54822 8.54822 1.75 12 1.75C15.4518 1.75 18.25 4.54822 18.25 8V16C18.25 19.4518 15.4518 22.25 12 22.25C8.54822 22.25 5.75 19.4518 5.75 16V8ZM12 8C12.8284 8 13.5 7.32843 13.5 6.5C13.5 5.67157 12.8284 5 12 5C11.1716 5 10.5 5.67157 10.5 6.5C10.5 7.32843 11.1716 8 12 8Z" fill="currentColor"/>
|
|
3
3
|
</svg>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.550049 4.28362C0.550049 2.39152 2.0839 0.857666 3.97601 0.857666H17.3558C19.2479 0.857666 20.7818 2.39152 20.7818 4.28362V10.3882C20.7818 10.8024 20.446 11.1382 20.0318 11.1382C19.6175 11.1382 19.2818 10.8024 19.2818 10.3882V6.60156H2.05005V17.6634C2.05005 18.7271 2.91233 19.5894 3.97601 19.5894H8.32444C8.73865 19.5894 9.07444 19.9252 9.07444 20.3394C9.07444 20.7536 8.73865 21.0894 8.32444 21.0894H3.97601C2.0839 21.0894 0.550049 19.5555 0.550049 17.6634V4.28362ZM2.05005 5.10156H19.2818V4.28362C19.2818 3.21995 18.4195 2.35767 17.3558 2.35767H3.97601C2.91233 2.35767 2.05005 3.21995 2.05005 4.28362V5.10156ZM14.9683 11.3192C15.7423 9.97863 17.6772 9.97864 18.4511 11.3192L23.1956 19.5368C23.9695 20.8773 23.0021 22.553 21.4542 22.553H11.9653C10.4174 22.553 9.44992 20.8773 10.2239 19.5368L14.9683 11.3192ZM17.1521 12.0692C16.9555 11.7286 16.464 11.7286 16.2674 12.0692L11.5229 20.2868C11.3263 20.6273 11.5721 21.053 11.9653 21.053H21.4542C21.8474 21.053 22.0931 20.6273 21.8965 20.2868L17.1521 12.0692ZM16 17.6504C16 18.0646 16.3358 18.4004 16.75 18.4004C17.1642 18.4004 17.5 18.0646 17.5 17.6504V14.1504C17.5 13.7362 17.1642 13.4004 16.75 13.4004C16.3358 13.4004 16 13.7362 16 14.1504V17.6504ZM17.4683 19.6013C17.4683 20.0155 17.1325 20.3513 16.7183 20.3513C16.304 20.3513 15.9683 20.0155 15.9683 19.6013C15.9683 19.1871 16.304 18.8513 16.7183 18.8513C17.1325 18.8513 17.4683 19.1871 17.4683 19.6013ZM5.40002 3.75C5.40002 4.16421 5.06424 4.5 4.65002 4.5C4.23581 4.5 3.90002 4.16421 3.90002 3.75C3.90002 3.33579 4.23581 3 4.65002 3C5.06424 3 5.40002 3.33579 5.40002 3.75ZM7.15002 4.5C7.56424 4.5 7.90002 4.16421 7.90002 3.75C7.90002 3.33579 7.56424 3 7.15002 3C6.73581 3 6.40002 3.33579 6.40002 3.75C6.40002 4.16421 6.73581 4.5 7.15002 4.5Z" fill="
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.550049 4.28362C0.550049 2.39152 2.0839 0.857666 3.97601 0.857666H17.3558C19.2479 0.857666 20.7818 2.39152 20.7818 4.28362V10.3882C20.7818 10.8024 20.446 11.1382 20.0318 11.1382C19.6175 11.1382 19.2818 10.8024 19.2818 10.3882V6.60156H2.05005V17.6634C2.05005 18.7271 2.91233 19.5894 3.97601 19.5894H8.32444C8.73865 19.5894 9.07444 19.9252 9.07444 20.3394C9.07444 20.7536 8.73865 21.0894 8.32444 21.0894H3.97601C2.0839 21.0894 0.550049 19.5555 0.550049 17.6634V4.28362ZM2.05005 5.10156H19.2818V4.28362C19.2818 3.21995 18.4195 2.35767 17.3558 2.35767H3.97601C2.91233 2.35767 2.05005 3.21995 2.05005 4.28362V5.10156ZM14.9683 11.3192C15.7423 9.97863 17.6772 9.97864 18.4511 11.3192L23.1956 19.5368C23.9695 20.8773 23.0021 22.553 21.4542 22.553H11.9653C10.4174 22.553 9.44992 20.8773 10.2239 19.5368L14.9683 11.3192ZM17.1521 12.0692C16.9555 11.7286 16.464 11.7286 16.2674 12.0692L11.5229 20.2868C11.3263 20.6273 11.5721 21.053 11.9653 21.053H21.4542C21.8474 21.053 22.0931 20.6273 21.8965 20.2868L17.1521 12.0692ZM16 17.6504C16 18.0646 16.3358 18.4004 16.75 18.4004C17.1642 18.4004 17.5 18.0646 17.5 17.6504V14.1504C17.5 13.7362 17.1642 13.4004 16.75 13.4004C16.3358 13.4004 16 13.7362 16 14.1504V17.6504ZM17.4683 19.6013C17.4683 20.0155 17.1325 20.3513 16.7183 20.3513C16.304 20.3513 15.9683 20.0155 15.9683 19.6013C15.9683 19.1871 16.304 18.8513 16.7183 18.8513C17.1325 18.8513 17.4683 19.1871 17.4683 19.6013ZM5.40002 3.75C5.40002 4.16421 5.06424 4.5 4.65002 4.5C4.23581 4.5 3.90002 4.16421 3.90002 3.75C3.90002 3.33579 4.23581 3 4.65002 3C5.06424 3 5.40002 3.33579 5.40002 3.75ZM7.15002 4.5C7.56424 4.5 7.90002 4.16421 7.90002 3.75C7.90002 3.33579 7.56424 3 7.15002 3C6.73581 3 6.40002 3.33579 6.40002 3.75C6.40002 4.16421 6.73581 4.5 7.15002 4.5Z" fill="currentColor"/>
|
|
3
3
|
</svg>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M22.4668 21.1668C22.4668 21.7191 22.0191 22.1668 21.4668 22.1668H14.999C14.4467 22.1668 13.999 21.7191 13.999 21.1668V15.4668C13.999 12.7334 14.2308 10.589 14.6944 9.03341C15.1802 7.47784 16.0633 6.07783 17.3439 4.83338C18.4401 3.78616 19.7708 2.92778 21.336 2.25824C21.8356 2.04452 22.4023 2.3047 22.5988 2.81132L23.0044 3.85684C23.2107 4.38869 22.9277 4.9807 22.4128 5.22638C21.0236 5.88934 19.9351 6.85778 19.2668 7.76673C18.6163 8.67613 18.0613 10.2331 17.857 11.7796C17.7834 12.3365 18.2382 12.8001 18.7998 12.8001H21.4668C22.0191 12.8001 22.4668 13.2478 22.4668 13.8001V21.1668Z" fill="
|
|
3
|
-
<path d="M9.06783 21.1668C9.06783 21.7191 8.62012 22.1668 8.06783 22.1668H1.59998C1.04769 22.1668 0.599976 21.7191 0.599976 21.1668V15.4668C0.599976 12.7334 0.831801 10.589 1.29545 9.03341C1.78118 7.47784 2.66433 6.07783 3.94489 4.83338C5.04107 3.78616 6.37177 2.92778 7.93699 2.25824C8.43661 2.04452 9.00333 2.3047 9.19984 2.81132L9.60539 3.85684C9.81169 4.38869 9.5287 4.9807 9.01385 5.22638C7.62458 5.88934 6.53608 6.85778 5.8678 7.76673C5.21727 8.67613 4.66228 10.2331 4.45799 11.7796C4.38444 12.3365 4.83917 12.8001 5.40083 12.8001H8.06783C8.62012 12.8001 9.06783 13.2478 9.06783 13.8001V21.1668Z" fill="
|
|
2
|
+
<path d="M22.4668 21.1668C22.4668 21.7191 22.0191 22.1668 21.4668 22.1668H14.999C14.4467 22.1668 13.999 21.7191 13.999 21.1668V15.4668C13.999 12.7334 14.2308 10.589 14.6944 9.03341C15.1802 7.47784 16.0633 6.07783 17.3439 4.83338C18.4401 3.78616 19.7708 2.92778 21.336 2.25824C21.8356 2.04452 22.4023 2.3047 22.5988 2.81132L23.0044 3.85684C23.2107 4.38869 22.9277 4.9807 22.4128 5.22638C21.0236 5.88934 19.9351 6.85778 19.2668 7.76673C18.6163 8.67613 18.0613 10.2331 17.857 11.7796C17.7834 12.3365 18.2382 12.8001 18.7998 12.8001H21.4668C22.0191 12.8001 22.4668 13.2478 22.4668 13.8001V21.1668Z" fill="currentColor"/>
|
|
3
|
+
<path d="M9.06783 21.1668C9.06783 21.7191 8.62012 22.1668 8.06783 22.1668H1.59998C1.04769 22.1668 0.599976 21.7191 0.599976 21.1668V15.4668C0.599976 12.7334 0.831801 10.589 1.29545 9.03341C1.78118 7.47784 2.66433 6.07783 3.94489 4.83338C5.04107 3.78616 6.37177 2.92778 7.93699 2.25824C8.43661 2.04452 9.00333 2.3047 9.19984 2.81132L9.60539 3.85684C9.81169 4.38869 9.5287 4.9807 9.01385 5.22638C7.62458 5.88934 6.53608 6.85778 5.8678 7.76673C5.21727 8.67613 4.66228 10.2331 4.45799 11.7796C4.38444 12.3365 4.83917 12.8001 5.40083 12.8001H8.06783C8.62012 12.8001 9.06783 13.2478 9.06783 13.8001V21.1668Z" fill="currentColor"/>
|
|
4
4
|
</svg>
|
package/core/insights/posthog.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import posthog from"posthog-js";export const initPosthog=(apiKey,apiHost)=>{posthog.init(apiKey,{api_host:apiHost,capture_pageview:false})};export const enableDebugMode=()=>{posthog.debug()};export const disableDebugMode=()=>{posthog.debug(false)};export const identify=({userId,accountId,organisationId,email,name,...properties})=>{if(!userId){return}if(userId!==posthog.get_distinct_id()){posthog.identify(userId,{email,name,...properties})}if(accountId){posthog.group("account",accountId)}if(organisationId){posthog.group("organisation",organisationId)}};export const trackPageView=properties=>{posthog.capture("$pageview",properties)};export const track=(event,properties)=>{posthog.capture(event,properties)};export const startSessionRecording=()=>{posthog.startSessionRecording()};export const stopSessionRecording=()=>{posthog.stopSessionRecording()};
|
|
1
|
+
import posthog from"posthog-js";export const initPosthog=(apiKey,apiHost)=>{if(!apiKey){return}posthog.init(apiKey,{api_host:apiHost,capture_pageview:false})};export const enableDebugMode=()=>{posthog.debug()};export const disableDebugMode=()=>{posthog.debug(false)};export const identify=({userId,accountId,organisationId,email,name,...properties})=>{if(!userId){return}if(userId!==posthog.get_distinct_id()){posthog.identify(userId,{email,name,...properties})}if(accountId){posthog.group("account",accountId)}if(organisationId){posthog.group("organisation",organisationId)}};export const trackPageView=properties=>{posthog.capture("$pageview",properties)};export const track=(event,properties)=>{posthog.capture(event,properties)};export const startSessionRecording=()=>{posthog.startSessionRecording()};export const stopSessionRecording=()=>{posthog.stopSessionRecording()};
|
|
2
2
|
//# sourceMappingURL=posthog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/insights/posthog.ts"],"sourcesContent":["import posthog from \"posthog-js\";\n\nimport { InsightsIdentity } from \"./types\";\n\nexport const initPosthog = (apiKey: string, apiHost: string) => {\n posthog.init(apiKey, {\n api_host: apiHost,\n capture_pageview: false,\n });\n};\n\nexport const enableDebugMode = () => {\n posthog.debug();\n};\n\nexport const disableDebugMode = () => {\n posthog.debug(false);\n};\n\nexport const identify = ({\n userId,\n accountId,\n organisationId,\n email,\n name,\n ...properties\n}: InsightsIdentity) => {\n // In very rare cases we might have a user without an account, so we'll\n // let null/undefined/blank strings through on that one\n if (!userId) {\n return;\n }\n\n if (userId !== posthog.get_distinct_id()) {\n posthog.identify(userId, { email, name, ...properties });\n }\n\n // Associate all events in this session with this account\n if (accountId) {\n posthog.group(\"account\", accountId);\n }\n\n // Associate all events in this session with this organisation (if available)\n if (organisationId) {\n posthog.group(\"organisation\", organisationId);\n }\n};\n\nexport const trackPageView = (properties?: Record<string, unknown>) => {\n posthog.capture(\"$pageview\", properties);\n};\n\nexport const track = (event: string, properties?: Record<string, unknown>) => {\n posthog.capture(event, properties);\n};\n\nexport const startSessionRecording = () => {\n posthog.startSessionRecording();\n};\n\nexport const stopSessionRecording = () => {\n posthog.stopSessionRecording();\n};\n"],"names":["posthog","initPosthog","apiKey","apiHost","init","api_host","capture_pageview","enableDebugMode","debug","disableDebugMode","identify","userId","accountId","organisationId","email","name","properties","get_distinct_id","group","trackPageView","capture","track","event","startSessionRecording","stopSessionRecording"],"mappings":"AAAA,OAAOA,YAAa,YAAa,AAIjC,QAAO,MAAMC,YAAc,CAACC,OAAgBC,
|
|
1
|
+
{"version":3,"sources":["../../../src/core/insights/posthog.ts"],"sourcesContent":["import posthog from \"posthog-js\";\n\nimport { InsightsIdentity } from \"./types\";\n\nexport const initPosthog = (apiKey: string, apiHost: string) => {\n if (!apiKey) {\n return;\n }\n\n posthog.init(apiKey, {\n api_host: apiHost,\n capture_pageview: false,\n });\n};\n\nexport const enableDebugMode = () => {\n posthog.debug();\n};\n\nexport const disableDebugMode = () => {\n posthog.debug(false);\n};\n\nexport const identify = ({\n userId,\n accountId,\n organisationId,\n email,\n name,\n ...properties\n}: InsightsIdentity) => {\n // In very rare cases we might have a user without an account, so we'll\n // let null/undefined/blank strings through on that one\n if (!userId) {\n return;\n }\n\n if (userId !== posthog.get_distinct_id()) {\n posthog.identify(userId, { email, name, ...properties });\n }\n\n // Associate all events in this session with this account\n if (accountId) {\n posthog.group(\"account\", accountId);\n }\n\n // Associate all events in this session with this organisation (if available)\n if (organisationId) {\n posthog.group(\"organisation\", organisationId);\n }\n};\n\nexport const trackPageView = (properties?: Record<string, unknown>) => {\n posthog.capture(\"$pageview\", properties);\n};\n\nexport const track = (event: string, properties?: Record<string, unknown>) => {\n posthog.capture(event, properties);\n};\n\nexport const startSessionRecording = () => {\n posthog.startSessionRecording();\n};\n\nexport const stopSessionRecording = () => {\n posthog.stopSessionRecording();\n};\n"],"names":["posthog","initPosthog","apiKey","apiHost","init","api_host","capture_pageview","enableDebugMode","debug","disableDebugMode","identify","userId","accountId","organisationId","email","name","properties","get_distinct_id","group","trackPageView","capture","track","event","startSessionRecording","stopSessionRecording"],"mappings":"AAAA,OAAOA,YAAa,YAAa,AAIjC,QAAO,MAAMC,YAAc,CAACC,OAAgBC,WAC1C,GAAI,CAACD,OAAQ,CACX,MACF,CAEAF,QAAQI,IAAI,CAACF,OAAQ,CACnBG,SAAUF,QACVG,iBAAkB,KACpB,EACF,CAAE,AAEF,QAAO,MAAMC,gBAAkB,KAC7BP,QAAQQ,KAAK,EACf,CAAE,AAEF,QAAO,MAAMC,iBAAmB,KAC9BT,QAAQQ,KAAK,CAAC,MAChB,CAAE,AAEF,QAAO,MAAME,SAAW,CAAC,CACvBC,MAAM,CACNC,SAAS,CACTC,cAAc,CACdC,KAAK,CACLC,IAAI,CACJ,GAAGC,WACc,IAGjB,GAAI,CAACL,OAAQ,CACX,MACF,CAEA,GAAIA,SAAWX,QAAQiB,eAAe,GAAI,CACxCjB,QAAQU,QAAQ,CAACC,OAAQ,CAAEG,MAAOC,KAAM,GAAGC,UAAU,AAAC,EACxD,CAGA,GAAIJ,UAAW,CACbZ,QAAQkB,KAAK,CAAC,UAAWN,UAC3B,CAGA,GAAIC,eAAgB,CAClBb,QAAQkB,KAAK,CAAC,eAAgBL,eAChC,CACF,CAAE,AAEF,QAAO,MAAMM,cAAgB,AAACH,aAC5BhB,QAAQoB,OAAO,CAAC,YAAaJ,WAC/B,CAAE,AAEF,QAAO,MAAMK,MAAQ,CAACC,MAAeN,cACnChB,QAAQoB,OAAO,CAACE,MAAON,WACzB,CAAE,AAEF,QAAO,MAAMO,sBAAwB,KACnCvB,QAAQuB,qBAAqB,EAC/B,CAAE,AAEF,QAAO,MAAMC,qBAAuB,KAClCxB,QAAQwB,oBAAoB,EAC9B,CAAE"}
|