@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,524 @@
1
+ # SD Angular — SCSS Documentation
2
+
3
+ ## Mục lục
4
+
5
+ 1. [Cài đặt vào Angular](#1-cài-đặt-vào-angular)
6
+ 2. [Hệ thống màu sắc](#2-hệ-thống-màu-sắc)
7
+ 3. [Custom theme](#3-custom-theme)
8
+ 4. [Utility classes](#4-utility-classes)
9
+ - [Spacing](#spacing--margin--padding)
10
+ - [Sizing](#sizing--width--height)
11
+ - [Border](#border)
12
+ - [Grid & Layout](#grid--layout)
13
+ - [Flexbox](#flexbox)
14
+ - [Display](#display)
15
+ - [Gap](#gap)
16
+ - [Typography](#typography)
17
+ - [Overflow](#overflow)
18
+ - [Position](#position)
19
+ - [Elevation](#elevation)
20
+ - [Misc](#misc)
21
+
22
+ ---
23
+
24
+ ## 1. Cài đặt vào Angular
25
+
26
+ Thêm vào `angular.json` (trong phần `styles` của build target):
27
+
28
+ ```json
29
+ "styles": [
30
+ "./node_modules/@sd-angular/core/assets/scss/sd-core.scss",
31
+ "src/styles.scss"
32
+ ]
33
+ ```
34
+
35
+ `sd-core.scss` bao gồm toàn bộ: reset CSS, utilities, màu theme, form overrides, scrollbar, và Angular Material theme.
36
+
37
+ ---
38
+
39
+ ## 2. Hệ thống màu sắc
40
+
41
+ Màu được định nghĩa dưới dạng **CSS custom properties** có tiền tố `--sd-*`, cho phép override runtime (không cần recompile SCSS).
42
+
43
+ ### Màu mặc định
44
+
45
+ | Token | CSS Variable | Giá trị mặc định | Dùng cho |
46
+ |---|---|---|---|
47
+ | `primary` | `--sd-primary` | `#2A66F4` | Màu chủ đạo — button, checkbox, accent |
48
+ | `primary-light` | `--sd-primary-light` | `#EAF1FF` | Background nhẹ của primary |
49
+ | `primary-dark` | `--sd-primary-dark` | `#1C4AD9` | Hover/active state của primary |
50
+ | `info` | `--sd-info` | `#2962FF` | Link, thông tin, badge info |
51
+ | `info-light` | `--sd-info-light` | `#E7E9FF` | Background nhẹ của info |
52
+ | `info-dark` | `--sd-info-dark` | `#2240CC` | Hover state của info |
53
+ | `success` | `--sd-success` | `#4CAF50` | Trạng thái thành công, validation OK |
54
+ | `success-light` | `--sd-success-light` | `#DBEFDC` | Background nhẹ của success |
55
+ | `success-dark` | `--sd-success-dark` | `#39833C` | Hover state của success |
56
+ | `warning` | `--sd-warning` | `#FF9600` | Cảnh báo, trạng thái cần chú ý |
57
+ | `warning-light` | `--sd-warning-light` | `#FFEACC` | Background nhẹ của warning |
58
+ | `warning-dark` | `--sd-warning-dark` | `#BF7000` | Hover state của warning |
59
+ | `error` | `--sd-error` | `#F82C13` | Lỗi, validation fail, trạng thái nguy hiểm |
60
+ | `error-light` | `--sd-error-light` | `#FED5D0` | Background nhẹ của error |
61
+ | `error-dark` | `--sd-error-dark` | `#BA200E` | Hover state của error |
62
+ | `secondary` | `--sd-secondary` | `#212121` | Text phụ, icon secondary |
63
+ | `secondary-light` | `--sd-secondary-light` | `#E9E9E9` | Background nhẹ |
64
+ | `secondary-dark` | `--sd-secondary-dark` | `#000000` | — |
65
+ | `light` | `--sd-light` | `#F8F9FA` | Background trang, surface nhẹ |
66
+ | `dark` | `--sd-dark` | `#343A40` | Text đậm, dark surface |
67
+ | `black500` | `--sd-black500` | `#212121` | Text chính |
68
+ | `black400` | `--sd-black400` | `#757575` | Text phụ, placeholder |
69
+ | `black300` | `--sd-black300` | `#BFBFBF` | Divider, border nhẹ |
70
+ | `black200` | `--sd-black200` | `#E6E6E6` | Border mặc định, separator |
71
+ | `black100` | `--sd-black100` | `#F2F2F2` | Background disabled, row hover |
72
+
73
+ ### Dùng màu trong SCSS component
74
+
75
+ ```scss
76
+ @use '@sd-angular/core/assets/scss/core/color.scss' as color;
77
+ @use 'sass:map';
78
+
79
+ .my-element {
80
+ color: map.get(color.$color_map, 'primary');
81
+ background: map.get(color.$color_map, 'primary-light');
82
+ border-color: map.get(color.$color_map, 'black200');
83
+ }
84
+ ```
85
+
86
+ ### Dùng màu qua utility class trong template
87
+
88
+ ```html
89
+ <!-- Text color -->
90
+ <span class="text-primary">Primary</span>
91
+ <span class="text-error">Lỗi</span>
92
+ <span class="text-secondary">Phụ</span>
93
+ <span class="text-success">Thành công</span>
94
+ <span class="text-warning">Cảnh báo</span>
95
+
96
+ <!-- Background color -->
97
+ <div class="bg-primary-light">...</div>
98
+ <div class="bg-error-light">...</div>
99
+ <div class="bg-white">...</div>
100
+
101
+ <!-- Border color -->
102
+ <div class="border-primary">...</div>
103
+ ```
104
+
105
+ Tất cả token đều có class: `.text-{token}`, `.bg-{token}`, `.border-{token}`.
106
+
107
+ ---
108
+
109
+ ## 3. Custom theme
110
+
111
+ Trong `styles.scss` của ứng dụng, import theme mixin và Angular Material, sau đó gọi `sd.theme()` với các màu muốn override.
112
+
113
+ Chỉ cần khai báo các màu muốn **thay đổi** — màu không khai báo sẽ dùng giá trị mặc định.
114
+
115
+ ```scss
116
+ @use '@sd-angular/core/assets/scss/themes/default' as sd;
117
+ @use '@angular/material' as mat;
118
+ @include mat.core();
119
+
120
+ html {
121
+ @include sd.theme(
122
+ (
123
+ primary: #AE7129,
124
+ primary-light: #F4F2F1,
125
+ primary-dark: #6B4414,
126
+ )
127
+ );
128
+ }
129
+
130
+ // --- Angular Material M2 Palette ---
131
+
132
+ $custom-primary-palette: mat.m2-define-palette((
133
+ 50: #F4F2F1,
134
+ 100: #E7E1DA,
135
+ 200: #DAC8B4,
136
+ 300: #D1AC80,
137
+ 400: #CD9450,
138
+ 500: #AE7129,
139
+ 600: #8D5A1E,
140
+ 700: #6B4414,
141
+ 800: #4B2F0E,
142
+ 900: #34210A,
143
+ contrast: (
144
+ 600: white,
145
+ 700: white,
146
+ 800: white,
147
+ 900: white,
148
+ )
149
+ ));
150
+
151
+ $custom-accent-palette: mat.m2-define-palette((
152
+ 50: #F1F3F1,
153
+ 100: #DCE5DD,
154
+ 200: #BBD3BC,
155
+ 300: #8FC291,
156
+ 400: #67B76A,
157
+ 500: #4CAF50,
158
+ 600: #3A8C3D,
159
+ 700: #29692C,
160
+ 800: #1C471E,
161
+ 900: #132F14,
162
+ contrast: (
163
+ 700: white,
164
+ 800: white,
165
+ 900: white,
166
+ )
167
+ ));
168
+
169
+ $custom-warn-palette: mat.m2-define-palette((
170
+ 50: #F5F0F0,
171
+ 100: #EAD9D6,
172
+ 200: #E4B0AA,
173
+ 300: #E6786B,
174
+ 400: #EE4430,
175
+ 500: #F82C13,
176
+ 600: #D11801,
177
+ 700: #9A1100,
178
+ 800: #680B00,
179
+ 900: #440700,
180
+ contrast: (
181
+ 600: white,
182
+ 700: white,
183
+ 800: white,
184
+ 900: white,
185
+ )
186
+ ));
187
+
188
+ $custom-theme: mat.m2-define-light-theme((
189
+ color: (
190
+ primary: $custom-primary-palette,
191
+ accent: $custom-accent-palette,
192
+ warn: $custom-warn-palette,
193
+ ),
194
+ density: -3,
195
+ ));
196
+
197
+ @include mat.all-component-themes($custom-theme);
198
+ ```
199
+
200
+ > **Lưu ý:** `sd.theme()` và `mat.all-component-themes()` đều cần được gọi trong `styles.scss`, không phải trong component SCSS.
201
+
202
+ ---
203
+
204
+ ## 4. Utility classes
205
+
206
+ Tất cả utility classes đều có `!important` để đảm bảo override được khi kết hợp với Angular Material.
207
+
208
+ ---
209
+
210
+ ### Spacing — Margin & Padding
211
+
212
+ Hệ thống spacing theo đơn vị **px**, range từ 0 đến 200.
213
+
214
+ ```
215
+ m-{n} mt-{n} mr-{n} mb-{n} ml-{n} mx-{n} my-{n}
216
+ p-{n} pt-{n} pr-{n} pb-{n} pl-{n} px-{n} py-{n}
217
+ ```
218
+
219
+ Ví dụ: `m-0`, `mt-8`, `px-16`, `py-24`, `mb-4`
220
+
221
+ **Auto margin:**
222
+ ```
223
+ m-auto mt-auto mr-auto mb-auto ml-auto mx-auto my-auto
224
+ ```
225
+
226
+ ---
227
+
228
+ ### Sizing — Width & Height
229
+
230
+ **Theo px** (0–200): `w-{n}`, `h-{n}`
231
+
232
+ **Theo %/keyword:**
233
+
234
+ | Class | CSS |
235
+ |---|---|
236
+ | `w-full` | `width: 100%` |
237
+ | `w-100` | `width: 100%` (alias) |
238
+ | `w-auto` | `width: auto` |
239
+ | `w-screen` | `width: 100vw` |
240
+ | `w-fit` | `width: fit-content` |
241
+ | `h-full` | `height: 100%` |
242
+ | `h-100` | `height: 100%` (alias) |
243
+ | `h-auto` | `height: auto` |
244
+ | `h-screen` | `height: 100vh` |
245
+ | `h-fit` | `height: fit-content` |
246
+ | `min-h-full` | `min-height: 100%` |
247
+ | `min-h-screen` | `min-height: 100vh` |
248
+ | `min-w-full` | `min-width: 100%` |
249
+ | `max-h-full` | `max-height: 100%` |
250
+ | `max-w-full` | `max-width: 100%` |
251
+
252
+ ---
253
+
254
+ ### Border
255
+
256
+ **Border-radius** (0–200px): `rounded-{n}`, `rounded-full` (9999px)
257
+
258
+ **Border utilities:**
259
+
260
+ | Class | CSS |
261
+ |---|---|
262
+ | `border` | `border: 1px solid var(--sd-black200)` |
263
+ | `border-0` | `border: 0` |
264
+ | `border-top` | `border-top: 1px solid var(--sd-black200)` |
265
+ | `border-bottom` | `border-bottom: 1px solid var(--sd-black200)` |
266
+ | `border-left` | `border-left: 1px solid var(--sd-black200)` |
267
+ | `border-right` | `border-right: 1px solid var(--sd-black200)` |
268
+
269
+ ---
270
+
271
+ ### Grid & Layout
272
+
273
+ #### Flexbox row/col
274
+
275
+ ```html
276
+ <div class="row">
277
+ <div class="col-6">50%</div>
278
+ <div class="col-6">50%</div>
279
+ </div>
280
+ ```
281
+
282
+ `.row` là flex container có gutter `16px`. Các class `.col-{1-12}` chia theo 12 cột.
283
+
284
+ **Gutter variants:**
285
+
286
+ | Class | Gutter |
287
+ |---|---|
288
+ | `row` | 16px (mặc định) |
289
+ | `row-md` | 8px |
290
+ | `row-sm` | 4px |
291
+ | `row-xs` | 2px |
292
+
293
+ **Responsive columns** (mobile-first — áp dụng từ breakpoint trở lên):
294
+
295
+ | Class | Min-width |
296
+ |---|---|
297
+ | `col-sm-{1-12}` | ≥ 576px |
298
+ | `col-md-{1-12}` | ≥ 768px |
299
+ | `col-lg-{1-12}` | ≥ 992px |
300
+ | `col-xl-{1-12}` | ≥ 1200px |
301
+
302
+ Ví dụ:
303
+ ```html
304
+ <div class="row">
305
+ <!-- Full width trên mobile, 50% từ md trở lên, 33% từ lg trở lên -->
306
+ <div class="col-md-6 col-lg-4">...</div>
307
+ </div>
308
+ ```
309
+
310
+ #### CSS Grid container
311
+
312
+ ```html
313
+ <div class="grid-container grid-cols-3">
314
+ <div class="col-span-2">Chiếm 2 cột</div>
315
+ <div class="col-span-1">Chiếm 1 cột</div>
316
+ <div class="col-span-full">Full width</div>
317
+ </div>
318
+ ```
319
+
320
+ | Class | Mô tả |
321
+ |---|---|
322
+ | `grid-container` | `display: grid`, gutter cột 8px |
323
+ | `grid-cols-{1-12}` | Số cột của grid |
324
+ | `col-span-{1-12}` | Chiếm n cột |
325
+ | `col-span-full` | Chiếm toàn bộ chiều ngang |
326
+ | `row-span-{1-12}` | Chiếm n hàng |
327
+ | `row-span-full` | Chiếm toàn bộ chiều dọc |
328
+
329
+ ---
330
+
331
+ ### Flexbox
332
+
333
+ **Flex shorthand:**
334
+
335
+ | Class | CSS |
336
+ |---|---|
337
+ | `flex-1` | `flex: 1` |
338
+ | `flex-none` | `flex: none` |
339
+ | `flex-auto` | `flex: auto` |
340
+
341
+ **Direction:**
342
+ ```
343
+ flex-row flex-column flex-row-reverse flex-column-reverse
344
+ ```
345
+
346
+ **Wrap:**
347
+ ```
348
+ flex-wrap flex-nowrap
349
+ ```
350
+
351
+ **Grow & shrink:**
352
+ ```
353
+ flex-grow-0 flex-grow-1 flex-shrink-0 flex-shrink-1
354
+ ```
355
+
356
+ **Align items:**
357
+ ```
358
+ align-items-start align-items-end align-items-center
359
+ align-items-baseline align-items-stretch
360
+ ```
361
+
362
+ **Align self:**
363
+ ```
364
+ align-self-start align-self-end align-self-center
365
+ align-self-stretch align-self-auto
366
+ ```
367
+
368
+ **Align content:**
369
+ ```
370
+ align-content-start align-content-end align-content-center
371
+ align-content-between align-content-around align-content-stretch
372
+ ```
373
+
374
+ **Justify content:**
375
+ ```
376
+ justify-content-start justify-content-end justify-content-center
377
+ justify-content-between justify-content-around justify-content-evenly
378
+ ```
379
+
380
+ ---
381
+
382
+ ### Display
383
+
384
+ | Class | CSS |
385
+ |---|---|
386
+ | `d-none` | `display: none` |
387
+ | `d-block` | `display: block` |
388
+ | `d-inline` | `display: inline` |
389
+ | `d-inline-block` | `display: inline-block` |
390
+ | `d-flex` | `display: flex` |
391
+ | `d-inline-flex` | `display: inline-flex` |
392
+ | `d-grid` | `display: grid` |
393
+
394
+ ---
395
+
396
+ ### Gap
397
+
398
+ Hệ thống gap theo đơn vị **px**, range từ 0 đến 200.
399
+
400
+ | Class | CSS |
401
+ |---|---|
402
+ | `gap-{n}` | `gap: npx` |
403
+ | `gap-x-{n}` | `column-gap: npx` |
404
+ | `gap-y-{n}` | `row-gap: npx` |
405
+
406
+ Ví dụ: `gap-8`, `gap-x-16`, `gap-y-4`
407
+
408
+ ---
409
+
410
+ ### Typography
411
+
412
+ #### Design token classes
413
+
414
+ Hệ thống typography theo quy ước `T{size}{weight}` — `M` = Medium (500), `R` = Regular (400).
415
+
416
+ | Class | Font size | Weight | Line height |
417
+ |---|---|---|---|
418
+ | `T48M` / `T48R` | 48px | 500 / 400 | 56px |
419
+ | `T32M` / `T32R` | 32px | 500 / 400 | 48px |
420
+ | `T24M` / `T24R` | 24px / 20px | 500 / 400 | 28px |
421
+ | `T20M` / `T20R` | 20px | 500 / 400 | 28px |
422
+ | `T18M` / `T18R` | 18px | 500 / 400 | 28px |
423
+ | `T16M` / `T16R` | 16px | 500 / 400 | 24px |
424
+ | `T14M` / `T14R` | 14px | 500 / 400 | 20px |
425
+ | `T12M` / `T12R` | 12px | 500 / 400 | 16px |
426
+ | `T10M` / `T10R` | 10px | 500 / 400 | 12px |
427
+
428
+ #### Font-size utilities (px-based, 0–200)
429
+
430
+ ```
431
+ fs-0 fs-12 fs-14 fs-16 ... fs-200
432
+ ```
433
+
434
+ #### Font-weight utilities
435
+
436
+ ```
437
+ font-weight-light (300)
438
+ font-weight-normal (400)
439
+ font-weight-medium (500)
440
+ font-weight-bold (600)
441
+ font-weight-bolder (700)
442
+ ```
443
+
444
+ #### Text alignment
445
+
446
+ ```
447
+ text-left text-center text-right text-justify
448
+ ```
449
+
450
+ #### Text wrapping & overflow
451
+
452
+ | Class | CSS |
453
+ |---|---|
454
+ | `text-wrap` | `white-space: normal` |
455
+ | `text-nowrap` | `white-space: nowrap` |
456
+ | `text-ellipsis` | `overflow: hidden; text-overflow: ellipsis; white-space: nowrap` |
457
+ | `text-break` | `overflow-wrap: break-word; word-break: break-word` |
458
+
459
+ #### Text transform
460
+
461
+ ```
462
+ text-uppercase text-lowercase text-capitalize
463
+ ```
464
+
465
+ ---
466
+
467
+ ### Overflow
468
+
469
+ | Class | CSS |
470
+ |---|---|
471
+ | `overflow-auto` | `overflow: auto` |
472
+ | `overflow-hidden` | `overflow: hidden` |
473
+ | `overflow-visible` | `overflow: visible` |
474
+ | `overflow-scroll` | `overflow: scroll` |
475
+ | `overflow-x-auto` | `overflow-x: auto` |
476
+ | `overflow-y-auto` | `overflow-y: auto` |
477
+
478
+ ---
479
+
480
+ ### Position
481
+
482
+ ```
483
+ position-relative position-absolute position-fixed
484
+ position-sticky position-static
485
+ ```
486
+
487
+ ---
488
+
489
+ ### Elevation
490
+
491
+ CSS shadow tĩnh tương đương Angular Material `mat-elevation-z{n}`.
492
+
493
+ | Class | Dùng cho |
494
+ |---|---|
495
+ | `mat-elevation-z0` | Reset shadow |
496
+ | `mat-elevation-z1` | Card, chip |
497
+ | `mat-elevation-z2` | Button raised |
498
+ | `mat-elevation-z3` | Card hover |
499
+ | `mat-elevation-z4` | App bar |
500
+ | `mat-elevation-z5` | — |
501
+ | `mat-elevation-z6` | Floating action button |
502
+ | `mat-elevation-z7` | — |
503
+ | `mat-elevation-z8` | Dialog, drawer |
504
+
505
+ ---
506
+
507
+ ### Misc
508
+
509
+ **Vertical align:**
510
+ ```
511
+ align-middle align-top align-bottom align-baseline
512
+ ```
513
+
514
+ **Cursor:**
515
+ ```
516
+ cursor-pointer cursor-default cursor-not-allowed
517
+ ```
518
+
519
+ **Visibility:**
520
+
521
+ | Class | CSS |
522
+ |---|---|
523
+ | `visible` | `visibility: visible` |
524
+ | `invisible` | `visibility: hidden` |
@@ -11,128 +11,3 @@
11
11
  @import '../bootstrap-4.6.2/reboot';
12
12
  @import '../bootstrap-4.6.2/utilities';
13
13
  @import '../bootstrap-4.6.2/grid';
14
-
15
- // Custom spacing utilities for any number (0-999)
16
- @for $i from 0 through 200 {
17
- // Margin
18
- .m-#{$i} {
19
- margin: #{$i}px !important;
20
- }
21
- .mt-#{$i} {
22
- margin-top: #{$i}px !important;
23
- }
24
- .mr-#{$i} {
25
- margin-right: #{$i}px !important;
26
- }
27
- .mb-#{$i} {
28
- margin-bottom: #{$i}px !important;
29
- }
30
- .ml-#{$i} {
31
- margin-left: #{$i}px !important;
32
- }
33
- .mx-#{$i} {
34
- margin-left: #{$i}px !important;
35
- margin-right: #{$i}px !important;
36
- }
37
- .my-#{$i} {
38
- margin-top: #{$i}px !important;
39
- margin-bottom: #{$i}px !important;
40
- }
41
-
42
- // Padding
43
- .p-#{$i} {
44
- padding: #{$i}px !important;
45
- }
46
- .pt-#{$i} {
47
- padding-top: #{$i}px !important;
48
- }
49
- .pr-#{$i} {
50
- padding-right: #{$i}px !important;
51
- }
52
- .pb-#{$i} {
53
- padding-bottom: #{$i}px !important;
54
- }
55
- .pl-#{$i} {
56
- padding-left: #{$i}px !important;
57
- }
58
- .px-#{$i} {
59
- padding-left: #{$i}px !important;
60
- padding-right: #{$i}px !important;
61
- }
62
- .py-#{$i} {
63
- padding-top: #{$i}px !important;
64
- padding-bottom: #{$i}px !important;
65
- }
66
-
67
- // Border radius
68
- .rounded-#{$i} {
69
- border-radius: #{$i}px !important;
70
- }
71
-
72
- // Width height
73
- .w-#{$i} {
74
- width: #{$i}px !important;
75
- }
76
- .h-#{$i} {
77
- height: #{$i}px !important;
78
- }
79
-
80
- // Font size
81
- .fs-#{$i} {
82
- font-size: #{$i}px !important;
83
- }
84
-
85
- // Gap
86
- .gap-#{$i} {
87
- gap: #{$i}px !important;
88
- }
89
-
90
- .gap-y-#{$i} {
91
- row-gap: #{$i}px !important;
92
- }
93
-
94
- .gap-x-#{$i} {
95
- column-gap: #{$i}px !important;
96
- }
97
- }
98
-
99
- .flex-1 {
100
- flex: 1;
101
- }
102
-
103
- .w-full {
104
- width: 100% !important;
105
- }
106
-
107
- .h-full {
108
- height: 100% !important;
109
- }
110
-
111
- .font-weight-medium {
112
- font-weight: 500 !important;
113
- }
114
-
115
- // Custom grid
116
- .row-md {
117
- @include make-row(16px);
118
-
119
- > * {
120
- @include make-col-ready(16px);
121
- }
122
- }
123
-
124
- .row-sm {
125
- @include make-row(8px);
126
-
127
- > * {
128
- @include make-col-ready(8px);
129
- }
130
- }
131
-
132
- .row-xs {
133
- @include make-row(4px);
134
-
135
- > * {
136
- @include make-col-ready(4px);
137
- }
138
- }