@fxlt/common-ui 0.0.1

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 (44) hide show
  1. package/BeVietnamPro-Regular.ttf +0 -0
  2. package/README.md +63 -0
  3. package/SpaceMono-Regular.ttf +0 -0
  4. package/animations.css +115 -0
  5. package/components.css +383 -0
  6. package/dialogs.css +116 -0
  7. package/fesm2022/fxlt-common-ui.mjs +2439 -0
  8. package/fesm2022/fxlt-common-ui.mjs.map +1 -0
  9. package/fonts.css +13 -0
  10. package/index.d.ts +739 -0
  11. package/package.json +53 -0
  12. package/src/lib/styles/animations.css +115 -0
  13. package/src/lib/styles/components.css +383 -0
  14. package/src/lib/styles/dialogs.css +116 -0
  15. package/src/lib/styles/fonts.css +13 -0
  16. package/src/lib/styles/tailwind.css +18 -0
  17. package/src/lib/styles/theme.css +63 -0
  18. package/src/lib/ui/components/button/button.component.html +223 -0
  19. package/src/lib/ui/components/chart/chart.component.html +13 -0
  20. package/src/lib/ui/components/checkbox/checkbox.component.html +43 -0
  21. package/src/lib/ui/components/datetime-picker/datetime-picker.component.html +25 -0
  22. package/src/lib/ui/components/dnd-upload/dnd-upload.component.html +34 -0
  23. package/src/lib/ui/components/hero-icon/hero-icon.component.html +8 -0
  24. package/src/lib/ui/components/input/input.component.css +0 -0
  25. package/src/lib/ui/components/input/input.component.html +46 -0
  26. package/src/lib/ui/components/loading-panel/loading-panel.component.html +51 -0
  27. package/src/lib/ui/components/radio-button/radio-button.component.css +0 -0
  28. package/src/lib/ui/components/radio-button/radio-button.component.html +35 -0
  29. package/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.html +34 -0
  30. package/src/lib/ui/components/search-bar/search-bar.component.html +22 -0
  31. package/src/lib/ui/components/select/select.component.css +80 -0
  32. package/src/lib/ui/components/select/select.component.html +25 -0
  33. package/src/lib/ui/components/slider/slider.component.html +54 -0
  34. package/src/lib/ui/components/switch/switch.component.html +21 -0
  35. package/src/lib/ui/components/tab-component/tab.component.html +1 -0
  36. package/src/lib/ui/components/tab-group/tab-group.component.html +75 -0
  37. package/src/lib/ui/components/tag/tag.component.html +43 -0
  38. package/src/lib/ui/components/toast/toast.component.html +48 -0
  39. package/src/lib/ui/components/toast-container/toast-container.component.html +12 -0
  40. package/src/lib/ui/dialogs/confirmation/confirmation.component.html +10 -0
  41. package/tailwind-config.d.ts +4 -0
  42. package/tailwind.config.js +69 -0
  43. package/tailwind.css +18 -0
  44. package/theme.css +63 -0
@@ -0,0 +1,80 @@
1
+ ::ng-deep .fx-select-field {
2
+ display: block !important;
3
+ width: 100% !important;
4
+ margin: 0 !important;
5
+ padding: 0 !important;
6
+ border-radius: 0.75rem;
7
+ box-shadow: 0 1px 1px rgb(var(--border-default));
8
+ }
9
+
10
+ ::ng-deep .fx-select-field .mat-mdc-form-field-wrapper,
11
+ ::ng-deep .fx-select-field .mat-mdc-text-field-wrapper {
12
+ padding: 0 !important;
13
+ margin: 0 !important;
14
+ width: 100% !important;
15
+ }
16
+
17
+ ::ng-deep .fx-select-field .mdc-text-field {
18
+ width: 100% !important;
19
+ margin: 0 !important;
20
+ padding: 0 !important;
21
+ --mdc-shape-small: 0 !important;
22
+ }
23
+
24
+ ::ng-deep .fx-select-field .mat-mdc-form-field-flex {
25
+ width: 100% !important;
26
+ margin: 0 !important;
27
+ padding: 0 0.75rem !important;
28
+ border: 1px solid rgb(var(--border-default));
29
+ border-radius: 0.5rem;
30
+ height: 36px !important;
31
+ align-items: center;
32
+ background-color: rgb(var(--bg-primary));
33
+ }
34
+
35
+ ::ng-deep .fx-select-field .mdc-notched-outline,
36
+ ::ng-deep .fx-select-field .mat-mdc-form-field-subscript-wrapper {
37
+ display: none !important;
38
+ }
39
+
40
+ ::ng-deep .fx-select-field.mat-focused .mat-mdc-form-field-flex {
41
+ border: 2px solid rgb(var(--border-interactive)) !important;
42
+ outline: none !important;
43
+ border-radius: 0.5rem;
44
+ }
45
+
46
+ ::ng-deep .fx-select-field.mat-form-field-invalid .mat-mdc-form-field-flex {
47
+ border-color: #ef4444 !important;
48
+ box-shadow: none !important;
49
+ }
50
+
51
+ ::ng-deep .fx-select-field .mat-mdc-select-trigger {
52
+ padding: 0 !important;
53
+ margin: 0 !important;
54
+ }
55
+
56
+ ::ng-deep .fx-select-field .mat-mdc-select-arrow-wrapper {
57
+ margin-right: 0 !important;
58
+ }
59
+
60
+ ::ng-deep .fx-select-field .mat-mdc-select-arrow-wrapper {
61
+ color: rgb(var(--text-primary));
62
+ }
63
+
64
+ ::ng-deep .mat-mdc-select-panel {
65
+ background-color: rgb(var(--bg-primary)) !important;
66
+ border: 1px solid rgb(var(--border-default)) !important;
67
+ border-radius: 0.5rem !important;
68
+ box-shadow: 0 2px 4px rgb(0 0 0 / 0.1) !important;
69
+ }
70
+
71
+ ::ng-deep .fx-select-field .mat-mdc-select-placeholder {
72
+ color: rgb(var(--text-placeholder)) !important;
73
+ font-size: 14px;
74
+ }
75
+
76
+ ::ng-deep .fx-select-field .mat-mdc-select-value {
77
+ color: rgb(var(--text-primary)) !important;
78
+ font-size: 14px;
79
+ font-weight: 400;
80
+ }
@@ -0,0 +1,25 @@
1
+ <div class="mb-4 text-left w-full" [class]="class">
2
+ <label *ngIf="label" class="block txt-field-label">
3
+ {{ label }}
4
+ @if(required) {<span class="txt-required">*</span>}
5
+ </label>
6
+
7
+ <mat-form-field class="fx-select-field w-full shadow-sm" appearance="fill">
8
+ <mat-select
9
+ [placeholder]="placeholder"
10
+ [disabled]="disabled"
11
+ [multiple]="multiple"
12
+ [value]="value"
13
+ (selectionChange)="onSelectionChange($event.value)"
14
+ (blur)="onTouched()"
15
+ >
16
+ <mat-option *ngFor="let option of options" [value]="option.value">
17
+ <span class="txt-default">{{ option.label }}</span>
18
+ </mat-option>
19
+ </mat-select>
20
+ </mat-form-field>
21
+
22
+ <div *ngIf="invalid" class="txt-invalid text-left">
23
+ {{ getErrorMessage(label) }}
24
+ </div>
25
+ </div>
@@ -0,0 +1,54 @@
1
+ <div
2
+ class="w-full select-none"
3
+ [class.cursor-not-allowed]="disabled"
4
+ [class.opacity-60]="disabled"
5
+ role="group"
6
+ >
7
+ <div
8
+ #track
9
+ class="relative touch-none py-4"
10
+ (click)="onTrackClick($event)"
11
+ [attr.aria-disabled]="disabled"
12
+ [attr.aria-orientation]="vertical ? 'vertical' : 'horizontal'"
13
+ >
14
+ <div
15
+ class="relative flex items-center"
16
+ [ngClass]="{ 'flex-col h-48': vertical }"
17
+ >
18
+ <div
19
+ class="relative flex-1 rounded-full bg-gray-600 h-2"
20
+ [ngClass]="{ 'w-1 rotate-0 h-full w-auto bg-border-gray-700': vertical }"
21
+ >
22
+ <div
23
+ class="absolute left-0 top-0 h-full rounded-full bg-primary"
24
+ *ngIf="!vertical"
25
+ [style.width.%]="percent"
26
+ ></div>
27
+
28
+ <div
29
+ class="absolute bottom-0 left-0 w-full rounded-full bg-primary"
30
+ *ngIf="vertical"
31
+ [style.height.%]="percent"
32
+ style="transform-origin: bottom;"
33
+ ></div>
34
+
35
+ <button
36
+ #thumb
37
+ type="button"
38
+ class="absolute -mt-1 -ml-1.5 w-4 h-4 rounded-full shadow focus:ring-primary bg-primary border-2 border-text-primary"
39
+ [ngStyle]="thumbStyle()"
40
+ role="slider"
41
+ [attr.aria-valuemin]="min"
42
+ [attr.aria-valuemax]="max"
43
+ [attr.aria-valuenow]="value"
44
+ [attr.aria-disabled]="disabled"
45
+ tabindex="0"
46
+ (pointerdown)="onPointerDown($event)"
47
+ (pointermove)="onPointerMove($event)"
48
+ (pointerup)="onPointerUp($event)"
49
+ [disabled]="disabled"
50
+ ></button>
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </div>
@@ -0,0 +1,21 @@
1
+ <div
2
+ class="relative inline-flex items-center w-10 h-5 rounded-full transition-colors duration-300 cursor-pointer"
3
+ [ngClass]="{
4
+ 'bg-success': value && !disabled,
5
+ 'bg-button-default': !value && !disabled,
6
+ 'bg-bg-hover': disabled
7
+ }"
8
+ (click)="toggle()"
9
+ >
10
+ @if(value) {
11
+ <i style="font-size: 20px;" class="material-symbols-outlined absolute left-0.5 top-0 text-text-inverse">check</i>
12
+
13
+ }
14
+ @if(!value) {
15
+ <i style="font-size: 20px;" class="material-symbols-outlined absolute right-0.5 top-0 text-text-inverse">close</i>
16
+ }
17
+ <div
18
+ class="absolute top-0.5 left-0.5 w-4 h-4 bg-text-inverse rounded-full shadow-md transform transition-transform duration-300"
19
+ [ngClass]="{ 'translate-x-5': value }"
20
+ ></div>
21
+ </div>
@@ -0,0 +1 @@
1
+ <ng-template><ng-content></ng-content></ng-template>
@@ -0,0 +1,75 @@
1
+ <div class="relative">
2
+ <!-- Left scroll button -->
3
+ <button
4
+ class="left-scroll-button"
5
+ type="button"
6
+ (click)="scroll('left')"
7
+ [style.opacity]="canScrollLeft ? 1 : 0"
8
+ [style.pointerEvents]="canScrollLeft ? 'auto' : 'none'"
9
+ >
10
+ <svg
11
+ xmlns="http://www.w3.org/2000/svg"
12
+ class="h-5 w-5 text-text-primary"
13
+ fill="none"
14
+ viewBox="0 0 24 24"
15
+ stroke="currentColor"
16
+ >
17
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" />
18
+ </svg>
19
+ </button>
20
+
21
+ <div
22
+ #tabList
23
+ class="relative flex overflow-x-auto no-scrollbar scroll-smooth"
24
+ (scroll)="onScroll()"
25
+ >
26
+ <button
27
+ *ngFor="let tab of tabs.toArray(); let i = index"
28
+ (click)="selectTab(i)"
29
+ class="tab-btn tab-bar-btn"
30
+ >
31
+ <div class="flex flex-row items-center justify-center">
32
+ @if(tab.icon) {<fx-ui-hero-icon
33
+ [icon]="tab.icon"
34
+ [size]="20"
35
+ class="flex mr-[2px]"
36
+ [ngClass]="{
37
+ 'text-primary mb-small': i === activeIndex,
38
+ 'text-text-placeholder': i !== activeIndex
39
+ }"
40
+ ></fx-ui-hero-icon
41
+ >}
42
+ <div [ngClass]="i === activeIndex ? 'txt-field-label text-primary' : 'txt-placeholder'">{{ tab.label }}</div>
43
+ </div>
44
+ </button>
45
+
46
+ <span #underline class="underline" style="width: 0; transform: translateX(0)"></span>
47
+ </div>
48
+
49
+ <button
50
+ class="right-scroll-button"
51
+ type="button"
52
+ (click)="scroll('right')"
53
+ [style.opacity]="canScrollRight ? 1 : 0"
54
+ [style.pointerEvents]="canScrollRight ? 'auto' : 'none'"
55
+ >
56
+ <svg
57
+ xmlns="http://www.w3.org/2000/svg"
58
+ class="h-5 w-5 text-text-primary"
59
+ fill="none"
60
+ viewBox="0 0 24 24"
61
+ stroke="currentColor"
62
+ >
63
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
64
+ </svg>
65
+ </button>
66
+ </div>
67
+
68
+ <!-- Tab content -->
69
+ <div class="transition-all duration-300 ease-in-out mt-4">
70
+ <ng-container *ngFor="let tab of tabs.toArray(); let i = index">
71
+ <div *ngIf="i === activeIndex" class="animate-fadeIn">
72
+ <ng-container *ngTemplateOutlet="tab.content"></ng-container>
73
+ </div>
74
+ </ng-container>
75
+ </div>
@@ -0,0 +1,43 @@
1
+ <div
2
+ class="flex flex-row gap-1"
3
+ [class]="rounded ? 'tag-round' : 'tag-square'"
4
+ [ngClass]="{
5
+ 'tag-critical': type === 'critical',
6
+ 'tag-success': type === 'success',
7
+ 'tag-warning': type === 'warning',
8
+ 'tag-information': type === 'information',
9
+ 'tag-discovery': type === 'discovery',
10
+ 'tag-danger': type === 'danger',
11
+ 'tag-default': type === 'default'
12
+ }"
13
+ >
14
+ @if(icon){<fx-ui-hero-icon
15
+ class="flex"
16
+ [icon]="icon"
17
+ [size]="18"
18
+ [ngClass]="{
19
+ 'text-critical': type === 'critical',
20
+ 'text-success': type === 'success',
21
+ 'text-warning': type === 'warning',
22
+ 'text-information': type === 'information',
23
+ 'text-discovery': type === 'discovery',
24
+ 'text-danger': type === 'danger',
25
+ 'text-text-primary': type === 'default',
26
+ }"
27
+ ></fx-ui-hero-icon
28
+ >}
29
+
30
+ <div
31
+ [ngClass]="{
32
+ 'txt-tag-critical': type === 'critical',
33
+ 'txt-tag-success': type === 'success',
34
+ 'txt-tag-warning': type === 'warning',
35
+ 'txt-tag-information': type === 'information',
36
+ 'txt-tag-discovery': type === 'discovery',
37
+ 'txt-tag-danger': type === 'danger',
38
+ 'txt-tag-default': type === 'default',
39
+ }"
40
+ >
41
+ {{ label }}
42
+ </div>
43
+ </div>
@@ -0,0 +1,48 @@
1
+ <div
2
+ animate.enter="horizontal-fade-in-animation"
3
+ animate.leave="horizontal-fade-out-animation"
4
+ class="flex border-l-[3px] items-center bg-bg-primary gap-semi min-w-[250px] max-w-[320px] px-large py-semi rounded shadow-lg transition-all duration-300 ease-in-out transform opacity-100 translate-y-0"
5
+ [ngClass]="{
6
+ 'border-success': type === 'success',
7
+ 'border-critical': type === 'error',
8
+ 'border-warning': type === 'warning',
9
+ 'border-information': type === 'info'
10
+ }"
11
+ >
12
+ <div class="">
13
+ @switch (type) { @case('success') {
14
+ <fx-ui-hero-icon
15
+ icon="check-circle"
16
+ [solid]="true"
17
+ [size]="30"
18
+ class="text-success"
19
+ ></fx-ui-hero-icon>
20
+ } @case('error') {
21
+ <fx-ui-hero-icon
22
+ icon="exclamation-circle"
23
+ [solid]="true"
24
+ [size]="30"
25
+ class="text-critical"
26
+ ></fx-ui-hero-icon>
27
+ } @case('warning') {
28
+ <fx-ui-hero-icon
29
+ icon="exclamation-triangle"
30
+ [solid]="true"
31
+ [size]="30"
32
+ class="text-warning"
33
+ ></fx-ui-hero-icon>
34
+ } @default {
35
+ <fx-ui-hero-icon
36
+ icon="information-circle"
37
+ [solid]="true"
38
+ [size]="30"
39
+ class="text-information"
40
+ ></fx-ui-hero-icon>
41
+ } }
42
+ </div>
43
+
44
+ <div class="flex flex-col">
45
+ <strong *ngIf="title" class="txt-field-label">{{ title }}</strong>
46
+ <p class="txt-default">{{ message }}</p>
47
+ </div>
48
+ </div>
@@ -0,0 +1,12 @@
1
+ <div
2
+ class="fixed top-5 right-5 flex flex-col items-end gap-3 z-[10000] pointer-events-none"
3
+ >
4
+ @for (toast of toasts; track toast) {
5
+ <fx-ui-toast
6
+ class="pointer-events-auto"
7
+ [message]="toast.message"
8
+ [title]="toast.title"
9
+ [type]="toast.type"
10
+ ></fx-ui-toast>
11
+ }
12
+ </div>
@@ -0,0 +1,10 @@
1
+ <div animate.enter="fade-in-animation">
2
+ <div class="txt-section-header px-2xl py-semi">{{title}}</div>
3
+ <mat-dialog-content>
4
+ <div class="txt-default">{{message}}</div>
5
+ </mat-dialog-content>
6
+ <mat-dialog-actions align="end">
7
+ <fx-ui-button class="mr-1" [label]="cancelLabel" (clicked)="cancel()"></fx-ui-button>
8
+ <fx-ui-button buttonVariant="primary" class="mr-1" [label]="confirmLabel" (clicked)="accept()"></fx-ui-button>
9
+ </mat-dialog-actions>
10
+ </div>
@@ -0,0 +1,4 @@
1
+ declare module '@fx/ui/tailwind.config' {
2
+ const config: any;
3
+ export default config;
4
+ }
@@ -0,0 +1,69 @@
1
+ module.exports = {
2
+ theme: {
3
+ extend: {
4
+ colors: {
5
+ primary: 'rgb(var(--primary) / <alpha-value>)',
6
+ success: 'rgb(var(--success) / <alpha-value>)',
7
+ danger: 'rgb(var(--danger) / <alpha-value>)',
8
+ warning: 'rgb(var(--warning) / <alpha-value>)',
9
+ critical: 'rgb(var(--critical) / <alpha-value>)',
10
+ discovery: 'rgb(var(--discovery) / <alpha-value>)',
11
+ information: 'rgb(var(--information) / <alpha-value>)',
12
+ bg: {
13
+ primary: 'rgb(var(--bg-primary) / <alpha-value>)',
14
+ hover: 'rgb(var(--bg-primary-hover) / <alpha-value>)',
15
+ error: 'rgb(var(--bg-error-bold) / <alpha-value>)',
16
+ hover2: 'rgb(var(--bg-secondary-hover) / <alpha-value>)',
17
+ },
18
+ text: {
19
+ primary: 'rgb(var(--text-primary) / <alpha-value>)',
20
+ secondary: 'rgb(var(--text-secondary) / <alpha-value>)',
21
+ placeholder: 'rgb(var(--text-placeholder) / <alpha-value>)',
22
+ selected: 'rgb(var(--text-selected-primary) / <alpha-value>)',
23
+ focus: 'rgb(var(--text-focus) / <alpha-value>)',
24
+ inverse: 'rgb(var(--text-inverse) / <alpha-value>)',
25
+ error: 'rgb(var(--text-error) / <alpha-value>)',
26
+ link: 'rgb(var(--text-link-primary) / <alpha-value>)',
27
+ },
28
+ border: {
29
+ default: 'rgb(var(--border-default) / <alpha-value>)',
30
+ interactive: 'rgb(var(--border-interactive) / <alpha-value>)',
31
+ selected: 'rgb(var(--border-selected) / <alpha-value>)',
32
+ strong: 'rgb(var(--border-strong) / <alpha-value>)',
33
+ hover2: 'rgb(var(--border-secondary-hover) / <alpha-value>)'
34
+ },
35
+ button: {
36
+ default: 'rgb(var(--button-default) / <alpha-value>)',
37
+ primary: 'rgb(var(--button-primary) / <alpha-value>)',
38
+ },
39
+ },
40
+ screens: {
41
+ sm: '640px',
42
+ md: '960px',
43
+ lg: '1280px',
44
+ },
45
+ boxShadow: {
46
+ sm: '0 1px 2px 0 rgb(var(--shadow-color) / 0.05)',
47
+ DEFAULT: '0 1px 3px 0 rgb(var(--shadow-color) / 0.1), 0 1px 2px -1px rgb(var(--shadow-color) / 0.1)',
48
+ md: '0 4px 6px -1px rgb(var(--shadow-color) / 0.1), 0 2px 4px -2px rgb(var(--shadow-color) / 0.1)',
49
+ lg: '0 10px 15px -3px rgb(var(--shadow-color) / 0.1), 0 4px 6px -4px rgb(var(--shadow-color) / 0.1)',
50
+ xl: '0 20px 25px -5px rgb(var(--shadow-color) / 0.1), 0 10px 10px -5px rgb(var(--shadow-color) / 0.1)',
51
+ '2xl': '0 25px 50px -12px rgb(var(--shadow-color) / 0.25)',
52
+ inner: 'inset 0 2px 4px 0 rgb(var(--shadow-color) / 0.05)',
53
+ },
54
+ spacing: {
55
+ xs: '0.125rem',
56
+ small: '0.25rem',
57
+ normal: '0.5rem',
58
+ semi: '0.75rem',
59
+ large: '1rem',
60
+ xl: '1.25rem',
61
+ '2xl': '1.5rem',
62
+ },
63
+ fontFamily:{
64
+ spmono: ['SpaceMonoRegular', 'monospace'],
65
+ }
66
+ },
67
+ },
68
+ plugins: [],
69
+ };
package/tailwind.css ADDED
@@ -0,0 +1,18 @@
1
+ @import './theme.css';
2
+ @import './components.css';
3
+ @import './dialogs.css';
4
+ @import './fonts.css';
5
+ @import './animations.css';
6
+ @import '@danielmoncada/angular-datetime-picker/assets/style/picker.min.css';
7
+ @tailwind base;
8
+ @tailwind component;
9
+ @tailwind utilities;
10
+
11
+ html, body {
12
+ font-family: 'BeVietnamProRegular';
13
+ margin: 0;
14
+ padding: 0;
15
+ height: 100%;
16
+ width: 100%;
17
+ background: rgb(var(--bg-primary));
18
+ }
package/theme.css ADDED
@@ -0,0 +1,63 @@
1
+ .light_theme {
2
+ --bg-primary: 255 255 255;
3
+ --primary: 236 25 56;
4
+ --success: 15 140 96;
5
+ --warning: 255 188 59;
6
+ --critical: 236 25 56;
7
+ --danger: 249 133 7;
8
+ --discovery: 119 113 227;
9
+ --information: 62 175 240;
10
+ --text-primary: 12 14 18;
11
+ --text-secondary: 97 101 108;
12
+ --border-default: 236 236 236;
13
+ --text-placeholder:148 151 156;
14
+ --step-bg: 12 14 18;
15
+ --text-link-primary: 29 122 252;
16
+ --bg-primary-hover: 247 247 247;
17
+ --text-focus: 255 255 255;
18
+ --bg-primary-neutral: 12 14 18;
19
+ --text-selected-primary: 199 14 41;
20
+ --button-default: 34 38 47;
21
+ --text-inverse: 255 255 255;
22
+ --bg-error-bold: 215 0 68;
23
+ --text-error: 215 0 68;
24
+ --border-interactive: 236 25 56;
25
+ --border-selected: 254 53 83;
26
+ --button-primary: 236 25 56;
27
+ --border-strong: 206 207 210;
28
+ --border-secondary-hover: 0 199 205;
29
+ --bg-secondary-hover: 6 59 70;
30
+ --shadow-color: 0 0 0;
31
+ }
32
+
33
+ :root {
34
+ --bg-primary: 12 14 18;
35
+ --primary: 236 25 56;
36
+ --success: 76 175 80;
37
+ --warning: 255 188 59;
38
+ --critical: 236 25 56;
39
+ --danger: 249 133 7;
40
+ --discovery: 119 113 227;
41
+ --information: 62 175 240;
42
+ --text-primary: 247 247 247;
43
+ --text-secondary: 148 151 156;
44
+ --border-default: 55 58 65;
45
+ --text-placeholder: 133 136 142;
46
+ --step-bg: 255 255 255;
47
+ --text-link-primary: 87 157 255;
48
+ --bg-primary-hover: 34 38 47;
49
+ --text-focus: 255 255 255;
50
+ --bg-primary-neutral: 12 14 18;
51
+ --text-selected-primary: 254 53 83;
52
+ --button-default: 236 236 236;
53
+ --text-inverse: 12 14 18;
54
+ --bg-error-bold: 215 0 68;
55
+ --text-error: 255 0 81;
56
+ --border-interactive: 236 25 56;
57
+ --border-selected: 254 53 83;
58
+ --button-primary: 236 25 56;
59
+ --border-strong: 97 101 108;
60
+ --border-secondary-hover: 0 199 205;
61
+ --bg-secondary-hover: 6 59 70;
62
+ --shadow-color: 255 255 255;
63
+ }