@knocklabs/react 0.11.5 → 0.11.7
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/CHANGELOG.md +16 -0
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuideAnnotatedStatusDot.js +2 -0
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuideAnnotatedStatusDot.js.map +1 -0
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuideContextDetails.js +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuideContextDetails.js.map +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuideRow.js +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuideRow.js.map +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuideRowDetails.js +2 -0
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuideRowDetails.js.map +1 -0
- package/dist/cjs/modules/guide/components/Toolbar/V2/V2.js +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/V2.js.map +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/helpers.js +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/helpers.js.map +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/useDraggable.js +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/useDraggable.js.map +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/useInspectGuideClientStore.js +1 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/useInspectGuideClientStore.js.map +1 -1
- package/dist/esm/index.mjs +98 -99
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/modules/guide/components/Toolbar/V2/GuideAnnotatedStatusDot.mjs +18 -0
- package/dist/esm/modules/guide/components/Toolbar/V2/GuideAnnotatedStatusDot.mjs.map +1 -0
- package/dist/esm/modules/guide/components/Toolbar/V2/GuideContextDetails.mjs +15 -29
- package/dist/esm/modules/guide/components/Toolbar/V2/GuideContextDetails.mjs.map +1 -1
- package/dist/esm/modules/guide/components/Toolbar/V2/GuideRow.mjs +167 -49
- package/dist/esm/modules/guide/components/Toolbar/V2/GuideRow.mjs.map +1 -1
- package/dist/esm/modules/guide/components/Toolbar/V2/GuideRowDetails.mjs +51 -0
- package/dist/esm/modules/guide/components/Toolbar/V2/GuideRowDetails.mjs.map +1 -0
- package/dist/esm/modules/guide/components/Toolbar/V2/V2.mjs +132 -59
- package/dist/esm/modules/guide/components/Toolbar/V2/V2.mjs.map +1 -1
- package/dist/esm/modules/guide/components/Toolbar/V2/helpers.mjs +42 -5
- package/dist/esm/modules/guide/components/Toolbar/V2/helpers.mjs.map +1 -1
- package/dist/esm/modules/guide/components/Toolbar/V2/useDraggable.mjs +35 -32
- package/dist/esm/modules/guide/components/Toolbar/V2/useDraggable.mjs.map +1 -1
- package/dist/esm/modules/guide/components/Toolbar/V2/useInspectGuideClientStore.mjs +89 -75
- package/dist/esm/modules/guide/components/Toolbar/V2/useInspectGuideClientStore.mjs.map +1 -1
- package/dist/types/modules/guide/components/Toolbar/V2/GuideAnnotatedStatusDot.d.ts +6 -0
- package/dist/types/modules/guide/components/Toolbar/V2/GuideAnnotatedStatusDot.d.ts.map +1 -0
- package/dist/types/modules/guide/components/Toolbar/V2/GuideContextDetails.d.ts.map +1 -1
- package/dist/types/modules/guide/components/Toolbar/V2/GuideRow.d.ts +3 -1
- package/dist/types/modules/guide/components/Toolbar/V2/GuideRow.d.ts.map +1 -1
- package/dist/types/modules/guide/components/Toolbar/V2/GuideRowDetails.d.ts +5 -0
- package/dist/types/modules/guide/components/Toolbar/V2/GuideRowDetails.d.ts.map +1 -0
- package/dist/types/modules/guide/components/Toolbar/V2/V2.d.ts.map +1 -1
- package/dist/types/modules/guide/components/Toolbar/V2/helpers.d.ts +7 -1
- package/dist/types/modules/guide/components/Toolbar/V2/helpers.d.ts.map +1 -1
- package/dist/types/modules/guide/components/Toolbar/V2/useDraggable.d.ts +2 -0
- package/dist/types/modules/guide/components/Toolbar/V2/useDraggable.d.ts.map +1 -1
- package/dist/types/modules/guide/components/Toolbar/V2/useInspectGuideClientStore.d.ts +11 -4
- package/dist/types/modules/guide/components/Toolbar/V2/useInspectGuideClientStore.d.ts.map +1 -1
- package/package.json +5 -3
- package/dist/cjs/modules/guide/components/Toolbar/V2/DragHandle.js +0 -2
- package/dist/cjs/modules/guide/components/Toolbar/V2/DragHandle.js.map +0 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuideHoverCard.js +0 -2
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuideHoverCard.js.map +0 -1
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuidesListDisplaySelect.js +0 -2
- package/dist/cjs/modules/guide/components/Toolbar/V2/GuidesListDisplaySelect.js.map +0 -1
- package/dist/esm/modules/guide/components/Toolbar/V2/DragHandle.mjs +0 -20
- package/dist/esm/modules/guide/components/Toolbar/V2/DragHandle.mjs.map +0 -1
- package/dist/esm/modules/guide/components/Toolbar/V2/GuideHoverCard.mjs +0 -57
- package/dist/esm/modules/guide/components/Toolbar/V2/GuideHoverCard.mjs.map +0 -1
- package/dist/esm/modules/guide/components/Toolbar/V2/GuidesListDisplaySelect.mjs +0 -17
- package/dist/esm/modules/guide/components/Toolbar/V2/GuidesListDisplaySelect.mjs.map +0 -1
- package/dist/types/modules/guide/components/Toolbar/V2/DragHandle.d.ts +0 -9
- package/dist/types/modules/guide/components/Toolbar/V2/DragHandle.d.ts.map +0 -1
- package/dist/types/modules/guide/components/Toolbar/V2/GuidesListDisplaySelect.d.ts +0 -8
- package/dist/types/modules/guide/components/Toolbar/V2/GuidesListDisplaySelect.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"V2.mjs","sources":["../../../../../../../src/modules/guide/components/Toolbar/V2/V2.tsx"],"sourcesContent":["import { useGuideContext } from \"@knocklabs/react-core\";\nimport { Button } from \"@telegraph/button\";\nimport { Box, Stack } from \"@telegraph/layout\";\nimport { Text } from \"@telegraph/typography\";\nimport { Minimize2, Undo2 } from \"lucide-react\";\nimport React from \"react\";\n\nimport { KnockButton } from \"../KnockButton\";\nimport { TOOLBAR_Z_INDEX } from \"../shared\";\nimport \"../styles.css\";\n\nimport { DRAG_HANDLE_OVERHANG, DragHandle } from \"./DragHandle\";\nimport { GuideContextDetails } from \"./GuideContextDetails\";\nimport { GuideRow } from \"./GuideRow\";\nimport {\n DisplayOption,\n GuidesListDisplaySelect,\n} from \"./GuidesListDisplaySelect\";\nimport { detectToolbarParam } from \"./helpers\";\nimport { useDraggable } from \"./useDraggable\";\nimport {\n InspectionResult,\n useInspectGuideClientStore,\n} from \"./useInspectGuideClientStore\";\n\nconst GuidesList = ({\n guides,\n displayOption,\n}: {\n guides: InspectionResult[\"guides\"];\n displayOption: DisplayOption;\n}) => {\n return guides.map((guide, idx) => {\n const { isEligible, isQualified, selectable } = guide.annotation;\n const isDisplayable = isEligible && isQualified;\n const isDisplaying = isDisplayable && selectable.status === \"returned\";\n\n if (displayOption === \"only-displaying\" && !isDisplaying) {\n return null;\n }\n if (displayOption === \"only-displayable\" && !isDisplayable) {\n return null;\n }\n if (displayOption === \"all-eligible\" && !isEligible) {\n return null;\n }\n\n return <GuideRow key={guide.key} guide={guide} orderIndex={idx} />;\n });\n};\n\nexport const V2 = () => {\n const { client } = useGuideContext();\n\n const [guidesListDisplayOption, setGuidesListDisplayOption] =\n React.useState<DisplayOption>(\"only-displayable\");\n\n const [isVisible, setIsVisible] = React.useState(detectToolbarParam());\n const [isCollapsed, setIsCollapsed] = React.useState(true);\n\n React.useEffect(() => {\n if (!isVisible) {\n return;\n }\n\n client.setDebug();\n\n return () => {\n client.unsetDebug();\n };\n }, [isVisible, client]);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const { position, isDragging, handlePointerDown } = useDraggable({\n elementRef: containerRef,\n reclampDeps: [isCollapsed],\n rightPadding: DRAG_HANDLE_OVERHANG,\n initialPosition: { top: 16, right: 16 },\n });\n\n const result = useInspectGuideClientStore();\n if (!result) {\n return null;\n }\n\n return (\n <Box\n tgphRef={containerRef}\n position=\"fixed\"\n style={{\n top: position.top + \"px\",\n right: position.right + \"px\",\n zIndex: TOOLBAR_Z_INDEX,\n }}\n >\n <DragHandle onPointerDown={handlePointerDown} isDragging={isDragging} />\n {isCollapsed ? (\n <KnockButton onClick={() => setIsCollapsed(false)} positioned={false} />\n ) : (\n <Stack\n direction=\"column\"\n backgroundColor=\"surface-2\"\n shadow=\"2\"\n rounded=\"3\"\n border=\"px\"\n overflow=\"hidden\"\n style={{ width: \"400px\" }}\n >\n <Stack\n w=\"full\"\n p=\"2\"\n justify=\"space-between\"\n direction=\"row\"\n style={{ boxSizing: \"border-box\" }}\n >\n <Box style={{ width: \"220px\" }}>\n <GuidesListDisplaySelect\n value={guidesListDisplayOption}\n onChange={(opt) => setGuidesListDisplayOption(opt)}\n />\n </Box>\n\n <Stack gap=\"2\">\n <Button\n onClick={() => setIsVisible(false)}\n size=\"1\"\n variant=\"soft\"\n trailingIcon={{ icon: Undo2, \"aria-hidden\": true }}\n >\n Exit\n </Button>\n <Button\n onClick={() => setIsCollapsed(true)}\n size=\"1\"\n variant=\"soft\"\n leadingIcon={{ icon: Minimize2, alt: \"Collapse guide toolbar\" }}\n />\n </Stack>\n </Stack>\n\n <Box w=\"full\">\n <GuideContextDetails />\n {result.error && (\n <Box px=\"2\" pb=\"1\">\n <Text as=\"span\" size=\"0\" weight=\"medium\" color=\"red\">\n {result.error}\n </Text>\n </Box>\n )}\n <GuidesList\n guides={result.guides}\n displayOption={guidesListDisplayOption}\n />\n </Box>\n </Stack>\n )}\n </Box>\n );\n};\n"],"names":["GuidesList","guides","displayOption","map","guide","idx","isEligible","isQualified","selectable","annotation","isDisplayable","isDisplaying","status","GuideRow","key","V2","client","useGuideContext","guidesListDisplayOption","setGuidesListDisplayOption","React","useState","isVisible","setIsVisible","detectToolbarParam","isCollapsed","setIsCollapsed","useEffect","setDebug","unsetDebug","containerRef","useRef","position","isDragging","handlePointerDown","useDraggable","elementRef","reclampDeps","rightPadding","DRAG_HANDLE_OVERHANG","initialPosition","top","right","result","useInspectGuideClientStore","Box","zIndex","TOOLBAR_Z_INDEX","DragHandle","KnockButton","Stack","width","boxSizing","GuidesListDisplaySelect","opt","Button","icon","Undo2","Minimize2","alt","GuideContextDetails","error","Text"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"V2.mjs","sources":["../../../../../../../src/modules/guide/components/Toolbar/V2/V2.tsx"],"sourcesContent":["import { useGuideContext, useStore } from \"@knocklabs/react-core\";\nimport { Button } from \"@telegraph/button\";\nimport { Icon } from \"@telegraph/icon\";\nimport { Box, Stack } from \"@telegraph/layout\";\nimport { SegmentedControl } from \"@telegraph/segmented-control\";\nimport { Tooltip } from \"@telegraph/tooltip\";\nimport { Text } from \"@telegraph/typography\";\nimport {\n Box as BoxIcon,\n ChevronDown,\n ChevronRight,\n Gauge,\n GripVertical,\n LogOut,\n Minimize2,\n SlidersHorizontal,\n} from \"lucide-react\";\nimport React from \"react\";\n\nimport { KnockButton } from \"../KnockButton\";\nimport { TOOLBAR_Z_INDEX } from \"../shared\";\nimport \"../styles.css\";\n\nimport { GuideContextDetails } from \"./GuideContextDetails\";\nimport { GuideRow } from \"./GuideRow\";\nimport { clearRunConfigLS, getRunConfig } from \"./helpers\";\nimport { useDraggable } from \"./useDraggable\";\nimport {\n InspectionResultOk,\n useInspectGuideClientStore,\n} from \"./useInspectGuideClientStore\";\n\nconst TOOLBAR_WIDTH = \"540px\";\n\ntype DisplayOption = \"all-guides\" | \"only-eligible\" | \"only-displayable\";\n\nconst GuidesList = ({\n guides,\n displayOption,\n}: {\n guides: InspectionResultOk[\"guides\"];\n displayOption: DisplayOption;\n}) => {\n const [expandedGuideRowKey, setExpandedGuideRowKey] = React.useState<\n string | undefined\n >();\n\n React.useEffect(() => {\n setExpandedGuideRowKey(undefined);\n }, [displayOption]);\n\n return guides.map((guide, idx) => {\n const { isEligible, isQualified } = guide.annotation;\n const isDisplayable = isEligible && isQualified;\n\n if (displayOption === \"only-displayable\" && !isDisplayable) {\n return null;\n }\n if (displayOption === \"only-eligible\" && !isEligible) {\n return null;\n }\n return (\n <GuideRow\n key={guide.key}\n guide={guide}\n orderIndex={idx}\n isExpanded={guide.key === expandedGuideRowKey}\n onClick={() => {\n setExpandedGuideRowKey((k) =>\n k && k === guide.key ? undefined : guide.key,\n );\n }}\n />\n );\n });\n};\n\nexport const V2 = () => {\n const { client } = useGuideContext();\n\n const [displayOption, setDisplayOption] =\n React.useState<DisplayOption>(\"only-eligible\");\n const [runConfig, setRunConfig] = React.useState(() => getRunConfig());\n const [isCollapsed, setIsCollapsed] = React.useState(false);\n const [isContextPanelOpen, setIsContextPanelOpen] = React.useState(false);\n\n const { debugSettings } = useStore(client.store, (state) => ({\n debugSettings: state.debug || {},\n }));\n\n React.useEffect(() => {\n const { isVisible = false, focusedGuideKeys = {} } = runConfig || {};\n const isDebugging = client.store.state.debug?.debugging;\n if (isVisible && !isDebugging) {\n client.setDebug({ focusedGuideKeys });\n\n // If focused, switch to all guides so you can see in the list.\n if (Object.keys(focusedGuideKeys).length > 0) {\n setDisplayOption(\"all-guides\");\n }\n }\n\n return () => {\n client.unsetDebug();\n };\n }, [runConfig, client, setDisplayOption]);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const { position, isDragging, handlePointerDown, hasDraggedRef } =\n useDraggable({\n elementRef: containerRef,\n reclampDeps: [isCollapsed],\n initialPosition: { top: 16, right: 16 },\n });\n\n const result = useInspectGuideClientStore(runConfig);\n if (!result || !runConfig?.isVisible) {\n return null;\n }\n\n return (\n <Box\n tgphRef={containerRef}\n position=\"fixed\"\n style={{\n top: position.top + \"px\",\n right: position.right + \"px\",\n zIndex: TOOLBAR_Z_INDEX,\n }}\n >\n {isCollapsed ? (\n <Stack\n border=\"px\"\n rounded=\"4\"\n align=\"center\"\n justify=\"center\"\n w=\"10\"\n h=\"10\"\n onPointerDown={handlePointerDown}\n backgroundColor=\"surface-1\"\n style={{\n cursor: isDragging ? \"grabbing\" : \"grab\",\n touchAction: \"none\",\n userSelect: \"none\",\n }}\n >\n <Box\n style={{\n transform: \"scale(0.7)\",\n transformOrigin: \"center center\",\n }}\n >\n <KnockButton\n onClick={() => {\n if (!hasDraggedRef.current) {\n setIsCollapsed(false);\n }\n }}\n positioned={false}\n />\n </Box>\n </Stack>\n ) : (\n <Stack\n direction=\"column\"\n backgroundColor=\"surface-1\"\n rounded=\"4\"\n border=\"px\"\n overflow=\"hidden\"\n style={{\n width: TOOLBAR_WIDTH,\n boxShadow: \"0 8px 32px var(--tgph-gray-5)\",\n }}\n >\n {/* Header — also acts as drag handle area */}\n <Stack\n w=\"full\"\n p=\"2\"\n justify=\"space-between\"\n direction=\"row\"\n align=\"center\"\n gap=\"2\"\n borderBottom=\"px\"\n onPointerDown={handlePointerDown}\n style={{\n boxSizing: \"border-box\",\n cursor: isDragging ? \"grabbing\" : \"grab\",\n touchAction: \"none\",\n userSelect: \"none\",\n }}\n >\n {/* Left: drag icon + segmented control + settings */}\n <Stack align=\"center\" gap=\"1_5\" style={{ minWidth: 0, flex: 1 }}>\n <Stack\n display=\"inline-flex\"\n align=\"center\"\n style={{\n cursor: isDragging ? \"grabbing\" : \"grab\",\n touchAction: \"none\",\n userSelect: \"none\",\n }}\n onPointerDown={(e: React.PointerEvent) => {\n // Already handled by parent, prevent double-fire\n e.stopPropagation();\n handlePointerDown(e);\n }}\n >\n <Icon color=\"gray\" size=\"1\" icon={GripVertical} aria-hidden />\n </Stack>\n <Stack\n align=\"center\"\n gap=\"1_5\"\n onPointerDown={(e: React.PointerEvent) => e.stopPropagation()}\n >\n <SegmentedControl.Root\n size=\"1\"\n type=\"single\"\n value={displayOption}\n onValueChange={(val: DisplayOption) => {\n if (!val) return;\n setDisplayOption(val);\n }}\n >\n <SegmentedControl.Option value=\"all-guides\">\n All guides\n </SegmentedControl.Option>\n <SegmentedControl.Option value=\"only-eligible\">\n Eligible\n </SegmentedControl.Option>\n <SegmentedControl.Option value=\"only-displayable\">\n On this page\n </SegmentedControl.Option>\n </SegmentedControl.Root>\n\n <Tooltip label=\"Sandbox: Contain engagement actions to client side only\">\n <Button\n size=\"1\"\n variant={\n debugSettings.skipEngagementTracking ? \"outline\" : \"ghost\"\n }\n color={\n debugSettings.skipEngagementTracking ? \"blue\" : \"gray\"\n }\n icon={{ icon: BoxIcon, alt: \"Sandbox mode\" }}\n onClick={() => {\n client.setDebug({\n ...debugSettings,\n skipEngagementTracking:\n !debugSettings.skipEngagementTracking,\n });\n }}\n />\n </Tooltip>\n\n <Tooltip label=\"Ignore throttle: Show next guide immediately\">\n <Button\n size=\"1\"\n variant={\n debugSettings.ignoreDisplayInterval ? \"outline\" : \"ghost\"\n }\n color={\n debugSettings.ignoreDisplayInterval ? \"blue\" : \"gray\"\n }\n icon={{ icon: Gauge, alt: \"Ignore throttle\" }}\n onClick={() => {\n client.setDebug({\n ...debugSettings,\n ignoreDisplayInterval:\n !debugSettings.ignoreDisplayInterval,\n });\n }}\n />\n </Tooltip>\n\n <Tooltip label=\"Inspect target params\">\n <Button\n size=\"1\"\n variant={isContextPanelOpen ? \"outline\" : \"ghost\"}\n color={isContextPanelOpen ? \"blue\" : \"gray\"}\n leadingIcon={{\n icon: SlidersHorizontal,\n alt: \"Inspect target params\",\n }}\n trailingIcon={\n isContextPanelOpen\n ? { icon: ChevronDown, alt: \"Hide context data\" }\n : { icon: ChevronRight, alt: \"Show context data\" }\n }\n onClick={() => setIsContextPanelOpen((v) => !v)}\n />\n </Tooltip>\n </Stack>\n </Stack>\n\n {/* Right: exit + minimize buttons */}\n <Stack\n align=\"center\"\n gap=\"1_5\"\n style={{ flexShrink: 0 }}\n onPointerDown={(e: React.PointerEvent) => e.stopPropagation()}\n >\n <Stack align=\"center\" gap=\"1_5\">\n <Button\n size=\"1\"\n variant=\"outline\"\n leadingIcon={{ icon: LogOut, alt: \"Exit\" }}\n onClick={() => {\n setRunConfig((curr) => ({ ...curr, isVisible: false }));\n clearRunConfigLS();\n client.unsetDebug();\n }}\n >\n Exit\n </Button>\n <Tooltip label=\"Minimize toolbar\">\n <Button\n size=\"1\"\n variant=\"outline\"\n leadingIcon={{ icon: Minimize2, alt: \"Minimize\" }}\n onClick={() => setIsCollapsed(true)}\n />\n </Tooltip>\n </Stack>\n </Stack>\n </Stack>\n\n {/* Collapsible panel to show context data */}\n {isContextPanelOpen && (\n <Box borderBottom=\"px\">\n <GuideContextDetails />\n </Box>\n )}\n\n {/* Guide list content area */}\n <Box p=\"1\" overflow=\"auto\" style={{ maxHeight: \"calc(80vh - 96px)\" }}>\n {result.status === \"error\" ? (\n <Box px=\"2\" pb=\"1\">\n <Text\n as=\"span\"\n size=\"1\"\n weight=\"medium\"\n color={\n result.error === \"no_guides_fetched\" ? \"default\" : \"red\"\n }\n >\n {result.message}\n </Text>\n </Box>\n ) : (\n <GuidesList\n guides={result.guides}\n displayOption={displayOption}\n />\n )}\n </Box>\n </Stack>\n )}\n </Box>\n );\n};\n"],"names":["TOOLBAR_WIDTH","GuidesList","guides","displayOption","expandedGuideRowKey","setExpandedGuideRowKey","React","useState","useEffect","undefined","map","guide","idx","isEligible","isQualified","annotation","GuideRow","key","k","V2","client","useGuideContext","setDisplayOption","runConfig","setRunConfig","getRunConfig","isCollapsed","setIsCollapsed","isContextPanelOpen","setIsContextPanelOpen","debugSettings","useStore","store","state","debug","isVisible","focusedGuideKeys","isDebugging","debugging","setDebug","Object","keys","length","unsetDebug","containerRef","useRef","position","isDragging","handlePointerDown","hasDraggedRef","useDraggable","elementRef","reclampDeps","initialPosition","top","right","result","useInspectGuideClientStore","Box","zIndex","TOOLBAR_Z_INDEX","Stack","cursor","touchAction","userSelect","transform","transformOrigin","KnockButton","current","width","boxShadow","boxSizing","minWidth","flex","e","stopPropagation","Icon","GripVertical","SegmentedControl","val","Tooltip","Button","skipEngagementTracking","icon","BoxIcon","alt","ignoreDisplayInterval","Gauge","SlidersHorizontal","ChevronDown","ChevronRight","v","flexShrink","LogOut","curr","clearRunConfigLS","Minimize2","GuideContextDetails","maxHeight","status","Text","error","message"],"mappings":";;;;;;;;;;;;;;;;;AAgCA,MAAMA,IAAgB,SAIhBC,IAAaA,CAAC;AAAA,EAClBC,QAAAA;AAAAA,EACAC,eAAAA;AAIF,MAAM;AACJ,QAAM,CAACC,GAAqBC,CAAsB,IAAIC,EAAMC,SAE1D;AAEFD,SAAAA,EAAME,UAAU,MAAM;AACpBH,IAAAA,EAAuBI,MAAS;AAAA,EAAA,GAC/B,CAACN,CAAa,CAAC,GAEXD,EAAOQ,IAAI,CAACC,GAAOC,MAAQ;AAC1B,UAAA;AAAA,MAAEC,YAAAA;AAAAA,MAAYC,aAAAA;AAAAA,QAAgBH,EAAMI;AAMtCZ,WAHAA,MAAkB,sBAAsB,EAFtBU,KAAcC,MAKhCX,MAAkB,mBAAmB,CAACU,IACjC,OAGNP,gBAAAA,EAAA,cAAAU,GAAA,EACC,KAAKL,EAAMM,KACX,OAAAN,GACA,YAAYC,GACZ,YAAYD,EAAMM,QAAQb,GAC1B,SAAS,MAAM;AACbC,MAAAA,EAAwBa,OACtBA,KAAKA,MAAMP,EAAMM,MAAMR,SAAYE,EAAMM,GAC3C;AAAA,IAAA,GAEF;AAAA,EAAA,CAEL;AACH,GAEaE,KAAKA,MAAM;AAChB,QAAA;AAAA,IAAEC,QAAAA;AAAAA,MAAWC,EAAgB,GAE7B,CAAClB,GAAemB,CAAgB,IACpChB,EAAMC,SAAwB,eAAe,GACzC,CAACgB,GAAWC,CAAY,IAAIlB,EAAMC,SAAS,MAAMkB,GAAc,GAC/D,CAACC,GAAaC,CAAc,IAAIrB,EAAMC,SAAS,EAAK,GACpD,CAACqB,GAAoBC,CAAqB,IAAIvB,EAAMC,SAAS,EAAK,GAElE;AAAA,IAAEuB,eAAAA;AAAAA,EAAkBC,IAAAA,EAASX,EAAOY,OAAQC,CAAWA,OAAA;AAAA,IAC3DH,eAAeG,EAAMC,SAAS,CAAA;AAAA,EAAC,EAC/B;AAEF5B,EAAAA,EAAME,UAAU,MAAM;;AACd,UAAA;AAAA,MAAE2B,WAAAA,IAAY;AAAA,MAAOC,kBAAAA,IAAmB,CAAA;AAAA,IAAG,IAAIb,KAAa,CAAC,GAC7Dc,KAAcjB,IAAAA,EAAOY,MAAMC,MAAMC,UAAnBd,gBAAAA,EAA0BkB;AAC1CH,WAAAA,KAAa,CAACE,MAChBjB,EAAOmB,SAAS;AAAA,MAAEH,kBAAAA;AAAAA,IAAAA,CAAkB,GAGhCI,OAAOC,KAAKL,CAAgB,EAAEM,SAAS,KACzCpB,EAAiB,YAAY,IAI1B,MAAM;AACXF,MAAAA,EAAOuB,WAAW;AAAA,IACpB;AAAA,EACC,GAAA,CAACpB,GAAWH,GAAQE,CAAgB,CAAC;AAElCsB,QAAAA,IAAetC,EAAMuC,OAAuB,IAAI,GAChD;AAAA,IAAEC,UAAAA;AAAAA,IAAUC,YAAAA;AAAAA,IAAYC,mBAAAA;AAAAA,IAAmBC,eAAAA;AAAAA,MAC/CC,EAAa;AAAA,IACXC,YAAYP;AAAAA,IACZQ,aAAa,CAAC1B,CAAW;AAAA,IACzB2B,iBAAiB;AAAA,MAAEC,KAAK;AAAA,MAAIC,OAAO;AAAA,IAAA;AAAA,EAAG,CACvC,GAEGC,IAASC,EAA2BlC,CAAS;AACnD,SAAI,CAACiC,KAAU,EAACjC,KAAAA,QAAAA,EAAWY,aAClB,uCAINuB,GACC,EAAA,SAASd,GACT,UAAS,SACT,OAAO;AAAA,IACLU,KAAKR,EAASQ,MAAM;AAAA,IACpBC,OAAOT,EAASS,QAAQ;AAAA,IACxBI,QAAQC;AAAAA,EACV,EAAA,GAEClC,IACEpB,gBAAAA,EAAA,cAAAuD,GAAA,EACC,QAAO,MACP,SAAQ,KACR,OAAM,UACN,SAAQ,UACR,GAAE,MACF,GAAE,MACF,eAAeb,GACf,iBAAgB,aAChB,OAAO;AAAA,IACLc,QAAQf,IAAa,aAAa;AAAA,IAClCgB,aAAa;AAAA,IACbC,YAAY;AAAA,EACd,EAAA,GAEC1D,gBAAAA,EAAA,cAAAoD,GAAA,EACC,OAAO;AAAA,IACLO,WAAW;AAAA,IACXC,iBAAiB;AAAA,EAGnB,EAAA,GAAA5D,gBAAAA,EAAA,cAAC6D,GACC,EAAA,SAAS,MAAM;AACT,IAAClB,EAAcmB,WACjBzC,EAAe,EAAK;AAAA,EACtB,GAEF,YAAY,GAAA,CAAM,CAEtB,CACF,oCAECkC,GACC,EAAA,WAAU,UACV,iBAAgB,aAChB,SAAQ,KACR,QAAO,MACP,UAAS,UACT,OAAO;AAAA,IACLQ,OAAOrE;AAAAA,IACPsE,WAAW;AAAA,EAAA,KAIZhE,gBAAAA,EAAA,cAAAuD,GAAA,EACC,GAAE,QACF,GAAE,KACF,SAAQ,iBACR,WAAU,OACV,OAAM,UACN,KAAI,KACJ,cAAa,MACb,eAAeb,GACf,OAAO;AAAA,IACLuB,WAAW;AAAA,IACXT,QAAQf,IAAa,aAAa;AAAA,IAClCgB,aAAa;AAAA,IACbC,YAAY;AAAA,EAAA,KAIb1D,gBAAAA,EAAA,cAAAuD,GAAA,EAAM,OAAM,UAAS,KAAI,OAAM,OAAO;AAAA,IAAEW,UAAU;AAAA,IAAGC,MAAM;AAAA,EAAA,KACzDnE,gBAAAA,EAAA,cAAAuD,GAAA,EACC,SAAQ,eACR,OAAM,UACN,OAAO;AAAA,IACLC,QAAQf,IAAa,aAAa;AAAA,IAClCgB,aAAa;AAAA,IACbC,YAAY;AAAA,EAAA,GAEd,eAAe,CAACU,MAA0B;AAExCA,IAAAA,EAAEC,gBAAgB,GAClB3B,EAAkB0B,CAAC;AAAA,EAAA,KAGpBpE,gBAAAA,EAAA,cAAAsE,GAAA,EAAK,OAAM,QAAO,MAAK,KAAI,MAAMC,GAAc,eAAW,IAAA,CAC7D,GACCvE,gBAAAA,EAAA,cAAAuD,GAAA,EACC,OAAM,UACN,KAAI,OACJ,eAAe,CAACa,MAA0BA,EAAEC,kBAAgB,mCAE3DG,EAAiB,MAAjB,EACC,MAAK,KACL,MAAK,UACL,OAAO3E,GACP,eAAe,CAAC4E,MAAuB;AACrC,IAAKA,KACLzD,EAAiByD,CAAG;AAAA,EACtB,EAAA,mCAECD,EAAiB,QAAjB,EAAwB,OAAM,aAAA,GAAY,YAE3C,GACAxE,gBAAAA,EAAA,cAACwE,EAAiB,QAAjB,EAAwB,OAAM,gBAAe,GAAA,UAE9C,GACCxE,gBAAAA,EAAA,cAAAwE,EAAiB,QAAjB,EAAwB,OAAM,sBAAkB,cAEjD,CACF,GAECxE,gBAAAA,EAAA,cAAA0E,GAAA,EAAQ,OAAM,6DACb1E,gBAAAA,EAAA,cAAC2E,KACC,MAAK,KACL,SACEnD,EAAcoD,yBAAyB,YAAY,SAErD,OACEpD,EAAcoD,yBAAyB,SAAS,QAElD,MAAM;AAAA,IAAEC,MAAMC;AAAAA,IAASC,KAAK;AAAA,EAAe,GAC3C,SAAS,MAAM;AACbjE,IAAAA,EAAOmB,SAAS;AAAA,MACd,GAAGT;AAAAA,MACHoD,wBACE,CAACpD,EAAcoD;AAAAA,IAAAA,CAClB;AAAA,EACH,EAAA,CAAE,CAEN,GAEA5E,gBAAAA,EAAA,cAAC0E,KAAQ,OAAM,kFACZC,GACC,EAAA,MAAK,KACL,SACEnD,EAAcwD,wBAAwB,YAAY,SAEpD,OACExD,EAAcwD,wBAAwB,SAAS,QAEjD,MAAM;AAAA,IAAEH,MAAMI;AAAAA,IAAOF,KAAK;AAAA,EAAkB,GAC5C,SAAS,MAAM;AACbjE,IAAAA,EAAOmB,SAAS;AAAA,MACd,GAAGT;AAAAA,MACHwD,uBACE,CAACxD,EAAcwD;AAAAA,IAAAA,CAClB;AAAA,KACD,CAEN,mCAECN,GAAQ,EAAA,OAAM,2BACZ1E,gBAAAA,EAAA,cAAA2E,GAAA,EACC,MAAK,KACL,SAASrD,IAAqB,YAAY,SAC1C,OAAOA,IAAqB,SAAS,QACrC,aAAa;AAAA,IACXuD,MAAMK;AAAAA,IACNH,KAAK;AAAA,EAAA,GAEP,cACEzD,IACI;AAAA,IAAEuD,MAAMM;AAAAA,IAAaJ,KAAK;AAAA,EAAA,IAC1B;AAAA,IAAEF,MAAMO;AAAAA,IAAcL,KAAK;AAAA,EAAA,GAEjC,SAAS,MAAMxD,EAAuB8D,CAAMA,MAAA,CAACA,CAAC,EAAE,CAAA,CAEpD,CACF,CACF,GAGCrF,gBAAAA,EAAA,cAAAuD,GAAA,EACC,OAAM,UACN,KAAI,OACJ,OAAO;AAAA,IAAE+B,YAAY;AAAA,KACrB,eAAe,CAAClB,MAA0BA,EAAEC,gBAAAA,KAE3CrE,gBAAAA,EAAA,cAAAuD,GAAA,EAAM,OAAM,UAAS,KAAI,SACvBvD,gBAAAA,EAAA,cAAA2E,GAAA,EACC,MAAK,KACL,SAAQ,WACR,aAAa;AAAA,IAAEE,MAAMU;AAAAA,IAAQR,KAAK;AAAA,EAAO,GACzC,SAAS,MAAM;AACb7D,IAAAA,EAAcsE,CAAUA,OAAA;AAAA,MAAE,GAAGA;AAAAA,MAAM3D,WAAW;AAAA,IAAA,EAAQ,GACrC4D,EAAA,GACjB3E,EAAOuB,WAAW;AAAA,EAAA,EAClB,GAAA,MAGJ,GACArC,gBAAAA,EAAA,cAAC0E,GAAQ,EAAA,OAAM,mBACb,GAAA1E,gBAAAA,EAAA,cAAC2E,GACC,EAAA,MAAK,KACL,SAAQ,WACR,aAAa;AAAA,IAAEE,MAAMa;AAAAA,IAAWX,KAAK;AAAA,EAAW,GAChD,SAAS,MAAM1D,EAAe,EAAI,EAAE,CAAA,CAExC,CACF,CACF,CACF,GAGCC,KACCtB,gBAAAA,EAAA,cAACoD,KAAI,cAAa,QACfpD,gBAAAA,EAAA,cAAA2F,GAAA,IAAmB,CACtB,GAID3F,gBAAAA,EAAA,cAAAoD,GAAA,EAAI,GAAE,KAAI,UAAS,QAAO,OAAO;AAAA,IAAEwC,WAAW;AAAA,EAAA,KAC5C1C,EAAO2C,WAAW,UACjB7F,gBAAAA,EAAA,cAACoD,KAAI,IAAG,KAAI,IAAG,IAAA,mCACZ0C,GACC,EAAA,IAAG,QACH,MAAK,KACL,QAAO,UACP,OACE5C,EAAO6C,UAAU,sBAAsB,YAAY,MAGpD7C,GAAAA,EAAO8C,OACV,CACF,IAEChG,gBAAAA,EAAA,cAAAL,GAAA,EACC,QAAQuD,EAAOtD,QACf,eAAAC,GAEH,CACH,CACF,CAEJ;AAEJ;"}
|
|
@@ -2,12 +2,49 @@ import "@knocklabs/react-core";
|
|
|
2
2
|
import "react";
|
|
3
3
|
/* empty css */
|
|
4
4
|
import "lodash.debounce";
|
|
5
|
-
import { checkForWindow as
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
5
|
+
import { checkForWindow as e } from "../../../../core/utils.mjs";
|
|
6
|
+
const s = "knock_guide_toolbar", l = "focused_guide_key", n = "knock_guide_debug", R = () => {
|
|
7
|
+
const t = {
|
|
8
|
+
isVisible: !1
|
|
9
|
+
}, o = e();
|
|
10
|
+
if (!o || !o.location)
|
|
11
|
+
return t;
|
|
12
|
+
const c = new URLSearchParams(o.location.search), i = c.get(s), a = c.get(l);
|
|
13
|
+
if (i !== null) {
|
|
14
|
+
const r = {
|
|
15
|
+
isVisible: i === "true"
|
|
16
|
+
};
|
|
17
|
+
return a && (r.focusedGuideKeys = {
|
|
18
|
+
[a]: !0
|
|
19
|
+
}), u(r), r;
|
|
20
|
+
}
|
|
21
|
+
return g() || t;
|
|
22
|
+
}, u = (t) => {
|
|
23
|
+
const o = e();
|
|
24
|
+
if (!(!o || !o.localStorage))
|
|
25
|
+
try {
|
|
26
|
+
o.localStorage.setItem(n, JSON.stringify(t));
|
|
27
|
+
} catch {
|
|
28
|
+
}
|
|
29
|
+
}, g = () => {
|
|
30
|
+
const t = e();
|
|
31
|
+
if (!(!t || !t.localStorage))
|
|
32
|
+
try {
|
|
33
|
+
const o = t.localStorage.getItem(n);
|
|
34
|
+
if (o)
|
|
35
|
+
return JSON.parse(o);
|
|
36
|
+
} catch {
|
|
37
|
+
}
|
|
38
|
+
}, h = () => {
|
|
39
|
+
const t = e();
|
|
40
|
+
if (!(!t || !t.localStorage))
|
|
41
|
+
try {
|
|
42
|
+
t.localStorage.removeItem(n);
|
|
43
|
+
} catch {
|
|
44
|
+
}
|
|
9
45
|
};
|
|
10
46
|
export {
|
|
11
|
-
|
|
47
|
+
h as clearRunConfigLS,
|
|
48
|
+
R as getRunConfig
|
|
12
49
|
};
|
|
13
50
|
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.mjs","sources":["../../../../../../../src/modules/guide/components/Toolbar/V2/helpers.ts"],"sourcesContent":["import { checkForWindow } from \"../../../../../modules/core\";\n\n// Use this param to start Toolbar and enter into a debugging session when\n// it is present and set to true.\nconst TOOLBAR_QUERY_PARAM = \"knock_guide_toolbar\";\n\nexport const
|
|
1
|
+
{"version":3,"file":"helpers.mjs","sources":["../../../../../../../src/modules/guide/components/Toolbar/V2/helpers.ts"],"sourcesContent":["import { KnockGuide } from \"@knocklabs/client\";\n\nimport { checkForWindow } from \"../../../../../modules/core\";\n\n// Use this param to start Toolbar and enter into a debugging session when\n// it is present and set to true.\nconst TOOLBAR_QUERY_PARAM = \"knock_guide_toolbar\";\n\n// Optional, when present pin/focus on this guide.\nconst GUIDE_KEY_PARAM = \"focused_guide_key\";\n\n// Use this key to read and write the run config data.\nconst LOCAL_STORAGE_KEY = \"knock_guide_debug\";\n\nexport type ToolbarV2RunConfig = {\n isVisible: boolean;\n focusedGuideKeys?: Record<KnockGuide[\"key\"], true>;\n};\n\nexport const getRunConfig = (): ToolbarV2RunConfig => {\n const fallback = { isVisible: false };\n\n const win = checkForWindow();\n if (!win || !win.location) {\n return fallback;\n }\n\n const urlSearchParams = new URLSearchParams(win.location.search);\n const toolbarParamValue = urlSearchParams.get(TOOLBAR_QUERY_PARAM);\n const guideKeyParamValue = urlSearchParams.get(GUIDE_KEY_PARAM);\n\n // If toolbar param detected in the URL, write to local storage before\n // returning.\n if (toolbarParamValue !== null) {\n const config: ToolbarV2RunConfig = {\n isVisible: toolbarParamValue === \"true\",\n };\n if (guideKeyParamValue) {\n config.focusedGuideKeys = { [guideKeyParamValue]: true };\n }\n\n writeRunConfigLS(config);\n return config;\n }\n\n // If not detected, check local storage for a persisted run config. If not\n // present then fall back to a default config.\n return readRunConfigLS() || fallback;\n};\n\nconst writeRunConfigLS = (config: ToolbarV2RunConfig) => {\n const win = checkForWindow();\n if (!win || !win.localStorage) return;\n\n try {\n win.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(config));\n } catch {\n // localStorage may be unavailable (e.g. private browsing)\n }\n};\n\nconst readRunConfigLS = (): ToolbarV2RunConfig | undefined => {\n const win = checkForWindow();\n if (!win || !win.localStorage) return undefined;\n\n try {\n const stored = win.localStorage.getItem(LOCAL_STORAGE_KEY);\n if (stored) {\n return JSON.parse(stored);\n }\n } catch {\n // localStorage may be unavailable (e.g. private browsing)\n }\n return undefined;\n};\n\nexport const clearRunConfigLS = () => {\n const win = checkForWindow();\n if (!win || !win.localStorage) return;\n\n try {\n win.localStorage.removeItem(LOCAL_STORAGE_KEY);\n } catch {\n // localStorage may be unavailable (e.g. private browsing)\n }\n};\n"],"names":["TOOLBAR_QUERY_PARAM","GUIDE_KEY_PARAM","LOCAL_STORAGE_KEY","getRunConfig","fallback","isVisible","win","checkForWindow","location","urlSearchParams","URLSearchParams","search","toolbarParamValue","get","guideKeyParamValue","config","focusedGuideKeys","writeRunConfigLS","readRunConfigLS","localStorage","setItem","JSON","stringify","stored","getItem","parse","clearRunConfigLS","removeItem"],"mappings":";;;;;AAMA,MAAMA,IAAsB,uBAGtBC,IAAkB,qBAGlBC,IAAoB,qBAObC,IAAeA,MAA0B;AACpD,QAAMC,IAAW;AAAA,IAAEC,WAAW;AAAA,EAAM,GAE9BC,IAAMC,EAAe;AAC3B,MAAI,CAACD,KAAO,CAACA,EAAIE;AACRJ,WAAAA;AAGT,QAAMK,IAAkB,IAAIC,gBAAgBJ,EAAIE,SAASG,MAAM,GACzDC,IAAoBH,EAAgBI,IAAIb,CAAmB,GAC3Dc,IAAqBL,EAAgBI,IAAIZ,CAAe;AAI9D,MAAIW,MAAsB,MAAM;AAC9B,UAAMG,IAA6B;AAAA,MACjCV,WAAWO,MAAsB;AAAA,IACnC;AACA,WAAIE,MACFC,EAAOC,mBAAmB;AAAA,MAAE,CAACF,CAAkB,GAAG;AAAA,IAAK,IAGzDG,EAAiBF,CAAM,GAChBA;AAAAA,EAAAA;AAKT,SAAOG,EAAqBd,KAAAA;AAC9B,GAEMa,IAAmBA,CAACF,MAA+B;AACvD,QAAMT,IAAMC,EAAe;AAC3B,MAAI,GAACD,KAAO,CAACA,EAAIa;AAEb,QAAA;AACFb,MAAAA,EAAIa,aAAaC,QAAQlB,GAAmBmB,KAAKC,UAAUP,CAAM,CAAC;AAAA,IAAA,QAC5D;AAAA,IAAA;AAGV,GAEMG,IAAkBA,MAAsC;AAC5D,QAAMZ,IAAMC,EAAe;AAC3B,MAAI,GAACD,KAAO,CAACA,EAAIa;AAEb,QAAA;AACF,YAAMI,IAASjB,EAAIa,aAAaK,QAAQtB,CAAiB;AACzD,UAAIqB;AACKF,eAAAA,KAAKI,MAAMF,CAAM;AAAA,IAC1B,QACM;AAAA,IAAA;AAIV,GAEaG,IAAmBA,MAAM;AACpC,QAAMpB,IAAMC,EAAe;AAC3B,MAAI,GAACD,KAAO,CAACA,EAAIa;AAEb,QAAA;AACEA,MAAAA,EAAAA,aAAaQ,WAAWzB,CAAiB;AAAA,IAAA,QACvC;AAAA,IAAA;AAGV;"}
|
|
@@ -1,56 +1,58 @@
|
|
|
1
1
|
import e from "react";
|
|
2
|
-
const
|
|
2
|
+
const S = {
|
|
3
3
|
top: 16,
|
|
4
4
|
right: 16
|
|
5
|
-
};
|
|
6
|
-
function
|
|
7
|
-
const r = window.innerWidth, f = window.innerHeight,
|
|
5
|
+
}, T = 5;
|
|
6
|
+
function y(n, s, w, o = 0) {
|
|
7
|
+
const r = window.innerWidth, f = window.innerHeight, D = s + o, p = r - n.right - s, d = Math.max(0, Math.min(p, r - D)), c = Math.max(0, Math.min(n.top, f - w)), u = r - d - s;
|
|
8
8
|
return {
|
|
9
|
-
top:
|
|
9
|
+
top: c,
|
|
10
10
|
right: u
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
13
|
function b({
|
|
14
14
|
elementRef: n,
|
|
15
|
-
initialPosition:
|
|
16
|
-
reclampDeps:
|
|
15
|
+
initialPosition: s = S,
|
|
16
|
+
reclampDeps: w = [],
|
|
17
17
|
rightPadding: o = 0
|
|
18
18
|
}) {
|
|
19
|
-
const [r, f] = e.useState(
|
|
19
|
+
const [r, f] = e.useState(s), [D, p] = e.useState(!1), d = e.useRef(r);
|
|
20
20
|
d.current = r;
|
|
21
|
-
const
|
|
21
|
+
const c = e.useRef({
|
|
22
22
|
x: 0,
|
|
23
23
|
y: 0
|
|
24
24
|
}), u = e.useRef({
|
|
25
25
|
top: 0,
|
|
26
26
|
right: 0
|
|
27
|
-
}),
|
|
27
|
+
}), i = e.useRef(null), g = e.useRef(!1), h = e.useRef(!1), a = e.useRef(null), v = e.useCallback(() => {
|
|
28
28
|
const t = n.current;
|
|
29
29
|
if (!t) return;
|
|
30
30
|
const l = t.getBoundingClientRect();
|
|
31
|
-
f((
|
|
32
|
-
}, [n, o]),
|
|
33
|
-
t.preventDefault(),
|
|
31
|
+
f((m) => y(m, l.width, l.height, o));
|
|
32
|
+
}, [n, o]), A = e.useCallback((t) => {
|
|
33
|
+
t.preventDefault(), c.current = {
|
|
34
34
|
x: t.clientX,
|
|
35
35
|
y: t.clientY
|
|
36
36
|
}, u.current = {
|
|
37
37
|
...d.current
|
|
38
|
-
},
|
|
39
|
-
const l = (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
}, g.current = !0, h.current = !1, p(!0);
|
|
39
|
+
const l = (R) => {
|
|
40
|
+
if (!g.current) return;
|
|
41
|
+
const M = R.clientX - c.current.x, P = R.clientY - c.current.y;
|
|
42
|
+
!h.current && Math.hypot(M, P) >= T && (h.current = !0), i.current === null && (i.current = requestAnimationFrame(() => {
|
|
43
|
+
if (i.current = null, !g.current) return;
|
|
44
|
+
const F = R.clientX - c.current.x, C = R.clientY - c.current.y, H = {
|
|
45
|
+
top: u.current.top + C,
|
|
46
|
+
right: u.current.right - F
|
|
47
|
+
}, E = n.current;
|
|
48
|
+
if (!E) return;
|
|
49
|
+
const L = E.getBoundingClientRect(), I = y(H, L.width, L.height, o);
|
|
50
|
+
f(I);
|
|
49
51
|
}));
|
|
50
|
-
},
|
|
51
|
-
|
|
52
|
-
},
|
|
53
|
-
document.addEventListener("pointermove", l), document.addEventListener("pointerup",
|
|
52
|
+
}, m = () => {
|
|
53
|
+
g.current = !1, p(!1), i.current !== null && (cancelAnimationFrame(i.current), i.current = null), document.removeEventListener("pointermove", l), document.removeEventListener("pointerup", x), a.current = null;
|
|
54
|
+
}, x = () => m();
|
|
55
|
+
document.addEventListener("pointermove", l), document.addEventListener("pointerup", x), a.current = m;
|
|
54
56
|
}, [n, o]);
|
|
55
57
|
return e.useEffect(() => () => {
|
|
56
58
|
var t;
|
|
@@ -61,14 +63,15 @@ function b({
|
|
|
61
63
|
}, [v]), e.useEffect(() => {
|
|
62
64
|
const t = requestAnimationFrame(() => v());
|
|
63
65
|
return () => cancelAnimationFrame(t);
|
|
64
|
-
},
|
|
66
|
+
}, w), {
|
|
65
67
|
position: r,
|
|
66
|
-
isDragging:
|
|
67
|
-
handlePointerDown:
|
|
68
|
+
isDragging: D,
|
|
69
|
+
handlePointerDown: A,
|
|
70
|
+
hasDraggedRef: h
|
|
68
71
|
};
|
|
69
72
|
}
|
|
70
73
|
export {
|
|
71
|
-
|
|
74
|
+
y as clampPosition,
|
|
72
75
|
b as useDraggable
|
|
73
76
|
};
|
|
74
77
|
//# sourceMappingURL=useDraggable.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDraggable.mjs","sources":["../../../../../../../src/modules/guide/components/Toolbar/V2/useDraggable.ts"],"sourcesContent":["import React from \"react\";\n\n// NOTE: This hook was generated entirely with Claude then lightly touched up,\n// and the behavior works correctly from testing it manually in the browser.\n\ntype Position = { top: number; right: number };\n\ntype UseDraggableOptions = {\n elementRef: React.RefObject<HTMLElement | null>;\n initialPosition?: Position;\n reclampDeps?: React.DependencyList;\n /** Extra space to reserve beyond the element's right edge (px). */\n rightPadding?: number;\n};\n\ntype UseDraggableReturn = {\n position: Position;\n isDragging: boolean;\n handlePointerDown: (e: React.PointerEvent) => void;\n};\n\nconst DEFAULT_POSITION: Position = { top: 16, right: 16 };\n\n/**\n * @param rightPadding Extra space to reserve on the right edge (e.g. for a\n * drag handle that protrudes beyond the element). The element's left edge\n * is clamped so that `elementWidth + rightPadding` stays within the viewport.\n */\nexport function clampPosition(\n pos: Position,\n elementWidth: number,\n elementHeight: number,\n rightPadding = 0,\n): Position {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const totalWidth = elementWidth + rightPadding;\n const left = viewportWidth - pos.right - elementWidth;\n const clampedLeft = Math.max(0, Math.min(left, viewportWidth - totalWidth));\n const clampedTop = Math.max(\n 0,\n Math.min(pos.top, viewportHeight - elementHeight),\n );\n const clampedRight = viewportWidth - clampedLeft - elementWidth;\n\n return { top: clampedTop, right: clampedRight };\n}\n\nexport function useDraggable({\n elementRef,\n initialPosition = DEFAULT_POSITION,\n reclampDeps = [],\n rightPadding = 0,\n}: UseDraggableOptions): UseDraggableReturn {\n const [position, setPosition] = React.useState<Position>(initialPosition);\n const [isDragging, setIsDragging] = React.useState(false);\n\n const positionRef = React.useRef(position);\n positionRef.current = position;\n\n const startPointerRef = React.useRef({ x: 0, y: 0 });\n const startPositionRef = React.useRef<Position>({ top: 0, right: 0 });\n const rafIdRef = React.useRef<number | null>(null);\n const isDraggingRef = React.useRef(false);\n const cleanupListenersRef = React.useRef<(() => void) | null>(null);\n\n const reclamp = React.useCallback(() => {\n const el = elementRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setPosition((prev) =>\n clampPosition(prev, rect.width, rect.height, rightPadding),\n );\n }, [elementRef, rightPadding]);\n\n // Stable pointerdown handler\n const handlePointerDown = React.useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault();\n startPointerRef.current = { x: e.clientX, y: e.clientY };\n startPositionRef.current = { ...positionRef.current };\n isDraggingRef.current = true;\n setIsDragging(true);\n\n const onPointerMove = (moveEvent: PointerEvent) => {\n if (!isDraggingRef.current) return;\n\n if (rafIdRef.current !== null) return;\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n if (!isDraggingRef.current) return;\n\n const dx = moveEvent.clientX - startPointerRef.current.x;\n const dy = moveEvent.clientY - startPointerRef.current.y;\n\n const newPos: Position = {\n top: startPositionRef.current.top + dy,\n right: startPositionRef.current.right - dx,\n };\n\n const el = elementRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const clamped = clampPosition(\n newPos,\n rect.width,\n rect.height,\n rightPadding,\n );\n setPosition(clamped);\n });\n };\n\n const cleanup = () => {\n isDraggingRef.current = false;\n setIsDragging(false);\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n document.removeEventListener(\"pointermove\", onPointerMove);\n document.removeEventListener(\"pointerup\", onPointerUp);\n cleanupListenersRef.current = null;\n };\n\n const onPointerUp = () => cleanup();\n\n document.addEventListener(\"pointermove\", onPointerMove);\n document.addEventListener(\"pointerup\", onPointerUp);\n cleanupListenersRef.current = cleanup;\n },\n [elementRef, rightPadding],\n );\n\n // Cleanup on unmount\n React.useEffect(() => {\n return () => {\n cleanupListenersRef.current?.();\n };\n }, []);\n\n // Re-clamp on window resize\n React.useEffect(() => {\n const onResize = () => reclamp();\n window.addEventListener(\"resize\", onResize);\n return () => window.removeEventListener(\"resize\", onResize);\n }, [reclamp]);\n\n // Re-clamp when deps change (e.g. collapse toggle)\n React.useEffect(() => {\n const id = requestAnimationFrame(() => reclamp());\n return () => cancelAnimationFrame(id);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, reclampDeps);\n\n return { position, isDragging, handlePointerDown };\n}\n"],"names":["DEFAULT_POSITION","top","right","clampPosition","pos","elementWidth","elementHeight","rightPadding","viewportWidth","window","innerWidth","viewportHeight","innerHeight","totalWidth","left","clampedLeft","Math","max","min","clampedTop","clampedRight","useDraggable","elementRef","initialPosition","reclampDeps","position","setPosition","React","useState","isDragging","setIsDragging","positionRef","useRef","current","startPointerRef","x","y","startPositionRef","rafIdRef","isDraggingRef","cleanupListenersRef","reclamp","useCallback","el","rect","getBoundingClientRect","prev","width","height","handlePointerDown","e","preventDefault","clientX","clientY","onPointerMove","moveEvent","
|
|
1
|
+
{"version":3,"file":"useDraggable.mjs","sources":["../../../../../../../src/modules/guide/components/Toolbar/V2/useDraggable.ts"],"sourcesContent":["import React from \"react\";\n\n// NOTE: This hook was generated entirely with Claude then lightly touched up,\n// and the behavior works correctly from testing it manually in the browser.\n\ntype Position = { top: number; right: number };\n\ntype UseDraggableOptions = {\n elementRef: React.RefObject<HTMLElement | null>;\n initialPosition?: Position;\n reclampDeps?: React.DependencyList;\n /** Extra space to reserve beyond the element's right edge (px). */\n rightPadding?: number;\n};\n\ntype UseDraggableReturn = {\n position: Position;\n isDragging: boolean;\n handlePointerDown: (e: React.PointerEvent) => void;\n /** True if the pointer moved beyond a small threshold during the last interaction. */\n hasDraggedRef: React.RefObject<boolean>;\n};\n\nconst DEFAULT_POSITION: Position = { top: 16, right: 16 };\nconst DRAG_THRESHOLD = 5;\n\n/**\n * @param rightPadding Extra space to reserve on the right edge (e.g. for a\n * drag handle that protrudes beyond the element). The element's left edge\n * is clamped so that `elementWidth + rightPadding` stays within the viewport.\n */\nexport function clampPosition(\n pos: Position,\n elementWidth: number,\n elementHeight: number,\n rightPadding = 0,\n): Position {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const totalWidth = elementWidth + rightPadding;\n const left = viewportWidth - pos.right - elementWidth;\n const clampedLeft = Math.max(0, Math.min(left, viewportWidth - totalWidth));\n const clampedTop = Math.max(\n 0,\n Math.min(pos.top, viewportHeight - elementHeight),\n );\n const clampedRight = viewportWidth - clampedLeft - elementWidth;\n\n return { top: clampedTop, right: clampedRight };\n}\n\nexport function useDraggable({\n elementRef,\n initialPosition = DEFAULT_POSITION,\n reclampDeps = [],\n rightPadding = 0,\n}: UseDraggableOptions): UseDraggableReturn {\n const [position, setPosition] = React.useState<Position>(initialPosition);\n const [isDragging, setIsDragging] = React.useState(false);\n\n const positionRef = React.useRef(position);\n positionRef.current = position;\n\n const startPointerRef = React.useRef({ x: 0, y: 0 });\n const startPositionRef = React.useRef<Position>({ top: 0, right: 0 });\n const rafIdRef = React.useRef<number | null>(null);\n const isDraggingRef = React.useRef(false);\n const hasDraggedRef = React.useRef(false);\n const cleanupListenersRef = React.useRef<(() => void) | null>(null);\n\n const reclamp = React.useCallback(() => {\n const el = elementRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setPosition((prev) =>\n clampPosition(prev, rect.width, rect.height, rightPadding),\n );\n }, [elementRef, rightPadding]);\n\n // Stable pointerdown handler\n const handlePointerDown = React.useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault();\n startPointerRef.current = { x: e.clientX, y: e.clientY };\n startPositionRef.current = { ...positionRef.current };\n isDraggingRef.current = true;\n hasDraggedRef.current = false;\n setIsDragging(true);\n\n const onPointerMove = (moveEvent: PointerEvent) => {\n if (!isDraggingRef.current) return;\n\n const dx = moveEvent.clientX - startPointerRef.current.x;\n const dy = moveEvent.clientY - startPointerRef.current.y;\n if (!hasDraggedRef.current && Math.hypot(dx, dy) >= DRAG_THRESHOLD) {\n hasDraggedRef.current = true;\n }\n\n if (rafIdRef.current !== null) return;\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n if (!isDraggingRef.current) return;\n\n const dx = moveEvent.clientX - startPointerRef.current.x;\n const dy = moveEvent.clientY - startPointerRef.current.y;\n\n const newPos: Position = {\n top: startPositionRef.current.top + dy,\n right: startPositionRef.current.right - dx,\n };\n\n const el = elementRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const clamped = clampPosition(\n newPos,\n rect.width,\n rect.height,\n rightPadding,\n );\n setPosition(clamped);\n });\n };\n\n const cleanup = () => {\n isDraggingRef.current = false;\n setIsDragging(false);\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n document.removeEventListener(\"pointermove\", onPointerMove);\n document.removeEventListener(\"pointerup\", onPointerUp);\n cleanupListenersRef.current = null;\n };\n\n const onPointerUp = () => cleanup();\n\n document.addEventListener(\"pointermove\", onPointerMove);\n document.addEventListener(\"pointerup\", onPointerUp);\n cleanupListenersRef.current = cleanup;\n },\n [elementRef, rightPadding],\n );\n\n // Cleanup on unmount\n React.useEffect(() => {\n return () => {\n cleanupListenersRef.current?.();\n };\n }, []);\n\n // Re-clamp on window resize\n React.useEffect(() => {\n const onResize = () => reclamp();\n window.addEventListener(\"resize\", onResize);\n return () => window.removeEventListener(\"resize\", onResize);\n }, [reclamp]);\n\n // Re-clamp when deps change (e.g. collapse toggle)\n React.useEffect(() => {\n const id = requestAnimationFrame(() => reclamp());\n return () => cancelAnimationFrame(id);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, reclampDeps);\n\n return { position, isDragging, handlePointerDown, hasDraggedRef };\n}\n"],"names":["DEFAULT_POSITION","top","right","DRAG_THRESHOLD","clampPosition","pos","elementWidth","elementHeight","rightPadding","viewportWidth","window","innerWidth","viewportHeight","innerHeight","totalWidth","left","clampedLeft","Math","max","min","clampedTop","clampedRight","useDraggable","elementRef","initialPosition","reclampDeps","position","setPosition","React","useState","isDragging","setIsDragging","positionRef","useRef","current","startPointerRef","x","y","startPositionRef","rafIdRef","isDraggingRef","hasDraggedRef","cleanupListenersRef","reclamp","useCallback","el","rect","getBoundingClientRect","prev","width","height","handlePointerDown","e","preventDefault","clientX","clientY","onPointerMove","moveEvent","dx","dy","hypot","requestAnimationFrame","newPos","clamped","cleanup","cancelAnimationFrame","removeEventListener","onPointerUp","addEventListener","useEffect","onResize","id"],"mappings":"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"}
|
|
@@ -3,103 +3,103 @@ import { useGuideContext as _, useStore as b } from "@knocklabs/react-core";
|
|
|
3
3
|
const g = (e) => e.reduce((t, s) => ({
|
|
4
4
|
...t,
|
|
5
5
|
[s.key]: s
|
|
6
|
-
}), {}), v = (e, t, s,
|
|
7
|
-
var
|
|
8
|
-
const
|
|
9
|
-
return e.bypass_global_group_limit ? "returned" : e.key === s.resolved ? t.throttled && !
|
|
10
|
-
}, h = (e, t, s,
|
|
11
|
-
var
|
|
12
|
-
const
|
|
13
|
-
if (
|
|
6
|
+
}), {}), v = (e, t, s, n) => {
|
|
7
|
+
var r, o, i, d, u, l, c, f;
|
|
8
|
+
const a = !!((d = (i = (o = (r = n.key) == null ? void 0 : r.one) == null ? void 0 : o.metadata) == null ? void 0 : i.opts) != null && d.includeThrottled) || !!((f = (c = (l = (u = n.key) == null ? void 0 : u.all) == null ? void 0 : l.metadata) == null ? void 0 : c.opts) != null && f.includeThrottled);
|
|
9
|
+
return e.bypass_global_group_limit ? "returned" : e.key === s.resolved ? t.throttled && !a ? "throttled" : "returned" : "queried";
|
|
10
|
+
}, h = (e, t, s, n) => {
|
|
11
|
+
var o, i, d, u;
|
|
12
|
+
const a = !!((u = (d = (i = (o = n.type) == null ? void 0 : o.one) == null ? void 0 : i.metadata) == null ? void 0 : d.opts) != null && u.includeThrottled), r = n.type.one;
|
|
13
|
+
if (r.size === 0)
|
|
14
14
|
return "queried";
|
|
15
15
|
if (e.bypass_global_group_limit) {
|
|
16
|
-
const
|
|
17
|
-
return e.key !==
|
|
16
|
+
const c = [...r.values()][0];
|
|
17
|
+
return e.key !== c.key ? "queried" : "returned";
|
|
18
18
|
}
|
|
19
|
-
return e.key === s.resolved ? t.throttled && !
|
|
20
|
-
}, G = (e, t, s,
|
|
21
|
-
var
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
19
|
+
return e.key === s.resolved ? t.throttled && !a ? "throttled" : "returned" : "queried";
|
|
20
|
+
}, G = (e, t, s, n) => {
|
|
21
|
+
var u, l, c, f;
|
|
22
|
+
const a = n.type.all;
|
|
23
|
+
if (a.size === 0)
|
|
24
24
|
return "queried";
|
|
25
|
-
const
|
|
26
|
-
return (f = (
|
|
27
|
-
}, S = (e, t, s,
|
|
28
|
-
var
|
|
29
|
-
if (
|
|
30
|
-
return v(e, t, s,
|
|
31
|
-
if ((
|
|
32
|
-
return G(e, t, s,
|
|
33
|
-
if ((
|
|
34
|
-
return h(e, t, s,
|
|
25
|
+
const r = [...a.values()], o = r[0], i = g(r);
|
|
26
|
+
return (f = (c = (l = (u = n.type) == null ? void 0 : u.all) == null ? void 0 : l.metadata) == null ? void 0 : c.opts) != null && f.includeThrottled ? i[e.key] ? "returned" : "queried" : (o.bypass_global_group_limit || o.key === s.resolved) && i[e.key] ? t.throttled ? e.bypass_global_group_limit ? "returned" : "throttled" : "returned" : "queried";
|
|
27
|
+
}, S = (e, t, s, n) => {
|
|
28
|
+
var a, r;
|
|
29
|
+
if (n.key)
|
|
30
|
+
return v(e, t, s, n);
|
|
31
|
+
if ((a = n.type) != null && a.all)
|
|
32
|
+
return G(e, t, s, n);
|
|
33
|
+
if ((r = n.type) != null && r.one)
|
|
34
|
+
return h(e, t, s, n);
|
|
35
35
|
}, T = (e, t, s) => {
|
|
36
36
|
if (!s || s.status === "open")
|
|
37
37
|
return {
|
|
38
38
|
status: void 0
|
|
39
39
|
};
|
|
40
|
-
const
|
|
40
|
+
const n = {
|
|
41
41
|
key: (s.results.key || {})[e.key],
|
|
42
42
|
type: (s.results.type || {})[e.type]
|
|
43
43
|
};
|
|
44
|
-
if (!!!(
|
|
44
|
+
if (!!!(n.key || n.type))
|
|
45
45
|
return {
|
|
46
46
|
status: void 0
|
|
47
47
|
};
|
|
48
|
-
const
|
|
49
|
-
return
|
|
50
|
-
status:
|
|
51
|
-
query:
|
|
48
|
+
const r = S(e, t, s, n);
|
|
49
|
+
return r ? {
|
|
50
|
+
status: r,
|
|
51
|
+
query: n
|
|
52
52
|
} : {
|
|
53
53
|
status: void 0
|
|
54
54
|
};
|
|
55
|
-
},
|
|
55
|
+
}, q = (e, t) => {
|
|
56
56
|
const s = {};
|
|
57
57
|
return ((t == null ? void 0 : t.reason) === "not_in_target_audience" || (t == null ? void 0 : t.reason) === "target_conditions_not_met") && (s.targetable = {
|
|
58
58
|
status: !1,
|
|
59
59
|
reason: t.reason,
|
|
60
60
|
message: t.message
|
|
61
|
-
}), ((t == null ? void 0 : t.reason) === "marked_as_archived" || (e.steps || []).every((
|
|
61
|
+
}), ((t == null ? void 0 : t.reason) === "marked_as_archived" || (e.steps || []).every((n) => !!n.message.archived_at)) && (s.archived = {
|
|
62
62
|
status: !0
|
|
63
63
|
}), (t == null ? void 0 : t.reason) === "guide_not_active" && (s.active = {
|
|
64
64
|
status: !1
|
|
65
65
|
}), s;
|
|
66
|
-
},
|
|
66
|
+
}, k = ({
|
|
67
67
|
active: e,
|
|
68
68
|
targetable: t,
|
|
69
69
|
archived: s
|
|
70
|
-
}) => !(!e.status || !t.status || s.status),
|
|
70
|
+
}) => !(!e.status || !t.status || s.status), w = ({
|
|
71
71
|
activatable: e,
|
|
72
72
|
selectable: t
|
|
73
|
-
}) => !(!e.status || !t.status),
|
|
73
|
+
}) => !(!e.status || !t.status), m = (e, t, s) => {
|
|
74
74
|
const {
|
|
75
|
-
ineligibleGuides:
|
|
76
|
-
location:
|
|
77
|
-
} = t,
|
|
75
|
+
ineligibleGuides: n,
|
|
76
|
+
location: a
|
|
77
|
+
} = t, r = n[e.key], o = q(e, r), i = {
|
|
78
78
|
// isEligible:
|
|
79
|
-
active: (
|
|
79
|
+
active: (o == null ? void 0 : o.active) || {
|
|
80
80
|
status: !0
|
|
81
81
|
},
|
|
82
|
-
targetable: (
|
|
82
|
+
targetable: (o == null ? void 0 : o.targetable) || {
|
|
83
83
|
status: !0
|
|
84
84
|
},
|
|
85
|
-
archived: (
|
|
85
|
+
archived: (o == null ? void 0 : o.archived) || {
|
|
86
86
|
status: !1
|
|
87
87
|
},
|
|
88
88
|
// isQualified:
|
|
89
89
|
activatable: {
|
|
90
|
-
status: y(e,
|
|
90
|
+
status: y(e, a)
|
|
91
91
|
},
|
|
92
92
|
selectable: T(e, t, s)
|
|
93
|
-
},
|
|
94
|
-
...
|
|
95
|
-
isEligible:
|
|
96
|
-
isQualified:
|
|
93
|
+
}, d = {
|
|
94
|
+
...i,
|
|
95
|
+
isEligible: k(i),
|
|
96
|
+
isQualified: w(i)
|
|
97
97
|
};
|
|
98
98
|
return {
|
|
99
99
|
...e,
|
|
100
|
-
annotation:
|
|
100
|
+
annotation: d
|
|
101
101
|
};
|
|
102
|
-
},
|
|
102
|
+
}, B = (e) => ({
|
|
103
103
|
__typename: "UnknownGuide",
|
|
104
104
|
key: e,
|
|
105
105
|
active: !1,
|
|
@@ -111,41 +111,55 @@ const g = (e) => e.reduce((t, s) => ({
|
|
|
111
111
|
status: void 0
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
|
-
}),
|
|
115
|
-
var
|
|
114
|
+
}), R = (e) => {
|
|
115
|
+
var d;
|
|
116
116
|
const {
|
|
117
|
-
client:
|
|
118
|
-
} = _(),
|
|
119
|
-
const
|
|
117
|
+
client: t
|
|
118
|
+
} = _(), s = b(t.store, (u) => {
|
|
119
|
+
const l = p(u);
|
|
120
120
|
return {
|
|
121
|
-
location:
|
|
122
|
-
guides:
|
|
123
|
-
guideGroups:
|
|
124
|
-
ineligibleGuides:
|
|
125
|
-
debug:
|
|
126
|
-
counter:
|
|
127
|
-
|
|
121
|
+
location: u.location,
|
|
122
|
+
guides: u.guides,
|
|
123
|
+
guideGroups: u.guideGroups,
|
|
124
|
+
ineligibleGuides: u.ineligibleGuides,
|
|
125
|
+
debug: u.debug,
|
|
126
|
+
counter: u.counter,
|
|
127
|
+
queries: u.queries,
|
|
128
|
+
throttled: l
|
|
128
129
|
};
|
|
129
130
|
});
|
|
130
|
-
if (!((
|
|
131
|
+
if (!((d = s.debug) != null && d.debugging))
|
|
131
132
|
return;
|
|
132
|
-
const
|
|
133
|
-
if (!
|
|
133
|
+
const n = Object.entries(s.queries)[0];
|
|
134
|
+
if (!n || n[1].status === "loading")
|
|
134
135
|
return {
|
|
136
|
+
status: "error",
|
|
137
|
+
error: "no_guides_fetched",
|
|
138
|
+
message: "Loading..."
|
|
139
|
+
};
|
|
140
|
+
const a = s.guideGroups[0];
|
|
141
|
+
if (!a)
|
|
142
|
+
return {
|
|
143
|
+
status: "error",
|
|
135
144
|
error: "no_guide_group",
|
|
136
|
-
|
|
145
|
+
message: "No guide group found"
|
|
137
146
|
};
|
|
138
|
-
const r =
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
147
|
+
const r = t.getStage(), o = a.display_sequence.map((u) => {
|
|
148
|
+
const l = s.guides[u];
|
|
149
|
+
return l ? m(l, s, r) : B(u);
|
|
150
|
+
}), i = Object.keys(e.focusedGuideKeys || {})[0];
|
|
151
|
+
return (r == null ? void 0 : r.status) === "closed" && i && !o.find((l) => l.key === i && l.annotation.selectable.status) ? {
|
|
152
|
+
status: "error",
|
|
153
|
+
error: "no_guide_present",
|
|
154
|
+
message: `No component that can render \`${i}\` was found`
|
|
155
|
+
} : {
|
|
156
|
+
status: "ok",
|
|
157
|
+
guides: o
|
|
144
158
|
};
|
|
145
|
-
},
|
|
159
|
+
}, U = (e) => typeof e == "object" && e !== null && "__typename" in e && e.__typename === "UnknownGuide";
|
|
146
160
|
export {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
161
|
+
U as isUnknownGuide,
|
|
162
|
+
w as resolveIsQualified,
|
|
163
|
+
R as useInspectGuideClientStore
|
|
150
164
|
};
|
|
151
165
|
//# sourceMappingURL=useInspectGuideClientStore.mjs.map
|