@payloadcms/ui 4.0.0-canary.2 → 4.0.0-internal.011fd46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/colors.css +3 -0
- package/dist/css/design-tokens.css +5 -0
- package/dist/css/elevations.css +4 -0
- package/dist/elements/AppHeader/index.d.ts +3 -2
- package/dist/elements/AppHeader/index.d.ts.map +1 -1
- package/dist/elements/AppHeader/index.js +2 -2
- package/dist/elements/AppHeader/index.js.map +1 -1
- package/dist/elements/ColumnSelection/Popup.d.ts +12 -0
- package/dist/elements/ColumnSelection/Popup.d.ts.map +1 -0
- package/dist/elements/{ColumnSelector/index.js → ColumnSelection/Popup.js} +23 -12
- package/dist/elements/ColumnSelection/Popup.js.map +1 -0
- package/dist/elements/ColumnSelection/index.d.ts +10 -0
- package/dist/elements/ColumnSelection/index.d.ts.map +1 -0
- package/dist/elements/{ColumnsButton → ColumnSelection}/index.js +23 -17
- package/dist/elements/ColumnSelection/index.js.map +1 -0
- package/dist/elements/DocumentControls/index.css +7 -1
- package/dist/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/elements/DocumentControls/index.js +2 -2
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerHeader/index.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerHeader/index.js +5 -3
- package/dist/elements/DocumentDrawer/DrawerHeader/index.js.map +1 -1
- package/dist/elements/GroupBy/Popup.d.ts +21 -0
- package/dist/elements/GroupBy/Popup.d.ts.map +1 -0
- package/dist/elements/GroupBy/Popup.js +269 -0
- package/dist/elements/GroupBy/Popup.js.map +1 -0
- package/dist/elements/GroupBy/index.d.ts +12 -0
- package/dist/elements/GroupBy/index.d.ts.map +1 -0
- package/dist/elements/GroupBy/index.js +91 -0
- package/dist/elements/GroupBy/index.js.map +1 -0
- package/dist/elements/ListColumnSelectionButton/index.d.ts +11 -0
- package/dist/elements/ListColumnSelectionButton/index.d.ts.map +1 -0
- package/dist/elements/ListColumnSelectionButton/index.js +37 -0
- package/dist/elements/ListColumnSelectionButton/index.js.map +1 -0
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +7 -7
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListGroupByButton/index.d.ts +12 -0
- package/dist/elements/ListGroupByButton/index.d.ts.map +1 -0
- package/dist/elements/ListGroupByButton/index.js +55 -0
- package/dist/elements/ListGroupByButton/index.js.map +1 -0
- package/dist/elements/ListWhereBuilder/index.d.ts +16 -0
- package/dist/elements/ListWhereBuilder/index.d.ts.map +1 -0
- package/dist/elements/ListWhereBuilder/index.js +62 -0
- package/dist/elements/ListWhereBuilder/index.js.map +1 -0
- package/dist/elements/Popup/PopupButtonList/index.css +5 -0
- package/dist/elements/Popup/PopupGroupLabel/index.css +8 -5
- package/dist/elements/Popup/index.d.ts.map +1 -1
- package/dist/elements/Popup/index.js +42 -11
- package/dist/elements/Popup/index.js.map +1 -1
- package/dist/elements/PublishMany/DrawerContent.d.ts +2 -1
- package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
- package/dist/elements/PublishMany/index.d.ts +2 -6
- package/dist/elements/PublishMany/index.d.ts.map +1 -1
- package/dist/elements/PublishMany/index.js +0 -38
- package/dist/elements/PublishMany/index.js.map +1 -1
- package/dist/elements/QueryPresets/cells/ColumnsCell/{index.scss → index.css} +1 -3
- package/dist/elements/QueryPresets/cells/ColumnsCell/index.d.ts +1 -1
- package/dist/elements/QueryPresets/cells/ColumnsCell/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/cells/ColumnsCell/index.js +1 -1
- package/dist/elements/QueryPresets/cells/ColumnsCell/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts +1 -1
- package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/fields/ColumnsField/index.js +77 -48
- package/dist/elements/QueryPresets/fields/ColumnsField/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts +1 -1
- package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/fields/GroupByField/index.js +12 -21
- package/dist/elements/QueryPresets/fields/GroupByField/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/Heading/index.css +52 -0
- package/dist/elements/QueryPresets/fields/Heading/index.d.ts +7 -0
- package/dist/elements/QueryPresets/fields/Heading/index.d.ts.map +1 -0
- package/dist/elements/QueryPresets/fields/Heading/index.js +31 -0
- package/dist/elements/QueryPresets/fields/Heading/index.js.map +1 -0
- package/dist/elements/QueryPresets/fields/WhereField/index.d.ts +1 -1
- package/dist/elements/QueryPresets/fields/WhereField/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/fields/WhereField/index.js +24 -23
- package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/fields.css +23 -0
- package/dist/elements/ReactSelect/getCaptureMenuScroll.d.ts +5 -0
- package/dist/elements/ReactSelect/getCaptureMenuScroll.d.ts.map +1 -0
- package/dist/elements/ReactSelect/getCaptureMenuScroll.js +10 -0
- package/dist/elements/ReactSelect/getCaptureMenuScroll.js.map +1 -0
- package/dist/elements/ReactSelect/getMenuListStyles.d.ts +6 -0
- package/dist/elements/ReactSelect/getMenuListStyles.d.ts.map +1 -0
- package/dist/elements/ReactSelect/getMenuListStyles.js +7 -0
- package/dist/elements/ReactSelect/getMenuListStyles.js.map +1 -0
- package/dist/elements/ReactSelect/index.css +0 -1
- package/dist/elements/ReactSelect/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/index.js +168 -148
- package/dist/elements/ReactSelect/index.js.map +1 -1
- package/dist/elements/ReactSelect/types.d.ts +1 -0
- package/dist/elements/ReactSelect/types.d.ts.map +1 -1
- package/dist/elements/ReactSelect/types.js.map +1 -1
- package/dist/elements/RelationshipTable/index.js +2 -2
- package/dist/elements/RelationshipTable/index.js.map +1 -1
- package/dist/elements/SortColumn/index.css +1 -1
- package/dist/elements/Table/index.css +24 -2
- package/dist/elements/Toasts/fieldErrors.d.ts +1 -0
- package/dist/elements/Toasts/fieldErrors.d.ts.map +1 -1
- package/dist/elements/Toasts/fieldErrors.js +25 -9
- package/dist/elements/Toasts/fieldErrors.js.map +1 -1
- package/dist/elements/Toasts/index.css +5 -0
- package/dist/elements/UnpublishMany/DrawerContent.d.ts +2 -1
- package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
- package/dist/elements/UnpublishMany/index.d.ts +2 -4
- package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
- package/dist/elements/UnpublishMany/index.js +0 -38
- package/dist/elements/UnpublishMany/index.js.map +1 -1
- package/dist/elements/UserMenu/LanguageMenu/index.js +1 -1
- package/dist/elements/UserMenu/LanguageMenu/index.js.map +1 -1
- package/dist/elements/UserMenu/SettingsMenu/index.d.ts +6 -2
- package/dist/elements/UserMenu/SettingsMenu/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/SettingsMenu/index.js +15 -10
- package/dist/elements/UserMenu/SettingsMenu/index.js.map +1 -1
- package/dist/elements/UserMenu/ThemeMenu/index.js +1 -1
- package/dist/elements/UserMenu/ThemeMenu/index.js.map +1 -1
- package/dist/elements/UserMenu/index.d.ts +2 -1
- package/dist/elements/UserMenu/index.d.ts.map +1 -1
- package/dist/elements/UserMenu/index.js +8 -5
- package/dist/elements/UserMenu/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.d.ts +1 -0
- package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.js +17 -2
- package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
- package/dist/elements/WhereBuilder/index.d.ts +4 -3
- package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/index.js +71 -62
- package/dist/elements/WhereBuilder/index.js.map +1 -1
- package/dist/elements/WhereBuilder/types.d.ts +6 -5
- package/dist/elements/WhereBuilder/types.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/types.js.map +1 -1
- package/dist/exports/client/index.d.ts +2 -0
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +26 -26
- package/dist/exports/client/index.js.map +4 -4
- package/dist/fields/RadioGroup/index.css +6 -0
- package/dist/icons/Check/index.css +1 -2
- package/dist/icons/Check/index.js +1 -1
- package/dist/icons/Check/index.js.map +1 -1
- package/dist/icons/Warning/index.css +1 -7
- package/dist/icons/Warning/index.d.ts +1 -1
- package/dist/icons/Warning/index.d.ts.map +1 -1
- package/dist/icons/Warning/index.js +11 -16
- package/dist/icons/Warning/index.js.map +1 -1
- package/dist/providers/ToastContainer/index.css +208 -0
- package/dist/providers/ToastContainer/index.d.ts +1 -0
- package/dist/providers/ToastContainer/index.d.ts.map +1 -1
- package/dist/providers/ToastContainer/index.js +19 -6
- package/dist/providers/ToastContainer/index.js.map +1 -1
- package/dist/scss/app.scss +7 -2
- package/dist/styles.css +1 -1
- package/dist/templates/Default/index.d.ts.map +1 -1
- package/dist/templates/Default/index.js +51 -9
- package/dist/templates/Default/index.js.map +1 -1
- package/dist/utilities/reduceFieldsToOptions.js +1 -1
- package/dist/utilities/reduceFieldsToOptions.js.map +1 -1
- package/dist/views/HierarchyList/DocumentListSelection/index.js +4 -4
- package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -1
- package/dist/views/List/ListSelection/index.js +4 -4
- package/dist/views/List/ListSelection/index.js.map +1 -1
- package/dist/views/List/index.client.d.ts.map +1 -1
- package/dist/views/List/index.client.js +3 -3
- package/dist/views/List/index.client.js.map +1 -1
- package/dist/views/List/renderListViewSlots.d.ts.map +1 -1
- package/dist/views/List/renderListViewSlots.js +9 -6
- package/dist/views/List/renderListViewSlots.js.map +1 -1
- package/dist/views/Logout/LogoutClient.js +1 -1
- package/dist/views/Logout/LogoutClient.js.map +1 -1
- package/dist/views/Versions/index.css +0 -4
- package/package.json +5 -5
- package/dist/elements/ColumnSelector/index.d.ts +0 -9
- package/dist/elements/ColumnSelector/index.d.ts.map +0 -1
- package/dist/elements/ColumnSelector/index.js.map +0 -1
- package/dist/elements/ColumnsButton/index.d.ts +0 -7
- package/dist/elements/ColumnsButton/index.d.ts.map +0 -1
- package/dist/elements/ColumnsButton/index.js.map +0 -1
- package/dist/elements/GroupByBuilder/index.d.ts +0 -12
- package/dist/elements/GroupByBuilder/index.d.ts.map +0 -1
- package/dist/elements/GroupByBuilder/index.js +0 -164
- package/dist/elements/GroupByBuilder/index.js.map +0 -1
- package/dist/elements/GroupByBuilder/index.scss +0 -39
- package/dist/elements/GroupByControl/index.d.ts +0 -9
- package/dist/elements/GroupByControl/index.d.ts.map +0 -1
- package/dist/elements/GroupByControl/index.js +0 -254
- package/dist/elements/GroupByControl/index.js.map +0 -1
- package/dist/elements/QueryPresets/fields/ColumnsField/index.scss +0 -17
- package/dist/elements/QueryPresets/fields/GroupByField/index.scss +0 -17
- package/dist/elements/QueryPresets/fields/WhereField/index.scss +0 -23
- package/dist/scss/toasts.scss +0 -146
- /package/dist/elements/{ColumnSelector/index.css → ColumnSelection/Popup.css} +0 -0
- /package/dist/elements/{GroupByControl/index.css → GroupBy/Popup.css} +0 -0
|
@@ -10,11 +10,11 @@ import { Dots } from '../../icons/Dots/index.js';
|
|
|
10
10
|
import { useListQuery } from '../../providers/ListQuery/index.js';
|
|
11
11
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
12
12
|
import { Button } from '../Button/index.js';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
13
|
+
import { ListColumnSelectionButton } from '../ListColumnSelectionButton/index.js';
|
|
14
|
+
import { ListGroupByButton } from '../ListGroupByButton/index.js';
|
|
15
|
+
import { ListWhereBuilder } from '../ListWhereBuilder/index.js';
|
|
15
16
|
import { QueryPresetBar } from '../QueryPresets/QueryPresetBar/index.js';
|
|
16
17
|
import { ListSearchFilter } from '../Search/ListSearchFilter/index.js';
|
|
17
|
-
import { WhereBuilder } from '../WhereBuilder/index.js';
|
|
18
18
|
import './index.css';
|
|
19
19
|
const baseClass = 'list-controls';
|
|
20
20
|
/**
|
|
@@ -138,10 +138,10 @@ export const ListControls = props => {
|
|
|
138
138
|
selected: isWhereOpen || hasActiveFilters,
|
|
139
139
|
size: "medium",
|
|
140
140
|
children: t("general:filters")
|
|
141
|
-
}), _jsx(
|
|
141
|
+
}), _jsx(ListGroupByButton, {
|
|
142
142
|
collectionSlug: collectionConfig.slug,
|
|
143
143
|
fields: collectionConfig.fields
|
|
144
|
-
}), enableColumns && _jsx(
|
|
144
|
+
}), enableColumns && _jsx(ListColumnSelectionButton, {
|
|
145
145
|
collectionSlug: collectionConfig.slug
|
|
146
146
|
}), enableSort && _jsx(Button, {
|
|
147
147
|
buttonStyle: "secondary",
|
|
@@ -182,11 +182,11 @@ export const ListControls = props => {
|
|
|
182
182
|
}), !isControlled && isWhereOpen && _jsx("div", {
|
|
183
183
|
className: `${baseClass}__where`,
|
|
184
184
|
id: `${baseClass}-where`,
|
|
185
|
-
children: _jsx(
|
|
185
|
+
children: _jsx(ListWhereBuilder, {
|
|
186
186
|
collectionPluralLabel: collectionConfig?.labels?.plural,
|
|
187
187
|
collectionSlug: collectionConfig.slug,
|
|
188
188
|
fields: collectionConfig?.fields,
|
|
189
|
-
|
|
189
|
+
onEmptyRemove: () => setVisibleDrawer(undefined),
|
|
190
190
|
renderedFilters,
|
|
191
191
|
resolvedFilterOptions
|
|
192
192
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useWindowInfo","React","Fragment","useEffect","useRef","useState","Popup","PopupList","ChevronIcon","Dots","useListQuery","useTranslation","Button","ColumnsButton","GroupByControl","QueryPresetBar","ListSearchFilter","WhereBuilder","baseClass","ListControls","props","$","beforeActions","collectionConfig","collectionSlug","disableQueryPresets","enableColumns","t0","enableFilters","t1","enableSort","t2","hasCreatePermission","isWhereOpen","isWhereOpenFromProps","listMenuItems","newDocumentURL","onWhereToggle","queryPreset","activePreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","undefined","isControlled","handleSearchChange","hasActiveFilters","query","t","breakpoints","t3","s","smallBreak","searchLabelTranslated","label","split","hasWhereParam","Boolean","where","visibleDrawer","setVisibleDrawer","t4","current","t5","t6","t7","handleWhereToggle","_jsxs","className","children","_jsx","onSearchChange","searchQueryParam","search","enableQueryPresets","buttonStyle","extraButtonProps","icon","direction","size","onClick","selected","slug","fields","el","id","to","Array","isArray","length","button","ariaLabel","horizontalAlign","verticalAlign","ButtonGroup","map","_temp","collectionPluralLabel","labels","plural","onClose","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 { ColumnsButton } from '../ColumnsButton/index.js'\nimport { GroupByControl } from '../GroupByControl/index.js'\nimport { QueryPresetBar } from '../QueryPresets/QueryPresetBar/index.js'\nimport { ListSearchFilter } from '../Search/ListSearchFilter/index.js'\nimport { WhereBuilder } from '../WhereBuilder/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 isWhereOpen: isWhereOpenFromProps,\n listMenuItems,\n newDocumentURL,\n onWhereToggle,\n queryPreset: activePreset,\n queryPresetPermissions,\n renderedFilters,\n resolvedFilterOptions,\n } = props\n\n const isControlled = typeof onWhereToggle === 'function'\n\n const { handleSearchChange, hasActiveFilters, query } = 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 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': visibleDrawer === 'where',\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 <GroupByControl collectionSlug={collectionConfig.slug} fields={collectionConfig.fields} />\n {enableColumns && <ColumnsButton 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 {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 {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 size=\"medium\"\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 <WhereBuilder\n collectionPluralLabel={collectionConfig?.labels?.plural}\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig?.fields}\n onClose={() => 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","useRef","useState","Popup","PopupList","ChevronIcon","Dots","useListQuery","useTranslation","Button","ListColumnSelectionButton","ListGroupByButton","ListWhereBuilder","QueryPresetBar","ListSearchFilter","baseClass","ListControls","props","$","beforeActions","collectionConfig","collectionSlug","disableQueryPresets","enableColumns","t0","enableFilters","t1","enableSort","t2","hasCreatePermission","isWhereOpen","isWhereOpenFromProps","listMenuItems","newDocumentURL","onWhereToggle","queryPreset","activePreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","undefined","isControlled","handleSearchChange","hasActiveFilters","query","t","breakpoints","t3","s","smallBreak","searchLabelTranslated","label","split","hasWhereParam","Boolean","where","visibleDrawer","setVisibleDrawer","t4","current","t5","t6","t7","handleWhereToggle","_jsxs","className","children","_jsx","onSearchChange","searchQueryParam","search","enableQueryPresets","buttonStyle","extraButtonProps","icon","direction","size","onClick","selected","slug","fields","el","id","to","Array","isArray","length","button","ariaLabel","horizontalAlign","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 { 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 isWhereOpen: isWhereOpenFromProps,\n listMenuItems,\n newDocumentURL,\n onWhereToggle,\n queryPreset: activePreset,\n queryPresetPermissions,\n renderedFilters,\n resolvedFilterOptions,\n } = props\n\n const isControlled = typeof onWhereToggle === 'function'\n\n const { handleSearchChange, hasActiveFilters, query } = 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 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': visibleDrawer === 'where',\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 {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 {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 size=\"medium\"\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":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ClientField, SanitizedCollectionConfig } from 'payload';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export type ListGroupByButtonProps = {
|
|
4
|
+
readonly collectionSlug: SanitizedCollectionConfig['slug'];
|
|
5
|
+
readonly fields: ClientField[];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Connects the presentational {@link GroupByButton} to the list query state, so the
|
|
9
|
+
* control itself stays unaware of where its value is stored.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ListGroupByButton: React.FC<ListGroupByButtonProps>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ListGroupByButton/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAErE,OAAO,KAAsB,MAAM,OAAO,CAAA;AAK1C,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAC1D,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAC/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAkB9D,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { c as _c } from "react/compiler-runtime";
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
import React, { useCallback } from 'react';
|
|
6
|
+
import { useListQuery } from '../../providers/ListQuery/index.js';
|
|
7
|
+
import { GroupByButton } from '../GroupBy/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Connects the presentational {@link GroupByButton} to the list query state, so the
|
|
10
|
+
* control itself stays unaware of where its value is stored.
|
|
11
|
+
*/
|
|
12
|
+
export const ListGroupByButton = t0 => {
|
|
13
|
+
const $ = _c(7);
|
|
14
|
+
const {
|
|
15
|
+
collectionSlug,
|
|
16
|
+
fields
|
|
17
|
+
} = t0;
|
|
18
|
+
const {
|
|
19
|
+
query,
|
|
20
|
+
refineListData
|
|
21
|
+
} = useListQuery();
|
|
22
|
+
let t1;
|
|
23
|
+
if ($[0] !== refineListData) {
|
|
24
|
+
t1 = groupBy => {
|
|
25
|
+
refineListData({
|
|
26
|
+
groupBy,
|
|
27
|
+
page: 1
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
$[0] = refineListData;
|
|
31
|
+
$[1] = t1;
|
|
32
|
+
} else {
|
|
33
|
+
t1 = $[1];
|
|
34
|
+
}
|
|
35
|
+
const handleChange = t1;
|
|
36
|
+
const t2 = query?.groupBy ?? "";
|
|
37
|
+
let t3;
|
|
38
|
+
if ($[2] !== collectionSlug || $[3] !== fields || $[4] !== handleChange || $[5] !== t2) {
|
|
39
|
+
t3 = _jsx(GroupByButton, {
|
|
40
|
+
collectionSlug,
|
|
41
|
+
fields,
|
|
42
|
+
onChange: handleChange,
|
|
43
|
+
value: t2
|
|
44
|
+
});
|
|
45
|
+
$[2] = collectionSlug;
|
|
46
|
+
$[3] = fields;
|
|
47
|
+
$[4] = handleChange;
|
|
48
|
+
$[5] = t2;
|
|
49
|
+
$[6] = t3;
|
|
50
|
+
} else {
|
|
51
|
+
t3 = $[6];
|
|
52
|
+
}
|
|
53
|
+
return t3;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","React","useCallback","useListQuery","GroupByButton","ListGroupByButton","t0","$","collectionSlug","fields","query","refineListData","t1","groupBy","page","handleChange","t2","t3","_jsx","onChange","value"],"sources":["../../../src/elements/ListGroupByButton/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, SanitizedCollectionConfig } from 'payload'\n\nimport React, { useCallback } from 'react'\n\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { GroupByButton } from '../GroupBy/index.js'\n\nexport type ListGroupByButtonProps = {\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly fields: ClientField[]\n}\n\n/**\n * Connects the presentational {@link GroupByButton} to the list query state, so the\n * control itself stays unaware of where its value is stored.\n */\nexport const ListGroupByButton: React.FC<ListGroupByButtonProps> = ({ collectionSlug, fields }) => {\n const { query, refineListData } = useListQuery()\n\n const handleChange = useCallback(\n (groupBy: string) => {\n void refineListData({ groupBy, page: 1 })\n },\n [refineListData],\n )\n\n return (\n <GroupByButton\n collectionSlug={collectionSlug}\n fields={fields}\n onChange={handleChange}\n value={query?.groupBy ?? ''}\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,OAAOC,KAAA,IAASC,WAAW,QAAQ;AAEnC,SAASC,YAAY,QAAQ;AAC7B,SAASC,aAAa,QAAQ;AAO9B;;;;AAIA,OAAO,MAAMC,iBAAA,GAAsDC,EAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAC;IAAAQ,cAAA;IAAAC;EAAA,IAAAH,EAA0B;EAC5F;IAAAI,KAAA;IAAAC;EAAA,IAAkCR,YAAA;EAAA,IAAAS,EAAA;EAAA,IAAAL,CAAA,QAAAI,cAAA;IAGhCC,EAAA,GAAAC,OAAA;MACOF,cAAA;QAAAE,OAAA;QAAAC,IAAA;MAAA,CAAkC;IAAA;IACzCP,CAAA,MAAAI,cAAA;IAAAJ,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EAHF,MAAAQ,YAAA,GAAqBH,EAIH;EAQP,MAAAI,EAAA,GAAAN,KAAA,EAAAG,OAAA,IAAkB;EAAA,IAAAI,EAAA;EAAA,IAAAV,CAAA,QAAAC,cAAA,IAAAD,CAAA,QAAAE,MAAA,IAAAF,CAAA,QAAAQ,YAAA,IAAAR,CAAA,QAAAS,EAAA;IAJ3BC,EAAA,GAAAC,IAAA,CAAAd,aAAA;MAAAI,cAAA;MAAAC,MAAA;MAAAU,QAAA,EAGYJ,YAAA;MAAAK,KAAA,EACHJ;IAAkB,C;;;;;;;;;SAJ3BC,E;CAOJ","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ClientField, ResolvedFilterOptions, SanitizedCollectionConfig } from 'payload';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export type ListWhereBuilderProps = {
|
|
4
|
+
readonly collectionPluralLabel?: SanitizedCollectionConfig['labels']['plural'];
|
|
5
|
+
readonly collectionSlug: SanitizedCollectionConfig['slug'];
|
|
6
|
+
readonly fields: ClientField[];
|
|
7
|
+
readonly onEmptyRemove?: () => void;
|
|
8
|
+
readonly renderedFilters?: Map<string, React.ReactNode>;
|
|
9
|
+
readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Wires {@link WhereBuilder} to the list view's query state, reading the current `where`
|
|
13
|
+
* from {@link useListQuery} and persisting edits back to the URL.
|
|
14
|
+
*/
|
|
15
|
+
export declare const ListWhereBuilder: React.FC<ListWhereBuilderProps>;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ListWhereBuilder/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAE5F,OAAO,KAAsB,MAAM,OAAO,CAAA;AAK1C,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC9E,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAC1D,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAA;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IACnC,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;CACpE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA2B5D,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { c as _c } from "react/compiler-runtime";
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
import React, { useCallback } from 'react';
|
|
6
|
+
import { useListQuery } from '../../providers/ListQuery/index.js';
|
|
7
|
+
import { WhereBuilder } from '../WhereBuilder/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Wires {@link WhereBuilder} to the list view's query state, reading the current `where`
|
|
10
|
+
* from {@link useListQuery} and persisting edits back to the URL.
|
|
11
|
+
*/
|
|
12
|
+
export const ListWhereBuilder = t0 => {
|
|
13
|
+
const $ = _c(11);
|
|
14
|
+
const {
|
|
15
|
+
collectionPluralLabel,
|
|
16
|
+
collectionSlug,
|
|
17
|
+
fields,
|
|
18
|
+
onEmptyRemove,
|
|
19
|
+
renderedFilters,
|
|
20
|
+
resolvedFilterOptions
|
|
21
|
+
} = t0;
|
|
22
|
+
const {
|
|
23
|
+
handleWhereChange,
|
|
24
|
+
query
|
|
25
|
+
} = useListQuery();
|
|
26
|
+
let t1;
|
|
27
|
+
if ($[0] !== handleWhereChange) {
|
|
28
|
+
t1 = where => handleWhereChange(where);
|
|
29
|
+
$[0] = handleWhereChange;
|
|
30
|
+
$[1] = t1;
|
|
31
|
+
} else {
|
|
32
|
+
t1 = $[1];
|
|
33
|
+
}
|
|
34
|
+
const handleChange = t1;
|
|
35
|
+
const t2 = query?.where;
|
|
36
|
+
let t3;
|
|
37
|
+
if ($[2] !== collectionPluralLabel || $[3] !== collectionSlug || $[4] !== fields || $[5] !== handleChange || $[6] !== onEmptyRemove || $[7] !== renderedFilters || $[8] !== resolvedFilterOptions || $[9] !== t2) {
|
|
38
|
+
t3 = _jsx(WhereBuilder, {
|
|
39
|
+
collectionPluralLabel,
|
|
40
|
+
collectionSlug,
|
|
41
|
+
fields,
|
|
42
|
+
onChange: handleChange,
|
|
43
|
+
onEmptyRemove,
|
|
44
|
+
renderedFilters,
|
|
45
|
+
resolvedFilterOptions,
|
|
46
|
+
value: t2
|
|
47
|
+
});
|
|
48
|
+
$[2] = collectionPluralLabel;
|
|
49
|
+
$[3] = collectionSlug;
|
|
50
|
+
$[4] = fields;
|
|
51
|
+
$[5] = handleChange;
|
|
52
|
+
$[6] = onEmptyRemove;
|
|
53
|
+
$[7] = renderedFilters;
|
|
54
|
+
$[8] = resolvedFilterOptions;
|
|
55
|
+
$[9] = t2;
|
|
56
|
+
$[10] = t3;
|
|
57
|
+
} else {
|
|
58
|
+
t3 = $[10];
|
|
59
|
+
}
|
|
60
|
+
return t3;
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","React","useCallback","useListQuery","WhereBuilder","ListWhereBuilder","t0","$","collectionPluralLabel","collectionSlug","fields","onEmptyRemove","renderedFilters","resolvedFilterOptions","handleWhereChange","query","t1","where","handleChange","t2","t3","_jsx","onChange","value"],"sources":["../../../src/elements/ListWhereBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, ResolvedFilterOptions, SanitizedCollectionConfig } from 'payload'\n\nimport React, { useCallback } from 'react'\n\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { WhereBuilder } from '../WhereBuilder/index.js'\n\nexport type ListWhereBuilderProps = {\n readonly collectionPluralLabel?: SanitizedCollectionConfig['labels']['plural']\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly fields: ClientField[]\n readonly onEmptyRemove?: () => void\n readonly renderedFilters?: Map<string, React.ReactNode>\n readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>\n}\n\n/**\n * Wires {@link WhereBuilder} to the list view's query state, reading the current `where`\n * from {@link useListQuery} and persisting edits back to the URL.\n */\nexport const ListWhereBuilder: React.FC<ListWhereBuilderProps> = ({\n collectionPluralLabel,\n collectionSlug,\n fields,\n onEmptyRemove,\n renderedFilters,\n resolvedFilterOptions,\n}) => {\n const { handleWhereChange, query } = useListQuery()\n\n const handleChange = useCallback(\n (where: Parameters<typeof handleWhereChange>[0]) => handleWhereChange(where),\n [handleWhereChange],\n )\n\n return (\n <WhereBuilder\n collectionPluralLabel={collectionPluralLabel}\n collectionSlug={collectionSlug}\n fields={fields}\n onChange={handleChange}\n onEmptyRemove={onEmptyRemove}\n renderedFilters={renderedFilters}\n resolvedFilterOptions={resolvedFilterOptions}\n value={query?.where}\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,OAAOC,KAAA,IAASC,WAAW,QAAQ;AAEnC,SAASC,YAAY,QAAQ;AAC7B,SAASC,YAAY,QAAQ;AAW7B;;;;AAIA,OAAO,MAAMC,gBAAA,GAAoDC,EAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAC;IAAAQ,qBAAA;IAAAC,cAAA;IAAAC,MAAA;IAAAC,aAAA;IAAAC,eAAA;IAAAC;EAAA,IAAAP,EAOjE;EACC;IAAAQ,iBAAA;IAAAC;EAAA,IAAqCZ,YAAA;EAAA,IAAAa,EAAA;EAAA,IAAAT,CAAA,QAAAO,iBAAA;IAGnCE,EAAA,GAAAC,KAAA,IAAoDH,iBAAA,CAAkBG,KAAA;IAAAV,CAAA,MAAAO,iBAAA;IAAAP,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EADxE,MAAAW,YAAA,GAAqBF,EAEA;EAYV,MAAAG,EAAA,GAAAJ,KAAA,EAAAE,KAAA;EAAO,IAAAG,EAAA;EAAA,IAAAb,CAAA,QAAAC,qBAAA,IAAAD,CAAA,QAAAE,cAAA,IAAAF,CAAA,QAAAG,MAAA,IAAAH,CAAA,QAAAW,YAAA,IAAAX,CAAA,QAAAI,aAAA,IAAAJ,CAAA,QAAAK,eAAA,IAAAL,CAAA,QAAAM,qBAAA,IAAAN,CAAA,QAAAY,EAAA;IARhBC,EAAA,GAAAC,IAAA,CAAAjB,YAAA;MAAAI,qBAAA;MAAAC,cAAA;MAAAC,MAAA;MAAAY,QAAA,EAIYJ,YAAA;MAAAP,aAAA;MAAAC,eAAA;MAAAC,qBAAA;MAAAU,KAAA,EAIHJ;IAAO,C;;;;;;;;;;;;;SARhBC,E;CAWJ","ignoreList":[]}
|
|
@@ -46,6 +46,11 @@
|
|
|
46
46
|
.popup-button-list__label {
|
|
47
47
|
display: flex;
|
|
48
48
|
align-items: center;
|
|
49
|
+
font-family: var(--text-body-medium-font-family);
|
|
50
|
+
font-size: var(--text-body-medium-font-size);
|
|
51
|
+
font-weight: var(--text-body-medium-font-weight);
|
|
52
|
+
letter-spacing: var(--text-body-medium-letter-spacing);
|
|
53
|
+
line-height: var(--text-body-medium-line-height);
|
|
49
54
|
padding: var(--spacer-1) var(--spacer-2) var(--spacer-1) var(--spacer-1);
|
|
50
55
|
}
|
|
51
56
|
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
@layer payload-default {
|
|
2
2
|
.popup-list-group-label {
|
|
3
3
|
color: var(--color-text-secondary);
|
|
4
|
-
font-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
font-family: var(--text-body-medium-font-family);
|
|
5
|
+
font-size: var(--text-body-medium-font-size);
|
|
6
|
+
font-weight: var(--text-body-medium-font-weight);
|
|
7
|
+
letter-spacing: var(--text-body-medium-letter-spacing);
|
|
8
|
+
line-height: var(--text-body-medium-line-height);
|
|
9
|
+
padding-block: var(--spacer-1);
|
|
10
|
+
padding-inline: var(--spacer-3);
|
|
8
11
|
}
|
|
9
12
|
|
|
10
13
|
/* Align the label's text with its sibling button labels, which carry a
|
|
@@ -16,6 +19,6 @@
|
|
|
16
19
|
|
|
17
20
|
.popup-button-list--with-actions .popup-list-group-label,
|
|
18
21
|
.popup-button-list--with-icons .popup-list-group-label {
|
|
19
|
-
padding-inline-start:
|
|
22
|
+
padding-inline-start: var(--spacer-2);
|
|
20
23
|
}
|
|
21
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Popup/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AAEvD,OAAO,KAAuE,MAAM,OAAO,CAAA;AAK3F,OAAO,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Popup/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AAEvD,OAAO,KAAuE,MAAM,OAAO,CAAA;AAK3F,OAAO,aAAa,CAAA;AA4CpB,MAAM,MAAM,UAAU,GAAG;IACvB,eAAe,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAA;IAClD,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IAC1C,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC/B,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;IACjC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;IAC7C,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IACxC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAA;IACzD;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QACrB,MAAM,EAAE,OAAO,CAAA;QACf,eAAe,EAAE,OAAO,CAAA;QACxB,eAAe,EAAE,IAAI,CAAA;QACrB,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAA;QAChC,SAAS,EAAE,KAAK,CAAC,oBAAoB,CAAA;KACtC,KAAK,KAAK,CAAC,SAAS,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACvB,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;IACnD;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IACjC;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CACjC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAoftC,CAAA"}
|
|
@@ -14,6 +14,20 @@ const PopupContext = /*#__PURE__*/createContext(null);
|
|
|
14
14
|
* Selector for all elements the browser considers tabbable.
|
|
15
15
|
*/
|
|
16
16
|
const TABBABLE_SELECTOR = ['a[href]', 'button:not(:disabled)', 'input:not(:disabled):not([type="hidden"])', 'select:not(:disabled)', 'textarea:not(:disabled)', '[tabindex]', '[contenteditable]:not([contenteditable="false"])', 'audio[controls]', 'video[controls]', 'summary'].map(s => `${s}:not([tabindex="-1"])`).join(', ');
|
|
17
|
+
/**
|
|
18
|
+
* Returns whether the element has a `position: fixed` ancestor (e.g. an open Drawer).
|
|
19
|
+
* Such popups must be positioned with `fixed` so they don't drift when the background scrolls.
|
|
20
|
+
*/
|
|
21
|
+
const hasFixedAncestor = element => {
|
|
22
|
+
let node = element?.parentElement;
|
|
23
|
+
while (node && node !== document.body) {
|
|
24
|
+
if (window.getComputedStyle(node).position === 'fixed') {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
node = node.parentElement;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
};
|
|
17
31
|
/**
|
|
18
32
|
* Component that renders a popup, as well as a button that triggers the popup.
|
|
19
33
|
*
|
|
@@ -50,6 +64,11 @@ export const Popup = props => {
|
|
|
50
64
|
const popupRef = useRef(null);
|
|
51
65
|
const triggerRef = useRef(null);
|
|
52
66
|
/**
|
|
67
|
+
* Whether the trigger is inside a `position: fixed` ancestor (e.g. a Drawer),
|
|
68
|
+
* in which case the popup is positioned with `fixed` instead of `absolute`.
|
|
69
|
+
*/
|
|
70
|
+
const isFixedRef = useRef(false);
|
|
71
|
+
/**
|
|
53
72
|
* Keeps track of whether the popup was opened via keyboard.
|
|
54
73
|
* This is used to determine whether to autofocus the first element in the popup.
|
|
55
74
|
* If the popup was opened via mouse, we do not want to autofocus the first element.
|
|
@@ -87,6 +106,11 @@ export const Popup = props => {
|
|
|
87
106
|
}
|
|
88
107
|
const triggerRect = trigger.getBoundingClientRect();
|
|
89
108
|
const popupRect = popup.getBoundingClientRect();
|
|
109
|
+
// Inside a fixed ancestor, use `fixed` (no scroll offset) so background scrolling
|
|
110
|
+
// doesn't shift the popup. Otherwise use page coordinates (absolute).
|
|
111
|
+
const useFixed = isFixedRef.current;
|
|
112
|
+
const scrollY = useFixed ? 0 : window.scrollY;
|
|
113
|
+
const scrollX = useFixed ? 0 : window.scrollX;
|
|
90
114
|
// Gap between the popup and the trigger/viewport edges (in pixels)
|
|
91
115
|
const offset = 10;
|
|
92
116
|
// Additional gap used in side mode so the child popup has breathing room from its parent
|
|
@@ -102,9 +126,9 @@ export const Popup = props => {
|
|
|
102
126
|
// viewport space.
|
|
103
127
|
// /////////////////////////////////////
|
|
104
128
|
// Top: align with trigger top, clamped to viewport
|
|
105
|
-
top = triggerRect.top +
|
|
106
|
-
const maxTop =
|
|
107
|
-
top = Math.max(
|
|
129
|
+
top = triggerRect.top + scrollY;
|
|
130
|
+
const maxTop = scrollY + window.innerHeight - popupRect.height - offset;
|
|
131
|
+
top = Math.max(scrollY + offset, Math.min(top, maxTop));
|
|
108
132
|
// Use the parent popup's bounding rect as the reference for left/right positioning
|
|
109
133
|
// so the child appears 4px from the parent popup edge, not just the trigger button.
|
|
110
134
|
const anchorRect = parentPopup?.popupRef.current ? parentPopup.popupRef.current.getBoundingClientRect() : triggerRect;
|
|
@@ -121,7 +145,7 @@ export const Popup = props => {
|
|
|
121
145
|
left = anchorRect.left - popupRect.width - sideOffset;
|
|
122
146
|
}
|
|
123
147
|
}
|
|
124
|
-
left = left +
|
|
148
|
+
left = left + scrollX;
|
|
125
149
|
// Caret not used in side mode; set a neutral value
|
|
126
150
|
caretLeft = popupRect.width / 2;
|
|
127
151
|
setIsOnTop(false);
|
|
@@ -134,20 +158,20 @@ export const Popup = props => {
|
|
|
134
158
|
// /////////////////////////////////////
|
|
135
159
|
let onTop = verticalAlign === 'top';
|
|
136
160
|
if (verticalAlign === 'bottom') {
|
|
137
|
-
top = triggerRect.bottom +
|
|
161
|
+
top = triggerRect.bottom + scrollY + offset;
|
|
138
162
|
if (triggerRect.bottom + popupRect.height + offset > window.innerHeight) {
|
|
139
163
|
// Try to flip above — only do so if there's actually enough room
|
|
140
|
-
const topIfAbove = triggerRect.top +
|
|
141
|
-
if (topIfAbove >=
|
|
164
|
+
const topIfAbove = triggerRect.top + scrollY - popupRect.height - offset;
|
|
165
|
+
if (topIfAbove >= scrollY) {
|
|
142
166
|
top = topIfAbove;
|
|
143
167
|
onTop = true;
|
|
144
168
|
}
|
|
145
169
|
// else: not enough room above either — keep below and let it overflow rather than going off-screen
|
|
146
170
|
}
|
|
147
171
|
} else {
|
|
148
|
-
top = triggerRect.top +
|
|
172
|
+
top = triggerRect.top + scrollY - popupRect.height - offset;
|
|
149
173
|
if (triggerRect.top - popupRect.height - offset < 0) {
|
|
150
|
-
top = triggerRect.bottom +
|
|
174
|
+
top = triggerRect.bottom + scrollY + offset;
|
|
151
175
|
onTop = false;
|
|
152
176
|
}
|
|
153
177
|
}
|
|
@@ -179,8 +203,12 @@ export const Popup = props => {
|
|
|
179
203
|
// Values are rounded to match browser's CSS precision and avoid false updates.
|
|
180
204
|
// /////////////////////////////////////
|
|
181
205
|
const newTop = `${Math.round(top)}px`;
|
|
182
|
-
const newLeft = `${Math.round(left +
|
|
206
|
+
const newLeft = `${Math.round(left + scrollX)}px`;
|
|
183
207
|
const newCaretLeft = `${Math.round(caretLeft)}px`;
|
|
208
|
+
const newPosition = useFixed ? 'fixed' : '';
|
|
209
|
+
if (popup.style.position !== newPosition) {
|
|
210
|
+
popup.style.position = newPosition;
|
|
211
|
+
}
|
|
184
212
|
if (popup.style.top !== newTop) {
|
|
185
213
|
popup.style.top = newTop;
|
|
186
214
|
}
|
|
@@ -281,6 +309,7 @@ export const Popup = props => {
|
|
|
281
309
|
// `.popup__hidden-content` takes effect. Without this, the inline
|
|
282
310
|
// styles set during positioning would win over the CSS rule, keeping
|
|
283
311
|
// portaled children (e.g. a ReactSelect menu) visually on-screen.
|
|
312
|
+
popup_1.style.position = '';
|
|
284
313
|
popup_1.style.top = '';
|
|
285
314
|
popup_1.style.left = '';
|
|
286
315
|
}
|
|
@@ -301,9 +330,11 @@ export const Popup = props => {
|
|
|
301
330
|
// after the browser has finished laying out the newly-visible popup
|
|
302
331
|
// content. The rAF call is the authoritative one — it catches cases
|
|
303
332
|
// where the popup height wasn't stable yet during the first call
|
|
304
|
-
// (e.g.
|
|
333
|
+
// (e.g. ColumnSelection popup content rendering after hidden → visible
|
|
305
334
|
// class switch), which was causing incorrect flip-to-top decisions.
|
|
306
335
|
// /////////////////////////////////////
|
|
336
|
+
// Decide the positioning strategy once per open.
|
|
337
|
+
isFixedRef.current = hasFixedAncestor(triggerRef.current);
|
|
307
338
|
updatePosition();
|
|
308
339
|
const rafId = requestAnimationFrame(() => {
|
|
309
340
|
updatePosition();
|