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,9 +0,0 @@
1
- import { Component } from '@angular/core';
2
-
3
- @Component({
4
- imports: [],
5
- selector: 'dasar-dasar-radio',
6
- styleUrl: './dasar-radio.css',
7
- templateUrl: './dasar-radio.html',
8
- })
9
- export class DasarRadio {}
@@ -1,185 +0,0 @@
1
- <div class="dasar-select-wrapper">
2
- @if (label || extraLabelSlot) {
3
- <div class="dasar-select-label-row">
4
- @if (label) {
5
- <label class="dasar-select-label">{{ label }}</label>
6
- } @else {
7
- <ng-content select="[label-slot]"></ng-content>
8
- }
9
- @if (extraLabelSlot) {
10
- <ng-content select="[extra-label-slot]"></ng-content>
11
- } @else if (labelRight) {
12
- <span class="dasar-select-label-right">{{ labelRight }}</span>
13
- }
14
- </div>
15
- }
16
- <div
17
- class="dasar-select-container appearance-{{ appearance }} size-{{ size }} radius-{{ radius }}"
18
- [class.hide-overflow]="hideOverflow"
19
- [class.full-width]="fullWidth"
20
- [class.disabled]="disabled"
21
- [class.error]="error"
22
- [class.open]="isOpen"
23
- [ngClass]="containerClass"
24
- [ngStyle]="containerStyle"
25
- (click)="toggleDropdown()"
26
- >
27
- <ng-content select="[prefix-slot]"></ng-content>
28
- <div
29
- class="dasar-select-value-display"
30
- [class.is-multiple]="isMultiple"
31
- [class.display-chip]="isMultiple && multipleType === 'chip'"
32
- >
33
- @if (isMultiple) {
34
- @if (multipleType === 'chip') {
35
- @for (option of selectedOptions; track option.value) {
36
- @if (chipTemplate) {
37
- <ng-container
38
- *ngTemplateOutlet="
39
- chipTemplate.templateRef;
40
- context: {
41
- $implicit: option,
42
- selectInstance: this,
43
- }
44
- "
45
- >
46
- </ng-container>
47
- } @else {
48
- <dasar-chip
49
- [size]="chipSize"
50
- [label]="option.label"
51
- [removable]="!disabled"
52
- [ngClass]="option.chipClass"
53
- [ngStyle]="option.chipStyle"
54
- [variant]="option.chipVariant ?? 'primary'"
55
- (onClicked)="$event.stopPropagation()"
56
- (onRemoved)="removeOption(option, $event)"
57
- >
58
- </dasar-chip>
59
- }
60
- }
61
- } @else {
62
- @if (!searchable || !isOpen) {
63
- @if (selectedOptions.length > 0) {
64
- <span class="dasar-select-selected-text">{{ getMultipleDisplayText() }}</span>
65
- }
66
- }
67
- }
68
- }
69
- @if (!isMultiple && (!searchable || !isOpen)) {
70
- @if (selectedOption) {
71
- <span class="dasar-select-selected-text">{{ selectedOption.label }}</span>
72
- }
73
- }
74
- @if (!hasValue && (!searchable || !isOpen)) {
75
- <span class="dasar-select-placeholder">{{ placeholder }}</span>
76
- }
77
- @if (searchable && isOpen) {
78
- <input
79
- #searchInput
80
- type="text"
81
- class="dasar-select-search-input"
82
- [placeholder]="
83
- hasValue && isMultiple && multipleType === 'chip'
84
- ? ''
85
- : hasValue && !isMultiple
86
- ? (selectedOption?.label ?? '')
87
- : hasValue && isMultiple && multipleType === 'text'
88
- ? getMultipleDisplayText()
89
- : placeholder
90
- "
91
- [disabled]="disabled"
92
- [(ngModel)]="searchQuery"
93
- (ngModelChange)="onSearchInput($event)"
94
- (click)="$event.stopPropagation()"
95
- (blur)="onInputBlur()"
96
- (focus)="onInputFocus()"
97
- />
98
- }
99
- </div>
100
- @if (loading) {
101
- <div class="dasar-select-loader-wrapper">
102
- <dasar-icon name="loader" size="sm" class="spinning-icon"></dasar-icon>
103
- </div>
104
- }
105
- @if (clearable && hasValue && !disabled) {
106
- <dasar-icon
107
- class="dasar-select-clear-btn"
108
- tabindex="-1"
109
- size="sm"
110
- name="x"
111
- (click)="clearSelection($event)"
112
- ></dasar-icon>
113
- }
114
- <ng-content select="[suffix-slot]"></ng-content>
115
- <dasar-button
116
- class="dasar-select-arrow-btn"
117
- variant="ghost"
118
- tabindex="-1"
119
- icon-only
120
- [class.rotated]="isOpen"
121
- [disabled]="disabled"
122
- [size]="size"
123
- >
124
- <dasar-icon [name]="arrowIconName" [size]="size"></dasar-icon>
125
- </dasar-button>
126
- </div>
127
- @if (isOpen && !disabled) {
128
- <div
129
- class="dasar-select-dropdown-panel"
130
- [ngClass]="dropdownPanelClass"
131
- [ngStyle]="dropdownPanelStyle"
132
- >
133
- @if (loading) {
134
- @if (optionLoadingSlot) {
135
- <ng-content select="[option-loading-slot]"></ng-content>
136
- } @else {
137
- <div class="dasar-select-loading-state">
138
- <span>Loading options...</span>
139
- </div>
140
- }
141
- } @else if (filteredOptions.length === 0) {
142
- @if (optionEmptySlot) {
143
- <ng-content select="[option-empty-slot]"></ng-content>
144
- } @else {
145
- <div class="dasar-select-empty-state">
146
- <span>No options found</span>
147
- </div>
148
- }
149
- } @else {
150
- @for (option of filteredOptions; track option.value) {
151
- <div
152
- class="dasar-select-option"
153
- [class.selected]="isOptionSelected(option)"
154
- [class.disabled]="option.disabled"
155
- [ngClass]="optionClass"
156
- (click)="selectOption(option, $event)"
157
- >
158
- @if (isMultiple) {
159
- <input
160
- type="checkbox"
161
- [checked]="isOptionSelected(option)"
162
- [disabled]="option.disabled"
163
- />
164
- }
165
- @if (optionTemplate) {
166
- <ng-container
167
- *ngTemplateOutlet="optionTemplate.templateRef; context: { $implicit: option }"
168
- ></ng-container>
169
- } @else {
170
- @if (option.iconName) {
171
- <dasar-icon [name]="option.iconName" size="sm"></dasar-icon>
172
- }
173
- <span class="option-label">{{ option.label }}</span>
174
- }
175
- </div>
176
- }
177
- }
178
- </div>
179
- }
180
- @if (hint) {
181
- <div class="dasar-select-hint" [class.error]="error" [class.disabled]="disabled">
182
- {{ hint }}
183
- </div>
184
- }
185
- </div>
@@ -1,347 +0,0 @@
1
- @use '../../styles/theme.scss' as *;
2
-
3
- .dasar-select {
4
- display: inline-flex;
5
- flex-direction: column;
6
- position: relative;
7
- width: fit-content;
8
-
9
- &.full-width {
10
- width: 100%;
11
- }
12
-
13
- &.disabled {
14
- cursor: not-allowed;
15
- }
16
- }
17
-
18
- .dasar-select-wrapper {
19
- display: flex;
20
- flex-direction: column;
21
- gap: var(--select-wrapper-gap, var(--space-1));
22
- position: relative;
23
- }
24
-
25
- .dasar-select-label-row {
26
- font-weight: var(--select-label-font-weight, var(--font-weight-medium));
27
- color: var(--select-label-color, var(--theme-text-primary-color));
28
- justify-content: space-between;
29
- align-items: center;
30
- line-height: var(--line-height-tight);
31
- display: flex;
32
-
33
- .dasar-select-label {
34
- font-size: var(--select-label-font-size, var(--font-size-md));
35
- }
36
-
37
- .dasar-select-label-right {
38
- font-size: var(--select-label-right-font-size, var(--font-size-sm));
39
- color: var(--select-label-right-color, var(--theme-text-secondary-color));
40
- font-weight: var(--font-weight-regular);
41
- display: inline-flex;
42
- align-items: center;
43
- gap: var(--space-1);
44
- }
45
- }
46
-
47
- .dasar-select-container {
48
- color: var(--select-color, var(--theme-text-secondary-color));
49
- padding: 0 0 0 var(--select-padding-left, var(--space-base));
50
- border-radius: var(--select-radius-sm, var(--radius-sm));
51
- gap: var(--select-gap, var(--space-base));
52
- box-sizing: border-box;
53
- font-family: inherit;
54
- display: inline-flex;
55
- align-items: center;
56
- user-select: none;
57
- cursor: pointer;
58
- width: auto;
59
-
60
- &.hide-overflow {
61
- overflow: hidden;
62
- }
63
-
64
- &.appearance-outline {
65
- background-color: var(--select-outline-bg, transparent);
66
- border: 1px solid var(--select-outline-border, var(--theme-border-strong-color));
67
-
68
- &:hover:not(.disabled) {
69
- border-color: var(--select-outline-hover-border, var(--theme-primary-color));
70
- }
71
-
72
- &.open,
73
- &:focus-within {
74
- border-color: var(--select-outline-focus-border, var(--theme-primary-color));
75
- box-shadow: 0 0 0 3px var(--select-outline-focus-ring, var(--theme-primary-surface-color));
76
- }
77
- }
78
-
79
- &.appearance-filled {
80
- background-color: var(--select-filled-bg, var(--theme-bg-hover-color));
81
- border: 1px solid var(--select-filled-border, transparent);
82
-
83
- &:hover:not(.disabled) {
84
- background-color: var(--select-filled-hover-bg, var(--theme-border-subtle-color));
85
- }
86
-
87
- &.open,
88
- &:focus-within {
89
- background-color: var(--select-filled-focus-bg, var(--theme-bg-surface-color));
90
- border-color: var(--select-filled-focus-border, var(--theme-primary-color));
91
- box-shadow: 0 0 0 3px var(--select-filled-focus-ring, var(--theme-primary-surface-color));
92
- }
93
- }
94
-
95
- &.error {
96
- border-color: var(--select-error-border, var(--theme-danger-color)) !important;
97
-
98
- &.open,
99
- &:focus-within {
100
- box-shadow: 0 0 0 3px var(--select-error-focus-ring, var(--theme-danger-surface-color));
101
- }
102
- }
103
-
104
- &.disabled {
105
- background-color: var(--select-disabled-bg, var(--theme-bg-hover-color)) !important;
106
- border-color: var(--select-disabled-border, transparent) !important;
107
- cursor: not-allowed;
108
- opacity: var(--select-disabled-opacity, 0.6);
109
- pointer-events: none;
110
- }
111
-
112
- &.size-xs {
113
- height: var(--select-height-xs, var(--space-6));
114
- padding: 0 var(--select-padding-horizontal-xs, var(--space-base));
115
- font-size: var(--font-size-xs);
116
- padding-right: 0;
117
-
118
- &:has([prefix-slot], [chip-template]) {
119
- padding-left: 0;
120
- // .dasar-select-value-display {
121
- // padding-left: var(--input-padding-horizontal-xs, var(--space-base));
122
- // }
123
- }
124
- }
125
-
126
- &.size-sm {
127
- height: var(--select-height-sm, var(--space-8));
128
- padding: 0 var(--select-padding-horizontal-sm, var(--space-3));
129
- font-size: var(--font-size-sm);
130
- padding-right: 0;
131
-
132
- &:has([prefix-slot], [chip-template]) {
133
- padding-left: 0;
134
- // .dasar-select-value-display {
135
- // padding-left: var(--input-padding-horizontal-sm, var(--space-3));
136
- // }
137
- }
138
- }
139
-
140
- &.size-md {
141
- height: var(--select-height-md, var(--space-10));
142
- padding: 0 var(--select-padding-horizontal-md, var(--space-4));
143
- font-size: var(--font-size-base);
144
- padding-right: 0;
145
-
146
- &:has([prefix-slot], [chip-template]) {
147
- padding-left: 0;
148
- // .dasar-select-value-display {
149
- // padding-left: var(--input-padding-horizontal-md, var(--space-4));
150
- // }
151
- }
152
- }
153
-
154
- &.size-lg {
155
- height: var(--select-height-lg, var(--space-12));
156
- padding: 0 var(--select-padding-horizontal-lg, var(--space-5));
157
- font-size: var(--font-size-lg);
158
- padding-right: 0;
159
-
160
- &:has([prefix-slot], [chip-template]) {
161
- padding-left: 0;
162
- // .dasar-select-value-display {
163
- // padding-left: var(--input-padding-horizontal-lg, var(--space-5));
164
- // }
165
- }
166
- }
167
-
168
- &.size-xl {
169
- height: var(--select-height-xl, var(--space-16));
170
- padding: 0 var(--select-padding-horizontal-xl, var(--space-6));
171
- font-size: var(--font-size-xl, chip-template);
172
- padding-right: 0;
173
-
174
- &:has([prefix-slot]) {
175
- padding-left: 0;
176
- // .dasar-select-value-display {
177
- // padding-left: var(--input-padding-horizontal-xl, var(--space-6));
178
- // }
179
- }
180
- }
181
-
182
- &.radius-none {
183
- border-radius: var(--select-radius-none, var(--radius-none));
184
- }
185
- &.radius-xs {
186
- border-radius: var(--select-radius-xs, var(--radius-xs));
187
- }
188
- &.radius-sm {
189
- border-radius: var(--select-radius-sm, var(--radius-sm));
190
- }
191
- &.radius-md {
192
- border-radius: var(--select-radius-md, var(--radius-md));
193
- }
194
- &.radius-lg {
195
- border-radius: var(--select-radius-lg, var(--radius-lg));
196
- }
197
- &.radius-xl {
198
- border-radius: var(--select-radius-xl, var(--radius-xl));
199
- }
200
- &.radius-full {
201
- border-radius: var(--select-radius-full, var(--radius-full));
202
- }
203
- }
204
-
205
- .dasar-select-value-display {
206
- color: var(--select-value-color, var(--theme-text-primary-color));
207
- align-items: center;
208
- gap: var(--space-1);
209
- overflow: hidden;
210
- min-height: 24px;
211
- flex-wrap: wrap;
212
- display: flex;
213
- flex: 1;
214
-
215
- &.is-multiple {
216
- scrollbar-width: thin;
217
- flex-wrap: nowrap;
218
- overflow: auto;
219
- display: flex;
220
- }
221
- }
222
-
223
- .dasar-select-selected-text {
224
- text-wrap: nowrap;
225
- }
226
-
227
- .dasar-select-placeholder {
228
- color: var(--select-placeholder-color, var(--theme-text-secondary-color));
229
- }
230
-
231
- .dasar-select-search-input {
232
- flex: 1;
233
- min-width: 60px;
234
- border: none;
235
- outline: none;
236
- background: transparent;
237
- font-family: inherit;
238
- font-size: inherit;
239
- color: var(--select-search-color, var(--theme-text-primary-color));
240
- padding: 0;
241
-
242
- &::placeholder {
243
- color: var(--select-search-placeholder-color, var(--theme-text-secondary-color));
244
- }
245
- }
246
-
247
- .dasar-select-loader-wrapper {
248
- display: inline-flex;
249
- align-items: center;
250
- color: var(--select-loader-color, var(--theme-text-secondary-color));
251
- }
252
-
253
- .dasar-select-arrow-btn {
254
- transition: transform 0.2s ease;
255
- pointer-events: none;
256
- color: var(--select-arrow-color, var(--theme-text-secondary-color));
257
-
258
- &.rotated {
259
- transform: rotate(180deg);
260
- }
261
- }
262
-
263
- .dasar-select-dropdown-panel {
264
- position: absolute;
265
- top: calc(100% + 4px);
266
- left: 0;
267
- width: 100%;
268
- max-height: var(--select-dropdown-max-height, 240px);
269
- overflow-y: auto;
270
- background-color: var(--select-dropdown-bg, var(--theme-bg-surface-color));
271
- border: 1px solid var(--select-dropdown-border, var(--theme-border-subtle-color));
272
- border-radius: var(--select-dropdown-radius, var(--radius-sm));
273
- box-shadow: var(
274
- --select-dropdown-shadow,
275
- 0 10px 25px -5px rgba(0, 0, 0, 0.1),
276
- 0 8px 10px -6px rgba(0, 0, 0, 0.1)
277
- );
278
- z-index: var(--select-dropdown-z-index, 50);
279
- display: flex;
280
- flex-direction: column;
281
- }
282
-
283
- .dasar-select-option {
284
- padding: var(--select-option-padding-y, var(--space-3))
285
- var(--select-option-padding-x, var(--space-4));
286
- color: var(--select-option-color, var(--theme-text-primary-color));
287
- transition: background-color 0.15s ease;
288
- gap: var(--space-base);
289
- align-items: center;
290
- cursor: pointer;
291
- display: flex;
292
-
293
- .size-xs & {
294
- font-size: var(--font-size-xs);
295
- }
296
- .size-sm & {
297
- font-size: var(--font-size-sm);
298
- }
299
- .size-md & {
300
- font-size: var(--font-size-base);
301
- }
302
- .size-lg & {
303
- font-size: var(--font-size-lg);
304
- }
305
- .size-xl & {
306
- font-size: var(--font-size-xl);
307
- }
308
-
309
- &:hover:not(.disabled) {
310
- background-color: var(--select-option-hover-bg, var(--theme-bg-hover-color));
311
- }
312
-
313
- &.selected {
314
- background-color: var(--select-option-selected-bg, var(--theme-primary-surface-color));
315
- color: var(--select-option-selected-color, var(--theme-primary-color));
316
- font-weight: var(--select-option-selected-font-weight, var(--font-weight-medium));
317
- }
318
-
319
- &.disabled {
320
- color: var(--select-option-disabled-color, var(--theme-text-disabled-color));
321
- cursor: not-allowed;
322
- }
323
- }
324
-
325
- .dasar-select-loading-state,
326
- .dasar-select-empty-state {
327
- color: var(--select-state-color, var(--theme-text-secondary-color));
328
- font-size: var(--select-state-font-size, var(--font-size-base));
329
- padding: var(--space-4);
330
- text-align: center;
331
- }
332
-
333
- .dasar-select-hint {
334
- font-size: var(--select-hint-font-size, var(--font-size-sm));
335
- color: var(--select-hint-color, var(--theme-text-secondary-color));
336
- line-height: var(--line-height-normal);
337
- margin-top: calc(var(--space-0-5) * -1);
338
-
339
- &.error {
340
- color: var(--select-hint-error-color, var(--theme-danger-color));
341
- }
342
-
343
- &.disabled {
344
- opacity: var(--select-disabled-opacity, 0.6);
345
- cursor: not-allowed;
346
- }
347
- }
@@ -1,21 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
- import { DasarSelect } from './dasar-select';
3
-
4
- describe('DasarSelect', () => {
5
- let component: DasarSelect;
6
- let fixture: ComponentFixture<DasarSelect>;
7
-
8
- beforeEach(async () => {
9
- await TestBed.configureTestingModule({
10
- imports: [DasarSelect],
11
- }).compileComponents();
12
-
13
- fixture = TestBed.createComponent(DasarSelect);
14
- component = fixture.componentInstance;
15
- await fixture.whenStable();
16
- });
17
-
18
- it('should create', () => {
19
- expect(component).toBeTruthy();
20
- });
21
- });