@sd-angular/core 19.0.0-beta.97 → 19.0.0-beta.99

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 (178) hide show
  1. package/README.md +722 -716
  2. package/components/anchor/src/components/anchor/anchor.component.d.ts +5 -5
  3. package/components/anchor/src/components/anchor-nav/anchor-nav.component.d.ts +21 -0
  4. package/components/autoid-inspector/index.d.ts +8 -0
  5. package/components/autoid-inspector/src/autoid-inspector.component.d.ts +37 -0
  6. package/components/autoid-inspector/src/models/autoid-element.model.d.ts +22 -0
  7. package/components/autoid-inspector/src/models/autoid-export-format.model.d.ts +6 -0
  8. package/components/autoid-inspector/src/models/autoid-inspector-config.model.d.ts +8 -0
  9. package/components/autoid-inspector/src/services/autoid-audit.service.d.ts +19 -0
  10. package/components/autoid-inspector/src/services/autoid-export.service.d.ts +19 -0
  11. package/components/autoid-inspector/src/services/autoid-highlight.service.d.ts +12 -0
  12. package/components/autoid-inspector/src/services/autoid-scanner.service.d.ts +13 -0
  13. package/components/editor/src/editor.component.d.ts +2 -0
  14. package/components/index.d.ts +1 -0
  15. package/components/modal/src/modal.component.d.ts +1 -0
  16. package/components/side-drawer/src/side-drawer.component.d.ts +7 -3
  17. package/components/table/index.d.ts.map +1 -0
  18. package/components/table/sd-angular-core-components-table.d.ts.map +1 -0
  19. package/components/table/src/components/column-title/column-title.component.d.ts.map +1 -0
  20. package/components/table/src/components/command/desktop-command.component.d.ts +14 -0
  21. package/components/table/src/components/command/desktop-command.component.d.ts.map +1 -0
  22. package/components/table/src/components/command/pipes/command.pipe.d.ts +30 -0
  23. package/components/table/src/components/command/pipes/command.pipe.d.ts.map +1 -0
  24. package/components/table/src/components/command/pipes/filter.pipe.d.ts +35 -0
  25. package/components/table/src/components/command/pipes/filter.pipe.d.ts.map +1 -0
  26. package/components/table/src/components/config/config.component.d.ts +7 -14
  27. package/components/table/src/components/config/config.component.d.ts.map +1 -0
  28. package/components/table/src/components/desktop-cell/desktop-cell.component.d.ts +2 -2
  29. package/components/table/src/components/desktop-cell/desktop-cell.component.d.ts.map +1 -0
  30. package/components/table/src/components/desktop-cell/view/view.component.d.ts.map +1 -0
  31. package/components/table/src/components/filter/column-filter/column-filter.component.d.ts +36 -0
  32. package/components/table/src/components/filter/column-filter/column-filter.component.d.ts.map +1 -0
  33. package/components/table/src/components/filter/external-filter/external-filter.component.d.ts +27 -0
  34. package/components/table/src/components/filter/external-filter/external-filter.component.d.ts.map +1 -0
  35. package/components/table/src/components/filter/index.d.ts +3 -0
  36. package/components/table/src/components/filter/index.d.ts.map +1 -0
  37. package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts +42 -0
  38. package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts.map +1 -0
  39. package/components/table/src/components/index.d.ts +1 -2
  40. package/components/table/src/components/index.d.ts.map +1 -0
  41. package/components/table/src/components/popup-export/popup-export.component.d.ts.map +1 -0
  42. package/components/table/src/components/selector-action/action-filter.pipe.d.ts.map +1 -0
  43. package/components/table/src/components/selector-action/selector-action.component.d.ts +2 -4
  44. package/components/table/src/components/selector-action/selector-action.component.d.ts.map +1 -0
  45. package/components/table/src/configurations/index.d.ts.map +1 -0
  46. package/components/table/src/configurations/table.configuration.d.ts.map +1 -0
  47. package/components/table/src/directives/index.d.ts.map +1 -0
  48. package/components/table/src/directives/sd-column-resize.directive.d.ts.map +1 -0
  49. package/components/table/src/directives/sd-table-cell-def.directive.d.ts +4 -4
  50. package/components/table/src/directives/sd-table-cell-def.directive.d.ts.map +1 -0
  51. package/components/table/src/directives/sd-table-column-filter-def.directive.d.ts +2 -2
  52. package/components/table/src/directives/sd-table-column-filter-def.directive.d.ts.map +1 -0
  53. package/components/table/src/directives/sd-table-expand-def.directive.d.ts +3 -3
  54. package/components/table/src/directives/sd-table-expand-def.directive.d.ts.map +1 -0
  55. package/components/table/src/directives/sd-table-filter-def.directive.d.ts +2 -2
  56. package/components/table/src/directives/sd-table-filter-def.directive.d.ts.map +1 -0
  57. package/components/table/src/directives/sd-table-footer-def.directive.d.ts +2 -2
  58. package/components/table/src/directives/sd-table-footer-def.directive.d.ts.map +1 -0
  59. package/components/table/src/directives/sd-table-title-def.directive.d.ts +2 -2
  60. package/components/table/src/directives/sd-table-title-def.directive.d.ts.map +1 -0
  61. package/components/table/src/directives/sticky-shadow.directive.d.ts.map +1 -0
  62. package/components/table/src/models/index.d.ts.map +1 -0
  63. package/components/table/src/models/table-column.model.d.ts.map +1 -0
  64. package/components/table/src/models/table-command.model.d.ts.map +1 -0
  65. package/components/table/src/models/table-item.model.d.ts.map +1 -0
  66. package/components/table/src/models/table-option-config.model.d.ts.map +1 -0
  67. package/components/table/src/models/table-option-expand.model.d.ts.map +1 -0
  68. package/components/table/src/models/table-option-export.model.d.ts.map +1 -0
  69. package/components/table/src/models/table-option-group.model.d.ts.map +1 -0
  70. package/components/table/src/models/table-option-paginate.model.d.ts.map +1 -0
  71. package/components/table/src/models/table-option-reload.model.d.ts.map +1 -0
  72. package/components/table/src/models/table-option-selector.model.d.ts.map +1 -0
  73. package/components/table/src/models/table-option-sort.model.d.ts.map +1 -0
  74. package/components/table/src/models/table-option-style.model.d.ts.map +1 -0
  75. package/components/table/src/models/table-option-tree.model.d.ts.map +1 -0
  76. package/components/table/src/models/table-option.model.d.ts +13 -0
  77. package/components/table/src/models/table-option.model.d.ts.map +1 -0
  78. package/components/table/src/pipes/filter-values.pipe.d.ts.map +1 -0
  79. package/components/table/src/pipes/index.d.ts.map +1 -0
  80. package/components/table/src/pipes/sd-group.pipe.d.ts.map +1 -0
  81. package/components/table/src/pipes/sd-tree.pipe.d.ts.map +1 -0
  82. package/components/table/src/pipes/selection-disabled.pipe.d.ts.map +1 -0
  83. package/components/table/src/pipes/selection-visible-select-all.pipe.d.ts.map +1 -0
  84. package/components/table/src/pipes/selection-visible.pipe.d.ts.map +1 -0
  85. package/components/table/src/services/column-width.util.d.ts.map +1 -0
  86. package/components/table/src/services/config.service.d.ts.map +1 -0
  87. package/components/table/src/services/index.d.ts.map +1 -0
  88. package/components/table/src/services/table-export/table-export.service.d.ts.map +1 -0
  89. package/components/table/src/services/table-filter/table-filter.model.d.ts.map +1 -0
  90. package/components/table/src/services/table-filter/table-filter.service.d.ts.map +1 -0
  91. package/components/table/src/services/table-format/table-format.service.d.ts.map +1 -0
  92. package/components/table/src/services/tree/tree.util.d.ts.map +1 -0
  93. package/components/table/src/table.component.d.ts +10 -7
  94. package/components/table/src/table.component.d.ts.map +1 -0
  95. package/components/upload-file/src/upload-file.component.d.ts +3 -0
  96. package/fesm2022/sd-angular-core-components-anchor.mjs +23 -16
  97. package/fesm2022/sd-angular-core-components-anchor.mjs.map +1 -1
  98. package/fesm2022/sd-angular-core-components-autoid-inspector.mjs +585 -0
  99. package/fesm2022/sd-angular-core-components-autoid-inspector.mjs.map +1 -0
  100. package/fesm2022/sd-angular-core-components-button.mjs +2 -2
  101. package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
  102. package/fesm2022/sd-angular-core-components-editor.mjs +5 -2
  103. package/fesm2022/sd-angular-core-components-editor.mjs.map +1 -1
  104. package/fesm2022/sd-angular-core-components-form-generic.mjs +3 -3
  105. package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
  106. package/fesm2022/sd-angular-core-components-modal.mjs +3 -2
  107. package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
  108. package/fesm2022/sd-angular-core-components-side-drawer.mjs +17 -11
  109. package/fesm2022/sd-angular-core-components-side-drawer.mjs.map +1 -1
  110. package/fesm2022/sd-angular-core-components-table.mjs +631 -572
  111. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  112. package/fesm2022/sd-angular-core-components-upload-file.mjs +7 -2
  113. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  114. package/fesm2022/sd-angular-core-components.mjs +1 -0
  115. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  116. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +11 -3
  117. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  118. package/fesm2022/sd-angular-core-forms-checkbox.mjs +8 -2
  119. package/fesm2022/sd-angular-core-forms-checkbox.mjs.map +1 -1
  120. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs +12 -3
  121. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs.map +1 -1
  122. package/fesm2022/sd-angular-core-forms-chip.mjs +12 -3
  123. package/fesm2022/sd-angular-core-forms-chip.mjs.map +1 -1
  124. package/fesm2022/sd-angular-core-forms-date-range.mjs +13 -3
  125. package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
  126. package/fesm2022/sd-angular-core-forms-date.mjs +9 -3
  127. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  128. package/fesm2022/sd-angular-core-forms-datetime.mjs +9 -3
  129. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  130. package/fesm2022/sd-angular-core-forms-input-number.mjs +9 -3
  131. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  132. package/fesm2022/sd-angular-core-forms-input.mjs +13 -3
  133. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  134. package/fesm2022/sd-angular-core-forms-models.mjs +65 -2
  135. package/fesm2022/sd-angular-core-forms-models.mjs.map +1 -1
  136. package/fesm2022/sd-angular-core-forms-radio.mjs +8 -3
  137. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  138. package/fesm2022/sd-angular-core-forms-select.mjs +11 -3
  139. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  140. package/fesm2022/sd-angular-core-forms-switch.mjs +8 -3
  141. package/fesm2022/sd-angular-core-forms-switch.mjs.map +1 -1
  142. package/fesm2022/sd-angular-core-forms-textarea.mjs +9 -3
  143. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  144. package/fesm2022/sd-angular-core-i18n.mjs +205 -20
  145. package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
  146. package/fesm2022/sd-angular-core-utilities-data-state.mjs +38 -0
  147. package/fesm2022/sd-angular-core-utilities-data-state.mjs.map +1 -0
  148. package/fesm2022/sd-angular-core-utilities.mjs +1 -0
  149. package/fesm2022/sd-angular-core-utilities.mjs.map +1 -1
  150. package/forms/autocomplete/src/autocomplete.component.d.ts +5 -0
  151. package/forms/checkbox/src/checkbox.component.d.ts +3 -0
  152. package/forms/chip/src/chip.component.d.ts +4 -0
  153. package/forms/chip-calendar/src/chip-calendar.component.d.ts +4 -0
  154. package/forms/date/src/date.component.d.ts +4 -0
  155. package/forms/date-range/src/date-range.component.d.ts +4 -0
  156. package/forms/datetime/src/datetime.component.d.ts +4 -0
  157. package/forms/input/src/input.component.d.ts +4 -0
  158. package/forms/input-number/src/input-number.component.d.ts +6 -2
  159. package/forms/models/index.d.ts +1 -0
  160. package/forms/models/src/form-control-state.d.ts +23 -0
  161. package/forms/radio/src/radio.component.d.ts +3 -0
  162. package/forms/select/src/select.component.d.ts +5 -0
  163. package/forms/switch/src/switch.component.d.ts +3 -0
  164. package/forms/textarea/src/textarea.component.d.ts +4 -0
  165. package/i18n/src/en.d.ts +39 -3
  166. package/package.json +49 -41
  167. package/sd-angular-core-19.0.0-beta.99.tgz +0 -0
  168. package/utilities/data-state/index.d.ts +1 -0
  169. package/utilities/data-state/src/data-state.d.ts +11 -0
  170. package/utilities/index.d.ts +1 -0
  171. package/components/anchor/src/components/anchor-vertical/anchor-vertical-list.component.d.ts +0 -18
  172. package/components/table/src/components/column-filter/column-filter.component.d.ts +0 -40
  173. package/components/table/src/components/desktop-command/desktop-command.component.d.ts +0 -15
  174. package/components/table/src/components/external-filter/external-filter.component.d.ts +0 -36
  175. package/components/table/src/pipes/command-disable.pipe.d.ts +0 -9
  176. package/components/table/src/pipes/command-filter.pipe.d.ts +0 -25
  177. package/components/table/src/pipes/command-title.pipe.d.ts +0 -9
  178. package/sd-angular-core-19.0.0-beta.97.tgz +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sd-angular-core-components-autoid-inspector.mjs","sources":["../../../projects/sd-angular/components/autoid-inspector/src/models/autoid-inspector-config.model.ts","../../../projects/sd-angular/components/autoid-inspector/src/services/autoid-scanner.service.ts","../../../projects/sd-angular/components/autoid-inspector/src/services/autoid-audit.service.ts","../../../projects/sd-angular/components/autoid-inspector/src/services/autoid-highlight.service.ts","../../../projects/sd-angular/components/autoid-inspector/src/services/autoid-export.service.ts","../../../projects/sd-angular/components/autoid-inspector/src/autoid-inspector.component.ts","../../../projects/sd-angular/components/autoid-inspector/src/autoid-inspector.component.html","../../../projects/sd-angular/components/autoid-inspector/sd-angular-core-components-autoid-inspector.ts"],"sourcesContent":["export interface SdAutoidInspectorConfig {\r\n /** Selector phụ thêm cần audit (mặc định component đã cover sd-* form + sd-button). */\r\n extraRequireSelectors?: string[];\r\n /** Root scan, mặc định document.body. */\r\n root?: HTMLElement;\r\n}\r\n\r\n/** Selector mặc định coi là phải có data-autoid. */\r\nexport const SD_AUTOID_DEFAULT_REQUIRE_SELECTORS: ReadonlyArray<string> = [\r\n 'sd-input',\r\n 'sd-input-number',\r\n 'sd-textarea',\r\n 'sd-select',\r\n 'sd-autocomplete',\r\n 'sd-checkbox',\r\n 'sd-radio',\r\n 'sd-switch',\r\n 'sd-date',\r\n 'sd-datetime',\r\n 'sd-date-range',\r\n 'sd-chip',\r\n 'sd-chip-calendar',\r\n 'sd-button',\r\n];\r\n","import { Injectable } from '@angular/core';\r\nimport { SdAutoidElement } from '../models/autoid-element.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SdAutoidScannerService {\r\n /** Quét toàn bộ element có [data-autoid] trong root, gắn thông tin name/tag/value/xpath. */\r\n scan(root: HTMLElement = document.body): SdAutoidElement[] {\r\n const nodes = root.querySelectorAll<HTMLElement>('[data-autoid]');\r\n const dupCount: Record<string, number> = {};\r\n nodes.forEach(n => {\r\n const id = n.getAttribute('data-autoid');\r\n if (!id) return;\r\n dupCount[id] = (dupCount[id] ?? 0) + 1;\r\n });\r\n\r\n const result: SdAutoidElement[] = [];\r\n let stt = 1;\r\n nodes.forEach(node => {\r\n const autoid = node.getAttribute('data-autoid');\r\n if (!autoid) return;\r\n result.push({\r\n stt: stt++,\r\n name: this.resolveName(node),\r\n autoid,\r\n tag: this.resolveSdTag(node),\r\n value: this.resolveValue(node),\r\n xpath: `//*[@data-autoid=\"${autoid}\"]`,\r\n duplicate: dupCount[autoid] > 1,\r\n });\r\n });\r\n return result;\r\n }\r\n\r\n /** Group element theo autoid để consumer lấy duplicate map. */\r\n groupByAutoid(elements: SdAutoidElement[]): Record<string, SdAutoidElement[]> {\r\n const map: Record<string, SdAutoidElement[]> = {};\r\n for (const el of elements) {\r\n (map[el.autoid] ??= []).push(el);\r\n }\r\n return map;\r\n }\r\n\r\n private resolveName(node: HTMLElement): string {\r\n if (node.id) {\r\n // CSS.escape phòng id chứa ký tự đặc biệt làm vỡ selector.\r\n const sel = typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(node.id) : node.id;\r\n const label = document.querySelector(`label[for=\"${sel}\"]`);\r\n const text = label?.textContent?.trim();\r\n if (text) return text;\r\n }\r\n return node.getAttribute('aria-label')?.trim()\r\n ?? node.getAttribute('placeholder')?.trim()\r\n ?? node.getAttribute('title')?.trim()\r\n ?? '';\r\n }\r\n\r\n private resolveSdTag(node: HTMLElement): string {\r\n let cur: HTMLElement | null = node;\r\n while (cur) {\r\n const tag = cur.tagName.toLowerCase();\r\n if (tag.startsWith('sd-')) return tag;\r\n cur = cur.parentElement;\r\n }\r\n return node.tagName.toLowerCase();\r\n }\r\n\r\n private resolveValue(node: HTMLElement): string {\r\n const input = node as HTMLInputElement;\r\n if (typeof input.value === 'string' && input.value) return input.value;\r\n return (node.textContent ?? '').trim().slice(0, 80);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SdAutoidElement, SdAutoidAuditResult, SdAutoidMissing } from '../models/autoid-element.model';\r\nimport { SD_AUTOID_DEFAULT_REQUIRE_SELECTORS } from '../models/autoid-inspector-config.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SdAutoidAuditService {\r\n /**\r\n * Audit kết quả scan + DOM:\r\n * - duplicates: map autoid → count khi count > 1\r\n * - missing: element khớp selector yêu cầu nhưng KHÔNG có [data-autoid]\r\n */\r\n audit(\r\n elements: SdAutoidElement[],\r\n options: { requireSelectors?: ReadonlyArray<string>; root?: HTMLElement } = {}\r\n ): SdAutoidAuditResult {\r\n const requireSelectors = options.requireSelectors ?? SD_AUTOID_DEFAULT_REQUIRE_SELECTORS;\r\n const root = options.root ?? document.body;\r\n\r\n const duplicates: Record<string, number> = {};\r\n for (const el of elements) {\r\n if (el.duplicate) {\r\n duplicates[el.autoid] = (duplicates[el.autoid] ?? 0) + 1;\r\n }\r\n }\r\n\r\n const missing = this.findMissing(root, requireSelectors);\r\n\r\n return {\r\n total: elements.length,\r\n duplicates,\r\n duplicateCount: Object.keys(duplicates).length,\r\n missing,\r\n missingCount: missing.length,\r\n };\r\n }\r\n\r\n private findMissing(root: HTMLElement, selectors: ReadonlyArray<string>): SdAutoidMissing[] {\r\n if (!selectors.length) return [];\r\n const joined = selectors.join(',');\r\n const nodes = root.querySelectorAll<HTMLElement>(joined);\r\n const missing: SdAutoidMissing[] = [];\r\n\r\n nodes.forEach(node => {\r\n // Coi là missing khi element + mọi descendant đều không có data-autoid.\r\n // Lý do: sd-button render thành <button data-autoid=\"...\"> bên trong host\r\n // <sd-button>. Nếu chỉ check chính host sẽ false-positive cho mọi sd-button.\r\n if (node.hasAttribute('data-autoid')) return;\r\n if (node.querySelector('[data-autoid]')) return;\r\n\r\n missing.push({\r\n tag: node.tagName.toLowerCase(),\r\n selector: this.buildSelectorPath(node),\r\n outerHtmlPreview: this.shortHtml(node),\r\n nameHint: this.resolveNameHint(node),\r\n });\r\n });\r\n\r\n return missing;\r\n }\r\n\r\n private buildSelectorPath(node: HTMLElement): string {\r\n const parts: string[] = [];\r\n let cur: HTMLElement | null = node;\r\n let depth = 0;\r\n while (cur && depth < 4) {\r\n let part = cur.tagName.toLowerCase();\r\n if (cur.id) {\r\n part += `#${cur.id}`;\r\n parts.unshift(part);\r\n break;\r\n }\r\n const cls = (cur.getAttribute('class') ?? '').trim().split(/\\s+/).filter(Boolean).slice(0, 2);\r\n if (cls.length) part += `.${cls.join('.')}`;\r\n parts.unshift(part);\r\n cur = cur.parentElement;\r\n depth++;\r\n }\r\n return parts.join(' > ');\r\n }\r\n\r\n private shortHtml(node: HTMLElement): string {\r\n const html = node.outerHTML.replace(/\\s+/g, ' ');\r\n return html.length > 160 ? html.slice(0, 157) + '...' : html;\r\n }\r\n\r\n private resolveNameHint(node: HTMLElement): string {\r\n return node.getAttribute('label')\r\n ?? node.getAttribute('placeholder')\r\n ?? node.getAttribute('aria-label')\r\n ?? node.getAttribute('title')\r\n ?? '';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nconst ATTR = 'data-sd-autoid-highlight';\r\nconst SAVED_OUTLINE = 'data-sd-autoid-prev-outline';\r\nconst SAVED_OUTLINE_OFFSET = 'data-sd-autoid-prev-outline-offset';\r\nconst SAVED_BG = 'data-sd-autoid-prev-bg';\r\nconst SAVED_BORDER_RADIUS = 'data-sd-autoid-prev-radius';\r\n\r\n// Token màu lấy từ @sd-angular/core theme (--sd-*). Fallback hex áp dụng khi\r\n// consumer chưa import sd-core.scss. Dùng cùng bộ var với scss component để\r\n// nhất quán visual giữa highlight ok / duplicate / missing.\r\nconst COLOR_OK = 'var(--sd-success, #4CAF50)';\r\nconst COLOR_OK_BG = 'var(--sd-success-light, rgba(76, 175, 80, 0.12))';\r\nconst COLOR_DUP = 'var(--sd-error, #F82C13)';\r\nconst COLOR_DUP_BG = 'var(--sd-error-light, rgba(248, 44, 19, 0.12))';\r\nconst COLOR_MISSING = 'var(--sd-warning, #FF9600)';\r\nconst COLOR_MISSING_BG = 'var(--sd-warning-light, rgba(255, 150, 0, 0.12))';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SdAutoidHighlightService {\r\n /** Apply outline cho mọi [data-autoid]: xanh nếu unique, đỏ nếu duplicate. Idempotent. */\r\n apply(root: HTMLElement = document.body): void {\r\n this.clear(root);\r\n const nodes = root.querySelectorAll<HTMLElement>('[data-autoid]');\r\n const count: Record<string, number> = {};\r\n nodes.forEach(n => {\r\n const id = n.getAttribute('data-autoid');\r\n if (!id) return;\r\n count[id] = (count[id] ?? 0) + 1;\r\n });\r\n\r\n // Để tránh apply 2 lần lên cùng 1 target khi nhiều [data-autoid] cùng\r\n // chia sẻ 1 sd-* host (vd 2 input lồng trong 1 sd-date-range).\r\n const visited = new Set<HTMLElement>();\r\n\r\n nodes.forEach(node => {\r\n const id = node.getAttribute('data-autoid');\r\n if (!id) return;\r\n\r\n // Highlight HOST sd-* (giống applyMissing) — outline ôm trọn card,\r\n // không hiển thị lệch trên input con / label fragment. Fallback về\r\n // chính node khi không tìm thấy sd-* ancestor (vd native button).\r\n const target = this.#resolveTarget(node);\r\n if (visited.has(target)) return;\r\n visited.add(target);\r\n\r\n const isDup = count[id] > 1;\r\n this.#paint(\r\n target,\r\n isDup ? COLOR_DUP : COLOR_OK,\r\n isDup ? COLOR_DUP_BG : COLOR_OK_BG,\r\n 'solid',\r\n isDup ? 'duplicate' : 'ok'\r\n );\r\n });\r\n }\r\n\r\n /** Highlight tập element không có autoid (missing) bằng outline cam dashed. */\r\n applyMissing(nodes: HTMLElement[]): void {\r\n nodes.forEach(node => {\r\n if (node.hasAttribute(ATTR)) return;\r\n this.#paint(node, COLOR_MISSING, COLOR_MISSING_BG, 'dashed', 'missing');\r\n });\r\n }\r\n\r\n /** Restore inline style như trước khi apply. */\r\n clear(root: HTMLElement = document.body): void {\r\n const nodes = root.querySelectorAll<HTMLElement>(`[${ATTR}]`);\r\n nodes.forEach(node => {\r\n node.style.outline = node.getAttribute(SAVED_OUTLINE) ?? '';\r\n node.style.outlineOffset = node.getAttribute(SAVED_OUTLINE_OFFSET) ?? '';\r\n node.style.backgroundColor = node.getAttribute(SAVED_BG) ?? '';\r\n node.style.borderRadius = node.getAttribute(SAVED_BORDER_RADIUS) ?? '';\r\n node.removeAttribute(SAVED_OUTLINE);\r\n node.removeAttribute(SAVED_OUTLINE_OFFSET);\r\n node.removeAttribute(SAVED_BG);\r\n node.removeAttribute(SAVED_BORDER_RADIUS);\r\n node.removeAttribute(ATTR);\r\n });\r\n }\r\n\r\n // ==========================================\r\n // HELPERS\r\n // ==========================================\r\n #resolveTarget(node: HTMLElement): HTMLElement {\r\n let cur: HTMLElement | null = node;\r\n while (cur) {\r\n if (cur.tagName.toLowerCase().startsWith('sd-')) return cur;\r\n cur = cur.parentElement;\r\n }\r\n return node;\r\n }\r\n\r\n #paint(\r\n node: HTMLElement,\r\n color: string,\r\n bg: string,\r\n style: 'solid' | 'dashed',\r\n marker: 'ok' | 'duplicate' | 'missing'\r\n ): void {\r\n // Backup full style cần restore để clear() đưa về nguyên trạng.\r\n node.setAttribute(SAVED_OUTLINE, node.style.outline ?? '');\r\n node.setAttribute(SAVED_OUTLINE_OFFSET, node.style.outlineOffset ?? '');\r\n node.setAttribute(SAVED_BG, node.style.backgroundColor ?? '');\r\n node.setAttribute(SAVED_BORDER_RADIUS, node.style.borderRadius ?? '');\r\n\r\n node.style.outline = `2px ${style} ${color}`;\r\n // outline-offset 2px tránh đè lên border của host (mat-form-field, button)\r\n // → highlight nằm gọn ngoài card thay vì cắt vào nội dung.\r\n node.style.outlineOffset = '2px';\r\n node.style.backgroundColor = bg;\r\n // Bo nhẹ để outline trông sạch trên host bo góc sẵn.\r\n if (!node.style.borderRadius) {\r\n node.style.borderRadius = '6px';\r\n }\r\n node.setAttribute(ATTR, marker);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SdAutoidElement } from '../models/autoid-element.model';\r\nimport { SdAutoidExportMeta } from '../models/autoid-export-format.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SdAutoidExportService {\r\n toJson(elements: SdAutoidElement[]): string {\r\n return JSON.stringify(elements, null, 2);\r\n }\r\n\r\n toCsv(elements: SdAutoidElement[]): string {\r\n const header = 'STT,name,autoid,tag,value,xpath';\r\n const rows = elements.map(el =>\r\n [el.stt, this.q(el.name), this.q(el.autoid), this.q(el.tag), this.q(el.value), this.q(el.xpath)].join(',')\r\n );\r\n return [header, ...rows].join('\\n') + '\\n';\r\n }\r\n\r\n /** POM TypeScript skeleton — copy ngay vào file Playwright/Cypress. */\r\n toMarkdownPom(elements: SdAutoidElement[], meta: SdAutoidExportMeta): string {\r\n const className = this.toPascal(meta.pageTitle || 'AutoGenerated') + 'Page';\r\n const lines: string[] = [];\r\n lines.push(`# ${className}`);\r\n lines.push('');\r\n lines.push(`- Page: \\`${meta.pageUrl}\\``);\r\n lines.push(`- Generated: \\`${meta.timestamp}\\``);\r\n lines.push('');\r\n lines.push('```ts');\r\n lines.push(`export class ${className} {`);\r\n for (const el of elements) {\r\n const propName = this.toCamel(el.autoid);\r\n const nameHint = el.name ? ` ${el.name} —` : '';\r\n lines.push(` /** ${el.tag}${nameHint} */`);\r\n lines.push(` readonly ${propName} = '${el.xpath}';`);\r\n }\r\n lines.push('}');\r\n lines.push('```');\r\n lines.push('');\r\n return lines.join('\\n');\r\n }\r\n\r\n /** Markdown reference table, group theo tag sd-*. */\r\n toMarkdownTable(elements: SdAutoidElement[], meta: SdAutoidExportMeta): string {\r\n const lines: string[] = [];\r\n lines.push('# AutoId Reference');\r\n lines.push('');\r\n lines.push(`- Page: \\`${meta.pageUrl}\\``);\r\n lines.push(`- Generated: \\`${meta.timestamp}\\``);\r\n lines.push('');\r\n\r\n const groups = new Map<string, SdAutoidElement[]>();\r\n for (const el of elements) {\r\n const key = el.tag || '(no-tag)';\r\n if (!groups.has(key)) groups.set(key, []);\r\n groups.get(key)!.push(el);\r\n }\r\n\r\n const sortedTags = [...groups.keys()].sort();\r\n for (const tag of sortedTags) {\r\n lines.push(`## ${tag}`);\r\n lines.push('');\r\n lines.push('| name | autoid | xpath | duplicate |');\r\n lines.push('|------|--------|-------|-----------|');\r\n for (const el of groups.get(tag)!) {\r\n lines.push(`| ${this.mdCell(el.name)} | \\`${el.autoid}\\` | \\`${el.xpath}\\` | ${el.duplicate ? '⚠️' : ''} |`);\r\n }\r\n lines.push('');\r\n }\r\n return lines.join('\\n');\r\n }\r\n\r\n download(content: string, filename: string, mime: string): void {\r\n const blob = new Blob([content], { type: mime });\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = filename;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n URL.revokeObjectURL(url);\r\n }\r\n\r\n async copyToClipboard(content: string): Promise<void> {\r\n if (navigator.clipboard?.writeText) {\r\n await navigator.clipboard.writeText(content);\r\n return;\r\n }\r\n // Fallback cho browser cũ / context không có clipboard API.\r\n const ta = document.createElement('textarea');\r\n ta.value = content;\r\n ta.style.position = 'fixed';\r\n ta.style.opacity = '0';\r\n document.body.appendChild(ta);\r\n ta.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(ta);\r\n }\r\n\r\n private q(v: string | number): string {\r\n const s = String(v ?? '').replace(/\"/g, '\"\"');\r\n return `\"${s}\"`;\r\n }\r\n\r\n private mdCell(s: string): string {\r\n return (s || '').replace(/\\|/g, '\\\\|').replace(/\\n/g, ' ');\r\n }\r\n\r\n private toCamel(autoid: string): string {\r\n const parts = autoid.split(/[-_]/).filter(Boolean);\r\n return parts.map((p, i) => (i === 0 ? p : p[0].toUpperCase() + p.slice(1))).join('');\r\n }\r\n\r\n private toPascal(title: string): string {\r\n return title\r\n .split(/[^a-zA-Z0-9]+/)\r\n .filter(Boolean)\r\n .map(p => p[0].toUpperCase() + p.slice(1))\r\n .join('');\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n HostListener,\r\n inject,\r\n input,\r\n OnDestroy,\r\n signal,\r\n} from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { SdAutoidElement, SdAutoidAuditResult } from './models/autoid-element.model';\r\nimport {\r\n SdAutoidInspectorConfig,\r\n SD_AUTOID_DEFAULT_REQUIRE_SELECTORS,\r\n} from './models/autoid-inspector-config.model';\r\nimport { SdAutoidExportMeta } from './models/autoid-export-format.model';\r\nimport { SdAutoidScannerService } from './services/autoid-scanner.service';\r\nimport { SdAutoidAuditService } from './services/autoid-audit.service';\r\nimport { SdAutoidHighlightService } from './services/autoid-highlight.service';\r\nimport { SdAutoidExportService } from './services/autoid-export.service';\r\n\r\ntype Segment = 'audit' | 'elements' | 'export';\r\n\r\n@Component({\r\n selector: 'sd-autoid-inspector',\r\n templateUrl: './autoid-inspector.component.html',\r\n styleUrls: ['./autoid-inspector.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, MatIconModule, MatTooltipModule],\r\n})\r\nexport class SdAutoidInspector implements OnDestroy {\r\n // ==========================================\r\n // INPUTS\r\n // ==========================================\r\n enabled = input(true, { transform: booleanAttribute });\r\n config = input<SdAutoidInspectorConfig | undefined>(undefined);\r\n\r\n // ==========================================\r\n // STATE\r\n // ==========================================\r\n open = signal(false);\r\n segment = signal<Segment>('audit');\r\n filter = signal('');\r\n elements = signal<SdAutoidElement[]>([]);\r\n audit = signal<SdAutoidAuditResult | null>(null);\r\n copyOk = signal(false);\r\n // Default true để mở panel lần đầu là có highlight ngay. Đóng panel KHÔNG\r\n // tự tắt — user toggle qua nút trong tab Audit khi muốn nhìn DOM gốc.\r\n highlightOn = signal(true);\r\n // Ẩn tạm FAB — chỉ in-memory, reload trang sẽ hiện lại (theo thiết kế).\r\n dismissed = signal(false);\r\n\r\n filteredElements = computed(() => {\r\n const q = this.filter().trim().toLowerCase();\r\n if (!q) return this.elements();\r\n return this.elements().filter(\r\n el =>\r\n el.autoid.toLowerCase().includes(q) ||\r\n el.name.toLowerCase().includes(q) ||\r\n el.tag.toLowerCase().includes(q)\r\n );\r\n });\r\n\r\n // ==========================================\r\n // SERVICES\r\n // ==========================================\r\n #scanner = inject(SdAutoidScannerService);\r\n #auditSvc = inject(SdAutoidAuditService);\r\n #highlight = inject(SdAutoidHighlightService);\r\n #export = inject(SdAutoidExportService);\r\n\r\n // ==========================================\r\n // LIFECYCLE\r\n // ==========================================\r\n ngOnDestroy(): void {\r\n this.#highlight.clear(this.#root());\r\n }\r\n\r\n // ==========================================\r\n // ACTIONS\r\n // ==========================================\r\n togglePanel = (): void => {\r\n if (this.open()) {\r\n this.closePanel();\r\n } else {\r\n this.openPanel();\r\n }\r\n };\r\n\r\n openPanel = (): void => {\r\n if (!this.enabled()) return;\r\n this.refresh();\r\n this.open.set(true);\r\n };\r\n\r\n closePanel = (): void => {\r\n this.open.set(false);\r\n // Highlight được giữ lại để user vẫn thấy outline khi panel ẩn —\r\n // toggleHighlight trong tab Audit là cách duy nhất để clear.\r\n };\r\n\r\n refresh = (): void => {\r\n const root = this.#root();\r\n const elements = this.#scanner.scan(root);\r\n const result = this.#auditSvc.audit(elements, {\r\n root,\r\n requireSelectors: this.#requireSelectors(),\r\n });\r\n this.elements.set(elements);\r\n this.audit.set(result);\r\n this.#applyHighlightIfOn(result);\r\n };\r\n\r\n dismissFab = (event: Event): void => {\r\n event.stopPropagation();\r\n this.dismissed.set(true);\r\n if (this.open()) this.closePanel();\r\n };\r\n\r\n toggleHighlight = (): void => {\r\n const next = !this.highlightOn();\r\n this.highlightOn.set(next);\r\n if (next) {\r\n this.#applyHighlightIfOn(this.audit());\r\n } else {\r\n this.#highlight.clear(this.#root());\r\n }\r\n };\r\n\r\n setSegment = (seg: Segment): void => this.segment.set(seg);\r\n\r\n copyJson = async (): Promise<void> => {\r\n await this.#export.copyToClipboard(this.#export.toJson(this.elements()));\r\n this.#flashCopyOk();\r\n };\r\n\r\n copyXpath = async (autoid: string): Promise<void> => {\r\n await this.#export.copyToClipboard(`//*[@data-autoid=\"${autoid}\"]`);\r\n this.#flashCopyOk();\r\n };\r\n\r\n exportCsv = (): void => {\r\n this.#export.download(\r\n this.#export.toCsv(this.elements()),\r\n this.#filename('csv'),\r\n 'text/csv;charset=utf-8'\r\n );\r\n };\r\n\r\n exportJson = (): void => {\r\n this.#export.download(\r\n this.#export.toJson(this.elements()),\r\n this.#filename('json'),\r\n 'application/json'\r\n );\r\n };\r\n\r\n exportMdPom = (): void => {\r\n this.#export.download(\r\n this.#export.toMarkdownPom(this.elements(), this.#meta()),\r\n this.#filename('pom.md'),\r\n 'text/markdown'\r\n );\r\n };\r\n\r\n exportMdTable = (): void => {\r\n this.#export.download(\r\n this.#export.toMarkdownTable(this.elements(), this.#meta()),\r\n this.#filename('reference.md'),\r\n 'text/markdown'\r\n );\r\n };\r\n\r\n // ==========================================\r\n // KEYBOARD: Esc đóng panel\r\n // ==========================================\r\n @HostListener('document:keydown.escape')\r\n onEscape(): void {\r\n if (this.open()) this.closePanel();\r\n }\r\n\r\n // ==========================================\r\n // HELPERS\r\n // ==========================================\r\n #root(): HTMLElement {\r\n return this.config()?.root ?? document.body;\r\n }\r\n\r\n #requireSelectors(): ReadonlyArray<string> {\r\n const extra = this.config()?.extraRequireSelectors ?? [];\r\n return [...SD_AUTOID_DEFAULT_REQUIRE_SELECTORS, ...extra];\r\n }\r\n\r\n #highlightMissing(result: SdAutoidAuditResult): void {\r\n if (!result.missing.length) return;\r\n const root = this.#root();\r\n const selector = this.#requireSelectors().join(',');\r\n const all = Array.from(root.querySelectorAll<HTMLElement>(selector));\r\n const missingNodes = all.filter(\r\n n => !n.hasAttribute('data-autoid') && !n.querySelector('[data-autoid]')\r\n );\r\n this.#highlight.applyMissing(missingNodes);\r\n }\r\n\r\n #applyHighlightIfOn(result: SdAutoidAuditResult | null): void {\r\n if (!this.highlightOn()) return;\r\n const root = this.#root();\r\n this.#highlight.apply(root);\r\n if (result) this.#highlightMissing(result);\r\n }\r\n\r\n #meta(): SdAutoidExportMeta {\r\n return {\r\n pageUrl: window.location.pathname + window.location.search,\r\n pageTitle: document.title || 'Page',\r\n timestamp: new Date().toISOString(),\r\n };\r\n }\r\n\r\n #filename(ext: string): string {\r\n const slug = (document.title || 'autoid')\r\n .toLowerCase()\r\n .replace(/[^a-z0-9]+/g, '-')\r\n .replace(/^-|-$/g, '');\r\n return `${slug || 'autoid'}-${Date.now()}.${ext}`;\r\n }\r\n\r\n #flashCopyOk(): void {\r\n this.copyOk.set(true);\r\n setTimeout(() => this.copyOk.set(false), 1200);\r\n }\r\n}\r\n","@if (enabled() && !dismissed()) {\r\n <div class=\"sd-autoid-inspector__fab-wrap\">\r\n <button\r\n type=\"button\"\r\n class=\"sd-autoid-inspector__fab\"\r\n data-autoid=\"sd-autoid-inspector-fab\"\r\n [matTooltip]=\"open() ? 'Đóng AutoId Inspector' : 'Mở AutoId Inspector'\"\r\n matTooltipPosition=\"left\"\r\n (click)=\"togglePanel()\">\r\n <mat-icon>{{ open() ? 'close' : 'tag' }}</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"sd-autoid-inspector__fab-dismiss\"\r\n matTooltip=\"Ẩn tạm — reload trang để hiện lại\"\r\n matTooltipPosition=\"left\"\r\n aria-label=\"Ẩn tạm FAB\"\r\n (click)=\"dismissFab($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n}\r\n\r\n@if (enabled() && open()) {\r\n <div class=\"sd-autoid-inspector__backdrop\" (click)=\"closePanel()\"></div>\r\n <section class=\"sd-autoid-inspector__panel\" role=\"dialog\" aria-label=\"AutoId Inspector\">\r\n <header class=\"sd-autoid-inspector__header\">\r\n <div class=\"sd-autoid-inspector__segments\">\r\n <button\r\n type=\"button\"\r\n [class.is-active]=\"segment() === 'audit'\"\r\n (click)=\"setSegment('audit')\">\r\n Audit\r\n @if (audit(); as a) {\r\n <span class=\"sd-autoid-inspector__badge\" [class.is-warn]=\"a.missingCount + a.duplicateCount > 0\">\r\n {{ a.missingCount + a.duplicateCount }}\r\n </span>\r\n }\r\n </button>\r\n <button\r\n type=\"button\"\r\n [class.is-active]=\"segment() === 'elements'\"\r\n (click)=\"setSegment('elements')\">\r\n Elements\r\n <span class=\"sd-autoid-inspector__badge\">{{ elements().length }}</span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n [class.is-active]=\"segment() === 'export'\"\r\n (click)=\"setSegment('export')\">\r\n Export\r\n </button>\r\n </div>\r\n <div class=\"sd-autoid-inspector__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"sd-autoid-inspector__icon-btn\"\r\n matTooltip=\"Quét lại\"\r\n (click)=\"refresh()\">\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"sd-autoid-inspector__close-btn\"\r\n matTooltip=\"Đóng\"\r\n aria-label=\"Đóng panel\"\r\n (click)=\"closePanel()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </header>\r\n\r\n @if (copyOk()) {\r\n <div class=\"sd-autoid-inspector__toast\">Đã copy ✓</div>\r\n }\r\n\r\n <div class=\"sd-autoid-inspector__body\">\r\n @switch (segment()) {\r\n @case ('audit') {\r\n <ng-container *ngTemplateOutlet=\"auditTpl\"></ng-container>\r\n }\r\n @case ('elements') {\r\n <ng-container *ngTemplateOutlet=\"elementsTpl\"></ng-container>\r\n }\r\n @case ('export') {\r\n <ng-container *ngTemplateOutlet=\"exportTpl\"></ng-container>\r\n }\r\n }\r\n </div>\r\n </section>\r\n\r\n <ng-template #auditTpl>\r\n @if (audit(); as a) {\r\n <div class=\"sd-autoid-inspector__audit-toolbar\">\r\n <button\r\n type=\"button\"\r\n class=\"sd-autoid-inspector__toggle\"\r\n [class.is-on]=\"highlightOn()\"\r\n (click)=\"toggleHighlight()\">\r\n <mat-icon>{{ highlightOn() ? 'visibility' : 'visibility_off' }}</mat-icon>\r\n <span>Highlight DOM</span>\r\n <span class=\"sd-autoid-inspector__toggle-state\">{{ highlightOn() ? 'ON' : 'OFF' }}</span>\r\n </button>\r\n </div>\r\n <div class=\"sd-autoid-inspector__summary\">\r\n <div class=\"sd-autoid-inspector__stat is-info\">\r\n <div class=\"sd-autoid-inspector__stat-value\">{{ a.total }}</div>\r\n <div class=\"sd-autoid-inspector__stat-label\">Tổng autoid</div>\r\n </div>\r\n <div class=\"sd-autoid-inspector__stat\" [class.is-error]=\"a.duplicateCount > 0\" [class.is-success]=\"a.duplicateCount === 0\">\r\n <div class=\"sd-autoid-inspector__stat-value\">{{ a.duplicateCount }}</div>\r\n <div class=\"sd-autoid-inspector__stat-label\">Trùng</div>\r\n </div>\r\n <div class=\"sd-autoid-inspector__stat\" [class.is-warning]=\"a.missingCount > 0\" [class.is-success]=\"a.missingCount === 0\">\r\n <div class=\"sd-autoid-inspector__stat-value\">{{ a.missingCount }}</div>\r\n <div class=\"sd-autoid-inspector__stat-label\">Thiếu</div>\r\n </div>\r\n </div>\r\n\r\n @if (a.duplicateCount > 0) {\r\n <h4 class=\"sd-autoid-inspector__section-title\">\r\n <mat-icon class=\"is-error\">error_outline</mat-icon>\r\n Autoid bị trùng\r\n </h4>\r\n <div class=\"sd-autoid-inspector__table-wrap\">\r\n <table class=\"sd-autoid-inspector__table\">\r\n <thead>\r\n <tr><th>Autoid</th><th>Số lần</th></tr>\r\n </thead>\r\n <tbody>\r\n @for (entry of a.duplicates | keyvalue; track entry.key) {\r\n <tr class=\"is-error\">\r\n <td><code>{{ entry.key }}</code></td>\r\n <td>{{ entry.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n\r\n @if (a.missingCount > 0) {\r\n <h4 class=\"sd-autoid-inspector__section-title\">\r\n <mat-icon class=\"is-warning\">warning_amber</mat-icon>\r\n Element thiếu autoid\r\n </h4>\r\n <div class=\"sd-autoid-inspector__table-wrap\">\r\n <table class=\"sd-autoid-inspector__table\">\r\n <thead>\r\n <tr><th>Tag</th><th>Name hint</th><th>Selector</th></tr>\r\n </thead>\r\n <tbody>\r\n @for (m of a.missing; track $index) {\r\n <tr class=\"is-warning\">\r\n <td><code>{{ m.tag }}</code></td>\r\n <td>{{ m.nameHint }}</td>\r\n <td><code>{{ m.selector }}</code></td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n\r\n @if (a.duplicateCount === 0 && a.missingCount === 0) {\r\n <div class=\"sd-autoid-inspector__success-card\">\r\n <mat-icon>check_circle</mat-icon>\r\n <div>\r\n <strong>Không có element thiếu hoặc trùng autoid.</strong>\r\n <small>Trang đã đạt chuẩn convention autoid.</small>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </ng-template>\r\n\r\n <ng-template #elementsTpl>\r\n <div class=\"sd-autoid-inspector__filter\">\r\n <mat-icon>search</mat-icon>\r\n <input\r\n type=\"text\"\r\n placeholder=\"Lọc theo autoid / name / tag\"\r\n [ngModel]=\"filter()\"\r\n (ngModelChange)=\"filter.set($event)\"/>\r\n @if (filter()) {\r\n <button\r\n type=\"button\"\r\n class=\"sd-autoid-inspector__icon-btn\"\r\n matTooltip=\"Xoá filter\"\r\n (click)=\"filter.set('')\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div class=\"sd-autoid-inspector__table-wrap\">\r\n <table class=\"sd-autoid-inspector__table\">\r\n <thead>\r\n <tr>\r\n <th class=\"is-num\">STT</th>\r\n <th>Name</th>\r\n <th>Autoid</th>\r\n <th>Tag</th>\r\n <th>Value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (el of filteredElements(); track el.autoid + $index) {\r\n <tr [class.is-error]=\"el.duplicate\">\r\n <td class=\"is-num\">{{ el.stt }}</td>\r\n <td>{{ el.name || '—' }}</td>\r\n <td>\r\n <div class=\"sd-autoid-inspector__autoid-cell\">\r\n <code>{{ el.autoid }}</code>\r\n <button\r\n type=\"button\"\r\n class=\"sd-autoid-inspector__icon-btn is-primary\"\r\n matTooltip=\"Copy xpath\"\r\n (click)=\"copyXpath(el.autoid)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n <td><span class=\"sd-autoid-inspector__tag-chip\">{{ el.tag }}</span></td>\r\n <td class=\"sd-autoid-inspector__value\" [matTooltip]=\"el.value || ''\">\r\n {{ el.value || '—' }}\r\n </td>\r\n </tr>\r\n } @empty {\r\n <tr><td colspan=\"5\" class=\"sd-autoid-inspector__empty\">Không có kết quả.</td></tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #exportTpl>\r\n <div class=\"sd-autoid-inspector__export-grid\">\r\n <button type=\"button\" matTooltip=\"Copy JSON vào clipboard\" (click)=\"copyJson()\">\r\n <mat-icon>content_copy</mat-icon>\r\n <span>Copy JSON</span>\r\n <small>clipboard</small>\r\n </button>\r\n <button type=\"button\" matTooltip=\"Tải file JSON\" (click)=\"exportJson()\">\r\n <mat-icon>download</mat-icon>\r\n <span>JSON</span>\r\n <small>.json</small>\r\n </button>\r\n <button type=\"button\" matTooltip=\"Tải file CSV\" (click)=\"exportCsv()\">\r\n <mat-icon>table_view</mat-icon>\r\n <span>CSV</span>\r\n <small>.csv</small>\r\n </button>\r\n <button type=\"button\" matTooltip=\"Tải MD POM skeleton — cho AI viết auto-test\" (click)=\"exportMdPom()\">\r\n <mat-icon>code</mat-icon>\r\n <span>MD POM</span>\r\n <small>AI test</small>\r\n </button>\r\n <button type=\"button\" matTooltip=\"Tải MD reference table — group theo tag sd-*\" (click)=\"exportMdTable()\">\r\n <mat-icon>view_list</mat-icon>\r\n <span>MD Table</span>\r\n <small>reference</small>\r\n </button>\r\n </div>\r\n </ng-template>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -98,7 +98,7 @@ class SdButton extends SdBaseSecureComponent {
98
98
  this.#subscription.unsubscribe();
99
99
  }
100
100
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
101
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdButton, isStandalone: true, selector: "sd-button", inputs: { autoIdInput: { classPropertyName: "autoIdInput", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fontSet: { classPropertyName: "fontSet", publicName: "fontSet", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: true, isRequired: false, transformFunction: null }, suffixIcon: { classPropertyName: "suffixIcon", publicName: "suffixIcon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: false, transformFunction: null }, htmlType: { classPropertyName: "htmlType", publicName: "htmlType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { click: "click" }, host: { properties: { "class.sd-disabled": "disabled()", "class.sd-loading": "loading()", "class.sd-block": "block()", "attr.disabled": "disabled() ? \"true\" : null" } }, usesInheritance: true, ngImport: i0, template: "@let btnType = type();\r\n@let btnLoad = loading();\r\n@let btnTitle = title();\r\n@let pIcon = prefixIcon();\r\n@let sIcon = suffixIcon();\r\n@let fSet = fontSet();\r\n@let hType = htmlType();\r\n\r\n@if (btnType === 'fill') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-fill\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'light') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-light\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'outline') {\r\n <button\r\n mat-stroked-button\r\n class=\"c-button c-outline\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'link') {\r\n <button\r\n mat-button\r\n class=\"c-button c-link\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n}\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"c-button-content-wrapper\">\r\n @if (btnLoad) {\r\n <mat-spinner mode=\"indeterminate\" diameter=\"18\" strokeWidth=\"2\" class=\"c-spinner\"></mat-spinner>\r\n } @else if (pIcon) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-prefix\">{{ pIcon }}</mat-icon>\r\n }\r\n\r\n @if (btnTitle) {\r\n <span class=\"c-title\" [class.ml-8]=\"btnLoad || pIcon\" [class.mr-8]=\"sIcon && !btnLoad\">\r\n {{ btnTitle }}\r\n </span>\r\n }\r\n\r\n @if (sIcon && !btnLoad) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-suffix\">{{ sIcon }}</mat-icon>\r\n }\r\n\r\n @if (!btnTitle && !pIcon && !btnLoad && sIcon) {\r\n <mat-icon [fontSet]=\"fSet\">{{ sIcon }}</mat-icon>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host{display:inline-block;pointer-events:auto}:host.sd-disabled{cursor:not-allowed}:host.sd-loading{cursor:wait}:host.sd-block{display:block;width:100%}:host.sd-block button{width:100%}:host ::ng-deep button.c-button{pointer-events:auto;min-width:auto}:host ::ng-deep button.c-button .mat-button-wrapper,:host ::ng-deep button.c-button .mdc-button__label{display:flex;align-items:center;justify-content:center;width:100%}:host ::ng-deep button.c-button[disabled],:host ::ng-deep button.c-button.mat-button-disabled{pointer-events:none;color:#a6a6a6!important;background-color:#e9e9e9!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;height:32px;line-height:20px!important;padding:2px 12px!important;font-weight:400}:host ::ng-deep button.c-button.c-sm mat-icon{height:16px!important;width:16px!important;font-size:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-md{font-size:16px;height:40px;line-height:20px;padding:2px 16px!important;font-weight:400}:host ::ng-deep button.c-button.c-md mat-icon{height:20px!important;width:20px!important;font-size:20px!important}:host ::ng-deep button.c-button.c-md.c-square{width:40px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;line-height:20px!important;padding:2px 16px!important;height:48px}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-disabled{opacity:.5}:host ::ng-deep button.c-button.c-block{width:100%!important}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-secondary{background-color:#000!important;color:#fff}:host ::ng-deep button.c-button.c-fill .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#fff!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary-light);color:var(--sd-primary)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info-light);color:var(--sd-info)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success-light);color:var(--sd-success)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning-light);color:var(--sd-warning)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error-light);color:var(--sd-error)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary{background-color:var(--sd-secondary-light);color:#000!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep .c-button-content-wrapper{display:flex;align-items:center;justify-content:center;width:100%;pointer-events:none}:host ::ng-deep .c-spinner{display:inline-block}:host.sd-loading ::ng-deep button.c-button{pointer-events:none;opacity:.85}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
101
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdButton, isStandalone: true, selector: "sd-button", inputs: { autoIdInput: { classPropertyName: "autoIdInput", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fontSet: { classPropertyName: "fontSet", publicName: "fontSet", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: true, isRequired: false, transformFunction: null }, suffixIcon: { classPropertyName: "suffixIcon", publicName: "suffixIcon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: false, transformFunction: null }, htmlType: { classPropertyName: "htmlType", publicName: "htmlType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { click: "click" }, host: { properties: { "class.sd-disabled": "disabled()", "class.sd-loading": "loading()", "class.sd-block": "block()", "attr.disabled": "disabled() ? \"true\" : null" } }, usesInheritance: true, ngImport: i0, template: "@let btnType = type();\r\n@let btnLoad = loading();\r\n@let btnTitle = title();\r\n@let pIcon = prefixIcon();\r\n@let sIcon = suffixIcon();\r\n@let fSet = fontSet();\r\n@let hType = htmlType();\r\n\r\n@if (btnType === 'fill') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-fill\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'light') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-light\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'outline') {\r\n <button\r\n mat-stroked-button\r\n class=\"c-button c-outline\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'link') {\r\n <button\r\n mat-button\r\n class=\"c-button c-link\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n}\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"c-button-content-wrapper\">\r\n @if (btnLoad) {\r\n <mat-spinner mode=\"indeterminate\" diameter=\"18\" strokeWidth=\"2\" class=\"c-spinner\"></mat-spinner>\r\n } @else if (pIcon) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-prefix\">{{ pIcon }}</mat-icon>\r\n }\r\n\r\n @if (btnTitle) {\r\n <span class=\"c-title\" [class.ml-8]=\"btnLoad || pIcon\" [class.mr-8]=\"sIcon && !btnLoad\">\r\n {{ btnTitle }}\r\n </span>\r\n }\r\n\r\n @if (sIcon && !btnLoad) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-suffix\">{{ sIcon }}</mat-icon>\r\n }\r\n\r\n @if (!btnTitle && !pIcon && !btnLoad && sIcon) {\r\n <mat-icon [fontSet]=\"fSet\">{{ sIcon }}</mat-icon>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host{display:inline-block;pointer-events:auto}:host.sd-disabled{cursor:not-allowed}:host.sd-loading{cursor:wait}:host.sd-block{display:block;width:100%}:host.sd-block button{width:100%}:host ::ng-deep button.c-button{pointer-events:auto;min-width:auto}:host ::ng-deep button.c-button .mat-button-wrapper,:host ::ng-deep button.c-button .mdc-button__label{display:flex;align-items:center;justify-content:center;width:100%}:host ::ng-deep button.c-button[disabled],:host ::ng-deep button.c-button.mat-button-disabled{pointer-events:none;color:#a6a6a6!important;background-color:#e9e9e9!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;height:32px;line-height:20px!important;padding:2px 12px!important;font-weight:400}:host ::ng-deep button.c-button.c-sm mat-icon{height:16px!important;width:16px!important;font-size:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-md{font-size:16px;height:40px;line-height:20px;padding:2px 16px!important;font-weight:400}:host ::ng-deep button.c-button.c-md mat-icon{height:20px!important;width:20px!important;font-size:20px!important}:host ::ng-deep button.c-button.c-md.c-square{width:40px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;line-height:20px!important;padding:2px 16px!important;height:48px}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-disabled{opacity:.5}:host ::ng-deep button.c-button.c-block{width:100%!important}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-secondary{background-color:#000!important;color:#fff}:host ::ng-deep button.c-button.c-fill .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#fff!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary-light);color:var(--sd-primary)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info-light);color:var(--sd-info)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success-light);color:var(--sd-success)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning-light);color:var(--sd-warning)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error-light);color:var(--sd-error)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary{background-color:var(--sd-secondary-light);color:#000!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep .c-button-content-wrapper{display:flex;align-items:center;justify-content:center;width:100%;pointer-events:none}:host ::ng-deep .c-spinner{display:inline-block}:host.sd-loading ::ng-deep button.c-button{pointer-events:none;opacity:.85}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
102
102
  }
103
103
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdButton, decorators: [{
104
104
  type: Component,
@@ -107,7 +107,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
107
107
  '[class.sd-loading]': 'loading()',
108
108
  '[class.sd-block]': 'block()',
109
109
  '[attr.disabled]': 'disabled() ? "true" : null',
110
- }, template: "@let btnType = type();\r\n@let btnLoad = loading();\r\n@let btnTitle = title();\r\n@let pIcon = prefixIcon();\r\n@let sIcon = suffixIcon();\r\n@let fSet = fontSet();\r\n@let hType = htmlType();\r\n\r\n@if (btnType === 'fill') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-fill\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'light') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-light\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'outline') {\r\n <button\r\n mat-stroked-button\r\n class=\"c-button c-outline\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'link') {\r\n <button\r\n mat-button\r\n class=\"c-button c-link\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n}\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"c-button-content-wrapper\">\r\n @if (btnLoad) {\r\n <mat-spinner mode=\"indeterminate\" diameter=\"18\" strokeWidth=\"2\" class=\"c-spinner\"></mat-spinner>\r\n } @else if (pIcon) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-prefix\">{{ pIcon }}</mat-icon>\r\n }\r\n\r\n @if (btnTitle) {\r\n <span class=\"c-title\" [class.ml-8]=\"btnLoad || pIcon\" [class.mr-8]=\"sIcon && !btnLoad\">\r\n {{ btnTitle }}\r\n </span>\r\n }\r\n\r\n @if (sIcon && !btnLoad) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-suffix\">{{ sIcon }}</mat-icon>\r\n }\r\n\r\n @if (!btnTitle && !pIcon && !btnLoad && sIcon) {\r\n <mat-icon [fontSet]=\"fSet\">{{ sIcon }}</mat-icon>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host{display:inline-block;pointer-events:auto}:host.sd-disabled{cursor:not-allowed}:host.sd-loading{cursor:wait}:host.sd-block{display:block;width:100%}:host.sd-block button{width:100%}:host ::ng-deep button.c-button{pointer-events:auto;min-width:auto}:host ::ng-deep button.c-button .mat-button-wrapper,:host ::ng-deep button.c-button .mdc-button__label{display:flex;align-items:center;justify-content:center;width:100%}:host ::ng-deep button.c-button[disabled],:host ::ng-deep button.c-button.mat-button-disabled{pointer-events:none;color:#a6a6a6!important;background-color:#e9e9e9!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;height:32px;line-height:20px!important;padding:2px 12px!important;font-weight:400}:host ::ng-deep button.c-button.c-sm mat-icon{height:16px!important;width:16px!important;font-size:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-md{font-size:16px;height:40px;line-height:20px;padding:2px 16px!important;font-weight:400}:host ::ng-deep button.c-button.c-md mat-icon{height:20px!important;width:20px!important;font-size:20px!important}:host ::ng-deep button.c-button.c-md.c-square{width:40px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;line-height:20px!important;padding:2px 16px!important;height:48px}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-disabled{opacity:.5}:host ::ng-deep button.c-button.c-block{width:100%!important}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-secondary{background-color:#000!important;color:#fff}:host ::ng-deep button.c-button.c-fill .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#fff!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary-light);color:var(--sd-primary)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info-light);color:var(--sd-info)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success-light);color:var(--sd-success)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning-light);color:var(--sd-warning)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error-light);color:var(--sd-error)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary{background-color:var(--sd-secondary-light);color:#000!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep .c-button-content-wrapper{display:flex;align-items:center;justify-content:center;width:100%;pointer-events:none}:host ::ng-deep .c-spinner{display:inline-block}:host.sd-loading ::ng-deep button.c-button{pointer-events:none;opacity:.85}\n"] }]
110
+ }, template: "@let btnType = type();\r\n@let btnLoad = loading();\r\n@let btnTitle = title();\r\n@let pIcon = prefixIcon();\r\n@let sIcon = suffixIcon();\r\n@let fSet = fontSet();\r\n@let hType = htmlType();\r\n\r\n@if (btnType === 'fill') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-fill\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'light') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-light\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'outline') {\r\n <button\r\n mat-stroked-button\r\n class=\"c-button c-outline\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'link') {\r\n <button\r\n mat-button\r\n class=\"c-button c-link\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n}\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"c-button-content-wrapper\">\r\n @if (btnLoad) {\r\n <mat-spinner mode=\"indeterminate\" diameter=\"18\" strokeWidth=\"2\" class=\"c-spinner\"></mat-spinner>\r\n } @else if (pIcon) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-prefix\">{{ pIcon }}</mat-icon>\r\n }\r\n\r\n @if (btnTitle) {\r\n <span class=\"c-title\" [class.ml-8]=\"btnLoad || pIcon\" [class.mr-8]=\"sIcon && !btnLoad\">\r\n {{ btnTitle }}\r\n </span>\r\n }\r\n\r\n @if (sIcon && !btnLoad) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-suffix\">{{ sIcon }}</mat-icon>\r\n }\r\n\r\n @if (!btnTitle && !pIcon && !btnLoad && sIcon) {\r\n <mat-icon [fontSet]=\"fSet\">{{ sIcon }}</mat-icon>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host{display:inline-block;pointer-events:auto}:host.sd-disabled{cursor:not-allowed}:host.sd-loading{cursor:wait}:host.sd-block{display:block;width:100%}:host.sd-block button{width:100%}:host ::ng-deep button.c-button{pointer-events:auto;min-width:auto}:host ::ng-deep button.c-button .mat-button-wrapper,:host ::ng-deep button.c-button .mdc-button__label{display:flex;align-items:center;justify-content:center;width:100%}:host ::ng-deep button.c-button[disabled],:host ::ng-deep button.c-button.mat-button-disabled{pointer-events:none;color:#a6a6a6!important;background-color:#e9e9e9!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;height:32px;line-height:20px!important;padding:2px 12px!important;font-weight:400}:host ::ng-deep button.c-button.c-sm mat-icon{height:16px!important;width:16px!important;font-size:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-md{font-size:16px;height:40px;line-height:20px;padding:2px 16px!important;font-weight:400}:host ::ng-deep button.c-button.c-md mat-icon{height:20px!important;width:20px!important;font-size:20px!important}:host ::ng-deep button.c-button.c-md.c-square{width:40px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;line-height:20px!important;padding:2px 16px!important;height:48px}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-disabled{opacity:.5}:host ::ng-deep button.c-button.c-block{width:100%!important}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-secondary{background-color:#000!important;color:#fff}:host ::ng-deep button.c-button.c-fill .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#fff!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary-light);color:var(--sd-primary)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info-light);color:var(--sd-info)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success-light);color:var(--sd-success)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning-light);color:var(--sd-warning)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error-light);color:var(--sd-error)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary{background-color:var(--sd-secondary-light);color:#000!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep .c-button-content-wrapper{display:flex;align-items:center;justify-content:center;width:100%;pointer-events:none}:host ::ng-deep .c-spinner{display:inline-block}:host.sd-loading ::ng-deep button.c-button{pointer-events:none;opacity:.85}\n"] }]
111
111
  }], ctorParameters: () => [] });
112
112
 
113
113
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-components-button.mjs","sources":["../../../projects/sd-angular/components/button/src/button.component.ts","../../../projects/sd-angular/components/button/src/button.component.html","../../../projects/sd-angular/components/button/sd-angular-core-components-button.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n OnInit,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdBaseSecureComponent } from '@sd-angular/core/components/base';\r\nimport { DefaultMaterialIconFontSet, MaterialIconFontSet, SdColor } from '@sd-angular/core/utilities/models';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { filter, throttleTime } from 'rxjs/operators';\r\n\r\n// Export các Type ra ngoài để tái sử dụng ở file config/interface\r\nexport type SdButtonType = 'fill' | 'light' | 'outline' | 'link';\r\nexport type SdButtonSize = 'sm' | 'md' | 'lg';\r\nexport type SdButtonHtmlType = 'button' | 'submit' | 'reset';\r\n\r\n@Component({\r\n selector: 'sd-button',\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule, MatButtonModule, MatProgressSpinnerModule, MatTooltipModule],\r\n host: {\r\n '[class.sd-disabled]': 'disabled()',\r\n '[class.sd-loading]': 'loading()',\r\n '[class.sd-block]': 'block()',\r\n '[attr.disabled]': 'disabled() ? \"true\" : null',\r\n }\r\n})\r\nexport class SdButton extends SdBaseSecureComponent implements OnInit, OnDestroy {\r\n // ==========================================\r\n // 1. INJECTS\r\n // ==========================================\r\n private el = inject(ElementRef);\r\n\r\n // ==========================================\r\n // 2. SIGNAL INPUTS (Bảo mật 100% với Null/Undefined)\r\n // ==========================================\r\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\r\n \r\n type = input<SdButtonType, SdButtonType | undefined | null>('light', {\r\n transform: (value) => value || 'light'\r\n });\r\n\r\n color = input<SdColor, SdColor | undefined | null>('secondary', {\r\n transform: (value) => value || 'secondary'\r\n });\r\n\r\n size = input<SdButtonSize, SdButtonSize | undefined | null>('sm', {\r\n transform: (value) => value || 'sm'\r\n });\r\n\r\n fontSet = input<MaterialIconFontSet, MaterialIconFontSet | undefined | null>(DefaultMaterialIconFontSet, {\r\n transform: (value) => value || DefaultMaterialIconFontSet\r\n });\r\n\r\n title = input<string | undefined | null>(undefined);\r\n width = input<string | undefined | null>(undefined);\r\n tooltip = input<string | undefined | null>(undefined);\r\n prefixIcon = input<string | undefined | null>(undefined);\r\n suffixIcon = input<string | undefined | null>(undefined);\r\n\r\n disabled = input(false, { transform: booleanAttribute });\r\n loading = input(false, { transform: booleanAttribute });\r\n block = input(false, { transform: booleanAttribute });\r\n\r\n htmlType = input<SdButtonHtmlType, SdButtonHtmlType | undefined | null>('button', {\r\n transform: (value) => value || 'button'\r\n });\r\n\r\n // ==========================================\r\n // 3. COMPUTED STATE\r\n // ==========================================\r\n autoId = computed(() => this.autoIdInput() ? `components-button-${this.autoIdInput()}` : undefined);\r\n \r\n buttonClasses = computed(() => ({\r\n 'c-square': (this.prefixIcon() || this.suffixIcon()) && !this.title(),\r\n 'c-sm': this.size() === 'sm',\r\n 'c-md': this.size() === 'md',\r\n 'c-lg': this.size() === 'lg',\r\n 'c-disabled': this.disabled(),\r\n 'c-block': this.block(),\r\n }));\r\n\r\n // ==========================================\r\n // 4. OUTPUT & RXJS STREAMS\r\n // ==========================================\r\n click = output<Event>();\r\n\r\n #clickSubject = new Subject<Event>();\r\n #subscription = new Subscription();\r\n\r\n constructor() {\r\n super();\r\n\r\n // Kỹ thuật Đánh chặn sự kiện (Capture Phase)\r\n // Tóm sống mọi sự kiện click ngay khi nó vừa chạm vào component\r\n this.el.nativeElement.addEventListener(\r\n 'click',\r\n (event: Event) => {\r\n if (this.disabled() || this.loading()) {\r\n // Nghiền nát sự kiện, không cho Angular phát (click) ra component cha\r\n event.preventDefault();\r\n event.stopPropagation();\r\n event.stopImmediatePropagation();\r\n }\r\n },\r\n { capture: true }\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.#clickSubject\r\n .pipe(\r\n throttleTime(300, undefined, { leading: true, trailing: false }),\r\n filter(() => !this.disabled() && !this.loading())\r\n )\r\n .subscribe(event => {\r\n this.click.emit(event);\r\n })\r\n );\r\n }\r\n\r\n // Nhận click từ thẻ button con bên trong\r\n onInternalClick(event: Event) {\r\n event.stopPropagation();\r\n \r\n if (this.disabled() || this.loading()) {\r\n return;\r\n }\r\n\r\n this.#clickSubject.next(event);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}","@let btnType = type();\r\n@let btnLoad = loading();\r\n@let btnTitle = title();\r\n@let pIcon = prefixIcon();\r\n@let sIcon = suffixIcon();\r\n@let fSet = fontSet();\r\n@let hType = htmlType();\r\n\r\n@if (btnType === 'fill') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-fill\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'light') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-light\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'outline') {\r\n <button\r\n mat-stroked-button\r\n class=\"c-button c-outline\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'link') {\r\n <button\r\n mat-button\r\n class=\"c-button c-link\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n}\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"c-button-content-wrapper\">\r\n @if (btnLoad) {\r\n <mat-spinner mode=\"indeterminate\" diameter=\"18\" strokeWidth=\"2\" class=\"c-spinner\"></mat-spinner>\r\n } @else if (pIcon) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-prefix\">{{ pIcon }}</mat-icon>\r\n }\r\n\r\n @if (btnTitle) {\r\n <span class=\"c-title\" [class.ml-8]=\"btnLoad || pIcon\" [class.mr-8]=\"sIcon && !btnLoad\">\r\n {{ btnTitle }}\r\n </span>\r\n }\r\n\r\n @if (sIcon && !btnLoad) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-suffix\">{{ sIcon }}</mat-icon>\r\n }\r\n\r\n @if (!btnTitle && !pIcon && !btnLoad && sIcon) {\r\n <mat-icon [fontSet]=\"fSet\">{{ sIcon }}</mat-icon>\r\n }\r\n </div>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-components-button.mjs","sources":["../../../projects/sd-angular/components/button/src/button.component.ts","../../../projects/sd-angular/components/button/src/button.component.html","../../../projects/sd-angular/components/button/sd-angular-core-components-button.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n OnInit,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdBaseSecureComponent } from '@sd-angular/core/components/base';\r\nimport { DefaultMaterialIconFontSet, MaterialIconFontSet, SdColor } from '@sd-angular/core/utilities/models';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { filter, throttleTime } from 'rxjs/operators';\r\n\r\n// Export các Type ra ngoài để tái sử dụng ở file config/interface\r\nexport type SdButtonType = 'fill' | 'light' | 'outline' | 'link';\r\nexport type SdButtonSize = 'sm' | 'md' | 'lg';\r\nexport type SdButtonHtmlType = 'button' | 'submit' | 'reset';\r\n\r\n@Component({\r\n selector: 'sd-button',\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule, MatButtonModule, MatProgressSpinnerModule, MatTooltipModule],\r\n host: {\r\n '[class.sd-disabled]': 'disabled()',\r\n '[class.sd-loading]': 'loading()',\r\n '[class.sd-block]': 'block()',\r\n '[attr.disabled]': 'disabled() ? \"true\" : null',\r\n }\r\n})\r\nexport class SdButton extends SdBaseSecureComponent implements OnInit, OnDestroy {\r\n // ==========================================\r\n // 1. INJECTS\r\n // ==========================================\r\n private el = inject(ElementRef);\r\n\r\n // ==========================================\r\n // 2. SIGNAL INPUTS (Bảo mật 100% với Null/Undefined)\r\n // ==========================================\r\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\r\n \r\n type = input<SdButtonType, SdButtonType | undefined | null>('light', {\r\n transform: (value) => value || 'light'\r\n });\r\n\r\n color = input<SdColor, SdColor | undefined | null>('secondary', {\r\n transform: (value) => value || 'secondary'\r\n });\r\n\r\n size = input<SdButtonSize, SdButtonSize | undefined | null>('sm', {\r\n transform: (value) => value || 'sm'\r\n });\r\n\r\n fontSet = input<MaterialIconFontSet, MaterialIconFontSet | undefined | null>(DefaultMaterialIconFontSet, {\r\n transform: (value) => value || DefaultMaterialIconFontSet\r\n });\r\n\r\n title = input<string | undefined | null>(undefined);\r\n width = input<string | undefined | null>(undefined);\r\n tooltip = input<string | undefined | null>(undefined);\r\n prefixIcon = input<string | undefined | null>(undefined);\r\n suffixIcon = input<string | undefined | null>(undefined);\r\n\r\n disabled = input(false, { transform: booleanAttribute });\r\n loading = input(false, { transform: booleanAttribute });\r\n block = input(false, { transform: booleanAttribute });\r\n\r\n htmlType = input<SdButtonHtmlType, SdButtonHtmlType | undefined | null>('button', {\r\n transform: (value) => value || 'button'\r\n });\r\n\r\n // ==========================================\r\n // 3. COMPUTED STATE\r\n // ==========================================\r\n autoId = computed(() => this.autoIdInput() ? `components-button-${this.autoIdInput()}` : undefined);\r\n \r\n buttonClasses = computed(() => ({\r\n 'c-square': (this.prefixIcon() || this.suffixIcon()) && !this.title(),\r\n 'c-sm': this.size() === 'sm',\r\n 'c-md': this.size() === 'md',\r\n 'c-lg': this.size() === 'lg',\r\n 'c-disabled': this.disabled(),\r\n 'c-block': this.block(),\r\n }));\r\n\r\n // ==========================================\r\n // 4. OUTPUT & RXJS STREAMS\r\n // ==========================================\r\n click = output<Event>();\r\n\r\n #clickSubject = new Subject<Event>();\r\n #subscription = new Subscription();\r\n\r\n constructor() {\r\n super();\r\n\r\n // Kỹ thuật Đánh chặn sự kiện (Capture Phase)\r\n // Tóm sống mọi sự kiện click ngay khi nó vừa chạm vào component\r\n this.el.nativeElement.addEventListener(\r\n 'click',\r\n (event: Event) => {\r\n if (this.disabled() || this.loading()) {\r\n // Nghiền nát sự kiện, không cho Angular phát (click) ra component cha\r\n event.preventDefault();\r\n event.stopPropagation();\r\n event.stopImmediatePropagation();\r\n }\r\n },\r\n { capture: true }\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.#clickSubject\r\n .pipe(\r\n throttleTime(300, undefined, { leading: true, trailing: false }),\r\n filter(() => !this.disabled() && !this.loading())\r\n )\r\n .subscribe(event => {\r\n this.click.emit(event);\r\n })\r\n );\r\n }\r\n\r\n // Nhận click từ thẻ button con bên trong\r\n onInternalClick(event: Event) {\r\n event.stopPropagation();\r\n \r\n if (this.disabled() || this.loading()) {\r\n return;\r\n }\r\n\r\n this.#clickSubject.next(event);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}","@let btnType = type();\r\n@let btnLoad = loading();\r\n@let btnTitle = title();\r\n@let pIcon = prefixIcon();\r\n@let sIcon = suffixIcon();\r\n@let fSet = fontSet();\r\n@let hType = htmlType();\r\n\r\n@if (btnType === 'fill') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-fill\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'light') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-light\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'outline') {\r\n <button\r\n mat-stroked-button\r\n class=\"c-button c-outline\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'link') {\r\n <button\r\n mat-button\r\n class=\"c-button c-link\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"disabled()\"\r\n [color]=\"color()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"disabled() ? 'true' : 'false'\"\r\n [attr.data-loading]=\"loading() ? 'true' : 'false'\"\r\n [style.width]=\"width()\"\r\n [matTooltip]=\"tooltip() || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n}\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"c-button-content-wrapper\">\r\n @if (btnLoad) {\r\n <mat-spinner mode=\"indeterminate\" diameter=\"18\" strokeWidth=\"2\" class=\"c-spinner\"></mat-spinner>\r\n } @else if (pIcon) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-prefix\">{{ pIcon }}</mat-icon>\r\n }\r\n\r\n @if (btnTitle) {\r\n <span class=\"c-title\" [class.ml-8]=\"btnLoad || pIcon\" [class.mr-8]=\"sIcon && !btnLoad\">\r\n {{ btnTitle }}\r\n </span>\r\n }\r\n\r\n @if (sIcon && !btnLoad) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-suffix\">{{ sIcon }}</mat-icon>\r\n }\r\n\r\n @if (!btnTitle && !pIcon && !btnLoad && sIcon) {\r\n <mat-icon [fontSet]=\"fSet\">{{ sIcon }}</mat-icon>\r\n }\r\n </div>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ import { debounceTime } from 'rxjs/operators';
16
16
  import * as uuid from 'uuid';
17
17
  import { SdNotifyService } from '@sd-angular/core/services';
18
18
  import { I18nService } from '@sd-angular/core/i18n';
19
+ import { sdIsEmpty } from '@sd-angular/core/utilities/data-state';
19
20
  import { SdFormControl, HandleSdCustomValidator } from '@sd-angular/core/forms/models';
20
21
  import { SdLabel } from '@sd-angular/core/forms/label';
21
22
 
@@ -711,6 +712,8 @@ class SdEditor {
711
712
  key = input(undefined);
712
713
  autoIdInput = input(undefined, { alias: 'autoId' });
713
714
  autoId = computed(() => (this.autoIdInput() ? `components-editor-${this.autoIdInput()}` : undefined));
715
+ dataDisabled = computed(() => (this.disabled() ? 'true' : 'false'));
716
+ dataEmpty = computed(() => (sdIsEmpty(this.valueModel()) ? 'true' : 'false'));
714
717
  name = input(uuid.v4());
715
718
  valueModel = model('', { alias: 'model' });
716
719
  // Output
@@ -1060,11 +1063,11 @@ class SdEditor {
1060
1063
  return this.option()?.imageConfig?.uploadFn ?? this.#getSelectedConfig()?.upload;
1061
1064
  };
1062
1065
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
1063
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdEditor, isStandalone: true, selector: "sd-editor", inputs: { option: { classPropertyName: "option", publicName: "option", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, hideInlineError: { classPropertyName: "hideInlineError", publicName: "hideInlineError", isSignal: true, isRequired: false, transformFunction: null }, inlineError: { classPropertyName: "inlineError", publicName: "inlineError", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, validator: { classPropertyName: "validator", publicName: "validator", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, autoIdInput: { classPropertyName: "autoIdInput", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, valueModel: { classPropertyName: "valueModel", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueModel: "modelChange", sdChange: "sdChange", sdBlur: "sdBlur", sdFocus: "sdFocus" }, ngImport: i0, template: "@let lbl = label();\r\n@let hText = helperText();\r\n@let hideErr = hideInlineError();\r\n@let errMsg = errorMessage;\r\n@let req = required();\r\n@let maxLen = maxlength();\r\n@let showCounter = !!maxLen && !formControl.disabled && !hideErr;\r\n\r\n@if (lbl) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\" [helperText]=\"hText\"></sd-label>\r\n}\r\n\r\n<div\r\n class=\"sd-editor\"\r\n [class.sd-editor--readonly]=\"readonly()\"\r\n [class.sd-editor--error]=\"formControl.invalid && formControl.touched\"\r\n [class.has-counter]=\"showCounter\"\r\n [style.--sd-editor-content-min-height]=\"height()\"\r\n [style.--sd-editor-content-max-height]=\"maxHeight()\"\r\n [attr.data-autoId]=\"autoId()\">\r\n <ckeditor [editor]=\"Editor\" [config]=\"editorConfig()\" [disabled]=\"formControl.disabled\" (ready)=\"onReady($event)\"></ckeditor>\r\n\r\n @if (showCounter) {\r\n <div class=\"sd-editor-counter-row\">\r\n <span class=\"sd-editor-counter\" [class.sd-editor-counter--over]=\"isOverLimit()\"> {{ _textLength() }}/{{ maxLen }} </span>\r\n </div>\r\n }\r\n\r\n @if (hideErr && errMsg && formControl.touched) {\r\n <mat-icon class=\"sd-error-icon\" [matTooltip]=\"errMsg\" matTooltipPosition=\"above\">error</mat-icon>\r\n }\r\n</div>\r\n\r\n<div class=\"sd-editor-footer\">\r\n @if (!hideErr && errMsg && formControl.touched) {\r\n <mat-error>{{ errMsg }}</mat-error>\r\n }\r\n</div>\r\n", styles: [".sd-editor{display:flex;flex-direction:column;width:100%;position:relative}.sd-editor-counter-row{display:flex;justify-content:flex-end;align-items:center;padding:4px 12px;border:1px solid var(--ck-color-base-border);border-top:none}.sd-editor-footer{min-height:20px;margin-top:4px}.sd-editor-footer mat-error{font-size:12px;color:var(--mdc-theme-error, #f44336)}.sd-error-icon{position:absolute;right:8px;bottom:8px;z-index:2;color:var(--mdc-theme-error, #f44336);height:20px;width:20px;font-size:20px;cursor:default}.sd-editor--readonly :host ::ng-deep .ck-editor__editable{background:#0000000a;cursor:default}.sd-editor-counter{font-size:12px;color:#0009}.sd-editor-counter--over{color:var(--mdc-theme-error, #f44336)}::ng-deep .ck-powered-by,::ng-deep .ck-powered-by-balloon{display:none!important}:host ::ng-deep ckeditor,:host ::ng-deep .ck-editor{display:flex;flex-direction:column}:host ::ng-deep .ck-editor{--ck-content-font-size: 14px;--ck-content-line-height: 1.5}:host ::ng-deep .ck-editor__main{overflow:visible}:host ::ng-deep .ck-editor__editable{min-height:var(--sd-editor-content-min-height, 200px)!important;max-height:var(--sd-editor-content-max-height, none)!important;padding:24px!important;overflow-y:auto!important;border:1px solid var(--ck-color-base-border)!important}:host ::ng-deep .ck-editor__editable.ck-focused{box-shadow:none!important}:host ::ng-deep .sd-editor.has-counter .ck-editor__editable{border-bottom:none!important}:host ::ng-deep .sd-editor--error .ck-editor__editable,:host ::ng-deep .sd-editor--error .ck-toolbar{border-color:var(--mdc-theme-error, #f44336)!important}:host ::ng-deep .sd-editor--error.has-counter .sd-editor-counter-row{border-color:var(--mdc-theme-error, #f44336)}:host ::ng-deep .ck-content p{margin-bottom:var(--ck-spacing-large);text-indent:0}:host ::ng-deep .ck-content ul,:host ::ng-deep .ck-content ol{margin-left:0!important;padding-left:20px!important}\n", ":host ::ng-deep .ck-content img{max-width:100%!important;height:auto!important;object-fit:contain}:host ::ng-deep .ck-content figure.image{position:relative;display:block;width:fit-content;max-width:100%;margin:0 auto;overflow:visible}:host ::ng-deep .ck-content figure.image:hover{z-index:99999!important}:host ::ng-deep .ck-content figure.image.image-style-align-left{float:left;margin:0 1em 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-left[style*=\"width:100\"]{float:none;margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-right{float:right;margin:0 0 0 1em}:host ::ng-deep .ck-content figure.image.image-style-align-right[style*=\"width:100\"]{float:none;margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image.image-style-block-align-left{margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-block-align-right{margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image .ck-progress-bar{position:absolute;bottom:0;left:0;width:30%!important;height:3px;background:var(--sd-color-primary, #1565c0);border-radius:2px;z-index:10;pointer-events:none;animation:sd-progress-indeterminate 1.4s ease-in-out infinite}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar){overflow:hidden}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar) img{filter:blur(1px) brightness(.85);transition:filter .3s ease}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):after{content:\"\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:9;background:#ffffff40;border-radius:inherit}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):before{content:\"\";position:absolute;top:50%;left:50%;width:28px;height:28px;margin:-14px 0 0 -14px;border:3px solid rgba(255,255,255,.5);border-top-color:var(--sd-color-primary, #1565c0);border-radius:50%;animation:sd-spinner .75s linear infinite;z-index:11;pointer-events:none}@keyframes sd-spinner{to{transform:rotate(360deg)}}@keyframes sd-progress-indeterminate{0%{left:-30%}to{left:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CKEditorModule }, { kind: "component", type: i1.CKEditorComponent, selector: "ckeditor", inputs: ["editor", "config", "data", "tagName", "watchdog", "editorWatchdogConfig", "disableWatchdog", "disableTwoWayDataBinding", "disabled"], outputs: ["ready", "change", "blur", "focus", "error"] }, { kind: "component", type: SdLabel, selector: "sd-label", inputs: ["label", "description", "required", "helperText"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1066
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdEditor, isStandalone: true, selector: "sd-editor", inputs: { option: { classPropertyName: "option", publicName: "option", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, hideInlineError: { classPropertyName: "hideInlineError", publicName: "hideInlineError", isSignal: true, isRequired: false, transformFunction: null }, inlineError: { classPropertyName: "inlineError", publicName: "inlineError", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, validator: { classPropertyName: "validator", publicName: "validator", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, autoIdInput: { classPropertyName: "autoIdInput", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, valueModel: { classPropertyName: "valueModel", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueModel: "modelChange", sdChange: "sdChange", sdBlur: "sdBlur", sdFocus: "sdFocus" }, ngImport: i0, template: "@let lbl = label();\r\n@let hText = helperText();\r\n@let hideErr = hideInlineError();\r\n@let errMsg = errorMessage;\r\n@let req = required();\r\n@let maxLen = maxlength();\r\n@let showCounter = !!maxLen && !formControl.disabled && !hideErr;\r\n\r\n@if (lbl) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\" [helperText]=\"hText\"></sd-label>\r\n}\r\n\r\n<div\r\n class=\"sd-editor\"\r\n [class.sd-editor--readonly]=\"readonly()\"\r\n [class.sd-editor--error]=\"formControl.invalid && formControl.touched\"\r\n [class.has-counter]=\"showCounter\"\r\n [style.--sd-editor-content-min-height]=\"height()\"\r\n [style.--sd-editor-content-max-height]=\"maxHeight()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"dataDisabled()\"\r\n [attr.data-empty]=\"dataEmpty()\">\r\n <ckeditor [editor]=\"Editor\" [config]=\"editorConfig()\" [disabled]=\"formControl.disabled\" (ready)=\"onReady($event)\"></ckeditor>\r\n\r\n @if (showCounter) {\r\n <div class=\"sd-editor-counter-row\">\r\n <span class=\"sd-editor-counter\" [class.sd-editor-counter--over]=\"isOverLimit()\"> {{ _textLength() }}/{{ maxLen }} </span>\r\n </div>\r\n }\r\n\r\n @if (hideErr && errMsg && formControl.touched) {\r\n <mat-icon class=\"sd-error-icon\" [matTooltip]=\"errMsg\" matTooltipPosition=\"above\">error</mat-icon>\r\n }\r\n</div>\r\n\r\n<div class=\"sd-editor-footer\">\r\n @if (!hideErr && errMsg && formControl.touched) {\r\n <mat-error>{{ errMsg }}</mat-error>\r\n }\r\n</div>\r\n", styles: [".sd-editor{display:flex;flex-direction:column;width:100%;position:relative}.sd-editor-counter-row{display:flex;justify-content:flex-end;align-items:center;padding:4px 12px;border:1px solid var(--ck-color-base-border);border-top:none}.sd-editor-footer{min-height:20px;margin-top:4px}.sd-editor-footer mat-error{font-size:12px;color:var(--mdc-theme-error, #f44336)}.sd-error-icon{position:absolute;right:8px;bottom:8px;z-index:2;color:var(--mdc-theme-error, #f44336);height:20px;width:20px;font-size:20px;cursor:default}.sd-editor--readonly :host ::ng-deep .ck-editor__editable{background:#0000000a;cursor:default}.sd-editor-counter{font-size:12px;color:#0009}.sd-editor-counter--over{color:var(--mdc-theme-error, #f44336)}::ng-deep .ck-powered-by,::ng-deep .ck-powered-by-balloon{display:none!important}:host ::ng-deep ckeditor,:host ::ng-deep .ck-editor{display:flex;flex-direction:column}:host ::ng-deep .ck-editor{--ck-content-font-size: 14px;--ck-content-line-height: 1.5}:host ::ng-deep .ck-editor__main{overflow:visible}:host ::ng-deep .ck-editor__editable{min-height:var(--sd-editor-content-min-height, 200px)!important;max-height:var(--sd-editor-content-max-height, none)!important;padding:24px!important;overflow-y:auto!important;border:1px solid var(--ck-color-base-border)!important}:host ::ng-deep .ck-editor__editable.ck-focused{box-shadow:none!important}:host ::ng-deep .sd-editor.has-counter .ck-editor__editable{border-bottom:none!important}:host ::ng-deep .sd-editor--error .ck-editor__editable,:host ::ng-deep .sd-editor--error .ck-toolbar{border-color:var(--mdc-theme-error, #f44336)!important}:host ::ng-deep .sd-editor--error.has-counter .sd-editor-counter-row{border-color:var(--mdc-theme-error, #f44336)}:host ::ng-deep .ck-content p{margin-bottom:var(--ck-spacing-large);text-indent:0}:host ::ng-deep .ck-content ul,:host ::ng-deep .ck-content ol{margin-left:0!important;padding-left:20px!important}\n", ":host ::ng-deep .ck-content img{max-width:100%!important;height:auto!important;object-fit:contain}:host ::ng-deep .ck-content figure.image{position:relative;display:block;width:fit-content;max-width:100%;margin:0 auto;overflow:visible}:host ::ng-deep .ck-content figure.image:hover{z-index:99999!important}:host ::ng-deep .ck-content figure.image.image-style-align-left{float:left;margin:0 1em 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-left[style*=\"width:100\"]{float:none;margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-right{float:right;margin:0 0 0 1em}:host ::ng-deep .ck-content figure.image.image-style-align-right[style*=\"width:100\"]{float:none;margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image.image-style-block-align-left{margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-block-align-right{margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image .ck-progress-bar{position:absolute;bottom:0;left:0;width:30%!important;height:3px;background:var(--sd-color-primary, #1565c0);border-radius:2px;z-index:10;pointer-events:none;animation:sd-progress-indeterminate 1.4s ease-in-out infinite}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar){overflow:hidden}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar) img{filter:blur(1px) brightness(.85);transition:filter .3s ease}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):after{content:\"\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:9;background:#ffffff40;border-radius:inherit}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):before{content:\"\";position:absolute;top:50%;left:50%;width:28px;height:28px;margin:-14px 0 0 -14px;border:3px solid rgba(255,255,255,.5);border-top-color:var(--sd-color-primary, #1565c0);border-radius:50%;animation:sd-spinner .75s linear infinite;z-index:11;pointer-events:none}@keyframes sd-spinner{to{transform:rotate(360deg)}}@keyframes sd-progress-indeterminate{0%{left:-30%}to{left:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CKEditorModule }, { kind: "component", type: i1.CKEditorComponent, selector: "ckeditor", inputs: ["editor", "config", "data", "tagName", "watchdog", "editorWatchdogConfig", "disableWatchdog", "disableTwoWayDataBinding", "disabled"], outputs: ["ready", "change", "blur", "focus", "error"] }, { kind: "component", type: SdLabel, selector: "sd-label", inputs: ["label", "description", "required", "helperText"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1064
1067
  }
1065
1068
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdEditor, decorators: [{
1066
1069
  type: Component,
1067
- args: [{ selector: 'sd-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CKEditorModule, SdLabel, MatFormFieldModule, MatIconModule, MatTooltipModule], template: "@let lbl = label();\r\n@let hText = helperText();\r\n@let hideErr = hideInlineError();\r\n@let errMsg = errorMessage;\r\n@let req = required();\r\n@let maxLen = maxlength();\r\n@let showCounter = !!maxLen && !formControl.disabled && !hideErr;\r\n\r\n@if (lbl) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\" [helperText]=\"hText\"></sd-label>\r\n}\r\n\r\n<div\r\n class=\"sd-editor\"\r\n [class.sd-editor--readonly]=\"readonly()\"\r\n [class.sd-editor--error]=\"formControl.invalid && formControl.touched\"\r\n [class.has-counter]=\"showCounter\"\r\n [style.--sd-editor-content-min-height]=\"height()\"\r\n [style.--sd-editor-content-max-height]=\"maxHeight()\"\r\n [attr.data-autoId]=\"autoId()\">\r\n <ckeditor [editor]=\"Editor\" [config]=\"editorConfig()\" [disabled]=\"formControl.disabled\" (ready)=\"onReady($event)\"></ckeditor>\r\n\r\n @if (showCounter) {\r\n <div class=\"sd-editor-counter-row\">\r\n <span class=\"sd-editor-counter\" [class.sd-editor-counter--over]=\"isOverLimit()\"> {{ _textLength() }}/{{ maxLen }} </span>\r\n </div>\r\n }\r\n\r\n @if (hideErr && errMsg && formControl.touched) {\r\n <mat-icon class=\"sd-error-icon\" [matTooltip]=\"errMsg\" matTooltipPosition=\"above\">error</mat-icon>\r\n }\r\n</div>\r\n\r\n<div class=\"sd-editor-footer\">\r\n @if (!hideErr && errMsg && formControl.touched) {\r\n <mat-error>{{ errMsg }}</mat-error>\r\n }\r\n</div>\r\n", styles: [".sd-editor{display:flex;flex-direction:column;width:100%;position:relative}.sd-editor-counter-row{display:flex;justify-content:flex-end;align-items:center;padding:4px 12px;border:1px solid var(--ck-color-base-border);border-top:none}.sd-editor-footer{min-height:20px;margin-top:4px}.sd-editor-footer mat-error{font-size:12px;color:var(--mdc-theme-error, #f44336)}.sd-error-icon{position:absolute;right:8px;bottom:8px;z-index:2;color:var(--mdc-theme-error, #f44336);height:20px;width:20px;font-size:20px;cursor:default}.sd-editor--readonly :host ::ng-deep .ck-editor__editable{background:#0000000a;cursor:default}.sd-editor-counter{font-size:12px;color:#0009}.sd-editor-counter--over{color:var(--mdc-theme-error, #f44336)}::ng-deep .ck-powered-by,::ng-deep .ck-powered-by-balloon{display:none!important}:host ::ng-deep ckeditor,:host ::ng-deep .ck-editor{display:flex;flex-direction:column}:host ::ng-deep .ck-editor{--ck-content-font-size: 14px;--ck-content-line-height: 1.5}:host ::ng-deep .ck-editor__main{overflow:visible}:host ::ng-deep .ck-editor__editable{min-height:var(--sd-editor-content-min-height, 200px)!important;max-height:var(--sd-editor-content-max-height, none)!important;padding:24px!important;overflow-y:auto!important;border:1px solid var(--ck-color-base-border)!important}:host ::ng-deep .ck-editor__editable.ck-focused{box-shadow:none!important}:host ::ng-deep .sd-editor.has-counter .ck-editor__editable{border-bottom:none!important}:host ::ng-deep .sd-editor--error .ck-editor__editable,:host ::ng-deep .sd-editor--error .ck-toolbar{border-color:var(--mdc-theme-error, #f44336)!important}:host ::ng-deep .sd-editor--error.has-counter .sd-editor-counter-row{border-color:var(--mdc-theme-error, #f44336)}:host ::ng-deep .ck-content p{margin-bottom:var(--ck-spacing-large);text-indent:0}:host ::ng-deep .ck-content ul,:host ::ng-deep .ck-content ol{margin-left:0!important;padding-left:20px!important}\n", ":host ::ng-deep .ck-content img{max-width:100%!important;height:auto!important;object-fit:contain}:host ::ng-deep .ck-content figure.image{position:relative;display:block;width:fit-content;max-width:100%;margin:0 auto;overflow:visible}:host ::ng-deep .ck-content figure.image:hover{z-index:99999!important}:host ::ng-deep .ck-content figure.image.image-style-align-left{float:left;margin:0 1em 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-left[style*=\"width:100\"]{float:none;margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-right{float:right;margin:0 0 0 1em}:host ::ng-deep .ck-content figure.image.image-style-align-right[style*=\"width:100\"]{float:none;margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image.image-style-block-align-left{margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-block-align-right{margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image .ck-progress-bar{position:absolute;bottom:0;left:0;width:30%!important;height:3px;background:var(--sd-color-primary, #1565c0);border-radius:2px;z-index:10;pointer-events:none;animation:sd-progress-indeterminate 1.4s ease-in-out infinite}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar){overflow:hidden}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar) img{filter:blur(1px) brightness(.85);transition:filter .3s ease}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):after{content:\"\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:9;background:#ffffff40;border-radius:inherit}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):before{content:\"\";position:absolute;top:50%;left:50%;width:28px;height:28px;margin:-14px 0 0 -14px;border:3px solid rgba(255,255,255,.5);border-top-color:var(--sd-color-primary, #1565c0);border-radius:50%;animation:sd-spinner .75s linear infinite;z-index:11;pointer-events:none}@keyframes sd-spinner{to{transform:rotate(360deg)}}@keyframes sd-progress-indeterminate{0%{left:-30%}to{left:100%}}\n"] }]
1070
+ args: [{ selector: 'sd-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CKEditorModule, SdLabel, MatFormFieldModule, MatIconModule, MatTooltipModule], template: "@let lbl = label();\r\n@let hText = helperText();\r\n@let hideErr = hideInlineError();\r\n@let errMsg = errorMessage;\r\n@let req = required();\r\n@let maxLen = maxlength();\r\n@let showCounter = !!maxLen && !formControl.disabled && !hideErr;\r\n\r\n@if (lbl) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\" [helperText]=\"hText\"></sd-label>\r\n}\r\n\r\n<div\r\n class=\"sd-editor\"\r\n [class.sd-editor--readonly]=\"readonly()\"\r\n [class.sd-editor--error]=\"formControl.invalid && formControl.touched\"\r\n [class.has-counter]=\"showCounter\"\r\n [style.--sd-editor-content-min-height]=\"height()\"\r\n [style.--sd-editor-content-max-height]=\"maxHeight()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"dataDisabled()\"\r\n [attr.data-empty]=\"dataEmpty()\">\r\n <ckeditor [editor]=\"Editor\" [config]=\"editorConfig()\" [disabled]=\"formControl.disabled\" (ready)=\"onReady($event)\"></ckeditor>\r\n\r\n @if (showCounter) {\r\n <div class=\"sd-editor-counter-row\">\r\n <span class=\"sd-editor-counter\" [class.sd-editor-counter--over]=\"isOverLimit()\"> {{ _textLength() }}/{{ maxLen }} </span>\r\n </div>\r\n }\r\n\r\n @if (hideErr && errMsg && formControl.touched) {\r\n <mat-icon class=\"sd-error-icon\" [matTooltip]=\"errMsg\" matTooltipPosition=\"above\">error</mat-icon>\r\n }\r\n</div>\r\n\r\n<div class=\"sd-editor-footer\">\r\n @if (!hideErr && errMsg && formControl.touched) {\r\n <mat-error>{{ errMsg }}</mat-error>\r\n }\r\n</div>\r\n", styles: [".sd-editor{display:flex;flex-direction:column;width:100%;position:relative}.sd-editor-counter-row{display:flex;justify-content:flex-end;align-items:center;padding:4px 12px;border:1px solid var(--ck-color-base-border);border-top:none}.sd-editor-footer{min-height:20px;margin-top:4px}.sd-editor-footer mat-error{font-size:12px;color:var(--mdc-theme-error, #f44336)}.sd-error-icon{position:absolute;right:8px;bottom:8px;z-index:2;color:var(--mdc-theme-error, #f44336);height:20px;width:20px;font-size:20px;cursor:default}.sd-editor--readonly :host ::ng-deep .ck-editor__editable{background:#0000000a;cursor:default}.sd-editor-counter{font-size:12px;color:#0009}.sd-editor-counter--over{color:var(--mdc-theme-error, #f44336)}::ng-deep .ck-powered-by,::ng-deep .ck-powered-by-balloon{display:none!important}:host ::ng-deep ckeditor,:host ::ng-deep .ck-editor{display:flex;flex-direction:column}:host ::ng-deep .ck-editor{--ck-content-font-size: 14px;--ck-content-line-height: 1.5}:host ::ng-deep .ck-editor__main{overflow:visible}:host ::ng-deep .ck-editor__editable{min-height:var(--sd-editor-content-min-height, 200px)!important;max-height:var(--sd-editor-content-max-height, none)!important;padding:24px!important;overflow-y:auto!important;border:1px solid var(--ck-color-base-border)!important}:host ::ng-deep .ck-editor__editable.ck-focused{box-shadow:none!important}:host ::ng-deep .sd-editor.has-counter .ck-editor__editable{border-bottom:none!important}:host ::ng-deep .sd-editor--error .ck-editor__editable,:host ::ng-deep .sd-editor--error .ck-toolbar{border-color:var(--mdc-theme-error, #f44336)!important}:host ::ng-deep .sd-editor--error.has-counter .sd-editor-counter-row{border-color:var(--mdc-theme-error, #f44336)}:host ::ng-deep .ck-content p{margin-bottom:var(--ck-spacing-large);text-indent:0}:host ::ng-deep .ck-content ul,:host ::ng-deep .ck-content ol{margin-left:0!important;padding-left:20px!important}\n", ":host ::ng-deep .ck-content img{max-width:100%!important;height:auto!important;object-fit:contain}:host ::ng-deep .ck-content figure.image{position:relative;display:block;width:fit-content;max-width:100%;margin:0 auto;overflow:visible}:host ::ng-deep .ck-content figure.image:hover{z-index:99999!important}:host ::ng-deep .ck-content figure.image.image-style-align-left{float:left;margin:0 1em 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-left[style*=\"width:100\"]{float:none;margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-align-right{float:right;margin:0 0 0 1em}:host ::ng-deep .ck-content figure.image.image-style-align-right[style*=\"width:100\"]{float:none;margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image.image-style-block-align-left{margin:0 auto 0 0}:host ::ng-deep .ck-content figure.image.image-style-block-align-right{margin:0 0 0 auto}:host ::ng-deep .ck-content figure.image .ck-progress-bar{position:absolute;bottom:0;left:0;width:30%!important;height:3px;background:var(--sd-color-primary, #1565c0);border-radius:2px;z-index:10;pointer-events:none;animation:sd-progress-indeterminate 1.4s ease-in-out infinite}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar){overflow:hidden}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar) img{filter:blur(1px) brightness(.85);transition:filter .3s ease}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):after{content:\"\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:9;background:#ffffff40;border-radius:inherit}:host ::ng-deep .ck-content figure.image:has(.ck-progress-bar):before{content:\"\";position:absolute;top:50%;left:50%;width:28px;height:28px;margin:-14px 0 0 -14px;border:3px solid rgba(255,255,255,.5);border-top-color:var(--sd-color-primary, #1565c0);border-radius:50%;animation:sd-spinner .75s linear infinite;z-index:11;pointer-events:none}@keyframes sd-spinner{to{transform:rotate(360deg)}}@keyframes sd-progress-indeterminate{0%{left:-30%}to{left:100%}}\n"] }]
1068
1071
  }], ctorParameters: () => [] });
1069
1072
 
1070
1073
  /**