@fastr-pro/global-header 1.0.1 → 1.0.3
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/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -2
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../src/components/FasterProLogo.jsx","../node_modules/cn/dist/tables.js","../node_modules/cn/dist/engine.js","../node_modules/cn/dist/index.js","../src/components/ui/dropdown-menu.jsx","../src/components/ui/navigation-menu.jsx","../src/components/ui/popover.jsx","../src/constants/categories.js","../src/config/defaultConfig.js","../src/utils/renderIcon.jsx","../src/utils/url.js","../src/components/GlobalMegaMenu.jsx","../src/components/GlobalHeader.jsx","../src/index.js"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport const FasterProLogo = ({ className = 'h-9 w-auto cursor-pointer', isDarkMode, theme, ...props }) => {\n const [systemDark, setSystemDark] = useState(false);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const checkDark = () => {\n const isDarkClass =\n document.documentElement.classList.contains('dark') || document.body.classList.contains('dark');\n setSystemDark(isDarkClass);\n };\n\n checkDark();\n\n const observer = new MutationObserver(checkDark);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n\n return () => observer.disconnect();\n }, []);\n\n const isDark =\n isDarkMode !== undefined ? Boolean(isDarkMode) : theme === 'dark' ? true : theme === 'light' ? false : systemDark;\n\n const mainFill = isDark ? '#F5F7FA' : '#17212B';\n\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1000 500\" className={className} {...props}>\n <defs>\n <linearGradient id=\"faster-blue\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0%\" stopColor=\"#1455E8\" />\n <stop offset=\"55%\" stopColor=\"#087FF5\" />\n <stop offset=\"100%\" stopColor=\"#08B9E8\" />\n </linearGradient>\n </defs>\n\n <rect x=\"170\" y=\"120\" width=\"120\" height=\"14\" rx=\"7\" fill=\"#087FF5\" />\n <rect x=\"130\" y=\"158\" width=\"170\" height=\"14\" rx=\"7\" fill=\"#5BB5FA\" />\n <rect x=\"160\" y=\"196\" width=\"130\" height=\"14\" rx=\"7\" fill=\"#087FF5\" />\n\n <path\n d=\"M360 80 C380 48 410 32 448 32 H680 L650 78\n C638 97 616 108 585 108 H330 Z\"\n fill=\"url(#faster-blue)\"\n />\n\n <path\n d=\"M410 125 H635 L605 174 C594 191 576 199 552 199\n H492 L450 305 C439 333 418 350 385 350 H325\n L400 165 C403 151 406 137 410 125 Z\"\n fill={mainFill}\n />\n\n <path d=\"M465 225 H565 L540 270 H447 Z\" fill={mainFill} />\n\n <text\n x=\"500\"\n y=\"440\"\n textAnchor=\"middle\"\n fontFamily=\"Arial, Helvetica, sans-serif\"\n fontSize=\"130\"\n fontWeight=\"900\"\n fontStyle=\"italic\"\n letterSpacing=\"-3\"\n >\n <tspan fill={mainFill}>FASTER</tspan>\n <tspan fill=\"url(#faster-blue)\"> PRO</tspan>\n </text>\n </svg>\n );\n};\n\nexport default FasterProLogo;\n","//#region src/tables.generated.ts\nconst P = 48;\nconst U = (s, o = 0) => {\n\tconst out = new Int32Array(s.length);\n\tfor (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i) - P - o;\n\treturn out;\n};\nconst PS = (counts) => {\n\tconst out = new Int32Array(counts.length + 1);\n\tfor (let i = 0; i < counts.length; i++) out[i + 1] = out[i] + counts[i];\n\treturn out;\n};\nconst DZ = (s) => {\n\tconst out = new Int32Array(s.length);\n\tlet a = 0;\n\tfor (let i = 0; i < s.length; i++) {\n\t\tconst z = s.charCodeAt(i) - P;\n\t\ta += z >>> 1 ^ -(z & 1);\n\t\tout[i] = a;\n\t}\n\treturn out;\n};\nconst GROUP_COUNT = 384;\nconst customValidatorNames = [];\nconst edgeStart = PS(U(\"E0500002005282000000002000150000020021820000011200000003022202000300004200120000200420001200021200301200010400162000010000220021010:2192001200220012000220012000200200200400010200040000000000400200108200110100000022010313000162002000020020012020080213000228200000000082000000000120002000120020020040101020300130001001010\"));\nconst labelStart = PS(U(\":11111111211111119311546544411119731869:671397415686432441111111111161114151214313433415:78311132233313187211117221449443411141111151152226611131111112212518142224214215421421542142424242516171151615616347111111111197911327451111111111111111111113134714133513411111311111111111111111111112444411111342312715245411117:3\"));\nconst labelText = \"@containerabcdefghinlmoprstunderlineviawzccentlignnimatespectuto-colsrowsaglorightnessckdrop-sisbcontrastfiltergrayscalehue-rotateinvertopacityslurrightnessaturateepia-coniclinearpositionradialsizeockurrderttom-belrstxyespacing-xyaretoursorlnt-umnsendspantartainentrasteividerop-shadowurationcorationlay-xyasendillexontromlter-featuresstretchapr-xyayscaleidow-colsrowsue-rotatedentlinesetvert-beringsxyeshadoweiadingftnest-clamp-imageabein-lrstxyskx--b-coniclpositionrsizet-x-y-fromto-fromto-inearfromto-fromto-adialfromto-fromtofromtofromtofromtoblockhinlinew-screenesblockhinlinewbjectpacityrutlinederigin-offsetbelrstxyesrspective-originaceholderioghtng-offsettateundedw-xyz-belrstlreseslr-endspantartaturatecepiahizekewpace-taleroll-xyz-barmpbelrstxyesbelrstxyes-thumbrackadowrink-xyxyartrokeabextora-shadowpckingnsformitionlate-xyz-offsetill-changeoom\";\nconst edgeTarget = (() => {\n\tconst N = edgeStart.length - 1;\n\tconst sizes = new Int32Array(N);\n\tfor (let i = N - 1; i >= 0; i--) {\n\t\tlet s = 1;\n\t\tlet c = i + 1;\n\t\tfor (let k = edgeStart[i]; k < edgeStart[i + 1]; k++) {\n\t\t\ts += sizes[c];\n\t\t\tc += sizes[c];\n\t\t}\n\t\tsizes[i] = s;\n\t}\n\tconst out = new Int32Array(edgeStart[N]);\n\tlet e = 0;\n\tfor (let i = 0; i < N; i++) {\n\t\tlet c = i + 1;\n\t\tfor (let k = edgeStart[i]; k < edgeStart[i + 1]; k++) {\n\t\t\tout[e++] = c;\n\t\t\tc += sizes[c];\n\t\t}\n\t}\n\treturn out;\n})();\nconst nodeGroup = U(\"02000000000000900<=0?000B000F00F00ŏI0J0LNPRTVX0000]_a00000000000000000000000rst0000000zŏ00000000000
ŏ0000000ŏ00000000000000000000000000000000000000000000000000000000000000Ë000000000000000000000Þ000000000000000000ð0000000ø0ùúûüýþÿĀāĂ㥹Ć000000000000000000000000000000000000000000ħ0ĨĪ00000000000000000000ļĽ00000Ŭ000000\", 1);\nconst vlistPat = PS(U(\"123333359346463635126536711576\"));\nconst vlistOps = U(\"93203242332583253248325D>E?F@03263243255B:032523853:0325B:8GA032542H<C=12727B:0328432553;D>E?3257D>032585:0325B:;0328B:032\");\nconst vlistRef = U(\"012113445661666666789111:5;;;;;;;;444;;;:62999<1161=62>>?61:21@ABCD4446996:64E:::;:?::64:F114GHHIHHHHIHH1HH1HH1HHHHHH::EEJ4444::EE4444441691;644444114244444:;K6666555555555555555999666664444444444444444444444226?6:66644L9M?D:111::::6DE199\");\nconst vlistGroup = DZ(\"020200202020020020020020020020200200200200200200200002020202001003040106000200200200200200200200200200200200200200200200200200200200200200200200200200200200020020020020020020002020200202002002002002002002002002002020002002020020200220200200200200200200200200200200020020020000200020002000200200200020020020002000200200200020020202002020202000200200020022000200200020020002002000200220002002000200W0Z00020020002002020002002000200g0j0002002000200200020020002002000200200020020002000200002000002002002002002000200020000200002002002002002002002020020020200200200200200200200200202020020020020020020020020002002002020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020002002002002002002000200200200200200200200200200020202020002000200020002002002002000020200200\");\nconst nodeVlist = (() => {\n\tconst out = (/* @__PURE__ */ new Int32Array(319)).fill(-1);\n\tconst A = DZ(\"02422242:222222242224222242442222222422222244442242226224222426222422442462222422622222222626222462242622422622422424242422222222422222222242422222222222222222622442224222222222222224424442262222222222222222222226224222424242422224422422422222\");\n\tconst V = DZ(\"02222222222222222222202222222222222222222222221422222222222222222222222222222222222Y\\\\222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221422222222222222222222222222222222222222Ŀł222222222222222222\");\n\tfor (let i = 0; i < A.length; i++) out[A[i]] = V[i];\n\treturn out;\n})();\nconst SETS = \"container |break-after- all auto avoid avoid-page column left page right|break-before- all auto avoid avoid-page column left page right|break-inside-a uto void void-column void-page|box-decoration- clone slice|box- border content| contents flow-root hidden table table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group| not-sr-only sr-only|float- end left none right start|clear- both end left none right start|isolat e ion-auto|overflow- auto clip hidden scroll visible|overflow-x- auto clip hidden scroll visible|overflow-y- auto clip hidden scroll visible|overscroll- auto contain none|overscroll-x- auto contain none|overscroll-y- auto contain none| absolute fixed relative static sticky| collapse invisible visible|justify- around baseline between center center-safe end end-safe evenly normal start stretch|justify-items- center center-safe end end-safe normal start stretch|justify-self- auto center center-safe end end-safe start stretch|items- baseline baseline-last center center-safe end end-safe start stretch|self- auto baseline baseline-last center center-safe end end-safe start stretch|place-content- around baseline between center center-safe end end-safe evenly start stretch|place-items- baseline center center-safe end end-safe start stretch|place-self- auto center center-safe end end-safe start stretch| antialiased subpixel-antialiased| italic not-italic|normal-nums |ordinal |slashed-zero | lining-nums oldstyle-nums| proportional-nums tabular-nums| diagonal-fractions stacked-fractions| no-underline overline| capitalize lowercase normal-case uppercase|truncate |whitespace- break-spaces normal nowrap pre pre-line pre-wrap|break- all keep normal words|wrap- anywhere break-word normal|hyphens- auto manual none|mix-blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay plus-darker plus-lighter saturation screen soft-light|table- auto fixed|caption- bottom top|backface- hidden visible|appearance- auto none|scheme- dark light light-dark normal only-dark only-light|field-sizing- content fixed|pointer-events- auto none|resize -none -x -y|snap- align-none center end start|snap- always normal|snap- both none x y|snap- mandatory proximity|touch- auto manipulation none|touch-pan- left right x|touch-pan- down up y|touch-pinch-zoom |select- all auto none text|forced-color-adjust- auto none| normal size| baseline bottom middle sub super text-bottom text-top top| bounce none ping pulse spin| auto square video| auto fr max min px|none | auto full px| fixed local scroll|clip- border content padding text|origin- border content padding| bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| no-repeat repeat repeat-round repeat-space repeat-x repeat-y| auto contain cover| gradient-to-b gradient-to-bl gradient-to-br gradient-to-l gradient-to-r gradient-to-t gradient-to-tl gradient-to-tr none|blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay saturation screen soft-light|to- b bl br l r t tl tr| auto dvh fit full lh lvh max min px screen svh| dashed dotted double hidden none solid| collapse separate|px |auto |full | content none strict| inline-size size|layout |paint |style | around baseline between center center-safe end end-safe evenly normal start stretch| alias all-scroll auto cell col-resize context-menu copy crosshair default e-resize ew-resize grab grabbing help move n-resize ne-resize nesw-resize no-drop none not-allowed ns-resize nw-resize nwse-resize pointer progress row-resize s-resize se-resize sw-resize text vertical-text w-resize wait zoom-in zoom-out| dashed dotted double solid wavy| auto from-font|reverse |initial | in in-out initial linear out| col col-reverse row row-reverse| nowrap wrap wrap-reverse| auto initial none| black bold extrabold extralight light medium normal semibold thin| condensed expanded extra-condensed extra-expanded normal semi-condensed semi-expanded ultra-condensed ultra-expanded|flow- col col-dense dense row row-dense| none subgrid| auto dvh dvw fit full lh lvh lvw max min px screen svh svw| block flex grid table| auto dvw fit full lvw max min px screen svw| loose none normal px relaxed snug tight|through |item | inside outside| decimal disc none| auto px| clip-border clip-content clip-fill clip-padding clip-stroke clip-view no-clip| add exclude intersect subtract| alpha luminance match|origin- border content fill padding stroke view|type- alpha luminance| circle ellipse| closest-corner closest-side farthest-corner farthest-side|at- bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| dvh fit full lh lvh max min none px screen svh| auto dvh dvw fit full lh lvh lvw max min none px screen svh svw| dvw fit full lvw max min none px screen svw| auto dvh dvw fit full lvh lvw max min none prose px svh svw| auto dvh dvw fit full lvh lvw max min none px screen svh svw| contain cover fill none scale-down| first last none| distant dramatic midrange near none normal|inset | full none|3d | auto smooth|gutter- auto both stable| auto none thin| inner none| auto dvh dvw fit full lvh lvw max min px svh svw|base | center end justify left right start| clip ellipsis| balance nowrap pretty wrap| normal tight tighter wide wider widest| cpu gpu none| 3d flat| all colors none opacity shadow transform| discrete normal| full px| auto dvh dvw fit full lvh lvw max min px screen svh svw| auto contents scroll transform\".split(\"|\").map((s) => {\n\tconst tails = s.split(\" \");\n\tconst prefix = tails.shift();\n\tfor (let i = 0; i < tails.length; i++) tails[i] = prefix + tails[i];\n\treturn tails;\n});\nconst AA = DZ(\"0000000000000000000000000000000000000000000000000000000000000262242:6@200000006:240B428:4422400002046044222426220026642642462026224222824220022400000000\\\\00N222422242222222224062242222222422226264222422222222222222442804222422222222222222222222220<4<0204260002444020204224422\");\nconst AG = DZ(\"ɠ222222222222222222222222222222222222222222222222222222222222˕4222226>ʶ22ʷʺʷ2ʸʷ42ʴ2ʓ22>621422ɶ222ɹɼɷɺɷɺ22ɱ42222ɨ2ɧ26622ɘɓ244ƸƵ222]d24242ǖǓƚÄȫ2263ȨȥȨ2222222ǣ222222222222222222ǂƽ2ƾƵ2222222422222ƜƑ22222222222222222222144Ŧţ22Ţş222222222222222222222ĸ2ı68ĦģĦɡŰ4Ġ«®ĝ822ĔđĔ2ē2222622\");\nconst AS = DZ(\"02222222222222222222222222222222222222222222222222222222222222222202022222222222EH2200IL021042222Y\\\\222IL0cf2e10j2222U00X202[^2y0000120|{~22
:22|22222222222G000qOVI00000}2>40000B00000I¨©000¬00000000000000021M®00°000000000000000000000222HGHa1º222¿2À2222ÉÌ000°2±\");\nconst litAnchor = /* @__PURE__ */ new Int32Array(995);\nconst litGroup = /* @__PURE__ */ new Int32Array(995);\nconst litPool = /* @__PURE__ */ new Int32Array(995);\nlet poolText = \"\";\nconst poolOffsets = /* @__PURE__ */ new Int32Array(1038);\n{\n\tconst tailRef = /* @__PURE__ */ new Map();\n\tlet nextRef = 0;\n\tlet e = 0;\n\tfor (let i = 0; i < AA.length; i++) for (const tail of SETS[AS[i]]) {\n\t\tlet r = tailRef.get(tail);\n\t\tif (r === void 0) {\n\t\t\tr = nextRef++;\n\t\t\ttailRef.set(tail, r);\n\t\t\tpoolOffsets[r * 2] = poolText.length;\n\t\t\tpoolOffsets[r * 2 + 1] = tail.length;\n\t\t\tpoolText += tail;\n\t\t}\n\t\tlitAnchor[e] = AA[i];\n\t\tlitGroup[e] = AG[i];\n\t\tlitPool[e] = r;\n\t\te++;\n\t}\n}\nconst adjGid = DZ(\"0b2N:222@R>F@286¦2@H2D266226FB22B2>BD\\\\6N22222Z222D222p\");\nconst adjStart = PS(U(\"1::24444432:442:44:44>222222:44:4421322511111311111114\"));\nconst adjTgt = DZ(\"24A;33N=C@H4A;33N=C@<27;83:;8393NQ:3NQʰ222ˉºŴŽ2R2=18cƴÅŇ=cĞÛC1ƈǝȈ:ħ25=11D3A@4=<1;1DEr25;11B3?<6;:371BCn9@7=<8192>2E121@9@EHE@9>2T25511<398454131<=V25511<398454131<=ƧNž2Đå242L222290000f22500ɛ000ǘ222\");\nconst patGid = U(\"ij\");\nconst patTgt = U(\"\");\nconst postfixLookupGroups = U(\"1\");\nconst orderSensitiveModifiers = \"* ** after backdrop before details-content file first-letter first-line marker placeholder selection\";\nvar tables_generated_default = {\n\tGROUP_COUNT,\n\tcustomValidatorNames,\n\tedgeStart,\n\tlabelStart,\n\tlabelText,\n\tedgeTarget,\n\tnodeGroup,\n\tnodeVlist,\n\tvlistPat,\n\tvlistOps,\n\tvlistRef,\n\tvlistGroup,\n\tlitAnchor,\n\tlitGroup,\n\tlitPool,\n\tpoolOffsets,\n\tpoolText,\n\tadjGid,\n\tadjStart,\n\tadjTgt,\n\tpatGid,\n\tpatTgt,\n\tpostfixLookupGroups,\n\torderSensitiveModifiers\n};\n\n//#endregion\nexport { tables_generated_default as default };","//#region src/engine.ts\nconst IS_JSC = \"line\" in /* @__PURE__ */ new Error();\nconst EXTERNAL = -1;\nconst DEAD = -1;\nconst fnv = (str, s, e) => {\n\tlet h = 2166136261;\n\tfor (let p = s; p < e; p++) h = Math.imul(h ^ str.charCodeAt(p), 16777619);\n\treturn h;\n};\nconst spanHash = (str, s, e) => {\n\tconst len = e - s;\n\tlet h = Math.imul(len, 2654435761) ^ str.charCodeAt(s);\n\tif (len > 3) {\n\t\tconst q = len >> 2;\n\t\tconst m = len >> 1;\n\t\th = Math.imul(h ^ str.charCodeAt(s + 1) << 8 ^ str.charCodeAt(s + 2) << 16 ^ str.charCodeAt(s + q), 2246822507);\n\t\th = Math.imul(h ^ str.charCodeAt(s + m) << 8 ^ str.charCodeAt(s + m + q) << 16 ^ str.charCodeAt(e - 3), 3266489909);\n\t\th ^= str.charCodeAt(e - 2) << 8 ^ str.charCodeAt(e - 1) << 16;\n\t\tfor (let p = s + 3, q = e - 4; p < s + 8 && p < q; p++, q--) h = Math.imul(h ^ str.charCodeAt(p) ^ str.charCodeAt(q) << 8, 16777619);\n\t}\n\treturn h ^ h >>> 15 | 0;\n};\nconst createEngine = (T, validatorImpls, options = {}) => {\n\tconst { GROUP_COUNT, edgeStart, labelStart, labelText, edgeTarget, nodeGroup, nodeVlist, vlistPat, vlistOps, vlistRef, vlistGroup, litAnchor, litGroup, litPool, poolOffsets, poolText, adjGid, adjStart, adjTgt, patGid, patTgt, postfixLookupGroups, customValidatorNames, orderSensitiveModifiers } = T;\n\tconst adjRow = new Int32Array(GROUP_COUNT).fill(-1);\n\tfor (let i = 0; i < adjGid.length; i++) adjRow[adjGid[i]] = i;\n\tlet maxAdj = 0;\n\tfor (let r = 0; r + 1 < adjStart.length; r++) {\n\t\tconst n = adjStart[r + 1] - adjStart[r];\n\t\tif (n > maxAdj) maxAdj = n;\n\t}\n\tlet CLAIM_PER_TOKEN = 32;\n\twhile (CLAIM_PER_TOKEN < 2 * (1 + maxAdj + patGid.length)) CLAIM_PER_TOKEN <<= 1;\n\tconst vgStart = new Int32Array(vlistRef.length + 1);\n\tfor (let l = 0; l < vlistRef.length; l++) vgStart[l + 1] = vgStart[l] + vlistPat[vlistRef[l] + 1] - vlistPat[vlistRef[l]];\n\tconst postfixLookupSet = new Uint8Array(GROUP_COUNT);\n\tfor (let i = 0; i < postfixLookupGroups.length; i++) postfixLookupSet[postfixLookupGroups[i]] = 1;\n\tconst nodeCount = edgeStart.length - 1;\n\tconst nodeHasLit = new Uint8Array(nodeCount);\n\tlet litMaxLen = 0;\n\tlet litNoArb = true;\n\tfor (let i = 0; i < litAnchor.length; i++) {\n\t\tnodeHasLit[litAnchor[i]] = 1;\n\t\tconst len = poolOffsets[litPool[i] * 2 + 1];\n\t\tif (len > litMaxLen) litMaxLen = len;\n\t\tconst c0 = poolText.charCodeAt(poolOffsets[litPool[i] * 2]);\n\t\tif (c0 === 91 || c0 === 40) litNoArb = false;\n\t}\n\tlet LIT_SIZE = 1;\n\twhile (LIT_SIZE < litAnchor.length * 2) LIT_SIZE <<= 1;\n\tconst litTable = new Int32Array(LIT_SIZE).fill(-1);\n\tfor (let i = 0; i < litAnchor.length; i++) {\n\t\tconst off = poolOffsets[litPool[i] * 2];\n\t\tlet idx = (fnv(poolText, off, off + poolOffsets[litPool[i] * 2 + 1]) ^ Math.imul(litAnchor[i], 2654435761) | 0) & LIT_SIZE - 1;\n\t\twhile (litTable[idx] !== -1) idx = idx + 1 & LIT_SIZE - 1;\n\t\tlitTable[idx] = i;\n\t}\n\tconst litProbe = (anchor, input, s, e) => {\n\t\tlet idx = (fnv(input, s, e) ^ Math.imul(anchor, 2654435761) | 0) & LIT_SIZE - 1;\n\t\tconst len = e - s;\n\t\tfor (;;) {\n\t\t\tconst entry = litTable[idx];\n\t\t\tif (entry === -1) return -1;\n\t\t\tif (litAnchor[entry] === anchor && poolOffsets[litPool[entry] * 2 + 1] === len) {\n\t\t\t\tconst off = poolOffsets[litPool[entry] * 2];\n\t\t\t\tlet ok = true;\n\t\t\t\tfor (let k = 0; k < len; k++) if (poolText.charCodeAt(off + k) !== input.charCodeAt(s + k)) {\n\t\t\t\t\tok = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (ok) return litGroup[entry];\n\t\t\t}\n\t\t\tidx = idx + 1 & LIT_SIZE - 1;\n\t\t}\n\t};\n\tconst cacheSize = options.cacheSize ?? 8192;\n\tconst RAW_PREFIX = options.prefix ?? T.prefix ?? \"\";\n\tconst FULL_PREFIX = RAW_PREFIX === \"\" ? \"\" : RAW_PREFIX + \":\";\n\tconst FPL = FULL_PREFIX.length;\n\tconst vCustom = (customValidatorNames ?? []).map((name) => {\n\t\tconst fn = validatorImpls && validatorImpls[name];\n\t\tif (!fn) throw new Error(\"cn: missing validator \" + name);\n\t\treturn fn;\n\t});\n\tconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\n\tconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n\tconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\n\tconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\n\tlet aKind = 0;\n\tlet aLabelS = -1;\n\tlet aLabelE = -1;\n\tlet aValS = -1;\n\tlet aValE = -1;\n\tconst isWordCode = (c) => c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c === 95;\n\tconst isUniWS = (c) => /\\s/.test(String.fromCharCode(c));\n\tconst analyzeArb = (input, s, e) => {\n\t\taKind = 0;\n\t\taLabelS = -1;\n\t\tif (e - s < 3) return;\n\t\tconst c0 = input.charCodeAt(s);\n\t\tconst cl = input.charCodeAt(e - 1);\n\t\tif (c0 === 91 && cl === 93) aKind = 1;\n\t\telse if (c0 === 40 && cl === 41) aKind = 2;\n\t\telse return;\n\t\taValS = s + 1;\n\t\taValE = e - 1;\n\t\tlet p = s + 1;\n\t\tif (isWordCode(input.charCodeAt(p))) {\n\t\t\tp++;\n\t\t\twhile (p < e - 1) {\n\t\t\t\tconst c = input.charCodeAt(p);\n\t\t\t\tif (!isWordCode(c) && c !== 45) break;\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif (p < e - 2 && input.charCodeAt(p) === 58) {\n\t\t\t\taLabelS = s + 1;\n\t\t\t\taLabelE = p;\n\t\t\t\taValS = p + 1;\n\t\t\t}\n\t\t}\n\t};\n\tconst spanEq = (input, s, e, str) => {\n\t\tif (e - s !== str.length) return false;\n\t\tfor (let i = 0; i < str.length; i++) if (input.charCodeAt(s + i) !== str.charCodeAt(i)) return false;\n\t\treturn true;\n\t};\n\tconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\n\tconst tshirtRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\n\tconst isNumStr = (v) => !!v && !Number.isNaN(Number(v));\n\tconst spanIsNamedContainerQuery = (input, s, e) => {\n\t\tif (e - s < 11 || !spanEq(input, s, s + 10, \"@container\")) return false;\n\t\tif (input.charCodeAt(s + 10) === 47) return e - s >= 12;\n\t\tconst c11 = input.charCodeAt(s + 11);\n\t\treturn c11 === 115 && e - s >= 17 && spanEq(input, s + 10, s + 16, \"-size/\") || c11 === 110 && e - s >= 19 && spanEq(input, s + 10, s + 18, \"-normal/\");\n\t};\n\tconst VKIND = [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t2,\n\t\t2,\n\t\t2,\n\t\t2,\n\t\t2,\n\t\t2,\n\t\t2\n\t];\n\tconst VLABELS = \"length|number|number weight|family-name|position percentage|length size bg-size|image url|shadow|length|family-name|position percentage|length size bg-size|image url|shadow|number weight\".split(\"|\").map((s) => s.split(\" \"));\n\tconst VFALL = [\n\t\t2,\n\t\t3,\n\t\t1,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t4,\n\t\t5,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t1,\n\t\t1\n\t];\n\tconst runValidator = (op, input, s, e) => {\n\t\tif (op >= 10) {\n\t\t\tif (op >= 25) return vCustom[op - 25](input.slice(s, e));\n\t\t\tconst i = op - 10;\n\t\t\tif (aKind !== VKIND[i]) return false;\n\t\t\tif (aLabelS >= 0) {\n\t\t\t\tfor (const L of VLABELS[i]) if (spanEq(input, aLabelS, aLabelE, L)) return true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tswitch (VFALL[i]) {\n\t\t\t\tcase 0: return false;\n\t\t\t\tcase 1: return true;\n\t\t\t\tcase 2: {\n\t\t\t\t\tconst v = input.slice(aValS, aValE);\n\t\t\t\t\treturn lengthUnitRegex.test(v) && !colorFunctionRegex.test(v);\n\t\t\t\t}\n\t\t\t\tcase 3: return isNumStr(input.slice(aValS, aValE));\n\t\t\t\tcase 4: return imageRegex.test(input.slice(aValS, aValE));\n\t\t\t\tdefault: return shadowRegex.test(input.slice(aValS, aValE));\n\t\t\t}\n\t\t}\n\t\tswitch (op) {\n\t\t\tcase 0: return true;\n\t\t\tcase 1: return aKind === 0;\n\t\t\tcase 2: return aKind === 1;\n\t\t\tcase 3: return aKind === 2;\n\t\t\tcase 4: return fractionRegex.test(input.slice(s, e));\n\t\t\tcase 5: return isNumStr(input.slice(s, e));\n\t\t\tcase 6: {\n\t\t\t\tconst v = input.slice(s, e);\n\t\t\t\treturn !!v && Number.isInteger(Number(v));\n\t\t\t}\n\t\t\tcase 7: return e > s && input.charCodeAt(e - 1) === 37 && isNumStr(input.slice(s, e - 1));\n\t\t\tcase 8: return tshirtRegex.test(input.slice(s, e));\n\t\t\tdefault: return spanIsNamedContainerQuery(input, s, e);\n\t\t}\n\t};\n\tconst orderSensitive = new Set(typeof orderSensitiveModifiers === \"string\" ? orderSensitiveModifiers.split(\" \") : orderSensitiveModifiers);\n\tconst internSpan = (map, input, s, e, imp, make) => {\n\t\tconst h = fnv(input, s, e) ^ (imp ? 2654435769 : 0) | 0;\n\t\tlet bucket = map.get(h);\n\t\tif (bucket !== void 0) outer: for (let b = 0; b < bucket.length; b++) {\n\t\t\tconst en = bucket[b];\n\t\t\tif (en.imp !== imp || en.k.length !== e - s) continue;\n\t\t\tfor (let i = 0; i < en.k.length; i++) if (en.k.charCodeAt(i) !== input.charCodeAt(s + i)) continue outer;\n\t\t\treturn en.id;\n\t\t}\n\t\telse map.set(h, bucket = []);\n\t\tconst k = input.slice(s, e);\n\t\tconst id = make(k);\n\t\tbucket.push({\n\t\t\tk,\n\t\t\timp,\n\t\t\tid\n\t\t});\n\t\treturn id;\n\t};\n\tlet ctxByHash = /* @__PURE__ */ new Map();\n\tlet ctxByCanon = /* @__PURE__ */ new Map();\n\tlet nextCtxId = 2;\n\tconst MAX_CTX = 4096;\n\tconst canonicalizeContext = (raw, important) => {\n\t\tconst mods = [];\n\t\tlet dB = 0, dP = 0, start = 0;\n\t\tfor (let i = 0; i < raw.length; i++) {\n\t\t\tconst c = raw.charCodeAt(i);\n\t\t\tif (dB === 0 && dP === 0 && c === 58) {\n\t\t\t\tmods.push(raw.slice(start, i));\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (c === 91) dB++;\n\t\t\telse if (c === 93) dB--;\n\t\t\telse if (c === 40) dP++;\n\t\t\telse if (c === 41) dP--;\n\t\t}\n\t\tmods.push(raw.slice(start));\n\t\tlet canonical = mods[0];\n\t\tif (mods.length > 1) {\n\t\t\tconst result = [];\n\t\t\tlet segment = [];\n\t\t\tfor (const mod of mods) if (mod.charCodeAt(0) === 91 || orderSensitive.has(mod)) {\n\t\t\t\tif (segment.length) {\n\t\t\t\t\tresult.push(...segment.sort());\n\t\t\t\t\tsegment = [];\n\t\t\t\t}\n\t\t\t\tresult.push(mod);\n\t\t\t} else segment.push(mod);\n\t\t\tif (segment.length) result.push(...segment.sort());\n\t\t\tcanonical = result.join(\":\");\n\t\t}\n\t\tconst key = important ? canonical + \" !\" : canonical;\n\t\tlet id = ctxByCanon.get(key);\n\t\tif (id === void 0) ctxByCanon.set(key, id = nextCtxId++);\n\t\treturn id;\n\t};\n\tlet dynByHash = /* @__PURE__ */ new Map();\n\tlet nextDynId = GROUP_COUNT;\n\tconst MAX_DYN = GROUP_COUNT + 4096;\n\tconst newDynId = () => nextDynId++;\n\tconst ID_LIMIT = 2097152;\n\tconst TOKEN_TABLE = 8192;\n\tconst memoHash = new Int32Array(TOKEN_TABLE);\n\tconst memoStr = new Array(TOKEN_TABLE).fill(null);\n\tconst memoGid = new Int32Array(TOKEN_TABLE);\n\tconst memoCtx = new Int32Array(TOKEN_TABLE);\n\tconst memoFlags = new Uint8Array(TOKEN_TABLE);\n\tlet memoTick = 0;\n\tconst memoPut = (way0, input, ts, te, h, gid, ctxId, flags) => {\n\t\tlet slot = way0;\n\t\tif (memoStr[way0] !== null) {\n\t\t\tif (memoStr[way0 | 1] === null) slot = way0 | 1;\n\t\t\telse if ((memoTick++ & 3) === 0) slot = way0 | memoTick >> 2 & 1;\n\t\t\telse return;\n\t\t}\n\t\tmemoStr[slot] = input.slice(ts, te);\n\t\tmemoHash[slot] = h;\n\t\tmemoGid[slot] = gid;\n\t\tmemoCtx[slot] = ctxId;\n\t\tmemoFlags[slot] = flags;\n\t};\n\tconst memoReset = () => memoStr.fill(null);\n\tlet cap = 256;\n\tlet tokI32 = [\n\t\tnew Int32Array(cap),\n\t\tnew Int32Array(cap),\n\t\tnew Int32Array(cap),\n\t\tnew Int32Array(cap)\n\t];\n\tlet [tokStart, tokEnd, tokGid, tokCtx] = tokI32;\n\tlet tokFlags = new Uint8Array(cap);\n\tlet keep = new Uint8Array(cap);\n\tconst growTokens = () => {\n\t\tcap *= 2;\n\t\ttokI32 = tokI32.map((a) => {\n\t\t\tconst n = new Int32Array(cap);\n\t\t\tn.set(a);\n\t\t\treturn n;\n\t\t});\n\t\t[tokStart, tokEnd, tokGid, tokCtx] = tokI32;\n\t\tconst nf = new Uint8Array(cap);\n\t\tnf.set(tokFlags);\n\t\ttokFlags = nf;\n\t\tkeep = new Uint8Array(cap);\n\t};\n\tlet ckptCap = 64;\n\tlet ckptNode = new Int32Array(ckptCap);\n\tlet ckptTail = new Int32Array(ckptCap);\n\tconst claim0 = new Int32Array(GROUP_COUNT);\n\tlet CLAIM_TABLE = 2048;\n\tlet claimShift = 21;\n\tlet claimKeys = new Float64Array(CLAIM_TABLE);\n\tlet claimEpochs = new Int32Array(CLAIM_TABLE);\n\tlet epoch = 0;\n\tconst claimTest = (ctx, gid) => {\n\t\tif (ctx === 0 && gid < GROUP_COUNT) {\n\t\t\tif (claim0[gid] === epoch) return 1;\n\t\t\tclaim0[gid] = epoch;\n\t\t\treturn 0;\n\t\t}\n\t\tconst key = ctx * 2097152 + gid + 1;\n\t\tlet idx = Math.imul(key, 2654435761) >>> claimShift;\n\t\tfor (;;) {\n\t\t\tif (claimEpochs[idx] !== epoch) break;\n\t\t\tif (claimKeys[idx] === key) return 1;\n\t\t\tidx = idx + 1 & CLAIM_TABLE - 1;\n\t\t}\n\t\tclaimKeys[idx] = key;\n\t\tclaimEpochs[idx] = epoch;\n\t\treturn 0;\n\t};\n\tconst resolveAt = (input, bs, endPos, nodeAt, ckptAt) => {\n\t\tif (endPos - bs >= 2 && input.charCodeAt(bs) === 91 && input.charCodeAt(endPos - 1) === 93) {\n\t\t\tlet colon = -1;\n\t\t\tfor (let p = bs + 1; p < endPos - 1; p++) if (input.charCodeAt(p) === 58) {\n\t\t\t\tcolon = p;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (colon === -1 || colon === bs + 1) return EXTERNAL;\n\t\t\treturn internSpan(dynByHash, input, bs + 1, colon, 0, newDynId);\n\t\t}\n\t\tif (nodeAt >= 0 && nodeGroup[nodeAt] >= 0) return nodeGroup[nodeAt];\n\t\tfor (let k = ckptAt - 1; k >= 0; k--) {\n\t\t\tconst tailStart = ckptTail[k];\n\t\t\tif (tailStart > endPos) continue;\n\t\t\tconst nodeId = ckptNode[k];\n\t\t\tconst tlen = endPos - tailStart;\n\t\t\tif (nodeHasLit[nodeId] === 1 && tlen > 0 && tlen <= litMaxLen) {\n\t\t\t\tconst c0 = input.charCodeAt(tailStart);\n\t\t\t\tif (litNoArb === false || c0 !== 91 && c0 !== 40) {\n\t\t\t\t\tconst g = litProbe(nodeId, input, tailStart, endPos);\n\t\t\t\t\tif (g >= 0) return g;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst vl = nodeVlist[nodeId];\n\t\t\tif (vl < 0) continue;\n\t\t\tconst pat = vlistRef[vl];\n\t\t\tconst vs = vlistPat[pat];\n\t\t\tconst ve = vlistPat[pat + 1];\n\t\t\tif (vs === ve) continue;\n\t\t\tanalyzeArb(input, tailStart, endPos);\n\t\t\tconst g0 = vgStart[vl] - vs;\n\t\t\tfor (let v = vs; v < ve; v++) if (runValidator(vlistOps[v], input, tailStart, endPos)) return vlistGroup[g0 + v];\n\t\t}\n\t\treturn EXTERNAL;\n\t};\n\tconst mergeClassList = (input) => {\n\t\tconst n = input.length;\n\t\tlet tokenCount = 0;\n\t\tlet totalTokenChars = 0;\n\t\tlet sawNonSpaceWS = false;\n\t\tif (nextCtxId > MAX_CTX || ctxByHash.size > MAX_CTX) {\n\t\t\tctxByHash = /* @__PURE__ */ new Map();\n\t\t\tctxByCanon = /* @__PURE__ */ new Map();\n\t\t\tnextCtxId = 2;\n\t\t\tmemoReset();\n\t\t}\n\t\tif (nextDynId > MAX_DYN) {\n\t\t\tdynByHash = /* @__PURE__ */ new Map();\n\t\t\tnextDynId = GROUP_COUNT;\n\t\t\tmemoReset();\n\t\t}\n\t\tlet i = 0;\n\t\twhile (i < n) {\n\t\t\tlet c = input.charCodeAt(i);\n\t\t\tif (c === 32 || c >= 9 && c <= 13 || c >= 160 && isUniWS(c)) {\n\t\t\t\tif (c !== 32) sawNonSpaceWS = true;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst ts = i;\n\t\t\tlet th = 0;\n\t\t\twhile (i < n) {\n\t\t\t\tc = input.charCodeAt(i);\n\t\t\t\tif (c <= 32) {\n\t\t\t\t\tif (c === 32) break;\n\t\t\t\t\tif (c >= 9 && c <= 13) {\n\t\t\t\t\t\tsawNonSpaceWS = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (c >= 160 && isUniWS(c)) {\n\t\t\t\t\tsawNonSpaceWS = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tth = Math.imul(th ^ c, 16777619);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tconst te = i;\n\t\t\tconst len = te - ts;\n\t\t\tif (tokenCount === cap) growTokens();\n\t\t\tconst t = tokenCount++;\n\t\t\ttokStart[t] = ts;\n\t\t\ttokEnd[t] = te;\n\t\t\ttotalTokenChars += len;\n\t\t\tth ^= Math.imul(len, 2654435761);\n\t\t\tconst h = th ^ th >>> 15 | 0;\n\t\t\tconst way0 = h & 8190;\n\t\t\t{\n\t\t\t\tlet hitAt = -1;\n\t\t\t\tif (memoHash[way0] === h && memoStr[way0] !== null && memoStr[way0].length === len) hitAt = way0;\n\t\t\t\telse if (memoHash[way0 | 1] === h && memoStr[way0 | 1] !== null && memoStr[way0 | 1].length === len) hitAt = way0 | 1;\n\t\t\t\tif (hitAt >= 0) {\n\t\t\t\t\tconst s = memoStr[hitAt];\n\t\t\t\t\tlet ok = true;\n\t\t\t\t\tfor (let k = 0; k < len; k++) if (s.charCodeAt(k) !== input.charCodeAt(ts + k)) {\n\t\t\t\t\t\tok = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (ok) {\n\t\t\t\t\t\ttokGid[t] = memoGid[hitAt];\n\t\t\t\t\t\ttokCtx[t] = memoCtx[hitAt];\n\t\t\t\t\t\ttokFlags[t] = memoFlags[hitAt];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet pts = ts;\n\t\t\tif (FPL !== 0) {\n\t\t\t\tif (te - ts <= FPL || !input.startsWith(FULL_PREFIX, ts)) {\n\t\t\t\t\ttokGid[t] = EXTERNAL;\n\t\t\t\t\tmemoPut(way0, input, ts, te, h, EXTERNAL, 0, 0);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tpts = ts + FPL;\n\t\t\t}\n\t\t\tlet depthB = 0, depthP = 0;\n\t\t\tlet lastColon = -1, lastSlash = -1;\n\t\t\tfor (let p = pts; p < te; p++) {\n\t\t\t\tconst pc = input.charCodeAt(p);\n\t\t\t\tif (depthB === 0 && depthP === 0) {\n\t\t\t\t\tif (pc === 58) {\n\t\t\t\t\t\tlastColon = p;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (pc === 47) {\n\t\t\t\t\t\tlastSlash = p;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pc === 91) depthB++;\n\t\t\t\telse if (pc === 93) depthB--;\n\t\t\t\telse if (pc === 40) depthP++;\n\t\t\t\telse if (pc === 41) depthP--;\n\t\t\t}\n\t\t\tconst modStart = lastColon >= pts ? lastColon + 1 : pts;\n\t\t\tlet bs = modStart;\n\t\t\tlet be = te;\n\t\t\tlet important = false;\n\t\t\tlet prefixShift = 0;\n\t\t\tif (be > bs && input.charCodeAt(be - 1) === 33) {\n\t\t\t\timportant = true;\n\t\t\t\tbe--;\n\t\t\t} else if (be > bs && input.charCodeAt(bs) === 33) {\n\t\t\t\timportant = true;\n\t\t\t\tbs++;\n\t\t\t\tprefixShift = 1;\n\t\t\t}\n\t\t\tlet postfixEnd = -1;\n\t\t\tif (lastSlash > modStart) {\n\t\t\t\tpostfixEnd = lastSlash + prefixShift;\n\t\t\t\tif (postfixEnd >= be) postfixEnd = -1;\n\t\t\t}\n\t\t\tlet feedStart = bs;\n\t\t\tif (be - bs > 1 && input.charCodeAt(bs) === 45) feedStart = bs + 1;\n\t\t\tlet node = 0;\n\t\t\tlet lp = 0;\n\t\t\tlet le = 0;\n\t\t\tlet pending = -1;\n\t\t\tlet ckptTop = 0;\n\t\t\tif (nodeVlist[0] >= 0 || nodeHasLit[0] === 1) {\n\t\t\t\tckptNode[0] = 0;\n\t\t\t\tckptTail[0] = feedStart;\n\t\t\t\tckptTop = 1;\n\t\t\t}\n\t\t\tlet slashNode = DEAD;\n\t\t\tlet slashCkpt = 0;\n\t\t\tfor (let p = feedStart; p < be; p++) {\n\t\t\t\tif (p === postfixEnd) {\n\t\t\t\t\tslashNode = lp < le ? DEAD : node;\n\t\t\t\t\tslashCkpt = ckptTop;\n\t\t\t\t}\n\t\t\t\tif (node !== DEAD) {\n\t\t\t\t\tconst cc = input.charCodeAt(p);\n\t\t\t\t\tlet arrived = -1;\n\t\t\t\t\tif (lp < le) {\n\t\t\t\t\t\tif (labelText.charCodeAt(lp) === cc) {\n\t\t\t\t\t\t\tlp++;\n\t\t\t\t\t\t\tif (lp === le) arrived = node = pending;\n\t\t\t\t\t\t} else node = DEAD;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst es = edgeStart[node];\n\t\t\t\t\t\tconst ee = edgeStart[node + 1];\n\t\t\t\t\t\tlet next = DEAD;\n\t\t\t\t\t\tfor (let e = es; e < ee; e++) {\n\t\t\t\t\t\t\tconst ls = labelStart[e];\n\t\t\t\t\t\t\tif (labelText.charCodeAt(ls) === cc) {\n\t\t\t\t\t\t\t\tif (labelStart[e + 1] - ls === 1) arrived = next = edgeTarget[e];\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tlp = ls + 1;\n\t\t\t\t\t\t\t\t\tle = labelStart[e + 1];\n\t\t\t\t\t\t\t\t\tpending = edgeTarget[e];\n\t\t\t\t\t\t\t\t\tnext = node;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode = next;\n\t\t\t\t\t}\n\t\t\t\t\tif (arrived >= 0 && (nodeVlist[arrived] >= 0 || nodeHasLit[arrived] === 1) && p + 1 < be && input.charCodeAt(p + 1) === 45) {\n\t\t\t\t\t\tif (ckptTop === ckptCap) {\n\t\t\t\t\t\t\tckptCap *= 2;\n\t\t\t\t\t\t\tconst nv = new Int32Array(ckptCap);\n\t\t\t\t\t\t\tnv.set(ckptNode);\n\t\t\t\t\t\t\tckptNode = nv;\n\t\t\t\t\t\t\tconst nt = new Int32Array(ckptCap);\n\t\t\t\t\t\t\tnt.set(ckptTail);\n\t\t\t\t\t\t\tckptTail = nt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tckptNode[ckptTop] = arrived;\n\t\t\t\t\t\tckptTail[ckptTop] = p + 2;\n\t\t\t\t\t\tckptTop++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (postfixEnd === be) {\n\t\t\t\tslashNode = lp < le ? DEAD : node;\n\t\t\t\tslashCkpt = ckptTop;\n\t\t\t}\n\t\t\tconst endNode = lp < le ? DEAD : node;\n\t\t\tlet gid;\n\t\t\tlet hasPostfix = false;\n\t\t\tif (postfixEnd >= 0) {\n\t\t\t\thasPostfix = true;\n\t\t\t\tgid = resolveAt(input, bs, postfixEnd, slashNode, slashCkpt);\n\t\t\t\tif (gid !== EXTERNAL && gid < GROUP_COUNT && postfixLookupSet[gid]) {\n\t\t\t\t\tconst gidFull = resolveAt(input, bs, be, endNode, ckptTop);\n\t\t\t\t\tif (gidFull !== EXTERNAL && gidFull !== gid) {\n\t\t\t\t\t\tgid = gidFull;\n\t\t\t\t\t\thasPostfix = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (gid === EXTERNAL) {\n\t\t\t\t\tgid = resolveAt(input, bs, be, endNode, ckptTop);\n\t\t\t\t\thasPostfix = false;\n\t\t\t\t}\n\t\t\t} else gid = resolveAt(input, bs, be, endNode, ckptTop);\n\t\t\tlet ctxId = 0;\n\t\t\tlet flags = 0;\n\t\t\tif (gid === EXTERNAL) tokGid[t] = EXTERNAL;\n\t\t\telse {\n\t\t\t\tflags = hasPostfix ? 1 : 0;\n\t\t\t\tctxId = pts >= lastColon ? important ? 1 : 0 : internSpan(ctxByHash, input, pts, lastColon, important ? 1 : 0, (k) => canonicalizeContext(k, important));\n\t\t\t\ttokGid[t] = gid;\n\t\t\t\ttokFlags[t] = flags;\n\t\t\t\ttokCtx[t] = ctxId;\n\t\t\t}\n\t\t\tmemoPut(way0, input, ts, te, h, gid, ctxId, flags);\n\t\t}\n\t\tif (tokenCount === 0) return \"\";\n\t\tif (tokenCount === 1) return tokStart[0] === 0 && tokEnd[0] === n ? input : input.slice(tokStart[0], tokEnd[0]);\n\t\tif (tokenCount * CLAIM_PER_TOKEN > CLAIM_TABLE) {\n\t\t\twhile (tokenCount * CLAIM_PER_TOKEN > CLAIM_TABLE) {\n\t\t\t\tCLAIM_TABLE <<= 1;\n\t\t\t\tclaimShift--;\n\t\t\t}\n\t\t\tclaimKeys = new Float64Array(CLAIM_TABLE);\n\t\t\tclaimEpochs = new Int32Array(CLAIM_TABLE);\n\t\t}\n\t\tif (nextCtxId >= ID_LIMIT || nextDynId >= ID_LIMIT) throw new Error(\"cn: too many distinct classes in one merge\");\n\t\tepoch = epoch + 1 | 0;\n\t\tif (epoch === 0) {\n\t\t\tclaim0.fill(0);\n\t\t\tclaimEpochs.fill(0);\n\t\t\tepoch = 1;\n\t\t}\n\t\tlet didDrop = false;\n\t\tfor (let t = tokenCount - 1; t >= 0; t--) {\n\t\t\tconst gid = tokGid[t];\n\t\t\tif (gid === EXTERNAL) {\n\t\t\t\tkeep[t] = 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst ctxId = tokCtx[t];\n\t\t\tif (claimTest(ctxId, gid) === 1) {\n\t\t\t\tkeep[t] = 0;\n\t\t\t\tdidDrop = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tkeep[t] = 1;\n\t\t\tif (gid < GROUP_COUNT) {\n\t\t\t\tconst r = adjRow[gid];\n\t\t\t\tif (r >= 0) for (let k = adjStart[r]; k < adjStart[r + 1]; k++) claimTest(ctxId, adjTgt[k]);\n\t\t\t\tif (tokFlags[t] & 1) {\n\t\t\t\t\tfor (let k = 0; k < patGid.length; k++) if (patGid[k] === gid) claimTest(ctxId, patTgt[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!didDrop && !sawNonSpaceWS && n === totalTokenChars + tokenCount - 1) return input;\n\t\tlet out = \"\";\n\t\tlet t = 0;\n\t\twhile (t < tokenCount) {\n\t\t\tif (!keep[t]) {\n\t\t\t\tt++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst runStart = tokStart[t];\n\t\t\tlet runEnd = tokEnd[t];\n\t\t\tlet u = t + 1;\n\t\t\twhile (u < tokenCount && keep[u] && tokStart[u] === runEnd + 1 && input.charCodeAt(runEnd) === 32) {\n\t\t\t\trunEnd = tokEnd[u];\n\t\t\t\tu++;\n\t\t\t}\n\t\t\tif (out.length > 0) out += \" \";\n\t\t\tout += input.slice(runStart, runEnd);\n\t\t\tt = u;\n\t\t}\n\t\treturn out;\n\t};\n\tconst DOOR_SIZE = 16384;\n\tconst door = new Int32Array(DOOR_SIZE * 2);\n\tlet doorBase = 0;\n\tlet doorEpoch = 1;\n\tlet cache = Object.create(null);\n\tlet prevCache = Object.create(null);\n\tlet cacheMap = /* @__PURE__ */ new Map();\n\tlet prevCacheMap = /* @__PURE__ */ new Map();\n\tlet cacheCount = 0;\n\tlet doorMarks = 0;\n\tconst rotateDoor = () => {\n\t\tdoorBase ^= DOOR_SIZE;\n\t\tdoorEpoch = doorEpoch + 1 | 0;\n\t\tdoorMarks = 0;\n\t};\n\tconst mergeCached = (input) => {\n\t\tlet merged = cache[input];\n\t\tif (merged !== void 0) return merged;\n\t\tconst hash = spanHash(input, 0, input.length);\n\t\tconst slot = (hash & 16383) + doorBase;\n\t\tconst wasSeen = door[slot] === (hash ^ doorEpoch) || door[slot ^ DOOR_SIZE] === (hash ^ doorEpoch - 1);\n\t\tif (wasSeen) {\n\t\t\tmerged = prevCache[input];\n\t\t\tif (merged !== void 0) {\n\t\t\t\tcache[input] = merged;\n\t\t\t\treturn merged;\n\t\t\t}\n\t\t}\n\t\tmerged = mergeClassList(input);\n\t\tif (wasSeen) {\n\t\t\tcache[input] = merged;\n\t\t\tif (++cacheCount > cacheSize) {\n\t\t\t\tcacheCount = 0;\n\t\t\t\tprevCache = cache;\n\t\t\t\tcache = Object.create(null);\n\t\t\t\trotateDoor();\n\t\t\t}\n\t\t} else {\n\t\t\tdoor[slot] = hash ^ doorEpoch;\n\t\t\tif (++doorMarks > DOOR_SIZE) rotateDoor();\n\t\t}\n\t\treturn merged;\n\t};\n\tconst mergeCachedMap = (input) => {\n\t\tlet merged = cacheMap.get(input);\n\t\tif (merged !== void 0) return merged;\n\t\tconst hash = spanHash(input, 0, input.length);\n\t\tconst slot = (hash & 16383) + doorBase;\n\t\tconst wasSeen = door[slot] === (hash ^ doorEpoch) || door[slot ^ DOOR_SIZE] === (hash ^ doorEpoch - 1);\n\t\tif (wasSeen) {\n\t\t\tmerged = prevCacheMap.get(input);\n\t\t\tif (merged !== void 0) {\n\t\t\t\tcacheMap.set(input, merged);\n\t\t\t\treturn merged;\n\t\t\t}\n\t\t}\n\t\tmerged = mergeClassList(input);\n\t\tif (wasSeen) {\n\t\t\tcacheMap.set(input, merged);\n\t\t\tif (++cacheCount > cacheSize) {\n\t\t\t\tcacheCount = 0;\n\t\t\t\tprevCacheMap = cacheMap;\n\t\t\t\tcacheMap = /* @__PURE__ */ new Map();\n\t\t\t\trotateDoor();\n\t\t\t}\n\t\t} else {\n\t\t\tdoor[slot] = hash ^ doorEpoch;\n\t\t\tif (++doorMarks > DOOR_SIZE) rotateDoor();\n\t\t}\n\t\treturn merged;\n\t};\n\tconst seenBefore = (input) => {\n\t\tconst hash = spanHash(input, 0, input.length);\n\t\tconst slot = (hash & 16383) + doorBase;\n\t\tif (door[slot] === (hash ^ doorEpoch) || door[slot ^ DOOR_SIZE] === (hash ^ doorEpoch - 1)) return true;\n\t\tdoor[slot] = hash ^ doorEpoch;\n\t\tif (++doorMarks > DOOR_SIZE) rotateDoor();\n\t\treturn false;\n\t};\n\tconst mergeString = cacheSize === 0 ? mergeClassList : IS_JSC ? (input) => {\n\t\tconst merged = cacheMap.get(input);\n\t\treturn merged !== void 0 ? merged : mergeCachedMap(input);\n\t} : mergeCached;\n\tconst merge = function() {\n\t\treturn arguments.length === 1 && typeof arguments[0] === \"string\" ? mergeString(arguments[0]) : mergeString(twJoin.apply(null, arguments));\n\t};\n\treturn {\n\t\tmerge,\n\t\tmergeString,\n\t\tseenBefore: cacheSize === 0 ? () => false : seenBefore,\n\t\tmergeUncached: mergeClassList\n\t};\n};\nconst resolveValue = (v, clsxMode) => {\n\tif (!v) return \"\";\n\tif (typeof v === \"string\") return v;\n\tlet out = \"\";\n\tif (typeof v.length === \"number\" && (clsxMode ? Array.isArray(v) : true)) {\n\t\tconst arr = v;\n\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\tconst item = arr[i];\n\t\t\tif (!item) continue;\n\t\t\tconst r = typeof item === \"string\" ? item : resolveValue(item, clsxMode);\n\t\t\tif (r) {\n\t\t\t\tif (out) out += \" \";\n\t\t\t\tout += r;\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t}\n\tif (clsxMode) {\n\t\tif (typeof v === \"number\") return \"\" + v;\n\t\tif (typeof v === \"object\") {\n\t\t\tfor (const k in v) if (v[k]) {\n\t\t\t\tif (out) out += \" \";\n\t\t\t\tout += k;\n\t\t\t}\n\t\t}\n\t}\n\treturn out;\n};\nconst joinArgs = (args, clsxMode) => {\n\tlet s = \"\";\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst a = args[i];\n\t\tif (!a) continue;\n\t\tconst r = typeof a === \"string\" ? a : resolveValue(a, clsxMode);\n\t\tif (r) {\n\t\t\tif (s) s += \" \";\n\t\t\ts += r;\n\t\t}\n\t}\n\treturn s;\n};\n/** join-only, `twJoin`-compatible (strings + nested arrays, falsy skipped) */\nconst twJoin = function() {\n\treturn joinArgs(arguments, false);\n};\n/** join-only, `clsx`-compatible (no merging) */\nconst clsx = function() {\n\treturn joinArgs(arguments, true);\n};\nconst BUCKET_CAP = 256;\nconst BUCKET_MISS_CAP = 16;\nconst BUCKET_SKIP = 1024;\nconst CHURN_SIZE = 4096;\nconst wrapClsx = (mergeString, fresh) => {\n\tconst seenBefore = fresh === void 0 ? () => true : fresh.seenBefore;\n\tconst mergeUncached = fresh === void 0 ? mergeString : fresh.mergeUncached;\n\tlet argCache = /* @__PURE__ */ new Map();\n\tlet prevArgCache = /* @__PURE__ */ new Map();\n\tlet argCount = 0;\n\tlet lastHit = null;\n\tlet churnKey = null;\n\tlet churnOwn = [];\n\tlet churnVal = [];\n\tlet churnTick = 0;\n\tconst churnLookup = (key, own, join) => {\n\t\tif (churnKey === null) {\n\t\t\tchurnKey = new Array(CHURN_SIZE).fill(\"\");\n\t\t\tchurnOwn = new Array(CHURN_SIZE).fill(\"\");\n\t\t\tchurnVal = new Array(CHURN_SIZE).fill(\"\");\n\t\t}\n\t\tconst way0 = spanHash(key, 0, key.length) & 4094;\n\t\tif (churnKey[way0] === key && churnOwn[way0] === own) return churnVal[way0];\n\t\tif (churnKey[way0 | 1] === key && churnOwn[way0 | 1] === own) return churnVal[way0 | 1];\n\t\tconst merged = mergeString(join ? own + \" \" + key : key);\n\t\tconst slot = churnKey[way0] === \"\" ? way0 : way0 | (churnKey[way0 | 1] === \"\" ? 1 : churnTick++ & 1);\n\t\tchurnKey[slot] = key;\n\t\tchurnOwn[slot] = own;\n\t\tchurnVal[slot] = merged;\n\t\treturn merged;\n\t};\n\tconst match3 = (e, v0, v1, v2) => {\n\t\tlet k = 0;\n\t\tif (v0) {\n\t\t\tif (v0 !== e.a0) return false;\n\t\t\tk = 1;\n\t\t}\n\t\tif (v1) {\n\t\t\tif (v1 !== (k === 0 ? e.a0 : e.a1)) return false;\n\t\t\tk++;\n\t\t}\n\t\tif (v2) {\n\t\t\tif (v2 !== (k === 0 ? e.a0 : k === 1 ? e.a1 : e.a2)) return false;\n\t\t\tk++;\n\t\t}\n\t\treturn k === e.t;\n\t};\n\tconst matchN = (e, vals) => {\n\t\tconst ea = e.a;\n\t\tlet k = 0;\n\t\tfor (let i = 0; i < vals.length; i++) {\n\t\t\tconst v = vals[i];\n\t\t\tif (!v) continue;\n\t\t\tif (v !== ea[k]) return false;\n\t\t\tk++;\n\t\t}\n\t\treturn k === e.t;\n\t};\n\tconst resolveArgs = (vals, probed) => {\n\t\tconst nArgs = vals.length;\n\t\tconst pred = lastHit === null ? null : lastHit.n;\n\t\tif (!probed) {\n\t\t\tif (pred !== null && matchN(pred, vals)) {\n\t\t\t\tlastHit = pred;\n\t\t\t\treturn pred.r;\n\t\t\t}\n\t\t\tif (lastHit !== null && lastHit !== pred && matchN(lastHit, vals)) return lastHit.r;\n\t\t}\n\t\tlet first = \"\";\n\t\tlet firstIdx = -1;\n\t\tlet truthy = 0;\n\t\tlet hasResolvedValue = false;\n\t\tfor (let i = 0; i < nArgs; i++) {\n\t\t\tlet v = vals[i];\n\t\t\tif (!v) continue;\n\t\t\tif (typeof v !== \"string\") {\n\t\t\t\tv = vals[i] = resolveValue(v, true);\n\t\t\t\tif (!v) continue;\n\t\t\t\thasResolvedValue = true;\n\t\t\t}\n\t\t\tif (firstIdx < 0) {\n\t\t\t\tfirst = v;\n\t\t\t\tfirstIdx = i;\n\t\t\t}\n\t\t\ttruthy++;\n\t\t}\n\t\tif (truthy === 0) return \"\";\n\t\tif (truthy === 1) return mergeString(first);\n\t\tif (hasResolvedValue) {\n\t\t\tif (pred !== null && matchN(pred, vals)) {\n\t\t\t\tlastHit = pred;\n\t\t\t\treturn pred.r;\n\t\t\t}\n\t\t\tif (lastHit !== null && lastHit !== pred && matchN(lastHit, vals)) return lastHit.r;\n\t\t}\n\t\tlet bucket = argCache.get(first);\n\t\tif (bucket === void 0) {\n\t\t\tbucket = prevArgCache.get(first);\n\t\t\tif (bucket !== void 0) argCache.set(first, bucket);\n\t\t}\n\t\tlet hit = null;\n\t\tif (bucket !== void 0) {\n\t\t\tif (bucket.skip > 0) {\n\t\t\t\tbucket.skip--;\n\t\t\t\tlastHit = null;\n\t\t\t\tlet joined = first;\n\t\t\t\tfor (let i = firstIdx + 1; i < nArgs; i++) {\n\t\t\t\t\tconst v = vals[i];\n\t\t\t\t\tif (v) joined += \" \" + v;\n\t\t\t\t}\n\t\t\t\treturn churnLookup(joined, \"\", false);\n\t\t\t}\n\t\t\tconst entries = bucket.e;\n\t\t\touter: for (let b = 0; b < entries.length; b++) {\n\t\t\t\tconst e = entries[b];\n\t\t\t\tif (e.t !== truthy) continue;\n\t\t\t\tconst ea = e.a;\n\t\t\t\tlet k = 1;\n\t\t\t\tfor (let i = firstIdx + 1; i < nArgs; i++) {\n\t\t\t\t\tconst v = vals[i];\n\t\t\t\t\tif (v && v !== ea[k++]) continue outer;\n\t\t\t\t}\n\t\t\t\thit = e;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (hit !== null) bucket.miss = 0;\n\t\t}\n\t\tif (hit === null) {\n\t\t\tlet joined = first;\n\t\t\tconst a = [first];\n\t\t\tfor (let i = firstIdx + 1; i < nArgs; i++) {\n\t\t\t\tconst v = vals[i];\n\t\t\t\tif (!v) continue;\n\t\t\t\tjoined += \" \" + v;\n\t\t\t\ta.push(v);\n\t\t\t}\n\t\t\tif (!seenBefore(joined)) return mergeUncached(joined);\n\t\t\thit = {\n\t\t\t\tr: mergeString(joined),\n\t\t\t\tt: a.length,\n\t\t\t\ta0: a[0],\n\t\t\t\ta1: a[1],\n\t\t\t\ta2: a[2] ?? \"\",\n\t\t\t\ta,\n\t\t\t\tn: null\n\t\t\t};\n\t\t\tif (bucket === void 0) argCache.set(first, bucket = {\n\t\t\t\te: [],\n\t\t\t\tmiss: 0,\n\t\t\t\tskip: 0,\n\t\t\t\tat: 0\n\t\t\t});\n\t\t\telse if (++bucket.miss > BUCKET_MISS_CAP) {\n\t\t\t\tbucket.miss = BUCKET_MISS_CAP;\n\t\t\t\tbucket.skip = BUCKET_SKIP;\n\t\t\t\tbucket.e.length = 0;\n\t\t\t\tbucket.at = 0;\n\t\t\t}\n\t\t\tconst entries = bucket.e;\n\t\t\tif (entries.length < BUCKET_CAP) entries.push(hit);\n\t\t\telse {\n\t\t\t\tentries[bucket.at] = hit;\n\t\t\t\tbucket.at = bucket.at + 1 & 255;\n\t\t\t}\n\t\t\tif (++argCount > 1e3) {\n\t\t\t\targCount = 0;\n\t\t\t\tprevArgCache = argCache;\n\t\t\t\targCache = /* @__PURE__ */ new Map();\n\t\t\t}\n\t\t}\n\t\tif (lastHit !== null && lastHit !== hit) lastHit.n = hit;\n\t\tlastHit = hit;\n\t\treturn hit.r;\n\t};\n\tconst mergeSingleValue = (value) => Array.isArray(value) ? resolveArgs(value.slice(), false) : mergeString(resolveValue(value, true));\n\treturn function(v0, v1, v2) {\n\t\tconst nArgs = arguments.length;\n\t\tif ((nArgs | 1) === 3) {\n\t\t\tconst lh = lastHit;\n\t\t\tif (lh !== null) {\n\t\t\t\tconst pred = lh.n;\n\t\t\t\tif (pred !== null && match3(pred, v0, v1, v2)) {\n\t\t\t\t\tlastHit = pred;\n\t\t\t\t\treturn pred.r;\n\t\t\t\t}\n\t\t\t\tif (lh !== pred && match3(lh, v0, v1, v2)) return lh.r;\n\t\t\t}\n\t\t\tif (nArgs === 2 && typeof v1 === \"string\" && v1 !== \"\") {\n\t\t\t\tconst bucket = argCache.get(v0);\n\t\t\t\tif (bucket !== void 0 && bucket.skip > 0) {\n\t\t\t\t\tbucket.skip--;\n\t\t\t\t\tlastHit = null;\n\t\t\t\t\treturn churnLookup(v1, v0, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn resolveArgs([\n\t\t\t\tv0,\n\t\t\t\tv1,\n\t\t\t\tv2\n\t\t\t], true);\n\t\t}\n\t\tif (nArgs === 1) return typeof v0 === \"string\" ? mergeString(v0) : mergeSingleValue(v0);\n\t\tconst lh = lastHit;\n\t\tif (lh !== null) {\n\t\t\tconst pred = lh.n;\n\t\t\tif (pred !== null) {\n\t\t\t\tconst pa = pred.a;\n\t\t\t\tlet k = 0;\n\t\t\t\tlet ok = true;\n\t\t\t\tfor (let i = 0; i < nArgs; i++) {\n\t\t\t\t\tconst v = arguments[i];\n\t\t\t\t\tif (!v) continue;\n\t\t\t\t\tif (v !== pa[k]) {\n\t\t\t\t\t\tok = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t\tif (ok && k === pred.t) {\n\t\t\t\t\tlastHit = pred;\n\t\t\t\t\treturn pred.r;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (lh !== pred) {\n\t\t\t\tconst la = lh.a;\n\t\t\t\tlet k = 0;\n\t\t\t\tlet ok = true;\n\t\t\t\tfor (let i = 0; i < nArgs; i++) {\n\t\t\t\t\tconst v = arguments[i];\n\t\t\t\t\tif (!v) continue;\n\t\t\t\t\tif (v !== la[k]) {\n\t\t\t\t\t\tok = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t\tif (ok && k === lh.t) return lh.r;\n\t\t\t}\n\t\t}\n\t\tconst vals = [];\n\t\tfor (let i = 0; i < nArgs; i++) vals.push(arguments[i]);\n\t\treturn resolveArgs(vals, true);\n\t};\n};\n/**\n* Create a `cn` function bound to compiled tables — the entry point for\n* project-compiled (`cn build`) tables:\n*\n* ```ts\n* import tables from \"./cn-tables.js\"\n* import { createCn } from \"cn/engine\"\n* export const cn = createCn(tables)\n* ```\n*/\nconst createCn = (tables, validatorImpls, options) => {\n\tconst engine = createEngine(tables, validatorImpls, options);\n\treturn wrapClsx(engine.mergeString, engine);\n};\n\n//#endregion\nexport { clsx, createCn, createEngine, twJoin, wrapClsx };","import tables_generated_default from \"./tables.js\";\nimport { clsx, createEngine, twJoin, wrapClsx } from \"./engine.js\";\n\n//#region src/index.ts\nconst instance = /* @__PURE__ */ createEngine(tables_generated_default);\n/**\n* Merge Tailwind CSS classes with clsx-style arguments (strings, arrays,\n* objects, conditionals). Drop-in replacement for `twMerge(clsx(...))`.\n*/\nconst cn = /* @__PURE__ */ wrapClsx(instance.mergeString, instance);\n/** tailwind-merge–compatible variadic merge (strings + nested arrays). */\nconst twMerge = instance.merge;\n\n//#endregion\nexport { clsx, cn, createEngine, twJoin, twMerge };","'use client';\n\nimport { cn } from '@/lib/utils';\nimport { Menu as MenuPrimitive } from '@base-ui/react/menu';\n\nfunction DropdownMenu({ ...props }) {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({ ...props }) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger({ ...props }) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nfunction DropdownMenuContent({\n align = 'start',\n alignOffset = 0,\n side = 'bottom',\n sideOffset = 4,\n className,\n ...props\n}) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n className=\"isolate z-[1000000] outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md p-1 shadow-md ring-1 duration-100 outline-none data-closed:overflow-hidden',\n className,\n )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({ ...props }) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\nfunction DropdownMenuLabel({ className, inset, ...props }) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn('text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuItem({ className, inset, variant = 'default', ...props }) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:*:[svg]:text-destructive relative flex cursor-default items-center gap-1.5 rounded px-2 py-1 text-xs outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({ className, ...props }) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n};\n","import { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport { cva } from 'class-variance-authority';\nimport { cn } from 'cn';\nimport { ChevronDownIcon } from 'lucide-react';\n\nfunction NavigationMenu({ align = 'start', className, children, ...props }) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n className={cn('group/navigation-menu relative flex max-w-max flex-1 items-center justify-center', className)}\n {...props}\n >\n {children}\n <NavigationMenuPositioner align={align} />\n </NavigationMenuPrimitive.Root>\n );\n}\n\nfunction NavigationMenuList({ className, ...props }) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn('group flex flex-1 list-none items-center justify-center gap-0', className)}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuItem({ className, ...props }) {\n return (\n <NavigationMenuPrimitive.Item data-slot=\"navigation-menu-item\" className={cn('relative', className)} {...props} />\n );\n}\n\nconst navigationMenuTriggerStyle = cva(\n 'group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted',\n);\n\nfunction NavigationMenuTrigger({ className, children, ...props }) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), 'group', className)}\n {...props}\n >\n {children}{' '}\n <ChevronDownIcon\n className=\"relative top-px ml-1 size-5 -mr-1 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({ className, ...props }) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn('h-full w-auto p-0 rounded-xl overflow-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuPositioner({\n className,\n side = 'bottom',\n sideOffset = 8,\n align = 'start',\n alignOffset = 0,\n ...props\n}) {\n return (\n <NavigationMenuPrimitive.Portal>\n <NavigationMenuPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n className={cn(\n 'isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:-top-2.5 data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0',\n className,\n )}\n {...props}\n >\n <NavigationMenuPrimitive.Popup className=\"xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) rounded-xl bg-transparent text-popover-foreground outline-none transition-[width,height] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)]\">\n <NavigationMenuPrimitive.Viewport className=\"relative size-full rounded-xl overflow-hidden\" />\n </NavigationMenuPrimitive.Popup>\n </NavigationMenuPrimitive.Positioner>\n </NavigationMenuPrimitive.Portal>\n );\n}\n\nfunction NavigationMenuLink({ className, ...props }) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md data-active:bg-muted/50 data-active:hover:bg-muted data-active:focus:bg-muted [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuIndicator({ className, ...props }) {\n return (\n <NavigationMenuPrimitive.Icon\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n 'top-full z-1 flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in',\n className,\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\n </NavigationMenuPrimitive.Icon>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuIndicator,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuPositioner,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n};\n","'use client';\n\nimport { cn } from '@/lib/utils';\nimport { Popover as PopoverPrimitive } from '@base-ui/react/popover';\n\nfunction Popover({ ...props }) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ className, ...props }) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" className={cn('w-full', className)} {...props} />;\n}\n\nfunction PopoverContent({ className, align = 'center', alignOffset = 0, side = 'bottom', sideOffset = 4, ...props }) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-[1000000]\"\n >\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-[1000000] flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-md p-1 text-xs shadow-md ring-1 outline-hidden duration-100',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverHeader({ className, ...props }) {\n return <div data-slot=\"popover-header\" className={cn('flex flex-col gap-0.5 text-xs', className)} {...props} />;\n}\n\nfunction PopoverTitle({ className, ...props }) {\n return (\n <PopoverPrimitive.Title\n data-slot=\"popover-title\"\n className={cn('font-heading font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction PopoverDescription({ className, ...props }) {\n return (\n <PopoverPrimitive.Description\n data-slot=\"popover-description\"\n className={cn('text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger };\n","import {\n Activity,\n BarChart2,\n ClipboardList,\n Clock,\n Compass,\n GitFork,\n Globe,\n Layers,\n Newspaper,\n Percent,\n Radio,\n Settings,\n ShoppingBasket,\n Shuffle,\n Sliders,\n SlidersHorizontal,\n Sparkles,\n TrendingUp,\n Zap,\n} from 'lucide-react';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 1. DATA: Stock X-Ray Matrix Categories\n// ─────────────────────────────────────────────────────────────────────────────\nexport const stockXRayCategories = [\n {\n id: 'performance',\n label: 'Performance',\n value: 'performance_matrix',\n route: '/performance_matrix',\n icon: TrendingUp,\n description: 'Relative Rotation Grade, Stage Identification & Momentum Analysis',\n sections: [\n {\n id: 'rrg',\n title: 'Relative Rotation Grade',\n desc: 'Leading, Weakening, Lagging & Improving zones',\n route: '/performance_matrix#rrg',\n hash: 'rrg',\n queryParams: { matrix: 'performance', section: 'rrg' },\n },\n {\n id: 'stage',\n title: 'Stage Identifier',\n desc: 'Accumulation, Markup, Distribution & Markdown',\n route: '/performance_matrix#stage',\n hash: 'stage',\n queryParams: { matrix: 'performance', section: 'stage' },\n },\n {\n id: 'price-strength',\n title: 'Price Strength',\n desc: 'Comparative outperformance against benchmark',\n route: '/performance_matrix#price-strength',\n hash: 'price-strength',\n queryParams: { matrix: 'performance', section: 'price-strength' },\n },\n {\n id: 'momentum',\n title: 'Momentum',\n desc: 'Speed and acceleration across short to long terms',\n route: '/performance_matrix#momentum',\n hash: 'momentum',\n queryParams: { matrix: 'performance', section: 'momentum' },\n },\n ],\n },\n {\n id: 'price-range',\n label: 'Price Range',\n value: 'price_range_matrix',\n route: '/price_range_matrix',\n icon: Activity,\n description: 'Price Range dynamics, Candle Spread, and Circuit Chart diagnostics',\n sections: [\n {\n id: 'price-range',\n title: 'Price Range',\n desc: '252D high-low channels and range positioning',\n route: '/price_range_matrix#price-range',\n hash: 'price-range',\n queryParams: { matrix: 'price-range', section: 'price-range' },\n },\n {\n id: 'candle-spread',\n title: 'Candle Spread',\n desc: 'Body vs wick distributions and spread sizes',\n route: '/price_range_matrix#candle-spread',\n hash: 'candle-spread',\n queryParams: { matrix: 'price-range', section: 'candle-spread' },\n },\n {\n id: 'candle-control',\n title: 'Candle Spread Control',\n desc: 'Buyer vs seller price control dominances',\n route: '/price_range_matrix#candle-control',\n hash: 'candle-control',\n queryParams: { matrix: 'price-range', section: 'candle-control' },\n },\n {\n id: 'circuit',\n title: 'Circuit Chart',\n desc: 'Historical upper and lower circuit hits',\n route: '/price_range_matrix#circuit',\n hash: 'circuit',\n queryParams: { matrix: 'price-range', section: 'circuit' },\n },\n ],\n },\n {\n id: 'engagement',\n label: 'Engagement',\n value: 'engagement_matrix',\n route: '/engagement_matrix',\n icon: Layers,\n description: 'Ask/bid ratios, average volumes, F&O open interest and delivery deals',\n sections: [\n {\n id: 'ask-bid',\n title: 'Ask Bid Ratios',\n desc: 'Order book buying and selling pressures',\n route: '/engagement_matrix#ask-bid',\n hash: 'ask-bid',\n queryParams: { matrix: 'engagement', section: 'ask-bid' },\n },\n {\n id: 'avg-volume',\n title: 'Average Volume',\n desc: 'Multi-day average share turnover rates',\n route: '/engagement_matrix#avg-volume',\n hash: 'avg-volume',\n queryParams: { matrix: 'engagement', section: 'avg-volume' },\n },\n {\n id: 'fno-volume',\n title: 'F&O Volume',\n desc: 'Futures and options derivative volumes',\n route: '/engagement_matrix#fno-volume',\n hash: 'fno-volume',\n queryParams: { matrix: 'engagement', section: 'fno-volume' },\n },\n {\n id: 'fno-oi',\n title: 'F&O Open Interest',\n desc: 'Long build-up and short covering profiles',\n route: '/engagement_matrix#fno-oi',\n hash: 'fno-oi',\n queryParams: { matrix: 'engagement', section: 'fno-oi' },\n },\n {\n id: 'cpr-pcr',\n title: 'PCR / CPR Profile',\n desc: 'Put-call ratios and central pivot ranges',\n route: '/engagement_matrix#cpr-pcr',\n hash: 'cpr-pcr',\n queryParams: { matrix: 'engagement', section: 'cpr-pcr' },\n },\n {\n id: 'bulk-block',\n title: 'Bulk & Block Deals',\n desc: 'Large institutional block trades',\n route: '/engagement_matrix#bulk-block',\n hash: 'bulk-block',\n queryParams: { matrix: 'engagement', section: 'bulk-block' },\n },\n {\n id: 'mf-holdings',\n title: 'MF Holdings',\n desc: 'Mutual fund quarterly holding changes',\n route: '/engagement_matrix#mf-holdings',\n hash: 'mf-holdings',\n queryParams: { matrix: 'engagement', section: 'mf-holdings' },\n },\n ],\n },\n {\n id: 'steering',\n label: 'Steering',\n value: 'steering_matrix',\n route: '/steering_matrix',\n icon: Compass,\n description: 'Financial profiles, Cash flow analysis, Shareholding & Industry mapping',\n sections: [\n {\n id: 'financial-profile',\n title: 'Financial Profile',\n desc: 'Key financial metrics and growth indicators',\n route: '/steering_matrix#financial-profile',\n hash: 'financial-profile',\n queryParams: { matrix: 'steering', section: 'financial-profile' },\n },\n {\n id: 'cash-flow',\n title: 'Cash Flow Analysis',\n desc: 'Operating, investing and financing cash flows',\n route: '/steering_matrix#cash-flow',\n hash: 'cash-flow',\n queryParams: { matrix: 'steering', section: 'cash-flow' },\n },\n {\n id: 'shareholding',\n title: 'Shareholding Pattern',\n desc: 'Promoter, FII, DII and public shareholding',\n route: '/steering_matrix#shareholding',\n hash: 'shareholding',\n queryParams: { matrix: 'steering', section: 'shareholding' },\n },\n {\n id: 'industry-mapping',\n title: 'Industry Mapping',\n desc: 'Sectoral peers and industry benchmarks',\n route: '/steering_matrix#industry-mapping',\n hash: 'industry-mapping',\n queryParams: { matrix: 'steering', section: 'industry-mapping' },\n },\n {\n id: 'market-cap',\n title: 'Market Cap Position',\n desc: 'Capitalization ranking and category tier',\n route: '/steering_matrix#market-cap',\n hash: 'market-cap',\n queryParams: { matrix: 'steering', section: 'market-cap' },\n },\n {\n id: 'index-chart',\n title: 'Index Chart',\n desc: 'Relative performance against index components',\n route: '/steering_matrix#index-chart',\n hash: 'index-chart',\n queryParams: { matrix: 'steering', section: 'index-chart' },\n },\n ],\n },\n {\n id: 'indicators',\n label: 'Indicators',\n value: 'indicators_matrix',\n route: '/indicators_matrix',\n icon: Sliders,\n description: 'Technical indicators including Moving Averages, Supertrend, Bollinger & MACD',\n sections: [\n {\n id: 'sma',\n title: 'SMA',\n desc: 'Simple Moving Average trends',\n route: '/indicators_matrix#sma',\n hash: 'sma',\n queryParams: { matrix: 'indicators', section: 'sma' },\n },\n {\n id: 'ema',\n title: 'EMA',\n desc: 'Exponential Moving Average signals',\n route: '/indicators_matrix#ema',\n hash: 'ema',\n queryParams: { matrix: 'indicators', section: 'ema' },\n },\n {\n id: 'supertrend',\n title: 'Supertrend',\n desc: 'Trend-following trailing levels',\n route: '/indicators_matrix#supertrend',\n hash: 'supertrend',\n queryParams: { matrix: 'indicators', section: 'supertrend' },\n },\n {\n id: 'bollinger-band',\n title: 'Bollinger Band',\n desc: 'Volatility envelopes and bands',\n route: '/indicators_matrix#bollinger-band',\n hash: 'bollinger-band',\n queryParams: { matrix: 'indicators', section: 'bollinger-band' },\n },\n {\n id: 'atr',\n title: 'Average True Range',\n desc: 'Market volatility measurements',\n route: '/indicators_matrix#atr',\n hash: 'atr',\n queryParams: { matrix: 'indicators', section: 'atr' },\n },\n {\n id: 'vwap',\n title: 'VWAP',\n desc: 'Volume Weighted Average Price',\n route: '/indicators_matrix#vwap',\n hash: 'vwap',\n queryParams: { matrix: 'indicators', section: 'vwap' },\n },\n {\n id: 'rsi',\n title: 'RSI',\n desc: 'Momentum oscillator diagnostics',\n route: '/indicators_matrix#rsi',\n hash: 'rsi',\n queryParams: { matrix: 'indicators', section: 'rsi' },\n },\n {\n id: 'stochastic',\n title: 'Stochastic',\n desc: 'Cycle speed and turning points',\n route: '/indicators_matrix#stochastic',\n hash: 'stochastic',\n queryParams: { matrix: 'indicators', section: 'stochastic' },\n },\n {\n id: 'macd',\n title: 'MACD',\n desc: 'Trend convergence and divergence',\n route: '/indicators_matrix#macd',\n hash: 'macd',\n queryParams: { matrix: 'indicators', section: 'macd' },\n },\n {\n id: 'adx',\n title: 'ADX',\n desc: 'Directional trend strength indicator',\n route: '/indicators_matrix#adx',\n hash: 'adx',\n queryParams: { matrix: 'indicators', section: 'adx' },\n },\n ],\n },\n {\n id: 'quant',\n label: 'Quant',\n value: 'risk_reward_matrix',\n route: '/risk_reward_matrix',\n icon: Percent,\n description: 'Quantitative risk-return profile, Volatility measures & Bell curves',\n sections: [\n {\n id: 'performance',\n title: 'Performance Measure',\n desc: 'Sharpe, Treynor & risk-adjusted returns',\n route: '/risk_reward_matrix#performance',\n hash: 'performance',\n queryParams: { matrix: 'quant', section: 'performance' },\n },\n {\n id: 'volatility',\n title: 'Volatility Measure',\n desc: 'Beta, variance and standard deviation',\n route: '/risk_reward_matrix#volatility',\n hash: 'volatility',\n queryParams: { matrix: 'quant', section: 'volatility' },\n },\n {\n id: 'market-sensitivity',\n title: 'Market Sensitivity',\n desc: 'Correlation, co-variance and R-squared',\n route: '/risk_reward_matrix#market-sensitivity',\n hash: 'market-sensitivity',\n queryParams: { matrix: 'quant', section: 'market-sensitivity' },\n },\n {\n id: 'risk-profile',\n title: 'Risk Profile',\n desc: 'Downside risk and maximum drawdown',\n route: '/risk_reward_matrix#risk-profile',\n hash: 'risk-profile',\n queryParams: { matrix: 'quant', section: 'risk-profile' },\n },\n {\n id: 'bell-curves',\n title: 'Bell Curves',\n desc: 'Normal return distribution curves',\n route: '/risk_reward_matrix#bell-curves',\n hash: 'bell-curves',\n queryParams: { matrix: 'quant', section: 'bell-curves' },\n },\n ],\n },\n {\n id: 'formation',\n label: 'Formation',\n value: 'formation_matrix',\n route: '/formation_matrix',\n icon: Sparkles,\n description: 'Candlestick patterns, Fib retracement, VCP & AVWAP analysis',\n sections: [\n {\n id: 'single-candle',\n title: 'Single Candle Patterns',\n desc: 'Doji, hammer, marubozu formations',\n route: '/formation_matrix#single-candle',\n hash: 'single-candle',\n queryParams: { matrix: 'formation', section: 'single-candle' },\n },\n {\n id: 'double-candle',\n title: 'Double Candle Patterns',\n desc: 'Engulfing, harami and kicker reversals',\n route: '/formation_matrix#double-candle',\n hash: 'double-candle',\n queryParams: { matrix: 'formation', section: 'double-candle' },\n },\n {\n id: 'capitulation-exhaustion',\n title: 'Capitulation & Exhaustion',\n desc: 'Climax volume exhaustion signatures',\n route: '/formation_matrix#capitulation-exhaustion',\n hash: 'capitulation-exhaustion',\n queryParams: { matrix: 'formation', section: 'capitulation-exhaustion' },\n },\n {\n id: 'fav-unfav',\n title: 'Fav & Unfav Candles',\n desc: 'High-probability setup identification',\n route: '/formation_matrix#fav-unfav',\n hash: 'fav-unfav',\n queryParams: { matrix: 'formation', section: 'fav-unfav' },\n },\n {\n id: 'fib-retracement',\n title: 'Fib Retracement',\n desc: 'Key Golden Ratio retracement zones',\n route: '/formation_matrix#fib-retracement',\n hash: 'fib-retracement',\n queryParams: { matrix: 'formation', section: 'fib-retracement' },\n },\n {\n id: 'vcp',\n title: 'Volatility Contraction',\n desc: 'Volatility contraction pattern (VCP)',\n route: '/formation_matrix#vcp',\n hash: 'vcp',\n queryParams: { matrix: 'formation', section: 'vcp' },\n },\n {\n id: 'avwap',\n title: 'AVWAP Analysis',\n desc: 'Anchored volume-weighted average price',\n route: '/formation_matrix#avwap',\n hash: 'avwap',\n queryParams: { matrix: 'formation', section: 'avwap' },\n },\n ],\n },\n {\n id: 'news',\n label: 'News',\n value: 'news_matrix',\n route: '/news_matrix',\n icon: Newspaper,\n description: 'Real-time curated financial news feeds & industry developments',\n sections: [\n {\n id: 'latest-news',\n title: 'Latest News',\n desc: 'Live market headlines and breaking stories',\n route: '/news_matrix#latest-news',\n hash: 'latest-news',\n queryParams: { matrix: 'news', section: 'latest-news' },\n },\n {\n id: 'industry-news',\n title: 'Industry News',\n desc: 'Sectoral developments and macro updates',\n route: '/news_matrix#industry-news',\n hash: 'industry-news',\n queryParams: { matrix: 'news', section: 'industry-news' },\n },\n ],\n },\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 2. DATA: Charting Categories\n// ─────────────────────────────────────────────────────────────────────────────\nexport const chartingCategories = [\n {\n id: 'chart_types',\n label: 'Chart Types',\n type: 'candleType',\n route: '/',\n icon: BarChart2,\n description: 'Select your preferred visual candlestick or price action representation',\n items: [\n {\n id: 'candle',\n title: 'Standard Candle',\n desc: 'Traditional open-high-low-close candlestick',\n route: '/',\n queryParams: { candleType: 'candle' },\n },\n {\n id: 'heikinAshi',\n title: 'Heikin Ashi',\n desc: 'Filtered smoothed trend candlestick',\n route: '/',\n queryParams: { candleType: 'heikinAshi' },\n },\n {\n id: 'line',\n title: 'Line Chart',\n desc: 'Continuous close-to-close price line',\n route: '/',\n queryParams: { candleType: 'line' },\n },\n {\n id: 'area',\n title: 'Area Chart',\n desc: 'Filled gradient area under the close line',\n route: '/',\n queryParams: { candleType: 'area' },\n },\n {\n id: 'ohlc',\n title: 'OHLC Bars',\n desc: 'Western bar tick chart display',\n route: '/',\n queryParams: { candleType: 'ohlc' },\n },\n {\n id: 'hollow',\n title: 'Hollow Candles',\n desc: 'Color & fill based on close vs open and prior close',\n route: '/',\n queryParams: { candleType: 'hollow' },\n },\n {\n id: 'stepline',\n title: 'Step Line',\n desc: 'Stepped horizontal price progression',\n route: '/',\n queryParams: { candleType: 'stepline' },\n },\n {\n id: 'lineWithMarker',\n title: 'Line + Markers',\n desc: 'Close price line with discrete data points',\n route: '/',\n queryParams: { candleType: 'lineWithMarker' },\n },\n ],\n },\n {\n id: 'trend_indicators',\n label: 'Trend Indicators',\n type: 'indicator',\n route: '/',\n icon: TrendingUp,\n description: 'Moving averages and directional trend-following indicators',\n items: [\n {\n id: 'EMA',\n title: 'Exponential Moving Average (EMA)',\n desc: 'Weighted trend line responsive to recent data',\n route: '/',\n queryParams: { indicator: 'EMA' },\n },\n {\n id: 'SMA',\n title: 'Simple Moving Average (SMA)',\n desc: 'Arithmetic mean price over specified periods',\n route: '/',\n queryParams: { indicator: 'SMA' },\n },\n {\n id: 'wma',\n title: 'Weighted Moving Average (WMA)',\n desc: 'Linearly weighted trend moving average',\n route: '/',\n queryParams: { indicator: 'wma' },\n },\n {\n id: 'supertrend',\n title: 'SuperTrend (SuperT)',\n desc: 'ATR-based directional trend-following band',\n route: '/',\n queryParams: { indicator: 'supertrend' },\n },\n {\n id: 'alligator',\n title: 'Williams Alligator',\n desc: 'Jaw, teeth and lips trend phase indicator',\n route: '/',\n queryParams: { indicator: 'alligator' },\n },\n {\n id: 'psar',\n title: 'Parabolic SAR (PSAR)',\n desc: 'Trailing stop-and-reverse price markers',\n route: '/',\n queryParams: { indicator: 'psar' },\n },\n {\n id: 'AVWAP',\n title: 'Anchored VWAP (AVWAP)',\n desc: 'Volume weighted average price from anchor date',\n route: '/',\n queryParams: { indicator: 'AVWAP' },\n },\n ],\n },\n {\n id: 'momentum_oscillators',\n label: 'Momentum',\n type: 'indicator',\n route: '/',\n icon: Activity,\n description: 'Speed, rate of change, overbought and oversold condition detectors',\n items: [\n {\n id: 'rsiController',\n title: 'Relative Strength Index (RSI)',\n desc: 'Speed and magnitude of recent price changes',\n route: '/',\n queryParams: { indicator: 'rsiController' },\n },\n {\n id: 'macd',\n title: 'MACD Oscillator',\n desc: 'Moving Average Convergence Divergence',\n route: '/',\n queryParams: { indicator: 'macd' },\n },\n {\n id: 'stochastic_9_slow',\n title: 'Stochastic Slow',\n desc: 'Smoothed momentum oscillator for swing cycles',\n route: '/',\n queryParams: { indicator: 'stochastic_9_slow' },\n },\n {\n id: 'stochastic_9_fast',\n title: 'Stochastic Fast',\n desc: 'Fast-reacting momentum trigger',\n route: '/',\n queryParams: { indicator: 'stochastic_9_fast' },\n },\n {\n id: 'stochastic_9',\n title: 'Stochastic Full',\n desc: 'Full customizable stochastic oscillator',\n route: '/',\n queryParams: { indicator: 'stochastic_9' },\n },\n {\n id: 'ao',\n title: 'Awesome Oscillator (AO)',\n desc: 'Market momentum comparison of 34 and 5 periods',\n route: '/',\n queryParams: { indicator: 'ao' },\n },\n {\n id: 'adxController',\n title: 'Average Directional Index (ADX)',\n desc: 'Trend strength quantifier without direction',\n route: '/',\n queryParams: { indicator: 'adxController' },\n },\n ],\n },\n {\n id: 'volatility_bands',\n label: 'Volatility & Range',\n type: 'indicator',\n route: '/',\n icon: Sliders,\n description: 'Statistical price distribution and market volatility measurements',\n items: [\n {\n id: 'bollingerBands',\n title: 'Bollinger Bands (BB)',\n desc: 'Standard deviation volatility envelope',\n route: '/',\n queryParams: { indicator: 'bollingerBands' },\n },\n {\n id: 'atrController',\n title: 'Average True Range (ATR)',\n desc: 'True price volatility measure across candles',\n route: '/',\n queryParams: { indicator: 'atrController' },\n },\n {\n id: 'vo',\n title: 'Volume Oscillator (VO)',\n desc: 'Volume momentum oscillator',\n route: '/',\n queryParams: { indicator: 'vo' },\n },\n {\n id: 'fibonacciRetracement',\n title: 'Fibonacci Retracement (FIR)',\n desc: 'Golden Ratio price levels & extensions',\n route: '/',\n queryParams: { indicator: 'fibonacciRetracement' },\n },\n ],\n },\n {\n id: 'volume_analytics',\n label: 'Volume Analytics',\n type: 'indicator',\n route: '/',\n icon: Layers,\n description: 'Order flow, liquidity profiles and institutional accumulation levels',\n items: [\n {\n id: 'volume',\n title: 'Volume Bars',\n desc: 'Color-coded traded volume bars with EMA',\n route: '/',\n queryParams: { indicator: 'volume' },\n },\n {\n id: 'volprofile',\n title: 'Volume Profile (VolProfile)',\n desc: 'Volume distribution by price level (POC/VA)',\n route: '/',\n queryParams: { indicator: 'volprofile' },\n },\n {\n id: 'vwap',\n title: 'Volume Weighted Avg Price (VWAP)',\n desc: 'Session volume-weighted benchmark',\n route: '/',\n queryParams: { indicator: 'vwap' },\n },\n {\n id: 'VSMA',\n title: 'Volume SMA (VSMA)',\n desc: 'Volume simple moving average overlay',\n route: '/',\n queryParams: { indicator: 'VSMA' },\n },\n {\n id: 'vma',\n title: 'Volume Moving Average (VMA)',\n desc: 'Smooth volume moving average',\n route: '/',\n queryParams: { indicator: 'vma' },\n },\n {\n id: 'accumulation_distribution',\n title: 'Accumulation / Distribution',\n desc: 'Cumulative volume flow indicator',\n route: '/',\n queryParams: { indicator: 'accumulation_distribution' },\n },\n ],\n },\n {\n id: 'patterns',\n label: 'Candle Patterns',\n type: 'pattern',\n route: '/',\n icon: Sparkles,\n description: 'Algorithmic detection of single and multi-candle reversal structures',\n items: [\n {\n id: 'all_patterns',\n title: 'All Candle Patterns',\n desc: 'Auto-detect all known candlestick structures',\n route: '/',\n queryParams: { pattern: 'all_patterns' },\n },\n {\n id: 'perfect_doji',\n title: 'Perfect Doji',\n desc: 'Indecision bar with matching open and close',\n route: '/',\n queryParams: { pattern: 'perfect_doji' },\n },\n {\n id: 'hammer',\n title: 'Hammer',\n desc: 'Bullish reversal with long lower wick',\n route: '/',\n queryParams: { pattern: 'hammer' },\n },\n {\n id: 'reverse_hammer',\n title: 'Reverse Hammer',\n desc: 'Bullish bounce attempt after downtrend',\n route: '/',\n queryParams: { pattern: 'reverse_hammer' },\n },\n {\n id: 'marubozu',\n title: 'Marubozu',\n desc: 'Full-bodied momentum candle without wicks',\n route: '/',\n queryParams: { pattern: 'marubozu' },\n },\n {\n id: 'inside_bar',\n title: 'Inside Bar',\n desc: 'Volatility compression candle inside mother bar',\n route: '/',\n queryParams: { pattern: 'inside_bar' },\n },\n {\n id: 'bullish_harami',\n title: 'Bullish Harami',\n desc: 'Two-bar inside bullish reversal',\n route: '/',\n queryParams: { pattern: 'bullish_harami' },\n },\n {\n id: 'bearish_harami',\n title: 'Bearish Harami',\n desc: 'Two-bar inside bearish reversal',\n route: '/',\n queryParams: { pattern: 'bearish_harami' },\n },\n {\n id: 'bullish_engulfing',\n title: 'Bullish Engulfing',\n desc: 'Bullish candle completely engulfing prior bar',\n route: '/',\n queryParams: { pattern: 'bullish_engulfing' },\n },\n {\n id: 'bearish_engulfing',\n title: 'Bearish Engulfing',\n desc: 'Bearish candle completely engulfing prior bar',\n route: '/',\n queryParams: { pattern: 'bearish_engulfing' },\n },\n {\n id: 'bullish_kicker',\n title: 'Bullish Kicker',\n desc: 'Gap reversal explosive upward momentum',\n route: '/',\n queryParams: { pattern: 'bullish_kicker' },\n },\n {\n id: 'bearish_kicker',\n title: 'Bearish Kicker',\n desc: 'Gap reversal downward momentum',\n route: '/',\n queryParams: { pattern: 'bearish_kicker' },\n },\n ],\n },\n {\n id: 'conditions',\n label: 'Market Conditions',\n type: 'condition',\n route: '/',\n icon: SlidersHorizontal,\n description: 'Smart algorithmic scanner filters and market structure conditions',\n items: [\n {\n id: 'gapUp',\n title: 'Gap Up Open',\n desc: \"Today's open exceeds previous candle high\",\n route: '/',\n queryParams: { condition: 'gapUp' },\n },\n {\n id: 'gapDown',\n title: 'Gap Down Open',\n desc: \"Today's open falls below previous candle low\",\n route: '/',\n queryParams: { condition: 'gapDown' },\n },\n {\n id: 'tightCandle',\n title: 'Tight Range Candle',\n desc: 'Extremely compressed range coiling bar',\n route: '/',\n queryParams: { condition: 'tightCandle' },\n },\n {\n id: 'favCandle',\n title: 'Favorable Candle',\n desc: 'High conviction bullish market structure',\n route: '/',\n queryParams: { condition: 'favCandle' },\n },\n {\n id: 'unfavCandle',\n title: 'Unfavorable Candle',\n desc: 'High conviction bearish market structure',\n route: '/',\n queryParams: { condition: 'unfavCandle' },\n },\n {\n id: 'volumeAboveEMA',\n title: 'Volume Above EMA',\n desc: 'Surge above multi-day average volume',\n route: '/',\n queryParams: { condition: 'volumeAboveEMA' },\n },\n {\n id: 'ath52WHRange',\n title: 'ATH / 52W High Range',\n desc: 'Proximity to all-time or 52-week high',\n route: '/',\n queryParams: { condition: 'ath52WHRange' },\n },\n {\n id: 'atl52WLRange',\n title: 'ATL / 52W Low Range',\n desc: 'Proximity to all-time or 52-week low',\n route: '/',\n queryParams: { condition: 'atl52WLRange' },\n },\n {\n id: 'latestCHoch',\n title: 'Latest CHoCH Break',\n desc: 'Change of character market structure shift',\n route: '/',\n queryParams: { condition: 'latestCHoch' },\n },\n {\n id: 'latestSH',\n title: 'Latest Swing High',\n desc: 'Current prominent swing high resistance point',\n route: '/',\n queryParams: { condition: 'latestSH' },\n },\n {\n id: 'latestSL',\n title: 'Latest Swing Low',\n desc: 'Current prominent swing low support point',\n route: '/',\n queryParams: { condition: 'latestSL' },\n },\n ],\n },\n {\n id: 'timeframes',\n label: 'Timeframes',\n type: 'timeframe',\n route: '/',\n icon: Clock,\n description: 'Multi-timeframe analysis from intraday scalping to macro swing periods',\n items: [\n {\n id: 'minute',\n title: '1 Minute',\n desc: 'Ultra-fast scalping resolution',\n route: '/',\n queryParams: { interval: 'minute' },\n },\n {\n id: '3minute',\n title: '3 Minutes',\n desc: 'Intraday micro momentum',\n route: '/',\n queryParams: { interval: '3minute' },\n },\n {\n id: '5minute',\n title: '5 Minutes',\n desc: 'Standard day trading resolution',\n route: '/',\n queryParams: { interval: '5minute' },\n },\n {\n id: '15minute',\n title: '15 Minutes',\n desc: 'Intraday trend structure',\n route: '/',\n queryParams: { interval: '15minute' },\n },\n {\n id: '30minute',\n title: '30 Minutes',\n desc: 'Intraday swing structure',\n route: '/',\n queryParams: { interval: '30minute' },\n },\n {\n id: '60minute',\n title: '1 Hour',\n desc: 'Intermediate hourly trend',\n route: '/',\n queryParams: { interval: '60minute' },\n },\n {\n id: '2hour',\n title: '2 Hours',\n desc: 'Multi-hour position trend',\n route: '/',\n queryParams: { interval: '2hour' },\n },\n {\n id: '4hour',\n title: '4 Hours',\n desc: 'Major session market structure',\n route: '/',\n queryParams: { interval: '4hour' },\n },\n {\n id: 'day',\n title: 'Daily',\n desc: 'EOD swing trading baseline',\n route: '/',\n queryParams: { interval: 'day' },\n },\n {\n id: 'week',\n title: 'Weekly',\n desc: 'Medium-term macro trend',\n route: '/',\n queryParams: { interval: 'week' },\n },\n {\n id: 'month',\n title: 'Monthly',\n desc: 'Long-term investment perspective',\n route: '/',\n queryParams: { interval: 'month' },\n },\n ],\n },\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 3. DATA: Scanner Filter Categories\n// ─────────────────────────────────────────────────────────────────────────────\nexport const scannerCategories = [\n {\n id: 'popular_strategies',\n label: 'Popular Scans',\n route: '/',\n icon: Zap,\n description: 'Battle-tested multi-factor algorithmic screening strategies',\n items: [\n {\n id: 'bullish_breakout',\n title: 'Bullish Breakout (Volume + Price)',\n desc: 'Price break with 2x volume expansion',\n indicator: 'rsi_14',\n route: '/',\n queryParams: { addFilter: 'rsi_14', title: 'Bullish Breakout (Volume + Price)' },\n },\n {\n id: 'momentum_leaders',\n title: 'Momentum Leaders (RRG)',\n desc: 'Leading quadrant rotation with high RS',\n indicator: 'momentum',\n route: '/',\n queryParams: { addFilter: 'momentum', title: 'Momentum Leaders (RRG)' },\n },\n {\n id: '52w_high_break',\n title: '52-Week High Breakouts',\n desc: 'Crossing multi-month resistance levels',\n indicator: '252d_high_low_range',\n route: '/',\n queryParams: { addFilter: '252d_high_low_range', title: '52-Week High Breakouts' },\n },\n {\n id: 'golden_crossover',\n title: 'Golden Cross (EMA 50 / 200)',\n desc: 'Medium to long-term trend reversal',\n indicator: 'ema_price_50',\n route: '/',\n queryParams: { addFilter: 'ema_price_50', title: 'Golden Cross (EMA 50 / 200)' },\n },\n {\n id: 'oversold_reversal',\n title: 'Oversold RSI Reversal (< 30)',\n desc: 'Extreme discount bounce candidates',\n indicator: 'rsi_14',\n route: '/',\n queryParams: { addFilter: 'rsi_14', title: 'Oversold RSI Reversal (< 30)' },\n },\n {\n id: 'supertrend_bull',\n title: 'SuperTrend Bullish Flip',\n desc: 'Directional trend change confirmation',\n indicator: 'supertrend_direction_10',\n route: '/',\n queryParams: { addFilter: 'supertrend_direction_10', title: 'SuperTrend Bullish Flip' },\n },\n {\n id: 'high_delivery',\n title: 'High Delivery & Bulk Deals',\n desc: 'Institutional accumulation signatures',\n indicator: 'share_volume_profile_delivery',\n route: '/',\n queryParams: { addFilter: 'share_volume_profile_delivery', title: 'High Delivery & Bulk Deals' },\n },\n {\n id: 'vcp_coil',\n title: 'Volatility Contraction (VCP)',\n desc: 'Tightening range before explosive move',\n indicator: 'candle_spread',\n route: '/',\n queryParams: { addFilter: 'candle_spread', title: 'Volatility Contraction (VCP)' },\n },\n ],\n },\n {\n id: 'matrix_filters',\n label: 'Matrix Filters',\n route: '/',\n icon: Activity,\n description: 'Scan stocks using multi-dimensional diagnostic matrix attributes',\n items: [\n {\n id: 'rrg',\n title: 'Relative Rotation Grade (RRG)',\n desc: 'Leading, Weakening, Lagging, Improving',\n indicator: 'rrg',\n route: '/',\n queryParams: { addFilter: 'rrg', title: 'Relative Rotation Grade (RRG)' },\n },\n {\n id: 'price_strength',\n title: 'Price Strength Analysis',\n desc: 'Outperformance relative to Nifty index',\n indicator: 'price_strength',\n route: '/',\n queryParams: { addFilter: 'price_strength', title: 'Price Strength Analysis' },\n },\n {\n id: 'momentum',\n title: 'Momentum Diagnostics',\n desc: 'Rate of change and acceleration index',\n indicator: 'momentum',\n route: '/',\n queryParams: { addFilter: 'momentum', title: 'Momentum Diagnostics' },\n },\n {\n id: 'candle_spread',\n title: 'Candle Spread & Control',\n desc: 'Body vs wick dynamics and spread shifts',\n indicator: 'candle_spread',\n route: '/',\n queryParams: { addFilter: 'candle_spread', title: 'Candle Spread & Control' },\n },\n {\n id: 'circuits',\n title: 'Circuit Chart Diagnostics',\n desc: 'Upper and lower circuit boundary proximity',\n indicator: 'circuits',\n route: '/',\n queryParams: { addFilter: 'circuits', title: 'Circuit Chart Diagnostics' },\n },\n {\n id: 'ask_bid',\n title: 'Ask / Bid Ratio Flow',\n desc: 'Order book aggressive buyer dominance',\n indicator: 'ask_bid_ratio',\n route: '/',\n queryParams: { addFilter: 'ask_bid_ratio', title: 'Ask / Bid Ratio Flow' },\n },\n {\n id: 'fno_oi',\n title: 'F&O Open Interest Profile',\n desc: 'Long build-up and short covering shifts',\n indicator: 'fno_open_interest_profile',\n route: '/',\n queryParams: { addFilter: 'fno_open_interest_profile', title: 'F&O Open Interest Profile' },\n },\n {\n id: 'mf_holdings',\n title: 'Mutual Fund Accumulation',\n desc: 'Consecutive quarter stake increases',\n indicator: 'mf_holding',\n route: '/',\n queryParams: { addFilter: 'mf_holding', title: 'Mutual Fund Accumulation' },\n },\n ],\n },\n {\n id: 'technical_indicators',\n label: 'Indicators',\n route: '/',\n icon: Sliders,\n description: 'Technical condition triggers and mathematical indicator filters',\n items: [\n {\n id: 'sma_20',\n title: 'Simple Moving Average (SMA 20)',\n desc: '20-day trend baseline',\n indicator: 'sma_price_20',\n route: '/',\n queryParams: { addFilter: 'sma_price_20', title: 'Simple Moving Average (SMA 20)' },\n },\n {\n id: 'ema_50',\n title: 'Exponential Moving Average (EMA 50)',\n desc: '50-day momentum baseline',\n indicator: 'ema_price_50',\n route: '/',\n queryParams: { addFilter: 'ema_price_50', title: 'Exponential Moving Average (EMA 50)' },\n },\n {\n id: 'rsi_14',\n title: 'Relative Strength Index (RSI 14)',\n desc: 'Momentum speed and oversold levels',\n indicator: 'rsi_14',\n route: '/',\n queryParams: { addFilter: 'rsi_14', title: 'Relative Strength Index (RSI 14)' },\n },\n {\n id: 'macd',\n title: 'MACD Histogram (12, 26, 9)',\n desc: 'Zero line and signal line trigger filters',\n indicator: 'macd_histogram_26',\n route: '/',\n queryParams: { addFilter: 'macd_histogram_26', title: 'MACD Histogram (12, 26, 9)' },\n },\n {\n id: 'bollinger',\n title: 'Bollinger Bands Upper (20, 1)',\n desc: 'Bandwidth compression & breakouts',\n indicator: 'bollinger_upper_20_1',\n route: '/',\n queryParams: { addFilter: 'bollinger_upper_20_1', title: 'Bollinger Bands Upper (20, 1)' },\n },\n {\n id: 'supertrend',\n title: 'Supertrend Direction (10, 3)',\n desc: 'Trend-following trailing stop conditions',\n indicator: 'supertrend_direction_10',\n route: '/',\n queryParams: { addFilter: 'supertrend_direction_10', title: 'Supertrend Direction (10, 3)' },\n },\n {\n id: 'vwap',\n title: 'Volume Weighted Avg Price (VWAP)',\n desc: 'Institutional benchmark price filters',\n indicator: 'vwap',\n route: '/',\n queryParams: { addFilter: 'vwap', title: 'Volume Weighted Avg Price (VWAP)' },\n },\n {\n id: 'atr',\n title: 'Average True Range (ATR 14)',\n desc: 'Volatility thresholds & range expansion',\n indicator: 'atr_14',\n route: '/',\n queryParams: { addFilter: 'atr_14', title: 'Average True Range (ATR 14)' },\n },\n ],\n },\n {\n id: 'candlestick_patterns',\n label: 'Candle Patterns',\n route: '/',\n icon: Sparkles,\n description: 'Algorithmic visual price action formations & reversal structures',\n items: [\n {\n id: 'candle_pattern',\n title: 'Candle Pattern Detector',\n desc: 'Algorithmic single and multi-candle patterns',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', title: 'Candle Pattern Detector' },\n },\n {\n id: 'hammer',\n title: 'Hammer & Inverted Hammer',\n desc: 'Bullish exhaustion & rejection pins',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', pattern: 'hammer', title: 'Hammer & Inverted Hammer' },\n },\n {\n id: 'engulfing',\n title: 'Bullish & Bearish Engulfing',\n desc: 'Complete trend takeover candles',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', pattern: 'engulfing', title: 'Bullish & Bearish Engulfing' },\n },\n {\n id: 'harami',\n title: 'Bullish & Bearish Harami',\n desc: 'Inside bar gestation reversals',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', pattern: 'harami', title: 'Bullish & Bearish Harami' },\n },\n {\n id: 'marubozu',\n title: 'Marubozu Momentum Bars',\n desc: 'Full-bodied directional conviction',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', pattern: 'marubozu', title: 'Marubozu Momentum Bars' },\n },\n {\n id: 'doji',\n title: 'Doji & Star Formations',\n desc: 'Market equilibrium and pending breakouts',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', pattern: 'doji', title: 'Doji & Star Formations' },\n },\n ],\n },\n {\n id: 'workspaces',\n label: 'Workspaces & Radar',\n route: '/radar',\n icon: Radio,\n description: 'Saved custom screening presets, live scans, and background monitors',\n items: [\n {\n id: 'radar',\n title: 'Market Radar Live Feed',\n desc: 'Auto-refreshing real-time scanner signals',\n route: '/radar',\n },\n {\n id: 'saved_filters',\n title: 'Saved Filter Presets',\n desc: 'Manage and run your saved scanner queries',\n route: '/saved-filters',\n },\n {\n id: 'custom_screener',\n title: 'Build New Screener',\n desc: 'Design custom multi-group scanner rules',\n route: '/',\n },\n ],\n },\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 4. DATA: Faster / Macro Pulse Categories\n// ─────────────────────────────────────────────────────────────────────────────\nexport const macroPulseCategories = [\n {\n id: 'economy',\n label: 'Economy',\n value: 'Economy',\n dbName: 'Economy',\n dbId: '7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n icon: Globe,\n description: 'Key economic indicators, GDP, inflation, central bank rates & fiscal deficit',\n items: [\n {\n id: 'gdp_growth',\n title: 'GDP Growth Rate',\n desc: 'Quarterly economic expansion & GDP trajectories',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'gdp_growth' },\n },\n {\n id: 'inflation',\n title: 'Inflation Rate',\n desc: 'Consumer and wholesale price indices',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'inflation' },\n },\n {\n id: 'repo_rate',\n title: 'Repo Rate',\n desc: 'Monetary policy benchmark lending rates',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'repo_rate' },\n },\n {\n id: 'gst_collection',\n title: 'GST Collection',\n desc: 'Monthly gross indirect and direct tax revenue',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'gst_collection' },\n },\n {\n id: 'forex_reserves',\n title: 'Forex Reserves',\n desc: 'Central bank foreign currency & gold reserves',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'forex_reserves' },\n },\n {\n id: 'exports',\n title: 'Exports',\n desc: 'Monthly merchandise and services exports',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'exports' },\n },\n ],\n },\n {\n id: 'indices',\n label: 'Indices',\n value: 'Indices',\n dbName: 'Indices',\n dbId: 'd86c85c8-cb56-4b51-be64-f179f32588fd',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n icon: TrendingUp,\n description: 'Domestic sectoral benchmarks and global equity market indices',\n items: [\n {\n id: 'nifty_50',\n title: 'NIFTY 50 & SENSEX',\n desc: 'Benchmark headline market performance',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n queryParams: { indicator: 'nifty_50' },\n },\n {\n id: 'nifty_bank',\n title: 'NIFTY Bank & Fin Services',\n desc: 'Banking sector credit and liquidity index',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n queryParams: { indicator: 'nifty_bank' },\n },\n {\n id: 'nifty_it',\n title: 'NIFTY IT & Tech',\n desc: 'Technology export sector performance',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n queryParams: { indicator: 'nifty_it' },\n },\n {\n id: 'us_markets',\n title: 'US Markets (S&P, Nasdaq, DOW)',\n desc: 'Wall Street tech and broader market leads',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n queryParams: { indicator: 'us_markets' },\n },\n {\n id: 'asian_markets',\n title: 'Asian Markets (Nikkei, Hang Seng)',\n desc: 'Far East market sentiment indicators',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n queryParams: { indicator: 'asian_markets' },\n },\n ],\n },\n {\n id: 'commodity',\n label: 'Commodities',\n value: 'Commodity',\n dbName: 'Commodity',\n dbId: 'f816b25a-a54f-488b-b46c-adc7af328c9d',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n icon: Compass,\n description: 'Energy, precious metals, industrial metals & agri commodity markets',\n items: [\n {\n id: 'brent_crude',\n title: 'Brent Crude Oil',\n desc: 'Global energy benchmark price & trends',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n queryParams: { indicator: 'brent_crude' },\n },\n {\n id: 'gold_silver',\n title: 'Gold & Silver Futures',\n desc: 'Safe-haven precious metals performance',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n queryParams: { indicator: 'gold_silver' },\n },\n {\n id: 'natural_gas',\n title: 'Natural Gas',\n desc: 'Henry Hub energy & heating futures',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n queryParams: { indicator: 'natural_gas' },\n },\n {\n id: 'copper_steel',\n title: 'Copper & Steel Futures',\n desc: 'Industrial metals infrastructure demand',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n queryParams: { indicator: 'copper_steel' },\n },\n {\n id: 'sugar_agri',\n title: 'Sugar & Soft Commodities',\n desc: 'Agricultural supply and food price trends',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n queryParams: { indicator: 'sugar_agri' },\n },\n ],\n },\n {\n id: 'currency',\n label: 'Currencies & FX',\n value: 'Currency',\n dbName: 'Currency',\n dbId: '87853571-5ed2-4b87-b8da-8ac5d35be8be',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n icon: Percent,\n description: 'Dollar index, cross-currency pairs & crypto digital assets',\n items: [\n {\n id: 'dxy',\n title: 'Dollar Index (DXY)',\n desc: 'Greenback relative strength against basket',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n queryParams: { indicator: 'dxy' },\n },\n {\n id: 'usdinr',\n title: 'USD / INR',\n desc: 'Rupee exchange rate vs US Dollar',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n queryParams: { indicator: 'usdinr' },\n },\n {\n id: 'usdjpy',\n title: 'USD / JPY',\n desc: 'Yen carry trade and Asian FX barometer',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n queryParams: { indicator: 'usdjpy' },\n },\n {\n id: 'eurinr',\n title: 'EUR / INR',\n desc: 'Eurozone cross-rate stability benchmark',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n queryParams: { indicator: 'eurinr' },\n },\n {\n id: 'crypto_btc',\n title: 'Bitcoin / Crypto',\n desc: 'Digital asset liquidity and risk appetite',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n queryParams: { indicator: 'crypto_btc' },\n },\n ],\n },\n {\n id: 'bond_market',\n label: 'Bond Market',\n value: 'Bond market',\n dbName: 'Bond market',\n dbId: 'da0fd588-7c5f-44cd-84ec-90981aa56b10',\n route: '/user/category/Bond%20market/da0fd588-7c5f-44cd-84ec-90981aa56b10',\n icon: Activity,\n description: 'Sovereign bond yields, treasury bills & yield curves',\n items: [\n {\n id: 'india_10y',\n title: '10 Yr IND Bond Yield',\n desc: 'Domestic benchmark sovereign debt rate',\n route: '/user/category/Bond%20market/da0fd588-7c5f-44cd-84ec-90981aa56b10',\n queryParams: { indicator: 'india_10y' },\n },\n {\n id: 'us_10y',\n title: '10 Yr US Bond Yield',\n desc: 'Global risk-free benchmark hurdle rate',\n route: '/user/category/Bond%20market/da0fd588-7c5f-44cd-84ec-90981aa56b10',\n queryParams: { indicator: 'us_10y' },\n },\n {\n id: 'us_2y',\n title: '2 Yr US Bond Yield',\n desc: 'Short-term policy-sensitive treasury yield',\n route: '/user/category/Bond%20market/da0fd588-7c5f-44cd-84ec-90981aa56b10',\n queryParams: { indicator: 'us_2y' },\n },\n {\n id: 'tbills',\n title: '91D Treasury Bills Yield',\n desc: 'Short-term liquidity risk barometer',\n route: '/user/category/Bond%20market/da0fd588-7c5f-44cd-84ec-90981aa56b10',\n queryParams: { indicator: 'tbills' },\n },\n ],\n },\n {\n id: 'funds',\n label: 'Funds & Flows',\n value: 'Funds',\n dbName: 'Funds',\n dbId: 'acddb03c-9023-4096-9248-e8fe1da70022',\n route: '/user/category/Funds/acddb03c-9023-4096-9248-e8fe1da70022',\n icon: Layers,\n description: 'FPI flows, FDI trends, monthly SIP investments & mutual fund AUM',\n items: [\n {\n id: 'monthly_sip',\n title: 'Monthly SIP Collection',\n desc: 'Domestic retail monthly investment inflow',\n route: '/user/category/Funds/acddb03c-9023-4096-9248-e8fe1da70022',\n queryParams: { indicator: 'monthly_sip' },\n },\n {\n id: 'fpi_cash',\n title: 'FPI Cash Equity & Debt',\n desc: 'Foreign portfolio investment net flows',\n route: '/user/category/Funds/acddb03c-9023-4096-9248-e8fe1da70022',\n queryParams: { indicator: 'fpi_cash' },\n },\n {\n id: 'fdi',\n title: 'State-wise FDI Inflows',\n desc: 'Long-term direct foreign investment',\n route: '/user/category/Funds/acddb03c-9023-4096-9248-e8fe1da70022',\n queryParams: { indicator: 'fdi' },\n },\n {\n id: 'avg_aum',\n title: 'Avg Agg. AUM with MFs',\n desc: 'Mutual fund industry total assets',\n route: '/user/category/Funds/acddb03c-9023-4096-9248-e8fe1da70022',\n queryParams: { indicator: 'avg_aum' },\n },\n ],\n },\n {\n id: 'volatility',\n label: 'Volatility & Breadth',\n value: 'Volatility',\n dbName: 'Volatility',\n dbId: '2698a695-0b12-46ab-a6e0-87a954b40f66',\n route: '/user/category/Volatility/2698a695-0b12-46ab-a6e0-87a954b40f66',\n icon: Zap,\n description: 'India VIX, CBOE VIX, advance/decline market breadth & put-call ratios',\n items: [\n {\n id: 'india_vix',\n title: 'INDIA VIX',\n desc: 'Domestic equity market implied volatility',\n route: '/user/category/Volatility/2698a695-0b12-46ab-a6e0-87a954b40f66',\n queryParams: { indicator: 'india_vix' },\n },\n {\n id: 'cboe_vix',\n title: 'CBOE VIX Volatility',\n desc: 'Wall Street fear index benchmark',\n route: '/user/category/Volatility/2698a695-0b12-46ab-a6e0-87a954b40f66',\n queryParams: { indicator: 'cboe_vix' },\n },\n {\n id: 'pcr_nifty',\n title: 'PCR - NIFTY 50',\n desc: 'Put-call ratio sentiment gauge',\n route: '/user/category/Volatility/2698a695-0b12-46ab-a6e0-87a954b40f66',\n queryParams: { indicator: 'pcr_nifty' },\n },\n {\n id: 'adv_dec',\n title: 'Advance/Decline Ratio - NSE',\n desc: 'Broad market participation & breadth',\n route: '/user/category/Volatility/2698a695-0b12-46ab-a6e0-87a954b40f66',\n queryParams: { indicator: 'adv_dec' },\n },\n ],\n },\n {\n id: 'macro',\n label: 'Valuation (PE/PB)',\n value: 'Macro',\n dbName: 'Macro',\n dbId: '77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n route: '/user/category/Macro/77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n icon: BarChart2,\n description: 'Price-to-Earnings (PE) & Price-to-Book (PB) sectoral valuations',\n items: [\n {\n id: 'pe_nifty',\n title: 'PE - NIFTY 50',\n desc: 'Trailing price-to-earnings valuation ratio',\n route: '/user/category/Macro/77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n queryParams: { indicator: 'pe_nifty' },\n },\n {\n id: 'pb_nifty',\n title: 'PB - NIFTY 50',\n desc: 'Price-to-book valuation multiple',\n route: '/user/category/Macro/77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n queryParams: { indicator: 'pb_nifty' },\n },\n {\n id: 'pe_bank',\n title: 'PE - NIFTY Bank',\n desc: 'Banking sector PE valuation tracker',\n route: '/user/category/Macro/77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n queryParams: { indicator: 'pe_bank' },\n },\n {\n id: 'pe_nasdaq',\n title: 'PE - NASDAQ & DOW',\n desc: 'US tech and blue-chip PE comparisons',\n route: '/user/category/Macro/77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n queryParams: { indicator: 'pe_nasdaq' },\n },\n ],\n },\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 5. DATA: Derivatives Categories\n// ─────────────────────────────────────────────────────────────────────────────\nexport const derivativesCategories = [\n {\n id: 'option_chains',\n label: 'Option Chains',\n value: 'option_chains',\n route: '/option-chain',\n icon: GitFork,\n description: 'Live strike-wise option chain analytics, open interest, IV & Greeks',\n items: [\n {\n id: 'option-chain',\n title: 'Option Chain',\n desc: 'Live strike-wise CE/PE open interest, IV & Greeks',\n route: '/option-chain',\n queryParams: { tab: 'chain' },\n },\n ],\n },\n {\n id: 'positions',\n label: 'Positions',\n value: 'positions',\n route: '/positions',\n icon: BarChart2,\n description: 'Real-time portfolio positions, MTM monitoring and derivative ledger',\n items: [\n {\n id: 'positions',\n title: 'Positions',\n desc: 'Active open positions, MTM and derivative P&L',\n route: '/positions',\n queryParams: { tab: 'active' },\n },\n ],\n },\n {\n id: 'orders',\n label: 'Orders',\n value: 'orders',\n route: '/orders',\n icon: ClipboardList,\n description: 'Live order books, multi-leg execution statuses & trade transaction history',\n items: [\n {\n id: 'orders',\n title: 'Orders',\n desc: 'Live order book and transaction statuses',\n route: '/orders',\n },\n {\n id: 'orders-new',\n title: 'Orders New',\n desc: 'Advanced multi-leg order entry & execution',\n route: '/orders-new',\n },\n ],\n },\n {\n id: 'baskets',\n label: 'Baskets',\n value: 'baskets',\n route: '/v1/baskets',\n icon: ShoppingBasket,\n description: 'Multi-asset basket order execution and portfolio basket management',\n items: [\n {\n id: 'v1-baskets',\n title: 'Baskets',\n desc: 'Create and execute multi-leg basket orders',\n route: '/v1/baskets',\n },\n ],\n },\n {\n id: 'strategy',\n label: 'Strategy',\n value: 'strategy',\n route: '/strategy-chart',\n icon: Shuffle,\n description: 'Interactive payoff diagrams and multi-leg risk curves',\n items: [\n {\n id: 'strategy-chart',\n title: 'Strategy Chart',\n desc: 'Interactive payoff diagrams and multi-leg risk curves',\n route: '/strategy-chart',\n },\n ],\n },\n {\n id: 'settings',\n label: 'Settings',\n value: 'settings',\n route: '/settings/freeze-quantity',\n icon: Settings,\n description: 'Freeze quantity thresholds & broker user permissions',\n items: [\n {\n id: 'freeze-quantity',\n title: 'Freeze Quantity',\n desc: 'Max freeze quantity limit per underlying',\n route: '/settings/freeze-quantity',\n },\n {\n id: 'users',\n title: 'Users',\n desc: 'Broker account linking and permissions',\n route: '/settings/users',\n },\n ],\n },\n];\n","import { Activity, BarChart2, BookmarkCheck, Globe, Layers, Radio, Scan, TrendingUp } from 'lucide-react';\nimport {\n chartingCategories,\n derivativesCategories,\n macroPulseCategories,\n scannerCategories,\n stockXRayCategories,\n} from '../constants/categories';\n\nexport const defaultHeaderConfig = {\n authApiUrl: 'https://sso-api.datatokenapi.com/api',\n authRedirectUrl: 'https://sso.datatokenapi.com',\n profileGetter: null,\n uiTheme: 'system',\n currentApp: 'derivatives',\n themeParamName: 'theme',\n appendThemeParam: true,\n urls: {\n landing: 'https://fastr.pro',\n sso: 'https://sso.datatokenapi.com',\n purchase: 'https://sso.datatokenapi.com/purchase',\n profile: 'https://sso.datatokenapi.com/profile',\n xray: 'https://xray-pro.datatokenapi.com',\n scanner: 'https://scanner-pro.datatokenapi.com',\n charting: 'https://chart-pro.datatokenapi.com',\n macro: 'https://macropulse-pro.datatokenapi.com',\n derivatives: 'https://derivatives-pro.datatokenapi.com',\n },\n apps: {\n xray: {\n id: 'xray',\n name: 'Stock X-Ray',\n label: 'Stock X-Ray',\n url: 'http://localhost:5173',\n icon: Activity,\n bannerImage: '/images/bull_market.png',\n badge: 'Stock X-Ray',\n badgeColor: 'text-yellow-400',\n footerNote: 'Click any section to inspect diagnostic',\n menuHeader: 'Matrices',\n description: 'Comprehensive multi-dimensional stock diagnostics & matrix insights for precision trading.',\n hasMegaMenu: true,\n pages: stockXRayCategories,\n },\n scanner: {\n id: 'scanner',\n name: 'Scanner',\n label: 'Scanner',\n url: 'http://localhost:3001',\n icon: Scan,\n bannerImage: '/images/bull_market.png',\n badge: 'FASTR SCANNER',\n badgeColor: 'text-emerald-400',\n footerNote: 'Click any filter to open in Scanner',\n menuHeader: 'Filter Groups',\n description:\n 'Algorithmic multi-factor stock screening engine with 17+ matrix groups, real-time indicators, and automated radar tracking.',\n hasMegaMenu: true,\n quickActions: [\n {\n id: 'saved_filters',\n title: 'Saved Filters',\n icon: BookmarkCheck,\n route: '/saved-filters',\n badgeColor: 'text-blue-500',\n },\n {\n id: 'radar',\n title: 'Live Radar',\n icon: Radio,\n route: '/radar',\n badgeColor: 'text-emerald-500',\n },\n ],\n pages: scannerCategories,\n },\n charting: {\n id: 'charting',\n name: 'Charting',\n label: 'Charting',\n url: 'http://localhost:3002',\n icon: TrendingUp,\n bannerImage: '/images/bull_market.png',\n badge: 'FASTR CHARTING',\n badgeColor: 'text-blue-400',\n footerNote: 'Click any item to open in Charting',\n menuHeader: 'Charting Tools',\n description:\n 'Professional multi-timeframe charting with 25+ technical indicators, automated candlestick patterns & conditions.',\n hasMegaMenu: true,\n pages: chartingCategories,\n },\n derivatives: {\n id: 'derivatives',\n name: 'Derivatives',\n label: 'Derivatives',\n url: 'https://derivatives-test.datatokenapi.com',\n icon: Layers,\n bannerImage: '/images/bull_market.png',\n badge: 'FASTR DERIVATIVES',\n badgeColor: 'text-amber-500',\n footerNote: 'Click any item to open module',\n menuHeader: 'Modules',\n description: 'Professional options analytics, live chain matrix, systematic strategies & automated execution.',\n hasMegaMenu: true,\n quickActions: [\n {\n id: 'positions',\n title: 'Live Positions',\n icon: BarChart2,\n route: '/positions',\n badgeColor: 'text-blue-500',\n },\n ],\n pages: derivativesCategories,\n },\n macro: {\n id: 'macro',\n name: 'Macro Pulse',\n label: 'Macro Pulse',\n url: 'http://localhost:3000',\n icon: Globe,\n bannerImage: '/images/bull_market.png',\n badge: 'FASTR MACRO PULSE',\n badgeColor: 'text-purple-400',\n footerNote: 'Click any item to open in Macro Pulse',\n menuHeader: 'Macro Sectors',\n description:\n 'Macroeconomic indicators, global market trends, commodity prices, institutional flows & policy trackers.',\n hasMegaMenu: true,\n pages: macroPulseCategories,\n },\n },\n};\n\n/**\n * Deeply merges user-provided config with defaultHeaderConfig.\n */\nexport function createHeaderConfig(userConfig = {}) {\n if (!userConfig) return { ...defaultHeaderConfig };\n\n const mergedUrls = {\n ...defaultHeaderConfig.urls,\n ...(userConfig.urls || {}),\n };\n\n // Merge apps\n let mergedApps = {};\n if (Array.isArray(userConfig.apps)) {\n mergedApps = userConfig.apps.reduce((acc, app) => {\n const defaultApp = defaultHeaderConfig.apps[app.id] || {};\n acc[app.id] = {\n ...defaultApp,\n ...app,\n pages: app.pages || app.categories || defaultApp.pages || [],\n };\n return acc;\n }, {});\n } else if (userConfig.apps && typeof userConfig.apps === 'object') {\n const allKeys = Array.from(new Set([...Object.keys(defaultHeaderConfig.apps), ...Object.keys(userConfig.apps)]));\n for (const key of allKeys) {\n const defaultApp = defaultHeaderConfig.apps[key] || {};\n const customApp = userConfig.apps[key];\n if (customApp) {\n mergedApps[key] = {\n ...defaultApp,\n ...customApp,\n id: customApp.id || key,\n pages: customApp.pages || customApp.categories || defaultApp.pages || [],\n };\n } else {\n mergedApps[key] = { ...defaultApp };\n }\n }\n } else {\n mergedApps = { ...defaultHeaderConfig.apps };\n }\n\n return {\n ...defaultHeaderConfig,\n ...userConfig,\n urls: mergedUrls,\n apps: mergedApps,\n };\n}\n\nexport default defaultHeaderConfig;\n","import React from 'react';\n\n/**\n * Safely renders an icon whether passed as a Lucide component,\n * a functional component, a JSX Element, a string, or undefined.\n */\nexport function renderIcon(IconOrNode, props = {}) {\n if (!IconOrNode) return null;\n\n // If already a valid React element (e.g. <Activity className=\"size-4\" />)\n if (React.isValidElement(IconOrNode)) {\n return React.cloneElement(IconOrNode, {\n ...props,\n className: `${IconOrNode.props.className || ''} ${props.className || ''}`.trim(),\n });\n }\n\n // If a React component function/class (e.g. Activity or (props) => <svg ... />)\n if (typeof IconOrNode === 'function' || (typeof IconOrNode === 'object' && IconOrNode.$$typeof)) {\n const Component = IconOrNode;\n return <Component {...props} />;\n }\n\n // If a string (e.g. emoji or text icon)\n if (typeof IconOrNode === 'string') {\n return <span className={props.className}>{IconOrNode}</span>;\n }\n\n return null;\n}\n\nexport default renderIcon;\n","/**\n * URL builder utility for Fastr Global Header and Mega Menu navigation.\n * Resolves full or relative URLs, merges search query params, theme param, and hash anchors.\n */\nexport function buildItemUrl({\n baseUrl = '',\n route = '',\n href = '',\n queryParams = {},\n params = {},\n hash = '',\n currentTheme = '',\n appendTheme = true,\n themeParamName = 'theme',\n isCurrentApp = false,\n}) {\n let target = href || route || '/';\n\n // If in another app and baseUrl is provided, make it absolute\n if (!isCurrentApp && baseUrl && !target.startsWith('http://') && !target.startsWith('https://')) {\n const cleanBase = baseUrl.replace(/\\/+$/, '');\n const cleanPath = target.startsWith('/') ? target : `/${target}`;\n target = `${cleanBase}${cleanPath}`;\n }\n\n try {\n const dummyBase =\n typeof window !== 'undefined' && window.location?.origin ? window.location.origin : 'http://localhost';\n const isAbsolute = target.startsWith('http://') || target.startsWith('https://');\n const parsed = new URL(target, dummyBase);\n\n // Merge query params\n const mergedParams = {\n ...(queryParams || {}),\n ...(params || {}),\n };\n\n Object.entries(mergedParams).forEach(([k, v]) => {\n if (v !== undefined && v !== null && v !== '') {\n parsed.searchParams.set(k, String(v));\n }\n });\n\n // Theme param handling\n if (appendTheme && currentTheme) {\n parsed.searchParams.set(themeParamName, currentTheme);\n }\n\n // Hash handling\n if (hash) {\n const cleanHash = hash.startsWith('#') ? hash : `#${hash}`;\n parsed.hash = cleanHash;\n }\n\n if (isAbsolute) {\n return parsed.toString();\n }\n return parsed.pathname + parsed.search + parsed.hash;\n } catch {\n return target;\n }\n}\n\n/**\n * Appends current theme param to a given URL if not already present.\n */\nexport function withThemeParam(url, currentTheme, themeParamName = 'theme') {\n if (!url || url.startsWith('#') || url.startsWith('java' + 'script:')) return url;\n try {\n const dummyBase =\n typeof window !== 'undefined' && window.location?.origin ? window.location.origin : 'http://localhost';\n const isRelative = url.startsWith('/');\n const u = new URL(url, dummyBase);\n if (currentTheme) {\n u.searchParams.set(themeParamName, currentTheme);\n }\n const clean = isRelative ? u.pathname + u.search + u.hash : u.toString();\n return clean.replace(/([^:]\\/)\\/+/g, '$1');\n } catch {\n return url;\n }\n}\n","'use client';\n\nimport { ArrowRight, ChevronRight } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { cn } from '../lib/utils';\nimport { renderIcon } from '../utils/renderIcon';\nimport { buildItemUrl } from '../utils/url';\n\nexport default function GlobalMegaMenu({\n app,\n type = 'macro', // fallback id if app object is not directly passed\n config,\n currentApp = 'derivatives',\n isDarkMode = false,\n isSubscribed = true,\n purchaseUrl = '',\n categoryData = [],\n onClose,\n onNavigate,\n urls = {},\n theme = '',\n // Optional Charting tool callbacks\n onSelectCandleType,\n onSelectIndicator,\n onSelectPattern,\n onSelectCondition,\n onSelectInterval,\n}) {\n // Resolve app config\n const resolvedApp = app || (config?.apps ? config.apps[type] : null) || { id: type };\n const appId = resolvedApp.id || type;\n const appName = resolvedApp.name || resolvedApp.label || appId;\n const appUrl = resolvedApp.url || urls[appId] || '';\n const isCurrentApp = currentApp === appId;\n\n const bannerImage = resolvedApp.bannerImage || '/images/bull_market.png';\n const badgeText = resolvedApp.badge || appName;\n const badgeColor = resolvedApp.badgeColor || 'text-primary';\n const description = resolvedApp.description || '';\n const menuHeader = resolvedApp.menuHeader || resolvedApp.categoriesHeader || 'Navigation';\n const footerNote = resolvedApp.footerNote || '';\n const quickActions = resolvedApp.quickActions || [];\n\n // Resolve pages/categories\n const pages = resolvedApp.pages || resolvedApp.categories || [];\n\n // Active category state\n const [activePage, setActivePage] = useState(() => (pages.length > 0 ? pages[0] : null));\n\n useEffect(() => {\n if (pages.length > 0) {\n setActivePage(pages[0]);\n } else {\n setActivePage(null);\n }\n }, [appId, pages]);\n\n // Compute base URL for an item\n const getComputedUrl = (itemOrPage, defaultRoute = '/') => {\n return buildItemUrl({\n baseUrl: appUrl,\n route: itemOrPage.route || defaultRoute,\n href: itemOrPage.href,\n queryParams: itemOrPage.queryParams,\n params: itemOrPage.params,\n hash: itemOrPage.hash,\n currentTheme: theme,\n appendTheme: config?.appendThemeParam !== false,\n themeParamName: config?.themeParamName || 'theme',\n isCurrentApp,\n });\n };\n\n const appOverviewUrl = useMemo(() => {\n return buildItemUrl({\n baseUrl: appUrl,\n route: resolvedApp.route || '/',\n href: resolvedApp.href,\n queryParams: resolvedApp.queryParams,\n params: resolvedApp.params,\n currentTheme: theme,\n appendTheme: config?.appendThemeParam !== false,\n themeParamName: config?.themeParamName || 'theme',\n isCurrentApp,\n });\n }, [appUrl, resolvedApp, theme, config, isCurrentApp]);\n\n // Click interceptor that respects Ctrl/Cmd new-tab clicks, custom onClick, client router, and subscription gates\n const handleLinkClick = (e, targetUrl, customOnClick, itemOrPage) => {\n // If modifier key is pressed, let browser handle open in new tab\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1) {\n return;\n }\n\n if (isSubscribed === false) {\n e.preventDefault();\n if (onClose) onClose();\n const redirectUrl = purchaseUrl || `${urls.sso || 'http://localhost:3123'}/purchase?app=${appId}`;\n window.location.assign(redirectUrl);\n return;\n }\n\n if (customOnClick) {\n e.preventDefault();\n if (onClose) onClose();\n customOnClick(itemOrPage, activePage, resolvedApp);\n return;\n }\n\n // Charting tool selection in current app\n if (isCurrentApp && appId === 'charting' && itemOrPage) {\n if (activePage?.type === 'candleType' && onSelectCandleType) {\n e.preventDefault();\n onSelectCandleType(itemOrPage.id);\n if (onClose) onClose();\n return;\n }\n if (activePage?.type === 'indicator' && onSelectIndicator) {\n e.preventDefault();\n onSelectIndicator(itemOrPage.id);\n if (onClose) onClose();\n return;\n }\n if (activePage?.type === 'pattern' && onSelectPattern) {\n e.preventDefault();\n onSelectPattern(itemOrPage.id);\n if (onClose) onClose();\n return;\n }\n if (activePage?.type === 'condition' && onSelectCondition) {\n e.preventDefault();\n onSelectCondition(itemOrPage.id);\n if (onClose) onClose();\n return;\n }\n if (activePage?.type === 'timeframe' && onSelectInterval) {\n e.preventDefault();\n onSelectInterval(itemOrPage.id);\n if (onClose) onClose();\n return;\n }\n }\n\n // Stock X-Ray scroll to section in current app\n if (isCurrentApp && appId === 'xray' && itemOrPage?.hash) {\n const sectionId = itemOrPage.hash || itemOrPage.id;\n window.dispatchEvent(new CustomEvent('xray:scroll-to-section', { detail: { sectionId } }));\n let attempts = 0;\n const tryScroll = (retryCount = 0) => {\n const el = document.getElementById(sectionId);\n if (el) {\n const headerOffset = 75;\n const elementPosition = el.getBoundingClientRect().top;\n const offsetPosition = elementPosition + window.pageYOffset - headerOffset;\n window.scrollTo({ top: Math.max(0, offsetPosition), behavior: 'smooth' });\n if (retryCount < 3) {\n setTimeout(() => tryScroll(retryCount + 1), 400);\n }\n } else if (attempts < 30) {\n attempts++;\n setTimeout(() => tryScroll(retryCount), 100);\n }\n };\n setTimeout(() => tryScroll(0), 60);\n }\n\n // Scanner add filter in current app\n if (isCurrentApp && appId === 'scanner' && itemOrPage?.indicator) {\n window.dispatchEvent(\n new CustomEvent('scanner:add-filter', {\n detail: { indicator: itemOrPage.indicator, id: itemOrPage.id, title: itemOrPage.title },\n }),\n );\n }\n\n // Client router navigation\n if (isCurrentApp && onNavigate) {\n e.preventDefault();\n if (onClose) onClose();\n onNavigate(targetUrl, resolvedApp, itemOrPage);\n } else {\n if (onClose) onClose();\n }\n };\n\n const currentItems = activePage ? activePage.sections || activePage.items || [] : [];\n\n return (\n <div\n className=\"bg-popover text-popover-foreground border-border w-285 max-w-[96vw] rounded-xl border p-4 shadow-2xl transition-all\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-[1fr_1fr_3fr]\">\n {/* 1. Leftmost Column: Overview Card & Quick Action Links */}\n <div className=\"border-border flex flex-col justify-between border-b pr-0 pb-4 lg:border-r lg:border-b-0 lg:pr-4 lg:pb-0\">\n <div>\n <a\n href={appOverviewUrl}\n onClick={(e) => handleLinkClick(e, appOverviewUrl, resolvedApp.onClick, resolvedApp)}\n className=\"group border-border bg-muted relative block aspect-16/10 overflow-hidden rounded-lg border shadow-xs\"\n >\n {bannerImage && (\n <img\n src={bannerImage}\n alt={badgeText}\n className=\"h-full w-full object-cover transition-transform duration-500 group-hover:scale-105\"\n onError={(e) => {\n e.target.style.display = 'none';\n }}\n />\n )}\n <div className=\"absolute inset-0 flex items-end bg-linear-to-t from-black/75 via-black/20 to-transparent p-2.5\">\n <span className=\"border-border/40 bg-background/80 text-foreground inline-flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-[10px] font-bold tracking-wider uppercase backdrop-blur-xs\">\n {renderIcon(resolvedApp.icon, { className: `size-3.5 ${badgeColor}` })}\n <span>{badgeText}</span>\n </span>\n </div>\n </a>\n\n {description && <p className=\"text-muted-foreground mt-3 text-xs leading-relaxed\">{description}</p>}\n </div>\n\n {/* Quick Action Links or Footer Note */}\n {quickActions.length > 0 ? (\n <div className=\"flex flex-col gap-1.5 pt-3\">\n {quickActions.map((qa) => {\n const qaUrl = getComputedUrl(qa, qa.route || '/');\n return (\n <a\n key={qa.id}\n href={qaUrl}\n onClick={(e) => handleLinkClick(e, qaUrl, qa.onClick, qa)}\n className=\"border-border/60 bg-muted/50 hover:bg-accent hover:text-accent-foreground text-foreground group flex w-full cursor-pointer items-center justify-between rounded-lg border px-2.5 py-1.5 text-xs font-semibold transition-colors\"\n >\n <span className=\"flex items-center gap-1.5\">\n {renderIcon(qa.icon, { className: `size-3.5 ${qa.badgeColor || 'text-primary'}` })}\n <span>{qa.title || qa.label}</span>\n </span>\n <ArrowRight className=\"text-muted-foreground group-hover:text-foreground size-3 transition-transform group-hover:translate-x-0.5\" />\n </a>\n );\n })}\n </div>\n ) : footerNote ? (\n <div className=\"text-muted-foreground text-[11px] font-medium\">{footerNote}</div>\n ) : null}\n </div>\n\n {/* 2. Middle Column: Category / Page Links List */}\n <div className=\"border-border flex flex-col justify-between border-b pr-0 pb-3 lg:border-r lg:border-b-0 lg:pr-4 lg:pb-0\">\n <div>\n <div className=\"border-border mb-3 border-b pb-3\">\n <span className=\"text-muted-foreground text-xs font-bold\">{menuHeader}</span>\n </div>\n\n <div className=\"flex flex-col gap-1\">\n {pages.map((page) => {\n const isSelected = activePage && activePage.id === page.id;\n const pageUrl = getComputedUrl(page, page.route || `/${page.value || page.id}`);\n\n return (\n <a\n key={page.id}\n href={pageUrl}\n onClick={(e) => handleLinkClick(e, pageUrl, page.onClick, page)}\n onMouseEnter={() => setActivePage(page)}\n className={cn(\n 'flex w-full cursor-pointer items-center justify-between rounded-lg px-3 py-2 text-left text-xs font-medium transition-all select-none sm:text-sm',\n isSelected\n ? 'bg-primary text-primary-foreground font-semibold shadow-xs'\n : 'text-muted-foreground hover:bg-accent hover:text-accent-foreground',\n )}\n >\n <div className=\"flex items-center gap-2.5\">\n {renderIcon(page.icon, {\n className: cn(\n 'size-4 shrink-0',\n isSelected ? 'text-primary-foreground' : 'text-muted-foreground group-hover:text-foreground',\n ),\n })}\n <span>{page.label || page.title || page.name}</span>\n </div>\n <ChevronRight\n className={cn('size-3.5 transition-transform', isSelected ? 'opacity-100' : 'opacity-0')}\n />\n </a>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* 3. Right Column: Active Page Header & 3-Column Items Grid Links */}\n <div className=\"flex min-w-0 flex-col\">\n {/* Active Page Header */}\n {activePage && (\n <div className=\"border-border mb-3 flex items-center justify-between border-b pb-3\">\n <div>\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-foreground text-sm font-bold sm:text-base\">\n {activePage.label || activePage.title}\n </h3>\n <span className=\"border-border bg-muted text-muted-foreground rounded-full border px-2 py-0.5 text-[11px] font-medium\">\n {currentItems.length} Options\n </span>\n </div>\n {activePage.description && (\n <p className=\"text-muted-foreground mt-0.5 text-xs\">{activePage.description}</p>\n )}\n </div>\n </div>\n )}\n\n {/* 3-Column Grid of Section / Tool Cards (Every Card is an <a> tag) */}\n <div className=\"flex-1\">\n <div className=\"no-scrollbar grid max-h-85 grid-cols-1 gap-2.5 overflow-y-auto pr-1 sm:grid-cols-2 lg:grid-cols-3\">\n {currentItems.map((item) => {\n const itemUrl = getComputedUrl(item, activePage?.route || '/');\n\n return (\n <a\n key={item.id}\n href={itemUrl}\n onClick={(e) => handleLinkClick(e, itemUrl, item.onClick, item)}\n className=\"group border-border bg-card hover:bg-accent/60 hover:border-primary/40 flex min-h-18 cursor-pointer flex-col justify-between rounded-lg border p-3 text-left shadow-xs transition-all\"\n >\n <div className=\"mb-1.5 flex items-start justify-between gap-1.5\">\n <span className=\"text-card-foreground group-hover:text-accent-foreground line-clamp-2 text-xs leading-snug font-semibold\">\n {item.title || item.name || item.label}\n </span>\n <ArrowRight className=\"text-muted-foreground group-hover:text-primary mt-0.5 size-3 shrink-0 transition-all group-hover:translate-x-0.5\" />\n </div>\n <span className=\"text-muted-foreground line-clamp-1 text-[10px] font-medium\">\n {item.desc || item.description || 'Inspect →'}\n </span>\n </a>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport {\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuPositioner,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from '@/components/ui/navigation-menu';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { createHeaderConfig } from '@/config/defaultConfig';\nimport { cn } from '@/lib/utils';\nimport { renderIcon } from '@/utils/renderIcon';\nimport { buildItemUrl } from '@/utils/url';\nimport { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport {\n Calendar,\n Check,\n ChevronRight,\n CreditCard,\n ExternalLink,\n LogOut,\n Monitor,\n Moon,\n Sun,\n User,\n} from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport FasterProLogo from './FasterProLogo';\nimport GlobalMegaMenu from './GlobalMegaMenu';\n\nfunction formatDate(dateStr) {\n if (!dateStr) return '';\n try {\n const d = new Date(dateStr);\n if (isNaN(d.getTime())) return dateStr;\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n } catch {\n return dateStr;\n }\n}\n\nexport default function GlobalHeader({\n config: userConfig,\n authApiUrl: propAuthApiUrl,\n authRedirectUrl: propAuthRedirectUrl,\n profileGetter: propProfileGetter,\n uiTheme: propUiTheme,\n apps: propApps,\n user: propUser,\n logout: propLogout,\n theme: controlledTheme,\n setTheme: controlledSetTheme,\n currentApp: propCurrentApp,\n navigate,\n onNavigate,\n urls: propUrls = {},\n logo,\n onLogoClick,\n categoryData = [],\n chartingCallbacks = {},\n products: customProducts,\n extraRightContent,\n className,\n}) {\n // 1. Resolve unified config\n const config = useMemo(() => {\n const directProps = {\n ...(propAuthApiUrl ? { authApiUrl: propAuthApiUrl } : {}),\n ...(propAuthRedirectUrl ? { authRedirectUrl: propAuthRedirectUrl } : {}),\n ...(propProfileGetter ? { profileGetter: propProfileGetter } : {}),\n ...(propUiTheme ? { uiTheme: propUiTheme } : {}),\n ...(propApps ? { apps: propApps } : {}),\n ...(propCurrentApp ? { currentApp: propCurrentApp } : {}),\n ...(propUrls && Object.keys(propUrls).length > 0 ? { urls: propUrls } : {}),\n };\n\n return createHeaderConfig({\n ...(userConfig || {}),\n ...directProps,\n });\n }, [\n userConfig,\n propAuthApiUrl,\n propAuthRedirectUrl,\n propProfileGetter,\n propUiTheme,\n propApps,\n propCurrentApp,\n propUrls,\n ]);\n\n const currentApp = propCurrentApp || config.currentApp || 'derivatives';\n const authApiUrl = (config.authApiUrl || 'https://sso-api.datatokenapi.com/api').replace(/\\/+$/, '');\n const authRedirectUrl = (config.authRedirectUrl || config.urls?.sso || 'https://sso.datatokenapi.com').replace(\n /\\/+$/,\n '',\n );\n const profileGetter = propProfileGetter || config.profileGetter;\n\n // 2. Profile resolution & fetching\n const [fetchedUser, setFetchedUser] = useState(null);\n const [userLoading, setUserLoading] = useState(false);\n\n useEffect(() => {\n if (propUser !== undefined || config.user !== undefined) return;\n\n if (typeof profileGetter === 'function') {\n setUserLoading(true);\n Promise.resolve(profileGetter())\n .then((res) => {\n setFetchedUser(res?.data || res?.user || res);\n })\n .catch((err) => {\n console.warn('[GlobalHeader] profileGetter error:', err);\n })\n .finally(() => {\n setUserLoading(false);\n });\n } else if (authApiUrl && typeof window !== 'undefined') {\n setUserLoading(true);\n const meUrl = authApiUrl.endsWith('/api') ? `${authApiUrl}/auth/me` : `${authApiUrl}/api/auth/me`;\n const fallbackUrl = authApiUrl.endsWith('/api') ? `${authApiUrl}/auth/profile` : `${authApiUrl}/api/auth/profile`;\n\n fetch(meUrl, { credentials: 'include' })\n .then((r) => {\n if (r.ok) return r.json();\n return fetch(fallbackUrl, { credentials: 'include' }).then((r2) => (r2.ok ? r2.json() : null));\n })\n .then((data) => {\n if (data) setFetchedUser(data?.data || data?.user || data);\n })\n .catch(() => {})\n .finally(() => setUserLoading(false));\n }\n }, [propUser, config.user, profileGetter, authApiUrl]);\n\n const user = propUser !== undefined ? propUser : config.user !== undefined ? config.user : fetchedUser;\n\n // Helper to find corresponding app from user.apps or user.all_apps\n const findUserApp = (productId) => {\n const appsList = user?.apps || user?.all_apps || [];\n const target = (productId || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n return appsList.find((a) => {\n const code = (a.code || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n const name = (a.name || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n return (\n (target.includes('scanner') && (code.includes('scanner') || name.includes('scanner'))) ||\n (target.includes('chart') && (code.includes('chart') || name.includes('chart'))) ||\n (target.includes('deriv') && (code.includes('deriv') || name.includes('deriv'))) ||\n (target.includes('macro') && (code.includes('macro') || name.includes('macro'))) ||\n (target.includes('xray') &&\n (code.includes('xray') ||\n name.includes('xray') ||\n name.includes('stockxray') ||\n name.includes('stock-x-ray'))) ||\n name === target ||\n code === target\n );\n });\n };\n\n // 3. Theme management\n const [internalTheme, setInternalTheme] = useState(() => {\n if (typeof window !== 'undefined') {\n return localStorage.getItem('theme') || config.uiTheme || 'system';\n }\n return config.uiTheme || 'system';\n });\n\n const theme = controlledTheme !== undefined ? controlledTheme : internalTheme;\n\n const setTheme = (newTheme) => {\n if (controlledSetTheme) {\n controlledSetTheme(newTheme);\n } else {\n setInternalTheme(newTheme);\n if (typeof window !== 'undefined') {\n localStorage.setItem('theme', newTheme);\n if (newTheme === 'dark') {\n document.documentElement.classList.add('dark');\n } else if (newTheme === 'light') {\n document.documentElement.classList.remove('dark');\n } else {\n if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n }\n }\n }\n };\n\n const [systemDark, setSystemDark] = useState(() => {\n if (typeof window !== 'undefined') {\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n return false;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n const onChange = (e) => setSystemDark(e.matches);\n mq.addEventListener('change', onChange);\n return () => mq.removeEventListener('change', onChange);\n }, []);\n\n const isDark = theme === 'dark' || (theme === 'system' && systemDark);\n const [profileOpen, setProfileOpen] = useState(false);\n const [navValue, setNavValue] = useState('');\n const [lockedModalApp, setLockedModalApp] = useState(null);\n const firstButtonRef = useRef(null);\n\n // 4. URL resolution\n const ssoProfileUrl = config.urls?.profile || `${authRedirectUrl}/profile`;\n const ssoPurchaseUrl = config.urls?.purchase || `${authRedirectUrl}/purchase`;\n const landingUrl = config.urls?.landing || 'http://localhost:3005';\n\n const getAppPurchaseUrl = (productId) => {\n const matchedApp = findUserApp(productId);\n if (matchedApp && matchedApp.id) {\n return `${ssoPurchaseUrl}?app_id=${matchedApp.id}`;\n }\n return `${ssoPurchaseUrl}?app=${productId}`;\n };\n\n const isAppSubscribed = (productId) => {\n if (!user) return true;\n if (user?.role === 'superadmin' || user?.is_superadmin) return true;\n\n const target = (productId || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n\n // Check user.subscriptions object/map (e.g. { \"stock x-ray\": { status: \"active\" }, ... })\n const subs = user?.subscriptions;\n if (subs && !Array.isArray(subs) && typeof subs === 'object') {\n for (const [key, val] of Object.entries(subs)) {\n const k = key.toLowerCase().replace(/[^a-z0-9]/g, '');\n const isMatch =\n (target.includes('scanner') && k.includes('scanner')) ||\n (target.includes('chart') && k.includes('chart')) ||\n (target.includes('deriv') && k.includes('deriv')) ||\n (target.includes('macro') && k.includes('macro')) ||\n (target.includes('xray') && (k.includes('xray') || k.includes('stockxray'))) ||\n k === target;\n\n if (isMatch) {\n const status = typeof val === 'object' ? val?.status : val;\n if (status === 'active' || status === 'expiring_soon') {\n return true;\n }\n }\n }\n } else if (Array.isArray(subs) && subs.length > 0) {\n for (const sub of subs) {\n const name = (sub?.app_name || sub?.name || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n const code = (sub?.app_code || sub?.code || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n const isMatch =\n (target.includes('scanner') && (name.includes('scanner') || code.includes('scanner'))) ||\n (target.includes('chart') && (name.includes('chart') || code.includes('chart'))) ||\n (target.includes('deriv') && (name.includes('deriv') || code.includes('deriv'))) ||\n (target.includes('macro') && (name.includes('macro') || code.includes('macro'))) ||\n (target.includes('xray') && (name.includes('xray') || name.includes('stockxray') || code.includes('xray'))) ||\n name === target ||\n code === target;\n\n if (isMatch) {\n const status = sub?.status || sub?.subscription_status;\n if (status === 'active' || status === 'expiring_soon') {\n return true;\n }\n }\n }\n }\n\n // Check user.apps / user.all_apps array\n const matchedApp = findUserApp(productId);\n if (matchedApp) {\n if (['superadmin', 'admin', 'staff'].includes(matchedApp.role)) {\n return true;\n }\n return (\n matchedApp.subscription_status === 'active' ||\n matchedApp.subscription_status === 'expiring_soon' ||\n matchedApp.is_subscribed === true\n );\n }\n\n // Check single top-level user.subscription\n if (user?.subscription?.status === 'active' || user?.subscription?.status === 'expiring_soon') {\n return true;\n }\n\n return false;\n };\n\n const getUserDisplayName = () => {\n const raw = user?.fullName || user?.full_name || user?.name;\n if (raw && typeof raw === 'string' && raw.trim() && !raw.includes('@')) {\n return raw.trim();\n }\n\n if (user?.email && typeof user.email === 'string') {\n const local = user.email.split('@')[0];\n const cleaned = local.replace(/[._0-9+-]+/g, ' ').trim();\n if (cleaned) {\n return cleaned\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n }\n }\n return raw || 'User';\n };\n\n const handleNavigate = (path, app, item) => {\n if (onNavigate) {\n onNavigate(path, app, item);\n } else if (navigate) {\n navigate(path);\n } else {\n window.location.assign(path);\n }\n };\n\n const handleLogout = () => {\n const logoutFn = propLogout || config.logout;\n if (logoutFn) {\n logoutFn();\n } else {\n window.location.assign(`${authRedirectUrl}/logout`);\n }\n };\n\n // 5. Products normalization from config.apps\n const products = useMemo(() => {\n if (customProducts) return customProducts;\n\n const appsConfig = config.apps || {};\n const appEntries = Array.isArray(appsConfig)\n ? appsConfig\n : Object.entries(appsConfig).map(([id, app]) => ({ id, ...app }));\n\n return appEntries.map((app) => {\n const appId = app.id;\n const appName = app.name || app.label || appId;\n const hasMegaMenu = app.hasMegaMenu !== false && Boolean(app.pages?.length || app.categories?.length);\n const userApp = findUserApp(appId);\n const appUrl = app.url || config.urls?.[appId] || userApp?.app_url || '';\n\n const itemHref = buildItemUrl({\n baseUrl: appUrl,\n route: app.route || '/',\n href: app.href,\n queryParams: app.queryParams,\n params: app.params,\n currentTheme: theme,\n appendTheme: config.appendThemeParam !== false,\n themeParamName: config.themeParamName || 'theme',\n isCurrentApp: appId === currentApp,\n });\n\n return {\n id: appId,\n name: appName,\n icon: app.icon,\n isActive: appId === currentApp,\n hasMegaMenu,\n href: itemHref,\n rawApp: {\n ...app,\n url: appUrl,\n },\n };\n });\n }, [\n customProducts,\n config.apps,\n config.urls,\n config.appendThemeParam,\n config.themeParamName,\n currentApp,\n theme,\n user,\n ]);\n\n const handleProductClick = (e, item) => {\n const rawApp = item.rawApp || {};\n\n if (rawApp.onClick) {\n e.preventDefault();\n rawApp.onClick(rawApp);\n return;\n }\n\n if (item.id !== currentApp && !isAppSubscribed(item.id)) {\n e.preventDefault();\n setNavValue('');\n window.location.assign(getAppPurchaseUrl(item.id));\n return;\n }\n\n if (item.id === 'derivatives') {\n e.preventDefault();\n setNavValue((prev) => (prev === 'derivatives' ? '' : 'derivatives'));\n handleNavigate('/positions', rawApp, item);\n } else if (item.id === currentApp && (onNavigate || navigate)) {\n e.preventDefault();\n setNavValue('');\n handleNavigate(item.href, rawApp, item);\n }\n };\n\n return (\n <header className={cn('bg-background sticky top-0 z-50 w-full border-b', className)}>\n <div className=\"relative flex h-10 w-full items-center justify-between gap-4 px-3 sm:h-12 sm:px-4\">\n {/* Left Side: Brand Logo & Product Navigation Menu */}\n <div className=\"no-scrollbar flex items-center gap-4 overflow-x-auto py-1 lg:gap-6\">\n {/* Brand Logo Link */}\n <a\n href={landingUrl}\n className=\"mr-1 flex shrink-0 cursor-pointer items-center gap-1.5 select-none\"\n onClick={(e) => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1) return;\n if (onLogoClick) {\n e.preventDefault();\n onLogoClick();\n }\n }}\n >\n {logo || <FasterProLogo className=\"h-9 w-auto sm:h-10\" isDarkMode={isDark} />}\n </a>\n\n {/* Product Navigation Menu */}\n <NavigationMenuPrimitive.Root\n value={navValue}\n onValueChange={setNavValue}\n data-slot=\"navigation-menu\"\n className=\"group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\"\n >\n <NavigationMenuList className=\"gap-0\">\n {products.map((item, index) => {\n const rawApp = item.rawApp || item;\n\n if (item.hasMegaMenu) {\n return (\n <NavigationMenuItem key={item.id} value={item.id}>\n <NavigationMenuTrigger\n ref={index === 0 ? firstButtonRef : undefined}\n className={cn(\n 'gap-1.5',\n item.isActive &&\n 'bg-primary hover:bg-primary! hover:text-primary-foreground! text-primary-foreground font-semibold',\n )}\n >\n {renderIcon(item.icon, { className: 'size-4' })}\n <span>{item.name}</span>\n </NavigationMenuTrigger>\n <NavigationMenuContent className=\"p-0 rounded-xl overflow-hidden\">\n <GlobalMegaMenu\n app={rawApp}\n type={item.id}\n config={config}\n currentApp={currentApp}\n isDarkMode={isDark}\n isSubscribed={isAppSubscribed(item.id)}\n purchaseUrl={getAppPurchaseUrl(item.id)}\n categoryData={categoryData}\n theme={theme}\n onClose={() => setNavValue('')}\n onNavigate={handleNavigate}\n urls={config.urls}\n {...chartingCallbacks}\n />\n </NavigationMenuContent>\n </NavigationMenuItem>\n );\n }\n\n return (\n <NavigationMenuItem key={item.id} value={item.id}>\n <NavigationMenuLink asChild>\n <a\n ref={index === 0 ? firstButtonRef : undefined}\n href={item.href || '/'}\n onClick={(e) => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1) return;\n handleProductClick(e, item);\n }}\n className={cn(\n navigationMenuTriggerStyle(),\n 'cursor-pointer gap-1.5',\n item.isActive && 'bg-accent text-accent-foreground font-semibold',\n )}\n >\n {renderIcon(item.icon, { className: 'size-4' })}\n <span>{item.name}</span>\n </a>\n </NavigationMenuLink>\n </NavigationMenuItem>\n );\n })}\n </NavigationMenuList>\n <NavigationMenuPositioner align=\"start\" anchor={firstButtonRef} />\n </NavigationMenuPrimitive.Root>\n </div>\n\n {/* Right Side: Extra Content, Theme Selector & User Profile */}\n <div className=\"flex shrink-0 items-center gap-2\">\n {extraRightContent}\n\n {/* Theme Mode Selector (Light, Dark, System) */}\n <DropdownMenu>\n <DropdownMenuTrigger\n className=\"hover:bg-accent hover:text-accent-foreground text-muted-foreground flex size-8 cursor-pointer items-center justify-center rounded-lg transition-colors sm:size-8.5\"\n title={`Theme: ${theme === 'system' ? 'System Default' : theme === 'dark' ? 'Dark' : 'Light'}`}\n >\n {theme === 'system' ? (\n <Monitor className=\"size-4.5\" />\n ) : isDark ? (\n <Sun className=\"size-4.5\" />\n ) : (\n <Moon className=\"size-4.5\" />\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44\">\n {[\n { id: 'light', label: 'Light', icon: Sun },\n { id: 'dark', label: 'Dark', icon: Moon },\n { id: 'system', label: 'System Default', icon: Monitor },\n ].map((opt) => {\n const Icon = opt.icon;\n const isSelected = theme === opt.id;\n return (\n <DropdownMenuItem\n key={opt.id}\n onClick={() => setTheme(opt.id)}\n className=\"cursor-pointer justify-between\"\n >\n <div className=\"flex items-center gap-2\">\n <Icon className=\"size-4\" />\n <span>{opt.label}</span>\n </div>\n {isSelected && <Check className=\"size-3.5\" />}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {/* User Profile Popover */}\n <Popover open={profileOpen} onOpenChange={setProfileOpen}>\n <PopoverTrigger className=\"hover:bg-accent hover:text-accent-foreground text-foreground flex cursor-pointer justify-center items-center size-10! gap-2 rounded-full p-0 transition-colors select-none\">\n <div className=\"relative\">\n <div className=\"border-border/60 bg-muted flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-full border\">\n {user?.profile_image_url ? (\n <img\n src={user.profile_image_url}\n alt={getUserDisplayName()}\n className=\"size-full object-cover\"\n referrerPolicy=\"no-referrer\"\n onError={(e) => {\n e.currentTarget.style.display = 'none';\n }}\n />\n ) : (\n <User className=\"text-muted-foreground size-3.5 sm:size-4\" />\n )}\n </div>\n {user && (\n <span className=\"border-background absolute bottom-0 right-0 size-2.5 rounded-full border-2 bg-emerald-500\" />\n )}\n </div>\n </PopoverTrigger>\n\n <PopoverContent\n className=\"border-border bg-popover text-popover-foreground w-84 gap-0! rounded-xl p-0 shadow-2xl\"\n align=\"end\"\n >\n {/* 1. Profile Header */}\n <div className=\"border-border/60 bg-muted/20 border-b p-3\">\n <div className=\"flex items-end gap-3\">\n <div className=\"relative shrink-0\">\n <div className=\"border-border bg-muted flex size-14 items-center justify-center overflow-hidden rounded-full border shadow-xs\">\n {user?.profile_image_url ? (\n <img\n src={user.profile_image_url}\n alt={getUserDisplayName()}\n className=\"size-full object-cover\"\n referrerPolicy=\"no-referrer\"\n />\n ) : (\n <User className=\"text-muted-foreground size-6\" />\n )}\n </div>\n <span className=\"border-popover absolute bottom-0 right-0 size-3 rounded-full border-2 bg-emerald-500\" />\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-1.5\">\n <p className=\"text-foreground truncate text-sm font-bold tracking-tight\">\n {getUserDisplayName()}\n </p>\n <span className=\"border-border bg-muted text-muted-foreground shrink-0 rounded-md border px-1.5 py-0.5 text-[10px] font-semibold capitalize\">\n {user?.is_superadmin ? 'Superadmin' : user?.role || 'User'}\n </span>\n </div>\n <p className=\"text-muted-foreground truncate text-xs font-medium\">{user?.email || ''}</p>\n </div>\n </div>\n\n {/* 2. Subscription Status Banner Card */}\n <div className=\" bg-primary/5 mt-3 rounded-lg p-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-foreground text-xs font-bold\">\n {user?.subscription?.plan_name ? `${user.subscription.plan_name} Plan` : 'Fastr Pro Member'}\n </span>\n </div>\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] text-emerald-600 dark:text-emerald-400\">\n <Check className=\"size-3 text-emerald-500\" />\n {user?.subscription?.status ? user.subscription.status.toUpperCase() : 'ACTIVE'}\n </span>\n </div>\n\n {user?.subscription?.expiry_date && (\n <div className=\"text-muted-foreground mt-2 flex items-center justify-between text-[11px]\">\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"text-muted-foreground/70 size-3\" />\n Renews: {formatDate(user.subscription.expiry_date)}\n </span>\n <a\n href={ssoPurchaseUrl}\n className=\"text-primary hover:text-primary/80 font-semibold transition-colors hover:underline\"\n >\n Manage →\n </a>\n </div>\n )}\n </div>\n </div>\n\n {/* 3. Subscribed Applications Launcher */}\n <div className=\"border-border/60 border-b p-3\">\n <div className=\"mb-2 flex items-center justify-between px-1\">\n <span className=\"text-muted-foreground text-[11px] font-bold\">My Applications</span>\n <span className=\"text-muted-foreground text-[10px]\">\n {products.filter((p) => isAppSubscribed(p.id)).length}/{products.length} Active\n </span>\n </div>\n <div className=\"grid grid-cols-2 gap-1.5\">\n {products.map((p) => {\n const subscribed = isAppSubscribed(p.id);\n return (\n <a\n key={p.id}\n href={p.href}\n onClick={(e) => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1) return;\n if (p.id === currentApp) {\n e.preventDefault();\n setProfileOpen(false);\n return;\n }\n if (!subscribed) {\n e.preventDefault();\n setProfileOpen(false);\n window.location.assign(getAppPurchaseUrl(p.id));\n }\n }}\n className={cn(\n 'flex items-center justify-between rounded-lg border p-2 text-xs transition-all',\n p.isActive\n ? 'border-primary/10 bg-primary/10 text-primary shadow-2xs font-bold'\n : subscribed\n ? 'border-border/50 bg-card text-foreground hover:bg-accent hover:border-border'\n : 'border-border/60 bg-muted/30 text-muted-foreground hover:bg-muted/60 border-dashed',\n )}\n >\n <div className=\"flex min-w-0 items-center gap-1.5\">\n {renderIcon(p.icon, {\n className: cn(\n 'size-3.5 shrink-0',\n p.isActive ? 'text-primary' : subscribed ? 'text-foreground' : 'text-muted-foreground',\n ),\n })}\n <span className=\"truncate\">{p.name}</span>\n </div>\n {p.isActive ? (\n <span className=\"bg-primary size-1.5 rounded-full\" />\n ) : subscribed ? (\n <ExternalLink className=\"text-muted-foreground size-2.5 opacity-60\" />\n ) : (\n <span className=\"text-[9px] font-bold text-amber-500 uppercase\">Buy</span>\n )}\n </a>\n );\n })}\n </div>\n </div>\n\n {/* 4. Action Links */}\n <div className=\"space-y-1 p-2\">\n <a\n href={ssoProfileUrl}\n className=\"hover:bg-accent hover:text-accent-foreground text-foreground group flex w-full items-center justify-between rounded-lg px-2.5 py-2 text-xs font-semibold transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <User className=\"text-muted-foreground group-hover:text-foreground size-4 transition-colors\" />\n <span>Profile & Account Settings</span>\n </div>\n <ChevronRight className=\"text-muted-foreground/60 group-hover:text-foreground size-3.5 transition-transform group-hover:translate-x-0.5\" />\n </a>\n\n <a\n href={ssoPurchaseUrl}\n className=\"hover:bg-accent hover:text-accent-foreground text-foreground group flex w-full items-center justify-between rounded-lg px-2.5 py-2 text-xs font-semibold transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <CreditCard className=\"text-muted-foreground group-hover:text-foreground size-4 transition-colors\" />\n <span>Billing & Subscriptions</span>\n </div>\n <ChevronRight className=\"text-muted-foreground/60 group-hover:text-foreground size-3.5 transition-transform group-hover:translate-x-0.5\" />\n </a>\n </div>\n <div className=\"border-border/60 my-1 border-t p-2\">\n <button\n onClick={handleLogout}\n className=\"text-destructive hover:bg-destructive/10 flex w-full cursor-pointer items-center justify-between rounded-lg px-2.5 py-2 text-xs font-semibold transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <LogOut className=\"size-4\" />\n <span>Sign Out</span>\n </div>\n </button>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n </div>\n\n {/* Subscription Locked Modal */}\n {lockedModalApp && (\n <div\n className=\"animate-in fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-xs duration-200\"\n onClick={() => setLockedModalApp(null)}\n >\n <div\n className=\"animate-in zoom-in-95 bg-card text-card-foreground border-border flex w-full max-w-md transform flex-col items-center rounded-xl border p-8 text-center shadow-2xl transition-all duration-200 sm:max-w-lg sm:p-10\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"bg-destructive/10 text-destructive mb-6 flex h-16 w-16 items-center justify-center rounded-xl\">\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n </div>\n\n <h2 className=\"text-foreground mb-2 text-xl font-bold tracking-tight sm:text-2xl\">\n {lockedModalApp.name} isn't included in your current subscription.\n </h2>\n\n <p className=\"text-muted-foreground mb-8 max-w-sm text-sm sm:text-base\">\n Add {lockedModalApp.name} to your subscription to unlock full access.\n </p>\n\n <button\n type=\"button\"\n onClick={() => {\n const matchedApp = user?.apps?.find(\n (a) =>\n (a.code || '').toLowerCase().includes(lockedModalApp.id.toLowerCase()) ||\n (a.name || '').toLowerCase().includes(lockedModalApp.name.toLowerCase()),\n );\n const purchaseUrl = matchedApp?.id\n ? `${ssoPurchaseUrl}?app_id=${matchedApp.id}`\n : `${ssoPurchaseUrl}?app=${lockedModalApp.id}`;\n window.location.assign(purchaseUrl);\n }}\n className=\"bg-primary text-primary-foreground hover:bg-primary/90 w-full max-w-xs cursor-pointer rounded-xl px-6 py-3 text-sm font-medium shadow-sm transition-all sm:text-base\"\n >\n View Plans\n </button>\n\n <button\n type=\"button\"\n onClick={() => setLockedModalApp(null)}\n className=\"text-muted-foreground hover:text-foreground mt-5 cursor-pointer text-sm font-medium transition-colors\"\n >\n Maybe Later\n </button>\n </div>\n </div>\n )}\n </header>\n );\n}\n","import './styles/globals.css';\n\nimport FasterProLogo from './components/FasterProLogo';\nimport GlobalHeader from './components/GlobalHeader';\nimport GlobalMegaMenu from './components/GlobalMegaMenu';\n\nexport { FasterProLogo, GlobalHeader, GlobalMegaMenu };\n\nexport { createHeaderConfig, defaultHeaderConfig } from './config/defaultConfig';\nexport { renderIcon } from './utils/renderIcon';\nexport { buildItemUrl, withThemeParam } from './utils/url';\n\nexport {\n chartingCategories,\n derivativesCategories,\n macroPulseCategories,\n scannerCategories,\n stockXRayCategories,\n} from './constants/categories';\n\nexport * from './components/ui/dropdown-menu';\nexport * from './components/ui/navigation-menu';\nexport * from './components/ui/popover';\nexport { cn } from './lib/utils';\n\nexport default GlobalHeader;\n"],"x_google_ignoreList":[1,2,3],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../src/components/FasterProLogo.jsx","../node_modules/cn/dist/tables.js","../node_modules/cn/dist/engine.js","../node_modules/cn/dist/index.js","../src/components/ui/dropdown-menu.jsx","../src/components/ui/navigation-menu.jsx","../src/components/ui/popover.jsx","../src/constants/categories.js","../src/config/defaultConfig.js","../src/utils/renderIcon.jsx","../src/utils/url.js","../src/components/GlobalMegaMenu.jsx","../src/components/GlobalHeader.jsx","../src/index.js"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport const FasterProLogo = ({ className = 'h-9 w-auto cursor-pointer', isDarkMode, theme, ...props }) => {\n const [systemDark, setSystemDark] = useState(false);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const checkDark = () => {\n const isDarkClass =\n document.documentElement.classList.contains('dark') || document.body.classList.contains('dark');\n setSystemDark(isDarkClass);\n };\n\n checkDark();\n\n const observer = new MutationObserver(checkDark);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n\n return () => observer.disconnect();\n }, []);\n\n const isDark =\n isDarkMode !== undefined ? Boolean(isDarkMode) : theme === 'dark' ? true : theme === 'light' ? false : systemDark;\n\n const mainFill = isDark ? '#F5F7FA' : '#17212B';\n\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1000 500\" className={className} {...props}>\n <defs>\n <linearGradient id=\"faster-blue\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0%\" stopColor=\"#1455E8\" />\n <stop offset=\"55%\" stopColor=\"#087FF5\" />\n <stop offset=\"100%\" stopColor=\"#08B9E8\" />\n </linearGradient>\n </defs>\n\n <rect x=\"170\" y=\"120\" width=\"120\" height=\"14\" rx=\"7\" fill=\"#087FF5\" />\n <rect x=\"130\" y=\"158\" width=\"170\" height=\"14\" rx=\"7\" fill=\"#5BB5FA\" />\n <rect x=\"160\" y=\"196\" width=\"130\" height=\"14\" rx=\"7\" fill=\"#087FF5\" />\n\n <path\n d=\"M360 80 C380 48 410 32 448 32 H680 L650 78\n C638 97 616 108 585 108 H330 Z\"\n fill=\"url(#faster-blue)\"\n />\n\n <path\n d=\"M410 125 H635 L605 174 C594 191 576 199 552 199\n H492 L450 305 C439 333 418 350 385 350 H325\n L400 165 C403 151 406 137 410 125 Z\"\n fill={mainFill}\n />\n\n <path d=\"M465 225 H565 L540 270 H447 Z\" fill={mainFill} />\n\n <text\n x=\"500\"\n y=\"440\"\n textAnchor=\"middle\"\n fontFamily=\"Arial, Helvetica, sans-serif\"\n fontSize=\"130\"\n fontWeight=\"900\"\n fontStyle=\"italic\"\n letterSpacing=\"-3\"\n >\n <tspan fill={mainFill}>FASTER</tspan>\n <tspan fill=\"url(#faster-blue)\"> PRO</tspan>\n </text>\n </svg>\n );\n};\n\nexport default FasterProLogo;\n","//#region src/tables.generated.ts\nconst P = 48;\nconst U = (s, o = 0) => {\n\tconst out = new Int32Array(s.length);\n\tfor (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i) - P - o;\n\treturn out;\n};\nconst PS = (counts) => {\n\tconst out = new Int32Array(counts.length + 1);\n\tfor (let i = 0; i < counts.length; i++) out[i + 1] = out[i] + counts[i];\n\treturn out;\n};\nconst DZ = (s) => {\n\tconst out = new Int32Array(s.length);\n\tlet a = 0;\n\tfor (let i = 0; i < s.length; i++) {\n\t\tconst z = s.charCodeAt(i) - P;\n\t\ta += z >>> 1 ^ -(z & 1);\n\t\tout[i] = a;\n\t}\n\treturn out;\n};\nconst GROUP_COUNT = 384;\nconst customValidatorNames = [];\nconst edgeStart = PS(U(\"E0500002005282000000002000150000020021820000011200000003022202000300004200120000200420001200021200301200010400162000010000220021010:2192001200220012000220012000200200200400010200040000000000400200108200110100000022010313000162002000020020012020080213000228200000000082000000000120002000120020020040101020300130001001010\"));\nconst labelStart = PS(U(\":11111111211111119311546544411119731869:671397415686432441111111111161114151214313433415:78311132233313187211117221449443411141111151152226611131111112212518142224214215421421542142424242516171151615616347111111111197911327451111111111111111111113134714133513411111311111111111111111111112444411111342312715245411117:3\"));\nconst labelText = \"@containerabcdefghinlmoprstunderlineviawzccentlignnimatespectuto-colsrowsaglorightnessckdrop-sisbcontrastfiltergrayscalehue-rotateinvertopacityslurrightnessaturateepia-coniclinearpositionradialsizeockurrderttom-belrstxyespacing-xyaretoursorlnt-umnsendspantartainentrasteividerop-shadowurationcorationlay-xyasendillexontromlter-featuresstretchapr-xyayscaleidow-colsrowsue-rotatedentlinesetvert-beringsxyeshadoweiadingftnest-clamp-imageabein-lrstxyskx--b-coniclpositionrsizet-x-y-fromto-fromto-inearfromto-fromto-adialfromto-fromtofromtofromtofromtoblockhinlinew-screenesblockhinlinewbjectpacityrutlinederigin-offsetbelrstxyesrspective-originaceholderioghtng-offsettateundedw-xyz-belrstlreseslr-endspantartaturatecepiahizekewpace-taleroll-xyz-barmpbelrstxyesbelrstxyes-thumbrackadowrink-xyxyartrokeabextora-shadowpckingnsformitionlate-xyz-offsetill-changeoom\";\nconst edgeTarget = (() => {\n\tconst N = edgeStart.length - 1;\n\tconst sizes = new Int32Array(N);\n\tfor (let i = N - 1; i >= 0; i--) {\n\t\tlet s = 1;\n\t\tlet c = i + 1;\n\t\tfor (let k = edgeStart[i]; k < edgeStart[i + 1]; k++) {\n\t\t\ts += sizes[c];\n\t\t\tc += sizes[c];\n\t\t}\n\t\tsizes[i] = s;\n\t}\n\tconst out = new Int32Array(edgeStart[N]);\n\tlet e = 0;\n\tfor (let i = 0; i < N; i++) {\n\t\tlet c = i + 1;\n\t\tfor (let k = edgeStart[i]; k < edgeStart[i + 1]; k++) {\n\t\t\tout[e++] = c;\n\t\t\tc += sizes[c];\n\t\t}\n\t}\n\treturn out;\n})();\nconst nodeGroup = U(\"02000000000000900<=0?000B000F00F00ŏI0J0LNPRTVX0000]_a00000000000000000000000rst0000000zŏ00000000000
ŏ0000000ŏ00000000000000000000000000000000000000000000000000000000000000Ë000000000000000000000Þ000000000000000000ð0000000ø0ùúûüýþÿĀāĂ㥹Ć000000000000000000000000000000000000000000ħ0ĨĪ00000000000000000000ļĽ00000Ŭ000000\", 1);\nconst vlistPat = PS(U(\"123333359346463635126536711576\"));\nconst vlistOps = U(\"93203242332583253248325D>E?F@03263243255B:032523853:0325B:8GA032542H<C=12727B:0328432553;D>E?3257D>032585:0325B:;0328B:032\");\nconst vlistRef = U(\"012113445661666666789111:5;;;;;;;;444;;;:62999<1161=62>>?61:21@ABCD4446996:64E:::;:?::64:F114GHHIHHHHIHH1HH1HH1HHHHHH::EEJ4444::EE4444441691;644444114244444:;K6666555555555555555999666664444444444444444444444226?6:66644L9M?D:111::::6DE199\");\nconst vlistGroup = DZ(\"020200202020020020020020020020200200200200200200200002020202001003040106000200200200200200200200200200200200200200200200200200200200200200200200200200200200020020020020020020002020200202002002002002002002002002002020002002020020200220200200200200200200200200200200020020020000200020002000200200200020020020002000200200200020020202002020202000200200020022000200200020020002002000200220002002000200W0Z00020020002002020002002000200g0j0002002000200200020020002002000200200020020002000200002000002002002002002000200020000200002002002002002002002020020020200200200200200200200200202020020020020020020020020002002002020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020002002002002002002000200200200200200200200200200020202020002000200020002002002002000020200200\");\nconst nodeVlist = (() => {\n\tconst out = (/* @__PURE__ */ new Int32Array(319)).fill(-1);\n\tconst A = DZ(\"02422242:222222242224222242442222222422222244442242226224222426222422442462222422622222222626222462242622422622422424242422222222422222222242422222222222222222622442224222222222222224424442262222222222222222222226224222424242422224422422422222\");\n\tconst V = DZ(\"02222222222222222222202222222222222222222222221422222222222222222222222222222222222Y\\\\222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221422222222222222222222222222222222222222Ŀł222222222222222222\");\n\tfor (let i = 0; i < A.length; i++) out[A[i]] = V[i];\n\treturn out;\n})();\nconst SETS = \"container |break-after- all auto avoid avoid-page column left page right|break-before- all auto avoid avoid-page column left page right|break-inside-a uto void void-column void-page|box-decoration- clone slice|box- border content| contents flow-root hidden table table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group| not-sr-only sr-only|float- end left none right start|clear- both end left none right start|isolat e ion-auto|overflow- auto clip hidden scroll visible|overflow-x- auto clip hidden scroll visible|overflow-y- auto clip hidden scroll visible|overscroll- auto contain none|overscroll-x- auto contain none|overscroll-y- auto contain none| absolute fixed relative static sticky| collapse invisible visible|justify- around baseline between center center-safe end end-safe evenly normal start stretch|justify-items- center center-safe end end-safe normal start stretch|justify-self- auto center center-safe end end-safe start stretch|items- baseline baseline-last center center-safe end end-safe start stretch|self- auto baseline baseline-last center center-safe end end-safe start stretch|place-content- around baseline between center center-safe end end-safe evenly start stretch|place-items- baseline center center-safe end end-safe start stretch|place-self- auto center center-safe end end-safe start stretch| antialiased subpixel-antialiased| italic not-italic|normal-nums |ordinal |slashed-zero | lining-nums oldstyle-nums| proportional-nums tabular-nums| diagonal-fractions stacked-fractions| no-underline overline| capitalize lowercase normal-case uppercase|truncate |whitespace- break-spaces normal nowrap pre pre-line pre-wrap|break- all keep normal words|wrap- anywhere break-word normal|hyphens- auto manual none|mix-blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay plus-darker plus-lighter saturation screen soft-light|table- auto fixed|caption- bottom top|backface- hidden visible|appearance- auto none|scheme- dark light light-dark normal only-dark only-light|field-sizing- content fixed|pointer-events- auto none|resize -none -x -y|snap- align-none center end start|snap- always normal|snap- both none x y|snap- mandatory proximity|touch- auto manipulation none|touch-pan- left right x|touch-pan- down up y|touch-pinch-zoom |select- all auto none text|forced-color-adjust- auto none| normal size| baseline bottom middle sub super text-bottom text-top top| bounce none ping pulse spin| auto square video| auto fr max min px|none | auto full px| fixed local scroll|clip- border content padding text|origin- border content padding| bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| no-repeat repeat repeat-round repeat-space repeat-x repeat-y| auto contain cover| gradient-to-b gradient-to-bl gradient-to-br gradient-to-l gradient-to-r gradient-to-t gradient-to-tl gradient-to-tr none|blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay saturation screen soft-light|to- b bl br l r t tl tr| auto dvh fit full lh lvh max min px screen svh| dashed dotted double hidden none solid| collapse separate|px |auto |full | content none strict| inline-size size|layout |paint |style | around baseline between center center-safe end end-safe evenly normal start stretch| alias all-scroll auto cell col-resize context-menu copy crosshair default e-resize ew-resize grab grabbing help move n-resize ne-resize nesw-resize no-drop none not-allowed ns-resize nw-resize nwse-resize pointer progress row-resize s-resize se-resize sw-resize text vertical-text w-resize wait zoom-in zoom-out| dashed dotted double solid wavy| auto from-font|reverse |initial | in in-out initial linear out| col col-reverse row row-reverse| nowrap wrap wrap-reverse| auto initial none| black bold extrabold extralight light medium normal semibold thin| condensed expanded extra-condensed extra-expanded normal semi-condensed semi-expanded ultra-condensed ultra-expanded|flow- col col-dense dense row row-dense| none subgrid| auto dvh dvw fit full lh lvh lvw max min px screen svh svw| block flex grid table| auto dvw fit full lvw max min px screen svw| loose none normal px relaxed snug tight|through |item | inside outside| decimal disc none| auto px| clip-border clip-content clip-fill clip-padding clip-stroke clip-view no-clip| add exclude intersect subtract| alpha luminance match|origin- border content fill padding stroke view|type- alpha luminance| circle ellipse| closest-corner closest-side farthest-corner farthest-side|at- bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| dvh fit full lh lvh max min none px screen svh| auto dvh dvw fit full lh lvh lvw max min none px screen svh svw| dvw fit full lvw max min none px screen svw| auto dvh dvw fit full lvh lvw max min none prose px svh svw| auto dvh dvw fit full lvh lvw max min none px screen svh svw| contain cover fill none scale-down| first last none| distant dramatic midrange near none normal|inset | full none|3d | auto smooth|gutter- auto both stable| auto none thin| inner none| auto dvh dvw fit full lvh lvw max min px svh svw|base | center end justify left right start| clip ellipsis| balance nowrap pretty wrap| normal tight tighter wide wider widest| cpu gpu none| 3d flat| all colors none opacity shadow transform| discrete normal| full px| auto dvh dvw fit full lvh lvw max min px screen svh svw| auto contents scroll transform\".split(\"|\").map((s) => {\n\tconst tails = s.split(\" \");\n\tconst prefix = tails.shift();\n\tfor (let i = 0; i < tails.length; i++) tails[i] = prefix + tails[i];\n\treturn tails;\n});\nconst AA = DZ(\"0000000000000000000000000000000000000000000000000000000000000262242:6@200000006:240B428:4422400002046044222426220026642642462026224222824220022400000000\\\\00N222422242222222224062242222222422226264222422222222222222442804222422222222222222222222220<4<0204260002444020204224422\");\nconst AG = DZ(\"ɠ222222222222222222222222222222222222222222222222222222222222˕4222226>ʶ22ʷʺʷ2ʸʷ42ʴ2ʓ22>621422ɶ222ɹɼɷɺɷɺ22ɱ42222ɨ2ɧ26622ɘɓ244ƸƵ222]d24242ǖǓƚÄȫ2263ȨȥȨ2222222ǣ222222222222222222ǂƽ2ƾƵ2222222422222ƜƑ22222222222222222222144Ŧţ22Ţş222222222222222222222ĸ2ı68ĦģĦɡŰ4Ġ«®ĝ822ĔđĔ2ē2222622\");\nconst AS = DZ(\"02222222222222222222222222222222222222222222222222222222222222222202022222222222EH2200IL021042222Y\\\\222IL0cf2e10j2222U00X202[^2y0000120|{~22
:22|22222222222G000qOVI00000}2>40000B00000I¨©000¬00000000000000021M®00°000000000000000000000222HGHa1º222¿2À2222ÉÌ000°2±\");\nconst litAnchor = /* @__PURE__ */ new Int32Array(995);\nconst litGroup = /* @__PURE__ */ new Int32Array(995);\nconst litPool = /* @__PURE__ */ new Int32Array(995);\nlet poolText = \"\";\nconst poolOffsets = /* @__PURE__ */ new Int32Array(1038);\n{\n\tconst tailRef = /* @__PURE__ */ new Map();\n\tlet nextRef = 0;\n\tlet e = 0;\n\tfor (let i = 0; i < AA.length; i++) for (const tail of SETS[AS[i]]) {\n\t\tlet r = tailRef.get(tail);\n\t\tif (r === void 0) {\n\t\t\tr = nextRef++;\n\t\t\ttailRef.set(tail, r);\n\t\t\tpoolOffsets[r * 2] = poolText.length;\n\t\t\tpoolOffsets[r * 2 + 1] = tail.length;\n\t\t\tpoolText += tail;\n\t\t}\n\t\tlitAnchor[e] = AA[i];\n\t\tlitGroup[e] = AG[i];\n\t\tlitPool[e] = r;\n\t\te++;\n\t}\n}\nconst adjGid = DZ(\"0b2N:222@R>F@286¦2@H2D266226FB22B2>BD\\\\6N22222Z222D222p\");\nconst adjStart = PS(U(\"1::24444432:442:44:44>222222:44:4421322511111311111114\"));\nconst adjTgt = DZ(\"24A;33N=C@H4A;33N=C@<27;83:;8393NQ:3NQʰ222ˉºŴŽ2R2=18cƴÅŇ=cĞÛC1ƈǝȈ:ħ25=11D3A@4=<1;1DEr25;11B3?<6;:371BCn9@7=<8192>2E121@9@EHE@9>2T25511<398454131<=V25511<398454131<=ƧNž2Đå242L222290000f22500ɛ000ǘ222\");\nconst patGid = U(\"ij\");\nconst patTgt = U(\"\");\nconst postfixLookupGroups = U(\"1\");\nconst orderSensitiveModifiers = \"* ** after backdrop before details-content file first-letter first-line marker placeholder selection\";\nvar tables_generated_default = {\n\tGROUP_COUNT,\n\tcustomValidatorNames,\n\tedgeStart,\n\tlabelStart,\n\tlabelText,\n\tedgeTarget,\n\tnodeGroup,\n\tnodeVlist,\n\tvlistPat,\n\tvlistOps,\n\tvlistRef,\n\tvlistGroup,\n\tlitAnchor,\n\tlitGroup,\n\tlitPool,\n\tpoolOffsets,\n\tpoolText,\n\tadjGid,\n\tadjStart,\n\tadjTgt,\n\tpatGid,\n\tpatTgt,\n\tpostfixLookupGroups,\n\torderSensitiveModifiers\n};\n\n//#endregion\nexport { tables_generated_default as default };","//#region src/engine.ts\nconst IS_JSC = \"line\" in /* @__PURE__ */ new Error();\nconst EXTERNAL = -1;\nconst DEAD = -1;\nconst fnv = (str, s, e) => {\n\tlet h = 2166136261;\n\tfor (let p = s; p < e; p++) h = Math.imul(h ^ str.charCodeAt(p), 16777619);\n\treturn h;\n};\nconst spanHash = (str, s, e) => {\n\tconst len = e - s;\n\tlet h = Math.imul(len, 2654435761) ^ str.charCodeAt(s);\n\tif (len > 3) {\n\t\tconst q = len >> 2;\n\t\tconst m = len >> 1;\n\t\th = Math.imul(h ^ str.charCodeAt(s + 1) << 8 ^ str.charCodeAt(s + 2) << 16 ^ str.charCodeAt(s + q), 2246822507);\n\t\th = Math.imul(h ^ str.charCodeAt(s + m) << 8 ^ str.charCodeAt(s + m + q) << 16 ^ str.charCodeAt(e - 3), 3266489909);\n\t\th ^= str.charCodeAt(e - 2) << 8 ^ str.charCodeAt(e - 1) << 16;\n\t\tfor (let p = s + 3, q = e - 4; p < s + 8 && p < q; p++, q--) h = Math.imul(h ^ str.charCodeAt(p) ^ str.charCodeAt(q) << 8, 16777619);\n\t}\n\treturn h ^ h >>> 15 | 0;\n};\nconst createEngine = (T, validatorImpls, options = {}) => {\n\tconst { GROUP_COUNT, edgeStart, labelStart, labelText, edgeTarget, nodeGroup, nodeVlist, vlistPat, vlistOps, vlistRef, vlistGroup, litAnchor, litGroup, litPool, poolOffsets, poolText, adjGid, adjStart, adjTgt, patGid, patTgt, postfixLookupGroups, customValidatorNames, orderSensitiveModifiers } = T;\n\tconst adjRow = new Int32Array(GROUP_COUNT).fill(-1);\n\tfor (let i = 0; i < adjGid.length; i++) adjRow[adjGid[i]] = i;\n\tlet maxAdj = 0;\n\tfor (let r = 0; r + 1 < adjStart.length; r++) {\n\t\tconst n = adjStart[r + 1] - adjStart[r];\n\t\tif (n > maxAdj) maxAdj = n;\n\t}\n\tlet CLAIM_PER_TOKEN = 32;\n\twhile (CLAIM_PER_TOKEN < 2 * (1 + maxAdj + patGid.length)) CLAIM_PER_TOKEN <<= 1;\n\tconst vgStart = new Int32Array(vlistRef.length + 1);\n\tfor (let l = 0; l < vlistRef.length; l++) vgStart[l + 1] = vgStart[l] + vlistPat[vlistRef[l] + 1] - vlistPat[vlistRef[l]];\n\tconst postfixLookupSet = new Uint8Array(GROUP_COUNT);\n\tfor (let i = 0; i < postfixLookupGroups.length; i++) postfixLookupSet[postfixLookupGroups[i]] = 1;\n\tconst nodeCount = edgeStart.length - 1;\n\tconst nodeHasLit = new Uint8Array(nodeCount);\n\tlet litMaxLen = 0;\n\tlet litNoArb = true;\n\tfor (let i = 0; i < litAnchor.length; i++) {\n\t\tnodeHasLit[litAnchor[i]] = 1;\n\t\tconst len = poolOffsets[litPool[i] * 2 + 1];\n\t\tif (len > litMaxLen) litMaxLen = len;\n\t\tconst c0 = poolText.charCodeAt(poolOffsets[litPool[i] * 2]);\n\t\tif (c0 === 91 || c0 === 40) litNoArb = false;\n\t}\n\tlet LIT_SIZE = 1;\n\twhile (LIT_SIZE < litAnchor.length * 2) LIT_SIZE <<= 1;\n\tconst litTable = new Int32Array(LIT_SIZE).fill(-1);\n\tfor (let i = 0; i < litAnchor.length; i++) {\n\t\tconst off = poolOffsets[litPool[i] * 2];\n\t\tlet idx = (fnv(poolText, off, off + poolOffsets[litPool[i] * 2 + 1]) ^ Math.imul(litAnchor[i], 2654435761) | 0) & LIT_SIZE - 1;\n\t\twhile (litTable[idx] !== -1) idx = idx + 1 & LIT_SIZE - 1;\n\t\tlitTable[idx] = i;\n\t}\n\tconst litProbe = (anchor, input, s, e) => {\n\t\tlet idx = (fnv(input, s, e) ^ Math.imul(anchor, 2654435761) | 0) & LIT_SIZE - 1;\n\t\tconst len = e - s;\n\t\tfor (;;) {\n\t\t\tconst entry = litTable[idx];\n\t\t\tif (entry === -1) return -1;\n\t\t\tif (litAnchor[entry] === anchor && poolOffsets[litPool[entry] * 2 + 1] === len) {\n\t\t\t\tconst off = poolOffsets[litPool[entry] * 2];\n\t\t\t\tlet ok = true;\n\t\t\t\tfor (let k = 0; k < len; k++) if (poolText.charCodeAt(off + k) !== input.charCodeAt(s + k)) {\n\t\t\t\t\tok = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (ok) return litGroup[entry];\n\t\t\t}\n\t\t\tidx = idx + 1 & LIT_SIZE - 1;\n\t\t}\n\t};\n\tconst cacheSize = options.cacheSize ?? 8192;\n\tconst RAW_PREFIX = options.prefix ?? T.prefix ?? \"\";\n\tconst FULL_PREFIX = RAW_PREFIX === \"\" ? \"\" : RAW_PREFIX + \":\";\n\tconst FPL = FULL_PREFIX.length;\n\tconst vCustom = (customValidatorNames ?? []).map((name) => {\n\t\tconst fn = validatorImpls && validatorImpls[name];\n\t\tif (!fn) throw new Error(\"cn: missing validator \" + name);\n\t\treturn fn;\n\t});\n\tconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\n\tconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n\tconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\n\tconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\n\tlet aKind = 0;\n\tlet aLabelS = -1;\n\tlet aLabelE = -1;\n\tlet aValS = -1;\n\tlet aValE = -1;\n\tconst isWordCode = (c) => c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c === 95;\n\tconst isUniWS = (c) => /\\s/.test(String.fromCharCode(c));\n\tconst analyzeArb = (input, s, e) => {\n\t\taKind = 0;\n\t\taLabelS = -1;\n\t\tif (e - s < 3) return;\n\t\tconst c0 = input.charCodeAt(s);\n\t\tconst cl = input.charCodeAt(e - 1);\n\t\tif (c0 === 91 && cl === 93) aKind = 1;\n\t\telse if (c0 === 40 && cl === 41) aKind = 2;\n\t\telse return;\n\t\taValS = s + 1;\n\t\taValE = e - 1;\n\t\tlet p = s + 1;\n\t\tif (isWordCode(input.charCodeAt(p))) {\n\t\t\tp++;\n\t\t\twhile (p < e - 1) {\n\t\t\t\tconst c = input.charCodeAt(p);\n\t\t\t\tif (!isWordCode(c) && c !== 45) break;\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif (p < e - 2 && input.charCodeAt(p) === 58) {\n\t\t\t\taLabelS = s + 1;\n\t\t\t\taLabelE = p;\n\t\t\t\taValS = p + 1;\n\t\t\t}\n\t\t}\n\t};\n\tconst spanEq = (input, s, e, str) => {\n\t\tif (e - s !== str.length) return false;\n\t\tfor (let i = 0; i < str.length; i++) if (input.charCodeAt(s + i) !== str.charCodeAt(i)) return false;\n\t\treturn true;\n\t};\n\tconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\n\tconst tshirtRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\n\tconst isNumStr = (v) => !!v && !Number.isNaN(Number(v));\n\tconst spanIsNamedContainerQuery = (input, s, e) => {\n\t\tif (e - s < 11 || !spanEq(input, s, s + 10, \"@container\")) return false;\n\t\tif (input.charCodeAt(s + 10) === 47) return e - s >= 12;\n\t\tconst c11 = input.charCodeAt(s + 11);\n\t\treturn c11 === 115 && e - s >= 17 && spanEq(input, s + 10, s + 16, \"-size/\") || c11 === 110 && e - s >= 19 && spanEq(input, s + 10, s + 18, \"-normal/\");\n\t};\n\tconst VKIND = [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t2,\n\t\t2,\n\t\t2,\n\t\t2,\n\t\t2,\n\t\t2,\n\t\t2\n\t];\n\tconst VLABELS = \"length|number|number weight|family-name|position percentage|length size bg-size|image url|shadow|length|family-name|position percentage|length size bg-size|image url|shadow|number weight\".split(\"|\").map((s) => s.split(\" \"));\n\tconst VFALL = [\n\t\t2,\n\t\t3,\n\t\t1,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t4,\n\t\t5,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t1,\n\t\t1\n\t];\n\tconst runValidator = (op, input, s, e) => {\n\t\tif (op >= 10) {\n\t\t\tif (op >= 25) return vCustom[op - 25](input.slice(s, e));\n\t\t\tconst i = op - 10;\n\t\t\tif (aKind !== VKIND[i]) return false;\n\t\t\tif (aLabelS >= 0) {\n\t\t\t\tfor (const L of VLABELS[i]) if (spanEq(input, aLabelS, aLabelE, L)) return true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tswitch (VFALL[i]) {\n\t\t\t\tcase 0: return false;\n\t\t\t\tcase 1: return true;\n\t\t\t\tcase 2: {\n\t\t\t\t\tconst v = input.slice(aValS, aValE);\n\t\t\t\t\treturn lengthUnitRegex.test(v) && !colorFunctionRegex.test(v);\n\t\t\t\t}\n\t\t\t\tcase 3: return isNumStr(input.slice(aValS, aValE));\n\t\t\t\tcase 4: return imageRegex.test(input.slice(aValS, aValE));\n\t\t\t\tdefault: return shadowRegex.test(input.slice(aValS, aValE));\n\t\t\t}\n\t\t}\n\t\tswitch (op) {\n\t\t\tcase 0: return true;\n\t\t\tcase 1: return aKind === 0;\n\t\t\tcase 2: return aKind === 1;\n\t\t\tcase 3: return aKind === 2;\n\t\t\tcase 4: return fractionRegex.test(input.slice(s, e));\n\t\t\tcase 5: return isNumStr(input.slice(s, e));\n\t\t\tcase 6: {\n\t\t\t\tconst v = input.slice(s, e);\n\t\t\t\treturn !!v && Number.isInteger(Number(v));\n\t\t\t}\n\t\t\tcase 7: return e > s && input.charCodeAt(e - 1) === 37 && isNumStr(input.slice(s, e - 1));\n\t\t\tcase 8: return tshirtRegex.test(input.slice(s, e));\n\t\t\tdefault: return spanIsNamedContainerQuery(input, s, e);\n\t\t}\n\t};\n\tconst orderSensitive = new Set(typeof orderSensitiveModifiers === \"string\" ? orderSensitiveModifiers.split(\" \") : orderSensitiveModifiers);\n\tconst internSpan = (map, input, s, e, imp, make) => {\n\t\tconst h = fnv(input, s, e) ^ (imp ? 2654435769 : 0) | 0;\n\t\tlet bucket = map.get(h);\n\t\tif (bucket !== void 0) outer: for (let b = 0; b < bucket.length; b++) {\n\t\t\tconst en = bucket[b];\n\t\t\tif (en.imp !== imp || en.k.length !== e - s) continue;\n\t\t\tfor (let i = 0; i < en.k.length; i++) if (en.k.charCodeAt(i) !== input.charCodeAt(s + i)) continue outer;\n\t\t\treturn en.id;\n\t\t}\n\t\telse map.set(h, bucket = []);\n\t\tconst k = input.slice(s, e);\n\t\tconst id = make(k);\n\t\tbucket.push({\n\t\t\tk,\n\t\t\timp,\n\t\t\tid\n\t\t});\n\t\treturn id;\n\t};\n\tlet ctxByHash = /* @__PURE__ */ new Map();\n\tlet ctxByCanon = /* @__PURE__ */ new Map();\n\tlet nextCtxId = 2;\n\tconst MAX_CTX = 4096;\n\tconst canonicalizeContext = (raw, important) => {\n\t\tconst mods = [];\n\t\tlet dB = 0, dP = 0, start = 0;\n\t\tfor (let i = 0; i < raw.length; i++) {\n\t\t\tconst c = raw.charCodeAt(i);\n\t\t\tif (dB === 0 && dP === 0 && c === 58) {\n\t\t\t\tmods.push(raw.slice(start, i));\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (c === 91) dB++;\n\t\t\telse if (c === 93) dB--;\n\t\t\telse if (c === 40) dP++;\n\t\t\telse if (c === 41) dP--;\n\t\t}\n\t\tmods.push(raw.slice(start));\n\t\tlet canonical = mods[0];\n\t\tif (mods.length > 1) {\n\t\t\tconst result = [];\n\t\t\tlet segment = [];\n\t\t\tfor (const mod of mods) if (mod.charCodeAt(0) === 91 || orderSensitive.has(mod)) {\n\t\t\t\tif (segment.length) {\n\t\t\t\t\tresult.push(...segment.sort());\n\t\t\t\t\tsegment = [];\n\t\t\t\t}\n\t\t\t\tresult.push(mod);\n\t\t\t} else segment.push(mod);\n\t\t\tif (segment.length) result.push(...segment.sort());\n\t\t\tcanonical = result.join(\":\");\n\t\t}\n\t\tconst key = important ? canonical + \" !\" : canonical;\n\t\tlet id = ctxByCanon.get(key);\n\t\tif (id === void 0) ctxByCanon.set(key, id = nextCtxId++);\n\t\treturn id;\n\t};\n\tlet dynByHash = /* @__PURE__ */ new Map();\n\tlet nextDynId = GROUP_COUNT;\n\tconst MAX_DYN = GROUP_COUNT + 4096;\n\tconst newDynId = () => nextDynId++;\n\tconst ID_LIMIT = 2097152;\n\tconst TOKEN_TABLE = 8192;\n\tconst memoHash = new Int32Array(TOKEN_TABLE);\n\tconst memoStr = new Array(TOKEN_TABLE).fill(null);\n\tconst memoGid = new Int32Array(TOKEN_TABLE);\n\tconst memoCtx = new Int32Array(TOKEN_TABLE);\n\tconst memoFlags = new Uint8Array(TOKEN_TABLE);\n\tlet memoTick = 0;\n\tconst memoPut = (way0, input, ts, te, h, gid, ctxId, flags) => {\n\t\tlet slot = way0;\n\t\tif (memoStr[way0] !== null) {\n\t\t\tif (memoStr[way0 | 1] === null) slot = way0 | 1;\n\t\t\telse if ((memoTick++ & 3) === 0) slot = way0 | memoTick >> 2 & 1;\n\t\t\telse return;\n\t\t}\n\t\tmemoStr[slot] = input.slice(ts, te);\n\t\tmemoHash[slot] = h;\n\t\tmemoGid[slot] = gid;\n\t\tmemoCtx[slot] = ctxId;\n\t\tmemoFlags[slot] = flags;\n\t};\n\tconst memoReset = () => memoStr.fill(null);\n\tlet cap = 256;\n\tlet tokI32 = [\n\t\tnew Int32Array(cap),\n\t\tnew Int32Array(cap),\n\t\tnew Int32Array(cap),\n\t\tnew Int32Array(cap)\n\t];\n\tlet [tokStart, tokEnd, tokGid, tokCtx] = tokI32;\n\tlet tokFlags = new Uint8Array(cap);\n\tlet keep = new Uint8Array(cap);\n\tconst growTokens = () => {\n\t\tcap *= 2;\n\t\ttokI32 = tokI32.map((a) => {\n\t\t\tconst n = new Int32Array(cap);\n\t\t\tn.set(a);\n\t\t\treturn n;\n\t\t});\n\t\t[tokStart, tokEnd, tokGid, tokCtx] = tokI32;\n\t\tconst nf = new Uint8Array(cap);\n\t\tnf.set(tokFlags);\n\t\ttokFlags = nf;\n\t\tkeep = new Uint8Array(cap);\n\t};\n\tlet ckptCap = 64;\n\tlet ckptNode = new Int32Array(ckptCap);\n\tlet ckptTail = new Int32Array(ckptCap);\n\tconst claim0 = new Int32Array(GROUP_COUNT);\n\tlet CLAIM_TABLE = 2048;\n\tlet claimShift = 21;\n\tlet claimKeys = new Float64Array(CLAIM_TABLE);\n\tlet claimEpochs = new Int32Array(CLAIM_TABLE);\n\tlet epoch = 0;\n\tconst claimTest = (ctx, gid) => {\n\t\tif (ctx === 0 && gid < GROUP_COUNT) {\n\t\t\tif (claim0[gid] === epoch) return 1;\n\t\t\tclaim0[gid] = epoch;\n\t\t\treturn 0;\n\t\t}\n\t\tconst key = ctx * 2097152 + gid + 1;\n\t\tlet idx = Math.imul(key, 2654435761) >>> claimShift;\n\t\tfor (;;) {\n\t\t\tif (claimEpochs[idx] !== epoch) break;\n\t\t\tif (claimKeys[idx] === key) return 1;\n\t\t\tidx = idx + 1 & CLAIM_TABLE - 1;\n\t\t}\n\t\tclaimKeys[idx] = key;\n\t\tclaimEpochs[idx] = epoch;\n\t\treturn 0;\n\t};\n\tconst resolveAt = (input, bs, endPos, nodeAt, ckptAt) => {\n\t\tif (endPos - bs >= 2 && input.charCodeAt(bs) === 91 && input.charCodeAt(endPos - 1) === 93) {\n\t\t\tlet colon = -1;\n\t\t\tfor (let p = bs + 1; p < endPos - 1; p++) if (input.charCodeAt(p) === 58) {\n\t\t\t\tcolon = p;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (colon === -1 || colon === bs + 1) return EXTERNAL;\n\t\t\treturn internSpan(dynByHash, input, bs + 1, colon, 0, newDynId);\n\t\t}\n\t\tif (nodeAt >= 0 && nodeGroup[nodeAt] >= 0) return nodeGroup[nodeAt];\n\t\tfor (let k = ckptAt - 1; k >= 0; k--) {\n\t\t\tconst tailStart = ckptTail[k];\n\t\t\tif (tailStart > endPos) continue;\n\t\t\tconst nodeId = ckptNode[k];\n\t\t\tconst tlen = endPos - tailStart;\n\t\t\tif (nodeHasLit[nodeId] === 1 && tlen > 0 && tlen <= litMaxLen) {\n\t\t\t\tconst c0 = input.charCodeAt(tailStart);\n\t\t\t\tif (litNoArb === false || c0 !== 91 && c0 !== 40) {\n\t\t\t\t\tconst g = litProbe(nodeId, input, tailStart, endPos);\n\t\t\t\t\tif (g >= 0) return g;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst vl = nodeVlist[nodeId];\n\t\t\tif (vl < 0) continue;\n\t\t\tconst pat = vlistRef[vl];\n\t\t\tconst vs = vlistPat[pat];\n\t\t\tconst ve = vlistPat[pat + 1];\n\t\t\tif (vs === ve) continue;\n\t\t\tanalyzeArb(input, tailStart, endPos);\n\t\t\tconst g0 = vgStart[vl] - vs;\n\t\t\tfor (let v = vs; v < ve; v++) if (runValidator(vlistOps[v], input, tailStart, endPos)) return vlistGroup[g0 + v];\n\t\t}\n\t\treturn EXTERNAL;\n\t};\n\tconst mergeClassList = (input) => {\n\t\tconst n = input.length;\n\t\tlet tokenCount = 0;\n\t\tlet totalTokenChars = 0;\n\t\tlet sawNonSpaceWS = false;\n\t\tif (nextCtxId > MAX_CTX || ctxByHash.size > MAX_CTX) {\n\t\t\tctxByHash = /* @__PURE__ */ new Map();\n\t\t\tctxByCanon = /* @__PURE__ */ new Map();\n\t\t\tnextCtxId = 2;\n\t\t\tmemoReset();\n\t\t}\n\t\tif (nextDynId > MAX_DYN) {\n\t\t\tdynByHash = /* @__PURE__ */ new Map();\n\t\t\tnextDynId = GROUP_COUNT;\n\t\t\tmemoReset();\n\t\t}\n\t\tlet i = 0;\n\t\twhile (i < n) {\n\t\t\tlet c = input.charCodeAt(i);\n\t\t\tif (c === 32 || c >= 9 && c <= 13 || c >= 160 && isUniWS(c)) {\n\t\t\t\tif (c !== 32) sawNonSpaceWS = true;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst ts = i;\n\t\t\tlet th = 0;\n\t\t\twhile (i < n) {\n\t\t\t\tc = input.charCodeAt(i);\n\t\t\t\tif (c <= 32) {\n\t\t\t\t\tif (c === 32) break;\n\t\t\t\t\tif (c >= 9 && c <= 13) {\n\t\t\t\t\t\tsawNonSpaceWS = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (c >= 160 && isUniWS(c)) {\n\t\t\t\t\tsawNonSpaceWS = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tth = Math.imul(th ^ c, 16777619);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tconst te = i;\n\t\t\tconst len = te - ts;\n\t\t\tif (tokenCount === cap) growTokens();\n\t\t\tconst t = tokenCount++;\n\t\t\ttokStart[t] = ts;\n\t\t\ttokEnd[t] = te;\n\t\t\ttotalTokenChars += len;\n\t\t\tth ^= Math.imul(len, 2654435761);\n\t\t\tconst h = th ^ th >>> 15 | 0;\n\t\t\tconst way0 = h & 8190;\n\t\t\t{\n\t\t\t\tlet hitAt = -1;\n\t\t\t\tif (memoHash[way0] === h && memoStr[way0] !== null && memoStr[way0].length === len) hitAt = way0;\n\t\t\t\telse if (memoHash[way0 | 1] === h && memoStr[way0 | 1] !== null && memoStr[way0 | 1].length === len) hitAt = way0 | 1;\n\t\t\t\tif (hitAt >= 0) {\n\t\t\t\t\tconst s = memoStr[hitAt];\n\t\t\t\t\tlet ok = true;\n\t\t\t\t\tfor (let k = 0; k < len; k++) if (s.charCodeAt(k) !== input.charCodeAt(ts + k)) {\n\t\t\t\t\t\tok = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (ok) {\n\t\t\t\t\t\ttokGid[t] = memoGid[hitAt];\n\t\t\t\t\t\ttokCtx[t] = memoCtx[hitAt];\n\t\t\t\t\t\ttokFlags[t] = memoFlags[hitAt];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet pts = ts;\n\t\t\tif (FPL !== 0) {\n\t\t\t\tif (te - ts <= FPL || !input.startsWith(FULL_PREFIX, ts)) {\n\t\t\t\t\ttokGid[t] = EXTERNAL;\n\t\t\t\t\tmemoPut(way0, input, ts, te, h, EXTERNAL, 0, 0);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tpts = ts + FPL;\n\t\t\t}\n\t\t\tlet depthB = 0, depthP = 0;\n\t\t\tlet lastColon = -1, lastSlash = -1;\n\t\t\tfor (let p = pts; p < te; p++) {\n\t\t\t\tconst pc = input.charCodeAt(p);\n\t\t\t\tif (depthB === 0 && depthP === 0) {\n\t\t\t\t\tif (pc === 58) {\n\t\t\t\t\t\tlastColon = p;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (pc === 47) {\n\t\t\t\t\t\tlastSlash = p;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pc === 91) depthB++;\n\t\t\t\telse if (pc === 93) depthB--;\n\t\t\t\telse if (pc === 40) depthP++;\n\t\t\t\telse if (pc === 41) depthP--;\n\t\t\t}\n\t\t\tconst modStart = lastColon >= pts ? lastColon + 1 : pts;\n\t\t\tlet bs = modStart;\n\t\t\tlet be = te;\n\t\t\tlet important = false;\n\t\t\tlet prefixShift = 0;\n\t\t\tif (be > bs && input.charCodeAt(be - 1) === 33) {\n\t\t\t\timportant = true;\n\t\t\t\tbe--;\n\t\t\t} else if (be > bs && input.charCodeAt(bs) === 33) {\n\t\t\t\timportant = true;\n\t\t\t\tbs++;\n\t\t\t\tprefixShift = 1;\n\t\t\t}\n\t\t\tlet postfixEnd = -1;\n\t\t\tif (lastSlash > modStart) {\n\t\t\t\tpostfixEnd = lastSlash + prefixShift;\n\t\t\t\tif (postfixEnd >= be) postfixEnd = -1;\n\t\t\t}\n\t\t\tlet feedStart = bs;\n\t\t\tif (be - bs > 1 && input.charCodeAt(bs) === 45) feedStart = bs + 1;\n\t\t\tlet node = 0;\n\t\t\tlet lp = 0;\n\t\t\tlet le = 0;\n\t\t\tlet pending = -1;\n\t\t\tlet ckptTop = 0;\n\t\t\tif (nodeVlist[0] >= 0 || nodeHasLit[0] === 1) {\n\t\t\t\tckptNode[0] = 0;\n\t\t\t\tckptTail[0] = feedStart;\n\t\t\t\tckptTop = 1;\n\t\t\t}\n\t\t\tlet slashNode = DEAD;\n\t\t\tlet slashCkpt = 0;\n\t\t\tfor (let p = feedStart; p < be; p++) {\n\t\t\t\tif (p === postfixEnd) {\n\t\t\t\t\tslashNode = lp < le ? DEAD : node;\n\t\t\t\t\tslashCkpt = ckptTop;\n\t\t\t\t}\n\t\t\t\tif (node !== DEAD) {\n\t\t\t\t\tconst cc = input.charCodeAt(p);\n\t\t\t\t\tlet arrived = -1;\n\t\t\t\t\tif (lp < le) {\n\t\t\t\t\t\tif (labelText.charCodeAt(lp) === cc) {\n\t\t\t\t\t\t\tlp++;\n\t\t\t\t\t\t\tif (lp === le) arrived = node = pending;\n\t\t\t\t\t\t} else node = DEAD;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst es = edgeStart[node];\n\t\t\t\t\t\tconst ee = edgeStart[node + 1];\n\t\t\t\t\t\tlet next = DEAD;\n\t\t\t\t\t\tfor (let e = es; e < ee; e++) {\n\t\t\t\t\t\t\tconst ls = labelStart[e];\n\t\t\t\t\t\t\tif (labelText.charCodeAt(ls) === cc) {\n\t\t\t\t\t\t\t\tif (labelStart[e + 1] - ls === 1) arrived = next = edgeTarget[e];\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tlp = ls + 1;\n\t\t\t\t\t\t\t\t\tle = labelStart[e + 1];\n\t\t\t\t\t\t\t\t\tpending = edgeTarget[e];\n\t\t\t\t\t\t\t\t\tnext = node;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode = next;\n\t\t\t\t\t}\n\t\t\t\t\tif (arrived >= 0 && (nodeVlist[arrived] >= 0 || nodeHasLit[arrived] === 1) && p + 1 < be && input.charCodeAt(p + 1) === 45) {\n\t\t\t\t\t\tif (ckptTop === ckptCap) {\n\t\t\t\t\t\t\tckptCap *= 2;\n\t\t\t\t\t\t\tconst nv = new Int32Array(ckptCap);\n\t\t\t\t\t\t\tnv.set(ckptNode);\n\t\t\t\t\t\t\tckptNode = nv;\n\t\t\t\t\t\t\tconst nt = new Int32Array(ckptCap);\n\t\t\t\t\t\t\tnt.set(ckptTail);\n\t\t\t\t\t\t\tckptTail = nt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tckptNode[ckptTop] = arrived;\n\t\t\t\t\t\tckptTail[ckptTop] = p + 2;\n\t\t\t\t\t\tckptTop++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (postfixEnd === be) {\n\t\t\t\tslashNode = lp < le ? DEAD : node;\n\t\t\t\tslashCkpt = ckptTop;\n\t\t\t}\n\t\t\tconst endNode = lp < le ? DEAD : node;\n\t\t\tlet gid;\n\t\t\tlet hasPostfix = false;\n\t\t\tif (postfixEnd >= 0) {\n\t\t\t\thasPostfix = true;\n\t\t\t\tgid = resolveAt(input, bs, postfixEnd, slashNode, slashCkpt);\n\t\t\t\tif (gid !== EXTERNAL && gid < GROUP_COUNT && postfixLookupSet[gid]) {\n\t\t\t\t\tconst gidFull = resolveAt(input, bs, be, endNode, ckptTop);\n\t\t\t\t\tif (gidFull !== EXTERNAL && gidFull !== gid) {\n\t\t\t\t\t\tgid = gidFull;\n\t\t\t\t\t\thasPostfix = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (gid === EXTERNAL) {\n\t\t\t\t\tgid = resolveAt(input, bs, be, endNode, ckptTop);\n\t\t\t\t\thasPostfix = false;\n\t\t\t\t}\n\t\t\t} else gid = resolveAt(input, bs, be, endNode, ckptTop);\n\t\t\tlet ctxId = 0;\n\t\t\tlet flags = 0;\n\t\t\tif (gid === EXTERNAL) tokGid[t] = EXTERNAL;\n\t\t\telse {\n\t\t\t\tflags = hasPostfix ? 1 : 0;\n\t\t\t\tctxId = pts >= lastColon ? important ? 1 : 0 : internSpan(ctxByHash, input, pts, lastColon, important ? 1 : 0, (k) => canonicalizeContext(k, important));\n\t\t\t\ttokGid[t] = gid;\n\t\t\t\ttokFlags[t] = flags;\n\t\t\t\ttokCtx[t] = ctxId;\n\t\t\t}\n\t\t\tmemoPut(way0, input, ts, te, h, gid, ctxId, flags);\n\t\t}\n\t\tif (tokenCount === 0) return \"\";\n\t\tif (tokenCount === 1) return tokStart[0] === 0 && tokEnd[0] === n ? input : input.slice(tokStart[0], tokEnd[0]);\n\t\tif (tokenCount * CLAIM_PER_TOKEN > CLAIM_TABLE) {\n\t\t\twhile (tokenCount * CLAIM_PER_TOKEN > CLAIM_TABLE) {\n\t\t\t\tCLAIM_TABLE <<= 1;\n\t\t\t\tclaimShift--;\n\t\t\t}\n\t\t\tclaimKeys = new Float64Array(CLAIM_TABLE);\n\t\t\tclaimEpochs = new Int32Array(CLAIM_TABLE);\n\t\t}\n\t\tif (nextCtxId >= ID_LIMIT || nextDynId >= ID_LIMIT) throw new Error(\"cn: too many distinct classes in one merge\");\n\t\tepoch = epoch + 1 | 0;\n\t\tif (epoch === 0) {\n\t\t\tclaim0.fill(0);\n\t\t\tclaimEpochs.fill(0);\n\t\t\tepoch = 1;\n\t\t}\n\t\tlet didDrop = false;\n\t\tfor (let t = tokenCount - 1; t >= 0; t--) {\n\t\t\tconst gid = tokGid[t];\n\t\t\tif (gid === EXTERNAL) {\n\t\t\t\tkeep[t] = 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst ctxId = tokCtx[t];\n\t\t\tif (claimTest(ctxId, gid) === 1) {\n\t\t\t\tkeep[t] = 0;\n\t\t\t\tdidDrop = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tkeep[t] = 1;\n\t\t\tif (gid < GROUP_COUNT) {\n\t\t\t\tconst r = adjRow[gid];\n\t\t\t\tif (r >= 0) for (let k = adjStart[r]; k < adjStart[r + 1]; k++) claimTest(ctxId, adjTgt[k]);\n\t\t\t\tif (tokFlags[t] & 1) {\n\t\t\t\t\tfor (let k = 0; k < patGid.length; k++) if (patGid[k] === gid) claimTest(ctxId, patTgt[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!didDrop && !sawNonSpaceWS && n === totalTokenChars + tokenCount - 1) return input;\n\t\tlet out = \"\";\n\t\tlet t = 0;\n\t\twhile (t < tokenCount) {\n\t\t\tif (!keep[t]) {\n\t\t\t\tt++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst runStart = tokStart[t];\n\t\t\tlet runEnd = tokEnd[t];\n\t\t\tlet u = t + 1;\n\t\t\twhile (u < tokenCount && keep[u] && tokStart[u] === runEnd + 1 && input.charCodeAt(runEnd) === 32) {\n\t\t\t\trunEnd = tokEnd[u];\n\t\t\t\tu++;\n\t\t\t}\n\t\t\tif (out.length > 0) out += \" \";\n\t\t\tout += input.slice(runStart, runEnd);\n\t\t\tt = u;\n\t\t}\n\t\treturn out;\n\t};\n\tconst DOOR_SIZE = 16384;\n\tconst door = new Int32Array(DOOR_SIZE * 2);\n\tlet doorBase = 0;\n\tlet doorEpoch = 1;\n\tlet cache = Object.create(null);\n\tlet prevCache = Object.create(null);\n\tlet cacheMap = /* @__PURE__ */ new Map();\n\tlet prevCacheMap = /* @__PURE__ */ new Map();\n\tlet cacheCount = 0;\n\tlet doorMarks = 0;\n\tconst rotateDoor = () => {\n\t\tdoorBase ^= DOOR_SIZE;\n\t\tdoorEpoch = doorEpoch + 1 | 0;\n\t\tdoorMarks = 0;\n\t};\n\tconst mergeCached = (input) => {\n\t\tlet merged = cache[input];\n\t\tif (merged !== void 0) return merged;\n\t\tconst hash = spanHash(input, 0, input.length);\n\t\tconst slot = (hash & 16383) + doorBase;\n\t\tconst wasSeen = door[slot] === (hash ^ doorEpoch) || door[slot ^ DOOR_SIZE] === (hash ^ doorEpoch - 1);\n\t\tif (wasSeen) {\n\t\t\tmerged = prevCache[input];\n\t\t\tif (merged !== void 0) {\n\t\t\t\tcache[input] = merged;\n\t\t\t\treturn merged;\n\t\t\t}\n\t\t}\n\t\tmerged = mergeClassList(input);\n\t\tif (wasSeen) {\n\t\t\tcache[input] = merged;\n\t\t\tif (++cacheCount > cacheSize) {\n\t\t\t\tcacheCount = 0;\n\t\t\t\tprevCache = cache;\n\t\t\t\tcache = Object.create(null);\n\t\t\t\trotateDoor();\n\t\t\t}\n\t\t} else {\n\t\t\tdoor[slot] = hash ^ doorEpoch;\n\t\t\tif (++doorMarks > DOOR_SIZE) rotateDoor();\n\t\t}\n\t\treturn merged;\n\t};\n\tconst mergeCachedMap = (input) => {\n\t\tlet merged = cacheMap.get(input);\n\t\tif (merged !== void 0) return merged;\n\t\tconst hash = spanHash(input, 0, input.length);\n\t\tconst slot = (hash & 16383) + doorBase;\n\t\tconst wasSeen = door[slot] === (hash ^ doorEpoch) || door[slot ^ DOOR_SIZE] === (hash ^ doorEpoch - 1);\n\t\tif (wasSeen) {\n\t\t\tmerged = prevCacheMap.get(input);\n\t\t\tif (merged !== void 0) {\n\t\t\t\tcacheMap.set(input, merged);\n\t\t\t\treturn merged;\n\t\t\t}\n\t\t}\n\t\tmerged = mergeClassList(input);\n\t\tif (wasSeen) {\n\t\t\tcacheMap.set(input, merged);\n\t\t\tif (++cacheCount > cacheSize) {\n\t\t\t\tcacheCount = 0;\n\t\t\t\tprevCacheMap = cacheMap;\n\t\t\t\tcacheMap = /* @__PURE__ */ new Map();\n\t\t\t\trotateDoor();\n\t\t\t}\n\t\t} else {\n\t\t\tdoor[slot] = hash ^ doorEpoch;\n\t\t\tif (++doorMarks > DOOR_SIZE) rotateDoor();\n\t\t}\n\t\treturn merged;\n\t};\n\tconst seenBefore = (input) => {\n\t\tconst hash = spanHash(input, 0, input.length);\n\t\tconst slot = (hash & 16383) + doorBase;\n\t\tif (door[slot] === (hash ^ doorEpoch) || door[slot ^ DOOR_SIZE] === (hash ^ doorEpoch - 1)) return true;\n\t\tdoor[slot] = hash ^ doorEpoch;\n\t\tif (++doorMarks > DOOR_SIZE) rotateDoor();\n\t\treturn false;\n\t};\n\tconst mergeString = cacheSize === 0 ? mergeClassList : IS_JSC ? (input) => {\n\t\tconst merged = cacheMap.get(input);\n\t\treturn merged !== void 0 ? merged : mergeCachedMap(input);\n\t} : mergeCached;\n\tconst merge = function() {\n\t\treturn arguments.length === 1 && typeof arguments[0] === \"string\" ? mergeString(arguments[0]) : mergeString(twJoin.apply(null, arguments));\n\t};\n\treturn {\n\t\tmerge,\n\t\tmergeString,\n\t\tseenBefore: cacheSize === 0 ? () => false : seenBefore,\n\t\tmergeUncached: mergeClassList\n\t};\n};\nconst resolveValue = (v, clsxMode) => {\n\tif (!v) return \"\";\n\tif (typeof v === \"string\") return v;\n\tlet out = \"\";\n\tif (typeof v.length === \"number\" && (clsxMode ? Array.isArray(v) : true)) {\n\t\tconst arr = v;\n\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\tconst item = arr[i];\n\t\t\tif (!item) continue;\n\t\t\tconst r = typeof item === \"string\" ? item : resolveValue(item, clsxMode);\n\t\t\tif (r) {\n\t\t\t\tif (out) out += \" \";\n\t\t\t\tout += r;\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t}\n\tif (clsxMode) {\n\t\tif (typeof v === \"number\") return \"\" + v;\n\t\tif (typeof v === \"object\") {\n\t\t\tfor (const k in v) if (v[k]) {\n\t\t\t\tif (out) out += \" \";\n\t\t\t\tout += k;\n\t\t\t}\n\t\t}\n\t}\n\treturn out;\n};\nconst joinArgs = (args, clsxMode) => {\n\tlet s = \"\";\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst a = args[i];\n\t\tif (!a) continue;\n\t\tconst r = typeof a === \"string\" ? a : resolveValue(a, clsxMode);\n\t\tif (r) {\n\t\t\tif (s) s += \" \";\n\t\t\ts += r;\n\t\t}\n\t}\n\treturn s;\n};\n/** join-only, `twJoin`-compatible (strings + nested arrays, falsy skipped) */\nconst twJoin = function() {\n\treturn joinArgs(arguments, false);\n};\n/** join-only, `clsx`-compatible (no merging) */\nconst clsx = function() {\n\treturn joinArgs(arguments, true);\n};\nconst BUCKET_CAP = 256;\nconst BUCKET_MISS_CAP = 16;\nconst BUCKET_SKIP = 1024;\nconst CHURN_SIZE = 4096;\nconst wrapClsx = (mergeString, fresh) => {\n\tconst seenBefore = fresh === void 0 ? () => true : fresh.seenBefore;\n\tconst mergeUncached = fresh === void 0 ? mergeString : fresh.mergeUncached;\n\tlet argCache = /* @__PURE__ */ new Map();\n\tlet prevArgCache = /* @__PURE__ */ new Map();\n\tlet argCount = 0;\n\tlet lastHit = null;\n\tlet churnKey = null;\n\tlet churnOwn = [];\n\tlet churnVal = [];\n\tlet churnTick = 0;\n\tconst churnLookup = (key, own, join) => {\n\t\tif (churnKey === null) {\n\t\t\tchurnKey = new Array(CHURN_SIZE).fill(\"\");\n\t\t\tchurnOwn = new Array(CHURN_SIZE).fill(\"\");\n\t\t\tchurnVal = new Array(CHURN_SIZE).fill(\"\");\n\t\t}\n\t\tconst way0 = spanHash(key, 0, key.length) & 4094;\n\t\tif (churnKey[way0] === key && churnOwn[way0] === own) return churnVal[way0];\n\t\tif (churnKey[way0 | 1] === key && churnOwn[way0 | 1] === own) return churnVal[way0 | 1];\n\t\tconst merged = mergeString(join ? own + \" \" + key : key);\n\t\tconst slot = churnKey[way0] === \"\" ? way0 : way0 | (churnKey[way0 | 1] === \"\" ? 1 : churnTick++ & 1);\n\t\tchurnKey[slot] = key;\n\t\tchurnOwn[slot] = own;\n\t\tchurnVal[slot] = merged;\n\t\treturn merged;\n\t};\n\tconst match3 = (e, v0, v1, v2) => {\n\t\tlet k = 0;\n\t\tif (v0) {\n\t\t\tif (v0 !== e.a0) return false;\n\t\t\tk = 1;\n\t\t}\n\t\tif (v1) {\n\t\t\tif (v1 !== (k === 0 ? e.a0 : e.a1)) return false;\n\t\t\tk++;\n\t\t}\n\t\tif (v2) {\n\t\t\tif (v2 !== (k === 0 ? e.a0 : k === 1 ? e.a1 : e.a2)) return false;\n\t\t\tk++;\n\t\t}\n\t\treturn k === e.t;\n\t};\n\tconst matchN = (e, vals) => {\n\t\tconst ea = e.a;\n\t\tlet k = 0;\n\t\tfor (let i = 0; i < vals.length; i++) {\n\t\t\tconst v = vals[i];\n\t\t\tif (!v) continue;\n\t\t\tif (v !== ea[k]) return false;\n\t\t\tk++;\n\t\t}\n\t\treturn k === e.t;\n\t};\n\tconst resolveArgs = (vals, probed) => {\n\t\tconst nArgs = vals.length;\n\t\tconst pred = lastHit === null ? null : lastHit.n;\n\t\tif (!probed) {\n\t\t\tif (pred !== null && matchN(pred, vals)) {\n\t\t\t\tlastHit = pred;\n\t\t\t\treturn pred.r;\n\t\t\t}\n\t\t\tif (lastHit !== null && lastHit !== pred && matchN(lastHit, vals)) return lastHit.r;\n\t\t}\n\t\tlet first = \"\";\n\t\tlet firstIdx = -1;\n\t\tlet truthy = 0;\n\t\tlet hasResolvedValue = false;\n\t\tfor (let i = 0; i < nArgs; i++) {\n\t\t\tlet v = vals[i];\n\t\t\tif (!v) continue;\n\t\t\tif (typeof v !== \"string\") {\n\t\t\t\tv = vals[i] = resolveValue(v, true);\n\t\t\t\tif (!v) continue;\n\t\t\t\thasResolvedValue = true;\n\t\t\t}\n\t\t\tif (firstIdx < 0) {\n\t\t\t\tfirst = v;\n\t\t\t\tfirstIdx = i;\n\t\t\t}\n\t\t\ttruthy++;\n\t\t}\n\t\tif (truthy === 0) return \"\";\n\t\tif (truthy === 1) return mergeString(first);\n\t\tif (hasResolvedValue) {\n\t\t\tif (pred !== null && matchN(pred, vals)) {\n\t\t\t\tlastHit = pred;\n\t\t\t\treturn pred.r;\n\t\t\t}\n\t\t\tif (lastHit !== null && lastHit !== pred && matchN(lastHit, vals)) return lastHit.r;\n\t\t}\n\t\tlet bucket = argCache.get(first);\n\t\tif (bucket === void 0) {\n\t\t\tbucket = prevArgCache.get(first);\n\t\t\tif (bucket !== void 0) argCache.set(first, bucket);\n\t\t}\n\t\tlet hit = null;\n\t\tif (bucket !== void 0) {\n\t\t\tif (bucket.skip > 0) {\n\t\t\t\tbucket.skip--;\n\t\t\t\tlastHit = null;\n\t\t\t\tlet joined = first;\n\t\t\t\tfor (let i = firstIdx + 1; i < nArgs; i++) {\n\t\t\t\t\tconst v = vals[i];\n\t\t\t\t\tif (v) joined += \" \" + v;\n\t\t\t\t}\n\t\t\t\treturn churnLookup(joined, \"\", false);\n\t\t\t}\n\t\t\tconst entries = bucket.e;\n\t\t\touter: for (let b = 0; b < entries.length; b++) {\n\t\t\t\tconst e = entries[b];\n\t\t\t\tif (e.t !== truthy) continue;\n\t\t\t\tconst ea = e.a;\n\t\t\t\tlet k = 1;\n\t\t\t\tfor (let i = firstIdx + 1; i < nArgs; i++) {\n\t\t\t\t\tconst v = vals[i];\n\t\t\t\t\tif (v && v !== ea[k++]) continue outer;\n\t\t\t\t}\n\t\t\t\thit = e;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (hit !== null) bucket.miss = 0;\n\t\t}\n\t\tif (hit === null) {\n\t\t\tlet joined = first;\n\t\t\tconst a = [first];\n\t\t\tfor (let i = firstIdx + 1; i < nArgs; i++) {\n\t\t\t\tconst v = vals[i];\n\t\t\t\tif (!v) continue;\n\t\t\t\tjoined += \" \" + v;\n\t\t\t\ta.push(v);\n\t\t\t}\n\t\t\tif (!seenBefore(joined)) return mergeUncached(joined);\n\t\t\thit = {\n\t\t\t\tr: mergeString(joined),\n\t\t\t\tt: a.length,\n\t\t\t\ta0: a[0],\n\t\t\t\ta1: a[1],\n\t\t\t\ta2: a[2] ?? \"\",\n\t\t\t\ta,\n\t\t\t\tn: null\n\t\t\t};\n\t\t\tif (bucket === void 0) argCache.set(first, bucket = {\n\t\t\t\te: [],\n\t\t\t\tmiss: 0,\n\t\t\t\tskip: 0,\n\t\t\t\tat: 0\n\t\t\t});\n\t\t\telse if (++bucket.miss > BUCKET_MISS_CAP) {\n\t\t\t\tbucket.miss = BUCKET_MISS_CAP;\n\t\t\t\tbucket.skip = BUCKET_SKIP;\n\t\t\t\tbucket.e.length = 0;\n\t\t\t\tbucket.at = 0;\n\t\t\t}\n\t\t\tconst entries = bucket.e;\n\t\t\tif (entries.length < BUCKET_CAP) entries.push(hit);\n\t\t\telse {\n\t\t\t\tentries[bucket.at] = hit;\n\t\t\t\tbucket.at = bucket.at + 1 & 255;\n\t\t\t}\n\t\t\tif (++argCount > 1e3) {\n\t\t\t\targCount = 0;\n\t\t\t\tprevArgCache = argCache;\n\t\t\t\targCache = /* @__PURE__ */ new Map();\n\t\t\t}\n\t\t}\n\t\tif (lastHit !== null && lastHit !== hit) lastHit.n = hit;\n\t\tlastHit = hit;\n\t\treturn hit.r;\n\t};\n\tconst mergeSingleValue = (value) => Array.isArray(value) ? resolveArgs(value.slice(), false) : mergeString(resolveValue(value, true));\n\treturn function(v0, v1, v2) {\n\t\tconst nArgs = arguments.length;\n\t\tif ((nArgs | 1) === 3) {\n\t\t\tconst lh = lastHit;\n\t\t\tif (lh !== null) {\n\t\t\t\tconst pred = lh.n;\n\t\t\t\tif (pred !== null && match3(pred, v0, v1, v2)) {\n\t\t\t\t\tlastHit = pred;\n\t\t\t\t\treturn pred.r;\n\t\t\t\t}\n\t\t\t\tif (lh !== pred && match3(lh, v0, v1, v2)) return lh.r;\n\t\t\t}\n\t\t\tif (nArgs === 2 && typeof v1 === \"string\" && v1 !== \"\") {\n\t\t\t\tconst bucket = argCache.get(v0);\n\t\t\t\tif (bucket !== void 0 && bucket.skip > 0) {\n\t\t\t\t\tbucket.skip--;\n\t\t\t\t\tlastHit = null;\n\t\t\t\t\treturn churnLookup(v1, v0, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn resolveArgs([\n\t\t\t\tv0,\n\t\t\t\tv1,\n\t\t\t\tv2\n\t\t\t], true);\n\t\t}\n\t\tif (nArgs === 1) return typeof v0 === \"string\" ? mergeString(v0) : mergeSingleValue(v0);\n\t\tconst lh = lastHit;\n\t\tif (lh !== null) {\n\t\t\tconst pred = lh.n;\n\t\t\tif (pred !== null) {\n\t\t\t\tconst pa = pred.a;\n\t\t\t\tlet k = 0;\n\t\t\t\tlet ok = true;\n\t\t\t\tfor (let i = 0; i < nArgs; i++) {\n\t\t\t\t\tconst v = arguments[i];\n\t\t\t\t\tif (!v) continue;\n\t\t\t\t\tif (v !== pa[k]) {\n\t\t\t\t\t\tok = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t\tif (ok && k === pred.t) {\n\t\t\t\t\tlastHit = pred;\n\t\t\t\t\treturn pred.r;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (lh !== pred) {\n\t\t\t\tconst la = lh.a;\n\t\t\t\tlet k = 0;\n\t\t\t\tlet ok = true;\n\t\t\t\tfor (let i = 0; i < nArgs; i++) {\n\t\t\t\t\tconst v = arguments[i];\n\t\t\t\t\tif (!v) continue;\n\t\t\t\t\tif (v !== la[k]) {\n\t\t\t\t\t\tok = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t\tif (ok && k === lh.t) return lh.r;\n\t\t\t}\n\t\t}\n\t\tconst vals = [];\n\t\tfor (let i = 0; i < nArgs; i++) vals.push(arguments[i]);\n\t\treturn resolveArgs(vals, true);\n\t};\n};\n/**\n* Create a `cn` function bound to compiled tables — the entry point for\n* project-compiled (`cn build`) tables:\n*\n* ```ts\n* import tables from \"./cn-tables.js\"\n* import { createCn } from \"cn/engine\"\n* export const cn = createCn(tables)\n* ```\n*/\nconst createCn = (tables, validatorImpls, options) => {\n\tconst engine = createEngine(tables, validatorImpls, options);\n\treturn wrapClsx(engine.mergeString, engine);\n};\n\n//#endregion\nexport { clsx, createCn, createEngine, twJoin, wrapClsx };","import tables_generated_default from \"./tables.js\";\nimport { clsx, createEngine, twJoin, wrapClsx } from \"./engine.js\";\n\n//#region src/index.ts\nconst instance = /* @__PURE__ */ createEngine(tables_generated_default);\n/**\n* Merge Tailwind CSS classes with clsx-style arguments (strings, arrays,\n* objects, conditionals). Drop-in replacement for `twMerge(clsx(...))`.\n*/\nconst cn = /* @__PURE__ */ wrapClsx(instance.mergeString, instance);\n/** tailwind-merge–compatible variadic merge (strings + nested arrays). */\nconst twMerge = instance.merge;\n\n//#endregion\nexport { clsx, cn, createEngine, twJoin, twMerge };","'use client';\n\nimport { cn } from '@/lib/utils';\nimport { Menu as MenuPrimitive } from '@base-ui/react/menu';\n\nfunction DropdownMenu({ ...props }) {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({ ...props }) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger({ ...props }) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nfunction DropdownMenuContent({\n align = 'start',\n alignOffset = 0,\n side = 'bottom',\n sideOffset = 4,\n className,\n ...props\n}) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n className=\"isolate z-[1000000] outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md p-1 shadow-md ring-1 duration-100 outline-none data-closed:overflow-hidden',\n className,\n )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({ ...props }) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\nfunction DropdownMenuLabel({ className, inset, ...props }) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn('text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuItem({ className, inset, variant = 'default', ...props }) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:*:[svg]:text-destructive relative flex cursor-default items-center gap-1.5 rounded px-2 py-1 text-xs outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({ className, ...props }) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n};\n","import { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport { cva } from 'class-variance-authority';\nimport { cn } from 'cn';\nimport { ChevronDownIcon } from 'lucide-react';\n\nfunction NavigationMenu({ align = 'start', className, children, ...props }) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n className={cn('group/navigation-menu relative flex max-w-max flex-1 items-center justify-center', className)}\n {...props}\n >\n {children}\n <NavigationMenuPositioner align={align} />\n </NavigationMenuPrimitive.Root>\n );\n}\n\nfunction NavigationMenuList({ className, ...props }) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn('group flex flex-1 list-none items-center justify-center gap-0', className)}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuItem({ className, ...props }) {\n return (\n <NavigationMenuPrimitive.Item data-slot=\"navigation-menu-item\" className={cn('relative', className)} {...props} />\n );\n}\n\nconst navigationMenuTriggerStyle = cva(\n 'group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted',\n);\n\nfunction NavigationMenuTrigger({ className, children, ...props }) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), 'group', className)}\n {...props}\n >\n {children}{' '}\n <ChevronDownIcon\n className=\"relative top-px ml-1 size-5 -mr-1 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({ className, ...props }) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn('h-full w-auto p-0 rounded-xl overflow-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuPositioner({\n className,\n side = 'bottom',\n sideOffset = 8,\n align = 'start',\n alignOffset = 0,\n ...props\n}) {\n return (\n <NavigationMenuPrimitive.Portal>\n <NavigationMenuPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n className={cn(\n 'isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:-top-2.5 data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0',\n className,\n )}\n {...props}\n >\n <NavigationMenuPrimitive.Popup className=\"xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) rounded-xl bg-transparent text-popover-foreground outline-none transition-[width,height] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)]\">\n <NavigationMenuPrimitive.Viewport className=\"relative size-full rounded-xl overflow-hidden\" />\n </NavigationMenuPrimitive.Popup>\n </NavigationMenuPrimitive.Positioner>\n </NavigationMenuPrimitive.Portal>\n );\n}\n\nfunction NavigationMenuLink({ className, ...props }) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md data-active:bg-muted/50 data-active:hover:bg-muted data-active:focus:bg-muted [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuIndicator({ className, ...props }) {\n return (\n <NavigationMenuPrimitive.Icon\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n 'top-full z-1 flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in',\n className,\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\n </NavigationMenuPrimitive.Icon>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuIndicator,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuPositioner,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n};\n","'use client';\n\nimport { cn } from '@/lib/utils';\nimport { Popover as PopoverPrimitive } from '@base-ui/react/popover';\n\nfunction Popover({ ...props }) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ className, ...props }) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" className={cn('w-full', className)} {...props} />;\n}\n\nfunction PopoverContent({ className, align = 'center', alignOffset = 0, side = 'bottom', sideOffset = 4, ...props }) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-[1000000]\"\n >\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-[1000000] flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-md p-1 text-xs shadow-md ring-1 outline-hidden duration-100',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverHeader({ className, ...props }) {\n return <div data-slot=\"popover-header\" className={cn('flex flex-col gap-0.5 text-xs', className)} {...props} />;\n}\n\nfunction PopoverTitle({ className, ...props }) {\n return (\n <PopoverPrimitive.Title\n data-slot=\"popover-title\"\n className={cn('font-heading font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction PopoverDescription({ className, ...props }) {\n return (\n <PopoverPrimitive.Description\n data-slot=\"popover-description\"\n className={cn('text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger };\n","import {\n Activity,\n BarChart2,\n ClipboardList,\n Clock,\n Compass,\n GitFork,\n Globe,\n Layers,\n Newspaper,\n Percent,\n Radio,\n Settings,\n ShoppingBasket,\n Shuffle,\n Sliders,\n SlidersHorizontal,\n Sparkles,\n TrendingUp,\n Zap,\n} from 'lucide-react';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 1. DATA: Stock X-Ray Matrix Categories\n// ─────────────────────────────────────────────────────────────────────────────\nexport const stockXRayCategories = [\n {\n id: 'performance',\n label: 'Performance',\n value: 'performance_matrix',\n route: '/performance_matrix',\n icon: TrendingUp,\n description: 'Relative Rotation Grade, Stage Identification & Momentum Analysis',\n sections: [\n {\n id: 'rrg',\n title: 'Relative Rotation Grade',\n desc: 'Leading, Weakening, Lagging & Improving zones',\n route: '/performance_matrix#rrg',\n hash: 'rrg',\n queryParams: { matrix: 'performance', section: 'rrg' },\n },\n {\n id: 'stage',\n title: 'Stage Identifier',\n desc: 'Accumulation, Markup, Distribution & Markdown',\n route: '/performance_matrix#stage',\n hash: 'stage',\n queryParams: { matrix: 'performance', section: 'stage' },\n },\n {\n id: 'price-strength',\n title: 'Price Strength',\n desc: 'Comparative outperformance against benchmark',\n route: '/performance_matrix#price-strength',\n hash: 'price-strength',\n queryParams: { matrix: 'performance', section: 'price-strength' },\n },\n {\n id: 'momentum',\n title: 'Momentum',\n desc: 'Speed and acceleration across short to long terms',\n route: '/performance_matrix#momentum',\n hash: 'momentum',\n queryParams: { matrix: 'performance', section: 'momentum' },\n },\n ],\n },\n {\n id: 'price-range',\n label: 'Price Range',\n value: 'price_range_matrix',\n route: '/price_range_matrix',\n icon: Activity,\n description: 'Price Range dynamics, Candle Spread, and Circuit Chart diagnostics',\n sections: [\n {\n id: 'price-range',\n title: 'Price Range',\n desc: '252D high-low channels and range positioning',\n route: '/price_range_matrix#price-range',\n hash: 'price-range',\n queryParams: { matrix: 'price-range', section: 'price-range' },\n },\n {\n id: 'candle-spread',\n title: 'Candle Spread',\n desc: 'Body vs wick distributions and spread sizes',\n route: '/price_range_matrix#candle-spread',\n hash: 'candle-spread',\n queryParams: { matrix: 'price-range', section: 'candle-spread' },\n },\n {\n id: 'candle-control',\n title: 'Candle Spread Control',\n desc: 'Buyer vs seller price control dominances',\n route: '/price_range_matrix#candle-control',\n hash: 'candle-control',\n queryParams: { matrix: 'price-range', section: 'candle-control' },\n },\n {\n id: 'circuit',\n title: 'Circuit Chart',\n desc: 'Historical upper and lower circuit hits',\n route: '/price_range_matrix#circuit',\n hash: 'circuit',\n queryParams: { matrix: 'price-range', section: 'circuit' },\n },\n ],\n },\n {\n id: 'engagement',\n label: 'Engagement',\n value: 'engagement_matrix',\n route: '/engagement_matrix',\n icon: Layers,\n description: 'Ask/bid ratios, average volumes, F&O open interest and delivery deals',\n sections: [\n {\n id: 'ask-bid',\n title: 'Ask Bid Ratios',\n desc: 'Order book buying and selling pressures',\n route: '/engagement_matrix#ask-bid',\n hash: 'ask-bid',\n queryParams: { matrix: 'engagement', section: 'ask-bid' },\n },\n {\n id: 'avg-volume',\n title: 'Average Volume',\n desc: 'Multi-day average share turnover rates',\n route: '/engagement_matrix#avg-volume',\n hash: 'avg-volume',\n queryParams: { matrix: 'engagement', section: 'avg-volume' },\n },\n {\n id: 'fno-volume',\n title: 'F&O Volume',\n desc: 'Futures and options derivative volumes',\n route: '/engagement_matrix#fno-volume',\n hash: 'fno-volume',\n queryParams: { matrix: 'engagement', section: 'fno-volume' },\n },\n {\n id: 'fno-oi',\n title: 'F&O Open Interest',\n desc: 'Long build-up and short covering profiles',\n route: '/engagement_matrix#fno-oi',\n hash: 'fno-oi',\n queryParams: { matrix: 'engagement', section: 'fno-oi' },\n },\n {\n id: 'cpr-pcr',\n title: 'PCR / CPR Profile',\n desc: 'Put-call ratios and central pivot ranges',\n route: '/engagement_matrix#cpr-pcr',\n hash: 'cpr-pcr',\n queryParams: { matrix: 'engagement', section: 'cpr-pcr' },\n },\n {\n id: 'bulk-block',\n title: 'Bulk & Block Deals',\n desc: 'Large institutional block trades',\n route: '/engagement_matrix#bulk-block',\n hash: 'bulk-block',\n queryParams: { matrix: 'engagement', section: 'bulk-block' },\n },\n {\n id: 'mf-holdings',\n title: 'MF Holdings',\n desc: 'Mutual fund quarterly holding changes',\n route: '/engagement_matrix#mf-holdings',\n hash: 'mf-holdings',\n queryParams: { matrix: 'engagement', section: 'mf-holdings' },\n },\n ],\n },\n {\n id: 'steering',\n label: 'Steering',\n value: 'steering_matrix',\n route: '/steering_matrix',\n icon: Compass,\n description: 'Financial profiles, Cash flow analysis, Shareholding & Industry mapping',\n sections: [\n {\n id: 'financial-profile',\n title: 'Financial Profile',\n desc: 'Key financial metrics and growth indicators',\n route: '/steering_matrix#financial-profile',\n hash: 'financial-profile',\n queryParams: { matrix: 'steering', section: 'financial-profile' },\n },\n {\n id: 'cash-flow',\n title: 'Cash Flow Analysis',\n desc: 'Operating, investing and financing cash flows',\n route: '/steering_matrix#cash-flow',\n hash: 'cash-flow',\n queryParams: { matrix: 'steering', section: 'cash-flow' },\n },\n {\n id: 'shareholding',\n title: 'Shareholding Pattern',\n desc: 'Promoter, FII, DII and public shareholding',\n route: '/steering_matrix#shareholding',\n hash: 'shareholding',\n queryParams: { matrix: 'steering', section: 'shareholding' },\n },\n {\n id: 'industry-mapping',\n title: 'Industry Mapping',\n desc: 'Sectoral peers and industry benchmarks',\n route: '/steering_matrix#industry-mapping',\n hash: 'industry-mapping',\n queryParams: { matrix: 'steering', section: 'industry-mapping' },\n },\n {\n id: 'market-cap',\n title: 'Market Cap Position',\n desc: 'Capitalization ranking and category tier',\n route: '/steering_matrix#market-cap',\n hash: 'market-cap',\n queryParams: { matrix: 'steering', section: 'market-cap' },\n },\n {\n id: 'index-chart',\n title: 'Index Chart',\n desc: 'Relative performance against index components',\n route: '/steering_matrix#index-chart',\n hash: 'index-chart',\n queryParams: { matrix: 'steering', section: 'index-chart' },\n },\n ],\n },\n {\n id: 'indicators',\n label: 'Indicators',\n value: 'indicators_matrix',\n route: '/indicators_matrix',\n icon: Sliders,\n description: 'Technical indicators including Moving Averages, Supertrend, Bollinger & MACD',\n sections: [\n {\n id: 'sma',\n title: 'SMA',\n desc: 'Simple Moving Average trends',\n route: '/indicators_matrix#sma',\n hash: 'sma',\n queryParams: { matrix: 'indicators', section: 'sma' },\n },\n {\n id: 'ema',\n title: 'EMA',\n desc: 'Exponential Moving Average signals',\n route: '/indicators_matrix#ema',\n hash: 'ema',\n queryParams: { matrix: 'indicators', section: 'ema' },\n },\n {\n id: 'supertrend',\n title: 'Supertrend',\n desc: 'Trend-following trailing levels',\n route: '/indicators_matrix#supertrend',\n hash: 'supertrend',\n queryParams: { matrix: 'indicators', section: 'supertrend' },\n },\n {\n id: 'bollinger-band',\n title: 'Bollinger Band',\n desc: 'Volatility envelopes and bands',\n route: '/indicators_matrix#bollinger-band',\n hash: 'bollinger-band',\n queryParams: { matrix: 'indicators', section: 'bollinger-band' },\n },\n {\n id: 'atr',\n title: 'Average True Range',\n desc: 'Market volatility measurements',\n route: '/indicators_matrix#atr',\n hash: 'atr',\n queryParams: { matrix: 'indicators', section: 'atr' },\n },\n {\n id: 'vwap',\n title: 'VWAP',\n desc: 'Volume Weighted Average Price',\n route: '/indicators_matrix#vwap',\n hash: 'vwap',\n queryParams: { matrix: 'indicators', section: 'vwap' },\n },\n {\n id: 'rsi',\n title: 'RSI',\n desc: 'Momentum oscillator diagnostics',\n route: '/indicators_matrix#rsi',\n hash: 'rsi',\n queryParams: { matrix: 'indicators', section: 'rsi' },\n },\n {\n id: 'stochastic',\n title: 'Stochastic',\n desc: 'Cycle speed and turning points',\n route: '/indicators_matrix#stochastic',\n hash: 'stochastic',\n queryParams: { matrix: 'indicators', section: 'stochastic' },\n },\n {\n id: 'macd',\n title: 'MACD',\n desc: 'Trend convergence and divergence',\n route: '/indicators_matrix#macd',\n hash: 'macd',\n queryParams: { matrix: 'indicators', section: 'macd' },\n },\n {\n id: 'adx',\n title: 'ADX',\n desc: 'Directional trend strength indicator',\n route: '/indicators_matrix#adx',\n hash: 'adx',\n queryParams: { matrix: 'indicators', section: 'adx' },\n },\n ],\n },\n {\n id: 'quant',\n label: 'Quant',\n value: 'risk_reward_matrix',\n route: '/risk_reward_matrix',\n icon: Percent,\n description: 'Quantitative risk-return profile, Volatility measures & Bell curves',\n sections: [\n {\n id: 'performance',\n title: 'Performance Measure',\n desc: 'Sharpe, Treynor & risk-adjusted returns',\n route: '/risk_reward_matrix#performance',\n hash: 'performance',\n queryParams: { matrix: 'quant', section: 'performance' },\n },\n {\n id: 'volatility',\n title: 'Volatility Measure',\n desc: 'Beta, variance and standard deviation',\n route: '/risk_reward_matrix#volatility',\n hash: 'volatility',\n queryParams: { matrix: 'quant', section: 'volatility' },\n },\n {\n id: 'market-sensitivity',\n title: 'Market Sensitivity',\n desc: 'Correlation, co-variance and R-squared',\n route: '/risk_reward_matrix#market-sensitivity',\n hash: 'market-sensitivity',\n queryParams: { matrix: 'quant', section: 'market-sensitivity' },\n },\n {\n id: 'risk-profile',\n title: 'Risk Profile',\n desc: 'Downside risk and maximum drawdown',\n route: '/risk_reward_matrix#risk-profile',\n hash: 'risk-profile',\n queryParams: { matrix: 'quant', section: 'risk-profile' },\n },\n {\n id: 'bell-curves',\n title: 'Bell Curves',\n desc: 'Normal return distribution curves',\n route: '/risk_reward_matrix#bell-curves',\n hash: 'bell-curves',\n queryParams: { matrix: 'quant', section: 'bell-curves' },\n },\n ],\n },\n {\n id: 'formation',\n label: 'Formation',\n value: 'formation_matrix',\n route: '/formation_matrix',\n icon: Sparkles,\n description: 'Candlestick patterns, Fib retracement, VCP & AVWAP analysis',\n sections: [\n {\n id: 'single-candle',\n title: 'Single Candle Patterns',\n desc: 'Doji, hammer, marubozu formations',\n route: '/formation_matrix#single-candle',\n hash: 'single-candle',\n queryParams: { matrix: 'formation', section: 'single-candle' },\n },\n {\n id: 'double-candle',\n title: 'Double Candle Patterns',\n desc: 'Engulfing, harami and kicker reversals',\n route: '/formation_matrix#double-candle',\n hash: 'double-candle',\n queryParams: { matrix: 'formation', section: 'double-candle' },\n },\n {\n id: 'capitulation-exhaustion',\n title: 'Capitulation & Exhaustion',\n desc: 'Climax volume exhaustion signatures',\n route: '/formation_matrix#capitulation-exhaustion',\n hash: 'capitulation-exhaustion',\n queryParams: { matrix: 'formation', section: 'capitulation-exhaustion' },\n },\n {\n id: 'fav-unfav',\n title: 'Fav & Unfav Candles',\n desc: 'High-probability setup identification',\n route: '/formation_matrix#fav-unfav',\n hash: 'fav-unfav',\n queryParams: { matrix: 'formation', section: 'fav-unfav' },\n },\n {\n id: 'fib-retracement',\n title: 'Fib Retracement',\n desc: 'Key Golden Ratio retracement zones',\n route: '/formation_matrix#fib-retracement',\n hash: 'fib-retracement',\n queryParams: { matrix: 'formation', section: 'fib-retracement' },\n },\n {\n id: 'vcp',\n title: 'Volatility Contraction',\n desc: 'Volatility contraction pattern (VCP)',\n route: '/formation_matrix#vcp',\n hash: 'vcp',\n queryParams: { matrix: 'formation', section: 'vcp' },\n },\n {\n id: 'avwap',\n title: 'AVWAP Analysis',\n desc: 'Anchored volume-weighted average price',\n route: '/formation_matrix#avwap',\n hash: 'avwap',\n queryParams: { matrix: 'formation', section: 'avwap' },\n },\n ],\n },\n {\n id: 'news',\n label: 'News',\n value: 'news_matrix',\n route: '/news_matrix',\n icon: Newspaper,\n description: 'Real-time curated financial news feeds & industry developments',\n sections: [\n {\n id: 'latest-news',\n title: 'Latest News',\n desc: 'Live market headlines and breaking stories',\n route: '/news_matrix#latest-news',\n hash: 'latest-news',\n queryParams: { matrix: 'news', section: 'latest-news' },\n },\n {\n id: 'industry-news',\n title: 'Industry News',\n desc: 'Sectoral developments and macro updates',\n route: '/news_matrix#industry-news',\n hash: 'industry-news',\n queryParams: { matrix: 'news', section: 'industry-news' },\n },\n ],\n },\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 2. DATA: Charting Categories\n// ─────────────────────────────────────────────────────────────────────────────\nexport const chartingCategories = [\n {\n id: 'chart_types',\n label: 'Chart Types',\n type: 'candleType',\n route: '/',\n icon: BarChart2,\n description: 'Select your preferred visual candlestick or price action representation',\n items: [\n {\n id: 'candle',\n title: 'Standard Candle',\n desc: 'Traditional open-high-low-close candlestick',\n route: '/',\n queryParams: { candleType: 'candle' },\n },\n {\n id: 'heikinAshi',\n title: 'Heikin Ashi',\n desc: 'Filtered smoothed trend candlestick',\n route: '/',\n queryParams: { candleType: 'heikinAshi' },\n },\n {\n id: 'line',\n title: 'Line Chart',\n desc: 'Continuous close-to-close price line',\n route: '/',\n queryParams: { candleType: 'line' },\n },\n {\n id: 'area',\n title: 'Area Chart',\n desc: 'Filled gradient area under the close line',\n route: '/',\n queryParams: { candleType: 'area' },\n },\n {\n id: 'ohlc',\n title: 'OHLC Bars',\n desc: 'Western bar tick chart display',\n route: '/',\n queryParams: { candleType: 'ohlc' },\n },\n {\n id: 'hollow',\n title: 'Hollow Candles',\n desc: 'Color & fill based on close vs open and prior close',\n route: '/',\n queryParams: { candleType: 'hollow' },\n },\n {\n id: 'stepline',\n title: 'Step Line',\n desc: 'Stepped horizontal price progression',\n route: '/',\n queryParams: { candleType: 'stepline' },\n },\n {\n id: 'lineWithMarker',\n title: 'Line + Markers',\n desc: 'Close price line with discrete data points',\n route: '/',\n queryParams: { candleType: 'lineWithMarker' },\n },\n ],\n },\n {\n id: 'trend_indicators',\n label: 'Trend Indicators',\n type: 'indicator',\n route: '/',\n icon: TrendingUp,\n description: 'Moving averages and directional trend-following indicators',\n items: [\n {\n id: 'EMA',\n title: 'Exponential Moving Average (EMA)',\n desc: 'Weighted trend line responsive to recent data',\n route: '/',\n queryParams: { indicator: 'EMA' },\n },\n {\n id: 'SMA',\n title: 'Simple Moving Average (SMA)',\n desc: 'Arithmetic mean price over specified periods',\n route: '/',\n queryParams: { indicator: 'SMA' },\n },\n {\n id: 'wma',\n title: 'Weighted Moving Average (WMA)',\n desc: 'Linearly weighted trend moving average',\n route: '/',\n queryParams: { indicator: 'wma' },\n },\n {\n id: 'supertrend',\n title: 'SuperTrend (SuperT)',\n desc: 'ATR-based directional trend-following band',\n route: '/',\n queryParams: { indicator: 'supertrend' },\n },\n {\n id: 'alligator',\n title: 'Williams Alligator',\n desc: 'Jaw, teeth and lips trend phase indicator',\n route: '/',\n queryParams: { indicator: 'alligator' },\n },\n {\n id: 'psar',\n title: 'Parabolic SAR (PSAR)',\n desc: 'Trailing stop-and-reverse price markers',\n route: '/',\n queryParams: { indicator: 'psar' },\n },\n {\n id: 'AVWAP',\n title: 'Anchored VWAP (AVWAP)',\n desc: 'Volume weighted average price from anchor date',\n route: '/',\n queryParams: { indicator: 'AVWAP' },\n },\n ],\n },\n {\n id: 'momentum_oscillators',\n label: 'Momentum',\n type: 'indicator',\n route: '/',\n icon: Activity,\n description: 'Speed, rate of change, overbought and oversold condition detectors',\n items: [\n {\n id: 'rsiController',\n title: 'Relative Strength Index (RSI)',\n desc: 'Speed and magnitude of recent price changes',\n route: '/',\n queryParams: { indicator: 'rsiController' },\n },\n {\n id: 'macd',\n title: 'MACD Oscillator',\n desc: 'Moving Average Convergence Divergence',\n route: '/',\n queryParams: { indicator: 'macd' },\n },\n {\n id: 'stochastic_9_slow',\n title: 'Stochastic Slow',\n desc: 'Smoothed momentum oscillator for swing cycles',\n route: '/',\n queryParams: { indicator: 'stochastic_9_slow' },\n },\n {\n id: 'stochastic_9_fast',\n title: 'Stochastic Fast',\n desc: 'Fast-reacting momentum trigger',\n route: '/',\n queryParams: { indicator: 'stochastic_9_fast' },\n },\n {\n id: 'stochastic_9',\n title: 'Stochastic Full',\n desc: 'Full customizable stochastic oscillator',\n route: '/',\n queryParams: { indicator: 'stochastic_9' },\n },\n {\n id: 'ao',\n title: 'Awesome Oscillator (AO)',\n desc: 'Market momentum comparison of 34 and 5 periods',\n route: '/',\n queryParams: { indicator: 'ao' },\n },\n {\n id: 'adxController',\n title: 'Average Directional Index (ADX)',\n desc: 'Trend strength quantifier without direction',\n route: '/',\n queryParams: { indicator: 'adxController' },\n },\n ],\n },\n {\n id: 'volatility_bands',\n label: 'Volatility & Range',\n type: 'indicator',\n route: '/',\n icon: Sliders,\n description: 'Statistical price distribution and market volatility measurements',\n items: [\n {\n id: 'bollingerBands',\n title: 'Bollinger Bands (BB)',\n desc: 'Standard deviation volatility envelope',\n route: '/',\n queryParams: { indicator: 'bollingerBands' },\n },\n {\n id: 'atrController',\n title: 'Average True Range (ATR)',\n desc: 'True price volatility measure across candles',\n route: '/',\n queryParams: { indicator: 'atrController' },\n },\n {\n id: 'vo',\n title: 'Volume Oscillator (VO)',\n desc: 'Volume momentum oscillator',\n route: '/',\n queryParams: { indicator: 'vo' },\n },\n {\n id: 'fibonacciRetracement',\n title: 'Fibonacci Retracement (FIR)',\n desc: 'Golden Ratio price levels & extensions',\n route: '/',\n queryParams: { indicator: 'fibonacciRetracement' },\n },\n ],\n },\n {\n id: 'volume_analytics',\n label: 'Volume Analytics',\n type: 'indicator',\n route: '/',\n icon: Layers,\n description: 'Order flow, liquidity profiles and institutional accumulation levels',\n items: [\n {\n id: 'volume',\n title: 'Volume Bars',\n desc: 'Color-coded traded volume bars with EMA',\n route: '/',\n queryParams: { indicator: 'volume' },\n },\n {\n id: 'volprofile',\n title: 'Volume Profile (VolProfile)',\n desc: 'Volume distribution by price level (POC/VA)',\n route: '/',\n queryParams: { indicator: 'volprofile' },\n },\n {\n id: 'vwap',\n title: 'Volume Weighted Avg Price (VWAP)',\n desc: 'Session volume-weighted benchmark',\n route: '/',\n queryParams: { indicator: 'vwap' },\n },\n {\n id: 'VSMA',\n title: 'Volume SMA (VSMA)',\n desc: 'Volume simple moving average overlay',\n route: '/',\n queryParams: { indicator: 'VSMA' },\n },\n {\n id: 'vma',\n title: 'Volume Moving Average (VMA)',\n desc: 'Smooth volume moving average',\n route: '/',\n queryParams: { indicator: 'vma' },\n },\n {\n id: 'accumulation_distribution',\n title: 'Accumulation / Distribution',\n desc: 'Cumulative volume flow indicator',\n route: '/',\n queryParams: { indicator: 'accumulation_distribution' },\n },\n ],\n },\n {\n id: 'patterns',\n label: 'Candle Patterns',\n type: 'pattern',\n route: '/',\n icon: Sparkles,\n description: 'Algorithmic detection of single and multi-candle reversal structures',\n items: [\n {\n id: 'all_patterns',\n title: 'All Candle Patterns',\n desc: 'Auto-detect all known candlestick structures',\n route: '/',\n queryParams: { pattern: 'all_patterns' },\n },\n {\n id: 'perfect_doji',\n title: 'Perfect Doji',\n desc: 'Indecision bar with matching open and close',\n route: '/',\n queryParams: { pattern: 'perfect_doji' },\n },\n {\n id: 'hammer',\n title: 'Hammer',\n desc: 'Bullish reversal with long lower wick',\n route: '/',\n queryParams: { pattern: 'hammer' },\n },\n {\n id: 'reverse_hammer',\n title: 'Reverse Hammer',\n desc: 'Bullish bounce attempt after downtrend',\n route: '/',\n queryParams: { pattern: 'reverse_hammer' },\n },\n {\n id: 'marubozu',\n title: 'Marubozu',\n desc: 'Full-bodied momentum candle without wicks',\n route: '/',\n queryParams: { pattern: 'marubozu' },\n },\n {\n id: 'inside_bar',\n title: 'Inside Bar',\n desc: 'Volatility compression candle inside mother bar',\n route: '/',\n queryParams: { pattern: 'inside_bar' },\n },\n {\n id: 'bullish_harami',\n title: 'Bullish Harami',\n desc: 'Two-bar inside bullish reversal',\n route: '/',\n queryParams: { pattern: 'bullish_harami' },\n },\n {\n id: 'bearish_harami',\n title: 'Bearish Harami',\n desc: 'Two-bar inside bearish reversal',\n route: '/',\n queryParams: { pattern: 'bearish_harami' },\n },\n {\n id: 'bullish_engulfing',\n title: 'Bullish Engulfing',\n desc: 'Bullish candle completely engulfing prior bar',\n route: '/',\n queryParams: { pattern: 'bullish_engulfing' },\n },\n {\n id: 'bearish_engulfing',\n title: 'Bearish Engulfing',\n desc: 'Bearish candle completely engulfing prior bar',\n route: '/',\n queryParams: { pattern: 'bearish_engulfing' },\n },\n {\n id: 'bullish_kicker',\n title: 'Bullish Kicker',\n desc: 'Gap reversal explosive upward momentum',\n route: '/',\n queryParams: { pattern: 'bullish_kicker' },\n },\n {\n id: 'bearish_kicker',\n title: 'Bearish Kicker',\n desc: 'Gap reversal downward momentum',\n route: '/',\n queryParams: { pattern: 'bearish_kicker' },\n },\n ],\n },\n {\n id: 'conditions',\n label: 'Market Conditions',\n type: 'condition',\n route: '/',\n icon: SlidersHorizontal,\n description: 'Smart algorithmic scanner filters and market structure conditions',\n items: [\n {\n id: 'gapUp',\n title: 'Gap Up Open',\n desc: \"Today's open exceeds previous candle high\",\n route: '/',\n queryParams: { condition: 'gapUp' },\n },\n {\n id: 'gapDown',\n title: 'Gap Down Open',\n desc: \"Today's open falls below previous candle low\",\n route: '/',\n queryParams: { condition: 'gapDown' },\n },\n {\n id: 'tightCandle',\n title: 'Tight Range Candle',\n desc: 'Extremely compressed range coiling bar',\n route: '/',\n queryParams: { condition: 'tightCandle' },\n },\n {\n id: 'favCandle',\n title: 'Favorable Candle',\n desc: 'High conviction bullish market structure',\n route: '/',\n queryParams: { condition: 'favCandle' },\n },\n {\n id: 'unfavCandle',\n title: 'Unfavorable Candle',\n desc: 'High conviction bearish market structure',\n route: '/',\n queryParams: { condition: 'unfavCandle' },\n },\n {\n id: 'volumeAboveEMA',\n title: 'Volume Above EMA',\n desc: 'Surge above multi-day average volume',\n route: '/',\n queryParams: { condition: 'volumeAboveEMA' },\n },\n {\n id: 'ath52WHRange',\n title: 'ATH / 52W High Range',\n desc: 'Proximity to all-time or 52-week high',\n route: '/',\n queryParams: { condition: 'ath52WHRange' },\n },\n {\n id: 'atl52WLRange',\n title: 'ATL / 52W Low Range',\n desc: 'Proximity to all-time or 52-week low',\n route: '/',\n queryParams: { condition: 'atl52WLRange' },\n },\n {\n id: 'latestCHoch',\n title: 'Latest CHoCH Break',\n desc: 'Change of character market structure shift',\n route: '/',\n queryParams: { condition: 'latestCHoch' },\n },\n {\n id: 'latestSH',\n title: 'Latest Swing High',\n desc: 'Current prominent swing high resistance point',\n route: '/',\n queryParams: { condition: 'latestSH' },\n },\n {\n id: 'latestSL',\n title: 'Latest Swing Low',\n desc: 'Current prominent swing low support point',\n route: '/',\n queryParams: { condition: 'latestSL' },\n },\n ],\n },\n {\n id: 'timeframes',\n label: 'Timeframes',\n type: 'timeframe',\n route: '/',\n icon: Clock,\n description: 'Multi-timeframe analysis from intraday scalping to macro swing periods',\n items: [\n {\n id: 'minute',\n title: '1 Minute',\n desc: 'Ultra-fast scalping resolution',\n route: '/',\n queryParams: { interval: 'minute' },\n },\n {\n id: '3minute',\n title: '3 Minutes',\n desc: 'Intraday micro momentum',\n route: '/',\n queryParams: { interval: '3minute' },\n },\n {\n id: '5minute',\n title: '5 Minutes',\n desc: 'Standard day trading resolution',\n route: '/',\n queryParams: { interval: '5minute' },\n },\n {\n id: '15minute',\n title: '15 Minutes',\n desc: 'Intraday trend structure',\n route: '/',\n queryParams: { interval: '15minute' },\n },\n {\n id: '30minute',\n title: '30 Minutes',\n desc: 'Intraday swing structure',\n route: '/',\n queryParams: { interval: '30minute' },\n },\n {\n id: '60minute',\n title: '1 Hour',\n desc: 'Intermediate hourly trend',\n route: '/',\n queryParams: { interval: '60minute' },\n },\n {\n id: '2hour',\n title: '2 Hours',\n desc: 'Multi-hour position trend',\n route: '/',\n queryParams: { interval: '2hour' },\n },\n {\n id: '4hour',\n title: '4 Hours',\n desc: 'Major session market structure',\n route: '/',\n queryParams: { interval: '4hour' },\n },\n {\n id: 'day',\n title: 'Daily',\n desc: 'EOD swing trading baseline',\n route: '/',\n queryParams: { interval: 'day' },\n },\n {\n id: 'week',\n title: 'Weekly',\n desc: 'Medium-term macro trend',\n route: '/',\n queryParams: { interval: 'week' },\n },\n {\n id: 'month',\n title: 'Monthly',\n desc: 'Long-term investment perspective',\n route: '/',\n queryParams: { interval: 'month' },\n },\n ],\n },\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 3. DATA: Scanner Filter Categories\n// ─────────────────────────────────────────────────────────────────────────────\nexport const scannerCategories = [\n {\n id: 'popular_strategies',\n label: 'Popular Scans',\n route: '/',\n icon: Zap,\n description: 'Battle-tested multi-factor algorithmic screening strategies',\n items: [\n {\n id: 'bullish_breakout',\n title: 'Bullish Breakout (Volume + Price)',\n desc: 'Price break with 2x volume expansion',\n indicator: 'rsi_14',\n route: '/',\n queryParams: { addFilter: 'rsi_14', title: 'Bullish Breakout (Volume + Price)' },\n },\n {\n id: 'momentum_leaders',\n title: 'Momentum Leaders (RRG)',\n desc: 'Leading quadrant rotation with high RS',\n indicator: 'momentum',\n route: '/',\n queryParams: { addFilter: 'momentum', title: 'Momentum Leaders (RRG)' },\n },\n {\n id: '52w_high_break',\n title: '52-Week High Breakouts',\n desc: 'Crossing multi-month resistance levels',\n indicator: '252d_high_low_range',\n route: '/',\n queryParams: { addFilter: '252d_high_low_range', title: '52-Week High Breakouts' },\n },\n {\n id: 'golden_crossover',\n title: 'Golden Cross (EMA 50 / 200)',\n desc: 'Medium to long-term trend reversal',\n indicator: 'ema_price_50',\n route: '/',\n queryParams: { addFilter: 'ema_price_50', title: 'Golden Cross (EMA 50 / 200)' },\n },\n {\n id: 'oversold_reversal',\n title: 'Oversold RSI Reversal (< 30)',\n desc: 'Extreme discount bounce candidates',\n indicator: 'rsi_14',\n route: '/',\n queryParams: { addFilter: 'rsi_14', title: 'Oversold RSI Reversal (< 30)' },\n },\n {\n id: 'supertrend_bull',\n title: 'SuperTrend Bullish Flip',\n desc: 'Directional trend change confirmation',\n indicator: 'supertrend_direction_10',\n route: '/',\n queryParams: { addFilter: 'supertrend_direction_10', title: 'SuperTrend Bullish Flip' },\n },\n {\n id: 'high_delivery',\n title: 'High Delivery & Bulk Deals',\n desc: 'Institutional accumulation signatures',\n indicator: 'share_volume_profile_delivery',\n route: '/',\n queryParams: { addFilter: 'share_volume_profile_delivery', title: 'High Delivery & Bulk Deals' },\n },\n {\n id: 'vcp_coil',\n title: 'Volatility Contraction (VCP)',\n desc: 'Tightening range before explosive move',\n indicator: 'candle_spread',\n route: '/',\n queryParams: { addFilter: 'candle_spread', title: 'Volatility Contraction (VCP)' },\n },\n ],\n },\n {\n id: 'matrix_filters',\n label: 'Matrix Filters',\n route: '/',\n icon: Activity,\n description: 'Scan stocks using multi-dimensional diagnostic matrix attributes',\n items: [\n {\n id: 'rrg',\n title: 'Relative Rotation Grade (RRG)',\n desc: 'Leading, Weakening, Lagging, Improving',\n indicator: 'rrg',\n route: '/',\n queryParams: { addFilter: 'rrg', title: 'Relative Rotation Grade (RRG)' },\n },\n {\n id: 'price_strength',\n title: 'Price Strength Analysis',\n desc: 'Outperformance relative to Nifty index',\n indicator: 'price_strength',\n route: '/',\n queryParams: { addFilter: 'price_strength', title: 'Price Strength Analysis' },\n },\n {\n id: 'momentum',\n title: 'Momentum Diagnostics',\n desc: 'Rate of change and acceleration index',\n indicator: 'momentum',\n route: '/',\n queryParams: { addFilter: 'momentum', title: 'Momentum Diagnostics' },\n },\n {\n id: 'candle_spread',\n title: 'Candle Spread & Control',\n desc: 'Body vs wick dynamics and spread shifts',\n indicator: 'candle_spread',\n route: '/',\n queryParams: { addFilter: 'candle_spread', title: 'Candle Spread & Control' },\n },\n {\n id: 'circuits',\n title: 'Circuit Chart Diagnostics',\n desc: 'Upper and lower circuit boundary proximity',\n indicator: 'circuits',\n route: '/',\n queryParams: { addFilter: 'circuits', title: 'Circuit Chart Diagnostics' },\n },\n {\n id: 'ask_bid',\n title: 'Ask / Bid Ratio Flow',\n desc: 'Order book aggressive buyer dominance',\n indicator: 'ask_bid_ratio',\n route: '/',\n queryParams: { addFilter: 'ask_bid_ratio', title: 'Ask / Bid Ratio Flow' },\n },\n {\n id: 'fno_oi',\n title: 'F&O Open Interest Profile',\n desc: 'Long build-up and short covering shifts',\n indicator: 'fno_open_interest_profile',\n route: '/',\n queryParams: { addFilter: 'fno_open_interest_profile', title: 'F&O Open Interest Profile' },\n },\n {\n id: 'mf_holdings',\n title: 'Mutual Fund Accumulation',\n desc: 'Consecutive quarter stake increases',\n indicator: 'mf_holding',\n route: '/',\n queryParams: { addFilter: 'mf_holding', title: 'Mutual Fund Accumulation' },\n },\n ],\n },\n {\n id: 'technical_indicators',\n label: 'Indicators',\n route: '/',\n icon: Sliders,\n description: 'Technical condition triggers and mathematical indicator filters',\n items: [\n {\n id: 'sma_20',\n title: 'Simple Moving Average (SMA 20)',\n desc: '20-day trend baseline',\n indicator: 'sma_price_20',\n route: '/',\n queryParams: { addFilter: 'sma_price_20', title: 'Simple Moving Average (SMA 20)' },\n },\n {\n id: 'ema_50',\n title: 'Exponential Moving Average (EMA 50)',\n desc: '50-day momentum baseline',\n indicator: 'ema_price_50',\n route: '/',\n queryParams: { addFilter: 'ema_price_50', title: 'Exponential Moving Average (EMA 50)' },\n },\n {\n id: 'rsi_14',\n title: 'Relative Strength Index (RSI 14)',\n desc: 'Momentum speed and oversold levels',\n indicator: 'rsi_14',\n route: '/',\n queryParams: { addFilter: 'rsi_14', title: 'Relative Strength Index (RSI 14)' },\n },\n {\n id: 'macd',\n title: 'MACD Histogram (12, 26, 9)',\n desc: 'Zero line and signal line trigger filters',\n indicator: 'macd_histogram_26',\n route: '/',\n queryParams: { addFilter: 'macd_histogram_26', title: 'MACD Histogram (12, 26, 9)' },\n },\n {\n id: 'bollinger',\n title: 'Bollinger Bands Upper (20, 1)',\n desc: 'Bandwidth compression & breakouts',\n indicator: 'bollinger_upper_20_1',\n route: '/',\n queryParams: { addFilter: 'bollinger_upper_20_1', title: 'Bollinger Bands Upper (20, 1)' },\n },\n {\n id: 'supertrend',\n title: 'Supertrend Direction (10, 3)',\n desc: 'Trend-following trailing stop conditions',\n indicator: 'supertrend_direction_10',\n route: '/',\n queryParams: { addFilter: 'supertrend_direction_10', title: 'Supertrend Direction (10, 3)' },\n },\n {\n id: 'vwap',\n title: 'Volume Weighted Avg Price (VWAP)',\n desc: 'Institutional benchmark price filters',\n indicator: 'vwap',\n route: '/',\n queryParams: { addFilter: 'vwap', title: 'Volume Weighted Avg Price (VWAP)' },\n },\n {\n id: 'atr',\n title: 'Average True Range (ATR 14)',\n desc: 'Volatility thresholds & range expansion',\n indicator: 'atr_14',\n route: '/',\n queryParams: { addFilter: 'atr_14', title: 'Average True Range (ATR 14)' },\n },\n ],\n },\n {\n id: 'candlestick_patterns',\n label: 'Candle Patterns',\n route: '/',\n icon: Sparkles,\n description: 'Algorithmic visual price action formations & reversal structures',\n items: [\n {\n id: 'candle_pattern',\n title: 'Candle Pattern Detector',\n desc: 'Algorithmic single and multi-candle patterns',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', title: 'Candle Pattern Detector' },\n },\n {\n id: 'hammer',\n title: 'Hammer & Inverted Hammer',\n desc: 'Bullish exhaustion & rejection pins',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', pattern: 'hammer', title: 'Hammer & Inverted Hammer' },\n },\n {\n id: 'engulfing',\n title: 'Bullish & Bearish Engulfing',\n desc: 'Complete trend takeover candles',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', pattern: 'engulfing', title: 'Bullish & Bearish Engulfing' },\n },\n {\n id: 'harami',\n title: 'Bullish & Bearish Harami',\n desc: 'Inside bar gestation reversals',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', pattern: 'harami', title: 'Bullish & Bearish Harami' },\n },\n {\n id: 'marubozu',\n title: 'Marubozu Momentum Bars',\n desc: 'Full-bodied directional conviction',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', pattern: 'marubozu', title: 'Marubozu Momentum Bars' },\n },\n {\n id: 'doji',\n title: 'Doji & Star Formations',\n desc: 'Market equilibrium and pending breakouts',\n indicator: 'candle_pattern',\n route: '/',\n queryParams: { addFilter: 'candle_pattern', pattern: 'doji', title: 'Doji & Star Formations' },\n },\n ],\n },\n {\n id: 'workspaces',\n label: 'Workspaces & Radar',\n route: '/radar',\n icon: Radio,\n description: 'Saved custom screening presets, live scans, and background monitors',\n items: [\n {\n id: 'radar',\n title: 'Market Radar Live Feed',\n desc: 'Auto-refreshing real-time scanner signals',\n route: '/radar',\n },\n {\n id: 'saved_filters',\n title: 'Saved Filter Presets',\n desc: 'Manage and run your saved scanner queries',\n route: '/saved-filters',\n },\n {\n id: 'custom_screener',\n title: 'Build New Screener',\n desc: 'Design custom multi-group scanner rules',\n route: '/',\n },\n ],\n },\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 4. DATA: Faster / Macro Pulse Categories\n// ─────────────────────────────────────────────────────────────────────────────\nexport const macroPulseCategories = [\n {\n id: 'economy',\n label: 'Economy',\n value: 'Economy',\n dbName: 'Economy',\n dbId: '7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n icon: Globe,\n description: 'Key economic indicators, GDP, inflation, central bank rates & fiscal deficit',\n items: [\n {\n id: 'gdp_growth',\n title: 'GDP Growth Rate',\n desc: 'Quarterly economic expansion & GDP trajectories',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'gdp_growth' },\n },\n {\n id: 'inflation',\n title: 'Inflation Rate',\n desc: 'Consumer and wholesale price indices',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'inflation' },\n },\n {\n id: 'repo_rate',\n title: 'Repo Rate',\n desc: 'Monetary policy benchmark lending rates',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'repo_rate' },\n },\n {\n id: 'gst_collection',\n title: 'GST Collection',\n desc: 'Monthly gross indirect and direct tax revenue',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'gst_collection' },\n },\n {\n id: 'forex_reserves',\n title: 'Forex Reserves',\n desc: 'Central bank foreign currency & gold reserves',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'forex_reserves' },\n },\n {\n id: 'exports',\n title: 'Exports',\n desc: 'Monthly merchandise and services exports',\n route: '/user/category/Economy/7f938e09-cdfa-45b3-a9ce-39f705eb7414',\n queryParams: { indicator: 'exports' },\n },\n ],\n },\n {\n id: 'indices',\n label: 'Indices',\n value: 'Indices',\n dbName: 'Indices',\n dbId: 'd86c85c8-cb56-4b51-be64-f179f32588fd',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n icon: TrendingUp,\n description: 'Domestic sectoral benchmarks and global equity market indices',\n items: [\n {\n id: 'nifty_50',\n title: 'NIFTY 50 & SENSEX',\n desc: 'Benchmark headline market performance',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n queryParams: { indicator: 'nifty_50' },\n },\n {\n id: 'nifty_bank',\n title: 'NIFTY Bank & Fin Services',\n desc: 'Banking sector credit and liquidity index',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n queryParams: { indicator: 'nifty_bank' },\n },\n {\n id: 'nifty_it',\n title: 'NIFTY IT & Tech',\n desc: 'Technology export sector performance',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n queryParams: { indicator: 'nifty_it' },\n },\n {\n id: 'us_markets',\n title: 'US Markets (S&P, Nasdaq, DOW)',\n desc: 'Wall Street tech and broader market leads',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n queryParams: { indicator: 'us_markets' },\n },\n {\n id: 'asian_markets',\n title: 'Asian Markets (Nikkei, Hang Seng)',\n desc: 'Far East market sentiment indicators',\n route: '/user/category/Indices/d86c85c8-cb56-4b51-be64-f179f32588fd',\n queryParams: { indicator: 'asian_markets' },\n },\n ],\n },\n {\n id: 'commodity',\n label: 'Commodities',\n value: 'Commodity',\n dbName: 'Commodity',\n dbId: 'f816b25a-a54f-488b-b46c-adc7af328c9d',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n icon: Compass,\n description: 'Energy, precious metals, industrial metals & agri commodity markets',\n items: [\n {\n id: 'brent_crude',\n title: 'Brent Crude Oil',\n desc: 'Global energy benchmark price & trends',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n queryParams: { indicator: 'brent_crude' },\n },\n {\n id: 'gold_silver',\n title: 'Gold & Silver Futures',\n desc: 'Safe-haven precious metals performance',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n queryParams: { indicator: 'gold_silver' },\n },\n {\n id: 'natural_gas',\n title: 'Natural Gas',\n desc: 'Henry Hub energy & heating futures',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n queryParams: { indicator: 'natural_gas' },\n },\n {\n id: 'copper_steel',\n title: 'Copper & Steel Futures',\n desc: 'Industrial metals infrastructure demand',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n queryParams: { indicator: 'copper_steel' },\n },\n {\n id: 'sugar_agri',\n title: 'Sugar & Soft Commodities',\n desc: 'Agricultural supply and food price trends',\n route: '/user/category/Commodity/f816b25a-a54f-488b-b46c-adc7af328c9d',\n queryParams: { indicator: 'sugar_agri' },\n },\n ],\n },\n {\n id: 'currency',\n label: 'Currencies & FX',\n value: 'Currency',\n dbName: 'Currency',\n dbId: '87853571-5ed2-4b87-b8da-8ac5d35be8be',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n icon: Percent,\n description: 'Dollar index, cross-currency pairs & crypto digital assets',\n items: [\n {\n id: 'dxy',\n title: 'Dollar Index (DXY)',\n desc: 'Greenback relative strength against basket',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n queryParams: { indicator: 'dxy' },\n },\n {\n id: 'usdinr',\n title: 'USD / INR',\n desc: 'Rupee exchange rate vs US Dollar',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n queryParams: { indicator: 'usdinr' },\n },\n {\n id: 'usdjpy',\n title: 'USD / JPY',\n desc: 'Yen carry trade and Asian FX barometer',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n queryParams: { indicator: 'usdjpy' },\n },\n {\n id: 'eurinr',\n title: 'EUR / INR',\n desc: 'Eurozone cross-rate stability benchmark',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n queryParams: { indicator: 'eurinr' },\n },\n {\n id: 'crypto_btc',\n title: 'Bitcoin / Crypto',\n desc: 'Digital asset liquidity and risk appetite',\n route: '/user/category/Currency/87853571-5ed2-4b87-b8da-8ac5d35be8be',\n queryParams: { indicator: 'crypto_btc' },\n },\n ],\n },\n {\n id: 'bond_market',\n label: 'Bond Market',\n value: 'Bond market',\n dbName: 'Bond market',\n dbId: 'da0fd588-7c5f-44cd-84ec-90981aa56b10',\n route: '/user/category/Bond%20market/da0fd588-7c5f-44cd-84ec-90981aa56b10',\n icon: Activity,\n description: 'Sovereign bond yields, treasury bills & yield curves',\n items: [\n {\n id: 'india_10y',\n title: '10 Yr IND Bond Yield',\n desc: 'Domestic benchmark sovereign debt rate',\n route: '/user/category/Bond%20market/da0fd588-7c5f-44cd-84ec-90981aa56b10',\n queryParams: { indicator: 'india_10y' },\n },\n {\n id: 'us_10y',\n title: '10 Yr US Bond Yield',\n desc: 'Global risk-free benchmark hurdle rate',\n route: '/user/category/Bond%20market/da0fd588-7c5f-44cd-84ec-90981aa56b10',\n queryParams: { indicator: 'us_10y' },\n },\n {\n id: 'us_2y',\n title: '2 Yr US Bond Yield',\n desc: 'Short-term policy-sensitive treasury yield',\n route: '/user/category/Bond%20market/da0fd588-7c5f-44cd-84ec-90981aa56b10',\n queryParams: { indicator: 'us_2y' },\n },\n {\n id: 'tbills',\n title: '91D Treasury Bills Yield',\n desc: 'Short-term liquidity risk barometer',\n route: '/user/category/Bond%20market/da0fd588-7c5f-44cd-84ec-90981aa56b10',\n queryParams: { indicator: 'tbills' },\n },\n ],\n },\n {\n id: 'funds',\n label: 'Funds & Flows',\n value: 'Funds',\n dbName: 'Funds',\n dbId: 'acddb03c-9023-4096-9248-e8fe1da70022',\n route: '/user/category/Funds/acddb03c-9023-4096-9248-e8fe1da70022',\n icon: Layers,\n description: 'FPI flows, FDI trends, monthly SIP investments & mutual fund AUM',\n items: [\n {\n id: 'monthly_sip',\n title: 'Monthly SIP Collection',\n desc: 'Domestic retail monthly investment inflow',\n route: '/user/category/Funds/acddb03c-9023-4096-9248-e8fe1da70022',\n queryParams: { indicator: 'monthly_sip' },\n },\n {\n id: 'fpi_cash',\n title: 'FPI Cash Equity & Debt',\n desc: 'Foreign portfolio investment net flows',\n route: '/user/category/Funds/acddb03c-9023-4096-9248-e8fe1da70022',\n queryParams: { indicator: 'fpi_cash' },\n },\n {\n id: 'fdi',\n title: 'State-wise FDI Inflows',\n desc: 'Long-term direct foreign investment',\n route: '/user/category/Funds/acddb03c-9023-4096-9248-e8fe1da70022',\n queryParams: { indicator: 'fdi' },\n },\n {\n id: 'avg_aum',\n title: 'Avg Agg. AUM with MFs',\n desc: 'Mutual fund industry total assets',\n route: '/user/category/Funds/acddb03c-9023-4096-9248-e8fe1da70022',\n queryParams: { indicator: 'avg_aum' },\n },\n ],\n },\n {\n id: 'volatility',\n label: 'Volatility & Breadth',\n value: 'Volatility',\n dbName: 'Volatility',\n dbId: '2698a695-0b12-46ab-a6e0-87a954b40f66',\n route: '/user/category/Volatility/2698a695-0b12-46ab-a6e0-87a954b40f66',\n icon: Zap,\n description: 'India VIX, CBOE VIX, advance/decline market breadth & put-call ratios',\n items: [\n {\n id: 'india_vix',\n title: 'INDIA VIX',\n desc: 'Domestic equity market implied volatility',\n route: '/user/category/Volatility/2698a695-0b12-46ab-a6e0-87a954b40f66',\n queryParams: { indicator: 'india_vix' },\n },\n {\n id: 'cboe_vix',\n title: 'CBOE VIX Volatility',\n desc: 'Wall Street fear index benchmark',\n route: '/user/category/Volatility/2698a695-0b12-46ab-a6e0-87a954b40f66',\n queryParams: { indicator: 'cboe_vix' },\n },\n {\n id: 'pcr_nifty',\n title: 'PCR - NIFTY 50',\n desc: 'Put-call ratio sentiment gauge',\n route: '/user/category/Volatility/2698a695-0b12-46ab-a6e0-87a954b40f66',\n queryParams: { indicator: 'pcr_nifty' },\n },\n {\n id: 'adv_dec',\n title: 'Advance/Decline Ratio - NSE',\n desc: 'Broad market participation & breadth',\n route: '/user/category/Volatility/2698a695-0b12-46ab-a6e0-87a954b40f66',\n queryParams: { indicator: 'adv_dec' },\n },\n ],\n },\n {\n id: 'macro',\n label: 'Valuation (PE/PB)',\n value: 'Macro',\n dbName: 'Macro',\n dbId: '77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n route: '/user/category/Macro/77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n icon: BarChart2,\n description: 'Price-to-Earnings (PE) & Price-to-Book (PB) sectoral valuations',\n items: [\n {\n id: 'pe_nifty',\n title: 'PE - NIFTY 50',\n desc: 'Trailing price-to-earnings valuation ratio',\n route: '/user/category/Macro/77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n queryParams: { indicator: 'pe_nifty' },\n },\n {\n id: 'pb_nifty',\n title: 'PB - NIFTY 50',\n desc: 'Price-to-book valuation multiple',\n route: '/user/category/Macro/77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n queryParams: { indicator: 'pb_nifty' },\n },\n {\n id: 'pe_bank',\n title: 'PE - NIFTY Bank',\n desc: 'Banking sector PE valuation tracker',\n route: '/user/category/Macro/77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n queryParams: { indicator: 'pe_bank' },\n },\n {\n id: 'pe_nasdaq',\n title: 'PE - NASDAQ & DOW',\n desc: 'US tech and blue-chip PE comparisons',\n route: '/user/category/Macro/77df568a-92b7-41d9-a5f4-6e4f30349fb9',\n queryParams: { indicator: 'pe_nasdaq' },\n },\n ],\n },\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 5. DATA: Derivatives Categories\n// ─────────────────────────────────────────────────────────────────────────────\nexport const derivativesCategories = [\n {\n id: 'option_chains',\n label: 'Option Chains',\n value: 'option_chains',\n route: '/option-chain',\n icon: GitFork,\n description: 'Live strike-wise option chain analytics, open interest, IV & Greeks',\n items: [\n {\n id: 'option-chain',\n title: 'Option Chain',\n desc: 'Live strike-wise CE/PE open interest, IV & Greeks',\n route: '/option-chain',\n queryParams: { tab: 'chain' },\n },\n ],\n },\n {\n id: 'positions',\n label: 'Positions',\n value: 'positions',\n route: '/positions',\n icon: BarChart2,\n description: 'Real-time portfolio positions, MTM monitoring and derivative ledger',\n items: [\n {\n id: 'positions',\n title: 'Positions',\n desc: 'Active open positions, MTM and derivative P&L',\n route: '/positions',\n queryParams: { tab: 'active' },\n },\n ],\n },\n {\n id: 'orders',\n label: 'Orders',\n value: 'orders',\n route: '/orders',\n icon: ClipboardList,\n description: 'Live order books, multi-leg execution statuses & trade transaction history',\n items: [\n {\n id: 'orders',\n title: 'Orders',\n desc: 'Live order book and transaction statuses',\n route: '/orders',\n },\n {\n id: 'orders-new',\n title: 'Orders New',\n desc: 'Advanced multi-leg order entry & execution',\n route: '/orders-new',\n },\n ],\n },\n {\n id: 'baskets',\n label: 'Baskets',\n value: 'baskets',\n route: '/v1/baskets',\n icon: ShoppingBasket,\n description: 'Multi-asset basket order execution and portfolio basket management',\n items: [\n {\n id: 'v1-baskets',\n title: 'Baskets',\n desc: 'Create and execute multi-leg basket orders',\n route: '/v1/baskets',\n },\n ],\n },\n {\n id: 'strategy',\n label: 'Strategy',\n value: 'strategy',\n route: '/strategy-chart',\n icon: Shuffle,\n description: 'Interactive payoff diagrams and multi-leg risk curves',\n items: [\n {\n id: 'strategy-chart',\n title: 'Strategy Chart',\n desc: 'Interactive payoff diagrams and multi-leg risk curves',\n route: '/strategy-chart',\n },\n ],\n },\n {\n id: 'settings',\n label: 'Settings',\n value: 'settings',\n route: '/settings/freeze-quantity',\n icon: Settings,\n description: 'Freeze quantity thresholds & broker user permissions',\n items: [\n {\n id: 'freeze-quantity',\n title: 'Freeze Quantity',\n desc: 'Max freeze quantity limit per underlying',\n route: '/settings/freeze-quantity',\n },\n {\n id: 'users',\n title: 'Users',\n desc: 'Broker account linking and permissions',\n route: '/settings/users',\n },\n ],\n },\n];\n","import { Activity, BarChart2, BookmarkCheck, Globe, Layers, Radio, Scan, TrendingUp } from 'lucide-react';\nimport {\n chartingCategories,\n derivativesCategories,\n macroPulseCategories,\n scannerCategories,\n stockXRayCategories,\n} from '../constants/categories';\n\nexport const defaultHeaderConfig = {\n authApiUrl: 'https://sso-api.datatokenapi.com/api',\n authRedirectUrl: 'https://sso.datatokenapi.com',\n profileGetter: null,\n uiTheme: 'system',\n currentApp: 'derivatives',\n themeParamName: 'theme',\n appendThemeParam: true,\n urls: {\n landing: 'https://fastr-pro.datatokenapi.com',\n sso: 'https://sso.datatokenapi.com',\n purchase: 'https://sso.datatokenapi.com/purchase',\n profile: 'https://sso.datatokenapi.com/profile',\n xray: 'https://xray-pro.datatokenapi.com',\n scanner: 'https://scanner-pro.datatokenapi.com',\n charting: 'https://chart-pro.datatokenapi.com',\n macro: 'https://macropulse-pro.datatokenapi.com',\n derivatives: 'https://derivatives-pro.datatokenapi.com',\n },\n apps: {\n xray: {\n id: 'xray',\n name: 'Stock X-Ray',\n label: 'Stock X-Ray',\n url: 'https://xray-pro.datatokenapi.com',\n icon: Activity,\n bannerImage: '/images/bull_market.png',\n badge: 'Stock X-Ray',\n badgeColor: 'text-yellow-400',\n footerNote: 'Click any section to inspect diagnostic',\n menuHeader: 'Matrices',\n description: 'Comprehensive multi-dimensional stock diagnostics & matrix insights for precision trading.',\n hasMegaMenu: true,\n pages: stockXRayCategories,\n },\n scanner: {\n id: 'scanner',\n name: 'Scanner',\n label: 'Scanner',\n url: 'https://scanner-pro.datatokenapi.com',\n icon: Scan,\n bannerImage: '/images/bull_market.png',\n badge: 'FASTR SCANNER',\n badgeColor: 'text-emerald-400',\n footerNote: 'Click any filter to open in Scanner',\n menuHeader: 'Filter Groups',\n description:\n 'Algorithmic multi-factor stock screening engine with 17+ matrix groups, real-time indicators, and automated radar tracking.',\n hasMegaMenu: true,\n quickActions: [\n {\n id: 'saved_filters',\n title: 'Saved Filters',\n icon: BookmarkCheck,\n route: '/saved-filters',\n badgeColor: 'text-blue-500',\n },\n {\n id: 'radar',\n title: 'Live Radar',\n icon: Radio,\n route: '/radar',\n badgeColor: 'text-emerald-500',\n },\n ],\n pages: scannerCategories,\n },\n charting: {\n id: 'charting',\n name: 'Charting',\n label: 'Charting',\n url: 'https://chart-pro.datatokenapi.com',\n icon: TrendingUp,\n bannerImage: '/images/bull_market.png',\n badge: 'FASTR CHARTING',\n badgeColor: 'text-blue-400',\n footerNote: 'Click any item to open in Charting',\n menuHeader: 'Charting Tools',\n description:\n 'Professional multi-timeframe charting with 25+ technical indicators, automated candlestick patterns & conditions.',\n hasMegaMenu: true,\n pages: chartingCategories,\n },\n derivatives: {\n id: 'derivatives',\n name: 'Derivatives',\n label: 'Derivatives',\n url: 'https://derivatives-pro.datatokenapi.com',\n icon: Layers,\n bannerImage: '/images/bull_market.png',\n badge: 'FASTR DERIVATIVES',\n badgeColor: 'text-amber-500',\n footerNote: 'Click any item to open module',\n menuHeader: 'Modules',\n description: 'Professional options analytics, live chain matrix, systematic strategies & automated execution.',\n hasMegaMenu: true,\n quickActions: [\n {\n id: 'positions',\n title: 'Live Positions',\n icon: BarChart2,\n route: '/positions',\n badgeColor: 'text-blue-500',\n },\n ],\n pages: derivativesCategories,\n },\n macro: {\n id: 'macro',\n name: 'Macro Pulse',\n label: 'Macro Pulse',\n url: 'https://macropulse-pro.datatokenapi.com',\n icon: Globe,\n bannerImage: '/images/bull_market.png',\n badge: 'FASTR MACRO PULSE',\n badgeColor: 'text-purple-400',\n footerNote: 'Click any item to open in Macro Pulse',\n menuHeader: 'Macro Sectors',\n description:\n 'Macroeconomic indicators, global market trends, commodity prices, institutional flows & policy trackers.',\n hasMegaMenu: true,\n pages: macroPulseCategories,\n },\n },\n};\n\n/**\n * Deeply merges user-provided config with defaultHeaderConfig.\n */\nexport function createHeaderConfig(userConfig = {}) {\n if (!userConfig) return { ...defaultHeaderConfig };\n\n const mergedUrls = {\n ...defaultHeaderConfig.urls,\n ...(userConfig.urls || {}),\n };\n\n // Merge apps\n let mergedApps = {};\n if (Array.isArray(userConfig.apps)) {\n mergedApps = userConfig.apps.reduce((acc, app) => {\n const defaultApp = defaultHeaderConfig.apps[app.id] || {};\n acc[app.id] = {\n ...defaultApp,\n ...app,\n pages: app.pages || app.categories || defaultApp.pages || [],\n };\n return acc;\n }, {});\n } else if (userConfig.apps && typeof userConfig.apps === 'object') {\n const allKeys = Array.from(new Set([...Object.keys(defaultHeaderConfig.apps), ...Object.keys(userConfig.apps)]));\n for (const key of allKeys) {\n const defaultApp = defaultHeaderConfig.apps[key] || {};\n const customApp = userConfig.apps[key];\n if (customApp) {\n mergedApps[key] = {\n ...defaultApp,\n ...customApp,\n id: customApp.id || key,\n pages: customApp.pages || customApp.categories || defaultApp.pages || [],\n };\n } else {\n mergedApps[key] = { ...defaultApp };\n }\n }\n } else {\n mergedApps = { ...defaultHeaderConfig.apps };\n }\n\n return {\n ...defaultHeaderConfig,\n ...userConfig,\n urls: mergedUrls,\n apps: mergedApps,\n };\n}\n\nexport default defaultHeaderConfig;\n","import React from 'react';\n\n/**\n * Safely renders an icon whether passed as a Lucide component,\n * a functional component, a JSX Element, a string, or undefined.\n */\nexport function renderIcon(IconOrNode, props = {}) {\n if (!IconOrNode) return null;\n\n // If already a valid React element (e.g. <Activity className=\"size-4\" />)\n if (React.isValidElement(IconOrNode)) {\n return React.cloneElement(IconOrNode, {\n ...props,\n className: `${IconOrNode.props.className || ''} ${props.className || ''}`.trim(),\n });\n }\n\n // If a React component function/class (e.g. Activity or (props) => <svg ... />)\n if (typeof IconOrNode === 'function' || (typeof IconOrNode === 'object' && IconOrNode.$$typeof)) {\n const Component = IconOrNode;\n return <Component {...props} />;\n }\n\n // If a string (e.g. emoji or text icon)\n if (typeof IconOrNode === 'string') {\n return <span className={props.className}>{IconOrNode}</span>;\n }\n\n return null;\n}\n\nexport default renderIcon;\n","/**\n * URL builder utility for Fastr Global Header and Mega Menu navigation.\n * Resolves full or relative URLs, merges search query params, theme param, and hash anchors.\n */\nexport function buildItemUrl({\n baseUrl = '',\n route = '',\n href = '',\n queryParams = {},\n params = {},\n hash = '',\n currentTheme = '',\n appendTheme = true,\n themeParamName = 'theme',\n isCurrentApp = false,\n}) {\n let target = href || route || '/';\n\n // If in another app and baseUrl is provided, make it absolute\n if (!isCurrentApp && baseUrl && !target.startsWith('http://') && !target.startsWith('https://')) {\n const cleanBase = baseUrl.replace(/\\/+$/, '');\n const cleanPath = target.startsWith('/') ? target : `/${target}`;\n target = `${cleanBase}${cleanPath}`;\n }\n\n try {\n const dummyBase =\n typeof window !== 'undefined' && window.location?.origin ? window.location.origin : 'http://localhost';\n const isAbsolute = target.startsWith('http://') || target.startsWith('https://');\n const parsed = new URL(target, dummyBase);\n\n // Merge query params\n const mergedParams = {\n ...(queryParams || {}),\n ...(params || {}),\n };\n\n Object.entries(mergedParams).forEach(([k, v]) => {\n if (v !== undefined && v !== null && v !== '') {\n parsed.searchParams.set(k, String(v));\n }\n });\n\n // Theme param handling\n if (appendTheme && currentTheme) {\n parsed.searchParams.set(themeParamName, currentTheme);\n }\n\n // Hash handling\n if (hash) {\n const cleanHash = hash.startsWith('#') ? hash : `#${hash}`;\n parsed.hash = cleanHash;\n }\n\n if (isAbsolute) {\n return parsed.toString();\n }\n return parsed.pathname + parsed.search + parsed.hash;\n } catch {\n return target;\n }\n}\n\n/**\n * Appends current theme param to a given URL if not already present.\n */\nexport function withThemeParam(url, currentTheme, themeParamName = 'theme') {\n if (!url || url.startsWith('#') || url.startsWith('java' + 'script:')) return url;\n try {\n const dummyBase =\n typeof window !== 'undefined' && window.location?.origin ? window.location.origin : 'http://localhost';\n const isRelative = url.startsWith('/');\n const u = new URL(url, dummyBase);\n if (currentTheme) {\n u.searchParams.set(themeParamName, currentTheme);\n }\n const clean = isRelative ? u.pathname + u.search + u.hash : u.toString();\n return clean.replace(/([^:]\\/)\\/+/g, '$1');\n } catch {\n return url;\n }\n}\n","'use client';\n\nimport { ArrowRight, ChevronRight } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { cn } from '../lib/utils';\nimport { renderIcon } from '../utils/renderIcon';\nimport { buildItemUrl } from '../utils/url';\n\nexport default function GlobalMegaMenu({\n app,\n type = 'macro', // fallback id if app object is not directly passed\n config,\n currentApp = 'derivatives',\n isDarkMode = false,\n isSubscribed = true,\n purchaseUrl = '',\n categoryData = [],\n onClose,\n onNavigate,\n urls = {},\n theme = '',\n // Optional Charting tool callbacks\n onSelectCandleType,\n onSelectIndicator,\n onSelectPattern,\n onSelectCondition,\n onSelectInterval,\n}) {\n // Resolve app config\n const resolvedApp = app || (config?.apps ? config.apps[type] : null) || { id: type };\n const appId = resolvedApp.id || type;\n const appName = resolvedApp.name || resolvedApp.label || appId;\n const appUrl = resolvedApp.url || urls[appId] || '';\n const isCurrentApp = currentApp === appId;\n\n const bannerImage = resolvedApp.bannerImage || '/images/bull_market.png';\n const badgeText = resolvedApp.badge || appName;\n const badgeColor = resolvedApp.badgeColor || 'text-primary';\n const description = resolvedApp.description || '';\n const menuHeader = resolvedApp.menuHeader || resolvedApp.categoriesHeader || 'Navigation';\n const footerNote = resolvedApp.footerNote || '';\n const quickActions = resolvedApp.quickActions || [];\n\n // Resolve pages/categories\n const pages = resolvedApp.pages || resolvedApp.categories || [];\n\n // Active category state\n const [activePage, setActivePage] = useState(() => (pages.length > 0 ? pages[0] : null));\n\n useEffect(() => {\n if (pages.length > 0) {\n setActivePage(pages[0]);\n } else {\n setActivePage(null);\n }\n }, [appId, pages]);\n\n // Compute base URL for an item\n const getComputedUrl = (itemOrPage, defaultRoute = '/') => {\n return buildItemUrl({\n baseUrl: appUrl,\n route: itemOrPage.route || defaultRoute,\n href: itemOrPage.href,\n queryParams: itemOrPage.queryParams,\n params: itemOrPage.params,\n hash: itemOrPage.hash,\n currentTheme: theme,\n appendTheme: config?.appendThemeParam !== false,\n themeParamName: config?.themeParamName || 'theme',\n isCurrentApp,\n });\n };\n\n const appOverviewUrl = useMemo(() => {\n return buildItemUrl({\n baseUrl: appUrl,\n route: resolvedApp.route || '/',\n href: resolvedApp.href,\n queryParams: resolvedApp.queryParams,\n params: resolvedApp.params,\n currentTheme: theme,\n appendTheme: config?.appendThemeParam !== false,\n themeParamName: config?.themeParamName || 'theme',\n isCurrentApp,\n });\n }, [appUrl, resolvedApp, theme, config, isCurrentApp]);\n\n // Click interceptor that respects Ctrl/Cmd new-tab clicks, custom onClick, client router, and subscription gates\n const handleLinkClick = (e, targetUrl, customOnClick, itemOrPage) => {\n // If modifier key is pressed, let browser handle open in new tab\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1) {\n return;\n }\n\n if (isSubscribed === false) {\n e.preventDefault();\n if (onClose) onClose();\n const redirectUrl = purchaseUrl || `${urls.sso || 'http://localhost:3123'}/purchase?app=${appId}`;\n window.location.assign(redirectUrl);\n return;\n }\n\n if (customOnClick) {\n e.preventDefault();\n if (onClose) onClose();\n customOnClick(itemOrPage, activePage, resolvedApp);\n return;\n }\n\n // Charting tool selection in current app\n if (isCurrentApp && appId === 'charting' && itemOrPage) {\n if (activePage?.type === 'candleType' && onSelectCandleType) {\n e.preventDefault();\n onSelectCandleType(itemOrPage.id);\n if (onClose) onClose();\n return;\n }\n if (activePage?.type === 'indicator' && onSelectIndicator) {\n e.preventDefault();\n onSelectIndicator(itemOrPage.id);\n if (onClose) onClose();\n return;\n }\n if (activePage?.type === 'pattern' && onSelectPattern) {\n e.preventDefault();\n onSelectPattern(itemOrPage.id);\n if (onClose) onClose();\n return;\n }\n if (activePage?.type === 'condition' && onSelectCondition) {\n e.preventDefault();\n onSelectCondition(itemOrPage.id);\n if (onClose) onClose();\n return;\n }\n if (activePage?.type === 'timeframe' && onSelectInterval) {\n e.preventDefault();\n onSelectInterval(itemOrPage.id);\n if (onClose) onClose();\n return;\n }\n }\n\n // Stock X-Ray scroll to section in current app\n if (isCurrentApp && appId === 'xray' && itemOrPage?.hash) {\n const sectionId = itemOrPage.hash || itemOrPage.id;\n window.dispatchEvent(new CustomEvent('xray:scroll-to-section', { detail: { sectionId } }));\n let attempts = 0;\n const tryScroll = (retryCount = 0) => {\n const el = document.getElementById(sectionId);\n if (el) {\n const headerOffset = 75;\n const elementPosition = el.getBoundingClientRect().top;\n const offsetPosition = elementPosition + window.pageYOffset - headerOffset;\n window.scrollTo({ top: Math.max(0, offsetPosition), behavior: 'smooth' });\n if (retryCount < 3) {\n setTimeout(() => tryScroll(retryCount + 1), 400);\n }\n } else if (attempts < 30) {\n attempts++;\n setTimeout(() => tryScroll(retryCount), 100);\n }\n };\n setTimeout(() => tryScroll(0), 60);\n }\n\n // Scanner add filter in current app\n if (isCurrentApp && appId === 'scanner' && itemOrPage?.indicator) {\n window.dispatchEvent(\n new CustomEvent('scanner:add-filter', {\n detail: { indicator: itemOrPage.indicator, id: itemOrPage.id, title: itemOrPage.title },\n }),\n );\n }\n\n // Client router navigation\n if (isCurrentApp && onNavigate) {\n e.preventDefault();\n if (onClose) onClose();\n onNavigate(targetUrl, resolvedApp, itemOrPage);\n } else {\n if (onClose) onClose();\n }\n };\n\n const currentItems = activePage ? activePage.sections || activePage.items || [] : [];\n\n return (\n <div\n className=\"bg-popover text-popover-foreground border-border w-285 max-w-[96vw] rounded-xl border p-4 shadow-2xl transition-all\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-[1fr_1fr_3fr]\">\n {/* 1. Leftmost Column: Overview Card & Quick Action Links */}\n <div className=\"border-border flex flex-col justify-between border-b pr-0 pb-4 lg:border-r lg:border-b-0 lg:pr-4 lg:pb-0\">\n <div>\n <a\n href={appOverviewUrl}\n onClick={(e) => handleLinkClick(e, appOverviewUrl, resolvedApp.onClick, resolvedApp)}\n className=\"group border-border bg-muted relative block aspect-16/10 overflow-hidden rounded-lg border shadow-xs\"\n >\n {bannerImage && (\n <img\n src={bannerImage}\n alt={badgeText}\n className=\"h-full w-full object-cover transition-transform duration-500 group-hover:scale-105\"\n onError={(e) => {\n e.target.style.display = 'none';\n }}\n />\n )}\n <div className=\"absolute inset-0 flex items-end bg-linear-to-t from-black/75 via-black/20 to-transparent p-2.5\">\n <span className=\"border-border/40 bg-background/80 text-foreground inline-flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-[10px] font-bold tracking-wider uppercase backdrop-blur-xs\">\n {renderIcon(resolvedApp.icon, { className: `size-3.5 ${badgeColor}` })}\n <span>{badgeText}</span>\n </span>\n </div>\n </a>\n\n {description && <p className=\"text-muted-foreground mt-3 text-xs leading-relaxed\">{description}</p>}\n </div>\n\n {/* Quick Action Links or Footer Note */}\n {quickActions.length > 0 ? (\n <div className=\"flex flex-col gap-1.5 pt-3\">\n {quickActions.map((qa) => {\n const qaUrl = getComputedUrl(qa, qa.route || '/');\n return (\n <a\n key={qa.id}\n href={qaUrl}\n onClick={(e) => handleLinkClick(e, qaUrl, qa.onClick, qa)}\n className=\"border-border/60 bg-muted/50 hover:bg-accent hover:text-accent-foreground text-foreground group flex w-full cursor-pointer items-center justify-between rounded-lg border px-2.5 py-1.5 text-xs font-semibold transition-colors\"\n >\n <span className=\"flex items-center gap-1.5\">\n {renderIcon(qa.icon, { className: `size-3.5 ${qa.badgeColor || 'text-primary'}` })}\n <span>{qa.title || qa.label}</span>\n </span>\n <ArrowRight className=\"text-muted-foreground group-hover:text-foreground size-3 transition-transform group-hover:translate-x-0.5\" />\n </a>\n );\n })}\n </div>\n ) : footerNote ? (\n <div className=\"text-muted-foreground text-[11px] font-medium\">{footerNote}</div>\n ) : null}\n </div>\n\n {/* 2. Middle Column: Category / Page Links List */}\n <div className=\"border-border flex flex-col justify-between border-b pr-0 pb-3 lg:border-r lg:border-b-0 lg:pr-4 lg:pb-0\">\n <div>\n <div className=\"border-border mb-3 border-b pb-3\">\n <span className=\"text-muted-foreground text-xs font-bold\">{menuHeader}</span>\n </div>\n\n <div className=\"flex flex-col gap-1\">\n {pages.map((page) => {\n const isSelected = activePage && activePage.id === page.id;\n const pageUrl = getComputedUrl(page, page.route || `/${page.value || page.id}`);\n\n return (\n <a\n key={page.id}\n href={pageUrl}\n onClick={(e) => handleLinkClick(e, pageUrl, page.onClick, page)}\n onMouseEnter={() => setActivePage(page)}\n className={cn(\n 'flex w-full cursor-pointer items-center justify-between rounded-lg px-3 py-2 text-left text-xs font-medium transition-all select-none sm:text-sm',\n isSelected\n ? 'bg-primary text-primary-foreground font-semibold shadow-xs'\n : 'text-muted-foreground hover:bg-accent hover:text-accent-foreground',\n )}\n >\n <div className=\"flex items-center gap-2.5\">\n {renderIcon(page.icon, {\n className: cn(\n 'size-4 shrink-0',\n isSelected ? 'text-primary-foreground' : 'text-muted-foreground group-hover:text-foreground',\n ),\n })}\n <span>{page.label || page.title || page.name}</span>\n </div>\n <ChevronRight\n className={cn('size-3.5 transition-transform', isSelected ? 'opacity-100' : 'opacity-0')}\n />\n </a>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* 3. Right Column: Active Page Header & 3-Column Items Grid Links */}\n <div className=\"flex min-w-0 flex-col\">\n {/* Active Page Header */}\n {activePage && (\n <div className=\"border-border mb-3 flex items-center justify-between border-b pb-3\">\n <div>\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-foreground text-sm font-bold sm:text-base\">\n {activePage.label || activePage.title}\n </h3>\n <span className=\"border-border bg-muted text-muted-foreground rounded-full border px-2 py-0.5 text-[11px] font-medium\">\n {currentItems.length} Options\n </span>\n </div>\n {activePage.description && (\n <p className=\"text-muted-foreground mt-0.5 text-xs\">{activePage.description}</p>\n )}\n </div>\n </div>\n )}\n\n {/* 3-Column Grid of Section / Tool Cards (Every Card is an <a> tag) */}\n <div className=\"flex-1\">\n <div className=\"no-scrollbar grid max-h-85 grid-cols-1 gap-2.5 overflow-y-auto pr-1 sm:grid-cols-2 lg:grid-cols-3\">\n {currentItems.map((item) => {\n const itemUrl = getComputedUrl(item, activePage?.route || '/');\n\n return (\n <a\n key={item.id}\n href={itemUrl}\n onClick={(e) => handleLinkClick(e, itemUrl, item.onClick, item)}\n className=\"group border-border bg-card hover:bg-accent/60 hover:border-primary/40 flex min-h-18 cursor-pointer flex-col justify-between rounded-lg border p-3 text-left shadow-xs transition-all\"\n >\n <div className=\"mb-1.5 flex items-start justify-between gap-1.5\">\n <span className=\"text-card-foreground group-hover:text-accent-foreground line-clamp-2 text-xs leading-snug font-semibold\">\n {item.title || item.name || item.label}\n </span>\n <ArrowRight className=\"text-muted-foreground group-hover:text-primary mt-0.5 size-3 shrink-0 transition-all group-hover:translate-x-0.5\" />\n </div>\n <span className=\"text-muted-foreground line-clamp-1 text-[10px] font-medium\">\n {item.desc || item.description || 'Inspect →'}\n </span>\n </a>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport {\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuPositioner,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from '@/components/ui/navigation-menu';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { createHeaderConfig } from '@/config/defaultConfig';\nimport { cn } from '@/lib/utils';\nimport { renderIcon } from '@/utils/renderIcon';\nimport { buildItemUrl } from '@/utils/url';\nimport { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport {\n Calendar,\n Check,\n ChevronRight,\n CreditCard,\n ExternalLink,\n LogOut,\n Monitor,\n Moon,\n Sun,\n User,\n} from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport FasterProLogo from './FasterProLogo';\nimport GlobalMegaMenu from './GlobalMegaMenu';\n\nfunction formatDate(dateStr) {\n if (!dateStr) return '';\n try {\n const d = new Date(dateStr);\n if (isNaN(d.getTime())) return dateStr;\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n } catch {\n return dateStr;\n }\n}\n\nexport default function GlobalHeader({\n config: userConfig,\n authApiUrl: propAuthApiUrl,\n authRedirectUrl: propAuthRedirectUrl,\n profileGetter: propProfileGetter,\n uiTheme: propUiTheme,\n apps: propApps,\n user: propUser,\n logout: propLogout,\n theme: controlledTheme,\n setTheme: controlledSetTheme,\n currentApp: propCurrentApp,\n navigate,\n onNavigate,\n urls: propUrls = {},\n logo,\n onLogoClick,\n categoryData = [],\n chartingCallbacks = {},\n products: customProducts,\n extraRightContent,\n className,\n}) {\n // 1. Resolve unified config\n const config = useMemo(() => {\n const directProps = {\n ...(propAuthApiUrl ? { authApiUrl: propAuthApiUrl } : {}),\n ...(propAuthRedirectUrl ? { authRedirectUrl: propAuthRedirectUrl } : {}),\n ...(propProfileGetter ? { profileGetter: propProfileGetter } : {}),\n ...(propUiTheme ? { uiTheme: propUiTheme } : {}),\n ...(propApps ? { apps: propApps } : {}),\n ...(propCurrentApp ? { currentApp: propCurrentApp } : {}),\n ...(propUrls && Object.keys(propUrls).length > 0 ? { urls: propUrls } : {}),\n };\n\n return createHeaderConfig({\n ...(userConfig || {}),\n ...directProps,\n });\n }, [\n userConfig,\n propAuthApiUrl,\n propAuthRedirectUrl,\n propProfileGetter,\n propUiTheme,\n propApps,\n propCurrentApp,\n propUrls,\n ]);\n\n const currentApp = propCurrentApp || config.currentApp || 'derivatives';\n const authApiUrl = (config.authApiUrl || 'https://sso-api.datatokenapi.com/api').replace(/\\/+$/, '');\n const authRedirectUrl = (config.authRedirectUrl || config.urls?.sso || 'https://sso.datatokenapi.com').replace(\n /\\/+$/,\n '',\n );\n const profileGetter = propProfileGetter || config.profileGetter;\n\n // 2. Profile resolution & fetching\n const [fetchedUser, setFetchedUser] = useState(null);\n const [userLoading, setUserLoading] = useState(false);\n\n useEffect(() => {\n if (propUser !== undefined || config.user !== undefined) return;\n\n if (typeof profileGetter === 'function') {\n setUserLoading(true);\n Promise.resolve(profileGetter())\n .then((res) => {\n setFetchedUser(res?.data || res?.user || res);\n })\n .catch((err) => {\n console.warn('[GlobalHeader] profileGetter error:', err);\n })\n .finally(() => {\n setUserLoading(false);\n });\n } else if (authApiUrl && typeof window !== 'undefined') {\n setUserLoading(true);\n const meUrl = authApiUrl.endsWith('/api') ? `${authApiUrl}/auth/me` : `${authApiUrl}/api/auth/me`;\n const fallbackUrl = authApiUrl.endsWith('/api') ? `${authApiUrl}/auth/profile` : `${authApiUrl}/api/auth/profile`;\n\n fetch(meUrl, { credentials: 'include' })\n .then((r) => {\n if (r.ok) return r.json();\n return fetch(fallbackUrl, { credentials: 'include' }).then((r2) => (r2.ok ? r2.json() : null));\n })\n .then((data) => {\n if (data) setFetchedUser(data?.data || data?.user || data);\n })\n .catch(() => {})\n .finally(() => setUserLoading(false));\n }\n }, [propUser, config.user, profileGetter, authApiUrl]);\n\n const user = propUser !== undefined ? propUser : config.user !== undefined ? config.user : fetchedUser;\n\n // Helper to find corresponding app from user.apps or user.all_apps\n const findUserApp = (productId) => {\n const appsList = user?.apps || user?.all_apps || [];\n const target = (productId || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n return appsList.find((a) => {\n const code = (a.code || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n const name = (a.name || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n return (\n (target.includes('scanner') && (code.includes('scanner') || name.includes('scanner'))) ||\n (target.includes('chart') && (code.includes('chart') || name.includes('chart'))) ||\n (target.includes('deriv') && (code.includes('deriv') || name.includes('deriv'))) ||\n (target.includes('macro') && (code.includes('macro') || name.includes('macro'))) ||\n (target.includes('xray') &&\n (code.includes('xray') ||\n name.includes('xray') ||\n name.includes('stockxray') ||\n name.includes('stock-x-ray'))) ||\n name === target ||\n code === target\n );\n });\n };\n\n // 3. Theme management\n const [internalTheme, setInternalTheme] = useState(() => {\n if (typeof window !== 'undefined') {\n return localStorage.getItem('theme') || config.uiTheme || 'system';\n }\n return config.uiTheme || 'system';\n });\n\n const theme = controlledTheme !== undefined ? controlledTheme : internalTheme;\n\n const setTheme = (newTheme) => {\n if (controlledSetTheme) {\n controlledSetTheme(newTheme);\n } else {\n setInternalTheme(newTheme);\n if (typeof window !== 'undefined') {\n localStorage.setItem('theme', newTheme);\n if (newTheme === 'dark') {\n document.documentElement.classList.add('dark');\n } else if (newTheme === 'light') {\n document.documentElement.classList.remove('dark');\n } else {\n if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n }\n }\n }\n };\n\n const [systemDark, setSystemDark] = useState(() => {\n if (typeof window !== 'undefined') {\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n return false;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n const onChange = (e) => setSystemDark(e.matches);\n mq.addEventListener('change', onChange);\n return () => mq.removeEventListener('change', onChange);\n }, []);\n\n const isDark = theme === 'dark' || (theme === 'system' && systemDark);\n const [profileOpen, setProfileOpen] = useState(false);\n const [navValue, setNavValue] = useState('');\n const [lockedModalApp, setLockedModalApp] = useState(null);\n const firstButtonRef = useRef(null);\n\n // 4. URL resolution\n const ssoProfileUrl = config.urls?.profile || `${authRedirectUrl}/profile`;\n const ssoPurchaseUrl = config.urls?.purchase || `${authRedirectUrl}/purchase`;\n const landingUrl = config.urls?.landing || 'http://localhost:3005';\n\n const getAppPurchaseUrl = (productId) => {\n const matchedApp = findUserApp(productId);\n if (matchedApp && matchedApp.id) {\n return `${ssoPurchaseUrl}?app_id=${matchedApp.id}`;\n }\n return `${ssoPurchaseUrl}?app=${productId}`;\n };\n\n const isAppSubscribed = (productId) => {\n if (!user) return true;\n if (user?.role === 'superadmin' || user?.is_superadmin) return true;\n\n const target = (productId || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n\n // Check user.subscriptions object/map (e.g. { \"stock x-ray\": { status: \"active\" }, ... })\n const subs = user?.subscriptions;\n if (subs && !Array.isArray(subs) && typeof subs === 'object') {\n for (const [key, val] of Object.entries(subs)) {\n const k = key.toLowerCase().replace(/[^a-z0-9]/g, '');\n const isMatch =\n (target.includes('scanner') && k.includes('scanner')) ||\n (target.includes('chart') && k.includes('chart')) ||\n (target.includes('deriv') && k.includes('deriv')) ||\n (target.includes('macro') && k.includes('macro')) ||\n (target.includes('xray') && (k.includes('xray') || k.includes('stockxray'))) ||\n k === target;\n\n if (isMatch) {\n const status = typeof val === 'object' ? val?.status : val;\n if (status === 'active' || status === 'expiring_soon') {\n return true;\n }\n }\n }\n } else if (Array.isArray(subs) && subs.length > 0) {\n for (const sub of subs) {\n const name = (sub?.app_name || sub?.name || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n const code = (sub?.app_code || sub?.code || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n const isMatch =\n (target.includes('scanner') && (name.includes('scanner') || code.includes('scanner'))) ||\n (target.includes('chart') && (name.includes('chart') || code.includes('chart'))) ||\n (target.includes('deriv') && (name.includes('deriv') || code.includes('deriv'))) ||\n (target.includes('macro') && (name.includes('macro') || code.includes('macro'))) ||\n (target.includes('xray') && (name.includes('xray') || name.includes('stockxray') || code.includes('xray'))) ||\n name === target ||\n code === target;\n\n if (isMatch) {\n const status = sub?.status || sub?.subscription_status;\n if (status === 'active' || status === 'expiring_soon') {\n return true;\n }\n }\n }\n }\n\n // Check user.apps / user.all_apps array\n const matchedApp = findUserApp(productId);\n if (matchedApp) {\n if (['superadmin', 'admin', 'staff'].includes(matchedApp.role)) {\n return true;\n }\n return (\n matchedApp.subscription_status === 'active' ||\n matchedApp.subscription_status === 'expiring_soon' ||\n matchedApp.is_subscribed === true\n );\n }\n\n // Check single top-level user.subscription\n if (user?.subscription?.status === 'active' || user?.subscription?.status === 'expiring_soon') {\n return true;\n }\n\n return false;\n };\n\n const getUserDisplayName = () => {\n const raw = user?.fullName || user?.full_name || user?.name;\n if (raw && typeof raw === 'string' && raw.trim() && !raw.includes('@')) {\n return raw.trim();\n }\n\n if (user?.email && typeof user.email === 'string') {\n const local = user.email.split('@')[0];\n const cleaned = local.replace(/[._0-9+-]+/g, ' ').trim();\n if (cleaned) {\n return cleaned\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n }\n }\n return raw || 'User';\n };\n\n const handleNavigate = (path, app, item) => {\n if (onNavigate) {\n onNavigate(path, app, item);\n } else if (navigate) {\n navigate(path);\n } else {\n window.location.assign(path);\n }\n };\n\n const handleLogout = () => {\n const logoutFn = propLogout || config.logout;\n if (logoutFn) {\n logoutFn();\n } else {\n window.location.assign(`${authRedirectUrl}/logout`);\n }\n };\n\n // 5. Products normalization from config.apps\n const products = useMemo(() => {\n if (customProducts) return customProducts;\n\n const appsConfig = config.apps || {};\n const appEntries = Array.isArray(appsConfig)\n ? appsConfig\n : Object.entries(appsConfig).map(([id, app]) => ({ id, ...app }));\n\n return appEntries.map((app) => {\n const appId = app.id;\n const appName = app.name || app.label || appId;\n const hasMegaMenu = app.hasMegaMenu !== false && Boolean(app.pages?.length || app.categories?.length);\n const userApp = findUserApp(appId);\n const appUrl = app.url || config.urls?.[appId] || userApp?.app_url || '';\n\n const itemHref = buildItemUrl({\n baseUrl: appUrl,\n route: app.route || '/',\n href: app.href,\n queryParams: app.queryParams,\n params: app.params,\n currentTheme: theme,\n appendTheme: config.appendThemeParam !== false,\n themeParamName: config.themeParamName || 'theme',\n isCurrentApp: appId === currentApp,\n });\n\n return {\n id: appId,\n name: appName,\n icon: app.icon,\n isActive: appId === currentApp,\n hasMegaMenu,\n href: itemHref,\n rawApp: {\n ...app,\n url: appUrl,\n },\n };\n });\n }, [\n customProducts,\n config.apps,\n config.urls,\n config.appendThemeParam,\n config.themeParamName,\n currentApp,\n theme,\n user,\n ]);\n\n const handleProductClick = (e, item) => {\n const rawApp = item.rawApp || {};\n\n if (rawApp.onClick) {\n e.preventDefault();\n rawApp.onClick(rawApp);\n return;\n }\n\n if (item.id !== currentApp && !isAppSubscribed(item.id)) {\n e.preventDefault();\n setNavValue('');\n window.location.assign(getAppPurchaseUrl(item.id));\n return;\n }\n\n if (item.id === 'derivatives') {\n e.preventDefault();\n setNavValue((prev) => (prev === 'derivatives' ? '' : 'derivatives'));\n handleNavigate('/positions', rawApp, item);\n } else if (item.id === currentApp && (onNavigate || navigate)) {\n e.preventDefault();\n setNavValue('');\n handleNavigate(item.href, rawApp, item);\n }\n };\n\n return (\n <header className={cn('bg-background sticky top-0 z-50 w-full border-b', className)}>\n <div className=\"relative flex h-10 w-full items-center justify-between gap-4 px-3 sm:h-12 sm:px-4\">\n {/* Left Side: Brand Logo & Product Navigation Menu */}\n <div className=\"no-scrollbar flex items-center gap-4 overflow-x-auto py-1 lg:gap-6\">\n {/* Brand Logo Link */}\n <a\n href={landingUrl}\n className=\"mr-1 flex shrink-0 cursor-pointer items-center gap-1.5 select-none\"\n onClick={(e) => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1) return;\n if (onLogoClick) {\n e.preventDefault();\n onLogoClick();\n }\n }}\n >\n {logo || <FasterProLogo className=\"h-9 w-auto sm:h-10\" isDarkMode={isDark} />}\n </a>\n\n {/* Product Navigation Menu */}\n <NavigationMenuPrimitive.Root\n value={navValue}\n onValueChange={setNavValue}\n data-slot=\"navigation-menu\"\n className=\"group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\"\n >\n <NavigationMenuList className=\"gap-0\">\n {products.map((item, index) => {\n const rawApp = item.rawApp || item;\n\n if (item.hasMegaMenu) {\n return (\n <NavigationMenuItem key={item.id} value={item.id}>\n <NavigationMenuTrigger\n ref={index === 0 ? firstButtonRef : undefined}\n className={cn(\n 'gap-1.5',\n item.isActive &&\n 'bg-primary hover:bg-primary! hover:text-primary-foreground! text-primary-foreground font-semibold',\n )}\n >\n {renderIcon(item.icon, { className: 'size-4' })}\n <span>{item.name}</span>\n </NavigationMenuTrigger>\n <NavigationMenuContent className=\"p-0 rounded-xl overflow-hidden\">\n <GlobalMegaMenu\n app={rawApp}\n type={item.id}\n config={config}\n currentApp={currentApp}\n isDarkMode={isDark}\n isSubscribed={isAppSubscribed(item.id)}\n purchaseUrl={getAppPurchaseUrl(item.id)}\n categoryData={categoryData}\n theme={theme}\n onClose={() => setNavValue('')}\n onNavigate={handleNavigate}\n urls={config.urls}\n {...chartingCallbacks}\n />\n </NavigationMenuContent>\n </NavigationMenuItem>\n );\n }\n\n return (\n <NavigationMenuItem key={item.id} value={item.id}>\n <NavigationMenuLink asChild>\n <a\n ref={index === 0 ? firstButtonRef : undefined}\n href={item.href || '/'}\n onClick={(e) => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1) return;\n handleProductClick(e, item);\n }}\n className={cn(\n navigationMenuTriggerStyle(),\n 'cursor-pointer gap-1.5',\n item.isActive && 'bg-accent text-accent-foreground font-semibold',\n )}\n >\n {renderIcon(item.icon, { className: 'size-4' })}\n <span>{item.name}</span>\n </a>\n </NavigationMenuLink>\n </NavigationMenuItem>\n );\n })}\n </NavigationMenuList>\n <NavigationMenuPositioner align=\"start\" anchor={firstButtonRef} />\n </NavigationMenuPrimitive.Root>\n </div>\n\n {/* Right Side: Extra Content, Theme Selector & User Profile */}\n <div className=\"flex shrink-0 items-center gap-2\">\n {extraRightContent}\n\n {/* Theme Mode Selector (Light, Dark, System) */}\n <DropdownMenu>\n <DropdownMenuTrigger\n className=\"hover:bg-accent hover:text-accent-foreground text-muted-foreground flex size-8 cursor-pointer items-center justify-center rounded-lg transition-colors sm:size-8.5\"\n title={`Theme: ${theme === 'system' ? 'System Default' : theme === 'dark' ? 'Dark' : 'Light'}`}\n >\n {theme === 'system' ? (\n <Monitor className=\"size-4.5\" />\n ) : isDark ? (\n <Sun className=\"size-4.5\" />\n ) : (\n <Moon className=\"size-4.5\" />\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44\">\n {[\n { id: 'light', label: 'Light', icon: Sun },\n { id: 'dark', label: 'Dark', icon: Moon },\n { id: 'system', label: 'System Default', icon: Monitor },\n ].map((opt) => {\n const Icon = opt.icon;\n const isSelected = theme === opt.id;\n return (\n <DropdownMenuItem\n key={opt.id}\n onClick={() => setTheme(opt.id)}\n className=\"cursor-pointer justify-between\"\n >\n <div className=\"flex items-center gap-2\">\n <Icon className=\"size-4\" />\n <span>{opt.label}</span>\n </div>\n {isSelected && <Check className=\"size-3.5\" />}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {/* User Profile Popover */}\n <Popover open={profileOpen} onOpenChange={setProfileOpen}>\n <PopoverTrigger className=\"hover:bg-accent hover:text-accent-foreground text-foreground flex cursor-pointer justify-center items-center size-10! gap-2 rounded-full p-0 transition-colors select-none\">\n <div className=\"relative\">\n <div className=\"border-border/60 bg-muted flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-full border\">\n {user?.profile_image_url ? (\n <img\n src={user.profile_image_url}\n alt={getUserDisplayName()}\n className=\"size-full object-cover\"\n referrerPolicy=\"no-referrer\"\n onError={(e) => {\n e.currentTarget.style.display = 'none';\n }}\n />\n ) : (\n <User className=\"text-muted-foreground size-3.5 sm:size-4\" />\n )}\n </div>\n {user && (\n <span className=\"border-background absolute bottom-0 right-0 size-2.5 rounded-full border-2 bg-emerald-500\" />\n )}\n </div>\n </PopoverTrigger>\n\n <PopoverContent\n className=\"border-border bg-popover text-popover-foreground w-84 gap-0! rounded-xl p-0 shadow-2xl\"\n align=\"end\"\n >\n {/* 1. Profile Header */}\n <div className=\"border-border/60 bg-muted/20 border-b p-3\">\n <div className=\"flex items-end gap-3\">\n <div className=\"relative shrink-0\">\n <div className=\"border-border bg-muted flex size-14 items-center justify-center overflow-hidden rounded-full border shadow-xs\">\n {user?.profile_image_url ? (\n <img\n src={user.profile_image_url}\n alt={getUserDisplayName()}\n className=\"size-full object-cover\"\n referrerPolicy=\"no-referrer\"\n />\n ) : (\n <User className=\"text-muted-foreground size-6\" />\n )}\n </div>\n <span className=\"border-popover absolute bottom-0 right-0 size-3 rounded-full border-2 bg-emerald-500\" />\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-1.5\">\n <p className=\"text-foreground truncate text-sm font-bold tracking-tight\">\n {getUserDisplayName()}\n </p>\n <span className=\"border-border bg-muted text-muted-foreground shrink-0 rounded-md border px-1.5 py-0.5 text-[10px] font-semibold capitalize\">\n {user?.is_superadmin ? 'Superadmin' : user?.role || 'User'}\n </span>\n </div>\n <p className=\"text-muted-foreground truncate text-xs font-medium\">{user?.email || ''}</p>\n </div>\n </div>\n\n {/* 2. Subscription Status Banner Card */}\n <div className=\" bg-primary/5 mt-3 rounded-lg p-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-foreground text-xs font-bold\">\n {user?.subscription?.plan_name ? `${user.subscription.plan_name} Plan` : 'Fastr Pro Member'}\n </span>\n </div>\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] text-emerald-600 dark:text-emerald-400\">\n <Check className=\"size-3 text-emerald-500\" />\n {user?.subscription?.status ? user.subscription.status.toUpperCase() : 'ACTIVE'}\n </span>\n </div>\n\n {user?.subscription?.expiry_date && (\n <div className=\"text-muted-foreground mt-2 flex items-center justify-between text-[11px]\">\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"text-muted-foreground/70 size-3\" />\n Renews: {formatDate(user.subscription.expiry_date)}\n </span>\n <a\n href={ssoPurchaseUrl}\n className=\"text-primary hover:text-primary/80 font-semibold transition-colors hover:underline\"\n >\n Manage →\n </a>\n </div>\n )}\n </div>\n </div>\n\n {/* 3. Subscribed Applications Launcher */}\n <div className=\"border-border/60 border-b p-3\">\n <div className=\"mb-2 flex items-center justify-between px-1\">\n <span className=\"text-muted-foreground text-[11px] font-bold\">My Applications</span>\n <span className=\"text-muted-foreground text-[10px]\">\n {products.filter((p) => isAppSubscribed(p.id)).length}/{products.length} Active\n </span>\n </div>\n <div className=\"grid grid-cols-2 gap-1.5\">\n {products.map((p) => {\n const subscribed = isAppSubscribed(p.id);\n return (\n <a\n key={p.id}\n href={p.href}\n onClick={(e) => {\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1) return;\n if (p.id === currentApp) {\n e.preventDefault();\n setProfileOpen(false);\n return;\n }\n if (!subscribed) {\n e.preventDefault();\n setProfileOpen(false);\n window.location.assign(getAppPurchaseUrl(p.id));\n }\n }}\n className={cn(\n 'flex items-center justify-between rounded-lg border p-2 text-xs transition-all',\n p.isActive\n ? 'border-primary/10 bg-primary/10 text-primary shadow-2xs font-bold'\n : subscribed\n ? 'border-border/50 bg-card text-foreground hover:bg-accent hover:border-border'\n : 'border-border/60 bg-muted/30 text-muted-foreground hover:bg-muted/60 border-dashed',\n )}\n >\n <div className=\"flex min-w-0 items-center gap-1.5\">\n {renderIcon(p.icon, {\n className: cn(\n 'size-3.5 shrink-0',\n p.isActive ? 'text-primary' : subscribed ? 'text-foreground' : 'text-muted-foreground',\n ),\n })}\n <span className=\"truncate\">{p.name}</span>\n </div>\n {p.isActive ? (\n <span className=\"bg-primary size-1.5 rounded-full\" />\n ) : subscribed ? (\n <ExternalLink className=\"text-muted-foreground size-2.5 opacity-60\" />\n ) : (\n <span className=\"text-[9px] font-bold text-amber-500 uppercase\">Buy</span>\n )}\n </a>\n );\n })}\n </div>\n </div>\n\n {/* 4. Action Links */}\n <div className=\"space-y-1 p-2\">\n <a\n href={ssoProfileUrl}\n className=\"hover:bg-accent hover:text-accent-foreground text-foreground group flex w-full items-center justify-between rounded-lg px-2.5 py-2 text-xs font-semibold transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <User className=\"text-muted-foreground group-hover:text-foreground size-4 transition-colors\" />\n <span>Profile & Account Settings</span>\n </div>\n <ChevronRight className=\"text-muted-foreground/60 group-hover:text-foreground size-3.5 transition-transform group-hover:translate-x-0.5\" />\n </a>\n\n <a\n href={ssoPurchaseUrl}\n className=\"hover:bg-accent hover:text-accent-foreground text-foreground group flex w-full items-center justify-between rounded-lg px-2.5 py-2 text-xs font-semibold transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <CreditCard className=\"text-muted-foreground group-hover:text-foreground size-4 transition-colors\" />\n <span>Billing & Subscriptions</span>\n </div>\n <ChevronRight className=\"text-muted-foreground/60 group-hover:text-foreground size-3.5 transition-transform group-hover:translate-x-0.5\" />\n </a>\n </div>\n <div className=\"border-border/60 my-1 border-t p-2\">\n <button\n onClick={handleLogout}\n className=\"text-destructive hover:bg-destructive/10 flex w-full cursor-pointer items-center justify-between rounded-lg px-2.5 py-2 text-xs font-semibold transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <LogOut className=\"size-4\" />\n <span>Sign Out</span>\n </div>\n </button>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n </div>\n\n {/* Subscription Locked Modal */}\n {lockedModalApp && (\n <div\n className=\"animate-in fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-xs duration-200\"\n onClick={() => setLockedModalApp(null)}\n >\n <div\n className=\"animate-in zoom-in-95 bg-card text-card-foreground border-border flex w-full max-w-md transform flex-col items-center rounded-xl border p-8 text-center shadow-2xl transition-all duration-200 sm:max-w-lg sm:p-10\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"bg-destructive/10 text-destructive mb-6 flex h-16 w-16 items-center justify-center rounded-xl\">\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n </div>\n\n <h2 className=\"text-foreground mb-2 text-xl font-bold tracking-tight sm:text-2xl\">\n {lockedModalApp.name} isn't included in your current subscription.\n </h2>\n\n <p className=\"text-muted-foreground mb-8 max-w-sm text-sm sm:text-base\">\n Add {lockedModalApp.name} to your subscription to unlock full access.\n </p>\n\n <button\n type=\"button\"\n onClick={() => {\n const matchedApp = user?.apps?.find(\n (a) =>\n (a.code || '').toLowerCase().includes(lockedModalApp.id.toLowerCase()) ||\n (a.name || '').toLowerCase().includes(lockedModalApp.name.toLowerCase()),\n );\n const purchaseUrl = matchedApp?.id\n ? `${ssoPurchaseUrl}?app_id=${matchedApp.id}`\n : `${ssoPurchaseUrl}?app=${lockedModalApp.id}`;\n window.location.assign(purchaseUrl);\n }}\n className=\"bg-primary text-primary-foreground hover:bg-primary/90 w-full max-w-xs cursor-pointer rounded-xl px-6 py-3 text-sm font-medium shadow-sm transition-all sm:text-base\"\n >\n View Plans\n </button>\n\n <button\n type=\"button\"\n onClick={() => setLockedModalApp(null)}\n className=\"text-muted-foreground hover:text-foreground mt-5 cursor-pointer text-sm font-medium transition-colors\"\n >\n Maybe Later\n </button>\n </div>\n </div>\n )}\n </header>\n );\n}\n","import './styles/globals.css';\n\nimport FasterProLogo from './components/FasterProLogo';\nimport GlobalHeader from './components/GlobalHeader';\nimport GlobalMegaMenu from './components/GlobalMegaMenu';\n\nexport { FasterProLogo, GlobalHeader, GlobalMegaMenu };\n\nexport { createHeaderConfig, defaultHeaderConfig } from './config/defaultConfig';\nexport { renderIcon } from './utils/renderIcon';\nexport { buildItemUrl, withThemeParam } from './utils/url';\n\nexport {\n chartingCategories,\n derivativesCategories,\n macroPulseCategories,\n scannerCategories,\n stockXRayCategories,\n} from './constants/categories';\n\nexport * from './components/ui/dropdown-menu';\nexport * from './components/ui/navigation-menu';\nexport * from './components/ui/popover';\nexport { cn } from './lib/utils';\n\nexport default GlobalHeader;\n"],"x_google_ignoreList":[1,2,3],"mappings":"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"}
|