{"version":3,"file":"admin-routes-33025e7a.mjs","sources":["../../../common/resources/client/admin/admin-sidebar.tsx","../../../common/resources/client/admin/admin-layout.tsx","../../../common/resources/client/admin/users/user-index-filters.ts","../../../common/resources/client/datatable/column-templates/name-with-avatar.tsx","../../../common/resources/client/datatable/requests/paginated-resources.ts","../../../common/resources/client/datatable/page/data-table-context.ts","../../../common/resources/client/http/backend-response/pagination-response.ts","../../../common/resources/client/datatable/data-table-pagination-footer.tsx","../../../common/resources/client/icons/material/FilterAlt.tsx","../../../common/resources/client/ui/accordion/accordtion-animation.ts","../../../common/resources/client/ui/accordion/accordion.tsx","../../../common/resources/client/datatable/filters/panels/boolean-filter-panel.tsx","../../../common/resources/client/datatable/filters/add-filter-dialog.tsx","../../../common/resources/client/datatable/filters/add-filter-button.tsx","../../../common/resources/client/datatable/data-table-header.tsx","../../../common/resources/client/datatable/selected-state-datatable-header.tsx","../../../common/resources/client/datatable/filters/filter-list/filter-list-skeleton.tsx","../../../common/resources/client/datatable/data-table.tsx","../../../common/resources/client/datatable/page/data-table-page.tsx","../../../common/resources/client/datatable/requests/delete-selected-rows.ts","../../../common/resources/client/datatable/page/delete-selected-items-action.tsx","../../../common/resources/client/datatable/page/data-table-emty-state-message.tsx","../../../common/resources/client/admin/roles/team.svg","../../../common/resources/client/datatable/data-table-add-item-button.tsx","../../../common/resources/client/datatable/requests/use-export-csv.ts","../../../common/resources/client/datatable/csv-export/csv-export-info-dialog.tsx","../../../common/resources/client/datatable/csv-export/data-table-export-csv-button.tsx","../../../common/resources/client/admin/users/requests/use-ban-user.ts","../../../common/resources/client/admin/users/ban-user-dialog.tsx","../../../common/resources/client/icons/material/PersonOff.tsx","../../../common/resources/client/admin/users/requests/use-unban-user.ts","../../../common/resources/client/admin/users/user-index.tsx","../../../common/resources/client/utils/array/chunk-array.ts","../../../common/resources/client/admin/appearance/config/default-appearance-config.ts","../../../common/resources/client/ui/forms/slider/base-slider.tsx","../../../common/resources/client/ui/forms/slider/use-slider.ts","../../../common/resources/client/ui/forms/slider/slider-thumb.tsx","../../../common/resources/client/ui/forms/slider/slider.tsx","../../../common/resources/client/admin/appearance/appearance-button.tsx","../../../common/resources/client/admin/appearance/sections/themes/color-icon.tsx","../../../common/resources/client/ui/color-picker/color-swatch.tsx","../../../common/resources/client/ui/color-picker/color-presets.ts","../../../common/resources/client/ui/color-picker/color-picker.tsx","../../../common/resources/client/ui/color-picker/color-picker-dialog.tsx","../../../resources/client/admin/appearance/sections/landing-page-section/landing-page-section-general.tsx","../../../common/resources/client/utils/string/uc-first.ts","../../../common/resources/client/auth/ui/permission-selector.tsx","../../../common/resources/client/admin/appearance/sections/menus/hooks/available-routes.ts","../../../common/resources/client/ui/icon-picker/icon-grid-style.ts","../../../common/resources/client/ui/icon-picker/icon-picker.tsx","../../../common/resources/client/ui/icon-picker/icon-picker-dialog.tsx","../../../common/resources/client/utils/hooks/use-previous.ts","../../../common/resources/client/admin/menus/menu-item-form.tsx","../../../resources/client/admin/appearance/sections/landing-page-section/landing-page-section-action-buttons.tsx","../../../resources/client/admin/appearance/sections/landing-page-section/landing-page-section-primary-features.tsx","../../../resources/client/admin/appearance/sections/landing-page-section/landing-page-section-secondary-features.tsx","../../../resources/client/admin/appearance/app-appearance-config.tsx","../../../common/resources/client/admin/appearance/config/merged-appearance-config.ts","../../../common/resources/client/admin/appearance/appearance-store.ts","../../../common/resources/client/admin/appearance/requests/save-appearance-changes.ts","../../../common/resources/client/admin/appearance/requests/appearance-values.ts","../../../common/resources/client/admin/appearance/section-header.tsx","../../../common/resources/client/admin/appearance/appearance-layout.tsx","../../../common/resources/client/admin/appearance/sections/menus/menu-list.tsx","../../../common/resources/client/admin/appearance/sections/menus/add-menu-item-dialog.tsx","../../../common/resources/client/icons/material/DragIndicator.tsx","../../../common/resources/client/admin/appearance/sections/menus/dropdown-menu.svg","../../../common/resources/client/utils/array/move-item-in-array.ts","../../../common/resources/client/utils/array/move-item-in-new-array.ts","../../../common/resources/client/ui/interactions/dnd/use-sortable.ts","../../../common/resources/client/admin/appearance/sections/menus/menu-editor.tsx","../../../common/resources/client/admin/appearance/sections/menus/menu-item-editor.tsx","../../../common/resources/client/admin/appearance/sections/general-section.tsx","../../../common/resources/client/utils/string/random-number.ts","../../../common/resources/client/admin/appearance/sections/themes/theme-list.tsx","../../../common/resources/client/ace-editor/ace-dialog.tsx","../../../common/resources/client/admin/appearance/sections/seo/use-seo-tags.ts","../../../common/resources/client/admin/appearance/sections/seo/use-update-seo-tags.ts","../../../common/resources/client/admin/appearance/sections/seo/seo-section.tsx","../../../common/resources/client/admin/appearance/sections/code/custom-code-section.tsx","../../../common/resources/client/admin/custom-pages/articles.svg","../../../common/resources/client/admin/custom-pages/custom-page-datatable-filters.tsx","../../../common/resources/client/admin/custom-pages/custom-page-datatable-columns.tsx","../../../common/resources/client/admin/custom-pages/custom-page-datable-page.tsx","../../../resources/client/admin/settings/app-settings-nav-config.ts","../../../common/resources/client/admin/settings/settings-nav-config.ts","../../../common/resources/client/admin/settings/settings-layout.tsx","../../../common/resources/client/admin/settings/requests/use-admin-settings.ts","../../../common/resources/client/admin/settings/generate-sitemap.ts","../../../common/resources/client/admin/settings/requests/update-admin-settings.ts","../../../common/resources/client/admin/settings/settings-panel.tsx","../../../common/resources/client/admin/settings/settings-separator.tsx","../../../common/resources/client/admin/settings/learn-more-link.tsx","../../../common/resources/client/admin/settings/pages/general-settings.tsx","../../../common/resources/client/ui/themes/utils/color-to-theme-value.ts","../../../common/resources/client/ui/themes/utils/theme-value-to-hex.ts","../../../common/resources/client/icons/material/Tune.tsx","../../../common/resources/client/admin/appearance/sections/themes/theme-settings-dialog-trigger.tsx","../../../common/resources/client/icons/material/RestartAlt.tsx","../../../common/resources/client/admin/appearance/sections/themes/theme-more-options-button.tsx","../../../common/resources/client/admin/appearance/sections/themes/theme-editor.tsx","../../../resources/client/admin/settings/drive-settings.tsx","../../../resources/client/admin/settings/app-settings-routes.tsx","../../../common/resources/client/admin/settings/settings-error-group.tsx","../../../common/resources/client/admin/settings/json-chip-field.tsx","../../../common/resources/client/ui/tabs/tabs-context.tsx","../../../common/resources/client/ui/tabs/tabs.tsx","../../../common/resources/client/ui/tabs/tab-line.tsx","../../../common/resources/client/ui/tabs/tab-list.tsx","../../../common/resources/client/ui/tabs/tab.tsx","../../../common/resources/client/ui/tabs/tab-panels.tsx","../../../common/resources/client/admin/settings/pages/subscription-settings.tsx","../../../common/resources/client/admin/settings/pages/localization-settings.tsx","../../../common/resources/client/admin/settings/pages/authentication-settings.tsx","../../../common/resources/client/ui/section-helper.tsx","../../../common/resources/client/admin/settings/pages/uploading-settings/max-server-upload-size.ts","../../../common/resources/client/uploads/utils/space-units.ts","../../../common/resources/client/uploads/utils/convert-to-bytes.ts","../../../common/resources/client/ui/forms/input-field/file-size-field.tsx","../../../common/resources/client/admin/settings/pages/uploading-settings/use-upload-s3-cors.ts","../../../common/resources/client/admin/settings/pages/uploading-settings/dropbox-form/use-generate-dropbox-refresh-token.ts","../../../common/resources/client/admin/settings/pages/uploading-settings/dropbox-form/dropbox-form.tsx","../../../common/resources/client/admin/settings/pages/uploading-settings/uploading-settings.tsx","../../../common/resources/client/admin/settings/pages/mail-settings/mailgun-credentials.tsx","../../../common/resources/client/admin/settings/pages/mail-settings/smtp-credentials.tsx","../../../common/resources/client/admin/settings/pages/mail-settings/ses-credentials.tsx","../../../common/resources/client/admin/settings/pages/mail-settings/postmark-credentials.tsx","../../../common/resources/client/admin/settings/pages/mail-settings/gmail-icon.tsx","../../../common/resources/client/admin/settings/pages/mail-settings/gmail-credentials.tsx","../../../common/resources/client/admin/settings/pages/mail-settings/outgoing-mail-group.tsx","../../../common/resources/client/admin/settings/pages/mail-settings/incoming-mail-group.tsx","../../../common/resources/client/admin/settings/pages/mail-settings/mail-settings.tsx","../../../common/resources/client/admin/settings/pages/cache-settings/clear-cache.ts","../../../common/resources/client/admin/settings/pages/cache-settings/cache-settings.tsx","../../../common/resources/client/admin/settings/pages/logging-settings.tsx","../../../common/resources/client/admin/settings/pages/queue-settings.tsx","../../../common/resources/client/admin/settings/pages/recaptcha-settings.tsx","../../../common/resources/client/ui/forms/input-field/file-field.tsx","../../../common/resources/client/admin/settings/pages/reports-settings.tsx","../../../common/resources/client/admin/users/requests/update-user.ts","../../../common/resources/client/utils/hooks/sticky-sentinel.ts","../../../common/resources/client/admin/crupdate-resource-layout.tsx","../../../common/resources/client/admin/users/crupdate-user-form.tsx","../../../common/resources/client/icons/material/Report.tsx","../../../common/resources/client/admin/users/update-user-page.tsx","../../../common/resources/client/admin/users/requests/create-user.ts","../../../common/resources/client/admin/users/create-user-page.tsx","../../../common/resources/client/icons/material/Translate.tsx","../../../common/resources/client/admin/translations/use-locale-with-lines.ts","../../../common/resources/client/admin/translations/update-localization.ts","../../../common/resources/client/admin/translations/update-localization-dialog.tsx","../../../common/resources/client/admin/translations/create-localization.ts","../../../common/resources/client/admin/translations/create-localization-dialog.tsx","../../../common/resources/client/admin/translations/around-the-world.svg","../../../common/resources/client/admin/translations/localization-index.tsx","../../../common/resources/client/admin/translations/new-translation-dialog.tsx","../../../common/resources/client/admin/translations/translation-management-page.tsx","../../../common/resources/client/ui/overlays/dialog/image-zoom-dialog.tsx","../../../common/resources/client/admin/ads/ads-page.tsx","../../../common/resources/client/admin/appearance/section-list.tsx","../../../common/resources/client/admin/roles/role-index-page-filters.ts","../../../common/resources/client/admin/roles/roles-index-page.tsx","../../../common/resources/client/admin/roles/requests/use-role.ts","../../../common/resources/client/admin/roles/requests/use-update-role.ts","../../../common/resources/client/admin/roles/crupdate-role-page/crupdate-role-settings-panel.tsx","../../../common/resources/client/users/select-user-dialog.tsx","../../../common/resources/client/admin/roles/requests/use-remove-users-from-role.ts","../../../common/resources/client/admin/roles/requests/use-add-users-to-role.ts","../../../common/resources/client/admin/roles/crupdate-role-page/edit-role-page-users-panel.tsx","../../../common/resources/client/admin/roles/crupdate-role-page/edit-role-page.tsx","../../../common/resources/client/admin/roles/requests/user-create-role.ts","../../../common/resources/client/admin/roles/crupdate-role-page/create-role-page.tsx","../../../common/resources/client/admin/tags/tag-index-page-filters.ts","../../../common/resources/client/admin/tags/software-engineer.svg","../../../common/resources/client/admin/tags/crupdate-tag-form.tsx","../../../common/resources/client/admin/tags/requests/use-create-new-tag.ts","../../../common/resources/client/admin/tags/create-tag-dialog.tsx","../../../common/resources/client/admin/tags/requests/use-update-tag.ts","../../../common/resources/client/admin/tags/update-tag-dialog.tsx","../../../common/resources/client/admin/tags/tag-index-page.tsx","../../../common/resources/client/uploads/formatted-bytes.tsx","../../../common/resources/client/icons/material/Visibility.tsx","../../../common/resources/client/admin/file-entry/upload.svg","../../../common/resources/client/admin/file-entry/file-entry-index-page.tsx","../../../common/resources/client/admin/subscriptions/subscription-index-page-filters.ts","../../../common/resources/client/admin/subscriptions/subscriptions.svg","../../../common/resources/client/admin/subscriptions/requests/use-update-subscription.ts","../../../common/resources/client/admin/subscriptions/crupdate-subscription-form.tsx","../../../common/resources/client/admin/subscriptions/update-subscription-dialog.tsx","../../../common/resources/client/admin/subscriptions/requests/use-create-subscription.ts","../../../common/resources/client/admin/subscriptions/create-subscription-dialog.tsx","../../../common/resources/client/icons/material/Pause.tsx","../../../common/resources/client/icons/material/PlayArrow.tsx","../../../common/resources/client/admin/subscriptions/subscriptions-index-page.tsx","../../../common/resources/client/icons/material/Sync.tsx","../../../common/resources/client/admin/plans/requests/use-sync-products.ts","../../../common/resources/client/admin/plans/requests/use-delete-product.ts","../../../common/resources/client/admin/plans/plans-index-page-filters.ts","../../../common/resources/client/admin/plans/plans-index-page.tsx","../../../common/resources/client/admin/plans/requests/use-product.ts","../../../common/resources/client/admin/plans/crupdate-plan-page/billing-period-presets.ts","../../../common/resources/client/admin/plans/crupdate-plan-page/price-form.tsx","../../../common/resources/client/admin/plans/crupdate-plan-page/crupdate-plan-form.tsx","../../../common/resources/client/admin/plans/requests/use-update-product.ts","../../../common/resources/client/admin/plans/crupdate-plan-page/edit-plan-page.tsx","../../../common/resources/client/admin/plans/requests/use-create-product.ts","../../../common/resources/client/admin/plans/crupdate-plan-page/create-plan-page.tsx","../../../common/resources/client/admin/settings/pages/gdpr-settings.tsx","../../../resources/client/admin/app-admin-routes.tsx","../../../common/resources/client/admin/custom-pages/requests/use-update-custom-page.ts","../../../common/resources/client/article-editor/article-editor-title.tsx","../../../common/resources/client/utils/string/slugify-string.ts","../../../common/resources/client/ui/slug-editor.tsx","../../../common/resources/client/icons/material/Undo.tsx","../../../common/resources/client/icons/material/Redo.tsx","../../../common/resources/client/text-editor/menubar/history-buttons.tsx","../../../common/resources/client/icons/material/Code.tsx","../../../common/resources/client/text-editor/menubar/mode-button.tsx","../../../common/resources/client/text-editor/menubar/divider.tsx","../../../common/resources/client/icons/material/FormatBold.tsx","../../../common/resources/client/icons/material/FormatItalic.tsx","../../../common/resources/client/icons/material/FormatUnderlined.tsx","../../../common/resources/client/text-editor/menubar/font-style-buttons.tsx","../../../common/resources/client/icons/material/FormatListBulleted.tsx","../../../common/resources/client/icons/material/FormatListNumbered.tsx","../../../common/resources/client/text-editor/menubar/list-buttons.tsx","../../../common/resources/client/text-editor/insert-link-into-text-editor.ts","../../../common/resources/client/text-editor/menubar/link-button.tsx","../../../common/resources/client/icons/material/Image.tsx","../../../common/resources/client/text-editor/menubar/image-button.tsx","../../../common/resources/client/icons/material/FormatClear.tsx","../../../common/resources/client/text-editor/menubar/clear-format-button.tsx","../../../common/resources/client/icons/material/HorizontalRule.tsx","../../../common/resources/client/icons/material/PriorityHigh.tsx","../../../common/resources/client/icons/material/Note.tsx","../../../common/resources/client/icons/material/SmartDisplay.tsx","../../../common/resources/client/text-editor/menubar/insert-menu-trigger.tsx","../../../common/resources/client/ui/keyboard/keyboard.tsx","../../../common/resources/client/text-editor/menubar/format-menu-trigger.tsx","../../../common/resources/client/icons/material/FormatColorText.tsx","../../../common/resources/client/icons/material/FormatColorFill.tsx","../../../common/resources/client/text-editor/menubar/color-buttons.tsx","../../../common/resources/client/icons/material/FormatAlignLeft.tsx","../../../common/resources/client/icons/material/FormatAlignCenter.tsx","../../../common/resources/client/icons/material/FormatAlignRight.tsx","../../../common/resources/client/icons/material/FormatAlignJustify.tsx","../../../common/resources/client/text-editor/menubar/align-buttons.tsx","../../../common/resources/client/icons/material/FormatIndentDecrease.tsx","../../../common/resources/client/icons/material/FormatIndentIncrease.tsx","../../../common/resources/client/text-editor/menubar/indent-buttons.tsx","../../../common/resources/client/text-editor/menubar/code-block-menu-trigger.tsx","../../../common/resources/client/icons/material/UnfoldLess.tsx","../../../common/resources/client/article-editor/article-body-editor-menubar.tsx","../../../common/resources/client/article-editor/article-editor-sticky-header.tsx","../../../common/resources/client/admin/custom-pages/edit-custom-page.tsx","../../../common/resources/client/admin/custom-pages/requests/use-create-custom-page.ts","../../../common/resources/client/admin/custom-pages/create-custom-page.tsx","../../../common/resources/client/admin/admin-routes.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport React from 'react';\nimport {CustomMenu} from '../menus/custom-menu';\nimport {Trans} from '../i18n/trans';\nimport {useSettings} from '../core/settings/use-settings';\n\ninterface Props {\n className?: string;\n isCompactMode?: boolean;\n}\nexport function AdminSidebar({className, isCompactMode}: Props) {\n const {version} = useSettings();\n return (\n \n to === '/admin'}\n menu=\"admin-sidebar\"\n orientation=\"vertical\"\n onlyShowIcons={isCompactMode}\n itemClassName={({isActive}) =>\n clsx(\n 'block w-full rounded py-12 px-16 border-l-4',\n isActive\n ? 'bg-primary/hover border-l-primary'\n : 'border-l-transparent hover:bg-hover'\n )\n }\n gap=\"gap-8\"\n />\n {!isCompactMode && (\n
\n \n
\n )}\n \n );\n}\n","import {Outlet} from 'react-router-dom';\nimport {AdminSidebar} from './admin-sidebar';\nimport {DashboardLayout} from '../ui/layout/dashboard-layout';\nimport {DashboardContent} from '../ui/layout/dashboard-content';\nimport {DashboardSidenav} from '../ui/layout/dashboard-sidenav';\nimport {DashboardNavbar} from '../ui/layout/dashboard-navbar';\n\nexport function AdminLayout() {\n return (\n \n \n \n \n \n \n
\n \n
\n
\n
\n );\n}\n","import {\n BackendFilter,\n FilterControlType,\n FilterOperator,\n} from '../../datatable/filters/backend-filter';\nimport {\n createdAtFilter,\n updatedAtFilter,\n} from '../../datatable/filters/timestamp-filters';\nimport {message} from '../../i18n/message';\n\nexport const UserIndexFilters: BackendFilter[] = [\n {\n key: 'email_verified_at',\n label: message('Email'),\n description: message('Email verification status'),\n defaultOperator: FilterOperator.ne,\n control: {\n type: FilterControlType.Select,\n defaultValue: '01',\n options: [\n {\n key: '01',\n label: message('is confirmed'),\n value: {value: null, operator: FilterOperator.ne},\n },\n {\n key: '02',\n label: message('is not confirmed'),\n value: {value: null, operator: FilterOperator.eq},\n },\n ],\n },\n },\n createdAtFilter({\n description: message('Date user registered or was created'),\n }),\n updatedAtFilter({\n description: message('Date user was last updated'),\n }),\n {\n key: 'subscriptions',\n label: message('Subscription'),\n description: message('Whether user is subscribed or not'),\n defaultOperator: FilterOperator.eq,\n control: {\n type: FilterControlType.Select,\n defaultValue: '01',\n options: [\n {\n key: '01',\n label: message('is subscribed'),\n value: {value: '*', operator: FilterOperator.has},\n },\n {\n key: '02',\n label: message('is not subscribed'),\n value: {value: '*', operator: FilterOperator.doesntHave},\n },\n ],\n },\n },\n];\n","import React, {ReactNode} from 'react';\nimport {Avatar, AvatarProps} from '../../ui/images/avatar';\nimport {Skeleton} from '@common/ui/skeleton/skeleton';\nimport clsx from 'clsx';\n\ninterface Props {\n image?: string;\n label: ReactNode;\n description?: ReactNode;\n labelClassName?: string;\n avatarSize?: AvatarProps['size'];\n}\nexport function NameWithAvatar({\n image,\n label,\n description,\n labelClassName,\n avatarSize = 'md',\n}: Props) {\n return (\n
\n {image && (\n \n )}\n
\n \n {label}\n
\n {description && (\n
\n {description}\n
\n )}\n
\n \n );\n}\n\nexport function NameWithAvatarPlaceholder({\n labelClassName,\n showDescription,\n}: Partial & {\n showDescription?: boolean;\n}) {\n return (\n
\n \n
\n
\n \n
\n {showDescription && (\n
{}
\n )}\n
\n
\n );\n}\n","import {\n keepPreviousData,\n useQuery,\n UseQueryOptions,\n} from '@tanstack/react-query';\nimport {PaginatedBackendResponse} from '../../http/backend-response/pagination-response';\nimport {apiClient} from '../../http/query-client';\n\nexport interface GetDatatableDataParams {\n orderBy?: string;\n orderDir?: 'asc' | 'desc';\n filters?: string | null;\n query?: string;\n with?: string;\n perPage?: number | string | null;\n page?: number | string;\n [key: string]: string | number | boolean | undefined | null;\n}\n\nexport const DatatableDataQueryKey = (\n endpoint: string,\n params?: GetDatatableDataParams | Record,\n) => {\n // split endpoint by slash, so we can clear cache from the root later,\n // for example, 'link-group' will clear 'link-group/1/links' endpoint\n const key: (string | GetDatatableDataParams)[] = endpoint.split('/');\n if (params) {\n key.push(params);\n }\n return key;\n};\n\nexport function useDatatableData(\n endpoint: string,\n params: GetDatatableDataParams,\n options?: Omit<\n UseQueryOptions<\n PaginatedBackendResponse,\n unknown,\n PaginatedBackendResponse,\n any[]\n >,\n 'queryKey' | 'queryFn'\n >,\n onLoad?: (data: PaginatedBackendResponse) => void,\n) {\n return useQuery({\n queryKey: DatatableDataQueryKey(endpoint, params),\n queryFn: () => paginate(endpoint, params, onLoad),\n placeholderData: keepPreviousData,\n ...options,\n });\n}\n\nasync function paginate(\n endpoint: string,\n params: GetDatatableDataParams,\n onLoad?: (data: PaginatedBackendResponse) => void,\n): Promise> {\n const response = await apiClient\n .get(endpoint, {params})\n .then(response => response.data);\n onLoad?.(response);\n return response;\n}\n","import React, {useContext} from 'react';\nimport {GetDatatableDataParams} from '../requests/paginated-resources';\nimport {UseQueryResult} from '@tanstack/react-query';\nimport {PaginatedBackendResponse} from '../../http/backend-response/pagination-response';\n\nexport interface DataTableContextValue {\n selectedRows: (string | number)[];\n setSelectedRows: (keys: (string | number)[]) => void;\n endpoint: string;\n params: GetDatatableDataParams;\n setParams: (value: GetDatatableDataParams) => void;\n query: UseQueryResult, unknown>;\n}\n\nexport const DataTableContext = React.createContext(\n null!\n);\n\nexport function useDataTable() {\n return useContext(DataTableContext);\n}\n","import {BackendResponse} from './backend-response';\n\nexport interface LengthAwarePaginationResponse {\n data: T[];\n from: number;\n to: number;\n total: number;\n per_page: number;\n current_page: number;\n last_page: number;\n next_page: number;\n prev_page: number;\n}\n\nexport interface SimplePaginationResponse {\n data: T[];\n from: number;\n to: number;\n per_page: number;\n current_page: number;\n}\n\ninterface CursorPaginationResponse {\n data: T[];\n next_cursor: string | null;\n per_page: number;\n prev_cursor: string | null;\n}\n\nexport type PaginationResponse =\n | LengthAwarePaginationResponse\n | SimplePaginationResponse\n | CursorPaginationResponse;\n\nexport const EMPTY_PAGINATION_RESPONSE = {\n pagination: {data: [], from: 0, to: 0, per_page: 15, current_page: 1},\n};\n\nexport interface PaginatedBackendResponse extends BackendResponse {\n pagination: PaginationResponse;\n}\n\nexport function hasNextPage(pagination: PaginationResponse): boolean {\n if ('next_cursor' in pagination) {\n return pagination.next_cursor != null;\n }\n\n if ('last_page' in pagination) {\n return pagination.current_page < pagination.last_page;\n }\n\n return (\n pagination.data.length > 0 && pagination.data.length >= pagination.per_page\n );\n}\n","import {UseQueryResult} from '@tanstack/react-query';\nimport {\n hasNextPage,\n LengthAwarePaginationResponse,\n PaginatedBackendResponse,\n} from '../http/backend-response/pagination-response';\nimport {useNumberFormatter} from '../i18n/use-number-formatter';\nimport {Select} from '../ui/forms/select/select';\nimport {Trans} from '../i18n/trans';\nimport {Item} from '../ui/forms/listbox/item';\nimport {IconButton} from '../ui/buttons/icon-button';\nimport {KeyboardArrowLeftIcon} from '../icons/material/KeyboardArrowLeft';\nimport {KeyboardArrowRightIcon} from '../icons/material/KeyboardArrowRight';\nimport React from 'react';\nimport {useIsMobileMediaQuery} from '../utils/hooks/is-mobile-media-query';\nimport clsx from 'clsx';\n\nconst defaultPerPage = 15;\nconst perPageOptions = [{key: 10}, {key: 15}, {key: 20}, {key: 50}, {key: 100}];\n\ntype DataTablePaginationFooterProps = {\n query: UseQueryResult, unknown>;\n onPerPageChange?: (perPage: number) => void;\n onPageChange?: (page: number) => void;\n className?: string;\n};\nexport function DataTablePaginationFooter({\n query,\n onPerPageChange,\n onPageChange,\n className,\n}: DataTablePaginationFooterProps) {\n const isMobile = useIsMobileMediaQuery();\n const numberFormatter = useNumberFormatter();\n const pagination = query.data\n ?.pagination as LengthAwarePaginationResponse;\n\n if (!pagination) return null;\n\n const perPageSelect = onPerPageChange ? (\n }\n selectedValue={pagination.per_page || defaultPerPage}\n onSelectionChange={value => onPerPageChange(value as number)}\n >\n {perPageOptions.map(option => (\n \n {option.key}\n \n ))}\n \n ) : null;\n\n return (\n \n {!isMobile && perPageSelect}\n {pagination.from && pagination.to && 'total' in pagination && (\n
\n \n
\n )}\n
\n {\n onPageChange?.(pagination?.current_page - 1);\n }}\n >\n \n \n {\n onPageChange?.(pagination?.current_page + 1);\n }}\n >\n \n \n
\n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FilterAltIcon = createSvgIcon(\n \n, 'FilterAltOutlined');\n","export const AccordionAnimation = {\n variants: {\n open: {\n height: 'auto',\n visibility: 'visible',\n transitionEnd: {\n overflow: 'auto',\n },\n },\n closed: {\n height: 0,\n overflow: 'hidden',\n transitionEnd: {\n visibility: 'hidden',\n },\n },\n },\n transition: {type: 'tween', duration: 0.2},\n} as const;\n","import React, {\n cloneElement,\n isValidElement,\n Key,\n ReactElement,\n ReactNode,\n useId,\n useRef,\n} from 'react';\nimport clsx from 'clsx';\nimport {AnimatePresence, m} from 'framer-motion';\nimport {useControlledState} from '@react-stately/utils';\nimport {FocusScope, useFocusManager} from '@react-aria/focus';\nimport {KeyboardArrowDownIcon} from '../../icons/material/KeyboardArrowDown';\nimport {AccordionAnimation} from '@common/ui/accordion/accordtion-animation';\n\ntype Props = {\n variant?: 'outline' | 'default' | 'minimal';\n children?: ReactNode;\n mode?: 'single' | 'multiple';\n expandedValues?: Key[];\n defaultExpandedValues?: Key[];\n onExpandedChange?: (key: Key[]) => void;\n className?: string;\n isLazy?: boolean;\n};\nexport const Accordion = React.forwardRef(\n (\n {\n variant = 'default',\n mode = 'single',\n children,\n className,\n isLazy,\n ...other\n },\n ref,\n ) => {\n const [expandedValues, setExpandedValues] = useControlledState(\n other.expandedValues,\n other.defaultExpandedValues || [],\n other.onExpandedChange,\n );\n\n return (\n \n \n \n {React.Children.map(children, (child, index) => {\n if (!isValidElement(child)) return null;\n return cloneElement(child, {\n key: child.key || index,\n value: child.props.value || index,\n mode,\n variant,\n expandedValues,\n setExpandedValues,\n isLazy,\n });\n })}\n \n \n \n );\n },\n);\n\ninterface AccordionItemProps {\n children: ReactNode;\n disabled?: boolean;\n label: ReactNode;\n description?: ReactNode;\n value?: Key;\n bodyClassName?: string;\n labelClassName?: string;\n buttonPadding?: string;\n chevronPosition?: 'left' | 'right';\n startIcon?: ReactElement;\n endAppend?: ReactElement;\n}\ninterface ClonedItemProps extends AccordionItemProps {\n variant?: 'outline' | 'default' | 'minimal';\n expandedValues: Key[];\n setExpandedValues: (keys: Key[]) => void;\n mode: 'single' | 'multiple';\n value: Key;\n isLazy?: boolean;\n}\nexport function AccordionItem({\n children,\n label,\n disabled,\n bodyClassName,\n labelClassName,\n buttonPadding = 'py-10 pl-14 pr-10',\n startIcon,\n description,\n endAppend,\n chevronPosition = 'right',\n ...other\n}: AccordionItemProps) {\n const {expandedValues, setExpandedValues, variant, value, mode, isLazy} =\n other as ClonedItemProps;\n const ref = useRef(null);\n const isExpanded = !disabled && expandedValues.includes(value);\n const wasExpandedOnce = useRef(false);\n if (isExpanded) {\n wasExpandedOnce.current = true;\n }\n const focusManager = useFocusManager();\n const id = useId();\n const buttonId = `${id}-button`;\n const panelId = `${id}-panel`;\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n focusManager?.focusNext();\n break;\n case 'ArrowUp':\n focusManager?.focusPrevious();\n break;\n case 'Home':\n focusManager?.focusFirst();\n break;\n case 'End':\n focusManager?.focusLast();\n break;\n }\n };\n\n const toggle = () => {\n const i = expandedValues.indexOf(value);\n if (i > -1) {\n const newKeys = [...expandedValues];\n newKeys.splice(i, 1);\n setExpandedValues(newKeys);\n } else if (mode === 'single') {\n setExpandedValues([value]);\n } else {\n setExpandedValues([...expandedValues, value]);\n }\n };\n\n const chevron = (\n
\n \n
\n );\n\n return (\n \n \n {\n if (!disabled) {\n toggle();\n }\n }}\n className={clsx(\n 'flex flex-auto items-center gap-10 text-left outline-none hover:bg-hover focus-visible:bg-primary/focus',\n buttonPadding,\n )}\n >\n {chevronPosition === 'left' && chevron}\n {startIcon &&\n cloneElement(startIcon, {\n size: 'md',\n className: clsx(\n startIcon.props.className,\n disabled ? 'text-disabled' : 'text-muted',\n ),\n })}\n
\n
\n {label}\n
\n {description && (\n
{description}
\n )}\n
\n {chevronPosition === 'right' && chevron}\n \n {endAppend && (\n
\n {endAppend}\n
\n )}\n \n \n
\n {!isLazy || wasExpandedOnce ? children : null}\n
\n \n \n );\n}\n","import {FilterPanelProps} from './filter-panel-props';\nimport {FilterBooleanToggleControl} from '@common/datatable/filters/backend-filter';\n\nexport function BooleanFilterPanel({\n filter,\n}: FilterPanelProps) {\n // Toggling accordion in the dialog will already apply boolean filter, no need for any extra fields here\n return null;\n}\n","import {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {\n BackendFilter,\n CustomFilterControl,\n DatePickerFilterControl,\n FilterBooleanToggleControl,\n FilterChipFieldControl,\n FilterControlType,\n FilterOperator,\n FilterSelectControl,\n FilterSelectModelControl,\n FilterTextInputControl,\n} from './backend-filter';\nimport {Trans} from '../../i18n/trans';\nimport {Key, useState} from 'react';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {useBackendFilterUrlParams} from './backend-filter-url-params';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {Accordion, AccordionItem} from '../../ui/accordion/accordion';\nimport {Button} from '../../ui/buttons/button';\nimport {useForm} from 'react-hook-form';\nimport {Form} from '../../ui/forms/form';\nimport {Checkbox} from '../../ui/forms/toggle/checkbox';\nimport {SelectFilterPanel} from './panels/select-filter-panel';\nimport {DateRangeFilterPanel} from './panels/date-range-filter-panel';\nimport {NormalizedModelFilterPanel} from './panels/normalized-model-filter-panel';\nimport {InputFilterPanel} from './panels/input-filter-panel';\nimport {BooleanFilterPanel} from './panels/boolean-filter-panel';\nimport clsx from 'clsx';\nimport {ChipFieldFilterPanel} from '@common/datatable/filters/panels/chip-field-filter-panel';\n\nexport interface FilterItemFormValue {\n value: T;\n operator?: FilterOperator;\n}\n\ninterface AddFilterDialogProps {\n filters: BackendFilter[];\n}\nexport function AddFilterDialog({filters}: AddFilterDialogProps) {\n const {decodedFilters} = useBackendFilterUrlParams(filters);\n const {formId} = useDialogContext();\n\n // expand currently active filters\n const [expandedFilters, setExpandedFilters] = useState(() => {\n return decodedFilters.map(f => f.key);\n });\n\n const clearButton = (\n {\n setExpandedFilters([]);\n }}\n >\n \n \n );\n\n const applyButton = (\n \n \n \n );\n\n return (\n \n \n \n \n \n \n \n \n );\n}\n\ninterface FilterListProps {\n filters: BackendFilter[];\n expandedFilters: Key[];\n setExpandedFilters: (value: Key[]) => void;\n}\nfunction FilterList({\n filters,\n expandedFilters,\n setExpandedFilters,\n}: FilterListProps) {\n const {decodedFilters, replaceAll} = useBackendFilterUrlParams(filters);\n\n // either get value and operator from url params if filter is active, or get defaults from filter config\n const defaultValues: Record = {};\n filters.forEach(filter => {\n const appliedFilter = decodedFilters.find(f => f.key === filter.key);\n defaultValues[filter.key] =\n appliedFilter?.value !== undefined\n ? // there might be some extra keys set on filter besides\n // \"value\" and \"operator\", so add the whole object to form\n appliedFilter\n : {\n value: filter.control.defaultValue,\n operator: filter.defaultOperator,\n };\n });\n const form = useForm>({defaultValues});\n const {formId, close} = useDialogContext();\n\n return (\n {\n const filterValue = Object.entries(formValue)\n // remove undefined and non-expanded filters, so \"clear\" button will correctly remove active filters\n .filter(\n ([key, fieldValue]) =>\n expandedFilters.includes(key) && fieldValue !== undefined\n )\n .map(([key, fieldValue]) => ({\n key,\n ...fieldValue, // value and operator from form\n }));\n\n replaceAll(filterValue);\n close();\n }}\n >\n \n {filters.map(filter => (\n \n }\n key={filter.key}\n value={filter.key}\n label={}\n bodyClassName=\"max-h-288 overflow-y-auto compact-scrollbar\"\n >\n {filter.description && (\n \n \n \n )}\n \n \n ))}\n \n \n );\n}\n\ninterface ActiveFilterPanelProps {\n filter: BackendFilter;\n}\nexport function AddFilterDialogPanel({filter}: ActiveFilterPanelProps) {\n switch (filter.control.type) {\n case FilterControlType.Select:\n return (\n }\n />\n );\n case FilterControlType.ChipField:\n return (\n }\n />\n );\n case FilterControlType.DateRangePicker:\n return (\n }\n />\n );\n case FilterControlType.SelectModel:\n return (\n }\n />\n );\n case FilterControlType.Input:\n return (\n }\n />\n );\n case FilterControlType.BooleanToggle:\n return (\n }\n />\n );\n case 'custom':\n const CustomComponent = filter.control.panel;\n return (\n }\n />\n );\n default:\n return null;\n }\n}\n","import {Button, ButtonProps} from '../../ui/buttons/button';\nimport {BackendFilter} from './backend-filter';\nimport {FilterAltIcon} from '../../icons/material/FilterAlt';\nimport {Trans} from '../../i18n/trans';\nimport {useIsMobileMediaQuery} from '../../utils/hooks/is-mobile-media-query';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {AddFilterDialog} from './add-filter-dialog';\nimport {ReactElement} from 'react';\n\ninterface AddFilterButtonProps {\n filters: BackendFilter[];\n icon?: ReactElement;\n color?: ButtonProps['color'];\n variant?: ButtonProps['variant'];\n disabled?: boolean;\n size?: ButtonProps['size'];\n className?: string;\n}\nexport function AddFilterButton({\n filters,\n icon = ,\n color = 'primary',\n variant = 'outline',\n size = 'sm',\n disabled,\n className,\n}: AddFilterButtonProps) {\n const isMobile = useIsMobileMediaQuery();\n\n const desktopButton = (\n \n \n \n );\n\n const mobileButton = (\n \n {icon}\n \n );\n\n return (\n \n {isMobile ? mobileButton : desktopButton}\n \n \n );\n}\n","import React, {ComponentPropsWithoutRef, ReactNode} from 'react';\nimport {BackendFilter} from './filters/backend-filter';\nimport {useTrans} from '../i18n/use-trans';\nimport {TextField} from '../ui/forms/input-field/text-field/text-field';\nimport {SearchIcon} from '../icons/material/Search';\nimport {AddFilterButton} from './filters/add-filter-button';\nimport {MessageDescriptor} from '@common/i18n/message-descriptor';\nimport {message} from '@common/i18n/message';\n\ninterface Props {\n actions?: ReactNode;\n filters?: BackendFilter[];\n filtersLoading?: boolean;\n searchPlaceholder?: MessageDescriptor;\n searchValue?: string;\n onSearchChange: (value: string) => void;\n}\nexport function DataTableHeader({\n actions,\n filters,\n filtersLoading,\n searchPlaceholder = message('Type to search...'),\n searchValue = '',\n onSearchChange,\n}: Props) {\n const {trans} = useTrans();\n return (\n \n }\n value={searchValue}\n onChange={e => {\n onSearchChange(e.target.value);\n }}\n />\n {filters && (\n \n )}\n {actions}\n \n );\n}\n\ninterface AnimatedHeaderProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\nexport function HeaderLayout({children, ...domProps}: AnimatedHeaderProps) {\n return (\n \n {children}\n \n );\n}\n","import {Trans} from '@common/i18n/trans';\nimport React, {ReactNode} from 'react';\nimport {HeaderLayout} from '@common/datatable/data-table-header';\n\ninterface Props {\n actions?: ReactNode;\n selectedItemsCount: number;\n}\nexport function SelectedStateDatatableHeader({\n actions,\n selectedItemsCount,\n}: Props) {\n return (\n \n
\n \n
\n {actions}\n
\n );\n}\n","import {m} from 'framer-motion';\nimport {opacityAnimation} from '@common/ui/animation/opacity-animation';\nimport {Skeleton} from '@common/ui/skeleton/skeleton';\nimport React from 'react';\n\nexport function FilterListSkeleton() {\n return (\n \n \n \n \n \n );\n}\n","import React, {\n cloneElement,\n ComponentProps,\n ReactElement,\n ReactNode,\n useState,\n} from 'react';\nimport {TableDataItem} from '../ui/tables/types/table-data-item';\nimport {BackendFilter} from './filters/backend-filter';\nimport {MessageDescriptor} from '../i18n/message-descriptor';\nimport {ColumnConfig} from './column-config';\nimport {useTrans} from '../i18n/use-trans';\nimport {useBackendFilterUrlParams} from './filters/backend-filter-url-params';\nimport {\n GetDatatableDataParams,\n useDatatableData,\n} from './requests/paginated-resources';\nimport {DataTableContext} from './page/data-table-context';\nimport {AnimatePresence, m} from 'framer-motion';\nimport {ProgressBar} from '../ui/progress/progress-bar';\nimport {Table, TableProps} from '../ui/tables/table';\nimport {DataTablePaginationFooter} from './data-table-pagination-footer';\nimport {DataTableHeader} from './data-table-header';\nimport {FilterList} from './filters/filter-list/filter-list';\nimport {SelectedStateDatatableHeader} from '@common/datatable/selected-state-datatable-header';\nimport clsx from 'clsx';\nimport {useIsMobileMediaQuery} from '@common/utils/hooks/is-mobile-media-query';\nimport {BackendFiltersUrlKey} from '@common/datatable/filters/backend-filters-url-key';\nimport {opacityAnimation} from '@common/ui/animation/opacity-animation';\nimport {FilterListSkeleton} from '@common/datatable/filters/filter-list/filter-list-skeleton';\n\nexport interface DataTableProps {\n filters?: BackendFilter[];\n filtersLoading?: boolean;\n columns: ColumnConfig[];\n searchPlaceholder?: MessageDescriptor;\n queryParams?: Record;\n endpoint: string;\n resourceName?: ReactNode;\n emptyStateMessage: ReactElement<{isFiltering: boolean}>;\n actions?: ReactNode;\n enableSelection?: boolean;\n selectionStyle?: TableProps['selectionStyle'];\n selectedActions?: ReactNode;\n onRowAction?: TableProps['onAction'];\n tableDomProps?: ComponentProps<'table'>;\n children?: ReactNode;\n collapseTableOnMobile?: boolean;\n cellHeight?: string;\n}\nexport function DataTable({\n filters,\n filtersLoading,\n columns,\n searchPlaceholder,\n queryParams,\n endpoint,\n actions,\n selectedActions,\n emptyStateMessage,\n tableDomProps,\n onRowAction,\n enableSelection = true,\n selectionStyle = 'checkbox',\n children,\n cellHeight,\n collapseTableOnMobile = true,\n}: DataTableProps) {\n const isMobile = useIsMobileMediaQuery();\n const {trans} = useTrans();\n const {encodedFilters} = useBackendFilterUrlParams(filters);\n const [params, setParams] = useState({perPage: 15});\n const [selectedRows, setSelectedRows] = useState<(string | number)[]>([]);\n const query = useDatatableData(\n endpoint,\n {\n ...params,\n ...queryParams,\n [BackendFiltersUrlKey]: encodedFilters,\n },\n undefined,\n () => setSelectedRows([]),\n );\n\n const isFiltering = !!(params.query || params.filters || encodedFilters);\n const pagination = query.data?.pagination;\n\n return (\n \n {children}\n \n {selectedRows.length ? (\n \n ) : (\n setParams({...params, query})}\n actions={actions}\n filters={filters}\n filtersLoading={filtersLoading}\n key=\"default\"\n />\n )}\n \n\n {filters && (\n
\n \n {filtersLoading && encodedFilters ? (\n \n ) : (\n \n \n \n )}\n \n
\n )}\n\n \n {query.isFetching && (\n \n )}\n\n
\n {\n setParams({...params, ...descriptor});\n }}\n selectedRows={selectedRows}\n enableSelection={enableSelection}\n selectionStyle={selectionStyle}\n onSelectionChange={setSelectedRows}\n onAction={onRowAction}\n collapseOnMobile={collapseTableOnMobile}\n cellHeight={cellHeight}\n />\n
\n\n {(query.isFetched || query.isPlaceholderData) &&\n !pagination?.data.length ? (\n
\n {cloneElement(emptyStateMessage, {\n isFiltering,\n })}\n
\n ) : undefined}\n\n setParams({...params, page})}\n onPerPageChange={perPage => setParams({...params, perPage})}\n />\n \n \n );\n}\n","import React, {ReactElement, ReactNode, useId} from 'react';\nimport {TableDataItem} from '../../ui/tables/types/table-data-item';\nimport {DataTable, DataTableProps} from '../data-table';\nimport {TableProps} from '../../ui/tables/table';\nimport {StaticPageTitle} from '../../seo/static-page-title';\nimport {MessageDescriptor} from '../../i18n/message-descriptor';\nimport clsx from 'clsx';\n\ninterface Props extends DataTableProps {\n title?: ReactElement;\n headerContent?: ReactNode;\n headerItemsAlign?: string;\n enableSelection?: boolean;\n onRowAction?: TableProps['onAction'];\n className?: string;\n}\nexport function DataTablePage({\n title,\n headerContent,\n headerItemsAlign = 'items-end',\n className,\n ...dataTableProps\n}: Props) {\n const titleId = useId();\n\n return (\n
\n {title && (\n \n {title}\n

\n {title}\n

\n {headerContent}\n
\n )}\n\n \n \n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient, queryClient} from '../../http/query-client';\nimport {BackendResponse} from '../../http/backend-response/backend-response';\nimport {toast} from '../../ui/toast/toast';\nimport {DatatableDataQueryKey} from './paginated-resources';\nimport {useDataTable} from '../page/data-table-context';\nimport {message} from '../../i18n/message';\nimport {showHttpErrorToast} from '../../utils/http/show-http-error-toast';\nimport {Key} from 'react';\n\ninterface Response extends BackendResponse {\n //\n}\n\nexport function useDeleteSelectedRows() {\n const {endpoint, selectedRows, setSelectedRows} = useDataTable();\n return useMutation({\n mutationFn: () => deleteSelectedRows(endpoint, selectedRows),\n onSuccess: async () => {\n await queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey(endpoint),\n });\n toast(\n message('Deleted [one 1 record|other :count records]', {\n values: {count: selectedRows.length},\n }),\n );\n setSelectedRows([]);\n },\n onError: err =>\n showHttpErrorToast(err, message('Could not delete records')),\n });\n}\n\nfunction deleteSelectedRows(endpoint: string, ids: Key[]): Promise {\n return apiClient.delete(`${endpoint}/${ids.join(',')}`).then(r => r.data);\n}\n","import {Button} from '../../ui/buttons/button';\nimport {Trans} from '../../i18n/trans';\nimport {ConfirmationDialog} from '../../ui/overlays/dialog/confirmation-dialog';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport React from 'react';\nimport {useDeleteSelectedRows} from '../requests/delete-selected-rows';\nimport {useDataTable} from './data-table-context';\nimport {useDialogContext} from '@common/ui/overlays/dialog/dialog-context';\n\nexport function DeleteSelectedItemsAction() {\n return (\n \n \n \n \n );\n}\n\nfunction DeleteItemsDialog() {\n const deleteSelectedRows = useDeleteSelectedRows();\n const {selectedRows} = useDataTable();\n const {close} = useDialogContext();\n return (\n \n }\n body={\n \n }\n confirm={}\n isDanger\n onConfirm={() => {\n deleteSelectedRows.mutate(undefined, {onSuccess: () => close()});\n }}\n />\n );\n}\n","import React, {ReactNode} from 'react';\nimport {IllustratedMessage} from '../../ui/images/illustrated-message';\nimport {SvgImage} from '../../ui/images/svg-image/svg-image';\nimport {Trans} from '../../i18n/trans';\nimport {useIsMobileMediaQuery} from '../../utils/hooks/is-mobile-media-query';\n\nexport interface DataTableEmptyStateMessageProps {\n isFiltering?: boolean;\n title: ReactNode;\n filteringTitle?: ReactNode;\n image: string;\n size?: 'sm' | 'md';\n className?: string;\n}\nexport function DataTableEmptyStateMessage({\n isFiltering,\n title,\n filteringTitle,\n image,\n size,\n className,\n}: DataTableEmptyStateMessageProps) {\n const isMobile = useIsMobileMediaQuery();\n if (!size) {\n size = isMobile ? 'sm' : 'md';\n }\n\n // allow user to disable filtering message variation by not passing in \"filteringTitle\"\n return (\n }\n title={isFiltering && filteringTitle ? filteringTitle : title}\n description={\n isFiltering && filteringTitle ? (\n \n ) : undefined\n }\n />\n );\n}\n","export default \"__VITE_ASSET__d109d853__\"","import {AddIcon} from '../icons/material/Add';\nimport {Button} from '../ui/buttons/button';\nimport React, {ReactNode} from 'react';\nimport {useIsMobileMediaQuery} from '../utils/hooks/is-mobile-media-query';\nimport {IconButton} from '../ui/buttons/icon-button';\nimport {To} from 'react-router-dom';\nimport {ButtonBaseProps} from '../ui/buttons/button-base';\n\nexport interface DataTableAddItemButtonProps {\n children: ReactNode;\n to?: To;\n elementType?: ButtonBaseProps['elementType'];\n onClick?: ButtonBaseProps['onClick'];\n}\nexport const DataTableAddItemButton = React.forwardRef<\n HTMLButtonElement,\n DataTableAddItemButtonProps\n>(({children, to, elementType, onClick}, ref) => {\n const isMobile = useIsMobileMediaQuery();\n\n if (isMobile) {\n return (\n \n \n \n );\n }\n\n return (\n }\n variant=\"flat\"\n color=\"primary\"\n size=\"sm\"\n to={to}\n elementType={elementType}\n onClick={onClick}\n >\n {children}\n \n );\n});\n","import {apiClient} from '../../http/query-client';\nimport {BackendResponse} from '../../http/backend-response/backend-response';\nimport {useMutation} from '@tanstack/react-query';\nimport {showHttpErrorToast} from '../../utils/http/show-http-error-toast';\n\ninterface Response extends BackendResponse {\n downloadPath?: string;\n result?: 'jobQueued';\n}\n\nexport type ExportCsvPayload = Record;\n\nexport function useExportCsv(endpoint: string) {\n return useMutation({\n mutationFn: (payload?: ExportCsvPayload) => exportCsv(endpoint, payload),\n onError: err => showHttpErrorToast(err),\n });\n}\n\nfunction exportCsv(\n endpoint: string,\n payload: ExportCsvPayload | undefined,\n): Promise {\n return apiClient.post(endpoint, payload).then(r => r.data);\n}\n","import {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {DialogFooter} from '../../ui/overlays/dialog/dialog-footer';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {Button} from '../../ui/buttons/button';\nimport {Trans} from '../../i18n/trans';\n\nexport function CsvExportInfoDialog() {\n const {close} = useDialogContext();\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import {IconButton} from '../../ui/buttons/icon-button';\nimport {FileDownloadIcon} from '../../icons/material/FileDownload';\nimport React, {Fragment, useState} from 'react';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {ExportCsvPayload, useExportCsv} from '../requests/use-export-csv';\nimport {downloadFileFromUrl} from '../../uploads/utils/download-file-from-url';\nimport {CsvExportInfoDialog} from './csv-export-info-dialog';\n\ninterface DataTableExportCsvButtonProps {\n endpoint: string;\n payload?: ExportCsvPayload;\n}\nexport function DataTableExportCsvButton({\n endpoint,\n payload,\n}: DataTableExportCsvButtonProps) {\n const [dialogIsOpen, setDialogIsOpen] = useState(false);\n const exportCsv = useExportCsv(endpoint);\n\n return (\n \n {\n exportCsv.mutate(payload, {\n onSuccess: response => {\n if (response.downloadPath) {\n downloadFileFromUrl(response.downloadPath);\n } else {\n setDialogIsOpen(true);\n }\n },\n });\n }}\n >\n \n \n \n \n \n \n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {UseFormReturn} from 'react-hook-form';\nimport {User} from '@common/auth/user';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {toast} from '@common/ui/toast/toast';\nimport {apiClient, queryClient} from '@common/http/query-client';\nimport {onFormQueryError} from '@common/errors/on-form-query-error';\nimport {message} from '@common/i18n/message';\n\ninterface Response extends BackendResponse {\n user: User;\n}\n\nexport interface BanUserPayload {\n ban_until?: string;\n permanent?: boolean;\n comment?: string;\n}\n\nexport function useBanUser(\n form: UseFormReturn,\n userId: number,\n) {\n return useMutation({\n mutationFn: (payload: BanUserPayload) => banUser(userId, payload),\n onSuccess: async () => {\n toast(message('User suspended'));\n await queryClient.invalidateQueries({queryKey: ['users']});\n },\n onError: r => onFormQueryError(r, form),\n });\n}\n\nfunction banUser(userId: number, payload: BanUserPayload): Promise {\n return apiClient.post(`users/${userId}/ban`, payload).then(r => r.data);\n}\n","import {Dialog} from '@common/ui/overlays/dialog/dialog';\nimport {DialogHeader} from '@common/ui/overlays/dialog/dialog-header';\nimport {Trans} from '@common/i18n/trans';\nimport {DialogBody} from '@common/ui/overlays/dialog/dialog-body';\nimport {DialogFooter} from '@common/ui/overlays/dialog/dialog-footer';\nimport {Button} from '@common/ui/buttons/button';\nimport {useDialogContext} from '@common/ui/overlays/dialog/dialog-context';\nimport {Form} from '@common/ui/forms/form';\nimport {useForm} from 'react-hook-form';\nimport {\n BanUserPayload,\n useBanUser,\n} from '@common/admin/users/requests/use-ban-user';\nimport {FormDatePicker} from '@common/ui/forms/input-field/date/date-picker/date-picker';\nimport {User} from '@common/auth/user';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {message} from '@common/i18n/message';\nimport {FormSwitch} from '@common/ui/forms/toggle/switch';\n\ninterface Props {\n user: User;\n}\nexport function BanUserDialog({user}: Props) {\n const {trans} = useTrans();\n const {close, formId} = useDialogContext();\n const form = useForm({\n defaultValues: {\n permanent: true,\n },\n });\n const isPermanent = form.watch('permanent');\n const banUser = useBanUser(form, user.id);\n return (\n \n \n \n \n \n \n banUser.mutate(values, {onSuccess: () => close()})\n }\n >\n }\n disabled={isPermanent}\n />\n \n \n \n }\n placeholder={trans(message('Optional'))}\n />\n \n \n \n \n \n \n \n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const PersonOffIcon = createSvgIcon(\n \n, 'PersonOffOutlined');\n","import {useMutation} from '@tanstack/react-query';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {toast} from '@common/ui/toast/toast';\nimport {apiClient, queryClient} from '@common/http/query-client';\nimport {message} from '@common/i18n/message';\nimport {showHttpErrorToast} from '@common/utils/http/show-http-error-toast';\n\ninterface Response extends BackendResponse {}\n\nexport function useUnbanUser(userId: number) {\n return useMutation({\n mutationFn: () => unbanUser(userId),\n onSuccess: () => {\n toast(message('User unsuspended'));\n queryClient.invalidateQueries({queryKey: ['users']});\n },\n onError: r => showHttpErrorToast(r),\n });\n}\n\nfunction unbanUser(userId: number): Promise {\n return apiClient.delete(`users/${userId}/unban`).then(r => r.data);\n}\n","import React, {Fragment} from 'react';\nimport {Link} from 'react-router-dom';\nimport clsx from 'clsx';\nimport {CheckIcon} from '../../icons/material/Check';\nimport {UserIndexFilters} from './user-index-filters';\nimport {User} from '../../auth/user';\nimport {NameWithAvatar} from '../../datatable/column-templates/name-with-avatar';\nimport {DataTablePage} from '../../datatable/page/data-table-page';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {EditIcon} from '../../icons/material/Edit';\nimport {CloseIcon} from '../../icons/material/Close';\nimport {FormattedDate} from '../../i18n/formatted-date';\nimport {ColumnConfig} from '../../datatable/column-config';\nimport {Trans} from '../../i18n/trans';\nimport {DeleteSelectedItemsAction} from '../../datatable/page/delete-selected-items-action';\nimport {DataTableEmptyStateMessage} from '../../datatable/page/data-table-emty-state-message';\nimport teamSvg from '../roles/team.svg';\nimport {DataTableAddItemButton} from '../../datatable/data-table-add-item-button';\nimport {DataTableExportCsvButton} from '../../datatable/csv-export/data-table-export-csv-button';\nimport {ChipList} from '../../ui/forms/input-field/chip-field/chip-list';\nimport {Chip} from '../../ui/forms/input-field/chip-field/chip';\nimport {useSettings} from '../../core/settings/use-settings';\nimport {DialogTrigger} from '@common/ui/overlays/dialog/dialog-trigger';\nimport {BanUserDialog} from '@common/admin/users/ban-user-dialog';\nimport {PersonOffIcon} from '@common/icons/material/PersonOff';\nimport {Tooltip} from '@common/ui/tooltip/tooltip';\nimport {ConfirmationDialog} from '@common/ui/overlays/dialog/confirmation-dialog';\nimport {useUnbanUser} from '@common/admin/users/requests/use-unban-user';\n\nconst columnConfig: ColumnConfig[] = [\n {\n key: 'name',\n allowsSorting: true,\n sortingKey: 'email',\n width: 'flex-3 min-w-200',\n visibleInMode: 'all',\n header: () => ,\n body: user => (\n \n ),\n },\n {\n key: 'subscribed',\n header: () => ,\n width: 'w-96',\n body: user =>\n user.subscriptions?.length ? (\n \n ) : (\n \n ),\n },\n {\n key: 'roles',\n header: () => ,\n body: user => (\n \n {user?.roles.map(role => (\n \n \n \n \n \n ))}\n \n ),\n },\n {\n key: 'firstName',\n allowsSorting: true,\n header: () => ,\n body: user => user.first_name,\n },\n {\n key: 'lastName',\n allowsSorting: true,\n header: () => ,\n body: user => user.last_name,\n },\n {\n key: 'createdAt',\n allowsSorting: true,\n width: 'w-96',\n header: () => ,\n body: user => (\n \n ),\n },\n {\n key: 'actions',\n header: () => ,\n width: 'w-84 flex-shrink-0',\n hideHeader: true,\n align: 'end',\n visibleInMode: 'all',\n body: user => (\n
\n \n }>\n \n \n \n \n \n {user.banned_at ? (\n \n ) : (\n \n }>\n \n \n \n \n \n \n )}\n
\n ),\n },\n];\n\nexport function UserIndex() {\n const {billing} = useSettings();\n\n const filteredColumns = !billing.enable\n ? columnConfig.filter(c => c.key !== 'subscribed')\n : columnConfig;\n\n return (\n \n }\n filters={UserIndexFilters}\n columns={filteredColumns}\n actions={}\n queryParams={{with: 'subscriptions,bans'}}\n selectedActions={}\n emptyStateMessage={\n }\n filteringTitle={}\n />\n }\n />\n \n );\n}\n\nfunction Actions() {\n return (\n \n \n \n \n \n \n );\n}\n\ninterface UnbanButtonProps {\n user: User;\n}\nfunction UnbanButton({user}: UnbanButtonProps) {\n const unban = useUnbanUser(user.id);\n return (\n {\n if (confirmed) {\n unban.mutate();\n }\n }}\n >\n }>\n \n \n \n \n \n }\n body={\n \n }\n confirm={}\n />\n \n );\n}\n","export function chunkArray(array: T[], chunkSize: number): T[][] {\n return array.reduce((resultArray, item, index) => {\n const chunkIndex = Math.floor(index / chunkSize);\n\n if (!resultArray[chunkIndex]) {\n resultArray[chunkIndex] = [];\n }\n\n resultArray[chunkIndex].push(item);\n\n return resultArray;\n }, []);\n}\n","import {\n IAppearanceConfig,\n MenuSectionConfig,\n} from '../types/appearance-editor-config';\nimport {message} from '../../../i18n/message';\nimport {chunkArray} from '../../../utils/array/chunk-array';\nimport {AppearanceEditorBreadcrumbItem} from '../types/appearance-editor-section';\n\nexport const DefaultAppearanceConfig: IAppearanceConfig = {\n preview: {\n defaultRoute: '/',\n navigationRoutes: [],\n },\n sections: {\n general: {\n label: message('General'),\n position: 1,\n buildBreadcrumb: () => [\n {\n label: message('General'),\n location: `general`,\n },\n ],\n },\n themes: {\n label: message('Themes'),\n position: 2,\n buildBreadcrumb: (pathname, formValue) => {\n const parts = pathname.split('/').filter(p => !!p);\n const [, , , themeIndex] = parts;\n const breadcrumb: AppearanceEditorBreadcrumbItem[] = [\n {\n label: message('Themes'),\n location: `themes`,\n },\n ];\n if (themeIndex != null) {\n breadcrumb.push({\n label: formValue.appearance.themes.all[+themeIndex]?.name,\n location: `themes/${themeIndex}`,\n });\n }\n return breadcrumb;\n },\n },\n menus: {\n label: message('Menus'),\n position: 3,\n buildBreadcrumb: (pathname, formValue) => {\n // /admin/appearance/menus/0/items/1\n const parts = pathname.split('/').filter(p => !!p);\n const [, , ...rest] = parts;\n // admin/appearance\n const breadcrumb: AppearanceEditorBreadcrumbItem[] = [\n {\n label: message('Menus'),\n location: 'menus',\n },\n ];\n // chunk every two items: [form group, item index]\n const chunked = chunkArray(rest, 2);\n chunked.forEach(([sectionName, sectionIndex], chunkIndex) => {\n // menu\n if (sectionName === 'menus' && sectionIndex != null) {\n breadcrumb.push({\n label: formValue.settings.menus[+sectionIndex]?.name,\n location: `menus/${sectionIndex}`,\n });\n // menu item\n } else if (sectionName === 'items' && sectionIndex != null) {\n const [, menuIndex] = chunked[chunkIndex - 1];\n breadcrumb.push({\n label:\n formValue.settings.menus[+menuIndex].items[+sectionIndex]\n ?.label,\n location: `menus/${menuIndex}/${sectionIndex}`,\n });\n }\n });\n return breadcrumb;\n },\n config: {\n availableRoutes: [\n '/',\n '/login',\n '/register',\n '/contact',\n '/billing/pricing',\n '/account-settings',\n '/admin',\n '/admin/appearance',\n '/admin/settings',\n '/admin/plans',\n '/admin/subscriptions',\n '/admin/users',\n '/admin/roles',\n '/admin/pages',\n '/admin/tags',\n '/admin/files',\n '/admin/localizations',\n '/admin/ads',\n '/admin/settings/authentication',\n '/admin/settings/branding',\n '/admin/settings/cache',\n '/admin/settings/providers',\n '/api-docs',\n ],\n positions: [\n 'admin-navbar',\n 'admin-sidebar',\n 'custom-page-navbar',\n 'auth-page-footer',\n 'auth-dropdown',\n 'account-settings-page',\n 'billing-page',\n 'checkout-page-navbar',\n 'checkout-page-footer',\n 'pricing-table-page',\n 'contact-us-page',\n 'notifications-page',\n 'footer',\n 'footer-secondary',\n ],\n } as MenuSectionConfig,\n },\n 'custom-code': {\n label: message('Custom Code'),\n position: 4,\n buildBreadcrumb: () => [\n {\n label: message('Custom code'),\n location: `custom-code`,\n },\n ],\n },\n 'seo-settings': {\n label: message('SEO Settings'),\n position: 5,\n buildBreadcrumb: () => [\n {\n label: message('SEO'),\n location: `seo`,\n },\n ],\n },\n },\n};\n","import React, {ReactNode} from 'react';\nimport clsx from 'clsx';\nimport {getInputFieldClassNames} from '../input-field/get-input-field-class-names';\nimport {UseSliderProps, UseSliderReturn} from './use-slider';\n\nexport interface BaseSliderProps extends UseSliderProps {\n slider: UseSliderReturn;\n children: ReactNode;\n}\n\nexport function BaseSlider(props: BaseSliderProps) {\n const {\n size = 'md',\n inline,\n label,\n showValueLabel = !!label,\n className,\n width = 'w-full',\n slider,\n children,\n trackColor = 'primary',\n fillColor = 'primary',\n } = props;\n\n const {\n domProps,\n trackRef,\n getThumbPercent,\n getThumbValueLabel,\n labelId,\n groupId,\n thumbIds,\n isDisabled,\n numberFormatter,\n minValue,\n maxValue,\n step,\n values,\n getValueLabel,\n } = slider;\n\n let outputValue = '';\n let maxLabelLength = Math.max(\n [...numberFormatter.format(minValue)].length,\n [...numberFormatter.format(maxValue)].length,\n [...numberFormatter.format(step)].length\n );\n\n if (getValueLabel) {\n outputValue = getValueLabel(values[0]);\n } else if (values.length === 1) {\n outputValue = getThumbValueLabel(0);\n } else if (values.length === 2) {\n // This should really use the NumberFormat#formatRange proposal...\n // https://github.com/tc39/ecma402/issues/393\n // https://github.com/tc39/proposal-intl-numberformat-v3#formatrange-ecma-402-393\n outputValue = `${getThumbValueLabel(0)} – ${getThumbValueLabel(1)}`;\n maxLabelLength =\n 3 +\n 2 *\n Math.max(\n maxLabelLength,\n [...numberFormatter.format(minValue)].length,\n [...numberFormatter.format(maxValue)].length\n );\n }\n const style = getInputFieldClassNames({\n size,\n disabled: isDisabled,\n labelDisplay: 'flex',\n });\n\n const wrapperClassname = clsx('touch-none', className, width, {\n 'flex items-center': inline,\n });\n\n return (\n
\n {(label || showValueLabel) && (\n
\n {label && (\n {\n // Safari does not focus elements when clicking on an associated \n )}\n {showValueLabel && (\n \n {outputValue}\n \n )}\n
\n )}\n \n \n \n {children}\n
\n \n );\n}\n\nfunction getTrackColor(color: string, isDisabled: boolean): string {\n if (isDisabled) {\n color = 'disabled';\n }\n switch (color) {\n case 'disabled':\n return 'bg-slider-disabled/60';\n case 'primary':\n return 'bg-primary-light';\n case 'neutral':\n return 'bg-divider';\n default:\n return color;\n }\n}\n\nfunction getFillColor(color: string, isDisabled: boolean): string {\n if (isDisabled) {\n color = 'disabled';\n }\n switch (color) {\n case 'disabled':\n return 'bg-slider-disabled';\n case 'primary':\n return 'bg-primary';\n default:\n return color;\n }\n}\n","import {\n mergeProps,\n snapValueToStep,\n useGlobalListeners,\n} from '@react-aria/utils';\nimport {useControlledState} from '@react-stately/utils';\nimport React, {\n HTMLAttributes,\n ReactNode,\n RefObject,\n useId,\n useRef,\n useState,\n} from 'react';\nimport {clamp} from '@common/utils/number/clamp';\nimport {usePointerEvents} from '../../interactions/use-pointer-events';\nimport {useNumberFormatter} from '@common/i18n/use-number-formatter';\nimport type {NumberFormatOptions} from '@internationalized/number';\nimport {InputSize} from '../input-field/input-size';\n\nexport interface UseSliderProps {\n formatOptions?: NumberFormatOptions;\n onPointerDown?: () => void;\n onPointerMove?: (e: React.PointerEvent) => void;\n onChange?: (value: T) => void;\n onChangeEnd?: (value: T) => void;\n value?: T;\n defaultValue?: T;\n getValueLabel?: (value: number) => string;\n minValue?: number;\n maxValue?: number;\n step?: number;\n isDisabled?: boolean;\n size?: InputSize;\n label?: ReactNode;\n inline?: boolean;\n className?: string;\n width?: string;\n showValueLabel?: boolean;\n fillColor?: 'primary' | string;\n trackColor?: 'primary' | 'neutral' | string;\n showThumbOnHoverOnly?: boolean;\n thumbSize?: string;\n}\n\nexport interface UseSliderReturn {\n domProps: HTMLAttributes;\n trackRef: RefObject;\n isPointerOver: boolean;\n showThumbOnHoverOnly?: boolean;\n thumbSize?: string;\n step: number;\n isDisabled: boolean;\n values: number[];\n minValue: number;\n maxValue: number;\n focusedThumb: number | undefined;\n labelId: string | undefined;\n groupId: string;\n thumbIds: string[];\n numberFormatter: Intl.NumberFormat;\n getThumbPercent: (index: number) => number;\n getThumbMinValue: (index: number) => number;\n getThumbMaxValue: (index: number) => number;\n getThumbValueLabel: (index: number) => string;\n setThumbValue: (index: number, value: number) => void;\n updateDraggedThumbs: (index: number, dragging: boolean) => void;\n isThumbDragging: (index: number) => boolean;\n setThumbEditable: (index: number, editable: boolean) => void;\n setFocusedThumb: (index: number | undefined) => void;\n getValueLabel?: (value: number) => string;\n}\n\nexport function useSlider({\n minValue = 0,\n maxValue = 100,\n isDisabled = false,\n step = 1,\n formatOptions,\n onChangeEnd,\n onPointerDown,\n label,\n getValueLabel,\n showThumbOnHoverOnly,\n thumbSize,\n onPointerMove,\n ...props\n}: UseSliderProps): UseSliderReturn {\n const [isPointerOver, setIsPointerOver] = useState(false);\n const numberFormatter = useNumberFormatter(formatOptions);\n const {addGlobalListener, removeGlobalListener} = useGlobalListeners();\n const trackRef = useRef(null);\n\n // values will be stored in internal state as an array for both slider and range slider\n const [values, setValues] = useControlledState(\n props.value ? props.value : undefined,\n props.defaultValue ?? ([minValue] as any),\n props.onChange as any\n );\n // need to also store values in ref, because state value would\n // lag behind by one between pointer down and move callbacks\n const valuesRef = useRef(null);\n valuesRef.current = values;\n\n // indices of thumbs that are being dragged currently (state and ref for same reasons as above)\n const [draggedThumbs, setDraggedThumbs] = useState(\n new Array(values.length).fill(false)\n );\n const draggedThumbsRef = useRef(null);\n draggedThumbsRef.current = draggedThumbs;\n\n // formatted value for and thumb aria labels\n function getFormattedValue(value: number) {\n return numberFormatter.format(value);\n }\n\n const isThumbDragging = (index: number) => {\n return draggedThumbsRef.current?.[index] || false;\n };\n\n const getThumbValueLabel = (index: number) =>\n getFormattedValue(values[index]);\n\n const getThumbMinValue = (index: number) =>\n index === 0 ? minValue : values[index - 1];\n const getThumbMaxValue = (index: number) =>\n index === values.length - 1 ? maxValue : values[index + 1];\n\n const setThumbValue = (index: number, value: number) => {\n if (isDisabled || !isThumbEditable(index) || !valuesRef.current) {\n return;\n }\n const thisMin = getThumbMinValue(index);\n const thisMax = getThumbMaxValue(index);\n\n // Round value to multiple of step, clamp value between min and max\n value = snapValueToStep(value, thisMin, thisMax, step);\n valuesRef.current = replaceIndex(valuesRef.current, index, value);\n setValues(valuesRef.current);\n };\n\n // update \"dragging\" status of specified thumb\n const updateDraggedThumbs = (index: number, dragging: boolean) => {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n\n const wasDragging = draggedThumbsRef.current?.[index];\n draggedThumbsRef.current = replaceIndex(\n draggedThumbsRef.current || [],\n index,\n dragging\n );\n setDraggedThumbs(draggedThumbsRef.current);\n\n // Call onChangeEnd if no handles are dragging.\n if (onChangeEnd && wasDragging && !draggedThumbsRef.current.some(Boolean)) {\n onChangeEnd(valuesRef.current || []);\n }\n };\n\n const [focusedThumb, setFocusedThumb] = useState(\n undefined\n );\n\n const getValuePercent = (value: number) => {\n const x = Math.min(1, (value - minValue) / (maxValue - minValue));\n if (isNaN(x)) {\n return 0;\n }\n return x;\n };\n\n const getThumbPercent = (index: number) =>\n getValuePercent(valuesRef.current![index]);\n\n const setThumbPercent = (index: number, percent: number) => {\n setThumbValue(index, getPercentValue(percent));\n };\n\n const getRoundedValue = (value: number) =>\n Math.round((value - minValue) / step) * step + minValue;\n\n const getPercentValue = (percent: number) => {\n const val = percent * (maxValue - minValue) + minValue;\n return clamp(getRoundedValue(val), minValue, maxValue);\n };\n\n // allows disabling individual thumbs in range slider, instead of disable the whole slider\n const editableThumbsRef = useRef(\n new Array(values.length).fill(true)\n );\n const isThumbEditable = (index: number) => editableThumbsRef.current[index];\n const setThumbEditable = (index: number, editable: boolean) => {\n editableThumbsRef.current[index] = editable;\n };\n\n // When the user clicks or drags the track, we want the motion to set and drag the\n // closest thumb. Hence, we also need to install useMove() on the track element.\n // Here, we keep track of which index is the \"closest\" to the drag start point.\n // It is set onMouseDown/onTouchDown; see trackProps below.\n const realTimeTrackDraggingIndex = useRef(null);\n\n const currentPointer = useRef(undefined);\n const handlePointerDown = (e: React.PointerEvent) => {\n if (\n e.pointerType === 'mouse' &&\n (e.button !== 0 || e.altKey || e.ctrlKey || e.metaKey)\n ) {\n return;\n }\n\n onPointerDown?.();\n\n // We only trigger track-dragging if the user clicks on the track itself and nothing is currently being dragged.\n if (\n trackRef.current &&\n !isDisabled &&\n values.every((_, i) => !draggedThumbs[i])\n ) {\n const size = trackRef.current.offsetWidth;\n // Find the closest thumb\n const trackPosition = trackRef.current.getBoundingClientRect().left;\n const offset = e.clientX - trackPosition;\n const percent = offset / size;\n const value = getPercentValue(percent);\n\n // to find the closet thumb we split the array based on the first thumb position to the \"right/end\" of the click.\n let closestThumb;\n const split = values.findIndex(v => value - v < 0);\n if (split === 0) {\n // If the index is zero then the closest thumb is the first one\n closestThumb = split;\n } else if (split === -1) {\n // If no index is found they've clicked past all the thumbs\n closestThumb = values.length - 1;\n } else {\n const lastLeft = values[split - 1];\n const firstRight = values[split];\n // Pick the last left/start thumb, unless they are stacked on top of each other, then pick the right/end one\n if (Math.abs(lastLeft - value) < Math.abs(firstRight - value)) {\n closestThumb = split - 1;\n } else {\n closestThumb = split;\n }\n }\n\n // Confirm that the found closest thumb is editable, not disabled, and move it\n if (closestThumb >= 0 && isThumbEditable(closestThumb)) {\n // Don't un-focus anything\n e.preventDefault();\n\n realTimeTrackDraggingIndex.current = closestThumb;\n setFocusedThumb(closestThumb);\n currentPointer.current = e.pointerId;\n\n updateDraggedThumbs(realTimeTrackDraggingIndex.current, true);\n setThumbValue(closestThumb, value);\n\n addGlobalListener(window, 'pointerup', onUpTrack, false);\n } else {\n realTimeTrackDraggingIndex.current = null;\n }\n }\n };\n\n const currentPosition = useRef(null);\n const {domProps: moveDomProps} = usePointerEvents({\n onPointerDown: handlePointerDown,\n onMoveStart() {\n currentPosition.current = null;\n },\n onMove(e, deltaX) {\n const size = trackRef.current?.offsetWidth || 0;\n\n if (currentPosition.current == null) {\n currentPosition.current =\n getThumbPercent(realTimeTrackDraggingIndex.current || 0) * size;\n }\n\n currentPosition.current += deltaX;\n\n if (realTimeTrackDraggingIndex.current != null && trackRef.current) {\n const percent = clamp(currentPosition.current / size, 0, 1);\n setThumbPercent(realTimeTrackDraggingIndex.current, percent);\n }\n },\n onMoveEnd() {\n if (realTimeTrackDraggingIndex.current != null) {\n updateDraggedThumbs(realTimeTrackDraggingIndex.current, false);\n realTimeTrackDraggingIndex.current = null;\n }\n },\n });\n\n const domProps = mergeProps(moveDomProps, {\n onPointerEnter: () => {\n setIsPointerOver(true);\n },\n onPointerLeave: () => {\n setIsPointerOver(false);\n },\n onPointerMove: (e: React.PointerEvent) => {\n onPointerMove?.(e);\n },\n });\n\n const onUpTrack = (e: PointerEvent) => {\n const id = e.pointerId;\n if (id === currentPointer.current) {\n if (realTimeTrackDraggingIndex.current != null) {\n updateDraggedThumbs(realTimeTrackDraggingIndex.current, false);\n realTimeTrackDraggingIndex.current = null;\n }\n\n removeGlobalListener(window, 'pointerup', onUpTrack, false);\n }\n };\n\n const id = useId();\n const labelId = label ? `${id}-label` : undefined;\n const groupId = `${id}-group`;\n const thumbIds = [...Array(values.length)].map((v, i) => {\n return `${id}-thumb-${i}`;\n });\n\n return {\n domProps,\n trackRef,\n isDisabled,\n step,\n values,\n minValue,\n maxValue,\n focusedThumb,\n labelId,\n groupId,\n thumbIds,\n numberFormatter,\n getThumbPercent,\n getThumbMinValue,\n getThumbMaxValue,\n getThumbValueLabel,\n isThumbDragging,\n setThumbValue,\n updateDraggedThumbs,\n setThumbEditable,\n setFocusedThumb,\n getValueLabel,\n isPointerOver,\n showThumbOnHoverOnly,\n thumbSize,\n };\n}\n\nfunction replaceIndex(array: T[], index: number, value: T) {\n if (array[index] === value) {\n return array;\n }\n\n return [...array.slice(0, index), value, ...array.slice(index + 1)];\n}\n","import React, {Ref, useCallback, useEffect, useRef} from 'react';\nimport clsx from 'clsx';\nimport {UseSliderReturn} from './use-slider';\nimport {useGlobalListeners, useObjectRef} from '@react-aria/utils';\nimport {createEventHandler} from '@common/utils/dom/create-event-handler';\nimport {BaseSliderProps} from '@common/ui/forms/slider/base-slider';\n\ninterface SliderThumb {\n index: number;\n slider: UseSliderReturn;\n isDisabled?: boolean;\n ariaLabel?: string;\n inputRef?: Ref;\n onBlur?: React.FocusEventHandler;\n fillColor?: BaseSliderProps['fillColor'];\n}\n\nexport function SliderThumb({\n index,\n slider,\n isDisabled: isThumbDisabled,\n ariaLabel,\n inputRef,\n onBlur,\n fillColor = 'primary',\n}: SliderThumb) {\n const inputObjRef = useObjectRef(inputRef);\n const {addGlobalListener, removeGlobalListener} = useGlobalListeners();\n\n const {\n step,\n values,\n focusedThumb,\n labelId,\n thumbIds,\n isDisabled: isSliderDisabled,\n getThumbPercent,\n getThumbMinValue,\n getThumbMaxValue,\n getThumbValueLabel,\n setThumbValue,\n updateDraggedThumbs,\n isThumbDragging,\n setThumbEditable,\n setFocusedThumb,\n isPointerOver,\n showThumbOnHoverOnly,\n thumbSize = 'w-18 h-18',\n } = slider;\n\n const isDragging = isThumbDragging(index);\n const value = values[index];\n\n // Immediately register editability with the state\n setThumbEditable(index, !isThumbDisabled);\n const isDisabled = isThumbDisabled || isSliderDisabled;\n\n const focusInput = useCallback(() => {\n if (inputObjRef.current) {\n inputObjRef.current.focus({preventScroll: true});\n }\n }, [inputObjRef]);\n\n // we will focus the native range input when slider is clicked or thumb is\n // focused in some other way, and let browser handle keyboard interactions\n const isFocused = focusedThumb === index;\n useEffect(() => {\n if (isFocused) {\n focusInput();\n }\n }, [isFocused, focusInput]);\n\n const currentPointer = useRef(undefined);\n const handlePointerUp = (e: PointerEvent) => {\n if (e.pointerId === currentPointer.current) {\n focusInput();\n updateDraggedThumbs(index, false);\n removeGlobalListener(window, 'pointerup', handlePointerUp, false);\n }\n };\n\n const className = clsx(\n 'outline-none rounded-full top-1/2 -translate-y-1/2 -translate-x-1/2 absolute inset-0 transition-button duration-200',\n thumbSize,\n !isDisabled && 'shadow-md',\n thumbColor({fillColor, isDisabled, isDragging: isDragging}),\n // show thumb on hover and while dragging, otherwise \"blur\" event will fire on thumb and dragging will stop\n (showThumbOnHoverOnly && isDragging) || isPointerOver\n ? 'visible'\n : 'invisible'\n );\n\n return (\n {\n if (e.button !== 0 || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n focusInput();\n currentPointer.current = e.pointerId;\n updateDraggedThumbs(index, true);\n\n addGlobalListener(window, 'pointerup', handlePointerUp, false);\n }}\n >\n {\n updateDraggedThumbs(index, true);\n })}\n onKeyUp={createEventHandler(() => {\n // make sure \"onChangeEnd\" is fired on keyboard navigation\n updateDraggedThumbs(index, false);\n })}\n ref={inputObjRef}\n tabIndex={!isDisabled ? 0 : undefined}\n min={getThumbMinValue(index)}\n max={getThumbMaxValue(index)}\n step={step}\n value={value}\n disabled={isDisabled}\n aria-label={ariaLabel}\n aria-labelledby={labelId}\n aria-orientation=\"horizontal\"\n aria-valuetext={getThumbValueLabel(index)}\n onFocus={() => {\n setFocusedThumb(index);\n }}\n onBlur={e => {\n setFocusedThumb(undefined);\n updateDraggedThumbs(index, false);\n onBlur?.(e);\n }}\n onChange={e => {\n setThumbValue(index, parseFloat(e.target.value));\n }}\n type=\"range\"\n className=\"sr-only\"\n />\n \n );\n}\n\ninterface SliderThumbColorProps {\n isDisabled?: boolean;\n isDragging: boolean;\n fillColor?: BaseSliderProps['fillColor'];\n}\n\nfunction thumbColor({\n isDisabled,\n isDragging,\n fillColor,\n}: SliderThumbColorProps): string {\n if (isDisabled) {\n return 'bg-slider-disabled cursor-default';\n }\n\n if (fillColor && fillColor !== 'primary') {\n return fillColor;\n }\n\n return clsx(\n 'hover:bg-primary-dark',\n isDragging ? 'bg-primary-dark' : 'bg-primary'\n );\n}\n","import {BaseSlider} from './base-slider';\nimport {useSlider, UseSliderProps} from './use-slider';\nimport React, {Ref} from 'react';\nimport {SliderThumb} from './slider-thumb';\nimport {useController} from 'react-hook-form';\nimport {mergeProps} from '@react-aria/utils';\n\ninterface SliderProps extends UseSliderProps {\n inputRef?: Ref;\n onBlur?: React.FocusEventHandler;\n}\nexport function Slider({inputRef, onBlur, ...props}: SliderProps) {\n const {onChange, onChangeEnd, value, defaultValue, ...otherProps} = props;\n\n const baseProps: UseSliderProps = {\n ...otherProps,\n // Normalize `value: number[]` to `value: number`\n value: value != null ? [value] : undefined,\n defaultValue: defaultValue != null ? [defaultValue] : undefined,\n onChange: (v: number[]): void => {\n onChange?.(v[0]);\n },\n onChangeEnd: (v: number[]): void => {\n onChangeEnd?.(v[0]);\n },\n };\n\n const slider = useSlider(baseProps);\n\n return (\n \n \n \n );\n}\n\nexport interface FormSliderProps extends SliderProps {\n name: string;\n}\n\nexport function FormSlider({name, ...props}: FormSliderProps) {\n const {\n field: {onChange, onBlur, value = '', ref},\n } = useController({\n name,\n });\n\n const formProps: SliderProps = {\n onChange,\n onBlur,\n value: value || '', // avoid issues with \"null\" value when setting form defaults from backend model\n };\n\n return ;\n}\n","import clsx from 'clsx';\nimport {forwardRef, ReactNode} from 'react';\nimport {KeyboardArrowRightIcon} from '../../icons/material/KeyboardArrowRight';\nimport {ButtonBase, ButtonBaseProps} from '../../ui/buttons/button-base';\n\ninterface Props extends ButtonBaseProps {\n startIcon?: ReactNode;\n}\nexport const AppearanceButton = forwardRef(\n ({startIcon, children, className, ...other}, ref) => {\n return (\n \n {startIcon}\n
{children}
\n \n \n );\n }\n);\n","import {createSvgIcon} from '../../../../icons/create-svg-icon';\n\nexport const ColorIcon = createSvgIcon(\n \n);\n","import React from 'react';\nimport clsx from 'clsx';\nimport {ButtonBase} from '../buttons/button-base';\n\ntype Props = {\n onChange?: (e: string) => void;\n value?: string;\n colors: string[];\n};\nexport function ColorSwatch({onChange, value, colors}: Props) {\n const presetButtons = colors.map(color => {\n const isSelected = value === color;\n return (\n {\n onChange?.(color);\n }}\n className={clsx(\n 'relative block flex-shrink-0 w-26 h-26 border rounded',\n isSelected && 'shadow-md'\n )}\n style={{backgroundColor: color}}\n >\n {isSelected && (\n \n )}\n \n );\n });\n\n return
{presetButtons}
;\n}\n","import {message} from '@common/i18n/message';\nimport {MessageDescriptor} from '@common/i18n/message-descriptor';\n\nexport const ColorPresets: {\n color: string;\n name: MessageDescriptor;\n foreground?: string;\n}[] = [\n {\n color: 'rgb(255, 255, 255)',\n name: message('White'),\n },\n {\n color: 'rgb(239,245,245)',\n name: message('Solitude'),\n },\n {\n color: 'rgb(245,213,174)',\n name: message('Wheat'),\n },\n {\n color: 'rgb(253,227,167)',\n name: message('Cape Honey'),\n },\n {\n color: 'rgb(242,222,186)',\n name: message('Milk punch'),\n },\n {\n color: 'rgb(97,118,75)',\n name: message('Dingy'),\n foreground: 'rgb(255, 255, 255)',\n },\n {\n color: 'rgb(4, 147, 114)',\n name: message('Aquamarine'),\n foreground: 'rgb(255, 255, 255)',\n },\n {\n color: 'rgb(222,245,229)',\n name: message('Cosmic Latte'),\n },\n {\n color: 'rgb(233,119,119)',\n name: message('Geraldine'),\n foreground: 'rgb(90,14,14)',\n },\n {\n color: 'rgb(247,164,164)',\n name: message('Sundown'),\n },\n {\n color: 'rgb(30,139,195)',\n name: message('Pelorous'),\n foreground: 'rgb(255, 255, 255)',\n },\n {\n color: 'rgb(142,68,173)',\n name: message('Deep Lilac'),\n foreground: 'rgb(255, 255, 255)',\n },\n {\n color: 'rgb(108,74,182)',\n name: message('Blue marguerite'),\n foreground: 'rgb(255, 255, 255)',\n },\n {\n color: 'rgb(139,126,116)',\n name: message('Americano'),\n foreground: 'rgb(255, 255, 255)',\n },\n {\n color: 'rgb(0,0,0)',\n name: message('Black'),\n foreground: 'rgb(255, 255, 255)',\n },\n {\n color: 'rgb(64,66,88)',\n name: message('Blue zodiac'),\n foreground: 'rgb(255, 255, 255)',\n },\n {\n color: 'rgb(101,100,124)',\n name: message('Comet'),\n foreground: 'rgb(255, 255, 255)',\n },\n];\n","import {HexColorInput, HexColorPicker} from 'react-colorful';\nimport React, {useState} from 'react';\nimport {parseColor} from '@react-stately/color';\nimport {ColorSwatch} from './color-swatch';\nimport {getInputFieldClassNames} from '../forms/input-field/get-input-field-class-names';\nimport {ColorPresets} from '@common/ui/color-picker/color-presets';\n\nconst DefaultPresets = ColorPresets.map(({color}) => color).slice(0, 14);\n\ntype Props = {\n defaultValue?: string;\n onChange?: (e: string) => void;\n colorPresets?: string[];\n showInput?: boolean;\n};\nexport function ColorPicker({\n defaultValue,\n onChange,\n colorPresets,\n showInput,\n}: Props) {\n const [color, setColor] = useState(defaultValue);\n\n const presets: string[] = colorPresets || DefaultPresets;\n\n const style = getInputFieldClassNames({size: 'sm'});\n\n return (\n
\n {\n onChange?.(newColor);\n setColor(newColor);\n }}\n />\n
\n {presets && (\n {\n if (newColor) {\n const hex = parseColor(newColor).toString('hex');\n onChange?.(hex);\n setColor(hex);\n }\n }}\n value={color}\n />\n )}\n {showInput && (\n
\n {\n onChange?.(newColor);\n setColor(newColor);\n }}\n />\n
\n )}\n
\n
\n );\n}\n","import {useState} from 'react';\nimport {ColorPicker} from './color-picker';\nimport {DialogFooter} from '../overlays/dialog/dialog-footer';\nimport {Button} from '../buttons/button';\nimport {useDialogContext} from '../overlays/dialog/dialog-context';\nimport {Dialog} from '../overlays/dialog/dialog';\nimport {Trans} from '../../i18n/trans';\n\ninterface ColorPickerDialogProps {\n defaultValue?: string;\n onChange?: (color: string) => void;\n hideFooter?: boolean;\n showInput?: boolean;\n}\nexport function ColorPickerDialog({\n defaultValue,\n onChange,\n hideFooter = false,\n showInput = true,\n}: ColorPickerDialogProps) {\n const {close} = useDialogContext();\n const [value, setValue] = useState(defaultValue || '');\n // todo: remove this once pixie and bedrive are refactored to use dialogTrigger currentValue (use \"currentValue\" for defaultValue as well)\n //const initialValue = useRef(defaultValue);\n\n return (\n \n {\n setValue(newValue);\n onChange?.(newValue);\n }}\n />\n {!hideFooter && (\n \n {\n close();\n }}\n >\n \n \n {\n close(value);\n }}\n >\n \n \n \n )}\n \n );\n}\n","import {LandingPageContent} from '@app/landing/landing-page-content';\nimport {useFormContext} from 'react-hook-form';\nimport {\n appearanceState,\n AppearanceValues,\n useAppearanceStore,\n} from '@common/admin/appearance/appearance-store';\nimport {Fragment, ReactNode} from 'react';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {Trans} from '@common/i18n/trans';\nimport {FormSlider} from '@common/ui/forms/slider/slider';\nimport {DialogTrigger} from '@common/ui/overlays/dialog/dialog-trigger';\nimport {AppearanceButton} from '@common/admin/appearance/appearance-button';\nimport {ColorIcon} from '@common/admin/appearance/sections/themes/color-icon';\nimport {ColorPickerDialog} from '@common/ui/color-picker/color-picker-dialog';\nimport {Link} from 'react-router-dom';\nimport {FormImageSelector} from '@common/ui/images/image-selector';\n\nexport function LandingPageSectionGeneral() {\n return (\n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n
\n );\n}\n\nfunction HeaderSection() {\n const defaultImage = useAppearanceStore(\n s =>\n (s.defaults?.settings.homepage.appearance as LandingPageContent)\n ?.headerImage\n );\n\n return (\n <>\n }\n className=\"mb-20\"\n name=\"settings.homepage.appearance.headerTitle\"\n onFocus={() => {\n appearanceState().preview.setHighlight('[data-testid=\"headerTitle\"]');\n }}\n />\n }\n className=\"mb-30\"\n inputElementType=\"textarea\"\n rows={4}\n name=\"settings.homepage.appearance.headerSubtitle\"\n onFocus={() => {\n appearanceState().preview.setHighlight(\n '[data-testid=\"headerSubtitle\"]'\n );\n }}\n />\n }\n defaultValue={defaultImage}\n diskPrefix=\"homepage\"\n />\n }\n minValue={0}\n step={0.1}\n maxValue={1}\n formatOptions={{style: 'percent'}}\n />\n
\n \n
\n }\n />\n }\n />\n \n );\n}\n\nfunction FooterSection() {\n const defaultImage = useAppearanceStore(\n s =>\n (s.defaults?.settings.homepage.appearance as LandingPageContent)\n ?.footerImage\n );\n return (\n \n }\n className=\"mb-20\"\n name=\"settings.homepage.appearance.footerTitle\"\n onFocus={() => {\n appearanceState().preview.setHighlight('[data-testid=\"footerTitle\"]');\n }}\n />\n }\n className=\"mb-20\"\n name=\"settings.homepage.appearance.footerSubtitle\"\n onFocus={() => {\n appearanceState().preview.setHighlight(\n '[data-testid=\"footerSubtitle\"]'\n );\n }}\n />\n }\n defaultValue={defaultImage}\n diskPrefix=\"homepage\"\n />\n \n );\n}\n\ninterface ColorPickerTriggerProps {\n formKey: string;\n label: ReactNode;\n}\nfunction ColorPickerTrigger({label, formKey}: ColorPickerTriggerProps) {\n const key = formKey as 'settings.homepage.appearance.headerOverlayColor1';\n const {watch, setValue} = useFormContext();\n\n const formValue = watch(key);\n\n const setColor = (value: string | null) => {\n setValue(formKey as any, value, {\n shouldDirty: true,\n });\n };\n\n return (\n {\n setColor(value);\n }}\n >\n \n }\n >\n {label}\n \n {\n setColor(newValue);\n }}\n />\n \n );\n}\n","export function ucFirst(string: T): T {\n if (!string) return string;\n return (string.charAt(0).toUpperCase() + string.slice(1)) as T;\n}\n","import {useControlledState} from '@react-stately/utils';\nimport React, {Fragment, useState} from 'react';\nimport {useController} from 'react-hook-form';\nimport {mergeProps} from '@react-aria/utils';\nimport clsx from 'clsx';\nimport {produce} from 'immer';\nimport {Permission, PermissionRestriction} from '../permission';\nimport {useValueLists} from '../../http/value-lists';\nimport {ucFirst} from '../../utils/string/uc-first';\nimport {Accordion, AccordionItem} from '../../ui/accordion/accordion';\nimport {List, ListItem} from '../../ui/list/list';\nimport {Switch} from '../../ui/forms/toggle/switch';\nimport {TextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {DoneAllIcon} from '../../icons/material/DoneAll';\nimport {Trans} from '../../i18n/trans';\n\ninterface PermissionSelectorProps {\n value?: Permission[];\n onChange?: (value: Permission[]) => void;\n valueListKey?: 'permissions' | 'workspacePermissions';\n}\nexport const PermissionSelector = React.forwardRef<\n HTMLDivElement,\n PermissionSelectorProps\n>(({valueListKey = 'permissions', ...props}, ref) => {\n const {data} = useValueLists([valueListKey]);\n const permissions = data?.permissions || data?.workspacePermissions;\n\n const [value, setValue] = useControlledState(props.value, [], props.onChange);\n const [showAdvanced, setShowAdvanced] = useState(false);\n\n if (!permissions) return null;\n\n const groupedPermissions = buildPermissionList(\n permissions,\n value,\n showAdvanced\n );\n\n const onRestrictionChange = (newPermission: Permission) => {\n const newValue = [...value];\n const index = newValue.findIndex(p => p.id === newPermission.id);\n if (index > -1) {\n newValue.splice(index, 1, newPermission);\n }\n setValue(newValue);\n };\n\n return (\n \n \n {groupedPermissions.map(({groupName, items, anyChecked}) => (\n }\n key={groupName}\n startIcon={anyChecked ? : undefined}\n >\n \n {items.map(permission => {\n const index = value.findIndex(v => v.id === permission.id);\n const isChecked = index > -1;\n\n return (\n
\n {\n if (isChecked) {\n const newValue = [...value];\n newValue.splice(index, 1);\n setValue(newValue);\n } else {\n setValue([...value, permission]);\n }\n }}\n endSection={\n {}}\n />\n }\n description={}\n >\n \n \n {isChecked && (\n \n )}\n
\n );\n })}\n
\n \n ))}\n
\n {\n setShowAdvanced(e.target.checked);\n }}\n >\n \n \n
\n );\n});\n\ninterface RestrictionsProps {\n permission: Permission;\n onChange?: (newPermission: Permission) => void;\n}\nfunction Restrictions({permission, onChange}: RestrictionsProps) {\n if (!permission?.restrictions?.length) return null;\n\n const setRestrictionValue = (\n name: string,\n value: PermissionRestriction['value']\n ) => {\n const nextState = produce(permission, draftState => {\n const restriction = draftState.restrictions.find(r => r.name === name);\n if (restriction) {\n restriction.value = value;\n }\n });\n onChange?.(nextState);\n };\n\n return (\n
\n {permission.restrictions.map((restriction, index) => {\n const isLast = index === permission.restrictions.length - 1;\n\n const name = ;\n const description = restriction.description ? (\n \n ) : undefined;\n\n if (restriction.type === 'bool') {\n return (\n {\n setRestrictionValue(restriction.name, e.target.checked);\n }}\n >\n {name}\n \n );\n }\n\n return (\n {\n setRestrictionValue(\n restriction.name,\n e.target.value === '' ? undefined : parseInt(e.target.value)\n );\n }}\n />\n );\n })}\n
\n );\n}\n\nexport type FormChipFieldProps = PermissionSelectorProps & {\n name: string;\n};\nexport function FormPermissionSelector(props: FormChipFieldProps) {\n const {\n field: {onChange, value = [], ref},\n } = useController({\n name: props.name,\n });\n\n const formProps: Partial = {\n onChange,\n value,\n };\n\n return ;\n}\n\nexport const prettyName = (name: string) => {\n return ucFirst(name.replace('_', ' '));\n};\n\ninterface PermissionGroup {\n groupName: string;\n anyChecked: boolean;\n items: Permission[];\n}\n\n// merge \"restrictions\" from selected value into all permissions to make\n// it easier to bind restriction values to form inputs\nexport function buildPermissionList(\n allPermissions: Permission[],\n selectedPermissions: Permission[],\n showAdvanced: boolean\n) {\n const groupedPermissions: PermissionGroup[] = [];\n\n allPermissions.forEach(permission => {\n const index = selectedPermissions.findIndex(p => p.id === permission.id);\n if (!showAdvanced && permission.advanced) return;\n\n let group: PermissionGroup | undefined = groupedPermissions.find(\n g => g.groupName === permission.group\n );\n if (!group) {\n group = {groupName: permission.group, anyChecked: false, items: []};\n groupedPermissions.push(group);\n }\n\n if (index > -1) {\n const mergedPermission = {\n ...permission,\n restrictions: mergeRestrictions(\n permission.restrictions,\n selectedPermissions[index].restrictions\n ),\n };\n group.anyChecked = true;\n group.items.push(mergedPermission);\n } else {\n group.items.push(permission);\n }\n });\n\n return groupedPermissions;\n}\n\nfunction mergeRestrictions(\n allRestrictions: PermissionRestriction[],\n selectedRestrictions: PermissionRestriction[]\n): PermissionRestriction[] {\n return allRestrictions?.map(restriction => {\n const selected = selectedRestrictions.find(\n r => r.name === restriction.name\n );\n if (selected) {\n return {...restriction, value: selected.value};\n } else {\n return restriction;\n }\n });\n}\n","import {MenuSectionConfig} from '../../../types/appearance-editor-config';\nimport {MenuItemConfig} from '../../../../../core/settings/settings';\nimport mergedAppearanceConfig from '../../../config/merged-appearance-config';\n\nexport function useAvailableRoutes(): Partial[] {\n const menuConfig = mergedAppearanceConfig.sections.menus.config;\n\n if (!menuConfig) return [];\n\n return (menuConfig as MenuSectionConfig).availableRoutes.map(route => {\n return {\n id: route,\n label: route,\n action: route,\n type: 'route',\n target: '_self',\n };\n });\n}\n","export const iconGridStyle = {\n grid: 'flex flex-wrap gap-24',\n button:\n 'flex flex-col items-center rounded hover:bg-hover h-90 aspect-square',\n};\n","import React, {Suspense} from 'react';\nimport {IconTree} from '../../icons/create-svg-icon';\nimport {iconGridStyle} from './icon-grid-style';\nimport {TextField} from '../forms/input-field/text-field/text-field';\nimport {Skeleton} from '../skeleton/skeleton';\nimport {useTrans} from '../../i18n/use-trans';\nimport {AnimatePresence, m} from 'framer-motion';\nimport {opacityAnimation} from '../animation/opacity-animation';\n\nconst skeletons = [...Array(60).keys()];\n\nconst IconList = React.lazy(() => import('./icon-list'));\n\ninterface IconListProps {\n onIconSelected: (icon: IconTree[] | null) => void;\n}\nexport default function IconPicker({onIconSelected}: IconListProps) {\n const {trans} = useTrans();\n const [value, setValue] = React.useState('');\n\n return (\n
\n {\n setValue(e.target.value);\n }}\n placeholder={trans({message: 'Search icons...'})}\n />\n \n \n {skeletons.map((_, index) => (\n
\n \n
\n ))}\n \n }\n >\n \n \n \n \n
\n
\n );\n}\n","import React from 'react';\nimport IconPicker from './icon-picker';\nimport {useDialogContext} from '../overlays/dialog/dialog-context';\nimport {Dialog} from '../overlays/dialog/dialog';\nimport {DialogHeader} from '../overlays/dialog/dialog-header';\nimport {DialogBody} from '../overlays/dialog/dialog-body';\nimport {Trans} from '../../i18n/trans';\n\nexport function IconPickerDialog() {\n return (\n \n \n \n \n \n \n \n \n );\n}\n\nfunction IconPickerWrapper() {\n const {close} = useDialogContext();\n return (\n {\n close(value);\n }}\n />\n );\n}\n","import {useEffect, useRef} from 'react';\n\nexport function usePrevious(value: T) {\n const ref = useRef();\n // Store current value in ref\n useEffect(() => {\n ref.current = value;\n }, [value]); // Only re-run if value changes\n // Return previous value (happens before update in useEffect above)\n return ref.current;\n}\n","import {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {Trans} from '../../i18n/trans';\nimport {useValueLists} from '../../http/value-lists';\nimport {useTrans} from '../../i18n/use-trans';\nimport {FormChipField} from '../../ui/forms/input-field/chip-field/form-chip-field';\nimport {Item} from '../../ui/forms/listbox/item';\nimport {Fragment, useEffect, useMemo} from 'react';\nimport {\n buildPermissionList,\n prettyName,\n} from '../../auth/ui/permission-selector';\nimport {Section} from '../../ui/forms/listbox/section';\nimport {useFormContext} from 'react-hook-form';\nimport {MenuItemConfig} from '../../core/settings/settings';\nimport {FormSelect, Option} from '../../ui/forms/select/select';\nimport {useAvailableRoutes} from '../appearance/sections/menus/hooks/available-routes';\nimport {ButtonBaseProps} from '../../ui/buttons/button-base';\nimport {createSvgIconFromTree, IconTree} from '../../icons/create-svg-icon';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {EditIcon} from '../../icons/material/Edit';\nimport {IconPickerDialog} from '../../ui/icon-picker/icon-picker-dialog';\nimport {message} from '../../i18n/message';\nimport {usePrevious} from '../../utils/hooks/use-previous';\n\ninterface NameProps {\n prefixName: (name: string) => string;\n}\n\ninterface MenuItemFormProps {\n formPathPrefix?: string;\n hideRoleAndPermissionFields?: boolean;\n}\nexport function MenuItemForm({\n formPathPrefix,\n hideRoleAndPermissionFields,\n}: MenuItemFormProps) {\n const {trans} = useTrans();\n const prefixName = (name: string): string => {\n return formPathPrefix ? `${formPathPrefix}.${name}` : name;\n };\n\n return (\n \n }\n placeholder={trans(message('No label...'))}\n startAppend={}\n />\n \n {!hideRoleAndPermissionFields && (\n \n \n \n \n )}\n \n \n );\n}\n\ninterface IconDialogTriggerProps extends ButtonBaseProps, NameProps {}\nfunction IconDialogTrigger({\n prefixName,\n ...buttonProps\n}: IconDialogTriggerProps) {\n const {watch, setValue} = useFormContext();\n const fieldName = prefixName('icon') as 'icon';\n const watchedItemIcon = watch(fieldName);\n const Icon = watchedItemIcon && createSvgIconFromTree(watchedItemIcon);\n return (\n {\n // null will be set explicitly if icon is cleared via icon picker\n if (iconTree || iconTree === null) {\n setValue(fieldName, iconTree, {\n shouldDirty: true,\n });\n }\n }}\n >\n \n {Icon ? : }\n \n \n \n );\n}\n\nfunction DestinationSelector({prefixName}: NameProps) {\n const form = useFormContext();\n const currentType = form.watch(prefixName('type') as 'type');\n const previousType = usePrevious(currentType);\n const {data} = useValueLists(['menuItemCategories']);\n const categories = data?.menuItemCategories || [];\n const selectedCategory = categories.find(c => c.type === currentType);\n const {trans} = useTrans();\n const routeItems = useAvailableRoutes();\n\n // clear \"action\" field when \"type\" field changes\n useEffect(() => {\n if (previousType && previousType !== currentType) {\n form.setValue(prefixName('action') as 'action', '');\n }\n }, [currentType, previousType, form, prefixName]);\n\n return (\n \n }\n >\n \n \n {categories.map(category => (\n \n ))}\n \n {currentType === 'link' && (\n }\n />\n )}\n {currentType === 'route' && (\n }\n searchPlaceholder={trans(message('Search pages'))}\n showSearchField\n selectionMode=\"single\"\n >\n {item => (\n \n {item.label}\n \n )}\n \n )}\n {selectedCategory && (\n }\n >\n {item => (\n \n \n \n )}\n \n )}\n \n );\n}\n\nfunction RoleSelector({prefixName}: NameProps) {\n const {data} = useValueLists(['roles', 'permissions']);\n const roles = data?.roles || [];\n const {trans} = useTrans();\n\n return (\n }\n name={prefixName('roles')}\n chipSize=\"sm\"\n suggestions={roles}\n valueKey=\"id\"\n displayWith={c => roles.find(r => r.id === c.id)?.name}\n >\n {role => (\n \n \n \n )}\n \n );\n}\n\nfunction PermissionSelector({prefixName}: NameProps) {\n const {data} = useValueLists(['roles', 'permissions']);\n const {trans} = useTrans();\n\n const groupedPermissions = useMemo(() => {\n return buildPermissionList(data?.permissions || [], [], false);\n }, [data?.permissions]);\n\n return (\n }\n placeholder={trans({message: 'Add permission...'})}\n chipSize=\"sm\"\n suggestions={groupedPermissions}\n name={prefixName('permissions')}\n valueKey=\"name\"\n >\n {({groupName, items}) => (\n
\n {items.map(permission => (\n }\n >\n \n \n ))}\n
\n )}\n \n );\n}\n\nfunction TargetSelect({prefixName}: NameProps) {\n const form = useFormContext();\n const watchedType = form.watch(prefixName('type') as 'type');\n\n // routes and pages can only be \"_self\"\n if (watchedType !== 'link') {\n return null;\n }\n\n return (\n }\n >\n \n \n \n );\n}\n","import {MenuItemForm} from '@common/admin/menus/menu-item-form';\nimport {Accordion, AccordionItem} from '@common/ui/accordion/accordion';\nimport {Trans} from '@common/i18n/trans';\nimport {appearanceState} from '@common/admin/appearance/appearance-store';\nimport {useState} from 'react';\n\nexport function LandingPageSectionActionButtons() {\n const [expandedValues, setExpandedValues] = useState(['cta1']);\n return (\n {\n setExpandedValues(values as string[]);\n if (values.length) {\n appearanceState().preview.setHighlight(\n `[data-testid=\"${values[0]}\"]`\n );\n }\n }}\n >\n }>\n \n \n }>\n \n \n }>\n \n \n \n );\n}\n","import {Accordion, AccordionItem} from '@common/ui/accordion/accordion';\nimport {Trans} from '@common/i18n/trans';\nimport {\n appearanceState,\n useAppearanceStore,\n} from '@common/admin/appearance/appearance-store';\nimport {useFieldArray} from 'react-hook-form';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {LandingPageContent} from '@app/landing/landing-page-content';\nimport {Button} from '@common/ui/buttons/button';\nimport {AddIcon} from '@common/icons/material/Add';\nimport {useState} from 'react';\nimport {FormImageSelector} from '@common/ui/images/image-selector';\n\nexport function LandingPageSectionPrimaryFeatures() {\n const {fields, remove, append} = useFieldArray({\n name: 'settings.homepage.appearance.primaryFeatures',\n });\n const [expandedValues, setExpandedValues] = useState([0]);\n return (\n
\n {\n setExpandedValues(values as number[]);\n if (values.length) {\n appearanceState().preview.setHighlight(\n `[data-testid=\"primary-root-${values[0]}\"]`\n );\n }\n }}\n >\n {fields.map((field, index) => {\n return (\n }\n >\n \n
\n {\n remove(index);\n }}\n >\n \n \n
\n \n );\n })}\n \n
\n }\n onClick={() => {\n append({});\n setExpandedValues([fields.length]);\n }}\n >\n \n \n
\n
\n );\n}\n\ninterface FeatureFormProps {\n index: number;\n}\nfunction FeatureForm({index}: FeatureFormProps) {\n const defaultImage = useAppearanceStore(\n s =>\n (s.defaults?.settings.homepage.appearance as LandingPageContent)\n ?.primaryFeatures[index]?.image\n );\n\n return (\n <>\n }\n defaultValue={defaultImage}\n diskPrefix=\"homepage\"\n />\n }\n className=\"mb-20\"\n onFocus={() => {\n appearanceState().preview.setHighlight(\n `[data-testid=\"primary-title-${index}\"]`\n );\n }}\n />\n }\n className=\"mb-20\"\n inputElementType=\"textarea\"\n rows={4}\n onFocus={() => {\n appearanceState().preview.setHighlight(\n `[data-testid=\"primary-subtitle-${index}\"]`\n );\n }}\n />\n \n );\n}\n","import {Accordion, AccordionItem} from '@common/ui/accordion/accordion';\nimport {Trans} from '@common/i18n/trans';\nimport {appearanceState} from '@common/admin/appearance/appearance-store';\nimport {useFieldArray} from 'react-hook-form';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {LandingPageContent} from '@app/landing/landing-page-content';\nimport {Button} from '@common/ui/buttons/button';\nimport {AddIcon} from '@common/icons/material/Add';\nimport {useState} from 'react';\nimport {FormImageSelector} from '@common/ui/images/image-selector';\n\nexport function LandingPageSecondaryFeatures() {\n const {fields, remove, append} = useFieldArray({\n name: 'settings.homepage.appearance.secondaryFeatures',\n });\n const [expandedValues, setExpandedValues] = useState([0]);\n return (\n
\n {\n setExpandedValues(values as number[]);\n if (values.length) {\n appearanceState().preview.setHighlight(\n `[data-testid=\"secondary-root-${values[0]}\"]`\n );\n }\n }}\n >\n {fields.map((field, index) => {\n return (\n }\n >\n \n
\n {\n remove(index);\n }}\n >\n \n \n
\n \n );\n })}\n \n
\n }\n onClick={() => {\n append({});\n setExpandedValues([fields.length]);\n }}\n >\n \n \n
\n
\n );\n}\n\ninterface FeatureFormProps {\n index: number;\n}\nfunction FeatureForm({index}: FeatureFormProps) {\n return (\n <>\n }\n defaultValue={getDefaultImage(index)}\n diskPrefix=\"homepage\"\n />\n }\n className=\"mb-20\"\n onFocus={() => {\n appearanceState().preview.setHighlight(\n `[data-testid=\"secondary-title-${index}\"]`\n );\n }}\n />\n }\n className=\"mb-20\"\n inputElementType=\"textarea\"\n rows={4}\n onFocus={() => {\n appearanceState().preview.setHighlight(\n `[data-testid=\"secondary-subtitle-${index}\"]`\n );\n }}\n />\n }\n className=\"mb-20\"\n inputElementType=\"textarea\"\n rows={4}\n onFocus={() => {\n appearanceState().preview.setHighlight(\n `[data-testid=\"secondary-description-${index}\"]`\n );\n }}\n />\n \n );\n}\n\nfunction getDefaultImage(index: number): string | undefined {\n return (\n appearanceState().defaults?.settings.homepage\n .appearance as LandingPageContent\n ).secondaryFeatures[index]?.image;\n}\n","import {\n IAppearanceConfig,\n MenuSectionConfig,\n SeoSettingsSectionConfig,\n} from '@common/admin/appearance/types/appearance-editor-config';\nimport {message} from '@common/i18n/message';\nimport {LandingPageSectionGeneral} from '@app/admin/appearance/sections/landing-page-section/landing-page-section-general';\nimport {LandingPageSectionActionButtons} from '@app/admin/appearance/sections/landing-page-section/landing-page-section-action-buttons';\nimport {LandingPageSectionPrimaryFeatures} from '@app/admin/appearance/sections/landing-page-section/landing-page-section-primary-features';\nimport {LandingPageSecondaryFeatures} from '@app/admin/appearance/sections/landing-page-section/landing-page-section-secondary-features';\nimport {AppearanceEditorBreadcrumbItem} from '@common/admin/appearance/types/appearance-editor-section';\n\nexport const AppAppearanceConfig: IAppearanceConfig = {\n preview: {\n defaultRoute: 'drive',\n navigationRoutes: ['s', 'drive'],\n },\n sections: {\n 'landing-page': {\n label: message('Landing Page'),\n position: 1,\n previewRoute: '/',\n routes: [\n {path: 'landing-page', element: },\n {\n path: 'landing-page/action-buttons',\n element: ,\n },\n {\n path: 'landing-page/primary-features',\n element: ,\n },\n {\n path: 'landing-page/secondary-features',\n element: ,\n },\n ],\n buildBreadcrumb: (pathname, formValue) => {\n const parts = pathname.split('/').filter(p => !!p);\n const sectionName = parts.pop();\n // admin/appearance\n const breadcrumb: AppearanceEditorBreadcrumbItem[] = [\n {\n label: message('Landing page'),\n location: 'landing-page',\n },\n ];\n if (sectionName === 'action-buttons') {\n breadcrumb.push({\n label: message('Action buttons'),\n location: 'landing-page/action-buttons',\n });\n }\n\n if (sectionName === 'primary-features') {\n breadcrumb.push({\n label: message('Primary features'),\n location: 'landing-page/primary-features',\n });\n }\n\n if (sectionName === 'secondary-features') {\n breadcrumb.push({\n label: message('Secondary features'),\n location: 'landing-page/secondary-features',\n });\n }\n\n return breadcrumb;\n },\n },\n // missing label will get added by deepMerge from default config\n // @ts-ignore\n menus: {\n config: {\n positions: [\n 'drive-navbar',\n 'drive-sidebar',\n 'homepage-navbar',\n 'shareable-link-page',\n 'footer',\n 'footer-secondary',\n ],\n availableRoutes: [\n '/drive',\n '/drive/shares',\n '/drive/recent',\n '/drive/starred',\n '/drive/trash',\n ],\n } as MenuSectionConfig,\n },\n // @ts-ignore\n 'seo-settings': {\n config: {\n pages: [\n {\n key: 'landing-page',\n label: message('Landing page'),\n },\n {\n key: 'shareable-link-page',\n label: message('Shareable link page'),\n },\n ],\n } as SeoSettingsSectionConfig,\n },\n },\n};\n","import deepMerge from 'deepmerge';\nimport {DefaultAppearanceConfig} from '@common/admin/appearance/config/default-appearance-config';\nimport {AppAppearanceConfig} from '@app/admin/appearance/app-appearance-config';\nimport {IAppearanceConfig} from '@common/admin/appearance/types/appearance-editor-config';\n\nconst mergedAppearanceConfig = deepMerge.all([\n DefaultAppearanceConfig,\n AppAppearanceConfig,\n]);\n\nexport default mergedAppearanceConfig as IAppearanceConfig;\n","import {create} from 'zustand';\nimport {subscribeWithSelector} from 'zustand/middleware';\nimport {immer} from 'zustand/middleware/immer';\nimport {Settings} from '../../core/settings/settings';\nimport type {IAppearanceConfig} from './types/appearance-editor-config';\nimport {AllCommands} from './commands/commands';\nimport mergedAppearanceConfig from './config/merged-appearance-config';\nimport {BootstrapData} from '../../core/bootstrap-data/bootstrap-data';\n\nexport interface AppearanceValues {\n appearance: {\n env: {app_name: string; app_url: string};\n seo: {\n key: string;\n name: string;\n value: string;\n defaultValue: string;\n }[];\n themes: BootstrapData['themes'];\n custom_code: {\n css?: string;\n html?: string;\n };\n };\n settings: Settings;\n}\n\nexport interface AppearanceDefaults {\n appearance: {\n themes: {\n light: Record;\n dark: Record;\n };\n };\n settings: Settings;\n}\n\ninterface AppearanceStore {\n defaults: AppearanceDefaults | null;\n iframeWindow: Window | null;\n config: IAppearanceConfig | null;\n setDefaults: (value: AppearanceDefaults) => void;\n setIframeWindow: (value: Window) => void;\n preview: {\n navigate: (sectionName: string) => void;\n setValues: (settings: AppearanceValues) => void;\n setThemeColor: (name: string, value: string) => void;\n setActiveTheme: (themeId: number | string) => void;\n setHighlight: (selector: string | null | undefined) => void;\n setCustomCode: (mode: 'css' | 'html', value?: string) => void;\n };\n}\n\nexport const useAppearanceStore = create()(\n subscribeWithSelector(\n immer((set, get) => ({\n defaults: null,\n iframeWindow: null,\n config: mergedAppearanceConfig,\n setDefaults: value => {\n set(state => {\n state.defaults = {...value};\n });\n },\n setIframeWindow: value => {\n set(() => {\n return {iframeWindow: value};\n });\n },\n\n preview: {\n navigate: sectionName => {\n const section = get().config?.sections[sectionName];\n const route = section?.previewRoute || '/';\n const preview = get().iframeWindow;\n if (route) {\n postMessage(preview, {type: 'navigate', to: route});\n }\n },\n setValues: values => {\n const preview = get().iframeWindow;\n postMessage(preview, {type: 'setValues', values});\n },\n setThemeColor: (name, value) => {\n const preview = get().iframeWindow;\n postMessage(preview, {type: 'setThemeColor', name, value});\n },\n setActiveTheme: themeId => {\n const preview = get().iframeWindow;\n postMessage(preview, {type: 'setActiveTheme', themeId});\n },\n setCustomCode: (mode, value) => {\n const preview = get().iframeWindow;\n postMessage(preview, {type: 'setCustomCode', mode, value});\n },\n setHighlight: selector => {\n set(() => {\n let node: HTMLElement | null = null;\n const document = get().iframeWindow?.document;\n if (document && selector) {\n node = document.querySelector(selector);\n }\n if (node) {\n requestAnimationFrame(() => {\n if (!node) return;\n node.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n });\n });\n }\n });\n },\n },\n }))\n )\n);\n\nfunction postMessage(window: Window | null, command: AllCommands) {\n if (window) {\n window.postMessage({source: 'be-appearance-editor', ...command}, '*');\n }\n}\n\nexport function appearanceState() {\n return useAppearanceStore.getState();\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {AppearanceValues} from '@common/admin/appearance/appearance-store';\nimport {toast} from '@common/ui/toast/toast';\nimport {apiClient, queryClient} from '@common/http/query-client';\nimport {showHttpErrorToast} from '@common/utils/http/show-http-error-toast';\nimport {message} from '@common/i18n/message';\n\ninterface Response extends BackendResponse {}\n\nexport function useSaveAppearanceChanges() {\n return useMutation({\n mutationFn: (values: Partial) =>\n saveAppearanceChanges(values),\n onSuccess: async () => {\n await queryClient.invalidateQueries({\n queryKey: ['admin/appearance/values'],\n });\n toast(message('Changes saved'));\n },\n onError: err => showHttpErrorToast(err),\n });\n}\n\nfunction saveAppearanceChanges(\n changes: Partial,\n): Promise {\n return apiClient.post(`admin/appearance`, {changes}).then(r => r.data);\n}\n","import {useQuery} from '@tanstack/react-query';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {apiClient} from '@common/http/query-client';\nimport {AppearanceDefaults, AppearanceValues} from '../appearance-store';\n\nexport interface FetchAppearanceValuesResponse extends BackendResponse {\n values: AppearanceValues;\n defaults: AppearanceDefaults;\n}\n\nexport function useAppearanceValues() {\n return useQuery({\n queryKey: ['admin/appearance/values'],\n queryFn: () => fetchAppearanceValues(),\n staleTime: Infinity,\n });\n}\n\nfunction fetchAppearanceValues(): Promise {\n return apiClient\n .get('admin/appearance/values')\n .then(response => response.data);\n}\n","import {Link, useLocation} from 'react-router-dom';\nimport clsx from 'clsx';\nimport {Fragment, useEffect, useState} from 'react';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {KeyboardArrowLeftIcon} from '../../icons/material/KeyboardArrowLeft';\nimport {KeyboardArrowRightIcon} from '../../icons/material/KeyboardArrowRight';\nimport {Trans} from '../../i18n/trans';\nimport {MixedText} from '../../i18n/mixed-text';\nimport {useFormContext} from 'react-hook-form';\nimport {appearanceState, AppearanceValues} from './appearance-store';\nimport {AppearanceEditorBreadcrumbItem} from './types/appearance-editor-section';\nimport {message} from '../../i18n/message';\n\nexport function SectionHeader() {\n const {pathname} = useLocation();\n const {getValues} = useFormContext();\n const [breadcrumb, setBreadcrumb] = useState<\n AppearanceEditorBreadcrumbItem[] | null\n >(null);\n\n useEffect(() => {\n const [, , sectionName] = pathname.split('/').filter(p => !!p);\n if (sectionName) {\n const section = appearanceState().config?.sections[sectionName];\n if (section) {\n setBreadcrumb([\n {\n label: message('Appearance'),\n location: '',\n },\n ...section.buildBreadcrumb(pathname, getValues()),\n ]);\n // bail, so breadcrumb is not cleared below\n return;\n }\n }\n setBreadcrumb(null);\n }, [pathname, getValues]);\n\n // not need to show section header if already at root\n if (!breadcrumb || breadcrumb.length < 2) {\n return null;\n }\n\n return (\n
\n \n \n \n
\n
\n \n
\n
\n {breadcrumb.map((item, index) => {\n const isLast = breadcrumb.length - 1 === index;\n const isFirst = index === 0;\n const label = ;\n\n if (isFirst) {\n return null;\n }\n\n return (\n \n \n {label}\n
\n {!isLast && (\n \n )}\n \n );\n })}\n
\n
\n \n );\n}\n","import {Link, Navigate, Outlet, useLocation} from 'react-router-dom';\nimport {Fragment, useEffect, useRef} from 'react';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {CloseIcon} from '../../icons/material/Close';\nimport {Button} from '../../ui/buttons/button';\nimport {appearanceState, AppearanceValues} from './appearance-store';\nimport {useSaveAppearanceChanges} from './requests/save-appearance-changes';\nimport {useAppearanceValues} from './requests/appearance-values';\nimport {Trans} from '../../i18n/trans';\nimport {useForm, useFormContext} from 'react-hook-form';\nimport {Form} from '../../ui/forms/form';\nimport {ProgressCircle} from '../../ui/progress/progress-circle';\nimport {SectionHeader} from './section-header';\nimport {FileUploadProvider} from '../../uploads/uploader/file-upload-provider';\nimport {useAppearanceEditorMode} from './commands/use-appearance-editor-mode';\nimport {StaticPageTitle} from '../../seo/static-page-title';\nimport {useSettings} from '../../core/settings/use-settings';\n\nexport function AppearanceLayout() {\n const {isAppearanceEditorActive} = useAppearanceEditorMode();\n const {data} = useAppearanceValues();\n const {base_url} = useSettings();\n const iframeRef = useRef(null);\n const {pathname} = useLocation();\n\n useEffect(() => {\n // only set defaults snapshot once on route init\n if (data?.defaults && !appearanceState().defaults) {\n appearanceState().setDefaults(data.defaults);\n }\n }, [data]);\n\n useEffect(() => {\n if (iframeRef.current) {\n appearanceState().setIframeWindow(iframeRef.current.contentWindow!);\n }\n }, []);\n\n useEffect(() => {\n const sectionName = pathname.split('/')[3];\n appearanceState().preview.navigate(sectionName);\n }, [pathname]);\n\n // make sure appearance editor iframe can't be nested\n if (isAppearanceEditorActive) {\n return ;\n }\n\n return (\n
\n \n \n \n \n
\n \n
\n
\n );\n}\n\ninterface SidebarProps {\n values: AppearanceValues | undefined;\n}\nfunction Sidebar({values}: SidebarProps) {\n const spinner = (\n
\n \n
\n );\n\n return (\n \n
\n {values ? : spinner}\n
\n
\n );\n}\n\ninterface AppearanceFormProps {\n defaultValues: AppearanceValues;\n}\nfunction AppearanceForm({defaultValues}: AppearanceFormProps) {\n const form = useForm({defaultValues});\n const {watch, reset} = form;\n const saveChanges = useSaveAppearanceChanges();\n\n useEffect(() => {\n const subscription = watch(value => {\n appearanceState().preview.setValues(value as AppearanceValues);\n });\n return () => subscription.unsubscribe();\n }, [watch]);\n\n return (\n {\n saveChanges.mutate(values, {\n onSuccess: () => reset(values),\n });\n }}\n >\n
\n \n
\n \n \n \n
\n \n );\n}\n\ninterface HeaderProps {\n isLoading: boolean;\n}\nfunction Header({isLoading}: HeaderProps) {\n const {\n formState: {dirtyFields},\n } = useFormContext();\n const isDirty = Object.keys(dirtyFields).length;\n return (\n
\n \n \n \n
\n \n
\n \n {isDirty ? : }\n \n
\n );\n}\n","import {Link, useNavigate} from 'react-router-dom';\nimport {AppearanceValues} from '../../appearance-store';\nimport {Button} from '../../../../ui/buttons/button';\nimport {AddIcon} from '../../../../icons/material/Add';\nimport {Trans} from '../../../../i18n/trans';\nimport {useFieldArray} from 'react-hook-form';\nimport {AppearanceButton} from '../../appearance-button';\nimport {nanoid} from 'nanoid';\nimport {useTrans} from '../../../../i18n/use-trans';\nimport {message} from '../../../../i18n/message';\nimport {Fragment} from 'react';\n\nexport function MenuList() {\n const navigate = useNavigate();\n const {trans} = useTrans();\n const {fields, append} = useFieldArray<\n AppearanceValues,\n 'settings.menus',\n 'key'\n >({\n name: 'settings.menus',\n keyName: 'key',\n });\n\n return (\n \n
\n {fields.map((field, index) => (\n \n {field.name}\n \n ))}\n
\n
\n }\n size=\"xs\"\n onClick={() => {\n const id = nanoid(10);\n append({\n name: trans(\n message('New menu :number', {\n values: {number: fields.length + 1},\n })\n ),\n id,\n positions: [],\n items: [],\n });\n navigate(`${fields.length}`);\n }}\n >\n \n \n
\n
\n );\n}\n","import {useForm} from 'react-hook-form';\nimport {Accordion, AccordionItem} from '@common/ui/accordion/accordion';\nimport {Form} from '@common/ui/forms/form';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {MenuItemConfig} from '@common/core/settings/settings';\nimport {AddIcon} from '@common/icons/material/Add';\nimport {Button} from '@common/ui/buttons/button';\nimport {useAvailableRoutes} from '@common/admin/appearance/sections/menus/hooks/available-routes';\nimport {ucFirst} from '@common/utils/string/uc-first';\nimport {List, ListItem} from '@common/ui/list/list';\nimport {useDialogContext} from '@common/ui/overlays/dialog/dialog-context';\nimport {Dialog} from '@common/ui/overlays/dialog/dialog';\nimport {DialogHeader} from '@common/ui/overlays/dialog/dialog-header';\nimport {DialogBody} from '@common/ui/overlays/dialog/dialog-body';\nimport {Trans} from '@common/i18n/trans';\nimport {useValueLists} from '@common/http/value-lists';\nimport {ReactNode} from 'react';\nimport {nanoid} from 'nanoid';\n\ninterface AddMenuItemDialogProps {\n title?: ReactNode;\n}\nexport function AddMenuItemDialog({\n title = ,\n}: AddMenuItemDialogProps) {\n const {data} = useValueLists(['menuItemCategories']);\n const categories = data?.menuItemCategories || [];\n const routeItems = useAvailableRoutes();\n\n return (\n \n {title}\n \n \n }\n bodyClassName=\"max-h-240 overflow-y-auto\"\n >\n \n \n }\n bodyClassName=\"max-h-240 overflow-y-auto\"\n >\n \n \n {categories.map(category => (\n }\n >\n \n \n ))}\n \n \n \n );\n}\n\nfunction AddCustomLink() {\n const form = useForm({\n defaultValues: {\n id: nanoid(6),\n type: 'link',\n target: '_blank',\n },\n });\n const {close} = useDialogContext();\n\n return (\n {\n close(value);\n }}\n >\n }\n className=\"mb-20\"\n />\n }\n className=\"mb-20\"\n />\n
\n \n
\n \n );\n}\n\ninterface AddRouteProps {\n items: Partial[];\n}\nfunction AddRoute({items}: AddRouteProps) {\n const {close} = useDialogContext();\n\n return (\n \n {items.map(item => {\n return (\n }\n onSelected={() => {\n if (item.label) {\n const last = item.label.split('/').pop();\n item.label = last ? ucFirst(last) : item.label;\n item.id = nanoid(6);\n }\n close(item);\n }}\n >\n {item.label}\n \n );\n })}\n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const DragIndicatorIcon = createSvgIcon(\n \n, 'DragIndicatorOutlined');\n","export default \"__VITE_ASSET__abcb02f6__\"","import {clamp} from '../number/clamp';\n\nexport function moveItemInArray(\n array: T[],\n fromIndex: number,\n toIndex: number\n): T[] {\n const from = clamp(fromIndex, 0, array.length - 1);\n const to = clamp(toIndex, 0, array.length - 1);\n\n if (from === to) {\n return array;\n }\n\n const target = array[from];\n const delta = to < from ? -1 : 1;\n\n for (let i = from; i !== to; i += delta) {\n array[i] = array[i + delta];\n }\n\n array[to] = target;\n\n return array;\n}\n","export function moveItemInNewArray(\n array: T[],\n from: number,\n to: number\n): T[] {\n const newArray = array.slice();\n newArray.splice(\n to < 0 ? newArray.length + to : to,\n 0,\n newArray.splice(from, 1)[0]\n );\n\n return newArray;\n}\n","import {DraggableId, DragPreviewRenderer, useDraggable} from './use-draggable';\nimport {useDroppable} from './use-droppable';\nimport {RefObject, useEffect, useRef} from 'react';\nimport {getScrollParent, mergeProps} from '@react-aria/utils';\nimport {moveItemInArray} from '@common/utils/array/move-item-in-array';\nimport {droppables} from './drag-state';\nimport {moveItemInNewArray} from '@common/utils/array/move-item-in-new-array';\nimport {updateRects} from '@common/ui/interactions/dnd/update-rects';\n\nlet sortSession: null | {\n // items in this list will be moved when user is sorting\n sortables: DraggableId[];\n\n // sortable user started dragging to start this session\n activeSortable: DraggableId;\n activeIndex: number;\n\n // final index sortable was dropped in and should be moved to\n finalIndex: number;\n\n // drop position for displaying line preview\n dropPosition: DropPosition;\n // element that currently has a line preview at the top or bottom\n linePreviewEl?: HTMLElement;\n scrollParent?: Element;\n scrollListener: () => void;\n} = null;\n\nexport type DropPosition = 'before' | 'after' | null;\n\nexport interface UseSortableProps {\n item: DraggableId;\n items: DraggableId[];\n onSortStart?: () => void;\n onSortEnd?: (oldIndex: number, newIndex: number) => void;\n onDragEnd?: () => void;\n onDropPositionChange?: (dropPosition: DropPosition) => void;\n ref: RefObject;\n type: string;\n preview?: RefObject;\n previewVariant?: 'line' | 'liveSort';\n disabled?: boolean;\n}\nexport function useSortable({\n item,\n items,\n type,\n ref,\n onSortEnd,\n onSortStart,\n onDragEnd,\n preview,\n disabled,\n onDropPositionChange,\n previewVariant = 'liveSort',\n}: UseSortableProps) {\n const dropPosition = useRef(null);\n\n // todo: issue with sorting after scrolling menu editor item list\n\n // update sortables and active index, in case we lazy load more items while sorting\n useEffect(() => {\n if (sortSession && sortSession.sortables.length !== items.length) {\n sortSession.sortables = [...items];\n sortSession.activeIndex = items.indexOf(item);\n }\n }, [items, item]);\n\n const {draggableProps, dragHandleRef} = useDraggable({\n id: item,\n ref,\n type,\n preview,\n disabled,\n onDragStart: () => {\n dropPosition.current = null;\n sortSession = {\n sortables: [...items],\n activeSortable: item,\n activeIndex: items.indexOf(item),\n finalIndex: items.indexOf(item),\n dropPosition: null,\n scrollParent: ref.current ? getScrollParent(ref.current) : undefined,\n scrollListener: () => {\n updateRects(droppables);\n },\n };\n\n if (previewVariant === 'liveSort') {\n addSortStyles();\n }\n onSortStart?.();\n sortSession.scrollParent?.addEventListener(\n 'scroll',\n sortSession.scrollListener\n );\n },\n onDragEnd: () => {\n if (!sortSession) return;\n\n if (previewVariant === 'liveSort') {\n removeSortStyles();\n }\n\n sortSession.dropPosition = null;\n onDropPositionChange?.(sortSession.dropPosition);\n if (sortSession.activeIndex !== sortSession.finalIndex) {\n onSortEnd?.(sortSession.activeIndex, sortSession.finalIndex);\n }\n sortSession.scrollParent?.removeEventListener(\n 'scroll',\n sortSession.scrollListener\n );\n clearLinePreview();\n // call \"onDragEnd\" after \"onSortEnd\", so listener has a chance to use sort session data\n onDragEnd?.();\n sortSession = null;\n },\n getData: () => {},\n });\n\n const {droppableProps} = useDroppable({\n id: item,\n ref,\n types: [type],\n disabled,\n allowDragEventsFromItself: true,\n onDragOver: (target, e) => {\n if (!sortSession || previewVariant !== 'line') {\n return;\n }\n\n const previousPosition = sortSession.dropPosition;\n let newPosition: DropPosition = null;\n\n const rect = droppables.get(item)?.rect;\n if (rect) {\n const midY = rect.top + rect.height / 2;\n if (e.clientY <= midY) {\n newPosition = 'before';\n } else if (e.clientY >= midY) {\n newPosition = 'after';\n }\n }\n\n if (newPosition !== previousPosition) {\n const overIndex = sortSession.sortables.indexOf(item);\n sortSession.dropPosition = newPosition;\n onDropPositionChange?.(sortSession.dropPosition);\n\n clearLinePreview();\n if (ref.current) {\n if (sortSession.dropPosition === 'after') {\n addLinePreview(ref.current, 'bottom');\n } else {\n // if it's the first row, add preview to the top border, as there's no previous element\n if (overIndex === 0) {\n addLinePreview(ref.current, 'top');\n // otherwise add preview to the bottom border of the previous row\n } else {\n const droppableId = sortSession.sortables[overIndex - 1];\n const droppable = droppables.get(droppableId);\n if (droppable?.ref.current) {\n addLinePreview(droppable.ref.current, 'bottom');\n }\n }\n }\n }\n\n const itemIndex = items.indexOf(item);\n\n // don't move item at all if hovering over itself\n if (sortSession.activeIndex === itemIndex) {\n sortSession.finalIndex = sortSession.activeIndex;\n return;\n }\n\n // adjust final drop index based on whether we're dropping drag target after or before it's original index\n // this is needed, so we get the same index if target is dropped after current item or before next item\n const dragDirection =\n overIndex > sortSession.activeIndex ? 'after' : 'before';\n if (dragDirection === 'after') {\n sortSession.finalIndex =\n sortSession.dropPosition === 'before' ? itemIndex - 1 : itemIndex;\n } else {\n sortSession.finalIndex =\n sortSession.dropPosition === 'after' ? itemIndex + 1 : itemIndex;\n }\n }\n },\n onDragEnter: () => {\n if (!sortSession || previewVariant === 'line') return;\n\n const overIndex = sortSession.sortables.indexOf(item);\n const oldIndex = sortSession.sortables.indexOf(\n sortSession.activeSortable\n );\n\n moveItemInArray(sortSession.sortables, oldIndex, overIndex);\n const rects = sortSession.sortables.map(s => droppables.get(s)?.rect);\n\n sortSession.sortables.forEach((sortable, index) => {\n if (!sortSession) return;\n\n const newRects = moveItemInNewArray(\n rects,\n overIndex,\n sortSession.activeIndex\n );\n const oldRect = rects[index];\n const newRect = newRects[index];\n const sortableTarget = droppables.get(sortable);\n\n if (sortableTarget?.ref.current && newRect && oldRect) {\n const x = newRect.left - oldRect.left;\n const y = newRect.top - oldRect.top;\n sortableTarget.ref.current.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n }\n });\n\n sortSession.finalIndex = overIndex;\n },\n onDragLeave: () => {\n if (!sortSession || previewVariant !== 'line') {\n return;\n }\n sortSession.dropPosition = null;\n onDropPositionChange?.(sortSession.dropPosition);\n },\n });\n\n return {\n sortableProps: {...mergeProps(draggableProps, droppableProps)},\n dragHandleRef,\n };\n}\n\nconst transition = 'transform 0.2s cubic-bezier(0.2, 0, 0, 1)';\n\nfunction addSortStyles() {\n if (!sortSession) return;\n sortSession.sortables.forEach((sortable, index) => {\n const droppable = droppables.get(sortable);\n if (!droppable?.ref.current) return;\n\n droppable.ref.current.style.transition = transition;\n\n if (sortSession?.activeIndex === index) {\n droppable.ref.current.style.opacity = '0.4';\n }\n });\n}\n\n// clear any styles and transforms applied to sortables during sorting\nfunction removeSortStyles() {\n if (!sortSession) return;\n sortSession.sortables.forEach(sortable => {\n const droppable = droppables.get(sortable);\n if (droppable?.ref.current) {\n droppable.ref.current.style.transform = '';\n droppable.ref.current.style.transition = '';\n droppable.ref.current.style.opacity = '';\n droppable.ref.current.style.zIndex = '';\n }\n });\n}\n\nfunction clearLinePreview() {\n if (sortSession?.linePreviewEl) {\n sortSession.linePreviewEl.style.borderBottomColor = '';\n sortSession.linePreviewEl.style.borderTopColor = '';\n sortSession.linePreviewEl = undefined;\n }\n}\n\nfunction addLinePreview(el: HTMLElement, side: 'top' | 'bottom') {\n const color = 'rgb(var(--be-primary))';\n if (side === 'top') {\n el.style.borderTopColor = color;\n } else {\n el.style.borderBottomColor = color;\n }\n if (sortSession) {\n sortSession.linePreviewEl = el;\n }\n}\n","import {\n FieldArrayWithId,\n useFieldArray,\n UseFieldArrayReturn,\n useFormContext,\n} from 'react-hook-form';\nimport {Fragment, useEffect, useMemo, useRef} from 'react';\nimport {Link, useNavigate, useParams} from 'react-router-dom';\nimport {MenuSectionConfig} from '../../types/appearance-editor-config';\nimport {MenuItemConfig} from '@common/core/settings/settings';\nimport {\n appearanceState,\n AppearanceValues,\n useAppearanceStore,\n} from '../../appearance-store';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {Button} from '@common/ui/buttons/button';\nimport {AddMenuItemDialog} from '@common/admin/appearance/sections/menus/add-menu-item-dialog';\nimport {AppearanceButton} from '@common/admin/appearance/appearance-button';\nimport {AddIcon} from '@common/icons/material/Add';\nimport {DragIndicatorIcon} from '@common/icons/material/DragIndicator';\nimport {ConfirmationDialog} from '@common/ui/overlays/dialog/confirmation-dialog';\nimport {IllustratedMessage} from '@common/ui/images/illustrated-message';\nimport {SvgImage} from '@common/ui/images/svg-image/svg-image';\nimport {DeleteIcon} from '@common/icons/material/Delete';\nimport {DialogTrigger} from '@common/ui/overlays/dialog/dialog-trigger';\nimport {Option} from '../../../../ui/forms/select/select';\nimport {Trans} from '@common/i18n/trans';\nimport dropdownMenu from './dropdown-menu.svg';\nimport {FormChipField} from '@common/ui/forms/input-field/chip-field/form-chip-field';\nimport {\n useSortable,\n UseSortableProps,\n} from '@common/ui/interactions/dnd/use-sortable';\nimport {IconButton} from '@common/ui/buttons/icon-button';\nimport {createSvgIconFromTree} from '@common/icons/create-svg-icon';\nimport {useSettings} from '@common/core/settings/use-settings';\n\nexport function MenuEditor() {\n const {menuIndex} = useParams();\n const navigate = useNavigate();\n\n const {getValues} = useFormContext();\n const formPath = `settings.menus.${menuIndex!}` as 'settings.menus.0';\n const menu = getValues(formPath);\n\n useEffect(() => {\n // go to menu list, if menu can't be found\n if (!menu) {\n navigate('/admin/appearance/menus');\n } else {\n appearanceState().preview.setHighlight(`[data-menu-id=\"${menu.id}\"]`);\n }\n }, [navigate, menu]);\n\n if (!menu) {\n return null;\n }\n\n return ;\n}\n\ninterface MenuEditorFormProps {\n formPath: 'settings.menus.0';\n}\nfunction MenuEditorSection({formPath}: MenuEditorFormProps) {\n const {\n site: {has_mobile_app},\n } = useSettings();\n const menuSectionConfig = useAppearanceStore(\n s => s.config?.sections.menus.config\n ) as MenuSectionConfig;\n\n const menuPositions = useMemo(() => {\n const positions = [...menuSectionConfig?.positions];\n if (has_mobile_app) {\n positions.push('mobile-app-about');\n }\n return positions.map(position => ({\n key: position,\n name: position.replaceAll('-', ' '),\n }));\n }, [menuSectionConfig, has_mobile_app]);\n\n const fieldArray = useFieldArray<\n AppearanceValues,\n `settings.menus.0.items`,\n 'key'\n >({\n name: `${formPath}.items`,\n keyName: 'key',\n });\n\n return (\n \n
\n }\n className=\"mb-20\"\n autoFocus\n />\n }\n description={\n \n }\n >\n {menuPositions.map(item => (\n \n ))}\n \n
\n \n
\n \n
\n
\n );\n}\n\ninterface ItemListProps {\n fieldArray: UseFieldArrayReturn<\n AppearanceValues,\n 'settings.menus.0.items',\n 'key'\n >;\n}\nfunction MenuItemsManager({fieldArray: {append, fields, move}}: ItemListProps) {\n const navigate = useNavigate();\n\n return (\n \n
\n \n {\n if (menuItemConfig) {\n append({...menuItemConfig});\n navigate(`items/${fields.length}`);\n }\n }}\n >\n }\n >\n \n \n \n \n
\n
\n {fields.map((item, index) => (\n {\n move(oldIndex, newIndex);\n }}\n />\n ))}\n {!fields.length ? (\n }\n title={}\n description={\n \n }\n />\n ) : null}\n
\n
\n );\n}\n\nfunction DeleteMenuTrigger() {\n const navigate = useNavigate();\n const {menuIndex} = useParams();\n const {fields, remove} = useFieldArray<\n AppearanceValues,\n 'settings.menus',\n 'key'\n >({\n name: 'settings.menus',\n keyName: 'key',\n });\n if (!menuIndex) return null;\n const menu = fields[+menuIndex];\n\n return (\n {\n if (isConfirmed) {\n const index = fields.findIndex(m => m.id === menu.id);\n remove(index);\n navigate('/admin/appearance/menus');\n }\n }}\n >\n }\n >\n \n \n }\n body={\n \n }\n confirm={}\n />\n \n );\n}\n\ninterface MenuListItemProps {\n item: MenuItemConfig;\n items: FieldArrayWithId[];\n index: number;\n onSortEnd: UseSortableProps['onSortEnd'];\n}\nfunction MenuListItem({item, items, index, onSortEnd}: MenuListItemProps) {\n const ref = useRef(null);\n const {sortableProps, dragHandleRef} = useSortable({\n item,\n items,\n type: 'menuEditorSortable',\n ref,\n onSortEnd,\n previewVariant: 'liveSort',\n });\n\n const Icon = item.icon && createSvgIconFromTree(item.icon);\n const iconOnlyLabel = (\n
\n {Icon && }\n ()\n
\n );\n\n return (\n \n \n
\n \n \n \n
{item.label || iconOnlyLabel}
\n
\n \n
\n );\n}\n","import {useFieldArray, useFormContext} from 'react-hook-form';\nimport {Fragment, useEffect} from 'react';\nimport {appearanceState, AppearanceValues} from '../../appearance-store';\nimport {Button} from '@common/ui/buttons/button';\nimport {DeleteIcon} from '../../../../icons/material/Delete';\nimport {ConfirmationDialog} from '../../../../ui/overlays/dialog/confirmation-dialog';\nimport {DialogTrigger} from '../../../../ui/overlays/dialog/dialog-trigger';\nimport {Trans} from '../../../../i18n/trans';\nimport {useNavigate} from '../../../../utils/hooks/use-navigate';\nimport {MenuItemForm} from '../../../menus/menu-item-form';\nimport {useParams} from 'react-router-dom';\nimport {MenuItemConfig} from '../../../../core/settings/settings';\n\nexport function MenuItemEditor() {\n const {menuIndex, menuItemIndex} = useParams();\n const navigate = useNavigate();\n\n const {getValues} = useFormContext();\n\n const formPath = `settings.menus.${menuIndex}.items.${menuItemIndex}`;\n const item = getValues(formPath as any);\n\n // go to menu editor, if menu item can't be found\n useEffect(() => {\n if (!item) {\n //navigate(`../`);\n } else {\n appearanceState().preview.setHighlight(\n `[data-menu-item-id=\"${item.id}\"]`\n );\n }\n }, [navigate, item]);\n\n // only render form when menu and item are available to avoid issues with hook form default values\n if (!item || menuItemIndex == null) {\n return null;\n }\n\n return ;\n}\n\ninterface MenuItemEditorSectionProps {\n formPath: string;\n}\nfunction MenuItemEditorSection({formPath}: MenuItemEditorSectionProps) {\n return (\n \n \n
\n \n
\n
\n );\n}\n\nfunction DeleteItemTrigger() {\n const navigate = useNavigate();\n const {menuIndex, menuItemIndex} = useParams();\n const {fields, remove} = useFieldArray({\n name: `settings.menus.${+menuIndex!}.items`,\n });\n\n if (!menuItemIndex) return null;\n\n const item = fields[+menuItemIndex] as MenuItemConfig;\n\n return (\n {\n if (isConfirmed) {\n if (menuItemIndex) {\n remove(+menuItemIndex);\n navigate(`/admin/appearance/menus/${menuIndex}`);\n }\n }\n }}\n >\n }\n >\n \n \n }\n body={\n \n }\n confirm={}\n />\n \n );\n}\n","import {appearanceState, useAppearanceStore} from '../appearance-store';\nimport {FormImageSelector} from '@common/ui/images/image-selector';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {Trans} from '@common/i18n/trans';\nimport {Fragment, ReactNode} from 'react';\nimport {Settings} from '../../../core/settings/settings';\n\nexport function GeneralSection() {\n return (\n \n }\n description={\n \n }\n type=\"favicon\"\n />\n }\n description={}\n type=\"logo_light\"\n />\n }\n description={\n \n }\n type=\"logo_dark\"\n />\n }\n description={\n \n }\n type=\"logo_light_mobile\"\n />\n }\n description={\n \n }\n type=\"logo_dark_mobile\"\n />\n \n \n \n );\n}\n\ninterface ImageSelectorProps {\n label: ReactNode;\n description: ReactNode;\n type: keyof Settings['branding'];\n}\nfunction BrandingImageSelector({label, description, type}: ImageSelectorProps) {\n const defaultValue = useAppearanceStore(\n s => s.defaults?.settings.branding[type]\n );\n return (\n {\n appearanceState().preview.setHighlight('[data-logo=\"navbar\"]');\n }}\n />\n );\n}\nfunction SiteNameTextField() {\n return (\n }\n />\n );\n}\n\nfunction SiteDescriptionTextArea() {\n return (\n }\n />\n );\n}\n","export function randomNumber(min: number = 1, max: number = 10000) {\n const randomBuffer = new Uint32Array(1);\n\n window.crypto.getRandomValues(randomBuffer);\n\n const number = randomBuffer[0] / (0xffffffff + 1);\n\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(number * (max - min + 1)) + min;\n}\n","import {NavLink, useNavigate} from 'react-router-dom';\nimport {Fragment, useEffect} from 'react';\nimport {appearanceState, AppearanceValues} from '../../appearance-store';\nimport {AppearanceButton} from '../../appearance-button';\nimport {Button} from '../../../../ui/buttons/button';\nimport {AddIcon} from '../../../../icons/material/Add';\nimport {randomNumber} from '../../../../utils/string/random-number';\nimport {Trans} from '../../../../i18n/trans';\nimport {useFieldArray} from 'react-hook-form';\nimport {useTrans} from '../../../../i18n/use-trans';\nimport {message} from '../../../../i18n/message';\nimport {useBootstrapData} from '../../../../core/bootstrap-data/bootstrap-data-context';\n\nexport function ThemeList() {\n const {trans} = useTrans();\n const navigate = useNavigate();\n const {\n data: {themes},\n } = useBootstrapData();\n const {fields, append} = useFieldArray<\n AppearanceValues,\n 'appearance.themes.all',\n 'key'\n >({\n name: 'appearance.themes.all',\n keyName: 'key',\n });\n\n useEffect(() => {\n if (themes.selectedThemeId) {\n appearanceState().preview.setActiveTheme(themes.selectedThemeId);\n }\n }, [themes.selectedThemeId]);\n\n return (\n \n
\n }\n onClick={() => {\n const lightThemeColors =\n appearanceState().defaults?.appearance.themes.light!;\n append({\n id: randomNumber(),\n name: trans(message('New theme')),\n colors: lightThemeColors,\n });\n navigate(`${fields.length + 1}`);\n }}\n >\n \n \n
\n {fields.map((field, index) => (\n \n {field.name}\n \n ))}\n
\n );\n}\n","import React, {MutableRefObject, ReactNode, Suspense, useState} from 'react';\nimport {Dialog} from '../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../ui/overlays/dialog/dialog-header';\nimport {Trans} from '../i18n/trans';\nimport {DialogBody} from '../ui/overlays/dialog/dialog-body';\nimport {ProgressCircle} from '../ui/progress/progress-circle';\nimport {useDialogContext} from '../ui/overlays/dialog/dialog-context';\nimport {DialogFooter} from '../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../ui/buttons/button';\nimport type ReactAce from 'react-ace';\n\nconst AceEditor = React.lazy(() => import('./ace-editor'));\n\ninterface TextEditorSourcecodeDialogProps {\n defaultValue: string;\n mode?: 'css' | 'html' | 'php_laravel_blade';\n title: ReactNode;\n onSave?: (value?: string) => void;\n isSaving?: boolean;\n footerStartAction?: ReactNode;\n beautify?: boolean;\n editorRef?: MutableRefObject;\n}\nexport function AceDialog({\n defaultValue,\n mode = 'html',\n title,\n onSave,\n isSaving,\n footerStartAction,\n beautify,\n editorRef,\n}: TextEditorSourcecodeDialogProps) {\n const [value, setValue] = useState(defaultValue);\n const [isValid, setIsValid] = useState(true);\n\n return (\n \n {title}\n \n \n \n \n }\n >\n setValue(newValue)}\n defaultValue={value || ''}\n onIsValidChange={setIsValid}\n editorRef={editorRef}\n />\n \n \n \n \n );\n}\n\ninterface FooterProps {\n disabled: boolean | undefined;\n value?: string;\n onSave?: (value?: string) => void;\n startAction?: ReactNode;\n}\nfunction Footer({disabled, value, onSave, startAction}: FooterProps) {\n const {close} = useDialogContext();\n return (\n \n \n {\n if (onSave) {\n onSave(value);\n } else {\n close(value);\n }\n }}\n >\n \n \n \n );\n}\n","import {useQuery} from '@tanstack/react-query';\nimport {apiClient} from '@common/http/query-client';\n\nexport function useSeoTags(name: string | string[]) {\n return useQuery({\n queryKey: ['admin', 'seo-tags', name],\n queryFn: () => fetchTags(name),\n });\n}\n\nfunction fetchTags(name: string | string[]) {\n return apiClient\n .get<\n Record<\n string,\n {\n custom: string | null;\n original: string;\n }\n >\n >(`admin/appearance/seo-tags/${name}`)\n .then(response => response.data);\n}\n","import {useMutation, useQueryClient} from '@tanstack/react-query';\nimport {apiClient} from '@common/http/query-client';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {showHttpErrorToast} from '@common/utils/http/show-http-error-toast';\nimport {toast} from '@common/ui/toast/toast';\nimport {message} from '@common/i18n/message';\n\ninterface Response extends BackendResponse {}\n\nexport function useUpdateSeoTags(name: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (payload: {tags: string}) => updateTags(name, payload.tags),\n onSuccess: async () => {\n await queryClient.invalidateQueries({\n queryKey: ['admin', 'seo-tags', name],\n });\n toast(message('Updated SEO tags'));\n },\n onError: err => showHttpErrorToast(err),\n });\n}\n\nfunction updateTags(name: string, tags: string): Promise {\n return apiClient\n .put(`admin/appearance/seo-tags/${name}`, {tags})\n .then(r => r.data);\n}\n","import {Fragment, useRef} from 'react';\nimport {Trans} from '@common/i18n/trans';\nimport {DialogTrigger} from '@common/ui/overlays/dialog/dialog-trigger';\nimport {AppearanceButton} from '@common/admin/appearance/appearance-button';\nimport {AceDialog} from '@common/ace-editor/ace-dialog';\nimport mergedAppearanceConfig from '@common/admin/appearance/config/merged-appearance-config';\nimport {SeoSettingsSectionConfig} from '@common/admin/appearance/types/appearance-editor-config';\nimport {MessageDescriptor} from '@common/i18n/message-descriptor';\nimport {useSeoTags} from '@common/admin/appearance/sections/seo/use-seo-tags';\nimport {useUpdateSeoTags} from '@common/admin/appearance/sections/seo/use-update-seo-tags';\nimport {useDialogContext} from '@common/ui/overlays/dialog/dialog-context';\nimport {FullPageLoader} from '@common/ui/progress/full-page-loader';\nimport {Button} from '@common/ui/buttons/button';\nimport type ReactAce from 'react-ace';\n\nconst pages =\n (\n mergedAppearanceConfig.sections['seo-settings']\n .config as SeoSettingsSectionConfig\n )?.pages || [];\n\nconst names = pages.map(page => page.key);\n\nexport function SeoSection() {\n const {isLoading} = useSeoTags(names);\n\n if (isLoading) {\n return ;\n }\n\n return (\n \n {pages.map(page => (\n \n ))}\n \n );\n}\n\ninterface TagEditorTriggerProps {\n label: MessageDescriptor;\n name: string;\n}\nfunction TagEditorTrigger({label, name}: TagEditorTriggerProps) {\n const {data, isLoading} = useSeoTags(names);\n\n return (\n \n \n \n \n {data ? : null}\n \n );\n}\n\ninterface TagsEditorDialogProps {\n name: string;\n value: {custom: string | null; original: string};\n}\nfunction TagsEditorDialog({name, value}: TagsEditorDialogProps) {\n const {close} = useDialogContext();\n const updateTags = useUpdateSeoTags(name);\n const editorRef = useRef(null);\n\n const resetButton = (\n {\n if (editorRef.current) {\n editorRef.current.editor.setValue(value.original);\n }\n }}\n >\n \n \n );\n\n return (\n }\n footerStartAction={resetButton}\n editorRef={editorRef}\n defaultValue={value.custom || value.original}\n isSaving={updateTags.isPending}\n beautify={false}\n onSave={newValue => {\n if (newValue != null) {\n updateTags.mutate(\n {tags: newValue},\n {\n onSuccess: () => close(),\n },\n );\n }\n }}\n />\n );\n}\n","import {AppearanceButton} from '@common/admin/appearance/appearance-button';\nimport {DialogTrigger} from '@common/ui/overlays/dialog/dialog-trigger';\nimport {Trans} from '@common/i18n/trans';\nimport {useFormContext} from 'react-hook-form';\nimport {\n appearanceState,\n AppearanceValues,\n} from '@common/admin/appearance/appearance-store';\nimport {AceDialog} from '@common/ace-editor/ace-dialog';\nimport {Fragment} from 'react';\n\nexport function CustomCodeSection() {\n return (\n \n \n \n \n );\n}\n\ninterface CustomCodeDialogTriggerProps {\n mode: 'html' | 'css';\n}\nfunction CustomCodeDialogTrigger({mode}: CustomCodeDialogTriggerProps) {\n const {getValues} = useFormContext();\n const {setValue} = useFormContext();\n\n const title =\n mode === 'html' ? (\n \n ) : (\n \n );\n\n return (\n {\n if (newValue != null) {\n setValue(`appearance.custom_code.${mode}`, newValue, {\n shouldDirty: true,\n });\n appearanceState().preview.setCustomCode(mode, newValue);\n }\n }}\n >\n {title}\n \n \n );\n}\n","export default \"__VITE_ASSET__8acde003__\"","import {\n BackendFilter,\n FilterControlType,\n FilterOperator,\n} from '../../datatable/filters/backend-filter';\nimport {message} from '../../i18n/message';\nimport {USER_MODEL} from '../../auth/user';\nimport {SiteConfigContextValue} from '@common/core/settings/site-config-context';\nimport {\n createdAtFilter,\n updatedAtFilter,\n} from '@common/datatable/filters/timestamp-filters';\n\nexport const CustomPageDatatableFilters = (\n config: SiteConfigContextValue\n): BackendFilter[] => {\n const dynamicFilters: BackendFilter[] =\n config.customPages.types.length > 1\n ? [\n {\n control: {\n type: FilterControlType.Select,\n defaultValue: 'default',\n options: config.customPages.types.map(type => ({\n value: type.type,\n label: type.label,\n key: type.type,\n })),\n },\n\n key: 'type',\n label: message('Type'),\n description: message('Type of the page'),\n defaultOperator: FilterOperator.eq,\n },\n ]\n : [];\n\n return [\n {\n key: 'user_id',\n label: message('User'),\n description: message('User page was created by'),\n defaultOperator: FilterOperator.eq,\n control: {\n type: FilterControlType.SelectModel,\n model: USER_MODEL,\n },\n },\n ...dynamicFilters,\n createdAtFilter({\n description: message('Date page was created'),\n }),\n updatedAtFilter({\n description: message('Date page was last updated'),\n }),\n ];\n};\n","import {ColumnConfig} from '@common/datatable/column-config';\nimport {CustomPage} from '@common/admin/custom-pages/custom-page';\nimport {Trans} from '@common/i18n/trans';\nimport {Link} from 'react-router-dom';\nimport {LinkStyle} from '@common/ui/buttons/external-link';\nimport {NameWithAvatar} from '@common/datatable/column-templates/name-with-avatar';\nimport {FormattedDate} from '@common/i18n/formatted-date';\nimport React from 'react';\nimport {IconButton} from '@common/ui/buttons/icon-button';\nimport {EditIcon} from '@common/icons/material/Edit';\n\nexport const CustomPageDatatableColumns: ColumnConfig[] = [\n {\n key: 'slug',\n allowsSorting: true,\n width: 'flex-2 min-w-200',\n visibleInMode: 'all',\n header: () => ,\n body: page => (\n \n {page.slug}\n \n ),\n },\n {\n key: 'user_id',\n allowsSorting: true,\n width: 'flex-2 min-w-140',\n header: () => ,\n body: page =>\n page.user && (\n \n ),\n },\n {\n key: 'type',\n maxWidth: 'max-w-100',\n header: () => ,\n body: page => ,\n },\n {\n key: 'updated_at',\n allowsSorting: true,\n width: 'w-100',\n header: () => ,\n body: page => ,\n },\n {\n key: 'actions',\n header: () => ,\n hideHeader: true,\n align: 'end',\n width: 'w-84 flex-shrink-0',\n visibleInMode: 'all',\n body: page => (\n \n \n \n ),\n },\n];\n","import React, {useContext, useMemo} from 'react';\nimport {Link} from 'react-router-dom';\nimport {DataTablePage} from '../../datatable/page/data-table-page';\nimport {Trans} from '../../i18n/trans';\nimport {DataTableEmptyStateMessage} from '../../datatable/page/data-table-emty-state-message';\nimport articlesSvg from './articles.svg';\nimport {DataTableAddItemButton} from '../../datatable/data-table-add-item-button';\nimport {CustomPageDatatableFilters} from './custom-page-datatable-filters';\nimport {DeleteSelectedItemsAction} from '../../datatable/page/delete-selected-items-action';\nimport {CustomPageDatatableColumns} from '@common/admin/custom-pages/custom-page-datatable-columns';\nimport {SiteConfigContext} from '@common/core/settings/site-config-context';\n\nexport function CustomPageDatablePage() {\n const config = useContext(SiteConfigContext);\n const filters = useMemo(() => {\n return CustomPageDatatableFilters(config);\n }, [config]);\n\n return (\n }\n filters={filters}\n columns={CustomPageDatatableColumns}\n queryParams={{with: 'user'}}\n actions={}\n selectedActions={}\n emptyStateMessage={\n }\n filteringTitle={}\n />\n }\n />\n );\n}\n\nfunction Actions() {\n return (\n \n \n \n );\n}\n","import {message} from '@common/i18n/message';\nimport {SettingsNavItem} from '@common/admin/settings/settings-nav-config';\n\nexport const AppSettingsNavConfig: SettingsNavItem[] = [\n {label: message('Drive'), to: 'drive'},\n];\n","import {AppSettingsNavConfig} from '@app/admin/settings/app-settings-nav-config';\nimport {message} from '../../i18n/message';\nimport {MessageDescriptor} from '../../i18n/message-descriptor';\nimport {To} from 'react-router-dom';\nimport {getBootstrapData} from '@common/core/bootstrap-data/use-backend-bootstrap-data';\n\nexport interface SettingsNavItem {\n label: MessageDescriptor;\n to: To;\n}\n\nconst filteredSettingsNavConfig: (SettingsNavItem | false)[] = [\n {label: message('General'), to: 'general'},\n ...AppSettingsNavConfig,\n getBootstrapData().settings.billing.integrated && {\n label: message('Subscriptions'),\n to: 'subscriptions',\n },\n {label: message('Localization'), to: 'localization'},\n {\n label: message('Authentication'),\n to: 'authentication',\n },\n {label: message('Uploading'), to: 'uploading'},\n {label: message('Mail'), to: 'mail'},\n {label: message('Cache'), to: 'cache'},\n {label: message('Analytics'), to: 'analytics'},\n {label: message('Logging'), to: 'logging'},\n {label: message('Queue'), to: 'queue'},\n {label: message('Recaptcha'), to: 'recaptcha'},\n {label: message('GDPR'), to: 'gdpr'},\n {\n label: message('Menus'),\n to: '/admin/appearance/menus',\n },\n {\n label: message('Seo'),\n to: '/admin/appearance/seo-settings',\n },\n {\n label: message('Themes'),\n to: '/admin/appearance/themes',\n },\n].filter(Boolean);\n\nexport const SettingsNavConfig = filteredSettingsNavConfig as SettingsNavItem[];\n","import clsx from 'clsx';\nimport {NavLink, Outlet, useLocation, useNavigate} from 'react-router-dom';\nimport {SettingsNavConfig} from './settings-nav-config';\nimport {useIsMobileMediaQuery} from '../../utils/hooks/is-mobile-media-query';\nimport {Option, Select} from '../../ui/forms/select/select';\nimport {Trans} from '../../i18n/trans';\nimport {StaticPageTitle} from '../../seo/static-page-title';\n\ninterface Props {\n className?: string;\n}\nexport function SettingsLayout({className}: Props) {\n const isMobile = useIsMobileMediaQuery();\n return (\n \n \n \n \n {isMobile ? : }\n
\n \n
\n \n );\n}\n\nfunction MobileNav() {\n const {pathname} = useLocation();\n const navigate = useNavigate();\n const value = pathname.split('/').pop();\n\n return (\n {\n navigate(newPage as string);\n }}\n >\n {SettingsNavConfig.map(item => (\n \n ))}\n \n );\n}\n\nfunction DesktopNav() {\n return (\n
\n {SettingsNavConfig.map(item => (\n \n clsx(\n 'block p-14 whitespace-nowrap mb-8 rounded border-l-4 text-sm transition-bg-color',\n isActive\n ? 'bg-primary/selected border-l-primary font-medium'\n : 'border-l-transparent hover:bg-hover'\n )\n }\n >\n \n \n ))}\n
\n );\n}\n","import {useQuery} from '@tanstack/react-query';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {AdminSettings} from '../admin-settings';\nimport {apiClient} from '@common/http/query-client';\n\nexport interface FetchAdminSettingsResponse\n extends BackendResponse,\n AdminSettings {}\n\nexport function useAdminSettings() {\n return useQuery({\n queryKey: ['fetchAdminSettings'],\n queryFn: () => fetchAdminSettings(),\n // prevent automatic re-fetching so diffing with previous settings work properly\n staleTime: Infinity,\n });\n}\n\nfunction fetchAdminSettings(): Promise {\n return apiClient.get('settings').then(response => response.data);\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {BackendResponse} from '../../http/backend-response/backend-response';\nimport {toast} from '../../ui/toast/toast';\nimport {message} from '../../i18n/message';\nimport {apiClient} from '../../http/query-client';\nimport {showHttpErrorToast} from '../../utils/http/show-http-error-toast';\n\ninterface Response extends BackendResponse {}\n\nfunction GenerateSitemap(): Promise {\n return apiClient.post('sitemap/generate').then(r => r.data);\n}\n\nexport function useGenerateSitemap() {\n return useMutation({\n mutationFn: () => GenerateSitemap(),\n onSuccess: () => {\n toast(message('Sitemap generated'));\n },\n onError: err => showHttpErrorToast(err),\n });\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {UseFormReturn} from 'react-hook-form';\nimport {diff} from 'deep-object-diff';\nimport dot from 'dot-object';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {toast} from '@common/ui/toast/toast';\nimport {apiClient, queryClient} from '@common/http/query-client';\nimport {AdminSettings} from '@common/admin/settings/admin-settings';\nimport {onFormQueryError} from '@common/errors/on-form-query-error';\nimport {useAdminSettings} from '@common/admin/settings/requests/use-admin-settings';\nimport {message} from '@common/i18n/message';\n\ninterface Response extends BackendResponse {}\n\nexport interface AdminSettingsWithFiles {\n files?: Record;\n client?: Partial;\n server?: Partial;\n}\n\nexport function useUpdateAdminSettings(\n form: UseFormReturn,\n) {\n const {data: original} = useAdminSettings();\n\n return useMutation({\n mutationFn: (props: AdminSettingsWithFiles) => {\n // need to convert these to json, otherwise only single key from object would be sent due to diffing\n if (props.client?.cookie_notice?.button) {\n props.client.cookie_notice.button = JSON.stringify(\n props.client.cookie_notice.button,\n ) as any;\n }\n if (props.client?.registration?.policies) {\n props.client.registration.policies = JSON.stringify(\n props.client.registration.policies,\n ) as any;\n }\n if ((props.client as any)?.artistPage?.tabs) {\n (props.client as any).artistPage.tabs = JSON.stringify(\n (props.client as any).artistPage.tabs,\n ) as any;\n }\n\n const client = props.client ? diff(original!.client, props.client) : null;\n const server = props.server ? diff(original!.server, props.server) : null;\n return updateAdminSettings({\n client,\n server,\n files: props.files,\n } as AdminSettings);\n },\n onSuccess: () => {\n toast(message('Settings updated'), {\n position: 'bottom-right',\n });\n queryClient.invalidateQueries({queryKey: ['fetchAdminSettings']});\n },\n onError: r => onFormQueryError(r, form),\n });\n}\n\nfunction updateAdminSettings({\n client,\n server,\n files,\n}: AdminSettingsWithFiles): Promise {\n const formData = new FormData();\n if (client) {\n formData.set('client', JSON.stringify(dot.dot(client)));\n }\n if (server) {\n formData.set('server', JSON.stringify(dot.dot(server)));\n }\n Object.entries(files || {}).forEach(([key, file]) => {\n formData.set(key, file);\n });\n return apiClient\n .post('settings', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n })\n .then(r => r.data);\n}\n","import {FieldErrors, useForm} from 'react-hook-form';\nimport {Fragment, ReactNode} from 'react';\nimport {\n AdminSettingsWithFiles,\n useUpdateAdminSettings,\n} from './requests/update-admin-settings';\nimport {AdminSettings} from './admin-settings';\nimport {useAdminSettings} from './requests/use-admin-settings';\nimport {Form} from '../../ui/forms/form';\nimport {Button} from '../../ui/buttons/button';\nimport {ProgressCircle} from '../../ui/progress/progress-circle';\nimport {ProgressBar} from '../../ui/progress/progress-bar';\nimport {Trans} from '../../i18n/trans';\n\ninterface Props {\n title: ReactNode;\n description: ReactNode;\n children: ReactNode;\n}\nexport function SettingsPanel({title, description, children}: Props) {\n const {data} = useAdminSettings();\n\n return (\n
\n
\n

{title}

\n
{description}
\n
\n {data ? (\n {children}\n ) : (\n \n )}\n
\n );\n}\n\ninterface FormWrapperProps {\n children: ReactNode;\n defaultValues: AdminSettings;\n}\nfunction FormWrapper({children, defaultValues}: FormWrapperProps) {\n const form = useForm({defaultValues});\n const updateSettings = useUpdateAdminSettings(form);\n return (\n \n {\n // clear group errors, because hook form won't automatically\n // clear errors that are not bound to a specific form field\n const errors = form.formState.errors as FieldErrors;\n const keys = Object.keys(errors).filter(key => {\n return key.endsWith('_group');\n });\n form.clearErrors(keys as any);\n }}\n onSubmit={value => {\n updateSettings.mutate(value);\n }}\n >\n {children}\n
\n \n \n \n
\n \n {updateSettings.isPending && (\n \n )}\n \n );\n}\n","export function SettingsSeparator() {\n return
;\n}\n","import clsx from 'clsx';\nimport {LinkIcon} from '../../icons/material/Link';\nimport {ExternalLink} from '../../ui/buttons/external-link';\nimport {Trans} from '../../i18n/trans';\nimport {useSettings} from '../../core/settings/use-settings';\n\ninterface LearnMoreLinkProps {\n link: string;\n className?: string;\n}\nexport function LearnMoreLink({link, className}: LearnMoreLinkProps) {\n const {site} = useSettings();\n if (site.hide_docs_button) {\n return null;\n }\n return (\n
\n \n \n \n \n
\n );\n}\n","import {useAdminSettings} from '../requests/use-admin-settings';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {FormSelect, Option} from '../../../ui/forms/select/select';\nimport {FormSwitch} from '@common/ui/forms/toggle/switch';\nimport {Button} from '@common/ui/buttons/button';\nimport {useGenerateSitemap} from '../generate-sitemap';\nimport {ExternalLink} from '@common/ui/buttons/external-link';\nimport {SettingsPanel} from '../settings-panel';\nimport {SettingsSeparator} from '../settings-separator';\nimport {LearnMoreLink} from '../learn-more-link';\nimport {Trans} from '@common/i18n/trans';\nimport {Fragment, useContext} from 'react';\nimport {SiteConfigContext} from '@common/core/settings/site-config-context';\nimport {useSettings} from '@common/core/settings/use-settings';\nimport {useBootstrapData} from '@common/core/bootstrap-data/bootstrap-data-context';\nimport {useValueLists} from '@common/http/value-lists';\nimport {useFormContext} from 'react-hook-form';\nimport {AdminSettingsWithFiles} from '@common/admin/settings/requests/update-admin-settings';\n\nexport function GeneralSettings() {\n return (\n }\n description={\n \n }\n >\n \n \n \n \n \n \n \n \n );\n}\n\nfunction SiteUrlSection() {\n const {data} = useAdminSettings();\n\n if (!data) return null;\n\n let append = null;\n const server = data!.server;\n const isInvalid = server.newAppUrl && server.newAppUrl !== server.app_url;\n if (isInvalid) {\n append = (\n
\n {chunks},\n }}\n message=\"Base site url is set as :baseUrl in configuration, but current url is :currentUrl. It is recommended to set the primary url you want to use in configuration file and then redirect all other url versions to this primary version via cpanel or .htaccess file.\"\n />\n
\n );\n }\n\n return (\n \n }\n description={\n \n }\n />\n {append}\n \n );\n}\n\nfunction HomepageSection() {\n const {watch} = useFormContext();\n const {homepage} = useContext(SiteConfigContext);\n const {data} = useValueLists(['menuItemCategories']);\n const selectedType = watch('client.homepage.type');\n\n return (\n
\n }\n description={\n \n }\n >\n {homepage.options.map(option => (\n \n ))}\n {data?.menuItemCategories?.map(category => (\n \n ))}\n \n {data?.menuItemCategories?.map(category => {\n return selectedType === category.type ? (\n \n }\n >\n {category.items.map(item => (\n \n ))}\n \n ) : null;\n })}\n
\n );\n}\n\nfunction ThemeSection() {\n const {\n data: {themes},\n } = useBootstrapData();\n return (\n \n }\n description={\n \n }\n >\n \n {themes.all.map(theme => (\n \n ))}\n \n \n }\n >\n \n \n \n );\n}\n\nfunction SitemapSection() {\n const generateSitemap = useGenerateSitemap();\n const {base_url} = useSettings();\n\n const url = `${base_url}/storage/sitemaps/sitemap-index.xml`;\n const link = {url};\n\n return (\n <>\n {\n generateSitemap.mutate();\n }}\n >\n \n \n
\n \n
\n \n );\n}\n","import {parseColor} from '@react-stately/color';\n\nexport function colorToThemeValue(color: string): string {\n return parseColor(color)\n .toString('rgb')\n .replace('rgb(', '')\n .replace(')', '')\n .replace(/, ?/g, ' ');\n}\n","import {parseColor} from '@react-stately/color';\n\nexport function themeValueToHex(value: string): string {\n try {\n return parseColor(`rgb(${value.split(' ').join(',')})`).toString('hex');\n } catch (e) {\n return value;\n }\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const TuneIcon = createSvgIcon(\n \n, 'TuneOutlined');\n","import {useForm, useFormContext} from 'react-hook-form';\nimport {useEffect} from 'react';\nimport {TuneIcon} from '../../../../icons/material/Tune';\nimport {Button} from '../../../../ui/buttons/button';\nimport {CssTheme} from '../../../../ui/themes/css-theme';\nimport {FormTextField} from '../../../../ui/forms/input-field/text-field/text-field';\nimport {FormSwitch} from '../../../../ui/forms/toggle/switch';\nimport {AppearanceValues} from '../../appearance-store';\nimport {DialogTrigger} from '../../../../ui/overlays/dialog/dialog-trigger';\nimport {DialogFooter} from '../../../../ui/overlays/dialog/dialog-footer';\nimport {useDialogContext} from '../../../../ui/overlays/dialog/dialog-context';\nimport {Dialog} from '../../../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../../../ui/overlays/dialog/dialog-header';\nimport {DialogBody} from '../../../../ui/overlays/dialog/dialog-body';\nimport {Trans} from '../../../../i18n/trans';\nimport {Form} from '../../../../ui/forms/form';\nimport {useParams} from 'react-router-dom';\n\nexport function ThemeSettingsDialogTrigger() {\n const {getValues, setValue} = useFormContext();\n const {themeIndex} = useParams();\n const theme = getValues(`appearance.themes.all.${+themeIndex!}`);\n\n return (\n {\n if (!value) return;\n\n getValues('appearance.themes.all').forEach((currentTheme, index) => {\n // update changed theme\n if (currentTheme.id === value.id) {\n setValue(`appearance.themes.all.${index}`, value, {\n shouldDirty: true,\n });\n return;\n }\n\n // unset \"default_light\" and \"default_dark\" on other themes\n if (value.default_light) {\n setValue(\n `appearance.themes.all.${index}`,\n {...currentTheme, default_light: false},\n {shouldDirty: true}\n );\n return;\n }\n if (value.default_dark) {\n setValue(\n `appearance.themes.all.${index}`,\n {...currentTheme, default_dark: false},\n {shouldDirty: true}\n );\n return;\n }\n });\n }}\n >\n }\n >\n \n \n \n \n );\n}\n\ninterface SettingsDialogProps {\n theme: CssTheme;\n}\nfunction SettingsDialog({theme}: SettingsDialogProps) {\n const form = useForm({defaultValues: theme});\n const {close, formId} = useDialogContext();\n\n useEffect(() => {\n const subscription = form.watch((value, {name}) => {\n // theme can only be set as either light or dark default\n if (name === 'default_light' && value.default_light) {\n form.setValue('default_dark', false);\n }\n if (name === 'default_dark' && value.default_dark) {\n form.setValue('default_light', false);\n }\n });\n return () => subscription.unsubscribe();\n }, [form]);\n\n return (\n \n \n \n \n \n {\n close(values);\n }}\n >\n }\n className=\"mb-30\"\n autoFocus\n />\n \n }\n >\n \n \n \n }\n >\n \n \n \n }\n >\n \n \n \n \n \n {\n close();\n }}\n >\n \n \n \n \n \n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const RestartAltIcon = createSvgIcon(\n \n, 'RestartAltOutlined');\n","import {Fragment, useState} from 'react';\nimport {DeleteIcon} from '../../../../icons/material/Delete';\nimport {ConfirmationDialog} from '../../../../ui/overlays/dialog/confirmation-dialog';\nimport {IconButton} from '../../../../ui/buttons/icon-button';\nimport {MoreVertIcon} from '../../../../icons/material/MoreVert';\nimport {RestartAltIcon} from '../../../../icons/material/RestartAlt';\nimport {appearanceState, AppearanceValues} from '../../appearance-store';\nimport {toast} from '../../../../ui/toast/toast';\nimport {\n Menu,\n MenuItem,\n MenuTrigger,\n} from '../../../../ui/navigation/menu/menu-trigger';\nimport {DialogTrigger} from '../../../../ui/overlays/dialog/dialog-trigger';\nimport {message} from '../../../../i18n/message';\nimport {Trans} from '../../../../i18n/trans';\nimport {useNavigate} from '../../../../utils/hooks/use-navigate';\nimport {useFieldArray, useFormContext} from 'react-hook-form';\nimport {useParams} from 'react-router-dom';\n\nexport function ThemeMoreOptionsButton() {\n const navigate = useNavigate();\n const {themeIndex} = useParams();\n const [confirmDialogOpen, setConfirmDialogOpen] = useState(false);\n const {setValue, getValues} = useFormContext();\n const {fields, remove} = useFieldArray({\n name: 'appearance.themes.all',\n });\n\n const deleteTheme = () => {\n if (fields.length <= 1) {\n toast.danger(message('At least one theme is required'));\n return;\n }\n if (themeIndex) {\n navigate('/admin/appearance/themes');\n remove(+themeIndex);\n setValue('appearance.themes.selectedThemeId', null);\n }\n };\n\n return (\n \n {\n if (key === 'delete') {\n setConfirmDialogOpen(true);\n } else if (key === 'reset') {\n const path =\n `appearance.themes.all.${+themeIndex!}` as 'appearance.themes.all.0';\n const defaultColors = getValues(`${path}.is_dark`)\n ? appearanceState().defaults!.appearance.themes.dark\n : appearanceState().defaults!.appearance.themes.light;\n\n Object.entries(defaultColors).forEach(([colorName, themeValue]) => {\n appearanceState().preview.setThemeColor(colorName, themeValue);\n });\n\n setValue(`${path}.colors`, defaultColors, {\n shouldDirty: true,\n });\n }\n }}\n >\n \n \n \n \n }>\n \n \n }>\n \n \n \n \n {\n if (isConfirmed) {\n deleteTheme();\n }\n setConfirmDialogOpen(false);\n }}\n >\n }\n body={}\n confirm={}\n />\n \n \n );\n}\n","import {useNavigate, useParams} from 'react-router-dom';\nimport {Fragment, useEffect, useState} from 'react';\nimport {appearanceState, AppearanceValues} from '../../appearance-store';\nimport {AppearanceButton} from '../../appearance-button';\nimport {ColorIcon} from './color-icon';\nimport {CssTheme} from '../../../../ui/themes/css-theme';\nimport {colorToThemeValue} from '../../../../ui/themes/utils/color-to-theme-value';\nimport {themeValueToHex} from '../../../../ui/themes/utils/theme-value-to-hex';\nimport {ThemeSettingsDialogTrigger} from './theme-settings-dialog-trigger';\nimport {ThemeMoreOptionsButton} from './theme-more-options-button';\nimport {ColorPickerDialog} from '../../../../ui/color-picker/color-picker-dialog';\nimport {DialogTrigger} from '../../../../ui/overlays/dialog/dialog-trigger';\nimport {useFormContext} from 'react-hook-form';\n\nexport function ThemeEditor() {\n const navigate = useNavigate();\n const {themeIndex} = useParams();\n const {getValues} = useFormContext();\n\n const theme = getValues(`appearance.themes.all.${+themeIndex!}`);\n\n // go to theme list, if theme can't be found\n useEffect(() => {\n if (!theme) {\n navigate('/admin/appearance/themes');\n }\n }, [navigate, theme]);\n\n // select theme in preview on initial render\n useEffect(() => {\n if (theme?.id) {\n appearanceState().preview.setActiveTheme(theme.id);\n }\n }, [theme?.id]);\n\n if (!theme) return null;\n\n return (\n \n
\n \n \n
\n
\n {Object.entries(theme.colors)\n .filter(([name]) => !name.endsWith('opacity'))\n .map(([name, value]) => (\n \n ))}\n
\n
\n );\n}\n\ninterface ColorPickerTriggerProps {\n theme: CssTheme;\n colorName: string;\n initialThemeValue: string;\n}\nfunction ColorPickerTrigger({\n theme,\n colorName,\n initialThemeValue,\n}: ColorPickerTriggerProps) {\n const {setValue} = useFormContext();\n const {themeIndex} = useParams();\n const [selectedThemeValue, setSelectedThemeValue] =\n useState(initialThemeValue);\n\n // set color as css variable in preview and on button preview, but not in appearance values\n // this way color change can be canceled when color picker is closed and applied explicitly via apply button\n const selectThemeValue = (themeValue: string) => {\n setSelectedThemeValue(themeValue);\n appearanceState().preview.setThemeColor(colorName, themeValue);\n };\n\n useEffect(() => {\n // need to update the color here so changes via \"reset colors\" button are reflected\n setSelectedThemeValue(initialThemeValue);\n }, [initialThemeValue]);\n\n const initialThemeValueHex = themeValueToHex(initialThemeValue);\n\n return (\n {\n if (newColor && newColor !== initialThemeValueHex) {\n setValue(\n `appearance.themes.all.${+themeIndex!}.colors.${colorName}`,\n selectedThemeValue,\n {shouldDirty: true}\n );\n setValue('appearance.themes.selectedThemeId', theme.id);\n } else {\n // reset to initial value, if apply button was not clicked\n selectThemeValue(initialThemeValue);\n }\n }}\n >\n \n }\n >\n {colorName.replace('--be-', '').replace('-', ' ')}\n \n {\n selectThemeValue(colorToThemeValue(color));\n }}\n />\n \n );\n}\n","import {SettingsPanel} from '@common/admin/settings/settings-panel';\nimport {FormRadioGroup} from '@common/ui/forms/radio-group/radio-group';\nimport {FormRadio} from '@common/ui/forms/radio-group/radio';\nimport {FormSwitch} from '@common/ui/forms/toggle/switch';\nimport {Trans} from '@common/i18n/trans';\n\nexport function DriveSettings() {\n return (\n }\n description={\n \n }\n >\n }\n description={\n \n }\n >\n \n \n \n \n \n \n \n \n }\n >\n \n \n \n }\n >\n \n \n \n );\n}\n","import {RouteObject} from 'react-router-dom';\nimport {DriveSettings} from './drive-settings';\n\nexport const AppSettingsRoutes: RouteObject[] = [\n {path: 'drive', element: },\n];\n","import {ReactNode, useEffect, useRef} from 'react';\nimport {useFormContext} from 'react-hook-form';\nimport clsx from 'clsx';\n\ninterface Props {\n children: (isInvalid: boolean) => ReactNode;\n name: string;\n separatorBottom?: boolean;\n separatorTop?: boolean;\n}\nexport function SettingsErrorGroup({\n children,\n name,\n separatorBottom = true,\n separatorTop = true,\n}: Props) {\n const {\n formState: {errors},\n } = useFormContext>();\n\n const ref = useRef(null);\n const error = errors[name];\n\n useEffect(() => {\n if (error) {\n ref.current?.scrollIntoView({behavior: 'smooth'});\n }\n }, [error]);\n\n return (\n \n {children(!!error)}\n {error && (\n \n )}\n
\n );\n}\n","import {useController} from 'react-hook-form';\nimport React, {useMemo} from 'react';\nimport {mergeProps} from '@react-aria/utils';\nimport {\n ChipField,\n ChipValue,\n} from '../../ui/forms/input-field/chip-field/chip-field';\nimport {FormChipFieldProps} from '../../ui/forms/input-field/chip-field/form-chip-field';\n\nexport function JsonChipField({children, ...props}: FormChipFieldProps) {\n const {\n field: {onChange, onBlur, value = [], ref},\n fieldState: {invalid, error},\n } = useController({\n name: props.name,\n });\n\n const arrayValue = useMemo(() => {\n const mixedValue = value as string | string[];\n return typeof mixedValue === 'string' ? JSON.parse(mixedValue) : mixedValue;\n }, [value]);\n\n const formProps: Partial> = {\n onChange: newValue => {\n const jsonValue = JSON.stringify(newValue.map(chip => chip.name));\n onChange(jsonValue);\n },\n onBlur,\n value: arrayValue,\n invalid,\n errorMessage: error?.message,\n };\n\n return ;\n}\n","import React, {RefObject} from 'react';\n\nexport interface TabsContext {\n selectedTab: number;\n setSelectedTab: (newTab: number) => void;\n tabsRef: RefObject;\n size: 'sm' | 'md';\n isLazy?: boolean;\n id: string;\n}\n\nexport const TabContext = React.createContext(null!);\n","import React, {ReactElement, useId, useMemo, useRef} from 'react';\nimport clsx from 'clsx';\nimport {useControlledState} from '@react-stately/utils';\nimport {TabContext, TabsContext} from './tabs-context';\nimport {TabListProps} from './tab-list';\nimport {TabPanelsProps} from './tab-panels';\n\nexport interface TabsProps {\n children: [ReactElement, ReactElement];\n size?: 'sm' | 'md';\n className?: string;\n selectedTab?: number;\n defaultSelectedTab?: number;\n onTabChange?: (newTab: number) => void;\n isLazy?: boolean;\n overflow?: string;\n}\n\nexport function Tabs(props: TabsProps) {\n const {\n size = 'md',\n children,\n className,\n isLazy,\n overflow = 'overflow-hidden',\n } = props;\n\n const tabsRef = useRef([]);\n const id = useId();\n\n const [selectedTab, setSelectedTab] = useControlledState(\n props.selectedTab,\n props.defaultSelectedTab || 0,\n props.onTabChange\n );\n\n const ContextValue: TabsContext = useMemo(() => {\n return {\n selectedTab,\n setSelectedTab,\n tabsRef,\n size,\n isLazy,\n id,\n };\n }, [selectedTab, id, isLazy, setSelectedTab, size]);\n\n return (\n \n
{children}
\n
\n );\n}\n","import React, {useContext, useState} from 'react';\nimport {useLayoutEffect} from '@react-aria/utils';\nimport clsx from 'clsx';\nimport {TabContext} from './tabs-context';\n\ninterface TabLineStyle {\n width?: string;\n transform?: string;\n className?: string;\n}\n\nexport function TabLine() {\n const {tabsRef, selectedTab} = useContext(TabContext);\n const [style, setStyle] = useState({\n width: undefined,\n transform: undefined,\n className: undefined,\n });\n\n useLayoutEffect(() => {\n if (selectedTab != null && tabsRef.current) {\n const el = tabsRef.current[selectedTab];\n if (!el) return;\n\n setStyle(prevState => {\n return {\n width: `${el.offsetWidth}px`,\n transform: `translateX(${el.offsetLeft}px)`,\n // disable initial transition for tabline\n className: prevState.width === undefined ? '' : 'transition-all',\n };\n });\n }\n }, [setStyle, selectedTab, tabsRef]);\n\n return (\n \n );\n}\n","import React, {Children, cloneElement, isValidElement, ReactNode} from 'react';\nimport clsx from 'clsx';\nimport {FocusScope} from '@react-aria/focus';\nimport {TabProps} from './tab';\nimport {TabLine} from './tab-line';\n\nexport interface TabListProps {\n children: ReactNode;\n // center tabs within tablist\n center?: boolean;\n // expand tabs to fill in tablist space fully. By default, tabs are only as wide as their content.\n expand?: boolean;\n className?: string;\n}\nexport function TabList({children, center, expand, className}: TabListProps) {\n const childrenArray = Children.toArray(children);\n\n return (\n \n \n {childrenArray.map((child, index) => {\n if (isValidElement(child)) {\n return cloneElement(child, {\n index,\n className: clsx(\n child.props.className,\n expand && 'flex-auto',\n center && index === 0 && 'ml-auto',\n center && index === childrenArray.length - 1 && 'mr-auto'\n ),\n });\n }\n return null;\n })}\n \n \n \n );\n}\n","import React, {JSXElementConstructor, ReactNode, useContext} from 'react';\nimport clsx from 'clsx';\nimport {useFocusManager} from '@react-aria/focus';\nimport {TabContext} from './tabs-context';\nimport {LinkProps} from 'react-router-dom';\n\nexport interface TabProps {\n className?: string;\n index?: number;\n children: ReactNode;\n isDisabled?: boolean;\n padding?: string;\n elementType?: 'button' | 'a' | JSXElementConstructor;\n to?: LinkProps['to'];\n relative?: LinkProps['relative'];\n replace?: LinkProps['replace'];\n width?: string;\n}\nexport function Tab({\n index,\n className,\n isDisabled,\n children,\n padding: paddingProp,\n elementType = 'button',\n to,\n relative,\n width = 'min-w-min',\n}: TabProps) {\n const {\n selectedTab,\n setSelectedTab,\n tabsRef,\n size = 'md',\n id,\n } = useContext(TabContext);\n const isSelected = index === selectedTab;\n const focusManager = useFocusManager();\n const padding = paddingProp || (size === 'sm' ? 'px-12' : 'px-18');\n\n const mergedClassname = clsx(\n 'tracking-wide overflow-hidden capitalize text-sm flex items-center justify-center outline-none transition-colors',\n 'focus-visible:ring focus-visible:ring-2 ring-inset rounded whitespace-nowrap cursor-pointer',\n width,\n textColor({isDisabled, isSelected}),\n className,\n size === 'md' && `${padding} h-48`,\n size === 'sm' && `${padding} h-32`,\n isDisabled && 'pointer-events-none',\n );\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft':\n focusManager?.focusPrevious();\n break;\n case 'ArrowRight':\n focusManager?.focusNext();\n break;\n case 'Home':\n focusManager?.focusFirst();\n break;\n case 'End':\n focusManager?.focusLast();\n break;\n }\n };\n\n const tabIndex = isSelected ? 0 : -1;\n const Element = elementType;\n\n return (\n {\n setSelectedTab(index!);\n }}\n to={to}\n relative={relative}\n className={mergedClassname}\n ref={(el: HTMLElement) => {\n if (tabsRef.current && el) {\n tabsRef.current[index!] = el;\n }\n }}\n >\n {children}\n \n );\n}\n\ninterface TextColorProps {\n isDisabled?: boolean;\n isSelected: boolean;\n}\nfunction textColor({isDisabled, isSelected}: TextColorProps): string {\n if (isDisabled) {\n return 'text-disabled cursor-default';\n }\n if (isSelected) {\n return 'text-primary';\n }\n return 'text-muted hover:text-main';\n}\n","import React, {\n Children,\n cloneElement,\n ComponentPropsWithoutRef,\n isValidElement,\n ReactElement,\n ReactNode,\n useContext,\n useRef,\n useState,\n} from 'react';\nimport clsx from 'clsx';\nimport {useLayoutEffect} from '@react-aria/utils';\nimport {getFocusableTreeWalker} from '@react-aria/focus';\nimport {TabContext} from './tabs-context';\n\nexport interface TabPanelsProps {\n children: ReactNode;\n className?: string;\n}\nexport function TabPanels({children, className}: TabPanelsProps) {\n const {selectedTab, isLazy} = useContext(TabContext);\n\n // filter out falsy values, in case of conditional rendering\n const panelArray = Children.toArray(children).filter(p => !!p);\n\n let rendered: ReactNode;\n if (isLazy) {\n const el = panelArray[selectedTab] as ReactElement;\n rendered = isValidElement(el)\n ? cloneElement(panelArray[selectedTab] as ReactElement, {\n index: selectedTab,\n })\n : null;\n } else {\n rendered = panelArray.map((panel, index) => {\n if (isValidElement(panel)) {\n const isSelected = index === selectedTab;\n return cloneElement(panel, {\n index,\n 'aria-hidden': !isSelected,\n className: !isSelected\n ? clsx(panel.props.className, 'hidden')\n : panel.props.className,\n });\n }\n return null;\n });\n }\n\n return
{rendered}
;\n}\n\ninterface TabPanelProps extends ComponentPropsWithoutRef<'div'> {\n className?: string;\n children: ReactNode;\n index?: number;\n}\nexport function TabPanel({\n className,\n children,\n index,\n ...domProps\n}: TabPanelProps) {\n const {id} = useContext(TabContext);\n\n const [tabIndex, setTabIndex] = useState(0);\n const ref = useRef(null);\n\n // The tabpanel should have tabIndex=0 when there are no tabbable elements within it.\n // Otherwise, tabbing from the focused tab should go directly to the first tabbable element\n // within the tabpanel.\n useLayoutEffect(() => {\n if (ref?.current) {\n const update = () => {\n // Detect if there are any tabbable elements and update the tabIndex accordingly.\n const walker = getFocusableTreeWalker(ref.current!, {tabbable: true});\n setTabIndex(walker.nextNode() ? undefined : 0);\n };\n\n update();\n\n // Update when new elements are inserted, or the tabIndex/disabled attribute updates.\n const observer = new MutationObserver(update);\n observer.observe(ref.current, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['tabIndex', 'disabled'],\n });\n\n return () => {\n observer.disconnect();\n };\n }\n }, [ref]);\n\n return (\n \n {children}\n \n );\n}\n","import {useFormContext} from 'react-hook-form';\nimport {SettingsPanel} from '../settings-panel';\nimport {FormSwitch} from '../../../ui/forms/toggle/switch';\nimport {SettingsSeparator} from '../settings-separator';\nimport {LearnMoreLink} from '../learn-more-link';\nimport {AdminSettings} from '../admin-settings';\nimport {FormTextField} from '../../../ui/forms/input-field/text-field/text-field';\nimport {SettingsErrorGroup} from '../settings-error-group';\nimport {JsonChipField} from '../json-chip-field';\nimport {Tabs} from '../../../ui/tabs/tabs';\nimport {TabList} from '../../../ui/tabs/tab-list';\nimport {Tab} from '../../../ui/tabs/tab';\nimport {TabPanel, TabPanels} from '../../../ui/tabs/tab-panels';\nimport {Trans} from '../../../i18n/trans';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {Fragment} from 'react';\n\nexport function SubscriptionSettings() {\n const {trans} = useTrans();\n return (\n }\n description={\n \n }\n >\n \n \n \n \n \n \n \n \n \n \n \n \n }\n >\n \n \n \n \n \n \n }\n name=\"client.billing.accepted_cards\"\n placeholder={trans({message: 'Add new card...'})}\n />\n \n \n }\n name=\"client.billing.invoice.address\"\n className=\"mb-30\"\n />\n }\n description={\n \n }\n name=\"client.billing.invoice.notes\"\n />\n \n \n \n \n );\n}\n\nfunction PaypalSection() {\n const {watch} = useFormContext();\n const paypalIsEnabled = watch('client.billing.paypal.enable');\n return (\n
\n \n \n \n
\n }\n >\n \n \n {paypalIsEnabled ? (\n \n {isInvalid => (\n \n }\n required\n invalid={isInvalid}\n className=\"mb-20\"\n />\n }\n required\n invalid={isInvalid}\n className=\"mb-20\"\n />\n }\n required\n invalid={isInvalid}\n className=\"mb-20\"\n />\n \n \n \n }\n >\n \n \n \n )}\n \n ) : null}\n \n );\n}\n\nfunction StripeSection() {\n const {watch} = useFormContext();\n const stripeEnabled = watch('client.billing.stripe.enable');\n return (\n \n \n \n \n \n }\n >\n \n \n {stripeEnabled ? (\n \n {isInvalid => (\n \n }\n required\n className=\"mb-20\"\n invalid={isInvalid}\n />\n }\n required\n className=\"mb-20\"\n invalid={isInvalid}\n />\n }\n className=\"mb-20\"\n invalid={isInvalid}\n />\n \n )}\n \n ) : null}\n \n );\n}\n","import {FormSelect, Option} from '../../../ui/forms/select/select';\nimport {SettingsPanel} from '../settings-panel';\nimport {useValueLists} from '../../../http/value-lists';\nimport {Section} from '../../../ui/forms/listbox/section';\nimport {FormRadio} from '../../../ui/forms/radio-group/radio';\nimport {FormRadioGroup} from '../../../ui/forms/radio-group/radio-group';\nimport {DateFormatPresets, FormattedDate} from '../../../i18n/formatted-date';\nimport {FormSwitch} from '../../../ui/forms/toggle/switch';\nimport {Trans} from '../../../i18n/trans';\nimport {useCurrentDateTime} from '../../../i18n/use-current-date-time';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {message} from '@common/i18n/message';\n\nexport function LocalizationSettings() {\n const {data} = useValueLists(['timezones', 'localizations']);\n const today = useCurrentDateTime();\n const {trans} = useTrans();\n return (\n }\n description={\n \n }\n >\n }\n searchPlaceholder={trans(message('Search timezones'))}\n description={\n \n }\n >\n \n {Object.entries(data?.timezones || {}).map(([groupName, timezones]) => (\n
\n {timezones.map(timezone => (\n \n ))}\n
\n ))}\n \n }\n description={\n \n }\n >\n \n {(data?.localizations || []).map(locale => (\n \n ))}\n \n }\n description={\n \n }\n >\n \n \n \n {Object.entries(DateFormatPresets).map(([format, options]) => (\n \n \n \n ))}\n \n \n }\n >\n \n \n \n );\n}\n","import {useFormContext} from 'react-hook-form';\nimport {SettingsPanel} from '@common/admin/settings/settings-panel';\nimport {FormSwitch} from '@common/ui/forms/toggle/switch';\nimport {AdminSettings} from '@common/admin/settings/admin-settings';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {SettingsErrorGroup} from '@common/admin/settings/settings-error-group';\nimport {Trans} from '@common/i18n/trans';\nimport {Fragment} from 'react';\nimport {Link} from 'react-router-dom';\nimport {useSettings} from '@common/core/settings/use-settings';\nimport {SettingsSeparator} from '@common/admin/settings/settings-separator';\n\nexport function AuthenticationSettings() {\n return (\n }\n description={\n \n }\n >\n \n \n }\n >\n \n \n \n }\n >\n \n \n \n }\n >\n \n \n \n \n \n \n \n }\n description={\n \n }\n />\n \n );\n}\n\nfunction EmailConfirmationSection() {\n const {watch} = useFormContext();\n const mailSetup = watch('server.mail_setup');\n\n return (\n \n \n {!mailSetup && (\n

\n Fix now\"\n values={{\n a: text => (\n \n {text}\n \n ),\n }}\n />\n

\n )}\n \n }\n >\n \n \n );\n}\n\nfunction EnvatoSection() {\n const {watch} = useFormContext();\n const settings = useSettings();\n const envatoLoginEnabled = watch('client.social.envato.enable');\n\n if (!(settings as any).envato?.enable) return null;\n\n return (\n \n {isInvalid => (\n <>\n \n }\n >\n \n \n {!!envatoLoginEnabled && (\n <>\n }\n required\n />\n }\n required\n />\n }\n required\n />\n \n )}\n \n )}\n \n );\n}\n\nfunction GoogleSection() {\n const {watch} = useFormContext();\n const googleLoginEnabled = watch('client.social.google.enable');\n\n return (\n \n {isInvalid => (\n <>\n \n }\n >\n \n \n {!!googleLoginEnabled && (\n <>\n }\n required\n />\n }\n required\n />\n \n )}\n \n )}\n \n );\n}\n\nfunction FacebookSection() {\n const {watch} = useFormContext();\n const facebookLoginEnabled = watch('client.social.facebook.enable');\n\n return (\n \n {isInvalid => (\n <>\n \n }\n >\n \n \n {!!facebookLoginEnabled && (\n <>\n }\n required\n />\n }\n required\n />\n \n )}\n \n )}\n \n );\n}\n\nfunction TwitterSection() {\n const {watch} = useFormContext();\n const twitterLoginEnabled = watch('client.social.twitter.enable');\n\n return (\n \n {isInvalid => (\n <>\n \n }\n >\n \n \n {!!twitterLoginEnabled && (\n <>\n }\n required\n />\n }\n required\n />\n \n )}\n \n )}\n \n );\n}\n","import {ReactNode} from 'react';\nimport clsx from 'clsx';\n\ninterface SectionHelperProps {\n title?: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n color?: 'positive' | 'danger' | 'warning' | 'primary' | 'neutral';\n className?: string;\n}\nexport function SectionHelper({\n title,\n description,\n actions,\n color = 'primary',\n className,\n}: SectionHelperProps) {\n return (\n \n {title &&
{title}
}\n {description &&
{description}
}\n {actions &&
{actions}
}\n \n );\n}\n","import {useQuery} from '@tanstack/react-query';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {apiClient} from '@common/http/query-client';\n\nexport interface FetchMaxServerUploadSizeResponse extends BackendResponse {\n maxSize: string;\n}\n\nfunction fetchMaxServerUploadSize(): Promise {\n return apiClient\n .get('uploads/server-max-file-size')\n .then(response => response.data);\n}\n\nexport function useMaxServerUploadSize() {\n return useQuery({\n queryKey: ['MaxServerUploadSize'],\n queryFn: () => fetchMaxServerUploadSize(),\n });\n}\n","export const spaceUnits = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n","export type SpaceUnit = 'KB' | 'MB' | 'GB' | 'TB' | 'PB';\n\nexport function convertToBytes(value: number, unit: SpaceUnit): number {\n if (value == null) return 0;\n switch (unit) {\n case 'KB':\n return value * 1024;\n case 'MB':\n return value * 1024 ** 2;\n case 'GB':\n return value * 1024 ** 3;\n case 'TB':\n return value * 1024 ** 4;\n case 'PB':\n return value * 1024 ** 5;\n default:\n return value;\n }\n}\n","import {useController} from 'react-hook-form';\nimport {mergeProps} from '@react-aria/utils';\nimport React, {useEffect, useState} from 'react';\nimport memoize from 'nano-memoize';\nimport {\n FormTextFieldProps,\n TextField,\n TextFieldProps,\n} from './text-field/text-field';\nimport {prettyBytes} from '../../../uploads/utils/pretty-bytes';\nimport {Option, Select} from '../select/select';\nimport {spaceUnits} from '../../../uploads/utils/space-units';\nimport {\n convertToBytes,\n SpaceUnit,\n} from '../../../uploads/utils/convert-to-bytes';\n\n// 99TB\nconst MaxValue = 108851651149824;\n\nexport const FormFileSizeField = React.forwardRef<\n HTMLDivElement,\n FormTextFieldProps\n>(({name, ...props}, ref) => {\n const {\n field: {\n onChange: setByteValue,\n onBlur,\n value: byteValue = '',\n ref: inputRef,\n },\n fieldState: {invalid, error},\n } = useController({\n name,\n });\n\n const [liveValue, setLiveValue] = useState('');\n const [unit, setUnit] = useState('MB');\n\n useEffect(() => {\n if (byteValue == null || byteValue === '') {\n setLiveValue('');\n return;\n }\n const {amount, unit: newUnit} = fromBytes({\n bytes: Math.min(byteValue, MaxValue),\n });\n setUnit(newUnit || 'MB');\n setLiveValue(Number.isNaN(amount) ? '' : amount);\n }, [byteValue, unit]);\n\n const formProps: TextFieldProps = {\n onChange: e => {\n const value = parseInt(e.target.value);\n if (Number.isNaN(value)) {\n setByteValue(value);\n } else {\n const newBytes = convertToBytes(\n parseInt(e.target.value),\n unit as SpaceUnit\n );\n setByteValue(newBytes);\n }\n },\n onBlur,\n value: liveValue,\n invalid,\n errorMessage: error?.message,\n inputRef,\n };\n\n const unitSelect = (\n {\n const newBytes = convertToBytes(\n (liveValue || 0) as number,\n newUnit as SpaceUnit\n );\n setByteValue(newBytes);\n }}\n >\n {spaceUnits.slice(0, 5).map(u => (\n \n ))}\n \n );\n\n return (\n \n );\n});\n\nconst fromBytes = memoize(\n ({bytes}: {bytes: number}): {amount: number | string; unit: SpaceUnit} => {\n const pretty = prettyBytes(bytes);\n if (!pretty) return {amount: '', unit: 'MB'};\n let amount = parseInt(pretty.split(' ')[0]);\n // get rid of any punctuation\n amount = Math.round(amount);\n return {amount, unit: pretty.split(' ')[1] as SpaceUnit};\n }\n);\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient} from '../../../../http/query-client';\nimport {useTrans} from '../../../../i18n/use-trans';\nimport {BackendResponse} from '../../../../http/backend-response/backend-response';\nimport {showHttpErrorToast} from '../../../../utils/http/show-http-error-toast';\nimport {message} from '../../../../i18n/message';\nimport {toast} from '../../../../ui/toast/toast';\n\ninterface Response extends BackendResponse {}\n\nexport function useUploadS3Cors() {\n const {trans} = useTrans();\n return useMutation({\n mutationFn: () => uploadCors(),\n onSuccess: () => {\n toast(trans(message('CORS file updated')));\n },\n onError: err => showHttpErrorToast(err),\n });\n}\n\nfunction uploadCors(): Promise {\n return apiClient.post('s3/cors/upload').then(r => r.data);\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient} from '../../../../../http/query-client';\nimport {BackendResponse} from '../../../../../http/backend-response/backend-response';\nimport {showHttpErrorToast} from '../../../../../utils/http/show-http-error-toast';\n\ninterface Response extends BackendResponse {\n refreshToken: string;\n}\n\ninterface Payload {\n app_key: string;\n app_secret: string;\n access_code: string;\n}\n\nexport function useGenerateDropboxRefreshToken() {\n return useMutation({\n mutationFn: (props: Payload) => generateToken(props),\n onError: err => showHttpErrorToast(err),\n });\n}\n\nfunction generateToken(payload: Payload): Promise {\n return apiClient\n .post('settings/uploading/dropbox-refresh-token', payload)\n .then(r => r.data);\n}\n","import {Fragment} from 'react';\nimport {FormTextField} from '../../../../../ui/forms/input-field/text-field/text-field';\nimport {Trans} from '../../../../../i18n/trans';\nimport {CredentialFormProps} from '../uploading-settings';\nimport {Button} from '../../../../../ui/buttons/button';\nimport {Dialog} from '../../../../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../../../../ui/overlays/dialog/dialog-header';\nimport {DialogBody} from '../../../../../ui/overlays/dialog/dialog-body';\nimport {useForm, useFormContext} from 'react-hook-form';\nimport {Form} from '../../../../../ui/forms/form';\nimport {DialogTrigger} from '../../../../../ui/overlays/dialog/dialog-trigger';\nimport {AdminSettings} from '../../../admin-settings';\nimport {DialogFooter} from '../../../../../ui/overlays/dialog/dialog-footer';\nimport {useDialogContext} from '../../../../../ui/overlays/dialog/dialog-context';\nimport {useGenerateDropboxRefreshToken} from './use-generate-dropbox-refresh-token';\n\nexport function DropboxForm({isInvalid}: CredentialFormProps) {\n const {watch, setValue} = useFormContext();\n const appKey = watch('server.storage_dropbox_app_key');\n const appSecret = watch('server.storage_dropbox_app_secret');\n\n return (\n \n }\n required\n />\n }\n required\n />\n }\n required\n />\n {\n if (refreshToken) {\n setValue('server.storage_dropbox_refresh_token', refreshToken);\n }\n }}\n >\n \n \n \n \n \n \n );\n}\n\ninterface DropboxRefreshTokenDialogProps {\n appKey: string;\n appSecret: string;\n}\nfunction DropboxRefreshTokenDialog({\n appKey,\n appSecret,\n}: DropboxRefreshTokenDialogProps) {\n const form = useForm<{accessCode: string}>();\n const {formId, close} = useDialogContext();\n const generateRefreshToken = useGenerateDropboxRefreshToken();\n return (\n \n \n \n \n \n {\n generateRefreshToken.mutate(\n {\n app_key: appKey,\n app_secret: appSecret,\n access_code: data.accessCode,\n },\n {\n onSuccess: response => {\n close(response.refreshToken);\n },\n },\n );\n }}\n >\n
\n
\n \n
\n \n \n \n
\n }\n required\n />\n \n
\n \n {\n close();\n }}\n >\n \n \n \n \n \n \n
\n );\n}\n","import {useFormContext} from 'react-hook-form';\nimport {SettingsPanel} from '../../settings-panel';\nimport {FormSelect, Option} from '../../../../ui/forms/select/select';\nimport {AdminSettings} from '../../admin-settings';\nimport {SettingsErrorGroup} from '../../settings-error-group';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {FormSwitch} from '@common/ui/forms/toggle/switch';\nimport {FormRadioGroup} from '@common/ui/forms/radio-group/radio-group';\nimport {FormRadio} from '@common/ui/forms/radio-group/radio';\nimport {SectionHelper} from '@common/ui/section-helper';\nimport {useMaxServerUploadSize} from './max-server-upload-size';\nimport {SettingsSeparator} from '../../settings-separator';\nimport {JsonChipField} from '../../json-chip-field';\nimport {FormFileSizeField} from '@common/ui/forms/input-field/file-size-field';\nimport {Trans} from '@common/i18n/trans';\nimport {Fragment} from 'react';\nimport {useUploadS3Cors} from './use-upload-s3-cors';\nimport {Button} from '@common/ui/buttons/button';\nimport {DropboxForm} from './dropbox-form/dropbox-form';\nimport {useAdminSettings} from '../../requests/use-admin-settings';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {message} from '@common/i18n/message';\n\nexport function UploadingSettings() {\n const {trans} = useTrans();\n return (\n }\n description={\n \n }\n >\n \n \n \n \n {isInvalid => (\n }\n description={\n \n }\n >\n \n \n \n \n \n \n \n \n \n \n )}\n \n }\n placeholder=\"Infinity\"\n description={\n \n }\n />\n \n \n }\n description={\n \n }\n />\n }\n description={\n \n }\n />\n }\n placeholder={trans(message('Add extension...'))}\n description={\n \n }\n />\n }\n placeholder={trans(message('Add extension...'))}\n description={\n \n }\n />\n \n );\n}\n\nfunction MaxUploadSizeSection() {\n const {data} = useMaxServerUploadSize();\n return (\n :size\"\n values={{size: data?.maxSize, b: chunks => {chunks}}}\n />\n }\n />\n );\n}\n\nfunction PrivateUploadSection() {\n const {watch, clearErrors} = useFormContext();\n const isEnabled = watch('server.uploads_disk_driver');\n\n if (!isEnabled) return null;\n\n return (\n }\n description={\n \n }\n onSelectionChange={() => {\n clearErrors();\n }}\n >\n \n \n \n \n \n \n \n \n );\n}\n\nfunction PublicUploadSection() {\n const {watch, clearErrors} = useFormContext();\n const isEnabled = watch('server.public_disk_driver');\n\n if (!isEnabled) return null;\n\n return (\n }\n selectionMode=\"single\"\n name=\"server.public_disk_driver\"\n description={\n \n }\n onSelectionChange={() => {\n clearErrors();\n }}\n >\n \n \n \n \n \n \n );\n}\n\nfunction CredentialsSection() {\n const {watch} = useFormContext();\n const drives = [\n watch('server.uploads_disk_driver'),\n watch('server.public_disk_driver'),\n ];\n\n if (drives[0] === 'local' && drives[1] === 'local') {\n return null;\n }\n\n return (\n \n {isInvalid => {\n if (drives.includes('s3')) {\n return ;\n }\n if (drives.includes('ftp')) {\n return ;\n }\n if (drives.includes('dropbox')) {\n return ;\n }\n if (drives.includes('digitalocean_s3')) {\n return ;\n }\n if (drives.includes('backblaze_s3')) {\n return ;\n }\n }}\n \n );\n}\n\nexport interface CredentialFormProps {\n isInvalid: boolean;\n}\nfunction S3Form({isInvalid}: CredentialFormProps) {\n return (\n \n }\n required\n />\n }\n required\n />\n }\n pattern=\"[a-z1-9\\-]+\"\n placeholder=\"us-east-1\"\n />\n }\n required\n />\n }\n description={\n \n }\n />\n \n \n );\n}\n\nfunction DigitalOceanForm({isInvalid}: CredentialFormProps) {\n return (\n \n }\n required\n />\n }\n required\n />\n }\n pattern=\"[a-z0-9\\-]+\"\n placeholder=\"us-east-1\"\n required\n />\n }\n required\n />\n \n \n );\n}\n\nfunction BackblazeForm({isInvalid}: CredentialFormProps) {\n return (\n \n }\n required\n />\n }\n required\n />\n }\n pattern=\"[a-z0-9\\-]+\"\n placeholder=\"us-west-002\"\n required\n />\n }\n required\n />\n \n \n );\n}\n\ninterface S3DirectUploadFieldProps {\n invalid: boolean;\n}\nfunction S3DirectUploadField({invalid}: S3DirectUploadFieldProps) {\n const uploadCors = useUploadS3Cors();\n const {data: defaultSettings} = useAdminSettings();\n\n const s3DriverEnabled =\n defaultSettings?.server.uploads_disk_driver?.endsWith('s3') ||\n defaultSettings?.server.public_disk_driver?.endsWith('s3');\n\n return (\n \n \n

\n \n

\n

\n \n

\n \n }\n >\n \n \n {\n uploadCors.mutate();\n }}\n disabled={!s3DriverEnabled || uploadCors.isPending}\n >\n \n \n
\n );\n}\n\nfunction FtpForm({isInvalid}: CredentialFormProps) {\n return (\n <>\n }\n required\n />\n }\n required\n />\n }\n type=\"password\"\n required\n />\n }\n placeholder=\"/\"\n />\n }\n type=\"number\"\n min={0}\n placeholder=\"21\"\n />\n \n \n \n \n \n \n \n );\n}\n","import {Fragment} from 'react';\nimport {FormTextField} from '../../../../ui/forms/input-field/text-field/text-field';\nimport {Trans} from '../../../../i18n/trans';\n\nexport interface MailgunCredentialsProps {\n isInvalid: boolean;\n}\nexport function MailgunCredentials({isInvalid}: MailgunCredentialsProps) {\n return (\n \n }\n description={\n \n }\n required\n />\n }\n description={}\n required\n />\n }\n description={\n \n }\n placeholder=\"api.eu.mailgun.net\"\n />\n \n );\n}\n","import {FormTextField} from '../../../../ui/forms/input-field/text-field/text-field';\nimport {Trans} from '../../../../i18n/trans';\n\nexport interface SmtpCredentialsProps {\n isInvalid: boolean;\n}\nexport function SmtpCredentials({isInvalid}: SmtpCredentialsProps) {\n return (\n <>\n }\n required\n />\n }\n required\n />\n }\n required\n />\n }\n />\n }\n />\n \n );\n}\n","import {FormTextField} from '../../../../ui/forms/input-field/text-field/text-field';\nimport {Trans} from '../../../../i18n/trans';\nimport {Fragment} from 'react';\n\nexport interface SesCredentialsProps {\n isInvalid: boolean;\n}\nexport function SesCredentials({isInvalid}: SesCredentialsProps) {\n return (\n \n }\n required\n />\n }\n required\n />\n }\n placeholder=\"us-east-1\"\n required\n />\n \n );\n}\n","import {FormTextField} from '../../../../ui/forms/input-field/text-field/text-field';\nimport {Trans} from '../../../../i18n/trans';\n\nexport interface PostmarkCredentialsProps {\n isInvalid: boolean;\n}\nexport function PostmarkCredentials({isInvalid}: PostmarkCredentialsProps) {\n return (\n }\n required\n />\n );\n}\n","import {createSvgIcon} from '../../../../icons/create-svg-icon';\n\nexport const GmailIcon = createSvgIcon(\n [\n ,\n ,\n ,\n ,\n ,\n ],\n 'Gmail',\n '0 0 48 48'\n);\n","import {useFormContext} from 'react-hook-form';\nimport {AdminSettings} from '../../admin-settings';\nimport {useSocialLogin} from '../../../../auth/requests/use-social-login';\nimport {toast} from '../../../../ui/toast/toast';\nimport {message} from '../../../../i18n/message';\nimport {Button} from '../../../../ui/buttons/button';\nimport {GmailIcon} from './gmail-icon';\nimport {Trans} from '../../../../i18n/trans';\nimport {FormTextField} from '../../../../ui/forms/input-field/text-field/text-field';\nimport {Fragment} from 'react';\n\nexport function GmailCredentials() {\n const {watch, setValue} = useFormContext();\n const {connectSocial} = useSocialLogin();\n const connectedEmail = watch('server.connectedGmailAccount');\n const gmailIsIncoming = watch('client.mail.handler') === 'gmailApi';\n\n const handleGmailConnect = async () => {\n const e = await connectSocial('secure/settings/mail/gmail/connect');\n if (e?.status === 'SUCCESS') {\n const email = (e.callbackData as any).profile.email;\n setValue('server.connectedGmailAccount', email);\n toast(message('Connected gmail account: :email', {values: {email}}));\n }\n };\n\n const connectButton = (\n }\n onClick={() => {\n handleGmailConnect();\n }}\n >\n \n \n );\n\n const reconnectPanel = (\n
\n \n {connectedEmail}\n {\n handleGmailConnect();\n }}\n >\n \n \n
\n );\n\n return (\n \n {gmailIsIncoming && (\n }\n description={}\n className=\"mb-30\"\n />\n )}\n
\n \n
\n {connectedEmail ? reconnectPanel : connectButton}\n
\n );\n}\n","import {useFormContext} from 'react-hook-form';\nimport {AdminSettings} from '../../admin-settings';\nimport {ComponentType, Fragment} from 'react';\nimport {MailgunCredentials} from './mailgun-credentials';\nimport {SmtpCredentials} from './smtp-credentials';\nimport {SesCredentials} from './ses-credentials';\nimport {PostmarkCredentials} from './postmark-credentials';\nimport {GmailCredentials} from './gmail-credentials';\nimport {SettingsErrorGroup} from '../../settings-error-group';\nimport {FormSelect, Option} from '../../../../ui/forms/select/select';\nimport {Trans} from '../../../../i18n/trans';\nimport {LearnMoreLink} from '../../learn-more-link';\n\nexport function OutgoingMailGroup() {\n const {watch, clearErrors} = useFormContext();\n\n const selectedDrivers = [\n watch('server.mail_driver'),\n watch('client.mail.handler'),\n ];\n const credentialForms: ComponentType<{isInvalid: boolean}>[] = [];\n\n if (selectedDrivers.includes('mailgun')) {\n credentialForms.push(MailgunCredentials);\n }\n if (selectedDrivers.includes('smtp')) {\n credentialForms.push(SmtpCredentials);\n }\n if (selectedDrivers.includes('ses')) {\n credentialForms.push(SesCredentials);\n }\n if (selectedDrivers.includes('postmark')) {\n credentialForms.push(PostmarkCredentials);\n }\n if (selectedDrivers.includes('gmailApi')) {\n credentialForms.push(GmailCredentials);\n }\n\n return (\n \n {isInvalid => (\n \n {\n clearErrors();\n }}\n invalid={isInvalid}\n selectionMode=\"single\"\n name=\"server.mail_driver\"\n label={}\n description={\n
\n \n \n
\n }\n >\n \n \n \n \n \n \n \n \n {credentialForms.length ? (\n
\n {credentialForms.map((CredentialsForm, index) => (\n \n ))}\n
\n ) : null}\n
\n )}\n \n );\n}\n","import {useFormContext} from 'react-hook-form';\nimport {AdminSettings} from '../../admin-settings';\nimport {useContext} from 'react';\nimport {SiteConfigContext} from '../../../../core/settings/site-config-context';\nimport {FormSelect, Option} from '../../../../ui/forms/select/select';\nimport {Trans} from '../../../../i18n/trans';\nimport {LearnMoreLink} from '../../learn-more-link';\n\nexport function IncomingMailGroup() {\n const {clearErrors} = useFormContext();\n const {settings} = useContext(SiteConfigContext);\n if (!settings?.showIncomingMailMethod) return null;\n\n return (\n {\n clearErrors();\n }}\n className=\"my-30\"\n selectionMode=\"single\"\n name=\"client.mail_handler\"\n label={}\n description={\n
\n \n \n
\n }\n >\n \n \n \n \n \n );\n}\n","import {SettingsPanel} from '../../settings-panel';\nimport {FormTextField} from '../../../../ui/forms/input-field/text-field/text-field';\nimport {ExternalLink} from '../../../../ui/buttons/external-link';\nimport {SectionHelper} from '../../../../ui/section-helper';\nimport {SettingsSeparator} from '../../settings-separator';\nimport {Trans} from '../../../../i18n/trans';\nimport {OutgoingMailGroup} from './outgoing-mail-group';\nimport {IncomingMailGroup} from './incoming-mail-group';\nimport {useSettings} from '../../../../core/settings/use-settings';\n\nexport function MailSettings() {\n return (\n }\n description={\n \n }\n >\n }\n description={\n \n }\n required\n />\n \n }\n description={\n \n }\n required\n />\n \n }\n />\n \n \n \n \n );\n}\n\nfunction ContactAddressSection() {\n const {base_url} = useSettings();\n const contactPageUrl = `${base_url}/contact`;\n const link = (\n {contactPageUrl}\n );\n return (\n }\n description={\n \n }\n />\n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {toast} from '../../../../ui/toast/toast';\nimport {BackendResponse} from '../../../../http/backend-response/backend-response';\nimport {message} from '../../../../i18n/message';\nimport {apiClient} from '../../../../http/query-client';\nimport {showHttpErrorToast} from '../../../../utils/http/show-http-error-toast';\n\ninterface Response extends BackendResponse {}\n\nfunction clearCache(): Promise {\n return apiClient.post('cache/flush').then(r => r.data);\n}\n\nexport function useClearCache() {\n return useMutation({\n mutationFn: () => clearCache(),\n onSuccess: () => {\n toast(message('Cache cleared'));\n },\n onError: err => showHttpErrorToast(err),\n });\n}\n","import {useFormContext} from 'react-hook-form';\nimport {ComponentType} from 'react';\nimport {SettingsPanel} from '../../settings-panel';\nimport {FormSelect, Option} from '../../../../ui/forms/select/select';\nimport {SettingsErrorGroup} from '../../settings-error-group';\nimport {FormTextField} from '../../../../ui/forms/input-field/text-field/text-field';\nimport {AdminSettings} from '../../admin-settings';\nimport {useClearCache} from './clear-cache';\nimport {Button} from '../../../../ui/buttons/button';\nimport {SectionHelper} from '../../../../ui/section-helper';\nimport {Trans} from '../../../../i18n/trans';\n\nexport function CacheSettings() {\n const clearCache = useClearCache();\n return (\n }\n description={\n \n }\n >\n \n {\n clearCache.mutate();\n }}\n >\n \n \n \n }\n />\n \n );\n}\n\nfunction CacheSelect() {\n const {watch, clearErrors} = useFormContext();\n const cacheDriver = watch('server.cache_driver');\n\n let CredentialSection: ComponentType | null = null;\n if (cacheDriver === 'memcached') {\n CredentialSection = MemcachedCredentials;\n }\n\n return (\n \n {isInvalid => {\n return (\n <>\n {\n clearErrors();\n }}\n selectionMode=\"single\"\n name=\"server.cache_driver\"\n label={}\n description={\n \n }\n >\n \n \n \n \n \n \n {CredentialSection && (\n
\n \n
\n )}\n \n );\n }}\n
\n );\n}\n\ninterface CredentialProps {\n isInvalid: boolean;\n}\nfunction MemcachedCredentials({isInvalid}: CredentialProps) {\n return (\n <>\n }\n required\n />\n }\n required\n />\n \n );\n}\n","import {useFormContext} from 'react-hook-form';\nimport {SettingsPanel} from '@common/admin/settings/settings-panel';\nimport {SettingsErrorGroup} from '@common/admin/settings/settings-error-group';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {SectionHelper} from '@common/ui/section-helper';\nimport {ExternalLink} from '@common/ui/buttons/external-link';\nimport {Trans} from '@common/i18n/trans';\n\nexport function LoggingSettings() {\n return (\n }\n description={\n \n }\n >\n \n (\n {parts}\n ),\n }}\n message=\"Sentry integration provides real-time error tracking and helps identify and fix issues when site is in production.\"\n />\n }\n />\n \n );\n}\n\nfunction SentrySection() {\n const {clearErrors} = useFormContext();\n return (\n \n {isInvalid => {\n return (\n {\n clearErrors();\n }}\n invalid={isInvalid}\n name=\"server.sentry_dsn\"\n type=\"url\"\n minLength={30}\n label={}\n />\n );\n }}\n \n );\n}\n","import {useFormContext} from 'react-hook-form';\nimport {ComponentType} from 'react';\nimport {SettingsPanel} from '../settings-panel';\nimport {SettingsErrorGroup} from '../settings-error-group';\nimport {SectionHelper} from '../../../ui/section-helper';\nimport {AdminSettings} from '../admin-settings';\nimport {FormSelect, Option} from '../../../ui/forms/select/select';\nimport {FormTextField} from '../../../ui/forms/input-field/text-field/text-field';\nimport {Trans} from '../../../i18n/trans';\n\nexport function QueueSettings() {\n return (\n }\n description={\n \n }\n >\n \n }\n />\n \n }\n />\n \n \n );\n}\n\nfunction DriverSection() {\n const {watch, clearErrors} = useFormContext();\n const queueDriver = watch('server.queue_driver');\n\n let CredentialSection: ComponentType | null = null;\n if (queueDriver === 'sqs') {\n CredentialSection = SqsCredentials;\n }\n return (\n \n {isInvalid => {\n return (\n <>\n {\n clearErrors();\n }}\n selectionMode=\"single\"\n name=\"server.queue_driver\"\n label={}\n required\n >\n \n \n \n \n \n \n {CredentialSection && (\n
\n \n
\n )}\n \n );\n }}\n \n );\n}\n\ninterface CredentialProps {\n isInvalid: boolean;\n}\nfunction SqsCredentials({isInvalid}: CredentialProps) {\n return (\n <>\n }\n required\n />\n }\n required\n />\n }\n required\n />\n }\n required\n />\n }\n required\n />\n \n );\n}\n","import {useFormContext} from 'react-hook-form';\nimport {useContext} from 'react';\nimport {SettingsPanel} from '../settings-panel';\nimport {SettingsErrorGroup} from '../settings-error-group';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {FormSwitch} from '@common/ui/forms/toggle/switch';\nimport {SiteConfigContext} from '@common/core/settings/site-config-context';\nimport {Trans} from '@common/i18n/trans';\n\nexport function RecaptchaSettings() {\n const {settings} = useContext(SiteConfigContext);\n return (\n }\n description={\n \n }\n >\n {settings?.showRecaptchaLinkSwitch && (\n \n }\n >\n \n \n )}\n \n }\n >\n \n \n \n }\n >\n \n \n \n \n );\n}\n\nfunction RecaptchaSection() {\n const {clearErrors} = useFormContext();\n return (\n \n {isInvalid => {\n return (\n <>\n {\n clearErrors();\n }}\n invalid={isInvalid}\n name=\"client.recaptcha.site_key\"\n label={}\n />\n {\n clearErrors();\n }}\n invalid={isInvalid}\n name=\"client.recaptcha.secret_key\"\n label={}\n />\n \n );\n }}\n \n );\n}\n","import React, {ChangeEventHandler} from 'react';\nimport {mergeProps, useObjectRef} from '@react-aria/utils';\nimport {useController} from 'react-hook-form';\nimport clsx from 'clsx';\nimport {BaseFieldProps} from './base-field-props';\nimport {useField} from './use-field';\nimport {getInputFieldClassNames} from './get-input-field-class-names';\nimport {Field} from './field';\nimport {TextFieldProps} from './text-field/text-field';\n\nexport interface FileFieldProps\n extends Omit {\n onChange?: ChangeEventHandler<'input'>;\n accept?: string;\n}\nexport const FileField = React.forwardRef(\n (props, ref) => {\n const inputRef = useObjectRef(ref);\n\n const {fieldProps, inputProps} = useField({...props, focusRef: inputRef});\n\n const inputFieldClassNames = getInputFieldClassNames(props);\n\n return (\n \n \n \n );\n }\n);\n\nexport interface FormFileFieldProps extends FileFieldProps {\n name: string;\n}\nexport function FormFileField({name, ...props}: FormFileFieldProps) {\n const {\n field: {onChange, onBlur, ref},\n fieldState: {invalid, error},\n } = useController({\n name,\n });\n\n const [value, setValue] = React.useState('');\n\n const formProps: TextFieldProps = {\n onChange: e => {\n onChange(e.target.files?.[0]);\n setValue(e.target.value);\n },\n onBlur,\n value,\n invalid,\n errorMessage: error?.message,\n };\n\n return ;\n}\n","import {useFormContext} from 'react-hook-form';\nimport {SettingsPanel} from '../settings-panel';\nimport {SettingsErrorGroup} from '../settings-error-group';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {FormFileField} from '@common/ui/forms/input-field/file-field';\nimport {Trans} from '@common/i18n/trans';\nimport {Fragment} from 'react';\n\nexport function ReportsSettings() {\n return (\n }\n description={\n \n }\n >\n \n \n );\n}\n\nfunction AnalyticsSection() {\n const {clearErrors} = useFormContext();\n return (\n \n {isInvalid => (\n \n {\n clearErrors();\n }}\n invalid={isInvalid}\n name=\"files.certificate\"\n accept=\".json\"\n label={}\n />\n {\n clearErrors();\n }}\n invalid={isInvalid}\n name=\"server.analytics_property_id\"\n type=\"number\"\n label={}\n />\n {\n clearErrors();\n }}\n invalid={isInvalid}\n name=\"client.analytics.tracking_code\"\n placeholder=\"G-******\"\n min=\"1\"\n max=\"20\"\n description={\n \n }\n label={}\n />\n }\n description={\n \n }\n />\n \n )}\n \n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {UseFormReturn} from 'react-hook-form';\nimport {User} from '@common/auth/user';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {toast} from '@common/ui/toast/toast';\nimport {apiClient, queryClient} from '@common/http/query-client';\nimport {onFormQueryError} from '@common/errors/on-form-query-error';\nimport {message} from '@common/i18n/message';\nimport {useNavigate} from '@common/utils/hooks/use-navigate';\n\ninterface Response extends BackendResponse {\n user: User;\n}\n\nexport interface UpdateUserPayload\n extends Omit, 'email_verified_at'> {\n email_verified_at?: boolean;\n id: number;\n}\n\nexport function useUpdateUser(form: UseFormReturn) {\n const navigate = useNavigate();\n return useMutation({\n mutationFn: (props: UpdateUserPayload) => updateUser(props),\n onSuccess: (response, props) => {\n toast(message('User updated'));\n queryClient.invalidateQueries({queryKey: ['users']});\n navigate('/admin/users');\n },\n onError: r => onFormQueryError(r, form),\n });\n}\n\nfunction updateUser({id, ...other}: UpdateUserPayload): Promise {\n if (other.roles) {\n other.roles = other.roles.map(r => r.id) as any;\n }\n return apiClient.put(`users/${id}`, other).then(r => r.data);\n}\n","import {useCallback, useRef, useState} from 'react';\n\nexport function useStickySentinel() {\n const [isSticky, setIsSticky] = useState(false);\n\n const observerRef = useRef();\n\n const sentinelRef = useCallback((sentinel: HTMLDivElement | null) => {\n if (sentinel) {\n const observer = new IntersectionObserver(\n ([e]) => setIsSticky(e.intersectionRatio < 1),\n {threshold: [1]}\n );\n observerRef.current = observer;\n observer.observe(sentinel);\n } else if (observerRef.current) {\n observerRef.current?.disconnect();\n }\n }, []);\n\n return {isSticky, sentinelRef};\n}\n","import {FieldValues, SubmitHandler, UseFormReturn} from 'react-hook-form';\nimport clsx from 'clsx';\nimport React, {ReactNode} from 'react';\nimport {useStickySentinel} from '../utils/hooks/sticky-sentinel';\nimport {Form} from '../ui/forms/form';\nimport {Button} from '../ui/buttons/button';\nimport {Trans} from '../i18n/trans';\n\ninterface Props {\n onSubmit: SubmitHandler;\n form: UseFormReturn;\n title: ReactNode;\n subTitle?: ReactNode;\n isLoading: boolean;\n children: ReactNode;\n actions?: ReactNode;\n backButton?: ReactNode;\n disableSaveWhenNotDirty?: boolean;\n wrapInContainer?: boolean;\n}\nexport function CrupdateResourceLayout({\n onSubmit,\n form,\n title,\n subTitle,\n children,\n actions,\n backButton,\n isLoading = false,\n disableSaveWhenNotDirty = false,\n wrapInContainer = true,\n}: Props) {\n const {isSticky, sentinelRef} = useStickySentinel();\n const isDirty = !disableSaveWhenNotDirty\n ? true\n : Object.keys(form.formState.dirtyFields).length;\n\n return (\n form.clearErrors()}\n form={form}\n >\n
\n \n \n {backButton}\n
\n

\n {title}\n

\n {subTitle &&
{subTitle}
}\n
\n
\n {actions}\n \n \n \n
\n \n \n
{children}
\n \n \n );\n}\n","import {FieldValues, SubmitHandler, UseFormReturn} from 'react-hook-form';\nimport clsx from 'clsx';\nimport {ReactNode} from 'react';\nimport {Link} from 'react-router-dom';\nimport {useValueLists} from '../../http/value-lists';\nimport {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {FormSwitch} from '../../ui/forms/toggle/switch';\nimport {FormFileSizeField} from '../../ui/forms/input-field/file-size-field';\nimport {LinkStyle} from '../../ui/buttons/external-link';\nimport {FormPermissionSelector} from '../../auth/ui/permission-selector';\nimport {Trans} from '../../i18n/trans';\nimport {FormChipField} from '../../ui/forms/input-field/chip-field/form-chip-field';\nimport {Item} from '../../ui/forms/listbox/item';\nimport {CrupdateResourceLayout} from '../crupdate-resource-layout';\nimport {useSettings} from '../../core/settings/use-settings';\n\ninterface Props {\n onSubmit: SubmitHandler;\n form: UseFormReturn;\n title: ReactNode;\n subTitle?: ReactNode;\n isLoading: boolean;\n avatarManager: ReactNode;\n resendEmailButton?: ReactNode;\n children?: ReactNode;\n}\nexport function CrupdateUserForm({\n onSubmit,\n form,\n title,\n subTitle,\n isLoading,\n avatarManager,\n resendEmailButton,\n children,\n}: Props) {\n const {require_email_confirmation} = useSettings();\n const {data: valueLists} = useValueLists(['roles', 'permissions']);\n\n return (\n \n
\n {avatarManager}\n
\n {children}\n }\n />\n }\n />\n
\n
\n\n
\n \n }\n >\n \n \n {resendEmailButton}\n
\n }\n description={\n (\n \n {parts}\n \n ),\n }}\n message=\"Total storage space all user uploads are allowed to take up. If left empty, this value will be inherited from any roles or subscriptions user has, or from 'Available space' setting in Uploading settings page.\"\n />\n }\n />\n }\n suggestions={valueLists?.roles}\n >\n {chip => (\n \n {chip.name}\n \n )}\n \n
\n
\n \n
\n \n
\n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const ReportIcon = createSvgIcon(\n [,,,]\n, 'ReportOutlined');\n","import {useForm} from 'react-hook-form';\nimport {useParams} from 'react-router-dom';\nimport React, {useEffect} from 'react';\nimport {useUser} from '../../auth/ui/use-user';\nimport {UpdateUserPayload, useUpdateUser} from './requests/update-user';\nimport {Button} from '../../ui/buttons/button';\nimport {useResendVerificationEmail} from '../../auth/requests/use-resend-verification-email';\nimport {useUploadAvatar} from '../../auth/ui/account-settings/avatar/upload-avatar';\nimport {useRemoveAvatar} from '../../auth/ui/account-settings/avatar/remove-avatar';\nimport {CrupdateUserForm} from './crupdate-user-form';\nimport {User} from '../../auth/user';\nimport {Trans} from '../../i18n/trans';\nimport {FullPageLoader} from '../../ui/progress/full-page-loader';\nimport {useSettings} from '../../core/settings/use-settings';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {FileUploadProvider} from '@common/uploads/uploader/file-upload-provider';\nimport {FormImageSelector} from '@common/ui/images/image-selector';\nimport {queryClient} from '@common/http/query-client';\nimport {ReportIcon} from '@common/icons/material/Report';\n\nexport function UpdateUserPage() {\n const form = useForm();\n const {require_email_confirmation} = useSettings();\n const {userId} = useParams();\n const updateUser = useUpdateUser(form);\n const resendConfirmationEmail = useResendVerificationEmail();\n const {data, isLoading} = useUser(userId!, {\n with: ['subscriptions', 'roles', 'permissions', 'bans'],\n });\n const banReason = data?.user.bans?.[0]?.comment;\n\n useEffect(() => {\n if (data?.user && !form.getValues().id) {\n form.reset({\n first_name: data.user.first_name,\n last_name: data.user.last_name,\n roles: data.user.roles,\n permissions: data.user.permissions,\n id: data.user.id,\n email_verified_at: Boolean(data.user.email_verified_at),\n available_space: data.user.available_space,\n avatar: data.user.avatar,\n });\n }\n }, [data?.user, form]);\n\n if (isLoading) {\n return ;\n }\n\n const resendEmailButton = (\n {\n resendConfirmationEmail.mutate({email: data!.user.email});\n }}\n >\n \n \n );\n\n return (\n {\n updateUser.mutate(newValues);\n }}\n form={form}\n title={\n \n }\n subTitle={\n banReason && (\n
\n \n
\n \n
\n
\n )\n }\n isLoading={updateUser.isPending}\n avatarManager={\n {\n queryClient.invalidateQueries({queryKey: ['users']});\n }}\n />\n }\n resendEmailButton={resendEmailButton}\n >\n }\n />\n \n );\n}\n\ninterface AvatarSectionProps {\n user: User;\n onChange: () => void;\n}\nfunction AvatarSection({user, onChange}: AvatarSectionProps) {\n const uploadAvatar = useUploadAvatar({user});\n const removeAvatar = useRemoveAvatar({user});\n return (\n \n }\n previewSize=\"w-90 h-90\"\n showRemoveButton\n onChange={url => {\n if (url) {\n uploadAvatar.mutate({url});\n } else {\n removeAvatar.mutate();\n }\n onChange();\n }}\n />\n \n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {UseFormReturn} from 'react-hook-form';\nimport {User} from '../../../auth/user';\nimport {BackendResponse} from '../../../http/backend-response/backend-response';\nimport {toast} from '../../../ui/toast/toast';\nimport {apiClient, queryClient} from '../../../http/query-client';\nimport {DatatableDataQueryKey} from '../../../datatable/requests/paginated-resources';\nimport {onFormQueryError} from '../../../errors/on-form-query-error';\nimport {message} from '../../../i18n/message';\nimport {useNavigate} from '../../../utils/hooks/use-navigate';\n\ninterface Response extends BackendResponse {\n user: User;\n}\n\nexport interface CreateUserPayload\n extends Omit, 'email_verified_at'> {\n email_verified_at?: boolean;\n}\n\nexport function useCreateUser(form: UseFormReturn) {\n const navigate = useNavigate();\n return useMutation({\n mutationFn: (props: CreateUserPayload) => createUser(props),\n onSuccess: () => {\n toast(message('User created'));\n queryClient.invalidateQueries({queryKey: DatatableDataQueryKey('users')});\n navigate('/admin/users');\n },\n onError: r => onFormQueryError(r, form),\n });\n}\n\nfunction createUser(payload: CreateUserPayload): Promise {\n if (payload.roles) {\n payload.roles = payload.roles.map(r => r.id) as any;\n }\n return apiClient.post('users', payload).then(r => r.data);\n}\n","import {useForm} from 'react-hook-form';\nimport React from 'react';\nimport {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {CreateUserPayload, useCreateUser} from './requests/create-user';\nimport {CrupdateUserForm} from './crupdate-user-form';\nimport {FileUploadProvider} from '../../uploads/uploader/file-upload-provider';\nimport {Trans} from '../../i18n/trans';\nimport {FormImageSelector} from '@common/ui/images/image-selector';\n\nexport function CreateUserPage() {\n const form = useForm();\n const createUser = useCreateUser(form);\n\n const avatarManager = (\n \n }\n previewSize=\"w-90 h-90\"\n showRemoveButton\n />\n \n );\n\n return (\n {\n createUser.mutate(newValues);\n }}\n form={form}\n title={}\n isLoading={createUser.isPending}\n avatarManager={avatarManager}\n >\n }\n />\n }\n />\n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const TranslateIcon = createSvgIcon(\n \n, 'TranslateOutlined');\n","import {useQuery} from '@tanstack/react-query';\nimport {BackendResponse} from '../../http/backend-response/backend-response';\nimport {Localization} from '../../i18n/localization';\nimport {apiClient} from '../../http/query-client';\n\nexport interface FetchLocaleWithLinesResponse extends BackendResponse {\n localization: Localization;\n}\n\nexport const getLocalWithLinesQueryKey = (localeId?: number | string) => {\n const key: (string | number)[] = ['getLocaleWithLines'];\n if (localeId != null) {\n key.push(localeId);\n }\n return key;\n};\n\nexport function useLocaleWithLines(localeId: number | string) {\n return useQuery({\n queryKey: getLocalWithLinesQueryKey(localeId),\n queryFn: () => fetchLocaleWithLines(localeId),\n staleTime: Infinity,\n });\n}\n\nfunction fetchLocaleWithLines(\n localeId: number | string,\n): Promise {\n return apiClient\n .get(`localizations/${localeId}`)\n .then(response => response.data);\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {UseFormReturn} from 'react-hook-form';\nimport {toast} from '../../ui/toast/toast';\nimport {BackendResponse} from '../../http/backend-response/backend-response';\nimport {apiClient, queryClient} from '../../http/query-client';\nimport {message} from '../../i18n/message';\nimport {DatatableDataQueryKey} from '../../datatable/requests/paginated-resources';\nimport {Localization} from '../../i18n/localization';\nimport {onFormQueryError} from '../../errors/on-form-query-error';\nimport {showHttpErrorToast} from '../../utils/http/show-http-error-toast';\nimport {getLocalWithLinesQueryKey} from './use-locale-with-lines';\n\ninterface Response extends BackendResponse {\n localization: Localization;\n}\n\nfunction UpdateLocalization({\n id,\n ...other\n}: Partial): Promise {\n return apiClient.put(`localizations/${id}`, other).then(r => r.data);\n}\n\nexport function useUpdateLocalization(\n form?: UseFormReturn>,\n) {\n return useMutation({\n mutationFn: (props: Partial) => UpdateLocalization(props),\n onSuccess: () => {\n toast(message('Localization updated'));\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey('localizations'),\n });\n queryClient.invalidateQueries({queryKey: getLocalWithLinesQueryKey()});\n },\n onError: r => (form ? onFormQueryError(r, form) : showHttpErrorToast(r)),\n });\n}\n","import {useForm} from 'react-hook-form';\nimport {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {Trans} from '../../i18n/trans';\nimport {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {Form} from '../../ui/forms/form';\nimport {Localization} from '../../i18n/localization';\nimport {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {useValueLists} from '../../http/value-lists';\nimport {FormSelect, Option} from '../../ui/forms/select/select';\nimport {DialogFooter} from '../../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../../ui/buttons/button';\nimport {useUpdateLocalization} from './update-localization';\nimport {message} from '@common/i18n/message';\nimport {useTrans} from '@common/i18n/use-trans';\n\ninterface UpdateLocalizationDialogProps {\n localization: Localization;\n}\nexport function UpdateLocalizationDialog({\n localization,\n}: UpdateLocalizationDialogProps) {\n const {trans} = useTrans();\n const {formId, close} = useDialogContext();\n const form = useForm>({\n defaultValues: {\n id: localization.id,\n name: localization.name,\n language: localization.language,\n },\n });\n\n const {data} = useValueLists(['languages']);\n const languages = data?.languages || [];\n\n const updateLocalization = useUpdateLocalization(form);\n\n return (\n \n \n \n \n \n {\n updateLocalization.mutate(values, {onSuccess: close});\n }}\n >\n }\n className=\"mb-30\"\n required\n />\n }\n selectionMode=\"single\"\n showSearchField\n searchPlaceholder={trans(message('Search languages'))}\n >\n {languages.map(language => (\n \n ))}\n \n \n \n \n \n \n \n \n \n \n );\n}\n","import {useMutation, useQueryClient} from '@tanstack/react-query';\nimport {UseFormReturn} from 'react-hook-form';\nimport {toast} from '../../ui/toast/toast';\nimport {BackendResponse} from '../../http/backend-response/backend-response';\nimport {apiClient} from '../../http/query-client';\nimport {message} from '../../i18n/message';\nimport {DatatableDataQueryKey} from '../../datatable/requests/paginated-resources';\nimport {onFormQueryError} from '../../errors/on-form-query-error';\nimport {Localization} from '../../i18n/localization';\n\ninterface Response extends BackendResponse {\n localization: Localization;\n}\n\nexport interface CreateLocalizationPayload {\n name: string;\n language: string;\n}\n\nfunction createLocalization(\n payload: CreateLocalizationPayload,\n): Promise {\n return apiClient.post(`localizations`, payload).then(r => r.data);\n}\n\nexport function useCreateLocalization(\n form: UseFormReturn,\n) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (props: CreateLocalizationPayload) => createLocalization(props),\n onSuccess: () => {\n toast(message('Localization created'));\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey('localizations'),\n });\n },\n onError: r => onFormQueryError(r, form),\n });\n}\n","import {useForm} from 'react-hook-form';\nimport {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {Trans} from '../../i18n/trans';\nimport {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {Form} from '../../ui/forms/form';\nimport {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {useValueLists} from '../../http/value-lists';\nimport {FormSelect, Option} from '../../ui/forms/select/select';\nimport {DialogFooter} from '../../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../../ui/buttons/button';\nimport {\n CreateLocalizationPayload,\n useCreateLocalization,\n} from './create-localization';\nimport {message} from '@common/i18n/message';\nimport {useTrans} from '@common/i18n/use-trans';\n\nexport function CreateLocationDialog() {\n const {trans} = useTrans();\n const {formId, close} = useDialogContext();\n const form = useForm({\n defaultValues: {\n language: 'en',\n },\n });\n\n const {data} = useValueLists(['languages']);\n const languages = data?.languages || [];\n\n const createLocalization = useCreateLocalization(form);\n\n return (\n \n \n \n \n \n {\n createLocalization.mutate(values, {onSuccess: close});\n }}\n >\n }\n className=\"mb-30\"\n required\n />\n }\n selectionMode=\"single\"\n showSearchField\n searchPlaceholder={trans(message('Search languages'))}\n >\n {languages.map(language => (\n \n ))}\n \n \n \n \n \n \n \n \n \n \n );\n}\n","export default \"__VITE_ASSET__5bb85b7d__\"","import React, {Fragment} from 'react';\nimport {Link} from 'react-router-dom';\nimport {DataTablePage} from '../../datatable/page/data-table-page';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {EditIcon} from '../../icons/material/Edit';\nimport {FormattedDate} from '../../i18n/formatted-date';\nimport {ColumnConfig} from '../../datatable/column-config';\nimport {Trans} from '../../i18n/trans';\nimport {Localization} from '../../i18n/localization';\nimport {TranslateIcon} from '../../icons/material/Translate';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {UpdateLocalizationDialog} from './update-localization-dialog';\nimport {Tooltip} from '../../ui/tooltip/tooltip';\nimport {CreateLocationDialog} from './create-localization-dialog';\nimport {DataTableEmptyStateMessage} from '../../datatable/page/data-table-emty-state-message';\nimport aroundTheWorldSvg from './around-the-world.svg';\nimport {DataTableAddItemButton} from '../../datatable/data-table-add-item-button';\nimport {DeleteSelectedItemsAction} from '../../datatable/page/delete-selected-items-action';\n\nconst columnConfig: ColumnConfig[] = [\n {\n key: 'name',\n allowsSorting: true,\n sortingKey: 'name',\n visibleInMode: 'all',\n width: 'flex-3 min-w-200',\n header: () => ,\n body: locale => locale.name,\n },\n {\n key: 'language',\n allowsSorting: true,\n sortingKey: 'language',\n header: () => ,\n body: locale => locale.language,\n },\n {\n key: 'updatedAt',\n allowsSorting: true,\n width: 'w-100',\n header: () => ,\n body: locale => ,\n },\n {\n key: 'actions',\n header: () => ,\n hideHeader: true,\n align: 'end',\n width: 'w-84 flex-shrink-0',\n visibleInMode: 'all',\n body: locale => {\n return (\n
\n \n }>\n \n \n \n \n \n \n }>\n \n \n \n \n \n \n
\n );\n },\n },\n];\n\nexport function LocalizationIndex() {\n return (\n }\n columns={columnConfig}\n actions={}\n selectedActions={}\n emptyStateMessage={\n }\n filteringTitle={}\n />\n }\n />\n );\n}\n\nfunction Actions() {\n return (\n \n \n \n \n \n \n \n \n );\n}\n","import {useForm} from 'react-hook-form';\nimport {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {Trans} from '../../i18n/trans';\nimport {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {Form} from '../../ui/forms/form';\nimport {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {DialogFooter} from '../../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../../ui/buttons/button';\nimport {SectionHelper} from '../../ui/section-helper';\n\ninterface FormValue {\n key: string;\n value: string;\n}\n\nexport function NewTranslationDialog() {\n const {formId, close} = useDialogContext();\n const form = useForm();\n\n return (\n \n \n \n \n \n {\n close(values);\n }}\n >\n \n }\n description={\n \n }\n />\n }\n className=\"mb-30\"\n required\n />\n }\n required\n />\n \n \n \n \n \n \n \n );\n}\n","import React, {useMemo, useRef, useState} from 'react';\nimport {useParams} from 'react-router-dom';\nimport {useLocaleWithLines} from './use-locale-with-lines';\nimport {Trans} from '../../i18n/trans';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {Button} from '../../ui/buttons/button';\nimport {Breadcrumb} from '../../ui/breadcrumbs/breadcrumb';\nimport {BreadcrumbItem} from '../../ui/breadcrumbs/breadcrumb-item';\nimport {TextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {useTrans} from '../../i18n/use-trans';\nimport {SearchIcon} from '../../icons/material/Search';\nimport {CloseIcon} from '../../icons/material/Close';\nimport {AddIcon} from '../../icons/material/Add';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {NewTranslationDialog} from './new-translation-dialog';\nimport {useUpdateLocalization} from './update-localization';\nimport {Localization} from '../../i18n/localization';\nimport {FullPageLoader} from '../../ui/progress/full-page-loader';\nimport {useIsMobileMediaQuery} from '../../utils/hooks/is-mobile-media-query';\nimport {useVirtualizer} from '@tanstack/react-virtual';\nimport {useNavigate} from '../../utils/hooks/use-navigate';\n\ntype Lines = Record;\n\nexport function TranslationManagementPage() {\n const {localeId} = useParams();\n\n const {data, isLoading} = useLocaleWithLines(localeId!);\n const localization = data?.localization;\n\n if (isLoading || !localization) {\n return ;\n }\n\n return
;\n}\n\ninterface FormProps {\n localization: Localization;\n}\nfunction Form({localization}: FormProps) {\n const [lines, setLines] = useState(localization.lines || {});\n\n const navigate = useNavigate();\n const updateLocalization = useUpdateLocalization();\n const [searchQuery, setSearchQuery] = useState('');\n\n return (\n {\n e.preventDefault();\n updateLocalization.mutate(\n {id: localization.id, lines},\n {\n onSuccess: () => {\n navigate('/admin/localizations');\n },\n },\n );\n }}\n >\n \n \n \n );\n}\n\ninterface HeaderProps {\n localization: Localization;\n lines: Lines;\n setLines: (lines: Lines) => void;\n searchQuery: string;\n setSearchQuery: (value: string) => void;\n isLoading: boolean;\n}\nfunction Header({\n localization,\n searchQuery,\n setSearchQuery,\n isLoading,\n lines,\n setLines,\n}: HeaderProps) {\n const navigate = useNavigate();\n const isMobile = useIsMobileMediaQuery();\n const {trans} = useTrans();\n\n return (\n
\n \n {\n navigate('/admin/localizations');\n }}\n >\n \n \n \n \n \n \n
\n
\n setSearchQuery(e.target.value)}\n startAdornment={}\n placeholder={trans({message: 'Type to search...'})}\n />\n
\n {\n if (newTranslation) {\n const newLines = {...lines};\n newLines[newTranslation.key] = newTranslation.value;\n setLines(newLines);\n }\n }}\n >\n {!isMobile && (\n }\n >\n \n \n )}\n \n \n \n {isMobile ? (\n \n ) : (\n \n )}\n \n
\n
\n );\n}\n\ninterface LinesListProps {\n searchQuery?: string;\n lines: Lines;\n setLines: (lines: Lines) => void;\n}\nfunction LinesList({searchQuery, lines, setLines}: LinesListProps) {\n const filteredLines = useMemo(() => {\n return Object.entries(lines).filter(([id, translation]) => {\n const lowerCaseQuery = searchQuery?.toLowerCase();\n return (\n !lowerCaseQuery ||\n id?.toLowerCase().includes(lowerCaseQuery) ||\n translation?.toLowerCase().includes(lowerCaseQuery)\n );\n });\n }, [lines, searchQuery]);\n\n const ref = useRef(null);\n const rowVirtualizer = useVirtualizer({\n count: filteredLines.length,\n getScrollElement: () => ref.current,\n estimateSize: () => 123,\n });\n\n return (\n
\n \n {rowVirtualizer.getVirtualItems().map(virtualItem => {\n const [id, translation] = filteredLines[virtualItem.index];\n return (\n \n
\n
\n \n {id}\n \n {\n const newLines = {...lines};\n delete newLines[id];\n setLines(newLines);\n }}\n >\n \n \n
\n
\n {\n const newLines = {...lines};\n newLines[id] = e.target.value;\n setLines(newLines);\n }}\n />\n
\n
\n
\n );\n })}\n \n \n );\n}\n","import React from 'react';\nimport {useDialogContext} from './dialog-context';\nimport {Dialog} from './dialog';\nimport {DialogBody} from './dialog-body';\nimport {IconButton} from '@common/ui/buttons/icon-button';\nimport {CloseIcon} from '@common/icons/material/Close';\nimport {KeyboardArrowLeftIcon} from '@common/icons/material/KeyboardArrowLeft';\nimport {KeyboardArrowRightIcon} from '@common/icons/material/KeyboardArrowRight';\nimport {useControlledState} from '@react-stately/utils';\n\ninterface Props {\n image?: string;\n images?: string[];\n activeIndex?: number;\n onActiveIndexChange?: (index: number) => void;\n defaultActiveIndex?: number;\n}\nexport function ImageZoomDialog(props: Props) {\n const {close} = useDialogContext();\n const {image, images} = props;\n const [activeIndex, setActiveIndex] = useControlledState(\n props.activeIndex,\n props.defaultActiveIndex,\n props.onActiveIndexChange\n );\n const src = image || images?.[activeIndex];\n\n return (\n \n \n {\n close();\n }}\n >\n \n \n
\n {images?.length ? (\n {\n setActiveIndex(activeIndex - 1);\n }}\n >\n \n \n ) : null}\n \n {images?.length ? (\n {\n setActiveIndex(activeIndex + 1);\n }}\n >\n \n \n ) : null}\n
\n
\n
\n );\n}\n","import {useContext} from 'react';\nimport {\n AdConfig,\n SiteConfigContext,\n} from '../../core/settings/site-config-context';\nimport {Form} from '../../ui/forms/form';\nimport {useForm} from 'react-hook-form';\nimport {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {Trans} from '../../i18n/trans';\nimport {Button} from '../../ui/buttons/button';\nimport {FormSwitch} from '../../ui/forms/toggle/switch';\nimport {useAdminSettings} from '../settings/requests/use-admin-settings';\nimport {ProgressCircle} from '../../ui/progress/progress-circle';\nimport {Settings} from '../../core/settings/settings';\nimport {\n AdminSettingsWithFiles,\n useUpdateAdminSettings,\n} from '../settings/requests/update-admin-settings';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {ImageZoomDialog} from '../../ui/overlays/dialog/image-zoom-dialog';\nimport {StaticPageTitle} from '../../seo/static-page-title';\n\nexport function AdsPage() {\n const query = useAdminSettings();\n\n return (\n
\n \n \n \n

\n \n

\n {query.isLoading ? (\n \n ) : (\n \n )}\n
\n );\n}\n\ninterface AdsFormProps {\n defaultValues: Settings['ads'];\n}\nfunction AdsForm({defaultValues}: AdsFormProps) {\n const {\n admin: {ads},\n } = useContext(SiteConfigContext);\n\n const form = useForm({\n defaultValues: {client: {ads: defaultValues}},\n });\n const updateSettings = useUpdateAdminSettings(form);\n\n return (\n {\n updateSettings.mutate(value);\n }}\n >\n {ads.map(ad => {\n return ;\n })}\n \n }\n >\n \n \n \n \n \n \n );\n}\n\ninterface AdSectionProps {\n adConfig: AdConfig;\n}\nfunction AdSection({adConfig}: AdSectionProps) {\n return (\n
\n }\n />\n \n \n \n \n \n \n
\n );\n}\n","import {NavLink} from 'react-router-dom';\nimport {AppearanceButton} from './appearance-button';\nimport {useAppearanceStore} from './appearance-store';\nimport {Trans} from '../../i18n/trans';\nimport {Fragment, useMemo} from 'react';\n\nexport function SectionList() {\n const sections = useAppearanceStore(s => s.config?.sections);\n const sortedSection = useMemo(() => {\n if (!sections) return [];\n return Object.entries(sections || [])\n .map(([key, value]) => {\n return {\n ...value,\n key,\n };\n })\n .sort((a, b) => (a?.position || 1) - (b?.position || 1));\n }, [sections]);\n\n return (\n \n {sortedSection.map(section => {\n return (\n \n \n \n );\n })}\n \n );\n}\n","import {\n BackendFilter,\n FilterControlType,\n FilterOperator,\n} from '../../datatable/filters/backend-filter';\nimport {message} from '../../i18n/message';\nimport {\n createdAtFilter,\n updatedAtFilter,\n} from '@common/datatable/filters/timestamp-filters';\n\nexport const RoleIndexPageFilters: BackendFilter[] = [\n {\n key: 'type',\n label: message('Type'),\n description: message('Type of the role'),\n defaultOperator: FilterOperator.ne,\n control: {\n type: FilterControlType.Select,\n defaultValue: '01',\n options: [\n {\n key: '01',\n label: message('Sitewide'),\n value: 'sitewide',\n },\n {\n key: '02',\n label: message('Workspace'),\n value: 'workspace',\n },\n ],\n },\n },\n createdAtFilter({\n description: message('Date role was created'),\n }),\n updatedAtFilter({\n description: message('Date role was last updated'),\n }),\n];\n","import React, {Fragment} from 'react';\nimport {Link} from 'react-router-dom';\nimport {DataTablePage} from '../../datatable/page/data-table-page';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {EditIcon} from '../../icons/material/Edit';\nimport {FormattedDate} from '../../i18n/formatted-date';\nimport {ColumnConfig} from '../../datatable/column-config';\nimport {Trans} from '../../i18n/trans';\nimport {Role} from '../../auth/role';\nimport teamSvg from './team.svg';\nimport {DeleteSelectedItemsAction} from '../../datatable/page/delete-selected-items-action';\nimport {DataTableEmptyStateMessage} from '../../datatable/page/data-table-emty-state-message';\nimport {RoleIndexPageFilters} from './role-index-page-filters';\nimport {DataTableExportCsvButton} from '../../datatable/csv-export/data-table-export-csv-button';\nimport {DataTableAddItemButton} from '../../datatable/data-table-add-item-button';\n\nconst columnConfig: ColumnConfig[] = [\n {\n key: 'name',\n allowsSorting: true,\n visibleInMode: 'all',\n header: () => ,\n body: role => (\n
\n
\n \n
\n
\n {role.description ? : undefined}\n
\n
\n ),\n },\n {\n key: 'type',\n maxWidth: 'max-w-100',\n allowsSorting: true,\n header: () => ,\n body: role => ,\n },\n {\n key: 'updated_at',\n maxWidth: 'max-w-100',\n allowsSorting: true,\n header: () => ,\n body: role => ,\n },\n {\n key: 'actions',\n header: () => ,\n hideHeader: true,\n visibleInMode: 'all',\n align: 'end',\n width: 'w-42 flex-shrink-0',\n body: role => {\n return (\n \n \n \n \n \n );\n },\n },\n];\n\nexport function RolesIndexPage() {\n return (\n }\n columns={columnConfig}\n filters={RoleIndexPageFilters}\n actions={}\n selectedActions={}\n emptyStateMessage={\n }\n filteringTitle={}\n />\n }\n />\n );\n}\n\nfunction Actions() {\n return (\n \n \n \n \n \n \n );\n}\n","import {useQuery} from '@tanstack/react-query';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {apiClient} from '@common/http/query-client';\nimport {Role} from '@common/auth/role';\nimport {useParams} from 'react-router-dom';\n\nconst Endpoint = (id: number | string) => `roles/${id}`;\n\nexport interface FetchRoleResponse extends BackendResponse {\n role: Role;\n}\n\nexport function useRole() {\n const {roleId} = useParams();\n return useQuery({\n queryKey: [Endpoint(roleId!)],\n queryFn: () => fetchRole(roleId!),\n });\n}\n\nfunction fetchRole(roleId: number | string): Promise {\n return apiClient.get(Endpoint(roleId)).then(response => response.data);\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient, queryClient} from '../../../http/query-client';\nimport {BackendResponse} from '../../../http/backend-response/backend-response';\nimport {toast} from '../../../ui/toast/toast';\nimport {Role} from '../../../auth/role';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {message} from '../../../i18n/message';\nimport {DatatableDataQueryKey} from '../../../datatable/requests/paginated-resources';\nimport {showHttpErrorToast} from '../../../utils/http/show-http-error-toast';\nimport {useNavigate} from '../../../utils/hooks/use-navigate';\n\ninterface Response extends BackendResponse {\n role: Role;\n}\n\ninterface Payload extends Partial {\n id: number;\n}\n\nconst Endpoint = (id: number) => `roles/${id}`;\n\nexport function useUpdateRole() {\n const {trans} = useTrans();\n const navigate = useNavigate();\n return useMutation({\n mutationFn: (payload: Payload) => updateRole(payload),\n onSuccess: response => {\n toast(trans(message('Role updated')));\n queryClient.invalidateQueries({queryKey: [Endpoint(response.role.id)]});\n queryClient.invalidateQueries({queryKey: DatatableDataQueryKey('roles')});\n navigate('/admin/roles');\n },\n onError: err => showHttpErrorToast(err),\n });\n}\n\nfunction updateRole({id, ...payload}: Payload): Promise {\n return apiClient.put(Endpoint(id), payload).then(r => r.data);\n}\n","import {Role} from '../../../auth/role';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {useFormContext} from 'react-hook-form';\nimport {FormTextField} from '../../../ui/forms/input-field/text-field/text-field';\nimport {Trans} from '../../../i18n/trans';\nimport {message} from '../../../i18n/message';\nimport {FormSelect} from '../../../ui/forms/select/select';\nimport {Item} from '../../../ui/forms/listbox/item';\nimport {FormSwitch} from '../../../ui/forms/toggle/switch';\nimport {FormPermissionSelector} from '../../../auth/ui/permission-selector';\nimport {useSettings} from '../../../core/settings/use-settings';\n\ninterface CrupdateRolePageSettingsPanelProps {\n isInternal?: boolean;\n}\nexport function CrupdateRolePageSettingsPanel({\n isInternal = false,\n}: CrupdateRolePageSettingsPanelProps) {\n const {trans} = useTrans();\n const {workspaces} = useSettings();\n const {watch} = useFormContext();\n const watchedType = watch('type');\n\n return (\n <>\n }\n name=\"name\"\n className=\"mb-20\"\n required\n />\n }\n name=\"description\"\n inputElementType=\"textarea\"\n placeholder={trans(message('Role description...'))}\n rows={4}\n className=\"mb-20\"\n />\n {workspaces.integrated && (\n }\n name=\"type\"\n selectionMode=\"single\"\n className=\"mb-20\"\n description={\n \n }\n >\n \n \n \n \n \n \n \n )}\n {!isInternal && (\n <>\n \n }\n >\n \n \n {watchedType === 'sitewide' && (\n \n }\n >\n \n \n )}\n \n )}\n

\n \n

\n \n \n );\n}\n","import {Dialog} from '../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../ui/overlays/dialog/dialog-header';\nimport {Trans} from '../i18n/trans';\nimport {DialogBody} from '../ui/overlays/dialog/dialog-body';\nimport {TextField} from '../ui/forms/input-field/text-field/text-field';\nimport {SearchIcon} from '../icons/material/Search';\nimport {useState} from 'react';\nimport {useTrans} from '../i18n/use-trans';\nimport {message} from '../i18n/message';\nimport {Avatar} from '../ui/images/avatar';\nimport {NormalizedModel} from '../datatable/filters/normalized-model';\nimport {IllustratedMessage} from '../ui/images/illustrated-message';\nimport {SvgImage} from '../ui/images/svg-image/svg-image';\nimport teamSvg from '../admin/roles/team.svg';\nimport {useDialogContext} from '../ui/overlays/dialog/dialog-context';\nimport {useNormalizedModels} from './queries/use-normalized-models';\n\ninterface SelectUserDialogProps {\n onUserSelected: (user: NormalizedModel) => void;\n}\n\nexport function SelectUserDialog({onUserSelected}: SelectUserDialogProps) {\n const {close} = useDialogContext();\n const [searchTerm, setSearchTerm] = useState('');\n const {trans} = useTrans();\n const query = useNormalizedModels('normalized-models/user', {\n query: searchTerm,\n perPage: 14,\n });\n const users = query.data?.results || [];\n\n const emptyStateMessage = (\n }\n description={}\n image={}\n />\n );\n\n const selectUser = (user: NormalizedModel) => {\n close();\n onUserSelected(user);\n };\n\n return (\n \n \n \n \n \n }\n placeholder={trans(message('Search for user by name or email'))}\n value={searchTerm}\n onChange={e => {\n setSearchTerm(e.target.value);\n }}\n />\n {!query.isLoading && !users.length && emptyStateMessage}\n
\n {users.map(user => (\n \n ))}\n
\n
\n
\n );\n}\n\ninterface UserListItemProps {\n user: NormalizedModel;\n onUserSelected: (user: NormalizedModel) => void;\n}\nfunction UserListItem({user, onUserSelected}: UserListItemProps) {\n return (\n {\n onUserSelected(user);\n }}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onUserSelected(user);\n }\n }}\n >\n \n
\n
{user.name}
\n
\n {user.description}\n
\n
\n \n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient} from '../../../http/query-client';\nimport {BackendResponse} from '../../../http/backend-response/backend-response';\nimport {toast} from '../../../ui/toast/toast';\nimport {message} from '../../../i18n/message';\nimport {Role} from '../../../auth/role';\nimport {showHttpErrorToast} from '../../../utils/http/show-http-error-toast';\n\ninterface Response extends BackendResponse {}\n\ninterface Payload {\n userIds: number[];\n}\n\nexport function useRemoveUsersFromRole(role: Role) {\n return useMutation({\n mutationFn: ({userIds}: Payload) =>\n removeUsersFromRole({userIds, roleId: role.id}),\n onSuccess: (response, payload) => {\n toast(\n message('Removed [one 1 user|other :count users] from “{role}“', {\n values: {count: payload.userIds.length, role: role.name},\n }),\n );\n },\n onError: err => showHttpErrorToast(err),\n });\n}\n\nfunction removeUsersFromRole({\n roleId,\n userIds,\n}: Payload & {roleId: number}): Promise {\n return apiClient\n .post(`roles/${roleId}/remove-users`, {userIds})\n .then(r => r.data);\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient} from '../../../http/query-client';\nimport {BackendResponse} from '../../../http/backend-response/backend-response';\nimport {toast} from '../../../ui/toast/toast';\nimport {message} from '../../../i18n/message';\nimport {Role} from '../../../auth/role';\nimport {showHttpErrorToast} from '../../../utils/http/show-http-error-toast';\n\ninterface Response extends BackendResponse {}\n\ninterface Payload {\n userIds: number[];\n}\n\nexport function useAddUsersToRole(role: Role) {\n return useMutation({\n mutationFn: ({userIds}: Payload) =>\n addUsersToRole({userIds, roleId: role.id}),\n onSuccess: (response, payload) => {\n toast(\n message('Assigned [one 1 user|other :count users] to {role}', {\n values: {count: payload.userIds.length, role: role.name},\n }),\n );\n },\n onError: err => showHttpErrorToast(err),\n });\n}\n\nfunction addUsersToRole({\n roleId,\n userIds,\n}: Payload & {roleId: number}): Promise {\n return apiClient\n .post(`roles/${roleId}/add-users`, {userIds})\n .then(r => r.data);\n}\n","import {Role} from '../../../auth/role';\nimport {ColumnConfig} from '../../../datatable/column-config';\nimport {User} from '../../../auth/user';\nimport {Trans} from '../../../i18n/trans';\nimport {NameWithAvatar} from '../../../datatable/column-templates/name-with-avatar';\nimport {FormattedDate} from '../../../i18n/formatted-date';\nimport React from 'react';\nimport teamSvg from '../team.svg';\nimport {DialogTrigger} from '../../../ui/overlays/dialog/dialog-trigger';\nimport {Button} from '../../../ui/buttons/button';\nimport {SelectUserDialog} from '../../../users/select-user-dialog';\nimport {queryClient} from '../../../http/query-client';\nimport {DatatableDataQueryKey} from '../../../datatable/requests/paginated-resources';\nimport {DataTableEmptyStateMessage} from '../../../datatable/page/data-table-emty-state-message';\nimport {useDataTable} from '../../../datatable/page/data-table-context';\nimport {ConfirmationDialog} from '../../../ui/overlays/dialog/confirmation-dialog';\nimport {useRemoveUsersFromRole} from '../requests/use-remove-users-from-role';\nimport {useAddUsersToRole} from '../requests/use-add-users-to-role';\nimport {DataTable} from '../../../datatable/data-table';\nimport {useIsMobileMediaQuery} from '../../../utils/hooks/is-mobile-media-query';\n\nconst userColumn: ColumnConfig = {\n key: 'name',\n allowsSorting: true,\n sortingKey: 'email',\n header: () => ,\n body: user => (\n \n ),\n width: 'col-w-3',\n};\n\nconst desktopColumns: ColumnConfig[] = [\n userColumn,\n {\n key: 'first_name',\n allowsSorting: true,\n header: () => ,\n body: user => user.first_name,\n },\n {\n key: 'last_name',\n allowsSorting: true,\n header: () => ,\n body: user => user.last_name,\n },\n {\n key: 'created_at',\n allowsSorting: true,\n header: () => ,\n body: user => ,\n },\n];\n\nconst mobileColumns: ColumnConfig[] = [userColumn];\n\ninterface CrupdateRolePageUsersPanelProps {\n role: Role;\n}\nexport function EditRolePageUsersPanel({\n role,\n}: CrupdateRolePageUsersPanelProps) {\n const isMobile = useIsMobileMediaQuery();\n\n if (role.guests || role.type === 'workspace') {\n return (\n
\n }\n />\n
\n );\n }\n\n return (\n }\n selectedActions={}\n emptyStateMessage={\n \n }\n filteringTitle={}\n />\n }\n />\n );\n}\n\ninterface AssignUserActionProps {\n role: Role;\n}\nfunction AssignUserAction({role}: AssignUserActionProps) {\n const addUsers = useAddUsersToRole(role);\n return (\n \n \n {\n addUsers.mutate(\n {userIds: [user.id as number]},\n {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey('users', {\n roleId: `${role.id}`,\n }),\n });\n },\n },\n );\n }}\n />\n \n );\n}\n\ntype RemoveUsersActionProps = {\n role: Role;\n};\nexport function RemoveUsersAction({role}: RemoveUsersActionProps) {\n const removeUsers = useRemoveUsersFromRole(role);\n const {selectedRows} = useDataTable();\n\n return (\n {\n if (isConfirmed) {\n removeUsers.mutate(\n {userIds: selectedRows as number[]},\n {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey('users', {\n roleId: `${role.id}`,\n }),\n });\n },\n },\n );\n }\n }}\n >\n \n \n }\n body={}\n confirm={}\n isDanger\n />\n \n );\n}\n","import {useRole} from '../requests/use-role';\nimport {FullPageLoader} from '../../../ui/progress/full-page-loader';\nimport {Role} from '../../../auth/role';\nimport {Trans} from '../../../i18n/trans';\nimport {useForm} from 'react-hook-form';\nimport {Tabs} from '../../../ui/tabs/tabs';\nimport {Tab} from '../../../ui/tabs/tab';\nimport {TabList} from '../../../ui/tabs/tab-list';\nimport {TabPanel, TabPanels} from '../../../ui/tabs/tab-panels';\nimport {useUpdateRole} from '../requests/use-update-role';\nimport {CrupdateResourceLayout} from '../../crupdate-resource-layout';\nimport {CrupdateRolePageSettingsPanel} from './crupdate-role-settings-panel';\nimport {EditRolePageUsersPanel} from './edit-role-page-users-panel';\n\nexport function EditRolePage() {\n const query = useRole();\n\n if (query.status !== 'success') {\n return ;\n }\n\n return ;\n}\n\ninterface PageContentProps {\n role: Role;\n}\nfunction PageContent({role}: PageContentProps) {\n const form = useForm({defaultValues: role});\n const updateRole = useUpdateRole();\n\n return (\n {\n updateRole.mutate(values);\n }}\n title={}\n isLoading={updateRole.isPending}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient, queryClient} from '../../../http/query-client';\nimport {BackendResponse} from '../../../http/backend-response/backend-response';\nimport {toast} from '../../../ui/toast/toast';\nimport {Role} from '../../../auth/role';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {message} from '../../../i18n/message';\nimport {DatatableDataQueryKey} from '../../../datatable/requests/paginated-resources';\nimport {onFormQueryError} from '../../../errors/on-form-query-error';\nimport {UseFormReturn} from 'react-hook-form';\n\ninterface Response extends BackendResponse {\n role: Role;\n}\n\nexport interface CreateRolePayload extends Partial {}\n\nconst Endpoint = 'roles';\n\nexport function useCreateRole(form: UseFormReturn) {\n const {trans} = useTrans();\n return useMutation({\n mutationFn: (payload: CreateRolePayload) => createRole(payload),\n onSuccess: () => {\n toast(trans(message('Created new role')));\n queryClient.invalidateQueries({queryKey: DatatableDataQueryKey('roles')});\n },\n onError: r => onFormQueryError(r, form),\n });\n}\n\nfunction createRole({id, ...payload}: CreateRolePayload): Promise {\n return apiClient.post(Endpoint, payload).then(r => r.data);\n}\n","import {useForm} from 'react-hook-form';\nimport {CrupdateResourceLayout} from '../../crupdate-resource-layout';\nimport {Trans} from '../../../i18n/trans';\nimport {CrupdateRolePageSettingsPanel} from './crupdate-role-settings-panel';\nimport {CreateRolePayload, useCreateRole} from '../requests/user-create-role';\nimport {useNavigate} from '../../../utils/hooks/use-navigate';\n\nexport function CreateRolePage() {\n const form = useForm({defaultValues: {type: 'sitewide'}});\n const createRole = useCreateRole(form);\n const navigate = useNavigate();\n\n return (\n {\n createRole.mutate(values, {\n onSuccess: response => {\n navigate(`/admin/roles/${response.role.id}/edit`);\n },\n });\n }}\n title={}\n isLoading={createRole.isPending}\n >\n \n \n );\n}\n","import {\n BackendFilter,\n FilterControlType,\n FilterOperator,\n} from '../../datatable/filters/backend-filter';\nimport {message} from '../../i18n/message';\nimport {TagType} from '../../core/settings/site-config-context';\nimport {\n createdAtFilter,\n updatedAtFilter,\n} from '@common/datatable/filters/timestamp-filters';\n\nexport const TagIndexPageFilters = (types: TagType[]): BackendFilter[] => {\n return [\n {\n key: 'type',\n label: message('Type'),\n description: message('Type of the tag'),\n defaultOperator: FilterOperator.ne,\n control: {\n type: FilterControlType.Select,\n defaultValue: types[0].name,\n options: types.map(type => ({\n key: type.name,\n label: message(type.name),\n value: type.name,\n })),\n },\n },\n createdAtFilter({\n description: message('Date tag was created'),\n }),\n updatedAtFilter({\n description: message('Date tag was last updated'),\n }),\n ];\n};\n","export default \"__VITE_ASSET__8de61ea9__\"","import {Tag} from '../../tags/tag';\nimport {UseFormReturn} from 'react-hook-form';\nimport {Form} from '../../ui/forms/form';\nimport {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {FormSelect} from '../../ui/forms/select/select';\nimport {Trans} from '../../i18n/trans';\nimport {Item} from '../../ui/forms/listbox/item';\nimport {useContext} from 'react';\nimport {SiteConfigContext} from '../../core/settings/site-config-context';\n\ninterface CrupdateTagFormProps {\n onSubmit: (values: Partial) => void;\n formId: string;\n form: UseFormReturn>;\n}\nexport function CrupdateTagForm({\n form,\n onSubmit,\n formId,\n}: CrupdateTagFormProps) {\n const {\n tags: {types},\n } = useContext(SiteConfigContext);\n const watchedType = form.watch('type');\n const isSystem = !!types.find(t => t.name === watchedType && t.system);\n\n return (\n
\n }\n description={}\n className=\"mb-20\"\n required\n autoFocus\n />\n }\n description={}\n className=\"mb-20\"\n />\n \n {types\n .filter(t => !t.system)\n .map(type => (\n \n \n \n ))}\n \n \n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient, queryClient} from '@common/http/query-client';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {toast} from '@common/ui/toast/toast';\nimport {message} from '@common/i18n/message';\nimport {Tag} from '@common/tags/tag';\nimport {DatatableDataQueryKey} from '@common/datatable/requests/paginated-resources';\nimport {onFormQueryError} from '@common/errors/on-form-query-error';\nimport {UseFormReturn} from 'react-hook-form';\n\ninterface Response extends BackendResponse {\n tag: Tag;\n}\n\ninterface Payload extends Partial {}\n\nexport function useCreateNewTag(form: UseFormReturn) {\n const {trans} = useTrans();\n return useMutation({\n mutationFn: (props: Payload) => createNewTag(props),\n onSuccess: () => {\n toast(trans(message('Tag created')));\n queryClient.invalidateQueries({queryKey: DatatableDataQueryKey('tags')});\n },\n onError: err => onFormQueryError(err, form),\n });\n}\n\nfunction createNewTag(payload: Payload): Promise {\n return apiClient.post('tags', payload).then(r => r.data);\n}\n","import {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {Trans} from '../../i18n/trans';\nimport {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {CrupdateTagForm} from './crupdate-tag-form';\nimport {DialogFooter} from '../../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../../ui/buttons/button';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {useCreateNewTag} from './requests/use-create-new-tag';\nimport {useContext} from 'react';\nimport {SiteConfigContext} from '../../core/settings/site-config-context';\nimport {useForm} from 'react-hook-form';\nimport {Tag} from '../../tags/tag';\n\nexport function CreateTagDialog() {\n const {close, formId} = useDialogContext();\n const {\n tags: {types},\n } = useContext(SiteConfigContext);\n const form = useForm>({\n defaultValues: {\n type: types[0].name,\n },\n });\n const createNewTag = useCreateNewTag(form);\n\n return (\n \n \n \n \n \n {\n createNewTag.mutate(values, {\n onSuccess: () => {\n close();\n },\n });\n }}\n />\n \n \n {\n close();\n }}\n >\n \n \n \n \n \n \n \n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient, queryClient} from '@common/http/query-client';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {toast} from '@common/ui/toast/toast';\nimport {message} from '@common/i18n/message';\nimport {Tag} from '@common/tags/tag';\nimport {DatatableDataQueryKey} from '@common/datatable/requests/paginated-resources';\nimport {onFormQueryError} from '@common/errors/on-form-query-error';\nimport {UseFormReturn} from 'react-hook-form';\n\ninterface Response extends BackendResponse {\n tag: Tag;\n}\n\nexport interface UpdateTagPayload extends Partial {\n id: number;\n}\n\nexport function useUpdateTag(form: UseFormReturn) {\n const {trans} = useTrans();\n return useMutation({\n mutationFn: (props: UpdateTagPayload) => updateTag(props),\n onSuccess: () => {\n toast(trans(message('Tag updated')));\n queryClient.invalidateQueries({queryKey: DatatableDataQueryKey('tags')});\n },\n onError: err => onFormQueryError(err, form),\n });\n}\n\nfunction updateTag({id, ...payload}: UpdateTagPayload): Promise {\n return apiClient.put(`tags/${id}`, payload).then(r => r.data);\n}\n","import {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {Trans} from '../../i18n/trans';\nimport {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {CrupdateTagForm} from './crupdate-tag-form';\nimport {DialogFooter} from '../../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../../ui/buttons/button';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {useForm} from 'react-hook-form';\nimport {Tag} from '../../tags/tag';\nimport {UpdateTagPayload, useUpdateTag} from './requests/use-update-tag';\n\ninterface UpdateTagDialogProps {\n tag: Tag;\n}\nexport function UpdateTagDialog({tag}: UpdateTagDialogProps) {\n const {close, formId} = useDialogContext();\n const form = useForm({\n defaultValues: {\n id: tag.id,\n name: tag.name,\n display_name: tag.display_name,\n type: tag.type,\n },\n });\n const updateTag = useUpdateTag(form);\n\n return (\n \n \n \n \n \n {\n updateTag.mutate(values as UpdateTagPayload, {\n onSuccess: () => {\n close();\n },\n });\n }}\n />\n \n \n {\n close();\n }}\n >\n \n \n \n \n \n \n \n );\n}\n","import React, {useContext, useMemo} from 'react';\nimport {DataTablePage} from '../../datatable/page/data-table-page';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {EditIcon} from '../../icons/material/Edit';\nimport {FormattedDate} from '../../i18n/formatted-date';\nimport {ColumnConfig} from '../../datatable/column-config';\nimport {Trans} from '../../i18n/trans';\nimport {DeleteSelectedItemsAction} from '../../datatable/page/delete-selected-items-action';\nimport {DataTableEmptyStateMessage} from '../../datatable/page/data-table-emty-state-message';\nimport {Tag} from '../../tags/tag';\nimport {SiteConfigContext} from '../../core/settings/site-config-context';\nimport {TagIndexPageFilters} from './tag-index-page-filters';\nimport softwareEngineerSvg from './software-engineer.svg';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {CreateTagDialog} from './create-tag-dialog';\nimport {UpdateTagDialog} from './update-tag-dialog';\nimport {DataTableAddItemButton} from '../../datatable/data-table-add-item-button';\n\nconst columnConfig: ColumnConfig[] = [\n {\n key: 'name',\n allowsSorting: true,\n visibleInMode: 'all',\n width: 'flex-3 min-w-200',\n header: () => ,\n body: tag => tag.name,\n },\n {\n key: 'type',\n allowsSorting: true,\n header: () => ,\n body: tag => tag.type,\n },\n {\n key: 'display_name',\n allowsSorting: true,\n header: () => ,\n body: tag => tag.display_name,\n },\n {\n key: 'updated_at',\n allowsSorting: true,\n width: 'w-100',\n header: () => ,\n body: tag => ,\n },\n {\n key: 'actions',\n header: () => ,\n hideHeader: true,\n align: 'end',\n width: 'w-42 flex-shrink-0',\n visibleInMode: 'all',\n body: tag => {\n return (\n \n \n \n \n \n \n );\n },\n },\n];\n\nexport function TagIndexPage() {\n const {tags} = useContext(SiteConfigContext);\n const filters = useMemo(() => {\n return TagIndexPageFilters(tags.types);\n }, [tags.types]);\n\n return (\n }\n columns={columnConfig}\n filters={filters}\n actions={}\n selectedActions={}\n emptyStateMessage={\n }\n filteringTitle={}\n />\n }\n />\n );\n}\n\nfunction Actions() {\n return (\n <>\n \n \n \n \n \n \n \n );\n}\n","import {Fragment, memo} from 'react';\nimport {prettyBytes} from './utils/pretty-bytes';\n\ninterface FormattedBytesProps {\n bytes?: number;\n}\nexport const FormattedBytes = memo(({bytes}: FormattedBytesProps) => {\n return {prettyBytes(bytes)};\n});\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const VisibilityIcon = createSvgIcon(\n \n, 'VisibilityOutlined');\n","export default \"__VITE_ASSET__31048831__\"","import React, {Fragment} from 'react';\nimport {DataTablePage} from '../../datatable/page/data-table-page';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {FormattedDate} from '../../i18n/formatted-date';\nimport {ColumnConfig} from '../../datatable/column-config';\nimport {Trans} from '../../i18n/trans';\nimport {DeleteSelectedItemsAction} from '../../datatable/page/delete-selected-items-action';\nimport {DataTableEmptyStateMessage} from '../../datatable/page/data-table-emty-state-message';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {FileEntry} from '../../uploads/file-entry';\nimport {NameWithAvatar} from '../../datatable/column-templates/name-with-avatar';\nimport {User} from '../../auth/user';\nimport {CheckIcon} from '../../icons/material/Check';\nimport {CloseIcon} from '../../icons/material/Close';\nimport {FormattedBytes} from '../../uploads/formatted-bytes';\nimport {VisibilityIcon} from '../../icons/material/Visibility';\nimport uploadSvg from './upload.svg';\nimport {FilePreviewDialog} from '../../uploads/preview/file-preview-dialog';\nimport {FILE_ENTRY_INDEX_FILTERS} from './file-entry-index-filters';\nimport {FileTypeIcon} from '../../uploads/file-type-icon/file-type-icon';\n\nconst columnConfig: ColumnConfig[] = [\n {\n key: 'name',\n allowsSorting: true,\n visibleInMode: 'all',\n width: 'flex-3 min-w-200',\n header: () => ,\n body: entry => (\n \n
{entry.name}
\n
\n {entry.file_name}\n
\n
\n ),\n },\n {\n key: 'owner_id',\n allowsSorting: true,\n width: 'flex-3 min-w-200',\n header: () => ,\n body: entry => {\n const user = entry.users?.[0] as User;\n if (!user) return null;\n return (\n \n );\n },\n },\n {\n key: 'type',\n width: 'w-100 flex-shrink-0',\n allowsSorting: true,\n header: () => ,\n body: entry => (\n
\n \n
{entry.type}
\n
\n ),\n },\n {\n key: 'public',\n allowsSorting: true,\n width: 'w-60 flex-shrink-0',\n header: () => ,\n body: entry =>\n entry.public ? (\n \n ) : (\n \n ),\n },\n {\n key: 'file_size',\n allowsSorting: true,\n maxWidth: 'max-w-100',\n header: () => ,\n body: entry => ,\n },\n {\n key: 'updated_at',\n allowsSorting: true,\n width: 'w-100',\n header: () => ,\n body: entry => ,\n },\n {\n key: 'actions',\n header: () => ,\n hideHeader: true,\n align: 'end',\n width: 'w-42 flex-shrink-0',\n visibleInMode: 'all',\n body: entry => {\n return (\n \n \n \n \n \n \n );\n },\n },\n];\n\nexport function FileEntryIndexPage() {\n return (\n }\n columns={columnConfig}\n filters={FILE_ENTRY_INDEX_FILTERS}\n selectedActions={}\n emptyStateMessage={\n }\n filteringTitle={}\n />\n }\n />\n );\n}\n","import {\n BackendFilter,\n FilterControlType,\n FilterOperator,\n} from '../../datatable/filters/backend-filter';\nimport {message} from '../../i18n/message';\nimport {\n createdAtFilter,\n timestampFilter,\n updatedAtFilter,\n} from '../../datatable/filters/timestamp-filters';\n\nexport const SubscriptionIndexPageFilters: BackendFilter[] = [\n {\n key: 'ends_at',\n label: message('Status'),\n description: message('Whether subscription is active or cancelled'),\n defaultOperator: FilterOperator.eq,\n control: {\n type: FilterControlType.Select,\n defaultValue: 'active',\n options: [\n {\n key: 'active',\n label: message('Active'),\n value: {value: null, operator: FilterOperator.eq},\n },\n {\n key: 'cancelled',\n label: message('Cancelled'),\n value: {value: null, operator: FilterOperator.ne},\n },\n ],\n },\n },\n {\n control: {\n type: FilterControlType.Select,\n defaultValue: 'stripe',\n options: [\n {\n key: 'stripe',\n label: message('Stripe'),\n value: 'stripe',\n },\n {\n key: 'paypal',\n label: message('PayPal'),\n value: 'paypal',\n },\n {\n key: 'none',\n label: message('None'),\n value: 'none',\n },\n ],\n },\n key: 'gateway_name',\n label: message('Gateway'),\n description: message(\n 'With which payment provider was subscription created'\n ),\n defaultOperator: FilterOperator.eq,\n },\n timestampFilter({\n key: 'renews_at',\n label: message('Renew date'),\n description: message('Date subscription will renew'),\n }),\n createdAtFilter({\n description: message('Date subscription was created'),\n }),\n updatedAtFilter({\n description: message('Date subscription was last updated'),\n }),\n];\n","export default \"__VITE_ASSET__2e46d67b__\"","import {useMutation} from '@tanstack/react-query';\nimport {apiClient, queryClient} from '../../../http/query-client';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {BackendResponse} from '../../../http/backend-response/backend-response';\nimport {toast} from '../../../ui/toast/toast';\nimport {message} from '../../../i18n/message';\nimport {DatatableDataQueryKey} from '../../../datatable/requests/paginated-resources';\nimport {onFormQueryError} from '../../../errors/on-form-query-error';\nimport {UseFormReturn} from 'react-hook-form';\nimport {Subscription} from '../../../billing/subscription';\n\ninterface Response extends BackendResponse {\n subscription: Subscription;\n}\n\nexport interface UpdateSubscriptionPayload extends Partial {\n id: number;\n}\n\nexport function useUpdateSubscription(\n form: UseFormReturn,\n) {\n const {trans} = useTrans();\n return useMutation({\n mutationFn: (props: UpdateSubscriptionPayload) => updateSubscription(props),\n onSuccess: () => {\n toast(trans(message('Subscription updated')));\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey('billing/subscriptions'),\n });\n },\n onError: err => onFormQueryError(err, form),\n });\n}\n\nfunction updateSubscription({\n id,\n ...payload\n}: UpdateSubscriptionPayload): Promise {\n return apiClient\n .put(`billing/subscriptions/${id}`, payload)\n .then(r => r.data);\n}\n","import {UseFormReturn} from 'react-hook-form';\nimport {Form} from '../../ui/forms/form';\nimport {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {FormSelect} from '../../ui/forms/select/select';\nimport {Trans} from '../../i18n/trans';\nimport {Item} from '../../ui/forms/listbox/item';\nimport {Subscription} from '../../billing/subscription';\nimport {FormDatePicker} from '../../ui/forms/input-field/date/date-picker/date-picker';\nimport {useProducts} from '../../billing/pricing-table/use-products';\nimport {FormattedPrice} from '../../i18n/formatted-price';\nimport {FormNormalizedModelField} from '../../ui/forms/normalized-model-field';\n\ninterface CrupdateSubscriptionForm {\n onSubmit: (values: Partial) => void;\n formId: string;\n form: UseFormReturn>;\n}\nexport function CrupdateSubscriptionForm({\n form,\n onSubmit,\n formId,\n}: CrupdateSubscriptionForm) {\n const query = useProducts();\n // @ts-ignore\n const watchedProductId = form.watch('product_id');\n const selectedProduct = query.data?.products.find(\n p => p.id === watchedProductId,\n );\n\n return (\n
\n }\n />\n }\n >\n {query.data?.products\n .filter(p => !p.free)\n .map(product => (\n \n \n \n ))}\n \n {!selectedProduct?.free && (\n }\n >\n {selectedProduct?.prices.map(price => (\n \n \n \n ))}\n \n )}\n }\n className=\"mb-20\"\n />\n }\n description={\n \n }\n />\n }\n description={\n \n }\n />\n \n );\n}\n","import {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {Trans} from '../../i18n/trans';\nimport {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {DialogFooter} from '../../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../../ui/buttons/button';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {useForm} from 'react-hook-form';\nimport {Subscription} from '../../billing/subscription';\nimport {\n UpdateSubscriptionPayload,\n useUpdateSubscription,\n} from './requests/use-update-subscription';\nimport {CrupdateSubscriptionForm} from './crupdate-subscription-form';\n\ninterface UpdateSubscriptionDialogProps {\n subscription: Subscription;\n}\nexport function UpdateSubscriptionDialog({\n subscription,\n}: UpdateSubscriptionDialogProps) {\n const {close, formId} = useDialogContext();\n const form = useForm({\n defaultValues: {\n id: subscription.id,\n product_id: subscription.product_id,\n price_id: subscription.price_id,\n description: subscription.description,\n renews_at: subscription.renews_at,\n ends_at: subscription.ends_at,\n user_id: subscription.user_id,\n },\n });\n const updateSubscription = useUpdateSubscription(form);\n\n return (\n \n \n \n \n \n {\n updateSubscription.mutate(values as UpdateSubscriptionPayload, {\n onSuccess: () => {\n close();\n },\n });\n }}\n />\n \n \n {\n close();\n }}\n >\n \n \n \n \n \n \n \n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient, queryClient} from '../../../http/query-client';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {BackendResponse} from '../../../http/backend-response/backend-response';\nimport {toast} from '../../../ui/toast/toast';\nimport {message} from '../../../i18n/message';\nimport {Tag} from '../../../tags/tag';\nimport {DatatableDataQueryKey} from '../../../datatable/requests/paginated-resources';\nimport {onFormQueryError} from '../../../errors/on-form-query-error';\nimport {UseFormReturn} from 'react-hook-form';\nimport {Subscription} from '../../../billing/subscription';\n\nconst endpoint = 'billing/subscriptions';\n\ninterface Response extends BackendResponse {\n tag: Tag;\n}\n\ninterface Payload extends Partial {}\n\nexport function useCreateSubscription(form: UseFormReturn) {\n const {trans} = useTrans();\n return useMutation({\n mutationFn: (props: Payload) => createNewSubscription(props),\n onSuccess: () => {\n toast(trans(message('Subscription created')));\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey(endpoint),\n });\n },\n onError: err => onFormQueryError(err, form),\n });\n}\n\nfunction createNewSubscription(payload: Payload): Promise {\n return apiClient.post(endpoint, payload).then(r => r.data);\n}\n","import {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {Trans} from '../../i18n/trans';\nimport {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {DialogFooter} from '../../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../../ui/buttons/button';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {useForm} from 'react-hook-form';\nimport {useCreateSubscription} from './requests/use-create-subscription';\nimport {Subscription} from '../../billing/subscription';\nimport {CrupdateSubscriptionForm} from './crupdate-subscription-form';\n\nexport function CreateSubscriptionDialog() {\n const {close, formId} = useDialogContext();\n const form = useForm>({});\n const createSubscription = useCreateSubscription(form);\n\n return (\n \n \n \n \n \n {\n createSubscription.mutate(values, {\n onSuccess: () => {\n close();\n },\n });\n }}\n />\n \n \n {\n close();\n }}\n >\n \n \n \n \n \n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const PauseIcon = createSvgIcon(\n \n, 'PauseOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const PlayArrowIcon = createSvgIcon(\n \n, 'PlayArrowOutlined');\n","import React, {Fragment} from 'react';\nimport {DataTablePage} from '../../datatable/page/data-table-page';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {EditIcon} from '../../icons/material/Edit';\nimport {ColumnConfig} from '../../datatable/column-config';\nimport {Trans} from '../../i18n/trans';\nimport {DeleteSelectedItemsAction} from '../../datatable/page/delete-selected-items-action';\nimport {DataTableEmptyStateMessage} from '../../datatable/page/data-table-emty-state-message';\nimport {SubscriptionIndexPageFilters} from './subscription-index-page-filters';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {DataTableAddItemButton} from '../../datatable/data-table-add-item-button';\nimport subscriptionsSvg from './subscriptions.svg';\nimport {NameWithAvatar} from '../../datatable/column-templates/name-with-avatar';\nimport {Subscription} from '../../billing/subscription';\nimport {CloseIcon} from '../../icons/material/Close';\nimport {FormattedDate} from '../../i18n/formatted-date';\nimport {UpdateSubscriptionDialog} from './update-subscription-dialog';\nimport {CreateSubscriptionDialog} from './create-subscription-dialog';\nimport {useCancelSubscription} from '../../billing/billing-page/requests/use-cancel-subscription';\nimport {PauseIcon} from '../../icons/material/Pause';\nimport {queryClient} from '../../http/query-client';\nimport {DatatableDataQueryKey} from '../../datatable/requests/paginated-resources';\nimport {Tooltip} from '../../ui/tooltip/tooltip';\nimport {useResumeSubscription} from '../../billing/billing-page/requests/use-resume-subscription';\nimport {PlayArrowIcon} from '../../icons/material/PlayArrow';\nimport {ConfirmationDialog} from '../../ui/overlays/dialog/confirmation-dialog';\nimport {Chip} from '../../ui/forms/input-field/chip-field/chip';\n\nconst endpoint = 'billing/subscriptions';\n\nconst columnConfig: ColumnConfig[] = [\n {\n key: 'user_id',\n allowsSorting: true,\n width: 'flex-3 min-w-200',\n visibleInMode: 'all',\n header: () => ,\n body: subscription =>\n subscription.user && (\n \n ),\n },\n {\n key: 'status',\n width: 'w-100 flex-shrink-0',\n header: () => ,\n body: subscription => {\n if (subscription.valid) {\n return (\n \n \n \n );\n }\n return (\n \n \n \n );\n },\n },\n {\n key: 'product_id',\n allowsSorting: true,\n header: () => ,\n body: subscription => subscription.product?.name,\n },\n {\n key: 'gateway',\n allowsSorting: true,\n header: () => ,\n body: subscription => (\n {subscription.gateway_name}\n ),\n },\n {\n key: 'renews_at',\n allowsSorting: true,\n header: () => ,\n body: subscription => ,\n },\n {\n key: 'ends_at',\n allowsSorting: true,\n header: () => ,\n body: subscription => ,\n },\n {\n key: 'created_at',\n allowsSorting: true,\n header: () => ,\n body: subscription => ,\n },\n {\n key: 'actions',\n header: () => ,\n hideHeader: true,\n align: 'end',\n visibleInMode: 'all',\n width: 'w-128 flex-shrink-0',\n body: subscription => {\n return ;\n },\n },\n];\n\nexport function SubscriptionsIndexPage() {\n return (\n }\n columns={columnConfig}\n filters={SubscriptionIndexPageFilters}\n actions={}\n enableSelection={false}\n selectedActions={}\n queryParams={{with: 'product'}}\n emptyStateMessage={\n }\n filteringTitle={}\n />\n }\n />\n );\n}\n\nfunction PageActions() {\n return (\n <>\n \n \n \n \n \n \n \n );\n}\n\ninterface SubscriptionActionsProps {\n subscription: Subscription;\n}\nfunction SubscriptionActions({subscription}: SubscriptionActionsProps) {\n return (\n \n \n \n \n \n \n \n {subscription.cancelled ? (\n \n ) : (\n \n )}\n \n \n );\n}\n\nfunction SuspendSubscriptionButton({subscription}: SubscriptionActionsProps) {\n const cancelSubscription = useCancelSubscription();\n\n const handleSuspendSubscription = () => {\n cancelSubscription.mutate(\n {subscriptionId: subscription.id},\n {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey(endpoint),\n });\n },\n },\n );\n };\n\n return (\n {\n if (confirmed) {\n handleSuspendSubscription();\n }\n }}\n >\n }>\n \n \n \n \n }\n body={\n
\n \n
\n \n
\n
\n }\n confirm={}\n />\n \n );\n}\n\nfunction ResumeSubscriptionButton({subscription}: SubscriptionActionsProps) {\n const resumeSubscription = useResumeSubscription();\n const handleResumeSubscription = () => {\n resumeSubscription.mutate(\n {subscriptionId: subscription.id},\n {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey(endpoint),\n });\n },\n },\n );\n };\n\n return (\n {\n if (confirmed) {\n handleResumeSubscription();\n }\n }}\n >\n }>\n \n \n \n \n }\n body={\n
\n \n
\n \n
\n
\n }\n confirm={}\n />\n \n );\n}\n\nfunction CancelSubscriptionButton({subscription}: SubscriptionActionsProps) {\n const cancelSubscription = useCancelSubscription();\n\n const handleDeleteSubscription = () => {\n cancelSubscription.mutate(\n {subscriptionId: subscription.id, delete: true},\n {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey(endpoint),\n });\n },\n },\n );\n };\n\n return (\n {\n if (confirmed) {\n handleDeleteSubscription();\n }\n }}\n >\n }>\n \n \n \n \n }\n body={\n
\n \n
\n \n
\n
\n }\n confirm={}\n />\n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const SyncIcon = createSvgIcon(\n \n, 'SyncOutlined');\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient} from '../../../http/query-client';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {BackendResponse} from '../../../http/backend-response/backend-response';\nimport {toast} from '../../../ui/toast/toast';\nimport {message} from '../../../i18n/message';\nimport {showHttpErrorToast} from '../../../utils/http/show-http-error-toast';\n\ninterface Response extends BackendResponse {}\n\nexport function useSyncProducts() {\n const {trans} = useTrans();\n return useMutation({\n mutationFn: () => syncPlans(),\n onSuccess: () => {\n toast(trans(message('Plans synced')));\n },\n onError: err => showHttpErrorToast(err, message('Could not sync plans')),\n });\n}\n\nfunction syncPlans(): Promise {\n return apiClient.post('billing/products/sync').then(r => r.data);\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient, queryClient} from '../../../http/query-client';\nimport {BackendResponse} from '../../../http/backend-response/backend-response';\nimport {toast} from '../../../ui/toast/toast';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {message} from '../../../i18n/message';\nimport {DatatableDataQueryKey} from '../../../datatable/requests/paginated-resources';\nimport {showHttpErrorToast} from '../../../utils/http/show-http-error-toast';\n\nconst endpoint = (id: number) => `billing/products/${id}`;\n\ninterface Response extends BackendResponse {}\n\ninterface Payload {\n productId: number;\n}\n\nexport function useDeleteProduct() {\n const {trans} = useTrans();\n return useMutation({\n mutationFn: (payload: Payload) => updateProduct(payload),\n onSuccess: () => {\n toast(trans(message('Plan deleted')));\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey('billing/products'),\n });\n },\n onError: err => showHttpErrorToast(err),\n });\n}\n\nfunction updateProduct({productId}: Payload): Promise {\n return apiClient.delete(endpoint(productId)).then(r => r.data);\n}\n","import {\n BackendFilter,\n FilterControlType,\n FilterOperator,\n} from '../../datatable/filters/backend-filter';\nimport {message} from '../../i18n/message';\nimport {\n createdAtFilter,\n updatedAtFilter,\n} from '@common/datatable/filters/timestamp-filters';\n\nexport const PlansIndexPageFilters: BackendFilter[] = [\n {\n key: 'subscriptions',\n label: message('Subscriptions'),\n description: message('Whether plan has any active subscriptions'),\n defaultOperator: FilterOperator.eq,\n control: {\n type: FilterControlType.Select,\n defaultValue: '01',\n options: [\n {\n key: '01',\n label: message('Has active subscriptions'),\n value: {value: '*', operator: FilterOperator.has},\n },\n {\n key: '02',\n label: message('Does not have active subscriptions'),\n value: {value: '*', operator: FilterOperator.doesntHave},\n },\n ],\n },\n },\n createdAtFilter({\n description: message('Date plan was created'),\n }),\n updatedAtFilter({\n description: message('Date plan was last updated'),\n }),\n];\n","import React, {Fragment} from 'react';\nimport {DataTablePage} from '../../datatable/page/data-table-page';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {EditIcon} from '../../icons/material/Edit';\nimport {FormattedDate} from '../../i18n/formatted-date';\nimport {ColumnConfig} from '../../datatable/column-config';\nimport {Trans} from '../../i18n/trans';\nimport {DataTableEmptyStateMessage} from '../../datatable/page/data-table-emty-state-message';\nimport softwareEngineerSvg from './../tags/software-engineer.svg';\nimport {DataTableAddItemButton} from '../../datatable/data-table-add-item-button';\nimport {Product} from '../../billing/product';\nimport {NameWithAvatar} from '../../datatable/column-templates/name-with-avatar';\nimport {Link} from 'react-router-dom';\nimport {FormattedPrice} from '../../i18n/formatted-price';\nimport {SyncIcon} from '../../icons/material/Sync';\nimport {useSyncProducts} from './requests/use-sync-products';\nimport {Tooltip} from '../../ui/tooltip/tooltip';\nimport {useDeleteProduct} from './requests/use-delete-product';\nimport {DeleteIcon} from '../../icons/material/Delete';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {ConfirmationDialog} from '../../ui/overlays/dialog/confirmation-dialog';\nimport {useNavigate} from '../../utils/hooks/use-navigate';\nimport {PlansIndexPageFilters} from './plans-index-page-filters';\n\nconst columnConfig: ColumnConfig[] = [\n {\n key: 'name',\n allowsSorting: true,\n visibleInMode: 'all',\n header: () => ,\n body: product => {\n const price = product.prices[0];\n return (\n \n ) : (\n \n )\n }\n />\n );\n },\n },\n {\n key: 'created_at',\n allowsSorting: true,\n maxWidth: 'max-w-100',\n header: () => ,\n body: product => ,\n },\n {\n key: 'updated_at',\n allowsSorting: true,\n maxWidth: 'max-w-100',\n header: () => ,\n body: product => ,\n },\n {\n key: 'actions',\n header: () => ,\n visibleInMode: 'all',\n hideHeader: true,\n align: 'end',\n maxWidth: 'max-w-84',\n body: product => {\n return (\n \n \n \n \n \n \n );\n },\n },\n];\n\nexport function PlansIndexPage() {\n const navigate = useNavigate();\n return (\n }\n columns={columnConfig}\n actions={}\n enableSelection={false}\n filters={PlansIndexPageFilters}\n onRowAction={item => {\n navigate(`/admin/plans/${item.id}/edit`);\n }}\n emptyStateMessage={\n }\n filteringTitle={}\n />\n }\n />\n );\n}\n\ninterface DeleteProductButtonProps {\n product: Product;\n}\nfunction DeleteProductButton({product}: DeleteProductButtonProps) {\n const deleteProduct = useDeleteProduct();\n return (\n {\n if (confirmed) {\n deleteProduct.mutate({productId: product.id});\n }\n }}\n >\n }>\n \n \n \n \n }\n body={}\n confirm={}\n />\n \n );\n}\n\nfunction Actions() {\n const syncPlans = useSyncProducts();\n return (\n \n }>\n {\n syncPlans.mutate();\n }}\n >\n \n \n \n \n \n \n \n );\n}\n","import {useQuery} from '@tanstack/react-query';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {apiClient} from '@common/http/query-client';\nimport {useParams} from 'react-router-dom';\nimport {Product} from '@common/billing/product';\n\nconst Endpoint = (id: number | string) => `billing/products/${id}`;\n\nexport interface FetchRoleResponse extends BackendResponse {\n product: Product;\n}\n\nexport function useProduct() {\n const {productId} = useParams();\n return useQuery({\n queryKey: [Endpoint(productId!)],\n queryFn: () => fetchProduct(productId!),\n });\n}\n\nfunction fetchProduct(productId: number | string): Promise {\n return apiClient.get(Endpoint(productId)).then(response => response.data);\n}\n","import {message} from '../../../i18n/message';\n\nexport const BillingPeriodPresets = [\n {\n key: 'day1',\n label: message('Daily'),\n interval: 'day',\n interval_count: 1,\n },\n {\n key: 'week1',\n label: message('Weekly'),\n interval: 'week',\n interval_count: 1,\n },\n {\n key: 'month1',\n label: message('Monthly'),\n interval: 'month',\n interval_count: 1,\n },\n {\n key: 'month3',\n label: message('Every 3 months'),\n interval: 'month',\n interval_count: 3,\n },\n {\n key: 'month6',\n label: message('Every 6 months'),\n interval: 'month',\n interval_count: 6,\n },\n {\n key: 'year1',\n label: message('Yearly'),\n interval: 'year',\n interval_count: 1,\n },\n {\n key: 'custom',\n label: message('Custom'),\n interval: null,\n interval_count: null,\n },\n];\n","import {useFormContext} from 'react-hook-form';\nimport {Product} from '@common/billing/product';\nimport React, {Fragment, useMemo, useState} from 'react';\nimport {useValueLists} from '@common/http/value-lists';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {Trans} from '@common/i18n/trans';\nimport {Item} from '@common/ui/forms/listbox/item';\nimport {FormSelect, Select} from '@common/ui/forms/select/select';\nimport {Price} from '@common/billing/price';\nimport {BillingPeriodPresets} from '@common/admin/plans/crupdate-plan-page/billing-period-presets';\nimport {Button} from '@common/ui/buttons/button';\nimport {message} from '@common/i18n/message';\nimport {useTrans} from '@common/i18n/use-trans';\n\ninterface PriceFormProps {\n index: number;\n onRemovePrice: () => void;\n}\nexport function PriceForm({index, onRemovePrice}: PriceFormProps) {\n const {trans} = useTrans();\n const query = useValueLists(['currencies']);\n const currencies = useMemo(() => {\n return query.data?.currencies ? Object.values(query.data.currencies) : [];\n }, [query.data]);\n const {watch, getValues} = useFormContext();\n const isNewProduct = !watch('id');\n const isNewPrice = watch(`prices.${index}.id`) == null;\n const subscriberCount = watch(`prices.${index}.subscriptions_count`) || 0;\n\n // select billing period preset based on price \"interval\" and \"interval_count\"\n const [billingPeriodPreset, setBillingPeriodPreset] = useState(() => {\n const interval = getValues(`prices.${index}.interval`);\n const intervalCount = getValues(`prices.${index}.interval_count`);\n const preset = BillingPeriodPresets.find(\n p => p.key === `${interval}${intervalCount}`\n );\n return preset ? preset.key : 'custom';\n });\n\n const allowPriceChanges = isNewProduct || isNewPrice || !subscriberCount;\n\n return (\n \n {!allowPriceChanges && (\n

\n \n

\n )}\n\n }\n type=\"number\"\n min={0.1}\n step={0.01}\n name={`prices.${index}.amount`}\n className=\"mb-20\"\n />\n }\n name={`prices.${index}.currency`}\n items={currencies}\n showSearchField\n searchPlaceholder={trans(message('Search currencies'))}\n selectionMode=\"single\"\n className=\"mb-20\"\n >\n {item => (\n {`${item.code}: ${item.name}`}\n )}\n \n \n {billingPeriodPreset === 'custom' && (\n \n )}\n
\n {\n onRemovePrice();\n }}\n >\n \n \n
\n
\n );\n}\n\ninterface BillingPeriodSelectProps {\n index: number;\n value: string;\n onValueChange: (value: string) => void;\n disabled: boolean;\n}\nfunction BillingPeriodSelect({\n index,\n value,\n onValueChange,\n disabled,\n}: BillingPeriodSelectProps) {\n const {setValue: setFormValue} = useFormContext();\n\n return (\n }\n disabled={disabled}\n className=\"mb-20\"\n selectionMode=\"single\"\n selectedValue={value}\n onSelectionChange={value => {\n onValueChange(value as string);\n if (value === 'custom') {\n } else {\n const preset = BillingPeriodPresets.find(p => p.key === value);\n if (preset) {\n setFormValue(\n `prices.${index}.interval`,\n preset.interval as Price['interval']\n );\n setFormValue(\n `prices.${index}.interval_count`,\n preset.interval_count as number\n );\n }\n }\n }}\n >\n {BillingPeriodPresets.map(preset => (\n \n \n \n ))}\n \n );\n}\n\ninterface CustomBillingPeriodFieldProps {\n index: number;\n disabled: boolean;\n}\nfunction CustomBillingPeriodField({\n index,\n disabled,\n}: CustomBillingPeriodFieldProps) {\n const {watch} = useFormContext();\n const interval = watch(`prices.${index}.interval`);\n let maxIntervalCount: number;\n\n if (interval === 'day') {\n maxIntervalCount = 365;\n } else if (interval === 'week') {\n maxIntervalCount = 52;\n } else {\n maxIntervalCount = 12;\n }\n\n return (\n
\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n","import {FormTextField} from '../../../ui/forms/input-field/text-field/text-field';\nimport {Trans} from '../../../i18n/trans';\nimport React, {Fragment, ReactNode} from 'react';\nimport {useFieldArray, useFormContext} from 'react-hook-form';\nimport {Accordion, AccordionItem} from '../../../ui/accordion/accordion';\nimport {FormattedPrice} from '../../../i18n/formatted-price';\nimport {FormPermissionSelector} from '../../../auth/ui/permission-selector';\nimport {PriceForm} from './price-form';\nimport {Button} from '../../../ui/buttons/button';\nimport {AddIcon} from '../../../icons/material/Add';\nimport {IconButton} from '../../../ui/buttons/icon-button';\nimport {CloseIcon} from '../../../icons/material/Close';\nimport {CreateProductPayload} from '../requests/use-create-product';\nimport {FormSwitch} from '../../../ui/forms/toggle/switch';\nimport {FormSelect} from '../../../ui/forms/select/select';\nimport {Item} from '../../../ui/forms/listbox/item';\nimport {FormFileSizeField} from '../../../ui/forms/input-field/file-size-field';\nimport {Link} from 'react-router-dom';\nimport {LinkStyle} from '../../../ui/buttons/external-link';\n\nexport function CrupdatePlanForm() {\n return (\n \n }\n className=\"mb-20\"\n required\n autoFocus\n />\n }\n className=\"mb-20\"\n inputElementType=\"textarea\"\n rows={4}\n />\n }\n className=\"mb-20\"\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n description={\n (\n \n {parts}\n \n ),\n }}\n message=\"Total storage space all user uploads are allowed to take up.\"\n />\n }\n />\n \n }\n >\n \n \n \n }\n >\n \n \n \n }\n >\n \n \n
\n \n
\n \n \n
\n \n
\n \n
\n );\n}\n\ninterface HeaderProps {\n children: ReactNode;\n}\nfunction Header({children}: HeaderProps) {\n return

{children}

;\n}\n\nfunction FeatureListForm() {\n const {fields, append, remove} = useFieldArray({\n name: 'feature_list',\n });\n return (\n
\n {fields.map((field, index) => {\n return (\n
\n \n {\n remove(index);\n }}\n >\n \n \n
\n );\n })}\n }\n size=\"xs\"\n onClick={() => {\n append({value: ''});\n }}\n >\n \n \n
\n );\n}\n\nfunction PricingListForm() {\n const {\n watch,\n formState: {errors},\n } = useFormContext();\n const {fields, append, remove} = useFieldArray<\n CreateProductPayload,\n 'prices',\n 'key'\n >({\n name: 'prices',\n keyName: 'key',\n });\n\n // if plan is marked as free, hide pricing form\n if (watch('free')) {\n return null;\n }\n\n return (\n \n
\n \n
\n {errors.prices?.message && (\n
{errors.prices.message}
\n )}\n \n {fields.map((field, index) => (\n }\n key={field.key}\n >\n {\n remove(index);\n }}\n />\n \n ))}\n \n }\n size=\"xs\"\n onClick={() => {\n append({\n currency: 'USD',\n amount: 1,\n interval_count: 1,\n interval: 'month',\n });\n }}\n >\n \n \n
\n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {apiClient, queryClient} from '../../../http/query-client';\nimport {BackendResponse} from '../../../http/backend-response/backend-response';\nimport {toast} from '../../../ui/toast/toast';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {message} from '../../../i18n/message';\nimport {DatatableDataQueryKey} from '../../../datatable/requests/paginated-resources';\nimport {Product} from '../../../billing/product';\nimport {useNavigate} from '../../../utils/hooks/use-navigate';\nimport {CreateProductPayload} from './use-create-product';\nimport {UseFormReturn} from 'react-hook-form';\nimport {onFormQueryError} from '../../../errors/on-form-query-error';\n\ninterface Response extends BackendResponse {\n product: Product;\n}\n\nexport interface UpdateProductPayload extends CreateProductPayload {\n id: number;\n}\n\nconst Endpoint = (id: number) => `billing/products/${id}`;\n\nexport function useUpdateProduct(form: UseFormReturn) {\n const {trans} = useTrans();\n const navigate = useNavigate();\n return useMutation({\n mutationFn: (payload: UpdateProductPayload) => updateProduct(payload),\n onSuccess: response => {\n toast(trans(message('Plan updated')));\n queryClient.invalidateQueries({\n queryKey: [Endpoint(response.product.id)],\n });\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey('billing/products'),\n });\n navigate('/admin/plans');\n },\n onError: err => onFormQueryError(err, form),\n });\n}\n\nfunction updateProduct({\n id,\n ...payload\n}: UpdateProductPayload): Promise {\n const backendPayload = {\n ...payload,\n feature_list: payload.feature_list.map(feature => feature.value),\n };\n return apiClient.put(Endpoint(id), backendPayload).then(r => r.data);\n}\n","import {FullPageLoader} from '../../../ui/progress/full-page-loader';\nimport {Trans} from '../../../i18n/trans';\nimport {useForm} from 'react-hook-form';\nimport {CrupdateResourceLayout} from '../../crupdate-resource-layout';\nimport {useProduct} from '../requests/use-product';\nimport {Product} from '../../../billing/product';\nimport {CrupdatePlanForm} from './crupdate-plan-form';\nimport {\n UpdateProductPayload,\n useUpdateProduct,\n} from '../requests/use-update-product';\n\nexport function EditPlanPage() {\n const query = useProduct();\n\n if (query.status !== 'success') {\n return ;\n }\n\n return ;\n}\n\ninterface PageContentProps {\n product: Product;\n}\nfunction PageContent({product}: PageContentProps) {\n const form = useForm({\n defaultValues: {\n ...product,\n feature_list: product.feature_list.map(f => ({value: f})),\n },\n });\n const updateProduct = useUpdateProduct(form);\n\n return (\n {\n updateProduct.mutate(values);\n }}\n title={\n \n }\n isLoading={updateProduct.isPending}\n >\n \n \n );\n}\n","import {Product} from '../../../billing/product';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {useNavigate} from '../../../utils/hooks/use-navigate';\nimport {useMutation} from '@tanstack/react-query';\nimport {toast} from '../../../ui/toast/toast';\nimport {message} from '../../../i18n/message';\nimport {apiClient, queryClient} from '../../../http/query-client';\nimport {DatatableDataQueryKey} from '../../../datatable/requests/paginated-resources';\nimport {Price} from '../../../billing/price';\nimport {onFormQueryError} from '../../../errors/on-form-query-error';\nimport {UseFormReturn} from 'react-hook-form';\n\nconst endpoint = 'billing/products';\n\nexport interface CreateProductPayload\n extends Omit, 'feature_list' | 'prices'> {\n feature_list: {value: string}[];\n prices: Omit[];\n}\n\nexport function useCreateProduct(form: UseFormReturn) {\n const {trans} = useTrans();\n const navigate = useNavigate();\n return useMutation({\n mutationFn: (payload: CreateProductPayload) => createProduct(payload),\n onSuccess: () => {\n toast(trans(message('Plan created')));\n queryClient.invalidateQueries({queryKey: [endpoint]});\n queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey('billing/products'),\n });\n navigate('/admin/plans');\n },\n onError: err => onFormQueryError(err, form),\n });\n}\n\nfunction createProduct(payload: CreateProductPayload): Promise {\n const backendPayload = {\n ...payload,\n feature_list: payload.feature_list.map(feature => feature.value),\n };\n return apiClient.post(endpoint, backendPayload).then(r => r.data);\n}\n","import {useForm} from 'react-hook-form';\nimport {CrupdateResourceLayout} from '../../crupdate-resource-layout';\nimport {Trans} from '../../../i18n/trans';\nimport {CrupdatePlanForm} from './crupdate-plan-form';\nimport {\n CreateProductPayload,\n useCreateProduct,\n} from '../requests/use-create-product';\n\nexport function CreatePlanPage() {\n const form = useForm({\n defaultValues: {\n free: false,\n recommended: false,\n },\n });\n const createProduct = useCreateProduct(form);\n\n return (\n {\n createProduct.mutate(values);\n }}\n title={}\n isLoading={createProduct.isPending}\n >\n \n \n );\n}\n","import {SettingsPanel} from '../settings-panel';\nimport {SettingsSeparator} from '../settings-separator';\nimport {Trans} from '../../../i18n/trans';\nimport {FormSwitch} from '../../../ui/forms/toggle/switch';\nimport {useFieldArray, useFormContext} from 'react-hook-form';\nimport {AdminSettings} from '../admin-settings';\nimport React, {Fragment} from 'react';\nimport {FormSelect} from '../../../ui/forms/select/select';\nimport {Item} from '../../../ui/forms/listbox/item';\nimport {MenuItemForm} from '../../menus/menu-item-form';\nimport {Button} from '../../../ui/buttons/button';\nimport {AddIcon} from '../../../icons/material/Add';\nimport {DialogTrigger} from '../../../ui/overlays/dialog/dialog-trigger';\nimport {AddMenuItemDialog} from '../../appearance/sections/menus/add-menu-item-dialog';\nimport {Accordion, AccordionItem} from '../../../ui/accordion/accordion';\nimport {IconButton} from '../../../ui/buttons/icon-button';\nimport {CloseIcon} from '../../../icons/material/Close';\n\nexport function GdprSettings() {\n return (\n }\n description={\n \n }\n >\n \n \n \n \n );\n}\n\nfunction CookieNoticeSection() {\n const {watch} = useFormContext();\n const noticeEnabled = watch('client.cookie_notice.enable');\n\n return (\n
\n \n }\n >\n \n \n {noticeEnabled && (\n \n
\n
\n \n
\n \n
\n }\n className=\"mb-20\"\n >\n \n \n \n \n \n \n \n
\n )}\n
\n );\n}\n\nfunction RegistrationPoliciesSection() {\n const {fields, append, remove} = useFieldArray<\n AdminSettings,\n 'client.registration.policies'\n >({\n name: 'client.registration.policies',\n });\n\n return (\n \n
\n \n
\n
\n \n
\n \n {fields.map((field, index) => (\n {\n remove(index);\n }}\n >\n \n \n }\n >\n \n \n ))}\n \n {\n if (value) {\n append(value);\n }\n }}\n >\n }\n size=\"xs\"\n >\n \n \n } />\n \n
\n );\n}\n","import {RouteObject} from 'react-router-dom';\n\nexport const AppAdminRoutes: RouteObject[] = [];\n","import {useMutation} from '@tanstack/react-query';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {CustomPage} from '../custom-page';\nimport {apiClient, queryClient} from '@common/http/query-client';\nimport {showHttpErrorToast} from '@common/utils/http/show-http-error-toast';\nimport {DatatableDataQueryKey} from '@common/datatable/requests/paginated-resources';\nimport {toast} from '@common/ui/toast/toast';\nimport {message} from '@common/i18n/message';\nimport {useParams} from 'react-router-dom';\nimport {CreateCustomPagePayload} from '@common/admin/custom-pages/requests/use-create-custom-page';\n\ninterface Response extends BackendResponse {\n page: CustomPage;\n}\n\nexport function useUpdateCustomPage(endpoint?: string) {\n const {pageId} = useParams();\n const finalEndpoint = `${endpoint || 'custom-pages'}/${pageId}`;\n return useMutation({\n mutationFn: (payload: CreateCustomPagePayload) =>\n updatePage(payload, finalEndpoint),\n onError: err => showHttpErrorToast(err),\n onSuccess: async () => {\n await queryClient.invalidateQueries({queryKey: ['custom-pages']});\n await queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey(finalEndpoint),\n });\n toast(message('Page updated'));\n },\n });\n}\n\nfunction updatePage(\n payload: CreateCustomPagePayload,\n endpoint: string,\n): Promise {\n return apiClient.put(`${endpoint}`, payload).then(r => r.data);\n}\n","import React, {useState} from 'react';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {useFormContext} from 'react-hook-form';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport clsx from 'clsx';\nimport {EditIcon} from '@common/icons/material/Edit';\nimport {CreateCustomPagePayload} from '@common/admin/custom-pages/requests/use-create-custom-page';\n\nexport function ArticleEditorTitle() {\n const [editingTitle, setEditingTitle] = useState(false);\n const {trans} = useTrans();\n const form = useFormContext();\n const watchedTitle = form.watch('title');\n\n const titlePlaceholder = trans({message: 'Title'});\n\n if (editingTitle) {\n return (\n {\n setEditingTitle(false);\n }}\n name=\"title\"\n required\n />\n );\n }\n return (\n {\n setEditingTitle(true);\n }}\n onFocus={() => {\n setEditingTitle(true);\n }}\n className={clsx(\n 'hover:bg-primary/focus rounded cursor-pointer',\n !watchedTitle && 'text-muted'\n )}\n >\n {watchedTitle || titlePlaceholder}\n \n \n );\n}\n","import slugify from 'slugify';\n\nexport function slugifyString(\n text: string,\n replacement = '-',\n strict = false\n): string {\n if (!text) return text;\n let slugified = slugify(text, {\n lower: true,\n replacement,\n strict,\n remove: /[*+~.()'\"!:@?\\|/\\\\]/g,\n });\n // some chinese text might not get slugified properly,\n // just replace whitespace with dash in that case\n if (!slugified) {\n slugified = text.replace(/\\s+/g, '-').toLowerCase();\n }\n return slugified;\n}\n","import React, {Fragment, useEffect, useState} from 'react';\nimport clsx from 'clsx';\nimport {RefCallBack} from 'react-hook-form';\nimport {Button} from './buttons/button';\nimport {LinkIcon} from '../icons/material/Link';\nimport {TextField} from './forms/input-field/text-field/text-field';\nimport {Trans} from '../i18n/trans';\nimport {useSettings} from '../core/settings/use-settings';\nimport {slugifyString} from '@common/utils/string/slugify-string';\n\nexport interface SlugEditorProps {\n prefix?: string;\n suffix?: string;\n host?: string;\n value?: string | null;\n placeholder?: string;\n onChange?: (value: string) => void;\n className?: string;\n inputRef?: RefCallBack;\n onInputBlur?: () => void;\n showLinkIcon?: boolean;\n pattern?: string;\n minLength?: number;\n maxLength?: number;\n hideButton?: boolean;\n}\nexport function SlugEditor({\n host,\n value: initialValue = '',\n placeholder,\n onChange,\n className,\n inputRef,\n onInputBlur,\n showLinkIcon = true,\n pattern,\n minLength,\n maxLength,\n hideButton,\n ...props\n}: SlugEditorProps) {\n const {base_url} = useSettings();\n const prefix = props.prefix ? `/${props.prefix}` : '';\n const suffix = props.suffix ? `/${props.suffix}` : '';\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(initialValue);\n host = host || base_url;\n\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n const handleSubmit = () => {\n if (!isEditing) {\n setIsEditing(true);\n } else {\n setIsEditing(false);\n if (value) {\n onChange?.(value);\n }\n }\n };\n\n let preview: string = '';\n if (value) {\n preview = value;\n } else if (placeholder) {\n preview = slugifyString(placeholder);\n }\n\n return (\n // can't use
here as component might be used inside another form\n
\n {showLinkIcon && }\n
\n {host}\n {prefix}\n {!isEditing && preview && (\n \n /\n {preview}\n \n )}\n {!isEditing ? suffix : null}\n
\n {isEditing && (\n {\n if (e.key === 'Enter') {\n handleSubmit();\n }\n }}\n ref={inputRef}\n aria-label=\"slug\"\n autoFocus\n className=\"mr-14\"\n size=\"2xs\"\n value={value as string}\n onBlur={onInputBlur}\n onChange={e => {\n setValue(e.target.value);\n }}\n />\n )}\n {!hideButton && (\n {\n handleSubmit();\n }}\n >\n {isEditing ? : }\n \n )}\n
\n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const UndoIcon = createSvgIcon(\n \n, 'UndoOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const RedoIcon = createSvgIcon(\n \n, 'RedoOutlined');\n","import React from 'react';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {UndoIcon} from '../../icons/material/Undo';\nimport {RedoIcon} from '../../icons/material/Redo';\nimport {MenubarButtonProps} from './menubar-button-props';\n\nexport function HistoryButtons({editor}: MenubarButtonProps) {\n return (\n \n {\n editor.commands.focus();\n editor.commands.undo();\n }}\n >\n \n \n {\n editor.commands.focus();\n editor.commands.redo();\n }}\n >\n \n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const CodeIcon = createSvgIcon(\n \n, 'CodeOutlined');\n","import {Button} from '../../ui/buttons/button';\nimport {CodeIcon} from '../../icons/material/Code';\nimport {Trans} from '../../i18n/trans';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {AceDialog} from '../../ace-editor/ace-dialog';\nimport {Editor} from '@tiptap/react';\nimport React from 'react';\n\ninterface ModeButtonProps {\n editor: Editor;\n}\nexport function ModeButton({editor}: ModeButtonProps) {\n return (\n {\n if (newValue != null) {\n editor?.commands.setContent(newValue);\n }\n }}\n >\n \n }\n defaultValue={editor.getHTML()}\n />\n \n );\n}\n","export function Divider() {\n return
;\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatBoldIcon = createSvgIcon(\n \n, 'FormatBoldOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatItalicIcon = createSvgIcon(\n \n, 'FormatItalicOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatUnderlinedIcon = createSvgIcon(\n \n, 'FormatUnderlinedOutlined');\n","import React from 'react';\nimport clsx from 'clsx';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {FormatBoldIcon} from '../../icons/material/FormatBold';\nimport {FormatItalicIcon} from '../../icons/material/FormatItalic';\nimport {FormatUnderlinedIcon} from '../../icons/material/FormatUnderlined';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {Tooltip} from '@common/ui/tooltip/tooltip';\nimport {Trans} from '@common/i18n/trans';\n\nexport function FontStyleButtons({editor, size}: MenubarButtonProps) {\n return (\n \n }>\n {\n editor.commands.focus();\n editor.commands.toggleBold();\n }}\n >\n \n \n \n }>\n {\n editor.commands.focus();\n editor.commands.toggleItalic();\n }}\n >\n \n \n \n }>\n {\n editor.commands.focus();\n editor.commands.toggleUnderline();\n }}\n >\n \n \n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatListBulletedIcon = createSvgIcon(\n \n, 'FormatListBulletedOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatListNumberedIcon = createSvgIcon(\n \n, 'FormatListNumberedOutlined');\n","import React from 'react';\nimport clsx from 'clsx';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {FormatListBulletedIcon} from '../../icons/material/FormatListBulleted';\nimport {FormatListNumberedIcon} from '../../icons/material/FormatListNumbered';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {Tooltip} from '@common/ui/tooltip/tooltip';\nimport {Trans} from '@common/i18n/trans';\n\nexport function ListButtons({editor, size}: MenubarButtonProps) {\n const bulletActive = editor.isActive('bulletList');\n const orderedActive = editor.isActive('orderedList');\n return (\n \n }>\n {\n editor.commands.focus();\n editor.commands.toggleBulletList();\n }}\n >\n \n \n \n }>\n {\n editor.commands.focus();\n editor.commands.toggleOrderedList();\n }}\n >\n \n \n \n \n );\n}\n","import {Editor} from '@tiptap/react';\n\ninterface Props {\n href: string;\n target?: string;\n text?: string;\n}\n\nexport function insertLinkIntoTextEditor(\n editor: Editor,\n {text, target, href}: Props\n) {\n // no selection, insert new link with specified text\n if (editor.state.selection.empty && text) {\n editor.commands.insertContent(\n `${text}`\n );\n } else if (!editor.state.selection.empty) {\n // no href provided, remove link from selection\n if (!href) {\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n } else {\n // add link to selection\n editor\n .chain()\n .focus()\n .extendMarkRange('link')\n .setLink({href: href, target})\n .run();\n }\n }\n}\n","import {useForm} from 'react-hook-form';\nimport React from 'react';\nimport clsx from 'clsx';\nimport {Form} from '../../ui/forms/form';\nimport {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {DialogFooter} from '../../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../../ui/buttons/button';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {LinkIcon} from '../../icons/material/Link';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {FormSelect, Option} from '../../ui/forms/select/select';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {Trans} from '../../i18n/trans';\nimport {Tooltip} from '@common/ui/tooltip/tooltip';\nimport {insertLinkIntoTextEditor} from '@common/text-editor/insert-link-into-text-editor';\n\ninterface FormValue {\n href: string;\n target?: string;\n text?: string;\n}\n\nexport function LinkButton({editor, size}: MenubarButtonProps) {\n return (\n \n }>\n \n \n \n \n \n \n );\n}\n\nfunction LinkDialog({editor}: MenubarButtonProps) {\n const previousUrl = editor.getAttributes('link').href;\n const previousText = editor.state.doc.textBetween(\n editor.state.selection.from,\n editor.state.selection.to,\n ''\n );\n const form = useForm({\n defaultValues: {href: previousUrl, text: previousText},\n });\n const {formId, close} = useDialogContext();\n return (\n \n \n \n \n \n {\n insertLinkIntoTextEditor(editor, value);\n close();\n }}\n >\n }\n autoFocus\n type=\"url\"\n className=\"mb-20\"\n />\n }\n className=\"mb-20\"\n />\n }\n >\n \n \n \n \n \n \n \n \n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const ImageIcon = createSvgIcon(\n \n, 'ImageOutlined');\n","import React from 'react';\nimport clsx from 'clsx';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {ImageIcon} from '../../icons/material/Image';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {useActiveUpload} from '../../uploads/uploader/use-active-upload';\nimport {UploadInputType} from '../../uploads/types/upload-input-config';\nimport {Disk} from '../../uploads/types/backend-metadata';\nimport {Tooltip} from '@common/ui/tooltip/tooltip';\nimport {Trans} from '@common/i18n/trans';\n\nconst TwoMB = 2097152;\n\nexport function ImageButton({editor, size}: MenubarButtonProps) {\n const {selectAndUploadFile} = useActiveUpload();\n\n const handleUpload = () => {\n selectAndUploadFile({\n showToastOnRestrictionFail: true,\n restrictions: {\n allowedFileTypes: [UploadInputType.image],\n maxFileSize: TwoMB,\n },\n metadata: {\n diskPrefix: 'page_media',\n disk: Disk.public,\n },\n onSuccess: entry => {\n editor.commands.focus();\n editor.commands.setImage({\n src: entry.url,\n });\n },\n });\n };\n\n return (\n }>\n \n \n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatClearIcon = createSvgIcon(\n \n, 'FormatClearOutlined');\n","import React from 'react';\nimport clsx from 'clsx';\nimport {FormatClearIcon} from '../../icons/material/FormatClear';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {Tooltip} from '@common/ui/tooltip/tooltip';\nimport {Trans} from '@common/i18n/trans';\n\nexport function ClearFormatButton({editor, size}: MenubarButtonProps) {\n return (\n }>\n {\n editor.chain().focus().clearNodes().unsetAllMarks().run();\n }}\n >\n \n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const HorizontalRuleIcon = createSvgIcon(\n \n, 'HorizontalRuleOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const PriorityHighIcon = createSvgIcon(\n [,,]\n, 'PriorityHighOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const NoteIcon = createSvgIcon(\n \n, 'NoteOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const SmartDisplayIcon = createSvgIcon(\n [,,]\n, 'SmartDisplayOutlined');\n","import React, {useState} from 'react';\nimport {useForm} from 'react-hook-form';\nimport clsx from 'clsx';\nimport {HorizontalRuleIcon} from '../../icons/material/HorizontalRule';\nimport {PriorityHighIcon} from '../../icons/material/PriorityHigh';\nimport {WarningIcon} from '../../icons/material/Warning';\nimport {NoteIcon} from '../../icons/material/Note';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {MoreVertIcon} from '../../icons/material/MoreVert';\nimport {SmartDisplayIcon} from '../../icons/material/SmartDisplay';\nimport {Form} from '../../ui/forms/form';\nimport {FormTextField} from '../../ui/forms/input-field/text-field/text-field';\nimport {DialogFooter} from '../../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../../ui/buttons/button';\nimport {\n Menu,\n MenuItem,\n MenuTrigger,\n} from '../../ui/navigation/menu/menu-trigger';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {Dialog} from '../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../ui/overlays/dialog/dialog-header';\nimport {DialogBody} from '../../ui/overlays/dialog/dialog-body';\nimport {Trans} from '../../i18n/trans';\n\nexport function InsertMenuTrigger({editor, size}: MenubarButtonProps) {\n const [dialog, setDialog] = useState<'embed' | false>(false);\n return (\n <>\n {\n if (key === 'hr') {\n editor.commands.focus();\n editor.commands.setHorizontalRule();\n } else if (key === 'embed') {\n setDialog('embed');\n } else {\n editor.commands.focus();\n editor.commands.addInfo({type: key as any});\n }\n }}\n >\n \n \n \n \n }>\n \n \n }>\n \n \n }>\n \n \n }>\n \n \n }>\n \n \n \n \n {\n setDialog(false);\n }}\n >\n \n \n \n );\n}\n\nfunction EmbedDialog({editor}: MenubarButtonProps) {\n const previousSrc = editor.getAttributes('embed').src;\n const form = useForm<{src: string}>({\n defaultValues: {src: previousSrc},\n });\n const {formId, close} = useDialogContext();\n return (\n \n \n \n \n \n {\n editor.commands.setEmbed(value);\n close();\n }}\n >\n }\n autoFocus\n type=\"url\"\n required\n />\n \n \n \n \n \n \n \n \n \n );\n}\n","import {ReactNode} from 'react';\nimport {isMac} from '@react-aria/utils';\n\ninterface Props {\n children: ReactNode;\n modifier?: boolean;\n separator?: string;\n}\nexport function Keyboard({children, modifier, separator = '+'}: Props) {\n const modKey = isMac() ? (\n ⌘\n ) : (\n 'Ctrl'\n );\n return (\n \n {modifier && (\n <>\n {modKey}\n {separator}\n \n )}\n {children}\n \n );\n}\n","import React from 'react';\nimport clsx from 'clsx';\nimport {Button} from '../../ui/buttons/button';\nimport {KeyboardArrowDownIcon} from '../../icons/material/KeyboardArrowDown';\nimport {Keyboard} from '../../ui/keyboard/keyboard';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {\n Menu,\n MenuItem,\n MenuTrigger,\n} from '../../ui/navigation/menu/menu-trigger';\nimport {Trans} from '../../i18n/trans';\n\ntype Level = 1 | 2 | 3 | 4;\n\nexport function FormatMenuTrigger({editor, size}: MenubarButtonProps) {\n return (\n {\n editor.commands.focus();\n if (typeof key === 'string' && key.startsWith('h')) {\n editor.commands.toggleHeading({\n level: parseInt(key.replace('h', '')) as Level,\n });\n } else if (key === 'code') {\n editor.commands.toggleCode();\n } else if (key === 'strike') {\n editor.commands.toggleStrike();\n } else if (key === 'super') {\n editor.commands.toggleSuperscript();\n } else if (key === 'sub') {\n editor.commands.toggleSubscript();\n } else if (key === 'blockquote') {\n editor.commands.toggleBlockquote();\n } else if (key === 'paragraph') {\n editor.commands.setParagraph();\n }\n }}\n >\n }\n >\n \n \n \n Alt+1}>\n \n \n Alt+2}>\n \n \n Alt+3}>\n \n \n Alt+4}>\n \n \n E}>\n \n \n Shift+X}\n >\n \n \n \n .\n \n }\n >\n \n \n \n ,\n \n }\n >\n \n \n Shift+B}\n >\n \n \n Alt+0}\n >\n \n \n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatColorTextIcon = createSvgIcon(\n \n, 'FormatColorTextOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatColorFillIcon = createSvgIcon(\n \n, 'FormatColorFillOutlined');\n","import React, {Fragment, useState} from 'react';\nimport clsx from 'clsx';\nimport {FormatColorTextIcon} from '../../icons/material/FormatColorText';\nimport {ColorPickerDialog} from '../../ui/color-picker/color-picker-dialog';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {FormatColorFillIcon} from '../../icons/material/FormatColorFill';\nimport {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger';\n\nexport function ColorButtons({editor, size}: MenubarButtonProps) {\n const [dialog, setDialog] = useState<'text' | 'bg' | false>(false);\n const textActive = editor.getAttributes('textStyle').color;\n const backgroundActive = editor.getAttributes('textStyle').backgroundColor;\n return (\n \n \n {\n setDialog('text');\n }}\n >\n \n \n {\n setDialog('bg');\n }}\n >\n \n \n \n {\n if (newValue) {\n if (dialog === 'text') {\n editor.commands.setColor(newValue);\n } else {\n editor.commands.setBackgroundColor(newValue);\n }\n }\n setDialog(false);\n }}\n >\n \n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatAlignLeftIcon = createSvgIcon(\n \n, 'FormatAlignLeftOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatAlignCenterIcon = createSvgIcon(\n \n, 'FormatAlignCenterOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatAlignRightIcon = createSvgIcon(\n \n, 'FormatAlignRightOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatAlignJustifyIcon = createSvgIcon(\n \n, 'FormatAlignJustifyOutlined');\n","import clsx from 'clsx';\nimport {ComponentType} from 'react';\nimport {FormatAlignLeftIcon} from '../../icons/material/FormatAlignLeft';\nimport {FormatAlignCenterIcon} from '../../icons/material/FormatAlignCenter';\nimport {FormatAlignRightIcon} from '../../icons/material/FormatAlignRight';\nimport {FormatAlignJustifyIcon} from '../../icons/material/FormatAlignJustify';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {\n Menu,\n MenuItem,\n MenuTrigger,\n} from '../../ui/navigation/menu/menu-trigger';\nimport {Trans} from '../../i18n/trans';\nimport {message} from '../../i18n/message';\n\nconst iconMap = {\n left: {\n icon: FormatAlignLeftIcon,\n label: message('Align left'),\n },\n center: {\n icon: FormatAlignCenterIcon,\n label: message('Align center'),\n },\n right: {\n icon: FormatAlignRightIcon,\n label: message('Align right'),\n },\n justify: {\n icon: FormatAlignJustifyIcon,\n label: message('Justify'),\n },\n};\n\nexport function AlignButtons({editor, size}: MenubarButtonProps) {\n const activeKey = (Object.keys(iconMap).find(key => {\n return editor.isActive({textAlign: key});\n }) || 'left') as keyof typeof iconMap;\n const ActiveIcon: ComponentType = activeKey\n ? iconMap[activeKey].icon\n : iconMap.left.icon;\n\n return (\n {\n editor.commands.focus();\n editor.commands.setTextAlign(key as string);\n }}\n >\n \n \n \n \n {Object.entries(iconMap).map(([name, config]) => {\n const Icon = config.icon;\n return (\n }\n capitalizeFirst\n >\n \n \n );\n })}\n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatIndentDecreaseIcon = createSvgIcon(\n \n, 'FormatIndentDecreaseOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FormatIndentIncreaseIcon = createSvgIcon(\n \n, 'FormatIndentIncreaseOutlined');\n","import React from 'react';\nimport clsx from 'clsx';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {FormatIndentDecreaseIcon} from '../../icons/material/FormatIndentDecrease';\nimport {FormatIndentIncreaseIcon} from '../../icons/material/FormatIndentIncrease';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {Tooltip} from '@common/ui/tooltip/tooltip';\nimport {Trans} from '@common/i18n/trans';\n\nexport function IndentButtons({editor, size}: MenubarButtonProps) {\n return (\n \n }>\n {\n editor.commands.focus();\n editor.commands.outdent();\n }}\n >\n \n \n \n }>\n {\n editor.commands.focus();\n editor.commands.indent();\n }}\n >\n \n \n \n \n );\n}\n","import React from 'react';\nimport clsx from 'clsx';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {CodeIcon} from '../../icons/material/Code';\nimport {MenubarButtonProps} from './menubar-button-props';\nimport {\n Menu,\n MenuItem,\n MenuTrigger,\n} from '../../ui/navigation/menu/menu-trigger';\nimport {Tooltip} from '@common/ui/tooltip/tooltip';\nimport {Trans} from '@common/i18n/trans';\n\nexport function CodeBlockMenuTrigger({editor, size}: MenubarButtonProps) {\n const language = editor.getAttributes('codeBlock').language || '';\n return (\n {\n editor.commands.toggleCodeBlock({language: key as string});\n }}\n >\n }>\n \n \n \n \n \n HTML\n JavaScript\n CSS\n PHP\n Shell\n Bash\n Ruby\n Python\n Java\n C++\n \n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const UnfoldLessIcon = createSvgIcon(\n \n, 'UnfoldLessOutlined');\n","import React, {Fragment, useState} from 'react';\nimport clsx from 'clsx';\nimport {AnimatePresence, m} from 'framer-motion';\nimport {Divider} from '@common/text-editor/menubar/divider';\nimport {FontStyleButtons} from '@common/text-editor/menubar/font-style-buttons';\nimport {ListButtons} from '@common/text-editor/menubar/list-buttons';\nimport {LinkButton} from '@common/text-editor/menubar/link-button';\nimport {ImageButton} from '@common/text-editor/menubar/image-button';\nimport {ClearFormatButton} from '@common/text-editor/menubar/clear-format-button';\nimport {InsertMenuTrigger} from '@common/text-editor/menubar/insert-menu-trigger';\nimport {FormatMenuTrigger} from '@common/text-editor/menubar/format-menu-trigger';\nimport {ColorButtons} from '@common/text-editor/menubar/color-buttons';\nimport {AlignButtons} from '@common/text-editor/menubar/align-buttons';\nimport {IndentButtons} from '@common/text-editor/menubar/indent-buttons';\nimport {CodeBlockMenuTrigger} from '@common/text-editor/menubar/code-block-menu-trigger';\nimport {MenubarButtonProps} from '@common/text-editor/menubar/menubar-button-props';\nimport {useIsMobileMediaQuery} from '@common/utils/hooks/is-mobile-media-query';\nimport {IconButton} from '@common/ui/buttons/icon-button';\nimport {UnfoldMoreIcon} from '@common/icons/material/UnfoldMore';\nimport {UnfoldLessIcon} from '@common/icons/material/UnfoldLess';\n\nconst MenubarRowClassName =\n 'flex items-center px-4 h-42 text-muted border-b overflow-hidden';\n\ninterface Props extends MenubarButtonProps {\n justify?: string;\n hideInsertButton?: boolean;\n}\n\nexport function ArticleBodyEditorMenubar({\n editor,\n size = 'md',\n justify = 'justify-center',\n hideInsertButton = false,\n}: Props) {\n const isMobile = useIsMobileMediaQuery();\n const [extendedVisible, setExtendedVisible] = useState(false);\n return (\n
\n
\n \n \n \n \n \n \n \n {isMobile ? (\n {\n setExtendedVisible(!extendedVisible);\n }}\n >\n {extendedVisible ? : }\n \n ) : (\n \n )}\n
\n \n {extendedVisible && (\n \n \n \n )}\n \n
\n );\n}\n\nfunction ExtendedButtons({editor, size = 'md', hideInsertButton}: Props) {\n return (\n \n \n \n \n \n {!hideInsertButton && }\n \n \n \n \n \n \n );\n}\n","import {SlugEditor, SlugEditorProps} from '@common/ui/slug-editor';\nimport {useController, useFormContext} from 'react-hook-form';\nimport React, {Fragment, ReactNode, useEffect, useRef} from 'react';\nimport clsx from 'clsx';\nimport {useStickySentinel} from '@common/utils/hooks/sticky-sentinel';\nimport {useIsMobileMediaQuery} from '@common/utils/hooks/is-mobile-media-query';\nimport {Button} from '@common/ui/buttons/button';\nimport {Link} from 'react-router-dom';\nimport {ArrowBackIcon} from '@common/icons/material/ArrowBack';\nimport {Trans} from '@common/i18n/trans';\nimport {HistoryButtons} from '@common/text-editor/menubar/history-buttons';\nimport {ModeButton} from '@common/text-editor/menubar/mode-button';\nimport {ArticleBodyEditorMenubar} from './article-body-editor-menubar';\nimport {Editor} from '@tiptap/react';\nimport {CreateCustomPagePayload} from '@common/admin/custom-pages/requests/use-create-custom-page';\n\ninterface StickyHeaderProps {\n editor: Editor;\n allowSlugEditing?: boolean;\n onSave?: (editorContent: string) => void;\n saveButton?: ReactNode;\n backLink: string;\n isLoading?: boolean;\n}\nexport function ArticleEditorStickyHeader({\n editor,\n allowSlugEditing = true,\n onSave,\n saveButton,\n isLoading = false,\n backLink,\n}: StickyHeaderProps) {\n const {isSticky, sentinelRef} = useStickySentinel();\n const isMobile = useIsMobileMediaQuery();\n\n return (\n \n
\n \n
\n {!isMobile && (\n \n }\n >\n \n \n
\n {allowSlugEditing && (\n \n )}\n
\n
\n )}\n {editor && }\n {!isMobile && }\n {onSave && (\n {\n onSave(editor.getHTML());\n }}\n isLoading={isLoading}\n />\n )}\n {saveButton}\n
\n \n
\n
\n );\n}\n\ninterface SaveButtonProps {\n onSave: () => void;\n isLoading: boolean;\n}\nfunction SaveButton({onSave, isLoading}: SaveButtonProps) {\n const form = useFormContext();\n const title = form.watch('title');\n\n return (\n onSave()}\n >\n \n \n );\n}\n\ninterface FormSlugEditorProps extends SlugEditorProps {\n name: string;\n}\nfunction FormSlugEditor({name, ...other}: FormSlugEditorProps) {\n const {\n field: {onChange, onBlur, value = '', ref},\n } = useController({\n name,\n });\n const manuallyChanged = useRef(false);\n\n const {watch, setValue} = useFormContext();\n\n useEffect(() => {\n const subscription = watch((formVal, {name: fieldName}) => {\n // if user has not changed slug manually, set it based on page title field changes\n if (fieldName === 'title' && !manuallyChanged.current) {\n setValue('slug', formVal.title);\n }\n });\n return () => subscription.unsubscribe();\n }, [watch, setValue]);\n\n return (\n {\n manuallyChanged.current = true;\n onChange(e);\n }}\n onInputBlur={onBlur}\n value={value}\n inputRef={ref}\n {...other}\n />\n );\n}\n","import {useCustomPage} from '@common/custom-page/use-custom-page';\nimport React, {Fragment, Suspense} from 'react';\nimport {PageMetaTags} from '@common/http/page-meta-tags';\nimport {PageStatus} from '@common/http/page-status';\nimport {CustomPage} from '@common/admin/custom-pages/custom-page';\nimport {FormProvider, useForm} from 'react-hook-form';\nimport {useUpdateCustomPage} from '@common/admin/custom-pages/requests/use-update-custom-page';\nimport {FileUploadProvider} from '@common/uploads/uploader/file-upload-provider';\nimport {ArticleEditorTitle} from '@common/article-editor/article-editor-title';\nimport {ArticleEditorStickyHeader} from '@common/article-editor/article-editor-sticky-header';\nimport {useNavigate} from '@common/utils/hooks/use-navigate';\nimport {CreateCustomPagePayload} from '@common/admin/custom-pages/requests/use-create-custom-page';\nimport {FullPageLoader} from '@common/ui/progress/full-page-loader';\n\nconst ArticleBodyEditor = React.lazy(\n () => import('@common/article-editor/article-body-editor'),\n);\n\nexport function EditCustomPage() {\n const query = useCustomPage();\n\n return query.data ? (\n \n \n \n \n ) : (\n
\n \n
\n );\n}\n\ninterface PageContentProps {\n page: CustomPage;\n}\nfunction PageContent({page}: PageContentProps) {\n const navigate = useNavigate();\n const crupdatePage = useUpdateCustomPage();\n const form = useForm({\n defaultValues: {\n title: page.title,\n slug: page.slug,\n body: page.body,\n },\n });\n\n const handleSave = (editorContent: string) => {\n crupdatePage.mutate(\n {\n ...form.getValues(),\n body: editorContent,\n },\n {\n onSuccess: () => navigate('../..', {relative: 'path'}),\n },\n );\n };\n\n return (\n }>\n \n {(content, editor) => (\n \n \n \n
\n
\n \n {content}\n
\n
\n
\n
\n )}\n
\n
\n );\n}\n","import {useMutation} from '@tanstack/react-query';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {CustomPage} from '../custom-page';\nimport {apiClient, queryClient} from '@common/http/query-client';\nimport {showHttpErrorToast} from '@common/utils/http/show-http-error-toast';\nimport {DatatableDataQueryKey} from '@common/datatable/requests/paginated-resources';\nimport {toast} from '@common/ui/toast/toast';\nimport {message} from '@common/i18n/message';\n\ninterface Response extends BackendResponse {\n page: CustomPage;\n}\n\nexport interface CreateCustomPagePayload {\n title?: string;\n body?: string;\n slug?: string;\n hide_nav?: boolean;\n}\n\nexport function useCreateCustomPage(endpoint?: string) {\n const finalEndpoint = endpoint || 'custom-pages';\n return useMutation({\n mutationFn: (payload: CreateCustomPagePayload) =>\n createPage(payload, finalEndpoint),\n onError: err => showHttpErrorToast(err),\n onSuccess: async () => {\n await queryClient.invalidateQueries({queryKey: ['custom-pages']});\n await queryClient.invalidateQueries({\n queryKey: DatatableDataQueryKey(finalEndpoint),\n });\n toast(message('Page created'));\n },\n });\n}\n\nfunction createPage(\n payload: CreateCustomPagePayload,\n endpoint: string,\n): Promise {\n return apiClient.post(`${endpoint}`, payload).then(r => r.data);\n}\n","import React, {Suspense} from 'react';\nimport {FormProvider, useForm} from 'react-hook-form';\nimport {FileUploadProvider} from '@common/uploads/uploader/file-upload-provider';\nimport {ArticleEditorTitle} from '@common/article-editor/article-editor-title';\nimport {ArticleEditorStickyHeader} from '@common/article-editor/article-editor-sticky-header';\nimport {useNavigate} from '@common/utils/hooks/use-navigate';\nimport {\n CreateCustomPagePayload,\n useCreateCustomPage,\n} from '@common/admin/custom-pages/requests/use-create-custom-page';\nimport {FullPageLoader} from '@common/ui/progress/full-page-loader';\n\nconst ArticleBodyEditor = React.lazy(\n () => import('@common/article-editor/article-body-editor'),\n);\n\nexport function CreateCustomPage() {\n const navigate = useNavigate();\n const createPage = useCreateCustomPage();\n const form = useForm();\n\n const handleSave = (editorContent: string) => {\n createPage.mutate(\n {\n ...form.getValues(),\n body: editorContent,\n },\n {\n onSuccess: () => navigate('../', {relative: 'path'}),\n },\n );\n };\n\n return (\n }>\n \n {(content, editor) => (\n \n \n \n
\n
\n \n {content}\n
\n
\n
\n
\n )}\n
\n
\n );\n}\n","import {Navigate, RouteObject, useRoutes} from 'react-router-dom';\nimport {AdminLayout} from './admin-layout';\nimport {UserIndex} from './users/user-index';\nimport {AppearanceLayout} from './appearance/appearance-layout';\nimport {MenuList} from './appearance/sections/menus/menu-list';\nimport {MenuEditor} from './appearance/sections/menus/menu-editor';\nimport {MenuItemEditor} from './appearance/sections/menus/menu-item-editor';\nimport {GeneralSection} from './appearance/sections/general-section';\nimport {ThemeList} from './appearance/sections/themes/theme-list';\nimport {SeoSection} from './appearance/sections/seo/seo-section';\nimport {CustomCodeSection} from './appearance/sections/code/custom-code-section';\nimport {CustomPageDatablePage} from './custom-pages/custom-page-datable-page';\nimport {SettingsLayout} from './settings/settings-layout';\nimport {GeneralSettings} from './settings/pages/general-settings';\nimport {ThemeEditor} from './appearance/sections/themes/theme-editor';\nimport {AppSettingsRoutes} from '@app/admin/settings/app-settings-routes';\nimport {SubscriptionSettings} from './settings/pages/subscription-settings';\nimport {LocalizationSettings} from './settings/pages/localization-settings';\nimport {AuthenticationSettings} from './settings/pages/authentication-settings';\nimport {UploadingSettings} from './settings/pages/uploading-settings/uploading-settings';\nimport {MailSettings} from './settings/pages/mail-settings/mail-settings';\nimport {CacheSettings} from './settings/pages/cache-settings/cache-settings';\nimport {LoggingSettings} from './settings/pages/logging-settings';\nimport {QueueSettings} from './settings/pages/queue-settings';\nimport {RecaptchaSettings} from './settings/pages/recaptcha-settings';\nimport {ReportsSettings} from './settings/pages/reports-settings';\nimport {UpdateUserPage} from './users/update-user-page';\nimport {CreateUserPage} from './users/create-user-page';\nimport {LocalizationIndex} from './translations/localization-index';\nimport {TranslationManagementPage} from './translations/translation-management-page';\nimport {AdsPage} from './ads/ads-page';\nimport React from 'react';\nimport {FullPageLoader} from '../ui/progress/full-page-loader';\nimport {SectionList} from './appearance/section-list';\nimport {RolesIndexPage} from './roles/roles-index-page';\nimport {EditRolePage} from './roles/crupdate-role-page/edit-role-page';\nimport {CreateRolePage} from './roles/crupdate-role-page/create-role-page';\nimport {TagIndexPage} from './tags/tag-index-page';\nimport {FileEntryIndexPage} from './file-entry/file-entry-index-page';\nimport {SubscriptionsIndexPage} from './subscriptions/subscriptions-index-page';\nimport {PlansIndexPage} from './plans/plans-index-page';\nimport {EditPlanPage} from './plans/crupdate-plan-page/edit-plan-page';\nimport {CreatePlanPage} from './plans/crupdate-plan-page/create-plan-page';\nimport {GdprSettings} from './settings/pages/gdpr-settings';\nimport {AuthRoute} from '../auth/guards/auth-route';\nimport {NotFoundPage} from '../ui/not-found-page/not-found-page';\nimport {AppAppearanceConfig} from '@app/admin/appearance/app-appearance-config';\nimport {AppAdminRoutes} from '@app/admin/app-admin-routes';\nimport {EditCustomPage} from '@common/admin/custom-pages/edit-custom-page';\nimport {CreateCustomPage} from '@common/admin/custom-pages/create-custom-page';\n\nconst ReportsPage = React.lazy(() => import('./analytics/admin-report-page'));\n\nconst AdminRouteConfig: RouteObject[] = [\n {\n path: 'appearance',\n element: (\n \n \n \n ),\n children: [\n {index: true, element: },\n {path: 'general', element: },\n {path: 'seo-settings', element: },\n {path: 'custom-code', element: },\n {path: 'themes', element: },\n {path: 'themes/:themeIndex', element: },\n {path: 'menus', element: },\n {path: 'menus/:menuIndex', element: },\n {\n path: 'menus/:menuIndex/items/:menuItemIndex',\n element: ,\n },\n ...Object.values(AppAppearanceConfig.sections).flatMap(\n s => s.routes || []\n ),\n ],\n },\n\n {\n path: '/',\n element: ,\n children: [\n ...AppAdminRoutes,\n // REPORT PAGE\n {\n path: '/',\n element: (\n }>\n \n \n ),\n },\n // USERS\n {\n path: 'users',\n element: (\n \n \n \n ),\n },\n {\n path: 'users/new',\n element: (\n \n \n \n ),\n },\n {\n path: 'users/:userId/edit',\n element: (\n \n \n \n ),\n },\n // ROLES\n {\n path: 'roles',\n element: (\n \n \n \n ),\n },\n {\n path: 'roles/new',\n element: (\n \n \n \n ),\n },\n {\n path: 'roles/:roleId/edit',\n element: (\n \n \n \n ),\n },\n // SUBSCRIPTIONS and PLANS\n {\n path: 'subscriptions',\n element: (\n \n \n \n ),\n },\n {\n path: 'plans',\n element: (\n \n \n \n ),\n },\n {\n path: 'plans/new',\n element: (\n \n \n \n ),\n },\n {\n path: 'plans/:productId/edit',\n element: (\n \n \n \n ),\n },\n // CUSTOM PAGES\n {\n path: 'custom-pages',\n element: (\n \n \n \n ),\n },\n {\n path: 'custom-pages/new',\n element: (\n \n \n \n ),\n },\n {\n path: 'custom-pages/:pageId/edit',\n element: (\n \n \n \n ),\n },\n // TAGS\n {\n path: 'tags',\n element: (\n \n \n \n ),\n },\n // LOCALIZATIONS\n {\n path: 'localizations',\n element: (\n \n \n \n ),\n },\n {\n path: 'localizations/:localeId/translate',\n element: ,\n },\n // FILE ENTRIES\n {\n path: 'files',\n element: (\n \n \n \n ),\n },\n // ADS\n {\n path: 'ads',\n element: (\n \n \n \n ),\n },\n // SETTINGS\n {\n path: 'settings',\n element: (\n \n \n \n ),\n children: [\n {index: true, element: },\n {path: 'general', element: },\n {path: 'subscriptions', element: },\n {path: 'localization', element: },\n {path: 'authentication', element: },\n {path: 'uploading', element: },\n {path: 'mail', element: },\n {path: 'cache', element: },\n {path: 'analytics', element: },\n {path: 'logging', element: },\n {path: 'queue', element: },\n {path: 'recaptcha', element: },\n {path: 'gdpr', element: },\n ...AppSettingsRoutes,\n ],\n },\n ],\n },\n {path: '*', element: },\n];\n\nexport default function AdminRoutes() {\n return useRoutes(AdminRouteConfig);\n}\n"],"names":["endpoint","response","_a","Select","Form","query","FilterList","deleteSelectedRows","exportCsv","banUser","columnConfig","Actions","id","Fragment","ColorPickerTrigger","PermissionSelector","Option","FeatureForm","document","window","Header","m","useNavigate","queryClient","updateTags","MenuItem","uploadCors","clearCache","updateUser","createUser","createLocalization","Endpoint","PageContent","updateRole","createRole","createNewTag","updateTag","updateSubscription","updateProduct","syncPlans","value","createProduct","ArticleBodyEditor","createPage"],"mappings":"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"}