@vikram-hegde/skeletal 0.0.1
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/README.md +35 -0
- package/dist/alert-dialog/index.d.ts +2 -0
- package/dist/alert-dialog/index.js +2 -0
- package/dist/alert-dialog-1hxVC_5N.js +71 -0
- package/dist/badge/index.d.ts +2 -0
- package/dist/badge/index.js +2 -0
- package/dist/badge-C3p1L0E7.css +53 -0
- package/dist/badge-C3p1L0E7.js +32 -0
- package/dist/button/index.d.ts +2 -0
- package/dist/button/index.js +2 -0
- package/dist/button-B48UNbaC.css +152 -0
- package/dist/button-B48UNbaC.js +46 -0
- package/dist/button-Dvd4n2U4.d.ts +56 -0
- package/dist/checkbox/index.d.ts +2 -0
- package/dist/checkbox/index.js +2 -0
- package/dist/checkbox-wh2BoiSj.css +76 -0
- package/dist/checkbox-wh2BoiSj.js +112 -0
- package/dist/cluster-BJ4m5uGN.css +9 -0
- package/dist/cluster-BJ4m5uGN.js +21 -0
- package/dist/combobox/index.d.ts +2 -0
- package/dist/combobox/index.js +2 -0
- package/dist/combobox-DWH7uSsx.css +389 -0
- package/dist/combobox-DWH7uSsx.js +327 -0
- package/dist/command-palette/index.d.ts +2 -0
- package/dist/command-palette/index.js +2 -0
- package/dist/command-palette-DF4XJ8qz.css +164 -0
- package/dist/command-palette-DF4XJ8qz.js +191 -0
- package/dist/dialog/index.d.ts +6 -0
- package/dist/dialog/index.js +2 -0
- package/dist/dialog-C4yqxII_.js +73 -0
- package/dist/dialog-footer-Br9KZP4v.js +29 -0
- package/dist/dialog-footer-bNVIVPbu.d.ts +56 -0
- package/dist/dialog-portal-B21WFYkQ.css +131 -0
- package/dist/dialog-portal-B21WFYkQ.js +26 -0
- package/dist/dialog-portal-BF89FBeX.d.ts +15 -0
- package/dist/dialog-title-DRYRIxCp.js +35 -0
- package/dist/dialog-title-jyf86Q8C.d.ts +36 -0
- package/dist/dialog-viewport-CaMWJrCJ.d.ts +42 -0
- package/dist/dialog-viewport-vpbsq7Ib.js +21 -0
- package/dist/drawer/index.d.ts +2 -0
- package/dist/drawer/index.js +2 -0
- package/dist/drawer-DQmz_uCP.css +214 -0
- package/dist/drawer-DQmz_uCP.js +180 -0
- package/dist/icon/index.d.ts +2 -0
- package/dist/icon/index.js +2 -0
- package/dist/icon-DBOdxNvH.css +6 -0
- package/dist/icon-DBOdxNvH.js +20 -0
- package/dist/index-A2QmU5r9.d.ts +37 -0
- package/dist/index-B0uNLS7z.d.ts +301 -0
- package/dist/index-B63PSP58.d.ts +94 -0
- package/dist/index-BBOkTl3h.d.ts +261 -0
- package/dist/index-BLFVnve3.d.ts +53 -0
- package/dist/index-BXPUT5u-.d.ts +72 -0
- package/dist/index-BngvATZx.d.ts +35 -0
- package/dist/index-Br2NrBW_.d.ts +444 -0
- package/dist/index-CUy-9csi.d.ts +135 -0
- package/dist/index-CbMW32E9.d.ts +82 -0
- package/dist/index-CyTcR6iv.d.ts +433 -0
- package/dist/index-CznsZ_1M.d.ts +85 -0
- package/dist/index-D-6gOciw.d.ts +350 -0
- package/dist/index-DdqDyczP.d.ts +209 -0
- package/dist/index-GOGpFujX.d.ts +144 -0
- package/dist/index-W3ozKcis.d.ts +245 -0
- package/dist/index-kpw3_4q_.d.ts +50 -0
- package/dist/index-rH7TJeJt.d.ts +334 -0
- package/dist/index-rQ7sRkqg.d.ts +122 -0
- package/dist/index.css +93 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.js +26 -0
- package/dist/input/index.d.ts +2 -0
- package/dist/input/index.js +2 -0
- package/dist/input-CQ_ean8e.css +129 -0
- package/dist/input-CQ_ean8e.js +65 -0
- package/dist/layout/index.d.ts +2 -0
- package/dist/layout/index.js +4 -0
- package/dist/layout-qoyutnKU.css +181 -0
- package/dist/layout-qoyutnKU.js +169 -0
- package/dist/menu/index.d.ts +2 -0
- package/dist/menu/index.js +2 -0
- package/dist/menu-DRdGMI_-.css +236 -0
- package/dist/menu-DRdGMI_-.js +243 -0
- package/dist/merge-class-name-C4KJJGuK.js +15 -0
- package/dist/popover/index.d.ts +2 -0
- package/dist/popover/index.js +2 -0
- package/dist/popover-CenynT0Z.css +139 -0
- package/dist/popover-CenynT0Z.js +174 -0
- package/dist/radio/index.d.ts +2 -0
- package/dist/radio/index.js +2 -0
- package/dist/radio-BJrvdkga.css +80 -0
- package/dist/radio-BJrvdkga.js +75 -0
- package/dist/scroll-area/index.d.ts +2 -0
- package/dist/scroll-area/index.js +2 -0
- package/dist/scroll-area-DkORxJE9.css +175 -0
- package/dist/scroll-area-DkORxJE9.js +114 -0
- package/dist/select/index.d.ts +2 -0
- package/dist/select/index.js +2 -0
- package/dist/select-BaqBHUac.css +273 -0
- package/dist/select-BaqBHUac.js +254 -0
- package/dist/skeleton/index.d.ts +2 -0
- package/dist/skeleton/index.js +2 -0
- package/dist/skeleton-W6fwO5pf.css +88 -0
- package/dist/skeleton-W6fwO5pf.js +97 -0
- package/dist/spinner/index.d.ts +2 -0
- package/dist/spinner/index.js +2 -0
- package/dist/spinner-DB6ap8Si.css +43 -0
- package/dist/spinner-DB6ap8Si.js +27 -0
- package/dist/stack-BzFVrsmT.css +12 -0
- package/dist/stack-BzFVrsmT.js +52 -0
- package/dist/style-vars-ZSrCUzKx.js +13 -0
- package/dist/switch/index.d.ts +2 -0
- package/dist/switch/index.js +2 -0
- package/dist/switch-DizP31iF.css +76 -0
- package/dist/switch-DizP31iF.js +58 -0
- package/dist/tooltip/index.d.ts +2 -0
- package/dist/tooltip/index.js +2 -0
- package/dist/tooltip-CQk2WjUS.css +92 -0
- package/dist/tooltip-CQk2WjUS.js +138 -0
- package/package.json +68 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import './skeleton-W6fwO5pf.css';
|
|
2
|
+
import { clsx } from "clsx";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { Children, cloneElement, isValidElement } from "react";
|
|
5
|
+
//#region src/skeleton/skeleton.module.css
|
|
6
|
+
var skeleton_module_default = {
|
|
7
|
+
"skeleton": "bfarVq_skeleton",
|
|
8
|
+
"skeleton__media": "bfarVq_skeleton__media",
|
|
9
|
+
"skeleton__media-raw": "bfarVq_skeleton__media-raw",
|
|
10
|
+
"skeleton__real": "bfarVq_skeleton__real",
|
|
11
|
+
"skeleton__shimmer": "bfarVq_skeleton__shimmer",
|
|
12
|
+
"skeleton__stage": "bfarVq_skeleton__stage",
|
|
13
|
+
"skeleton__text": "bfarVq_skeleton__text"
|
|
14
|
+
};
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/skeleton/skeleton.tsx
|
|
17
|
+
const MEDIA_TAGS = /* @__PURE__ */ new Set([
|
|
18
|
+
"img",
|
|
19
|
+
"video",
|
|
20
|
+
"svg",
|
|
21
|
+
"button"
|
|
22
|
+
]);
|
|
23
|
+
const FIELD_TAGS = /* @__PURE__ */ new Set(["input", "textarea"]);
|
|
24
|
+
/**
|
|
25
|
+
* Starts the shimmer sweep on a shimmer element via the Web Animations API
|
|
26
|
+
* instead of a CSS animation, so every bar on the page shares the same
|
|
27
|
+
* `startTime` and moves in perfect lockstep. Per-element CSS animations drift
|
|
28
|
+
* out of phase as they mount and read as jittery.
|
|
29
|
+
*
|
|
30
|
+
* Runs from a ref callback (no effects), guarded so it starts once per element.
|
|
31
|
+
* Honors `prefers-reduced-motion` and the `--_skeleton-duration` custom
|
|
32
|
+
* property (seconds) when present.
|
|
33
|
+
*/
|
|
34
|
+
function startShimmer(element) {
|
|
35
|
+
if (element == null || element.dataset["skeletonShimmer"] === "started") return;
|
|
36
|
+
if (typeof element.animate !== "function") return;
|
|
37
|
+
if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
|
|
38
|
+
element.dataset["skeletonShimmer"] = "started";
|
|
39
|
+
const rawDuration = getComputedStyle(element).getPropertyValue("--_skeleton-duration").trim();
|
|
40
|
+
const duration = Number.parseFloat(rawDuration) * 1e3 || 2e3;
|
|
41
|
+
element.animate([{ backgroundPosition: "100% 0" }, { backgroundPosition: "0% 0" }], {
|
|
42
|
+
duration,
|
|
43
|
+
iterations: Infinity,
|
|
44
|
+
easing: "ease-in-out"
|
|
45
|
+
}).startTime = 0;
|
|
46
|
+
}
|
|
47
|
+
function Skeleton({ children, loading = true, className, style, ...props }) {
|
|
48
|
+
return /* @__PURE__ */ jsx("div", {
|
|
49
|
+
"aria-hidden": loading || void 0,
|
|
50
|
+
"data-loading": loading || void 0,
|
|
51
|
+
className: clsx(skeleton_module_default.skeleton, className),
|
|
52
|
+
style,
|
|
53
|
+
...props,
|
|
54
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
55
|
+
className: skeleton_module_default.skeleton__stage,
|
|
56
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
57
|
+
className: skeleton_module_default.skeleton__real,
|
|
58
|
+
children
|
|
59
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
60
|
+
className: skeleton_module_default.skeleton__shimmer,
|
|
61
|
+
"aria-hidden": "true",
|
|
62
|
+
children: skeletonizeChildren(children)
|
|
63
|
+
})]
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/** Recursively replaces text and media nodes with shimmer-wrapped versions. */
|
|
68
|
+
function skeletonizeChildren(children) {
|
|
69
|
+
return Children.map(children, (child) => skeletonize(child));
|
|
70
|
+
}
|
|
71
|
+
function skeletonize(node) {
|
|
72
|
+
if (typeof node === "string" || typeof node === "number") {
|
|
73
|
+
if (typeof node === "string" && node.trim() === "") return node;
|
|
74
|
+
return /* @__PURE__ */ jsx("span", {
|
|
75
|
+
ref: startShimmer,
|
|
76
|
+
className: skeleton_module_default.skeleton__text,
|
|
77
|
+
children: node
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (!isValidElement(node)) return node;
|
|
81
|
+
const element = node;
|
|
82
|
+
if (typeof element.type === "string") {
|
|
83
|
+
if (MEDIA_TAGS.has(element.type)) return /* @__PURE__ */ jsx("span", {
|
|
84
|
+
ref: startShimmer,
|
|
85
|
+
className: skeleton_module_default.skeleton__media,
|
|
86
|
+
children: cloneElement(element, { className: clsx(element.props.className, skeleton_module_default["skeleton__media-raw"]) })
|
|
87
|
+
});
|
|
88
|
+
if (FIELD_TAGS.has(element.type)) return cloneElement(element, {
|
|
89
|
+
ref: startShimmer,
|
|
90
|
+
className: clsx(element.props.className, skeleton_module_default.skeleton__text),
|
|
91
|
+
disabled: true
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return cloneElement(element, { children: skeletonizeChildren(element.props.children) });
|
|
95
|
+
}
|
|
96
|
+
//#endregion
|
|
97
|
+
export { Skeleton as t };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
@layer skeletal {
|
|
2
|
+
.aLDOfa_spinner {
|
|
3
|
+
--_spinner-size: 1em;
|
|
4
|
+
--_spinner-ring: .1875em;
|
|
5
|
+
inline-size: var(--_spinner-size);
|
|
6
|
+
block-size: var(--_spinner-size);
|
|
7
|
+
-webkit-mask: radial-gradient(farthest-side,
|
|
8
|
+
transparent calc(100% - var(--_spinner-ring)),
|
|
9
|
+
#000 calc(100% - var(--_spinner-ring)));
|
|
10
|
+
mask: radial-gradient(farthest-side,
|
|
11
|
+
transparent calc(100% - var(--_spinner-ring)),
|
|
12
|
+
#000 calc(100% - var(--_spinner-ring)));
|
|
13
|
+
background: conic-gradient(from 90deg, #0000 0deg 140deg, currentColor 140deg 360deg);
|
|
14
|
+
border-radius: 50%;
|
|
15
|
+
flex-shrink: 0;
|
|
16
|
+
animation: .7s linear infinite aLDOfa_skeletal-spinner-rotate;
|
|
17
|
+
display: inline-block;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.aLDOfa_spinner__label {
|
|
21
|
+
clip: rect(0 0 0 0);
|
|
22
|
+
white-space: nowrap;
|
|
23
|
+
border: 0;
|
|
24
|
+
block-size: 1px;
|
|
25
|
+
inline-size: 1px;
|
|
26
|
+
margin: -1px;
|
|
27
|
+
padding: 0;
|
|
28
|
+
position: absolute;
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@keyframes aLDOfa_skeletal-spinner-rotate {
|
|
33
|
+
to {
|
|
34
|
+
transform: rotate(1turn);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@media (prefers-reduced-motion: reduce) {
|
|
39
|
+
.aLDOfa_spinner {
|
|
40
|
+
animation-duration: 1.5s;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import './spinner-DB6ap8Si.css';
|
|
2
|
+
import { t as styleVars } from "./style-vars-ZSrCUzKx.js";
|
|
3
|
+
import { clsx } from "clsx";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
//#region src/spinner/spinner.module.css
|
|
6
|
+
var spinner_module_default = {
|
|
7
|
+
"skeletal-spinner-rotate": "aLDOfa_skeletal-spinner-rotate",
|
|
8
|
+
"spinner": "aLDOfa_spinner",
|
|
9
|
+
"spinner__label": "aLDOfa_spinner__label"
|
|
10
|
+
};
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/spinner/spinner.tsx
|
|
13
|
+
function Spinner({ size, label, className, style, ...props }) {
|
|
14
|
+
return /* @__PURE__ */ jsx("span", {
|
|
15
|
+
role: label !== void 0 ? "status" : void 0,
|
|
16
|
+
"aria-hidden": label !== void 0 ? void 0 : true,
|
|
17
|
+
className: clsx(spinner_module_default.spinner, className),
|
|
18
|
+
style: styleVars({ "--_spinner-size": size }, style),
|
|
19
|
+
...props,
|
|
20
|
+
children: label !== void 0 ? /* @__PURE__ */ jsx("span", {
|
|
21
|
+
className: spinner_module_default.spinner__label,
|
|
22
|
+
children: label
|
|
23
|
+
}) : null
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { Spinner as t };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import './stack-BzFVrsmT.css';
|
|
2
|
+
import { t as styleVars } from "./style-vars-ZSrCUzKx.js";
|
|
3
|
+
import { clsx } from "clsx";
|
|
4
|
+
import { Children, cloneElement, createElement, isValidElement } from "react";
|
|
5
|
+
//#region src/lib/transform-children.ts
|
|
6
|
+
/**
|
|
7
|
+
* Clones each direct child element, applying `transform` to the child at
|
|
8
|
+
* `index` (0-based). Non-element children are returned untouched.
|
|
9
|
+
*/
|
|
10
|
+
function transformChildAt(children, index, transform) {
|
|
11
|
+
return Children.map(children, (child, childIndex) => {
|
|
12
|
+
if (!isValidElement(child)) return child;
|
|
13
|
+
return childIndex === index ? transform(child) : child;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Clones every direct child element, applying `transform` to each. Non-element
|
|
18
|
+
* children are returned untouched.
|
|
19
|
+
*/
|
|
20
|
+
function transformChildren(children, transform) {
|
|
21
|
+
return Children.map(children, (child) => {
|
|
22
|
+
if (!isValidElement(child)) return child;
|
|
23
|
+
return transform(child);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/layout/stack.module.css
|
|
28
|
+
var stack_module_default = {
|
|
29
|
+
"stack": "-4ZNHG_stack",
|
|
30
|
+
"stack--fill": "-4ZNHG_stack--fill"
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region src/layout/stack.tsx
|
|
34
|
+
function Stack({ as, space, recursive = false, splitAfter, fill = false, className, style, children, ...props }) {
|
|
35
|
+
const Comp = as ?? "div";
|
|
36
|
+
const content = splitAfter !== void 0 && splitAfter > 1 ? transformChildAt(children, splitAfter - 1, (element) => cloneElement(element, { style: withStyle(element, { marginBlockStart: "auto" }) })) : children;
|
|
37
|
+
return createElement(Comp, {
|
|
38
|
+
className: clsx(stack_module_default.stack, fill && stack_module_default["stack--fill"], className),
|
|
39
|
+
style: styleVars({ "--_stack-space": space ?? "1.5rem" }, style),
|
|
40
|
+
...recursive ? { "data-recursive": true } : {},
|
|
41
|
+
...props
|
|
42
|
+
}, content);
|
|
43
|
+
}
|
|
44
|
+
function withStyle(element, added) {
|
|
45
|
+
const { style } = element.props;
|
|
46
|
+
return {
|
|
47
|
+
...style,
|
|
48
|
+
...added
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { transformChildren as n, Stack as t };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/lib/style-vars.ts
|
|
2
|
+
/**
|
|
3
|
+
* Merges a consumer-provided `style` with CSS custom properties, skipping any
|
|
4
|
+
* `undefined` values so that CSS fallbacks inside `var(--x, default)` still
|
|
5
|
+
* apply.
|
|
6
|
+
*/
|
|
7
|
+
function styleVars(vars, style) {
|
|
8
|
+
const out = { ...style };
|
|
9
|
+
for (const [key, value] of Object.entries(vars)) if (value !== void 0) out[key] = value;
|
|
10
|
+
return out;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { styleVars as t };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
@layer skeletal {
|
|
2
|
+
.q1bmaa_switch__root {
|
|
3
|
+
border: 1px solid var(--sk-border);
|
|
4
|
+
border-radius: var(--sk-radius);
|
|
5
|
+
background-color: var(--sk-background);
|
|
6
|
+
cursor: pointer;
|
|
7
|
+
flex-shrink: 0;
|
|
8
|
+
align-items: center;
|
|
9
|
+
block-size: 1.25rem;
|
|
10
|
+
inline-size: 2.25rem;
|
|
11
|
+
margin: 0;
|
|
12
|
+
padding: .125rem;
|
|
13
|
+
transition: background-color .15s ease-out, border-color .15s ease-out;
|
|
14
|
+
display: inline-flex;
|
|
15
|
+
|
|
16
|
+
&[data-checked] {
|
|
17
|
+
border-color: var(--sk-primary);
|
|
18
|
+
background-color: var(--sk-primary);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&[data-unchecked]:hover:not([data-disabled]) {
|
|
22
|
+
border-color: var(--sk-ring);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
&[data-disabled] {
|
|
26
|
+
cursor: default;
|
|
27
|
+
opacity: .5;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&:focus-visible {
|
|
31
|
+
outline: 2px solid var(--sk-ring);
|
|
32
|
+
outline-offset: 2px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@media (prefers-reduced-motion: reduce) {
|
|
36
|
+
transition: none;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.q1bmaa_switch__thumb {
|
|
41
|
+
background-color: var(--sk-foreground);
|
|
42
|
+
block-size: .875rem;
|
|
43
|
+
inline-size: .875rem;
|
|
44
|
+
transition: translate .2s cubic-bezier(.34, 1.56, .64, 1), background-color .15s ease-out, scale .2s cubic-bezier(.34, 1.56, .64, 1);
|
|
45
|
+
|
|
46
|
+
&[data-unchecked] {
|
|
47
|
+
transform-origin: inline-start center;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
&[data-checked] {
|
|
51
|
+
background-color: var(--sk-primary-foreground);
|
|
52
|
+
transform-origin: inline-end center;
|
|
53
|
+
translate: 1rem;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@media (prefers-reduced-motion: reduce) {
|
|
57
|
+
transition: none;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@media (hover: hover) and (pointer: fine) {
|
|
62
|
+
.q1bmaa_switch__root:not([data-disabled]):hover .q1bmaa_switch__thumb[data-unchecked], .q1bmaa_switch__root:not([data-disabled]):hover .q1bmaa_switch__thumb[data-checked] {
|
|
63
|
+
scale: 1.12 1;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.q1bmaa_switch__root:not([data-disabled]):active .q1bmaa_switch__thumb[data-unchecked], .q1bmaa_switch__root:not([data-disabled]):active .q1bmaa_switch__thumb[data-checked] {
|
|
67
|
+
scale: 1.22 1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@media (prefers-reduced-motion: reduce) {
|
|
72
|
+
.q1bmaa_switch__thumb {
|
|
73
|
+
transition: none;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import './switch-DizP31iF.css';
|
|
2
|
+
import { t as mergeClassName } from "./merge-class-name-C4KJJGuK.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { Switch } from "@base-ui/react/switch";
|
|
5
|
+
//#region src/switch/switch.module.css
|
|
6
|
+
var switch_module_default = {
|
|
7
|
+
"switch__root": "q1bmaa_switch__root",
|
|
8
|
+
"switch__thumb": "q1bmaa_switch__thumb"
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/switch/switch-thumb.tsx
|
|
12
|
+
function SwitchThumb({ className, ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(Switch.Thumb, {
|
|
14
|
+
className: mergeClassName(switch_module_default.switch__thumb, className),
|
|
15
|
+
...props
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/switch/switch-root.tsx
|
|
20
|
+
function SwitchRoot({ className, children, ...props }) {
|
|
21
|
+
return /* @__PURE__ */ jsx(Switch.Root, {
|
|
22
|
+
className: mergeClassName(switch_module_default.switch__root, className),
|
|
23
|
+
...props,
|
|
24
|
+
children: children ?? /* @__PURE__ */ jsx(SwitchThumb, {})
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region src/switch/index.ts
|
|
29
|
+
/**
|
|
30
|
+
* Compound component for an on/off setting.
|
|
31
|
+
*
|
|
32
|
+
* Assemble the parts as properties of the object:
|
|
33
|
+
*
|
|
34
|
+
* ```tsx
|
|
35
|
+
* import { Switch } from '@vikram-hegde/skeletal'
|
|
36
|
+
*
|
|
37
|
+
* <label>
|
|
38
|
+
* <Switch.Root defaultChecked name="notifications" />
|
|
39
|
+
* Notifications
|
|
40
|
+
* </label>
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* Use a switch for instant-effect settings that don't wait on form
|
|
44
|
+
* submission ("Dark mode", "Mute"); use `Checkbox` when the value is part of
|
|
45
|
+
* submitted form data or represents membership in a list. See the Root docs
|
|
46
|
+
* for react-hook-form / TanStack Form wiring — the hidden native input keeps
|
|
47
|
+
* those integrations working.
|
|
48
|
+
*
|
|
49
|
+
* All parts are thin styled wrappers over Base UI's `Switch`, so every Base
|
|
50
|
+
* UI prop, `render` override, and ref behaves the same. Part prop types are
|
|
51
|
+
* exported separately (`SwitchProps`, ...).
|
|
52
|
+
*/
|
|
53
|
+
const Switch$1 = {
|
|
54
|
+
Root: SwitchRoot,
|
|
55
|
+
Thumb: SwitchThumb
|
|
56
|
+
};
|
|
57
|
+
//#endregion
|
|
58
|
+
export { Switch$1 as t };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as TooltipProps, c as TooltipPortalProps, i as TooltipTriggerProps, l as TooltipPopupProps, n as TooltipHandle, o as TooltipProviderProps, r as TooltipViewportProps, s as TooltipPositionerProps, t as Tooltip, u as TooltipArrowProps } from "../index-DdqDyczP.js";
|
|
2
|
+
export { Tooltip, type TooltipArrowProps, TooltipHandle, type TooltipPopupProps, type TooltipPortalProps, type TooltipPositionerProps, type TooltipProps, type TooltipProviderProps, type TooltipTriggerProps, type TooltipViewportProps };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
@layer skeletal {
|
|
2
|
+
.acHrlG_tooltip__portal {
|
|
3
|
+
display: contents;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.acHrlG_tooltip__positioner {
|
|
7
|
+
z-index: 50;
|
|
8
|
+
inline-size: var(--positioner-width);
|
|
9
|
+
block-size: var(--positioner-height);
|
|
10
|
+
max-inline-size: var(--available-width);
|
|
11
|
+
max-block-size: var(--available-height);
|
|
12
|
+
outline: none;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.acHrlG_tooltip__popup {
|
|
16
|
+
z-index: 50;
|
|
17
|
+
border: 1px solid var(--sk-border);
|
|
18
|
+
border-radius: var(--sk-radius);
|
|
19
|
+
background-color: var(--sk-popover);
|
|
20
|
+
color: var(--sk-popover-foreground);
|
|
21
|
+
box-shadow: var(--sk-shadow-md);
|
|
22
|
+
max-inline-size: min(var(--available-width, 20rem), 20rem);
|
|
23
|
+
transform-origin: var(--transform-origin);
|
|
24
|
+
inline-size: var(--popup-width, auto);
|
|
25
|
+
block-size: var(--popup-height, auto);
|
|
26
|
+
padding-block: .375rem;
|
|
27
|
+
padding-inline: .625rem;
|
|
28
|
+
font-size: .875rem;
|
|
29
|
+
line-height: 1.25;
|
|
30
|
+
transition: scale .1s ease-out, opacity .1s ease-out;
|
|
31
|
+
position: relative;
|
|
32
|
+
|
|
33
|
+
&[data-starting-style], &[data-ending-style] {
|
|
34
|
+
opacity: 0;
|
|
35
|
+
scale: .98;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&[data-instant] {
|
|
39
|
+
transition: none;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@media (prefers-reduced-motion: reduce) {
|
|
43
|
+
transition: none;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.acHrlG_tooltip__arrow {
|
|
48
|
+
block-size: 6px;
|
|
49
|
+
inline-size: 12px;
|
|
50
|
+
display: block;
|
|
51
|
+
position: absolute;
|
|
52
|
+
overflow: clip;
|
|
53
|
+
|
|
54
|
+
&:before {
|
|
55
|
+
content: "";
|
|
56
|
+
border: 1px solid var(--sk-border);
|
|
57
|
+
background-color: var(--sk-popover);
|
|
58
|
+
block-size: 8.49px;
|
|
59
|
+
inline-size: 8.49px;
|
|
60
|
+
position: absolute;
|
|
61
|
+
inset-block-end: 0;
|
|
62
|
+
inset-inline-start: 50%;
|
|
63
|
+
transform: translate(-50%, 50%) rotate(45deg);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&[data-side="bottom"] {
|
|
67
|
+
inset-block-start: -6px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
&[data-side="left"] {
|
|
71
|
+
inset-inline-end: -9px;
|
|
72
|
+
transform: rotate(90deg);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
&[data-side="right"] {
|
|
76
|
+
inset-inline-start: -9px;
|
|
77
|
+
transform: rotate(-90deg);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
&[data-side="top"] {
|
|
81
|
+
inset-block-end: -6px;
|
|
82
|
+
transform: rotate(180deg);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.acHrlG_tooltip__viewport {
|
|
87
|
+
block-size: 100%;
|
|
88
|
+
inline-size: 100%;
|
|
89
|
+
padding: 0;
|
|
90
|
+
overflow: clip;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import './tooltip-CQk2WjUS.css';
|
|
2
|
+
import { t as mergeClassName } from "./merge-class-name-C4KJJGuK.js";
|
|
3
|
+
import { t as Button } from "./button-B48UNbaC.js";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import { Tooltip } from "@base-ui/react/tooltip";
|
|
6
|
+
//#region src/tooltip/tooltip.module.css
|
|
7
|
+
var tooltip_module_default = {
|
|
8
|
+
"tooltip__arrow": "acHrlG_tooltip__arrow",
|
|
9
|
+
"tooltip__popup": "acHrlG_tooltip__popup",
|
|
10
|
+
"tooltip__portal": "acHrlG_tooltip__portal",
|
|
11
|
+
"tooltip__positioner": "acHrlG_tooltip__positioner",
|
|
12
|
+
"tooltip__viewport": "acHrlG_tooltip__viewport"
|
|
13
|
+
};
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region src/tooltip/tooltip-arrow.tsx
|
|
16
|
+
function TooltipArrow({ className, ...props }) {
|
|
17
|
+
return /* @__PURE__ */ jsx(Tooltip.Arrow, {
|
|
18
|
+
className: mergeClassName(tooltip_module_default.tooltip__arrow, className),
|
|
19
|
+
...props
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/tooltip/tooltip-popup.tsx
|
|
24
|
+
function TooltipPopup({ className, ...props }) {
|
|
25
|
+
return /* @__PURE__ */ jsx(Tooltip.Popup, {
|
|
26
|
+
className: mergeClassName(tooltip_module_default.tooltip__popup, className),
|
|
27
|
+
...props
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
//#region src/tooltip/tooltip-portal.tsx
|
|
32
|
+
function TooltipPortal({ className, ...props }) {
|
|
33
|
+
return /* @__PURE__ */ jsx(Tooltip.Portal, {
|
|
34
|
+
className: mergeClassName(tooltip_module_default.tooltip__portal, className),
|
|
35
|
+
...props
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
//#region src/tooltip/tooltip-positioner.tsx
|
|
40
|
+
function TooltipPositioner({ className, sideOffset = 8, ...props }) {
|
|
41
|
+
return /* @__PURE__ */ jsx(Tooltip.Positioner, {
|
|
42
|
+
className: mergeClassName(tooltip_module_default.tooltip__positioner, className),
|
|
43
|
+
sideOffset,
|
|
44
|
+
...props
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/tooltip/tooltip-provider.tsx
|
|
49
|
+
function TooltipProvider({ timeout = 300, ...props }) {
|
|
50
|
+
return /* @__PURE__ */ jsx(Tooltip.Provider, {
|
|
51
|
+
timeout,
|
|
52
|
+
...props
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
//#region src/tooltip/tooltip-root.tsx
|
|
57
|
+
function TooltipRoot(props) {
|
|
58
|
+
return /* @__PURE__ */ jsx(Tooltip.Root, { ...props });
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/tooltip/tooltip-trigger.tsx
|
|
62
|
+
function TooltipTrigger({ className, style, variant = "ghost", size = "sm", fullWidth = false, ...props }) {
|
|
63
|
+
return /* @__PURE__ */ jsx(Tooltip.Trigger, {
|
|
64
|
+
...props,
|
|
65
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
66
|
+
variant,
|
|
67
|
+
size,
|
|
68
|
+
fullWidth,
|
|
69
|
+
className,
|
|
70
|
+
style
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//#endregion
|
|
75
|
+
//#region src/tooltip/tooltip-viewport.tsx
|
|
76
|
+
function TooltipViewport({ className, ...props }) {
|
|
77
|
+
return /* @__PURE__ */ jsx(Tooltip.Viewport, {
|
|
78
|
+
className: mergeClassName(tooltip_module_default.tooltip__viewport, className),
|
|
79
|
+
...props
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region src/tooltip/index.ts
|
|
84
|
+
/**
|
|
85
|
+
* Compound component for tooltips.
|
|
86
|
+
*
|
|
87
|
+
* Assemble the parts as properties of the object:
|
|
88
|
+
*
|
|
89
|
+
* ```tsx
|
|
90
|
+
* import { Tooltip } from '@vikram-hegde/skeletal'
|
|
91
|
+
*
|
|
92
|
+
* <Tooltip.Provider>
|
|
93
|
+
* <Tooltip.Root>
|
|
94
|
+
* <Tooltip.Trigger aria-label="Bold">
|
|
95
|
+
* <BoldIcon aria-hidden="true" />
|
|
96
|
+
* </Tooltip.Trigger>
|
|
97
|
+
* <Tooltip.Portal>
|
|
98
|
+
* <Tooltip.Positioner sideOffset={8}>
|
|
99
|
+
* <Tooltip.Popup>
|
|
100
|
+
* <Tooltip.Arrow />
|
|
101
|
+
* Bold
|
|
102
|
+
* </Tooltip.Popup>
|
|
103
|
+
* </Tooltip.Positioner>
|
|
104
|
+
* </Tooltip.Portal>
|
|
105
|
+
* </Tooltip.Root>
|
|
106
|
+
* </Tooltip.Provider>
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* Tooltips appear on hover/focus and are visual-only: the trigger must carry
|
|
110
|
+
* an `aria-label` matching the tooltip content. They are disabled on touch
|
|
111
|
+
* devices. Use `Popover` for essential or interactive content.
|
|
112
|
+
*
|
|
113
|
+
* `Tooltip.createHandle()` links a `Root` with triggers rendered outside of it
|
|
114
|
+
* (detached triggers), including multiple triggers sharing one popup:
|
|
115
|
+
*
|
|
116
|
+
* ```tsx
|
|
117
|
+
* const tip = Tooltip.createHandle();
|
|
118
|
+
* <Tooltip.Trigger handle={tip} aria-label="Delete">…</Tooltip.Trigger>
|
|
119
|
+
* <Tooltip.Root handle={tip}>…</Tooltip.Root>
|
|
120
|
+
* ```
|
|
121
|
+
*
|
|
122
|
+
* All parts are thin styled wrappers over Base UI's `Tooltip`, so every Base UI
|
|
123
|
+
* prop, `render` override, and ref behaves the same. Part prop types are
|
|
124
|
+
* exported separately (`TooltipProps`, `TooltipTriggerProps`, ...).
|
|
125
|
+
*/
|
|
126
|
+
const Tooltip$1 = {
|
|
127
|
+
Provider: TooltipProvider,
|
|
128
|
+
Root: TooltipRoot,
|
|
129
|
+
Trigger: TooltipTrigger,
|
|
130
|
+
Portal: TooltipPortal,
|
|
131
|
+
Positioner: TooltipPositioner,
|
|
132
|
+
Popup: TooltipPopup,
|
|
133
|
+
Arrow: TooltipArrow,
|
|
134
|
+
Viewport: TooltipViewport,
|
|
135
|
+
createHandle: Tooltip.createHandle
|
|
136
|
+
};
|
|
137
|
+
//#endregion
|
|
138
|
+
export { Tooltip$1 as t };
|