@intlayer/design-system 9.0.0-canary.1 → 9.0.0-canary.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/api/hooks/utils.mjs +1 -1
- package/dist/esm/api/index.mjs +2 -2
- package/dist/esm/api/useAuth/useOAuth2.mjs +2 -2
- package/dist/esm/api/useAuth/useSession.mjs +1 -1
- package/dist/esm/components/Breadcrumb/index.mjs +1 -1
- package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs +1 -1
- package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs +1 -1
- package/dist/esm/components/DictionaryEditor/DictionaryEditor.mjs +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/BooleanWrapper.mjs +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/FileWrapper.mjs +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/NumberWrapper.mjs +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/index.mjs +1 -1
- package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs +2 -2
- package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +2 -2
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +6 -6
- package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +1 -1
- package/dist/esm/components/DictionaryFieldEditor/JSONEditor.mjs +1 -1
- package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs +1 -1
- package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +2 -2
- package/dist/esm/components/DictionaryFieldEditor/StructureEditor.mjs +1 -1
- package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +1 -1
- package/dist/esm/components/Form/elements/OTPElement.mjs +1 -1
- package/dist/esm/components/Input/OTPInput.mjs +1 -1
- package/dist/esm/components/LanguageBackground/LanguageBackground.mjs +3 -8
- package/dist/esm/components/LanguageBackground/LanguageBackground.mjs.map +1 -1
- package/dist/esm/components/Link/Link.mjs +1 -1
- package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs +1 -1
- package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +1 -1
- package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs +1 -1
- package/dist/esm/components/Modal/Modal.mjs +3 -3
- package/dist/esm/components/Navbar/MobileNavbar.mjs +1 -1
- package/dist/esm/components/Pagination/Pagination.mjs +2 -2
- package/dist/esm/components/Pattern/GridDistortionPattern.mjs +275 -0
- package/dist/esm/components/Pattern/GridDistortionPattern.mjs.map +1 -0
- package/dist/esm/components/Pattern/index.mjs +2 -1
- package/dist/esm/components/RightDrawer/RightDrawer.mjs +3 -3
- package/dist/esm/components/Tab/Tab.mjs +1 -1
- package/dist/esm/components/Toaster/Toast.mjs +2 -2
- package/dist/esm/components/index.mjs +5 -4
- package/dist/esm/hooks/index.mjs +8 -8
- package/dist/esm/hooks/useIsMounted.mjs +4 -2
- package/dist/esm/hooks/useIsMounted.mjs.map +1 -1
- package/dist/esm/providers/ReactQueryProvider.mjs +2 -2
- package/dist/types/api/useIntlayerAPI.d.ts +1 -1
- package/dist/types/components/Badge/index.d.ts +2 -2
- package/dist/types/components/Button/Button.d.ts +5 -5
- package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +2 -2
- package/dist/types/components/Container/index.d.ts +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts +2 -2
- package/dist/types/components/Input/Checkbox.d.ts +1 -1
- package/dist/types/components/Input/Radio.d.ts +1 -1
- package/dist/types/components/LanguageBackground/LanguageBackground.d.ts.map +1 -1
- package/dist/types/components/Link/Link.d.ts +2 -2
- package/dist/types/components/Pagination/Pagination.d.ts +2 -2
- package/dist/types/components/Pattern/GridDistortionPattern.d.ts +15 -0
- package/dist/types/components/Pattern/GridDistortionPattern.d.ts.map +1 -0
- package/dist/types/components/Pattern/index.d.ts +2 -1
- package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +2 -2
- package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts +1 -1
- package/dist/types/components/Tab/Tab.d.ts +1 -1
- package/dist/types/components/TabSelector/TabSelector.d.ts +1 -1
- package/dist/types/components/Tag/index.d.ts +1 -1
- package/dist/types/components/Toaster/Toast.d.ts +1 -1
- package/dist/types/components/index.d.ts +2 -1
- package/package.json +15 -15
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { cn } from "../../utils/cn.mjs";
|
|
4
|
+
import { useIsDarkMode } from "../../hooks/useIsDarkMode.mjs";
|
|
5
|
+
import { useEffect, useRef } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
|
|
8
|
+
//#region src/components/Pattern/GridDistortionPattern.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Light mode: a visible (but subtle) gray line on white. The base opacity is
|
|
11
|
+
* raised and the highlight boost lowered so the grid no longer fades to nothing
|
|
12
|
+
* far from the pointer while spiking to a harsh accent underneath it.
|
|
13
|
+
*/
|
|
14
|
+
const LIGHT_THEME = {
|
|
15
|
+
lineColor: "#a8a8a8",
|
|
16
|
+
highlightColor: "#969696",
|
|
17
|
+
baseOpacity: .3,
|
|
18
|
+
highlightOpacityBoost: .3
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Dark mode: a mid-gray line that brightens toward a light purple near the
|
|
22
|
+
* pointer (brighter than the resting line, so the hovered segment lights up
|
|
23
|
+
* instead of darkening into the black background).
|
|
24
|
+
*/
|
|
25
|
+
const DARK_THEME = {
|
|
26
|
+
lineColor: "#4d4d4d",
|
|
27
|
+
highlightColor: "#5c5c5c",
|
|
28
|
+
baseOpacity: .2,
|
|
29
|
+
highlightOpacityBoost: .2
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Falloff exponent for the highlight. A gentler curve (2 = quadratic) spreads
|
|
33
|
+
* the highlight over a wider area than a cubic one, smoothing the transition
|
|
34
|
+
* between the resting line and the accent under the pointer.
|
|
35
|
+
*/
|
|
36
|
+
const HIGHLIGHT_FALLOFF_EXPONENT = 2;
|
|
37
|
+
const hexToRgb = (hex) => {
|
|
38
|
+
const numericValue = parseInt(hex.replace("#", ""), 16);
|
|
39
|
+
return [
|
|
40
|
+
numericValue >> 16 & 255,
|
|
41
|
+
numericValue >> 8 & 255,
|
|
42
|
+
numericValue & 255
|
|
43
|
+
];
|
|
44
|
+
};
|
|
45
|
+
/** Neutral gray used when a color string can't be parsed into RGB. */
|
|
46
|
+
const FALLBACK_RGB = [
|
|
47
|
+
136,
|
|
48
|
+
136,
|
|
49
|
+
136
|
|
50
|
+
];
|
|
51
|
+
/**
|
|
52
|
+
* Resolves any CSS color string — `#rrggbb`, `rgb()/hsl()`, a named color, or a
|
|
53
|
+
* `var(--token)` reference — into an `[r, g, b]` triple.
|
|
54
|
+
*
|
|
55
|
+
* 6-digit hex is parsed directly. Everything else is resolved by the browser
|
|
56
|
+
* via a throwaway probe element mounted inside `contextElement`, so custom
|
|
57
|
+
* properties resolve against the correct cascade. Falls back to a neutral gray
|
|
58
|
+
* when the value can't be parsed, so the grid never emits invalid
|
|
59
|
+
* `rgb(NaN, …)` strokes (which browsers render as solid black).
|
|
60
|
+
*/
|
|
61
|
+
const resolveColorToRgb = (color, contextElement) => {
|
|
62
|
+
const trimmed = color.trim();
|
|
63
|
+
if (/^#[0-9a-f]{6}$/i.test(trimmed)) return hexToRgb(trimmed);
|
|
64
|
+
const probe = document.createElement("span");
|
|
65
|
+
probe.style.color = trimmed;
|
|
66
|
+
probe.style.display = "none";
|
|
67
|
+
contextElement.appendChild(probe);
|
|
68
|
+
const computedColor = getComputedStyle(probe).color;
|
|
69
|
+
probe.remove();
|
|
70
|
+
const channels = computedColor.match(/-?\d+(?:\.\d+)?/g);
|
|
71
|
+
if (channels && channels.length >= 3) return [
|
|
72
|
+
Number(channels[0]),
|
|
73
|
+
Number(channels[1]),
|
|
74
|
+
Number(channels[2])
|
|
75
|
+
];
|
|
76
|
+
return FALLBACK_RGB;
|
|
77
|
+
};
|
|
78
|
+
const buildSegmentAttrs = (startX, startY, endX, endY, mouseX, mouseY, mouseActive, radius, strength, lineRgb, highlightRgb, baseOpacity, highlightOpacityBoost) => {
|
|
79
|
+
let red;
|
|
80
|
+
let green;
|
|
81
|
+
let blue;
|
|
82
|
+
let opacity;
|
|
83
|
+
let strokeWidth;
|
|
84
|
+
if (!mouseActive) {
|
|
85
|
+
[red, green, blue] = lineRgb;
|
|
86
|
+
opacity = baseOpacity;
|
|
87
|
+
strokeWidth = .8;
|
|
88
|
+
} else {
|
|
89
|
+
const midX = (startX + endX) / 2;
|
|
90
|
+
const midY = (startY + endY) / 2;
|
|
91
|
+
const deltaX = mouseX - midX;
|
|
92
|
+
const deltaY = mouseY - midY;
|
|
93
|
+
const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
|
|
94
|
+
const easing = Math.max(0, 1 - distance / radius) ** HIGHLIGHT_FALLOFF_EXPONENT;
|
|
95
|
+
red = Math.round(lineRgb[0] + (highlightRgb[0] - lineRgb[0]) * easing);
|
|
96
|
+
green = Math.round(lineRgb[1] + (highlightRgb[1] - lineRgb[1]) * easing);
|
|
97
|
+
blue = Math.round(lineRgb[2] + (highlightRgb[2] - lineRgb[2]) * easing);
|
|
98
|
+
opacity = baseOpacity + easing * highlightOpacityBoost;
|
|
99
|
+
strokeWidth = .8 + easing * 1.2;
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
d: `M ${startX} ${startY} L ${endX} ${endY}`,
|
|
103
|
+
stroke: `rgb(${red},${green},${blue})`,
|
|
104
|
+
strokeOpacity: opacity,
|
|
105
|
+
strokeWidth
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
const updateGridPoints = (grid, mouseX, mouseY, mouseActive, radius, strength) => {
|
|
109
|
+
const rows = grid.length;
|
|
110
|
+
const columns = grid[0].length;
|
|
111
|
+
for (let rowIndex = 0; rowIndex < rows; rowIndex++) for (let columnIndex = 0; columnIndex < columns; columnIndex++) {
|
|
112
|
+
const point = grid[rowIndex][columnIndex];
|
|
113
|
+
if (!mouseActive) {
|
|
114
|
+
point.x += (point.baseX - point.x) * .08;
|
|
115
|
+
point.y += (point.baseY - point.y) * .08;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const deltaX = mouseX - point.baseX;
|
|
119
|
+
const deltaY = mouseY - point.baseY;
|
|
120
|
+
const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
|
|
121
|
+
if (distance < radius && distance > 0) {
|
|
122
|
+
const displacement = (Math.cos(distance / radius * Math.PI) + 1) / 2 * strength * radius * .3;
|
|
123
|
+
point.x += (point.baseX + deltaX / distance * displacement - point.x) * .12;
|
|
124
|
+
point.y += (point.baseY + deltaY / distance * displacement - point.y) * .12;
|
|
125
|
+
} else {
|
|
126
|
+
point.x += (point.baseX - point.x) * .08;
|
|
127
|
+
point.y += (point.baseY - point.y) * .08;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
const GridDistortionPattern = ({ width = 70, height = 70, radius = 280, strength = .12, lineColor, highlightColor, className, ...props }) => {
|
|
132
|
+
const theme = useIsDarkMode() ? DARK_THEME : LIGHT_THEME;
|
|
133
|
+
const resolvedLineColor = lineColor ?? theme.lineColor;
|
|
134
|
+
const resolvedHighlightColor = highlightColor ?? theme.highlightColor;
|
|
135
|
+
const svgRef = useRef(null);
|
|
136
|
+
const mouse = useRef({
|
|
137
|
+
x: -9999,
|
|
138
|
+
y: -9999,
|
|
139
|
+
active: false
|
|
140
|
+
});
|
|
141
|
+
const points = useRef([]);
|
|
142
|
+
const radiusRef = useRef(radius);
|
|
143
|
+
const strengthRef = useRef(strength);
|
|
144
|
+
const lineRgbRef = useRef(FALLBACK_RGB);
|
|
145
|
+
const highlightRgbRef = useRef(FALLBACK_RGB);
|
|
146
|
+
const baseOpacityRef = useRef(theme.baseOpacity);
|
|
147
|
+
const highlightOpacityBoostRef = useRef(theme.highlightOpacityBoost);
|
|
148
|
+
radiusRef.current = radius;
|
|
149
|
+
strengthRef.current = strength;
|
|
150
|
+
baseOpacityRef.current = theme.baseOpacity;
|
|
151
|
+
highlightOpacityBoostRef.current = theme.highlightOpacityBoost;
|
|
152
|
+
useEffect(() => {
|
|
153
|
+
const svg = svgRef.current;
|
|
154
|
+
if (!svg) return;
|
|
155
|
+
lineRgbRef.current = resolveColorToRgb(resolvedLineColor, svg);
|
|
156
|
+
highlightRgbRef.current = resolveColorToRgb(resolvedHighlightColor, svg);
|
|
157
|
+
}, [resolvedLineColor, resolvedHighlightColor]);
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
const svg = svgRef.current;
|
|
160
|
+
if (!svg) return;
|
|
161
|
+
const resize = () => {
|
|
162
|
+
const rect = svg.getBoundingClientRect();
|
|
163
|
+
svg.setAttribute("viewBox", `0 0 ${rect.width} ${rect.height}`);
|
|
164
|
+
const columns = Math.ceil(rect.width / width) + 2;
|
|
165
|
+
const rows = Math.ceil(rect.height / height) + 2;
|
|
166
|
+
const newGrid = [];
|
|
167
|
+
for (let rowIndex = -1; rowIndex <= rows; rowIndex++) {
|
|
168
|
+
const row = [];
|
|
169
|
+
for (let columnIndex = -1; columnIndex <= columns; columnIndex++) row.push({
|
|
170
|
+
baseX: columnIndex * width,
|
|
171
|
+
baseY: rowIndex * height,
|
|
172
|
+
x: columnIndex * width,
|
|
173
|
+
y: rowIndex * height
|
|
174
|
+
});
|
|
175
|
+
newGrid.push(row);
|
|
176
|
+
}
|
|
177
|
+
points.current = newGrid;
|
|
178
|
+
};
|
|
179
|
+
resize();
|
|
180
|
+
const resizeObserver = new ResizeObserver(resize);
|
|
181
|
+
resizeObserver.observe(svg);
|
|
182
|
+
return () => resizeObserver.disconnect();
|
|
183
|
+
}, [width, height]);
|
|
184
|
+
useEffect(() => {
|
|
185
|
+
const svg = svgRef.current;
|
|
186
|
+
if (!svg) return;
|
|
187
|
+
const handlePointerMove = (event) => {
|
|
188
|
+
const rect = svg.getBoundingClientRect();
|
|
189
|
+
mouse.current = {
|
|
190
|
+
x: event.clientX - rect.left,
|
|
191
|
+
y: event.clientY - rect.top,
|
|
192
|
+
active: true
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
const handlePointerLeave = () => {
|
|
196
|
+
mouse.current.active = false;
|
|
197
|
+
};
|
|
198
|
+
window.addEventListener("pointermove", handlePointerMove, { passive: true });
|
|
199
|
+
window.addEventListener("pointerleave", handlePointerLeave, { passive: true });
|
|
200
|
+
return () => {
|
|
201
|
+
window.removeEventListener("pointermove", handlePointerMove);
|
|
202
|
+
window.removeEventListener("pointerleave", handlePointerLeave);
|
|
203
|
+
};
|
|
204
|
+
}, []);
|
|
205
|
+
useEffect(() => {
|
|
206
|
+
const svg = svgRef.current;
|
|
207
|
+
if (!svg) return;
|
|
208
|
+
const pathPool = [];
|
|
209
|
+
let frame = 0;
|
|
210
|
+
const ensurePathCount = (count) => {
|
|
211
|
+
while (pathPool.length < count) {
|
|
212
|
+
const el = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
213
|
+
el.setAttribute("fill", "none");
|
|
214
|
+
svg.appendChild(el);
|
|
215
|
+
pathPool.push(el);
|
|
216
|
+
}
|
|
217
|
+
for (let i = count; i < pathPool.length; i++) pathPool[i].setAttribute("d", "");
|
|
218
|
+
};
|
|
219
|
+
const tick = () => {
|
|
220
|
+
const grid = points.current;
|
|
221
|
+
if (!grid.length) {
|
|
222
|
+
frame = requestAnimationFrame(tick);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const { x: mouseX, y: mouseY, active: mouseActive } = mouse.current;
|
|
226
|
+
const currentRadius = radiusRef.current;
|
|
227
|
+
const currentStrength = strengthRef.current;
|
|
228
|
+
const lineRgb = lineRgbRef.current;
|
|
229
|
+
const highlightRgb = highlightRgbRef.current;
|
|
230
|
+
const baseOpacity = baseOpacityRef.current;
|
|
231
|
+
const highlightOpacityBoost = highlightOpacityBoostRef.current;
|
|
232
|
+
updateGridPoints(grid, mouseX, mouseY, mouseActive, currentRadius, currentStrength);
|
|
233
|
+
const rows = grid.length;
|
|
234
|
+
const columns = grid[0].length;
|
|
235
|
+
ensurePathCount(rows * (columns - 1) + columns * (rows - 1));
|
|
236
|
+
let pathIndex = 0;
|
|
237
|
+
for (let rowIndex = 0; rowIndex < rows; rowIndex++) for (let columnIndex = 0; columnIndex < columns - 1; columnIndex++) {
|
|
238
|
+
const p0 = grid[rowIndex][columnIndex];
|
|
239
|
+
const p1 = grid[rowIndex][columnIndex + 1];
|
|
240
|
+
const attrs = buildSegmentAttrs(p0.x, p0.y, p1.x, p1.y, mouseX, mouseY, mouseActive, currentRadius, currentStrength, lineRgb, highlightRgb, baseOpacity, highlightOpacityBoost);
|
|
241
|
+
const el = pathPool[pathIndex++];
|
|
242
|
+
el.setAttribute("d", attrs.d);
|
|
243
|
+
el.setAttribute("stroke", attrs.stroke);
|
|
244
|
+
el.setAttribute("stroke-opacity", String(attrs.strokeOpacity));
|
|
245
|
+
el.setAttribute("stroke-width", String(attrs.strokeWidth));
|
|
246
|
+
}
|
|
247
|
+
for (let columnIndex = 0; columnIndex < columns; columnIndex++) for (let rowIndex = 0; rowIndex < rows - 1; rowIndex++) {
|
|
248
|
+
const p0 = grid[rowIndex][columnIndex];
|
|
249
|
+
const p1 = grid[rowIndex + 1][columnIndex];
|
|
250
|
+
const attrs = buildSegmentAttrs(p0.x, p0.y, p1.x, p1.y, mouseX, mouseY, mouseActive, currentRadius, currentStrength, lineRgb, highlightRgb, baseOpacity, highlightOpacityBoost);
|
|
251
|
+
const el = pathPool[pathIndex++];
|
|
252
|
+
el.setAttribute("d", attrs.d);
|
|
253
|
+
el.setAttribute("stroke", attrs.stroke);
|
|
254
|
+
el.setAttribute("stroke-opacity", String(attrs.strokeOpacity));
|
|
255
|
+
el.setAttribute("stroke-width", String(attrs.strokeWidth));
|
|
256
|
+
}
|
|
257
|
+
frame = requestAnimationFrame(tick);
|
|
258
|
+
};
|
|
259
|
+
tick();
|
|
260
|
+
return () => {
|
|
261
|
+
cancelAnimationFrame(frame);
|
|
262
|
+
for (const el of pathPool) el.remove();
|
|
263
|
+
};
|
|
264
|
+
}, []);
|
|
265
|
+
return /* @__PURE__ */ jsx("svg", {
|
|
266
|
+
ref: svgRef,
|
|
267
|
+
"aria-hidden": "true",
|
|
268
|
+
className: cn("pointer-events-none absolute inset-0 size-full", className),
|
|
269
|
+
...props
|
|
270
|
+
});
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
//#endregion
|
|
274
|
+
export { GridDistortionPattern };
|
|
275
|
+
//# sourceMappingURL=GridDistortionPattern.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridDistortionPattern.mjs","names":[],"sources":["../../../../src/components/Pattern/GridDistortionPattern.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport { type FC, type SVGProps, useEffect, useRef } from 'react';\nimport { useIsDarkMode } from '../../hooks/useIsDarkMode';\n\n// ---------------------------------------------------------------------------\n// Theme configuration — tweak these to adjust the grid appearance globally\n// ---------------------------------------------------------------------------\n\ntype GridTheme = {\n /** Resting line color, used far from the pointer. */\n lineColor: string;\n /**\n * Color the lines fade toward as the pointer approaches. To avoid lines\n * appearing to \"dim into the background\" near the pointer, this should be\n * brighter (higher luminance) than {@link GridTheme.lineColor} in dark mode\n * and clearly contrasting in light mode.\n */\n highlightColor: string;\n /** Stroke opacity far from the pointer — keeps the whole grid visible. */\n baseOpacity: number;\n /** Extra opacity added at the pointer's center on top of {@link GridTheme.baseOpacity}. */\n highlightOpacityBoost: number;\n};\n\n/**\n * Light mode: a visible (but subtle) gray line on white. The base opacity is\n * raised and the highlight boost lowered so the grid no longer fades to nothing\n * far from the pointer while spiking to a harsh accent underneath it.\n */\nconst LIGHT_THEME: GridTheme = {\n lineColor: '#a8a8a8',\n highlightColor: '#969696',\n baseOpacity: 0.3,\n highlightOpacityBoost: 0.3,\n};\n\n/**\n * Dark mode: a mid-gray line that brightens toward a light purple near the\n * pointer (brighter than the resting line, so the hovered segment lights up\n * instead of darkening into the black background).\n */\nconst DARK_THEME: GridTheme = {\n lineColor: '#4d4d4d',\n highlightColor: '#5c5c5c',\n baseOpacity: 0.2,\n highlightOpacityBoost: 0.2,\n};\n\n/**\n * Falloff exponent for the highlight. A gentler curve (2 = quadratic) spreads\n * the highlight over a wider area than a cubic one, smoothing the transition\n * between the resting line and the accent under the pointer.\n */\nconst HIGHLIGHT_FALLOFF_EXPONENT = 2;\n\n// ---------------------------------------------------------------------------\n// Pure helpers — defined once at module level, never recreated\n// ---------------------------------------------------------------------------\n\nconst hexToRgb = (hex: string): [number, number, number] => {\n const numericValue = parseInt(hex.replace('#', ''), 16);\n return [\n (numericValue >> 16) & 255,\n (numericValue >> 8) & 255,\n numericValue & 255,\n ];\n};\n\n/** Neutral gray used when a color string can't be parsed into RGB. */\nconst FALLBACK_RGB: [number, number, number] = [136, 136, 136];\n\n/**\n * Resolves any CSS color string — `#rrggbb`, `rgb()/hsl()`, a named color, or a\n * `var(--token)` reference — into an `[r, g, b]` triple.\n *\n * 6-digit hex is parsed directly. Everything else is resolved by the browser\n * via a throwaway probe element mounted inside `contextElement`, so custom\n * properties resolve against the correct cascade. Falls back to a neutral gray\n * when the value can't be parsed, so the grid never emits invalid\n * `rgb(NaN, …)` strokes (which browsers render as solid black).\n */\nconst resolveColorToRgb = (\n color: string,\n contextElement: Element\n): [number, number, number] => {\n const trimmed = color.trim();\n\n // Fast path: 6-digit hex needs no DOM access.\n if (/^#[0-9a-f]{6}$/i.test(trimmed)) {\n return hexToRgb(trimmed);\n }\n\n const probe = document.createElement('span');\n probe.style.color = trimmed;\n probe.style.display = 'none';\n contextElement.appendChild(probe);\n const computedColor = getComputedStyle(probe).color;\n probe.remove();\n\n const channels = computedColor.match(/-?\\d+(?:\\.\\d+)?/g);\n if (channels && channels.length >= 3) {\n return [Number(channels[0]), Number(channels[1]), Number(channels[2])];\n }\n\n return FALLBACK_RGB;\n};\n\ntype Point = { baseX: number; baseY: number; x: number; y: number };\n\nconst buildSegmentAttrs = (\n startX: number,\n startY: number,\n endX: number,\n endY: number,\n mouseX: number,\n mouseY: number,\n mouseActive: boolean,\n radius: number,\n strength: number,\n lineRgb: [number, number, number],\n highlightRgb: [number, number, number],\n baseOpacity: number,\n highlightOpacityBoost: number\n): {\n d: string;\n stroke: string;\n strokeOpacity: number;\n strokeWidth: number;\n} => {\n let red: number;\n let green: number;\n let blue: number;\n let opacity: number;\n let strokeWidth: number;\n\n if (!mouseActive) {\n [red, green, blue] = lineRgb;\n opacity = baseOpacity;\n strokeWidth = 0.8;\n } else {\n const midX = (startX + endX) / 2;\n const midY = (startY + endY) / 2;\n const deltaX = mouseX - midX;\n const deltaY = mouseY - midY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const distanceRatio = Math.max(0, 1 - distance / radius);\n const easing = distanceRatio ** HIGHLIGHT_FALLOFF_EXPONENT;\n red = Math.round(lineRgb[0] + (highlightRgb[0] - lineRgb[0]) * easing);\n green = Math.round(lineRgb[1] + (highlightRgb[1] - lineRgb[1]) * easing);\n blue = Math.round(lineRgb[2] + (highlightRgb[2] - lineRgb[2]) * easing);\n opacity = baseOpacity + easing * highlightOpacityBoost;\n strokeWidth = 0.8 + easing * 1.2;\n void strength; // currently unused in segment coloring, kept for API compatibility\n }\n\n return {\n d: `M ${startX} ${startY} L ${endX} ${endY}`,\n stroke: `rgb(${red},${green},${blue})`,\n strokeOpacity: opacity,\n strokeWidth,\n };\n};\n\nconst updateGridPoints = (\n grid: Point[][],\n mouseX: number,\n mouseY: number,\n mouseActive: boolean,\n radius: number,\n strength: number\n): void => {\n const rows = grid.length;\n const columns = grid[0]!.length;\n\n for (let rowIndex = 0; rowIndex < rows; rowIndex++) {\n for (let columnIndex = 0; columnIndex < columns; columnIndex++) {\n const point = grid[rowIndex]![columnIndex]!;\n if (!mouseActive) {\n point.x += (point.baseX - point.x) * 0.08;\n point.y += (point.baseY - point.y) * 0.08;\n continue;\n }\n const deltaX = mouseX - point.baseX;\n const deltaY = mouseY - point.baseY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n\n if (distance < radius && distance > 0) {\n const force = (Math.cos((distance / radius) * Math.PI) + 1) / 2;\n const displacement = force * strength * radius * 0.3;\n point.x +=\n (point.baseX + (deltaX / distance) * displacement - point.x) * 0.12;\n point.y +=\n (point.baseY + (deltaY / distance) * displacement - point.y) * 0.12;\n } else {\n point.x += (point.baseX - point.x) * 0.08;\n point.y += (point.baseY - point.y) * 0.08;\n }\n }\n }\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\ntype GridDistortionPatternProps = {\n width?: number;\n height?: number;\n radius?: number;\n strength?: number;\n lineColor?: string;\n highlightColor?: string;\n} & SVGProps<SVGSVGElement>;\n\nexport const GridDistortionPattern: FC<GridDistortionPatternProps> = ({\n width = 70,\n height = 70,\n radius = 280,\n strength = 0.12,\n lineColor,\n highlightColor,\n className,\n ...props\n}) => {\n const isDarkMode = useIsDarkMode();\n const theme = isDarkMode ? DARK_THEME : LIGHT_THEME;\n\n // Explicit props win; otherwise fall back to the active theme's defaults.\n const resolvedLineColor = lineColor ?? theme.lineColor;\n const resolvedHighlightColor = highlightColor ?? theme.highlightColor;\n\n const svgRef = useRef<SVGSVGElement>(null);\n const mouse = useRef({ x: -9999, y: -9999, active: false });\n const points = useRef<Point[][]>([]);\n\n // Stable refs so the animation loop always sees the latest prop values\n // without needing to restart itself.\n const radiusRef = useRef(radius);\n const strengthRef = useRef(strength);\n // Initialized to safe placeholders; the real (possibly CSS-variable-based)\n // colors are resolved against the DOM in the effect below.\n const lineRgbRef = useRef<[number, number, number]>(FALLBACK_RGB);\n const highlightRgbRef = useRef<[number, number, number]>(FALLBACK_RGB);\n const baseOpacityRef = useRef(theme.baseOpacity);\n const highlightOpacityBoostRef = useRef(theme.highlightOpacityBoost);\n\n // Keep numeric refs in sync with props on each render (cheap assignments).\n radiusRef.current = radius;\n strengthRef.current = strength;\n baseOpacityRef.current = theme.baseOpacity;\n highlightOpacityBoostRef.current = theme.highlightOpacityBoost;\n\n // Resolve colors once mounted — getComputedStyle is required so that\n // `var(--token)` highlight/line colors resolve against the live cascade.\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n lineRgbRef.current = resolveColorToRgb(resolvedLineColor, svg);\n highlightRgbRef.current = resolveColorToRgb(resolvedHighlightColor, svg);\n }, [resolvedLineColor, resolvedHighlightColor]);\n\n // ---------------------------------------------------------------------------\n // Resize — rebuild the point grid and resize the SVG viewBox\n // ---------------------------------------------------------------------------\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n\n const resize = () => {\n const rect = svg.getBoundingClientRect();\n svg.setAttribute('viewBox', `0 0 ${rect.width} ${rect.height}`);\n\n const columns = Math.ceil(rect.width / width) + 2;\n const rows = Math.ceil(rect.height / height) + 2;\n const newGrid: Point[][] = [];\n\n for (let rowIndex = -1; rowIndex <= rows; rowIndex++) {\n const row: Point[] = [];\n for (let columnIndex = -1; columnIndex <= columns; columnIndex++) {\n row.push({\n baseX: columnIndex * width,\n baseY: rowIndex * height,\n x: columnIndex * width,\n y: rowIndex * height,\n });\n }\n newGrid.push(row);\n }\n points.current = newGrid;\n };\n\n resize();\n const resizeObserver = new ResizeObserver(resize);\n resizeObserver.observe(svg);\n return () => resizeObserver.disconnect();\n }, [width, height]);\n\n // ---------------------------------------------------------------------------\n // Pointer tracking — passive listeners, no React state involved\n // ---------------------------------------------------------------------------\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n\n const handlePointerMove = (event: PointerEvent) => {\n const rect = svg.getBoundingClientRect();\n mouse.current = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n active: true,\n };\n };\n const handlePointerLeave = () => {\n mouse.current.active = false;\n };\n\n window.addEventListener('pointermove', handlePointerMove, {\n passive: true,\n });\n window.addEventListener('pointerleave', handlePointerLeave, {\n passive: true,\n });\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerleave', handlePointerLeave);\n };\n }, []);\n\n // ---------------------------------------------------------------------------\n // Animation loop — writes directly to SVG DOM, no React state/re-renders\n // ---------------------------------------------------------------------------\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n\n // We maintain a pool of <path> elements and reuse them each frame\n // to avoid GC pressure from creating/deleting DOM nodes every tick.\n const pathPool: SVGPathElement[] = [];\n let frame = 0;\n\n const ensurePathCount = (count: number) => {\n while (pathPool.length < count) {\n const el = document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'path'\n );\n el.setAttribute('fill', 'none');\n svg.appendChild(el);\n pathPool.push(el);\n }\n // Hide surplus paths\n for (let i = count; i < pathPool.length; i++) {\n pathPool[i]!.setAttribute('d', '');\n }\n };\n\n const tick = () => {\n const grid = points.current;\n if (!grid.length) {\n frame = requestAnimationFrame(tick);\n return;\n }\n\n const { x: mouseX, y: mouseY, active: mouseActive } = mouse.current;\n const currentRadius = radiusRef.current;\n const currentStrength = strengthRef.current;\n const lineRgb = lineRgbRef.current;\n const highlightRgb = highlightRgbRef.current;\n const baseOpacity = baseOpacityRef.current;\n const highlightOpacityBoost = highlightOpacityBoostRef.current;\n\n // Update point positions\n updateGridPoints(\n grid,\n mouseX,\n mouseY,\n mouseActive,\n currentRadius,\n currentStrength\n );\n\n const rows = grid.length;\n const columns = grid[0]!.length;\n\n // Count segments up front so we can size the pool\n const horizontalCount = rows * (columns - 1);\n const verticalCount = columns * (rows - 1);\n const totalSegments = horizontalCount + verticalCount;\n ensurePathCount(totalSegments);\n\n let pathIndex = 0;\n\n // Horizontal segments\n for (let rowIndex = 0; rowIndex < rows; rowIndex++) {\n for (let columnIndex = 0; columnIndex < columns - 1; columnIndex++) {\n const p0 = grid[rowIndex]![columnIndex]!;\n const p1 = grid[rowIndex]![columnIndex + 1]!;\n const attrs = buildSegmentAttrs(\n p0.x,\n p0.y,\n p1.x,\n p1.y,\n mouseX,\n mouseY,\n mouseActive,\n currentRadius,\n currentStrength,\n lineRgb,\n highlightRgb,\n baseOpacity,\n highlightOpacityBoost\n );\n const el = pathPool[pathIndex++]!;\n el.setAttribute('d', attrs.d);\n el.setAttribute('stroke', attrs.stroke);\n el.setAttribute('stroke-opacity', String(attrs.strokeOpacity));\n el.setAttribute('stroke-width', String(attrs.strokeWidth));\n }\n }\n\n // Vertical segments\n for (let columnIndex = 0; columnIndex < columns; columnIndex++) {\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex++) {\n const p0 = grid[rowIndex]![columnIndex]!;\n const p1 = grid[rowIndex + 1]![columnIndex]!;\n const attrs = buildSegmentAttrs(\n p0.x,\n p0.y,\n p1.x,\n p1.y,\n mouseX,\n mouseY,\n mouseActive,\n currentRadius,\n currentStrength,\n lineRgb,\n highlightRgb,\n baseOpacity,\n highlightOpacityBoost\n );\n const el = pathPool[pathIndex++]!;\n el.setAttribute('d', attrs.d);\n el.setAttribute('stroke', attrs.stroke);\n el.setAttribute('stroke-opacity', String(attrs.strokeOpacity));\n el.setAttribute('stroke-width', String(attrs.strokeWidth));\n }\n }\n\n frame = requestAnimationFrame(tick);\n };\n\n tick();\n\n return () => {\n cancelAnimationFrame(frame);\n // Clean up path elements we injected\n for (const el of pathPool) {\n el.remove();\n }\n };\n }, []); // no dependencies — reads everything via refs\n\n return (\n <svg\n ref={svgRef}\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-0 size-full',\n className\n )}\n {...props}\n />\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DotPattern } from "./DotPattern.mjs";
|
|
2
|
+
import { GridDistortionPattern } from "./GridDistortionPattern.mjs";
|
|
2
3
|
import { GridPattern } from "./GridPattern.mjs";
|
|
3
4
|
import { Spotlight } from "./SpotLight.mjs";
|
|
4
5
|
|
|
5
|
-
export { DotPattern, GridPattern, Spotlight };
|
|
6
|
+
export { DotPattern, GridDistortionPattern, GridPattern, Spotlight };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import { useGetElementOrWindow } from "../../hooks/useGetElementOrWindow.mjs";
|
|
4
|
+
import { useDevice } from "../../hooks/useDevice.mjs";
|
|
5
|
+
import { useScrollBlockage } from "../../hooks/useScrollBlockage/index.mjs";
|
|
3
6
|
import { Button } from "../Button/Button.mjs";
|
|
4
7
|
import { Container } from "../Container/index.mjs";
|
|
5
|
-
import { useDevice } from "../../hooks/useDevice.mjs";
|
|
6
8
|
import { KeyboardShortcut } from "../KeyboardShortcut/KeyboardShortcut.mjs";
|
|
7
9
|
import { Popover } from "../Popover/dynamic.mjs";
|
|
8
|
-
import { useGetElementOrWindow } from "../../hooks/useGetElementOrWindow.mjs";
|
|
9
|
-
import { useScrollBlockage } from "../../hooks/useScrollBlockage/index.mjs";
|
|
10
10
|
import { MaxWidthSmoother } from "../MaxWidthSmoother/index.mjs";
|
|
11
11
|
import { isElementAtTopAndNotCovered } from "./isElementAtTopAndNotCovered.mjs";
|
|
12
12
|
import { useRightDrawer } from "./useRightDrawer.mjs";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { cn } from "../../utils/cn.mjs";
|
|
4
|
-
import { TabSelector } from "../TabSelector/TabSelector.mjs";
|
|
5
4
|
import { useHorizontalSwipe } from "../../hooks/useHorizontalSwipe.mjs";
|
|
5
|
+
import { TabSelector } from "../TabSelector/TabSelector.mjs";
|
|
6
6
|
import { useTabContext } from "./TabContext.mjs";
|
|
7
7
|
import { Children, createContext, isValidElement, useState } from "react";
|
|
8
8
|
import { cva } from "class-variance-authority";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { cn } from "../../utils/cn.mjs";
|
|
4
|
-
import * as ToastPrimitives from "@radix-ui/react-toast";
|
|
5
|
-
import { cva } from "class-variance-authority";
|
|
6
4
|
import { X } from "lucide-react";
|
|
5
|
+
import { cva } from "class-variance-authority";
|
|
7
6
|
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import * as ToastPrimitives from "@radix-ui/react-toast";
|
|
8
8
|
|
|
9
9
|
//#region src/components/Toaster/Toast.tsx
|
|
10
10
|
const ToastProvider = ToastPrimitives;
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, toastVariants } from "./Toaster/Toast.mjs";
|
|
2
|
-
import { reducer, toast, useToast } from "./Toaster/useToast.mjs";
|
|
3
|
-
import { Toaster } from "./Toaster/Toaster.mjs";
|
|
4
1
|
import { Loader } from "./Loader/index.mjs";
|
|
5
2
|
import { Button, buttonVariants } from "./Button/Button.mjs";
|
|
6
3
|
import { MaxHeightSmoother } from "./MaxHeightSmoother/index.mjs";
|
|
@@ -121,6 +118,9 @@ import { SmartTable } from "./Table/SmartTable.mjs";
|
|
|
121
118
|
import { Hr, Td, Th, Tr } from "./Table/TableElements.mjs";
|
|
122
119
|
import { MarkdownRenderer, baseMarkdownComponents, getIntlayerMarkdownOptions } from "./MarkDownRender/MarkDownRender.mjs";
|
|
123
120
|
import { createEditorUploadFn } from "./MarkdownEditor/imageUpload.mjs";
|
|
121
|
+
import { Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, toastVariants } from "./Toaster/Toast.mjs";
|
|
122
|
+
import { reducer, toast, useToast } from "./Toaster/useToast.mjs";
|
|
123
|
+
import { Toaster } from "./Toaster/Toaster.mjs";
|
|
124
124
|
import { MarkdownEditor } from "./MarkdownEditor/MarkdownEditor.mjs";
|
|
125
125
|
import { MaxWidthSmoother } from "./MaxWidthSmoother/index.mjs";
|
|
126
126
|
import { DesktopNavbar } from "./Navbar/DesktopNavbar.mjs";
|
|
@@ -128,6 +128,7 @@ import { Burger } from "./Navbar/Burger.mjs";
|
|
|
128
128
|
import { MobileNavbar } from "./Navbar/MobileNavbar.mjs";
|
|
129
129
|
import { Navbar } from "./Navbar/index.mjs";
|
|
130
130
|
import { DotPattern } from "./Pattern/DotPattern.mjs";
|
|
131
|
+
import { GridDistortionPattern } from "./Pattern/GridDistortionPattern.mjs";
|
|
131
132
|
import { GridPattern } from "./Pattern/GridPattern.mjs";
|
|
132
133
|
import { Spotlight } from "./Pattern/SpotLight.mjs";
|
|
133
134
|
import { drawerManager, useRightDrawer } from "./RightDrawer/useRightDrawer.mjs";
|
|
@@ -140,4 +141,4 @@ import { Terminal } from "./Terminal/Terminal.mjs";
|
|
|
140
141
|
import { DesktopThemeSwitcher } from "./ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs";
|
|
141
142
|
import { MobileThemeSwitcher } from "./ThemeSwitcherDropDown/MobileThemeSwitcher.mjs";
|
|
142
143
|
|
|
143
|
-
export { Accordion, AutoCompleteTextarea, AutoSizedTextArea, Avatar, Badge, BitbucketLogo, Breadcrumb, Browser, Burger, Button, Carousel, Checkbox, ClickOutsideDiv, Code, CodeBlock, CodeDefault, CollapsibleTable, Command, CommandRoot, Container, ContentEditableTextArea, ContentEditorInput, ContentEditorTextArea, ContentSelector, CopyButton, CopyToClipboard, DesktopNavbar, DesktopThemeSwitcher, Detail, DictionaryCreationForm, DictionaryEditor, DictionaryFieldEditor, DiscordLogo, DotPattern, DropDown, EditableFieldInput, EditableFieldTextArea, ExpandCollapse, FacebookLogo, FileList, Flag, flags_exports as Flags, Footer, Form, AutoSizedTextAreaElement as FormAutoSizedTextArea, Button as FormButton, CheckboxElement as FormCheckbox, FormControl, FormDescription, EditableFieldInputElement as FormEditableFieldInput, EditableFieldTextAreaElement as FormEditableFieldTextArea, FormElement, FormField, InputElement as FormInput, InputPasswordElement as FormInputPassword, FormItem, FormLabelLayout as FormLabel, FormMessage, MultiSelectElement as FormMultiSelect, OTPElement as FormOTP, SearchInputElement as FormSearchInput, SelectElement as FormSelect, SwitchSelectorElement as FormSwitchSelector, TextAreaElement as FormTextArea, GitHubLogo, GitLabLogo, GoogleLogo, GridPattern, H1, H2, H3, H4, H5, H6, HTMLRenderer, HeightResizer, HideShow, Hr, IDE, InformationTag, Input, InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputPassword, InstagramLogo, KeyPathBreadcrumb, KeyboardScreenAdapter, KeyboardShortcut, Label, LanguageBackground, LanguageSection, Link, LinkedInLogo, Loader, LocaleSwitcher, LocaleSwitcherContent, LocaleSwitcherContentProvider, Logo, LogoTextOnly, LogoWithText, LogoWithTextBelow, MarkDownIframe, MarkdownEditor, MarkdownRenderer, MaxHeightSmoother, MaxWidthSmoother, MobileNavbar, MobileThemeSwitcher, Modal, MultiSelect, Navbar, NumberItemsSelector, OTPInput, OTPInputContext, Pagination, Popover, PopoverStatic, PressableSpan, ProductHuntLogo, Radio, RightDrawer, SaveForm, SearchInput, Select, SelectContent, SelectLabel, SelectSeparator, ShowingResultsNumberItems, SmartTable, SocialNetworks, Spotlight, Step, Steps, SwitchSelector, Tab, TabSelector, Table, Tag, Td, TechLogo, techLogos_exports as TechLogos, Terminal, TextArea, TextEditor, TextEditorContainer, Th, TiktokLogo, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tr, VersionSwitcher, VersionSwitcherProvider, VerticalSwitchSelector, WithResizer, XLogo, YoutubeLogo, badgeVariants, baseMarkdownComponents, buttonVariants, checkIsExternalLink, checkboxVariants, choiceVariant, containerVariants, createEditorUploadFn, defaultChoices, drawerManager, getCapitals, getIntlayerHTMLOptions, getIntlayerMarkdownOptions, indicatorVariant, inputSlotVariants, inputVariants, isTextChildren, linkVariants, paginationVariants, radioVariants, reducer, switchSelectorVariant, toast, toastVariants, traceKeys, useContentEditable, useCopyToClipboard, useForm, useFormField, useLocaleSwitcherContent, usePasswordManagerBadge, usePrevious, useRightDrawer, useToast, useVersionSwitcher };
|
|
144
|
+
export { Accordion, AutoCompleteTextarea, AutoSizedTextArea, Avatar, Badge, BitbucketLogo, Breadcrumb, Browser, Burger, Button, Carousel, Checkbox, ClickOutsideDiv, Code, CodeBlock, CodeDefault, CollapsibleTable, Command, CommandRoot, Container, ContentEditableTextArea, ContentEditorInput, ContentEditorTextArea, ContentSelector, CopyButton, CopyToClipboard, DesktopNavbar, DesktopThemeSwitcher, Detail, DictionaryCreationForm, DictionaryEditor, DictionaryFieldEditor, DiscordLogo, DotPattern, DropDown, EditableFieldInput, EditableFieldTextArea, ExpandCollapse, FacebookLogo, FileList, Flag, flags_exports as Flags, Footer, Form, AutoSizedTextAreaElement as FormAutoSizedTextArea, Button as FormButton, CheckboxElement as FormCheckbox, FormControl, FormDescription, EditableFieldInputElement as FormEditableFieldInput, EditableFieldTextAreaElement as FormEditableFieldTextArea, FormElement, FormField, InputElement as FormInput, InputPasswordElement as FormInputPassword, FormItem, FormLabelLayout as FormLabel, FormMessage, MultiSelectElement as FormMultiSelect, OTPElement as FormOTP, SearchInputElement as FormSearchInput, SelectElement as FormSelect, SwitchSelectorElement as FormSwitchSelector, TextAreaElement as FormTextArea, GitHubLogo, GitLabLogo, GoogleLogo, GridDistortionPattern, GridPattern, H1, H2, H3, H4, H5, H6, HTMLRenderer, HeightResizer, HideShow, Hr, IDE, InformationTag, Input, InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputPassword, InstagramLogo, KeyPathBreadcrumb, KeyboardScreenAdapter, KeyboardShortcut, Label, LanguageBackground, LanguageSection, Link, LinkedInLogo, Loader, LocaleSwitcher, LocaleSwitcherContent, LocaleSwitcherContentProvider, Logo, LogoTextOnly, LogoWithText, LogoWithTextBelow, MarkDownIframe, MarkdownEditor, MarkdownRenderer, MaxHeightSmoother, MaxWidthSmoother, MobileNavbar, MobileThemeSwitcher, Modal, MultiSelect, Navbar, NumberItemsSelector, OTPInput, OTPInputContext, Pagination, Popover, PopoverStatic, PressableSpan, ProductHuntLogo, Radio, RightDrawer, SaveForm, SearchInput, Select, SelectContent, SelectLabel, SelectSeparator, ShowingResultsNumberItems, SmartTable, SocialNetworks, Spotlight, Step, Steps, SwitchSelector, Tab, TabSelector, Table, Tag, Td, TechLogo, techLogos_exports as TechLogos, Terminal, TextArea, TextEditor, TextEditorContainer, Th, TiktokLogo, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tr, VersionSwitcher, VersionSwitcherProvider, VerticalSwitchSelector, WithResizer, XLogo, YoutubeLogo, badgeVariants, baseMarkdownComponents, buttonVariants, checkIsExternalLink, checkboxVariants, choiceVariant, containerVariants, createEditorUploadFn, defaultChoices, drawerManager, getCapitals, getIntlayerHTMLOptions, getIntlayerMarkdownOptions, indicatorVariant, inputSlotVariants, inputVariants, isTextChildren, linkVariants, paginationVariants, radioVariants, reducer, switchSelectorVariant, toast, toastVariants, traceKeys, useContentEditable, useCopyToClipboard, useForm, useFormField, useLocaleSwitcherContent, usePasswordManagerBadge, usePrevious, useRightDrawer, useToast, useVersionSwitcher };
|
package/dist/esm/hooks/index.mjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useItemSelector } from "./useItemSelector.mjs";
|
|
3
|
-
import { usePersistedStore } from "./usePersistedStore.mjs";
|
|
4
|
-
import { useGetElementById } from "./useGetElementById.mjs";
|
|
1
|
+
import { useKeyboardDetector } from "./useKeyboardDetector.mjs";
|
|
5
2
|
import { useGetElementOrWindow } from "./useGetElementOrWindow.mjs";
|
|
3
|
+
import { useScrollY } from "./useScrollY.mjs";
|
|
4
|
+
import { usePersistedStore } from "./usePersistedStore.mjs";
|
|
6
5
|
import { useHorizontalSwipe } from "./useHorizontalSwipe.mjs";
|
|
7
|
-
import {
|
|
6
|
+
import { useItemSelector } from "./useItemSelector.mjs";
|
|
7
|
+
import { calculateIsMobile, checkIsIOS, checkIsIphoneOrSafariDevice, checkIsMac, checkIsMobileScreen, checkIsMobileUserAgent, getBreakpointFromSize, useDevice } from "./useDevice.mjs";
|
|
8
|
+
import { useSearch } from "./useSearch.mjs";
|
|
8
9
|
import { useIsMounted } from "./useIsMounted.mjs";
|
|
9
|
-
import {
|
|
10
|
+
import { useGetElementById } from "./useGetElementById.mjs";
|
|
11
|
+
import { useIsDarkMode } from "./useIsDarkMode.mjs";
|
|
10
12
|
import { useScreenWidth } from "./useScreenWidth.mjs";
|
|
11
13
|
import { useScrollBlockage } from "./useScrollBlockage/index.mjs";
|
|
12
14
|
import { useScrollDetection } from "./useScrollDetection.mjs";
|
|
13
|
-
import { useScrollY } from "./useScrollY.mjs";
|
|
14
|
-
import { useSearch } from "./useSearch.mjs";
|
|
15
15
|
|
|
16
16
|
export { calculateIsMobile, checkIsIOS, checkIsIphoneOrSafariDevice, checkIsMac, checkIsMobileScreen, checkIsMobileUserAgent, getBreakpointFromSize, useDevice, useGetElementById, useGetElementOrWindow, useHorizontalSwipe, useIsDarkMode, useIsMounted, useItemSelector, useKeyboardDetector, usePersistedStore, useScreenWidth, useScrollBlockage, useScrollDetection, useScrollY, useSearch };
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { useEffect, useState } from "react";
|
|
3
|
+
import { startTransition, useEffect, useState } from "react";
|
|
4
4
|
|
|
5
5
|
//#region src/hooks/useIsMounted.ts
|
|
6
6
|
const useIsMounted = () => {
|
|
7
7
|
const [isMounted, setIsMounted] = useState(false);
|
|
8
8
|
useEffect(() => {
|
|
9
|
-
|
|
9
|
+
startTransition(() => {
|
|
10
|
+
setIsMounted(true);
|
|
11
|
+
});
|
|
10
12
|
}, []);
|
|
11
13
|
return isMounted;
|
|
12
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIsMounted.mjs","names":[],"sources":["../../../src/hooks/useIsMounted.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nexport const useIsMounted = () => {\n const [isMounted, setIsMounted] = useState(false);\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n return isMounted;\n};\n"],"mappings":";;;;;AAIA,MAAa,qBAAqB;CAChC,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;AAEjD,iBAAgB;
|
|
1
|
+
{"version":3,"file":"useIsMounted.mjs","names":[],"sources":["../../../src/hooks/useIsMounted.ts"],"sourcesContent":["'use client';\n\nimport { startTransition, useEffect, useState } from 'react';\n\nexport const useIsMounted = () => {\n const [isMounted, setIsMounted] = useState(false);\n\n useEffect(() => {\n // startTransition defers the background as a low-priority update so the\n // sign-in form paints before React starts loading the flag section chunk.\n startTransition(() => {\n setIsMounted(true);\n });\n }, []);\n\n return isMounted;\n};\n"],"mappings":";;;;;AAIA,MAAa,qBAAqB;CAChC,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;AAEjD,iBAAgB;AAGd,wBAAsB;AACpB,gBAAa,KAAK;IAClB;IACD,EAAE,CAAC;AAEN,QAAO"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { useToast } from "../components/Toaster/useToast.mjs";
|
|
4
|
-
import { createAsyncStoragePersister } from "@tanstack/query-async-storage-persister";
|
|
5
4
|
import { MutationCache, QueryClient, QueryClientProvider, timeoutManager } from "@tanstack/react-query";
|
|
6
|
-
import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client";
|
|
7
5
|
import { useRef } from "react";
|
|
8
6
|
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { createAsyncStoragePersister } from "@tanstack/query-async-storage-persister";
|
|
8
|
+
import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client";
|
|
9
9
|
|
|
10
10
|
//#region src/providers/ReactQueryProvider.tsx
|
|
11
11
|
const PERSIST_MAX_AGE = 1e3 * 60 * 60 * 24;
|
|
@@ -11,9 +11,9 @@ type UseIntlayerAuthProps = {
|
|
|
11
11
|
};
|
|
12
12
|
declare const useIntlayerOAuthOptions: (props?: UseIntlayerAuthProps) => {
|
|
13
13
|
options: {
|
|
14
|
+
headers: HeadersInit;
|
|
14
15
|
cache?: RequestCache;
|
|
15
16
|
credentials?: RequestCredentials;
|
|
16
|
-
headers: HeadersInit;
|
|
17
17
|
integrity?: string;
|
|
18
18
|
keepalive?: boolean;
|
|
19
19
|
method?: string;
|
|
@@ -23,8 +23,8 @@ type BadgeSize = 'sm' | 'md' | 'lg';
|
|
|
23
23
|
* @description Defines the styling variants for different badge combinations
|
|
24
24
|
*/
|
|
25
25
|
declare const badgeVariants: (props?: {
|
|
26
|
-
color?: "error" | "
|
|
27
|
-
variant?: "
|
|
26
|
+
color?: "error" | "custom" | "primary" | "secondary" | "neutral" | "light" | "dark" | "text" | "success";
|
|
27
|
+
variant?: "none" | "default" | "outline" | "hoverable";
|
|
28
28
|
size?: "sm" | "md" | "lg";
|
|
29
29
|
} & _$class_variance_authority_types0.ClassProp) => string;
|
|
30
30
|
/**
|
|
@@ -24,11 +24,11 @@ type ButtonTextAlign = 'left' | 'center' | 'right';
|
|
|
24
24
|
* Enhanced button variants with improved accessibility and focus states
|
|
25
25
|
*/
|
|
26
26
|
declare const buttonVariants: (props?: {
|
|
27
|
-
size?: "xs" | "sm" | "md" | "lg" | "xl" | "
|
|
28
|
-
color?: "error" | "
|
|
29
|
-
roundedSize?: "sm" | "md" | "lg" | "xl" | "2xl" | "none" | "3xl" | "4xl" | "
|
|
30
|
-
variant?: "
|
|
31
|
-
textAlign?: "left" | "
|
|
27
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | "icon-sm" | "icon-md" | "icon-lg" | "icon-xl" | "custom";
|
|
28
|
+
color?: "error" | "custom" | "primary" | "secondary" | "neutral" | "card" | "light" | "dark" | "text" | "current" | "text-inverse" | "success";
|
|
29
|
+
roundedSize?: "sm" | "md" | "lg" | "xl" | "2xl" | "none" | "3xl" | "4xl" | "5xl" | "full";
|
|
30
|
+
variant?: "none" | "default" | "outline" | "link" | "invisible-link" | "hoverable" | "fade" | "input";
|
|
31
|
+
textAlign?: "left" | "center" | "right";
|
|
32
32
|
isFullWidth?: boolean;
|
|
33
33
|
} & _$class_variance_authority_types0.ClassProp) => string;
|
|
34
34
|
/**
|
|
@@ -5,8 +5,8 @@ import { VariantProps } from "class-variance-authority";
|
|
|
5
5
|
//#region src/components/CollapsibleTable/CollapsibleTable.d.ts
|
|
6
6
|
declare const collapsibleTableVariants: (props?: {
|
|
7
7
|
size?: "sm" | "md" | "lg" | "xl" | "full";
|
|
8
|
-
variant?: "
|
|
9
|
-
spacing?: "
|
|
8
|
+
variant?: "dark" | "default" | "ghost" | "outlined";
|
|
9
|
+
spacing?: "sm" | "md" | "lg" | "none" | "auto";
|
|
10
10
|
} & _$class_variance_authority_types0.ClassProp) => string;
|
|
11
11
|
interface CollapsibleTableProps extends Omit<HTMLAttributes<HTMLElement>, 'title'>, VariantProps<typeof collapsibleTableVariants> {
|
|
12
12
|
/** Table title displayed in the header */
|
|
@@ -13,7 +13,7 @@ declare const containerVariants: (props?: {
|
|
|
13
13
|
padding?: "sm" | "md" | "lg" | "xl" | "2xl" | "none";
|
|
14
14
|
separator?: "both" | "without" | "x" | "y";
|
|
15
15
|
border?: "with" | "none";
|
|
16
|
-
borderColor?: "error" | "
|
|
16
|
+
borderColor?: "error" | "primary" | "secondary" | "neutral" | "card" | "text" | "success" | "warning";
|
|
17
17
|
background?: "with" | "none" | "hoverable";
|
|
18
18
|
gap?: "sm" | "md" | "lg" | "xl" | "2xl" | "none";
|
|
19
19
|
} & _$class_variance_authority_types0.ClassProp) => string;
|
|
@@ -7,10 +7,10 @@ declare const useDictionarySchema: (projectId: string) => z.ZodObject<{
|
|
|
7
7
|
key: z.ZodDefault<z.ZodString>;
|
|
8
8
|
projectIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
9
9
|
qualifierType: z.ZodDefault<z.ZodEnum<{
|
|
10
|
-
item: "item";
|
|
11
|
-
meta: "meta";
|
|
12
10
|
none: "none";
|
|
13
11
|
variant: "variant";
|
|
12
|
+
meta: "meta";
|
|
13
|
+
item: "item";
|
|
14
14
|
}>>;
|
|
15
15
|
item: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
16
16
|
variant: z.ZodOptional<z.ZodString>;
|
|
@@ -6,7 +6,7 @@ import { VariantProps } from "class-variance-authority";
|
|
|
6
6
|
declare const checkboxVariants: (props?: {
|
|
7
7
|
variant?: "default";
|
|
8
8
|
size?: "xs" | "sm" | "md" | "lg";
|
|
9
|
-
color?: "error" | "
|
|
9
|
+
color?: "error" | "custom" | "primary" | "secondary" | "neutral" | "light" | "dark" | "text" | "text-inverse" | "success";
|
|
10
10
|
validationStyleEnabled?: "enabled" | "disabled";
|
|
11
11
|
} & _$class_variance_authority_types0.ClassProp) => string;
|
|
12
12
|
type CheckboxSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
@@ -6,7 +6,7 @@ import { VariantProps } from "class-variance-authority";
|
|
|
6
6
|
declare const radioVariants: (props?: {
|
|
7
7
|
variant?: "default";
|
|
8
8
|
size?: "xs" | "sm" | "md" | "lg";
|
|
9
|
-
color?: "error" | "
|
|
9
|
+
color?: "error" | "custom" | "primary" | "secondary" | "neutral" | "light" | "dark" | "text" | "text-inverse" | "success";
|
|
10
10
|
validationStyleEnabled?: "enabled" | "disabled";
|
|
11
11
|
} & _$class_variance_authority_types0.ClassProp) => string;
|
|
12
12
|
type RadioSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LanguageBackground.d.ts","names":[],"sources":["../../../../src/components/LanguageBackground/LanguageBackground.tsx"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"LanguageBackground.d.ts","names":[],"sources":["../../../../src/components/LanguageBackground/LanguageBackground.tsx"],"mappings":";;;cASa,kBAAA,EAAoB,EAAA,CAAG,iBAAA"}
|
|
@@ -13,9 +13,9 @@ type LinkRoundedSize = 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'ful
|
|
|
13
13
|
type LinkSize = 'sm' | 'md' | 'lg' | 'xl' | 'custom';
|
|
14
14
|
type LinkUnderlined = 'default' | 'true' | 'false';
|
|
15
15
|
declare const linkVariants: (props?: {
|
|
16
|
-
variant?: "default" | "
|
|
16
|
+
variant?: "default" | "invisible-link" | "hoverable" | "button" | "button-outlined";
|
|
17
17
|
roundedSize?: "sm" | "md" | "lg" | "xl" | "2xl" | "none" | "3xl" | "full";
|
|
18
|
-
color?: "error" | "
|
|
18
|
+
color?: "error" | "custom" | "primary" | "secondary" | "neutral" | "light" | "dark" | "text" | "text-inverse" | "success";
|
|
19
19
|
size?: "sm" | "md" | "lg" | "xl" | "custom";
|
|
20
20
|
underlined?: boolean | "default";
|
|
21
21
|
} & _$class_variance_authority_types0.ClassProp) => string;
|
|
@@ -5,8 +5,8 @@ import { VariantProps } from "class-variance-authority";
|
|
|
5
5
|
//#region src/components/Pagination/Pagination.d.ts
|
|
6
6
|
declare const paginationVariants: (props?: {
|
|
7
7
|
size?: "sm" | "md" | "lg";
|
|
8
|
-
color?: "primary" | "secondary" | "
|
|
9
|
-
variant?: "default" | "
|
|
8
|
+
color?: "primary" | "secondary" | "neutral" | "text";
|
|
9
|
+
variant?: "default" | "bordered" | "ghost";
|
|
10
10
|
} & _$class_variance_authority_types0.ClassProp) => string;
|
|
11
11
|
type PaginationSize = 'sm' | 'md' | 'lg';
|
|
12
12
|
type PaginationVariant = 'default' | 'bordered' | 'ghost';
|