@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.
Files changed (118) hide show
  1. package/README.md +35 -0
  2. package/dist/alert-dialog/index.d.ts +2 -0
  3. package/dist/alert-dialog/index.js +2 -0
  4. package/dist/alert-dialog-1hxVC_5N.js +71 -0
  5. package/dist/badge/index.d.ts +2 -0
  6. package/dist/badge/index.js +2 -0
  7. package/dist/badge-C3p1L0E7.css +53 -0
  8. package/dist/badge-C3p1L0E7.js +32 -0
  9. package/dist/button/index.d.ts +2 -0
  10. package/dist/button/index.js +2 -0
  11. package/dist/button-B48UNbaC.css +152 -0
  12. package/dist/button-B48UNbaC.js +46 -0
  13. package/dist/button-Dvd4n2U4.d.ts +56 -0
  14. package/dist/checkbox/index.d.ts +2 -0
  15. package/dist/checkbox/index.js +2 -0
  16. package/dist/checkbox-wh2BoiSj.css +76 -0
  17. package/dist/checkbox-wh2BoiSj.js +112 -0
  18. package/dist/cluster-BJ4m5uGN.css +9 -0
  19. package/dist/cluster-BJ4m5uGN.js +21 -0
  20. package/dist/combobox/index.d.ts +2 -0
  21. package/dist/combobox/index.js +2 -0
  22. package/dist/combobox-DWH7uSsx.css +389 -0
  23. package/dist/combobox-DWH7uSsx.js +327 -0
  24. package/dist/command-palette/index.d.ts +2 -0
  25. package/dist/command-palette/index.js +2 -0
  26. package/dist/command-palette-DF4XJ8qz.css +164 -0
  27. package/dist/command-palette-DF4XJ8qz.js +191 -0
  28. package/dist/dialog/index.d.ts +6 -0
  29. package/dist/dialog/index.js +2 -0
  30. package/dist/dialog-C4yqxII_.js +73 -0
  31. package/dist/dialog-footer-Br9KZP4v.js +29 -0
  32. package/dist/dialog-footer-bNVIVPbu.d.ts +56 -0
  33. package/dist/dialog-portal-B21WFYkQ.css +131 -0
  34. package/dist/dialog-portal-B21WFYkQ.js +26 -0
  35. package/dist/dialog-portal-BF89FBeX.d.ts +15 -0
  36. package/dist/dialog-title-DRYRIxCp.js +35 -0
  37. package/dist/dialog-title-jyf86Q8C.d.ts +36 -0
  38. package/dist/dialog-viewport-CaMWJrCJ.d.ts +42 -0
  39. package/dist/dialog-viewport-vpbsq7Ib.js +21 -0
  40. package/dist/drawer/index.d.ts +2 -0
  41. package/dist/drawer/index.js +2 -0
  42. package/dist/drawer-DQmz_uCP.css +214 -0
  43. package/dist/drawer-DQmz_uCP.js +180 -0
  44. package/dist/icon/index.d.ts +2 -0
  45. package/dist/icon/index.js +2 -0
  46. package/dist/icon-DBOdxNvH.css +6 -0
  47. package/dist/icon-DBOdxNvH.js +20 -0
  48. package/dist/index-A2QmU5r9.d.ts +37 -0
  49. package/dist/index-B0uNLS7z.d.ts +301 -0
  50. package/dist/index-B63PSP58.d.ts +94 -0
  51. package/dist/index-BBOkTl3h.d.ts +261 -0
  52. package/dist/index-BLFVnve3.d.ts +53 -0
  53. package/dist/index-BXPUT5u-.d.ts +72 -0
  54. package/dist/index-BngvATZx.d.ts +35 -0
  55. package/dist/index-Br2NrBW_.d.ts +444 -0
  56. package/dist/index-CUy-9csi.d.ts +135 -0
  57. package/dist/index-CbMW32E9.d.ts +82 -0
  58. package/dist/index-CyTcR6iv.d.ts +433 -0
  59. package/dist/index-CznsZ_1M.d.ts +85 -0
  60. package/dist/index-D-6gOciw.d.ts +350 -0
  61. package/dist/index-DdqDyczP.d.ts +209 -0
  62. package/dist/index-GOGpFujX.d.ts +144 -0
  63. package/dist/index-W3ozKcis.d.ts +245 -0
  64. package/dist/index-kpw3_4q_.d.ts +50 -0
  65. package/dist/index-rH7TJeJt.d.ts +334 -0
  66. package/dist/index-rQ7sRkqg.d.ts +122 -0
  67. package/dist/index.css +93 -0
  68. package/dist/index.d.ts +26 -0
  69. package/dist/index.js +26 -0
  70. package/dist/input/index.d.ts +2 -0
  71. package/dist/input/index.js +2 -0
  72. package/dist/input-CQ_ean8e.css +129 -0
  73. package/dist/input-CQ_ean8e.js +65 -0
  74. package/dist/layout/index.d.ts +2 -0
  75. package/dist/layout/index.js +4 -0
  76. package/dist/layout-qoyutnKU.css +181 -0
  77. package/dist/layout-qoyutnKU.js +169 -0
  78. package/dist/menu/index.d.ts +2 -0
  79. package/dist/menu/index.js +2 -0
  80. package/dist/menu-DRdGMI_-.css +236 -0
  81. package/dist/menu-DRdGMI_-.js +243 -0
  82. package/dist/merge-class-name-C4KJJGuK.js +15 -0
  83. package/dist/popover/index.d.ts +2 -0
  84. package/dist/popover/index.js +2 -0
  85. package/dist/popover-CenynT0Z.css +139 -0
  86. package/dist/popover-CenynT0Z.js +174 -0
  87. package/dist/radio/index.d.ts +2 -0
  88. package/dist/radio/index.js +2 -0
  89. package/dist/radio-BJrvdkga.css +80 -0
  90. package/dist/radio-BJrvdkga.js +75 -0
  91. package/dist/scroll-area/index.d.ts +2 -0
  92. package/dist/scroll-area/index.js +2 -0
  93. package/dist/scroll-area-DkORxJE9.css +175 -0
  94. package/dist/scroll-area-DkORxJE9.js +114 -0
  95. package/dist/select/index.d.ts +2 -0
  96. package/dist/select/index.js +2 -0
  97. package/dist/select-BaqBHUac.css +273 -0
  98. package/dist/select-BaqBHUac.js +254 -0
  99. package/dist/skeleton/index.d.ts +2 -0
  100. package/dist/skeleton/index.js +2 -0
  101. package/dist/skeleton-W6fwO5pf.css +88 -0
  102. package/dist/skeleton-W6fwO5pf.js +97 -0
  103. package/dist/spinner/index.d.ts +2 -0
  104. package/dist/spinner/index.js +2 -0
  105. package/dist/spinner-DB6ap8Si.css +43 -0
  106. package/dist/spinner-DB6ap8Si.js +27 -0
  107. package/dist/stack-BzFVrsmT.css +12 -0
  108. package/dist/stack-BzFVrsmT.js +52 -0
  109. package/dist/style-vars-ZSrCUzKx.js +13 -0
  110. package/dist/switch/index.d.ts +2 -0
  111. package/dist/switch/index.js +2 -0
  112. package/dist/switch-DizP31iF.css +76 -0
  113. package/dist/switch-DizP31iF.js +58 -0
  114. package/dist/tooltip/index.d.ts +2 -0
  115. package/dist/tooltip/index.js +2 -0
  116. package/dist/tooltip-CQk2WjUS.css +92 -0
  117. package/dist/tooltip-CQk2WjUS.js +138 -0
  118. 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,2 @@
1
+ import { n as SpinnerProps, t as Spinner } from "../index-BngvATZx.js";
2
+ export { Spinner, type SpinnerProps };
@@ -0,0 +1,2 @@
1
+ import { t as Spinner } from "../spinner-DB6ap8Si.js";
2
+ export { Spinner };
@@ -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,12 @@
1
+ @layer skeletal {
2
+ .-\34 ZNHG_stack {
3
+ justify-content: flex-start;
4
+ gap: var(--_stack-space, 1.5rem);
5
+ flex-direction: column;
6
+ display: flex;
7
+ }
8
+
9
+ .-\34 ZNHG_stack--fill {
10
+ block-size: 100%;
11
+ }
12
+ }
@@ -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,2 @@
1
+ import { n as SwitchThumbProps, r as SwitchProps, t as Switch } from "../index-B63PSP58.js";
2
+ export { Switch, type SwitchProps, type SwitchThumbProps };
@@ -0,0 +1,2 @@
1
+ import { t as Switch } from "../switch-DizP31iF.js";
2
+ export { Switch };
@@ -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,2 @@
1
+ import { t as Tooltip } from "../tooltip-CQk2WjUS.js";
2
+ export { Tooltip };
@@ -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 };