@payloadcms/ui 4.0.0-internal.cc18726 → 4.0.0-internal.cd47d20
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/css/app.css +1 -0
- package/dist/css/preflight.css +1 -0
- package/dist/css/spacing.css +3 -0
- package/dist/elements/APIKeyInput/index.d.ts +2 -0
- package/dist/elements/APIKeyInput/index.d.ts.map +1 -1
- package/dist/elements/APIKeyInput/index.js +27 -29
- package/dist/elements/APIKeyInput/index.js.map +1 -1
- package/dist/elements/AddNewRelation/index.d.ts.map +1 -1
- package/dist/elements/AddNewRelation/index.js +1 -0
- package/dist/elements/AddNewRelation/index.js.map +1 -1
- package/dist/elements/AppHeader/index.css +3 -0
- package/dist/elements/ArrayAction/index.d.ts +1 -0
- package/dist/elements/ArrayAction/index.d.ts.map +1 -1
- package/dist/elements/ArrayAction/index.js +35 -32
- package/dist/elements/ArrayAction/index.js.map +1 -1
- package/dist/elements/Banner/index.css +4 -0
- package/dist/elements/Banner/index.d.ts.map +1 -1
- package/dist/elements/Banner/index.js +1 -0
- package/dist/elements/Banner/index.js.map +1 -1
- package/dist/elements/BulkUpload/ActionsBar/index.css +1 -0
- package/dist/elements/BulkUpload/AddingFilesView/index.css +2 -4
- package/dist/elements/BulkUpload/FileSidebar/index.css +1 -0
- package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts +1 -1
- package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/createFormData.js +7 -3
- package/dist/elements/BulkUpload/FormsManager/createFormData.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +16 -9
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/BulkUpload/index.css +2 -0
- package/dist/elements/Button/index.d.ts.map +1 -1
- package/dist/elements/Button/index.js +11 -0
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/types.d.ts +7 -2
- package/dist/elements/Button/types.d.ts.map +1 -1
- package/dist/elements/Button/types.js.map +1 -1
- package/dist/elements/ClipboardAction/index.d.ts.map +1 -1
- package/dist/elements/ClipboardAction/index.js +1 -0
- package/dist/elements/ClipboardAction/index.js.map +1 -1
- package/dist/elements/Collapsible/index.css +1 -0
- package/dist/elements/ColumnSelection/index.d.ts.map +1 -1
- package/dist/elements/ColumnSelection/index.js +59 -55
- package/dist/elements/ColumnSelection/index.js.map +1 -1
- package/dist/elements/Combobox/index.d.ts.map +1 -1
- package/dist/elements/Combobox/index.js +2 -0
- package/dist/elements/Combobox/index.js.map +1 -1
- package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -1
- package/dist/elements/CreateDocumentButton/index.js +1 -0
- package/dist/elements/CreateDocumentButton/index.js.map +1 -1
- package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/elements/DatePicker/DatePicker.js +113 -83
- package/dist/elements/DatePicker/DatePicker.js.map +1 -1
- package/dist/elements/DatePicker/index.css +7 -0
- package/dist/elements/Dialog/DialogModal/index.d.ts +1 -1
- package/dist/elements/Dialog/DialogModal/index.d.ts.map +1 -1
- package/dist/elements/Dialog/DialogModal/index.js +1 -1
- package/dist/elements/Dialog/DialogModal/index.js.map +1 -1
- package/dist/elements/Dialog/index.css +1 -0
- package/dist/elements/DocumentControls/index.css +1 -0
- package/dist/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/elements/DocumentControls/index.js +1 -0
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerHeader/index.js +2 -2
- package/dist/elements/DocumentDrawer/DrawerHeader/index.js.map +1 -1
- package/dist/elements/DocumentFields/index.css +2 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts +1 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js +3 -2
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/index.css +1 -0
- package/dist/elements/DocumentHeader/Tabs/index.d.ts +1 -0
- package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/index.js +5 -3
- package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
- package/dist/elements/DocumentHeader/index.css +1 -0
- package/dist/elements/DocumentHeader/index.d.ts +1 -0
- package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/index.js +4 -2
- package/dist/elements/DocumentHeader/index.js.map +1 -1
- package/dist/elements/DraggableSortable/DraggableSortableItem/types.d.ts +1 -1
- package/dist/elements/DraggableSortable/DraggableSortableItem/types.d.ts.map +1 -1
- package/dist/elements/DraggableSortable/DraggableSortableItem/types.js.map +1 -1
- package/dist/elements/DraggableSortable/useDraggableSortable/index.d.ts.map +1 -1
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js +11 -8
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js.map +1 -1
- package/dist/elements/DraggableSortable/useDraggableSortable/types.d.ts +1 -0
- package/dist/elements/DraggableSortable/useDraggableSortable/types.d.ts.map +1 -1
- package/dist/elements/DraggableSortable/useDraggableSortable/types.js.map +1 -1
- package/dist/elements/Drawer/index.d.ts.map +1 -1
- package/dist/elements/Drawer/index.js +3 -1
- package/dist/elements/Drawer/index.js.map +1 -1
- package/dist/elements/EditUpload/index.css +2 -1
- package/dist/elements/EditUpload/index.js +53 -12
- package/dist/elements/EditUpload/index.js.map +1 -1
- package/dist/elements/FieldDiffContainer/index.css +1 -0
- package/dist/elements/FieldDiffContainer/index.js +1 -1
- package/dist/elements/FieldDiffContainer/index.js.map +1 -1
- package/dist/elements/FieldDiffLabel/index.css +1 -0
- package/dist/elements/FieldSelect/index.d.ts.map +1 -1
- package/dist/elements/FieldSelect/index.js +41 -24
- package/dist/elements/FieldSelect/index.js.map +1 -1
- package/dist/elements/FieldSelect/reduceFieldOptions.d.ts +5 -1
- package/dist/elements/FieldSelect/reduceFieldOptions.d.ts.map +1 -1
- package/dist/elements/FieldSelect/reduceFieldOptions.js +24 -4
- package/dist/elements/FieldSelect/reduceFieldOptions.js.map +1 -1
- package/dist/elements/FileDetails/StaticFileDetails/index.css +2 -0
- package/dist/elements/FileManager/FileToolbar/index.d.ts.map +1 -1
- package/dist/elements/FileManager/FileToolbar/index.js +1 -0
- package/dist/elements/FileManager/FileToolbar/index.js.map +1 -1
- package/dist/elements/FilterTrigger/index.d.ts +5 -1
- package/dist/elements/FilterTrigger/index.d.ts.map +1 -1
- package/dist/elements/FilterTrigger/index.js +6 -0
- package/dist/elements/FilterTrigger/index.js.map +1 -1
- package/dist/elements/FullscreenModal/index.d.ts.map +1 -1
- package/dist/elements/FullscreenModal/index.js +1 -1
- package/dist/elements/FullscreenModal/index.js.map +1 -1
- package/dist/elements/GroupBy/Popup.d.ts.map +1 -1
- package/dist/elements/GroupBy/Popup.js +74 -45
- package/dist/elements/GroupBy/Popup.js.map +1 -1
- package/dist/elements/GroupBy/index.d.ts.map +1 -1
- package/dist/elements/GroupBy/index.js +2 -0
- package/dist/elements/GroupBy/index.js.map +1 -1
- package/dist/elements/HTMLDiff/index.css +1 -0
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.css +3 -0
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js +60 -47
- package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js +34 -27
- package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -1
- package/dist/elements/Hierarchy/Field/index.server.d.ts +3 -2
- package/dist/elements/Hierarchy/Field/index.server.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Field/index.server.js.map +1 -1
- package/dist/elements/Hierarchy/Search/index.d.ts.map +1 -1
- package/dist/elements/Hierarchy/Search/index.js +6 -7
- package/dist/elements/Hierarchy/Search/index.js.map +1 -1
- package/dist/elements/ItemsDrawer/index.css +3 -0
- package/dist/elements/ListControls/index.css +1 -0
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +8 -1
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListControls/types.d.ts +3 -1
- package/dist/elements/ListControls/types.d.ts.map +1 -1
- package/dist/elements/ListControls/types.js.map +1 -1
- package/dist/elements/ListControlsBar/index.css +1 -0
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +1 -1
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
- package/dist/elements/LivePreview/Toolbar/Controls/index.d.ts.map +1 -1
- package/dist/elements/LivePreview/Toolbar/Controls/index.js +3 -0
- package/dist/elements/LivePreview/Toolbar/Controls/index.js.map +1 -1
- package/dist/elements/LivePreview/Window/index.css +1 -0
- package/dist/elements/Localizer/index.d.ts +3 -6
- package/dist/elements/Localizer/index.d.ts.map +1 -1
- package/dist/elements/Localizer/index.js +19 -11
- package/dist/elements/Localizer/index.js.map +1 -1
- package/dist/elements/Modal/index.d.ts +5 -1
- package/dist/elements/Modal/index.d.ts.map +1 -1
- package/dist/elements/Modal/index.js +69 -1
- package/dist/elements/Modal/index.js.map +1 -1
- package/dist/elements/Nav/SettingsMenuButton/index.d.ts.map +1 -1
- package/dist/elements/Nav/SettingsMenuButton/index.js +1 -0
- package/dist/elements/Nav/SettingsMenuButton/index.js.map +1 -1
- package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +3 -2
- package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -1
- package/dist/elements/Nav/getNavPrefs.d.ts.map +1 -1
- package/dist/elements/Nav/getNavPrefs.js +2 -0
- package/dist/elements/Nav/getNavPrefs.js.map +1 -1
- package/dist/elements/Nav/index.css +2 -0
- package/dist/elements/PageControls/GroupByPageControls.d.ts +1 -0
- package/dist/elements/PageControls/GroupByPageControls.d.ts.map +1 -1
- package/dist/elements/PageControls/GroupByPageControls.js +9 -6
- package/dist/elements/PageControls/GroupByPageControls.js.map +1 -1
- package/dist/elements/PageControls/index.css +1 -0
- package/dist/elements/PageControls/index.d.ts +2 -0
- package/dist/elements/PageControls/index.d.ts.map +1 -1
- package/dist/elements/PageControls/index.js +21 -12
- package/dist/elements/PageControls/index.js.map +1 -1
- package/dist/elements/Pagination/ClickableArrow/index.d.ts +1 -0
- package/dist/elements/Pagination/ClickableArrow/index.d.ts.map +1 -1
- package/dist/elements/Pagination/ClickableArrow/index.js +2 -0
- package/dist/elements/Pagination/ClickableArrow/index.js.map +1 -1
- package/dist/elements/Pagination/SimplePagination/index.d.ts +1 -0
- package/dist/elements/Pagination/SimplePagination/index.d.ts.map +1 -1
- package/dist/elements/Pagination/SimplePagination/index.js +14 -8
- package/dist/elements/Pagination/SimplePagination/index.js.map +1 -1
- package/dist/elements/Pagination/index.d.ts +1 -0
- package/dist/elements/Pagination/index.d.ts.map +1 -1
- package/dist/elements/Pagination/index.js +17 -12
- package/dist/elements/Pagination/index.js.map +1 -1
- package/dist/elements/PerPage/index.d.ts +1 -0
- package/dist/elements/PerPage/index.d.ts.map +1 -1
- package/dist/elements/PerPage/index.js +22 -15
- package/dist/elements/PerPage/index.js.map +1 -1
- package/dist/elements/PillSelector/index.css +1 -0
- package/dist/elements/Popup/PopupButtonList/index.d.ts +8 -0
- package/dist/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
- package/dist/elements/Popup/PopupButtonList/index.js +50 -6
- package/dist/elements/Popup/PopupButtonList/index.js.map +1 -1
- package/dist/elements/Popup/PopupTrigger/index.d.ts +9 -2
- package/dist/elements/Popup/PopupTrigger/index.d.ts.map +1 -1
- package/dist/elements/Popup/PopupTrigger/index.js +58 -6
- package/dist/elements/Popup/PopupTrigger/index.js.map +1 -1
- package/dist/elements/Popup/index.css +4 -2
- package/dist/elements/Popup/index.d.ts +6 -27
- package/dist/elements/Popup/index.d.ts.map +1 -1
- package/dist/elements/Popup/index.js +114 -75
- package/dist/elements/Popup/index.js.map +1 -1
- package/dist/elements/PreviewSizes/index.css +2 -0
- package/dist/elements/PublishButton/index.css +1 -0
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +11 -25
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.js +18 -2
- package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts +3 -2
- package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/fields/ColumnsField/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts +3 -2
- package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/fields/GroupByField/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/Heading/index.css +1 -0
- package/dist/elements/QueryPresets/fields/WhereField/index.d.ts +3 -2
- package/dist/elements/QueryPresets/fields/WhereField/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
- package/dist/elements/ReactSelect/ClearIndicator/index.css +5 -0
- package/dist/elements/ReactSelect/ClearIndicator/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/ClearIndicator/index.js +51 -20
- package/dist/elements/ReactSelect/ClearIndicator/index.js.map +1 -1
- package/dist/elements/ReactSelect/DefaultMenuPortal.d.ts.map +1 -1
- package/dist/elements/ReactSelect/DefaultMenuPortal.js +2 -1
- package/dist/elements/ReactSelect/DefaultMenuPortal.js.map +1 -1
- package/dist/elements/ReactSelect/DropdownIndicator/index.d.ts +2 -4
- package/dist/elements/ReactSelect/DropdownIndicator/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/DropdownIndicator/index.js +16 -21
- package/dist/elements/ReactSelect/DropdownIndicator/index.js.map +1 -1
- package/dist/elements/ReactSelect/MultiValue/context.d.ts +6 -0
- package/dist/elements/ReactSelect/MultiValue/context.d.ts.map +1 -0
- package/dist/elements/ReactSelect/MultiValue/context.js +5 -0
- package/dist/elements/ReactSelect/MultiValue/context.js.map +1 -0
- package/dist/elements/ReactSelect/MultiValue/index.css +5 -0
- package/dist/elements/ReactSelect/MultiValue/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/MultiValue/index.js +89 -35
- package/dist/elements/ReactSelect/MultiValue/index.js.map +1 -1
- package/dist/elements/ReactSelect/MultiValueLabel/index.css +41 -1
- package/dist/elements/ReactSelect/MultiValueLabel/index.d.ts +5 -1
- package/dist/elements/ReactSelect/MultiValueLabel/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/MultiValueLabel/index.js +49 -4
- package/dist/elements/ReactSelect/MultiValueLabel/index.js.map +1 -1
- package/dist/elements/ReactSelect/MultiValueRemove/index.css +30 -4
- package/dist/elements/ReactSelect/MultiValueRemove/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/MultiValueRemove/index.js +92 -66
- package/dist/elements/ReactSelect/MultiValueRemove/index.js.map +1 -1
- package/dist/elements/ReactSelect/Option/index.d.ts +6 -0
- package/dist/elements/ReactSelect/Option/index.d.ts.map +1 -0
- package/dist/elements/ReactSelect/Option/index.js +30 -0
- package/dist/elements/ReactSelect/Option/index.js.map +1 -0
- package/dist/elements/ReactSelect/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/index.js +4 -1
- package/dist/elements/ReactSelect/index.js.map +1 -1
- package/dist/elements/ReactSelect/types.d.ts +7 -1
- package/dist/elements/ReactSelect/types.d.ts.map +1 -1
- package/dist/elements/ReactSelect/types.js.map +1 -1
- package/dist/elements/RelationshipTable/AddNewButton.d.ts.map +1 -1
- package/dist/elements/RelationshipTable/AddNewButton.js +1 -0
- package/dist/elements/RelationshipTable/AddNewButton.js.map +1 -1
- package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
- package/dist/elements/RelationshipTable/index.js +61 -57
- package/dist/elements/RelationshipTable/index.js.map +1 -1
- package/dist/elements/RenderTitle/index.css +1 -0
- package/dist/elements/SortColumn/index.d.ts.map +1 -1
- package/dist/elements/SortColumn/index.js +59 -95
- package/dist/elements/SortColumn/index.js.map +1 -1
- package/dist/elements/SortHeader/index.d.ts.map +1 -1
- package/dist/elements/SortHeader/index.js +18 -36
- package/dist/elements/SortHeader/index.js.map +1 -1
- package/dist/elements/StepNav/index.d.ts.map +1 -1
- package/dist/elements/StepNav/index.js +1 -0
- package/dist/elements/StepNav/index.js.map +1 -1
- package/dist/elements/Table/OrderableTable.d.ts +1 -0
- package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
- package/dist/elements/Table/OrderableTable.js +6 -2
- package/dist/elements/Table/OrderableTable.js.map +1 -1
- package/dist/elements/Table/TableIdentity.d.ts +7 -0
- package/dist/elements/Table/TableIdentity.d.ts.map +1 -0
- package/dist/elements/Table/TableIdentity.js +47 -0
- package/dist/elements/Table/TableIdentity.js.map +1 -0
- package/dist/elements/Table/index.css +1 -0
- package/dist/elements/Table/index.d.ts +1 -0
- package/dist/elements/Table/index.d.ts.map +1 -1
- package/dist/elements/Table/index.js +91 -42
- package/dist/elements/Table/index.js.map +1 -1
- package/dist/elements/Table/useAriaSort.d.ts +7 -0
- package/dist/elements/Table/useAriaSort.d.ts.map +1 -0
- package/dist/elements/Table/useAriaSort.js +53 -0
- package/dist/elements/Table/useAriaSort.js.map +1 -0
- package/dist/elements/TableSection/index.css +1 -0
- package/dist/elements/Tabs/index.css +1 -0
- package/dist/elements/Thumbnail/index.css +1 -0
- package/dist/elements/ThumbnailCard/index.d.ts.map +1 -1
- package/dist/elements/ThumbnailCard/index.js +10 -8
- package/dist/elements/ThumbnailCard/index.js.map +1 -1
- package/dist/elements/TimezonePicker/index.css +1 -0
- package/dist/elements/Tooltip/index.css +7 -0
- package/dist/elements/Tooltip/index.d.ts +1 -1
- package/dist/elements/Tooltip/index.js +1 -1
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/UserMenu/LanguageMenu/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/LanguageMenu/index.js +3 -0
- package/dist/elements/UserMenu/LanguageMenu/index.js.map +1 -1
- package/dist/elements/UserMenu/SettingsMenu/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/SettingsMenu/index.js +3 -0
- package/dist/elements/UserMenu/SettingsMenu/index.js.map +1 -1
- package/dist/elements/UserMenu/SubMenuHeader/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/SubMenuHeader/index.js +2 -0
- package/dist/elements/UserMenu/SubMenuHeader/index.js.map +1 -1
- package/dist/elements/UserMenu/ThemeMenu/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/ThemeMenu/index.js +3 -0
- package/dist/elements/UserMenu/ThemeMenu/index.js.map +1 -1
- package/dist/elements/UserMenu/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/index.js +21 -4
- package/dist/elements/UserMenu/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.css +1 -0
- package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.js +7 -1
- package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
- package/dist/elements/WhereBuilder/index.css +2 -0
- package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
- package/dist/fields/Array/ArrayRow.js +1 -0
- package/dist/fields/Array/ArrayRow.js.map +1 -1
- package/dist/fields/Array/index.css +1 -0
- package/dist/fields/Array/index.d.ts +3 -7
- package/dist/fields/Array/index.d.ts.map +1 -1
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
- package/dist/fields/Blocks/RowActions.js +25 -16
- package/dist/fields/Blocks/RowActions.js.map +1 -1
- package/dist/fields/Blocks/index.css +1 -0
- package/dist/fields/Blocks/index.d.ts +2 -5
- package/dist/fields/Blocks/index.d.ts.map +1 -1
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/Checkbox/index.d.ts +2 -12
- package/dist/fields/Checkbox/index.d.ts.map +1 -1
- package/dist/fields/Checkbox/index.js.map +1 -1
- package/dist/fields/Code/index.d.ts +2 -8
- package/dist/fields/Code/index.d.ts.map +1 -1
- package/dist/fields/Code/index.js.map +1 -1
- package/dist/fields/Collapsible/index.d.ts +2 -3
- package/dist/fields/Collapsible/index.d.ts.map +1 -1
- package/dist/fields/Collapsible/index.js.map +1 -1
- package/dist/fields/DateTime/index.d.ts +3 -7
- package/dist/fields/DateTime/index.d.ts.map +1 -1
- package/dist/fields/DateTime/index.js +1 -1
- package/dist/fields/DateTime/index.js.map +1 -1
- package/dist/fields/Email/index.d.ts +2 -7
- package/dist/fields/Email/index.d.ts.map +1 -1
- package/dist/fields/Email/index.js.map +1 -1
- package/dist/fields/Group/index.css +1 -0
- package/dist/fields/Group/index.d.ts +3 -5
- package/dist/fields/Group/index.d.ts.map +1 -1
- package/dist/fields/Group/index.js.map +1 -1
- package/dist/fields/JSON/index.d.ts +2 -6
- package/dist/fields/JSON/index.d.ts.map +1 -1
- package/dist/fields/JSON/index.js.map +1 -1
- package/dist/fields/Join/index.d.ts +2 -6
- package/dist/fields/Join/index.d.ts.map +1 -1
- package/dist/fields/Join/index.js.map +1 -1
- package/dist/fields/Number/index.d.ts +2 -7
- package/dist/fields/Number/index.d.ts.map +1 -1
- package/dist/fields/Number/index.js.map +1 -1
- package/dist/fields/Point/index.d.ts +3 -8
- package/dist/fields/Point/index.d.ts.map +1 -1
- package/dist/fields/Point/index.js.map +1 -1
- package/dist/fields/RadioGroup/index.js.map +1 -1
- package/dist/fields/Relationship/index.d.ts +2 -6
- package/dist/fields/Relationship/index.d.ts.map +1 -1
- package/dist/fields/Relationship/index.js.map +1 -1
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.d.ts.map +1 -1
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.js +24 -2
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.js.map +1 -1
- package/dist/fields/Row/index.css +2 -0
- package/dist/fields/Row/index.d.ts +2 -3
- package/dist/fields/Row/index.d.ts.map +1 -1
- package/dist/fields/Row/index.js.map +1 -1
- package/dist/fields/Select/index.d.ts +2 -9
- package/dist/fields/Select/index.d.ts.map +1 -1
- package/dist/fields/Select/index.js.map +1 -1
- package/dist/fields/Tabs/index.css +1 -0
- package/dist/fields/Tabs/index.d.ts +2 -4
- package/dist/fields/Tabs/index.d.ts.map +1 -1
- package/dist/fields/Tabs/index.js.map +1 -1
- package/dist/fields/Text/index.d.ts +2 -8
- package/dist/fields/Text/index.d.ts.map +1 -1
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/Textarea/index.d.ts +2 -9
- package/dist/fields/Textarea/index.d.ts.map +1 -1
- package/dist/fields/Textarea/index.js.map +1 -1
- package/dist/forms/Form/context.d.ts +3 -1
- package/dist/forms/Form/context.d.ts.map +1 -1
- package/dist/forms/Form/context.js +3 -1
- package/dist/forms/Form/context.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +13 -4
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/RenderFields/context.d.ts +2 -2
- package/dist/forms/RenderFields/context.js +2 -2
- package/dist/forms/RenderFields/context.js.map +1 -1
- package/dist/forms/RenderFields/index.css +1 -0
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +12 -4
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +3 -2
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.d.ts +12 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.d.ts.map +1 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.js +42 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.js.map +1 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts +8 -6
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +22 -9
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.d.ts +1 -0
- package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
- package/dist/hooks/useControllableState.js +3 -3
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/layouts/Root/index.d.ts +3 -6
- package/dist/layouts/Root/index.d.ts.map +1 -1
- package/dist/layouts/Root/index.js +9 -10
- package/dist/layouts/Root/index.js.map +1 -1
- package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/index.js +30 -21
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/DocumentInfo/types.d.ts +0 -10
- package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/types.js.map +1 -1
- package/dist/providers/LivePreview/index.d.ts.map +1 -1
- package/dist/providers/LivePreview/index.js +13 -6
- package/dist/providers/LivePreview/index.js.map +1 -1
- package/dist/providers/Locale/index.d.ts.map +1 -1
- package/dist/providers/Locale/index.js +6 -7
- package/dist/providers/Locale/index.js.map +1 -1
- package/dist/providers/ModalAccessibility/index.d.ts +3 -0
- package/dist/providers/ModalAccessibility/index.d.ts.map +1 -0
- package/dist/providers/ModalAccessibility/index.js +102 -0
- package/dist/providers/ModalAccessibility/index.js.map +1 -0
- package/dist/providers/Root/index.d.ts.map +1 -1
- package/dist/providers/Root/index.js +7 -6
- package/dist/providers/Root/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.js +0 -1
- package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
- package/dist/providers/ToastContainer/index.d.ts.map +1 -1
- package/dist/providers/ToastContainer/index.js +100 -33
- package/dist/providers/ToastContainer/index.js.map +1 -1
- package/dist/styles.css +5 -1
- package/dist/templates/Default/Wrapper/index.css +2 -0
- package/dist/templates/Default/index.css +1 -0
- package/dist/utilities/buildFormState.d.ts.map +1 -1
- package/dist/utilities/buildFormState.js +6 -2
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/utilities/formatAbsoluteURL.d.ts +1 -1
- package/dist/utilities/formatAbsoluteURL.d.ts.map +1 -1
- package/dist/utilities/formatAbsoluteURL.js +18 -8
- package/dist/utilities/formatAbsoluteURL.js.map +1 -1
- package/dist/utilities/getActiveModal.d.ts +6 -0
- package/dist/utilities/getActiveModal.d.ts.map +1 -0
- package/dist/utilities/getActiveModal.js +8 -0
- package/dist/utilities/getActiveModal.js.map +1 -0
- package/dist/utilities/getDocPreferences.d.ts.map +1 -1
- package/dist/utilities/getDocPreferences.js +1 -0
- package/dist/utilities/getDocPreferences.js.map +1 -1
- package/dist/utilities/getPreferences.d.ts.map +1 -1
- package/dist/utilities/getPreferences.js +1 -0
- package/dist/utilities/getPreferences.js.map +1 -1
- package/dist/utilities/getVersions.d.ts.map +1 -1
- package/dist/utilities/getVersions.js +8 -0
- package/dist/utilities/getVersions.js.map +1 -1
- package/dist/utilities/handleAuthRedirect.d.ts.map +1 -1
- package/dist/utilities/handleAuthRedirect.js +4 -1
- package/dist/utilities/handleAuthRedirect.js.map +1 -1
- package/dist/utilities/handleServerFunctions.d.ts +9 -9
- package/dist/utilities/handleServerFunctions.d.ts.map +1 -1
- package/dist/utilities/handleServerFunctions.js +7 -5
- package/dist/utilities/handleServerFunctions.js.map +1 -1
- package/dist/utilities/isAbsoluteURL.d.ts +3 -0
- package/dist/utilities/isAbsoluteURL.d.ts.map +1 -0
- package/dist/utilities/isAbsoluteURL.js +15 -0
- package/dist/utilities/isAbsoluteURL.js.map +1 -0
- package/dist/utilities/isHttpURL.d.ts +3 -0
- package/dist/utilities/isHttpURL.d.ts.map +1 -0
- package/dist/utilities/isHttpURL.js +12 -0
- package/dist/utilities/isHttpURL.js.map +1 -0
- package/dist/utilities/isPathMatchingRoute.d.ts.map +1 -1
- package/dist/utilities/isPathMatchingRoute.js +7 -5
- package/dist/utilities/isPathMatchingRoute.js.map +1 -1
- package/dist/utilities/isPublicAdminRoute.d.ts.map +1 -1
- package/dist/utilities/isPublicAdminRoute.js +9 -6
- package/dist/utilities/isPublicAdminRoute.js.map +1 -1
- package/dist/utilities/renderTable.d.ts.map +1 -1
- package/dist/utilities/renderTable.js +9 -4
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
- package/dist/utilities/schedulePublishHandler.js +6 -1
- package/dist/utilities/schedulePublishHandler.js.map +1 -1
- package/dist/utilities/upsertPreferences.d.ts.map +1 -1
- package/dist/utilities/upsertPreferences.js +3 -0
- package/dist/utilities/upsertPreferences.js.map +1 -1
- package/dist/views/API/index.css +1 -0
- package/dist/views/Account/index.d.ts +1 -1
- package/dist/views/Account/index.d.ts.map +1 -1
- package/dist/views/Account/index.js +8 -5
- package/dist/views/Account/index.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/index.css +2 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.d.ts.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/index.js +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.d.ts.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +3 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.d.ts.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +2 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
- package/dist/views/Dashboard/index.d.ts.map +1 -1
- package/dist/views/Dashboard/index.js +2 -3
- package/dist/views/Dashboard/index.js.map +1 -1
- package/dist/views/Document/handleServerFunction.d.ts.map +1 -1
- package/dist/views/Document/handleServerFunction.js +3 -0
- package/dist/views/Document/handleServerFunction.js.map +1 -1
- package/dist/views/Document/index.d.ts +1 -1
- package/dist/views/Document/index.d.ts.map +1 -1
- package/dist/views/Document/index.js +9 -4
- package/dist/views/Document/index.js.map +1 -1
- package/dist/views/Document/renderDocumentSlots.d.ts +1 -0
- package/dist/views/Document/renderDocumentSlots.d.ts.map +1 -1
- package/dist/views/Document/renderDocumentSlots.js +7 -4
- package/dist/views/Document/renderDocumentSlots.js.map +1 -1
- package/dist/views/Edit/Auth/APIKey.d.ts +1 -1
- package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
- package/dist/views/Edit/Auth/APIKey.js +233 -59
- package/dist/views/Edit/Auth/APIKey.js.map +1 -1
- package/dist/views/Edit/Auth/APIKeyGenerationModal.d.ts +12 -0
- package/dist/views/Edit/Auth/APIKeyGenerationModal.d.ts.map +1 -0
- package/dist/views/Edit/Auth/APIKeyGenerationModal.js +117 -0
- package/dist/views/Edit/Auth/APIKeyGenerationModal.js.map +1 -0
- package/dist/views/Edit/Auth/index.css +91 -0
- package/dist/views/Edit/Auth/index.d.ts.map +1 -1
- package/dist/views/Edit/Auth/index.js +10 -28
- package/dist/views/Edit/Auth/index.js.map +1 -1
- package/dist/views/Edit/Auth/types.d.ts +3 -1
- package/dist/views/Edit/Auth/types.d.ts.map +1 -1
- package/dist/views/Edit/Auth/types.js.map +1 -1
- package/dist/views/Edit/index.css +1 -0
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.css +14 -0
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.d.ts.map +1 -1
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +209 -161
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
- package/dist/views/ForgotPassword/index.d.ts.map +1 -1
- package/dist/views/ForgotPassword/index.js +2 -11
- package/dist/views/ForgotPassword/index.js.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/SlotTable.css +1 -0
- package/dist/views/HierarchyList/TypeFilter/index.d.ts.map +1 -1
- package/dist/views/HierarchyList/TypeFilter/index.js +6 -7
- package/dist/views/HierarchyList/TypeFilter/index.js.map +1 -1
- package/dist/views/HierarchyList/index.css +1 -0
- package/dist/views/List/ListHeader/index.css +1 -0
- package/dist/views/List/ListHeader/index.d.ts +0 -1
- package/dist/views/List/ListHeader/index.d.ts.map +1 -1
- package/dist/views/List/ListHeader/index.js +2 -6
- package/dist/views/List/ListHeader/index.js.map +1 -1
- package/dist/views/List/enrichDocsWithVersionStatus.d.ts.map +1 -1
- package/dist/views/List/enrichDocsWithVersionStatus.js +1 -0
- package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -1
- package/dist/views/List/handleServerFunction.d.ts.map +1 -1
- package/dist/views/List/handleServerFunction.js +4 -1
- package/dist/views/List/handleServerFunction.js.map +1 -1
- package/dist/views/List/index.client.d.ts.map +1 -1
- package/dist/views/List/index.client.js +130 -124
- package/dist/views/List/index.client.js.map +1 -1
- package/dist/views/List/index.css +2 -0
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +2 -1
- package/dist/views/List/index.js.map +1 -1
- package/dist/views/NotFound/client.d.ts +2 -0
- package/dist/views/NotFound/client.d.ts.map +1 -0
- package/dist/views/NotFound/client.js +4 -0
- package/dist/views/NotFound/client.js.map +1 -0
- package/dist/views/NotFound/page.d.ts +4 -11
- package/dist/views/NotFound/page.d.ts.map +1 -1
- package/dist/views/NotFound/page.js +6 -5
- package/dist/views/NotFound/page.js.map +1 -1
- package/dist/views/Root/index.d.ts +6 -7
- package/dist/views/Root/index.d.ts.map +1 -1
- package/dist/views/Root/index.js +33 -24
- package/dist/views/Root/index.js.map +1 -1
- package/dist/views/Verify/index.d.ts +1 -1
- package/dist/views/Verify/index.d.ts.map +1 -1
- package/dist/views/Verify/index.js +4 -4
- package/dist/views/Verify/index.js.map +1 -1
- package/dist/views/Version/Default/index.css +2 -0
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.d.ts +1 -0
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +56 -50
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +41 -27
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.d.ts +3 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.d.ts +3 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.css +8 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.d.ts +3 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.d.ts +3 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +10 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.css +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.d.ts +3 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts +3 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts +3 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts +3 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.css +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.d.ts +2 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/index.css +2 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +33 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.d.ts +8 -2
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js +17 -19
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js.map +1 -1
- package/dist/views/Version/Restore/index.d.ts.map +1 -1
- package/dist/views/Version/Restore/index.js +9 -6
- package/dist/views/Version/Restore/index.js.map +1 -1
- package/dist/views/Version/SelectLocales/index.d.ts.map +1 -1
- package/dist/views/Version/SelectLocales/index.js +1 -0
- package/dist/views/Version/SelectLocales/index.js.map +1 -1
- package/dist/views/Versions/VersionPillLabel/index.css +1 -0
- package/dist/views/Versions/index.css +1 -0
- package/dist/widgets/CollectionCards/index.css +4 -0
- package/dist/widgets/CollectionQuery/SortField/index.d.ts +3 -2
- package/dist/widgets/CollectionQuery/SortField/index.d.ts.map +1 -1
- package/dist/widgets/CollectionQuery/SortField/index.js.map +1 -1
- package/dist/widgets/RecentlyViewed/CollectionsField/index.d.ts +3 -2
- package/dist/widgets/RecentlyViewed/CollectionsField/index.d.ts.map +1 -1
- package/dist/widgets/RecentlyViewed/CollectionsField/index.js.map +1 -1
- package/package.json +10 -5
- package/dist/elements/ClipboardAction/clipboardUtilities.spec.js +0 -120
- package/dist/elements/ClipboardAction/clipboardUtilities.spec.js.map +0 -1
- package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js +0 -144
- package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js.map +0 -1
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +0 -885
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +0 -1
- package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js +0 -87
- package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js.map +0 -1
- package/dist/elements/CommandPalette/buildActions.spec.js +0 -158
- package/dist/elements/CommandPalette/buildActions.spec.js.map +0 -1
- package/dist/elements/CommandPalette/highlightLabel.spec.js +0 -78
- package/dist/elements/CommandPalette/highlightLabel.spec.js.map +0 -1
- package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +0 -143
- package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +0 -1
- package/dist/elements/Toasts/fieldErrors.spec.js +0 -46
- package/dist/elements/Toasts/fieldErrors.spec.js.map +0 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.spec.js +0 -152
- package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.spec.js.map +0 -1
- package/dist/elements/WhereBuilder/conditionValue.spec.js +0 -65
- package/dist/elements/WhereBuilder/conditionValue.spec.js.map +0 -1
- package/dist/fields/Upload/Input.spec.js +0 -242
- package/dist/fields/Upload/Input.spec.js.map +0 -1
- package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.d.ts +0 -2
- package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.d.ts.map +0 -1
- package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js +0 -67
- package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js.map +0 -1
- package/dist/layouts/Root/index.spec.js +0 -20
- package/dist/layouts/Root/index.spec.js.map +0 -1
- package/dist/providers/Auth/authSessionRequests.spec.js +0 -121
- package/dist/providers/Auth/authSessionRequests.spec.js.map +0 -1
- package/dist/providers/Auth/sessionActivity.spec.js +0 -44
- package/dist/providers/Auth/sessionActivity.spec.js.map +0 -1
- package/dist/providers/Auth/tabSessionSync/index.spec.js +0 -463
- package/dist/providers/Auth/tabSessionSync/index.spec.js.map +0 -1
- package/dist/providers/Auth/useAuthSessionTimers.spec.js +0 -311
- package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +0 -1
- package/dist/providers/RouteTransition/ProgressBar/index.spec.js +0 -44
- package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +0 -1
- package/dist/providers/TableColumns/buildColumnState/index.spec.js +0 -40
- package/dist/providers/TableColumns/buildColumnState/index.spec.js.map +0 -1
- package/dist/utilities/appendCacheTag.spec.js +0 -34
- package/dist/utilities/appendCacheTag.spec.js.map +0 -1
- package/dist/utilities/formatMetadata.spec.js +0 -83
- package/dist/utilities/formatMetadata.spec.js.map +0 -1
- package/dist/utilities/fuzzyMatch.spec.js +0 -38
- package/dist/utilities/fuzzyMatch.spec.js.map +0 -1
- package/dist/utilities/getRequestLocale.d.ts +0 -7
- package/dist/utilities/getRequestLocale.d.ts.map +0 -1
- package/dist/utilities/getRequestLocale.js +0 -20
- package/dist/utilities/getRequestLocale.js.map +0 -1
- package/dist/utilities/initReq.d.ts +0 -16
- package/dist/utilities/initReq.d.ts.map +0 -1
- package/dist/utilities/initReq.js +0 -111
- package/dist/utilities/initReq.js.map +0 -1
- package/dist/utilities/isCustomAdminView.spec.js +0 -90
- package/dist/utilities/isCustomAdminView.spec.js.map +0 -1
- package/dist/utilities/isPathMatchingRoute.spec.js +0 -178
- package/dist/utilities/isPathMatchingRoute.spec.js.map +0 -1
- package/dist/utilities/normalizeRelationshipValue.spec.js +0 -373
- package/dist/utilities/normalizeRelationshipValue.spec.js.map +0 -1
- package/dist/utilities/recentlyViewed.spec.js +0 -92
- package/dist/utilities/recentlyViewed.spec.js.map +0 -1
- package/dist/utilities/selectiveCache.d.ts +0 -12
- package/dist/utilities/selectiveCache.d.ts.map +0 -1
- package/dist/utilities/selectiveCache.js +0 -37
- package/dist/utilities/selectiveCache.js.map +0 -1
- package/dist/views/Root/getCustomCollectionViewByRoute.spec.js +0 -168
- package/dist/views/Root/getCustomCollectionViewByRoute.spec.js.map +0 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +0 -861
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +0 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +0 -47
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +0 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +0 -135
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +0 -1
- package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js +0 -100
- package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.spec.js","names":["afterEach","beforeEach","describe","expect","it","vi","TAB_SESSION_EVENT_TYPES","createTabSessionSync","tabSessionSyncCleanups","resetMockBroadcastChannels","cleanup","splice","restoreAllMocks","unstubAllGlobals","clearAllMocks","session","createSession","expirationMs","token","tabSessionSync","createTestTabSessionSync","now","broadcast","refreshStartedAt","type","REFRESHED","getBroadcastChannel","postMessage","toHaveBeenCalledWith","sourceTabID","sentAt","onSessionRefreshed","fn","localExpirationMs","channel","emit","createTabSessionMessage","onSessionExpired","expiredTokenAt","EXPIRED","not","toHaveBeenCalled","firstState","secondState","refreshMessage","logoutMessage","LOGGED_OUT","onSessionLoggedOut","firstChannel","secondChannel","toBe","toHaveBeenCalledOnce","appliedSession","refreshB","refreshA","toHaveBeenCalledTimes","toHaveBeenLastCalledWith","reconcileSession","mockResolvedValue","status","window","dispatchEvent","StorageEvent","key","newValue","JSON","stringify","affectedExpirationMs","Promise","resolve","stubGlobal","undefined","settlesSentAt","setItem","spyOn","Storage","prototype","broadcaster","value","mock","calls","parse","toEqual","isBroadcastChannelFallback","toContain","mockClear","logoutPublication","Error","broadcastLogoutSettlement","logoutKey","logoutValue","addEventListener","failedChannel","mockImplementationOnce","close","any","Function","resolveReconciliation","onTabSessionUnauthenticated","getTokenExpirationMs","push","MockBroadcastChannel","instances","listeners","Set","_type","listener","add","removeEventListener","delete","message","MessageEvent","data","messageWithoutTimestamp","refreshedMessage","exp","user","id","collection","at","length","constructor"],"sources":["../../../../src/providers/Auth/tabSessionSync/index.spec.ts"],"sourcesContent":["// @vitest-environment jsdom\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport type { UserWithToken } from '../types.js'\nimport type { TabSessionMessage, TabSessionReconciliationResult } from './index.js'\n\nimport { TAB_SESSION_EVENT_TYPES, createTabSessionSync } from './index.js'\n\nconst tabSessionSyncCleanups: Array<() => void> = []\n\nbeforeEach(() => {\n resetMockBroadcastChannels()\n})\n\nafterEach(() => {\n for (const cleanup of tabSessionSyncCleanups.splice(0)) {\n cleanup()\n }\n\n vi.restoreAllMocks()\n vi.unstubAllGlobals()\n vi.clearAllMocks()\n})\n\ndescribe('createTabSessionSync', () => {\n it('should broadcast refreshed sessions with source-tab and timing metadata', () => {\n const session = createSession({ expirationMs: 20_000, token: 'refreshed-token' })\n const tabSessionSync = createTestTabSessionSync({ now: () => 123 })\n\n tabSessionSync.broadcast({\n refreshStartedAt: 100,\n session,\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n\n expect(getBroadcastChannel().postMessage).toHaveBeenCalledWith({\n refreshStartedAt: 100,\n session,\n sourceTabID: 'local-tab',\n sentAt: 123,\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n })\n\n it('should apply a newer refresh when the provider shortens the token lifetime', () => {\n const onSessionRefreshed = vi.fn()\n const session = createSession({ expirationMs: 30_000 })\n\n createTestTabSessionSync({\n localExpirationMs: 40_000,\n onSessionRefreshed,\n })\n const channel = getBroadcastChannel()\n\n channel.emit(\n createTabSessionMessage({\n sentAt: 100,\n session,\n sourceTabID: 'refresh-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n }),\n )\n\n expect(onSessionRefreshed).toHaveBeenCalledWith(session)\n })\n\n it('should ignore expiration events for older sessions', () => {\n const onSessionExpired = vi.fn()\n\n createTestTabSessionSync({\n localExpirationMs: 40_000,\n onSessionExpired,\n })\n const channel = getBroadcastChannel()\n\n channel.emit(\n createTabSessionMessage({\n expiredTokenAt: 30_000,\n sourceTabID: 'stale-expiration-tab',\n type: TAB_SESSION_EVENT_TYPES.EXPIRED,\n }),\n )\n\n expect(onSessionExpired).not.toHaveBeenCalled()\n })\n\n it('should converge on logout when equal-time events arrive in opposite orders', () => {\n let firstState = 'initial'\n let secondState = 'initial'\n const refreshMessage = createTabSessionMessage({\n sentAt: 500,\n session: createSession({ expirationMs: 30_000, token: 'refreshed-token' }),\n sourceTabID: 'refresh-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n const logoutMessage = createTabSessionMessage({\n sentAt: 500,\n sourceTabID: 'logout-tab',\n type: TAB_SESSION_EVENT_TYPES.LOGGED_OUT,\n })\n\n createTestTabSessionSync({\n onSessionLoggedOut: () => {\n firstState = 'logged-out'\n },\n onSessionRefreshed: () => {\n firstState = 'refreshed'\n },\n sourceTabID: 'first-local-tab',\n })\n const firstChannel = getBroadcastChannel()\n createTestTabSessionSync({\n onSessionLoggedOut: () => {\n secondState = 'logged-out'\n },\n onSessionRefreshed: () => {\n secondState = 'refreshed'\n },\n sourceTabID: 'second-local-tab',\n })\n const secondChannel = getBroadcastChannel()\n\n firstChannel.emit(refreshMessage)\n firstChannel.emit(logoutMessage)\n secondChannel.emit(logoutMessage)\n secondChannel.emit(refreshMessage)\n\n expect(firstState).toBe('logged-out')\n expect(secondState).toBe('logged-out')\n })\n\n it('should keep logout ahead of a refresh that started earlier and broadcast later', () => {\n const onSessionLoggedOut = vi.fn()\n const onSessionRefreshed = vi.fn()\n const refreshMessage = createTabSessionMessage({\n refreshStartedAt: 100,\n sentAt: 300,\n session: createSession({ expirationMs: 30_000, token: 'late-refreshed-token' }),\n sourceTabID: 'refresh-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n const logoutMessage = createTabSessionMessage({\n sentAt: 200,\n sourceTabID: 'logout-tab',\n type: TAB_SESSION_EVENT_TYPES.LOGGED_OUT,\n })\n\n createTestTabSessionSync({\n onSessionLoggedOut,\n onSessionRefreshed,\n sourceTabID: 'receiving-tab',\n })\n const channel = getBroadcastChannel()\n\n channel.emit(logoutMessage)\n channel.emit(refreshMessage)\n\n expect(onSessionLoggedOut).toHaveBeenCalledOnce()\n expect(onSessionRefreshed).not.toHaveBeenCalled()\n })\n\n it('should apply refreshes in publication order instead of request-start ordering for refresh-vs-refresh', () => {\n let appliedSession: UserWithToken | undefined\n const onSessionRefreshed = vi.fn((session: UserWithToken) => {\n appliedSession = session\n })\n const refreshB = createTabSessionMessage({\n refreshStartedAt: 200,\n sentAt: 100,\n session: createSession({ expirationMs: 30_000, token: 'refresh-b' }),\n sourceTabID: 'refresh-b-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n const refreshA = createTabSessionMessage({\n refreshStartedAt: 100,\n sentAt: 200,\n session: createSession({ expirationMs: 40_000, token: 'refresh-a' }),\n sourceTabID: 'refresh-a-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n\n createTestTabSessionSync({ onSessionRefreshed, sourceTabID: 'receiving-tab' })\n const channel = getBroadcastChannel()\n\n channel.emit(refreshB)\n channel.emit(refreshA)\n\n expect(onSessionRefreshed).toHaveBeenCalledTimes(2)\n expect(onSessionRefreshed).toHaveBeenLastCalledWith(refreshA.session)\n expect(appliedSession).toBe(refreshA.session)\n })\n\n it('should ignore storage notifications while BroadcastChannel is healthy', async () => {\n const reconcileSession = vi.fn().mockResolvedValue({ status: 'indeterminate' } as const)\n\n createTestTabSessionSync({ reconcileSession, sourceTabID: 'receiving-tab' })\n\n window.dispatchEvent(\n new StorageEvent('storage', {\n key: 'payload:auth-session:tab-sync',\n newValue: JSON.stringify({\n affectedExpirationMs: 30_000,\n refreshStartedAt: 100,\n sentAt: 200,\n sourceTabID: 'refreshing-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n }),\n }),\n )\n await Promise.resolve()\n\n expect(reconcileSession).not.toHaveBeenCalled()\n })\n\n it('should ignore a late storage refresh whose request started before logout', () => {\n vi.stubGlobal('BroadcastChannel', undefined)\n const reconcileSession = vi.fn().mockResolvedValue({ status: 'indeterminate' } as const)\n const onSessionLoggedOut = vi.fn()\n\n createTestTabSessionSync({\n reconcileSession,\n onSessionLoggedOut,\n sourceTabID: 'receiving-tab',\n })\n\n window.dispatchEvent(\n new StorageEvent('storage', {\n key: 'payload:auth-session:tab-sync',\n newValue: JSON.stringify({\n affectedExpirationMs: 0,\n settlesSentAt: 200,\n sentAt: 201,\n sourceTabID: 'logout-tab',\n type: TAB_SESSION_EVENT_TYPES.LOGGED_OUT,\n }),\n }),\n )\n window.dispatchEvent(\n new StorageEvent('storage', {\n key: 'payload:auth-session:tab-sync',\n newValue: JSON.stringify({\n affectedExpirationMs: 30_000,\n refreshStartedAt: 100,\n sentAt: 300,\n sourceTabID: 'refresh-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n }),\n }),\n )\n\n expect(onSessionLoggedOut).toHaveBeenCalledOnce()\n expect(reconcileSession).not.toHaveBeenCalled()\n })\n\n it('should keep storage fallback notification-only while reconciling refresh and settling logout', async () => {\n vi.stubGlobal('BroadcastChannel', undefined)\n const reconcileSession = vi.fn().mockResolvedValue({ status: 'indeterminate' })\n const onSessionLoggedOut = vi.fn()\n\n createTestTabSessionSync({\n reconcileSession,\n onSessionLoggedOut,\n sourceTabID: 'receiving-tab',\n })\n const setItem = vi.spyOn(Storage.prototype, 'setItem')\n const broadcaster = createTestTabSessionSync({\n now: () => 123,\n sourceTabID: 'broadcasting-tab',\n })\n\n broadcaster.broadcast({\n refreshStartedAt: 100,\n session: createSession({ expirationMs: 20_000, token: 'sensitive-token' }),\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n const [key, value] = setItem.mock.calls[0] as [string, string]\n\n expect(JSON.parse(value)).toEqual({\n affectedExpirationMs: 20_000,\n isBroadcastChannelFallback: true,\n refreshStartedAt: 100,\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n sentAt: 123,\n sourceTabID: 'broadcasting-tab',\n })\n expect(value).not.toContain('sensitive-token')\n expect(value).not.toContain('user')\n\n window.dispatchEvent(new StorageEvent('storage', { key, newValue: value }))\n await Promise.resolve()\n\n expect(reconcileSession).toHaveBeenCalledOnce()\n\n reconcileSession.mockClear()\n\n const logoutPublication = broadcaster.broadcast({\n type: TAB_SESSION_EVENT_TYPES.LOGGED_OUT,\n })\n\n expect(setItem).toHaveBeenCalledOnce()\n expect(logoutPublication.type).toBe(TAB_SESSION_EVENT_TYPES.LOGGED_OUT)\n\n if (logoutPublication.type !== TAB_SESSION_EVENT_TYPES.LOGGED_OUT) {\n throw new Error('Expected a logged-out publication.')\n }\n\n broadcaster.broadcastLogoutSettlement(logoutPublication)\n\n const [logoutKey, logoutValue] = setItem.mock.calls[1] as [string, string]\n\n expect(JSON.parse(logoutValue)).toEqual({\n affectedExpirationMs: 0,\n isBroadcastChannelFallback: true,\n settlesSentAt: 124,\n sentAt: 125,\n sourceTabID: 'broadcasting-tab',\n type: TAB_SESSION_EVENT_TYPES.LOGGED_OUT,\n })\n expect(logoutValue).not.toContain('sensitive-token')\n expect(logoutValue).not.toContain('user')\n\n window.dispatchEvent(new StorageEvent('storage', { key: logoutKey, newValue: logoutValue }))\n\n expect(onSessionLoggedOut).toHaveBeenCalledOnce()\n expect(reconcileSession).not.toHaveBeenCalled()\n\n await Promise.resolve()\n\n expect(reconcileSession).not.toHaveBeenCalled()\n })\n\n it('should downgrade a failed channel and reconcile through storage', async () => {\n const reconcileSession = vi.fn().mockResolvedValue({ status: 'indeterminate' })\n\n createTestTabSessionSync({ reconcileSession, sourceTabID: 'storage-peer' })\n const addEventListener = vi.spyOn(window, 'addEventListener')\n const setItem = vi.spyOn(Storage.prototype, 'setItem')\n const broadcaster = createTestTabSessionSync({ sourceTabID: 'channel-broadcaster' })\n const failedChannel = getBroadcastChannel()\n\n failedChannel.postMessage.mockImplementationOnce(() => {\n throw new Error('channel closed')\n })\n broadcaster.broadcast({\n refreshStartedAt: 100,\n session: createSession({ expirationMs: 20_000 }),\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n\n expect(failedChannel.close).toHaveBeenCalledOnce()\n expect(addEventListener).toHaveBeenCalledWith('storage', expect.any(Function))\n expect(setItem).toHaveBeenCalledOnce()\n\n const [key, newValue] = setItem.mock.calls[0] as [string, string]\n\n window.dispatchEvent(new StorageEvent('storage', { key, newValue }))\n await Promise.resolve()\n\n expect(reconcileSession).toHaveBeenCalledOnce()\n })\n\n it('should ignore a pending storage reconciliation after cleanup', async () => {\n vi.stubGlobal('BroadcastChannel', undefined)\n let resolveReconciliation: ((result: TabSessionReconciliationResult) => void) | undefined\n const reconcileSession = vi.fn(\n () =>\n new Promise<TabSessionReconciliationResult>((resolve) => {\n resolveReconciliation = resolve\n }),\n )\n const onTabSessionUnauthenticated = vi.fn()\n const tabSessionSync = createTestTabSessionSync({\n reconcileSession,\n onTabSessionUnauthenticated,\n })\n\n window.dispatchEvent(\n new StorageEvent('storage', {\n key: 'payload:auth-session:tab-sync',\n newValue: JSON.stringify({\n affectedExpirationMs: 40_000,\n refreshStartedAt: 400,\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n sentAt: 500,\n sourceTabID: 'remote-tab',\n }),\n }),\n )\n tabSessionSync.cleanup()\n resolveReconciliation?.({ status: 'unauthenticated' })\n await Promise.resolve()\n\n expect(onTabSessionUnauthenticated).not.toHaveBeenCalled()\n })\n})\n\nfunction createTestTabSessionSync({\n reconcileSession = vi.fn().mockResolvedValue({ status: 'indeterminate' } as const),\n localExpirationMs,\n now,\n onSessionExpired = vi.fn(),\n onSessionLoggedOut = vi.fn(),\n onSessionRefreshed = vi.fn(),\n onTabSessionUnauthenticated = vi.fn(),\n sourceTabID = 'local-tab',\n}: {\n reconcileSession?: () => Promise<TabSessionReconciliationResult>\n localExpirationMs?: number\n now?: () => number\n onSessionExpired?: (expiredTokenAt: number) => void\n onSessionLoggedOut?: () => void\n onSessionRefreshed?: (session: UserWithToken) => void\n onTabSessionUnauthenticated?: () => void\n sourceTabID?: string\n} = {}) {\n const tabSessionSync = createTabSessionSync({\n reconcileSession,\n getTokenExpirationMs: () => localExpirationMs,\n now,\n onSessionExpired,\n onSessionLoggedOut,\n onSessionRefreshed,\n onTabSessionUnauthenticated,\n sourceTabID,\n })\n\n tabSessionSyncCleanups.push(tabSessionSync.cleanup)\n\n return tabSessionSync\n}\n\nclass MockBroadcastChannel {\n static instances: MockBroadcastChannel[] = []\n\n listeners = new Set<(event: MessageEvent<TabSessionMessage>) => void>()\n addEventListener = vi.fn(\n (_type: string, listener: (event: MessageEvent<TabSessionMessage>) => void) => {\n this.listeners.add(listener)\n },\n )\n close = vi.fn()\n postMessage = vi.fn()\n removeEventListener = vi.fn(\n (_type: string, listener: (event: MessageEvent<TabSessionMessage>) => void) => {\n this.listeners.delete(listener)\n },\n )\n\n emit(message: TabSessionMessage): void {\n for (const listener of this.listeners) {\n listener(new MessageEvent('message', { data: message }))\n }\n }\n}\n\nfunction createTabSessionMessage(\n message:\n | ({\n sentAt?: number\n } & Omit<\n Extract<TabSessionMessage, { type: typeof TAB_SESSION_EVENT_TYPES.EXPIRED }>,\n 'sentAt'\n >)\n | ({\n sentAt?: number\n } & Omit<\n Extract<TabSessionMessage, { type: typeof TAB_SESSION_EVENT_TYPES.LOGGED_OUT }>,\n 'sentAt'\n >)\n | ({\n refreshStartedAt?: number\n sentAt?: number\n } & Omit<\n Extract<TabSessionMessage, { type: typeof TAB_SESSION_EVENT_TYPES.REFRESHED }>,\n 'refreshStartedAt' | 'sentAt'\n >),\n): TabSessionMessage {\n const { sentAt = 100, ...messageWithoutTimestamp } = message\n\n if (messageWithoutTimestamp.type === TAB_SESSION_EVENT_TYPES.REFRESHED) {\n const { refreshStartedAt = sentAt, ...refreshedMessage } = messageWithoutTimestamp\n\n return { ...refreshedMessage, refreshStartedAt, sentAt }\n }\n\n return { ...messageWithoutTimestamp, sentAt } as TabSessionMessage\n}\n\nfunction createSession({\n expirationMs,\n token = 'token',\n}: {\n expirationMs: number\n token?: string\n}): UserWithToken {\n return {\n exp: expirationMs / 1000,\n token,\n user: { id: '1', collection: 'users' },\n }\n}\n\nfunction getBroadcastChannel(): MockBroadcastChannel {\n const channel = MockBroadcastChannel.instances.at(-1)\n\n if (!channel) {\n throw new Error('Expected a BroadcastChannel instance')\n }\n\n return channel\n}\n\nfunction resetMockBroadcastChannels(): void {\n MockBroadcastChannel.instances.length = 0\n vi.stubGlobal(\n 'BroadcastChannel',\n class extends MockBroadcastChannel {\n constructor() {\n super()\n MockBroadcastChannel.instances.push(this)\n }\n },\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,311 +0,0 @@
|
|
|
1
|
-
// @vitest-environment jsdom
|
|
2
|
-
import React, { act } from 'react';
|
|
3
|
-
import { createRoot } from 'react-dom/client';
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
5
|
-
import { getAuthSessionTiming } from './sessionTiming.js';
|
|
6
|
-
import { useAuthSessionTimers } from './useAuthSessionTimers.js';
|
|
7
|
-
const timerCleanups = [];
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
vi.useFakeTimers();
|
|
10
|
-
vi.setSystemTime(new Date('2026-01-01T00:00:00.000Z'));
|
|
11
|
-
});
|
|
12
|
-
afterEach(() => {
|
|
13
|
-
for (const cleanup of timerCleanups.splice(0)) {
|
|
14
|
-
cleanup();
|
|
15
|
-
}
|
|
16
|
-
vi.useRealTimers();
|
|
17
|
-
});
|
|
18
|
-
describe('useAuthSessionTimers', () => {
|
|
19
|
-
it('should scale session timing for tokens shorter than two minutes', () => {
|
|
20
|
-
const nowMs = Date.now();
|
|
21
|
-
const expirationMs = nowMs + 30_000;
|
|
22
|
-
expect(getAuthSessionTiming({
|
|
23
|
-
expirationMs,
|
|
24
|
-
nowMs
|
|
25
|
-
})).toEqual({
|
|
26
|
-
activityTrackingStartsAt: nowMs,
|
|
27
|
-
expiresAt: expirationMs,
|
|
28
|
-
refreshStartsAt: nowMs,
|
|
29
|
-
reminderStartsAt: nowMs + 15_000
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
it('should return the lifecycle timing when setting an expiration', () => {
|
|
33
|
-
const timers = renderAuthSessionTimers();
|
|
34
|
-
const expirationMs = Date.now() + 300_000;
|
|
35
|
-
expect(timers.setExpiration(expirationMs)).toEqual({
|
|
36
|
-
activityTrackingStartsAt: expirationMs - 240_000,
|
|
37
|
-
expiresAt: expirationMs,
|
|
38
|
-
refreshStartsAt: expirationMs - 120_000,
|
|
39
|
-
reminderStartsAt: expirationMs - 60_000
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
it('should refresh at the checkpoint when activity occurred in the tracking window', () => {
|
|
43
|
-
const onActivity = vi.fn();
|
|
44
|
-
const onActivityRefresh = vi.fn();
|
|
45
|
-
const timers = renderAuthSessionTimers({
|
|
46
|
-
onActivity,
|
|
47
|
-
onActivityRefresh
|
|
48
|
-
});
|
|
49
|
-
timers.setExpiration(Date.now() + 300_000);
|
|
50
|
-
act(() => {
|
|
51
|
-
vi.advanceTimersByTime(120_000);
|
|
52
|
-
window.dispatchEvent(new MouseEvent('mousemove'));
|
|
53
|
-
vi.advanceTimersByTime(1_000);
|
|
54
|
-
window.dispatchEvent(new KeyboardEvent('keydown'));
|
|
55
|
-
vi.advanceTimersByTime(59_000);
|
|
56
|
-
vi.advanceTimersByTime(1_000);
|
|
57
|
-
});
|
|
58
|
-
expect(onActivity).toHaveBeenCalledOnce();
|
|
59
|
-
expect(onActivityRefresh).toHaveBeenCalledTimes(1);
|
|
60
|
-
});
|
|
61
|
-
it('should ignore activity once the expiration reminder opens', () => {
|
|
62
|
-
const onActivityRefresh = vi.fn();
|
|
63
|
-
const timers = renderAuthSessionTimers({
|
|
64
|
-
onActivityRefresh
|
|
65
|
-
});
|
|
66
|
-
const sessionStartedAt = Date.now();
|
|
67
|
-
timers.setExpiration(sessionStartedAt + 300_000);
|
|
68
|
-
act(() => {
|
|
69
|
-
vi.advanceTimersByTime(60_000);
|
|
70
|
-
});
|
|
71
|
-
vi.setSystemTime(sessionStartedAt + 240_000);
|
|
72
|
-
expect(timers.recordActivity('route')).toBe(false);
|
|
73
|
-
expect(onActivityRefresh).not.toHaveBeenCalled();
|
|
74
|
-
});
|
|
75
|
-
it('should clear timers and listeners on logout', () => {
|
|
76
|
-
const onActivityRefresh = vi.fn();
|
|
77
|
-
const onExpire = vi.fn();
|
|
78
|
-
const timers = renderAuthSessionTimers({
|
|
79
|
-
onActivityRefresh,
|
|
80
|
-
onExpire
|
|
81
|
-
});
|
|
82
|
-
timers.setExpiration(Date.now() + 300_000);
|
|
83
|
-
timers.clear();
|
|
84
|
-
act(() => {
|
|
85
|
-
window.dispatchEvent(new MouseEvent('mousemove'));
|
|
86
|
-
vi.advanceTimersByTime(300_000);
|
|
87
|
-
});
|
|
88
|
-
expect(onActivityRefresh).not.toHaveBeenCalled();
|
|
89
|
-
expect(onExpire).not.toHaveBeenCalled();
|
|
90
|
-
});
|
|
91
|
-
it('should schedule the reminder and expiration from the current expiration', () => {
|
|
92
|
-
const onExpire = vi.fn();
|
|
93
|
-
const onReminder = vi.fn();
|
|
94
|
-
const timers = renderAuthSessionTimers({
|
|
95
|
-
onExpire,
|
|
96
|
-
onReminder
|
|
97
|
-
});
|
|
98
|
-
const expirationMs = Date.now() + 300_000;
|
|
99
|
-
timers.setExpiration(expirationMs);
|
|
100
|
-
act(() => {
|
|
101
|
-
vi.advanceTimersByTime(240_000);
|
|
102
|
-
});
|
|
103
|
-
expect(onReminder).toHaveBeenCalledTimes(1);
|
|
104
|
-
expect(onExpire).not.toHaveBeenCalled();
|
|
105
|
-
act(() => {
|
|
106
|
-
vi.advanceTimersByTime(60_000);
|
|
107
|
-
});
|
|
108
|
-
expect(onExpire).toHaveBeenCalledWith(expirationMs);
|
|
109
|
-
});
|
|
110
|
-
it('should respect expirations beyond the maximum browser timeout', () => {
|
|
111
|
-
const onExpire = vi.fn();
|
|
112
|
-
const timers = renderAuthSessionTimers({
|
|
113
|
-
onExpire
|
|
114
|
-
});
|
|
115
|
-
const thirtyDaysMs = 2_592_000_000;
|
|
116
|
-
const maximumBrowserTimeoutMs = 2_147_483_647;
|
|
117
|
-
const expirationMs = Date.now() + thirtyDaysMs;
|
|
118
|
-
timers.setExpiration(expirationMs);
|
|
119
|
-
act(() => {
|
|
120
|
-
vi.advanceTimersByTime(maximumBrowserTimeoutMs);
|
|
121
|
-
});
|
|
122
|
-
expect(onExpire).not.toHaveBeenCalled();
|
|
123
|
-
act(() => {
|
|
124
|
-
vi.advanceTimersByTime(thirtyDaysMs - maximumBrowserTimeoutMs - 1);
|
|
125
|
-
});
|
|
126
|
-
expect(onExpire).not.toHaveBeenCalled();
|
|
127
|
-
act(() => {
|
|
128
|
-
vi.advanceTimersByTime(1);
|
|
129
|
-
});
|
|
130
|
-
expect(onExpire).toHaveBeenCalledOnce();
|
|
131
|
-
expect(onExpire).toHaveBeenCalledWith(expirationMs);
|
|
132
|
-
});
|
|
133
|
-
it('should schedule expiration when the token expires exactly now', () => {
|
|
134
|
-
const onActivityRefresh = vi.fn();
|
|
135
|
-
const onExpire = vi.fn();
|
|
136
|
-
const onReminder = vi.fn();
|
|
137
|
-
const timers = renderAuthSessionTimers({
|
|
138
|
-
isAuthenticated: false,
|
|
139
|
-
onActivityRefresh,
|
|
140
|
-
onExpire,
|
|
141
|
-
onReminder
|
|
142
|
-
});
|
|
143
|
-
const expirationMs = Date.now();
|
|
144
|
-
timers.setExpiration(expirationMs);
|
|
145
|
-
expect(onExpire).not.toHaveBeenCalled();
|
|
146
|
-
act(() => {
|
|
147
|
-
vi.advanceTimersByTime(0);
|
|
148
|
-
});
|
|
149
|
-
expect(onExpire).toHaveBeenCalledOnce();
|
|
150
|
-
expect(onExpire).toHaveBeenCalledWith(expirationMs);
|
|
151
|
-
expect(onActivityRefresh).not.toHaveBeenCalled();
|
|
152
|
-
expect(onReminder).not.toHaveBeenCalled();
|
|
153
|
-
});
|
|
154
|
-
it('should schedule expiration when the token is already past', () => {
|
|
155
|
-
const onActivityRefresh = vi.fn();
|
|
156
|
-
const onExpire = vi.fn();
|
|
157
|
-
const onReminder = vi.fn();
|
|
158
|
-
const timers = renderAuthSessionTimers({
|
|
159
|
-
isAuthenticated: false,
|
|
160
|
-
onActivityRefresh,
|
|
161
|
-
onExpire,
|
|
162
|
-
onReminder
|
|
163
|
-
});
|
|
164
|
-
const expirationMs = Date.now() - 1;
|
|
165
|
-
timers.setExpiration(expirationMs);
|
|
166
|
-
act(() => {
|
|
167
|
-
vi.advanceTimersByTime(0);
|
|
168
|
-
});
|
|
169
|
-
expect(onExpire).toHaveBeenCalledOnce();
|
|
170
|
-
expect(onExpire).toHaveBeenCalledWith(expirationMs);
|
|
171
|
-
expect(onActivityRefresh).not.toHaveBeenCalled();
|
|
172
|
-
expect(onReminder).not.toHaveBeenCalled();
|
|
173
|
-
});
|
|
174
|
-
it('should reject a non-finite expiration without activating the session', () => {
|
|
175
|
-
const onActivityRefresh = vi.fn();
|
|
176
|
-
const onExpire = vi.fn();
|
|
177
|
-
const timers = renderAuthSessionTimers({
|
|
178
|
-
isAuthenticated: false,
|
|
179
|
-
onActivityRefresh,
|
|
180
|
-
onExpire
|
|
181
|
-
});
|
|
182
|
-
timers.setExpiration(Number.NaN);
|
|
183
|
-
timers.scheduleRefresh(true);
|
|
184
|
-
act(() => {
|
|
185
|
-
vi.advanceTimersByTime(1_000);
|
|
186
|
-
});
|
|
187
|
-
expect(timers.getCurrentExpirationMs()).toBeUndefined();
|
|
188
|
-
expect(onActivityRefresh).not.toHaveBeenCalled();
|
|
189
|
-
expect(onExpire).not.toHaveBeenCalled();
|
|
190
|
-
});
|
|
191
|
-
it('should synchronously activate on apply and deactivate on clear', () => {
|
|
192
|
-
const onActivityRefresh = vi.fn();
|
|
193
|
-
const timers = renderAuthSessionTimers({
|
|
194
|
-
isAuthenticated: false,
|
|
195
|
-
onActivityRefresh
|
|
196
|
-
});
|
|
197
|
-
timers.clear();
|
|
198
|
-
timers.setExpiration(Date.now() + 300_000);
|
|
199
|
-
timers.scheduleRefresh(true);
|
|
200
|
-
act(() => {
|
|
201
|
-
vi.advanceTimersByTime(1_000);
|
|
202
|
-
});
|
|
203
|
-
expect(onActivityRefresh).toHaveBeenCalledOnce();
|
|
204
|
-
timers.clear();
|
|
205
|
-
timers.scheduleRefresh(true);
|
|
206
|
-
act(() => {
|
|
207
|
-
vi.advanceTimersByTime(1_000);
|
|
208
|
-
});
|
|
209
|
-
expect(onActivityRefresh).toHaveBeenCalledOnce();
|
|
210
|
-
});
|
|
211
|
-
it('should reset tracked activity when replacing the expiration', () => {
|
|
212
|
-
const onActivity = vi.fn();
|
|
213
|
-
const onActivityRefresh = vi.fn();
|
|
214
|
-
const timers = renderAuthSessionTimers({
|
|
215
|
-
onActivity,
|
|
216
|
-
onActivityRefresh
|
|
217
|
-
});
|
|
218
|
-
const expirationMs = Date.now() + 300_000;
|
|
219
|
-
timers.setExpiration(expirationMs);
|
|
220
|
-
act(() => {
|
|
221
|
-
vi.advanceTimersByTime(60_000);
|
|
222
|
-
});
|
|
223
|
-
expect(timers.recordActivity('route')).toBe(true);
|
|
224
|
-
expect(onActivity).toHaveBeenCalledOnce();
|
|
225
|
-
timers.setExpiration(expirationMs);
|
|
226
|
-
expect(timers.recordActivity('route')).toBe(true);
|
|
227
|
-
expect(onActivity).toHaveBeenCalledTimes(2);
|
|
228
|
-
act(() => {
|
|
229
|
-
vi.advanceTimersByTime(120_000);
|
|
230
|
-
vi.advanceTimersByTime(1_000);
|
|
231
|
-
});
|
|
232
|
-
expect(onActivityRefresh).toHaveBeenCalledOnce();
|
|
233
|
-
});
|
|
234
|
-
it('should keep its controller and activity throttle across rerenders', () => {
|
|
235
|
-
const onActivityRefresh = vi.fn();
|
|
236
|
-
const timers = renderAuthSessionTimers({
|
|
237
|
-
onActivityRefresh
|
|
238
|
-
});
|
|
239
|
-
const initialController = timers.getController();
|
|
240
|
-
timers.setExpiration(Date.now() + 300_000);
|
|
241
|
-
act(() => {
|
|
242
|
-
vi.advanceTimersByTime(238_000);
|
|
243
|
-
window.dispatchEvent(new MouseEvent('mousemove'));
|
|
244
|
-
});
|
|
245
|
-
timers.rerender();
|
|
246
|
-
expect(timers.getController()).toBe(initialController);
|
|
247
|
-
act(() => {
|
|
248
|
-
vi.advanceTimersByTime(1);
|
|
249
|
-
window.dispatchEvent(new MouseEvent('mousemove'));
|
|
250
|
-
vi.advanceTimersByTime(999);
|
|
251
|
-
});
|
|
252
|
-
expect(onActivityRefresh).toHaveBeenCalledTimes(1);
|
|
253
|
-
});
|
|
254
|
-
it('should synchronously replace the current expiration', () => {
|
|
255
|
-
const timers = renderAuthSessionTimers();
|
|
256
|
-
const firstExpirationMs = Date.now() + 300_000;
|
|
257
|
-
const replacementExpirationMs = Date.now() + 600_000;
|
|
258
|
-
timers.setExpiration(firstExpirationMs);
|
|
259
|
-
timers.setExpiration(replacementExpirationMs);
|
|
260
|
-
expect(timers.getCurrentExpirationMs()).toBe(replacementExpirationMs);
|
|
261
|
-
});
|
|
262
|
-
});
|
|
263
|
-
function renderAuthSessionTimers({
|
|
264
|
-
isAuthenticated = true,
|
|
265
|
-
onActivity = vi.fn(),
|
|
266
|
-
onActivityRefresh = vi.fn(),
|
|
267
|
-
onExpire = vi.fn(),
|
|
268
|
-
onReminder = vi.fn()
|
|
269
|
-
} = {}) {
|
|
270
|
-
let controller;
|
|
271
|
-
const container = document.createElement('div');
|
|
272
|
-
const root = createRoot(container);
|
|
273
|
-
function SessionTimers() {
|
|
274
|
-
controller = useAuthSessionTimers({
|
|
275
|
-
isAuthenticated,
|
|
276
|
-
onActivity,
|
|
277
|
-
onActivityRefresh,
|
|
278
|
-
onExpire,
|
|
279
|
-
onReminder
|
|
280
|
-
});
|
|
281
|
-
return null;
|
|
282
|
-
}
|
|
283
|
-
act(() => {
|
|
284
|
-
root.render(React.createElement(SessionTimers));
|
|
285
|
-
});
|
|
286
|
-
timerCleanups.push(() => {
|
|
287
|
-
act(() => {
|
|
288
|
-
root.unmount();
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
const getController = () => {
|
|
292
|
-
if (!controller) {
|
|
293
|
-
throw new Error('Expected auth session timers.');
|
|
294
|
-
}
|
|
295
|
-
return controller;
|
|
296
|
-
};
|
|
297
|
-
return {
|
|
298
|
-
clear: () => getController().clear(),
|
|
299
|
-
getController,
|
|
300
|
-
getCurrentExpirationMs: () => getController().getCurrentExpirationMs(),
|
|
301
|
-
rerender: () => {
|
|
302
|
-
act(() => {
|
|
303
|
-
root.render(React.createElement(SessionTimers));
|
|
304
|
-
});
|
|
305
|
-
},
|
|
306
|
-
recordActivity: source => getController().recordActivity(source),
|
|
307
|
-
scheduleRefresh: forceRefresh => getController().scheduleRefresh(forceRefresh),
|
|
308
|
-
setExpiration: expirationMs => getController().setExpiration(expirationMs)
|
|
309
|
-
};
|
|
310
|
-
}
|
|
311
|
-
//# sourceMappingURL=useAuthSessionTimers.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthSessionTimers.spec.js","names":["React","act","createRoot","afterEach","beforeEach","describe","expect","it","vi","getAuthSessionTiming","useAuthSessionTimers","timerCleanups","useFakeTimers","setSystemTime","Date","cleanup","splice","useRealTimers","nowMs","now","expirationMs","toEqual","activityTrackingStartsAt","expiresAt","refreshStartsAt","reminderStartsAt","timers","renderAuthSessionTimers","setExpiration","onActivity","fn","onActivityRefresh","advanceTimersByTime","window","dispatchEvent","MouseEvent","KeyboardEvent","toHaveBeenCalledOnce","toHaveBeenCalledTimes","sessionStartedAt","recordActivity","toBe","not","toHaveBeenCalled","onExpire","clear","onReminder","toHaveBeenCalledWith","thirtyDaysMs","maximumBrowserTimeoutMs","isAuthenticated","Number","NaN","scheduleRefresh","getCurrentExpirationMs","toBeUndefined","initialController","getController","rerender","firstExpirationMs","replacementExpirationMs","controller","container","document","createElement","root","SessionTimers","render","push","unmount","Error","source","forceRefresh"],"sources":["../../../src/providers/Auth/useAuthSessionTimers.spec.ts"],"sourcesContent":["// @vitest-environment jsdom\nimport React, { act } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport type { AuthSessionTimers } from './useAuthSessionTimers.js'\n\nimport { getAuthSessionTiming } from './sessionTiming.js'\nimport { useAuthSessionTimers } from './useAuthSessionTimers.js'\n\nconst timerCleanups: Array<() => void> = []\n\nbeforeEach(() => {\n vi.useFakeTimers()\n vi.setSystemTime(new Date('2026-01-01T00:00:00.000Z'))\n})\n\nafterEach(() => {\n for (const cleanup of timerCleanups.splice(0)) {\n cleanup()\n }\n\n vi.useRealTimers()\n})\n\ndescribe('useAuthSessionTimers', () => {\n it('should scale session timing for tokens shorter than two minutes', () => {\n const nowMs = Date.now()\n const expirationMs = nowMs + 30_000\n\n expect(getAuthSessionTiming({ expirationMs, nowMs })).toEqual({\n activityTrackingStartsAt: nowMs,\n expiresAt: expirationMs,\n refreshStartsAt: nowMs,\n reminderStartsAt: nowMs + 15_000,\n })\n })\n\n it('should return the lifecycle timing when setting an expiration', () => {\n const timers = renderAuthSessionTimers()\n const expirationMs = Date.now() + 300_000\n\n expect(timers.setExpiration(expirationMs)).toEqual({\n activityTrackingStartsAt: expirationMs - 240_000,\n expiresAt: expirationMs,\n refreshStartsAt: expirationMs - 120_000,\n reminderStartsAt: expirationMs - 60_000,\n })\n })\n\n it('should refresh at the checkpoint when activity occurred in the tracking window', () => {\n const onActivity = vi.fn()\n const onActivityRefresh = vi.fn()\n const timers = renderAuthSessionTimers({ onActivity, onActivityRefresh })\n\n timers.setExpiration(Date.now() + 300_000)\n act(() => {\n vi.advanceTimersByTime(120_000)\n window.dispatchEvent(new MouseEvent('mousemove'))\n vi.advanceTimersByTime(1_000)\n window.dispatchEvent(new KeyboardEvent('keydown'))\n vi.advanceTimersByTime(59_000)\n vi.advanceTimersByTime(1_000)\n })\n\n expect(onActivity).toHaveBeenCalledOnce()\n expect(onActivityRefresh).toHaveBeenCalledTimes(1)\n })\n\n it('should ignore activity once the expiration reminder opens', () => {\n const onActivityRefresh = vi.fn()\n const timers = renderAuthSessionTimers({ onActivityRefresh })\n const sessionStartedAt = Date.now()\n\n timers.setExpiration(sessionStartedAt + 300_000)\n act(() => {\n vi.advanceTimersByTime(60_000)\n })\n vi.setSystemTime(sessionStartedAt + 240_000)\n\n expect(timers.recordActivity('route')).toBe(false)\n expect(onActivityRefresh).not.toHaveBeenCalled()\n })\n\n it('should clear timers and listeners on logout', () => {\n const onActivityRefresh = vi.fn()\n const onExpire = vi.fn()\n const timers = renderAuthSessionTimers({ onActivityRefresh, onExpire })\n\n timers.setExpiration(Date.now() + 300_000)\n timers.clear()\n act(() => {\n window.dispatchEvent(new MouseEvent('mousemove'))\n vi.advanceTimersByTime(300_000)\n })\n\n expect(onActivityRefresh).not.toHaveBeenCalled()\n expect(onExpire).not.toHaveBeenCalled()\n })\n\n it('should schedule the reminder and expiration from the current expiration', () => {\n const onExpire = vi.fn()\n const onReminder = vi.fn()\n const timers = renderAuthSessionTimers({ onExpire, onReminder })\n const expirationMs = Date.now() + 300_000\n\n timers.setExpiration(expirationMs)\n act(() => {\n vi.advanceTimersByTime(240_000)\n })\n\n expect(onReminder).toHaveBeenCalledTimes(1)\n expect(onExpire).not.toHaveBeenCalled()\n\n act(() => {\n vi.advanceTimersByTime(60_000)\n })\n\n expect(onExpire).toHaveBeenCalledWith(expirationMs)\n })\n\n it('should respect expirations beyond the maximum browser timeout', () => {\n const onExpire = vi.fn()\n const timers = renderAuthSessionTimers({ onExpire })\n const thirtyDaysMs = 2_592_000_000\n const maximumBrowserTimeoutMs = 2_147_483_647\n const expirationMs = Date.now() + thirtyDaysMs\n\n timers.setExpiration(expirationMs)\n\n act(() => {\n vi.advanceTimersByTime(maximumBrowserTimeoutMs)\n })\n\n expect(onExpire).not.toHaveBeenCalled()\n\n act(() => {\n vi.advanceTimersByTime(thirtyDaysMs - maximumBrowserTimeoutMs - 1)\n })\n\n expect(onExpire).not.toHaveBeenCalled()\n\n act(() => {\n vi.advanceTimersByTime(1)\n })\n\n expect(onExpire).toHaveBeenCalledOnce()\n expect(onExpire).toHaveBeenCalledWith(expirationMs)\n })\n\n it('should schedule expiration when the token expires exactly now', () => {\n const onActivityRefresh = vi.fn()\n const onExpire = vi.fn()\n const onReminder = vi.fn()\n const timers = renderAuthSessionTimers({\n isAuthenticated: false,\n onActivityRefresh,\n onExpire,\n onReminder,\n })\n const expirationMs = Date.now()\n\n timers.setExpiration(expirationMs)\n\n expect(onExpire).not.toHaveBeenCalled()\n\n act(() => {\n vi.advanceTimersByTime(0)\n })\n\n expect(onExpire).toHaveBeenCalledOnce()\n expect(onExpire).toHaveBeenCalledWith(expirationMs)\n expect(onActivityRefresh).not.toHaveBeenCalled()\n expect(onReminder).not.toHaveBeenCalled()\n })\n\n it('should schedule expiration when the token is already past', () => {\n const onActivityRefresh = vi.fn()\n const onExpire = vi.fn()\n const onReminder = vi.fn()\n const timers = renderAuthSessionTimers({\n isAuthenticated: false,\n onActivityRefresh,\n onExpire,\n onReminder,\n })\n const expirationMs = Date.now() - 1\n\n timers.setExpiration(expirationMs)\n\n act(() => {\n vi.advanceTimersByTime(0)\n })\n\n expect(onExpire).toHaveBeenCalledOnce()\n expect(onExpire).toHaveBeenCalledWith(expirationMs)\n expect(onActivityRefresh).not.toHaveBeenCalled()\n expect(onReminder).not.toHaveBeenCalled()\n })\n\n it('should reject a non-finite expiration without activating the session', () => {\n const onActivityRefresh = vi.fn()\n const onExpire = vi.fn()\n const timers = renderAuthSessionTimers({\n isAuthenticated: false,\n onActivityRefresh,\n onExpire,\n })\n\n timers.setExpiration(Number.NaN)\n timers.scheduleRefresh(true)\n act(() => {\n vi.advanceTimersByTime(1_000)\n })\n\n expect(timers.getCurrentExpirationMs()).toBeUndefined()\n expect(onActivityRefresh).not.toHaveBeenCalled()\n expect(onExpire).not.toHaveBeenCalled()\n })\n\n it('should synchronously activate on apply and deactivate on clear', () => {\n const onActivityRefresh = vi.fn()\n const timers = renderAuthSessionTimers({ isAuthenticated: false, onActivityRefresh })\n\n timers.clear()\n timers.setExpiration(Date.now() + 300_000)\n timers.scheduleRefresh(true)\n act(() => {\n vi.advanceTimersByTime(1_000)\n })\n\n expect(onActivityRefresh).toHaveBeenCalledOnce()\n\n timers.clear()\n timers.scheduleRefresh(true)\n act(() => {\n vi.advanceTimersByTime(1_000)\n })\n\n expect(onActivityRefresh).toHaveBeenCalledOnce()\n })\n\n it('should reset tracked activity when replacing the expiration', () => {\n const onActivity = vi.fn()\n const onActivityRefresh = vi.fn()\n const timers = renderAuthSessionTimers({ onActivity, onActivityRefresh })\n const expirationMs = Date.now() + 300_000\n\n timers.setExpiration(expirationMs)\n act(() => {\n vi.advanceTimersByTime(60_000)\n })\n expect(timers.recordActivity('route')).toBe(true)\n expect(onActivity).toHaveBeenCalledOnce()\n\n timers.setExpiration(expirationMs)\n\n expect(timers.recordActivity('route')).toBe(true)\n expect(onActivity).toHaveBeenCalledTimes(2)\n\n act(() => {\n vi.advanceTimersByTime(120_000)\n vi.advanceTimersByTime(1_000)\n })\n\n expect(onActivityRefresh).toHaveBeenCalledOnce()\n })\n\n it('should keep its controller and activity throttle across rerenders', () => {\n const onActivityRefresh = vi.fn()\n const timers = renderAuthSessionTimers({ onActivityRefresh })\n const initialController = timers.getController()\n\n timers.setExpiration(Date.now() + 300_000)\n act(() => {\n vi.advanceTimersByTime(238_000)\n window.dispatchEvent(new MouseEvent('mousemove'))\n })\n timers.rerender()\n\n expect(timers.getController()).toBe(initialController)\n\n act(() => {\n vi.advanceTimersByTime(1)\n window.dispatchEvent(new MouseEvent('mousemove'))\n vi.advanceTimersByTime(999)\n })\n\n expect(onActivityRefresh).toHaveBeenCalledTimes(1)\n })\n\n it('should synchronously replace the current expiration', () => {\n const timers = renderAuthSessionTimers()\n const firstExpirationMs = Date.now() + 300_000\n const replacementExpirationMs = Date.now() + 600_000\n\n timers.setExpiration(firstExpirationMs)\n timers.setExpiration(replacementExpirationMs)\n\n expect(timers.getCurrentExpirationMs()).toBe(replacementExpirationMs)\n })\n})\n\nfunction renderAuthSessionTimers({\n isAuthenticated = true,\n onActivity = vi.fn(),\n onActivityRefresh = vi.fn(),\n onExpire = vi.fn(),\n onReminder = vi.fn(),\n}: {\n isAuthenticated?: boolean\n onActivity?: () => void\n onActivityRefresh?: () => void\n onExpire?: (expirationMs: number) => void\n onReminder?: () => void\n} = {}): RenderedAuthSessionTimers {\n let controller: AuthSessionTimers | undefined\n const container = document.createElement('div')\n const root = createRoot(container)\n\n function SessionTimers() {\n controller = useAuthSessionTimers({\n isAuthenticated,\n onActivity,\n onActivityRefresh,\n onExpire,\n onReminder,\n })\n\n return null\n }\n\n act(() => {\n root.render(React.createElement(SessionTimers))\n })\n\n timerCleanups.push(() => {\n act(() => {\n root.unmount()\n })\n })\n\n const getController = (): AuthSessionTimers => {\n if (!controller) {\n throw new Error('Expected auth session timers.')\n }\n\n return controller\n }\n\n return {\n clear: () => getController().clear(),\n getController,\n getCurrentExpirationMs: () => getController().getCurrentExpirationMs(),\n rerender: () => {\n act(() => {\n root.render(React.createElement(SessionTimers))\n })\n },\n recordActivity: (source) => getController().recordActivity(source),\n scheduleRefresh: (forceRefresh) => getController().scheduleRefresh(forceRefresh),\n setExpiration: (expirationMs) => getController().setExpiration(expirationMs),\n }\n}\n\ntype RenderedAuthSessionTimers = AuthSessionTimers & {\n getController: () => AuthSessionTimers\n recordActivity: (source: 'focus' | 'keydown' | 'mousemove' | 'route') => boolean\n rerender: () => void\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
// @vitest-environment happy-dom
|
|
2
|
-
import { act, createElement, useEffect } from 'react';
|
|
3
|
-
import { createRoot } from 'react-dom/client';
|
|
4
|
-
import { afterEach, beforeEach, expect, test, vi } from 'vitest';
|
|
5
|
-
import { RouteTransitionProvider, useRouteTransition } from '../index.js';
|
|
6
|
-
import { ProgressBar } from './index.js';
|
|
7
|
-
let container;
|
|
8
|
-
let root;
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
11
|
-
container = document.createElement('div');
|
|
12
|
-
document.body.appendChild(container);
|
|
13
|
-
root = createRoot(container);
|
|
14
|
-
});
|
|
15
|
-
afterEach(() => {
|
|
16
|
-
act(() => root.unmount());
|
|
17
|
-
container.remove();
|
|
18
|
-
vi.useRealTimers();
|
|
19
|
-
});
|
|
20
|
-
test('does not show progress for transitions that finish before the initial delay', async () => {
|
|
21
|
-
vi.useFakeTimers();
|
|
22
|
-
const FastTransition = () => {
|
|
23
|
-
const {
|
|
24
|
-
holdRouteTransition
|
|
25
|
-
} = useRouteTransition();
|
|
26
|
-
useEffect(() => {
|
|
27
|
-
const releaseRouteTransition = holdRouteTransition();
|
|
28
|
-
const timeout = setTimeout(releaseRouteTransition, 50);
|
|
29
|
-
return () => {
|
|
30
|
-
clearTimeout(timeout);
|
|
31
|
-
releaseRouteTransition();
|
|
32
|
-
};
|
|
33
|
-
}, [holdRouteTransition]);
|
|
34
|
-
return null;
|
|
35
|
-
};
|
|
36
|
-
await act(async () => {
|
|
37
|
-
root.render(createElement(RouteTransitionProvider, null, createElement(ProgressBar), createElement(FastTransition)));
|
|
38
|
-
});
|
|
39
|
-
await act(async () => {
|
|
40
|
-
await vi.advanceTimersByTimeAsync(50);
|
|
41
|
-
});
|
|
42
|
-
expect(container.querySelector('.progress-bar')).toBeNull();
|
|
43
|
-
});
|
|
44
|
-
//# sourceMappingURL=index.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.spec.js","names":["act","createElement","useEffect","createRoot","afterEach","beforeEach","expect","test","vi","RouteTransitionProvider","useRouteTransition","ProgressBar","container","root","globalThis","IS_REACT_ACT_ENVIRONMENT","document","body","appendChild","unmount","remove","useRealTimers","useFakeTimers","FastTransition","holdRouteTransition","releaseRouteTransition","timeout","setTimeout","clearTimeout","render","advanceTimersByTimeAsync","querySelector","toBeNull"],"sources":["../../../../src/providers/RouteTransition/ProgressBar/index.spec.ts"],"sourcesContent":["// @vitest-environment happy-dom\n\nimport { act, createElement, useEffect } from 'react'\nimport { createRoot, type Root } from 'react-dom/client'\nimport { afterEach, beforeEach, expect, test, vi } from 'vitest'\n\nimport { RouteTransitionProvider, useRouteTransition } from '../index.js'\nimport { ProgressBar } from './index.js'\n\nlet container: HTMLDivElement\nlet root: Root\n\nbeforeEach(() => {\n globalThis.IS_REACT_ACT_ENVIRONMENT = true\n container = document.createElement('div')\n document.body.appendChild(container)\n root = createRoot(container)\n})\n\nafterEach(() => {\n act(() => root.unmount())\n container.remove()\n vi.useRealTimers()\n})\n\ntest('does not show progress for transitions that finish before the initial delay', async () => {\n vi.useFakeTimers()\n\n const FastTransition = () => {\n const { holdRouteTransition } = useRouteTransition()\n\n useEffect(() => {\n const releaseRouteTransition = holdRouteTransition()\n const timeout = setTimeout(releaseRouteTransition, 50)\n\n return () => {\n clearTimeout(timeout)\n releaseRouteTransition()\n }\n }, [holdRouteTransition])\n\n return null\n }\n\n await act(async () => {\n root.render(\n createElement(\n RouteTransitionProvider,\n null,\n createElement(ProgressBar),\n createElement(FastTransition),\n ),\n )\n })\n\n await act(async () => {\n await vi.advanceTimersByTimeAsync(50)\n })\n\n expect(container.querySelector('.progress-bar')).toBeNull()\n})\n"],"mappings":"AAAA;AAEA,SAASA,GAAG,EAAEC,aAAa,EAAEC,SAAS,QAAQ;AAC9C,SAASC,UAAU,QAAmB;AACtC,SAASC,SAAS,EAAEC,UAAU,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAQ;AAExD,SAASC,uBAAuB,EAAEC,kBAAkB,QAAQ;AAC5D,SAASC,WAAW,QAAQ;AAE5B,IAAIC,SAAA;AACJ,IAAIC,IAAA;AAEJR,UAAA,CAAW;EACTS,UAAA,CAAWC,wBAAwB,GAAG;EACtCH,SAAA,GAAYI,QAAA,CAASf,aAAa,CAAC;EACnCe,QAAA,CAASC,IAAI,CAACC,WAAW,CAACN,SAAA;EAC1BC,IAAA,GAAOV,UAAA,CAAWS,SAAA;AACpB;AAEAR,SAAA,CAAU;EACRJ,GAAA,CAAI,MAAMa,IAAA,CAAKM,OAAO;EACtBP,SAAA,CAAUQ,MAAM;EAChBZ,EAAA,CAAGa,aAAa;AAClB;AAEAd,IAAA,CAAK,+EAA+E;EAClFC,EAAA,CAAGc,aAAa;EAEhB,MAAMC,cAAA,GAAiBA,CAAA;IACrB,MAAM;MAAEC;IAAmB,CAAE,GAAGd,kBAAA;IAEhCR,SAAA,CAAU;MACR,MAAMuB,sBAAA,GAAyBD,mBAAA;MAC/B,MAAME,OAAA,GAAUC,UAAA,CAAWF,sBAAA,EAAwB;MAEnD,OAAO;QACLG,YAAA,CAAaF,OAAA;QACbD,sBAAA;MACF;IACF,GAAG,CAACD,mBAAA,CAAoB;IAExB,OAAO;EACT;EAEA,MAAMxB,GAAA,CAAI;IACRa,IAAA,CAAKgB,MAAM,CACT5B,aAAA,CACEQ,uBAAA,EACA,MACAR,aAAA,CAAcU,WAAA,GACdV,aAAA,CAAcsB,cAAA;EAGpB;EAEA,MAAMvB,GAAA,CAAI;IACR,MAAMQ,EAAA,CAAGsB,wBAAwB,CAAC;EACpC;EAEAxB,MAAA,CAAOM,SAAA,CAAUmB,aAAa,CAAC,kBAAkBC,QAAQ;AAC3D","ignoreList":[]}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { buildColumnState } from './index.js';
|
|
3
|
-
vi.mock('../../../exports/client/index.js', () => ({
|
|
4
|
-
SortColumn: () => null
|
|
5
|
-
}));
|
|
6
|
-
describe('buildColumnState', () => {
|
|
7
|
-
it('should handle fields with admin components explicitly set to undefined', () => {
|
|
8
|
-
const clientField = {
|
|
9
|
-
name: 'title',
|
|
10
|
-
type: 'text'
|
|
11
|
-
};
|
|
12
|
-
const serverField = {
|
|
13
|
-
name: 'title',
|
|
14
|
-
type: 'text',
|
|
15
|
-
admin: {
|
|
16
|
-
components: undefined
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
const columns = buildColumnState({
|
|
20
|
-
clientFields: [clientField],
|
|
21
|
-
collectionSlug: 'posts',
|
|
22
|
-
customCellProps: {},
|
|
23
|
-
dataType: 'monomorphic',
|
|
24
|
-
docs: [],
|
|
25
|
-
enableRowSelections: false,
|
|
26
|
-
fieldPermissions: true,
|
|
27
|
-
i18n: {
|
|
28
|
-
t: vi.fn()
|
|
29
|
-
},
|
|
30
|
-
payload: {
|
|
31
|
-
importMap: {}
|
|
32
|
-
},
|
|
33
|
-
serverFields: [serverField],
|
|
34
|
-
useAsTitle: 'title'
|
|
35
|
-
});
|
|
36
|
-
expect(columns).toHaveLength(1);
|
|
37
|
-
expect(columns[0].CustomLabel).toBeUndefined();
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
//# sourceMappingURL=index.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.spec.js","names":["describe","expect","it","vi","buildColumnState","mock","SortColumn","clientField","name","type","serverField","admin","components","undefined","columns","clientFields","collectionSlug","customCellProps","dataType","docs","enableRowSelections","fieldPermissions","i18n","t","fn","payload","importMap","serverFields","useAsTitle","toHaveLength","CustomLabel","toBeUndefined"],"sources":["../../../../src/providers/TableColumns/buildColumnState/index.spec.ts"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type { ClientField, Field, Payload } from 'payload'\n\nimport { describe, expect, it, vi } from 'vitest'\n\nimport { buildColumnState } from './index.js'\n\nvi.mock('../../../exports/client/index.js', () => ({\n SortColumn: () => null,\n}))\n\ndescribe('buildColumnState', () => {\n it('should handle fields with admin components explicitly set to undefined', () => {\n const clientField: ClientField = {\n name: 'title',\n type: 'text',\n }\n const serverField: Field = {\n name: 'title',\n type: 'text',\n admin: {\n components: undefined,\n },\n }\n\n const columns = buildColumnState({\n clientFields: [clientField],\n collectionSlug: 'posts',\n customCellProps: {},\n dataType: 'monomorphic',\n docs: [],\n enableRowSelections: false,\n fieldPermissions: true,\n i18n: {\n t: vi.fn(),\n } as unknown as I18nClient,\n payload: {\n importMap: {},\n } as unknown as Payload,\n serverFields: [serverField],\n useAsTitle: 'title',\n })\n\n expect(columns).toHaveLength(1)\n expect(columns[0].CustomLabel).toBeUndefined()\n })\n})\n"],"mappings":"AAGA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ;AAEzC,SAASC,gBAAgB,QAAQ;AAEjCD,EAAA,CAAGE,IAAI,CAAC,oCAAoC,OAAO;EACjDC,UAAA,EAAYA,CAAA,KAAM;AACpB;AAEAN,QAAA,CAAS,oBAAoB;EAC3BE,EAAA,CAAG,0EAA0E;IAC3E,MAAMK,WAAA,GAA2B;MAC/BC,IAAA,EAAM;MACNC,IAAA,EAAM;IACR;IACA,MAAMC,WAAA,GAAqB;MACzBF,IAAA,EAAM;MACNC,IAAA,EAAM;MACNE,KAAA,EAAO;QACLC,UAAA,EAAYC;MACd;IACF;IAEA,MAAMC,OAAA,GAAUV,gBAAA,CAAiB;MAC/BW,YAAA,EAAc,CAACR,WAAA,CAAY;MAC3BS,cAAA,EAAgB;MAChBC,eAAA,EAAiB,CAAC;MAClBC,QAAA,EAAU;MACVC,IAAA,EAAM,EAAE;MACRC,mBAAA,EAAqB;MACrBC,gBAAA,EAAkB;MAClBC,IAAA,EAAM;QACJC,CAAA,EAAGpB,EAAA,CAAGqB,EAAE;MACV;MACAC,OAAA,EAAS;QACPC,SAAA,EAAW,CAAC;MACd;MACAC,YAAA,EAAc,CAACjB,WAAA,CAAY;MAC3BkB,UAAA,EAAY;IACd;IAEA3B,MAAA,CAAOa,OAAA,EAASe,YAAY,CAAC;IAC7B5B,MAAA,CAAOa,OAAO,CAAC,EAAE,CAACgB,WAAW,EAAEC,aAAa;EAC9C;AACF","ignoreList":[]}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { appendCacheTag } from './appendCacheTag.js';
|
|
3
|
-
describe('appendCacheTag', () => {
|
|
4
|
-
it('should return the url unchanged when cacheTag is undefined', () => {
|
|
5
|
-
expect(appendCacheTag('https://example.com/image.jpg', undefined)).toBe('https://example.com/image.jpg');
|
|
6
|
-
});
|
|
7
|
-
it('should return the url unchanged when cacheTag is false', () => {
|
|
8
|
-
expect(appendCacheTag('https://example.com/image.jpg', false)).toBe('https://example.com/image.jpg');
|
|
9
|
-
});
|
|
10
|
-
it('should return the url unchanged when cacheTag is empty string', () => {
|
|
11
|
-
expect(appendCacheTag('https://example.com/image.jpg', '')).toBe('https://example.com/image.jpg');
|
|
12
|
-
});
|
|
13
|
-
it('should append the cache tag with ? when the url has no query string', () => {
|
|
14
|
-
const result = appendCacheTag('https://example.com/image.jpg', '2024-01-01T00:00:00.000Z');
|
|
15
|
-
expect(result).toBe('https://example.com/image.jpg?2024-01-01T00%3A00%3A00.000Z');
|
|
16
|
-
});
|
|
17
|
-
it('should append the cache tag with & when the url already has a query string', () => {
|
|
18
|
-
const result = appendCacheTag('https://example.com/image.jpg?w=800&q=75', '2024-01-01T00:00:00.000Z');
|
|
19
|
-
expect(result).toBe('https://example.com/image.jpg?w=800&q=75&2024-01-01T00%3A00%3A00.000Z');
|
|
20
|
-
});
|
|
21
|
-
it('should URI-encode the cache tag value', () => {
|
|
22
|
-
const result = appendCacheTag('/image.jpg', '2024-06-15T12:30:00.000Z');
|
|
23
|
-
expect(result).toBe('/image.jpg?2024-06-15T12%3A30%3A00.000Z');
|
|
24
|
-
});
|
|
25
|
-
it('should work with relative urls', () => {
|
|
26
|
-
const result = appendCacheTag('/uploads/photo.png', '2024-01-01T00:00:00.000Z');
|
|
27
|
-
expect(result).toBe('/uploads/photo.png?2024-01-01T00%3A00%3A00.000Z');
|
|
28
|
-
});
|
|
29
|
-
it('should work with relative urls that already have a query string', () => {
|
|
30
|
-
const result = appendCacheTag('/uploads/photo.png?size=large', '2024-01-01T00:00:00.000Z');
|
|
31
|
-
expect(result).toBe('/uploads/photo.png?size=large&2024-01-01T00%3A00%3A00.000Z');
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
//# sourceMappingURL=appendCacheTag.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"appendCacheTag.spec.js","names":["describe","expect","it","appendCacheTag","undefined","toBe","result"],"sources":["../../src/utilities/appendCacheTag.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { appendCacheTag } from './appendCacheTag.js'\n\ndescribe('appendCacheTag', () => {\n it('should return the url unchanged when cacheTag is undefined', () => {\n expect(appendCacheTag('https://example.com/image.jpg', undefined)).toBe(\n 'https://example.com/image.jpg',\n )\n })\n\n it('should return the url unchanged when cacheTag is false', () => {\n expect(appendCacheTag('https://example.com/image.jpg', false)).toBe(\n 'https://example.com/image.jpg',\n )\n })\n\n it('should return the url unchanged when cacheTag is empty string', () => {\n expect(appendCacheTag('https://example.com/image.jpg', '')).toBe(\n 'https://example.com/image.jpg',\n )\n })\n\n it('should append the cache tag with ? when the url has no query string', () => {\n const result = appendCacheTag('https://example.com/image.jpg', '2024-01-01T00:00:00.000Z')\n expect(result).toBe('https://example.com/image.jpg?2024-01-01T00%3A00%3A00.000Z')\n })\n\n it('should append the cache tag with & when the url already has a query string', () => {\n const result = appendCacheTag(\n 'https://example.com/image.jpg?w=800&q=75',\n '2024-01-01T00:00:00.000Z',\n )\n expect(result).toBe('https://example.com/image.jpg?w=800&q=75&2024-01-01T00%3A00%3A00.000Z')\n })\n\n it('should URI-encode the cache tag value', () => {\n const result = appendCacheTag('/image.jpg', '2024-06-15T12:30:00.000Z')\n expect(result).toBe('/image.jpg?2024-06-15T12%3A30%3A00.000Z')\n })\n\n it('should work with relative urls', () => {\n const result = appendCacheTag('/uploads/photo.png', '2024-01-01T00:00:00.000Z')\n expect(result).toBe('/uploads/photo.png?2024-01-01T00%3A00%3A00.000Z')\n })\n\n it('should work with relative urls that already have a query string', () => {\n const result = appendCacheTag('/uploads/photo.png?size=large', '2024-01-01T00:00:00.000Z')\n expect(result).toBe('/uploads/photo.png?size=large&2024-01-01T00%3A00%3A00.000Z')\n })\n})\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ;AAErC,SAASC,cAAc,QAAQ;AAE/BH,QAAA,CAAS,kBAAkB;EACzBE,EAAA,CAAG,8DAA8D;IAC/DD,MAAA,CAAOE,cAAA,CAAe,iCAAiCC,SAAA,GAAYC,IAAI,CACrE;EAEJ;EAEAH,EAAA,CAAG,0DAA0D;IAC3DD,MAAA,CAAOE,cAAA,CAAe,iCAAiC,QAAQE,IAAI,CACjE;EAEJ;EAEAH,EAAA,CAAG,iEAAiE;IAClED,MAAA,CAAOE,cAAA,CAAe,iCAAiC,KAAKE,IAAI,CAC9D;EAEJ;EAEAH,EAAA,CAAG,uEAAuE;IACxE,MAAMI,MAAA,GAASH,cAAA,CAAe,iCAAiC;IAC/DF,MAAA,CAAOK,MAAA,EAAQD,IAAI,CAAC;EACtB;EAEAH,EAAA,CAAG,8EAA8E;IAC/E,MAAMI,MAAA,GAASH,cAAA,CACb,4CACA;IAEFF,MAAA,CAAOK,MAAA,EAAQD,IAAI,CAAC;EACtB;EAEAH,EAAA,CAAG,yCAAyC;IAC1C,MAAMI,MAAA,GAASH,cAAA,CAAe,cAAc;IAC5CF,MAAA,CAAOK,MAAA,EAAQD,IAAI,CAAC;EACtB;EAEAH,EAAA,CAAG,kCAAkC;IACnC,MAAMI,MAAA,GAASH,cAAA,CAAe,sBAAsB;IACpDF,MAAA,CAAOK,MAAA,EAAQD,IAAI,CAAC;EACtB;EAEAH,EAAA,CAAG,mEAAmE;IACpE,MAAMI,MAAA,GAASH,cAAA,CAAe,iCAAiC;IAC/DF,MAAA,CAAOK,MAAA,EAAQD,IAAI,CAAC;EACtB;AACF","ignoreList":[]}
|