@edgeandnode/eds-react 1.0.2 → 1.1.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 (115) hide show
  1. package/README.md +32 -7
  2. package/dist/EDSContext.d.ts +2 -2
  3. package/dist/EDSContext.d.ts.map +1 -1
  4. package/dist/EDSContext.js +1 -1
  5. package/dist/EDSContext.js.map +1 -1
  6. package/dist/EDSProvider.d.ts +13 -6
  7. package/dist/EDSProvider.d.ts.map +1 -1
  8. package/dist/EDSProvider.js +48 -63
  9. package/dist/EDSProvider.js.map +1 -1
  10. package/dist/components/Address.d.ts +3 -3
  11. package/dist/components/Address.d.ts.map +1 -1
  12. package/dist/components/Address.js.map +1 -1
  13. package/dist/components/Avatar.d.ts +3 -3
  14. package/dist/components/Avatar.d.ts.map +1 -1
  15. package/dist/components/Avatar.js.map +1 -1
  16. package/dist/components/Breadcrumbs.parts.d.ts +3 -3
  17. package/dist/components/Breadcrumbs.parts.d.ts.map +1 -1
  18. package/dist/components/Breadcrumbs.parts.js.map +1 -1
  19. package/dist/components/Button.d.ts.map +1 -1
  20. package/dist/components/Button.js +1 -1
  21. package/dist/components/Button.js.map +1 -1
  22. package/dist/components/Card.d.ts +8 -4
  23. package/dist/components/Card.d.ts.map +1 -1
  24. package/dist/components/Card.js +2 -1
  25. package/dist/components/Card.js.map +1 -1
  26. package/dist/components/Cluster.d.ts +3 -3
  27. package/dist/components/Cluster.d.ts.map +1 -1
  28. package/dist/components/Cluster.js.map +1 -1
  29. package/dist/components/Keyboard.js +1 -1
  30. package/dist/components/LocalTheme.d.ts +21 -8
  31. package/dist/components/LocalTheme.d.ts.map +1 -1
  32. package/dist/components/LocalTheme.js +10 -4
  33. package/dist/components/LocalTheme.js.map +1 -1
  34. package/dist/components/Menu.parts.d.ts +43 -9
  35. package/dist/components/Menu.parts.d.ts.map +1 -1
  36. package/dist/components/Menu.parts.js +118 -114
  37. package/dist/components/Menu.parts.js.map +1 -1
  38. package/dist/components/Modal.parts.d.ts +1 -1
  39. package/dist/components/Modal.parts.d.ts.map +1 -1
  40. package/dist/components/Modal.parts.js +2 -2
  41. package/dist/components/Modal.parts.js.map +1 -1
  42. package/dist/components/Pane.parts.d.ts +23 -22
  43. package/dist/components/Pane.parts.d.ts.map +1 -1
  44. package/dist/components/Pane.parts.js +3 -3
  45. package/dist/components/Pane.parts.js.map +1 -1
  46. package/dist/components/Prose.d.ts +1 -1
  47. package/dist/components/Prose.d.ts.map +1 -1
  48. package/dist/components/Prose.js +3 -3
  49. package/dist/components/Prose.js.map +1 -1
  50. package/dist/components/Prose.meta.d.ts +5 -0
  51. package/dist/components/Prose.meta.d.ts.map +1 -1
  52. package/dist/components/Prose.meta.js +10 -0
  53. package/dist/components/Prose.meta.js.map +1 -1
  54. package/dist/components/Select.parts.d.ts +8 -3
  55. package/dist/components/Select.parts.d.ts.map +1 -1
  56. package/dist/components/Select.parts.js +26 -17
  57. package/dist/components/Select.parts.js.map +1 -1
  58. package/dist/components/ThemeSwitcher.d.ts +5 -5
  59. package/dist/components/ThemeSwitcher.d.ts.map +1 -1
  60. package/dist/components/ThemeSwitcher.js +5 -4
  61. package/dist/components/ThemeSwitcher.js.map +1 -1
  62. package/dist/components/base/MaybeButtonOrLink.d.ts +7 -5
  63. package/dist/components/base/MaybeButtonOrLink.d.ts.map +1 -1
  64. package/dist/components/base/MaybeButtonOrLink.js +7 -2
  65. package/dist/components/base/MaybeButtonOrLink.js.map +1 -1
  66. package/dist/components/base/Render.d.ts +25 -6
  67. package/dist/components/base/Render.d.ts.map +1 -1
  68. package/dist/components/base/Render.js +4 -3
  69. package/dist/components/base/Render.js.map +1 -1
  70. package/dist/components/base/index.d.ts +1 -1
  71. package/dist/components/base/index.d.ts.map +1 -1
  72. package/dist/components/base/index.js.map +1 -1
  73. package/dist/components/index.d.ts +1 -1
  74. package/dist/components/index.d.ts.map +1 -1
  75. package/dist/components/index.js +1 -1
  76. package/dist/components/index.js.map +1 -1
  77. package/dist/hooks/useEDS.d.ts +16 -8
  78. package/dist/hooks/useEDS.d.ts.map +1 -1
  79. package/dist/hooks/useEDS.js +16 -8
  80. package/dist/hooks/useEDS.js.map +1 -1
  81. package/dist/index.d.ts +2 -1
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +1 -0
  84. package/dist/index.js.map +1 -1
  85. package/dist/theme-persistence.d.ts +18 -0
  86. package/dist/theme-persistence.d.ts.map +1 -0
  87. package/dist/theme-persistence.js +25 -0
  88. package/dist/theme-persistence.js.map +1 -0
  89. package/package.json +20 -20
  90. package/skill/SKILL.md +90 -56
  91. package/skill/references/tokens.md +1 -1
  92. package/src/EDSContext.ts +2 -2
  93. package/src/EDSProvider.tsx +80 -74
  94. package/src/components/Address.tsx +4 -3
  95. package/src/components/Avatar.tsx +7 -3
  96. package/src/components/Breadcrumbs.parts.tsx +4 -3
  97. package/src/components/Button.tsx +4 -0
  98. package/src/components/Card.tsx +14 -8
  99. package/src/components/Cluster.tsx +5 -3
  100. package/src/components/Keyboard.tsx +1 -1
  101. package/src/components/LocalTheme.tsx +22 -14
  102. package/src/components/Menu.parts.tsx +365 -244
  103. package/src/components/Modal.parts.tsx +8 -1
  104. package/src/components/Pane.parts.tsx +31 -26
  105. package/src/components/Prose.meta.ts +10 -0
  106. package/src/components/Prose.tsx +4 -3
  107. package/src/components/Select.parts.tsx +37 -29
  108. package/src/components/ThemeSwitcher.tsx +11 -13
  109. package/src/components/base/MaybeButtonOrLink.tsx +11 -6
  110. package/src/components/base/Render.tsx +28 -4
  111. package/src/components/base/index.ts +2 -0
  112. package/src/components/index.ts +8 -1
  113. package/src/hooks/useEDS.ts +16 -8
  114. package/src/index.ts +2 -1
  115. package/src/theme-persistence.ts +31 -0
@@ -168,6 +168,10 @@ export function Button({
168
168
  u:*:transition-opacity
169
169
  u:*:@state-disabled/button:opacity-disabled
170
170
  u:*:@state-disabled/button:grayscale
171
+ u:*:@prop-variant-inverse/button:scheme-only-dark
172
+ u:*:@prop-variant-inverse/button:dark:scheme-only-light
173
+ u:*:@prop-variant-primary/button:scheme-only-dark
174
+ u:*:@prop-variant-danger/button:scheme-only-dark
171
175
  u:@prop-size-xsmall/button:addon-small
172
176
  u:@prop-size-small/button:addon-small
173
177
  u:@prop-size-medium/button:addon-medium
@@ -1,7 +1,8 @@
1
1
  'use client'
2
2
 
3
- import { useId, type ReactNode } from 'react'
3
+ import { useId, type ElementType, type ReactNode, type Ref } from 'react'
4
4
  import { mergeProps } from '@base-ui/react'
5
+ import type { DistributedOmit } from 'type-fest'
5
6
 
6
7
  import type { EDSComponentProps } from '@edgeandnode/eds-css'
7
8
  import { ArrowUpRightInteractiveIcon } from '@edgeandnode/eds-react/icons'
@@ -32,20 +33,24 @@ export declare namespace CardProps {
32
33
  */
33
34
  autoIcon?: boolean | undefined
34
35
  }
36
+ interface CommonProps extends EDSComponentProps<typeof CardMeta> {
37
+ /** Attached to the card's outer element, even when the card is a button or link. */
38
+ ref?: Ref<HTMLElement> | undefined
39
+ }
35
40
  interface ButtonProps
36
41
  extends
37
- EDSComponentProps<typeof CardMeta>,
42
+ CommonProps,
38
43
  ClickableProps,
39
- MaybeButtonOrLinkProps.ButtonProps,
44
+ Omit<MaybeButtonOrLinkProps.ButtonProps, 'ref' | 'render'>,
40
45
  MaybeButtonOrLinkProps.DisableableProps {}
41
46
  interface LinkProps
42
47
  extends
43
- EDSComponentProps<typeof CardMeta>,
48
+ CommonProps,
44
49
  ClickableProps,
45
- MaybeButtonOrLinkProps.LinkProps,
50
+ Omit<MaybeButtonOrLinkProps.LinkProps, 'ref' | 'render'>,
46
51
  MaybeButtonOrLinkProps.DisableableProps {}
47
52
  interface OtherElementProps
48
- extends EDSComponentProps<typeof CardMeta>, MaybeButtonOrLinkProps.OtherElementProps {}
53
+ extends CommonProps, Omit<MaybeButtonOrLinkProps.OtherElementProps, 'ref' | 'render'> {}
49
54
  }
50
55
 
51
56
  export type CardProps = CardProps.ButtonProps | CardProps.LinkProps | CardProps.OtherElementProps
@@ -57,7 +62,7 @@ export function Card({ ref: passedRef, as, variant, disabled, children, ...props
57
62
  interactiveContent = false,
58
63
  autoIcon = true,
59
64
  ...remainingProps
60
- } = props as CardProps.ButtonProps | CardProps.LinkProps
65
+ } = props as DistributedOmit<CardProps.ButtonProps | CardProps.LinkProps, 'ref'>
61
66
  const { rootProps, nestedProps } = splitProps(remainingProps)
62
67
 
63
68
  const [statePassedRef, state] = useCSSState(
@@ -75,7 +80,8 @@ export function Card({ ref: passedRef, as, variant, disabled, children, ...props
75
80
  { ref: statePassedRef },
76
81
  )
77
82
 
78
- const Element = as ?? 'div'
83
+ // The union of every HTML tag name is too complex a type for JSX
84
+ const Element = (as ?? 'div') as ElementType
79
85
  const uniqueId = useId()
80
86
 
81
87
  return (
@@ -11,11 +11,13 @@ import { ClusterMeta } from './Cluster.meta.ts'
11
11
 
12
12
  export declare namespace ClusterProps {
13
13
  interface ButtonProps
14
- extends EDSComponentProps<typeof ClusterMeta>, MaybeButtonOrLinkProps.ButtonProps {}
14
+ extends EDSComponentProps<typeof ClusterMeta>, Omit<MaybeButtonOrLinkProps.ButtonProps, 'as'> {}
15
15
  interface LinkProps
16
- extends EDSComponentProps<typeof ClusterMeta>, MaybeButtonOrLinkProps.LinkProps {}
16
+ extends EDSComponentProps<typeof ClusterMeta>, Omit<MaybeButtonOrLinkProps.LinkProps, 'as'> {}
17
17
  interface OtherElementProps
18
- extends EDSComponentProps<typeof ClusterMeta>, MaybeButtonOrLinkProps.OtherElementProps {}
18
+ extends
19
+ EDSComponentProps<typeof ClusterMeta>,
20
+ Omit<MaybeButtonOrLinkProps.OtherElementProps, 'as'> {}
19
21
  }
20
22
 
21
23
  export type ClusterProps =
@@ -54,7 +54,7 @@ export function Keyboard({ ref: passedRef, size, children, ...props }: KeyboardP
54
54
  >
55
55
  <span
56
56
  className={cn(
57
- `inline-flex h-(--height) min-w-(--height) items-center justify-center rounded-4 border border-default
57
+ `inline-flex h-(--height) min-w-(--height) items-center justify-center rounded-4 border border-current/15
58
58
  @prop-size-small/keyboard:gap-0.5
59
59
  @prop-size-small/keyboard:px-0.75
60
60
  @prop-size-small/keyboard:text-10
@@ -1,39 +1,47 @@
1
1
  'use client'
2
2
 
3
- import type { ComponentProps, ElementType } from 'react'
4
3
  import { mergeProps } from '@base-ui/react'
4
+ import type { DistributedOmit } from 'type-fest'
5
5
 
6
6
  import { LocalThemeContext, THEME_CLASSES, type ResolvedTheme } from '../EDSContext.ts'
7
+ import { Render, type AsOrRenderProps, type HTMLElementProps } from './base/Render.tsx'
7
8
 
8
- export interface LocalThemeProps extends ComponentProps<'div'> {
9
- /** @default 'div' */
10
- as?: ElementType | undefined
9
+ export declare namespace LocalThemeProps {
10
+ interface CommonProps extends HTMLElementProps {
11
+ /** The theme to render the content in. */
12
+ theme: ResolvedTheme
13
+ }
11
14
  }
12
15
 
13
- function LocalTheme({
14
- theme,
15
- as: Element = 'div',
16
- ...props
17
- }: LocalThemeProps & { theme: ResolvedTheme }) {
16
+ export type LocalThemeProps = LocalThemeProps.CommonProps & AsOrRenderProps
17
+ export type DarkProps = DistributedOmit<LocalThemeProps, 'theme'>
18
+ export type LightProps = DistributedOmit<LocalThemeProps, 'theme'>
19
+
20
+ /**
21
+ * Renders its content in the given theme, whatever the page's theme is. Unlike switching between
22
+ * `Dark` and `Light`, changing `theme` doesn't remount the content. Components that need to know
23
+ * the theme in JavaScript can read it with `useEDS().activeTheme`.
24
+ */
25
+ export function LocalTheme({ theme, ...props }: LocalThemeProps) {
18
26
  return (
19
27
  <LocalThemeContext.Provider value={theme}>
20
- <Element {...mergeProps({ className: THEME_CLASSES[theme] }, props)} />
28
+ <Render {...mergeProps({ className: THEME_CLASSES[theme] }, props)} />
21
29
  </LocalThemeContext.Provider>
22
30
  )
23
31
  }
24
32
 
25
33
  /**
26
34
  * Renders its content in the dark theme, whatever the page's theme is. Components that need to know
27
- * the theme in JavaScript can read it with `useEDS().localTheme`.
35
+ * the theme in JavaScript can read it with `useEDS().activeTheme`.
28
36
  */
29
- export function Dark(props: LocalThemeProps) {
37
+ export function Dark(props: DarkProps) {
30
38
  return <LocalTheme theme="dark" {...props} />
31
39
  }
32
40
 
33
41
  /**
34
42
  * Renders its content in the light theme, whatever the page's theme is. Components that need to
35
- * know the theme in JavaScript can read it with `useEDS().localTheme`.
43
+ * know the theme in JavaScript can read it with `useEDS().activeTheme`.
36
44
  */
37
- export function Light(props: LocalThemeProps) {
45
+ export function Light(props: LightProps) {
38
46
  return <LocalTheme theme="light" {...props} />
39
47
  }