@splenddev/kreativ-core 0.1.2 → 0.1.4
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/chunk-5CYSF7C3.js +24 -0
- package/dist/chunk-5CYSF7C3.js.map +1 -0
- package/dist/{utils/index.cjs → chunk-OJSXALOI.js} +5 -41
- package/dist/chunk-OJSXALOI.js.map +1 -0
- package/dist/chunk-RV5MKKBP.js +3 -0
- package/dist/chunk-RV5MKKBP.js.map +1 -0
- package/dist/hooks/index.js +3 -88
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.js +4 -365
- package/dist/index.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/utils/index.js +1 -350
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/hooks/index.cjs +0 -449
- package/dist/hooks/index.cjs.map +0 -1
- package/dist/hooks/index.d.cts +0 -117
- package/dist/index.cjs +0 -559
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -363
- package/dist/types/index.cjs +0 -4
- package/dist/types/index.cjs.map +0 -1
- package/dist/types/index.d.cts +0 -646
- package/dist/utils/index.cjs.map +0 -1
- package/dist/utils/index.d.cts +0 -64
package/dist/hooks/index.cjs
DELETED
|
@@ -1,449 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var React = require('react');
|
|
4
|
-
|
|
5
|
-
function _interopNamespace(e) {
|
|
6
|
-
if (e && e.__esModule) return e;
|
|
7
|
-
var n = Object.create(null);
|
|
8
|
-
if (e) {
|
|
9
|
-
Object.keys(e).forEach(function (k) {
|
|
10
|
-
if (k !== 'default') {
|
|
11
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () { return e[k]; }
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
n.default = e;
|
|
20
|
-
return Object.freeze(n);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
24
|
-
|
|
25
|
-
// src/hooks/useBreakpoint.ts
|
|
26
|
-
var BREAKPOINTS = {
|
|
27
|
-
sm: 640,
|
|
28
|
-
md: 768,
|
|
29
|
-
lg: 1024,
|
|
30
|
-
xl: 1280,
|
|
31
|
-
"2xl": 1536
|
|
32
|
-
};
|
|
33
|
-
function useBreakpoint(breakpoint) {
|
|
34
|
-
const query = `(min-width: ${BREAKPOINTS[breakpoint]}px)`;
|
|
35
|
-
const [matches, setMatches] = React.useState(
|
|
36
|
-
() => typeof window !== "undefined" && window.matchMedia(query).matches
|
|
37
|
-
);
|
|
38
|
-
React.useEffect(() => {
|
|
39
|
-
const mql = window.matchMedia(query);
|
|
40
|
-
const listener = (e) => setMatches(e.matches);
|
|
41
|
-
mql.addEventListener("change", listener);
|
|
42
|
-
setMatches(mql.matches);
|
|
43
|
-
return () => mql.removeEventListener("change", listener);
|
|
44
|
-
}, [query]);
|
|
45
|
-
return matches;
|
|
46
|
-
}
|
|
47
|
-
var ThemeContext = React.createContext(null);
|
|
48
|
-
|
|
49
|
-
// src/hooks/useColorMode.ts
|
|
50
|
-
function useColorMode() {
|
|
51
|
-
const ctx = React.useContext(ThemeContext);
|
|
52
|
-
if (!ctx) {
|
|
53
|
-
throw new Error("useColorMode must be used within a ThemeProvider");
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
mode: ctx.mode,
|
|
57
|
-
setMode: ctx.setMode,
|
|
58
|
-
toggleColorMode: () => {
|
|
59
|
-
throw new Error("not implemented");
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
function useControllableState({
|
|
64
|
-
value,
|
|
65
|
-
defaultValue,
|
|
66
|
-
onChange
|
|
67
|
-
}) {
|
|
68
|
-
const [internal, setInternal] = React__namespace.useState(defaultValue);
|
|
69
|
-
const isControlled = value !== void 0;
|
|
70
|
-
const current = isControlled ? value : internal;
|
|
71
|
-
const currentRef = React__namespace.useRef(current);
|
|
72
|
-
currentRef.current = current;
|
|
73
|
-
const onChangeRef = React__namespace.useRef(onChange);
|
|
74
|
-
onChangeRef.current = onChange;
|
|
75
|
-
const set = React__namespace.useCallback(
|
|
76
|
-
(next) => {
|
|
77
|
-
if (Object.is(next, currentRef.current)) return;
|
|
78
|
-
if (!isControlled) setInternal(next);
|
|
79
|
-
onChangeRef.current?.(next);
|
|
80
|
-
},
|
|
81
|
-
[isControlled]
|
|
82
|
-
);
|
|
83
|
-
return [current, set];
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// src/utils/responsive.ts
|
|
87
|
-
function isResponsiveValue(value) {
|
|
88
|
-
return typeof value === "object" && value !== null;
|
|
89
|
-
}
|
|
90
|
-
function resolveResponsiveValue(value) {
|
|
91
|
-
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
92
|
-
return {
|
|
93
|
-
base: value,
|
|
94
|
-
responsive: {}
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
const responsiveValue = value;
|
|
98
|
-
const { base, ...responsive } = responsiveValue;
|
|
99
|
-
return {
|
|
100
|
-
base,
|
|
101
|
-
responsive: Object.fromEntries(
|
|
102
|
-
Object.entries(responsive).filter(([, value2]) => value2 !== void 0)
|
|
103
|
-
)
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// src/hooks/useMergedResponsiveStyles.ts
|
|
108
|
-
function mergeResponsiveProps(entries) {
|
|
109
|
-
const result = {};
|
|
110
|
-
for (const [value, toCss] of entries) {
|
|
111
|
-
if (value === void 0) continue;
|
|
112
|
-
const { base, responsive } = resolveResponsiveValue(value);
|
|
113
|
-
if (base !== void 0) {
|
|
114
|
-
result.base = { ...result.base, ...toCss(base) };
|
|
115
|
-
}
|
|
116
|
-
for (const [bp, v] of Object.entries(responsive)) {
|
|
117
|
-
result[bp] = { ...result[bp], ...toCss(v) };
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return result;
|
|
121
|
-
}
|
|
122
|
-
function useMergedResponsiveStyles(entries) {
|
|
123
|
-
return React.useMemo(
|
|
124
|
-
() => mergeResponsiveProps(entries),
|
|
125
|
-
entries.map(([value]) => value)
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// src/utils/assertProviderContext.ts
|
|
130
|
-
function assertProviderContext(ctx, hookName, providerName, packageName = "kreativ-core") {
|
|
131
|
-
if (ctx == null) {
|
|
132
|
-
throw new Error(
|
|
133
|
-
`[${packageName}] ${hookName}() must be used within a <${providerName}>. Did you forget to wrap your app with <${providerName}>? import { ${providerName} } from '${packageName}';`
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// src/provider/useTheme.ts
|
|
139
|
-
function useTheme() {
|
|
140
|
-
const ctx = React.useContext(ThemeContext);
|
|
141
|
-
assertProviderContext(ctx, "useTheme", "ThemeProvider");
|
|
142
|
-
return ctx;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// src/hooks/useResponsiveStyles.ts
|
|
146
|
-
var cssPropertyToKebab = (property) => property.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);
|
|
147
|
-
var cssValue = (value) => {
|
|
148
|
-
if (typeof value === "number") {
|
|
149
|
-
return String(value);
|
|
150
|
-
}
|
|
151
|
-
return value;
|
|
152
|
-
};
|
|
153
|
-
function useResponsiveStyles(responsiveStyles) {
|
|
154
|
-
const { theme } = useTheme();
|
|
155
|
-
const id = React.useId();
|
|
156
|
-
return React.useMemo(() => {
|
|
157
|
-
if (!responsiveStyles || Object.keys(responsiveStyles).length === 0) {
|
|
158
|
-
return {
|
|
159
|
-
attribute: void 0,
|
|
160
|
-
style: void 0
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
const breakpoints = theme.tokens.breakpoints;
|
|
164
|
-
if (!breakpoints) {
|
|
165
|
-
return {
|
|
166
|
-
attribute: void 0,
|
|
167
|
-
style: void 0
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
const attribute = id.replace(/:/g, "");
|
|
171
|
-
const selector = `[data-kui-responsive="${attribute}"]`;
|
|
172
|
-
const rules = [];
|
|
173
|
-
for (const [breakpoint, styles] of Object.entries(responsiveStyles)) {
|
|
174
|
-
const declarations = Object.entries(styles).filter(([, value]) => value !== void 0).map(
|
|
175
|
-
([property, value]) => `${cssPropertyToKebab(property)}:${cssValue(value)};`
|
|
176
|
-
).join("");
|
|
177
|
-
if (!declarations) continue;
|
|
178
|
-
if (breakpoint === "base") {
|
|
179
|
-
rules.push(`
|
|
180
|
-
${selector} {
|
|
181
|
-
${declarations}
|
|
182
|
-
}
|
|
183
|
-
`);
|
|
184
|
-
continue;
|
|
185
|
-
}
|
|
186
|
-
const breakpointToken = breakpoints[breakpoint];
|
|
187
|
-
if (!breakpointToken) continue;
|
|
188
|
-
rules.push(`
|
|
189
|
-
@media (min-width: ${breakpointToken.value}) {
|
|
190
|
-
${selector} {
|
|
191
|
-
${declarations}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
`);
|
|
195
|
-
}
|
|
196
|
-
if (rules.length === 0) {
|
|
197
|
-
return {
|
|
198
|
-
attribute: void 0,
|
|
199
|
-
style: void 0
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
return {
|
|
203
|
-
attribute,
|
|
204
|
-
style: rules.join("\n")
|
|
205
|
-
};
|
|
206
|
-
}, [responsiveStyles, theme.tokens.breakpoints, id]);
|
|
207
|
-
}
|
|
208
|
-
var applySizeOffset = (value, offset) => {
|
|
209
|
-
if (!value || !offset) return value;
|
|
210
|
-
return `calc(${value} - ${offset})`;
|
|
211
|
-
};
|
|
212
|
-
function useSizeStyle(size, iconOnly = false, componentName = "component", options = {}) {
|
|
213
|
-
const {
|
|
214
|
-
widthFromHeight = false,
|
|
215
|
-
includeHeight = true,
|
|
216
|
-
includeWidth = false,
|
|
217
|
-
sizeOffset,
|
|
218
|
-
fontSizeOffset
|
|
219
|
-
} = options;
|
|
220
|
-
const { theme, fallbackSize } = useTheme();
|
|
221
|
-
return React.useMemo(() => {
|
|
222
|
-
const scale = theme.sizes;
|
|
223
|
-
const resolveToken = (sizeName) => scale[sizeName] ?? scale[fallbackSize] ?? Object.values(scale)[0] ?? {};
|
|
224
|
-
const buildStyle = (sizeName) => {
|
|
225
|
-
const token2 = resolveToken(sizeName);
|
|
226
|
-
const style = {};
|
|
227
|
-
if (includeHeight && token2.height) {
|
|
228
|
-
style.height = applySizeOffset(token2.height, sizeOffset);
|
|
229
|
-
}
|
|
230
|
-
if (includeWidth) {
|
|
231
|
-
if (iconOnly && token2.width) {
|
|
232
|
-
style.width = applySizeOffset(token2.width, sizeOffset);
|
|
233
|
-
} else if ((iconOnly || widthFromHeight) && includeHeight && token2.height) {
|
|
234
|
-
style.width = applySizeOffset(token2.height, sizeOffset);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
if (!iconOnly && token2.paddingX) {
|
|
238
|
-
style.paddingLeft = token2.paddingX;
|
|
239
|
-
style.paddingRight = token2.paddingX;
|
|
240
|
-
}
|
|
241
|
-
if (token2.paddingY) {
|
|
242
|
-
style.paddingTop = token2.paddingY;
|
|
243
|
-
style.paddingBottom = token2.paddingY;
|
|
244
|
-
}
|
|
245
|
-
if (token2.fontSize) {
|
|
246
|
-
style.fontSize = applySizeOffset(token2.fontSize, fontSizeOffset);
|
|
247
|
-
}
|
|
248
|
-
if (token2.gap) {
|
|
249
|
-
style.gap = iconOnly ? 0 : token2.gap;
|
|
250
|
-
}
|
|
251
|
-
if (token2.radius) {
|
|
252
|
-
const varName = `--kui-${componentName}-radius`;
|
|
253
|
-
style[varName] = token2.radius;
|
|
254
|
-
}
|
|
255
|
-
return style;
|
|
256
|
-
};
|
|
257
|
-
if (!isResponsiveValue(size)) {
|
|
258
|
-
const style = buildStyle(size);
|
|
259
|
-
const token2 = resolveToken(size);
|
|
260
|
-
return {
|
|
261
|
-
style,
|
|
262
|
-
iconSize: token2.iconSize,
|
|
263
|
-
fontSize: applySizeOffset(token2.fontSize, fontSizeOffset),
|
|
264
|
-
gap: token2.gap
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
const { base, ...breakpoints } = size;
|
|
268
|
-
const baseSize = base ?? fallbackSize;
|
|
269
|
-
const responsiveStyles = {
|
|
270
|
-
base: buildStyle(baseSize)
|
|
271
|
-
};
|
|
272
|
-
for (const [breakpoint, breakpointSize] of Object.entries(breakpoints)) {
|
|
273
|
-
if (breakpointSize === void 0) continue;
|
|
274
|
-
responsiveStyles[breakpoint] = buildStyle(breakpointSize);
|
|
275
|
-
}
|
|
276
|
-
const token = resolveToken(baseSize);
|
|
277
|
-
return {
|
|
278
|
-
style: {},
|
|
279
|
-
responsiveStyles,
|
|
280
|
-
iconSize: token.iconSize,
|
|
281
|
-
fontSize: applySizeOffset(token.fontSize, fontSizeOffset),
|
|
282
|
-
gap: token.gap
|
|
283
|
-
};
|
|
284
|
-
}, [
|
|
285
|
-
theme.sizes,
|
|
286
|
-
size,
|
|
287
|
-
fallbackSize,
|
|
288
|
-
iconOnly,
|
|
289
|
-
includeHeight,
|
|
290
|
-
includeWidth,
|
|
291
|
-
widthFromHeight,
|
|
292
|
-
componentName,
|
|
293
|
-
sizeOffset,
|
|
294
|
-
fontSizeOffset
|
|
295
|
-
]);
|
|
296
|
-
}
|
|
297
|
-
function applyOffset(value, offset) {
|
|
298
|
-
if (offset == null || value == null) {
|
|
299
|
-
return value;
|
|
300
|
-
}
|
|
301
|
-
if (typeof value !== "string") {
|
|
302
|
-
return value;
|
|
303
|
-
}
|
|
304
|
-
return `calc(${value} - ${offset})`;
|
|
305
|
-
}
|
|
306
|
-
function useSizeToken(size, key, offset) {
|
|
307
|
-
const { theme, fallbackSize } = useTheme();
|
|
308
|
-
return React.useMemo(() => {
|
|
309
|
-
const scale = theme.sizes;
|
|
310
|
-
const baseSize = isResponsiveValue(size) ? size.base ?? fallbackSize : size;
|
|
311
|
-
const token = scale[baseSize] ?? scale[fallbackSize] ?? Object.values(scale)[0] ?? {};
|
|
312
|
-
if (!key) {
|
|
313
|
-
return token;
|
|
314
|
-
}
|
|
315
|
-
return applyOffset(token[key], offset);
|
|
316
|
-
}, [theme.sizes, size, fallbackSize, key, offset]);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// src/hooks/useSizes.ts
|
|
320
|
-
function getSizes(theme) {
|
|
321
|
-
return Object.keys(theme.sizes ?? {});
|
|
322
|
-
}
|
|
323
|
-
function useSizes() {
|
|
324
|
-
const { theme } = useTheme();
|
|
325
|
-
return getSizes(theme);
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
// src/utils/resolveTokenReference.ts
|
|
329
|
-
function resolveTokenReference(value, tokens) {
|
|
330
|
-
if (typeof value !== "string") {
|
|
331
|
-
return typeof value === "number" ? value : "";
|
|
332
|
-
}
|
|
333
|
-
const match = value.match(/^\{(.+)\}$/);
|
|
334
|
-
if (!match || match[1] === void 0) {
|
|
335
|
-
return value;
|
|
336
|
-
}
|
|
337
|
-
const path = match[1].split(".");
|
|
338
|
-
let current = tokens;
|
|
339
|
-
for (const key of path) {
|
|
340
|
-
if (typeof current !== "object" || current === null || !(key in current)) {
|
|
341
|
-
return "";
|
|
342
|
-
}
|
|
343
|
-
current = current[key];
|
|
344
|
-
}
|
|
345
|
-
if (typeof current === "object" && current !== null && "value" in current) {
|
|
346
|
-
const tokenValue = current.value;
|
|
347
|
-
if (typeof tokenValue === "string" || typeof tokenValue === "number") {
|
|
348
|
-
return tokenValue;
|
|
349
|
-
}
|
|
350
|
-
return "";
|
|
351
|
-
}
|
|
352
|
-
return typeof current === "string" || typeof current === "number" ? current : "";
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
// src/utils/resolveTypography.ts
|
|
356
|
-
function resolveTypography(typography, tokens) {
|
|
357
|
-
if (!typography) return {};
|
|
358
|
-
return {
|
|
359
|
-
fontFamily: resolveTokenReference(typography.fontFamily, tokens),
|
|
360
|
-
fontSize: resolveTokenReference(typography.fontSize, tokens),
|
|
361
|
-
fontWeight: resolveTokenReference(typography.fontWeight, tokens),
|
|
362
|
-
lineHeight: resolveTokenReference(typography.lineHeight, tokens),
|
|
363
|
-
letterSpacing: resolveTokenReference(
|
|
364
|
-
typography.letterSpacing,
|
|
365
|
-
tokens
|
|
366
|
-
)
|
|
367
|
-
};
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
// src/hooks/useTypography.ts
|
|
371
|
-
function useTypography(name) {
|
|
372
|
-
const { theme } = useTheme();
|
|
373
|
-
return resolveTypography(
|
|
374
|
-
name ? theme.typography[name] : void 0,
|
|
375
|
-
theme.tokens
|
|
376
|
-
);
|
|
377
|
-
}
|
|
378
|
-
function useUndoRedo(initialValue, options = {}) {
|
|
379
|
-
const { maxHistory = 30, onValueChange } = options;
|
|
380
|
-
const [value, setValue] = React.useState(initialValue);
|
|
381
|
-
const historyRef = React.useRef([initialValue]);
|
|
382
|
-
const indexRef = React.useRef(0);
|
|
383
|
-
const push = React.useCallback(
|
|
384
|
-
(newValue) => {
|
|
385
|
-
if (newValue === historyRef.current[indexRef.current]) return;
|
|
386
|
-
historyRef.current = historyRef.current.slice(0, indexRef.current + 1);
|
|
387
|
-
historyRef.current.push(newValue);
|
|
388
|
-
if (historyRef.current.length > maxHistory) {
|
|
389
|
-
historyRef.current = historyRef.current.slice(-maxHistory);
|
|
390
|
-
indexRef.current = historyRef.current.length - 1;
|
|
391
|
-
} else {
|
|
392
|
-
indexRef.current = historyRef.current.length - 1;
|
|
393
|
-
}
|
|
394
|
-
setValue(newValue);
|
|
395
|
-
onValueChange?.(newValue);
|
|
396
|
-
},
|
|
397
|
-
[maxHistory, onValueChange]
|
|
398
|
-
);
|
|
399
|
-
const undo = React.useCallback(() => {
|
|
400
|
-
if (indexRef.current <= 0) return;
|
|
401
|
-
indexRef.current -= 1;
|
|
402
|
-
const newValue = historyRef.current[indexRef.current];
|
|
403
|
-
setValue(newValue);
|
|
404
|
-
onValueChange?.(newValue);
|
|
405
|
-
}, [onValueChange]);
|
|
406
|
-
const redo = React.useCallback(() => {
|
|
407
|
-
if (indexRef.current >= historyRef.current.length - 1) return;
|
|
408
|
-
indexRef.current += 1;
|
|
409
|
-
const newVal = historyRef.current[indexRef.current];
|
|
410
|
-
setValue(newVal);
|
|
411
|
-
}, []);
|
|
412
|
-
const reset = React.useCallback(
|
|
413
|
-
(newValue) => {
|
|
414
|
-
historyRef.current = [newValue];
|
|
415
|
-
indexRef.current = 0;
|
|
416
|
-
setValue(newValue);
|
|
417
|
-
onValueChange?.(newValue);
|
|
418
|
-
},
|
|
419
|
-
[onValueChange]
|
|
420
|
-
);
|
|
421
|
-
const canUndo = indexRef.current > 0;
|
|
422
|
-
const canRedo = indexRef.current < historyRef.current.length - 1;
|
|
423
|
-
return {
|
|
424
|
-
value,
|
|
425
|
-
setValue,
|
|
426
|
-
push,
|
|
427
|
-
undo,
|
|
428
|
-
redo,
|
|
429
|
-
reset,
|
|
430
|
-
canUndo,
|
|
431
|
-
canRedo,
|
|
432
|
-
history: historyRef.current,
|
|
433
|
-
currentIndex: indexRef.current
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
exports.getSizes = getSizes;
|
|
438
|
-
exports.useBreakpoint = useBreakpoint;
|
|
439
|
-
exports.useColorMode = useColorMode;
|
|
440
|
-
exports.useControllableState = useControllableState;
|
|
441
|
-
exports.useMergedResponsiveStyles = useMergedResponsiveStyles;
|
|
442
|
-
exports.useResponsiveStyles = useResponsiveStyles;
|
|
443
|
-
exports.useSizeStyle = useSizeStyle;
|
|
444
|
-
exports.useSizeToken = useSizeToken;
|
|
445
|
-
exports.useSizes = useSizes;
|
|
446
|
-
exports.useTypography = useTypography;
|
|
447
|
-
exports.useUndoRedo = useUndoRedo;
|
|
448
|
-
//# sourceMappingURL=index.cjs.map
|
|
449
|
-
//# sourceMappingURL=index.cjs.map
|
package/dist/hooks/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useBreakpoint.ts","../../src/provider/ThemeContext.tsx","../../src/hooks/useColorMode.ts","../../src/hooks/useControllableState.ts","../../src/utils/responsive.ts","../../src/hooks/useMergedResponsiveStyles.ts","../../src/utils/assertProviderContext.ts","../../src/provider/useTheme.ts","../../src/hooks/useResponsiveStyles.ts","../../src/hooks/useSizeStyle.ts","../../src/hooks/useSizeToken.ts","../../src/hooks/useSizes.ts","../../src/utils/resolveTokenReference.ts","../../src/utils/resolveTypography.ts","../../src/hooks/useTypography.ts","../../src/hooks/useUndoRedo.ts"],"names":["useState","useEffect","createContext","useContext","React","value","useMemo","useId","token","useRef","useCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\r\n\r\nimport { BaseBreakpoint } from \"@/types\";\r\nimport { useEffect, useState } from \"react\";\r\n\r\nconst BREAKPOINTS: Record<BaseBreakpoint, number> = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n \"2xl\": 1536,\r\n};\r\n\r\nexport function useBreakpoint(breakpoint: BaseBreakpoint): boolean {\r\n const query = `(min-width: ${BREAKPOINTS[breakpoint]}px)`;\r\n const [matches, setMatches] = useState(\r\n () => typeof window !== \"undefined\" && window.matchMedia(query).matches,\r\n );\r\n\r\n useEffect(() => {\r\n const mql = window.matchMedia(query);\r\n const listener = (e: MediaQueryListEvent) => setMatches(e.matches);\r\n mql.addEventListener(\"change\", listener);\r\n setMatches(mql.matches);\r\n return () => mql.removeEventListener(\"change\", listener);\r\n }, [query]);\r\n\r\n return matches;\r\n}\r\n","\"use client\";\r\n\r\nimport { createContext } from \"react\";\r\nimport type { ColorMode, Theme, ResolvedTokens } from \"@/types/theme\";\r\n\r\nexport interface ThemeContextValue {\r\n theme: Theme;\r\n mode: ColorMode;\r\n resolvedMode: \"light\" | \"dark\";\r\n setMode: (mode: ColorMode) => void;\r\n fallbackSize: string;\r\n tokens: ResolvedTokens;\r\n}\r\n\r\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\r\n","import { useContext } from \"react\";\nimport { ThemeContext } from \"../provider/ThemeContext\";\nimport { ColorMode } from \"@/types/theme\";\n\nexport interface UseColorModeReturn {\n mode: ColorMode;\n setMode: (mode: ColorMode) => void;\n toggleColorMode: () => void;\n}\n\nexport function useColorMode(): UseColorModeReturn {\n const ctx = useContext(ThemeContext);\n\n if (!ctx) {\n throw new Error(\"useColorMode must be used within a ThemeProvider\");\n }\n\n return {\n mode: ctx.mode,\n setMode: ctx.setMode,\n toggleColorMode: () => {\n throw new Error(\"not implemented\");\n },\n };\n}\n","import * as React from \"react\";\n\nexport interface UseControllableStateOptions<T> {\n value?: T;\n defaultValue: T;\n onChange?: (next: T) => void;\n}\n\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: UseControllableStateOptions<T>): [T, (next: T) => void] {\n const [internal, setInternal] = React.useState<T>(defaultValue);\n const isControlled = value !== undefined;\n const current = isControlled ? (value as T) : internal;\n const currentRef = React.useRef(current);\n currentRef.current = current;\n const onChangeRef = React.useRef(onChange);\n onChangeRef.current = onChange;\n\n const set = React.useCallback(\n (next: T) => {\n if (Object.is(next, currentRef.current)) return;\n if (!isControlled) setInternal(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n return [current, set];\n}\n","import type { BaseBreakpoint, ResponsiveValue } from \"@/types\";\n\nexport function isResponsiveValue<T>(\n value: ResponsiveValue<T>,\n): value is Partial<Record<\"base\" | BaseBreakpoint, T>> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport interface ResolvedResponsiveValue<T> {\n base?: T;\n responsive: Record<string, T>;\n}\n\nexport function resolveResponsiveValue<T, B extends string = string>(\n value: ResponsiveValue<T, B>,\n): ResolvedResponsiveValue<T> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return {\n base: value,\n responsive: {},\n };\n }\n\n const responsiveValue = value as Partial<Record<\"base\" | B, T>>;\n\n const { base, ...responsive } = responsiveValue;\n\n return {\n base,\n responsive: Object.fromEntries(\n Object.entries(responsive).filter(([, value]) => value !== undefined),\n ) as Record<string, T>,\n };\n}\n\nexport function toResponsiveClasses<T>(\n value: ResolvedResponsiveValue<T>,\n resolve: (value: T) => string,\n): string {\n const classes: string[] = [];\n\n if (value.base !== undefined) {\n classes.push(resolve(value.base));\n }\n\n for (const [breakpoint, item] of Object.entries(value.responsive)) {\n classes.push(\n item\n ? item\n .toString()\n .split(\" \")\n .map((className) => `${breakpoint}:${className}`)\n .join(\" \")\n : \"\",\n );\n }\n\n return classes.filter(Boolean).join(\" \");\n}\n\nexport function mergeResponsiveValue<T, B extends string = string>(\n defaults: ResponsiveValue<T, B>,\n value?: ResponsiveValue<T, B>,\n): ResolvedResponsiveValue<T> {\n const defaultValue = resolveResponsiveValue(defaults);\n\n if (value === undefined) {\n return defaultValue;\n }\n\n const overrideValue = resolveResponsiveValue(value);\n\n return {\n base: overrideValue.base ?? defaultValue.base,\n responsive: {\n ...defaultValue.responsive,\n ...overrideValue.responsive,\n },\n };\n}\n","\"use client\";\r\n\r\nimport { useMemo } from \"react\";\r\nimport type { CSSProperties } from \"react\";\r\nimport type { ResponsiveValue, ResponsiveStyles } from \"@/types\";\r\nimport { resolveResponsiveValue } from \"@/utils/responsive\";\r\n\r\n/**\r\n * One entry: a responsive prop value plus a mapper from that value to a\r\n * partial CSSProperties object.\r\n *\r\n * Using `any` for the value type because different entries may have different\r\n * value types, and we only need to call the mapper with the resolved value.\r\n */\r\nexport type ResponsivePropEntry = [\r\n value: ResponsiveValue<any> | undefined,\r\n toCss: (value: any) => Partial<CSSProperties>,\r\n];\r\n\r\nfunction mergeResponsiveProps(\r\n entries: ResponsivePropEntry[],\r\n): ResponsiveStyles {\r\n const result: ResponsiveStyles = {};\r\n\r\n for (const [value, toCss] of entries) {\r\n if (value === undefined) continue;\r\n\r\n const { base, responsive } = resolveResponsiveValue(value);\r\n\r\n if (base !== undefined) {\r\n result.base = { ...result.base, ...toCss(base) };\r\n }\r\n\r\n for (const [bp, v] of Object.entries(responsive)) {\r\n result[bp] = { ...result[bp], ...toCss(v) };\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Merges multiple ResponsiveValue<T> props into one ResponsiveStyles map,\r\n * memoized on the entries' values.\r\n *\r\n * @example\r\n * const responsiveStyles = useMergedResponsiveStyles([\r\n * [gap, (v) => ({ gap: spaceVar(v) })],\r\n * [align, (v) => ({ alignItems: v })],\r\n * ]);\r\n */\r\nexport function useMergedResponsiveStyles(\r\n entries: ResponsivePropEntry[],\r\n): ResponsiveStyles {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n return useMemo(\r\n () => mergeResponsiveProps(entries),\r\n entries.map(([value]) => value),\r\n );\r\n}\r\n","\"use client\";\r\n\r\n/**\r\n * Throws a standardized \"used outside provider\" error.\r\n * Shared across all kreativ-core hooks so the message stays consistent.\r\n */\r\nexport function assertProviderContext<T>(\r\n ctx: T | null | undefined,\r\n hookName: string,\r\n providerName: string,\r\n packageName = \"kreativ-core\",\r\n): asserts ctx is T {\r\n if (ctx == null) {\r\n throw new Error(\r\n `[${packageName}] ${hookName}() must be used within a <${providerName}>. ` +\r\n `Did you forget to wrap your app with <${providerName}>? ` +\r\n `import { ${providerName} } from '${packageName}';`,\r\n );\r\n }\r\n}\r\n","\"use client\";\n\nimport { useContext } from \"react\";\nimport { ThemeContext } from \"@/provider/ThemeContext\";\nimport { assertProviderContext } from \"@/utils/assertProviderContext\";\n\nexport function useTheme() {\n const ctx = useContext(ThemeContext);\n assertProviderContext(ctx, \"useTheme\", \"ThemeProvider\");\n return ctx;\n}\n","\"use client\";\r\n\r\nimport { type CSSProperties, useId, useMemo } from \"react\";\r\n\r\nimport type { ResponsiveStyles } from \"@/types\";\r\nimport { useTheme } from \"@/provider/useTheme\";\r\n\r\nconst cssPropertyToKebab = (property: string) =>\r\n property.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\r\n\r\nconst cssValue = (value: CSSProperties[keyof CSSProperties]) => {\r\n if (typeof value === \"number\") {\r\n return String(value);\r\n }\r\n\r\n return value;\r\n};\r\n\r\nexport function useResponsiveStyles(responsiveStyles?: ResponsiveStyles) {\r\n const { theme } = useTheme();\r\n const id = useId();\r\n\r\n return useMemo(() => {\r\n if (!responsiveStyles || Object.keys(responsiveStyles).length === 0) {\r\n return {\r\n attribute: undefined,\r\n style: undefined,\r\n };\r\n }\r\n\r\n const breakpoints = theme.tokens.breakpoints;\r\n\r\n if (!breakpoints) {\r\n return {\r\n attribute: undefined,\r\n style: undefined,\r\n };\r\n }\r\n\r\n const attribute = id.replace(/:/g, \"\");\r\n\r\n const selector = `[data-kui-responsive=\"${attribute}\"]`;\r\n\r\n const rules: string[] = [];\r\n\r\n for (const [breakpoint, styles] of Object.entries(responsiveStyles)) {\r\n const declarations = Object.entries(styles)\r\n .filter(([, value]) => value !== undefined)\r\n .map(\r\n ([property, value]) =>\r\n `${cssPropertyToKebab(property)}:${cssValue(value)};`,\r\n )\r\n .join(\"\");\r\n\r\n if (!declarations) continue;\r\n\r\n if (breakpoint === \"base\") {\r\n rules.push(`\r\n ${selector} {\r\n ${declarations}\r\n }\r\n `);\r\n\r\n continue;\r\n }\r\n\r\n const breakpointToken = breakpoints[breakpoint];\r\n\r\n if (!breakpointToken) continue;\r\n\r\n rules.push(`\r\n @media (min-width: ${breakpointToken.value}) {\r\n ${selector} {\r\n ${declarations}\r\n }\r\n }\r\n `);\r\n }\r\n\r\n if (rules.length === 0) {\r\n return {\r\n attribute: undefined,\r\n style: undefined,\r\n };\r\n }\r\n\r\n return {\r\n attribute,\r\n style: rules.join(\"\\n\"),\r\n };\r\n }, [responsiveStyles, theme.tokens.breakpoints, id]);\r\n}\r\n","\"use client\";\n\nimport { useMemo, type CSSProperties } from \"react\";\n\nimport type {\n CSSPropertiesWithVars,\n ResponsiveStyles,\n ResponsiveValue,\n} from \"@/types\";\nimport { isResponsiveValue } from \"@/utils/responsive\";\nimport { useTheme } from \"@/provider/useTheme\";\n\nexport interface UseSizeStyleOptions {\n includeHeight?: boolean;\n includeWidth?: boolean;\n widthFromHeight?: boolean;\n sizeOffset?: string;\n fontSizeOffset?: string;\n}\n\nexport interface ResolvedSize {\n /**\n * Inline styles for non-responsive sizing.\n *\n * For responsive values this is intentionally empty so that\n * breakpoint styles can override each other through CSS.\n */\n style: CSSProperties;\n\n /**\n * Styles generated for responsive sizing.\n */\n responsiveStyles?: ResponsiveStyles;\n\n iconSize?: CSSProperties[\"width\"];\n fontSize?: CSSProperties[\"fontSize\"];\n gap?: CSSProperties[\"gap\"];\n}\n\nconst applySizeOffset = (\n value: string | undefined,\n offset: string | undefined,\n) => {\n if (!value || !offset) return value;\n\n return `calc(${value} - ${offset})`;\n};\n\nexport function useSizeStyle(\n size: ResponsiveValue<string>,\n iconOnly = false,\n componentName = \"component\",\n options: UseSizeStyleOptions = {},\n): ResolvedSize {\n const {\n widthFromHeight = false,\n includeHeight = true,\n includeWidth = false,\n sizeOffset,\n fontSizeOffset,\n } = options;\n\n const { theme, fallbackSize } = useTheme();\n\n return useMemo(() => {\n const scale = theme.sizes;\n\n const resolveToken = (sizeName: string) =>\n scale[sizeName] ?? scale[fallbackSize] ?? Object.values(scale)[0] ?? {};\n\n const buildStyle = (sizeName: string): CSSPropertiesWithVars => {\n const token = resolveToken(sizeName);\n const style: CSSPropertiesWithVars = {};\n\n if (includeHeight && token.height) {\n style.height = applySizeOffset(token.height, sizeOffset);\n }\n\n if (includeWidth) {\n if (iconOnly && token.width) {\n style.width = applySizeOffset(token.width, sizeOffset);\n } else if (\n (iconOnly || widthFromHeight) &&\n includeHeight &&\n token.height\n ) {\n style.width = applySizeOffset(token.height, sizeOffset);\n }\n }\n\n if (!iconOnly && token.paddingX) {\n style.paddingLeft = token.paddingX;\n style.paddingRight = token.paddingX;\n }\n\n if (token.paddingY) {\n style.paddingTop = token.paddingY;\n style.paddingBottom = token.paddingY;\n }\n\n if (token.fontSize) {\n style.fontSize = applySizeOffset(token.fontSize, fontSizeOffset);\n }\n\n if (token.gap) {\n style.gap = iconOnly ? 0 : token.gap;\n }\n\n if (token.radius) {\n const varName = `--kui-${componentName}-radius` as `--kui-${string}`;\n\n style[varName] = token.radius;\n }\n\n return style;\n };\n\n if (!isResponsiveValue(size)) {\n const style = buildStyle(size);\n const token = resolveToken(size);\n\n return {\n style,\n iconSize: token.iconSize,\n fontSize: applySizeOffset(token.fontSize, fontSizeOffset),\n gap: token.gap,\n };\n }\n\n const { base, ...breakpoints } = size;\n\n const baseSize = base ?? fallbackSize;\n\n const responsiveStyles: ResponsiveStyles = {\n base: buildStyle(baseSize),\n };\n\n for (const [breakpoint, breakpointSize] of Object.entries(breakpoints)) {\n if (breakpointSize === undefined) continue;\n\n responsiveStyles[breakpoint] = buildStyle(breakpointSize);\n }\n\n const token = resolveToken(baseSize);\n\n return {\n style: {},\n responsiveStyles,\n iconSize: token.iconSize,\n fontSize: applySizeOffset(token.fontSize, fontSizeOffset),\n gap: token.gap,\n };\n }, [\n theme.sizes,\n size,\n fallbackSize,\n iconOnly,\n includeHeight,\n includeWidth,\n widthFromHeight,\n componentName,\n sizeOffset,\n fontSizeOffset,\n ]);\n}\n","import type { ResponsiveValue, SizeToken } from \"@/types\";\r\n\r\nimport { useMemo } from \"react\";\r\nimport { useTheme } from \"@/provider/useTheme\";\r\nimport { isResponsiveValue } from \"@/utils/responsive\";\r\n\r\ntype SizeTokenValue = SizeToken[keyof SizeToken];\r\n\r\nfunction applyOffset(value: SizeTokenValue, offset?: string): SizeTokenValue {\r\n if (offset == null || value == null) {\r\n return value;\r\n }\r\n\r\n if (typeof value !== \"string\") {\r\n return value;\r\n }\r\n\r\n return `calc(${value} - ${offset})`;\r\n}\r\n\r\nexport function useSizeToken(size: ResponsiveValue<string>): SizeToken;\r\n\r\nexport function useSizeToken<K extends keyof SizeToken>(\r\n size: ResponsiveValue<string>,\r\n key: K,\r\n offset?: string,\r\n): SizeToken[K];\r\n\r\nexport function useSizeToken<K extends keyof SizeToken>(\r\n size: ResponsiveValue<string>,\r\n key?: K,\r\n offset?: string,\r\n): SizeToken | SizeToken[K] {\r\n const { theme, fallbackSize } = useTheme();\r\n\r\n return useMemo(() => {\r\n const scale = theme.sizes;\r\n\r\n const baseSize = isResponsiveValue(size)\r\n ? (size.base ?? fallbackSize)\r\n : size;\r\n\r\n const token =\r\n scale[baseSize] ?? scale[fallbackSize] ?? Object.values(scale)[0] ?? {};\r\n\r\n if (!key) {\r\n return token;\r\n }\r\n\r\n return applyOffset(token[key], offset) as SizeToken[K];\r\n }, [theme.sizes, size, fallbackSize, key, offset]);\r\n}\r\n","import { useTheme } from \"@/provider/useTheme\";\r\nimport type { Size, Theme } from \"@/types\";\r\n\r\nexport function getSizes(theme: Theme): Size[] {\r\n return Object.keys(theme.sizes ?? {}) as Size[];\r\n}\r\n\r\nexport function useSizes(): Size[] {\r\n const { theme } = useTheme();\r\n return getSizes(theme);\r\n}\r\n","import type { DesignTokens } from \"@/types\";\r\n\r\nexport function resolveTokenReference(\r\n value: unknown,\r\n tokens: DesignTokens,\r\n): string | number {\r\n if (typeof value !== \"string\") {\r\n return typeof value === \"number\" ? value : \"\";\r\n }\r\n\r\n const match = value.match(/^\\{(.+)\\}$/);\r\n\r\n if (!match || match[1] === undefined) {\r\n return value;\r\n }\r\n\r\n const path = match[1].split(\".\");\r\n\r\n let current: unknown = tokens;\r\n\r\n for (const key of path) {\r\n if (typeof current !== \"object\" || current === null || !(key in current)) {\r\n return \"\";\r\n }\r\n\r\n current = (current as Record<string, unknown>)[key];\r\n }\r\n\r\n if (typeof current === \"object\" && current !== null && \"value\" in current) {\r\n const tokenValue = (current as { value: unknown }).value;\r\n\r\n if (typeof tokenValue === \"string\" || typeof tokenValue === \"number\") {\r\n return tokenValue;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n return typeof current === \"string\" || typeof current === \"number\"\r\n ? current\r\n : \"\";\r\n}\r\n","import type { CSSProperties } from \"react\";\r\nimport type { DesignTokens, TypographyStyle } from \"@/types\";\r\nimport { resolveTokenReference } from \"./resolveTokenReference\";\r\n\r\nexport function resolveTypography(\r\n typography: TypographyStyle | undefined,\r\n tokens: DesignTokens,\r\n): CSSProperties {\r\n if (!typography) return {};\r\n\r\n return {\r\n fontFamily: resolveTokenReference(typography.fontFamily, tokens) as string,\r\n fontSize: resolveTokenReference(typography.fontSize, tokens) as string,\r\n fontWeight: resolveTokenReference(typography.fontWeight, tokens),\r\n lineHeight: resolveTokenReference(typography.lineHeight, tokens),\r\n letterSpacing: resolveTokenReference(\r\n typography.letterSpacing,\r\n tokens,\r\n ) as string,\r\n };\r\n}\r\n","import { useTheme } from \"@/provider\";\r\nimport { resolveTypography } from \"@/utils\";\r\n\r\nexport function useTypography(name?: string) {\r\n const { theme } = useTheme();\r\n\r\n return resolveTypography(\r\n name ? theme.typography[name] : undefined,\r\n theme.tokens,\r\n );\r\n}","import { useCallback, useRef, useState } from \"react\";\r\n\r\ninterface UseUndoRedoOptions {\r\n /**\r\n * Maximum number of history entries to keep.\r\n * Only applies when `undoable` is `true` and the component manages its own history.\r\n * @default 30\r\n */\r\n maxHistory?: number;\r\n}\r\n\r\n/**\r\n * Manages a history stack for a value, providing undo/redo capabilities.\r\n * The hook stores the current value in its own state, but you can also\r\n * sync it with external state by calling `push` when the external value changes.\r\n *\r\n * @param initialValue - The starting value.\r\n * @param options - Configuration (maxHistory).\r\n * @returns An object with the current value, setters, and undo/redo controls.\r\n */\r\nexport function useUndoRedo<T>(\r\n initialValue: T,\r\n options: UseUndoRedoOptions & {\r\n onValueChange?: (value: T | undefined) => void;\r\n } = {},\r\n) {\r\n const { maxHistory = 30, onValueChange } = options;\r\n\r\n const [value, setValue] = useState<T | undefined>(initialValue);\r\n const historyRef = useRef<T[]>([initialValue]);\r\n const indexRef = useRef(0);\r\n\r\n const push = useCallback(\r\n (newValue: T) => {\r\n if (newValue === historyRef.current[indexRef.current]) return;\r\n\r\n historyRef.current = historyRef.current.slice(0, indexRef.current + 1);\r\n\r\n historyRef.current.push(newValue);\r\n if (historyRef.current.length > maxHistory) {\r\n historyRef.current = historyRef.current.slice(-maxHistory);\r\n indexRef.current = historyRef.current.length - 1;\r\n } else {\r\n indexRef.current = historyRef.current.length - 1;\r\n }\r\n\r\n setValue(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n [maxHistory, onValueChange],\r\n );\r\n\r\n const undo = useCallback(() => {\r\n if (indexRef.current <= 0) return;\r\n indexRef.current -= 1;\r\n const newValue = historyRef.current[indexRef.current];\r\n setValue(newValue);\r\n onValueChange?.(newValue);\r\n }, [onValueChange]);\r\n\r\n const redo = useCallback(() => {\r\n if (indexRef.current >= historyRef.current.length - 1) return;\r\n indexRef.current += 1;\r\n const newVal = historyRef.current[indexRef.current];\r\n setValue(newVal);\r\n }, []);\r\n\r\n const reset = useCallback(\r\n (newValue: T) => {\r\n historyRef.current = [newValue];\r\n indexRef.current = 0;\r\n setValue(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n [onValueChange],\r\n );\r\n\r\n const canUndo = indexRef.current > 0;\r\n const canRedo = indexRef.current < historyRef.current.length - 1;\r\n\r\n return {\r\n value,\r\n setValue,\r\n push,\r\n undo,\r\n redo,\r\n reset,\r\n canUndo,\r\n canRedo,\r\n history: historyRef.current,\r\n currentIndex: indexRef.current,\r\n };\r\n}\r\n"]}
|
package/dist/hooks/index.d.cts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { BaseBreakpoint, ColorMode, ResponsiveValue, ResponsiveStyles, SizeToken, Theme, Size } from '../types/index.cjs';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { CSSProperties } from 'react';
|
|
4
|
-
|
|
5
|
-
declare function useBreakpoint(breakpoint: BaseBreakpoint): boolean;
|
|
6
|
-
|
|
7
|
-
interface UseColorModeReturn {
|
|
8
|
-
mode: ColorMode;
|
|
9
|
-
setMode: (mode: ColorMode) => void;
|
|
10
|
-
toggleColorMode: () => void;
|
|
11
|
-
}
|
|
12
|
-
declare function useColorMode(): UseColorModeReturn;
|
|
13
|
-
|
|
14
|
-
interface UseControllableStateOptions<T> {
|
|
15
|
-
value?: T;
|
|
16
|
-
defaultValue: T;
|
|
17
|
-
onChange?: (next: T) => void;
|
|
18
|
-
}
|
|
19
|
-
declare function useControllableState<T>({ value, defaultValue, onChange, }: UseControllableStateOptions<T>): [T, (next: T) => void];
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* One entry: a responsive prop value plus a mapper from that value to a
|
|
23
|
-
* partial CSSProperties object.
|
|
24
|
-
*
|
|
25
|
-
* Using `any` for the value type because different entries may have different
|
|
26
|
-
* value types, and we only need to call the mapper with the resolved value.
|
|
27
|
-
*/
|
|
28
|
-
type ResponsivePropEntry = [
|
|
29
|
-
value: ResponsiveValue<any> | undefined,
|
|
30
|
-
toCss: (value: any) => Partial<CSSProperties>
|
|
31
|
-
];
|
|
32
|
-
/**
|
|
33
|
-
* Merges multiple ResponsiveValue<T> props into one ResponsiveStyles map,
|
|
34
|
-
* memoized on the entries' values.
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* const responsiveStyles = useMergedResponsiveStyles([
|
|
38
|
-
* [gap, (v) => ({ gap: spaceVar(v) })],
|
|
39
|
-
* [align, (v) => ({ alignItems: v })],
|
|
40
|
-
* ]);
|
|
41
|
-
*/
|
|
42
|
-
declare function useMergedResponsiveStyles(entries: ResponsivePropEntry[]): ResponsiveStyles;
|
|
43
|
-
|
|
44
|
-
declare function useResponsiveStyles(responsiveStyles?: ResponsiveStyles): {
|
|
45
|
-
attribute: undefined;
|
|
46
|
-
style: undefined;
|
|
47
|
-
} | {
|
|
48
|
-
attribute: string;
|
|
49
|
-
style: string;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
interface UseSizeStyleOptions {
|
|
53
|
-
includeHeight?: boolean;
|
|
54
|
-
includeWidth?: boolean;
|
|
55
|
-
widthFromHeight?: boolean;
|
|
56
|
-
sizeOffset?: string;
|
|
57
|
-
fontSizeOffset?: string;
|
|
58
|
-
}
|
|
59
|
-
interface ResolvedSize {
|
|
60
|
-
/**
|
|
61
|
-
* Inline styles for non-responsive sizing.
|
|
62
|
-
*
|
|
63
|
-
* For responsive values this is intentionally empty so that
|
|
64
|
-
* breakpoint styles can override each other through CSS.
|
|
65
|
-
*/
|
|
66
|
-
style: CSSProperties;
|
|
67
|
-
/**
|
|
68
|
-
* Styles generated for responsive sizing.
|
|
69
|
-
*/
|
|
70
|
-
responsiveStyles?: ResponsiveStyles;
|
|
71
|
-
iconSize?: CSSProperties["width"];
|
|
72
|
-
fontSize?: CSSProperties["fontSize"];
|
|
73
|
-
gap?: CSSProperties["gap"];
|
|
74
|
-
}
|
|
75
|
-
declare function useSizeStyle(size: ResponsiveValue<string>, iconOnly?: boolean, componentName?: string, options?: UseSizeStyleOptions): ResolvedSize;
|
|
76
|
-
|
|
77
|
-
declare function useSizeToken(size: ResponsiveValue<string>): SizeToken;
|
|
78
|
-
declare function useSizeToken<K extends keyof SizeToken>(size: ResponsiveValue<string>, key: K, offset?: string): SizeToken[K];
|
|
79
|
-
|
|
80
|
-
declare function getSizes(theme: Theme): Size[];
|
|
81
|
-
declare function useSizes(): Size[];
|
|
82
|
-
|
|
83
|
-
declare function useTypography(name?: string): React.CSSProperties;
|
|
84
|
-
|
|
85
|
-
interface UseUndoRedoOptions {
|
|
86
|
-
/**
|
|
87
|
-
* Maximum number of history entries to keep.
|
|
88
|
-
* Only applies when `undoable` is `true` and the component manages its own history.
|
|
89
|
-
* @default 30
|
|
90
|
-
*/
|
|
91
|
-
maxHistory?: number;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Manages a history stack for a value, providing undo/redo capabilities.
|
|
95
|
-
* The hook stores the current value in its own state, but you can also
|
|
96
|
-
* sync it with external state by calling `push` when the external value changes.
|
|
97
|
-
*
|
|
98
|
-
* @param initialValue - The starting value.
|
|
99
|
-
* @param options - Configuration (maxHistory).
|
|
100
|
-
* @returns An object with the current value, setters, and undo/redo controls.
|
|
101
|
-
*/
|
|
102
|
-
declare function useUndoRedo<T>(initialValue: T, options?: UseUndoRedoOptions & {
|
|
103
|
-
onValueChange?: (value: T | undefined) => void;
|
|
104
|
-
}): {
|
|
105
|
-
value: T | undefined;
|
|
106
|
-
setValue: React.Dispatch<React.SetStateAction<T | undefined>>;
|
|
107
|
-
push: (newValue: T) => void;
|
|
108
|
-
undo: () => void;
|
|
109
|
-
redo: () => void;
|
|
110
|
-
reset: (newValue: T) => void;
|
|
111
|
-
canUndo: boolean;
|
|
112
|
-
canRedo: boolean;
|
|
113
|
-
history: T[];
|
|
114
|
-
currentIndex: number;
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
export { type ResolvedSize, type ResponsivePropEntry, type UseColorModeReturn, type UseControllableStateOptions, type UseSizeStyleOptions, getSizes, useBreakpoint, useColorMode, useControllableState, useMergedResponsiveStyles, useResponsiveStyles, useSizeStyle, useSizeToken, useSizes, useTypography, useUndoRedo };
|