@seamapi/react 1.48.1 → 1.50.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 (90) hide show
  1. package/README.md +1 -1
  2. package/dist/elements.js +3285 -3280
  3. package/dist/elements.js.map +1 -1
  4. package/dist/index.css +336 -2
  5. package/dist/index.css.map +1 -1
  6. package/dist/index.min.css +1 -1
  7. package/dist/index.min.css.map +1 -1
  8. package/lib/icons/ChevronWide.d.ts +2 -0
  9. package/lib/icons/ChevronWide.js +5 -0
  10. package/lib/icons/ChevronWide.js.map +1 -0
  11. package/lib/icons/Copy.js +2 -4
  12. package/lib/icons/Copy.js.map +1 -1
  13. package/lib/icons/Fan.d.ts +2 -0
  14. package/lib/icons/Fan.js +7 -0
  15. package/lib/icons/Fan.js.map +1 -0
  16. package/lib/icons/Off.d.ts +2 -0
  17. package/lib/icons/Off.js +7 -0
  18. package/lib/icons/Off.js.map +1 -0
  19. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js +9 -2
  20. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js.map +1 -1
  21. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleCard.d.ts +2 -1
  22. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleCard.js +4 -4
  23. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleCard.js.map +1 -1
  24. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.d.ts +7 -0
  25. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js +40 -0
  26. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js.map +1 -0
  27. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.d.ts +2 -1
  28. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.js +7 -5
  29. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.js.map +1 -1
  30. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.d.ts +3 -1
  31. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js +20 -3
  32. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js.map +1 -1
  33. package/lib/seam/connected-accounts/use-connected-account.d.ts +4 -0
  34. package/lib/seam/connected-accounts/use-connected-account.js +17 -0
  35. package/lib/seam/connected-accounts/use-connected-account.js.map +1 -0
  36. package/lib/seam/index.d.ts +2 -0
  37. package/lib/seam/index.js +2 -0
  38. package/lib/seam/index.js.map +1 -1
  39. package/lib/ui/layout/AccordionRow.d.ts +7 -0
  40. package/lib/ui/layout/AccordionRow.js +8 -0
  41. package/lib/ui/layout/AccordionRow.js.map +1 -0
  42. package/lib/ui/layout/DetailRow.d.ts +7 -0
  43. package/lib/ui/layout/DetailRow.js +5 -0
  44. package/lib/ui/layout/DetailRow.js.map +1 -0
  45. package/lib/ui/layout/DetailSection.d.ts +7 -0
  46. package/lib/ui/layout/DetailSection.js +6 -0
  47. package/lib/ui/layout/DetailSection.js.map +1 -0
  48. package/lib/ui/layout/DetailSectionGroup.d.ts +2 -0
  49. package/lib/ui/layout/DetailSectionGroup.js +5 -0
  50. package/lib/ui/layout/DetailSectionGroup.js.map +1 -0
  51. package/lib/ui/thermostat/ClimateSettingStatus.d.ts +1 -1
  52. package/lib/ui/thermostat/ClimateSettingStatus.js +20 -24
  53. package/lib/ui/thermostat/ClimateSettingStatus.js.map +1 -1
  54. package/lib/ui/thermostat/Temperature.d.ts +8 -0
  55. package/lib/ui/thermostat/Temperature.js +11 -0
  56. package/lib/ui/thermostat/Temperature.js.map +1 -0
  57. package/lib/ui/thermostat/ThermostatCard.d.ts +7 -0
  58. package/lib/ui/thermostat/ThermostatCard.js +46 -0
  59. package/lib/ui/thermostat/ThermostatCard.js.map +1 -0
  60. package/lib/version.d.ts +1 -1
  61. package/lib/version.js +1 -1
  62. package/package.json +3 -3
  63. package/src/lib/icons/ChevronWide.tsx +21 -0
  64. package/src/lib/icons/Copy.tsx +6 -21
  65. package/src/lib/icons/Fan.tsx +36 -0
  66. package/src/lib/icons/Off.tsx +36 -0
  67. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.tsx +23 -2
  68. package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleCard.tsx +9 -2
  69. package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.element.ts +13 -0
  70. package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.tsx +121 -0
  71. package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.tsx +18 -6
  72. package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.element.ts +2 -0
  73. package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.tsx +37 -2
  74. package/src/lib/seam/connected-accounts/use-connected-account.ts +34 -0
  75. package/src/lib/seam/index.ts +2 -0
  76. package/src/lib/ui/layout/AccordionRow.tsx +36 -0
  77. package/src/lib/ui/layout/DetailRow.tsx +22 -0
  78. package/src/lib/ui/layout/DetailSection.tsx +25 -0
  79. package/src/lib/ui/layout/DetailSectionGroup.tsx +7 -0
  80. package/src/lib/ui/thermostat/ClimateSettingStatus.tsx +34 -30
  81. package/src/lib/ui/thermostat/Temperature.tsx +26 -0
  82. package/src/lib/ui/thermostat/ThermostatCard.tsx +160 -0
  83. package/src/lib/version.ts +1 -1
  84. package/src/styles/_access-code-details.scss +42 -1
  85. package/src/styles/_climate-setting-schedule-details.scss +44 -0
  86. package/src/styles/_layout.scss +161 -0
  87. package/src/styles/_main.scss +2 -0
  88. package/src/styles/_seam-table.scss +8 -0
  89. package/src/styles/_thermostat.scss +164 -1
  90. package/src/styles/_tooltip.scss +1 -0
@@ -0,0 +1,26 @@
1
+ interface TemperatureProps {
2
+ fahrenheit: number
3
+ celsius: number
4
+ unit?: 'fahrenheit' | 'celsius'
5
+ }
6
+
7
+ export function Temperature({
8
+ fahrenheit,
9
+ celsius,
10
+ unit = 'fahrenheit',
11
+ }: TemperatureProps): JSX.Element {
12
+ const temperature = unit === 'fahrenheit' ? fahrenheit : celsius
13
+ const degree = unit === 'fahrenheit' ? t.degreeFahrenheit : t.degreeCelsius
14
+
15
+ return (
16
+ <span>
17
+ {Math.trunc(temperature)}
18
+ {degree}
19
+ </span>
20
+ )
21
+ }
22
+
23
+ const t = {
24
+ degreeFahrenheit: '°F',
25
+ degreeCelsius: '°C',
26
+ }
@@ -0,0 +1,160 @@
1
+ import classNames from 'classnames'
2
+ import { useState } from 'react'
3
+ import type { ThermostatDevice, ThermostatDeviceProperties } from 'seamapi'
4
+
5
+ import { FanIcon } from 'lib/icons/Fan.js'
6
+ import { OffIcon } from 'lib/icons/Off.js'
7
+ import { DeviceImage } from 'lib/ui/device/DeviceImage.js'
8
+ import { ClimateSettingStatus } from 'lib/ui/thermostat/ClimateSettingStatus.js'
9
+ import { Temperature } from 'lib/ui/thermostat/Temperature.js'
10
+
11
+ interface ThermostatCardProps {
12
+ device: ThermostatDevice
13
+ }
14
+
15
+ export function ThermostatCard({ device }: ThermostatCardProps): JSX.Element {
16
+ return (
17
+ <div className='seam-thermostat-card'>
18
+ <Content device={device} />
19
+ </div>
20
+ )
21
+ }
22
+
23
+ function Content(props: { device: ThermostatDevice }): JSX.Element | null {
24
+ const { device } = props
25
+
26
+ const [temperatureUnit, setTemperatureUnit] = useState<
27
+ 'fahrenheit' | 'celsius'
28
+ >('fahrenheit')
29
+
30
+ const toggleTemperatureUnit = (): void => {
31
+ setTemperatureUnit(
32
+ temperatureUnit === 'fahrenheit' ? 'celsius' : 'fahrenheit'
33
+ )
34
+ }
35
+
36
+ const {
37
+ temperature_fahrenheit: temperatureFahrenheit,
38
+ temperature_celsius: temperatureCelsius,
39
+ current_climate_setting: currentClimateSetting,
40
+ is_fan_running: isFanRunning,
41
+ relative_humidity: relativeHumidity,
42
+ } = device.properties
43
+
44
+ const systemStatus = getSystemStatus(device.properties)
45
+
46
+ return (
47
+ <div className='seam-thermostat-card-content'>
48
+ <div className='seam-thermostat-card-image-wrap'>
49
+ <DeviceImage device={device} />
50
+ </div>
51
+ <div className='seam-thermostat-card-details'>
52
+ <div className='seam-thermostat-heading-wrap'>
53
+ <h4 className='seam-thermostat-card-heading'>
54
+ {device.properties.name}
55
+ </h4>
56
+ <button
57
+ onClick={toggleTemperatureUnit}
58
+ className='seam-thermostat-temperature-toggle'
59
+ >
60
+ <span className='seam-thermostat-temperature-toggle-label'>
61
+ {temperatureUnit === 'fahrenheit' ? t.fahrenheit : t.celsius}
62
+ </span>
63
+ </button>
64
+ </div>
65
+
66
+ <div className='seam-thermostat-properties-wrap'>
67
+ <div className='seam-thermostat-properties'>
68
+ <div className='seam-thermostat-property-block'>
69
+ <p className='seam-thermostat-property-label'>{t.temperature}:</p>
70
+ </div>
71
+ <div className='seam-thermostat-property-block'>
72
+ <p className='seam-thermostat-property-value'>
73
+ <Temperature
74
+ fahrenheit={temperatureFahrenheit}
75
+ celsius={temperatureCelsius}
76
+ unit={temperatureUnit}
77
+ />
78
+ </p>
79
+
80
+ <p className='seam-thermostat-property-value'>|</p>
81
+ <p className='seam-thermostat-property-label'>{t.humidity}:</p>
82
+ <p className='seam-thermostat-property-value'>
83
+ {relativeHumidity * 100}%
84
+ </p>
85
+ </div>
86
+
87
+ <div className='seam-thermostat-property-block'>
88
+ <p className='seam-thermostat-property-label'>{t.setting}:</p>
89
+ </div>
90
+ <div className='seam-thermostat-property-block'>
91
+ <ClimateSettingStatus
92
+ climateSetting={currentClimateSetting}
93
+ temperatureUnit={temperatureUnit}
94
+ />
95
+ </div>
96
+
97
+ <div className='seam-thermostat-property-block'>
98
+ <p className='seam-thermostat-property-label'>{t.fanMode}:</p>
99
+ </div>
100
+ <div className='seam-thermostat-property-block seam-thermostat-property-icon-block'>
101
+ <div className='seam-thermostat-property-icon'>
102
+ {isFanRunning ? <FanIcon /> : <OffIcon />}
103
+ </div>
104
+ <p className='seam-thermostat-property-value'>
105
+ {isFanRunning ? t.auto : t.off}
106
+ </p>
107
+ </div>
108
+
109
+ <div className='seam-thermostat-property-block'>
110
+ <p className='seam-thermostat-property-label'>
111
+ {t.systemStatus}:
112
+ </p>
113
+ </div>
114
+ <div className='seam-thermostat-property-block'>
115
+ <div
116
+ className={classNames(
117
+ 'seam-thermostat-property-tag',
118
+ `seam-thermostat-property-tag-${systemStatus}`
119
+ )}
120
+ >
121
+ <p className='seam-thermostat-property-tag-label'>
122
+ {systemStatus === 'off' ? '--' : t[systemStatus]}
123
+ </p>
124
+ </div>
125
+ </div>
126
+ </div>
127
+ </div>
128
+ </div>
129
+ </div>
130
+ )
131
+ }
132
+
133
+ function getSystemStatus(
134
+ properties: ThermostatDeviceProperties
135
+ ): 'heating' | 'cooling' | 'fan' | 'off' {
136
+ const {
137
+ is_heating: isHeating,
138
+ is_cooling: isCooling,
139
+ is_fan_running: isFanRunning,
140
+ } = properties
141
+ if (isHeating) return 'heating'
142
+ if (isCooling) return 'cooling'
143
+ if (isFanRunning) return 'fan'
144
+ return 'off'
145
+ }
146
+
147
+ const t = {
148
+ fahrenheit: '˚F',
149
+ celsius: '˚C',
150
+ auto: 'Auto',
151
+ off: 'Off',
152
+ temperature: 'Temperature',
153
+ humidity: 'Humidity',
154
+ setting: 'Setting',
155
+ fanMode: 'Fan mode',
156
+ systemStatus: 'System status',
157
+ cooling: 'Cooling',
158
+ heating: 'Heating',
159
+ fan: 'Fan only',
160
+ }
@@ -1,3 +1,3 @@
1
- const seamapiReactVersion = '1.48.1'
1
+ const seamapiReactVersion = '1.50.0'
2
2
 
3
3
  export default seamapiReactVersion
@@ -33,11 +33,35 @@
33
33
  background: colors.$white;
34
34
  border: 1px solid colors.$text-gray-2;
35
35
  border-radius: 8px;
36
- padding: 10px 16px;
37
36
  font-weight: 600;
38
37
  font-size: 24px;
39
38
  line-height: 134%;
40
39
  margin-bottom: 8px;
40
+ display: flex;
41
+ justify-content: space-between;
42
+
43
+ > span {
44
+ padding: 10px 16px;
45
+ }
46
+
47
+ > .seam-icon-btn {
48
+ height: auto;
49
+ border: 0;
50
+ overflow: visible;
51
+ padding: 0;
52
+ padding: 16px 10px;
53
+ flex: 0 0 48px;
54
+ border-radius: 0 8px 8px 0;
55
+ border-left: 1px solid colors.$divider-stroke-light;
56
+
57
+ &:hover {
58
+ background: colors.$item-hover-bg;
59
+ }
60
+
61
+ svg {
62
+ scale: 0.8333;
63
+ }
64
+ }
41
65
  }
42
66
 
43
67
  .seam-duration {
@@ -105,6 +129,23 @@
105
129
  display: flex;
106
130
  flex: 1;
107
131
 
132
+ &.seam-code-id {
133
+ display: flex;
134
+ justify-content: space-between;
135
+
136
+ .seam-icon-btn {
137
+ border: 0;
138
+
139
+ &:hover {
140
+ background: transparent;
141
+ }
142
+
143
+ svg {
144
+ scale: 0.8333;
145
+ }
146
+ }
147
+ }
148
+
108
149
  .seam-times {
109
150
  display: flex;
110
151
  flex: 1;
@@ -0,0 +1,44 @@
1
+ @use './colors';
2
+
3
+ @mixin all {
4
+ .seam-climate-setting-schedule-details {
5
+ .seam-climate-setting-schedule-details-content {
6
+ margin: 0 16px;
7
+ }
8
+
9
+ .seam-climate-setting-details-value {
10
+ font-style: normal;
11
+ font-weight: 400;
12
+ line-height: 118%;
13
+ font-size: 14px;
14
+ color: colors.$text-gray-1;
15
+
16
+ &.seam-climate-setting-details-schedule-range {
17
+ display: flex;
18
+ align-items: center;
19
+ }
20
+ }
21
+
22
+ .seam-default-setting-message-container {
23
+ display: flex;
24
+ justify-content: center;
25
+ margin: 16px 0;
26
+
27
+ .seam-default-setting-message {
28
+ font-size: 14px;
29
+ font-style: normal;
30
+ font-weight: 400;
31
+ line-height: 115%;
32
+ color: colors.$text-gray-2;
33
+
34
+ .seam-default-setting-text {
35
+ color: colors.$text-gray-1;
36
+ }
37
+ }
38
+ }
39
+
40
+ .seam-creation-date {
41
+ color: colors.$text-gray-1;
42
+ }
43
+ }
44
+ }
@@ -33,6 +33,167 @@
33
33
  }
34
34
  }
35
35
 
36
+ @mixin detail-section {
37
+ .seam-detail-sections {
38
+ display: flex;
39
+ flex-direction: column;
40
+ gap: 32px;
41
+ }
42
+
43
+ .seam-detail-section {
44
+ width: 100%;
45
+ }
46
+
47
+ .seam-detail-label-wrap {
48
+ width: 100%;
49
+ display: flex;
50
+ justify-content: flex-start;
51
+ align-items: center;
52
+ flex-direction: row;
53
+ gap: 4px;
54
+ margin-bottom: 8px;
55
+ }
56
+
57
+ .seam-detail-label {
58
+ color: colors.$text-gray-1;
59
+ font-size: 16px;
60
+ font-weight: 400;
61
+ line-height: 134%;
62
+ }
63
+
64
+ .seam-detail-group {
65
+ border-radius: 8px;
66
+ border: 1px solid colors.$text-gray-3;
67
+ overflow: hidden;
68
+ }
69
+ }
70
+
71
+ @mixin detail-row-common {
72
+ .seam-detail-row,
73
+ .seam-accordion-row {
74
+ background-color: colors.$white;
75
+
76
+ &:not(:last-of-type) {
77
+ border-bottom: 1px solid colors.$divider-stroke-light;
78
+ }
79
+ }
80
+
81
+ .seam-detail-row,
82
+ .seam-accordion-row-trigger {
83
+ display: flex;
84
+ justify-content: space-between;
85
+ align-items: center;
86
+ flex-direction: row;
87
+ min-height: 64px;
88
+ padding: 8px 16px;
89
+ }
90
+
91
+ .seam-detail-row-label-wrap {
92
+ display: flex;
93
+ justify-content: center;
94
+ align-items: flex-start;
95
+ flex-direction: column;
96
+ gap: 4px;
97
+ }
98
+
99
+ .seam-row-label {
100
+ font-size: 16px;
101
+ font-weight: 600;
102
+ line-height: 118%;
103
+ }
104
+
105
+ .seam-row-sublabel {
106
+ color: colors.$text-gray-1;
107
+ font-size: 14px;
108
+ font-weight: 400;
109
+ line-height: 118%;
110
+ }
111
+ }
112
+
113
+ @mixin detail-row {
114
+ .seam-detail-row-right-area-content {
115
+ display: flex;
116
+ justify-content: center;
117
+ align-items: center;
118
+ flex-direction: row;
119
+ gap: 8px;
120
+ }
121
+ }
122
+
123
+ @mixin accordion-row {
124
+ .seam-accordion-row {
125
+ overflow: hidden;
126
+
127
+ .seam-accordion-row-trigger {
128
+ appearance: none;
129
+ width: 100%;
130
+ background-color: colors.$white;
131
+ font-size: 16px;
132
+ border: none;
133
+ box-shadow: none;
134
+ cursor: pointer;
135
+ font-family: inherit;
136
+ }
137
+
138
+ .seam-accordion-row-content {
139
+ display: flex;
140
+ justify-content: center;
141
+ align-items: flex-start;
142
+ flex-direction: column;
143
+ max-height: 0;
144
+ opacity: 0;
145
+ transition: all 0.3s ease-in-out;
146
+ }
147
+
148
+ &[aria-expanded='true'] {
149
+ .seam-accordion-row-content {
150
+ max-height: 64px;
151
+ opacity: 1;
152
+ }
153
+
154
+ .seam-accordion-icon-wrap {
155
+ transform: rotate(180deg);
156
+ }
157
+
158
+ .seam-row-trigger-right-content {
159
+ transform: scale(0.95);
160
+ opacity: 0;
161
+ }
162
+ }
163
+
164
+ .seam-accordion-row-inner-content {
165
+ height: 64px;
166
+ padding: 0 16px;
167
+ overflow: hidden;
168
+ }
169
+
170
+ .seam-row-inner-wrap {
171
+ display: flex;
172
+ justify-content: center;
173
+ align-items: center;
174
+ flex-direction: row;
175
+ gap: 16px;
176
+ }
177
+
178
+ .seam-row-trigger-right-content {
179
+ transition: 0.2s ease-in-out;
180
+ }
181
+
182
+ .seam-accordion-icon-wrap {
183
+ width: 24px;
184
+ height: 24px;
185
+ display: flex;
186
+ justify-content: center;
187
+ align-items: center;
188
+ transition: transform 0.2s ease-in-out;
189
+ }
190
+ }
191
+ }
192
+
36
193
  @mixin all {
37
194
  @include header;
195
+ @include detail-section;
196
+ @include detail-row-common;
197
+ @include detail-row;
198
+ @include accordion-row;
38
199
  }
@@ -20,6 +20,7 @@
20
20
  @use './thermostat';
21
21
  @use './tooltip';
22
22
  @use './seam-table';
23
+ @use './climate-setting-schedule-details';
23
24
  @use './switch';
24
25
 
25
26
  .seam-components {
@@ -50,4 +51,5 @@
50
51
  @include supported-device-table.all;
51
52
  @include thermostat.all;
52
53
  @include seam-table.all;
54
+ @include climate-setting-schedule-details.all;
53
55
  }
@@ -99,6 +99,14 @@
99
99
  align-items: center;
100
100
  justify-content: space-between;
101
101
  flex: 1;
102
+
103
+ svg {
104
+ scale: 0.75;
105
+
106
+ * {
107
+ fill: colors.$primary;
108
+ }
109
+ }
102
110
  }
103
111
  }
104
112
  }
@@ -304,7 +304,6 @@
304
304
  .seam-climate-setting-schedule-card {
305
305
  background: colors.$bg-a;
306
306
  border-radius: 16px;
307
- margin: 0 24px 16px;
308
307
 
309
308
  .seam-climate-setting-schedule-content {
310
309
  display: flex;
@@ -394,10 +393,174 @@
394
393
  }
395
394
  }
396
395
  }
396
+
397
+ .seam-climate-setting-schedule-device-chevron {
398
+ transform: rotate(270deg);
399
+ }
400
+ }
401
+ }
402
+
403
+ @mixin thermostat-card {
404
+ .seam-thermostat-card {
405
+ width: 100%;
406
+ background-color: colors.$bg-a;
407
+ border-radius: 16px;
408
+ display: flex;
409
+ padding: 16px;
410
+ flex-direction: column;
411
+ align-items: center;
412
+ gap: 8px;
413
+ align-self: stretch;
414
+
415
+ .seam-thermostat-card-content {
416
+ display: flex;
417
+ align-items: flex-start;
418
+ flex-direction: row;
419
+ gap: 8px;
420
+ align-self: stretch;
421
+ }
422
+
423
+ .seam-thermostat-card-image-wrap {
424
+ padding: 24px;
425
+
426
+ img {
427
+ width: 80px;
428
+ height: 80px;
429
+ object-fit: contain;
430
+ }
431
+ }
432
+
433
+ .seam-thermostat-heading-wrap {
434
+ width: 100%;
435
+ display: flex;
436
+ justify-content: space-between;
437
+ align-items: center;
438
+ flex-direction: row;
439
+ gap: 16px;
440
+ }
441
+
442
+ .seam-thermostat-card-heading {
443
+ font-size: 21px;
444
+ font-weight: 600;
445
+ line-height: 132%;
446
+ white-space: nowrap;
447
+ }
448
+
449
+ .seam-thermostat-temperature-toggle {
450
+ appearance: none;
451
+ width: 32px;
452
+ height: 22px;
453
+ box-shadow: none;
454
+ border-radius: 5px;
455
+ border: 1px solid colors.$text-gray-3;
456
+ background-color: transparent;
457
+ display: flex;
458
+ justify-content: center;
459
+ align-items: center;
460
+ flex-direction: column;
461
+ color: colors.$text-gray-1;
462
+ font-size: 12px;
463
+ font-weight: 600;
464
+ line-height: 1;
465
+ cursor: pointer;
466
+ }
467
+
468
+ .seam-thermostat-card-details {
469
+ width: 100%;
470
+ display: flex;
471
+ justify-content: flex-start;
472
+ flex-direction: column;
473
+ gap: 8px;
474
+ }
475
+
476
+ .seam-thermostat-properties-wrap {
477
+ display: flex;
478
+ }
479
+
480
+ .seam-thermostat-properties {
481
+ width: auto;
482
+ display: grid;
483
+ grid-template-columns: auto auto;
484
+ column-gap: 16px;
485
+ row-gap: 8px;
486
+ }
487
+
488
+ .seam-thermostat-property-block {
489
+ display: flex;
490
+ flex-direction: row;
491
+ gap: 8px;
492
+
493
+ &.seam-thermostat-property-icon-block {
494
+ gap: 4px;
495
+ }
496
+ }
497
+
498
+ .seam-thermostat-property-label {
499
+ color: colors.$text-gray-2;
500
+ font-size: 14px;
501
+ font-weight: 400;
502
+ line-height: 118%;
503
+ white-space: nowrap;
504
+ }
505
+
506
+ .seam-thermostat-property-value {
507
+ color: colors.$text-gray-1;
508
+ font-size: 14px;
509
+ font-weight: 400;
510
+ line-height: 118%;
511
+ white-space: nowrap;
512
+ }
513
+
514
+ .seam-thermostat-property-icon {
515
+ width: 18px;
516
+ height: 18px;
517
+ }
518
+
519
+ .seam-thermostat-property-tag {
520
+ height: 18px;
521
+ padding: 0 8px;
522
+ border-radius: 4px;
523
+ display: flex;
524
+ justify-content: center;
525
+ align-items: center;
526
+
527
+ &.seam-thermostat-property-tag-cooling {
528
+ background-color: colors.$thermo-blue;
529
+ }
530
+
531
+ &.seam-thermostat-property-tag-heating {
532
+ background-color: colors.$thermo-orange;
533
+ }
534
+
535
+ &.seam-thermostat-property-tag-fan {
536
+ border: 1px solid colors.$text-gray-2-5;
537
+ background-color: transparent;
538
+
539
+ .seam-thermostat-property-tag-label {
540
+ color: colors.$text-gray-1;
541
+ }
542
+ }
543
+
544
+ &.seam-thermostat-property-tag-off {
545
+ background-color: transparent;
546
+
547
+ .seam-thermostat-property-tag-label {
548
+ color: colors.$text-gray-1;
549
+ }
550
+ }
551
+
552
+ .seam-thermostat-property-tag-label {
553
+ color: colors.$white;
554
+ font-size: 12px;
555
+ font-weight: 400;
556
+ line-height: 1;
557
+ }
558
+ }
397
559
  }
398
560
  }
399
561
 
400
562
  @mixin all {
401
563
  @include temperature-control;
402
564
  @include climate-setting-status;
565
+ @include thermostat-card;
403
566
  }
@@ -60,6 +60,7 @@
60
60
  box-shadow:
61
61
  0 2px 16px 2px rgb(15 22 28 / 15%),
62
62
  0 0 1px 0 rgb(0 0 0 / 30%);
63
+ will-change: transform, opacity, visibility;
63
64
  transform-origin: bottom left;
64
65
  transition: 0.1s ease-in-out;
65
66
  opacity: 0;