@dataverse-kit/surface-kit 0.2.0 → 0.3.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.
- package/LICENSE +21 -0
- package/dist/index.d.cts +5 -53
- package/dist/index.d.ts +5 -53
- package/dist/useDensity-BePwtUzY.d.ts +53 -0
- package/dist/useDensity-xEYt-GdJ.d.cts +53 -0
- package/dist/v9.cjs +993 -0
- package/dist/v9.cjs.map +1 -0
- package/dist/v9.d.cts +313 -0
- package/dist/v9.d.ts +313 -0
- package/dist/v9.mjs +937 -0
- package/dist/v9.mjs.map +1 -0
- package/package.json +21 -3
package/dist/v9.cjs
ADDED
|
@@ -0,0 +1,993 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/v9/index.ts
|
|
21
|
+
var v9_exports = {};
|
|
22
|
+
__export(v9_exports, {
|
|
23
|
+
ActionBar: () => ActionBar,
|
|
24
|
+
BREAKPOINTS: () => BREAKPOINTS,
|
|
25
|
+
CALLOUT_DEFAULT_WIDTH: () => CALLOUT_DEFAULT_WIDTH,
|
|
26
|
+
CARD_REFLOW_WIDTH: () => CARD_REFLOW_WIDTH,
|
|
27
|
+
CalloutSurface: () => CalloutSurface,
|
|
28
|
+
CommandSurface: () => CommandSurface,
|
|
29
|
+
DIALOG_SIZE_PX: () => DIALOG_SIZE_PX,
|
|
30
|
+
DensityContext: () => DensityContext,
|
|
31
|
+
Footer: () => Footer,
|
|
32
|
+
FormDialogSurface: () => FormDialogSurface,
|
|
33
|
+
FormHeader: () => FormHeader,
|
|
34
|
+
FormSurface: () => FormSurface,
|
|
35
|
+
MODAL_AUTOSIZE_MIN_WIDTH: () => MODAL_AUTOSIZE_MIN_WIDTH,
|
|
36
|
+
ModalSurface: () => ModalSurface,
|
|
37
|
+
PANEL_DEFAULT_WIDTH: () => PANEL_DEFAULT_WIDTH,
|
|
38
|
+
PageSurface: () => PageSurface,
|
|
39
|
+
PanelSurface: () => PanelSurface,
|
|
40
|
+
PivotSurface: () => PivotSurface,
|
|
41
|
+
Section: () => Section,
|
|
42
|
+
SectionCard: () => SectionCard,
|
|
43
|
+
SectionHeader: () => SectionHeader,
|
|
44
|
+
TooltipSurface: () => TooltipSurface,
|
|
45
|
+
calloutFormDefaults: () => calloutFormDefaults,
|
|
46
|
+
calloutWidthPx: () => calloutWidthPx,
|
|
47
|
+
clampSpan: () => clampSpan,
|
|
48
|
+
colors: () => import_design_tokens.colors,
|
|
49
|
+
createDynamicsV9DarkTheme: () => createDynamicsV9DarkTheme,
|
|
50
|
+
createDynamicsV9Theme: () => createDynamicsV9Theme,
|
|
51
|
+
densityScale: () => densityScale,
|
|
52
|
+
dialogHeightCss: () => dialogHeightCss,
|
|
53
|
+
dialogWidthCss: () => dialogWidthCss,
|
|
54
|
+
dialogWidthPx: () => dialogWidthPx,
|
|
55
|
+
dynamicsBrandRamp: () => dynamicsBrandRamp,
|
|
56
|
+
dynamicsV9Theme: () => dynamicsV9Theme,
|
|
57
|
+
fieldGridStyle: () => fieldGridStyle,
|
|
58
|
+
fieldRowStyle: () => fieldRowStyle,
|
|
59
|
+
gridTemplateForColumns: () => gridTemplateForColumns,
|
|
60
|
+
layout: () => import_design_tokens.layout,
|
|
61
|
+
panelCustomWidthPx: () => panelCustomWidthPx,
|
|
62
|
+
panelKindFromWidth: () => panelKindFromWidth,
|
|
63
|
+
radius: () => import_design_tokens.radius,
|
|
64
|
+
resolveBreakpoint: () => resolveBreakpoint,
|
|
65
|
+
resolveResponsiveValue: () => resolveResponsiveValue,
|
|
66
|
+
scaleSpacing: () => scaleSpacing,
|
|
67
|
+
sectionStackingStyle: () => sectionStackingStyle,
|
|
68
|
+
spacing: () => import_design_tokens.spacing,
|
|
69
|
+
typography: () => import_design_tokens.typography,
|
|
70
|
+
useContainerBreakpoint: () => useContainerBreakpoint,
|
|
71
|
+
useContainerSize: () => useContainerSize,
|
|
72
|
+
useContainerWidth: () => useContainerWidth,
|
|
73
|
+
useDensity: () => useDensity,
|
|
74
|
+
useMediaQuery: () => useMediaQuery,
|
|
75
|
+
useResponsiveValue: () => useResponsiveValue
|
|
76
|
+
});
|
|
77
|
+
module.exports = __toCommonJS(v9_exports);
|
|
78
|
+
|
|
79
|
+
// src/core/sizePresets.ts
|
|
80
|
+
var DIALOG_SIZE_PX = {
|
|
81
|
+
sm: 600,
|
|
82
|
+
md: 900,
|
|
83
|
+
lg: 1200,
|
|
84
|
+
xl: 1600
|
|
85
|
+
};
|
|
86
|
+
function dialogWidthPx(opts = {}) {
|
|
87
|
+
if (typeof opts.width === "number") return opts.width;
|
|
88
|
+
const size = opts.size ?? "lg";
|
|
89
|
+
if (size === "fullscreen") return DIALOG_SIZE_PX.xl;
|
|
90
|
+
return DIALOG_SIZE_PX[size];
|
|
91
|
+
}
|
|
92
|
+
function dialogWidthCss(opts = {}) {
|
|
93
|
+
if (opts.size === "fullscreen" && opts.width == null) return "95vw";
|
|
94
|
+
return `${dialogWidthPx(opts)}px`;
|
|
95
|
+
}
|
|
96
|
+
function dialogHeightCss(height) {
|
|
97
|
+
return height != null && height <= 100 ? `${height}vh` : "95vh";
|
|
98
|
+
}
|
|
99
|
+
var MODAL_AUTOSIZE_MIN_WIDTH = 1e3;
|
|
100
|
+
var PANEL_DEFAULT_WIDTH = 480;
|
|
101
|
+
function panelKindFromWidth(width) {
|
|
102
|
+
return (width ?? PANEL_DEFAULT_WIDTH) > 500 ? "medium" : "custom";
|
|
103
|
+
}
|
|
104
|
+
function panelCustomWidthPx(width) {
|
|
105
|
+
return width ?? PANEL_DEFAULT_WIDTH;
|
|
106
|
+
}
|
|
107
|
+
var CALLOUT_DEFAULT_WIDTH = 320;
|
|
108
|
+
var calloutFormDefaults = {
|
|
109
|
+
width: CALLOUT_DEFAULT_WIDTH,
|
|
110
|
+
directionalHint: "bottomLeftEdge"
|
|
111
|
+
};
|
|
112
|
+
function calloutWidthPx(width) {
|
|
113
|
+
return width ?? CALLOUT_DEFAULT_WIDTH;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// src/core/columns.ts
|
|
117
|
+
function gridTemplateForColumns(columns) {
|
|
118
|
+
return `repeat(${columns}, 1fr)`;
|
|
119
|
+
}
|
|
120
|
+
function clampSpan(span, columns) {
|
|
121
|
+
if (!Number.isFinite(span)) return 1;
|
|
122
|
+
return Math.max(1, Math.min(Math.round(span), columns));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// src/responsive/breakpoints.ts
|
|
126
|
+
var BREAKPOINTS = {
|
|
127
|
+
xs: 0,
|
|
128
|
+
sm: 480,
|
|
129
|
+
md: 768,
|
|
130
|
+
lg: 1024,
|
|
131
|
+
xl: 1366
|
|
132
|
+
};
|
|
133
|
+
var CARD_REFLOW_WIDTH = 900;
|
|
134
|
+
var DESCENDING = ["xl", "lg", "md", "sm", "xs"];
|
|
135
|
+
var ASCENDING = ["xs", "sm", "md", "lg", "xl"];
|
|
136
|
+
function resolveBreakpoint(width) {
|
|
137
|
+
for (const bp of DESCENDING) {
|
|
138
|
+
if (width >= BREAKPOINTS[bp]) return bp;
|
|
139
|
+
}
|
|
140
|
+
return "xs";
|
|
141
|
+
}
|
|
142
|
+
function isResponsiveMap(v) {
|
|
143
|
+
return typeof v === "object" && v !== null && ASCENDING.some((bp) => bp in v);
|
|
144
|
+
}
|
|
145
|
+
function resolveResponsiveValue(value, breakpoint) {
|
|
146
|
+
if (!isResponsiveMap(value)) return value;
|
|
147
|
+
const map = value;
|
|
148
|
+
const idx = ASCENDING.indexOf(breakpoint);
|
|
149
|
+
for (let i = idx; i >= 0; i--) {
|
|
150
|
+
const v = map[ASCENDING[i]];
|
|
151
|
+
if (v !== void 0) return v;
|
|
152
|
+
}
|
|
153
|
+
for (let i = idx + 1; i < ASCENDING.length; i++) {
|
|
154
|
+
const v = map[ASCENDING[i]];
|
|
155
|
+
if (v !== void 0) return v;
|
|
156
|
+
}
|
|
157
|
+
return void 0;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// src/responsive/builders.ts
|
|
161
|
+
function atRule(mode, maxPx) {
|
|
162
|
+
return mode === "container" ? `@container (max-width: ${maxPx}px)` : `@media (max-width: ${maxPx}px)`;
|
|
163
|
+
}
|
|
164
|
+
function fieldGridStyle(columns, mode = "media") {
|
|
165
|
+
const capped = Math.min(columns, 2);
|
|
166
|
+
return {
|
|
167
|
+
display: "grid",
|
|
168
|
+
gridTemplateColumns: gridTemplateForColumns(columns),
|
|
169
|
+
gap: "4px 24px",
|
|
170
|
+
selectors: {
|
|
171
|
+
[atRule(mode, BREAKPOINTS.md)]: { gridTemplateColumns: gridTemplateForColumns(capped) },
|
|
172
|
+
[atRule(mode, BREAKPOINTS.sm)]: { gridTemplateColumns: "1fr" }
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function sectionStackingStyle(gridTemplateColumns, mode = "media") {
|
|
177
|
+
return {
|
|
178
|
+
display: "grid",
|
|
179
|
+
gridTemplateColumns,
|
|
180
|
+
gap: 16,
|
|
181
|
+
alignItems: "start",
|
|
182
|
+
selectors: {
|
|
183
|
+
[atRule(mode, BREAKPOINTS.md)]: { gridTemplateColumns: "1fr" }
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function fieldRowStyle(labelWidth = "130px", mode = "media") {
|
|
188
|
+
return {
|
|
189
|
+
display: "grid",
|
|
190
|
+
gridTemplateColumns: `${labelWidth} 1fr`,
|
|
191
|
+
alignItems: "center",
|
|
192
|
+
gap: 8,
|
|
193
|
+
minHeight: 38,
|
|
194
|
+
selectors: {
|
|
195
|
+
[atRule(mode, BREAKPOINTS.sm)]: { gridTemplateColumns: "1fr", alignItems: "flex-start", minHeight: 0, gap: 4 }
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// src/tokens/tokens.ts
|
|
201
|
+
var import_design_tokens = require("@dataverse-kit/design-tokens");
|
|
202
|
+
|
|
203
|
+
// src/tokens/density.ts
|
|
204
|
+
var densityScale = {
|
|
205
|
+
comfortable: 1,
|
|
206
|
+
compact: 0.75
|
|
207
|
+
};
|
|
208
|
+
function scaleSpacing(value, density = "comfortable") {
|
|
209
|
+
return Math.round(value * densityScale[density]);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// src/hooks/useContainerSize.ts
|
|
213
|
+
var import_react = require("react");
|
|
214
|
+
function useContainerSize(ref) {
|
|
215
|
+
const [size, setSize] = (0, import_react.useState)({ width: 0, height: 0, inlineSize: 0, blockSize: 0 });
|
|
216
|
+
(0, import_react.useEffect)(() => {
|
|
217
|
+
if (!ref.current || typeof ResizeObserver === "undefined") return;
|
|
218
|
+
const observer = new ResizeObserver((entries) => {
|
|
219
|
+
for (const entry of entries) {
|
|
220
|
+
const { width, height } = entry.contentRect;
|
|
221
|
+
const inlineSize = entry.borderBoxSize?.[0]?.inlineSize ?? width;
|
|
222
|
+
const blockSize = entry.borderBoxSize?.[0]?.blockSize ?? height;
|
|
223
|
+
setSize({ width, height, inlineSize, blockSize });
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
observer.observe(ref.current);
|
|
227
|
+
return () => observer.disconnect();
|
|
228
|
+
}, [ref]);
|
|
229
|
+
return size;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// src/hooks/useContainerWidth.ts
|
|
233
|
+
var import_react2 = require("react");
|
|
234
|
+
function useContainerWidth() {
|
|
235
|
+
const ref = (0, import_react2.useRef)(null);
|
|
236
|
+
const { width } = useContainerSize(ref);
|
|
237
|
+
return [ref, width];
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// src/hooks/useContainerBreakpoint.ts
|
|
241
|
+
function useContainerBreakpoint() {
|
|
242
|
+
const [ref, width] = useContainerWidth();
|
|
243
|
+
return [ref, resolveBreakpoint(width), width];
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// src/hooks/useResponsiveValue.ts
|
|
247
|
+
function useResponsiveValue(value) {
|
|
248
|
+
const [ref, breakpoint] = useContainerBreakpoint();
|
|
249
|
+
return [ref, resolveResponsiveValue(value, breakpoint)];
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// src/hooks/useMediaQuery.ts
|
|
253
|
+
var import_react3 = require("react");
|
|
254
|
+
function useMediaQuery(query) {
|
|
255
|
+
const [matches, setMatches] = (0, import_react3.useState)(() => {
|
|
256
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return false;
|
|
257
|
+
return window.matchMedia(query).matches;
|
|
258
|
+
});
|
|
259
|
+
(0, import_react3.useEffect)(() => {
|
|
260
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
|
|
261
|
+
const mql = window.matchMedia(query);
|
|
262
|
+
const onChange = () => setMatches(mql.matches);
|
|
263
|
+
onChange();
|
|
264
|
+
mql.addEventListener("change", onChange);
|
|
265
|
+
return () => mql.removeEventListener("change", onChange);
|
|
266
|
+
}, [query]);
|
|
267
|
+
return matches;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// src/hooks/useDensity.ts
|
|
271
|
+
var import_react4 = require("react");
|
|
272
|
+
var DensityContext = (0, import_react4.createContext)("comfortable");
|
|
273
|
+
var useDensity = () => (0, import_react4.useContext)(DensityContext);
|
|
274
|
+
|
|
275
|
+
// src/v9/theme.ts
|
|
276
|
+
var import_react_components = require("@fluentui/react-components");
|
|
277
|
+
var dynamicsBrandRamp = {
|
|
278
|
+
10: "#061724",
|
|
279
|
+
20: "#082338",
|
|
280
|
+
30: "#0a2e4a",
|
|
281
|
+
40: "#0c3b5e",
|
|
282
|
+
50: "#0e4775",
|
|
283
|
+
60: import_design_tokens.colors.brandDark,
|
|
284
|
+
// #005a9e — colorBrandBackgroundPressed
|
|
285
|
+
70: import_design_tokens.colors.brandHover,
|
|
286
|
+
// #106ebe — colorBrandBackground(Hover/Selected)
|
|
287
|
+
80: import_design_tokens.colors.brand,
|
|
288
|
+
// #0078d4 — colorBrandBackground + colorBrandForeground1 (the Dynamics blue)
|
|
289
|
+
90: "#2886de",
|
|
290
|
+
100: "#479ef5",
|
|
291
|
+
110: "#62abf5",
|
|
292
|
+
120: "#77b7f7",
|
|
293
|
+
130: "#96c6fa",
|
|
294
|
+
140: "#b4d6fa",
|
|
295
|
+
150: "#cfe4fa",
|
|
296
|
+
160: "#ebf3fc"
|
|
297
|
+
};
|
|
298
|
+
function createDynamicsV9Theme(brand = dynamicsBrandRamp) {
|
|
299
|
+
return (0, import_react_components.createLightTheme)(brand);
|
|
300
|
+
}
|
|
301
|
+
function createDynamicsV9DarkTheme(brand = dynamicsBrandRamp) {
|
|
302
|
+
return (0, import_react_components.createDarkTheme)(brand);
|
|
303
|
+
}
|
|
304
|
+
var dynamicsV9Theme = createDynamicsV9Theme();
|
|
305
|
+
|
|
306
|
+
// src/v9/containers/FormSurface.tsx
|
|
307
|
+
var import_react_components2 = require("@fluentui/react-components");
|
|
308
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
309
|
+
var useStyles = (0, import_react_components2.makeStyles)({
|
|
310
|
+
root: {
|
|
311
|
+
display: "grid",
|
|
312
|
+
alignItems: "start",
|
|
313
|
+
backgroundColor: import_react_components2.tokens.colorNeutralBackground2
|
|
314
|
+
},
|
|
315
|
+
// Container forced a single column: reset every child's span the same way the @media
|
|
316
|
+
// fallback does, so a Section with `columnStart` doesn't escape the stack.
|
|
317
|
+
forceStackChildren: {
|
|
318
|
+
"& > *": { gridColumn: "1 / -1" }
|
|
319
|
+
},
|
|
320
|
+
// Viewport fallbacks (used only when containerWidth is unset) — one static slot per
|
|
321
|
+
// breakpoint so griffel gets literal media strings. The px come from the shared BREAKPOINTS.
|
|
322
|
+
stackSm: { [`@media (max-width: ${BREAKPOINTS.sm}px)`]: { "& > *": { gridColumn: "1 / -1" } } },
|
|
323
|
+
stackMd: { [`@media (max-width: ${BREAKPOINTS.md}px)`]: { "& > *": { gridColumn: "1 / -1" } } },
|
|
324
|
+
stackLg: { [`@media (max-width: ${BREAKPOINTS.lg}px)`]: { "& > *": { gridColumn: "1 / -1" } } },
|
|
325
|
+
stackXl: { [`@media (max-width: ${BREAKPOINTS.xl}px)`]: { "& > *": { gridColumn: "1 / -1" } } }
|
|
326
|
+
});
|
|
327
|
+
var VIEWPORT_STACK = {
|
|
328
|
+
xs: null,
|
|
329
|
+
// xs = 0px, never stacks
|
|
330
|
+
sm: "stackSm",
|
|
331
|
+
md: "stackMd",
|
|
332
|
+
lg: "stackLg",
|
|
333
|
+
xl: "stackXl"
|
|
334
|
+
};
|
|
335
|
+
var FormSurface = ({
|
|
336
|
+
columns = 12,
|
|
337
|
+
gap = 20,
|
|
338
|
+
padding = 20,
|
|
339
|
+
density = "comfortable",
|
|
340
|
+
background,
|
|
341
|
+
containerWidth,
|
|
342
|
+
collapseBelow = "sm",
|
|
343
|
+
maxWidth,
|
|
344
|
+
className,
|
|
345
|
+
style,
|
|
346
|
+
children
|
|
347
|
+
}) => {
|
|
348
|
+
const styles = useStyles();
|
|
349
|
+
const collapsePx = BREAKPOINTS[collapseBelow];
|
|
350
|
+
const forceStack = containerWidth != null && containerWidth <= collapsePx;
|
|
351
|
+
const scaledGap = scaleSpacing(gap, density);
|
|
352
|
+
const scaledPadding = scaleSpacing(padding, density);
|
|
353
|
+
const viewportStackSlot = containerWidth == null ? VIEWPORT_STACK[collapseBelow] : null;
|
|
354
|
+
const cls = (0, import_react_components2.mergeClasses)(
|
|
355
|
+
styles.root,
|
|
356
|
+
forceStack && styles.forceStackChildren,
|
|
357
|
+
viewportStackSlot ? styles[viewportStackSlot] : void 0,
|
|
358
|
+
className
|
|
359
|
+
);
|
|
360
|
+
const inlineStyle = {
|
|
361
|
+
gridTemplateColumns: forceStack ? "1fr" : `repeat(${columns}, 1fr)`,
|
|
362
|
+
gap: scaledGap,
|
|
363
|
+
padding: scaledPadding,
|
|
364
|
+
...background != null ? { background } : {},
|
|
365
|
+
...maxWidth != null ? { maxWidth, marginLeft: "auto", marginRight: "auto" } : {},
|
|
366
|
+
...style
|
|
367
|
+
};
|
|
368
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DensityContext.Provider, { value: density, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cls, style: inlineStyle, children }) });
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
// src/v9/containers/PageSurface.tsx
|
|
372
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
373
|
+
var PageSurface = ({ centered, maxWidth, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(FormSurface, { maxWidth: maxWidth ?? (centered ? 1200 : void 0), ...rest });
|
|
374
|
+
|
|
375
|
+
// src/v9/containers/Section.tsx
|
|
376
|
+
var import_react5 = require("react");
|
|
377
|
+
var import_react_components4 = require("@fluentui/react-components");
|
|
378
|
+
|
|
379
|
+
// src/v9/containers/SectionHeader.tsx
|
|
380
|
+
var import_react_components3 = require("@fluentui/react-components");
|
|
381
|
+
var import_react_icons = require("@fluentui/react-icons");
|
|
382
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
383
|
+
var SectionHeader = ({
|
|
384
|
+
title,
|
|
385
|
+
statusText,
|
|
386
|
+
showCommandBar,
|
|
387
|
+
commandItems = [],
|
|
388
|
+
actions,
|
|
389
|
+
collapsible,
|
|
390
|
+
collapsed,
|
|
391
|
+
onToggle
|
|
392
|
+
}) => {
|
|
393
|
+
const rootStyle = {
|
|
394
|
+
display: "flex",
|
|
395
|
+
justifyContent: "space-between",
|
|
396
|
+
alignItems: "center",
|
|
397
|
+
flexWrap: "nowrap",
|
|
398
|
+
borderBottom: `1px solid ${import_react_components3.tokens.colorNeutralStroke2}`,
|
|
399
|
+
marginBottom: 16,
|
|
400
|
+
minHeight: 48,
|
|
401
|
+
width: "100%"
|
|
402
|
+
};
|
|
403
|
+
const leftStyle = { display: "flex", alignItems: "center", gap: 8, minWidth: 0 };
|
|
404
|
+
const statusStyle = {
|
|
405
|
+
marginLeft: 8,
|
|
406
|
+
fontSize: import_react_components3.tokens.fontSizeBase200,
|
|
407
|
+
color: import_react_components3.tokens.colorNeutralForeground3
|
|
408
|
+
};
|
|
409
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: rootStyle, children: [
|
|
410
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: leftStyle, children: [
|
|
411
|
+
collapsible && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
412
|
+
import_react_components3.Button,
|
|
413
|
+
{
|
|
414
|
+
appearance: "subtle",
|
|
415
|
+
size: "small",
|
|
416
|
+
icon: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_icons.ChevronRight20Regular, {}) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_icons.ChevronDown20Regular, {}),
|
|
417
|
+
onClick: onToggle,
|
|
418
|
+
"aria-label": collapsed ? "Expand section" : "Collapse section",
|
|
419
|
+
"aria-expanded": !collapsed
|
|
420
|
+
}
|
|
421
|
+
),
|
|
422
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_components3.Text, { weight: "semibold", size: 300, children: title }),
|
|
423
|
+
statusText && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: statusStyle, children: statusText })
|
|
424
|
+
] }),
|
|
425
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { children: actions }) : showCommandBar && commandItems.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_components3.Toolbar, { "aria-label": "Section commands", size: "small", children: commandItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
426
|
+
import_react_components3.ToolbarButton,
|
|
427
|
+
{
|
|
428
|
+
icon: item.icon,
|
|
429
|
+
appearance: item.appearance === "primary" ? "primary" : "subtle",
|
|
430
|
+
disabled: item.disabled,
|
|
431
|
+
onClick: item.onClick,
|
|
432
|
+
children: item.label
|
|
433
|
+
},
|
|
434
|
+
item.id
|
|
435
|
+
)) }) : null
|
|
436
|
+
] });
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
// src/v9/containers/Section.tsx
|
|
440
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
441
|
+
var useStyles2 = (0, import_react_components4.makeStyles)({
|
|
442
|
+
// Phone-stack the internal field grid below `sm` (griffel — inline can't do @media).
|
|
443
|
+
bodyStack: {
|
|
444
|
+
[`@media (max-width: ${BREAKPOINTS.sm}px)`]: { "& > *": { gridColumn: "1 / -1" } }
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
var Section = ({
|
|
448
|
+
title,
|
|
449
|
+
columnSpan = 12,
|
|
450
|
+
columnStart,
|
|
451
|
+
rowPosition,
|
|
452
|
+
internalColumns = 12,
|
|
453
|
+
showCommandBar,
|
|
454
|
+
commandItems,
|
|
455
|
+
statusText,
|
|
456
|
+
notification,
|
|
457
|
+
collapsible,
|
|
458
|
+
defaultCollapsed = false,
|
|
459
|
+
collapsed: controlledCollapsed,
|
|
460
|
+
onCollapsedChange,
|
|
461
|
+
variant = "card",
|
|
462
|
+
minHeight = 80,
|
|
463
|
+
density: densityProp,
|
|
464
|
+
className,
|
|
465
|
+
style,
|
|
466
|
+
children
|
|
467
|
+
}) => {
|
|
468
|
+
const styles = useStyles2();
|
|
469
|
+
const [internalCollapsed, setInternalCollapsed] = (0, import_react5.useState)(defaultCollapsed);
|
|
470
|
+
const collapsed = controlledCollapsed ?? internalCollapsed;
|
|
471
|
+
const toggle = () => {
|
|
472
|
+
const next = !collapsed;
|
|
473
|
+
if (controlledCollapsed == null) setInternalCollapsed(next);
|
|
474
|
+
onCollapsedChange?.(next);
|
|
475
|
+
};
|
|
476
|
+
const ctxDensity = useDensity();
|
|
477
|
+
const density = densityProp ?? ctxDensity;
|
|
478
|
+
const cardPad = `${scaleSpacing(3, density)}px ${scaleSpacing(20, density)}px ${scaleSpacing(20, density)}px ${scaleSpacing(20, density)}px`;
|
|
479
|
+
const bodyGap = scaleSpacing(7, density);
|
|
480
|
+
const gridColumn = columnStart ? `${columnStart} / span ${columnSpan}` : `span ${columnSpan}`;
|
|
481
|
+
const rootStyle = {
|
|
482
|
+
gridColumn,
|
|
483
|
+
...rowPosition ? { gridRowStart: rowPosition } : {},
|
|
484
|
+
...style
|
|
485
|
+
};
|
|
486
|
+
if (variant === "placeholder") {
|
|
487
|
+
const placeholderStyle = {
|
|
488
|
+
...rootStyle,
|
|
489
|
+
border: `1px dashed ${import_react_components4.tokens.colorNeutralStroke2}`,
|
|
490
|
+
borderRadius: import_react_components4.tokens.borderRadiusMedium,
|
|
491
|
+
minHeight,
|
|
492
|
+
width: "100%",
|
|
493
|
+
background: "transparent"
|
|
494
|
+
};
|
|
495
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className, style: placeholderStyle });
|
|
496
|
+
}
|
|
497
|
+
const chrome = variant === "flat" ? {
|
|
498
|
+
backgroundColor: import_react_components4.tokens.colorNeutralBackground1,
|
|
499
|
+
borderRadius: import_react_components4.tokens.borderRadiusMedium,
|
|
500
|
+
padding: cardPad,
|
|
501
|
+
minWidth: 300,
|
|
502
|
+
width: "100%",
|
|
503
|
+
overflow: "hidden"
|
|
504
|
+
} : {
|
|
505
|
+
backgroundColor: import_react_components4.tokens.colorNeutralBackground1,
|
|
506
|
+
border: `1px solid ${import_react_components4.tokens.colorNeutralStroke2}`,
|
|
507
|
+
borderRadius: import_react_components4.tokens.borderRadiusMedium,
|
|
508
|
+
boxShadow: import_react_components4.tokens.shadow4,
|
|
509
|
+
padding: cardPad,
|
|
510
|
+
minWidth: 300,
|
|
511
|
+
width: "100%",
|
|
512
|
+
overflow: "hidden"
|
|
513
|
+
};
|
|
514
|
+
const showHeader = Boolean(title) || showCommandBar || collapsible;
|
|
515
|
+
const bodyStyle = {
|
|
516
|
+
display: "grid",
|
|
517
|
+
gridTemplateColumns: `repeat(${internalColumns}, 1fr)`,
|
|
518
|
+
gap: bodyGap,
|
|
519
|
+
alignItems: "start"
|
|
520
|
+
};
|
|
521
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className, style: { ...chrome, ...rootStyle }, children: [
|
|
522
|
+
notification && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { marginBottom: scaleSpacing(8, density) }, children: notification }),
|
|
523
|
+
showHeader && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
524
|
+
SectionHeader,
|
|
525
|
+
{
|
|
526
|
+
title,
|
|
527
|
+
statusText,
|
|
528
|
+
showCommandBar,
|
|
529
|
+
commandItems,
|
|
530
|
+
collapsible,
|
|
531
|
+
collapsed,
|
|
532
|
+
onToggle: toggle
|
|
533
|
+
}
|
|
534
|
+
),
|
|
535
|
+
!collapsed && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: (0, import_react_components4.mergeClasses)(styles.bodyStack), style: bodyStyle, children })
|
|
536
|
+
] });
|
|
537
|
+
};
|
|
538
|
+
|
|
539
|
+
// src/v9/containers/SectionCard.tsx
|
|
540
|
+
var import_react_components5 = require("@fluentui/react-components");
|
|
541
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
542
|
+
var SectionCard = ({
|
|
543
|
+
accentColor = import_react_components5.tokens.colorBrandStroke1,
|
|
544
|
+
accentWidth = 3,
|
|
545
|
+
variant = "card",
|
|
546
|
+
style,
|
|
547
|
+
...rest
|
|
548
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
549
|
+
Section,
|
|
550
|
+
{
|
|
551
|
+
variant,
|
|
552
|
+
...rest,
|
|
553
|
+
style: { borderTop: `${accentWidth}px solid ${accentColor}`, ...style }
|
|
554
|
+
}
|
|
555
|
+
);
|
|
556
|
+
|
|
557
|
+
// src/v9/containers/FormHeader.tsx
|
|
558
|
+
var import_react_components6 = require("@fluentui/react-components");
|
|
559
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
560
|
+
var FormHeader = ({
|
|
561
|
+
title,
|
|
562
|
+
subtitle,
|
|
563
|
+
status,
|
|
564
|
+
titleColor,
|
|
565
|
+
subtitleColor,
|
|
566
|
+
persona,
|
|
567
|
+
actions,
|
|
568
|
+
className
|
|
569
|
+
}) => {
|
|
570
|
+
const rootStyle = {
|
|
571
|
+
display: "flex",
|
|
572
|
+
alignItems: "center",
|
|
573
|
+
justifyContent: "space-between",
|
|
574
|
+
gap: 12,
|
|
575
|
+
padding: "12px 24px",
|
|
576
|
+
borderBottom: `1px solid ${import_react_components6.tokens.colorNeutralStroke2}`,
|
|
577
|
+
backgroundColor: import_react_components6.tokens.colorNeutralBackground1
|
|
578
|
+
};
|
|
579
|
+
const mainStyle = { display: "flex", alignItems: "center", gap: 12, minWidth: 0 };
|
|
580
|
+
const titleRowStyle = { display: "flex", alignItems: "baseline", gap: 8, flexWrap: "wrap" };
|
|
581
|
+
const statusStyle = { fontSize: import_react_components6.tokens.fontSizeBase200, color: import_react_components6.tokens.colorNeutralForeground3 };
|
|
582
|
+
const subtitleStyle = {
|
|
583
|
+
fontSize: import_react_components6.tokens.fontSizeBase200,
|
|
584
|
+
color: subtitleColor || import_react_components6.tokens.colorNeutralForeground3,
|
|
585
|
+
marginTop: 2
|
|
586
|
+
};
|
|
587
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className, style: rootStyle, children: [
|
|
588
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: mainStyle, children: [
|
|
589
|
+
persona,
|
|
590
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { children: [
|
|
591
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: titleRowStyle, children: [
|
|
592
|
+
title != null && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_components6.Text, { weight: "semibold", size: 400, style: titleColor ? { color: titleColor } : void 0, children: title }),
|
|
593
|
+
status != null && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { style: statusStyle, children: status })
|
|
594
|
+
] }),
|
|
595
|
+
subtitle != null && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: subtitleStyle, children: subtitle })
|
|
596
|
+
] })
|
|
597
|
+
] }),
|
|
598
|
+
actions != null && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { children: actions })
|
|
599
|
+
] });
|
|
600
|
+
};
|
|
601
|
+
|
|
602
|
+
// src/v9/containers/PivotSurface.tsx
|
|
603
|
+
var import_react6 = require("react");
|
|
604
|
+
var import_react_components7 = require("@fluentui/react-components");
|
|
605
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
606
|
+
var PivotSurface = ({
|
|
607
|
+
tabs,
|
|
608
|
+
selectedId,
|
|
609
|
+
defaultSelectedId,
|
|
610
|
+
onTabChange,
|
|
611
|
+
appearance = "transparent",
|
|
612
|
+
size = "medium",
|
|
613
|
+
className
|
|
614
|
+
}) => {
|
|
615
|
+
const firstEnabledId = tabs.find((t) => !t.disabled)?.id ?? tabs[0]?.id;
|
|
616
|
+
const [internal, setInternal] = (0, import_react6.useState)(defaultSelectedId ?? firstEnabledId);
|
|
617
|
+
const selected = selectedId ?? internal;
|
|
618
|
+
const handleSelect = (_e, data) => {
|
|
619
|
+
const id = String(data.value);
|
|
620
|
+
if (selectedId == null) setInternal(id);
|
|
621
|
+
onTabChange?.(id);
|
|
622
|
+
};
|
|
623
|
+
const active = tabs.find((t) => t.id === selected) ?? tabs[0];
|
|
624
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className, children: [
|
|
625
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_components7.TabList, { selectedValue: selected, onTabSelect: handleSelect, appearance, size, children: tabs.map((t) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_components7.Tab, { value: t.id, icon: t.icon, disabled: t.disabled, children: t.label }, t.id)) }),
|
|
626
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { children: active?.content })
|
|
627
|
+
] });
|
|
628
|
+
};
|
|
629
|
+
|
|
630
|
+
// src/v9/containers/CommandSurface.tsx
|
|
631
|
+
var import_react_components8 = require("@fluentui/react-components");
|
|
632
|
+
var import_react_icons2 = require("@fluentui/react-icons");
|
|
633
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
634
|
+
function renderToolbarButton(item) {
|
|
635
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
636
|
+
import_react_components8.ToolbarButton,
|
|
637
|
+
{
|
|
638
|
+
icon: item.icon,
|
|
639
|
+
appearance: item.appearance === "primary" ? "primary" : "subtle",
|
|
640
|
+
disabled: item.disabled,
|
|
641
|
+
onClick: item.onClick,
|
|
642
|
+
children: item.label
|
|
643
|
+
},
|
|
644
|
+
item.id
|
|
645
|
+
);
|
|
646
|
+
}
|
|
647
|
+
var CommandSurface = ({
|
|
648
|
+
items,
|
|
649
|
+
overflowItems,
|
|
650
|
+
farItems,
|
|
651
|
+
size = "small",
|
|
652
|
+
className
|
|
653
|
+
}) => {
|
|
654
|
+
const hasFar = Boolean(farItems && farItems.length > 0);
|
|
655
|
+
const hasOverflow = Boolean(overflowItems && overflowItems.length > 0);
|
|
656
|
+
const hasPrimary = items.length > 0 || hasOverflow;
|
|
657
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className, style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
658
|
+
hasPrimary && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_components8.Toolbar, { "aria-label": "Commands", size, children: [
|
|
659
|
+
items.map(renderToolbarButton),
|
|
660
|
+
hasOverflow && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_components8.Menu, { children: [
|
|
661
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_components8.MenuTrigger, { disableButtonEnhancement: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_components8.ToolbarButton, { "aria-label": "More commands", icon: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_icons2.MoreHorizontal20Regular, {}) }) }),
|
|
662
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_components8.MenuPopover, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_components8.MenuList, { children: overflowItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_components8.MenuItem, { icon: item.icon, disabled: item.disabled, onClick: item.onClick, children: item.label }, item.id)) }) })
|
|
663
|
+
] })
|
|
664
|
+
] }),
|
|
665
|
+
hasFar && // marginLeft:auto keeps far items right-aligned whether or not a primary toolbar renders.
|
|
666
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_components8.Toolbar, { "aria-label": "Secondary commands", size, style: { marginLeft: "auto" }, children: farItems.map(renderToolbarButton) })
|
|
667
|
+
] });
|
|
668
|
+
};
|
|
669
|
+
|
|
670
|
+
// src/v9/containers/ActionBar.tsx
|
|
671
|
+
var import_react_components9 = require("@fluentui/react-components");
|
|
672
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
673
|
+
function renderButton(b) {
|
|
674
|
+
const appearance = b.appearance === "primary" ? "primary" : b.appearance === "subtle" ? "subtle" : "secondary";
|
|
675
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react_components9.Button, { appearance, icon: b.icon, disabled: b.disabled, onClick: b.onClick, children: b.label }, b.id);
|
|
676
|
+
}
|
|
677
|
+
var ActionBar = ({ buttons, alignment = "right", sticky = true, className }) => {
|
|
678
|
+
const justify = alignment === "left" ? "flex-start" : alignment === "center" ? "center" : "flex-end";
|
|
679
|
+
const visible = buttons.filter((b) => !b.hidden);
|
|
680
|
+
const left = visible.filter((b) => b.position === "left");
|
|
681
|
+
const right = visible.filter((b) => b.position !== "left");
|
|
682
|
+
const rootStyle = {
|
|
683
|
+
display: "flex",
|
|
684
|
+
alignItems: "center",
|
|
685
|
+
justifyContent: left.length ? "space-between" : justify,
|
|
686
|
+
gap: 8,
|
|
687
|
+
padding: "12px 24px",
|
|
688
|
+
borderTop: `1px solid ${import_react_components9.tokens.colorNeutralStroke2}`,
|
|
689
|
+
backgroundColor: import_react_components9.tokens.colorNeutralBackground1,
|
|
690
|
+
...sticky ? { position: "sticky", bottom: 0, zIndex: 1 } : {}
|
|
691
|
+
};
|
|
692
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className, style: rootStyle, children: [
|
|
693
|
+
left.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: { display: "flex", gap: 8 }, children: left.map(renderButton) }),
|
|
694
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: { display: "flex", gap: 8, justifyContent: justify }, children: right.map(renderButton) })
|
|
695
|
+
] });
|
|
696
|
+
};
|
|
697
|
+
|
|
698
|
+
// src/v9/containers/Footer.tsx
|
|
699
|
+
var import_react_components10 = require("@fluentui/react-components");
|
|
700
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
701
|
+
var Footer = ({ sticky = true, align = "right", className, children }) => {
|
|
702
|
+
const justify = align === "left" ? "flex-start" : align === "center" ? "center" : "flex-end";
|
|
703
|
+
const rootStyle = {
|
|
704
|
+
display: "flex",
|
|
705
|
+
alignItems: "center",
|
|
706
|
+
justifyContent: justify,
|
|
707
|
+
gap: 8,
|
|
708
|
+
padding: "12px 24px",
|
|
709
|
+
borderTop: `1px solid ${import_react_components10.tokens.colorNeutralStroke2}`,
|
|
710
|
+
backgroundColor: import_react_components10.tokens.colorNeutralBackground1,
|
|
711
|
+
...sticky ? { position: "sticky", bottom: 0, zIndex: 1 } : {}
|
|
712
|
+
};
|
|
713
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className, style: rootStyle, children });
|
|
714
|
+
};
|
|
715
|
+
|
|
716
|
+
// src/v9/overlays/FormDialogSurface.tsx
|
|
717
|
+
var import_react_components11 = require("@fluentui/react-components");
|
|
718
|
+
var import_react_icons3 = require("@fluentui/react-icons");
|
|
719
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
720
|
+
var FormDialogSurface = ({
|
|
721
|
+
isOpen,
|
|
722
|
+
onDismiss,
|
|
723
|
+
title,
|
|
724
|
+
subheader,
|
|
725
|
+
size,
|
|
726
|
+
width,
|
|
727
|
+
height,
|
|
728
|
+
isBlocking = true,
|
|
729
|
+
recordCounter,
|
|
730
|
+
footer,
|
|
731
|
+
className,
|
|
732
|
+
children
|
|
733
|
+
}) => {
|
|
734
|
+
const widthCss = dialogWidthCss({ width, size });
|
|
735
|
+
const heightCss = dialogHeightCss(height);
|
|
736
|
+
const showHeader = Boolean(title) || Boolean(recordCounter) || Boolean(onDismiss);
|
|
737
|
+
const headerStyle = {
|
|
738
|
+
display: "flex",
|
|
739
|
+
alignItems: "center",
|
|
740
|
+
justifyContent: "space-between",
|
|
741
|
+
gap: 12,
|
|
742
|
+
padding: "12px 20px",
|
|
743
|
+
borderBottom: `1px solid ${import_react_components11.tokens.colorNeutralStroke2}`
|
|
744
|
+
};
|
|
745
|
+
const counterStyle = { fontSize: import_react_components11.tokens.fontSizeBase200, color: import_react_components11.tokens.colorNeutralForeground3 };
|
|
746
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
747
|
+
import_react_components11.Dialog,
|
|
748
|
+
{
|
|
749
|
+
open: isOpen,
|
|
750
|
+
modalType: isBlocking ? "modal" : "non-modal",
|
|
751
|
+
onOpenChange: (_e, data) => {
|
|
752
|
+
if (!data.open) onDismiss?.();
|
|
753
|
+
},
|
|
754
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
755
|
+
import_react_components11.DialogSurface,
|
|
756
|
+
{
|
|
757
|
+
className,
|
|
758
|
+
style: {
|
|
759
|
+
maxWidth: "95vw",
|
|
760
|
+
width: widthCss,
|
|
761
|
+
height: heightCss,
|
|
762
|
+
maxHeight: "95vh",
|
|
763
|
+
display: "flex",
|
|
764
|
+
flexDirection: "column",
|
|
765
|
+
padding: 0
|
|
766
|
+
},
|
|
767
|
+
children: [
|
|
768
|
+
showHeader && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { style: headerStyle, children: [
|
|
769
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { style: { display: "flex", flexDirection: "column", minWidth: 0 }, children: [
|
|
770
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_components11.Text, { weight: "semibold", size: 400, children: title }),
|
|
771
|
+
subheader && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { style: { fontSize: import_react_components11.tokens.fontSizeBase200, color: import_react_components11.tokens.colorNeutralForeground3, marginTop: 2 }, children: subheader })
|
|
772
|
+
] }),
|
|
773
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
774
|
+
recordCounter && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { style: counterStyle, children: [
|
|
775
|
+
recordCounter.current,
|
|
776
|
+
" of ",
|
|
777
|
+
recordCounter.total
|
|
778
|
+
] }),
|
|
779
|
+
onDismiss && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_components11.Button, { appearance: "subtle", "aria-label": "Close", icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_icons3.Dismiss20Regular, {}), onClick: onDismiss })
|
|
780
|
+
] })
|
|
781
|
+
] }),
|
|
782
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: { flex: 1, minHeight: 0, overflow: "auto", padding: 20 }, children }),
|
|
783
|
+
footer && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: { borderTop: `1px solid ${import_react_components11.tokens.colorNeutralStroke2}`, padding: "12px 20px" }, children: footer })
|
|
784
|
+
]
|
|
785
|
+
}
|
|
786
|
+
)
|
|
787
|
+
}
|
|
788
|
+
);
|
|
789
|
+
};
|
|
790
|
+
|
|
791
|
+
// src/v9/overlays/ModalSurface.tsx
|
|
792
|
+
var import_react_components12 = require("@fluentui/react-components");
|
|
793
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
794
|
+
var ModalSurface = ({
|
|
795
|
+
isOpen,
|
|
796
|
+
onDismiss,
|
|
797
|
+
title,
|
|
798
|
+
size,
|
|
799
|
+
width,
|
|
800
|
+
isBlocking = true,
|
|
801
|
+
autoSize,
|
|
802
|
+
footer,
|
|
803
|
+
className,
|
|
804
|
+
children
|
|
805
|
+
}) => {
|
|
806
|
+
const sizing = autoSize ? { width: "auto", minWidth: MODAL_AUTOSIZE_MIN_WIDTH, maxWidth: "100%" } : { maxWidth: "95vw", width: `${dialogWidthPx({ width, size })}px` };
|
|
807
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
808
|
+
import_react_components12.Dialog,
|
|
809
|
+
{
|
|
810
|
+
open: isOpen,
|
|
811
|
+
modalType: isBlocking ? "modal" : "non-modal",
|
|
812
|
+
onOpenChange: (_e, data) => {
|
|
813
|
+
if (!data.open) onDismiss?.();
|
|
814
|
+
},
|
|
815
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_components12.DialogSurface, { className, style: { ...sizing, padding: 0 }, children: [
|
|
816
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { padding: "16px 20px 0" }, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_components12.Text, { weight: "semibold", size: 500, children: title }) }),
|
|
817
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { padding: 20 }, children }),
|
|
818
|
+
footer && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
819
|
+
"div",
|
|
820
|
+
{
|
|
821
|
+
style: {
|
|
822
|
+
borderTop: `1px solid ${import_react_components12.tokens.colorNeutralStroke2}`,
|
|
823
|
+
padding: "12px 20px",
|
|
824
|
+
display: "flex",
|
|
825
|
+
justifyContent: "flex-end",
|
|
826
|
+
gap: 8
|
|
827
|
+
},
|
|
828
|
+
children: footer
|
|
829
|
+
}
|
|
830
|
+
)
|
|
831
|
+
] })
|
|
832
|
+
}
|
|
833
|
+
);
|
|
834
|
+
};
|
|
835
|
+
|
|
836
|
+
// src/v9/overlays/PanelSurface.tsx
|
|
837
|
+
var import_react_components13 = require("@fluentui/react-components");
|
|
838
|
+
var import_react_icons4 = require("@fluentui/react-icons");
|
|
839
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
840
|
+
var PanelSurface = ({
|
|
841
|
+
isOpen,
|
|
842
|
+
onDismiss,
|
|
843
|
+
title,
|
|
844
|
+
drawerSize,
|
|
845
|
+
width,
|
|
846
|
+
hasCloseButton = true,
|
|
847
|
+
isLightDismiss = true,
|
|
848
|
+
isNonModal = false,
|
|
849
|
+
footer,
|
|
850
|
+
children
|
|
851
|
+
}) => {
|
|
852
|
+
const size = drawerSize ?? (width != null && width > 500 ? "medium" : "small");
|
|
853
|
+
const customWidthStyle = width != null ? { width: `${width}px` } : void 0;
|
|
854
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
855
|
+
import_react_components13.OverlayDrawer,
|
|
856
|
+
{
|
|
857
|
+
open: isOpen,
|
|
858
|
+
position: "end",
|
|
859
|
+
size,
|
|
860
|
+
modalType: isNonModal ? "non-modal" : "modal",
|
|
861
|
+
style: customWidthStyle,
|
|
862
|
+
onOpenChange: (_e, data) => {
|
|
863
|
+
if (data.open) return;
|
|
864
|
+
if (data.type === "backdropClick" && !isLightDismiss) return;
|
|
865
|
+
onDismiss?.();
|
|
866
|
+
},
|
|
867
|
+
children: [
|
|
868
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_components13.DrawerHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
869
|
+
import_react_components13.DrawerHeaderTitle,
|
|
870
|
+
{
|
|
871
|
+
action: hasCloseButton && onDismiss ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_components13.Button, { appearance: "subtle", "aria-label": "Close", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_icons4.Dismiss24Regular, {}), onClick: onDismiss }) : void 0,
|
|
872
|
+
children: title
|
|
873
|
+
}
|
|
874
|
+
) }),
|
|
875
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_react_components13.DrawerBody, { children: [
|
|
876
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { padding: "12px 0" }, children }),
|
|
877
|
+
footer && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { marginTop: "auto", paddingTop: 12 }, children: footer })
|
|
878
|
+
] })
|
|
879
|
+
]
|
|
880
|
+
}
|
|
881
|
+
);
|
|
882
|
+
};
|
|
883
|
+
|
|
884
|
+
// src/v9/overlays/CalloutSurface.tsx
|
|
885
|
+
var import_react_components14 = require("@fluentui/react-components");
|
|
886
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
887
|
+
function resolveTarget(target) {
|
|
888
|
+
if (!target) return null;
|
|
889
|
+
if (typeof target === "string") return document.querySelector(target);
|
|
890
|
+
if ("current" in target) return target.current ?? null;
|
|
891
|
+
return target;
|
|
892
|
+
}
|
|
893
|
+
var CalloutSurface = ({
|
|
894
|
+
target,
|
|
895
|
+
isOpen = true,
|
|
896
|
+
onDismiss,
|
|
897
|
+
width,
|
|
898
|
+
position = "below",
|
|
899
|
+
align = "start",
|
|
900
|
+
isBeakVisible = true,
|
|
901
|
+
className,
|
|
902
|
+
children
|
|
903
|
+
}) => {
|
|
904
|
+
if (!isOpen) return null;
|
|
905
|
+
const el = resolveTarget(target);
|
|
906
|
+
const positioning = { position, align, ...el ? { target: el } : {} };
|
|
907
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
908
|
+
import_react_components14.Popover,
|
|
909
|
+
{
|
|
910
|
+
open: true,
|
|
911
|
+
trapFocus: false,
|
|
912
|
+
withArrow: isBeakVisible,
|
|
913
|
+
positioning,
|
|
914
|
+
onOpenChange: (_e, data) => {
|
|
915
|
+
if (!data.open) onDismiss?.();
|
|
916
|
+
},
|
|
917
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_components14.PopoverSurface, { className, style: { width: calloutWidthPx(width), padding: 16 }, children })
|
|
918
|
+
}
|
|
919
|
+
);
|
|
920
|
+
};
|
|
921
|
+
|
|
922
|
+
// src/v9/overlays/TooltipSurface.tsx
|
|
923
|
+
var import_react_components15 = require("@fluentui/react-components");
|
|
924
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
925
|
+
var DELAY_MS = {
|
|
926
|
+
zero: 0,
|
|
927
|
+
medium: 250,
|
|
928
|
+
long: 500
|
|
929
|
+
};
|
|
930
|
+
var TooltipSurface = ({
|
|
931
|
+
content,
|
|
932
|
+
position = "above",
|
|
933
|
+
delay = "medium",
|
|
934
|
+
relationship = "label",
|
|
935
|
+
children
|
|
936
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_components15.Tooltip, { content, relationship, positioning: position, showDelay: DELAY_MS[delay], children });
|
|
937
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
938
|
+
0 && (module.exports = {
|
|
939
|
+
ActionBar,
|
|
940
|
+
BREAKPOINTS,
|
|
941
|
+
CALLOUT_DEFAULT_WIDTH,
|
|
942
|
+
CARD_REFLOW_WIDTH,
|
|
943
|
+
CalloutSurface,
|
|
944
|
+
CommandSurface,
|
|
945
|
+
DIALOG_SIZE_PX,
|
|
946
|
+
DensityContext,
|
|
947
|
+
Footer,
|
|
948
|
+
FormDialogSurface,
|
|
949
|
+
FormHeader,
|
|
950
|
+
FormSurface,
|
|
951
|
+
MODAL_AUTOSIZE_MIN_WIDTH,
|
|
952
|
+
ModalSurface,
|
|
953
|
+
PANEL_DEFAULT_WIDTH,
|
|
954
|
+
PageSurface,
|
|
955
|
+
PanelSurface,
|
|
956
|
+
PivotSurface,
|
|
957
|
+
Section,
|
|
958
|
+
SectionCard,
|
|
959
|
+
SectionHeader,
|
|
960
|
+
TooltipSurface,
|
|
961
|
+
calloutFormDefaults,
|
|
962
|
+
calloutWidthPx,
|
|
963
|
+
clampSpan,
|
|
964
|
+
colors,
|
|
965
|
+
createDynamicsV9DarkTheme,
|
|
966
|
+
createDynamicsV9Theme,
|
|
967
|
+
densityScale,
|
|
968
|
+
dialogHeightCss,
|
|
969
|
+
dialogWidthCss,
|
|
970
|
+
dialogWidthPx,
|
|
971
|
+
dynamicsBrandRamp,
|
|
972
|
+
dynamicsV9Theme,
|
|
973
|
+
fieldGridStyle,
|
|
974
|
+
fieldRowStyle,
|
|
975
|
+
gridTemplateForColumns,
|
|
976
|
+
layout,
|
|
977
|
+
panelCustomWidthPx,
|
|
978
|
+
panelKindFromWidth,
|
|
979
|
+
radius,
|
|
980
|
+
resolveBreakpoint,
|
|
981
|
+
resolveResponsiveValue,
|
|
982
|
+
scaleSpacing,
|
|
983
|
+
sectionStackingStyle,
|
|
984
|
+
spacing,
|
|
985
|
+
typography,
|
|
986
|
+
useContainerBreakpoint,
|
|
987
|
+
useContainerSize,
|
|
988
|
+
useContainerWidth,
|
|
989
|
+
useDensity,
|
|
990
|
+
useMediaQuery,
|
|
991
|
+
useResponsiveValue
|
|
992
|
+
});
|
|
993
|
+
//# sourceMappingURL=v9.cjs.map
|