@spfx-fast/sharepoint-ui 0.4.2 → 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 +18 -0
- package/README.md +19 -24
- package/components.json +240 -5694
- 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 -76
- package/dist/index.js +60 -66
- 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 -4583
- package/dist/react.js +1 -6837
- 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 -167
- package/dist/theme.js +36 -162
- 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 +19 -42
- package/src/theme.css +125 -0
- package/AGENTS.md +0 -211
- 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 -62
- 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 -1112
- 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 -117
- package/dist/elements/data-grid-model.js +0 -294
- package/dist/elements/data-grid.d.ts +0 -29
- package/dist/elements/data-grid.js +0 -1567
- 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 -26
- package/dist/elements/floating-position.js +0 -39
- 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 -299
- package/dist/elements/nav.d.ts +0 -32
- package/dist/elements/nav.js +0 -791
- package/dist/elements/overflow.d.ts +0 -9
- 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 -18
- package/dist/elements/rich-text-editor.js +0 -508
- package/dist/elements/search.d.ts +0 -3
- package/dist/elements/search.js +0 -207
- package/dist/elements/select.d.ts +0 -6
- package/dist/elements/select.js +0 -291
- package/dist/elements/shared.d.ts +0 -19
- package/dist/elements/shared.js +0 -396
- 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 -697
- 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 -356
- 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 -510
- 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 -72
- package/dist/elements.js +0 -207
- 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/elements.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { defineButton } from "./elements/button.js";
|
|
2
|
-
import { defineButtonGroup } from "./elements/button-group.js";
|
|
3
|
-
import { defineCompoundButton, defineMenuButton, defineSplitButton, defineToggleButton } from "./elements/button-variants.js";
|
|
4
|
-
import { defineInput } from "./elements/input.js";
|
|
5
|
-
import { defineFileUpload } from "./elements/file-upload.js";
|
|
6
|
-
import { defineField } from "./elements/field.js";
|
|
7
|
-
import { defineCard } from "./elements/card.js";
|
|
8
|
-
import { defineCardFooter, defineCardHeader, defineCardPreview } from "./elements/card-primitives.js";
|
|
9
|
-
import { defineBadge, defineCounterBadge, definePresenceBadge } from "./elements/badge.js";
|
|
10
|
-
import { defineCheckbox, defineSwitch } from "./elements/toggle.js";
|
|
11
|
-
import { defineTextArea } from "./elements/textarea.js";
|
|
12
|
-
import { defineSpinner } from "./elements/spinner.js";
|
|
13
|
-
import { defineMessageBar } from "./elements/message-bar.js";
|
|
14
|
-
import { defineViewCard } from "./elements/view-card.js";
|
|
15
|
-
import { defineDialog } from "./elements/dialog.js";
|
|
16
|
-
import { defineDrawer, defineInlineDrawer } from "./elements/drawer.js";
|
|
17
|
-
import { defineProgressBar } from "./elements/progress-bar.js";
|
|
18
|
-
import { defineSelect } from "./elements/select.js";
|
|
19
|
-
import { defineRadioGroup } from "./elements/radio-group.js";
|
|
20
|
-
import { defineSpinButton } from "./elements/spin-button.js";
|
|
21
|
-
import { defineSlider } from "./elements/slider.js";
|
|
22
|
-
import { defineDatePicker } from "./elements/date-picker.js";
|
|
23
|
-
import { defineCombobox } from "./elements/combobox.js";
|
|
24
|
-
import { defineRichTextEditor } from "./elements/rich-text-editor.js";
|
|
25
|
-
import { defineAlert } from "./elements/alert.js";
|
|
26
|
-
import { defineSkeleton } from "./elements/skeleton.js";
|
|
27
|
-
import { defineLink } from "./elements/link.js";
|
|
28
|
-
import { defineDivider } from "./elements/divider.js";
|
|
29
|
-
import { defineAccordion } from "./elements/accordion.js";
|
|
30
|
-
import { defineAvatar } from "./elements/avatar.js";
|
|
31
|
-
import { defineAvatarGroup } from "./elements/avatar-group.js";
|
|
32
|
-
import { defineAvatarGroupItem, defineAvatarGroupPopover } from "./elements/avatar-group-primitives.js";
|
|
33
|
-
import { definePersona } from "./elements/persona.js";
|
|
34
|
-
import { defineVirtualList } from "./elements/virtual-list.js";
|
|
35
|
-
import { defineDataGrid } from "./elements/data-grid.js";
|
|
36
|
-
import { defineTree } from "./elements/tree.js";
|
|
37
|
-
import { defineInteractionTag, defineTag, defineTagGroup } from "./elements/tags.js";
|
|
38
|
-
import { defineTagPicker } from "./elements/tag-picker.js";
|
|
39
|
-
import { defineRating } from "./elements/rating.js";
|
|
40
|
-
import { defineRatingDisplay, defineRatingItem } from "./elements/rating-display.js";
|
|
41
|
-
import { defineList, defineListItem } from "./elements/list.js";
|
|
42
|
-
import { defineBreadcrumb, defineBreadcrumbButton, defineBreadcrumbDivider, defineBreadcrumbItem } from "./elements/breadcrumb.js";
|
|
43
|
-
import { defineTabs } from "./elements/tabs.js";
|
|
44
|
-
import { defineTooltip } from "./elements/tooltip.js";
|
|
45
|
-
import { definePopover } from "./elements/popover.js";
|
|
46
|
-
import { defineTeachingPopover } from "./elements/teaching-popover.js";
|
|
47
|
-
import { defineMenu, defineMenuItem, defineMenuDivider, defineMenuGroup, defineMenuGroupHeader, defineMenuBar, defineMenuBarItem } from "./elements/menu.js";
|
|
48
|
-
import { defineText } from "./elements/text.js";
|
|
49
|
-
import { defineToast } from "./elements/toast.js";
|
|
50
|
-
import { defineToaster } from "./elements/toaster.js";
|
|
51
|
-
import { defineSearchBox } from "./elements/search.js";
|
|
52
|
-
import { defineColorPicker } from "./elements/color-picker.js";
|
|
53
|
-
import { defineToolbar } from "./elements/toolbar.js";
|
|
54
|
-
import { defineNav } from "./elements/nav.js";
|
|
55
|
-
import { defineInfoButton } from "./elements/info.js";
|
|
56
|
-
import { defineCarousel } from "./elements/carousel.js";
|
|
57
|
-
import { defineOverflow } from "./elements/overflow.js";
|
|
58
|
-
import { defineSwatchPicker } from "./elements/swatch-picker.js";
|
|
59
|
-
import { defineTable } from "./elements/table.js";
|
|
60
|
-
export { createLabel, getLabelStyle } from "./elements/label.js";
|
|
61
|
-
export { defineInfoButton, createInfoLabel } from "./elements/info.js";
|
|
62
|
-
export { defineCarousel, defineCarouselCard, defineCarouselNav, defineCarouselNavButton, defineCarouselNavImageButton, defineCarouselButton, defineCarouselAutoplayButton, defineCarouselNavContainer, defineCarouselSlider, defineCarouselViewport } from "./elements/carousel.js";
|
|
63
|
-
export { defineOverflow, defineOverflowItem, defineOverflowDivider } from "./elements/overflow.js";
|
|
64
|
-
export { defineSwatchPicker, defineColorSwatch, defineImageSwatch, defineEmptySwatch, defineSwatchPickerRow } from "./elements/swatch-picker.js";
|
|
65
|
-
export { createTableColumn, defineTable, defineTableHeader, defineTableBody, defineTableRow, defineTableHeaderCell, defineTableCell, defineTableCellLayout, defineTableCellActions, defineTableResizeHandle, defineTableSelectionCell } from "./elements/table.js";
|
|
66
|
-
export { defineButton } from "./elements/button.js";
|
|
67
|
-
export { defineButtonGroup } from "./elements/button-group.js";
|
|
68
|
-
export { defineCompoundButton, defineMenuButton, defineSplitButton, defineToggleButton } from "./elements/button-variants.js";
|
|
69
|
-
export { defineInput } from "./elements/input.js";
|
|
70
|
-
export { defineFileUpload } from "./elements/file-upload.js";
|
|
71
|
-
export { createImage, getImageStyle } from "./elements/image.js";
|
|
72
|
-
export { defineField } from "./elements/field.js";
|
|
73
|
-
export { createFormField } from "./elements/field-composition.js";
|
|
74
|
-
export { defineCard } from "./elements/card.js";
|
|
75
|
-
export { defineCardFooter, defineCardHeader, defineCardPreview } from "./elements/card-primitives.js";
|
|
76
|
-
export { defineBadge, defineCounterBadge, definePresenceBadge } from "./elements/badge.js";
|
|
77
|
-
export { defineCheckbox, defineSwitch } from "./elements/toggle.js";
|
|
78
|
-
export { defineTextArea } from "./elements/textarea.js";
|
|
79
|
-
export { defineSpinner } from "./elements/spinner.js";
|
|
80
|
-
export { defineMessageBar, defineMessageBarActions, defineMessageBarBody, defineMessageBarGroup, defineMessageBarTitle } from "./elements/message-bar.js";
|
|
81
|
-
export { defineViewCard } from "./elements/view-card.js";
|
|
82
|
-
export { defineDialog, defineDialogActions, defineDialogBody, defineDialogContent, defineDialogSurface, defineDialogTitle, defineDialogTrigger } from "./elements/dialog.js";
|
|
83
|
-
export { defineDrawer, defineInlineDrawer } from "./elements/drawer.js";
|
|
84
|
-
export { defineProgressBar } from "./elements/progress-bar.js";
|
|
85
|
-
export { defineSelect } from "./elements/select.js";
|
|
86
|
-
export { defineRadioGroup } from "./elements/radio-group.js";
|
|
87
|
-
export { defineSpinButton } from "./elements/spin-button.js";
|
|
88
|
-
export { defineSlider } from "./elements/slider.js";
|
|
89
|
-
export { defineDatePicker } from "./elements/date-picker.js";
|
|
90
|
-
export { defineCombobox } from "./elements/combobox.js";
|
|
91
|
-
export { defineRichTextEditor } from "./elements/rich-text-editor.js";
|
|
92
|
-
export { defineAlert } from "./elements/alert.js";
|
|
93
|
-
export { defineSkeleton, defineSkeletonItem } from "./elements/skeleton.js";
|
|
94
|
-
export { defineLink } from "./elements/link.js";
|
|
95
|
-
export { defineDivider } from "./elements/divider.js";
|
|
96
|
-
export { defineAccordion, defineAccordionHeader, defineAccordionPanel } from "./elements/accordion.js";
|
|
97
|
-
export { defineAvatar } from "./elements/avatar.js";
|
|
98
|
-
export { defineAvatarGroup } from "./elements/avatar-group.js";
|
|
99
|
-
export { defineAvatarGroupItem, defineAvatarGroupPopover } from "./elements/avatar-group-primitives.js";
|
|
100
|
-
export { definePersona } from "./elements/persona.js";
|
|
101
|
-
export { defineVirtualList } from "./elements/virtual-list.js";
|
|
102
|
-
export { defineDataGrid } from "./elements/data-grid.js";
|
|
103
|
-
export { clampDataGridRowHeight, fitDataGridColumnWidths, formatDataGridClipboard, getDataGridColumnSizing, isDataGridRowSelected, parseDataGridClipboard, parseDataGridClipboardValue, setDataGridRowSelected, writeDataGridClipboardText } from "./elements/data-grid-model.js";
|
|
104
|
-
export { defineTree } from "./elements/tree.js";
|
|
105
|
-
export { defineInteractionTag, defineInteractionTagPrimary, defineInteractionTagSecondary, defineTag, defineTagGroup } from "./elements/tags.js";
|
|
106
|
-
export { defineTagPicker } from "./elements/tag-picker.js";
|
|
107
|
-
export { defineRating } from "./elements/rating.js";
|
|
108
|
-
export { defineRatingDisplay, defineRatingItem } from "./elements/rating-display.js";
|
|
109
|
-
export { defineList, defineListItem } from "./elements/list.js";
|
|
110
|
-
export { defineBreadcrumb, defineBreadcrumbButton, defineBreadcrumbDivider, defineBreadcrumbItem } from "./elements/breadcrumb.js";
|
|
111
|
-
export { defineTabs } from "./elements/tabs.js";
|
|
112
|
-
export { defineTooltip } from "./elements/tooltip.js";
|
|
113
|
-
export { definePopover, definePopoverSurface, definePopoverTrigger } from "./elements/popover.js";
|
|
114
|
-
export { defineTeachingPopover } from "./elements/teaching-popover.js";
|
|
115
|
-
export { defineMenu, defineMenuItem, defineMenuItemLink, defineMenuDivider, defineMenuGroup, defineMenuGroupHeader, defineMenuList, defineMenuPopover, defineMenuSplitGroup, defineMenuTrigger, defineMenuBar, defineMenuBarItem } from "./elements/menu.js";
|
|
116
|
-
export { defineText } from "./elements/text.js";
|
|
117
|
-
export { defineToast, defineToastBody, defineToastFooter, defineToastTitle } from "./elements/toast.js";
|
|
118
|
-
export { defineToaster } from "./elements/toaster.js";
|
|
119
|
-
export { defineSearchBox } from "./elements/search.js";
|
|
120
|
-
export { defineColorPicker, defineColorArea, defineColorSlider, defineAlphaSlider } from "./elements/color-picker.js";
|
|
121
|
-
export { defineToolbar, defineToolbarGroup, defineToolbarSeparator, defineToolbarRadioGroup, defineToolbarRadioButton } from "./elements/toolbar.js";
|
|
122
|
-
export { defineNav, defineNavItem, defineAppItem, defineAppItemStatic, defineHamburger, defineNavDrawer, defineNavDrawerBody, defineNavDrawerFooter, defineNavDrawerHeader, defineSplitNavItem, defineNavCategory, defineNavCategoryItem, defineNavSubItemGroup, defineNavSubItem, defineNavDivider, defineNavSectionHeader } from "./elements/nav.js";
|
|
123
|
-
/** Register every current custom element. Import an element-specific entrypoint to keep a package slice small. */
|
|
124
|
-
export function defineSharePointUIElements() {
|
|
125
|
-
defineButton();
|
|
126
|
-
defineButtonGroup();
|
|
127
|
-
defineCompoundButton();
|
|
128
|
-
defineMenuButton();
|
|
129
|
-
defineToggleButton();
|
|
130
|
-
defineSplitButton();
|
|
131
|
-
defineInput();
|
|
132
|
-
defineFileUpload();
|
|
133
|
-
defineField();
|
|
134
|
-
defineCard();
|
|
135
|
-
defineCardHeader();
|
|
136
|
-
defineCardFooter();
|
|
137
|
-
defineCardPreview();
|
|
138
|
-
defineBadge();
|
|
139
|
-
defineCounterBadge();
|
|
140
|
-
definePresenceBadge();
|
|
141
|
-
defineCheckbox();
|
|
142
|
-
defineSwitch();
|
|
143
|
-
defineTextArea();
|
|
144
|
-
defineSpinner();
|
|
145
|
-
defineMessageBar();
|
|
146
|
-
defineViewCard();
|
|
147
|
-
defineDialog();
|
|
148
|
-
defineDrawer();
|
|
149
|
-
defineInlineDrawer();
|
|
150
|
-
defineProgressBar();
|
|
151
|
-
defineSelect();
|
|
152
|
-
defineRadioGroup();
|
|
153
|
-
defineSpinButton();
|
|
154
|
-
defineSlider();
|
|
155
|
-
defineDatePicker();
|
|
156
|
-
defineCombobox();
|
|
157
|
-
defineRichTextEditor();
|
|
158
|
-
defineAlert();
|
|
159
|
-
defineSkeleton();
|
|
160
|
-
defineLink();
|
|
161
|
-
defineDivider();
|
|
162
|
-
defineAccordion();
|
|
163
|
-
defineAvatar();
|
|
164
|
-
defineAvatarGroup();
|
|
165
|
-
defineAvatarGroupItem();
|
|
166
|
-
defineAvatarGroupPopover();
|
|
167
|
-
definePersona();
|
|
168
|
-
defineVirtualList();
|
|
169
|
-
defineDataGrid();
|
|
170
|
-
defineTree();
|
|
171
|
-
defineTag();
|
|
172
|
-
defineTagGroup();
|
|
173
|
-
defineInteractionTag();
|
|
174
|
-
defineTagPicker();
|
|
175
|
-
defineRating();
|
|
176
|
-
defineRatingDisplay();
|
|
177
|
-
defineRatingItem();
|
|
178
|
-
defineList();
|
|
179
|
-
defineListItem();
|
|
180
|
-
defineBreadcrumb();
|
|
181
|
-
defineBreadcrumbItem();
|
|
182
|
-
defineBreadcrumbButton();
|
|
183
|
-
defineBreadcrumbDivider();
|
|
184
|
-
defineTabs();
|
|
185
|
-
defineTooltip();
|
|
186
|
-
definePopover();
|
|
187
|
-
defineTeachingPopover();
|
|
188
|
-
defineMenu();
|
|
189
|
-
defineMenuItem();
|
|
190
|
-
defineMenuDivider();
|
|
191
|
-
defineMenuGroup();
|
|
192
|
-
defineMenuGroupHeader();
|
|
193
|
-
defineMenuBar();
|
|
194
|
-
defineMenuBarItem();
|
|
195
|
-
defineText();
|
|
196
|
-
defineToast();
|
|
197
|
-
defineToaster();
|
|
198
|
-
defineSearchBox();
|
|
199
|
-
defineColorPicker();
|
|
200
|
-
defineToolbar();
|
|
201
|
-
defineNav();
|
|
202
|
-
defineInfoButton();
|
|
203
|
-
defineCarousel();
|
|
204
|
-
defineOverflow();
|
|
205
|
-
defineSwatchPicker();
|
|
206
|
-
defineTable();
|
|
207
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
export type VirtualizerMeasureProps = {
|
|
3
|
-
defaultItemSize: number;
|
|
4
|
-
direction?: "vertical" | "horizontal";
|
|
5
|
-
bufferItems?: number;
|
|
6
|
-
bufferSize?: number;
|
|
7
|
-
};
|
|
8
|
-
export type VirtualizerContextMeasureProps = {
|
|
9
|
-
contextIndex: number;
|
|
10
|
-
setContextIndex: (index: number) => void;
|
|
11
|
-
childProgressiveSizes: React.MutableRefObject<number[]>;
|
|
12
|
-
};
|
|
13
|
-
export type VirtualizerMeasureDynamicProps = VirtualizerMeasureProps & {
|
|
14
|
-
virtualizerContext: VirtualizerContextMeasureProps;
|
|
15
|
-
numItems: number;
|
|
16
|
-
getItemSize: (index: number) => number;
|
|
17
|
-
};
|
|
18
|
-
export interface IndexedResizeCallbackElement {
|
|
19
|
-
handleResize: () => void;
|
|
20
|
-
}
|
|
21
|
-
/** Measure a fixed-size viewport and calculate a bounded item window. */
|
|
22
|
-
export declare function useStaticVirtualizerMeasure<TElement extends HTMLElement = HTMLElement>(props: VirtualizerMeasureProps): {
|
|
23
|
-
virtualizerLength: number;
|
|
24
|
-
bufferItems: number;
|
|
25
|
-
bufferSize: number;
|
|
26
|
-
scrollRef: (element: TElement | null) => void;
|
|
27
|
-
containerSizeRef: React.MutableRefObject<number>;
|
|
28
|
-
};
|
|
29
|
-
/** Measure only enough variable-size rows to cover the current scroll viewport. */
|
|
30
|
-
export declare function useDynamicVirtualizerMeasure<TElement extends HTMLElement = HTMLElement>(props: VirtualizerMeasureDynamicProps): {
|
|
31
|
-
virtualizerLength: number;
|
|
32
|
-
bufferItems: number;
|
|
33
|
-
bufferSize: number;
|
|
34
|
-
scrollRef: (element: TElement | null) => void;
|
|
35
|
-
containerSizeRef: React.RefObject<number>;
|
|
36
|
-
updateScrollPosition: (position: number) => void;
|
|
37
|
-
};
|
|
38
|
-
/** Track measured widths/heights by item index for legacy dynamic virtualizer composition. */
|
|
39
|
-
export declare function useMeasureList<TElement extends HTMLElement & IndexedResizeCallbackElement = HTMLElement & IndexedResizeCallbackElement>(currentIndex: number, _refLength: number, totalLength: number, defaultItemSize: number): {
|
|
40
|
-
widthArray: React.MutableRefObject<number[]>;
|
|
41
|
-
heightArray: React.MutableRefObject<number[]>;
|
|
42
|
-
createIndexedRef: (index: number) => (element: TElement | null) => void;
|
|
43
|
-
refArray: React.MutableRefObject<Array<TElement | undefined | null>>;
|
|
44
|
-
sizeUpdateCount: number;
|
|
45
|
-
};
|
|
46
|
-
export type ResizeCallbackWithRef = (entries: ResizeObserverEntry[], observer: ResizeObserver, scrollRef?: React.MutableRefObject<HTMLElement | null>) => void;
|
|
47
|
-
export type ScrollToItemStaticParams = {
|
|
48
|
-
index: number;
|
|
49
|
-
itemSize: number;
|
|
50
|
-
totalItems: number;
|
|
51
|
-
scrollViewRef: React.RefObject<HTMLElement | null>;
|
|
52
|
-
axis?: "horizontal" | "vertical";
|
|
53
|
-
reversed?: boolean;
|
|
54
|
-
behavior?: ScrollBehavior;
|
|
55
|
-
};
|
|
56
|
-
export type ScrollToItemDynamicParams = {
|
|
57
|
-
index: number;
|
|
58
|
-
itemSizes: React.RefObject<number[] | null>;
|
|
59
|
-
totalSize: number;
|
|
60
|
-
scrollViewRef: React.RefObject<HTMLElement | null>;
|
|
61
|
-
axis?: "horizontal" | "vertical";
|
|
62
|
-
reversed?: boolean;
|
|
63
|
-
behavior?: ScrollBehavior;
|
|
64
|
-
};
|
|
65
|
-
/** Create an observer from the document's own window, including when an SPFx part is rendered in an iframe. */
|
|
66
|
-
export declare function createResizeObserverFromDocument(targetDocument: Document | null | undefined, callback: ResizeObserverCallback): ResizeObserver | null;
|
|
67
|
-
/** Mirror a four-sided LTR observer margin for an RTL root. */
|
|
68
|
-
export declare function getRTLRootMargin(ltrRootMargin: string, target?: Element | Document | null, win?: Window | null): string;
|
|
69
|
-
/** Observe a changing element list with native IntersectionObserver and direction-aware margins. */
|
|
70
|
-
export declare function useIntersectionObserver(callback: IntersectionObserverCallback, options?: IntersectionObserverInit): {
|
|
71
|
-
setObserverList: React.Dispatch<React.SetStateAction<Element[] | undefined>>;
|
|
72
|
-
setObserverInit: (next: IntersectionObserverInit | undefined) => void;
|
|
73
|
-
observer: React.MutableRefObject<IntersectionObserver | undefined>;
|
|
74
|
-
};
|
|
75
|
-
/** Attach a resize observer callback ref; it is safe when ResizeObserver is unavailable. */
|
|
76
|
-
export declare function useResizeObserverRef_unstable(resizeCallback: ResizeCallbackWithRef): (instance: HTMLElement | null) => void;
|
|
77
|
-
/** Scroll an element to a fixed-size virtual item. */
|
|
78
|
-
export declare function scrollToItemStatic({ index, itemSize, totalItems, scrollViewRef, axis, reversed, behavior }: ScrollToItemStaticParams): void;
|
|
79
|
-
/** Scroll an element to a measured item; summing the prefix is O(index), so keep the measured list modest. */
|
|
80
|
-
export declare function scrollToItemDynamic({ index, itemSizes, totalSize, scrollViewRef, axis, reversed, behavior }: ScrollToItemDynamicParams): void;
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
function viewportLength(element, direction) {
|
|
3
|
-
if (element === element.ownerDocument.body)
|
|
4
|
-
return direction === "vertical" ? element.ownerDocument.defaultView?.innerHeight ?? 0 : element.ownerDocument.defaultView?.innerWidth ?? 0;
|
|
5
|
-
const rect = element.getBoundingClientRect();
|
|
6
|
-
return direction === "vertical" ? rect.height : rect.width;
|
|
7
|
-
}
|
|
8
|
-
/** Measure a fixed-size viewport and calculate a bounded item window. */
|
|
9
|
-
export function useStaticVirtualizerMeasure(props) {
|
|
10
|
-
const { defaultItemSize, direction = "vertical", bufferItems: configuredBufferItems, bufferSize: configuredBufferSize } = props;
|
|
11
|
-
const [measurement, setMeasurement] = React.useState({ virtualizerLength: 0, bufferItems: 0, bufferSize: 0 });
|
|
12
|
-
const containerSizeRef = React.useRef(0);
|
|
13
|
-
const elementRef = React.useRef(null);
|
|
14
|
-
const update = React.useCallback((element = elementRef.current) => {
|
|
15
|
-
if (!element)
|
|
16
|
-
return;
|
|
17
|
-
const size = Math.max(0, viewportLength(element, direction));
|
|
18
|
-
containerSizeRef.current = size;
|
|
19
|
-
const visible = Math.ceil(size / Math.max(1, defaultItemSize) + 1);
|
|
20
|
-
const next = { virtualizerLength: visible + (configuredBufferItems ?? Math.max(Math.ceil(visible / 4), 1)) * 2, bufferItems: configuredBufferItems ?? Math.max(Math.ceil(visible / 4), 1), bufferSize: configuredBufferSize ?? Math.max(defaultItemSize / 2, 1) };
|
|
21
|
-
setMeasurement(previous => previous.virtualizerLength === next.virtualizerLength && previous.bufferItems === next.bufferItems && previous.bufferSize === next.bufferSize ? previous : next);
|
|
22
|
-
}, [direction, defaultItemSize, configuredBufferItems, configuredBufferSize]);
|
|
23
|
-
const observerRef = useResizeObserverRef_unstable(() => update());
|
|
24
|
-
const scrollRef = React.useCallback((element) => {
|
|
25
|
-
elementRef.current = element;
|
|
26
|
-
observerRef(element);
|
|
27
|
-
if (element)
|
|
28
|
-
update(element);
|
|
29
|
-
}, [observerRef, update]);
|
|
30
|
-
React.useEffect(() => {
|
|
31
|
-
const element = elementRef.current;
|
|
32
|
-
const win = element?.ownerDocument.defaultView;
|
|
33
|
-
if (!element || element !== element.ownerDocument.body || !win)
|
|
34
|
-
return;
|
|
35
|
-
const onResize = () => update();
|
|
36
|
-
win.addEventListener("resize", onResize, { passive: true });
|
|
37
|
-
return () => win.removeEventListener("resize", onResize);
|
|
38
|
-
}, [update]);
|
|
39
|
-
return { ...measurement, scrollRef, containerSizeRef };
|
|
40
|
-
}
|
|
41
|
-
/** Measure only enough variable-size rows to cover the current scroll viewport. */
|
|
42
|
-
export function useDynamicVirtualizerMeasure(props) {
|
|
43
|
-
const { defaultItemSize, direction = "vertical", numItems, getItemSize, bufferItems: configuredBufferItems, bufferSize: configuredBufferSize, virtualizerContext } = props;
|
|
44
|
-
const [measurement, setMeasurement] = React.useState({ virtualizerLength: 0, bufferItems: 0, bufferSize: 0 });
|
|
45
|
-
const containerSizeRef = React.useRef(0);
|
|
46
|
-
const elementRef = React.useRef(null);
|
|
47
|
-
const positionRef = React.useRef(0);
|
|
48
|
-
const update = React.useCallback((element = elementRef.current) => {
|
|
49
|
-
if (!element)
|
|
50
|
-
return;
|
|
51
|
-
containerSizeRef.current = Math.max(0, viewportLength(element, direction));
|
|
52
|
-
const bufferSize = configuredBufferSize ?? Math.max(defaultItemSize / 2, 1);
|
|
53
|
-
const progressiveSizes = virtualizerContext.childProgressiveSizes.current;
|
|
54
|
-
let visible = 0;
|
|
55
|
-
let covered = 0;
|
|
56
|
-
let start = Math.max(0, Math.min(Math.floor(virtualizerContext.contextIndex), Math.max(0, numItems - 1)));
|
|
57
|
-
if (progressiveSizes.length >= numItems) {
|
|
58
|
-
let low = 0;
|
|
59
|
-
let high = numItems;
|
|
60
|
-
while (low < high) {
|
|
61
|
-
const middle = (low + high) >>> 1;
|
|
62
|
-
if (progressiveSizes[middle] <= positionRef.current)
|
|
63
|
-
low = middle + 1;
|
|
64
|
-
else
|
|
65
|
-
high = middle;
|
|
66
|
-
}
|
|
67
|
-
start = Math.min(Math.max(0, numItems - 1), low);
|
|
68
|
-
}
|
|
69
|
-
while (start + visible < numItems && covered < containerSizeRef.current + bufferSize * 2) {
|
|
70
|
-
const estimated = getItemSize(start + visible);
|
|
71
|
-
const size = Number.isFinite(estimated) && estimated > 0 ? estimated : defaultItemSize;
|
|
72
|
-
const end = progressiveSizes[start + visible];
|
|
73
|
-
const beginning = start + visible === 0 ? 0 : progressiveSizes[start + visible - 1];
|
|
74
|
-
const rowStart = Number.isFinite(end) ? beginning : (start + visible) * defaultItemSize;
|
|
75
|
-
const rowEnd = Number.isFinite(end) ? end : rowStart + size;
|
|
76
|
-
if (rowEnd > positionRef.current) {
|
|
77
|
-
covered += Math.max(0, Math.min(rowEnd, positionRef.current + containerSizeRef.current + bufferSize * 2) - Math.max(rowStart, positionRef.current));
|
|
78
|
-
visible++;
|
|
79
|
-
}
|
|
80
|
-
else
|
|
81
|
-
visible++;
|
|
82
|
-
}
|
|
83
|
-
const nextBufferItems = configuredBufferItems ?? Math.max(Math.ceil(visible / 3), 1);
|
|
84
|
-
const next = { virtualizerLength: Math.min(numItems, visible + nextBufferItems * 2), bufferItems: nextBufferItems, bufferSize };
|
|
85
|
-
if (virtualizerContext.contextIndex !== start)
|
|
86
|
-
virtualizerContext.setContextIndex(start);
|
|
87
|
-
setMeasurement(previous => previous.virtualizerLength === next.virtualizerLength && previous.bufferItems === next.bufferItems && previous.bufferSize === next.bufferSize ? previous : next);
|
|
88
|
-
}, [direction, defaultItemSize, numItems, getItemSize, configuredBufferItems, configuredBufferSize, virtualizerContext.contextIndex, virtualizerContext.childProgressiveSizes]);
|
|
89
|
-
const observerRef = useResizeObserverRef_unstable(() => update());
|
|
90
|
-
const scrollRef = React.useCallback((element) => { elementRef.current = element; observerRef(element); if (element)
|
|
91
|
-
update(element); }, [observerRef, update]);
|
|
92
|
-
const updateScrollPosition = React.useCallback((position) => { positionRef.current = Number.isFinite(position) ? Math.max(0, position) : 0; update(); }, [update]);
|
|
93
|
-
React.useLayoutEffect(() => { update(); }, [update]);
|
|
94
|
-
return { ...measurement, scrollRef, containerSizeRef, updateScrollPosition };
|
|
95
|
-
}
|
|
96
|
-
/** Track measured widths/heights by item index for legacy dynamic virtualizer composition. */
|
|
97
|
-
export function useMeasureList(currentIndex, _refLength, totalLength, defaultItemSize) {
|
|
98
|
-
const widthArray = React.useRef(Array(Math.max(0, totalLength)).fill(defaultItemSize));
|
|
99
|
-
const heightArray = React.useRef(Array(Math.max(0, totalLength)).fill(defaultItemSize));
|
|
100
|
-
const refArray = React.useRef([]);
|
|
101
|
-
const [sizeUpdateCount, setSizeUpdateCount] = React.useState(0);
|
|
102
|
-
const observer = React.useRef(null);
|
|
103
|
-
const observerDocument = React.useRef(null);
|
|
104
|
-
const indexByElement = React.useRef(new WeakMap());
|
|
105
|
-
React.useEffect(() => {
|
|
106
|
-
const previousLength = widthArray.current.length;
|
|
107
|
-
widthArray.current.length = Math.max(0, totalLength);
|
|
108
|
-
heightArray.current.length = Math.max(0, totalLength);
|
|
109
|
-
for (let index = previousLength; index < widthArray.current.length; index++)
|
|
110
|
-
widthArray.current[index] = heightArray.current[index] = defaultItemSize;
|
|
111
|
-
refArray.current.length = Math.max(0, totalLength);
|
|
112
|
-
}, [defaultItemSize, totalLength]);
|
|
113
|
-
React.useEffect(() => () => observer.current?.disconnect(), []);
|
|
114
|
-
const measure = React.useCallback((element, index) => {
|
|
115
|
-
const rect = element.getBoundingClientRect();
|
|
116
|
-
const width = rect.width || defaultItemSize;
|
|
117
|
-
const height = rect.height || defaultItemSize;
|
|
118
|
-
if (widthArray.current[index] !== width || heightArray.current[index] !== height) {
|
|
119
|
-
widthArray.current[index] = width;
|
|
120
|
-
heightArray.current[index] = height;
|
|
121
|
-
setSizeUpdateCount(count => count + 1);
|
|
122
|
-
}
|
|
123
|
-
}, [defaultItemSize]);
|
|
124
|
-
const createIndexedRef = React.useCallback((index) => (element) => {
|
|
125
|
-
const absoluteIndex = Math.max(0, Math.floor(currentIndex + index));
|
|
126
|
-
const prior = refArray.current[absoluteIndex];
|
|
127
|
-
if (prior && prior !== element)
|
|
128
|
-
observer.current?.unobserve(prior);
|
|
129
|
-
refArray.current[absoluteIndex] = element;
|
|
130
|
-
if (!element)
|
|
131
|
-
return;
|
|
132
|
-
indexByElement.current.set(element, absoluteIndex);
|
|
133
|
-
element.handleResize = () => measure(element, absoluteIndex);
|
|
134
|
-
const ResizeObserverCtor = element.ownerDocument.defaultView?.ResizeObserver;
|
|
135
|
-
if (ResizeObserverCtor && (!observer.current || observerDocument.current !== element.ownerDocument)) {
|
|
136
|
-
observer.current?.disconnect();
|
|
137
|
-
const nextObserver = createResizeObserverFromDocument(element.ownerDocument, entries => entries.forEach(entry => {
|
|
138
|
-
const row = entry.target;
|
|
139
|
-
const rowIndex = indexByElement.current.get(row);
|
|
140
|
-
if (rowIndex !== undefined)
|
|
141
|
-
measure(row, rowIndex);
|
|
142
|
-
}));
|
|
143
|
-
observer.current = nextObserver;
|
|
144
|
-
observerDocument.current = element.ownerDocument;
|
|
145
|
-
}
|
|
146
|
-
observer.current?.observe(element);
|
|
147
|
-
measure(element, absoluteIndex);
|
|
148
|
-
}, [currentIndex, measure]);
|
|
149
|
-
return { widthArray, heightArray, createIndexedRef, refArray, sizeUpdateCount };
|
|
150
|
-
}
|
|
151
|
-
/** Create an observer from the document's own window, including when an SPFx part is rendered in an iframe. */
|
|
152
|
-
export function createResizeObserverFromDocument(targetDocument, callback) {
|
|
153
|
-
const Observer = targetDocument?.defaultView?.ResizeObserver;
|
|
154
|
-
return Observer ? new Observer(callback) : null;
|
|
155
|
-
}
|
|
156
|
-
/** Mirror a four-sided LTR observer margin for an RTL root. */
|
|
157
|
-
export function getRTLRootMargin(ltrRootMargin, target, win) {
|
|
158
|
-
const element = target?.nodeType === 9 ? target.documentElement : target;
|
|
159
|
-
if (!element || !win || win.getComputedStyle(element).direction !== "rtl")
|
|
160
|
-
return ltrRootMargin;
|
|
161
|
-
const margins = ltrRootMargin.trim().split(/\s+/);
|
|
162
|
-
return margins.length === 4 ? `${margins[0]} ${margins[3]} ${margins[2]} ${margins[1]}` : ltrRootMargin;
|
|
163
|
-
}
|
|
164
|
-
/** Observe a changing element list with native IntersectionObserver and direction-aware margins. */
|
|
165
|
-
export function useIntersectionObserver(callback, options) {
|
|
166
|
-
const [elements, setElements] = React.useState();
|
|
167
|
-
const [init, setInit] = React.useState(options);
|
|
168
|
-
const observer = React.useRef(undefined);
|
|
169
|
-
const callbackRef = React.useRef(callback);
|
|
170
|
-
const [directionRevision, setDirectionRevision] = React.useState(0);
|
|
171
|
-
callbackRef.current = callback;
|
|
172
|
-
const setObserverInit = React.useCallback((next) => setInit(next), []);
|
|
173
|
-
React.useEffect(() => {
|
|
174
|
-
const root = init?.root;
|
|
175
|
-
const doc = root?.ownerDocument ?? (typeof document === "undefined" ? undefined : document);
|
|
176
|
-
const MutationObserverCtor = doc?.defaultView?.MutationObserver;
|
|
177
|
-
if (!MutationObserverCtor || !root)
|
|
178
|
-
return;
|
|
179
|
-
const mutationObserver = new MutationObserverCtor(records => {
|
|
180
|
-
if (records.some(record => record.attributeName === "dir"))
|
|
181
|
-
setDirectionRevision(revision => revision + 1);
|
|
182
|
-
});
|
|
183
|
-
mutationObserver.observe(doc.documentElement, { attributes: true, subtree: true, attributeFilter: ["dir"] });
|
|
184
|
-
return () => mutationObserver.disconnect();
|
|
185
|
-
}, [init?.root]);
|
|
186
|
-
React.useEffect(() => {
|
|
187
|
-
const root = init?.root;
|
|
188
|
-
const doc = (root?.nodeType === 1 ? root.ownerDocument : typeof document === "undefined" ? undefined : document);
|
|
189
|
-
const win = doc?.defaultView;
|
|
190
|
-
if (!win?.IntersectionObserver)
|
|
191
|
-
return;
|
|
192
|
-
const rootMargin = getRTLRootMargin(init?.rootMargin ?? "0px", init?.root, win);
|
|
193
|
-
const instance = new win.IntersectionObserver((entries, current) => callbackRef.current(entries, current), { ...init, rootMargin });
|
|
194
|
-
observer.current = instance;
|
|
195
|
-
elements?.forEach(element => instance.observe(element));
|
|
196
|
-
return () => {
|
|
197
|
-
instance.disconnect();
|
|
198
|
-
if (observer.current === instance)
|
|
199
|
-
observer.current = undefined;
|
|
200
|
-
};
|
|
201
|
-
}, [elements, init, directionRevision]);
|
|
202
|
-
return { setObserverList: setElements, setObserverInit, observer };
|
|
203
|
-
}
|
|
204
|
-
/** Attach a resize observer callback ref; it is safe when ResizeObserver is unavailable. */
|
|
205
|
-
export function useResizeObserverRef_unstable(resizeCallback) {
|
|
206
|
-
const callbackRef = React.useRef(resizeCallback);
|
|
207
|
-
callbackRef.current = resizeCallback;
|
|
208
|
-
const observed = React.useRef(null);
|
|
209
|
-
React.useEffect(() => () => { observed.current?.observer.disconnect(); observed.current = null; }, []);
|
|
210
|
-
return React.useCallback(instance => {
|
|
211
|
-
const current = observed.current;
|
|
212
|
-
if (current?.element === instance)
|
|
213
|
-
return;
|
|
214
|
-
current?.observer.disconnect();
|
|
215
|
-
observed.current = null;
|
|
216
|
-
const Observer = instance?.ownerDocument.defaultView?.ResizeObserver;
|
|
217
|
-
if (!instance || !Observer)
|
|
218
|
-
return;
|
|
219
|
-
const target = { current: instance };
|
|
220
|
-
const observer = new Observer((entries, currentObserver) => callbackRef.current(entries, currentObserver, target));
|
|
221
|
-
observed.current = { element: instance, observer };
|
|
222
|
-
observer.observe(instance);
|
|
223
|
-
}, []);
|
|
224
|
-
}
|
|
225
|
-
/** Scroll an element to a fixed-size virtual item. */
|
|
226
|
-
export function scrollToItemStatic({ index, itemSize, totalItems, scrollViewRef, axis = "vertical", reversed = false, behavior = "auto" }) {
|
|
227
|
-
const view = scrollViewRef.current;
|
|
228
|
-
if (!view || !Number.isFinite(index) || !Number.isFinite(itemSize) || itemSize <= 0 || totalItems <= 0)
|
|
229
|
-
return;
|
|
230
|
-
const safeIndex = Math.max(0, Math.min(totalItems - 1, Math.floor(index)));
|
|
231
|
-
const offset = reversed ? Math.max(0, totalItems * itemSize - itemSize * (safeIndex + 1)) : safeIndex * itemSize;
|
|
232
|
-
if (axis === "horizontal")
|
|
233
|
-
view.scrollTo({ left: offset, behavior });
|
|
234
|
-
else
|
|
235
|
-
view.scrollTo({ top: offset, behavior });
|
|
236
|
-
}
|
|
237
|
-
/** Scroll an element to a measured item; summing the prefix is O(index), so keep the measured list modest. */
|
|
238
|
-
export function scrollToItemDynamic({ index, itemSizes, totalSize, scrollViewRef, axis = "vertical", reversed = false, behavior = "auto" }) {
|
|
239
|
-
const view = scrollViewRef.current;
|
|
240
|
-
const sizes = itemSizes.current;
|
|
241
|
-
if (!view || !sizes || !Number.isFinite(index) || !sizes.length)
|
|
242
|
-
return;
|
|
243
|
-
const safeIndex = Math.max(0, Math.min(sizes.length - 1, Math.floor(index)));
|
|
244
|
-
let offset = 0;
|
|
245
|
-
for (let item = 0; item < safeIndex; item++)
|
|
246
|
-
offset += Number.isFinite(sizes[item]) ? Math.max(0, sizes[item]) : 0;
|
|
247
|
-
if (reversed)
|
|
248
|
-
offset = Math.max(0, totalSize - offset - (Number.isFinite(sizes[safeIndex]) ? Math.max(0, sizes[safeIndex]) : 0));
|
|
249
|
-
if (axis === "horizontal")
|
|
250
|
-
view.scrollTo({ left: offset, behavior });
|
|
251
|
-
else
|
|
252
|
-
view.scrollTo({ top: offset, behavior });
|
|
253
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { readdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
-
import { fileURLToPath } from "node:url";
|
|
3
|
-
import { dirname, resolve } from "node:path";
|
|
4
|
-
|
|
5
|
-
const packageDir = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
6
|
-
const sourceDir = resolve(packageDir, "src");
|
|
7
|
-
const outputPath = resolve(packageDir, "tokens.json");
|
|
8
|
-
const checkOnly = process.argv.includes("--check");
|
|
9
|
-
const components = new Map();
|
|
10
|
-
const declarations = new Map();
|
|
11
|
-
const addTokens = (map, source, text) => {
|
|
12
|
-
for (const token of text.match(/--spui-[\w-]+/g) ?? []) {
|
|
13
|
-
if (token === "--spui-palette-") continue;
|
|
14
|
-
const sources = map.get(token) ?? new Set();
|
|
15
|
-
sources.add(source);
|
|
16
|
-
map.set(token, sources);
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
for (const file of (await readdir(resolve(sourceDir, "elements"))).filter(name => name.endsWith(".ts")).sort()) {
|
|
21
|
-
addTokens(components, file.slice(0, -3), await readFile(resolve(sourceDir, "elements", file), "utf8"));
|
|
22
|
-
}
|
|
23
|
-
for (const file of ["appearance.ts", "theme.ts"]) {
|
|
24
|
-
addTokens(declarations, file.slice(0, -3), await readFile(resolve(sourceDir, file), "utf8"));
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const tokens = [...new Set([...components.keys(), ...declarations.keys()])].sort().map(name => ({
|
|
28
|
-
name,
|
|
29
|
-
components: [...(components.get(name) ?? [])].sort(),
|
|
30
|
-
declaredBy: [...(declarations.get(name) ?? [])].sort()
|
|
31
|
-
}));
|
|
32
|
-
const dynamicPrefixes = [{ prefix: "--spui-palette-", declaredBy: ["theme"] }];
|
|
33
|
-
const content = `${JSON.stringify({ generatedFrom: "src/elements/*.ts, src/appearance.ts, src/theme.ts", dynamicPrefixes, tokens }, null, 2)}\n`;
|
|
34
|
-
if (checkOnly) {
|
|
35
|
-
const current = await readFile(outputPath, "utf8").catch(() => "");
|
|
36
|
-
if (current !== content) {
|
|
37
|
-
console.error("Token index is stale. Run npm run tokens:generate --workspace @spfx-fast/sharepoint-ui.");
|
|
38
|
-
process.exitCode = 1;
|
|
39
|
-
} else console.log(`Token index is current (${tokens.length} tokens).`);
|
|
40
|
-
} else {
|
|
41
|
-
await writeFile(outputPath, content);
|
|
42
|
-
console.log(`Wrote ${tokens.length} component token entries to ${outputPath}.`);
|
|
43
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
-
import { dirname, resolve } from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
|
-
import ts from "typescript";
|
|
5
|
-
|
|
6
|
-
const pkgDir = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
7
|
-
const catalogPath = resolve(pkgDir, "components.json");
|
|
8
|
-
const adapterPath = resolve(pkgDir, "src/react.tsx");
|
|
9
|
-
const catalog = JSON.parse(await readFile(catalogPath, "utf8"));
|
|
10
|
-
const adapterText = await readFile(adapterPath, "utf8");
|
|
11
|
-
const source = ts.createSourceFile(adapterPath, adapterText, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
12
|
-
const components = new Map();
|
|
13
|
-
|
|
14
|
-
function collect(node) {
|
|
15
|
-
if (ts.isFunctionDeclaration(node) && node.name && node.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.ExportKeyword)) {
|
|
16
|
-
components.set(node.name.text, node);
|
|
17
|
-
}
|
|
18
|
-
if (ts.isVariableStatement(node) && node.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.ExportKeyword)) {
|
|
19
|
-
for (const declaration of node.declarationList.declarations) {
|
|
20
|
-
if (!ts.isIdentifier(declaration.name) || !declaration.initializer) continue;
|
|
21
|
-
function findNamedFunction(candidate) {
|
|
22
|
-
if (ts.isFunctionExpression(candidate) && candidate.name?.text === declaration.name.text) return candidate;
|
|
23
|
-
let found;
|
|
24
|
-
ts.forEachChild(candidate, child => { found ??= findNamedFunction(child); });
|
|
25
|
-
return found;
|
|
26
|
-
}
|
|
27
|
-
const component = findNamedFunction(declaration.initializer);
|
|
28
|
-
if (component) components.set(declaration.name.text, component);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
ts.forEachChild(node, collect);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
collect(source);
|
|
35
|
-
const changed = [];
|
|
36
|
-
for (const entry of catalog.components) {
|
|
37
|
-
const component = components.get(entry.react);
|
|
38
|
-
const parameter = component?.parameters[0];
|
|
39
|
-
if (!parameter) throw new Error(`Cannot find first React parameter for ${entry.react}`);
|
|
40
|
-
const signature = parameter.getText(source);
|
|
41
|
-
if (entry.api.reactSignature !== signature) {
|
|
42
|
-
changed.push(entry.react);
|
|
43
|
-
entry.api.reactSignature = signature;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (process.argv.includes("--check")) {
|
|
48
|
-
if (changed.length) {
|
|
49
|
-
console.error(`Catalog React signatures are stale: ${changed.join(", ")}`);
|
|
50
|
-
process.exitCode = 1;
|
|
51
|
-
} else console.log(`React signatures match all ${catalog.components.length} adapters.`);
|
|
52
|
-
} else if (changed.length) {
|
|
53
|
-
await writeFile(catalogPath, `${JSON.stringify(catalog, null, 2)}\n`);
|
|
54
|
-
console.log(`Updated ${changed.length} React signatures: ${changed.join(", ")}`);
|
|
55
|
-
} else console.log(`React signatures already match all ${catalog.components.length} adapters.`);
|