reshaped 3.4.0 → 3.4.2

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 (69) hide show
  1. package/CHANGELOG.md +3 -32
  2. package/dist/bundle.css +1 -1
  3. package/dist/bundle.js +11 -11
  4. package/dist/cjs/cli/theming/index.js +0 -1
  5. package/dist/cjs/themes/_generator/definitions/figma.d.ts +1 -1
  6. package/dist/cjs/themes/_generator/definitions/figma.js +6 -5
  7. package/dist/cjs/themes/_generator/utilities/color.js +11 -11
  8. package/dist/cjs/themes/_generator/utilities/generateBackgroundColors.js +0 -2
  9. package/dist/cjs/themes/_generator/utilities/generateColors.js +1 -1
  10. package/dist/cjs/themes/_generator/utilities/generateUnits.js +0 -1
  11. package/dist/cjs/themes/_generator/utilities/mergeDeep.js +1 -1
  12. package/dist/cjs/themes/_generator/utilities/resolveTokenReference.js +2 -0
  13. package/dist/cjs/themes/figma/tailwind.css +1 -1
  14. package/dist/cjs/themes/figma/theme.css +1 -1
  15. package/dist/cli/theming/index.js +0 -1
  16. package/dist/components/Actionable/Actionable.js +2 -0
  17. package/dist/components/Autocomplete/Autocomplete.js +1 -0
  18. package/dist/components/Calendar/Calendar.module.css +1 -1
  19. package/dist/components/Calendar/Calendar.types.d.ts +4 -4
  20. package/dist/components/Calendar/CalendarControlled.js +2 -2
  21. package/dist/components/Calendar/CalendarDate.js +29 -11
  22. package/dist/components/Calendar/CalendarMonth.js +2 -6
  23. package/dist/components/Calendar/tests/Calendar.stories.d.ts +19 -4
  24. package/dist/components/Calendar/tests/Calendar.stories.js +237 -26
  25. package/dist/components/Card/Card.d.ts +1 -1
  26. package/dist/components/Card/Card.js +2 -4
  27. package/dist/components/Card/tests/Card.stories.d.ts +1 -1
  28. package/dist/components/Card/tests/Card.test.stories.d.ts +1 -1
  29. package/dist/components/Carousel/Carousel.js +1 -2
  30. package/dist/components/Carousel/Carousel.types.d.ts +1 -5
  31. package/dist/components/Carousel/Carousel.types.js +1 -5
  32. package/dist/components/Carousel/CarouselControl.js +2 -3
  33. package/dist/components/FormControl/FormControl.context.d.ts +4 -0
  34. package/dist/components/Grid/Grid.js +8 -2
  35. package/dist/components/Icon/Icon.js +1 -3
  36. package/dist/components/PinField/PinFieldControlled.js +0 -1
  37. package/dist/components/Resizable/Resizable.js +1 -0
  38. package/dist/components/Slider/SliderControlled.js +9 -3
  39. package/dist/components/Stepper/Stepper.js +7 -2
  40. package/dist/components/Tabs/TabsList.js +7 -3
  41. package/dist/components/Text/Text.js +2 -4
  42. package/dist/components/Timeline/Timeline.js +1 -1
  43. package/dist/components/Toast/ToastProvider.js +8 -4
  44. package/dist/components/View/View.js +10 -5
  45. package/dist/components/_private/Flyout/FlyoutContent.js +1 -1
  46. package/dist/components/_private/Flyout/FlyoutTrigger.js +1 -1
  47. package/dist/components/_private/Flyout/useFlyout.js +3 -1
  48. package/dist/components/_private/Portal/Portal.d.ts +1 -1
  49. package/dist/config/tailwind.d.ts +1 -1
  50. package/dist/hooks/_private/useOnClickOutside.d.ts +1 -1
  51. package/dist/hooks/_private/useOnClickOutside.js +26 -10
  52. package/dist/hooks/_private/useSingletonHotkeys.js +2 -0
  53. package/dist/hooks/useResponsiveClientValue.d.ts +1 -1
  54. package/dist/themes/_generator/definitions/figma.d.ts +1 -1
  55. package/dist/themes/_generator/definitions/figma.js +6 -5
  56. package/dist/themes/_generator/utilities/color.js +11 -11
  57. package/dist/themes/_generator/utilities/generateBackgroundColors.js +0 -2
  58. package/dist/themes/_generator/utilities/generateColors.js +1 -1
  59. package/dist/themes/_generator/utilities/generateUnits.js +0 -1
  60. package/dist/themes/_generator/utilities/mergeDeep.js +1 -1
  61. package/dist/themes/_generator/utilities/resolveTokenReference.js +2 -0
  62. package/dist/themes/figma/tailwind.css +1 -1
  63. package/dist/themes/figma/theme.css +1 -1
  64. package/dist/types/global.d.ts +2 -2
  65. package/dist/utilities/helpers.js +4 -1
  66. package/dist/utilities/platform.js +1 -0
  67. package/package.json +36 -40
  68. package/dist/components/Calendar/tests/Calendar.test.stories.d.ts +0 -26
  69. package/dist/components/Calendar/tests/Calendar.test.stories.js +0 -161
@@ -28,7 +28,6 @@ const transformDefinition = (name, definition, options) => {
28
28
  if (code.media)
29
29
  fs_1.default.writeFileSync(themeMediaPath, code.media);
30
30
  const logOutput = `Compiled ${chalk_1.default.bold(name)} theme${isFragment ? " fragment" : ""}`;
31
- // eslint-disable-next-line no-console
32
31
  console.log(chalk_1.default.green(logOutput));
33
32
  };
34
33
  const addThemeFragment = (name, definition, options) => {
@@ -1,3 +1,3 @@
1
1
  import type { ThemeDefinition } from "../tokens/types";
2
- declare const theme: ThemeDefinition;
2
+ declare const theme: Partial<ThemeDefinition>;
3
3
  export default theme;
@@ -101,7 +101,6 @@ const theme = {
101
101
  radiusMedium: { px: 4 },
102
102
  radiusLarge: { px: 4 },
103
103
  },
104
- // @ts-ignore
105
104
  color: {
106
105
  foregroundNeutral: { hex: "#191919", hexDark: "#FFFFFF" },
107
106
  foregroundNeutralFaded: { hex: "#474747", hexDark: "#B2B2B2" },
@@ -109,20 +108,19 @@ const theme = {
109
108
  foregroundPrimary: { hex: "#007BE5", hexDark: "#7CC4F8" },
110
109
  foregroundPositive: { hex: "#009951", hexDark: "#79D297" },
111
110
  foregroundCritical: { hex: "#DC3412", hexDark: "#FCA397" },
111
+ foregroundWarning: { hex: "#7b6305", hexDark: "#b4920c" },
112
112
  backgroundNeutral: { hex: "#DFE2EA", hexDark: "#444444" },
113
113
  backgroundNeutralFaded: { hex: "#F5F5F5", hexDark: "#383838" },
114
- backgroundNeutralHighlighted: { hex: "#D4D8E3", hexDark: "#525252" },
115
114
  backgroundDisabled: { hex: "#e4e4e4", hexDark: "#474747" },
116
115
  backgroundDisabledFaded: { hex: "#F5F5F5", hexDark: "#3A3A3A" },
117
116
  backgroundPrimary: { hex: "#0D99FF", hexDark: "#0C8CE9" },
118
- backgroundPrimaryHighlighted: { hex: "#007BE5", hexDark: "#0A6DC2" },
119
117
  backgroundPrimaryFaded: { hex: "#E5F4FF", hexDark: "#394360" },
120
118
  backgroundPositive: { hex: "#14AE5C", hexDark: "#198F51" },
121
119
  backgroundPositiveFaded: { hex: "#DAECDF", hexDark: "#3d5749" },
122
- backgroundPositiveHighlighted: { hex: "#009951", hexDark: "#078348" },
123
120
  backgroundCritical: { hex: "#F24822", hexDark: "#E03E1A" },
124
121
  backgroundCriticalFaded: { hex: "#FFE2E0", hexDark: "#60332A" },
125
- backgroundCriticalHighlighted: { hex: "#DC3412", hexDark: "#C4381C" },
122
+ backgroundWarning: { hex: "#facc15", hexDark: "#f1c512" },
123
+ backgroundWarningFaded: { hex: "#fffae9", hexDark: "#2c271f" },
126
124
  borderNeutral: { hex: "#E6E6E6", hexDark: "#444444" },
127
125
  borderNeutralFaded: { hex: "#E6E6E6", hexDark: "#444444" },
128
126
  borderDisabled: { hex: "#E6E6E6", hexDark: "#3E3E3E" },
@@ -132,12 +130,15 @@ const theme = {
132
130
  borderPositiveFaded: { hex: "#BBDDC6", hexDark: "#086338" },
133
131
  borderCritical: { hex: "#DC3412", hexDark: "#FCA397" },
134
132
  borderCriticalFaded: { hex: "#FFC7C2", hexDark: "#803226" },
133
+ borderWarning: { hex: "#cfa90f", hexDark: "#b4920a" },
134
+ borderWarningFaded: { hex: "#ece2c4", hexDark: "#453c1e" },
135
135
  backgroundPage: { hex: "#FFFFFF", hexDark: "#2C2C2C" },
136
136
  backgroundPageFaded: { hex: "#FAFAFA", hexDark: "#1E1E1E" },
137
137
  backgroundElevationBase: { hex: "#FFFFFF", hexDark: "#2C2C2C" },
138
138
  backgroundElevationRaised: { hex: "#FFFFFF", hexDark: "#2C2C2C" },
139
139
  backgroundElevationOverlay: { hex: "#FFFFFF", hexDark: "#2C2C2C" },
140
140
  onBackgroundPrimary: { hex: "#FFFFFF" },
141
+ brand: { hex: "#0D99FF" },
141
142
  black: { hex: "#000000" },
142
143
  white: { hex: "#FFFFFF" },
143
144
  },
@@ -338,17 +338,17 @@ const GREEN = 0.7152;
338
338
  const BLUE = 0.0722;
339
339
  const GAMMA = 2.4;
340
340
  function luminanceWCAG(r, g, b) {
341
- var a = [r, g, b].map((v) => {
341
+ const a = [r, g, b].map((v) => {
342
342
  v /= 255;
343
343
  return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, GAMMA);
344
344
  });
345
345
  return a[0] * RED + a[1] * GREEN + a[2] * BLUE;
346
346
  }
347
347
  function contrastWCAG(rgb1, rgb2) {
348
- var lum1 = luminanceWCAG(...rgb1);
349
- var lum2 = luminanceWCAG(...rgb2);
350
- var brightest = Math.max(lum1, lum2);
351
- var darkest = Math.min(lum1, lum2);
348
+ const lum1 = luminanceWCAG(...rgb1);
349
+ const lum2 = luminanceWCAG(...rgb2);
350
+ const brightest = Math.max(lum1, lum2);
351
+ const darkest = Math.min(lum1, lum2);
352
352
  return (brightest + 0.05) / (darkest + 0.05);
353
353
  }
354
354
  const getOnColorWCAG = (args) => {
@@ -370,7 +370,7 @@ function luminanceAPCA({ r, g, b }) {
370
370
  }
371
371
  function contrastAPCA(backgroundLuminance, textLuminance) {
372
372
  // Calculate the contrast based on APCA
373
- let Lc = textLuminance - backgroundLuminance;
373
+ const Lc = textLuminance - backgroundLuminance;
374
374
  return Math.abs(Lc); // Return the absolute value of contrast
375
375
  }
376
376
  const getOnColorAPCA = (args) => {
@@ -385,12 +385,12 @@ const getOnColorAPCA = (args) => {
385
385
  b: (1 - bgAlpha) * baseColor.b + bgAlpha * bgColor.b,
386
386
  };
387
387
  // Calculate luminance for background and for white & black
388
- let backgroundLuminance = luminanceAPCA({ r, g, b });
389
- let whiteLuminance = luminanceAPCA({ r: 255, g: 255, b: 255 });
390
- let blackLuminance = luminanceAPCA({ r: 0, g: 0, b: 0 });
388
+ const backgroundLuminance = luminanceAPCA({ r, g, b });
389
+ const whiteLuminance = luminanceAPCA({ r: 255, g: 255, b: 255 });
390
+ const blackLuminance = luminanceAPCA({ r: 0, g: 0, b: 0 });
391
391
  // Calculate contrast
392
- let contrastWithWhite = contrastAPCA(backgroundLuminance, whiteLuminance);
393
- let contrastWithBlack = contrastAPCA(backgroundLuminance, blackLuminance);
392
+ const contrastWithWhite = contrastAPCA(backgroundLuminance, whiteLuminance);
393
+ const contrastWithBlack = contrastAPCA(backgroundLuminance, blackLuminance);
394
394
  // Choose the color with higher contrast
395
395
  return contrastWithWhite > contrastWithBlack ? lightHexColor : darkHexColor;
396
396
  };
@@ -41,7 +41,6 @@ const generateBackgroundColors = (definition, themeOptions) => {
41
41
  algorithm: themeOptions?.colorContrastAlgorithm,
42
42
  ...onColorHexMap,
43
43
  });
44
- // eslint-disable-next-line no-param-reassign
45
44
  definition.color[generatedForegroundName] = {
46
45
  hex,
47
46
  hexDark: hex !== hexDark ? hexDark : undefined,
@@ -50,7 +49,6 @@ const generateBackgroundColors = (definition, themeOptions) => {
50
49
  if (needsRGB) {
51
50
  const rgb = (0, color_1.hexToRgb)(bgToken.hex);
52
51
  const rgbDark = bgToken.hexDark && (0, color_1.hexToRgb)(bgToken.hexDark);
53
- // eslint-disable-next-line no-param-reassign
54
52
  definition.color[generatedRGBName] = {
55
53
  hex: `${rgb.r}, ${rgb.g}, ${rgb.b}`,
56
54
  hexDark: rgbDark && `${rgbDark.r}, ${rgbDark.g}, ${rgbDark.b}`,
@@ -4,7 +4,7 @@ const fn_1 = require("culori/require");
4
4
  const hexToOkHsl = (hex) => {
5
5
  const rgb = (0, fn_1.parseHex)(hex);
6
6
  if (!rgb)
7
- throw new Error(`[Reshaped] Can\'t generate rgb from ${hex} color`);
7
+ throw new Error(`[Reshaped] Can't generate rgb from ${hex} color`);
8
8
  const lrgb = (0, fn_1.convertRgbToLrgb)(rgb);
9
9
  const oklab = (0, fn_1.convertLrgbToOklab)(lrgb);
10
10
  const okhsl = (0, fn_1.convertOklabToOkhsl)(oklab);
@@ -7,7 +7,6 @@ const generateUnits = (definition) => {
7
7
  return;
8
8
  for (let i = 1; i <= 10; i += 1) {
9
9
  const generatedName = `x${i}`;
10
- // eslint-disable-next-line no-param-reassign
11
10
  definition.unit[generatedName] = {
12
11
  px: baseValue * i,
13
12
  };
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const isObject = (item) => {
4
- return item && typeof item === "object" && !Array.isArray(item);
4
+ return !!item && typeof item === "object" && !Array.isArray(item);
5
5
  };
6
6
  const mergeDeep = (target, ...sources) => {
7
7
  if (!sources.length)
@@ -6,6 +6,8 @@ const resolveTokenReference = (theme, tokenType, ref) => {
6
6
  Object.keys(tokenGroup).forEach((tokenName) => {
7
7
  if (referencedToken)
8
8
  return;
9
+ // Relaxed runtime group resolving
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
11
  if (tokenName === ref)
10
12
  referencedToken = tokenGroup[tokenName];
11
13
  });
@@ -1 +1 @@
1
- @theme{--background-color-primary:var(--rs-color-background-primary);--background-color-primary-faded:var(--rs-color-background-primary-faded);--border-color-primary:var(--rs-color-border-primary);--border-color-primary-faded:var(--rs-color-border-primary-faded);--text-color-primary:var(--rs-color-foreground-primary);--background-color-critical:var(--rs-color-background-critical);--background-color-critical-faded:var(--rs-color-background-critical-faded);--border-color-critical:var(--rs-color-border-critical);--border-color-critical-faded:var(--rs-color-border-critical-faded);--text-color-critical:var(--rs-color-foreground-critical);--background-color-warning:var(--rs-color-background-warning);--background-color-warning-faded:var(--rs-color-background-warning-faded);--border-color-warning:var(--rs-color-border-warning);--border-color-warning-faded:var(--rs-color-border-warning-faded);--text-color-warning:var(--rs-color-foreground-warning);--background-color-positive:var(--rs-color-background-positive);--background-color-positive-faded:var(--rs-color-background-positive-faded);--border-color-positive:var(--rs-color-border-positive);--border-color-positive-faded:var(--rs-color-border-positive-faded);--text-color-positive:var(--rs-color-foreground-positive);--background-color-neutral:var(--rs-color-background-neutral);--background-color-neutral-faded:var(--rs-color-background-neutral-faded);--border-color-neutral:var(--rs-color-border-neutral);--border-color-neutral-faded:var(--rs-color-border-neutral-faded);--text-color-neutral:var(--rs-color-foreground-neutral);--text-color-neutral-faded:var(--rs-color-foreground-neutral-faded);--background-color-disabled:var(--rs-color-background-disabled);--background-color-disabled-faded:var(--rs-color-background-disabled-faded);--border-color-disabled:var(--rs-color-border-disabled);--text-color-disabled:var(--rs-color-foreground-disabled);--background-color-elevation-base:var(--rs-color-background-elevation-base);--background-color-elevation-raised:var(--rs-color-background-elevation-raised);--background-color-elevation-overlay:var(--rs-color-background-elevation-overlay);--background-color-page:var(--rs-color-background-page);--background-color-page-faded:var(--rs-color-background-page-faded);--color-brand:var(--rs-color-brand);--color-white:var(--rs-color-white);--color-black:var(--rs-color-black);--background-color-neutral-highlighted:var(--rs-color-background-neutral-highlighted);--background-color-primary-highlighted:var(--rs-color-background-primary-highlighted);--background-color-positive-highlighted:var(--rs-color-background-positive-highlighted);--background-color-critical-highlighted:var(--rs-color-background-critical-highlighted);--text-color-on-primary:var(--rs-color-on-background-primary);--text-color-on-critical:var(--rs-color-on-background-critical);--text-color-on-warning:var(--rs-color-on-background-warning);--text-color-on-positive:var(--rs-color-on-background-positive);--text-color-on-neutral:var(--rs-color-on-background-neutral);--text-color-on-brand:var(--rs-color-on-brand);--radius-small:var(--rs-radius-small);--radius-medium:var(--rs-radius-medium);--radius-large:var(--rs-radius-large);--spacing-0:0px;--spacing-x1:var(--rs-unit-x1);--spacing-x2:var(--rs-unit-x2);--spacing-x3:var(--rs-unit-x3);--spacing-x4:var(--rs-unit-x4);--spacing-x5:var(--rs-unit-x5);--spacing-x6:var(--rs-unit-x6);--spacing-x7:var(--rs-unit-x7);--spacing-x8:var(--rs-unit-x8);--spacing-x9:var(--rs-unit-x9);--spacing-x10:var(--rs-unit-x10);--shadow-raised:var(--rs-shadow-raised);--shadow-overlay:var(--rs-shadow-overlay);--breakpoint-m:660px;--breakpoint-l:900px;--breakpoint-xl:1280px}
1
+ @theme{--background-color-primary:var(--rs-color-background-primary);--background-color-primary-faded:var(--rs-color-background-primary-faded);--border-color-primary:var(--rs-color-border-primary);--border-color-primary-faded:var(--rs-color-border-primary-faded);--text-color-primary:var(--rs-color-foreground-primary);--background-color-critical:var(--rs-color-background-critical);--background-color-critical-faded:var(--rs-color-background-critical-faded);--border-color-critical:var(--rs-color-border-critical);--border-color-critical-faded:var(--rs-color-border-critical-faded);--text-color-critical:var(--rs-color-foreground-critical);--background-color-warning:var(--rs-color-background-warning);--background-color-warning-faded:var(--rs-color-background-warning-faded);--border-color-warning:var(--rs-color-border-warning);--border-color-warning-faded:var(--rs-color-border-warning-faded);--text-color-warning:var(--rs-color-foreground-warning);--background-color-positive:var(--rs-color-background-positive);--background-color-positive-faded:var(--rs-color-background-positive-faded);--border-color-positive:var(--rs-color-border-positive);--border-color-positive-faded:var(--rs-color-border-positive-faded);--text-color-positive:var(--rs-color-foreground-positive);--background-color-neutral:var(--rs-color-background-neutral);--background-color-neutral-faded:var(--rs-color-background-neutral-faded);--border-color-neutral:var(--rs-color-border-neutral);--border-color-neutral-faded:var(--rs-color-border-neutral-faded);--text-color-neutral:var(--rs-color-foreground-neutral);--text-color-neutral-faded:var(--rs-color-foreground-neutral-faded);--background-color-disabled:var(--rs-color-background-disabled);--background-color-disabled-faded:var(--rs-color-background-disabled-faded);--border-color-disabled:var(--rs-color-border-disabled);--text-color-disabled:var(--rs-color-foreground-disabled);--background-color-elevation-base:var(--rs-color-background-elevation-base);--background-color-elevation-raised:var(--rs-color-background-elevation-raised);--background-color-elevation-overlay:var(--rs-color-background-elevation-overlay);--background-color-page:var(--rs-color-background-page);--background-color-page-faded:var(--rs-color-background-page-faded);--color-brand:var(--rs-color-brand);--color-white:var(--rs-color-white);--color-black:var(--rs-color-black);--text-color-on-primary:var(--rs-color-on-background-primary);--text-color-on-critical:var(--rs-color-on-background-critical);--text-color-on-warning:var(--rs-color-on-background-warning);--text-color-on-positive:var(--rs-color-on-background-positive);--text-color-on-neutral:var(--rs-color-on-background-neutral);--text-color-on-brand:var(--rs-color-on-brand);--radius-small:var(--rs-radius-small);--radius-medium:var(--rs-radius-medium);--radius-large:var(--rs-radius-large);--spacing-0:0px;--spacing-x1:var(--rs-unit-x1);--spacing-x2:var(--rs-unit-x2);--spacing-x3:var(--rs-unit-x3);--spacing-x4:var(--rs-unit-x4);--spacing-x5:var(--rs-unit-x5);--spacing-x6:var(--rs-unit-x6);--spacing-x7:var(--rs-unit-x7);--spacing-x8:var(--rs-unit-x8);--spacing-x9:var(--rs-unit-x9);--spacing-x10:var(--rs-unit-x10);--shadow-raised:var(--rs-shadow-raised);--shadow-overlay:var(--rs-shadow-overlay);--breakpoint-m:660px;--breakpoint-l:900px;--breakpoint-xl:1280px}
@@ -1 +1 @@
1
- [data-rs-theme=figma]{--rs-font-family-title:Inter,BlinkMacSystemFont,-apple-system,Roboto,Helvetica,Arial,sans-serif;--rs-font-family-body:Inter,BlinkMacSystemFont,-apple-system,Roboto,Helvetica,Arial,sans-serif;--rs-font-weight-regular:400;--rs-font-weight-medium:500;--rs-font-weight-semibold:600;--rs-font-weight-bold:700;--rs-font-weight-extrabold:800;--rs-font-weight-black:900;--rs-font-size-title-1:5rem;--rs-line-height-title-1:5.25rem;--rs-font-family-title-1:var(--rs-font-family-title);--rs-font-weight-title-1:var(--rs-font-weight-semibold);--rs-letter-spacing-title-1:normal;--rs-font-size-title-2:4rem;--rs-line-height-title-2:4.25rem;--rs-font-family-title-2:var(--rs-font-family-title);--rs-font-weight-title-2:var(--rs-font-weight-semibold);--rs-letter-spacing-title-2:normal;--rs-font-size-title-3:3.5rem;--rs-line-height-title-3:3.75rem;--rs-font-family-title-3:var(--rs-font-family-title);--rs-font-weight-title-3:var(--rs-font-weight-semibold);--rs-letter-spacing-title-3:normal;--rs-font-size-title-4:2.5rem;--rs-line-height-title-4:2.75rem;--rs-font-family-title-4:var(--rs-font-family-title);--rs-font-weight-title-4:var(--rs-font-weight-semibold);--rs-letter-spacing-title-4:normal;--rs-font-size-title-5:2.25rem;--rs-line-height-title-5:2.5rem;--rs-font-family-title-5:var(--rs-font-family-title);--rs-font-weight-title-5:var(--rs-font-weight-semibold);--rs-letter-spacing-title-5:normal;--rs-font-size-title-6:1.5rem;--rs-line-height-title-6:1.75rem;--rs-font-family-title-6:var(--rs-font-family-title);--rs-font-weight-title-6:var(--rs-font-weight-semibold);--rs-letter-spacing-title-6:normal;--rs-font-size-featured-1:1.375rem;--rs-line-height-featured-1:1.75rem;--rs-font-family-featured-1:var(--rs-font-family-body);--rs-letter-spacing-featured-1:normal;--rs-font-size-featured-2:1.25rem;--rs-line-height-featured-2:1.75rem;--rs-font-family-featured-2:var(--rs-font-family-body);--rs-letter-spacing-featured-2:normal;--rs-font-size-featured-3:1.125rem;--rs-line-height-featured-3:1.5rem;--rs-font-family-featured-3:var(--rs-font-family-body);--rs-letter-spacing-featured-3:normal;--rs-font-size-body-1:0.875rem;--rs-line-height-body-1:1.25rem;--rs-font-family-body-1:var(--rs-font-family-body);--rs-letter-spacing-body-1:normal;--rs-font-size-body-2:0.8125rem;--rs-line-height-body-2:1.25rem;--rs-font-family-body-2:var(--rs-font-family-body);--rs-letter-spacing-body-2:normal;--rs-font-size-body-3:0.6875rem;--rs-line-height-body-3:1rem;--rs-font-family-body-3:var(--rs-font-family-body);--rs-letter-spacing-body-3:normal;--rs-font-size-caption-1:0.6875rem;--rs-line-height-caption-1:1rem;--rs-font-family-caption-1:var(--rs-font-family-body);--rs-letter-spacing-caption-1:normal;--rs-font-size-caption-2:0.625rem;--rs-line-height-caption-2:0.75rem;--rs-font-family-caption-2:var(--rs-font-family-body);--rs-letter-spacing-caption-2:normal;--rs-unit-base:4px;--rs-unit-radius-small:4px;--rs-unit-radius-medium:4px;--rs-unit-radius-large:4px;--rs-unit-x1:4px;--rs-unit-x2:8px;--rs-unit-x3:12px;--rs-unit-x4:16px;--rs-unit-x5:20px;--rs-unit-x6:24px;--rs-unit-x7:28px;--rs-unit-x8:32px;--rs-unit-x9:36px;--rs-unit-x10:40px;--rs-radius-small:4px;--rs-radius-medium:8px;--rs-radius-large:12px;--rs-color-brand:#5a58f2;--rs-color-white:#fff;--rs-color-black:#000;--rs-color-on-background-primary:#fff;--rs-color-on-background-critical:#000;--rs-color-on-background-warning:#000;--rs-color-on-background-positive:#000;--rs-color-on-brand:#fff;--rs-color-rgb-white:255,255,255;--rs-color-rgb-black:0,0,0;--rs-duration-rapid:100ms;--rs-duration-fast:200ms;--rs-duration-medium:300ms;--rs-duration-slow:400ms;--rs-easing-standard:cubic-bezier(0.4,0,0.2,1);--rs-easing-accelerate:cubic-bezier(0.4,0,1,1);--rs-easing-decelerate:cubic-bezier(0,0,0.2,1);--rs-shadow-raised:0px 1px 3px 0px rgba(0,0,0,.15);--rs-shadow-overlay:0px 10px 24px 0px rgba(0,0,0,.1),0px 2px 5px 0px rgba(0,0,0,.04);--rs-viewport-m-min:660;--rs-viewport-l-min:900;--rs-viewport-xl-min:1280}[data-rs-theme=figma][data-rs-color-mode=light]{--rs-color-background-primary:#0d99ff;--rs-color-background-primary-faded:#e5f4ff;--rs-color-border-primary:#007be5;--rs-color-border-primary-faded:#bde3ff;--rs-color-foreground-primary:#007be5;--rs-color-background-critical:#f24822;--rs-color-background-critical-faded:#ffe2e0;--rs-color-border-critical:#dc3412;--rs-color-border-critical-faded:#ffc7c2;--rs-color-foreground-critical:#dc3412;--rs-color-background-warning:#facc15;--rs-color-background-warning-faded:#fffae9;--rs-color-border-warning:#cfa90f;--rs-color-border-warning-faded:#ece2c4;--rs-color-foreground-warning:#7b6305;--rs-color-background-positive:#14ae5c;--rs-color-background-positive-faded:#daecdf;--rs-color-border-positive:#009951;--rs-color-border-positive-faded:#bbddc6;--rs-color-foreground-positive:#009951;--rs-color-background-neutral:#dfe2ea;--rs-color-background-neutral-faded:#f5f5f5;--rs-color-border-neutral:#e6e6e6;--rs-color-border-neutral-faded:#e6e6e6;--rs-color-foreground-neutral:#191919;--rs-color-foreground-neutral-faded:#474747;--rs-color-background-disabled:#e4e4e4;--rs-color-background-disabled-faded:#f5f5f5;--rs-color-border-disabled:#e6e6e6;--rs-color-foreground-disabled:#b2b2b2;--rs-color-background-elevation-base:#fff;--rs-color-background-elevation-raised:#fff;--rs-color-background-elevation-overlay:#fff;--rs-color-background-page:#fff;--rs-color-background-page-faded:#fafafa;--rs-color-background-neutral-highlighted:#d4d8e3;--rs-color-background-primary-highlighted:#007be5;--rs-color-background-positive-highlighted:#009951;--rs-color-background-critical-highlighted:#dc3412;--rs-color-rgb-background-primary:13,153,255;--rs-color-rgb-background-primary-faded:229,244,255;--rs-color-rgb-background-critical:242,72,34;--rs-color-rgb-background-critical-faded:255,226,224;--rs-color-rgb-background-warning:250,204,21;--rs-color-rgb-background-warning-faded:255,250,233;--rs-color-rgb-background-positive:20,174,92;--rs-color-rgb-background-positive-faded:218,236,223;--rs-color-on-background-neutral:#000;--rs-color-rgb-background-neutral:223,226,234;--rs-color-rgb-background-neutral-faded:245,245,245;--rs-color-rgb-background-disabled:228,228,228;--rs-color-rgb-background-disabled-faded:245,245,245;--rs-color-rgb-background-elevation-base:255,255,255;--rs-color-rgb-background-elevation-raised:255,255,255;--rs-color-rgb-background-elevation-overlay:255,255,255;--rs-color-rgb-background-page:255,255,255;--rs-color-rgb-background-page-faded:250,250,250;--rs-color-rgb-background-neutral-highlighted:212,216,227;--rs-color-rgb-background-primary-highlighted:0,123,229;--rs-color-rgb-background-positive-highlighted:0,153,81;--rs-color-rgb-background-critical-highlighted:220,52,18}[data-rs-theme=figma][data-rs-color-mode=dark]{--rs-color-background-primary:#0c8ce9;--rs-color-background-primary-faded:#394360;--rs-color-border-primary:#7cc4f8;--rs-color-border-primary-faded:#2a4d72;--rs-color-foreground-primary:#7cc4f8;--rs-color-background-critical:#e03e1a;--rs-color-background-critical-faded:#60332a;--rs-color-border-critical:#fca397;--rs-color-border-critical-faded:#803226;--rs-color-foreground-critical:#fca397;--rs-color-background-warning:#f1c512;--rs-color-background-warning-faded:#2c271f;--rs-color-border-warning:#b4920a;--rs-color-border-warning-faded:#453c1e;--rs-color-foreground-warning:#b4920c;--rs-color-background-positive:#198f51;--rs-color-background-positive-faded:#3d5749;--rs-color-border-positive:#79d297;--rs-color-border-positive-faded:#086338;--rs-color-foreground-positive:#79d297;--rs-color-background-neutral:#444;--rs-color-background-neutral-faded:#383838;--rs-color-border-neutral:#444;--rs-color-border-neutral-faded:#444;--rs-color-foreground-neutral:#fff;--rs-color-foreground-neutral-faded:#b2b2b2;--rs-color-background-disabled:#474747;--rs-color-background-disabled-faded:#3a3a3a;--rs-color-border-disabled:#3e3e3e;--rs-color-foreground-disabled:#656565;--rs-color-background-elevation-base:#2c2c2c;--rs-color-background-elevation-raised:#2c2c2c;--rs-color-background-elevation-overlay:#2c2c2c;--rs-color-background-page:#2c2c2c;--rs-color-background-page-faded:#1e1e1e;--rs-color-background-neutral-highlighted:#525252;--rs-color-background-primary-highlighted:#0a6dc2;--rs-color-background-positive-highlighted:#078348;--rs-color-background-critical-highlighted:#c4381c;--rs-color-rgb-background-primary:12,140,233;--rs-color-rgb-background-primary-faded:57,67,96;--rs-color-rgb-background-critical:224,62,26;--rs-color-rgb-background-critical-faded:96,51,42;--rs-color-rgb-background-warning:241,197,18;--rs-color-rgb-background-warning-faded:44,39,31;--rs-color-rgb-background-positive:25,143,81;--rs-color-rgb-background-positive-faded:61,87,73;--rs-color-on-background-neutral:#fff;--rs-color-rgb-background-neutral:68,68,68;--rs-color-rgb-background-neutral-faded:56,56,56;--rs-color-rgb-background-disabled:71,71,71;--rs-color-rgb-background-disabled-faded:58,58,58;--rs-color-rgb-background-elevation-base:44,44,44;--rs-color-rgb-background-elevation-raised:44,44,44;--rs-color-rgb-background-elevation-overlay:44,44,44;--rs-color-rgb-background-page:44,44,44;--rs-color-rgb-background-page-faded:30,30,30;--rs-color-rgb-background-neutral-highlighted:82,82,82;--rs-color-rgb-background-primary-highlighted:10,109,194;--rs-color-rgb-background-positive-highlighted:7,131,72;--rs-color-rgb-background-critical-highlighted:196,56,28}
1
+ [data-rs-theme=figma]{--rs-font-family-title:Inter,BlinkMacSystemFont,-apple-system,Roboto,Helvetica,Arial,sans-serif;--rs-font-family-body:Inter,BlinkMacSystemFont,-apple-system,Roboto,Helvetica,Arial,sans-serif;--rs-font-weight-regular:400;--rs-font-weight-medium:500;--rs-font-weight-semibold:600;--rs-font-weight-bold:700;--rs-font-weight-extrabold:800;--rs-font-weight-black:900;--rs-font-size-title-1:5rem;--rs-line-height-title-1:5.25rem;--rs-font-family-title-1:var(--rs-font-family-title);--rs-font-weight-title-1:var(--rs-font-weight-semibold);--rs-letter-spacing-title-1:normal;--rs-font-size-title-2:4rem;--rs-line-height-title-2:4.25rem;--rs-font-family-title-2:var(--rs-font-family-title);--rs-font-weight-title-2:var(--rs-font-weight-semibold);--rs-letter-spacing-title-2:normal;--rs-font-size-title-3:3.5rem;--rs-line-height-title-3:3.75rem;--rs-font-family-title-3:var(--rs-font-family-title);--rs-font-weight-title-3:var(--rs-font-weight-semibold);--rs-letter-spacing-title-3:normal;--rs-font-size-title-4:2.5rem;--rs-line-height-title-4:2.75rem;--rs-font-family-title-4:var(--rs-font-family-title);--rs-font-weight-title-4:var(--rs-font-weight-semibold);--rs-letter-spacing-title-4:normal;--rs-font-size-title-5:2.25rem;--rs-line-height-title-5:2.5rem;--rs-font-family-title-5:var(--rs-font-family-title);--rs-font-weight-title-5:var(--rs-font-weight-semibold);--rs-letter-spacing-title-5:normal;--rs-font-size-title-6:1.5rem;--rs-line-height-title-6:1.75rem;--rs-font-family-title-6:var(--rs-font-family-title);--rs-font-weight-title-6:var(--rs-font-weight-semibold);--rs-letter-spacing-title-6:normal;--rs-font-size-featured-1:1.375rem;--rs-line-height-featured-1:1.75rem;--rs-font-family-featured-1:var(--rs-font-family-body);--rs-letter-spacing-featured-1:normal;--rs-font-size-featured-2:1.25rem;--rs-line-height-featured-2:1.75rem;--rs-font-family-featured-2:var(--rs-font-family-body);--rs-letter-spacing-featured-2:normal;--rs-font-size-featured-3:1.125rem;--rs-line-height-featured-3:1.5rem;--rs-font-family-featured-3:var(--rs-font-family-body);--rs-letter-spacing-featured-3:normal;--rs-font-size-body-1:0.875rem;--rs-line-height-body-1:1.25rem;--rs-font-family-body-1:var(--rs-font-family-body);--rs-letter-spacing-body-1:normal;--rs-font-size-body-2:0.8125rem;--rs-line-height-body-2:1.25rem;--rs-font-family-body-2:var(--rs-font-family-body);--rs-letter-spacing-body-2:normal;--rs-font-size-body-3:0.6875rem;--rs-line-height-body-3:1rem;--rs-font-family-body-3:var(--rs-font-family-body);--rs-letter-spacing-body-3:normal;--rs-font-size-caption-1:0.6875rem;--rs-line-height-caption-1:1rem;--rs-font-family-caption-1:var(--rs-font-family-body);--rs-letter-spacing-caption-1:normal;--rs-font-size-caption-2:0.625rem;--rs-line-height-caption-2:0.75rem;--rs-font-family-caption-2:var(--rs-font-family-body);--rs-letter-spacing-caption-2:normal;--rs-unit-base:4px;--rs-unit-radius-small:4px;--rs-unit-radius-medium:4px;--rs-unit-radius-large:4px;--rs-unit-x1:4px;--rs-unit-x2:8px;--rs-unit-x3:12px;--rs-unit-x4:16px;--rs-unit-x5:20px;--rs-unit-x6:24px;--rs-unit-x7:28px;--rs-unit-x8:32px;--rs-unit-x9:36px;--rs-unit-x10:40px;--rs-radius-small:4px;--rs-radius-medium:8px;--rs-radius-large:12px;--rs-color-brand:#0d99ff;--rs-color-white:#fff;--rs-color-black:#000;--rs-color-on-background-primary:#fff;--rs-color-on-background-critical:#000;--rs-color-on-background-warning:#000;--rs-color-on-background-positive:#000;--rs-color-on-brand:#000;--rs-color-rgb-white:255,255,255;--rs-color-rgb-black:0,0,0;--rs-duration-rapid:100ms;--rs-duration-fast:200ms;--rs-duration-medium:300ms;--rs-duration-slow:400ms;--rs-easing-standard:cubic-bezier(0.4,0,0.2,1);--rs-easing-accelerate:cubic-bezier(0.4,0,1,1);--rs-easing-decelerate:cubic-bezier(0,0,0.2,1);--rs-shadow-raised:0px 1px 3px 0px rgba(0,0,0,.15);--rs-shadow-overlay:0px 10px 24px 0px rgba(0,0,0,.1),0px 2px 5px 0px rgba(0,0,0,.04);--rs-viewport-m-min:660;--rs-viewport-l-min:900;--rs-viewport-xl-min:1280}[data-rs-theme=figma][data-rs-color-mode=light]{--rs-color-background-primary:#0d99ff;--rs-color-background-primary-faded:#e5f4ff;--rs-color-border-primary:#007be5;--rs-color-border-primary-faded:#bde3ff;--rs-color-foreground-primary:#007be5;--rs-color-background-critical:#f24822;--rs-color-background-critical-faded:#ffe2e0;--rs-color-border-critical:#dc3412;--rs-color-border-critical-faded:#ffc7c2;--rs-color-foreground-critical:#dc3412;--rs-color-background-warning:#facc15;--rs-color-background-warning-faded:#fffae9;--rs-color-border-warning:#cfa90f;--rs-color-border-warning-faded:#ece2c4;--rs-color-foreground-warning:#7b6305;--rs-color-background-positive:#14ae5c;--rs-color-background-positive-faded:#daecdf;--rs-color-border-positive:#009951;--rs-color-border-positive-faded:#bbddc6;--rs-color-foreground-positive:#009951;--rs-color-background-neutral:#dfe2ea;--rs-color-background-neutral-faded:#f5f5f5;--rs-color-border-neutral:#e6e6e6;--rs-color-border-neutral-faded:#e6e6e6;--rs-color-foreground-neutral:#191919;--rs-color-foreground-neutral-faded:#474747;--rs-color-background-disabled:#e4e4e4;--rs-color-background-disabled-faded:#f5f5f5;--rs-color-border-disabled:#e6e6e6;--rs-color-foreground-disabled:#b2b2b2;--rs-color-background-elevation-base:#fff;--rs-color-background-elevation-raised:#fff;--rs-color-background-elevation-overlay:#fff;--rs-color-background-page:#fff;--rs-color-background-page-faded:#fafafa;--rs-color-rgb-background-primary:13,153,255;--rs-color-rgb-background-primary-faded:229,244,255;--rs-color-rgb-background-critical:242,72,34;--rs-color-rgb-background-critical-faded:255,226,224;--rs-color-rgb-background-warning:250,204,21;--rs-color-rgb-background-warning-faded:255,250,233;--rs-color-rgb-background-positive:20,174,92;--rs-color-rgb-background-positive-faded:218,236,223;--rs-color-on-background-neutral:#000;--rs-color-rgb-background-neutral:223,226,234;--rs-color-rgb-background-neutral-faded:245,245,245;--rs-color-rgb-background-disabled:228,228,228;--rs-color-rgb-background-disabled-faded:245,245,245;--rs-color-rgb-background-elevation-base:255,255,255;--rs-color-rgb-background-elevation-raised:255,255,255;--rs-color-rgb-background-elevation-overlay:255,255,255;--rs-color-rgb-background-page:255,255,255;--rs-color-rgb-background-page-faded:250,250,250}[data-rs-theme=figma][data-rs-color-mode=dark]{--rs-color-background-primary:#0c8ce9;--rs-color-background-primary-faded:#394360;--rs-color-border-primary:#7cc4f8;--rs-color-border-primary-faded:#2a4d72;--rs-color-foreground-primary:#7cc4f8;--rs-color-background-critical:#e03e1a;--rs-color-background-critical-faded:#60332a;--rs-color-border-critical:#fca397;--rs-color-border-critical-faded:#803226;--rs-color-foreground-critical:#fca397;--rs-color-background-warning:#f1c512;--rs-color-background-warning-faded:#2c271f;--rs-color-border-warning:#b4920a;--rs-color-border-warning-faded:#453c1e;--rs-color-foreground-warning:#b4920c;--rs-color-background-positive:#198f51;--rs-color-background-positive-faded:#3d5749;--rs-color-border-positive:#79d297;--rs-color-border-positive-faded:#086338;--rs-color-foreground-positive:#79d297;--rs-color-background-neutral:#444;--rs-color-background-neutral-faded:#383838;--rs-color-border-neutral:#444;--rs-color-border-neutral-faded:#444;--rs-color-foreground-neutral:#fff;--rs-color-foreground-neutral-faded:#b2b2b2;--rs-color-background-disabled:#474747;--rs-color-background-disabled-faded:#3a3a3a;--rs-color-border-disabled:#3e3e3e;--rs-color-foreground-disabled:#656565;--rs-color-background-elevation-base:#2c2c2c;--rs-color-background-elevation-raised:#2c2c2c;--rs-color-background-elevation-overlay:#2c2c2c;--rs-color-background-page:#2c2c2c;--rs-color-background-page-faded:#1e1e1e;--rs-color-rgb-background-primary:12,140,233;--rs-color-rgb-background-primary-faded:57,67,96;--rs-color-rgb-background-critical:224,62,26;--rs-color-rgb-background-critical-faded:96,51,42;--rs-color-rgb-background-warning:241,197,18;--rs-color-rgb-background-warning-faded:44,39,31;--rs-color-rgb-background-positive:25,143,81;--rs-color-rgb-background-positive-faded:61,87,73;--rs-color-on-background-neutral:#fff;--rs-color-rgb-background-neutral:68,68,68;--rs-color-rgb-background-neutral-faded:56,56,56;--rs-color-rgb-background-disabled:71,71,71;--rs-color-rgb-background-disabled-faded:58,58,58;--rs-color-rgb-background-elevation-base:44,44,44;--rs-color-rgb-background-elevation-raised:44,44,44;--rs-color-rgb-background-elevation-overlay:44,44,44;--rs-color-rgb-background-page:44,44,44;--rs-color-rgb-background-page-faded:30,30,30}
@@ -22,7 +22,6 @@ const transformDefinition = (name, definition, options) => {
22
22
  if (code.media)
23
23
  fs.writeFileSync(themeMediaPath, code.media);
24
24
  const logOutput = `Compiled ${chalk.bold(name)} theme${isFragment ? " fragment" : ""}`;
25
- // eslint-disable-next-line no-console
26
25
  console.log(chalk.green(logOutput));
27
26
  };
28
27
  export const addThemeFragment = (name, definition, options) => {
@@ -15,6 +15,8 @@ const Actionable = forwardRef((props, ref) => {
15
15
  // To make sure it doesn't render a span
16
16
  const isButton = Boolean(hasClickHandler || hasFocusHandler || type || attributes?.ref);
17
17
  const renderedAsButton = !isLink && isButton && (!as || as === "button");
18
+ // Using any here to let TS save on type resolving, otherwise TS throws an error due to the type complexity
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
20
  let TagName;
19
21
  if (isLink) {
20
22
  TagName = "a";
@@ -70,6 +70,7 @@ const Autocomplete = (props) => {
70
70
  return (_jsx(AutocompleteContext.Provider, { value: { onItemClick: handleItemClick }, children: _jsxs(DropdownMenu, { position: "bottom", width: "trigger", triggerType: "focus", trapFocusMode: "selection-menu", active: isDropdownActive, onClose: handleClose, onOpen: handleOpen, containerRef: containerRef, disableHideAnimation: true, instanceRef: instanceRef, children: [_jsx(DropdownMenu.Trigger, { children: ({ ref, ...attributes }) => (_jsx(TextField, { ...textFieldProps, name: name, onChange: handleChange, focused: isDropdownActive, attributes: {
71
71
  ...textFieldProps.attributes,
72
72
  // Ignoring the type check since TS can't infer the correct html element type
73
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
74
  ref: ref,
74
75
  onClick: attributes.onFocus,
75
76
  }, inputAttributes: {
@@ -1 +1 @@
1
- .selection{table-layout:fixed;width:100%}.weekday{color:var(--rs-color-foreground-neutral-faded);font-weight:var(--rs-font-weight-regular);padding-bottom:var(--rs-unit-x2)}.row{border-top:2px solid transparent}[dir=rtl] .control{transform:scaleX(-1)}.cell-button{padding:var(--rs-unit-x2);text-align:center;transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:border-radius,background-color,color}.cell-button[disabled],.cell-button[disabled]:hover{background-color:transparent!important;color:var(--rs-color-foreground-disabled)!important}.cell{padding:0}.cell .cell-button:hover,.cell--in-range .cell-button{background-color:rgba(var(--rs-color-rgb-background-neutral),32%)}.cell--active-end .cell-button,.cell--active-end:hover .cell-button,.cell--active-start .cell-button,.cell--active-start:hover .cell-button{background-color:var(--rs-color-background-primary);color:var(--rs-color-on-background-primary)}.cell--active-start .cell-button,.cell:first-child .cell-button{border-end-start-radius:var(--rs-radius-small);border-start-start-radius:var(--rs-radius-small)}.cell--active-end .cell-button,.cell--active-start+.cell:hover:not(.cell--in-range) .cell-button,.cell--in-range+.cell:hover:not(.cell--in-range) .cell-button,.cell:last-child .cell-button{border-end-end-radius:var(--rs-radius-small);border-start-end-radius:var(--rs-radius-small)}.cell--active-single+.cell:hover .cell-button,.cell:hover:not(.cell--in-range,.cell--in-range+.cell:hover,.cell--active-start+.cell:hover) .cell-button{border-radius:var(--rs-radius-small)}
1
+ .selection{table-layout:fixed;width:100%}.weekday{color:var(--rs-color-foreground-neutral-faded);font-weight:var(--rs-font-weight-regular);padding-bottom:var(--rs-unit-x2)}[dir=rtl] .control{transform:scaleX(-1)}.cell{isolation:isolate;padding:2px}.cell:hover .cell-button{background-color:rgba(var(--rs-color-rgb-background-neutral),32%)}.cell.--active .cell-button{background-color:var(--rs-color-background-primary);color:var(--rs-color-on-background-primary)}.cell.--selection-range .cell-button{background-color:rgba(var(--rs-color-rgb-background-neutral),32%)}.cell.--selection-range:not(:last-child) .cell-button,.cell.--selection-start:not(:last-child) .cell-button{border-end-end-radius:0;border-start-end-radius:0}.cell.--selection-end:not(:first-child) .cell-button,.cell.--selection-range+:hover .cell-button,.cell.--selection-range:not(:first-child) .cell-button,.cell.--selection-start+:hover .cell-button{border-end-start-radius:0;border-start-start-radius:0}.cell.--selection-range+.--selection-end .cell-button:before,.cell.--selection-range+.--selection-range .cell-button:before,.cell.--selection-range+:hover .cell-button:before,.cell.--selection-start+.--selection-range .cell-button:before,.cell.--selection-start+:hover .cell-button:before{background-color:rgba(var(--rs-color-rgb-background-neutral),32%)}.cell-button{border-radius:var(--rs-radius-small);padding:var(--rs-unit-x2);position:relative;text-align:center;transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:color,background-color,border-radius}.cell-button:before{content:"";inset-block:0;inset-inline-start:-4px;position:absolute;transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color;width:4px}.cell-button[disabled]{background-color:transparent!important;color:var(--rs-color-foreground-disabled)!important}
@@ -4,6 +4,7 @@ export type BaseProps = {
4
4
  min?: Date;
5
5
  max?: Date;
6
6
  firstWeekDay?: number;
7
+ selectedDates?: Date[];
7
8
  renderWeekDay?: (args: {
8
9
  weekDay: number;
9
10
  date: Date;
@@ -74,21 +75,20 @@ export type MonthProps = {
74
75
  hoveredDate: Date | null;
75
76
  onDateHover: (date: Date) => void;
76
77
  onDateHoverEnd: (date: Date) => void;
77
- } & Pick<BaseProps, "max" | "min" | "firstWeekDay" | "renderMonthLabel" | "renderWeekDay" | "renderSelectedMonthLabel" | "renderDateAriaLabel"> & Pick<ControlledProps, "value" | "onChange" | "range">;
78
+ } & Pick<BaseProps, "max" | "min" | "firstWeekDay" | "selectedDates" | "renderMonthLabel" | "renderWeekDay" | "renderSelectedMonthLabel" | "renderDateAriaLabel"> & Pick<ControlledProps, "value" | "onChange" | "range">;
78
79
  export type YearProps = {
79
80
  monthDate: Date;
80
81
  onMonthClick: (month: number) => void;
81
82
  } & Pick<BaseProps, "renderMonthLabel" | "min" | "max" | "renderMonthAriaLabel">;
82
83
  export type DateProps = {
83
84
  date: Date | null;
85
+ isoDate: string | null;
84
86
  disabled?: boolean;
85
87
  focusable?: boolean;
86
88
  startValue: Date | null;
87
89
  endValue: Date | null;
88
- isActiveStart: boolean;
89
- isActiveEnd: boolean;
90
90
  renderAriaLabel?: MonthProps["renderDateAriaLabel"];
91
- } & Pick<MonthProps, "hoveredDate" | "onDateHover" | "onDateHoverEnd" | "onChange" | "range" | "min" | "max">;
91
+ } & Pick<MonthProps, "hoveredDate" | "onDateHover" | "onDateHoverEnd" | "onChange" | "range" | "min" | "max" | "selectedDates">;
92
92
  export type ControlsProps = {
93
93
  selectionMode: SelectionMode;
94
94
  onMonthTitleClick: () => void;
@@ -9,7 +9,7 @@ import CalendarMonth from "./CalendarMonth.js";
9
9
  import CalendarYear from "./CalendarYear.js";
10
10
  import CalendarControls from "./CalendarControls.js";
11
11
  const CalendarControlled = (props) => {
12
- const { value, onChange, defaultMonth, min, max, range, firstWeekDay, renderMonthLabel, renderSelectedMonthLabel, renderWeekDay, previousMonthAriaLabel, previousYearAriaLabel, nextMonthAriaLabel, nextYearAriaLabel, monthSelectionAriaLabel, renderMonthAriaLabel, renderDateAriaLabel, } = props;
12
+ const { value, onChange, defaultMonth, min, max, range, firstWeekDay, selectedDates, renderMonthLabel, renderSelectedMonthLabel, renderWeekDay, previousMonthAriaLabel, previousYearAriaLabel, nextMonthAriaLabel, nextYearAriaLabel, monthSelectionAriaLabel, renderMonthAriaLabel, renderDateAriaLabel, } = props;
13
13
  const [selectionMode, setSelectionMode] = React.useState("date");
14
14
  const [monthDate, setMonthDate] = React.useState(defaultMonth || new Date());
15
15
  const [hoveredDate, setHoveredDate] = React.useState(null);
@@ -63,6 +63,6 @@ const CalendarControlled = (props) => {
63
63
  min,
64
64
  max,
65
65
  });
66
- return (_jsxs(View, { gap: 2, children: [_jsx(CalendarControls, { renderSelectedMonthLabel: renderSelectedMonthLabel, monthDate: monthDate, selectionMode: selectionMode, isFirstMonth: bounds.isFirstMonth, isLastMonth: bounds.isLastMonth, monthTitleRef: monthTitleRef, onMonthTitleClick: handleMonthTitleClick, onNextClick: handleNextClick, onPreviousClick: handlePreviousClick, previousMonthAriaLabel: previousMonthAriaLabel, previousYearAriaLabel: previousYearAriaLabel, nextMonthAriaLabel: nextMonthAriaLabel, nextYearAriaLabel: nextYearAriaLabel, monthSelectionAriaLabel: monthSelectionAriaLabel }), _jsxs(View.Item, { attributes: { ref: selectionRootRef }, children: [selectionMode === "date" && (_jsx(CalendarMonth, { date: monthDate, value: value, onChange: onChange, min: min, max: max, range: range, firstWeekDay: firstWeekDay, hoveredDate: hoveredDate, onDateHover: handleDateHover, onDateHoverEnd: handleDateHoverEnd, renderWeekDay: renderWeekDay, renderDateAriaLabel: renderDateAriaLabel })), selectionMode === "month" && (_jsx(CalendarYear, { monthDate: monthDate, onMonthClick: handleMonthClick, renderMonthLabel: renderMonthLabel, renderMonthAriaLabel: renderMonthAriaLabel, min: min, max: max }))] })] }));
66
+ return (_jsxs(View, { gap: 2, children: [_jsx(CalendarControls, { renderSelectedMonthLabel: renderSelectedMonthLabel, monthDate: monthDate, selectionMode: selectionMode, isFirstMonth: bounds.isFirstMonth, isLastMonth: bounds.isLastMonth, monthTitleRef: monthTitleRef, onMonthTitleClick: handleMonthTitleClick, onNextClick: handleNextClick, onPreviousClick: handlePreviousClick, previousMonthAriaLabel: previousMonthAriaLabel, previousYearAriaLabel: previousYearAriaLabel, nextMonthAriaLabel: nextMonthAriaLabel, nextYearAriaLabel: nextYearAriaLabel, monthSelectionAriaLabel: monthSelectionAriaLabel }), _jsxs(View.Item, { attributes: { ref: selectionRootRef }, children: [selectionMode === "date" && (_jsx(CalendarMonth, { date: monthDate, value: value, onChange: onChange, min: min, max: max, range: range, firstWeekDay: firstWeekDay, hoveredDate: hoveredDate, selectedDates: selectedDates, onDateHover: handleDateHover, onDateHoverEnd: handleDateHoverEnd, renderWeekDay: renderWeekDay, renderDateAriaLabel: renderDateAriaLabel })), selectionMode === "month" && (_jsx(CalendarYear, { monthDate: monthDate, onMonthClick: handleMonthClick, renderMonthLabel: renderMonthLabel, renderMonthAriaLabel: renderMonthAriaLabel, min: min, max: max }))] })] }));
67
67
  };
68
68
  export default CalendarControlled;
@@ -5,20 +5,38 @@ import { classNames } from "../../utilities/helpers.js";
5
5
  import { getLocalISODate } from "./Calendar.utils.js";
6
6
  import s from "./Calendar.module.css";
7
7
  const CalendarDate = (props) => {
8
- const { date, startValue, endValue, isActiveStart, isActiveEnd, disabled, focusable, onChange, range, hoveredDate, onDateHover, onDateHoverEnd, renderAriaLabel, } = props;
8
+ const { date, isoDate, startValue, endValue, disabled, focusable, onChange, range, hoveredDate, onDateHover, onDateHoverEnd, renderAriaLabel, selectedDates, } = props;
9
9
  if (!date)
10
10
  return _jsx("td", { className: s.cell, "aria-hidden": "true" });
11
- const inRange = startValue &&
12
- startValue < date &&
13
- ((endValue && endValue > date) || (hoveredDate && !endValue && hoveredDate > date));
11
+ const isoStartValue = startValue && getLocalISODate({ date: startValue });
12
+ const isoEndValue = endValue && getLocalISODate({ date: endValue });
13
+ const isStartValue = !!isoDate && !!isoStartValue && isoDate === isoStartValue;
14
+ const isEndValue = !!isoDate && !!isoEndValue && isoDate === isoEndValue;
15
+ const isAfterStartValue = startValue && date > startValue;
16
+ const isBeforeEndValue = endValue && date < endValue;
17
+ const isInHoveredRange = hoveredDate && !endValue && hoveredDate > date;
18
+ const isInSelectedDates = !!selectedDates?.find((selectedDate) => getLocalISODate({ date: selectedDate }) === isoDate);
19
+ let selection;
20
+ switch (true) {
21
+ case isAfterStartValue && isInHoveredRange:
22
+ case isAfterStartValue && isBeforeEndValue:
23
+ selection = "range";
24
+ break;
25
+ case isStartValue && (!range || isEndValue):
26
+ case isInSelectedDates:
27
+ selection = "standalone";
28
+ break;
29
+ case isStartValue:
30
+ selection = "start";
31
+ break;
32
+ case isEndValue:
33
+ selection = "end";
34
+ break;
35
+ }
14
36
  const dateClassNames = classNames([
15
37
  s.cell,
16
- !range && isActiveStart && s["cell--active-single"],
17
- isActiveStart && s["cell--active-start"],
18
- (isActiveEnd ||
19
- (!endValue && isActiveStart && !(hoveredDate && startValue && hoveredDate > startValue))) &&
20
- s["cell--active-end"],
21
- inRange && s["cell--in-range"],
38
+ selection && s["--active"],
39
+ selection && s[`--selection-${selection}`],
22
40
  ]);
23
41
  const handleClick = () => {
24
42
  if (!range) {
@@ -46,7 +64,7 @@ const CalendarDate = (props) => {
46
64
  "aria-label": renderAriaLabel
47
65
  ? renderAriaLabel({ date })
48
66
  : date.toLocaleDateString("en-us", { month: "long", day: "numeric", weekday: "long" }),
49
- "aria-checked": isActiveStart || isActiveEnd,
67
+ "aria-checked": !!selection,
50
68
  "data-rs-date": getLocalISODate({ date }),
51
69
  onMouseEnter: handleMouseEnter,
52
70
  onMouseLeave: handleMouseLeave,
@@ -4,7 +4,7 @@ import { getMonthWeeks, getWeekdayNames, getLocalISODate } from "./Calendar.util
4
4
  import CalendarDate from "./CalendarDate.js";
5
5
  import s from "./Calendar.module.css";
6
6
  const CalendarMonth = (props) => {
7
- const { date, value, onChange, min, max, range, firstWeekDay, hoveredDate, onDateHover, onDateHoverEnd, renderWeekDay, renderDateAriaLabel, } = props;
7
+ const { date, value, onChange, min, max, range, firstWeekDay, selectedDates, hoveredDate, onDateHover, onDateHoverEnd, renderWeekDay, renderDateAriaLabel, } = props;
8
8
  let foundFocusableDate = false;
9
9
  const month = date.getMonth();
10
10
  const weeks = getMonthWeeks({ date, firstWeekDay });
@@ -19,10 +19,6 @@ const CalendarMonth = (props) => {
19
19
  const startValue = value && "start" in value ? value.start : value;
20
20
  const endValue = value && "end" in value ? value.end : value;
21
21
  const isoDate = date && getLocalISODate({ date });
22
- const isoStartValue = startValue && getLocalISODate({ date: startValue });
23
- const isoEndValue = endValue && getLocalISODate({ date: endValue });
24
- const isActiveStart = !!isoDate && !!isoStartValue && isoDate === isoStartValue;
25
- const isActiveEnd = !!isoDate && !!isoEndValue && isoDate === isoEndValue;
26
22
  /**
27
23
  * Decide if date has to be focusable with Tab (only one date should be)
28
24
  * 1. If there is a selected value - it's focusable
@@ -43,7 +39,7 @@ const CalendarMonth = (props) => {
43
39
  }
44
40
  if (focusable)
45
41
  foundFocusableDate = true;
46
- return (_jsx(CalendarDate, { date: date, disabled: disabled, range: range, focusable: focusable, startValue: startValue, endValue: endValue, isActiveStart: isActiveStart, isActiveEnd: isActiveEnd, onChange: onChange, hoveredDate: hoveredDate, onDateHover: onDateHover, onDateHoverEnd: onDateHoverEnd, renderAriaLabel: renderDateAriaLabel }, index));
42
+ return (_jsx(CalendarDate, { date: date, isoDate: isoDate, disabled: disabled, range: range, focusable: focusable, startValue: startValue, endValue: endValue, onChange: onChange, hoveredDate: hoveredDate, onDateHover: onDateHover, onDateHoverEnd: onDateHoverEnd, renderAriaLabel: renderDateAriaLabel, selectedDates: selectedDates }, index));
47
43
  }) }, key));
48
44
  }) })] }));
49
45
  };
@@ -1,3 +1,5 @@
1
+ import { StoryObj } from "@storybook/react";
2
+ import { type Mock } from "@storybook/test";
1
3
  declare const _default: {
2
4
  title: string;
3
5
  component: (props: import("./..").CalendarProps) => import("react").JSX.Element;
@@ -8,7 +10,20 @@ declare const _default: {
8
10
  };
9
11
  };
10
12
  export default _default;
11
- export declare const base: () => import("react").JSX.Element;
12
- export declare const selection: () => import("react").JSX.Element;
13
- export declare const boundaries: () => import("react").JSX.Element;
14
- export declare const translation: () => import("react").JSX.Element;
13
+ export declare const defaultMonth: StoryObj;
14
+ export declare const uncontrolled: StoryObj<{
15
+ handleChange: Mock;
16
+ }>;
17
+ export declare const controlled: StoryObj<{
18
+ handleChange: Mock;
19
+ }>;
20
+ export declare const selectedDates: StoryObj;
21
+ export declare const minMax: StoryObj;
22
+ export declare const firstWeekDay: StoryObj;
23
+ export declare const translation: {
24
+ name: string;
25
+ render: () => import("react").JSX.Element;
26
+ };
27
+ export declare const ariaLabels: StoryObj;
28
+ export declare const monthSelection: StoryObj;
29
+ export declare const keyboardNavigation: StoryObj;