@teja-app/ui 0.0.13 → 0.0.15

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 (41) hide show
  1. package/dist/index.cjs +5 -0
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +6 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/instrumentation/context.d.ts +9 -0
  8. package/dist/instrumentation/context.d.ts.map +1 -0
  9. package/dist/instrumentation/index.cjs +8 -0
  10. package/dist/instrumentation/index.cjs.map +1 -0
  11. package/dist/instrumentation/index.d.ts +10 -0
  12. package/dist/instrumentation/index.d.ts.map +1 -0
  13. package/dist/instrumentation/index.js +8 -0
  14. package/dist/instrumentation/index.js.map +1 -0
  15. package/dist/instrumentation/tracker.d.ts +28 -0
  16. package/dist/instrumentation/tracker.d.ts.map +1 -0
  17. package/dist/instrumentation/useInstrumentedClick.d.ts +31 -0
  18. package/dist/instrumentation/useInstrumentedClick.d.ts.map +1 -0
  19. package/dist/theme/components/AIComposeButton.d.ts +2 -0
  20. package/dist/theme/components/AIComposeButton.d.ts.map +1 -1
  21. package/dist/theme/components/Button.d.ts +2 -0
  22. package/dist/theme/components/Button.d.ts.map +1 -1
  23. package/dist/theme/components/CountdownPill.d.ts +15 -0
  24. package/dist/theme/components/CountdownPill.d.ts.map +1 -0
  25. package/dist/theme/components/IconButton.d.ts +2 -0
  26. package/dist/theme/components/IconButton.d.ts.map +1 -1
  27. package/dist/theme/components/countdown.d.ts +37 -0
  28. package/dist/theme/components/countdown.d.ts.map +1 -0
  29. package/dist/theme/components/countdown.test.d.ts +2 -0
  30. package/dist/theme/components/countdown.test.d.ts.map +1 -0
  31. package/dist/theme/components/index.d.ts +2 -0
  32. package/dist/theme/components/index.d.ts.map +1 -1
  33. package/dist/theme/index.cjs +83 -2
  34. package/dist/theme/index.cjs.map +1 -1
  35. package/dist/theme/index.js +83 -2
  36. package/dist/theme/index.js.map +1 -1
  37. package/dist/useInstrumentedClick-B7QAnoBt.js +68 -0
  38. package/dist/useInstrumentedClick-B7QAnoBt.js.map +1 -0
  39. package/dist/useInstrumentedClick-COxikkTF.cjs +67 -0
  40. package/dist/useInstrumentedClick-COxikkTF.cjs.map +1 -0
  41. package/package.json +6 -1
package/dist/index.cjs CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const useSidebar = require("./useSidebar-d1VZFhxd.cjs");
4
4
  const utils_index = require("./utils/index.cjs");
5
+ const useInstrumentedClick = require("./useInstrumentedClick-COxikkTF.cjs");
5
6
  exports.useDebounce = useSidebar.useDebounce;
6
7
  exports.useDebouncedCallback = useSidebar.useDebouncedCallback;
7
8
  exports.useDebouncedCallbackWithControl = useSidebar.useDebouncedCallbackWithControl;
@@ -9,4 +10,8 @@ exports.useSelection = useSidebar.useSelection;
9
10
  exports.useSidebar = useSidebar.useSidebar;
10
11
  exports.useTable = useSidebar.useTable;
11
12
  exports.cn = utils_index.cn;
13
+ exports.TrackerProvider = useInstrumentedClick.TrackerProvider;
14
+ exports.noopTracker = useInstrumentedClick.noopTracker;
15
+ exports.useInstrumentedClick = useInstrumentedClick.useInstrumentedClick;
16
+ exports.useTracker = useInstrumentedClick.useTracker;
12
17
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -14,4 +14,5 @@
14
14
  */
15
15
  export * from './hooks';
16
16
  export { cn } from './utils';
17
+ export * from './instrumentation';
17
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAM7B,cAAc,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,12 +1,17 @@
1
1
  import { u, a, b, c, d, e } from "./useSidebar-BWe09WbE.js";
2
2
  import { cn } from "./utils/index.js";
3
+ import { T, n, u as u2, a as a2 } from "./useInstrumentedClick-B7QAnoBt.js";
3
4
  export {
5
+ T as TrackerProvider,
4
6
  cn,
7
+ n as noopTracker,
5
8
  u as useDebounce,
6
9
  a as useDebouncedCallback,
7
10
  b as useDebouncedCallbackWithControl,
11
+ u2 as useInstrumentedClick,
8
12
  c as useSelection,
9
13
  d as useSidebar,
10
- e as useTable
14
+ e as useTable,
15
+ a2 as useTracker
11
16
  };
12
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type Tracker } from './tracker';
3
+ export interface TrackerProviderProps {
4
+ tracker: Tracker;
5
+ children: ReactNode;
6
+ }
7
+ export declare function TrackerProvider({ tracker, children }: TrackerProviderProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function useTracker(): Tracker;
9
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/instrumentation/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAWtD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAM1E;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const useInstrumentedClick = require("../useInstrumentedClick-COxikkTF.cjs");
4
+ exports.TrackerProvider = useInstrumentedClick.TrackerProvider;
5
+ exports.noopTracker = useInstrumentedClick.noopTracker;
6
+ exports.useInstrumentedClick = useInstrumentedClick.useInstrumentedClick;
7
+ exports.useTracker = useInstrumentedClick.useTracker;
8
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * teja-ui instrumentation surface (W3 §7.5–7.6).
3
+ *
4
+ * FROZEN contract consumed by the app-side adapter. teja-ui carries no telemetry
5
+ * SDK; the host injects a `Tracker` via `<TrackerProvider>`.
6
+ */
7
+ export { noopTracker, type Tracker, type SpanHandle } from './tracker';
8
+ export { TrackerProvider, useTracker, type TrackerProviderProps } from './context';
9
+ export { useInstrumentedClick, type InstrumentedClickMeta, } from './useInstrumentedClick';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/instrumentation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { T, n, u, a } from "../useInstrumentedClick-B7QAnoBt.js";
2
+ export {
3
+ T as TrackerProvider,
4
+ n as noopTracker,
5
+ u as useInstrumentedClick,
6
+ a as useTracker
7
+ };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Tracker facade — the FROZEN telemetry contract teja-ui exposes (W3 §7.5).
3
+ *
4
+ * teja-ui carries NO OpenTelemetry / Sentry / PostHog dependency. Consuming
5
+ * apps inject a concrete `Tracker` via `<TrackerProvider>`; when no provider is
6
+ * mounted the components fall back to `noopTracker`, so an un-instrumented host
7
+ * sees ZERO behavior change. The app-side adapter (`frontend/src/lib/telemetry/
8
+ * uiTracker.ts`) is the only place that knows about the real sink.
9
+ */
10
+ /** A single in-flight UI span (e.g. one button click). */
11
+ export interface SpanHandle {
12
+ setAttribute(key: string, value: string | number | boolean): void;
13
+ /**
14
+ * End the span. `outcome` records how the handler settled; `error` is the
15
+ * thrown/rejected value when `outcome === "error"` (recorded as an exception
16
+ * by the adapter, never swallowed by the hook).
17
+ */
18
+ end(outcome: 'success' | 'error' | 'abandoned', error?: unknown): void;
19
+ }
20
+ export interface Tracker {
21
+ /** Start a span. Attributes are flat primitives so any sink can serialize them. */
22
+ startSpan(name: string, attrs: Record<string, string | number | boolean>): SpanHandle;
23
+ /** Fire-and-forget discrete event (no duration). */
24
+ track(event: string, attrs?: Record<string, string | number | boolean>): void;
25
+ }
26
+ /** No-op implementation: the default when no provider is mounted. */
27
+ export declare const noopTracker: Tracker;
28
+ //# sourceMappingURL=tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/instrumentation/tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAClE;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,GAAG,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACxE;AAED,MAAM,WAAW,OAAO;IACtB,mFAAmF;IACnF,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAC/C,UAAU,CAAC;IACd,oDAAoD;IACpD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;CAC/E;AAED,qEAAqE;AACrE,eAAO,MAAM,WAAW,EAAE,OAGzB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { type SyntheticEvent } from 'react';
2
+ /**
3
+ * useInstrumentedClick (W3 §7.6).
4
+ *
5
+ * Wraps a click handler in a `ui.button.click` span. The span's lifecycle
6
+ * follows the handler:
7
+ * - sync handler → span ends `success` immediately (`ui.handler.async=false`)
8
+ * - async handler → span ends when the returned promise settles
9
+ * (`success`/`error`), recording `ui.handler.duration_ms`.
10
+ *
11
+ * Error semantics — the hook observes, never alters control flow:
12
+ * - sync throw → span ends `error`, then the error is RE-THROWN so the
13
+ * caller's try/catch / React error boundary still sees it.
14
+ * - async reject → span ends `error`; the rejection is left ON the original
15
+ * promise so the caller's own `.catch`/awaiter still receives it. The hook
16
+ * attaches a passive observer (it does not consume the rejection).
17
+ *
18
+ * Tracker comes from `useTracker()`, so an unmounted provider = noop = zero
19
+ * behavior change.
20
+ */
21
+ export interface InstrumentedClickMeta {
22
+ /** Semantic id, e.g. "onboarding.step1.next". Highest-priority component.name. */
23
+ telemetryId?: string;
24
+ /** Fallback identity (the component's data-testid). */
25
+ testId?: string;
26
+ /** "Button" | "IconButton" | "AIComposeButton". */
27
+ kind: string;
28
+ variant?: string;
29
+ }
30
+ export declare function useInstrumentedClick<E extends SyntheticEvent>(onClick: ((e: E) => void | Promise<void>) | undefined, meta: InstrumentedClickMeta): ((e: E) => void) | undefined;
31
+ //# sourceMappingURL=useInstrumentedClick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInstrumentedClick.d.ts","sourceRoot":"","sources":["../../src/instrumentation/useInstrumentedClick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAIzD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,qBAAqB;IACpC,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,cAAc,EAC3D,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EACrD,IAAI,EAAE,qBAAqB,GAC1B,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAmE9B"}
@@ -9,6 +9,8 @@ export interface AIComposeButtonProps extends Omit<ButtonHTMLAttributes<HTMLButt
9
9
  size?: AIComposeButtonSize;
10
10
  children?: ReactNode;
11
11
  testId?: string;
12
+ /** Semantic telemetry id for the click span (`component.name`). */
13
+ telemetryId?: string;
12
14
  }
13
15
  export declare const AIComposeButton: import("react").ForwardRefExoticComponent<AIComposeButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
14
16
  //# sourceMappingURL=AIComposeButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AIComposeButton.d.ts","sourceRoot":"","sources":["../../../src/theme/components/AIComposeButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlG;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IACjE,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,eAAe,oHAqC3B,CAAC"}
1
+ {"version":3,"file":"AIComposeButton.d.ts","sourceRoot":"","sources":["../../../src/theme/components/AIComposeButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMlG;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IACjE,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,oHA4C3B,CAAC"}
@@ -14,6 +14,8 @@ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement
14
14
  children?: ReactNode;
15
15
  /** Forwarded as `data-testid` on the `<button>` element. */
16
16
  testId?: string;
17
+ /** Semantic telemetry id for the click span (`component.name`). */
18
+ telemetryId?: string;
17
19
  }
18
20
  export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
19
21
  //# sourceMappingURL=Button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/theme/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE7C,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,WAAW,GACX,OAAO,GACP,QAAQ,GACR,MAAM,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAqC5C,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IACjE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,gDAAgD;IAChD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,uCAAuC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,MAAM,2GAgDjB,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/theme/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE7C,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,WAAW,GACX,OAAO,GACP,QAAQ,GACR,MAAM,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAqC5C,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IACjE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,gDAAgD;IAChD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,uCAAuC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,MAAM,2GAyDjB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type IconName } from "./Icon";
2
+ import type { CountdownTone } from "./countdown";
3
+ export interface CountdownPillProps {
4
+ tone: CountdownTone;
5
+ /** Fully-resolved, already-localized text (e.g. "Starts in 2d 4h"). */
6
+ label: string;
7
+ /** Leading theme icon; default "clock". */
8
+ icon?: IconName;
9
+ /** Show the leading live dot; defaults to true unless tone is "ready". */
10
+ dot?: boolean;
11
+ testId?: string;
12
+ "data-testid"?: string;
13
+ }
14
+ export declare function CountdownPill({ tone, label, icon, dot, testId, "data-testid": dataTestId, }: CountdownPillProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=CountdownPill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CountdownPill.d.ts","sourceRoot":"","sources":["../../../src/theme/components/CountdownPill.tsx"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBjD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,IAAc,EACd,GAAG,EACH,MAAM,EACN,aAAa,EAAE,UAAU,GAC1B,EAAE,kBAAkB,2CAgBpB"}
@@ -12,6 +12,8 @@ export interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonEle
12
12
  size?: IconButtonSize;
13
13
  tone?: IconButtonTone;
14
14
  testId?: string;
15
+ /** Semantic telemetry id for the click span (`component.name`). */
16
+ telemetryId?: string;
15
17
  }
16
18
  export declare const IconButton: import("react").ForwardRefExoticComponent<IconButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
17
19
  //# sourceMappingURL=IconButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../src/theme/components/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElG;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAChD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnD,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IACjE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,eAAO,MAAM,UAAU,+GAmCtB,CAAC"}
1
+ {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../src/theme/components/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlG;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAChD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnD,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IACjE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,eAAO,MAAM,UAAU,+GA0CtB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Pure, localization-free formatter for "time until a scheduled event"
3
+ * countdowns (session start, telehealth join, etc.).
4
+ *
5
+ * Returns STRUCTURED parts (numbers + a tone + a granularity hint), never
6
+ * rendered English — so localized callers can build their own `t(...)` label
7
+ * while pre-i18n surfaces can format inline. The presentational pill that
8
+ * consumes this lives in `CountdownPill.tsx`.
9
+ */
10
+ export type CountdownTone = "waiting" | "soon" | "ready";
11
+ export interface CountdownParts {
12
+ /** Urgency bucket: drives the pill color. "ready" once start has passed. */
13
+ tone: CountdownTone;
14
+ days: number;
15
+ hours: number;
16
+ minutes: number;
17
+ seconds: number;
18
+ /**
19
+ * Granularity the UI should render, so callers localize correctly:
20
+ * - "days" → "{days}d {hours}h"
21
+ * - "hours" → "{hours}h {minutes}m"
22
+ * - "minutes" → mm:ss (the live final hour)
23
+ * - "now" → start has passed
24
+ */
25
+ unit: "days" | "hours" | "minutes" | "now";
26
+ /** Zero-padded mm:ss for the "minutes" unit (e.g. "04:38"). */
27
+ clock: string;
28
+ }
29
+ /**
30
+ * Structured countdown from `nowMs` → `startMs`.
31
+ *
32
+ * @param soonThresholdSeconds When the remaining time is at or below this many
33
+ * seconds (and start hasn't passed), tone becomes "soon" (amber). Defaults to
34
+ * 120s. Pass `0` to opt out of the "soon" state entirely.
35
+ */
36
+ export declare function countdownParts(startMs: number, nowMs: number, soonThresholdSeconds?: number): CountdownParts;
37
+ //# sourceMappingURL=countdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"countdown.d.ts","sourceRoot":"","sources":["../../../src/theme/components/countdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IAC3C,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;CACf;AAMD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,oBAAoB,SAAM,GACzB,cAAc,CA+BhB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=countdown.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"countdown.test.d.ts","sourceRoot":"","sources":["../../../src/theme/components/countdown.test.ts"],"names":[],"mappings":""}
@@ -1,6 +1,8 @@
1
1
  export { Icon, ICON_NAMES, type IconName, type IconProps } from './Icon';
2
2
  export { Button, type ButtonProps, type ButtonVariant, type ButtonSize, } from './Button';
3
3
  export { Badge, type BadgeProps, type BadgeTone, type BadgeSize, type BadgeColors } from './Badge';
4
+ export { CountdownPill, type CountdownPillProps } from './CountdownPill';
5
+ export { countdownParts, type CountdownParts, type CountdownTone } from './countdown';
4
6
  export { Card, type CardProps } from './Card';
5
7
  export { TejaMark, TejaLogo, type TejaMarkProps, type TejaLogoProps } from './Brand';
6
8
  export { Field, type FieldProps } from './Field';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/components/index.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
+ const instrumentation = require("@teja-app/ui/instrumentation");
5
6
  const ReactDOM = require("react-dom");
6
7
  function _interopNamespaceDefault(e2) {
7
8
  const n2 = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
@@ -674,9 +675,17 @@ const Button$1 = React.forwardRef(function Button2({
674
675
  type = "button",
675
676
  disabled,
676
677
  testId,
678
+ telemetryId,
679
+ onClick,
677
680
  ...rest
678
681
  }, ref) {
679
682
  const dims = SIZE_DIMS$2[size2];
683
+ const instrumentedClick = instrumentation.useInstrumentedClick(onClick, {
684
+ telemetryId,
685
+ testId,
686
+ kind: "Button",
687
+ variant
688
+ });
680
689
  return /* @__PURE__ */ jsxRuntime.jsxs(
681
690
  "button",
682
691
  {
@@ -684,6 +693,7 @@ const Button$1 = React.forwardRef(function Button2({
684
693
  type,
685
694
  disabled,
686
695
  "data-testid": testId,
696
+ onClick: instrumentedClick,
687
697
  style: {
688
698
  height: dims.h,
689
699
  padding: dims.pad,
@@ -785,6 +795,61 @@ function Badge({
785
795
  children
786
796
  ] });
787
797
  }
798
+ const TONE_COLORS = {
799
+ waiting: { bg: "var(--ai-soft)", fg: "var(--ai)", dot: "var(--ai)" },
800
+ soon: { bg: "var(--warning-soft)", fg: "var(--warning)", dot: "var(--warning)" },
801
+ ready: { bg: "var(--success-soft)", fg: "var(--success)", dot: "var(--success)" }
802
+ };
803
+ function CountdownPill({
804
+ tone,
805
+ label,
806
+ icon = "clock",
807
+ dot,
808
+ testId,
809
+ "data-testid": dataTestId
810
+ }) {
811
+ const showDot = dot ?? tone !== "ready";
812
+ return /* @__PURE__ */ jsxRuntime.jsxs(
813
+ Badge,
814
+ {
815
+ tone: "neutral",
816
+ colors: TONE_COLORS[tone],
817
+ dot: showDot,
818
+ testId,
819
+ "data-testid": dataTestId,
820
+ children: [
821
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: icon, size: 12 }),
822
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontFamily: "var(--font-mono)", fontWeight: 600 }, children: label })
823
+ ]
824
+ }
825
+ );
826
+ }
827
+ const DAY_S = 86400;
828
+ const HOUR_S = 3600;
829
+ const MIN_S = 60;
830
+ function countdownParts(startMs, nowMs, soonThresholdSeconds = 120) {
831
+ const deltaMs = startMs - nowMs;
832
+ if (deltaMs <= 0) {
833
+ return {
834
+ tone: "ready",
835
+ days: 0,
836
+ hours: 0,
837
+ minutes: 0,
838
+ seconds: 0,
839
+ unit: "now",
840
+ clock: "00:00"
841
+ };
842
+ }
843
+ const total = Math.floor(deltaMs / 1e3);
844
+ const days = Math.floor(total / DAY_S);
845
+ const hours = Math.floor(total % DAY_S / HOUR_S);
846
+ const minutes = Math.floor(total % HOUR_S / MIN_S);
847
+ const seconds = total % MIN_S;
848
+ const unit = days > 0 ? "days" : hours > 0 ? "hours" : "minutes";
849
+ const clock = `${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
850
+ const tone = total <= soonThresholdSeconds ? "soon" : "waiting";
851
+ return { tone, days, hours, minutes, seconds, unit, clock };
852
+ }
788
853
  const Card = React.forwardRef(function Card2({
789
854
  padding = 20,
790
855
  children,
@@ -16523,8 +16588,14 @@ const Switch = React.forwardRef(function Switch2({ on = false, onChange, size: s
16523
16588
  });
16524
16589
  const SIZE_PX$1 = { sm: 22, md: 26, lg: 32 };
16525
16590
  const IconButton = React.forwardRef(
16526
- function IconButton2({ children, size: size2 = "md", tone = "default", style, testId, type = "button", ...rest }, ref) {
16591
+ function IconButton2({ children, size: size2 = "md", tone = "default", style, testId, telemetryId, onClick, type = "button", ...rest }, ref) {
16527
16592
  const dim = SIZE_PX$1[size2];
16593
+ const instrumentedClick = instrumentation.useInstrumentedClick(onClick, {
16594
+ telemetryId,
16595
+ testId,
16596
+ kind: "IconButton",
16597
+ variant: tone
16598
+ });
16528
16599
  const merged = {
16529
16600
  width: dim,
16530
16601
  height: dim,
@@ -16548,6 +16619,7 @@ const IconButton = React.forwardRef(
16548
16619
  type,
16549
16620
  "data-testid": testId,
16550
16621
  "data-tone": tone,
16622
+ onClick: instrumentedClick,
16551
16623
  style: merged,
16552
16624
  ...rest,
16553
16625
  children
@@ -17240,8 +17312,14 @@ function AIBadge({
17240
17312
  ] });
17241
17313
  }
17242
17314
  const AIComposeButton = React.forwardRef(
17243
- function AIComposeButton2({ size: size2 = "md", children = "Compose with AI", style, testId, type = "button", ...rest }, ref) {
17315
+ function AIComposeButton2({ size: size2 = "md", children = "Compose with AI", style, testId, telemetryId, onClick, type = "button", ...rest }, ref) {
17244
17316
  const h2 = size2 === "sm" ? 28 : 32;
17317
+ const instrumentedClick = instrumentation.useInstrumentedClick(onClick, {
17318
+ telemetryId,
17319
+ testId,
17320
+ kind: "AIComposeButton",
17321
+ variant: size2
17322
+ });
17245
17323
  const fz = size2 === "sm" ? 12 : 13;
17246
17324
  const merged = {
17247
17325
  height: h2,
@@ -17266,6 +17344,7 @@ const AIComposeButton = React.forwardRef(
17266
17344
  type,
17267
17345
  "data-testid": testId,
17268
17346
  "data-size": size2,
17347
+ onClick: instrumentedClick,
17269
17348
  style: merged,
17270
17349
  ...rest,
17271
17350
  children: [
@@ -19086,6 +19165,7 @@ exports.Checkbox = Checkbox;
19086
19165
  exports.Chip = Chip;
19087
19166
  exports.Combobox = Combobox;
19088
19167
  exports.ConfirmDialog = ConfirmDialog;
19168
+ exports.CountdownPill = CountdownPill;
19089
19169
  exports.CountryPicker = CountryPicker;
19090
19170
  exports.DEFAULT_LANG_OPTIONS = DEFAULT_LANG_OPTIONS;
19091
19171
  exports.DENSITY_OPTIONS = DENSITY_OPTIONS;
@@ -19178,6 +19258,7 @@ exports.US_STATES = US_STATES;
19178
19258
  exports.ViewToggle = ViewToggle;
19179
19259
  exports.applyTheme = applyTheme;
19180
19260
  exports.controlBoxStyle = controlBoxStyle;
19261
+ exports.countdownParts = countdownParts;
19181
19262
  exports.ensureAIStyles = ensureAIStyles;
19182
19263
  exports.ensureSidebarNavStyles = ensureSidebarNavStyles;
19183
19264
  exports.ensureSkeletonStyles = ensureSkeletonStyles;