impact-nova 1.7.5 → 1.7.7

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 (45) hide show
  1. package/dist/components/ui/ag-grid-react/headers/components/truncated-text.d.ts +15 -0
  2. package/dist/components/ui/ag-grid-react/headers/components/truncated-text.js +27 -0
  3. package/dist/components/ui/ag-grid-react/headers/custom-header-group.js +22 -15
  4. package/dist/components/ui/ag-grid-react/headers/custom-header.js +47 -43
  5. package/dist/components/ui/breadcrumb.js +1 -1
  6. package/dist/components/ui/button-group.d.ts +3 -0
  7. package/dist/components/ui/button-group.js +129 -78
  8. package/dist/components/ui/checkbox.d.ts +3 -0
  9. package/dist/components/ui/checkbox.js +64 -53
  10. package/dist/components/ui/command-palette/index.d.ts +3 -0
  11. package/dist/components/ui/command-palette/index.js +18 -13
  12. package/dist/components/ui/command-palette/shortcut-overlay-context.d.ts +23 -0
  13. package/dist/components/ui/command-palette/shortcut-overlay-context.js +28 -0
  14. package/dist/components/ui/command-palette/shortcut-overlay.d.ts +19 -0
  15. package/dist/components/ui/command-palette/shortcut-overlay.js +151 -0
  16. package/dist/components/ui/date-picker/date-range-picker.js +239 -196
  17. package/dist/components/ui/date-picker/month-range-picker.js +226 -183
  18. package/dist/components/ui/date-picker/week-range-picker.js +265 -222
  19. package/dist/components/ui/dialog.js +6 -6
  20. package/dist/components/ui/filter-panel/filter-panel.js +16 -8
  21. package/dist/components/ui/filter-strip/filter-strip.d.ts +1 -1
  22. package/dist/components/ui/filter-strip/filter-strip.js +27 -26
  23. package/dist/components/ui/input.d.ts +3 -0
  24. package/dist/components/ui/input.js +107 -43
  25. package/dist/components/ui/notification-panel/notification-panel.d.ts +4 -4
  26. package/dist/components/ui/notification-panel/notification-panel.js +78 -16
  27. package/dist/components/ui/radio-group.d.ts +3 -0
  28. package/dist/components/ui/radio-group.js +101 -52
  29. package/dist/components/ui/select/select.js +579 -554
  30. package/dist/components/ui/textarea.d.ts +3 -0
  31. package/dist/components/ui/textarea.js +104 -58
  32. package/dist/components/ui/types/filter-panel.types.d.ts +2 -0
  33. package/dist/components/ui/types/filter-strip.types.d.ts +5 -0
  34. package/dist/components/ui/types/helper-text.types.d.ts +5 -0
  35. package/dist/components/ui/types/select.types.d.ts +6 -0
  36. package/dist/icons/assets/createNewDocument.svg.js +2 -2
  37. package/dist/icons/assets/drawBrush.svg.js +5 -0
  38. package/dist/icons/assets/info-badge.svg.js +5 -0
  39. package/dist/icons/assets/priority-alert.svg.js +5 -0
  40. package/dist/icons/assets/webp/sales.webp.js +4 -0
  41. package/dist/icons/index.d.ts +4 -0
  42. package/dist/icons/index.js +253 -245
  43. package/dist/impact-nova.css +1 -1
  44. package/dist/index.js +194 -189
  45. package/package.json +1 -1
@@ -1,73 +1,84 @@
1
- import { jsxs as r, jsx as a } from "react/jsx-runtime";
2
- import * as n from "react";
3
- import * as f from "@radix-ui/react-checkbox";
4
- import { Check as y, Minus as w } from "lucide-react";
5
- import { cn as s } from "../../lib/utils.js";
6
- const I = n.forwardRef(({ className: g, label: c, helperText: o, isError: m, disabled: d, checked: e, defaultChecked: b, onCheckedChange: k, onKeyDown: v, ...u }, p) => {
7
- const N = n.useId(), h = u.id || N, [i, l] = n.useState(
8
- e !== void 0 ? e : b || !1
1
+ import { jsxs as m, jsx as d } from "react/jsx-runtime";
2
+ import * as u from "react";
3
+ import * as l from "@radix-ui/react-checkbox";
4
+ import { Check as y, Minus as I } from "lucide-react";
5
+ import { cn as i } from "../../lib/utils.js";
6
+ const R = u.forwardRef(({ className: v, label: n, helperText: e, helperTextPosition: s = "absolute", isError: c, disabled: r, checked: t, defaultChecked: b, onCheckedChange: k, onKeyDown: p, ...f }, N) => {
7
+ const w = u.useId(), g = f.id || w, [o, x] = u.useState(
8
+ t !== void 0 ? t : b || !1
9
9
  );
10
- n.useEffect(() => {
11
- e !== void 0 && l(e);
12
- }, [e]);
13
- const x = (t) => {
14
- e === void 0 && l(t), k?.(t);
10
+ u.useEffect(() => {
11
+ t !== void 0 && x(t);
12
+ }, [t]);
13
+ const h = (a) => {
14
+ t === void 0 && x(a), k?.(a);
15
15
  };
16
- return /* @__PURE__ */ r("div", { className: "flex items-center", "data-component": "checkbox", "data-state": i === "indeterminate" ? "indeterminate" : i ? "checked" : "unchecked", "data-disabled": d || void 0, children: [
17
- /* @__PURE__ */ a(
18
- f.Root,
16
+ return /* @__PURE__ */ m("div", { className: "flex items-center", "data-component": "checkbox", "data-state": o === "indeterminate" ? "indeterminate" : o ? "checked" : "unchecked", "data-disabled": r || void 0, children: [
17
+ /* @__PURE__ */ d(
18
+ l.Root,
19
19
  {
20
- ref: p,
21
- id: h,
22
- className: s(
20
+ ref: N,
21
+ id: g,
22
+ className: i(
23
23
  "peer h-4 w-4 shrink-0 rounded-[4px] border border-stroke-field bg-canvas-elevated ring-offset-canvas focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-brand data-[state=checked]:bg-accent data-[state=checked]:text-brand data-[state=indeterminate]:border-brand data-[state=indeterminate]:bg-accent data-[state=indeterminate]:text-brand mr-[7px]",
24
- m && "border-destructive focus-visible:ring-destructive",
25
- d && "border-stroke text-disabled-foreground data-[state=checked]:bg-disabled-surface data-[state=checked]:text-disabled-foreground",
26
- g
24
+ c && "border-destructive focus-visible:ring-destructive",
25
+ r && "border-stroke text-disabled-foreground data-[state=checked]:bg-disabled-surface data-[state=checked]:text-disabled-foreground",
26
+ v
27
27
  ),
28
- checked: e,
28
+ checked: t,
29
29
  defaultChecked: b,
30
- onCheckedChange: x,
31
- disabled: d,
32
- onKeyDown: (t) => {
33
- t.key === "Enter" && (t.preventDefault(), x(i === "indeterminate" ? !0 : !i)), v?.(t);
30
+ onCheckedChange: h,
31
+ disabled: r,
32
+ onKeyDown: (a) => {
33
+ a.key === "Enter" && (a.preventDefault(), h(o === "indeterminate" ? !0 : !o)), p?.(a);
34
34
  },
35
- ...u,
36
- children: /* @__PURE__ */ r(
37
- f.Indicator,
35
+ ...f,
36
+ children: /* @__PURE__ */ m(
37
+ l.Indicator,
38
38
  {
39
39
  "data-checkbox": "indicator",
40
- className: s("flex items-center justify-center text-current group"),
40
+ className: i("flex items-center justify-center text-current group"),
41
41
  children: [
42
- /* @__PURE__ */ a(y, { className: "h-3 w-3 hidden group-data-[state=checked]:block", strokeWidth: 3 }),
43
- /* @__PURE__ */ a(w, { className: "h-3 w-3 hidden group-data-[state=indeterminate]:block", strokeWidth: 3 })
42
+ /* @__PURE__ */ d(y, { className: "h-3 w-3 hidden group-data-[state=checked]:block", strokeWidth: 3 }),
43
+ /* @__PURE__ */ d(I, { className: "h-3 w-3 hidden group-data-[state=indeterminate]:block", strokeWidth: 3 })
44
44
  ]
45
45
  }
46
46
  )
47
47
  }
48
48
  ),
49
- (c || o) && /* @__PURE__ */ r("div", { className: "grid gap-[6px] leading-none", children: [
50
- c && /* @__PURE__ */ r(
51
- "label",
52
- {
53
- htmlFor: h,
54
- className: s(
55
- "text-sm font-medium leading-[20px] text-secondary-foreground peer-data-[state=checked]:text-content peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
56
- m && "text-destructive",
57
- d && "text-disabled-foreground"
49
+ (n || e) && /* @__PURE__ */ m(
50
+ "div",
51
+ {
52
+ className: i(
53
+ "grid gap-[6px] leading-none",
54
+ e && s === "absolute" && "relative",
55
+ !n && e && s === "absolute" && "min-h-5"
56
+ ),
57
+ children: [
58
+ n && /* @__PURE__ */ m(
59
+ "label",
60
+ {
61
+ htmlFor: g,
62
+ className: i(
63
+ "text-sm font-medium leading-[20px] text-secondary-foreground peer-data-[state=checked]:text-content peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
64
+ c && "text-destructive",
65
+ r && "text-disabled-foreground"
66
+ ),
67
+ children: [
68
+ n,
69
+ " ",
70
+ f.required && /* @__PURE__ */ d("span", { className: "text-destructive", children: "*" })
71
+ ]
72
+ }
58
73
  ),
59
- children: [
60
- c,
61
- " ",
62
- u.required && /* @__PURE__ */ a("span", { className: "text-destructive", children: "*" })
63
- ]
64
- }
65
- ),
66
- o && /* @__PURE__ */ a("p", { className: s("text-sm text-content-muted", m && "text-destructive"), children: o })
67
- ] })
74
+ e && s === "absolute" && /* @__PURE__ */ d("p", { className: i("absolute left-0 top-full z-10 mt-1 min-w-0 max-w-full text-[12px] font-medium leading-[18px] text-navigation-muted", c && "text-destructive"), children: e }),
75
+ e && s === "flow" && /* @__PURE__ */ d("p", { className: i("text-[12px] font-medium leading-[18px] text-navigation-muted", c && "text-destructive"), children: e })
76
+ ]
77
+ }
78
+ )
68
79
  ] });
69
80
  });
70
- I.displayName = f.Root.displayName;
81
+ R.displayName = l.Root.displayName;
71
82
  export {
72
- I as Checkbox
83
+ R as Checkbox
73
84
  };
@@ -21,3 +21,6 @@ export { Kbd } from './kbd';
21
21
  export type { KbdProps } from './kbd';
22
22
  export { ShortcutSettings } from './shortcut-settings';
23
23
  export type { ShortcutSettingsProps } from './shortcut-settings';
24
+ export { ShortcutOverlayProvider, useShortcutOverlay } from './shortcut-overlay-context';
25
+ export type { ShortcutOverlayContextValue, ShortcutOverlayProviderProps } from './shortcut-overlay-context';
26
+ export { ShortcutOverlay } from './shortcut-overlay';
@@ -1,6 +1,6 @@
1
- import { BROWSER_SHORTCUTS as o, COMMAND_SOURCE_LABELS as r, deserialiseOverrides as m, fuzzyFilter as a, fuzzyScore as i, getBrowserShortcutInfo as n, getKeySymbol as d, isMac as s, isReservedShortcut as S, keybindingFromEvent as l, keybindingToString as p, keybindingToSymbols as u, keybindingsEqual as c, matchesKeybinding as y, parseKeybinding as C, scopePriority as P, serialiseOverrides as f } from "./utils.js";
2
- import { LocalStorageAdapter as b, ShortcutRegistry as h } from "./shortcut-registry.js";
3
- import { CommandPaletteProvider as v, useCommandPalette as E } from "./command-palette-context.js";
1
+ import { BROWSER_SHORTCUTS as r, COMMAND_SOURCE_LABELS as o, deserialiseOverrides as m, fuzzyFilter as a, fuzzyScore as i, getBrowserShortcutInfo as n, getKeySymbol as d, isMac as s, isReservedShortcut as S, keybindingFromEvent as l, keybindingToString as u, keybindingToSymbols as p, keybindingsEqual as c, matchesKeybinding as y, parseKeybinding as f, scopePriority as P, serialiseOverrides as C } from "./utils.js";
2
+ import { LocalStorageAdapter as g, ShortcutRegistry as x } from "./shortcut-registry.js";
3
+ import { CommandPaletteProvider as v, useCommandPalette as O } from "./command-palette-context.js";
4
4
  import { useShortcut as R } from "./use-shortcut.js";
5
5
  import { useGlobalShortcut as z } from "./use-global-shortcut.js";
6
6
  import { useBrowserShortcuts as K } from "./use-browser-shortcuts.js";
@@ -8,9 +8,11 @@ import { ShortcutScopeProvider as T } from "./shortcut-scope-provider.js";
8
8
  import { CommandPalette as F, CommandPaletteEmpty as I, CommandPaletteFooter as M, CommandPaletteGroup as _, CommandPaletteInput as w, CommandPaletteItem as G, CommandPaletteList as U, CommandPaletteSeparator as q, CommandPaletteShortcut as D } from "./command-palette.js";
9
9
  import { Kbd as N } from "./kbd.js";
10
10
  import { ShortcutSettings as j } from "./shortcut-settings.js";
11
+ import { ShortcutOverlayProvider as Q, useShortcutOverlay as V } from "./shortcut-overlay-context.js";
12
+ import { ShortcutOverlay as Y } from "./shortcut-overlay.js";
11
13
  export {
12
- o as BROWSER_SHORTCUTS,
13
- r as COMMAND_SOURCE_LABELS,
14
+ r as BROWSER_SHORTCUTS,
15
+ o as COMMAND_SOURCE_LABELS,
14
16
  F as CommandPalette,
15
17
  I as CommandPaletteEmpty,
16
18
  M as CommandPaletteFooter,
@@ -22,8 +24,10 @@ export {
22
24
  q as CommandPaletteSeparator,
23
25
  D as CommandPaletteShortcut,
24
26
  N as Kbd,
25
- b as LocalStorageAdapter,
26
- h as ShortcutRegistry,
27
+ g as LocalStorageAdapter,
28
+ Y as ShortcutOverlay,
29
+ Q as ShortcutOverlayProvider,
30
+ x as ShortcutRegistry,
27
31
  T as ShortcutScopeProvider,
28
32
  j as ShortcutSettings,
29
33
  m as deserialiseOverrides,
@@ -34,15 +38,16 @@ export {
34
38
  s as isMac,
35
39
  S as isReservedShortcut,
36
40
  l as keybindingFromEvent,
37
- p as keybindingToString,
38
- u as keybindingToSymbols,
41
+ u as keybindingToString,
42
+ p as keybindingToSymbols,
39
43
  c as keybindingsEqual,
40
44
  y as matchesKeybinding,
41
- C as parseKeybinding,
45
+ f as parseKeybinding,
42
46
  P as scopePriority,
43
- f as serialiseOverrides,
47
+ C as serialiseOverrides,
44
48
  K as useBrowserShortcuts,
45
- E as useCommandPalette,
49
+ O as useCommandPalette,
46
50
  z as useGlobalShortcut,
47
- R as useShortcut
51
+ R as useShortcut,
52
+ V as useShortcutOverlay
48
53
  };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ShortcutOverlayProvider — React context for the Excel-like "Key Tips" overlay.
3
+ *
4
+ * Manages visibility state for the shortcut overlay, which displays
5
+ * keyboard shortcut badges next to their associated UI elements.
6
+ */
7
+ import * as React from 'react';
8
+ export interface ShortcutOverlayContextValue {
9
+ /** Whether the shortcut overlay is currently visible */
10
+ isOverlayVisible: boolean;
11
+ /** Set overlay visibility explicitly */
12
+ setOverlayVisible: (visible: boolean) => void;
13
+ /** Toggle overlay visibility */
14
+ toggleOverlay: () => void;
15
+ }
16
+ export interface ShortcutOverlayProviderProps {
17
+ children: React.ReactNode;
18
+ }
19
+ export declare function ShortcutOverlayProvider({ children }: ShortcutOverlayProviderProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare namespace ShortcutOverlayProvider {
21
+ var displayName: string;
22
+ }
23
+ export declare function useShortcutOverlay(): ShortcutOverlayContextValue;
@@ -0,0 +1,28 @@
1
+ import { jsx as c } from "react/jsx-runtime";
2
+ import * as t from "react";
3
+ const u = t.createContext(null);
4
+ function n({ children: e }) {
5
+ const [o, a] = t.useState(!1), l = t.useCallback((r) => {
6
+ a(r);
7
+ }, []), s = t.useCallback(() => {
8
+ a((r) => !r);
9
+ }, []), i = t.useMemo(() => ({
10
+ isOverlayVisible: o,
11
+ setOverlayVisible: l,
12
+ toggleOverlay: s
13
+ }), [o, l, s]);
14
+ return /* @__PURE__ */ c(u.Provider, { value: i, children: e });
15
+ }
16
+ n.displayName = "ShortcutOverlayProvider";
17
+ function y() {
18
+ const e = t.useContext(u);
19
+ if (!e)
20
+ throw new Error(
21
+ "useShortcutOverlay must be used within a <ShortcutOverlayProvider>. Wrap your application root with <ShortcutOverlayProvider>."
22
+ );
23
+ return e;
24
+ }
25
+ export {
26
+ n as ShortcutOverlayProvider,
27
+ y as useShortcutOverlay
28
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ShortcutOverlay — Excel-like "Key Tips" overlay.
3
+ *
4
+ * When visible, scans the DOM for elements with `[data-shortcut-id]`,
5
+ * resolves their effective keybindings from the command palette registry,
6
+ * and renders floating Kbd badges positioned next to each element.
7
+ *
8
+ * Performance notes:
9
+ * - No `elementFromPoint` / forced reflows — uses containment checks only.
10
+ * - MutationObserver (childList on body) detects panel open/close cheaply.
11
+ * - All rescans are debounced via a single `requestAnimationFrame`.
12
+ *
13
+ * Dismiss: click backdrop, press Escape, or re-trigger the shortcut.
14
+ */
15
+ import * as React from 'react';
16
+ export declare function ShortcutOverlay(): React.ReactPortal;
17
+ export declare namespace ShortcutOverlay {
18
+ var displayName: string;
19
+ }
@@ -0,0 +1,151 @@
1
+ import { jsxs as O, Fragment as L, jsx as p } from "react/jsx-runtime";
2
+ import * as d from "react";
3
+ import { createPortal as M } from "react-dom";
4
+ import { useShortcutOverlay as S } from "./shortcut-overlay-context.js";
5
+ import { useCommandPalette as C } from "./command-palette-context.js";
6
+ import { Kbd as X } from "./kbd.js";
7
+ const u = 26, h = 80, s = 4;
8
+ function z() {
9
+ const t = document.querySelectorAll(
10
+ '[role="dialog"][data-state="open"]'
11
+ );
12
+ return t.length > 0 ? t[t.length - 1] : null;
13
+ }
14
+ function F(t) {
15
+ if (t.length <= 1) return t;
16
+ const r = [...t].sort((n, e) => n.top - e.top), l = (n, e) => Math.abs(n.left - e.left) < h && Math.abs(n.top - e.top) < u + s;
17
+ for (let n = 1; n < r.length; n++) {
18
+ const e = r[n], c = () => r.slice(Math.max(0, n - 5), n).some((y) => l(y, e));
19
+ c() && (e.placement === "above" ? (e.placement = "below", e.top = e.top + u + 32 + s) : (e.placement = "above", e.top = e.top - u - 32 - s), c() && (e.left = e.left + h + s));
20
+ }
21
+ return r;
22
+ }
23
+ function R(t) {
24
+ const r = window.innerWidth, l = window.innerHeight;
25
+ return {
26
+ ...t,
27
+ top: Math.max(s, Math.min(t.top, l - u - s)),
28
+ left: Math.max(h / 2, Math.min(t.left, r - h / 2))
29
+ };
30
+ }
31
+ function T() {
32
+ const { isOverlayVisible: t, setOverlayVisible: r } = S(), { getEffectiveKeybinding: l, version: n } = C(), [e, c] = d.useState([]), [y, x] = d.useState(0);
33
+ return d.useLayoutEffect(() => {
34
+ if (!t) {
35
+ c([]);
36
+ return;
37
+ }
38
+ const f = (z() ?? document).querySelectorAll("[data-shortcut-id]"), m = [];
39
+ f.forEach((v) => {
40
+ const w = v.getAttribute("data-shortcut-id");
41
+ if (!w) return;
42
+ const b = window.getComputedStyle(v);
43
+ if (b.display === "none" || b.visibility === "hidden" || b.opacity === "0")
44
+ return;
45
+ const a = v.getBoundingClientRect();
46
+ if (a.width === 0 || a.height === 0 || a.bottom < 0 || a.top > window.innerHeight || a.right < 0 || a.left > window.innerWidth)
47
+ return;
48
+ const E = l(w);
49
+ if (!E) return;
50
+ const A = a.left + a.width / 2;
51
+ let k = "above", g = a.top - u - s;
52
+ g < s && (k = "below", g = a.bottom + s), m.push({
53
+ id: w,
54
+ keybinding: E,
55
+ top: g,
56
+ left: A,
57
+ placement: k
58
+ });
59
+ }), c(F(m).map(R));
60
+ }, [t, l, n, y]), d.useEffect(() => {
61
+ if (!t) return;
62
+ const o = (i) => {
63
+ i.key === "Escape" && (i.preventDefault(), i.stopPropagation(), r(!1));
64
+ };
65
+ return window.addEventListener("keydown", o, !0), () => window.removeEventListener("keydown", o, !0);
66
+ }, [t, r]), d.useEffect(() => {
67
+ if (!t) return;
68
+ let o;
69
+ const i = () => {
70
+ cancelAnimationFrame(o), o = requestAnimationFrame(() => x((m) => m + 1));
71
+ };
72
+ window.addEventListener("scroll", i, !0), window.addEventListener("resize", i);
73
+ const f = new MutationObserver(i);
74
+ return f.observe(document.body, {
75
+ childList: !0,
76
+ subtree: !0,
77
+ attributes: !0,
78
+ attributeFilter: ["data-state"]
79
+ }), () => {
80
+ cancelAnimationFrame(o), window.removeEventListener("scroll", i, !0), window.removeEventListener("resize", i), f.disconnect();
81
+ };
82
+ }, [t]), !t || e.length === 0 ? null : M(
83
+ /* @__PURE__ */ O(L, { children: [
84
+ /* @__PURE__ */ p(
85
+ "div",
86
+ {
87
+ "data-shortcut-overlay-backdrop": "",
88
+ onClick: () => r(!1),
89
+ style: {
90
+ position: "fixed",
91
+ inset: 0,
92
+ backgroundColor: "rgba(0, 0, 0, 0.06)",
93
+ zIndex: 99998,
94
+ cursor: "default"
95
+ }
96
+ }
97
+ ),
98
+ e.map((o) => /* @__PURE__ */ p(
99
+ "div",
100
+ {
101
+ "data-shortcut-overlay-badge": "",
102
+ style: {
103
+ position: "fixed",
104
+ top: o.top,
105
+ left: o.left,
106
+ transform: "translateX(-50%)",
107
+ zIndex: 99999,
108
+ pointerEvents: "none",
109
+ animation: o.placement === "below" ? "shortcut-overlay-badge-in-below 0.15s ease-out" : "shortcut-overlay-badge-in 0.15s ease-out"
110
+ },
111
+ children: /* @__PURE__ */ p(
112
+ X,
113
+ {
114
+ keybinding: o.keybinding,
115
+ size: "sm",
116
+ variant: "dark"
117
+ }
118
+ )
119
+ },
120
+ o.id
121
+ )),
122
+ /* @__PURE__ */ p("style", { children: `
123
+ @keyframes shortcut-overlay-badge-in {
124
+ from {
125
+ opacity: 0;
126
+ transform: translateX(-50%) translateY(4px);
127
+ }
128
+ to {
129
+ opacity: 1;
130
+ transform: translateX(-50%) translateY(0);
131
+ }
132
+ }
133
+ @keyframes shortcut-overlay-badge-in-below {
134
+ from {
135
+ opacity: 0;
136
+ transform: translateX(-50%) translateY(-4px);
137
+ }
138
+ to {
139
+ opacity: 1;
140
+ transform: translateX(-50%) translateY(0);
141
+ }
142
+ }
143
+ ` })
144
+ ] }),
145
+ document.body
146
+ );
147
+ }
148
+ T.displayName = "ShortcutOverlay";
149
+ export {
150
+ T as ShortcutOverlay
151
+ };