@redsift/design-system 12.6.6 → 13.0.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 (64) hide show
  1. package/CONTRIBUTING.md +20 -8
  2. package/_internal/AppContainer.js +1 -1
  3. package/_internal/AppContainer.js.map +1 -1
  4. package/_internal/Button2.js +1 -1
  5. package/_internal/Button2.js.map +1 -1
  6. package/_internal/Checkbox2.js +8 -3
  7. package/_internal/Checkbox2.js.map +1 -1
  8. package/_internal/DetailedCard.js +17 -1352
  9. package/_internal/DetailedCard.js.map +1 -1
  10. package/_internal/DetailedCardCollapsibleSectionItems.js +14 -4
  11. package/_internal/DetailedCardCollapsibleSectionItems.js.map +1 -1
  12. package/_internal/DetailedCardSection.js +4 -2
  13. package/_internal/DetailedCardSection.js.map +1 -1
  14. package/_internal/IconButton.js +1 -1
  15. package/_internal/IconButton.js.map +1 -1
  16. package/_internal/Item2.js +2 -2
  17. package/_internal/Item2.js.map +1 -1
  18. package/_internal/LinkButton.js +1 -1
  19. package/_internal/LinkButton.js.map +1 -1
  20. package/_internal/Listbox2.js +5 -5
  21. package/_internal/Listbox2.js.map +1 -1
  22. package/_internal/NumberField.js +2 -0
  23. package/_internal/NumberField.js.map +1 -1
  24. package/_internal/Radio2.js +14 -7
  25. package/_internal/Radio2.js.map +1 -1
  26. package/_internal/RadioGroup.js +6 -1
  27. package/_internal/RadioGroup.js.map +1 -1
  28. package/_internal/SideNavigationMenu.js +9 -4
  29. package/_internal/SideNavigationMenu.js.map +1 -1
  30. package/_internal/SideNavigationMenuItem.js +2 -2
  31. package/_internal/SideNavigationMenuItem.js.map +1 -1
  32. package/_internal/Switch2.js +8 -3
  33. package/_internal/Switch2.js.map +1 -1
  34. package/_internal/Tabs2.js.map +1 -1
  35. package/_internal/TextArea.js +5 -1
  36. package/_internal/TextArea.js.map +1 -1
  37. package/_internal/TextField.js +5 -1
  38. package/_internal/TextField.js.map +1 -1
  39. package/_internal/context.js.map +1 -1
  40. package/_internal/filterComponents.js +3 -0
  41. package/_internal/filterComponents.js.map +1 -1
  42. package/_internal/getElementRef.js +25 -0
  43. package/_internal/getElementRef.js.map +1 -0
  44. package/_internal/getTextWidth.js +32 -0
  45. package/_internal/getTextWidth.js.map +1 -0
  46. package/_internal/isComponent.js +3 -0
  47. package/_internal/isComponent.js.map +1 -1
  48. package/_internal/reactVersion.js +14 -0
  49. package/_internal/reactVersion.js.map +1 -0
  50. package/_internal/styles4.js +72 -72
  51. package/_internal/styles4.js.map +1 -1
  52. package/_internal/types.js.map +1 -1
  53. package/_internal/useFocusOnListItem.js +1 -1
  54. package/_internal/useFocusOnListItem.js.map +1 -1
  55. package/_internal/useId.js +1 -1
  56. package/_internal/useId.js.map +1 -1
  57. package/_internal/useListboxItem.js.map +1 -1
  58. package/_internal/useSideNavigationMenuBar.js +2 -2
  59. package/_internal/useSideNavigationMenuBar.js.map +1 -1
  60. package/_internal/warnIfNoAccessibleLabelFound.js.map +1 -1
  61. package/index.d.ts +48 -24
  62. package/index.js +3 -31
  63. package/index.js.map +1 -1
  64. package/package.json +18 -26
package/CONTRIBUTING.md CHANGED
@@ -2,7 +2,15 @@
2
2
 
3
3
  ## Setup
4
4
 
5
- Make sure you have the following requirements installed: [node](https://nodejs.org/) (v16+) and [yarn](https://yarnpkg.com/en/) (v1.22.0+)
5
+ Make sure you have [node](https://nodejs.org/) (v22) and any [yarn](https://yarnpkg.com/) installed. The repository pins **Yarn 4** in `.yarn/releases/` (`yarnPath` in `.yarnrc.yml`), so a global Yarn 1 hands over to it automatically — `yarn --version` inside the repo prints `4.x`. Corepack users get the same version from the `packageManager` field.
6
+
7
+ **Registry auth for Yarn 4.** `@redsift/signal-logic` is a private package, and Yarn 4 does **not** read `~/.npmrc`, so `npm login` alone no longer authenticates `yarn install`. Before your first install, and again whenever your token expires, run this from inside the repository:
8
+
9
+ ```bash
10
+ ./scripts/registry-auth.sh
11
+ ```
12
+
13
+ It does nothing if Yarn can already read the package. If npm can, it reuses the token from your `~/.npmrc`. Otherwise it asks for a new **read-only granular access token** (npmjs.com → Access Tokens → Generate New Token → Granular, read-only access to the `@redsift` packages), without echoing it, and saves it for npm too. The token goes to your own `~/.yarnrc.yml`, never into the repository, and the script checks that Yarn can read the package before it finishes. An install that fails on `@redsift/signal-logic` (the registry answers `404` without a valid token, not `401`) means your token is missing or expired: run the script again. CI passes the token as `YARN_NPM_AUTH_TOKEN` instead.
6
14
 
7
15
  Clone the repo (or fork it first if you're not part of Red Sift organization).
8
16
 
@@ -12,6 +20,8 @@ cd design-system
12
20
  yarn install
13
21
  ```
14
22
 
23
+ Dependencies' install scripts are off by default under Yarn 4; the few the repository needs are allowed by name in `dependenciesMeta` in the root `package.json`. New packages resolve only once they are a day old (`npmMinimalAgeGate`), except `@redsift/*`.
24
+
15
25
  Set up your environment variable file by copying the template file:
16
26
 
17
27
  ```bash
@@ -297,15 +307,16 @@ However, before using any ARIA, [read this disclaimer carefully](https://www.w3.
297
307
 
298
308
  ## Tests
299
309
 
300
- We use [jest](https://jestjs.io/) for unit tests and [react-testing-library](https://testing-library.com/docs/react-testing-library/intro) for rendering and writing assertions. We also use [Storyshots](https://storybook.js.org/addons/@storybook/addon-storyshots) to automatically take a code snapshot of every story.
310
+ We use [Vitest](https://vitest.dev/) for unit tests and [react-testing-library](https://testing-library.com/docs/react-testing-library/intro) for rendering and writing assertions. Snapshot tests render each story through `composeStory`. Every story also runs as a browser test in headless Chromium, through [`@storybook/addon-vitest`](https://storybook.js.org/docs/writing-tests/integrations/vitest-addon), so a story whose `play` function throws fails a test.
301
311
 
302
- Please make sure you include tests with your pull requests. Our CI will run the tests on each PR. A minimum of 90% code coverage is required for statements, branches, functions and lines of every package. However, in practice, we try to reach a 100% code coverage.
312
+ Please make sure you include tests with your pull requests. Our CI will run the tests on each PR. We target 90% code coverage for statements, branches, functions and lines of every package, and in practice try to reach 100%. Note this is a review-time target rather than an automated gate: no `coverageThreshold` is configured, so CI reports coverage but does not fail a build when it drops.
303
313
 
304
314
  We split the tests into 2 groups.
305
315
 
306
316
  _Visual tests_
307
317
 
308
318
  - A Storybook story should be written for each visual state that a component can be in (based on props).
319
+ - Stories run as browser tests with `yarn workspace @redsift/<package> test:stories` (or `yarn test:stories` for all of them). Install the browser once with `yarn playwright install chromium`.
309
320
 
310
321
  _Unit tests_
311
322
 
@@ -321,10 +332,10 @@ yarn test
321
332
  Or for a specific package with:
322
333
 
323
334
  ```bash
324
- yarn test:charts
325
- yarn test:design-system
326
- yarn test:dashboard
327
- yarn test:table
335
+ yarn test:unit:charts
336
+ yarn test:unit:design-system
337
+ yarn test:unit:dashboard
338
+ yarn test:unit:table
328
339
  ```
329
340
 
330
341
  Do not forget to update the snapshots with the `-u` option when you modify or create stories. However, you should **always** check the generated snapshots to see if they are correct. Do **not** blindly update the snapshots.
@@ -424,7 +435,8 @@ Releases go through the one-command `yarn release` CLI — not a manual `lerna p
424
435
 
425
436
  1. Login to NPM with an authorized account: `npm login`
426
437
  2. Dry-run the readiness gate: `yarn release stable X.Y.Z --dry-run` (validates `release/X.Y.Z` and stops before anything irreversible)
427
- 3. When green, publish: `yarn release stable X.Y.Z` — the CLI preflights, then publishes `X.Y.Z` under `latest`, pausing only for the npm OTP. It then creates the GitHub release notes, opens (never merges) the `release/X.Y.Z` → `main` PR, and cuts the next release branch.
438
+ 3. Freeze the branch: `yarn release freeze X.Y.Z` marks its draft release pull request ready for review, which makes the `release-freeze-check` job reject new pull requests into it
439
+ 4. When green, publish: `yarn release stable X.Y.Z` — the CLI preflights, then publishes `X.Y.Z` under `latest`, pausing only for the npm OTP. It then creates the GitHub release notes, promotes (never merges) the draft `release/X.Y.Z` → `main` PR (creating it only if none exists), and cuts the next release branch (`--next minor|major` when the next release is not a patch).
428
440
 
429
441
  ### Alpha release
430
442
 
@@ -87,7 +87,7 @@ const RadarSvgLinearGradient = () => /*#__PURE__*/React__default.createElement("
87
87
  * The AppContainer component.
88
88
  */
89
89
  const AppContainer = /*#__PURE__*/forwardRef((props, ref) => {
90
- const _ref = useRef();
90
+ const _ref = useRef(undefined);
91
91
  const divRef = ref || _ref;
92
92
  const {
93
93
  children,
@@ -1 +1 @@
1
- {"version":3,"file":"AppContainer.js","sources":["../../src/components/app-container/styles.ts","../../src/components/app-container/AppContainer.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport { StyledAppContainerProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledAppContainer = styled.div<StyledAppContainerProps>`\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n height: 100dvh;\n overflow: hidden;\n\n --redsift-color-text-primary: ${({ $theme }) => `var(--redsift-color-${$theme}-components-text-primary);`};\n --redsift-color-text-secondary: ${({ $theme }) => `var(--redsift-color-${$theme}-components-text-secondary);`};\n color: ${({ $theme }) => `var(--redsift-color-${$theme}-components-text-primary)`};\n`;\n","import React, { forwardRef, RefObject, useCallback, useEffect, useRef, useState } from 'react';\nimport { I18nProvider } from '../../react-aria/react-aria/i18n';\nimport classNames from 'classnames';\nimport { Comp } from '../../types';\nimport { AppContainerProps } from './types';\nimport { AppContainerContext } from './context';\nimport { StyledAppContainer } from './styles';\nimport { AppSidePanelVariant } from '../app-side-panel';\nimport { BreadcrumbItemProps } from '../breadcrumb-item';\nimport { ThemeProvider, useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'AppContainer';\nconst CLASSNAME = 'redsift-app-container';\n\n/** @internal SVG gradient definitions for Radar product styling */\nexport const RadarSvgLinearGradient: React.FC = () => (\n <svg width=\"0\" height=\"0\">\n <linearGradient id=\"radar-gradient-default\" x1=\"100%\" y1=\"100%\" x2=\"0%\" y2=\"0%\">\n <stop stopColor=\"rgba(81, 183, 164, 1)\" offset=\"0%\" />\n <stop stopColor=\"rgba(0, 129, 195, 1)\" offset=\"100%\" />\n </linearGradient>\n <linearGradient id=\"radar-gradient-hover\" x1=\"100%\" y1=\"100%\" x2=\"0%\" y2=\"0%\">\n <stop stopColor=\"rgba(65, 146, 131, 1)\" offset=\"0%\" />\n <stop stopColor=\"rgba(3, 114, 171, 1)\" offset=\"100%\" />\n </linearGradient>\n <linearGradient id=\"radar-gradient-active\" x1=\"100%\" y1=\"100%\" x2=\"0%\" y2=\"0%\">\n <stop stopColor=\"rgba(58, 122, 110, 1)\" offset=\"0%\" />\n <stop stopColor=\"rgba(0, 96, 145, 1)\" offset=\"100%\" />\n </linearGradient>\n </svg>\n);\n\n/**\n * The AppContainer component.\n */\nexport const AppContainer: Comp<AppContainerProps, HTMLDivElement> = forwardRef((props, ref) => {\n const _ref = useRef<HTMLDivElement>();\n const divRef = ref || _ref;\n\n const {\n children,\n className,\n locale,\n product,\n storageKey,\n theme: propsTheme,\n isFullScreen = false,\n ...forwardedProps\n } = props;\n const theme = useTheme(propsTheme);\n\n // Always initialize with server-safe defaults (no localStorage read during render)\n const [sidePanelVariant, _setSidePanelVariant] = useState<AppSidePanelVariant>(\n isFullScreen ? AppSidePanelVariant.hidden : AppSidePanelVariant.standard\n );\n\n // Write to localStorage, filtering out 'hidden'\n const persistVariant = useCallback(\n (variant: AppSidePanelVariant) => {\n if (storageKey && variant !== AppSidePanelVariant.hidden && typeof window !== 'undefined') {\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(variant));\n } catch {\n // Silently fail\n }\n }\n },\n [storageKey]\n );\n\n // Restore from localStorage after hydration\n useEffect(() => {\n if (storageKey && !isFullScreen && typeof window !== 'undefined') {\n try {\n const stored = window.localStorage.getItem(storageKey);\n if (stored) {\n const parsed = JSON.parse(stored) as AppSidePanelVariant;\n if (parsed !== AppSidePanelVariant.hidden) {\n _setSidePanelVariant(parsed);\n }\n }\n } catch {\n // Silently fail\n }\n }\n }, []);\n\n const [breadcrumbs, setBreadcrumbs] = useState<Omit<BreadcrumbItemProps, 'ref'>[] | undefined>();\n\n const [scrollContainer, setScrollContainer] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n if (isFullScreen && sidePanelVariant !== AppSidePanelVariant.hidden) {\n _setSidePanelVariant(AppSidePanelVariant.hidden);\n } else if (!isFullScreen && sidePanelVariant === AppSidePanelVariant.hidden) {\n _setSidePanelVariant(AppSidePanelVariant.standard);\n }\n }, [isFullScreen]);\n\n const state = {\n collapseSidePanel() {\n _setSidePanelVariant(AppSidePanelVariant.shrinked);\n persistVariant(AppSidePanelVariant.shrinked);\n },\n expandSidePanel() {\n _setSidePanelVariant(AppSidePanelVariant.standard);\n persistVariant(AppSidePanelVariant.standard);\n },\n setBreadcrumbs(breadcrumbs: Omit<BreadcrumbItemProps, 'ref'>[]) {\n setBreadcrumbs(breadcrumbs);\n },\n product,\n breadcrumbs,\n sidePanelVariant,\n setSidePanelVariant: _setSidePanelVariant,\n appContainerRef: divRef as RefObject<HTMLDivElement>,\n isFullScreen,\n scrollContainer,\n setScrollContainer,\n };\n\n return (\n <StyledAppContainer\n {...forwardedProps}\n id=\"redsift-app-container\"\n $theme={theme}\n $product={product}\n className={classNames(AppContainer.className, className)}\n ref={divRef as RefObject<HTMLDivElement>}\n >\n <AppContainerContext.Provider value={state}>\n <ThemeProvider value={{ theme }}>\n <I18nProvider locale={locale}>{children}</I18nProvider>\n </ThemeProvider>\n </AppContainerContext.Provider>\n <RadarSvgLinearGradient />\n </StyledAppContainer>\n );\n});\nAppContainer.className = CLASSNAME;\nAppContainer.displayName = COMPONENT_NAME;\n"],"names":["StyledAppContainer","styled","div","_ref","$theme","_ref2","_ref3","COMPONENT_NAME","CLASSNAME","RadarSvgLinearGradient","React","createElement","width","height","id","x1","y1","x2","y2","stopColor","offset","AppContainer","forwardRef","props","ref","useRef","divRef","children","className","locale","product","storageKey","theme","propsTheme","isFullScreen","forwardedProps","_objectWithoutProperties","_excluded","useTheme","sidePanelVariant","_setSidePanelVariant","useState","AppSidePanelVariant","hidden","standard","persistVariant","useCallback","variant","window","localStorage","setItem","JSON","stringify","useEffect","stored","getItem","parsed","parse","breadcrumbs","setBreadcrumbs","scrollContainer","setScrollContainer","state","collapseSidePanel","shrinked","expandSidePanel","setSidePanelVariant","appContainerRef","_extends","$product","classNames","AppContainerContext","Provider","value","ThemeProvider","I18nProvider","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"AppContainer.js","sources":["../../src/components/app-container/styles.ts","../../src/components/app-container/AppContainer.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport { StyledAppContainerProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledAppContainer = styled.div<StyledAppContainerProps>`\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n height: 100dvh;\n overflow: hidden;\n\n --redsift-color-text-primary: ${({ $theme }) => `var(--redsift-color-${$theme}-components-text-primary);`};\n --redsift-color-text-secondary: ${({ $theme }) => `var(--redsift-color-${$theme}-components-text-secondary);`};\n color: ${({ $theme }) => `var(--redsift-color-${$theme}-components-text-primary)`};\n`;\n","import React, { forwardRef, RefObject, useCallback, useEffect, useRef, useState } from 'react';\nimport { I18nProvider } from '../../react-aria/react-aria/i18n';\nimport classNames from 'classnames';\nimport { Comp } from '../../types';\nimport { AppContainerProps } from './types';\nimport { AppContainerContext } from './context';\nimport { StyledAppContainer } from './styles';\nimport { AppSidePanelVariant } from '../app-side-panel';\nimport { BreadcrumbItemProps } from '../breadcrumb-item';\nimport { ThemeProvider, useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'AppContainer';\nconst CLASSNAME = 'redsift-app-container';\n\n/** @internal SVG gradient definitions for Radar product styling */\nexport const RadarSvgLinearGradient: React.FC = () => (\n <svg width=\"0\" height=\"0\">\n <linearGradient id=\"radar-gradient-default\" x1=\"100%\" y1=\"100%\" x2=\"0%\" y2=\"0%\">\n <stop stopColor=\"rgba(81, 183, 164, 1)\" offset=\"0%\" />\n <stop stopColor=\"rgba(0, 129, 195, 1)\" offset=\"100%\" />\n </linearGradient>\n <linearGradient id=\"radar-gradient-hover\" x1=\"100%\" y1=\"100%\" x2=\"0%\" y2=\"0%\">\n <stop stopColor=\"rgba(65, 146, 131, 1)\" offset=\"0%\" />\n <stop stopColor=\"rgba(3, 114, 171, 1)\" offset=\"100%\" />\n </linearGradient>\n <linearGradient id=\"radar-gradient-active\" x1=\"100%\" y1=\"100%\" x2=\"0%\" y2=\"0%\">\n <stop stopColor=\"rgba(58, 122, 110, 1)\" offset=\"0%\" />\n <stop stopColor=\"rgba(0, 96, 145, 1)\" offset=\"100%\" />\n </linearGradient>\n </svg>\n);\n\n/**\n * The AppContainer component.\n */\nexport const AppContainer: Comp<AppContainerProps, HTMLDivElement> = forwardRef((props, ref) => {\n const _ref = useRef<HTMLDivElement>(undefined);\n const divRef = ref || _ref;\n\n const {\n children,\n className,\n locale,\n product,\n storageKey,\n theme: propsTheme,\n isFullScreen = false,\n ...forwardedProps\n } = props;\n const theme = useTheme(propsTheme);\n\n // Always initialize with server-safe defaults (no localStorage read during render)\n const [sidePanelVariant, _setSidePanelVariant] = useState<AppSidePanelVariant>(\n isFullScreen ? AppSidePanelVariant.hidden : AppSidePanelVariant.standard\n );\n\n // Write to localStorage, filtering out 'hidden'\n const persistVariant = useCallback(\n (variant: AppSidePanelVariant) => {\n if (storageKey && variant !== AppSidePanelVariant.hidden && typeof window !== 'undefined') {\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(variant));\n } catch {\n // Silently fail\n }\n }\n },\n [storageKey]\n );\n\n // Restore from localStorage after hydration\n useEffect(() => {\n if (storageKey && !isFullScreen && typeof window !== 'undefined') {\n try {\n const stored = window.localStorage.getItem(storageKey);\n if (stored) {\n const parsed = JSON.parse(stored) as AppSidePanelVariant;\n if (parsed !== AppSidePanelVariant.hidden) {\n _setSidePanelVariant(parsed);\n }\n }\n } catch {\n // Silently fail\n }\n }\n }, []);\n\n const [breadcrumbs, setBreadcrumbs] = useState<Omit<BreadcrumbItemProps, 'ref'>[] | undefined>();\n\n const [scrollContainer, setScrollContainer] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n if (isFullScreen && sidePanelVariant !== AppSidePanelVariant.hidden) {\n _setSidePanelVariant(AppSidePanelVariant.hidden);\n } else if (!isFullScreen && sidePanelVariant === AppSidePanelVariant.hidden) {\n _setSidePanelVariant(AppSidePanelVariant.standard);\n }\n }, [isFullScreen]);\n\n const state = {\n collapseSidePanel() {\n _setSidePanelVariant(AppSidePanelVariant.shrinked);\n persistVariant(AppSidePanelVariant.shrinked);\n },\n expandSidePanel() {\n _setSidePanelVariant(AppSidePanelVariant.standard);\n persistVariant(AppSidePanelVariant.standard);\n },\n setBreadcrumbs(breadcrumbs: Omit<BreadcrumbItemProps, 'ref'>[]) {\n setBreadcrumbs(breadcrumbs);\n },\n product,\n breadcrumbs,\n sidePanelVariant,\n setSidePanelVariant: _setSidePanelVariant,\n appContainerRef: divRef as RefObject<HTMLDivElement>,\n isFullScreen,\n scrollContainer,\n setScrollContainer,\n };\n\n return (\n <StyledAppContainer\n {...forwardedProps}\n id=\"redsift-app-container\"\n $theme={theme}\n $product={product}\n className={classNames(AppContainer.className, className)}\n ref={divRef as RefObject<HTMLDivElement>}\n >\n <AppContainerContext.Provider value={state}>\n <ThemeProvider value={{ theme }}>\n <I18nProvider locale={locale}>{children}</I18nProvider>\n </ThemeProvider>\n </AppContainerContext.Provider>\n <RadarSvgLinearGradient />\n </StyledAppContainer>\n );\n});\nAppContainer.className = CLASSNAME;\nAppContainer.displayName = COMPONENT_NAME;\n"],"names":["StyledAppContainer","styled","div","_ref","$theme","_ref2","_ref3","COMPONENT_NAME","CLASSNAME","RadarSvgLinearGradient","React","createElement","width","height","id","x1","y1","x2","y2","stopColor","offset","AppContainer","forwardRef","props","ref","useRef","undefined","divRef","children","className","locale","product","storageKey","theme","propsTheme","isFullScreen","forwardedProps","_objectWithoutProperties","_excluded","useTheme","sidePanelVariant","_setSidePanelVariant","useState","AppSidePanelVariant","hidden","standard","persistVariant","useCallback","variant","window","localStorage","setItem","JSON","stringify","useEffect","stored","getItem","parsed","parse","breadcrumbs","setBreadcrumbs","scrollContainer","setScrollContainer","state","collapseSidePanel","shrinked","expandSidePanel","setSidePanelVariant","appContainerRef","_extends","$product","classNames","AppContainerContext","Provider","value","ThemeProvider","I18nProvider","displayName"],"mappings":"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"}
@@ -22,7 +22,7 @@ const CLASSNAME = 'redsift-button';
22
22
  * For a semantic button that looks like a link, please use the LinkButton component.
23
23
  */
24
24
  const Button = /*#__PURE__*/forwardRef((props, ref) => {
25
- const _ref = useRef();
25
+ const _ref = useRef(undefined);
26
26
  const buttonRef = ref || _ref;
27
27
  const {
28
28
  transientProps,
@@ -1 +1 @@
1
- {"version":3,"file":"Button2.js","sources":["../../src/components/button/Button.tsx"],"sourcesContent":["import React, { forwardRef, RefObject, useRef } from 'react';\nimport classNames from 'classnames';\nimport { ButtonsColorPalette, Comp, getStylingTransientProps } from '../../types';\nimport { Icon } from '../../components/icon';\nimport { StyledButton } from './styles';\nimport { ButtonProps, ButtonVariant } from './types';\nimport { Spinner } from '../../components/spinner';\nimport { useTheme } from '../theme';\nimport { ConditionalWrapper } from '../conditional-wrapper';\nimport { StyledGradientBorder } from '../gradient-border';\n\nconst COMPONENT_NAME = 'Button';\nconst CLASSNAME = 'redsift-button';\n\n/**\n * The Button is a semantic button that looks like a button.\n *\n * For a semantic link that looks like a button, please use the ButtonLink component.\n * For a semantic link that looks like a link, please use the Link component.\n * For a semantic button that looks like a link, please use the LinkButton component.\n */\nexport const Button: Comp<ButtonProps, HTMLButtonElement> = forwardRef((props, ref) => {\n const _ref = useRef<HTMLButtonElement>();\n const buttonRef = ref || _ref;\n\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n const {\n children,\n className,\n color: propsColor,\n disabled,\n fullWidth,\n isActive,\n isDisabled: propsIsDisabled,\n isHovered,\n isLoading,\n leftIcon,\n leftIconProps,\n rightIcon,\n rightIconProps,\n theme: propsTheme,\n variant: propsVariant,\n ...forwardedProps\n } = otherProps;\n const isDisabled = isLoading || propsIsDisabled || disabled;\n\n const theme = useTheme(propsTheme);\n const color = Object.values(ButtonsColorPalette).includes(propsColor!) ? propsColor : 'primary';\n const variant = Object.values(ButtonVariant).includes(propsVariant!) ? propsVariant : 'primary';\n const isGradient = color === ButtonsColorPalette.radar;\n\n return (\n <ConditionalWrapper\n condition={isGradient && variant === ButtonVariant.secondary}\n wrapper={(children) => (\n <StyledGradientBorder\n $color={color}\n $isActive={isActive}\n $isDisabled={isDisabled}\n $isHovered={isHovered}\n $theme={theme}\n >\n {children}\n </StyledGradientBorder>\n )}\n >\n <StyledButton\n type=\"button\"\n {...forwardedProps}\n {...transientProps}\n $color={color}\n $fullWidth={fullWidth}\n $isActive={isActive}\n $isDisabled={isDisabled}\n $isGradient={isGradient}\n $isHovered={isHovered}\n $isLoading={isLoading}\n $theme={theme}\n $variant={variant}\n aria-disabled={isDisabled}\n className={classNames(Button.className, className)}\n disabled={isDisabled}\n ref={buttonRef as RefObject<HTMLButtonElement>}\n >\n {leftIcon ? <Icon icon={leftIcon} aria-hidden=\"true\" className=\"left\" {...leftIconProps} /> : null}\n {isLoading ? <Spinner size=\"small\" color={variant === ButtonVariant.primary ? 'grey-l1' : 'grey-l2'} /> : null}\n <span>{children}</span>\n {rightIcon ? <Icon icon={rightIcon} aria-hidden=\"true\" className=\"right\" {...rightIconProps} /> : null}\n </StyledButton>\n </ConditionalWrapper>\n );\n});\nButton.className = CLASSNAME;\nButton.displayName = COMPONENT_NAME;\n"],"names":["COMPONENT_NAME","CLASSNAME","Button","forwardRef","props","ref","_ref","useRef","buttonRef","transientProps","otherProps","getStylingTransientProps","children","className","color","propsColor","disabled","fullWidth","isActive","isDisabled","propsIsDisabled","isHovered","isLoading","leftIcon","leftIconProps","rightIcon","rightIconProps","theme","propsTheme","variant","propsVariant","forwardedProps","_objectWithoutProperties","_excluded","useTheme","Object","values","ButtonsColorPalette","includes","ButtonVariant","isGradient","radar","React","createElement","ConditionalWrapper","condition","secondary","wrapper","StyledGradientBorder","$color","$isActive","$isDisabled","$isHovered","$theme","StyledButton","_extends","type","$fullWidth","$isGradient","$isLoading","$variant","classNames","Icon","icon","Spinner","size","primary","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Button2.js","sources":["../../src/components/button/Button.tsx"],"sourcesContent":["import React, { forwardRef, RefObject, useRef } from 'react';\nimport classNames from 'classnames';\nimport { ButtonsColorPalette, Comp, getStylingTransientProps } from '../../types';\nimport { Icon } from '../../components/icon';\nimport { StyledButton } from './styles';\nimport { ButtonProps, ButtonVariant } from './types';\nimport { Spinner } from '../../components/spinner';\nimport { useTheme } from '../theme';\nimport { ConditionalWrapper } from '../conditional-wrapper';\nimport { StyledGradientBorder } from '../gradient-border';\n\nconst COMPONENT_NAME = 'Button';\nconst CLASSNAME = 'redsift-button';\n\n/**\n * The Button is a semantic button that looks like a button.\n *\n * For a semantic link that looks like a button, please use the ButtonLink component.\n * For a semantic link that looks like a link, please use the Link component.\n * For a semantic button that looks like a link, please use the LinkButton component.\n */\nexport const Button: Comp<ButtonProps, HTMLButtonElement> = forwardRef((props, ref) => {\n const _ref = useRef<HTMLButtonElement>(undefined);\n const buttonRef = ref || _ref;\n\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n const {\n children,\n className,\n color: propsColor,\n disabled,\n fullWidth,\n isActive,\n isDisabled: propsIsDisabled,\n isHovered,\n isLoading,\n leftIcon,\n leftIconProps,\n rightIcon,\n rightIconProps,\n theme: propsTheme,\n variant: propsVariant,\n ...forwardedProps\n } = otherProps;\n const isDisabled = isLoading || propsIsDisabled || disabled;\n\n const theme = useTheme(propsTheme);\n const color = Object.values(ButtonsColorPalette).includes(propsColor!) ? propsColor : 'primary';\n const variant = Object.values(ButtonVariant).includes(propsVariant!) ? propsVariant : 'primary';\n const isGradient = color === ButtonsColorPalette.radar;\n\n return (\n <ConditionalWrapper\n condition={isGradient && variant === ButtonVariant.secondary}\n wrapper={(children) => (\n <StyledGradientBorder\n $color={color}\n $isActive={isActive}\n $isDisabled={isDisabled}\n $isHovered={isHovered}\n $theme={theme}\n >\n {children}\n </StyledGradientBorder>\n )}\n >\n <StyledButton\n type=\"button\"\n {...forwardedProps}\n {...transientProps}\n $color={color}\n $fullWidth={fullWidth}\n $isActive={isActive}\n $isDisabled={isDisabled}\n $isGradient={isGradient}\n $isHovered={isHovered}\n $isLoading={isLoading}\n $theme={theme}\n $variant={variant}\n aria-disabled={isDisabled}\n className={classNames(Button.className, className)}\n disabled={isDisabled}\n ref={buttonRef as RefObject<HTMLButtonElement>}\n >\n {leftIcon ? <Icon icon={leftIcon} aria-hidden=\"true\" className=\"left\" {...leftIconProps} /> : null}\n {isLoading ? <Spinner size=\"small\" color={variant === ButtonVariant.primary ? 'grey-l1' : 'grey-l2'} /> : null}\n <span>{children}</span>\n {rightIcon ? <Icon icon={rightIcon} aria-hidden=\"true\" className=\"right\" {...rightIconProps} /> : null}\n </StyledButton>\n </ConditionalWrapper>\n );\n});\nButton.className = CLASSNAME;\nButton.displayName = COMPONENT_NAME;\n"],"names":["COMPONENT_NAME","CLASSNAME","Button","forwardRef","props","ref","_ref","useRef","undefined","buttonRef","transientProps","otherProps","getStylingTransientProps","children","className","color","propsColor","disabled","fullWidth","isActive","isDisabled","propsIsDisabled","isHovered","isLoading","leftIcon","leftIconProps","rightIcon","rightIconProps","theme","propsTheme","variant","propsVariant","forwardedProps","_objectWithoutProperties","_excluded","useTheme","Object","values","ButtonsColorPalette","includes","ButtonVariant","isGradient","radar","React","createElement","ConditionalWrapper","condition","secondary","wrapper","StyledGradientBorder","$color","$isActive","$isDisabled","$isHovered","$theme","StyledButton","_extends","type","$fullWidth","$isGradient","$isLoading","$variant","classNames","Icon","icon","Spinner","size","primary","displayName"],"mappings":"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"}
@@ -278,15 +278,20 @@ const Checkbox = /*#__PURE__*/forwardRef((props, ref) => {
278
278
  "aria-label": ariaLabel,
279
279
  "aria-labelledby": ariaLabelledby,
280
280
  "aria-readonly": isReadOnly,
281
- "aria-required": isRequired,
281
+ "aria-required": isRequired
282
+ // eslint-disable-next-line jsx-a11y/no-autofocus -- forwards the consumer's `autoFocus` prop
283
+ ,
282
284
  autoFocus: autoFocus,
283
285
  checked: isSelected || isControlled && propsIsSelected ? true : false,
284
286
  disabled: isDisabled,
285
287
  name: name,
286
288
  onChange: handleChange,
287
289
  ref: inputRef,
288
- type: "checkbox",
289
- value: value
290
+ type: "checkbox"
291
+ // React 18 renders an explicit `value={undefined}` as `value=""` (it sets `defaultValue`), and that is what
292
+ // a checked input submits. React 19 renders nothing, so pass the `''` explicitly on both.
293
+ ,
294
+ value: value !== null && value !== void 0 ? value : ''
290
295
  })));
291
296
  });
292
297
  Checkbox.className = CLASSNAME;
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox2.js","sources":["../../src/components/checkbox/styles.ts","../../src/components/checkbox/Checkbox.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { StyledCheckboxProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledCheckbox = styled.label<StyledCheckboxProps>`\n height: fit-content;\n position: relative;\n width: fit-content;\n ${baseStyling}\n\n align-items: flex-start;\n background: none;\n border: none;\n display: inline-flex;\n\n input {\n height: 100%;\n margin: 0;\n opacity: 0;\n overflow: visible;\n padding: 0;\n position: absolute;\n width: 100%;\n }\n\n span.label {\n ${({ $isDisabled, $isInvalid, $theme }) =>\n $isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-checkbox-text-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-checkbox-text-invalid);\n `\n : css`\n color: var(--redsift-color-${$theme}-components-checkbox-text-default);\n `}\n\n font-family: var(--redsift-typography-body-font-family);\n font-size: var(--redsift-typography-body-font-size);\n font-weight: var(--redsift-typography-body-font-weight);\n line-height: var(--redsift-typography-body-line-height);\n padding-left: 4px;\n padding-right: 16px;\n padding-top: 2px;\n\n [dir='rtl'] & {\n padding-left: 16px;\n padding-right: 4px;\n }\n }\n\n .redsift-icon {\n box-sizing: content-box;\n padding: 2px;\n width: 24px;\n\n ${({ $isColored, $isDisabled, $isInvalid, $isFocusVisible, $theme }) => css`\n ${$isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-checkbox-fill-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-checkbox-fill-invalid);\n `\n : css`\n color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-checkbox-fill-default)`\n : `var(--redsift-color-${$theme}-components-checkbox-fill-uncolored)`};\n `}\n\n ${$isFocusVisible && !$isDisabled\n ? css`\n background-color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-checkbox-fill-default-hover)`\n : `var(--redsift-color-${$theme}-components-checkbox-fill-uncolored-hover)`};\n `\n : ''}\n `}\n }\n\n &:hover,\n &:focus-visible {\n outline: none;\n\n ${({ $isColored, $isDisabled, $isInvalid, $theme }) =>\n !$isDisabled\n ? css`\n .redsift-icon {\n ${$isInvalid\n ? css`\n background-color: var(--redsift-color-${$theme}-components-checkbox-fill-invalid-hover);\n `\n : css`\n background-color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-checkbox-fill-default-hover)`\n : `var(--redsift-color-${$theme}-components-checkbox-fill-uncolored-hover)`};\n `}\n border-radius: 4px;\n }\n `\n : ''}\n }\n`;\n","import React, {\n ComponentProps,\n forwardRef,\n MutableRefObject,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport { useFocusRing } from '../../react-aria/react-aria/focus';\nimport { mdiCheckboxBlankOutline, mdiMinusBox, mdiCheckboxMarked } from '@redsift/icons';\nimport { Comp, getStylingTransientProps } from '../../types';\nimport { Icon } from '../icon';\nimport { CheckboxGroupContext } from '../checkbox-group/context';\nimport { warnIfNoAccessibleLabelFound } from '../../utils/warnIfNoAccessibleLabelFound';\nimport { CheckboxProps } from './types';\nimport { StyledCheckbox } from './styles';\nimport { useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'Checkbox';\nconst CLASSNAME = 'redsift-checkbox';\n\n/**\n * Checkbox allows users to select one or more items from a set, or to mark an\n * individual item as selected. Works standalone or within a CheckboxGroup.\n *\n * Supports controlled (`isSelected`) or uncontrolled (`defaultSelected`) modes.\n * Can display an indeterminate state for \"select all\" scenarios.\n *\n * **Accessibility:** Always provide a label via children or `aria-label`.\n *\n * @example\n * // Basic checkbox\n * <Checkbox>Accept terms and conditions</Checkbox>\n *\n * @example\n * // Controlled checkbox\n * <Checkbox isSelected={checked} onChange={setChecked}>\n * Subscribe to newsletter\n * </Checkbox>\n *\n * @example\n * // Uncontrolled with default selection\n * <Checkbox defaultSelected>Pre-selected option</Checkbox>\n *\n * @example\n * // Indeterminate state (for \"select all\" patterns)\n * <Checkbox\n * isIndeterminate={someSelected && !allSelected}\n * isSelected={allSelected}\n * onChange={handleSelectAll}\n * >\n * Select all\n * </Checkbox>\n *\n * @example\n * // Validation states\n * <Checkbox isRequired>Required field</Checkbox>\n * <Checkbox isDisabled>Disabled option</Checkbox>\n * <Checkbox isReadOnly isSelected>Read-only selected</Checkbox>\n * <Checkbox isInvalid={!accepted}>You must accept the terms</Checkbox>\n *\n * @example\n * // Grey checkbox (no accent color)\n * <Checkbox isColored={false}>Neutral checkbox</Checkbox>\n *\n * @example\n * // Within a CheckboxGroup\n * <CheckboxGroup label=\"Select toppings\" onChange={setToppings}>\n * <Checkbox value=\"cheese\">Cheese</Checkbox>\n * <Checkbox value=\"pepperoni\">Pepperoni</Checkbox>\n * <Checkbox value=\"mushrooms\">Mushrooms</Checkbox>\n * </CheckboxGroup>\n */\nexport const Checkbox: Comp<CheckboxProps, HTMLLabelElement> = forwardRef((props, ref) => {\n const groupState = useContext(CheckboxGroupContext);\n\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n let {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n autoFocus,\n children,\n className,\n defaultSelected,\n inputProps,\n inputRef,\n isColored = true,\n isDisabled,\n isIndeterminate,\n isInvalid,\n isReadOnly,\n isRequired,\n isSelected: propsIsSelected,\n name,\n onChange,\n theme: propsTheme,\n value,\n ...forwardedProps\n } = otherProps;\n\n const theme = useTheme(propsTheme);\n\n const { isFocusVisible, focusProps } = useFocusRing({ autoFocus });\n isDisabled = isDisabled ?? groupState?.isDisabled;\n isReadOnly = isReadOnly ?? groupState?.isReadOnly;\n\n const [isSelected, setSelected] = useState(\n Boolean(propsIsSelected ?? defaultSelected ?? groupState?.value.includes(value as string))\n );\n const isControlled = propsIsSelected !== null && propsIsSelected !== undefined;\n\n useEffect(() => {\n setSelected(Boolean(propsIsSelected ?? defaultSelected));\n }, [propsIsSelected, defaultSelected]);\n\n useEffect(() => {\n if (groupState) {\n setSelected(groupState.value.includes(value as string));\n }\n }, [groupState?.value]);\n\n warnIfNoAccessibleLabelFound(props as ComponentProps<'label'>, [children], 'Checkbox');\n\n if (groupState) {\n if (propsIsSelected != null) {\n console.warn(\n 'isSelected is unsupported on individual <Checkbox> elements within a <CheckboxGroup> unless the <Checkbox> is controlled. Please apply this prop to the group instead or pass isControlled to the component.'\n );\n }\n if (defaultSelected != null) {\n console.warn(\n 'defaultSelected is unsupported on individual <Checkbox> elements within a <CheckboxGroup> unless the <Checkbox> is controlled. Please apply this prop to the group instead or pass isControlled to the component.'\n );\n }\n if (props.value == null) {\n console.warn(\n 'A <Checkbox> element within a <CheckboxGroup> requires a `value` property unless the <Checkbox> is controlled.'\n );\n }\n }\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (isDisabled || isReadOnly) {\n return;\n }\n\n if (groupState) {\n if (!groupState.value.includes(value as string)) {\n groupState.addValue(value as string);\n } else {\n groupState.removeValue(value as string);\n }\n }\n\n if (isControlled) {\n onChange?.(!propsIsSelected, value, name, event, groupState!);\n } else {\n setSelected(!isSelected);\n onChange?.(!isSelected, value, name, event, groupState!);\n }\n },\n [onChange, groupState, isSelected, propsIsSelected]\n );\n\n return (\n <StyledCheckbox\n {...forwardedProps}\n {...transientProps}\n $isColored={isColored}\n $isDisabled={isDisabled}\n $isFocusVisible={isFocusVisible}\n $isInvalid={isInvalid || (isRequired && !(isSelected || (isControlled && propsIsSelected)))}\n $isRequired={isRequired}\n $isSelected={isSelected || (isControlled && propsIsSelected)}\n $theme={theme}\n className={classNames(Checkbox.className, className)}\n ref={ref as MutableRefObject<HTMLLabelElement>}\n >\n {isSelected || (isControlled && propsIsSelected) ? (\n <Icon icon={mdiCheckboxMarked} />\n ) : isIndeterminate ? (\n <Icon icon={mdiMinusBox} />\n ) : (\n <Icon icon={mdiCheckboxBlankOutline} />\n )}\n {children ? <span className=\"label\">{children}</span> : null}\n <input\n {...inputProps}\n {...focusProps}\n aria-checked={isSelected || (isControlled && propsIsSelected) ? 'true' : isIndeterminate ? 'mixed' : 'false'}\n aria-disabled={isDisabled}\n aria-invalid={isInvalid || (isRequired && !(isSelected || (isControlled && propsIsSelected)))}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-readonly={isReadOnly}\n aria-required={isRequired}\n autoFocus={autoFocus}\n checked={isSelected || (isControlled && propsIsSelected) ? true : false}\n disabled={isDisabled}\n name={name}\n onChange={handleChange}\n ref={inputRef as MutableRefObject<HTMLInputElement>}\n type=\"checkbox\"\n value={value}\n />\n </StyledCheckbox>\n );\n});\nCheckbox.className = CLASSNAME;\nCheckbox.displayName = COMPONENT_NAME;\n"],"names":["StyledCheckbox","styled","label","baseStyling","_ref","$isDisabled","$isInvalid","$theme","css","_ref2","$isColored","$isFocusVisible","_ref3","COMPONENT_NAME","CLASSNAME","Checkbox","forwardRef","props","ref","_isDisabled","_isReadOnly","groupState","useContext","CheckboxGroupContext","transientProps","otherProps","getStylingTransientProps","ariaLabel","ariaLabelledby","autoFocus","children","className","defaultSelected","inputProps","inputRef","isColored","isDisabled","isIndeterminate","isInvalid","isReadOnly","isRequired","isSelected","propsIsSelected","name","onChange","theme","propsTheme","value","forwardedProps","_objectWithoutProperties","_excluded","useTheme","isFocusVisible","focusProps","useFocusRing","setSelected","useState","Boolean","includes","isControlled","undefined","useEffect","warnIfNoAccessibleLabelFound","console","warn","handleChange","useCallback","event","addValue","removeValue","React","createElement","_extends","$isRequired","$isSelected","classNames","Icon","icon","mdiCheckboxMarked","mdiMinusBox","mdiCheckboxBlankOutline","checked","disabled","type","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Checkbox2.js","sources":["../../src/components/checkbox/styles.ts","../../src/components/checkbox/Checkbox.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { StyledCheckboxProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledCheckbox = styled.label<StyledCheckboxProps>`\n height: fit-content;\n position: relative;\n width: fit-content;\n ${baseStyling}\n\n align-items: flex-start;\n background: none;\n border: none;\n display: inline-flex;\n\n input {\n height: 100%;\n margin: 0;\n opacity: 0;\n overflow: visible;\n padding: 0;\n position: absolute;\n width: 100%;\n }\n\n span.label {\n ${({ $isDisabled, $isInvalid, $theme }) =>\n $isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-checkbox-text-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-checkbox-text-invalid);\n `\n : css`\n color: var(--redsift-color-${$theme}-components-checkbox-text-default);\n `}\n\n font-family: var(--redsift-typography-body-font-family);\n font-size: var(--redsift-typography-body-font-size);\n font-weight: var(--redsift-typography-body-font-weight);\n line-height: var(--redsift-typography-body-line-height);\n padding-left: 4px;\n padding-right: 16px;\n padding-top: 2px;\n\n [dir='rtl'] & {\n padding-left: 16px;\n padding-right: 4px;\n }\n }\n\n .redsift-icon {\n box-sizing: content-box;\n padding: 2px;\n width: 24px;\n\n ${({ $isColored, $isDisabled, $isInvalid, $isFocusVisible, $theme }) => css`\n ${$isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-checkbox-fill-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-checkbox-fill-invalid);\n `\n : css`\n color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-checkbox-fill-default)`\n : `var(--redsift-color-${$theme}-components-checkbox-fill-uncolored)`};\n `}\n\n ${$isFocusVisible && !$isDisabled\n ? css`\n background-color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-checkbox-fill-default-hover)`\n : `var(--redsift-color-${$theme}-components-checkbox-fill-uncolored-hover)`};\n `\n : ''}\n `}\n }\n\n &:hover,\n &:focus-visible {\n outline: none;\n\n ${({ $isColored, $isDisabled, $isInvalid, $theme }) =>\n !$isDisabled\n ? css`\n .redsift-icon {\n ${$isInvalid\n ? css`\n background-color: var(--redsift-color-${$theme}-components-checkbox-fill-invalid-hover);\n `\n : css`\n background-color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-checkbox-fill-default-hover)`\n : `var(--redsift-color-${$theme}-components-checkbox-fill-uncolored-hover)`};\n `}\n border-radius: 4px;\n }\n `\n : ''}\n }\n`;\n","import React, {\n ComponentProps,\n forwardRef,\n MutableRefObject,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport { useFocusRing } from '../../react-aria/react-aria/focus';\nimport { mdiCheckboxBlankOutline, mdiMinusBox, mdiCheckboxMarked } from '@redsift/icons';\nimport { Comp, getStylingTransientProps } from '../../types';\nimport { Icon } from '../icon';\nimport { CheckboxGroupContext } from '../checkbox-group/context';\nimport { warnIfNoAccessibleLabelFound } from '../../utils/warnIfNoAccessibleLabelFound';\nimport { CheckboxProps } from './types';\nimport { StyledCheckbox } from './styles';\nimport { useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'Checkbox';\nconst CLASSNAME = 'redsift-checkbox';\n\n/**\n * Checkbox allows users to select one or more items from a set, or to mark an\n * individual item as selected. Works standalone or within a CheckboxGroup.\n *\n * Supports controlled (`isSelected`) or uncontrolled (`defaultSelected`) modes.\n * Can display an indeterminate state for \"select all\" scenarios.\n *\n * **Accessibility:** Always provide a label via children or `aria-label`.\n *\n * @example\n * // Basic checkbox\n * <Checkbox>Accept terms and conditions</Checkbox>\n *\n * @example\n * // Controlled checkbox\n * <Checkbox isSelected={checked} onChange={setChecked}>\n * Subscribe to newsletter\n * </Checkbox>\n *\n * @example\n * // Uncontrolled with default selection\n * <Checkbox defaultSelected>Pre-selected option</Checkbox>\n *\n * @example\n * // Indeterminate state (for \"select all\" patterns)\n * <Checkbox\n * isIndeterminate={someSelected && !allSelected}\n * isSelected={allSelected}\n * onChange={handleSelectAll}\n * >\n * Select all\n * </Checkbox>\n *\n * @example\n * // Validation states\n * <Checkbox isRequired>Required field</Checkbox>\n * <Checkbox isDisabled>Disabled option</Checkbox>\n * <Checkbox isReadOnly isSelected>Read-only selected</Checkbox>\n * <Checkbox isInvalid={!accepted}>You must accept the terms</Checkbox>\n *\n * @example\n * // Grey checkbox (no accent color)\n * <Checkbox isColored={false}>Neutral checkbox</Checkbox>\n *\n * @example\n * // Within a CheckboxGroup\n * <CheckboxGroup label=\"Select toppings\" onChange={setToppings}>\n * <Checkbox value=\"cheese\">Cheese</Checkbox>\n * <Checkbox value=\"pepperoni\">Pepperoni</Checkbox>\n * <Checkbox value=\"mushrooms\">Mushrooms</Checkbox>\n * </CheckboxGroup>\n */\nexport const Checkbox: Comp<CheckboxProps, HTMLLabelElement> = forwardRef((props, ref) => {\n const groupState = useContext(CheckboxGroupContext);\n\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n let {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n autoFocus,\n children,\n className,\n defaultSelected,\n inputProps,\n inputRef,\n isColored = true,\n isDisabled,\n isIndeterminate,\n isInvalid,\n isReadOnly,\n isRequired,\n isSelected: propsIsSelected,\n name,\n onChange,\n theme: propsTheme,\n value,\n ...forwardedProps\n } = otherProps;\n\n const theme = useTheme(propsTheme);\n\n const { isFocusVisible, focusProps } = useFocusRing({ autoFocus });\n isDisabled = isDisabled ?? groupState?.isDisabled;\n isReadOnly = isReadOnly ?? groupState?.isReadOnly;\n\n const [isSelected, setSelected] = useState(\n Boolean(propsIsSelected ?? defaultSelected ?? groupState?.value.includes(value as string))\n );\n const isControlled = propsIsSelected !== null && propsIsSelected !== undefined;\n\n useEffect(() => {\n setSelected(Boolean(propsIsSelected ?? defaultSelected));\n }, [propsIsSelected, defaultSelected]);\n\n useEffect(() => {\n if (groupState) {\n setSelected(groupState.value.includes(value as string));\n }\n }, [groupState?.value]);\n\n warnIfNoAccessibleLabelFound(props as ComponentProps<'label'>, [children], 'Checkbox');\n\n if (groupState) {\n if (propsIsSelected != null) {\n console.warn(\n 'isSelected is unsupported on individual <Checkbox> elements within a <CheckboxGroup> unless the <Checkbox> is controlled. Please apply this prop to the group instead or pass isControlled to the component.'\n );\n }\n if (defaultSelected != null) {\n console.warn(\n 'defaultSelected is unsupported on individual <Checkbox> elements within a <CheckboxGroup> unless the <Checkbox> is controlled. Please apply this prop to the group instead or pass isControlled to the component.'\n );\n }\n if (props.value == null) {\n console.warn(\n 'A <Checkbox> element within a <CheckboxGroup> requires a `value` property unless the <Checkbox> is controlled.'\n );\n }\n }\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (isDisabled || isReadOnly) {\n return;\n }\n\n if (groupState) {\n if (!groupState.value.includes(value as string)) {\n groupState.addValue(value as string);\n } else {\n groupState.removeValue(value as string);\n }\n }\n\n if (isControlled) {\n onChange?.(!propsIsSelected, value, name, event, groupState!);\n } else {\n setSelected(!isSelected);\n onChange?.(!isSelected, value, name, event, groupState!);\n }\n },\n [onChange, groupState, isSelected, propsIsSelected]\n );\n\n return (\n <StyledCheckbox\n {...forwardedProps}\n {...transientProps}\n $isColored={isColored}\n $isDisabled={isDisabled}\n $isFocusVisible={isFocusVisible}\n $isInvalid={isInvalid || (isRequired && !(isSelected || (isControlled && propsIsSelected)))}\n $isRequired={isRequired}\n $isSelected={isSelected || (isControlled && propsIsSelected)}\n $theme={theme}\n className={classNames(Checkbox.className, className)}\n ref={ref as MutableRefObject<HTMLLabelElement>}\n >\n {isSelected || (isControlled && propsIsSelected) ? (\n <Icon icon={mdiCheckboxMarked} />\n ) : isIndeterminate ? (\n <Icon icon={mdiMinusBox} />\n ) : (\n <Icon icon={mdiCheckboxBlankOutline} />\n )}\n {children ? <span className=\"label\">{children}</span> : null}\n <input\n {...inputProps}\n {...focusProps}\n aria-checked={isSelected || (isControlled && propsIsSelected) ? 'true' : isIndeterminate ? 'mixed' : 'false'}\n aria-disabled={isDisabled}\n aria-invalid={isInvalid || (isRequired && !(isSelected || (isControlled && propsIsSelected)))}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-readonly={isReadOnly}\n aria-required={isRequired}\n // eslint-disable-next-line jsx-a11y/no-autofocus -- forwards the consumer's `autoFocus` prop\n autoFocus={autoFocus}\n checked={isSelected || (isControlled && propsIsSelected) ? true : false}\n disabled={isDisabled}\n name={name}\n onChange={handleChange}\n ref={inputRef as MutableRefObject<HTMLInputElement>}\n type=\"checkbox\"\n // React 18 renders an explicit `value={undefined}` as `value=\"\"` (it sets `defaultValue`), and that is what\n // a checked input submits. React 19 renders nothing, so pass the `''` explicitly on both.\n value={value ?? ''}\n />\n </StyledCheckbox>\n );\n});\nCheckbox.className = CLASSNAME;\nCheckbox.displayName = COMPONENT_NAME;\n"],"names":["StyledCheckbox","styled","label","baseStyling","_ref","$isDisabled","$isInvalid","$theme","css","_ref2","$isColored","$isFocusVisible","_ref3","COMPONENT_NAME","CLASSNAME","Checkbox","forwardRef","props","ref","_isDisabled","_isReadOnly","groupState","useContext","CheckboxGroupContext","transientProps","otherProps","getStylingTransientProps","ariaLabel","ariaLabelledby","autoFocus","children","className","defaultSelected","inputProps","inputRef","isColored","isDisabled","isIndeterminate","isInvalid","isReadOnly","isRequired","isSelected","propsIsSelected","name","onChange","theme","propsTheme","value","forwardedProps","_objectWithoutProperties","_excluded","useTheme","isFocusVisible","focusProps","useFocusRing","setSelected","useState","Boolean","includes","isControlled","undefined","useEffect","warnIfNoAccessibleLabelFound","console","warn","handleChange","useCallback","event","addValue","removeValue","React","createElement","_extends","$isRequired","$isSelected","classNames","Icon","icon","mdiCheckboxMarked","mdiMinusBox","mdiCheckboxBlankOutline","checked","disabled","type","displayName"],"mappings":"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"}