sanity 6.4.0 → 6.4.1-next.2
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/lib/_chunks-dts/ActiveWorkspaceMatcherContext.d.ts +3 -0
- package/lib/_chunks-es/ReleasesTool.js +1 -24
- package/lib/_chunks-es/ReleasesTool.js.map +1 -1
- package/lib/_chunks-es/VariantsTool.js +415 -251
- package/lib/_chunks-es/VariantsTool.js.map +1 -1
- package/lib/_chunks-es/index2.js +21 -8
- package/lib/_chunks-es/index2.js.map +1 -1
- package/lib/_chunks-es/resources8.js +9 -7
- package/lib/_chunks-es/resources8.js.map +1 -1
- package/lib/_chunks-es/{Table.js → searchDocumentRelease.js} +26 -2
- package/lib/_chunks-es/searchDocumentRelease.js.map +1 -0
- package/lib/_chunks-es/version.js +2 -2
- package/package.json +11 -11
- package/lib/_chunks-es/Table.js.map +0 -1
|
@@ -33,7 +33,7 @@ const variantsLocaleStrings = {
|
|
|
33
33
|
"overview.search.placeholder": "Search variant definitions\u2026",
|
|
34
34
|
/** Column header for the variant title column in the overview table. */
|
|
35
35
|
"overview.table.variant": "Variant",
|
|
36
|
-
/** Column header for
|
|
36
|
+
/** Column header for the documents count column in the overview table. */
|
|
37
37
|
"overview.table.documents": "Documents",
|
|
38
38
|
/** Fallback text when a variant has no conditions. */
|
|
39
39
|
"overview.table.no-conditions": "No conditions",
|
|
@@ -57,12 +57,14 @@ const variantsLocaleStrings = {
|
|
|
57
57
|
"detail.documents.table.search-placeholder": "Search documents",
|
|
58
58
|
/** Type column header for variant document table. */
|
|
59
59
|
"detail.documents.table.type": "Type",
|
|
60
|
-
/**
|
|
61
|
-
"detail.documents.table.
|
|
62
|
-
/**
|
|
63
|
-
"detail.documents.table.
|
|
64
|
-
/**
|
|
65
|
-
"detail.documents.table.
|
|
60
|
+
/** Bundle column header for variant document table. */
|
|
61
|
+
"detail.documents.table.bundle": "Bundle",
|
|
62
|
+
/** Validation error tooltip for a single error in the variant document table. */
|
|
63
|
+
"detail.documents.table.validation.error_one": "{{count}} validation error",
|
|
64
|
+
/** Validation error tooltip for multiple errors in the variant document table. */
|
|
65
|
+
"detail.documents.table.validation.error_other": "{{count}} validation errors",
|
|
66
|
+
/** Error message when variant documents fail to load. */
|
|
67
|
+
"detail.documents.error": "Unable to load documents for this variant",
|
|
66
68
|
/** Description for the missing Variant detail page. */
|
|
67
69
|
"detail.not-found.description": "The requested variant could not be found.",
|
|
68
70
|
/** Title for the missing Variant detail page. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources8.js","sources":["../../src/core/variants/i18n/resources.ts"],"sourcesContent":["/**\n * Defined locale strings for variants, in US English.\n *\n * @internal\n */\nconst variantsLocaleStrings = {\n /** Label for the variants navigation row. */\n 'navbar.view-as': 'View as',\n /** Label for the version selector in the variants navigation row. */\n 'navbar.version': 'Version',\n /** Label for the variant selector in the variants navigation row. */\n 'navbar.variant': 'Variant',\n /** Default option label when no variant is selected. */\n 'navbar.variant.default': 'All users (Default)',\n /** Placeholder for the variant filter input in the dropdown. */\n 'navbar.variant.filter-placeholder': 'Filter variants…',\n /** Section header for non-default variants in the dropdown. */\n 'navbar.variant.other': 'Other variants',\n /** Label for clearing version and variant selections. */\n 'navbar.clear': 'Clear',\n /** Tooltip for clearing the selected variant. */\n 'navbar.variant.clear': 'Clear variant selection',\n /** Label for the Variants overview create action. */\n 'overview.action.create-variant': 'Create variant',\n /** Label for the Variants overview delete action. */\n 'overview.action.delete-variant': 'Delete variant',\n /** Error toast title when variant deletion fails. */\n 'overview.action.delete-variant.error.title': 'Unable to delete variant',\n /** Link label for Variants overview documentation (empty state). */\n 'overview.action.documentation': 'Documentation',\n /** Description for the Variants overview empty state. */\n 'overview.empty-state.description':\n 'Variant definitions describe how content is personalized for audiences, locales, segments, and more.',\n /** Description for the Variants overview. */\n 'overview.description':\n 'Manage variant definitions that control how content is personalized for different audiences, locales, and segments.',\n /** Error message for the Variants overview. */\n 'overview.error': 'Unable to load variants',\n /** Placeholder for the Variants overview search field. */\n 'overview.search.placeholder': 'Search variant definitions…',\n /** Column header for the variant title column in the overview table. */\n 'overview.table.variant': 'Variant',\n /** Column header for
|
|
1
|
+
{"version":3,"file":"resources8.js","sources":["../../src/core/variants/i18n/resources.ts"],"sourcesContent":["/**\n * Defined locale strings for variants, in US English.\n *\n * @internal\n */\nconst variantsLocaleStrings = {\n /** Label for the variants navigation row. */\n 'navbar.view-as': 'View as',\n /** Label for the version selector in the variants navigation row. */\n 'navbar.version': 'Version',\n /** Label for the variant selector in the variants navigation row. */\n 'navbar.variant': 'Variant',\n /** Default option label when no variant is selected. */\n 'navbar.variant.default': 'All users (Default)',\n /** Placeholder for the variant filter input in the dropdown. */\n 'navbar.variant.filter-placeholder': 'Filter variants…',\n /** Section header for non-default variants in the dropdown. */\n 'navbar.variant.other': 'Other variants',\n /** Label for clearing version and variant selections. */\n 'navbar.clear': 'Clear',\n /** Tooltip for clearing the selected variant. */\n 'navbar.variant.clear': 'Clear variant selection',\n /** Label for the Variants overview create action. */\n 'overview.action.create-variant': 'Create variant',\n /** Label for the Variants overview delete action. */\n 'overview.action.delete-variant': 'Delete variant',\n /** Error toast title when variant deletion fails. */\n 'overview.action.delete-variant.error.title': 'Unable to delete variant',\n /** Link label for Variants overview documentation (empty state). */\n 'overview.action.documentation': 'Documentation',\n /** Description for the Variants overview empty state. */\n 'overview.empty-state.description':\n 'Variant definitions describe how content is personalized for audiences, locales, segments, and more.',\n /** Description for the Variants overview. */\n 'overview.description':\n 'Manage variant definitions that control how content is personalized for different audiences, locales, and segments.',\n /** Error message for the Variants overview. */\n 'overview.error': 'Unable to load variants',\n /** Placeholder for the Variants overview search field. */\n 'overview.search.placeholder': 'Search variant definitions…',\n /** Column header for the variant title column in the overview table. */\n 'overview.table.variant': 'Variant',\n /** Column header for the documents count column in the overview table. */\n 'overview.table.documents': 'Documents',\n /** Fallback text when a variant has no conditions. */\n 'overview.table.no-conditions': 'No conditions',\n /** Title for the Variants overview. */\n 'overview.title': 'Variants',\n /** Edit action on the Variant detail page. */\n 'detail.action.edit-variant': 'Edit variant',\n /** Back action on the Variant detail page. */\n 'detail.back': 'Back to variants',\n /** Created status label in the Variant detail footer. */\n 'detail.footer.created': 'Created',\n /** Loading message on the Variant detail page. */\n 'detail.loading': 'Loading variant',\n /** Fallback text when a variant has no description. */\n 'detail.no-description': 'No description yet.',\n /** Empty state for variant document table. */\n 'detail.documents.no-documents': 'No documents in this variant',\n /** Edited column header for variant document table. */\n 'detail.documents.table.edited': 'Edited',\n /** Search placeholder for variant document table. */\n 'detail.documents.table.search-placeholder': 'Search documents',\n /** Type column header for variant document table. */\n 'detail.documents.table.type': 'Type',\n /** Bundle column header for variant document table. */\n 'detail.documents.table.bundle': 'Bundle',\n /** Validation error tooltip for a single error in the variant document table. */\n 'detail.documents.table.validation.error_one': '{{count}} validation error',\n /** Validation error tooltip for multiple errors in the variant document table. */\n 'detail.documents.table.validation.error_other': '{{count}} validation errors',\n /** Error message when variant documents fail to load. */\n 'detail.documents.error': 'Unable to load documents for this variant',\n /** Description for the missing Variant detail page. */\n 'detail.not-found.description': 'The requested variant could not be found.',\n /** Title for the missing Variant detail page. */\n 'detail.not-found.title': 'Variant not found',\n /** Title for the create variant dialog. */\n 'dialog.create.title': 'Create variant',\n /** Confirm action for the create variant dialog. */\n 'dialog.create.action.confirm': 'Create variant',\n /** Add condition action for the create variant dialog. */\n 'dialog.create.action.add-condition': 'Add condition',\n /** Tooltip when add condition is disabled because the current row is incomplete. */\n 'dialog.create.action.add-condition.disabled-hint':\n 'Complete the current condition key and value before adding another.',\n /** Remove condition action for the create variant dialog. */\n 'dialog.create.remove-condition': 'Remove condition',\n /** Label for the variant title field in the create variant dialog. */\n 'dialog.create.variant-title.label': 'Title',\n /** Placeholder for the variant title field in the create variant dialog. */\n 'dialog.create.variant-title.placeholder': 'e.g. Loyal customers',\n /** Validation message when the variant title is missing. */\n 'dialog.create.variant-title.required': 'Title is required',\n /** Label for the description field in the create variant dialog. */\n 'dialog.create.description.label': 'Description',\n /** Placeholder for the description field in the create variant dialog. */\n 'dialog.create.description.placeholder': 'Describe who this variant targets',\n /** Title for the conditions section in the create variant dialog. */\n 'dialog.create.conditions.title': 'Conditions',\n /** Description for the conditions section in the create variant dialog. */\n 'dialog.create.conditions.description':\n 'Add key/value pairs that define when this variant applies.',\n /** Label for the condition key field in the create variant dialog. */\n 'dialog.create.condition-key.label': 'Key',\n /** Validation message when a condition key is repeated. */\n 'dialog.create.condition-key.duplicate': 'Condition keys must be unique',\n /** Validation message when a condition key uses a reserved prefix. */\n 'dialog.create.condition-key.reserved': 'Condition keys cannot start with _ or $',\n /** Validation message when a condition key has an invalid format. */\n 'dialog.create.condition-key.invalid':\n 'Condition keys must be lowercase, start with a letter, and use letters, numbers, underscores, or hyphens',\n /** Validation message when a condition key is missing. */\n 'dialog.create.condition-key.required': 'Condition key is required',\n /** Validation message when a condition value is missing. */\n 'dialog.create.condition-value.required': 'Condition value is required',\n /** Validation message when a condition value has an invalid format. */\n 'dialog.create.condition-value.invalid': 'Condition values cannot contain colons',\n /** Placeholder for the condition key field in the create variant dialog. */\n 'dialog.create.condition-key.placeholder': 'e.g. audience',\n /** Label for the condition value field in the create variant dialog. */\n 'dialog.create.condition-value.label': 'Value',\n /** Placeholder for the condition value field in the create variant dialog. */\n 'dialog.create.condition-value.placeholder': 'e.g. loyal-customers',\n /** Error toast title when variant creation fails. */\n 'dialog.create.error.title': 'Unable to create variant',\n /** Title for the edit variant dialog. */\n 'dialog.edit.title': 'Edit variant',\n /** Confirm action for the edit variant dialog. */\n 'dialog.edit.action.confirm': 'Save',\n /** Cancel action for the edit variant dialog. */\n 'dialog.edit.action.cancel': 'Cancel',\n /** Error toast title when variant editing fails. */\n 'dialog.edit.error.title': 'Unable to update variant',\n}\n\n/**\n * @alpha\n */\nexport type VariantsLocaleResourceKeys = keyof typeof variantsLocaleStrings\n\nexport default variantsLocaleStrings\n"],"names":["variantsLocaleStrings"],"mappings":"AAKA,MAAMA,wBAAwB;AAAA;AAAA,EAE5B,kBAAkB;AAAA;AAAA,EAElB,kBAAkB;AAAA;AAAA,EAElB,kBAAkB;AAAA;AAAA,EAElB,0BAA0B;AAAA;AAAA,EAE1B,qCAAqC;AAAA;AAAA,EAErC,wBAAwB;AAAA;AAAA,EAExB,gBAAgB;AAAA;AAAA,EAEhB,wBAAwB;AAAA;AAAA,EAExB,kCAAkC;AAAA;AAAA,EAElC,kCAAkC;AAAA;AAAA,EAElC,8CAA8C;AAAA;AAAA,EAE9C,iCAAiC;AAAA;AAAA,EAEjC,oCACE;AAAA;AAAA,EAEF,wBACE;AAAA;AAAA,EAEF,kBAAkB;AAAA;AAAA,EAElB,+BAA+B;AAAA;AAAA,EAE/B,0BAA0B;AAAA;AAAA,EAE1B,4BAA4B;AAAA;AAAA,EAE5B,gCAAgC;AAAA;AAAA,EAEhC,kBAAkB;AAAA;AAAA,EAElB,8BAA8B;AAAA;AAAA,EAE9B,eAAe;AAAA;AAAA,EAEf,yBAAyB;AAAA;AAAA,EAEzB,kBAAkB;AAAA;AAAA,EAElB,yBAAyB;AAAA;AAAA,EAEzB,iCAAiC;AAAA;AAAA,EAEjC,iCAAiC;AAAA;AAAA,EAEjC,6CAA6C;AAAA;AAAA,EAE7C,+BAA+B;AAAA;AAAA,EAE/B,iCAAiC;AAAA;AAAA,EAEjC,+CAA+C;AAAA;AAAA,EAE/C,iDAAiD;AAAA;AAAA,EAEjD,0BAA0B;AAAA;AAAA,EAE1B,gCAAgC;AAAA;AAAA,EAEhC,0BAA0B;AAAA;AAAA,EAE1B,uBAAuB;AAAA;AAAA,EAEvB,gCAAgC;AAAA;AAAA,EAEhC,sCAAsC;AAAA;AAAA,EAEtC,oDACE;AAAA;AAAA,EAEF,kCAAkC;AAAA;AAAA,EAElC,qCAAqC;AAAA;AAAA,EAErC,2CAA2C;AAAA;AAAA,EAE3C,wCAAwC;AAAA;AAAA,EAExC,mCAAmC;AAAA;AAAA,EAEnC,yCAAyC;AAAA;AAAA,EAEzC,kCAAkC;AAAA;AAAA,EAElC,wCACE;AAAA;AAAA,EAEF,qCAAqC;AAAA;AAAA,EAErC,yCAAyC;AAAA;AAAA,EAEzC,wCAAwC;AAAA;AAAA,EAExC,uCACE;AAAA;AAAA,EAEF,wCAAwC;AAAA;AAAA,EAExC,0CAA0C;AAAA;AAAA,EAE1C,yCAAyC;AAAA;AAAA,EAEzC,2CAA2C;AAAA;AAAA,EAE3C,uCAAuC;AAAA;AAAA,EAEvC,6CAA6C;AAAA;AAAA,EAE7C,6BAA6B;AAAA;AAAA,EAE7B,qBAAqB;AAAA;AAAA,EAErB,8BAA8B;AAAA;AAAA,EAE9B,6BAA6B;AAAA;AAAA,EAE7B,2BAA2B;AAC7B;"}
|
|
@@ -353,8 +353,32 @@ const emptyCellStyle = {
|
|
|
353
353
|
let t2;
|
|
354
354
|
return $[5] !== defaultSort || $[6] !== t1 ? (t2 = /* @__PURE__ */ jsx(TooltipDelayGroupProvider, { children: /* @__PURE__ */ jsx(TableProvider, { defaultSort, children: t1 }) }), $[5] = defaultSort, $[6] = t1, $[7] = t2) : t2 = $[7], t2;
|
|
355
355
|
};
|
|
356
|
+
function extractSearchableText(value, depth = 0, visited = []) {
|
|
357
|
+
if (typeof value > "u" || value === null || depth > 3) return "";
|
|
358
|
+
if (typeof value == "string") return value;
|
|
359
|
+
if (typeof value == "number") return value.toString();
|
|
360
|
+
if (Array.isArray(value))
|
|
361
|
+
return value.map((item) => typeof item == "object" && item.children && item._type === "block" ? item.children.map((child) => child.text).join(" ").trim() : Array.isArray(item) ? extractSearchableText(item, depth + 1, visited) : item.toString().trim()).filter(Boolean).join(" ");
|
|
362
|
+
if (typeof value == "object" && value !== null) {
|
|
363
|
+
if (visited.includes(value)) return "";
|
|
364
|
+
visited.push(value);
|
|
365
|
+
const entries = Object.entries(value);
|
|
366
|
+
if (entries.length > 0 && entries.every(([key, val]) => typeof val != "boolean" && !key.startsWith("_")))
|
|
367
|
+
return entries.map(([, val]) => extractSearchableText(val, depth + 1, visited)).filter(Boolean).join(" ");
|
|
368
|
+
const title = "title" in value && typeof value.title == "string" ? value.title.toString().trim() : void 0, name = "name" in value && typeof value.name == "string" ? value.name.toString().trim() : void 0, text = "text" in value && typeof value.text == "string" ? value.text.toString().trim() : void 0;
|
|
369
|
+
return title || name || text ? [title, name, text].filter(Boolean).join(" ") : entries.filter(([key]) => !key.startsWith("_")).map(([, val]) => extractSearchableText(val, depth + 1, visited)).filter(Boolean).join(" ");
|
|
370
|
+
}
|
|
371
|
+
return "";
|
|
372
|
+
}
|
|
373
|
+
function searchDocumentRelease(document, searchTerm) {
|
|
374
|
+
if (!searchTerm || searchTerm.trim().length === 0 || !document.title && !document.name)
|
|
375
|
+
return !1;
|
|
376
|
+
const title = extractSearchableText(document.title), name = extractSearchableText(document.name), normalizedSearchTerm = searchTerm.toLowerCase().trim(), normalizedTitle = title.toLowerCase(), normalizedName = name.toLowerCase(), hasTitle = normalizedTitle.trim().length > 0, hasName = normalizedName.trim().length > 0, combinedText = `${normalizedTitle} ${normalizedName}`, allWordsMatch = normalizedSearchTerm.split(/\s+/).filter((word) => word.length > 0).every((word) => hasTitle && normalizedTitle.includes(word) || hasName && normalizedName.includes(word) || combinedText.includes(word)), documentInSearchTerm = hasName && normalizedSearchTerm.includes(normalizedName) || hasTitle && normalizedSearchTerm.includes(normalizedTitle);
|
|
377
|
+
return allWordsMatch || documentInSearchTerm;
|
|
378
|
+
}
|
|
356
379
|
export {
|
|
357
380
|
Headers,
|
|
358
|
-
Table
|
|
381
|
+
Table,
|
|
382
|
+
searchDocumentRelease
|
|
359
383
|
};
|
|
360
|
-
//# sourceMappingURL=
|
|
384
|
+
//# sourceMappingURL=searchDocumentRelease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchDocumentRelease.js","sources":["../../src/core/releases/tool/components/Table/TableEmptyState.tsx","../../src/core/releases/tool/components/Table/TableProvider.tsx","../../src/core/releases/tool/components/Table/TableHeader.tsx","../../src/core/releases/tool/components/Table/TableLayout.tsx","../../src/core/releases/tool/components/Table/Table.tsx","../../src/core/releases/tool/detail/documentTable/extractSearchableText.ts","../../src/core/releases/tool/detail/documentTable/searchDocumentRelease.ts"],"sourcesContent":["import {Card, Text} from '@sanity/ui'\nimport {type ComponentType} from 'react'\n\ninterface TableEmptyStateProps {\n emptyState: string | ComponentType\n colSpan: number\n}\n\nconst emptyCellStyle = {\n textAlign: 'center' as const,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n}\n\nconst emptyRowStyle = {\n justifyContent: 'center',\n alignItems: 'center',\n height: '100%',\n}\n\n/**\n * @internal\n */\nexport const TableEmptyState = ({emptyState, colSpan}: TableEmptyStateProps) => {\n if (typeof emptyState === 'string') {\n return (\n <Card borderBottom display=\"flex\" padding={4} as=\"tr\" style={emptyRowStyle}>\n <td colSpan={colSpan} style={emptyCellStyle}>\n <Text muted size={1}>\n {emptyState}\n </Text>\n </td>\n </Card>\n )\n }\n\n const EmptyStateComponent = emptyState\n return (\n <Card borderBottom display=\"flex\" padding={4} as=\"tr\" style={emptyRowStyle}>\n <td colSpan={colSpan} style={emptyCellStyle}>\n <EmptyStateComponent />\n </td>\n </Card>\n )\n}\n","import {type ComponentType, type PropsWithChildren, useCallback, useContext, useState} from 'react'\nimport {TableContext} from 'sanity/_singletons'\n\nimport {type SortDirection} from './types'\n\nexport interface TableSort {\n column: string\n direction: SortDirection\n}\n\n/**\n * @internal\n */\nexport interface TableContextValue {\n searchTerm: string | null\n setSearchTerm: (searchTerm: string) => void\n sort: TableSort | null\n setSortColumn: (column: string) => void\n}\n\n/**\n * @internal\n */\nexport const TableProvider: ComponentType<PropsWithChildren & {defaultSort?: TableSort}> = ({\n children,\n defaultSort,\n}) => {\n const [searchTerm, setSearchTerm] = useState<string | null>(null)\n const [sort, setSort] = useState<TableSort | null>(defaultSort || null)\n\n const setSortColumn = useCallback((newColumn: string) => {\n setSort((s) => {\n if (s?.column === newColumn) {\n return {...s, direction: s.direction === 'asc' ? 'desc' : 'asc'}\n }\n\n return {column: String(newColumn), direction: 'desc'}\n })\n }, [])\n\n const contextValue = {searchTerm, setSearchTerm, sort, setSortColumn}\n\n return <TableContext.Provider value={contextValue}>{children}</TableContext.Provider>\n}\n\n/**\n * @internal\n */\nexport const useTableContext = (): TableContextValue => {\n const context = useContext(TableContext)\n if (!context) {\n throw new Error('useTableContext must be used within a TableProvider')\n }\n return context\n}\n","import {ArrowUpIcon} from '@sanity/icons/ArrowUp'\nimport {SearchIcon} from '@sanity/icons/Search'\nimport {Box, Card, Flex, Stack, Text, TextInput} from '@sanity/ui'\nimport {motion} from 'motion/react'\nimport {type CSSProperties, useMemo} from 'react'\n\nimport {Button, type ButtonProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {useTableContext} from './TableProvider'\nimport {type HeaderProps, type TableHeaderProps} from './types'\n\nconst MotionIcon = motion.create(ArrowUpIcon)\n\nconst BasicHeader = ({text}: {text: string}) => (\n <Box padding={2}>\n <Text muted size={1} weight=\"medium\">\n {text}\n </Text>\n </Box>\n)\n\nconst SortHeaderButton = ({\n header,\n text,\n}: Omit<ButtonProps, 'text'> &\n HeaderProps & {\n text: string\n }) => {\n const {sort, setSortColumn} = useTableContext()\n const sortIcon = useMemo(\n () => (\n <MotionIcon\n initial={false}\n animate={{rotate: sort?.direction === 'asc' ? 0 : 180}}\n transition={{duration: 0.25, ease: 'easeInOut'}}\n />\n ),\n [sort?.direction],\n )\n\n return (\n <Button\n iconRight={header.sorting && sort?.column === header.id ? sortIcon : undefined}\n onClick={() => setSortColumn(String(header.id))}\n mode=\"bleed\"\n size=\"default\"\n text={text}\n />\n )\n}\n\nconst TableHeaderSearch = ({\n headerProps,\n searchDisabled,\n placeholder,\n}: HeaderProps & {placeholder?: string}) => {\n const {t} = useTranslation()\n const {setSearchTerm, searchTerm} = useTableContext()\n\n return (\n <Stack {...headerProps} flex={1} paddingY={2} paddingRight={3} sizing=\"border\">\n <TextInput\n border={false}\n fontSize={1}\n icon={SearchIcon}\n placeholder={placeholder || t('search.placeholder')}\n radius={3}\n value={searchTerm || ''}\n disabled={searchDisabled}\n onChange={(event) => setSearchTerm(event.currentTarget.value)}\n onClear={() => setSearchTerm('')}\n clearButton={!!searchTerm}\n />\n </Stack>\n )\n}\n\nconst STICKY_HEADER_STYLE: CSSProperties = {position: 'sticky', top: 0, zIndex: 1}\n\n/**\n *\n * @internal\n */\nexport const TableHeader = ({headers, searchDisabled}: TableHeaderProps) => {\n return (\n <Card as=\"thead\" borderBottom style={STICKY_HEADER_STYLE}>\n <Flex\n as=\"tr\"\n style={{\n paddingInline: `max(\n calc((100% - var(--maxInlineSize)) / 2),\n var(--paddingInline)\n )`,\n }}\n >\n {headers.map(\n ({header: Header, style, width, id, sorting}) =>\n !!Header && (\n <Header\n key={String(id)}\n headerProps={{\n as: 'th',\n id: String(id),\n style: {...style, width: width || undefined},\n }}\n header={{id, sorting}}\n searchDisabled={searchDisabled}\n />\n ),\n )}\n </Flex>\n </Card>\n )\n}\n\nexport const Headers = {\n SortHeaderButton,\n TableHeaderSearch,\n BasicHeader,\n}\n","import {type CSSProperties, type ReactNode, useMemo} from 'react'\n\ninterface TableLayoutProps {\n isEmptyState: boolean\n header: ReactNode\n content: ReactNode\n contentHeight?: string\n}\n\nconst emptyTableStyle: CSSProperties = {\n width: '100%',\n height: '100%',\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n}\n\nconst defaultTableStyle: CSSProperties = {\n width: '100%',\n}\n\n/**\n * @internal\n */\nexport const TableLayout = ({isEmptyState, header, content, contentHeight}: TableLayoutProps) => {\n // display: block makes the tbody the containing block for the absolutely\n // positioned virtualized rows in Safari too — WebKit doesn't support\n // `position: relative` on internal table boxes (https://bugs.webkit.org/show_bug.cgi?id=240961),\n // which left the rows positioned from the top of the table and the first row\n // hidden behind the sticky header\n const tbodyStyle = useMemo<CSSProperties>(\n () =>\n isEmptyState\n ? {display: 'block', height: '100%', position: 'relative', overflow: 'hidden'}\n : {display: 'block', height: contentHeight, position: 'relative'},\n [isEmptyState, contentHeight],\n )\n\n return (\n <div style={{height: '100%'}}>\n <table style={isEmptyState ? emptyTableStyle : defaultTableStyle}>\n {header}\n <tbody style={tbodyStyle}>{content}</tbody>\n </table>\n </div>\n )\n}\n","import {Box, Card, type CardProps, Flex, rem, Text, useTheme} from '@sanity/ui'\nimport {useVirtualizer, type VirtualItem} from '@tanstack/react-virtual'\nimport {isValid} from 'date-fns/isValid'\nimport get from 'lodash-es/get.js'\nimport {type CSSProperties, type ElementType, Fragment, useMemo} from 'react'\n\nimport {TooltipDelayGroupProvider} from '../../../../../ui-components'\nimport {TableEmptyState} from './TableEmptyState'\nimport {TableHeader} from './TableHeader'\nimport {TableLayout} from './TableLayout'\nimport {TableProvider, type TableSort, useTableContext} from './TableProvider'\nimport {type Column} from './types'\n\ntype RowDatum<TableData, AdditionalRowTableData> = (AdditionalRowTableData extends undefined\n ? TableData\n : TableData & AdditionalRowTableData) & {isLoading?: boolean}\n\nexport type TableRowProps = CardProps<ElementType>\n\ntype VirtualDatum = {\n virtualRow: VirtualItem\n index: number\n isFirst: boolean\n isLast: boolean\n}\n\nexport interface TableProps<TableData, AdditionalRowTableData> {\n columnDefs: Column<RowDatum<TableData, AdditionalRowTableData>>[]\n searchFilter?: (data: TableData[], searchTerm: string) => TableData[]\n data: TableData[]\n emptyState: (() => React.JSX.Element) | string\n loading?: boolean\n /**\n * Should be the dot separated path to the unique identifier of the row. e.g. document._id\n */\n rowId: string\n rowActions?: ({\n datum,\n }: {\n datum: RowDatum<TableData, AdditionalRowTableData> | unknown\n }) => React.ReactNode\n rowProps?: (datum: TableData) => Partial<TableRowProps>\n scrollContainerRef: HTMLDivElement | null\n hideTableInlinePadding?: boolean\n}\n\nconst ITEM_HEIGHT = 59\nconst LOADING_ROW_COUNT = 3\n\n// oxlint-disable-next-line react/react-compiler\nconst TableInner = <TableData, AdditionalRowTableData>({\n columnDefs,\n data,\n emptyState,\n searchFilter,\n rowId,\n rowActions,\n loading = false,\n rowProps = () => ({}),\n scrollContainerRef,\n hideTableInlinePadding = false,\n}: TableProps<TableData, AdditionalRowTableData>) => {\n const {searchTerm, sort} = useTableContext()\n\n const filteredData = useMemo(() => {\n const filteredResult = searchFilter ? searchFilter(data, searchTerm || '') : data\n if (!sort) return filteredResult\n\n const sortColumn = columnDefs.find((column) => column.id === sort.column)\n return [...filteredResult].sort((a, b) => {\n let order: number\n\n const [aValue, bValue]: (number | string)[] = [a, b].map(\n (sortValue) =>\n sortColumn?.sortTransform?.(\n sortValue as RowDatum<TableData, AdditionalRowTableData>,\n sort.direction,\n ) ?? get(sortValue, sort.column),\n )\n if (\n typeof aValue === 'string' &&\n typeof bValue === 'string' &&\n !isValid(aValue) &&\n !isValid(bValue)\n ) {\n order = aValue.toLowerCase().localeCompare(bValue.toLowerCase())\n } else {\n const parseDate = (datum: number | string) => {\n if (sortColumn?.sortTransform && typeof datum === 'number') return datum\n\n return typeof datum === 'string' ? Date.parse(datum) : 0\n }\n\n const [aDate, bDate] = [aValue, bValue].map(parseDate)\n\n order = aDate - bDate\n }\n\n if (sort.direction === 'asc') return order\n return -order\n })\n }, [columnDefs, data, searchFilter, searchTerm, sort])\n\n const rowVirtualizer = useVirtualizer({\n count: filteredData.length,\n getScrollElement: () => scrollContainerRef,\n estimateSize: () => ITEM_HEIGHT,\n overscan: 5,\n })\n\n const rowActionColumnDef: Column = useMemo(\n () => ({\n id: 'actions',\n sorting: false,\n width: 50,\n header: ({headerProps: {id}}) => (\n <Flex as=\"th\" id={id} paddingY={3} paddingX={3} sizing=\"border\" style={{width: '50px'}}>\n <Text muted size={1} weight=\"medium\">\n \n </Text>\n </Flex>\n ),\n cell: ({datum, cellProps: {id}}) => (\n <Flex as=\"td\" id={id} align=\"center\" flex=\"none\" padding={3} style={{width: '25px'}}>\n {(!datum.isLoading && rowActions?.({datum})) || <Box style={{width: '25px'}} />}\n </Flex>\n ),\n }),\n [rowActions],\n )\n\n const amalgamatedColumnDefs = useMemo(\n () =>\n (rowActions ? [...columnDefs, rowActionColumnDef] : columnDefs).filter(\n (column) => !column.hidden,\n ),\n [columnDefs, rowActionColumnDef, rowActions],\n )\n\n const tableMinWidth = useMemo(\n () => amalgamatedColumnDefs.reduce((sum, col) => sum + (col.width || 200), 0),\n [amalgamatedColumnDefs],\n )\n\n const renderRow = useMemo(\n () =>\n function TableRow(\n datum: VirtualDatum &\n (TableData | (TableData & AdditionalRowTableData) | {_id: string; isLoading: boolean}),\n ) {\n const cardRowProps = rowProps(datum as TableData)\n const cardKey = loading ? `skeleton-${datum.index}` : String(get(datum, rowId))\n\n return (\n <Card\n key={cardKey}\n data-testid={loading ? 'table-row-skeleton' : 'table-row'}\n borderBottom\n display=\"flex\"\n data-index={datum.index}\n as=\"tr\"\n style={{\n height: `${datum.virtualRow.size}px`,\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n transform: `translateY(${datum.virtualRow.start}px)`,\n paddingInline: `max(\n calc((100% - var(--maxInlineSize)) / 2),\n var(--paddingInline)\n )`,\n }}\n {...cardRowProps}\n >\n {amalgamatedColumnDefs.map(({cell: Cell, style, width, id, sorting = false}) => (\n <Fragment key={String(id)}>\n <Cell\n datum={\n {...datum, isLoading: loading} as RowDatum<TableData, AdditionalRowTableData>\n }\n cellProps={{\n as: 'td',\n id: String(id),\n style: {...style, width: width || undefined},\n }}\n sorting={sorting}\n />\n </Fragment>\n ))}\n </Card>\n )\n },\n [amalgamatedColumnDefs, loading, rowId, rowProps],\n )\n\n const emptyContent = useMemo(\n () => <TableEmptyState emptyState={emptyState} colSpan={amalgamatedColumnDefs.length} />,\n [amalgamatedColumnDefs.length, emptyState],\n )\n\n const headers = useMemo(\n () =>\n amalgamatedColumnDefs.map(({cell, sortTransform, ...header}) => ({\n ...header,\n id: String(header.id),\n })),\n [amalgamatedColumnDefs],\n )\n\n const theme = useTheme()\n\n const maxInlineSize = (!hideTableInlinePadding && theme.sanity.v2?.container[3]) || 0\n\n const renderLoadingRows = (\n rowRenderer: (\n datum: VirtualDatum &\n ({_id: string; isLoading: boolean} | TableData | (TableData & AdditionalRowTableData)),\n ) => React.ReactNode,\n ) => {\n return Array.from({length: LOADING_ROW_COUNT}).map((_el, index) => {\n const cardKey = `skeleton-${index}`\n const virtualRow: VirtualItem = {\n index,\n start: index * ITEM_HEIGHT,\n size: ITEM_HEIGHT,\n lane: 0,\n key: cardKey,\n end: index * ITEM_HEIGHT + ITEM_HEIGHT,\n }\n\n return rowRenderer({\n _id: cardKey,\n isLoading: true,\n virtualRow,\n index,\n isFirst: index === 0,\n isLast: index === LOADING_ROW_COUNT - 1,\n })\n })\n }\n\n const tableContent = () => {\n if (loading) {\n return renderLoadingRows(renderRow)\n }\n\n if (filteredData.length === 0) {\n return emptyContent\n }\n\n return rowVirtualizer.getVirtualItems().map((virtualRow, index) => {\n const datum = filteredData[virtualRow.index]\n return renderRow({\n ...datum,\n virtualRow,\n index,\n isFirst: virtualRow.index === 0,\n isLast: virtualRow.index === filteredData.length - 1,\n })\n })\n }\n\n return (\n <div style={{height: '100%'}}>\n <div\n style={\n {\n 'width': '100%',\n 'minWidth': `${tableMinWidth}px`,\n 'height': '100%',\n 'position': 'relative',\n '--maxInlineSize': rem(maxInlineSize),\n '--paddingInline': rem(theme.sanity.v2?.space[3] ?? 0),\n } as CSSProperties\n }\n >\n <TableLayout\n isEmptyState={filteredData.length === 0 && !loading}\n header={\n <TableHeader\n headers={headers}\n searchDisabled={loading || (!searchTerm && !data.length)}\n />\n }\n content={tableContent()}\n contentHeight={`${rowVirtualizer.getTotalSize()}px`}\n />\n </div>\n </div>\n )\n}\n\nexport const Table = <TableData, AdditionalRowTableData = undefined>({\n defaultSort,\n ...props\n}: TableProps<TableData, AdditionalRowTableData> & {defaultSort?: TableSort}) => {\n return (\n <TooltipDelayGroupProvider>\n <TableProvider defaultSort={defaultSort}>\n <TableInner<TableData, AdditionalRowTableData> {...props} />\n </TableProvider>\n </TooltipDelayGroupProvider>\n )\n}\n","/**\n * Extracts a searchable string from a field value, handling various data types\n * @param value - The field value to extract text from\n * @param depth - Current recursion depth\n * @param visited - Array of visited objects thath ave been proceeded so far\n * @returns A string representation suitable for search\n */\nexport function extractSearchableText(\n value: unknown,\n depth: number = 0,\n visited: Array<unknown> = [],\n): string {\n if (typeof value === 'undefined' || value === null) return ''\n\n // Limit recursion depth to avoid going too deeply into a nested structure\n if (depth > 3) return ''\n\n // Handle primitive types\n if (typeof value === 'string') return value\n if (typeof value === 'number') return value.toString()\n\n // Handle Portable Text\n if (Array.isArray(value)) {\n return value\n .map((item) => {\n if (typeof item === 'object' && item.children && item._type === 'block') {\n return item.children\n .map((child: {text: string}) => child.text)\n .join(' ')\n .trim()\n }\n // If there are nested arrays, then we need to extract the text from the nested arrays\n if (Array.isArray(item)) {\n return extractSearchableText(item, depth + 1, visited)\n }\n\n // Handle other types (numbers, string)\n return item.toString().trim()\n })\n .filter(Boolean)\n .join(' ')\n }\n\n // Handle objects\n if (typeof value === 'object' && value !== null) {\n // Limit the number of items proceeded through the search as to avoid too deep recursion\n // that impacts performance. If the object has already been visited, then there is no need to proceed further.\n if (visited.includes(value)) return ''\n visited.push(value)\n\n // Handle localized objects (common pattern: {en: \"title\", no: \"tittel\"})\n // However, make sure that the values are not internal Sanity keys (starting with _)\n const entries = Object.entries(value)\n if (\n entries.length > 0 &&\n entries.every(([key, val]) => typeof val !== 'boolean' && !key.startsWith('_'))\n ) {\n return entries\n .map(([, val]) => extractSearchableText(val, depth + 1, visited))\n .filter(Boolean)\n .join(' ')\n }\n\n // Handle objects with specific properties (like {title: \"value\"})\n const title =\n 'title' in value && typeof value.title === 'string'\n ? value.title.toString().trim()\n : undefined\n const name =\n 'name' in value && typeof value.name === 'string' ? value.name.toString().trim() : undefined\n const text =\n 'text' in value && typeof value.text === 'string' ? value.text.toString().trim() : undefined\n\n if (title || name || text) {\n return [title, name, text].filter(Boolean).join(' ')\n }\n\n // Generic object handling - extract all string/number values\n return entries\n .filter(([key]) => !key.startsWith('_')) // Skip metadata keys\n .map(([, val]) => extractSearchableText(val, depth + 1, visited))\n .filter(Boolean)\n .join(' ')\n }\n\n return ''\n}\n","import {type SanityDocument} from '@sanity/types'\n\nimport {extractSearchableText} from './extractSearchableText'\n\n/**\n * This is a temporary way of doing the search without the previews\n * until we have it moved to the server side\n * Each document is searchable by title, name, and combined text of title and name, this could be different\n * than the displayed title, given the displayed title is resolved by the preview prepare function, but we cannot use that one\n * here because we will be over-fetching the documents, we will need to resolve the preview for hundreds of documents if we do that.\n *\n * So this is an intermediate solution to allow the search to work without the resolved preview values.\n *\n *\n * @param document - The document to search\n * @param searchTerm - The search term\n * @returns True if the document matches the search term, false otherwise\n */\nexport function searchDocumentRelease(document: SanityDocument, searchTerm: string) {\n // if there is no search term or the document has no title or name, return false\n if (!searchTerm || searchTerm.trim().length === 0 || (!document.title && !document.name)) {\n return false\n }\n\n const title = extractSearchableText(document.title)\n const name = extractSearchableText(document.name)\n\n const normalizedSearchTerm = searchTerm.toLowerCase().trim()\n const normalizedTitle = title.toLowerCase()\n const normalizedName = name.toLowerCase()\n\n const hasTitle = normalizedTitle.trim().length > 0\n const hasName = normalizedName.trim().length > 0\n\n // Create a combined searchable text from both title and name\n const combinedText = `${normalizedTitle} ${normalizedName}`\n\n // Split search term into words for more flexible matching\n const searchWords = normalizedSearchTerm.split(/\\s+/).filter((word) => word.length > 0)\n\n // Check if all search words are found in either title, name, or combined text\n const allWordsMatch = searchWords.every(\n (word) =>\n (hasTitle && normalizedTitle.includes(word)) ||\n (hasName && normalizedName.includes(word)) ||\n combinedText.includes(word),\n )\n\n // Also check if the document name/title is contained within the search term\n const documentInSearchTerm =\n (hasName && normalizedSearchTerm.includes(normalizedName)) ||\n (hasTitle && normalizedSearchTerm.includes(normalizedTitle))\n\n return allWordsMatch || documentInSearchTerm\n}\n"],"names":["emptyCellStyle","textAlign","height","display","alignItems","justifyContent","emptyRowStyle","TableEmptyState","t0","$","_c","emptyState","colSpan","t1","t2","EmptyStateComponent","TableProvider","children","defaultSort","searchTerm","setSearchTerm","useState","sort","setSort","Symbol","for","newColumn","s","column","direction","String","setSortColumn","contextValue","t3","useTableContext","context","useContext","TableContext","Error","MotionIcon","motion","create","ArrowUpIcon","BasicHeader","text","SortHeaderButton","header","rotate","duration","ease","t4","sortIcon","t5","sorting","id","undefined","t6","t7","TableHeaderSearch","headerProps","searchDisabled","placeholder","t","useTranslation","event","currentTarget","value","SearchIcon","STICKY_HEADER_STYLE","position","top","zIndex","TableHeader","headers","paddingInline","Header","style","width","as","map","Headers","emptyTableStyle","gridTemplateRows","defaultTableStyle","TableLayout","isEmptyState","content","contentHeight","overflow","tbodyStyle","ITEM_HEIGHT","LOADING_ROW_COUNT","TableInner","columnDefs","data","searchFilter","rowId","rowActions","loading","rowProps","scrollContainerRef","hideTableInlinePadding","filteredData","useMemo","filteredResult","sortColumn","find","a","b","order","aValue","bValue","sortValue","sortTransform","get","isValid","toLowerCase","localeCompare","parseDate","datum","Date","parse","aDate","bDate","rowVirtualizer","useVirtualizer","count","length","getScrollElement","estimateSize","overscan","rowActionColumnDef","cell","cellProps","isLoading","amalgamatedColumnDefs","filter","hidden","tableMinWidth","reduce","sum","col","renderRow","cardRowProps","cardKey","index","virtualRow","size","left","right","transform","start","Cell","emptyContent","theme","useTheme","maxInlineSize","sanity","v2","container","renderLoadingRows","rowRenderer","Array","from","_el","lane","key","end","_id","isFirst","isLast","tableContent","getVirtualItems","rem","space","getTotalSize","Table","props","extractSearchableText","depth","visited","toString","isArray","item","_type","child","join","trim","Boolean","includes","push","entries","Object","every","val","startsWith","title","name","searchDocumentRelease","document","normalizedSearchTerm","normalizedTitle","normalizedName","hasTitle","hasName","combinedText","allWordsMatch","split","word","documentInSearchTerm"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var version = "6.4.
|
|
1
|
+
var version = "6.4.1-next.2+d38f654b95";
|
|
2
2
|
let buildVersion;
|
|
3
3
|
try {
|
|
4
4
|
buildVersion = process.env.PKG_BUILD_VERSION;
|
|
@@ -7,7 +7,7 @@ try {
|
|
|
7
7
|
try {
|
|
8
8
|
buildVersion = buildVersion || // This is replaced by `@sanity/pkg-utils` at build time
|
|
9
9
|
// and must always be references by its full static name, e.g. no optional chaining, no `if (process && process.env)` etc.
|
|
10
|
-
"6.4.
|
|
10
|
+
"6.4.1-next.2+d38f654b95";
|
|
11
11
|
} catch {
|
|
12
12
|
}
|
|
13
13
|
const SANITY_VERSION = buildVersion || `${version}-dev`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sanity",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.1-next.2",
|
|
4
4
|
"description": "Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cms",
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"@sanity/migrate": "^7.0.3",
|
|
96
96
|
"@sanity/mutate": "^0.18.1",
|
|
97
97
|
"@sanity/presentation-comlink": "^2.1.0",
|
|
98
|
-
"@sanity/preview-url-secret": "^4.0.
|
|
98
|
+
"@sanity/preview-url-secret": "^4.0.8",
|
|
99
99
|
"@sanity/prism-groq": "^1.1.2",
|
|
100
100
|
"@sanity/sdk": "^2.15.0",
|
|
101
101
|
"@sanity/telemetry": "^1.1.0",
|
|
@@ -154,11 +154,11 @@
|
|
|
154
154
|
"uuid": "^14.0.1",
|
|
155
155
|
"web-vitals": "^5.3.0",
|
|
156
156
|
"xstate": "^5.32.2",
|
|
157
|
-
"@sanity/
|
|
158
|
-
"@sanity/
|
|
159
|
-
"@sanity/schema": "6.4.
|
|
160
|
-
"@sanity/types": "6.4.
|
|
161
|
-
"@sanity/util": "6.4.
|
|
157
|
+
"@sanity/diff": "6.4.1-next.2+d38f654b95",
|
|
158
|
+
"@sanity/mutator": "6.4.1-next.2+d38f654b95",
|
|
159
|
+
"@sanity/schema": "6.4.1-next.2+d38f654b95",
|
|
160
|
+
"@sanity/types": "6.4.1-next.2+d38f654b95",
|
|
161
|
+
"@sanity/util": "6.4.1-next.2+d38f654b95"
|
|
162
162
|
},
|
|
163
163
|
"devDependencies": {
|
|
164
164
|
"@rolldown/plugin-babel": "^0.2.3",
|
|
@@ -200,10 +200,10 @@
|
|
|
200
200
|
"vitest": "^4.1.9",
|
|
201
201
|
"vitest-browser-react": "^2.2.0",
|
|
202
202
|
"vitest-package-exports": "^1.2.0",
|
|
203
|
-
"@repo/package.bundle": "6.4.
|
|
204
|
-
"@repo/package.config": "6.4.
|
|
205
|
-
"@repo/test-config": "6.4.
|
|
206
|
-
"@repo/tsconfig": "6.4.
|
|
203
|
+
"@repo/package.bundle": "6.4.1-next.2+d38f654b95",
|
|
204
|
+
"@repo/package.config": "6.4.1-next.2+d38f654b95",
|
|
205
|
+
"@repo/test-config": "6.4.1-next.2+d38f654b95",
|
|
206
|
+
"@repo/tsconfig": "6.4.1-next.2+d38f654b95"
|
|
207
207
|
},
|
|
208
208
|
"peerDependencies": {
|
|
209
209
|
"react": "^19.2.2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../../src/core/releases/tool/components/Table/TableEmptyState.tsx","../../src/core/releases/tool/components/Table/TableProvider.tsx","../../src/core/releases/tool/components/Table/TableHeader.tsx","../../src/core/releases/tool/components/Table/TableLayout.tsx","../../src/core/releases/tool/components/Table/Table.tsx"],"sourcesContent":["import {Card, Text} from '@sanity/ui'\nimport {type ComponentType} from 'react'\n\ninterface TableEmptyStateProps {\n emptyState: string | ComponentType\n colSpan: number\n}\n\nconst emptyCellStyle = {\n textAlign: 'center' as const,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n}\n\nconst emptyRowStyle = {\n justifyContent: 'center',\n alignItems: 'center',\n height: '100%',\n}\n\n/**\n * @internal\n */\nexport const TableEmptyState = ({emptyState, colSpan}: TableEmptyStateProps) => {\n if (typeof emptyState === 'string') {\n return (\n <Card borderBottom display=\"flex\" padding={4} as=\"tr\" style={emptyRowStyle}>\n <td colSpan={colSpan} style={emptyCellStyle}>\n <Text muted size={1}>\n {emptyState}\n </Text>\n </td>\n </Card>\n )\n }\n\n const EmptyStateComponent = emptyState\n return (\n <Card borderBottom display=\"flex\" padding={4} as=\"tr\" style={emptyRowStyle}>\n <td colSpan={colSpan} style={emptyCellStyle}>\n <EmptyStateComponent />\n </td>\n </Card>\n )\n}\n","import {type ComponentType, type PropsWithChildren, useCallback, useContext, useState} from 'react'\nimport {TableContext} from 'sanity/_singletons'\n\nimport {type SortDirection} from './types'\n\nexport interface TableSort {\n column: string\n direction: SortDirection\n}\n\n/**\n * @internal\n */\nexport interface TableContextValue {\n searchTerm: string | null\n setSearchTerm: (searchTerm: string) => void\n sort: TableSort | null\n setSortColumn: (column: string) => void\n}\n\n/**\n * @internal\n */\nexport const TableProvider: ComponentType<PropsWithChildren & {defaultSort?: TableSort}> = ({\n children,\n defaultSort,\n}) => {\n const [searchTerm, setSearchTerm] = useState<string | null>(null)\n const [sort, setSort] = useState<TableSort | null>(defaultSort || null)\n\n const setSortColumn = useCallback((newColumn: string) => {\n setSort((s) => {\n if (s?.column === newColumn) {\n return {...s, direction: s.direction === 'asc' ? 'desc' : 'asc'}\n }\n\n return {column: String(newColumn), direction: 'desc'}\n })\n }, [])\n\n const contextValue = {searchTerm, setSearchTerm, sort, setSortColumn}\n\n return <TableContext.Provider value={contextValue}>{children}</TableContext.Provider>\n}\n\n/**\n * @internal\n */\nexport const useTableContext = (): TableContextValue => {\n const context = useContext(TableContext)\n if (!context) {\n throw new Error('useTableContext must be used within a TableProvider')\n }\n return context\n}\n","import {ArrowUpIcon} from '@sanity/icons/ArrowUp'\nimport {SearchIcon} from '@sanity/icons/Search'\nimport {Box, Card, Flex, Stack, Text, TextInput} from '@sanity/ui'\nimport {motion} from 'motion/react'\nimport {type CSSProperties, useMemo} from 'react'\n\nimport {Button, type ButtonProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {useTableContext} from './TableProvider'\nimport {type HeaderProps, type TableHeaderProps} from './types'\n\nconst MotionIcon = motion.create(ArrowUpIcon)\n\nconst BasicHeader = ({text}: {text: string}) => (\n <Box padding={2}>\n <Text muted size={1} weight=\"medium\">\n {text}\n </Text>\n </Box>\n)\n\nconst SortHeaderButton = ({\n header,\n text,\n}: Omit<ButtonProps, 'text'> &\n HeaderProps & {\n text: string\n }) => {\n const {sort, setSortColumn} = useTableContext()\n const sortIcon = useMemo(\n () => (\n <MotionIcon\n initial={false}\n animate={{rotate: sort?.direction === 'asc' ? 0 : 180}}\n transition={{duration: 0.25, ease: 'easeInOut'}}\n />\n ),\n [sort?.direction],\n )\n\n return (\n <Button\n iconRight={header.sorting && sort?.column === header.id ? sortIcon : undefined}\n onClick={() => setSortColumn(String(header.id))}\n mode=\"bleed\"\n size=\"default\"\n text={text}\n />\n )\n}\n\nconst TableHeaderSearch = ({\n headerProps,\n searchDisabled,\n placeholder,\n}: HeaderProps & {placeholder?: string}) => {\n const {t} = useTranslation()\n const {setSearchTerm, searchTerm} = useTableContext()\n\n return (\n <Stack {...headerProps} flex={1} paddingY={2} paddingRight={3} sizing=\"border\">\n <TextInput\n border={false}\n fontSize={1}\n icon={SearchIcon}\n placeholder={placeholder || t('search.placeholder')}\n radius={3}\n value={searchTerm || ''}\n disabled={searchDisabled}\n onChange={(event) => setSearchTerm(event.currentTarget.value)}\n onClear={() => setSearchTerm('')}\n clearButton={!!searchTerm}\n />\n </Stack>\n )\n}\n\nconst STICKY_HEADER_STYLE: CSSProperties = {position: 'sticky', top: 0, zIndex: 1}\n\n/**\n *\n * @internal\n */\nexport const TableHeader = ({headers, searchDisabled}: TableHeaderProps) => {\n return (\n <Card as=\"thead\" borderBottom style={STICKY_HEADER_STYLE}>\n <Flex\n as=\"tr\"\n style={{\n paddingInline: `max(\n calc((100% - var(--maxInlineSize)) / 2),\n var(--paddingInline)\n )`,\n }}\n >\n {headers.map(\n ({header: Header, style, width, id, sorting}) =>\n !!Header && (\n <Header\n key={String(id)}\n headerProps={{\n as: 'th',\n id: String(id),\n style: {...style, width: width || undefined},\n }}\n header={{id, sorting}}\n searchDisabled={searchDisabled}\n />\n ),\n )}\n </Flex>\n </Card>\n )\n}\n\nexport const Headers = {\n SortHeaderButton,\n TableHeaderSearch,\n BasicHeader,\n}\n","import {type CSSProperties, type ReactNode, useMemo} from 'react'\n\ninterface TableLayoutProps {\n isEmptyState: boolean\n header: ReactNode\n content: ReactNode\n contentHeight?: string\n}\n\nconst emptyTableStyle: CSSProperties = {\n width: '100%',\n height: '100%',\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n}\n\nconst defaultTableStyle: CSSProperties = {\n width: '100%',\n}\n\n/**\n * @internal\n */\nexport const TableLayout = ({isEmptyState, header, content, contentHeight}: TableLayoutProps) => {\n // display: block makes the tbody the containing block for the absolutely\n // positioned virtualized rows in Safari too — WebKit doesn't support\n // `position: relative` on internal table boxes (https://bugs.webkit.org/show_bug.cgi?id=240961),\n // which left the rows positioned from the top of the table and the first row\n // hidden behind the sticky header\n const tbodyStyle = useMemo<CSSProperties>(\n () =>\n isEmptyState\n ? {display: 'block', height: '100%', position: 'relative', overflow: 'hidden'}\n : {display: 'block', height: contentHeight, position: 'relative'},\n [isEmptyState, contentHeight],\n )\n\n return (\n <div style={{height: '100%'}}>\n <table style={isEmptyState ? emptyTableStyle : defaultTableStyle}>\n {header}\n <tbody style={tbodyStyle}>{content}</tbody>\n </table>\n </div>\n )\n}\n","import {Box, Card, type CardProps, Flex, rem, Text, useTheme} from '@sanity/ui'\nimport {useVirtualizer, type VirtualItem} from '@tanstack/react-virtual'\nimport {isValid} from 'date-fns/isValid'\nimport get from 'lodash-es/get.js'\nimport {type CSSProperties, type ElementType, Fragment, useMemo} from 'react'\n\nimport {TooltipDelayGroupProvider} from '../../../../../ui-components'\nimport {TableEmptyState} from './TableEmptyState'\nimport {TableHeader} from './TableHeader'\nimport {TableLayout} from './TableLayout'\nimport {TableProvider, type TableSort, useTableContext} from './TableProvider'\nimport {type Column} from './types'\n\ntype RowDatum<TableData, AdditionalRowTableData> = (AdditionalRowTableData extends undefined\n ? TableData\n : TableData & AdditionalRowTableData) & {isLoading?: boolean}\n\nexport type TableRowProps = CardProps<ElementType>\n\ntype VirtualDatum = {\n virtualRow: VirtualItem\n index: number\n isFirst: boolean\n isLast: boolean\n}\n\nexport interface TableProps<TableData, AdditionalRowTableData> {\n columnDefs: Column<RowDatum<TableData, AdditionalRowTableData>>[]\n searchFilter?: (data: TableData[], searchTerm: string) => TableData[]\n data: TableData[]\n emptyState: (() => React.JSX.Element) | string\n loading?: boolean\n /**\n * Should be the dot separated path to the unique identifier of the row. e.g. document._id\n */\n rowId: string\n rowActions?: ({\n datum,\n }: {\n datum: RowDatum<TableData, AdditionalRowTableData> | unknown\n }) => React.ReactNode\n rowProps?: (datum: TableData) => Partial<TableRowProps>\n scrollContainerRef: HTMLDivElement | null\n hideTableInlinePadding?: boolean\n}\n\nconst ITEM_HEIGHT = 59\nconst LOADING_ROW_COUNT = 3\n\n// oxlint-disable-next-line react/react-compiler\nconst TableInner = <TableData, AdditionalRowTableData>({\n columnDefs,\n data,\n emptyState,\n searchFilter,\n rowId,\n rowActions,\n loading = false,\n rowProps = () => ({}),\n scrollContainerRef,\n hideTableInlinePadding = false,\n}: TableProps<TableData, AdditionalRowTableData>) => {\n const {searchTerm, sort} = useTableContext()\n\n const filteredData = useMemo(() => {\n const filteredResult = searchFilter ? searchFilter(data, searchTerm || '') : data\n if (!sort) return filteredResult\n\n const sortColumn = columnDefs.find((column) => column.id === sort.column)\n return [...filteredResult].sort((a, b) => {\n let order: number\n\n const [aValue, bValue]: (number | string)[] = [a, b].map(\n (sortValue) =>\n sortColumn?.sortTransform?.(\n sortValue as RowDatum<TableData, AdditionalRowTableData>,\n sort.direction,\n ) ?? get(sortValue, sort.column),\n )\n if (\n typeof aValue === 'string' &&\n typeof bValue === 'string' &&\n !isValid(aValue) &&\n !isValid(bValue)\n ) {\n order = aValue.toLowerCase().localeCompare(bValue.toLowerCase())\n } else {\n const parseDate = (datum: number | string) => {\n if (sortColumn?.sortTransform && typeof datum === 'number') return datum\n\n return typeof datum === 'string' ? Date.parse(datum) : 0\n }\n\n const [aDate, bDate] = [aValue, bValue].map(parseDate)\n\n order = aDate - bDate\n }\n\n if (sort.direction === 'asc') return order\n return -order\n })\n }, [columnDefs, data, searchFilter, searchTerm, sort])\n\n const rowVirtualizer = useVirtualizer({\n count: filteredData.length,\n getScrollElement: () => scrollContainerRef,\n estimateSize: () => ITEM_HEIGHT,\n overscan: 5,\n })\n\n const rowActionColumnDef: Column = useMemo(\n () => ({\n id: 'actions',\n sorting: false,\n width: 50,\n header: ({headerProps: {id}}) => (\n <Flex as=\"th\" id={id} paddingY={3} paddingX={3} sizing=\"border\" style={{width: '50px'}}>\n <Text muted size={1} weight=\"medium\">\n \n </Text>\n </Flex>\n ),\n cell: ({datum, cellProps: {id}}) => (\n <Flex as=\"td\" id={id} align=\"center\" flex=\"none\" padding={3} style={{width: '25px'}}>\n {(!datum.isLoading && rowActions?.({datum})) || <Box style={{width: '25px'}} />}\n </Flex>\n ),\n }),\n [rowActions],\n )\n\n const amalgamatedColumnDefs = useMemo(\n () =>\n (rowActions ? [...columnDefs, rowActionColumnDef] : columnDefs).filter(\n (column) => !column.hidden,\n ),\n [columnDefs, rowActionColumnDef, rowActions],\n )\n\n const tableMinWidth = useMemo(\n () => amalgamatedColumnDefs.reduce((sum, col) => sum + (col.width || 200), 0),\n [amalgamatedColumnDefs],\n )\n\n const renderRow = useMemo(\n () =>\n function TableRow(\n datum: VirtualDatum &\n (TableData | (TableData & AdditionalRowTableData) | {_id: string; isLoading: boolean}),\n ) {\n const cardRowProps = rowProps(datum as TableData)\n const cardKey = loading ? `skeleton-${datum.index}` : String(get(datum, rowId))\n\n return (\n <Card\n key={cardKey}\n data-testid={loading ? 'table-row-skeleton' : 'table-row'}\n borderBottom\n display=\"flex\"\n data-index={datum.index}\n as=\"tr\"\n style={{\n height: `${datum.virtualRow.size}px`,\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n transform: `translateY(${datum.virtualRow.start}px)`,\n paddingInline: `max(\n calc((100% - var(--maxInlineSize)) / 2),\n var(--paddingInline)\n )`,\n }}\n {...cardRowProps}\n >\n {amalgamatedColumnDefs.map(({cell: Cell, style, width, id, sorting = false}) => (\n <Fragment key={String(id)}>\n <Cell\n datum={\n {...datum, isLoading: loading} as RowDatum<TableData, AdditionalRowTableData>\n }\n cellProps={{\n as: 'td',\n id: String(id),\n style: {...style, width: width || undefined},\n }}\n sorting={sorting}\n />\n </Fragment>\n ))}\n </Card>\n )\n },\n [amalgamatedColumnDefs, loading, rowId, rowProps],\n )\n\n const emptyContent = useMemo(\n () => <TableEmptyState emptyState={emptyState} colSpan={amalgamatedColumnDefs.length} />,\n [amalgamatedColumnDefs.length, emptyState],\n )\n\n const headers = useMemo(\n () =>\n amalgamatedColumnDefs.map(({cell, sortTransform, ...header}) => ({\n ...header,\n id: String(header.id),\n })),\n [amalgamatedColumnDefs],\n )\n\n const theme = useTheme()\n\n const maxInlineSize = (!hideTableInlinePadding && theme.sanity.v2?.container[3]) || 0\n\n const renderLoadingRows = (\n rowRenderer: (\n datum: VirtualDatum &\n ({_id: string; isLoading: boolean} | TableData | (TableData & AdditionalRowTableData)),\n ) => React.ReactNode,\n ) => {\n return Array.from({length: LOADING_ROW_COUNT}).map((_el, index) => {\n const cardKey = `skeleton-${index}`\n const virtualRow: VirtualItem = {\n index,\n start: index * ITEM_HEIGHT,\n size: ITEM_HEIGHT,\n lane: 0,\n key: cardKey,\n end: index * ITEM_HEIGHT + ITEM_HEIGHT,\n }\n\n return rowRenderer({\n _id: cardKey,\n isLoading: true,\n virtualRow,\n index,\n isFirst: index === 0,\n isLast: index === LOADING_ROW_COUNT - 1,\n })\n })\n }\n\n const tableContent = () => {\n if (loading) {\n return renderLoadingRows(renderRow)\n }\n\n if (filteredData.length === 0) {\n return emptyContent\n }\n\n return rowVirtualizer.getVirtualItems().map((virtualRow, index) => {\n const datum = filteredData[virtualRow.index]\n return renderRow({\n ...datum,\n virtualRow,\n index,\n isFirst: virtualRow.index === 0,\n isLast: virtualRow.index === filteredData.length - 1,\n })\n })\n }\n\n return (\n <div style={{height: '100%'}}>\n <div\n style={\n {\n 'width': '100%',\n 'minWidth': `${tableMinWidth}px`,\n 'height': '100%',\n 'position': 'relative',\n '--maxInlineSize': rem(maxInlineSize),\n '--paddingInline': rem(theme.sanity.v2?.space[3] ?? 0),\n } as CSSProperties\n }\n >\n <TableLayout\n isEmptyState={filteredData.length === 0 && !loading}\n header={\n <TableHeader\n headers={headers}\n searchDisabled={loading || (!searchTerm && !data.length)}\n />\n }\n content={tableContent()}\n contentHeight={`${rowVirtualizer.getTotalSize()}px`}\n />\n </div>\n </div>\n )\n}\n\nexport const Table = <TableData, AdditionalRowTableData = undefined>({\n defaultSort,\n ...props\n}: TableProps<TableData, AdditionalRowTableData> & {defaultSort?: TableSort}) => {\n return (\n <TooltipDelayGroupProvider>\n <TableProvider defaultSort={defaultSort}>\n <TableInner<TableData, AdditionalRowTableData> {...props} />\n </TableProvider>\n </TooltipDelayGroupProvider>\n )\n}\n"],"names":["emptyCellStyle","textAlign","height","display","alignItems","justifyContent","emptyRowStyle","TableEmptyState","t0","$","_c","emptyState","colSpan","t1","t2","EmptyStateComponent","TableProvider","children","defaultSort","searchTerm","setSearchTerm","useState","sort","setSort","Symbol","for","newColumn","s","column","direction","String","setSortColumn","contextValue","t3","useTableContext","context","useContext","TableContext","Error","MotionIcon","motion","create","ArrowUpIcon","BasicHeader","text","SortHeaderButton","header","rotate","duration","ease","t4","sortIcon","t5","sorting","id","undefined","t6","t7","TableHeaderSearch","headerProps","searchDisabled","placeholder","t","useTranslation","event","currentTarget","value","SearchIcon","STICKY_HEADER_STYLE","position","top","zIndex","TableHeader","headers","paddingInline","Header","style","width","as","map","Headers","emptyTableStyle","gridTemplateRows","defaultTableStyle","TableLayout","isEmptyState","content","contentHeight","overflow","tbodyStyle","ITEM_HEIGHT","LOADING_ROW_COUNT","TableInner","columnDefs","data","searchFilter","rowId","rowActions","loading","rowProps","scrollContainerRef","hideTableInlinePadding","filteredData","useMemo","filteredResult","sortColumn","find","a","b","order","aValue","bValue","sortValue","sortTransform","get","isValid","toLowerCase","localeCompare","parseDate","datum","Date","parse","aDate","bDate","rowVirtualizer","useVirtualizer","count","length","getScrollElement","estimateSize","overscan","rowActionColumnDef","cell","cellProps","isLoading","amalgamatedColumnDefs","filter","hidden","tableMinWidth","reduce","sum","col","renderRow","cardRowProps","cardKey","index","virtualRow","size","left","right","transform","start","Cell","emptyContent","theme","useTheme","maxInlineSize","sanity","v2","container","renderLoadingRows","rowRenderer","Array","from","_el","lane","key","end","_id","isFirst","isLast","tableContent","getVirtualItems","rem","space","getTotalSize","Table","props"],"mappings":";;;;;;;;;;;;;;AAQA,MAAMA,iBAAiB;AAAA,EACrBC,WAAW;AAAA,EACXC,QAAQ;AAAA,EACRC,SAAS;AAAA,EACTC,YAAY;AAAA,EACZC,gBAAgB;AAClB,GAEMC,gBAAgB;AAAA,EACpBD,gBAAgB;AAAA,EAChBD,YAAY;AAAA,EACZF,QAAQ;AACV,GAKaK,kBAAkBC,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAC;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAAJ;AAC9B,MAAI,OAAOG,cAAe,UAAQ;AAAA,QAAAE;AAAAJ,aAAAE,cAI1BE,0BAAC,MAAA,EAAK,WAAY,SACfF,sBACH,GAAOF,OAAAE,YAAAF,OAAAI,OAAAA,MAAAJ,EAAA,CAAA;AAAA,QAAAK;AAAA,WAAAL,EAAA,CAAA,MAAAG,WAAAH,SAAAI,OAJXC,MAAA,oBAAC,QAAK,cAAA,IAAqB,SAAA,QAAgB,SAAA,GAAM,IAAA,MAAYR,sBAC3D,UAAA,4BAAaM,SAAgBZ,uBAC3Ba,UAAAA,IAAAA,CAGF,GACF,GAAOJ,OAAAG,SAAAH,OAAAI,KAAAJ,OAAAK,OAAAA,MAAAL,EAAA,CAAA,GANPK;AAAAA,EAMO;AAIX,QAAAC,sBAA4BJ;AAAU,MAAAE;AAAAJ,WAAAM,uBAIhCF,KAAA,oBAAC,uBAAmB,GAAGJ,OAAAM,qBAAAN,OAAAI,MAAAA,KAAAJ,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAG,WAAAH,SAAAI,MAF3BC,KAAA,oBAAC,QAAK,cAAA,IAAqB,SAAA,QAAgB,SAAA,GAAM,IAAA,MAAYR,sBAC3D,UAAA,4BAAaM,SAAgBZ,uBAC3Ba,UAAAA,GAAAA,CACF,GACF,GAAOJ,OAAAG,SAAAH,OAAAI,IAAAJ,OAAAK,MAAAA,KAAAL,EAAA,CAAA,GAJPK;AAIO,GCrBEE,gBAA8ER,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAC;AAAA,IAAAO;AAAAA,IAAAC;AAAAA,EAAAA,IAAAV,IAI1F,CAAAW,YAAAC,aAAA,IAAoCC,SAAwB,IAAI,GAChE,CAAAC,MAAAC,OAAA,IAAwBF,SAA2BH,eAAA,IAAmB;AAAC,MAAAL;AAAAJ,IAAA,CAAA,MAAAe,uBAAAC,IAAA,2BAAA,KAErCZ,KAAAa,CAAAA,cAAA;AAChCH,YAAQI,CAAAA,MACFA,GAACC,WAAaF,YACT;AAAA,MAAA,GAAIC;AAAAA,MAACE,WAAaF,EAACE,cAAe,QAAhB,SAAA;AAAA,IAAA,IAGpB;AAAA,MAAAD,QAASE,OAAOJ,SAAS;AAAA,MAACG,WAAa;AAAA,IAAA,CAC/C;AAAA,EAAC,GACHpB,OAAAI,MAAAA,KAAAJ,EAAA,CAAA;AARD,QAAAsB,gBAAsBlB;AAQhB,MAAAC;AAAAL,IAAA,CAAA,MAAAU,cAAAV,SAAAa,QAEeR,KAAA;AAAA,IAAAK;AAAAA,IAAAC;AAAAA,IAAAE;AAAAA,IAAAS;AAAAA,EAAAA,GAAgDtB,OAAAU,YAAAV,OAAAa,MAAAb,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAArE,QAAAuB,eAAqBlB;AAAgD,MAAAmB;AAAA,SAAAxB,EAAA,CAAA,MAAAQ,YAAAR,SAAAuB,gBAE9DC,KAAA,oBAAA,aAAA,UAAA,EAA8BD,OAAAA,cAAef,SAAAA,CAAS,GAAwBR,OAAAQ,UAAAR,OAAAuB,cAAAvB,OAAAwB,MAAAA,KAAAxB,EAAA,CAAA,GAA9EwB;AAA8E,GAM1EC,kBAAkBA,MAAA;AAC7B,QAAAC,UAAgBC,WAAWC,YAAY;AACvC,MAAI,CAACF;AACH,UAAM,IAAIG,MAAM,qDAAqD;AACtE,SACMH;AAAO,GC1CVI,aAAaC,OAAOC,OAAOC,WAAW,GAEtCC,cAAcnC,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAC;AAAA,IAAAkC;AAAAA,EAAAA,IAAApC;AAAsB,MAAAK;AAAA,SAAAJ,SAAAmC,QACzC/B,KAAA,oBAAC,KAAA,EAAa,SAAA,GACZ,UAAA,oBAAC,MAAA,EAAK,WAAY,MAAA,GAAU,QAAA,UACzB+B,UAAAA,KAAAA,CACH,EAAA,CACF,GAAMnC,OAAAmC,MAAAnC,OAAAI,MAAAA,KAAAJ,EAAA,CAAA,GAJNI;AAIM,GAGFgC,mBAAmBrC,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAC;AAAA,IAAAoC;AAAAA,IAAAF;AAAAA,EAAAA,IAAApC,IAOxB;AAAA,IAAAc;AAAAA,IAAAS;AAAAA,EAAAA,IAA8BG,gBAAAA;AAS3BZ,QAAIO;AAJiB,QAAAhB,KAAAS,MAAIO,cAAgB,QAApB,IAAA;AAAmC,MAAAf;AAAAL,WAAAI,MAA5CC,KAAA;AAAA,IAAAiC,QAASlC;AAAAA,EAAAA,GAAoCJ,OAAAI,IAAAJ,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAAA,MAAAwB;AAAAxB,IAAA,CAAA,6BAAAgB,IAAA,2BAAA,KAC1CQ,KAAA;AAAA,IAAAe,UAAW;AAAA,IAAIC,MAAQ;AAAA,EAAA,GAAYxC,OAAAwB,MAAAA,KAAAxB,EAAA,CAAA;AAAA,MAAAyC;AAAAzC,WAAAK,MAHjDoC,yBAAC,YAAA,EACU,SAAA,IACA,SAAApC,IACG,YAAAmB,IAAmC,GAC/CxB,OAAAK,IAAAL,OAAAyC,MAAAA,KAAAzC,EAAA,CAAA;AANN,QAAA0C,WAEID,IAWWE,KAAAN,OAAMO,WAAY/B,MAAIM,WAAakB,OAAMQ,KAAzCH,WAAAI;AAAmE,MAAAC;AAAA/C,WAAAqC,OAAAQ,MAAA7C,SAAAsB,iBACrEyB,KAAAA,MAAMzB,cAAcD,OAAOgB,OAAMQ,EAAG,CAAC,GAAC7C,EAAA,CAAA,IAAAqC,OAAAQ,IAAA7C,OAAAsB,eAAAtB,OAAA+C,MAAAA,KAAA/C,EAAA,CAAA;AAAA,MAAAgD;AAAA,SAAAhD,EAAA,CAAA,MAAA2C,MAAA3C,SAAA+C,MAAA/C,EAAA,EAAA,MAAAmC,QAFjDa,yBAAC,QAAA,EACY,WAAAL,IACF,SAAAI,IACJ,MAAA,SACA,MAAA,WACCZ,KAAAA,CAAI,GACVnC,OAAA2C,IAAA3C,OAAA+C,IAAA/C,QAAAmC,MAAAnC,QAAAgD,MAAAA,KAAAhD,EAAA,EAAA,GANFgD;AAME,GAIAC,oBAAoBlD,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAC;AAAA,IAAAiD;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAArD,IAKzB;AAAA,IAAAsD;AAAAA,EAAAA,IAAYC,kBACZ;AAAA,IAAA3C;AAAAA,IAAAD;AAAAA,EAAAA,IAAoCe,gBAAAA;AAAiB,MAAArB;AAAAJ,IAAA,CAAA,MAAAoD,eAAApD,SAAAqD,KAQlCjD,KAAAgD,eAAeC,EAAE,oBAAoB,GAACrD,OAAAoD,aAAApD,OAAAqD,GAAArD,OAAAI,MAAAA,KAAAJ,EAAA,CAAA;AAE5C,QAAAK,KAAAK,cAAA;AAAgB,MAAAc,IAAAiB;AAAAzC,WAAAW,iBAEba,KAAA+B,CAAAA,UAAW5C,cAAc4C,MAAKC,cAAcC,KAAM,GACnDhB,KAAAA,MAAM9B,cAAc,EAAE,GAACX,OAAAW,eAAAX,OAAAwB,IAAAxB,OAAAyC,OAAAjB,KAAAxB,EAAA,CAAA,GAAAyC,KAAAzC,EAAA,CAAA;AACnB,QAAA2C,KAAA,CAAC,CAACjC;AAAU,MAAAqC;AAAA/C,WAAAmD,kBAAAnD,EAAA,CAAA,MAAAI,MAAAJ,EAAA,CAAA,MAAAK,MAAAL,EAAA,CAAA,MAAAwB,MAAAxB,UAAAyC,MAAAzC,EAAA,EAAA,MAAA2C,MAV3BI,yBAAC,WAAA,EACS,YACE,UAAA,GACJW,MAAAA,YACO,aAAAtD,IACL,QAAA,GACD,OAAAC,IACG8C,UAAAA,gBACA,UAAA3B,IACD,SAAAiB,IACI,aAAAE,IAAY,GACzB3C,OAAAmD,gBAAAnD,OAAAI,IAAAJ,OAAAK,IAAAL,OAAAwB,IAAAxB,QAAAyC,IAAAzC,QAAA2C,IAAA3C,QAAA+C,MAAAA,KAAA/C,EAAA,EAAA;AAAA,MAAAgD;AAAA,SAAAhD,EAAA,EAAA,MAAAkD,eAAAlD,UAAA+C,MAZJC,KAAA,oBAAC,SAAK,GAAKE,aAAmB,MAAA,GAAa,UAAA,GAAiB,cAAA,GAAU,QAAA,UACpEH,cAYF,GAAQ/C,QAAAkD,aAAAlD,QAAA+C,IAAA/C,QAAAgD,MAAAA,KAAAhD,EAAA,EAAA,GAbRgD;AAaQ,GAINW,sBAAqC;AAAA,EAACC,UAAU;AAAA,EAAUC,KAAK;AAAA,EAAGC,QAAQ;AAAC,GAMpEC,cAAchE,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAC;AAAA,IAAA+D;AAAAA,IAAAb;AAAAA,EAAAA,IAAApD;AAA2C,MAAAK;AAAAJ,IAAA,CAAA,6BAAAgB,IAAA,2BAAA,KAKxDZ,KAAA;AAAA,IAAA6D,eACU;AAAA;AAAA;AAAA;AAAA,EAAA,GAIhBjE,OAAAI,MAAAA,KAAAJ,EAAA,CAAA;AAAA,MAAAK;AAAA,MAAAL,EAAA,CAAA,MAAAgE,WAAAhE,SAAAmD,gBAAA;AAAA,QAAA3B;AAAAxB,aAAAmD,kBAGC3B,MAAAiB,CAAAA,OAAA;AAAC,YAAA;AAAA,QAAAJ,QAAA6B;AAAAA,QAAAC;AAAAA,QAAAC;AAAAA,QAAAvB;AAAAA,QAAAD;AAAAA,MAAAA,IAAAH;AAA2C,aAC1C,CAAC,CAACyB,UACA,oBAAC,UAEc,aAAA;AAAA,QAAAG,IACP;AAAA,QAAIxB,IACJxB,OAAOwB,EAAE;AAAA,QAACsB,OACP;AAAA,UAAA,GAAIA;AAAAA,UAAKC,OAASA,SAAAtB;AAAAA,QAAAA;AAAAA,MAAkB,GAErC,QAAA;AAAA,QAAAD;AAAAA,QAAAD;AAAAA,MAAAA,GACQO,eAAAA,GAPX9B,OAAOwB,EAAE,CAOgB;AAAA,IAEjC,GAAA7C,OAAAmD,gBAAAnD,OAAAwB,OAAAA,MAAAxB,EAAA,CAAA,GAbJK,KAAA2D,QAAOM,IACN9C,GAaF,GAACxB,OAAAgE,SAAAhE,OAAAmD,gBAAAnD,OAAAK;AAAAA,EAAA;AAAAA,SAAAL,EAAA,CAAA;AAAA,MAAAwB;AAAA,SAAAxB,SAAAK,MAxBLmB,yBAAC,MAAA,EAAQ,IAAA,SAAQ,cAAA,IAAoBmC,OAAAA,qBACnC,8BAAC,MAAA,EACI,IAAA,MACI,OAAAvD,IAONC,UAAAA,GAAAA,CAeH,EAAA,CACF,GAAOL,OAAAK,IAAAL,OAAAwB,MAAAA,KAAAxB,EAAA,CAAA,GA1BPwB;AA0BO,GAIE+C,UAAU;AAAA,EACrBnC;AAAAA,EACAa;AAAAA,EACAf;AACF,GC9GMsC,kBAAiC;AAAA,EACrCJ,OAAO;AAAA,EACP3E,QAAQ;AAAA,EACRC,SAAS;AAAA,EACT+E,kBAAkB;AACpB,GAEMC,oBAAmC;AAAA,EACvCN,OAAO;AACT,GAKaO,cAAc5E,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAC;AAAA,IAAA2E;AAAAA,IAAAvC;AAAAA,IAAAwC;AAAAA,IAAAC;AAAAA,EAAAA,IAAA/E;AAAgE,MAAAK;AAAAJ,IAAA,CAAA,MAAA8E,iBAAA9E,SAAA4E,gBAQtFxE,KAAAwE,eAAA;AAAA,IAAAlF,SACc;AAAA,IAAOD,QAAU;AAAA,IAAMmE,UAAY;AAAA,IAAUmB,UAAY;AAAA,EAAA,IADvE;AAAA,IAAArF,SAEc;AAAA,IAAOD,QAAUqF;AAAAA,IAAalB,UAAY;AAAA,EAAA,GAAW5D,OAAA8E,eAAA9E,OAAA4E,cAAA5E,OAAAI,MAAAA,KAAAJ,EAAA,CAAA;AAJvE,QAAAgF,aAEI5E;AAIH,MAAAC;AAAAL,IAAA,CAAA,6BAAAgB,IAAA,2BAAA,KAGaX,KAAA;AAAA,IAAAZ,QAAS;AAAA,EAAA,GAAOO,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AACZ,QAAAwB,KAAAoD,eAAAJ,kBAAAE;AAAkD,MAAAjC;AAAAzC,IAAA,CAAA,MAAA6E,WAAA7E,SAAAgF,cAE9DvC,KAAA,oBAAA,SAAA,EAAcuC,OAAAA,YAAaH,UAAAA,SAAQ,GAAQ7E,OAAA6E,SAAA7E,OAAAgF,YAAAhF,OAAAyC,MAAAA,KAAAzC,EAAA,CAAA;AAAA,MAAA2C;AAAA,SAAA3C,EAAA,CAAA,MAAAqC,UAAArC,SAAAwB,MAAAxB,EAAA,CAAA,MAAAyC,MAH/CE,yBAAA,OAAA,EAAY,OAAAtC,IACV,UAAA,qBAAA,SAAA,EAAc,OAAAmB,IACXa,UAAAA;AAAAA,IAAAA;AAAAA,IACDI;AAAAA,EAAAA,GACF,EAAA,CACF,GAAMzC,OAAAqC,QAAArC,OAAAwB,IAAAxB,OAAAyC,IAAAzC,QAAA2C,MAAAA,KAAA3C,EAAA,EAAA,GALN2C;AAKM,GCGJsC,cAAc,IACdC,oBAAoB,GAGpBC,aAAaA,CAAoC;AAAA,EACrDC;AAAAA,EACAC;AAAAA,EACAnF;AAAAA,EACAoF;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,UAAU;AAAA,EACVC,WAAWA,OAAO,CAAA;AAAA,EAClBC;AAAAA,EACAC,yBAAyB;AACoB,MAAM;AACnD,QAAM;AAAA,IAAClF;AAAAA,IAAYG;AAAAA,EAAAA,IAAQY,gBAAAA,GAErBoE,eAAeC,QAAQ,MAAM;AACjC,UAAMC,iBAAiBT,eAAeA,aAAaD,MAAM3E,cAAc,EAAE,IAAI2E;AAC7E,QAAI,CAACxE,KAAM,QAAOkF;AAElB,UAAMC,aAAaZ,WAAWa,KAAM9E,YAAWA,OAAO0B,OAAOhC,KAAKM,MAAM;AACxE,WAAO,CAAC,GAAG4E,cAAc,EAAElF,KAAK,CAACqF,GAAGC,MAAM;AACxC,UAAIC;AAEJ,YAAM,CAACC,QAAQC,MAAM,IAAyB,CAACJ,GAAGC,CAAC,EAAE7B,IAClDiC,CAAAA,cACCP,YAAYQ,gBACVD,WACA1F,KAAKO,SACP,KAAKqF,IAAIF,WAAW1F,KAAKM,MAAM,CACnC;AACA,UACE,OAAOkF,UAAW,YAClB,OAAOC,UAAW,YAClB,CAACI,QAAQL,MAAM,KACf,CAACK,QAAQJ,MAAM;AAEfF,gBAAQC,OAAOM,YAAAA,EAAcC,cAAcN,OAAOK,aAAa;AAAA,WAC1D;AACL,cAAME,YAAaC,CAAAA,UACbd,YAAYQ,iBAAiB,OAAOM,SAAU,WAAiBA,QAE5D,OAAOA,SAAU,WAAWC,KAAKC,MAAMF,KAAK,IAAI,GAGnD,CAACG,OAAOC,KAAK,IAAI,CAACb,QAAQC,MAAM,EAAEhC,IAAIuC,SAAS;AAErDT,gBAAQa,QAAQC;AAAAA,MAClB;AAEA,aAAIrG,KAAKO,cAAc,QAAcgF,QAC9B,CAACA;AAAAA,IACV,CAAC;AAAA,EACH,GAAG,CAAChB,YAAYC,MAAMC,cAAc5E,YAAYG,IAAI,CAAC,GAE/CsG,iBAAiBC,eAAe;AAAA,IACpCC,OAAOxB,aAAayB;AAAAA,IACpBC,kBAAkBA,MAAM5B;AAAAA,IACxB6B,cAAcA,MAAMvC;AAAAA,IACpBwC,UAAU;AAAA,EAAA,CACX,GAEKC,qBAA6B5B,QACjC,OAAO;AAAA,IACLjD,IAAI;AAAA,IACJD,SAAS;AAAA,IACTwB,OAAO;AAAA,IACP/B,QAAQA,CAAC;AAAA,MAACa,aAAa;AAAA,QAACL;AAAAA,MAAAA;AAAAA,IAAE,MACxB,oBAAC,MAAA,EAAK,IAAG,MAAK,IAAQ,UAAU,GAAG,UAAU,GAAG,QAAO,UAAS,OAAO;AAAA,MAACuB,OAAO;AAAA,IAAA,GAC7E,UAAA,oBAAC,MAAA,EAAK,OAAK,IAAC,MAAM,GAAG,QAAO,UAAQ,UAAA,OAAA,CAEpC,EAAA,CACF;AAAA,IAEFuD,MAAMA,CAAC;AAAA,MAACb,OAAAA;AAAAA,MAAOc,WAAW;AAAA,QAAC/E,IAAAA;AAAAA,MAAAA;AAAAA,IAAE,MAC3B,oBAAC,MAAA,EAAK,IAAG,MAAK,IAAIA,MAAI,OAAM,UAAS,MAAK,QAAO,SAAS,GAAG,OAAO;AAAA,MAACuB,OAAO;AAAA,IAAA,GACxE,UAAA,CAAC0C,QAAMe,aAAarC,aAAa;AAAA,MAACsB,OAAAA;AAAAA,IAAAA,CAAM,KAAM,oBAAC,KAAA,EAAI,OAAO;AAAA,MAAC1C,OAAO;AAAA,IAAA,GAAQ,EAAA,CAC9E;AAAA,EAAA,IAGJ,CAACoB,UAAU,CACb,GAEMsC,wBAAwBhC,QAC5B,OACGN,aAAa,CAAC,GAAGJ,YAAYsC,kBAAkB,IAAItC,YAAY2C,OAC7D5G,CAAAA,aAAW,CAACA,SAAO6G,MACtB,GACF,CAAC5C,YAAYsC,oBAAoBlC,UAAU,CAC7C,GAEMyC,gBAAgBnC,QACpB,MAAMgC,sBAAsBI,OAAO,CAACC,KAAKC,QAAQD,OAAOC,IAAIhE,SAAS,MAAM,CAAC,GAC5E,CAAC0D,qBAAqB,CACxB,GAEMO,YAAYvC,QAChB,MACE,SACEgB,SAEA;AACA,UAAMwB,eAAe5C,SAASoB,OAAkB,GAC1CyB,UAAU9C,UAAU,YAAYqB,QAAM0B,KAAK,KAAKnH,OAAOoF,IAAIK,SAAOvB,KAAK,CAAC;AAE9E,WACE,oBAAC,MAAA,EAEC,eAAaE,UAAU,uBAAuB,aAC9C,cAAY,IACZ,SAAQ,QACR,cAAYqB,QAAM0B,OAClB,IAAG,MACH,OAAO;AAAA,MACL/I,QAAQ,GAAGqH,QAAM2B,WAAWC,IAAI;AAAA,MAChC9E,UAAU;AAAA,MACVC,KAAK;AAAA,MACL8E,MAAM;AAAA,MACNC,OAAO;AAAA,MACPC,WAAW,cAAc/B,QAAM2B,WAAWK,KAAK;AAAA,MAC/C7E,eAAe;AAAA;AAAA;AAAA;AAAA,IAAA,GAKjB,GAAIqE,cAEHR,UAAAA,sBAAsBxD,IAAI,CAAC;AAAA,MAACqD,MAAMoB;AAAAA,MAAM5E;AAAAA,MAAOC;AAAAA,MAAOvB,IAAAA;AAAAA,MAAID,UAAU;AAAA,IAAA,MACnE,oBAAC,UAAA,EACC,UAAA,oBAAC,QACC,OACE;AAAA,MAAC,GAAGkE;AAAAA,MAAOe,WAAWpC;AAAAA,IAAAA,GAExB,WAAW;AAAA,MACTpB,IAAI;AAAA,MACJxB,IAAIxB,OAAOwB,IAAE;AAAA,MACbsB,OAAO;AAAA,QAAC,GAAGA;AAAAA,QAAOC,OAAOA,SAAStB;AAAAA,MAAAA;AAAAA,IAAS,GAE7C,SAAiB,KAVNzB,OAAOwB,IAAE,CAYxB,CACD,KAlCI0F,OAmCP;AAAA,EAEJ,GACF,CAACT,uBAAuBrC,SAASF,OAAOG,QAAQ,CAClD,GAEMsD,eAAelD,QACnB,MAAM,oBAAC,iBAAA,EAAgB,YAAwB,SAASgC,sBAAsBR,OAAAA,CAAO,GACrF,CAACQ,sBAAsBR,QAAQpH,UAAU,CAC3C,GAEM8D,UAAU8B,QACd,MACEgC,sBAAsBxD,IAAI,CAAC;AAAA,IAACqD;AAAAA,IAAMnB;AAAAA,IAAe,GAAGnE;AAAAA,EAAAA,OAAa;AAAA,IAC/D,GAAGA;AAAAA,IACHQ,IAAIxB,OAAOgB,OAAOQ,EAAE;AAAA,EAAA,EACpB,GACJ,CAACiF,qBAAqB,CACxB,GAEMmB,QAAQC,SAAAA,GAERC,gBAAiB,CAACvD,0BAA0BqD,MAAMG,OAAOC,IAAIC,UAAU,CAAC,KAAM,GAE9EC,oBACJC,CAAAA,gBAKOC,MAAMC,KAAK;AAAA,IAACpC,QAAQpC;AAAAA,EAAAA,CAAkB,EAAEZ,IAAI,CAACqF,KAAKnB,UAAU;AACjE,UAAMD,YAAU,YAAYC,KAAK,IAC3BC,aAA0B;AAAA,MAC9BD;AAAAA,MACAM,OAAON,QAAQvD;AAAAA,MACfyD,MAAMzD;AAAAA,MACN2E,MAAM;AAAA,MACNC,KAAKtB;AAAAA,MACLuB,KAAKtB,QAAQvD,cAAcA;AAAAA,IAAAA;AAG7B,WAAOuE,YAAY;AAAA,MACjBO,KAAKxB;AAAAA,MACLV,WAAW;AAAA,MACXY;AAAAA,MACAD;AAAAA,MACAwB,SAASxB,UAAU;AAAA,MACnByB,QAAQzB,UAAUtD,oBAAoB;AAAA,IAAA,CACvC;AAAA,EACH,CAAC,GAGGgF,eAAeA,MACfzE,UACK8D,kBAAkBlB,SAAS,IAGhCxC,aAAayB,WAAW,IACnB0B,eAGF7B,eAAegD,gBAAAA,EAAkB7F,IAAI,CAACmE,cAAYD,YAAU;AACjE,UAAM1B,UAAQjB,aAAa4C,aAAWD,KAAK;AAC3C,WAAOH,UAAU;AAAA,MACf,GAAGvB;AAAAA,MACH2B,YAAAA;AAAAA,MACAD,OAAAA;AAAAA,MACAwB,SAASvB,aAAWD,UAAU;AAAA,MAC9ByB,QAAQxB,aAAWD,UAAU3C,aAAayB,SAAS;AAAA,IAAA,CACpD;AAAA,EACH,CAAC;AAGH,SACE,oBAAC,SAAI,OAAO;AAAA,IAAC7H,QAAQ;AAAA,EAAA,GACnB,UAAA,oBAAC,OAAA,EACC,OACE;AAAA,IACE,OAAS;AAAA,IACT,UAAY,GAAGwI,aAAa;AAAA,IAC5B,QAAU;AAAA,IACV,UAAY;AAAA,IACZ,mBAAmBmC,IAAIjB,aAAa;AAAA,IACpC,mBAAmBiB,IAAInB,MAAMG,OAAOC,IAAIgB,MAAM,CAAC,KAAK,CAAC;AAAA,EAAA,GAIzD,UAAA,oBAAC,aAAA,EACC,cAAcxE,aAAayB,WAAW,KAAK,CAAC7B,SAC5C,QACE,oBAAC,aAAA,EACC,SACA,gBAAgBA,WAAY,CAAC/E,cAAc,CAAC2E,KAAKiC,OAAAA,CAAQ,GAG7D,SAAS4C,gBACT,eAAe,GAAG/C,eAAemD,aAAAA,CAAc,KAAA,CAAK,GAExD,GACF;AAEJ,GAEaC,QAAQxK,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAQ,aAAA+J;AAAAxK,WAAAD,MAAgD;AAAA,IAAAU;AAAAA,IAAA,GAAA+J;AAAAA,EAAAA,IAAAzK,IAGOC,OAAAD,IAAAC,OAAAS,aAAAT,OAAAwK,UAAA/J,cAAAT,EAAA,CAAA,GAAAwK,QAAAxK,EAAA,CAAA;AAAA,MAAAI;AAAAJ,WAAAwK,SAIpEpK,KAAA,oBAAC,YAAA,EAAU,GAAwCoK,OAAK,GAAIxK,OAAAwK,OAAAxK,OAAAI,MAAAA,KAAAJ,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAS,eAAAT,SAAAI,MAFhEC,yBAAC,2BAAA,EACC,UAAA,oBAAC,eAAA,EAA2BI,aAC1BL,UAAAA,GAAAA,CACF,EAAA,CACF,GAA4BJ,OAAAS,aAAAT,OAAAI,IAAAJ,OAAAK,MAAAA,KAAAL,EAAA,CAAA,GAJ5BK;AAI4B;"}
|