dasar-ui 1.1.0 → 1.3.0

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 (116) hide show
  1. package/README.md +19 -14
  2. package/fesm2022/dasar-ui.mjs +9664 -0
  3. package/fesm2022/dasar-ui.mjs.map +1 -0
  4. package/package.json +39 -42
  5. package/types/dasar-ui.d.ts +2114 -0
  6. package/.editorconfig +0 -17
  7. package/.nvmrc +0 -1
  8. package/.prettierrc +0 -12
  9. package/.vscode/extensions.json +0 -4
  10. package/.vscode/launch.json +0 -20
  11. package/.vscode/settings.json +0 -4
  12. package/.vscode/tasks.json +0 -42
  13. package/CHANGELOG.md +0 -18
  14. package/angular.json +0 -37
  15. package/projects/dasar-ui/README.md +0 -64
  16. package/projects/dasar-ui/ng-package.json +0 -10
  17. package/projects/dasar-ui/package.json +0 -27
  18. package/projects/dasar-ui/src/lib/components/dasar-button/dasar-button.html +0 -9
  19. package/projects/dasar-ui/src/lib/components/dasar-button/dasar-button.scss +0 -352
  20. package/projects/dasar-ui/src/lib/components/dasar-button/dasar-button.spec.ts +0 -21
  21. package/projects/dasar-ui/src/lib/components/dasar-button/dasar-button.ts +0 -154
  22. package/projects/dasar-ui/src/lib/components/dasar-button-group/dasar-button-group.html +0 -1
  23. package/projects/dasar-ui/src/lib/components/dasar-button-group/dasar-button-group.scss +0 -69
  24. package/projects/dasar-ui/src/lib/components/dasar-button-group/dasar-button-group.spec.ts +0 -21
  25. package/projects/dasar-ui/src/lib/components/dasar-button-group/dasar-button-group.ts +0 -30
  26. package/projects/dasar-ui/src/lib/components/dasar-calendar/dasar-calendar.html +0 -158
  27. package/projects/dasar-ui/src/lib/components/dasar-calendar/dasar-calendar.scss +0 -371
  28. package/projects/dasar-ui/src/lib/components/dasar-calendar/dasar-calendar.spec.ts +0 -21
  29. package/projects/dasar-ui/src/lib/components/dasar-calendar/dasar-calendar.ts +0 -458
  30. package/projects/dasar-ui/src/lib/components/dasar-card/dasar-card.html +0 -80
  31. package/projects/dasar-ui/src/lib/components/dasar-card/dasar-card.scss +0 -184
  32. package/projects/dasar-ui/src/lib/components/dasar-card/dasar-card.spec.ts +0 -21
  33. package/projects/dasar-ui/src/lib/components/dasar-card/dasar-card.ts +0 -294
  34. package/projects/dasar-ui/src/lib/components/dasar-chip/dasar-chip.html +0 -42
  35. package/projects/dasar-ui/src/lib/components/dasar-chip/dasar-chip.scss +0 -38
  36. package/projects/dasar-ui/src/lib/components/dasar-chip/dasar-chip.ts +0 -207
  37. package/projects/dasar-ui/src/lib/components/dasar-datepicker/dasar-datepicker.html +0 -102
  38. package/projects/dasar-ui/src/lib/components/dasar-datepicker/dasar-datepicker.scss +0 -301
  39. package/projects/dasar-ui/src/lib/components/dasar-datepicker/dasar-datepicker.spec.ts +0 -21
  40. package/projects/dasar-ui/src/lib/components/dasar-datepicker/dasar-datepicker.ts +0 -527
  41. package/projects/dasar-ui/src/lib/components/dasar-icon/dasar-icon.html +0 -1
  42. package/projects/dasar-ui/src/lib/components/dasar-icon/dasar-icon.registry.ts +0 -5089
  43. package/projects/dasar-ui/src/lib/components/dasar-icon/dasar-icon.scss +0 -24
  44. package/projects/dasar-ui/src/lib/components/dasar-icon/dasar-icon.spec.ts +0 -21
  45. package/projects/dasar-ui/src/lib/components/dasar-icon/dasar-icon.ts +0 -97
  46. package/projects/dasar-ui/src/lib/components/dasar-input/dasar-input.html +0 -54
  47. package/projects/dasar-ui/src/lib/components/dasar-input/dasar-input.scss +0 -281
  48. package/projects/dasar-ui/src/lib/components/dasar-input/dasar-input.spec.ts +0 -21
  49. package/projects/dasar-ui/src/lib/components/dasar-input/dasar-input.ts +0 -323
  50. package/projects/dasar-ui/src/lib/components/dasar-menu/dasar-menu.html +0 -63
  51. package/projects/dasar-ui/src/lib/components/dasar-menu/dasar-menu.scss +0 -195
  52. package/projects/dasar-ui/src/lib/components/dasar-menu/dasar-menu.spec.ts +0 -21
  53. package/projects/dasar-ui/src/lib/components/dasar-menu/dasar-menu.ts +0 -240
  54. package/projects/dasar-ui/src/lib/components/dasar-number-input/dasar-number-input.html +0 -90
  55. package/projects/dasar-ui/src/lib/components/dasar-number-input/dasar-number-input.scss +0 -358
  56. package/projects/dasar-ui/src/lib/components/dasar-number-input/dasar-number-input.spec.ts +0 -21
  57. package/projects/dasar-ui/src/lib/components/dasar-number-input/dasar-number-input.ts +0 -337
  58. package/projects/dasar-ui/src/lib/components/dasar-pagination/dasar-pagination.html +0 -98
  59. package/projects/dasar-ui/src/lib/components/dasar-pagination/dasar-pagination.scss +0 -51
  60. package/projects/dasar-ui/src/lib/components/dasar-pagination/dasar-pagination.spec.ts +0 -21
  61. package/projects/dasar-ui/src/lib/components/dasar-pagination/dasar-pagination.ts +0 -99
  62. package/projects/dasar-ui/src/lib/components/dasar-pin/dasar-pin.css +0 -0
  63. package/projects/dasar-ui/src/lib/components/dasar-pin/dasar-pin.html +0 -1
  64. package/projects/dasar-ui/src/lib/components/dasar-pin/dasar-pin.spec.ts +0 -21
  65. package/projects/dasar-ui/src/lib/components/dasar-pin/dasar-pin.ts +0 -9
  66. package/projects/dasar-ui/src/lib/components/dasar-pivot-table/dasar-pivot-table.html +0 -163
  67. package/projects/dasar-ui/src/lib/components/dasar-pivot-table/dasar-pivot-table.scss +0 -283
  68. package/projects/dasar-ui/src/lib/components/dasar-pivot-table/dasar-pivot-table.ts +0 -230
  69. package/projects/dasar-ui/src/lib/components/dasar-radio/dasar-radio.css +0 -0
  70. package/projects/dasar-ui/src/lib/components/dasar-radio/dasar-radio.html +0 -1
  71. package/projects/dasar-ui/src/lib/components/dasar-radio/dasar-radio.spec.ts +0 -21
  72. package/projects/dasar-ui/src/lib/components/dasar-radio/dasar-radio.ts +0 -9
  73. package/projects/dasar-ui/src/lib/components/dasar-select/dasar-select.html +0 -185
  74. package/projects/dasar-ui/src/lib/components/dasar-select/dasar-select.scss +0 -347
  75. package/projects/dasar-ui/src/lib/components/dasar-select/dasar-select.spec.ts +0 -21
  76. package/projects/dasar-ui/src/lib/components/dasar-select/dasar-select.ts +0 -497
  77. package/projects/dasar-ui/src/lib/components/dasar-slider/dasar-slider.css +0 -0
  78. package/projects/dasar-ui/src/lib/components/dasar-slider/dasar-slider.html +0 -1
  79. package/projects/dasar-ui/src/lib/components/dasar-slider/dasar-slider.spec.ts +0 -21
  80. package/projects/dasar-ui/src/lib/components/dasar-slider/dasar-slider.ts +0 -9
  81. package/projects/dasar-ui/src/lib/components/dasar-table/dasar-table.html +0 -162
  82. package/projects/dasar-ui/src/lib/components/dasar-table/dasar-table.scss +0 -283
  83. package/projects/dasar-ui/src/lib/components/dasar-table/dasar-table.spec.ts +0 -21
  84. package/projects/dasar-ui/src/lib/components/dasar-table/dasar-table.ts +0 -380
  85. package/projects/dasar-ui/src/lib/components/dasar-tabs/dasar-tabs.html +0 -41
  86. package/projects/dasar-ui/src/lib/components/dasar-tabs/dasar-tabs.scss +0 -126
  87. package/projects/dasar-ui/src/lib/components/dasar-tabs/dasar-tabs.spec.ts +0 -21
  88. package/projects/dasar-ui/src/lib/components/dasar-tabs/dasar-tabs.ts +0 -72
  89. package/projects/dasar-ui/src/lib/components/dasar-textarea/dasar-textarea.html +0 -43
  90. package/projects/dasar-ui/src/lib/components/dasar-textarea/dasar-textarea.scss +0 -189
  91. package/projects/dasar-ui/src/lib/components/dasar-textarea/dasar-textarea.spec.ts +0 -21
  92. package/projects/dasar-ui/src/lib/components/dasar-textarea/dasar-textarea.ts +0 -139
  93. package/projects/dasar-ui/src/lib/components/dasar-theme-provider/dasar-theme-provider.ts +0 -286
  94. package/projects/dasar-ui/src/lib/components/dasar-toast/dasar-toast.css +0 -0
  95. package/projects/dasar-ui/src/lib/components/dasar-toast/dasar-toast.html +0 -1
  96. package/projects/dasar-ui/src/lib/components/dasar-toast/dasar-toast.spec.ts +0 -21
  97. package/projects/dasar-ui/src/lib/components/dasar-toast/dasar-toast.ts +0 -9
  98. package/projects/dasar-ui/src/lib/components/dasar-toggle/dasar-toggle.css +0 -0
  99. package/projects/dasar-ui/src/lib/components/dasar-toggle/dasar-toggle.html +0 -1
  100. package/projects/dasar-ui/src/lib/components/dasar-toggle/dasar-toggle.spec.ts +0 -21
  101. package/projects/dasar-ui/src/lib/components/dasar-toggle/dasar-toggle.ts +0 -9
  102. package/projects/dasar-ui/src/lib/components/dasar-tooltip/dasar-tooltip.css +0 -0
  103. package/projects/dasar-ui/src/lib/components/dasar-tooltip/dasar-tooltip.html +0 -1
  104. package/projects/dasar-ui/src/lib/components/dasar-tooltip/dasar-tooltip.spec.ts +0 -21
  105. package/projects/dasar-ui/src/lib/components/dasar-tooltip/dasar-tooltip.ts +0 -9
  106. package/projects/dasar-ui/src/lib/models/theme.model.ts +0 -643
  107. package/projects/dasar-ui/src/lib/models/type.model.ts +0 -11
  108. package/projects/dasar-ui/src/lib/services/theme.service.ts +0 -643
  109. package/projects/dasar-ui/src/lib/styles/theme.ts +0 -70
  110. package/projects/dasar-ui/src/lib/utils/common.ts +0 -175
  111. package/projects/dasar-ui/src/public-api.ts +0 -23
  112. package/projects/dasar-ui/tsconfig.lib.json +0 -21
  113. package/projects/dasar-ui/tsconfig.lib.prod.json +0 -11
  114. package/projects/dasar-ui/tsconfig.spec.json +0 -11
  115. package/tsconfig.json +0 -37
  116. /package/{projects/dasar-ui/src/lib/styles → styles}/theme.scss +0 -0
@@ -1,643 +0,0 @@
1
- import {
2
- DasarThemeButton,
3
- DasarThemeCalendar,
4
- DasarThemeCard,
5
- DasarThemeChip,
6
- DasarThemeColors,
7
- DasarThemeConfig,
8
- DasarThemeDatepicker,
9
- DasarThemeInput,
10
- DasarThemeSelect,
11
- DasarThemeCommon,
12
- DasarThemeMenu,
13
- } from '@models/theme.model';
14
- import { DASAR_THEME_PROVIDER } from '../components/dasar-theme-provider/dasar-theme-provider';
15
- import {
16
- DOCUMENT,
17
- inject,
18
- Injectable,
19
- PLATFORM_ID,
20
- Renderer2,
21
- RendererFactory2,
22
- } from '@angular/core';
23
- import { isPlatformBrowser } from '@angular/common';
24
- import { BehaviorSubject, Observable } from 'rxjs';
25
-
26
- export const commonMap: Record<keyof DasarThemeCommon, string> = {
27
- primaryColor: '--theme-primary-color',
28
- primaryHoverColor: '--theme-primary-hover-color',
29
- primaryActiveColor: '--theme-primary-active-color',
30
- primarySurfaceColor: '--theme-primary-surface-color',
31
- textPrimaryColor: '--theme-text-primary-color',
32
- textSecondaryColor: '--theme-text-secondary-color',
33
- textDisabledColor: '--theme-text-disabled-color',
34
- textInverseColor: '--theme-text-inverse-color',
35
- bgDefaultColor: '--theme-bg-default-color',
36
- bgSurfaceColor: '--theme-bg-surface-color',
37
- bgWindowColor: '--theme-bg-window-color',
38
- bgHoverColor: '--theme-bg-hover-color',
39
- borderSubtleColor: '--theme-border-subtle-color',
40
- borderStrongColor: '--theme-border-strong-color',
41
- fontSans: '--font-sans',
42
- fontHero: '--font-hero',
43
- fontWeightRegular: '--font-weight-regular',
44
- fontWeightMedium: '--font-weight-medium',
45
- fontWeightSemibold: '--font-weight-semibold',
46
- fontWeightBold: '--font-weight-bold',
47
- fontSizeXss: '--font-size-xss',
48
- fontSizeXs: '--font-size-xs',
49
- fontSizeSm: '--font-size-sm',
50
- fontSizeBase: '--font-size-base',
51
- fontSizeLg: '--font-size-lg',
52
- fontSizeXl: '--font-size-xl',
53
- lineHeightNormal: '--line-height-normal',
54
- lineHeightTight: '--line-height-tight',
55
- };
56
- export const buttonMap: Record<keyof DasarThemeButton, string> = {
57
- fontWeight: '--btn-font-weight',
58
- gap: '--btn-gap',
59
- heightXs: '--btn-height-xs',
60
- paddingHorizontalXs: '--btn-padding-horizontal-xs',
61
- iconSizeXs: '--btn-icon-size-xs',
62
- heightSm: '--btn-height-sm',
63
- paddingHorizontalSm: '--btn-padding-horizontal-sm',
64
- iconSizeSm: '--btn-icon-size-sm',
65
- heightMd: '--btn-height-md',
66
- paddingHorizontalMd: '--btn-padding-horizontal-md',
67
- iconSizeMd: '--btn-icon-size-md',
68
- heightLg: '--btn-height-lg',
69
- paddingHorizontalLg: '--btn-padding-horizontal-lg',
70
- iconSizeLg: '--btn-icon-size-lg',
71
- heightXl: '--btn-height-xl',
72
- paddingHorizontalXl: '--btn-padding-horizontal-xl',
73
- iconSizeXl: '--btn-icon-size-xl',
74
- radiusNone: '--btn-radius-none',
75
- radiusXs: '--btn-radius-xs',
76
- radiusSm: '--btn-radius-sm',
77
- radiusMd: '--btn-radius-md',
78
- radiusLg: '--btn-radius-lg',
79
- radiusXl: '--btn-radius-xl',
80
- radiusFull: '--btn-radius-full',
81
- disabledBg: '--btn-disabled-bg',
82
- disabledBorder: '--btn-disabled-border',
83
- disabledColor: '--btn-disabled-color',
84
- primaryBg: '--btn-primary-bg',
85
- primaryBorder: '--btn-primary-border',
86
- primaryColor: '--btn-primary-color',
87
- primaryHoverBg: '--btn-primary-hover-bg',
88
- primaryHoverBorder: '--btn-primary-hover-border',
89
- primaryFocusRing: '--btn-primary-focus-ring',
90
- primarySubtleBg: '--btn-primary-subtle-bg',
91
- primarySubtleColor: '--btn-primary-subtle-color',
92
- primarySubtleHoverBg: '--btn-primary-subtle-hover-bg',
93
- primarySubtleHoverColor: '--btn-primary-subtle-hover-color',
94
- primaryOutlineBorder: '--btn-primary-outline-border',
95
- primaryOutlineColor: '--btn-primary-outline-color',
96
- primaryOutlineHoverBg: '--btn-primary-outline-hover-bg',
97
- successBg: '--btn-success-bg',
98
- successBorder: '--btn-success-border',
99
- successColor: '--btn-success-color',
100
- successFocusRing: '--btn-success-focus-ring',
101
- successSubtleBg: '--btn-success-subtle-bg',
102
- successSubtleColor: '--btn-success-subtle-color',
103
- successSubtleHoverBg: '--btn-success-subtle-hover-bg',
104
- successSubtleHoverColor: '--btn-success-subtle-hover-color',
105
- successOutlineBorder: '--btn-success-outline-border',
106
- successOutlineColor: '--btn-success-outline-color',
107
- successOutlineHoverBg: '--btn-success-outline-hover-bg',
108
- warningBg: '--btn-warning-bg',
109
- warningBorder: '--btn-warning-border',
110
- warningColor: '--btn-warning-color',
111
- warningFocusRing: '--btn-warning-focus-ring',
112
- warningSubtleBg: '--btn-warning-subtle-bg',
113
- warningSubtleColor: '--btn-warning-subtle-color',
114
- warningSubtleHoverBg: '--btn-warning-subtle-hover-bg',
115
- warningSubtleHoverColor: '--btn-warning-subtle-hover-color',
116
- warningOutlineBorder: '--btn-warning-outline-border',
117
- warningOutlineColor: '--btn-warning-outline-color',
118
- warningOutlineHoverBg: '--btn-warning-outline-hover-bg',
119
- dangerBg: '--btn-danger-bg',
120
- dangerBorder: '--btn-danger-border',
121
- dangerColor: '--btn-danger-color',
122
- dangerFocusRing: '--btn-danger-focus-ring',
123
- dangerSubtleBg: '--btn-danger-subtle-bg',
124
- dangerSubtleColor: '--btn-danger-subtle-color',
125
- dangerSubtleHoverBg: '--btn-danger-subtle-hover-bg',
126
- dangerSubtleHoverColor: '--btn-danger-subtle-hover-color',
127
- dangerOutlineBorder: '--btn-danger-outline-border',
128
- dangerOutlineColor: '--btn-danger-outline-color',
129
- dangerOutlineHoverBg: '--btn-danger-outline-hover-bg',
130
- secondaryBg: '--btn-secondary-bg',
131
- secondaryBorder: '--btn-secondary-border',
132
- secondaryColor: '--btn-secondary-color',
133
- secondaryHoverBg: '--btn-secondary-hover-bg',
134
- secondaryFocusRing: '--btn-secondary-focus-ring',
135
- secondarySubtleBg: '--btn-secondary-subtle-bg',
136
- secondarySubtleColor: '--btn-secondary-subtle-color',
137
- secondarySubtleHoverBg: '--btn-secondary-subtle-hover-bg',
138
- secondarySubtleHoverColor: '--btn-secondary-subtle-hover-color',
139
- secondaryOutlineBorder: '--btn-secondary-outline-border',
140
- secondaryOutlineColor: '--btn-secondary-outline-color',
141
- secondaryOutlineHoverBg: '--btn-secondary-outline-hover-bg',
142
- ghostColor: '--btn-ghost-color',
143
- ghostHoverBg: '--btn-ghost-hover-bg',
144
- ghostHoverColor: '--btn-ghost-hover-color',
145
- ghostFocusRing: '--btn-ghost-focus-ring',
146
- };
147
- export const inputMap: Record<keyof DasarThemeInput, string> = {
148
- wrapperGap: '--input-wrapper-gap',
149
- gap: '--input-gap',
150
- color: '--input-color',
151
- labelFontsize: '--input-label-font-size',
152
- labelFontWeight: '--input-label-font-weight',
153
- labelColor: '--input-label-color',
154
- labelRightFontsize: '--input-label-right-font-size',
155
- labelRightColor: '--input-label-right-color',
156
- heightXs: '--input-height-xs',
157
- paddingHorizontalXs: '--input-padding-horizontal-xs',
158
- heightSm: '--input-height-sm',
159
- paddingHorizontalSm: '--input-padding-horizontal-sm',
160
- heightMd: '--input-height-md',
161
- paddingHorizontalMd: '--input-padding-horizontal-md',
162
- heightLg: '--input-height-lg',
163
- paddingHorizontalLg: '--input-padding-horizontal-lg',
164
- heightXl: '--input-height-xl',
165
- paddingHorizontalXl: '--input-padding-horizontal-xl',
166
- radiusNone: '--input-radius-none',
167
- radiusXs: '--input-radius-xs',
168
- radiusSm: '--input-radius-sm',
169
- radiusMd: '--input-radius-md',
170
- radiusLg: '--input-radius-lg',
171
- radiusXl: '--input-radius-xl',
172
- radiusFull: '--input-radius-full',
173
- outlineBg: '--input-outline-bg',
174
- outlineBorder: '--input-outline-border',
175
- outlineHoverBorder: '--input-outline-hover-border',
176
- outlineFocusBorder: '--input-outline-focus-border',
177
- outlineFocusRing: '--input-outline-focus-ring',
178
- filledBg: '--input-filled-bg',
179
- filledBorder: '--input-filled-border',
180
- filledHoverBg: '--input-filled-hover-bg',
181
- filledFocusBg: '--input-filled-focus-bg',
182
- filledFocusBorder: '--input-filled-focus-border',
183
- filledFocusRing: '--input-filled-focus-ring',
184
- errorBorder: '--input-error-border',
185
- errorFocusRing: '--input-error-focus-ring',
186
- disabledBg: '--input-disabled-bg',
187
- disabledBorder: '--input-disabled-border',
188
- disabledOpacity: '--input-disabled-opacity',
189
- placeholderColor: '--input-placeholder-color',
190
- autofillBg: '--input-autofill-bg',
191
- autofillColor: '--input-autofill-color',
192
- hintFontSize: '--input-hint-font-size',
193
- hintColor: '--input-hint-color',
194
- hintErrorColor: '--input-hint-error-color',
195
- };
196
- export const calendarMap: Record<keyof DasarThemeCalendar, string> = {
197
- calendarBg: '--calendar-bg',
198
- outlineBorder: '--calendar-outline-border',
199
- outlineBg: '--calendar-outline-bg',
200
- padding: '--calendar-padding',
201
- paddingMd: '--calendar-padding-md',
202
- radiusNone: '--calendar-radius-none',
203
- radiusXs: '--calendar-radius-xs',
204
- radiusSm: '--calendar-radius-sm',
205
- radiusMd: '--calendar-radius-md',
206
- radiusLg: '--calendar-radius-lg',
207
- radiusXl: '--calendar-radius-xl',
208
- radiusFull: '--calendar-radius-full',
209
- headerMarginBottom: '--calendar-header-margin-bottom',
210
- headerGap: '--calendar-header-gap',
211
- titleGap: '--calendar-title-gap',
212
- chevronColor: '--calendar-chevron-color',
213
- titleFontWeight: '--calendar-title-font-weight',
214
- titleColor: '--calendar-title-color',
215
- titleFontSize: '--calendar-title-font-size',
216
- actionsGap: '--calendar-actions-gap',
217
- gridBorder: '--calendar-grid-border',
218
- gridRadiusNone: '--calendar-grid-radius-none',
219
- gridRadiusXs: '--calendar-grid-radius-xs',
220
- gridRadiusSm: '--calendar-grid-radius-sm',
221
- gridRadiusMd: '--calendar-grid-radius-md',
222
- gridRadiusLg: '--calendar-grid-radius-lg',
223
- gridRadiusXl: '--calendar-grid-radius-xl',
224
- gridRadiusFull: '--calendar-grid-radius-full',
225
- weekdayFontWeight: '--calendar-weekday-font-weight',
226
- weekdayColor: '--calendar-weekday-color',
227
- weekdayPaddingBottom: '--calendar-weekday-padding-bottom',
228
- weekdayFontSize: '--calendar-weekday-font-size',
229
- cellBg: '--calendar-cell-bg',
230
- otherMonthBg: '--calendar-other-month-bg',
231
- dashboardCellPadding: '--calendar-dashboard-cell-padding',
232
- dashboardCellMinHeight: '--calendar-dashboard-cell-min-height',
233
- dashboardCellPaddingSm: '--calendar-dashboard-cell-padding-sm',
234
- dashboardCellMinHeightSm: '--calendar-dashboard-cell-min-height-sm',
235
- dashboardCellPaddingMd: '--calendar-dashboard-cell-padding-md',
236
- dashboardCellMinHeightMd: '--calendar-dashboard-cell-min-height-md',
237
- dashboardCellHoverBg: '--calendar-dashboard-cell-hover-bg',
238
- dashboardBoxSize: '--calendar-dashboard-box-size',
239
- todayColor: '--calendar-today-color',
240
- todayBg: '--calendar-today-bg',
241
- selectedIndicator: '--calendar-selected-indicator',
242
- dashboardSelectedBg: '--calendar-dashboard-selected-bg',
243
- dropdownCellHeight: '--calendar-dropdown-cell-height',
244
- dropdownCellHoverBg: '--calendar-dropdown-cell-hover-bg',
245
- dropdownNumberFontWeight: '--calendar-dropdown-number-font-weight',
246
- dropdownNumberColor: '--calendar-dropdown-number-color',
247
- dropdownNumberFontSize: '--calendar-dropdown-number-font-size',
248
- dropdownBoxSize: '--calendar-dropdown-box-size',
249
- dropdownOtherMonthColor: '--calendar-dropdown-other-month-color',
250
- dropdownSelectedBg: '--calendar-dropdown-selected-bg',
251
- dropdownSelectedColor: '--calendar-dropdown-selected-color',
252
- dropdownSelectedFontWeight: '--calendar-dropdown-selected-font-weight',
253
- dropdownTodayBorder: '--calendar-dropdown-today-border',
254
- dropdownTodayColor: '--calendar-dropdown-today-color',
255
- pickerBorder: '--calendar-picker-border',
256
- pickerBg: '--calendar-picker-bg',
257
- pickerRadius: '--calendar-picker-radius',
258
- pickerMaxHeight: '--calendar-picker-max-height',
259
- pickerCellBorder: '--calendar-picker-cell-border',
260
- pickerCellFontWeight: '--calendar-picker-cell-font-weight',
261
- pickerCellColor: '--calendar-picker-cell-color',
262
- pickerCellBg: '--calendar-picker-cell-bg',
263
- pickerCellRadius: '--calendar-picker-cell-radius',
264
- pickerCellHeight: '--calendar-picker-cell-height',
265
- pickerCellHoverBg: '--calendar-picker-cell-hover-bg',
266
- pickerCellHoverBorder: '--calendar-picker-cell-hover-border',
267
- pickerSelectedBg: '--calendar-picker-selected-bg',
268
- pickerSelectedColor: '--calendar-picker-selected-color',
269
- pickerSelectedBorder: '--calendar-picker-selected-border',
270
- pickerSelectedFontWeight: '--calendar-picker-selected-font-weight',
271
- };
272
- export const datepickerMap: Record<keyof DasarThemeDatepicker, string> = {
273
- disabledOpacity: '--datepicker-disabled-opacity',
274
- disabledBg: '--datepicker-disabled-bg',
275
- wrapperGap: '--datepicker-wrapper-gap',
276
- errorBorder: '--datepicker-error-border',
277
- errorFocusRing: '--datepicker-error-focus-ring',
278
- labelFontsize: '--datepicker-label-font-size',
279
- labelFontWeight: '--datepicker-label-font-weight',
280
- labelColor: '--datepicker-label-color',
281
- labelMarginBottom: '--datepicker-label-margin-bottom',
282
- labelRightFontsize: '--datepicker-label-right-font-size',
283
- labelRightFontWeight: '--datepicker-label-right-font-weight',
284
- labelRightColor: '--datepicker-label-right-color',
285
- hintFontSize: '--datepicker-hint-font-size',
286
- hintColor: '--datepicker-hint-color',
287
- hintErrorColor: '--datepicker-hint-error-color',
288
- triggerColor: '--datepicker-trigger-color',
289
- gap: '--datepicker-gap',
290
- radiusSm: '--datepicker-radius-sm',
291
- triggerValueColor: '--datepicker-trigger-value-color',
292
- iconColor: '--datepicker-icon-color',
293
- clearIconColor: '--datepicker-clear-icon-color',
294
- heightXs: '--datepicker-height-xs',
295
- paddingHorizontalXs: '--datepicker-padding-horizontal-xs',
296
- heightSm: '--datepicker-height-sm',
297
- paddingHorizontalSm: '--datepicker-padding-horizontal-sm',
298
- heightMd: '--datepicker-height-md',
299
- paddingHorizontalMd: '--datepicker-padding-horizontal-md',
300
- heightLg: '--datepicker-height-lg',
301
- paddingHorizontalLg: '--datepicker-padding-horizontal-lg',
302
- heightXl: '--datepicker-height-xl',
303
- paddingHorizontalXl: '--datepicker-padding-horizontal-xl',
304
- radiusNone: '--datepicker-radius-none',
305
- radiusXs: '--datepicker-radius-xs',
306
- radiusMd: '--datepicker-radius-md',
307
- radiusLg: '--datepicker-radius-lg',
308
- radiusXl: '--datepicker-radius-xl',
309
- radiusFull: '--datepicker-radius-full',
310
- outlineBg: '--datepicker-outline-bg',
311
- outlineBorder: '--datepicker-outline-border',
312
- outlineHoverBorder: '--datepicker-outline-hover-border',
313
- outlineFocusBorder: '--datepicker-outline-focus-border',
314
- outlineFocusRing: '--datepicker-outline-focus-ring',
315
- filledBg: '--datepicker-filled-bg',
316
- filledBorder: '--datepicker-filled-border',
317
- filledHoverBg: '--datepicker-filled-hover-bg',
318
- filledFocusBg: '--datepicker-filled-focus-bg',
319
- filledFocusBorder: '--datepicker-filled-focus-border',
320
- filledFocusRing: '--datepicker-filled-focus-ring',
321
- subtleBg: '--datepicker-subtle-bg',
322
- subtleBorder: '--datepicker-subtle-border',
323
- subtleHoverBg: '--datepicker-subtle-hover-bg',
324
- subtleFocusBg: '--datepicker-subtle-focus-bg',
325
- dropdownShadow: '--datepicker-dropdown-shadow',
326
- dropdownBg: '--datepicker-dropdown-bg',
327
- dropdownBorder: '--datepicker-dropdown-border',
328
- dropdownRadius: '--datepicker-dropdown-radius',
329
- dropdownZIndex: '--datepicker-dropdown-z-index',
330
- dropdownWidth: '--datepicker-dropdown-width',
331
- };
332
- export const chipMap: Record<keyof DasarThemeChip, string> = {
333
- closeMarginRight: '--chip-close-margin-right',
334
- closeMarginLeft: '--chip-close-margin-left',
335
- closeHoverBg: '--chip-close-hover-bg',
336
- closePadding: '--chip-close-padding',
337
- innerGap: '--chip-inner-gap',
338
- };
339
- export const selectMap: Record<keyof DasarThemeSelect, string> = {
340
- wrapperGap: '--select-wrapper-gap',
341
- labelFontsize: '--select-label-font-size',
342
- labelFontWeight: '--select-label-font-weight',
343
- labelColor: '--select-label-color',
344
- labelRightFontsize: '--select-label-right-font-size',
345
- labelRightColor: '--select-label-right-color',
346
- paddingLeft: '--select-padding-left',
347
- radiusSm: '--select-radius-sm',
348
- gap: '--select-gap',
349
- color: '--select-color',
350
- outlineBg: '--select-outline-bg',
351
- outlineBorder: '--select-outline-border',
352
- outlineHoverBorder: '--select-outline-hover-border',
353
- outlineFocusBorder: '--select-outline-focus-border',
354
- outlineFocusRing: '--select-outline-focus-ring',
355
- filledBg: '--select-filled-bg',
356
- filledBorder: '--select-filled-border',
357
- filledHoverBg: '--select-filled-hover-bg',
358
- filledFocusBg: '--select-filled-focus-bg',
359
- filledFocusBorder: '--select-filled-focus-border',
360
- filledFocusRing: '--select-filled-focus-ring',
361
- errorBorder: '--select-error-border',
362
- errorFocusRing: '--select-error-focus-ring',
363
- disabledBg: '--select-disabled-bg',
364
- disabledBorder: '--select-disabled-border',
365
- disabledOpacity: '--select-disabled-opacity',
366
- heightXs: '--select-height-xs',
367
- paddingHorizontalXs: '--select-padding-horizontal-xs',
368
- heightSm: '--select-height-sm',
369
- paddingHorizontalSm: '--select-padding-horizontal-sm',
370
- heightMd: '--select-height-md',
371
- paddingHorizontalMd: '--select-padding-horizontal-md',
372
- heightLg: '--select-height-lg',
373
- paddingHorizontalLg: '--select-padding-horizontal-lg',
374
- heightXl: '--select-height-xl',
375
- paddingHorizontalXl: '--select-padding-horizontal-xl',
376
- radiusNone: '--select-radius-none',
377
- radiusXs: '--select-radius-xs',
378
- radiusMd: '--select-radius-md',
379
- radiusLg: '--select-radius-lg',
380
- radiusXl: '--select-radius-xl',
381
- radiusFull: '--select-radius-full',
382
- valueColor: '--select-value-color',
383
- placeholderColor: '--select-placeholder-color',
384
- searchColor: '--select-search-color',
385
- searchPlaceholderColor: '--select-search-placeholder-color',
386
- loaderColor: '--select-loader-color',
387
- arrowColor: '--select-arrow-color',
388
- dropdownMaxHeight: '--select-dropdown-max-height',
389
- dropdownBg: '--select-dropdown-bg',
390
- dropdownBorder: '--select-dropdown-border',
391
- dropdownRadius: '--select-dropdown-radius',
392
- dropdownShadow: '--select-dropdown-shadow',
393
- dropdownZIndex: '--select-dropdown-z-index',
394
- optionPaddingY: '--select-option-padding-y',
395
- optionPaddingX: '--select-option-padding-x',
396
- optionFontSize: '--select-option-font-size',
397
- optionColor: '--select-option-color',
398
- optionHoverBg: '--select-option-hover-bg',
399
- optionSelectedBg: '--select-option-selected-bg',
400
- optionSelectedColor: '--select-option-selected-color',
401
- optionSelectedFontWeight: '--select-option-selected-font-weight',
402
- optionDisabledColor: '--select-option-disabled-color',
403
- stateColor: '--select-state-color',
404
- hintFontSize: '--select-hint-font-size',
405
- hintColor: '--select-hint-color',
406
- hintErrorColor: '--select-hint-error-color',
407
- };
408
- export const cardMap: Record<keyof DasarThemeCard, string> = {
409
- background: '--card-background',
410
- outlineBorder: '--card-outline-border',
411
- elevatedBorder: '--card-elevated-border',
412
- elevatedShadow: '--card-elevated-shadow',
413
- radiusNone: '--card-radius-none',
414
- radiusXs: '--card-radius-xs',
415
- radiusSm: '--card-radius-sm',
416
- radiusMd: '--card-radius-md',
417
- radiusLg: '--card-radius-lg',
418
- radiusXl: '--card-radius-xl',
419
- radiusFull: '--card-radius-full',
420
- normalHeaderPaddingVertical: '--card-normal-header-padding-vertical',
421
- normalHeaderPaddingHorizontal: '--card-normal-header-padding-horizontal',
422
- normalBodyPaddingVertical: '--card-normal-body-padding-vertical',
423
- normalBodyPaddingHorizontal: '--card-normal-body-padding-horizontal',
424
- normalActionsPadding: '--card-normal-actions-padding',
425
- compactHeaderPadding: '--card-compact-header-padding',
426
- compactBodyPadding: '--card-compact-body-padding',
427
- compactActionsPadding: '--card-compact-actions-padding',
428
- fontSizeSm: '--card-font-size-sm',
429
- fontSizeMd: '--card-font-size-md',
430
- fontSizeLg: '--card-font-size-lg',
431
- headerBorder: '--card-header-border',
432
- titleColor: '--card-title-color',
433
- titleFontWeight: '--card-title-font-weight',
434
- bodyColor: '--card-body-color',
435
- captionColor: '--card-caption-color',
436
- captionFontSize: '--card-caption-font-size',
437
- actionsBackground: '--card-actions-background',
438
- actionsGap: '--card-actions-gap',
439
- };
440
- export const menuMap: Record<keyof DasarThemeMenu, string> = {
441
- triggerPaddingHorizontal: '--menu-trigger-padding-horizontal',
442
- triggerGap: '--menu-trigger-gap',
443
- outlineBorder: '--menu-outline-border',
444
- outlineBackground: '--menu-outline-background',
445
- outlineHoverBorder: '--menu-outline-hover-border',
446
- outlineFocusBorder: '--menu-outline-focus-border',
447
- outlineFocusRing: '--menu-outline-focus-ring',
448
- filledBorder: '--menu-filled-border',
449
- filledBackground: '--menu-filled-background',
450
- filledHoverBackground: '--menu-filled-hover-background',
451
- filledFocusBackground: '--menu-filled-focus-background',
452
- filledFocusBorder: '--menu-filled-focus-border',
453
- filledFocusRing: '--menu-filled-focus-ring',
454
- disabledOpacity: '--menu-disabled-opacity',
455
- heightSm: '--menu-height-sm',
456
- fontSizeSm: '--menu-font-size-sm',
457
- heightMd: '--menu-height-md',
458
- fontSizeMd: '--menu-font-size-md',
459
- heightLg: '--menu-height-lg',
460
- fontSizeLg: '--menu-font-size-lg',
461
- radiusNone: '--menu-radius-none',
462
- radiusXs: '--menu-radius-xs',
463
- radiusSm: '--menu-radius-sm',
464
- radiusMd: '--menu-radius-md',
465
- radiusLg: '--menu-radius-lg',
466
- radiusXl: '--menu-radius-xl',
467
- radiusFull: '--menu-radius-full',
468
- panelMinWidth: '--menu-panel-min-width',
469
- panelBackground: '--menu-panel-background',
470
- panelBorder: '--menu-panel-border',
471
- panelRadius: '--menu-panel-radius',
472
- panelShadow: '--menu-panel-shadow',
473
- panelPadding: '--menu-panel-padding',
474
- panelZIndex: '--menu-panel-z-index',
475
- panelOffset: '--menu-panel-offset',
476
- itemGap: '--menu-item-gap',
477
- itemPaddingVertical: '--menu-item-padding-vertical',
478
- itemPaddingHorizontal: '--menu-item-padding-horizontal',
479
- itemFontSize: '--menu-item-font-size',
480
- itemColor: '--menu-item-color',
481
- itemRadius: '--menu-item-radius',
482
- itemHoverBackground: '--menu-item-hover-background',
483
- itemHoverColor: '--menu-item-hover-color',
484
- itemDisabledColor: '--menu-item-disabled-color',
485
- dividerHeight: '--menu-divider-height',
486
- dividerBackground: '--menu-divider-background',
487
- dividerMarginVertical: '--menu-divider-margin-vertical',
488
- };
489
- export const tableMap: Record<string, string> = {
490
- radius: '--table-radius',
491
- background: '--table-background',
492
- outlineBorder: '--table-outline-border',
493
- filledBackground: '--table-filled-background',
494
- filledBorder: '--table-filled-border',
495
- filledRowBorder: '--table-filled-row-border',
496
- filledRowBackground: '--table-filled-row-background',
497
- elevatedBorder: '--table-elevated-border',
498
- elevatedShadow: '--table-elevated-shadow',
499
- radiusNone: '--table-radius-none',
500
- borderlessBackground: '--table-borderless-background',
501
- fontSizeSm: '--table-font-size-sm',
502
- fontSizeMd: '--table-font-size-md',
503
- fontSizeLg: '--table-font-size-lg',
504
- compactPaddingVertical: '--table-compact-padding-vertical',
505
- compactPaddingHorizontal: '--table-compact-padding-horizontal',
506
- normalPaddingVertical: '--table-normal-padding-vertical',
507
- normalPaddingHorizontal: '--table-normal-padding-horizontal',
508
- relaxedPaddingVertical: '--table-relaxed-padding-vertical',
509
- relaxedPaddingHorizontal: '--table-relaxed-padding-horizontal',
510
- color: '--table-color',
511
- headerBackground: '--table-header-background',
512
- headerFontWeight: '--table-header-font-weight',
513
- headerColor: '--table-header-color',
514
- headerHoverBackground: '--table-header-hover-background',
515
- headerContentGap: '--table-header-content-gap',
516
- sortIndicatorSize: '--table-sort-indicator-size',
517
- sortActiveColor: '--table-sort-active-color',
518
- rowBorder: '--table-row-border',
519
- rowHoverBackground: '--table-row-hover-background',
520
- rowHoverIndicatorWidth: '--table-row-hover-indicator-width',
521
- rowHoverIndicatorColor: '--table-row-hover-indicator-color',
522
- stripeBackground: '--table-stripe-background',
523
- expandBtnColor: '--table-expand-btn-color',
524
- expandBtnRadius: '--table-expand-btn-radius',
525
- expandBtnHoverBackground: '--table-expand-btn-hover-background',
526
- expandBtnHoverColor: '--table-expand-btn-hover-color',
527
- stateCellPadding: '--table-state-cell-padding',
528
- stateContentGap: '--table-state-content-gap',
529
- stateContentColor: '--table-state-content-color',
530
- spinnerTrack: '--table-spinner-track',
531
- spinnerColor: '--table-spinner-color',
532
- emptyContentGap: '--table-empty-content-gap',
533
- emptyTitleFontWeight: '--table-empty-title-font-weight',
534
- emptyTitleColor: '--table-empty-title-color',
535
- emptyTitleFontSize: '--table-empty-title-font-size',
536
- emptyDescColor: '--table-empty-desc-color',
537
- emptyDescFontSize: '--table-empty-desc-font-size',
538
- paginationPaddingVertical: '--table-pagination-padding-vertical',
539
- paginationPaddingHorizontal: '--table-pagination-padding-horizontal',
540
- paginationBorder: '--table-pagination-border',
541
- paginationBackground: '--table-pagination-background',
542
- };
543
-
544
- @Injectable({
545
- providedIn: 'root',
546
- })
547
- export class DasarThemeService {
548
- private themeState = new BehaviorSubject<DasarThemeConfig>({
549
- mode: 'light',
550
- });
551
- public theme$: Observable<DasarThemeConfig> = this.themeState.asObservable();
552
- private initialConfig = inject(DASAR_THEME_PROVIDER, { optional: true });
553
- private platformId = inject(PLATFORM_ID);
554
- private document = inject(DOCUMENT);
555
- private renderer: Renderer2;
556
-
557
- constructor(rendererFactory: RendererFactory2) {
558
- this.renderer = rendererFactory.createRenderer(null, null);
559
- // Apply initial component configuration if provided via provider
560
- if (this.initialConfig) {
561
- this.setGlobalTheme(this.initialConfig);
562
- }
563
- }
564
-
565
- public setGlobalTheme(config: DasarThemeConfig, targetElement?: HTMLElement) {
566
- // Guard against SSR crashes when document is undefined on the server
567
- if (!isPlatformBrowser(this.platformId)) {
568
- this.themeState.next(config);
569
- return;
570
- }
571
- const root = targetElement || this.document.documentElement;
572
- if (config.mode === 'dark') {
573
- this.renderer.setAttribute(root, 'data-theme', 'dark');
574
- } else {
575
- this.renderer.removeAttribute(root, 'data-theme');
576
- }
577
- if (config.colors) {
578
- this.injectColors(root, config.colors);
579
- }
580
- if (config.tokens?.[config.mode]?.common) {
581
- this.injectMappedTokens(root, config.tokens?.[config.mode]?.common, commonMap);
582
- }
583
- if (config.tokens?.[config.mode]?.button) {
584
- this.injectMappedTokens(root, config.tokens?.[config.mode]?.button, buttonMap);
585
- }
586
- if (config.tokens?.[config.mode]?.input) {
587
- this.injectMappedTokens(root, config.tokens?.[config.mode]?.input, inputMap);
588
- }
589
- if (config.tokens?.[config.mode]?.calendar) {
590
- this.injectMappedTokens(root, config.tokens?.[config.mode]?.calendar, calendarMap);
591
- }
592
- if (config.tokens?.[config.mode]?.datepicker) {
593
- this.injectMappedTokens(root, config.tokens?.[config.mode]?.datepicker, datepickerMap);
594
- }
595
- if (config.tokens?.[config.mode]?.chip) {
596
- this.injectMappedTokens(root, config.tokens?.[config.mode]?.chip, chipMap);
597
- }
598
- if (config.tokens?.[config.mode]?.select) {
599
- this.injectMappedTokens(root, config.tokens?.[config.mode]?.select, selectMap);
600
- }
601
- if (config.tokens?.[config.mode]?.card) {
602
- this.injectMappedTokens(root, config.tokens?.[config.mode]?.card, cardMap);
603
- }
604
- if (config.tokens?.[config.mode]?.menu) {
605
- this.injectMappedTokens(root, config.tokens?.[config.mode]?.menu, menuMap);
606
- }
607
- if (config.tokens?.[config.mode]?.table) {
608
- this.injectMappedTokens(root, config.tokens?.[config.mode]?.table, tableMap);
609
- }
610
- // Update TS State
611
- this.themeState.next(config);
612
- }
613
-
614
- public themeVariable(): DasarThemeConfig {
615
- return this.themeState.getValue();
616
- }
617
-
618
- private injectMappedTokens(
619
- element: HTMLElement,
620
- payload: any,
621
- dictionary: Record<string, string>,
622
- ) {
623
- Object.entries(payload).forEach(([key, value]) => {
624
- const cssVar = dictionary[key];
625
- if (cssVar && value !== undefined && value !== null) {
626
- this.renderer.setStyle(element, cssVar, String(value));
627
- }
628
- });
629
- }
630
-
631
- private injectColors(element: HTMLElement, colors: DasarThemeColors) {
632
- Object.entries(colors).forEach(([paletteName, shades]) => {
633
- if (shades && typeof shades === 'object') {
634
- Object.entries(shades).forEach(([shadeKey, value]) => {
635
- if (value !== undefined && value !== null) {
636
- const cssVar = `--dasar-${paletteName}-${shadeKey}`;
637
- this.renderer.setStyle(element, cssVar, String(value));
638
- }
639
- });
640
- }
641
- });
642
- }
643
- }