@sanity/ui 4.0.0-next.4 → 4.0.0-next.5

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 (97) hide show
  1. package/README.md +4 -0
  2. package/dist/_system-CTe2lb5l.d.ts +40 -0
  3. package/dist/_system-CTe2lb5l.d.ts.map +1 -0
  4. package/dist/arrow-BG0EMNiC.js +159 -0
  5. package/dist/arrow-BG0EMNiC.js.map +1 -0
  6. package/dist/autocomplete.d.ts +140 -0
  7. package/dist/autocomplete.d.ts.map +1 -0
  8. package/dist/autocomplete.js +468 -0
  9. package/dist/autocomplete.js.map +1 -0
  10. package/dist/breadcrumbs.d.ts +18 -0
  11. package/dist/breadcrumbs.d.ts.map +1 -0
  12. package/dist/breadcrumbs.js +112 -0
  13. package/dist/breadcrumbs.js.map +1 -0
  14. package/dist/button-BzoZs3Sl.d.ts +76 -0
  15. package/dist/button-BzoZs3Sl.d.ts.map +1 -0
  16. package/dist/button-DZkAQOL2.js +174 -0
  17. package/dist/button-DZkAQOL2.js.map +1 -0
  18. package/dist/card-C0a0wQTc.d.ts +7 -0
  19. package/dist/card-C0a0wQTc.d.ts.map +1 -0
  20. package/dist/code.d.ts +20 -0
  21. package/dist/code.d.ts.map +1 -0
  22. package/dist/code.js +85 -0
  23. package/dist/code.js.map +1 -0
  24. package/dist/codeFontStyle-DYUujk7K.js +11 -0
  25. package/dist/codeFontStyle-DYUujk7K.js.map +1 -0
  26. package/dist/component-DVlwaWB-.d.ts +25 -0
  27. package/dist/component-DVlwaWB-.d.ts.map +1 -0
  28. package/dist/element-BYgCE_iK.js +51 -0
  29. package/dist/element-BYgCE_iK.js.map +1 -0
  30. package/dist/{getScopedTheme-CqaSCfTH.js → factory-CvRcEQ36.js} +6 -753
  31. package/dist/factory-CvRcEQ36.js.map +1 -0
  32. package/dist/flex-BYRpBTOc.js +69 -0
  33. package/dist/flex-BYRpBTOc.js.map +1 -0
  34. package/dist/font-EtfxKPUz.d.ts +49 -0
  35. package/dist/font-EtfxKPUz.d.ts.map +1 -0
  36. package/dist/getElementRef-5HZQ-Owu.js +91 -0
  37. package/dist/getElementRef-5HZQ-Owu.js.map +1 -0
  38. package/dist/getScopedTheme-C-sZsyAz.js +267 -0
  39. package/dist/getScopedTheme-C-sZsyAz.js.map +1 -0
  40. package/dist/getTheme_v2-y09KqtEb.js +487 -0
  41. package/dist/getTheme_v2-y09KqtEb.js.map +1 -0
  42. package/dist/grid-D88j-N7f.js +108 -0
  43. package/dist/grid-D88j-N7f.js.map +1 -0
  44. package/dist/helpers-bwfx1e-Y.js +67 -0
  45. package/dist/helpers-bwfx1e-Y.js.map +1 -0
  46. package/dist/hotkeys-B08HIKNu.js +145 -0
  47. package/dist/hotkeys-B08HIKNu.js.map +1 -0
  48. package/dist/index.d.ts +112 -896
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +93 -4409
  51. package/dist/index.js.map +1 -1
  52. package/dist/layer-BQfdK7rt.d.ts +242 -0
  53. package/dist/layer-BQfdK7rt.d.ts.map +1 -0
  54. package/dist/layer-BdkSGATt.js +56 -0
  55. package/dist/layer-BdkSGATt.js.map +1 -0
  56. package/dist/menu.d.ts +146 -0
  57. package/dist/menu.d.ts.map +1 -0
  58. package/dist/menu.js +602 -0
  59. package/dist/menu.js.map +1 -0
  60. package/dist/popover-DmmmSNzL.d.ts +96 -0
  61. package/dist/popover-DmmmSNzL.d.ts.map +1 -0
  62. package/dist/popover-Iy6EZEmv.js +406 -0
  63. package/dist/popover-Iy6EZEmv.js.map +1 -0
  64. package/dist/popover.d.ts +2 -0
  65. package/dist/popover.js +3 -0
  66. package/dist/responsiveFont-hN1mZFjm.js +55 -0
  67. package/dist/responsiveFont-hN1mZFjm.js.map +1 -0
  68. package/dist/{rgba-LmTDhX0u.d.ts → rgba-BSYaEUW6.d.ts} +4 -87
  69. package/dist/rgba-BSYaEUW6.d.ts.map +1 -0
  70. package/dist/selectable-B0GUIL74.d.ts +7 -0
  71. package/dist/selectable-B0GUIL74.d.ts.map +1 -0
  72. package/dist/stack-C5WV-BRh.js +98 -0
  73. package/dist/stack-C5WV-BRh.js.map +1 -0
  74. package/dist/styles.css +1 -0
  75. package/dist/textInput-IbiDH7Jc.js +315 -0
  76. package/dist/textInput-IbiDH7Jc.js.map +1 -0
  77. package/dist/theme.d.ts +3 -1
  78. package/dist/theme.d.ts.map +1 -1
  79. package/dist/theme.js +3 -1
  80. package/dist/theme.js.map +1 -1
  81. package/dist/toast.d.ts +73 -0
  82. package/dist/toast.d.ts.map +1 -0
  83. package/dist/toast.js +297 -0
  84. package/dist/toast.js.map +1 -0
  85. package/dist/tooltip.d.ts +88 -0
  86. package/dist/tooltip.d.ts.map +1 -0
  87. package/dist/tooltip.js +432 -0
  88. package/dist/tooltip.js.map +1 -0
  89. package/dist/useClickOutsideEvent-lEVhDFCQ.js +36 -0
  90. package/dist/useClickOutsideEvent-lEVhDFCQ.js.map +1 -0
  91. package/dist/useElementSize-BJvbGHq8.js +51 -0
  92. package/dist/useElementSize-BJvbGHq8.js.map +1 -0
  93. package/dist/useLayer-9Pz-GG0r.js +704 -0
  94. package/dist/useLayer-9Pz-GG0r.js.map +1 -0
  95. package/package.json +15 -3
  96. package/dist/getScopedTheme-CqaSCfTH.js.map +0 -1
  97. package/dist/rgba-LmTDhX0u.d.ts.map +0 -1
package/README.md CHANGED
@@ -18,6 +18,10 @@ import {Button, ThemeProvider} from '@sanity/ui'
18
18
  import {buildTheme} from '@sanity/ui/theme'
19
19
  import {createRoot} from 'react-dom/client'
20
20
 
21
+ // Static styles are shipped as a plain stylesheet (not injected at runtime) —
22
+ // import it once, wherever your app loads global CSS
23
+ import '@sanity/ui/styles.css'
24
+
21
25
  const root = createRoot(document.getElementById('root'))
22
26
  const theme = buildTheme()
23
27
 
@@ -0,0 +1,40 @@
1
+ /** @public */
2
+ declare const THEME_COLOR_SCHEMES: readonly ['light', 'dark'];
3
+ /** @public */
4
+ declare const THEME_COLOR_BLEND_MODES: readonly ['multiply', 'screen'];
5
+ /** @public */
6
+ declare const THEME_COLOR_CARD_TONES: readonly ['transparent', 'default', 'neutral', 'primary', 'suggest', 'positive', 'caution', 'critical'];
7
+ /** @public */
8
+ declare const THEME_COLOR_STATE_TONES: readonly ['default', 'neutral', 'primary', 'suggest', 'positive', 'caution', 'critical'];
9
+ /** @public */
10
+ declare const THEME_COLOR_STATES: readonly ['enabled', 'hovered', 'pressed', 'selected', 'disabled'];
11
+ /** @public */
12
+ declare const THEME_COLOR_BUTTON_MODES: readonly ['default', 'ghost', 'bleed'];
13
+ /** @public */
14
+ declare const THEME_COLOR_INPUT_MODES: readonly ['default', 'invalid'];
15
+ /** @public */
16
+ declare const THEME_COLOR_INPUT_STATES: readonly ['enabled', 'hovered', 'readOnly', 'disabled'];
17
+ /** @public */
18
+ declare const THEME_COLOR_AVATAR_COLORS: import("@sanity/color").ColorHueKey[];
19
+ /**
20
+ * @public
21
+ */
22
+ type ThemeColorSchemeKey = (typeof THEME_COLOR_SCHEMES)[number];
23
+ /** @public */
24
+ type ThemeColorBlendModeKey = (typeof THEME_COLOR_BLEND_MODES)[number];
25
+ /** @public */
26
+ type ThemeColorCardToneKey = (typeof THEME_COLOR_CARD_TONES)[number];
27
+ /** @public */
28
+ type ThemeColorButtonModeKey = (typeof THEME_COLOR_BUTTON_MODES)[number];
29
+ /** @public */
30
+ type ThemeColorStateKey = (typeof THEME_COLOR_STATES)[number];
31
+ /** @public */
32
+ type ThemeColorStateToneKey = (typeof THEME_COLOR_STATE_TONES)[number];
33
+ /** @public */
34
+ type ThemeColorInputModeKey = (typeof THEME_COLOR_INPUT_MODES)[number];
35
+ /** @public */
36
+ type ThemeColorInputStateKey = (typeof THEME_COLOR_INPUT_STATES)[number];
37
+ /** @public */
38
+ type ThemeColorAvatarColorKey = (typeof THEME_COLOR_AVATAR_COLORS)[number];
39
+ export { THEME_COLOR_STATES as _, ThemeColorInputModeKey as a, ThemeColorStateKey as c, THEME_COLOR_BLEND_MODES as d, THEME_COLOR_BUTTON_MODES as f, THEME_COLOR_SCHEMES as g, THEME_COLOR_INPUT_STATES as h, ThemeColorCardToneKey as i, ThemeColorStateToneKey as l, THEME_COLOR_INPUT_MODES as m, ThemeColorBlendModeKey as n, ThemeColorInputStateKey as o, THEME_COLOR_CARD_TONES as p, ThemeColorButtonModeKey as r, ThemeColorSchemeKey as s, ThemeColorAvatarColorKey as t, THEME_COLOR_AVATAR_COLORS as u, THEME_COLOR_STATE_TONES as v };
40
+ //# sourceMappingURL=_system-CTe2lb5l.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_system-CTe2lb5l.d.ts","names":[],"sources":["../src/theme/system/color/_constants.ts","../src/theme/system/color/_system.ts"],"mappings":"AAGA;cAAa;;cAGA;;cAGA;;cAYA;;cAWA;;cAGA;;cAGA;;cAGA;;cAGA,mDAAyB;;;;KC7B1B,8BAA8B;;KAG9B,iCAAiC;;KAGjC,gCAAgC;;KAGhC,kCAAkC;;KAGlC,6BAA6B;;KAG7B,iCAAiC;;KAGjC,iCAAiC;;KAGjC,kCAAkC;;KAGlC,mCAAmC"}
@@ -0,0 +1,159 @@
1
+ import { _ as useTheme_v2, d as createGlobalScopedContext, f as globalScope, r as isRecord } from "./useLayer-9Pz-GG0r.js";
2
+ import { c } from "react/compiler-runtime";
3
+ import { useContext } from "react";
4
+ import { css, styled } from "styled-components";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { createPortal } from "react-dom";
7
+ const BoundaryElementContext = createGlobalScopedContext("@sanity/ui/context/boundaryElement", null), DEFAULT_VALUE = {
8
+ version: 0,
9
+ element: null
10
+ };
11
+ /**
12
+ * @public
13
+ */
14
+ function useBoundaryElement() {
15
+ let value = useContext(BoundaryElementContext);
16
+ if (value && (!isRecord(value) || value.version !== 0)) throw Error("useBoundaryElement(): the context value is not compatible");
17
+ return value || DEFAULT_VALUE;
18
+ }
19
+ const key = "@sanity/ui/context/portal", elementKey = Symbol.for(`${key}/element`);
20
+ globalScope[elementKey] = null;
21
+ const PortalContext = createGlobalScopedContext(key, {
22
+ version: 0,
23
+ boundaryElement: null,
24
+ get element() {
25
+ return typeof document > "u" ? null : globalScope[elementKey] ? globalScope[elementKey] : (globalScope[elementKey] = document.createElement("div"), globalScope[elementKey].setAttribute("data-portal", ""), document.body.appendChild(globalScope[elementKey]), globalScope[elementKey]);
26
+ }
27
+ });
28
+ /**
29
+ * @public
30
+ */
31
+ function usePortal() {
32
+ let value = useContext(PortalContext);
33
+ if (!value) throw Error("usePortal(): missing context value");
34
+ if (!isRecord(value) || value.version !== 0) throw Error("usePortal(): the context value is not compatible");
35
+ return value;
36
+ }
37
+ /**
38
+ * @public
39
+ */
40
+ function Portal(props) {
41
+ let $ = c(3), { children, __unstable_name: name } = props, portal = usePortal(), portalElement = (name ? portal.elements && portal.elements[name] : portal.element) || portal.elements?.default;
42
+ if (!portalElement) return null;
43
+ let t0;
44
+ return $[0] !== children || $[1] !== portalElement ? (t0 = createPortal(children, portalElement), $[0] = children, $[1] = portalElement, $[2] = t0) : t0 = $[2], t0;
45
+ }
46
+ function moveTowardsLength(movingPoint, targetPoint, amount) {
47
+ let width = targetPoint.x - movingPoint.x, height = targetPoint.y - movingPoint.y, distance = Math.sqrt(width * width + height * height);
48
+ return moveTowardsFractional(movingPoint, targetPoint, Math.min(1, amount / distance));
49
+ }
50
+ function moveTowardsFractional(movingPoint, targetPoint, fraction) {
51
+ return {
52
+ x: movingPoint.x + (targetPoint.x - movingPoint.x) * fraction,
53
+ y: movingPoint.y + (targetPoint.y - movingPoint.y) * fraction
54
+ };
55
+ }
56
+ function getRoundedCommands(points) {
57
+ let len = points.length, cmds = [];
58
+ for (let i = 0; i < len; i += 1) {
59
+ let point = points[i], prevPoint = points[i - 1], nextPoint = points[i + 1];
60
+ if (prevPoint && point.radius) {
61
+ let curveStart = moveTowardsLength(point, prevPoint, point.radius), curveEnd = moveTowardsLength(point, nextPoint, point.radius), startControl = moveTowardsFractional(curveStart, point, .5), endControl = moveTowardsFractional(point, curveEnd, .5);
62
+ cmds.push({
63
+ type: "point",
64
+ ...curveStart
65
+ }), cmds.push({
66
+ type: "curve",
67
+ curveEnd,
68
+ startControl,
69
+ endControl
70
+ });
71
+ } else cmds.push({
72
+ type: "point",
73
+ ...point
74
+ });
75
+ }
76
+ return cmds;
77
+ }
78
+ function compileCommands(cmds) {
79
+ return cmds.map((n, idx) => n.type === "point" ? `${idx === 0 ? "M" : "L"} ${n.x} ${n.y}` : n.type === "curve" ? `C ${n.startControl.x} ${n.startControl.y} ${n.endControl.x} ${n.endControl.y} ${n.curveEnd.x} ${n.curveEnd.y}` : "").join(" ");
80
+ }
81
+ const StyledArrow = /* @__PURE__ */ styled.div.withConfig({
82
+ displayName: "StyledArrow",
83
+ componentId: "sc-gl2lu8-0"
84
+ })(({ $w: w }) => css`position:absolute;width:${w}px;height:${w}px;:empty + &{display:none;}& > svg{display:block;line-height:0;transform-origin:${w / 2}px ${w / 2}px;}[data-placement^='top'] > &{bottom:-${w}px;& > svg{transform:rotate(0);}}[data-placement^='right'] > &{left:-${w}px;& > svg{transform:rotate(90deg);}}[data-placement^='left'] > &{right:-${w}px;& > svg{transform:rotate(-90deg);}}[data-placement^='bottom'] > &{top:-${w}px;& > svg{transform:rotate(180deg);}}`), StrokePath = styled.path.withConfig({
85
+ displayName: "StrokePath",
86
+ componentId: "sc-gl2lu8-1"
87
+ })`stroke:var(--card-shadow-outline-color);`, ShapePath = styled.path.withConfig({
88
+ displayName: "ShapePath",
89
+ componentId: "sc-gl2lu8-2"
90
+ })`fill:var(--card-bg-color);`, Arrow = function Arrow(props) {
91
+ let $ = c(30), h, ref, restProps, t0, w;
92
+ $[0] === props ? (h = $[1], ref = $[2], restProps = $[3], t0 = $[4], w = $[5]) : ({width: w, height: h, radius: t0, ref, ...restProps} = props, $[0] = props, $[1] = h, $[2] = ref, $[3] = restProps, $[4] = t0, $[5] = w);
93
+ let radius = t0 === void 0 ? 0 : t0, { card } = useTheme_v2(), strokeWidth = card.shadow.outline, center = w / 2, t1;
94
+ $[6] !== center || $[7] !== h || $[8] !== radius || $[9] !== w ? (t1 = compileCommands(getRoundedCommands([
95
+ {
96
+ x: 0,
97
+ y: 0
98
+ },
99
+ {
100
+ x: radius,
101
+ y: 0,
102
+ radius
103
+ },
104
+ {
105
+ x: center,
106
+ y: h - 1,
107
+ radius
108
+ },
109
+ {
110
+ x: w - radius,
111
+ y: 0,
112
+ radius
113
+ },
114
+ {
115
+ x: w,
116
+ y: 0
117
+ }
118
+ ])), $[6] = center, $[7] = h, $[8] = radius, $[9] = w, $[10] = t1) : t1 = $[10];
119
+ let path = t1, strokePath = `${path}`, fillPath = `${path} M ${w} -1 M 0 -1 Z`, t2 = `0 0 ${w} ${w}`, t3;
120
+ $[11] !== strokeWidth || $[12] !== w ? (t3 = /* @__PURE__ */ jsx("mask", {
121
+ id: "stroke-mask",
122
+ children: /* @__PURE__ */ jsx("rect", {
123
+ x: 0,
124
+ y: strokeWidth,
125
+ width: w,
126
+ height: w,
127
+ fill: "white"
128
+ })
129
+ }), $[11] = strokeWidth, $[12] = w, $[13] = t3) : t3 = $[13];
130
+ let t4 = strokeWidth * 2, t5;
131
+ $[14] !== strokePath || $[15] !== t4 ? (t5 = /* @__PURE__ */ jsx(StrokePath, {
132
+ d: strokePath,
133
+ mask: "url(#stroke-mask)",
134
+ strokeWidth: t4
135
+ }), $[14] = strokePath, $[15] = t4, $[16] = t5) : t5 = $[16];
136
+ let t6;
137
+ $[17] === fillPath ? t6 = $[18] : (t6 = /* @__PURE__ */ jsx(ShapePath, { d: fillPath }), $[17] = fillPath, $[18] = t6);
138
+ let t7;
139
+ $[19] !== t2 || $[20] !== t3 || $[21] !== t5 || $[22] !== t6 || $[23] !== w ? (t7 = /* @__PURE__ */ jsxs("svg", {
140
+ width: w,
141
+ height: w,
142
+ viewBox: t2,
143
+ children: [
144
+ t3,
145
+ t5,
146
+ t6
147
+ ]
148
+ }), $[19] = t2, $[20] = t3, $[21] = t5, $[22] = t6, $[23] = w, $[24] = t7) : t7 = $[24];
149
+ let t8;
150
+ return $[25] !== ref || $[26] !== restProps || $[27] !== t7 || $[28] !== w ? (t8 = /* @__PURE__ */ jsx(StyledArrow, {
151
+ ...restProps,
152
+ $w: w,
153
+ ref,
154
+ children: t7
155
+ }), $[25] = ref, $[26] = restProps, $[27] = t7, $[28] = w, $[29] = t8) : t8 = $[29], t8;
156
+ };
157
+ export { useBoundaryElement as a, PortalContext as i, Portal as n, BoundaryElementContext as o, usePortal as r, Arrow as t };
158
+
159
+ //# sourceMappingURL=arrow-BG0EMNiC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrow-BG0EMNiC.js","names":["createGlobalScopedContext","BoundaryElementContextValue","BoundaryElementContext","useContext","isRecord","BoundaryElementContext","BoundaryElementContextValue","DEFAULT_VALUE","version","element","useBoundaryElement","value","Error","createGlobalScopedContext","globalScope","PortalContextValue","key","elementKey","Symbol","for","defaultContextValue","version","boundaryElement","element","document","createElement","setAttribute","body","appendChild","PortalContext","useContext","isRecord","PortalContext","PortalContextValue","usePortal","value","Error","version","createPortal","usePortal","PortalProps","children","React","ReactNode","__unstable_name","Portal","props","$","_c","name","portal","portalElement","elements","element","default","t0","PointCmd","type","x","y","radius","CurveCmd","startControl","Point","endControl","curveEnd","Cmd","moveTowardsLength","movingPoint","targetPoint","amount","width","height","distance","Math","sqrt","moveTowardsFractional","min","fraction","getRoundedCommands","points","len","length","cmds","i","point","prevPoint","nextPoint","curveStart","push","compileCommands","map","n","idx","join","HTMLProps","css","styled","useTheme_v2","compileCommands","getRoundedCommands","Point","StyledArrow","div","$w","w","StrokePath","path","ShapePath","Arrow","props","$","_c","h","ref","restProps","t0","width","height","radius","undefined","card","strokeWidth","shadow","outline","center","t1","points","x","y","cmds","strokePath","fillPath","t2","t3","t4","t5","t6","t7","t8"],"sources":["../src/core/utils/boundaryElement/boundaryElementContext.ts","../src/core/utils/boundaryElement/useBoundaryElement.ts","../src/core/utils/portal/portalContext.ts","../src/core/utils/portal/usePortal.ts","../src/core/utils/portal/portal.ts","../src/core/utils/arrow/cmds.ts","../src/core/utils/arrow/arrow.tsx"],"sourcesContent":["import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'\nimport {BoundaryElementContextValue} from './types'\n\nexport const BoundaryElementContext = createGlobalScopedContext<BoundaryElementContextValue | null>(\n '@sanity/ui/context/boundaryElement',\n null,\n)\n","import {useContext} from 'react'\n\nimport {isRecord} from '../../lib/isRecord'\nimport {BoundaryElementContext} from './boundaryElementContext'\nimport {BoundaryElementContextValue} from './types'\n\nconst DEFAULT_VALUE: BoundaryElementContextValue = {\n version: 0.0,\n element: null,\n}\n\n/**\n * @public\n */\nexport function useBoundaryElement(): BoundaryElementContextValue {\n const value = useContext(BoundaryElementContext)\n\n // NOTE: This check is for future-compatiblity\n // - If the value is not an object, it’s not compatible with the current version\n // - If the value is an object, but doesn’t have `version: 0.0`, it’s not compatible with the current version\n if (value && (!isRecord(value) || value.version !== 0.0)) {\n throw new Error('useBoundaryElement(): the context value is not compatible')\n }\n\n return value || DEFAULT_VALUE\n}\n","import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'\nimport {globalScope} from '../../lib/globalScope'\nimport {PortalContextValue} from './types'\n\nconst key = '@sanity/ui/context/portal'\nconst elementKey = Symbol.for(`${key}/element`)\n\nglobalScope[elementKey] = null\n\nconst defaultContextValue: PortalContextValue = {\n version: 0.0,\n boundaryElement: null,\n get element() {\n if (typeof document === 'undefined') {\n return null\n }\n\n if (globalScope[elementKey]) {\n return globalScope[elementKey]\n }\n\n globalScope[elementKey] = document.createElement('div')\n globalScope[elementKey].setAttribute('data-portal', '')\n\n document.body.appendChild(globalScope[elementKey])\n\n return globalScope[elementKey]\n },\n}\n\nexport const PortalContext = createGlobalScopedContext<PortalContextValue>(key, defaultContextValue)\n","import {useContext} from 'react'\n\nimport {isRecord} from '../../lib/isRecord'\nimport {PortalContext} from './portalContext'\nimport {PortalContextValue} from './types'\n\n/**\n * @public\n */\nexport function usePortal(): PortalContextValue {\n const value = useContext(PortalContext)\n\n if (!value) {\n throw new Error('usePortal(): missing context value')\n }\n\n // NOTE: This check is for future-compatiblity\n // - If the value is not an object, it’s not compatible with the current version\n // - If the value is an object, but doesn’t have `version: 0.0`, it’s not compatible with the current version\n if (!isRecord(value) || value.version !== 0.0) {\n throw new Error('usePortal(): the context value is not compatible')\n }\n\n return value\n}\n","import {createPortal} from 'react-dom'\n\nimport {usePortal} from './usePortal'\n\n/**\n * @public\n */\nexport interface PortalProps {\n children: React.ReactNode\n /**\n * @beta This API might change. DO NOT USE IN PRODUCTION.\n */\n __unstable_name?: string\n}\n\n/**\n * @public\n */\nexport function Portal(props: PortalProps): React.ReactPortal | null {\n const {children, __unstable_name: name} = props\n const portal = usePortal()\n const portalElement =\n (name ? portal.elements && portal.elements[name] : portal.element) || portal.elements?.default\n\n if (!portalElement) {\n return null\n }\n\n return createPortal(children, portalElement)\n}\n","interface PointCmd {\n type: 'point'\n x: number\n y: number\n radius?: number\n}\n\ninterface CurveCmd {\n type: 'curve'\n startControl: Point\n endControl: Point\n curveEnd: Point\n}\n\nexport type Cmd = PointCmd | CurveCmd\n\nexport interface Point {\n x: number\n y: number\n radius?: number\n}\n\nfunction moveTowardsLength(movingPoint: Point, targetPoint: Point, amount: number) {\n const width = targetPoint.x - movingPoint.x\n const height = targetPoint.y - movingPoint.y\n\n const distance = Math.sqrt(width * width + height * height)\n\n return moveTowardsFractional(movingPoint, targetPoint, Math.min(1, amount / distance))\n}\n\nfunction moveTowardsFractional(movingPoint: Point, targetPoint: Point, fraction: number): Point {\n return {\n x: movingPoint.x + (targetPoint.x - movingPoint.x) * fraction,\n y: movingPoint.y + (targetPoint.y - movingPoint.y) * fraction,\n }\n}\n\nexport function getRoundedCommands(points: Point[]): Cmd[] {\n const len = points.length\n\n const cmds: Cmd[] = []\n\n for (let i = 0; i < len; i += 1) {\n const point = points[i]\n const prevPoint = points[i - 1]\n const nextPoint = points[i + 1]\n\n if (prevPoint && point.radius) {\n const curveStart = moveTowardsLength(point, prevPoint, point.radius)\n const curveEnd = moveTowardsLength(point, nextPoint, point.radius)\n const startControl = moveTowardsFractional(curveStart, point, 0.5)\n const endControl = moveTowardsFractional(point, curveEnd, 0.5)\n\n cmds.push({\n type: 'point',\n ...curveStart,\n })\n\n cmds.push({\n type: 'curve',\n curveEnd,\n startControl,\n endControl,\n })\n } else {\n cmds.push({\n type: 'point',\n ...point,\n })\n }\n }\n\n return cmds\n}\n\nexport function compileCommands(cmds: Cmd[]): string {\n return cmds\n .map((n, idx) => {\n if (n.type === 'point') {\n return `${idx === 0 ? 'M' : 'L'} ${n.x} ${n.y}`\n }\n\n if (n.type === 'curve') {\n return `C ${n.startControl.x} ${n.startControl.y} ${n.endControl.x} ${n.endControl.y} ${n.curveEnd.x} ${n.curveEnd.y}`\n }\n\n return ``\n })\n .join(' ')\n}\n","import {HTMLProps} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {useTheme_v2} from '../../theme/useTheme'\nimport {compileCommands, getRoundedCommands, Point} from './cmds'\n\nconst StyledArrow = styled.div<{$w: number}>(\n ({$w: w}) => css`\n position: absolute;\n width: ${w}px;\n height: ${w}px;\n\n :empty + & {\n display: none;\n }\n\n & > svg {\n display: block;\n line-height: 0;\n transform-origin: ${w / 2}px ${w / 2}px;\n }\n\n [data-placement^='top'] > & {\n bottom: -${w}px;\n\n & > svg {\n transform: rotate(0);\n }\n }\n\n [data-placement^='right'] > & {\n left: -${w}px;\n\n & > svg {\n transform: rotate(90deg);\n }\n }\n\n [data-placement^='left'] > & {\n right: -${w}px;\n\n & > svg {\n transform: rotate(-90deg);\n }\n }\n\n [data-placement^='bottom'] > & {\n top: -${w}px;\n\n & > svg {\n transform: rotate(180deg);\n }\n }\n `,\n)\n\nconst StrokePath = styled.path`\n stroke: var(--card-shadow-outline-color);\n`\n\nconst ShapePath = styled.path`\n fill: var(--card-bg-color);\n`\n\n/** @internal */\nexport const Arrow = function Arrow(\n props: {width: number; height: number; radius?: number} & Omit<\n HTMLProps<HTMLDivElement>,\n 'width' | 'height'\n >,\n): React.JSX.Element {\n const {width: w, height: h, radius = 0, ref, ...restProps} = props\n const {card} = useTheme_v2()\n const strokeWidth = card.shadow.outline\n\n const center = w / 2\n\n const points: Point[] = [\n {\n x: 0,\n y: 0,\n },\n {\n x: radius,\n y: 0,\n radius,\n },\n {\n x: center,\n y: h - 1,\n radius,\n },\n {\n x: w - radius,\n y: 0,\n radius,\n },\n {\n x: w,\n y: 0,\n },\n ]\n\n const cmds = getRoundedCommands(points)\n const path = compileCommands(cmds)\n\n // oxlint-disable-next-line no-unnecessary-template-expression\n const strokePath = `${path}`\n const fillPath = `${path} M ${w} -1 M 0 -1 Z`\n\n return (\n <StyledArrow {...restProps} $w={w} ref={ref}>\n <svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>\n <mask id=\"stroke-mask\">\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>\n <StrokePath d={strokePath} mask=\"url(#stroke-mask)\" strokeWidth={strokeWidth * 2} />\n <ShapePath d={fillPath} />\n </svg>\n </StyledArrow>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import { g as Radius } from "./layer-BQfdK7rt.js";
2
+ import { n as ButtonOwnProps, u as BoxProps } from "./button-BzoZs3Sl.js";
3
+ import { n as PopoverProps } from "./popover-DmmmSNzL.js";
4
+ import { ElementType, HTMLProps, ReactNode, Ref } from "react";
5
+ /**
6
+ * @public
7
+ */
8
+ type AutocompleteOpenButtonProps = ButtonOwnProps & Omit<React.HTMLProps<HTMLButtonElement>, 'as' | 'ref'>;
9
+ /**
10
+ * @public
11
+ */
12
+ interface BaseAutocompleteOption {
13
+ value: string;
14
+ }
15
+ /**
16
+ * @internal
17
+ */
18
+ interface AutocompleteState {
19
+ activeValue: string | null;
20
+ focused: boolean;
21
+ listFocused: boolean;
22
+ query: string | null;
23
+ value: string | null;
24
+ }
25
+ /**
26
+ * @internal
27
+ */
28
+ interface AutocompleteRootBlurMsg {
29
+ type: 'root/blur';
30
+ }
31
+ /**
32
+ * @internal
33
+ */
34
+ interface AutocompleteRootClearMsg {
35
+ type: 'root/clear';
36
+ }
37
+ /**
38
+ * @internal
39
+ */
40
+ interface AutocompleteRootEscapeMsg {
41
+ type: 'root/escape';
42
+ }
43
+ /**
44
+ * @internal
45
+ */
46
+ interface AutocompleteRootOpenMsg {
47
+ type: 'root/open';
48
+ query: string | null;
49
+ }
50
+ /**
51
+ * @internal
52
+ */
53
+ interface AutocompleteRootSetActiveValueMsg {
54
+ type: 'root/setActiveValue';
55
+ value: string;
56
+ listFocused?: boolean;
57
+ }
58
+ /**
59
+ * @internal
60
+ */
61
+ interface AutocompleteRootSetListFocusedMsg {
62
+ type: 'root/setListFocused';
63
+ listFocused: boolean;
64
+ }
65
+ /**
66
+ * @internal
67
+ */
68
+ interface AutocompleteInputChangeMsg {
69
+ type: 'input/change';
70
+ query: string | null;
71
+ }
72
+ /**
73
+ * @internal
74
+ */
75
+ interface AutocompleteInputFoocusMsg {
76
+ type: 'input/focus';
77
+ }
78
+ /**
79
+ * @internal
80
+ */
81
+ interface AutocompleteValueChangeMsg {
82
+ type: 'value/change';
83
+ value: string | null;
84
+ }
85
+ /**
86
+ * @internal
87
+ */
88
+ type AutocompleteMsg = AutocompleteRootBlurMsg | AutocompleteRootClearMsg | AutocompleteRootEscapeMsg | AutocompleteRootOpenMsg | AutocompleteRootSetActiveValueMsg | AutocompleteRootSetListFocusedMsg | AutocompleteInputChangeMsg | AutocompleteInputFoocusMsg | AutocompleteValueChangeMsg;
89
+ /**
90
+ * @public
91
+ */
92
+ interface AutocompleteProps<Option extends BaseAutocompleteOption = BaseAutocompleteOption> {
93
+ border?: boolean;
94
+ customValidity?: string;
95
+ filterOption?: (query: string, option: Option) => boolean;
96
+ fontSize?: number | number[];
97
+ icon?: ElementType | ReactNode;
98
+ id: string;
99
+ /** @beta */
100
+ listBox?: BoxProps;
101
+ loading?: boolean;
102
+ onChange?: (value: string) => void;
103
+ onQueryChange?: (query: string | null) => void;
104
+ onSelect?: (value: string) => void;
105
+ /** @beta */
106
+ openButton?: boolean | AutocompleteOpenButtonProps;
107
+ /** @beta */
108
+ openOnFocus?: boolean;
109
+ /** The options to render. */
110
+ options?: Option[];
111
+ padding?: number | number[];
112
+ popover?: Omit<PopoverProps, 'content' | 'onMouseEnter' | 'onMouseLeave' | 'open'> & Omit<HTMLProps<HTMLDivElement>, 'as' | 'children' | 'content' | 'ref' | 'width'>;
113
+ prefix?: ReactNode;
114
+ radius?: Radius | Radius[];
115
+ /** @beta */
116
+ relatedElements?: HTMLElement[];
117
+ /** The callback function for rendering each option. */
118
+ renderOption?: (option: Option) => React.JSX.Element;
119
+ /** @beta */
120
+ renderPopover?: (props: {
121
+ content: React.JSX.Element | null;
122
+ hidden: boolean;
123
+ inputElement: HTMLInputElement | null;
124
+ onMouseEnter: () => void;
125
+ onMouseLeave: () => void;
126
+ }, ref: Ref<HTMLDivElement>) => ReactNode;
127
+ renderValue?: (value: string, option?: Option) => string;
128
+ suffix?: ReactNode;
129
+ /** The current value. */
130
+ value?: string;
131
+ }
132
+ /**
133
+ * The Autocomplete component is typically used for search components.
134
+ * It consists of a text input for writing a query, and properties for rendering suggestions.
135
+ *
136
+ * @public
137
+ */
138
+ declare const Autocomplete: <Option extends BaseAutocompleteOption>(props: AutocompleteProps<Option> & Omit<HTMLProps<HTMLInputElement>, 'aria-activedescendant' | 'aria-autocomplete' | 'aria-expanded' | 'aria-owns' | 'as' | 'autoCapitalize' | 'autoComplete' | 'autoCorrect' | 'id' | 'inputMode' | 'onChange' | 'onSelect' | 'popover' | 'prefix' | 'role' | 'spellCheck' | 'type' | 'value'>) => import("react").JSX.Element;
139
+ export { Autocomplete, type AutocompleteInputChangeMsg, type AutocompleteInputFoocusMsg, type AutocompleteMsg, type AutocompleteOpenButtonProps, type AutocompleteProps, type AutocompleteRootBlurMsg, type AutocompleteRootClearMsg, type AutocompleteRootEscapeMsg, type AutocompleteRootOpenMsg, type AutocompleteRootSetActiveValueMsg, type AutocompleteRootSetListFocusedMsg, type AutocompleteState, type AutocompleteValueChangeMsg, type BaseAutocompleteOption };
140
+ //# sourceMappingURL=autocomplete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.d.ts","names":[],"sources":["../src/core/components/autocomplete/types.ts","../src/core/components/autocomplete/autocomplete.tsx"],"mappings":";;;;;;;KAKY,8BAA8B,iBACxC,KAAK,MAAM,UAAU;;;;UAKN;EACf;;;;;UAMe;EACf;EACA;EACA;EACA;EACA;;;;;UAMe;EACf;;;;;UAMe;EACf;;;;;UAMe;EACf;;;;;UAMe;EACf;EACA;;;;;UAMe;EACf;EACA;EACA;;;;;UAMe;EACf;EACA;;;;;UAMe;EACf;EACA;;;;;UAMe;EACf;;;;;UAMe;EACf;EACA;;;;;KAMU,kBACR,0BACA,2BACA,4BACA,0BACA,oCACA,oCACA,6BACA,6BACA;;;;UC7Da,kBAAkB,eAAe,yBAAyB;EACzE;EACA;EACA,gBAAgB,eAAe,QAAQ;EACvC;EAEA,OAAO,cAAc;EACrB;;EAEA,UAAU;EACV;EACA,YAAY;EACZ,iBAAiB;EACjB,YAAY;;EAEZ,uBAAuB;;EAEvB;;EAEA,UAAU;EACV;EACA,UAAU,KAAK,sEACb,KAAK,UAAU;EACjB,SAAS;EACT,SAAS,SAAS;;EAElB,kBAAkB;;EAElB,gBAAgB,QAAQ,WAAW,MAAM,IAAI;;EAE7C,iBACE;IACE,SAAS,MAAM,IAAI;IACnB;IACA,cAAc;IACd;IACA;KAEF,KAAK,IAAI,oBACN;EACL,eAAe,eAAe,SAAS;EACvC,SAAS;;EAET;;;;;;;;cAeW,eAAqC,eAAe,wBAAsB,OAC9E,kBAAkB,UACvB,KACE,UAAU,kSAmBX,IAAA"}