impact-nova 2.2.8 → 2.2.9

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 (117) hide show
  1. package/dist/components/data/ag-grid-react/ag-grid-header-dom.js +6 -8
  2. package/dist/components/data/ag-grid-react/ag-grid-tooltip-overflow.d.ts +1 -1
  3. package/dist/components/data/ag-grid-react/ag-grid-tooltip-overflow.js +25 -13
  4. package/dist/components/data/ag-grid-react/headers/custom-header.js +1 -1
  5. package/dist/components/data/ag-grid-react/headers/custom-inner-header-group.js +7 -7
  6. package/dist/components/data/ag-grid-react/strip-column-min-width-constraints.d.ts +3 -0
  7. package/dist/components/data/data-table/data-table.d.ts +1 -1
  8. package/dist/components/data/data-table/data-table.js +41 -39
  9. package/dist/components/data/data-table/data-table.types.d.ts +1 -1
  10. package/dist/components/flows/filter-panel/filter-panel.js +101 -94
  11. package/dist/components/flows/guidance/adapters/ag-grid-adapter.d.ts +13 -0
  12. package/dist/components/flows/guidance/adapters/ag-grid-adapter.js +30 -0
  13. package/dist/components/flows/guidance/adapters/ag-grid.d.ts +2 -0
  14. package/dist/components/flows/guidance/adapters/ag-grid.js +6 -0
  15. package/dist/components/flows/guidance/adapters/dialog.d.ts +1 -0
  16. package/dist/components/flows/guidance/adapters/dialog.js +5 -0
  17. package/dist/components/flows/guidance/adapters/overlay-adapter.d.ts +5 -0
  18. package/dist/components/flows/guidance/adapters/overlay-adapter.js +21 -0
  19. package/dist/components/flows/guidance/engine.d.ts +1 -0
  20. package/dist/components/flows/guidance/engine.js +36 -0
  21. package/dist/components/flows/guidance/guidance-context.d.ts +29 -0
  22. package/dist/components/flows/guidance/guidance-context.js +35 -0
  23. package/dist/components/flows/guidance/guidance-error-boundary.d.ts +16 -0
  24. package/dist/components/flows/guidance/guidance-error-boundary.js +49 -0
  25. package/dist/components/flows/guidance/guidance-layer.d.ts +2 -0
  26. package/dist/components/flows/guidance/guidance-layer.js +71 -0
  27. package/dist/components/flows/guidance/guidance-provider.d.ts +3 -0
  28. package/dist/components/flows/guidance/guidance-provider.js +58 -0
  29. package/dist/components/flows/guidance/guidance-target.d.ts +7 -0
  30. package/dist/components/flows/guidance/guidance-target.js +27 -0
  31. package/dist/components/flows/guidance/guidance.types.d.ts +1 -0
  32. package/dist/components/flows/guidance/help-center/filter-help-center-guides.d.ts +7 -0
  33. package/dist/components/flows/guidance/help-center/filter-help-center-guides.js +11 -0
  34. package/dist/components/flows/guidance/help-center/guide-catalog.d.ts +3 -0
  35. package/dist/components/flows/guidance/help-center/guide-catalog.js +118 -0
  36. package/dist/components/flows/guidance/help-center/help-center-header.d.ts +3 -0
  37. package/dist/components/flows/guidance/help-center/help-center-header.js +43 -0
  38. package/dist/components/flows/guidance/help-center/help-center.constants.d.ts +5 -0
  39. package/dist/components/flows/guidance/help-center/help-center.constants.js +7 -0
  40. package/dist/components/flows/guidance/help-center/help-center.d.ts +10 -0
  41. package/dist/components/flows/guidance/help-center/help-center.js +95 -0
  42. package/dist/components/flows/guidance/help-center/help-center.story-helpers.d.ts +10 -0
  43. package/dist/components/flows/guidance/help-center/help-center.types.d.ts +39 -0
  44. package/dist/components/flows/guidance/help-center.d.ts +6 -0
  45. package/dist/components/flows/guidance/help-center.js +19 -0
  46. package/dist/components/flows/guidance/hooks/use-guidance.d.ts +19 -0
  47. package/dist/components/flows/guidance/hooks/use-guidance.js +50 -0
  48. package/dist/components/flows/guidance/hooks/use-help-center.d.ts +24 -0
  49. package/dist/components/flows/guidance/hooks/use-help-center.js +67 -0
  50. package/dist/components/flows/guidance/hooks/useGuidanceOverlayGeometry.d.ts +2 -0
  51. package/dist/components/flows/guidance/hooks/useGuidanceOverlayGeometry.js +30 -0
  52. package/dist/components/flows/guidance/index.d.ts +18 -0
  53. package/dist/components/flows/guidance/index.js +48 -0
  54. package/dist/components/flows/guidance/renderers/announcement-renderer.d.ts +3 -0
  55. package/dist/components/flows/guidance/renderers/announcement-renderer.js +40 -0
  56. package/dist/components/flows/guidance/renderers/coach-mark-renderer.d.ts +2 -0
  57. package/dist/components/flows/guidance/renderers/coach-mark-renderer.js +14 -0
  58. package/dist/components/flows/guidance/renderers/guidance-card-shared.d.ts +42 -0
  59. package/dist/components/flows/guidance/renderers/guidance-card-shared.js +213 -0
  60. package/dist/components/flows/guidance/renderers/guidance-renderer-shared.d.ts +48 -0
  61. package/dist/components/flows/guidance/renderers/guidance-renderer-shared.js +254 -0
  62. package/dist/components/flows/guidance/renderers/guidance-tour-overlay.d.ts +11 -0
  63. package/dist/components/flows/guidance/renderers/guidance-tour-overlay.js +217 -0
  64. package/dist/components/flows/guidance/renderers/renderer-registry.d.ts +6 -0
  65. package/dist/components/flows/guidance/renderers/renderer-registry.js +19 -0
  66. package/dist/components/flows/guidance/renderers/spotlight-renderer.d.ts +2 -0
  67. package/dist/components/flows/guidance/renderers/spotlight-renderer.js +14 -0
  68. package/dist/components/flows/guidance/renderers.d.ts +4 -0
  69. package/dist/components/flows/guidance/renderers.js +11 -0
  70. package/dist/components/flows/guidance/target.d.ts +3 -0
  71. package/dist/components/flows/guidance/target.js +6 -0
  72. package/dist/components/flows/guidance/triggers.d.ts +2 -0
  73. package/dist/components/flows/guidance/triggers.js +16 -0
  74. package/dist/components/flows/guidance/use-guidance-target.d.ts +5 -0
  75. package/dist/components/flows/guidance/use-guidance-target.js +16 -0
  76. package/dist/components/flows/guidance/utils/motion-settle.d.ts +2 -0
  77. package/dist/components/flows/guidance/utils/motion-settle.js +17 -0
  78. package/dist/i18n/defaultMessages.d.ts +13 -0
  79. package/dist/i18n/defaultMessages.js +23 -11
  80. package/dist/i18n/index.d.ts +1 -1
  81. package/dist/i18n/locales/de.js +12 -0
  82. package/dist/i18n/locales/es.js +12 -0
  83. package/dist/i18n/locales/hi.js +12 -0
  84. package/dist/i18n/locales/kn.js +12 -0
  85. package/dist/impact-nova-components.css +52 -10
  86. package/dist/impact-nova.css +1 -1
  87. package/dist/lib/guidance/analytics/analytics-adapter.d.ts +16 -0
  88. package/dist/lib/guidance/analytics/analytics-adapter.js +50 -0
  89. package/dist/lib/guidance/engine/guidance-engine.d.ts +74 -0
  90. package/dist/lib/guidance/engine/guidance-engine.js +384 -0
  91. package/dist/lib/guidance/engine/guide-registry.d.ts +21 -0
  92. package/dist/lib/guidance/engine/guide-registry.js +71 -0
  93. package/dist/lib/guidance/engine/manifest-validator.d.ts +4 -0
  94. package/dist/lib/guidance/engine/manifest-validator.js +102 -0
  95. package/dist/lib/guidance/engine/step-navigation.d.ts +5 -0
  96. package/dist/lib/guidance/engine/step-navigation.js +35 -0
  97. package/dist/lib/guidance/index.d.ts +12 -0
  98. package/dist/lib/guidance/storage/storage-adapter.d.ts +10 -0
  99. package/dist/lib/guidance/storage/storage-adapter.js +51 -0
  100. package/dist/lib/guidance/storage/storage-keys.d.ts +10 -0
  101. package/dist/lib/guidance/storage/storage-keys.js +23 -0
  102. package/dist/lib/guidance/targets/ref-registry.d.ts +12 -0
  103. package/dist/lib/guidance/targets/ref-registry.js +65 -0
  104. package/dist/lib/guidance/targets/target-resolver.d.ts +13 -0
  105. package/dist/lib/guidance/targets/target-resolver.js +85 -0
  106. package/dist/lib/guidance/triggers/built-in-triggers.d.ts +14 -0
  107. package/dist/lib/guidance/triggers/built-in-triggers.js +88 -0
  108. package/dist/lib/guidance/triggers/trigger-registry.d.ts +9 -0
  109. package/dist/lib/guidance/triggers/trigger-registry.js +44 -0
  110. package/dist/lib/guidance/types/guidance.types.d.ts +181 -0
  111. package/dist/lib/overflow/is-line-clamp-text-clipped.d.ts +2 -0
  112. package/dist/lib/overflow/is-line-clamp-text-clipped.js +33 -0
  113. package/dist/lib/overflow/is-text-overflowing.d.ts +1 -0
  114. package/dist/lib/overflow/is-text-overflowing.js +8 -3
  115. package/dist/llms/rules/installation.js +1 -1
  116. package/dist/llms/rules/requirements.js +1 -1
  117. package/package.json +51 -22
@@ -0,0 +1 @@
1
+ export { createDialogOpenedTriggerPlugin, getOverlayScopeRoot, } from './overlay-adapter';
@@ -0,0 +1,5 @@
1
+ import { createDialogOpenedTriggerPlugin as r, getOverlayScopeRoot as g } from "./overlay-adapter.js";
2
+ export {
3
+ r as createDialogOpenedTriggerPlugin,
4
+ g as getOverlayScopeRoot
5
+ };
@@ -0,0 +1,5 @@
1
+ import { GuidancePlugin } from '../../../../lib/guidance';
2
+ export declare function createDialogOpenedTriggerPlugin(): GuidancePlugin<{
3
+ dialogId?: string;
4
+ }>;
5
+ export declare function getOverlayScopeRoot(): HTMLElement | null;
@@ -0,0 +1,21 @@
1
+ function t() {
2
+ if (typeof document > "u")
3
+ return null;
4
+ const e = document.querySelectorAll(
5
+ '[role="dialog"][data-state="open"], [role="alertdialog"][data-state="open"], [data-component="sheet-content"][data-state="open"]'
6
+ );
7
+ return e.length ? e[e.length - 1] : null;
8
+ }
9
+ function n() {
10
+ return {
11
+ type: "trigger.dialog-opened",
12
+ evaluate: () => t() !== null
13
+ };
14
+ }
15
+ function o() {
16
+ return t();
17
+ }
18
+ export {
19
+ n as createDialogOpenedTriggerPlugin,
20
+ o as getOverlayScopeRoot
21
+ };
@@ -0,0 +1 @@
1
+ export * from '../../../lib/guidance';
@@ -0,0 +1,36 @@
1
+ import { GuidanceEngine as t } from "../../../lib/guidance/engine/guidance-engine.js";
2
+ import { GuideRegistry as i } from "../../../lib/guidance/engine/guide-registry.js";
3
+ import { sanitizeGuideManifest as d, validateGuideManifest as g } from "../../../lib/guidance/engine/manifest-validator.js";
4
+ import { getNextStepId as l, getStepById as p, resolveLocalizedStepContent as s } from "../../../lib/guidance/engine/step-navigation.js";
5
+ import { TriggerPluginRegistry as f } from "../../../lib/guidance/triggers/trigger-registry.js";
6
+ import { registerBuiltInTriggerPlugins as m } from "../../../lib/guidance/triggers/built-in-triggers.js";
7
+ import { LocalStorageGuidanceAdapter as x, defaultGuidanceStorageAdapter as G } from "../../../lib/guidance/storage/storage-adapter.js";
8
+ import { buildCampaignStorageKey as A, buildGuidanceStorageKey as R, buildSessionStatsKey as T } from "../../../lib/guidance/storage/storage-keys.js";
9
+ import { NoopGuidanceAnalyticsAdapter as v, SamplingGuidanceAnalyticsAdapter as I, defaultGuidanceAnalyticsAdapter as K } from "../../../lib/guidance/analytics/analytics-adapter.js";
10
+ import { GuidanceTargetRefRegistry as z, globalGuidanceTargetRefRegistry as B } from "../../../lib/guidance/targets/ref-registry.js";
11
+ import { TargetResolver as F, resolveTargetSynchronously as L, waitForTargetResolved as M, waitForTargetVisible as N } from "../../../lib/guidance/targets/target-resolver.js";
12
+ export {
13
+ t as GuidanceEngine,
14
+ z as GuidanceTargetRefRegistry,
15
+ i as GuideRegistry,
16
+ x as LocalStorageGuidanceAdapter,
17
+ v as NoopGuidanceAnalyticsAdapter,
18
+ I as SamplingGuidanceAnalyticsAdapter,
19
+ F as TargetResolver,
20
+ f as TriggerPluginRegistry,
21
+ A as buildCampaignStorageKey,
22
+ R as buildGuidanceStorageKey,
23
+ T as buildSessionStatsKey,
24
+ K as defaultGuidanceAnalyticsAdapter,
25
+ G as defaultGuidanceStorageAdapter,
26
+ l as getNextStepId,
27
+ p as getStepById,
28
+ B as globalGuidanceTargetRefRegistry,
29
+ m as registerBuiltInTriggerPlugins,
30
+ s as resolveLocalizedStepContent,
31
+ L as resolveTargetSynchronously,
32
+ d as sanitizeGuideManifest,
33
+ g as validateGuideManifest,
34
+ M as waitForTargetResolved,
35
+ N as waitForTargetVisible
36
+ };
@@ -0,0 +1,29 @@
1
+ import { GuidanceAnalyticsAdapter, GuidanceErrorReporter, GuidancePlugin, GuidanceStorageAdapter, GuideManifest, GuidanceEngine } from '../../../lib/guidance';
2
+ import * as React from 'react';
3
+ export interface GuidanceProviderProps {
4
+ children: React.ReactNode;
5
+ storage: GuidanceStorageAdapter;
6
+ analytics?: GuidanceAnalyticsAdapter;
7
+ plugins?: GuidancePlugin[];
8
+ locale?: string;
9
+ tenantId?: string;
10
+ appVersion?: string;
11
+ consentRequired?: boolean;
12
+ maxGuidesPerSession?: number;
13
+ cooldownBetweenGuides?: number;
14
+ debug?: boolean;
15
+ errorReporter?: GuidanceErrorReporter;
16
+ mfeBridge?: boolean;
17
+ }
18
+ export interface GuidanceContextValue {
19
+ engine: GuidanceEngine;
20
+ debug: boolean;
21
+ locale: string;
22
+ registerGuide: (manifest: GuideManifest, routeScope?: string) => void;
23
+ unregisterGuide: (guideId: string) => void;
24
+ unregisterRouteScope: (routeScope: string) => void;
25
+ }
26
+ export declare const GuidanceContext: React.Context<GuidanceContextValue | null>;
27
+ export declare function useGuidanceContext(): GuidanceContextValue;
28
+ export type GuidanceEngineProviderConfig = Omit<GuidanceProviderProps, 'children'>;
29
+ export declare function createGuidanceEngine(props: GuidanceEngineProviderConfig): GuidanceEngine;
@@ -0,0 +1,35 @@
1
+ import * as i from "react";
2
+ import { GuidanceEngine as o } from "../../../lib/guidance/engine/guidance-engine.js";
3
+ const a = i.createContext(
4
+ null
5
+ );
6
+ function c() {
7
+ const e = i.useContext(a);
8
+ if (!e)
9
+ throw new Error("useGuidanceContext must be used within GuidanceProvider");
10
+ return e;
11
+ }
12
+ function s(e) {
13
+ const r = {
14
+ tenantId: e.tenantId ?? "default",
15
+ locale: e.locale ?? "en",
16
+ appVersion: e.appVersion ?? "0.0.0",
17
+ maxGuidesPerSession: e.maxGuidesPerSession ?? 3,
18
+ cooldownBetweenGuides: e.cooldownBetweenGuides ?? 3e4,
19
+ maxConcurrentGuides: 1,
20
+ consentRequired: e.consentRequired ?? !1,
21
+ debug: e.debug ?? !1,
22
+ storage: e.storage,
23
+ analytics: e.analytics ?? { track: () => {
24
+ } },
25
+ errorReporter: e.errorReporter
26
+ }, t = new o(r);
27
+ for (const n of e.plugins ?? [])
28
+ n.evaluate && t.triggers.register(n), n.resolve && t.resolver.registerAdapter(n);
29
+ return t;
30
+ }
31
+ export {
32
+ a as GuidanceContext,
33
+ s as createGuidanceEngine,
34
+ c as useGuidanceContext
35
+ };
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ interface GuidanceErrorBoundaryProps {
3
+ children: React.ReactNode;
4
+ onError?: (error: Error) => void;
5
+ }
6
+ interface GuidanceErrorBoundaryState {
7
+ hasError: boolean;
8
+ }
9
+ export declare class GuidanceErrorBoundary extends React.Component<GuidanceErrorBoundaryProps, GuidanceErrorBoundaryState> {
10
+ constructor(props: GuidanceErrorBoundaryProps);
11
+ static getDerivedStateFromError(): GuidanceErrorBoundaryState;
12
+ componentDidCatch(error: Error): void;
13
+ render(): React.ReactNode;
14
+ }
15
+ export declare function GuidanceDebugPanel(): React.ReactElement | null;
16
+ export {};
@@ -0,0 +1,49 @@
1
+ import { jsxs as t, jsx as o } from "react/jsx-runtime";
2
+ import * as a from "react";
3
+ import { useGuidanceContext as d } from "./guidance-context.js";
4
+ class u extends a.Component {
5
+ constructor(e) {
6
+ super(e), this.state = { hasError: !1 };
7
+ }
8
+ static getDerivedStateFromError() {
9
+ return { hasError: !0 };
10
+ }
11
+ componentDidCatch(e) {
12
+ this.props.onError?.(e);
13
+ }
14
+ render() {
15
+ return this.state.hasError ? null : this.props.children;
16
+ }
17
+ }
18
+ function l() {
19
+ const { engine: r, debug: e } = d();
20
+ if (!e)
21
+ return null;
22
+ const s = r.registry.getAll(), n = r.state;
23
+ return /* @__PURE__ */ t(
24
+ "div",
25
+ {
26
+ "data-component": "guidance-debug-panel",
27
+ className: "fixed bottom-4 right-4 z-[9999] max-w-sm rounded-md border border-border-default bg-surface-elevated p-3 text-xs shadow-lg",
28
+ children: [
29
+ /* @__PURE__ */ o("div", { className: "font-semibold text-content-primary", children: "Guidance Debug" }),
30
+ /* @__PURE__ */ t("div", { className: "mt-1 text-content-secondary", children: [
31
+ "Status: ",
32
+ n.status
33
+ ] }),
34
+ /* @__PURE__ */ t("div", { className: "mt-1 text-content-secondary", children: [
35
+ "Registered guides: ",
36
+ s.length
37
+ ] }),
38
+ n.guideId ? /* @__PURE__ */ t("div", { className: "mt-1 text-content-secondary", children: [
39
+ "Active: ",
40
+ n.guideId
41
+ ] }) : null
42
+ ]
43
+ }
44
+ );
45
+ }
46
+ export {
47
+ l as GuidanceDebugPanel,
48
+ u as GuidanceErrorBoundary
49
+ };
@@ -0,0 +1,2 @@
1
+ import * as React from 'react';
2
+ export declare function GuidanceLayer(): React.ReactElement | null;
@@ -0,0 +1,71 @@
1
+ import { jsxs as i, jsx as t } from "react/jsx-runtime";
2
+ import * as s from "react";
3
+ import { useSyncExternalStore as d } from "react";
4
+ import { useGuidanceContext as m } from "./guidance-context.js";
5
+ import { SpotlightRenderer as p } from "./renderers/spotlight-renderer.js";
6
+ import { CoachMarkRenderer as f } from "./renderers/coach-mark-renderer.js";
7
+ import { AnnouncementRenderer as b } from "./renderers/announcement-renderer.js";
8
+ import { endTourScrollSnapshot as h } from "./renderers/guidance-renderer-shared.js";
9
+ import { Button as l } from "../../primitives/button/button.js";
10
+ function k(e, n) {
11
+ const r = {
12
+ instruction: e,
13
+ ...n
14
+ };
15
+ switch (e.renderer) {
16
+ case "spotlight":
17
+ return /* @__PURE__ */ t(p, { ...r });
18
+ case "coach-mark":
19
+ return /* @__PURE__ */ t(f, { ...r });
20
+ case "announcement":
21
+ return /* @__PURE__ */ t(b, { ...r });
22
+ default:
23
+ return null;
24
+ }
25
+ }
26
+ function G() {
27
+ const { engine: e } = m();
28
+ s.useEffect(() => e.on("guideEnd", () => {
29
+ h();
30
+ }), [e]);
31
+ const n = d(
32
+ (o) => e.subscribe(o),
33
+ () => e.state,
34
+ () => ({ status: "idle" })
35
+ ), r = d(
36
+ (o) => e.subscribe(o),
37
+ () => e.getRenderInstruction(),
38
+ () => null
39
+ ), a = s.useCallback(() => {
40
+ e.advanceStep();
41
+ }, [e]), u = s.useCallback(() => {
42
+ e.skipStep();
43
+ }, [e]), c = s.useCallback(() => {
44
+ e.dismiss("session");
45
+ }, [e]);
46
+ return n.status === "blocked" ? /* @__PURE__ */ i(
47
+ "div",
48
+ {
49
+ "data-component": "guidance-blocked",
50
+ className: "fixed bottom-4 left-1/2 z-50 -translate-x-1/2 rounded-md border border-border-default bg-surface-elevated px-4 py-3 shadow-lg",
51
+ role: "status",
52
+ children: [
53
+ /* @__PURE__ */ i("p", { className: "text-sm text-content-secondary", children: [
54
+ "Guide step is blocked: ",
55
+ n.reason
56
+ ] }),
57
+ /* @__PURE__ */ i("div", { className: "mt-2 flex gap-2", children: [
58
+ /* @__PURE__ */ t(l, { size: "sm", onClick: a, children: "Retry" }),
59
+ /* @__PURE__ */ t(l, { variant: "secondary", size: "sm", onClick: c, children: "Dismiss" })
60
+ ] })
61
+ ]
62
+ }
63
+ ) : r ? k(r, {
64
+ onNext: a,
65
+ onSkip: u,
66
+ onDismiss: c
67
+ }) : null;
68
+ }
69
+ export {
70
+ G as GuidanceLayer
71
+ };
@@ -0,0 +1,3 @@
1
+ import { GuidanceProviderProps } from './guidance-context';
2
+ import * as React from 'react';
3
+ export declare function GuidanceProvider({ children, ...providerProps }: GuidanceProviderProps): React.ReactElement;
@@ -0,0 +1,58 @@
1
+ import { jsx as n, jsxs as l } from "react/jsx-runtime";
2
+ import * as i from "react";
3
+ import { useSyncExternalStore as g } from "react";
4
+ import { createGuidanceEngine as d, GuidanceContext as m } from "./guidance-context.js";
5
+ import { GuidanceDebugPanel as f, GuidanceErrorBoundary as G } from "./guidance-error-boundary.js";
6
+ import { GuidanceLayer as b } from "./guidance-layer.js";
7
+ import { registerRendererPlugins as x } from "./renderers/renderer-registry.js";
8
+ function p({
9
+ children: s,
10
+ ...t
11
+ }) {
12
+ const [r] = i.useState(() => d(t));
13
+ i.useEffect(() => {
14
+ x();
15
+ for (const e of t.plugins ?? [])
16
+ e.evaluate && r.triggers.register(e), e.resolve && r.resolver.registerAdapter(e);
17
+ }, [r, t.plugins]);
18
+ const o = i.useMemo(
19
+ () => ({
20
+ engine: r,
21
+ debug: t.debug ?? !1,
22
+ locale: t.locale ?? "en",
23
+ registerGuide: (e, c) => {
24
+ r.registerGuide(e, c);
25
+ },
26
+ unregisterGuide: (e) => {
27
+ r.unregisterGuide(e);
28
+ },
29
+ unregisterRouteScope: (e) => {
30
+ r.unregisterRouteScope(e);
31
+ }
32
+ }),
33
+ [r, t.debug, t.locale]
34
+ ), u = g(
35
+ (e) => r.subscribe(e),
36
+ () => r.state.status,
37
+ () => "idle"
38
+ ), a = u === "active" || u === "blocked" || u === "evaluating";
39
+ return /* @__PURE__ */ n(m.Provider, { value: o, children: /* @__PURE__ */ l("div", { "data-component": "guidance", className: "contents", children: [
40
+ s,
41
+ t.debug ? /* @__PURE__ */ n(f, {}) : null,
42
+ a ? /* @__PURE__ */ n(
43
+ G,
44
+ {
45
+ onError: (e) => {
46
+ r.reportError({
47
+ code: "render_error",
48
+ message: e.message
49
+ });
50
+ },
51
+ children: /* @__PURE__ */ n(b, {})
52
+ }
53
+ ) : null
54
+ ] }) });
55
+ }
56
+ export {
57
+ p as GuidanceProvider
58
+ };
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ export interface GuidanceTargetProps {
3
+ targetId: string;
4
+ scope?: string;
5
+ children: React.ReactNode;
6
+ }
7
+ export declare function GuidanceTarget({ targetId, scope, children, }: GuidanceTargetProps): React.ReactElement;
@@ -0,0 +1,27 @@
1
+ import { jsx as u } from "react/jsx-runtime";
2
+ import * as i from "react";
3
+ import { useGuidanceContext as c } from "./guidance-context.js";
4
+ function m({
5
+ targetId: e,
6
+ scope: t,
7
+ children: o
8
+ }) {
9
+ const { engine: n } = c(), r = i.useRef(null);
10
+ return i.useEffect(() => {
11
+ const a = r.current;
12
+ if (a)
13
+ return n.targets.register(e, a, t);
14
+ }, [n, e, t]), /* @__PURE__ */ u(
15
+ "span",
16
+ {
17
+ ref: r,
18
+ "data-guidance-target": e,
19
+ "data-component": "guidance-target",
20
+ className: "inline-flex",
21
+ children: o
22
+ }
23
+ );
24
+ }
25
+ export {
26
+ m as GuidanceTarget
27
+ };
@@ -0,0 +1 @@
1
+ export type { GuidanceContextValue, GuidanceProviderProps, } from './guidance-context';
@@ -0,0 +1,7 @@
1
+ import { GuideManifest } from '../../../../lib/guidance';
2
+ export interface FilterHelpCenterGuidesOptions {
3
+ categoryValue: string;
4
+ searchQuery: string;
5
+ allCategoryValue?: string;
6
+ }
7
+ export declare function filterHelpCenterGuides(guides: GuideManifest[], options: FilterHelpCenterGuidesOptions): GuideManifest[];
@@ -0,0 +1,11 @@
1
+ import { HELP_CENTER_ALL_CATEGORY_VALUE as u } from "./help-center.constants.js";
2
+ function y(o, e) {
3
+ const l = e.allCategoryValue ?? u, r = e.categoryValue === l ? null : e.categoryValue, t = e.searchQuery.trim().toLowerCase();
4
+ return o.filter((a) => {
5
+ const c = a.metadata.category ?? "general", s = !r || c === r, n = !t || a.metadata.title?.toLowerCase().includes(t) || a.metadata.description?.toLowerCase().includes(t) || a.id.toLowerCase().includes(t);
6
+ return s && n;
7
+ });
8
+ }
9
+ export {
10
+ y as filterHelpCenterGuides
11
+ };
@@ -0,0 +1,3 @@
1
+ import { GuideCatalogProps } from './help-center.types';
2
+ import * as React from 'react';
3
+ export declare function GuideCatalog({ guides, onLaunchGuide, replayLabel, emptyStateMessage, getStepCountLabel, className, }: GuideCatalogProps): React.ReactElement;
@@ -0,0 +1,118 @@
1
+ import { jsx as e, jsxs as o } from "react/jsx-runtime";
2
+ import * as f from "react";
3
+ import { useVirtualizer as x } from "@tanstack/react-virtual";
4
+ import { Button as g } from "../../../primitives/button/button.js";
5
+ import { cn as u } from "../../../../lib/utils.js";
6
+ import { GUIDE_LIST_VIRTUALIZATION_THRESHOLD as b, GUIDE_LIST_ROW_GAP as N, GUIDE_CARD_ESTIMATE_HEIGHT as v } from "./help-center.constants.js";
7
+ /* empty css */
8
+ function R({
9
+ guides: t,
10
+ onLaunchGuide: r,
11
+ replayLabel: n = "Replay",
12
+ emptyStateMessage: i = "No guides match your search.",
13
+ getStepCountLabel: d = (a) => `${a} steps`,
14
+ className: m
15
+ }) {
16
+ const a = f.useRef(null), p = t.length >= b, c = x({
17
+ count: p ? t.length : 0,
18
+ getScrollElement: () => a.current,
19
+ estimateSize: () => v,
20
+ gap: N,
21
+ overscan: 5
22
+ });
23
+ return t.length ? /* @__PURE__ */ e(
24
+ "div",
25
+ {
26
+ ref: a,
27
+ className: u(
28
+ "guidance-help-center-scroll min-h-0 flex-1 overflow-y-auto px-4 pb-3 pt-3",
29
+ m
30
+ ),
31
+ "data-component": "guidance-help-center-scroll",
32
+ children: p ? /* @__PURE__ */ e(
33
+ "div",
34
+ {
35
+ className: "relative w-full",
36
+ "data-component": "guidance-guide-catalog",
37
+ style: { height: c.getTotalSize() },
38
+ children: c.getVirtualItems().map((l) => {
39
+ const s = t[l.index];
40
+ return s ? /* @__PURE__ */ e(
41
+ "div",
42
+ {
43
+ ref: c.measureElement,
44
+ "data-index": l.index,
45
+ className: "absolute left-0 top-0 w-full",
46
+ style: { transform: `translateY(${l.start}px)` },
47
+ children: /* @__PURE__ */ e(
48
+ h,
49
+ {
50
+ guide: s,
51
+ onLaunchGuide: r,
52
+ replayLabel: n,
53
+ getStepCountLabel: d
54
+ }
55
+ )
56
+ },
57
+ s.id
58
+ ) : null;
59
+ })
60
+ }
61
+ ) : /* @__PURE__ */ e(
62
+ "ul",
63
+ {
64
+ className: "flex flex-col gap-2",
65
+ "data-component": "guidance-guide-catalog",
66
+ children: t.map((l) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
67
+ h,
68
+ {
69
+ guide: l,
70
+ onLaunchGuide: r,
71
+ replayLabel: n,
72
+ getStepCountLabel: d
73
+ }
74
+ ) }, l.id))
75
+ }
76
+ )
77
+ }
78
+ ) : /* @__PURE__ */ e(
79
+ "div",
80
+ {
81
+ className: u(
82
+ "guidance-help-center-scroll min-h-0 flex-1 overflow-y-auto px-4 pb-3 pt-3",
83
+ m
84
+ ),
85
+ "data-component": "guidance-help-center-scroll",
86
+ children: /* @__PURE__ */ e("p", { className: "rounded-lg border border-dashed border-border-subtle px-4 py-8 text-center text-sm text-content-secondary", children: i })
87
+ }
88
+ );
89
+ }
90
+ function h({
91
+ guide: t,
92
+ onLaunchGuide: r,
93
+ replayLabel: n,
94
+ getStepCountLabel: i
95
+ }) {
96
+ return /* @__PURE__ */ e("article", { className: "rounded-lg border border-border-subtle bg-canvas-elevated px-3 py-2.5", children: /* @__PURE__ */ o("div", { className: "flex items-start justify-between gap-3", children: [
97
+ /* @__PURE__ */ o("div", { className: "min-w-0 flex-1", children: [
98
+ /* @__PURE__ */ o("div", { className: "flex min-w-0 items-center gap-2", children: [
99
+ /* @__PURE__ */ e("h3", { className: "truncate text-sm font-semibold text-content-primary", children: t.metadata.title ?? t.id }),
100
+ /* @__PURE__ */ e("span", { className: "shrink-0 rounded-full bg-brand-tint px-2 py-0.5 text-[11px] font-medium leading-none text-brand", children: i(t.steps.length) })
101
+ ] }),
102
+ t.metadata.description ? /* @__PURE__ */ e("p", { className: "mt-1 line-clamp-2 text-xs leading-relaxed text-content-secondary", children: t.metadata.description }) : null
103
+ ] }),
104
+ /* @__PURE__ */ e(
105
+ g,
106
+ {
107
+ variant: "outline",
108
+ size: "sm",
109
+ className: "shrink-0",
110
+ onClick: () => r(t.id),
111
+ children: n
112
+ }
113
+ )
114
+ ] }) });
115
+ }
116
+ export {
117
+ R as GuideCatalog
118
+ };
@@ -0,0 +1,3 @@
1
+ import { HelpCenterHeaderProps } from './help-center.types';
2
+ import * as React from 'react';
3
+ export declare function HelpCenterHeader({ title, children, className, }: HelpCenterHeaderProps): React.ReactElement;
@@ -0,0 +1,43 @@
1
+ import { jsxs as n, jsx as e } from "react/jsx-runtime";
2
+ import "react";
3
+ import { SheetTitle as s, SheetClose as c } from "../../../feedback/sheet/sheet.js";
4
+ import { Button as l } from "../../../primitives/button/button.js";
5
+ import { Cross as m } from "impact-nova-icons";
6
+ import { useImpactNovaI18n as p } from "../../../../i18n/use-impact-nova-i18n.js";
7
+ import { cn as d } from "../../../../lib/utils.js";
8
+ function C({
9
+ title: o,
10
+ children: a,
11
+ className: i
12
+ }) {
13
+ const { t: r } = p(), t = o ?? r("helpCenter.title");
14
+ return /* @__PURE__ */ n(
15
+ "div",
16
+ {
17
+ "data-component": "guidance-help-center-header",
18
+ className: d(
19
+ "flex shrink-0 items-center justify-between gap-3 border-b bg-canvas-elevated px-4 py-[9px]",
20
+ i
21
+ ),
22
+ children: [
23
+ typeof t == "string" ? /* @__PURE__ */ e(s, { className: "shrink-0 text-lg font-bold text-content", children: t }) : t,
24
+ /* @__PURE__ */ n("div", { className: "flex items-center gap-2", children: [
25
+ a,
26
+ /* @__PURE__ */ e(c, { asChild: !0, children: /* @__PURE__ */ e(
27
+ l,
28
+ {
29
+ variant: "secondary",
30
+ size: "icon",
31
+ "aria-label": r("aria.close"),
32
+ "data-component": "guidance-help-center-close",
33
+ children: /* @__PURE__ */ e(m, { className: "!h-3 !w-3" })
34
+ }
35
+ ) })
36
+ ] })
37
+ ]
38
+ }
39
+ );
40
+ }
41
+ export {
42
+ C as HelpCenterHeader
43
+ };
@@ -0,0 +1,5 @@
1
+ export declare const HELP_CENTER_ALL_CATEGORY_VALUE = "all";
2
+ export declare const GUIDE_CARD_ESTIMATE_HEIGHT = 72;
3
+ export declare const GUIDE_LIST_ROW_GAP = 8;
4
+ /** Below this count, a simple list is rendered instead of windowing. */
5
+ export declare const GUIDE_LIST_VIRTUALIZATION_THRESHOLD = 12;
@@ -0,0 +1,7 @@
1
+ const _ = "all", E = 72, I = 8, T = 12;
2
+ export {
3
+ E as GUIDE_CARD_ESTIMATE_HEIGHT,
4
+ I as GUIDE_LIST_ROW_GAP,
5
+ T as GUIDE_LIST_VIRTUALIZATION_THRESHOLD,
6
+ _ as HELP_CENTER_ALL_CATEGORY_VALUE
7
+ };
@@ -0,0 +1,10 @@
1
+ import { HelpCenterBodyProps, HelpCenterCategoryTabsProps, HelpCenterContentProps, HelpCenterFooterProps, HelpCenterProps } from './help-center.types';
2
+ import * as React from 'react';
3
+ export declare function HelpCenter({ open, onOpenChange, children, className, }: HelpCenterProps): React.ReactElement;
4
+ export declare function HelpCenterContent({ children, className, }: HelpCenterContentProps): React.ReactElement;
5
+ export declare function HelpCenterCategoryTabs({ categories, allCategoryLabel, className, }: HelpCenterCategoryTabsProps): React.ReactElement;
6
+ export declare function HelpCenterBody({ children, className, }: HelpCenterBodyProps): React.ReactElement;
7
+ export declare function HelpCenterFooter({ children, className, }: HelpCenterFooterProps): React.ReactElement;
8
+ export { HelpCenterHeader } from './help-center-header';
9
+ export { GuideCatalog } from './guide-catalog';
10
+ export type { GuideCatalogProps } from './help-center.types';