@sd-angular/core 19.0.0-beta.90 → 19.0.0-beta.92
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.
- package/assets/scss/README.md +524 -0
- package/assets/scss/core/bootstrap.scss +0 -125
- package/assets/scss/core/utilities/_base.scss +333 -0
- package/assets/scss/core/utilities/_border.scss +22 -0
- package/assets/scss/core/utilities/_display.scss +10 -0
- package/assets/scss/core/utilities/_elevation.scss +80 -0
- package/assets/scss/core/utilities/_flexbox.scss +54 -0
- package/assets/scss/core/utilities/_gap.scss +9 -0
- package/assets/scss/core/utilities/_grid.scss +142 -0
- package/assets/scss/core/utilities/_index.scss +17 -0
- package/assets/scss/core/utilities/_misc.scss +20 -0
- package/assets/scss/core/utilities/_overflow.scss +9 -0
- package/assets/scss/core/utilities/_position.scss +8 -0
- package/assets/scss/core/utilities/_sizing.scss +28 -0
- package/assets/scss/core/utilities/_spacing.scss +31 -0
- package/assets/scss/core/utilities/_typography.scss +99 -0
- package/assets/scss/sd-core.scss +4 -6
- package/components/badge/src/badge.component.d.ts +0 -3
- package/components/table/src/directives/index.d.ts +1 -0
- package/components/table/src/directives/sd-column-resize.directive.d.ts +13 -0
- package/components/table/src/models/table-option-config.model.d.ts +1 -0
- package/components/table/src/services/config.service.d.ts +5 -0
- package/components/table/src/table.component.d.ts +1 -0
- package/fesm2022/sd-angular-core-components-badge.mjs +0 -1
- package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-import-excel.mjs +2 -2
- package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-modal.mjs +2 -2
- package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-table.mjs +168 -8
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-upload-file.mjs +4 -4
- package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-workflow.mjs +6 -6
- package/fesm2022/sd-angular-core-components-workflow.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-date-range.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-date.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-datetime.mjs +428 -70
- package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-select.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-switch.mjs +2 -6
- package/fesm2022/sd-angular-core-forms-switch.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-layout.mjs +1 -1
- package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-storage.mjs +5 -0
- package/fesm2022/sd-angular-core-services-storage.mjs.map +1 -1
- package/fesm2022/sd-angular-core-utilities-extensions.mjs +5 -5
- package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
- package/forms/datetime/src/datetime.component.d.ts +16 -6
- package/forms/datetime/src/popup/sd-datetime-picker.component.d.ts +38 -0
- package/forms/datetime/src/popup/sd-time-spinner.component.d.ts +41 -0
- package/forms/switch/src/switch.component.d.ts +3 -4
- package/package.json +25 -25
- package/sd-angular-core-19.0.0-beta.92.tgz +0 -0
- package/services/storage/src/storage.model.d.ts +1 -0
- package/utilities/models/src/size.model.d.ts +1 -1
- package/assets/img/1D UX System.zip +0 -0
- package/assets/img/Popup/Vector.png +0 -0
- package/assets/img/empty.png +0 -0
- package/assets/img/empty.svg +0 -27
- package/assets/img/file-types/eps/001-file.eps +0 -143
- package/assets/img/file-types/eps/002-file-1.eps +0 -136
- package/assets/img/file-types/eps/003-file-2.eps +0 -130
- package/assets/img/file-types/eps/004-file-3.eps +0 -127
- package/assets/img/file-types/eps/005-file-4.eps +0 -120
- package/assets/img/file-types/eps/006-file-5.eps +0 -133
- package/assets/img/file-types/eps/007-file-6.eps +0 -133
- package/assets/img/file-types/eps/008-file-7.eps +0 -144
- package/assets/img/file-types/eps/009-file-8.eps +0 -150
- package/assets/img/file-types/eps/010-file-9.eps +0 -155
- package/assets/img/file-types/eps/011-file-10.eps +0 -124
- package/assets/img/file-types/eps/012-file-11.eps +0 -147
- package/assets/img/file-types/eps/013-file-12.eps +0 -125
- package/assets/img/file-types/eps/014-file-13.eps +0 -129
- package/assets/img/file-types/eps/015-file-14.eps +0 -143
- package/assets/img/file-types/eps/016-file-15.eps +0 -130
- package/assets/img/file-types/eps/017-file-16.eps +0 -197
- package/assets/img/file-types/eps/018-file-17.eps +0 -146
- package/assets/img/file-types/eps/019-file-18.eps +0 -131
- package/assets/img/file-types/eps/020-file-19.eps +0 -137
- package/assets/img/file-types/eps/021-file-20.eps +0 -134
- package/assets/img/file-types/eps/022-file-21.eps +0 -130
- package/assets/img/file-types/eps/023-file-22.eps +0 -161
- package/assets/img/file-types/eps/024-file-23.eps +0 -144
- package/assets/img/file-types/eps/025-file-24.eps +0 -164
- package/assets/img/file-types/eps/026-file-25.eps +0 -135
- package/assets/img/file-types/eps/027-file-26.eps +0 -124
- package/assets/img/file-types/eps/028-file-27.eps +0 -120
- package/assets/img/file-types/eps/029-file-28.eps +0 -141
- package/assets/img/file-types/eps/030-file-29.eps +0 -130
- package/assets/img/file-types/eps/031-file-30.eps +0 -157
- package/assets/img/file-types/eps/032-file-31.eps +0 -139
- package/assets/img/file-types/eps/033-file-32.eps +0 -139
- package/assets/img/file-types/eps/034-file-33.eps +0 -189
- package/assets/img/file-types/eps/035-file-34.eps +0 -162
- package/assets/img/file-types/eps/036-file-35.eps +0 -142
- package/assets/img/file-types/eps/037-file-36.eps +0 -123
- package/assets/img/file-types/eps/038-file-37.eps +0 -127
- package/assets/img/file-types/eps/039-file-38.eps +0 -146
- package/assets/img/file-types/eps/040-file-39.eps +0 -126
- package/assets/img/file-types/eps/041-file-40.eps +0 -117
- package/assets/img/file-types/eps/042-file-41.eps +0 -156
- package/assets/img/file-types/eps/043-file-42.eps +0 -118
- package/assets/img/file-types/eps/044-file-43.eps +0 -172
- package/assets/img/file-types/eps/045-file-44.eps +0 -201
- package/assets/img/file-types/eps/046-file-45.eps +0 -94
- package/assets/img/file-types/eps/047-file-46.eps +0 -176
- package/assets/img/file-types/eps/048-file-47.eps +0 -238
- package/assets/img/file-types/eps/049-file-48.eps +0 -187
- package/assets/img/file-types/eps/050-file-49.eps +0 -137
- package/assets/img/file-types/license/license.pdf +0 -0
- package/assets/img/file-types/png/3ds.png +0 -0
- package/assets/img/file-types/png/ai.png +0 -0
- package/assets/img/file-types/png/asp.png +0 -0
- package/assets/img/file-types/png/avi.png +0 -0
- package/assets/img/file-types/png/bin.png +0 -0
- package/assets/img/file-types/png/com.png +0 -0
- package/assets/img/file-types/png/css.png +0 -0
- package/assets/img/file-types/png/csv.png +0 -0
- package/assets/img/file-types/png/dbf.png +0 -0
- package/assets/img/file-types/png/dll.png +0 -0
- package/assets/img/file-types/png/doc.png +0 -0
- package/assets/img/file-types/png/docx.png +0 -0
- package/assets/img/file-types/png/dwg.png +0 -0
- package/assets/img/file-types/png/eml.png +0 -0
- package/assets/img/file-types/png/eps.png +0 -0
- package/assets/img/file-types/png/exe.png +0 -0
- package/assets/img/file-types/png/file.png +0 -0
- package/assets/img/file-types/png/fla.png +0 -0
- package/assets/img/file-types/png/gif.png +0 -0
- package/assets/img/file-types/png/htm.png +0 -0
- package/assets/img/file-types/png/ico.png +0 -0
- package/assets/img/file-types/png/ini.png +0 -0
- package/assets/img/file-types/png/iso.png +0 -0
- package/assets/img/file-types/png/jar.png +0 -0
- package/assets/img/file-types/png/jpg.png +0 -0
- package/assets/img/file-types/png/js.png +0 -0
- package/assets/img/file-types/png/mkv.png +0 -0
- package/assets/img/file-types/png/mov.png +0 -0
- package/assets/img/file-types/png/mp3.png +0 -0
- package/assets/img/file-types/png/mp4.png +0 -0
- package/assets/img/file-types/png/nfo.png +0 -0
- package/assets/img/file-types/png/obj.png +0 -0
- package/assets/img/file-types/png/otf.png +0 -0
- package/assets/img/file-types/png/pdf.png +0 -0
- package/assets/img/file-types/png/pkg.png +0 -0
- package/assets/img/file-types/png/png.png +0 -0
- package/assets/img/file-types/png/ppt.png +0 -0
- package/assets/img/file-types/png/pptx.png +0 -0
- package/assets/img/file-types/png/psd.png +0 -0
- package/assets/img/file-types/png/rtf.png +0 -0
- package/assets/img/file-types/png/svg.png +0 -0
- package/assets/img/file-types/png/tiff.png +0 -0
- package/assets/img/file-types/png/ttf.png +0 -0
- package/assets/img/file-types/png/txt.png +0 -0
- package/assets/img/file-types/png/vcf.png +0 -0
- package/assets/img/file-types/png/wav.png +0 -0
- package/assets/img/file-types/png/wmv.png +0 -0
- package/assets/img/file-types/png/xls.png +0 -0
- package/assets/img/file-types/png/xlsx.png +0 -0
- package/assets/img/file-types/png/xml.png +0 -0
- package/assets/img/file-types/png/zip.png +0 -0
- package/assets/img/file-types/psd/001-file.psd +0 -0
- package/assets/img/file-types/psd/002-file-1.psd +0 -0
- package/assets/img/file-types/psd/003-file-2.psd +0 -0
- package/assets/img/file-types/psd/004-file-3.psd +0 -0
- package/assets/img/file-types/psd/005-file-4.psd +0 -0
- package/assets/img/file-types/psd/006-file-5.psd +0 -0
- package/assets/img/file-types/psd/007-file-6.psd +0 -0
- package/assets/img/file-types/psd/008-file-7.psd +0 -0
- package/assets/img/file-types/psd/009-file-8.psd +0 -0
- package/assets/img/file-types/psd/010-file-9.psd +0 -0
- package/assets/img/file-types/psd/011-file-10.psd +0 -0
- package/assets/img/file-types/psd/012-file-11.psd +0 -0
- package/assets/img/file-types/psd/013-file-12.psd +0 -0
- package/assets/img/file-types/psd/014-file-13.psd +0 -0
- package/assets/img/file-types/psd/015-file-14.psd +0 -0
- package/assets/img/file-types/psd/016-file-15.psd +0 -0
- package/assets/img/file-types/psd/017-file-16.psd +0 -0
- package/assets/img/file-types/psd/018-file-17.psd +0 -0
- package/assets/img/file-types/psd/019-file-18.psd +0 -0
- package/assets/img/file-types/psd/020-file-19.psd +0 -0
- package/assets/img/file-types/psd/021-file-20.psd +0 -0
- package/assets/img/file-types/psd/022-file-21.psd +0 -0
- package/assets/img/file-types/psd/023-file-22.psd +0 -0
- package/assets/img/file-types/psd/024-file-23.psd +0 -0
- package/assets/img/file-types/psd/025-file-24.psd +0 -0
- package/assets/img/file-types/psd/026-file-25.psd +0 -0
- package/assets/img/file-types/psd/027-file-26.psd +0 -0
- package/assets/img/file-types/psd/028-file-27.psd +0 -0
- package/assets/img/file-types/psd/029-file-28.psd +0 -0
- package/assets/img/file-types/psd/030-file-29.psd +0 -0
- package/assets/img/file-types/psd/031-file-30.psd +0 -0
- package/assets/img/file-types/psd/032-file-31.psd +0 -0
- package/assets/img/file-types/psd/033-file-32.psd +0 -0
- package/assets/img/file-types/psd/034-file-33.psd +0 -0
- package/assets/img/file-types/psd/035-file-34.psd +0 -0
- package/assets/img/file-types/psd/036-file-35.psd +0 -0
- package/assets/img/file-types/psd/037-file-36.psd +0 -0
- package/assets/img/file-types/psd/038-file-37.psd +0 -0
- package/assets/img/file-types/psd/039-file-38.psd +0 -0
- package/assets/img/file-types/psd/040-file-39.psd +0 -0
- package/assets/img/file-types/psd/041-file-40.psd +0 -0
- package/assets/img/file-types/psd/042-file-41.psd +0 -0
- package/assets/img/file-types/psd/043-file-42.psd +0 -0
- package/assets/img/file-types/psd/044-file-43.psd +0 -0
- package/assets/img/file-types/psd/045-file-44.psd +0 -0
- package/assets/img/file-types/psd/046-file-45.psd +0 -0
- package/assets/img/file-types/psd/047-file-46.psd +0 -0
- package/assets/img/file-types/psd/048-file-47.psd +0 -0
- package/assets/img/file-types/psd/049-file-48.psd +0 -0
- package/assets/img/file-types/psd/050-file-49.psd +0 -0
- package/assets/img/file-types/svg/001-file.svg +0 -1
- package/assets/img/file-types/svg/002-file-1.svg +0 -1
- package/assets/img/file-types/svg/003-file-2.svg +0 -1
- package/assets/img/file-types/svg/004-file-3.svg +0 -1
- package/assets/img/file-types/svg/005-file-4.svg +0 -1
- package/assets/img/file-types/svg/006-file-5.svg +0 -1
- package/assets/img/file-types/svg/007-file-6.svg +0 -1
- package/assets/img/file-types/svg/008-file-7.svg +0 -1
- package/assets/img/file-types/svg/009-file-8.svg +0 -1
- package/assets/img/file-types/svg/010-file-9.svg +0 -1
- package/assets/img/file-types/svg/011-file-10.svg +0 -1
- package/assets/img/file-types/svg/012-file-11.svg +0 -1
- package/assets/img/file-types/svg/013-file-12.svg +0 -1
- package/assets/img/file-types/svg/014-file-13.svg +0 -1
- package/assets/img/file-types/svg/015-file-14.svg +0 -1
- package/assets/img/file-types/svg/016-file-15.svg +0 -1
- package/assets/img/file-types/svg/017-file-16.svg +0 -1
- package/assets/img/file-types/svg/018-file-17.svg +0 -1
- package/assets/img/file-types/svg/019-file-18.svg +0 -1
- package/assets/img/file-types/svg/020-file-19.svg +0 -1
- package/assets/img/file-types/svg/021-file-20.svg +0 -1
- package/assets/img/file-types/svg/022-file-21.svg +0 -1
- package/assets/img/file-types/svg/023-file-22.svg +0 -1
- package/assets/img/file-types/svg/024-file-23.svg +0 -1
- package/assets/img/file-types/svg/025-file-24.svg +0 -1
- package/assets/img/file-types/svg/026-file-25.svg +0 -1
- package/assets/img/file-types/svg/027-file-26.svg +0 -1
- package/assets/img/file-types/svg/028-file-27.svg +0 -1
- package/assets/img/file-types/svg/029-file-28.svg +0 -1
- package/assets/img/file-types/svg/030-file-29.svg +0 -1
- package/assets/img/file-types/svg/031-file-30.svg +0 -1
- package/assets/img/file-types/svg/032-file-31.svg +0 -1
- package/assets/img/file-types/svg/033-file-32.svg +0 -1
- package/assets/img/file-types/svg/034-file-33.svg +0 -1
- package/assets/img/file-types/svg/035-file-34.svg +0 -1
- package/assets/img/file-types/svg/036-file-35.svg +0 -1
- package/assets/img/file-types/svg/037-file-36.svg +0 -1
- package/assets/img/file-types/svg/038-file-37.svg +0 -1
- package/assets/img/file-types/svg/039-file-38.svg +0 -1
- package/assets/img/file-types/svg/040-file-39.svg +0 -1
- package/assets/img/file-types/svg/041-file-40.svg +0 -1
- package/assets/img/file-types/svg/042-file-41.svg +0 -1
- package/assets/img/file-types/svg/043-file-42.svg +0 -1
- package/assets/img/file-types/svg/044-file-43.svg +0 -1
- package/assets/img/file-types/svg/045-file-44.svg +0 -1
- package/assets/img/file-types/svg/046-file-45.svg +0 -1
- package/assets/img/file-types/svg/047-file-46.svg +0 -1
- package/assets/img/file-types/svg/048-file-47.svg +0 -1
- package/assets/img/file-types/svg/049-file-48.svg +0 -1
- package/assets/img/file-types/svg/050-file-49.svg +0 -1
- package/assets/img/plus-search-zoom-white.png +0 -0
- package/assets/scss/core/cursor.scss +0 -3
- package/assets/scss/core/elevation.scss +0 -57
- package/assets/scss/core/grid.scss +0 -40
- package/assets/scss/core/print.scss +0 -47
- package/assets/scss/core/typography.scss +0 -121
- package/sd-angular-core-19.0.0-beta.90.tgz +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; }
|