@sd-angular/core 19.0.0-beta.4 → 19.0.0-beta.40

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 (177) hide show
  1. package/assets/scss/ckeditor5.scss +60 -2
  2. package/assets/scss/core/bootstrap.scss +17 -0
  3. package/assets/scss/core/grid.scss +40 -0
  4. package/assets/scss/sd-core.scss +1 -0
  5. package/components/avatar/index.d.ts +1 -0
  6. package/components/avatar/src/avatar.component.d.ts +15 -0
  7. package/components/badge/src/badge.component.d.ts +77 -19
  8. package/components/button/src/button.component.d.ts +26 -28
  9. package/components/document-builder/index.d.ts +1 -0
  10. package/components/document-builder/src/document-builder.component.d.ts +20 -37
  11. package/components/document-builder/src/document-builder.model.d.ts +11 -10
  12. package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +9 -0
  13. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +43 -0
  14. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +50 -0
  15. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +5 -0
  16. package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +4 -0
  17. package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +31 -0
  18. package/components/document-builder/src/plugins/{image-upload.plugin.d.ts → image-upload/image-upload.plugin.d.ts} +0 -4
  19. package/components/document-builder/src/plugins/index.d.ts +11 -5
  20. package/components/document-builder/src/plugins/{page-orientation.plugin.d.ts → page-orientation/page-orientation.plugin.d.ts} +2 -2
  21. package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +14 -0
  22. package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +15 -0
  23. package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +25 -0
  24. package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +29 -0
  25. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +35 -0
  26. package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +15 -0
  27. package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +15 -0
  28. package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +15 -0
  29. package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +15 -0
  30. package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +15 -0
  31. package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +15 -0
  32. package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +54 -0
  33. package/components/document-builder/src/plugins/paste-handler/filters/replacetabswithinprewithspaces.d.ts +24 -0
  34. package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +27 -0
  35. package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +16 -0
  36. package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +25 -0
  37. package/components/document-builder/src/plugins/paste-handler/index.d.ts +35 -0
  38. package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +31 -0
  39. package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +31 -0
  40. package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +29 -0
  41. package/components/document-builder/src/plugins/paste-handler/types.d.ts +30 -0
  42. package/components/document-builder/src/plugins/table-custom/index.d.ts +34 -0
  43. package/components/index.d.ts +3 -0
  44. package/components/mini-editor/index.d.ts +2 -0
  45. package/components/mini-editor/src/mini-editor.component.d.ts +90 -0
  46. package/components/mini-editor/src/mini-editor.model.d.ts +42 -0
  47. package/components/side-drawer/src/side-drawer.component.d.ts +1 -2
  48. package/components/table/src/components/selector-action/action-filter.pipe.d.ts +11 -10
  49. package/components/table/src/directives/index.d.ts +2 -0
  50. package/components/table/src/directives/sd-table-column-filter-def.directive.d.ts +9 -0
  51. package/components/table/src/directives/sticky-shadow.directive.d.ts +17 -0
  52. package/components/table/src/models/table-column.model.d.ts +32 -32
  53. package/components/table/src/models/table-command.model.d.ts +7 -3
  54. package/components/table/src/models/table-item.model.d.ts +5 -3
  55. package/components/table/src/models/table-option-export.model.d.ts +3 -2
  56. package/components/table/src/models/table-option-selector.model.d.ts +11 -10
  57. package/components/table/src/models/table-option.model.d.ts +10 -8
  58. package/components/table/src/services/table-filter/table-filter.model.d.ts +2 -2
  59. package/components/table/src/table.component.d.ts +33 -35
  60. package/components/view/index.d.ts +1 -0
  61. package/components/view/src/view.component.d.ts +16 -0
  62. package/components/workflow/src/models/index.d.ts +1 -0
  63. package/directives/index.d.ts +1 -0
  64. package/directives/src/sd-href.directive.d.ts +9 -0
  65. package/fesm2022/sd-angular-core-components-avatar.mjs +90 -0
  66. package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -0
  67. package/fesm2022/sd-angular-core-components-badge.mjs +102 -91
  68. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  69. package/fesm2022/sd-angular-core-components-button.mjs +64 -96
  70. package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
  71. package/fesm2022/sd-angular-core-components-document-builder.mjs +3860 -963
  72. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  73. package/fesm2022/sd-angular-core-components-history.mjs +1 -1
  74. package/fesm2022/sd-angular-core-components-history.mjs.map +1 -1
  75. package/fesm2022/sd-angular-core-components-import-excel.mjs +1 -1
  76. package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
  77. package/fesm2022/sd-angular-core-components-mini-editor.mjs +326 -0
  78. package/fesm2022/sd-angular-core-components-mini-editor.mjs.map +1 -0
  79. package/fesm2022/sd-angular-core-components-preview.mjs +1 -1
  80. package/fesm2022/sd-angular-core-components-preview.mjs.map +1 -1
  81. package/fesm2022/sd-angular-core-components-side-drawer.mjs +21 -8
  82. package/fesm2022/sd-angular-core-components-side-drawer.mjs.map +1 -1
  83. package/fesm2022/sd-angular-core-components-tab-router.mjs +1 -1
  84. package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
  85. package/fesm2022/sd-angular-core-components-table.mjs +724 -472
  86. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  87. package/fesm2022/sd-angular-core-components-upload-file.mjs +1 -1
  88. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  89. package/fesm2022/sd-angular-core-components-view.mjs +45 -0
  90. package/fesm2022/sd-angular-core-components-view.mjs.map +1 -0
  91. package/fesm2022/sd-angular-core-components-workflow.mjs +33 -43
  92. package/fesm2022/sd-angular-core-components-workflow.mjs.map +1 -1
  93. package/fesm2022/sd-angular-core-components.mjs +3 -0
  94. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  95. package/fesm2022/sd-angular-core-directives.mjs +80 -27
  96. package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
  97. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +211 -357
  98. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  99. package/fesm2022/sd-angular-core-forms-date-range.mjs +145 -245
  100. package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
  101. package/fesm2022/sd-angular-core-forms-date.mjs +137 -271
  102. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  103. package/fesm2022/sd-angular-core-forms-datetime.mjs +138 -276
  104. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  105. package/fesm2022/sd-angular-core-forms-input-number.mjs +174 -336
  106. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  107. package/fesm2022/sd-angular-core-forms-input.mjs +130 -283
  108. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  109. package/fesm2022/sd-angular-core-forms-radio.mjs +5 -2
  110. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  111. package/fesm2022/sd-angular-core-forms-select.mjs +241 -416
  112. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  113. package/fesm2022/sd-angular-core-forms-textarea.mjs +133 -226
  114. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  115. package/fesm2022/sd-angular-core-modules-keycloak.mjs +126 -0
  116. package/fesm2022/sd-angular-core-modules-keycloak.mjs.map +1 -0
  117. package/fesm2022/sd-angular-core-modules-layout.mjs +54 -19
  118. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  119. package/fesm2022/sd-angular-core-modules.mjs +1 -1
  120. package/fesm2022/sd-angular-core-pipes.mjs +21 -1
  121. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  122. package/fesm2022/sd-angular-core-services-confirm.mjs +2 -2
  123. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  124. package/fesm2022/sd-angular-core-services-docx.mjs +173 -0
  125. package/fesm2022/sd-angular-core-services-docx.mjs.map +1 -0
  126. package/fesm2022/sd-angular-core-services-notify.mjs +2 -2
  127. package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
  128. package/fesm2022/sd-angular-core-services.mjs +1 -0
  129. package/fesm2022/sd-angular-core-services.mjs.map +1 -1
  130. package/fesm2022/sd-angular-core-utilities-extensions.mjs +10 -6
  131. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  132. package/fesm2022/sd-angular-core-utilities-models.mjs +15 -1
  133. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  134. package/forms/autocomplete/src/autocomplete.component.d.ts +50 -56
  135. package/forms/date/src/date.component.d.ts +41 -45
  136. package/forms/date-range/src/date-range.component.d.ts +28 -33
  137. package/forms/datetime/src/datetime.component.d.ts +41 -45
  138. package/forms/input/src/input.component.d.ts +46 -56
  139. package/forms/input-number/src/input-number.component.d.ts +47 -54
  140. package/forms/select/src/select.component.d.ts +50 -58
  141. package/forms/textarea/src/textarea.component.d.ts +34 -41
  142. package/modules/index.d.ts +1 -1
  143. package/modules/keycloak/index.d.ts +4 -0
  144. package/modules/keycloak/keycloak.configuration.d.ts +11 -0
  145. package/modules/keycloak/keycloak.interceptor.d.ts +2 -0
  146. package/modules/keycloak/keycloak.module.d.ts +18 -0
  147. package/modules/keycloak/keycloak.service.d.ts +14 -0
  148. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +1 -0
  149. package/modules/layout/components/sidebar-v1/components/user/user.component.d.ts +5 -2
  150. package/modules/layout/configurations/layout.configuration.d.ts +3 -0
  151. package/modules/layout/services/storage/storage.service.d.ts +1 -0
  152. package/package.json +89 -71
  153. package/pipes/index.d.ts +1 -0
  154. package/pipes/src/empty.pipe.d.ts +7 -0
  155. package/sd-angular-core-19.0.0-beta.40.tgz +0 -0
  156. package/services/confirm/src/lib/confirm.service.d.ts +1 -0
  157. package/services/docx/index.d.ts +1 -0
  158. package/services/docx/src/lib/docx.model.d.ts +9 -0
  159. package/services/docx/src/lib/docx.service.d.ts +13 -0
  160. package/services/docx/src/public-api.d.ts +2 -0
  161. package/services/index.d.ts +1 -0
  162. package/utilities/extensions/src/string.extension.d.ts +2 -0
  163. package/utilities/models/index.d.ts +3 -0
  164. package/utilities/models/src/filter.model.d.ts +14 -2
  165. package/utilities/models/src/icon.model.d.ts +2 -0
  166. package/utilities/models/src/nested-key-of.model.d.ts +5 -0
  167. package/utilities/models/src/pattern.model.d.ts +1 -1
  168. package/utilities/models/src/unwrap-signal.model.d.ts +6 -0
  169. package/components/document-builder/src/plugins/comment.plugin.d.ts +0 -4
  170. package/components/document-builder/src/plugins/table-fit.plugin.d.ts +0 -4
  171. package/fesm2022/sd-angular-core-modules-oidc.mjs +0 -127
  172. package/fesm2022/sd-angular-core-modules-oidc.mjs.map +0 -1
  173. package/modules/oidc/dynamic-sts.loader.d.ts +0 -11
  174. package/modules/oidc/index.d.ts +0 -2
  175. package/modules/oidc/oidc.configuration.d.ts +0 -11
  176. package/modules/oidc/oidc.module.d.ts +0 -14
  177. /package/components/document-builder/src/plugins/{variable.plugin.d.ts → variable/variable.plugin.d.ts} +0 -0
@@ -1,3 +1,4 @@
1
+ export * from '@sd-angular/core/components/avatar';
1
2
  export * from '@sd-angular/core/components/button';
2
3
  export * from '@sd-angular/core/components/badge';
3
4
  export * from '@sd-angular/core/components/tab-router';
@@ -13,6 +14,8 @@ export * from '@sd-angular/core/components/anchor-v2';
13
14
  export * from '@sd-angular/core/components/query-builder';
14
15
  export * from '@sd-angular/core/components/import-excel';
15
16
  export * from '@sd-angular/core/components/document-builder';
17
+ export * from '@sd-angular/core/components/mini-editor';
18
+ export * from '@sd-angular/core/components/view';
16
19
 
17
20
  /**
18
21
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-components.mjs","sources":["../../../projects/sd-angular/components/sd-angular-core-components.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;AAEG"}
1
+ {"version":3,"file":"sd-angular-core-components.mjs","sources":["../../../projects/sd-angular/components/sd-angular-core-components.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AAEG"}
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { HostListener, Directive, Input } from '@angular/core';
2
+ import { HostListener, Directive, Input, inject, HostBinding } from '@angular/core';
3
3
  import { SdUtilities } from '@sd-angular/core/utilities/extensions';
4
+ import { Router } from '@angular/router';
4
5
 
5
6
  class SdScrollDirective {
6
7
  elementRef;
@@ -95,36 +96,45 @@ class SdHoverCopyDirective {
95
96
  renderer;
96
97
  copyText;
97
98
  sdHoverCopyDisabled = false;
98
- #copyButton;
99
+ #copyButton = null;
99
100
  #tooltip;
100
101
  #defaultTooltip = 'Sao chép';
101
102
  constructor(el, renderer) {
102
103
  this.el = el;
103
104
  this.renderer = renderer;
104
105
  }
106
+ // https://onemount.atlassian.net/browse/SM-2287
107
+ // Hiện tại khi sdHoverCopyDisabled = true, directive chỉ dùng opacity: 0 và pointerEvents: 'none' để ẩn nút, nhưng điều này không hoàn toàn ngăn chặn được việc click trong một số trường hợp.
108
+ // Giải pháp: Remove khỏi DOM nếu column không được enable
105
109
  ngOnInit() {
106
- this.#initCopyButton();
110
+ if (!this.sdHoverCopyDisabled) {
111
+ this.#createAndAppendCopyButton();
112
+ }
107
113
  }
108
114
  ngOnChanges(changes) {
109
- if (changes['sdHoverCopyDisabled'] && !changes['sdHoverCopyDisabled'].firstChange) {
115
+ if (changes['sdHoverCopyDisabled']) {
110
116
  if (!this.sdHoverCopyDisabled) {
111
- this.#showCopyButton();
117
+ // Enable - create and show button if not exists
118
+ if (!this.#copyButton) {
119
+ this.#createAndAppendCopyButton();
120
+ }
112
121
  }
113
122
  else {
114
- this.#hideCopyButton();
123
+ // Disable - remove button from DOM
124
+ this.#removeCopyButton();
115
125
  }
116
126
  }
117
127
  }
118
- #initCopyButton() {
128
+ #createAndAppendCopyButton() {
119
129
  const parent = this.el.nativeElement;
120
130
  this.renderer.setStyle(parent, 'position', 'relative');
121
131
  // Create button
122
132
  this.#copyButton = this.renderer.createElement('button');
123
133
  this.renderer.setStyle(this.#copyButton, 'position', 'absolute');
124
- this.renderer.setStyle(this.#copyButton, 'top', '0');
134
+ this.renderer.setStyle(this.#copyButton, 'top', '50%');
135
+ this.renderer.setStyle(this.#copyButton, 'transform', 'translateY(-50%)');
125
136
  this.renderer.setStyle(this.#copyButton, 'right', '4px');
126
- this.renderer.setStyle(this.#copyButton, 'opacity', '0');
127
- this.renderer.setStyle(this.#copyButton, 'transition', 'opacity 0.2s');
137
+ this.renderer.setStyle(this.#copyButton, 'display', 'none');
128
138
  this.renderer.setStyle(this.#copyButton, 'z-index', '10');
129
139
  this.renderer.setStyle(this.#copyButton, 'background', 'transparent');
130
140
  this.renderer.setStyle(this.#copyButton, 'border', 'none');
@@ -164,6 +174,7 @@ class SdHoverCopyDirective {
164
174
  this.renderer.setStyle(this.#tooltip, 'opacity', '0');
165
175
  this.renderer.setStyle(this.#tooltip, 'transition', 'opacity 0.2s');
166
176
  this.renderer.setStyle(this.#tooltip, 'pointerEvents', 'none');
177
+ this.renderer.setStyle(this.#tooltip, 'userSelect', 'none');
167
178
  this.renderer.appendChild(this.#copyButton, this.#tooltip);
168
179
  this.renderer.appendChild(parent, this.#copyButton);
169
180
  // Listen click
@@ -175,7 +186,12 @@ class SdHoverCopyDirective {
175
186
  setTimeout(() => this.#hideTooltip(), 1000);
176
187
  }
177
188
  });
178
- this.#hideCopyButton();
189
+ }
190
+ #removeCopyButton() {
191
+ if (this.#copyButton) {
192
+ this.renderer.removeChild(this.el.nativeElement, this.#copyButton);
193
+ this.#copyButton = null;
194
+ }
179
195
  }
180
196
  #showTooltip(message) {
181
197
  this.renderer.setProperty(this.#tooltip, 'innerText', message);
@@ -186,25 +202,14 @@ class SdHoverCopyDirective {
186
202
  this.renderer.setStyle(this.#tooltip, 'opacity', '0');
187
203
  }
188
204
  onMouseEnter() {
189
- if (!this.sdHoverCopyDisabled) {
190
- this.renderer.setStyle(this.#copyButton, 'opacity', '1');
191
- this.renderer.setStyle(this.#copyButton, 'pointerEvents', 'auto');
205
+ if (!this.sdHoverCopyDisabled && this.#copyButton) {
206
+ this.renderer.setStyle(this.#copyButton, 'display', 'block');
192
207
  }
193
208
  }
194
209
  onMouseLeave() {
195
- this.renderer.setStyle(this.#copyButton, 'opacity', '0');
196
- this.#hideTooltip();
197
- }
198
- #hideCopyButton() {
199
- if (this.#copyButton) {
200
- this.renderer.setStyle(this.#copyButton, 'opacity', '0');
201
- this.renderer.setStyle(this.#copyButton, 'pointerEvents', 'none');
202
- }
203
- }
204
- #showCopyButton() {
205
210
  if (this.#copyButton) {
206
- this.renderer.setStyle(this.#copyButton, 'opacity', '1');
207
- this.renderer.setStyle(this.#copyButton, 'pointerEvents', 'auto');
211
+ this.renderer.setStyle(this.#copyButton, 'display', 'none');
212
+ this.#hideTooltip();
208
213
  }
209
214
  }
210
215
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SdHoverCopyDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
@@ -228,9 +233,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
228
233
  args: ['mouseleave']
229
234
  }] } });
230
235
 
236
+ class SdHrefDirective {
237
+ #router = inject(Router);
238
+ // Nhận vào url đã được xử lý (từ Pipe của bạn)
239
+ url;
240
+ // Tự động bind giá trị url vào thuộc tính href của thẻ <a>
241
+ get href() {
242
+ return this.url || 'javascript:;';
243
+ }
244
+ onClick(event) {
245
+ if (!this.url)
246
+ return;
247
+ if (this.url.startsWith('http')) {
248
+ // Nếu là link ngoài -> Mở tab mới và ngăn chặn hành vi mặc định của thẻ a (để không chuyển trang hiện tại)
249
+ window.open(this.url, '_blank');
250
+ event.preventDefault();
251
+ }
252
+ else {
253
+ // Nếu là link nội bộ -> Ngăn chặn full-page reload, dùng Angular Router để điều hướng
254
+ event.preventDefault();
255
+ const [path, queryString] = this.url.split('?');
256
+ // Bạn có thể dùng hàm SdUtilities.parseQueryParams của bạn ở đây,
257
+ // hoặc dùng cách native URLSearchParams như sau:
258
+ const params = new URLSearchParams(queryString || '');
259
+ const queryParams = {};
260
+ params.forEach((value, key) => (queryParams[key] = value));
261
+ this.#router.navigate([path], { queryParams });
262
+ }
263
+ }
264
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SdHrefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
265
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: SdHrefDirective, isStandalone: true, selector: "a[sdHref]", inputs: { url: ["sdHref", "url"] }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.href": "this.href" } }, ngImport: i0 });
266
+ }
267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SdHrefDirective, decorators: [{
268
+ type: Directive,
269
+ args: [{
270
+ selector: 'a[sdHref]',
271
+ standalone: true,
272
+ }]
273
+ }], propDecorators: { url: [{
274
+ type: Input,
275
+ args: ['sdHref']
276
+ }], href: [{
277
+ type: HostBinding,
278
+ args: ['attr.href']
279
+ }], onClick: [{
280
+ type: HostListener,
281
+ args: ['click', ['$event']]
282
+ }] } });
283
+
231
284
  /**
232
285
  * Generated bundle index. Do not edit.
233
286
  */
234
287
 
235
- export { SdDesktopDirective, SdHoverCopyDirective, SdMobileDirective, SdScrollDirective };
288
+ export { SdDesktopDirective, SdHoverCopyDirective, SdHrefDirective, SdMobileDirective, SdScrollDirective };
236
289
  //# sourceMappingURL=sd-angular-core-directives.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-directives.mjs","sources":["../../../projects/sd-angular/directives/src/sd-scroll.directive.ts","../../../projects/sd-angular/directives/src/sd-desktop.directive.ts","../../../projects/sd-angular/directives/src/sd-mobile.directive.ts","../../../projects/sd-angular/directives/src/sd-hover-copy.directive.ts","../../../projects/sd-angular/directives/sd-angular-core-directives.ts"],"sourcesContent":["import { Directive, ElementRef, HostListener, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdScroll]',\r\n standalone: true,\r\n})\r\nexport class SdScrollDirective implements OnInit {\r\n #overflowX: 'hidden' | 'auto' | 'overlay' = 'hidden';\r\n #overflowY: 'hidden' | 'auto' | 'overlay' = 'auto';\r\n @HostListener('mouseover')\r\n onMouseOver() {\r\n this.#overflowX = 'auto';\r\n // this.#overflowY = 'auto';\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'overflow-x', this.#overflowX);\r\n // this.renderer.setStyle(this.elementRef.nativeElement, 'overflow-y', this.#overflowY);\r\n }\r\n\r\n @HostListener('mouseout')\r\n onMouseOut() {\r\n this.#overflowX = 'hidden';\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'overflow-x', this.#overflowX);\r\n }\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.renderer.setStyle(this.elementRef.nativeElement, '-webkit-transform', 'translate3d(0, 0, 0)');\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'overflow-x', this.#overflowX);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'overflow-y', this.#overflowY);\r\n }\r\n\r\n scrollTop = () => {\r\n setTimeout(() => {\r\n if (this.elementRef?.nativeElement) {\r\n this.elementRef.nativeElement.scrollTop = 0;\r\n }\r\n }, 1);\r\n };\r\n}\r\n","import { Directive, ViewContainerRef, TemplateRef } from '@angular/core';\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\n\n@Directive({\n selector: '[sdDesktop]',\n})\nexport class SdDesktopDirective {\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainerRef: ViewContainerRef\n ) {\n if (!SdUtilities.isMobile()) {\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Directive, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\n\n@Directive({\n selector: '[sdMobile]',\n})\nexport class SdMobileDirective {\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainerRef: ViewContainerRef\n ) {\n if (SdUtilities.isMobile()) {\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Directive, ElementRef, Input, Renderer2, HostListener, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\n\r\n@Directive({\r\n selector: '[sdHoverCopy]',\r\n})\r\nexport class SdHoverCopyDirective implements OnInit, OnChanges {\r\n @Input({ alias: 'sdHoverCopy', required: true }) copyText!: string;\r\n @Input() sdHoverCopyDisabled = false;\r\n\r\n #copyButton!: HTMLElement;\r\n #tooltip!: HTMLElement;\r\n #defaultTooltip = 'Sao chép';\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.#initCopyButton();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['sdHoverCopyDisabled'] && !changes['sdHoverCopyDisabled'].firstChange) {\r\n if (!this.sdHoverCopyDisabled) {\r\n this.#showCopyButton();\r\n } else {\r\n this.#hideCopyButton();\r\n }\r\n }\r\n }\r\n\r\n #initCopyButton(): void {\r\n const parent = this.el.nativeElement;\r\n this.renderer.setStyle(parent, 'position', 'relative');\r\n\r\n // Create button\r\n this.#copyButton = this.renderer.createElement('button');\r\n this.renderer.setStyle(this.#copyButton, 'position', 'absolute');\r\n this.renderer.setStyle(this.#copyButton, 'top', '0');\r\n this.renderer.setStyle(this.#copyButton, 'right', '4px');\r\n this.renderer.setStyle(this.#copyButton, 'opacity', '0');\r\n this.renderer.setStyle(this.#copyButton, 'transition', 'opacity 0.2s');\r\n this.renderer.setStyle(this.#copyButton, 'z-index', '10');\r\n this.renderer.setStyle(this.#copyButton, 'background', 'transparent');\r\n this.renderer.setStyle(this.#copyButton, 'border', 'none');\r\n this.renderer.setStyle(this.#copyButton, 'cursor', 'pointer');\r\n this.renderer.setStyle(this.#copyButton, 'padding', '1px');\r\n this.renderer.setStyle(this.#copyButton, 'border-radius', '3px');\r\n this.renderer.setStyle(this.#copyButton, 'padding', '5px');\r\n this.renderer.setStyle(this.#copyButton, 'line-height', '1');\r\n this.renderer.setStyle(this.#copyButton, 'background-color', 'var(--sd-black100)');\r\n \r\n\r\n // Add inline SVG icon\r\n const svg = this.renderer.createElement('svg', 'svg');\r\n this.renderer.addClass(svg, 'text-secondary');\r\n this.renderer.setAttribute(svg, 'width', '14');\r\n this.renderer.setAttribute(svg, 'height', '14');\r\n this.renderer.setAttribute(svg, 'viewBox', '0 0 24 24');\r\n this.renderer.setAttribute(svg, 'fill', 'none');\r\n this.renderer.setAttribute(svg, 'xmlns', 'http://www.w3.org/2000/svg');\r\n \r\n\r\n const path = this.renderer.createElement('path', 'svg');\r\n this.renderer.setAttribute(\r\n path,\r\n 'd',\r\n 'M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM20 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H20C21.1 23 22 22.1 22 21V7C22 5.9 21.1 5 20 5ZM20 21H8V7H20V21Z'\r\n );\r\n this.renderer.setAttribute(path, 'fill', 'currentColor');\r\n this.renderer.appendChild(svg, path);\r\n this.renderer.appendChild(this.#copyButton, svg);\r\n\r\n // Tooltip\r\n this.#tooltip = this.renderer.createElement('span');\r\n this.renderer.setProperty(this.#tooltip, 'innerText', this.#defaultTooltip);\r\n this.renderer.setStyle(this.#tooltip, 'position', 'absolute');\r\n this.renderer.setStyle(this.#tooltip, 'bottom', '100%');\r\n this.renderer.setStyle(this.#tooltip, 'left', '50%');\r\n this.renderer.setStyle(this.#tooltip, 'transform', 'translateX(-50%)');\r\n this.renderer.setStyle(this.#tooltip, 'marginBottom', '4px');\r\n this.renderer.setStyle(this.#tooltip, 'background', '#333');\r\n this.renderer.setStyle(this.#tooltip, 'color', '#fff');\r\n this.renderer.setStyle(this.#tooltip, 'padding', '2px 6px');\r\n this.renderer.setStyle(this.#tooltip, 'borderRadius', '4px');\r\n this.renderer.setStyle(this.#tooltip, 'fontSize', '12px');\r\n this.renderer.setStyle(this.#tooltip, 'whiteSpace', 'nowrap');\r\n this.renderer.setStyle(this.#tooltip, 'opacity', '0');\r\n this.renderer.setStyle(this.#tooltip, 'transition', 'opacity 0.2s');\r\n this.renderer.setStyle(this.#tooltip, 'pointerEvents', 'none');\r\n\r\n this.renderer.appendChild(this.#copyButton, this.#tooltip);\r\n this.renderer.appendChild(parent, this.#copyButton);\r\n\r\n // Listen click\r\n this.renderer.listen(this.#copyButton, 'click', () => {\r\n console.log('click', this.copyText);\r\n if (this.copyText && !this.sdHoverCopyDisabled) {\r\n SdUtilities.copyToClipboard(String(this.copyText));\r\n this.#showTooltip('Copied');\r\n setTimeout(() => this.#hideTooltip(), 1000);\r\n }\r\n });\r\n\r\n this.#hideCopyButton();\r\n }\r\n\r\n #showTooltip(message: string) {\r\n this.renderer.setProperty(this.#tooltip, 'innerText', message);\r\n this.renderer.setStyle(this.#tooltip, 'opacity', '1');\r\n }\r\n\r\n #hideTooltip() {\r\n this.renderer.setProperty(this.#tooltip, 'innerText', this.#defaultTooltip);\r\n this.renderer.setStyle(this.#tooltip, 'opacity', '0');\r\n }\r\n\r\n @HostListener('mouseenter')\r\n onMouseEnter() {\r\n if (!this.sdHoverCopyDisabled) {\r\n this.renderer.setStyle(this.#copyButton, 'opacity', '1');\r\n this.renderer.setStyle(this.#copyButton, 'pointerEvents', 'auto');\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave() {\r\n this.renderer.setStyle(this.#copyButton, 'opacity', '0');\r\n this.#hideTooltip();\r\n }\r\n\r\n #hideCopyButton(): void {\r\n if (this.#copyButton) {\r\n this.renderer.setStyle(this.#copyButton, 'opacity', '0');\r\n this.renderer.setStyle(this.#copyButton, 'pointerEvents', 'none');\r\n }\r\n }\r\n\r\n #showCopyButton(): void {\r\n if (this.#copyButton) {\r\n this.renderer.setStyle(this.#copyButton, 'opacity', '1');\r\n this.renderer.setStyle(this.#copyButton, 'pointerEvents', 'auto');\r\n }\r\n }\r\n}\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-directives.mjs","sources":["../../../projects/sd-angular/directives/src/sd-scroll.directive.ts","../../../projects/sd-angular/directives/src/sd-desktop.directive.ts","../../../projects/sd-angular/directives/src/sd-mobile.directive.ts","../../../projects/sd-angular/directives/src/sd-hover-copy.directive.ts","../../../projects/sd-angular/directives/src/sd-href.directive.ts","../../../projects/sd-angular/directives/sd-angular-core-directives.ts"],"sourcesContent":["import { Directive, ElementRef, HostListener, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdScroll]',\r\n standalone: true,\r\n})\r\nexport class SdScrollDirective implements OnInit {\r\n #overflowX: 'hidden' | 'auto' | 'overlay' = 'hidden';\r\n #overflowY: 'hidden' | 'auto' | 'overlay' = 'auto';\r\n @HostListener('mouseover')\r\n onMouseOver() {\r\n this.#overflowX = 'auto';\r\n // this.#overflowY = 'auto';\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'overflow-x', this.#overflowX);\r\n // this.renderer.setStyle(this.elementRef.nativeElement, 'overflow-y', this.#overflowY);\r\n }\r\n\r\n @HostListener('mouseout')\r\n onMouseOut() {\r\n this.#overflowX = 'hidden';\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'overflow-x', this.#overflowX);\r\n }\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.renderer.setStyle(this.elementRef.nativeElement, '-webkit-transform', 'translate3d(0, 0, 0)');\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'overflow-x', this.#overflowX);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'overflow-y', this.#overflowY);\r\n }\r\n\r\n scrollTop = () => {\r\n setTimeout(() => {\r\n if (this.elementRef?.nativeElement) {\r\n this.elementRef.nativeElement.scrollTop = 0;\r\n }\r\n }, 1);\r\n };\r\n}\r\n","import { Directive, ViewContainerRef, TemplateRef } from '@angular/core';\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\n\n@Directive({\n selector: '[sdDesktop]',\n})\nexport class SdDesktopDirective {\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainerRef: ViewContainerRef\n ) {\n if (!SdUtilities.isMobile()) {\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Directive, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\n\n@Directive({\n selector: '[sdMobile]',\n})\nexport class SdMobileDirective {\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainerRef: ViewContainerRef\n ) {\n if (SdUtilities.isMobile()) {\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Directive, ElementRef, Input, Renderer2, HostListener, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\n\r\n@Directive({\r\n selector: '[sdHoverCopy]',\r\n})\r\nexport class SdHoverCopyDirective implements OnInit, OnChanges {\r\n @Input({ alias: 'sdHoverCopy', required: true }) copyText!: string;\r\n @Input() sdHoverCopyDisabled = false;\r\n\r\n #copyButton: HTMLElement | null = null;\r\n #tooltip!: HTMLElement;\r\n #defaultTooltip = 'Sao chép';\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2\r\n ) {}\r\n\r\n // https://onemount.atlassian.net/browse/SM-2287\r\n // Hiện tại khi sdHoverCopyDisabled = true, directive chỉ dùng opacity: 0 và pointerEvents: 'none' để ẩn nút, nhưng điều này không hoàn toàn ngăn chặn được việc click trong một số trường hợp.\r\n // Giải pháp: Remove khỏi DOM nếu column không được enable\r\n ngOnInit(): void {\r\n if (!this.sdHoverCopyDisabled) {\r\n this.#createAndAppendCopyButton();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['sdHoverCopyDisabled']) {\r\n if (!this.sdHoverCopyDisabled) {\r\n // Enable - create and show button if not exists\r\n if (!this.#copyButton) {\r\n this.#createAndAppendCopyButton();\r\n }\r\n } else {\r\n // Disable - remove button from DOM\r\n this.#removeCopyButton();\r\n }\r\n }\r\n }\r\n\r\n #createAndAppendCopyButton(): void {\r\n const parent = this.el.nativeElement;\r\n this.renderer.setStyle(parent, 'position', 'relative');\r\n\r\n // Create button\r\n this.#copyButton = this.renderer.createElement('button');\r\n this.renderer.setStyle(this.#copyButton, 'position', 'absolute');\r\n this.renderer.setStyle(this.#copyButton, 'top', '50%');\r\n this.renderer.setStyle(this.#copyButton, 'transform', 'translateY(-50%)');\r\n this.renderer.setStyle(this.#copyButton, 'right', '4px');\r\n this.renderer.setStyle(this.#copyButton, 'display', 'none');\r\n this.renderer.setStyle(this.#copyButton, 'z-index', '10');\r\n this.renderer.setStyle(this.#copyButton, 'background', 'transparent');\r\n this.renderer.setStyle(this.#copyButton, 'border', 'none');\r\n this.renderer.setStyle(this.#copyButton, 'cursor', 'pointer');\r\n this.renderer.setStyle(this.#copyButton, 'padding', '1px');\r\n this.renderer.setStyle(this.#copyButton, 'border-radius', '3px');\r\n this.renderer.setStyle(this.#copyButton, 'padding', '5px');\r\n this.renderer.setStyle(this.#copyButton, 'line-height', '1');\r\n this.renderer.setStyle(this.#copyButton, 'background-color', 'var(--sd-black100)');\r\n\r\n // Add inline SVG icon\r\n const svg = this.renderer.createElement('svg', 'svg');\r\n this.renderer.addClass(svg, 'text-secondary');\r\n this.renderer.setAttribute(svg, 'width', '14');\r\n this.renderer.setAttribute(svg, 'height', '14');\r\n this.renderer.setAttribute(svg, 'viewBox', '0 0 24 24');\r\n this.renderer.setAttribute(svg, 'fill', 'none');\r\n this.renderer.setAttribute(svg, 'xmlns', 'http://www.w3.org/2000/svg');\r\n\r\n const path = this.renderer.createElement('path', 'svg');\r\n this.renderer.setAttribute(\r\n path,\r\n 'd',\r\n 'M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM20 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H20C21.1 23 22 22.1 22 21V7C22 5.9 21.1 5 20 5ZM20 21H8V7H20V21Z'\r\n );\r\n this.renderer.setAttribute(path, 'fill', 'currentColor');\r\n this.renderer.appendChild(svg, path);\r\n this.renderer.appendChild(this.#copyButton, svg);\r\n\r\n // Tooltip\r\n this.#tooltip = this.renderer.createElement('span');\r\n this.renderer.setProperty(this.#tooltip, 'innerText', this.#defaultTooltip);\r\n this.renderer.setStyle(this.#tooltip, 'position', 'absolute');\r\n this.renderer.setStyle(this.#tooltip, 'bottom', '100%');\r\n this.renderer.setStyle(this.#tooltip, 'left', '50%');\r\n this.renderer.setStyle(this.#tooltip, 'transform', 'translateX(-50%)');\r\n this.renderer.setStyle(this.#tooltip, 'marginBottom', '4px');\r\n this.renderer.setStyle(this.#tooltip, 'background', '#333');\r\n this.renderer.setStyle(this.#tooltip, 'color', '#fff');\r\n this.renderer.setStyle(this.#tooltip, 'padding', '2px 6px');\r\n this.renderer.setStyle(this.#tooltip, 'borderRadius', '4px');\r\n this.renderer.setStyle(this.#tooltip, 'fontSize', '12px');\r\n this.renderer.setStyle(this.#tooltip, 'whiteSpace', 'nowrap');\r\n this.renderer.setStyle(this.#tooltip, 'opacity', '0');\r\n this.renderer.setStyle(this.#tooltip, 'transition', 'opacity 0.2s');\r\n this.renderer.setStyle(this.#tooltip, 'pointerEvents', 'none');\r\n this.renderer.setStyle(this.#tooltip, 'userSelect', 'none');\r\n\r\n this.renderer.appendChild(this.#copyButton, this.#tooltip);\r\n this.renderer.appendChild(parent, this.#copyButton);\r\n\r\n // Listen click\r\n this.renderer.listen(this.#copyButton, 'click', () => {\r\n console.log('click', this.copyText);\r\n if (this.copyText && !this.sdHoverCopyDisabled) {\r\n SdUtilities.copyToClipboard(String(this.copyText));\r\n this.#showTooltip('Copied');\r\n setTimeout(() => this.#hideTooltip(), 1000);\r\n }\r\n });\r\n }\r\n\r\n #removeCopyButton(): void {\r\n if (this.#copyButton) {\r\n this.renderer.removeChild(this.el.nativeElement, this.#copyButton);\r\n this.#copyButton = null;\r\n }\r\n }\r\n\r\n #showTooltip(message: string) {\r\n this.renderer.setProperty(this.#tooltip, 'innerText', message);\r\n this.renderer.setStyle(this.#tooltip, 'opacity', '1');\r\n }\r\n\r\n #hideTooltip() {\r\n this.renderer.setProperty(this.#tooltip, 'innerText', this.#defaultTooltip);\r\n this.renderer.setStyle(this.#tooltip, 'opacity', '0');\r\n }\r\n\r\n @HostListener('mouseenter')\r\n onMouseEnter() {\r\n if (!this.sdHoverCopyDisabled && this.#copyButton) {\r\n this.renderer.setStyle(this.#copyButton, 'display', 'block');\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave() {\r\n if (this.#copyButton) {\r\n this.renderer.setStyle(this.#copyButton, 'display', 'none');\r\n this.#hideTooltip();\r\n }\r\n }\r\n}\r\n","import { Directive, HostBinding, HostListener, inject, Input } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\n@Directive({\r\n selector: 'a[sdHref]',\r\n standalone: true,\r\n})\r\nexport class SdHrefDirective {\r\n readonly #router = inject(Router);\r\n // Nhận vào url đã được xử lý (từ Pipe của bạn)\r\n @Input('sdHref') url!: string;\r\n // Tự động bind giá trị url vào thuộc tính href của thẻ <a>\r\n @HostBinding('attr.href') get href() {\r\n return this.url || 'javascript:;';\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: Event) {\r\n if (!this.url) return;\r\n if (this.url.startsWith('http')) {\r\n // Nếu là link ngoài -> Mở tab mới và ngăn chặn hành vi mặc định của thẻ a (để không chuyển trang hiện tại)\r\n window.open(this.url, '_blank');\r\n event.preventDefault();\r\n } else {\r\n // Nếu là link nội bộ -> Ngăn chặn full-page reload, dùng Angular Router để điều hướng\r\n event.preventDefault();\r\n const [path, queryString] = this.url.split('?');\r\n // Bạn có thể dùng hàm SdUtilities.parseQueryParams của bạn ở đây,\r\n // hoặc dùng cách native URLSearchParams như sau:\r\n const params = new URLSearchParams(queryString || '');\r\n const queryParams: Record<string, string> = {};\r\n params.forEach((value, key) => (queryParams[key] = value));\r\n this.#router.navigate([path], { queryParams });\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}