zudoku 0.66.3 → 0.66.4

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.
Files changed (106) hide show
  1. package/dist/lib/authentication/components/SignIn.js +4 -2
  2. package/dist/lib/authentication/components/SignIn.js.map +1 -1
  3. package/dist/lib/authentication/components/SignUp.js +4 -2
  4. package/dist/lib/authentication/components/SignUp.js.map +1 -1
  5. package/dist/lib/oas/graphql/index.js +7 -3
  6. package/dist/lib/oas/graphql/index.js.map +1 -1
  7. package/dist/lib/plugins/api-keys/index.js +2 -3
  8. package/dist/lib/plugins/api-keys/index.js.map +1 -1
  9. package/dist/lib/plugins/openapi/ParamInfos.js +1 -0
  10. package/dist/lib/plugins/openapi/ParamInfos.js.map +1 -1
  11. package/dist/lib/plugins/openapi/Sidecar.js +3 -2
  12. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  13. package/dist/lib/plugins/openapi/schema/SchemaView.js +1 -1
  14. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  15. package/dist/lib/plugins/openapi/util/createHttpSnippet.js +24 -1
  16. package/dist/lib/plugins/openapi/util/createHttpSnippet.js.map +1 -1
  17. package/dist/lib/ui/Button.js +1 -1
  18. package/dist/lib/ui/Button.js.map +1 -1
  19. package/dist/vite/plugin-markdown-export.js +1 -1
  20. package/dist/vite/plugin-markdown-export.js.map +1 -1
  21. package/dist/vite/prerender/worker.js +3 -0
  22. package/dist/vite/prerender/worker.js.map +1 -1
  23. package/lib/{ActionButton-DUgvSylL.js → ActionButton-BSM2oNHF.js} +2 -2
  24. package/lib/{ActionButton-DUgvSylL.js.map → ActionButton-BSM2oNHF.js.map} +1 -1
  25. package/lib/{Button-CynVW1JV.js → Button-IOAeVaIH.js} +7 -6
  26. package/lib/{Button-CynVW1JV.js.map → Button-IOAeVaIH.js.map} +1 -1
  27. package/lib/{ClaudeLogo-BZslN9XF.js → ClaudeLogo-DgjivS8A.js} +2 -2
  28. package/lib/{ClaudeLogo-BZslN9XF.js.map → ClaudeLogo-DgjivS8A.js.map} +1 -1
  29. package/lib/Drawer-BRMcpfuF.js.map +1 -1
  30. package/lib/{IndexingDialog-B5zCiUKr.js → IndexingDialog-DZWj_3cU.js} +2 -2
  31. package/lib/{IndexingDialog-B5zCiUKr.js.map → IndexingDialog-DZWj_3cU.js.map} +1 -1
  32. package/lib/Input-D-kqEQ5M.js.map +1 -1
  33. package/lib/{MdxPage-B4zZq5aR.js → MdxPage-BL-HbZrv.js} +6 -6
  34. package/lib/{MdxPage-B4zZq5aR.js.map → MdxPage-BL-HbZrv.js.map} +1 -1
  35. package/lib/{OAuthErrorPage-DRY2hlga.js → OAuthErrorPage-DQtg28Go.js} +3 -3
  36. package/lib/{OAuthErrorPage-DRY2hlga.js.map → OAuthErrorPage-DQtg28Go.js.map} +1 -1
  37. package/lib/{OasProvider-lMwTD76Y.js → OasProvider--qcZwrKS.js} +2 -2
  38. package/lib/{OasProvider-lMwTD76Y.js.map → OasProvider--qcZwrKS.js.map} +1 -1
  39. package/lib/{OperationList-Bm76b4vl.js → OperationList-CSJYzxQY.js} +1094 -1079
  40. package/lib/{OperationList-Bm76b4vl.js.map → OperationList-CSJYzxQY.js.map} +1 -1
  41. package/lib/{RouteGuard-DGc32XJV.js → RouteGuard-D0f743SM.js} +2 -2
  42. package/lib/{RouteGuard-DGc32XJV.js.map → RouteGuard-D0f743SM.js.map} +1 -1
  43. package/lib/{SchemaList-DX4FPogg.js → SchemaList-DtyuDrQA.js} +7 -7
  44. package/lib/{SchemaList-DX4FPogg.js.map → SchemaList-DtyuDrQA.js.map} +1 -1
  45. package/lib/{SchemaView-CjXvSRxy.js → SchemaView-G-SVXxAG.js} +111 -110
  46. package/lib/SchemaView-G-SVXxAG.js.map +1 -0
  47. package/lib/SignUp-CDl7bQj3.js +50 -0
  48. package/lib/SignUp-CDl7bQj3.js.map +1 -0
  49. package/lib/{Toc-L1vGGHA1.js → Toc-D_Rj4jVx.js} +2 -2
  50. package/lib/{Toc-L1vGGHA1.js.map → Toc-D_Rj4jVx.js.map} +1 -1
  51. package/lib/ZudokuContext-DNHMZfcP.js.map +1 -1
  52. package/lib/chunk-PVWAREVJ-ClM0m2aJ.js.map +1 -1
  53. package/lib/{circular-BIN_WQ0c.js → circular-BxODTa7z.js} +2 -2
  54. package/lib/{circular-BIN_WQ0c.js.map → circular-BxODTa7z.js.map} +1 -1
  55. package/lib/{createServer-BEl12QFw.js → createServer-BpreIXp6.js} +10 -10
  56. package/lib/{createServer-BEl12QFw.js.map → createServer-BpreIXp6.js.map} +1 -1
  57. package/lib/{errors-CtBbD47A.js → errors-DliW1dED.js} +2 -2
  58. package/lib/{errors-CtBbD47A.js.map → errors-DliW1dED.js.map} +1 -1
  59. package/lib/{firebase-CT38ugg4.js → firebase-D4tbaCYB.js} +12 -12
  60. package/lib/{firebase-CT38ugg4.js.map → firebase-D4tbaCYB.js.map} +1 -1
  61. package/lib/{index-CISwSpdT.js → index-1TbL0HXQ.js} +2 -2
  62. package/lib/{index-CISwSpdT.js.map → index-1TbL0HXQ.js.map} +1 -1
  63. package/lib/{index-jI2Fjpy-.js → index-9MxNUgg4.js} +8 -8
  64. package/lib/{index-jI2Fjpy-.js.map → index-9MxNUgg4.js.map} +1 -1
  65. package/lib/{index-CG2v-T7-.js → index-CboxZOVW.js} +2 -2
  66. package/lib/{index-CG2v-T7-.js.map → index-CboxZOVW.js.map} +1 -1
  67. package/lib/index-CrcNWbel.js.map +1 -1
  68. package/lib/index-DXXZDuSJ.js.map +1 -1
  69. package/lib/index.esm-BYObtETB.js.map +1 -1
  70. package/lib/index.esm-DtzT_KoE.js.map +1 -1
  71. package/lib/{index.esm-Bu35TNgg.js → index.esm-ti5zvZS_.js} +2 -2
  72. package/lib/index.esm-ti5zvZS_.js.map +1 -0
  73. package/lib/jsx-runtime-BzflLqGi.js.map +1 -1
  74. package/lib/ui/ActionButton.js +1 -1
  75. package/lib/ui/Button.js +6 -5
  76. package/lib/ui/Button.js.map +1 -1
  77. package/lib/ui/Carousel.js.map +1 -1
  78. package/lib/zudoku.__internal.js +2 -2
  79. package/lib/zudoku.__internal.js.map +1 -1
  80. package/lib/zudoku.auth-azureb2c.js +3 -3
  81. package/lib/zudoku.auth-clerk.js +1 -1
  82. package/lib/zudoku.auth-firebase.js +3 -3
  83. package/lib/zudoku.auth-openid.js +3 -3
  84. package/lib/zudoku.auth-supabase.js +3 -3
  85. package/lib/zudoku.components.js +1 -1
  86. package/lib/zudoku.plugin-api-catalog.js +2 -2
  87. package/lib/zudoku.plugin-api-keys.js +5 -7
  88. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  89. package/lib/zudoku.plugin-markdown.js +1 -1
  90. package/lib/zudoku.plugin-openapi.js +1 -1
  91. package/lib/zudoku.plugin-search-pagefind.js +3 -3
  92. package/lib/zudoku.router.js.map +1 -1
  93. package/package.json +4 -4
  94. package/src/lib/authentication/components/SignIn.tsx +5 -2
  95. package/src/lib/authentication/components/SignUp.tsx +5 -2
  96. package/src/lib/oas/graphql/index.ts +7 -3
  97. package/src/lib/plugins/api-keys/index.tsx +2 -3
  98. package/src/lib/plugins/openapi/ParamInfos.tsx +1 -0
  99. package/src/lib/plugins/openapi/Sidecar.tsx +3 -2
  100. package/src/lib/plugins/openapi/schema/SchemaView.tsx +6 -4
  101. package/src/lib/plugins/openapi/util/createHttpSnippet.ts +29 -1
  102. package/src/lib/ui/Button.tsx +1 -0
  103. package/lib/SchemaView-CjXvSRxy.js.map +0 -1
  104. package/lib/SignUp-CntxjFGS.js +0 -50
  105. package/lib/SignUp-CntxjFGS.js.map +0 -1
  106. package/lib/index.esm-Bu35TNgg.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaView-G-SVXxAG.js","sources":["../src/lib/components/PagefindSearchMeta.tsx","../src/lib/util/groupBy.ts","../src/lib/plugins/openapi/components/ConstValue.tsx","../src/lib/plugins/openapi/components/EnumValues.tsx","../src/lib/plugins/openapi/ParamInfos.tsx","../src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx","../src/lib/plugins/openapi/schema/utils.ts","../src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx","../src/lib/plugins/openapi/schema/union-helpers.ts","../src/lib/plugins/openapi/schema/UnionView.tsx","../src/lib/plugins/openapi/schema/SchemaView.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\n\n/**\n * Adds metadata to be captured by Pagefind for search results.\n * Content is visually hidden but indexed by the search engine.\n */\nexport const PagefindSearchMeta = ({\n name,\n children,\n}: PropsWithChildren<{ name?: string }>) => (\n <span data-pagefind-meta={name} className=\"sr-only\">\n {children}\n </span>\n);\n","// biome-ignore-all lint/suspicious/noExplicitAny: Allow any type\nexport const groupBy = <\n T extends Record<PropertyKey, any>,\n KeySelector extends (item: T) => PropertyKey,\n>(\n arr: T[],\n keySelector: KeySelector,\n): Partial<Record<ReturnType<KeySelector>, T[]>> => {\n return arr.reduce(\n (accumulator, val) => {\n const groupedKey = keySelector(val) as ReturnType<KeySelector>;\n if (!accumulator[groupedKey]) {\n accumulator[groupedKey] = [];\n }\n accumulator[groupedKey].push(val);\n return accumulator;\n },\n {} as Record<ReturnType<KeySelector>, T[]>,\n );\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { SelectOnClick } from \"./SelectOnClick.js\";\n\nexport const ConstValue = ({\n schema,\n hideDescription = false,\n}: {\n schema: SchemaObject;\n hideDescription?: boolean;\n}) => {\n return (\n <div className=\"flex flex-col gap-1\">\n <div>\n <span className=\"text-muted-foreground\">Const value: </span>\n <SelectOnClick className=\"border rounded px-1 font-mono\">\n {schema.const}\n </SelectOnClick>\n {!hideDescription && schema.description && (\n <div className=\"text-muted-foreground\">{schema.description}</div>\n )}\n </div>\n </div>\n );\n};\n","import { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { SelectOnClick } from \"./SelectOnClick.js\";\n\nexport const EnumValues = ({\n values,\n className,\n maxVisibleValues = 8,\n}: {\n values: Array<string | number>;\n className?: string;\n maxVisibleValues?: number;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n if (!values.length) return null;\n\n const shouldCollapse = values.length > maxVisibleValues;\n const visibleValues =\n shouldCollapse && !isOpen ? values.slice(0, maxVisibleValues) : values;\n\n return (\n <div className={cn(\"flex flex-wrap gap-1.5\", className)}>\n <span className=\"text-muted-foreground\">Enum values:</span>\n {visibleValues.map((value) => (\n <div key={value}>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {value}\n </SelectOnClick>\n </div>\n ))}\n {shouldCollapse && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-fit px-0\"\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? (\n <div className=\"flex items-center gap-1\">\n <ChevronUpIcon size={12} />\n <span className=\"text-muted-foreground\">show less</span>\n </div>\n ) : (\n <div className=\"flex items-center gap-1\">\n <ChevronDownIcon size={12} />\n <span className=\"text-muted-foreground\">\n show {values.length - maxVisibleValues} more\n </span>\n </div>\n )}\n </Button>\n )}\n </div>\n );\n};\n","import { ChevronsLeftRightIcon } from \"lucide-react\";\nimport { isValidElement, useState } from \"react\";\nimport { InlineCode } from \"../../components/InlineCode.js\";\nimport type { SchemaObject } from \"../../oas/parser/index.js\";\nimport { cn } from \"../../util/cn.js\";\n\nconst Pattern = ({ pattern }: { pattern: string }) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const isExpandable = pattern.length > 20;\n const shortPattern = isExpandable ? `${pattern.slice(0, 20)}…` : pattern;\n\n return (\n <InlineCode\n className={cn(\"text-xs\", isExpandable && \"cursor-pointer\")}\n onClick={() => setIsExpanded(!isExpanded)}\n selectOnClick={false}\n >\n {isExpanded ? pattern : shortPattern}\n {isExpandable && (\n <button type=\"button\" className=\"p-1 translate-y-[2px]\">\n {!isExpanded && <ChevronsLeftRightIcon size={12} />}\n </button>\n )}\n </InlineCode>\n );\n};\n\nconst getSchemaInfos = (schema?: SchemaObject) => {\n if (!schema) return [];\n\n return [\n schema.type === \"array\" && schema.items.type\n ? Array.isArray(schema.items.type)\n ? `(${schema.items.type.join(\" | \")})[]`\n : `${schema.items.type}[]`\n : Array.isArray(schema.type)\n ? schema.type.join(\" | \")\n : schema.type,\n\n schema.enum && \"enum\",\n schema.const && \"const\",\n schema.format,\n schema.type === \"array\" && schema.items?.contentMediaType,\n schema.minimum !== undefined && `min: ${schema.minimum}`,\n schema.maximum !== undefined && `max: ${schema.maximum}`,\n schema.minLength !== undefined && `minLength: ${schema.minLength}`,\n schema.maxLength !== undefined && `maxLength: ${schema.maxLength}`,\n schema.minItems !== undefined && `minItems: ${schema.minItems}`,\n schema.maxItems !== undefined && `maxItems: ${schema.maxItems}`,\n schema.minProperties !== undefined && `minProps: ${schema.minProperties}`,\n schema.maxProperties !== undefined && `maxProps: ${schema.maxProperties}`,\n schema.uniqueItems && \"unique\",\n schema.readOnly && \"readOnly\",\n schema.writeOnly && \"writeOnly\",\n schema.deprecated && \"deprecated\",\n schema.pattern && (\n <>\n pattern: <Pattern pattern={schema.pattern} />\n </>\n ),\n ];\n};\n\nexport const ParamInfos = ({\n schema,\n extraItems = [],\n className,\n}: {\n schema?: SchemaObject;\n extraItems?: unknown[];\n className?: string;\n}) => {\n const filteredItems = [...getSchemaInfos(schema), ...extraItems].flatMap(\n (item) => (typeof item === \"string\" || isValidElement(item) ? item : []),\n );\n\n return (\n <span className={className}>\n {filteredItems.map((item, index) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: index should be stable\n <span className=\"text-muted-foreground\" key={index}>\n {item}\n {index < filteredItems.length - 1 && (\n <span className=\"text-muted-foreground/50\">\n &nbsp;&middot;&nbsp;\n </span>\n )}\n </span>\n ))}\n </span>\n );\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { SelectOnClick } from \"../components/SelectOnClick.js\";\n\nexport const SchemaExampleAndDefault = ({\n schema,\n}: {\n schema: SchemaObject;\n}) => {\n const example = schema.examples?.at(0);\n const defaultValue = schema.default;\n\n if (example === undefined && defaultValue === undefined) return null;\n\n return (\n <div className=\"flex flex-col gap-1\">\n {example !== undefined && (\n <div>\n <span className=\"text-muted-foreground\">Example: </span>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {typeof example === \"object\" || typeof example === \"boolean\"\n ? JSON.stringify(example)\n : example}\n </SelectOnClick>\n </div>\n )}\n {defaultValue !== undefined && (\n <div>\n <span className=\"text-muted-foreground\">Default: </span>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {typeof defaultValue === \"object\" ||\n typeof defaultValue === \"boolean\"\n ? JSON.stringify(defaultValue)\n : defaultValue}\n </SelectOnClick>\n </div>\n )}\n </div>\n );\n};\n","import { CIRCULAR_REF } from \"../../../oas/graphql/circular.js\";\nimport type {\n ArraySchemaObject,\n SchemaObject,\n} from \"../../../oas/parser/index.js\";\n\nexport const isBasicType = (\n type: unknown,\n): type is \"string\" | \"number\" | \"boolean\" | \"integer\" | \"null\" =>\n (typeof type === \"string\" &&\n [\"string\", \"number\", \"boolean\", \"integer\", \"null\"].includes(type)) ||\n (Array.isArray(type) && type.every(isBasicType));\n\nexport const isArrayType = (value: SchemaObject): value is ArraySchemaObject =>\n value.type === \"array\" ||\n // schema.type might be an array of types, so we need to check if \"array\" is one of them\n (Array.isArray(value.type) && value.type.includes(\"array\"));\n\nexport const isComplexType = (value?: SchemaObject) =>\n value &&\n ((value.type === \"object\" &&\n Object.keys(value.properties ?? {}).length > 0) ||\n (value.type === \"array\" &&\n typeof value.items === \"object\" &&\n (!value.items.type || value.items.type === \"object\")));\n\nexport const isCircularRef = (schema: unknown): schema is string =>\n typeof schema === \"string\" && schema.startsWith(CIRCULAR_REF);\n\nexport const isArrayCircularRef = (\n schema: SchemaObject,\n): schema is SchemaObject & { items: SchemaObject } =>\n isArrayType(schema) && \"items\" in schema && isCircularRef(schema.items);\n\nexport const extractCircularRefInfo = (\n ref?: string | SchemaObject,\n): string | undefined =>\n typeof ref === \"string\" ? ref.split(\":\")[1] : undefined;\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { MinusIcon, PlusIcon, RefreshCcwDotIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Item, ItemActions, ItemContent, ItemTitle } from \"zudoku/ui/Item.js\";\nimport { InlineCode } from \"../../../components/InlineCode.js\";\nimport { Markdown } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { ConstValue } from \"../components/ConstValue.js\";\nimport { EnumValues } from \"../components/EnumValues.js\";\nimport { ParamInfos } from \"../ParamInfos.js\";\nimport { SchemaExampleAndDefault } from \"./SchemaExampleAndDefault.js\";\nimport { SchemaView } from \"./SchemaView.js\";\nimport {\n extractCircularRefInfo,\n isArrayCircularRef,\n isArrayType,\n isCircularRef,\n isComplexType,\n} from \"./utils.js\";\n\nconst RecursiveIndicator = ({ circularProp }: { circularProp?: string }) => (\n <InlineCode\n className=\"inline-flex items-center gap-1.5 text-xs translate-y-0.5\"\n selectOnClick={false}\n >\n <RefreshCcwDotIcon size={13} />\n <span>{circularProp ? `${circularProp} (circular)` : \"circular\"}</span>\n </InlineCode>\n);\n\nexport const SchemaPropertyItem = ({\n name,\n schema,\n group,\n defaultOpen = false,\n showCollapseButton = true,\n}: {\n name: string;\n schema: SchemaObject;\n group: \"required\" | \"optional\" | \"deprecated\";\n defaultOpen?: boolean;\n showCollapseButton?: boolean;\n}) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n if (isCircularRef(schema)) {\n return (\n <Item>\n <ItemContent className=\"gap-y-2\">\n <div>\n <ItemTitle className=\"inline me-2\">\n <code>{name}</code>\n </ItemTitle>\n <ParamInfos\n className=\"inline\"\n schema={schema}\n extraItems={[\n group !== \"optional\" && (\n <span className=\"text-primary\">required</span>\n ),\n <RecursiveIndicator key=\"circular-ref\" />,\n ]}\n />\n </div>\n <SchemaExampleAndDefault schema={schema} />\n </ItemContent>\n </Item>\n );\n }\n\n const isCollapsible = Boolean(\n (schema.allOf ||\n schema.anyOf ||\n schema.oneOf ||\n isComplexType(schema) ||\n (isArrayType(schema) &&\n \"items\" in schema &&\n isComplexType(schema.items)) ||\n schema.additionalProperties) &&\n !isArrayCircularRef(schema),\n );\n\n const shouldRenderDescription = Boolean(\n schema.description ||\n (\"items\" in schema && schema.items?.enum) ||\n schema.const ||\n schema.enum ||\n schema.example !== undefined ||\n schema.default !== undefined,\n );\n\n return (\n <Item>\n <ItemContent className=\"gap-y-2\">\n <div>\n <ItemTitle className=\"inline me-2\">\n {isCollapsible ? (\n <button\n onClick={() => setIsOpen(!isOpen)}\n type=\"button\"\n className=\"hover:underline\"\n >\n <code>{name}</code>\n </button>\n ) : (\n <code>{name}</code>\n )}\n </ItemTitle>\n <ParamInfos\n className=\"inline\"\n schema={schema}\n extraItems={[\n group !== \"optional\" && (\n <span className=\"text-primary\">required</span>\n ),\n isArrayCircularRef(schema) && (\n <RecursiveIndicator\n circularProp={extractCircularRefInfo(schema.items)}\n />\n ),\n ]}\n />\n </div>\n {shouldRenderDescription && (\n <div className=\"flex flex-col gap-1.5\">\n {schema.description && (\n <Markdown className=\"prose-sm\" content={schema.description} />\n )}\n {\"items\" in schema && schema.items?.enum && (\n <EnumValues values={schema.items.enum} />\n )}\n {schema.const && <ConstValue schema={schema} hideDescription />}\n {schema.enum && <EnumValues values={schema.enum} />}\n <SchemaExampleAndDefault schema={schema} />\n </div>\n )}\n </ItemContent>\n\n {isCollapsible && showCollapseButton && (\n <ItemActions className=\"self-start\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"rounded-full\"\n onClick={() => setIsOpen(!isOpen)}\n aria-label=\"Toggle properties\"\n >\n {isOpen ? <MinusIcon size={16} /> : <PlusIcon size={16} />}\n </Button>\n </ItemActions>\n )}\n\n {isCollapsible && (\n <Collapsible.Root\n defaultOpen={defaultOpen}\n open={isOpen}\n onOpenChange={setIsOpen}\n className={cn(\"w-full\", !isOpen && \"contents\")}\n >\n <Collapsible.Content asChild>\n <ItemContent>\n {schema.anyOf || schema.oneOf || schema.type === \"object\" ? (\n <SchemaView schema={schema} />\n ) : isArrayType(schema) && \"items\" in schema ? (\n <SchemaView schema={schema.items} />\n ) : null}\n </ItemContent>\n </Collapsible.Content>\n </Collapsible.Root>\n )}\n </Item>\n );\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\n\nexport type FieldSignature = {\n type?: SchemaObject[\"type\"];\n const?: unknown;\n enum?: unknown[];\n format?: string;\n pattern?: string;\n minimum?: number;\n maximum?: number;\n exclusiveMinimum?: boolean | number;\n exclusiveMaximum?: boolean | number;\n minLength?: number;\n maxLength?: number;\n minItems?: number;\n maxItems?: number;\n itemsType?: string | string[];\n additionalProps?: \"true\" | \"false\" | \"schema\";\n};\n\nexport type FieldDoc = {\n name: string;\n humanType: string;\n description?: string;\n requiredInAll: boolean;\n};\n\nexport const unionVariants = (schema: SchemaObject): SchemaObject[] => {\n const variants = (schema.oneOf ?? schema.anyOf ?? []) as SchemaObject[];\n\n // If parent schema has properties that variants don't, merge them\n // This handles the pattern where anyOf/oneOf is used just for required field combinations\n if (schema.properties && Object.keys(schema.properties).length > 0) {\n return variants.map((variant) => {\n // If variant doesn't define its own properties or type, inherit from parent\n const shouldInherit =\n !variant.properties &&\n !variant.type &&\n !variant.oneOf &&\n !variant.anyOf;\n\n if (shouldInherit) {\n return {\n ...variant,\n type: \"object\" as const,\n properties: schema.properties,\n required: variant.required ?? schema.required,\n };\n }\n\n return variant;\n });\n }\n\n return variants;\n};\n\nexport const decideExclusivity = (\n schema: SchemaObject,\n): \"exactly-one\" | \"at-least-one\" => {\n if (Array.isArray(schema.oneOf)) return \"exactly-one\";\n\n const discriminator = schema.discriminator?.propertyName;\n if (!discriminator) return \"at-least-one\";\n\n const variants = unionVariants(schema);\n const seen = new Set<string>();\n\n for (const variant of variants) {\n const prop = variant.properties?.[discriminator];\n\n const value =\n prop?.const ??\n (Array.isArray(prop?.enum) && prop.enum.length === 1\n ? String(prop.enum[0])\n : undefined);\n\n if (value == null || seen.has(String(value))) return \"at-least-one\";\n seen.add(String(value));\n }\n\n return \"exactly-one\";\n};\n\nexport const labelForVariant = (index: number, variant: SchemaObject) =>\n variant.title?.trim() || `Variant ${index + 1}`;\n\nexport const quickGuards = (variant: SchemaObject, root?: SchemaObject) => {\n const guards: string[] = [];\n\n if (variant.type) {\n guards.push(\n `type = ${Array.isArray(variant.type) ? variant.type.join(\"|\") : variant.type}`,\n );\n }\n\n const discriminator = root?.discriminator?.propertyName;\n if (discriminator) {\n const discriminatorProp = variant.properties?.[discriminator] as\n | SchemaObject\n | undefined;\n\n const discriminatorValue =\n discriminatorProp?.const ??\n (Array.isArray(discriminatorProp?.enum) &&\n discriminatorProp.enum.length === 1\n ? discriminatorProp.enum[0]\n : undefined);\n\n if (discriminatorValue !== undefined) {\n guards.push(`${discriminator}=${JSON.stringify(discriminatorValue)}`);\n }\n }\n\n const required = (variant.required ?? []).filter((k) => k !== discriminator);\n if (required.length) {\n const head = required.slice(0, 3).join(\", \");\n const more = required.length > 3 ? ` +${required.length - 3} more` : \"\";\n guards.push(`requires: ${head}${more}`);\n }\n\n return guards;\n};\n","import { useState } from \"react\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Badge } from \"../../../ui/Badge.js\";\nimport { Frame, FramePanel } from \"../../../ui/Frame.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { SchemaView } from \"./SchemaView.js\";\nimport {\n decideExclusivity,\n labelForVariant,\n quickGuards,\n unionVariants,\n} from \"./union-helpers.js\";\n\nconst DecisionTable = ({\n variants,\n schema,\n selectedVariant,\n onSelectVariant,\n}: {\n variants: SchemaObject[];\n schema: SchemaObject;\n selectedVariant: string;\n onSelectVariant: (label: string) => void;\n}) => {\n const rows = variants.map((v, i) => ({\n label: labelForVariant(i, v),\n guards: quickGuards(v, schema),\n }));\n\n return (\n <div className=\"flex flex-col gap-2 text-sm\">\n <h4 className=\"font-medium\">Decision Table</h4>\n <div className=\"border rounded-md overflow-hidden\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"text-left p-2 font-medium\">Variant</th>\n <th className=\"text-left p-2 font-medium\">Matching Criteria</th>\n </tr>\n </thead>\n <tbody className=\"divide-y\">\n {rows.map((row) => (\n <tr key={row.label} className=\"hover:bg-muted/30\">\n <td className=\"p-2 font-medium\">\n <button\n type=\"button\"\n className={cn(\n \"hover:underline\",\n selectedVariant === row.label && \"text-primary\",\n )}\n onClick={() => onSelectVariant(row.label)}\n >\n {row.label}\n </button>\n </td>\n <td className=\"p-2 text-muted-foreground text-xs\">\n {row.guards.length > 0\n ? row.guards.join(\" · \")\n : \"No specific criteria\"}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n\nexport const UnionView = ({\n schema,\n cardHeader,\n}: {\n schema: SchemaObject;\n cardHeader?: React.ReactNode;\n}) => {\n const mode = Array.isArray(schema.oneOf)\n ? \"oneOf\"\n : Array.isArray(schema.anyOf)\n ? \"anyOf\"\n : undefined;\n\n const variants = mode ? unionVariants(schema) : [];\n const [selectedVariant, setSelectedVariant] = useState(() =>\n variants[0] ? labelForVariant(0, variants[0]) : \"\",\n );\n\n if (!mode) return null;\n\n const exclusivity = decideExclusivity(schema);\n\n const semanticsMessage =\n exclusivity === \"exactly-one\" ? (\n <>\n Exactly one variant <b>must match</b>.\n </>\n ) : (\n <>\n At least one variant <b>must match</b>. Multiple variants{\" \"}\n <i>may match</i> simultaneously.\n </>\n );\n\n const currentVariantIndex = variants.findIndex(\n (v, i) => labelForVariant(i, v) === selectedVariant,\n );\n const currentVariant =\n currentVariantIndex >= 0 ? variants[currentVariantIndex] : null;\n\n return (\n <Frame>\n {cardHeader}\n <FramePanel className=\"text-sm flex flex-col gap-4\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\">{mode}</Badge>\n <div className=\"flex-1 p-2\">\n <span className=\"text-sm\">{semanticsMessage}</span>\n </div>\n </div>\n\n <DecisionTable\n variants={variants}\n schema={schema}\n selectedVariant={selectedVariant}\n onSelectVariant={setSelectedVariant}\n />\n <strong>Properties for {selectedVariant}:</strong>\n {currentVariant && <SchemaView schema={currentVariant} />}\n </FramePanel>\n </Frame>\n );\n};\n","import { InfoIcon } from \"lucide-react\";\nimport { Fragment } from \"react\";\nimport {\n Frame,\n FrameDescription,\n FrameFooter,\n FrameHeader,\n FramePanel,\n} from \"zudoku/ui/Frame.js\";\nimport { ItemGroup, ItemSeparator } from \"zudoku/ui/Item.js\";\nimport { Markdown } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { groupBy } from \"../../../util/groupBy.js\";\nimport { ConstValue } from \"../components/ConstValue.js\";\nimport { EnumValues } from \"../components/EnumValues.js\";\nimport { ParamInfos } from \"../ParamInfos.js\";\nimport { SchemaExampleAndDefault } from \"./SchemaExampleAndDefault.js\";\nimport { SchemaPropertyItem } from \"./SchemaPropertyItem.js\";\nimport { UnionView } from \"./UnionView.js\";\nimport { isArrayType, isBasicType } from \"./utils.js\";\n\nconst renderMarkdown = (content?: string) =>\n content && (\n <Markdown\n className=\"text-sm leading-normal line-clamp-4\"\n content={content}\n />\n );\n\nconst renderBasicSchema = (\n schema: SchemaObject,\n cardHeader?: React.ReactNode,\n embedded?: boolean,\n) => {\n const content = (\n <>\n <span className=\"text-sm text-muted-foreground\">\n <ParamInfos schema={schema} />\n </span>\n {schema.enum && <EnumValues values={schema.enum} />}\n {renderMarkdown(schema.description)}\n <SchemaExampleAndDefault schema={schema} />\n </>\n );\n\n if (embedded) {\n return <div className=\"space-y-2 p-4\">{content}</div>;\n }\n\n return (\n <Frame>\n {cardHeader}\n <FramePanel className=\"space-y-2\">{content}</FramePanel>\n </Frame>\n );\n};\n\nexport const SchemaView = ({\n schema,\n defaultOpen = false,\n cardHeader,\n embedded,\n}: {\n schema?: SchemaObject | null;\n defaultOpen?: boolean;\n cardHeader?: React.ReactNode;\n embedded?: boolean;\n}) => {\n if (!schema || Object.keys(schema).length === 0) {\n return (\n <Frame>\n {cardHeader}\n <FramePanel>\n <div className=\"text-sm text-muted-foreground italic\">\n No data returned\n </div>\n </FramePanel>\n </Frame>\n );\n }\n\n if (schema.const) {\n return <ConstValue schema={schema} />;\n }\n\n if (Array.isArray(schema.oneOf) || Array.isArray(schema.anyOf)) {\n return <UnionView schema={schema} cardHeader={cardHeader} />;\n }\n\n if (isBasicType(schema.type)) {\n return renderBasicSchema(schema, cardHeader, embedded);\n }\n\n if (isArrayType(schema) && typeof schema.items === \"object\") {\n const wrappedSchema: SchemaObject = {\n type: \"object\",\n properties: { \"\": schema },\n };\n\n return (\n <SchemaView schema={wrappedSchema} cardHeader={cardHeader} defaultOpen />\n );\n }\n\n const additionalObjectProperties = typeof schema.additionalProperties ===\n \"object\" && <SchemaView schema={schema.additionalProperties} embedded />;\n\n if (schema.type === \"object\") {\n const groupedProperties = groupBy(\n Object.entries(schema.properties ?? {}),\n ([propertyName, property]) => {\n return property.deprecated\n ? \"deprecated\"\n : schema.required?.includes(propertyName)\n ? \"required\"\n : \"optional\";\n },\n );\n\n const groupNames = [\"required\", \"optional\", \"deprecated\"] as const;\n const groups = groupNames.flatMap((group) => {\n const properties = groupedProperties[group];\n return properties ? { group, properties } : [];\n });\n\n const itemsList = groups.map(({ group, properties }, index) => (\n <Fragment key={group}>\n {index > 0 && <ItemSeparator />}\n <ItemGroup className=\"overflow-clip\">\n {properties.map(([name, schema], index) => (\n <Fragment key={name}>\n {index > 0 && <ItemSeparator />}\n <SchemaPropertyItem\n name={name}\n schema={schema}\n group={group}\n defaultOpen={defaultOpen}\n />\n </Fragment>\n ))}\n </ItemGroup>\n </Fragment>\n ));\n\n if (embedded) {\n return itemsList;\n }\n\n return (\n <Frame>\n {cardHeader}\n {schema.description && (\n <FrameHeader>\n <FrameDescription>{schema.description}</FrameDescription>\n </FrameHeader>\n )}\n {(itemsList.length > 0 || additionalObjectProperties) && (\n <FramePanel className=\"p-0!\">\n {itemsList}\n {additionalObjectProperties}\n </FramePanel>\n )}\n {schema.additionalProperties === true && (\n <FrameFooter>\n <a\n className=\"text-sm flex items-center gap-1 hover:underline\"\n href=\"https://swagger.io/docs/specification/v3_0/data-models/dictionaries/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n Additional properties are allowed\n <InfoIcon size={14} />\n </a>\n </FrameFooter>\n )}\n </Frame>\n );\n }\n};\n"],"names":["PagefindSearchMeta","name","children","groupBy","arr","keySelector","accumulator","val","groupedKey","ConstValue","schema","hideDescription","jsx","SelectOnClick","EnumValues","values","className","maxVisibleValues","isOpen","setIsOpen","useState","shouldCollapse","visibleValues","cn","value","Button","jsxs","ChevronUpIcon","ChevronDownIcon","Pattern","pattern","isExpanded","setIsExpanded","isExpandable","shortPattern","InlineCode","ChevronsLeftRightIcon","getSchemaInfos","Fragment","ParamInfos","extraItems","filteredItems","item","isValidElement","index","SchemaExampleAndDefault","example","defaultValue","isBasicType","type","isArrayType","isComplexType","isCircularRef","CIRCULAR_REF","isArrayCircularRef","extractCircularRefInfo","ref","RecursiveIndicator","circularProp","RefreshCcwDotIcon","SchemaPropertyItem","group","defaultOpen","showCollapseButton","Item","ItemContent","ItemTitle","isCollapsible","shouldRenderDescription","Markdown","ItemActions","MinusIcon","PlusIcon","Collapsible","SchemaView","unionVariants","variants","variant","decideExclusivity","discriminator","seen","prop","labelForVariant","quickGuards","root","guards","discriminatorProp","discriminatorValue","required","k","head","more","DecisionTable","selectedVariant","onSelectVariant","rows","v","i","row","UnionView","cardHeader","mode","setSelectedVariant","semanticsMessage","currentVariantIndex","currentVariant","Frame","FramePanel","Badge","renderMarkdown","content","renderBasicSchema","embedded","wrappedSchema","additionalObjectProperties","groupedProperties","propertyName","property","itemsList","properties","ItemSeparator","ItemGroup","FrameHeader","FrameDescription","FrameFooter","InfoIcon"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { j as e } from "./jsx-runtime-BzflLqGi.js";
2
+ import { useEffect as t } from "react";
3
+ import { b as g } from "./chunk-PVWAREVJ-ClM0m2aJ.js";
4
+ import { S as p, B as a, L as h } from "./index-CboxZOVW.js";
5
+ import { C as l, a as d, b as u, c as m, d as x } from "./Card-KFniaZn5.js";
6
+ import { u as i } from "./useLatest-hmRS46UF.js";
7
+ import { u as n } from "./hook-CHw_R_xu.js";
8
+ const y = () => {
9
+ const r = n(), [s] = g(), o = s.get("redirect") ?? void 0, c = i(r.login);
10
+ return t(() => {
11
+ c.current({
12
+ redirectTo: o,
13
+ replace: !0
14
+ });
15
+ }, [c, o]), /* @__PURE__ */ e.jsx("div", { className: "flex items-center justify-center mt-8", children: /* @__PURE__ */ e.jsxs(l, { className: "max-w-md w-full", children: [
16
+ /* @__PURE__ */ e.jsxs(d, { children: [
17
+ /* @__PURE__ */ e.jsx(u, { className: "text-lg", children: "Sign in" }),
18
+ /* @__PURE__ */ e.jsx(m, { children: "You're being redirected to our secure login provider to complete your sign-in process." })
19
+ ] }),
20
+ /* @__PURE__ */ e.jsx(x, { children: /* @__PURE__ */ e.jsxs("div", { className: "flex items-center text-sm font-medium gap-2", children: [
21
+ /* @__PURE__ */ e.jsx(p, {}),
22
+ " Redirecting..."
23
+ ] }) })
24
+ ] }) });
25
+ }, w = () => {
26
+ const r = n(), s = i(r.logout);
27
+ return t(() => {
28
+ s.current();
29
+ }, [s]), null;
30
+ }, k = () => {
31
+ const r = n(), s = i(r.signup);
32
+ return t(() => {
33
+ s.current();
34
+ }, [s]), /* @__PURE__ */ e.jsx("div", { className: "flex items-center justify-center mt-8", children: /* @__PURE__ */ e.jsxs(l, { className: "max-w-md w-full", children: [
35
+ /* @__PURE__ */ e.jsxs(d, { children: [
36
+ /* @__PURE__ */ e.jsx(u, { className: "text-lg", children: "Sign up" }),
37
+ /* @__PURE__ */ e.jsx(m, { children: "You're being redirected to our secure login provider to complete your sign up process." })
38
+ ] }),
39
+ /* @__PURE__ */ e.jsx(x, { children: /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col gap-2 justify-center", children: [
40
+ /* @__PURE__ */ e.jsx(a, { onClick: () => r.signup(), variant: "default", children: "Register" }),
41
+ /* @__PURE__ */ e.jsx(a, { variant: "link", className: "text-muted-foreground", asChild: !0, children: /* @__PURE__ */ e.jsx(h, { to: "/", children: "Go home" }) })
42
+ ] }) })
43
+ ] }) });
44
+ };
45
+ export {
46
+ w as S,
47
+ y as a,
48
+ k as b
49
+ };
50
+ //# sourceMappingURL=SignUp-CDl7bQj3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignUp-CDl7bQj3.js","sources":["../src/lib/authentication/components/SignIn.tsx","../src/lib/authentication/components/SignOut.tsx","../src/lib/authentication/components/SignUp.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useSearchParams } from \"react-router\";\nimport { Spinner } from \"zudoku/components\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"zudoku/ui/Card.js\";\nimport { useLatest } from \"../../util/useLatest.js\";\nimport { useAuth } from \"../hook.js\";\n\nexport const SignIn = () => {\n const auth = useAuth();\n const [search] = useSearchParams();\n const redirectTo = search.get(\"redirect\") ?? undefined;\n\n const login = useLatest(auth.login);\n\n useEffect(() => {\n void login.current({\n redirectTo,\n replace: true,\n });\n }, [login, redirectTo]);\n\n return (\n <div className=\"flex items-center justify-center mt-8\">\n <Card className=\"max-w-md w-full\">\n <CardHeader>\n <CardTitle className=\"text-lg\">Sign in</CardTitle>\n <CardDescription>\n You're being redirected to our secure login provider to complete\n your sign-in process.\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center text-sm font-medium gap-2\">\n <Spinner /> Redirecting...\n </div>\n </CardContent>\n </Card>\n </div>\n );\n};\n","import { useEffect } from \"react\";\nimport { useLatest } from \"../../util/useLatest.js\";\nimport { useAuth } from \"../hook.js\";\n\nexport const SignOut = () => {\n const auth = useAuth();\n\n const logout = useLatest(auth.logout);\n\n useEffect(() => {\n void logout.current();\n }, [logout]);\n\n return null;\n};\n","import { useEffect } from \"react\";\nimport { Button, Link } from \"zudoku/components\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"zudoku/ui/Card.js\";\nimport { useLatest } from \"../../util/useLatest.js\";\nimport { useAuth } from \"../hook.js\";\n\nexport const SignUp = () => {\n const auth = useAuth();\n\n const signup = useLatest(auth.signup);\n\n useEffect(() => {\n void signup.current();\n }, [signup]);\n\n return (\n <div className=\"flex items-center justify-center mt-8\">\n <Card className=\"max-w-md w-full\">\n <CardHeader>\n <CardTitle className=\"text-lg\">Sign up</CardTitle>\n <CardDescription>\n You're being redirected to our secure login provider to complete\n your sign up process.\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-col gap-2 justify-center\">\n <Button onClick={() => auth.signup()} variant=\"default\">\n Register\n </Button>\n <Button variant=\"link\" className=\"text-muted-foreground\" asChild>\n <Link to=\"/\">Go home</Link>\n </Button>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n};\n"],"names":["SignIn","auth","useAuth","search","useSearchParams","redirectTo","login","useLatest","useEffect","jsxs","Card","CardHeader","jsx","CardTitle","CardDescription","CardContent","Spinner","SignOut","logout","SignUp","signup","Button","Link"],"mappings":";;;;;;;AAaO,MAAMA,IAAS,MAAM;AAC1B,QAAMC,IAAOC,EAAA,GACP,CAACC,CAAM,IAAIC,EAAA,GACXC,IAAaF,EAAO,IAAI,UAAU,KAAK,QAEvCG,IAAQC,EAAUN,EAAK,KAAK;AAElC,SAAAO,EAAU,MAAM;AACd,IAAKF,EAAM,QAAQ;AAAA,MACjB,YAAAD;AAAA,MACA,SAAS;AAAA,IAAA,CACV;AAAA,EACH,GAAG,CAACC,GAAOD,CAAU,CAAC,yBAGnB,OAAA,EAAI,WAAU,yCACb,UAAAI,gBAAAA,EAAAA,KAACC,GAAA,EAAK,WAAU,mBACd,UAAA;AAAA,IAAAD,gBAAAA,OAACE,GAAA,EACC,UAAA;AAAA,MAAAC,gBAAAA,EAAAA,IAACC,GAAA,EAAU,WAAU,WAAU,UAAA,WAAO;AAAA,MACtCD,gBAAAA,EAAAA,IAACE,KAAgB,UAAA,yFAAA,CAGjB;AAAA,IAAA,GACF;AAAA,IACAF,gBAAAA,MAACG,GAAA,EACC,UAAAN,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+CACb,UAAA;AAAA,MAAAG,gBAAAA,EAAAA,IAACI,GAAA,EAAQ;AAAA,MAAE;AAAA,IAAA,EAAA,CACb,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ,GCzCaC,IAAU,MAAM;AAC3B,QAAMhB,IAAOC,EAAA,GAEPgB,IAASX,EAAUN,EAAK,MAAM;AAEpC,SAAAO,EAAU,MAAM;AACd,IAAKU,EAAO,QAAA;AAAA,EACd,GAAG,CAACA,CAAM,CAAC,GAEJ;AACT,GCFaC,IAAS,MAAM;AAC1B,QAAMlB,IAAOC,EAAA,GAEPkB,IAASb,EAAUN,EAAK,MAAM;AAEpC,SAAAO,EAAU,MAAM;AACd,IAAKY,EAAO,QAAA;AAAA,EACd,GAAG,CAACA,CAAM,CAAC,yBAGR,OAAA,EAAI,WAAU,yCACb,UAAAX,gBAAAA,EAAAA,KAACC,GAAA,EAAK,WAAU,mBACd,UAAA;AAAA,IAAAD,gBAAAA,OAACE,GAAA,EACC,UAAA;AAAA,MAAAC,gBAAAA,EAAAA,IAACC,GAAA,EAAU,WAAU,WAAU,UAAA,WAAO;AAAA,MACtCD,gBAAAA,EAAAA,IAACE,KAAgB,UAAA,yFAAA,CAGjB;AAAA,IAAA,GACF;AAAA,IACAF,gBAAAA,MAACG,GAAA,EACC,UAAAN,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,sCACb,UAAA;AAAA,MAAAG,gBAAAA,EAAAA,IAACS,GAAA,EAAO,SAAS,MAAMpB,EAAK,UAAU,SAAQ,WAAU,UAAA,WAAA,CAExD;AAAA,MACAW,gBAAAA,EAAAA,IAACS,GAAA,EAAO,SAAQ,QAAO,WAAU,yBAAwB,SAAO,IAC9D,UAAAT,gBAAAA,EAAAA,IAACU,GAAA,EAAK,IAAG,KAAI,qBAAO,EAAA,CACtB;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
@@ -2,7 +2,7 @@ import { j as e } from "./jsx-runtime-BzflLqGi.js";
2
2
  import { ListTreeIcon as x } from "lucide-react";
3
3
  import { useRef as l, useState as h, useEffect as f } from "react";
4
4
  import { c } from "./cn-dYga0KKN.js";
5
- import { u as v, A as g } from "./index-CG2v-T7-.js";
5
+ import { u as v, A as g } from "./index-CboxZOVW.js";
6
6
  const d = "data-active", p = ({
7
7
  item: s,
8
8
  children: r,
@@ -89,4 +89,4 @@ const d = "data-active", p = ({
89
89
  export {
90
90
  R as T
91
91
  };
92
- //# sourceMappingURL=Toc-L1vGGHA1.js.map
92
+ //# sourceMappingURL=Toc-D_Rj4jVx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toc-L1vGGHA1.js","sources":["../src/lib/components/navigation/Toc.tsx"],"sourcesContent":["import type { TocEntry } from \"@stefanprobst/rehype-extract-toc\";\nimport { ListTreeIcon } from \"lucide-react\";\nimport {\n type CSSProperties,\n type PropsWithChildren,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../util/cn.js\";\nimport { AnchorLink } from \"../AnchorLink.js\";\nimport { useViewportAnchor } from \"../context/ViewportAnchorContext.js\";\n\nconst DATA_ANCHOR_ATTR = \"data-active\";\n\nconst TocItem = ({\n item,\n children,\n className,\n isActive,\n}: PropsWithChildren<{\n item: TocEntry;\n isActive: boolean;\n className?: string;\n}>) => {\n return (\n <li className={cn(\"truncate\", className)} title={item.value}>\n <AnchorLink\n to={`#${item.id}`}\n {...{ [DATA_ANCHOR_ATTR]: item.id }}\n className={cn(\n isActive\n ? \"text-primary\"\n : \"hover:text-accent-foreground text-muted-foreground\",\n )}\n >\n {item.value}\n </AnchorLink>\n {children}\n </li>\n );\n};\n\nexport const Toc = ({ entries }: { entries: TocEntry[] }) => {\n const { activeAnchor } = useViewportAnchor();\n const listWrapperRef = useRef<HTMLUListElement>(null);\n const paintedOnce = useRef(false);\n const [indicatorStyle, setIndicatorStyles] = useState<CSSProperties>({\n top: 0,\n opacity: 0,\n });\n\n // synchronize active anchor indicator with the scroll position\n useEffect(() => {\n if (!listWrapperRef.current) return;\n\n const activeElement = listWrapperRef.current.querySelector(\n `[${DATA_ANCHOR_ATTR}='${activeAnchor}']`,\n );\n\n if (!activeElement) {\n setIndicatorStyles({ top: 0, opacity: 0 });\n return;\n }\n\n const topParent = listWrapperRef.current.getBoundingClientRect().top;\n const topElement = activeElement.getBoundingClientRect().top;\n\n setIndicatorStyles({\n opacity: 1,\n top: `${topElement - topParent}px`,\n });\n\n if (paintedOnce.current) return;\n\n // after all is painted, the indicator should animate\n requestIdleCallback(() => {\n paintedOnce.current = true;\n });\n }, [activeAnchor]);\n\n return (\n <aside className=\"sticky scrollbar top-8 lg:top-(--header-height) h-[calc(100vh-var(--header-height))] pt-(--padding-content-top) pb-(--padding-content-bottom) overflow-y-auto ps-1 text-sm\">\n <div className=\"flex items-center gap-2 font-medium mb-2\">\n <ListTreeIcon size={16} />\n On this page\n </div>\n <div className=\"relative ms-px ps-4\">\n <div className=\"absolute inset-0 end-auto bg-border w-[1.5px]\" />\n <div\n className={cn(\n \"absolute start-0 -translate-y-1 h-6 w-[2.5px] bg-primary\",\n paintedOnce.current &&\n \"ease-out [transition:top_150ms,opacity_325ms]\",\n )}\n style={indicatorStyle}\n />\n <ul\n ref={listWrapperRef}\n className=\"relative font-medium list-none space-y-2\"\n >\n {entries.map((item) => (\n <TocItem\n isActive={item.id === activeAnchor}\n key={item.id}\n item={item}\n className=\"ps-0\"\n >\n {item.children && (\n <ul className=\"list-none ps-4 pt-2 space-y-2\">\n {item.children.map((child) => (\n <TocItem\n item={child}\n isActive={child.id === activeAnchor}\n key={child.id}\n />\n ))}\n </ul>\n )}\n </TocItem>\n ))}\n </ul>\n </div>\n </aside>\n );\n};\n"],"names":["DATA_ANCHOR_ATTR","TocItem","item","children","className","isActive","jsxs","cn","jsx","AnchorLink","Toc","entries","activeAnchor","useViewportAnchor","listWrapperRef","useRef","paintedOnce","indicatorStyle","setIndicatorStyles","useState","useEffect","activeElement","topParent","topElement","ListTreeIcon","child"],"mappings":"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"}
1
+ {"version":3,"file":"Toc-D_Rj4jVx.js","sources":["../src/lib/components/navigation/Toc.tsx"],"sourcesContent":["import type { TocEntry } from \"@stefanprobst/rehype-extract-toc\";\nimport { ListTreeIcon } from \"lucide-react\";\nimport {\n type CSSProperties,\n type PropsWithChildren,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../util/cn.js\";\nimport { AnchorLink } from \"../AnchorLink.js\";\nimport { useViewportAnchor } from \"../context/ViewportAnchorContext.js\";\n\nconst DATA_ANCHOR_ATTR = \"data-active\";\n\nconst TocItem = ({\n item,\n children,\n className,\n isActive,\n}: PropsWithChildren<{\n item: TocEntry;\n isActive: boolean;\n className?: string;\n}>) => {\n return (\n <li className={cn(\"truncate\", className)} title={item.value}>\n <AnchorLink\n to={`#${item.id}`}\n {...{ [DATA_ANCHOR_ATTR]: item.id }}\n className={cn(\n isActive\n ? \"text-primary\"\n : \"hover:text-accent-foreground text-muted-foreground\",\n )}\n >\n {item.value}\n </AnchorLink>\n {children}\n </li>\n );\n};\n\nexport const Toc = ({ entries }: { entries: TocEntry[] }) => {\n const { activeAnchor } = useViewportAnchor();\n const listWrapperRef = useRef<HTMLUListElement>(null);\n const paintedOnce = useRef(false);\n const [indicatorStyle, setIndicatorStyles] = useState<CSSProperties>({\n top: 0,\n opacity: 0,\n });\n\n // synchronize active anchor indicator with the scroll position\n useEffect(() => {\n if (!listWrapperRef.current) return;\n\n const activeElement = listWrapperRef.current.querySelector(\n `[${DATA_ANCHOR_ATTR}='${activeAnchor}']`,\n );\n\n if (!activeElement) {\n setIndicatorStyles({ top: 0, opacity: 0 });\n return;\n }\n\n const topParent = listWrapperRef.current.getBoundingClientRect().top;\n const topElement = activeElement.getBoundingClientRect().top;\n\n setIndicatorStyles({\n opacity: 1,\n top: `${topElement - topParent}px`,\n });\n\n if (paintedOnce.current) return;\n\n // after all is painted, the indicator should animate\n requestIdleCallback(() => {\n paintedOnce.current = true;\n });\n }, [activeAnchor]);\n\n return (\n <aside className=\"sticky scrollbar top-8 lg:top-(--header-height) h-[calc(100vh-var(--header-height))] pt-(--padding-content-top) pb-(--padding-content-bottom) overflow-y-auto ps-1 text-sm\">\n <div className=\"flex items-center gap-2 font-medium mb-2\">\n <ListTreeIcon size={16} />\n On this page\n </div>\n <div className=\"relative ms-px ps-4\">\n <div className=\"absolute inset-0 end-auto bg-border w-[1.5px]\" />\n <div\n className={cn(\n \"absolute start-0 -translate-y-1 h-6 w-[2.5px] bg-primary\",\n paintedOnce.current &&\n \"ease-out [transition:top_150ms,opacity_325ms]\",\n )}\n style={indicatorStyle}\n />\n <ul\n ref={listWrapperRef}\n className=\"relative font-medium list-none space-y-2\"\n >\n {entries.map((item) => (\n <TocItem\n isActive={item.id === activeAnchor}\n key={item.id}\n item={item}\n className=\"ps-0\"\n >\n {item.children && (\n <ul className=\"list-none ps-4 pt-2 space-y-2\">\n {item.children.map((child) => (\n <TocItem\n item={child}\n isActive={child.id === activeAnchor}\n key={child.id}\n />\n ))}\n </ul>\n )}\n </TocItem>\n ))}\n </ul>\n </div>\n </aside>\n );\n};\n"],"names":["DATA_ANCHOR_ATTR","TocItem","item","children","className","isActive","jsxs","cn","jsx","AnchorLink","Toc","entries","activeAnchor","useViewportAnchor","listWrapperRef","useRef","paintedOnce","indicatorStyle","setIndicatorStyles","useState","useEffect","activeElement","topParent","topElement","ListTreeIcon","child"],"mappings":"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"}