@qilin-agent/client-ui-primitives 0.0.0-stage → 3.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.i18n.yaml +61 -0
  3. package/README.md +187 -2
  4. package/README.zh.md +188 -0
  5. package/lib/Button.module.css +79 -0
  6. package/lib/Checkbox.module.css +28 -0
  7. package/lib/CommandText.module.css +12 -0
  8. package/lib/ConnectionIndicator.module.css +123 -0
  9. package/lib/DiffBlock.module.css +109 -0
  10. package/lib/DisclosureRow.module.css +84 -0
  11. package/lib/FileTypeIcon.module.css +50 -0
  12. package/lib/HoverCard.module.css +70 -0
  13. package/lib/ImageLightbox.module.css +48 -0
  14. package/lib/ImagePreview.module.css +24 -0
  15. package/lib/Input.module.css +38 -0
  16. package/lib/JsonTree.module.css +345 -0
  17. package/lib/Menu.module.css +274 -0
  18. package/lib/MenuGroup.module.css +37 -0
  19. package/lib/MenuSurface.module.css +49 -0
  20. package/lib/Modal.module.css +103 -0
  21. package/lib/OnboardingSurface.module.css +29 -0
  22. package/lib/PathLabel.module.css +28 -0
  23. package/lib/Pill.module.css +27 -0
  24. package/lib/ReadBlock.module.css +111 -0
  25. package/lib/RiskConfirmation.module.css +73 -0
  26. package/lib/SearchBlock.module.css +112 -0
  27. package/lib/SegmentedControl.module.css +76 -0
  28. package/lib/ShortcutKeys.module.css +33 -0
  29. package/lib/StateDot.module.css +73 -0
  30. package/lib/Switch.module.css +50 -0
  31. package/lib/Tag.module.css +57 -0
  32. package/lib/TerminalBlock.module.css +205 -0
  33. package/lib/TextShimmer.module.css +88 -0
  34. package/lib/Toast.module.css +76 -0
  35. package/lib/Tooltip.module.css +52 -0
  36. package/lib/WebBlock.module.css +141 -0
  37. package/lib/index.js +10647 -0
  38. package/lib/markdown/CodeBlock.module.css +130 -0
  39. package/lib/markdown/JsonBlock.module.css +32 -0
  40. package/lib/markdown/MarkdownText.module.css +485 -0
  41. package/lib/markdown/mermaid.module.css +49 -0
  42. package/lib/settings-form/SettingsForm.module.css +53 -0
  43. package/lib/settings-form/fields.module.css +145 -0
  44. package/lib/types/Button.d.ts +18 -0
  45. package/lib/types/Checkbox.d.ts +20 -0
  46. package/lib/types/CodeFileIcon.d.ts +12 -0
  47. package/lib/types/CommandText.d.ts +16 -0
  48. package/lib/types/ConnectionIndicator.d.ts +26 -0
  49. package/lib/types/DiffBlock.d.ts +52 -0
  50. package/lib/types/DisclosureRow.d.ts +36 -0
  51. package/lib/types/FileTypeIcon.d.ts +43 -0
  52. package/lib/types/FoldToggle.d.ts +20 -0
  53. package/lib/types/HoverCard.d.ts +32 -0
  54. package/lib/types/ImageLightbox.d.ts +27 -0
  55. package/lib/types/ImagePreview.d.ts +12 -0
  56. package/lib/types/Input.d.ts +12 -0
  57. package/lib/types/JsonTree.d.ts +59 -0
  58. package/lib/types/LinkIcon.d.ts +49 -0
  59. package/lib/types/Menu.d.ts +133 -0
  60. package/lib/types/MenuGroup.d.ts +22 -0
  61. package/lib/types/MenuSurface.d.ts +16 -0
  62. package/lib/types/Modal.d.ts +44 -0
  63. package/lib/types/OnboardingSurface.d.ts +11 -0
  64. package/lib/types/PathLabel.d.ts +13 -0
  65. package/lib/types/Pill.d.ts +13 -0
  66. package/lib/types/QilinSeal.d.ts +18 -0
  67. package/lib/types/ReadBlock.d.ts +47 -0
  68. package/lib/types/ReferenceIcon.d.ts +16 -0
  69. package/lib/types/RiskConfirmation.d.ts +20 -0
  70. package/lib/types/SearchBlock.d.ts +72 -0
  71. package/lib/types/SegmentedControl.d.ts +35 -0
  72. package/lib/types/ShortcutKeys.d.ts +11 -0
  73. package/lib/types/SiteGlyph.d.ts +25 -0
  74. package/lib/types/StateDot.d.ts +18 -0
  75. package/lib/types/Switch.d.ts +20 -0
  76. package/lib/types/Tag.d.ts +32 -0
  77. package/lib/types/TerminalBlock.d.ts +68 -0
  78. package/lib/types/TextShimmer.d.ts +22 -0
  79. package/lib/types/Toast.d.ts +36 -0
  80. package/lib/types/Tooltip.d.ts +45 -0
  81. package/lib/types/WebBlock.d.ts +61 -0
  82. package/lib/types/ansi.d.ts +17 -0
  83. package/lib/types/clipboard.d.ts +9 -0
  84. package/lib/types/code-file-icon-artwork.d.ts +54 -0
  85. package/lib/types/code-file-types.d.ts +30 -0
  86. package/lib/types/darwin-desktop.d.ts +18 -0
  87. package/lib/types/file-size.d.ts +17 -0
  88. package/lib/types/focus.d.ts +9 -0
  89. package/lib/types/head-tail-cap.d.ts +23 -0
  90. package/lib/types/icons/index.d.ts +211 -0
  91. package/lib/types/icons/props.d.ts +9 -0
  92. package/lib/types/index.d.ts +92 -0
  93. package/lib/types/input-modality.d.ts +19 -0
  94. package/lib/types/keyboard-composition.d.ts +11 -0
  95. package/lib/types/markdown/CodeBlock.d.ts +30 -0
  96. package/lib/types/markdown/JsonBlock.d.ts +8 -0
  97. package/lib/types/markdown/MarkdownDelegate.d.ts +46 -0
  98. package/lib/types/markdown/MarkdownText.d.ts +54 -0
  99. package/lib/types/markdown/cjkFriendlyStrong.d.ts +9 -0
  100. package/lib/types/markdown/file-link.d.ts +13 -0
  101. package/lib/types/markdown/highlight.d.ts +142 -0
  102. package/lib/types/markdown/incremental.d.ts +80 -0
  103. package/lib/types/markdown/katex.d.ts +27 -0
  104. package/lib/types/markdown/local-image-syntax.d.ts +10 -0
  105. package/lib/types/markdown/mathCompatibility.d.ts +11 -0
  106. package/lib/types/markdown/mermaid.d.ts +39 -0
  107. package/lib/types/markdown/parse.d.ts +25 -0
  108. package/lib/types/markdown/plain-text.d.ts +22 -0
  109. package/lib/types/markdown/render.d.ts +158 -0
  110. package/lib/types/markdown/useViewportHighlighting.d.ts +11 -0
  111. package/lib/types/overlay-top-margin.d.ts +8 -0
  112. package/lib/types/pointer-grace.d.ts +22 -0
  113. package/lib/types/rank-by-name.d.ts +22 -0
  114. package/lib/types/relative-time.d.ts +23 -0
  115. package/lib/types/seal-geometry.d.ts +27 -0
  116. package/lib/types/seal-glyphs.d.ts +9 -0
  117. package/lib/types/settings-form/SettingsForm.d.ts +46 -0
  118. package/lib/types/settings-form/fields.d.ts +70 -0
  119. package/lib/types/settings-form/form-model.d.ts +214 -0
  120. package/lib/types/use-copy-feedback.d.ts +14 -0
  121. package/lib/types/useAnchoredMaxHeight.d.ts +11 -0
  122. package/lib/types/useAnchoredPosition.d.ts +34 -0
  123. package/lib/types/useDismissOnOutsidePointer.d.ts +11 -0
  124. package/lib/types/useModalLayer.d.ts +27 -0
  125. package/lib/types/user-text.d.ts +37 -0
  126. package/lib/user-text.module.css +43 -0
  127. package/package.json +63 -3
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Glyph outlines for the QiLin seal, extracted once from a system CJK face
3
+ * and normalized to a unit box so the mark carries no runtime font dependency.
4
+ */
5
+ /** 麒 (U+9E92), normalized to a unit box. */
6
+ export declare const SEAL_GLYPH_QI = "M0.42 0.84Q0.42 0.86 0.45 0.86Q0.47 0.86 0.48 0.86Q0.49 0.86 0.5 0.85Q0.5 0.84 0.51 0.83Q0.51 0.81 0.51 0.79Q0.53 0.81 0.55 0.81Q0.56 0.82 0.59 0.82Q0.57 0.85 0.56 0.88Q0.55 0.9 0.53 0.91Q0.52 0.93 0.49 0.93Q0.47 0.94 0.44 0.94Q0.41 0.94 0.39 0.93Q0.38 0.93 0.37 0.92Q0.36 0.92 0.35 0.91Q0.35 0.9 0.35 0.89V0.63Q0.35 0.61 0.35 0.59Q0.35 0.58 0.35 0.57Q0.35 0.56 0.35 0.55Q0.35 0.54 0.34 0.54Q0.37 0.54 0.39 0.54Q0.4 0.54 0.42 0.54Q0.44 0.54 0.44 0.55Q0.44 0.55 0.43 0.56Q0.42 0.57 0.42 0.61V0.68Q0.44 0.65 0.46 0.63Q0.47 0.61 0.48 0.59Q0.49 0.61 0.51 0.62Q0.52 0.63 0.54 0.64Q0.55 0.64 0.55 0.65Q0.54 0.65 0.54 0.65Q0.53 0.65 0.53 0.66Q0.52 0.66 0.51 0.67Q0.5 0.68 0.48 0.7Q0.45 0.73 0.42 0.76ZM0.92 0.99Q0.9 0.95 0.87 0.9Q0.84 0.85 0.79 0.8L0.86 0.76Q0.9 0.81 0.94 0.86Q0.97 0.9 1 0.94ZM0.74 0.81Q0.74 0.81 0.73 0.82Q0.72 0.83 0.7 0.85Q0.68 0.87 0.66 0.91Q0.63 0.94 0.59 1Q0.57 0.98 0.55 0.97Q0.54 0.96 0.51 0.95Q0.54 0.93 0.56 0.91Q0.58 0.89 0.6 0.86Q0.62 0.84 0.63 0.82Q0.65 0.79 0.66 0.76Q0.68 0.77 0.7 0.78Q0.72 0.79 0.74 0.79Q0.75 0.8 0.75 0.8Q0.75 0.81 0.74 0.81ZM0.25 0.84Q0.26 0.83 0.28 0.82Q0.29 0.81 0.3 0.8Q0.3 0.81 0.31 0.83Q0.32 0.84 0.33 0.86L0.25 0.92Q0.23 0.93 0.21 0.95Q0.19 0.97 0.18 0.97Q0.17 0.96 0.16 0.94Q0.15 0.92 0.14 0.91Q0.15 0.9 0.16 0.9Q0.17 0.89 0.18 0.89V0.65Q0.18 0.58 0.18 0.55Q0.2 0.55 0.22 0.55Q0.24 0.55 0.26 0.55Q0.27 0.55 0.27 0.55Q0.27 0.56 0.27 0.56Q0.26 0.57 0.25 0.58Q0.25 0.58 0.25 0.59V0.64Q0.29 0.64 0.31 0.64Q0.32 0.64 0.33 0.64V0.71Q0.32 0.71 0.3 0.71Q0.28 0.71 0.25 0.71ZM0.61 0.15Q0.61 0.11 0.61 0.07Q0.61 0.03 0.6 0.01Q0.63 0.01 0.65 0.01Q0.67 0.01 0.69 0.01Q0.7 0.01 0.7 0.01Q0.71 0.02 0.7 0.03Q0.69 0.03 0.69 0.04Q0.68 0.05 0.68 0.06V0.15H0.84Q0.84 0.09 0.84 0.05Q0.83 0.02 0.83 0Q0.86 0.01 0.88 0.01Q0.9 0.01 0.93 0.01Q0.94 0.01 0.94 0.01Q0.95 0.02 0.94 0.02Q0.93 0.03 0.92 0.04Q0.92 0.05 0.92 0.06V0.15Q0.93 0.15 0.95 0.14Q0.97 0.14 0.99 0.14V0.21Q0.97 0.21 0.95 0.21Q0.93 0.21 0.92 0.21V0.67Q0.93 0.67 0.96 0.67Q0.98 0.67 1 0.67V0.75Q0.98 0.74 0.97 0.74Q0.95 0.74 0.92 0.74Q0.9 0.74 0.86 0.74Q0.82 0.74 0.76 0.74Q0.7 0.74 0.67 0.74Q0.63 0.74 0.6 0.74Q0.58 0.74 0.56 0.74Q0.55 0.74 0.53 0.75V0.67Q0.55 0.67 0.57 0.67Q0.6 0.67 0.61 0.67V0.21Q0.6 0.21 0.58 0.21Q0.56 0.21 0.54 0.21V0.14Q0.56 0.14 0.58 0.14Q0.6 0.15 0.61 0.15ZM0.68 0.67H0.84V0.55H0.68ZM0.84 0.31V0.21H0.68V0.31ZM0.68 0.38V0.49H0.84V0.38ZM0.49 0.47V0.35H0.42V0.47ZM0.35 0.47V0.35H0.28V0.47ZM0.13 0.35Q0.13 0.38 0.13 0.41Q0.13 0.44 0.13 0.47H0.22V0.35ZM0.13 0.17V0.3H0.22V0.17ZM0.42 0.3Q0.44 0.3 0.46 0.3Q0.48 0.29 0.49 0.29Q0.51 0.29 0.53 0.29Q0.54 0.29 0.55 0.29Q0.55 0.3 0.55 0.34Q0.55 0.37 0.55 0.41Q0.55 0.45 0.55 0.48Q0.55 0.52 0.55 0.53Q0.53 0.53 0.48 0.53Q0.43 0.52 0.38 0.52H0.13Q0.13 0.61 0.12 0.68Q0.12 0.74 0.11 0.79Q0.1 0.84 0.09 0.88Q0.08 0.92 0.06 0.96Q0.04 0.94 0.03 0.92Q0.01 0.91 0 0.89Q0.02 0.86 0.03 0.83Q0.04 0.8 0.05 0.76Q0.06 0.72 0.06 0.67Q0.06 0.62 0.07 0.54Q0.07 0.46 0.07 0.36Q0.07 0.25 0.06 0.11Q0.08 0.11 0.14 0.11Q0.19 0.11 0.27 0.11Q0.26 0.09 0.25 0.06Q0.24 0.04 0.22 0.02L0.32 0Q0.32 0.02 0.33 0.05Q0.34 0.08 0.35 0.11Q0.39 0.11 0.42 0.11Q0.45 0.11 0.47 0.11Q0.49 0.11 0.5 0.11Q0.51 0.1 0.52 0.1V0.18Q0.51 0.18 0.48 0.18Q0.45 0.18 0.42 0.18ZM0.28 0.17V0.3H0.35V0.17Z";
7
+ /** 麟 (U+9E9F), normalized to a unit box. */
8
+ export declare const SEAL_GLYPH_LIN = "M0.53 0.66Q0.55 0.68 0.57 0.71Q0.59 0.73 0.6 0.74Q0.61 0.71 0.61 0.68Q0.61 0.65 0.61 0.62H0.55Q0.54 0.63 0.54 0.64Q0.53 0.65 0.53 0.66ZM0.25 0.18V0.28H0.31V0.18ZM0.13 0.18V0.28H0.19V0.18ZM0.13 0.44H0.19V0.34H0.13ZM0.31 0.44V0.34H0.25V0.44ZM0.42 0.44V0.34H0.37V0.44ZM0.83 0.76V0.62Q0.79 0.62 0.76 0.62Q0.74 0.63 0.72 0.63V0.55Q0.76 0.56 0.83 0.56Q0.83 0.52 0.83 0.5Q0.83 0.48 0.82 0.47Q0.87 0.48 0.9 0.47Q0.92 0.47 0.92 0.48Q0.92 0.48 0.91 0.49Q0.9 0.5 0.9 0.5Q0.9 0.51 0.9 0.52V0.56Q0.92 0.56 0.94 0.56Q0.97 0.56 0.99 0.55V0.63Q0.97 0.63 0.95 0.63Q0.93 0.62 0.9 0.62V0.76Q0.92 0.76 0.95 0.75Q0.98 0.75 1 0.75V0.83Q0.99 0.83 0.96 0.82Q0.93 0.82 0.9 0.82Q0.9 0.85 0.9 0.88Q0.9 0.9 0.9 0.92Q0.9 0.93 0.9 0.95Q0.9 0.96 0.91 0.98H0.82Q0.83 0.96 0.83 0.95Q0.83 0.94 0.83 0.92Q0.83 0.9 0.83 0.88Q0.83 0.86 0.83 0.82H0.77Q0.77 0.83 0.77 0.83Q0.77 0.83 0.77 0.84L0.7 0.84Q0.71 0.78 0.71 0.74Q0.71 0.7 0.71 0.66Q0.74 0.67 0.78 0.67Q0.79 0.66 0.79 0.67Q0.79 0.67 0.78 0.68Q0.78 0.69 0.78 0.7Q0.78 0.72 0.77 0.76ZM0.37 0.62Q0.39 0.6 0.41 0.59Q0.43 0.58 0.44 0.56Q0.46 0.59 0.48 0.61Q0.5 0.58 0.51 0.55Q0.52 0.52 0.53 0.48Q0.57 0.49 0.6 0.5Q0.62 0.5 0.6 0.52Q0.59 0.52 0.59 0.53Q0.58 0.54 0.58 0.56Q0.63 0.56 0.65 0.56Q0.67 0.55 0.68 0.55Q0.68 0.64 0.67 0.7Q0.66 0.77 0.64 0.82Q0.62 0.87 0.58 0.91Q0.54 0.96 0.47 0.99Q0.46 0.97 0.44 0.96Q0.43 0.94 0.41 0.93Q0.47 0.91 0.51 0.88Q0.55 0.85 0.57 0.81Q0.56 0.79 0.54 0.77Q0.52 0.74 0.49 0.72Q0.49 0.72 0.49 0.73Q0.49 0.73 0.48 0.73Q0.47 0.72 0.46 0.71Q0.45 0.7 0.43 0.7Q0.46 0.66 0.47 0.63Q0.46 0.64 0.43 0.65Q0.41 0.66 0.37 0.68V0.81Q0.37 0.83 0.38 0.83Q0.39 0.84 0.41 0.84Q0.42 0.84 0.43 0.83Q0.44 0.81 0.45 0.78Q0.46 0.79 0.47 0.8Q0.49 0.8 0.51 0.81Q0.5 0.84 0.49 0.85Q0.48 0.87 0.46 0.88Q0.45 0.89 0.44 0.9Q0.43 0.9 0.41 0.9Q0.38 0.9 0.36 0.9Q0.34 0.89 0.33 0.89Q0.32 0.88 0.31 0.86Q0.31 0.85 0.31 0.82V0.51H0.12Q0.12 0.61 0.12 0.68Q0.12 0.75 0.11 0.79Q0.1 0.84 0.09 0.87Q0.08 0.91 0.07 0.95Q0.05 0.91 0.03 0.9Q0.02 0.88 0 0.88Q0.05 0.79 0.06 0.59Q0.07 0.4 0.05 0.11Q0.06 0.11 0.11 0.12Q0.16 0.12 0.25 0.12Q0.24 0.1 0.23 0.08Q0.22 0.06 0.2 0.04L0.3 0.01Q0.31 0.04 0.32 0.06Q0.33 0.09 0.34 0.12Q0.39 0.12 0.44 0.12Q0.48 0.11 0.5 0.11V0.19Q0.49 0.19 0.47 0.19Q0.46 0.18 0.44 0.18Q0.42 0.18 0.4 0.18Q0.38 0.18 0.37 0.18V0.28Q0.4 0.28 0.43 0.27Q0.47 0.27 0.48 0.27Q0.48 0.28 0.48 0.29Q0.48 0.3 0.48 0.31Q0.48 0.32 0.48 0.34Q0.48 0.36 0.48 0.39Q0.48 0.42 0.48 0.44Q0.48 0.46 0.48 0.48Q0.48 0.49 0.48 0.5Q0.48 0.51 0.48 0.52Q0.45 0.51 0.37 0.51ZM0.22 0.62Q0.25 0.62 0.27 0.62Q0.28 0.62 0.3 0.62Q0.3 0.63 0.3 0.65Q0.3 0.66 0.3 0.68Q0.28 0.68 0.27 0.68Q0.25 0.68 0.22 0.68V0.82Q0.24 0.81 0.26 0.8Q0.28 0.79 0.3 0.78Q0.3 0.8 0.3 0.81Q0.3 0.82 0.31 0.84L0.21 0.89Q0.19 0.9 0.18 0.91Q0.16 0.92 0.15 0.93Q0.15 0.91 0.14 0.9Q0.13 0.88 0.12 0.85Q0.14 0.85 0.16 0.84V0.65Q0.16 0.54 0.15 0.51Q0.19 0.52 0.22 0.52Q0.23 0.52 0.23 0.52Q0.23 0.53 0.23 0.53Q0.22 0.54 0.22 0.55Q0.22 0.55 0.22 0.56ZM0.57 0.04Q0.59 0.07 0.61 0.1Q0.63 0.14 0.64 0.17L0.57 0.2Q0.56 0.14 0.51 0.08ZM0.93 0.06Q0.94 0.06 0.94 0.07Q0.94 0.08 0.93 0.08Q0.92 0.08 0.92 0.08Q0.91 0.09 0.9 0.1Q0.89 0.11 0.88 0.14Q0.87 0.16 0.85 0.19Q0.83 0.18 0.82 0.17Q0.8 0.17 0.78 0.16Q0.8 0.13 0.82 0.1Q0.83 0.07 0.84 0.03Q0.85 0.03 0.86 0.04Q0.87 0.04 0.89 0.05Q0.9 0.05 0.91 0.05Q0.92 0.06 0.93 0.06ZM0.68 0.27Q0.66 0.31 0.65 0.33Q0.64 0.36 0.63 0.38Q0.61 0.4 0.59 0.42Q0.57 0.44 0.53 0.47Q0.52 0.45 0.52 0.44Q0.51 0.43 0.49 0.42Q0.51 0.4 0.53 0.39Q0.55 0.37 0.57 0.35Q0.58 0.33 0.6 0.31Q0.61 0.29 0.63 0.27Q0.61 0.27 0.59 0.27Q0.57 0.27 0.56 0.27Q0.54 0.27 0.52 0.27Q0.51 0.28 0.5 0.28V0.2Q0.51 0.2 0.52 0.21Q0.53 0.21 0.55 0.21Q0.57 0.21 0.6 0.21Q0.63 0.21 0.68 0.21V0.15Q0.68 0.09 0.68 0.07Q0.67 0.04 0.67 0.02Q0.69 0.02 0.71 0.02Q0.74 0.02 0.75 0.02Q0.76 0.02 0.77 0.03Q0.77 0.03 0.76 0.04Q0.75 0.05 0.75 0.06Q0.75 0.07 0.75 0.09V0.21Q0.81 0.21 0.85 0.21Q0.9 0.21 0.92 0.21Q0.94 0.21 0.95 0.21Q0.97 0.2 0.97 0.2V0.28Q0.97 0.27 0.95 0.27Q0.94 0.27 0.92 0.27Q0.9 0.27 0.87 0.27Q0.85 0.27 0.81 0.27Q0.83 0.29 0.84 0.31Q0.86 0.32 0.88 0.34Q0.9 0.35 0.93 0.36Q0.95 0.37 0.99 0.37Q0.97 0.39 0.96 0.41Q0.95 0.43 0.94 0.46Q0.87 0.43 0.83 0.38Q0.78 0.34 0.75 0.27H0.75V0.35Q0.75 0.4 0.75 0.44Q0.75 0.47 0.75 0.5H0.67Q0.67 0.47 0.68 0.43Q0.68 0.4 0.68 0.35Z";
9
+ //# sourceMappingURL=seal-glyphs.d.ts.map
@@ -0,0 +1,46 @@
1
+ /**
2
+ * One plugin's settings form as its page on the Plugins page shows it: the
3
+ * read-only notice when the deployment stores settings read-only, the
4
+ * plugin's controls, and the save that writes every staged edit. The page
5
+ * draws the plugin's title and one-liner itself.
6
+ *
7
+ * Only a save writes. Leaving the page drops every staged edit, so the form
8
+ * discards on unmount and offers no discard control. A form whose namespace
9
+ * the Host stopped serving says so in place of its controls rather than
10
+ * showing fields nothing would accept.
11
+ */
12
+ import { type ReactNode } from 'react';
13
+ import type { SettingsFormShell } from './form-model.ts';
14
+ /** The copy the form frame renders, from the owning plugin's dictionary. */
15
+ export interface SettingsFormLabels {
16
+ /** Shown in place of the controls while the namespace is not served. */
17
+ unavailable: string;
18
+ /** Shown over the controls while the document is read-only. */
19
+ readOnly: string;
20
+ /** Shown beside the save after a save the Host did not accept. */
21
+ saveFailed: string;
22
+ /** The save control. */
23
+ save: string;
24
+ /** The save control while a save is crossing the wire. */
25
+ saving: string;
26
+ }
27
+ /** Form chrome shared by every settings page. */
28
+ export interface SettingsFormProps {
29
+ /** The frame's copy. */
30
+ labels: SettingsFormLabels;
31
+ /** The form state: availability, writability, and what a save would do. */
32
+ state: SettingsFormShell;
33
+ /** Write every staged edit. */
34
+ onSave: () => void;
35
+ /** Drop every staged edit; the form calls it when it leaves the page. */
36
+ onDiscard: () => void;
37
+ /** The plugin's controls. */
38
+ children: ReactNode;
39
+ }
40
+ /**
41
+ * Render one plugin's settings form.
42
+ * @param props - the form's copy and state, its controls, and the save and discard actions.
43
+ * @returns the form, or the unavailable line while the namespace is not served.
44
+ */
45
+ export declare function SettingsForm(props: SettingsFormProps): import("react").JSX.Element;
46
+ //# sourceMappingURL=SettingsForm.d.ts.map
@@ -0,0 +1,70 @@
1
+ /**
2
+ * The controls of a settings form. Each renders one field's label, its staged
3
+ * text, whether saving would leave an override, and — when one stands — the
4
+ * reset that stages a clear back to the composition layer. Nothing here
5
+ * writes: a control reports what the user typed, and the form's save is the
6
+ * single point where a draft becomes a document mutation.
7
+ */
8
+ import { type ReactNode } from 'react';
9
+ /** What every settings field control needs regardless of its value type. */
10
+ export interface SettingsFieldProps {
11
+ /** Stable id associating the label with its control. */
12
+ id: string;
13
+ /** Visible label. */
14
+ label: string;
15
+ /** One-line explanation rendered under the control. */
16
+ hint: string;
17
+ /** Draft text this control renders. */
18
+ text: string;
19
+ /** True when saving would leave a user-layer entry for this field. */
20
+ overridden: boolean;
21
+ /** True when the draft is not a value this field accepts. */
22
+ invalid: boolean;
23
+ /** Copy for the overridden badge. */
24
+ overriddenLabel: string;
25
+ /** Copy for the reset control. */
26
+ resetLabel: string;
27
+ /** Copy shown in place of the hint while the draft is invalid. */
28
+ invalidLabel: string;
29
+ /** Disables every control (read-only document, or an unavailable namespace). */
30
+ disabled: boolean;
31
+ /** Stage draft text. */
32
+ onEdit: (text: string) => void;
33
+ /** Stage a clear so the field re-inherits the composition layer. */
34
+ onReset: () => void;
35
+ }
36
+ /**
37
+ * A staged value field. `numeric` only hints the keypad: which drafts a field
38
+ * accepts is decided by its spec, so the control never silently rewrites what
39
+ * the user typed.
40
+ * @param props - the field's copy, its staged text, and the edit actions.
41
+ * @returns the labelled control.
42
+ */
43
+ export declare function SettingsValueField(props: Omit<SettingsFieldProps, 'hint'> & {
44
+ /** Optional explanation shown below the input. */
45
+ hint?: string;
46
+ /** Rules disclosed by the information button beside the label. */
47
+ help?: {
48
+ label: string;
49
+ content: ReactNode;
50
+ };
51
+ /** Hints a numeric keypad without narrowing what the control accepts. */
52
+ numeric?: boolean;
53
+ /** Placeholder shown while the draft is empty. */
54
+ placeholder?: string;
55
+ }): import("react").JSX.Element;
56
+ /**
57
+ * A write-only credential control. The value never rides a response, so the
58
+ * control reports only whether one is configured and starts blank; a blank
59
+ * draft writes nothing, which keeps the stored key rather than clearing it.
60
+ * The control asks browsers not to autofill saved login passwords.
61
+ * @param props - the field's copy, its staged text, and the configured state.
62
+ * @returns the labelled control.
63
+ */
64
+ export declare function SettingsSecretField(props: Pick<SettingsFieldProps, 'id' | 'label' | 'hint' | 'text' | 'disabled' | 'onEdit'> & {
65
+ /** Whether the Host reports a configured credential for this reference. */
66
+ configured: boolean;
67
+ /** Copy describing the configured state. */
68
+ stateLabel: string;
69
+ }): import("react").JSX.Element;
70
+ //# sourceMappingURL=fields.d.ts.map
@@ -0,0 +1,214 @@
1
+ /**
2
+ * The staged form model behind a plugin's settings page.
3
+ *
4
+ * A card stages what the user types and writes it only when they save. Each
5
+ * settings write is a durable, revision-fenced document mutation, so a control
6
+ * that committed as it settled turned one edit into a write the user never
7
+ * asked for and could not preview; staged text makes what is on screen exactly
8
+ * what a save would store.
9
+ *
10
+ * A field shows its effective value — the user layer over the composition
11
+ * layer over the schema default — and whether the user layer carries it. That
12
+ * presence, not a value comparison, is what marks a field overridden: an
13
+ * override equal to the composition default is still an override.
14
+ */
15
+ import { type SnapshotStore } from '@qilin-agent/client-store';
16
+ /** What the model reads of one Host entry's form. */
17
+ export interface SettingsFormScopeSnapshot<T> {
18
+ /** `ready` while the Host serves the entry to this client; the form renders nothing otherwise. */
19
+ status: 'loading' | 'ready' | 'unavailable';
20
+ /** Last accepted schema-resolved section; undefined before the first acceptance. */
21
+ value: T | undefined;
22
+ /** Composition layer the value resolves over: what a field reverts to once cleared. */
23
+ base: unknown;
24
+ /** Raw user layer as stored; a field's PRESENCE here is what marks it overridden. */
25
+ user: unknown;
26
+ /** Whether the Host document accepts writes. */
27
+ writable: boolean;
28
+ /** Revision the snapshot was read at; a save fences its mutation with the revision its drafts started from. */
29
+ revision: number | undefined;
30
+ }
31
+ /** One path edit a save sends, as the shared configuration form's `mutate` accepts it. */
32
+ export type SettingsFormPathOp = {
33
+ op: 'set';
34
+ path: readonly string[];
35
+ value: unknown;
36
+ } | {
37
+ op: 'unset';
38
+ path: readonly string[];
39
+ };
40
+ /** The entry form the model stages over: the reads and the atomic write of the form `ui-settings` shares per Host entry. */
41
+ export interface SettingsFormScope<T> {
42
+ /** @returns the current sync snapshot. */
43
+ getSnapshot(): SettingsFormScopeSnapshot<T>;
44
+ /**
45
+ * Observe snapshot replacements.
46
+ * @param listener - invoked after each snapshot change.
47
+ * @returns the disposer removing this listener.
48
+ */
49
+ subscribe(listener: () => void): () => void;
50
+ /**
51
+ * Apply ordered field edits in one revision-fenced write.
52
+ * @param ops - the edits, in staging order.
53
+ * @param expectedRevision - the revision the drafts were staged against, when known.
54
+ * @returns true for Host acceptance, false for refusal, after any recovery read.
55
+ */
56
+ mutate(ops: readonly SettingsFormPathOp[], expectedRevision?: number): Promise<boolean>;
57
+ }
58
+ /** The write one field's staged text performs when the card is saved. */
59
+ export type SettingsFieldWrite = {
60
+ kind: 'set';
61
+ value: unknown;
62
+ } | {
63
+ kind: 'clear';
64
+ };
65
+ /** How one section field converts between its stored value and its draft text. */
66
+ export interface SettingsFieldSpec {
67
+ /** Field name inside the namespace section. */
68
+ field: string;
69
+ /** Render a stored value as draft text; the empty string when the section carries none. */
70
+ format: (value: unknown) => string;
71
+ /**
72
+ * The write this draft text stages, or undefined when the text is not a
73
+ * value this field accepts — which blocks the save rather than discarding it.
74
+ */
75
+ parse: (text: string) => SettingsFieldWrite | undefined;
76
+ }
77
+ /**
78
+ * A control whose value is written outside the settings section. A credential
79
+ * literal never rides a response, so its draft has nothing to seed from: it is
80
+ * blank until typed, and a blank draft writes nothing.
81
+ */
82
+ export interface SettingsSecretSpec {
83
+ /** Field name addressing this control inside the card's form. */
84
+ field: string;
85
+ /** Write the staged text; resolves to whether the Host accepted it. */
86
+ write: (text: string) => Promise<boolean>;
87
+ }
88
+ /** One field as a card's control renders it. */
89
+ export interface SettingsFieldState {
90
+ /** Draft text the control renders. */
91
+ text: string;
92
+ /**
93
+ * Whether saving would leave a user-layer entry for this field. A staged
94
+ * edit answers for itself, so the badge previews the save rather than
95
+ * reporting a state the pending edit already contradicts.
96
+ */
97
+ overridden: boolean;
98
+ /** Whether the draft is not a value this field accepts, which blocks saving. */
99
+ invalid: boolean;
100
+ }
101
+ /** Form state every plugin card shares. */
102
+ export interface SettingsFormShell {
103
+ /** False while the namespace is not served to this client; the card renders nothing. */
104
+ available: boolean;
105
+ /** Whether the Host document accepts writes. */
106
+ writable: boolean;
107
+ /** Whether the form holds edits that a save would write. */
108
+ dirty: boolean;
109
+ /** Whether any staged draft is invalid, which blocks the save. */
110
+ invalid: boolean;
111
+ /** Whether a save is crossing the wire. */
112
+ saving: boolean;
113
+ /** Whether the last save did not land as staged; cleared by the next edit or save. */
114
+ failed: boolean;
115
+ }
116
+ /** The write actions every plugin card's slot entry injects. */
117
+ export interface SettingsFormActions {
118
+ /** Stage draft text for one field. */
119
+ edit: (field: string, text: string) => void;
120
+ /** Stage a clear, so saving lets the field re-inherit the composition layer. */
121
+ resetField: (field: string) => void;
122
+ /** Write every staged edit, then re-seed from what the Host accepted. */
123
+ save: () => void;
124
+ /** Drop every staged edit. */
125
+ discard: () => void;
126
+ }
127
+ /**
128
+ * A whole-number field. An empty draft clears the field; any other draft that
129
+ * is not a finite number blocks the save.
130
+ * @param field - field name inside the namespace section.
131
+ * @returns the field's conversion spec.
132
+ */
133
+ export declare function settingsNumberField(field: string): SettingsFieldSpec;
134
+ /**
135
+ * A free-text field. An empty draft clears the field, so emptying the control
136
+ * and saving is the same gesture as resetting it.
137
+ * @param field - field name inside the namespace section.
138
+ * @returns the field's conversion spec.
139
+ */
140
+ export declare function settingsTextField(field: string): SettingsFieldSpec;
141
+ /**
142
+ * Stages one card's edits over one settings namespace and writes them on save.
143
+ *
144
+ * The form publishes through a snapshot store because slot components read
145
+ * through a snapshot selector, while both the scope and the local drafts
146
+ * change underneath; every projection is rebuilt from the two together.
147
+ */
148
+ export declare class SettingsFormModel<T> {
149
+ private readonly scope;
150
+ private readonly specs;
151
+ private readonly secretSpecs;
152
+ private readonly staged;
153
+ private readonly listeners;
154
+ private baseline;
155
+ private readonly unsubscribe;
156
+ private saving;
157
+ private failed;
158
+ /**
159
+ * @param scope - the shared configuration form for this card's namespace.
160
+ * @param specs - the section fields this card edits.
161
+ * @param secrets - the card's write-only controls, written outside the section.
162
+ */
163
+ constructor(scope: SettingsFormScope<T>, specs: SettingsFieldSpec[], secrets?: SettingsSecretSpec[]);
164
+ /**
165
+ * Publish a projection of this form, rebuilt whenever the scope or a draft changes.
166
+ * @param project - build the card's state from the form's current reads.
167
+ * @returns the store the card's component reads through its bound selector.
168
+ */
169
+ bind<S>(project: () => S): SnapshotStore<S>;
170
+ /**
171
+ * Read the card-level state: what the Host serves, and what a save would do.
172
+ * @returns the form state every card shares.
173
+ */
174
+ shell(): SettingsFormShell;
175
+ /**
176
+ * Read one control's state.
177
+ * @param field - field name of a section field or of a write-only control.
178
+ * @returns the draft text, whether a save would leave an override, and whether it is invalid.
179
+ */
180
+ field(field: string): SettingsFieldState;
181
+ /**
182
+ * Build the edit, reset, save, and discard actions bound to this form.
183
+ * @returns the actions a card's slot entry injects.
184
+ */
185
+ actions(): SettingsFormActions;
186
+ /**
187
+ * Write every staged edit, then re-seed from what the Host accepted.
188
+ *
189
+ * The Host is the only authority on whether a value was accepted — its
190
+ * validators own the constraints no schema can express — so the outcome is
191
+ * read back from the section rather than predicted here. A save that did not
192
+ * land keeps its drafts, so the user can correct them instead of retyping.
193
+ * @returns settlement after every write and the read-back.
194
+ */
195
+ save(): Promise<void>;
196
+ /** Release the form's accepted-value subscription. */
197
+ dispose(): void;
198
+ /**
199
+ * Every staged edit a save would write. An entry whose draft is not a value
200
+ * its field accepts carries no write: the form is still dirty, and the save
201
+ * refuses rather than dropping the edit.
202
+ * @returns the planned writes, in the order the fields were staged.
203
+ */
204
+ private plan;
205
+ private stage;
206
+ private spec;
207
+ private snapshotOf;
208
+ private sectionValue;
209
+ private baseValue;
210
+ private userLayer;
211
+ private stored;
212
+ private publish;
213
+ }
214
+ //# sourceMappingURL=form-model.d.ts.map
@@ -0,0 +1,14 @@
1
+ /** The copy-feedback hook's return: the transient flag and the copy handler. */
2
+ export interface CopyFeedback {
3
+ /** True for {@link COPIED_FEEDBACK_MS} after a successful write; render the success label off it. */
4
+ copied: boolean;
5
+ /** Copy the hook's text; no-op while `copied` is still true, silent on a refused write. */
6
+ onCopy: () => void;
7
+ }
8
+ /**
9
+ * Copy `text` to the clipboard with one-second success feedback.
10
+ * @param text - the text to write on copy.
11
+ * @returns the `copied` flag and the `onCopy` handler.
12
+ */
13
+ export declare function useCopyFeedback(text: string): CopyFeedback;
14
+ //# sourceMappingURL=use-copy-feedback.d.ts.map
@@ -0,0 +1,11 @@
1
+ import type { RefObject } from 'react';
2
+ /**
3
+ * Clamp a bottom-anchored overlay's max-height to the viewport.
4
+ * @param ref - the overlay element; a null current (overlay closed) skips measuring.
5
+ * @param cap - design max-height in px (the clamp never exceeds it).
6
+ * @param signal - re-measure trigger: pass the overlay's render state so anchor
7
+ * moves (composer growth) re-fit; resize/scroll re-fit while mounted.
8
+ * @returns the max-height to apply inline, in px.
9
+ */
10
+ export declare function useAnchoredMaxHeight(ref: RefObject<HTMLElement>, cap: number, signal: unknown): number;
11
+ //# sourceMappingURL=useAnchoredMaxHeight.d.ts.map
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Keep a fixed-position floating element anchored to a trigger.
3
+ *
4
+ * A portaled panel is positioned from its anchor's viewport rect, which stops
5
+ * being true the moment anything scrolls or the window resizes. This owns that
6
+ * one concern: measure the anchor, offset the panel below or above it, clamp
7
+ * the result inside the viewport, and re-run on scroll (capture phase, so
8
+ * scrollers nested inside the page are caught too), on resize, and on the
9
+ * panel's own size changes while the element is open.
10
+ * @module @qilin-agent/client-ui-primitives/useAnchoredPosition
11
+ */
12
+ import { type CSSProperties, type RefObject } from 'react';
13
+ /** Inputs for {@link useAnchoredPosition}. */
14
+ export interface AnchoredPositionOptions {
15
+ /** Whether the floating element is mounted and should track its anchor. */
16
+ open: boolean;
17
+ /** The element the panel is placed from. */
18
+ anchorRef: RefObject<HTMLElement | null>;
19
+ /** The floating element, measured so the clamp uses real dimensions. */
20
+ panelRef: RefObject<HTMLElement | null>;
21
+ /** Which anchor edge the panel hangs from: below it (`bottom`, the default) or above it (`top`). */
22
+ side?: 'top' | 'bottom';
23
+ /** Distance kept between the anchor edge named by `side` and the panel. */
24
+ gap: number;
25
+ /** Distance kept between the panel and each viewport edge. */
26
+ margin: number;
27
+ }
28
+ /**
29
+ * Track an anchor and return the panel's fixed coordinates.
30
+ * @param options - the open state, the two refs, the placement side, and the gap/margin distances.
31
+ * @returns `left`/`top` for the panel, or `null` before the first measurement.
32
+ */
33
+ export declare function useAnchoredPosition(options: AnchoredPositionOptions): CSSProperties | null;
34
+ //# sourceMappingURL=useAnchoredPosition.d.ts.map
@@ -0,0 +1,11 @@
1
+ import type { RefObject } from 'react';
2
+ /**
3
+ * Close an open popover when a pointerdown lands outside its root element.
4
+ * @param root - element containing both the trigger and the open surface.
5
+ * @param open - whether the surface is showing; false detaches the listener.
6
+ * @param setOpen - state setter invoked with false on an outside pointerdown.
7
+ * @param portal - surface portaled outside the root (a `document.body` dialog)
8
+ * that also counts as inside; omit when the root contains the whole popover.
9
+ */
10
+ export declare function useDismissOnOutsidePointer(root: RefObject<HTMLElement | null>, open: boolean, setOpen: (open: boolean) => void, portal?: RefObject<HTMLElement | null>): void;
11
+ //# sourceMappingURL=useDismissOnOutsidePointer.d.ts.map
@@ -0,0 +1,27 @@
1
+ import type { RefObject } from 'react';
2
+ /** Dialog and menu elements whose document order determines foreground shortcut ownership. */
3
+ export declare const modalSelector = "[role=\"dialog\"][aria-modal=\"true\"], [role=\"menu\"]";
4
+ /**
5
+ * Request closure of the foreground registered modal using its current onClose callback.
6
+ * A newer menu or unregistered dialog blocks dismissal of the modal behind it.
7
+ * @param document - product document whose modal owns the close command.
8
+ */
9
+ export declare function closeTopModal(document: Document): void;
10
+ /**
11
+ * Whether an anchor belongs behind the current modal and must yield keyboard input.
12
+ * @param anchor - local control owning the input handler.
13
+ * @returns true when another modal owns the foreground.
14
+ */
15
+ export declare function isBehindModal(anchor: HTMLElement | null): boolean;
16
+ /**
17
+ * Give only the top modal Escape and Tab ownership, then restore its previous focus.
18
+ * Automatic entry and return focus omit outlines; keyboard traversal retains its indicators.
19
+ * Controls mounted with the dialog use data-modal-autofocus for initial focus;
20
+ * React autoFocus runs before this layer can capture the invoking control.
21
+ * Local menus handle their Escape during capture before this bubble listener.
22
+ * @param dialog - mounted dialog element.
23
+ * @param open - whether this layer is active.
24
+ * @param onClose - top-layer Escape or application close action.
25
+ */
26
+ export declare function useModalLayer(dialog: RefObject<HTMLElement | null>, open: boolean, onClose: () => void): void;
27
+ //# sourceMappingURL=useModalLayer.d.ts.map
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Display projection of reference forms in sent user text (bubble and queue
3
+ * rows). The logged model text remains the single truth; this is presentation
4
+ * only, and every part renders inline so a single-line message never breaks
5
+ * across lines. Four decoration sources, by precedence: the wire session form
6
+ * `@[label](qilin-session:...)` folds to its label; exact session labels
7
+ * supplied by an adjacent recall decorate their bare `@label` mention; plain
8
+ * `@name` word-boundary tokens decorate by shape alone; and a plain `/name`
9
+ * token decorates only when the caller names it — a skill the host actually
10
+ * loaded for that message (ui-chat reads the step's `skill-invocation`
11
+ * injections) or the command a command-input bubble echoes — so `/123` or a
12
+ * stray `/word` stays plain text. A `/name` token is whitespace-bounded like
13
+ * the host skill gesture (`qilin-tool-skill`): it ends at whitespace or the
14
+ * text end, so slash paths (`/nfs-hg/xxx`, `/plan.md`) and punctuation-glued
15
+ * tokens (`/plan。`) stay plain even for a loaded name.
16
+ */
17
+ import type { ReactNode } from 'react';
18
+ /** Optional navigation supplied by consumers that can preview references. */
19
+ export interface UserTextReferences {
20
+ /** Open a file path decoded from an `@` mention. */
21
+ openFile: (path: string) => void;
22
+ /** Open the source of a skill loaded for this message. */
23
+ openSkill: (name: string) => void;
24
+ }
25
+ /**
26
+ * Split one sent text into inline plain runs and reference chips.
27
+ * @param text - the logged model text of the message or queue row.
28
+ * @param sessionLabels - exact session mention labels associated by an adjacent recall.
29
+ * @param slashNames - names a `/name` token may decorate as: the skills the
30
+ * host loaded for this message, or the command a command bubble echoes
31
+ * (unsent queue rows pass none).
32
+ * @param slashKind - the chip kind those tokens render as.
33
+ * @param references - optional file and skill preview actions; session and command tokens stay labels.
34
+ * @returns inline nodes covering the whole text.
35
+ */
36
+ export declare function projectUserText(text: string, sessionLabels: readonly string[], slashNames?: readonly string[], slashKind?: 'skill' | 'command', references?: UserTextReferences): ReactNode;
37
+ //# sourceMappingURL=user-text.d.ts.map
@@ -0,0 +1,43 @@
1
+ /* Inline projection of sent user text: plain runs and reference chips flow in
2
+ the consumer's own line box (bubble or queue row); nothing here is block.
3
+ White-space policy stays with the consumer: the bubble wraps with pre-wrap,
4
+ the queue preview keeps its single nowrap/ellipsis line. */
5
+
6
+ .plainRun {
7
+ font-size: inherit;
8
+ line-height: inherit;
9
+ }
10
+
11
+ .refChip {
12
+ /* Plain inline, NOT inline-flex: a flex container takes its baseline from
13
+ its first flex item — the icon svg, which has no text baseline — so the
14
+ chip's label rode ~3px above the surrounding text in both surfaces. An
15
+ inline chip shares the consumer's baseline by construction. */
16
+ display: inline;
17
+ margin: 0 2px;
18
+ color: var(--qilin-alias-state-business-primary);
19
+ font-weight: 500;
20
+ white-space: nowrap;
21
+ }
22
+
23
+ /* Skill and command tokens read as code: the theme's code family at the
24
+ consumer's own size and line height, so the chip sits on the bubble line
25
+ like the plain runs around it. `@` chips keep the body face — a file or
26
+ session name is a label, not code. */
27
+ .slashChip {
28
+ font-family: var(--qilin-font-markdown-code-font-family);
29
+ }
30
+
31
+ /* Inline reference glyphs (always ReferenceIcon svgs) ride the consumer's own
32
+ font: 1em keeps the glyph at the text's size in the bubble (14px + user
33
+ setting), the queue preview's fixed 13px line, and any future consumer — a
34
+ px+delta size followed only the bubble axis and left the glyph oversized in
35
+ the queue row. */
36
+ .refIcon {
37
+ width: 1em;
38
+ height: 1em;
39
+ margin-right: 4px;
40
+ /* Optical centering against the text: drops the glyph below the baseline by
41
+ a font-relative amount, so it holds across the font axis. */
42
+ vertical-align: -0.125em;
43
+ }
package/package.json CHANGED
@@ -1,6 +1,66 @@
1
1
  {
2
2
  "name": "@qilin-agent/client-ui-primitives",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "description": "Pure React atoms for the qilin web UI: controls, icons, markdown, and JSON inspectors (zero cordis)",
4
+ "version": "3.1.4",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/kkutysllb/QiLin.git",
11
+ "directory": "packages/client/ui-primitives"
12
+ },
13
+ "engines": {
14
+ "node": "^22.19.0 || >=24.0.0"
15
+ },
16
+ "type": "module",
17
+ "main": "lib/index.js",
18
+ "types": "lib/types/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./lib/types/index.d.ts",
22
+ "default": "./lib/index.js"
23
+ },
24
+ "./src/*": "./src/*",
25
+ "./package.json": "./package.json"
26
+ },
27
+ "license": "MIT",
28
+ "devDependencies": {
29
+ "@shikijs/langs": "^4.3.1",
30
+ "@types/mdast": "^4.0.4",
31
+ "@types/react": "~18.3.1",
32
+ "@types/react-dom": "~18.3.0",
33
+ "anser": "^2.3.5",
34
+ "clsx": "^2.0.0",
35
+ "diff": "^9.0.0",
36
+ "katex": "^0.16.47",
37
+ "mdast-util-from-markdown": "^2.0.3",
38
+ "mdast-util-gfm": "^3.1.0",
39
+ "mdast-util-math": "^3.0.0",
40
+ "mermaid": "11.17.2",
41
+ "micromark-core-commonmark": "^2.0.3",
42
+ "micromark-extension-gfm": "^3.0.0",
43
+ "micromark-extension-math": "^3.1.0",
44
+ "micromark-factory-space": "^2.0.1",
45
+ "micromark-util-character": "^2.1.1",
46
+ "micromark-util-classify-character": "^2.0.1",
47
+ "micromark-util-sanitize-uri": "^2.0.1",
48
+ "micromark-util-symbol": "^2.0.1",
49
+ "micromark-util-types": "^2.0.2",
50
+ "react": "^18.2.0",
51
+ "react-dom": "^18.2.0",
52
+ "shiki": "^4.3.1",
53
+ "simple-icons": "16.31.0",
54
+ "@qilin-agent/kylin": "~4.0.3",
55
+ "@qilin-agent/client-store": "3.1.4",
56
+ "@qilin-agent/util-workspace-path": "3.1.4"
57
+ },
58
+ "files": [
59
+ "lib/index.js",
60
+ "lib/**/*.css",
61
+ "lib/types/**/*.d.ts"
62
+ ],
63
+ "peerDependencies": {
64
+ "@qilin-agent/kylin": "~4.0.3"
65
+ }
6
66
  }