@payloadcms/ui 3.0.0-beta.42 → 3.0.0-beta.44

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 (118) hide show
  1. package/dist/elements/Autosave/index.d.ts.map +1 -1
  2. package/dist/elements/Autosave/index.js +99 -32
  3. package/dist/elements/Autosave/index.js.map +1 -1
  4. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  5. package/dist/elements/DeleteDocument/index.js +1 -2
  6. package/dist/elements/DeleteDocument/index.js.map +1 -1
  7. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  8. package/dist/elements/DeleteMany/index.js +1 -2
  9. package/dist/elements/DeleteMany/index.js.map +1 -1
  10. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  11. package/dist/elements/DocumentControls/index.js +3 -2
  12. package/dist/elements/DocumentControls/index.js.map +1 -1
  13. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  14. package/dist/elements/DocumentDrawer/DrawerContent.js +1 -2
  15. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  16. package/dist/elements/DocumentDrawer/index.d.ts.map +1 -1
  17. package/dist/elements/DocumentDrawer/index.js +1 -2
  18. package/dist/elements/DocumentDrawer/index.js.map +1 -1
  19. package/dist/elements/Drawer/index.d.ts.map +1 -1
  20. package/dist/elements/Drawer/index.js +1 -3
  21. package/dist/elements/Drawer/index.js.map +1 -1
  22. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  23. package/dist/elements/DuplicateDocument/index.js +1 -2
  24. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  25. package/dist/elements/EditMany/index.d.ts.map +1 -1
  26. package/dist/elements/EditMany/index.js +1 -2
  27. package/dist/elements/EditMany/index.js.map +1 -1
  28. package/dist/elements/EditUpload/index.d.ts.map +1 -1
  29. package/dist/elements/EditUpload/index.js +1 -5
  30. package/dist/elements/EditUpload/index.js.map +1 -1
  31. package/dist/elements/GenerateConfirmation/index.d.ts.map +1 -1
  32. package/dist/elements/GenerateConfirmation/index.js +1 -2
  33. package/dist/elements/GenerateConfirmation/index.js.map +1 -1
  34. package/dist/elements/ListControls/index.d.ts.map +1 -1
  35. package/dist/elements/ListControls/index.js +1 -2
  36. package/dist/elements/ListControls/index.js.map +1 -1
  37. package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  38. package/dist/elements/ListDrawer/DrawerContent.js +1 -2
  39. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  40. package/dist/elements/ListDrawer/index.d.ts.map +1 -1
  41. package/dist/elements/ListDrawer/index.js +1 -2
  42. package/dist/elements/ListDrawer/index.js.map +1 -1
  43. package/dist/elements/Modal/index.d.ts +1 -7
  44. package/dist/elements/Modal/index.d.ts.map +1 -1
  45. package/dist/elements/Modal/index.js +1 -7
  46. package/dist/elements/Modal/index.js.map +1 -1
  47. package/dist/elements/Nav/NavToggler/index.d.ts.map +1 -1
  48. package/dist/elements/Nav/NavToggler/index.js +1 -2
  49. package/dist/elements/Nav/NavToggler/index.js.map +1 -1
  50. package/dist/elements/Nav/context.d.ts.map +1 -1
  51. package/dist/elements/Nav/context.js +1 -2
  52. package/dist/elements/Nav/context.js.map +1 -1
  53. package/dist/elements/Popup/index.d.ts.map +1 -1
  54. package/dist/elements/Popup/index.js +1 -2
  55. package/dist/elements/Popup/index.js.map +1 -1
  56. package/dist/elements/PublishMany/index.d.ts.map +1 -1
  57. package/dist/elements/PublishMany/index.js +1 -2
  58. package/dist/elements/PublishMany/index.js.map +1 -1
  59. package/dist/elements/Status/index.d.ts.map +1 -1
  60. package/dist/elements/Status/index.js +1 -2
  61. package/dist/elements/Status/index.js.map +1 -1
  62. package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
  63. package/dist/elements/StayLoggedIn/index.js +1 -2
  64. package/dist/elements/StayLoggedIn/index.js.map +1 -1
  65. package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
  66. package/dist/elements/TableColumns/buildColumnState.js +2 -1
  67. package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
  68. package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
  69. package/dist/elements/UnpublishMany/index.js +1 -2
  70. package/dist/elements/UnpublishMany/index.js.map +1 -1
  71. package/dist/elements/WindowInfo/index.d.ts +1 -3
  72. package/dist/elements/WindowInfo/index.d.ts.map +1 -1
  73. package/dist/elements/WindowInfo/index.js +1 -7
  74. package/dist/elements/WindowInfo/index.js.map +1 -1
  75. package/dist/exports/elements.d.ts +1 -6
  76. package/dist/exports/elements.d.ts.map +1 -1
  77. package/dist/exports/elements.js +1 -4
  78. package/dist/exports/elements.js.map +1 -1
  79. package/dist/fields/Blocks/BlocksDrawer/index.d.ts.map +1 -1
  80. package/dist/fields/Blocks/BlocksDrawer/index.js +1 -2
  81. package/dist/fields/Blocks/BlocksDrawer/index.js.map +1 -1
  82. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  83. package/dist/fields/Blocks/RowActions.js +1 -2
  84. package/dist/fields/Blocks/RowActions.js.map +1 -1
  85. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  86. package/dist/fields/Checkbox/Input.js +1 -0
  87. package/dist/fields/Checkbox/Input.js.map +1 -1
  88. package/dist/fields/Tabs/index.d.ts.map +1 -1
  89. package/dist/fields/Tabs/index.js +10 -1
  90. package/dist/fields/Tabs/index.js.map +1 -1
  91. package/dist/hooks/useHotkey.d.ts.map +1 -1
  92. package/dist/hooks/useHotkey.js +1 -2
  93. package/dist/hooks/useHotkey.js.map +1 -1
  94. package/dist/hooks/useIntersect.d.ts +5 -1
  95. package/dist/hooks/useIntersect.d.ts.map +1 -1
  96. package/dist/hooks/useIntersect.js +2 -1
  97. package/dist/hooks/useIntersect.js.map +1 -1
  98. package/dist/hooks/useResize.d.ts +1 -2
  99. package/dist/hooks/useResize.d.ts.map +1 -1
  100. package/dist/hooks/useResize.js +5 -6
  101. package/dist/hooks/useResize.js.map +1 -1
  102. package/dist/providers/Auth/index.d.ts.map +1 -1
  103. package/dist/providers/Auth/index.js +1 -2
  104. package/dist/providers/Auth/index.js.map +1 -1
  105. package/dist/providers/ComponentMap/buildComponentMap/fields.d.ts.map +1 -1
  106. package/dist/providers/ComponentMap/buildComponentMap/fields.js +5 -0
  107. package/dist/providers/ComponentMap/buildComponentMap/fields.js.map +1 -1
  108. package/dist/providers/Root/index.d.ts.map +1 -1
  109. package/dist/providers/Root/index.js +3 -13
  110. package/dist/providers/Root/index.js.map +1 -1
  111. package/dist/utilities/buildFieldSchemaMap/traverseFields.d.ts.map +1 -1
  112. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +5 -0
  113. package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
  114. package/dist/utilities/reduceFieldsToValuesWithValidation.d.ts +15 -0
  115. package/dist/utilities/reduceFieldsToValuesWithValidation.d.ts.map +1 -0
  116. package/dist/utilities/reduceFieldsToValuesWithValidation.js +29 -0
  117. package/dist/utilities/reduceFieldsToValuesWithValidation.js.map +1 -0
  118. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/Tabs/index.tsx"],"sourcesContent":["'use client'\nimport type { FieldPermissions } from 'payload/auth'\nimport type { DocumentPreferences } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { toKebabCase } from 'payload/utilities'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { MappedTab } from '../../providers/ComponentMap/buildComponentMap/types.js'\nimport type { FormFieldBase } from '../shared/index.js'\n\nimport { useCollapsible } from '../../elements/Collapsible/provider.js'\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { TabComponent } from './Tab/index.js'\nimport './index.scss'\nimport { TabsProvider } from './provider.js'\n\nconst baseClass = 'tabs-field'\n\nexport { TabsProvider }\n\nexport type TabsFieldProps = FormFieldBase & {\n forceRender?: boolean\n name?: string\n path?: string\n permissions: FieldPermissions\n tabs?: MappedTab[]\n width?: string\n}\n\nconst TabsField: React.FC<TabsFieldProps> = (props) => {\n const {\n name,\n CustomDescription,\n className,\n descriptionProps,\n forceRender = false,\n path: pathFromProps,\n readOnly: readOnlyFromProps,\n tabs = [],\n } = props\n\n const {\n indexPath,\n path: pathFromContext,\n permissions,\n readOnly: readOnlyFromContext,\n schemaPath,\n } = useFieldProps()\n\n const readOnly = readOnlyFromProps || readOnlyFromContext\n const path = pathFromContext || pathFromProps || name\n const { getPreference, setPreference } = usePreferences()\n const { preferencesKey } = useDocumentInfo()\n const { i18n } = useTranslation()\n const { isWithinCollapsible } = useCollapsible()\n const [activeTabIndex, setActiveTabIndex] = useState<number>(0)\n const tabsPrefKey = `tabs-${indexPath}`\n\n useEffect(() => {\n if (preferencesKey) {\n const getInitialPref = async () => {\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n const initialIndex = path\n ? existingPreferences?.fields?.[path]?.tabIndex\n : existingPreferences?.fields?.[tabsPrefKey]?.tabIndex\n setActiveTabIndex(initialIndex || 0)\n }\n void getInitialPref()\n }\n }, [path, getPreference, preferencesKey, tabsPrefKey])\n\n const handleTabChange = useCallback(\n async (incomingTabIndex: number) => {\n setActiveTabIndex(incomingTabIndex)\n\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n\n if (preferencesKey) {\n void setPreference(preferencesKey, {\n ...existingPreferences,\n ...(path\n ? {\n fields: {\n ...(existingPreferences?.fields || {}),\n [path]: {\n ...existingPreferences?.fields?.[path],\n tabIndex: incomingTabIndex,\n },\n },\n }\n : {\n fields: {\n ...existingPreferences?.fields,\n [tabsPrefKey]: {\n ...existingPreferences?.fields?.[tabsPrefKey],\n tabIndex: incomingTabIndex,\n },\n },\n }),\n })\n }\n },\n [preferencesKey, getPreference, setPreference, path, tabsPrefKey],\n )\n\n const activeTabConfig = tabs[activeTabIndex]\n\n return (\n <div\n className={[\n fieldBaseClass,\n className,\n baseClass,\n isWithinCollapsible && `${baseClass}--within-collapsible`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <TabsProvider>\n <div className={`${baseClass}__tabs-wrap`}>\n <div className={`${baseClass}__tabs`}>\n {tabs.map((tab, tabIndex) => {\n return (\n <TabComponent\n isActive={activeTabIndex === tabIndex}\n key={tabIndex}\n parentPath={path}\n setIsActive={() => handleTabChange(tabIndex)}\n tab={tab}\n />\n )\n })}\n </div>\n </div>\n <div className={`${baseClass}__content-wrap`}>\n {activeTabConfig && (\n <React.Fragment>\n <div\n className={[\n `${baseClass}__tab`,\n activeTabConfig.label &&\n `${baseClass}__tabConfigLabel-${toKebabCase(\n getTranslation(activeTabConfig.label, i18n),\n )}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {CustomDescription ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n <RenderFields\n fieldMap={activeTabConfig.fieldMap}\n forceRender={forceRender}\n key={\n activeTabConfig.label\n ? getTranslation(activeTabConfig.label, i18n)\n : activeTabConfig['name']\n }\n margins=\"small\"\n path={`${path ? `${path}.` : ''}${activeTabConfig.name ? `${activeTabConfig.name}` : ''}`}\n permissions={\n 'name' in activeTabConfig && permissions?.fields?.[activeTabConfig.name]?.fields\n ? permissions?.fields?.[activeTabConfig.name]?.fields\n : permissions?.fields\n }\n readOnly={readOnly}\n schemaPath={`${schemaPath ? `${schemaPath}` : ''}${activeTabConfig.name ? `.${activeTabConfig.name}` : ''}`}\n />\n </div>\n </React.Fragment>\n )}\n </div>\n </TabsProvider>\n </div>\n )\n}\n\nexport const Tabs = withCondition(TabsField)\n"],"names":["getTranslation","toKebabCase","React","useCallback","useEffect","useState","useCollapsible","FieldDescription","useFieldProps","RenderFields","withCondition","useDocumentInfo","usePreferences","useTranslation","fieldBaseClass","TabComponent","TabsProvider","baseClass","TabsField","props","name","CustomDescription","className","descriptionProps","forceRender","path","pathFromProps","readOnly","readOnlyFromProps","tabs","indexPath","pathFromContext","permissions","readOnlyFromContext","schemaPath","getPreference","setPreference","preferencesKey","i18n","isWithinCollapsible","activeTabIndex","setActiveTabIndex","tabsPrefKey","getInitialPref","existingPreferences","initialIndex","fields","tabIndex","handleTabChange","incomingTabIndex","activeTabConfig","div","filter","Boolean","join","map","tab","isActive","parentPath","setIsActive","Fragment","label","fieldMap","margins","Tabs"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/Tabs/index.tsx"],"sourcesContent":["'use client'\nimport type { FieldPermissions } from 'payload/auth'\nimport type { DocumentPreferences } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { toKebabCase } from 'payload/utilities'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { MappedTab } from '../../providers/ComponentMap/buildComponentMap/types.js'\nimport type { FormFieldBase } from '../shared/index.js'\n\nimport { useCollapsible } from '../../elements/Collapsible/provider.js'\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { TabComponent } from './Tab/index.js'\nimport './index.scss'\nimport { TabsProvider } from './provider.js'\n\nconst baseClass = 'tabs-field'\n\nexport { TabsProvider }\n\nexport type TabsFieldProps = FormFieldBase & {\n forceRender?: boolean\n name?: string\n path?: string\n permissions: FieldPermissions\n tabs?: MappedTab[]\n width?: string\n}\n\nconst TabsField: React.FC<TabsFieldProps> = (props) => {\n const {\n name,\n CustomDescription,\n className,\n descriptionProps,\n forceRender = false,\n path: pathFromProps,\n readOnly: readOnlyFromProps,\n tabs = [],\n } = props\n\n const {\n indexPath,\n path: pathFromContext,\n permissions,\n readOnly: readOnlyFromContext,\n schemaPath,\n } = useFieldProps()\n\n const readOnly = readOnlyFromProps || readOnlyFromContext\n const path = pathFromContext || pathFromProps || name\n const { getPreference, setPreference } = usePreferences()\n const { preferencesKey } = useDocumentInfo()\n const { i18n } = useTranslation()\n const { isWithinCollapsible } = useCollapsible()\n const [activeTabIndex, setActiveTabIndex] = useState<number>(0)\n const tabsPrefKey = `tabs-${indexPath}`\n\n useEffect(() => {\n if (preferencesKey) {\n const getInitialPref = async () => {\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n const initialIndex = path\n ? existingPreferences?.fields?.[path]?.tabIndex\n : existingPreferences?.fields?.[tabsPrefKey]?.tabIndex\n setActiveTabIndex(initialIndex || 0)\n }\n void getInitialPref()\n }\n }, [path, getPreference, preferencesKey, tabsPrefKey])\n\n const handleTabChange = useCallback(\n async (incomingTabIndex: number) => {\n setActiveTabIndex(incomingTabIndex)\n\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n\n if (preferencesKey) {\n void setPreference(preferencesKey, {\n ...existingPreferences,\n ...(path\n ? {\n fields: {\n ...(existingPreferences?.fields || {}),\n [path]: {\n ...existingPreferences?.fields?.[path],\n tabIndex: incomingTabIndex,\n },\n },\n }\n : {\n fields: {\n ...existingPreferences?.fields,\n [tabsPrefKey]: {\n ...existingPreferences?.fields?.[tabsPrefKey],\n tabIndex: incomingTabIndex,\n },\n },\n }),\n })\n }\n },\n [preferencesKey, getPreference, setPreference, path, tabsPrefKey],\n )\n\n const activeTabConfig = tabs[activeTabIndex]\n\n function generateTabPath() {\n let tabPath = path\n if (path && activeTabConfig.name) {\n tabPath = `${path}.${activeTabConfig.name}`\n } else if (!path && activeTabConfig.name) {\n tabPath = activeTabConfig.name\n }\n\n return tabPath\n }\n\n return (\n <div\n className={[\n fieldBaseClass,\n className,\n baseClass,\n isWithinCollapsible && `${baseClass}--within-collapsible`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <TabsProvider>\n <div className={`${baseClass}__tabs-wrap`}>\n <div className={`${baseClass}__tabs`}>\n {tabs.map((tab, tabIndex) => {\n return (\n <TabComponent\n isActive={activeTabIndex === tabIndex}\n key={tabIndex}\n parentPath={path}\n setIsActive={() => handleTabChange(tabIndex)}\n tab={tab}\n />\n )\n })}\n </div>\n </div>\n <div className={`${baseClass}__content-wrap`}>\n {activeTabConfig && (\n <React.Fragment>\n <div\n className={[\n `${baseClass}__tab`,\n activeTabConfig.label &&\n `${baseClass}__tabConfigLabel-${toKebabCase(\n getTranslation(activeTabConfig.label, i18n),\n )}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {CustomDescription ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n <RenderFields\n fieldMap={activeTabConfig.fieldMap}\n forceRender={forceRender}\n key={\n activeTabConfig.label\n ? getTranslation(activeTabConfig.label, i18n)\n : activeTabConfig['name']\n }\n margins=\"small\"\n path={generateTabPath()}\n permissions={\n 'name' in activeTabConfig && permissions?.fields?.[activeTabConfig.name]?.fields\n ? permissions?.fields?.[activeTabConfig.name]?.fields\n : permissions?.fields\n }\n readOnly={readOnly}\n schemaPath={`${schemaPath ? `${schemaPath}` : ''}${activeTabConfig.name ? `.${activeTabConfig.name}` : ''}`}\n />\n </div>\n </React.Fragment>\n )}\n </div>\n </TabsProvider>\n </div>\n )\n}\n\nexport const Tabs = withCondition(TabsField)\n"],"names":["getTranslation","toKebabCase","React","useCallback","useEffect","useState","useCollapsible","FieldDescription","useFieldProps","RenderFields","withCondition","useDocumentInfo","usePreferences","useTranslation","fieldBaseClass","TabComponent","TabsProvider","baseClass","TabsField","props","name","CustomDescription","className","descriptionProps","forceRender","path","pathFromProps","readOnly","readOnlyFromProps","tabs","indexPath","pathFromContext","permissions","readOnlyFromContext","schemaPath","getPreference","setPreference","preferencesKey","i18n","isWithinCollapsible","activeTabIndex","setActiveTabIndex","tabsPrefKey","getInitialPref","existingPreferences","initialIndex","fields","tabIndex","handleTabChange","incomingTabIndex","activeTabConfig","generateTabPath","tabPath","div","filter","Boolean","join","map","tab","isActive","parentPath","setIsActive","Fragment","label","fieldMap","margins","Tabs"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useHotkey.d.ts","sourceRoot":"","sources":["../../src/hooks/useHotkey.ts"],"names":[],"mappings":"AA6DA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,YACX;IACP,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,QACK,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,KAC/B,IAiEF,CAAA"}
1
+ {"version":3,"file":"useHotkey.d.ts","sourceRoot":"","sources":["../../src/hooks/useHotkey.ts"],"names":[],"mappings":"AA6DA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,YACX;IACP,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,QACK,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,KAC/B,IA+DF,CAAA"}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- /* eslint-disable no-shadow */ import * as facelessUIImport from '@faceless-ui/modal';
2
+ /* eslint-disable no-shadow */ import { useModal } from '@faceless-ui/modal';
3
3
  import { setsAreEqual } from 'payload/utilities';
4
4
  import { useCallback, useEffect } from 'react';
5
5
  // Required to be outside of hook, else debounce would be necessary
@@ -53,7 +53,6 @@ const removeFromKeys = (code)=>{
53
53
  * @param param0.editDepth {boolean} This ensures that the hotkey is only triggered for the most top-level drawer in case there are nested drawers
54
54
  * @param func The callback function
55
55
  */ export const useHotkey = (options, func)=>{
56
- const { useModal } = facelessUIImport;
57
56
  const { cmdCtrlKey, editDepth, keyCodes } = options;
58
57
  const { modalState } = useModal();
59
58
  const keydown = useCallback((event)=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useHotkey.ts"],"sourcesContent":["'use client'\n/* eslint-disable no-shadow */\nimport * as facelessUIImport from '@faceless-ui/modal'\nimport { setsAreEqual } from 'payload/utilities'\nimport { useCallback, useEffect } from 'react'\n\n// Required to be outside of hook, else debounce would be necessary\n// and then one could not prevent the default behaviour.\n\n// It maps the pressed keys with the time they were pressed, in order to implement a maximum time\n// for the user to press the next key in the sequence\n\n// This is necessary to prevent a bug where the keyup event, which unsets the key as pressed\n// is not fired when the window is not focused.\n// When the user then comes back to the window, the key is still registered as pressed, even though it's not.\nconst pressedKeys = new Map<string, number>([])\n\nconst map = {\n altleft: 'alt',\n altright: 'alt',\n controlleft: 'ctrl',\n controlright: 'ctrl',\n ctrlleft: 'ctrl',\n ctrlright: 'ctrl',\n escape: 'esc',\n metaleft: 'meta',\n metaright: 'meta',\n osleft: 'meta',\n osright: 'meta',\n shiftleft: 'shift',\n shiftright: 'shift',\n}\n\nconst stripKey = (key: string) => {\n return (map[key.toLowerCase()] || key).trim().toLowerCase().replace('key', '')\n}\n\nconst pushToKeys = (code: string) => {\n const key = stripKey(code)\n\n // There is a weird bug with macos that if the keys are not cleared they remain in the\n // pressed keys set.\n if (key === 'meta') {\n pressedKeys.forEach(\n (time, pressedKey) => pressedKey !== 'meta' && pressedKeys.delete(pressedKey),\n )\n }\n\n pressedKeys.set(key, Date.now())\n}\n\nconst removeFromKeys = (code: string) => {\n const key = stripKey(code)\n // There is a weird bug with macos that if the keys are not cleared they remain in the\n // pressed keys set.\n if (key === 'meta') {\n pressedKeys.clear()\n }\n pressedKeys.delete(key)\n}\n\n/**\n * Hook function to work with hotkeys.\n * @param param0.keyCode {string[]} The keys to listen for (`Event.code` without `'Key'` and lowercased)\n * @param param0.cmdCtrlKey {boolean} Whether Ctrl on windows or Cmd on mac must be pressed\n * @param param0.editDepth {boolean} This ensures that the hotkey is only triggered for the most top-level drawer in case there are nested drawers\n * @param func The callback function\n */\nexport const useHotkey = (\n options: {\n cmdCtrlKey: boolean\n editDepth: number\n keyCodes: string[]\n },\n func: (e: KeyboardEvent) => void,\n): void => {\n const { useModal } = facelessUIImport\n\n const { cmdCtrlKey, editDepth, keyCodes } = options\n\n const { modalState } = useModal()\n\n const keydown = useCallback(\n (event: CustomEvent | KeyboardEvent) => {\n const e: KeyboardEvent = event.detail?.key ? event.detail : event\n if (e.key === undefined) {\n // Autofill events, or other synthetic events, can be ignored\n return\n }\n\n // Filter out pressed keys which have been pressed > 3 seconds ago\n pressedKeys.forEach((time, key) => {\n if (Date.now() - time > 3000) {\n pressedKeys.delete(key)\n }\n })\n\n if (e.code) pushToKeys(e.code)\n\n // Check for Mac and iPad\n const hasCmd = window.navigator.userAgent.includes('Mac OS X')\n const pressedWithoutModifier = [...pressedKeys.keys()].filter(\n (key) => !['alt', 'ctrl', 'meta', 'shift'].includes(key),\n )\n\n // Check whether arrays contain the same values (regardless of number of occurrences)\n if (\n setsAreEqual(new Set(pressedWithoutModifier), new Set(keyCodes)) &&\n (!cmdCtrlKey || (hasCmd && pressedKeys.has('meta')) || (!hasCmd && e.ctrlKey))\n ) {\n // get the maximum edit depth by counting the number of open drawers. modalState is and object which contains the state of all drawers.\n const maxEditDepth =\n Object.keys(modalState).filter((key) => modalState[key]?.isOpen)?.length + 1 ?? 1\n\n if (maxEditDepth !== editDepth) {\n // We only want to execute the hotkey from the most top-level drawer / edit depth.\n return\n }\n // execute the function associated with the maximum edit depth\n func(e)\n }\n },\n [keyCodes, cmdCtrlKey, editDepth, modalState, func],\n )\n\n const keyup = useCallback((e: KeyboardEvent) => {\n if (e.code) removeFromKeys(e.code)\n }, [])\n\n useEffect(() => {\n document.addEventListener('keydown', keydown, false)\n document.addEventListener('bypassKeyDown', keydown, false) // this is called if the keydown event's propagation is stopped by react-select\n document.addEventListener('keyup', keyup, false)\n\n return () => {\n document.removeEventListener('keydown', keydown)\n document.removeEventListener('bypassKeyDown', keydown)\n document.removeEventListener('keyup', keyup)\n }\n }, [keydown, keyup])\n}\n"],"names":["facelessUIImport","setsAreEqual","useCallback","useEffect","pressedKeys","Map","map","altleft","altright","controlleft","controlright","ctrlleft","ctrlright","escape","metaleft","metaright","osleft","osright","shiftleft","shiftright","stripKey","key","toLowerCase","trim","replace","pushToKeys","code","forEach","time","pressedKey","delete","set","Date","now","removeFromKeys","clear","useHotkey","options","func","useModal","cmdCtrlKey","editDepth","keyCodes","modalState","keydown","event","e","detail","undefined","hasCmd","window","navigator","userAgent","includes","pressedWithoutModifier","keys","filter","Set","has","ctrlKey","maxEditDepth","Object","isOpen","length","keyup","document","addEventListener","removeEventListener"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/hooks/useHotkey.ts"],"sourcesContent":["'use client'\n/* eslint-disable no-shadow */\nimport { useModal } from '@faceless-ui/modal'\nimport { setsAreEqual } from 'payload/utilities'\nimport { useCallback, useEffect } from 'react'\n\n// Required to be outside of hook, else debounce would be necessary\n// and then one could not prevent the default behaviour.\n\n// It maps the pressed keys with the time they were pressed, in order to implement a maximum time\n// for the user to press the next key in the sequence\n\n// This is necessary to prevent a bug where the keyup event, which unsets the key as pressed\n// is not fired when the window is not focused.\n// When the user then comes back to the window, the key is still registered as pressed, even though it's not.\nconst pressedKeys = new Map<string, number>([])\n\nconst map = {\n altleft: 'alt',\n altright: 'alt',\n controlleft: 'ctrl',\n controlright: 'ctrl',\n ctrlleft: 'ctrl',\n ctrlright: 'ctrl',\n escape: 'esc',\n metaleft: 'meta',\n metaright: 'meta',\n osleft: 'meta',\n osright: 'meta',\n shiftleft: 'shift',\n shiftright: 'shift',\n}\n\nconst stripKey = (key: string) => {\n return (map[key.toLowerCase()] || key).trim().toLowerCase().replace('key', '')\n}\n\nconst pushToKeys = (code: string) => {\n const key = stripKey(code)\n\n // There is a weird bug with macos that if the keys are not cleared they remain in the\n // pressed keys set.\n if (key === 'meta') {\n pressedKeys.forEach(\n (time, pressedKey) => pressedKey !== 'meta' && pressedKeys.delete(pressedKey),\n )\n }\n\n pressedKeys.set(key, Date.now())\n}\n\nconst removeFromKeys = (code: string) => {\n const key = stripKey(code)\n // There is a weird bug with macos that if the keys are not cleared they remain in the\n // pressed keys set.\n if (key === 'meta') {\n pressedKeys.clear()\n }\n pressedKeys.delete(key)\n}\n\n/**\n * Hook function to work with hotkeys.\n * @param param0.keyCode {string[]} The keys to listen for (`Event.code` without `'Key'` and lowercased)\n * @param param0.cmdCtrlKey {boolean} Whether Ctrl on windows or Cmd on mac must be pressed\n * @param param0.editDepth {boolean} This ensures that the hotkey is only triggered for the most top-level drawer in case there are nested drawers\n * @param func The callback function\n */\nexport const useHotkey = (\n options: {\n cmdCtrlKey: boolean\n editDepth: number\n keyCodes: string[]\n },\n func: (e: KeyboardEvent) => void,\n): void => {\n const { cmdCtrlKey, editDepth, keyCodes } = options\n\n const { modalState } = useModal()\n\n const keydown = useCallback(\n (event: CustomEvent | KeyboardEvent) => {\n const e: KeyboardEvent = event.detail?.key ? event.detail : event\n if (e.key === undefined) {\n // Autofill events, or other synthetic events, can be ignored\n return\n }\n\n // Filter out pressed keys which have been pressed > 3 seconds ago\n pressedKeys.forEach((time, key) => {\n if (Date.now() - time > 3000) {\n pressedKeys.delete(key)\n }\n })\n\n if (e.code) pushToKeys(e.code)\n\n // Check for Mac and iPad\n const hasCmd = window.navigator.userAgent.includes('Mac OS X')\n const pressedWithoutModifier = [...pressedKeys.keys()].filter(\n (key) => !['alt', 'ctrl', 'meta', 'shift'].includes(key),\n )\n\n // Check whether arrays contain the same values (regardless of number of occurrences)\n if (\n setsAreEqual(new Set(pressedWithoutModifier), new Set(keyCodes)) &&\n (!cmdCtrlKey || (hasCmd && pressedKeys.has('meta')) || (!hasCmd && e.ctrlKey))\n ) {\n // get the maximum edit depth by counting the number of open drawers. modalState is and object which contains the state of all drawers.\n const maxEditDepth =\n Object.keys(modalState).filter((key) => modalState[key]?.isOpen)?.length + 1 ?? 1\n\n if (maxEditDepth !== editDepth) {\n // We only want to execute the hotkey from the most top-level drawer / edit depth.\n return\n }\n // execute the function associated with the maximum edit depth\n func(e)\n }\n },\n [keyCodes, cmdCtrlKey, editDepth, modalState, func],\n )\n\n const keyup = useCallback((e: KeyboardEvent) => {\n if (e.code) removeFromKeys(e.code)\n }, [])\n\n useEffect(() => {\n document.addEventListener('keydown', keydown, false)\n document.addEventListener('bypassKeyDown', keydown, false) // this is called if the keydown event's propagation is stopped by react-select\n document.addEventListener('keyup', keyup, false)\n\n return () => {\n document.removeEventListener('keydown', keydown)\n document.removeEventListener('bypassKeyDown', keydown)\n document.removeEventListener('keyup', keyup)\n }\n }, [keydown, keyup])\n}\n"],"names":["useModal","setsAreEqual","useCallback","useEffect","pressedKeys","Map","map","altleft","altright","controlleft","controlright","ctrlleft","ctrlright","escape","metaleft","metaright","osleft","osright","shiftleft","shiftright","stripKey","key","toLowerCase","trim","replace","pushToKeys","code","forEach","time","pressedKey","delete","set","Date","now","removeFromKeys","clear","useHotkey","options","func","cmdCtrlKey","editDepth","keyCodes","modalState","keydown","event","e","detail","undefined","hasCmd","window","navigator","userAgent","includes","pressedWithoutModifier","keys","filter","Set","has","ctrlKey","maxEditDepth","Object","isOpen","length","keyup","document","addEventListener","removeEventListener"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,4BAA4B,GAC5B,SAASA,QAAQ,QAAQ,qBAAoB;AAC7C,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,WAAW,EAAEC,SAAS,QAAQ,QAAO;AAE9C,mEAAmE;AACnE,wDAAwD;AAExD,iGAAiG;AACjG,qDAAqD;AAErD,4FAA4F;AAC5F,+CAA+C;AAC/C,6GAA6G;AAC7G,MAAMC,cAAc,IAAIC,IAAoB,EAAE;AAE9C,MAAMC,MAAM;IACVC,SAAS;IACTC,UAAU;IACVC,aAAa;IACbC,cAAc;IACdC,UAAU;IACVC,WAAW;IACXC,QAAQ;IACRC,UAAU;IACVC,WAAW;IACXC,QAAQ;IACRC,SAAS;IACTC,WAAW;IACXC,YAAY;AACd;AAEA,MAAMC,WAAW,CAACC;IAChB,OAAO,AAACf,CAAAA,GAAG,CAACe,IAAIC,WAAW,GAAG,IAAID,GAAE,EAAGE,IAAI,GAAGD,WAAW,GAAGE,OAAO,CAAC,OAAO;AAC7E;AAEA,MAAMC,aAAa,CAACC;IAClB,MAAML,MAAMD,SAASM;IAErB,sFAAsF;IACtF,oBAAoB;IACpB,IAAIL,QAAQ,QAAQ;QAClBjB,YAAYuB,OAAO,CACjB,CAACC,MAAMC,aAAeA,eAAe,UAAUzB,YAAY0B,MAAM,CAACD;IAEtE;IAEAzB,YAAY2B,GAAG,CAACV,KAAKW,KAAKC,GAAG;AAC/B;AAEA,MAAMC,iBAAiB,CAACR;IACtB,MAAML,MAAMD,SAASM;IACrB,sFAAsF;IACtF,oBAAoB;IACpB,IAAIL,QAAQ,QAAQ;QAClBjB,YAAY+B,KAAK;IACnB;IACA/B,YAAY0B,MAAM,CAACT;AACrB;AAEA;;;;;;CAMC,GACD,OAAO,MAAMe,YAAY,CACvBC,SAKAC;IAEA,MAAM,EAAEC,UAAU,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGJ;IAE5C,MAAM,EAAEK,UAAU,EAAE,GAAG1C;IAEvB,MAAM2C,UAAUzC,YACd,CAAC0C;QACC,MAAMC,IAAmBD,MAAME,MAAM,EAAEzB,MAAMuB,MAAME,MAAM,GAAGF;QAC5D,IAAIC,EAAExB,GAAG,KAAK0B,WAAW;YACvB,6DAA6D;YAC7D;QACF;QAEA,kEAAkE;QAClE3C,YAAYuB,OAAO,CAAC,CAACC,MAAMP;YACzB,IAAIW,KAAKC,GAAG,KAAKL,OAAO,MAAM;gBAC5BxB,YAAY0B,MAAM,CAACT;YACrB;QACF;QAEA,IAAIwB,EAAEnB,IAAI,EAAED,WAAWoB,EAAEnB,IAAI;QAE7B,yBAAyB;QACzB,MAAMsB,SAASC,OAAOC,SAAS,CAACC,SAAS,CAACC,QAAQ,CAAC;QACnD,MAAMC,yBAAyB;eAAIjD,YAAYkD,IAAI;SAAG,CAACC,MAAM,CAC3D,CAAClC,MAAQ,CAAC;gBAAC;gBAAO;gBAAQ;gBAAQ;aAAQ,CAAC+B,QAAQ,CAAC/B;QAGtD,qFAAqF;QACrF,IACEpB,aAAa,IAAIuD,IAAIH,yBAAyB,IAAIG,IAAIf,cACrD,CAAA,CAACF,cAAeS,UAAU5C,YAAYqD,GAAG,CAAC,WAAa,CAACT,UAAUH,EAAEa,OAAO,GAC5E;YACA,uIAAuI;YACvI,MAAMC,eACJC,CAAAA,OAAON,IAAI,CAACZ,YAAYa,MAAM,CAAC,CAAClC,MAAQqB,UAAU,CAACrB,IAAI,EAAEwC,SAASC,SAAS,CAAA,KAAK;YAElF,IAAIH,iBAAiBnB,WAAW;gBAC9B,kFAAkF;gBAClF;YACF;YACA,8DAA8D;YAC9DF,KAAKO;QACP;IACF,GACA;QAACJ;QAAUF;QAAYC;QAAWE;QAAYJ;KAAK;IAGrD,MAAMyB,QAAQ7D,YAAY,CAAC2C;QACzB,IAAIA,EAAEnB,IAAI,EAAEQ,eAAeW,EAAEnB,IAAI;IACnC,GAAG,EAAE;IAELvB,UAAU;QACR6D,SAASC,gBAAgB,CAAC,WAAWtB,SAAS;QAC9CqB,SAASC,gBAAgB,CAAC,iBAAiBtB,SAAS,OAAO,+EAA+E;;QAC1IqB,SAASC,gBAAgB,CAAC,SAASF,OAAO;QAE1C,OAAO;YACLC,SAASE,mBAAmB,CAAC,WAAWvB;YACxCqB,SAASE,mBAAmB,CAAC,iBAAiBvB;YAC9CqB,SAASE,mBAAmB,CAAC,SAASH;QACxC;IACF,GAAG;QAACpB;QAASoB;KAAM;AACrB,EAAC"}
@@ -1,5 +1,9 @@
1
1
  /// <reference types="react" resolution-mode="require"/>
2
- type Intersect = [setNode: React.Dispatch<Element>, entry: IntersectionObserverEntry];
2
+ type Intersect = [
3
+ setNode: React.Dispatch<HTMLElement>,
4
+ entry: IntersectionObserverEntry,
5
+ node: HTMLElement
6
+ ];
3
7
  export declare const useIntersect: ({ root, rootMargin, threshold }?: {
4
8
  root?: any;
5
9
  rootMargin?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"useIntersect.d.ts","sourceRoot":"","sources":["../../src/hooks/useIntersect.ts"],"names":[],"mappings":";AAIA,KAAK,SAAS,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAA;AAErF,eAAO,MAAM,YAAY;;;;aAEb,OAAO,cA4BlB,CAAA"}
1
+ {"version":3,"file":"useIntersect.d.ts","sourceRoot":"","sources":["../../src/hooks/useIntersect.ts"],"names":[],"mappings":";AAIA,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;IACpC,KAAK,EAAE,yBAAyB;IAChC,IAAI,EAAE,WAAW;CAClB,CAAA;AAED,eAAO,MAAM,YAAY;;;;aAEb,OAAO,cA4BlB,CAAA"}
@@ -22,7 +22,8 @@ export const useIntersect = ({ root = null, rootMargin = '0px', threshold = 0 }
22
22
  ]);
23
23
  return [
24
24
  setNode,
25
- entry
25
+ entry,
26
+ node
26
27
  ];
27
28
  };
28
29
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useIntersect.ts"],"sourcesContent":["'use client'\n/* eslint-disable no-shadow */\nimport { useEffect, useRef, useState } from 'react'\n\ntype Intersect = [setNode: React.Dispatch<Element>, entry: IntersectionObserverEntry]\n\nexport const useIntersect = (\n { root = null, rootMargin = '0px', threshold = 0 } = {},\n disable?: boolean,\n): Intersect => {\n const [entry, updateEntry] = useState<IntersectionObserverEntry>()\n const [node, setNode] = useState(null)\n\n const observer = useRef(\n typeof window !== 'undefined' && 'IntersectionObserver' in window && !disable\n ? new window.IntersectionObserver(([ent]) => updateEntry(ent), {\n root,\n rootMargin,\n threshold,\n })\n : null,\n )\n\n useEffect(() => {\n if (disable) {\n return\n }\n const { current: currentObserver } = observer\n currentObserver.disconnect()\n\n if (node) currentObserver.observe(node)\n\n return () => currentObserver.disconnect()\n }, [node, disable])\n\n return [setNode, entry]\n}\n"],"names":["useEffect","useRef","useState","useIntersect","root","rootMargin","threshold","disable","entry","updateEntry","node","setNode","observer","window","IntersectionObserver","ent","current","currentObserver","disconnect","observe"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,4BAA4B,GAC5B,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAInD,OAAO,MAAMC,eAAe,CAC1B,EAAEC,OAAO,IAAI,EAAEC,aAAa,KAAK,EAAEC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,EACvDC;IAEA,MAAM,CAACC,OAAOC,YAAY,GAAGP;IAC7B,MAAM,CAACQ,MAAMC,QAAQ,GAAGT,SAAS;IAEjC,MAAMU,WAAWX,OACf,OAAOY,WAAW,eAAe,0BAA0BA,UAAU,CAACN,UAClE,IAAIM,OAAOC,oBAAoB,CAAC,CAAC,CAACC,IAAI,GAAKN,YAAYM,MAAM;QAC3DX;QACAC;QACAC;IACF,KACA;IAGNN,UAAU;QACR,IAAIO,SAAS;YACX;QACF;QACA,MAAM,EAAES,SAASC,eAAe,EAAE,GAAGL;QACrCK,gBAAgBC,UAAU;QAE1B,IAAIR,MAAMO,gBAAgBE,OAAO,CAACT;QAElC,OAAO,IAAMO,gBAAgBC,UAAU;IACzC,GAAG;QAACR;QAAMH;KAAQ;IAElB,OAAO;QAACI;QAASH;KAAM;AACzB,EAAC"}
1
+ {"version":3,"sources":["../../src/hooks/useIntersect.ts"],"sourcesContent":["'use client'\n/* eslint-disable no-shadow */\nimport { useEffect, useRef, useState } from 'react'\n\ntype Intersect = [\n setNode: React.Dispatch<HTMLElement>,\n entry: IntersectionObserverEntry,\n node: HTMLElement,\n]\n\nexport const useIntersect = (\n { root = null, rootMargin = '0px', threshold = 0 } = {},\n disable?: boolean,\n): Intersect => {\n const [entry, updateEntry] = useState<IntersectionObserverEntry>()\n const [node, setNode] = useState(null)\n\n const observer = useRef(\n typeof window !== 'undefined' && 'IntersectionObserver' in window && !disable\n ? new window.IntersectionObserver(([ent]) => updateEntry(ent), {\n root,\n rootMargin,\n threshold,\n })\n : null,\n )\n\n useEffect(() => {\n if (disable) {\n return\n }\n const { current: currentObserver } = observer\n currentObserver.disconnect()\n\n if (node) currentObserver.observe(node)\n\n return () => currentObserver.disconnect()\n }, [node, disable])\n\n return [setNode, entry, node]\n}\n"],"names":["useEffect","useRef","useState","useIntersect","root","rootMargin","threshold","disable","entry","updateEntry","node","setNode","observer","window","IntersectionObserver","ent","current","currentObserver","disconnect","observe"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,4BAA4B,GAC5B,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAQnD,OAAO,MAAMC,eAAe,CAC1B,EAAEC,OAAO,IAAI,EAAEC,aAAa,KAAK,EAAEC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,EACvDC;IAEA,MAAM,CAACC,OAAOC,YAAY,GAAGP;IAC7B,MAAM,CAACQ,MAAMC,QAAQ,GAAGT,SAAS;IAEjC,MAAMU,WAAWX,OACf,OAAOY,WAAW,eAAe,0BAA0BA,UAAU,CAACN,UAClE,IAAIM,OAAOC,oBAAoB,CAAC,CAAC,CAACC,IAAI,GAAKN,YAAYM,MAAM;QAC3DX;QACAC;QACAC;IACF,KACA;IAGNN,UAAU;QACR,IAAIO,SAAS;YACX;QACF;QACA,MAAM,EAAES,SAASC,eAAe,EAAE,GAAGL;QACrCK,gBAAgBC,UAAU;QAE1B,IAAIR,MAAMO,gBAAgBE,OAAO,CAACT;QAElC,OAAO,IAAMO,gBAAgBC,UAAU;IACzC,GAAG;QAACR;QAAMH;KAAQ;IAElB,OAAO;QAACI;QAASH;QAAOE;KAAK;AAC/B,EAAC"}
@@ -1,4 +1,3 @@
1
- import type React from 'react';
2
1
  interface Size {
3
2
  height: number;
4
3
  width: number;
@@ -6,6 +5,6 @@ interface Size {
6
5
  interface Resize {
7
6
  size?: Size;
8
7
  }
9
- export declare const useResize: (ref: React.MutableRefObject<HTMLElement>) => Resize;
8
+ export declare const useResize: (element: HTMLElement) => Resize;
10
9
  export {};
11
10
  //# sourceMappingURL=useResize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useResize.d.ts","sourceRoot":"","sources":["../../src/hooks/useResize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,UAAU,IAAI;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,MAAM;IACd,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ;AAED,eAAO,MAAM,SAAS,QAAS,MAAM,gBAAgB,CAAC,WAAW,CAAC,KAAG,MAsDpE,CAAA"}
1
+ {"version":3,"file":"useResize.d.ts","sourceRoot":"","sources":["../../src/hooks/useResize.ts"],"names":[],"mappings":"AAKA,UAAU,IAAI;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,MAAM;IACd,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ;AAED,eAAO,MAAM,SAAS,YAAa,WAAW,KAAG,MAoDhD,CAAA"}
@@ -1,12 +1,11 @@
1
1
  'use client';
2
2
  import { useEffect, useState } from 'react';
3
- export const useResize = (ref)=>{
3
+ export const useResize = (element)=>{
4
4
  const [size, setSize] = useState();
5
5
  useEffect(()=>{
6
6
  let observer// eslint-disable-line
7
7
  ;
8
- const { current: currentRef } = ref;
9
- if (currentRef) {
8
+ if (element) {
10
9
  observer = new ResizeObserver((entries)=>{
11
10
  entries.forEach((entry)=>{
12
11
  const { contentBoxSize, contentRect } = entry;
@@ -31,15 +30,15 @@ export const useResize = (ref)=>{
31
30
  });
32
31
  });
33
32
  });
34
- observer.observe(currentRef);
33
+ observer.observe(element);
35
34
  }
36
35
  return ()=>{
37
36
  if (observer) {
38
- observer.unobserve(currentRef);
37
+ observer.unobserve(element);
39
38
  }
40
39
  };
41
40
  }, [
42
- ref
41
+ element
43
42
  ]);
44
43
  return {
45
44
  size
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useResize.ts"],"sourcesContent":["'use client'\nimport type React from 'react'\n\nimport { useEffect, useState } from 'react'\n\ninterface Size {\n height: number\n width: number\n}\n\ninterface Resize {\n size?: Size\n}\n\nexport const useResize = (ref: React.MutableRefObject<HTMLElement>): Resize => {\n const [size, setSize] = useState<Size>()\n\n useEffect(() => {\n let observer: any // eslint-disable-line\n\n const { current: currentRef } = ref\n\n if (currentRef) {\n observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const {\n contentBoxSize,\n contentRect, // for Safari iOS compatibility, will be deprecated eventually (see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry/contentRect)\n } = entry\n\n let newWidth = 0\n let newHeight = 0\n\n if (contentBoxSize) {\n const newSize = Array.isArray(contentBoxSize) ? contentBoxSize[0] : contentBoxSize\n\n if (newSize) {\n const { blockSize, inlineSize } = newSize\n newWidth = inlineSize\n newHeight = blockSize\n }\n } else if (contentRect) {\n // see note above for why this block is needed\n const { height, width } = contentRect\n newWidth = width\n newHeight = height\n }\n\n setSize({\n height: newHeight,\n width: newWidth,\n })\n })\n })\n\n observer.observe(currentRef)\n }\n\n return () => {\n if (observer) {\n observer.unobserve(currentRef)\n }\n }\n }, [ref])\n\n return {\n size,\n }\n}\n"],"names":["useEffect","useState","useResize","ref","size","setSize","observer","current","currentRef","ResizeObserver","entries","forEach","entry","contentBoxSize","contentRect","newWidth","newHeight","newSize","Array","isArray","blockSize","inlineSize","height","width","observe","unobserve"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AAGA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAW3C,OAAO,MAAMC,YAAY,CAACC;IACxB,MAAM,CAACC,MAAMC,QAAQ,GAAGJ;IAExBD,UAAU;QACR,IAAIM,QAAc,sBAAsB;;QAExC,MAAM,EAAEC,SAASC,UAAU,EAAE,GAAGL;QAEhC,IAAIK,YAAY;YACdF,WAAW,IAAIG,eAAe,CAACC;gBAC7BA,QAAQC,OAAO,CAAC,CAACC;oBACf,MAAM,EACJC,cAAc,EACdC,WAAW,EACZ,GAAGF;oBAEJ,IAAIG,WAAW;oBACf,IAAIC,YAAY;oBAEhB,IAAIH,gBAAgB;wBAClB,MAAMI,UAAUC,MAAMC,OAAO,CAACN,kBAAkBA,cAAc,CAAC,EAAE,GAAGA;wBAEpE,IAAII,SAAS;4BACX,MAAM,EAAEG,SAAS,EAAEC,UAAU,EAAE,GAAGJ;4BAClCF,WAAWM;4BACXL,YAAYI;wBACd;oBACF,OAAO,IAAIN,aAAa;wBACtB,8CAA8C;wBAC9C,MAAM,EAAEQ,MAAM,EAAEC,KAAK,EAAE,GAAGT;wBAC1BC,WAAWQ;wBACXP,YAAYM;oBACd;oBAEAjB,QAAQ;wBACNiB,QAAQN;wBACRO,OAAOR;oBACT;gBACF;YACF;YAEAT,SAASkB,OAAO,CAAChB;QACnB;QAEA,OAAO;YACL,IAAIF,UAAU;gBACZA,SAASmB,SAAS,CAACjB;YACrB;QACF;IACF,GAAG;QAACL;KAAI;IAER,OAAO;QACLC;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/hooks/useResize.ts"],"sourcesContent":["'use client'\nimport type React from 'react'\n\nimport { useEffect, useState } from 'react'\n\ninterface Size {\n height: number\n width: number\n}\n\ninterface Resize {\n size?: Size\n}\n\nexport const useResize = (element: HTMLElement): Resize => {\n const [size, setSize] = useState<Size>()\n\n useEffect(() => {\n let observer: any // eslint-disable-line\n\n if (element) {\n observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const {\n contentBoxSize,\n contentRect, // for Safari iOS compatibility, will be deprecated eventually (see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry/contentRect)\n } = entry\n\n let newWidth = 0\n let newHeight = 0\n\n if (contentBoxSize) {\n const newSize = Array.isArray(contentBoxSize) ? contentBoxSize[0] : contentBoxSize\n\n if (newSize) {\n const { blockSize, inlineSize } = newSize\n newWidth = inlineSize\n newHeight = blockSize\n }\n } else if (contentRect) {\n // see note above for why this block is needed\n const { height, width } = contentRect\n newWidth = width\n newHeight = height\n }\n\n setSize({\n height: newHeight,\n width: newWidth,\n })\n })\n })\n\n observer.observe(element)\n }\n\n return () => {\n if (observer) {\n observer.unobserve(element)\n }\n }\n }, [element])\n\n return {\n size,\n }\n}\n"],"names":["useEffect","useState","useResize","element","size","setSize","observer","ResizeObserver","entries","forEach","entry","contentBoxSize","contentRect","newWidth","newHeight","newSize","Array","isArray","blockSize","inlineSize","height","width","observe","unobserve"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AAGA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAW3C,OAAO,MAAMC,YAAY,CAACC;IACxB,MAAM,CAACC,MAAMC,QAAQ,GAAGJ;IAExBD,UAAU;QACR,IAAIM,QAAc,sBAAsB;;QAExC,IAAIH,SAAS;YACXG,WAAW,IAAIC,eAAe,CAACC;gBAC7BA,QAAQC,OAAO,CAAC,CAACC;oBACf,MAAM,EACJC,cAAc,EACdC,WAAW,EACZ,GAAGF;oBAEJ,IAAIG,WAAW;oBACf,IAAIC,YAAY;oBAEhB,IAAIH,gBAAgB;wBAClB,MAAMI,UAAUC,MAAMC,OAAO,CAACN,kBAAkBA,cAAc,CAAC,EAAE,GAAGA;wBAEpE,IAAII,SAAS;4BACX,MAAM,EAAEG,SAAS,EAAEC,UAAU,EAAE,GAAGJ;4BAClCF,WAAWM;4BACXL,YAAYI;wBACd;oBACF,OAAO,IAAIN,aAAa;wBACtB,8CAA8C;wBAC9C,MAAM,EAAEQ,MAAM,EAAEC,KAAK,EAAE,GAAGT;wBAC1BC,WAAWQ;wBACXP,YAAYM;oBACd;oBAEAf,QAAQ;wBACNe,QAAQN;wBACRO,OAAOR;oBACT;gBACF;YACF;YAEAP,SAASgB,OAAO,CAACnB;QACnB;QAEA,OAAO;YACL,IAAIG,UAAU;gBACZA,SAASiB,SAAS,CAACpB;YACrB;QACF;IACF,GAAG;QAACA;KAAQ;IAEZ,OAAO;QACLC;IACF;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAM3D,OAAO,KAAsE,MAAM,OAAO,CAAA;AAU1F,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAA;IAClD,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;CAChB,CAAA;AAMD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAkThE,CAAA;AAED,eAAO,MAAM,OAAO,wBAAwB,YAAY,CAAC,CAA0C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAM3D,OAAO,KAAsE,MAAM,OAAO,CAAA;AAU1F,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAA;IAClD,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;CAChB,CAAA;AAMD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAgThE,CAAA;AAED,eAAO,MAAM,OAAO,wBAAwB,YAAY,CAAC,CAA0C,CAAA"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import * as facelessUIImport from '@faceless-ui/modal';
3
+ import { useModal } from '@faceless-ui/modal';
4
4
  import { usePathname, useRouter } from 'next/navigation.js';
5
5
  import qs from 'qs';
6
6
  import React, { createContext, useCallback, useContext, useEffect, useState } from 'react';
@@ -14,7 +14,6 @@ import { useSearchParams } from '../SearchParams/index.js';
14
14
  const Context = /*#__PURE__*/ createContext({});
15
15
  const maxTimeoutTime = 2147483647;
16
16
  export const AuthProvider = ({ children })=>{
17
- const { useModal } = facelessUIImport;
18
17
  const { searchParams } = useSearchParams();
19
18
  const [user, setUser] = useState();
20
19
  const [tokenInMemory, setTokenInMemory] = useState();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, Permissions } from 'payload/auth'\nimport type { MeOperationResult } from 'payload/types'\n\nimport * as facelessUIImport from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport qs from 'qs'\nimport React, { createContext, useCallback, useContext, useEffect, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { useConfig } from '../Config/index.js'\nimport { useSearchParams } from '../SearchParams/index.js'\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<void>\n logOut: () => void\n permissions?: Permissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: Permissions) => void\n setUser: (user: T) => void\n token?: string\n user?: T | null\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutTime = 2147483647\n\nexport const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const { useModal } = facelessUIImport\n\n const { searchParams } = useSearchParams()\n const [user, setUser] = useState<ClientUser | null>()\n const [tokenInMemory, setTokenInMemory] = useState<string>()\n const [tokenExpiration, setTokenExpiration] = useState<number>()\n const pathname = usePathname()\n const router = useRouter()\n // const { code } = useLocale()\n const code = 'en' // TODO: re-enable i18n asap\n\n const config = useConfig()\n\n const {\n admin: {\n autoLogin,\n routes: { inactivity: logoutInactivityRoute },\n routes: { login: loginRoute },\n user: userSlug,\n },\n routes: { admin, api },\n serverURL,\n } = config\n\n const [permissions, setPermissions] = useState<Permissions>()\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const [lastLocationChange, setLastLocationChange] = useState(0)\n const debouncedLocationChange = useDebounce(lastLocationChange, 10000)\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n if (window.location.pathname.startsWith(admin)) {\n const redirectParam = `?redirect=${encodeURIComponent(window.location.pathname)}`\n router.replace(`${admin}${logoutInactivityRoute}${redirectParam}`)\n } else {\n router.replace(`${admin}${logoutInactivityRoute}`)\n }\n closeAllModals()\n }, [router, admin, logoutInactivityRoute, closeAllModals])\n\n const revokeTokenAndExpire = useCallback(() => {\n setTokenInMemory(undefined)\n setTokenExpiration(undefined)\n }, [])\n\n const setTokenAndExpiration = useCallback(\n (json) => {\n const token = json?.token || json?.refreshedToken\n if (token && json?.exp) {\n setTokenInMemory(token)\n setTokenExpiration(json.exp)\n } else {\n revokeTokenAndExpire()\n }\n },\n [revokeTokenAndExpire],\n )\n\n const refreshCookie = useCallback(\n (forceRefresh?: boolean) => {\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = (typeof tokenExpiration === 'number' ? tokenExpiration : 0) - now\n\n if (forceRefresh || (tokenExpiration && remainingTime < 120)) {\n setTimeout(async () => {\n try {\n const request = await requests.post(`${serverURL}${api}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json = await request.json()\n setUser(json.user)\n\n setTokenAndExpiration(json)\n } else {\n setUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }, 1000)\n }\n },\n [\n tokenExpiration,\n serverURL,\n api,\n userSlug,\n i18n,\n redirectToInactivityRoute,\n setTokenAndExpiration,\n ],\n )\n\n const refreshCookieAsync = useCallback(\n async (skipSetUser?: boolean): Promise<ClientUser> => {\n try {\n const request = await requests.post(`${serverURL}${api}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json = await request.json()\n if (!skipSetUser) {\n setUser(json.user)\n setTokenAndExpiration(json)\n }\n return json.user\n }\n\n setUser(null)\n redirectToInactivityRoute()\n return null\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n return null\n }\n },\n [serverURL, api, userSlug, i18n, redirectToInactivityRoute, setTokenAndExpiration],\n )\n\n const logOut = useCallback(async () => {\n setUser(null)\n revokeTokenAndExpire()\n try {\n await requests.post(`${serverURL}${api}/${userSlug}/logout`)\n } catch (e) {\n toast.error(`Logging out failed: ${e.message}`)\n }\n }, [serverURL, api, userSlug, revokeTokenAndExpire])\n\n const refreshPermissions = useCallback(async () => {\n const params = {\n locale: code,\n }\n\n try {\n const request = await requests.get(`${serverURL}${api}/access?${qs.stringify(params)}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: Permissions = await request.json()\n setPermissions(json)\n } else {\n throw new Error(`Fetching permissions failed with status code ${request.status}`)\n }\n } catch (e) {\n toast.error(`Refreshing permissions failed: ${e.message}`)\n }\n }, [serverURL, api, i18n, code])\n\n const fetchFullUser = React.useCallback(async () => {\n try {\n const request = await requests.get(`${serverURL}${api}/${userSlug}/me`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: MeOperationResult = await request.json()\n\n if (json?.user) {\n setUser(json.user)\n\n if (json?.token) {\n setTokenAndExpiration(json)\n }\n } else if (autoLogin && autoLogin.prefillOnly !== true) {\n // auto log-in with the provided autoLogin credentials. This is used in dev mode\n // so you don't have to log in over and over again\n const autoLoginResult = await requests.post(\n `${serverURL}${api}/${userSlug}${loginRoute}`,\n {\n body: JSON.stringify({\n email: autoLogin.email,\n password: autoLogin.password,\n }),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n },\n )\n if (autoLoginResult.status === 200) {\n const autoLoginJson = await autoLoginResult.json()\n setUser(autoLoginJson.user)\n if (autoLoginJson?.token) {\n setTokenAndExpiration(autoLoginJson)\n }\n router.replace(\n typeof searchParams['redirect'] === 'string' ? searchParams['redirect'] : admin,\n )\n } else {\n setUser(null)\n revokeTokenAndExpire()\n }\n } else {\n setUser(null)\n revokeTokenAndExpire()\n }\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n }, [\n serverURL,\n api,\n userSlug,\n i18n.language,\n autoLogin,\n setTokenAndExpiration,\n router,\n searchParams,\n admin,\n revokeTokenAndExpire,\n loginRoute,\n ])\n\n // On mount, get user and set\n useEffect(() => {\n void fetchFullUser()\n }, [fetchFullUser])\n\n // When location changes, refresh cookie\n useEffect(() => {\n if (id) {\n refreshCookie()\n }\n }, [debouncedLocationChange, refreshCookie, id])\n\n useEffect(() => {\n setLastLocationChange(Date.now())\n }, [pathname])\n\n useEffect(() => {\n let reminder: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n reminder = setTimeout(\n () => {\n openModal(stayLoggedInModalSlug)\n },\n Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime)),\n )\n }\n\n return () => {\n if (reminder) clearTimeout(reminder)\n }\n }, [tokenExpiration, openModal])\n\n useEffect(() => {\n let forceLogOut: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n forceLogOut = setTimeout(\n () => {\n setUser(null)\n revokeTokenAndExpire()\n redirectToInactivityRoute()\n },\n Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0),\n )\n }\n\n return () => {\n if (forceLogOut) clearTimeout(forceLogOut)\n }\n }, [tokenExpiration, closeAllModals, i18n, redirectToInactivityRoute, revokeTokenAndExpire])\n\n return (\n <Context.Provider\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser,\n token: tokenInMemory,\n user,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nexport const useAuth = <T = ClientUser,>(): AuthContext<T> => useContext(Context) as AuthContext<T>\n"],"names":["facelessUIImport","usePathname","useRouter","qs","React","createContext","useCallback","useContext","useEffect","useState","toast","stayLoggedInModalSlug","useDebounce","useTranslation","requests","useConfig","useSearchParams","Context","maxTimeoutTime","AuthProvider","children","useModal","searchParams","user","setUser","tokenInMemory","setTokenInMemory","tokenExpiration","setTokenExpiration","pathname","router","code","config","admin","autoLogin","routes","inactivity","logoutInactivityRoute","login","loginRoute","userSlug","api","serverURL","permissions","setPermissions","i18n","closeAllModals","openModal","lastLocationChange","setLastLocationChange","debouncedLocationChange","id","redirectToInactivityRoute","window","location","startsWith","redirectParam","encodeURIComponent","replace","revokeTokenAndExpire","undefined","setTokenAndExpiration","json","token","refreshedToken","exp","refreshCookie","forceRefresh","now","Math","round","Date","getTime","remainingTime","setTimeout","request","post","headers","language","status","e","error","message","refreshCookieAsync","skipSetUser","logOut","refreshPermissions","params","locale","get","stringify","Error","fetchFullUser","prefillOnly","autoLoginResult","body","JSON","email","password","autoLoginJson","reminder","max","min","clearTimeout","forceLogOut","Provider","value","useAuth"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, Permissions } from 'payload/auth'\nimport type { MeOperationResult } from 'payload/types'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport qs from 'qs'\nimport React, { createContext, useCallback, useContext, useEffect, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { useConfig } from '../Config/index.js'\nimport { useSearchParams } from '../SearchParams/index.js'\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<void>\n logOut: () => void\n permissions?: Permissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: Permissions) => void\n setUser: (user: T) => void\n token?: string\n user?: T | null\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutTime = 2147483647\n\nexport const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const { searchParams } = useSearchParams()\n const [user, setUser] = useState<ClientUser | null>()\n const [tokenInMemory, setTokenInMemory] = useState<string>()\n const [tokenExpiration, setTokenExpiration] = useState<number>()\n const pathname = usePathname()\n const router = useRouter()\n // const { code } = useLocale()\n const code = 'en' // TODO: re-enable i18n asap\n\n const config = useConfig()\n\n const {\n admin: {\n autoLogin,\n routes: { inactivity: logoutInactivityRoute },\n routes: { login: loginRoute },\n user: userSlug,\n },\n routes: { admin, api },\n serverURL,\n } = config\n\n const [permissions, setPermissions] = useState<Permissions>()\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const [lastLocationChange, setLastLocationChange] = useState(0)\n const debouncedLocationChange = useDebounce(lastLocationChange, 10000)\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n if (window.location.pathname.startsWith(admin)) {\n const redirectParam = `?redirect=${encodeURIComponent(window.location.pathname)}`\n router.replace(`${admin}${logoutInactivityRoute}${redirectParam}`)\n } else {\n router.replace(`${admin}${logoutInactivityRoute}`)\n }\n closeAllModals()\n }, [router, admin, logoutInactivityRoute, closeAllModals])\n\n const revokeTokenAndExpire = useCallback(() => {\n setTokenInMemory(undefined)\n setTokenExpiration(undefined)\n }, [])\n\n const setTokenAndExpiration = useCallback(\n (json) => {\n const token = json?.token || json?.refreshedToken\n if (token && json?.exp) {\n setTokenInMemory(token)\n setTokenExpiration(json.exp)\n } else {\n revokeTokenAndExpire()\n }\n },\n [revokeTokenAndExpire],\n )\n\n const refreshCookie = useCallback(\n (forceRefresh?: boolean) => {\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = (typeof tokenExpiration === 'number' ? tokenExpiration : 0) - now\n\n if (forceRefresh || (tokenExpiration && remainingTime < 120)) {\n setTimeout(async () => {\n try {\n const request = await requests.post(`${serverURL}${api}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json = await request.json()\n setUser(json.user)\n\n setTokenAndExpiration(json)\n } else {\n setUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }, 1000)\n }\n },\n [\n tokenExpiration,\n serverURL,\n api,\n userSlug,\n i18n,\n redirectToInactivityRoute,\n setTokenAndExpiration,\n ],\n )\n\n const refreshCookieAsync = useCallback(\n async (skipSetUser?: boolean): Promise<ClientUser> => {\n try {\n const request = await requests.post(`${serverURL}${api}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json = await request.json()\n if (!skipSetUser) {\n setUser(json.user)\n setTokenAndExpiration(json)\n }\n return json.user\n }\n\n setUser(null)\n redirectToInactivityRoute()\n return null\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n return null\n }\n },\n [serverURL, api, userSlug, i18n, redirectToInactivityRoute, setTokenAndExpiration],\n )\n\n const logOut = useCallback(async () => {\n setUser(null)\n revokeTokenAndExpire()\n try {\n await requests.post(`${serverURL}${api}/${userSlug}/logout`)\n } catch (e) {\n toast.error(`Logging out failed: ${e.message}`)\n }\n }, [serverURL, api, userSlug, revokeTokenAndExpire])\n\n const refreshPermissions = useCallback(async () => {\n const params = {\n locale: code,\n }\n\n try {\n const request = await requests.get(`${serverURL}${api}/access?${qs.stringify(params)}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: Permissions = await request.json()\n setPermissions(json)\n } else {\n throw new Error(`Fetching permissions failed with status code ${request.status}`)\n }\n } catch (e) {\n toast.error(`Refreshing permissions failed: ${e.message}`)\n }\n }, [serverURL, api, i18n, code])\n\n const fetchFullUser = React.useCallback(async () => {\n try {\n const request = await requests.get(`${serverURL}${api}/${userSlug}/me`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: MeOperationResult = await request.json()\n\n if (json?.user) {\n setUser(json.user)\n\n if (json?.token) {\n setTokenAndExpiration(json)\n }\n } else if (autoLogin && autoLogin.prefillOnly !== true) {\n // auto log-in with the provided autoLogin credentials. This is used in dev mode\n // so you don't have to log in over and over again\n const autoLoginResult = await requests.post(\n `${serverURL}${api}/${userSlug}${loginRoute}`,\n {\n body: JSON.stringify({\n email: autoLogin.email,\n password: autoLogin.password,\n }),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n },\n )\n if (autoLoginResult.status === 200) {\n const autoLoginJson = await autoLoginResult.json()\n setUser(autoLoginJson.user)\n if (autoLoginJson?.token) {\n setTokenAndExpiration(autoLoginJson)\n }\n router.replace(\n typeof searchParams['redirect'] === 'string' ? searchParams['redirect'] : admin,\n )\n } else {\n setUser(null)\n revokeTokenAndExpire()\n }\n } else {\n setUser(null)\n revokeTokenAndExpire()\n }\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n }, [\n serverURL,\n api,\n userSlug,\n i18n.language,\n autoLogin,\n setTokenAndExpiration,\n router,\n searchParams,\n admin,\n revokeTokenAndExpire,\n loginRoute,\n ])\n\n // On mount, get user and set\n useEffect(() => {\n void fetchFullUser()\n }, [fetchFullUser])\n\n // When location changes, refresh cookie\n useEffect(() => {\n if (id) {\n refreshCookie()\n }\n }, [debouncedLocationChange, refreshCookie, id])\n\n useEffect(() => {\n setLastLocationChange(Date.now())\n }, [pathname])\n\n useEffect(() => {\n let reminder: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n reminder = setTimeout(\n () => {\n openModal(stayLoggedInModalSlug)\n },\n Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime)),\n )\n }\n\n return () => {\n if (reminder) clearTimeout(reminder)\n }\n }, [tokenExpiration, openModal])\n\n useEffect(() => {\n let forceLogOut: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n forceLogOut = setTimeout(\n () => {\n setUser(null)\n revokeTokenAndExpire()\n redirectToInactivityRoute()\n },\n Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0),\n )\n }\n\n return () => {\n if (forceLogOut) clearTimeout(forceLogOut)\n }\n }, [tokenExpiration, closeAllModals, i18n, redirectToInactivityRoute, revokeTokenAndExpire])\n\n return (\n <Context.Provider\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser,\n token: tokenInMemory,\n user,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nexport const useAuth = <T = ClientUser,>(): AuthContext<T> => useContext(Context) as AuthContext<T>\n"],"names":["useModal","usePathname","useRouter","qs","React","createContext","useCallback","useContext","useEffect","useState","toast","stayLoggedInModalSlug","useDebounce","useTranslation","requests","useConfig","useSearchParams","Context","maxTimeoutTime","AuthProvider","children","searchParams","user","setUser","tokenInMemory","setTokenInMemory","tokenExpiration","setTokenExpiration","pathname","router","code","config","admin","autoLogin","routes","inactivity","logoutInactivityRoute","login","loginRoute","userSlug","api","serverURL","permissions","setPermissions","i18n","closeAllModals","openModal","lastLocationChange","setLastLocationChange","debouncedLocationChange","id","redirectToInactivityRoute","window","location","startsWith","redirectParam","encodeURIComponent","replace","revokeTokenAndExpire","undefined","setTokenAndExpiration","json","token","refreshedToken","exp","refreshCookie","forceRefresh","now","Math","round","Date","getTime","remainingTime","setTimeout","request","post","headers","language","status","e","error","message","refreshCookieAsync","skipSetUser","logOut","refreshPermissions","params","locale","get","stringify","Error","fetchFullUser","prefillOnly","autoLoginResult","body","JSON","email","password","autoLoginJson","reminder","max","min","clearTimeout","forceLogOut","Provider","value","useAuth"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../../src/providers/ComponentMap/buildComponentMap/fields.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,KAAK,EAEV,KAAK,EAEL,aAAa,EAGb,eAAe,EAChB,MAAM,eAAe,CAAA;AA0BtB,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,KAAK,EAEV,QAAQ,EAIT,MAAM,YAAY,CAAA;AAKnB,eAAO,MAAM,SAAS,SAAU;IAC9B,mBAAmB,EAAE,+BAA+B,CAAA;IACpD,MAAM,EAAE,eAAe,CAAA;IACvB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,EAAE,aAAa,EAAE,CAAA;IAC5B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;IAClC,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,aAwuBA,CAAA"}
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../../src/providers/ComponentMap/buildComponentMap/fields.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,KAAK,EAEV,KAAK,EAEL,aAAa,EAGb,eAAe,EAChB,MAAM,eAAe,CAAA;AA2BtB,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,KAAK,EAEV,QAAQ,EAIT,MAAM,YAAY,CAAA;AAKnB,eAAO,MAAM,SAAS,SAAU;IAC9B,mBAAmB,EAAE,+BAA+B,CAAA;IACpD,MAAM,EAAE,eAAe,CAAA;IACvB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,EAAE,aAAa,EAAE,CAAA;IAC5B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;IAClC,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,aA2uBA,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { MissingEditorProp } from 'payload/errors';
2
3
  import { fieldAffectsData, fieldIsPresentationalOnly } from 'payload/types';
3
4
  import React, { Fragment } from 'react';
4
5
  import { HiddenInput } from '../../../fields/HiddenInput/index.js';
@@ -429,6 +430,10 @@ export const mapFields = (args)=>{
429
430
  style: field.admin?.style,
430
431
  width: field.admin?.width
431
432
  };
433
+ if (!field?.editor) {
434
+ throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
435
+ ;
436
+ }
432
437
  if (typeof field?.editor === 'function') {
433
438
  throw new Error('Attempted to access unsanitized rich text editor.');
434
439
  }