@imfusion/web-ui 0.5.0

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 (152) hide show
  1. package/README.md +60 -0
  2. package/bin/install-skill.js +180 -0
  3. package/dist/assets/vendors/base-ui.d.ts +8 -0
  4. package/dist/breakpoints/index.d.ts +3 -0
  5. package/dist/breakpoints/min-width.d.ts +9 -0
  6. package/dist/breakpoints/registry.d.ts +19 -0
  7. package/dist/code-qBbqAHK-.js +190 -0
  8. package/dist/codegen/gen-breakpoints-css.d.ts +6 -0
  9. package/dist/codegen/gen-css-types.d.ts +1 -0
  10. package/dist/codegen/gen-token-css.d.ts +6 -0
  11. package/dist/codegen/run.d.ts +1 -0
  12. package/dist/components/app-shell/app-shell.d.ts +66 -0
  13. package/dist/components/app-shell/app-shell.meta.d.ts +2 -0
  14. package/dist/components/app-shell/index.d.ts +2 -0
  15. package/dist/components/button/button.d.ts +30 -0
  16. package/dist/components/button/button.meta.d.ts +2 -0
  17. package/dist/components/button/index.d.ts +2 -0
  18. package/dist/components/callout/callout.d.ts +42 -0
  19. package/dist/components/callout/callout.meta.d.ts +2 -0
  20. package/dist/components/callout/index.d.ts +2 -0
  21. package/dist/components/card/card.d.ts +64 -0
  22. package/dist/components/card/card.meta.d.ts +2 -0
  23. package/dist/components/card/index.d.ts +2 -0
  24. package/dist/components/checkbox/checkbox.d.ts +56 -0
  25. package/dist/components/checkbox/checkbox.meta.d.ts +2 -0
  26. package/dist/components/checkbox/index.d.ts +2 -0
  27. package/dist/components/chip/chip.cva.d.ts +12 -0
  28. package/dist/components/chip/chip.d.ts +11 -0
  29. package/dist/components/chip/chip.meta.d.ts +2 -0
  30. package/dist/components/chip/index.d.ts +2 -0
  31. package/dist/components/chip-link/chip-link.d.ts +17 -0
  32. package/dist/components/chip-link/chip-link.meta.d.ts +2 -0
  33. package/dist/components/chip-link/index.d.ts +2 -0
  34. package/dist/components/code/code.d.ts +60 -0
  35. package/dist/components/code/code.meta.d.ts +2 -0
  36. package/dist/components/code/index.d.ts +2 -0
  37. package/dist/components/collapsible/collapsible.d.ts +57 -0
  38. package/dist/components/collapsible/collapsible.meta.d.ts +2 -0
  39. package/dist/components/collapsible/index.d.ts +2 -0
  40. package/dist/components/copy-button/copy-button.d.ts +21 -0
  41. package/dist/components/copy-button/copy-button.meta.d.ts +2 -0
  42. package/dist/components/copy-button/index.d.ts +2 -0
  43. package/dist/components/drawer/drawer.d.ts +191 -0
  44. package/dist/components/drawer/drawer.meta.d.ts +2 -0
  45. package/dist/components/drawer/index.d.ts +2 -0
  46. package/dist/components/input/index.d.ts +2 -0
  47. package/dist/components/input/input.d.ts +25 -0
  48. package/dist/components/input/input.meta.d.ts +2 -0
  49. package/dist/components/logo/imfusion/imfusion.d.ts +16 -0
  50. package/dist/components/logo/imfusion/index.d.ts +1 -0
  51. package/dist/components/logo/index.d.ts +3 -0
  52. package/dist/components/logo/logo.d.ts +15 -0
  53. package/dist/components/logo/logo.meta.d.ts +2 -0
  54. package/dist/components/navigation-menu/index.d.ts +2 -0
  55. package/dist/components/navigation-menu/navigation-menu.d.ts +20 -0
  56. package/dist/components/navigation-menu/navigation-menu.meta.d.ts +2 -0
  57. package/dist/components/navigation-menu/subs/flyout-link.d.ts +24 -0
  58. package/dist/components/navigation-menu/subs/inline-submenu.d.ts +41 -0
  59. package/dist/components/navigation-menu/subs/link.d.ts +64 -0
  60. package/dist/components/navigation-menu/subs/overlay.d.ts +75 -0
  61. package/dist/components/navigation-menu/subs/shared.d.ts +20 -0
  62. package/dist/components/navigation-menu/subs/structure.d.ts +64 -0
  63. package/dist/components/navigation-menu/subs/trigger.d.ts +47 -0
  64. package/dist/components/popover/index.d.ts +2 -0
  65. package/dist/components/popover/popover.d.ts +181 -0
  66. package/dist/components/popover/popover.meta.d.ts +2 -0
  67. package/dist/components/row/index.d.ts +2 -0
  68. package/dist/components/row/row.d.ts +28 -0
  69. package/dist/components/row/row.meta.d.ts +2 -0
  70. package/dist/components/select/index.d.ts +2 -0
  71. package/dist/components/select/select.d.ts +278 -0
  72. package/dist/components/select/select.meta.d.ts +2 -0
  73. package/dist/components/separator/index.d.ts +2 -0
  74. package/dist/components/separator/separator.d.ts +15 -0
  75. package/dist/components/separator/separator.meta.d.ts +2 -0
  76. package/dist/components/slider/index.d.ts +2 -0
  77. package/dist/components/slider/slider.d.ts +111 -0
  78. package/dist/components/slider/slider.meta.d.ts +2 -0
  79. package/dist/components/spinner/index.d.ts +2 -0
  80. package/dist/components/spinner/spinner.d.ts +19 -0
  81. package/dist/components/spinner/spinner.geometry.d.ts +37 -0
  82. package/dist/components/spinner/spinner.meta.d.ts +2 -0
  83. package/dist/components/stack/index.d.ts +2 -0
  84. package/dist/components/stack/stack.d.ts +18 -0
  85. package/dist/components/stack/stack.meta.d.ts +2 -0
  86. package/dist/components/switch/index.d.ts +2 -0
  87. package/dist/components/switch/switch.d.ts +45 -0
  88. package/dist/components/switch/switch.meta.d.ts +2 -0
  89. package/dist/components/table/index.d.ts +2 -0
  90. package/dist/components/table/table.d.ts +66 -0
  91. package/dist/components/table/table.meta.d.ts +2 -0
  92. package/dist/components/tabs/index.d.ts +2 -0
  93. package/dist/components/tabs/tabs.d.ts +91 -0
  94. package/dist/components/tabs/tabs.meta.d.ts +2 -0
  95. package/dist/components/toggle/index.d.ts +2 -0
  96. package/dist/components/toggle/toggle.d.ts +31 -0
  97. package/dist/components/toggle/toggle.meta.d.ts +2 -0
  98. package/dist/components/toggle-group/index.d.ts +2 -0
  99. package/dist/components/toggle-group/toggle-group.d.ts +30 -0
  100. package/dist/components/toggle-group/toggle-group.meta.d.ts +2 -0
  101. package/dist/components/tooltip/index.d.ts +2 -0
  102. package/dist/components/tooltip/tooltip.d.ts +164 -0
  103. package/dist/components/tooltip/tooltip.meta.d.ts +2 -0
  104. package/dist/components/typo/index.d.ts +2 -0
  105. package/dist/components/typo/typo.d.ts +100 -0
  106. package/dist/components/typo/typo.meta.d.ts +2 -0
  107. package/dist/config.d.ts +8 -0
  108. package/dist/docgen/gen-docgen.d.ts +1 -0
  109. package/dist/docgen/gen-docgen.utils.d.ts +13 -0
  110. package/dist/hooks/index.d.ts +5 -0
  111. package/dist/hooks/use-clipboard.d.ts +12 -0
  112. package/dist/hooks/use-color-scheme.d.ts +31 -0
  113. package/dist/hooks/use-media-query.d.ts +13 -0
  114. package/dist/index.d.ts +38 -0
  115. package/dist/index.js +13103 -0
  116. package/dist/integrations/code-highlight/code-highlight.d.ts +21 -0
  117. package/dist/integrations/code-highlight/code-highlight.meta.d.ts +2 -0
  118. package/dist/integrations/code-highlight/highlighter.d.ts +6 -0
  119. package/dist/integrations/code-highlight/index.d.ts +3 -0
  120. package/dist/integrations/code-highlight.js +97 -0
  121. package/dist/integrations/image-display-options/image-display-options-view.d.ts +22 -0
  122. package/dist/integrations/image-display-options/image-display-options-view.utils.d.ts +40 -0
  123. package/dist/integrations/image-display-options/image-display-options.d.ts +29 -0
  124. package/dist/integrations/image-display-options/image-display-options.meta.d.ts +2 -0
  125. package/dist/integrations/image-display-options/index.d.ts +2 -0
  126. package/dist/integrations/image-display-options.js +319 -0
  127. package/dist/llms/gen-llms.d.ts +1 -0
  128. package/dist/meta-B8C51eyL.js +74 -0
  129. package/dist/provider/index.d.ts +1 -0
  130. package/dist/provider/web-ui-provider.d.ts +6 -0
  131. package/dist/style.css +2 -0
  132. package/dist/tabs-DqBFSqq6.js +3789 -0
  133. package/dist/tokens/apply.d.ts +55 -0
  134. package/dist/tokens/control-registry.d.ts +10 -0
  135. package/dist/tokens/token-registry.d.ts +13 -0
  136. package/dist/tokens/types.d.ts +71 -0
  137. package/dist/tokens/use-token-controls.d.ts +36 -0
  138. package/dist/types/docgen.d.ts +17 -0
  139. package/dist/types/meta.d.ts +108 -0
  140. package/dist/types/theme.d.ts +3 -0
  141. package/package.json +139 -0
  142. package/src/docgen/doc.gen.json +4695 -0
  143. package/src/llms/llms.gen.txt +176 -0
  144. package/src/llms/skills/imf-web-ui/SKILL.md +46 -0
  145. package/src/llms/skills/imf-web-ui-components/SKILL.md +100 -0
  146. package/src/llms/skills/imf-web-ui-frontend-patterns/SKILL.md +67 -0
  147. package/src/llms/skills/imf-web-ui-frontend-patterns/references/react-patterns.md +94 -0
  148. package/src/llms/skills/imf-web-ui-setup/SKILL.md +30 -0
  149. package/src/llms/skills/imf-web-ui-ux/SKILL.md +103 -0
  150. package/src/llms/skills/imf-web-ui-ux/references/forms.md +48 -0
  151. package/src/llms/skills/imf-web-ui-ux/references/usability-heuristics.md +29 -0
  152. package/src/llms/skills/imf-web-ui-ux/references/visual-design.md +38 -0
@@ -0,0 +1,21 @@
1
+ import { Code } from '../../components/code';
2
+ import { SupportedLanguage } from './highlighter';
3
+ type BlockProps = Omit<React.ComponentProps<typeof Code.Block>, "highlighted" | "language"> & {
4
+ /** Language of `children`: grammar for tokenization and label for the corner notch. Omit to hide the notch and skip highlighting. */
5
+ language?: SupportedLanguage;
6
+ };
7
+ /** Code.Block — the core `Code.Block` with TanStack Highlight tokens filling its `highlighted` slot. */
8
+ export declare function Block({ language, children, ...props }: BlockProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare namespace Block {
10
+ var displayName: string;
11
+ }
12
+ type InlineProps = Omit<React.ComponentProps<typeof Code.Inline>, "highlighted"> & {
13
+ /** Grammar used to tokenize the fragment. Purely visual — the chip shows no language label. Omit for plain text. */
14
+ language?: SupportedLanguage;
15
+ };
16
+ /** Code.Inline — the core `Code.Inline` with TanStack Highlight tokens filling its `highlighted` slot. */
17
+ export declare function Inline({ language, children, ...props }: InlineProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare namespace Inline {
19
+ var displayName: string;
20
+ }
21
+ export { InlineLink } from '../../components/code/code';
@@ -0,0 +1,2 @@
1
+ import { ComponentMeta } from '../../types/meta';
2
+ export declare const codeHighlightMeta: ComponentMeta;
@@ -0,0 +1,6 @@
1
+ export declare const SUPPORTED_LANGUAGES: readonly ["tsx", "ts", "css", "shell", "json"];
2
+ declare const LANGUAGE_ALIASES: readonly ["typescript", "bash", "sh", "zsh", "shellscript", "scss"];
3
+ export type SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number] | (typeof LANGUAGE_ALIASES)[number];
4
+ export declare function isSupportedLanguage(value: string): value is SupportedLanguage;
5
+ export declare function highlightToHtml(code: string, language: SupportedLanguage): string;
6
+ export {};
@@ -0,0 +1,3 @@
1
+ export * as Code from './code-highlight';
2
+ export { SUPPORTED_LANGUAGES, isSupportedLanguage, type SupportedLanguage } from './highlighter';
3
+ export { codeHighlightMeta } from './code-highlight.meta';
@@ -0,0 +1,97 @@
1
+ import { a as e, t } from "../meta-B8C51eyL.js";
2
+ import { i as n, n as r, r as i } from "../code-qBbqAHK-.js";
3
+ import { useMemo as a } from "react";
4
+ import { jsx as o } from "react/jsx-runtime";
5
+ import { createHighlighter as s, renderNodesToHtml as c, renderTokens as l } from "@tanstack/highlight/core";
6
+ import { css as u } from "@tanstack/highlight/languages/css";
7
+ import { json as d } from "@tanstack/highlight/languages/json";
8
+ import { plaintext as f } from "@tanstack/highlight/languages/plaintext";
9
+ import { shell as p } from "@tanstack/highlight/languages/shell";
10
+ import { ts as m } from "@tanstack/highlight/languages/ts";
11
+ import { tsx as h } from "@tanstack/highlight/languages/tsx";
12
+ //#region src/integrations/code-highlight/highlighter.ts
13
+ var g = [
14
+ "tsx",
15
+ "ts",
16
+ "css",
17
+ "shell",
18
+ "json"
19
+ ], _ = [
20
+ "typescript",
21
+ "bash",
22
+ "sh",
23
+ "zsh",
24
+ "shellscript",
25
+ "scss"
26
+ ], v = [...g, ..._];
27
+ function y(e) {
28
+ return v.includes(e);
29
+ }
30
+ var b = {
31
+ shellscript: "shell",
32
+ scss: "css"
33
+ }, x = s({
34
+ languages: [
35
+ h,
36
+ m,
37
+ u,
38
+ p,
39
+ d,
40
+ f
41
+ ],
42
+ fallbackLanguage: "plaintext"
43
+ });
44
+ function S(e, t) {
45
+ let n = b[t] ?? t, { tokens: r } = x.tokenize(e, { lang: n });
46
+ return c(l(r));
47
+ }
48
+ //#endregion
49
+ //#region src/integrations/code-highlight/code-highlight.tsx
50
+ var C = /* @__PURE__ */ e({
51
+ Block: () => T,
52
+ Inline: () => E,
53
+ InlineLink: () => n
54
+ });
55
+ function w(e, t) {
56
+ return a(() => {
57
+ if (!(t == null || e === "")) return /* @__PURE__ */ o("span", { dangerouslySetInnerHTML: { __html: S(e, t) } });
58
+ }, [e, t]);
59
+ }
60
+ function T({ language: e, children: t, ...n }) {
61
+ let i = w(t, e);
62
+ return /* @__PURE__ */ o(r, {
63
+ ...n,
64
+ language: e,
65
+ highlighted: i,
66
+ children: t
67
+ });
68
+ }
69
+ T.displayName = "Code.Block";
70
+ function E({ language: e, children: t, ...n }) {
71
+ let r = w(t, e);
72
+ return /* @__PURE__ */ o(i, {
73
+ ...n,
74
+ highlighted: r,
75
+ children: t
76
+ });
77
+ }
78
+ E.displayName = "Code.Inline";
79
+ //#endregion
80
+ //#region src/integrations/code-highlight/code-highlight.meta.ts
81
+ var D = {
82
+ name: "CodeHighlight",
83
+ category: t.display,
84
+ status: "experimental",
85
+ namespace: !0,
86
+ description: "Syntax-highlighted drop-in for the Code parts — the same Code.Block and Code.Inline, with TanStack Highlight token coloring that follows the color scheme. Imported from @imfusion/web-ui/integrations/code-highlight; requires the @tanstack/highlight peer.",
87
+ origin: "adapted",
88
+ internalDependencies: ["Code"],
89
+ upstream: {
90
+ name: "TanStack Highlight",
91
+ websiteLink: "https://tanstack.com/highlight",
92
+ docLink: "https://tanstack.com/highlight/latest/docs/overview",
93
+ runtimeDependencies: ["@tanstack/highlight"]
94
+ }
95
+ };
96
+ //#endregion
97
+ export { C as Code, g as SUPPORTED_LANGUAGES, D as codeHighlightMeta, y as isSupportedLanguage };
@@ -0,0 +1,22 @@
1
+ import { ChangeHandler, IntensityRange, Options, Ranges, Variant } from './image-display-options-view.utils';
2
+ type ImageDisplayOptionsViewProps = React.HTMLAttributes<HTMLDivElement> & {
3
+ variant?: Variant;
4
+ /** Current option values for both dimensions. */
5
+ options: Options;
6
+ /** Dataset intensity range `[min, max]`; window/level slider bounds derive from it. */
7
+ intensityRange: IntensityRange;
8
+ /** Optional per-slider bound overrides, merged over the derived defaults. */
9
+ ranges?: Ranges;
10
+ /** Called with the dimension and the changed subset when a control moves. */
11
+ onOptionsChange: ChangeHandler;
12
+ };
13
+ /**
14
+ * ImageDisplayOptionsView - the SDK-free presentational surface behind
15
+ * `ImageDisplayOptions`: the same controls, driven by plain props instead of
16
+ * live SDK handles.
17
+ */
18
+ export declare function ImageDisplayOptionsView({ variant, options, intensityRange, ranges, onOptionsChange, className, ...props }: ImageDisplayOptionsViewProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare namespace ImageDisplayOptionsView {
20
+ var displayName: string;
21
+ }
22
+ export {};
@@ -0,0 +1,40 @@
1
+ import { DisplayOptions2d, DisplayOptions3d, SharedImageSet } from '@imfusion/sdk';
2
+ export type Variant = "default" | "horizontal" | "horizontal-compact";
3
+ export type Dimension = "2d" | "3d";
4
+ type Options2d = Pick<DisplayOptions2d, "window" | "level" | "gamma" | "invert">;
5
+ type Options3d = Pick<DisplayOptions3d, "window" | "level" | "invert">;
6
+ export type Options = {
7
+ "2d": Options2d;
8
+ "3d": Options3d;
9
+ };
10
+ /** Dataset intensity range `[min, max]` in the original pixel domain. */
11
+ export type IntensityRange = Readonly<ReturnType<SharedImageSet["minmaxIntensityOriginal"]>>;
12
+ export type Patch<D extends Dimension> = Partial<Options[D]>;
13
+ export type ChangeHandler = <D extends Dimension>(dimension: D, patch: Patch<D>) => void;
14
+ export type FieldSpec = {
15
+ key: "window" | "level" | "gamma";
16
+ label: string;
17
+ min: number;
18
+ max: number;
19
+ step: number;
20
+ format: Intl.NumberFormatOptions;
21
+ };
22
+ /** Per-slider bounds override. */
23
+ type SliderRange = {
24
+ min?: number;
25
+ max?: number;
26
+ step?: number;
27
+ };
28
+ /** Optional overrides for the window/level/gamma slider bounds. */
29
+ export type Ranges = Partial<Record<FieldSpec["key"], SliderRange>>;
30
+ /** Determines a slider step from the intensity range. */
31
+ export declare function sliderStep(range: number): number;
32
+ /** Returns the number of decimal places needed to display a slider step. */
33
+ export declare function fractionDigits(step: number): number;
34
+ /** Derives the window, level, and gamma field specifications for an intensity range. */
35
+ export declare function fieldsForRange([min, max]: IntensityRange, ranges?: Ranges): Record<Dimension, FieldSpec[]>;
36
+ /** Builds a single-field patch for an option change. */
37
+ export declare function patchFor(key: FieldSpec["key"], value: number): Partial<Options2d>;
38
+ /** Gets a field value from either the 2D or 3D display options. */
39
+ export declare function valueFor(opts: Options2d | Options3d, key: FieldSpec["key"]): number;
40
+ export {};
@@ -0,0 +1,29 @@
1
+ import { SharedImageSet } from '@imfusion/sdk';
2
+ import { Ranges, Variant } from './image-display-options-view.utils';
3
+ type Props = React.HTMLAttributes<HTMLDivElement> & {
4
+ /**
5
+ * The dataset whose display options are edited.
6
+ */
7
+ data: SharedImageSet;
8
+ /**
9
+ * Layout: a stacked card (`default`), a horizontal row with side tabs
10
+ * (`horizontal`), or a flat compact row (`horizontal-compact`).
11
+ */
12
+ variant?: Variant;
13
+ /**
14
+ * Override individual slider bounds.
15
+ * Merged over the defaults, which are driven from the dataset's intensity domain.
16
+ */
17
+ ranges?: Ranges;
18
+ };
19
+ /**
20
+ * ImageDisplayOptions - a panel or toolbar of controls bound to an image
21
+ * dataset's display options.
22
+ *
23
+ * Must render inside an `ImFusionProvider`.
24
+ */
25
+ export declare function ImageDisplayOptions({ data, variant, ranges, ...props }: Props): import("react/jsx-runtime").JSX.Element;
26
+ export declare namespace ImageDisplayOptions {
27
+ var displayName: string;
28
+ }
29
+ export {};
@@ -0,0 +1,2 @@
1
+ import { ComponentMeta } from '../../types/meta';
2
+ export declare const imageDisplayOptionsMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ export { ImageDisplayOptions } from './image-display-options';
2
+ export { imageDisplayOptionsMeta } from './image-display-options.meta';
@@ -0,0 +1,319 @@
1
+ import { n as e, t } from "../meta-B8C51eyL.js";
2
+ import { C as n, S as r, a as i, b as a, c as o, d as s, g as c, h as l, i as u, l as d, n as f, o as p, p as m, r as h, t as g, v as _, w as v, x as y, y as b } from "../tabs-DqBFSqq6.js";
3
+ import { useId as x, useMemo as S, useState as C } from "react";
4
+ import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
5
+ import { useDisplayOptions2d as D, useDisplayOptions3d as O } from "@imfusion/sdk-react";
6
+ var k = {
7
+ compactStrip: "imf-ui-image-display-options-module-compactStrip",
8
+ horizontalPanel: "imf-ui-image-display-options-module-horizontalPanel",
9
+ horizontalTabs: "imf-ui-image-display-options-module-horizontalTabs",
10
+ invertLabel: "imf-ui-image-display-options-module-invertLabel",
11
+ invertRow: "imf-ui-image-display-options-module-invertRow",
12
+ root: "imf-ui-image-display-options-module-root",
13
+ rowField: "imf-ui-image-display-options-module-rowField",
14
+ segment: "imf-ui-image-display-options-module-segment",
15
+ strip: "imf-ui-image-display-options-module-strip"
16
+ }, A = {
17
+ key: "gamma",
18
+ label: "Gamma",
19
+ min: .1,
20
+ max: 3,
21
+ step: .1,
22
+ format: { maximumFractionDigits: 1 }
23
+ };
24
+ function j(e) {
25
+ return e > 0 ? 10 ** Math.floor(Math.log10(e / 1e3)) : 1;
26
+ }
27
+ function M(e) {
28
+ return !(e > 0) || e >= 1 ? 0 : Math.ceil(-Math.log10(e));
29
+ }
30
+ function N([e, t], n) {
31
+ let r = t - e, i = j(r), a = { maximumFractionDigits: M(i) }, o = (e) => {
32
+ let t = n?.[e.key];
33
+ if (!t) return e;
34
+ let r = t.step ?? e.step;
35
+ return {
36
+ ...e,
37
+ min: t.min ?? e.min,
38
+ max: t.max ?? e.max,
39
+ step: r,
40
+ format: t.step === void 0 ? e.format : { maximumFractionDigits: M(r) }
41
+ };
42
+ }, s = o({
43
+ key: "window",
44
+ label: "Window",
45
+ min: i,
46
+ max: Math.max(r * 2, i * 2),
47
+ step: i,
48
+ format: a
49
+ }), c = o({
50
+ key: "level",
51
+ label: "Level",
52
+ min: e,
53
+ max: t,
54
+ step: i,
55
+ format: a
56
+ });
57
+ return {
58
+ "2d": [
59
+ s,
60
+ c,
61
+ o(A)
62
+ ],
63
+ "3d": [s, c]
64
+ };
65
+ }
66
+ function P(e, t) {
67
+ return e === "window" ? { window: t } : e === "level" ? { level: t } : { gamma: t };
68
+ }
69
+ function F(e, t) {
70
+ return t === "window" ? e.window : t === "level" ? e.level : "gamma" in e ? e.gamma : 0;
71
+ }
72
+ //#endregion
73
+ //#region src/integrations/image-display-options/image-display-options-view.tsx
74
+ var I = e(k.root);
75
+ function L({ spec: e, value: t, row: i, onChange: o }) {
76
+ let s = /* @__PURE__ */ E(y, {
77
+ value: t,
78
+ min: e.min,
79
+ max: e.max,
80
+ step: e.step,
81
+ format: e.format,
82
+ onValueChange: (e) => {
83
+ o(typeof e == "number" ? e : e[0]);
84
+ },
85
+ children: [/* @__PURE__ */ E(d, {
86
+ justify: "between",
87
+ children: [/* @__PURE__ */ T(a, { children: e.label }), /* @__PURE__ */ T(v, {})]
88
+ }), /* @__PURE__ */ T(_, { children: /* @__PURE__ */ E(n, { children: [/* @__PURE__ */ T(b, {}), /* @__PURE__ */ T(r, { "aria-label": e.label })] }) })]
89
+ });
90
+ return i ? /* @__PURE__ */ T("div", {
91
+ className: k.rowField,
92
+ children: s
93
+ }) : s;
94
+ }
95
+ function R({ checked: e, row: t, onChange: n }) {
96
+ let r = x();
97
+ return /* @__PURE__ */ E(d, {
98
+ align: "center",
99
+ justify: t ? "start" : "between",
100
+ gap: "2",
101
+ className: k.invertRow,
102
+ children: [/* @__PURE__ */ T("span", {
103
+ id: r,
104
+ className: k.invertLabel,
105
+ children: "Invert"
106
+ }), /* @__PURE__ */ T(l, {
107
+ "aria-labelledby": r,
108
+ checked: e,
109
+ onCheckedChange: (e) => {
110
+ n(e);
111
+ },
112
+ children: /* @__PURE__ */ T(c, {})
113
+ })]
114
+ });
115
+ }
116
+ function z({ active: e, onChange: t }) {
117
+ return /* @__PURE__ */ E(s, {
118
+ className: k.segment,
119
+ "aria-label": "Display dimension",
120
+ value: [e],
121
+ onValueChange: (e) => {
122
+ let n = e[0];
123
+ (n === "2d" || n === "3d") && t(n);
124
+ },
125
+ children: [/* @__PURE__ */ T(m, {
126
+ value: "2d",
127
+ children: "2D"
128
+ }), /* @__PURE__ */ T(m, {
129
+ value: "3d",
130
+ children: "3D"
131
+ })]
132
+ });
133
+ }
134
+ function B({ dimension: e, fields: t, options: n, row: r, onChange: i }) {
135
+ let a = n[e];
136
+ return /* @__PURE__ */ E(w, { children: [t.map((t) => /* @__PURE__ */ T(L, {
137
+ spec: t,
138
+ value: F(a, t.key),
139
+ row: r,
140
+ onChange: (n) => {
141
+ i(e, P(t.key, n));
142
+ }
143
+ }, t.key)), /* @__PURE__ */ T(R, {
144
+ checked: a.invert,
145
+ row: r,
146
+ onChange: (t) => {
147
+ i(e, { invert: t });
148
+ }
149
+ })] });
150
+ }
151
+ function V({ variant: e = "default", options: t, intensityRange: n, ranges: r, onOptionsChange: a, className: s, ...c }) {
152
+ let [l, m] = C("2d"), _ = N(n, r), v = (e) => {
153
+ m(e === "3d" ? "3d" : "2d");
154
+ };
155
+ return /* @__PURE__ */ T("div", {
156
+ ...c,
157
+ "data-imf-ui-component": "ImageDisplayOptions",
158
+ className: I({ className: s }),
159
+ children: e === "default" ? /* @__PURE__ */ E(i, {
160
+ value: l,
161
+ onValueChange: v,
162
+ children: [/* @__PURE__ */ E(f, { children: [
163
+ /* @__PURE__ */ T(p, {
164
+ value: "2d",
165
+ children: "2D Slices"
166
+ }),
167
+ /* @__PURE__ */ T(p, {
168
+ value: "3d",
169
+ children: "3D Volume"
170
+ }),
171
+ /* @__PURE__ */ T(g, {})
172
+ ] }), /* @__PURE__ */ E(u, { children: [/* @__PURE__ */ T(h, {
173
+ value: "2d",
174
+ children: /* @__PURE__ */ T(o, {
175
+ gap: "3",
176
+ children: /* @__PURE__ */ T(B, {
177
+ dimension: "2d",
178
+ fields: _["2d"],
179
+ options: t,
180
+ row: !1,
181
+ onChange: a
182
+ })
183
+ })
184
+ }), /* @__PURE__ */ T(h, {
185
+ value: "3d",
186
+ children: /* @__PURE__ */ T(o, {
187
+ gap: "3",
188
+ children: /* @__PURE__ */ T(B, {
189
+ dimension: "3d",
190
+ fields: _["3d"],
191
+ options: t,
192
+ row: !1,
193
+ onChange: a
194
+ })
195
+ })
196
+ })] })]
197
+ }) : e === "horizontal" ? /* @__PURE__ */ E(i, {
198
+ className: k.horizontalTabs,
199
+ orientation: "vertical",
200
+ value: l,
201
+ onValueChange: v,
202
+ children: [/* @__PURE__ */ E(f, {
203
+ fill: !0,
204
+ children: [
205
+ /* @__PURE__ */ T(p, {
206
+ value: "2d",
207
+ children: "2D"
208
+ }),
209
+ /* @__PURE__ */ T(p, {
210
+ value: "3d",
211
+ children: "3D"
212
+ }),
213
+ /* @__PURE__ */ T(g, {})
214
+ ]
215
+ }), /* @__PURE__ */ E(u, {
216
+ className: k.horizontalPanel,
217
+ children: [/* @__PURE__ */ T(h, {
218
+ value: "2d",
219
+ children: /* @__PURE__ */ T(d, {
220
+ align: "center",
221
+ gap: "3",
222
+ className: k.strip,
223
+ children: /* @__PURE__ */ T(B, {
224
+ dimension: "2d",
225
+ fields: _["2d"],
226
+ options: t,
227
+ row: !0,
228
+ onChange: a
229
+ })
230
+ })
231
+ }), /* @__PURE__ */ T(h, {
232
+ value: "3d",
233
+ children: /* @__PURE__ */ T(d, {
234
+ align: "center",
235
+ gap: "3",
236
+ className: k.strip,
237
+ children: /* @__PURE__ */ T(B, {
238
+ dimension: "3d",
239
+ fields: _["3d"],
240
+ options: t,
241
+ row: !0,
242
+ onChange: a
243
+ })
244
+ })
245
+ })]
246
+ })]
247
+ }) : /* @__PURE__ */ E(d, {
248
+ align: "center",
249
+ gap: "3",
250
+ className: k.compactStrip,
251
+ children: [/* @__PURE__ */ T(z, {
252
+ active: l,
253
+ onChange: m
254
+ }), /* @__PURE__ */ T(B, {
255
+ dimension: l,
256
+ fields: _[l],
257
+ options: t,
258
+ row: !0,
259
+ onChange: a
260
+ })]
261
+ })
262
+ });
263
+ }
264
+ V.displayName = "ImageDisplayOptionsView";
265
+ //#endregion
266
+ //#region src/integrations/image-display-options/image-display-options.tsx
267
+ function H({ data: e, variant: t = "default", ranges: n, ...r }) {
268
+ let i = D(e), a = O(e), o = {
269
+ "2d": {
270
+ window: i.window,
271
+ level: i.level,
272
+ gamma: i.gamma,
273
+ invert: i.invert
274
+ },
275
+ "3d": {
276
+ window: a.window,
277
+ level: a.level,
278
+ invert: a.invert
279
+ }
280
+ }, s = S(() => e.minmaxIntensityOriginal(), [e]);
281
+ return /* @__PURE__ */ T(V, {
282
+ ...r,
283
+ variant: t,
284
+ options: o,
285
+ intensityRange: s,
286
+ ranges: n,
287
+ onOptionsChange: (e, t) => {
288
+ Object.assign(e === "2d" ? i : a, t);
289
+ }
290
+ });
291
+ }
292
+ H.displayName = "ImageDisplayOptions";
293
+ //#endregion
294
+ //#region src/integrations/image-display-options/image-display-options.meta.ts
295
+ var U = {
296
+ name: "ImageDisplayOptions",
297
+ category: t.inputs,
298
+ status: "experimental",
299
+ description: "A panel or toolbar of controls bound to an image dataset's display options.",
300
+ origin: "adapted",
301
+ internalDependencies: [
302
+ "Tabs",
303
+ "Slider",
304
+ "Switch",
305
+ "ToggleGroup",
306
+ "Toggle",
307
+ "Row",
308
+ "Stack"
309
+ ],
310
+ upstream: {
311
+ name: "ImFusion Web SDK",
312
+ websiteLink: "https://www.imfusion.com/",
313
+ docLink: "https://docs.imfusion.com/",
314
+ llmDocLink: "https://docs.imfusion.com/",
315
+ runtimeDependencies: ["@imfusion/sdk", "@imfusion/sdk-react"]
316
+ }
317
+ };
318
+ //#endregion
319
+ export { H as ImageDisplayOptions, U as imageDisplayOptionsMeta };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,74 @@
1
+ //#region \0rolldown/runtime.js
2
+ var e = Object.defineProperty, t = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), n = (t, n) => {
3
+ let r = {};
4
+ for (var i in t) e(r, i, {
5
+ get: t[i],
6
+ enumerable: !0
7
+ });
8
+ return n || e(r, Symbol.toStringTag, { value: "Module" }), r;
9
+ };
10
+ //#endregion
11
+ //#region node_modules/clsx/dist/clsx.mjs
12
+ function r(e) {
13
+ var t, n, i = "";
14
+ if (typeof e == "string" || typeof e == "number") i += e;
15
+ else if (typeof e == "object") if (Array.isArray(e)) {
16
+ var a = e.length;
17
+ for (t = 0; t < a; t++) e[t] && (n = r(e[t])) && (i && (i += " "), i += n);
18
+ } else for (n in e) e[n] && (i && (i += " "), i += n);
19
+ return i;
20
+ }
21
+ function i() {
22
+ for (var e, t, n = 0, i = "", a = arguments.length; n < a; n++) (e = arguments[n]) && (t = r(e)) && (i && (i += " "), i += t);
23
+ return i;
24
+ }
25
+ //#endregion
26
+ //#region node_modules/class-variance-authority/dist/index.mjs
27
+ var a = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, o = i, s = (e, t) => (n) => {
28
+ if (t?.variants == null) return o(e, n?.class, n?.className);
29
+ let { variants: r, defaultVariants: i } = t, s = Object.keys(r).map((e) => {
30
+ let t = n?.[e], o = i?.[e];
31
+ if (t === null) return null;
32
+ let s = a(t) || a(o);
33
+ return r[e][s];
34
+ }), c = n && Object.entries(n).reduce((e, t) => {
35
+ let [n, r] = t;
36
+ return r === void 0 || (e[n] = r), e;
37
+ }, {});
38
+ return o(e, s, t?.compoundVariants?.reduce((e, t) => {
39
+ let { class: n, className: r, ...a } = t;
40
+ return Object.entries(a).every((e) => {
41
+ let [t, n] = e;
42
+ return Array.isArray(n) ? n.includes({
43
+ ...i,
44
+ ...c
45
+ }[t]) : {
46
+ ...i,
47
+ ...c
48
+ }[t] === n;
49
+ }) ? [
50
+ ...e,
51
+ n,
52
+ r
53
+ ] : e;
54
+ }, []), n?.class, n?.className);
55
+ }, c = {
56
+ buttons: {
57
+ id: "buttons",
58
+ label: "Buttons"
59
+ },
60
+ inputs: {
61
+ id: "inputs",
62
+ label: "Inputs"
63
+ },
64
+ layout: {
65
+ id: "layout",
66
+ label: "Layout"
67
+ },
68
+ display: {
69
+ id: "display",
70
+ label: "Display"
71
+ }
72
+ };
73
+ //#endregion
74
+ export { n as a, t as i, s as n, o as r, c as t };
@@ -0,0 +1 @@
1
+ export { WebUIProvider } from './web-ui-provider';
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ interface Props {
3
+ children: ReactNode;
4
+ }
5
+ export declare function WebUIProvider({ children }: Props): import("react/jsx-runtime").JSX.Element;
6
+ export {};