@seamapi/react 4.0.0 → 4.2.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 (232) hide show
  1. package/README.md +2 -2
  2. package/dist/elements.js +12429 -12362
  3. package/dist/elements.js.map +1 -1
  4. package/dist/index.css +51 -12
  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/AccessCodeKey.js +1 -1
  9. package/lib/icons/AccessCodeKey.js.map +1 -1
  10. package/lib/icons/Add.js +1 -1
  11. package/lib/icons/Add.js.map +1 -1
  12. package/lib/icons/ArrowBack.js +1 -1
  13. package/lib/icons/ArrowBack.js.map +1 -1
  14. package/lib/icons/ArrowRestart.js +1 -1
  15. package/lib/icons/ArrowRestart.js.map +1 -1
  16. package/lib/icons/ArrowRight.js +1 -1
  17. package/lib/icons/ArrowRight.js.map +1 -1
  18. package/lib/icons/BatteryLevelCritical.js +1 -1
  19. package/lib/icons/BatteryLevelCritical.js.map +1 -1
  20. package/lib/icons/BatteryLevelFull.js +1 -1
  21. package/lib/icons/BatteryLevelFull.js.map +1 -1
  22. package/lib/icons/BatteryLevelHigh.js +1 -1
  23. package/lib/icons/BatteryLevelHigh.js.map +1 -1
  24. package/lib/icons/BatteryLevelLow.js +1 -1
  25. package/lib/icons/BatteryLevelLow.js.map +1 -1
  26. package/lib/icons/BatteryLevelWired.js +1 -1
  27. package/lib/icons/BatteryLevelWired.js.map +1 -1
  28. package/lib/icons/Bee.js +1 -1
  29. package/lib/icons/Bee.js.map +1 -1
  30. package/lib/icons/Check.js +1 -1
  31. package/lib/icons/Check.js.map +1 -1
  32. package/lib/icons/CheckBlack.js +1 -1
  33. package/lib/icons/CheckBlack.js.map +1 -1
  34. package/lib/icons/CheckGreen.js +1 -1
  35. package/lib/icons/CheckGreen.js.map +1 -1
  36. package/lib/icons/CheckboxBlank.js +1 -1
  37. package/lib/icons/CheckboxBlank.js.map +1 -1
  38. package/lib/icons/CheckboxFilled.js +1 -1
  39. package/lib/icons/CheckboxFilled.js.map +1 -1
  40. package/lib/icons/ChevronDown.js +1 -1
  41. package/lib/icons/ChevronDown.js.map +1 -1
  42. package/lib/icons/ChevronRight.js +1 -1
  43. package/lib/icons/ChevronRight.js.map +1 -1
  44. package/lib/icons/ChevronWide.js +1 -1
  45. package/lib/icons/ChevronWide.js.map +1 -1
  46. package/lib/icons/ClimateSettingSchedule.js +1 -1
  47. package/lib/icons/ClimateSettingSchedule.js.map +1 -1
  48. package/lib/icons/Clock.js +1 -1
  49. package/lib/icons/Clock.js.map +1 -1
  50. package/lib/icons/Close.js +1 -1
  51. package/lib/icons/Close.js.map +1 -1
  52. package/lib/icons/CloseWhite.js +1 -1
  53. package/lib/icons/CloseWhite.js.map +1 -1
  54. package/lib/icons/Copy.js +1 -1
  55. package/lib/icons/Copy.js.map +1 -1
  56. package/lib/icons/DotsEllipsisMore.js +1 -1
  57. package/lib/icons/DotsEllipsisMore.js.map +1 -1
  58. package/lib/icons/Edit.js +1 -1
  59. package/lib/icons/Edit.js.map +1 -1
  60. package/lib/icons/ExclamationCircle.js +1 -1
  61. package/lib/icons/ExclamationCircle.js.map +1 -1
  62. package/lib/icons/ExclamationCircleOutline.js +1 -1
  63. package/lib/icons/ExclamationCircleOutline.js.map +1 -1
  64. package/lib/icons/Fan.js +1 -1
  65. package/lib/icons/Fan.js.map +1 -1
  66. package/lib/icons/FanOutline.js +1 -1
  67. package/lib/icons/FanOutline.js.map +1 -1
  68. package/lib/icons/Info.js +1 -1
  69. package/lib/icons/Info.js.map +1 -1
  70. package/lib/icons/InfoBlue.js +1 -1
  71. package/lib/icons/InfoBlue.js.map +1 -1
  72. package/lib/icons/InfoDark.js +1 -1
  73. package/lib/icons/InfoDark.js.map +1 -1
  74. package/lib/icons/LockLocked.js +1 -1
  75. package/lib/icons/LockLocked.js.map +1 -1
  76. package/lib/icons/LockUnlocked.js +1 -1
  77. package/lib/icons/LockUnlocked.js.map +1 -1
  78. package/lib/icons/NoiseLevels.js +1 -1
  79. package/lib/icons/NoiseLevels.js.map +1 -1
  80. package/lib/icons/NoiseLevelsRed.js +1 -1
  81. package/lib/icons/NoiseLevelsRed.js.map +1 -1
  82. package/lib/icons/Off.js +1 -1
  83. package/lib/icons/Off.js.map +1 -1
  84. package/lib/icons/OnlineStatusAccountOffline.js +1 -1
  85. package/lib/icons/OnlineStatusAccountOffline.js.map +1 -1
  86. package/lib/icons/OnlineStatusDeviceOffline.js +1 -1
  87. package/lib/icons/OnlineStatusDeviceOffline.js.map +1 -1
  88. package/lib/icons/OnlineStatusOnline.js +1 -1
  89. package/lib/icons/OnlineStatusOnline.js.map +1 -1
  90. package/lib/icons/RadioChecked.js +1 -1
  91. package/lib/icons/RadioChecked.js.map +1 -1
  92. package/lib/icons/RadioUnchecked.js +1 -1
  93. package/lib/icons/RadioUnchecked.js.map +1 -1
  94. package/lib/icons/Seam.js +1 -1
  95. package/lib/icons/Seam.js.map +1 -1
  96. package/lib/icons/Search.js +1 -1
  97. package/lib/icons/Search.js.map +1 -1
  98. package/lib/icons/TemperatureAdd.js +1 -1
  99. package/lib/icons/TemperatureAdd.js.map +1 -1
  100. package/lib/icons/TemperatureSubtract.js +1 -1
  101. package/lib/icons/TemperatureSubtract.js.map +1 -1
  102. package/lib/icons/ThermostatCool.js +1 -1
  103. package/lib/icons/ThermostatCool.js.map +1 -1
  104. package/lib/icons/ThermostatCoolLarge.js +1 -1
  105. package/lib/icons/ThermostatCoolLarge.js.map +1 -1
  106. package/lib/icons/ThermostatHeat.js +1 -1
  107. package/lib/icons/ThermostatHeat.js.map +1 -1
  108. package/lib/icons/ThermostatHeatCool.js +1 -1
  109. package/lib/icons/ThermostatHeatCool.js.map +1 -1
  110. package/lib/icons/ThermostatHeatLarge.js +1 -1
  111. package/lib/icons/ThermostatHeatLarge.js.map +1 -1
  112. package/lib/icons/ThermostatOff.js +1 -1
  113. package/lib/icons/ThermostatOff.js.map +1 -1
  114. package/lib/icons/TriangleWarning.js +1 -1
  115. package/lib/icons/TriangleWarning.js.map +1 -1
  116. package/lib/icons/TriangleWarningOutline.js +1 -1
  117. package/lib/icons/TriangleWarningOutline.js.map +1 -1
  118. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js +1 -1
  119. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js.map +1 -1
  120. package/lib/seam/components/AccessCodeDetails/AccessCodeDevice.js +1 -1
  121. package/lib/seam/components/AccessCodeDetails/AccessCodeDevice.js.map +1 -1
  122. package/lib/seam/components/AccessCodeTable/AccessCodeTable.d.ts +1 -1
  123. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js +11 -2
  124. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js.map +1 -1
  125. package/lib/seam/components/DeviceDetails/DeviceInfo.js +1 -1
  126. package/lib/seam/components/DeviceDetails/DeviceInfo.js.map +1 -1
  127. package/lib/seam/components/DeviceDetails/LockDeviceDetails.js +3 -3
  128. package/lib/seam/components/DeviceDetails/LockDeviceDetails.js.map +1 -1
  129. package/lib/seam/locks/lock-device.js +9 -1
  130. package/lib/seam/locks/lock-device.js.map +1 -1
  131. package/lib/ui/Snackbar/Snackbar.js +1 -1
  132. package/lib/ui/Snackbar/Snackbar.js.map +1 -1
  133. package/lib/ui/device/BatteryStatusIndicator.js +4 -4
  134. package/lib/ui/device/BatteryStatusIndicator.js.map +1 -1
  135. package/lib/ui/device/LockStatus.js +3 -0
  136. package/lib/ui/device/LockStatus.js.map +1 -1
  137. package/lib/ui/device/OnlineStatus.js +3 -3
  138. package/lib/ui/device/OnlineStatus.js.map +1 -1
  139. package/lib/ui/thermostat/ClimateModeMenu.js +1 -1
  140. package/lib/ui/thermostat/ClimateModeMenu.js.map +1 -1
  141. package/lib/ui/thermostat/ClimateSettingStatus.js +7 -1
  142. package/lib/ui/thermostat/ClimateSettingStatus.js.map +1 -1
  143. package/lib/ui/thermostat/TemperatureControlGroup.js +1 -1
  144. package/lib/ui/thermostat/TemperatureControlGroup.js.map +1 -1
  145. package/lib/version.d.ts +1 -1
  146. package/lib/version.js +1 -1
  147. package/package.json +2 -2
  148. package/src/lib/icons/AccessCodeKey.tsx +3 -2
  149. package/src/lib/icons/Add.tsx +3 -2
  150. package/src/lib/icons/ArrowBack.tsx +3 -2
  151. package/src/lib/icons/ArrowRestart.tsx +3 -2
  152. package/src/lib/icons/ArrowRight.tsx +3 -2
  153. package/src/lib/icons/BatteryLevelCritical.tsx +3 -2
  154. package/src/lib/icons/BatteryLevelFull.tsx +3 -2
  155. package/src/lib/icons/BatteryLevelHigh.tsx +3 -2
  156. package/src/lib/icons/BatteryLevelLow.tsx +3 -2
  157. package/src/lib/icons/BatteryLevelWired.tsx +3 -2
  158. package/src/lib/icons/Bee.tsx +3 -2
  159. package/src/lib/icons/Check.tsx +3 -2
  160. package/src/lib/icons/CheckBlack.tsx +3 -2
  161. package/src/lib/icons/CheckGreen.tsx +3 -2
  162. package/src/lib/icons/CheckboxBlank.tsx +3 -2
  163. package/src/lib/icons/CheckboxFilled.tsx +3 -2
  164. package/src/lib/icons/ChevronDown.tsx +3 -2
  165. package/src/lib/icons/ChevronRight.tsx +3 -2
  166. package/src/lib/icons/ChevronWide.tsx +3 -2
  167. package/src/lib/icons/ClimateSettingSchedule.tsx +3 -2
  168. package/src/lib/icons/Clock.tsx +3 -2
  169. package/src/lib/icons/Close.tsx +3 -2
  170. package/src/lib/icons/CloseWhite.tsx +3 -2
  171. package/src/lib/icons/Copy.tsx +3 -2
  172. package/src/lib/icons/DotsEllipsisMore.tsx +3 -2
  173. package/src/lib/icons/Edit.tsx +3 -2
  174. package/src/lib/icons/ExclamationCircle.tsx +3 -2
  175. package/src/lib/icons/ExclamationCircleOutline.tsx +3 -2
  176. package/src/lib/icons/Fan.tsx +3 -2
  177. package/src/lib/icons/FanOutline.tsx +3 -2
  178. package/src/lib/icons/Info.tsx +3 -2
  179. package/src/lib/icons/InfoBlue.tsx +3 -2
  180. package/src/lib/icons/InfoDark.tsx +3 -2
  181. package/src/lib/icons/LockLocked.tsx +3 -2
  182. package/src/lib/icons/LockUnlocked.tsx +3 -2
  183. package/src/lib/icons/NoiseLevels.tsx +3 -2
  184. package/src/lib/icons/NoiseLevelsRed.tsx +3 -2
  185. package/src/lib/icons/Off.tsx +3 -2
  186. package/src/lib/icons/OnlineStatusAccountOffline.tsx +3 -2
  187. package/src/lib/icons/OnlineStatusDeviceOffline.tsx +3 -2
  188. package/src/lib/icons/OnlineStatusOnline.tsx +3 -2
  189. package/src/lib/icons/RadioChecked.tsx +3 -2
  190. package/src/lib/icons/RadioUnchecked.tsx +3 -2
  191. package/src/lib/icons/Seam.tsx +3 -2
  192. package/src/lib/icons/Search.tsx +3 -2
  193. package/src/lib/icons/TemperatureAdd.tsx +3 -2
  194. package/src/lib/icons/TemperatureSubtract.tsx +3 -2
  195. package/src/lib/icons/ThermostatCool.tsx +3 -2
  196. package/src/lib/icons/ThermostatCoolLarge.tsx +3 -2
  197. package/src/lib/icons/ThermostatHeat.tsx +3 -2
  198. package/src/lib/icons/ThermostatHeatCool.tsx +3 -2
  199. package/src/lib/icons/ThermostatHeatLarge.tsx +3 -2
  200. package/src/lib/icons/ThermostatOff.tsx +3 -2
  201. package/src/lib/icons/TriangleWarning.tsx +3 -2
  202. package/src/lib/icons/TriangleWarningOutline.tsx +3 -2
  203. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.tsx +2 -2
  204. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDevice.tsx +1 -1
  205. package/src/lib/seam/components/AccessCodeTable/AccessCodeTable.tsx +19 -8
  206. package/src/lib/seam/components/DeviceDetails/DeviceInfo.tsx +3 -1
  207. package/src/lib/seam/components/DeviceDetails/LockDeviceDetails.tsx +27 -20
  208. package/src/lib/seam/locks/lock-device.ts +11 -2
  209. package/src/lib/ui/Snackbar/Snackbar.tsx +4 -1
  210. package/src/lib/ui/device/BatteryStatusIndicator.tsx +4 -4
  211. package/src/lib/ui/device/LockStatus.tsx +4 -0
  212. package/src/lib/ui/device/OnlineStatus.tsx +3 -3
  213. package/src/lib/ui/thermostat/ClimateModeMenu.tsx +1 -1
  214. package/src/lib/ui/thermostat/ClimateSettingStatus.tsx +10 -1
  215. package/src/lib/ui/thermostat/TemperatureControlGroup.tsx +2 -2
  216. package/src/lib/version.ts +1 -1
  217. package/src/styles/_access-code-details.scss +2 -2
  218. package/src/styles/_alert.scss +1 -0
  219. package/src/styles/_buttons.scss +6 -8
  220. package/src/styles/_checkbox.scss +1 -0
  221. package/src/styles/_device-details.scss +1 -1
  222. package/src/styles/_icons.scss +2 -0
  223. package/src/styles/_inputs.scss +1 -1
  224. package/src/styles/_layout.scss +2 -0
  225. package/src/styles/_radio-field.scss +1 -0
  226. package/src/styles/_seam-table.scss +4 -3
  227. package/src/styles/_snackbar.scss +6 -0
  228. package/src/styles/_supported-device-table-manufacturer-keys.scss +1 -0
  229. package/src/styles/_supported-device-table.scss +1 -0
  230. package/src/styles/_tables.scss +3 -2
  231. package/src/styles/_thermostat.scss +26 -0
  232. package/src/styles/_typography.scss +7 -0
@@ -7,9 +7,10 @@ export function ThermostatOffIcon(props: SVGProps<SVGSVGElement>): JSX.Element {
7
7
  return (
8
8
  <svg
9
9
  xmlns='http://www.w3.org/2000/svg'
10
- width={14}
11
- height={14}
10
+ width='1em'
11
+ height='1em'
12
12
  fill='none'
13
+ viewBox='0 0 14 14'
13
14
  {...props}
14
15
  >
15
16
  <path
@@ -9,9 +9,10 @@ export function TriangleWarningIcon(
9
9
  return (
10
10
  <svg
11
11
  xmlns='http://www.w3.org/2000/svg'
12
- width={24}
13
- height={24}
12
+ width='1em'
13
+ height='1em'
14
14
  fill='none'
15
+ viewBox='0 0 24 24'
15
16
  {...props}
16
17
  >
17
18
  <mask
@@ -9,9 +9,10 @@ export function TriangleWarningOutlineIcon(
9
9
  return (
10
10
  <svg
11
11
  xmlns='http://www.w3.org/2000/svg'
12
- width={24}
13
- height={24}
12
+ width='1em'
13
+ height='1em'
14
14
  fill='none'
15
+ viewBox='0 0 24 24'
15
16
  {...props}
16
17
  >
17
18
  <path fill='#FF9800' d='m12 6.49 7.53 13.01H4.47zm0-3.99-11 19h22z' />
@@ -217,7 +217,7 @@ export function AccessCodeDetails({
217
217
  </div>
218
218
  {(!disableEditAccessCode || !disableDeleteAccessCode) && (
219
219
  <div className='seam-actions'>
220
- {!disableEditAccessCode && (
220
+ {!disableEditAccessCode && !accessCode.is_offline_access_code && (
221
221
  <Button
222
222
  size='small'
223
223
  onClick={handleEdit}
@@ -226,7 +226,7 @@ export function AccessCodeDetails({
226
226
  {t.editCode}
227
227
  </Button>
228
228
  )}
229
- {!disableDeleteAccessCode && (
229
+ {!disableDeleteAccessCode && !accessCode.is_offline_access_code && (
230
230
  <Button
231
231
  size='small'
232
232
  onClick={handleDelete}
@@ -68,7 +68,7 @@ function Content(props: {
68
68
  {t.deviceDetails}
69
69
  </TextButton>
70
70
  </div>
71
- {!disableLockUnlock && (
71
+ {!disableLockUnlock && device.properties.online && (
72
72
  <Button
73
73
  onClick={() => {
74
74
  toggleLock.mutate(device)
@@ -4,6 +4,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'
4
4
 
5
5
  import { compareByCreatedAtDesc } from 'lib/dates.js'
6
6
  import { AddIcon } from 'lib/icons/Add.js'
7
+ import { useDevice } from 'lib/index.js'
7
8
  import { useAccessCodes } from 'lib/seam/access-codes/use-access-codes.js'
8
9
  import { NestedAccessCodeDetails } from 'lib/seam/components/AccessCodeDetails/AccessCodeDetails.js'
9
10
  import {
@@ -73,6 +74,10 @@ export function AccessCodeTable({
73
74
  device_id: deviceId,
74
75
  })
75
76
 
77
+ const { device } = useDevice({
78
+ device_id: deviceId,
79
+ })
80
+
76
81
  const [selectedViewAccessCodeId, setSelectedViewAccessCodeId] = useState<
77
82
  string | null
78
83
  >(null)
@@ -128,6 +133,10 @@ export function AccessCodeTable({
128
133
  }
129
134
  }, [accessCodeResult])
130
135
 
136
+ if (device == null) {
137
+ return <></>
138
+ }
139
+
131
140
  if (selectedEditAccessCodeId != null) {
132
141
  return (
133
142
  <NestedEditAccessCodeForm
@@ -214,14 +223,16 @@ export function AccessCodeTable({
214
223
  ) : (
215
224
  <div className='seam-fragment' />
216
225
  )}
217
- {!disableCreateAccessCode && (
218
- <IconButton
219
- onClick={toggleAddAccessCodeForm}
220
- className='seam-add-button'
221
- >
222
- <AddIcon />
223
- </IconButton>
224
- )}
226
+ {!disableCreateAccessCode &&
227
+ (device.properties.online_access_codes_enabled === true ||
228
+ device.can_program_online_access_codes === true) && (
229
+ <IconButton
230
+ onClick={toggleAddAccessCodeForm}
231
+ className='seam-add-button'
232
+ >
233
+ <AddIcon />
234
+ </IconButton>
235
+ )}
225
236
  </div>
226
237
  <div className='seam-table-header-loading-wrap'>
227
238
  <LoadingToast
@@ -32,7 +32,9 @@ export function DeviceInfo({
32
32
  <DetailRow label={t.manufacturer}>
33
33
  <div className='seam-detail-row-hstack'>
34
34
  {device.properties.model.manufacturer_display_name}
35
- {device.properties.manufacturer === 'ecobee' && <BeeIcon />}
35
+ {device.properties.manufacturer === 'ecobee' && (
36
+ <BeeIcon style={{ fontSize: '33px' }} />
37
+ )}
36
38
  </div>
37
39
  </DetailRow>
38
40
  {!disableConnectedAccountInformation && (
@@ -99,8 +99,12 @@ export function LockDeviceDetails({
99
99
  <div className='seam-properties'>
100
100
  <span className='seam-label'>{t.status}:</span>{' '}
101
101
  <OnlineStatus device={device} />
102
- <span className='seam-label'>{t.power}:</span>{' '}
103
- <BatteryStatusIndicator device={device} />
102
+ {device.properties.online && (
103
+ <>
104
+ <span className='seam-label'>{t.power}:</span>{' '}
105
+ <BatteryStatusIndicator device={device} />
106
+ </>
107
+ )}
104
108
  <DeviceModel device={device} />
105
109
  </div>
106
110
  </div>
@@ -120,25 +124,28 @@ export function LockDeviceDetails({
120
124
  </div>
121
125
 
122
126
  <div className='seam-box'>
123
- <div className='seam-content seam-lock-status'>
124
- <div>
125
- <span className='seam-label'>{t.lockStatus}</span>
126
- <span className='seam-value'>{lockStatus}</span>
127
- </div>
128
- <div className='seam-right'>
129
- {!disableLockUnlock &&
130
- device.capabilities_supported.includes('lock') && (
131
- <Button
132
- size='small'
133
- onClick={() => {
134
- toggleLock.mutate(device)
135
- }}
136
- >
137
- {toggleLockLabel}
138
- </Button>
139
- )}
127
+ {device.properties.locked && device.properties.online && (
128
+ <div className='seam-content seam-lock-status'>
129
+ <div>
130
+ <span className='seam-label'>{t.lockStatus}</span>
131
+ <span className='seam-value'>{lockStatus}</span>
132
+ </div>
133
+ <div className='seam-right'>
134
+ {!disableLockUnlock &&
135
+ device.capabilities_supported.includes('lock') && (
136
+ <Button
137
+ size='small'
138
+ onClick={() => {
139
+ toggleLock.mutate(device)
140
+ }}
141
+ >
142
+ {toggleLockLabel}
143
+ </Button>
144
+ )}
145
+ </div>
140
146
  </div>
141
- </div>
147
+ )}
148
+
142
149
  <AccessCodeLength
143
150
  supportedCodeLengths={
144
151
  device.properties?.supported_code_lengths ?? []
@@ -5,5 +5,14 @@ export type LockDevice = Omit<Device, 'properties'> & {
5
5
  NonNullable<Required<Pick<Device['properties'], 'locked'>>>
6
6
  }
7
7
 
8
- export const isLockDevice = (device: Device): device is LockDevice =>
9
- 'locked' in device.properties
8
+ export const isLockDevice = (device: Device): device is LockDevice => {
9
+ return (
10
+ 'locked' in device.properties ||
11
+ 'can_remotely_lock' in device ||
12
+ 'can_remotely_unlock' in device ||
13
+ 'can_program_online_access_code' in device ||
14
+ 'can_program_offline_access_code' in device ||
15
+ device.properties.online_access_codes_enabled === true ||
16
+ device.properties.offline_access_codes_enabled === true
17
+ )
18
+ }
@@ -67,7 +67,10 @@ export function Snackbar({
67
67
  'seam-snackbar-visible': automaticVisibility ? !hidden : visible,
68
68
  })}
69
69
  >
70
- <SnackbarIcon variant={variant} />
70
+ <span className='seam-snackbar-icon-wrap'>
71
+ <SnackbarIcon variant={variant} />
72
+ </span>
73
+
71
74
  <div className='seam-snackbar-message-wrap'>
72
75
  <p className='seam-snackbar-message'>{message}</p>
73
76
  </div>
@@ -34,7 +34,7 @@ function Content(props: {
34
34
  if (status === 'full') {
35
35
  return (
36
36
  <>
37
- <BatteryLevelFullIcon />
37
+ <BatteryLevelFullIcon style={{ fontSize: '24px' }} />
38
38
  <span className='seam-status-text'>
39
39
  {t.full}
40
40
  <Percentage level={level} />
@@ -46,7 +46,7 @@ function Content(props: {
46
46
  if (status === 'good') {
47
47
  return (
48
48
  <>
49
- <BatteryLevelHighIcon />
49
+ <BatteryLevelHighIcon style={{ fontSize: '24px' }} />
50
50
  <span className='seam-status-text'>
51
51
  {t.high}
52
52
  <Percentage level={level} />
@@ -58,7 +58,7 @@ function Content(props: {
58
58
  if (status === 'low') {
59
59
  return (
60
60
  <>
61
- <BatteryLevelLowIcon />
61
+ <BatteryLevelLowIcon style={{ fontSize: '24px' }} />
62
62
  <span className='seam-status-text'>
63
63
  {t.low}
64
64
  <Percentage level={level} />
@@ -70,7 +70,7 @@ function Content(props: {
70
70
  if (status === 'critical') {
71
71
  return (
72
72
  <>
73
- <BatteryLevelCriticalIcon />
73
+ <BatteryLevelCriticalIcon style={{ fontSize: '24px' }} />
74
74
  <span className='seam-text-danger'>
75
75
  {t.critical}
76
76
  <Percentage level={level} />
@@ -19,6 +19,10 @@ export function LockStatus(props: LockStatusProps): JSX.Element | null {
19
19
  },
20
20
  } = props
21
21
 
22
+ if (locked === null) {
23
+ return null
24
+ }
25
+
22
26
  return (
23
27
  <div className='seam-lock-status'>
24
28
  <Content isLocked={locked} />
@@ -25,7 +25,7 @@ export function OnlineStatus(props: OnlineStatusProps): JSX.Element {
25
25
  function AccountOfflineContent(): JSX.Element {
26
26
  return (
27
27
  <>
28
- <OnlineStatusAccountOfflineIcon />
28
+ <OnlineStatusAccountOfflineIcon className='seam-font-24' />
29
29
  <span className='seam-text-danger'>{t.accountOffline}</span>
30
30
  </>
31
31
  )
@@ -36,7 +36,7 @@ function AccountOnlineContent(props: { isOnline: boolean }): JSX.Element {
36
36
  if (isOnline) {
37
37
  return (
38
38
  <>
39
- <OnlineStatusOnlineIcon />
39
+ <OnlineStatusOnlineIcon className='seam-font-24' />
40
40
  <span className='seam-status-text'>{t.online}</span>
41
41
  </>
42
42
  )
@@ -44,7 +44,7 @@ function AccountOnlineContent(props: { isOnline: boolean }): JSX.Element {
44
44
 
45
45
  return (
46
46
  <>
47
- <OnlineStatusDeviceOfflineIcon />
47
+ <OnlineStatusDeviceOfflineIcon className='seam-font-24' />
48
48
  <span className='seam-text-danger'>{t.deviceOffline}</span>
49
49
  </>
50
50
  )
@@ -25,7 +25,7 @@ export function ClimateModeMenu({
25
25
  <div className='seam-climate-mode-menu-button-icon'>
26
26
  <ModeIcon mode={mode} />
27
27
  </div>
28
- <ChevronDownIcon />
28
+ <ChevronDownIcon className='seam-climate-mode-menu-button-chevron' />
29
29
  </button>
30
30
  )}
31
31
  verticalOffset={-180}
@@ -1,3 +1,5 @@
1
+ import classNames from 'classnames'
2
+
1
3
  import { ThermostatCoolIcon } from 'lib/icons/ThermostatCool.js'
2
4
  import { ThermostatHeatIcon } from 'lib/icons/ThermostatHeat.js'
3
5
  import { ThermostatHeatCoolIcon } from 'lib/icons/ThermostatHeatCool.js'
@@ -46,7 +48,14 @@ function ClimateSettingIcon(props: {
46
48
  const { mode } = props
47
49
 
48
50
  return (
49
- <div className='seam-climate-setting-status-icon'>
51
+ <div
52
+ className={classNames('seam-climate-setting-status-icon', {
53
+ 'seam-climate-setting-status-icon-cool': mode === 'cool',
54
+ 'seam-climate-setting-status-icon-heat': mode === 'heat',
55
+ 'seam-climate-setting-status-icon-heat-cool': mode === 'heat_cool',
56
+ 'seam-climate-setting-status-icon-off': mode === 'off',
57
+ })}
58
+ >
50
59
  {mode === 'cool' && <ThermostatCoolIcon />}
51
60
  {mode === 'heat' && <ThermostatHeatIcon />}
52
61
  {mode === 'heat_cool' && <ThermostatHeatCoolIcon />}
@@ -138,7 +138,7 @@ export function TemperatureControlGroup({
138
138
  <div className='seam-temperature-control-group'>
139
139
  {showHeat && (
140
140
  <div className='seam-temperature-control-group-block'>
141
- <ThermostatHeatLargeIcon />
141
+ <ThermostatHeatLargeIcon className='seam-temperature-control-group-block-thermostat-icon' />
142
142
  <TemperatureControl
143
143
  variant='heat'
144
144
  value={heatValue}
@@ -151,7 +151,7 @@ export function TemperatureControlGroup({
151
151
 
152
152
  {showCool && (
153
153
  <div className='seam-temperature-control-group-block'>
154
- <ThermostatCoolLargeIcon />
154
+ <ThermostatCoolLargeIcon className='seam-temperature-control-group-block-thermostat-icon' />
155
155
  <TemperatureControl
156
156
  variant='cool'
157
157
  value={coolValue}
@@ -1,3 +1,3 @@
1
- const seamapiReactVersion = '4.0.0'
1
+ const seamapiReactVersion = '4.2.0'
2
2
 
3
3
  export default seamapiReactVersion
@@ -59,7 +59,7 @@
59
59
  }
60
60
 
61
61
  svg {
62
- scale: 0.8333;
62
+ font-size: 20px;
63
63
  }
64
64
  }
65
65
  }
@@ -141,7 +141,7 @@
141
141
  }
142
142
 
143
143
  svg {
144
- scale: 0.8333;
144
+ font-size: 20px;
145
145
  }
146
146
  }
147
147
  }
@@ -80,6 +80,7 @@
80
80
  .seam-alert-icon {
81
81
  width: 24px;
82
82
  height: 24px;
83
+ font-size: 24px;
83
84
  }
84
85
 
85
86
  .seam-alert-content {
@@ -11,17 +11,15 @@
11
11
  line-height: 0;
12
12
  width: 30px;
13
13
  height: 30px;
14
+ font-size: 18px;
15
+ color: colors.$primary;
14
16
 
15
- &:hover {
16
- background: rgb(0 122 252 / 8%);
17
+ path {
18
+ fill: colors.$primary;
17
19
  }
18
20
 
19
- svg {
20
- scale: 0.75;
21
-
22
- * {
23
- fill: colors.$primary;
24
- }
21
+ &:hover {
22
+ background: rgb(0 122 252 / 8%);
25
23
  }
26
24
  }
27
25
  }
@@ -11,6 +11,7 @@
11
11
  > .seam-checkbox-icon {
12
12
  height: 24px;
13
13
  width: 24px;
14
+ font-size: 24px;
14
15
  }
15
16
 
16
17
  > input {
@@ -123,7 +123,7 @@
123
123
  }
124
124
 
125
125
  svg {
126
- scale: 0.75;
126
+ font-size: 18px !important;
127
127
  margin-right: 8px;
128
128
  }
129
129
 
@@ -2,6 +2,8 @@
2
2
 
3
3
  @mixin all {
4
4
  .seam-lock-icon {
5
+ font-size: 24px;
6
+
5
7
  * {
6
8
  fill: colors.$text-gray-1;
7
9
  }
@@ -49,7 +49,7 @@
49
49
  align-items: center;
50
50
 
51
51
  svg {
52
- scale: 0.8333;
52
+ font-size: 22px;
53
53
  }
54
54
 
55
55
  &.seam-start {
@@ -18,6 +18,7 @@
18
18
  top: 50%;
19
19
  transform: translate(4px, -50%);
20
20
  left: 0;
21
+ font-size: 24px;
21
22
  cursor: pointer;
22
23
  }
23
24
 
@@ -281,6 +282,7 @@
281
282
  justify-content: center;
282
283
  align-items: center;
283
284
  transition: transform 0.2s ease-in-out;
285
+ font-size: 24px;
284
286
  }
285
287
  }
286
288
  }
@@ -20,6 +20,7 @@
20
20
  > .seam-radio-icon {
21
21
  height: 24px;
22
22
  width: 24px;
23
+ font-size: 24px;
23
24
  }
24
25
 
25
26
  > .seam-radio-label {
@@ -34,7 +34,7 @@
34
34
  justify-content: center;
35
35
  margin-right: 4px;
36
36
 
37
- @media only screen and (width >= 768px) {
37
+ @media only screen and (width >=768px) {
38
38
  width: 40px;
39
39
  margin-right: 4px;
40
40
  }
@@ -60,7 +60,7 @@
60
60
  display: flex;
61
61
  flex-wrap: wrap;
62
62
 
63
- @media only screen and (width >= 768px) {
63
+ @media only screen and (width >=768px) {
64
64
  font-size: 14px;
65
65
  }
66
66
 
@@ -82,7 +82,7 @@
82
82
  align-items: center;
83
83
  justify-content: center;
84
84
 
85
- @media only screen and (width >= 768px) {
85
+ @media only screen and (width >=768px) {
86
86
  margin-right: 12px;
87
87
  }
88
88
  }
@@ -92,6 +92,7 @@
92
92
  justify-content: center;
93
93
  align-items: center;
94
94
  margin-right: 8px;
95
+ font-size: 25px;
95
96
  }
96
97
  }
97
98
 
@@ -40,6 +40,11 @@
40
40
  visibility: visible;
41
41
  }
42
42
 
43
+ .seam-snackbar-icon-wrap {
44
+ font-size: 24px;
45
+ display: inline-flex;
46
+ }
47
+
43
48
  .seam-snackbar-message-wrap {
44
49
  display: flex;
45
50
  max-width: 300px;
@@ -101,6 +106,7 @@
101
106
  padding: 0;
102
107
  cursor: pointer;
103
108
  transition: opacity 0.2s ease-in-out;
109
+ font-size: 24px;
104
110
 
105
111
  &:hover {
106
112
  opacity: 0.75;
@@ -14,6 +14,7 @@
14
14
  display: table-cell;
15
15
  cursor: pointer;
16
16
  padding-left: 10px;
17
+ font-size: 25px;
17
18
  }
18
19
  }
19
20
  }
@@ -187,6 +187,7 @@ $see-all-button-height: 30px;
187
187
 
188
188
  svg {
189
189
  transform: rotate(90deg);
190
+ font-size: 25px;
190
191
  }
191
192
  }
192
193
 
@@ -88,7 +88,7 @@
88
88
  padding: 0;
89
89
 
90
90
  svg {
91
- scale: 0.8333;
91
+ font-size: 20px;
92
92
 
93
93
  * {
94
94
  fill: colors.$text-gray-1;
@@ -107,7 +107,8 @@
107
107
  line-height: 134%;
108
108
 
109
109
  svg {
110
- scale: 0.75;
110
+ font-size: 19px;
111
+ margin: 3px 4px;
111
112
  }
112
113
 
113
114
  &.seam-clickable {
@@ -28,6 +28,10 @@
28
28
  align-items: center;
29
29
  flex-direction: row;
30
30
  gap: 8px;
31
+
32
+ .seam-temperature-control-group-block-thermostat-icon {
33
+ font-size: 24px;
34
+ }
31
35
  }
32
36
  }
33
37
 
@@ -89,6 +93,10 @@
89
93
  align-items: center;
90
94
  flex-direction: row;
91
95
  gap: 7px;
96
+
97
+ svg {
98
+ font-size: 20px;
99
+ }
92
100
  }
93
101
 
94
102
  .seam-temperature-range-wrap {
@@ -330,6 +338,11 @@
330
338
  display: flex;
331
339
  justify-content: center;
332
340
  align-items: center;
341
+ font-size: 14px;
342
+
343
+ .seam-climate-setting-status-icon-heat-cool {
344
+ font-size: 19px;
345
+ }
333
346
  }
334
347
  }
335
348
 
@@ -541,6 +554,10 @@
541
554
  cursor: pointer;
542
555
  transition: 0.2s ease;
543
556
 
557
+ svg {
558
+ font-size: 20px;
559
+ }
560
+
544
561
  &:hover {
545
562
  border-color: colors.$text-gray-2;
546
563
  }
@@ -556,6 +573,10 @@
556
573
  align-items: center;
557
574
  flex-direction: row;
558
575
  gap: 10px;
576
+
577
+ svg {
578
+ font-size: 22px;
579
+ }
559
580
  }
560
581
 
561
582
  .seam-fan-mode-menu-button-text {
@@ -594,6 +615,10 @@
594
615
  background-color: colors.$bg-c;
595
616
  border-color: colors.$text-gray-2;
596
617
  }
618
+
619
+ .seam-climate-mode-menu-button-chevron {
620
+ font-size: 20px;
621
+ }
597
622
  }
598
623
 
599
624
  .seam-climate-mode-menu-button-icon {
@@ -602,6 +627,7 @@
602
627
  display: flex;
603
628
  justify-content: center;
604
629
  align-items: center;
630
+ font-size: 18px;
605
631
  }
606
632
  }
607
633
 
@@ -55,6 +55,12 @@
55
55
  }
56
56
  }
57
57
 
58
+ @mixin font-size {
59
+ .seam-font-24 {
60
+ font-size: 24px;
61
+ }
62
+ }
63
+
58
64
  @mixin all {
59
65
  @include headers;
60
66
  @include caption;
@@ -62,4 +68,5 @@
62
68
  @include font-family;
63
69
  @include defaults;
64
70
  @include truncated-text;
71
+ @include font-size;
65
72
  }