@ecohouse/ui 0.1.45 → 0.1.47

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ecohouse/ui",
3
- "version": "0.1.45",
3
+ "version": "0.1.47",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "Cross-platform presentation-only UI components for EcoHouse (React Native + React Native Web)",
@@ -539,18 +539,20 @@ export const DatePicker = forwardRef<ComponentRef<typeof View>, DatePickerProps>
539
539
  const last = rangeIndices[rangeIndices.length - 1];
540
540
  const startsHere = isSameDay(week[first], rangeValue.start);
541
541
  const endsHere = isSameDay(week[last], rangeValue.end);
542
- // Half a cell so the bar meets the circle center, not past it.
542
+ // Tuck past the circle center so the highlight's rounded cap
543
+ // sits under the endpoint circle instead of leaving a gap.
543
544
  const cellPct = 100 / 7;
544
545
  const halfCellPct = cellPct / 2;
546
+ const tuckPct = (12 / MENU_CONTENT_WIDTH) * 100;
545
547
  let leftPct = first * cellPct;
546
- let widthPct = (last - first + 1) * cellPct;
548
+ let rightPct = (last + 1) * cellPct;
547
549
  if (startsHere) {
548
- leftPct += halfCellPct;
549
- widthPct -= halfCellPct;
550
+ leftPct += halfCellPct - tuckPct;
550
551
  }
551
552
  if (endsHere) {
552
- widthPct -= halfCellPct;
553
+ rightPct -= halfCellPct - tuckPct;
553
554
  }
555
+ const widthPct = rightPct - leftPct;
554
556
  // Same-day range: only the circle, no connector bar.
555
557
  if (widthPct > 0) {
556
558
  rangeHighlightStyle = {
@@ -47,7 +47,6 @@ const ANIMATION_DURATION = 200;
47
47
  const OPTION_HORIZONTAL_PADDING = 16;
48
48
  const OPTION_CONTENT_GAP = 12;
49
49
  const OPTION_MIN_WIDTH = 97;
50
- const OPTION_MEASUREMENT_TOLERANCE = 0.5;
51
50
  const TRACK_PADDING = 4;
52
51
  const OPTION_GAP = 4;
53
52
 
@@ -91,7 +90,7 @@ export const SegmentedToggle = forwardRef<ComponentRef<typeof View>, SegmentedTo
91
90
  const setContainerRef = useMemo(() => mergeRefs(containerRef, forwardedRef), [forwardedRef]);
92
91
  const progress = useRef(new Animated.Value(selectedIndex)).current;
93
92
  const hasMounted = useRef(false);
94
- const [contentWidths, setContentWidths] = useState<number[]>(() =>
93
+ const [measuredOptionWidths, setMeasuredOptionWidths] = useState<number[]>(() =>
95
94
  Array.from({ length: optionCount }, () => 0),
96
95
  );
97
96
  const [containerWidth, setContainerWidth] = useState(0);
@@ -99,19 +98,12 @@ export const SegmentedToggle = forwardRef<ComponentRef<typeof View>, SegmentedTo
99
98
  // Track chrome: left+right padding + gaps between options.
100
99
  const trackChrome = TRACK_PADDING * 2 + OPTION_GAP * (optionCount - 1);
101
100
  const availableOptionWidth = Math.max(0, (containerWidth - trackChrome) / optionCount);
102
- const resolveContentOptionWidth = (contentWidth: number) =>
103
- contentWidth > 0
104
- ? Math.max(
105
- OPTION_MIN_WIDTH,
106
- contentWidth + OPTION_HORIZONTAL_PADDING * 2 + OPTION_MEASUREMENT_TOLERANCE,
107
- )
108
- : 0;
109
-
110
101
  const optionWidths = fullWidth
111
102
  ? Array.from({ length: optionCount }, () => availableOptionWidth)
112
- : contentWidths.map((width) => resolveContentOptionWidth(width));
103
+ : measuredOptionWidths;
113
104
 
114
- const selectedOptionWidth = optionWidths[selectedIndex] ?? 0;
105
+ const measurementsReady = optionWidths.every((width) => width > 0);
106
+ const selectedOptionWidth = measurementsReady ? (optionWidths[selectedIndex] ?? 0) : 0;
115
107
  const indicatorInputRange = options.map((_, index) => index);
116
108
  const indicatorOutputRange = buildIndicatorOutputRange(optionWidths);
117
109
  const indicatorTranslateX = progress.interpolate({
@@ -122,7 +114,7 @@ export const SegmentedToggle = forwardRef<ComponentRef<typeof View>, SegmentedTo
122
114
  useApplyWebClassName(containerRef, resolvedClassName);
123
115
 
124
116
  useEffect(() => {
125
- setContentWidths((current) => {
117
+ setMeasuredOptionWidths((current) => {
126
118
  if (current.length === optionCount) return current;
127
119
  return Array.from({ length: optionCount }, (_, index) => current[index] ?? 0);
128
120
  });
@@ -171,32 +163,6 @@ export const SegmentedToggle = forwardRef<ComponentRef<typeof View>, SegmentedTo
171
163
  ]}
172
164
  accessibilityRole="radiogroup"
173
165
  >
174
- {!fullWidth
175
- ? options.map(({ value: optionValue, label, icon: Icon, showLabel = true }, index) => (
176
- <View
177
- key={`${optionValue}-measurement`}
178
- pointerEvents="none"
179
- aria-hidden
180
- accessibilityElementsHidden
181
- importantForAccessibility="no-hide-descendants"
182
- onLayout={(event) => {
183
- const nextWidth = event.nativeEvent.layout.width;
184
- setContentWidths((currentWidths) => {
185
- if (currentWidths[index] === nextWidth) return currentWidths;
186
- const nextWidths = [...currentWidths];
187
- nextWidths[index] = nextWidth;
188
- return nextWidths;
189
- });
190
- }}
191
- style={styles.optionMeasurement}
192
- >
193
- {Icon ? <Icon size={ICON_SIZE} /> : null}
194
- {showLabel ? (
195
- <Text style={[styles.label, styles.contentWidthLabel]}>{label}</Text>
196
- ) : null}
197
- </View>
198
- ))
199
- : null}
200
166
  {selectedOptionWidth > 0 ? (
201
167
  <Animated.View
202
168
  pointerEvents="none"
@@ -210,7 +176,6 @@ export const SegmentedToggle = forwardRef<ComponentRef<typeof View>, SegmentedTo
210
176
  const selected = optionValue === selectedValue;
211
177
  const iconColor = selected ? colors.primary : colors.whiteAlpha20;
212
178
  const labelColor = selected ? colors.white : colors.grey150;
213
- const optionWidth = optionWidths[index] ?? 0;
214
179
 
215
180
  return (
216
181
  <Pressable
@@ -218,18 +183,45 @@ export const SegmentedToggle = forwardRef<ComponentRef<typeof View>, SegmentedTo
218
183
  onPress={() => selectOption(optionValue)}
219
184
  disabled={disabled}
220
185
  hitSlop={hitSlop}
186
+ onLayout={
187
+ fullWidth
188
+ ? undefined
189
+ : (event) => {
190
+ const nextWidth = event.nativeEvent.layout.width;
191
+ setMeasuredOptionWidths((currentWidths) => {
192
+ if (currentWidths[index] === nextWidth) return currentWidths;
193
+ const nextWidths = [...currentWidths];
194
+ nextWidths[index] = nextWidth;
195
+ return nextWidths;
196
+ });
197
+ }
198
+ }
221
199
  accessibilityRole="radio"
222
200
  accessibilityLabel={label}
223
201
  accessibilityState={{ selected, disabled }}
224
202
  style={[
225
203
  styles.option,
226
- fullWidth
227
- ? styles.optionFullWidth
228
- : [styles.optionContentWidth, optionWidth > 0 && { width: optionWidth }],
229
- selected && selectedOptionWidth === 0 && styles.initialSelectedOption,
204
+ fullWidth ? styles.optionFullWidth : styles.optionContentWidth,
205
+ selected && !measurementsReady && styles.initialSelectedOption,
230
206
  ]}
231
207
  >
232
- <View style={styles.optionContent}>
208
+ {!fullWidth ? (
209
+ <View
210
+ aria-hidden
211
+ accessibilityElementsHidden
212
+ importantForAccessibility="no-hide-descendants"
213
+ pointerEvents="none"
214
+ style={[styles.optionContent, styles.optionSizeProbe]}
215
+ >
216
+ {Icon ? <Icon size={ICON_SIZE} /> : null}
217
+ {showLabel ? (
218
+ <Text style={[styles.label, styles.selectedLabel, styles.contentWidthLabel]}>
219
+ {label}
220
+ </Text>
221
+ ) : null}
222
+ </View>
223
+ ) : null}
224
+ <View style={[styles.optionContent, !fullWidth && styles.contentWidthVisibleContent]}>
233
225
  {Icon ? <Icon size={ICON_SIZE} color={iconColor} /> : null}
234
226
  {showLabel ? (
235
227
  <Text
@@ -287,13 +279,17 @@ const styles = StyleSheet.create({
287
279
  alignItems: "center",
288
280
  gap: OPTION_CONTENT_GAP,
289
281
  },
290
- optionMeasurement: {
291
- position: "absolute",
292
- flexDirection: "row",
293
- alignItems: "center",
294
- gap: OPTION_CONTENT_GAP,
282
+ optionSizeProbe: {
295
283
  opacity: 0,
296
284
  },
285
+ contentWidthVisibleContent: {
286
+ position: "absolute",
287
+ top: 0,
288
+ left: 0,
289
+ width: "100%",
290
+ height: "100%",
291
+ justifyContent: "center",
292
+ },
297
293
  optionFullWidth: {
298
294
  flex: 1,
299
295
  minWidth: 0,
@@ -0,0 +1,14 @@
1
+ import Svg, { Path } from "react-native-svg";
2
+ import { colors } from "../../theme";
3
+ import type { IconProps } from "../types";
4
+ import { ACTIVE_GUESTS_PATH } from "./activeGuestsPath";
5
+
6
+ export { ACTIVE_GUESTS_PATH } from "./activeGuestsPath";
7
+
8
+ export function ActiveGuestsIcon({ size = 20, color = colors.primary }: IconProps) {
9
+ return (
10
+ <Svg width={size} height={size} viewBox="0 0 20 20" fill="none">
11
+ <Path d={ACTIVE_GUESTS_PATH} fill={color} />
12
+ </Svg>
13
+ );
14
+ }
@@ -0,0 +1,20 @@
1
+ import { ACTIVE_GUESTS_PATH } from "./activeGuestsPath";
2
+ import { colors } from "../../theme";
3
+ import type { IconProps } from "../types";
4
+
5
+ export function ActiveGuestsIcon({ size = 20, color = colors.primary }: IconProps) {
6
+ return (
7
+ <svg
8
+ width={size}
9
+ height={size}
10
+ viewBox="0 0 20 20"
11
+ fill="none"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ aria-hidden
14
+ >
15
+ <path d={ACTIVE_GUESTS_PATH} fill={color} />
16
+ </svg>
17
+ );
18
+ }
19
+
20
+ export { ACTIVE_GUESTS_PATH } from "./activeGuestsPath";
@@ -0,0 +1,2 @@
1
+ export const ACTIVE_GUESTS_PATH =
2
+ "M11.0846 10.1827C11.5293 9.79779 11.8859 9.32175 12.1304 8.78687C12.3748 8.25198 12.5013 7.67077 12.5013 7.08268C12.5013 5.97761 12.0623 4.91781 11.2809 4.1364C10.4995 3.355 9.4397 2.91602 8.33464 2.91602C7.22957 2.91602 6.16976 3.355 5.38836 4.1364C4.60696 4.91781 4.16797 5.97761 4.16797 7.08268C4.16796 7.67077 4.29447 8.25198 4.53891 8.78687C4.78334 9.32175 5.13999 9.79779 5.58464 10.1827C4.41809 10.7109 3.42836 11.564 2.73379 12.6398C2.03921 13.7156 1.6692 14.9688 1.66797 16.2493C1.66797 16.4704 1.75577 16.6823 1.91205 16.8386C2.06833 16.9949 2.28029 17.0827 2.5013 17.0827C2.72232 17.0827 2.93428 16.9949 3.09056 16.8386C3.24684 16.6823 3.33464 16.4704 3.33464 16.2493C3.33464 14.9233 3.86142 13.6515 4.7991 12.7138C5.73678 11.7761 7.00855 11.2493 8.33464 11.2493C9.66072 11.2493 10.9325 11.7761 11.8702 12.7138C12.8079 13.6515 13.3346 14.9233 13.3346 16.2493C13.3346 16.4704 13.4224 16.6823 13.5787 16.8386C13.735 16.9949 13.947 17.0827 14.168 17.0827C14.389 17.0827 14.6009 16.9949 14.7572 16.8386C14.9135 16.6823 15.0013 16.4704 15.0013 16.2493C15.0001 14.9688 14.6301 13.7156 13.9355 12.6398C13.2409 11.564 12.2512 10.7109 11.0846 10.1827ZM8.33464 9.58268C7.84018 9.58268 7.35683 9.43606 6.94571 9.16136C6.53459 8.88665 6.21416 8.49621 6.02494 8.03939C5.83572 7.58258 5.78621 7.07991 5.88267 6.59496C5.97914 6.11 6.21724 5.66455 6.56687 5.31492C6.9165 4.96528 7.36196 4.72718 7.84691 4.63072C8.33186 4.53426 8.83453 4.58376 9.29134 4.77298C9.74816 4.9622 10.1386 5.28263 10.4133 5.69376C10.688 6.10488 10.8346 6.58823 10.8346 7.08268C10.8346 7.74572 10.5712 8.38161 10.1024 8.85045C9.63356 9.31929 8.99768 9.58268 8.33464 9.58268ZM18.093 7.60768C18.0155 7.52958 17.9233 7.46758 17.8218 7.42527C17.7202 7.38297 17.6113 7.36118 17.5013 7.36118C17.3913 7.36118 17.2824 7.38297 17.1808 7.42527C17.0793 7.46758 16.9871 7.52958 16.9096 7.60768L15.243 9.27435L14.7263 8.74935C14.6488 8.67124 14.5567 8.60925 14.4551 8.56694C14.3536 8.52463 14.2446 8.50285 14.1346 8.50285C14.0246 8.50285 13.9157 8.52463 13.8142 8.56694C13.7126 8.60925 13.6204 8.67124 13.543 8.74935C13.3878 8.90548 13.3006 9.11669 13.3006 9.33685C13.3006 9.557 13.3878 9.76821 13.543 9.92435L14.6596 11.041C14.8158 11.1962 15.027 11.2833 15.2471 11.2833C15.4673 11.2833 15.6785 11.1962 15.8346 11.041L18.0596 8.81602C18.1438 8.74045 18.2116 8.64855 18.2591 8.54592C18.3066 8.44328 18.3327 8.33205 18.3358 8.21901C18.3389 8.10596 18.319 7.99347 18.2773 7.88837C18.2355 7.78327 18.1728 7.68777 18.093 7.60768Z";
@@ -0,0 +1 @@
1
+ export { ActiveGuestsIcon, ACTIVE_GUESTS_PATH } from "./ActiveGuestsIcon";
@@ -0,0 +1,24 @@
1
+ import Svg, { Path } from "react-native-svg";
2
+ import { colors } from "../../theme";
3
+ import type { IconProps } from "../types";
4
+ import { BLOCKED_GUESTS_PATH } from "./blockedGuestsPath";
5
+
6
+ export { BLOCKED_GUESTS_PATH } from "./blockedGuestsPath";
7
+
8
+ export function BlockedGuestsIcon({
9
+ size = 20,
10
+ color = colors.primary,
11
+ strokeWidth = 2,
12
+ }: IconProps) {
13
+ return (
14
+ <Svg width={size} height={size} viewBox="0 0 20 20" fill="none">
15
+ <Path
16
+ d={BLOCKED_GUESTS_PATH}
17
+ stroke={color}
18
+ strokeWidth={strokeWidth}
19
+ strokeLinecap="round"
20
+ strokeLinejoin="round"
21
+ />
22
+ </Svg>
23
+ );
24
+ }
@@ -0,0 +1,30 @@
1
+ import { BLOCKED_GUESTS_PATH } from "./blockedGuestsPath";
2
+ import { colors } from "../../theme";
3
+ import type { IconProps } from "../types";
4
+
5
+ export function BlockedGuestsIcon({
6
+ size = 20,
7
+ color = colors.primary,
8
+ strokeWidth = 2,
9
+ }: IconProps) {
10
+ return (
11
+ <svg
12
+ width={size}
13
+ height={size}
14
+ viewBox="0 0 20 20"
15
+ fill="none"
16
+ xmlns="http://www.w3.org/2000/svg"
17
+ aria-hidden
18
+ >
19
+ <path
20
+ d={BLOCKED_GUESTS_PATH}
21
+ stroke={color}
22
+ strokeWidth={strokeWidth}
23
+ strokeLinecap="round"
24
+ strokeLinejoin="round"
25
+ />
26
+ </svg>
27
+ );
28
+ }
29
+
30
+ export { BLOCKED_GUESTS_PATH } from "./blockedGuestsPath";
@@ -0,0 +1,2 @@
1
+ export const BLOCKED_GUESTS_PATH =
2
+ "M14.1654 8.33333V6.66667C14.1654 4.36548 12.2999 2.5 9.9987 2.5C7.69751 2.5 5.83203 4.36548 5.83203 6.66667V8.33333M9.9987 12.0833V13.75M7.33203 17.5H12.6654C14.0655 17.5 14.7656 17.5 15.3003 17.2275C15.7707 16.9878 16.1532 16.6054 16.3929 16.135C16.6654 15.6002 16.6654 14.9001 16.6654 13.5V12.3333C16.6654 10.9332 16.6654 10.2331 16.3929 9.69836C16.1532 9.22795 15.7707 8.8455 15.3003 8.60582C14.7656 8.33333 14.0655 8.33333 12.6654 8.33333H7.33203C5.9319 8.33333 5.23183 8.33333 4.69705 8.60582C4.22665 8.8455 3.8442 9.22795 3.60451 9.69836C3.33203 10.2331 3.33203 10.9332 3.33203 12.3333V13.5C3.33203 14.9001 3.33203 15.6002 3.60451 16.135C3.8442 16.6054 4.22665 16.9878 4.69705 17.2275C5.23183 17.5 5.9319 17.5 7.33203 17.5Z";
@@ -0,0 +1 @@
1
+ export { BlockedGuestsIcon, BLOCKED_GUESTS_PATH } from "./BlockedGuestsIcon";
@@ -0,0 +1,20 @@
1
+ import Svg, { Path } from "react-native-svg";
2
+ import { colors } from "../../theme";
3
+ import type { IconProps } from "../types";
4
+ import { TOTAL_GUESTS_PATH } from "./totalGuestsPath";
5
+
6
+ export { TOTAL_GUESTS_PATH } from "./totalGuestsPath";
7
+
8
+ export function TotalGuestsIcon({ size = 20, color = colors.primary, strokeWidth = 2 }: IconProps) {
9
+ return (
10
+ <Svg width={size} height={size} viewBox="0 0 20 20" fill="none">
11
+ <Path
12
+ d={TOTAL_GUESTS_PATH}
13
+ stroke={color}
14
+ strokeWidth={strokeWidth}
15
+ strokeLinecap="round"
16
+ strokeLinejoin="round"
17
+ />
18
+ </Svg>
19
+ );
20
+ }
@@ -0,0 +1,26 @@
1
+ import { TOTAL_GUESTS_PATH } from "./totalGuestsPath";
2
+ import { colors } from "../../theme";
3
+ import type { IconProps } from "../types";
4
+
5
+ export function TotalGuestsIcon({ size = 20, color = colors.primary, strokeWidth = 2 }: IconProps) {
6
+ return (
7
+ <svg
8
+ width={size}
9
+ height={size}
10
+ viewBox="0 0 20 20"
11
+ fill="none"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ aria-hidden
14
+ >
15
+ <path
16
+ d={TOTAL_GUESTS_PATH}
17
+ stroke={color}
18
+ strokeWidth={strokeWidth}
19
+ strokeLinecap="round"
20
+ strokeLinejoin="round"
21
+ />
22
+ </svg>
23
+ );
24
+ }
25
+
26
+ export { TOTAL_GUESTS_PATH } from "./totalGuestsPath";
@@ -0,0 +1 @@
1
+ export { TotalGuestsIcon, TOTAL_GUESTS_PATH } from "./TotalGuestsIcon";
@@ -0,0 +1,2 @@
1
+ export const TOTAL_GUESTS_PATH =
2
+ "M13.3346 2.8898C14.5694 3.50343 15.418 4.77762 15.418 6.25C15.418 7.72238 14.5694 8.99657 13.3346 9.6102M15.0013 13.972C16.2608 14.5419 17.3951 15.4708 18.3346 16.6667M1.66797 16.6667C3.29004 14.6021 5.49228 13.3333 7.91797 13.3333C10.3437 13.3333 12.5459 14.6021 14.168 16.6667M11.668 6.25C11.668 8.32107 9.98904 10 7.91797 10C5.8469 10 4.16797 8.32107 4.16797 6.25C4.16797 4.17893 5.8469 2.5 7.91797 2.5C9.98904 2.5 11.668 4.17893 11.668 6.25Z";
@@ -5,6 +5,7 @@ export type { IconByNameProps } from "./Icon";
5
5
  export { icons, iconNames, iconGroups, iconGroupNames, getIconsByGroup } from "./registry";
6
6
  export { Icon } from "./Icon";
7
7
 
8
+ export { ActiveGuestsIcon } from "./ActiveGuests";
8
9
  export { AmenityIcon } from "./Amenity";
9
10
  export type { AmenityIconProps, AmenityName } from "./Amenity";
10
11
  export { AlertTriangleIcon } from "./AlertTriangle";
@@ -13,6 +14,7 @@ export { ArrowLeftIcon } from "./ArrowLeft";
13
14
  export { ArrowRightIcon } from "./ArrowRight";
14
15
  export { BagIcon } from "./Bag";
15
16
  export { BanIcon } from "./Ban";
17
+ export { BlockedGuestsIcon } from "./BlockedGuests";
16
18
  export { BellIcon } from "./Bell";
17
19
  export { BuildingIcon } from "./Building";
18
20
  export { CalendarIcon } from "./Calendar";
@@ -101,6 +103,7 @@ export { StarFilledIcon } from "./StarFilled";
101
103
  export { StarOutlineIcon } from "./StarOutline";
102
104
  export { SunIcon } from "./Sun";
103
105
  export { TableViewIcon } from "./TableView";
106
+ export { TotalGuestsIcon } from "./TotalGuests";
104
107
  export { UserIcon } from "./User";
105
108
  export { UsersAltIcon } from "./UsersAlt";
106
109
  export { VideoIcon } from "./Video";
@@ -1,8 +1,10 @@
1
+ import { ActiveGuestsIcon } from "./ActiveGuests";
1
2
  import { ArrowRightIcon } from "./ArrowRight";
2
3
  import { AlertTriangleIcon } from "./AlertTriangle";
3
4
  import { AppleIcon, GooglePlayIcon } from "./Store";
4
5
  import { BagIcon } from "./Bag";
5
6
  import { BanIcon } from "./Ban";
7
+ import { BlockedGuestsIcon } from "./BlockedGuests";
6
8
  import { BellIcon } from "./Bell";
7
9
  import { BuildingIcon } from "./Building";
8
10
  import { CalendarIcon } from "./Calendar";
@@ -88,6 +90,7 @@ import { StarFilledIcon } from "./StarFilled";
88
90
  import { StarOutlineIcon } from "./StarOutline";
89
91
  import { SunIcon } from "./Sun";
90
92
  import { TableViewIcon } from "./TableView";
93
+ import { TotalGuestsIcon } from "./TotalGuests";
91
94
  import { UserIcon } from "./User";
92
95
  import { UsersAltIcon } from "./UsersAlt";
93
96
  import { VideoIcon } from "./Video";
@@ -97,12 +100,14 @@ import { ZoomOutIcon } from "./ZoomOut";
97
100
  import type { IconComponent } from "./types";
98
101
 
99
102
  export const icons = {
103
+ activeGuests: ActiveGuestsIcon,
100
104
  alertTriangle: AlertTriangleIcon,
101
105
  areaExpand: AreaExpandIcon,
102
106
  apple: AppleIcon,
103
107
  arrowRight: ArrowRightIcon,
104
108
  bag: BagIcon,
105
109
  ban: BanIcon,
110
+ blockedGuests: BlockedGuestsIcon,
106
111
  bell: BellIcon,
107
112
  building: BuildingIcon,
108
113
  calendar: CalendarIcon,
@@ -178,6 +183,7 @@ export const icons = {
178
183
  starOutline: StarOutlineIcon,
179
184
  sun: SunIcon,
180
185
  tableView: TableViewIcon,
186
+ totalGuests: TotalGuestsIcon,
181
187
  tooltipArrow: TooltipArrowIcon,
182
188
  trash: TrashIcon,
183
189
  user: UserIcon,
@@ -268,6 +274,9 @@ export const iconGroups = {
268
274
  "clock",
269
275
  "clockFilled",
270
276
  "guests",
277
+ "totalGuests",
278
+ "activeGuests",
279
+ "blockedGuests",
271
280
  "lock",
272
281
  "noPets",
273
282
  "noSmoking",
package/src/index.ts CHANGED
@@ -218,6 +218,9 @@ export {
218
218
  TableViewIcon,
219
219
  UserIcon,
220
220
  UsersAltIcon,
221
+ TotalGuestsIcon,
222
+ ActiveGuestsIcon,
223
+ BlockedGuestsIcon,
221
224
  VideoIcon,
222
225
  VideoOffIcon,
223
226
  WasherIcon,
@@ -156,7 +156,7 @@ export const selectTypography = {
156
156
  },
157
157
  } as const;
158
158
 
159
- /** Avatar name / email / menu-item typography — 100% line-height, 0 letter-spacing. */
159
+ /** Avatar name / email / menu-item typography — compact line heights, 0 letter-spacing. */
160
160
  export const avatarTypography = {
161
161
  name: {
162
162
  fontFamily: fonts.sans,
@@ -176,7 +176,7 @@ export const avatarTypography = {
176
176
  fontFamily: fonts.sans,
177
177
  fontSize: 12,
178
178
  fontWeight: "600" as const,
179
- lineHeight: 12,
179
+ lineHeight: 20,
180
180
  letterSpacing: 0,
181
181
  },
182
182
  } as const;