@spfx-fast/sharepoint-ui 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/QUICKSTART.md +13 -128
- package/README.md +19 -26
- package/components.json +240 -5834
- package/dist/accordion.d.ts +11 -0
- package/dist/accordion.js +4 -0
- package/dist/alert.d.ts +3 -0
- package/dist/alert.js +4 -0
- package/dist/attachment-list.d.ts +15 -0
- package/dist/attachment-list.js +14 -0
- package/dist/avatar-group.d.ts +12 -0
- package/dist/avatar-group.js +7 -0
- package/dist/avatar.d.ts +6 -0
- package/dist/avatar.js +5 -0
- package/dist/badge.d.ts +3 -0
- package/dist/badge.js +4 -0
- package/dist/breadcrumb.d.ts +10 -0
- package/dist/breadcrumb.js +9 -0
- package/dist/button-group.d.ts +6 -0
- package/dist/button-group.js +4 -0
- package/dist/button.d.ts +3 -0
- package/dist/button.js +4 -0
- package/dist/card.d.ts +3 -0
- package/dist/card.js +4 -0
- package/dist/carousel.d.ts +11 -0
- package/dist/carousel.js +6 -0
- package/dist/checkbox.d.ts +3 -0
- package/dist/checkbox.js +4 -0
- package/dist/combobox.d.ts +9 -0
- package/dist/combobox.js +6 -0
- package/dist/command-bar.d.ts +6 -0
- package/dist/command-bar.js +4 -0
- package/dist/copy-button.d.ts +7 -0
- package/dist/copy-button.js +19 -0
- package/dist/data-grid.d.ts +25 -0
- package/dist/data-grid.js +39 -0
- package/dist/date-range-picker.d.ts +12 -0
- package/dist/date-range-picker.js +4 -0
- package/dist/dialog.d.ts +9 -0
- package/dist/dialog.js +21 -0
- package/dist/divider.d.ts +3 -0
- package/dist/divider.js +4 -0
- package/dist/drawer.d.ts +6 -0
- package/dist/drawer.js +5 -0
- package/dist/empty-state.d.ts +7 -0
- package/dist/empty-state.js +5 -0
- package/dist/field.d.ts +15 -0
- package/dist/field.js +11 -0
- package/dist/file-dropzone.d.ts +15 -0
- package/dist/file-dropzone.js +21 -0
- package/dist/filter-bar.d.ts +9 -0
- package/dist/filter-bar.js +9 -0
- package/dist/image.d.ts +5 -0
- package/dist/image.js +4 -0
- package/dist/index.d.ts +68 -78
- package/dist/index.js +60 -68
- package/dist/input.d.ts +3 -0
- package/dist/input.js +4 -0
- package/dist/label.d.ts +3 -0
- package/dist/label.js +4 -0
- package/dist/link.d.ts +3 -0
- package/dist/link.js +9 -0
- package/dist/list-view.d.ts +29 -0
- package/dist/list-view.js +14 -0
- package/dist/list.d.ts +6 -0
- package/dist/list.js +5 -0
- package/dist/lookup-picker.d.ts +12 -0
- package/dist/lookup-picker.js +4 -0
- package/dist/menu.d.ts +6 -0
- package/dist/menu.js +4 -0
- package/dist/nav.d.ts +12 -0
- package/dist/nav.js +4 -0
- package/dist/pagination.d.ts +11 -0
- package/dist/pagination.js +5 -0
- package/dist/person-picker.d.ts +13 -0
- package/dist/person-picker.js +4 -0
- package/dist/persona.d.ts +7 -0
- package/dist/persona.js +5 -0
- package/dist/popover.d.ts +6 -0
- package/dist/popover.js +4 -0
- package/dist/progress-bar.d.ts +5 -0
- package/dist/progress-bar.js +5 -0
- package/dist/radio-group.d.ts +6 -0
- package/dist/radio-group.js +4 -0
- package/dist/radio.d.ts +3 -0
- package/dist/radio.js +4 -0
- package/dist/rating.d.ts +8 -0
- package/dist/rating.js +5 -0
- package/dist/react.d.ts +1 -4715
- package/dist/react.js +1 -7097
- package/dist/select.d.ts +3 -0
- package/dist/select.js +4 -0
- package/dist/sharepoint-field.d.ts +18 -0
- package/dist/sharepoint-field.js +54 -0
- package/dist/skeleton.d.ts +6 -0
- package/dist/skeleton.js +9 -0
- package/dist/spinner.d.ts +5 -0
- package/dist/spinner.js +4 -0
- package/dist/swatch-picker.d.ts +17 -0
- package/dist/swatch-picker.js +11 -0
- package/dist/switch.d.ts +3 -0
- package/dist/switch.js +4 -0
- package/dist/table.d.ts +6 -0
- package/dist/table.js +4 -0
- package/dist/tabs.d.ts +14 -0
- package/dist/tabs.js +30 -0
- package/dist/tag-group.d.ts +6 -0
- package/dist/tag-group.js +4 -0
- package/dist/tag-picker.d.ts +12 -0
- package/dist/tag-picker.js +4 -0
- package/dist/tag.d.ts +7 -0
- package/dist/tag.js +5 -0
- package/dist/text.d.ts +5 -0
- package/dist/text.js +4 -0
- package/dist/textarea.d.ts +3 -0
- package/dist/textarea.js +4 -0
- package/dist/theme.d.ts +15 -175
- package/dist/theme.js +36 -239
- package/dist/toast.d.ts +9 -0
- package/dist/toast.js +12 -0
- package/dist/tree.d.ts +13 -0
- package/dist/tree.js +9 -0
- package/dist/view-card.d.ts +8 -0
- package/dist/view-card.js +4 -0
- package/dist/view-switcher.d.ts +13 -0
- package/dist/view-switcher.js +7 -0
- package/dist/virtual-list.d.ts +11 -0
- package/dist/virtual-list.js +25 -0
- package/measurements.json +365 -0
- package/package.json +14 -46
- package/src/theme.css +125 -0
- package/AGENTS.md +0 -231
- package/dist/appearance.d.ts +0 -6
- package/dist/appearance.js +0 -217
- package/dist/elements/accordion.d.ts +0 -9
- package/dist/elements/accordion.js +0 -338
- package/dist/elements/alert.d.ts +0 -2
- package/dist/elements/alert.js +0 -86
- package/dist/elements/avatar-group-primitives.d.ts +0 -3
- package/dist/elements/avatar-group-primitives.js +0 -189
- package/dist/elements/avatar-group.d.ts +0 -2
- package/dist/elements/avatar-group.js +0 -110
- package/dist/elements/avatar.d.ts +0 -4
- package/dist/elements/avatar.js +0 -251
- package/dist/elements/badge.d.ts +0 -8
- package/dist/elements/badge.js +0 -182
- package/dist/elements/breadcrumb.d.ts +0 -4
- package/dist/elements/breadcrumb.js +0 -233
- package/dist/elements/button-group.d.ts +0 -1
- package/dist/elements/button-group.js +0 -20
- package/dist/elements/button-variants.d.ts +0 -6
- package/dist/elements/button-variants.js +0 -339
- package/dist/elements/button.d.ts +0 -5
- package/dist/elements/button.js +0 -233
- package/dist/elements/card-primitives.d.ts +0 -3
- package/dist/elements/card-primitives.js +0 -83
- package/dist/elements/card.d.ts +0 -5
- package/dist/elements/card.js +0 -213
- package/dist/elements/carousel.d.ts +0 -92
- package/dist/elements/carousel.js +0 -1115
- package/dist/elements/color-picker.d.ts +0 -24
- package/dist/elements/color-picker.js +0 -1004
- package/dist/elements/combobox.d.ts +0 -1
- package/dist/elements/combobox.js +0 -1012
- package/dist/elements/data-grid-model.d.ts +0 -120
- package/dist/elements/data-grid-model.js +0 -294
- package/dist/elements/data-grid.d.ts +0 -30
- package/dist/elements/data-grid.js +0 -1576
- package/dist/elements/date-picker.d.ts +0 -1
- package/dist/elements/date-picker.js +0 -486
- package/dist/elements/dialog.d.ts +0 -23
- package/dist/elements/dialog.js +0 -409
- package/dist/elements/divider.d.ts +0 -2
- package/dist/elements/divider.js +0 -66
- package/dist/elements/drawer.d.ts +0 -3
- package/dist/elements/drawer.js +0 -308
- package/dist/elements/field-composition.d.ts +0 -26
- package/dist/elements/field-composition.js +0 -133
- package/dist/elements/field.d.ts +0 -1
- package/dist/elements/field.js +0 -67
- package/dist/elements/file-upload.d.ts +0 -6
- package/dist/elements/file-upload.js +0 -211
- package/dist/elements/floating-position.d.ts +0 -36
- package/dist/elements/floating-position.js +0 -92
- package/dist/elements/image.d.ts +0 -28
- package/dist/elements/image.js +0 -38
- package/dist/elements/info.d.ts +0 -9
- package/dist/elements/info.js +0 -102
- package/dist/elements/input.d.ts +0 -5
- package/dist/elements/input.js +0 -255
- package/dist/elements/label.d.ts +0 -15
- package/dist/elements/label.js +0 -56
- package/dist/elements/link.d.ts +0 -1
- package/dist/elements/link.js +0 -92
- package/dist/elements/list.d.ts +0 -19
- package/dist/elements/list.js +0 -297
- package/dist/elements/menu.d.ts +0 -33
- package/dist/elements/menu.js +0 -1103
- package/dist/elements/message-bar.d.ts +0 -10
- package/dist/elements/message-bar.js +0 -327
- package/dist/elements/nav.d.ts +0 -32
- package/dist/elements/nav.js +0 -794
- package/dist/elements/overflow.d.ts +0 -10
- package/dist/elements/overflow.js +0 -218
- package/dist/elements/persona.d.ts +0 -3
- package/dist/elements/persona.js +0 -125
- package/dist/elements/popover.d.ts +0 -77
- package/dist/elements/popover.js +0 -840
- package/dist/elements/progress-bar.d.ts +0 -4
- package/dist/elements/progress-bar.js +0 -82
- package/dist/elements/radio-group.d.ts +0 -1
- package/dist/elements/radio-group.js +0 -303
- package/dist/elements/rating-display.d.ts +0 -2
- package/dist/elements/rating-display.js +0 -125
- package/dist/elements/rating.d.ts +0 -2
- package/dist/elements/rating.js +0 -206
- package/dist/elements/rich-text-editor.d.ts +0 -32
- package/dist/elements/rich-text-editor.js +0 -1367
- package/dist/elements/search.d.ts +0 -3
- package/dist/elements/search.js +0 -200
- package/dist/elements/select.d.ts +0 -6
- package/dist/elements/select.js +0 -291
- package/dist/elements/shared.d.ts +0 -22
- package/dist/elements/shared.js +0 -409
- package/dist/elements/sharepoint-field-basic-controls.d.ts +0 -1
- package/dist/elements/sharepoint-field-basic-controls.js +0 -14
- package/dist/elements/sharepoint-fields.d.ts +0 -29
- package/dist/elements/sharepoint-fields.js +0 -460
- package/dist/elements/skeleton.d.ts +0 -6
- package/dist/elements/skeleton.js +0 -91
- package/dist/elements/slider.d.ts +0 -1
- package/dist/elements/slider.js +0 -248
- package/dist/elements/spin-button.d.ts +0 -7
- package/dist/elements/spin-button.js +0 -499
- package/dist/elements/spinner.d.ts +0 -4
- package/dist/elements/spinner.js +0 -124
- package/dist/elements/swatch-picker.d.ts +0 -5
- package/dist/elements/swatch-picker.js +0 -363
- package/dist/elements/table.d.ts +0 -21
- package/dist/elements/table.js +0 -261
- package/dist/elements/tabs.d.ts +0 -1
- package/dist/elements/tabs.js +0 -276
- package/dist/elements/tag-picker.d.ts +0 -29
- package/dist/elements/tag-picker.js +0 -715
- package/dist/elements/tags.d.ts +0 -21
- package/dist/elements/tags.js +0 -421
- package/dist/elements/teaching-popover.d.ts +0 -32
- package/dist/elements/teaching-popover.js +0 -412
- package/dist/elements/text.d.ts +0 -9
- package/dist/elements/text.js +0 -75
- package/dist/elements/textarea.d.ts +0 -1
- package/dist/elements/textarea.js +0 -182
- package/dist/elements/toast.d.ts +0 -25
- package/dist/elements/toast.js +0 -337
- package/dist/elements/toaster.d.ts +0 -6
- package/dist/elements/toaster.js +0 -357
- package/dist/elements/toggle.d.ts +0 -2
- package/dist/elements/toggle.js +0 -246
- package/dist/elements/toolbar.d.ts +0 -12
- package/dist/elements/toolbar.js +0 -381
- package/dist/elements/tooltip.d.ts +0 -76
- package/dist/elements/tooltip.js +0 -527
- package/dist/elements/tree-model.d.ts +0 -19
- package/dist/elements/tree-model.js +0 -34
- package/dist/elements/tree.d.ts +0 -5
- package/dist/elements/tree.js +0 -273
- package/dist/elements/view-card.d.ts +0 -2
- package/dist/elements/view-card.js +0 -78
- package/dist/elements/virtual-list.d.ts +0 -41
- package/dist/elements/virtual-list.js +0 -369
- package/dist/elements.d.ts +0 -73
- package/dist/elements.js +0 -210
- package/dist/sharepoint-fields.d.ts +0 -135
- package/dist/sharepoint-fields.js +0 -402
- package/dist/virtualizer-hooks.d.ts +0 -80
- package/dist/virtualizer-hooks.js +0 -253
- package/scripts/generate-token-index.mjs +0 -43
- package/scripts/sync-component-catalog-signatures.mjs +0 -55
- package/scripts/validate-component-catalog.mjs +0 -44
- package/skills/sharepoint-ui/SKILL.md +0 -12
- package/skills/sharepoint-ui/references/choosing-components.md +0 -20
- package/skills/sharepoint-ui/references/sharepoint-patterns.md +0 -17
- package/tokens.json +0 -3777
package/dist/select.d.ts
ADDED
package/dist/select.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactElement } from "react";
|
|
2
|
+
import { type LookupOption } from "./lookup-picker.js";
|
|
3
|
+
import { type PersonOption } from "./person-picker.js";
|
|
4
|
+
export type SharePointFieldType = "text" | "multiline" | "number" | "date" | "boolean" | "choice" | "person" | "lookup";
|
|
5
|
+
export type SharePointFieldProps = Omit<HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
6
|
+
name: string;
|
|
7
|
+
label: string;
|
|
8
|
+
type: SharePointFieldType;
|
|
9
|
+
value?: string | boolean;
|
|
10
|
+
defaultValue?: string | boolean;
|
|
11
|
+
required?: boolean;
|
|
12
|
+
hint?: string;
|
|
13
|
+
choices?: readonly string[];
|
|
14
|
+
people?: readonly PersonOption[];
|
|
15
|
+
lookups?: readonly LookupOption[];
|
|
16
|
+
onValueChange?: (value: string | boolean) => void;
|
|
17
|
+
};
|
|
18
|
+
export declare function SharePointField({ name, label, type, value, defaultValue, required, hint, choices, people, lookups, onValueChange, className, ...props }: SharePointFieldProps): ReactElement;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { createElement, useId } from "react";
|
|
2
|
+
import { Checkbox } from "./checkbox.js";
|
|
3
|
+
import { Field } from "./field.js";
|
|
4
|
+
import { Input } from "./input.js";
|
|
5
|
+
import { LookupPicker } from "./lookup-picker.js";
|
|
6
|
+
import { PersonPicker } from "./person-picker.js";
|
|
7
|
+
import { Select } from "./select.js";
|
|
8
|
+
import { TextArea } from "./textarea.js";
|
|
9
|
+
export function SharePointField({ name, label, type, value, defaultValue, required, hint, choices = [], people = [], lookups = [], onValueChange, className = "", ...props }) {
|
|
10
|
+
const id = useId();
|
|
11
|
+
const onStringChange = (event) => onValueChange?.(event.currentTarget.value);
|
|
12
|
+
const control = type === "boolean"
|
|
13
|
+
? createElement(Checkbox, {
|
|
14
|
+
name, required,
|
|
15
|
+
checked: value === undefined ? undefined : Boolean(value),
|
|
16
|
+
defaultChecked: value === undefined ? Boolean(defaultValue) : undefined,
|
|
17
|
+
onChange: event => onValueChange?.(event.currentTarget.checked),
|
|
18
|
+
})
|
|
19
|
+
: type === "choice"
|
|
20
|
+
? createElement(Select, {
|
|
21
|
+
name, required, onChange: onStringChange,
|
|
22
|
+
value: value === undefined ? undefined : typeof value === "string" ? value : "",
|
|
23
|
+
defaultValue: value === undefined ? typeof defaultValue === "string" ? defaultValue : "" : undefined,
|
|
24
|
+
}, createElement("option", { value: "" }, "Choose an option"), choices.map(choice => createElement("option", { key: choice, value: choice }, choice)))
|
|
25
|
+
: type === "person"
|
|
26
|
+
? createElement(PersonPicker, {
|
|
27
|
+
id, name, label, options: people, required, onChange: onStringChange,
|
|
28
|
+
value: typeof value === "string" ? value : undefined,
|
|
29
|
+
defaultValue: typeof value === "string" ? undefined : typeof defaultValue === "string" ? defaultValue : undefined,
|
|
30
|
+
"aria-describedby": hint ? `${id}-hint` : undefined,
|
|
31
|
+
})
|
|
32
|
+
: type === "lookup"
|
|
33
|
+
? createElement(LookupPicker, {
|
|
34
|
+
id, name, label, options: lookups, required, onChange: onStringChange,
|
|
35
|
+
value: typeof value === "string" ? value : undefined,
|
|
36
|
+
defaultValue: typeof value === "string" ? undefined : typeof defaultValue === "string" ? defaultValue : undefined,
|
|
37
|
+
"aria-describedby": hint ? `${id}-hint` : undefined,
|
|
38
|
+
})
|
|
39
|
+
: type === "multiline"
|
|
40
|
+
? createElement(TextArea, {
|
|
41
|
+
name, required, onChange: onStringChange,
|
|
42
|
+
value: value === undefined ? undefined : typeof value === "string" ? value : "",
|
|
43
|
+
defaultValue: value === undefined ? typeof defaultValue === "string" ? defaultValue : "" : undefined,
|
|
44
|
+
})
|
|
45
|
+
: createElement(Input, {
|
|
46
|
+
name, type: type === "number" || type === "date" ? type : "text",
|
|
47
|
+
required, onChange: onStringChange,
|
|
48
|
+
value: value === undefined ? undefined : typeof value === "string" ? value : "",
|
|
49
|
+
defaultValue: value === undefined ? typeof defaultValue === "string" ? defaultValue : "" : undefined,
|
|
50
|
+
});
|
|
51
|
+
return createElement("div", { ...props, className: `spui-sharepoint-field ${className}`.trim() }, type === "person" || type === "lookup"
|
|
52
|
+
? control
|
|
53
|
+
: createElement(Field, { id, label, hint, required, children: control }), (type === "person" || type === "lookup") && hint && createElement("span", { id: `${id}-hint`, className: "spui-hint" }, hint));
|
|
54
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type CSSProperties, type HTMLAttributes, type ReactElement } from "react";
|
|
2
|
+
export type SkeletonProps = Omit<HTMLAttributes<HTMLSpanElement>, "children"> & {
|
|
3
|
+
width?: CSSProperties["width"];
|
|
4
|
+
height?: CSSProperties["height"];
|
|
5
|
+
};
|
|
6
|
+
export declare function Skeleton({ width, height, className, style, ...props }: SkeletonProps): ReactElement;
|
package/dist/skeleton.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
export function Skeleton({ width = "100%", height = "1em", className = "", style, ...props }) {
|
|
3
|
+
return createElement("span", {
|
|
4
|
+
...props,
|
|
5
|
+
"aria-hidden": true,
|
|
6
|
+
className: `spui-skeleton ${className}`.trim(),
|
|
7
|
+
style: { ...style, width, height },
|
|
8
|
+
});
|
|
9
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactElement } from "react";
|
|
2
|
+
export type SpinnerProps = Omit<HTMLAttributes<HTMLSpanElement>, "children" | "aria-label"> & {
|
|
3
|
+
label: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function Spinner({ label, className, ...props }: SpinnerProps): ReactElement;
|
package/dist/spinner.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
export function Spinner({ label, className = "", ...props }) {
|
|
3
|
+
return createElement("span", { ...props, role: "status", "aria-label": label, className: `spui-spinner ${className}`.trim() }, createElement("span", { "aria-hidden": true }));
|
|
4
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ChangeEventHandler, type FieldsetHTMLAttributes, type ReactElement } from "react";
|
|
2
|
+
export type SwatchOption = {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
color?: string;
|
|
6
|
+
src?: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type SwatchPickerProps = Omit<FieldsetHTMLAttributes<HTMLFieldSetElement>, "children" | "name"> & {
|
|
10
|
+
name: string;
|
|
11
|
+
label: string;
|
|
12
|
+
options: readonly SwatchOption[];
|
|
13
|
+
value?: string;
|
|
14
|
+
defaultValue?: string;
|
|
15
|
+
onChange?: ChangeEventHandler<HTMLInputElement>;
|
|
16
|
+
};
|
|
17
|
+
export declare function SwatchPicker({ name, label, options, value, defaultValue, onChange, className, ...props }: SwatchPickerProps): ReactElement;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createElement, useId } from "react";
|
|
2
|
+
export function SwatchPicker({ name, label, options, value, defaultValue, onChange, className = "", ...props }) {
|
|
3
|
+
const id = useId();
|
|
4
|
+
return createElement("fieldset", { ...props, className: `spui-swatch-picker ${className}`.trim() }, createElement("legend", null, label), options.map((option, index) => createElement("label", { key: option.value, htmlFor: `${id}-${index}`, className: "spui-swatch-option" }, createElement("input", {
|
|
5
|
+
id: `${id}-${index}`, type: "radio", name, value: option.value, disabled: option.disabled,
|
|
6
|
+
checked: value === undefined ? undefined : value === option.value,
|
|
7
|
+
defaultChecked: value === undefined && defaultValue === option.value,
|
|
8
|
+
onChange,
|
|
9
|
+
}), option.src ? createElement("img", { src: option.src, alt: "", "aria-hidden": true, className: "spui-swatch-dot" })
|
|
10
|
+
: createElement("span", { "aria-hidden": true, className: "spui-swatch-dot", style: { backgroundColor: option.color } }), createElement("span", { className: "spui-swatch-label" }, option.label))));
|
|
11
|
+
}
|
package/dist/switch.d.ts
ADDED
package/dist/switch.js
ADDED
package/dist/table.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode, type TableHTMLAttributes } from "react";
|
|
2
|
+
export type TableProps = Omit<TableHTMLAttributes<HTMLTableElement>, "children"> & {
|
|
3
|
+
caption: string;
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
};
|
|
6
|
+
export declare function Table({ caption, children, className, ...props }: TableProps): ReactElement;
|
package/dist/table.js
ADDED
package/dist/tabs.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactElement, type ReactNode } from "react";
|
|
2
|
+
export type TabItem = {
|
|
3
|
+
id: string;
|
|
4
|
+
label: ReactNode;
|
|
5
|
+
content: ReactNode;
|
|
6
|
+
};
|
|
7
|
+
export type TabsProps = Omit<HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
8
|
+
label: string;
|
|
9
|
+
items: readonly TabItem[];
|
|
10
|
+
value?: string;
|
|
11
|
+
defaultValue?: string;
|
|
12
|
+
onValueChange?: (value: string) => void;
|
|
13
|
+
};
|
|
14
|
+
export declare function Tabs({ label, items, value, defaultValue, onValueChange, className, ...props }: TabsProps): ReactElement;
|
package/dist/tabs.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createElement, useId, useState } from "react";
|
|
2
|
+
export function Tabs({ label, items, value, defaultValue, onValueChange, className = "", ...props }) {
|
|
3
|
+
const baseId = useId();
|
|
4
|
+
const [internalValue, setInternalValue] = useState(defaultValue ?? items[0]?.id ?? "");
|
|
5
|
+
const selected = value ?? internalValue;
|
|
6
|
+
const select = (next) => {
|
|
7
|
+
if (value === undefined)
|
|
8
|
+
setInternalValue(next);
|
|
9
|
+
onValueChange?.(next);
|
|
10
|
+
};
|
|
11
|
+
const moveFocus = (event) => {
|
|
12
|
+
if (!["ArrowLeft", "ArrowRight", "Home", "End"].includes(event.key) || !items.length)
|
|
13
|
+
return;
|
|
14
|
+
event.preventDefault();
|
|
15
|
+
const rtl = getComputedStyle(event.currentTarget).direction === "rtl";
|
|
16
|
+
const current = [...event.currentTarget.querySelectorAll("[role=tab]")].indexOf(event.target);
|
|
17
|
+
const next = event.key === "Home" ? 0 : event.key === "End" ? items.length - 1
|
|
18
|
+
: (current + (event.key === "ArrowRight" !== rtl ? 1 : -1) + items.length) % items.length;
|
|
19
|
+
event.currentTarget.querySelectorAll("[role=tab]")[next]?.focus();
|
|
20
|
+
select(items[next].id);
|
|
21
|
+
};
|
|
22
|
+
const activeIndex = Math.max(0, items.findIndex(item => item.id === selected));
|
|
23
|
+
return createElement("div", { ...props, className: `spui-tabs ${className}`.trim() }, createElement("div", { role: "tablist", "aria-label": label, onKeyDown: moveFocus }, items.map((item, index) => createElement("button", {
|
|
24
|
+
key: item.id, id: `${baseId}-tab-${index}`, type: "button", role: "tab",
|
|
25
|
+
"aria-selected": index === activeIndex, "aria-controls": `${baseId}-panel-${index}`,
|
|
26
|
+
tabIndex: index === activeIndex ? 0 : -1, onClick: () => select(item.id),
|
|
27
|
+
}, item.label))), items.map((item, index) => index === activeIndex && createElement("div", {
|
|
28
|
+
key: item.id, id: `${baseId}-panel-${index}`, role: "tabpanel", tabIndex: 0, "aria-labelledby": `${baseId}-tab-${index}`,
|
|
29
|
+
}, item.content)));
|
|
30
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactElement, type ReactNode } from "react";
|
|
2
|
+
export type TagGroupProps = Omit<HTMLAttributes<HTMLDivElement>, "children" | "aria-label"> & {
|
|
3
|
+
label: string;
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
};
|
|
6
|
+
export declare function TagGroup({ label, className, children, ...props }: TagGroupProps): ReactElement;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ReactElement, type SelectHTMLAttributes } from "react";
|
|
2
|
+
export type TagPickerOption = {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export type TagPickerProps = Omit<SelectHTMLAttributes<HTMLSelectElement>, "children" | "id" | "multiple"> & {
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
options: readonly TagPickerOption[];
|
|
11
|
+
};
|
|
12
|
+
export declare function TagPicker({ id, label, options, className, size, ...props }: TagPickerProps): ReactElement;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
export function TagPicker({ id, label, options, className = "", size = 4, ...props }) {
|
|
3
|
+
return createElement("div", { className: "spui-field" }, createElement("label", { htmlFor: id }, label), createElement("select", { ...props, id, multiple: true, size, className: `spui-select spui-tag-picker ${className}`.trim() }, options.map(option => createElement("option", { key: option.value, value: option.value, disabled: option.disabled }, option.label))));
|
|
4
|
+
}
|
package/dist/tag.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactElement, type ReactNode } from "react";
|
|
2
|
+
export type TagProps = Omit<HTMLAttributes<HTMLSpanElement>, "children"> & {
|
|
3
|
+
children?: ReactNode;
|
|
4
|
+
onRemove?: () => void;
|
|
5
|
+
removeLabel?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function Tag({ className, children, onRemove, removeLabel, ...props }: TagProps): ReactElement;
|
package/dist/tag.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
export function Tag({ className = "", children, onRemove, removeLabel, ...props }) {
|
|
3
|
+
const label = removeLabel ?? (typeof children === "string" ? `Remove ${children}` : "Remove tag");
|
|
4
|
+
return createElement("span", { ...props, className: `spui-tag ${className}`.trim() }, children, onRemove && createElement("button", { type: "button", className: "spui-tag-remove", "aria-label": label, onClick: onRemove }, "Remove"));
|
|
5
|
+
}
|
package/dist/text.d.ts
ADDED
package/dist/text.js
ADDED
package/dist/textarea.js
ADDED
package/dist/theme.d.ts
CHANGED
|
@@ -1,177 +1,17 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
/** SPFx theme data is copied through without a lossy, hand-maintained token allowlist. */
|
|
1
|
+
import { type ReactNode } from "react";
|
|
3
2
|
export type SharePointTheme = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
accent: string;
|
|
4
|
+
accentText: string;
|
|
5
|
+
background: string;
|
|
6
|
+
border: string;
|
|
7
|
+
radius: string;
|
|
8
|
+
surface: string;
|
|
9
|
+
text: string;
|
|
10
|
+
muted: string;
|
|
12
11
|
};
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
fluentTokens?: FluentThemeTokens;
|
|
20
|
-
/** Brand seed for an accent scale and softly tinted surfaces. Hex values also get an AA-aware on-accent foreground; other CSS colors can set colors.accentForeground explicitly. */
|
|
21
|
-
brandColor?: string;
|
|
22
|
-
/** App- or component-specific CSS custom properties, merged after semantic roles and before direct provider tokens. */
|
|
23
|
-
customProperties?: Record<`--${string}`, string | number>;
|
|
24
|
-
colors?: {
|
|
25
|
-
accent?: string;
|
|
26
|
-
accentHover?: string;
|
|
27
|
-
accentPressed?: string;
|
|
28
|
-
accentSubtle?: string;
|
|
29
|
-
accentSubtleHover?: string;
|
|
30
|
-
accentSubtlePressed?: string;
|
|
31
|
-
accentForeground?: string;
|
|
32
|
-
secondaryHover?: string;
|
|
33
|
-
foreground?: string;
|
|
34
|
-
foregroundMuted?: string;
|
|
35
|
-
foregroundTertiary?: string;
|
|
36
|
-
foregroundSubtle?: string;
|
|
37
|
-
foregroundDisabled?: string;
|
|
38
|
-
canvas?: string;
|
|
39
|
-
surface?: string;
|
|
40
|
-
surfaceHover?: string;
|
|
41
|
-
surfaceAlt?: string;
|
|
42
|
-
surfaceSecondary?: string;
|
|
43
|
-
surfaceSubtle?: string;
|
|
44
|
-
surfaceRaised?: string;
|
|
45
|
-
surfaceSunken?: string;
|
|
46
|
-
border?: string;
|
|
47
|
-
borderSubtle?: string;
|
|
48
|
-
borderStrong?: string;
|
|
49
|
-
borderFocus?: string;
|
|
50
|
-
borderDisabled?: string;
|
|
51
|
-
selectedBackground?: string;
|
|
52
|
-
selectedBackgroundHover?: string;
|
|
53
|
-
selectedForeground?: string;
|
|
54
|
-
selectedBorder?: string;
|
|
55
|
-
link?: string;
|
|
56
|
-
linkVisited?: string;
|
|
57
|
-
overlay?: string;
|
|
58
|
-
info?: string;
|
|
59
|
-
infoSurface?: string;
|
|
60
|
-
success?: string;
|
|
61
|
-
successSurface?: string;
|
|
62
|
-
warning?: string;
|
|
63
|
-
warningSurface?: string;
|
|
64
|
-
danger?: string;
|
|
65
|
-
dangerSurface?: string;
|
|
66
|
-
focus?: string;
|
|
67
|
-
focusRing?: string;
|
|
68
|
-
};
|
|
69
|
-
typography?: {
|
|
70
|
-
fontFamily?: string;
|
|
71
|
-
fontFamilyMono?: string;
|
|
72
|
-
fontSize?: string;
|
|
73
|
-
fontSizeSmall?: string;
|
|
74
|
-
fontSizeLarge?: string;
|
|
75
|
-
fontSizeHeading?: string;
|
|
76
|
-
fontWeight?: string | number;
|
|
77
|
-
fontWeightStrong?: string | number;
|
|
78
|
-
lineHeight?: string;
|
|
79
|
-
lineHeightHeading?: string;
|
|
80
|
-
/** Fluent-compatible type ramp; values flow to the same CSS variables used by the component styles. */
|
|
81
|
-
fontSize100?: string;
|
|
82
|
-
fontSize200?: string;
|
|
83
|
-
fontSize300?: string;
|
|
84
|
-
fontSize400?: string;
|
|
85
|
-
fontSize500?: string;
|
|
86
|
-
fontSize600?: string;
|
|
87
|
-
fontSize700?: string;
|
|
88
|
-
fontSize800?: string;
|
|
89
|
-
fontSize900?: string;
|
|
90
|
-
fontSize1000?: string;
|
|
91
|
-
fontSize1100?: string;
|
|
92
|
-
fontSize1200?: string;
|
|
93
|
-
lineHeight100?: string;
|
|
94
|
-
lineHeight200?: string;
|
|
95
|
-
lineHeight300?: string;
|
|
96
|
-
lineHeight400?: string;
|
|
97
|
-
lineHeight500?: string;
|
|
98
|
-
lineHeight600?: string;
|
|
99
|
-
lineHeight700?: string;
|
|
100
|
-
lineHeight800?: string;
|
|
101
|
-
lineHeight900?: string;
|
|
102
|
-
lineHeight1000?: string;
|
|
103
|
-
lineHeight1100?: string;
|
|
104
|
-
lineHeight1200?: string;
|
|
105
|
-
fontWeightRegular?: string | number;
|
|
106
|
-
fontWeightMedium?: string | number;
|
|
107
|
-
fontWeightSemibold?: string | number;
|
|
108
|
-
fontWeightBold?: string | number;
|
|
109
|
-
letterSpacing?: string;
|
|
110
|
-
};
|
|
111
|
-
spacing?: {
|
|
112
|
-
controlHeight?: string;
|
|
113
|
-
controlGap?: string;
|
|
114
|
-
controlPaddingInline?: string;
|
|
115
|
-
controlPaddingBlock?: string;
|
|
116
|
-
cardPadding?: string;
|
|
117
|
-
fieldGap?: string;
|
|
118
|
-
sectionGap?: string;
|
|
119
|
-
listGap?: string;
|
|
120
|
-
touchTargetMin?: string;
|
|
121
|
-
};
|
|
122
|
-
shape?: {
|
|
123
|
-
controlRadius?: string;
|
|
124
|
-
inputRadius?: string;
|
|
125
|
-
cardRadius?: string;
|
|
126
|
-
surfaceRadius?: string;
|
|
127
|
-
pillRadius?: string;
|
|
128
|
-
focusRingWidth?: string;
|
|
129
|
-
};
|
|
130
|
-
elevation?: {
|
|
131
|
-
cardShadow?: string;
|
|
132
|
-
controlShadow?: string;
|
|
133
|
-
popoverShadow?: string;
|
|
134
|
-
overlayShadow?: string;
|
|
135
|
-
focusShadow?: string;
|
|
136
|
-
};
|
|
137
|
-
/** Material controls tune theme-derived translucent surfaces without replacing their brand or neutral colors. */
|
|
138
|
-
materials?: {
|
|
139
|
-
glassBlur?: string;
|
|
140
|
-
glassSaturation?: string;
|
|
141
|
-
glassSurfaceOpacity?: string;
|
|
142
|
-
glassCanvasOpacity?: string;
|
|
143
|
-
glassBorderOpacity?: string;
|
|
144
|
-
};
|
|
145
|
-
motion?: {
|
|
146
|
-
durationFast?: string;
|
|
147
|
-
durationNormal?: string;
|
|
148
|
-
durationSlow?: string;
|
|
149
|
-
easingStandard?: string;
|
|
150
|
-
easingEmphasized?: string;
|
|
151
|
-
};
|
|
152
|
-
/** Shared stacking order for menus, floating pickers, and notifications. Browser top-layer surfaces remain above these layers. */
|
|
153
|
-
layers?: {
|
|
154
|
-
dropdown?: string | number;
|
|
155
|
-
popover?: string | number;
|
|
156
|
-
toast?: string | number;
|
|
157
|
-
};
|
|
158
|
-
};
|
|
159
|
-
export type SharePointThemeColorPreset = {
|
|
160
|
-
name: string;
|
|
161
|
-
value: string;
|
|
162
|
-
color: string;
|
|
163
|
-
label: string;
|
|
164
|
-
};
|
|
165
|
-
/** Build named swatches from the current SharePoint palette; custom tenant keys are preserved. */
|
|
166
|
-
export declare function getSharePointThemeColorPresets(palette?: Readonly<Record<string, string | undefined>>, labelForKey?: (key: string) => string): SharePointThemeColorPreset[];
|
|
167
|
-
/** Compose reusable theme packs left-to-right; later packs override earlier values within each group. */
|
|
168
|
-
export declare function composeSharePointUIDesignThemes(...themes: Array<SharePointUIDesignTheme | undefined>): SharePointUIDesignTheme;
|
|
169
|
-
export declare function getSharePointUIDesignTokens(theme?: SharePointUIDesignTheme): Record<string, string>;
|
|
170
|
-
export type SharePointUIThemeOptions = {
|
|
171
|
-
appearance?: SharePointUIAppearance;
|
|
172
|
-
baseAppearance?: SharePointUIBaseAppearance;
|
|
173
|
-
density?: SharePointUIDensity;
|
|
174
|
-
theme?: SharePointUIDesignTheme;
|
|
175
|
-
tokens?: Partial<SharePointUIStyleTokens>;
|
|
176
|
-
};
|
|
177
|
-
export declare function applySharePointTheme(target: HTMLElement, theme?: SharePointTheme, fluentTokens?: FluentThemeTokens, options?: SharePointUIThemeOptions): void;
|
|
12
|
+
export declare function createSharePointTheme(overrides?: Partial<SharePointTheme>): SharePointTheme;
|
|
13
|
+
export declare function SharePointThemeProvider({ children, theme, }: {
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
theme?: Partial<SharePointTheme>;
|
|
16
|
+
}): import("react").FunctionComponentElement<import("react").ProviderProps<SharePointTheme>>;
|
|
17
|
+
export declare function useSharePointTheme(): SharePointTheme;
|