@plumile/ui 0.1.150 → 0.1.152

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 (47) hide show
  1. package/lib/esm/admin/organisms/admin_sidebar/adminSidebar.css.js +2 -0
  2. package/lib/esm/atomic/atoms/textarea/textarea.css.js +0 -2
  3. package/lib/esm/atomic/molecules/markdown/components/MarkdownHeading.css.js +1 -0
  4. package/lib/esm/atomic/molecules/markdown/components/MarkdownSubscript.css.js +0 -1
  5. package/lib/esm/node_modules/es-toolkit/dist/_internal/globalThis.js.map +1 -1
  6. package/lib/esm/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js.map +1 -1
  7. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js.map +1 -1
  8. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/getTag.js.map +1 -1
  9. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js.map +1 -1
  10. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/tags.js.map +1 -1
  11. package/lib/esm/node_modules/es-toolkit/dist/compat/function/memoize.js.map +1 -1
  12. package/lib/esm/node_modules/es-toolkit/dist/compat/object/clone.js +4 -4
  13. package/lib/esm/node_modules/es-toolkit/dist/compat/object/clone.js.map +1 -1
  14. package/lib/esm/node_modules/es-toolkit/dist/compat/object/cloneDeep.js.map +1 -1
  15. package/lib/esm/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js.map +1 -1
  16. package/lib/esm/node_modules/es-toolkit/dist/compat/object/merge.js.map +1 -1
  17. package/lib/esm/node_modules/es-toolkit/dist/compat/object/mergeWith.js +19 -19
  18. package/lib/esm/node_modules/es-toolkit/dist/compat/object/mergeWith.js.map +1 -1
  19. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArguments.js.map +1 -1
  20. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArray.js.map +1 -1
  21. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js.map +1 -1
  22. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js.map +1 -1
  23. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js +6 -6
  24. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js.map +1 -1
  25. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js.map +1 -1
  26. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js.map +1 -1
  27. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js.map +1 -1
  28. package/lib/esm/node_modules/es-toolkit/dist/function/noop.js.map +1 -1
  29. package/lib/esm/node_modules/es-toolkit/dist/object/clone.js.map +1 -1
  30. package/lib/esm/node_modules/es-toolkit/dist/object/cloneDeepWith.js +75 -75
  31. package/lib/esm/node_modules/es-toolkit/dist/object/cloneDeepWith.js.map +1 -1
  32. package/lib/esm/node_modules/es-toolkit/dist/predicate/isBuffer.js.map +1 -1
  33. package/lib/esm/node_modules/es-toolkit/dist/predicate/isLength.js.map +1 -1
  34. package/lib/esm/node_modules/es-toolkit/dist/predicate/isPrimitive.js.map +1 -1
  35. package/lib/esm/node_modules/es-toolkit/dist/predicate/isTypedArray.js.map +1 -1
  36. package/lib/esm/node_modules/hast-util-to-jsx-runtime/lib/index.js +51 -51
  37. package/lib/esm/node_modules/hast-util-to-jsx-runtime/lib/index.js.map +1 -1
  38. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/pieDiagram-4H26LBE5.js.map +1 -1
  39. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-3UESZ5HK.js +14 -14
  40. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-3UESZ5HK.js.map +1 -1
  41. package/lib/esm/node_modules/react-shiki/dist/{component-C5lsWZSq.js → component-CYq7SnJ0.js} +8 -9
  42. package/lib/esm/node_modules/react-shiki/dist/component-CYq7SnJ0.js.map +1 -0
  43. package/lib/esm/node_modules/react-shiki/dist/index.js +1 -1
  44. package/lib/esm/node_modules/react-shiki/dist/index.js.map +1 -1
  45. package/lib/esm/style.css +1 -1
  46. package/package.json +4 -4
  47. package/lib/esm/node_modules/react-shiki/dist/component-C5lsWZSq.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plumile/ui",
3
- "version": "0.1.150",
3
+ "version": "0.1.152",
4
4
  "description": "Shared React UI primitives and theme for Kronex applications",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -158,14 +158,14 @@
158
158
  "@vanilla-extract/css": "^1.20.1",
159
159
  "@vanilla-extract/recipes": "^0.5.7",
160
160
  "@vanilla-extract/sprinkles": "^1.6.5",
161
- "markdown-to-jsx": "9.8.0",
161
+ "markdown-to-jsx": "9.8.1",
162
162
  "mermaid": "11.15.0",
163
163
  "react-i18next": "^17.0.8",
164
164
  "react-shiki": "^0.10.0",
165
165
  "tslib": "^2.8.1"
166
166
  },
167
167
  "devDependencies": {
168
- "@plumile/router": "^0.1.150",
168
+ "@plumile/router": "^0.1.152",
169
169
  "@types/react": "19.2.15",
170
170
  "@types/react-dom": "19.2.3",
171
171
  "i18next": "26.2.0",
@@ -176,7 +176,7 @@
176
176
  "typescript": "6.0.3"
177
177
  },
178
178
  "peerDependencies": {
179
- "@plumile/router": "^0.1.147",
179
+ "@plumile/router": "^0.1.150",
180
180
  "i18next": "^26.2.0",
181
181
  "react": "^19.2.6",
182
182
  "react-dom": "^19.2.6",
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-C5lsWZSq.js","names":[],"sources":["../../../../../../../node_modules/react-shiki/dist/component-C5lsWZSq.mjs"],"sourcesContent":["import './style.css';\nimport { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport { toJsxRuntime } from \"hast-util-to-jsx-runtime\";\nimport { dequal } from \"dequal\";\nimport { guessEmbeddedLanguages, isSpecialLang } from \"shiki/core\";\nimport { visit } from \"unist-util-visit\";\nimport { clsx } from \"clsx\";\n//#region src/lib/utils.ts\n/**\n* Returns a referentially stable version of `value` that only updates when content changes.\n* Uses reference equality as a fast path and deep comparison to prevent unnecessary updates.\n*/\nconst useStableValue = (value) => {\n\tconst ref = useRef(value);\n\tif (value !== ref.current && !dequal(value, ref.current)) ref.current = value;\n\treturn ref.current;\n};\n/**\n* Optionally throttles rapid sequential highlighting operations\n*\n* @example\n* const timeoutControl = useRef<TimeoutState>({\n* nextAllowedTime: 0,\n* timeoutId: undefined\n* });\n*\n* throttleHighlighting(highlightCode, timeoutControl, 1000);\n*/\nconst throttleHighlighting = (performHighlight, timeoutControl, throttleMs) => {\n\tclearTimeout(timeoutControl.current.timeoutId);\n\tconst delay = Math.max(0, timeoutControl.current.nextAllowedTime - Date.now());\n\ttimeoutControl.current.timeoutId = setTimeout(() => {\n\t\tperformHighlight();\n\t\ttimeoutControl.current.nextAllowedTime = Date.now() + throttleMs;\n\t}, delay);\n};\n//#endregion\n//#region src/lib/language.ts\nconst FALLBACK_LANGUAGE = \"plaintext\";\nconst getEmbeddedLanguages = (code, languageId, highlighter) => {\n\tconst bundled = highlighter.getBundledLanguages();\n\treturn guessEmbeddedLanguages(code, languageId).flatMap((language) => bundled[language] ?? []);\n};\nconst toArray = (value) => value == null ? [] : Array.isArray(value) ? value : [value];\nconst languageKey = (lang) => {\n\tif (lang == null) return null;\n\tif (typeof lang === \"string\") return `s:${lang}`;\n\treturn `o:${lang.name}::${lang.scopeName}`;\n};\nconst dedupeLanguages = (langs) => {\n\tconst seen = /* @__PURE__ */ new Set();\n\tconst deduped = [];\n\tfor (const lang of langs) {\n\t\tconst key = languageKey(lang);\n\t\tif (key == null || seen.has(key)) continue;\n\t\tseen.add(key);\n\t\tdeduped.push(lang);\n\t}\n\treturn deduped;\n};\n/**\n* Used in factories to check if language is supported.\n* Objects are validated as grammar registrations (name + scopeName).\n*/\nconst isLoadableLanguage = (lang, bundledLanguages) => {\n\tif (lang == null) return false;\n\tif (typeof lang === \"string\") return lang in bundledLanguages;\n\treturn typeof lang.name === \"string\" && typeof lang.scopeName === \"string\";\n};\n/**\n* Used in hook to resolve loaded language for highlighting.\n* Falls back to \"plaintext\" if not supported.\n*/\nconst resolveLoadedLanguage = (languageId, loadedLanguages) => isSpecialLang(languageId) || loadedLanguages.includes(languageId) ? languageId : FALLBACK_LANGUAGE;\n/**\n* Resolves the language input to standardized IDs and objects for Shiki\n* @param lang The language input from props\n* @param customLanguages An array of custom textmate grammar objects or a single grammar object\n* @returns A LanguageResult object containing:\n* - languageId: The resolved language ID\n* - langsToLoad: The language objects/string ids to load\n*/\nconst resolveLanguage = (lang, customLanguages, langAliases, preloadLanguages) => {\n\tconst customLangs = toArray(customLanguages);\n\tconst preloadLangs = toArray(preloadLanguages);\n\tconst customMatchPool = [...customLangs, ...preloadLangs];\n\tlet languageId = FALLBACK_LANGUAGE;\n\tlet primaryLang;\n\tif (lang == null || typeof lang === \"string\" && !lang.trim()) return {\n\t\tlanguageId,\n\t\tlangsToLoad: dedupeLanguages([...preloadLangs, ...customLangs])\n\t};\n\tif (typeof lang === \"object\") {\n\t\tlanguageId = lang.name;\n\t\tprimaryLang = lang;\n\t} else {\n\t\tconst lowerLang = lang.toLowerCase();\n\t\tconst matches = (str) => str?.toLowerCase() === lowerLang;\n\t\tconst customMatch = customMatchPool.find((candidate) => typeof candidate === \"object\" && candidate != null && !!(matches(candidate.name) || matches(candidate.scopeName) || matches(candidate.scopeName?.split(\".\").pop()) || candidate.aliases?.some(matches) || candidate.fileTypes?.some(matches)));\n\t\tif (customMatch) {\n\t\t\tlanguageId = customMatch.name || lang;\n\t\t\tprimaryLang = customMatch;\n\t\t} else if (langAliases?.[lang]) {\n\t\t\tlanguageId = langAliases[lang];\n\t\t\tprimaryLang = langAliases[lang];\n\t\t} else {\n\t\t\tlanguageId = lang;\n\t\t\tprimaryLang = lang;\n\t\t}\n\t}\n\treturn {\n\t\tlanguageId,\n\t\tlangsToLoad: dedupeLanguages([\n\t\t\tprimaryLang,\n\t\t\t...preloadLangs,\n\t\t\t...customLangs\n\t\t])\n\t};\n};\n//#endregion\n//#region src/lib/theme.ts\nconst DEFAULT_THEMES = {\n\tlight: \"github-light\",\n\tdark: \"github-dark\"\n};\nconst isTextmateTheme = (value) => {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst v = value;\n\tconst hasTokens = Array.isArray(v.tokenColors) || Array.isArray(v.settings);\n\tconst hasIdentity = typeof v.name === \"string\" || typeof v.type === \"string\";\n\treturn hasTokens && hasIdentity;\n};\nfunction resolveTheme(themeInput) {\n\tif (typeof themeInput !== \"object\" || themeInput === null || isTextmateTheme(themeInput)) return {\n\t\tisMulti: false,\n\t\ttheme: themeInput,\n\t\tthemesToLoad: [themeInput]\n\t};\n\tconst validEntries = Object.entries(themeInput).filter(([key, value]) => key.trim() !== \"\" && (typeof value === \"string\" && value.trim() !== \"\" || isTextmateTheme(value)));\n\tif (validEntries.length === 0) {\n\t\tconsole.warn(\"[react-shiki] invalid multi-theme config, falling back to defaults\");\n\t\treturn {\n\t\t\tisMulti: true,\n\t\t\tthemes: DEFAULT_THEMES,\n\t\t\tthemesToLoad: Object.values(DEFAULT_THEMES)\n\t\t};\n\t}\n\tif (validEntries.length !== Object.keys(themeInput).length) console.warn(\"[react-shiki] multi-theme config contained invalid entries; they were dropped\");\n\treturn {\n\t\tisMulti: true,\n\t\tthemes: Object.fromEntries(validEntries),\n\t\tthemesToLoad: validEntries.map(([, value]) => value)\n\t};\n}\n//#endregion\n//#region src/lib/transformers.ts\n/**\n* Creates a transformer that enables line numbers display\n* @param startLine - The starting line number (defaults to 1)\n*/\nfunction lineNumbersTransformer(startLine = 1) {\n\treturn {\n\t\tname: \"react-shiki:line-numbers\",\n\t\tcode(node) {\n\t\t\tthis.addClassToHast(node, \"has-line-numbers\");\n\t\t\tthis.addClassToHast(node, \"rs-has-line-numbers\");\n\t\t\tif (startLine !== 1) {\n\t\t\t\tconst existingStyle = node.properties?.style || \"\";\n\t\t\t\tconst newStyle = existingStyle ? `${existingStyle}; --line-start: ${startLine}` : `--line-start: ${startLine}`;\n\t\t\t\tnode.properties = {\n\t\t\t\t\t...node.properties,\n\t\t\t\t\tstyle: newStyle\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tline(node) {\n\t\t\tthis.addClassToHast(node, \"line-numbers\");\n\t\t\tthis.addClassToHast(node, \"rs-line-number\");\n\t\t\treturn node;\n\t\t}\n\t};\n}\n//#endregion\n//#region src/lib/options.ts\nconst buildThemeOptions = (resolvedTheme, defaultColor, cssVariablePrefix) => {\n\tif (resolvedTheme.isMulti) return {\n\t\tthemes: resolvedTheme.themes,\n\t\tdefaultColor,\n\t\tcssVariablePrefix\n\t};\n\treturn { theme: resolvedTheme.theme };\n};\nconst buildShikiOptions = (languageId, resolvedTheme, options) => {\n\tconst { delay, customLanguages, preloadLanguages, outputFormat, highlighter, langAlias, engine, defaultColor, cssVariablePrefix, showLineNumbers, startingLineNumber, transformers: userTransformers, ...shikiPassthrough } = options;\n\tconst transformers = [...userTransformers || []];\n\tif (showLineNumbers) transformers.push(lineNumbersTransformer(startingLineNumber));\n\treturn {\n\t\tlang: languageId,\n\t\t...buildThemeOptions(resolvedTheme, defaultColor, cssVariablePrefix),\n\t\t...shikiPassthrough,\n\t\ttransformers\n\t};\n};\n//#endregion\n//#region src/lib/hook.ts\nasync function highlight(code, resolved, opts, factory) {\n\tconst { languageId, langsToLoad, themesToLoad, shikiOptions } = resolved;\n\tconst highlighter = opts.highlighter ?? await (async () => {\n\t\tconst hl = await factory(langsToLoad, themesToLoad, opts.engine);\n\t\tawait hl.loadLanguage(...getEmbeddedLanguages(code, languageId, hl));\n\t\treturn hl;\n\t})();\n\tconst language = resolveLoadedLanguage(languageId, highlighter.getLoadedLanguages());\n\tconst options = {\n\t\t...shikiOptions,\n\t\tlang: language\n\t};\n\treturn opts.outputFormat === \"html\" ? highlighter.codeToHtml(code, options) : toJsxRuntime(highlighter.codeToHast(code, options), {\n\t\tjsx,\n\t\tjsxs,\n\t\tFragment\n\t});\n}\nconst useHighlight = (code, lang, themeInput, options = {}, highlighterFactory) => {\n\tconst [highlightedCode, setHighlightedCode] = useState(null);\n\tconst stableLang = useStableValue(lang);\n\tconst stableTheme = useStableValue(themeInput);\n\tconst stableOpts = useStableValue(options);\n\tconst resolved = useMemo(() => {\n\t\tconst { languageId, langsToLoad } = resolveLanguage(stableLang, stableOpts.customLanguages, stableOpts.langAlias, stableOpts.preloadLanguages);\n\t\tconst theme = resolveTheme(stableTheme);\n\t\tconst shikiOptions = buildShikiOptions(languageId, theme, stableOpts);\n\t\treturn {\n\t\t\tlanguageId,\n\t\t\tlangsToLoad,\n\t\t\tthemesToLoad: theme.themesToLoad,\n\t\t\tshikiOptions\n\t\t};\n\t}, [\n\t\tstableLang,\n\t\tstableTheme,\n\t\tstableOpts\n\t]);\n\tconst requestIdRef = useRef(0);\n\tconst timeoutControl = useRef({\n\t\tnextAllowedTime: 0,\n\t\ttimeoutId: void 0\n\t});\n\tuseEffect(() => {\n\t\tconst requestId = ++requestIdRef.current;\n\t\tif (!resolved.languageId) return;\n\t\tconst run = async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await highlight(code, resolved, stableOpts, highlighterFactory);\n\t\t\t\tif (requestId === requestIdRef.current) setHighlightedCode(result);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"[react-shiki] highlight failed\", error);\n\t\t\t}\n\t\t};\n\t\tif (stableOpts.delay) throttleHighlighting(run, timeoutControl, stableOpts.delay);\n\t\telse run();\n\t\treturn () => {\n\t\t\tclearTimeout(timeoutControl.current.timeoutId);\n\t\t};\n\t}, [\n\t\tcode,\n\t\tresolved,\n\t\tstableOpts,\n\t\thighlighterFactory\n\t]);\n\treturn highlightedCode;\n};\n//#endregion\n//#region src/lib/plugins.ts\n/**\n* Rehype plugin to add an 'inline' property to <code> elements\n* Sets 'inline' property to true if the <code> is not within a <pre> tag\n*\n* Pass this plugin to the `rehypePlugins` prop of react-markdown\n* You can then access `inline` as a prop in components passed to react-markdown\n*\n* @example\n* <ReactMarkdown rehypePlugins={[rehypeInlineCodeProperty]} />\n*/\nfunction rehypeInlineCodeProperty() {\n\treturn (tree) => {\n\t\tvisit(tree, \"element\", (node, _index, parent) => {\n\t\t\tif (node.tagName === \"code\" && parent?.type === \"element\" && parent.tagName !== \"pre\") node.properties.inline = true;\n\t\t});\n\t};\n}\n/**\n* Function to determine if code is inline based on the presence of line breaks\n*\n* @example\n* const isInline = node && isInlineCode(node: Element)\n*/\nconst isInlineCode = (node) => {\n\treturn !(node.children || []).filter((child) => child.type === \"text\").map((child) => child.value).join(\"\").includes(\"\\n\");\n};\n//#endregion\n//#region src/lib/component.tsx\n/**\n* Base ShikiHighlighter component factory.\n* This creates a component that uses the provided hook implementation.\n*/\nconst createShikiHighlighterComponent = (useShikiHighlighterImpl) => {\n\treturn forwardRef(({ language, theme, delay, transformers, defaultColor, cssVariablePrefix, addDefaultStyles = true, style, langStyle, className, langClassName, showLanguage = true, showLineNumbers = false, startingLineNumber = 1, children: code, as: Element = \"div\", customLanguages, preloadLanguages, ...shikiOptions }, ref) => {\n\t\tconst options = {\n\t\t\tdelay,\n\t\t\ttransformers,\n\t\t\tcustomLanguages,\n\t\t\tpreloadLanguages,\n\t\t\tshowLineNumbers,\n\t\t\tdefaultColor,\n\t\t\tcssVariablePrefix,\n\t\t\tstartingLineNumber,\n\t\t\t...shikiOptions\n\t\t};\n\t\tconst displayLanguageId = typeof language === \"object\" ? language.name || null : language?.trim() || null;\n\t\tconst highlightedCode = useShikiHighlighterImpl(code, language, theme, options);\n\t\treturn /* @__PURE__ */ jsxs(Element, {\n\t\t\tref,\n\t\t\t\"data-testid\": \"shiki-container\",\n\t\t\t\"data-slot\": \"container\",\n\t\t\tclassName: clsx(\"rs-root\", \"not-prose\", addDefaultStyles && \"rs-default-styles\", className),\n\t\t\tstyle,\n\t\t\tchildren: [showLanguage && displayLanguageId ? /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\tid: \"language-label\",\n\t\t\t\t\"data-slot\": \"language-label\",\n\t\t\t\tclassName: clsx(\"rs-language-label\", langClassName),\n\t\t\t\tstyle: langStyle,\n\t\t\t\tchildren: displayLanguageId\n\t\t\t}) : null, typeof highlightedCode === \"string\" ? /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\"data-slot\": \"content\",\n\t\t\t\tdangerouslySetInnerHTML: { __html: highlightedCode }\n\t\t\t}) : highlightedCode]\n\t\t});\n\t});\n};\n//#endregion\nexport { isLoadableLanguage as a, useHighlight as i, isInlineCode as n, rehypeInlineCodeProperty as r, createShikiHighlighterComponent as t };\n\n//# sourceMappingURL=component-C5lsWZSq.mjs.map"],"x_google_ignoreList":[0],"mappings":"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"}