@cognivo/components 0.8.0 → 0.8.2

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 (543) hide show
  1. package/dist/chunks/focus-trap-vlQwKK-3.js +82 -0
  2. package/dist/chunks/focus-trap-vlQwKK-3.js.map +1 -0
  3. package/dist/chunks/{premium.css-9I4kHrsl.js → premium.css-DHekUEUt.js} +25 -25
  4. package/dist/chunks/{premium.css-9I4kHrsl.js.map → premium.css-DHekUEUt.js.map} +1 -1
  5. package/dist/cognivo.min.js +3375 -5270
  6. package/dist/cognivo.min.js.map +1 -1
  7. package/dist/components/ai-ab-test/ai-ab-test.js +1 -1
  8. package/dist/components/ai-accessibility-report/ai-accessibility-report.d.ts.map +1 -1
  9. package/dist/components/ai-accessibility-report/ai-accessibility-report.js +14 -13
  10. package/dist/components/ai-accessibility-report/ai-accessibility-report.js.map +1 -1
  11. package/dist/components/ai-action-preview/ai-action-preview.d.ts.map +1 -1
  12. package/dist/components/ai-action-preview/ai-action-preview.js +15 -14
  13. package/dist/components/ai-action-preview/ai-action-preview.js.map +1 -1
  14. package/dist/components/ai-agent-card/ai-agent-card.js +1 -1
  15. package/dist/components/ai-agent-steps/ai-agent-steps.d.ts +8 -21
  16. package/dist/components/ai-agent-steps/ai-agent-steps.d.ts.map +1 -1
  17. package/dist/components/ai-agent-steps/ai-agent-steps.js +85 -139
  18. package/dist/components/ai-agent-steps/ai-agent-steps.js.map +1 -1
  19. package/dist/components/ai-alert-card/ai-alert-card.js +5 -5
  20. package/dist/components/ai-alert-card/ai-alert-card.js.map +1 -1
  21. package/dist/components/ai-analytics-chart/ai-analytics-chart.d.ts +0 -13
  22. package/dist/components/ai-analytics-chart/ai-analytics-chart.d.ts.map +1 -1
  23. package/dist/components/ai-analytics-chart/ai-analytics-chart.js +75 -125
  24. package/dist/components/ai-analytics-chart/ai-analytics-chart.js.map +1 -1
  25. package/dist/components/ai-annotation/ai-annotation.js +2 -2
  26. package/dist/components/ai-annotation/ai-annotation.js.map +1 -1
  27. package/dist/components/ai-api-key-manager/ai-api-key-manager.d.ts +0 -9
  28. package/dist/components/ai-api-key-manager/ai-api-key-manager.d.ts.map +1 -1
  29. package/dist/components/ai-api-key-manager/ai-api-key-manager.js +115 -276
  30. package/dist/components/ai-api-key-manager/ai-api-key-manager.js.map +1 -1
  31. package/dist/components/ai-app-sidebar/ai-app-sidebar.js +13 -13
  32. package/dist/components/ai-app-sidebar/ai-app-sidebar.js.map +1 -1
  33. package/dist/components/ai-assistant-widget/ai-assistant-widget.d.ts.map +1 -1
  34. package/dist/components/ai-assistant-widget/ai-assistant-widget.js +5 -2
  35. package/dist/components/ai-assistant-widget/ai-assistant-widget.js.map +1 -1
  36. package/dist/components/ai-audio-player/ai-audio-player.d.ts.map +1 -1
  37. package/dist/components/ai-audio-player/ai-audio-player.js +23 -19
  38. package/dist/components/ai-audio-player/ai-audio-player.js.map +1 -1
  39. package/dist/components/ai-avatar/ai-avatar.js +1 -1
  40. package/dist/components/ai-badge/ai-badge.js +1 -1
  41. package/dist/components/ai-batch-progress/ai-batch-progress.js +6 -6
  42. package/dist/components/ai-batch-progress/ai-batch-progress.js.map +1 -1
  43. package/dist/components/ai-cache-indicator/ai-cache-indicator.d.ts +0 -13
  44. package/dist/components/ai-cache-indicator/ai-cache-indicator.d.ts.map +1 -1
  45. package/dist/components/ai-cache-indicator/ai-cache-indicator.js +90 -185
  46. package/dist/components/ai-cache-indicator/ai-cache-indicator.js.map +1 -1
  47. package/dist/components/ai-capture-flow/ai-capture-flow.js +21 -21
  48. package/dist/components/ai-capture-flow/ai-capture-flow.js.map +1 -1
  49. package/dist/components/ai-changelog/ai-changelog.js +26 -26
  50. package/dist/components/ai-changelog/ai-changelog.js.map +1 -1
  51. package/dist/components/ai-chart-summary/ai-chart-summary.d.ts +0 -6
  52. package/dist/components/ai-chart-summary/ai-chart-summary.d.ts.map +1 -1
  53. package/dist/components/ai-chart-summary/ai-chart-summary.js +100 -103
  54. package/dist/components/ai-chart-summary/ai-chart-summary.js.map +1 -1
  55. package/dist/components/ai-chat/ai-chat.d.ts.map +1 -1
  56. package/dist/components/ai-chat/ai-chat.js +9 -3
  57. package/dist/components/ai-chat/ai-chat.js.map +1 -1
  58. package/dist/components/ai-citation/ai-citation.d.ts +0 -6
  59. package/dist/components/ai-citation/ai-citation.d.ts.map +1 -1
  60. package/dist/components/ai-citation/ai-citation.js +64 -90
  61. package/dist/components/ai-citation/ai-citation.js.map +1 -1
  62. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.d.ts +1 -27
  63. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.d.ts.map +1 -1
  64. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js +114 -260
  65. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js.map +1 -1
  66. package/dist/components/ai-command-palette/ai-command-palette.js +1 -1
  67. package/dist/components/ai-confidence-badge/ai-confidence-badge.d.ts +11 -9
  68. package/dist/components/ai-confidence-badge/ai-confidence-badge.d.ts.map +1 -1
  69. package/dist/components/ai-confidence-badge/ai-confidence-badge.js +183 -101
  70. package/dist/components/ai-confidence-badge/ai-confidence-badge.js.map +1 -1
  71. package/dist/components/ai-confidence-slider/ai-confidence-slider.js +27 -27
  72. package/dist/components/ai-confidence-slider/ai-confidence-slider.js.map +1 -1
  73. package/dist/components/ai-consent-manager/ai-consent-manager.js +2 -2
  74. package/dist/components/ai-consent-manager/ai-consent-manager.js.map +1 -1
  75. package/dist/components/ai-context-window/ai-context-window.js +19 -19
  76. package/dist/components/ai-context-window/ai-context-window.js.map +1 -1
  77. package/dist/components/ai-copy-button/ai-copy-button.js +4 -4
  78. package/dist/components/ai-copy-button/ai-copy-button.js.map +1 -1
  79. package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js +14 -14
  80. package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js.map +1 -1
  81. package/dist/components/ai-data-card/ai-data-card.js +2 -2
  82. package/dist/components/ai-data-card/ai-data-card.js.map +1 -1
  83. package/dist/components/ai-data-lineage/ai-data-lineage.js +6 -6
  84. package/dist/components/ai-data-lineage/ai-data-lineage.js.map +1 -1
  85. package/dist/components/ai-data-preview/ai-data-preview.d.ts +0 -7
  86. package/dist/components/ai-data-preview/ai-data-preview.d.ts.map +1 -1
  87. package/dist/components/ai-data-preview/ai-data-preview.js +130 -267
  88. package/dist/components/ai-data-preview/ai-data-preview.js.map +1 -1
  89. package/dist/components/ai-data-table/ai-data-table.js +9 -9
  90. package/dist/components/ai-data-table/ai-data-table.js.map +1 -1
  91. package/dist/components/ai-debug-console/ai-debug-console.d.ts +1 -13
  92. package/dist/components/ai-debug-console/ai-debug-console.d.ts.map +1 -1
  93. package/dist/components/ai-debug-console/ai-debug-console.js +134 -340
  94. package/dist/components/ai-debug-console/ai-debug-console.js.map +1 -1
  95. package/dist/components/ai-detection-canvas/ai-detection-canvas.js +2 -2
  96. package/dist/components/ai-detection-canvas/ai-detection-canvas.js.map +1 -1
  97. package/dist/components/ai-diff-panel/ai-diff-panel.js +1 -1
  98. package/dist/components/ai-embedding-viz/ai-embedding-viz.js +4 -4
  99. package/dist/components/ai-embedding-viz/ai-embedding-viz.js.map +1 -1
  100. package/dist/components/ai-empty-state/ai-empty-state.js +1 -1
  101. package/dist/components/ai-error-boundary/ai-error-boundary.d.ts.map +1 -1
  102. package/dist/components/ai-error-boundary/ai-error-boundary.js +26 -21
  103. package/dist/components/ai-error-boundary/ai-error-boundary.js.map +1 -1
  104. package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js +5 -5
  105. package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js.map +1 -1
  106. package/dist/components/ai-feature-flag/ai-feature-flag.d.ts +0 -14
  107. package/dist/components/ai-feature-flag/ai-feature-flag.d.ts.map +1 -1
  108. package/dist/components/ai-feature-flag/ai-feature-flag.js +181 -322
  109. package/dist/components/ai-feature-flag/ai-feature-flag.js.map +1 -1
  110. package/dist/components/ai-feedback/ai-feedback.d.ts.map +1 -1
  111. package/dist/components/ai-feedback/ai-feedback.js +10 -5
  112. package/dist/components/ai-feedback/ai-feedback.js.map +1 -1
  113. package/dist/components/ai-file-upload/ai-file-upload.js +1 -1
  114. package/dist/components/ai-form-generator/ai-form-generator.js +1 -1
  115. package/dist/components/ai-guardrail/ai-guardrail.js +2 -2
  116. package/dist/components/ai-guardrail/ai-guardrail.js.map +1 -1
  117. package/dist/components/ai-heatmap/ai-heatmap.js +1 -1
  118. package/dist/components/ai-insight-card/ai-insight-card.js +4 -4
  119. package/dist/components/ai-insight-card/ai-insight-card.js.map +1 -1
  120. package/dist/components/ai-json-viewer/ai-json-viewer.js +13 -13
  121. package/dist/components/ai-json-viewer/ai-json-viewer.js.map +1 -1
  122. package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js +24 -24
  123. package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js.map +1 -1
  124. package/dist/components/ai-kpi-grid/ai-kpi-grid.js +2 -2
  125. package/dist/components/ai-kpi-grid/ai-kpi-grid.js.map +1 -1
  126. package/dist/components/ai-labeling-board/ai-labeling-board.js +11 -11
  127. package/dist/components/ai-labeling-board/ai-labeling-board.js.map +1 -1
  128. package/dist/components/ai-memory-panel/ai-memory-panel.js +7 -7
  129. package/dist/components/ai-memory-panel/ai-memory-panel.js.map +1 -1
  130. package/dist/components/ai-model-comparison/ai-model-comparison.js +2 -2
  131. package/dist/components/ai-model-comparison/ai-model-comparison.js.map +1 -1
  132. package/dist/components/ai-model-selector/ai-model-selector.js +7 -7
  133. package/dist/components/ai-model-selector/ai-model-selector.js.map +1 -1
  134. package/dist/components/ai-notification-center/ai-notification-center.js +27 -27
  135. package/dist/components/ai-notification-center/ai-notification-center.js.map +1 -1
  136. package/dist/components/ai-onboarding/ai-onboarding.js +5 -5
  137. package/dist/components/ai-onboarding/ai-onboarding.js.map +1 -1
  138. package/dist/components/ai-permission-gate/ai-permission-gate.js +1 -1
  139. package/dist/components/ai-personalization-dash/ai-personalization-dash.js +1 -1
  140. package/dist/components/ai-presence/ai-presence.js +25 -25
  141. package/dist/components/ai-presence/ai-presence.js.map +1 -1
  142. package/dist/components/ai-progress-steps/ai-progress-steps.js +11 -11
  143. package/dist/components/ai-progress-steps/ai-progress-steps.js.map +1 -1
  144. package/dist/components/ai-prompt-editor/ai-prompt-editor.js +1 -1
  145. package/dist/components/ai-prompt-template/ai-prompt-template.js +29 -29
  146. package/dist/components/ai-prompt-template/ai-prompt-template.js.map +1 -1
  147. package/dist/components/ai-rag-panel/ai-rag-panel.js +4 -4
  148. package/dist/components/ai-rag-panel/ai-rag-panel.js.map +1 -1
  149. package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js +16 -16
  150. package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js.map +1 -1
  151. package/dist/components/ai-result-panel/ai-result-panel.js +1 -1
  152. package/dist/components/ai-reveal-animation/ai-reveal-animation.js +3 -3
  153. package/dist/components/ai-reveal-animation/ai-reveal-animation.js.map +1 -1
  154. package/dist/components/ai-reward-signal/ai-reward-signal.js +1 -1
  155. package/dist/components/ai-rich-message/ai-rich-message.d.ts.map +1 -1
  156. package/dist/components/ai-rich-message/ai-rich-message.js +37 -30
  157. package/dist/components/ai-rich-message/ai-rich-message.js.map +1 -1
  158. package/dist/components/ai-scenario-panel/ai-scenario-panel.js +10 -10
  159. package/dist/components/ai-scenario-panel/ai-scenario-panel.js.map +1 -1
  160. package/dist/components/ai-search/ai-search.js +1 -1
  161. package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js +3 -3
  162. package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js.map +1 -1
  163. package/dist/components/ai-sidebar/ai-sidebar.js +1 -1
  164. package/dist/components/ai-similarity-card/ai-similarity-card.js +1 -1
  165. package/dist/components/ai-source-graph/ai-source-graph.js +2 -2
  166. package/dist/components/ai-source-graph/ai-source-graph.js.map +1 -1
  167. package/dist/components/ai-status-page/ai-status-page.js +15 -15
  168. package/dist/components/ai-status-page/ai-status-page.js.map +1 -1
  169. package/dist/components/ai-streaming-text/ai-streaming-text.js +1 -1
  170. package/dist/components/ai-test-runner/ai-test-runner.d.ts +0 -8
  171. package/dist/components/ai-test-runner/ai-test-runner.d.ts.map +1 -1
  172. package/dist/components/ai-test-runner/ai-test-runner.js +100 -257
  173. package/dist/components/ai-test-runner/ai-test-runner.js.map +1 -1
  174. package/dist/components/ai-thinking/ai-thinking.js +1 -1
  175. package/dist/components/ai-timeline/ai-timeline.js +2 -2
  176. package/dist/components/ai-timeline/ai-timeline.js.map +1 -1
  177. package/dist/components/ai-token-tracker/ai-token-tracker.js +3 -3
  178. package/dist/components/ai-token-tracker/ai-token-tracker.js.map +1 -1
  179. package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js +23 -23
  180. package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js.map +1 -1
  181. package/dist/components/ai-tool-indicator/ai-tool-indicator.js +3 -3
  182. package/dist/components/ai-tool-indicator/ai-tool-indicator.js.map +1 -1
  183. package/dist/components/ai-transform-slider/ai-transform-slider.js +1 -1
  184. package/dist/components/ai-translation-panel/ai-translation-panel.js +2 -2
  185. package/dist/components/ai-translation-panel/ai-translation-panel.js.map +1 -1
  186. package/dist/components/ai-usage-meter/ai-usage-meter.js +1 -1
  187. package/dist/components/ai-validation-checklist/ai-validation-checklist.d.ts +1 -11
  188. package/dist/components/ai-validation-checklist/ai-validation-checklist.d.ts.map +1 -1
  189. package/dist/components/ai-validation-checklist/ai-validation-checklist.js +133 -187
  190. package/dist/components/ai-validation-checklist/ai-validation-checklist.js.map +1 -1
  191. package/dist/components/ai-version-selector/ai-version-selector.d.ts +0 -4
  192. package/dist/components/ai-version-selector/ai-version-selector.d.ts.map +1 -1
  193. package/dist/components/ai-version-selector/ai-version-selector.js +189 -210
  194. package/dist/components/ai-version-selector/ai-version-selector.js.map +1 -1
  195. package/dist/components/ai-voice-panel/ai-voice-panel.js +28 -28
  196. package/dist/components/ai-voice-panel/ai-voice-panel.js.map +1 -1
  197. package/dist/components/ai-webhook-config/ai-webhook-config.d.ts +0 -17
  198. package/dist/components/ai-webhook-config/ai-webhook-config.d.ts.map +1 -1
  199. package/dist/components/ai-webhook-config/ai-webhook-config.js +281 -221
  200. package/dist/components/ai-webhook-config/ai-webhook-config.js.map +1 -1
  201. package/dist/components/ai-workflow-builder/ai-workflow-builder.js +2 -2
  202. package/dist/components/ai-workflow-builder/ai-workflow-builder.js.map +1 -1
  203. package/dist/components/bias-anchoring/bias-anchoring.js +1 -1
  204. package/dist/components/bias-authority/bias-authority.js +1 -1
  205. package/dist/components/bias-commitment/bias-commitment.js +1 -1
  206. package/dist/components/bias-reciprocity/bias-reciprocity.js +1 -1
  207. package/dist/components/bias-scarcity/bias-scarcity.js +1 -1
  208. package/dist/components/bias-social-proof/bias-social-proof.js +1 -1
  209. package/dist/components/cg-accordion/cg-accordion.d.ts.map +1 -1
  210. package/dist/components/cg-accordion/cg-accordion.js +51 -43
  211. package/dist/components/cg-accordion/cg-accordion.js.map +1 -1
  212. package/dist/components/cg-alert-dialog/cg-alert-dialog.js +18 -18
  213. package/dist/components/cg-alert-dialog/cg-alert-dialog.js.map +1 -1
  214. package/dist/components/cg-aspect-ratio/cg-aspect-ratio.d.ts.map +1 -1
  215. package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js +25 -21
  216. package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js.map +1 -1
  217. package/dist/components/cg-autocomplete/cg-autocomplete.d.ts +1 -0
  218. package/dist/components/cg-autocomplete/cg-autocomplete.d.ts.map +1 -1
  219. package/dist/components/cg-autocomplete/cg-autocomplete.js +59 -43
  220. package/dist/components/cg-autocomplete/cg-autocomplete.js.map +1 -1
  221. package/dist/components/cg-avatar/cg-avatar.d.ts.map +1 -1
  222. package/dist/components/cg-avatar/cg-avatar.js +24 -24
  223. package/dist/components/cg-avatar/cg-avatar.js.map +1 -1
  224. package/dist/components/cg-avatar-group/cg-avatar-group.d.ts.map +1 -1
  225. package/dist/components/cg-avatar-group/cg-avatar-group.js +18 -12
  226. package/dist/components/cg-avatar-group/cg-avatar-group.js.map +1 -1
  227. package/dist/components/cg-badge/cg-badge.d.ts.map +1 -1
  228. package/dist/components/cg-badge/cg-badge.js +26 -20
  229. package/dist/components/cg-badge/cg-badge.js.map +1 -1
  230. package/dist/components/cg-badge-group/cg-badge-group.d.ts +0 -1
  231. package/dist/components/cg-badge-group/cg-badge-group.d.ts.map +1 -1
  232. package/dist/components/cg-badge-group/cg-badge-group.js +31 -29
  233. package/dist/components/cg-badge-group/cg-badge-group.js.map +1 -1
  234. package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js +21 -21
  235. package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js.map +1 -1
  236. package/dist/components/cg-button/cg-button.d.ts +5 -71
  237. package/dist/components/cg-button/cg-button.d.ts.map +1 -1
  238. package/dist/components/cg-button/cg-button.js +63 -172
  239. package/dist/components/cg-button/cg-button.js.map +1 -1
  240. package/dist/components/cg-button-group/cg-button-group.d.ts +2 -0
  241. package/dist/components/cg-button-group/cg-button-group.d.ts.map +1 -1
  242. package/dist/components/cg-button-group/cg-button-group.js +43 -29
  243. package/dist/components/cg-button-group/cg-button-group.js.map +1 -1
  244. package/dist/components/cg-calendar/cg-calendar.d.ts +4 -0
  245. package/dist/components/cg-calendar/cg-calendar.d.ts.map +1 -1
  246. package/dist/components/cg-calendar/cg-calendar.js +28 -12
  247. package/dist/components/cg-calendar/cg-calendar.js.map +1 -1
  248. package/dist/components/cg-callout/cg-callout.d.ts.map +1 -1
  249. package/dist/components/cg-callout/cg-callout.js +49 -48
  250. package/dist/components/cg-callout/cg-callout.js.map +1 -1
  251. package/dist/components/cg-card/cg-card.d.ts +9 -22
  252. package/dist/components/cg-card/cg-card.d.ts.map +1 -1
  253. package/dist/components/cg-card/cg-card.js +28 -56
  254. package/dist/components/cg-card/cg-card.js.map +1 -1
  255. package/dist/components/cg-carousel/cg-carousel.d.ts.map +1 -1
  256. package/dist/components/cg-carousel/cg-carousel.js +19 -13
  257. package/dist/components/cg-carousel/cg-carousel.js.map +1 -1
  258. package/dist/components/cg-chart/cg-chart.d.ts.map +1 -1
  259. package/dist/components/cg-chart/cg-chart.js +63 -58
  260. package/dist/components/cg-chart/cg-chart.js.map +1 -1
  261. package/dist/components/cg-checkbox/cg-checkbox.d.ts +0 -6
  262. package/dist/components/cg-checkbox/cg-checkbox.d.ts.map +1 -1
  263. package/dist/components/cg-checkbox/cg-checkbox.js +51 -51
  264. package/dist/components/cg-checkbox/cg-checkbox.js.map +1 -1
  265. package/dist/components/cg-chip/cg-chip.js +31 -31
  266. package/dist/components/cg-chip/cg-chip.js.map +1 -1
  267. package/dist/components/cg-code-block/cg-code-block.d.ts.map +1 -1
  268. package/dist/components/cg-code-block/cg-code-block.js +36 -34
  269. package/dist/components/cg-code-block/cg-code-block.js.map +1 -1
  270. package/dist/components/cg-collapsible/cg-collapsible.d.ts.map +1 -1
  271. package/dist/components/cg-collapsible/cg-collapsible.js +23 -18
  272. package/dist/components/cg-collapsible/cg-collapsible.js.map +1 -1
  273. package/dist/components/cg-color-picker/cg-color-picker.d.ts +3 -0
  274. package/dist/components/cg-color-picker/cg-color-picker.d.ts.map +1 -1
  275. package/dist/components/cg-color-picker/cg-color-picker.js +189 -91
  276. package/dist/components/cg-color-picker/cg-color-picker.js.map +1 -1
  277. package/dist/components/cg-combobox/cg-combobox.d.ts.map +1 -1
  278. package/dist/components/cg-combobox/cg-combobox.js +13 -6
  279. package/dist/components/cg-combobox/cg-combobox.js.map +1 -1
  280. package/dist/components/cg-command/cg-command.d.ts.map +1 -1
  281. package/dist/components/cg-command/cg-command.js +52 -45
  282. package/dist/components/cg-command/cg-command.js.map +1 -1
  283. package/dist/components/cg-context-menu/cg-context-menu.js +1 -1
  284. package/dist/components/cg-date-picker/cg-date-picker.d.ts.map +1 -1
  285. package/dist/components/cg-date-picker/cg-date-picker.js +36 -34
  286. package/dist/components/cg-date-picker/cg-date-picker.js.map +1 -1
  287. package/dist/components/cg-date-range-picker/cg-date-range-picker.d.ts +2 -0
  288. package/dist/components/cg-date-range-picker/cg-date-range-picker.d.ts.map +1 -1
  289. package/dist/components/cg-date-range-picker/cg-date-range-picker.js +12 -8
  290. package/dist/components/cg-date-range-picker/cg-date-range-picker.js.map +1 -1
  291. package/dist/components/cg-date-time-picker/cg-date-time-picker.d.ts.map +1 -1
  292. package/dist/components/cg-date-time-picker/cg-date-time-picker.js +3 -1
  293. package/dist/components/cg-date-time-picker/cg-date-time-picker.js.map +1 -1
  294. package/dist/components/cg-drawer/cg-drawer.js +3 -3
  295. package/dist/components/cg-drawer/cg-drawer.js.map +1 -1
  296. package/dist/components/cg-dropdown/cg-dropdown.d.ts.map +1 -1
  297. package/dist/components/cg-dropdown/cg-dropdown.js +1 -2
  298. package/dist/components/cg-dropdown/cg-dropdown.js.map +1 -1
  299. package/dist/components/cg-empty-state/cg-empty-state.d.ts +3 -24
  300. package/dist/components/cg-empty-state/cg-empty-state.d.ts.map +1 -1
  301. package/dist/components/cg-empty-state/cg-empty-state.js +51 -74
  302. package/dist/components/cg-empty-state/cg-empty-state.js.map +1 -1
  303. package/dist/components/cg-file-input/cg-file-input.d.ts.map +1 -1
  304. package/dist/components/cg-file-input/cg-file-input.js +9 -10
  305. package/dist/components/cg-file-input/cg-file-input.js.map +1 -1
  306. package/dist/components/cg-focus-scope/cg-focus-scope.js +1 -1
  307. package/dist/components/cg-follow-up/cg-follow-up.d.ts.map +1 -1
  308. package/dist/components/cg-follow-up/cg-follow-up.js +6 -7
  309. package/dist/components/cg-follow-up/cg-follow-up.js.map +1 -1
  310. package/dist/components/cg-form/cg-form.js +17 -17
  311. package/dist/components/cg-form/cg-form.js.map +1 -1
  312. package/dist/components/cg-hover-card/cg-hover-card.d.ts +1 -0
  313. package/dist/components/cg-hover-card/cg-hover-card.d.ts.map +1 -1
  314. package/dist/components/cg-hover-card/cg-hover-card.js +37 -32
  315. package/dist/components/cg-hover-card/cg-hover-card.js.map +1 -1
  316. package/dist/components/cg-icon/cg-icon.d.ts.map +1 -1
  317. package/dist/components/cg-icon/cg-icon.js +44 -37
  318. package/dist/components/cg-icon/cg-icon.js.map +1 -1
  319. package/dist/components/cg-image/cg-image.js +2 -2
  320. package/dist/components/cg-image/cg-image.js.map +1 -1
  321. package/dist/components/cg-image-block/cg-image-block.js +3 -3
  322. package/dist/components/cg-image-block/cg-image-block.js.map +1 -1
  323. package/dist/components/cg-image-gallery/cg-image-gallery.js +20 -20
  324. package/dist/components/cg-image-gallery/cg-image-gallery.js.map +1 -1
  325. package/dist/components/cg-input/cg-input.js +3 -3
  326. package/dist/components/cg-input/cg-input.js.map +1 -1
  327. package/dist/components/cg-kbd/cg-kbd.d.ts.map +1 -1
  328. package/dist/components/cg-kbd/cg-kbd.js +26 -24
  329. package/dist/components/cg-kbd/cg-kbd.js.map +1 -1
  330. package/dist/components/cg-label/cg-label.d.ts +4 -1
  331. package/dist/components/cg-label/cg-label.d.ts.map +1 -1
  332. package/dist/components/cg-label/cg-label.js +44 -41
  333. package/dist/components/cg-label/cg-label.js.map +1 -1
  334. package/dist/components/cg-link/cg-link.js +23 -23
  335. package/dist/components/cg-link/cg-link.js.map +1 -1
  336. package/dist/components/cg-list/cg-list.js +5 -5
  337. package/dist/components/cg-list/cg-list.js.map +1 -1
  338. package/dist/components/cg-listbox/cg-listbox.d.ts.map +1 -1
  339. package/dist/components/cg-listbox/cg-listbox.js +46 -40
  340. package/dist/components/cg-listbox/cg-listbox.js.map +1 -1
  341. package/dist/components/cg-markdown/cg-markdown.d.ts +2 -0
  342. package/dist/components/cg-markdown/cg-markdown.d.ts.map +1 -1
  343. package/dist/components/cg-markdown/cg-markdown.js +171 -121
  344. package/dist/components/cg-markdown/cg-markdown.js.map +1 -1
  345. package/dist/components/cg-menubar/cg-menubar.d.ts +6 -0
  346. package/dist/components/cg-menubar/cg-menubar.d.ts.map +1 -1
  347. package/dist/components/cg-menubar/cg-menubar.js +59 -47
  348. package/dist/components/cg-menubar/cg-menubar.js.map +1 -1
  349. package/dist/components/cg-meter/cg-meter.d.ts.map +1 -1
  350. package/dist/components/cg-meter/cg-meter.js +76 -76
  351. package/dist/components/cg-meter/cg-meter.js.map +1 -1
  352. package/dist/components/cg-metric-card/cg-metric-card.d.ts.map +1 -1
  353. package/dist/components/cg-metric-card/cg-metric-card.js +65 -68
  354. package/dist/components/cg-metric-card/cg-metric-card.js.map +1 -1
  355. package/dist/components/cg-modal/cg-modal.d.ts +3 -0
  356. package/dist/components/cg-modal/cg-modal.d.ts.map +1 -1
  357. package/dist/components/cg-modal/cg-modal.js +82 -83
  358. package/dist/components/cg-modal/cg-modal.js.map +1 -1
  359. package/dist/components/cg-navbar/cg-navbar.d.ts +1 -1
  360. package/dist/components/cg-navbar/cg-navbar.d.ts.map +1 -1
  361. package/dist/components/cg-navbar/cg-navbar.js +64 -55
  362. package/dist/components/cg-navbar/cg-navbar.js.map +1 -1
  363. package/dist/components/cg-navigation-menu/cg-navigation-menu.d.ts +3 -0
  364. package/dist/components/cg-navigation-menu/cg-navigation-menu.d.ts.map +1 -1
  365. package/dist/components/cg-navigation-menu/cg-navigation-menu.js +38 -26
  366. package/dist/components/cg-navigation-menu/cg-navigation-menu.js.map +1 -1
  367. package/dist/components/cg-number-input/cg-number-input.d.ts +1 -0
  368. package/dist/components/cg-number-input/cg-number-input.d.ts.map +1 -1
  369. package/dist/components/cg-number-input/cg-number-input.js +90 -77
  370. package/dist/components/cg-number-input/cg-number-input.js.map +1 -1
  371. package/dist/components/cg-otp-input/cg-otp-input.d.ts.map +1 -1
  372. package/dist/components/cg-otp-input/cg-otp-input.js +70 -60
  373. package/dist/components/cg-otp-input/cg-otp-input.js.map +1 -1
  374. package/dist/components/cg-pagination/cg-pagination.d.ts +2 -0
  375. package/dist/components/cg-pagination/cg-pagination.d.ts.map +1 -1
  376. package/dist/components/cg-pagination/cg-pagination.js +50 -49
  377. package/dist/components/cg-pagination/cg-pagination.js.map +1 -1
  378. package/dist/components/cg-password-input/cg-password-input.d.ts.map +1 -1
  379. package/dist/components/cg-password-input/cg-password-input.js +42 -34
  380. package/dist/components/cg-password-input/cg-password-input.js.map +1 -1
  381. package/dist/components/cg-phone-input/cg-phone-input.d.ts.map +1 -1
  382. package/dist/components/cg-phone-input/cg-phone-input.js +18 -14
  383. package/dist/components/cg-phone-input/cg-phone-input.js.map +1 -1
  384. package/dist/components/cg-popover/cg-popover.d.ts +12 -2
  385. package/dist/components/cg-popover/cg-popover.d.ts.map +1 -1
  386. package/dist/components/cg-popover/cg-popover.js +90 -63
  387. package/dist/components/cg-popover/cg-popover.js.map +1 -1
  388. package/dist/components/cg-portal/cg-portal.d.ts.map +1 -1
  389. package/dist/components/cg-portal/cg-portal.js +42 -41
  390. package/dist/components/cg-portal/cg-portal.js.map +1 -1
  391. package/dist/components/cg-progress-bar/cg-progress-bar.d.ts.map +1 -1
  392. package/dist/components/cg-progress-bar/cg-progress-bar.js +25 -25
  393. package/dist/components/cg-progress-bar/cg-progress-bar.js.map +1 -1
  394. package/dist/components/cg-radio/cg-radio.d.ts +10 -0
  395. package/dist/components/cg-radio/cg-radio.d.ts.map +1 -1
  396. package/dist/components/cg-radio/cg-radio.js +59 -48
  397. package/dist/components/cg-radio/cg-radio.js.map +1 -1
  398. package/dist/components/cg-radio-group/cg-radio-group.d.ts +6 -0
  399. package/dist/components/cg-radio-group/cg-radio-group.d.ts.map +1 -1
  400. package/dist/components/cg-radio-group/cg-radio-group.js +50 -37
  401. package/dist/components/cg-radio-group/cg-radio-group.js.map +1 -1
  402. package/dist/components/cg-rating/cg-rating.d.ts.map +1 -1
  403. package/dist/components/cg-rating/cg-rating.js +56 -54
  404. package/dist/components/cg-rating/cg-rating.js.map +1 -1
  405. package/dist/components/cg-resizable/cg-resizable.d.ts +4 -1
  406. package/dist/components/cg-resizable/cg-resizable.d.ts.map +1 -1
  407. package/dist/components/cg-resizable/cg-resizable.js +45 -35
  408. package/dist/components/cg-resizable/cg-resizable.js.map +1 -1
  409. package/dist/components/cg-scroll-area/cg-scroll-area.d.ts +8 -0
  410. package/dist/components/cg-scroll-area/cg-scroll-area.d.ts.map +1 -1
  411. package/dist/components/cg-scroll-area/cg-scroll-area.js +64 -21
  412. package/dist/components/cg-scroll-area/cg-scroll-area.js.map +1 -1
  413. package/dist/components/cg-segmented-control/cg-segmented-control.d.ts +4 -0
  414. package/dist/components/cg-segmented-control/cg-segmented-control.d.ts.map +1 -1
  415. package/dist/components/cg-segmented-control/cg-segmented-control.js +75 -39
  416. package/dist/components/cg-segmented-control/cg-segmented-control.js.map +1 -1
  417. package/dist/components/cg-select/cg-select.d.ts +4 -2
  418. package/dist/components/cg-select/cg-select.d.ts.map +1 -1
  419. package/dist/components/cg-select/cg-select.js +96 -58
  420. package/dist/components/cg-select/cg-select.js.map +1 -1
  421. package/dist/components/cg-separator/cg-separator.d.ts +1 -2
  422. package/dist/components/cg-separator/cg-separator.d.ts.map +1 -1
  423. package/dist/components/cg-separator/cg-separator.js +5 -8
  424. package/dist/components/cg-separator/cg-separator.js.map +1 -1
  425. package/dist/components/cg-sheet/cg-sheet.d.ts +4 -0
  426. package/dist/components/cg-sheet/cg-sheet.d.ts.map +1 -1
  427. package/dist/components/cg-sheet/cg-sheet.js +80 -43
  428. package/dist/components/cg-sheet/cg-sheet.js.map +1 -1
  429. package/dist/components/cg-sidebar/cg-sidebar.d.ts.map +1 -1
  430. package/dist/components/cg-sidebar/cg-sidebar.js +82 -19
  431. package/dist/components/cg-sidebar/cg-sidebar.js.map +1 -1
  432. package/dist/components/cg-skeleton/cg-skeleton.d.ts +7 -1
  433. package/dist/components/cg-skeleton/cg-skeleton.d.ts.map +1 -1
  434. package/dist/components/cg-skeleton/cg-skeleton.js +61 -63
  435. package/dist/components/cg-skeleton/cg-skeleton.js.map +1 -1
  436. package/dist/components/cg-slider/cg-slider.d.ts.map +1 -1
  437. package/dist/components/cg-slider/cg-slider.js +80 -73
  438. package/dist/components/cg-slider/cg-slider.js.map +1 -1
  439. package/dist/components/cg-spinner/cg-spinner.d.ts.map +1 -1
  440. package/dist/components/cg-spinner/cg-spinner.js +10 -19
  441. package/dist/components/cg-spinner/cg-spinner.js.map +1 -1
  442. package/dist/components/cg-split-button/cg-split-button.d.ts.map +1 -1
  443. package/dist/components/cg-split-button/cg-split-button.js +64 -50
  444. package/dist/components/cg-split-button/cg-split-button.js.map +1 -1
  445. package/dist/components/cg-stack/cg-stack.js +1 -1
  446. package/dist/components/cg-steps/cg-steps.js +1 -1
  447. package/dist/components/cg-switch/cg-switch.d.ts +3 -0
  448. package/dist/components/cg-switch/cg-switch.d.ts.map +1 -1
  449. package/dist/components/cg-switch/cg-switch.js +39 -47
  450. package/dist/components/cg-switch/cg-switch.js.map +1 -1
  451. package/dist/components/cg-table/cg-table.d.ts +0 -7
  452. package/dist/components/cg-table/cg-table.d.ts.map +1 -1
  453. package/dist/components/cg-table/cg-table.js +50 -47
  454. package/dist/components/cg-table/cg-table.js.map +1 -1
  455. package/dist/components/cg-tabs/cg-tabs.js +1 -1
  456. package/dist/components/cg-tag-input/cg-tag-input.js +1 -1
  457. package/dist/components/cg-text/cg-text.js +1 -1
  458. package/dist/components/cg-textarea/cg-textarea.js +1 -1
  459. package/dist/components/cg-time-picker/cg-time-picker.js +1 -1
  460. package/dist/components/cg-toaster/cg-toaster.js +3 -3
  461. package/dist/components/cg-toaster/cg-toaster.js.map +1 -1
  462. package/dist/components/cg-toggle/cg-toggle.js +1 -1
  463. package/dist/components/cg-toggle-group/cg-toggle-group.js +1 -1
  464. package/dist/components/cg-tree-view/cg-tree-view.js +1 -1
  465. package/dist/foundation.d.ts +0 -16
  466. package/dist/foundation.d.ts.map +1 -1
  467. package/dist/foundation.js +174 -206
  468. package/dist/foundation.js.map +1 -1
  469. package/dist/index.d.ts +1 -17
  470. package/dist/index.d.ts.map +1 -1
  471. package/dist/index.js +100 -132
  472. package/dist/index.js.map +1 -1
  473. package/dist/utils/focus-trap.d.ts +19 -2
  474. package/dist/utils/focus-trap.d.ts.map +1 -1
  475. package/package.json +6 -810
  476. package/dist/chunks/focus-trap-BdRNhSPD.js +0 -53
  477. package/dist/chunks/focus-trap-BdRNhSPD.js.map +0 -1
  478. package/dist/components/cg-app-shell/cg-app-shell.d.ts +0 -54
  479. package/dist/components/cg-app-shell/cg-app-shell.d.ts.map +0 -1
  480. package/dist/components/cg-app-shell/cg-app-shell.js +0 -135
  481. package/dist/components/cg-app-shell/cg-app-shell.js.map +0 -1
  482. package/dist/components/cg-auth-shell/cg-auth-shell.d.ts +0 -61
  483. package/dist/components/cg-auth-shell/cg-auth-shell.d.ts.map +0 -1
  484. package/dist/components/cg-auth-shell/cg-auth-shell.js +0 -163
  485. package/dist/components/cg-auth-shell/cg-auth-shell.js.map +0 -1
  486. package/dist/components/cg-definition-list/cg-definition-list.d.ts +0 -99
  487. package/dist/components/cg-definition-list/cg-definition-list.d.ts.map +0 -1
  488. package/dist/components/cg-definition-list/cg-definition-list.js +0 -332
  489. package/dist/components/cg-definition-list/cg-definition-list.js.map +0 -1
  490. package/dist/components/cg-draggable/cg-draggable.d.ts +0 -53
  491. package/dist/components/cg-draggable/cg-draggable.d.ts.map +0 -1
  492. package/dist/components/cg-draggable/cg-draggable.js +0 -136
  493. package/dist/components/cg-draggable/cg-draggable.js.map +0 -1
  494. package/dist/components/cg-droppable/cg-droppable.d.ts +0 -57
  495. package/dist/components/cg-droppable/cg-droppable.d.ts.map +0 -1
  496. package/dist/components/cg-droppable/cg-droppable.js +0 -114
  497. package/dist/components/cg-droppable/cg-droppable.js.map +0 -1
  498. package/dist/components/cg-filter-bar/cg-filter-bar.d.ts +0 -50
  499. package/dist/components/cg-filter-bar/cg-filter-bar.d.ts.map +0 -1
  500. package/dist/components/cg-filter-bar/cg-filter-bar.js +0 -115
  501. package/dist/components/cg-filter-bar/cg-filter-bar.js.map +0 -1
  502. package/dist/components/cg-filter-chip/cg-filter-chip.d.ts +0 -55
  503. package/dist/components/cg-filter-chip/cg-filter-chip.d.ts.map +0 -1
  504. package/dist/components/cg-filter-chip/cg-filter-chip.js +0 -213
  505. package/dist/components/cg-filter-chip/cg-filter-chip.js.map +0 -1
  506. package/dist/components/cg-kanban/cg-kanban.d.ts +0 -44
  507. package/dist/components/cg-kanban/cg-kanban.d.ts.map +0 -1
  508. package/dist/components/cg-kanban/cg-kanban.js +0 -86
  509. package/dist/components/cg-kanban/cg-kanban.js.map +0 -1
  510. package/dist/components/cg-kanban-column/cg-kanban-column.d.ts +0 -58
  511. package/dist/components/cg-kanban-column/cg-kanban-column.d.ts.map +0 -1
  512. package/dist/components/cg-kanban-column/cg-kanban-column.js +0 -144
  513. package/dist/components/cg-kanban-column/cg-kanban-column.js.map +0 -1
  514. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.d.ts +0 -77
  515. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.d.ts.map +0 -1
  516. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.js +0 -245
  517. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.js.map +0 -1
  518. package/dist/components/cg-search-input/cg-search-input.d.ts +0 -62
  519. package/dist/components/cg-search-input/cg-search-input.d.ts.map +0 -1
  520. package/dist/components/cg-search-input/cg-search-input.js +0 -106
  521. package/dist/components/cg-search-input/cg-search-input.js.map +0 -1
  522. package/dist/components/cg-sortable/cg-sortable.d.ts +0 -72
  523. package/dist/components/cg-sortable/cg-sortable.d.ts.map +0 -1
  524. package/dist/components/cg-sortable/cg-sortable.js +0 -177
  525. package/dist/components/cg-sortable/cg-sortable.js.map +0 -1
  526. package/dist/components/cg-theme/cg-theme.d.ts +0 -82
  527. package/dist/components/cg-theme/cg-theme.d.ts.map +0 -1
  528. package/dist/components/cg-theme/cg-theme.js +0 -91
  529. package/dist/components/cg-theme/cg-theme.js.map +0 -1
  530. package/dist/components/cg-theme-editor/cg-theme-editor.d.ts +0 -98
  531. package/dist/components/cg-theme-editor/cg-theme-editor.d.ts.map +0 -1
  532. package/dist/components/cg-theme-editor/cg-theme-editor.js +0 -341
  533. package/dist/components/cg-theme-editor/cg-theme-editor.js.map +0 -1
  534. package/dist/components/cg-timeline/cg-timeline.d.ts +0 -70
  535. package/dist/components/cg-timeline/cg-timeline.d.ts.map +0 -1
  536. package/dist/components/cg-timeline/cg-timeline.js +0 -131
  537. package/dist/components/cg-timeline/cg-timeline.js.map +0 -1
  538. package/dist/components/cg-timeline-event/cg-timeline-event.d.ts +0 -59
  539. package/dist/components/cg-timeline-event/cg-timeline-event.d.ts.map +0 -1
  540. package/dist/components/cg-timeline-event/cg-timeline-event.js +0 -190
  541. package/dist/components/cg-timeline-event/cg-timeline-event.js.map +0 -1
  542. package/dist/utils/drag-manager.d.ts +0 -40
  543. package/dist/utils/drag-manager.d.ts.map +0 -1
@@ -1,12 +1,12 @@
1
- import { css as b, LitElement as w, html as y } from "lit";
1
+ import { css as w, LitElement as y, html as v } from "lit";
2
2
  import { property as k, customElement as x } from "lit/decorators.js";
3
- import { h as C, r as $ } from "../../chunks/premium.css-9I4kHrsl.js";
4
- var S = Object.defineProperty, T = Object.getOwnPropertyDescriptor, f = (r, t, a, e) => {
5
- for (var o = e > 1 ? void 0 : e ? T(t, a) : t, g = r.length - 1, l; g >= 0; g--)
6
- (l = r[g]) && (o = (e ? l(t, a, o) : l(o)) || o);
7
- return e && o && S(t, a, o), o;
3
+ import { h as $, r as C } from "../../chunks/premium.css-DHekUEUt.js";
4
+ var S = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, b = (e, r, o, t) => {
5
+ for (var a = t > 1 ? void 0 : t ? _(r, o) : r, h = e.length - 1, l; h >= 0; h--)
6
+ (l = e[h]) && (a = (t ? l(r, o, a) : l(a)) || a);
7
+ return t && a && S(r, o, a), a;
8
8
  };
9
- const _ = /* @__PURE__ */ new Set([
9
+ const T = /* @__PURE__ */ new Set([
10
10
  "h1",
11
11
  "h2",
12
12
  "h3",
@@ -65,45 +65,45 @@ const _ = /* @__PURE__ */ new Set([
65
65
  li: /* @__PURE__ */ new Set(["class"]),
66
66
  span: /* @__PURE__ */ new Set(["class", "aria-hidden"]),
67
67
  button: /* @__PURE__ */ new Set(["class", "type", "aria-label"])
68
- }, v = /^(https?:|mailto:|#|\/)/i, z = /* @__PURE__ */ new Set(["note", "tip", "important", "warning", "caution"]);
69
- function E(r) {
70
- return r.replace(/[`*_~]/g, "").toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
68
+ }, f = /^(https?:|mailto:|#|\/)/i, z = /* @__PURE__ */ new Set(["note", "tip", "important", "warning", "caution"]);
69
+ function E(e) {
70
+ return e.replace(/[`*_~]/g, "").toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
71
71
  }
72
- function m(r) {
73
- return r.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
72
+ function m(e) {
73
+ return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
74
74
  }
75
- function A(r) {
76
- return r.startsWith("```") || /^#{1,6} /.test(r) || /^-{3,}$/.test(r.trim()) || r.startsWith("> ") || r === ">" || /^[-*] /.test(r) || /^\d+\. /.test(r);
75
+ function A(e) {
76
+ return e.startsWith("```") || /^#{1,6} /.test(e) || /^-{3,}$/.test(e.trim()) || e.startsWith("> ") || e === ">" || /^[-*] /.test(e) || /^\d+\. /.test(e) || /^\|.+\|\s*$/.test(e);
77
77
  }
78
- function O(r) {
79
- const t = new DOMParser().parseFromString(r, "text/html"), a = document.createDocumentFragment();
80
- function e(g, l) {
81
- for (const c of Array.from(g.childNodes)) {
82
- if (c.nodeType === Node.TEXT_NODE) {
83
- l.appendChild(document.createTextNode(c.textContent ?? ""));
78
+ function O(e) {
79
+ const r = new DOMParser().parseFromString(e, "text/html"), o = document.createDocumentFragment();
80
+ function t(h, l) {
81
+ for (const n of Array.from(h.childNodes)) {
82
+ if (n.nodeType === Node.TEXT_NODE) {
83
+ l.appendChild(document.createTextNode(n.textContent ?? ""));
84
84
  continue;
85
85
  }
86
- if (c.nodeType !== Node.ELEMENT_NODE) continue;
87
- const n = c, i = n.tagName.toLowerCase();
88
- if (!_.has(i)) {
89
- e(n, l);
86
+ if (n.nodeType !== Node.ELEMENT_NODE) continue;
87
+ const i = n, c = i.tagName.toLowerCase();
88
+ if (!T.has(c)) {
89
+ t(i, l);
90
90
  continue;
91
91
  }
92
- const s = document.createElement(i), d = L[i];
93
- if (d)
94
- for (const h of Array.from(n.attributes)) {
95
- if (!d.has(h.name.toLowerCase())) continue;
96
- const p = h.value.trim().toLowerCase();
97
- (h.name === "href" || h.name === "src") && !v.test(p) || s.setAttribute(h.name, h.value);
92
+ const d = document.createElement(c), g = L[c];
93
+ if (g)
94
+ for (const s of Array.from(i.attributes)) {
95
+ if (!g.has(s.name.toLowerCase())) continue;
96
+ const u = s.value.trim().toLowerCase();
97
+ (s.name === "href" || s.name === "src") && !f.test(u) || d.setAttribute(s.name, s.value);
98
98
  }
99
- l.appendChild(s), e(n, s);
99
+ l.appendChild(d), t(i, d);
100
100
  }
101
101
  }
102
- e(t.body, a);
103
- const o = document.createElement("div");
104
- return o.appendChild(a), o.innerHTML;
102
+ t(r.body, o);
103
+ const a = document.createElement("div");
104
+ return a.appendChild(o), a.innerHTML;
105
105
  }
106
- let u = class extends w {
106
+ let p = class extends y {
107
107
  constructor() {
108
108
  super(...arguments), this.text = "";
109
109
  }
@@ -116,125 +116,155 @@ let u = class extends w {
116
116
  * rules (---), unordered lists (-), ordered lists (1.), and paragraphs.
117
117
  * Inline: bold (**), italic (*), inline code (`), links ([text](url)).
118
118
  */
119
- _render(r) {
120
- const t = r.replace(/\r\n/g, `
119
+ _render(e) {
120
+ const r = e.replace(/\r\n/g, `
121
121
  `).split(`
122
- `), a = [];
123
- let e = 0;
124
- for (; e < t.length; ) {
125
- const o = t[e];
126
- if (o.startsWith("```")) {
127
- const c = o.slice(3).trim(), n = [];
128
- for (e++; e < t.length && !t[e].startsWith("```"); )
129
- n.push(t[e]), e++;
130
- e < t.length && e++;
131
- const i = m(n.join(`
132
- `)), s = /^\w+$/.test(c) ? c : "", d = s ? ` class="language-${s}"` : "", h = `<span class="code-lang">${s}</span>`;
133
- a.push(
134
- `<div class="code-block"><div class="code-header">${h}<button class="code-copy" type="button" aria-label="Copy code">Copy</button></div><pre><code${d}>${i}</code></pre></div>`
122
+ `), o = [];
123
+ let t = 0;
124
+ for (; t < r.length; ) {
125
+ const a = r[t];
126
+ if (a.startsWith("```")) {
127
+ const n = a.slice(3).trim(), i = [];
128
+ for (t++; t < r.length && !r[t].startsWith("```"); )
129
+ i.push(r[t]), t++;
130
+ t < r.length && t++;
131
+ const c = m(i.join(`
132
+ `)), d = /^\w+$/.test(n) ? n : "", g = d ? ` class="language-${d}"` : "", s = `<span class="code-lang">${d}</span>`;
133
+ o.push(
134
+ `<div class="code-block"><div class="code-header">${s}<button class="code-copy" type="button" aria-label="Copy code">Copy</button></div><pre><code${g}>${c}</code></pre></div>`
135
135
  );
136
136
  continue;
137
137
  }
138
- const g = /^(#{1,6}) (.+)$/.exec(o);
139
- if (g) {
140
- const c = g[1].length, n = g[2], i = E(n), s = this._inline(n), d = i ? ` <a class="anchor" href="#${i}" aria-label="Permalink to this heading">#</a>` : "", h = i ? ` id="${i}"` : "";
141
- a.push(`<h${c}${h}>${s}${d}</h${c}>`), e++;
138
+ const h = /^(#{1,6}) (.+)$/.exec(a);
139
+ if (h) {
140
+ const n = h[1].length, i = h[2], c = E(i), d = this._inline(i), g = c ? ` <a class="anchor" href="#${c}" aria-label="Permalink to this heading">#</a>` : "", s = c ? ` id="${c}"` : "";
141
+ o.push(`<h${n}${s}>${d}${g}</h${n}>`), t++;
142
142
  continue;
143
143
  }
144
- if (/^-{3,}$/.test(o.trim())) {
145
- a.push("<hr/>"), e++;
144
+ if (/^-{3,}$/.test(a.trim())) {
145
+ o.push("<hr/>"), t++;
146
146
  continue;
147
147
  }
148
- if (o.startsWith("> ") || o === ">") {
149
- const c = [];
150
- for (; e < t.length && (t[e].startsWith("> ") || t[e] === ">"); )
151
- c.push(t[e].replace(/^> ?/, "")), e++;
152
- const n = /^\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]\s*$/i.exec(c[0] ?? "");
153
- if (n && z.has(n[1].toLowerCase())) {
154
- const i = n[1].toLowerCase(), s = i.charAt(0).toUpperCase() + i.slice(1), d = c.slice(1).join(" ");
155
- a.push(
156
- `<blockquote class="alert alert-${i}"><div class="alert-header"><span class="alert-label">${s}</span></div><div class="alert-body">${this._inline(d)}</div></blockquote>`
148
+ if (a.startsWith("> ") || a === ">") {
149
+ const n = [];
150
+ for (; t < r.length && (r[t].startsWith("> ") || r[t] === ">"); )
151
+ n.push(r[t].replace(/^> ?/, "")), t++;
152
+ const i = /^\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]\s*$/i.exec(n[0] ?? "");
153
+ if (i && z.has(i[1].toLowerCase())) {
154
+ const c = i[1].toLowerCase(), d = c.charAt(0).toUpperCase() + c.slice(1), g = this._render(n.slice(1).join(`
155
+ `));
156
+ o.push(
157
+ `<blockquote class="alert alert-${c}"><div class="alert-header"><span class="alert-label">${d}</span></div><div class="alert-body">${g}</div></blockquote>`
157
158
  );
158
159
  } else
159
- a.push(`<blockquote>${this._inline(c.join(" "))}</blockquote>`);
160
+ o.push(`<blockquote>${this._inline(n.join(" "))}</blockquote>`);
160
161
  continue;
161
162
  }
162
- if (/^[-*] /.test(o)) {
163
- const c = [];
164
- let n = !1;
165
- for (; e < t.length && /^[-*] /.test(t[e]); ) {
166
- const s = t[e].slice(2), d = /^\[([ xX])\]\s+(.*)$/.exec(s);
167
- if (d) {
168
- n = !0;
169
- const p = d[1].toLowerCase() === "x" ? "task-check task-check-on" : "task-check";
170
- c.push(
171
- `<li class="task"><span class="${p}" aria-hidden="true"></span>` + this._inline(d[2]) + "</li>"
163
+ if (/^[-*] /.test(a)) {
164
+ const n = [];
165
+ let i = !1;
166
+ for (; t < r.length && /^[-*] /.test(r[t]); ) {
167
+ const d = r[t].slice(2), g = /^\[([ xX])\]\s+(.*)$/.exec(d);
168
+ if (g) {
169
+ i = !0;
170
+ const s = g[1].toLowerCase() === "x", u = s ? "task-check task-check-on" : "task-check";
171
+ n.push(
172
+ `<li class="task"><span class="${u}" aria-hidden="true"></span><span class="sr-only">${s ? "Done: " : "To do: "}</span>` + this._inline(g[2]) + "</li>"
172
173
  );
173
174
  } else
174
- c.push(`<li>${this._inline(s)}</li>`);
175
- e++;
175
+ n.push(`<li>${this._inline(d)}</li>`);
176
+ t++;
176
177
  }
177
- const i = n ? ' class="task-list"' : "";
178
- a.push(`<ul${i}>${c.join("")}</ul>`);
178
+ const c = i ? ' class="task-list"' : "";
179
+ o.push(`<ul${c}>${n.join("")}</ul>`);
179
180
  continue;
180
181
  }
181
- if (/^\d+\. /.test(o)) {
182
+ if (/^\d+\. /.test(a)) {
183
+ const n = [];
184
+ for (; t < r.length && /^\d+\. /.test(r[t]); )
185
+ n.push(`<li>${this._inline(r[t].replace(/^\d+\. /, ""))}</li>`), t++;
186
+ o.push(`<ol>${n.join("")}</ol>`);
187
+ continue;
188
+ }
189
+ if (/^\|.+\|\s*$/.test(a) && t + 1 < r.length && /^\|(\s*:?-+:?\s*\|)+\s*$/.test(r[t + 1])) {
190
+ const n = (s) => s.trim().replace(/^\|/, "").replace(/\|$/, "").split("|").map((u) => this._inline(u.trim())), i = n(a);
191
+ t += 2;
182
192
  const c = [];
183
- for (; e < t.length && /^\d+\. /.test(t[e]); )
184
- c.push(`<li>${this._inline(t[e].replace(/^\d+\. /, ""))}</li>`), e++;
185
- a.push(`<ol>${c.join("")}</ol>`);
193
+ for (; t < r.length && /^\|.+\|\s*$/.test(r[t]); )
194
+ c.push(n(r[t])), t++;
195
+ const d = `<thead><tr>${i.map((s) => `<th>${s}</th>`).join("")}</tr></thead>`, g = c.length ? `<tbody>${c.map((s) => `<tr>${s.map((u) => `<td>${u}</td>`).join("")}</tr>`).join("")}</tbody>` : "";
196
+ o.push(`<table>${d}${g}</table>`);
186
197
  continue;
187
198
  }
188
- if (o.trim() === "") {
189
- e++;
199
+ if (a.trim() === "") {
200
+ t++;
190
201
  continue;
191
202
  }
192
- const l = [];
193
- for (; e < t.length && t[e].trim() !== "" && !A(t[e]); )
194
- l.push(t[e]), e++;
195
- a.push(`<p>${this._inline(l.join(" "))}</p>`);
203
+ const l = [a];
204
+ for (t++; t < r.length && r[t].trim() !== "" && !A(r[t]); )
205
+ l.push(r[t]), t++;
206
+ o.push(`<p>${this._inline(l.join(" "))}</p>`);
196
207
  }
197
- return a.join("");
208
+ return o.join("");
198
209
  }
199
210
  /**
200
211
  * Applies inline formatting. Escapes HTML first, then processes
201
212
  * inline code (via placeholder to avoid interference), bold, italic,
202
213
  * and links with URL safety checks.
203
214
  */
204
- _inline(r) {
205
- const t = [];
206
- let a = r.replace(/`([^`]+)`/g, (e, o) => (t.push(m(o)), `\0CODE${t.length - 1}\0`));
207
- return a = m(a), a = a.replace(/\*\*([^*\n]+)\*\*/g, "<strong>$1</strong>").replace(/\*([^*\n]+)\*/g, "<em>$1</em>"), a = a.replace(
215
+ _inline(e) {
216
+ const r = [];
217
+ let o = e.replace(/`([^`]+)`/g, (t, a) => (r.push(m(a)), `\0CODE${r.length - 1}\0`));
218
+ return o = m(o), o = o.replace(/\*\*([^*\n]+)\*\*/g, "<strong>$1</strong>").replace(/\*([^*\n]+)\*/g, "<em>$1</em>"), o = o.replace(
219
+ /!\[([^\]]*)\]\(((?:[^()\s]|\([^)]*\))+)\)/g,
220
+ (t, a, h) => {
221
+ const l = h.trim();
222
+ return f.test(l) ? `<img src="${l}" alt="${a}">` : a;
223
+ }
224
+ ), o = o.replace(
208
225
  /\[([^\]]+)\]\(((?:[^()\s]|\([^)]*\))+)\)/g,
209
- (e, o, g) => {
210
- const l = g.trim();
211
- return `<a href="${v.test(l) ? l : "about:blank"}" target="_blank" rel="noopener">${o}</a>`;
226
+ (t, a, h) => {
227
+ const l = h.trim();
228
+ return `<a href="${f.test(l) ? l : "about:blank"}" target="_blank" rel="noopener">${a}</a>`;
212
229
  }
213
- ), a = a.replace(/\x00CODE(\d+)\x00/g, (e, o) => `<code>${t[Number(o)]}</code>`), a;
230
+ ), o = o.replace(/\x00CODE(\d+)\x00/g, (t, a) => `<code>${r[Number(a)]}</code>`), o;
214
231
  }
215
- updated(r) {
216
- r.has("text") && requestAnimationFrame(() => {
217
- this.shadowRoot?.querySelectorAll(".code-copy")?.forEach((a) => this._bindCopyButton(a));
232
+ updated(e) {
233
+ e.has("text") && requestAnimationFrame(() => {
234
+ this.shadowRoot?.querySelectorAll(".code-copy")?.forEach((o) => this._bindCopyButton(o)), this.shadowRoot?.querySelectorAll(".anchor").forEach((o) => this._bindAnchor(o));
218
235
  });
219
236
  }
220
- _bindCopyButton(r) {
221
- r.dataset.cgBound || (r.dataset.cgBound = "1", r.addEventListener("click", async () => {
222
- const e = r.closest(".code-block")?.querySelector("pre")?.textContent ?? "";
237
+ firstUpdated() {
238
+ requestAnimationFrame(() => {
239
+ const e = location.hash.slice(1);
240
+ e && this.shadowRoot?.getElementById(e)?.scrollIntoView({ block: "start" });
241
+ });
242
+ }
243
+ _bindAnchor(e) {
244
+ e.dataset.cgBound || (e.dataset.cgBound = "1", e.addEventListener("click", (r) => {
245
+ r.preventDefault();
246
+ const o = e.getAttribute("href")?.slice(1);
247
+ o && (history.replaceState(null, "", `#${o}`), this.shadowRoot?.getElementById(o)?.scrollIntoView({ block: "start" }));
248
+ }));
249
+ }
250
+ _bindCopyButton(e) {
251
+ e.dataset.cgBound || (e.dataset.cgBound = "1", e.setAttribute("aria-live", "polite"), e.addEventListener("click", async () => {
252
+ const t = e.closest(".code-block")?.querySelector("pre")?.textContent ?? "";
223
253
  try {
224
- await navigator.clipboard?.writeText(e);
225
- const o = r.textContent;
226
- r.textContent = "Copied", setTimeout(() => {
227
- r.textContent === "Copied" && (r.textContent = o);
254
+ await navigator.clipboard?.writeText(t);
255
+ const a = e.textContent;
256
+ e.textContent = "Copied", setTimeout(() => {
257
+ e.textContent === "Copied" && (e.textContent = a);
228
258
  }, 1200);
229
259
  } catch {
230
260
  }
231
261
  }));
232
262
  }
233
263
  render() {
234
- return y`<div class="md" .innerHTML=${O(this._render(this.text))}></div>`;
264
+ return typeof DOMParser > "u" ? v`<div class="md"></div>` : v`<div class="md" .innerHTML=${O(this._render(this.text))}></div>`;
235
265
  }
236
266
  };
237
- u.styles = [C, $, b`
267
+ p.styles = [$, C, w`
238
268
  :host {
239
269
  color: var(--cg-color-surface-base-text);
240
270
  /* Prose body — 16px is the document-typography norm (Tailwind Typography,
@@ -251,7 +281,7 @@ u.styles = [C, $, b`
251
281
  color: var(--cg-color-surface-base-text);
252
282
  margin: var(--cg-spacing-32) 0 var(--cg-spacing-12);
253
283
  line-height: var(--cg-line-height-tight);
254
- letter-spacing: -0.02em;
284
+ letter-spacing: var(--cg-letter-spacing-tight);
255
285
  text-wrap: balance;
256
286
  }
257
287
  .md h2 {
@@ -260,7 +290,7 @@ u.styles = [C, $, b`
260
290
  color: var(--cg-color-surface-base-text);
261
291
  margin: var(--cg-spacing-24) 0 var(--cg-spacing-8);
262
292
  line-height: var(--cg-line-height-tight);
263
- letter-spacing: -0.01em;
293
+ letter-spacing: var(--cg-letter-spacing-tight);
264
294
  text-wrap: balance;
265
295
  }
266
296
  .md h3 {
@@ -318,7 +348,7 @@ u.styles = [C, $, b`
318
348
  font-size: var(--cg-font-size-xs);
319
349
  color: var(--cg-color-surface-container-outlined);
320
350
  text-transform: lowercase;
321
- letter-spacing: 0.02em;
351
+ letter-spacing: var(--cg-letter-spacing-wide);
322
352
  }
323
353
  .md .code-copy {
324
354
  background: transparent;
@@ -384,7 +414,7 @@ u.styles = [C, $, b`
384
414
  .md .alert-label {
385
415
  font-weight: var(--cg-font-weight-semibold);
386
416
  font-size: var(--cg-font-size-sm);
387
- letter-spacing: 0.01em;
417
+ letter-spacing: var(--cg-letter-spacing-normal);
388
418
  }
389
419
  .md .alert-body { font-style: normal; }
390
420
  .md .alert-body :is(p, ul, ol):first-child { margin-top: 0; }
@@ -451,6 +481,19 @@ u.styles = [C, $, b`
451
481
  line-height: 1;
452
482
  }
453
483
 
484
+ /* Rule 10 — visually hidden, screen-reader-only state text. */
485
+ .sr-only {
486
+ position: absolute;
487
+ width: 1px;
488
+ height: 1px;
489
+ padding: 0;
490
+ margin: -1px;
491
+ overflow: hidden;
492
+ clip: rect(0, 0, 0, 0);
493
+ white-space: nowrap;
494
+ border: 0;
495
+ }
496
+
454
497
  /* ── Heading anchors — visible on heading hover, "#" link to the slugged id. */
455
498
  .md :is(h1, h2, h3, h4, h5, h6) .anchor {
456
499
  display: inline-block;
@@ -468,7 +511,7 @@ u.styles = [C, $, b`
468
511
  .md a {
469
512
  color: var(--cg-color-accent-text);
470
513
  text-decoration: underline;
471
- text-decoration-thickness: 1px;
514
+ text-decoration-thickness: var(--cg-border-width-50);
472
515
  text-underline-offset: var(--cg-spacing-4);
473
516
  text-decoration-color: color-mix(in oklch, currentColor 40%, transparent);
474
517
  transition: text-decoration-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
@@ -510,6 +553,13 @@ u.styles = [C, $, b`
510
553
  color: var(--cg-color-surface-base-text);
511
554
  }
512
555
 
556
+ /* ── Images ── contained to the prose column. */
557
+ .md img {
558
+ max-width: 100%;
559
+ height: auto;
560
+ border-radius: var(--cg-border-radius-100);
561
+ }
562
+
513
563
  /* ── Table ── */
514
564
  .md table {
515
565
  width: 100%;
@@ -530,13 +580,13 @@ u.styles = [C, $, b`
530
580
  border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-container-border);
531
581
  }
532
582
  `];
533
- f([
583
+ b([
534
584
  k()
535
- ], u.prototype, "text", 2);
536
- u = f([
585
+ ], p.prototype, "text", 2);
586
+ p = b([
537
587
  x("cg-markdown")
538
- ], u);
588
+ ], p);
539
589
  export {
540
- u as CgMarkdown
590
+ p as CgMarkdown
541
591
  };
542
592
  //# sourceMappingURL=cg-markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cg-markdown.js","sources":["../../../src/components/cg-markdown/cg-markdown.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\n/** Allowed HTML tags after markdown parsing */\nconst ALLOWED_TAGS = new Set([\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'br', 'hr',\n 'strong', 'b', 'em', 'i', 'u', 's', 'del', 'ins',\n 'code', 'pre', 'blockquote',\n 'ul', 'ol', 'li',\n 'a', 'img',\n 'table', 'thead', 'tbody', 'tr', 'th', 'td',\n 'div', 'span', 'sub', 'sup', 'mark', 'abbr',\n 'button',\n]);\n\n/** Allowed attributes per tag — anything not listed is stripped */\nconst ALLOWED_ATTRS: Record<string, Set<string>> = {\n // Heading anchors get an id derived from slugified heading text.\n h1: new Set(['id']), h2: new Set(['id']), h3: new Set(['id']),\n h4: new Set(['id']), h5: new Set(['id']), h6: new Set(['id']),\n a: new Set(['href', 'target', 'rel', 'class', 'aria-label']),\n img: new Set(['src', 'alt', 'width', 'height']),\n td: new Set(['colspan', 'rowspan']),\n th: new Set(['colspan', 'rowspan']),\n code: new Set(['class']),\n // Class-based variants (alert types, task lists, code-block chrome).\n blockquote: new Set(['class']),\n div: new Set(['class']),\n ul: new Set(['class']),\n li: new Set(['class']),\n span: new Set(['class', 'aria-hidden']),\n button: new Set(['class', 'type', 'aria-label']),\n};\n\n/** Safe URL protocols for href/src attributes */\nconst SAFE_PROTOCOLS = /^(https?:|mailto:|#|\\/)/i;\n\n/** GitHub-style alert variants — case-insensitive markers as the first line of a blockquote. */\nconst ALERT_TYPES = new Set(['note', 'tip', 'important', 'warning', 'caution']);\n\n/** Slugify heading text into a URL-safe id. Only emits [a-z0-9-]; safe to interpolate. */\nfunction slugify(text: string): string {\n return text\n .replace(/[`*_~]/g, '')\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\n/** Escape HTML-special characters in text content. */\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\n/** Returns true if the line starts a block-level markdown element. */\nfunction isBlockStart(line: string): boolean {\n return (\n line.startsWith('```') ||\n /^#{1,6} /.test(line) ||\n /^-{3,}$/.test(line.trim()) ||\n line.startsWith('> ') ||\n line === '>' ||\n /^[-*] /.test(line) ||\n /^\\d+\\. /.test(line)\n );\n}\n\n/**\n * DOM-based HTML sanitizer. Parses with the browser's HTML parser,\n * walks the tree, and strips anything not explicitly allowed.\n * Immune to encoding tricks, nested contexts, and regex bypasses.\n */\nfunction sanitizeHtml(raw: string): string {\n const doc = new DOMParser().parseFromString(raw, 'text/html');\n const fragment = document.createDocumentFragment();\n\n function walk(source: Node, target: Node) {\n for (const child of Array.from(source.childNodes)) {\n if (child.nodeType === Node.TEXT_NODE) {\n target.appendChild(document.createTextNode(child.textContent ?? ''));\n continue;\n }\n if (child.nodeType !== Node.ELEMENT_NODE) continue;\n const el = child as Element;\n const tag = el.tagName.toLowerCase();\n if (!ALLOWED_TAGS.has(tag)) {\n // Skip the element but keep its text children\n walk(el, target);\n continue;\n }\n const clean = document.createElement(tag);\n const allowed = ALLOWED_ATTRS[tag];\n if (allowed) {\n for (const attr of Array.from(el.attributes)) {\n if (!allowed.has(attr.name.toLowerCase())) continue;\n const val = attr.value.trim().toLowerCase();\n if ((attr.name === 'href' || attr.name === 'src') && !SAFE_PROTOCOLS.test(val)) continue;\n clean.setAttribute(attr.name, attr.value);\n }\n }\n target.appendChild(clean);\n walk(el, clean);\n }\n }\n\n walk(doc.body, fragment);\n const container = document.createElement('div');\n container.appendChild(fragment);\n return container.innerHTML;\n}\n\n/**\n * <cg-markdown> — Lightweight markdown renderer for LLM output.\n *\n * @example\n * ```html\n * <cg-markdown text=\"## Hello\\n\\nThis is **bold**.\"></cg-markdown>\n * ```\n *\n * @cssprop --cg-color-surface-base-text - Body text color\n * @cssprop --cg-font-size-sm - Body font size (14px)\n */\n@customElement('cg-markdown')\nexport class CgMarkdown extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host {\n color: var(--cg-color-surface-base-text);\n /* Prose body — 16px is the document-typography norm (Tailwind Typography,\n GitHub, Vercel docs). 14px is for UI density, not reading. */\n font-size: var(--cg-font-size-base);\n line-height: var(--cg-line-height-loose);\n }\n\n /* Headings — asymmetric margins (bigger top than bottom) create clear\n section breaks, the document-typography pattern from Tailwind Typography. */\n .md h1 {\n font-size: var(--cg-font-size-2xl);\n font-weight: var(--cg-font-weight-bold);\n color: var(--cg-color-surface-base-text);\n margin: var(--cg-spacing-32) 0 var(--cg-spacing-12);\n line-height: var(--cg-line-height-tight);\n letter-spacing: -0.02em;\n text-wrap: balance;\n }\n .md h2 {\n font-size: var(--cg-font-size-xl);\n font-weight: var(--cg-font-weight-bold);\n color: var(--cg-color-surface-base-text);\n margin: var(--cg-spacing-24) 0 var(--cg-spacing-8);\n line-height: var(--cg-line-height-tight);\n letter-spacing: -0.01em;\n text-wrap: balance;\n }\n .md h3 {\n font-size: var(--cg-font-size-lg);\n font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-base-text);\n margin: var(--cg-spacing-20) 0 var(--cg-spacing-6);\n line-height: var(--cg-line-height-snug);\n }\n\n /* Anchored headings — when consumers add ids, deep-links should clear any\n sticky header by default. Caller can override with the css-prop. */\n .md :is(h1, h2, h3, h4, h5, h6) {\n scroll-margin-top: var(--cg-component-markdown-scroll-margin);\n }\n\n .md p {\n margin: var(--cg-spacing-16) 0;\n text-wrap: pretty;\n }\n\n .md strong { font-weight: var(--cg-font-weight-semibold); }\n .md em { font-style: italic; }\n\n /* ── Inline code ── em-relative size so it scales with the body. */\n .md code {\n background: var(--cg-overlay-dark-subtle);\n padding: 0.15em 0.35em;\n border-radius: var(--cg-border-radius-50);\n font-family: var(--cg-font-family-mono);\n font-size: 0.875em;\n }\n\n /* ── Code block — wrapped with header chrome (lang label + copy button).\n 12px radius reads as \"code\", not \"card\" (was 20px).\n Matches GitHub / Vercel / Linear / Tailwind Typography. */\n .md .code-block {\n margin: var(--cg-spacing-16) 0;\n background: var(--cg-color-code-background);\n border: var(--cg-border-width-50) solid var(--cg-color-code-border);\n border-radius: var(--cg-border-radius-100);\n overflow: hidden;\n }\n .md .code-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--cg-spacing-8);\n padding: var(--cg-spacing-6) var(--cg-spacing-12);\n background: var(--cg-overlay-dark-subtle);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-code-border);\n }\n .md .code-lang {\n font-family: var(--cg-font-family-mono);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n text-transform: lowercase;\n letter-spacing: 0.02em;\n }\n .md .code-copy {\n background: transparent;\n border: var(--cg-border-width-50) solid var(--cg-color-code-border);\n color: var(--cg-color-surface-container-outlined);\n padding: var(--cg-spacing-2) var(--cg-spacing-8);\n border-radius: var(--cg-border-radius-50);\n font-family: var(--cg-font-family-primary);\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-medium);\n cursor: pointer;\n transition:\n background var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .md .code-copy:hover {\n background: var(--cg-color-action-tertiary-background-hover);\n color: var(--cg-color-surface-base-text);\n }\n .md .code-copy:active { transform: scale(var(--cg-interaction-press-scale)); }\n .md .code-copy:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 var(--cg-focus-ring-offset) var(--cg-color-focus-ring-offset),\n 0 0 0 calc(var(--cg-focus-ring-offset) + var(--cg-focus-ring-width)) var(--cg-color-focus-ring);\n }\n .md pre {\n background: transparent;\n color: var(--cg-color-code-text);\n padding: var(--cg-spacing-16);\n border: 0;\n border-radius: 0;\n overflow-x: auto;\n font-family: var(--cg-font-family-mono);\n font-size: 0.875em;\n line-height: var(--cg-line-height-relaxed);\n margin: 0;\n }\n .md pre code {\n background: none;\n padding: 0;\n color: inherit;\n font-size: inherit;\n border-radius: 0;\n }\n\n /* ── GitHub-style alerts — 5 semantic variants (note, tip, important, warning, caution). */\n .md .alert {\n border-left: var(--cg-border-width-300) solid;\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n margin: var(--cg-spacing-16) 0;\n border-radius: 0 var(--cg-border-radius-50) var(--cg-border-radius-50) 0;\n font-style: normal;\n color: var(--cg-color-surface-base-text);\n }\n .md .alert-header {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-6);\n margin-bottom: var(--cg-spacing-6);\n }\n .md .alert-label {\n font-weight: var(--cg-font-weight-semibold);\n font-size: var(--cg-font-size-sm);\n letter-spacing: 0.01em;\n }\n .md .alert-body { font-style: normal; }\n .md .alert-body :is(p, ul, ol):first-child { margin-top: 0; }\n .md .alert-body :is(p, ul, ol):last-child { margin-bottom: 0; }\n\n .md .alert-note {\n border-left-color: var(--cg-color-status-info-text-default);\n background: var(--cg-color-status-info-background-default);\n }\n .md .alert-note .alert-label { color: var(--cg-color-status-info-text-default); }\n\n .md .alert-tip {\n border-left-color: var(--cg-color-status-success-text-default);\n background: var(--cg-color-status-success-background-default);\n }\n .md .alert-tip .alert-label { color: var(--cg-color-status-success-text-default); }\n\n .md .alert-important {\n border-left-color: var(--cg-color-accent-text);\n background: var(--cg-overlay-accent-light);\n }\n .md .alert-important .alert-label { color: var(--cg-color-accent-text); }\n\n .md .alert-warning {\n border-left-color: var(--cg-color-status-warning-text-default);\n background: var(--cg-color-status-warning-background-default);\n }\n .md .alert-warning .alert-label { color: var(--cg-color-status-warning-text-default); }\n\n .md .alert-caution {\n border-left-color: var(--cg-color-status-error-text-default);\n background: var(--cg-color-status-error-background-default);\n }\n .md .alert-caution .alert-label { color: var(--cg-color-status-error-text-default); }\n\n /* ── Task lists — checkbox-prefixed list items. */\n .md .task-list { padding-left: 0; list-style: none; }\n .md .task-list .task {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-8);\n }\n .md .task-check {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--cg-spacing-16);\n height: var(--cg-spacing-16);\n flex-shrink: 0;\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-50);\n background: transparent;\n }\n .md .task-check-on {\n background: var(--cg-color-action-primary-background-default);\n border-color: var(--cg-color-action-primary-border-default);\n position: relative;\n }\n .md .task-check-on::after {\n content: '✓';\n color: var(--cg-color-action-primary-text-default);\n font-size: 0.75em;\n font-weight: var(--cg-font-weight-bold);\n line-height: 1;\n }\n\n /* ── Heading anchors — visible on heading hover, \"#\" link to the slugged id. */\n .md :is(h1, h2, h3, h4, h5, h6) .anchor {\n display: inline-block;\n margin-left: var(--cg-spacing-6);\n color: var(--cg-color-surface-container-outlined);\n text-decoration: none;\n opacity: 0;\n transition: opacity var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .md :is(h1, h2, h3, h4, h5, h6):hover .anchor,\n .md :is(h1, h2, h3, h4, h5, h6) .anchor:focus-visible { opacity: 1; }\n .md .anchor:hover { color: var(--cg-color-accent-text); }\n\n /* ── Links ── 4px underline-offset reads as polished prose (not UI). */\n .md a {\n color: var(--cg-color-accent-text);\n text-decoration: underline;\n text-decoration-thickness: 1px;\n text-underline-offset: var(--cg-spacing-4);\n text-decoration-color: color-mix(in oklch, currentColor 40%, transparent);\n transition: text-decoration-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .md a:hover { text-decoration-color: currentColor; }\n\n /* ── Lists ── more breathable item spacing for readable prose. */\n .md ul, .md ol {\n margin: var(--cg-spacing-16) 0;\n padding-left: var(--cg-spacing-24);\n }\n .md li { margin: var(--cg-spacing-6) 0; }\n\n /* ── Blockquote ── */\n .md blockquote {\n border-left: var(--cg-border-width-300) solid var(--cg-color-action-primary-border-default);\n padding-left: var(--cg-spacing-16);\n color: var(--cg-color-surface-container-outlined);\n margin: var(--cg-spacing-16) 0;\n font-style: italic;\n }\n\n /* ── HR ── premium gradient rule (Stripe / Vercel pattern). */\n .md hr {\n border: 0;\n height: var(--cg-border-width-50);\n background: linear-gradient(\n to right,\n transparent,\n var(--cg-color-surface-container-border),\n transparent\n );\n margin: var(--cg-spacing-32) 0;\n }\n\n /* ── Selection highlight ── matches the brand accent. */\n .md ::selection {\n background: var(--cg-overlay-accent-light);\n color: var(--cg-color-surface-base-text);\n }\n\n /* ── Table ── */\n .md table {\n width: 100%;\n border-collapse: collapse;\n margin: var(--cg-spacing-12) 0;\n font-size: var(--cg-font-size-sm);\n }\n .md th {\n text-align: left;\n padding: var(--cg-spacing-8) var(--cg-spacing-12);\n border-bottom: var(--cg-border-width-100) solid var(--cg-color-surface-container-border);\n font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-container-outlined);\n font-size: var(--cg-font-size-xs);\n }\n .md td {\n padding: var(--cg-spacing-8) var(--cg-spacing-12);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-container-border);\n }\n `];\n\n @property() text = '';\n\n /**\n * Line-based markdown parser. Classifies each line into a block type,\n * groups consecutive same-type lines, and renders each block with\n * inline formatting applied to text content.\n *\n * Handles: headings (#), code fences (```), blockquotes (>), horizontal\n * rules (---), unordered lists (-), ordered lists (1.), and paragraphs.\n * Inline: bold (**), italic (*), inline code (`), links ([text](url)).\n */\n private _render(md: string): string {\n const lines = md.replace(/\\r\\n/g, '\\n').split('\\n');\n const blocks: string[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i]!;\n\n // Fenced code block — wrapped with header chrome (lang label + copy button)\n if (line.startsWith('```')) {\n const lang = line.slice(3).trim();\n const codeLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i]!.startsWith('```')) {\n codeLines.push(lines[i]!);\n i++;\n }\n if (i < lines.length) i++; // skip closing fence\n const code = escapeHtml(codeLines.join('\\n'));\n const langClean = /^\\w+$/.test(lang) ? lang : '';\n const langClass = langClean ? ` class=\"language-${langClean}\"` : '';\n const langLabel = `<span class=\"code-lang\">${langClean}</span>`;\n blocks.push(\n `<div class=\"code-block\">` +\n `<div class=\"code-header\">${langLabel}` +\n `<button class=\"code-copy\" type=\"button\" aria-label=\"Copy code\">Copy</button>` +\n `</div>` +\n `<pre><code${langClass}>${code}</code></pre>` +\n `</div>`,\n );\n continue;\n }\n\n // Heading (# through ######) — auto-anchored with id + hover-visible \"#\" link\n const headingMatch = /^(#{1,6}) (.+)$/.exec(line);\n if (headingMatch) {\n const level = headingMatch[1]!.length;\n const text = headingMatch[2]!;\n const slug = slugify(text);\n const inline = this._inline(text);\n const anchor = slug\n ? ` <a class=\"anchor\" href=\"#${slug}\" aria-label=\"Permalink to this heading\">#</a>`\n : '';\n const idAttr = slug ? ` id=\"${slug}\"` : '';\n blocks.push(`<h${level}${idAttr}>${inline}${anchor}</h${level}>`);\n i++;\n continue;\n }\n\n // Horizontal rule\n if (/^-{3,}$/.test(line.trim())) {\n blocks.push('<hr/>');\n i++;\n continue;\n }\n\n // Blockquote (consecutive > lines) — first line may be an alert marker\n // `[!NOTE]`, `[!TIP]`, `[!IMPORTANT]`, `[!WARNING]`, `[!CAUTION]`.\n if (line.startsWith('> ') || line === '>') {\n const quoteLines: string[] = [];\n while (i < lines.length && (lines[i]!.startsWith('> ') || lines[i] === '>')) {\n quoteLines.push(lines[i]!.replace(/^> ?/, ''));\n i++;\n }\n const alertMatch = /^\\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\\]\\s*$/i.exec(quoteLines[0] ?? '');\n if (alertMatch && ALERT_TYPES.has(alertMatch[1]!.toLowerCase())) {\n const type = alertMatch[1]!.toLowerCase();\n const label = type.charAt(0).toUpperCase() + type.slice(1);\n const body = quoteLines.slice(1).join(' ');\n blocks.push(\n `<blockquote class=\"alert alert-${type}\">` +\n `<div class=\"alert-header\"><span class=\"alert-label\">${label}</span></div>` +\n `<div class=\"alert-body\">${this._inline(body)}</div>` +\n `</blockquote>`,\n );\n } else {\n blocks.push(`<blockquote>${this._inline(quoteLines.join(' '))}</blockquote>`);\n }\n continue;\n }\n\n // Unordered list (consecutive - items) — items can be plain or task `- [ ]` / `- [x]`\n if (/^[-*] /.test(line)) {\n const items: string[] = [];\n let isTaskList = false;\n while (i < lines.length && /^[-*] /.test(lines[i]!)) {\n const itemContent = lines[i]!.slice(2);\n const taskMatch = /^\\[([ xX])\\]\\s+(.*)$/.exec(itemContent);\n if (taskMatch) {\n isTaskList = true;\n const checked = taskMatch[1]!.toLowerCase() === 'x';\n const checkClass = checked ? 'task-check task-check-on' : 'task-check';\n items.push(\n `<li class=\"task\">` +\n `<span class=\"${checkClass}\" aria-hidden=\"true\"></span>` +\n this._inline(taskMatch[2]!) +\n `</li>`,\n );\n } else {\n items.push(`<li>${this._inline(itemContent)}</li>`);\n }\n i++;\n }\n const listClass = isTaskList ? ' class=\"task-list\"' : '';\n blocks.push(`<ul${listClass}>${items.join('')}</ul>`);\n continue;\n }\n\n // Ordered list (consecutive 1. 2. 3. items)\n if (/^\\d+\\. /.test(line)) {\n const items: string[] = [];\n while (i < lines.length && /^\\d+\\. /.test(lines[i]!)) {\n items.push(`<li>${this._inline(lines[i]!.replace(/^\\d+\\. /, ''))}</li>`);\n i++;\n }\n blocks.push(`<ol>${items.join('')}</ol>`);\n continue;\n }\n\n // Blank line — paragraph separator\n if (line.trim() === '') {\n i++;\n continue;\n }\n\n // Paragraph — consecutive non-blank, non-block lines joined with spaces\n const paraLines: string[] = [];\n while (i < lines.length && lines[i]!.trim() !== '' && !isBlockStart(lines[i]!)) {\n paraLines.push(lines[i]!);\n i++;\n }\n blocks.push(`<p>${this._inline(paraLines.join(' '))}</p>`);\n }\n\n return blocks.join('');\n }\n\n /**\n * Applies inline formatting. Escapes HTML first, then processes\n * inline code (via placeholder to avoid interference), bold, italic,\n * and links with URL safety checks.\n */\n private _inline(text: string): string {\n // Extract inline code as placeholders so bold/italic regex don't touch it\n const codeStash: string[] = [];\n let working = text.replace(/`([^`]+)`/g, (_, code: string) => {\n codeStash.push(escapeHtml(code));\n return `\\x00CODE${codeStash.length - 1}\\x00`;\n });\n\n // Escape remaining HTML\n working = escapeHtml(working);\n\n // Bold before italic so ** doesn't get half-eaten by *\n working = working\n .replace(/\\*\\*([^*\\n]+)\\*\\*/g, '<strong>$1</strong>')\n .replace(/\\*([^*\\n]+)\\*/g, '<em>$1</em>');\n\n // Links — handle URLs with balanced single-level parens\n working = working.replace(\n /\\[([^\\]]+)\\]\\(((?:[^()\\s]|\\([^)]*\\))+)\\)/g,\n (_m, label: string, url: string) => {\n const trimmed = url.trim();\n const safe = SAFE_PROTOCOLS.test(trimmed) ? trimmed : 'about:blank';\n return `<a href=\"${safe}\" target=\"_blank\" rel=\"noopener\">${label}</a>`;\n },\n );\n\n // Restore inline code\n working = working.replace(/\\x00CODE(\\d+)\\x00/g, (_m, idx: string) => {\n return `<code>${codeStash[Number(idx)]}</code>`;\n });\n\n return working;\n }\n\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('text')) {\n // Bind copy-button click handlers AFTER Lit has applied innerHTML.\n // The buttons come from sanitized HTML so they have no inline handlers.\n requestAnimationFrame(() => {\n const buttons = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.code-copy');\n buttons?.forEach(btn => this._bindCopyButton(btn));\n });\n }\n }\n\n private _bindCopyButton(btn: HTMLButtonElement): void {\n if (btn.dataset['cgBound']) return;\n btn.dataset['cgBound'] = '1';\n btn.addEventListener('click', async () => {\n const block = btn.closest('.code-block');\n const pre = block?.querySelector('pre');\n const codeText = pre?.textContent ?? '';\n try {\n await navigator.clipboard?.writeText(codeText);\n const original = btn.textContent;\n btn.textContent = 'Copied';\n setTimeout(() => {\n if (btn.textContent === 'Copied') btn.textContent = original;\n }, 1200);\n } catch {\n // Clipboard API may be blocked (insecure context, permission denied);\n // silently fail — the code is still selectable.\n }\n });\n }\n\n override render() {\n return html`<div class=\"md\" .innerHTML=${sanitizeHtml(this._render(this.text))}></div>`;\n }\n}\n\ndeclare global { interface HTMLElementTagNameMap { 'cg-markdown': CgMarkdown; } }\n"],"names":["ALLOWED_TAGS","ALLOWED_ATTRS","SAFE_PROTOCOLS","ALERT_TYPES","slugify","text","escapeHtml","isBlockStart","line","sanitizeHtml","raw","doc","fragment","walk","source","target","child","el","tag","clean","allowed","attr","val","container","CgMarkdown","LitElement","md","lines","blocks","i","lang","codeLines","code","langClean","langClass","langLabel","headingMatch","level","slug","inline","anchor","idAttr","quoteLines","alertMatch","type","label","body","items","isTaskList","itemContent","taskMatch","checkClass","listClass","paraLines","codeStash","working","_","_m","url","trimmed","idx","changed","btn","codeText","original","html","hostBlock","reducedMotion","css","__decorateClass","property","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"cg-markdown.js","sources":["../../../src/components/cg-markdown/cg-markdown.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\n/** Allowed HTML tags after markdown parsing */\nconst ALLOWED_TAGS = new Set([\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'br', 'hr',\n 'strong', 'b', 'em', 'i', 'u', 's', 'del', 'ins',\n 'code', 'pre', 'blockquote',\n 'ul', 'ol', 'li',\n 'a', 'img',\n 'table', 'thead', 'tbody', 'tr', 'th', 'td',\n 'div', 'span', 'sub', 'sup', 'mark', 'abbr',\n 'button',\n]);\n\n/** Allowed attributes per tag — anything not listed is stripped */\nconst ALLOWED_ATTRS: Record<string, Set<string>> = {\n // Heading anchors get an id derived from slugified heading text.\n h1: new Set(['id']), h2: new Set(['id']), h3: new Set(['id']),\n h4: new Set(['id']), h5: new Set(['id']), h6: new Set(['id']),\n a: new Set(['href', 'target', 'rel', 'class', 'aria-label']),\n img: new Set(['src', 'alt', 'width', 'height']),\n td: new Set(['colspan', 'rowspan']),\n th: new Set(['colspan', 'rowspan']),\n code: new Set(['class']),\n // Class-based variants (alert types, task lists, code-block chrome).\n blockquote: new Set(['class']),\n div: new Set(['class']),\n ul: new Set(['class']),\n li: new Set(['class']),\n span: new Set(['class', 'aria-hidden']),\n button: new Set(['class', 'type', 'aria-label']),\n};\n\n/** Safe URL protocols for href/src attributes */\nconst SAFE_PROTOCOLS = /^(https?:|mailto:|#|\\/)/i;\n\n/** GitHub-style alert variants — case-insensitive markers as the first line of a blockquote. */\nconst ALERT_TYPES = new Set(['note', 'tip', 'important', 'warning', 'caution']);\n\n/** Slugify heading text into a URL-safe id. Only emits [a-z0-9-]; safe to interpolate. */\nfunction slugify(text: string): string {\n return text\n .replace(/[`*_~]/g, '')\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\n/** Escape HTML-special characters in text content. */\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\n/** Returns true if the line starts a block-level markdown element. */\nfunction isBlockStart(line: string): boolean {\n return (\n line.startsWith('```') ||\n /^#{1,6} /.test(line) ||\n /^-{3,}$/.test(line.trim()) ||\n line.startsWith('> ') ||\n line === '>' ||\n /^[-*] /.test(line) ||\n /^\\d+\\. /.test(line) ||\n /^\\|.+\\|\\s*$/.test(line)\n );\n}\n\n/**\n * DOM-based HTML sanitizer. Parses with the browser's HTML parser,\n * walks the tree, and strips anything not explicitly allowed.\n * Immune to encoding tricks, nested contexts, and regex bypasses.\n */\nfunction sanitizeHtml(raw: string): string {\n const doc = new DOMParser().parseFromString(raw, 'text/html');\n const fragment = document.createDocumentFragment();\n\n function walk(source: Node, target: Node) {\n for (const child of Array.from(source.childNodes)) {\n if (child.nodeType === Node.TEXT_NODE) {\n target.appendChild(document.createTextNode(child.textContent ?? ''));\n continue;\n }\n if (child.nodeType !== Node.ELEMENT_NODE) continue;\n const el = child as Element;\n const tag = el.tagName.toLowerCase();\n if (!ALLOWED_TAGS.has(tag)) {\n // Skip the element but keep its text children\n walk(el, target);\n continue;\n }\n const clean = document.createElement(tag);\n const allowed = ALLOWED_ATTRS[tag];\n if (allowed) {\n for (const attr of Array.from(el.attributes)) {\n if (!allowed.has(attr.name.toLowerCase())) continue;\n const val = attr.value.trim().toLowerCase();\n if ((attr.name === 'href' || attr.name === 'src') && !SAFE_PROTOCOLS.test(val)) continue;\n clean.setAttribute(attr.name, attr.value);\n }\n }\n target.appendChild(clean);\n walk(el, clean);\n }\n }\n\n walk(doc.body, fragment);\n const container = document.createElement('div');\n container.appendChild(fragment);\n return container.innerHTML;\n}\n\n/**\n * <cg-markdown> — Lightweight markdown renderer for LLM output.\n *\n * @example\n * ```html\n * <cg-markdown text=\"## Hello\\n\\nThis is **bold**.\"></cg-markdown>\n * ```\n *\n * @cssprop --cg-color-surface-base-text - Body text color\n * @cssprop --cg-font-size-sm - Body font size (14px)\n */\n@customElement('cg-markdown')\nexport class CgMarkdown extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host {\n color: var(--cg-color-surface-base-text);\n /* Prose body — 16px is the document-typography norm (Tailwind Typography,\n GitHub, Vercel docs). 14px is for UI density, not reading. */\n font-size: var(--cg-font-size-base);\n line-height: var(--cg-line-height-loose);\n }\n\n /* Headings — asymmetric margins (bigger top than bottom) create clear\n section breaks, the document-typography pattern from Tailwind Typography. */\n .md h1 {\n font-size: var(--cg-font-size-2xl);\n font-weight: var(--cg-font-weight-bold);\n color: var(--cg-color-surface-base-text);\n margin: var(--cg-spacing-32) 0 var(--cg-spacing-12);\n line-height: var(--cg-line-height-tight);\n letter-spacing: var(--cg-letter-spacing-tight);\n text-wrap: balance;\n }\n .md h2 {\n font-size: var(--cg-font-size-xl);\n font-weight: var(--cg-font-weight-bold);\n color: var(--cg-color-surface-base-text);\n margin: var(--cg-spacing-24) 0 var(--cg-spacing-8);\n line-height: var(--cg-line-height-tight);\n letter-spacing: var(--cg-letter-spacing-tight);\n text-wrap: balance;\n }\n .md h3 {\n font-size: var(--cg-font-size-lg);\n font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-base-text);\n margin: var(--cg-spacing-20) 0 var(--cg-spacing-6);\n line-height: var(--cg-line-height-snug);\n }\n\n /* Anchored headings — when consumers add ids, deep-links should clear any\n sticky header by default. Caller can override with the css-prop. */\n .md :is(h1, h2, h3, h4, h5, h6) {\n scroll-margin-top: var(--cg-component-markdown-scroll-margin);\n }\n\n .md p {\n margin: var(--cg-spacing-16) 0;\n text-wrap: pretty;\n }\n\n .md strong { font-weight: var(--cg-font-weight-semibold); }\n .md em { font-style: italic; }\n\n /* ── Inline code ── em-relative size so it scales with the body. */\n .md code {\n background: var(--cg-overlay-dark-subtle);\n padding: 0.15em 0.35em;\n border-radius: var(--cg-border-radius-50);\n font-family: var(--cg-font-family-mono);\n font-size: 0.875em;\n }\n\n /* ── Code block — wrapped with header chrome (lang label + copy button).\n 12px radius reads as \"code\", not \"card\" (was 20px).\n Matches GitHub / Vercel / Linear / Tailwind Typography. */\n .md .code-block {\n margin: var(--cg-spacing-16) 0;\n background: var(--cg-color-code-background);\n border: var(--cg-border-width-50) solid var(--cg-color-code-border);\n border-radius: var(--cg-border-radius-100);\n overflow: hidden;\n }\n .md .code-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--cg-spacing-8);\n padding: var(--cg-spacing-6) var(--cg-spacing-12);\n background: var(--cg-overlay-dark-subtle);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-code-border);\n }\n .md .code-lang {\n font-family: var(--cg-font-family-mono);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n text-transform: lowercase;\n letter-spacing: var(--cg-letter-spacing-wide);\n }\n .md .code-copy {\n background: transparent;\n border: var(--cg-border-width-50) solid var(--cg-color-code-border);\n color: var(--cg-color-surface-container-outlined);\n padding: var(--cg-spacing-2) var(--cg-spacing-8);\n border-radius: var(--cg-border-radius-50);\n font-family: var(--cg-font-family-primary);\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-medium);\n cursor: pointer;\n transition:\n background var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .md .code-copy:hover {\n background: var(--cg-color-action-tertiary-background-hover);\n color: var(--cg-color-surface-base-text);\n }\n .md .code-copy:active { transform: scale(var(--cg-interaction-press-scale)); }\n .md .code-copy:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 var(--cg-focus-ring-offset) var(--cg-color-focus-ring-offset),\n 0 0 0 calc(var(--cg-focus-ring-offset) + var(--cg-focus-ring-width)) var(--cg-color-focus-ring);\n }\n .md pre {\n background: transparent;\n color: var(--cg-color-code-text);\n padding: var(--cg-spacing-16);\n border: 0;\n border-radius: 0;\n overflow-x: auto;\n font-family: var(--cg-font-family-mono);\n font-size: 0.875em;\n line-height: var(--cg-line-height-relaxed);\n margin: 0;\n }\n .md pre code {\n background: none;\n padding: 0;\n color: inherit;\n font-size: inherit;\n border-radius: 0;\n }\n\n /* ── GitHub-style alerts — 5 semantic variants (note, tip, important, warning, caution). */\n .md .alert {\n border-left: var(--cg-border-width-300) solid;\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n margin: var(--cg-spacing-16) 0;\n border-radius: 0 var(--cg-border-radius-50) var(--cg-border-radius-50) 0;\n font-style: normal;\n color: var(--cg-color-surface-base-text);\n }\n .md .alert-header {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-6);\n margin-bottom: var(--cg-spacing-6);\n }\n .md .alert-label {\n font-weight: var(--cg-font-weight-semibold);\n font-size: var(--cg-font-size-sm);\n letter-spacing: var(--cg-letter-spacing-normal);\n }\n .md .alert-body { font-style: normal; }\n .md .alert-body :is(p, ul, ol):first-child { margin-top: 0; }\n .md .alert-body :is(p, ul, ol):last-child { margin-bottom: 0; }\n\n .md .alert-note {\n border-left-color: var(--cg-color-status-info-text-default);\n background: var(--cg-color-status-info-background-default);\n }\n .md .alert-note .alert-label { color: var(--cg-color-status-info-text-default); }\n\n .md .alert-tip {\n border-left-color: var(--cg-color-status-success-text-default);\n background: var(--cg-color-status-success-background-default);\n }\n .md .alert-tip .alert-label { color: var(--cg-color-status-success-text-default); }\n\n .md .alert-important {\n border-left-color: var(--cg-color-accent-text);\n background: var(--cg-overlay-accent-light);\n }\n .md .alert-important .alert-label { color: var(--cg-color-accent-text); }\n\n .md .alert-warning {\n border-left-color: var(--cg-color-status-warning-text-default);\n background: var(--cg-color-status-warning-background-default);\n }\n .md .alert-warning .alert-label { color: var(--cg-color-status-warning-text-default); }\n\n .md .alert-caution {\n border-left-color: var(--cg-color-status-error-text-default);\n background: var(--cg-color-status-error-background-default);\n }\n .md .alert-caution .alert-label { color: var(--cg-color-status-error-text-default); }\n\n /* ── Task lists — checkbox-prefixed list items. */\n .md .task-list { padding-left: 0; list-style: none; }\n .md .task-list .task {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-8);\n }\n .md .task-check {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--cg-spacing-16);\n height: var(--cg-spacing-16);\n flex-shrink: 0;\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-50);\n background: transparent;\n }\n .md .task-check-on {\n background: var(--cg-color-action-primary-background-default);\n border-color: var(--cg-color-action-primary-border-default);\n position: relative;\n }\n .md .task-check-on::after {\n content: '✓';\n color: var(--cg-color-action-primary-text-default);\n font-size: 0.75em;\n font-weight: var(--cg-font-weight-bold);\n line-height: 1;\n }\n\n /* Rule 10 — visually hidden, screen-reader-only state text. */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n /* ── Heading anchors — visible on heading hover, \"#\" link to the slugged id. */\n .md :is(h1, h2, h3, h4, h5, h6) .anchor {\n display: inline-block;\n margin-left: var(--cg-spacing-6);\n color: var(--cg-color-surface-container-outlined);\n text-decoration: none;\n opacity: 0;\n transition: opacity var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .md :is(h1, h2, h3, h4, h5, h6):hover .anchor,\n .md :is(h1, h2, h3, h4, h5, h6) .anchor:focus-visible { opacity: 1; }\n .md .anchor:hover { color: var(--cg-color-accent-text); }\n\n /* ── Links ── 4px underline-offset reads as polished prose (not UI). */\n .md a {\n color: var(--cg-color-accent-text);\n text-decoration: underline;\n text-decoration-thickness: var(--cg-border-width-50);\n text-underline-offset: var(--cg-spacing-4);\n text-decoration-color: color-mix(in oklch, currentColor 40%, transparent);\n transition: text-decoration-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .md a:hover { text-decoration-color: currentColor; }\n\n /* ── Lists ── more breathable item spacing for readable prose. */\n .md ul, .md ol {\n margin: var(--cg-spacing-16) 0;\n padding-left: var(--cg-spacing-24);\n }\n .md li { margin: var(--cg-spacing-6) 0; }\n\n /* ── Blockquote ── */\n .md blockquote {\n border-left: var(--cg-border-width-300) solid var(--cg-color-action-primary-border-default);\n padding-left: var(--cg-spacing-16);\n color: var(--cg-color-surface-container-outlined);\n margin: var(--cg-spacing-16) 0;\n font-style: italic;\n }\n\n /* ── HR ── premium gradient rule (Stripe / Vercel pattern). */\n .md hr {\n border: 0;\n height: var(--cg-border-width-50);\n background: linear-gradient(\n to right,\n transparent,\n var(--cg-color-surface-container-border),\n transparent\n );\n margin: var(--cg-spacing-32) 0;\n }\n\n /* ── Selection highlight ── matches the brand accent. */\n .md ::selection {\n background: var(--cg-overlay-accent-light);\n color: var(--cg-color-surface-base-text);\n }\n\n /* ── Images ── contained to the prose column. */\n .md img {\n max-width: 100%;\n height: auto;\n border-radius: var(--cg-border-radius-100);\n }\n\n /* ── Table ── */\n .md table {\n width: 100%;\n border-collapse: collapse;\n margin: var(--cg-spacing-12) 0;\n font-size: var(--cg-font-size-sm);\n }\n .md th {\n text-align: left;\n padding: var(--cg-spacing-8) var(--cg-spacing-12);\n border-bottom: var(--cg-border-width-100) solid var(--cg-color-surface-container-border);\n font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-container-outlined);\n font-size: var(--cg-font-size-xs);\n }\n .md td {\n padding: var(--cg-spacing-8) var(--cg-spacing-12);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-container-border);\n }\n `];\n\n @property() text = '';\n\n /**\n * Line-based markdown parser. Classifies each line into a block type,\n * groups consecutive same-type lines, and renders each block with\n * inline formatting applied to text content.\n *\n * Handles: headings (#), code fences (```), blockquotes (>), horizontal\n * rules (---), unordered lists (-), ordered lists (1.), and paragraphs.\n * Inline: bold (**), italic (*), inline code (`), links ([text](url)).\n */\n private _render(md: string): string {\n const lines = md.replace(/\\r\\n/g, '\\n').split('\\n');\n const blocks: string[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i]!;\n\n // Fenced code block — wrapped with header chrome (lang label + copy button)\n if (line.startsWith('```')) {\n const lang = line.slice(3).trim();\n const codeLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i]!.startsWith('```')) {\n codeLines.push(lines[i]!);\n i++;\n }\n if (i < lines.length) i++; // skip closing fence\n const code = escapeHtml(codeLines.join('\\n'));\n const langClean = /^\\w+$/.test(lang) ? lang : '';\n const langClass = langClean ? ` class=\"language-${langClean}\"` : '';\n const langLabel = `<span class=\"code-lang\">${langClean}</span>`;\n blocks.push(\n `<div class=\"code-block\">` +\n `<div class=\"code-header\">${langLabel}` +\n `<button class=\"code-copy\" type=\"button\" aria-label=\"Copy code\">Copy</button>` +\n `</div>` +\n `<pre><code${langClass}>${code}</code></pre>` +\n `</div>`,\n );\n continue;\n }\n\n // Heading (# through ######) — auto-anchored with id + hover-visible \"#\" link\n const headingMatch = /^(#{1,6}) (.+)$/.exec(line);\n if (headingMatch) {\n const level = headingMatch[1]!.length;\n const text = headingMatch[2]!;\n const slug = slugify(text);\n const inline = this._inline(text);\n const anchor = slug\n ? ` <a class=\"anchor\" href=\"#${slug}\" aria-label=\"Permalink to this heading\">#</a>`\n : '';\n const idAttr = slug ? ` id=\"${slug}\"` : '';\n blocks.push(`<h${level}${idAttr}>${inline}${anchor}</h${level}>`);\n i++;\n continue;\n }\n\n // Horizontal rule\n if (/^-{3,}$/.test(line.trim())) {\n blocks.push('<hr/>');\n i++;\n continue;\n }\n\n // Blockquote (consecutive > lines) — first line may be an alert marker\n // `[!NOTE]`, `[!TIP]`, `[!IMPORTANT]`, `[!WARNING]`, `[!CAUTION]`.\n if (line.startsWith('> ') || line === '>') {\n const quoteLines: string[] = [];\n while (i < lines.length && (lines[i]!.startsWith('> ') || lines[i] === '>')) {\n quoteLines.push(lines[i]!.replace(/^> ?/, ''));\n i++;\n }\n const alertMatch = /^\\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\\]\\s*$/i.exec(quoteLines[0] ?? '');\n if (alertMatch && ALERT_TYPES.has(alertMatch[1]!.toLowerCase())) {\n const type = alertMatch[1]!.toLowerCase();\n const label = type.charAt(0).toUpperCase() + type.slice(1);\n // Run the body through the block parser so lists and paragraphs\n // inside alerts render as real blocks, not flattened inline text.\n const body = this._render(quoteLines.slice(1).join('\\n'));\n blocks.push(\n `<blockquote class=\"alert alert-${type}\">` +\n `<div class=\"alert-header\"><span class=\"alert-label\">${label}</span></div>` +\n `<div class=\"alert-body\">${body}</div>` +\n `</blockquote>`,\n );\n } else {\n blocks.push(`<blockquote>${this._inline(quoteLines.join(' '))}</blockquote>`);\n }\n continue;\n }\n\n // Unordered list (consecutive - items) — items can be plain or task `- [ ]` / `- [x]`\n if (/^[-*] /.test(line)) {\n const items: string[] = [];\n let isTaskList = false;\n while (i < lines.length && /^[-*] /.test(lines[i]!)) {\n const itemContent = lines[i]!.slice(2);\n const taskMatch = /^\\[([ xX])\\]\\s+(.*)$/.exec(itemContent);\n if (taskMatch) {\n isTaskList = true;\n const checked = taskMatch[1]!.toLowerCase() === 'x';\n const checkClass = checked ? 'task-check task-check-on' : 'task-check';\n items.push(\n `<li class=\"task\">` +\n `<span class=\"${checkClass}\" aria-hidden=\"true\"></span>` +\n `<span class=\"sr-only\">${checked ? 'Done: ' : 'To do: '}</span>` +\n this._inline(taskMatch[2]!) +\n `</li>`,\n );\n } else {\n items.push(`<li>${this._inline(itemContent)}</li>`);\n }\n i++;\n }\n const listClass = isTaskList ? ' class=\"task-list\"' : '';\n blocks.push(`<ul${listClass}>${items.join('')}</ul>`);\n continue;\n }\n\n // Ordered list (consecutive 1. 2. 3. items)\n if (/^\\d+\\. /.test(line)) {\n const items: string[] = [];\n while (i < lines.length && /^\\d+\\. /.test(lines[i]!)) {\n items.push(`<li>${this._inline(lines[i]!.replace(/^\\d+\\. /, ''))}</li>`);\n i++;\n }\n blocks.push(`<ol>${items.join('')}</ol>`);\n continue;\n }\n\n // GFM pipe table — header row, then a |---|---| separator row, then body rows\n if (/^\\|.+\\|\\s*$/.test(line) && i + 1 < lines.length && /^\\|(\\s*:?-+:?\\s*\\|)+\\s*$/.test(lines[i + 1]!)) {\n const splitRow = (row: string): string[] =>\n row.trim().replace(/^\\|/, '').replace(/\\|$/, '').split('|').map(cell => this._inline(cell.trim()));\n const headers = splitRow(line);\n i += 2; // consume header + separator\n const bodyRows: string[][] = [];\n while (i < lines.length && /^\\|.+\\|\\s*$/.test(lines[i]!)) {\n bodyRows.push(splitRow(lines[i]!));\n i++;\n }\n const thead = `<thead><tr>${headers.map(h => `<th>${h}</th>`).join('')}</tr></thead>`;\n const tbody = bodyRows.length\n ? `<tbody>${bodyRows.map(r => `<tr>${r.map(c => `<td>${c}</td>`).join('')}</tr>`).join('')}</tbody>`\n : '';\n blocks.push(`<table>${thead}${tbody}</table>`);\n continue;\n }\n\n // Blank line — paragraph separator\n if (line.trim() === '') {\n i++;\n continue;\n }\n\n // Paragraph — consecutive non-blank, non-block lines joined with spaces.\n // The first line is consumed unconditionally: a pipe row without a\n // separator line is a block start that no branch above claims, and\n // skipping the consume would loop forever.\n const paraLines: string[] = [line];\n i++;\n while (i < lines.length && lines[i]!.trim() !== '' && !isBlockStart(lines[i]!)) {\n paraLines.push(lines[i]!);\n i++;\n }\n blocks.push(`<p>${this._inline(paraLines.join(' '))}</p>`);\n }\n\n return blocks.join('');\n }\n\n /**\n * Applies inline formatting. Escapes HTML first, then processes\n * inline code (via placeholder to avoid interference), bold, italic,\n * and links with URL safety checks.\n */\n private _inline(text: string): string {\n // Extract inline code as placeholders so bold/italic regex don't touch it\n const codeStash: string[] = [];\n let working = text.replace(/`([^`]+)`/g, (_, code: string) => {\n codeStash.push(escapeHtml(code));\n return `\\x00CODE${codeStash.length - 1}\\x00`;\n });\n\n // Escape remaining HTML\n working = escapeHtml(working);\n\n // Bold before italic so ** doesn't get half-eaten by *\n working = working\n .replace(/\\*\\*([^*\\n]+)\\*\\*/g, '<strong>$1</strong>')\n .replace(/\\*([^*\\n]+)\\*/g, '<em>$1</em>');\n\n // Images — must run BEFORE links so ![alt](src) isn't half-eaten by the\n // link rule. Unsafe protocols degrade to the alt text; the DOM sanitizer\n // re-validates src as a backstop.\n working = working.replace(\n /!\\[([^\\]]*)\\]\\(((?:[^()\\s]|\\([^)]*\\))+)\\)/g,\n (_m, alt: string, url: string) => {\n const trimmed = url.trim();\n return SAFE_PROTOCOLS.test(trimmed) ? `<img src=\"${trimmed}\" alt=\"${alt}\">` : alt;\n },\n );\n\n // Links — handle URLs with balanced single-level parens\n working = working.replace(\n /\\[([^\\]]+)\\]\\(((?:[^()\\s]|\\([^)]*\\))+)\\)/g,\n (_m, label: string, url: string) => {\n const trimmed = url.trim();\n const safe = SAFE_PROTOCOLS.test(trimmed) ? trimmed : 'about:blank';\n return `<a href=\"${safe}\" target=\"_blank\" rel=\"noopener\">${label}</a>`;\n },\n );\n\n // Restore inline code\n working = working.replace(/\\x00CODE(\\d+)\\x00/g, (_m, idx: string) => {\n return `<code>${codeStash[Number(idx)]}</code>`;\n });\n\n return working;\n }\n\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('text')) {\n // Bind copy-button click handlers AFTER Lit has applied innerHTML.\n // The buttons come from sanitized HTML so they have no inline handlers.\n requestAnimationFrame(() => {\n const buttons = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.code-copy');\n buttons?.forEach(btn => this._bindCopyButton(btn));\n this.shadowRoot?.querySelectorAll<HTMLAnchorElement>('.anchor').forEach(a => this._bindAnchor(a));\n });\n }\n }\n\n override firstUpdated(): void {\n // Deep-link support: fragment navigation can't reach shadow-root ids, so\n // resolve the initial location.hash ourselves once content is rendered.\n requestAnimationFrame(() => {\n const slug = location.hash.slice(1);\n if (!slug) return;\n this.shadowRoot?.getElementById(slug)?.scrollIntoView({ block: 'start' });\n });\n }\n\n private _bindAnchor(a: HTMLAnchorElement): void {\n if (a.dataset['cgBound']) return;\n a.dataset['cgBound'] = '1';\n a.addEventListener('click', (e) => {\n // Browsers can't fragment-navigate into a shadow root — scroll manually\n // (scroll-margin-top's tier-3 token applies to scrollIntoView).\n e.preventDefault();\n const slug = a.getAttribute('href')?.slice(1);\n if (!slug) return;\n history.replaceState(null, '', `#${slug}`);\n this.shadowRoot?.getElementById(slug)?.scrollIntoView({ block: 'start' });\n });\n }\n\n private _bindCopyButton(btn: HTMLButtonElement): void {\n if (btn.dataset['cgBound']) return;\n btn.dataset['cgBound'] = '1';\n // Announce the Copy -> Copied swap to screen readers (set post-sanitize\n // via JS so the sanitizer allowlist stays unchanged).\n btn.setAttribute('aria-live', 'polite');\n btn.addEventListener('click', async () => {\n const block = btn.closest('.code-block');\n const pre = block?.querySelector('pre');\n const codeText = pre?.textContent ?? '';\n try {\n await navigator.clipboard?.writeText(codeText);\n const original = btn.textContent;\n btn.textContent = 'Copied';\n setTimeout(() => {\n if (btn.textContent === 'Copied') btn.textContent = original;\n }, 1200);\n } catch {\n // Clipboard API may be blocked (insecure context, permission denied);\n // silently fail — the code is still selectable.\n }\n });\n }\n\n override render() {\n // SSR has no DOMParser/document — emit an empty prose container and let\n // the client fill it on hydration.\n if (typeof DOMParser === 'undefined') {\n return html`<div class=\"md\"></div>`;\n }\n return html`<div class=\"md\" .innerHTML=${sanitizeHtml(this._render(this.text))}></div>`;\n }\n}\n\ndeclare global { interface HTMLElementTagNameMap { 'cg-markdown': CgMarkdown; } }\n"],"names":["ALLOWED_TAGS","ALLOWED_ATTRS","SAFE_PROTOCOLS","ALERT_TYPES","slugify","text","escapeHtml","isBlockStart","line","sanitizeHtml","raw","doc","fragment","walk","source","target","child","el","tag","clean","allowed","attr","val","container","CgMarkdown","LitElement","md","lines","blocks","i","lang","codeLines","code","langClean","langClass","langLabel","headingMatch","level","slug","inline","anchor","idAttr","quoteLines","alertMatch","type","label","body","items","isTaskList","itemContent","taskMatch","checked","checkClass","listClass","splitRow","row","cell","headers","bodyRows","thead","h","tbody","r","c","paraLines","codeStash","working","_","_m","alt","url","trimmed","idx","changed","btn","a","e","codeText","original","html","hostBlock","reducedMotion","css","__decorateClass","property","customElement"],"mappings":"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"}