@simplysm/angular 14.1.15 → 14.1.18

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 (49) hide show
  1. package/dist/controls/button/sd-additional-button.js +2 -2
  2. package/dist/controls/button/sd-anchor.js +2 -2
  3. package/dist/controls/button/sd-button.js +2 -2
  4. package/dist/controls/button/sd-modal-select-button.js +2 -2
  5. package/dist/controls/checkbox/sd-checkbox.js +2 -2
  6. package/dist/controls/checkbox/sd-switch.js +2 -2
  7. package/dist/controls/collapse/sd-collapse.js +2 -1
  8. package/dist/controls/dropdown/sd-dropdown-popup.js +2 -2
  9. package/dist/controls/dropdown/sd-dropdown.js +1 -3
  10. package/dist/controls/form/sd-form.js +1 -3
  11. package/dist/controls/gap/sd-gap.js +2 -2
  12. package/dist/controls/input/sd-date-range-picker.js +2 -2
  13. package/dist/controls/input/sd-range.js +2 -2
  14. package/dist/controls/input/sd-textarea.js +2 -2
  15. package/dist/controls/input/sd-textfield.js +2 -2
  16. package/dist/controls/select/sd-select-item.js +2 -2
  17. package/dist/controls/select/sd-select.js +3 -2
  18. package/dist/core/busy/sd-busy-container.js +2 -2
  19. package/dist/core/modal/sd-modal.js +2 -2
  20. package/dist/core/provideSdAngular.d.ts.map +1 -1
  21. package/dist/core/provideSdAngular.js +0 -12
  22. package/dist/core/toast/sd-toast-container.js +2 -2
  23. package/dist/core/toast/sd-toast.js +2 -2
  24. package/dist/data/kanban/sd-kanban-board.js +2 -2
  25. package/dist/data/shared-data/sd-shared-data-select-button.js +1 -1
  26. package/dist/data/sheet/sd-sheet-column.js +1 -1
  27. package/dist/data/sheet/sd-sheet.js +2 -2
  28. package/dist/features/theme/sd-theme-provider.d.ts +0 -1
  29. package/dist/features/theme/sd-theme-provider.d.ts.map +1 -1
  30. package/dist/features/theme/sd-theme-provider.js +1 -6
  31. package/dist/features/theme/sd-theme-selector.d.ts.map +1 -1
  32. package/dist/features/theme/sd-theme-selector.js +42 -54
  33. package/dist/features/visual/sd-calendar.js +3 -3
  34. package/dist/features/visual/sd-label.js +2 -2
  35. package/dist/features/visual/sd-note.js +2 -2
  36. package/dist/features/visual/sd-progress.js +2 -2
  37. package/dist/layout/sidebar/sd-sidebar-container.js +2 -2
  38. package/dist/layout/sidebar/sd-sidebar.js +2 -2
  39. package/package.json +26 -26
  40. package/scss/commons/_colors.scss +247 -326
  41. package/scss/commons/_theme-variables.scss +2 -12
  42. package/scss/commons/_variables.scss +83 -56
  43. package/scss/themes/_variables-blueprint.scss +99 -95
  44. package/src/core/provideSdAngular.ts +0 -14
  45. package/src/features/theme/sd-theme-provider.ts +1 -7
  46. package/src/features/theme/sd-theme-selector.ts +77 -81
  47. package/src/layout/sidebar/sd-sidebar.ts +1 -1
  48. package/styles.css +368 -485
  49. package/scss/themes/_variables-dark.scss +0 -53
@@ -1,50 +1,3 @@
1
- @use "sass:map";
2
- @use "sass:color";
3
- @use "./colors";
4
-
5
- /*@function to-rgb($oklch-color) {
6
- @return color.to-space($oklch-color, rgb);
7
- }*/
8
-
9
- /*$colors: (
10
- red: to-rgb(oklch(0.704 0.191 22.216)),
11
- orange: to-rgb(oklch(0.75 0.183 55.934)),
12
- amber: to-rgb(oklch(0.828 0.189 84.429)),
13
- yellow: to-rgb(oklch(0.852 0.199 91.936)),
14
- lime: to-rgb(oklch(0.841 0.238 128.85)),
15
- green: to-rgb(oklch(0.792 0.209 151.711)),
16
- emerald: to-rgb(oklch(0.765 0.177 163.223)),
17
- teal: to-rgb(oklch(0.777 0.152 181.912)),
18
- cyan: to-rgb(oklch(0.789 0.154 211.53)),
19
- sky: to-rgb(oklch(0.746 0.16 232.661)),
20
- blue: to-rgb(oklch(0.707 0.165 254.624)),
21
- indigo: to-rgb(oklch(0.673 0.182 276.935)),
22
- violet: to-rgb(oklch(0.702 0.183 293.541)),
23
- purple: to-rgb(oklch(0.714 0.203 305.504)),
24
- fuchsia: to-rgb(oklch(0.74 0.238 322.16)),
25
- pink: to-rgb(oklch(0.718 0.202 349.761)),
26
- rose: to-rgb(oklch(0.712 0.194 13.428)),
27
- slate: to-rgb(oklch(0.704 0.04 256.788)),
28
- gray: to-rgb(oklch(0.707 0.022 261.325)),
29
- zinc: to-rgb(oklch(0.705 0.015 286.067)),
30
- neutral: to-rgb(oklch(0.708 0 0)),
31
- stone: to-rgb(oklch(0.709 0.01 56.259)),
32
- );*/
33
-
34
- // D6: lightest~darkest가 실제 밝기와 일치하도록 수정
35
- // lightest(+90%) > lighter(+75%) > light(+60%) > default > dark(-10%) > darker(-25%) > darkest(-40%)
36
- //@function color-map($base, $offset: 0%) {
37
- // @return (
38
- // lightest: color.scale($base, $lightness: 90% + $offset),
39
- // lighter: color.scale($base, $lightness: 75% + $offset),
40
- // light: color.scale($base, $lightness: 60% + $offset),
41
- // default: $base,
42
- // dark: color.scale($base, $lightness: -10% + $offset),
43
- // darker: color.scale($base, $lightness: -25% + $offset),
44
- // darkest: color.scale($base, $lightness: -40% + $offset)
45
- // );
46
- //}
47
-
48
1
  // Breakpoints for media queries (CSS custom properties cannot be used in media queries)
49
2
  $breakpoint-mobile: 520px;
50
3
  $breakpoint-xxs: 800px;
@@ -53,14 +6,80 @@ $breakpoint-sm: 1280px;
53
6
 
54
7
  $vars: (
55
8
  theme: (
56
- "gray": colors.variants(colors.get(zinc, 400)),
57
- blue-gray: colors.variants(colors.get(slate, 400)),
58
- primary: colors.variants(colors.get(blue, 400)),
59
- secondary: colors.variants(colors.get(blue, 400)),
60
- info: colors.variants(colors.get(cyan, 400)),
61
- success: colors.variants(colors.get(lime, 400)),
62
- warning: colors.variants(colors.get(orange, 400)),
63
- danger: colors.variants(colors.get(red, 400)),
9
+ // 중립색: 텍스트·보더 용도라 한 단계 밝은 스케일
10
+ "gray": (
11
+ lightest: var(--color-zinc-50),
12
+ lighter: var(--color-zinc-100),
13
+ light: var(--color-zinc-300),
14
+ default: var(--color-zinc-400),
15
+ dark: var(--color-zinc-500),
16
+ darker: var(--color-zinc-600),
17
+ darkest: var(--color-zinc-700),
18
+ ),
19
+ blue-gray: (
20
+ lightest: var(--color-slate-50),
21
+ lighter: var(--color-slate-100),
22
+ light: var(--color-slate-300),
23
+ default: var(--color-slate-400),
24
+ dark: var(--color-slate-500),
25
+ darker: var(--color-slate-600),
26
+ darkest: var(--color-slate-700),
27
+ ),
28
+ // 시맨틱 solid 색: 500 기준
29
+ primary: (
30
+ lightest: var(--color-blue-50),
31
+ lighter: var(--color-blue-100),
32
+ light: var(--color-blue-200),
33
+ default: var(--color-blue-500),
34
+ dark: var(--color-blue-600),
35
+ darker: var(--color-blue-700),
36
+ darkest: var(--color-blue-800),
37
+ ),
38
+ secondary: (
39
+ lightest: var(--color-blue-50),
40
+ lighter: var(--color-blue-100),
41
+ light: var(--color-blue-200),
42
+ default: var(--color-blue-500),
43
+ dark: var(--color-blue-600),
44
+ darker: var(--color-blue-700),
45
+ darkest: var(--color-blue-800),
46
+ ),
47
+ info: (
48
+ lightest: var(--color-cyan-50),
49
+ lighter: var(--color-cyan-100),
50
+ light: var(--color-cyan-200),
51
+ default: var(--color-cyan-500),
52
+ dark: var(--color-cyan-600),
53
+ darker: var(--color-cyan-700),
54
+ darkest: var(--color-cyan-800),
55
+ ),
56
+ success: (
57
+ lightest: var(--color-lime-50),
58
+ lighter: var(--color-lime-100),
59
+ light: var(--color-lime-200),
60
+ default: var(--color-lime-500),
61
+ dark: var(--color-lime-600),
62
+ darker: var(--color-lime-700),
63
+ darkest: var(--color-lime-800),
64
+ ),
65
+ warning: (
66
+ lightest: var(--color-orange-50),
67
+ lighter: var(--color-orange-100),
68
+ light: var(--color-orange-200),
69
+ default: var(--color-orange-500),
70
+ dark: var(--color-orange-600),
71
+ darker: var(--color-orange-700),
72
+ darkest: var(--color-orange-800),
73
+ ),
74
+ danger: (
75
+ lightest: var(--color-red-50),
76
+ lighter: var(--color-red-100),
77
+ light: var(--color-red-200),
78
+ default: var(--color-red-500),
79
+ dark: var(--color-red-600),
80
+ darker: var(--color-red-700),
81
+ darkest: var(--color-red-800),
82
+ ),
64
83
  ),
65
84
  trans: (
66
85
  darkest: rgba(0, 0, 0, 0.5),
@@ -107,7 +126,15 @@ $vars: (
107
126
  0: 0,
108
127
  auto: "auto",
109
128
  ),
110
- border-color: colors.variants(colors.get(zinc, 400)),
129
+ border-color: (
130
+ lightest: var(--color-zinc-100),
131
+ lighter: var(--color-zinc-200),
132
+ light: var(--color-zinc-300),
133
+ default: var(--color-zinc-400),
134
+ dark: var(--color-zinc-500),
135
+ darker: var(--color-zinc-600),
136
+ darkest: var(--color-zinc-700),
137
+ ),
111
138
  border-radius: (
112
139
  xs: var(--gap-xxs),
113
140
  sm: var(--gap-xs),
@@ -1,95 +1,99 @@
1
- @use "sass:map";
2
- @use "sass:color";
3
- @use "../commons/colors";
4
-
5
- $paper: (
6
- theme: (
7
- "gray": (
8
- lightest: colors.get(zinc, 50),
9
- lighter: colors.get(zinc, 100),
10
- light: colors.get(zinc, 300),
11
- default: colors.get(zinc, 500),
12
- dark: colors.get(zinc, 600),
13
- darker: colors.get(zinc, 700),
14
- darkest: colors.get(zinc, 800)
15
- ),
16
- blue-gray: (
17
- lightest: colors.get(slate, 50),
18
- lighter: colors.get(slate, 100),
19
- light: colors.get(slate, 300),
20
- default: colors.get(slate, 500),
21
- dark: colors.get(slate, 600),
22
- darker: colors.get(slate, 700),
23
- darkest: colors.get(slate, 800)
24
- ),
25
- primary: (
26
- lightest: colors.get(blue, 100),
27
- lighter: colors.get(blue, 300),
28
- light: colors.get(blue, 500),
29
- default: colors.get(blue, 900),
30
- dark: colors.get(blue, 950),
31
- darker: colors.get(blue, 950),
32
- darkest: colors.get(blue, 950)
33
- ),
34
- secondary: (
35
- lightest: colors.get(blue, 50),
36
- lighter: colors.get(blue, 100),
37
- light: colors.get(blue, 300),
38
- default: colors.get(blue, 500),
39
- dark: colors.get(blue, 600),
40
- darker: colors.get(blue, 700),
41
- darkest: colors.get(blue, 800)
42
- ),
43
- info: (
44
- lightest: colors.get(cyan, 50),
45
- lighter: colors.get(cyan, 100),
46
- light: colors.get(cyan, 300),
47
- default: colors.get(cyan, 500),
48
- dark: colors.get(cyan, 600),
49
- darker: colors.get(cyan, 700),
50
- darkest: colors.get(cyan, 800)
51
- ),
52
- success: (
53
- lightest: colors.get(green, 50),
54
- lighter: colors.get(green, 100),
55
- light: colors.get(green, 300),
56
- default: colors.get(green, 500),
57
- dark: colors.get(green, 600),
58
- darker: colors.get(green, 700),
59
- darkest: colors.get(green, 800)
60
- ),
61
- warning: (
62
- lightest: colors.get(orange, 100),
63
- lighter: colors.get(orange, 200),
64
- light: colors.get(orange, 300),
65
- default: colors.get(orange, 400),
66
- dark: colors.get(orange, 600),
67
- darker: colors.get(orange, 700),
68
- darkest: colors.get(orange, 800)
69
- ),
70
- danger: (
71
- lightest: colors.get(red, 50),
72
- lighter: colors.get(red, 100),
73
- light: colors.get(red, 200),
74
- default: colors.get(red, 400),
75
- dark: colors.get(red, 600),
76
- darker: colors.get(red, 700),
77
- darkest: colors.get(red, 800)
78
- )
79
- ),
80
- background-color: var(--theme-gray-lightest),
81
- control-color: white,
82
- border-radius: (
83
- xs: 0,
84
- sm: 0,
85
- default: 0,
86
- lg: 0,
87
- xl: 0,
88
- xxl: 0,
89
- ),
90
- elevation-blur-mult: 0,
91
- sheet: (
92
- bg: var(--theme-gray-lightest),
93
- ),
94
- border-color: colors.variants(colors.get(zinc, 500)),
95
- );
1
+ $paper: (
2
+ theme: (
3
+ "gray": (
4
+ lightest: var(--color-zinc-50),
5
+ lighter: var(--color-zinc-100),
6
+ light: var(--color-zinc-300),
7
+ default: var(--color-zinc-500),
8
+ dark: var(--color-zinc-600),
9
+ darker: var(--color-zinc-700),
10
+ darkest: var(--color-zinc-800),
11
+ ),
12
+ blue-gray: (
13
+ lightest: var(--color-slate-50),
14
+ lighter: var(--color-slate-100),
15
+ light: var(--color-slate-300),
16
+ default: var(--color-slate-500),
17
+ dark: var(--color-slate-600),
18
+ darker: var(--color-slate-700),
19
+ darkest: var(--color-slate-800),
20
+ ),
21
+ primary: (
22
+ lightest: var(--color-blue-100),
23
+ lighter: var(--color-blue-300),
24
+ light: var(--color-blue-500),
25
+ default: var(--color-blue-900),
26
+ dark: var(--color-blue-950),
27
+ darker: var(--color-blue-950),
28
+ darkest: var(--color-blue-950),
29
+ ),
30
+ secondary: (
31
+ lightest: var(--color-blue-50),
32
+ lighter: var(--color-blue-100),
33
+ light: var(--color-blue-300),
34
+ default: var(--color-blue-500),
35
+ dark: var(--color-blue-600),
36
+ darker: var(--color-blue-700),
37
+ darkest: var(--color-blue-800),
38
+ ),
39
+ info: (
40
+ lightest: var(--color-cyan-50),
41
+ lighter: var(--color-cyan-100),
42
+ light: var(--color-cyan-300),
43
+ default: var(--color-cyan-500),
44
+ dark: var(--color-cyan-600),
45
+ darker: var(--color-cyan-700),
46
+ darkest: var(--color-cyan-800),
47
+ ),
48
+ success: (
49
+ lightest: var(--color-green-50),
50
+ lighter: var(--color-green-100),
51
+ light: var(--color-green-300),
52
+ default: var(--color-green-500),
53
+ dark: var(--color-green-600),
54
+ darker: var(--color-green-700),
55
+ darkest: var(--color-green-800),
56
+ ),
57
+ warning: (
58
+ lightest: var(--color-orange-100),
59
+ lighter: var(--color-orange-200),
60
+ light: var(--color-orange-300),
61
+ default: var(--color-orange-400),
62
+ dark: var(--color-orange-600),
63
+ darker: var(--color-orange-700),
64
+ darkest: var(--color-orange-800),
65
+ ),
66
+ danger: (
67
+ lightest: var(--color-red-50),
68
+ lighter: var(--color-red-100),
69
+ light: var(--color-red-200),
70
+ default: var(--color-red-400),
71
+ dark: var(--color-red-600),
72
+ darker: var(--color-red-700),
73
+ darkest: var(--color-red-800),
74
+ ),
75
+ ),
76
+ background-color: var(--theme-gray-lightest),
77
+ control-color: white,
78
+ border-radius: (
79
+ xs: 0,
80
+ sm: 0,
81
+ default: 0,
82
+ lg: 0,
83
+ xl: 0,
84
+ xxl: 0,
85
+ ),
86
+ elevation-blur-mult: 0,
87
+ sheet: (
88
+ bg: var(--theme-gray-lightest),
89
+ ),
90
+ border-color: (
91
+ lightest: var(--color-zinc-100),
92
+ lighter: var(--color-zinc-200),
93
+ light: var(--color-zinc-300),
94
+ default: var(--color-zinc-500),
95
+ dark: var(--color-zinc-600),
96
+ darker: var(--color-zinc-700),
97
+ darkest: var(--color-zinc-800),
98
+ ),
99
+ );
@@ -53,20 +53,6 @@ export function provideSdAngular(opt: { clientName: string }): EnvironmentProvid
53
53
  const sdTheme = inject(SdThemeProvider);
54
54
  const sdLocalStorage = inject(SdLocalStorageProvider);
55
55
 
56
- const savedDark = sdLocalStorage.get("sd-theme-dark");
57
- if (savedDark != null) {
58
- sdTheme.dark.set(savedDark);
59
- }
60
-
61
- let prevDark = sdTheme.dark();
62
- effect(() => {
63
- const dark = sdTheme.dark();
64
- if (dark !== prevDark) {
65
- sdLocalStorage.set("sd-theme-dark", dark);
66
- prevDark = dark;
67
- }
68
- });
69
-
70
56
  const savedBlueprint = sdLocalStorage.get("sd-theme-blueprint");
71
57
  if (savedBlueprint != null) {
72
58
  sdTheme.blueprint.set(savedBlueprint);
@@ -3,9 +3,7 @@ import { isPlatformBrowser } from "@angular/common";
3
3
 
4
4
  @Injectable({ providedIn: "root" })
5
5
  export class SdThemeProvider {
6
- dark = signal<boolean>(false);
7
-
8
- // 블루프린트(엔지니어링 도면) 테마 — dark 토글과 직교. dark 와 조합해 4면을 만든다.
6
+ // 블루프린트(엔지니어링 도면) 테마
9
7
  blueprint = signal<boolean>(false);
10
8
 
11
9
  readonly fontSizePresets: readonly number[] = [12, 14, 16, 20, 24, 28];
@@ -16,10 +14,6 @@ export class SdThemeProvider {
16
14
  // SSR(프리렌더) 가드: document 반영은 브라우저 전용
17
15
  if (!isPlatformBrowser(inject(PLATFORM_ID))) return;
18
16
 
19
- effect(() => {
20
- document.body.classList.toggle("sd-theme-dark", this.dark());
21
- });
22
-
23
17
  effect(() => {
24
18
  document.body.classList.toggle("sd-theme-blueprint", this.blueprint());
25
19
  });
@@ -1,81 +1,77 @@
1
- import {
2
- ChangeDetectionStrategy,
3
- Component,
4
- computed,
5
- inject,
6
- ViewEncapsulation,
7
- } from "@angular/core";
8
- import { SdDropdown } from "../../controls/dropdown/sd-dropdown";
9
- import { SdDropdownPopup } from "../../controls/dropdown/sd-dropdown-popup";
10
- import { SdButton } from "../../controls/button/sd-button";
11
- import { SdSwitch } from "../../controls/checkbox/sd-switch";
12
- import { NgIcon } from "@ng-icons/core";
13
- import { SdThemeProvider } from "./sd-theme-provider";
14
- import { tablerMinus, tablerPalette, tablerPlus } from "@ng-icons/tabler-icons";
15
-
16
- @Component({
17
- selector: "sd-theme-selector",
18
- changeDetection: ChangeDetectionStrategy.OnPush,
19
- encapsulation: ViewEncapsulation.None,
20
- standalone: true,
21
- imports: [SdDropdown, SdDropdownPopup, SdButton, SdSwitch, NgIcon],
22
- template: `
23
- <sd-dropdown>
24
- <sd-button [inline]="true" [theme]="'link-gray'">
25
- <ng-icon [svg]="tablerPalette" />
26
- </sd-button>
27
- <sd-dropdown-popup>
28
- <div class="p-default">
29
- <div class="flex-row gap-sm cross-align-center">
30
- <span>글자 크기</span>
31
- <div class="flex-row gap-xs cross-align-center">
32
- <sd-button
33
- [inline]="true"
34
- [theme]="'link-gray'"
35
- [size]="'sm'"
36
- [disabled]="isMinFontSize()"
37
- (click)="_sdTheme.decreaseFontSize()"
38
- >
39
- <ng-icon [svg]="tablerMinus" />
40
- </sd-button>
41
- <span>{{ _sdTheme.fontSize() }}px</span>
42
- <sd-button
43
- [inline]="true"
44
- [theme]="'link-gray'"
45
- [size]="'sm'"
46
- [disabled]="isMaxFontSize()"
47
- (click)="_sdTheme.increaseFontSize()"
48
- >
49
- <ng-icon [svg]="tablerPlus" />
50
- </sd-button>
51
- </div>
52
- </div>
53
- <div class="flex-row gap-sm cross-align-center">
54
- <span>다크 모드</span>
55
- <sd-switch [(value)]="_sdTheme.dark" />
56
- </div>
57
- <div class="flex-row gap-sm cross-align-center">
58
- <span>블루프린트</span>
59
- <sd-switch [(value)]="_sdTheme.blueprint" />
60
- </div>
61
- </div>
62
- </sd-dropdown-popup>
63
- </sd-dropdown>
64
- `,
65
- styles: [],
66
- })
67
- export class SdThemeSelector {
68
- protected readonly _sdTheme = inject(SdThemeProvider);
69
-
70
- isMinFontSize = computed(() => this._sdTheme.fontSize() <= this._sdTheme.fontSizePresets[0]);
71
-
72
- isMaxFontSize = computed(
73
- () =>
74
- this._sdTheme.fontSize() >=
75
- this._sdTheme.fontSizePresets[this._sdTheme.fontSizePresets.length - 1],
76
- );
77
-
78
- protected readonly tablerPlus = tablerPlus;
79
- protected readonly tablerMinus = tablerMinus;
80
- protected readonly tablerPalette = tablerPalette;
81
- }
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ computed,
5
+ inject,
6
+ ViewEncapsulation,
7
+ } from "@angular/core";
8
+ import { SdDropdown } from "../../controls/dropdown/sd-dropdown";
9
+ import { SdDropdownPopup } from "../../controls/dropdown/sd-dropdown-popup";
10
+ import { SdButton } from "../../controls/button/sd-button";
11
+ import { SdSwitch } from "../../controls/checkbox/sd-switch";
12
+ import { NgIcon } from "@ng-icons/core";
13
+ import { SdThemeProvider } from "./sd-theme-provider";
14
+ import { tablerMinus, tablerPalette, tablerPlus } from "@ng-icons/tabler-icons";
15
+
16
+ @Component({
17
+ selector: "sd-theme-selector",
18
+ changeDetection: ChangeDetectionStrategy.OnPush,
19
+ encapsulation: ViewEncapsulation.None,
20
+ standalone: true,
21
+ imports: [SdDropdown, SdDropdownPopup, SdButton, SdSwitch, NgIcon],
22
+ template: `
23
+ <sd-dropdown>
24
+ <sd-button [inline]="true" [theme]="'link-gray'">
25
+ <ng-icon [svg]="tablerPalette" />
26
+ </sd-button>
27
+ <sd-dropdown-popup>
28
+ <div class="p-default">
29
+ <div class="flex-row gap-sm cross-align-center">
30
+ <span>글자 크기</span>
31
+ <div class="flex-row gap-xs cross-align-center">
32
+ <sd-button
33
+ [inline]="true"
34
+ [theme]="'link-gray'"
35
+ [size]="'sm'"
36
+ [disabled]="isMinFontSize()"
37
+ (click)="_sdTheme.decreaseFontSize()"
38
+ >
39
+ <ng-icon [svg]="tablerMinus" />
40
+ </sd-button>
41
+ <span>{{ _sdTheme.fontSize() }}px</span>
42
+ <sd-button
43
+ [inline]="true"
44
+ [theme]="'link-gray'"
45
+ [size]="'sm'"
46
+ [disabled]="isMaxFontSize()"
47
+ (click)="_sdTheme.increaseFontSize()"
48
+ >
49
+ <ng-icon [svg]="tablerPlus" />
50
+ </sd-button>
51
+ </div>
52
+ </div>
53
+ <div class="flex-row gap-sm cross-align-center">
54
+ <span>블루프린트</span>
55
+ <sd-switch [(value)]="_sdTheme.blueprint" />
56
+ </div>
57
+ </div>
58
+ </sd-dropdown-popup>
59
+ </sd-dropdown>
60
+ `,
61
+ styles: [],
62
+ })
63
+ export class SdThemeSelector {
64
+ protected readonly _sdTheme = inject(SdThemeProvider);
65
+
66
+ isMinFontSize = computed(() => this._sdTheme.fontSize() <= this._sdTheme.fontSizePresets[0]);
67
+
68
+ isMaxFontSize = computed(
69
+ () =>
70
+ this._sdTheme.fontSize() >=
71
+ this._sdTheme.fontSizePresets[this._sdTheme.fontSizePresets.length - 1],
72
+ );
73
+
74
+ protected readonly tablerPlus = tablerPlus;
75
+ protected readonly tablerMinus = tablerMinus;
76
+ protected readonly tablerPalette = tablerPalette;
77
+ }
@@ -34,7 +34,7 @@ import { SdSidebarContainer } from "./sd-sidebar-container";
34
34
  height: 100%;
35
35
  //background: var(--control-color);
36
36
  //background: var(--theme-gray-lightest);
37
- //border-right: 1px solid var(--border-color-lighter);
37
+ border-right: 1px solid var(--border-color-lighter);
38
38
 
39
39
  @media not all and (max-width: variables.$breakpoint-mobile) {
40
40
  transition: transform var(--animation-duration) ease-out;