@pstrikez/fluent-winui-theme 0.1.2 → 0.2.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/dist/base.css CHANGED
@@ -1,4 +1,4 @@
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}}.fwt-badge-hue{--fwt-badge-fill: var(--fwt-badge-fill-light);--fwt-chip-stroke: var(--fwt-badge-stroke-light);--fwt-badge-label: var(--fwt-badge-label-light)}:root{--fwt-elevation-edge-top: var(--winui-control-stroke-default);--fwt-elevation-edge-bottom: var(--winui-control-stroke-secondary)}@media(prefers-color-scheme:dark){:root:not([data-fwt-theme=light]) .fwt-badge-hue{--fwt-badge-fill: var(--fwt-badge-fill-dark);--fwt-chip-stroke: var(--fwt-badge-stroke-dark);--fwt-badge-label: var(--fwt-badge-label-dark)}:root:not([data-fwt-theme=light]){--fwt-elevation-edge-top: var(--winui-control-stroke-secondary);--fwt-elevation-edge-bottom: var(--winui-control-stroke-default)}}:root[data-fwt-theme=dark] .fwt-badge-hue{--fwt-badge-fill: var(--fwt-badge-fill-dark);--fwt-chip-stroke: var(--fwt-badge-stroke-dark);--fwt-badge-label: var(--fwt-badge-label-dark)}:root[data-fwt-theme=dark]{--fwt-elevation-edge-top: var(--winui-control-stroke-secondary);--fwt-elevation-edge-bottom: var(--winui-control-stroke-default)}: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}/*!
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}.inset-0{top:0;right:0;bottom:0;left:0}.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-10{height:2.5rem}.h-full{height:100%}.h1{height:.25rem}.h2{height:.5rem}.max-w-\[480px\]{max-width:480px}.max-w-\[760px\]{max-width:760px}.max-w-\[min\(320px\,calc\(100vw-48px\)\)\]{max-width:min(320px,calc(100vw - 48px))}.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-5{width:1.25rem}.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}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.flex-wrap{flex-wrap:wrap}.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-x-4{column-gap:1rem}.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-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.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)}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.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}}.fwt-badge-hue{--fwt-badge-fill: var(--fwt-badge-fill-light);--fwt-chip-stroke: var(--fwt-badge-stroke-light);--fwt-badge-label: var(--fwt-badge-label-light)}:root{--fwt-elevation-edge-top: var(--winui-control-stroke-default);--fwt-elevation-edge-bottom: var(--winui-control-stroke-secondary)}@media(prefers-color-scheme:dark){:root:not([data-fwt-theme=light]) .fwt-badge-hue{--fwt-badge-fill: var(--fwt-badge-fill-dark);--fwt-chip-stroke: var(--fwt-badge-stroke-dark);--fwt-badge-label: var(--fwt-badge-label-dark)}:root:not([data-fwt-theme=light]){--fwt-elevation-edge-top: var(--winui-control-stroke-secondary);--fwt-elevation-edge-bottom: var(--winui-control-stroke-default)}}:root[data-fwt-theme=dark] .fwt-badge-hue{--fwt-badge-fill: var(--fwt-badge-fill-dark);--fwt-chip-stroke: var(--fwt-badge-stroke-dark);--fwt-badge-label: var(--fwt-badge-label-dark)}:root[data-fwt-theme=dark]{--fwt-elevation-edge-top: var(--winui-control-stroke-secondary);--fwt-elevation-edge-bottom: var(--winui-control-stroke-default)}: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
2
  * OverlayScrollbars
3
3
  * Version: 2.13.0
4
4
  *
@@ -1,10 +1,13 @@
1
+ /** The critical-red fill of a destructive confirm button; ConfirmFlyout wears it too. */
2
+ export declare const useDangerFillClass: () => string;
1
3
  export declare function ConfirmDialog({ actionIntent, actionLabel, busy, cancelLabel, error, message, onCancel, onConfirm, onDismissError, onExited, onOpenChange, open, title, }: {
2
4
  actionIntent?: 'danger' | 'primary';
3
5
  actionLabel: string;
4
6
  busy?: boolean;
5
7
  cancelLabel?: string;
6
8
  error?: string | null;
7
- message: string;
9
+ /** Omitted when the title already asks the whole question, as WinUI's ContentDialog allows. */
10
+ message?: string;
8
11
  onCancel?: () => void;
9
12
  onConfirm: () => void;
10
13
  onDismissError?: () => void;
@@ -0,0 +1,14 @@
1
+ import type { PopoverProps } from '@fluentui/react-components';
2
+ import type { ReactElement } from 'react';
3
+ export declare function ConfirmFlyout({ cancelLabel, children, confirmLabel, disabled, intent, message, onConfirm, positioning, title, }: {
4
+ cancelLabel?: string;
5
+ /** The element that opens the flyout; it receives the press handler. */
6
+ children: ReactElement;
7
+ confirmLabel: string;
8
+ disabled?: boolean;
9
+ intent?: 'danger' | 'primary';
10
+ message: string;
11
+ onConfirm: () => void | Promise<void>;
12
+ positioning?: PopoverProps['positioning'];
13
+ title?: string;
14
+ }): import("react").JSX.Element;
@@ -0,0 +1,72 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface DataTableColumn<Row> {
3
+ key: string;
4
+ title: ReactNode;
5
+ /** Any CSS length. A column without one shares what the sized columns leave. */
6
+ width?: string;
7
+ align?: 'start' | 'center' | 'end';
8
+ /** `index` is the row's position on the page being shown, as antd passes it. */
9
+ render?: (row: Row, index: number) => ReactNode;
10
+ /** The cell's text when there is no `render`. */
11
+ dataKey?: keyof Row;
12
+ /** Makes the header sortable. Sorts the whole data set, before it is paged. */
13
+ sort?: (a: Row, b: Row) => number;
14
+ /** Trims an overlong cell to one line rather than wrapping it. */
15
+ ellipsis?: boolean;
16
+ }
17
+ export interface DataTableSelection<Row> {
18
+ selectedKeys: readonly string[];
19
+ onChange: (keys: string[]) => void;
20
+ /** `single` draws radio buttons and has no select-all. Defaults to `multiple`. */
21
+ mode?: 'multiple' | 'single';
22
+ isSelectable?: (row: Row) => boolean;
23
+ }
24
+ export interface DataTableExpandable<Row> {
25
+ render: (row: Row) => ReactNode;
26
+ isExpandable?: (row: Row) => boolean;
27
+ /** Controlled when given; otherwise the table keeps the set itself. */
28
+ expandedKeys?: readonly string[];
29
+ onExpandedChange?: (keys: string[]) => void;
30
+ }
31
+ /**
32
+ * `page` makes the current page controlled and `pageSize` is controlled as
33
+ * soon as `onPageSizeChange` is given; without them the table keeps its own and
34
+ * only reports changes.
35
+ */
36
+ export interface DataTablePagination {
37
+ pageSize: number;
38
+ page?: number;
39
+ onPageChange?: (page: number) => void;
40
+ pageSizeOptions?: readonly number[];
41
+ onPageSizeChange?: (pageSize: number) => void;
42
+ showTotal?: boolean | ((total: number) => ReactNode);
43
+ hideOnSinglePage?: boolean;
44
+ }
45
+ export type DataTableSortDirection = 'ascending' | 'descending';
46
+ export interface DataTableProps<Row> {
47
+ columns: readonly DataTableColumn<Row>[];
48
+ rows: readonly Row[];
49
+ rowKey: (row: Row) => string;
50
+ selection?: DataTableSelection<Row>;
51
+ expandable?: DataTableExpandable<Row>;
52
+ pagination?: DataTablePagination | false;
53
+ /** Initial sort for the uncontrolled header state. */
54
+ defaultSort?: {
55
+ key: string;
56
+ direction: DataTableSortDirection;
57
+ };
58
+ onSortChange?: (sort: {
59
+ key: string;
60
+ direction: DataTableSortDirection;
61
+ } | null) => void;
62
+ empty?: ReactNode;
63
+ loading?: boolean;
64
+ size?: 'small' | 'medium';
65
+ onRowClick?: (row: Row, index: number) => void;
66
+ rowClassName?: (row: Row, index: number) => string | undefined;
67
+ /** Below this the table stops shrinking and the region scrolls sideways. */
68
+ minWidth?: number | string;
69
+ ariaLabel?: string;
70
+ className?: string;
71
+ }
72
+ export declare function DataTable<Row>({ ariaLabel, className, columns, defaultSort, empty, expandable, loading, minWidth, onRowClick, onSortChange, pagination, rowClassName, rowKey, rows, selection, size, }: DataTableProps<Row>): import("react").JSX.Element;
@@ -3,6 +3,7 @@ import type { ReactNode } from 'react';
3
3
  declare const surfaceWidthClasses: {
4
4
  standard: string;
5
5
  editor: string;
6
+ wide: string;
6
7
  };
7
8
  export declare function DialogShell({ actions, children, onExited, onOpenChange, onSubmit, open, surfaceClassName, title, width }: {
8
9
  actions: ReactNode;
@@ -0,0 +1,42 @@
1
+ import type { ButtonProps } from '@fluentui/react-components';
2
+ import type { MouseEventHandler, ReactNode } from 'react';
3
+ /** `1536` as "1.5 KB": binary steps, one decimal where it is not a whole number. */
4
+ export declare const formatFileSize: (bytes: number) => string;
5
+ /**
6
+ * Whether a file satisfies an `accept` string -- the `.ext`, `type/*` and
7
+ * `type/subtype` tokens of an `<input type="file">`. The browser's own dialog
8
+ * enforces this for browsing; a drop carries no such filter, so it is applied
9
+ * here. No `accept` takes every file.
10
+ * https://html.spec.whatwg.org/multipage/input.html#attr-input-accept
11
+ */
12
+ export declare const matchesAccept: (file: Pick<File, "name" | "type">, accept?: string) => boolean;
13
+ export interface FileDropZoneProps {
14
+ /** An `<input type="file">` accept string, applied to the dialog and to dropped files alike. */
15
+ accept?: string;
16
+ multiple?: boolean;
17
+ disabled?: boolean;
18
+ /** Called with the chosen or dropped files; files `accept` rules out never reach it. */
19
+ onFiles: (files: File[]) => void;
20
+ title: ReactNode;
21
+ description?: ReactNode;
22
+ /** Shown above the title. Defaults to an upload arrow. */
23
+ icon?: ReactNode;
24
+ /** Files already chosen, listed under the zone. */
25
+ selectedFiles?: readonly File[];
26
+ /** Called when a listed file's remove button is pressed. Without it the list has no remove buttons. */
27
+ onRemove?: (file: File, index: number) => void;
28
+ className?: string;
29
+ }
30
+ /**
31
+ * A drop target that is also a button: dropping files on it, or activating it
32
+ * and choosing from the system dialog, both end in `onFiles`.
33
+ */
34
+ export declare function FileDropZone({ accept, className, description, disabled, icon, multiple, onFiles, onRemove, selectedFiles, title, }: FileDropZoneProps): import("react").JSX.Element;
35
+ export type FilePickerButtonProps = Omit<ButtonProps, 'as' | 'onClick'> & {
36
+ accept?: string;
37
+ multiple?: boolean;
38
+ onFiles: (files: File[]) => void;
39
+ onClick?: MouseEventHandler<HTMLButtonElement>;
40
+ };
41
+ /** A Button that opens the system file dialog and hands what was chosen to `onFiles`. */
42
+ export declare function FilePickerButton({ accept, children, disabled, multiple, onClick, onFiles, ...rest }: FilePickerButtonProps): import("react").JSX.Element;
@@ -0,0 +1,34 @@
1
+ import type { ReactNode } from 'react';
2
+ export type MetricTone = 'default' | 'accent' | 'success' | 'warning' | 'danger';
3
+ export type MetricSize = 'subtitle' | 'title';
4
+ /** A number in the viewer's locale; a string passes through untouched. */
5
+ export declare const formatMetricValue: (value: number | string, precision?: number, locale?: string | string[]) => string;
6
+ export interface MetricProps {
7
+ label: ReactNode;
8
+ /** `null` or `undefined` draws an em dash. */
9
+ value: number | string | null | undefined;
10
+ prefix?: ReactNode;
11
+ suffix?: ReactNode;
12
+ /** Replaces the default locale formatting. Called with the value only when there is one. */
13
+ formatter?: (value: number | string) => ReactNode;
14
+ /** Fraction digits the default formatter pins; ignored with `formatter`. */
15
+ precision?: number;
16
+ /** BCP 47 locale for the default formatter. Defaults to the viewer's. */
17
+ locale?: string | string[];
18
+ tone?: MetricTone;
19
+ /** `title` is 28px, `subtitle` 20px. */
20
+ size?: MetricSize;
21
+ className?: string;
22
+ }
23
+ /** A labelled figure: the stand-in for a statistic tile. */
24
+ export declare function Metric({ className, formatter, label, locale, precision, prefix, size, suffix, tone, value, }: MetricProps): import("react").JSX.Element;
25
+ export interface MetricGridProps {
26
+ children: ReactNode;
27
+ /** The narrowest a metric may get before the grid drops a column, in px or any CSS length. Defaults to 160. */
28
+ minItemWidth?: number | string;
29
+ /** Gap between metrics, in px or any CSS length. Defaults to 16. */
30
+ gap?: number | string;
31
+ className?: string;
32
+ }
33
+ /** A responsive grid of metrics: as many columns as fit at `minItemWidth`, each sharing the row. */
34
+ export declare function MetricGrid({ children, className, gap, minItemWidth }: MetricGridProps): import("react").JSX.Element;
@@ -0,0 +1,36 @@
1
+ import type { SpinButtonOnChangeData, SpinButtonProps } from '@fluentui/react-components';
2
+ export interface NumberBoxProps extends Omit<SpinButtonProps, 'value' | 'defaultValue' | 'displayValue' | 'onChange'> {
3
+ /** The committed number, or `null` while the box is empty. */
4
+ value: number | null;
5
+ /** Called with the committed number, or `null` when the box is cleared. Never called for text that is not a number. */
6
+ onChange: (value: number | null) => void;
7
+ }
8
+ interface NumberBounds {
9
+ min?: number;
10
+ max?: number;
11
+ precision?: number;
12
+ }
13
+ export declare const stepPrecision: (step: number) => number;
14
+ /**
15
+ * Reads what a person typed into a number box. `null` is an empty field and
16
+ * `undefined` is text that is not a number, which a caller leaves alone so the
17
+ * field falls back to the last good value. Grouped thousands ("1,234.5") and a
18
+ * lone decimal comma ("1,5") are both understood.
19
+ */
20
+ export declare const parseNumberText: (text: string) => number | null | undefined;
21
+ /** Pulls a number into `[min, max]` and rounds it to `precision` decimals. */
22
+ export declare const clampNumber: (value: number, { min, max, precision }: NumberBounds) => number;
23
+ /**
24
+ * SpinButton reports a step or a Home/End key as `value`, and typed text as
25
+ * `displayValue` alone. This turns either into the box's value: `number`,
26
+ * `null` for an emptied field, or `undefined` for text to be ignored.
27
+ */
28
+ export declare const resolveNumberChange: (data: SpinButtonOnChangeData, bounds: NumberBounds) => number | null | undefined;
29
+ /**
30
+ * A numeric field drawn as the WinUI NumberBox with inline spin buttons. A
31
+ * controlled wrapper over Fluent's SpinButton: typed text is parsed, clamped to
32
+ * `min`/`max` and rounded to `precision` (by default the decimals of `step`)
33
+ * before `onChange` sees it.
34
+ */
35
+ export declare const NumberBox: import("react").ForwardRefExoticComponent<NumberBoxProps & import("react").RefAttributes<HTMLInputElement>>;
36
+ export {};
@@ -9,6 +9,14 @@ export interface OutcomeToasts {
9
9
  start: (pending: string) => OutcomeHandle;
10
10
  succeed: (message: string) => void;
11
11
  }
12
- export declare function OutcomeToastProvider({ children }: PropsWithChildren): import("react").JSX.Element;
12
+ export type ToastSeverity = 'success' | 'error' | 'warning' | 'info';
13
+ export interface ToastOptions {
14
+ /** Milliseconds before it dismisses itself; -1 keeps it until clicked. */
15
+ timeout?: number;
16
+ }
17
+ /** Each severity posts a toast and returns a function that dismisses it early. */
18
+ export type ToastApi = Record<ToastSeverity, (text: string, options?: ToastOptions) => () => void>;
19
+ export declare function OutcomeToastProvider({ children }: PropsWithChildren): string | number | bigint | boolean | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
13
20
  export declare const useOutcomeToasts: () => OutcomeToasts;
21
+ export declare const useToast: () => ToastApi;
14
22
  export {};
@@ -0,0 +1,23 @@
1
+ import type { ReactNode } from 'react';
2
+ export type PagerItem = number | 'start-ellipsis' | 'end-ellipsis';
3
+ export declare function pagerPageCount(total: number, pageSize: number): number;
4
+ export declare function pagerPageWindow(page: number, pageCount: number): PagerItem[];
5
+ export interface PagerProps {
6
+ /** Current page, 1-based. Clamped into the available pages. */
7
+ page: number;
8
+ onPageChange: (page: number) => void;
9
+ /** Number of pages. Derived from `total` and `pageSize` when omitted. */
10
+ pageCount?: number;
11
+ /** Item count, for deriving `pageCount` and for the total label. */
12
+ total?: number;
13
+ pageSize?: number;
14
+ /** Shows a page-size dropdown when given together with `onPageSizeChange`. */
15
+ pageSizeOptions?: readonly number[];
16
+ onPageSizeChange?: (pageSize: number) => void;
17
+ /** Adds a "Total N items" label; pass a function to render it yourself. Needs `total`. */
18
+ showTotal?: boolean | ((total: number) => ReactNode);
19
+ disabled?: boolean;
20
+ ariaLabel?: string;
21
+ className?: string;
22
+ }
23
+ export declare function Pager({ ariaLabel, className, disabled, onPageChange, onPageSizeChange, page, pageCount: pageCountProp, pageSize, pageSizeOptions, showTotal, total, }: PagerProps): import("react").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface PropertyListItem {
3
+ label: ReactNode;
4
+ value: ReactNode;
5
+ /** How many columns the item takes, clamped to `columns`. Defaults to 1. */
6
+ span?: number;
7
+ /** React key, for items whose label is not text. Defaults to the index. */
8
+ key?: string;
9
+ }
10
+ export interface PropertyListProps {
11
+ items: readonly PropertyListItem[];
12
+ /** Columns at full width. At under 720px a list of three or more steps down to two, and at under 480px to one. Defaults to 2. */
13
+ columns?: number;
14
+ /** Draws every pair as a cell of a ruled grid, labels on a tinted ground. */
15
+ bordered?: boolean;
16
+ className?: string;
17
+ }
18
+ /** Label and value pairs in a grid: the stand-in for a descriptions table. */
19
+ export declare function PropertyList({ bordered, className, columns, items }: PropertyListProps): import("react").JSX.Element;
@@ -0,0 +1,25 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface TabViewItem {
3
+ /** Identity of the tab, unique within `items`. */
4
+ value: string;
5
+ header: ReactNode;
6
+ icon?: ReactNode;
7
+ /** Whether the tab shows a close button and answers Ctrl+F4, Delete and a middle click. */
8
+ closable?: boolean;
9
+ /** Accessible name of this tab's close button; defaults to the localised "Close tab". */
10
+ closeLabel?: string;
11
+ disabled?: boolean;
12
+ }
13
+ export interface TabViewProps {
14
+ items: readonly TabViewItem[];
15
+ /** The selected tab's value, or null while none is. */
16
+ selectedValue: string | null;
17
+ onSelect: (value: string) => void;
18
+ /** Called when the operator closes a closable tab. The host owns the list and removes it. */
19
+ onClose?: (value: string) => void;
20
+ ariaLabel: string;
21
+ /** Content after the last tab (WinUI's TabStripFooter). */
22
+ footer?: ReactNode;
23
+ className?: string;
24
+ }
25
+ export declare function TabView({ ariaLabel, className, footer, items, onClose, onSelect, selectedValue }: TabViewProps): import("react").JSX.Element;
@@ -1,5 +1,8 @@
1
- import type { MouseEvent, ReactElement } from 'react';
2
- interface IconButtonProps {
1
+ import type { HTMLAttributes, MouseEvent, ReactElement, Ref } from 'react';
2
+ type IconButtonTriggerProps = Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'color' | 'onClick'> & {
3
+ ref?: Ref<HTMLButtonElement & HTMLAnchorElement>;
4
+ };
5
+ interface IconButtonProps extends IconButtonTriggerProps {
3
6
  className?: string;
4
7
  danger?: boolean;
5
8
  disabled?: boolean;
@@ -0,0 +1,18 @@
1
+ import type { PropsWithChildren } from 'react';
2
+ export interface ConfirmOptions {
3
+ actionLabel: string;
4
+ cancelLabel?: string;
5
+ intent?: 'danger' | 'primary';
6
+ message?: string;
7
+ /**
8
+ * Work the confirm button starts. The dialog stays open with its buttons held
9
+ * until it settles: a resolve closes it and `confirm()` yields true, a
10
+ * rejection leaves it open with the reason inside, for a retry or a cancel.
11
+ */
12
+ onConfirm?: () => void | Promise<void>;
13
+ title: string;
14
+ }
15
+ export type ConfirmFunction = (options: ConfirmOptions) => Promise<boolean>;
16
+ export declare function ConfirmDialogProvider({ children }: PropsWithChildren): import("react").JSX.Element;
17
+ /** `const ok = await confirm({ title, message, actionLabel })`; resolves false on cancel or dismiss. */
18
+ export declare const useConfirm: () => ConfirmFunction;
@@ -13,6 +13,29 @@ declare const en: {
13
13
  readonly 'common.copy.action': "Copy";
14
14
  readonly 'common.copy.copied': "Copied";
15
15
  readonly 'common.copy.failed': "Copy failed";
16
+ readonly 'numberBox.increment': "Increase value";
17
+ readonly 'numberBox.decrement': "Decrease value";
18
+ readonly 'fileDropZone.browse': "Browse files";
19
+ readonly 'fileDropZone.dropHint': "Drop files here";
20
+ readonly 'fileDropZone.remove': "Remove file";
21
+ readonly 'pager.label': "Pagination";
22
+ readonly 'pager.first': "First page";
23
+ readonly 'pager.previous': "Previous page";
24
+ readonly 'pager.next': "Next page";
25
+ readonly 'pager.last': "Last page";
26
+ readonly 'pager.page': "Page {n}";
27
+ readonly 'pager.pageSize': "Items per page";
28
+ readonly 'pager.perPage': "{n} / page";
29
+ readonly 'pager.total': "Total {n} items";
30
+ readonly 'dataTable.empty': "No data";
31
+ readonly 'dataTable.loading': "Loading";
32
+ readonly 'dataTable.selectAll': "Select all rows";
33
+ readonly 'dataTable.selectRow': "Select row";
34
+ readonly 'dataTable.expandRow': "Expand row";
35
+ readonly 'dataTable.collapseRow': "Collapse row";
36
+ readonly 'tabView.close': "Close tab";
37
+ readonly 'tabView.scrollBackward': "Scroll tabs left";
38
+ readonly 'tabView.scrollForward': "Scroll tabs right";
16
39
  };
17
40
  export type WinuiStringKey = keyof typeof en;
18
41
  export type WinuiStrings = Record<WinuiStringKey, string>;
@@ -31,6 +54,29 @@ export declare const winuiStringsByLocale: {
31
54
  readonly 'common.copy.action': "Copy";
32
55
  readonly 'common.copy.copied': "Copied";
33
56
  readonly 'common.copy.failed': "Copy failed";
57
+ readonly 'numberBox.increment': "Increase value";
58
+ readonly 'numberBox.decrement': "Decrease value";
59
+ readonly 'fileDropZone.browse': "Browse files";
60
+ readonly 'fileDropZone.dropHint': "Drop files here";
61
+ readonly 'fileDropZone.remove': "Remove file";
62
+ readonly 'pager.label': "Pagination";
63
+ readonly 'pager.first': "First page";
64
+ readonly 'pager.previous': "Previous page";
65
+ readonly 'pager.next': "Next page";
66
+ readonly 'pager.last': "Last page";
67
+ readonly 'pager.page': "Page {n}";
68
+ readonly 'pager.pageSize': "Items per page";
69
+ readonly 'pager.perPage': "{n} / page";
70
+ readonly 'pager.total': "Total {n} items";
71
+ readonly 'dataTable.empty': "No data";
72
+ readonly 'dataTable.loading': "Loading";
73
+ readonly 'dataTable.selectAll': "Select all rows";
74
+ readonly 'dataTable.selectRow': "Select row";
75
+ readonly 'dataTable.expandRow': "Expand row";
76
+ readonly 'dataTable.collapseRow': "Collapse row";
77
+ readonly 'tabView.close': "Close tab";
78
+ readonly 'tabView.scrollBackward': "Scroll tabs left";
79
+ readonly 'tabView.scrollForward': "Scroll tabs right";
34
80
  };
35
81
  readonly 'zh-Hans': WinuiStrings;
36
82
  };
package/dist/index.d.ts CHANGED
@@ -17,23 +17,30 @@ export * from './components/ui/chip';
17
17
  export * from './components/ui/choice-group';
18
18
  export * from './components/ui/code-block';
19
19
  export * from './components/ui/confirm-dialog';
20
+ export * from './components/ui/confirm-flyout';
20
21
  export * from './components/ui/copy-to-clipboard';
21
22
  export * from './components/ui/danger';
23
+ export * from './components/ui/data-table';
22
24
  export * from './components/ui/dashboard-page-header';
23
25
  export * from './components/ui/dialog-shell';
24
26
  export * from './components/ui/empty-state';
25
27
  export * from './components/ui/error-shell';
28
+ export * from './components/ui/file-drop-zone';
26
29
  export * from './components/ui/fluent-form-controls';
27
30
  export * from './components/ui/http-badge';
28
31
  export * from './components/ui/info-label';
29
32
  export * from './components/ui/layout';
30
33
  export * from './components/ui/loading-screen';
31
34
  export * from './components/ui/masked-icon';
35
+ export * from './components/ui/metric';
32
36
  export * from './components/ui/multiselect-combobox';
37
+ export * from './components/ui/number-box';
33
38
  export * from './components/ui/open-link-label';
34
39
  export * from './components/ui/outcome-message-bar';
35
40
  export * from './components/ui/outcome-toast';
41
+ export * from './components/ui/pager';
36
42
  export * from './components/ui/panel';
43
+ export * from './components/ui/property-list';
37
44
  export * from './components/ui/progress-ring';
38
45
  export * from './components/ui/reorder-list';
39
46
  export * from './components/ui/resource-list';
@@ -47,9 +54,11 @@ export * from './components/ui/status-badge';
47
54
  export * from './components/ui/switch-setting';
48
55
  export * from './components/ui/table-actions';
49
56
  export * from './components/ui/table-columns';
57
+ export * from './components/ui/tab-view';
50
58
  export * from './components/ui/tooltip-icon-button';
51
59
  export * from './components/ui/truncation-tooltip';
52
60
  export * from './components/ui/use-copy-to-clipboard';
61
+ export * from './components/ui/use-confirm';
53
62
  export * from './components/ui/use-dialog-invocation';
54
63
  export * from './components/ui/use-discard-guard';
55
64
  export { WinuiStringsProvider, winuiStringsByLocale, type WinuiLocale, type WinuiStringKey, type WinuiStrings, type WinuiStringsProviderProps } from './i18n/translation';