@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
@@ -33,6 +33,8 @@ export declare class CgMenubar extends LitElement {
33
33
  * canonical macOS / VSCode / Figma app-menubar look.
34
34
  */
35
35
  indicator: 'underline' | 'none';
36
+ /** Accessible name for the menubar (W3C APG requires a labeled menubar). */
37
+ label: string;
36
38
  private _openIndex;
37
39
  /** Roving-tabindex: only the focused menubar item is in the tab order. */
38
40
  private _focusedTopIndex;
@@ -40,8 +42,12 @@ export declare class CgMenubar extends LitElement {
40
42
  private _indicatorLeft;
41
43
  private _indicatorWidth;
42
44
  private _outsideHandler;
45
+ /** Re-measure the indicator on resize so it doesn't drift while a menu is open. */
46
+ private _resizeObserver;
43
47
  connectedCallback(): void;
44
48
  disconnectedCallback(): void;
49
+ /** Measure the active trigger and slide the underline indicator under it. */
50
+ private _measureIndicator;
45
51
  updated(changed: Map<string, unknown>): void;
46
52
  /** Hover-switches: once a menu is open, hovering a sibling top-trigger
47
53
  * instantly switches to that menu. Standard app-bar behavior. Does NOT
@@ -1 +1 @@
1
- {"version":3,"file":"cg-menubar.d.ts","sourceRoot":"","sources":["../../../src/components/cg-menubar/cg-menubar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED;;;;;GAKG;AACH,qBACa,SAAU,SAAQ,UAAU;IACvC,OAAgB,MAAM,4BAyHnB;IAEwB,KAAK,EAAE,WAAW,EAAE,CAAM;IACrD,mEAAmE;IACtC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAQ;IAClF,yDAAyD;IAC5B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAC7D;;;;;;OAMG;IAC0B,SAAS,EAAE,WAAW,GAAG,MAAM,CAAe;IAElE,OAAO,CAAC,UAAU,CAAM;IACjC,0EAA0E;IACjE,OAAO,CAAC,gBAAgB,CAAK;IACtC,qEAAqE;IAC5D,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,eAAe,CAAK;IAErC,OAAO,CAAC,eAAe,CAErB;IAEO,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAK5B,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAerD;;yEAEqE;IACrE,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,iBAAiB;IAuEzB;2EACuE;IACvE,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,YAAY;IASX,MAAM;CAyChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,SAAS,CAAC;KACzB;CACF"}
1
+ {"version":3,"file":"cg-menubar.d.ts","sourceRoot":"","sources":["../../../src/components/cg-menubar/cg-menubar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED;;;;;GAKG;AACH,qBACa,SAAU,SAAQ,UAAU;IACvC,OAAgB,MAAM,4BAwHnB;IAEwB,KAAK,EAAE,WAAW,EAAE,CAAM;IACrD,mEAAmE;IACtC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAQ;IAClF,yDAAyD;IAC5B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAC7D;;;;;;OAMG;IAC0B,SAAS,EAAE,WAAW,GAAG,MAAM,CAAe;IAC3E,4EAA4E;IAChE,KAAK,SAAsB;IAE9B,OAAO,CAAC,UAAU,CAAM;IACjC,0EAA0E;IACjE,OAAO,CAAC,gBAAgB,CAAK;IACtC,qEAAqE;IAC5D,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,eAAe,CAAK;IAErC,OAAO,CAAC,eAAe,CAErB;IAEF,mFAAmF;IACnF,OAAO,CAAC,eAAe,CAA6B;IAE3C,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAOrC,6EAA6E;IAC7E,OAAO,CAAC,iBAAiB;IAYhB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWrD;;yEAEqE;IACrE,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAwDrB,OAAO,CAAC,iBAAiB;IA4EzB;2EACuE;IACvE,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,YAAY;IASX,MAAM;CAyChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,SAAS,CAAC;KACzB;CACF"}
@@ -1,32 +1,36 @@
1
- import { css as f, LitElement as m, nothing as h, html as d } from "lit";
2
- import { property as l, state as u, customElement as v } from "lit/decorators.js";
3
- import { h as b, r as y, m as _ } from "../../chunks/premium.css-9I4kHrsl.js";
4
- var w = Object.defineProperty, x = Object.getOwnPropertyDescriptor, c = (e, r, o, t) => {
5
- for (var s = t > 1 ? void 0 : t ? x(r, o) : r, n = e.length - 1, a; n >= 0; n--)
6
- (a = e[n]) && (s = (t ? a(r, o, s) : a(s)) || s);
7
- return t && s && w(r, o, s), s;
1
+ import { css as f, LitElement as b, nothing as h, html as d } from "lit";
2
+ import { property as l, state as u, customElement as m } from "lit/decorators.js";
3
+ import { h as v, r as _, m as y, e as w } from "../../chunks/premium.css-DHekUEUt.js";
4
+ var x = Object.defineProperty, k = Object.getOwnPropertyDescriptor, a = (e, r, o, t) => {
5
+ for (var n = t > 1 ? void 0 : t ? k(r, o) : r, s = e.length - 1, c; s >= 0; s--)
6
+ (c = e[s]) && (n = (t ? c(r, o, n) : c(n)) || n);
7
+ return t && n && x(r, o, n), n;
8
8
  };
9
- let i = class extends m {
9
+ let i = class extends b {
10
10
  constructor() {
11
- super(...arguments), this.items = [], this.rounded = "md", this.size = "md", this.indicator = "underline", this._openIndex = -1, this._focusedTopIndex = 0, this._indicatorLeft = 0, this._indicatorWidth = 0, this._outsideHandler = (e) => {
11
+ super(...arguments), this.items = [], this.rounded = "md", this.size = "md", this.indicator = "underline", this.label = "Application menu", this._openIndex = -1, this._focusedTopIndex = 0, this._indicatorLeft = 0, this._indicatorWidth = 0, this._outsideHandler = (e) => {
12
12
  e.composedPath().includes(this) || (this._openIndex = -1);
13
13
  };
14
14
  }
15
15
  connectedCallback() {
16
- super.connectedCallback(), document.addEventListener("click", this._outsideHandler);
16
+ super.connectedCallback(), document.addEventListener("click", this._outsideHandler), this._resizeObserver = new ResizeObserver(() => {
17
+ this._openIndex >= 0 && this._measureIndicator();
18
+ }), this._resizeObserver.observe(this);
17
19
  }
18
20
  disconnectedCallback() {
19
- super.disconnectedCallback(), document.removeEventListener("click", this._outsideHandler);
21
+ super.disconnectedCallback(), document.removeEventListener("click", this._outsideHandler), this._resizeObserver?.disconnect(), this._resizeObserver = void 0;
20
22
  }
21
- updated(e) {
22
- if (e.has("_openIndex") && this._openIndex >= 0) {
23
- const r = this.shadowRoot?.querySelectorAll(".top-trigger"), o = this.shadowRoot?.querySelector('[role="menubar"]'), t = r?.[this._openIndex];
24
- if (t && o) {
25
- const s = t.getBoundingClientRect(), n = o.getBoundingClientRect();
26
- this._indicatorLeft = s.left - n.left, this._indicatorWidth = s.width;
27
- }
23
+ /** Measure the active trigger and slide the underline indicator under it. */
24
+ _measureIndicator() {
25
+ const e = this.shadowRoot?.querySelectorAll(".top-trigger"), r = this.shadowRoot?.querySelector('[role="menubar"]'), o = e?.[this._openIndex];
26
+ if (o && r) {
27
+ const t = o.getBoundingClientRect(), n = r.getBoundingClientRect();
28
+ this._indicatorLeft = t.left - n.left, this._indicatorWidth = t.width;
28
29
  }
29
30
  }
31
+ updated(e) {
32
+ this.toggleAttribute("open", this._openIndex >= 0), e.has("_openIndex") && this._openIndex >= 0 && this._measureIndicator();
33
+ }
30
34
  /** Hover-switches: once a menu is open, hovering a sibling top-trigger
31
35
  * instantly switches to that menu. Standard app-bar behavior. Does NOT
32
36
  * activate on hover when no menu is open — that would be hostile. */
@@ -55,6 +59,12 @@ let i = class extends m {
55
59
  case "End":
56
60
  e.preventDefault(), this._focusTop(o - 1);
57
61
  break;
62
+ case "ArrowUp":
63
+ e.preventDefault(), this._openIndex = r, this.updateComplete.then(() => {
64
+ const t = this.shadowRoot?.querySelectorAll(".menu .menu-item:not(.disabled)");
65
+ t?.[t.length - 1]?.focus();
66
+ });
67
+ break;
58
68
  case "Escape":
59
69
  e.preventDefault(), this._openIndex = -1;
60
70
  break;
@@ -74,21 +84,21 @@ let i = class extends m {
74
84
  return;
75
85
  }
76
86
  if (e.key === "Tab") {
77
- this._openIndex = -1;
87
+ this._focusedTopIndex = r, this.shadowRoot?.querySelectorAll(".top-trigger")[r]?.focus(), this._openIndex = -1;
78
88
  return;
79
89
  }
80
90
  if (e.key === "ArrowRight") {
81
91
  e.preventDefault();
82
- const n = (r + 1) % o;
83
- this._openIndex = n, this._focusedTopIndex = n, this.updateComplete.then(() => {
92
+ const s = (r + 1) % o;
93
+ this._openIndex = s, this._focusedTopIndex = s, this.updateComplete.then(() => {
84
94
  this.shadowRoot?.querySelector(".menu .menu-item:not(.disabled)")?.focus();
85
95
  });
86
96
  return;
87
97
  }
88
98
  if (e.key === "ArrowLeft") {
89
99
  e.preventDefault();
90
- const n = (r - 1 + o) % o;
91
- this._openIndex = n, this._focusedTopIndex = n, this.updateComplete.then(() => {
100
+ const s = (r - 1 + o) % o;
101
+ this._openIndex = s, this._focusedTopIndex = s, this.updateComplete.then(() => {
92
102
  this.shadowRoot?.querySelector(".menu .menu-item:not(.disabled)")?.focus();
93
103
  });
94
104
  return;
@@ -97,20 +107,20 @@ let i = class extends m {
97
107
  this.shadowRoot?.querySelectorAll(".menu .menu-item:not(.disabled)") ?? []
98
108
  );
99
109
  if (!t.length) return;
100
- const s = t.findIndex((n) => n === this.shadowRoot?.activeElement);
110
+ const n = t.findIndex((s) => s === this.shadowRoot?.activeElement);
101
111
  if (e.key === "ArrowDown" || e.key === "ArrowUp") {
102
112
  e.preventDefault();
103
- const n = e.key === "ArrowDown" ? 1 : -1, a = (s + n + t.length) % t.length;
104
- t[a]?.focus();
113
+ const s = e.key === "ArrowDown" ? 1 : -1, c = (n + s + t.length) % t.length;
114
+ t[c]?.focus();
105
115
  } else if (e.key === "Home")
106
116
  e.preventDefault(), t[0]?.focus();
107
117
  else if (e.key === "End")
108
118
  e.preventDefault(), t[t.length - 1]?.focus();
109
119
  else if (e.key.length === 1 && /\S/.test(e.key) && !e.metaKey && !e.ctrlKey && !e.altKey) {
110
- const n = e.key.toLowerCase(), a = s >= 0 ? (s + 1) % t.length : 0;
120
+ const s = e.key.toLowerCase(), c = n >= 0 ? (n + 1) % t.length : 0;
111
121
  for (let p = 0; p < t.length; p++) {
112
- const g = (a + p) % t.length;
113
- if (t[g]?.textContent?.trim().toLowerCase().startsWith(n)) {
122
+ const g = (c + p) % t.length;
123
+ if (t[g]?.textContent?.trim().toLowerCase().startsWith(s)) {
114
124
  e.preventDefault(), t[g]?.focus();
115
125
  break;
116
126
  }
@@ -121,9 +131,9 @@ let i = class extends m {
121
131
  * starting AFTER `fromIdx`. Wraps around. Returns -1 if none match. */
122
132
  _findTypeaheadIndex(e, r) {
123
133
  const o = e.toLowerCase(), t = this.items.length;
124
- for (let s = 1; s <= t; s++) {
125
- const n = (r + s) % t;
126
- if (this.items[n]?.label.toLowerCase().startsWith(o)) return n;
134
+ for (let n = 1; n <= t; n++) {
135
+ const s = (r + n) % t;
136
+ if (this.items[s]?.label.toLowerCase().startsWith(o)) return s;
127
137
  }
128
138
  return -1;
129
139
  }
@@ -142,7 +152,7 @@ let i = class extends m {
142
152
  render() {
143
153
  const e = `transform: translateX(${this._indicatorLeft}px); width: ${this._indicatorWidth}px;`;
144
154
  return d`
145
- <div role="menubar">
155
+ <div role="menubar" aria-label=${this.label}>
146
156
  <div class="indicator ${this._openIndex >= 0 ? "visible" : ""}" style=${e} aria-hidden="true"></div>
147
157
  ${this.items.map((r, o) => d`
148
158
  <div class="menu-wrap">
@@ -163,12 +173,12 @@ let i = class extends m {
163
173
  >${r.label}</button>
164
174
  ${this._openIndex === o ? d`
165
175
  <div class="menu" role="menu" aria-label=${r.label} @keydown=${(t) => this._onSubmenuKeydown(t, o)}>
166
- ${r.children.map((t, s) => t.separator ? d`<div class="divider" role="separator"></div>` : d`
176
+ ${r.children.map((t, n) => t.separator ? d`<div class="divider" role="separator"></div>` : d`
167
177
  <button
168
178
  class="menu-item ${t.disabled ? "disabled" : ""} ${t.danger ? "danger" : ""}"
169
179
  role="menuitem"
170
180
  aria-disabled=${t.disabled ? "true" : "false"}
171
- style="--stagger-index: ${s}"
181
+ style="--stagger-index: ${n}"
172
182
  @click=${() => this._selectChild(r, t)}
173
183
  >
174
184
  <span>${t.label}</span>
@@ -183,7 +193,7 @@ let i = class extends m {
183
193
  `;
184
194
  }
185
195
  };
186
- i.styles = [b, y, _, f`
196
+ i.styles = [v, _, y, w, f`
187
197
  :host {
188
198
  display: block;
189
199
  color: var(--cg-color-surface-container-text);
@@ -259,7 +269,6 @@ i.styles = [b, y, _, f`
259
269
  font-weight: var(--cg-font-weight-medium);
260
270
  border-radius: var(--cg-border-radius-50);
261
271
  cursor: pointer;
262
- transition: background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
263
272
  }
264
273
  :host([size="sm"]) .top-trigger {
265
274
  padding: var(--cg-spacing-6) var(--cg-spacing-8);
@@ -305,32 +314,35 @@ i.styles = [b, y, _, f`
305
314
  z-index: var(--cg-z-index-500);
306
315
  }
307
316
  `];
308
- c([
317
+ a([
309
318
  l({ type: Array })
310
319
  ], i.prototype, "items", 2);
311
- c([
320
+ a([
312
321
  l({ reflect: !0 })
313
322
  ], i.prototype, "rounded", 2);
314
- c([
323
+ a([
315
324
  l({ reflect: !0 })
316
325
  ], i.prototype, "size", 2);
317
- c([
326
+ a([
318
327
  l({ reflect: !0 })
319
328
  ], i.prototype, "indicator", 2);
320
- c([
329
+ a([
330
+ l()
331
+ ], i.prototype, "label", 2);
332
+ a([
321
333
  u()
322
334
  ], i.prototype, "_openIndex", 2);
323
- c([
335
+ a([
324
336
  u()
325
337
  ], i.prototype, "_focusedTopIndex", 2);
326
- c([
338
+ a([
327
339
  u()
328
340
  ], i.prototype, "_indicatorLeft", 2);
329
- c([
341
+ a([
330
342
  u()
331
343
  ], i.prototype, "_indicatorWidth", 2);
332
- i = c([
333
- v("cg-menubar")
344
+ i = a([
345
+ m("cg-menubar")
334
346
  ], i);
335
347
  export {
336
348
  i as CgMenubar
@@ -1 +1 @@
1
- {"version":3,"file":"cg-menubar.js","sources":["../../../src/components/cg-menubar/cg-menubar.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, menuListStyles } from '../../styles/index.js';\n\nexport interface MenubarChildItem {\n label: string;\n shortcut?: string;\n disabled?: boolean;\n danger?: boolean;\n separator?: boolean;\n id?: string;\n}\n\nexport interface MenubarItem {\n label: string;\n id?: string;\n children: MenubarChildItem[];\n}\n\n/**\n * @element cg-menubar\n * App-style horizontal menu bar (File/Edit/View) with dropdown submenus.\n *\n * @fires {CustomEvent<{menu:string,item:string}>} cg-menubar-select\n */\n@customElement('cg-menubar')\nexport class CgMenubar extends LitElement {\n static override styles = [hostBlock, reducedMotion, menuListStyles, css`\n :host {\n display: block;\n color: var(--cg-color-surface-container-text);\n }\n\n /* Top-level horizontal bar containing the menu triggers. */\n [role=\"menubar\"] {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-4);\n padding: var(--cg-spacing-6);\n background: var(--cg-color-surface-container-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-container-border);\n border-radius: var(--cg-border-radius-100);\n position: relative; /* anchor for the magnetic underline indicator */\n }\n\n /* Magnetic underline that slides under the active trigger. JS measures\n the trigger's position; CSS handles the smooth slide. */\n .indicator {\n position: absolute;\n bottom: calc(var(--cg-spacing-2) * -1);\n left: 0;\n height: var(--cg-spacing-2);\n background: var(--cg-color-action-primary-background-default);\n border-radius: var(--cg-border-radius-full);\n pointer-events: none;\n opacity: 0;\n transform: translateX(0);\n transition:\n transform var(--cg-transition-duration-default) var(--cg-transition-easing-bounce),\n width var(--cg-transition-duration-default) var(--cg-transition-easing-bounce),\n opacity var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .indicator.visible {\n opacity: 1;\n }\n @media (prefers-reduced-motion: reduce) {\n .indicator { transition: opacity var(--cg-transition-duration-fast) ease; }\n }\n /* Indicator can be disabled for the canonical macOS / VSCode app-menubar\n look — only the open trigger's background highlight remains. */\n :host([indicator=\"none\"]) .indicator { display: none; }\n\n /* ── Rounded variants — match cg-button's rounded scale ── */\n :host([rounded=\"none\"]) [role=\"menubar\"] { border-radius: 0; }\n :host([rounded=\"sm\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-full); }\n /* Fully-rounded bar wants pill triggers too so corners don't clash. */\n :host([rounded=\"full\"]) .top-trigger { border-radius: var(--cg-border-radius-full); }\n\n /* ── Size variants ── */\n :host([size=\"sm\"]) [role=\"menubar\"] {\n gap: var(--cg-spacing-2);\n padding: var(--cg-spacing-4);\n }\n :host([size=\"lg\"]) [role=\"menubar\"] {\n gap: var(--cg-spacing-6);\n padding: var(--cg-spacing-8);\n }\n\n .top-trigger {\n display: inline-flex;\n align-items: center;\n padding: var(--cg-spacing-8) var(--cg-spacing-12);\n background: transparent;\n border: none;\n color: inherit;\n font: inherit;\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n border-radius: var(--cg-border-radius-50);\n cursor: pointer;\n transition: background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n :host([size=\"sm\"]) .top-trigger {\n padding: var(--cg-spacing-6) var(--cg-spacing-8);\n font-size: var(--cg-font-size-xs);\n }\n :host([size=\"lg\"]) .top-trigger {\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n font-size: var(--cg-font-size-base);\n }\n .top-trigger:hover,\n .top-trigger.open {\n background: var(--cg-color-action-tertiary-background-hover);\n }\n .top-trigger.open {\n color: var(--cg-color-surface-base-text);\n }\n .top-trigger:active:not([disabled]) {\n transform: scale(var(--cg-interaction-press-scale));\n }\n .top-trigger {\n transition:\n background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .top-trigger: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\n /* Submenu positioning — visual styling (surface, items, divider, animation,\n rounded variants) inherited from menuListStyles for consistency with\n cg-dropdown / cg-split-button. */\n .menu-wrap {\n position: relative;\n }\n .menu {\n position: absolute;\n top: calc(100% + var(--cg-spacing-6));\n left: 0;\n z-index: var(--cg-z-index-500);\n }\n `];\n\n @property({ type: Array }) items: MenubarItem[] = [];\n /** Border-radius variant — matches cg-button's `rounded` scale. */\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n /** Size variant — drives padding, gap, and font size. */\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n /**\n * Active-menu indicator style.\n * - `\"underline\"` (default): magnetic 2px bar slides between open menus —\n * modern web menubars (Notion, Vercel, Linear) use this style.\n * - `\"none\"`: rely only on the open trigger's background highlight —\n * canonical macOS / VSCode / Figma app-menubar look.\n */\n @property({ reflect: true }) indicator: 'underline' | 'none' = 'underline';\n\n @state() private _openIndex = -1;\n /** Roving-tabindex: only the focused menubar item is in the tab order. */\n @state() private _focusedTopIndex = 0;\n /** Magnetic indicator geometry, measured from the active trigger. */\n @state() private _indicatorLeft = 0;\n @state() private _indicatorWidth = 0;\n\n private _outsideHandler = (e: MouseEvent) => {\n if (!e.composedPath().includes(this)) this._openIndex = -1;\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('click', this._outsideHandler);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('click', this._outsideHandler);\n }\n\n override updated(changed: Map<string, unknown>): void {\n // Measure the active trigger and slide the underline indicator under it.\n if (changed.has('_openIndex') && this._openIndex >= 0) {\n const triggers = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n const bar = this.shadowRoot?.querySelector<HTMLElement>('[role=\"menubar\"]');\n const trigger = triggers?.[this._openIndex];\n if (trigger && bar) {\n const tRect = trigger.getBoundingClientRect();\n const bRect = bar.getBoundingClientRect();\n this._indicatorLeft = tRect.left - bRect.left;\n this._indicatorWidth = tRect.width;\n }\n }\n }\n\n /** Hover-switches: once a menu is open, hovering a sibling top-trigger\n * instantly switches to that menu. Standard app-bar behavior. Does NOT\n * activate on hover when no menu is open — that would be hostile. */\n private _onTopHover(idx: number): void {\n if (this._openIndex >= 0 && this._openIndex !== idx) {\n this._openIndex = idx;\n this._focusedTopIndex = idx;\n }\n }\n\n private _onTopKeydown(e: KeyboardEvent, idx: number): void {\n const n = this.items.length;\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n this._focusTop((idx - 1 + n) % n);\n break;\n case 'ArrowRight':\n e.preventDefault();\n this._focusTop((idx + 1) % n);\n break;\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n e.preventDefault();\n this._openIndex = idx;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n break;\n case 'Home':\n e.preventDefault();\n this._focusTop(0);\n break;\n case 'End':\n e.preventDefault();\n this._focusTop(n - 1);\n break;\n case 'Escape':\n e.preventDefault();\n this._openIndex = -1;\n break;\n default:\n // Typeahead — single printable character jumps to next menubar item\n // whose label starts with that character (W3C APG menubar pattern).\n if (e.key.length === 1 && /\\S/.test(e.key) && !e.metaKey && !e.ctrlKey && !e.altKey) {\n const target = this._findTypeaheadIndex(e.key, idx);\n if (target !== -1 && target !== idx) {\n e.preventDefault();\n this._focusTop(target);\n }\n }\n }\n }\n\n private _onSubmenuKeydown(e: KeyboardEvent, triggerIdx: number): void {\n const n = this.items.length;\n if (e.key === 'Escape') {\n e.preventDefault();\n this._openIndex = -1;\n this.updateComplete.then(() => {\n const btns = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n btns?.[triggerIdx]?.focus();\n });\n return;\n }\n if (e.key === 'Tab') {\n // Per W3C APG: Tab exits the menubar entirely. Close the submenu and\n // let the browser's natural tab order take over.\n this._openIndex = -1;\n return;\n }\n if (e.key === 'ArrowRight') {\n // Close current submenu, move to next menubar item, open its submenu.\n e.preventDefault();\n const next = (triggerIdx + 1) % n;\n this._openIndex = next;\n this._focusedTopIndex = next;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n return;\n }\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n const prev = (triggerIdx - 1 + n) % n;\n this._openIndex = prev;\n this._focusedTopIndex = prev;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n return;\n }\n const items = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.menu .menu-item:not(.disabled)') ?? [],\n );\n if (!items.length) return;\n const current = items.findIndex(el => el === this.shadowRoot?.activeElement);\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const delta = e.key === 'ArrowDown' ? 1 : -1;\n const next = (current + delta + items.length) % items.length;\n items[next]?.focus();\n } else if (e.key === 'Home') {\n e.preventDefault();\n items[0]?.focus();\n } else if (e.key === 'End') {\n e.preventDefault();\n items[items.length - 1]?.focus();\n } else if (e.key.length === 1 && /\\S/.test(e.key) && !e.metaKey && !e.ctrlKey && !e.altKey) {\n // Typeahead inside an open submenu.\n const ch = e.key.toLowerCase();\n const start = current >= 0 ? (current + 1) % items.length : 0;\n for (let i = 0; i < items.length; i++) {\n const j = (start + i) % items.length;\n if (items[j]?.textContent?.trim().toLowerCase().startsWith(ch)) {\n e.preventDefault();\n items[j]?.focus();\n break;\n }\n }\n }\n }\n\n /** Find the next menubar item whose label starts with the typed character,\n * starting AFTER `fromIdx`. Wraps around. Returns -1 if none match. */\n private _findTypeaheadIndex(char: string, fromIdx: number): number {\n const ch = char.toLowerCase();\n const n = this.items.length;\n for (let i = 1; i <= n; i++) {\n const j = (fromIdx + i) % n;\n if (this.items[j]?.label.toLowerCase().startsWith(ch)) return j;\n }\n return -1;\n }\n\n private _focusTop(idx: number): void {\n this._openIndex = this._openIndex >= 0 ? idx : -1;\n this._focusedTopIndex = idx;\n this.updateComplete.then(() => {\n const btns = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n btns?.[idx]?.focus();\n });\n }\n\n private _selectChild(menu: MenubarItem, child: MenubarChildItem): void {\n if (child.disabled || child.separator) return;\n this.dispatchEvent(new CustomEvent('cg-menubar-select', {\n bubbles: true, composed: true,\n detail: { menu: menu.id ?? menu.label, item: child.id ?? child.label },\n }));\n this._openIndex = -1;\n }\n\n override render() {\n const indicatorStyle = `transform: translateX(${this._indicatorLeft}px); width: ${this._indicatorWidth}px;`;\n return html`\n <div role=\"menubar\">\n <div class=\"indicator ${this._openIndex >= 0 ? 'visible' : ''}\" style=${indicatorStyle} aria-hidden=\"true\"></div>\n ${this.items.map((menu, i) => html`\n <div class=\"menu-wrap\">\n <button\n class=\"top-trigger ${this._openIndex === i ? 'open' : ''}\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded=${this._openIndex === i ? 'true' : 'false'}\n tabindex=${this._focusedTopIndex === i ? 0 : -1}\n @click=${(e: MouseEvent) => { e.stopPropagation(); this._focusedTopIndex = i; this._openIndex = this._openIndex === i ? -1 : i; }}\n @focus=${() => { this._focusedTopIndex = i; }}\n @mouseenter=${() => this._onTopHover(i)}\n @keydown=${(e: KeyboardEvent) => this._onTopKeydown(e, i)}\n >${menu.label}</button>\n ${this._openIndex === i ? html`\n <div class=\"menu\" role=\"menu\" aria-label=${menu.label} @keydown=${(e: KeyboardEvent) => this._onSubmenuKeydown(e, i)}>\n ${menu.children.map((child, idx) => child.separator\n ? html`<div class=\"divider\" role=\"separator\"></div>`\n : html`\n <button\n class=\"menu-item ${child.disabled ? 'disabled' : ''} ${child.danger ? 'danger' : ''}\"\n role=\"menuitem\"\n aria-disabled=${child.disabled ? 'true' : 'false'}\n style=\"--stagger-index: ${idx}\"\n @click=${() => this._selectChild(menu, child)}\n >\n <span>${child.label}</span>\n ${child.shortcut ? html`<span class=\"menu-item-shortcut\">${child.shortcut}</span>` : nothing}\n </button>\n `)}\n </div>\n ` : nothing}\n </div>\n `)}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-menubar': CgMenubar;\n }\n}\n"],"names":["CgMenubar","LitElement","changed","triggers","bar","trigger","tRect","bRect","idx","n","target","triggerIdx","next","prev","items","current","el","delta","ch","start","i","j","char","fromIdx","menu","child","indicatorStyle","html","e","nothing","hostBlock","reducedMotion","menuListStyles","css","__decorateClass","property","state","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"cg-menubar.js","sources":["../../../src/components/cg-menubar/cg-menubar.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, menuListStyles, entranceStagger } from '../../styles/index.js';\n\nexport interface MenubarChildItem {\n label: string;\n shortcut?: string;\n disabled?: boolean;\n danger?: boolean;\n separator?: boolean;\n id?: string;\n}\n\nexport interface MenubarItem {\n label: string;\n id?: string;\n children: MenubarChildItem[];\n}\n\n/**\n * @element cg-menubar\n * App-style horizontal menu bar (File/Edit/View) with dropdown submenus.\n *\n * @fires {CustomEvent<{menu:string,item:string}>} cg-menubar-select\n */\n@customElement('cg-menubar')\nexport class CgMenubar extends LitElement {\n static override styles = [hostBlock, reducedMotion, menuListStyles, entranceStagger, css`\n :host {\n display: block;\n color: var(--cg-color-surface-container-text);\n }\n\n /* Top-level horizontal bar containing the menu triggers. */\n [role=\"menubar\"] {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-4);\n padding: var(--cg-spacing-6);\n background: var(--cg-color-surface-container-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-container-border);\n border-radius: var(--cg-border-radius-100);\n position: relative; /* anchor for the magnetic underline indicator */\n }\n\n /* Magnetic underline that slides under the active trigger. JS measures\n the trigger's position; CSS handles the smooth slide. */\n .indicator {\n position: absolute;\n bottom: calc(var(--cg-spacing-2) * -1);\n left: 0;\n height: var(--cg-spacing-2);\n background: var(--cg-color-action-primary-background-default);\n border-radius: var(--cg-border-radius-full);\n pointer-events: none;\n opacity: 0;\n transform: translateX(0);\n transition:\n transform var(--cg-transition-duration-default) var(--cg-transition-easing-bounce),\n width var(--cg-transition-duration-default) var(--cg-transition-easing-bounce),\n opacity var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .indicator.visible {\n opacity: 1;\n }\n @media (prefers-reduced-motion: reduce) {\n .indicator { transition: opacity var(--cg-transition-duration-fast) ease; }\n }\n /* Indicator can be disabled for the canonical macOS / VSCode app-menubar\n look — only the open trigger's background highlight remains. */\n :host([indicator=\"none\"]) .indicator { display: none; }\n\n /* ── Rounded variants — match cg-button's rounded scale ── */\n :host([rounded=\"none\"]) [role=\"menubar\"] { border-radius: 0; }\n :host([rounded=\"sm\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-full); }\n /* Fully-rounded bar wants pill triggers too so corners don't clash. */\n :host([rounded=\"full\"]) .top-trigger { border-radius: var(--cg-border-radius-full); }\n\n /* ── Size variants ── */\n :host([size=\"sm\"]) [role=\"menubar\"] {\n gap: var(--cg-spacing-2);\n padding: var(--cg-spacing-4);\n }\n :host([size=\"lg\"]) [role=\"menubar\"] {\n gap: var(--cg-spacing-6);\n padding: var(--cg-spacing-8);\n }\n\n .top-trigger {\n display: inline-flex;\n align-items: center;\n padding: var(--cg-spacing-8) var(--cg-spacing-12);\n background: transparent;\n border: none;\n color: inherit;\n font: inherit;\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n border-radius: var(--cg-border-radius-50);\n cursor: pointer;\n }\n :host([size=\"sm\"]) .top-trigger {\n padding: var(--cg-spacing-6) var(--cg-spacing-8);\n font-size: var(--cg-font-size-xs);\n }\n :host([size=\"lg\"]) .top-trigger {\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n font-size: var(--cg-font-size-base);\n }\n .top-trigger:hover,\n .top-trigger.open {\n background: var(--cg-color-action-tertiary-background-hover);\n }\n .top-trigger.open {\n color: var(--cg-color-surface-base-text);\n }\n .top-trigger:active:not([disabled]) {\n transform: scale(var(--cg-interaction-press-scale));\n }\n .top-trigger {\n transition:\n background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .top-trigger: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\n /* Submenu positioning — visual styling (surface, items, divider, animation,\n rounded variants) inherited from menuListStyles for consistency with\n cg-dropdown / cg-split-button. */\n .menu-wrap {\n position: relative;\n }\n .menu {\n position: absolute;\n top: calc(100% + var(--cg-spacing-6));\n left: 0;\n z-index: var(--cg-z-index-500);\n }\n `];\n\n @property({ type: Array }) items: MenubarItem[] = [];\n /** Border-radius variant — matches cg-button's `rounded` scale. */\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n /** Size variant — drives padding, gap, and font size. */\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n /**\n * Active-menu indicator style.\n * - `\"underline\"` (default): magnetic 2px bar slides between open menus —\n * modern web menubars (Notion, Vercel, Linear) use this style.\n * - `\"none\"`: rely only on the open trigger's background highlight —\n * canonical macOS / VSCode / Figma app-menubar look.\n */\n @property({ reflect: true }) indicator: 'underline' | 'none' = 'underline';\n /** Accessible name for the menubar (W3C APG requires a labeled menubar). */\n @property() label = 'Application menu';\n\n @state() private _openIndex = -1;\n /** Roving-tabindex: only the focused menubar item is in the tab order. */\n @state() private _focusedTopIndex = 0;\n /** Magnetic indicator geometry, measured from the active trigger. */\n @state() private _indicatorLeft = 0;\n @state() private _indicatorWidth = 0;\n\n private _outsideHandler = (e: MouseEvent) => {\n if (!e.composedPath().includes(this)) this._openIndex = -1;\n };\n\n /** Re-measure the indicator on resize so it doesn't drift while a menu is open. */\n private _resizeObserver: ResizeObserver | undefined;\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('click', this._outsideHandler);\n this._resizeObserver = new ResizeObserver(() => {\n if (this._openIndex >= 0) this._measureIndicator();\n });\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('click', this._outsideHandler);\n this._resizeObserver?.disconnect();\n this._resizeObserver = undefined;\n }\n\n /** Measure the active trigger and slide the underline indicator under it. */\n private _measureIndicator(): void {\n const triggers = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n const bar = this.shadowRoot?.querySelector<HTMLElement>('[role=\"menubar\"]');\n const trigger = triggers?.[this._openIndex];\n if (trigger && bar) {\n const tRect = trigger.getBoundingClientRect();\n const bRect = bar.getBoundingClientRect();\n this._indicatorLeft = tRect.left - bRect.left;\n this._indicatorWidth = tRect.width;\n }\n }\n\n override updated(changed: Map<string, unknown>): void {\n // Reflect open state so menuListStyles' `:host([open]) .menu` reveal rule\n // (and the shared cg-menu-enter animation) activates — matches\n // cg-dropdown / cg-split-button. `open` is not a reactive property, so\n // this cannot trigger an update loop.\n this.toggleAttribute('open', this._openIndex >= 0);\n if (changed.has('_openIndex') && this._openIndex >= 0) {\n this._measureIndicator();\n }\n }\n\n /** Hover-switches: once a menu is open, hovering a sibling top-trigger\n * instantly switches to that menu. Standard app-bar behavior. Does NOT\n * activate on hover when no menu is open — that would be hostile. */\n private _onTopHover(idx: number): void {\n if (this._openIndex >= 0 && this._openIndex !== idx) {\n this._openIndex = idx;\n this._focusedTopIndex = idx;\n }\n }\n\n private _onTopKeydown(e: KeyboardEvent, idx: number): void {\n const n = this.items.length;\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n this._focusTop((idx - 1 + n) % n);\n break;\n case 'ArrowRight':\n e.preventDefault();\n this._focusTop((idx + 1) % n);\n break;\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n e.preventDefault();\n this._openIndex = idx;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n break;\n case 'Home':\n e.preventDefault();\n this._focusTop(0);\n break;\n case 'End':\n e.preventDefault();\n this._focusTop(n - 1);\n break;\n case 'ArrowUp':\n // W3C APG: ArrowUp on a menubar item opens its submenu and focuses\n // the LAST item (complement of ArrowDown-focuses-first).\n e.preventDefault();\n this._openIndex = idx;\n this.updateComplete.then(() => {\n const menuItems = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n menuItems?.[menuItems.length - 1]?.focus();\n });\n break;\n case 'Escape':\n e.preventDefault();\n this._openIndex = -1;\n break;\n default:\n // Typeahead — single printable character jumps to next menubar item\n // whose label starts with that character (W3C APG menubar pattern).\n if (e.key.length === 1 && /\\S/.test(e.key) && !e.metaKey && !e.ctrlKey && !e.altKey) {\n const target = this._findTypeaheadIndex(e.key, idx);\n if (target !== -1 && target !== idx) {\n e.preventDefault();\n this._focusTop(target);\n }\n }\n }\n }\n\n private _onSubmenuKeydown(e: KeyboardEvent, triggerIdx: number): void {\n const n = this.items.length;\n if (e.key === 'Escape') {\n e.preventDefault();\n this._openIndex = -1;\n this.updateComplete.then(() => {\n const btns = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n btns?.[triggerIdx]?.focus();\n });\n return;\n }\n if (e.key === 'Tab') {\n // Per W3C APG: Tab exits the menubar entirely. Synchronously move focus\n // back to the owning trigger (which holds the roving tabindex=0) before\n // the default Tab action runs, so Tab / Shift+Tab proceed from the\n // menubar to the adjacent tab-sequence element instead of dropping\n // focus to <body> when the submenu is removed. No preventDefault.\n this._focusedTopIndex = triggerIdx;\n this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger')[triggerIdx]?.focus();\n this._openIndex = -1;\n return;\n }\n if (e.key === 'ArrowRight') {\n // Close current submenu, move to next menubar item, open its submenu.\n e.preventDefault();\n const next = (triggerIdx + 1) % n;\n this._openIndex = next;\n this._focusedTopIndex = next;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n return;\n }\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n const prev = (triggerIdx - 1 + n) % n;\n this._openIndex = prev;\n this._focusedTopIndex = prev;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n return;\n }\n const items = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.menu .menu-item:not(.disabled)') ?? [],\n );\n if (!items.length) return;\n const current = items.findIndex(el => el === this.shadowRoot?.activeElement);\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const delta = e.key === 'ArrowDown' ? 1 : -1;\n const next = (current + delta + items.length) % items.length;\n items[next]?.focus();\n } else if (e.key === 'Home') {\n e.preventDefault();\n items[0]?.focus();\n } else if (e.key === 'End') {\n e.preventDefault();\n items[items.length - 1]?.focus();\n } else if (e.key.length === 1 && /\\S/.test(e.key) && !e.metaKey && !e.ctrlKey && !e.altKey) {\n // Typeahead inside an open submenu.\n const ch = e.key.toLowerCase();\n const start = current >= 0 ? (current + 1) % items.length : 0;\n for (let i = 0; i < items.length; i++) {\n const j = (start + i) % items.length;\n if (items[j]?.textContent?.trim().toLowerCase().startsWith(ch)) {\n e.preventDefault();\n items[j]?.focus();\n break;\n }\n }\n }\n }\n\n /** Find the next menubar item whose label starts with the typed character,\n * starting AFTER `fromIdx`. Wraps around. Returns -1 if none match. */\n private _findTypeaheadIndex(char: string, fromIdx: number): number {\n const ch = char.toLowerCase();\n const n = this.items.length;\n for (let i = 1; i <= n; i++) {\n const j = (fromIdx + i) % n;\n if (this.items[j]?.label.toLowerCase().startsWith(ch)) return j;\n }\n return -1;\n }\n\n private _focusTop(idx: number): void {\n this._openIndex = this._openIndex >= 0 ? idx : -1;\n this._focusedTopIndex = idx;\n this.updateComplete.then(() => {\n const btns = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n btns?.[idx]?.focus();\n });\n }\n\n private _selectChild(menu: MenubarItem, child: MenubarChildItem): void {\n if (child.disabled || child.separator) return;\n this.dispatchEvent(new CustomEvent('cg-menubar-select', {\n bubbles: true, composed: true,\n detail: { menu: menu.id ?? menu.label, item: child.id ?? child.label },\n }));\n this._openIndex = -1;\n }\n\n override render() {\n const indicatorStyle = `transform: translateX(${this._indicatorLeft}px); width: ${this._indicatorWidth}px;`;\n return html`\n <div role=\"menubar\" aria-label=${this.label}>\n <div class=\"indicator ${this._openIndex >= 0 ? 'visible' : ''}\" style=${indicatorStyle} aria-hidden=\"true\"></div>\n ${this.items.map((menu, i) => html`\n <div class=\"menu-wrap\">\n <button\n class=\"top-trigger ${this._openIndex === i ? 'open' : ''}\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded=${this._openIndex === i ? 'true' : 'false'}\n tabindex=${this._focusedTopIndex === i ? 0 : -1}\n @click=${(e: MouseEvent) => { e.stopPropagation(); this._focusedTopIndex = i; this._openIndex = this._openIndex === i ? -1 : i; }}\n @focus=${() => { this._focusedTopIndex = i; }}\n @mouseenter=${() => this._onTopHover(i)}\n @keydown=${(e: KeyboardEvent) => this._onTopKeydown(e, i)}\n >${menu.label}</button>\n ${this._openIndex === i ? html`\n <div class=\"menu\" role=\"menu\" aria-label=${menu.label} @keydown=${(e: KeyboardEvent) => this._onSubmenuKeydown(e, i)}>\n ${menu.children.map((child, idx) => child.separator\n ? html`<div class=\"divider\" role=\"separator\"></div>`\n : html`\n <button\n class=\"menu-item ${child.disabled ? 'disabled' : ''} ${child.danger ? 'danger' : ''}\"\n role=\"menuitem\"\n aria-disabled=${child.disabled ? 'true' : 'false'}\n style=\"--stagger-index: ${idx}\"\n @click=${() => this._selectChild(menu, child)}\n >\n <span>${child.label}</span>\n ${child.shortcut ? html`<span class=\"menu-item-shortcut\">${child.shortcut}</span>` : nothing}\n </button>\n `)}\n </div>\n ` : nothing}\n </div>\n `)}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-menubar': CgMenubar;\n }\n}\n"],"names":["CgMenubar","LitElement","triggers","bar","trigger","tRect","bRect","changed","idx","n","menuItems","target","triggerIdx","next","prev","items","current","el","delta","ch","start","i","j","char","fromIdx","menu","child","indicatorStyle","html","e","nothing","hostBlock","reducedMotion","menuListStyles","entranceStagger","css","__decorateClass","property","state","customElement"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cg-meter.d.ts","sourceRoot":"","sources":["../../../src/components/cg-meter/cg-meter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,KAAK,CAAC;AAI1D;;;;;;;;;;GAUG;AACH,qBACa,OAAQ,SAAQ,UAAU;IACrC,OAAgB,MAAM,4BAsFnB;IAEyB,KAAK,SAAK;IACV,GAAG,SAAK;IACR,GAAG,SAAO;IACV,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9C,KAAK,SAAM;IACM,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAY;IAC1C,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IACP,SAAS,UAAS;IAC5B,QAAQ,UAAS;IAE7D,wEAAwE;IACxE,OAAO,CAAC,MAAM;IAoBd,OAAO,CAAC,IAAI;IAOH,MAAM;CA8DhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
1
+ {"version":3,"file":"cg-meter.d.ts","sourceRoot":"","sources":["../../../src/components/cg-meter/cg-meter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,KAAK,CAAC;AAI1D;;;;;;;;;;GAUG;AACH,qBACa,OAAQ,SAAQ,UAAU;IACrC,OAAgB,MAAM,4BAsFnB;IAEyB,KAAK,SAAK;IACV,GAAG,SAAK;IACR,GAAG,SAAO;IACV,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9C,KAAK,SAAM;IACM,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAY;IAC1C,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IACP,SAAS,UAAS;IAC5B,QAAQ,UAAS;IAE7D,wEAAwE;IACxE,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,IAAI;IAOH,MAAM;CA+DhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
@@ -1,81 +1,81 @@
1
- import { css as d, LitElement as m, nothing as l, html as u, svg as g } from "lit";
2
- import { property as c, customElement as v } from "lit/decorators.js";
3
- import { h as p, r as f } from "../../chunks/premium.css-9I4kHrsl.js";
4
- var b = Object.defineProperty, w = Object.getOwnPropertyDescriptor, s = (a, o, n, t) => {
5
- for (var i = t > 1 ? void 0 : t ? w(o, n) : o, e = a.length - 1, h; e >= 0; e--)
6
- (h = a[e]) && (i = (t ? h(o, n, i) : h(i)) || i);
7
- return t && i && b(o, n, i), i;
1
+ import { css as d, LitElement as v, nothing as s, html as h, svg as p } from "lit";
2
+ import { property as o, customElement as f } from "lit/decorators.js";
3
+ import { h as b, r as w } from "../../chunks/premium.css-DHekUEUt.js";
4
+ var y = Object.defineProperty, x = Object.getOwnPropertyDescriptor, a = (l, r, n, i) => {
5
+ for (var t = i > 1 ? void 0 : i ? x(r, n) : r, u = l.length - 1, c; u >= 0; u--)
6
+ (c = l[u]) && (t = (i ? c(r, n, t) : c(t)) || t);
7
+ return i && t && y(r, n, t), t;
8
8
  };
9
- let r = class extends m {
9
+ let e = class extends v {
10
10
  constructor() {
11
11
  super(...arguments), this.value = 0, this.min = 0, this.max = 100, this.low = null, this.high = null, this.optimum = null, this.label = "", this.variant = "linear", this.size = "md", this.showValue = !1, this.disabled = !1;
12
12
  }
13
13
  /** Compute color class from thresholds, mirroring <meter> semantics. */
14
14
  _level() {
15
- const { value: a, min: o, max: n } = this, t = this.low ?? o, i = this.high ?? n, e = this.optimum;
16
- return a >= t && a <= i ? e == null || e >= t && e <= i ? "ok" : "warn" : e == null || a < t && e > i || a > i && e < t ? "bad" : "warn";
15
+ const { value: l, min: r, max: n } = this, i = this.low ?? r, t = this.high ?? n, u = this.optimum ?? (r + n) / 2, c = (g) => g < i ? 0 : g > t ? 2 : 1, m = Math.abs(c(l) - c(u));
16
+ return m === 0 ? "ok" : m === 1 ? "warn" : "bad";
17
17
  }
18
18
  _pct() {
19
- const a = this.max - this.min;
20
- return a <= 0 ? 0 : (Math.max(this.min, Math.min(this.max, this.value)) - this.min) / a * 100;
19
+ const l = this.max - this.min;
20
+ return l <= 0 ? 0 : (Math.max(this.min, Math.min(this.max, this.value)) - this.min) / l * 100;
21
21
  }
22
22
  render() {
23
- const a = this._level(), o = this._pct(), n = this.showValue ? `${Math.round(o)}%` : "", t = this.label ? "cg-meter-label" : void 0;
23
+ const l = this._level(), r = this._pct(), n = Math.max(this.min, Math.min(this.max, this.value)), i = this.showValue ? `${Math.round(r)}%` : "", t = this.label ? "cg-meter-label" : void 0;
24
24
  if (this.variant === "circular") {
25
- const e = 2 * Math.PI * 42, h = e - o / 100 * e;
26
- return u`
27
- ${this.label ? u`
25
+ const c = 2 * Math.PI * 42, m = c - r / 100 * c;
26
+ return h`
27
+ ${this.label ? h`
28
28
  <div class="header">
29
29
  <span class="label" id=${t}>${this.label}</span>
30
30
  </div>
31
- ` : l}
31
+ ` : s}
32
32
  <div class="circular"
33
33
  role="meter"
34
- aria-valuenow=${this.value}
34
+ aria-valuenow=${n}
35
35
  aria-valuemin=${this.min}
36
36
  aria-valuemax=${this.max}
37
- aria-labelledby=${t ?? l}
38
- aria-label=${t ? l : this.label || "Meter"}
39
- aria-disabled=${this.disabled ? "true" : l}
37
+ aria-valuetext=${this.showValue ? i : s}
38
+ aria-labelledby=${t ?? s}
39
+ aria-label=${t ? s : this.label || "Meter"}
40
40
  >
41
- ${g`
41
+ ${p`
42
42
  <svg viewBox="0 0 100 100">
43
43
  <circle class="bg" cx="50" cy="50" r="${42}" fill="none" stroke-width="10"></circle>
44
44
  <circle
45
- class="fg ${a}"
45
+ class="fg ${l}"
46
46
  cx="50" cy="50" r="${42}"
47
47
  fill="none" stroke-width="10"
48
- stroke-dasharray="${e}"
49
- stroke-dashoffset="${h}"
48
+ stroke-dasharray="${c}"
49
+ stroke-dashoffset="${m}"
50
50
  ></circle>
51
51
  </svg>
52
52
  `}
53
- ${this.showValue ? u`<div class="center">${n}</div>` : l}
53
+ ${this.showValue ? h`<div class="center">${i}</div>` : s}
54
54
  </div>
55
55
  `;
56
56
  }
57
- return u`
58
- ${this.label || this.showValue ? u`
57
+ return h`
58
+ ${this.label || this.showValue ? h`
59
59
  <div class="header">
60
- ${this.label ? u`<span class="label" id=${t}>${this.label}</span>` : l}
61
- ${this.showValue ? u`<span class="value-text">${n}</span>` : l}
60
+ ${this.label ? h`<span class="label" id=${t}>${this.label}</span>` : s}
61
+ ${this.showValue ? h`<span class="value-text">${i}</span>` : s}
62
62
  </div>
63
- ` : l}
63
+ ` : s}
64
64
  <div class="track"
65
65
  role="meter"
66
- aria-valuenow=${this.value}
66
+ aria-valuenow=${n}
67
67
  aria-valuemin=${this.min}
68
68
  aria-valuemax=${this.max}
69
- aria-labelledby=${t ?? l}
70
- aria-label=${t ? l : this.label || "Meter"}
71
- aria-disabled=${this.disabled ? "true" : l}
69
+ aria-valuetext=${this.showValue ? i : s}
70
+ aria-labelledby=${t ?? s}
71
+ aria-label=${t ? s : this.label || "Meter"}
72
72
  >
73
- <div class="fill ${a}" style="width: ${o}%"></div>
73
+ <div class="fill ${l}" style="width: ${r}%"></div>
74
74
  </div>
75
75
  `;
76
76
  }
77
77
  };
78
- r.styles = [p, f, d`
78
+ e.styles = [b, w, d`
79
79
  :host { width: 100%; font-family: var(--cg-font-family-primary); }
80
80
  :host([disabled]) { opacity: 0.5; cursor: not-allowed; }
81
81
  :host([disabled]) .track,
@@ -104,7 +104,7 @@ r.styles = [p, f, d`
104
104
  /* ── Linear ── */
105
105
  .track {
106
106
  width: 100%;
107
- background: var(--cg-color-surface-container-background);
107
+ background: var(--cg-color-loading-spinner-secondary);
108
108
  border-radius: var(--cg-component-meter-radius);
109
109
  overflow: hidden;
110
110
  position: relative;
@@ -140,7 +140,7 @@ r.styles = [p, f, d`
140
140
  transform: rotate(-90deg);
141
141
  }
142
142
  .circular .bg {
143
- stroke: var(--cg-color-surface-container-background);
143
+ stroke: var(--cg-color-loading-spinner-secondary);
144
144
  }
145
145
  .circular .fg {
146
146
  transition: stroke-dashoffset var(--cg-transition-duration-slow) var(--cg-transition-easing-default);
@@ -162,43 +162,43 @@ r.styles = [p, f, d`
162
162
  font-variant-numeric: tabular-nums;
163
163
  }
164
164
  `];
165
- s([
166
- c({ type: Number })
167
- ], r.prototype, "value", 2);
168
- s([
169
- c({ type: Number })
170
- ], r.prototype, "min", 2);
171
- s([
172
- c({ type: Number })
173
- ], r.prototype, "max", 2);
174
- s([
175
- c({ type: Number })
176
- ], r.prototype, "low", 2);
177
- s([
178
- c({ type: Number })
179
- ], r.prototype, "high", 2);
180
- s([
181
- c({ type: Number })
182
- ], r.prototype, "optimum", 2);
183
- s([
184
- c()
185
- ], r.prototype, "label", 2);
186
- s([
187
- c({ reflect: !0 })
188
- ], r.prototype, "variant", 2);
189
- s([
190
- c({ reflect: !0 })
191
- ], r.prototype, "size", 2);
192
- s([
193
- c({ type: Boolean, attribute: "show-value" })
194
- ], r.prototype, "showValue", 2);
195
- s([
196
- c({ type: Boolean, reflect: !0 })
197
- ], r.prototype, "disabled", 2);
198
- r = s([
199
- v("cg-meter")
200
- ], r);
165
+ a([
166
+ o({ type: Number })
167
+ ], e.prototype, "value", 2);
168
+ a([
169
+ o({ type: Number })
170
+ ], e.prototype, "min", 2);
171
+ a([
172
+ o({ type: Number })
173
+ ], e.prototype, "max", 2);
174
+ a([
175
+ o({ type: Number })
176
+ ], e.prototype, "low", 2);
177
+ a([
178
+ o({ type: Number })
179
+ ], e.prototype, "high", 2);
180
+ a([
181
+ o({ type: Number })
182
+ ], e.prototype, "optimum", 2);
183
+ a([
184
+ o()
185
+ ], e.prototype, "label", 2);
186
+ a([
187
+ o({ reflect: !0 })
188
+ ], e.prototype, "variant", 2);
189
+ a([
190
+ o({ reflect: !0 })
191
+ ], e.prototype, "size", 2);
192
+ a([
193
+ o({ type: Boolean, attribute: "show-value" })
194
+ ], e.prototype, "showValue", 2);
195
+ a([
196
+ o({ type: Boolean, reflect: !0 })
197
+ ], e.prototype, "disabled", 2);
198
+ e = a([
199
+ f("cg-meter")
200
+ ], e);
201
201
  export {
202
- r as CgMeter
202
+ e as CgMeter
203
203
  };
204
204
  //# sourceMappingURL=cg-meter.js.map