@thalassic/themes 0.7.0 → 0.8.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 (25) hide show
  1. package/package.json +1 -1
  2. package/themes/thalassic/components/_password.scss +18 -0
  3. package/themes/thalassic/components/_pin-input.scss +6 -0
  4. package/themes/thalassic/components/_popover.scss +21 -0
  5. package/themes/thalassic/components/_table.scss +78 -0
  6. package/themes/thalassic/components/date-time-picker/_calendar.scss +85 -0
  7. package/themes/thalassic/components/date-time-picker/_date-time-picker.scss +63 -0
  8. package/themes/thalassic/components/date-time-picker/_index.scss +5 -0
  9. package/themes/thalassic/components/date-time-picker/_mixins.scss +108 -0
  10. package/themes/thalassic/components/date-time-picker/_month-picker.scss +32 -0
  11. package/themes/thalassic/components/date-time-picker/_time-picker.scss +61 -0
  12. package/themes/thalassic/components/date-time-picker/_year-picker.scss +34 -0
  13. package/themes/thalassic/components/dialog/_dialog-size.scss +29 -0
  14. package/themes/thalassic/components/dialog/_dialog.scss +85 -0
  15. package/themes/thalassic/components/dialog/_index.scss +2 -0
  16. package/themes/thalassic/components/form/_form-control-group.scss +2 -1
  17. package/themes/thalassic/components/form/_form-control.scss +10 -3
  18. package/themes/thalassic/components/index.scss +7 -0
  19. package/themes/thalassic/components/pagination/_index.scss +2 -0
  20. package/themes/thalassic/components/pagination/_pagination-size.scss +22 -0
  21. package/themes/thalassic/components/pagination/_pagination.scss +79 -0
  22. package/themes/thalassic/components/select/_index.scss +3 -0
  23. package/themes/thalassic/components/select/_select-panel.scss +68 -0
  24. package/themes/thalassic/components/select/_select-size.scss +16 -0
  25. package/themes/thalassic/components/select/_select.scss +94 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thalassic/themes",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "license": "MIT",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
@@ -0,0 +1,18 @@
1
+ .tls-password {
2
+ display: inline-flex;
3
+
4
+ .tls-password-toggle {
5
+ display: grid;
6
+ align-items: center;
7
+
8
+ &__item {
9
+ grid-area: 1 / 1;
10
+
11
+ text-align: center;
12
+
13
+ &--hidden {
14
+ visibility: hidden;
15
+ }
16
+ }
17
+ }
18
+ }
@@ -18,6 +18,8 @@
18
18
  line-height: var(--font-label-large-line-height);
19
19
  letter-spacing: var(--font-label-large-letter-spacing);
20
20
 
21
+ background-color: var(--color-surface-container-lowest);
22
+
21
23
  border: 1px solid var(--tls-pin-input-border-color);
22
24
  border-radius: var(--tls-pin-border-radius);
23
25
 
@@ -36,6 +38,10 @@
36
38
  opacity: 0;
37
39
  }
38
40
  }
41
+
42
+ &::placeholder {
43
+ color: var(--color-outline);
44
+ }
39
45
  }
40
46
 
41
47
  &.tls-pin-input--disabled {
@@ -0,0 +1,21 @@
1
+ .tls-popover {
2
+ --tls-popover-padding: var(--spacing-4);
3
+
4
+ --tls-popover-border-radius: var(--radius-lg);
5
+ --tls-popover-border-width: 1px;
6
+
7
+ --tls-popover-box-shadow: var(--shadow-sm);
8
+ --tls-popover-background-color: var(--color-surface-container-lowest);
9
+ --tls-popover-color: var(--color-on-surface);
10
+ --tls-popover-border-color: var(--color-outline-variant);
11
+
12
+ padding: var(--tls-popover-padding);
13
+
14
+ border-radius: var(--tls-popover-border-radius);
15
+ border: var(--tls-popover-border-width) solid var(--tls-popover-border-color);
16
+
17
+ color: var(--tls-popover-color);
18
+ background-color: var(--tls-popover-background-color);
19
+
20
+ box-shadow: var(--tls-popover-box-shadow);
21
+ }
@@ -0,0 +1,78 @@
1
+ .tls-table {
2
+ --tls-table-background: var(--color-surface-container-lowest);
3
+ --tls-table-color: var(--color-on-surface);
4
+
5
+ --tls-table-header-background: var(--color-surface-container-lowest);
6
+ --tls-table-header-color: var(--color-on-surface-variant);
7
+ --tls-table-header-weight: var(--font-weight-medium);
8
+
9
+ --tls-table-border-color: var(--color-outline-variant);
10
+
11
+ --tls-table-row-hover-bg: var(--color-surface-container);
12
+ --tls-table-stripe-background: var(--color-surface-container-low);
13
+
14
+ --tls-table-cell-padding-x: var(--spacing-4);
15
+ --tls-table-cell-padding-y: var(--spacing-3);
16
+
17
+ --tls-table-font-size: var(--font-body-medium-size);
18
+ --tls-table-font-weight: var(--font-body-medium-weight);
19
+ --tls-table-line-height: var(--font-body-medium-line-height);
20
+ --tls-table-letter-spacing: var(--font-body-medium-letter-spacing);
21
+
22
+ --tls-table-radius: var(--radius-md);
23
+
24
+ width: 100%;
25
+
26
+ border-collapse: collapse;
27
+ border-radius: var(--tls-table-radius);
28
+ overflow: hidden;
29
+
30
+ font-size: var(--tls-table-font-size);
31
+ font-weight: var(--tls-table-font-weight);
32
+ line-height: var(--tls-table-line-height);
33
+ letter-spacing: var(--tls-table-letter-spacing);
34
+ color: var(--tls-table-color);
35
+
36
+ &__header-row {
37
+ background: var(--tls-table-header-background);
38
+ }
39
+
40
+ &--hide-header &__header-row {
41
+ display: none;
42
+ }
43
+
44
+ &--striped &__row:nth-child(even) &__cell {
45
+ background-color: var(--tls-table-stripe-background);
46
+ }
47
+
48
+ &__header-cell {
49
+ padding: var(--tls-table-cell-padding-y) var(--tls-table-cell-padding-x);
50
+
51
+ color: var(--tls-table-header-color);
52
+
53
+ border-bottom: 1px solid var(--tls-table-border-color);
54
+
55
+ text-align: start;
56
+ font-size: var(--font-label-small-size);
57
+ font-weight: var(--tls-table-header-weight);
58
+ letter-spacing: var(--font-label-small-letter-spacing);
59
+ white-space: nowrap;
60
+ }
61
+
62
+ &__row {
63
+ transition: background var(--motion-fast) var(--motion-ease-in-out);
64
+
65
+ &:not(:last-child) {
66
+ border-bottom: 1px solid var(--tls-table-border-color);
67
+ }
68
+
69
+ &:hover {
70
+ background: var(--tls-table-row-hover-bg);
71
+ }
72
+ }
73
+
74
+ &__cell {
75
+ padding: var(--tls-table-cell-padding-y) var(--tls-table-cell-padding-x);
76
+ background-color: var(--tls-table-background);
77
+ }
78
+ }
@@ -0,0 +1,85 @@
1
+ @use 'mixins' as picker-mixins;
2
+ @use '../../mixins' as mixins;
3
+
4
+ .tls-calendar {
5
+ display: block;
6
+ width: fit-content;
7
+
8
+ &__header {
9
+ @include picker-mixins.header;
10
+ }
11
+
12
+ &__header-button {
13
+ @include picker-mixins.header-button;
14
+ }
15
+
16
+ &__nav {
17
+ @include picker-mixins.nav;
18
+ }
19
+
20
+ &__grid {
21
+ display: grid;
22
+ grid-template-columns: repeat(7, var(--spacing-9));
23
+ gap: 2px;
24
+ }
25
+
26
+ &__weekday {
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+
31
+ height: var(--spacing-9);
32
+
33
+ font-size: var(--font-label-medium-size);
34
+ font-weight: var(--font-weight-medium);
35
+ color: var(--color-on-surface-variant);
36
+ }
37
+
38
+ &__day {
39
+ width: var(--spacing-9);
40
+ height: var(--spacing-9);
41
+
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+
46
+ font-size: var(--font-label-large-size);
47
+
48
+ border: none;
49
+ border-radius: 50%;
50
+
51
+ background: transparent;
52
+ color: var(--color-on-surface);
53
+
54
+ cursor: pointer;
55
+ transition: background-color var(--motion-fast) var(--motion-ease-in-out);
56
+
57
+ &:hover {
58
+ background-color: var(--color-surface-container-high);
59
+ }
60
+
61
+ &:focus-visible {
62
+ @include mixins.focus-ring;
63
+ }
64
+
65
+ &--outside {
66
+ color: var(--color-on-surface-variant);
67
+ opacity: 0.4;
68
+ }
69
+
70
+ &--today {
71
+ color: var(--color-primary);
72
+ font-weight: var(--font-weight-semibold);
73
+ }
74
+
75
+ &--selected {
76
+ background-color: var(--color-primary);
77
+ color: var(--color-on-primary);
78
+
79
+ &:hover {
80
+ background-color: var(--color-primary);
81
+ filter: brightness(0.9);
82
+ }
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,63 @@
1
+ .tls-date-time-picker {
2
+ --tls-date-time-picker-width: 200px;
3
+
4
+ display: inline-block;
5
+
6
+ &__panel {
7
+ padding: var(--spacing-3);
8
+ background-color: var(--color-surface-container-lowest);
9
+ border: 1px solid var(--color-outline-variant);
10
+ border-radius: var(--radius-lg);
11
+ box-shadow: 0 2px 8px rgba(var(--color-shadow), 0.12);
12
+
13
+ &--disabled {
14
+ opacity: 0.5;
15
+ pointer-events: none;
16
+ }
17
+
18
+ &--readonly {
19
+ pointer-events: none;
20
+ }
21
+
22
+ &--invalid {
23
+ border-color: var(--color-danger);
24
+ }
25
+ }
26
+
27
+ &.tls-form-control {
28
+ --tls-form-control-width: var(--tls-date-time-picker-width);
29
+
30
+ display: inline-flex;
31
+ align-items: stretch;
32
+ padding-inline: 0;
33
+
34
+ cursor: pointer;
35
+
36
+ &.tls-form-control--disabled {
37
+ cursor: not-allowed;
38
+ }
39
+
40
+ &:focus-within {
41
+ border: var(--tls-form-control-border-width) solid var(--color-primary);
42
+ box-shadow: 0 0 3px -1px var(--color-primary);
43
+ }
44
+ }
45
+
46
+ &__trigger {
47
+ flex: 1;
48
+
49
+ display: flex;
50
+ align-items: center;
51
+
52
+ padding-inline: var(--tls-form-control-padding-inline);
53
+
54
+ appearance: none;
55
+ outline: none;
56
+ border: none;
57
+ background: transparent;
58
+ color: inherit;
59
+ font: inherit;
60
+
61
+ cursor: inherit;
62
+ }
63
+ }
@@ -0,0 +1,5 @@
1
+ @forward 'calendar';
2
+ @forward 'date-time-picker';
3
+ @forward 'month-picker';
4
+ @forward 'time-picker';
5
+ @forward 'year-picker';
@@ -0,0 +1,108 @@
1
+ @use '../../mixins' as mixins;
2
+
3
+ @mixin header {
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: space-between;
7
+ margin-bottom: var(--spacing-2);
8
+ }
9
+
10
+ @mixin cell {
11
+ display: flex;
12
+ justify-content: center;
13
+ align-items: center;
14
+
15
+ font-size: var(--font-label-large-size);
16
+
17
+ border-radius: var(--radius-md);
18
+
19
+ color: var(--color-on-surface);
20
+
21
+ cursor: pointer;
22
+ transition: background-color var(--motion-fast) var(--motion-ease-in-out);
23
+
24
+ &:hover {
25
+ background-color: var(--color-surface-container-high);
26
+ }
27
+
28
+ &:focus-visible {
29
+ @include mixins.focus-ring;
30
+ }
31
+
32
+ &--current {
33
+ color: var(--color-primary);
34
+ font-weight: var(--font-weight-medium);
35
+ }
36
+
37
+ &--selected {
38
+ background-color: var(--color-primary);
39
+ color: var(--color-on-primary);
40
+
41
+ &:hover {
42
+ background-color: var(--color-primary);
43
+ filter: brightness(0.9);
44
+ }
45
+ }
46
+ }
47
+
48
+ @mixin header-button {
49
+ align-self: stretch;
50
+
51
+ flex-grow: 1;
52
+ display: flex;
53
+ align-items: center;
54
+ justify-content: center;
55
+
56
+ font-size: var(--font-label-large-size);
57
+ font-weight: var(--font-weight-medium);
58
+ color: var(--color-on-surface);
59
+
60
+ border: none;
61
+ border-radius: var(--radius-sm);
62
+
63
+ background: transparent;
64
+
65
+ cursor: pointer;
66
+
67
+ transition: background-color var(--motion-fast) var(--motion-ease-in-out);
68
+
69
+ &:hover {
70
+ background-color: var(--color-surface-container-high);
71
+ }
72
+
73
+ &:focus-visible {
74
+ @include mixins.focus-ring;
75
+ }
76
+ }
77
+
78
+ @mixin nav {
79
+ width: var(--spacing-7);
80
+ height: var(--spacing-7);
81
+
82
+ display: flex;
83
+ align-items: center;
84
+ justify-content: center;
85
+
86
+ border: none;
87
+ border-radius: var(--radius-sm);
88
+
89
+ background: transparent;
90
+ color: var(--color-on-surface-variant);
91
+
92
+ cursor: pointer;
93
+
94
+ transition: background-color var(--motion-fast) var(--motion-ease-in-out);
95
+
96
+ svg {
97
+ width: 8px;
98
+ height: 14px;
99
+ }
100
+
101
+ &:hover {
102
+ background-color: var(--color-surface-container-high);
103
+ }
104
+
105
+ &:focus-visible {
106
+ @include mixins.focus-ring;
107
+ }
108
+ }
@@ -0,0 +1,32 @@
1
+ @use 'mixins' as picker-mixins;
2
+
3
+ .tls-month-picker {
4
+ --tls-month-picker-cell-height: var(--spacing-10);
5
+
6
+ display: block;
7
+ width: fit-content;
8
+
9
+ &__header {
10
+ @include picker-mixins.header;
11
+ }
12
+
13
+ &__header-button {
14
+ @include picker-mixins.header-button;
15
+ }
16
+
17
+ &__nav {
18
+ @include picker-mixins.nav;
19
+ }
20
+
21
+ &__grid {
22
+ display: grid;
23
+ grid-template-columns: repeat(4, var(--spacing-15));
24
+ gap: var(--spacing-1);
25
+ }
26
+
27
+ &__cell {
28
+ height: var(--tls-month-picker-cell-height);
29
+
30
+ @include picker-mixins.cell;
31
+ }
32
+ }
@@ -0,0 +1,61 @@
1
+ @use '../../mixins' as mixins;
2
+
3
+ .tls-time-picker {
4
+ display: flex;
5
+ justify-content: center;
6
+ align-items: center;
7
+ gap: var(--spacing-1);
8
+
9
+ &__column {
10
+ display: flex;
11
+ flex-direction: column;
12
+ align-items: center;
13
+ gap: var(--spacing-1);
14
+ }
15
+
16
+ &__value {
17
+ font-size: var(--font-title-medium-size);
18
+ font-weight: var(--font-weight-medium);
19
+ color: var(--color-on-surface);
20
+ min-width: var(--spacing-9);
21
+ text-align: center;
22
+ line-height: 1;
23
+ padding: var(--spacing-1) 0;
24
+ }
25
+
26
+ &__separator {
27
+ font-size: var(--font-title-medium-size);
28
+ font-weight: var(--font-weight-medium);
29
+ color: var(--color-on-surface-variant);
30
+ align-self: center;
31
+ padding-bottom: var(--spacing-2);
32
+ }
33
+
34
+ &__arrow {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ width: var(--spacing-7);
39
+ height: var(--spacing-7);
40
+ border: none;
41
+ background: transparent;
42
+ border-radius: 50%;
43
+ cursor: pointer;
44
+ color: var(--color-on-surface-variant);
45
+ transition: background-color var(--motion-fast) var(--motion-ease-in-out);
46
+
47
+ svg {
48
+ width: 14px;
49
+ height: 8px;
50
+ }
51
+
52
+ &:hover {
53
+ background-color: var(--color-surface-container-high);
54
+ color: var(--color-on-surface);
55
+ }
56
+
57
+ &:focus-visible {
58
+ @include mixins.focus-ring;
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,34 @@
1
+ @use 'mixins' as picker-mixins;
2
+
3
+ .tls-year-picker {
4
+ --tls-year-picker-cell-height: var(--spacing-10);
5
+
6
+ display: block;
7
+ width: fit-content;
8
+
9
+ &__header {
10
+ @include picker-mixins.header;
11
+ }
12
+
13
+ &__range {
14
+ font-size: var(--font-label-large-size);
15
+ font-weight: var(--font-weight-medium);
16
+ color: var(--color-on-surface);
17
+ }
18
+
19
+ &__nav {
20
+ @include picker-mixins.nav;
21
+ }
22
+
23
+ &__grid {
24
+ display: grid;
25
+ grid-template-columns: repeat(4, var(--spacing-15));
26
+ gap: var(--spacing-1);
27
+ }
28
+
29
+ &__cell {
30
+ height: var(--tls-year-picker-cell-height);
31
+
32
+ @include picker-mixins.cell;
33
+ }
34
+ }
@@ -0,0 +1,29 @@
1
+ .tls-dialog {
2
+ &.tls-dialog--sm {
3
+ --tls-dialog-width: 400px;
4
+ }
5
+
6
+ &.tls-dialog--md {
7
+ --tls-dialog-width: 560px;
8
+ }
9
+
10
+ &.tls-dialog--lg {
11
+ --tls-dialog-width: 720px;
12
+ }
13
+
14
+ &.tls-dialog--xl {
15
+ --tls-dialog-width: 920px;
16
+ }
17
+
18
+ &.tls-dialog--wide {
19
+ --tls-dialog-width: calc(100svw - var(--spacing-12));
20
+ max-height: calc(100dvh - var(--spacing-12));
21
+ }
22
+
23
+ &.tls-dialog--full {
24
+ --tls-dialog-width: 100svw;
25
+ --tls-dialog-border-radius: 0;
26
+ height: 100dvh;
27
+ max-height: 100dvh;
28
+ }
29
+ }
@@ -0,0 +1,85 @@
1
+ .tls-dialog-backdrop {
2
+ --tls-dialog-backdrop: rgb(0 0 0 / 0.4);
3
+
4
+ background-color: var(--tls-dialog-backdrop);
5
+ }
6
+
7
+ .tls-dialog {
8
+ --tls-dialog-background: var(--color-surface-container-lowest);
9
+ --tls-dialog-color: var(--color-on-surface);
10
+ --tls-dialog-border-radius: var(--radius-xl);
11
+ --tls-dialog-shadow: var(--shadow-lg);
12
+ --tls-dialog-padding: var(--spacing-6);
13
+ --tls-dialog-close-size: 16px;
14
+ --tls-dialog-close-padding: var(--spacing-4);
15
+
16
+ position: relative;
17
+
18
+ width: var(--tls-dialog-width);
19
+
20
+ display: flex;
21
+ flex-direction: column;
22
+
23
+ pointer-events: auto;
24
+
25
+ border-radius: var(--tls-dialog-border-radius);
26
+ background-color: var(--tls-dialog-background);
27
+ color: var(--tls-dialog-color);
28
+ box-shadow: var(--tls-dialog-shadow);
29
+
30
+ &__close {
31
+ position: absolute;
32
+ top: var(--tls-dialog-close-padding);
33
+ right: var(--tls-dialog-close-padding);
34
+ z-index: 1;
35
+
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+
40
+ width: var(--tls-dialog-close-size);
41
+ height: var(--tls-dialog-close-size);
42
+
43
+ color: var(--color-outline);
44
+ background: transparent;
45
+ border: none;
46
+ cursor: pointer;
47
+
48
+ transition: color var(--motion-fast) var(--motion-ease-in-out);
49
+
50
+ &:hover {
51
+ color: var(--color-on-surface);
52
+ }
53
+
54
+ svg {
55
+ width: 100%;
56
+ height: 100%;
57
+ }
58
+ }
59
+
60
+ &__header {
61
+ padding: var(--tls-dialog-padding) var(--tls-dialog-padding) 0;
62
+ }
63
+
64
+ &__title {
65
+ font-size: var(--font-title-large-size);
66
+ font-weight: var(--font-weight-medium);
67
+ line-height: var(--font-title-large-line-height);
68
+ color: var(--color-on-surface);
69
+ }
70
+
71
+ &__body {
72
+ flex: 1;
73
+ padding: var(--spacing-4) var(--tls-dialog-padding);
74
+ overflow-y: auto;
75
+ }
76
+
77
+ &__footer {
78
+ padding: 0 var(--tls-dialog-padding) var(--tls-dialog-padding);
79
+
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: flex-end;
83
+ gap: var(--spacing-3);
84
+ }
85
+ }
@@ -0,0 +1,2 @@
1
+ @forward 'dialog';
2
+ @forward 'dialog-size';
@@ -51,7 +51,8 @@
51
51
 
52
52
  color: var(--color-danger);
53
53
 
54
- .tls-form-control::placeholder {
54
+ .tls-form-control::placeholder,
55
+ .tls-form-control__placeholder {
55
56
  color: var(--color-danger);
56
57
  }
57
58
  }
@@ -4,7 +4,7 @@
4
4
  --tls-form-control-border-color: var(--color-outline-variant);
5
5
 
6
6
  color: var(--color-on-surface);
7
- background-color: var(--color-surface);
7
+ background-color: var(--color-surface-container-lowest);
8
8
 
9
9
  border-radius: var(--radius-md);
10
10
  border: var(--tls-form-control-border-width) var(--tls-form-control-border-style)
@@ -20,10 +20,16 @@
20
20
  }
21
21
 
22
22
  &:focus {
23
- border: 1px solid var(--color-primary);
23
+ outline: none;
24
+ border: var(--tls-form-control-border-width) solid var(--color-primary);
24
25
  box-shadow: 0 0 3px -1px var(--color-primary);
25
26
  }
26
27
 
28
+ &::placeholder,
29
+ .tls-form-control__placeholder {
30
+ color: var(--color-outline);
31
+ }
32
+
27
33
  // Form control
28
34
  &.tls-form-control--disabled {
29
35
  background-color: var(--color-surface-variant);
@@ -38,7 +44,8 @@
38
44
 
39
45
  color: var(--color-danger);
40
46
 
41
- &::placeholder {
47
+ &::placeholder,
48
+ .tls-form-control__placeholder {
42
49
  color: var(--color-danger);
43
50
  }
44
51
  }
@@ -1,7 +1,11 @@
1
1
  @forward 'alert';
2
2
  @forward 'button';
3
3
  @forward 'chart';
4
+ @forward 'date-time-picker';
5
+ @forward 'dialog';
4
6
  @forward 'loader';
7
+ @forward 'pagination';
8
+ @forward 'select';
5
9
  @forward 'form';
6
10
  @forward 'stepper';
7
11
  @forward 'switch';
@@ -11,6 +15,9 @@
11
15
  @forward 'checkbox';
12
16
  @forward 'divider';
13
17
  @forward 'icon';
18
+ @forward 'password';
14
19
  @forward 'pin-input';
20
+ @forward 'popover';
15
21
  @forward 'radio-button';
16
22
  @forward 'skeleton';
23
+ @forward 'table';
@@ -0,0 +1,2 @@
1
+ @forward 'pagination';
2
+ @forward 'pagination-size';
@@ -0,0 +1,22 @@
1
+ .tls-pagination {
2
+ &--sm {
3
+ --tls-pagination-item-size: var(--control-height-sm);
4
+ --tls-pagination-button-height: var(--control-height-sm);
5
+ --tls-pagination-button-padding-inline: var(--spacing-3);
6
+ --tls-pagination-button-icon-size: 14px;
7
+ }
8
+
9
+ &--md {
10
+ --tls-pagination-item-size: var(--control-height-md);
11
+ --tls-pagination-button-height: var(--control-height-md);
12
+ --tls-pagination-button-padding-inline: var(--spacing-4);
13
+ --tls-pagination-button-icon-size: 16px;
14
+ }
15
+
16
+ &--lg {
17
+ --tls-pagination-item-size: var(--control-height-lg);
18
+ --tls-pagination-button-height: var(--control-height-lg);
19
+ --tls-pagination-button-padding-inline: var(--spacing-5);
20
+ --tls-pagination-button-icon-size: 18px;
21
+ }
22
+ }
@@ -0,0 +1,79 @@
1
+ .tls-pagination {
2
+ --tls-pagination-gap: 16px;
3
+ --tls-pagination-color: var(--color-secondary);
4
+ --tls-pagination-radius: 4px;
5
+ --tls-pagination-hover-outline: 1px solid var(--color-lines);
6
+
7
+ --tls-pagination-item-border-color: var(--color-outline-variant);
8
+
9
+ --tls-pagination-active-color: var(--color-on-primary);
10
+ --tls-pagination-active-background: var(--color-primary);
11
+
12
+ display: flex;
13
+ align-items: center;
14
+
15
+ &__list {
16
+ display: flex;
17
+ gap: var(--tls-pagination-gap);
18
+ }
19
+
20
+ &__button {
21
+ height: var(--tls-pagination-button-height);
22
+ padding-inline: var(--tls-pagination-button-padding-inline);
23
+
24
+ display: flex;
25
+ justify-content: center;
26
+ align-items: center;
27
+
28
+ color: var(--tls-pagination-color);
29
+
30
+ border-radius: var(--tls-pagination-radius);
31
+
32
+ cursor: pointer;
33
+
34
+ &:hover {
35
+ outline: var(--tls-pagination-hover-outline);
36
+ }
37
+
38
+ &-icon {
39
+ width: var(--tls-pagination-button-icon-size);
40
+ height: var(--tls-pagination-button-icon-size);
41
+ }
42
+ }
43
+
44
+ &__gap {
45
+ width: var(--tls-pagination-item-size);
46
+ height: var(--tls-pagination-item-size);
47
+
48
+ display: flex;
49
+ justify-content: center;
50
+ align-items: center;
51
+
52
+ color: var(--tls-pagination-color);
53
+ }
54
+
55
+ &__item-button {
56
+ width: var(--tls-pagination-item-size);
57
+ height: var(--tls-pagination-item-size);
58
+
59
+ display: flex;
60
+ justify-content: center;
61
+ align-items: center;
62
+
63
+ color: var(--tls-pagination-color);
64
+
65
+ border: 1px solid var(--tls-pagination-item-border-color);
66
+ border-radius: var(--tls-pagination-radius);
67
+
68
+ cursor: pointer;
69
+
70
+ &:hover {
71
+ outline: var(--tls-pagination-hover-outline);
72
+ }
73
+
74
+ &--active {
75
+ color: var(--tls-pagination-active-color);
76
+ background-color: var(--tls-pagination-active-background);
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,3 @@
1
+ @forward 'select';
2
+ @forward 'select-panel';
3
+ @forward 'select-size';
@@ -0,0 +1,68 @@
1
+ .tls-select__panel {
2
+ --tls-select-panel-max-height: 240px;
3
+ --tls-select-panel-padding-block: var(--spacing-1);
4
+ --tls-select-panel-background: var(--color-surface-container-lowest);
5
+ --tls-select-panel-border-radius: var(--radius-md);
6
+ --tls-select-panel-shadow: var(--shadow-sm);
7
+
8
+ width: 100%;
9
+ max-height: var(--tls-select-panel-max-height);
10
+
11
+ margin: 0;
12
+ padding: var(--tls-select-panel-padding-block) 0;
13
+
14
+ background-color: var(--tls-select-panel-background);
15
+ border-radius: var(--tls-select-panel-border-radius);
16
+ box-shadow: var(--tls-select-panel-shadow);
17
+
18
+ overflow-y: auto;
19
+ list-style: none;
20
+ }
21
+
22
+ .tls-select__option {
23
+ --tls-select-option-color: var(--color-on-surface);
24
+ --tls-select-option-background: transparent;
25
+ --tls-select-option-padding-block: var(--spacing-2);
26
+ --tls-select-option-padding-inline: var(--spacing-3);
27
+
28
+ &.tls-select__option--active {
29
+ --tls-select-option-background: var(--color-surface-variant);
30
+ }
31
+
32
+ &.tls-select__option--selected {
33
+ --tls-select-option-color: var(--color-primary);
34
+ }
35
+
36
+ &.tls-select__option--disabled .tls-select__option-button {
37
+ opacity: 0.4;
38
+ cursor: not-allowed;
39
+ }
40
+
41
+ .tls-select__option-button {
42
+ width: 100%;
43
+ padding-block: var(--tls-select-option-padding-block);
44
+ padding-inline: var(--tls-select-option-padding-inline);
45
+
46
+ display: flex;
47
+ align-items: center;
48
+
49
+ appearance: none;
50
+ cursor: pointer;
51
+ text-align: left;
52
+
53
+ color: var(--tls-select-option-color);
54
+ background: var(--tls-select-option-background);
55
+ border: none;
56
+
57
+ font-size: var(--font-body-medium-size);
58
+ font-weight: var(--font-body-medium-weight);
59
+ line-height: var(--font-body-medium-line-height);
60
+ letter-spacing: var(--font-body-medium-letter-spacing);
61
+
62
+ transition: background-color var(--motion-fast) var(--motion-ease-in-out);
63
+
64
+ &:focus-visible {
65
+ outline: none;
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,16 @@
1
+ .tls-select {
2
+ &.tls-form-control--sm {
3
+ --tls-select-icon-size: 0.625rem;
4
+ --tls-select-clear-size: 0.625rem;
5
+ }
6
+
7
+ &.tls-form-control--md {
8
+ --tls-select-icon-size: 0.75rem;
9
+ --tls-select-clear-size: 0.75rem;
10
+ }
11
+
12
+ &.tls-form-control--lg {
13
+ --tls-select-icon-size: 0.875rem;
14
+ --tls-select-clear-size: 0.875rem;
15
+ }
16
+ }
@@ -0,0 +1,94 @@
1
+ .tls-select {
2
+ --tls-select-width: 200px;
3
+ --tls-select-gap: var(--spacing-2);
4
+
5
+ position: relative;
6
+ display: inline-block;
7
+
8
+ &.tls-form-control {
9
+ --tls-form-control-width: var(--tls-select-width);
10
+
11
+ display: inline-flex;
12
+ align-items: stretch;
13
+ padding-inline: 0;
14
+
15
+ cursor: pointer;
16
+
17
+ &.tls-form-control--fluid {
18
+ --tls-form-control-width: 100%;
19
+ }
20
+
21
+ &.tls-form-control--disabled {
22
+ cursor: not-allowed;
23
+ }
24
+
25
+ &:focus-within {
26
+ border: var(--tls-form-control-border-width) solid var(--color-primary);
27
+ box-shadow: 0 0 3px -1px var(--color-primary);
28
+ }
29
+
30
+ &.tls-select--open {
31
+ .tls-select__chevron {
32
+ transform: rotate(180deg);
33
+ }
34
+ }
35
+
36
+ .tls-select__trigger {
37
+ flex: 1;
38
+ min-width: 0;
39
+
40
+ display: flex;
41
+ align-items: center;
42
+ gap: var(--tls-select-gap);
43
+
44
+ padding-inline: var(--tls-form-control-padding-inline);
45
+
46
+ appearance: none;
47
+ outline: none;
48
+
49
+ .tls-select__value {
50
+ flex: 1;
51
+
52
+ overflow: hidden;
53
+ white-space: nowrap;
54
+ text-overflow: ellipsis;
55
+ }
56
+
57
+ .tls-select__icon {
58
+ width: var(--tls-select-icon-size);
59
+ height: var(--tls-select-icon-size);
60
+
61
+ flex-shrink: 0;
62
+ display: flex;
63
+ align-items: center;
64
+
65
+ .tls-select__chevron {
66
+ transition: transform var(--motion-fast) var(--motion-ease-in-out);
67
+ }
68
+ }
69
+ }
70
+
71
+ // Clear button
72
+ .tls-select__clear {
73
+ position: absolute;
74
+ top: 50%;
75
+ right: calc(var(--tls-form-control-padding-inline) * 2 + var(--tls-select-icon-size));
76
+
77
+ display: flex;
78
+ align-items: center;
79
+
80
+ color: var(--color-outline);
81
+
82
+ transform: translateY(-50%);
83
+
84
+ &:hover {
85
+ color: var(--color-on-surface);
86
+ }
87
+
88
+ .tls-select__clear-icon {
89
+ width: var(--tls-select-clear-size);
90
+ height: var(--tls-select-clear-size);
91
+ }
92
+ }
93
+ }
94
+ }