@cognivo/components 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/dist/chunks/focus-trap-vlQwKK-3.js +82 -0
  2. package/dist/chunks/focus-trap-vlQwKK-3.js.map +1 -0
  3. package/dist/chunks/{premium.css-9I4kHrsl.js → premium.css-DHekUEUt.js} +25 -25
  4. package/dist/chunks/{premium.css-9I4kHrsl.js.map → premium.css-DHekUEUt.js.map} +1 -1
  5. package/dist/cognivo.min.js +3375 -5270
  6. package/dist/cognivo.min.js.map +1 -1
  7. package/dist/components/ai-ab-test/ai-ab-test.js +1 -1
  8. package/dist/components/ai-accessibility-report/ai-accessibility-report.d.ts.map +1 -1
  9. package/dist/components/ai-accessibility-report/ai-accessibility-report.js +14 -13
  10. package/dist/components/ai-accessibility-report/ai-accessibility-report.js.map +1 -1
  11. package/dist/components/ai-action-preview/ai-action-preview.d.ts.map +1 -1
  12. package/dist/components/ai-action-preview/ai-action-preview.js +15 -14
  13. package/dist/components/ai-action-preview/ai-action-preview.js.map +1 -1
  14. package/dist/components/ai-agent-card/ai-agent-card.js +1 -1
  15. package/dist/components/ai-agent-steps/ai-agent-steps.d.ts +8 -21
  16. package/dist/components/ai-agent-steps/ai-agent-steps.d.ts.map +1 -1
  17. package/dist/components/ai-agent-steps/ai-agent-steps.js +85 -139
  18. package/dist/components/ai-agent-steps/ai-agent-steps.js.map +1 -1
  19. package/dist/components/ai-alert-card/ai-alert-card.js +5 -5
  20. package/dist/components/ai-alert-card/ai-alert-card.js.map +1 -1
  21. package/dist/components/ai-analytics-chart/ai-analytics-chart.d.ts +0 -13
  22. package/dist/components/ai-analytics-chart/ai-analytics-chart.d.ts.map +1 -1
  23. package/dist/components/ai-analytics-chart/ai-analytics-chart.js +75 -125
  24. package/dist/components/ai-analytics-chart/ai-analytics-chart.js.map +1 -1
  25. package/dist/components/ai-annotation/ai-annotation.js +2 -2
  26. package/dist/components/ai-annotation/ai-annotation.js.map +1 -1
  27. package/dist/components/ai-api-key-manager/ai-api-key-manager.d.ts +0 -9
  28. package/dist/components/ai-api-key-manager/ai-api-key-manager.d.ts.map +1 -1
  29. package/dist/components/ai-api-key-manager/ai-api-key-manager.js +115 -276
  30. package/dist/components/ai-api-key-manager/ai-api-key-manager.js.map +1 -1
  31. package/dist/components/ai-app-sidebar/ai-app-sidebar.js +13 -13
  32. package/dist/components/ai-app-sidebar/ai-app-sidebar.js.map +1 -1
  33. package/dist/components/ai-assistant-widget/ai-assistant-widget.d.ts.map +1 -1
  34. package/dist/components/ai-assistant-widget/ai-assistant-widget.js +5 -2
  35. package/dist/components/ai-assistant-widget/ai-assistant-widget.js.map +1 -1
  36. package/dist/components/ai-audio-player/ai-audio-player.d.ts.map +1 -1
  37. package/dist/components/ai-audio-player/ai-audio-player.js +23 -19
  38. package/dist/components/ai-audio-player/ai-audio-player.js.map +1 -1
  39. package/dist/components/ai-avatar/ai-avatar.js +1 -1
  40. package/dist/components/ai-badge/ai-badge.js +1 -1
  41. package/dist/components/ai-batch-progress/ai-batch-progress.js +6 -6
  42. package/dist/components/ai-batch-progress/ai-batch-progress.js.map +1 -1
  43. package/dist/components/ai-cache-indicator/ai-cache-indicator.d.ts +0 -13
  44. package/dist/components/ai-cache-indicator/ai-cache-indicator.d.ts.map +1 -1
  45. package/dist/components/ai-cache-indicator/ai-cache-indicator.js +90 -185
  46. package/dist/components/ai-cache-indicator/ai-cache-indicator.js.map +1 -1
  47. package/dist/components/ai-capture-flow/ai-capture-flow.js +21 -21
  48. package/dist/components/ai-capture-flow/ai-capture-flow.js.map +1 -1
  49. package/dist/components/ai-changelog/ai-changelog.js +26 -26
  50. package/dist/components/ai-changelog/ai-changelog.js.map +1 -1
  51. package/dist/components/ai-chart-summary/ai-chart-summary.d.ts +0 -6
  52. package/dist/components/ai-chart-summary/ai-chart-summary.d.ts.map +1 -1
  53. package/dist/components/ai-chart-summary/ai-chart-summary.js +100 -103
  54. package/dist/components/ai-chart-summary/ai-chart-summary.js.map +1 -1
  55. package/dist/components/ai-chat/ai-chat.d.ts.map +1 -1
  56. package/dist/components/ai-chat/ai-chat.js +9 -3
  57. package/dist/components/ai-chat/ai-chat.js.map +1 -1
  58. package/dist/components/ai-citation/ai-citation.d.ts +0 -6
  59. package/dist/components/ai-citation/ai-citation.d.ts.map +1 -1
  60. package/dist/components/ai-citation/ai-citation.js +64 -90
  61. package/dist/components/ai-citation/ai-citation.js.map +1 -1
  62. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.d.ts +1 -27
  63. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.d.ts.map +1 -1
  64. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js +114 -260
  65. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js.map +1 -1
  66. package/dist/components/ai-command-palette/ai-command-palette.js +1 -1
  67. package/dist/components/ai-confidence-badge/ai-confidence-badge.d.ts +11 -9
  68. package/dist/components/ai-confidence-badge/ai-confidence-badge.d.ts.map +1 -1
  69. package/dist/components/ai-confidence-badge/ai-confidence-badge.js +183 -101
  70. package/dist/components/ai-confidence-badge/ai-confidence-badge.js.map +1 -1
  71. package/dist/components/ai-confidence-slider/ai-confidence-slider.js +27 -27
  72. package/dist/components/ai-confidence-slider/ai-confidence-slider.js.map +1 -1
  73. package/dist/components/ai-consent-manager/ai-consent-manager.js +2 -2
  74. package/dist/components/ai-consent-manager/ai-consent-manager.js.map +1 -1
  75. package/dist/components/ai-context-window/ai-context-window.js +19 -19
  76. package/dist/components/ai-context-window/ai-context-window.js.map +1 -1
  77. package/dist/components/ai-copy-button/ai-copy-button.js +4 -4
  78. package/dist/components/ai-copy-button/ai-copy-button.js.map +1 -1
  79. package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js +14 -14
  80. package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js.map +1 -1
  81. package/dist/components/ai-data-card/ai-data-card.js +2 -2
  82. package/dist/components/ai-data-card/ai-data-card.js.map +1 -1
  83. package/dist/components/ai-data-lineage/ai-data-lineage.js +6 -6
  84. package/dist/components/ai-data-lineage/ai-data-lineage.js.map +1 -1
  85. package/dist/components/ai-data-preview/ai-data-preview.d.ts +0 -7
  86. package/dist/components/ai-data-preview/ai-data-preview.d.ts.map +1 -1
  87. package/dist/components/ai-data-preview/ai-data-preview.js +130 -267
  88. package/dist/components/ai-data-preview/ai-data-preview.js.map +1 -1
  89. package/dist/components/ai-data-table/ai-data-table.js +9 -9
  90. package/dist/components/ai-data-table/ai-data-table.js.map +1 -1
  91. package/dist/components/ai-debug-console/ai-debug-console.d.ts +1 -13
  92. package/dist/components/ai-debug-console/ai-debug-console.d.ts.map +1 -1
  93. package/dist/components/ai-debug-console/ai-debug-console.js +134 -340
  94. package/dist/components/ai-debug-console/ai-debug-console.js.map +1 -1
  95. package/dist/components/ai-detection-canvas/ai-detection-canvas.js +2 -2
  96. package/dist/components/ai-detection-canvas/ai-detection-canvas.js.map +1 -1
  97. package/dist/components/ai-diff-panel/ai-diff-panel.js +1 -1
  98. package/dist/components/ai-embedding-viz/ai-embedding-viz.js +4 -4
  99. package/dist/components/ai-embedding-viz/ai-embedding-viz.js.map +1 -1
  100. package/dist/components/ai-empty-state/ai-empty-state.js +1 -1
  101. package/dist/components/ai-error-boundary/ai-error-boundary.d.ts.map +1 -1
  102. package/dist/components/ai-error-boundary/ai-error-boundary.js +26 -21
  103. package/dist/components/ai-error-boundary/ai-error-boundary.js.map +1 -1
  104. package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js +5 -5
  105. package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js.map +1 -1
  106. package/dist/components/ai-feature-flag/ai-feature-flag.d.ts +0 -14
  107. package/dist/components/ai-feature-flag/ai-feature-flag.d.ts.map +1 -1
  108. package/dist/components/ai-feature-flag/ai-feature-flag.js +181 -322
  109. package/dist/components/ai-feature-flag/ai-feature-flag.js.map +1 -1
  110. package/dist/components/ai-feedback/ai-feedback.d.ts.map +1 -1
  111. package/dist/components/ai-feedback/ai-feedback.js +10 -5
  112. package/dist/components/ai-feedback/ai-feedback.js.map +1 -1
  113. package/dist/components/ai-file-upload/ai-file-upload.js +1 -1
  114. package/dist/components/ai-form-generator/ai-form-generator.js +1 -1
  115. package/dist/components/ai-guardrail/ai-guardrail.js +2 -2
  116. package/dist/components/ai-guardrail/ai-guardrail.js.map +1 -1
  117. package/dist/components/ai-heatmap/ai-heatmap.js +1 -1
  118. package/dist/components/ai-insight-card/ai-insight-card.js +4 -4
  119. package/dist/components/ai-insight-card/ai-insight-card.js.map +1 -1
  120. package/dist/components/ai-json-viewer/ai-json-viewer.js +13 -13
  121. package/dist/components/ai-json-viewer/ai-json-viewer.js.map +1 -1
  122. package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js +24 -24
  123. package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js.map +1 -1
  124. package/dist/components/ai-kpi-grid/ai-kpi-grid.js +2 -2
  125. package/dist/components/ai-kpi-grid/ai-kpi-grid.js.map +1 -1
  126. package/dist/components/ai-labeling-board/ai-labeling-board.js +11 -11
  127. package/dist/components/ai-labeling-board/ai-labeling-board.js.map +1 -1
  128. package/dist/components/ai-memory-panel/ai-memory-panel.js +7 -7
  129. package/dist/components/ai-memory-panel/ai-memory-panel.js.map +1 -1
  130. package/dist/components/ai-model-comparison/ai-model-comparison.js +2 -2
  131. package/dist/components/ai-model-comparison/ai-model-comparison.js.map +1 -1
  132. package/dist/components/ai-model-selector/ai-model-selector.js +7 -7
  133. package/dist/components/ai-model-selector/ai-model-selector.js.map +1 -1
  134. package/dist/components/ai-notification-center/ai-notification-center.js +27 -27
  135. package/dist/components/ai-notification-center/ai-notification-center.js.map +1 -1
  136. package/dist/components/ai-onboarding/ai-onboarding.js +5 -5
  137. package/dist/components/ai-onboarding/ai-onboarding.js.map +1 -1
  138. package/dist/components/ai-permission-gate/ai-permission-gate.js +1 -1
  139. package/dist/components/ai-personalization-dash/ai-personalization-dash.js +1 -1
  140. package/dist/components/ai-presence/ai-presence.js +25 -25
  141. package/dist/components/ai-presence/ai-presence.js.map +1 -1
  142. package/dist/components/ai-progress-steps/ai-progress-steps.js +11 -11
  143. package/dist/components/ai-progress-steps/ai-progress-steps.js.map +1 -1
  144. package/dist/components/ai-prompt-editor/ai-prompt-editor.js +1 -1
  145. package/dist/components/ai-prompt-template/ai-prompt-template.js +29 -29
  146. package/dist/components/ai-prompt-template/ai-prompt-template.js.map +1 -1
  147. package/dist/components/ai-rag-panel/ai-rag-panel.js +4 -4
  148. package/dist/components/ai-rag-panel/ai-rag-panel.js.map +1 -1
  149. package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js +16 -16
  150. package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js.map +1 -1
  151. package/dist/components/ai-result-panel/ai-result-panel.js +1 -1
  152. package/dist/components/ai-reveal-animation/ai-reveal-animation.js +3 -3
  153. package/dist/components/ai-reveal-animation/ai-reveal-animation.js.map +1 -1
  154. package/dist/components/ai-reward-signal/ai-reward-signal.js +1 -1
  155. package/dist/components/ai-rich-message/ai-rich-message.d.ts.map +1 -1
  156. package/dist/components/ai-rich-message/ai-rich-message.js +37 -30
  157. package/dist/components/ai-rich-message/ai-rich-message.js.map +1 -1
  158. package/dist/components/ai-scenario-panel/ai-scenario-panel.js +10 -10
  159. package/dist/components/ai-scenario-panel/ai-scenario-panel.js.map +1 -1
  160. package/dist/components/ai-search/ai-search.js +1 -1
  161. package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js +3 -3
  162. package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js.map +1 -1
  163. package/dist/components/ai-sidebar/ai-sidebar.js +1 -1
  164. package/dist/components/ai-similarity-card/ai-similarity-card.js +1 -1
  165. package/dist/components/ai-source-graph/ai-source-graph.js +2 -2
  166. package/dist/components/ai-source-graph/ai-source-graph.js.map +1 -1
  167. package/dist/components/ai-status-page/ai-status-page.js +15 -15
  168. package/dist/components/ai-status-page/ai-status-page.js.map +1 -1
  169. package/dist/components/ai-streaming-text/ai-streaming-text.js +1 -1
  170. package/dist/components/ai-test-runner/ai-test-runner.d.ts +0 -8
  171. package/dist/components/ai-test-runner/ai-test-runner.d.ts.map +1 -1
  172. package/dist/components/ai-test-runner/ai-test-runner.js +100 -257
  173. package/dist/components/ai-test-runner/ai-test-runner.js.map +1 -1
  174. package/dist/components/ai-thinking/ai-thinking.js +1 -1
  175. package/dist/components/ai-timeline/ai-timeline.js +2 -2
  176. package/dist/components/ai-timeline/ai-timeline.js.map +1 -1
  177. package/dist/components/ai-token-tracker/ai-token-tracker.js +3 -3
  178. package/dist/components/ai-token-tracker/ai-token-tracker.js.map +1 -1
  179. package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js +23 -23
  180. package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js.map +1 -1
  181. package/dist/components/ai-tool-indicator/ai-tool-indicator.js +3 -3
  182. package/dist/components/ai-tool-indicator/ai-tool-indicator.js.map +1 -1
  183. package/dist/components/ai-transform-slider/ai-transform-slider.js +1 -1
  184. package/dist/components/ai-translation-panel/ai-translation-panel.js +2 -2
  185. package/dist/components/ai-translation-panel/ai-translation-panel.js.map +1 -1
  186. package/dist/components/ai-usage-meter/ai-usage-meter.js +1 -1
  187. package/dist/components/ai-validation-checklist/ai-validation-checklist.d.ts +1 -11
  188. package/dist/components/ai-validation-checklist/ai-validation-checklist.d.ts.map +1 -1
  189. package/dist/components/ai-validation-checklist/ai-validation-checklist.js +133 -187
  190. package/dist/components/ai-validation-checklist/ai-validation-checklist.js.map +1 -1
  191. package/dist/components/ai-version-selector/ai-version-selector.d.ts +0 -4
  192. package/dist/components/ai-version-selector/ai-version-selector.d.ts.map +1 -1
  193. package/dist/components/ai-version-selector/ai-version-selector.js +189 -210
  194. package/dist/components/ai-version-selector/ai-version-selector.js.map +1 -1
  195. package/dist/components/ai-voice-panel/ai-voice-panel.js +28 -28
  196. package/dist/components/ai-voice-panel/ai-voice-panel.js.map +1 -1
  197. package/dist/components/ai-webhook-config/ai-webhook-config.d.ts +0 -17
  198. package/dist/components/ai-webhook-config/ai-webhook-config.d.ts.map +1 -1
  199. package/dist/components/ai-webhook-config/ai-webhook-config.js +281 -221
  200. package/dist/components/ai-webhook-config/ai-webhook-config.js.map +1 -1
  201. package/dist/components/ai-workflow-builder/ai-workflow-builder.js +2 -2
  202. package/dist/components/ai-workflow-builder/ai-workflow-builder.js.map +1 -1
  203. package/dist/components/bias-anchoring/bias-anchoring.js +1 -1
  204. package/dist/components/bias-authority/bias-authority.js +1 -1
  205. package/dist/components/bias-commitment/bias-commitment.js +1 -1
  206. package/dist/components/bias-reciprocity/bias-reciprocity.js +1 -1
  207. package/dist/components/bias-scarcity/bias-scarcity.js +1 -1
  208. package/dist/components/bias-social-proof/bias-social-proof.js +1 -1
  209. package/dist/components/cg-accordion/cg-accordion.d.ts.map +1 -1
  210. package/dist/components/cg-accordion/cg-accordion.js +51 -43
  211. package/dist/components/cg-accordion/cg-accordion.js.map +1 -1
  212. package/dist/components/cg-alert-dialog/cg-alert-dialog.js +18 -18
  213. package/dist/components/cg-alert-dialog/cg-alert-dialog.js.map +1 -1
  214. package/dist/components/cg-aspect-ratio/cg-aspect-ratio.d.ts.map +1 -1
  215. package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js +25 -21
  216. package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js.map +1 -1
  217. package/dist/components/cg-autocomplete/cg-autocomplete.d.ts +1 -0
  218. package/dist/components/cg-autocomplete/cg-autocomplete.d.ts.map +1 -1
  219. package/dist/components/cg-autocomplete/cg-autocomplete.js +59 -43
  220. package/dist/components/cg-autocomplete/cg-autocomplete.js.map +1 -1
  221. package/dist/components/cg-avatar/cg-avatar.d.ts.map +1 -1
  222. package/dist/components/cg-avatar/cg-avatar.js +24 -24
  223. package/dist/components/cg-avatar/cg-avatar.js.map +1 -1
  224. package/dist/components/cg-avatar-group/cg-avatar-group.d.ts.map +1 -1
  225. package/dist/components/cg-avatar-group/cg-avatar-group.js +18 -12
  226. package/dist/components/cg-avatar-group/cg-avatar-group.js.map +1 -1
  227. package/dist/components/cg-badge/cg-badge.d.ts.map +1 -1
  228. package/dist/components/cg-badge/cg-badge.js +26 -20
  229. package/dist/components/cg-badge/cg-badge.js.map +1 -1
  230. package/dist/components/cg-badge-group/cg-badge-group.d.ts +0 -1
  231. package/dist/components/cg-badge-group/cg-badge-group.d.ts.map +1 -1
  232. package/dist/components/cg-badge-group/cg-badge-group.js +31 -29
  233. package/dist/components/cg-badge-group/cg-badge-group.js.map +1 -1
  234. package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js +21 -21
  235. package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js.map +1 -1
  236. package/dist/components/cg-button/cg-button.d.ts +5 -71
  237. package/dist/components/cg-button/cg-button.d.ts.map +1 -1
  238. package/dist/components/cg-button/cg-button.js +63 -172
  239. package/dist/components/cg-button/cg-button.js.map +1 -1
  240. package/dist/components/cg-button-group/cg-button-group.d.ts +2 -0
  241. package/dist/components/cg-button-group/cg-button-group.d.ts.map +1 -1
  242. package/dist/components/cg-button-group/cg-button-group.js +43 -29
  243. package/dist/components/cg-button-group/cg-button-group.js.map +1 -1
  244. package/dist/components/cg-calendar/cg-calendar.d.ts +4 -0
  245. package/dist/components/cg-calendar/cg-calendar.d.ts.map +1 -1
  246. package/dist/components/cg-calendar/cg-calendar.js +28 -12
  247. package/dist/components/cg-calendar/cg-calendar.js.map +1 -1
  248. package/dist/components/cg-callout/cg-callout.d.ts.map +1 -1
  249. package/dist/components/cg-callout/cg-callout.js +49 -48
  250. package/dist/components/cg-callout/cg-callout.js.map +1 -1
  251. package/dist/components/cg-card/cg-card.d.ts +9 -22
  252. package/dist/components/cg-card/cg-card.d.ts.map +1 -1
  253. package/dist/components/cg-card/cg-card.js +28 -56
  254. package/dist/components/cg-card/cg-card.js.map +1 -1
  255. package/dist/components/cg-carousel/cg-carousel.d.ts.map +1 -1
  256. package/dist/components/cg-carousel/cg-carousel.js +19 -13
  257. package/dist/components/cg-carousel/cg-carousel.js.map +1 -1
  258. package/dist/components/cg-chart/cg-chart.d.ts.map +1 -1
  259. package/dist/components/cg-chart/cg-chart.js +63 -58
  260. package/dist/components/cg-chart/cg-chart.js.map +1 -1
  261. package/dist/components/cg-checkbox/cg-checkbox.d.ts +0 -6
  262. package/dist/components/cg-checkbox/cg-checkbox.d.ts.map +1 -1
  263. package/dist/components/cg-checkbox/cg-checkbox.js +51 -51
  264. package/dist/components/cg-checkbox/cg-checkbox.js.map +1 -1
  265. package/dist/components/cg-chip/cg-chip.js +31 -31
  266. package/dist/components/cg-chip/cg-chip.js.map +1 -1
  267. package/dist/components/cg-code-block/cg-code-block.d.ts.map +1 -1
  268. package/dist/components/cg-code-block/cg-code-block.js +36 -34
  269. package/dist/components/cg-code-block/cg-code-block.js.map +1 -1
  270. package/dist/components/cg-collapsible/cg-collapsible.d.ts.map +1 -1
  271. package/dist/components/cg-collapsible/cg-collapsible.js +23 -18
  272. package/dist/components/cg-collapsible/cg-collapsible.js.map +1 -1
  273. package/dist/components/cg-color-picker/cg-color-picker.d.ts +3 -0
  274. package/dist/components/cg-color-picker/cg-color-picker.d.ts.map +1 -1
  275. package/dist/components/cg-color-picker/cg-color-picker.js +189 -91
  276. package/dist/components/cg-color-picker/cg-color-picker.js.map +1 -1
  277. package/dist/components/cg-combobox/cg-combobox.d.ts.map +1 -1
  278. package/dist/components/cg-combobox/cg-combobox.js +13 -6
  279. package/dist/components/cg-combobox/cg-combobox.js.map +1 -1
  280. package/dist/components/cg-command/cg-command.d.ts.map +1 -1
  281. package/dist/components/cg-command/cg-command.js +52 -45
  282. package/dist/components/cg-command/cg-command.js.map +1 -1
  283. package/dist/components/cg-context-menu/cg-context-menu.js +1 -1
  284. package/dist/components/cg-date-picker/cg-date-picker.d.ts.map +1 -1
  285. package/dist/components/cg-date-picker/cg-date-picker.js +36 -34
  286. package/dist/components/cg-date-picker/cg-date-picker.js.map +1 -1
  287. package/dist/components/cg-date-range-picker/cg-date-range-picker.d.ts +2 -0
  288. package/dist/components/cg-date-range-picker/cg-date-range-picker.d.ts.map +1 -1
  289. package/dist/components/cg-date-range-picker/cg-date-range-picker.js +12 -8
  290. package/dist/components/cg-date-range-picker/cg-date-range-picker.js.map +1 -1
  291. package/dist/components/cg-date-time-picker/cg-date-time-picker.d.ts.map +1 -1
  292. package/dist/components/cg-date-time-picker/cg-date-time-picker.js +3 -1
  293. package/dist/components/cg-date-time-picker/cg-date-time-picker.js.map +1 -1
  294. package/dist/components/cg-drawer/cg-drawer.js +3 -3
  295. package/dist/components/cg-drawer/cg-drawer.js.map +1 -1
  296. package/dist/components/cg-dropdown/cg-dropdown.d.ts.map +1 -1
  297. package/dist/components/cg-dropdown/cg-dropdown.js +1 -2
  298. package/dist/components/cg-dropdown/cg-dropdown.js.map +1 -1
  299. package/dist/components/cg-empty-state/cg-empty-state.d.ts +3 -24
  300. package/dist/components/cg-empty-state/cg-empty-state.d.ts.map +1 -1
  301. package/dist/components/cg-empty-state/cg-empty-state.js +51 -74
  302. package/dist/components/cg-empty-state/cg-empty-state.js.map +1 -1
  303. package/dist/components/cg-file-input/cg-file-input.d.ts.map +1 -1
  304. package/dist/components/cg-file-input/cg-file-input.js +9 -10
  305. package/dist/components/cg-file-input/cg-file-input.js.map +1 -1
  306. package/dist/components/cg-focus-scope/cg-focus-scope.js +1 -1
  307. package/dist/components/cg-follow-up/cg-follow-up.d.ts.map +1 -1
  308. package/dist/components/cg-follow-up/cg-follow-up.js +6 -7
  309. package/dist/components/cg-follow-up/cg-follow-up.js.map +1 -1
  310. package/dist/components/cg-form/cg-form.js +17 -17
  311. package/dist/components/cg-form/cg-form.js.map +1 -1
  312. package/dist/components/cg-hover-card/cg-hover-card.d.ts +1 -0
  313. package/dist/components/cg-hover-card/cg-hover-card.d.ts.map +1 -1
  314. package/dist/components/cg-hover-card/cg-hover-card.js +37 -32
  315. package/dist/components/cg-hover-card/cg-hover-card.js.map +1 -1
  316. package/dist/components/cg-icon/cg-icon.d.ts.map +1 -1
  317. package/dist/components/cg-icon/cg-icon.js +44 -37
  318. package/dist/components/cg-icon/cg-icon.js.map +1 -1
  319. package/dist/components/cg-image/cg-image.js +2 -2
  320. package/dist/components/cg-image/cg-image.js.map +1 -1
  321. package/dist/components/cg-image-block/cg-image-block.js +3 -3
  322. package/dist/components/cg-image-block/cg-image-block.js.map +1 -1
  323. package/dist/components/cg-image-gallery/cg-image-gallery.js +20 -20
  324. package/dist/components/cg-image-gallery/cg-image-gallery.js.map +1 -1
  325. package/dist/components/cg-input/cg-input.js +3 -3
  326. package/dist/components/cg-input/cg-input.js.map +1 -1
  327. package/dist/components/cg-kbd/cg-kbd.d.ts.map +1 -1
  328. package/dist/components/cg-kbd/cg-kbd.js +26 -24
  329. package/dist/components/cg-kbd/cg-kbd.js.map +1 -1
  330. package/dist/components/cg-label/cg-label.d.ts +4 -1
  331. package/dist/components/cg-label/cg-label.d.ts.map +1 -1
  332. package/dist/components/cg-label/cg-label.js +44 -41
  333. package/dist/components/cg-label/cg-label.js.map +1 -1
  334. package/dist/components/cg-link/cg-link.js +23 -23
  335. package/dist/components/cg-link/cg-link.js.map +1 -1
  336. package/dist/components/cg-list/cg-list.js +5 -5
  337. package/dist/components/cg-list/cg-list.js.map +1 -1
  338. package/dist/components/cg-listbox/cg-listbox.d.ts.map +1 -1
  339. package/dist/components/cg-listbox/cg-listbox.js +46 -40
  340. package/dist/components/cg-listbox/cg-listbox.js.map +1 -1
  341. package/dist/components/cg-markdown/cg-markdown.d.ts +2 -0
  342. package/dist/components/cg-markdown/cg-markdown.d.ts.map +1 -1
  343. package/dist/components/cg-markdown/cg-markdown.js +171 -121
  344. package/dist/components/cg-markdown/cg-markdown.js.map +1 -1
  345. package/dist/components/cg-menubar/cg-menubar.d.ts +6 -0
  346. package/dist/components/cg-menubar/cg-menubar.d.ts.map +1 -1
  347. package/dist/components/cg-menubar/cg-menubar.js +59 -47
  348. package/dist/components/cg-menubar/cg-menubar.js.map +1 -1
  349. package/dist/components/cg-meter/cg-meter.d.ts.map +1 -1
  350. package/dist/components/cg-meter/cg-meter.js +76 -76
  351. package/dist/components/cg-meter/cg-meter.js.map +1 -1
  352. package/dist/components/cg-metric-card/cg-metric-card.d.ts.map +1 -1
  353. package/dist/components/cg-metric-card/cg-metric-card.js +65 -68
  354. package/dist/components/cg-metric-card/cg-metric-card.js.map +1 -1
  355. package/dist/components/cg-modal/cg-modal.d.ts +3 -0
  356. package/dist/components/cg-modal/cg-modal.d.ts.map +1 -1
  357. package/dist/components/cg-modal/cg-modal.js +82 -83
  358. package/dist/components/cg-modal/cg-modal.js.map +1 -1
  359. package/dist/components/cg-navbar/cg-navbar.d.ts +1 -1
  360. package/dist/components/cg-navbar/cg-navbar.d.ts.map +1 -1
  361. package/dist/components/cg-navbar/cg-navbar.js +64 -55
  362. package/dist/components/cg-navbar/cg-navbar.js.map +1 -1
  363. package/dist/components/cg-navigation-menu/cg-navigation-menu.d.ts +3 -0
  364. package/dist/components/cg-navigation-menu/cg-navigation-menu.d.ts.map +1 -1
  365. package/dist/components/cg-navigation-menu/cg-navigation-menu.js +38 -26
  366. package/dist/components/cg-navigation-menu/cg-navigation-menu.js.map +1 -1
  367. package/dist/components/cg-number-input/cg-number-input.d.ts +1 -0
  368. package/dist/components/cg-number-input/cg-number-input.d.ts.map +1 -1
  369. package/dist/components/cg-number-input/cg-number-input.js +90 -77
  370. package/dist/components/cg-number-input/cg-number-input.js.map +1 -1
  371. package/dist/components/cg-otp-input/cg-otp-input.d.ts.map +1 -1
  372. package/dist/components/cg-otp-input/cg-otp-input.js +70 -60
  373. package/dist/components/cg-otp-input/cg-otp-input.js.map +1 -1
  374. package/dist/components/cg-pagination/cg-pagination.d.ts +2 -0
  375. package/dist/components/cg-pagination/cg-pagination.d.ts.map +1 -1
  376. package/dist/components/cg-pagination/cg-pagination.js +50 -49
  377. package/dist/components/cg-pagination/cg-pagination.js.map +1 -1
  378. package/dist/components/cg-password-input/cg-password-input.d.ts.map +1 -1
  379. package/dist/components/cg-password-input/cg-password-input.js +42 -34
  380. package/dist/components/cg-password-input/cg-password-input.js.map +1 -1
  381. package/dist/components/cg-phone-input/cg-phone-input.d.ts.map +1 -1
  382. package/dist/components/cg-phone-input/cg-phone-input.js +18 -14
  383. package/dist/components/cg-phone-input/cg-phone-input.js.map +1 -1
  384. package/dist/components/cg-popover/cg-popover.d.ts +12 -2
  385. package/dist/components/cg-popover/cg-popover.d.ts.map +1 -1
  386. package/dist/components/cg-popover/cg-popover.js +90 -63
  387. package/dist/components/cg-popover/cg-popover.js.map +1 -1
  388. package/dist/components/cg-portal/cg-portal.d.ts.map +1 -1
  389. package/dist/components/cg-portal/cg-portal.js +42 -41
  390. package/dist/components/cg-portal/cg-portal.js.map +1 -1
  391. package/dist/components/cg-progress-bar/cg-progress-bar.d.ts.map +1 -1
  392. package/dist/components/cg-progress-bar/cg-progress-bar.js +25 -25
  393. package/dist/components/cg-progress-bar/cg-progress-bar.js.map +1 -1
  394. package/dist/components/cg-radio/cg-radio.d.ts +10 -0
  395. package/dist/components/cg-radio/cg-radio.d.ts.map +1 -1
  396. package/dist/components/cg-radio/cg-radio.js +59 -48
  397. package/dist/components/cg-radio/cg-radio.js.map +1 -1
  398. package/dist/components/cg-radio-group/cg-radio-group.d.ts +6 -0
  399. package/dist/components/cg-radio-group/cg-radio-group.d.ts.map +1 -1
  400. package/dist/components/cg-radio-group/cg-radio-group.js +50 -37
  401. package/dist/components/cg-radio-group/cg-radio-group.js.map +1 -1
  402. package/dist/components/cg-rating/cg-rating.d.ts.map +1 -1
  403. package/dist/components/cg-rating/cg-rating.js +56 -54
  404. package/dist/components/cg-rating/cg-rating.js.map +1 -1
  405. package/dist/components/cg-resizable/cg-resizable.d.ts +4 -1
  406. package/dist/components/cg-resizable/cg-resizable.d.ts.map +1 -1
  407. package/dist/components/cg-resizable/cg-resizable.js +45 -35
  408. package/dist/components/cg-resizable/cg-resizable.js.map +1 -1
  409. package/dist/components/cg-scroll-area/cg-scroll-area.d.ts +8 -0
  410. package/dist/components/cg-scroll-area/cg-scroll-area.d.ts.map +1 -1
  411. package/dist/components/cg-scroll-area/cg-scroll-area.js +64 -21
  412. package/dist/components/cg-scroll-area/cg-scroll-area.js.map +1 -1
  413. package/dist/components/cg-segmented-control/cg-segmented-control.d.ts +4 -0
  414. package/dist/components/cg-segmented-control/cg-segmented-control.d.ts.map +1 -1
  415. package/dist/components/cg-segmented-control/cg-segmented-control.js +75 -39
  416. package/dist/components/cg-segmented-control/cg-segmented-control.js.map +1 -1
  417. package/dist/components/cg-select/cg-select.d.ts +4 -2
  418. package/dist/components/cg-select/cg-select.d.ts.map +1 -1
  419. package/dist/components/cg-select/cg-select.js +96 -58
  420. package/dist/components/cg-select/cg-select.js.map +1 -1
  421. package/dist/components/cg-separator/cg-separator.d.ts +1 -2
  422. package/dist/components/cg-separator/cg-separator.d.ts.map +1 -1
  423. package/dist/components/cg-separator/cg-separator.js +5 -8
  424. package/dist/components/cg-separator/cg-separator.js.map +1 -1
  425. package/dist/components/cg-sheet/cg-sheet.d.ts +4 -0
  426. package/dist/components/cg-sheet/cg-sheet.d.ts.map +1 -1
  427. package/dist/components/cg-sheet/cg-sheet.js +80 -43
  428. package/dist/components/cg-sheet/cg-sheet.js.map +1 -1
  429. package/dist/components/cg-sidebar/cg-sidebar.d.ts.map +1 -1
  430. package/dist/components/cg-sidebar/cg-sidebar.js +82 -19
  431. package/dist/components/cg-sidebar/cg-sidebar.js.map +1 -1
  432. package/dist/components/cg-skeleton/cg-skeleton.d.ts +7 -1
  433. package/dist/components/cg-skeleton/cg-skeleton.d.ts.map +1 -1
  434. package/dist/components/cg-skeleton/cg-skeleton.js +61 -63
  435. package/dist/components/cg-skeleton/cg-skeleton.js.map +1 -1
  436. package/dist/components/cg-slider/cg-slider.d.ts.map +1 -1
  437. package/dist/components/cg-slider/cg-slider.js +80 -73
  438. package/dist/components/cg-slider/cg-slider.js.map +1 -1
  439. package/dist/components/cg-spinner/cg-spinner.d.ts.map +1 -1
  440. package/dist/components/cg-spinner/cg-spinner.js +10 -19
  441. package/dist/components/cg-spinner/cg-spinner.js.map +1 -1
  442. package/dist/components/cg-split-button/cg-split-button.d.ts.map +1 -1
  443. package/dist/components/cg-split-button/cg-split-button.js +64 -50
  444. package/dist/components/cg-split-button/cg-split-button.js.map +1 -1
  445. package/dist/components/cg-stack/cg-stack.js +1 -1
  446. package/dist/components/cg-steps/cg-steps.js +1 -1
  447. package/dist/components/cg-switch/cg-switch.d.ts +3 -0
  448. package/dist/components/cg-switch/cg-switch.d.ts.map +1 -1
  449. package/dist/components/cg-switch/cg-switch.js +39 -47
  450. package/dist/components/cg-switch/cg-switch.js.map +1 -1
  451. package/dist/components/cg-table/cg-table.d.ts +0 -7
  452. package/dist/components/cg-table/cg-table.d.ts.map +1 -1
  453. package/dist/components/cg-table/cg-table.js +50 -47
  454. package/dist/components/cg-table/cg-table.js.map +1 -1
  455. package/dist/components/cg-tabs/cg-tabs.js +1 -1
  456. package/dist/components/cg-tag-input/cg-tag-input.js +1 -1
  457. package/dist/components/cg-text/cg-text.js +1 -1
  458. package/dist/components/cg-textarea/cg-textarea.js +1 -1
  459. package/dist/components/cg-time-picker/cg-time-picker.js +1 -1
  460. package/dist/components/cg-toaster/cg-toaster.js +3 -3
  461. package/dist/components/cg-toaster/cg-toaster.js.map +1 -1
  462. package/dist/components/cg-toggle/cg-toggle.js +1 -1
  463. package/dist/components/cg-toggle-group/cg-toggle-group.js +1 -1
  464. package/dist/components/cg-tree-view/cg-tree-view.js +1 -1
  465. package/dist/foundation.d.ts +0 -16
  466. package/dist/foundation.d.ts.map +1 -1
  467. package/dist/foundation.js +174 -206
  468. package/dist/foundation.js.map +1 -1
  469. package/dist/index.d.ts +1 -17
  470. package/dist/index.d.ts.map +1 -1
  471. package/dist/index.js +100 -132
  472. package/dist/index.js.map +1 -1
  473. package/dist/utils/focus-trap.d.ts +19 -2
  474. package/dist/utils/focus-trap.d.ts.map +1 -1
  475. package/package.json +6 -810
  476. package/dist/chunks/focus-trap-BdRNhSPD.js +0 -53
  477. package/dist/chunks/focus-trap-BdRNhSPD.js.map +0 -1
  478. package/dist/components/cg-app-shell/cg-app-shell.d.ts +0 -54
  479. package/dist/components/cg-app-shell/cg-app-shell.d.ts.map +0 -1
  480. package/dist/components/cg-app-shell/cg-app-shell.js +0 -135
  481. package/dist/components/cg-app-shell/cg-app-shell.js.map +0 -1
  482. package/dist/components/cg-auth-shell/cg-auth-shell.d.ts +0 -61
  483. package/dist/components/cg-auth-shell/cg-auth-shell.d.ts.map +0 -1
  484. package/dist/components/cg-auth-shell/cg-auth-shell.js +0 -163
  485. package/dist/components/cg-auth-shell/cg-auth-shell.js.map +0 -1
  486. package/dist/components/cg-definition-list/cg-definition-list.d.ts +0 -99
  487. package/dist/components/cg-definition-list/cg-definition-list.d.ts.map +0 -1
  488. package/dist/components/cg-definition-list/cg-definition-list.js +0 -332
  489. package/dist/components/cg-definition-list/cg-definition-list.js.map +0 -1
  490. package/dist/components/cg-draggable/cg-draggable.d.ts +0 -53
  491. package/dist/components/cg-draggable/cg-draggable.d.ts.map +0 -1
  492. package/dist/components/cg-draggable/cg-draggable.js +0 -136
  493. package/dist/components/cg-draggable/cg-draggable.js.map +0 -1
  494. package/dist/components/cg-droppable/cg-droppable.d.ts +0 -57
  495. package/dist/components/cg-droppable/cg-droppable.d.ts.map +0 -1
  496. package/dist/components/cg-droppable/cg-droppable.js +0 -114
  497. package/dist/components/cg-droppable/cg-droppable.js.map +0 -1
  498. package/dist/components/cg-filter-bar/cg-filter-bar.d.ts +0 -50
  499. package/dist/components/cg-filter-bar/cg-filter-bar.d.ts.map +0 -1
  500. package/dist/components/cg-filter-bar/cg-filter-bar.js +0 -115
  501. package/dist/components/cg-filter-bar/cg-filter-bar.js.map +0 -1
  502. package/dist/components/cg-filter-chip/cg-filter-chip.d.ts +0 -55
  503. package/dist/components/cg-filter-chip/cg-filter-chip.d.ts.map +0 -1
  504. package/dist/components/cg-filter-chip/cg-filter-chip.js +0 -213
  505. package/dist/components/cg-filter-chip/cg-filter-chip.js.map +0 -1
  506. package/dist/components/cg-kanban/cg-kanban.d.ts +0 -44
  507. package/dist/components/cg-kanban/cg-kanban.d.ts.map +0 -1
  508. package/dist/components/cg-kanban/cg-kanban.js +0 -86
  509. package/dist/components/cg-kanban/cg-kanban.js.map +0 -1
  510. package/dist/components/cg-kanban-column/cg-kanban-column.d.ts +0 -58
  511. package/dist/components/cg-kanban-column/cg-kanban-column.d.ts.map +0 -1
  512. package/dist/components/cg-kanban-column/cg-kanban-column.js +0 -144
  513. package/dist/components/cg-kanban-column/cg-kanban-column.js.map +0 -1
  514. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.d.ts +0 -77
  515. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.d.ts.map +0 -1
  516. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.js +0 -245
  517. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.js.map +0 -1
  518. package/dist/components/cg-search-input/cg-search-input.d.ts +0 -62
  519. package/dist/components/cg-search-input/cg-search-input.d.ts.map +0 -1
  520. package/dist/components/cg-search-input/cg-search-input.js +0 -106
  521. package/dist/components/cg-search-input/cg-search-input.js.map +0 -1
  522. package/dist/components/cg-sortable/cg-sortable.d.ts +0 -72
  523. package/dist/components/cg-sortable/cg-sortable.d.ts.map +0 -1
  524. package/dist/components/cg-sortable/cg-sortable.js +0 -177
  525. package/dist/components/cg-sortable/cg-sortable.js.map +0 -1
  526. package/dist/components/cg-theme/cg-theme.d.ts +0 -82
  527. package/dist/components/cg-theme/cg-theme.d.ts.map +0 -1
  528. package/dist/components/cg-theme/cg-theme.js +0 -91
  529. package/dist/components/cg-theme/cg-theme.js.map +0 -1
  530. package/dist/components/cg-theme-editor/cg-theme-editor.d.ts +0 -98
  531. package/dist/components/cg-theme-editor/cg-theme-editor.d.ts.map +0 -1
  532. package/dist/components/cg-theme-editor/cg-theme-editor.js +0 -341
  533. package/dist/components/cg-theme-editor/cg-theme-editor.js.map +0 -1
  534. package/dist/components/cg-timeline/cg-timeline.d.ts +0 -70
  535. package/dist/components/cg-timeline/cg-timeline.d.ts.map +0 -1
  536. package/dist/components/cg-timeline/cg-timeline.js +0 -131
  537. package/dist/components/cg-timeline/cg-timeline.js.map +0 -1
  538. package/dist/components/cg-timeline-event/cg-timeline-event.d.ts +0 -59
  539. package/dist/components/cg-timeline-event/cg-timeline-event.d.ts.map +0 -1
  540. package/dist/components/cg-timeline-event/cg-timeline-event.js +0 -190
  541. package/dist/components/cg-timeline-event/cg-timeline-event.js.map +0 -1
  542. package/dist/utils/drag-manager.d.ts +0 -40
  543. package/dist/utils/drag-manager.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cg-otp-input.js","sources":["../../../src/components/cg-otp-input/cg-otp-input.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBase, reducedMotion } from '../../styles/index.js';\n\n/**\n * <cg-otp-input> — One-time password input with individual digit boxes.\n *\n * @example\n * ```html\n * <cg-otp-input length=\"6\"></cg-otp-input>\n * <cg-otp-input length=\"4\" mask></cg-otp-input>\n * ```\n *\n * @fires {CustomEvent<{value: string}>} cg-otp-change - On each digit change\n * @fires {CustomEvent<{value: string}>} cg-otp-complete - When all digits filled\n *\n * @cssprop --cg-component-otp-box-width - Box width (48px)\n * @cssprop --cg-component-otp-box-height - Box height (56px)\n * @cssprop --cg-color-input-border-default - Default border color\n */\n@customElement('cg-otp-input')\nexport class CgOtpInput extends LitElement {\n static override styles = [hostBase, reducedMotion, css`\n .container {\n display: flex;\n gap: var(--cg-spacing-8);\n }\n\n .box {\n width: var(--cg-component-otp-box-width);\n height: var(--cg-component-otp-box-height);\n border: var(--cg-border-width-50) solid var(--cg-color-input-border-default);\n border-radius: var(--cg-border-radius-100);\n background: var(--cg-color-input-background-default);\n color: var(--cg-color-input-text-default);\n font-family: inherit;\n font-size: var(--cg-font-size-lg);\n font-weight: var(--cg-font-weight-semibold);\n text-align: center;\n caret-color: var(--cg-color-action-primary-background-default);\n outline: none;\n transition:\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n box-shadow var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n animation: otpCellIn var(--cg-transition-duration-slow) var(--cg-transition-easing-default) both;\n }\n\n @keyframes otpCellIn {\n from { opacity: 0; transform: translateY(var(--cg-spacing-4)) scale(0.95); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n\n .box:hover:not(:disabled) {\n border-color: var(--cg-color-input-border-hover);\n }\n\n .box:focus {\n border-color: var(--cg-color-input-border-focus);\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n transform: scale(1.05);\n }\n\n .box:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n background: var(--cg-color-input-background-disabled);\n border-color: var(--cg-color-input-border-disabled);\n }\n\n :host([error]) .box {\n border-color: var(--cg-color-input-border-error);\n }\n :host([error]) .box:focus {\n border-color: var(--cg-color-status-error-text-default);\n box-shadow: 0 0 0 3px var(--cg-shadow-focus-error);\n }\n\n /* ── Success state ── */\n :host([success]) .box {\n border-color: var(--cg-color-status-success-text-default);\n }\n :host([success]) .box:focus {\n border-color: var(--cg-color-status-success-text-default);\n box-shadow: 0 0 0 3px var(--cg-shadow-focus-success);\n }\n\n .box.filled {\n border-color: var(--cg-color-surface-container-border);\n }\n\n /* Rounded variants */\n :host([rounded=\"none\"]) .box { border-radius: 0; }\n :host([rounded=\"sm\"]) .box { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .box { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .box { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) .box { border-radius: var(--cg-border-radius-full); }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n .box {\n animation: none !important;\n transform: none !important;\n }\n }\n `];\n\n @property({ type: Number }) length = 6;\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n @property() value = '';\n @property({ type: Boolean, reflect: true }) disabled = false;\n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: Boolean, reflect: true }) success = false;\n @property({ type: Boolean }) mask = false;\n\n @state() private _digits: string[] = [];\n\n override connectedCallback() {\n super.connectedCallback();\n this._syncDigits();\n }\n\n override updated(changed: Map<string, unknown>) {\n if (changed.has('value') || changed.has('length')) this._syncDigits();\n }\n\n private _syncDigits() {\n this._digits = Array.from({ length: this.length }, (_, i) => this.value[i] || '');\n }\n\n private _getBoxes(): HTMLInputElement[] {\n return Array.from(this.shadowRoot?.querySelectorAll<HTMLInputElement>('.box') ?? []);\n }\n\n private _focusBox(index: number) {\n const boxes = this._getBoxes();\n const target = boxes[Math.min(Math.max(0, index), this.length - 1)];\n target?.focus();\n target?.select();\n }\n\n private _emitValue() {\n const val = this._digits.join('');\n this.value = val;\n this.dispatchEvent(new CustomEvent('cg-otp-change', { detail: { value: val }, bubbles: true, composed: true }));\n if (val.length === this.length && val.split('').every(c => c !== '')) {\n this.dispatchEvent(new CustomEvent('cg-otp-complete', { detail: { value: val }, bubbles: true, composed: true }));\n }\n }\n\n private _onInput(index: number, e: Event) {\n const input = e.target as HTMLInputElement;\n const char = input.value.replace(/[^0-9]/g, '').slice(-1);\n this._digits = [...this._digits];\n this._digits[index] = char;\n input.value = this.mask && char ? '\\u2022' : char;\n this._emitValue();\n if (char && index < this.length - 1) this._focusBox(index + 1);\n }\n\n private _onKeyDown(index: number, e: KeyboardEvent) {\n if (e.key === 'Backspace') {\n e.preventDefault();\n if (this._digits[index]) {\n this._digits = [...this._digits];\n this._digits[index] = '';\n (e.target as HTMLInputElement).value = '';\n this._emitValue();\n } else if (index > 0) {\n this._focusBox(index - 1);\n this._digits = [...this._digits];\n this._digits[index - 1] = '';\n this._emitValue();\n }\n } else if (e.key === 'ArrowLeft' && index > 0) {\n e.preventDefault(); this._focusBox(index - 1);\n } else if (e.key === 'ArrowRight' && index < this.length - 1) {\n e.preventDefault(); this._focusBox(index + 1);\n }\n }\n\n private _onPaste(e: ClipboardEvent) {\n e.preventDefault();\n const data = (e.clipboardData?.getData('text') || '').replace(/[^0-9]/g, '').slice(0, this.length);\n this._digits = Array.from({ length: this.length }, (_, i) => data[i] || '');\n this._emitValue();\n this.requestUpdate();\n this.updateComplete.then(() => {\n this._focusBox(Math.min(data.length, this.length - 1));\n const boxes = this._getBoxes();\n this._digits.forEach((d, i) => { if (boxes[i]) boxes[i].value = this.mask && d ? '\\u2022' : d; });\n });\n }\n\n override render() {\n return html`\n <div class=\"container\" role=\"group\" aria-label=\"One-time password input\">\n ${Array.from({ length: this.length }, (_, i) => {\n const digit = this._digits[i] || '';\n const display = this.mask && digit ? '\\u2022' : digit;\n return html`\n <input class=\"box ${digit ? 'filled' : ''}\"\n type=\"text\" inputmode=\"numeric\" maxlength=\"1\"\n style=\"animation-delay: ${i * 40}ms\"\n .value=${display}\n ?disabled=${this.disabled}\n autocomplete=\"one-time-code\"\n aria-label=${`Digit ${i + 1} of ${this.length}`}\n @input=${(e: Event) => this._onInput(i, e)}\n @keydown=${(e: KeyboardEvent) => this._onKeyDown(i, e)}\n @paste=${this._onPaste}\n @focus=${(e: Event) => (e.target as HTMLInputElement).select()} />\n `;\n })}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-otp-input': CgOtpInput;\n }\n}\n"],"names":["CgOtpInput","LitElement","changed","_","i","index","target","val","c","input","char","e","data","boxes","d","html","digit","display","hostBase","reducedMotion","css","__decorateClass","property","state","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"cg-otp-input.js","sources":["../../../src/components/cg-otp-input/cg-otp-input.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBase, reducedMotion } from '../../styles/index.js';\n\n/**\n * <cg-otp-input> — One-time password input with individual digit boxes.\n *\n * @example\n * ```html\n * <cg-otp-input length=\"6\"></cg-otp-input>\n * <cg-otp-input length=\"4\" mask></cg-otp-input>\n * ```\n *\n * @fires {CustomEvent<{value: string}>} cg-otp-change - On each digit change\n * @fires {CustomEvent<{value: string}>} cg-otp-complete - When all digits filled\n *\n * @cssprop --cg-component-otp-box-width - Box width (48px)\n * @cssprop --cg-component-otp-box-height - Box height (56px)\n * @cssprop --cg-color-input-border-default - Default border color\n */\n@customElement('cg-otp-input')\nexport class CgOtpInput extends LitElement {\n static override styles = [hostBase, reducedMotion, css`\n .container {\n display: flex;\n gap: var(--cg-spacing-8);\n }\n\n .box {\n width: var(--cg-component-otp-box-width);\n height: var(--cg-component-otp-box-height);\n border: var(--cg-border-width-50) solid var(--cg-color-input-border-default);\n border-radius: var(--cg-border-radius-100);\n background: var(--cg-color-input-background-default);\n color: var(--cg-color-input-text-default);\n font-family: inherit;\n font-size: var(--cg-font-size-lg);\n font-weight: var(--cg-font-weight-semibold);\n text-align: center;\n caret-color: var(--cg-color-accent-text);\n outline: none;\n transition:\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n box-shadow var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n animation: otpCellIn var(--cg-transition-duration-slow) var(--cg-transition-easing-default) both;\n }\n\n @keyframes otpCellIn {\n from { opacity: 0; transform: translateY(var(--cg-spacing-4)) scale(0.95); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n\n .box:hover:not(:disabled) {\n border-color: var(--cg-color-input-border-hover);\n }\n\n .box:focus {\n border-color: var(--cg-color-input-border-focus);\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n }\n\n .box:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n background: var(--cg-color-input-background-disabled);\n border-color: var(--cg-color-input-border-disabled);\n }\n\n :host([error]) .box {\n border-color: var(--cg-color-input-border-error);\n }\n :host([error]) .box:focus {\n border-color: var(--cg-color-status-error-text-default);\n box-shadow: 0 0 0 3px var(--cg-shadow-focus-error);\n }\n\n /* ── Success state ── */\n :host([success]) .box {\n border-color: var(--cg-color-status-success-text-default);\n }\n :host([success]) .box:focus {\n border-color: var(--cg-color-status-success-text-default);\n box-shadow: 0 0 0 3px var(--cg-shadow-focus-success);\n }\n\n .box.filled {\n border-color: var(--cg-color-surface-cards-border-strong);\n }\n\n /* Rounded variants */\n :host([rounded=\"none\"]) .box { border-radius: 0; }\n :host([rounded=\"sm\"]) .box { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .box { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .box { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) .box { border-radius: var(--cg-border-radius-full); }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n .box {\n animation: none !important;\n transform: none !important;\n }\n }\n `];\n\n @property({ type: Number }) length = 6;\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n @property() value = '';\n @property({ type: Boolean, reflect: true }) disabled = false;\n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: Boolean, reflect: true }) success = false;\n @property({ type: Boolean }) mask = false;\n\n @state() private _digits: string[] = [];\n\n override connectedCallback() {\n super.connectedCallback();\n this._syncDigits();\n }\n\n override updated(changed: Map<string, unknown>) {\n if ((changed.has('value') && this.value !== this._digits.join('')) || changed.has('length')) this._syncDigits();\n }\n\n private _syncDigits() {\n this._digits = Array.from({ length: this.length }, (_, i) => this.value[i] || '');\n }\n\n private _getBoxes(): HTMLInputElement[] {\n return Array.from(this.shadowRoot?.querySelectorAll<HTMLInputElement>('.box') ?? []);\n }\n\n private _focusBox(index: number) {\n const boxes = this._getBoxes();\n const target = boxes[Math.min(Math.max(0, index), this.length - 1)];\n target?.focus();\n target?.select();\n }\n\n private _emitValue() {\n const val = this._digits.join('');\n this.value = val;\n this.dispatchEvent(new CustomEvent('cg-otp-change', { detail: { value: val }, bubbles: true, composed: true }));\n if (val.length === this.length && val.split('').every(c => c !== '')) {\n this.dispatchEvent(new CustomEvent('cg-otp-complete', { detail: { value: val }, bubbles: true, composed: true }));\n }\n }\n\n private _onInput(index: number, e: Event) {\n const input = e.target as HTMLInputElement;\n const chars = input.value.replace(/[^0-9]/g, '');\n if (chars.length > 1) {\n // OS one-time-code autofill inserts the whole code as one input event —\n // distribute across boxes like paste instead of keeping only one digit.\n this._digits = Array.from({ length: this.length }, (_, i) => chars[i] || '');\n this._emitValue();\n this.updateComplete.then(() => {\n const boxes = this._getBoxes();\n this._digits.forEach((d, i) => {\n const box = boxes[i];\n if (box) box.value = this.mask && d ? '\\u2022' : d;\n });\n this._focusBox(Math.min(chars.length, this.length - 1));\n });\n return;\n }\n const char = chars;\n this._digits = [...this._digits];\n this._digits[index] = char;\n input.value = this.mask && char ? '\\u2022' : char;\n this._emitValue();\n if (char && index < this.length - 1) this._focusBox(index + 1);\n }\n\n private _onKeyDown(index: number, e: KeyboardEvent) {\n if (e.key === 'Backspace') {\n e.preventDefault();\n if (this._digits[index]) {\n this._digits = [...this._digits];\n this._digits[index] = '';\n (e.target as HTMLInputElement).value = '';\n this._emitValue();\n } else if (index > 0) {\n this._focusBox(index - 1);\n this._digits = [...this._digits];\n this._digits[index - 1] = '';\n this._emitValue();\n }\n } else if (e.key === 'ArrowLeft' && index > 0) {\n e.preventDefault(); this._focusBox(index - 1);\n } else if (e.key === 'ArrowRight' && index < this.length - 1) {\n e.preventDefault(); this._focusBox(index + 1);\n }\n }\n\n private _onPaste(e: ClipboardEvent) {\n e.preventDefault();\n const data = (e.clipboardData?.getData('text') || '').replace(/[^0-9]/g, '').slice(0, this.length);\n this._digits = Array.from({ length: this.length }, (_, i) => data[i] || '');\n this._emitValue();\n this.requestUpdate();\n this.updateComplete.then(() => {\n this._focusBox(Math.min(data.length, this.length - 1));\n const boxes = this._getBoxes();\n this._digits.forEach((d, i) => { if (boxes[i]) boxes[i].value = this.mask && d ? '\\u2022' : d; });\n });\n }\n\n override render() {\n return html`\n <div class=\"container\" role=\"group\" aria-label=\"One-time password input\">\n ${Array.from({ length: this.length }, (_, i) => {\n const digit = this._digits[i] || '';\n const display = this.mask && digit ? '\\u2022' : digit;\n return html`\n <input class=\"box ${digit ? 'filled' : ''}\"\n type=\"text\" inputmode=\"numeric\" maxlength=\"1\"\n style=\"animation-delay: calc(${i} * var(--cg-transition-duration-fast) / 2)\"\n .value=${display}\n ?disabled=${this.disabled}\n aria-invalid=${this.error ? 'true' : 'false'}\n autocomplete=\"one-time-code\"\n aria-label=${`Digit ${i + 1} of ${this.length}`}\n @input=${(e: Event) => this._onInput(i, e)}\n @keydown=${(e: KeyboardEvent) => this._onKeyDown(i, e)}\n @paste=${this._onPaste}\n @focus=${(e: Event) => (e.target as HTMLInputElement).select()} />\n `;\n })}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-otp-input': CgOtpInput;\n }\n}\n"],"names":["CgOtpInput","LitElement","changed","_","i","index","target","val","c","input","chars","boxes","d","box","char","e","data","html","digit","display","hostBase","reducedMotion","css","__decorateClass","property","state","customElement"],"mappings":"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"}
@@ -20,6 +20,8 @@ export declare class CgPagination extends LitElement {
20
20
  total: number;
21
21
  current: number;
22
22
  siblings: number;
23
+ /** Accepts attribute "false" — plain Lit Booleans can never be turned off from markup. */
24
+ private static _boolConverter;
23
25
  showFirst: boolean;
24
26
  showLast: boolean;
25
27
  private _goToPage;
@@ -1 +1 @@
1
- {"version":3,"file":"cg-pagination.d.ts","sourceRoot":"","sources":["../../../src/components/cg-pagination/cg-pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD;;;;;;;;;;;;;GAaG;AACH,qBACa,YAAa,SAAQ,UAAU;IAC1C,OAAgB,MAAM,4BA2HnB;IAE0B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAQ;IACtD,KAAK,SAAK;IACV,OAAO,SAAK;IACZ,QAAQ,SAAK;IACZ,SAAS,UAAQ;IACjB,QAAQ,UAAQ;IAE7C,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,SAAS;IAqCR,MAAM;CAoDhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,YAAY,CAAC;KAC/B;CACF"}
1
+ {"version":3,"file":"cg-pagination.d.ts","sourceRoot":"","sources":["../../../src/components/cg-pagination/cg-pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD;;;;;;;;;;;;;GAaG;AACH,qBACa,YAAa,SAAQ,UAAU;IAC1C,OAAgB,MAAM,4BA2HnB;IAE0B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAQ;IACtD,KAAK,SAAK;IACV,OAAO,SAAK;IACZ,QAAQ,SAAK;IACzC,0FAA0F;IAC1F,OAAO,CAAC,MAAM,CAAC,cAAc,CAA0D;IACjC,SAAS,UAAQ;IACjB,QAAQ,UAAQ;IAEtE,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,SAAS;IAqCR,MAAM;CAoDhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,YAAY,CAAC;KAC/B;CACF"}
@@ -1,43 +1,43 @@
1
- import { css as d, LitElement as u, html as l, nothing as h } from "lit";
1
+ import { css as d, LitElement as p, html as l, nothing as h } from "lit";
2
2
  import { property as c, customElement as b } from "lit/decorators.js";
3
- import { h as v, r as f } from "../../chunks/premium.css-9I4kHrsl.js";
4
- var m = Object.defineProperty, w = Object.getOwnPropertyDescriptor, o = (e, a, n, t) => {
5
- for (var i = t > 1 ? void 0 : t ? w(a, n) : a, g = e.length - 1, s; g >= 0; g--)
6
- (s = e[g]) && (i = (t ? s(a, n, i) : s(i)) || i);
7
- return t && i && m(a, n, i), i;
3
+ import { h as v, r as f } from "../../chunks/premium.css-DHekUEUt.js";
4
+ var m = Object.defineProperty, w = Object.getOwnPropertyDescriptor, o = (t, a, n, r) => {
5
+ for (var i = r > 1 ? void 0 : r ? w(a, n) : a, g = t.length - 1, s; g >= 0; g--)
6
+ (s = t[g]) && (i = (r ? s(a, n, i) : s(i)) || i);
7
+ return r && i && m(a, n, i), i;
8
8
  };
9
- let r = class extends u {
9
+ let e = class extends p {
10
10
  constructor() {
11
11
  super(...arguments), this.size = "md", this.rounded = "md", this.total = 1, this.current = 1, this.siblings = 1, this.showFirst = !0, this.showLast = !0;
12
12
  }
13
- _goToPage(e) {
14
- e < 1 || e > this.total || e === this.current || this.dispatchEvent(new CustomEvent("cg-page-change", {
13
+ _goToPage(t) {
14
+ t < 1 || t > this.total || t === this.current || this.dispatchEvent(new CustomEvent("cg-page-change", {
15
15
  bubbles: !0,
16
16
  composed: !0,
17
- detail: { page: e }
17
+ detail: { page: t }
18
18
  }));
19
19
  }
20
20
  _getPages() {
21
- const e = this.total, a = this.current, n = this.siblings;
22
- if (e <= 7)
23
- return Array.from({ length: e }, (s, p) => p + 1);
24
- const t = [];
25
- this.showFirst && t.push(1);
26
- const i = Math.max(2, a - n), g = Math.min(e - 1, a + n);
27
- i > 2 && t.push("ellipsis");
21
+ const t = this.total, a = this.current, n = this.siblings;
22
+ if (t <= 7)
23
+ return Array.from({ length: t }, (s, u) => u + 1);
24
+ const r = [];
25
+ this.showFirst && r.push(1);
26
+ const i = Math.max(2, a - n), g = Math.min(t - 1, a + n);
27
+ i > 2 && r.push("ellipsis");
28
28
  for (let s = i; s <= g; s++)
29
- t.push(s);
30
- return g < e - 1 && t.push("ellipsis"), this.showLast && t.push(e), t;
29
+ r.push(s);
30
+ return g < t - 1 && r.push("ellipsis"), this.showLast && r.push(t), r;
31
31
  }
32
32
  render() {
33
- const e = this._getPages(), a = this.current <= 1, n = this.current >= this.total;
33
+ const t = this._getPages(), a = this.current <= 1, n = this.current >= this.total;
34
34
  return l`
35
35
  <nav aria-label="Pagination">
36
36
  <ul class="pagination">
37
37
  <li>
38
38
  <button
39
39
  class="page-btn"
40
- ?disabled="${a}"
40
+ aria-disabled="${a ? "true" : "false"}"
41
41
  aria-label="Previous page"
42
42
  @click="${() => this._goToPage(this.current - 1)}"
43
43
  >
@@ -45,19 +45,19 @@ let r = class extends u {
45
45
  </button>
46
46
  </li>
47
47
 
48
- ${e.map((t) => {
49
- if (t === "ellipsis")
50
- return l`<li><span class="ellipsis" aria-hidden="true">...</span></li>`;
51
- const i = t === this.current;
48
+ ${t.map((r) => {
49
+ if (r === "ellipsis")
50
+ return l`<li><span class="ellipsis" aria-hidden="true">…</span></li>`;
51
+ const i = r === this.current;
52
52
  return l`
53
53
  <li>
54
54
  <button
55
55
  class="page-btn ${i ? "active" : ""}"
56
- aria-label="Page ${t}"
56
+ aria-label="Page ${r}"
57
57
  aria-current="${i ? "page" : h}"
58
- @click="${() => this._goToPage(t)}"
58
+ @click="${() => this._goToPage(r)}"
59
59
  >
60
- ${t}
60
+ ${r}
61
61
  </button>
62
62
  </li>
63
63
  `;
@@ -66,7 +66,7 @@ let r = class extends u {
66
66
  <li>
67
67
  <button
68
68
  class="page-btn"
69
- ?disabled="${n}"
69
+ aria-disabled="${n ? "true" : "false"}"
70
70
  aria-label="Next page"
71
71
  @click="${() => this._goToPage(this.current + 1)}"
72
72
  >
@@ -78,7 +78,7 @@ let r = class extends u {
78
78
  `;
79
79
  }
80
80
  };
81
- r.styles = [v, f, d`
81
+ e.styles = [v, f, d`
82
82
  :host {
83
83
  display: flex;
84
84
  }
@@ -118,28 +118,29 @@ r.styles = [v, f, d`
118
118
  -webkit-font-smoothing: antialiased;
119
119
  }
120
120
 
121
- .page-btn:hover:not(:disabled):not(.active) {
121
+ .page-btn:hover:not([aria-disabled="true"]):not(.active) {
122
122
  background: var(--cg-overlay-accent-subtle);
123
- color: var(--cg-color-surface-container-text);
124
- border-color: var(--cg-color-surface-base-border);
125
123
  }
126
124
 
127
- .page-btn:active:not(:disabled) {
125
+ .page-btn:active:not([aria-disabled="true"]) {
128
126
  transform: scale(var(--cg-interaction-press-scale));
129
127
  }
130
128
 
131
129
  .page-btn:focus-visible {
132
- box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);
133
130
  outline: none;
131
+ box-shadow:
132
+ 0 0 0 var(--cg-border-width-100) var(--cg-color-focus-ring-offset),
133
+ 0 0 0 calc(var(--cg-border-width-100) * 2) var(--cg-color-focus-ring);
134
134
  }
135
135
 
136
- .page-btn:disabled {
136
+ .page-btn[aria-disabled="true"] {
137
137
  opacity: 0.5;
138
138
  cursor: not-allowed;
139
139
  }
140
140
 
141
141
  /* ── Active page ── */
142
142
  .page-btn.active {
143
+ cursor: default;
143
144
  background: var(--cg-color-action-primary-background-default);
144
145
  color: var(--cg-color-action-primary-text-default);
145
146
  border-color: var(--cg-color-action-primary-border-default);
@@ -156,7 +157,6 @@ r.styles = [v, f, d`
156
157
  color: var(--cg-color-surface-container-outlined);
157
158
  font-size: var(--cg-font-size-sm);
158
159
  user-select: none;
159
- letter-spacing: var(--cg-letter-spacing-widest);
160
160
  }
161
161
 
162
162
  /* Size variants */
@@ -202,31 +202,32 @@ r.styles = [v, f, d`
202
202
  :host([rounded="lg"]) .page-btn { border-radius: var(--cg-border-radius-150); }
203
203
  :host([rounded="full"]) .page-btn { border-radius: var(--cg-border-radius-full); }
204
204
  `];
205
+ e._boolConverter = { fromAttribute: (t) => t !== "false" };
205
206
  o([
206
207
  c({ reflect: !0 })
207
- ], r.prototype, "size", 2);
208
+ ], e.prototype, "size", 2);
208
209
  o([
209
210
  c({ reflect: !0 })
210
- ], r.prototype, "rounded", 2);
211
+ ], e.prototype, "rounded", 2);
211
212
  o([
212
213
  c({ type: Number })
213
- ], r.prototype, "total", 2);
214
+ ], e.prototype, "total", 2);
214
215
  o([
215
216
  c({ type: Number })
216
- ], r.prototype, "current", 2);
217
+ ], e.prototype, "current", 2);
217
218
  o([
218
219
  c({ type: Number })
219
- ], r.prototype, "siblings", 2);
220
+ ], e.prototype, "siblings", 2);
220
221
  o([
221
- c({ type: Boolean })
222
- ], r.prototype, "showFirst", 2);
222
+ c({ converter: e._boolConverter })
223
+ ], e.prototype, "showFirst", 2);
223
224
  o([
224
- c({ type: Boolean })
225
- ], r.prototype, "showLast", 2);
226
- r = o([
225
+ c({ converter: e._boolConverter })
226
+ ], e.prototype, "showLast", 2);
227
+ e = o([
227
228
  b("cg-pagination")
228
- ], r);
229
+ ], e);
229
230
  export {
230
- r as CgPagination
231
+ e as CgPagination
231
232
  };
232
233
  //# sourceMappingURL=cg-pagination.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cg-pagination.js","sources":["../../../src/components/cg-pagination/cg-pagination.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\n/**\n * @element cg-pagination\n * Page navigation with prev/next arrows, ellipsis gaps, and configurable siblings.\n *\n * @example\n * ```html\n * <cg-pagination total=\"20\" current=\"5\"></cg-pagination>\n * ```\n *\n * @fires {CustomEvent<{page: number}>} cg-page-change - When a page button is clicked\n *\n * @cssprop --cg-component-pagination-button-size - Button size (36px)\n * @cssprop --cg-color-action-primary-background-default - Active page background\n */\n@customElement('cg-pagination')\nexport class CgPagination extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host {\n display: flex;\n }\n\n .pagination {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-4);\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n .page-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--cg-component-pagination-button-size);\n height: var(--cg-component-pagination-button-size);\n padding: 0 var(--cg-spacing-8);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-base-border);\n border-radius: var(--cg-border-radius-100);\n background: transparent;\n color: var(--cg-color-surface-container-text);\n font-family: inherit;\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n font-variant-numeric: tabular-nums;\n cursor: pointer;\n line-height: 1;\n white-space: nowrap;\n transition:\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n -webkit-font-smoothing: antialiased;\n }\n\n .page-btn:hover:not(:disabled):not(.active) {\n background: var(--cg-overlay-accent-subtle);\n color: var(--cg-color-surface-container-text);\n border-color: var(--cg-color-surface-base-border);\n }\n\n .page-btn:active:not(:disabled) {\n transform: scale(var(--cg-interaction-press-scale));\n }\n\n .page-btn:focus-visible {\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n outline: none;\n }\n\n .page-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* ── Active page ── */\n .page-btn.active {\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-action-primary-text-default);\n border-color: var(--cg-color-action-primary-border-default);\n font-weight: var(--cg-font-weight-semibold);\n }\n\n /* ── Ellipsis ── */\n .ellipsis {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--cg-component-pagination-button-size);\n height: var(--cg-component-pagination-button-size);\n color: var(--cg-color-surface-container-outlined);\n font-size: var(--cg-font-size-sm);\n user-select: none;\n letter-spacing: var(--cg-letter-spacing-widest);\n }\n\n /* Size variants */\n :host([size=\"sm\"]) .page-btn {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n }\n :host([size=\"sm\"]) .ellipsis {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n }\n\n :host([size=\"lg\"]) .page-btn {\n min-width: var(--cg-spacing-48);\n height: var(--cg-spacing-48);\n font-size: var(--cg-font-size-base);\n }\n :host([size=\"lg\"]) .ellipsis {\n min-width: var(--cg-spacing-48);\n height: var(--cg-spacing-48);\n font-size: var(--cg-font-size-base);\n }\n\n @media (max-width: 480px) {\n .page-btn {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n padding: 0 var(--cg-spacing-4);\n }\n .ellipsis {\n min-width: var(--cg-spacing-24);\n height: var(--cg-spacing-32);\n }\n }\n\n /* Rounded variants */\n :host([rounded=\"none\"]) .page-btn { border-radius: 0; }\n :host([rounded=\"sm\"]) .page-btn { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .page-btn { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .page-btn { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) .page-btn { border-radius: var(--cg-border-radius-full); }\n `];\n\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n @property({ type: Number }) total = 1;\n @property({ type: Number }) current = 1;\n @property({ type: Number }) siblings = 1;\n @property({ type: Boolean }) showFirst = true;\n @property({ type: Boolean }) showLast = true;\n\n private _goToPage(page: number) {\n if (page < 1 || page > this.total || page === this.current) return;\n this.dispatchEvent(new CustomEvent('cg-page-change', {\n bubbles: true,\n composed: true,\n detail: { page },\n }));\n }\n\n private _getPages(): (number | 'ellipsis')[] {\n const total = this.total;\n const current = this.current;\n const siblings = this.siblings;\n\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const pages: (number | 'ellipsis')[] = [];\n\n if (this.showFirst) {\n pages.push(1);\n }\n\n const rangeStart = Math.max(2, current - siblings);\n const rangeEnd = Math.min(total - 1, current + siblings);\n\n if (rangeStart > 2) {\n pages.push('ellipsis');\n }\n\n for (let i = rangeStart; i <= rangeEnd; i++) {\n pages.push(i);\n }\n\n if (rangeEnd < total - 1) {\n pages.push('ellipsis');\n }\n\n if (this.showLast) {\n pages.push(total);\n }\n\n return pages;\n }\n\n override render() {\n const pages = this._getPages();\n const isFirstPage = this.current <= 1;\n const isLastPage = this.current >= this.total;\n\n return html`\n <nav aria-label=\"Pagination\">\n <ul class=\"pagination\">\n <li>\n <button\n class=\"page-btn\"\n ?disabled=\"${isFirstPage}\"\n aria-label=\"Previous page\"\n @click=\"${() => this._goToPage(this.current - 1)}\"\n >\n <cg-icon name=\"chevron-left\" size=\"sm\"></cg-icon>\n </button>\n </li>\n\n ${pages.map(page => {\n if (page === 'ellipsis') {\n return html`<li><span class=\"ellipsis\" aria-hidden=\"true\">...</span></li>`;\n }\n const isActive = page === this.current;\n return html`\n <li>\n <button\n class=\"page-btn ${isActive ? 'active' : ''}\"\n aria-label=\"Page ${page}\"\n aria-current=\"${isActive ? 'page' : nothing}\"\n @click=\"${() => this._goToPage(page)}\"\n >\n ${page}\n </button>\n </li>\n `;\n })}\n\n <li>\n <button\n class=\"page-btn\"\n ?disabled=\"${isLastPage}\"\n aria-label=\"Next page\"\n @click=\"${() => this._goToPage(this.current + 1)}\"\n >\n <cg-icon name=\"chevron-right\" size=\"sm\"></cg-icon>\n </button>\n </li>\n </ul>\n </nav>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-pagination': CgPagination;\n }\n}\n"],"names":["CgPagination","LitElement","page","total","current","siblings","_","i","pages","rangeStart","rangeEnd","isFirstPage","isLastPage","html","isActive","nothing","hostBlock","reducedMotion","css","__decorateClass","property","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"cg-pagination.js","sources":["../../../src/components/cg-pagination/cg-pagination.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\n/**\n * @element cg-pagination\n * Page navigation with prev/next arrows, ellipsis gaps, and configurable siblings.\n *\n * @example\n * ```html\n * <cg-pagination total=\"20\" current=\"5\"></cg-pagination>\n * ```\n *\n * @fires {CustomEvent<{page: number}>} cg-page-change - When a page button is clicked\n *\n * @cssprop --cg-component-pagination-button-size - Button size (36px)\n * @cssprop --cg-color-action-primary-background-default - Active page background\n */\n@customElement('cg-pagination')\nexport class CgPagination extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host {\n display: flex;\n }\n\n .pagination {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-4);\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n .page-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--cg-component-pagination-button-size);\n height: var(--cg-component-pagination-button-size);\n padding: 0 var(--cg-spacing-8);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-base-border);\n border-radius: var(--cg-border-radius-100);\n background: transparent;\n color: var(--cg-color-surface-container-text);\n font-family: inherit;\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n font-variant-numeric: tabular-nums;\n cursor: pointer;\n line-height: 1;\n white-space: nowrap;\n transition:\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n -webkit-font-smoothing: antialiased;\n }\n\n .page-btn:hover:not([aria-disabled=\"true\"]):not(.active) {\n background: var(--cg-overlay-accent-subtle);\n }\n\n .page-btn:active:not([aria-disabled=\"true\"]) {\n transform: scale(var(--cg-interaction-press-scale));\n }\n\n .page-btn:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 var(--cg-border-width-100) var(--cg-color-focus-ring-offset),\n 0 0 0 calc(var(--cg-border-width-100) * 2) var(--cg-color-focus-ring);\n }\n\n .page-btn[aria-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* ── Active page ── */\n .page-btn.active {\n cursor: default;\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-action-primary-text-default);\n border-color: var(--cg-color-action-primary-border-default);\n font-weight: var(--cg-font-weight-semibold);\n }\n\n /* ── Ellipsis ── */\n .ellipsis {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--cg-component-pagination-button-size);\n height: var(--cg-component-pagination-button-size);\n color: var(--cg-color-surface-container-outlined);\n font-size: var(--cg-font-size-sm);\n user-select: none;\n }\n\n /* Size variants */\n :host([size=\"sm\"]) .page-btn {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n }\n :host([size=\"sm\"]) .ellipsis {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n }\n\n :host([size=\"lg\"]) .page-btn {\n min-width: var(--cg-spacing-48);\n height: var(--cg-spacing-48);\n font-size: var(--cg-font-size-base);\n }\n :host([size=\"lg\"]) .ellipsis {\n min-width: var(--cg-spacing-48);\n height: var(--cg-spacing-48);\n font-size: var(--cg-font-size-base);\n }\n\n @media (max-width: 480px) {\n .page-btn {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n padding: 0 var(--cg-spacing-4);\n }\n .ellipsis {\n min-width: var(--cg-spacing-24);\n height: var(--cg-spacing-32);\n }\n }\n\n /* Rounded variants */\n :host([rounded=\"none\"]) .page-btn { border-radius: 0; }\n :host([rounded=\"sm\"]) .page-btn { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .page-btn { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .page-btn { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) .page-btn { border-radius: var(--cg-border-radius-full); }\n `];\n\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n @property({ type: Number }) total = 1;\n @property({ type: Number }) current = 1;\n @property({ type: Number }) siblings = 1;\n /** Accepts attribute \"false\" — plain Lit Booleans can never be turned off from markup. */\n private static _boolConverter = { fromAttribute: (v: string | null) => v !== 'false' };\n @property({ converter: CgPagination._boolConverter }) showFirst = true;\n @property({ converter: CgPagination._boolConverter }) showLast = true;\n\n private _goToPage(page: number) {\n if (page < 1 || page > this.total || page === this.current) return;\n this.dispatchEvent(new CustomEvent('cg-page-change', {\n bubbles: true,\n composed: true,\n detail: { page },\n }));\n }\n\n private _getPages(): (number | 'ellipsis')[] {\n const total = this.total;\n const current = this.current;\n const siblings = this.siblings;\n\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const pages: (number | 'ellipsis')[] = [];\n\n if (this.showFirst) {\n pages.push(1);\n }\n\n const rangeStart = Math.max(2, current - siblings);\n const rangeEnd = Math.min(total - 1, current + siblings);\n\n if (rangeStart > 2) {\n pages.push('ellipsis');\n }\n\n for (let i = rangeStart; i <= rangeEnd; i++) {\n pages.push(i);\n }\n\n if (rangeEnd < total - 1) {\n pages.push('ellipsis');\n }\n\n if (this.showLast) {\n pages.push(total);\n }\n\n return pages;\n }\n\n override render() {\n const pages = this._getPages();\n const isFirstPage = this.current <= 1;\n const isLastPage = this.current >= this.total;\n\n return html`\n <nav aria-label=\"Pagination\">\n <ul class=\"pagination\">\n <li>\n <button\n class=\"page-btn\"\n aria-disabled=\"${isFirstPage ? 'true' : 'false'}\"\n aria-label=\"Previous page\"\n @click=\"${() => this._goToPage(this.current - 1)}\"\n >\n <cg-icon name=\"chevron-left\" size=\"sm\"></cg-icon>\n </button>\n </li>\n\n ${pages.map(page => {\n if (page === 'ellipsis') {\n return html`<li><span class=\"ellipsis\" aria-hidden=\"true\">…</span></li>`;\n }\n const isActive = page === this.current;\n return html`\n <li>\n <button\n class=\"page-btn ${isActive ? 'active' : ''}\"\n aria-label=\"Page ${page}\"\n aria-current=\"${isActive ? 'page' : nothing}\"\n @click=\"${() => this._goToPage(page)}\"\n >\n ${page}\n </button>\n </li>\n `;\n })}\n\n <li>\n <button\n class=\"page-btn\"\n aria-disabled=\"${isLastPage ? 'true' : 'false'}\"\n aria-label=\"Next page\"\n @click=\"${() => this._goToPage(this.current + 1)}\"\n >\n <cg-icon name=\"chevron-right\" size=\"sm\"></cg-icon>\n </button>\n </li>\n </ul>\n </nav>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-pagination': CgPagination;\n }\n}\n"],"names":["CgPagination","LitElement","page","total","current","siblings","_","i","pages","rangeStart","rangeEnd","isFirstPage","isLastPage","html","isActive","nothing","hostBlock","reducedMotion","css","v","__decorateClass","property","customElement"],"mappings":";;;;;;;;AAmBO,IAAMA,IAAN,cAA2BC,EAAW;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA,GA8HwB,KAAA,OAA2B,MAC3B,KAAA,UAAgD,MACjD,KAAA,QAAQ,GACR,KAAA,UAAU,GACV,KAAA,WAAW,GAGe,KAAA,YAAY,IACZ,KAAA,WAAW;AAAA,EAAA;AAAA,EAEzD,UAAUC,GAAc;AAC9B,IAAIA,IAAO,KAAKA,IAAO,KAAK,SAASA,MAAS,KAAK,WACnD,KAAK,cAAc,IAAI,YAAY,kBAAkB;AAAA,MACnD,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ,EAAE,MAAAA,EAAA;AAAA,IAAK,CAChB,CAAC;AAAA,EACJ;AAAA,EAEQ,YAAqC;AAC3C,UAAMC,IAAQ,KAAK,OACbC,IAAU,KAAK,SACfC,IAAW,KAAK;AAEtB,QAAIF,KAAS;AACX,aAAO,MAAM,KAAK,EAAE,QAAQA,KAAS,CAACG,GAAGC,MAAMA,IAAI,CAAC;AAGtD,UAAMC,IAAiC,CAAA;AAEvC,IAAI,KAAK,aACPA,EAAM,KAAK,CAAC;AAGd,UAAMC,IAAa,KAAK,IAAI,GAAGL,IAAUC,CAAQ,GAC3CK,IAAW,KAAK,IAAIP,IAAQ,GAAGC,IAAUC,CAAQ;AAEvD,IAAII,IAAa,KACfD,EAAM,KAAK,UAAU;AAGvB,aAASD,IAAIE,GAAYF,KAAKG,GAAUH;AACtC,MAAAC,EAAM,KAAKD,CAAC;AAGd,WAAIG,IAAWP,IAAQ,KACrBK,EAAM,KAAK,UAAU,GAGnB,KAAK,YACPA,EAAM,KAAKL,CAAK,GAGXK;AAAA,EACT;AAAA,EAES,SAAS;AAChB,UAAMA,IAAQ,KAAK,UAAA,GACbG,IAAc,KAAK,WAAW,GAC9BC,IAAa,KAAK,WAAW,KAAK;AAExC,WAAOC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAMoBF,IAAc,SAAS,OAAO;AAAA;AAAA,wBAErC,MAAM,KAAK,UAAU,KAAK,UAAU,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMlDH,EAAM,IAAI,CAAAN,MAAQ;AAClB,UAAIA,MAAS;AACX,eAAOW;AAET,YAAMC,IAAWZ,MAAS,KAAK;AAC/B,aAAOW;AAAA;AAAA;AAAA,oCAGiBC,IAAW,WAAW,EAAE;AAAA,qCACvBZ,CAAI;AAAA,kCACPY,IAAW,SAASC,CAAO;AAAA,4BACjC,MAAM,KAAK,UAAUb,CAAI,CAAC;AAAA;AAAA,oBAElCA,CAAI;AAAA;AAAA;AAAA;AAAA,IAId,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKmBU,IAAa,SAAS,OAAO;AAAA;AAAA,wBAEpC,MAAM,KAAK,UAAU,KAAK,UAAU,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ5D;AACF;AA1OaZ,EACK,SAAS,CAACgB,GAAWC,GAAeC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2HnD;AA5HUlB,EAoII,iBAAiB,EAAE,eAAe,CAACmB,MAAqBA,MAAM,QAAA;AANhDC,EAAA;AAAA,EAA5BC,EAAS,EAAE,SAAS,GAAA,CAAM;AAAA,GA9HhBrB,EA8HkB,WAAA,QAAA,CAAA;AACAoB,EAAA;AAAA,EAA5BC,EAAS,EAAE,SAAS,GAAA,CAAM;AAAA,GA/HhBrB,EA+HkB,WAAA,WAAA,CAAA;AACDoB,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAhIfrB,EAgIiB,WAAA,SAAA,CAAA;AACAoB,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAjIfrB,EAiIiB,WAAA,WAAA,CAAA;AACAoB,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAlIfrB,EAkIiB,WAAA,YAAA,CAAA;AAG0BoB,EAAA;AAAA,EAArDC,EAAS,EAAE,WAAWrB,EAAa,gBAAgB;AAAA,GArIzCA,EAqI2C,WAAA,aAAA,CAAA;AACAoB,EAAA;AAAA,EAArDC,EAAS,EAAE,WAAWrB,EAAa,gBAAgB;AAAA,GAtIzCA,EAsI2C,WAAA,YAAA,CAAA;AAtI3CA,IAANoB,EAAA;AAAA,EADNE,EAAc,eAAe;AAAA,GACjBtB,CAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"cg-password-input.d.ts","sourceRoot":"","sources":["../../../src/components/cg-password-input/cg-password-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD;;;;;;;;;;;GAWG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAC7C,OAAgB,MAAM,4BA+HnB;IAEH,MAAM,CAAC,cAAc,UAAQ;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAmB;;IAS1B,KAAK,SAAM;IACX,KAAK,SAAM;IACX,WAAW,SAAM;IACjB,MAAM,SAAM;IACZ,IAAI,SAAM;IACsB,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACjB,KAAK,UAAS;IACd,OAAO,UAAS;IACH,YAAY,UAAS;IACzB,SAAS,SAAK;IAE1D,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAarD,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,iBAAiB;IAShB,MAAM;CAiDhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
1
+ {"version":3,"file":"cg-password-input.d.ts","sourceRoot":"","sources":["../../../src/components/cg-password-input/cg-password-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD;;;;;;;;;;;GAWG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAC7C,OAAgB,MAAM,4BAoInB;IAEH,MAAM,CAAC,cAAc,UAAQ;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAmB;;IAS1B,KAAK,SAAM;IACX,KAAK,SAAM;IACX,WAAW,SAAM;IACjB,MAAM,SAAM;IACZ,IAAI,SAAM;IACsB,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACjB,KAAK,UAAS;IACd,OAAO,UAAS;IACH,YAAY,UAAS;IACzB,SAAS,SAAK;IAE1D,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAarD,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,iBAAiB;IAShB,MAAM;CAoDhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
@@ -1,17 +1,17 @@
1
- import { css as d, LitElement as h, nothing as l, html as s } from "lit";
2
- import { property as o, state as p, customElement as v } from "lit/decorators.js";
3
- import { h as f, r as b } from "../../chunks/premium.css-9I4kHrsl.js";
4
- var m = Object.defineProperty, y = Object.getOwnPropertyDescriptor, r = (t, a, c, n) => {
5
- for (var i = n > 1 ? void 0 : n ? y(a, c) : a, u = t.length - 1, g; u >= 0; u--)
6
- (g = t[u]) && (i = (n ? g(a, c, i) : g(i)) || i);
7
- return n && i && m(a, c, i), i;
1
+ import { css as g, LitElement as h, nothing as n, html as o } from "lit";
2
+ import { property as s, state as p, customElement as v } from "lit/decorators.js";
3
+ import { h as f, r as b } from "../../chunks/premium.css-DHekUEUt.js";
4
+ var m = Object.defineProperty, y = Object.getOwnPropertyDescriptor, r = (t, a, c, l) => {
5
+ for (var i = l > 1 ? void 0 : l ? y(a, c) : a, u = t.length - 1, d; u >= 0; u--)
6
+ (d = t[u]) && (i = (l ? d(a, c, i) : d(i)) || i);
7
+ return l && i && m(a, c, i), i;
8
8
  };
9
9
  let e = class extends h {
10
10
  constructor() {
11
11
  super(), this.value = "", this.label = "", this.placeholder = "", this.helper = "", this.name = "", this.required = !1, this.disabled = !1, this.error = !1, this.success = !1, this.showStrength = !1, this.minLength = 0, this._visible = !1, typeof this.attachInternals == "function" && (this._internals = this.attachInternals());
12
12
  }
13
13
  updated(t) {
14
- t.has("value") && (this._internals?.setFormValue(this.value), this.required && !this.value ? this._internals?.setValidity({ valueMissing: !0 }, "Password is required") : this.minLength > 0 && this.value.length < this.minLength ? this._internals?.setValidity({ tooShort: !0 }, `Minimum length is ${this.minLength}`) : this._internals?.setValidity({}));
14
+ (t.has("value") || t.has("required") || t.has("minLength")) && (this._internals?.setFormValue(this.value), this.required && !this.value ? this._internals?.setValidity({ valueMissing: !0 }, "Password is required") : this.minLength > 0 && this.value.length < this.minLength ? this._internals?.setValidity({ tooShort: !0 }, `Minimum length is ${this.minLength}`) : this._internals?.setValidity({}));
15
15
  }
16
16
  _strengthScore() {
17
17
  const t = this.value;
@@ -39,17 +39,20 @@ let e = class extends h {
39
39
  }
40
40
  render() {
41
41
  const t = this._strengthScore();
42
- return s`
42
+ return o`
43
43
  <div class="wrap">
44
- ${this.label ? s`<label>${this.label}${this.required ? s` <span style="color:var(--cg-color-status-error-text-default);">*</span>` : l}</label>` : l}
44
+ ${this.label ? o`<label for="input">${this.label}${this.required ? o` <span class="required-marker">*</span>` : n}</label>` : n}
45
45
  <div class="input-wrap">
46
46
  <input
47
+ id="input"
47
48
  type=${this._visible ? "text" : "password"}
48
49
  .value=${this.value}
49
50
  placeholder=${this.placeholder}
50
51
  name=${this.name}
51
52
  ?disabled=${this.disabled}
52
53
  ?required=${this.required}
54
+ aria-label=${this.label ? n : this.placeholder || "Password"}
55
+ aria-describedby=${this.helper ? "helper" : n}
53
56
  aria-invalid=${this.error ? "true" : "false"}
54
57
  aria-required=${this.required ? "true" : "false"}
55
58
  @input=${this._handleInput}
@@ -57,16 +60,16 @@ let e = class extends h {
57
60
  <button
58
61
  type="button"
59
62
  class="toggle"
63
+ ?disabled=${this.disabled}
60
64
  aria-label=${this._visible ? "Hide password" : "Show password"}
61
- aria-pressed=${this._visible ? "true" : "false"}
62
65
  @click=${this._toggleVisibility}
63
66
  >
64
- ${this._visible ? s`
67
+ ${this._visible ? o`
65
68
  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
66
69
  <path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"/>
67
70
  <line x1="1" y1="1" x2="23" y2="23"/>
68
71
  </svg>
69
- ` : s`
72
+ ` : o`
70
73
  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
71
74
  <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/>
72
75
  <circle cx="12" cy="12" r="3"/>
@@ -74,20 +77,20 @@ let e = class extends h {
74
77
  `}
75
78
  </button>
76
79
  </div>
77
- ${this.showStrength && this.value ? s`
80
+ ${this.showStrength && this.value ? o`
78
81
  <div class="strength" aria-hidden="true">
79
- ${[1, 2, 3, 4].map((a) => s`
82
+ ${[1, 2, 3, 4].map((a) => o`
80
83
  <div class="strength-bar ${a <= t ? "active" : ""}" data-level=${t}></div>
81
84
  `)}
82
85
  </div>
83
- <div class="strength-label">${this._strengthLabel()}</div>
84
- ` : l}
85
- ${this.helper ? s`<div class="helper">${this.helper}</div>` : l}
86
+ <div class="strength-label" role="status" aria-live="polite">${this._strengthLabel()}</div>
87
+ ` : n}
88
+ ${this.helper ? o`<div class="helper" id="helper">${this.helper}</div>` : n}
86
89
  </div>
87
90
  `;
88
91
  }
89
92
  };
90
- e.styles = [f, b, d`
93
+ e.styles = [f, b, g`
91
94
  :host { display: block; }
92
95
 
93
96
  .wrap {
@@ -140,9 +143,11 @@ e.styles = [f, b, d`
140
143
  :host([error]) input {
141
144
  border-color: var(--cg-color-status-error-border-default);
142
145
  }
146
+ :host([error]) input:focus { box-shadow: 0 0 0 3px var(--cg-shadow-focus-error); }
143
147
  :host([success]) input {
144
148
  border-color: var(--cg-color-status-success-border-default);
145
149
  }
150
+ :host([success]) input:focus { box-shadow: 0 0 0 3px var(--cg-shadow-focus-success); }
146
151
 
147
152
  .toggle {
148
153
  position: absolute;
@@ -161,16 +166,18 @@ e.styles = [f, b, d`
161
166
  border-radius: var(--cg-border-radius-50);
162
167
  transition: color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
163
168
  }
164
- .toggle:hover {
169
+ .toggle:hover:not(:disabled) {
165
170
  color: var(--cg-color-surface-base-text);
166
171
  background: var(--cg-color-action-tertiary-background-hover);
167
172
  }
173
+ .toggle:disabled { opacity: 0.6; cursor: not-allowed; }
168
174
  .toggle:focus-visible {
169
175
  outline: none;
170
176
  box-shadow:
171
- 0 0 0 2px var(--cg-color-focus-ring-offset),
172
- 0 0 0 4px var(--cg-color-focus-ring);
177
+ 0 0 0 var(--cg-focus-ring-offset) var(--cg-color-focus-ring-offset),
178
+ 0 0 0 calc(var(--cg-focus-ring-offset) + var(--cg-focus-ring-width)) var(--cg-color-focus-ring);
173
179
  }
180
+ .toggle:active { transform: translateY(-50%) scale(var(--cg-interaction-press-scale)); }
174
181
 
175
182
  .helper {
176
183
  margin-top: var(--cg-spacing-6);
@@ -203,7 +210,6 @@ e.styles = [f, b, d`
203
210
  from { transform: scaleX(0); }
204
211
  to { transform: scaleX(1); }
205
212
  }
206
- .toggle:active { transform: translateY(-50%) scale(0.9); }
207
213
  .strength-bar.active[data-level="1"] { background: var(--cg-color-status-error-text-default); }
208
214
  .strength-bar.active[data-level="2"] { background: var(--cg-color-status-warning-text-default); }
209
215
  .strength-bar.active[data-level="3"] { background: var(--cg-color-status-warning-text-default); }
@@ -214,40 +220,42 @@ e.styles = [f, b, d`
214
220
  font-size: var(--cg-font-size-xs);
215
221
  color: var(--cg-color-surface-container-outlined);
216
222
  }
223
+
224
+ .required-marker { color: var(--cg-color-status-error-text-default); }
217
225
  `];
218
226
  e.formAssociated = !0;
219
227
  r([
220
- o()
228
+ s()
221
229
  ], e.prototype, "value", 2);
222
230
  r([
223
- o()
231
+ s()
224
232
  ], e.prototype, "label", 2);
225
233
  r([
226
- o()
234
+ s()
227
235
  ], e.prototype, "placeholder", 2);
228
236
  r([
229
- o()
237
+ s()
230
238
  ], e.prototype, "helper", 2);
231
239
  r([
232
- o()
240
+ s()
233
241
  ], e.prototype, "name", 2);
234
242
  r([
235
- o({ type: Boolean, reflect: !0 })
243
+ s({ type: Boolean, reflect: !0 })
236
244
  ], e.prototype, "required", 2);
237
245
  r([
238
- o({ type: Boolean, reflect: !0 })
246
+ s({ type: Boolean, reflect: !0 })
239
247
  ], e.prototype, "disabled", 2);
240
248
  r([
241
- o({ type: Boolean, reflect: !0 })
249
+ s({ type: Boolean, reflect: !0 })
242
250
  ], e.prototype, "error", 2);
243
251
  r([
244
- o({ type: Boolean, reflect: !0 })
252
+ s({ type: Boolean, reflect: !0 })
245
253
  ], e.prototype, "success", 2);
246
254
  r([
247
- o({ type: Boolean, attribute: "show-strength" })
255
+ s({ type: Boolean, attribute: "show-strength" })
248
256
  ], e.prototype, "showStrength", 2);
249
257
  r([
250
- o({ type: Number, attribute: "min-length" })
258
+ s({ type: Number, attribute: "min-length" })
251
259
  ], e.prototype, "minLength", 2);
252
260
  r([
253
261
  p()
@@ -1 +1 @@
1
- {"version":3,"file":"cg-password-input.js","sources":["../../../src/components/cg-password-input/cg-password-input.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\n/**\n * @element cg-password-input\n * Password input with visibility toggle and optional strength meter.\n *\n * @example\n * ```html\n * <cg-password-input label=\"Password\" show-strength></cg-password-input>\n * ```\n *\n * @fires {CustomEvent<{value: string, strength?: number}>} cg-password-change\n * @fires {CustomEvent<{visible: boolean}>} cg-password-toggle\n */\n@customElement('cg-password-input')\nexport class CgPasswordInput extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host { display: block; }\n\n .wrap {\n position: relative;\n display: block;\n }\n\n label {\n display: block;\n margin-bottom: var(--cg-spacing-6);\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n color: var(--cg-color-surface-base-text);\n }\n\n .input-wrap {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n input {\n flex: 1;\n height: var(--cg-component-input-height-md);\n padding: 0 var(--cg-spacing-40) 0 var(--cg-spacing-12);\n background: var(--cg-color-input-background-default);\n border: var(--cg-border-width-50) solid var(--cg-color-input-border-default);\n border-radius: var(--cg-component-input-radius);\n color: var(--cg-color-input-text-default);\n font-family: inherit;\n font-size: var(--cg-font-size-base);\n outline: none;\n transition:\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n background var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n input::placeholder { color: var(--cg-color-input-text-placeholder); }\n input:hover:not(:disabled) {\n border-color: var(--cg-color-input-border-hover);\n }\n input:focus {\n border-color: var(--cg-color-input-border-focus);\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n }\n input:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n :host([error]) input {\n border-color: var(--cg-color-status-error-border-default);\n }\n :host([success]) input {\n border-color: var(--cg-color-status-success-border-default);\n }\n\n .toggle {\n position: absolute;\n right: var(--cg-spacing-8);\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n border: none;\n background: none;\n color: var(--cg-color-input-text-placeholder);\n cursor: pointer;\n border-radius: var(--cg-border-radius-50);\n transition: color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .toggle:hover {\n color: var(--cg-color-surface-base-text);\n background: var(--cg-color-action-tertiary-background-hover);\n }\n .toggle:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 2px var(--cg-color-focus-ring-offset),\n 0 0 0 4px var(--cg-color-focus-ring);\n }\n\n .helper {\n margin-top: var(--cg-spacing-6);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n }\n :host([error]) .helper { color: var(--cg-color-status-error-text-default); }\n :host([success]) .helper { color: var(--cg-color-status-success-text-default); }\n\n /* Strength meter */\n .strength {\n display: flex;\n gap: var(--cg-spacing-4);\n margin-top: var(--cg-spacing-12);\n }\n .strength-bar {\n flex: 1;\n height: var(--cg-spacing-4);\n background: var(--cg-color-surface-container-border);\n border-radius: var(--cg-border-radius-full);\n transition:\n background var(--cg-transition-duration-default) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n transform-origin: left;\n }\n .strength-bar.active {\n animation: barIn var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n }\n @keyframes barIn {\n from { transform: scaleX(0); }\n to { transform: scaleX(1); }\n }\n .toggle:active { transform: translateY(-50%) scale(0.9); }\n .strength-bar.active[data-level=\"1\"] { background: var(--cg-color-status-error-text-default); }\n .strength-bar.active[data-level=\"2\"] { background: var(--cg-color-status-warning-text-default); }\n .strength-bar.active[data-level=\"3\"] { background: var(--cg-color-status-warning-text-default); }\n .strength-bar.active[data-level=\"4\"] { background: var(--cg-color-status-success-text-default); }\n\n .strength-label {\n margin-top: var(--cg-spacing-6);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n }\n `];\n\n static formAssociated = true;\n private _internals?: ElementInternals;\n\n constructor() {\n super();\n if (typeof this.attachInternals === 'function') {\n this._internals = this.attachInternals();\n }\n }\n\n @property() value = '';\n @property() label = '';\n @property() placeholder = '';\n @property() helper = '';\n @property() name = '';\n @property({ type: Boolean, reflect: true }) required = false;\n @property({ type: Boolean, reflect: true }) disabled = false;\n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: Boolean, reflect: true }) success = false;\n @property({ type: Boolean, attribute: 'show-strength' }) showStrength = false;\n @property({ type: Number, attribute: 'min-length' }) minLength = 0;\n\n @state() private _visible = false;\n\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('value')) {\n this._internals?.setFormValue(this.value);\n if (this.required && !this.value) {\n this._internals?.setValidity({ valueMissing: true }, 'Password is required');\n } else if (this.minLength > 0 && this.value.length < this.minLength) {\n this._internals?.setValidity({ tooShort: true }, `Minimum length is ${this.minLength}`);\n } else {\n this._internals?.setValidity({});\n }\n }\n }\n\n private _strengthScore(): number {\n const v = this.value;\n if (!v) return 0;\n let score = 0;\n if (v.length >= 8) score++;\n if (v.length >= 12) score++;\n if (/[a-z]/.test(v) && /[A-Z]/.test(v)) score++;\n if (/\\d/.test(v) && /[^a-zA-Z0-9]/.test(v)) score++;\n return Math.min(4, score);\n }\n\n private _strengthLabel(): string {\n const score = this._strengthScore();\n if (score === 0) return '';\n if (score === 1) return 'Weak';\n if (score === 2) return 'Fair';\n if (score === 3) return 'Good';\n return 'Strong';\n }\n\n private _handleInput(e: Event): void {\n this.value = (e.target as HTMLInputElement).value;\n this.dispatchEvent(new CustomEvent('cg-password-change', {\n detail: { value: this.value, strength: this._strengthScore() },\n bubbles: true,\n composed: true,\n }));\n }\n\n private _toggleVisibility(): void {\n this._visible = !this._visible;\n this.dispatchEvent(new CustomEvent('cg-password-toggle', {\n detail: { visible: this._visible },\n bubbles: true,\n composed: true,\n }));\n }\n\n override render() {\n const score = this._strengthScore();\n return html`\n <div class=\"wrap\">\n ${this.label ? html`<label>${this.label}${this.required ? html` <span style=\"color:var(--cg-color-status-error-text-default);\">*</span>` : nothing}</label>` : nothing}\n <div class=\"input-wrap\">\n <input\n type=${this._visible ? 'text' : 'password'}\n .value=${this.value}\n placeholder=${this.placeholder}\n name=${this.name}\n ?disabled=${this.disabled}\n ?required=${this.required}\n aria-invalid=${this.error ? 'true' : 'false'}\n aria-required=${this.required ? 'true' : 'false'}\n @input=${this._handleInput}\n />\n <button\n type=\"button\"\n class=\"toggle\"\n aria-label=${this._visible ? 'Hide password' : 'Show password'}\n aria-pressed=${this._visible ? 'true' : 'false'}\n @click=${this._toggleVisibility}\n >\n ${this._visible ? html`\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/>\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/>\n </svg>\n ` : html`\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n </svg>\n `}\n </button>\n </div>\n ${this.showStrength && this.value ? html`\n <div class=\"strength\" aria-hidden=\"true\">\n ${[1, 2, 3, 4].map(i => html`\n <div class=\"strength-bar ${i <= score ? 'active' : ''}\" data-level=${score}></div>\n `)}\n </div>\n <div class=\"strength-label\">${this._strengthLabel()}</div>\n ` : nothing}\n ${this.helper ? html`<div class=\"helper\">${this.helper}</div>` : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-password-input': CgPasswordInput;\n }\n}\n"],"names":["CgPasswordInput","LitElement","changed","v","score","e","html","nothing","i","hostBlock","reducedMotion","css","__decorateClass","property","state","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"cg-password-input.js","sources":["../../../src/components/cg-password-input/cg-password-input.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\n/**\n * @element cg-password-input\n * Password input with visibility toggle and optional strength meter.\n *\n * @example\n * ```html\n * <cg-password-input label=\"Password\" show-strength></cg-password-input>\n * ```\n *\n * @fires {CustomEvent<{value: string, strength?: number}>} cg-password-change\n * @fires {CustomEvent<{visible: boolean}>} cg-password-toggle\n */\n@customElement('cg-password-input')\nexport class CgPasswordInput extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host { display: block; }\n\n .wrap {\n position: relative;\n display: block;\n }\n\n label {\n display: block;\n margin-bottom: var(--cg-spacing-6);\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n color: var(--cg-color-surface-base-text);\n }\n\n .input-wrap {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n input {\n flex: 1;\n height: var(--cg-component-input-height-md);\n padding: 0 var(--cg-spacing-40) 0 var(--cg-spacing-12);\n background: var(--cg-color-input-background-default);\n border: var(--cg-border-width-50) solid var(--cg-color-input-border-default);\n border-radius: var(--cg-component-input-radius);\n color: var(--cg-color-input-text-default);\n font-family: inherit;\n font-size: var(--cg-font-size-base);\n outline: none;\n transition:\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n background var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n input::placeholder { color: var(--cg-color-input-text-placeholder); }\n input:hover:not(:disabled) {\n border-color: var(--cg-color-input-border-hover);\n }\n input:focus {\n border-color: var(--cg-color-input-border-focus);\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n }\n input:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n :host([error]) input {\n border-color: var(--cg-color-status-error-border-default);\n }\n :host([error]) input:focus { box-shadow: 0 0 0 3px var(--cg-shadow-focus-error); }\n :host([success]) input {\n border-color: var(--cg-color-status-success-border-default);\n }\n :host([success]) input:focus { box-shadow: 0 0 0 3px var(--cg-shadow-focus-success); }\n\n .toggle {\n position: absolute;\n right: var(--cg-spacing-8);\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n border: none;\n background: none;\n color: var(--cg-color-input-text-placeholder);\n cursor: pointer;\n border-radius: var(--cg-border-radius-50);\n transition: color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .toggle:hover:not(:disabled) {\n color: var(--cg-color-surface-base-text);\n background: var(--cg-color-action-tertiary-background-hover);\n }\n .toggle:disabled { opacity: 0.6; cursor: not-allowed; }\n .toggle: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 .toggle:active { transform: translateY(-50%) scale(var(--cg-interaction-press-scale)); }\n\n .helper {\n margin-top: var(--cg-spacing-6);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n }\n :host([error]) .helper { color: var(--cg-color-status-error-text-default); }\n :host([success]) .helper { color: var(--cg-color-status-success-text-default); }\n\n /* Strength meter */\n .strength {\n display: flex;\n gap: var(--cg-spacing-4);\n margin-top: var(--cg-spacing-12);\n }\n .strength-bar {\n flex: 1;\n height: var(--cg-spacing-4);\n background: var(--cg-color-surface-container-border);\n border-radius: var(--cg-border-radius-full);\n transition:\n background var(--cg-transition-duration-default) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n transform-origin: left;\n }\n .strength-bar.active {\n animation: barIn var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n }\n @keyframes barIn {\n from { transform: scaleX(0); }\n to { transform: scaleX(1); }\n }\n .strength-bar.active[data-level=\"1\"] { background: var(--cg-color-status-error-text-default); }\n .strength-bar.active[data-level=\"2\"] { background: var(--cg-color-status-warning-text-default); }\n .strength-bar.active[data-level=\"3\"] { background: var(--cg-color-status-warning-text-default); }\n .strength-bar.active[data-level=\"4\"] { background: var(--cg-color-status-success-text-default); }\n\n .strength-label {\n margin-top: var(--cg-spacing-6);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n }\n\n .required-marker { color: var(--cg-color-status-error-text-default); }\n `];\n\n static formAssociated = true;\n private _internals?: ElementInternals;\n\n constructor() {\n super();\n if (typeof this.attachInternals === 'function') {\n this._internals = this.attachInternals();\n }\n }\n\n @property() value = '';\n @property() label = '';\n @property() placeholder = '';\n @property() helper = '';\n @property() name = '';\n @property({ type: Boolean, reflect: true }) required = false;\n @property({ type: Boolean, reflect: true }) disabled = false;\n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: Boolean, reflect: true }) success = false;\n @property({ type: Boolean, attribute: 'show-strength' }) showStrength = false;\n @property({ type: Number, attribute: 'min-length' }) minLength = 0;\n\n @state() private _visible = false;\n\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('value') || changed.has('required') || changed.has('minLength')) {\n this._internals?.setFormValue(this.value);\n if (this.required && !this.value) {\n this._internals?.setValidity({ valueMissing: true }, 'Password is required');\n } else if (this.minLength > 0 && this.value.length < this.minLength) {\n this._internals?.setValidity({ tooShort: true }, `Minimum length is ${this.minLength}`);\n } else {\n this._internals?.setValidity({});\n }\n }\n }\n\n private _strengthScore(): number {\n const v = this.value;\n if (!v) return 0;\n let score = 0;\n if (v.length >= 8) score++;\n if (v.length >= 12) score++;\n if (/[a-z]/.test(v) && /[A-Z]/.test(v)) score++;\n if (/\\d/.test(v) && /[^a-zA-Z0-9]/.test(v)) score++;\n return Math.min(4, score);\n }\n\n private _strengthLabel(): string {\n const score = this._strengthScore();\n if (score === 0) return '';\n if (score === 1) return 'Weak';\n if (score === 2) return 'Fair';\n if (score === 3) return 'Good';\n return 'Strong';\n }\n\n private _handleInput(e: Event): void {\n this.value = (e.target as HTMLInputElement).value;\n this.dispatchEvent(new CustomEvent('cg-password-change', {\n detail: { value: this.value, strength: this._strengthScore() },\n bubbles: true,\n composed: true,\n }));\n }\n\n private _toggleVisibility(): void {\n this._visible = !this._visible;\n this.dispatchEvent(new CustomEvent('cg-password-toggle', {\n detail: { visible: this._visible },\n bubbles: true,\n composed: true,\n }));\n }\n\n override render() {\n const score = this._strengthScore();\n return html`\n <div class=\"wrap\">\n ${this.label ? html`<label for=\"input\">${this.label}${this.required ? html` <span class=\"required-marker\">*</span>` : nothing}</label>` : nothing}\n <div class=\"input-wrap\">\n <input\n id=\"input\"\n type=${this._visible ? 'text' : 'password'}\n .value=${this.value}\n placeholder=${this.placeholder}\n name=${this.name}\n ?disabled=${this.disabled}\n ?required=${this.required}\n aria-label=${this.label ? nothing : (this.placeholder || 'Password')}\n aria-describedby=${this.helper ? 'helper' : nothing}\n aria-invalid=${this.error ? 'true' : 'false'}\n aria-required=${this.required ? 'true' : 'false'}\n @input=${this._handleInput}\n />\n <button\n type=\"button\"\n class=\"toggle\"\n ?disabled=${this.disabled}\n aria-label=${this._visible ? 'Hide password' : 'Show password'}\n @click=${this._toggleVisibility}\n >\n ${this._visible ? html`\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/>\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/>\n </svg>\n ` : html`\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n </svg>\n `}\n </button>\n </div>\n ${this.showStrength && this.value ? html`\n <div class=\"strength\" aria-hidden=\"true\">\n ${[1, 2, 3, 4].map(i => html`\n <div class=\"strength-bar ${i <= score ? 'active' : ''}\" data-level=${score}></div>\n `)}\n </div>\n <div class=\"strength-label\" role=\"status\" aria-live=\"polite\">${this._strengthLabel()}</div>\n ` : nothing}\n ${this.helper ? html`<div class=\"helper\" id=\"helper\">${this.helper}</div>` : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-password-input': CgPasswordInput;\n }\n}\n"],"names":["CgPasswordInput","LitElement","changed","v","score","e","html","nothing","i","hostBlock","reducedMotion","css","__decorateClass","property","state","customElement"],"mappings":"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"}