@imfusion/web-ui 0.8.1-dev.17.gcbf0282e → 0.8.1-dev.18.g2355b181

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.
@@ -0,0 +1,295 @@
1
+ import { t as e } from "./chunk-DmhlhrBa.js";
2
+ import { l as t, u as n } from "./slider-gyIYWSy3.js";
3
+ import { cva as r } from "class-variance-authority";
4
+ import { jsx as i } from "react/jsx-runtime";
5
+ import { Children as a, useCallback as o } from "react";
6
+ import { Switch as s } from "@base-ui/react/switch";
7
+ import { Toggle as c } from "@base-ui/react/toggle";
8
+ import { ToggleGroup as l } from "@base-ui/react/toggle-group";
9
+ import { Tabs as u } from "@base-ui/react/tabs";
10
+ var d = {
11
+ root: "imf-ui-switch-module-root",
12
+ thumb: "imf-ui-switch-module-thumb"
13
+ }, f = /* @__PURE__ */ e({
14
+ Root: () => h,
15
+ Thumb: () => g
16
+ }), p = r(d.root), m = r(d.thumb);
17
+ function h(e) {
18
+ return /* @__PURE__ */ i(s.Root, {
19
+ ...e,
20
+ "data-imf-ui-component": "Switch.Root",
21
+ className: (n) => p({ className: t(e.className, n) })
22
+ });
23
+ }
24
+ h.displayName = "Switch.Root";
25
+ function g(e) {
26
+ return /* @__PURE__ */ i(s.Thumb, {
27
+ ...e,
28
+ "data-imf-ui-component": "Switch.Thumb",
29
+ className: (n) => m({ className: t(e.className, n) })
30
+ });
31
+ }
32
+ g.displayName = "Switch.Thumb";
33
+ //#endregion
34
+ //#region src/components/toggle/toggle.tsx
35
+ var _ = r({ root: "imf-ui-toggle-module-root" }.root), v = 2;
36
+ function y(e) {
37
+ let t = 0;
38
+ return a.forEach(e, (e) => {
39
+ typeof e == "string" || typeof e == "number" ? t += String(e).trim().length : e != null && typeof e != "boolean" && (t += v);
40
+ }), t;
41
+ }
42
+ function b({ style: e, children: r, ...a }) {
43
+ let o = {
44
+ "--glyph-count": y(r),
45
+ "--max-glyphs": v
46
+ };
47
+ return /* @__PURE__ */ i(c, {
48
+ ...a,
49
+ "data-imf-ui-component": "Toggle",
50
+ style: (t) => ({
51
+ ...o,
52
+ ...n(e, t)
53
+ }),
54
+ className: (e) => _({ className: t(a.className, e) }),
55
+ children: r
56
+ });
57
+ }
58
+ //#endregion
59
+ //#region src/components/toggle-group/toggle-group.tsx
60
+ var x = r({ root: "imf-ui-toggle-group-module-root" }.root);
61
+ function S(e) {
62
+ return /* @__PURE__ */ i(l, {
63
+ ...e,
64
+ "data-imf-ui-component": "ToggleGroup",
65
+ className: (n) => x({ className: t(e.className, n) })
66
+ });
67
+ }
68
+ var C = {
69
+ alignCenter: "imf-ui-row-module-alignCenter",
70
+ alignEnd: "imf-ui-row-module-alignEnd",
71
+ alignStart: "imf-ui-row-module-alignStart",
72
+ alignStretch: "imf-ui-row-module-alignStretch",
73
+ gap1: "imf-ui-row-module-gap1",
74
+ gap10: "imf-ui-row-module-gap10",
75
+ gap2: "imf-ui-row-module-gap2",
76
+ gap3: "imf-ui-row-module-gap3",
77
+ gap4: "imf-ui-row-module-gap4",
78
+ gap5: "imf-ui-row-module-gap5",
79
+ gap6: "imf-ui-row-module-gap6",
80
+ gap7: "imf-ui-row-module-gap7",
81
+ gap8: "imf-ui-row-module-gap8",
82
+ gap9: "imf-ui-row-module-gap9",
83
+ justifyAround: "imf-ui-row-module-justifyAround",
84
+ justifyBetween: "imf-ui-row-module-justifyBetween",
85
+ justifyCenter: "imf-ui-row-module-justifyCenter",
86
+ justifyEnd: "imf-ui-row-module-justifyEnd",
87
+ justifyEvenly: "imf-ui-row-module-justifyEvenly",
88
+ justifyStart: "imf-ui-row-module-justifyStart",
89
+ root: "imf-ui-row-module-root",
90
+ wrap: "imf-ui-row-module-wrap"
91
+ }, w = r(C.root, { variants: {
92
+ gap: {
93
+ 1: C.gap1,
94
+ 2: C.gap2,
95
+ 3: C.gap3,
96
+ 4: C.gap4,
97
+ 5: C.gap5,
98
+ 6: C.gap6,
99
+ 7: C.gap7,
100
+ 8: C.gap8,
101
+ 9: C.gap9,
102
+ 10: C.gap10
103
+ },
104
+ align: {
105
+ start: C.alignStart,
106
+ center: C.alignCenter,
107
+ end: C.alignEnd,
108
+ stretch: C.alignStretch
109
+ },
110
+ justify: {
111
+ start: C.justifyStart,
112
+ center: C.justifyCenter,
113
+ end: C.justifyEnd,
114
+ between: C.justifyBetween,
115
+ around: C.justifyAround,
116
+ evenly: C.justifyEvenly
117
+ },
118
+ wrap: {
119
+ true: C.wrap,
120
+ false: null
121
+ }
122
+ } });
123
+ function T({ gap: e = "2", align: t = "stretch", justify: n = "start", wrap: r = !1, ...a }) {
124
+ return /* @__PURE__ */ i("div", {
125
+ ...a,
126
+ "data-imf-ui-component": "Row",
127
+ className: w({
128
+ gap: e,
129
+ align: t,
130
+ justify: n,
131
+ wrap: r,
132
+ className: a.className
133
+ })
134
+ });
135
+ }
136
+ var E = {
137
+ alignCenter: "imf-ui-stack-module-alignCenter",
138
+ alignEnd: "imf-ui-stack-module-alignEnd",
139
+ alignStart: "imf-ui-stack-module-alignStart",
140
+ alignStretch: "imf-ui-stack-module-alignStretch",
141
+ gap0: "imf-ui-stack-module-gap0",
142
+ gap1: "imf-ui-stack-module-gap1",
143
+ gap10: "imf-ui-stack-module-gap10",
144
+ gap2: "imf-ui-stack-module-gap2",
145
+ gap3: "imf-ui-stack-module-gap3",
146
+ gap4: "imf-ui-stack-module-gap4",
147
+ gap5: "imf-ui-stack-module-gap5",
148
+ gap6: "imf-ui-stack-module-gap6",
149
+ gap7: "imf-ui-stack-module-gap7",
150
+ gap8: "imf-ui-stack-module-gap8",
151
+ gap9: "imf-ui-stack-module-gap9",
152
+ justifyAround: "imf-ui-stack-module-justifyAround",
153
+ justifyBetween: "imf-ui-stack-module-justifyBetween",
154
+ justifyCenter: "imf-ui-stack-module-justifyCenter",
155
+ justifyEnd: "imf-ui-stack-module-justifyEnd",
156
+ justifyEvenly: "imf-ui-stack-module-justifyEvenly",
157
+ justifyStart: "imf-ui-stack-module-justifyStart",
158
+ root: "imf-ui-stack-module-root"
159
+ }, D = r(E.root, { variants: {
160
+ gap: {
161
+ 0: E.gap0,
162
+ 1: E.gap1,
163
+ 2: E.gap2,
164
+ 3: E.gap3,
165
+ 4: E.gap4,
166
+ 5: E.gap5,
167
+ 6: E.gap6,
168
+ 7: E.gap7,
169
+ 8: E.gap8,
170
+ 9: E.gap9,
171
+ 10: E.gap10
172
+ },
173
+ align: {
174
+ start: E.alignStart,
175
+ center: E.alignCenter,
176
+ end: E.alignEnd,
177
+ stretch: E.alignStretch
178
+ },
179
+ justify: {
180
+ start: E.justifyStart,
181
+ center: E.justifyCenter,
182
+ end: E.justifyEnd,
183
+ between: E.justifyBetween,
184
+ around: E.justifyAround,
185
+ evenly: E.justifyEvenly
186
+ }
187
+ } });
188
+ function O({ gap: e = "4", align: t = "stretch", justify: n = "start", ...r }) {
189
+ return /* @__PURE__ */ i("div", {
190
+ ...r,
191
+ "data-imf-ui-component": "Stack",
192
+ className: D({
193
+ gap: e,
194
+ align: t,
195
+ justify: n,
196
+ className: r.className
197
+ })
198
+ });
199
+ }
200
+ var k = {
201
+ indicator: "imf-ui-tabs-module-indicator",
202
+ list: "imf-ui-tabs-module-list",
203
+ listFill: "imf-ui-tabs-module-listFill",
204
+ panel: "imf-ui-tabs-module-panel",
205
+ panelViewport: "imf-ui-tabs-module-panelViewport",
206
+ root: "imf-ui-tabs-module-root",
207
+ tab: "imf-ui-tabs-module-tab"
208
+ }, A = /* @__PURE__ */ e({
209
+ Indicator: () => H,
210
+ List: () => B,
211
+ Panel: () => W,
212
+ PanelViewport: () => U,
213
+ Root: () => z,
214
+ Tab: () => V
215
+ }), j = r(k.list, { variants: { fill: {
216
+ true: k.listFill,
217
+ false: null
218
+ } } }), M = r(k.root), N = r(k.tab), P = r(k.indicator), F = r(k.panelViewport), I = r(k.panel);
219
+ function L(e, t) {
220
+ typeof e == "function" ? e(t) : e && (e.current = t);
221
+ }
222
+ function R(e) {
223
+ let t = new ResizeObserver(() => {
224
+ let t = e.dataset.orientation === "vertical" ? e.scrollHeight > e.clientHeight : e.scrollWidth > e.clientWidth;
225
+ e.toggleAttribute("data-overflowing", t);
226
+ }), n = () => {
227
+ t.disconnect(), t.observe(e);
228
+ for (let n of e.children) t.observe(n);
229
+ }, r = new MutationObserver(n);
230
+ return r.observe(e, { childList: !0 }), n(), () => {
231
+ t.disconnect(), r.disconnect();
232
+ };
233
+ }
234
+ function z(e) {
235
+ return /* @__PURE__ */ i(u.Root, {
236
+ ...e,
237
+ "data-imf-ui-component": "Tabs.Root",
238
+ className: (n) => M({ className: t(e.className, n) })
239
+ });
240
+ }
241
+ z.displayName = "Tabs.Root";
242
+ function B({ fill: e = !1, ref: n, ...r }) {
243
+ let a = o((e) => {
244
+ if (!e) return;
245
+ L(n, e);
246
+ let t = R(e);
247
+ return () => {
248
+ t(), L(n, null);
249
+ };
250
+ }, [n]);
251
+ return /* @__PURE__ */ i(u.List, {
252
+ ...r,
253
+ ref: a,
254
+ "data-imf-ui-component": "Tabs.List",
255
+ className: (n) => j({
256
+ fill: e,
257
+ className: t(r.className, n)
258
+ })
259
+ });
260
+ }
261
+ B.displayName = "Tabs.List";
262
+ function V(e) {
263
+ return /* @__PURE__ */ i(u.Tab, {
264
+ ...e,
265
+ "data-imf-ui-component": "Tabs.Tab",
266
+ className: (n) => N({ className: t(e.className, n) })
267
+ });
268
+ }
269
+ V.displayName = "Tabs.Tab";
270
+ function H(e) {
271
+ return /* @__PURE__ */ i(u.Indicator, {
272
+ ...e,
273
+ "data-imf-ui-component": "Tabs.Indicator",
274
+ className: (n) => P({ className: t(e.className, n) })
275
+ });
276
+ }
277
+ H.displayName = "Tabs.Indicator";
278
+ function U(e) {
279
+ return /* @__PURE__ */ i("div", {
280
+ ...e,
281
+ "data-imf-ui-component": "Tabs.PanelViewport",
282
+ className: F({ className: e.className })
283
+ });
284
+ }
285
+ U.displayName = "Tabs.PanelViewport";
286
+ function W(e) {
287
+ return /* @__PURE__ */ i(u.Panel, {
288
+ ...e,
289
+ "data-imf-ui-component": "Tabs.Panel",
290
+ className: (n) => I({ className: t(e.className, n) })
291
+ });
292
+ }
293
+ W.displayName = "Tabs.Panel";
294
+ //#endregion
295
+ export { z as a, O as c, b as d, h as f, U as i, T as l, f as m, B as n, V as o, g as p, W as r, A as s, H as t, S as u };
package/dist/vite.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as e } from "./paths-Oi0v8x-w.js";
1
+ import { n as e } from "./paths-CUyf9wjm.js";
2
2
  import { readFileSync as t, readdirSync as n, realpathSync as r } from "node:fs";
3
3
  import { dirname as i, join as a, resolve as o, sep as s } from "node:path";
4
4
  import { fileURLToPath as c } from "node:url";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { n as e, r as t, t as n } from "./paths-Oi0v8x-w.js";
2
+ import { n as e, r as t, t as n } from "./paths-CUyf9wjm.js";
3
3
  import { chmodSync as r, cpSync as i, existsSync as a, lstatSync as o, mkdirSync as s, readFileSync as c, readdirSync as l, readlinkSync as u, realpathSync as d, rmSync as f, symlinkSync as p, writeFileSync as m } from "node:fs";
4
4
  import { dirname as h, relative as g, resolve as _ } from "node:path";
5
5
  import { Command as ee, Option as te } from "commander";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@imfusion/web-ui",
3
- "version": "0.8.1-dev.17.gcbf0282e",
3
+ "version": "0.8.1-dev.18.g2355b181",
4
4
  "description": "The official Web UI component library for ImFusion web apps",
5
5
  "author": "ImFusion GmbH",
6
6
  "homepage": "https://imfusion.com",
@@ -5569,7 +5569,7 @@
5569
5569
  "slider": {
5570
5570
  "root": {
5571
5571
  "name": "Slider.Root",
5572
- "description": "Slider.Root — value selector along a continuous or stepped track.",
5572
+ "description": "Slider.Root — value selector along a continuous or stepped track.\n\n`variant=\"position\"` draws a scrollbar-like trough and bar thumb for picking one position\nbetween `min` and `max`, such as a slice or frame; `onValueChange` reports the position.",
5573
5573
  "props": [
5574
5574
  {
5575
5575
  "name": "className",
@@ -5717,6 +5717,13 @@
5717
5717
  "type": "number | readonly number[]",
5718
5718
  "defaultValue": null,
5719
5719
  "description": "The value of the slider.\nFor ranged sliders, provide an array with two values."
5720
+ },
5721
+ {
5722
+ "name": "variant",
5723
+ "required": false,
5724
+ "type": "\"default\" | \"position\" | null",
5725
+ "defaultValue": "default",
5726
+ "description": ""
5720
5727
  }
5721
5728
  ]
5722
5729
  },
@@ -8349,6 +8356,43 @@
8349
8356
  }
8350
8357
  ]
8351
8358
  },
8359
+ "frame-selection": {
8360
+ "root": {
8361
+ "name": "FrameSelection",
8362
+ "description": "FrameSelection - a position slider bound to the focused frame of the multi-frame image sets in `data`.\nEvery matching image set follows the slider, and a `{focus} | {count}` readout sits beside it.\nRenders nothing when `data` holds no multi-frame image set.\n\nMust render inside an `ImFusionProvider`.",
8363
+ "props": [
8364
+ {
8365
+ "name": "data",
8366
+ "required": true,
8367
+ "type": "HandleArray<Data>",
8368
+ "defaultValue": null,
8369
+ "description": "Datasets to scan, for example from `useVisibleData()`. Non-image data, single-frame image sets, and image sets whose\nframe count differs from the first multi-frame set are ignored."
8370
+ },
8371
+ {
8372
+ "name": "disabled",
8373
+ "required": false,
8374
+ "type": "boolean",
8375
+ "defaultValue": "false",
8376
+ "description": "Whether the slider ignores user interaction."
8377
+ },
8378
+ {
8379
+ "name": "label",
8380
+ "required": false,
8381
+ "type": "string",
8382
+ "defaultValue": "Frame",
8383
+ "description": "Accessible name of the slider thumb."
8384
+ },
8385
+ {
8386
+ "name": "orientation",
8387
+ "required": false,
8388
+ "type": "\"horizontal\" | \"vertical\"",
8389
+ "defaultValue": "horizontal",
8390
+ "description": "Direction of the slider; the vertical layout stacks the readout under it."
8391
+ }
8392
+ ]
8393
+ },
8394
+ "subComponents": []
8395
+ },
8352
8396
  "image-display-options": {
8353
8397
  "root": {
8354
8398
  "name": "ImageDisplayOptions",
@@ -96,6 +96,12 @@ Semantic group for related form controls with a shared legend. Also called a for
96
96
  - props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .fieldset (jq: jq '.fieldset' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
97
97
  - further reading (usage/anatomy, not props): https://base-ui.com/react/components/fieldset.md
98
98
 
99
+ ## FrameSelection
100
+ - category: Inputs, status: experimental
101
+ Frame or slice picker bound to the focused frame of ImFusion image sets, with a focus and count readout. For a position picker not tied to the SDK, use Slider with variant="position".
102
+ - props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .frame-selection (jq: jq '.frame-selection' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
103
+ - further reading (usage/anatomy, not props): https://docs.imfusion.com/
104
+
99
105
  ## Icon
100
106
  - category: Display, status: stable
101
107
  Renders a Web UI icon with an optional semantic foreground color. The default inherits the surrounding currentColor.
@@ -160,7 +166,7 @@ Line that divides content horizontally or vertically. Also called a divider or r
160
166
 
161
167
  ## Slider
162
168
  - category: Inputs, status: stable
163
- Numeric input for choosing one value or a range by dragging a thumb. Also called a range input; use it when relative magnitude matters.
169
+ Numeric input for choosing one value or a range by dragging a thumb. Also called a range input; use it when relative magnitude matters. The position variant is a scrubber for picking one slice or frame.
164
170
  - props: node_modules/@imfusion/web-ui/src/docgen/doc.gen.json -> .slider (jq: jq '.slider' node_modules/@imfusion/web-ui/src/docgen/doc.gen.json)
165
171
  - further reading (usage/anatomy, not props): https://base-ui.com/react/components/slider.md
166
172