@payloadcms/ui 4.0.0-beta.5 → 4.0.0-beta.6

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 (131) hide show
  1. package/dist/css/utilities.css +1 -0
  2. package/dist/elements/AddNewRelation/index.d.ts.map +1 -1
  3. package/dist/elements/AddNewRelation/index.js +4 -0
  4. package/dist/elements/AddNewRelation/index.js.map +1 -1
  5. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  6. package/dist/elements/AppHeader/index.js +2 -0
  7. package/dist/elements/AppHeader/index.js.map +1 -1
  8. package/dist/elements/Collapsible/index.css +1 -1
  9. package/dist/elements/ColumnSelection/Popup.css +2 -2
  10. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  11. package/dist/elements/DocumentDrawer/DrawerContent.js +15 -9
  12. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  13. package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
  14. package/dist/elements/DocumentHeader/Tabs/index.js +10 -8
  15. package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
  16. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts.map +1 -1
  17. package/dist/elements/FileDetails/DraggableFileDetails/index.js +19 -12
  18. package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -1
  19. package/dist/elements/FileDetails/StaticFileDetails/index.d.ts.map +1 -1
  20. package/dist/elements/FileDetails/StaticFileDetails/index.js +63 -33
  21. package/dist/elements/FileDetails/StaticFileDetails/index.js.map +1 -1
  22. package/dist/elements/FileManager/index.d.ts.map +1 -1
  23. package/dist/elements/FileManager/index.js +18 -11
  24. package/dist/elements/FileManager/index.js.map +1 -1
  25. package/dist/elements/FilterTrigger/index.d.ts.map +1 -1
  26. package/dist/elements/FilterTrigger/index.js +80 -44
  27. package/dist/elements/FilterTrigger/index.js.map +1 -1
  28. package/dist/elements/ListControls/index.css +1 -0
  29. package/dist/elements/ListControls/index.d.ts.map +1 -1
  30. package/dist/elements/ListControls/index.js +7 -4
  31. package/dist/elements/ListControls/index.js.map +1 -1
  32. package/dist/elements/ListControls/types.d.ts +1 -0
  33. package/dist/elements/ListControls/types.d.ts.map +1 -1
  34. package/dist/elements/ListControls/types.js.map +1 -1
  35. package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  36. package/dist/elements/ListDrawer/DrawerContent.js +18 -12
  37. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  38. package/dist/elements/LivePreview/Toolbar/index.d.ts.map +1 -1
  39. package/dist/elements/LivePreview/Toolbar/index.js +13 -7
  40. package/dist/elements/LivePreview/Toolbar/index.js.map +1 -1
  41. package/dist/elements/Nav/NavSidebarToggle/index.d.ts.map +1 -1
  42. package/dist/elements/Nav/NavSidebarToggle/index.js +26 -37
  43. package/dist/elements/Nav/NavSidebarToggle/index.js.map +1 -1
  44. package/dist/elements/Nav/SidebarTabs/index.client.d.ts.map +1 -1
  45. package/dist/elements/Nav/SidebarTabs/index.client.js +9 -2
  46. package/dist/elements/Nav/SidebarTabs/index.client.js.map +1 -1
  47. package/dist/elements/Nav/SidebarTabs/index.css +1 -1
  48. package/dist/elements/Nav/context.d.ts +1 -0
  49. package/dist/elements/Nav/context.d.ts.map +1 -1
  50. package/dist/elements/Nav/context.js +2 -0
  51. package/dist/elements/Nav/context.js.map +1 -1
  52. package/dist/elements/Nav/getNavPrefs.d.ts.map +1 -1
  53. package/dist/elements/Nav/getNavPrefs.js +7 -2
  54. package/dist/elements/Nav/getNavPrefs.js.map +1 -1
  55. package/dist/elements/Nav/index.css +11 -0
  56. package/dist/elements/Popup/PopupButtonList/index.css +1 -1
  57. package/dist/elements/PreviewButton/index.d.ts.map +1 -1
  58. package/dist/elements/PreviewButton/index.js +4 -0
  59. package/dist/elements/PreviewButton/index.js.map +1 -1
  60. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts.map +1 -1
  61. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js +1 -0
  62. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js.map +1 -1
  63. package/dist/elements/ReactSelect/MultiValue/index.css +1 -1
  64. package/dist/elements/ReactSelect/index.css +4 -2
  65. package/dist/elements/ReactSelect/index.d.ts.map +1 -1
  66. package/dist/elements/ReactSelect/index.js +8 -3
  67. package/dist/elements/ReactSelect/index.js.map +1 -1
  68. package/dist/elements/SchedulePublishButton/index.d.ts.map +1 -1
  69. package/dist/elements/SchedulePublishButton/index.js +4 -0
  70. package/dist/elements/SchedulePublishButton/index.js.map +1 -1
  71. package/dist/elements/Search/SearchInput/index.css +32 -3
  72. package/dist/elements/SegmentedControl/index.css +1 -1
  73. package/dist/elements/SidebarToggle/index.css +1 -1
  74. package/dist/elements/SortColumn/index.css +49 -5
  75. package/dist/elements/SortRow/index.css +1 -3
  76. package/dist/elements/SortRow/index.d.ts.map +1 -1
  77. package/dist/elements/SortRow/index.js +16 -10
  78. package/dist/elements/SortRow/index.js.map +1 -1
  79. package/dist/elements/StepNav/index.d.ts.map +1 -1
  80. package/dist/elements/StepNav/index.js +4 -1
  81. package/dist/elements/StepNav/index.js.map +1 -1
  82. package/dist/elements/Tabs/index.css +1 -1
  83. package/dist/elements/TimezonePicker/index.css +6 -5
  84. package/dist/elements/TimezonePicker/index.d.ts.map +1 -1
  85. package/dist/elements/TimezonePicker/index.js +80 -43
  86. package/dist/elements/TimezonePicker/index.js.map +1 -1
  87. package/dist/elements/Upload/index.js +2 -0
  88. package/dist/elements/Upload/index.js.map +1 -1
  89. package/dist/elements/UploadDropzoneContent/index.d.ts.map +1 -1
  90. package/dist/elements/UploadDropzoneContent/index.js +1 -0
  91. package/dist/elements/UploadDropzoneContent/index.js.map +1 -1
  92. package/dist/elements/UserMenu/index.css +1 -1
  93. package/dist/exports/client/{DatePicker-AZBZPMY6.js → DatePicker-DJN2NVQC.js} +2 -2
  94. package/dist/exports/client/chunk-GQEFXRCN.js +29 -0
  95. package/dist/exports/client/{chunk-ZP2PB6M4.js.map → chunk-GQEFXRCN.js.map} +4 -4
  96. package/dist/exports/client/index.js +27 -27
  97. package/dist/exports/client/index.js.map +4 -4
  98. package/dist/fields/Blocks/SectionTitle/index.css +21 -2
  99. package/dist/fields/DateTime/index.js +1 -1
  100. package/dist/fields/DateTime/index.js.map +1 -1
  101. package/dist/fields/Upload/Input.d.ts.map +1 -1
  102. package/dist/fields/Upload/Input.js +1 -0
  103. package/dist/fields/Upload/Input.js.map +1 -1
  104. package/dist/fields/Upload/RelationshipContent/index.css +1 -1
  105. package/dist/forms/Form/index.d.ts.map +1 -1
  106. package/dist/forms/Form/index.js +9 -7
  107. package/dist/forms/Form/index.js.map +1 -1
  108. package/dist/providers/ListQuery/index.d.ts.map +1 -1
  109. package/dist/providers/ListQuery/index.js +17 -1
  110. package/dist/providers/ListQuery/index.js.map +1 -1
  111. package/dist/styles.css +2 -1
  112. package/dist/views/List/index.client.d.ts.map +1 -1
  113. package/dist/views/List/index.client.js +15 -9
  114. package/dist/views/List/index.client.js.map +1 -1
  115. package/dist/views/Version/Default/index.d.ts.map +1 -1
  116. package/dist/views/Version/Default/index.js +6 -9
  117. package/dist/views/Version/Default/index.js.map +1 -1
  118. package/dist/views/Version/Default/types.d.ts +0 -1
  119. package/dist/views/Version/Default/types.d.ts.map +1 -1
  120. package/dist/views/Version/Default/types.js.map +1 -1
  121. package/dist/views/Version/Restore/index.css +0 -11
  122. package/dist/views/Version/Restore/index.d.ts +0 -1
  123. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  124. package/dist/views/Version/Restore/index.js +87 -115
  125. package/dist/views/Version/Restore/index.js.map +1 -1
  126. package/dist/views/Version/index.d.ts.map +1 -1
  127. package/dist/views/Version/index.js +1 -2
  128. package/dist/views/Version/index.js.map +1 -1
  129. package/package.json +4 -4
  130. package/dist/exports/client/chunk-ZP2PB6M4.js +0 -29
  131. /package/dist/exports/client/{DatePicker-AZBZPMY6.js.map → DatePicker-DJN2NVQC.js.map} +0 -0
@@ -3,7 +3,7 @@
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  import { useWindowInfo } from '@faceless-ui/window-info';
6
- import React, { Fragment, useEffect, useRef, useState } from 'react';
6
+ import React, { Fragment, useEffect, useId, useRef, useState } from 'react';
7
7
  import { Popup, PopupList } from '../../elements/Popup/index.js';
8
8
  import { ChevronIcon } from '../../icons/Chevron/index.js';
9
9
  import { Dots } from '../../icons/Dots/index.js';
@@ -44,11 +44,14 @@ export const ListControls = props => {
44
44
  queryPresetPermissions,
45
45
  renderedFilters,
46
46
  resolvedFilterOptions,
47
- viewType
47
+ viewType,
48
+ wherePanelID: wherePanelIDFromProps
48
49
  } = props;
49
50
  const enableColumns = t0 === undefined ? true : t0;
50
51
  const enableFilters = t1 === undefined ? true : t1;
51
52
  const enableSort = t2 === undefined ? false : t2;
53
+ const instanceID = useId();
54
+ const wherePanelID = wherePanelIDFromProps ?? `${baseClass}-where-${instanceID}`;
52
55
  const isControlled = typeof onWhereToggle === "function";
53
56
  const {
54
57
  handleSearchChange,
@@ -132,7 +135,7 @@ export const ListControls = props => {
132
135
  buttonStyle: "secondary",
133
136
  className: `${baseClass}__toggle-where`,
134
137
  extraButtonProps: {
135
- "aria-controls": `${baseClass}-where`,
138
+ "aria-controls": wherePanelID,
136
139
  "aria-expanded": isWhereOpen
137
140
  },
138
141
  icon: _jsx(ChevronIcon, {
@@ -190,7 +193,7 @@ export const ListControls = props => {
190
193
  })]
191
194
  }), !isControlled && isWhereOpen && _jsx("div", {
192
195
  className: `${baseClass}__where`,
193
- id: `${baseClass}-where`,
196
+ id: wherePanelID,
194
197
  children: _jsx(ListWhereBuilder, {
195
198
  collectionPluralLabel: collectionConfig?.labels?.plural,
196
199
  collectionSlug: collectionConfig.slug,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useWindowInfo","React","Fragment","useEffect","useRef","useState","Popup","PopupList","ChevronIcon","Dots","useListQuery","useTranslation","Button","ListColumnSelectionButton","ListGroupByButton","ListEmptyTrashButton","ListWhereBuilder","QueryPresetBar","ListSearchFilter","baseClass","ListControls","props","$","beforeActions","collectionConfig","collectionSlug","disableQueryPresets","enableColumns","t0","enableFilters","t1","enableSort","t2","hasCreatePermission","hasDeletePermission","isWhereOpen","isWhereOpenFromProps","layoutToggle","listMenuItems","newDocumentURL","onWhereToggle","queryPreset","activePreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","viewType","undefined","isControlled","handleSearchChange","hasActiveFilters","query","setSearchInput","t","breakpoints","t3","s","smallBreak","searchLabelTranslated","label","split","hasWhereParam","Boolean","where","visibleDrawer","setVisibleDrawer","t4","current","t5","t6","t7","handleWhereToggle","_jsxs","className","children","_jsx","onSearchChange","onSearchInputChange","searchQueryParam","search","enableQueryPresets","buttonStyle","extraButtonProps","icon","direction","size","onClick","selected","slug","fields","el","id","to","trash","Array","isArray","length","button","ariaLabel","horizontalAlign","popupType","verticalAlign","ButtonGroup","map","_temp","collectionPluralLabel","labels","plural","onEmptyRemove","item","i"],"sources":["../../../src/elements/ListControls/index.tsx"],"sourcesContent":["'use client'\n\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport React, { Fragment, useEffect, useRef, useState } from 'react'\n\nimport type { ListControlsProps } from './types.js'\n\nimport { Popup, PopupList } from '../../elements/Popup/index.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { Dots } from '../../icons/Dots/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { ListColumnSelectionButton } from '../ListColumnSelectionButton/index.js'\nimport { ListGroupByButton } from '../ListGroupByButton/index.js'\nimport { ListEmptyTrashButton } from '../ListHeader/TitleActions/index.js'\nimport { ListWhereBuilder } from '../ListWhereBuilder/index.js'\nimport { QueryPresetBar } from '../QueryPresets/QueryPresetBar/index.js'\nimport { ListSearchFilter } from '../Search/ListSearchFilter/index.js'\nimport './index.css'\n\nconst baseClass = 'list-controls'\n\n/**\n * The ListControls component is used to render the controls (search, filter, where)\n * for a collection's list view. You can find those directly above the table which lists\n * the collection's documents.\n */\nexport const ListControls: React.FC<ListControlsProps> = (props) => {\n const {\n beforeActions,\n collectionConfig,\n collectionSlug,\n disableQueryPresets,\n enableColumns = true,\n enableFilters = true,\n enableSort = false,\n hasCreatePermission,\n hasDeletePermission,\n isWhereOpen: isWhereOpenFromProps,\n layoutToggle,\n listMenuItems,\n newDocumentURL,\n onWhereToggle,\n queryPreset: activePreset,\n queryPresetPermissions,\n renderedFilters,\n resolvedFilterOptions,\n viewType,\n } = props\n\n const isControlled = typeof onWhereToggle === 'function'\n\n const { handleSearchChange, hasActiveFilters, query, setSearchInput } = useListQuery()\n\n const { t } = useTranslation()\n\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n // Simplified placeholder - just \"Search\" instead of \"Search by X, Y, Z\"\n const searchLabelTranslated = t('general:searchBy', { label: '' }).split(' ')[0]\n\n const hasWhereParam = useRef(Boolean(query?.where))\n\n const [visibleDrawer, setVisibleDrawer] = useState<'columns' | 'sort' | 'where'>(\n hasActiveFilters ? 'where' : undefined,\n )\n\n useEffect(() => {\n if (hasWhereParam.current && !query?.where) {\n hasWhereParam.current = false\n } else if (query?.where) {\n hasWhereParam.current = true\n }\n }, [setVisibleDrawer, query?.where])\n\n const isWhereOpen = isControlled ? Boolean(isWhereOpenFromProps) : visibleDrawer === 'where'\n const handleWhereToggle = isControlled\n ? onWhereToggle\n : () => setVisibleDrawer(visibleDrawer !== 'where' ? 'where' : undefined)\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__search-row`}>\n <div className={`${baseClass}__left`}>\n <ListSearchFilter\n key={collectionSlug}\n label={searchLabelTranslated}\n onSearchChange={handleSearchChange}\n onSearchInputChange={setSearchInput}\n searchQueryParam={query?.search}\n />\n {collectionConfig?.enableQueryPresets && !disableQueryPresets && (\n <QueryPresetBar\n activePreset={activePreset}\n collectionSlug={collectionSlug}\n queryPresetPermissions={queryPresetPermissions}\n />\n )}\n </div>\n <div className={`${baseClass}__spacer`} />\n <div className={`${baseClass}__actions`}>\n {!smallBreak && beforeActions}\n {enableFilters && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__toggle-where`}\n extraButtonProps={{\n 'aria-controls': `${baseClass}-where`,\n 'aria-expanded': isWhereOpen,\n }}\n icon={<ChevronIcon direction={isWhereOpen ? 'up' : 'down'} size={16} />}\n id=\"toggle-list-filters\"\n onClick={handleWhereToggle}\n selected={isWhereOpen || hasActiveFilters}\n size=\"medium\"\n >\n {t('general:filters')}\n </Button>\n )}\n <ListGroupByButton\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig.fields}\n />\n {enableColumns && <ListColumnSelectionButton collectionSlug={collectionConfig.slug} />}\n {enableSort && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__toggle-sort`}\n extraButtonProps={{\n 'aria-controls': `${baseClass}-sort`,\n 'aria-expanded': visibleDrawer === 'sort',\n }}\n icon={<ChevronIcon size={16} />}\n id=\"toggle-list-sort\"\n onClick={() => setVisibleDrawer(visibleDrawer !== 'sort' ? 'sort' : undefined)}\n size=\"medium\"\n >\n {t('general:sort')}\n </Button>\n )}\n {layoutToggle}\n {hasCreatePermission && newDocumentURL && (\n <Button\n buttonStyle=\"primary\"\n className={`${baseClass}__create-new`}\n el=\"link\"\n id=\"create-new-doc\"\n size=\"medium\"\n to={newDocumentURL}\n >\n {t('general:createNew')}\n </Button>\n )}\n {hasDeletePermission && collectionConfig.trash && viewType === 'trash' && (\n <ListEmptyTrashButton\n collectionConfig={collectionConfig}\n hasDeletePermission={hasDeletePermission}\n />\n )}\n {listMenuItems && Array.isArray(listMenuItems) && listMenuItems.length > 0 && (\n <Popup\n button={<Dots ariaLabel={t('general:moreOptions')} />}\n className={`${baseClass}__popup`}\n horizontalAlign=\"right\"\n id=\"list-menu\"\n popupType=\"menu\"\n verticalAlign=\"bottom\"\n >\n <PopupList.ButtonGroup>\n {listMenuItems.map((item, i) => (\n <Fragment key={`list-menu-item-${i}`}>{item}</Fragment>\n ))}\n </PopupList.ButtonGroup>\n </Popup>\n )}\n </div>\n </div>\n {!isControlled && isWhereOpen && (\n <div className={`${baseClass}__where`} id={`${baseClass}-where`}>\n <ListWhereBuilder\n collectionPluralLabel={collectionConfig?.labels?.plural}\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig?.fields}\n onEmptyRemove={() => setVisibleDrawer(undefined)}\n renderedFilters={renderedFilters}\n resolvedFilterOptions={resolvedFilterOptions}\n />\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useWindowInfo","React","Fragment","useEffect","useId","useRef","useState","Popup","PopupList","ChevronIcon","Dots","useListQuery","useTranslation","Button","ListColumnSelectionButton","ListGroupByButton","ListEmptyTrashButton","ListWhereBuilder","QueryPresetBar","ListSearchFilter","baseClass","ListControls","props","$","beforeActions","collectionConfig","collectionSlug","disableQueryPresets","enableColumns","t0","enableFilters","t1","enableSort","t2","hasCreatePermission","hasDeletePermission","isWhereOpen","isWhereOpenFromProps","layoutToggle","listMenuItems","newDocumentURL","onWhereToggle","queryPreset","activePreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","viewType","wherePanelID","wherePanelIDFromProps","undefined","instanceID","isControlled","handleSearchChange","hasActiveFilters","query","setSearchInput","t","breakpoints","t3","s","smallBreak","searchLabelTranslated","label","split","hasWhereParam","Boolean","where","visibleDrawer","setVisibleDrawer","t4","current","t5","t6","t7","handleWhereToggle","_jsxs","className","children","_jsx","onSearchChange","onSearchInputChange","searchQueryParam","search","enableQueryPresets","buttonStyle","extraButtonProps","icon","direction","size","onClick","selected","slug","fields","el","id","to","trash","Array","isArray","length","button","ariaLabel","horizontalAlign","popupType","verticalAlign","ButtonGroup","map","_temp","collectionPluralLabel","labels","plural","onEmptyRemove","item","i"],"sources":["../../../src/elements/ListControls/index.tsx"],"sourcesContent":["'use client'\n\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport React, { Fragment, useEffect, useId, useRef, useState } from 'react'\n\nimport type { ListControlsProps } from './types.js'\n\nimport { Popup, PopupList } from '../../elements/Popup/index.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { Dots } from '../../icons/Dots/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { ListColumnSelectionButton } from '../ListColumnSelectionButton/index.js'\nimport { ListGroupByButton } from '../ListGroupByButton/index.js'\nimport { ListEmptyTrashButton } from '../ListHeader/TitleActions/index.js'\nimport { ListWhereBuilder } from '../ListWhereBuilder/index.js'\nimport { QueryPresetBar } from '../QueryPresets/QueryPresetBar/index.js'\nimport { ListSearchFilter } from '../Search/ListSearchFilter/index.js'\nimport './index.css'\n\nconst baseClass = 'list-controls'\n\n/**\n * The ListControls component is used to render the controls (search, filter, where)\n * for a collection's list view. You can find those directly above the table which lists\n * the collection's documents.\n */\nexport const ListControls: React.FC<ListControlsProps> = (props) => {\n const {\n beforeActions,\n collectionConfig,\n collectionSlug,\n disableQueryPresets,\n enableColumns = true,\n enableFilters = true,\n enableSort = false,\n hasCreatePermission,\n hasDeletePermission,\n isWhereOpen: isWhereOpenFromProps,\n layoutToggle,\n listMenuItems,\n newDocumentURL,\n onWhereToggle,\n queryPreset: activePreset,\n queryPresetPermissions,\n renderedFilters,\n resolvedFilterOptions,\n viewType,\n wherePanelID: wherePanelIDFromProps,\n } = props\n\n const instanceID = useId()\n const wherePanelID = wherePanelIDFromProps ?? `${baseClass}-where-${instanceID}`\n\n const isControlled = typeof onWhereToggle === 'function'\n\n const { handleSearchChange, hasActiveFilters, query, setSearchInput } = useListQuery()\n\n const { t } = useTranslation()\n\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n // Simplified placeholder - just \"Search\" instead of \"Search by X, Y, Z\"\n const searchLabelTranslated = t('general:searchBy', { label: '' }).split(' ')[0]\n\n const hasWhereParam = useRef(Boolean(query?.where))\n\n const [visibleDrawer, setVisibleDrawer] = useState<'columns' | 'sort' | 'where'>(\n hasActiveFilters ? 'where' : undefined,\n )\n\n useEffect(() => {\n if (hasWhereParam.current && !query?.where) {\n hasWhereParam.current = false\n } else if (query?.where) {\n hasWhereParam.current = true\n }\n }, [setVisibleDrawer, query?.where])\n\n const isWhereOpen = isControlled ? Boolean(isWhereOpenFromProps) : visibleDrawer === 'where'\n const handleWhereToggle = isControlled\n ? onWhereToggle\n : () => setVisibleDrawer(visibleDrawer !== 'where' ? 'where' : undefined)\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__search-row`}>\n <div className={`${baseClass}__left`}>\n <ListSearchFilter\n key={collectionSlug}\n label={searchLabelTranslated}\n onSearchChange={handleSearchChange}\n onSearchInputChange={setSearchInput}\n searchQueryParam={query?.search}\n />\n {collectionConfig?.enableQueryPresets && !disableQueryPresets && (\n <QueryPresetBar\n activePreset={activePreset}\n collectionSlug={collectionSlug}\n queryPresetPermissions={queryPresetPermissions}\n />\n )}\n </div>\n <div className={`${baseClass}__spacer`} />\n <div className={`${baseClass}__actions`}>\n {!smallBreak && beforeActions}\n {enableFilters && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__toggle-where`}\n extraButtonProps={{\n 'aria-controls': wherePanelID,\n 'aria-expanded': isWhereOpen,\n }}\n icon={<ChevronIcon direction={isWhereOpen ? 'up' : 'down'} size={16} />}\n id=\"toggle-list-filters\"\n onClick={handleWhereToggle}\n selected={isWhereOpen || hasActiveFilters}\n size=\"medium\"\n >\n {t('general:filters')}\n </Button>\n )}\n <ListGroupByButton\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig.fields}\n />\n {enableColumns && <ListColumnSelectionButton collectionSlug={collectionConfig.slug} />}\n {enableSort && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__toggle-sort`}\n extraButtonProps={{\n 'aria-controls': `${baseClass}-sort`,\n 'aria-expanded': visibleDrawer === 'sort',\n }}\n icon={<ChevronIcon size={16} />}\n id=\"toggle-list-sort\"\n onClick={() => setVisibleDrawer(visibleDrawer !== 'sort' ? 'sort' : undefined)}\n size=\"medium\"\n >\n {t('general:sort')}\n </Button>\n )}\n {layoutToggle}\n {hasCreatePermission && newDocumentURL && (\n <Button\n buttonStyle=\"primary\"\n className={`${baseClass}__create-new`}\n el=\"link\"\n id=\"create-new-doc\"\n size=\"medium\"\n to={newDocumentURL}\n >\n {t('general:createNew')}\n </Button>\n )}\n {hasDeletePermission && collectionConfig.trash && viewType === 'trash' && (\n <ListEmptyTrashButton\n collectionConfig={collectionConfig}\n hasDeletePermission={hasDeletePermission}\n />\n )}\n {listMenuItems && Array.isArray(listMenuItems) && listMenuItems.length > 0 && (\n <Popup\n button={<Dots ariaLabel={t('general:moreOptions')} />}\n className={`${baseClass}__popup`}\n horizontalAlign=\"right\"\n id=\"list-menu\"\n popupType=\"menu\"\n verticalAlign=\"bottom\"\n >\n <PopupList.ButtonGroup>\n {listMenuItems.map((item, i) => (\n <Fragment key={`list-menu-item-${i}`}>{item}</Fragment>\n ))}\n </PopupList.ButtonGroup>\n </Popup>\n )}\n </div>\n </div>\n {!isControlled && isWhereOpen && (\n <div className={`${baseClass}__where`} id={wherePanelID}>\n <ListWhereBuilder\n collectionPluralLabel={collectionConfig?.labels?.plural}\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig?.fields}\n onEmptyRemove={() => setVisibleDrawer(undefined)}\n renderedFilters={renderedFilters}\n resolvedFilterOptions={resolvedFilterOptions}\n />\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -22,5 +22,6 @@ export type ListControlsProps = {
22
22
  readonly renderedFilters?: Map<string, React.ReactNode>;
23
23
  readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>;
24
24
  readonly viewType?: ViewTypes;
25
+ readonly wherePanelID?: string;
25
26
  };
26
27
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,6BAA6B,EAC7B,SAAS,EACT,KAAK,EACN,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAA;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACnD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,6BAA6B,CAAA;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACvD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAC9B,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,6BAA6B,EAC7B,SAAS,EACT,KAAK,EACN,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAA;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACnD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,6BAA6B,CAAA;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACvD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/elements/ListControls/types.ts"],"sourcesContent":["import type {\n ClientCollectionConfig,\n QueryPreset,\n ResolvedFilterOptions,\n SanitizedCollectionPermission,\n ViewTypes,\n Where,\n} from 'payload'\n\nexport type ListControlsProps = {\n readonly beforeActions?: React.ReactNode[]\n readonly collectionConfig: ClientCollectionConfig\n readonly collectionSlug: string\n readonly disableQueryPresets?: boolean\n readonly enableColumns?: boolean\n readonly enableFilters?: boolean\n readonly enableSort?: boolean\n readonly handleSearchChange?: (search: string) => void\n readonly handleSortChange?: (sort: string) => void\n readonly handleWhereChange?: (where: Where) => void\n readonly hasCreatePermission?: boolean\n readonly hasDeletePermission?: boolean\n readonly isWhereOpen?: boolean\n readonly layoutToggle?: React.ReactNode\n readonly listMenuItems?: React.ReactNode[]\n readonly newDocumentURL?: string\n readonly onWhereToggle?: () => void\n readonly queryPreset?: QueryPreset\n readonly queryPresetPermissions?: SanitizedCollectionPermission\n readonly renderedFilters?: Map<string, React.ReactNode>\n readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>\n readonly viewType?: ViewTypes\n}\n"],"mappings":"AASA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/elements/ListControls/types.ts"],"sourcesContent":["import type {\n ClientCollectionConfig,\n QueryPreset,\n ResolvedFilterOptions,\n SanitizedCollectionPermission,\n ViewTypes,\n Where,\n} from 'payload'\n\nexport type ListControlsProps = {\n readonly beforeActions?: React.ReactNode[]\n readonly collectionConfig: ClientCollectionConfig\n readonly collectionSlug: string\n readonly disableQueryPresets?: boolean\n readonly enableColumns?: boolean\n readonly enableFilters?: boolean\n readonly enableSort?: boolean\n readonly handleSearchChange?: (search: string) => void\n readonly handleSortChange?: (sort: string) => void\n readonly handleWhereChange?: (where: Where) => void\n readonly hasCreatePermission?: boolean\n readonly hasDeletePermission?: boolean\n readonly isWhereOpen?: boolean\n readonly layoutToggle?: React.ReactNode\n readonly listMenuItems?: React.ReactNode[]\n readonly newDocumentURL?: string\n readonly onWhereToggle?: () => void\n readonly queryPreset?: QueryPreset\n readonly queryPresetPermissions?: SanitizedCollectionPermission\n readonly renderedFilters?: Map<string, React.ReactNode>\n readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>\n readonly viewType?: ViewTypes\n readonly wherePanelID?: string\n}\n"],"mappings":"AASA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerContent.d.ts","sourceRoot":"","sources":["../../../src/elements/ListDrawer/DrawerContent.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAG/D,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,YAAY,CAAA;AAUnB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAgMvD,CAAA"}
1
+ {"version":3,"file":"DrawerContent.d.ts","sourceRoot":"","sources":["../../../src/elements/ListDrawer/DrawerContent.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAG/D,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,YAAY,CAAA;AAUnB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAkMvD,CAAA"}
@@ -161,7 +161,7 @@ export const ListDrawerContent = ({
161
161
  slug: selectedOption.value || incomingCollectionSlug
162
162
  });
163
163
  }, [getEntityConfig, refresh, selectedOption.value]);
164
- return /*#__PURE__*/_jsxs(ListDrawerContextProvider, {
164
+ return /*#__PURE__*/_jsx(ListDrawerContextProvider, {
165
165
  allowCreate: allowCreate,
166
166
  createNewDrawerSlug: documentDrawerSlug,
167
167
  DocumentDrawerToggler: DocumentDrawerToggler,
@@ -173,18 +173,24 @@ export const ListDrawerContent = ({
173
173
  refresh: refreshSelf,
174
174
  selectedOption: selectedOption,
175
175
  setSelectedOption: setMySelectedOption,
176
- children: [!isLoading && /*#__PURE__*/_jsxs(_Fragment, {
177
- children: [/*#__PURE__*/_jsx("div", {
178
- className: "drawer__fade-in",
179
- children: ListView
180
- }), /*#__PURE__*/_jsx(DocumentDrawer, {
181
- onSave: onCreateNew
176
+ children: /*#__PURE__*/_jsxs(React.Suspense, {
177
+ fallback: /*#__PURE__*/_jsx(LoadingOverlay, {
178
+ animationDuration: "200ms",
179
+ overlayType: "drawer"
180
+ }),
181
+ children: [!isLoading && /*#__PURE__*/_jsxs(_Fragment, {
182
+ children: [/*#__PURE__*/_jsx("div", {
183
+ className: "drawer__fade-in",
184
+ children: ListView
185
+ }), /*#__PURE__*/_jsx(DocumentDrawer, {
186
+ onSave: onCreateNew
187
+ })]
188
+ }), /*#__PURE__*/_jsx(LoadingOverlay, {
189
+ animationDuration: "200ms",
190
+ overlayType: "drawer",
191
+ show: isLoading
182
192
  })]
183
- }), /*#__PURE__*/_jsx(LoadingOverlay, {
184
- animationDuration: "200ms",
185
- overlayType: "drawer",
186
- show: isLoading
187
- })]
193
+ })
188
194
  });
189
195
  };
190
196
  //# sourceMappingURL=DrawerContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerContent.js","names":["useModal","hoistQueryParamsToAnd","React","useCallback","useEffect","useState","useDocumentDrawer","useEffectEvent","useConfig","useServerFunctions","ListDrawerContextProvider","LoadingOverlay","ListDrawerContent","allowCreate","collectionSlugs","disableQueryPresets","drawerSlug","enableRowSelections","filterOptions","onBulkSelect","onSelect","overrideEntityVisibility","selectedCollection","collectionSlugFromProps","closeModal","isModalOpen","serverFunction","ListView","setListView","undefined","isLoading","setIsLoading","config","collections","getEntityConfig","isOpen","enabledCollections","filter","slug","includes","selectedOption","setSelectedOption","initialSelection","found","collectionSlug","label","labels","value","DocumentDrawer","DocumentDrawerToggler","documentDrawerSlug","updateSelectedOption","refresh","query","newQuery","where","filterOption","result","name","args","disableBulkDelete","disableBulkEdit","List","_err","console","error","onCreateNew","doc","onQueryChange","setMySelectedOption","incomingSelection","refreshSelf","incomingCollectionSlug","_jsxs","createNewDrawerSlug","selected","_Fragment","_jsx","className","onSave","animationDuration","overlayType","show"],"sources":["../../../src/elements/ListDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\nimport type { CollectionSlug, ListQuery } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { hoistQueryParamsToAnd } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { ListDrawerContextProps, ListDrawerContextType } from '../ListDrawer/Provider.js'\nimport type {\n ListDrawerProps,\n RenderListServerFnArgs,\n RenderListServerFnReturnType,\n} from './types.js'\n\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { ListDrawerContextProvider } from '../ListDrawer/Provider.js'\nimport { LoadingOverlay } from '../Loading/index.js'\nimport { type Option } from '../ReactSelect/index.js'\n\nexport const ListDrawerContent: React.FC<ListDrawerProps> = ({\n allowCreate = true,\n collectionSlugs,\n disableQueryPresets,\n drawerSlug,\n enableRowSelections,\n filterOptions,\n onBulkSelect,\n onSelect,\n overrideEntityVisibility = true,\n selectedCollection: collectionSlugFromProps,\n}) => {\n const { closeModal, isModalOpen } = useModal()\n\n const { serverFunction } = useServerFunctions()\n const [ListView, setListView] = useState<React.ReactNode>(undefined)\n const [isLoading, setIsLoading] = useState(true)\n\n const {\n config: { collections },\n getEntityConfig,\n } = useConfig()\n\n const isOpen = isModalOpen(drawerSlug)\n\n const enabledCollections = collections.filter(({ slug }) => {\n return collectionSlugs.includes(slug)\n })\n\n const [selectedOption, setSelectedOption] = useState<Option<string>>(() => {\n const initialSelection = collectionSlugFromProps || enabledCollections[0]?.slug\n const found = getEntityConfig({ collectionSlug: initialSelection })\n\n return found\n ? {\n label: found.labels,\n value: found.slug,\n }\n : undefined\n })\n\n const [DocumentDrawer, DocumentDrawerToggler, { drawerSlug: documentDrawerSlug }] =\n useDocumentDrawer({\n collectionSlug: selectedOption.value,\n })\n\n const updateSelectedOption = useEffectEvent((collectionSlug: CollectionSlug) => {\n if (collectionSlug && collectionSlug !== selectedOption?.value) {\n setSelectedOption({\n label: getEntityConfig({ collectionSlug })?.labels,\n value: collectionSlug,\n })\n }\n })\n\n useEffect(() => {\n updateSelectedOption(collectionSlugFromProps)\n }, [collectionSlugFromProps])\n\n /**\n * This performs a full server round trip to get the list view for the selected collection.\n * On the server, the data is freshly queried for the list view and all components are fully rendered.\n * This work includes building column state, rendering custom components, etc.\n */\n const refresh = useCallback(\n async ({ slug, query }: { query?: ListQuery; slug: string }) => {\n try {\n const newQuery: ListQuery = { ...(query || {}), where: { ...(query?.where || {}) } }\n\n const filterOption = filterOptions?.[slug]\n\n if (filterOptions && typeof filterOption !== 'boolean') {\n newQuery.where = hoistQueryParamsToAnd(newQuery.where, filterOption)\n }\n\n if (slug) {\n const result: RenderListServerFnReturnType = (await serverFunction({\n name: 'render-list',\n args: {\n collectionSlug: slug,\n disableBulkDelete: true,\n disableBulkEdit: true,\n disableQueryPresets,\n drawerSlug,\n enableRowSelections,\n overrideEntityVisibility,\n query: newQuery,\n } satisfies RenderListServerFnArgs,\n })) as RenderListServerFnReturnType\n\n setListView(result?.List || null)\n } else {\n setListView(null)\n }\n setIsLoading(false)\n } catch (_err) {\n console.error('Error rendering List View: ', _err) // eslint-disable-line no-console\n\n if (isOpen) {\n closeModal(drawerSlug)\n }\n }\n },\n [\n serverFunction,\n closeModal,\n drawerSlug,\n isOpen,\n enableRowSelections,\n filterOptions,\n overrideEntityVisibility,\n disableQueryPresets,\n ],\n )\n\n useEffect(() => {\n if (!ListView) {\n void refresh({ slug: selectedOption?.value })\n }\n }, [refresh, ListView, selectedOption.value])\n\n const onCreateNew = useCallback(\n ({ doc }) => {\n if (typeof onSelect === 'function') {\n onSelect({\n collectionSlug: selectedOption?.value,\n doc,\n })\n }\n\n closeModal(documentDrawerSlug)\n closeModal(drawerSlug)\n },\n [closeModal, documentDrawerSlug, drawerSlug, onSelect, selectedOption.value],\n )\n\n const onQueryChange: ListDrawerContextProps['onQueryChange'] = useCallback(\n (query) => {\n return refresh({ slug: selectedOption?.value, query })\n },\n [refresh, selectedOption.value],\n )\n\n const setMySelectedOption: ListDrawerContextProps['setSelectedOption'] = useCallback(\n (incomingSelection) => {\n setSelectedOption(incomingSelection)\n void refresh({ slug: incomingSelection?.value })\n },\n [refresh],\n )\n\n const refreshSelf: ListDrawerContextType['refresh'] = useCallback(\n async (incomingCollectionSlug) => {\n if (incomingCollectionSlug) {\n setSelectedOption({\n label: getEntityConfig({ collectionSlug: incomingCollectionSlug })?.labels,\n value: incomingCollectionSlug,\n })\n }\n\n await refresh({ slug: selectedOption.value || incomingCollectionSlug })\n },\n [getEntityConfig, refresh, selectedOption.value],\n )\n\n return (\n <ListDrawerContextProvider\n allowCreate={allowCreate}\n createNewDrawerSlug={documentDrawerSlug}\n DocumentDrawerToggler={DocumentDrawerToggler}\n drawerSlug={drawerSlug}\n enabledCollections={collectionSlugs}\n onBulkSelect={\n typeof onBulkSelect === 'function'\n ? (selected) => onBulkSelect(selected, selectedOption.value)\n : undefined\n }\n onQueryChange={onQueryChange}\n onSelect={onSelect}\n refresh={refreshSelf}\n selectedOption={selectedOption}\n setSelectedOption={setMySelectedOption}\n >\n {!isLoading && (\n <>\n <div className=\"drawer__fade-in\">{ListView}</div>\n <DocumentDrawer onSave={onCreateNew} />\n </>\n )}\n <LoadingOverlay animationDuration=\"200ms\" overlayType=\"drawer\" show={isLoading} />\n </ListDrawerContextProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DrawerContent.js","names":["useModal","hoistQueryParamsToAnd","React","useCallback","useEffect","useState","useDocumentDrawer","useEffectEvent","useConfig","useServerFunctions","ListDrawerContextProvider","LoadingOverlay","ListDrawerContent","allowCreate","collectionSlugs","disableQueryPresets","drawerSlug","enableRowSelections","filterOptions","onBulkSelect","onSelect","overrideEntityVisibility","selectedCollection","collectionSlugFromProps","closeModal","isModalOpen","serverFunction","ListView","setListView","undefined","isLoading","setIsLoading","config","collections","getEntityConfig","isOpen","enabledCollections","filter","slug","includes","selectedOption","setSelectedOption","initialSelection","found","collectionSlug","label","labels","value","DocumentDrawer","DocumentDrawerToggler","documentDrawerSlug","updateSelectedOption","refresh","query","newQuery","where","filterOption","result","name","args","disableBulkDelete","disableBulkEdit","List","_err","console","error","onCreateNew","doc","onQueryChange","setMySelectedOption","incomingSelection","refreshSelf","incomingCollectionSlug","_jsx","createNewDrawerSlug","selected","_jsxs","Suspense","fallback","animationDuration","overlayType","_Fragment","className","onSave","show"],"sources":["../../../src/elements/ListDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\nimport type { CollectionSlug, ListQuery } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { hoistQueryParamsToAnd } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { ListDrawerContextProps, ListDrawerContextType } from '../ListDrawer/Provider.js'\nimport type {\n ListDrawerProps,\n RenderListServerFnArgs,\n RenderListServerFnReturnType,\n} from './types.js'\n\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { ListDrawerContextProvider } from '../ListDrawer/Provider.js'\nimport { LoadingOverlay } from '../Loading/index.js'\nimport { type Option } from '../ReactSelect/index.js'\n\nexport const ListDrawerContent: React.FC<ListDrawerProps> = ({\n allowCreate = true,\n collectionSlugs,\n disableQueryPresets,\n drawerSlug,\n enableRowSelections,\n filterOptions,\n onBulkSelect,\n onSelect,\n overrideEntityVisibility = true,\n selectedCollection: collectionSlugFromProps,\n}) => {\n const { closeModal, isModalOpen } = useModal()\n\n const { serverFunction } = useServerFunctions()\n const [ListView, setListView] = useState<React.ReactNode>(undefined)\n const [isLoading, setIsLoading] = useState(true)\n\n const {\n config: { collections },\n getEntityConfig,\n } = useConfig()\n\n const isOpen = isModalOpen(drawerSlug)\n\n const enabledCollections = collections.filter(({ slug }) => {\n return collectionSlugs.includes(slug)\n })\n\n const [selectedOption, setSelectedOption] = useState<Option<string>>(() => {\n const initialSelection = collectionSlugFromProps || enabledCollections[0]?.slug\n const found = getEntityConfig({ collectionSlug: initialSelection })\n\n return found\n ? {\n label: found.labels,\n value: found.slug,\n }\n : undefined\n })\n\n const [DocumentDrawer, DocumentDrawerToggler, { drawerSlug: documentDrawerSlug }] =\n useDocumentDrawer({\n collectionSlug: selectedOption.value,\n })\n\n const updateSelectedOption = useEffectEvent((collectionSlug: CollectionSlug) => {\n if (collectionSlug && collectionSlug !== selectedOption?.value) {\n setSelectedOption({\n label: getEntityConfig({ collectionSlug })?.labels,\n value: collectionSlug,\n })\n }\n })\n\n useEffect(() => {\n updateSelectedOption(collectionSlugFromProps)\n }, [collectionSlugFromProps])\n\n /**\n * This performs a full server round trip to get the list view for the selected collection.\n * On the server, the data is freshly queried for the list view and all components are fully rendered.\n * This work includes building column state, rendering custom components, etc.\n */\n const refresh = useCallback(\n async ({ slug, query }: { query?: ListQuery; slug: string }) => {\n try {\n const newQuery: ListQuery = { ...(query || {}), where: { ...(query?.where || {}) } }\n\n const filterOption = filterOptions?.[slug]\n\n if (filterOptions && typeof filterOption !== 'boolean') {\n newQuery.where = hoistQueryParamsToAnd(newQuery.where, filterOption)\n }\n\n if (slug) {\n const result: RenderListServerFnReturnType = (await serverFunction({\n name: 'render-list',\n args: {\n collectionSlug: slug,\n disableBulkDelete: true,\n disableBulkEdit: true,\n disableQueryPresets,\n drawerSlug,\n enableRowSelections,\n overrideEntityVisibility,\n query: newQuery,\n } satisfies RenderListServerFnArgs,\n })) as RenderListServerFnReturnType\n\n setListView(result?.List || null)\n } else {\n setListView(null)\n }\n setIsLoading(false)\n } catch (_err) {\n console.error('Error rendering List View: ', _err) // eslint-disable-line no-console\n\n if (isOpen) {\n closeModal(drawerSlug)\n }\n }\n },\n [\n serverFunction,\n closeModal,\n drawerSlug,\n isOpen,\n enableRowSelections,\n filterOptions,\n overrideEntityVisibility,\n disableQueryPresets,\n ],\n )\n\n useEffect(() => {\n if (!ListView) {\n void refresh({ slug: selectedOption?.value })\n }\n }, [refresh, ListView, selectedOption.value])\n\n const onCreateNew = useCallback(\n ({ doc }) => {\n if (typeof onSelect === 'function') {\n onSelect({\n collectionSlug: selectedOption?.value,\n doc,\n })\n }\n\n closeModal(documentDrawerSlug)\n closeModal(drawerSlug)\n },\n [closeModal, documentDrawerSlug, drawerSlug, onSelect, selectedOption.value],\n )\n\n const onQueryChange: ListDrawerContextProps['onQueryChange'] = useCallback(\n (query) => {\n return refresh({ slug: selectedOption?.value, query })\n },\n [refresh, selectedOption.value],\n )\n\n const setMySelectedOption: ListDrawerContextProps['setSelectedOption'] = useCallback(\n (incomingSelection) => {\n setSelectedOption(incomingSelection)\n void refresh({ slug: incomingSelection?.value })\n },\n [refresh],\n )\n\n const refreshSelf: ListDrawerContextType['refresh'] = useCallback(\n async (incomingCollectionSlug) => {\n if (incomingCollectionSlug) {\n setSelectedOption({\n label: getEntityConfig({ collectionSlug: incomingCollectionSlug })?.labels,\n value: incomingCollectionSlug,\n })\n }\n\n await refresh({ slug: selectedOption.value || incomingCollectionSlug })\n },\n [getEntityConfig, refresh, selectedOption.value],\n )\n\n return (\n <ListDrawerContextProvider\n allowCreate={allowCreate}\n createNewDrawerSlug={documentDrawerSlug}\n DocumentDrawerToggler={DocumentDrawerToggler}\n drawerSlug={drawerSlug}\n enabledCollections={collectionSlugs}\n onBulkSelect={\n typeof onBulkSelect === 'function'\n ? (selected) => onBulkSelect(selected, selectedOption.value)\n : undefined\n }\n onQueryChange={onQueryChange}\n onSelect={onSelect}\n refresh={refreshSelf}\n selectedOption={selectedOption}\n setSelectedOption={setMySelectedOption}\n >\n <React.Suspense fallback={<LoadingOverlay animationDuration=\"200ms\" overlayType=\"drawer\" />}>\n {!isLoading && (\n <>\n <div className=\"drawer__fade-in\">{ListView}</div>\n <DocumentDrawer onSave={onCreateNew} />\n </>\n )}\n <LoadingOverlay animationDuration=\"200ms\" overlayType=\"drawer\" show={isLoading} />\n </React.Suspense>\n </ListDrawerContextProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/LivePreview/Toolbar/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAG5C,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,aAAa,CAAA;AAgDpB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CACvC;IACE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,GAAG,aAAa,CASlB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/LivePreview/Toolbar/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAG5C,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,aAAa,CAAA;AAkDpB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CACvC;IACE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,GAAG,aAAa,CASlB,CAAA"}
@@ -6,14 +6,18 @@ import { useDraggable } from '@dnd-kit/core';
6
6
  import React from 'react';
7
7
  import { AlignJustifiedIcon } from '../../../icons/AlignJustified/index.js';
8
8
  import { useLivePreviewContext } from '../../../providers/LivePreview/context.js';
9
+ import { useTranslation } from '../../../providers/Translation/index.js';
9
10
  import { ToolbarControls } from './Controls/index.js';
10
11
  import './index.css';
11
12
  const baseClass = 'live-preview-toolbar';
12
13
  const DraggableToolbar = props => {
13
- const $ = _c(10);
14
+ const $ = _c(11);
14
15
  const {
15
16
  toolbarPosition
16
17
  } = useLivePreviewContext();
18
+ const {
19
+ t
20
+ } = useTranslation();
17
21
  let t0;
18
22
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
19
23
  t0 = {
@@ -39,7 +43,7 @@ const DraggableToolbar = props => {
39
43
  const t2 = `${toolbarPosition.x}px`;
40
44
  const t3 = `${toolbarPosition.y}px`;
41
45
  let t4;
42
- if ($[2] !== attributes || $[3] !== listeners || $[4] !== props || $[5] !== setNodeRef || $[6] !== t2 || $[7] !== t3 || $[8] !== transform) {
46
+ if ($[2] !== attributes || $[3] !== listeners || $[4] !== props || $[5] !== setNodeRef || $[6] !== t || $[7] !== t2 || $[8] !== t3 || $[9] !== transform) {
43
47
  t4 = _jsxs("div", {
44
48
  className: t1.join(" "),
45
49
  style: {
@@ -52,6 +56,7 @@ const DraggableToolbar = props => {
52
56
  children: [_jsx("button", {
53
57
  ...listeners,
54
58
  ...attributes,
59
+ "aria-label": t("general:dragToMove"),
55
60
  className: `${baseClass}__drag-handle`,
56
61
  ref: setNodeRef,
57
62
  type: "button",
@@ -64,12 +69,13 @@ const DraggableToolbar = props => {
64
69
  $[3] = listeners;
65
70
  $[4] = props;
66
71
  $[5] = setNodeRef;
67
- $[6] = t2;
68
- $[7] = t3;
69
- $[8] = transform;
70
- $[9] = t4;
72
+ $[6] = t;
73
+ $[7] = t2;
74
+ $[8] = t3;
75
+ $[9] = transform;
76
+ $[10] = t4;
71
77
  } else {
72
- t4 = $[9];
78
+ t4 = $[10];
73
79
  }
74
80
  return t4;
75
81
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useDraggable","React","AlignJustifiedIcon","useLivePreviewContext","ToolbarControls","baseClass","DraggableToolbar","props","$","toolbarPosition","t0","Symbol","for","id","attributes","listeners","setNodeRef","transform","t1","t2","x","t3","y","t4","_jsxs","className","join","style","left","top","undefined","children","_jsx","ref","type","StaticToolbar","LivePreviewToolbar","draggable"],"sources":["../../../../src/elements/LivePreview/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { EditViewProps } from 'payload'\n\nimport { useDraggable } from '@dnd-kit/core'\nimport React from 'react'\n\nimport { AlignJustifiedIcon } from '../../../icons/AlignJustified/index.js'\nimport { useLivePreviewContext } from '../../../providers/LivePreview/context.js'\nimport { ToolbarControls } from './Controls/index.js'\nimport './index.css'\n\nconst baseClass = 'live-preview-toolbar'\n\nconst DraggableToolbar: React.FC<EditViewProps> = (props) => {\n const { toolbarPosition } = useLivePreviewContext()\n\n const { attributes, listeners, setNodeRef, transform } = useDraggable({\n id: 'live-preview-toolbar',\n })\n\n return (\n <div\n className={[baseClass, `${baseClass}--draggable`].join(' ')}\n style={{\n left: `${toolbarPosition.x}px`,\n top: `${toolbarPosition.y}px`,\n ...(transform\n ? {\n transform: transform\n ? `translate3d(${transform?.x || 0}px, ${transform?.y || 0}px, 0)`\n : undefined,\n }\n : {}),\n }}\n >\n <button\n {...listeners}\n {...attributes}\n className={`${baseClass}__drag-handle`}\n ref={setNodeRef}\n type=\"button\"\n >\n <AlignJustifiedIcon />\n </button>\n <ToolbarControls {...props} />\n </div>\n )\n}\n\nconst StaticToolbar: React.FC<EditViewProps> = (props) => {\n return (\n <div className={[baseClass, `${baseClass}--static`].join(' ')}>\n <ToolbarControls {...props} />\n </div>\n )\n}\n\nexport const LivePreviewToolbar: React.FC<\n {\n draggable?: boolean\n } & EditViewProps\n> = (props) => {\n const { draggable } = props\n\n if (draggable) {\n return <DraggableToolbar {...props} />\n }\n\n return <StaticToolbar {...props} />\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,YAAY,QAAQ;AAC7B,OAAOC,KAAA,MAAW;AAElB,SAASC,kBAAkB,QAAQ;AACnC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,eAAe,QAAQ;AAChC,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB,MAAMC,gBAAA,GAA4CC,KAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAChD;IAAAU;EAAA,IAA4BN,qBAAA;EAAA,IAAAO,EAAA;EAAA,IAAAF,CAAA,QAAAG,MAAA,CAAAC,GAAA;IAE0CF,EAAA;MAAAG,EAAA,EAChE;IACN;IAAAL,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAFA;IAAAM,UAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC;EAAA,IAAyDjB,YAAA,CAAaU,EAEtE;EAAA,IAAAQ,EAAA;EAAA,IAAAV,CAAA,QAAAG,MAAA,CAAAC,GAAA;IAIeM,EAAA,IAACb,SAAA,EAAW,GAAGA,SAAA,aAAsB,CAAC;IAAAG,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAEzC,MAAAW,EAAA,MAAGV,eAAA,CAAAW,CAAiB,IAAI;EACzB,MAAAC,EAAA,MAAGZ,eAAA,CAAAa,CAAiB,IAAI;EAAA,IAAAC,EAAA;EAAA,IAAAf,CAAA,QAAAM,UAAA,IAAAN,CAAA,QAAAO,SAAA,IAAAP,CAAA,QAAAD,KAAA,IAAAC,CAAA,QAAAQ,UAAA,IAAAR,CAAA,QAAAW,EAAA,IAAAX,CAAA,QAAAa,EAAA,IAAAb,CAAA,QAAAS,SAAA;IAJjCM,EAAA,GAAAC,KAAA,CAAC;MAAAC,SAAA,EACYP,EAAsC,CAAAQ,IAAK,CAAC;MAAAC,KAAA,EAChD;QAAAC,IAAA,EACCT,EAAwB;QAAAU,GAAA,EACzBR,EAAwB;QAAA,IACzBJ,SAAA;UAAAA,SAAA,EAEaA,SAAA,kBACQA,SAAA,EAAAG,CAAgB,IAAhB,CAAgB,OAAQH,SAAA,EAAAK,CAAgB,IAAhB,CAAgB,QACvD,GAFOQ;QAIZ,CAAC,GANF,CAMC,CAAC;MACR;MAAAC,QAAA,E,CAEAC,IAAA,CAAC;QAAA,GACKjB,SAAS;QAAA,GACTD,UAAU;QAAAW,SAAA,EACH,GAAGpB,SAAA,eAAwB;QAAA4B,GAAA,EACjCjB,UAAA;QAAAkB,IAAA,EACA;QAAAH,QAAA,EAELC,IAAA,CAAC9B,kBAAA;UAEH8B,IAAA,CAAC5B,eAAA;QAAA,GAAoBG;;;;;;;;;;;;;;SAvBvBgB,E;CA0BJ;AAEA,MAAMY,aAAA,GAA0C5B,KAAA;EAC9C,oBACEyB,IAAA,CAAC;IAAIP,SAAA,EAAW,CAACpB,SAAA,EAAW,GAAGA,SAAA,UAAmB,CAAC,CAACqB,IAAI,CAAC;cACvD,aAAAM,IAAA,CAAC5B,eAAA;MAAiB,GAAGG;;;AAG3B;AAEA,OAAO,MAAM6B,kBAAA,GAIR7B,KAAA;EACH,MAAM;IAAE8B;EAAS,CAAE,GAAG9B,KAAA;EAEtB,IAAI8B,SAAA,EAAW;IACb,oBAAOL,IAAA,CAAC1B,gBAAA;MAAkB,GAAGC;;EAC/B;EAEA,oBAAOyB,IAAA,CAACG,aAAA;IAAe,GAAG5B;;AAC5B","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useDraggable","React","AlignJustifiedIcon","useLivePreviewContext","useTranslation","ToolbarControls","baseClass","DraggableToolbar","props","$","toolbarPosition","t","t0","Symbol","for","id","attributes","listeners","setNodeRef","transform","t1","t2","x","t3","y","t4","_jsxs","className","join","style","left","top","undefined","children","_jsx","ref","type","StaticToolbar","LivePreviewToolbar","draggable"],"sources":["../../../../src/elements/LivePreview/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { EditViewProps } from 'payload'\n\nimport { useDraggable } from '@dnd-kit/core'\nimport React from 'react'\n\nimport { AlignJustifiedIcon } from '../../../icons/AlignJustified/index.js'\nimport { useLivePreviewContext } from '../../../providers/LivePreview/context.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { ToolbarControls } from './Controls/index.js'\nimport './index.css'\n\nconst baseClass = 'live-preview-toolbar'\n\nconst DraggableToolbar: React.FC<EditViewProps> = (props) => {\n const { toolbarPosition } = useLivePreviewContext()\n const { t } = useTranslation()\n\n const { attributes, listeners, setNodeRef, transform } = useDraggable({\n id: 'live-preview-toolbar',\n })\n\n return (\n <div\n className={[baseClass, `${baseClass}--draggable`].join(' ')}\n style={{\n left: `${toolbarPosition.x}px`,\n top: `${toolbarPosition.y}px`,\n ...(transform\n ? {\n transform: transform\n ? `translate3d(${transform?.x || 0}px, ${transform?.y || 0}px, 0)`\n : undefined,\n }\n : {}),\n }}\n >\n <button\n {...listeners}\n {...attributes}\n aria-label={t('general:dragToMove')}\n className={`${baseClass}__drag-handle`}\n ref={setNodeRef}\n type=\"button\"\n >\n <AlignJustifiedIcon />\n </button>\n <ToolbarControls {...props} />\n </div>\n )\n}\n\nconst StaticToolbar: React.FC<EditViewProps> = (props) => {\n return (\n <div className={[baseClass, `${baseClass}--static`].join(' ')}>\n <ToolbarControls {...props} />\n </div>\n )\n}\n\nexport const LivePreviewToolbar: React.FC<\n {\n draggable?: boolean\n } & EditViewProps\n> = (props) => {\n const { draggable } = props\n\n if (draggable) {\n return <DraggableToolbar {...props} />\n }\n\n return <StaticToolbar {...props} />\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,YAAY,QAAQ;AAC7B,OAAOC,KAAA,MAAW;AAElB,SAASC,kBAAkB,QAAQ;AACnC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,cAAc,QAAQ;AAC/B,SAASC,eAAe,QAAQ;AAChC,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB,MAAMC,gBAAA,GAA4CC,KAAA;EAAA,MAAAC,CAAA,GAAAV,EAAA;EAChD;IAAAW;EAAA,IAA4BP,qBAAA;EAC5B;IAAAQ;EAAA,IAAcP,cAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAH,CAAA,QAAAI,MAAA,CAAAC,GAAA;IAEwDF,EAAA;MAAAG,EAAA,EAChE;IACN;IAAAN,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAFA;IAAAO,UAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC;EAAA,IAAyDnB,YAAA,CAAaY,EAEtE;EAAA,IAAAQ,EAAA;EAAA,IAAAX,CAAA,QAAAI,MAAA,CAAAC,GAAA;IAIeM,EAAA,IAACd,SAAA,EAAW,GAAGA,SAAA,aAAsB,CAAC;IAAAG,CAAA,MAAAW,EAAA;EAAA;IAAAA,EAAA,GAAAX,CAAA;EAAA;EAEzC,MAAAY,EAAA,MAAGX,eAAA,CAAAY,CAAiB,IAAI;EACzB,MAAAC,EAAA,MAAGb,eAAA,CAAAc,CAAiB,IAAI;EAAA,IAAAC,EAAA;EAAA,IAAAhB,CAAA,QAAAO,UAAA,IAAAP,CAAA,QAAAQ,SAAA,IAAAR,CAAA,QAAAD,KAAA,IAAAC,CAAA,QAAAS,UAAA,IAAAT,CAAA,QAAAE,CAAA,IAAAF,CAAA,QAAAY,EAAA,IAAAZ,CAAA,QAAAc,EAAA,IAAAd,CAAA,QAAAU,SAAA;IAJjCM,EAAA,GAAAC,KAAA,CAAC;MAAAC,SAAA,EACYP,EAAsC,CAAAQ,IAAK,CAAC;MAAAC,KAAA,EAChD;QAAAC,IAAA,EACCT,EAAwB;QAAAU,GAAA,EACzBR,EAAwB;QAAA,IACzBJ,SAAA;UAAAA,SAAA,EAEaA,SAAA,kBACQA,SAAA,EAAAG,CAAgB,IAAhB,CAAgB,OAAQH,SAAA,EAAAK,CAAgB,IAAhB,CAAgB,QACvD,GAFOQ;QAIZ,CAAC,GANF,CAMC,CAAC;MACR;MAAAC,QAAA,E,CAEAC,IAAA,CAAC;QAAA,GACKjB,SAAS;QAAA,GACTD,UAAU;QAAA,cACFL,CAAA,CAAE;QAAAgB,SAAA,EACH,GAAGrB,SAAA,eAAwB;QAAA6B,GAAA,EACjCjB,UAAA;QAAAkB,IAAA,EACA;QAAAH,QAAA,EAELC,IAAA,CAAChC,kBAAA;UAEHgC,IAAA,CAAC7B,eAAA;QAAA,GAAoBG;;;;;;;;;;;;;;;SAxBvBiB,E;CA2BJ;AAEA,MAAMY,aAAA,GAA0C7B,KAAA;EAC9C,oBACE0B,IAAA,CAAC;IAAIP,SAAA,EAAW,CAACrB,SAAA,EAAW,GAAGA,SAAA,UAAmB,CAAC,CAACsB,IAAI,CAAC;cACvD,aAAAM,IAAA,CAAC7B,eAAA;MAAiB,GAAGG;;;AAG3B;AAEA,OAAO,MAAM8B,kBAAA,GAIR9B,KAAA;EACH,MAAM;IAAE+B;EAAS,CAAE,GAAG/B,KAAA;EAEtB,IAAI+B,SAAA,EAAW;IACb,oBAAOL,IAAA,CAAC3B,gBAAA;MAAkB,GAAGC;;EAC/B;EAEA,oBAAO0B,IAAA,CAACG,aAAA;IAAe,GAAG7B;;AAC5B","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/NavSidebarToggle/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAkBA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/NavSidebarToggle/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CA2BA,CAAA"}
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
- import { c as _c } from "react/compiler-runtime";
4
3
  import { jsx as _jsx } from "react/jsx-runtime";
5
4
  import React from 'react';
6
5
  import { useTranslation } from '../../../providers/Translation/index.js';
@@ -9,49 +8,39 @@ import { useNav } from '../context.js';
9
8
  /**
10
9
  * @internal
11
10
  */
12
- export const NavSidebarToggle = t0 => {
13
- const $ = _c(7);
14
- const {
15
- baseClass
16
- } = t0;
11
+ export const NavSidebarToggle = ({
12
+ baseClass
13
+ }) => {
17
14
  const {
18
15
  navOpen,
16
+ navToggleRef,
19
17
  setNavOpen
20
18
  } = useNav();
21
19
  const {
22
20
  t
23
21
  } = useTranslation();
24
- let t1;
25
- if ($[0] !== baseClass || $[1] !== navOpen || $[2] !== setNavOpen || $[3] !== t) {
26
- let t2;
27
- if ($[5] !== setNavOpen) {
28
- t2 = () => {
29
- setNavOpen(false, true);
30
- };
31
- $[5] = setNavOpen;
32
- $[6] = t2;
33
- } else {
34
- t2 = $[6];
22
+ const shouldReturnFocus = React.useRef(false);
23
+ React.useEffect(() => {
24
+ if (!navOpen && shouldReturnFocus.current) {
25
+ shouldReturnFocus.current = false;
26
+ navToggleRef?.current?.focus({
27
+ preventScroll: true
28
+ });
35
29
  }
36
- t1 = _jsx("button", {
37
- "aria-expanded": navOpen,
38
- "aria-label": t("general:hideSidebar"),
39
- className: `${baseClass}__close`,
40
- onClick: t2,
41
- tabIndex: !navOpen ? -1 : undefined,
42
- type: "button",
43
- children: _jsx(SidebarToggle, {
44
- isActive: true
45
- })
46
- });
47
- $[0] = baseClass;
48
- $[1] = navOpen;
49
- $[2] = setNavOpen;
50
- $[3] = t;
51
- $[4] = t1;
52
- } else {
53
- t1 = $[4];
54
- }
55
- return t1;
30
+ }, [navOpen, navToggleRef]);
31
+ return /*#__PURE__*/_jsx("button", {
32
+ "aria-expanded": navOpen,
33
+ "aria-label": t('general:hideSidebar'),
34
+ className: `${baseClass}__close`,
35
+ onClick: () => {
36
+ shouldReturnFocus.current = true;
37
+ setNavOpen(false, true);
38
+ },
39
+ tabIndex: !navOpen ? -1 : undefined,
40
+ type: "button",
41
+ children: /*#__PURE__*/_jsx(SidebarToggle, {
42
+ isActive: true
43
+ })
44
+ });
56
45
  };
57
46
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","useTranslation","SidebarToggle","useNav","NavSidebarToggle","t0","$","baseClass","navOpen","setNavOpen","t","t1","t2","_jsx","className","onClick","tabIndex","undefined","type","children","isActive"],"sources":["../../../../src/elements/Nav/NavSidebarToggle/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { SidebarToggle } from '../../SidebarToggle/index.js'\nimport { useNav } from '../context.js'\n\n/**\n * @internal\n */\nexport const NavSidebarToggle: React.FC<{\n baseClass?: string\n}> = ({ baseClass }) => {\n const { navOpen, setNavOpen } = useNav()\n const { t } = useTranslation()\n\n return (\n <button\n aria-expanded={navOpen}\n aria-label={t('general:hideSidebar')}\n className={`${baseClass}__close`}\n onClick={() => {\n setNavOpen(false, true)\n }}\n tabIndex={!navOpen ? -1 : undefined}\n type=\"button\"\n >\n <SidebarToggle isActive />\n </button>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,OAAOC,KAAA,MAAW;AAElB,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,QAAQ;AAC9B,SAASC,MAAM,QAAQ;AAEvB;;;AAGA,OAAO,MAAMC,gBAAA,GAERC,EAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAC;IAAAQ;EAAA,IAAAF,EAAa;EACjB;IAAAG,OAAA;IAAAC;EAAA,IAAgCN,MAAA;EAChC;IAAAO;EAAA,IAAcT,cAAA;EAAA,IAAAU,EAAA;EAAA,IAAAL,CAAA,QAAAC,SAAA,IAAAD,CAAA,QAAAE,OAAA,IAAAF,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAI,CAAA;IAAA,IAAAE,EAAA;IAAA,IAAAN,CAAA,QAAAG,UAAA;MAODG,EAAA,GAAAA,CAAA;QACPH,UAAA,CAAW,OAAO;MAAA,CACpB;MAAAH,CAAA,MAAAG,UAAA;MAAAH,CAAA,MAAAM,EAAA;IAAA;MAAAA,EAAA,GAAAN,CAAA;IAAA;IANFK,EAAA,GAAAE,IAAA,CAAC;MAAA,iBACgBL,OAAA;MAAA,cACHE,CAAA,CAAE;MAAAI,SAAA,EACH,GAAGP,SAAA,SAAkB;MAAAQ,OAAA,EACvBH,EAET;MAAAI,QAAA,EACU,CAACR,OAAe,GAAhB,EAAgB,GAAhBS,SAAgB;MAAAC,IAAA,EACrB;MAAAC,QAAA,EAELN,IAAA,CAACX,aAAA;QAAAkB,QAAA,EAAsB;;;;;;;;;;;SAVzBT,E;CAaJ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","useTranslation","SidebarToggle","useNav","NavSidebarToggle","baseClass","navOpen","navToggleRef","setNavOpen","t","shouldReturnFocus","useRef","useEffect","current","focus","preventScroll","_jsx","className","onClick","tabIndex","undefined","type","isActive"],"sources":["../../../../src/elements/Nav/NavSidebarToggle/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { SidebarToggle } from '../../SidebarToggle/index.js'\nimport { useNav } from '../context.js'\n\n/**\n * @internal\n */\nexport const NavSidebarToggle: React.FC<{\n baseClass?: string\n}> = ({ baseClass }) => {\n const { navOpen, navToggleRef, setNavOpen } = useNav()\n const { t } = useTranslation()\n const shouldReturnFocus = React.useRef(false)\n\n React.useEffect(() => {\n if (!navOpen && shouldReturnFocus.current) {\n shouldReturnFocus.current = false\n navToggleRef?.current?.focus({ preventScroll: true })\n }\n }, [navOpen, navToggleRef])\n\n return (\n <button\n aria-expanded={navOpen}\n aria-label={t('general:hideSidebar')}\n className={`${baseClass}__close`}\n onClick={() => {\n shouldReturnFocus.current = true\n setNavOpen(false, true)\n }}\n tabIndex={!navOpen ? -1 : undefined}\n type=\"button\"\n >\n <SidebarToggle isActive />\n </button>\n )\n}\n"],"mappings":"AAAA;;;AACA,OAAOA,KAAA,MAAW;AAElB,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,QAAQ;AAC9B,SAASC,MAAM,QAAQ;AAEvB;;;AAGA,OAAO,MAAMC,gBAAA,GAERA,CAAC;EAAEC;AAAS,CAAE;EACjB,MAAM;IAAEC,OAAO;IAAEC,YAAY;IAAEC;EAAU,CAAE,GAAGL,MAAA;EAC9C,MAAM;IAAEM;EAAC,CAAE,GAAGR,cAAA;EACd,MAAMS,iBAAA,GAAoBV,KAAA,CAAMW,MAAM,CAAC;EAEvCX,KAAA,CAAMY,SAAS,CAAC;IACd,IAAI,CAACN,OAAA,IAAWI,iBAAA,CAAkBG,OAAO,EAAE;MACzCH,iBAAA,CAAkBG,OAAO,GAAG;MAC5BN,YAAA,EAAcM,OAAA,EAASC,KAAA,CAAM;QAAEC,aAAA,EAAe;MAAK;IACrD;EACF,GAAG,CAACT,OAAA,EAASC,YAAA,CAAa;EAE1B,oBACES,IAAA,CAAC;IACC,iBAAeV,OAAA;IACf,cAAYG,CAAA,CAAE;IACdQ,SAAA,EAAW,GAAGZ,SAAA,SAAkB;IAChCa,OAAA,EAASA,CAAA;MACPR,iBAAA,CAAkBG,OAAO,GAAG;MAC5BL,UAAA,CAAW,OAAO;IACpB;IACAW,QAAA,EAAU,CAACb,OAAA,GAAU,CAAC,IAAIc,SAAA;IAC1BC,IAAA,EAAK;cAEL,aAAAL,IAAA,CAACd,aAAA;MAAcoB,QAAQ;;;AAG7B","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/SidebarTabs/index.client.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA+C,MAAM,OAAO,CAAA;AAWnE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACnD;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,WAAW,EAAE,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAkN9D,CAAA"}
1
+ {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/SidebarTabs/index.client.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA+C,MAAM,OAAO,CAAA;AAWnE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACnD;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,WAAW,EAAE,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAwN9D,CAAA"}
@@ -197,7 +197,7 @@ export const SidebarTabsClient = ({
197
197
  hidden: !isActive_0,
198
198
  id: `${tabsID}-panel-${tab_1.slug}`,
199
199
  role: "tabpanel",
200
- tabIndex: 0,
200
+ tabIndex: -1,
201
201
  children: [/*#__PURE__*/_jsx(DelayedSpinner, {
202
202
  baseClass: baseClass,
203
203
  delay: loadingDelay,
@@ -206,7 +206,14 @@ export const SidebarTabsClient = ({
206
206
  style: loadingTab === tab_1.slug ? {
207
207
  display: 'none'
208
208
  } : undefined,
209
- children: content
209
+ children: /*#__PURE__*/_jsx(React.Suspense, {
210
+ fallback: /*#__PURE__*/_jsx(DelayedSpinner, {
211
+ baseClass: baseClass,
212
+ delay: loadingDelay,
213
+ isLoading: true
214
+ }),
215
+ children: content
216
+ })
210
217
  })]
211
218
  }, tab_1.slug);
212
219
  })
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.js","names":["PREFERENCE_KEYS","React","useCallback","useId","useRef","useState","usePreferences","useServerFunctions","SidebarTabsProvider","DelayedSpinner","Tooltip","TabError","SidebarTabsClient","baseClass","initialActiveTabID","initialTabContents","loadingDelay","tabs","setPreference","serverFunction","tabsID","activeTabID","setActiveTabID","tabContent","setTabContent","loadingTab","setLoadingTab","hoveredTab","setHoveredTab","loadingTabsRef","Set","tabContentRef","loadTabContentRef","useEffect","current","prev","loadTabContent","tabSlug","revalidate","serverArgs","hasCachedContent","Boolean","has","add","result","name","args","searchParams","newContent","component","error","errorMessage","Error","message","handleRetry","clearedContent","_jsx","onRetry","delete","currentTab","reloadTabContent","handleTabChange","slug","NAV_SIDEBAR_ACTIVE_TAB","activeTab","tab","find","t","lazyLoadable","handleTabKeyDown","e","currentIndex","key","preventDefault","direction","newIndex","length","newTab","setTimeout","document","querySelector","focus","activeContent","_Fragment","activeTabSlug","_jsxs","className","role","map","index","isActive","id","onClick","onKeyDown","onMouseEnter","onMouseLeave","tabIndex","type","position","show","label","icon","content","hidden","delay","isLoading","style","display","undefined"],"sources":["../../../../src/elements/Nav/SidebarTabs/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { PREFERENCE_KEYS } from 'payload/shared'\nimport React, { useCallback, useId, useRef, useState } from 'react'\n\nimport type { RenderTabServerFnArgs, RenderTabServerFnReturnType } from './renderTabServerFn.js'\n\nimport { usePreferences } from '../../../providers/Preferences/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { SidebarTabsProvider } from '../../../providers/SidebarTabs/index.js'\nimport { DelayedSpinner } from '../../DelayedSpinner/index.js'\nimport { Tooltip } from '../../Tooltip/index.js'\nimport { TabError } from './TabError/index.js'\n\nexport type TabMetadata = {\n icon: React.ReactNode\n isDefaultActive?: boolean\n label: string\n /** Whether this tab can be loaded/revalidated via serverFunction */\n lazyLoadable?: boolean\n slug: string\n}\n\nexport type SidebarTabsClientProps = {\n baseClass: string\n initialActiveTabID: string\n initialTabContents: Record<string, React.ReactNode>\n /**\n * Delay before showing loading spinner (in ms), prevents flashing on fast loads\n * @default 200\n */\n loadingDelay?: number\n tabs: TabMetadata[]\n}\n\nexport const SidebarTabsClient: React.FC<SidebarTabsClientProps> = ({\n baseClass,\n initialActiveTabID,\n initialTabContents,\n loadingDelay = 200,\n tabs,\n}) => {\n const { setPreference } = usePreferences()\n const { serverFunction } = useServerFunctions()\n const tabsID = useId()\n\n const [activeTabID, setActiveTabID] = useState(initialActiveTabID)\n const [tabContent, setTabContent] = useState<Record<string, React.ReactNode>>(initialTabContents)\n const [loadingTab, setLoadingTab] = useState<null | string>(null)\n const [hoveredTab, setHoveredTab] = useState<null | string>(null)\n const loadingTabsRef = useRef<Set<string>>(new Set())\n const tabContentRef = useRef(initialTabContents)\n // The retry button calls loadTabContent through this, since loadTabContent can't call itself\n const loadTabContentRef = useRef<typeof loadTabContent>(null)\n\n // Update cached content when server provides new initialTabContents\n // This is needed because useState only uses initialValue on first mount\n React.useEffect(() => {\n tabContentRef.current = { ...tabContentRef.current, ...initialTabContents }\n setTabContent((prev) => ({ ...prev, ...initialTabContents }))\n }, [initialTabContents])\n\n const loadTabContent = useCallback(\n async (\n tabSlug: string,\n {\n revalidate = false,\n serverArgs,\n }: { revalidate?: boolean; serverArgs?: Partial<RenderTabServerFnArgs> } = {},\n ) => {\n const hasCachedContent = Boolean(tabContentRef.current[tabSlug])\n\n // Skip if already loaded (unless revalidating) or currently loading\n if ((hasCachedContent && !revalidate) || loadingTabsRef.current.has(tabSlug)) {\n return\n }\n\n // Mark as loading - only show spinner if no cached content\n loadingTabsRef.current.add(tabSlug)\n if (!hasCachedContent) {\n setLoadingTab(tabSlug)\n }\n\n try {\n const result = (await serverFunction({\n name: 'render-tab',\n args: { searchParams: serverArgs?.searchParams, tabSlug } satisfies RenderTabServerFnArgs,\n })) as RenderTabServerFnReturnType\n\n const newContent = {\n ...tabContentRef.current,\n [tabSlug]: result.component,\n }\n\n tabContentRef.current = newContent\n setTabContent(newContent)\n } catch (error) {\n // On revalidate failure, keep showing cached content\n if (hasCachedContent && revalidate) {\n return\n }\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n\n const handleRetry = () => {\n // Clear the error and retry loading, threading the original serverArgs through so the\n // retry doesn't silently fall back to req.query-based rendering (the stale-tree bug).\n const clearedContent = { ...tabContentRef.current }\n delete clearedContent[tabSlug]\n tabContentRef.current = clearedContent\n setTabContent(clearedContent)\n void loadTabContentRef.current?.(tabSlug, { serverArgs })\n }\n\n const newContent = {\n ...tabContentRef.current,\n [tabSlug]: <TabError message={errorMessage} onRetry={handleRetry} />,\n }\n\n tabContentRef.current = newContent\n setTabContent(newContent)\n } finally {\n loadingTabsRef.current.delete(tabSlug)\n setLoadingTab((currentTab) => (currentTab === tabSlug ? null : currentTab))\n }\n },\n [serverFunction],\n )\n\n React.useEffect(() => {\n loadTabContentRef.current = loadTabContent\n }, [loadTabContent])\n\n const reloadTabContent = useCallback(\n (tabSlug: string, serverArgs?: Partial<RenderTabServerFnArgs>) => {\n // Clear cached content to force reload\n const clearedContent = { ...tabContentRef.current }\n delete clearedContent[tabSlug]\n tabContentRef.current = clearedContent\n setTabContent(clearedContent)\n\n void loadTabContent(tabSlug, { serverArgs })\n },\n [loadTabContent],\n )\n\n const handleTabChange = useCallback(\n (slug: string) => {\n setActiveTabID(slug)\n void setPreference(PREFERENCE_KEYS.NAV_SIDEBAR_ACTIVE_TAB, { activeTab: slug })\n // Only revalidate tabs that can be loaded via serverFunction\n // Pre-rendered React elements (like default nav) can't be revalidated\n const tab = tabs.find((t) => t.slug === slug)\n void loadTabContent(slug, { revalidate: tab?.lazyLoadable ?? false })\n },\n [setPreference, loadTabContent, tabs],\n )\n\n const handleTabKeyDown = useCallback(\n (e: React.KeyboardEvent, currentIndex: number) => {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault()\n const direction = e.key === 'ArrowLeft' ? -1 : 1\n const newIndex = (currentIndex + direction + tabs.length) % tabs.length\n const newTab = tabs[newIndex]\n handleTabChange(newTab.slug)\n // Focus will be handled by the tabIndex change\n setTimeout(() => {\n document.querySelector<HTMLButtonElement>(`.${baseClass}__tab--active`)?.focus()\n }, 0)\n }\n },\n [baseClass, handleTabChange, tabs],\n )\n\n const activeContent = tabContent[activeTabID]\n\n // If there's only one tab (the default nav), render it without tab UI\n if (tabs.length === 1) {\n return <>{activeContent}</>\n }\n\n return (\n <SidebarTabsProvider activeTabSlug={activeTabID} reloadTabContent={reloadTabContent}>\n <div className={baseClass}>\n <div className={`${baseClass}__tabs scrollbar-thin`} role=\"tablist\">\n {tabs.map((tab, index) => {\n const isActive = tab.slug === activeTabID\n\n return (\n <button\n aria-controls={`${tabsID}-panel-${tab.slug}`}\n aria-selected={isActive}\n className={`${baseClass}__tab ${isActive ? `${baseClass}__tab--active` : ''}`}\n id={`${tabsID}-tab-${tab.slug}`}\n key={tab.slug}\n onClick={() => handleTabChange(tab.slug)}\n onKeyDown={(e) => handleTabKeyDown(e, index)}\n onMouseEnter={() => setHoveredTab(tab.slug)}\n onMouseLeave={() => setHoveredTab(null)}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n type=\"button\"\n >\n <Tooltip\n className={`${baseClass}__tooltip`}\n position=\"bottom\"\n show={hoveredTab === tab.slug}\n >\n {tab.label}\n </Tooltip>\n <span className={`${baseClass}__tab-icon`}>{tab.icon}</span>\n <span className={`${baseClass}__tab-label`}>{tab.label}</span>\n </button>\n )\n })}\n </div>\n <div className={`${baseClass}__content`}>\n {tabs.map((tab) => {\n const content = tabContent[tab.slug]\n const isActive = tab.slug === activeTabID\n return (\n <div\n aria-labelledby={`${tabsID}-tab-${tab.slug}`}\n hidden={!isActive}\n id={`${tabsID}-panel-${tab.slug}`}\n key={tab.slug}\n role=\"tabpanel\"\n tabIndex={0}\n >\n <DelayedSpinner\n baseClass={baseClass}\n delay={loadingDelay}\n isLoading={isActive && loadingTab === tab.slug}\n />\n <div style={loadingTab === tab.slug ? { display: 'none' } : undefined}>\n {content}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </SidebarTabsProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.client.js","names":["PREFERENCE_KEYS","React","useCallback","useId","useRef","useState","usePreferences","useServerFunctions","SidebarTabsProvider","DelayedSpinner","Tooltip","TabError","SidebarTabsClient","baseClass","initialActiveTabID","initialTabContents","loadingDelay","tabs","setPreference","serverFunction","tabsID","activeTabID","setActiveTabID","tabContent","setTabContent","loadingTab","setLoadingTab","hoveredTab","setHoveredTab","loadingTabsRef","Set","tabContentRef","loadTabContentRef","useEffect","current","prev","loadTabContent","tabSlug","revalidate","serverArgs","hasCachedContent","Boolean","has","add","result","name","args","searchParams","newContent","component","error","errorMessage","Error","message","handleRetry","clearedContent","_jsx","onRetry","delete","currentTab","reloadTabContent","handleTabChange","slug","NAV_SIDEBAR_ACTIVE_TAB","activeTab","tab","find","t","lazyLoadable","handleTabKeyDown","e","currentIndex","key","preventDefault","direction","newIndex","length","newTab","setTimeout","document","querySelector","focus","activeContent","_Fragment","activeTabSlug","_jsxs","className","role","map","index","isActive","id","onClick","onKeyDown","onMouseEnter","onMouseLeave","tabIndex","type","position","show","label","icon","content","hidden","delay","isLoading","style","display","undefined","Suspense","fallback"],"sources":["../../../../src/elements/Nav/SidebarTabs/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { PREFERENCE_KEYS } from 'payload/shared'\nimport React, { useCallback, useId, useRef, useState } from 'react'\n\nimport type { RenderTabServerFnArgs, RenderTabServerFnReturnType } from './renderTabServerFn.js'\n\nimport { usePreferences } from '../../../providers/Preferences/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { SidebarTabsProvider } from '../../../providers/SidebarTabs/index.js'\nimport { DelayedSpinner } from '../../DelayedSpinner/index.js'\nimport { Tooltip } from '../../Tooltip/index.js'\nimport { TabError } from './TabError/index.js'\n\nexport type TabMetadata = {\n icon: React.ReactNode\n isDefaultActive?: boolean\n label: string\n /** Whether this tab can be loaded/revalidated via serverFunction */\n lazyLoadable?: boolean\n slug: string\n}\n\nexport type SidebarTabsClientProps = {\n baseClass: string\n initialActiveTabID: string\n initialTabContents: Record<string, React.ReactNode>\n /**\n * Delay before showing loading spinner (in ms), prevents flashing on fast loads\n * @default 200\n */\n loadingDelay?: number\n tabs: TabMetadata[]\n}\n\nexport const SidebarTabsClient: React.FC<SidebarTabsClientProps> = ({\n baseClass,\n initialActiveTabID,\n initialTabContents,\n loadingDelay = 200,\n tabs,\n}) => {\n const { setPreference } = usePreferences()\n const { serverFunction } = useServerFunctions()\n const tabsID = useId()\n\n const [activeTabID, setActiveTabID] = useState(initialActiveTabID)\n const [tabContent, setTabContent] = useState<Record<string, React.ReactNode>>(initialTabContents)\n const [loadingTab, setLoadingTab] = useState<null | string>(null)\n const [hoveredTab, setHoveredTab] = useState<null | string>(null)\n const loadingTabsRef = useRef<Set<string>>(new Set())\n const tabContentRef = useRef(initialTabContents)\n // The retry button calls loadTabContent through this, since loadTabContent can't call itself\n const loadTabContentRef = useRef<typeof loadTabContent>(null)\n\n // Update cached content when server provides new initialTabContents\n // This is needed because useState only uses initialValue on first mount\n React.useEffect(() => {\n tabContentRef.current = { ...tabContentRef.current, ...initialTabContents }\n setTabContent((prev) => ({ ...prev, ...initialTabContents }))\n }, [initialTabContents])\n\n const loadTabContent = useCallback(\n async (\n tabSlug: string,\n {\n revalidate = false,\n serverArgs,\n }: { revalidate?: boolean; serverArgs?: Partial<RenderTabServerFnArgs> } = {},\n ) => {\n const hasCachedContent = Boolean(tabContentRef.current[tabSlug])\n\n // Skip if already loaded (unless revalidating) or currently loading\n if ((hasCachedContent && !revalidate) || loadingTabsRef.current.has(tabSlug)) {\n return\n }\n\n // Mark as loading - only show spinner if no cached content\n loadingTabsRef.current.add(tabSlug)\n if (!hasCachedContent) {\n setLoadingTab(tabSlug)\n }\n\n try {\n const result = (await serverFunction({\n name: 'render-tab',\n args: { searchParams: serverArgs?.searchParams, tabSlug } satisfies RenderTabServerFnArgs,\n })) as RenderTabServerFnReturnType\n\n const newContent = {\n ...tabContentRef.current,\n [tabSlug]: result.component,\n }\n\n tabContentRef.current = newContent\n setTabContent(newContent)\n } catch (error) {\n // On revalidate failure, keep showing cached content\n if (hasCachedContent && revalidate) {\n return\n }\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n\n const handleRetry = () => {\n // Clear the error and retry loading, threading the original serverArgs through so the\n // retry doesn't silently fall back to req.query-based rendering (the stale-tree bug).\n const clearedContent = { ...tabContentRef.current }\n delete clearedContent[tabSlug]\n tabContentRef.current = clearedContent\n setTabContent(clearedContent)\n void loadTabContentRef.current?.(tabSlug, { serverArgs })\n }\n\n const newContent = {\n ...tabContentRef.current,\n [tabSlug]: <TabError message={errorMessage} onRetry={handleRetry} />,\n }\n\n tabContentRef.current = newContent\n setTabContent(newContent)\n } finally {\n loadingTabsRef.current.delete(tabSlug)\n setLoadingTab((currentTab) => (currentTab === tabSlug ? null : currentTab))\n }\n },\n [serverFunction],\n )\n\n React.useEffect(() => {\n loadTabContentRef.current = loadTabContent\n }, [loadTabContent])\n\n const reloadTabContent = useCallback(\n (tabSlug: string, serverArgs?: Partial<RenderTabServerFnArgs>) => {\n // Clear cached content to force reload\n const clearedContent = { ...tabContentRef.current }\n delete clearedContent[tabSlug]\n tabContentRef.current = clearedContent\n setTabContent(clearedContent)\n\n void loadTabContent(tabSlug, { serverArgs })\n },\n [loadTabContent],\n )\n\n const handleTabChange = useCallback(\n (slug: string) => {\n setActiveTabID(slug)\n void setPreference(PREFERENCE_KEYS.NAV_SIDEBAR_ACTIVE_TAB, { activeTab: slug })\n // Only revalidate tabs that can be loaded via serverFunction\n // Pre-rendered React elements (like default nav) can't be revalidated\n const tab = tabs.find((t) => t.slug === slug)\n void loadTabContent(slug, { revalidate: tab?.lazyLoadable ?? false })\n },\n [setPreference, loadTabContent, tabs],\n )\n\n const handleTabKeyDown = useCallback(\n (e: React.KeyboardEvent, currentIndex: number) => {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault()\n const direction = e.key === 'ArrowLeft' ? -1 : 1\n const newIndex = (currentIndex + direction + tabs.length) % tabs.length\n const newTab = tabs[newIndex]\n handleTabChange(newTab.slug)\n // Focus will be handled by the tabIndex change\n setTimeout(() => {\n document.querySelector<HTMLButtonElement>(`.${baseClass}__tab--active`)?.focus()\n }, 0)\n }\n },\n [baseClass, handleTabChange, tabs],\n )\n\n const activeContent = tabContent[activeTabID]\n\n // If there's only one tab (the default nav), render it without tab UI\n if (tabs.length === 1) {\n return <>{activeContent}</>\n }\n\n return (\n <SidebarTabsProvider activeTabSlug={activeTabID} reloadTabContent={reloadTabContent}>\n <div className={baseClass}>\n <div className={`${baseClass}__tabs scrollbar-thin`} role=\"tablist\">\n {tabs.map((tab, index) => {\n const isActive = tab.slug === activeTabID\n\n return (\n <button\n aria-controls={`${tabsID}-panel-${tab.slug}`}\n aria-selected={isActive}\n className={`${baseClass}__tab ${isActive ? `${baseClass}__tab--active` : ''}`}\n id={`${tabsID}-tab-${tab.slug}`}\n key={tab.slug}\n onClick={() => handleTabChange(tab.slug)}\n onKeyDown={(e) => handleTabKeyDown(e, index)}\n onMouseEnter={() => setHoveredTab(tab.slug)}\n onMouseLeave={() => setHoveredTab(null)}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n type=\"button\"\n >\n <Tooltip\n className={`${baseClass}__tooltip`}\n position=\"bottom\"\n show={hoveredTab === tab.slug}\n >\n {tab.label}\n </Tooltip>\n <span className={`${baseClass}__tab-icon`}>{tab.icon}</span>\n <span className={`${baseClass}__tab-label`}>{tab.label}</span>\n </button>\n )\n })}\n </div>\n <div className={`${baseClass}__content`}>\n {tabs.map((tab) => {\n const content = tabContent[tab.slug]\n const isActive = tab.slug === activeTabID\n return (\n <div\n aria-labelledby={`${tabsID}-tab-${tab.slug}`}\n hidden={!isActive}\n id={`${tabsID}-panel-${tab.slug}`}\n key={tab.slug}\n role=\"tabpanel\"\n tabIndex={-1}\n >\n <DelayedSpinner\n baseClass={baseClass}\n delay={loadingDelay}\n isLoading={isActive && loadingTab === tab.slug}\n />\n <div style={loadingTab === tab.slug ? { display: 'none' } : undefined}>\n <React.Suspense\n fallback={\n <DelayedSpinner baseClass={baseClass} delay={loadingDelay} isLoading />\n }\n >\n {content}\n </React.Suspense>\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </SidebarTabsProvider>\n )\n}\n"],"mappings":"AAAA;;;AAEA,SAASA,eAAe,QAAQ;AAChC,OAAOC,KAAA,IAASC,WAAW,EAAEC,KAAK,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAI5D,SAASC,cAAc,QAAQ;AAC/B,SAASC,kBAAkB,QAAQ;AACnC,SAASC,mBAAmB,QAAQ;AACpC,SAASC,cAAc,QAAQ;AAC/B,SAASC,OAAO,QAAQ;AACxB,SAASC,QAAQ,QAAQ;AAuBzB,OAAO,MAAMC,iBAAA,GAAsDA,CAAC;EAClEC,SAAS;EACTC,kBAAkB;EAClBC,kBAAkB;EAClBC,YAAA,GAAe,GAAG;EAClBC;AAAI,CACL;EACC,MAAM;IAAEC;EAAa,CAAE,GAAGZ,cAAA;EAC1B,MAAM;IAAEa;EAAc,CAAE,GAAGZ,kBAAA;EAC3B,MAAMa,MAAA,GAASjB,KAAA;EAEf,MAAM,CAACkB,WAAA,EAAaC,cAAA,CAAe,GAAGjB,QAAA,CAASS,kBAAA;EAC/C,MAAM,CAACS,UAAA,EAAYC,aAAA,CAAc,GAAGnB,QAAA,CAA0CU,kBAAA;EAC9E,MAAM,CAACU,UAAA,EAAYC,aAAA,CAAc,GAAGrB,QAAA,CAAwB;EAC5D,MAAM,CAACsB,UAAA,EAAYC,aAAA,CAAc,GAAGvB,QAAA,CAAwB;EAC5D,MAAMwB,cAAA,GAAiBzB,MAAA,CAAoB,IAAI0B,GAAA;EAC/C,MAAMC,aAAA,GAAgB3B,MAAA,CAAOW,kBAAA;EAC7B;EACA,MAAMiB,iBAAA,GAAoB5B,MAAA,CAA8B;EAExD;EACA;EACAH,KAAA,CAAMgC,SAAS,CAAC;IACdF,aAAA,CAAcG,OAAO,GAAG;MAAE,GAAGH,aAAA,CAAcG,OAAO;MAAE,GAAGnB;IAAmB;IAC1ES,aAAA,CAAeW,IAAA,KAAU;MAAE,GAAGA,IAAI;MAAE,GAAGpB;IAAmB;EAC5D,GAAG,CAACA,kBAAA,CAAmB;EAEvB,MAAMqB,cAAA,GAAiBlC,WAAA,CACrB,OACEmC,OAAA,EACA;IACEC,UAAA,GAAa,KAAK;IAClBC;EAAU,CAC4D,GAAG,CAAC,CAAC;IAE7E,MAAMC,gBAAA,GAAmBC,OAAA,CAAQV,aAAA,CAAcG,OAAO,CAACG,OAAA,CAAQ;IAE/D;IACA,IAAIG,gBAAC,IAAoB,CAACF,UAAA,IAAeT,cAAA,CAAeK,OAAO,CAACQ,GAAG,CAACL,OAAA,GAAU;MAC5E;IACF;IAEA;IACAR,cAAA,CAAeK,OAAO,CAACS,GAAG,CAACN,OAAA;IAC3B,IAAI,CAACG,gBAAA,EAAkB;MACrBd,aAAA,CAAcW,OAAA;IAChB;IAEA,IAAI;MACF,MAAMO,MAAA,GAAU,MAAMzB,cAAA,CAAe;QACnC0B,IAAA,EAAM;QACNC,IAAA,EAAM;UAAEC,YAAA,EAAcR,UAAA,EAAYQ,YAAA;UAAcV;QAAQ;MAC1D;MAEA,MAAMW,YAAA,GAAa;QACjB,GAAGjB,aAAA,CAAcG,OAAO;QACxB,CAACG,OAAA,GAAUO,MAAA,CAAOK;MACpB;MAEAlB,aAAA,CAAcG,OAAO,GAAGc,YAAA;MACxBxB,aAAA,CAAcwB,YAAA;IAChB,EAAE,OAAOE,KAAA,EAAO;MACd;MACA,IAAIV,gBAAA,IAAoBF,UAAA,EAAY;QAClC;MACF;MAEA,MAAMa,YAAA,GAAeD,KAAA,YAAiBE,KAAA,GAAQF,KAAA,CAAMG,OAAO,GAAG;MAE9D,MAAMC,WAAA,GAAcA,CAAA;QAClB;QACA;QACA,MAAMC,cAAA,GAAiB;UAAE,GAAGxB,aAAA,CAAcG;QAAQ;QAClD,OAAOqB,cAAc,CAAClB,OAAA,CAAQ;QAC9BN,aAAA,CAAcG,OAAO,GAAGqB,cAAA;QACxB/B,aAAA,CAAc+B,cAAA;QACd,KAAKvB,iBAAA,CAAkBE,OAAO,GAAGG,OAAA,EAAS;UAAEE;QAAW;MACzD;MAEA,MAAMS,UAAA,GAAa;QACjB,GAAGjB,aAAA,CAAcG,OAAO;QACxB,CAACG,OAAA,GAAQ,aAAEmB,IAAA,CAAC7C,QAAA;UAAS0C,OAAA,EAASF,YAAA;UAAcM,OAAA,EAASH;;MACvD;MAEAvB,aAAA,CAAcG,OAAO,GAAGc,UAAA;MACxBxB,aAAA,CAAcwB,UAAA;IAChB,UAAU;MACRnB,cAAA,CAAeK,OAAO,CAACwB,MAAM,CAACrB,OAAA;MAC9BX,aAAA,CAAeiC,UAAA,IAAgBA,UAAA,KAAetB,OAAA,GAAU,OAAOsB,UAAA;IACjE;EACF,GACA,CAACxC,cAAA,CAAe;EAGlBlB,KAAA,CAAMgC,SAAS,CAAC;IACdD,iBAAA,CAAkBE,OAAO,GAAGE,cAAA;EAC9B,GAAG,CAACA,cAAA,CAAe;EAEnB,MAAMwB,gBAAA,GAAmB1D,WAAA,CACvB,CAACmC,SAAA,EAAiBE,YAAA;IAChB;IACA,MAAMgB,gBAAA,GAAiB;MAAE,GAAGxB,aAAA,CAAcG;IAAQ;IAClD,OAAOqB,gBAAc,CAAClB,SAAA,CAAQ;IAC9BN,aAAA,CAAcG,OAAO,GAAGqB,gBAAA;IACxB/B,aAAA,CAAc+B,gBAAA;IAEd,KAAKnB,cAAA,CAAeC,SAAA,EAAS;MAAEE,UAAA,EAAAA;IAAW;EAC5C,GACA,CAACH,cAAA,CAAe;EAGlB,MAAMyB,eAAA,GAAkB3D,WAAA,CACrB4D,IAAA;IACCxC,cAAA,CAAewC,IAAA;IACf,KAAK5C,aAAA,CAAclB,eAAA,CAAgB+D,sBAAsB,EAAE;MAAEC,SAAA,EAAWF;IAAK;IAC7E;IACA;IACA,MAAMG,GAAA,GAAMhD,IAAA,CAAKiD,IAAI,CAAEC,CAAA,IAAMA,CAAA,CAAEL,IAAI,KAAKA,IAAA;IACxC,KAAK1B,cAAA,CAAe0B,IAAA,EAAM;MAAExB,UAAA,EAAY2B,GAAA,EAAKG,YAAA,IAAgB;IAAM;EACrE,GACA,CAAClD,aAAA,EAAekB,cAAA,EAAgBnB,IAAA,CAAK;EAGvC,MAAMoD,gBAAA,GAAmBnE,WAAA,CACvB,CAACoE,CAAA,EAAwBC,YAAA;IACvB,IAAID,CAAA,CAAEE,GAAG,KAAK,eAAeF,CAAA,CAAEE,GAAG,KAAK,cAAc;MACnDF,CAAA,CAAEG,cAAc;MAChB,MAAMC,SAAA,GAAYJ,CAAA,CAAEE,GAAG,KAAK,cAAc,CAAC,IAAI;MAC/C,MAAMG,QAAA,GAAW,CAACJ,YAAA,GAAeG,SAAA,GAAYzD,IAAA,CAAK2D,MAAM,IAAI3D,IAAA,CAAK2D,MAAM;MACvE,MAAMC,MAAA,GAAS5D,IAAI,CAAC0D,QAAA,CAAS;MAC7Bd,eAAA,CAAgBgB,MAAA,CAAOf,IAAI;MAC3B;MACAgB,UAAA,CAAW;QACTC,QAAA,CAASC,aAAa,CAAoB,IAAInE,SAAA,eAAwB,GAAGoE,KAAA;MAC3E,GAAG;IACL;EACF,GACA,CAACpE,SAAA,EAAWgD,eAAA,EAAiB5C,IAAA,CAAK;EAGpC,MAAMiE,aAAA,GAAgB3D,UAAU,CAACF,WAAA,CAAY;EAE7C;EACA,IAAIJ,IAAA,CAAK2D,MAAM,KAAK,GAAG;IACrB,oBAAOpB,IAAA,CAAA2B,SAAA;gBAAGD;;EACZ;EAEA,oBACE1B,IAAA,CAAChD,mBAAA;IAAoB4E,aAAA,EAAe/D,WAAA;IAAauC,gBAAA,EAAkBA,gBAAA;cACjE,aAAAyB,KAAA,CAAC;MAAIC,SAAA,EAAWzE,SAAA;8BACd2C,IAAA,CAAC;QAAI8B,SAAA,EAAW,GAAGzE,SAAA,uBAAgC;QAAE0E,IAAA,EAAK;kBACvDtE,IAAA,CAAKuE,GAAG,CAAC,CAACvB,KAAA,EAAKwB,KAAA;UACd,MAAMC,QAAA,GAAWzB,KAAA,CAAIH,IAAI,KAAKzC,WAAA;UAE9B,oBACEgE,KAAA,CAAC;YACC,iBAAe,GAAGjE,MAAA,UAAgB6C,KAAA,CAAIH,IAAI,EAAE;YAC5C,iBAAe4B,QAAA;YACfJ,SAAA,EAAW,GAAGzE,SAAA,SAAkB6E,QAAA,GAAW,GAAG7E,SAAA,eAAwB,GAAG,IAAI;YAC7E8E,EAAA,EAAI,GAAGvE,MAAA,QAAc6C,KAAA,CAAIH,IAAI,EAAE;YAE/B8B,OAAA,EAASA,CAAA,KAAM/B,eAAA,CAAgBI,KAAA,CAAIH,IAAI;YACvC+B,SAAA,EAAYvB,GAAA,IAAMD,gBAAA,CAAiBC,GAAA,EAAGmB,KAAA;YACtCK,YAAA,EAAcA,CAAA,KAAMlE,aAAA,CAAcqC,KAAA,CAAIH,IAAI;YAC1CiC,YAAA,EAAcA,CAAA,KAAMnE,aAAA,CAAc;YAClC2D,IAAA,EAAK;YACLS,QAAA,EAAUN,QAAA,GAAW,IAAI,CAAC;YAC1BO,IAAA,EAAK;oCAELzC,IAAA,CAAC9C,OAAA;cACC4E,SAAA,EAAW,GAAGzE,SAAA,WAAoB;cAClCqF,QAAA,EAAS;cACTC,IAAA,EAAMxE,UAAA,KAAesC,KAAA,CAAIH,IAAI;wBAE5BG,KAAA,CAAImC;6BAEP5C,IAAA,CAAC;cAAK8B,SAAA,EAAW,GAAGzE,SAAA,YAAqB;wBAAGoD,KAAA,CAAIoC;6BAChD7C,IAAA,CAAC;cAAK8B,SAAA,EAAW,GAAGzE,SAAA,aAAsB;wBAAGoD,KAAA,CAAImC;;aAjB5CnC,KAAA,CAAIH,IAAI;QAoBnB;uBAEFN,IAAA,CAAC;QAAI8B,SAAA,EAAW,GAAGzE,SAAA,WAAoB;kBACpCI,IAAA,CAAKuE,GAAG,CAAEvB,KAAA;UACT,MAAMqC,OAAA,GAAU/E,UAAU,CAAC0C,KAAA,CAAIH,IAAI,CAAC;UACpC,MAAM4B,UAAA,GAAWzB,KAAA,CAAIH,IAAI,KAAKzC,WAAA;UAC9B,oBACEgE,KAAA,CAAC;YACC,mBAAiB,GAAGjE,MAAA,QAAc6C,KAAA,CAAIH,IAAI,EAAE;YAC5CyC,MAAA,EAAQ,CAACb,UAAA;YACTC,EAAA,EAAI,GAAGvE,MAAA,UAAgB6C,KAAA,CAAIH,IAAI,EAAE;YAEjCyB,IAAA,EAAK;YACLS,QAAA,EAAU,CAAC;oCAEXxC,IAAA,CAAC/C,cAAA;cACCI,SAAA,EAAWA,SAAA;cACX2F,KAAA,EAAOxF,YAAA;cACPyF,SAAA,EAAWf,UAAA,IAAYjE,UAAA,KAAewC,KAAA,CAAIH;6BAE5CN,IAAA,CAAC;cAAIkD,KAAA,EAAOjF,UAAA,KAAewC,KAAA,CAAIH,IAAI,GAAG;gBAAE6C,OAAA,EAAS;cAAO,IAAIC,SAAA;wBAC1D,aAAApD,IAAA,CAACvD,KAAA,CAAM4G,QAAQ;gBACbC,QAAA,eACEtD,IAAA,CAAC/C,cAAA;kBAAeI,SAAA,EAAWA,SAAA;kBAAW2F,KAAA,EAAOxF,YAAA;kBAAcyF,SAAS;;0BAGrEH;;;aAfArC,KAAA,CAAIH,IAAI;QAoBnB;;;;AAKV","ignoreList":[]}
@@ -37,7 +37,7 @@
37
37
 
38
38
  &:focus-visible {
39
39
  outline: var(--accessibility-outline);
40
- outline-offset: var(--accessibility-outline-offset);
40
+ outline-offset: var(--accessibility-outline-inset);
41
41
  border-radius: var(--button-radius);
42
42
  }
43
43
  }
@@ -3,6 +3,7 @@ type NavContextType = {
3
3
  hydrated: boolean;
4
4
  navOpen: boolean;
5
5
  navRef: React.RefObject<HTMLDivElement | null>;
6
+ navToggleRef?: React.RefObject<HTMLAnchorElement | HTMLButtonElement | null>;
6
7
  setNavOpen: (value: boolean, persist?: boolean) => void;
7
8
  };
8
9
  /**