@simplysm/angular 14.0.51 → 14.0.53

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 (134) hide show
  1. package/dist/data/sheet/sd-sheet.d.ts +9 -12
  2. package/dist/data/sheet/sd-sheet.d.ts.map +1 -1
  3. package/dist/data/sheet/sd-sheet.js +150 -168
  4. package/dist/data/sheet/types.d.ts +1 -0
  5. package/dist/data/sheet/types.d.ts.map +1 -1
  6. package/dist/data/sheet/useSheetCellStyling.d.ts +2 -2
  7. package/dist/data/sheet/useSheetCellStyling.d.ts.map +1 -1
  8. package/dist/data/sheet/useSheetCellStyling.js +20 -12
  9. package/dist/data/sheet/useSheetColumnFixing.d.ts +3 -8
  10. package/dist/data/sheet/useSheetColumnFixing.d.ts.map +1 -1
  11. package/dist/data/sheet/useSheetColumnFixing.js +19 -27
  12. package/dist/data/sheet/useSheetLayoutEngine.d.ts.map +1 -1
  13. package/dist/data/sheet/useSheetLayoutEngine.js +4 -1
  14. package/dist/layout/dock/sd-dock-container.d.ts.map +1 -1
  15. package/dist/layout/dock/sd-dock-container.js +3 -3
  16. package/package.json +7 -8
  17. package/src/data/sheet/sd-sheet.ts +39 -60
  18. package/src/data/sheet/types.ts +1 -0
  19. package/src/data/sheet/useSheetCellStyling.ts +19 -11
  20. package/src/data/sheet/useSheetColumnFixing.ts +21 -28
  21. package/src/data/sheet/useSheetLayoutEngine.ts +4 -1
  22. package/src/layout/dock/sd-dock-container.ts +1 -0
  23. package/README.md +0 -476
  24. package/docs/bootstrap/provide-sd-angular.md +0 -37
  25. package/docs/bootstrap/sd-angular-config-provider.md +0 -16
  26. package/docs/directives/sd-command-directive.md +0 -30
  27. package/docs/directives/sd-events.md +0 -25
  28. package/docs/directives/sd-intersection-directive.md +0 -36
  29. package/docs/directives/sd-invalid.md +0 -24
  30. package/docs/directives/sd-resize-directive.md +0 -42
  31. package/docs/directives/sd-ripple.md +0 -23
  32. package/docs/directives/sd-router-link.md +0 -38
  33. package/docs/directives/sd-show-effect.md +0 -18
  34. package/docs/directives/sd-typed-template.md +0 -69
  35. package/docs/features/sd-address-search-modal.md +0 -50
  36. package/docs/features/sd-permission-table.md +0 -20
  37. package/docs/features/sd-shared-data-components.md +0 -158
  38. package/docs/features/sd-tiptap-editor.md +0 -26
  39. package/docs/pipes/format-pipe.md +0 -41
  40. package/docs/plugins/sd-global-error-handler.md +0 -23
  41. package/docs/plugins/sd-option-event-plugin.md +0 -34
  42. package/docs/provider-types/sd-menu.md +0 -65
  43. package/docs/provider-types/sd-modal-content-def.md +0 -148
  44. package/docs/provider-types/sd-toast-content-def.md +0 -73
  45. package/docs/provider-types/shared-data-base.md +0 -59
  46. package/docs/providers/sd-activated-modal-provider.md +0 -34
  47. package/docs/providers/sd-app-structure-provider.md +0 -81
  48. package/docs/providers/sd-busy-provider.md +0 -18
  49. package/docs/providers/sd-file-dialog-provider.md +0 -40
  50. package/docs/providers/sd-local-storage-provider.md +0 -20
  51. package/docs/providers/sd-modal-provider.md +0 -67
  52. package/docs/providers/sd-navigate-window-provider.md +0 -18
  53. package/docs/providers/sd-print-provider.md +0 -25
  54. package/docs/providers/sd-service-client-factory-provider.md +0 -43
  55. package/docs/providers/sd-shared-data-provider.md +0 -64
  56. package/docs/providers/sd-system-config-provider.md +0 -46
  57. package/docs/providers/sd-system-log-provider.md +0 -18
  58. package/docs/providers/sd-theme-provider.md +0 -38
  59. package/docs/providers/sd-toast-provider.md +0 -65
  60. package/docs/recipes/_common-rules.md +0 -244
  61. package/docs/recipes/crud-detail/extension-a-edit-save.md +0 -230
  62. package/docs/recipes/crud-detail/extension-b-delete-restore.md +0 -142
  63. package/docs/recipes/crud-detail/extension-c-modal-view.md +0 -214
  64. package/docs/recipes/crud-detail/extension-d-control-view.md +0 -103
  65. package/docs/recipes/crud-detail/extension-e-auxiliary.md +0 -87
  66. package/docs/recipes/crud-detail/extension-f-complex-detail.md +0 -234
  67. package/docs/recipes/crud-detail.md +0 -353
  68. package/docs/recipes/crud-list/extension-a-inline-edit.md +0 -410
  69. package/docs/recipes/crud-list/extension-b-selection.md +0 -226
  70. package/docs/recipes/crud-list/extension-c-inline-delete.md +0 -87
  71. package/docs/recipes/crud-list/extension-d-select-modal.md +0 -207
  72. package/docs/recipes/crud-list/extension-e-readonly-modal.md +0 -165
  73. package/docs/recipes/crud-list/extension-f-modal-edit.md +0 -177
  74. package/docs/recipes/crud-list/extension-g-excel.md +0 -157
  75. package/docs/recipes/crud-list.md +0 -446
  76. package/docs/recipes/data-select-button.md +0 -412
  77. package/docs/recipes/page-modal-container.md +0 -260
  78. package/docs/styling/classes.md +0 -149
  79. package/docs/styling/mixins.md +0 -100
  80. package/docs/styling/themes.md +0 -35
  81. package/docs/styling/variables.md +0 -147
  82. package/docs/type-utilities/directive-input-signals.md +0 -232
  83. package/docs/ui-data/sd-list.md +0 -37
  84. package/docs/ui-data/sd-sheet.md +0 -227
  85. package/docs/ui-form/sd-additional-button.md +0 -26
  86. package/docs/ui-form/sd-anchor.md +0 -31
  87. package/docs/ui-form/sd-button.md +0 -105
  88. package/docs/ui-form/sd-checkbox-group.md +0 -39
  89. package/docs/ui-form/sd-checkbox.md +0 -81
  90. package/docs/ui-form/sd-date-range-picker.md +0 -27
  91. package/docs/ui-form/sd-form.md +0 -89
  92. package/docs/ui-form/sd-modal-select-button.md +0 -54
  93. package/docs/ui-form/sd-numpad.md +0 -26
  94. package/docs/ui-form/sd-range.md +0 -26
  95. package/docs/ui-form/sd-select.md +0 -68
  96. package/docs/ui-form/sd-shared-data-select.md +0 -52
  97. package/docs/ui-form/sd-state-preset.md +0 -37
  98. package/docs/ui-form/sd-switch.md +0 -27
  99. package/docs/ui-form/sd-textarea.md +0 -33
  100. package/docs/ui-form/sd-textfield.md +0 -145
  101. package/docs/ui-layout/sd-dock-container.md +0 -64
  102. package/docs/ui-layout/sd-dock.md +0 -37
  103. package/docs/ui-layout/sd-gap.md +0 -26
  104. package/docs/ui-layout/sd-kanban-board.md +0 -96
  105. package/docs/ui-layout/sd-kanban-lane.md +0 -34
  106. package/docs/ui-layout/sd-kanban.md +0 -29
  107. package/docs/ui-navigation/sd-collapse.md +0 -35
  108. package/docs/ui-navigation/sd-pagination.md +0 -26
  109. package/docs/ui-navigation/sd-sidebar-container.md +0 -49
  110. package/docs/ui-navigation/sd-sidebar-menu.md +0 -22
  111. package/docs/ui-navigation/sd-sidebar-user.md +0 -43
  112. package/docs/ui-navigation/sd-tab.md +0 -51
  113. package/docs/ui-navigation/sd-topbar-container.md +0 -97
  114. package/docs/ui-navigation/sd-topbar-menu.md +0 -23
  115. package/docs/ui-navigation/sd-topbar-user.md +0 -38
  116. package/docs/ui-navigation/sd-topbar.md +0 -30
  117. package/docs/ui-overlay/sd-busy-container.md +0 -69
  118. package/docs/ui-overlay/sd-confirm-modal.md +0 -30
  119. package/docs/ui-overlay/sd-dropdown.md +0 -40
  120. package/docs/ui-overlay/sd-modal.md +0 -34
  121. package/docs/ui-overlay/sd-prompt-modal.md +0 -30
  122. package/docs/ui-overlay/sd-toast.md +0 -35
  123. package/docs/ui-visual/sd-barcode.md +0 -36
  124. package/docs/ui-visual/sd-calendar.md +0 -34
  125. package/docs/ui-visual/sd-echarts.md +0 -32
  126. package/docs/ui-visual/sd-label.md +0 -24
  127. package/docs/ui-visual/sd-note.md +0 -23
  128. package/docs/ui-visual/sd-progress.md +0 -23
  129. package/docs/utils/inject-routing-signals.md +0 -161
  130. package/docs/utils/inject-sd-system-config-resource.md +0 -35
  131. package/docs/utils/mark.md +0 -43
  132. package/docs/utils/selection-managers.md +0 -96
  133. package/docs/utils/set-safe-style.md +0 -19
  134. package/docs/utils/setup-functions.md +0 -93
@@ -1,149 +0,0 @@
1
- # CSS Classes
2
-
3
- 전역 유틸리티 CSS 클래스. `@layer base, theme-variant, utilities` 순서로 구성되며, 유틸리티 클래스는 `@layer utilities`에 정의된다.
4
-
5
- ## Layout
6
-
7
- ### Flex
8
-
9
- | Class | Description |
10
- |-------|-------------|
11
- | `.flex-row` | `display: flex; flex-direction: row` (기본 gap 없음) |
12
- | `.flex-column` | `display: flex; flex-direction: column` (기본 gap 없음) |
13
- | `.flex-row-inline` | `display: inline-flex; flex-direction: row` |
14
- | `.flex-column-inline` | `display: inline-flex; flex-direction: column` |
15
- | `.flex-fill` | `flex: 1 1 auto; overflow: auto` |
16
- | `.flex-auto` | `flex: 1 0 auto` |
17
- | `.flex-min` | `flex: 0 0 0` |
18
-
19
- ### Grid
20
-
21
- | Class | Description |
22
- |-------|-------------|
23
- | `.grid` | `display: grid; grid-template-columns: repeat(12, 1fr)` |
24
- | `.grid-{1..12}` | `grid-column-end: span {n}` |
25
- | `.grid-sm-{1..12}` | `@media (max-width: 1280px)` 반응형 |
26
- | `.grid-xs-{1..12}` | `@media (max-width: 1024px)` 반응형 |
27
- | `.grid-xxs-{1..12}` | `@media (max-width: 800px)` 반응형 |
28
-
29
- ### Alignment
30
-
31
- | Class | Description |
32
- |-------|-------------|
33
- | `.main-align-start` | `justify-content: start` |
34
- | `.main-align-end` | `justify-content: end` |
35
- | `.main-align-center` | `justify-content: center` |
36
- | `.cross-align-start` | `align-items: start` |
37
- | `.cross-align-end` | `align-items: end` |
38
- | `.cross-align-center` | `align-items: center` |
39
-
40
- ## Spacing
41
-
42
- gap 키: `xxs`, `xs`, `sm`, `default`, `lg`, `xl`, `xxl`, `0`, `auto`
43
-
44
- | Pattern | Description |
45
- |---------|-------------|
46
- | `.p-{key}` | 전체 padding |
47
- | `.pv-{key}` | 수직 padding (top + bottom) |
48
- | `.ph-{key}` | 수평 padding (left + right) |
49
- | `.pt-{key}`, `.pr-{key}`, `.pb-{key}`, `.pl-{key}` | 방향별 padding |
50
- | `.m-{key}` | 전체 margin |
51
- | `.mv-{key}` | 수직 margin |
52
- | `.mh-{key}` | 수평 margin |
53
- | `.mt-{key}`, `.mr-{key}`, `.mb-{key}`, `.ml-{key}` | 방향별 margin |
54
- | `.gap-{key}` | flex/grid gap |
55
- | `.sw-{key}` | width |
56
- | `.sh-{key}` | height |
57
- | `.p-{key}-{key}` | padding: vertical horizontal |
58
- | `.m-{key}-{key}` | margin: vertical horizontal |
59
- | `.t-{key}`, `.r-{key}`, `.b-{key}`, `.l-{key}` | position offset (top, right, bottom, left) |
60
-
61
- ## Card
62
-
63
- | Class | Description |
64
- |-------|-------------|
65
- | `.card` | 카드 컨테이너 (배경, 그림자, 진입 애니메이션) |
66
-
67
- ## Form
68
-
69
- | Class | Description |
70
- |-------|-------------|
71
- | `.form-box` | 수직 폼 레이아웃 (`flex-direction: column`, gap `default`) |
72
- | `.form-box-inline` | 인라인 폼 레이아웃 (`inline-flex`, `flex-wrap: wrap`, gap `sm`) |
73
- | `.form-table` | 테이블 형태 폼 레이아웃 (`display: table`) |
74
- | `.form-table-header` | form-table 내 섹션 헤더 (`<th class="form-table-header">`) |
75
- | `.form-control` | 기본 폼 컨트롤 스타일 (padding, font, line-height) |
76
-
77
- ## Table
78
-
79
- | Class | Description |
80
- |-------|-------------|
81
- | `.table` | 기본 테이블 스타일 (border, spacing) |
82
- | `.table-inset` | 외곽 border 제거 |
83
- | `.table-inline` | `width: auto` |
84
- | `.table-bd-v` | 수직 border만 제거 |
85
- | `.table-bd-h` | 수평 border만 제거 |
86
-
87
- ## Display
88
-
89
- | Class | Description |
90
- |-------|-------------|
91
- | `.block` | `display: block` |
92
- | `.inline-block` | `display: inline-block` |
93
- | `.inline` | `display: inline` |
94
- | `.fill` | `height: 100%; width: 100%; overflow: auto` |
95
- | `.nowrap` | `white-space: nowrap` |
96
- | `.overflow-auto` | `overflow: auto` |
97
- | `.position-relative` | `position: relative` |
98
- | `.sticky-top` | `position: sticky; top: 0; z-index: 1` |
99
-
100
- ## Text
101
-
102
- | Pattern | Description |
103
- |---------|-------------|
104
- | `.ft-size-{key}` | 폰트 크기 (key: h1, h2, h3, h4, h5, h6, lg, default, sm) |
105
- | `.tx-left`, `.tx-right`, `.tx-center` | text-align |
106
- | `.tx-line-through` | 취소선 |
107
- | `.tx-underline` | 밑줄 |
108
- | `.tx-trans-{key}` | 텍스트 투명도 색상 (key: dark, default, light, lighter, lightest, rev-default, rev-dark, rev-darker) |
109
- | `.tx-theme-{theme}-{shade}` | 테마별 텍스트 색상 |
110
-
111
- ## Background
112
-
113
- | Pattern | Description |
114
- |---------|-------------|
115
- | `.bg-theme-{theme}-{shade}` | 테마별 배경색 |
116
- | `.bg-trans-{key}` | 투명도 배경색 |
117
- | `.bg-default` | 기본 배경색 (`--background-color`) |
118
- | `.bg-control` | 컨트롤 배경색 (`--control-color`) |
119
-
120
- ## Border
121
-
122
- | Pattern | Description |
123
- |---------|-------------|
124
- | `.bd` | `border: 1px solid` |
125
- | `.bd-none` | `border: none` |
126
- | `.bd-transparent` | `border-color: transparent` |
127
- | `.bd-theme-{theme}-{shade}` | 테마별 border 색상 |
128
- | `.bd-trans-{key}` | 투명도 border 색상 |
129
- | `.bd-color-{key}` | border-color 변수 (key: lighter, light, default, dark, darker) |
130
- | `.bd{d}` | 방향별 border (d: t, r, b, l) |
131
- | `.bd{d}-theme-{theme}-{shade}` | 방향별 테마 border 색상 |
132
- | `.bd{d}-trans-{key}` | 방향별 투명도 border 색상 |
133
- | `.bd{d}-color-{key}` | 방향별 border-color 변수 |
134
- | `.bd{d}-none` | 방향별 border 제거 |
135
- | `.bd{d}-transparent` | 방향별 border 투명 |
136
- | `.bd-width-{key}` | border 두께 |
137
- | `.bd{d}-width-{key}` | 방향별 border 두께 |
138
- | `.bd-radius-{key}` | border-radius (key: xs, sm, default, lg, xl, xxl) |
139
- | `.bd{d}-radius-{key}` | 방향별 border-radius (d: t, b, l, r) |
140
-
141
- ## Special
142
-
143
- | Class | Description |
144
- |-------|-------------|
145
- | `.help` | 도움말 스타일 (dotted underline, help cursor) |
146
- | `.control-header` | 컨트롤 헤더 (작은 폰트, 회색) |
147
- | `.page-header` | 페이지 헤더 (작은 폰트, 회색, 하단 여백) |
148
- | `.sh-topbar` | `height: var(--topbar-height)` |
149
- | `.sw-sidebar` | `width: var(--sidebar-width)` |
@@ -1,100 +0,0 @@
1
- # Mixins / Functions
2
-
3
- 공개 SCSS mixin과 function. `scss/commons/_mixins.scss`에 정의된다.
4
-
5
- ## Mixins
6
-
7
- ### `writeVars($value, $prevKey)`
8
-
9
- SCSS 맵을 CSS 커스텀 프로퍼티로 변환하여 출력한다. 중첩 맵은 키를 `-`로 연결한다.
10
-
11
- ```scss
12
- @include mixins.writeVars(variables.$vars, "");
13
- // 출력: --theme-gray-lightest: ...; --theme-gray-lighter: ...; ...
14
- ```
15
-
16
- | Param | Type | Description |
17
- |-------|------|-------------|
18
- | `$value` | `map \| value` | 변환할 SCSS 맵 또는 값 |
19
- | `$prevKey` | `string` | 키 접두사 (루트 호출 시 `""`) |
20
-
21
- ### `elevation($value)`
22
-
23
- Material Design 스타일 box-shadow를 적용한다.
24
-
25
- ```scss
26
- @include mixins.elevation(4); // 양수: 외부 그림자
27
- @include mixins.elevation(-2); // 음수: 내부(inset) 그림자
28
- @include mixins.elevation(0); // 그림자 제거
29
- ```
30
-
31
- | Param | Type | Description |
32
- |-------|------|-------------|
33
- | `$value` | `number` | 그림자 강도. 양수: 외부, 음수: 내부, 0/none: 제거 |
34
-
35
- ### `form-control-base()`
36
-
37
- ��본 폼 컨트롤 스타일. padding, font, line-height, color를 설정한다. 매개변수 없음.
38
-
39
- ```scss
40
- @include mixins.form-control-base();
41
- // display: block; padding: var(--gap-sm) var(--gap-default);
42
- // font-size, font-family, font-variant-numeric, line-height, color
43
- ```
44
-
45
- ### `help()`
46
-
47
- 도움말 스타일 (점선 밑줄 + help 커서). 매개변수 없음.
48
-
49
- ```scss
50
- @include mixins.help();
51
- // text-decoration-line: underline; text-decoration-style: dotted; cursor: help;
52
- ```
53
-
54
- ### `border-direction-variants($dir, $d)`
55
-
56
- 특정 방향의 border 유틸리티 클래스를 일괄 생성한다. 내부적으로 `_styles.scss`에서 4방향에 대해 호출된다.
57
-
58
- | Param | Type | Description |
59
- |-------|------|-------------|
60
- | `$dir` | `string` | CSS 방향 (`top`, `right`, `bottom`, `left`) |
61
- | `$d` | `string` | 약어 (`t`, `r`, `b`, `l`) |
62
-
63
- ### `flex-direction($direction, $defaultGap?)`
64
-
65
- flex-direction과 gap을 설정한다. Chrome 84 이하(flex gap 미지원)를 위한 margin 폴백을 포함한다.
66
-
67
- ```scss
68
- @include mixins.flex-direction(row, var(--gap-sm));
69
- // flex-direction: row; gap: var(--gap-sm);
70
- // + @supports not (appearance: auto) { gap: 0; > * + * { margin-left: ... } }
71
- ```
72
-
73
- | Param | Type | Description |
74
- |-------|------|-------------|
75
- | `$direction` | `row \| column` | flex 방향 |
76
- | `$defaultGap` | `value \| null` | 기본 gap 값 (선택) |
77
-
78
- ## Functions
79
-
80
- ### `to-rgb($oklch-color)`
81
-
82
- OKLCH 색상을 RGB 색상 공간으로 변환한다. `_variables.scss`에 정의된다.
83
-
84
- ```scss
85
- $blue: to-rgb(oklch(0.707 0.165 254.624));
86
- ```
87
-
88
- ### `color-map($base, $offset?)`
89
-
90
- 기본 색상에서 7단계(lightest~darkest) shade 맵을 생성한다. `_variables.scss`에 정의된다.
91
-
92
- ```scss
93
- $primary: color-map(map.get($colors, blue));
94
- // (lightest: ..., lighter: ..., light: ..., default: ..., dark: ..., darker: ..., darkest: ...)
95
- ```
96
-
97
- | Param | Type | Description |
98
- |-------|------|-------------|
99
- | `$base` | `color` | 기본 색상 |
100
- | `$offset` | `percentage` | lightness 오프셋 (기본 `0%`) |
@@ -1,35 +0,0 @@
1
- # Themes
2
-
3
- ## `.sd-theme-dark`
4
-
5
- 다크 모드 테마 클래스. `<body>`에 `SdThemeProvider`가 자동으로 토글한다.
6
-
7
- `@layer theme-variant`에 정의되며, `:root`의 CSS 커스텀 프로퍼티를 오버라이드한다.
8
-
9
- ### 오버라이드 변수
10
-
11
- | Category | Description |
12
- |----------|-------------|
13
- | `--theme-{group}-{shade}` | 모든 테마 색상이 반전된다. lightest가 어두운 톤, darkest가 밝은 톤으로 변환 |
14
- | `--trans-*` | 투명도 값이 흰색 기반(`rgba(255,255,255,...)`)으로 변경 |
15
- | `--text-trans-*` | 텍스트 색상이 흰색 기반으로 변경 (`dark: white`, `default: rgba(255,255,255,0.87)` 등) |
16
- | `--border-color-*` | border 색상이 다크 테마 기준으로 변경 |
17
- | `--background-color` | `#000` |
18
- | `--background-rev-color` | `#fff` |
19
- | `--control-color` | `#000` |
20
- | `--busy-overlay-bg` | `rgba(0, 0, 0, 0.6)` |
21
- | `--sheet-bg` | 다크 테마 시트 배경 |
22
-
23
- ### 이미지 반전
24
-
25
- ```css
26
- .sd-theme-dark img:not(.no-invert) {
27
- filter: invert(1) hue-rotate(180deg);
28
- }
29
- ```
30
-
31
- 다크 모드에서 모든 `<img>`가 자동 반전된다. 반전을 원하지 않는 이미지에 `class="no-invert"`를 추가한다.
32
-
33
- ### 활성화
34
-
35
- `SdThemeProvider.dark` signal이 `true`일 때 `<body>`에 `.sd-theme-dark` 클래스가 추가된다. `provideSdAngular`가 localStorage와 자동 동기화한다.
@@ -1,147 +0,0 @@
1
- # CSS Custom Properties
2
-
3
- `:root`에 선언되는 CSS 커스텀 프로퍼티. SCSS `$vars` 맵에서 `mixins.writeVars()`로 생성된다.
4
-
5
- ## Theme Colors
6
-
7
- OKLCH 기반 17+5 색상 팔레트. 각 테마 그룹에 7단계 shade가 존재한다.
8
-
9
- **테마 그룹**: gray, blue-gray, primary, secondary, info, success, warning, danger
10
-
11
- **Shade 단계**: lightest (+90%), lighter (+75%), light (+60%), default, dark (-10%), darker (-25%), darkest (-40%)
12
-
13
- | Property Pattern | Description |
14
- |------------------|-------------|
15
- | `--theme-{group}-lightest` | 가장 밝은 단계 |
16
- | `--theme-{group}-lighter` | 밝은 단계 |
17
- | `--theme-{group}-light` | 약간 밝은 단계 |
18
- | `--theme-{group}-default` | 기본 단계 |
19
- | `--theme-{group}-dark` | 약간 어두운 단계 |
20
- | `--theme-{group}-darker` | 어두운 단계 |
21
- | `--theme-{group}-darkest` | 가장 어두운 단계 |
22
-
23
- **기본 색상 매핑** (OKLCH):
24
-
25
- | Theme Group | Base Color |
26
- |-------------|------------|
27
- | gray | `oklch(0.707 0.022 261.325)` (gray) |
28
- | blue-gray | `oklch(0.704 0.04 256.788)` (slate) |
29
- | primary | `oklch(0.707 0.165 254.624)` (blue) |
30
- | secondary | `oklch(0.707 0.165 254.624)` (blue) |
31
- | info | `oklch(0.789 0.154 211.53)` (cyan) |
32
- | success | `oklch(0.841 0.238 128.85)` (lime) |
33
- | warning | `oklch(0.75 0.183 55.934)` (orange) |
34
- | danger | `oklch(0.704 0.191 22.216)` (red) |
35
-
36
- ## Transparency
37
-
38
- | Property | Default | Description |
39
- |----------|---------|-------------|
40
- | `--trans-darkest` | `rgba(0, 0, 0, 0.5)` | 가장 어두운 투명 |
41
- | `--trans-darker` | `rgba(0, 0, 0, 0.4)` | |
42
- | `--trans-dark` | `rgba(0, 0, 0, 0.3)` | |
43
- | `--trans-default` | `rgba(0, 0, 0, 0.2)` | |
44
- | `--trans-light` | `rgba(0, 0, 0, 0.1)` | |
45
- | `--trans-lighter` | `rgba(0, 0, 0, 0.05)` | |
46
- | `--trans-lightest` | `rgba(0, 0, 0, 0.03)` | |
47
- | `--trans-rev-default` | `rgba(255, 255, 255, 0.1)` | 역방향 투명 |
48
- | `--trans-rev-light` | `rgba(255, 255, 255, 0.2)` | |
49
- | `--trans-rev-lighter` | `rgba(255, 255, 255, 0.3)` | |
50
- | `--trans-rev-lightest` | `rgba(255, 255, 255, 0.4)` | |
51
-
52
- ## Text Colors
53
-
54
- | Property | Default | Description |
55
- |----------|---------|-------------|
56
- | `--text-trans-dark` | `black` | 강조 텍스트 |
57
- | `--text-trans-default` | `rgba(0, 0, 0, 0.87)` | 기본 텍스트 |
58
- | `--text-trans-light` | `rgba(0, 0, 0, 0.6)` | 보조 텍스트 |
59
- | `--text-trans-lighter` | `rgba(0, 0, 0, 0.38)` | 비활성 텍스트 |
60
- | `--text-trans-lightest` | `rgba(0, 0, 0, 0.2)` | 최소 텍스트 |
61
- | `--text-trans-rev-default` | `white` | 역방향 기본 텍스트 |
62
- | `--text-trans-rev-dark` | `rgba(255, 255, 255, 0.7)` | 역방향 강조 텍스트 |
63
- | `--text-trans-rev-darker` | `rgba(255, 255, 255, 0.5)` | 역방향 더 강조 |
64
-
65
- ## Font Size
66
-
67
- | Property | Default | Description |
68
- |----------|---------|-------------|
69
- | `--font-size-h1` | `2rem` | h1 |
70
- | `--font-size-h2` | `1.5rem` | h2 |
71
- | `--font-size-h3` | `1.3333rem` | h3 |
72
- | `--font-size-h4` | `1.1667rem` | h4 |
73
- | `--font-size-h5` | `1rem` | h5 |
74
- | `--font-size-h6` | `0.9167rem` | h6 |
75
- | `--font-size-lg` | `1.1667rem` | 큰 폰트 |
76
- | `--font-size-default` | `1rem` | 기본 폰트 |
77
- | `--font-size-sm` | `0.9167rem` | 작은 폰트 |
78
-
79
- ## Gap (Spacing)
80
-
81
- | Property | Default | Description |
82
- |----------|---------|-------------|
83
- | `--gap-xxs` | `0.0833rem` | 초소형 |
84
- | `--gap-xs` | `0.1667rem` | 소형 |
85
- | `--gap-sm` | `0.3333rem` | 중소형 |
86
- | `--gap-default` | `0.5rem` | 기본 |
87
- | `--gap-lg` | `0.6667rem` | 중대형 |
88
- | `--gap-xl` | `1rem` | 대형 |
89
- | `--gap-xxl` | `1.5rem` | 초대형 |
90
- | `--gap-0` | `0` | 없음 |
91
- | `--gap-auto` | `auto` | 자동 |
92
-
93
- ## Border
94
-
95
- | Property | Default | Description |
96
- |----------|---------|-------------|
97
- | `--border-color-lighter` | `var(--theme-gray-lightest)` | 가장 밝은 border |
98
- | `--border-color-light` | `var(--theme-gray-lighter)` | 밝은 border |
99
- | `--border-color-default` | `var(--theme-gray-light)` | 기본 border |
100
- | `--border-color-dark` | `var(--theme-gray-default)` | 어두운 border |
101
- | `--border-color-darker` | `var(--theme-gray-dark)` | 가장 어두운 border |
102
- | `--border-radius-xs` | `var(--gap-xxs)` | |
103
- | `--border-radius-sm` | `var(--gap-xs)` | |
104
- | `--border-radius-default` | `var(--gap-sm)` | |
105
- | `--border-radius-lg` | `var(--gap-default)` | |
106
- | `--border-radius-xl` | `var(--gap-lg)` | |
107
- | `--border-radius-xxl` | `var(--gap-xl)` | |
108
-
109
- ## Layout & Z-Index
110
-
111
- | Property | Default | Description |
112
- |----------|---------|-------------|
113
- | `--line-height` | `1.5em` | 기본 line-height |
114
- | `--font-family` | `sans-serif` | 기본 폰트 패밀리 |
115
- | `--font-family-monospace` | `monospace` | 코드 폰트 패밀리 |
116
- | `--background-color` | `white` | 페이지 배경색 |
117
- | `--background-rev-color` | `black` | 역방향 배경색 |
118
- | `--control-color` | `white` | 컨트롤 배경색 |
119
- | `--busy-overlay-bg` | `rgba(255, 255, 255, 0.6)` | busy 오버레이 배경 |
120
- | `--animation-duration` | `0.2s` | 애니메이션 지속 시간 |
121
- | `--elevation-size` | `0.0833rem` | elevation 단위 |
122
- | `--sidebar-width` | `15em` | 사이드바 너비 |
123
- | `--topbar-height` | `3em` | 탑바 높이 |
124
- | `--z-index-toast` | `9999` | 토스트 z-index |
125
- | `--z-index-busy` | `9998` | busy z-index |
126
- | `--z-index-dropdown` | `5000` | 드롭다운 z-index |
127
- | `--z-index-modal` | `4000` | 모달 z-index |
128
- | `--z-index-sidebar` | `3000` | 사이드바 z-index |
129
-
130
- ## Sheet
131
-
132
- | Property | Default | Description |
133
- |----------|---------|-------------|
134
- | `--sheet-pv` | `var(--gap-xs)` | 시트 셀 수직 padding |
135
- | `--sheet-ph` | `var(--gap-sm)` | 시트 셀 수평 padding |
136
- | `--sheet-bg` | `var(--theme-gray-lightest)` | 시트 배경색 |
137
-
138
- ## Breakpoints (SCSS 전용)
139
-
140
- CSS 커스텀 프로퍼티가 아닌 SCSS 변수. media query에서 사용된다.
141
-
142
- | Variable | Value | Description |
143
- |----------|-------|-------------|
144
- | `$breakpoint-mobile` | `520px` | 모바일 |
145
- | `$breakpoint-xxs` | `800px` | 초소형 |
146
- | `$breakpoint-xs` | `1024px` | 소형 |
147
- | `$breakpoint-sm` | `1280px` | 중소형 |
@@ -1,232 +0,0 @@
1
- # Type Utilities
2
-
3
- 컴포넌트/디렉티브 입력 시그널 타입 추출 유틸리티 모음.
4
-
5
- ## `DirectiveInputSignals`
6
-
7
- 컴포넌트/디렉티브의 InputSignal 프로퍼티에서 값 타입을 추출하는 유틸리티 타입. InputSignal이 아닌 프로퍼티는 제외되며, undefined를 포함하는 필드는 optional로 변환된다.
8
-
9
- ```typescript
10
- type DirectiveInputSignals<T> = UndefToOptional<{
11
- [P in keyof T as T[P] extends InputSignal<any> ? P : never]: T[P] extends InputSignal<infer V> ? V : never;
12
- }>
13
- ```
14
-
15
- ### 예시
16
-
17
- ```typescript
18
- class MyComponent {
19
- name = input.required<string>();
20
- age = input(0);
21
- }
22
- // DirectiveInputSignals<MyComponent> = { name: string; age: number }
23
- ```
24
-
25
- ## `UndefToOptional`
26
-
27
- undefined를 포함하는 프로퍼티를 optional로 변환하는 유틸리티 타입.
28
-
29
- ```typescript
30
- type UndefToOptional<T> = {
31
- [K in keyof T as undefined extends T[K] ? never : K]: T[K];
32
- } & {
33
- [K in keyof T as undefined extends T[K] ? K : never]?: Exclude<T[K], undefined>;
34
- }
35
- ```
36
-
37
- 예시: `{ name: string; age: number | undefined }` → `{ name: string; age?: number }`
38
-
39
- ## `WithOptional`
40
-
41
- 특정 키를 optional로 변환하는 유틸리티 타입.
42
-
43
- ```typescript
44
- type WithOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
45
- ```
46
-
47
- ## `SdViewType`
48
-
49
- 뷰 타입.
50
-
51
- ```typescript
52
- type SdViewType = "page" | "modal" | "control"
53
- ```
54
-
55
- ## `SortingDef`
56
-
57
- 정렬 정의.
58
-
59
- ```typescript
60
- interface SortingDef {
61
- key: string;
62
- desc: boolean;
63
- }
64
- ```
65
-
66
- | Field | Type | Description |
67
- |-------|------|-------------|
68
- | `key` | `string` | 정렬 키. **컬럼 `key`가 `"vendor.name"`, `"lot.goods.code"` 같은 체인 경로일 수 있다.** 정렬 처리 시 `item[key]` 단순 접근 대신 `obj.getChainValue(item, key)` (from `@simplysm/core-common`)를 사용해야 한다 |
69
- | `desc` | `boolean` | 내림차순 여부 |
70
-
71
- ## `ExpandItemDef`
72
-
73
- 트리 확장 항목 정의.
74
-
75
- ```typescript
76
- interface ExpandItemDef<T> {
77
- item: T;
78
- parentDef: ExpandItemDef<T> | undefined;
79
- hasChildren: boolean;
80
- depth: number;
81
- }
82
- ```
83
-
84
- | Field | Type | Description |
85
- |-------|------|-------------|
86
- | `item` | `T` | 항목 |
87
- | `parentDef` | `ExpandItemDef<T> \| undefined` | 부모 정의 |
88
- | `hasChildren` | `boolean` | 자식 존재 여부 |
89
- | `depth` | `number` | 깊이 |
90
-
91
- ## `SdTextfieldTypes`
92
-
93
- 텍스트필드 타입별 값 타입 매핑.
94
-
95
- ```typescript
96
- type SdTextfieldTypes = {
97
- "number": number;
98
- "text": string;
99
- "password": string;
100
- "color": string;
101
- "email": string;
102
- "format": string;
103
- "date": DateOnly;
104
- "month": DateOnly;
105
- "year": DateOnly;
106
- "datetime": DateTime;
107
- "datetime-sec": DateTime;
108
- "time": Time;
109
- "time-sec": Time;
110
- }
111
- ```
112
-
113
- ## `sdTextfieldTypes`
114
-
115
- 텍스트필드 타입 문자열 배열.
116
-
117
- ```typescript
118
- const sdTextfieldTypes: (keyof SdTextfieldTypes)[] = [
119
- "number", "text", "password", "color", "email", "format",
120
- "date", "month", "year", "datetime", "datetime-sec", "time", "time-sec",
121
- ]
122
- ```
123
-
124
- ## `SelectModeValue`
125
-
126
- select mode별 value 타입 매핑.
127
-
128
- ```typescript
129
- type SelectModeValue<T> = {
130
- multi: T[];
131
- single: T;
132
- }
133
- ```
134
-
135
- ## `SdSidebarUserMenu`
136
-
137
- 사이드바 사용자 메뉴 항목.
138
-
139
- ```typescript
140
- interface SdSidebarUserMenu {
141
- title: string;
142
- menus: {
143
- title: string;
144
- onClick: () => void;
145
- }[];
146
- }
147
- ```
148
-
149
- | Field | Type | Description |
150
- |-------|------|-------------|
151
- | `title` | `string` | 사용자 메뉴 제목 |
152
- | `menus` | `{ title: string; onClick: () => void }[]` | 하위 메뉴 항목 배열 |
153
-
154
- ## `SdTopbarUserMenu`
155
-
156
- 탑바 사용자 메뉴 항목.
157
-
158
- ```typescript
159
- interface SdTopbarUserMenu {
160
- title: string;
161
- onClick: () => void;
162
- }
163
- ```
164
-
165
- | Field | Type | Description |
166
- |-------|------|-------------|
167
- | `title` | `string` | 메뉴 제목 |
168
- | `onClick` | `() => void` | 클릭 핸들러 |
169
-
170
- ## `SdStatePresetDef`
171
-
172
- 상태 프리셋 데이터.
173
-
174
- ```typescript
175
- interface SdStatePresetDef {
176
- name: string;
177
- state: any;
178
- }
179
- ```
180
-
181
- | Field | Type | Description |
182
- |-------|------|-------------|
183
- | `name` | `string` | 프리셋 이름 |
184
- | `state` | `any` | 저장된 상태 데이터 |
185
-
186
- ## Kanban Types
187
-
188
- ### `SdKanbanBoardDropInfo`
189
-
190
- 칸반 보드 드롭 정보.
191
-
192
- ```typescript
193
- interface SdKanbanBoardDropInfo<L, T> {
194
- sourceKanbanValue?: T;
195
- targetLaneValue?: L;
196
- targetKanbanValue?: T;
197
- }
198
- ```
199
-
200
- | Field | Type | Description |
201
- |-------|------|-------------|
202
- | `sourceKanbanValue` | `T \| undefined` | 드래그한 칸반 아이템의 값 |
203
- | `targetLaneValue` | `L \| undefined` | 드롭 대상 레인의 값 |
204
- | `targetKanbanValue` | `T \| undefined` | 드롭 대상 칸반 아이템의 값 |
205
-
206
- ### `SdKanbanDragRef`
207
-
208
- ```typescript
209
- interface SdKanbanDragRef<_L, T> {
210
- value(): T | undefined;
211
- heightOnDrag(): number;
212
- }
213
- ```
214
-
215
- | Field | Type | Description |
216
- |-------|------|-------------|
217
- | `value()` | `T \| undefined` | 드래그 중인 칸반 아이템의 값 |
218
- | `heightOnDrag()` | `number` | 드래그 시작 시점의 요소 높이 |
219
-
220
- ### `SdKanbanDropTarget`
221
-
222
- ```typescript
223
- interface SdKanbanDropTarget<L, T> {
224
- targetLaneValue(): L | undefined;
225
- targetKanbanValue?(): T | undefined;
226
- }
227
- ```
228
-
229
- | Field | Type | Description |
230
- |-------|------|-------------|
231
- | `targetLaneValue()` | `L \| undefined` | 드롭 대상 레인의 값 |
232
- | `targetKanbanValue?()` | `T \| undefined` | 드롭 대상 칸반 아이템의 값 (optional) |
@@ -1,37 +0,0 @@
1
- # `SdList`
2
-
3
- 리스트 컴포넌트.
4
-
5
- ```typescript
6
- @Component({ selector: "sd-list" })
7
- class SdList {
8
- inset = input(false, { transform: booleanAttribute });
9
- }
10
- ```
11
-
12
- ## Members
13
-
14
- | Member | Kind | Type | Default | Description |
15
- |--------|------|------|---------|-------------|
16
- | `inset` | input | `boolean` | `false` | 삽입 스타일 (테두리 없음) |
17
-
18
- ## Related Types
19
-
20
- ### `SdListItem`
21
-
22
- 리스트 항목 컴포넌트. 접기/펼치기 자식 리스트를 지원한다.
23
-
24
- ```typescript
25
- @Component({ selector: "sd-list-item" })
26
- class SdListItem {
27
- open = model(false);
28
- selected = input(false, { transform: booleanAttribute });
29
- readonly = input(false, { transform: booleanAttribute });
30
- }
31
- ```
32
-
33
- | Input | Type | Default | Description |
34
- |-------|------|---------|-------------|
35
- | `open` | `boolean` | `false` | 자식 리스트 펼침 (two-way) |
36
- | `selected` | `boolean` | `false` | 선택 상태 |
37
- | `readonly` | `boolean` | `false` | 읽기 전용 |