@payloadcms/ui 4.0.0-canary.35 → 4.0.0-canary.36

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.
Files changed (180) hide show
  1. package/dist/css/app.css +1 -0
  2. package/dist/css/preflight.css +1 -0
  3. package/dist/css/spacing.css +3 -0
  4. package/dist/elements/AppHeader/index.css +3 -0
  5. package/dist/elements/BulkUpload/ActionsBar/index.css +1 -0
  6. package/dist/elements/BulkUpload/AddingFilesView/index.css +2 -4
  7. package/dist/elements/BulkUpload/FileSidebar/index.css +1 -0
  8. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  9. package/dist/elements/BulkUpload/FormsManager/index.js +12 -7
  10. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  11. package/dist/elements/BulkUpload/index.css +2 -0
  12. package/dist/elements/Collapsible/index.css +1 -0
  13. package/dist/elements/DatePicker/index.css +2 -0
  14. package/dist/elements/Dialog/index.css +1 -0
  15. package/dist/elements/DocumentControls/index.css +1 -0
  16. package/dist/elements/DocumentFields/index.css +2 -0
  17. package/dist/elements/DocumentHeader/Tabs/index.css +1 -0
  18. package/dist/elements/DocumentHeader/index.css +1 -0
  19. package/dist/elements/EditUpload/index.css +1 -1
  20. package/dist/elements/FieldDiffContainer/index.css +1 -0
  21. package/dist/elements/FieldDiffLabel/index.css +1 -0
  22. package/dist/elements/FileDetails/StaticFileDetails/index.css +2 -0
  23. package/dist/elements/HTMLDiff/index.css +1 -0
  24. package/dist/elements/ItemsDrawer/index.css +3 -0
  25. package/dist/elements/ListControls/index.css +1 -0
  26. package/dist/elements/ListControls/index.d.ts.map +1 -1
  27. package/dist/elements/ListControls/index.js +7 -1
  28. package/dist/elements/ListControls/index.js.map +1 -1
  29. package/dist/elements/ListControls/types.d.ts +3 -1
  30. package/dist/elements/ListControls/types.d.ts.map +1 -1
  31. package/dist/elements/ListControls/types.js.map +1 -1
  32. package/dist/elements/ListControlsBar/index.css +1 -0
  33. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +1 -1
  34. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  35. package/dist/elements/LivePreview/Window/index.css +1 -0
  36. package/dist/elements/Nav/index.css +2 -0
  37. package/dist/elements/PageControls/index.css +1 -0
  38. package/dist/elements/PillSelector/index.css +1 -0
  39. package/dist/elements/PreviewSizes/index.css +2 -0
  40. package/dist/elements/PublishButton/index.css +1 -0
  41. package/dist/elements/QueryPresets/fields/Heading/index.css +1 -0
  42. package/dist/elements/RenderTitle/index.css +1 -0
  43. package/dist/elements/Table/index.css +1 -0
  44. package/dist/elements/TableSection/index.css +1 -0
  45. package/dist/elements/Tabs/index.css +1 -0
  46. package/dist/elements/Thumbnail/index.css +1 -0
  47. package/dist/elements/TimezonePicker/index.css +1 -0
  48. package/dist/elements/Tooltip/index.css +7 -0
  49. package/dist/elements/WhereBuilder/Condition/index.css +1 -0
  50. package/dist/elements/WhereBuilder/index.css +2 -0
  51. package/dist/fields/Array/index.css +1 -0
  52. package/dist/fields/Blocks/index.css +1 -0
  53. package/dist/fields/Group/index.css +1 -0
  54. package/dist/fields/Row/index.css +2 -0
  55. package/dist/fields/Tabs/index.css +1 -0
  56. package/dist/forms/RenderFields/index.css +1 -0
  57. package/dist/hooks/useControllableState.js +3 -3
  58. package/dist/hooks/useControllableState.js.map +1 -1
  59. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  60. package/dist/providers/DocumentInfo/index.js +30 -19
  61. package/dist/providers/DocumentInfo/index.js.map +1 -1
  62. package/dist/providers/Locale/index.d.ts.map +1 -1
  63. package/dist/providers/Locale/index.js +6 -7
  64. package/dist/providers/Locale/index.js.map +1 -1
  65. package/dist/styles.css +5 -1
  66. package/dist/templates/Default/Wrapper/index.css +2 -0
  67. package/dist/templates/Default/index.css +1 -0
  68. package/dist/utilities/handleAuthRedirect.d.ts.map +1 -1
  69. package/dist/utilities/handleAuthRedirect.js +4 -1
  70. package/dist/utilities/handleAuthRedirect.js.map +1 -1
  71. package/dist/utilities/isPathMatchingRoute.d.ts.map +1 -1
  72. package/dist/utilities/isPathMatchingRoute.js +7 -5
  73. package/dist/utilities/isPathMatchingRoute.js.map +1 -1
  74. package/dist/views/API/index.css +1 -0
  75. package/dist/views/Dashboard/Default/ModularDashboard/index.css +2 -0
  76. package/dist/views/Edit/index.css +1 -0
  77. package/dist/views/HierarchyList/HierarchyTable/SlotTable.css +1 -0
  78. package/dist/views/HierarchyList/index.css +1 -0
  79. package/dist/views/List/ListHeader/index.css +1 -0
  80. package/dist/views/List/ListHeader/index.d.ts +0 -1
  81. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  82. package/dist/views/List/ListHeader/index.js +2 -6
  83. package/dist/views/List/ListHeader/index.js.map +1 -1
  84. package/dist/views/List/index.client.d.ts.map +1 -1
  85. package/dist/views/List/index.client.js +3 -2
  86. package/dist/views/List/index.client.js.map +1 -1
  87. package/dist/views/List/index.css +2 -0
  88. package/dist/views/Root/index.d.ts.map +1 -1
  89. package/dist/views/Root/index.js +26 -19
  90. package/dist/views/Root/index.js.map +1 -1
  91. package/dist/views/Version/Default/index.css +2 -0
  92. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.css +8 -0
  93. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.css +1 -0
  94. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.css +1 -0
  95. package/dist/views/Version/RenderFieldsToDiff/index.css +2 -0
  96. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  97. package/dist/views/Version/Restore/index.js +9 -6
  98. package/dist/views/Version/Restore/index.js.map +1 -1
  99. package/dist/views/Versions/VersionPillLabel/index.css +1 -0
  100. package/dist/views/Versions/index.css +1 -0
  101. package/dist/widgets/CollectionCards/index.css +4 -0
  102. package/package.json +5 -5
  103. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js +0 -120
  104. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js.map +0 -1
  105. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js +0 -144
  106. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js.map +0 -1
  107. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +0 -885
  108. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +0 -1
  109. package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js +0 -87
  110. package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js.map +0 -1
  111. package/dist/elements/CommandPalette/buildActions.spec.js +0 -158
  112. package/dist/elements/CommandPalette/buildActions.spec.js.map +0 -1
  113. package/dist/elements/CommandPalette/highlightLabel.spec.js +0 -78
  114. package/dist/elements/CommandPalette/highlightLabel.spec.js.map +0 -1
  115. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +0 -143
  116. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +0 -1
  117. package/dist/elements/Toasts/fieldErrors.spec.js +0 -46
  118. package/dist/elements/Toasts/fieldErrors.spec.js.map +0 -1
  119. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.spec.js +0 -152
  120. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.spec.js.map +0 -1
  121. package/dist/elements/WhereBuilder/conditionValue.spec.js +0 -65
  122. package/dist/elements/WhereBuilder/conditionValue.spec.js.map +0 -1
  123. package/dist/fields/Upload/Input.spec.js +0 -242
  124. package/dist/fields/Upload/Input.spec.js.map +0 -1
  125. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.d.ts +0 -2
  126. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.d.ts.map +0 -1
  127. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js +0 -67
  128. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js.map +0 -1
  129. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js +0 -150
  130. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js.map +0 -1
  131. package/dist/layouts/Root/index.spec.js +0 -20
  132. package/dist/layouts/Root/index.spec.js.map +0 -1
  133. package/dist/providers/Auth/authSessionRequests.spec.js +0 -121
  134. package/dist/providers/Auth/authSessionRequests.spec.js.map +0 -1
  135. package/dist/providers/Auth/sessionActivity.spec.js +0 -44
  136. package/dist/providers/Auth/sessionActivity.spec.js.map +0 -1
  137. package/dist/providers/Auth/tabSessionSync/index.spec.js +0 -463
  138. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +0 -1
  139. package/dist/providers/Auth/useAuthSessionTimers.spec.js +0 -311
  140. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +0 -1
  141. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +0 -44
  142. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +0 -1
  143. package/dist/providers/TableColumns/buildColumnState/index.spec.js +0 -40
  144. package/dist/providers/TableColumns/buildColumnState/index.spec.js.map +0 -1
  145. package/dist/utilities/appendCacheTag.spec.js +0 -34
  146. package/dist/utilities/appendCacheTag.spec.js.map +0 -1
  147. package/dist/utilities/formatAbsoluteURL.spec.js +0 -27
  148. package/dist/utilities/formatAbsoluteURL.spec.js.map +0 -1
  149. package/dist/utilities/formatMetadata.spec.js +0 -83
  150. package/dist/utilities/formatMetadata.spec.js.map +0 -1
  151. package/dist/utilities/fuzzyMatch.spec.js +0 -38
  152. package/dist/utilities/fuzzyMatch.spec.js.map +0 -1
  153. package/dist/utilities/initReq.spec.js +0 -226
  154. package/dist/utilities/initReq.spec.js.map +0 -1
  155. package/dist/utilities/isAbsoluteURL.spec.js +0 -11
  156. package/dist/utilities/isAbsoluteURL.spec.js.map +0 -1
  157. package/dist/utilities/isCustomAdminView.spec.js +0 -90
  158. package/dist/utilities/isCustomAdminView.spec.js.map +0 -1
  159. package/dist/utilities/isHttpURL.spec.js +0 -25
  160. package/dist/utilities/isHttpURL.spec.js.map +0 -1
  161. package/dist/utilities/isPathMatchingRoute.spec.js +0 -178
  162. package/dist/utilities/isPathMatchingRoute.spec.js.map +0 -1
  163. package/dist/utilities/isPublicAdminRoute.spec.js +0 -34
  164. package/dist/utilities/isPublicAdminRoute.spec.js.map +0 -1
  165. package/dist/utilities/normalizeRelationshipValue.spec.js +0 -373
  166. package/dist/utilities/normalizeRelationshipValue.spec.js.map +0 -1
  167. package/dist/utilities/recentlyViewed.spec.js +0 -92
  168. package/dist/utilities/recentlyViewed.spec.js.map +0 -1
  169. package/dist/views/Root/getCustomCollectionViewByRoute.spec.js +0 -168
  170. package/dist/views/Root/getCustomCollectionViewByRoute.spec.js.map +0 -1
  171. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js +0 -258
  172. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js.map +0 -1
  173. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +0 -915
  174. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +0 -1
  175. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +0 -47
  176. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +0 -1
  177. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +0 -125
  178. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +0 -1
  179. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js +0 -100
  180. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js.map +0 -1
@@ -1,150 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { _internal_renderFieldHandler } from './renderFieldServerFn.js';
3
- const mocks = vi.hoisted(() => ({
4
- getClientConfig: vi.fn(),
5
- getClientSchemaMap: vi.fn(),
6
- getSchemaMap: vi.fn(),
7
- renderField: vi.fn()
8
- }));
9
- vi.mock('../../../utilities/getClientConfig.js', () => ({
10
- getClientConfig: mocks.getClientConfig
11
- }));
12
- vi.mock('../../../utilities/getClientSchemaMap.js', () => ({
13
- getClientSchemaMap: mocks.getClientSchemaMap
14
- }));
15
- vi.mock('../../../utilities/getSchemaMap.js', () => ({
16
- getSchemaMap: mocks.getSchemaMap
17
- }));
18
- vi.mock('../renderField.js', () => ({
19
- renderField: mocks.renderField
20
- }));
21
- const args = {
22
- req: {
23
- user: {
24
- collection: 'users'
25
- },
26
- payload: {
27
- config: {},
28
- importMap: {}
29
- }
30
- },
31
- schemaPath: 'collection.posts.content'
32
- };
33
- describe('renderFieldServerFn', () => {
34
- beforeEach(() => {
35
- vi.resetAllMocks();
36
- });
37
- it('should reject disallowed field props', async () => {
38
- const targetField = {
39
- name: 'content',
40
- type: 'richText',
41
- admin: {
42
- components: {
43
- Field: {
44
- path: './ConfiguredField',
45
- exportName: 'Field',
46
- serverProps: {
47
- heading: 'Configured heading'
48
- }
49
- }
50
- },
51
- hidden: true
52
- }
53
- };
54
- mocks.getSchemaMap.mockReturnValue(new Map([['posts.content', targetField]]));
55
- const request = {
56
- ...args,
57
- field: {
58
- admin: {
59
- components: {
60
- Field: {
61
- path: './OtherField',
62
- exportName: 'Field',
63
- serverProps: {
64
- heading: 'Other heading',
65
- appearance: 'compact'
66
- }
67
- }
68
- }
69
- }
70
- },
71
- initialValue: 'Initial text'
72
- };
73
- await _internal_renderFieldHandler(request);
74
- expect(mocks.renderField).toHaveBeenCalledWith(expect.objectContaining({
75
- data: {
76
- content: 'Initial text'
77
- },
78
- fieldConfig: {
79
- ...targetField,
80
- admin: {
81
- components: {
82
- Field: {
83
- path: './ConfiguredField',
84
- exportName: 'Field',
85
- serverProps: {
86
- heading: 'Configured heading'
87
- }
88
- }
89
- },
90
- hidden: true
91
- }
92
- },
93
- forceCreateClientField: false,
94
- path: 'content',
95
- schemaPath: 'posts.content'
96
- }));
97
- expect(targetField).toEqual({
98
- name: 'content',
99
- type: 'richText',
100
- admin: {
101
- components: {
102
- Field: {
103
- path: './ConfiguredField',
104
- exportName: 'Field',
105
- serverProps: {
106
- heading: 'Configured heading'
107
- }
108
- }
109
- },
110
- hidden: true
111
- }
112
- });
113
- });
114
- it('should accept allowed field props', async () => {
115
- const targetField = {
116
- name: 'content',
117
- type: 'richText',
118
- admin: {
119
- hidden: true
120
- }
121
- };
122
- mocks.getSchemaMap.mockReturnValue(new Map([['posts.content', targetField]]));
123
- await _internal_renderFieldHandler({
124
- ...args,
125
- name: 'editor',
126
- label: false,
127
- hidden: false
128
- });
129
- expect(mocks.renderField).toHaveBeenCalledWith(expect.objectContaining({
130
- fieldConfig: {
131
- name: 'editor',
132
- label: false,
133
- admin: {
134
- hidden: false
135
- },
136
- type: 'richText'
137
- },
138
- forceCreateClientField: true,
139
- path: 'editor'
140
- }));
141
- expect(targetField).toEqual({
142
- name: 'content',
143
- type: 'richText',
144
- admin: {
145
- hidden: true
146
- }
147
- });
148
- });
149
- });
150
- //# sourceMappingURL=renderFieldServerFn.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderFieldServerFn.spec.js","names":["beforeEach","describe","expect","it","vi","_internal_renderFieldHandler","mocks","hoisted","getClientConfig","fn","getClientSchemaMap","getSchemaMap","renderField","mock","args","req","user","collection","payload","config","importMap","schemaPath","resetAllMocks","targetField","name","type","admin","components","Field","path","exportName","serverProps","heading","hidden","mockReturnValue","Map","request","field","appearance","initialValue","toHaveBeenCalledWith","objectContaining","data","content","fieldConfig","forceCreateClientField","toEqual","label"],"sources":["../../../../src/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.ts"],"sourcesContent":["import { beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport { _internal_renderFieldHandler } from './renderFieldServerFn.js'\n\nconst mocks = vi.hoisted(() => ({\n getClientConfig: vi.fn(),\n getClientSchemaMap: vi.fn(),\n getSchemaMap: vi.fn(),\n renderField: vi.fn(),\n}))\n\nvi.mock('../../../utilities/getClientConfig.js', () => ({\n getClientConfig: mocks.getClientConfig,\n}))\nvi.mock('../../../utilities/getClientSchemaMap.js', () => ({\n getClientSchemaMap: mocks.getClientSchemaMap,\n}))\nvi.mock('../../../utilities/getSchemaMap.js', () => ({ getSchemaMap: mocks.getSchemaMap }))\nvi.mock('../renderField.js', () => ({ renderField: mocks.renderField }))\n\ntype HandlerArgs = Parameters<typeof _internal_renderFieldHandler>[0]\n\nconst args = {\n req: { user: { collection: 'users' }, payload: { config: {}, importMap: {} } },\n schemaPath: 'collection.posts.content',\n} as HandlerArgs\n\ndescribe('renderFieldServerFn', () => {\n beforeEach(() => {\n vi.resetAllMocks()\n })\n\n it('should reject disallowed field props', async () => {\n const targetField = {\n name: 'content',\n type: 'richText',\n admin: {\n components: {\n Field: {\n path: './ConfiguredField',\n exportName: 'Field',\n serverProps: { heading: 'Configured heading' },\n },\n },\n hidden: true,\n },\n }\n\n mocks.getSchemaMap.mockReturnValue(new Map([['posts.content', targetField]]))\n\n const request = {\n ...args,\n field: {\n admin: {\n components: {\n Field: {\n path: './OtherField',\n exportName: 'Field',\n serverProps: { heading: 'Other heading', appearance: 'compact' },\n },\n },\n },\n },\n initialValue: 'Initial text',\n }\n\n await _internal_renderFieldHandler(request)\n\n expect(mocks.renderField).toHaveBeenCalledWith(\n expect.objectContaining({\n data: { content: 'Initial text' },\n fieldConfig: {\n ...targetField,\n admin: {\n components: {\n Field: {\n path: './ConfiguredField',\n exportName: 'Field',\n serverProps: { heading: 'Configured heading' },\n },\n },\n hidden: true,\n },\n },\n forceCreateClientField: false,\n path: 'content',\n schemaPath: 'posts.content',\n }),\n )\n expect(targetField).toEqual({\n name: 'content',\n type: 'richText',\n admin: {\n components: {\n Field: {\n path: './ConfiguredField',\n exportName: 'Field',\n serverProps: { heading: 'Configured heading' },\n },\n },\n hidden: true,\n },\n })\n })\n\n it('should accept allowed field props', async () => {\n const targetField = { name: 'content', type: 'richText', admin: { hidden: true } }\n\n mocks.getSchemaMap.mockReturnValue(new Map([['posts.content', targetField]]))\n\n await _internal_renderFieldHandler({\n ...args,\n name: 'editor',\n label: false,\n hidden: false,\n })\n\n expect(mocks.renderField).toHaveBeenCalledWith(\n expect.objectContaining({\n fieldConfig: {\n name: 'editor',\n label: false,\n admin: { hidden: false },\n type: 'richText',\n },\n forceCreateClientField: true,\n path: 'editor',\n }),\n )\n expect(targetField).toEqual({ name: 'content', type: 'richText', admin: { hidden: true } })\n })\n})\n"],"mappings":"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","ignoreList":[]}
@@ -1,20 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { getViewportMeta, isIPhoneUserAgent } from './viewport.js';
3
- describe('RootLayout', () => {
4
- it('should apply the focus zoom viewport workaround to iPhone user agents only', () => {
5
- const iPhoneUserAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1';
6
- const androidUserAgent = 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36';
7
- expect(isIPhoneUserAgent(iPhoneUserAgent)).toBe(true);
8
- expect(isIPhoneUserAgent(androidUserAgent)).toBe(false);
9
- expect(isIPhoneUserAgent(undefined)).toBe(false);
10
- expect(getViewportMeta(iPhoneUserAgent).props).toEqual({
11
- content: 'width=device-width, initial-scale=1, maximum-scale=1',
12
- name: 'viewport'
13
- });
14
- expect(getViewportMeta(androidUserAgent).props).toEqual({
15
- content: 'width=device-width, initial-scale=1',
16
- name: 'viewport'
17
- });
18
- });
19
- });
20
- //# sourceMappingURL=index.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.spec.js","names":["describe","expect","it","getViewportMeta","isIPhoneUserAgent","iPhoneUserAgent","androidUserAgent","toBe","undefined","props","toEqual","content","name"],"sources":["../../../src/layouts/Root/index.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { getViewportMeta, isIPhoneUserAgent } from './viewport.js'\n\ndescribe('RootLayout', () => {\n it('should apply the focus zoom viewport workaround to iPhone user agents only', () => {\n const iPhoneUserAgent =\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1'\n const androidUserAgent =\n 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36'\n\n expect(isIPhoneUserAgent(iPhoneUserAgent)).toBe(true)\n expect(isIPhoneUserAgent(androidUserAgent)).toBe(false)\n expect(isIPhoneUserAgent(undefined)).toBe(false)\n expect(getViewportMeta(iPhoneUserAgent).props).toEqual({\n content: 'width=device-width, initial-scale=1, maximum-scale=1',\n name: 'viewport',\n })\n expect(getViewportMeta(androidUserAgent).props).toEqual({\n content: 'width=device-width, initial-scale=1',\n name: 'viewport',\n })\n })\n})\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ;AAErC,SAASC,eAAe,EAAEC,iBAAiB,QAAQ;AAEnDJ,QAAA,CAAS,cAAc;EACrBE,EAAA,CAAG,8EAA8E;IAC/E,MAAMG,eAAA,GACJ;IACF,MAAMC,gBAAA,GACJ;IAEFL,MAAA,CAAOG,iBAAA,CAAkBC,eAAA,GAAkBE,IAAI,CAAC;IAChDN,MAAA,CAAOG,iBAAA,CAAkBE,gBAAA,GAAmBC,IAAI,CAAC;IACjDN,MAAA,CAAOG,iBAAA,CAAkBI,SAAA,GAAYD,IAAI,CAAC;IAC1CN,MAAA,CAAOE,eAAA,CAAgBE,eAAA,EAAiBI,KAAK,EAAEC,OAAO,CAAC;MACrDC,OAAA,EAAS;MACTC,IAAA,EAAM;IACR;IACAX,MAAA,CAAOE,eAAA,CAAgBG,gBAAA,EAAkBG,KAAK,EAAEC,OAAO,CAAC;MACtDC,OAAA,EAAS;MACTC,IAAA,EAAM;IACR;EACF;AACF","ignoreList":[]}
@@ -1,121 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { createAuthSessionRequests } from './authSessionRequests.js';
3
- describe('createAuthSessionRequests', () => {
4
- it('should serialize auth requests in queue order', async () => {
5
- const authRequests = createAuthSessionRequests();
6
- const first = createDeferred();
7
- const order = [];
8
- const firstRequest = authRequests.queue(async () => {
9
- order.push('first:start');
10
- await first.promise;
11
- order.push('first:end');
12
- });
13
- const secondRequest = authRequests.queue(async () => {
14
- order.push('second');
15
- });
16
- expect(order).toEqual([]);
17
- await Promise.resolve();
18
- expect(order).toEqual(['first:start']);
19
- first.resolve();
20
- await Promise.all([firstRequest, secondRequest]);
21
- expect(order).toEqual(['first:start', 'first:end', 'second']);
22
- });
23
- it('should share a refresh while session results remain current', async () => {
24
- const authRequests = createAuthSessionRequests();
25
- const refresh = createDeferred();
26
- let runs = 0;
27
- const run = () => authRequests.refresh(async () => {
28
- runs += 1;
29
- return refresh.promise;
30
- });
31
- const first = run();
32
- const second = run();
33
- expect(first).toBe(second);
34
- refresh.resolve(null);
35
- await Promise.all([first, second]);
36
- expect(runs).toBe(1);
37
- });
38
- it('should discard a queued result after the session changes', async () => {
39
- const authRequests = createAuthSessionRequests();
40
- const operation = createDeferred();
41
- let isResultStaleAfterSettlement = false;
42
- const request = authRequests.queue(async ({
43
- isResultStale
44
- }) => {
45
- await operation.promise;
46
- isResultStaleAfterSettlement = isResultStale();
47
- });
48
- await Promise.resolve();
49
- authRequests.discardPendingResults();
50
- operation.resolve();
51
- await request;
52
- expect(isResultStaleAfterSettlement).toBe(true);
53
- });
54
- it('should settle a logout once and prevent refresh from committing', async () => {
55
- const authRequests = createAuthSessionRequests();
56
- const logout = createDeferred();
57
- let clears = 0;
58
- let logoutRequests = 0;
59
- const first = authRequests.logOut({
60
- clearSession: () => {
61
- clears += 1;
62
- authRequests.discardPendingResults();
63
- },
64
- request: async () => {
65
- logoutRequests += 1;
66
- await logout.promise;
67
- }
68
- });
69
- const second = authRequests.logOut({
70
- clearSession: () => {
71
- clears += 1;
72
- },
73
- request: async () => {
74
- logoutRequests += 1;
75
- }
76
- });
77
- expect(first).toBe(second);
78
- expect(authRequests.isLoggingOut()).toBe(true);
79
- expect(await authRequests.refresh(async () => null)).toBeNull();
80
- logout.resolve();
81
- await first;
82
- expect({
83
- clears,
84
- logoutRequests
85
- }).toEqual({
86
- clears: 1,
87
- logoutRequests: 1
88
- });
89
- });
90
- it('should discard a deferred invalidation after the session changes', async () => {
91
- const authRequests = createAuthSessionRequests();
92
- let invalidations = 0;
93
- const first = authRequests.refresh(async ({
94
- invalidateWhenIdle
95
- }) => {
96
- invalidateWhenIdle(() => {
97
- invalidations += 1;
98
- });
99
- return null;
100
- });
101
- const second = authRequests.queue(async () => {
102
- authRequests.discardPendingResults();
103
- });
104
- await Promise.all([first, second]);
105
- expect(invalidations).toBe(0);
106
- });
107
- });
108
- function createDeferred() {
109
- let resolve;
110
- const promise = new Promise(resolvePromise => {
111
- resolve = resolvePromise;
112
- });
113
- if (!resolve) {
114
- throw new Error('Expected deferred promise resolver.');
115
- }
116
- return {
117
- promise,
118
- resolve
119
- };
120
- }
121
- //# sourceMappingURL=authSessionRequests.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authSessionRequests.spec.js","names":["describe","expect","it","createAuthSessionRequests","authRequests","first","createDeferred","order","firstRequest","queue","push","promise","secondRequest","toEqual","Promise","resolve","all","refresh","runs","run","second","toBe","operation","isResultStaleAfterSettlement","request","isResultStale","discardPendingResults","logout","clears","logoutRequests","logOut","clearSession","isLoggingOut","toBeNull","invalidations","invalidateWhenIdle","resolvePromise","Error"],"sources":["../../../src/providers/Auth/authSessionRequests.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { createAuthSessionRequests } from './authSessionRequests.js'\n\ndescribe('createAuthSessionRequests', () => {\n it('should serialize auth requests in queue order', async () => {\n const authRequests = createAuthSessionRequests()\n const first = createDeferred<void>()\n const order: string[] = []\n\n const firstRequest = authRequests.queue(async () => {\n order.push('first:start')\n await first.promise\n order.push('first:end')\n })\n const secondRequest = authRequests.queue(async () => {\n order.push('second')\n })\n\n expect(order).toEqual([])\n await Promise.resolve()\n expect(order).toEqual(['first:start'])\n\n first.resolve()\n await Promise.all([firstRequest, secondRequest])\n expect(order).toEqual(['first:start', 'first:end', 'second'])\n })\n\n it('should share a refresh while session results remain current', async () => {\n const authRequests = createAuthSessionRequests()\n const refresh = createDeferred<null>()\n let runs = 0\n const run = () =>\n authRequests.refresh(async () => {\n runs += 1\n return refresh.promise\n })\n\n const first = run()\n const second = run()\n expect(first).toBe(second)\n\n refresh.resolve(null)\n await Promise.all([first, second])\n expect(runs).toBe(1)\n })\n\n it('should discard a queued result after the session changes', async () => {\n const authRequests = createAuthSessionRequests()\n const operation = createDeferred<void>()\n let isResultStaleAfterSettlement = false\n\n const request = authRequests.queue(async ({ isResultStale }) => {\n await operation.promise\n isResultStaleAfterSettlement = isResultStale()\n })\n\n await Promise.resolve()\n authRequests.discardPendingResults()\n operation.resolve()\n await request\n\n expect(isResultStaleAfterSettlement).toBe(true)\n })\n\n it('should settle a logout once and prevent refresh from committing', async () => {\n const authRequests = createAuthSessionRequests()\n const logout = createDeferred<void>()\n let clears = 0\n let logoutRequests = 0\n\n const first = authRequests.logOut({\n clearSession: () => {\n clears += 1\n authRequests.discardPendingResults()\n },\n request: async () => {\n logoutRequests += 1\n await logout.promise\n },\n })\n const second = authRequests.logOut({\n clearSession: () => {\n clears += 1\n },\n request: async () => {\n logoutRequests += 1\n },\n })\n\n expect(first).toBe(second)\n expect(authRequests.isLoggingOut()).toBe(true)\n expect(await authRequests.refresh(async () => null)).toBeNull()\n logout.resolve()\n await first\n expect({ clears, logoutRequests }).toEqual({ clears: 1, logoutRequests: 1 })\n })\n\n it('should discard a deferred invalidation after the session changes', async () => {\n const authRequests = createAuthSessionRequests()\n let invalidations = 0\n\n const first = authRequests.refresh(async ({ invalidateWhenIdle }) => {\n invalidateWhenIdle(() => {\n invalidations += 1\n })\n return null\n })\n const second = authRequests.queue(async () => {\n authRequests.discardPendingResults()\n })\n\n await Promise.all([first, second])\n expect(invalidations).toBe(0)\n })\n})\n\nfunction createDeferred<Value>(): {\n promise: Promise<Value>\n resolve: (value: Value | PromiseLike<Value>) => void\n} {\n let resolve: ((value: Value | PromiseLike<Value>) => void) | undefined\n const promise = new Promise<Value>((resolvePromise) => {\n resolve = resolvePromise\n })\n\n if (!resolve) {\n throw new Error('Expected deferred promise resolver.')\n }\n\n return { promise, resolve }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,44 +0,0 @@
1
- // @vitest-environment jsdom
2
- import { describe, expect, it, vi } from 'vitest';
3
- import { createSessionActivityTracker, registerSessionActivityListeners, sessionActivityThrottleMs } from './sessionActivity.js';
4
- describe('createSessionActivityTracker', () => {
5
- it('should throttle activity for five seconds', () => {
6
- expect(sessionActivityThrottleMs).toBe(5_000);
7
- let now = 100;
8
- const onActivity = vi.fn();
9
- const activityTracker = createSessionActivityTracker({
10
- now: () => now,
11
- onActivity
12
- });
13
- expect(activityTracker.record('mousemove')).toBe(true);
14
- expect(onActivity).toHaveBeenCalledWith('mousemove', 100);
15
- now += sessionActivityThrottleMs - 1;
16
- expect(activityTracker.record('focus')).toBe(false);
17
- expect(onActivity).toHaveBeenCalledTimes(1);
18
- activityTracker.reset();
19
- expect(activityTracker.record('focus')).toBe(true);
20
- expect(onActivity).toHaveBeenCalledTimes(2);
21
- now += 1;
22
- expect(activityTracker.record('focus')).toBe(false);
23
- });
24
- });
25
- describe('registerSessionActivityListeners', () => {
26
- it('should register and remove focus, keyboard, and mouse movement listeners', () => {
27
- const markActivity = vi.fn();
28
- const cleanup = registerSessionActivityListeners({
29
- markActivity,
30
- window
31
- });
32
- window.dispatchEvent(new Event('focus'));
33
- window.dispatchEvent(new KeyboardEvent('keydown'));
34
- window.dispatchEvent(new MouseEvent('mousemove'));
35
- expect(markActivity.mock.calls).toEqual([['focus'], ['keydown'], ['mousemove']]);
36
- cleanup();
37
- markActivity.mockClear();
38
- window.dispatchEvent(new Event('focus'));
39
- window.dispatchEvent(new KeyboardEvent('keydown'));
40
- window.dispatchEvent(new MouseEvent('mousemove'));
41
- expect(markActivity).not.toHaveBeenCalled();
42
- });
43
- });
44
- //# sourceMappingURL=sessionActivity.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sessionActivity.spec.js","names":["describe","expect","it","vi","createSessionActivityTracker","registerSessionActivityListeners","sessionActivityThrottleMs","toBe","now","onActivity","fn","activityTracker","record","toHaveBeenCalledWith","toHaveBeenCalledTimes","reset","markActivity","cleanup","window","dispatchEvent","Event","KeyboardEvent","MouseEvent","mock","calls","toEqual","mockClear","not","toHaveBeenCalled"],"sources":["../../../src/providers/Auth/sessionActivity.spec.ts"],"sourcesContent":["// @vitest-environment jsdom\nimport { describe, expect, it, vi } from 'vitest'\n\nimport {\n createSessionActivityTracker,\n registerSessionActivityListeners,\n sessionActivityThrottleMs,\n} from './sessionActivity.js'\n\ndescribe('createSessionActivityTracker', () => {\n it('should throttle activity for five seconds', () => {\n expect(sessionActivityThrottleMs).toBe(5_000)\n\n let now = 100\n const onActivity = vi.fn()\n const activityTracker = createSessionActivityTracker({\n now: () => now,\n onActivity,\n })\n\n expect(activityTracker.record('mousemove')).toBe(true)\n expect(onActivity).toHaveBeenCalledWith('mousemove', 100)\n\n now += sessionActivityThrottleMs - 1\n\n expect(activityTracker.record('focus')).toBe(false)\n expect(onActivity).toHaveBeenCalledTimes(1)\n\n activityTracker.reset()\n\n expect(activityTracker.record('focus')).toBe(true)\n expect(onActivity).toHaveBeenCalledTimes(2)\n\n now += 1\n\n expect(activityTracker.record('focus')).toBe(false)\n })\n})\n\ndescribe('registerSessionActivityListeners', () => {\n it('should register and remove focus, keyboard, and mouse movement listeners', () => {\n const markActivity = vi.fn()\n\n const cleanup = registerSessionActivityListeners({\n markActivity,\n window,\n })\n\n window.dispatchEvent(new Event('focus'))\n window.dispatchEvent(new KeyboardEvent('keydown'))\n window.dispatchEvent(new MouseEvent('mousemove'))\n\n expect(markActivity.mock.calls).toEqual([['focus'], ['keydown'], ['mousemove']])\n\n cleanup()\n markActivity.mockClear()\n\n window.dispatchEvent(new Event('focus'))\n window.dispatchEvent(new KeyboardEvent('keydown'))\n window.dispatchEvent(new MouseEvent('mousemove'))\n\n expect(markActivity).not.toHaveBeenCalled()\n })\n})\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ;AAEzC,SACEC,4BAA4B,EAC5BC,gCAAgC,EAChCC,yBAAyB,QACpB;AAEPN,QAAA,CAAS,gCAAgC;EACvCE,EAAA,CAAG,6CAA6C;IAC9CD,MAAA,CAAOK,yBAAA,EAA2BC,IAAI,CAAC;IAEvC,IAAIC,GAAA,GAAM;IACV,MAAMC,UAAA,GAAaN,EAAA,CAAGO,EAAE;IACxB,MAAMC,eAAA,GAAkBP,4BAAA,CAA6B;MACnDI,GAAA,EAAKA,CAAA,KAAMA,GAAA;MACXC;IACF;IAEAR,MAAA,CAAOU,eAAA,CAAgBC,MAAM,CAAC,cAAcL,IAAI,CAAC;IACjDN,MAAA,CAAOQ,UAAA,EAAYI,oBAAoB,CAAC,aAAa;IAErDL,GAAA,IAAOF,yBAAA,GAA4B;IAEnCL,MAAA,CAAOU,eAAA,CAAgBC,MAAM,CAAC,UAAUL,IAAI,CAAC;IAC7CN,MAAA,CAAOQ,UAAA,EAAYK,qBAAqB,CAAC;IAEzCH,eAAA,CAAgBI,KAAK;IAErBd,MAAA,CAAOU,eAAA,CAAgBC,MAAM,CAAC,UAAUL,IAAI,CAAC;IAC7CN,MAAA,CAAOQ,UAAA,EAAYK,qBAAqB,CAAC;IAEzCN,GAAA,IAAO;IAEPP,MAAA,CAAOU,eAAA,CAAgBC,MAAM,CAAC,UAAUL,IAAI,CAAC;EAC/C;AACF;AAEAP,QAAA,CAAS,oCAAoC;EAC3CE,EAAA,CAAG,4EAA4E;IAC7E,MAAMc,YAAA,GAAeb,EAAA,CAAGO,EAAE;IAE1B,MAAMO,OAAA,GAAUZ,gCAAA,CAAiC;MAC/CW,YAAA;MACAE;IACF;IAEAA,MAAA,CAAOC,aAAa,CAAC,IAAIC,KAAA,CAAM;IAC/BF,MAAA,CAAOC,aAAa,CAAC,IAAIE,aAAA,CAAc;IACvCH,MAAA,CAAOC,aAAa,CAAC,IAAIG,UAAA,CAAW;IAEpCrB,MAAA,CAAOe,YAAA,CAAaO,IAAI,CAACC,KAAK,EAAEC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC;IAE/ER,OAAA;IACAD,YAAA,CAAaU,SAAS;IAEtBR,MAAA,CAAOC,aAAa,CAAC,IAAIC,KAAA,CAAM;IAC/BF,MAAA,CAAOC,aAAa,CAAC,IAAIE,aAAA,CAAc;IACvCH,MAAA,CAAOC,aAAa,CAAC,IAAIG,UAAA,CAAW;IAEpCrB,MAAA,CAAOe,YAAA,EAAcW,GAAG,CAACC,gBAAgB;EAC3C;AACF","ignoreList":[]}