@san-siva/blogkit 1.1.29 → 1.1.31

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 (51) hide show
  1. package/dist/cjs/components/BlogSection.js.map +1 -1
  2. package/dist/cjs/components/CheckList.js +4 -1
  3. package/dist/cjs/components/CheckList.js.map +1 -1
  4. package/dist/cjs/dynamicComponents/BlogSectionDynamic.js +3 -2
  5. package/dist/cjs/dynamicComponents/BlogSectionDynamic.js.map +1 -1
  6. package/dist/cjs/dynamicComponents/CheckListDynamic.js +33 -0
  7. package/dist/cjs/dynamicComponents/CheckListDynamic.js.map +1 -0
  8. package/dist/cjs/dynamicComponents/MermaidDynamic.js +0 -25
  9. package/dist/cjs/dynamicComponents/MermaidDynamic.js.map +1 -1
  10. package/dist/cjs/index.css +1 -1
  11. package/dist/cjs/index.css.map +1 -1
  12. package/dist/cjs/staticComponents/BlogSectionStatic.js +3 -2
  13. package/dist/cjs/staticComponents/BlogSectionStatic.js.map +1 -1
  14. package/dist/cjs/staticComponents/CheckListStatic.js +1 -1
  15. package/dist/cjs/staticComponents/CheckListStatic.js.map +1 -1
  16. package/dist/esm/components/BlogSection.js.map +1 -1
  17. package/dist/esm/components/CheckList.js +4 -1
  18. package/dist/esm/components/CheckList.js.map +1 -1
  19. package/dist/esm/dynamicComponents/BlogSectionDynamic.js +3 -2
  20. package/dist/esm/dynamicComponents/BlogSectionDynamic.js.map +1 -1
  21. package/dist/esm/dynamicComponents/CheckListDynamic.js +29 -0
  22. package/dist/esm/dynamicComponents/CheckListDynamic.js.map +1 -0
  23. package/dist/esm/dynamicComponents/MermaidDynamic.js +0 -25
  24. package/dist/esm/dynamicComponents/MermaidDynamic.js.map +1 -1
  25. package/dist/esm/index.css +1 -1
  26. package/dist/esm/index.css.map +1 -1
  27. package/dist/esm/staticComponents/BlogSectionStatic.js +3 -2
  28. package/dist/esm/staticComponents/BlogSectionStatic.js.map +1 -1
  29. package/dist/esm/staticComponents/CheckListStatic.js +1 -1
  30. package/dist/esm/staticComponents/CheckListStatic.js.map +1 -1
  31. package/dist/types/components/BlogSection.d.ts +2 -2
  32. package/dist/types/components/BlogSection.d.ts.map +1 -1
  33. package/dist/types/components/CheckList.d.ts.map +1 -1
  34. package/dist/types/dynamicComponents/BlogSectionDynamic.d.ts +2 -2
  35. package/dist/types/dynamicComponents/BlogSectionDynamic.d.ts.map +1 -1
  36. package/dist/types/dynamicComponents/CheckListDynamic.d.ts +9 -0
  37. package/dist/types/dynamicComponents/CheckListDynamic.d.ts.map +1 -0
  38. package/dist/types/dynamicComponents/MermaidDynamic.d.ts.map +1 -1
  39. package/dist/types/staticComponents/BlogSectionStatic.d.ts +2 -2
  40. package/dist/types/staticComponents/BlogSectionStatic.d.ts.map +1 -1
  41. package/dist/types/staticComponents/CheckListStatic.d.ts +2 -2
  42. package/dist/types/staticComponents/CheckListStatic.d.ts.map +1 -1
  43. package/package.json +1 -1
  44. package/src/components/BlogSection.tsx +2 -2
  45. package/src/components/CheckList.tsx +12 -1
  46. package/src/dynamicComponents/BlogSectionDynamic.tsx +5 -4
  47. package/src/dynamicComponents/CheckListDynamic.tsx +66 -0
  48. package/src/dynamicComponents/MermaidDynamic.tsx +0 -29
  49. package/src/staticComponents/BlogSectionStatic.tsx +5 -4
  50. package/src/staticComponents/CheckListStatic.tsx +3 -3
  51. package/src/styles/BlogSection.module.scss +9 -5
@@ -1 +1 @@
1
- {"version":3,"file":"BlogSection.js","sources":["../../../src/components/BlogSection.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, lazy, Suspense } from 'react';\nimport type { ReactNode } from 'react';\nimport BlogSectionStatic from '../staticComponents/BlogSectionStatic';\nimport type { ForwardedReference } from '../dynamicComponents/BlogDynamic';\nexport type { ForwardedReference };\n\nconst BlogSectionDynamic = lazy(\n\t() => import('../dynamicComponents/BlogSectionDynamic')\n);\n\ninterface BlogSectionProperties {\n\ttitle?: string;\n\tcategory?: string;\n\tchildren?: ReactNode;\n}\n\nconst BlogSection = forwardRef<ForwardedReference, BlogSectionProperties>(\n\t(\n\t\t{\n\t\t\ttitle = '',\n\t\t\tcategory = '',\n\t\t\tchildren = null,\n\t\t},\n\t\tref\n\t) => {\n\t\treturn (\n\t\t\t<Suspense\n\t\t\t\tfallback={\n\t\t\t\t\t<BlogSectionStatic\n\t\t\t\t\t\ttitle={title}\n\t\t\t\t\t\tcategory={category}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</BlogSectionStatic>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<BlogSectionDynamic\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tcategory={category}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</BlogSectionDynamic>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nBlogSection.displayName = 'BlogSection';\n\nexport default BlogSection;\n"],"names":["lazy","forwardRef","_jsx","Suspense","BlogSectionStatic"],"mappings":";;;;;;;;AAQA,MAAM,kBAAkB,GAAGA,UAAI,CAC9B,MAAM,oDAAO,4CAAyC,KAAC,CACvD;AAQD,MAAM,WAAW,GAAGC,gBAAU,CAC7B,CACC,EACC,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,EAAE,EACb,QAAQ,GAAG,IAAI,GACf,EACD,GAAG,KACA;AACH,IAAA,QACCC,cAAA,CAACC,cAAQ,EAAA,EACR,QAAQ,EACPD,cAAA,CAACE,yBAAiB,EAAA,EACjB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,YAEjB,QAAQ,EAAA,CACU,EAAA,QAAA,EAGrBF,cAAA,CAAC,kBAAkB,EAAA,EAClB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAAA,QAAA,EAEjB,QAAQ,EAAA,CACW,EAAA,CACX;AAEb,CAAC;AAGF,WAAW,CAAC,WAAW,GAAG,aAAa;;;;"}
1
+ {"version":3,"file":"BlogSection.js","sources":["../../../src/components/BlogSection.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, lazy, Suspense } from 'react';\nimport type { HTMLAttributes, ReactElement, ReactNode } from 'react';\nimport BlogSectionStatic from '../staticComponents/BlogSectionStatic';\nimport type { ForwardedReference } from '../dynamicComponents/BlogDynamic';\nexport type { ForwardedReference };\n\nconst BlogSectionDynamic = lazy(\n\t() => import('../dynamicComponents/BlogSectionDynamic')\n);\n\ninterface BlogSectionProperties {\n\ttitle?: string | ReactElement<HTMLAttributes<HTMLParagraphElement>, 'p'>;\n\tcategory?: string;\n\tchildren?: ReactNode;\n}\n\nconst BlogSection = forwardRef<ForwardedReference, BlogSectionProperties>(\n\t(\n\t\t{\n\t\t\ttitle = '',\n\t\t\tcategory = '',\n\t\t\tchildren = null,\n\t\t},\n\t\tref\n\t) => {\n\t\treturn (\n\t\t\t<Suspense\n\t\t\t\tfallback={\n\t\t\t\t\t<BlogSectionStatic\n\t\t\t\t\t\ttitle={title}\n\t\t\t\t\t\tcategory={category}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</BlogSectionStatic>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<BlogSectionDynamic\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tcategory={category}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</BlogSectionDynamic>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nBlogSection.displayName = 'BlogSection';\n\nexport default BlogSection;\n"],"names":["lazy","forwardRef","_jsx","Suspense","BlogSectionStatic"],"mappings":";;;;;;;;AAQA,MAAM,kBAAkB,GAAGA,UAAI,CAC9B,MAAM,oDAAO,4CAAyC,KAAC,CACvD;AAQD,MAAM,WAAW,GAAGC,gBAAU,CAC7B,CACC,EACC,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,EAAE,EACb,QAAQ,GAAG,IAAI,GACf,EACD,GAAG,KACA;AACH,IAAA,QACCC,cAAA,CAACC,cAAQ,EAAA,EACR,QAAQ,EACPD,cAAA,CAACE,yBAAiB,EAAA,EACjB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,YAEjB,QAAQ,EAAA,CACU,EAAA,QAAA,EAGrBF,cAAA,CAAC,kBAAkB,EAAA,EAClB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAAA,QAAA,EAEjB,QAAQ,EAAA,CACW,EAAA,CACX;AAEb,CAAC;AAGF,WAAW,CAAC,WAAW,GAAG,aAAa;;;;"}
@@ -1,12 +1,15 @@
1
+ 'use client';
1
2
  'use strict';
2
3
 
3
4
  Object.defineProperty(exports, '__esModule', { value: true });
4
5
 
5
6
  var jsxRuntime = require('react/jsx-runtime');
7
+ var react = require('react');
6
8
  var CheckListStatic = require('../staticComponents/CheckListStatic.js');
7
9
 
10
+ const CheckListDynamic = react.lazy(() => Promise.resolve().then(function () { return require('../dynamicComponents/CheckListDynamic.js'); }));
8
11
  const CheckList = ({ items, hasMarginUp = false, hasMarginDown = false, }) => {
9
- return (jsxRuntime.jsx(CheckListStatic.default, { items: items, hasMarginUp: hasMarginUp, hasMarginDown: hasMarginDown }));
12
+ return (jsxRuntime.jsx(react.Suspense, { fallback: jsxRuntime.jsx(CheckListStatic.default, { items: items, hasMarginUp: hasMarginUp, hasMarginDown: hasMarginDown }), children: jsxRuntime.jsx(CheckListDynamic, { items: items, hasMarginUp: hasMarginUp, hasMarginDown: hasMarginDown }) }));
10
13
  };
11
14
 
12
15
  exports.default = CheckList;
@@ -1 +1 @@
1
- {"version":3,"file":"CheckList.js","sources":["../../../src/components/CheckList.tsx"],"sourcesContent":["import CheckListStatic, { type CheckListItem } from '../staticComponents/CheckListStatic';\n\ninterface CheckListProperties {\n\titems: CheckListItem[];\n\thasMarginUp?: boolean;\n\thasMarginDown?: boolean;\n}\n\nconst CheckList = ({\n\titems,\n\thasMarginUp = false,\n\thasMarginDown = false,\n}: CheckListProperties) => {\n\treturn (\n\t\t<CheckListStatic items={items} hasMarginUp={hasMarginUp} hasMarginDown={hasMarginDown} />\n\t);\n};\n\nexport { type CheckListItem };\nexport default CheckList;\n"],"names":["_jsx","CheckListStatic"],"mappings":";;;;;;;AAQA,MAAM,SAAS,GAAG,CAAC,EAClB,KAAK,EACL,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,KAAK,GACA,KAAI;AACzB,IAAA,QACCA,cAAA,CAACC,uBAAe,EAAA,EAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAA,CAAI;AAE3F;;;;"}
1
+ {"version":3,"file":"CheckList.js","sources":["../../../src/components/CheckList.tsx"],"sourcesContent":["'use client';\n\nimport { lazy, Suspense } from 'react';\nimport CheckListStatic, { type CheckListItem } from '../staticComponents/CheckListStatic';\n\nconst CheckListDynamic = lazy(() => import('../dynamicComponents/CheckListDynamic'));\n\ninterface CheckListProperties {\n\titems: CheckListItem[];\n\thasMarginUp?: boolean;\n\thasMarginDown?: boolean;\n}\n\nconst CheckList = ({\n\titems,\n\thasMarginUp = false,\n\thasMarginDown = false,\n}: CheckListProperties) => {\n\treturn (\n\t\t<Suspense\n\t\t\tfallback={\n\t\t\t\t<CheckListStatic items={items} hasMarginUp={hasMarginUp} hasMarginDown={hasMarginDown} />\n\t\t\t}\n\t\t>\n\t\t\t<CheckListDynamic items={items} hasMarginUp={hasMarginUp} hasMarginDown={hasMarginDown} />\n\t\t</Suspense>\n\t);\n};\n\nexport { type CheckListItem };\nexport default CheckList;\n"],"names":["lazy","_jsx","Suspense","CheckListStatic"],"mappings":";;;;;;;;AAKA,MAAM,gBAAgB,GAAGA,UAAI,CAAC,MAAM,oDAAO,0CAAuC,KAAC,CAAC;AAQpF,MAAM,SAAS,GAAG,CAAC,EAClB,KAAK,EACL,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,KAAK,GACA,KAAI;AACzB,IAAA,QACCC,cAAA,CAACC,cAAQ,EAAA,EACR,QAAQ,EACPD,cAAA,CAACE,uBAAe,EAAA,EAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAA,CAAI,YAG1FF,cAAA,CAAC,gBAAgB,IAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAA,CAAI,EAAA,CAChF;AAEb;;;;"}
@@ -9,7 +9,8 @@ var BlogSection_module = require('../styles/BlogSection.module.scss.js');
9
9
  var index = require('../utils/index.js');
10
10
 
11
11
  const BlogSection = react.forwardRef(({ title = '', category = '', children = null }, forwardedReference) => {
12
- const titleWithCategory = category ? `${category} - ${title}` : title;
12
+ const titleString = typeof title === 'string' ? title : '';
13
+ const titleWithCategory = category ? `${category} - ${titleString}` : titleString;
13
14
  const id = index.generateIdForBlogTitle(titleWithCategory);
14
15
  const parentReference = react.useRef(null);
15
16
  const childReferences = react.useRef([]);
@@ -45,7 +46,7 @@ const BlogSection = react.forwardRef(({ title = '', category = '', children = nu
45
46
  forwardedReference(imperativeHandleRef.current);
46
47
  }
47
48
  };
48
- return (jsxRuntime.jsxs("div", { className: BlogSection_module.default['blog-section'], "data-title": title, "data-id": id, ref: parentReference, children: [jsxRuntime.jsx("h3", { className: `${BlogSection_module.default['blog-section__title']} ${title ? '' : BlogSection_module.default['blog-section__title--empty']}`, children: title ? (jsxRuntime.jsx("a", { href: index.generateSectionHref(id), className: BlogSection_module.default['blog-section__title-link'], onClick: e => e.preventDefault(), children: title })) : (jsxRuntime.jsx("p", { children: "No title" })) }), react.Children.map(children, child => {
49
+ return (jsxRuntime.jsxs("div", { className: BlogSection_module.default['blog-section'], "data-title": titleString, "data-id": id, ref: parentReference, children: [jsxRuntime.jsx("h3", { className: `${BlogSection_module.default['blog-section__title']} ${title ? '' : BlogSection_module.default['blog-section__title--empty']}`, children: title ? (jsxRuntime.jsx("a", { href: index.generateSectionHref(id), className: BlogSection_module.default['blog-section__title-link'], onClick: e => e.preventDefault(), children: title })) : (jsxRuntime.jsx("p", { children: "No title" })) }), react.Children.map(children, child => {
49
50
  if (!react.isValidElement(child))
50
51
  return child;
51
52
  return react.cloneElement(child, {
@@ -1 +1 @@
1
- {"version":3,"file":"BlogSectionDynamic.js","sources":["../../../src/dynamicComponents/BlogSectionDynamic.tsx"],"sourcesContent":["'use client';\n\nimport {\n\tChildren,\n\tcloneElement,\n\tforwardRef,\n\tisValidElement,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n} from 'react';\n\nimport type { ReactNode, RefAttributes } from 'react';\n\nimport styles from '../styles/BlogSection.module.scss';\n\nimport type { ForwardedReference } from './BlogDynamic';\nimport { generateIdForBlogTitle, generateSectionHref } from '../utils';\n\ninterface BlogProperties {\n\ttitle?: string;\n\tcategory?: string;\n\tchildren?: ReactNode;\n}\n\nconst BlogSection = forwardRef<ForwardedReference, BlogProperties>(\n\t(\n\t\t{ title = '', category = '', children = null }: BlogProperties,\n\t\tforwardedReference\n\t) => {\n\t\tconst titleWithCategory = category ? `${category} - ${title}` : title;\n\t\tconst id = generateIdForBlogTitle(titleWithCategory);\n\n\t\tconst parentReference = useRef<ForwardedReference['parentRef']>(null);\n\t\tconst childReferences = useRef<ForwardedReference['childRefs']>([]);\n\t\tconst imperativeHandleRef = useRef<ForwardedReference | null>(null);\n\n\t\tuseImperativeHandle(forwardedReference, () => {\n\t\t\tconst handle = {\n\t\t\t\tparentRef: parentReference.current!,\n\t\t\t\tchildRefs: childReferences.current!,\n\t\t\t};\n\t\t\timperativeHandleRef.current = handle;\n\t\t\treturn handle;\n\t\t});\n\n\t\t// Re-register when title or category changes so the TOC reflects the updated heading\n\t\tuseEffect(() => {\n\t\t\tif (\n\t\t\t\ttypeof forwardedReference === 'function' &&\n\t\t\t\timperativeHandleRef.current\n\t\t\t) {\n\t\t\t\tforwardedReference(imperativeHandleRef.current);\n\t\t\t}\n\t\t}, [title, category]); // eslint-disable-line react-hooks/exhaustive-deps\n\n\t\tconst handleChildReferences = (element: ForwardedReference | null) => {\n\t\t\tif (!element) return;\n\t\t\tconst { parentRef: subParentReference } = element;\n\t\t\tif (!subParentReference) return;\n\n\t\t\t// Avoid registering the same child section twice\n\t\t\tconst alreadyRegistered = childReferences.current.some(\n\t\t\t\tref => ref.parentRef === subParentReference\n\t\t\t);\n\t\t\tif (!alreadyRegistered) {\n\t\t\t\tchildReferences.current.push(element);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttypeof forwardedReference === 'function' &&\n\t\t\t\timperativeHandleRef.current\n\t\t\t) {\n\t\t\t\tforwardedReference(imperativeHandleRef.current);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={styles['blog-section']}\n\t\t\t\tdata-title={title}\n\t\t\t\tdata-id={id}\n\t\t\t\tref={parentReference}\n\t\t\t>\n\t\t\t\t<h3\n\t\t\t\t\tclassName={`${styles['blog-section__title']} ${title ? '' : styles['blog-section__title--empty']}`}\n\t\t\t\t>\n\t\t\t\t\t{title ? (\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref={generateSectionHref(id)}\n\t\t\t\t\t\t\tclassName={styles['blog-section__title-link']}\n\t\t\t\t\t\t\tonClick={e => e.preventDefault()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<p>No title</p>\n\t\t\t\t\t)}\n\t\t\t\t</h3>\n\t\t\t\t{Children.map(children, child => {\n\t\t\t\t\tif (!isValidElement(child)) return child;\n\t\t\t\t\treturn cloneElement(child, {\n\t\t\t\t\t\tref: handleChildReferences,\n\t\t\t\t\t} as RefAttributes<ForwardedReference>);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nBlogSection.displayName = 'BlogSection';\n\nexport default BlogSection;\n"],"names":["forwardRef","generateIdForBlogTitle","useRef","useImperativeHandle","useEffect","_jsxs","styles","_jsx","generateSectionHref","Children","isValidElement","cloneElement"],"mappings":"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"}
1
+ {"version":3,"file":"BlogSectionDynamic.js","sources":["../../../src/dynamicComponents/BlogSectionDynamic.tsx"],"sourcesContent":["'use client';\n\nimport {\n\tChildren,\n\tcloneElement,\n\tforwardRef,\n\tisValidElement,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n} from 'react';\n\nimport type { HTMLAttributes, ReactElement, ReactNode, RefAttributes } from 'react';\n\nimport styles from '../styles/BlogSection.module.scss';\n\nimport type { ForwardedReference } from './BlogDynamic';\nimport { generateIdForBlogTitle, generateSectionHref } from '../utils';\n\ninterface BlogProperties {\n\ttitle?: string | ReactElement<HTMLAttributes<HTMLParagraphElement>, 'p'>;\n\tcategory?: string;\n\tchildren?: ReactNode;\n}\n\nconst BlogSection = forwardRef<ForwardedReference, BlogProperties>(\n\t(\n\t\t{ title = '', category = '', children = null }: BlogProperties,\n\t\tforwardedReference\n\t) => {\n\t\tconst titleString = typeof title === 'string' ? title : '';\n\t\tconst titleWithCategory = category ? `${category} - ${titleString}` : titleString;\n\t\tconst id = generateIdForBlogTitle(titleWithCategory);\n\n\t\tconst parentReference = useRef<ForwardedReference['parentRef']>(null);\n\t\tconst childReferences = useRef<ForwardedReference['childRefs']>([]);\n\t\tconst imperativeHandleRef = useRef<ForwardedReference | null>(null);\n\n\t\tuseImperativeHandle(forwardedReference, () => {\n\t\t\tconst handle = {\n\t\t\t\tparentRef: parentReference.current!,\n\t\t\t\tchildRefs: childReferences.current!,\n\t\t\t};\n\t\t\timperativeHandleRef.current = handle;\n\t\t\treturn handle;\n\t\t});\n\n\t\t// Re-register when title or category changes so the TOC reflects the updated heading\n\t\tuseEffect(() => {\n\t\t\tif (\n\t\t\t\ttypeof forwardedReference === 'function' &&\n\t\t\t\timperativeHandleRef.current\n\t\t\t) {\n\t\t\t\tforwardedReference(imperativeHandleRef.current);\n\t\t\t}\n\t\t}, [title, category]); // eslint-disable-line react-hooks/exhaustive-deps\n\n\t\tconst handleChildReferences = (element: ForwardedReference | null) => {\n\t\t\tif (!element) return;\n\t\t\tconst { parentRef: subParentReference } = element;\n\t\t\tif (!subParentReference) return;\n\n\t\t\t// Avoid registering the same child section twice\n\t\t\tconst alreadyRegistered = childReferences.current.some(\n\t\t\t\tref => ref.parentRef === subParentReference\n\t\t\t);\n\t\t\tif (!alreadyRegistered) {\n\t\t\t\tchildReferences.current.push(element);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttypeof forwardedReference === 'function' &&\n\t\t\t\timperativeHandleRef.current\n\t\t\t) {\n\t\t\t\tforwardedReference(imperativeHandleRef.current);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={styles['blog-section']}\n\t\t\t\tdata-title={titleString}\n\t\t\t\tdata-id={id}\n\t\t\t\tref={parentReference}\n\t\t\t>\n\t\t\t\t<h3\n\t\t\t\t\tclassName={`${styles['blog-section__title']} ${title ? '' : styles['blog-section__title--empty']}`}\n\t\t\t\t>\n\t\t\t\t\t{title ? (\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref={generateSectionHref(id)}\n\t\t\t\t\t\t\tclassName={styles['blog-section__title-link']}\n\t\t\t\t\t\t\tonClick={e => e.preventDefault()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<p>No title</p>\n\t\t\t\t\t)}\n\t\t\t\t</h3>\n\t\t\t\t{Children.map(children, child => {\n\t\t\t\t\tif (!isValidElement(child)) return child;\n\t\t\t\t\treturn cloneElement(child, {\n\t\t\t\t\t\tref: handleChildReferences,\n\t\t\t\t\t} as RefAttributes<ForwardedReference>);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nBlogSection.displayName = 'BlogSection';\n\nexport default BlogSection;\n"],"names":["forwardRef","generateIdForBlogTitle","useRef","useImperativeHandle","useEffect","_jsxs","styles","_jsx","generateSectionHref","Children","isValidElement","cloneElement"],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+ var react = require('react');
8
+ var CheckList_module = require('../styles/CheckList.module.scss.js');
9
+
10
+ const CHECKBOX_SIZE = 12;
11
+ const P_TAG_FONT_SIZE = 16;
12
+ const CheckListDynamic = ({ items, hasMarginUp = false, hasMarginDown = false, }) => {
13
+ const [checkboxMarginTop, setCheckboxMarginTop] = react.useState(0);
14
+ const measureRef = react.useRef(null);
15
+ react.useEffect(() => {
16
+ if (!measureRef.current)
17
+ return;
18
+ const p = measureRef.current.querySelector('p');
19
+ if (!p)
20
+ return;
21
+ const rawLineHeight = getComputedStyle(p).lineHeight;
22
+ const lineHeight = rawLineHeight === 'normal'
23
+ ? P_TAG_FONT_SIZE * 1.2
24
+ : parseFloat(rawLineHeight);
25
+ if (!isNaN(lineHeight)) {
26
+ setCheckboxMarginTop(Math.max(0, (lineHeight - CHECKBOX_SIZE) / 2));
27
+ }
28
+ }, []);
29
+ return (jsxRuntime.jsx("div", { className: `${CheckList_module.default['check-list']} ${hasMarginUp ? CheckList_module.default['margin-top--1'] : ''} ${hasMarginDown ? CheckList_module.default['margin-bottom--2'] : ''}`, children: items.map((item, index) => (jsxRuntime.jsxs("div", { className: CheckList_module.default['check-list__item'], style: { alignItems: 'flex-start' }, "data-id": item.id, ref: index === 0 ? measureRef : undefined, children: [jsxRuntime.jsx("div", { className: `${CheckList_module.default['check-list__item__input']} ${item.isChecked ? CheckList_module.default['check-list__item__input--checked'] : ''}`, style: { marginTop: `${checkboxMarginTop}px` } }), item.children] }, item.id))) }));
30
+ };
31
+
32
+ exports.default = CheckListDynamic;
33
+ //# sourceMappingURL=CheckListDynamic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckListDynamic.js","sources":["../../../src/dynamicComponents/CheckListDynamic.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport type { CheckListItem } from '../staticComponents/CheckListStatic';\nimport styles from '../styles/CheckList.module.scss';\n\ninterface Properties {\n\titems: CheckListItem[];\n\thasMarginUp?: boolean;\n\thasMarginDown?: boolean;\n}\n\nconst CHECKBOX_SIZE = 12;\nconst P_TAG_FONT_SIZE = 16;\n\nconst CheckListDynamic = ({\n\titems,\n\thasMarginUp = false,\n\thasMarginDown = false,\n}: Properties) => {\n\tconst [checkboxMarginTop, setCheckboxMarginTop] = useState(0);\n\tconst measureRef = useRef<HTMLDivElement>(null);\n\n\tuseEffect(() => {\n\t\tif (!measureRef.current) return;\n\t\tconst p = measureRef.current.querySelector('p');\n\t\tif (!p) return;\n\t\tconst rawLineHeight = getComputedStyle(p).lineHeight;\n\t\tconst lineHeight =\n\t\t\trawLineHeight === 'normal'\n\t\t\t\t? P_TAG_FONT_SIZE * 1.2\n\t\t\t\t: parseFloat(rawLineHeight);\n\t\tif (!isNaN(lineHeight)) {\n\t\t\tsetCheckboxMarginTop(Math.max(0, (lineHeight - CHECKBOX_SIZE) / 2));\n\t\t}\n\t}, []);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`${styles['check-list']} ${hasMarginUp ? styles['margin-top--1'] : ''} ${\n\t\t\t\thasMarginDown ? styles['margin-bottom--2'] : ''\n\t\t\t}`}\n\t\t>\n\t\t\t{items.map((item, index) => (\n\t\t\t\t<div\n\t\t\t\t\tkey={item.id}\n\t\t\t\t\tclassName={styles['check-list__item']}\n\t\t\t\t\tstyle={{ alignItems: 'flex-start' }}\n\t\t\t\t\tdata-id={item.id}\n\t\t\t\t\tref={index === 0 ? measureRef : undefined}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`${styles['check-list__item__input']} ${\n\t\t\t\t\t\t\titem.isChecked ? styles['check-list__item__input--checked'] : ''\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={{ marginTop: `${checkboxMarginTop}px` }}\n\t\t\t\t\t/>\n\t\t\t\t\t{item.children}\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</div>\n\t);\n};\n\nexport default CheckListDynamic;\n"],"names":["useState","useRef","useEffect","_jsx","styles","_jsxs"],"mappings":";;;;;;;;AAaA,MAAM,aAAa,GAAG,EAAE;AACxB,MAAM,eAAe,GAAG,EAAE;AAE1B,MAAM,gBAAgB,GAAG,CAAC,EACzB,KAAK,EACL,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,KAAK,GACT,KAAI;IAChB,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAGA,cAAQ,CAAC,CAAC,CAAC;AAC7D,IAAA,MAAM,UAAU,GAAGC,YAAM,CAAiB,IAAI,CAAC;IAE/CC,eAAS,CAAC,MAAK;QACd,IAAI,CAAC,UAAU,CAAC,OAAO;YAAE;QACzB,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;AAC/C,QAAA,IAAI,CAAC,CAAC;YAAE;QACR,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU;AACpD,QAAA,MAAM,UAAU,GACf,aAAa,KAAK;cACf,eAAe,GAAG;AACpB,cAAE,UAAU,CAAC,aAAa,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;AACvB,YAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC;QACpE;IACD,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,QACCC,cAAA,CAAA,KAAA,EAAA,EACC,SAAS,EAAE,CAAA,EAAGC,wBAAM,CAAC,YAAY,CAAC,CAAA,CAAA,EAAI,WAAW,GAAGA,wBAAM,CAAC,eAAe,CAAC,GAAG,EAAE,CAAA,CAAA,EAC/E,aAAa,GAAGA,wBAAM,CAAC,kBAAkB,CAAC,GAAG,EAC9C,CAAA,CAAE,EAAA,QAAA,EAED,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MACtBC,eAAA,CAAA,KAAA,EAAA,EAEC,SAAS,EAAED,wBAAM,CAAC,kBAAkB,CAAC,EACrC,KAAK,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAA,SAAA,EAC1B,IAAI,CAAC,EAAE,EAChB,GAAG,EAAE,KAAK,KAAK,CAAC,GAAG,UAAU,GAAG,SAAS,EAAA,QAAA,EAAA,CAEzCD,cAAA,CAAA,KAAA,EAAA,EACC,SAAS,EAAE,CAAA,EAAGC,wBAAM,CAAC,yBAAyB,CAAC,CAAA,CAAA,EAC9C,IAAI,CAAC,SAAS,GAAGA,wBAAM,CAAC,kCAAkC,CAAC,GAAG,EAC/D,CAAA,CAAE,EACF,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAA,EAAA,CAAI,EAAE,EAAA,CAC7C,EACD,IAAI,CAAC,QAAQ,CAAA,EAAA,EAZT,IAAI,CAAC,EAAE,CAaP,CACN,CAAC,EAAA,CACG;AAER;;;;"}
@@ -75,31 +75,6 @@ const Mermaid = ({ code = '', id = '', hasMarginUp = false, hasMarginDown = fals
75
75
  const timer = setTimeout(initializeMermaid, 100);
76
76
  return () => clearTimeout(timer);
77
77
  }, [code, initializeMermaid, applyTransform]);
78
- const handleWheel = react.useCallback((e) => {
79
- e.preventDefault();
80
- const factor = e.deltaY < 0 ? 1 + ZOOM_STEP : 1 - ZOOM_STEP;
81
- applyTransform(prev => {
82
- const newScale = Math.min(Math.max(prev.scale * factor, MIN_SCALE), MAX_SCALE);
83
- if (!viewportRef.current)
84
- return { ...prev, scale: newScale };
85
- const rect = viewportRef.current.getBoundingClientRect();
86
- const cursorX = e.clientX - rect.left;
87
- const cursorY = e.clientY - rect.top;
88
- const ratio = newScale / prev.scale;
89
- return {
90
- scale: newScale,
91
- x: cursorX - (cursorX - prev.x) * ratio,
92
- y: cursorY - (cursorY - prev.y) * ratio,
93
- };
94
- });
95
- }, [applyTransform]);
96
- react.useEffect(() => {
97
- const viewport = viewportRef.current;
98
- if (!viewport || !enabled)
99
- return;
100
- viewport.addEventListener('wheel', handleWheel, { passive: false });
101
- return () => viewport.removeEventListener('wheel', handleWheel);
102
- }, [handleWheel, enabled]);
103
78
  const handleMouseDown = react.useCallback((e) => {
104
79
  e.preventDefault();
105
80
  isDraggingRef.current = true;
@@ -1 +1 @@
1
- {"version":3,"file":"MermaidDynamic.js","sources":["../../../src/dynamicComponents/MermaidDynamic.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport mermaid from 'mermaid';\n\nimport CalloutStatic from '../staticComponents/CalloutStatic';\nimport styles from '../styles/Mermaid.module.scss';\n\ninterface MermaidProperties {\n\tcode: string;\n\tid: string;\n\thasMarginUp?: boolean;\n\thasMarginDown?: boolean;\n}\n\nmermaid.initialize({\n\tstartOnLoad: false,\n\ttheme: 'default',\n\ttimeline: {\n\t\tuseMaxWidth: true,\n\t\tdiagramMarginX: 0,\n\t},\n\tflowchart: {\n\t\tuseMaxWidth: true,\n\t\tdiagramPadding: 0,\n\t},\n\tsequence: {\n\t\tuseMaxWidth: true,\n\t\tdiagramMarginX: 0,\n\t},\n});\n\nconst MIN_SCALE = 0.5;\nconst MAX_SCALE = 4;\nconst ZOOM_STEP = 0.15;\n\nconst Mermaid = ({\n\tcode = '',\n\tid = '',\n\thasMarginUp = false,\n\thasMarginDown = false,\n}: MermaidProperties) => {\n\tconst [enabled, setEnabled] = useState(false);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [transform, setTransform] = useState({ scale: 1, x: 0, y: 0 });\n\tconst [isDragging, setIsDragging] = useState(false);\n\n\tconst mermaidReference = useRef<HTMLDivElement>(null);\n\tconst viewportRef = useRef<HTMLDivElement>(null);\n\tconst renderCount = useRef(0);\n\tconst transformRef = useRef({ scale: 1, x: 0, y: 0 });\n\tconst isDraggingRef = useRef(false);\n\tconst dragStart = useRef({\n\t\tmouseX: 0,\n\t\tmouseY: 0,\n\t\ttransformX: 0,\n\t\ttransformY: 0,\n\t});\n\n\tconst applyTransform = useCallback(\n\t\t(\n\t\t\tupdater: (\n\t\t\t\tprev: typeof transformRef.current\n\t\t\t) => typeof transformRef.current\n\t\t) => {\n\t\t\tconst next = updater(transformRef.current);\n\t\t\ttransformRef.current = next;\n\t\t\tsetTransform(next);\n\t\t},\n\t\t[]\n\t);\n\n\tconst initializeMermaid = useCallback(async () => {\n\t\tif (!mermaidReference.current || !code) return;\n\t\tconst renderId = `mermaid-diagram-${id}-${++renderCount.current}`;\n\t\tdocument.getElementById(renderId)?.remove();\n\t\ttry {\n\t\t\tconst { svg, bindFunctions } = await mermaid.render(renderId, code);\n\t\t\tif (!mermaidReference.current || !svg) return;\n\t\t\tmermaidReference.current.innerHTML = svg;\n\t\t\tbindFunctions?.(mermaidReference.current);\n\t\t\tsetEnabled(true);\n\t\t} catch (err) {\n\t\t\tconst message =\n\t\t\t\terr instanceof Error ? err.message : 'Failed to render diagram';\n\t\t\tsetError(message);\n\t\t}\n\t}, [code, id]);\n\n\tuseEffect(() => {\n\t\tif (!code) return;\n\t\tsetError(null);\n\t\tapplyTransform(() => ({ scale: 1, x: 0, y: 0 }));\n\t\tconst timer = setTimeout(initializeMermaid, 100);\n\t\treturn () => clearTimeout(timer);\n\t}, [code, initializeMermaid, applyTransform]);\n\n\tconst handleWheel = useCallback(\n\t\t(e: WheelEvent) => {\n\t\t\te.preventDefault();\n\t\t\tconst factor = e.deltaY < 0 ? 1 + ZOOM_STEP : 1 - ZOOM_STEP;\n\t\t\tapplyTransform(prev => {\n\t\t\t\tconst newScale = Math.min(\n\t\t\t\t\tMath.max(prev.scale * factor, MIN_SCALE),\n\t\t\t\t\tMAX_SCALE\n\t\t\t\t);\n\t\t\t\tif (!viewportRef.current) return { ...prev, scale: newScale };\n\t\t\t\tconst rect = viewportRef.current.getBoundingClientRect();\n\t\t\t\tconst cursorX = e.clientX - rect.left;\n\t\t\t\tconst cursorY = e.clientY - rect.top;\n\t\t\t\tconst ratio = newScale / prev.scale;\n\t\t\t\treturn {\n\t\t\t\t\tscale: newScale,\n\t\t\t\t\tx: cursorX - (cursorX - prev.x) * ratio,\n\t\t\t\t\ty: cursorY - (cursorY - prev.y) * ratio,\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\t[applyTransform]\n\t);\n\n\tuseEffect(() => {\n\t\tconst viewport = viewportRef.current;\n\t\tif (!viewport || !enabled) return;\n\t\tviewport.addEventListener('wheel', handleWheel, { passive: false });\n\t\treturn () => viewport.removeEventListener('wheel', handleWheel);\n\t}, [handleWheel, enabled]);\n\n\tconst handleMouseDown = useCallback((e: React.MouseEvent) => {\n\t\te.preventDefault();\n\t\tisDraggingRef.current = true;\n\t\tsetIsDragging(true);\n\t\tdragStart.current = {\n\t\t\tmouseX: e.clientX,\n\t\t\tmouseY: e.clientY,\n\t\t\ttransformX: transformRef.current.x,\n\t\t\ttransformY: transformRef.current.y,\n\t\t};\n\t}, []);\n\n\tconst handleMouseMove = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\tif (!isDraggingRef.current) return;\n\t\t\tapplyTransform(prev => ({\n\t\t\t\t...prev,\n\t\t\t\tx:\n\t\t\t\t\tdragStart.current.transformX + (e.clientX - dragStart.current.mouseX),\n\t\t\t\ty:\n\t\t\t\t\tdragStart.current.transformY + (e.clientY - dragStart.current.mouseY),\n\t\t\t}));\n\t\t},\n\t\t[applyTransform]\n\t);\n\n\tconst handleMouseUp = useCallback(() => {\n\t\tisDraggingRef.current = false;\n\t\tsetIsDragging(false);\n\t}, []);\n\n\tconst zoomIn = useCallback(() => {\n\t\tapplyTransform(prev => ({\n\t\t\t...prev,\n\t\t\tscale: Math.min(prev.scale * (1 + ZOOM_STEP), MAX_SCALE),\n\t\t}));\n\t}, [applyTransform]);\n\n\tconst zoomOut = useCallback(() => {\n\t\tapplyTransform(prev => ({\n\t\t\t...prev,\n\t\t\tscale: Math.max(prev.scale * (1 - ZOOM_STEP), MIN_SCALE),\n\t\t}));\n\t}, [applyTransform]);\n\n\tconst resetView = useCallback(() => {\n\t\tapplyTransform(() => ({ scale: 1, x: 0, y: 0 }));\n\t}, [applyTransform]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`${styles.mermaid}\n\t\t\t\t${hasMarginUp ? styles['margin-top--1'] : ''}\n\t\t\t\t${hasMarginDown ? styles['margin-bottom--2'] : ''}`}\n\t\t>\n\t\t\t{error ? (\n\t\t\t\t<CalloutStatic type=\"error\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\t<b>Diagram error:</b> {error}\n\t\t\t\t\t</p>\n\t\t\t\t</CalloutStatic>\n\t\t\t) : !enabled ? (\n\t\t\t\t<CalloutStatic type=\"info\">\n\t\t\t\t\t<p>Rendering diagram...</p>\n\t\t\t\t</CalloutStatic>\n\t\t\t) : (\n\t\t\t\t<div className={styles['mermaid__controls']}>\n\t\t\t\t\t<button className={styles['mermaid__controls__btn']} onClick={zoomIn}>\n\t\t\t\t\t\t+\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={styles['mermaid__controls__btn']}\n\t\t\t\t\t\tonClick={zoomOut}\n\t\t\t\t\t>\n\t\t\t\t\t\t−\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={styles['mermaid__controls__btn']}\n\t\t\t\t\t\tonClick={resetView}\n\t\t\t\t\t>\n\t\t\t\t\t\tReset\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tref={viewportRef}\n\t\t\t\tclassName={`${styles['mermaid__viewport']} ${\n\t\t\t\t\tisDragging ? styles['mermaid__viewport--dragging'] : ''\n\t\t\t\t}`}\n\t\t\t\tstyle={enabled ? undefined : { display: 'none' }}\n\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\tonMouseUp={handleMouseUp}\n\t\t\t\tonMouseLeave={handleMouseUp}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttransform: `translate(${transform.x}px, ${transform.y}px) scale(${transform.scale})`,\n\t\t\t\t\t\ttransformOrigin: '0 0',\n\t\t\t\t\t\ttransition: isDragging ? 'none' : 'transform 0.1s ease',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div ref={mermaidReference} id={id} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default Mermaid;\n"],"names":["useState","useRef","useCallback","useEffect","_jsxs","styles","_jsx","CalloutStatic"],"mappings":"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"}
1
+ {"version":3,"file":"MermaidDynamic.js","sources":["../../../src/dynamicComponents/MermaidDynamic.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport mermaid from 'mermaid';\n\nimport CalloutStatic from '../staticComponents/CalloutStatic';\nimport styles from '../styles/Mermaid.module.scss';\n\ninterface MermaidProperties {\n\tcode: string;\n\tid: string;\n\thasMarginUp?: boolean;\n\thasMarginDown?: boolean;\n}\n\nmermaid.initialize({\n\tstartOnLoad: false,\n\ttheme: 'default',\n\ttimeline: {\n\t\tuseMaxWidth: true,\n\t\tdiagramMarginX: 0,\n\t},\n\tflowchart: {\n\t\tuseMaxWidth: true,\n\t\tdiagramPadding: 0,\n\t},\n\tsequence: {\n\t\tuseMaxWidth: true,\n\t\tdiagramMarginX: 0,\n\t},\n});\n\nconst MIN_SCALE = 0.5;\nconst MAX_SCALE = 4;\nconst ZOOM_STEP = 0.15;\n\nconst Mermaid = ({\n\tcode = '',\n\tid = '',\n\thasMarginUp = false,\n\thasMarginDown = false,\n}: MermaidProperties) => {\n\tconst [enabled, setEnabled] = useState(false);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [transform, setTransform] = useState({ scale: 1, x: 0, y: 0 });\n\tconst [isDragging, setIsDragging] = useState(false);\n\n\tconst mermaidReference = useRef<HTMLDivElement>(null);\n\tconst viewportRef = useRef<HTMLDivElement>(null);\n\tconst renderCount = useRef(0);\n\tconst transformRef = useRef({ scale: 1, x: 0, y: 0 });\n\tconst isDraggingRef = useRef(false);\n\tconst dragStart = useRef({\n\t\tmouseX: 0,\n\t\tmouseY: 0,\n\t\ttransformX: 0,\n\t\ttransformY: 0,\n\t});\n\n\tconst applyTransform = useCallback(\n\t\t(\n\t\t\tupdater: (\n\t\t\t\tprev: typeof transformRef.current\n\t\t\t) => typeof transformRef.current\n\t\t) => {\n\t\t\tconst next = updater(transformRef.current);\n\t\t\ttransformRef.current = next;\n\t\t\tsetTransform(next);\n\t\t},\n\t\t[]\n\t);\n\n\tconst initializeMermaid = useCallback(async () => {\n\t\tif (!mermaidReference.current || !code) return;\n\t\tconst renderId = `mermaid-diagram-${id}-${++renderCount.current}`;\n\t\tdocument.getElementById(renderId)?.remove();\n\t\ttry {\n\t\t\tconst { svg, bindFunctions } = await mermaid.render(renderId, code);\n\t\t\tif (!mermaidReference.current || !svg) return;\n\t\t\tmermaidReference.current.innerHTML = svg;\n\t\t\tbindFunctions?.(mermaidReference.current);\n\t\t\tsetEnabled(true);\n\t\t} catch (err) {\n\t\t\tconst message =\n\t\t\t\terr instanceof Error ? err.message : 'Failed to render diagram';\n\t\t\tsetError(message);\n\t\t}\n\t}, [code, id]);\n\n\tuseEffect(() => {\n\t\tif (!code) return;\n\t\tsetError(null);\n\t\tapplyTransform(() => ({ scale: 1, x: 0, y: 0 }));\n\t\tconst timer = setTimeout(initializeMermaid, 100);\n\t\treturn () => clearTimeout(timer);\n\t}, [code, initializeMermaid, applyTransform]);\n\n\n\n\tconst handleMouseDown = useCallback((e: React.MouseEvent) => {\n\t\te.preventDefault();\n\t\tisDraggingRef.current = true;\n\t\tsetIsDragging(true);\n\t\tdragStart.current = {\n\t\t\tmouseX: e.clientX,\n\t\t\tmouseY: e.clientY,\n\t\t\ttransformX: transformRef.current.x,\n\t\t\ttransformY: transformRef.current.y,\n\t\t};\n\t}, []);\n\n\tconst handleMouseMove = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\tif (!isDraggingRef.current) return;\n\t\t\tapplyTransform(prev => ({\n\t\t\t\t...prev,\n\t\t\t\tx:\n\t\t\t\t\tdragStart.current.transformX + (e.clientX - dragStart.current.mouseX),\n\t\t\t\ty:\n\t\t\t\t\tdragStart.current.transformY + (e.clientY - dragStart.current.mouseY),\n\t\t\t}));\n\t\t},\n\t\t[applyTransform]\n\t);\n\n\tconst handleMouseUp = useCallback(() => {\n\t\tisDraggingRef.current = false;\n\t\tsetIsDragging(false);\n\t}, []);\n\n\tconst zoomIn = useCallback(() => {\n\t\tapplyTransform(prev => ({\n\t\t\t...prev,\n\t\t\tscale: Math.min(prev.scale * (1 + ZOOM_STEP), MAX_SCALE),\n\t\t}));\n\t}, [applyTransform]);\n\n\tconst zoomOut = useCallback(() => {\n\t\tapplyTransform(prev => ({\n\t\t\t...prev,\n\t\t\tscale: Math.max(prev.scale * (1 - ZOOM_STEP), MIN_SCALE),\n\t\t}));\n\t}, [applyTransform]);\n\n\tconst resetView = useCallback(() => {\n\t\tapplyTransform(() => ({ scale: 1, x: 0, y: 0 }));\n\t}, [applyTransform]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`${styles.mermaid}\n\t\t\t\t${hasMarginUp ? styles['margin-top--1'] : ''}\n\t\t\t\t${hasMarginDown ? styles['margin-bottom--2'] : ''}`}\n\t\t>\n\t\t\t{error ? (\n\t\t\t\t<CalloutStatic type=\"error\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\t<b>Diagram error:</b> {error}\n\t\t\t\t\t</p>\n\t\t\t\t</CalloutStatic>\n\t\t\t) : !enabled ? (\n\t\t\t\t<CalloutStatic type=\"info\">\n\t\t\t\t\t<p>Rendering diagram...</p>\n\t\t\t\t</CalloutStatic>\n\t\t\t) : (\n\t\t\t\t<div className={styles['mermaid__controls']}>\n\t\t\t\t\t<button className={styles['mermaid__controls__btn']} onClick={zoomIn}>\n\t\t\t\t\t\t+\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={styles['mermaid__controls__btn']}\n\t\t\t\t\t\tonClick={zoomOut}\n\t\t\t\t\t>\n\t\t\t\t\t\t−\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={styles['mermaid__controls__btn']}\n\t\t\t\t\t\tonClick={resetView}\n\t\t\t\t\t>\n\t\t\t\t\t\tReset\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tref={viewportRef}\n\t\t\t\tclassName={`${styles['mermaid__viewport']} ${\n\t\t\t\t\tisDragging ? styles['mermaid__viewport--dragging'] : ''\n\t\t\t\t}`}\n\t\t\t\tstyle={enabled ? undefined : { display: 'none' }}\n\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\tonMouseUp={handleMouseUp}\n\t\t\t\tonMouseLeave={handleMouseUp}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttransform: `translate(${transform.x}px, ${transform.y}px) scale(${transform.scale})`,\n\t\t\t\t\t\ttransformOrigin: '0 0',\n\t\t\t\t\t\ttransition: isDragging ? 'none' : 'transform 0.1s ease',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div ref={mermaidReference} id={id} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default Mermaid;\n"],"names":["useState","useRef","useCallback","useEffect","_jsxs","styles","_jsx","CalloutStatic"],"mappings":"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"}