@sd-angular/core 19.0.0-beta.89 → 19.0.0-beta.91

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 (275) hide show
  1. package/assets/scss/README.md +524 -0
  2. package/assets/scss/core/bootstrap.scss +0 -125
  3. package/assets/scss/core/utilities/_base.scss +333 -0
  4. package/assets/scss/core/utilities/_border.scss +22 -0
  5. package/assets/scss/core/utilities/_display.scss +10 -0
  6. package/assets/scss/core/utilities/_elevation.scss +80 -0
  7. package/assets/scss/core/utilities/_flexbox.scss +54 -0
  8. package/assets/scss/core/utilities/_gap.scss +9 -0
  9. package/assets/scss/core/utilities/_grid.scss +142 -0
  10. package/assets/scss/core/utilities/_index.scss +17 -0
  11. package/assets/scss/core/utilities/_misc.scss +20 -0
  12. package/assets/scss/core/utilities/_overflow.scss +9 -0
  13. package/assets/scss/core/utilities/_position.scss +8 -0
  14. package/assets/scss/core/utilities/_sizing.scss +28 -0
  15. package/assets/scss/core/utilities/_spacing.scss +31 -0
  16. package/assets/scss/core/utilities/_typography.scss +99 -0
  17. package/assets/scss/sd-core.scss +4 -6
  18. package/components/anchor/index.d.ts +1 -2
  19. package/components/anchor/src/components/anchor-vertical/{anchor-list/anchor-list.component.d.ts → anchor-vertical-list.component.d.ts} +4 -4
  20. package/components/anchor/src/components/index.d.ts +1 -1
  21. package/components/anchor/src/index.d.ts +2 -0
  22. package/components/anchor/src/models/index.d.ts +1 -1
  23. package/components/anchor/src/models/{anchor.model.d.ts → sd-anchor.model.d.ts} +0 -5
  24. package/fesm2022/sd-angular-core-components-anchor.mjs +9 -9
  25. package/fesm2022/sd-angular-core-components-anchor.mjs.map +1 -1
  26. package/fesm2022/sd-angular-core-components-import-excel.mjs +2 -2
  27. package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
  28. package/fesm2022/sd-angular-core-components-modal.mjs +2 -2
  29. package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
  30. package/fesm2022/sd-angular-core-components-table.mjs +4 -4
  31. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  32. package/fesm2022/sd-angular-core-components-upload-file.mjs +4 -4
  33. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  34. package/fesm2022/sd-angular-core-components-workflow.mjs +9 -9
  35. package/fesm2022/sd-angular-core-components-workflow.mjs.map +1 -1
  36. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +2 -2
  37. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  38. package/fesm2022/sd-angular-core-forms-date-range.mjs +2 -2
  39. package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
  40. package/fesm2022/sd-angular-core-forms-date.mjs +2 -2
  41. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  42. package/fesm2022/sd-angular-core-forms-datetime.mjs +428 -70
  43. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  44. package/fesm2022/sd-angular-core-forms-input-number.mjs +13 -5
  45. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  46. package/fesm2022/sd-angular-core-forms-select.mjs +2 -2
  47. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  48. package/fesm2022/sd-angular-core-modules-layout.mjs +2 -2
  49. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  50. package/fesm2022/sd-angular-core-pipes.mjs +3 -4
  51. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  52. package/fesm2022/sd-angular-core-services-api.mjs +2 -1
  53. package/fesm2022/sd-angular-core-services-api.mjs.map +1 -1
  54. package/forms/datetime/src/datetime.component.d.ts +16 -6
  55. package/forms/datetime/src/popup/sd-datetime-picker.component.d.ts +38 -0
  56. package/forms/datetime/src/popup/sd-time-spinner.component.d.ts +41 -0
  57. package/forms/input-number/src/input-number.component.d.ts +2 -1
  58. package/package.json +52 -52
  59. package/pipes/src/format-number.pipe.d.ts +1 -1
  60. package/sd-angular-core-19.0.0-beta.91.tgz +0 -0
  61. package/services/api/src/api.model.d.ts +1 -0
  62. package/assets/img/1D UX System.zip +0 -0
  63. package/assets/img/Popup/Vector.png +0 -0
  64. package/assets/img/empty.png +0 -0
  65. package/assets/img/empty.svg +0 -27
  66. package/assets/img/file-types/eps/001-file.eps +0 -143
  67. package/assets/img/file-types/eps/002-file-1.eps +0 -136
  68. package/assets/img/file-types/eps/003-file-2.eps +0 -130
  69. package/assets/img/file-types/eps/004-file-3.eps +0 -127
  70. package/assets/img/file-types/eps/005-file-4.eps +0 -120
  71. package/assets/img/file-types/eps/006-file-5.eps +0 -133
  72. package/assets/img/file-types/eps/007-file-6.eps +0 -133
  73. package/assets/img/file-types/eps/008-file-7.eps +0 -144
  74. package/assets/img/file-types/eps/009-file-8.eps +0 -150
  75. package/assets/img/file-types/eps/010-file-9.eps +0 -155
  76. package/assets/img/file-types/eps/011-file-10.eps +0 -124
  77. package/assets/img/file-types/eps/012-file-11.eps +0 -147
  78. package/assets/img/file-types/eps/013-file-12.eps +0 -125
  79. package/assets/img/file-types/eps/014-file-13.eps +0 -129
  80. package/assets/img/file-types/eps/015-file-14.eps +0 -143
  81. package/assets/img/file-types/eps/016-file-15.eps +0 -130
  82. package/assets/img/file-types/eps/017-file-16.eps +0 -197
  83. package/assets/img/file-types/eps/018-file-17.eps +0 -146
  84. package/assets/img/file-types/eps/019-file-18.eps +0 -131
  85. package/assets/img/file-types/eps/020-file-19.eps +0 -137
  86. package/assets/img/file-types/eps/021-file-20.eps +0 -134
  87. package/assets/img/file-types/eps/022-file-21.eps +0 -130
  88. package/assets/img/file-types/eps/023-file-22.eps +0 -161
  89. package/assets/img/file-types/eps/024-file-23.eps +0 -144
  90. package/assets/img/file-types/eps/025-file-24.eps +0 -164
  91. package/assets/img/file-types/eps/026-file-25.eps +0 -135
  92. package/assets/img/file-types/eps/027-file-26.eps +0 -124
  93. package/assets/img/file-types/eps/028-file-27.eps +0 -120
  94. package/assets/img/file-types/eps/029-file-28.eps +0 -141
  95. package/assets/img/file-types/eps/030-file-29.eps +0 -130
  96. package/assets/img/file-types/eps/031-file-30.eps +0 -157
  97. package/assets/img/file-types/eps/032-file-31.eps +0 -139
  98. package/assets/img/file-types/eps/033-file-32.eps +0 -139
  99. package/assets/img/file-types/eps/034-file-33.eps +0 -189
  100. package/assets/img/file-types/eps/035-file-34.eps +0 -162
  101. package/assets/img/file-types/eps/036-file-35.eps +0 -142
  102. package/assets/img/file-types/eps/037-file-36.eps +0 -123
  103. package/assets/img/file-types/eps/038-file-37.eps +0 -127
  104. package/assets/img/file-types/eps/039-file-38.eps +0 -146
  105. package/assets/img/file-types/eps/040-file-39.eps +0 -126
  106. package/assets/img/file-types/eps/041-file-40.eps +0 -117
  107. package/assets/img/file-types/eps/042-file-41.eps +0 -156
  108. package/assets/img/file-types/eps/043-file-42.eps +0 -118
  109. package/assets/img/file-types/eps/044-file-43.eps +0 -172
  110. package/assets/img/file-types/eps/045-file-44.eps +0 -201
  111. package/assets/img/file-types/eps/046-file-45.eps +0 -94
  112. package/assets/img/file-types/eps/047-file-46.eps +0 -176
  113. package/assets/img/file-types/eps/048-file-47.eps +0 -238
  114. package/assets/img/file-types/eps/049-file-48.eps +0 -187
  115. package/assets/img/file-types/eps/050-file-49.eps +0 -137
  116. package/assets/img/file-types/license/license.pdf +0 -0
  117. package/assets/img/file-types/png/3ds.png +0 -0
  118. package/assets/img/file-types/png/ai.png +0 -0
  119. package/assets/img/file-types/png/asp.png +0 -0
  120. package/assets/img/file-types/png/avi.png +0 -0
  121. package/assets/img/file-types/png/bin.png +0 -0
  122. package/assets/img/file-types/png/com.png +0 -0
  123. package/assets/img/file-types/png/css.png +0 -0
  124. package/assets/img/file-types/png/csv.png +0 -0
  125. package/assets/img/file-types/png/dbf.png +0 -0
  126. package/assets/img/file-types/png/dll.png +0 -0
  127. package/assets/img/file-types/png/doc.png +0 -0
  128. package/assets/img/file-types/png/docx.png +0 -0
  129. package/assets/img/file-types/png/dwg.png +0 -0
  130. package/assets/img/file-types/png/eml.png +0 -0
  131. package/assets/img/file-types/png/eps.png +0 -0
  132. package/assets/img/file-types/png/exe.png +0 -0
  133. package/assets/img/file-types/png/file.png +0 -0
  134. package/assets/img/file-types/png/fla.png +0 -0
  135. package/assets/img/file-types/png/gif.png +0 -0
  136. package/assets/img/file-types/png/htm.png +0 -0
  137. package/assets/img/file-types/png/ico.png +0 -0
  138. package/assets/img/file-types/png/ini.png +0 -0
  139. package/assets/img/file-types/png/iso.png +0 -0
  140. package/assets/img/file-types/png/jar.png +0 -0
  141. package/assets/img/file-types/png/jpg.png +0 -0
  142. package/assets/img/file-types/png/js.png +0 -0
  143. package/assets/img/file-types/png/mkv.png +0 -0
  144. package/assets/img/file-types/png/mov.png +0 -0
  145. package/assets/img/file-types/png/mp3.png +0 -0
  146. package/assets/img/file-types/png/mp4.png +0 -0
  147. package/assets/img/file-types/png/nfo.png +0 -0
  148. package/assets/img/file-types/png/obj.png +0 -0
  149. package/assets/img/file-types/png/otf.png +0 -0
  150. package/assets/img/file-types/png/pdf.png +0 -0
  151. package/assets/img/file-types/png/pkg.png +0 -0
  152. package/assets/img/file-types/png/png.png +0 -0
  153. package/assets/img/file-types/png/ppt.png +0 -0
  154. package/assets/img/file-types/png/pptx.png +0 -0
  155. package/assets/img/file-types/png/psd.png +0 -0
  156. package/assets/img/file-types/png/rtf.png +0 -0
  157. package/assets/img/file-types/png/svg.png +0 -0
  158. package/assets/img/file-types/png/tiff.png +0 -0
  159. package/assets/img/file-types/png/ttf.png +0 -0
  160. package/assets/img/file-types/png/txt.png +0 -0
  161. package/assets/img/file-types/png/vcf.png +0 -0
  162. package/assets/img/file-types/png/wav.png +0 -0
  163. package/assets/img/file-types/png/wmv.png +0 -0
  164. package/assets/img/file-types/png/xls.png +0 -0
  165. package/assets/img/file-types/png/xlsx.png +0 -0
  166. package/assets/img/file-types/png/xml.png +0 -0
  167. package/assets/img/file-types/png/zip.png +0 -0
  168. package/assets/img/file-types/psd/001-file.psd +0 -0
  169. package/assets/img/file-types/psd/002-file-1.psd +0 -0
  170. package/assets/img/file-types/psd/003-file-2.psd +0 -0
  171. package/assets/img/file-types/psd/004-file-3.psd +0 -0
  172. package/assets/img/file-types/psd/005-file-4.psd +0 -0
  173. package/assets/img/file-types/psd/006-file-5.psd +0 -0
  174. package/assets/img/file-types/psd/007-file-6.psd +0 -0
  175. package/assets/img/file-types/psd/008-file-7.psd +0 -0
  176. package/assets/img/file-types/psd/009-file-8.psd +0 -0
  177. package/assets/img/file-types/psd/010-file-9.psd +0 -0
  178. package/assets/img/file-types/psd/011-file-10.psd +0 -0
  179. package/assets/img/file-types/psd/012-file-11.psd +0 -0
  180. package/assets/img/file-types/psd/013-file-12.psd +0 -0
  181. package/assets/img/file-types/psd/014-file-13.psd +0 -0
  182. package/assets/img/file-types/psd/015-file-14.psd +0 -0
  183. package/assets/img/file-types/psd/016-file-15.psd +0 -0
  184. package/assets/img/file-types/psd/017-file-16.psd +0 -0
  185. package/assets/img/file-types/psd/018-file-17.psd +0 -0
  186. package/assets/img/file-types/psd/019-file-18.psd +0 -0
  187. package/assets/img/file-types/psd/020-file-19.psd +0 -0
  188. package/assets/img/file-types/psd/021-file-20.psd +0 -0
  189. package/assets/img/file-types/psd/022-file-21.psd +0 -0
  190. package/assets/img/file-types/psd/023-file-22.psd +0 -0
  191. package/assets/img/file-types/psd/024-file-23.psd +0 -0
  192. package/assets/img/file-types/psd/025-file-24.psd +0 -0
  193. package/assets/img/file-types/psd/026-file-25.psd +0 -0
  194. package/assets/img/file-types/psd/027-file-26.psd +0 -0
  195. package/assets/img/file-types/psd/028-file-27.psd +0 -0
  196. package/assets/img/file-types/psd/029-file-28.psd +0 -0
  197. package/assets/img/file-types/psd/030-file-29.psd +0 -0
  198. package/assets/img/file-types/psd/031-file-30.psd +0 -0
  199. package/assets/img/file-types/psd/032-file-31.psd +0 -0
  200. package/assets/img/file-types/psd/033-file-32.psd +0 -0
  201. package/assets/img/file-types/psd/034-file-33.psd +0 -0
  202. package/assets/img/file-types/psd/035-file-34.psd +0 -0
  203. package/assets/img/file-types/psd/036-file-35.psd +0 -0
  204. package/assets/img/file-types/psd/037-file-36.psd +0 -0
  205. package/assets/img/file-types/psd/038-file-37.psd +0 -0
  206. package/assets/img/file-types/psd/039-file-38.psd +0 -0
  207. package/assets/img/file-types/psd/040-file-39.psd +0 -0
  208. package/assets/img/file-types/psd/041-file-40.psd +0 -0
  209. package/assets/img/file-types/psd/042-file-41.psd +0 -0
  210. package/assets/img/file-types/psd/043-file-42.psd +0 -0
  211. package/assets/img/file-types/psd/044-file-43.psd +0 -0
  212. package/assets/img/file-types/psd/045-file-44.psd +0 -0
  213. package/assets/img/file-types/psd/046-file-45.psd +0 -0
  214. package/assets/img/file-types/psd/047-file-46.psd +0 -0
  215. package/assets/img/file-types/psd/048-file-47.psd +0 -0
  216. package/assets/img/file-types/psd/049-file-48.psd +0 -0
  217. package/assets/img/file-types/psd/050-file-49.psd +0 -0
  218. package/assets/img/file-types/svg/001-file.svg +0 -1
  219. package/assets/img/file-types/svg/002-file-1.svg +0 -1
  220. package/assets/img/file-types/svg/003-file-2.svg +0 -1
  221. package/assets/img/file-types/svg/004-file-3.svg +0 -1
  222. package/assets/img/file-types/svg/005-file-4.svg +0 -1
  223. package/assets/img/file-types/svg/006-file-5.svg +0 -1
  224. package/assets/img/file-types/svg/007-file-6.svg +0 -1
  225. package/assets/img/file-types/svg/008-file-7.svg +0 -1
  226. package/assets/img/file-types/svg/009-file-8.svg +0 -1
  227. package/assets/img/file-types/svg/010-file-9.svg +0 -1
  228. package/assets/img/file-types/svg/011-file-10.svg +0 -1
  229. package/assets/img/file-types/svg/012-file-11.svg +0 -1
  230. package/assets/img/file-types/svg/013-file-12.svg +0 -1
  231. package/assets/img/file-types/svg/014-file-13.svg +0 -1
  232. package/assets/img/file-types/svg/015-file-14.svg +0 -1
  233. package/assets/img/file-types/svg/016-file-15.svg +0 -1
  234. package/assets/img/file-types/svg/017-file-16.svg +0 -1
  235. package/assets/img/file-types/svg/018-file-17.svg +0 -1
  236. package/assets/img/file-types/svg/019-file-18.svg +0 -1
  237. package/assets/img/file-types/svg/020-file-19.svg +0 -1
  238. package/assets/img/file-types/svg/021-file-20.svg +0 -1
  239. package/assets/img/file-types/svg/022-file-21.svg +0 -1
  240. package/assets/img/file-types/svg/023-file-22.svg +0 -1
  241. package/assets/img/file-types/svg/024-file-23.svg +0 -1
  242. package/assets/img/file-types/svg/025-file-24.svg +0 -1
  243. package/assets/img/file-types/svg/026-file-25.svg +0 -1
  244. package/assets/img/file-types/svg/027-file-26.svg +0 -1
  245. package/assets/img/file-types/svg/028-file-27.svg +0 -1
  246. package/assets/img/file-types/svg/029-file-28.svg +0 -1
  247. package/assets/img/file-types/svg/030-file-29.svg +0 -1
  248. package/assets/img/file-types/svg/031-file-30.svg +0 -1
  249. package/assets/img/file-types/svg/032-file-31.svg +0 -1
  250. package/assets/img/file-types/svg/033-file-32.svg +0 -1
  251. package/assets/img/file-types/svg/034-file-33.svg +0 -1
  252. package/assets/img/file-types/svg/035-file-34.svg +0 -1
  253. package/assets/img/file-types/svg/036-file-35.svg +0 -1
  254. package/assets/img/file-types/svg/037-file-36.svg +0 -1
  255. package/assets/img/file-types/svg/038-file-37.svg +0 -1
  256. package/assets/img/file-types/svg/039-file-38.svg +0 -1
  257. package/assets/img/file-types/svg/040-file-39.svg +0 -1
  258. package/assets/img/file-types/svg/041-file-40.svg +0 -1
  259. package/assets/img/file-types/svg/042-file-41.svg +0 -1
  260. package/assets/img/file-types/svg/043-file-42.svg +0 -1
  261. package/assets/img/file-types/svg/044-file-43.svg +0 -1
  262. package/assets/img/file-types/svg/045-file-44.svg +0 -1
  263. package/assets/img/file-types/svg/046-file-45.svg +0 -1
  264. package/assets/img/file-types/svg/047-file-46.svg +0 -1
  265. package/assets/img/file-types/svg/048-file-47.svg +0 -1
  266. package/assets/img/file-types/svg/049-file-48.svg +0 -1
  267. package/assets/img/file-types/svg/050-file-49.svg +0 -1
  268. package/assets/img/plus-search-zoom-white.png +0 -0
  269. package/assets/scss/core/cursor.scss +0 -3
  270. package/assets/scss/core/elevation.scss +0 -57
  271. package/assets/scss/core/grid.scss +0 -40
  272. package/assets/scss/core/print.scss +0 -47
  273. package/assets/scss/core/typography.scss +0 -121
  274. package/sd-angular-core-19.0.0-beta.89.tgz +0 -0
  275. /package/components/anchor/src/components/{main/main.component.d.ts → anchor/anchor.component.d.ts} +0 -0
@@ -0,0 +1,333 @@
1
+ // --------------------------------------------------------------------------
2
+ // Base / Reboot — thay thế Bootstrap _reboot.scss
3
+ // Chuẩn hóa rendering giữa các browser, thiết lập baseline cho toàn bộ
4
+ // ứng dụng. Không phụ thuộc Bootstrap variables hay mixins.
5
+ //
6
+ // Nguồn tham khảo: Bootstrap 4 reboot + modern-normalize
7
+ // --------------------------------------------------------------------------
8
+
9
+ // --------------------------------------------------------------------------
10
+ // 1. Box-sizing
11
+ // Đặt border-box toàn cục để width/height không bị cộng thêm padding/border.
12
+ // Đây là rule quan trọng nhất — thiếu là toàn bộ layout lệch.
13
+ // --------------------------------------------------------------------------
14
+ *,
15
+ *::before,
16
+ *::after {
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ // --------------------------------------------------------------------------
21
+ // 2. Document
22
+ // --------------------------------------------------------------------------
23
+ html {
24
+ // Ngăn browser tự điều chỉnh font-size khi xoay màn hình (iOS)
25
+ -webkit-text-size-adjust: 100%;
26
+ // Bỏ tap highlight màu xám trên mobile
27
+ -webkit-tap-highlight-color: transparent;
28
+ line-height: 1.15;
29
+ }
30
+
31
+ // --------------------------------------------------------------------------
32
+ // 3. Body
33
+ // --------------------------------------------------------------------------
34
+ body {
35
+ margin: 0;
36
+ font-family: Roboto, 'Helvetica Neue', Arial, sans-serif;
37
+ font-size: 14px;
38
+ font-weight: 400;
39
+ line-height: 1.5;
40
+ color: #212529;
41
+ background-color: #fff;
42
+ text-align: left;
43
+ }
44
+
45
+ // --------------------------------------------------------------------------
46
+ // 4. Sectioning elements — IE10 fallback (display: block)
47
+ // --------------------------------------------------------------------------
48
+ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
49
+ display: block;
50
+ }
51
+
52
+ // --------------------------------------------------------------------------
53
+ // 5. Focus management
54
+ // Ẩn outline khi focus bằng chuột/touch; vẫn hiện khi dùng bàn phím.
55
+ // --------------------------------------------------------------------------
56
+ [tabindex="-1"]:focus:not(:focus-visible) {
57
+ outline: 0 !important;
58
+ }
59
+
60
+ // --------------------------------------------------------------------------
61
+ // 6. Typography
62
+ // --------------------------------------------------------------------------
63
+
64
+ // Bỏ margin-top của heading để dễ kiểm soát spacing trong layouts
65
+ h1, h2, h3, h4, h5, h6 {
66
+ margin-top: 0;
67
+ margin-bottom: 0.5rem;
68
+ }
69
+
70
+ p {
71
+ margin-top: 0;
72
+ margin-bottom: 1rem;
73
+ }
74
+
75
+ // Abbreviation với tooltip
76
+ abbr[title] {
77
+ text-decoration: underline dotted;
78
+ cursor: help;
79
+ border-bottom: 0;
80
+ text-decoration-skip-ink: none;
81
+ }
82
+
83
+ address {
84
+ margin-bottom: 1rem;
85
+ font-style: normal;
86
+ line-height: inherit;
87
+ }
88
+
89
+ // List — xóa margin-top, giữ margin-bottom
90
+ ol,
91
+ ul,
92
+ dl {
93
+ margin-top: 0;
94
+ margin-bottom: 1rem;
95
+ }
96
+
97
+ ol ol, ul ul, ol ul, ul ol {
98
+ margin-bottom: 0;
99
+ }
100
+
101
+ dt { font-weight: 700; }
102
+
103
+ dd {
104
+ margin-bottom: 0.5rem;
105
+ margin-left: 0;
106
+ }
107
+
108
+ blockquote { margin: 0 0 1rem; }
109
+
110
+ // Bold & strong
111
+ b,
112
+ strong { font-weight: bolder; }
113
+
114
+ small { font-size: 80%; }
115
+
116
+ // Sub & sup — không ảnh hưởng line-height
117
+ sub,
118
+ sup {
119
+ position: relative;
120
+ font-size: 75%;
121
+ line-height: 0;
122
+ vertical-align: baseline;
123
+ }
124
+ sub { bottom: -0.25em; }
125
+ sup { top: -0.5em; }
126
+
127
+ // --------------------------------------------------------------------------
128
+ // 7. Links
129
+ // --------------------------------------------------------------------------
130
+ a {
131
+ color: #007bff;
132
+ text-decoration: none;
133
+ background-color: transparent; // Xóa nền xám trên link active trong IE 10
134
+ }
135
+
136
+ a:hover {
137
+ text-decoration: underline;
138
+ }
139
+
140
+ // Link không có href (anchor thuần) — kế thừa màu cha, không gạch chân
141
+ a:not([href]):not([class]),
142
+ a:not([href]):not([class]):hover {
143
+ color: inherit;
144
+ text-decoration: none;
145
+ }
146
+
147
+ // --------------------------------------------------------------------------
148
+ // 8. Code
149
+ // --------------------------------------------------------------------------
150
+ pre,
151
+ code,
152
+ kbd,
153
+ samp {
154
+ font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Courier New', monospace;
155
+ font-size: 1em; // Sửa font-size lạ trên một số browser
156
+ }
157
+
158
+ pre {
159
+ margin-top: 0;
160
+ margin-bottom: 1rem;
161
+ overflow: auto;
162
+ -ms-overflow-style: scrollbar;
163
+ }
164
+
165
+ // --------------------------------------------------------------------------
166
+ // 9. Media
167
+ // --------------------------------------------------------------------------
168
+ figure { margin: 0 0 1rem; }
169
+
170
+ img {
171
+ vertical-align: middle;
172
+ border-style: none; // Xóa border trên ảnh trong link (IE 10)
173
+ }
174
+
175
+ svg {
176
+ overflow: hidden; // Fix SVG overflow bug trong IE10/11
177
+ vertical-align: middle;
178
+ }
179
+
180
+ // --------------------------------------------------------------------------
181
+ // 10. Tables
182
+ // --------------------------------------------------------------------------
183
+ table {
184
+ border-collapse: collapse; // Tránh double border khi dùng border trên td/th
185
+ }
186
+
187
+ caption {
188
+ padding-top: 0.75rem;
189
+ padding-bottom: 0.75rem;
190
+ color: #6c757d;
191
+ text-align: left;
192
+ caption-side: bottom;
193
+ }
194
+
195
+ th {
196
+ font-weight: 600; // Không dùng bold mặc định của browser
197
+ text-align: inherit;
198
+ text-align: -webkit-match-parent;
199
+ }
200
+
201
+ // --------------------------------------------------------------------------
202
+ // 11. Forms
203
+ // --------------------------------------------------------------------------
204
+
205
+ // label là inline-block để có thể set margin
206
+ // NOTE: Bootstrap reboot thêm margin-bottom vào label — giữ override này khi còn dùng reboot
207
+ label {
208
+ display: inline-block;
209
+ margin-bottom: 0.5rem;
210
+ }
211
+
212
+ // Xóa border-radius mà macOS Chrome tự thêm vào button
213
+ button { border-radius: 0; }
214
+
215
+ // Ẩn outline trên button khi click (chỉ hiện khi dùng bàn phím)
216
+ button:focus:not(:focus-visible) { outline: 0; }
217
+
218
+ input,
219
+ button,
220
+ select,
221
+ optgroup,
222
+ textarea {
223
+ margin: 0;
224
+ font-family: inherit;
225
+ font-size: inherit;
226
+ line-height: inherit;
227
+ }
228
+
229
+ // Hiển thị overflow trên Edge
230
+ button,
231
+ input { overflow: visible; }
232
+
233
+ // Xóa text-transform kế thừa trong Firefox
234
+ button,
235
+ select { text-transform: none; }
236
+
237
+ // Cursor pointer cho role="button"
238
+ [role="button"] { cursor: pointer; }
239
+
240
+ // Xóa word-wrap kỳ lạ trong Safari
241
+ select { word-wrap: normal; }
242
+
243
+ // Fix clickable types trên iOS/Safari
244
+ button,
245
+ [type="button"],
246
+ [type="reset"],
247
+ [type="submit"] {
248
+ -webkit-appearance: button;
249
+
250
+ &:not(:disabled) { cursor: pointer; }
251
+ }
252
+
253
+ // Xóa inner border/padding trong Firefox
254
+ button::-moz-focus-inner,
255
+ [type="button"]::-moz-focus-inner,
256
+ [type="reset"]::-moz-focus-inner,
257
+ [type="submit"]::-moz-focus-inner {
258
+ padding: 0;
259
+ border-style: none;
260
+ }
261
+
262
+ // Radio & checkbox
263
+ input[type="radio"],
264
+ input[type="checkbox"] {
265
+ box-sizing: border-box;
266
+ padding: 0;
267
+ }
268
+
269
+ textarea {
270
+ overflow: auto; // Xóa scrollbar dọc mặc định trong IE
271
+ resize: vertical; // Chỉ cho resize theo chiều dọc
272
+ }
273
+
274
+ fieldset {
275
+ min-width: 0;
276
+ padding: 0;
277
+ margin: 0;
278
+ border: 0;
279
+ }
280
+
281
+ legend {
282
+ display: block;
283
+ width: 100%;
284
+ max-width: 100%;
285
+ padding: 0;
286
+ margin-bottom: 0.5rem;
287
+ font-size: 1.5rem;
288
+ line-height: inherit;
289
+ color: inherit;
290
+ white-space: normal;
291
+ }
292
+
293
+ progress { vertical-align: baseline; }
294
+
295
+ // Sửa cursor spinner trên Chrome
296
+ [type="number"]::-webkit-inner-spin-button,
297
+ [type="number"]::-webkit-outer-spin-button { height: auto; }
298
+
299
+ // Sửa rounded corners trên search input trong iOS
300
+ [type="search"] {
301
+ outline-offset: -2px;
302
+ -webkit-appearance: none;
303
+ }
304
+
305
+ [type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
306
+
307
+ // File upload button — kế thừa font
308
+ ::-webkit-file-upload-button {
309
+ font: inherit;
310
+ -webkit-appearance: button;
311
+ }
312
+
313
+ // --------------------------------------------------------------------------
314
+ // 12. Misc
315
+ // --------------------------------------------------------------------------
316
+ output { display: inline-block; }
317
+
318
+ summary {
319
+ display: list-item;
320
+ cursor: pointer;
321
+ }
322
+
323
+ template { display: none; }
324
+
325
+ // Ẩn element có attribute [hidden] (bao gồm IE 10)
326
+ [hidden] { display: none !important; }
327
+
328
+ // Horizontal rule
329
+ hr {
330
+ box-sizing: content-box;
331
+ height: 0;
332
+ overflow: visible;
333
+ }
@@ -0,0 +1,22 @@
1
+ // --------------------------------------------------------------------------
2
+ // Border-radius (px-based, 0–200)
3
+ // rounded-0 … rounded-200 | rounded-full
4
+ // --------------------------------------------------------------------------
5
+ @for $i from 0 through 200 {
6
+ .rounded-#{$i} { border-radius: #{$i}px !important; }
7
+ }
8
+
9
+ .rounded-full { border-radius: 9999px !important; }
10
+
11
+ // --------------------------------------------------------------------------
12
+ // Border utilities
13
+ // border | border-0 | border-top | border-bottom | border-left | border-right
14
+ // --------------------------------------------------------------------------
15
+ $_border-color: var(--sd-black200);
16
+
17
+ .border { border: 1px solid $_border-color !important; }
18
+ .border-0 { border: 0 !important; }
19
+ .border-top { border-top: 1px solid $_border-color !important; }
20
+ .border-bottom { border-bottom: 1px solid $_border-color !important; }
21
+ .border-left { border-left: 1px solid $_border-color !important; }
22
+ .border-right { border-right: 1px solid $_border-color !important; }
@@ -0,0 +1,10 @@
1
+ // --------------------------------------------------------------------------
2
+ // Display
3
+ // --------------------------------------------------------------------------
4
+ .d-none { display: none !important; }
5
+ .d-block { display: block !important; }
6
+ .d-inline { display: inline !important; }
7
+ .d-inline-block { display: inline-block !important; }
8
+ .d-flex { display: flex !important; }
9
+ .d-inline-flex { display: inline-flex !important; }
10
+ .d-grid { display: grid !important; }
@@ -0,0 +1,80 @@
1
+ // --------------------------------------------------------------------------
2
+ // Elevation — CSS tĩnh cho Angular Material shadow levels (Light Mode)
3
+ // Thay thế Angular Material mixin `mat.elevation()` bằng CSS cứng để
4
+ // tránh phụ thuộc vào Material theme SCSS khi cần dùng elevation riêng lẻ.
5
+ //
6
+ // Tương đương: mat-elevation-z{0..8}
7
+ // Nguồn shadow: Material Design spec (3 lớp: ambient + penumbra + umbra)
8
+ // --------------------------------------------------------------------------
9
+
10
+ // z0 — không có shadow (dùng để reset)
11
+ .mat-elevation-z0 {
12
+ box-shadow:
13
+ 0px 0px 0px 0px rgba(0, 0, 0, 0.2),
14
+ 0px 0px 0px 0px rgba(0, 0, 0, 0.14),
15
+ 0px 0px 0px 0px rgba(0, 0, 0, 0.12);
16
+ }
17
+
18
+ // z1 — surface nhẹ (card, chip)
19
+ .mat-elevation-z1 {
20
+ box-shadow:
21
+ 0px 2px 1px -1px rgba(0, 0, 0, 0.2),
22
+ 0px 1px 1px 0px rgba(0, 0, 0, 0.14),
23
+ 0px 1px 3px 0px rgba(0, 0, 0, 0.12);
24
+ }
25
+
26
+ // z2 — button raised
27
+ .mat-elevation-z2 {
28
+ box-shadow:
29
+ 0px 3px 1px -2px rgba(0, 0, 0, 0.2),
30
+ 0px 2px 2px 0px rgba(0, 0, 0, 0.14),
31
+ 0px 1px 5px 0px rgba(0, 0, 0, 0.12);
32
+ }
33
+
34
+ // z3 — card hover
35
+ .mat-elevation-z3 {
36
+ box-shadow:
37
+ 0px 3px 3px -2px rgba(0, 0, 0, 0.2),
38
+ 0px 3px 4px 0px rgba(0, 0, 0, 0.14),
39
+ 0px 1px 8px 0px rgba(0, 0, 0, 0.12);
40
+ }
41
+
42
+ // z4 — app bar
43
+ .mat-elevation-z4 {
44
+ box-shadow:
45
+ 0px 2px 4px -1px rgba(0, 0, 0, 0.2),
46
+ 0px 4px 5px 0px rgba(0, 0, 0, 0.14),
47
+ 0px 1px 10px 0px rgba(0, 0, 0, 0.12);
48
+ }
49
+
50
+ // z5
51
+ .mat-elevation-z5 {
52
+ box-shadow:
53
+ 0px 3px 5px -1px rgba(0, 0, 0, 0.2),
54
+ 0px 5px 8px 0px rgba(0, 0, 0, 0.14),
55
+ 0px 1px 14px 0px rgba(0, 0, 0, 0.12);
56
+ }
57
+
58
+ // z6 — floating action button
59
+ .mat-elevation-z6 {
60
+ box-shadow:
61
+ 0px 3px 5px -1px rgba(0, 0, 0, 0.2),
62
+ 0px 6px 10px 0px rgba(0, 0, 0, 0.14),
63
+ 0px 1px 18px 0px rgba(0, 0, 0, 0.12);
64
+ }
65
+
66
+ // z7
67
+ .mat-elevation-z7 {
68
+ box-shadow:
69
+ 0px 4px 5px -2px rgba(0, 0, 0, 0.2),
70
+ 0px 7px 10px 1px rgba(0, 0, 0, 0.14),
71
+ 0px 2px 16px 1px rgba(0, 0, 0, 0.12);
72
+ }
73
+
74
+ // z8 — dialog, drawer
75
+ .mat-elevation-z8 {
76
+ box-shadow:
77
+ 0px 5px 5px -3px rgba(0, 0, 0, 0.2),
78
+ 0px 8px 10px 1px rgba(0, 0, 0, 0.14),
79
+ 0px 3px 14px 2px rgba(0, 0, 0, 0.12);
80
+ }
@@ -0,0 +1,54 @@
1
+ // --------------------------------------------------------------------------
2
+ // Flexbox
3
+ // --------------------------------------------------------------------------
4
+
5
+ // Flex shorthand
6
+ .flex-1 { flex: 1 !important; }
7
+ .flex-none { flex: none !important; }
8
+ .flex-auto { flex: auto !important; }
9
+
10
+ // Direction
11
+ .flex-row { flex-direction: row !important; }
12
+ .flex-column { flex-direction: column !important; }
13
+ .flex-row-reverse { flex-direction: row-reverse !important; }
14
+ .flex-column-reverse { flex-direction: column-reverse !important; }
15
+
16
+ // Wrap
17
+ .flex-wrap { flex-wrap: wrap !important; }
18
+ .flex-nowrap { flex-wrap: nowrap !important; }
19
+
20
+ // Grow & shrink
21
+ .flex-grow-0 { flex-grow: 0 !important; }
22
+ .flex-grow-1 { flex-grow: 1 !important; }
23
+ .flex-shrink-0 { flex-shrink: 0 !important; }
24
+ .flex-shrink-1 { flex-shrink: 1 !important; }
25
+
26
+ // align-items
27
+ .align-items-start { align-items: flex-start !important; }
28
+ .align-items-end { align-items: flex-end !important; }
29
+ .align-items-center { align-items: center !important; }
30
+ .align-items-baseline { align-items: baseline !important; }
31
+ .align-items-stretch { align-items: stretch !important; }
32
+
33
+ // align-self
34
+ .align-self-start { align-self: flex-start !important; }
35
+ .align-self-end { align-self: flex-end !important; }
36
+ .align-self-center { align-self: center !important; }
37
+ .align-self-stretch { align-self: stretch !important; }
38
+ .align-self-auto { align-self: auto !important; }
39
+
40
+ // align-content
41
+ .align-content-start { align-content: flex-start !important; }
42
+ .align-content-end { align-content: flex-end !important; }
43
+ .align-content-center { align-content: center !important; }
44
+ .align-content-between { align-content: space-between !important; }
45
+ .align-content-around { align-content: space-around !important; }
46
+ .align-content-stretch { align-content: stretch !important; }
47
+
48
+ // justify-content
49
+ .justify-content-start { justify-content: flex-start !important; }
50
+ .justify-content-end { justify-content: flex-end !important; }
51
+ .justify-content-center { justify-content: center !important; }
52
+ .justify-content-between { justify-content: space-between !important; }
53
+ .justify-content-around { justify-content: space-around !important; }
54
+ .justify-content-evenly { justify-content: space-evenly !important; }
@@ -0,0 +1,9 @@
1
+ // --------------------------------------------------------------------------
2
+ // Gap (px-based, 0–200)
3
+ // gap-0 … gap-200 | gap-x-* | gap-y-*
4
+ // --------------------------------------------------------------------------
5
+ @for $i from 0 through 200 {
6
+ .gap-#{$i} { gap: #{$i}px !important; }
7
+ .gap-x-#{$i} { column-gap: #{$i}px !important; }
8
+ .gap-y-#{$i} { row-gap: #{$i}px !important; }
9
+ }
@@ -0,0 +1,142 @@
1
+ // --------------------------------------------------------------------------
2
+ // Grid — Bootstrap-compatible row/col + CSS Grid container
3
+ // Không phụ thuộc Bootstrap, thuần CSS Flexbox / CSS Grid
4
+ // --------------------------------------------------------------------------
5
+
6
+ // --------------------------------------------------------------------------
7
+ // 1. Flexbox row/col (.row, .col-{1-12})
8
+ // --------------------------------------------------------------------------
9
+ $grid-columns: 12;
10
+ $grid-gutter: 16px;
11
+
12
+ .row {
13
+ display: flex;
14
+ flex-wrap: wrap;
15
+ margin-left: calc(-1 * $grid-gutter / 2);
16
+ margin-right: calc(-1 * $grid-gutter / 2);
17
+
18
+ > * {
19
+ box-sizing: border-box;
20
+ padding-left: calc($grid-gutter / 2);
21
+ padding-right: calc($grid-gutter / 2);
22
+ }
23
+ }
24
+
25
+ // Gutter variants
26
+ .row-md {
27
+ @extend .row;
28
+ margin-left: -8px;
29
+ margin-right: -8px;
30
+ > * { padding-left: 8px; padding-right: 8px; }
31
+ }
32
+
33
+ .row-sm {
34
+ @extend .row;
35
+ margin-left: -4px;
36
+ margin-right: -4px;
37
+ > * { padding-left: 4px; padding-right: 4px; }
38
+ }
39
+
40
+ .row-xs {
41
+ @extend .row;
42
+ margin-left: -2px;
43
+ margin-right: -2px;
44
+ > * { padding-left: 2px; padding-right: 2px; }
45
+ }
46
+
47
+ // .col-1 … .col-12
48
+ @for $i from 1 through $grid-columns {
49
+ .col-#{$i} {
50
+ box-sizing: border-box;
51
+ width: percentage(calc($i / $grid-columns));
52
+ flex: 0 0 percentage(calc($i / $grid-columns));
53
+ max-width: percentage(calc($i / $grid-columns));
54
+ padding-left: calc($grid-gutter / 2);
55
+ padding-right: calc($grid-gutter / 2);
56
+ }
57
+ }
58
+
59
+ .col {
60
+ flex: 1 1 0%;
61
+ padding-left: calc($grid-gutter / 2);
62
+ padding-right: calc($grid-gutter / 2);
63
+ }
64
+
65
+ // --------------------------------------------------------------------------
66
+ // 1b. Responsive columns — Bootstrap-compatible breakpoints
67
+ // col-sm-{1-12} : ≥ 576px
68
+ // col-md-{1-12} : ≥ 768px
69
+ // col-lg-{1-12} : ≥ 992px
70
+ // col-xl-{1-12} : ≥ 1200px
71
+ //
72
+ // Mobile-first: mặc định width: 100%, áp dụng kích thước khi đủ rộng.
73
+ // --------------------------------------------------------------------------
74
+ $grid-breakpoints: (
75
+ 'sm': 576px,
76
+ 'md': 768px,
77
+ 'lg': 992px,
78
+ 'xl': 1200px,
79
+ );
80
+
81
+ // col-{bp} — chiếm hết chiều rộng tại breakpoint đó
82
+ @each $bp, $min-width in $grid-breakpoints {
83
+ @media (min-width: $min-width) {
84
+ .col-#{$bp} {
85
+ flex: 1 1 0%;
86
+ padding-left: calc($grid-gutter / 2);
87
+ padding-right: calc($grid-gutter / 2);
88
+ }
89
+ }
90
+ }
91
+
92
+ // col-{bp}-{1-12} — chiếm n/12 chiều rộng tại breakpoint đó
93
+ @each $bp, $min-width in $grid-breakpoints {
94
+ @media (min-width: $min-width) {
95
+ @for $i from 1 through $grid-columns {
96
+ .col-#{$bp}-#{$i} {
97
+ box-sizing: border-box;
98
+ width: percentage(calc($i / $grid-columns));
99
+ flex: 0 0 percentage(calc($i / $grid-columns));
100
+ max-width: percentage(calc($i / $grid-columns));
101
+ padding-left: calc($grid-gutter / 2);
102
+ padding-right: calc($grid-gutter / 2);
103
+ }
104
+ }
105
+ }
106
+ }
107
+
108
+ // --------------------------------------------------------------------------
109
+ // 2. CSS Grid container (.grid-container)
110
+ // grid-container + grid-cols-{1-12} + col-span-{1-12}
111
+ // --------------------------------------------------------------------------
112
+ .grid-container {
113
+ display: grid;
114
+ column-gap: 8px;
115
+ row-gap: 0;
116
+
117
+ @for $i from 1 through 12 {
118
+ &.grid-cols-#{$i} {
119
+ grid-template-columns: repeat($i, minmax(0, 1fr));
120
+ }
121
+ }
122
+
123
+ @for $i from 1 through 12 {
124
+ .col-span-#{$i} {
125
+ grid-column: span #{$i} / span #{$i};
126
+ }
127
+ }
128
+
129
+ .col-span-full {
130
+ grid-column: 1 / -1;
131
+ }
132
+
133
+ @for $i from 1 through 12 {
134
+ .row-span-#{$i} {
135
+ grid-row: span #{$i} / span #{$i};
136
+ }
137
+ }
138
+
139
+ .row-span-full {
140
+ grid-row: 1 / -1;
141
+ }
142
+ }
@@ -0,0 +1,17 @@
1
+ /* ==========================================================================
2
+ SD-ANGULAR UTILITY CLASSES — không phụ thuộc Bootstrap
3
+ Mỗi partial độc lập, có thể import riêng lẻ nếu cần.
4
+ ========================================================================== */
5
+
6
+ @use 'spacing';
7
+ @use 'sizing';
8
+ @use 'border';
9
+ @use 'typography';
10
+ @use 'gap';
11
+ @use 'display';
12
+ @use 'flexbox';
13
+ @use 'overflow';
14
+ @use 'position';
15
+ @use 'misc';
16
+ @use 'grid';
17
+ @use 'elevation';
@@ -0,0 +1,20 @@
1
+ // --------------------------------------------------------------------------
2
+ // Vertical-align
3
+ // --------------------------------------------------------------------------
4
+ .align-middle { vertical-align: middle !important; }
5
+ .align-top { vertical-align: top !important; }
6
+ .align-bottom { vertical-align: bottom !important; }
7
+ .align-baseline { vertical-align: baseline !important; }
8
+
9
+ // --------------------------------------------------------------------------
10
+ // Cursor
11
+ // --------------------------------------------------------------------------
12
+ .cursor-pointer { cursor: pointer !important; }
13
+ .cursor-default { cursor: default !important; }
14
+ .cursor-not-allowed { cursor: not-allowed !important; }
15
+
16
+ // --------------------------------------------------------------------------
17
+ // Visibility
18
+ // --------------------------------------------------------------------------
19
+ .visible { visibility: visible !important; }
20
+ .invisible { visibility: hidden !important; }
@@ -0,0 +1,9 @@
1
+ // --------------------------------------------------------------------------
2
+ // Overflow
3
+ // --------------------------------------------------------------------------
4
+ .overflow-auto { overflow: auto !important; }
5
+ .overflow-hidden { overflow: hidden !important; }
6
+ .overflow-visible { overflow: visible !important; }
7
+ .overflow-scroll { overflow: scroll !important; }
8
+ .overflow-x-auto { overflow-x: auto !important; }
9
+ .overflow-y-auto { overflow-y: auto !important; }