@kushagradhawan/kookie-blocks 0.1.16 → 0.1.18

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 (99) hide show
  1. package/dist/cjs/components/code/code-block.js +1 -1
  2. package/dist/cjs/components/code/code-block.js.map +2 -2
  3. package/dist/cjs/components/docs/docs-page-header.d.ts +12 -0
  4. package/dist/cjs/components/docs/docs-page-header.d.ts.map +1 -0
  5. package/dist/cjs/components/docs/docs-page-header.js +10 -0
  6. package/dist/cjs/components/docs/docs-page-header.js.map +7 -0
  7. package/dist/cjs/components/docs/docs-page.d.ts +28 -0
  8. package/dist/cjs/components/docs/docs-page.d.ts.map +1 -0
  9. package/dist/cjs/components/docs/docs-page.js +2 -0
  10. package/dist/cjs/components/docs/docs-page.js.map +7 -0
  11. package/dist/cjs/components/docs/docs-shell.d.ts +32 -0
  12. package/dist/cjs/components/docs/docs-shell.d.ts.map +1 -0
  13. package/dist/cjs/components/docs/docs-shell.js +2 -0
  14. package/dist/cjs/components/docs/docs-shell.js.map +7 -0
  15. package/dist/cjs/components/docs/docs-sidebar.d.ts +33 -0
  16. package/dist/cjs/components/docs/docs-sidebar.d.ts.map +1 -0
  17. package/dist/cjs/components/docs/docs-sidebar.js +2 -0
  18. package/dist/cjs/components/docs/docs-sidebar.js.map +7 -0
  19. package/dist/cjs/components/docs/index.d.ts +7 -0
  20. package/dist/cjs/components/docs/index.d.ts.map +1 -0
  21. package/dist/cjs/components/docs/index.js +2 -0
  22. package/dist/cjs/components/docs/index.js.map +7 -0
  23. package/dist/cjs/components/docs/table-of-contents.d.ts +12 -0
  24. package/dist/cjs/components/docs/table-of-contents.d.ts.map +1 -0
  25. package/dist/cjs/components/docs/table-of-contents.js +2 -0
  26. package/dist/cjs/components/docs/table-of-contents.js.map +7 -0
  27. package/dist/cjs/components/docs/types.d.ts +38 -0
  28. package/dist/cjs/components/docs/types.d.ts.map +1 -0
  29. package/dist/cjs/components/docs/types.js +2 -0
  30. package/dist/cjs/components/docs/types.js.map +7 -0
  31. package/dist/cjs/components/index.d.ts +1 -0
  32. package/dist/cjs/components/index.d.ts.map +1 -1
  33. package/dist/cjs/components/index.js +1 -1
  34. package/dist/cjs/components/index.js.map +2 -2
  35. package/dist/cjs/components/markdown/create-markdown-components.d.ts.map +1 -1
  36. package/dist/cjs/components/markdown/create-markdown-components.js +2 -2
  37. package/dist/cjs/components/markdown/create-markdown-components.js.map +3 -3
  38. package/dist/cjs/components/markdown/streaming-markdown.d.ts.map +1 -1
  39. package/dist/cjs/components/markdown/streaming-markdown.js +1 -1
  40. package/dist/cjs/components/markdown/streaming-markdown.js.map +3 -3
  41. package/dist/cjs/components/markdown/types.d.ts +7 -0
  42. package/dist/cjs/components/markdown/types.d.ts.map +1 -1
  43. package/dist/cjs/components/markdown/types.js +1 -1
  44. package/dist/cjs/components/markdown/types.js.map +1 -1
  45. package/dist/esm/components/code/code-block.js +1 -1
  46. package/dist/esm/components/code/code-block.js.map +2 -2
  47. package/dist/esm/components/docs/docs-page-header.d.ts +12 -0
  48. package/dist/esm/components/docs/docs-page-header.d.ts.map +1 -0
  49. package/dist/esm/components/docs/docs-page-header.js +10 -0
  50. package/dist/esm/components/docs/docs-page-header.js.map +7 -0
  51. package/dist/esm/components/docs/docs-page.d.ts +28 -0
  52. package/dist/esm/components/docs/docs-page.d.ts.map +1 -0
  53. package/dist/esm/components/docs/docs-page.js +2 -0
  54. package/dist/esm/components/docs/docs-page.js.map +7 -0
  55. package/dist/esm/components/docs/docs-shell.d.ts +32 -0
  56. package/dist/esm/components/docs/docs-shell.d.ts.map +1 -0
  57. package/dist/esm/components/docs/docs-shell.js +2 -0
  58. package/dist/esm/components/docs/docs-shell.js.map +7 -0
  59. package/dist/esm/components/docs/docs-sidebar.d.ts +33 -0
  60. package/dist/esm/components/docs/docs-sidebar.d.ts.map +1 -0
  61. package/dist/esm/components/docs/docs-sidebar.js +2 -0
  62. package/dist/esm/components/docs/docs-sidebar.js.map +7 -0
  63. package/dist/esm/components/docs/index.d.ts +7 -0
  64. package/dist/esm/components/docs/index.d.ts.map +1 -0
  65. package/dist/esm/components/docs/index.js +2 -0
  66. package/dist/esm/components/docs/index.js.map +7 -0
  67. package/dist/esm/components/docs/table-of-contents.d.ts +12 -0
  68. package/dist/esm/components/docs/table-of-contents.d.ts.map +1 -0
  69. package/dist/esm/components/docs/table-of-contents.js +2 -0
  70. package/dist/esm/components/docs/table-of-contents.js.map +7 -0
  71. package/dist/esm/components/docs/types.d.ts +38 -0
  72. package/dist/esm/components/docs/types.d.ts.map +1 -0
  73. package/dist/esm/components/docs/types.js +1 -0
  74. package/dist/esm/components/docs/types.js.map +7 -0
  75. package/dist/esm/components/index.d.ts +1 -0
  76. package/dist/esm/components/index.d.ts.map +1 -1
  77. package/dist/esm/components/index.js +1 -1
  78. package/dist/esm/components/index.js.map +2 -2
  79. package/dist/esm/components/markdown/create-markdown-components.d.ts.map +1 -1
  80. package/dist/esm/components/markdown/create-markdown-components.js +2 -2
  81. package/dist/esm/components/markdown/create-markdown-components.js.map +3 -3
  82. package/dist/esm/components/markdown/streaming-markdown.d.ts.map +1 -1
  83. package/dist/esm/components/markdown/streaming-markdown.js +1 -1
  84. package/dist/esm/components/markdown/streaming-markdown.js.map +3 -3
  85. package/dist/esm/components/markdown/types.d.ts +7 -0
  86. package/dist/esm/components/markdown/types.d.ts.map +1 -1
  87. package/package.json +5 -1
  88. package/src/components/code/code-block.tsx +1 -1
  89. package/src/components/docs/docs-page-header.tsx +92 -0
  90. package/src/components/docs/docs-page.tsx +99 -0
  91. package/src/components/docs/docs-shell.tsx +114 -0
  92. package/src/components/docs/docs-sidebar.tsx +180 -0
  93. package/src/components/docs/index.ts +16 -0
  94. package/src/components/docs/table-of-contents.tsx +157 -0
  95. package/src/components/docs/types.ts +45 -0
  96. package/src/components/index.ts +1 -0
  97. package/src/components/markdown/create-markdown-components.tsx +38 -24
  98. package/src/components/markdown/streaming-markdown.tsx +5 -1
  99. package/src/components/markdown/types.ts +8 -0
@@ -1,2 +1,2 @@
1
- "use strict";var I=Object.create;var y=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var $=(r,o)=>{for(var t in o)y(r,t,{get:o[t],enumerable:!0})},S=(r,o,t,s)=>{if(o&&typeof o=="object"||typeof o=="function")for(let l of _(o))!D.call(r,l)&&l!==t&&y(r,l,{get:()=>o[l],enumerable:!(s=A(o,l))||s.enumerable});return r};var M=(r,o,t)=>(t=r!=null?I(z(r)):{},S(o||!r||!r.__esModule?y(t,"default",{value:r,enumerable:!0}):t,r)),W=r=>S(y({},"__esModule",{value:!0}),r);var X={};$(X,{CodeBlock:()=>J,useCodeBlockContext:()=>Q});module.exports=W(X);var e=M(require("react")),n=require("@kushagradhawan/kookie-ui"),w=require("@hugeicons/react"),f=require("@hugeicons/core-free-icons"),B=require("shiki"),x=require("./types"),v=require("./use-code-card"),T=require("./language-badge");const L=(0,e.createContext)(!1),O=360,U="one-light",j="one-dark-pro";function G({children:r,background:o="none",backgroundProps:t={}}){const{dotSize:s=24,color:l="var(--gray-10)",backgroundColor:c="var(--gray-2)",height:i,width:u="100%",radius:d="3"}=t,a=(0,e.useMemo)(()=>{if(o!=="none")return o==="dots"?{backgroundImage:`radial-gradient(circle, ${l} 1px, transparent 1px)`,borderRadius:`var(--radius-${d})`,backgroundSize:`${s}px ${s}px`,backgroundPosition:"center",backgroundColor:c,width:u,...i&&{height:i}}:{backgroundImage:`url(${o})`,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat",borderRadius:`var(--radius-${d})`,width:u,...i&&{height:i}}},[o,l,c,s,i,u,d]);return e.default.createElement(n.Card,{size:"1",variant:"soft"},e.default.createElement(n.Flex,{justify:"center",align:"center",py:"4",style:a},e.default.createElement(n.Theme,{fontFamily:"sans"},r)))}function K(){return e.default.createElement(n.Box,{className:"code-skeleton"},["85%","70%","90%","60%","75%","80%"].map((o,t)=>e.default.createElement(n.Box,{key:t,className:"code-skeleton-line",style:{width:o}})))}const P=(0,e.memo)(function({code:o,language:t,showCopy:s,showLanguage:l,showLineNumbers:c,collapsible:i,collapsedHeight:u,file:d,isLoading:a=!1,children:p}){const{isExpanded:g,shouldShowToggle:h,copied:C,contentRef:m,contentMaxHeight:b,handleToggle:N,handleCopy:H}=(0,v.useCodeCard)({code:o,collapsedHeight:u}),k=i&&h,E=g?"rotate(180deg)":"rotate(0deg)",F=c?"code-content":"code-content hide-line-numbers";return e.default.createElement(n.Box,{position:"relative"},e.default.createElement(n.Card,{size:"1",variant:"soft"},e.default.createElement(n.Flex,{direction:"column"},e.default.createElement(n.Flex,{justify:"between",align:"start",gap:"2"},e.default.createElement(n.Flex,{align:"center",gap:"2"},l&&e.default.createElement(T.LanguageBadge,{language:t}),d&&e.default.createElement(n.Text,{size:"1",color:"gray",highContrast:!0},d)),e.default.createElement(n.Flex,{align:"center",className:"code-action-buttons"},k&&e.default.createElement(n.IconButton,{size:"2",variant:"ghost",color:"gray",onClick:N,tooltip:g?"Collapse":"Expand","aria-label":g?"Collapse code":"Expand code"},e.default.createElement(w.HugeiconsIcon,{icon:f.ArrowDown01Icon,style:{transform:E},className:"code-chevron",strokeWidth:1.75})),s&&e.default.createElement(n.Button,{size:"2",variant:"ghost",color:"gray",onClick:H,tooltip:C?"Copied!":"Copy","aria-label":C?"Copied!":"Copy code"},e.default.createElement(w.HugeiconsIcon,{icon:C?f.Tick01Icon:f.Copy01Icon,strokeWidth:1.75})," Copy"))),e.default.createElement(n.Box,{ref:m,style:{maxHeight:i?`${b}px`:void 0},className:F},e.default.createElement(n.ScrollArea,{type:"auto",scrollbars:"horizontal"},a?e.default.createElement(K,null):p)),k&&!g&&e.default.createElement(n.Box,{className:"code-scroll-shadow visible"}))))}),V=(0,e.memo)(function({code:o,language:t,showCopy:s,showLanguage:l,showLineNumbers:c,collapsible:i,collapsedHeight:u,file:d,shikiConfig:a}){const[p,g]=(0,e.useState)(null),h=(0,e.useMemo)(()=>{const m=a?.themes?.light||U,b=a?.themes?.dark||j;return{lang:t,themes:{light:m,dark:b},defaultColor:!1,langAlias:a?.langAlias,transformers:a?.transformers,meta:a?.meta?{__raw:a.meta}:void 0}},[t,a?.themes?.light,a?.themes?.dark,a?.langAlias,a?.transformers,a?.meta]);return(0,e.useEffect)(()=>{let m=!1;return(0,B.codeToHtml)(o,h).then(b=>{m||g(b)}).catch(b=>{}),()=>{m=!0}},[o,h]),e.default.createElement(P,{code:o,language:t,showCopy:s,showLanguage:l,showLineNumbers:c,collapsible:i,collapsedHeight:u,file:d,isLoading:p===null},p?e.default.createElement(n.Box,{dangerouslySetInnerHTML:{__html:p}}):null)}),q=(0,e.memo)(function({children:o,showCopy:t,showLanguage:s,showLineNumbers:l,collapsible:c,collapsedHeight:i,file:u}){const d=(0,x.extractTextFromChildren)(o),a=(0,x.extractLanguageFromChildren)(o);return e.default.createElement(P,{code:d,language:a,showCopy:t,showLanguage:s,showLineNumbers:l,collapsible:c,collapsedHeight:i,file:u},o)});function J({children:r,code:o,language:t,preview:s,showCopy:l=!0,showLanguage:c=!0,showLineNumbers:i=!0,shikiConfig:u,background:d,backgroundProps:a,collapsible:p=!0,collapsedHeight:g=O,file:h}){const C=t||(0,x.extractLanguageFromChildren)(r)||"text";return e.default.createElement(L.Provider,{value:!0},e.default.createElement(n.Box,{className:"docs-code-block",mt:"2",mb:"4"},e.default.createElement(n.Flex,{direction:"column",gap:"2"},s&&e.default.createElement(G,{background:d,backgroundProps:a},s),o&&e.default.createElement(V,{code:o,language:C,showCopy:l,showLanguage:c,showLineNumbers:i,collapsible:p,collapsedHeight:g,file:h,shikiConfig:u}),r&&!o&&e.default.createElement(q,{showCopy:l,showLanguage:c,showLineNumbers:i,collapsible:p,collapsedHeight:g,file:h},r))))}function Q(){return(0,e.useContext)(L)}
1
+ "use strict";var I=Object.create;var y=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var $=(r,o)=>{for(var t in o)y(r,t,{get:o[t],enumerable:!0})},S=(r,o,t,s)=>{if(o&&typeof o=="object"||typeof o=="function")for(let l of _(o))!D.call(r,l)&&l!==t&&y(r,l,{get:()=>o[l],enumerable:!(s=A(o,l))||s.enumerable});return r};var M=(r,o,t)=>(t=r!=null?I(z(r)):{},S(o||!r||!r.__esModule?y(t,"default",{value:r,enumerable:!0}):t,r)),W=r=>S(y({},"__esModule",{value:!0}),r);var X={};$(X,{CodeBlock:()=>J,useCodeBlockContext:()=>Q});module.exports=W(X);var e=M(require("react")),n=require("@kushagradhawan/kookie-ui"),w=require("@hugeicons/react"),f=require("@hugeicons/core-free-icons"),B=require("shiki"),x=require("./types"),v=require("./use-code-card"),T=require("./language-badge");const L=(0,e.createContext)(!1),O=360,U="one-light",j="one-dark-pro";function G({children:r,background:o="none",backgroundProps:t={}}){const{dotSize:s=24,color:l="var(--gray-10)",backgroundColor:c="var(--gray-2)",height:i,width:u="100%",radius:d="3"}=t,a=(0,e.useMemo)(()=>{if(o!=="none")return o==="dots"?{backgroundImage:`radial-gradient(circle, ${l} 1px, transparent 1px)`,borderRadius:`var(--radius-${d})`,backgroundSize:`${s}px ${s}px`,backgroundPosition:"center",backgroundColor:c,width:u,...i&&{height:i}}:{backgroundImage:`url(${o})`,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat",borderRadius:`var(--radius-${d})`,width:u,...i&&{height:i}}},[o,l,c,s,i,u,d]);return e.default.createElement(n.Card,{size:"1",variant:"soft"},e.default.createElement(n.Flex,{justify:"center",align:"center",py:"4",style:a},e.default.createElement(n.Theme,{fontFamily:"sans"},r)))}function K(){return e.default.createElement(n.Box,{className:"code-skeleton"},["85%","70%","90%","60%","75%","80%"].map((o,t)=>e.default.createElement(n.Box,{key:t,className:"code-skeleton-line",style:{width:o}})))}const P=(0,e.memo)(function({code:o,language:t,showCopy:s,showLanguage:l,showLineNumbers:c,collapsible:i,collapsedHeight:u,file:d,isLoading:a=!1,children:p}){const{isExpanded:g,shouldShowToggle:h,copied:C,contentRef:m,contentMaxHeight:b,handleToggle:N,handleCopy:H}=(0,v.useCodeCard)({code:o,collapsedHeight:u}),k=i&&h,E=g?"rotate(180deg)":"rotate(0deg)",F=c?"code-content":"code-content hide-line-numbers";return e.default.createElement(n.Box,{position:"relative"},e.default.createElement(n.Card,{size:"1",variant:"soft"},e.default.createElement(n.Flex,{direction:"column"},e.default.createElement(n.Flex,{justify:"between",align:"start",gap:"2"},e.default.createElement(n.Flex,{align:"center",gap:"2"},l&&e.default.createElement(T.LanguageBadge,{language:t}),d&&e.default.createElement(n.Text,{size:"1",color:"gray",highContrast:!0},d)),e.default.createElement(n.Flex,{align:"center",className:"code-action-buttons"},k&&e.default.createElement(n.IconButton,{size:"2",variant:"ghost",color:"gray",onClick:N,tooltip:g?"Collapse":"Expand","aria-label":g?"Collapse code":"Expand code"},e.default.createElement(w.HugeiconsIcon,{icon:f.ArrowDown01Icon,style:{transform:E},className:"code-chevron",strokeWidth:1.75})),s&&e.default.createElement(n.Button,{size:"2",variant:"ghost",color:"gray",onClick:H,tooltip:C?"Copied!":"Copy","aria-label":C?"Copied!":"Copy code"},e.default.createElement(w.HugeiconsIcon,{icon:C?f.Tick01Icon:f.Copy01Icon,strokeWidth:1.75})," Copy"))),e.default.createElement(n.Box,{ref:m,style:{maxHeight:i?`${b}px`:void 0},className:F},e.default.createElement(n.ScrollArea,{type:"auto",scrollbars:"horizontal"},a?e.default.createElement(K,null):p)),k&&!g&&e.default.createElement(n.Box,{className:"code-scroll-shadow visible"}))))}),V=(0,e.memo)(function({code:o,language:t,showCopy:s,showLanguage:l,showLineNumbers:c,collapsible:i,collapsedHeight:u,file:d,shikiConfig:a}){const[p,g]=(0,e.useState)(null),h=(0,e.useMemo)(()=>{const m=a?.themes?.light||U,b=a?.themes?.dark||j;return{lang:t,themes:{light:m,dark:b},defaultColor:!1,langAlias:a?.langAlias,transformers:a?.transformers,meta:a?.meta?{__raw:a.meta}:void 0}},[t,a?.themes?.light,a?.themes?.dark,a?.langAlias,a?.transformers,a?.meta]);return(0,e.useEffect)(()=>{let m=!1;return(0,B.codeToHtml)(o,h).then(b=>{m||g(b)}).catch(b=>{}),()=>{m=!0}},[o,h]),e.default.createElement(P,{code:o,language:t,showCopy:s,showLanguage:l,showLineNumbers:c,collapsible:i,collapsedHeight:u,file:d,isLoading:p===null},p?e.default.createElement(n.Box,{dangerouslySetInnerHTML:{__html:p}}):null)}),q=(0,e.memo)(function({children:o,showCopy:t,showLanguage:s,showLineNumbers:l,collapsible:c,collapsedHeight:i,file:u}){const d=(0,x.extractTextFromChildren)(o),a=(0,x.extractLanguageFromChildren)(o);return e.default.createElement(P,{code:d,language:a,showCopy:t,showLanguage:s,showLineNumbers:l,collapsible:c,collapsedHeight:i,file:u},o)});function J({children:r,code:o,language:t,preview:s,showCopy:l=!0,showLanguage:c=!0,showLineNumbers:i=!0,shikiConfig:u,background:d,backgroundProps:a,collapsible:p=!0,collapsedHeight:g=O,file:h}){const C=t||(0,x.extractLanguageFromChildren)(r)||"text";return e.default.createElement(L.Provider,{value:!0},e.default.createElement(n.Box,{className:"docs-code-block",my:"3"},e.default.createElement(n.Flex,{direction:"column",gap:"2"},s&&e.default.createElement(G,{background:d,backgroundProps:a},s),o&&e.default.createElement(V,{code:o,language:C,showCopy:l,showLanguage:c,showLineNumbers:i,collapsible:p,collapsedHeight:g,file:h,shikiConfig:u}),r&&!o&&e.default.createElement(q,{showCopy:l,showLanguage:c,showLineNumbers:i,collapsible:p,collapsedHeight:g,file:h},r))))}function Q(){return(0,e.useContext)(L)}
2
2
  //# sourceMappingURL=code-block.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/code/code-block.tsx"],
4
- "sourcesContent": ["import React, { useState, useEffect, useMemo, memo, createContext, useContext, type ReactNode } from \"react\";\nimport { Box, Card, Code, Flex, Button, Text, Theme, ScrollArea, IconButton } from \"@kushagradhawan/kookie-ui\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { Copy01Icon, Tick01Icon, ArrowDown01Icon } from \"@hugeicons/core-free-icons\";\nimport { codeToHtml, type BundledLanguage, type BundledTheme } from \"shiki\";\nimport type { CodeBlockProps, ShikiConfig, PreviewBackgroundProps } from \"./types\";\nimport { extractTextFromChildren, extractLanguageFromChildren } from \"./types\";\nimport { useCodeCard } from \"./use-code-card\";\nimport { LanguageBadge } from \"./language-badge\";\n\nconst CodeBlockContext = createContext<boolean>(false);\n\nconst DEFAULT_COLLAPSED_HEIGHT = 360;\nconst DEFAULT_LIGHT_THEME = \"one-light\";\nconst DEFAULT_DARK_THEME = \"one-dark-pro\";\n\ninterface PreviewSectionProps {\n children: ReactNode;\n background?: \"none\" | \"dots\" | string;\n backgroundProps?: PreviewBackgroundProps;\n}\n\nfunction PreviewSection({ children, background = \"none\", backgroundProps = {} }: PreviewSectionProps) {\n const { dotSize = 24, color = \"var(--gray-10)\", backgroundColor = \"var(--gray-2)\", height, width = \"100%\", radius = \"3\" } = backgroundProps;\n\n const backgroundStyle = useMemo((): React.CSSProperties | undefined => {\n if (background === \"none\") return undefined;\n\n if (background === \"dots\") {\n return {\n backgroundImage: `radial-gradient(circle, ${color} 1px, transparent 1px)`,\n borderRadius: `var(--radius-${radius})`,\n backgroundSize: `${dotSize}px ${dotSize}px`,\n backgroundPosition: \"center\",\n backgroundColor,\n width,\n ...(height && { height }),\n };\n }\n\n // Image background\n return {\n backgroundImage: `url(${background})`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n borderRadius: `var(--radius-${radius})`,\n width,\n ...(height && { height }),\n };\n }, [background, color, backgroundColor, dotSize, height, width, radius]);\n\n return (\n <Card size=\"1\" variant=\"soft\">\n <Flex justify=\"center\" align=\"center\" py=\"4\" style={backgroundStyle}>\n <Theme fontFamily=\"sans\">{children}</Theme>\n </Flex>\n </Card>\n );\n}\n\ninterface CodeCardProps {\n code: string;\n language: string;\n showCopy: boolean;\n showLanguage: boolean;\n showLineNumbers: boolean;\n collapsible: boolean;\n collapsedHeight: number;\n file?: string;\n isLoading?: boolean;\n children: ReactNode;\n}\n\nfunction CodeSkeleton() {\n // Generate varied line widths for visual interest\n const lineWidths = [\"85%\", \"70%\", \"90%\", \"60%\", \"75%\", \"80%\"];\n\n return (\n <Box className=\"code-skeleton\">\n {lineWidths.map((width, index) => (\n <Box key={index} className=\"code-skeleton-line\" style={{ width }} />\n ))}\n </Box>\n );\n}\n\nconst CodeCard = memo(function CodeCard({\n code,\n language,\n showCopy,\n showLanguage,\n showLineNumbers,\n collapsible,\n collapsedHeight,\n file,\n isLoading = false,\n children,\n}: CodeCardProps) {\n const { isExpanded, shouldShowToggle, copied, contentRef, contentMaxHeight, handleToggle, handleCopy } = useCodeCard({\n code,\n collapsedHeight,\n });\n\n const showToggle = collapsible && shouldShowToggle;\n const chevronRotation = isExpanded ? \"rotate(180deg)\" : \"rotate(0deg)\";\n const contentClassName = showLineNumbers ? \"code-content\" : \"code-content hide-line-numbers\";\n\n return (\n <Box position=\"relative\">\n <Card size=\"1\" variant=\"soft\">\n <Flex direction=\"column\">\n <Flex justify=\"between\" align=\"start\" gap=\"2\">\n <Flex align=\"center\" gap=\"2\">\n {showLanguage && <LanguageBadge language={language} />}\n {file && (\n <Text size=\"1\" color=\"gray\" highContrast>\n {file}\n </Text>\n )}\n </Flex>\n\n <Flex align=\"center\" className=\"code-action-buttons\">\n {showToggle && (\n <IconButton\n size=\"2\"\n variant=\"ghost\"\n color=\"gray\"\n onClick={handleToggle}\n tooltip={isExpanded ? \"Collapse\" : \"Expand\"}\n aria-label={isExpanded ? \"Collapse code\" : \"Expand code\"}\n >\n <HugeiconsIcon icon={ArrowDown01Icon} style={{ transform: chevronRotation }} className=\"code-chevron\" strokeWidth={1.75} />\n </IconButton>\n )}\n {showCopy && (\n <Button\n size=\"2\"\n variant=\"ghost\"\n color=\"gray\"\n onClick={handleCopy}\n tooltip={copied ? \"Copied!\" : \"Copy\"}\n aria-label={copied ? \"Copied!\" : \"Copy code\"}\n >\n <HugeiconsIcon icon={copied ? Tick01Icon : Copy01Icon} strokeWidth={1.75} /> Copy\n </Button>\n )}\n </Flex>\n </Flex>\n\n <Box ref={contentRef} style={{ maxHeight: collapsible ? `${contentMaxHeight}px` : undefined }} className={contentClassName}>\n <ScrollArea type=\"auto\" scrollbars=\"horizontal\">\n {isLoading ? <CodeSkeleton /> : children}\n </ScrollArea>\n </Box>\n\n {showToggle && !isExpanded && <Box className=\"code-scroll-shadow visible\" />}\n </Flex>\n </Card>\n </Box>\n );\n});\n\ninterface RuntimeCodeSectionProps {\n code: string;\n language: string;\n showCopy: boolean;\n showLanguage: boolean;\n showLineNumbers: boolean;\n collapsible: boolean;\n collapsedHeight: number;\n file?: string;\n shikiConfig?: ShikiConfig;\n}\n\nconst RuntimeCodeSection = memo(function RuntimeCodeSection({\n code,\n language,\n showCopy,\n showLanguage,\n showLineNumbers,\n collapsible,\n collapsedHeight,\n file,\n shikiConfig,\n}: RuntimeCodeSectionProps) {\n const [highlighted, setHighlighted] = useState<string | null>(null);\n\n // Memoize Shiki config to prevent unnecessary re-highlights\n const shikiOptions = useMemo(() => {\n const lightTheme = shikiConfig?.themes?.light || DEFAULT_LIGHT_THEME;\n const darkTheme = shikiConfig?.themes?.dark || DEFAULT_DARK_THEME;\n\n return {\n lang: language as BundledLanguage,\n themes: {\n light: lightTheme as BundledTheme,\n dark: darkTheme as BundledTheme,\n },\n defaultColor: false as const,\n langAlias: shikiConfig?.langAlias,\n transformers: shikiConfig?.transformers,\n meta: shikiConfig?.meta ? { __raw: shikiConfig.meta } : undefined,\n };\n }, [language, shikiConfig?.themes?.light, shikiConfig?.themes?.dark, shikiConfig?.langAlias, shikiConfig?.transformers, shikiConfig?.meta]);\n\n useEffect(() => {\n let cancelled = false;\n\n codeToHtml(code, shikiOptions)\n .then((html) => {\n if (!cancelled) {\n setHighlighted(html);\n }\n })\n .catch((error) => {\n if (!cancelled) {\n // Keep previous highlighted content on error (stale while revalidate)\n if (process.env.NODE_ENV === \"development\") {\n console.error(\"[CodeBlock] Shiki highlighting failed:\", error);\n }\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [code, shikiOptions]);\n\n // Only show loading skeleton on initial render (no highlighted content yet)\n // During updates, keep showing previous highlighted content (stale while revalidate)\n const isInitialLoading = highlighted === null;\n\n return (\n <CodeCard\n code={code}\n language={language}\n showCopy={showCopy}\n showLanguage={showLanguage}\n showLineNumbers={showLineNumbers}\n collapsible={collapsible}\n collapsedHeight={collapsedHeight}\n file={file}\n isLoading={isInitialLoading}\n >\n {highlighted ? <Box dangerouslySetInnerHTML={{ __html: highlighted }} /> : null}\n </CodeCard>\n );\n});\n\ninterface ChildrenCodeSectionProps {\n children: ReactNode;\n showCopy: boolean;\n showLanguage: boolean;\n showLineNumbers: boolean;\n collapsible: boolean;\n collapsedHeight: number;\n file?: string;\n}\n\nconst ChildrenCodeSection = memo(function ChildrenCodeSection({\n children,\n showCopy,\n showLanguage,\n showLineNumbers,\n collapsible,\n collapsedHeight,\n file,\n}: ChildrenCodeSectionProps) {\n const code = extractTextFromChildren(children);\n const language = extractLanguageFromChildren(children);\n\n return (\n <CodeCard\n code={code}\n language={language}\n showCopy={showCopy}\n showLanguage={showLanguage}\n showLineNumbers={showLineNumbers}\n collapsible={collapsible}\n collapsedHeight={collapsedHeight}\n file={file}\n >\n {children}\n </CodeCard>\n );\n});\n\nexport function CodeBlock({\n children,\n code,\n language,\n preview,\n showCopy = true,\n showLanguage = true,\n showLineNumbers = true,\n shikiConfig,\n background,\n backgroundProps,\n collapsible = true,\n collapsedHeight = DEFAULT_COLLAPSED_HEIGHT,\n file,\n}: CodeBlockProps) {\n const displayLanguage = language || extractLanguageFromChildren(children) || \"text\";\n\n return (\n <CodeBlockContext.Provider value={true}>\n <Box className=\"docs-code-block\" mt=\"2\" mb=\"4\">\n <Flex direction=\"column\" gap=\"2\">\n {preview && (\n <PreviewSection background={background} backgroundProps={backgroundProps}>\n {preview}\n </PreviewSection>\n )}\n\n {code && (\n <RuntimeCodeSection\n code={code}\n language={displayLanguage}\n showCopy={showCopy}\n showLanguage={showLanguage}\n showLineNumbers={showLineNumbers}\n collapsible={collapsible}\n collapsedHeight={collapsedHeight}\n file={file}\n shikiConfig={shikiConfig}\n />\n )}\n\n {children && !code && (\n <ChildrenCodeSection\n showCopy={showCopy}\n showLanguage={showLanguage}\n showLineNumbers={showLineNumbers}\n collapsible={collapsible}\n collapsedHeight={collapsedHeight}\n file={file}\n >\n {children}\n </ChildrenCodeSection>\n )}\n </Flex>\n </Box>\n </CodeBlockContext.Provider>\n );\n}\n\nexport function useCodeBlockContext() {\n return useContext(CodeBlockContext);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import React, { useState, useEffect, useMemo, memo, createContext, useContext, type ReactNode } from \"react\";\nimport { Box, Card, Code, Flex, Button, Text, Theme, ScrollArea, IconButton } from \"@kushagradhawan/kookie-ui\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { Copy01Icon, Tick01Icon, ArrowDown01Icon } from \"@hugeicons/core-free-icons\";\nimport { codeToHtml, type BundledLanguage, type BundledTheme } from \"shiki\";\nimport type { CodeBlockProps, ShikiConfig, PreviewBackgroundProps } from \"./types\";\nimport { extractTextFromChildren, extractLanguageFromChildren } from \"./types\";\nimport { useCodeCard } from \"./use-code-card\";\nimport { LanguageBadge } from \"./language-badge\";\n\nconst CodeBlockContext = createContext<boolean>(false);\n\nconst DEFAULT_COLLAPSED_HEIGHT = 360;\nconst DEFAULT_LIGHT_THEME = \"one-light\";\nconst DEFAULT_DARK_THEME = \"one-dark-pro\";\n\ninterface PreviewSectionProps {\n children: ReactNode;\n background?: \"none\" | \"dots\" | string;\n backgroundProps?: PreviewBackgroundProps;\n}\n\nfunction PreviewSection({ children, background = \"none\", backgroundProps = {} }: PreviewSectionProps) {\n const { dotSize = 24, color = \"var(--gray-10)\", backgroundColor = \"var(--gray-2)\", height, width = \"100%\", radius = \"3\" } = backgroundProps;\n\n const backgroundStyle = useMemo((): React.CSSProperties | undefined => {\n if (background === \"none\") return undefined;\n\n if (background === \"dots\") {\n return {\n backgroundImage: `radial-gradient(circle, ${color} 1px, transparent 1px)`,\n borderRadius: `var(--radius-${radius})`,\n backgroundSize: `${dotSize}px ${dotSize}px`,\n backgroundPosition: \"center\",\n backgroundColor,\n width,\n ...(height && { height }),\n };\n }\n\n // Image background\n return {\n backgroundImage: `url(${background})`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n borderRadius: `var(--radius-${radius})`,\n width,\n ...(height && { height }),\n };\n }, [background, color, backgroundColor, dotSize, height, width, radius]);\n\n return (\n <Card size=\"1\" variant=\"soft\">\n <Flex justify=\"center\" align=\"center\" py=\"4\" style={backgroundStyle}>\n <Theme fontFamily=\"sans\">{children}</Theme>\n </Flex>\n </Card>\n );\n}\n\ninterface CodeCardProps {\n code: string;\n language: string;\n showCopy: boolean;\n showLanguage: boolean;\n showLineNumbers: boolean;\n collapsible: boolean;\n collapsedHeight: number;\n file?: string;\n isLoading?: boolean;\n children: ReactNode;\n}\n\nfunction CodeSkeleton() {\n // Generate varied line widths for visual interest\n const lineWidths = [\"85%\", \"70%\", \"90%\", \"60%\", \"75%\", \"80%\"];\n\n return (\n <Box className=\"code-skeleton\">\n {lineWidths.map((width, index) => (\n <Box key={index} className=\"code-skeleton-line\" style={{ width }} />\n ))}\n </Box>\n );\n}\n\nconst CodeCard = memo(function CodeCard({\n code,\n language,\n showCopy,\n showLanguage,\n showLineNumbers,\n collapsible,\n collapsedHeight,\n file,\n isLoading = false,\n children,\n}: CodeCardProps) {\n const { isExpanded, shouldShowToggle, copied, contentRef, contentMaxHeight, handleToggle, handleCopy } = useCodeCard({\n code,\n collapsedHeight,\n });\n\n const showToggle = collapsible && shouldShowToggle;\n const chevronRotation = isExpanded ? \"rotate(180deg)\" : \"rotate(0deg)\";\n const contentClassName = showLineNumbers ? \"code-content\" : \"code-content hide-line-numbers\";\n\n return (\n <Box position=\"relative\">\n <Card size=\"1\" variant=\"soft\">\n <Flex direction=\"column\">\n <Flex justify=\"between\" align=\"start\" gap=\"2\">\n <Flex align=\"center\" gap=\"2\">\n {showLanguage && <LanguageBadge language={language} />}\n {file && (\n <Text size=\"1\" color=\"gray\" highContrast>\n {file}\n </Text>\n )}\n </Flex>\n\n <Flex align=\"center\" className=\"code-action-buttons\">\n {showToggle && (\n <IconButton\n size=\"2\"\n variant=\"ghost\"\n color=\"gray\"\n onClick={handleToggle}\n tooltip={isExpanded ? \"Collapse\" : \"Expand\"}\n aria-label={isExpanded ? \"Collapse code\" : \"Expand code\"}\n >\n <HugeiconsIcon icon={ArrowDown01Icon} style={{ transform: chevronRotation }} className=\"code-chevron\" strokeWidth={1.75} />\n </IconButton>\n )}\n {showCopy && (\n <Button\n size=\"2\"\n variant=\"ghost\"\n color=\"gray\"\n onClick={handleCopy}\n tooltip={copied ? \"Copied!\" : \"Copy\"}\n aria-label={copied ? \"Copied!\" : \"Copy code\"}\n >\n <HugeiconsIcon icon={copied ? Tick01Icon : Copy01Icon} strokeWidth={1.75} /> Copy\n </Button>\n )}\n </Flex>\n </Flex>\n\n <Box ref={contentRef} style={{ maxHeight: collapsible ? `${contentMaxHeight}px` : undefined }} className={contentClassName}>\n <ScrollArea type=\"auto\" scrollbars=\"horizontal\">\n {isLoading ? <CodeSkeleton /> : children}\n </ScrollArea>\n </Box>\n\n {showToggle && !isExpanded && <Box className=\"code-scroll-shadow visible\" />}\n </Flex>\n </Card>\n </Box>\n );\n});\n\ninterface RuntimeCodeSectionProps {\n code: string;\n language: string;\n showCopy: boolean;\n showLanguage: boolean;\n showLineNumbers: boolean;\n collapsible: boolean;\n collapsedHeight: number;\n file?: string;\n shikiConfig?: ShikiConfig;\n}\n\nconst RuntimeCodeSection = memo(function RuntimeCodeSection({\n code,\n language,\n showCopy,\n showLanguage,\n showLineNumbers,\n collapsible,\n collapsedHeight,\n file,\n shikiConfig,\n}: RuntimeCodeSectionProps) {\n const [highlighted, setHighlighted] = useState<string | null>(null);\n\n // Memoize Shiki config to prevent unnecessary re-highlights\n const shikiOptions = useMemo(() => {\n const lightTheme = shikiConfig?.themes?.light || DEFAULT_LIGHT_THEME;\n const darkTheme = shikiConfig?.themes?.dark || DEFAULT_DARK_THEME;\n\n return {\n lang: language as BundledLanguage,\n themes: {\n light: lightTheme as BundledTheme,\n dark: darkTheme as BundledTheme,\n },\n defaultColor: false as const,\n langAlias: shikiConfig?.langAlias,\n transformers: shikiConfig?.transformers,\n meta: shikiConfig?.meta ? { __raw: shikiConfig.meta } : undefined,\n };\n }, [language, shikiConfig?.themes?.light, shikiConfig?.themes?.dark, shikiConfig?.langAlias, shikiConfig?.transformers, shikiConfig?.meta]);\n\n useEffect(() => {\n let cancelled = false;\n\n codeToHtml(code, shikiOptions)\n .then((html) => {\n if (!cancelled) {\n setHighlighted(html);\n }\n })\n .catch((error) => {\n if (!cancelled) {\n // Keep previous highlighted content on error (stale while revalidate)\n if (process.env.NODE_ENV === \"development\") {\n console.error(\"[CodeBlock] Shiki highlighting failed:\", error);\n }\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [code, shikiOptions]);\n\n // Only show loading skeleton on initial render (no highlighted content yet)\n // During updates, keep showing previous highlighted content (stale while revalidate)\n const isInitialLoading = highlighted === null;\n\n return (\n <CodeCard\n code={code}\n language={language}\n showCopy={showCopy}\n showLanguage={showLanguage}\n showLineNumbers={showLineNumbers}\n collapsible={collapsible}\n collapsedHeight={collapsedHeight}\n file={file}\n isLoading={isInitialLoading}\n >\n {highlighted ? <Box dangerouslySetInnerHTML={{ __html: highlighted }} /> : null}\n </CodeCard>\n );\n});\n\ninterface ChildrenCodeSectionProps {\n children: ReactNode;\n showCopy: boolean;\n showLanguage: boolean;\n showLineNumbers: boolean;\n collapsible: boolean;\n collapsedHeight: number;\n file?: string;\n}\n\nconst ChildrenCodeSection = memo(function ChildrenCodeSection({\n children,\n showCopy,\n showLanguage,\n showLineNumbers,\n collapsible,\n collapsedHeight,\n file,\n}: ChildrenCodeSectionProps) {\n const code = extractTextFromChildren(children);\n const language = extractLanguageFromChildren(children);\n\n return (\n <CodeCard\n code={code}\n language={language}\n showCopy={showCopy}\n showLanguage={showLanguage}\n showLineNumbers={showLineNumbers}\n collapsible={collapsible}\n collapsedHeight={collapsedHeight}\n file={file}\n >\n {children}\n </CodeCard>\n );\n});\n\nexport function CodeBlock({\n children,\n code,\n language,\n preview,\n showCopy = true,\n showLanguage = true,\n showLineNumbers = true,\n shikiConfig,\n background,\n backgroundProps,\n collapsible = true,\n collapsedHeight = DEFAULT_COLLAPSED_HEIGHT,\n file,\n}: CodeBlockProps) {\n const displayLanguage = language || extractLanguageFromChildren(children) || \"text\";\n\n return (\n <CodeBlockContext.Provider value={true}>\n <Box className=\"docs-code-block\" my=\"3\">\n <Flex direction=\"column\" gap=\"2\">\n {preview && (\n <PreviewSection background={background} backgroundProps={backgroundProps}>\n {preview}\n </PreviewSection>\n )}\n\n {code && (\n <RuntimeCodeSection\n code={code}\n language={displayLanguage}\n showCopy={showCopy}\n showLanguage={showLanguage}\n showLineNumbers={showLineNumbers}\n collapsible={collapsible}\n collapsedHeight={collapsedHeight}\n file={file}\n shikiConfig={shikiConfig}\n />\n )}\n\n {children && !code && (\n <ChildrenCodeSection\n showCopy={showCopy}\n showLanguage={showLanguage}\n showLineNumbers={showLineNumbers}\n collapsible={collapsible}\n collapsedHeight={collapsedHeight}\n file={file}\n >\n {children}\n </ChildrenCodeSection>\n )}\n </Flex>\n </Box>\n </CodeBlockContext.Provider>\n );\n}\n\nexport function useCodeBlockContext() {\n return useContext(CodeBlockContext);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["code_block_exports", "__export", "CodeBlock", "useCodeBlockContext", "__toCommonJS", "import_react", "import_kookie_ui", "import_core_free_icons", "import_shiki", "import_types", "import_use_code_card", "import_language_badge", "CodeBlockContext", "DEFAULT_COLLAPSED_HEIGHT", "DEFAULT_LIGHT_THEME", "DEFAULT_DARK_THEME", "PreviewSection", "children", "background", "backgroundProps", "dotSize", "color", "backgroundColor", "height", "width", "radius", "backgroundStyle", "React", "CodeSkeleton", "index", "CodeCard", "code", "language", "showCopy", "showLanguage", "showLineNumbers", "collapsible", "collapsedHeight", "file", "isLoading", "isExpanded", "shouldShowToggle", "copied", "contentRef", "contentMaxHeight", "handleToggle", "handleCopy", "showToggle", "chevronRotation", "contentClassName", "RuntimeCodeSection", "shikiConfig", "highlighted", "setHighlighted", "shikiOptions", "lightTheme", "darkTheme", "cancelled", "html", "error", "ChildrenCodeSection", "preview", "displayLanguage"]
7
7
  }
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { DocsPageMeta } from './types.js';
3
+ export interface DocsPageHeaderProps {
4
+ /** Page metadata */
5
+ meta: DocsPageMeta;
6
+ /** Optional actions to render on the right side */
7
+ actions?: React.ReactNode;
8
+ /** Show copy page button */
9
+ showCopyButton?: boolean;
10
+ }
11
+ export declare function DocsPageHeader({ meta, actions, showCopyButton }: DocsPageHeaderProps): React.JSX.Element;
12
+ //# sourceMappingURL=docs-page-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-page-header.d.ts","sourceRoot":"","sources":["../../../../src/components/docs/docs-page-header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAClC,oBAAoB;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,4BAA4B;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAqB,EAAE,EAAE,mBAAmB,qBA0E3F"}
@@ -0,0 +1,10 @@
1
+ "use strict";"use client";var d=Object.create;var a=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var C=(e,o)=>{for(var t in o)a(e,t,{get:o[t],enumerable:!0})},g=(e,o,t,s)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of f(o))!h.call(e,i)&&i!==t&&a(e,i,{get:()=>o[i],enumerable:!(s=y(o,i))||s.enumerable});return e};var w=(e,o,t)=>(t=e!=null?d(x(e)):{},g(o||!e||!e.__esModule?a(t,"default",{value:e,enumerable:!0}):t,e)),P=e=>g(a({},"__esModule",{value:!0}),e);var k={};C(k,{DocsPageHeader:()=>b});module.exports=P(k);var n=w(require("react")),r=require("@kushagradhawan/kookie-ui"),p=require("@hugeicons/react"),l=require("@hugeicons/core-free-icons");function b({meta:e,actions:o,showCopyButton:t=!0}){const s=(0,n.useCallback)(()=>{const i=document.querySelector("[data-content-area]");if(!i)return;let c=`# ${e.title}
2
+
3
+ `;e.description&&(c+=`${e.description}
4
+
5
+ `),e.source&&(c+=`[View source](${e.source})
6
+
7
+ `),c+=`---
8
+
9
+ `;const u=i.textContent||"";c+=u.trim(),navigator.clipboard.writeText(c)},[e.title,e.description,e.source]);return n.default.createElement(r.Flex,{direction:"column",gap:"4"},e.category&&n.default.createElement(r.Text,{size:"2",weight:"medium"},e.category),n.default.createElement(r.Flex,{align:"center",justify:"between",gap:"4"},n.default.createElement(r.Heading,{as:"h1",size:"9",weight:"medium"},e.title),n.default.createElement(r.Flex,{align:"center",gap:"4"},o,t&&n.default.createElement(r.Button,{size:"2",variant:"ghost",color:"gray",highContrast:!0,onClick:s,"aria-label":"Copy page content"},n.default.createElement(p.HugeiconsIcon,{icon:l.Copy01Icon}),"Copy page"))),e.description&&n.default.createElement(r.Text,{size:"3",color:"gray"},e.description),e.source&&n.default.createElement(r.Link,{size:"3",href:e.source,target:"_blank",color:"gray",highContrast:!0,rel:"noreferrer"},"View source \u2192"))}
10
+ //# sourceMappingURL=docs-page-header.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/docs/docs-page-header.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport React, { useCallback } from 'react';\nimport { Flex, Heading, Text, Link, Button } from '@kushagradhawan/kookie-ui';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { Copy01Icon } from '@hugeicons/core-free-icons';\nimport type { DocsPageMeta } from './types.js';\n\nexport interface DocsPageHeaderProps {\n /** Page metadata */\n meta: DocsPageMeta;\n /** Optional actions to render on the right side */\n actions?: React.ReactNode;\n /** Show copy page button */\n showCopyButton?: boolean;\n}\n\nexport function DocsPageHeader({ meta, actions, showCopyButton = true }: DocsPageHeaderProps) {\n const handleCopyPage = useCallback(() => {\n const contentArea = document.querySelector('[data-content-area]');\n if (!contentArea) return;\n\n let markdown = `# ${meta.title}\\n\\n`;\n\n if (meta.description) {\n markdown += `${meta.description}\\n\\n`;\n }\n\n if (meta.source) {\n markdown += `[View source](${meta.source})\\n\\n`;\n }\n\n markdown += `---\\n\\n`;\n\n const textContent = contentArea.textContent || '';\n markdown += textContent.trim();\n\n navigator.clipboard.writeText(markdown);\n }, [meta.title, meta.description, meta.source]);\n\n return (\n <Flex direction=\"column\" gap=\"4\">\n {meta.category && (\n <Text size=\"2\" weight=\"medium\">\n {meta.category}\n </Text>\n )}\n\n <Flex align=\"center\" justify=\"between\" gap=\"4\">\n <Heading as=\"h1\" size=\"9\" weight=\"medium\">\n {meta.title}\n </Heading>\n\n <Flex align=\"center\" gap=\"4\">\n {actions}\n {showCopyButton && (\n <Button\n size=\"2\"\n variant=\"ghost\"\n color=\"gray\"\n highContrast\n onClick={handleCopyPage}\n aria-label=\"Copy page content\"\n >\n <HugeiconsIcon icon={Copy01Icon} />\n Copy page\n </Button>\n )}\n </Flex>\n </Flex>\n\n {meta.description && (\n <Text size=\"3\" color=\"gray\">\n {meta.description}\n </Text>\n )}\n\n {meta.source && (\n <Link\n size=\"3\"\n href={meta.source}\n target=\"_blank\"\n color=\"gray\"\n highContrast\n rel=\"noreferrer\"\n >\n View source \u2192\n </Link>\n )}\n </Flex>\n );\n}\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAAmC,oBACnCC,EAAkD,qCAClDD,EAA8B,4BAC9BE,EAA2B,sCAYpB,SAASJ,EAAe,CAAE,KAAAK,EAAM,QAAAC,EAAS,eAAAC,EAAiB,EAAK,EAAwB,CAC5F,MAAMC,KAAiB,eAAY,IAAM,CACvC,MAAMC,EAAc,SAAS,cAAc,qBAAqB,EAChE,GAAI,CAACA,EAAa,OAElB,IAAIC,EAAW,KAAKL,EAAK,KAAK;AAAA;AAAA,EAE1BA,EAAK,cACPK,GAAY,GAAGL,EAAK,WAAW;AAAA;AAAA,GAG7BA,EAAK,SACPK,GAAY,iBAAiBL,EAAK,MAAM;AAAA;AAAA,GAG1CK,GAAY;AAAA;AAAA,EAEZ,MAAMC,EAAcF,EAAY,aAAe,GAC/CC,GAAYC,EAAY,KAAK,EAE7B,UAAU,UAAU,UAAUD,CAAQ,CACxC,EAAG,CAACL,EAAK,MAAOA,EAAK,YAAaA,EAAK,MAAM,CAAC,EAE9C,OACE,EAAAO,QAAA,cAAC,QAAK,UAAU,SAAS,IAAI,KAC1BP,EAAK,UACJ,EAAAO,QAAA,cAAC,QAAK,KAAK,IAAI,OAAO,UACnBP,EAAK,QACR,EAGF,EAAAO,QAAA,cAAC,QAAK,MAAM,SAAS,QAAQ,UAAU,IAAI,KACzC,EAAAA,QAAA,cAAC,WAAQ,GAAG,KAAK,KAAK,IAAI,OAAO,UAC9BP,EAAK,KACR,EAEA,EAAAO,QAAA,cAAC,QAAK,MAAM,SAAS,IAAI,KACtBN,EACAC,GACC,EAAAK,QAAA,cAAC,UACC,KAAK,IACL,QAAQ,QACR,MAAM,OACN,aAAY,GACZ,QAASJ,EACT,aAAW,qBAEX,EAAAI,QAAA,cAAC,iBAAc,KAAM,aAAY,EAAE,WAErC,CAEJ,CACF,EAECP,EAAK,aACJ,EAAAO,QAAA,cAAC,QAAK,KAAK,IAAI,MAAM,QAClBP,EAAK,WACR,EAGDA,EAAK,QACJ,EAAAO,QAAA,cAAC,QACC,KAAK,IACL,KAAMP,EAAK,OACX,OAAO,SACP,MAAM,OACN,aAAY,GACZ,IAAI,cACL,oBAED,CAEJ,CAEJ",
6
+ "names": ["docs_page_header_exports", "__export", "DocsPageHeader", "__toCommonJS", "import_react", "import_kookie_ui", "import_core_free_icons", "meta", "actions", "showCopyButton", "handleCopyPage", "contentArea", "markdown", "textContent", "React"]
7
+ }
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import type { DocsPageMeta } from './types.js';
3
+ export interface DocsPageProps {
4
+ children: React.ReactNode;
5
+ /** Page metadata for header */
6
+ meta?: DocsPageMeta;
7
+ /** Optional table of contents element */
8
+ tableOfContents?: React.ReactNode;
9
+ /** Content max width */
10
+ maxWidth?: string | number;
11
+ /** Page padding */
12
+ padding?: '3' | '4' | '5' | '6' | '7' | '8' | '9';
13
+ /** Optional header actions */
14
+ headerActions?: React.ReactNode;
15
+ /** Custom header element (overrides meta-based header) */
16
+ header?: React.ReactNode;
17
+ /** Show footer with copyright */
18
+ showFooter?: boolean;
19
+ /** Footer copyright holder */
20
+ footerCopyright?: {
21
+ name: string;
22
+ url?: string;
23
+ };
24
+ /** GitHub repo URL for footer */
25
+ githubUrl?: string;
26
+ }
27
+ export declare function DocsPage({ children, meta, tableOfContents, maxWidth, padding, headerActions, header, showFooter, footerCopyright, githubUrl, }: DocsPageProps): React.JSX.Element;
28
+ //# sourceMappingURL=docs-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-page.d.ts","sourceRoot":"","sources":["../../../../src/components/docs/docs-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,yCAAyC;IACzC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,mBAAmB;IACnB,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAClD,8BAA8B;IAC9B,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,0DAA0D;IAC1D,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8BAA8B;IAC9B,eAAe,CAAC,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,IAAI,EACJ,eAAe,EACf,QAAkB,EAClB,OAAa,EACb,aAAa,EACb,MAAM,EACN,UAAkB,EAClB,eAAe,EACf,SAAS,GACV,EAAE,aAAa,qBAyDf"}
@@ -0,0 +1,2 @@
1
+ "use strict";var h=Object.create;var l=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var P=(i,r)=>{for(var t in r)l(i,t,{get:r[t],enumerable:!0})},p=(i,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of w(r))!F.call(i,o)&&o!==t&&l(i,o,{get:()=>r[o],enumerable:!(s=f(r,o))||s.enumerable});return i};var k=(i,r,t)=>(t=i!=null?h(y(i)):{},p(r||!i||!i.__esModule?l(t,"default",{value:i,enumerable:!0}):t,i)),D=i=>p(l({},"__esModule",{value:!0}),i);var W={};P(W,{DocsPage:()=>b});module.exports=D(W);var n=k(require("react")),e=require("@kushagradhawan/kookie-ui"),c=require("./docs-page-header.js");function b({children:i,meta:r,tableOfContents:t,maxWidth:s="48rem",padding:o="6",headerActions:g,header:d,showFooter:x=!1,footerCopyright:a,githubUrl:m}){const u=new Date().getFullYear();return n.default.createElement(e.Flex,{my:"6",gap:{initial:"6",md:"6"},align:"start",direction:{initial:"column",lg:"row"}},n.default.createElement(e.Flex,{direction:"column",gap:"6",p:{initial:"2",sm:"4"},flexGrow:"1",style:{minWidth:0}},n.default.createElement(e.Container,{size:"2",style:{minWidth:0},"data-content-area":!0},n.default.createElement(e.Box,{p:"4",width:"100%"},n.default.createElement(e.Flex,{direction:"column",gap:"8",width:"100%"},d||r&&n.default.createElement(c.DocsPageHeader,{meta:r,actions:g}),(d||r)&&n.default.createElement(e.Separator,{size:"4"}),n.default.createElement(e.Flex,{direction:"column",gap:"0",width:"100%"},i)),x&&n.default.createElement(e.Flex,{align:"center",justify:"center",width:"100%",pt:"8"},n.default.createElement(e.Text,{size:"2",color:"gray",align:"center"},"\xA9 ",u," ",a?.url?n.default.createElement(e.Link,{href:a.url,target:"_blank",rel:"noreferrer"},a.name):a?.name||"Your Company",". Licensed under MIT.",m&&n.default.createElement(n.default.Fragment,null," ",n.default.createElement(e.Link,{href:m,target:"_blank",rel:"noreferrer"},"GitHub"),".")))))),t&&n.default.createElement(e.Box,{style:{width:"240px",minWidth:"160px"},position:"sticky",top:"200px",display:{initial:"none",lg:"block"}},t))}
2
+ //# sourceMappingURL=docs-page.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/docs/docs-page.tsx"],
4
+ "sourcesContent": ["import React from 'react';\nimport { Flex, Box, Separator, Container, Text, Link } from '@kushagradhawan/kookie-ui';\nimport { DocsPageHeader } from './docs-page-header.js';\nimport type { DocsPageMeta } from './types.js';\n\nexport interface DocsPageProps {\n children: React.ReactNode;\n /** Page metadata for header */\n meta?: DocsPageMeta;\n /** Optional table of contents element */\n tableOfContents?: React.ReactNode;\n /** Content max width */\n maxWidth?: string | number;\n /** Page padding */\n padding?: '3' | '4' | '5' | '6' | '7' | '8' | '9';\n /** Optional header actions */\n headerActions?: React.ReactNode;\n /** Custom header element (overrides meta-based header) */\n header?: React.ReactNode;\n /** Show footer with copyright */\n showFooter?: boolean;\n /** Footer copyright holder */\n footerCopyright?: {\n name: string;\n url?: string;\n };\n /** GitHub repo URL for footer */\n githubUrl?: string;\n}\n\nexport function DocsPage({\n children,\n meta,\n tableOfContents,\n maxWidth = '48rem',\n padding = '6',\n headerActions,\n header,\n showFooter = false,\n footerCopyright,\n githubUrl,\n}: DocsPageProps) {\n const currentYear = new Date().getFullYear();\n const showHeader = header || meta;\n\n return (\n <Flex my=\"6\" gap={{ initial: '6', md: '6' }} align=\"start\" direction={{ initial: 'column', lg: 'row' }}>\n {/* Main content area */}\n <Flex direction=\"column\" gap=\"6\" p={{ initial: '2', sm: '4' }} flexGrow=\"1\" style={{ minWidth: 0 }}>\n <Container size=\"2\" style={{ minWidth: 0 }} data-content-area>\n <Box p=\"4\" width=\"100%\">\n <Flex direction=\"column\" gap=\"8\" width=\"100%\">\n {/* Page Header */}\n {header ? header : meta && <DocsPageHeader meta={meta} actions={headerActions} />}\n\n {showHeader && <Separator size=\"4\" />}\n\n <Flex direction=\"column\" gap=\"0\" width=\"100%\">\n {children}\n </Flex>\n </Flex>\n\n {showFooter && (\n <Flex align=\"center\" justify=\"center\" width=\"100%\" pt=\"8\">\n <Text size=\"2\" color=\"gray\" align=\"center\">\n \u00A9 {currentYear}{' '}\n {footerCopyright?.url ? (\n <Link href={footerCopyright.url} target=\"_blank\" rel=\"noreferrer\">\n {footerCopyright.name}\n </Link>\n ) : (\n footerCopyright?.name || 'Your Company'\n )}\n . Licensed under MIT.\n {githubUrl && (\n <>\n {' '}\n <Link href={githubUrl} target=\"_blank\" rel=\"noreferrer\">\n GitHub\n </Link>\n .\n </>\n )}\n </Text>\n </Flex>\n )}\n </Box>\n </Container>\n </Flex>\n\n {/* Table of Contents */}\n {tableOfContents && (\n <Box style={{ width: '240px', minWidth: '160px' }} position=\"sticky\" top=\"200px\" display={{ initial: 'none', lg: 'block' }}>\n {tableOfContents}\n </Box>\n )}\n </Flex>\n );\n}\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAA4D,qCAC5DC,EAA+B,iCA4BxB,SAASJ,EAAS,CACvB,SAAAK,EACA,KAAAC,EACA,gBAAAC,EACA,SAAAC,EAAW,QACX,QAAAC,EAAU,IACV,cAAAC,EACA,OAAAC,EACA,WAAAC,EAAa,GACb,gBAAAC,EACA,UAAAC,CACF,EAAkB,CAChB,MAAMC,EAAc,IAAI,KAAK,EAAE,YAAY,EAG3C,OACE,EAAAC,QAAA,cAAC,QAAK,GAAG,IAAI,IAAK,CAAE,QAAS,IAAK,GAAI,GAAI,EAAG,MAAM,QAAQ,UAAW,CAAE,QAAS,SAAU,GAAI,KAAM,GAEnG,EAAAA,QAAA,cAAC,QAAK,UAAU,SAAS,IAAI,IAAI,EAAG,CAAE,QAAS,IAAK,GAAI,GAAI,EAAG,SAAS,IAAI,MAAO,CAAE,SAAU,CAAE,GAC/F,EAAAA,QAAA,cAAC,aAAU,KAAK,IAAI,MAAO,CAAE,SAAU,CAAE,EAAG,oBAAiB,IAC3D,EAAAA,QAAA,cAAC,OAAI,EAAE,IAAI,MAAM,QACf,EAAAA,QAAA,cAAC,QAAK,UAAU,SAAS,IAAI,IAAI,MAAM,QAEpCL,GAAkBL,GAAQ,EAAAU,QAAA,cAAC,kBAAe,KAAMV,EAAM,QAASI,EAAe,GAVxEC,GAAUL,IAYF,EAAAU,QAAA,cAAC,aAAU,KAAK,IAAI,EAEnC,EAAAA,QAAA,cAAC,QAAK,UAAU,SAAS,IAAI,IAAI,MAAM,QACpCX,CACH,CACF,EAECO,GACC,EAAAI,QAAA,cAAC,QAAK,MAAM,SAAS,QAAQ,SAAS,MAAM,OAAO,GAAG,KACpD,EAAAA,QAAA,cAAC,QAAK,KAAK,IAAI,MAAM,OAAO,MAAM,UAAS,QACtCD,EAAa,IACfF,GAAiB,IAChB,EAAAG,QAAA,cAAC,QAAK,KAAMH,EAAgB,IAAK,OAAO,SAAS,IAAI,cAClDA,EAAgB,IACnB,EAEAA,GAAiB,MAAQ,eACzB,wBAEDC,GACC,EAAAE,QAAA,gBAAAA,QAAA,cACG,IACD,EAAAA,QAAA,cAAC,QAAK,KAAMF,EAAW,OAAO,SAAS,IAAI,cAAa,QAExD,EAAO,GAET,CAEJ,CACF,CAEJ,CACF,CACF,EAGCP,GACC,EAAAS,QAAA,cAAC,OAAI,MAAO,CAAE,MAAO,QAAS,SAAU,OAAQ,EAAG,SAAS,SAAS,IAAI,QAAQ,QAAS,CAAE,QAAS,OAAQ,GAAI,OAAQ,GACtHT,CACH,CAEJ,CAEJ",
6
+ "names": ["docs_page_exports", "__export", "DocsPage", "__toCommonJS", "import_react", "import_kookie_ui", "import_docs_page_header", "children", "meta", "tableOfContents", "maxWidth", "padding", "headerActions", "header", "showFooter", "footerCopyright", "githubUrl", "currentYear", "React"]
7
+ }
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import type { DocsNavigationConfig, DocsLogoConfig } from './types.js';
3
+ export interface DocsShellProps {
4
+ children: React.ReactNode;
5
+ /** Navigation configuration */
6
+ navigation: DocsNavigationConfig;
7
+ /** Logo configuration */
8
+ logo?: DocsLogoConfig;
9
+ /** Optional header actions (dark mode toggle, github link, etc.) */
10
+ headerActions?: React.ReactNode;
11
+ /** Optional sidebar footer content */
12
+ sidebarFooter?: React.ReactNode;
13
+ /** Shell height */
14
+ height?: 'full' | 'auto' | string | number;
15
+ /** Sidebar thin size (when collapsed) */
16
+ sidebarThinSize?: number;
17
+ /** Whether sidebar is resizable */
18
+ sidebarResizable?: boolean;
19
+ /** Mobile trigger icon */
20
+ mobileTriggerIcon?: React.ReactNode;
21
+ /** Current pathname for active state detection */
22
+ pathname?: string;
23
+ /** Link component to use (defaults to 'a') */
24
+ linkComponent?: React.ComponentType<{
25
+ href: string;
26
+ children: React.ReactNode;
27
+ prefetch?: boolean;
28
+ 'aria-label'?: string;
29
+ }>;
30
+ }
31
+ export declare function DocsShell({ children, navigation, logo, headerActions, sidebarFooter, height, sidebarThinSize, sidebarResizable, mobileTriggerIcon, pathname, linkComponent, }: DocsShellProps): React.JSX.Element;
32
+ //# sourceMappingURL=docs-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-shell.d.ts","sourceRoot":"","sources":["../../../../src/components/docs/docs-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,+BAA+B;IAC/B,UAAU,EAAE,oBAAoB,CAAC;IACjC,yBAAyB;IACzB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,oEAAoE;IACpE,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,sCAAsC;IACtC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC3C,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0BAA0B;IAC1B,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7H;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,aAAa,EACb,aAAa,EACb,MAAM,EACN,eAAoB,EACpB,gBAAuB,EACvB,iBAAiB,EACjB,QAAa,EACb,aAAa,GACd,EAAE,cAAc,qBAsEhB"}
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var C=Object.create;var l=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var N=(e,o)=>{for(var n in o)l(e,n,{get:o[n],enumerable:!0})},s=(e,o,n,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of y(o))!w.call(e,r)&&r!==n&&l(e,r,{get:()=>o[r],enumerable:!(a=v(o,r))||a.enumerable});return e};var z=(e,o,n)=>(n=e!=null?C(D(e)):{},s(o||!e||!e.__esModule?l(n,"default",{value:e,enumerable:!0}):n,e)),k=e=>s(l({},"__esModule",{value:!0}),e);var T={};N(T,{DocsShell:()=>R});module.exports=k(T);var t=z(require("react")),i=require("@kushagradhawan/kookie-ui"),g=require("./docs-sidebar.js");function R({children:e,navigation:o,logo:n,headerActions:a,sidebarFooter:r,height:h,sidebarThinSize:d=80,sidebarResizable:p=!0,mobileTriggerIcon:c,pathname:f="",linkComponent:m}){const[u,S]=(0,t.useState)("expanded"),b=r||a?t.default.createElement(i.Flex,{gap:"2",align:"center"},a,r):void 0;return t.default.createElement(i.Shell.Root,{height:h},t.default.createElement(i.Shell.Sidebar,{toggleModes:"single",thinSize:d,resizable:p,defaultState:{initial:"collapsed",sm:"expanded"},onStateChange:x=>S(x==="thin"?"thin":"expanded"),presentation:{initial:"overlay",sm:"fixed"}},t.default.createElement(g.DocsSidebar,{navigation:o,logo:n,presentation:u,footer:b,pathname:f,linkComponent:m})),t.default.createElement(i.Shell.Content,null,t.default.createElement(i.Flex,{display:{initial:"flex",sm:"none"},position:"fixed",top:"4",left:"4",align:"center",justify:"center",width:"auto",height:"auto",style:{zIndex:999}},t.default.createElement(i.IconButton,{variant:"ghost",size:"3",highContrast:!0,color:"gray",asChild:!0},t.default.createElement(i.Shell.Trigger,{target:"sidebar"},c||t.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},t.default.createElement("path",{d:"M2 4h12M2 8h12M2 12h12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))))),e))}
2
+ //# sourceMappingURL=docs-shell.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/docs/docs-shell.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport React, { useState } from 'react';\nimport { Shell, Flex, IconButton } from '@kushagradhawan/kookie-ui';\nimport { DocsSidebar } from './docs-sidebar.js';\nimport type { DocsNavigationConfig, DocsLogoConfig } from './types.js';\n\nexport interface DocsShellProps {\n children: React.ReactNode;\n /** Navigation configuration */\n navigation: DocsNavigationConfig;\n /** Logo configuration */\n logo?: DocsLogoConfig;\n /** Optional header actions (dark mode toggle, github link, etc.) */\n headerActions?: React.ReactNode;\n /** Optional sidebar footer content */\n sidebarFooter?: React.ReactNode;\n /** Shell height */\n height?: 'full' | 'auto' | string | number;\n /** Sidebar thin size (when collapsed) */\n sidebarThinSize?: number;\n /** Whether sidebar is resizable */\n sidebarResizable?: boolean;\n /** Mobile trigger icon */\n mobileTriggerIcon?: React.ReactNode;\n /** Current pathname for active state detection */\n pathname?: string;\n /** Link component to use (defaults to 'a') */\n linkComponent?: React.ComponentType<{ href: string; children: React.ReactNode; prefetch?: boolean; 'aria-label'?: string }>;\n}\n\nexport function DocsShell({\n children,\n navigation,\n logo,\n headerActions,\n sidebarFooter,\n height,\n sidebarThinSize = 80,\n sidebarResizable = true,\n mobileTriggerIcon,\n pathname = '',\n linkComponent,\n}: DocsShellProps) {\n const [sidebarPresentation, setSidebarPresentation] = useState<'thin' | 'expanded'>('expanded');\n\n // Combine headerActions with sidebarFooter\n const footerContent = sidebarFooter || headerActions ? (\n <Flex gap=\"2\" align=\"center\">\n {headerActions}\n {sidebarFooter}\n </Flex>\n ) : undefined;\n\n return (\n <Shell.Root height={height}>\n <Shell.Sidebar\n toggleModes=\"single\"\n thinSize={sidebarThinSize}\n resizable={sidebarResizable}\n defaultState={{ initial: 'collapsed', sm: 'expanded' }}\n onStateChange={(state) => setSidebarPresentation(state === 'thin' ? 'thin' : 'expanded')}\n presentation={{ initial: 'overlay', sm: 'fixed' }}\n >\n <DocsSidebar\n navigation={navigation}\n logo={logo}\n presentation={sidebarPresentation}\n footer={footerContent}\n pathname={pathname}\n linkComponent={linkComponent}\n />\n </Shell.Sidebar>\n\n <Shell.Content>\n {/* Mobile trigger */}\n <Flex\n display={{ initial: 'flex', sm: 'none' }}\n position=\"fixed\"\n top=\"4\"\n left=\"4\"\n align=\"center\"\n justify=\"center\"\n width=\"auto\"\n height=\"auto\"\n style={{ zIndex: 999 }}\n >\n <IconButton variant=\"ghost\" size=\"3\" highContrast color=\"gray\" asChild>\n <Shell.Trigger target=\"sidebar\">\n {mobileTriggerIcon || (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2 4h12M2 8h12M2 12h12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n </Shell.Trigger>\n </IconButton>\n </Flex>\n\n {children}\n </Shell.Content>\n </Shell.Root>\n );\n}\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAAgC,oBAChCC,EAAwC,qCACxCC,EAA4B,6BA2BrB,SAASJ,EAAU,CACxB,SAAAK,EACA,WAAAC,EACA,KAAAC,EACA,cAAAC,EACA,cAAAC,EACA,OAAAC,EACA,gBAAAC,EAAkB,GAClB,iBAAAC,EAAmB,GACnB,kBAAAC,EACA,SAAAC,EAAW,GACX,cAAAC,CACF,EAAmB,CACjB,KAAM,CAACC,EAAqBC,CAAsB,KAAI,YAA8B,UAAU,EAGxFC,EAAgBT,GAAiBD,EACrC,EAAAW,QAAA,cAAC,QAAK,IAAI,IAAI,MAAM,UACjBX,EACAC,CACH,EACE,OAEJ,OACE,EAAAU,QAAA,cAAC,QAAM,KAAN,CAAW,OAAQT,GAClB,EAAAS,QAAA,cAAC,QAAM,QAAN,CACC,YAAY,SACZ,SAAUR,EACV,UAAWC,EACX,aAAc,CAAE,QAAS,YAAa,GAAI,UAAW,EACrD,cAAgBQ,GAAUH,EAAuBG,IAAU,OAAS,OAAS,UAAU,EACvF,aAAc,CAAE,QAAS,UAAW,GAAI,OAAQ,GAEhD,EAAAD,QAAA,cAAC,eACC,WAAYb,EACZ,KAAMC,EACN,aAAcS,EACd,OAAQE,EACR,SAAUJ,EACV,cAAeC,EACjB,CACF,EAEA,EAAAI,QAAA,cAAC,QAAM,QAAN,KAEC,EAAAA,QAAA,cAAC,QACC,QAAS,CAAE,QAAS,OAAQ,GAAI,MAAO,EACvC,SAAS,QACT,IAAI,IACJ,KAAK,IACL,MAAM,SACN,QAAQ,SACR,MAAM,OACN,OAAO,OACP,MAAO,CAAE,OAAQ,GAAI,GAErB,EAAAA,QAAA,cAAC,cAAW,QAAQ,QAAQ,KAAK,IAAI,aAAY,GAAC,MAAM,OAAO,QAAO,IACpE,EAAAA,QAAA,cAAC,QAAM,QAAN,CAAc,OAAO,WACnBN,GACC,EAAAM,QAAA,cAAC,OACC,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,MAAM,8BAEN,EAAAA,QAAA,cAAC,QACC,EAAE,yBACF,OAAO,eACP,YAAY,MACZ,cAAc,QAChB,CACF,CAEJ,CACF,CACF,EAECd,CACH,CACF,CAEJ",
6
+ "names": ["docs_shell_exports", "__export", "DocsShell", "__toCommonJS", "import_react", "import_kookie_ui", "import_docs_sidebar", "children", "navigation", "logo", "headerActions", "sidebarFooter", "height", "sidebarThinSize", "sidebarResizable", "mobileTriggerIcon", "pathname", "linkComponent", "sidebarPresentation", "setSidebarPresentation", "footerContent", "React", "state"]
7
+ }
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import type { DocsNavigationConfig, DocsLogoConfig } from './types.js';
3
+ type AccentColor = 'gray' | 'gold' | 'bronze' | 'brown' | 'yellow' | 'amber' | 'orange' | 'tomato' | 'red' | 'ruby' | 'crimson' | 'pink' | 'plum' | 'purple' | 'violet' | 'iris' | 'indigo' | 'blue' | 'cyan' | 'teal' | 'jade' | 'green' | 'grass' | 'lime' | 'mint' | 'sky';
4
+ export interface DocsSidebarProps {
5
+ /** Navigation configuration */
6
+ navigation: DocsNavigationConfig;
7
+ /** Logo configuration */
8
+ logo?: DocsLogoConfig;
9
+ /** Presentation mode from parent Shell */
10
+ presentation?: 'thin' | 'expanded';
11
+ /** Footer content */
12
+ footer?: React.ReactNode;
13
+ /** Sidebar size */
14
+ size?: '1' | '2';
15
+ /** Sidebar variant */
16
+ variant?: 'soft' | 'outline' | 'surface' | 'ghost';
17
+ /** Menu item variant */
18
+ menuVariant?: 'solid' | 'soft';
19
+ /** Accent color */
20
+ color?: AccentColor;
21
+ /** Current pathname for active state detection */
22
+ pathname?: string;
23
+ /** Link component to use (defaults to 'a') */
24
+ linkComponent?: React.ComponentType<{
25
+ href: string;
26
+ children: React.ReactNode;
27
+ prefetch?: boolean;
28
+ 'aria-label'?: string;
29
+ }>;
30
+ }
31
+ export declare function DocsSidebar({ navigation, logo, presentation, footer, size, variant, menuVariant, color, pathname, linkComponent: LinkComponent, }: DocsSidebarProps): React.JSX.Element;
32
+ export {};
33
+ //# sourceMappingURL=docs-sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-sidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/docs/docs-sidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAyB,MAAM,OAAO,CAAC;AAG9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKvE,KAAK,WAAW,GACZ,MAAM,GACN,MAAM,GACN,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,KAAK,GACL,MAAM,GACN,SAAS,GACT,MAAM,GACN,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,KAAK,CAAC;AAEV,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,UAAU,EAAE,oBAAoB,CAAC;IACjC,yBAAyB;IACzB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACnC,qBAAqB;IACrB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,mBAAmB;IACnB,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACjB,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,mBAAmB;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7H;AAED,wBAAgB,WAAW,CAAC,EAC1B,UAAU,EACV,IAAI,EACJ,YAAyB,EACzB,MAAM,EACN,IAAU,EACV,OAAgB,EAChB,WAAoB,EACpB,KAAc,EACd,QAAa,EACb,aAAa,EAAE,aAA0B,GAC1C,EAAE,gBAAgB,qBA2GlB"}
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var v=Object.create;var d=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var j=(o,r)=>{for(var a in r)d(o,a,{get:r[a],enumerable:!0})},c=(o,r,a,u)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of N(r))!I.call(o,s)&&s!==a&&d(o,s,{get:()=>r[s],enumerable:!(u=k(r,s))||u.enumerable});return o};var x=(o,r,a)=>(a=o!=null?v(A(o)):{},c(r||!o||!o.__esModule?d(a,"default",{value:o,enumerable:!0}):a,o)),D=o=>c(d({},"__esModule",{value:!0}),o);var G={};j(G,{DocsSidebar:()=>L});module.exports=D(G);var e=x(require("react")),n=require("@kushagradhawan/kookie-ui"),S=require("@hugeicons/react");function L({navigation:o,logo:r,presentation:a="expanded",footer:u,size:s="2",variant:m="soft",menuVariant:y="soft",color:h="gray",pathname:b="",linkComponent:p="a"}){const C=t=>Array.isArray(t)&&t.length>0&&Array.isArray(t[0]),f=t=>t?(0,e.isValidElement)(t)?t:C(t)?e.default.createElement(S.HugeiconsIcon,{icon:t,size:16}):typeof t=="function"?e.default.createElement(t,null):null:null;return e.default.createElement(n.Sidebar.Root,{size:s,variant:m,color:h,menuVariant:y,presentation:a},r&&e.default.createElement(n.Sidebar.Header,null,e.default.createElement(n.Flex,{justify:"between",align:"center",width:"100%"},e.default.createElement(p,{href:r.href||"/","aria-label":r.alt||"Home"},e.default.createElement(n.Flex,{align:"center",gap:"2"},e.default.createElement(n.Avatar,{fallback:r.alt?.[0]||"K",size:"2",src:r.src}))))),e.default.createElement(n.Sidebar.Content,null,e.default.createElement(n.Sidebar.Menu,null,o.groups.map(t=>e.default.createElement(n.Sidebar.Group,{key:t.label},e.default.createElement(n.Sidebar.GroupLabel,null,t.label),e.default.createElement(n.Sidebar.GroupContent,null,t.items.map(i=>{const g=i.items&&i.items.length>0,M=g?i.items.some(l=>b===l.href):!1;return g?e.default.createElement(n.Sidebar.MenuItem,{key:i.href},e.default.createElement(n.Sidebar.MenuSub,{defaultOpen:M},e.default.createElement(n.Sidebar.MenuSubTrigger,null,f(i.icon),i.title),e.default.createElement(n.Sidebar.MenuSubContent,null,i.items.map(l=>e.default.createElement(n.Sidebar.MenuButton,{asChild:!0,key:l.href,isActive:b===l.href},e.default.createElement(p,{href:l.href},f(l.icon),e.default.createElement("span",{className:"rt-SidebarMenuLabel"},l.title))))))):e.default.createElement(n.Sidebar.MenuItem,{key:i.href},e.default.createElement(n.Sidebar.MenuButton,{asChild:!0,isActive:b===i.href,badge:i.badge},e.default.createElement(p,{href:i.href},f(i.icon),e.default.createElement("span",{className:"rt-SidebarMenuLabel"},i.title))))})))))),u&&e.default.createElement(n.Sidebar.Footer,null,u))}
2
+ //# sourceMappingURL=docs-sidebar.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/docs/docs-sidebar.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport React, { isValidElement } from 'react';\nimport { Sidebar, Flex, Avatar } from '@kushagradhawan/kookie-ui';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport type { DocsNavigationConfig, DocsLogoConfig } from './types.js';\n\n// HugeIcons IconSvgObject type - readonly array of tuples with tag name and attributes\ntype IconSvgObject = readonly (readonly [string, { readonly [key: string]: string | number }])[];\n\ntype AccentColor =\n | 'gray'\n | 'gold'\n | 'bronze'\n | 'brown'\n | 'yellow'\n | 'amber'\n | 'orange'\n | 'tomato'\n | 'red'\n | 'ruby'\n | 'crimson'\n | 'pink'\n | 'plum'\n | 'purple'\n | 'violet'\n | 'iris'\n | 'indigo'\n | 'blue'\n | 'cyan'\n | 'teal'\n | 'jade'\n | 'green'\n | 'grass'\n | 'lime'\n | 'mint'\n | 'sky';\n\nexport interface DocsSidebarProps {\n /** Navigation configuration */\n navigation: DocsNavigationConfig;\n /** Logo configuration */\n logo?: DocsLogoConfig;\n /** Presentation mode from parent Shell */\n presentation?: 'thin' | 'expanded';\n /** Footer content */\n footer?: React.ReactNode;\n /** Sidebar size */\n size?: '1' | '2';\n /** Sidebar variant */\n variant?: 'soft' | 'outline' | 'surface' | 'ghost';\n /** Menu item variant */\n menuVariant?: 'solid' | 'soft';\n /** Accent color */\n color?: AccentColor;\n /** Current pathname for active state detection */\n pathname?: string;\n /** Link component to use (defaults to 'a') */\n linkComponent?: React.ComponentType<{ href: string; children: React.ReactNode; prefetch?: boolean; 'aria-label'?: string }>;\n}\n\nexport function DocsSidebar({\n navigation,\n logo,\n presentation = 'expanded',\n footer,\n size = '2',\n variant = 'soft',\n menuVariant = 'soft',\n color = 'gray',\n pathname = '',\n linkComponent: LinkComponent = 'a' as any,\n}: DocsSidebarProps) {\n\n // Helper to check if icon is HugeIcons IconSvgObject format\n const isIconSvgObject = (icon: unknown): icon is IconSvgObject => {\n return Array.isArray(icon) && icon.length > 0 && Array.isArray(icon[0]);\n };\n\n // Helper to render icon\n const renderIcon = (icon: React.ComponentType<{ className?: string }> | React.ReactNode | IconSvgObject) => {\n if (!icon) return null;\n if (isValidElement(icon)) return icon;\n // Handle HugeIcons IconSvgObject format\n if (isIconSvgObject(icon)) {\n return <HugeiconsIcon icon={icon} size={16} />;\n }\n if (typeof icon === 'function') {\n const IconComponent = icon as React.ComponentType<{ className?: string }>;\n return <IconComponent />;\n }\n return null;\n };\n\n return (\n <Sidebar.Root\n size={size}\n variant={variant}\n color={color}\n menuVariant={menuVariant}\n presentation={presentation}\n >\n {logo && (\n <Sidebar.Header>\n <Flex justify=\"between\" align=\"center\" width=\"100%\">\n <LinkComponent href={logo.href || '/'} aria-label={logo.alt || 'Home'}>\n <Flex align=\"center\" gap=\"2\">\n <Avatar fallback={logo.alt?.[0] || 'K'} size=\"2\" src={logo.src} />\n </Flex>\n </LinkComponent>\n </Flex>\n </Sidebar.Header>\n )}\n\n <Sidebar.Content>\n <Sidebar.Menu>\n {navigation.groups.map((group) => (\n <Sidebar.Group key={group.label}>\n <Sidebar.GroupLabel>{group.label}</Sidebar.GroupLabel>\n <Sidebar.GroupContent>\n {group.items.map((item) => {\n // Check if this item or any nested item is active\n const hasNestedItems = item.items && item.items.length > 0;\n const isNestedActive = hasNestedItems\n ? item.items!.some((subItem) => pathname === subItem.href)\n : false;\n\n if (hasNestedItems) {\n return (\n <Sidebar.MenuItem key={item.href}>\n <Sidebar.MenuSub defaultOpen={isNestedActive}>\n <Sidebar.MenuSubTrigger>\n {renderIcon(item.icon)}\n {item.title}\n </Sidebar.MenuSubTrigger>\n <Sidebar.MenuSubContent>\n {item.items!.map((subItem) => (\n <Sidebar.MenuButton\n asChild\n key={subItem.href}\n isActive={pathname === subItem.href}\n >\n <LinkComponent href={subItem.href}>\n {renderIcon(subItem.icon)}\n <span className=\"rt-SidebarMenuLabel\">{subItem.title}</span>\n </LinkComponent>\n </Sidebar.MenuButton>\n ))}\n </Sidebar.MenuSubContent>\n </Sidebar.MenuSub>\n </Sidebar.MenuItem>\n );\n }\n\n // Regular menu item\n return (\n <Sidebar.MenuItem key={item.href}>\n <Sidebar.MenuButton\n asChild\n isActive={pathname === item.href}\n badge={item.badge}\n >\n <LinkComponent href={item.href}>\n {renderIcon(item.icon)}\n <span className=\"rt-SidebarMenuLabel\">{item.title}</span>\n </LinkComponent>\n </Sidebar.MenuButton>\n </Sidebar.MenuItem>\n );\n })}\n </Sidebar.GroupContent>\n </Sidebar.Group>\n ))}\n </Sidebar.Menu>\n </Sidebar.Content>\n\n {footer && <Sidebar.Footer>{footer}</Sidebar.Footer>}\n </Sidebar.Root>\n );\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["docs_sidebar_exports", "__export", "DocsSidebar", "__toCommonJS", "import_react", "import_kookie_ui", "navigation", "logo", "presentation", "footer", "size", "variant", "menuVariant", "color", "pathname", "LinkComponent", "isIconSvgObject", "icon", "renderIcon", "React", "group", "item", "hasNestedItems", "isNestedActive", "subItem"]
7
+ }
@@ -0,0 +1,7 @@
1
+ export type { DocsNavigationItem, DocsNavigationGroup, DocsNavigationConfig, DocsPageMeta, DocsLogoConfig, TocItem, } from './types.js';
2
+ export { TableOfContents } from './table-of-contents.js';
3
+ export { DocsSidebar } from './docs-sidebar.js';
4
+ export { DocsPageHeader } from './docs-page-header.js';
5
+ export { DocsPage } from './docs-page.js';
6
+ export { DocsShell } from './docs-shell.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/docs/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";var a=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var x=(e,o)=>{for(var r in o)a(e,r,{get:o[r],enumerable:!0})},l=(e,o,r,s)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of m(o))!n.call(e,t)&&t!==r&&a(e,t,{get:()=>o[t],enumerable:!(s=D(o,t))||s.enumerable});return e};var v=e=>l(a({},"__esModule",{value:!0}),e);var C={};x(C,{DocsPage:()=>i.DocsPage,DocsPageHeader:()=>g.DocsPageHeader,DocsShell:()=>p.DocsShell,DocsSidebar:()=>f.DocsSidebar,TableOfContents:()=>c.TableOfContents});module.exports=v(C);var c=require("./table-of-contents.js"),f=require("./docs-sidebar.js"),g=require("./docs-page-header.js"),i=require("./docs-page.js"),p=require("./docs-shell.js");
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/docs/index.ts"],
4
+ "sourcesContent": ["// Types\nexport type {\n DocsNavigationItem,\n DocsNavigationGroup,\n DocsNavigationConfig,\n DocsPageMeta,\n DocsLogoConfig,\n TocItem,\n} from './types.js';\n\n// Components\nexport { TableOfContents } from './table-of-contents.js';\nexport { DocsSidebar } from './docs-sidebar.js';\nexport { DocsPageHeader } from './docs-page-header.js';\nexport { DocsPage } from './docs-page.js';\nexport { DocsShell } from './docs-shell.js';\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4KAAAE,EAAAF,GAWA,IAAAG,EAAgC,kCAChCC,EAA4B,6BAC5BC,EAA+B,iCAC/BC,EAAyB,0BACzBC,EAA0B",
6
+ "names": ["docs_exports", "__export", "__toCommonJS", "import_table_of_contents", "import_docs_sidebar", "import_docs_page_header", "import_docs_page", "import_docs_shell"]
7
+ }
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ export interface TableOfContentsProps {
3
+ className?: string;
4
+ /** Heading levels to include (default: [2]) */
5
+ levels?: number[];
6
+ /** Title shown above TOC (default: "On this page") */
7
+ title?: string;
8
+ /** Optional wrapper for the TOC content */
9
+ renderContainer?: (tocContent: React.ReactNode) => React.ReactNode | null;
10
+ }
11
+ export declare const TableOfContents: React.NamedExoticComponent<TableOfContentsProps>;
12
+ //# sourceMappingURL=table-of-contents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-of-contents.d.ts","sourceRoot":"","sources":["../../../../src/components/docs/table-of-contents.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAa9E,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;CAC3E;AAED,eAAO,MAAM,eAAe,kDAmI1B,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var O=Object.create;var g=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var k=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var R=(t,n)=>{for(var o in n)g(t,o,{get:n[o],enumerable:!0})},y=(t,n,o,f)=>{if(n&&typeof n=="object"||typeof n=="function")for(let l of A(n))!E.call(t,l)&&l!==o&&g(t,l,{get:()=>n[l],enumerable:!(f=S(n,l))||f.enumerable});return t};var F=(t,n,o)=>(o=t!=null?O(k(t)):{},y(n||!t||!t.__esModule?g(o,"default",{value:t,enumerable:!0}):o,t)),L=t=>y(g({},"__esModule",{value:!0}),t);var P={};R(P,{TableOfContents:()=>q});module.exports=L(P);var e=F(require("react")),a=require("@kushagradhawan/kookie-ui");const N=t=>t.toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").trim(),q=(0,e.memo)(function({className:n,levels:o=[2],title:f="On this page",renderContainer:l}){const[b,C]=(0,e.useState)([]),[I,T]=(0,e.useState)(""),i=(0,e.useRef)(null),m=(0,e.useRef)(null),d=(0,e.useRef)(null),x=(0,e.useCallback)(()=>{m.current=requestAnimationFrame(()=>{const c=document.querySelector("[data-content-area]");if(!c)return;const w=o.map(r=>`h${r}`).join(", "),p=Array.from(c.querySelectorAll(w)).map(r=>{const u=r.textContent||"";let s=r.id;return!s&&u&&(s=N(u),r.id=s),{id:s,text:u,level:parseInt(r.tagName.charAt(1))}}).filter(r=>r.id&&r.text);if(C(p),i.current&&(i.current.disconnect(),i.current=null),p.length>0){const r=new IntersectionObserver(u=>{u.forEach(s=>{s.isIntersecting&&T(s.target.id)})},{rootMargin:"-20% 0% -35% 0%"});p.forEach(({id:u})=>{const s=document.getElementById(u);s&&r.observe(s)}),i.current=r}})},[o]);(0,e.useEffect)(()=>(d.current=window.setTimeout(()=>{x()},100),()=>{d.current&&(clearTimeout(d.current),d.current=null),m.current&&(cancelAnimationFrame(m.current),m.current=null),i.current&&(i.current.disconnect(),i.current=null)}),[x]);const v=(0,e.useCallback)(c=>({display:"block",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",paddingLeft:c>2?`${(c-2)*12}px`:"0"}),[]);if(b.length===0)return null;const h=e.default.createElement(a.Flex,{direction:"column",gap:"3",className:n},e.default.createElement(a.Text,{size:"1",weight:"medium",color:"gray"},f),e.default.createElement(a.Flex,{direction:"column",gap:"2"},b.map(c=>e.default.createElement(a.Link,{key:c.id,color:"gray",highContrast:I===c.id,size:"1",href:`#${c.id}`,style:v(c.level)},c.text))));return l?l(h):h});
2
+ //# sourceMappingURL=table-of-contents.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/docs/table-of-contents.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport React, { useEffect, useState, useCallback, useRef, memo } from 'react';\nimport { Box, Text, Link, Flex } from '@kushagradhawan/kookie-ui';\nimport type { TocItem } from './types.js';\n\n// Generate slug from heading text\nconst generateSlug = (text: string): string => {\n return text\n .toLowerCase()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/\\s+/g, '-')\n .trim();\n};\n\nexport interface TableOfContentsProps {\n className?: string;\n /** Heading levels to include (default: [2]) */\n levels?: number[];\n /** Title shown above TOC (default: \"On this page\") */\n title?: string;\n /** Optional wrapper for the TOC content */\n renderContainer?: (tocContent: React.ReactNode) => React.ReactNode | null;\n}\n\nexport const TableOfContents = memo(function TableOfContents({\n className,\n levels = [2],\n title = 'On this page',\n renderContainer,\n}: TableOfContentsProps) {\n const [toc, setToc] = useState<TocItem[]>([]);\n const [activeId, setActiveId] = useState<string>('');\n const observerRef = useRef<IntersectionObserver | null>(null);\n const rafIdRef = useRef<number | null>(null);\n const timeoutIdRef = useRef<number | null>(null);\n\n const extractHeadings = useCallback(() => {\n rafIdRef.current = requestAnimationFrame(() => {\n const contentArea = document.querySelector('[data-content-area]');\n if (!contentArea) return;\n\n // Build selector from levels\n const selector = levels.map((l) => `h${l}`).join(', ');\n const headingElements = Array.from(contentArea.querySelectorAll(selector));\n\n const headings = headingElements\n .map((heading) => {\n const text = heading.textContent || '';\n let id = heading.id;\n\n if (!id && text) {\n id = generateSlug(text);\n heading.id = id;\n }\n\n return {\n id,\n text,\n level: parseInt(heading.tagName.charAt(1)),\n };\n })\n .filter((item) => item.id && item.text);\n\n setToc(headings);\n\n // Disconnect any previous observer\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n\n if (headings.length > 0) {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id);\n }\n });\n },\n { rootMargin: '-20% 0% -35% 0%' }\n );\n\n headings.forEach(({ id }) => {\n const element = document.getElementById(id);\n if (element) observer.observe(element);\n });\n\n observerRef.current = observer;\n }\n });\n }, [levels]);\n\n useEffect(() => {\n // Initial extraction with delay for DOM readiness\n timeoutIdRef.current = window.setTimeout(() => {\n extractHeadings();\n }, 100);\n\n return () => {\n if (timeoutIdRef.current) {\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = null;\n }\n if (rafIdRef.current) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n };\n }, [extractHeadings]);\n\n const getLinkStyle = useCallback(\n (level: number): React.CSSProperties => ({\n display: 'block',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n paddingLeft: level > 2 ? `${(level - 2) * 12}px` : '0',\n }),\n []\n );\n\n if (toc.length === 0) return null;\n\n const tocContent = (\n <Flex direction=\"column\" gap=\"3\" className={className}>\n <Text size=\"1\" weight=\"medium\" color=\"gray\">\n {title}\n </Text>\n <Flex direction=\"column\" gap=\"2\">\n {toc.map((item) => (\n <Link\n key={item.id}\n color=\"gray\"\n highContrast={activeId === item.id}\n size=\"1\"\n href={`#${item.id}`}\n style={getLinkStyle(item.level)}\n >\n {item.text}\n </Link>\n ))}\n </Flex>\n </Flex>\n );\n\n if (renderContainer) {\n return renderContainer(tocContent);\n }\n\n return tocContent;\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["table_of_contents_exports", "__export", "TableOfContents", "__toCommonJS", "import_react", "import_kookie_ui", "generateSlug", "text", "className", "levels", "title", "renderContainer", "toc", "setToc", "activeId", "setActiveId", "observerRef", "rafIdRef", "timeoutIdRef", "extractHeadings", "contentArea", "selector", "l", "headings", "heading", "id", "item", "observer", "entries", "entry", "element", "getLinkStyle", "level", "tocContent", "React"]
7
+ }
@@ -0,0 +1,38 @@
1
+ import type { ReactNode, ComponentType } from 'react';
2
+ type IconSvgObject = readonly (readonly [string, {
3
+ readonly [key: string]: string | number;
4
+ }])[];
5
+ export interface DocsNavigationItem {
6
+ href: string;
7
+ title: string;
8
+ icon?: ComponentType<{
9
+ className?: string;
10
+ }> | ReactNode | IconSvgObject;
11
+ badge?: string;
12
+ items?: DocsNavigationItem[];
13
+ }
14
+ export interface DocsNavigationGroup {
15
+ label: string;
16
+ items: DocsNavigationItem[];
17
+ }
18
+ export interface DocsNavigationConfig {
19
+ groups: DocsNavigationGroup[];
20
+ }
21
+ export interface DocsPageMeta {
22
+ title: string;
23
+ description?: string;
24
+ category?: string;
25
+ source?: string;
26
+ }
27
+ export interface DocsLogoConfig {
28
+ src: string;
29
+ alt?: string;
30
+ href?: string;
31
+ }
32
+ export interface TocItem {
33
+ id: string;
34
+ text: string;
35
+ level: number;
36
+ }
37
+ export {};
38
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/docs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtD,KAAK,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC,CAAC,EAAE,CAAC;AAGjG,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,SAAS,GAAG,aAAa,CAAC;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAGD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ "use strict";var o=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var c=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of a(t))!g.call(e,i)&&i!==n&&o(e,i,{get:()=>t[i],enumerable:!(r=s(t,i))||r.enumerable});return e};var p=e=>c(o({},"__esModule",{value:!0}),e);var m={};module.exports=p(m);
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/docs/types.ts"],
4
+ "sourcesContent": ["import type { ReactNode, ComponentType } from 'react';\n\n// HugeIcons IconSvgObject type - readonly array of tuples with tag name and attributes\ntype IconSvgObject = readonly (readonly [string, { readonly [key: string]: string | number }])[];\n\n// Navigation types\nexport interface DocsNavigationItem {\n href: string;\n title: string;\n // Support React components, ReactNode, or HugeIcons IconSvgObject format\n icon?: ComponentType<{ className?: string }> | ReactNode | IconSvgObject;\n badge?: string;\n items?: DocsNavigationItem[];\n}\n\nexport interface DocsNavigationGroup {\n label: string;\n items: DocsNavigationItem[];\n}\n\nexport interface DocsNavigationConfig {\n groups: DocsNavigationGroup[];\n}\n\n// Page metadata types\nexport interface DocsPageMeta {\n title: string;\n description?: string;\n category?: string;\n source?: string;\n}\n\n// Logo configuration\nexport interface DocsLogoConfig {\n src: string;\n alt?: string;\n href?: string;\n}\n\n// Table of contents types\nexport interface TocItem {\n id: string;\n text: string;\n level: number;\n}\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["types_exports", "__toCommonJS"]
7
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './code/index.js';
2
+ export * from './docs/index.js';
2
3
  export * from './hero/index.js';
3
4
  export * from './markdown/index.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
@@ -1,2 +1,2 @@
1
- "use strict";var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var t=(f,r,p,x)=>{if(r&&typeof r=="object"||typeof r=="function")for(let m of c(r))!d.call(f,m)&&m!==p&&a(f,m,{get:()=>r[m],enumerable:!(x=b(r,m))||x.enumerable});return f},e=(f,r,p)=>(t(f,r,"default"),p&&t(p,r,"default"));var g=f=>t(a({},"__esModule",{value:!0}),f);var o={};module.exports=g(o);e(o,require("./code/index.js"),module.exports);e(o,require("./hero/index.js"),module.exports);e(o,require("./markdown/index.js"),module.exports);
1
+ "use strict";var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var t=(f,e,p,x)=>{if(e&&typeof e=="object"||typeof e=="function")for(let m of c(e))!d.call(f,m)&&m!==p&&a(f,m,{get:()=>e[m],enumerable:!(x=b(e,m))||x.enumerable});return f},r=(f,e,p)=>(t(f,e,"default"),p&&t(p,e,"default"));var g=f=>t(a({},"__esModule",{value:!0}),f);var o={};module.exports=g(o);r(o,require("./code/index.js"),module.exports);r(o,require("./docs/index.js"),module.exports);r(o,require("./hero/index.js"),module.exports);r(o,require("./markdown/index.js"),module.exports);
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/index.ts"],
4
- "sourcesContent": ["export * from './code/index.js';\nexport * from './hero/index.js';\nexport * from './markdown/index.js';\n"],
5
- "mappings": "iaAAA,IAAAA,EAAA,kBAAAC,EAAAD,GAAAE,EAAAF,EAAc,2BAAd,gBACAE,EAAAF,EAAc,2BADd,gBAEAE,EAAAF,EAAc,+BAFd",
4
+ "sourcesContent": ["export * from './code/index.js';\nexport * from './docs/index.js';\nexport * from './hero/index.js';\nexport * from './markdown/index.js';\n"],
5
+ "mappings": "iaAAA,IAAAA,EAAA,kBAAAC,EAAAD,GAAAE,EAAAF,EAAc,2BAAd,gBACAE,EAAAF,EAAc,2BADd,gBAEAE,EAAAF,EAAc,2BAFd,gBAGAE,EAAAF,EAAc,+BAHd",
6
6
  "names": ["components_exports", "__toCommonJS", "__reExport"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create-markdown-components.d.ts","sourceRoot":"","sources":["../../../../src/components/markdown/create-markdown-components.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,KAAK,EAAE,wBAAwB,EAAyB,MAAM,SAAS,CAAC;AA8B/E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,wBAA6B,GAAG,UAAU,CAmJ3F"}
1
+ {"version":3,"file":"create-markdown-components.d.ts","sourceRoot":"","sources":["../../../../src/components/markdown/create-markdown-components.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,KAAK,EAAE,wBAAwB,EAAyB,MAAM,SAAS,CAAC;AA8B/E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,wBAA6B,GAAG,UAAU,CAiK3F"}