@pstrikez/fluent-winui-theme 0.0.0-stage → 0.1.1
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 +22 -0
- package/NOTICE.md +46 -0
- package/README.md +140 -2
- package/dist/base.css +9 -0
- package/dist/components/nav-selection-indicator.d.ts +7 -0
- package/dist/components/ui/back-navigation-button.d.ts +10 -0
- package/dist/components/ui/badge-hue.d.ts +21 -0
- package/dist/components/ui/chip.d.ts +11 -0
- package/dist/components/ui/choice-group.d.ts +25 -0
- package/dist/components/ui/code-block.d.ts +13 -0
- package/dist/components/ui/confirm-dialog.d.ts +16 -0
- package/dist/components/ui/copy-to-clipboard.d.ts +1 -0
- package/dist/components/ui/danger.d.ts +4 -0
- package/dist/components/ui/dashboard-page-header.d.ts +7 -0
- package/dist/components/ui/dialog-shell.d.ts +24 -0
- package/dist/components/ui/empty-state.d.ts +17 -0
- package/dist/components/ui/error-shell.css.d.ts +1 -0
- package/dist/components/ui/error-shell.d.ts +11 -0
- package/dist/components/ui/fluent-form-controls.d.ts +27 -0
- package/dist/components/ui/http-badge.d.ts +8 -0
- package/dist/components/ui/info-label.d.ts +3 -0
- package/dist/components/ui/layout.d.ts +9 -0
- package/dist/components/ui/loading-screen.css.d.ts +1 -0
- package/dist/components/ui/loading-screen.d.ts +6 -0
- package/dist/components/ui/masked-icon.d.ts +5 -0
- package/dist/components/ui/multiselect-combobox.d.ts +21 -0
- package/dist/components/ui/open-link-label.d.ts +4 -0
- package/dist/components/ui/outcome-message-bar.d.ts +9 -0
- package/dist/components/ui/outcome-toast.d.ts +14 -0
- package/dist/components/ui/panel.d.ts +12 -0
- package/dist/components/ui/prism.d.ts +30 -0
- package/dist/components/ui/progress-ring.d.ts +8 -0
- package/dist/components/ui/reorder-list.d.ts +55 -0
- package/dist/components/ui/resource-list.d.ts +33 -0
- package/dist/components/ui/route-link.d.ts +19 -0
- package/dist/components/ui/row-title.d.ts +7 -0
- package/dist/components/ui/scroll-area.d.ts +44 -0
- package/dist/components/ui/secret-input.d.ts +7 -0
- package/dist/components/ui/section-header.d.ts +11 -0
- package/dist/components/ui/settings-card.d.ts +36 -0
- package/dist/components/ui/status-badge.d.ts +8 -0
- package/dist/components/ui/switch-setting.d.ts +7 -0
- package/dist/components/ui/table-actions.d.ts +13 -0
- package/dist/components/ui/table-columns.d.ts +3 -0
- package/dist/components/ui/tooltip-icon-button.d.ts +17 -0
- package/dist/components/ui/truncation-tooltip.d.ts +27 -0
- package/dist/components/ui/use-copy-to-clipboard.d.ts +13 -0
- package/dist/components/ui/use-dialog-invocation.d.ts +11 -0
- package/dist/components/ui/use-discard-guard.d.ts +19 -0
- package/dist/document.css.d.ts +1 -0
- package/dist/fluent.d.ts +2 -0
- package/dist/font-stacks.d.ts +2 -0
- package/dist/fonts/LICENSE-Meslo-LG.txt +201 -0
- package/dist/fonts/meslo-lg-s-400-italic.generated.woff2 +0 -0
- package/dist/fonts/meslo-lg-s-400-normal.generated.woff2 +0 -0
- package/dist/fonts/meslo-lg-s-700-italic.generated.woff2 +0 -0
- package/dist/fonts/meslo-lg-s-700-normal.generated.woff2 +0 -0
- package/dist/i18n/translation.d.ts +49 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.js +8945 -0
- package/dist/index.js.map +7 -0
- package/dist/lib/color.d.ts +9 -0
- package/dist/lib/legacy-css-color.d.ts +1 -0
- package/dist/lib/reduced-motion.d.ts +1 -0
- package/dist/lib/use-media-query.d.ts +2 -0
- package/dist/shell/app-shell.d.ts +30 -0
- package/dist/shell/gradient-background.css.d.ts +1 -0
- package/dist/shell/gradient-background.d.ts +2 -0
- package/dist/shell/navigation-pane.d.ts +42 -0
- package/dist/shell/navigation-progress.css.d.ts +1 -0
- package/dist/shell/navigation-progress.d.ts +3 -0
- package/dist/shell/page-frames.d.ts +24 -0
- package/dist/theme-mode.d.ts +17 -0
- package/dist/theme.d.ts +938 -0
- package/dist/winui/appearance.d.ts +11 -0
- package/dist/winui/controls/accordion.css.d.ts +1 -0
- package/dist/winui/controls/badge-tag.css.d.ts +1 -0
- package/dist/winui/controls/button.css.d.ts +1 -0
- package/dist/winui/controls/card.css.d.ts +1 -0
- package/dist/winui/controls/checkbox-surface.d.ts +25 -0
- package/dist/winui/controls/choice.css.d.ts +4 -0
- package/dist/winui/controls/color-picker.css.d.ts +1 -0
- package/dist/winui/controls/dialog.css.d.ts +1 -0
- package/dist/winui/controls/drawer.css.d.ts +1 -0
- package/dist/winui/controls/field.css.d.ts +3 -0
- package/dist/winui/controls/list.css.d.ts +1 -0
- package/dist/winui/controls/menu.css.d.ts +1 -0
- package/dist/winui/controls/message-bar.css.d.ts +1 -0
- package/dist/winui/controls/nav.css.d.ts +1 -0
- package/dist/winui/controls/popover.css.d.ts +1 -0
- package/dist/winui/controls/progress.css.d.ts +1 -0
- package/dist/winui/controls/reveal.d.ts +11 -0
- package/dist/winui/controls/scrollbar.css.d.ts +1 -0
- package/dist/winui/controls/select.css.d.ts +1 -0
- package/dist/winui/controls/selection-pill.d.ts +1 -0
- package/dist/winui/controls/selectors.d.ts +48 -0
- package/dist/winui/controls/severity.d.ts +24 -0
- package/dist/winui/controls/switch.css.d.ts +1 -0
- package/dist/winui/controls/table.css.d.ts +1 -0
- package/dist/winui/controls/tabs.css.d.ts +1 -0
- package/dist/winui/controls/text-input.css.d.ts +1 -0
- package/dist/winui/controls/text.css.d.ts +1 -0
- package/dist/winui/controls/toast.css.d.ts +1 -0
- package/dist/winui/controls/toolbar.css.d.ts +1 -0
- package/dist/winui/controls/tooltip.css.d.ts +1 -0
- package/dist/winui/focus-rect.css.d.ts +2 -0
- package/dist/winui/index.d.ts +1 -0
- package/dist/winui/motion.d.ts +29 -0
- package/dist/winui/page-transition.css.d.ts +2 -0
- package/dist/winui/presence.d.ts +3 -0
- package/dist/winui/progress-indeterminate.css.d.ts +1 -0
- package/dist/winui/reposition.d.ts +8 -0
- package/dist/winui/reset.css.d.ts +1 -0
- package/dist/winui/switch-drag.d.ts +2 -0
- package/dist/winui/theme.d.ts +3 -0
- package/dist/winui/toaster.d.ts +2 -0
- package/dist/winui/tokens.d.ts +1 -0
- package/dist/winui/wrap.d.ts +3 -0
- package/dist/winui.css +1 -0
- package/package.json +76 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Menci
|
|
4
|
+
Copyright (c) 2026 pStrikeZ
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
package/NOTICE.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Notices
|
|
2
|
+
|
|
3
|
+
## Floway
|
|
4
|
+
|
|
5
|
+
This package is extracted from the dashboard of [Floway](https://github.com/Menci/Floway)
|
|
6
|
+
(`apps/web`), Copyright (c) 2025 Menci, distributed under the MIT License.
|
|
7
|
+
The full license text is in [LICENSE](./LICENSE). [UPSTREAM.md](./UPSTREAM.md)
|
|
8
|
+
records the exact revision and the paths it was taken from.
|
|
9
|
+
|
|
10
|
+
## WinUI and Fluent UI
|
|
11
|
+
|
|
12
|
+
Values and behaviours in `src/winui/` are transcribed from
|
|
13
|
+
[microsoft/microsoft-ui-xaml](https://github.com/microsoft/microsoft-ui-xaml)
|
|
14
|
+
(MIT License, Copyright (c) Microsoft Corporation) and restyle
|
|
15
|
+
[microsoft/fluentui](https://github.com/microsoft/fluentui) (MIT License,
|
|
16
|
+
Copyright (c) Microsoft Corporation). Each transcribed value carries a permalink
|
|
17
|
+
to its source beside it. No Microsoft source file is redistributed.
|
|
18
|
+
|
|
19
|
+
"WinUI" and "Fluent" are trademarks of Microsoft Corporation. This package is not
|
|
20
|
+
affiliated with or endorsed by Microsoft.
|
|
21
|
+
|
|
22
|
+
## Bundled libraries
|
|
23
|
+
|
|
24
|
+
`dist/index.js` bundles:
|
|
25
|
+
|
|
26
|
+
- [Prism](https://github.com/PrismJS/prism) (MIT License, Copyright (c) 2012 Lea Verou),
|
|
27
|
+
for syntax highlighting in `CodeBlock`;
|
|
28
|
+
- [OverlayScrollbars](https://github.com/KingSora/OverlayScrollbars) 2.13.0
|
|
29
|
+
(MIT License, Copyright (c) Rene Haas | KingSora), **modified** by Floway's patch in
|
|
30
|
+
`patches/overlayscrollbars@2.13.0.patch`, for `ScrollArea`.
|
|
31
|
+
|
|
32
|
+
## Meslo LG
|
|
33
|
+
|
|
34
|
+
`dist/fonts/meslo-lg-s-*.woff2` are **modified** versions of the Meslo LG S
|
|
35
|
+
v1.2.1 faces from [andreberg/Meslo-Font](https://github.com/andreberg/Meslo-Font),
|
|
36
|
+
distributed under the Apache License 2.0. Floway generated them by widening each
|
|
37
|
+
face's advance from 1233 to 1264 units and centring the glyphs in the added
|
|
38
|
+
space; the rationale is in `src/base.css`. The license text ships beside the
|
|
39
|
+
fonts as `dist/fonts/LICENSE-Meslo-LG.txt`.
|
|
40
|
+
|
|
41
|
+
## Segoe UI Variable
|
|
42
|
+
|
|
43
|
+
Segoe UI Variable is **not** included. `base.css` declares it with `@font-face`
|
|
44
|
+
sources on Microsoft's own hosts (docs.azure.cn and learn.microsoft.com), the
|
|
45
|
+
same files Microsoft Learn serves, so the browser fetches it from Microsoft at
|
|
46
|
+
runtime. Its use is governed by Microsoft's terms.
|
package/README.md
CHANGED
|
@@ -1,3 +1,141 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @pstrikez/fluent-winui-theme
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
WinUI 3 appearance for [Fluent UI React v9](https://react.fluentui.dev/), extracted from the
|
|
4
|
+
dashboard of [Floway](https://github.com/Menci/Floway).
|
|
5
|
+
|
|
6
|
+
The package has two parts. The first restyles Fluent's own components:
|
|
7
|
+
|
|
8
|
+
- **Stylesheet:** a CSS layer that re-points Fluent's tokens at WinUI 3 values and
|
|
9
|
+
restyles each control's geometry, fills, strokes, focus visuals and motion.
|
|
10
|
+
- **Wrapped components:** a wrapped Fluent namespace that stamps WinUI appearances,
|
|
11
|
+
substitutes WinUI motion, replaces the toaster and adds the Switch drag gesture.
|
|
12
|
+
- **Themes:** light and dark Fluent themes with the WinUI type ramp, radii and
|
|
13
|
+
elevation.
|
|
14
|
+
|
|
15
|
+
The second is the rest of what Floway's dashboard is built from, so a host can
|
|
16
|
+
reproduce that dashboard without Floway's source:
|
|
17
|
+
|
|
18
|
+
- **Components:** settings cards, dialogs, resource lists, reorderable lists,
|
|
19
|
+
badges, code blocks, empty and error states, an OverlayScrollbars scroll area
|
|
20
|
+
and more.
|
|
21
|
+
- **Application shell:** `AppShell`, `NavigationPane`, the page transition, the
|
|
22
|
+
gradient backdrop and the navigation progress bar.
|
|
23
|
+
|
|
24
|
+
> Status: early. The API is unstable before 1.0.
|
|
25
|
+
|
|
26
|
+
## Install
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
npm install @pstrikez/fluent-winui-theme @fluentui/react-components @fluentui/react-toast @fluentui/react-icons react react-dom
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The peer range of `@fluentui/react-components` is deliberately narrow. The
|
|
33
|
+
stylesheet addresses Fluent's DOM and class names, and these can change in a
|
|
34
|
+
minor release. Upgrade Fluent together with this package.
|
|
35
|
+
|
|
36
|
+
## Use
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
import '@pstrikez/fluent-winui-theme/base.css';
|
|
40
|
+
import '@pstrikez/fluent-winui-theme/winui.css';
|
|
41
|
+
|
|
42
|
+
import { fluentComponents, useWinuiTheme } from '@pstrikez/fluent-winui-theme';
|
|
43
|
+
|
|
44
|
+
const { FluentProvider, Button, Switch } = fluentComponents;
|
|
45
|
+
|
|
46
|
+
export function App() {
|
|
47
|
+
const { theme } = useWinuiTheme('system'); // or 'light' / 'dark'
|
|
48
|
+
return (
|
|
49
|
+
<FluentProvider theme={theme}>
|
|
50
|
+
<Button appearance="primary">Save</Button>
|
|
51
|
+
<Switch label="Notifications" />
|
|
52
|
+
</FluentProvider>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- **Render components from `fluentComponents`**, not straight from
|
|
58
|
+
`@fluentui/react-components`. The WinUI behaviour only reaches components that
|
|
59
|
+
come from the wrapped namespace.
|
|
60
|
+
- **Load the stylesheets in this order:** `base.css` first, then your own
|
|
61
|
+
utilities, then your own rules, then `winui.css`. Griffel injects its styles
|
|
62
|
+
last at runtime.
|
|
63
|
+
- **`base.css`** declares the fonts, the monospace ramp and the document rules.
|
|
64
|
+
Segoe UI Variable loads from Microsoft's hosts. The bundled Meslo LG S faces
|
|
65
|
+
load from the package.
|
|
66
|
+
|
|
67
|
+
### Colour scheme
|
|
68
|
+
|
|
69
|
+
Without any configuration, the stylesheets follow `prefers-color-scheme`, as
|
|
70
|
+
Floway does. To force a scheme, set `data-fwt-theme="light"` or `"dark"` on
|
|
71
|
+
`<html>`. `useWinuiTheme(mode)` and `applyThemeMode(mode)` do this for you, and
|
|
72
|
+
`useWinuiTheme` also returns the Fluent theme that matches the resolved scheme.
|
|
73
|
+
Always pass that theme to `FluentProvider`. The token stylesheet and the
|
|
74
|
+
Fluent theme have to agree on the scheme.
|
|
75
|
+
|
|
76
|
+
### A dashboard like Floway's
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
import { AppShell, GradientBackground, NavigationPane, WinuiRouterProvider } from '@pstrikez/fluent-winui-theme';
|
|
80
|
+
|
|
81
|
+
<FluentProvider theme={theme}>
|
|
82
|
+
<GradientBackground>
|
|
83
|
+
<WinuiRouterProvider router={{ navigate }}>
|
|
84
|
+
<AppShell
|
|
85
|
+
labels={{ skipToContent: 'Skip to content', openNavigation: 'Open navigation', navigation: 'Navigation' }}
|
|
86
|
+
narrowHeader={<Logo />}
|
|
87
|
+
navigation={({ onNavigate }) => <NavigationPane
|
|
88
|
+
label="Navigation"
|
|
89
|
+
header={<Logo />}
|
|
90
|
+
groups={[{ items: [{ value: '/', label: 'Home', href: '/', icon: <HomeRegular /> }] }]}
|
|
91
|
+
onNavigate={onNavigate}
|
|
92
|
+
selectedValue={pathname}
|
|
93
|
+
/>}
|
|
94
|
+
pageKey={pathname}
|
|
95
|
+
>
|
|
96
|
+
<Page />
|
|
97
|
+
</AppShell>
|
|
98
|
+
</WinuiRouterProvider>
|
|
99
|
+
</GradientBackground>
|
|
100
|
+
</FluentProvider>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
- **`pageKey`** names the current page. When it changes, the WinUI page
|
|
104
|
+
transition plays. Keep it stable while only the page's query string changes.
|
|
105
|
+
- **`WinuiRouterProvider`** connects in-app links to your router. Pass
|
|
106
|
+
react-router's `useNavigate()` result, or any `(to) => void`. Without the
|
|
107
|
+
provider, links are plain anchors that the browser follows.
|
|
108
|
+
- **`WinuiStringsProvider locale="zh-Hans"`** switches the components' own
|
|
109
|
+
text, such as Cancel, Copy and On/Off, to Simplified Chinese. Pass `strings`
|
|
110
|
+
to override individual entries.
|
|
111
|
+
|
|
112
|
+
### Server rendering
|
|
113
|
+
|
|
114
|
+
Keep the Fluent family out of SSR externalization so the server sees Fluent's
|
|
115
|
+
ESM entrypoints. In Vite, that is:
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
ssr: { noExternal: [/^@fluentui\//, /^@griffel\//, /^tabster(?:$|\/)/, /^@pstrikez\/fluent-winui-theme$/] }
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Development
|
|
122
|
+
|
|
123
|
+
```sh
|
|
124
|
+
pnpm install
|
|
125
|
+
pnpm run typecheck
|
|
126
|
+
pnpm test
|
|
127
|
+
pnpm run build
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
`demo/` is a gallery of every component inside the shell. Build the package
|
|
131
|
+
first, then run `pnpm run demo:build` and `pnpm run demo:preview`. The query
|
|
132
|
+
parameters `?mode=light|dark|system`, `?page=` and `?locale=en|zh-Hans` pick the
|
|
133
|
+
initial state.
|
|
134
|
+
|
|
135
|
+
[UPSTREAM.md](./UPSTREAM.md) records the Floway revision this package follows
|
|
136
|
+
and how to sync from it.
|
|
137
|
+
|
|
138
|
+
## License
|
|
139
|
+
|
|
140
|
+
MIT. See [LICENSE](./LICENSE) and [NOTICE.md](./NOTICE.md) for the Floway,
|
|
141
|
+
Microsoft and Meslo LG notices.
|
package/dist/base.css
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
body{margin:0}@media(prefers-color-scheme:dark){:root:not([data-fwt-theme=light]){color-scheme:dark}}:root[data-fwt-theme=dark]{color-scheme:dark}*,*:before,*:after{box-sizing:border-box}:root{--fontFamilyBase: "Segoe UI Variable Web", "Segoe UI Variable Text", "Segoe UI Variable Display", "Segoe UI Variable Small", "Segoe UI", system-ui, sans-serif}body{font-family:var(--fontFamilyBase)}.fwt-gradient-background{background-image:radial-gradient(circle at 50% 0%,#ffffff 0%,#f7fbff 36%,transparent 64%),linear-gradient(180deg,#f6f8fb,#eef2f6);height:100dvh;overflow:hidden}@media(prefers-color-scheme:dark){:root:not([data-fwt-theme=light]) .fwt-gradient-background{background-image:radial-gradient(circle at 50% 0%,#2d2d2d 0%,#242424 38%,transparent 68%),linear-gradient(180deg,#202020,#1c1c1c)}}:root[data-fwt-theme=dark] .fwt-gradient-background{background-image:radial-gradient(circle at 50% 0%,#2d2d2d 0%,#242424 38%,transparent 68%),linear-gradient(180deg,#202020,#1c1c1c)}.fwt-loading{box-sizing:border-box;display:grid;height:100%;padding:20px;place-items:center}.fwt-loading-app{min-height:100dvh}.fwt-loading .fui-Spinner{align-items:center;display:flex;gap:8px;justify-content:center;line-height:0;min-width:min-content;overflow:hidden}.fwt-loading .fui-Spinner__spinner{--fui-Spinner--strokeWidth: 25%;animation:fwt-loading-spin 1.5s linear infinite;background-color:rgba(255,255,255,0);color:var(--colorBrandStroke1, #0067c0);flex-shrink:0;height:32px;mask-image:radial-gradient(closest-side,transparent calc(100% - var(--fui-Spinner--strokeWidth) - 1px),white calc(100% - var(--fui-Spinner--strokeWidth)) calc(100% - 1px),transparent 100%);position:relative;width:32px;-webkit-mask-image:radial-gradient(closest-side,transparent calc(100% - var(--fui-Spinner--strokeWidth) - 1px),white calc(100% - var(--fui-Spinner--strokeWidth)) calc(100% - 1px),transparent 100%)}.fwt-loading .fui-Spinner__spinnerTail{animation:fwt-loading-tail 1.5s cubic-bezier(.33,0,.67,1) infinite;display:block;height:100%;mask-image:conic-gradient(transparent 105deg,#fff 105deg);position:absolute;width:100%;-webkit-mask-image:conic-gradient(transparent 105deg,white 105deg)}.fwt-loading .fui-Spinner__spinnerTail:before,.fwt-loading .fui-Spinner__spinnerTail:after{animation-duration:1.5s;animation-iteration-count:infinite;animation-timing-function:cubic-bezier(.33,0,.67,1);background-image:conic-gradient(currentcolor 135deg,transparent 135deg);content:"";display:block;height:100%;position:absolute;width:100%}.fwt-loading .fui-Spinner__spinnerTail:before{animation-name:fwt-loading-tail-before}.fwt-loading .fui-Spinner__spinnerTail:after{animation-name:fwt-loading-tail-after}.fwt-loading .fui-Spinner__label{color:var(--colorNeutralForeground1, rgba(0, 0, 0, .894118));font-family:var(--fontFamilyBase, sans-serif);font-size:var(--fontSizeBase300, 14px);font-weight:var(--fontWeightRegular, 400);line-height:var(--lineHeightBase300, 20px)}@media(prefers-color-scheme:dark){:root:not([data-fwt-theme=light]) .fwt-loading .fui-Spinner__spinner{color:var(--colorBrandStroke1, #4cc2ff)}:root:not([data-fwt-theme=light]) .fwt-loading .fui-Spinner__label{color:var(--colorNeutralForeground1, #ffffff)}}:root[data-fwt-theme=dark] .fwt-loading .fui-Spinner__spinner{color:var(--colorBrandStroke1, #4cc2ff)}:root[data-fwt-theme=dark] .fwt-loading .fui-Spinner__label{color:var(--colorNeutralForeground1, #ffffff)}@keyframes fwt-loading-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes fwt-loading-tail{0%{transform:rotate(-135deg)}50%{transform:rotate(0)}to{transform:rotate(225deg)}}@keyframes fwt-loading-tail-before{0%,to{transform:rotate(0)}50%{transform:rotate(105deg)}}@keyframes fwt-loading-tail-after{0%,to{transform:rotate(0)}50%{transform:rotate(225deg)}}@media screen and (forced-colors:active){.fwt-loading .fui-Spinner__spinner{background-color:HighlightText;color:Highlight;forced-color-adjust:none}}.fwt-error-shell{display:grid;align-content:center;justify-items:center;gap:24px;height:100%;min-height:max-content;margin:0 auto;max-width:720px;padding:64px 24px}.fwt-error-shell>*{min-width:0;max-width:100%}.fwt-error-shell-viewport{height:100dvh}.fwt-error-shell-stack{display:grid;gap:6px}.fwt-error-shell-stack>*{margin:0}.fwt-error-shell-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.fwt-navigation-progress{height:3px;inset:0 0 auto;opacity:0;overflow:hidden;pointer-events:none;position:fixed;transition:opacity var(--winui-control-fast-animation-duration) var(--winui-control-fast-out-slow-in-easing);z-index:1000001}.fwt-navigation-progress[data-active=true]{opacity:1}.fwt-navigation-progress:before,.fwt-navigation-progress:after{animation-play-state:paused;background-color:var(--winui-accent-fill-default);border-radius:1.5px;content:"";inset:0 auto 0 0;position:absolute}.fwt-navigation-progress:before,.fwt-navigation-progress:after{animation-duration:2s;animation-iteration-count:infinite;animation-timing-function:linear}.fwt-navigation-progress:before{animation-name:winui-progress-indeterminate;width:40%}.fwt-navigation-progress:after{animation-name:winui-progress-indeterminate-2;width:60%}@keyframes winui-progress-indeterminate{0%{animation-timing-function:cubic-bezier(.4,0,.6,1);transform:translate(-100%)}75%{transform:translate(300%)}to{transform:translate(300%)}}@keyframes winui-progress-indeterminate-2{0%{transform:translate(-150%)}37.5%{animation-timing-function:cubic-bezier(.4,0,.6,1);transform:translate(-150%)}to{transform:translate(166%)}}.fwt-navigation-progress[data-active=true]:before,.fwt-navigation-progress[data-active=true]:after{animation-play-state:running}@media(forced-colors:active){.fwt-navigation-progress{border:1px solid CanvasText;box-sizing:content-box}.fwt-navigation-progress:before,.fwt-navigation-progress:after{background-color:Highlight}}@font-face{font-family:Segoe UI Variable Web;src:url(https://docs.azure.cn/static/third-party/SegoeUIVariable/SegoeUI-VF.ttf?fwt-vf=2.02) format("truetype"),url(https://learn.microsoft.com/static/third-party/SegoeUIVariable/SegoeUI-VF.ttf?fwt-vf=2.02) format("truetype");font-style:normal;font-weight:300 700;font-display:swap}@font-face{font-family:Meslo LG S Web;src:url(./fonts/meslo-lg-s-400-normal.generated.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;size-adjust:99.9895%;ascent-override:102.0107%;descent-override:30.0032%;line-gap-override:0%}@font-face{font-family:Meslo LG S Web;src:url(./fonts/meslo-lg-s-400-italic.generated.woff2) format("woff2");font-style:italic;font-weight:400;font-display:swap;size-adjust:99.9895%;ascent-override:102.0107%;descent-override:30.0032%;line-gap-override:0%}@font-face{font-family:Meslo LG S Web;src:url(./fonts/meslo-lg-s-700-normal.generated.woff2) format("woff2");font-style:normal;font-weight:600 700;font-display:swap;size-adjust:99.9895%;ascent-override:102.0107%;descent-override:30.0032%;line-gap-override:0%}@font-face{font-family:Meslo LG S Web;src:url(./fonts/meslo-lg-s-700-italic.generated.woff2) format("woff2");font-style:italic;font-weight:600 700;font-display:swap;size-adjust:99.9895%;ascent-override:102.0107%;descent-override:30.0032%;line-gap-override:0%}*,:before,:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.container{width:100%}.border-fui-divider{border-color:var(--colorNeutralStroke3)}.border-fui-stroke1{border-color:var(--colorNeutralStroke1)}.bg-fui-bg1{background-color:var(--colorNeutralBackground1)}.bg-fui-bg2{background-color:var(--colorNeutralBackground2)}.text-fui-fg1{color:var(--colorNeutralForeground1)}.text-fui-fg2{color:var(--colorNeutralForeground2)}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.invisible{visibility:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.left-3{left:.75rem}.top-3{top:.75rem}.z-\[100000\]{z-index:100000}.\!grid{display:grid!important}.grid{display:grid}.col-start-1{grid-column-start:1}.row-start-1{grid-row-start:1}.grid-cols-\[clamp\(240px\,18vw\,290px\)_minmax\(0\,1fr\)\]{grid-template-columns:clamp(240px,18vw,290px) minmax(0,1fr)}.grid-cols-\[minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr)}.grid-rows-\[minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr)}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\!m-auto{margin:auto!important}.m-0{margin:0}.\!ml-auto{margin-left:auto!important}.ml-auto{margin-left:auto}.ms{margin-inline-start:1rem}.inline{display:inline}.block{display:block}.hidden{display:none}.\!h-full{height:100%!important}.\!max-w-\[calc\(100vw-16px\)\]{max-width:calc(100vw - 16px)!important}.\!max-w-none{max-width:none!important}.\!min-h-\[34px\]{min-height:34px!important}.\!min-w-\[0px\],.\[\&_input\]\:\!min-w-\[0px\] input{min-width:0px!important}.\!min-w-\[var\(--fui-match-target-size\)\]{min-width:var(--fui-match-target-size)!important}.\!min-w-\[var\(--fwt-select-min-width\,var\(--winui-combo-box-min-width\)\)\]{min-width:var(--fwt-select-min-width,var(--winui-combo-box-min-width))!important}.\!w-\[min\(430px\,calc\(100vw-48px\)\)\]{width:min(430px,calc(100vw - 48px))!important}.\!w-full{width:100%!important}.\!w-max{width:max-content!important}.h-\[100dvh\]{height:100dvh}.h-full{height:100%}.h1{height:.25rem}.h2{height:.5rem}.max-w-\[480px\]{max-width:480px}.max-w-\[760px\]{max-width:760px}.max-w-full{max-width:100%}.min-h-\[180px\]{min-height:180px}.min-h-0{min-height:0}.min-h-10{min-height:2.5rem}.min-h-full{min-height:100%}.min-h-max{min-height:max-content}.min-w-0{min-width:0}.min-w-full{min-width:100%}.w-full{width:100%}.w-max{width:max-content}.flex{display:flex}.inline-flex{display:inline-flex}.flex-none{flex:none}.shrink{flex-shrink:1}.grow{flex-grow:1}.table{display:table}.-translate-y-20{--un-translate-y:-5rem;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.focus\:translate-y-0:focus{--un-translate-y:0;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.transform{transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.cursor-pointer{cursor:pointer}.resize{resize:both}.place-items-center{place-items:center}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.justify-items-center{justify-items:center}.\!gap-0{gap:0!important}.\!gap-3{gap:.75rem!important}.gap-\[18px\]{gap:18px}.gap-\[var\(--fwt-page-inset\)\]{gap:var(--fwt-page-inset)}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.\!gap-y-1{row-gap:.25rem!important}.gap-x-2{column-gap:.5rem}.gap-y-1{row-gap:.25rem}.overflow-hidden{overflow:hidden}.\!truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\!whitespace-nowrap{white-space:nowrap!important}.b,.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.rounded{border-radius:.25rem}.rounded-\[var\(--winui-overlay-corner-radius\,8px\)\]{border-radius:var(--winui-overlay-corner-radius,8px)}.rounded-md{border-radius:.375rem}.border-solid{border-style:solid}.border-b-solid{border-bottom-style:solid}.\!bg-transparent{background-color:transparent!important}.bg-transparent{background-color:transparent}.\!p-\[var\(--fwt-panel-inset\)\]{padding:var(--fwt-panel-inset)!important}.\!p-0{padding:0!important}.p-\[22px_var\(--fwt-page-inset\)_var\(--fwt-page-inset\)\]{padding:22px var(--fwt-page-inset) var(--fwt-page-inset)}.p-\[var\(--fwt-panel-inset\)\]{padding:var(--fwt-panel-inset)}.p-0{padding:0}.p-4{padding:1rem}.\!px-\[10px\]{padding-left:10px!important;padding-right:10px!important}.\!px-5{padding-left:1.25rem!important;padding-right:1.25rem!important}.\!py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.\!py-4{padding-top:1rem!important;padding-bottom:1rem!important}.px,.px-4{padding-left:1rem;padding-right:1rem}.px-\[10px\]{padding-left:10px;padding-right:10px}.px-\[var\(--fwt-panel-inset\)\]{padding-left:var(--fwt-panel-inset);padding-right:var(--fwt-panel-inset)}.px-3{padding-left:.75rem;padding-right:.75rem}.py-\[var\(--spacingVerticalSNudge\)\]{padding-top:var(--spacingVerticalSNudge);padding-bottom:var(--spacingVerticalSNudge)}.py-2{padding-top:.5rem;padding-bottom:.5rem}.text-center{text-align:center}.text-left{text-align:left}.indent{text-indent:1.5rem}.text-fui-base300{font-size:var(--fontSizeBase300);line-height:1}.leading-\[var\(--lineHeightBase300\)\]{line-height:var(--lineHeightBase300)}.underline,.hover\:underline:hover{text-decoration-line:underline}.no-underline{text-decoration:none}.tab{-moz-tab-size:4;-o-tab-size:4;tab-size:4}.shadow{--un-shadow:var(--un-shadow-inset) 0 1px 3px 0 var(--un-shadow-color, rgb(0 0 0 / .1)),var(--un-shadow-inset) 0 1px 2px -1px var(--un-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / .1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.outline{outline-style:solid}.ring{--un-ring-width:3px;--un-ring-offset-shadow:var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);--un-ring-shadow:var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color);box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.blur{--un-blur:blur(8px);filter:var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.\@container{container-type:inline-size}@media(max-width:680px){.max-\[680px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-\[680px\]\:p-4{padding:1rem}}@media(max-width:900px){.max-\[900px\]\:grid-rows-\[58px_minmax\(0\,1fr\)\]{grid-template-rows:58px minmax(0,1fr)}.max-\[900px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-\[900px\]\:hidden{display:none}.max-\[900px\]\:flex{display:flex}.max-\[900px\]\:flex-col{flex-direction:column}.max-\[900px\]\:items-stretch{align-items:stretch}.max-\[900px\]\:justify-start{justify-content:flex-start}}:root{--fwt-page-inset: 28px;--fwt-panel-inset: 16px}@media(max-width:680px){:root{--fwt-page-inset: 16px}}:root{--fwt-font-size-mono: 13px;--fwt-line-height-mono: 20px;--fwt-font-size-mono-base100: 9px;--fwt-line-height-mono-base100: 14px;--fwt-font-size-mono-base500: 17px;--fwt-line-height-mono-base500: 24px;--fwt-font-size-mono-xs: 11px;--fwt-line-height-mono-xs: 16px}button,input,select,textarea{font:inherit}code,kbd,pre,samp{font-family:var(--fontFamilyMonospace, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace)}:where(code,kbd,samp){font-size:calc(1em - 1px)!important;background-color:transparent;color:inherit}:where(strong,b){font-weight:var(--fontWeightSemibold)}pre,.font-mono{font-size:var(--fwt-font-size-mono)!important;line-height:var(--fwt-line-height-mono)!important}.font-mono :where(button,input,select,textarea,code,kbd,pre,samp),pre :where(code,kbd,samp){font-size:inherit!important}.mono-size-100{--fwt-font-size-mono: var(--fwt-font-size-mono-base100);--fwt-line-height-mono: var(--fwt-line-height-mono-base100)}.mono-size-xs{--fwt-font-size-mono: var(--fwt-font-size-mono-xs);--fwt-line-height-mono: var(--fwt-line-height-mono-xs)}.mono-display{font-size:var(--fwt-font-size-mono-base500)!important;line-height:var(--fwt-line-height-mono-base500)!important}.font-mono,.font-mono button,.font-mono input,.font-mono select,.font-mono textarea{font-family:var(--fontFamilyMonospace)!important}/*!
|
|
2
|
+
* OverlayScrollbars
|
|
3
|
+
* Version: 2.13.0
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) Rene Haas | KingSora.
|
|
6
|
+
* https://github.com/KingSora
|
|
7
|
+
*
|
|
8
|
+
* Released under the MIT license.
|
|
9
|
+
*/.os-size-observer,.os-size-observer-listener{scroll-behavior:auto!important;direction:inherit;pointer-events:none;overflow:hidden;visibility:hidden;box-sizing:border-box}.os-size-observer,.os-size-observer-listener,.os-size-observer-listener-item,.os-size-observer-listener-item-final{writing-mode:horizontal-tb;position:absolute;left:0;top:0}.os-size-observer{z-index:-1;contain:strict;display:flex;flex-direction:row;flex-wrap:nowrap;padding:inherit;border:inherit;box-sizing:inherit;margin:-133px;top:0;right:0;bottom:0;left:0;transform:scale(.1)}.os-size-observer:before{content:"";flex:none;box-sizing:inherit;padding:10px;width:10px;height:10px}.os-size-observer-appear{animation:os-size-observer-appear-animation 1ms forwards}.os-size-observer-listener{box-sizing:border-box;position:relative;flex:auto;padding:inherit;border:inherit;margin:-133px;transform:scale(10)}.os-size-observer-listener.ltr{margin-right:-266px;margin-left:0}.os-size-observer-listener.rtl{margin-left:-266px;margin-right:0}.os-size-observer-listener:empty:before{content:"";width:100%;height:100%}.os-size-observer-listener:empty:before,.os-size-observer-listener>.os-size-observer-listener-item{display:block;position:relative;padding:inherit;border:inherit;box-sizing:content-box;flex:auto}.os-size-observer-listener-scroll{box-sizing:border-box;display:flex}.os-size-observer-listener-item{right:0;bottom:0;overflow:hidden;direction:ltr;flex:none}.os-size-observer-listener-item-final{transition:none}@keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}.os-trinsic-observer{flex:none;box-sizing:border-box;position:relative;max-width:0px;max-height:1px;padding:0;margin:0;border:none;overflow:hidden;z-index:-1;height:0;top:calc(100% + 1px);contain:strict}.os-trinsic-observer:not(:empty){height:calc(100% + 1px);top:-1px}.os-trinsic-observer:not(:empty)>.os-size-observer{width:1000%;height:1000%;min-height:1px;min-width:1px}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars-viewport]),[data-overlayscrollbars-viewport~=scrollbarHidden],html[data-overlayscrollbars-viewport~=scrollbarHidden]>body{scrollbar-width:none!important}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars-viewport])::-webkit-scrollbar,[data-overlayscrollbars-initialize]:not([data-overlayscrollbars-viewport])::-webkit-scrollbar-corner,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar-corner,html[data-overlayscrollbars-viewport~=scrollbarHidden]>body::-webkit-scrollbar,html[data-overlayscrollbars-viewport~=scrollbarHidden]>body::-webkit-scrollbar-corner{-webkit-appearance:none!important;appearance:none!important;display:none!important;width:0!important;height:0!important}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars]):not(html):not(body){overflow:auto}html[data-overlayscrollbars-body]{overflow:hidden}html[data-overlayscrollbars-body],html[data-overlayscrollbars-body]>body{width:100%;height:100%;margin:0}html[data-overlayscrollbars-body]>body{overflow:visible;margin:0}[data-overlayscrollbars]{position:relative}[data-overlayscrollbars~=host],[data-overlayscrollbars-padding]{display:flex;align-items:stretch!important;flex-direction:row!important;flex-wrap:nowrap!important;scroll-behavior:auto!important}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]:not([data-overlayscrollbars]){box-sizing:inherit;position:relative;flex:auto;height:auto;width:100%;min-width:0;padding:0;margin:0;border:none;z-index:0}[data-overlayscrollbars-viewport]:not([data-overlayscrollbars]){--os-vaw: 0;--os-vah: 0;outline:none}[data-overlayscrollbars-viewport]:not([data-overlayscrollbars]):focus{outline:none}[data-overlayscrollbars-viewport][data-overlayscrollbars-viewport~=arrange]:before{content:"";position:absolute;pointer-events:none;z-index:-1;min-width:1px;min-height:1px;width:var(--os-vaw);height:var(--os-vah)}[data-overlayscrollbars~=host],[data-overlayscrollbars-padding]{overflow:hidden!important}[data-overlayscrollbars~=host][data-overlayscrollbars~=noClipping],[data-overlayscrollbars-padding~=noClipping]{overflow:visible!important}[data-overlayscrollbars-viewport]{--os-viewport-overflow-x: hidden;--os-viewport-overflow-y: hidden;overflow-x:var(--os-viewport-overflow-x);overflow-y:var(--os-viewport-overflow-y)}[data-overlayscrollbars-viewport~=overflowXVisible]{--os-viewport-overflow-x: visible}[data-overlayscrollbars-viewport~=overflowXHidden]{--os-viewport-overflow-x: hidden}[data-overlayscrollbars-viewport~=overflowXScroll]{--os-viewport-overflow-x: scroll}[data-overlayscrollbars-viewport~=overflowYVisible]{--os-viewport-overflow-y: visible}[data-overlayscrollbars-viewport~=overflowYHidden]{--os-viewport-overflow-y: hidden}[data-overlayscrollbars-viewport~=overflowYScroll]{--os-viewport-overflow-y: scroll}[data-overlayscrollbars-viewport~=overflowImportant]{overflow-x:var(--os-viewport-overflow-x)!important;overflow-y:var(--os-viewport-overflow-y)!important}[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId){font-size:0!important;line-height:0!important}[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId):before,[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId):after,[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId)>*{display:none!important;position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}[data-overlayscrollbars-viewport~=measuring],[data-overlayscrollbars-viewport~=scrolling]{scroll-behavior:auto!important;scroll-snap-type:none!important}[data-overlayscrollbars-viewport~=measuring][data-overlayscrollbars-viewport~=overflowXVisible]{overflow-x:hidden!important}[data-overlayscrollbars-viewport~=measuring][data-overlayscrollbars-viewport~=overflowYVisible]{overflow-y:hidden!important}[data-overlayscrollbars-content]{box-sizing:inherit}[data-overlayscrollbars-contents]:not(#osFakeId):not([data-overlayscrollbars-padding]):not([data-overlayscrollbars-viewport]):not([data-overlayscrollbars-content]){display:contents}[data-overlayscrollbars-grid],[data-overlayscrollbars-grid] [data-overlayscrollbars-padding]{display:grid;grid-template:1fr/1fr}[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding],[data-overlayscrollbars-grid]>[data-overlayscrollbars-viewport],[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding]>[data-overlayscrollbars-viewport]{height:auto!important;width:auto!important}@property --os-scroll-percent{syntax: "<number>"; inherits: true; initial-value: 0;}@property --os-viewport-percent{syntax: "<number>"; inherits: true; initial-value: 0;}.os-scrollbar{--os-viewport-percent: 0;--os-scroll-percent: 0;--os-scroll-direction: 0;--os-scroll-percent-directional: calc( var(--os-scroll-percent) - (var(--os-scroll-percent) + (1 - var(--os-scroll-percent)) * -1) * var(--os-scroll-direction) )}.os-scrollbar{contain:size layout;contain:size layout style;transition:opacity .15s,visibility .15s,top .15s,right .15s,bottom .15s,left .15s;pointer-events:none;position:absolute;opacity:0;visibility:hidden}body>.os-scrollbar{position:fixed;z-index:99999}.os-scrollbar-transitionless{transition:none!important}.os-scrollbar-track{position:relative;padding:0!important;border:none!important}.os-scrollbar-handle{position:absolute}.os-scrollbar-track,.os-scrollbar-handle{pointer-events:none;width:100%;height:100%}.os-scrollbar.os-scrollbar-track-interactive .os-scrollbar-track,.os-scrollbar.os-scrollbar-handle-interactive .os-scrollbar-handle{pointer-events:auto;touch-action:none}.os-scrollbar-horizontal{bottom:0;left:0}.os-scrollbar-vertical{top:0;right:0}.os-scrollbar-rtl.os-scrollbar-horizontal{right:0}.os-scrollbar-rtl.os-scrollbar-vertical{right:auto;left:0}.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-auto-hide.os-scrollbar-auto-hide-hidden{opacity:0;visibility:hidden}.os-scrollbar-interaction.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-unusable,.os-scrollbar-unusable *,.os-scrollbar-wheel,.os-scrollbar-wheel *{pointer-events:none!important}.os-scrollbar-unusable .os-scrollbar-handle{opacity:0!important;transition:none!important}.os-scrollbar-horizontal .os-scrollbar-handle{bottom:0;left:calc(var(--os-scroll-percent-directional) * 100%);transform:translate(calc(var(--os-scroll-percent-directional) * -100%));width:calc(var(--os-viewport-percent) * 100%)}.os-scrollbar-vertical .os-scrollbar-handle{right:0;top:calc(var(--os-scroll-percent-directional) * 100%);transform:translateY(calc(var(--os-scroll-percent-directional) * -100%));height:calc(var(--os-viewport-percent) * 100%)}@supports (container-type: size){.os-scrollbar-track{container-type:size}.os-scrollbar-horizontal .os-scrollbar-handle{left:auto;transform:translate(calc(var(--os-scroll-percent-directional) * 100cqw + var(--os-scroll-percent-directional) * -100%))}.os-scrollbar-vertical .os-scrollbar-handle{top:auto;transform:translateY(calc(var(--os-scroll-percent-directional) * 100cqh + var(--os-scroll-percent-directional) * -100%))}.os-scrollbar-rtl.os-scrollbar-horizontal .os-scrollbar-handle{right:auto;left:0}}.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle{right:auto;left:0}.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless.os-scrollbar-rtl{left:0;right:0}.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless.os-scrollbar-rtl{top:0;bottom:0}@media print{.os-scrollbar{display:none}}.os-scrollbar{--os-size: 0;--os-padding-perpendicular: 0;--os-padding-axis: 0;--os-track-border-radius: 0;--os-track-bg: none;--os-track-bg-hover: none;--os-track-bg-active: none;--os-track-border: none;--os-track-border-hover: none;--os-track-border-active: none;--os-handle-border-radius: 0;--os-handle-bg: none;--os-handle-bg-hover: none;--os-handle-bg-active: none;--os-handle-border: none;--os-handle-border-hover: none;--os-handle-border-active: none;--os-handle-min-size: 33px;--os-handle-max-size: none;--os-handle-perpendicular-size: 100%;--os-handle-perpendicular-size-hover: 100%;--os-handle-perpendicular-size-active: 100%;--os-handle-interactive-area-offset: 0}.os-scrollbar-track{border:var(--os-track-border);border-radius:var(--os-track-border-radius);background:var(--os-track-bg);transition:opacity .15s,background-color .15s,border-color .15s}.os-scrollbar-track:hover{border:var(--os-track-border-hover);background:var(--os-track-bg-hover)}.os-scrollbar-track:active{border:var(--os-track-border-active);background:var(--os-track-bg-active)}.os-scrollbar-handle{border:var(--os-handle-border);border-radius:var(--os-handle-border-radius);background:var(--os-handle-bg)}.os-scrollbar-handle:hover{border:var(--os-handle-border-hover);background:var(--os-handle-bg-hover)}.os-scrollbar-handle:active{border:var(--os-handle-border-active);background:var(--os-handle-bg-active)}.os-scrollbar-track:before,.os-scrollbar-handle:before{content:"";position:absolute;left:0;right:0;top:0;bottom:0;display:block}.os-scrollbar-horizontal{padding:var(--os-padding-perpendicular) var(--os-padding-axis);right:var(--os-size);height:var(--os-size)}.os-scrollbar-horizontal.os-scrollbar-rtl{left:var(--os-size);right:0}.os-scrollbar-horizontal .os-scrollbar-track:before{top:calc(var(--os-padding-perpendicular) * -1);bottom:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-horizontal .os-scrollbar-handle{min-width:var(--os-handle-min-size);max-width:var(--os-handle-max-size);height:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,height .15s}.os-scrollbar-horizontal .os-scrollbar-handle:before{top:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);bottom:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-horizontal:hover .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-horizontal:active .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-active)}.os-scrollbar-vertical{padding:var(--os-padding-axis) var(--os-padding-perpendicular);bottom:var(--os-size);width:var(--os-size)}.os-scrollbar-vertical .os-scrollbar-track:before{left:calc(var(--os-padding-perpendicular) * -1);right:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical .os-scrollbar-handle{min-height:var(--os-handle-min-size);max-height:var(--os-handle-max-size);width:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,width .15s}.os-scrollbar-vertical .os-scrollbar-handle:before{left:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);right:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before{right:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);left:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical:hover .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-vertical:active .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-active)}[data-overlayscrollbars-viewport~=measuring]>.os-scrollbar,.os-theme-none.os-scrollbar{display:none!important}.os-theme-dark,.os-theme-light{box-sizing:border-box;--os-size: 10px;--os-padding-perpendicular: 2px;--os-padding-axis: 2px;--os-track-border-radius: 10px;--os-handle-interactive-area-offset: 4px;--os-handle-border-radius: 10px}.os-theme-dark{--os-handle-bg: rgba(0, 0, 0, .44);--os-handle-bg-hover: rgba(0, 0, 0, .55);--os-handle-bg-active: rgba(0, 0, 0, .66)}.os-theme-light{--os-handle-bg: rgba(255, 255, 255, .44);--os-handle-bg-hover: rgba(255, 255, 255, .55);--os-handle-bg-active: rgba(255, 255, 255, .66)}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
export declare function NavSelectionIndicator({ containerRef, inset, otherListIs, selectedValue, }: {
|
|
3
|
+
containerRef: RefObject<HTMLElement | null>;
|
|
4
|
+
inset: number;
|
|
5
|
+
otherListIs: 'above' | 'below';
|
|
6
|
+
selectedValue: string;
|
|
7
|
+
}): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react';
|
|
2
|
+
/** A hue that reads the same in both schemes, or one stated per scheme. */
|
|
3
|
+
export type BadgeHue = string | {
|
|
4
|
+
light: string;
|
|
5
|
+
dark: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* A badge painted in an arbitrary hue. The label is resolved against the fill
|
|
9
|
+
* rather than the surface under it, because the wash moves the reading by enough
|
|
10
|
+
* to change the answer. Fill and stroke are fractions of the hue, so they
|
|
11
|
+
* composite over whatever is beneath and follow that surface's pointer and
|
|
12
|
+
* selection states on their own.
|
|
13
|
+
*
|
|
14
|
+
* A hue may differ by scheme -- WinUI states its own success, caution and
|
|
15
|
+
* critical colours twice, because a colour that carries a meaning against white
|
|
16
|
+
* is not the one that carries it against black.
|
|
17
|
+
*/
|
|
18
|
+
export declare const useBadgeHue: (hue: BadgeHue) => {
|
|
19
|
+
className: string;
|
|
20
|
+
style: CSSProperties;
|
|
21
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ComponentProps, CSSProperties, ReactElement, ReactNode, Ref } from 'react';
|
|
2
|
+
declare const Tag: import("@fluentui/react-components").ForwardRefComponent<import("@fluentui/react-components").TagProps<string>>;
|
|
3
|
+
type ChipTriggerProps = Omit<ComponentProps<typeof Tag>, 'appearance' | 'children' | 'className' | 'disabled' | 'dismissIcon' | 'dismissible' | 'icon' | 'media' | 'primaryText' | 'secondaryText' | 'selected' | 'shape' | 'size' | 'style' | 'value'>;
|
|
4
|
+
export declare function Chip({ children, className, icon, style, textRef, ...trigger }: {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
className?: string;
|
|
7
|
+
icon?: ReactElement;
|
|
8
|
+
style?: CSSProperties;
|
|
9
|
+
textRef?: Ref<HTMLSpanElement>;
|
|
10
|
+
} & ChipTriggerProps): import("react").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface ChoiceGroupItem {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Where this choice's view lives, for a group that picks between views of
|
|
7
|
+
* data rather than between the values of a form field. The choice becomes an
|
|
8
|
+
* anchor and can be opened in a second tab, which is the whole point of
|
|
9
|
+
* addressing it: a range beside another range is a comparison.
|
|
10
|
+
*/
|
|
11
|
+
to?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function ChoiceGroup({ ariaLabel, disabled, items, onChange, readOnly, value, }: {
|
|
14
|
+
ariaLabel: string;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
items: ChoiceGroupItem[];
|
|
17
|
+
onChange: (value: string) => void;
|
|
18
|
+
/**
|
|
19
|
+
* The choice is shown but is not this operator's to make -- as distinct from
|
|
20
|
+
* disabled, which says the choice is not available at all. It keeps its own
|
|
21
|
+
* appearance and pointer states, takes focus, and refuses the selection.
|
|
22
|
+
*/
|
|
23
|
+
readOnly?: boolean;
|
|
24
|
+
value: string;
|
|
25
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { type CopyOutcome } from './use-copy-to-clipboard';
|
|
3
|
+
export declare function CodeBlock({ code, collapsed, copyOutcome, disabled, header, language, onCopy, wrap }: {
|
|
4
|
+
code: string;
|
|
5
|
+
collapsed?: boolean;
|
|
6
|
+
copyOutcome: CopyOutcome;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
/** Replaces the language caption in the header bar, for switchers that pick which code this block shows. */
|
|
9
|
+
header?: ReactNode;
|
|
10
|
+
language: string;
|
|
11
|
+
onCopy: () => void;
|
|
12
|
+
wrap?: boolean;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function ConfirmDialog({ actionIntent, actionLabel, busy, cancelLabel, error, message, onCancel, onConfirm, onDismissError, onExited, onOpenChange, open, title, }: {
|
|
2
|
+
actionIntent?: 'danger' | 'primary';
|
|
3
|
+
actionLabel: string;
|
|
4
|
+
busy?: boolean;
|
|
5
|
+
cancelLabel?: string;
|
|
6
|
+
error?: string | null;
|
|
7
|
+
message: string;
|
|
8
|
+
onCancel?: () => void;
|
|
9
|
+
onConfirm: () => void;
|
|
10
|
+
onDismissError?: () => void;
|
|
11
|
+
/** See DialogShell: the deed a confirmation does to its own tree goes here. */
|
|
12
|
+
onExited?: () => void;
|
|
13
|
+
onOpenChange: (open: boolean) => void;
|
|
14
|
+
open: boolean;
|
|
15
|
+
title: string;
|
|
16
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const copyToClipboard: (text: string) => Promise<boolean>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DialogProps } from '@fluentui/react-components';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
declare const surfaceWidthClasses: {
|
|
4
|
+
standard: string;
|
|
5
|
+
editor: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function DialogShell({ actions, children, onExited, onOpenChange, onSubmit, open, surfaceClassName, title, width }: {
|
|
8
|
+
actions: ReactNode;
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* Runs once the surface has finished animating out. A caller whose
|
|
12
|
+
* confirmation destroys the tree the dialog lives in does the deed here:
|
|
13
|
+
* closing and destroying in one handler is one React commit, and the exit
|
|
14
|
+
* never gets to start.
|
|
15
|
+
*/
|
|
16
|
+
onExited?: () => void;
|
|
17
|
+
onOpenChange: DialogProps['onOpenChange'];
|
|
18
|
+
onSubmit?: () => void;
|
|
19
|
+
open: boolean;
|
|
20
|
+
surfaceClassName?: string;
|
|
21
|
+
title: ReactNode;
|
|
22
|
+
width?: keyof typeof surfaceWidthClasses;
|
|
23
|
+
}): import("react").JSX.Element;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
declare const ALIGN_CLASS: {
|
|
3
|
+
readonly center: "text-center justify-items-center";
|
|
4
|
+
readonly start: "justify-items-start";
|
|
5
|
+
};
|
|
6
|
+
export declare function EmptyState({ action, align, className, description, title }: {
|
|
7
|
+
action?: ReactNode;
|
|
8
|
+
align?: keyof typeof ALIGN_CLASS;
|
|
9
|
+
className?: string;
|
|
10
|
+
description?: ReactNode;
|
|
11
|
+
title: ReactNode;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
13
|
+
export declare function EmptyStateLine({ children, className }: {
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
className?: string;
|
|
16
|
+
}): import("react").JSX.Element;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const errorShellCss = "\n /* 24px is ContentDialogPadding; the measure and the inset are ours, since a\n page that has to hold a stack trace is not a 548px dialog. The shell's own\n min-height of max-content is what keeps a long trace scrolling, where the\n full height beside it would clamp the shell to the viewport.\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/CommonStyles/ContentDialog_themeresources.xaml#L18 */\n .fwt-error-shell {\n display: grid;\n align-content: center;\n justify-items: center;\n gap: 24px;\n height: 100%;\n min-height: max-content;\n margin: 0 auto;\n max-width: 720px;\n padding: 64px 24px;\n }\n /* A grid item's automatic minimum is its content, so without these a long\n trace widens the page past the measure above. */\n .fwt-error-shell > * { min-width: 0; max-width: 100%; }\n .fwt-error-shell-viewport { height: 100dvh; }\n /* A page heading, not a dialog title: takes ./dashboard-page-header.tsx's\n step rather than ContentDialogTitleMargin's 12.\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/CommonStyles/ContentDialog_themeresources.xaml#L17 */\n .fwt-error-shell-stack { display: grid; gap: 6px; }\n .fwt-error-shell-stack > * { margin: 0; }\n /* ContentDialogButtonSpacing, but content-width instead of WinUI\n CommandSpace's equal star columns: this row sits in an open page and reads\n as two offered commands rather than as a page footer closing a dialog.\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/CommonStyles/ContentDialog_themeresources.xaml#L16\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/CommonStyles/ContentDialog_themeresources.xaml#L248-L258 */\n .fwt-error-shell-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; }\n";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PropsWithChildren, ReactNode } from 'react';
|
|
2
|
+
export declare function ErrorShell({ action, children, message, title }: PropsWithChildren<{
|
|
3
|
+
action?: ReactNode;
|
|
4
|
+
/**
|
|
5
|
+
* Omitted when a trace is shown and it needs nothing said about it: the
|
|
6
|
+
* trace's first line is this sentence.
|
|
7
|
+
*/
|
|
8
|
+
message?: ReactNode;
|
|
9
|
+
title: string;
|
|
10
|
+
}>): import("react").JSX.Element;
|
|
11
|
+
export declare function ErrorStack({ children }: PropsWithChildren): import("react").JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CheckboxProps, ComboboxProps, DropdownProps, SwitchProps, TextareaProps } from '@fluentui/react-components';
|
|
2
|
+
import type { ForwardRefExoticComponent, MouseEvent, RefAttributes } from 'react';
|
|
3
|
+
declare const FluentInput: import("@fluentui/react-components").ForwardRefComponent<import("@fluentui/react-components").InputProps>;
|
|
4
|
+
interface ReadOnlyProp {
|
|
5
|
+
readOnly?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const LISTBOX_POSITIONING: {
|
|
8
|
+
position: "below";
|
|
9
|
+
align: "start";
|
|
10
|
+
autoSize: "height";
|
|
11
|
+
fallbackPositions: "above"[];
|
|
12
|
+
overflowBoundaryPadding: number;
|
|
13
|
+
};
|
|
14
|
+
interface ListWidthProp {
|
|
15
|
+
listWidth?: 'target' | 'content';
|
|
16
|
+
}
|
|
17
|
+
interface EmptyMessageProp {
|
|
18
|
+
emptyMessage?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare const Input: typeof FluentInput;
|
|
21
|
+
export declare const Combobox: ForwardRefExoticComponent<Omit<ComboboxProps, 'appearance' | 'listbox'> & ListWidthProp & EmptyMessageProp & ReadOnlyProp & RefAttributes<HTMLInputElement>>;
|
|
22
|
+
export declare const Dropdown: ForwardRefExoticComponent<Omit<DropdownProps, 'appearance' | 'listbox'> & ListWidthProp & EmptyMessageProp & ReadOnlyProp & RefAttributes<HTMLButtonElement>>;
|
|
23
|
+
export declare const refuseToggle: (event: MouseEvent<HTMLInputElement>) => void;
|
|
24
|
+
export declare const Checkbox: ForwardRefExoticComponent<Omit<CheckboxProps, 'shape' | 'size'> & ReadOnlyProp & RefAttributes<HTMLInputElement>>;
|
|
25
|
+
export declare const Switch: ForwardRefExoticComponent<SwitchProps & ReadOnlyProp & RefAttributes<HTMLInputElement>>;
|
|
26
|
+
export declare const Textarea: ForwardRefExoticComponent<Omit<TextareaProps, 'resize'> & RefAttributes<HTMLTextAreaElement>>;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export declare function HttpMethodBadge({ method }: {
|
|
3
|
+
method: string;
|
|
4
|
+
}): import("react").JSX.Element;
|
|
5
|
+
export declare function HttpStatusBadge({ children, severity }: {
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
severity: 'success' | 'warning' | 'error';
|
|
8
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { InfoLabelProps, LabelProps } from '@fluentui/react-components';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
export declare const infoLabelSlot: (label: ReactNode, info: InfoLabelProps["info"]) => (_: unknown, slotProps: LabelProps) => import("react").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const TIGHT_STACK_CLASS = "grid gap-1";
|
|
2
|
+
export declare const HEADER_ROW_CLASS = "flex items-center justify-between min-w-0 max-[900px]:flex-col max-[900px]:items-stretch";
|
|
3
|
+
export declare const SECTION_STACK_CLASS = "grid gap-2";
|
|
4
|
+
export declare const PANEL_STACK_CLASS = "!grid !gap-3";
|
|
5
|
+
export declare const TWO_COLUMN_FORM_CLASS = "grid grid-cols-2 max-[680px]:grid-cols-1";
|
|
6
|
+
export declare const PANE_GAP_CLASS = "gap-[var(--fwt-page-inset)]";
|
|
7
|
+
export declare const SCROLLPORT_FILL_CLASS = "h-full min-h-max";
|
|
8
|
+
export declare const CONTROL_ROW_CLASS = "!min-h-[34px]";
|
|
9
|
+
export declare const CHECKBOX_LIST_CLASS = "gap-x-2 gap-y-1";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const loadingCss = "\n .fwt-loading {\n box-sizing: border-box;\n display: grid;\n height: 100%;\n padding: 20px;\n place-items: center;\n }\n /* Only the boot screen owns the viewport; a content region is sized by the\n layout it waits inside. */\n .fwt-loading-app {\n min-height: 100dvh;\n }\n .fwt-loading .fui-Spinner {\n align-items: center;\n display: flex;\n gap: 8px;\n justify-content: center;\n line-height: 0;\n min-width: min-content;\n overflow: hidden;\n }\n /* WinUI's ProgressRingStrokeThickness is 4 on a 32-square ring, but Fluent\n carries the width into a radial-gradient stop where a percentage resolves\n against the closest-side radius, so an eighth of the diameter is written as\n a quarter. The circle behind the arc stays transparent.\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/ProgressRing/ProgressRing_themeresources.xaml#L5-L6\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/ProgressRing/ProgressRing_themeresources.xaml#L17\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/ProgressRing/ProgressRing.xaml#L12-L13\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/CommonStyles/Common_themeresources_any.xaml#L219-L225\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/CommonStyles/Common_themeresources_any.xaml#L125-L127 */\n .fwt-loading .fui-Spinner__spinner {\n --fui-Spinner--strokeWidth: 25%;\n animation: fwt-loading-spin 1.5s linear infinite;\n background-color: rgba(255, 255, 255, 0);\n color: var(--colorBrandStroke1, #0067c0);\n flex-shrink: 0;\n height: 32px;\n mask-image: radial-gradient(closest-side, transparent calc(100% - var(--fui-Spinner--strokeWidth) - 1px), white calc(100% - var(--fui-Spinner--strokeWidth)) calc(100% - 1px), transparent 100%);\n position: relative;\n width: 32px;\n -webkit-mask-image: radial-gradient(closest-side, transparent calc(100% - var(--fui-Spinner--strokeWidth) - 1px), white calc(100% - var(--fui-Spinner--strokeWidth)) calc(100% - 1px), transparent 100%);\n }\n .fwt-loading .fui-Spinner__spinnerTail {\n animation: fwt-loading-tail 1.5s cubic-bezier(0.33, 0, 0.67, 1) infinite;\n display: block;\n height: 100%;\n mask-image: conic-gradient(transparent 105deg, white 105deg);\n position: absolute;\n width: 100%;\n -webkit-mask-image: conic-gradient(transparent 105deg, white 105deg);\n }\n .fwt-loading .fui-Spinner__spinnerTail::before,\n .fwt-loading .fui-Spinner__spinnerTail::after {\n animation-duration: 1.5s;\n animation-iteration-count: infinite;\n animation-timing-function: cubic-bezier(0.33, 0, 0.67, 1);\n background-image: conic-gradient(currentcolor 135deg, transparent 135deg);\n content: '';\n display: block;\n height: 100%;\n position: absolute;\n width: 100%;\n }\n .fwt-loading .fui-Spinner__spinnerTail::before {\n animation-name: fwt-loading-tail-before;\n }\n .fwt-loading .fui-Spinner__spinnerTail::after {\n animation-name: fwt-loading-tail-after;\n }\n /* WinUI's ProgressRing has no label slot, so the label takes\n BodyTextBlockStyle rather than the subtitle2 Fluent gives a medium Spinner,\n which would read as a heading of the screen or region it is waiting in.\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/CommonStyles/TextBlock_themeresources.xaml#L4\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/CommonStyles/TextBlock_themeresources.xaml#L23-L25 */\n .fwt-loading .fui-Spinner__label {\n color: var(--colorNeutralForeground1, rgba(0, 0, 0, 0.894118));\n font-family: var(--fontFamilyBase, sans-serif);\n font-size: var(--fontSizeBase300, 14px);\n font-weight: var(--fontWeightRegular, 400);\n line-height: var(--lineHeightBase300, 20px);\n }\n /* Dark-dictionary literals for the same two tokens.\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/CommonStyles/Common_themeresources_any.xaml#L329-L331\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/CommonStyles/Common_themeresources_any.xaml#L5-L9 */\n @media (prefers-color-scheme: dark) {\n .fwt-loading .fui-Spinner__spinner {\n color: var(--colorBrandStroke1, #4cc2ff);\n }\n .fwt-loading .fui-Spinner__label {\n color: var(--colorNeutralForeground1, #ffffff);\n }\n }\n @keyframes fwt-loading-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n @keyframes fwt-loading-tail {\n 0% { transform: rotate(-135deg); }\n 50% { transform: rotate(0deg); }\n 100% { transform: rotate(225deg); }\n }\n @keyframes fwt-loading-tail-before {\n 0%, 100% { transform: rotate(0deg); }\n 50% { transform: rotate(105deg); }\n }\n @keyframes fwt-loading-tail-after {\n 0%, 100% { transform: rotate(0deg); }\n 50% { transform: rotate(225deg); }\n }\n /* Highlight is the accent WinUI's HighContrast dictionary names for the arc.\n https://github.com/microsoft/microsoft-ui-xaml/blob/188f602b27cdb47572b28c380e9c087b02e1ccee/controls/dev/ProgressRing/ProgressRing_themeresources.xaml#L12-L15 */\n @media screen and (forced-colors: active) {\n .fwt-loading .fui-Spinner__spinner {\n background-color: HighlightText;\n color: Highlight;\n forced-color-adjust: none;\n }\n }\n";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface MultiselectOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function MultiselectCombobox({ ariaLabel, className, clearLabel, closedLabel, disabled, freeform, normalizeValue, onChange, options, placeholder, readOnly, renderOption, value, }: {
|
|
7
|
+
ariaLabel?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
clearLabel?: string;
|
|
10
|
+
closedLabel?: string;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
freeform?: boolean;
|
|
13
|
+
normalizeValue?: (entry: string) => string;
|
|
14
|
+
onChange: (value: string[]) => void;
|
|
15
|
+
options: readonly MultiselectOption[];
|
|
16
|
+
placeholder: string;
|
|
17
|
+
readOnly?: boolean;
|
|
18
|
+
renderOption?: (option: MultiselectOption) => ReactNode;
|
|
19
|
+
value: readonly string[];
|
|
20
|
+
}): import("react").JSX.Element;
|
|
21
|
+
export declare const valuesAsOptions: (values: readonly string[]) => MultiselectOption[];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export declare function OutcomeMessageBar({ action, children, className, intent, onDismiss, title, }: {
|
|
3
|
+
action?: ReactNode;
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
intent?: 'error' | 'warning' | 'success' | 'info';
|
|
7
|
+
onDismiss?: () => void;
|
|
8
|
+
title?: string;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PropsWithChildren } from 'react';
|
|
2
|
+
interface OutcomeHandle {
|
|
3
|
+
succeed: (message: string) => void;
|
|
4
|
+
/** Drops the pending toast. For a failure, which is reported in place. */
|
|
5
|
+
settle: () => void;
|
|
6
|
+
}
|
|
7
|
+
export interface OutcomeToasts {
|
|
8
|
+
/** Announces work in flight; the toast stays until the handle settles it. */
|
|
9
|
+
start: (pending: string) => OutcomeHandle;
|
|
10
|
+
succeed: (message: string) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function OutcomeToastProvider({ children }: PropsWithChildren): import("react").JSX.Element;
|
|
13
|
+
export declare const useOutcomeToasts: () => OutcomeToasts;
|
|
14
|
+
export {};
|