@keepkit/ui 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/KeepBackup.tsx","../src/ui-context.tsx","../src/locales/de.ts","../src/locales/en.ts","../src/locales/es.ts","../src/locales/fil.ts","../src/locales/fr.ts","../src/locales/id.ts","../src/locales/it.ts","../src/locales/ja.ts","../src/locales/ko.ts","../src/locales/ms.ts","../src/locales/pt-BR.ts","../src/locales/ru.ts","../src/locales/th.ts","../src/locales/vi.ts","../src/locales/zh-Hans.ts","../src/locales/zh-Hant.ts","../src/locales/index.ts","../src/KeepBulkActions.tsx","../src/KeepItemCheckbox.tsx","../src/shared.tsx","../src/KeepButton.tsx","../src/KeepCollection.tsx","../src/KeepList.tsx","../src/KeepItemCard.tsx","../src/KeepStaleNotice.tsx","../src/KeepItemStatusBadge.tsx","../src/KeepTagFilter.tsx","../src/query-controls.tsx","../src/url-sync.tsx","../src/KeepLayout.tsx","../src/KeepNoteEditor.tsx","../src/KeepSyncRecoveryDialog.tsx","../src/KeepSyncStatusBanner.tsx","../src/KeepTagEditor.tsx","../src/KeepUndo.tsx","../src/status.tsx","../src/theme.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n KeepItem,\n KeepItemInput,\n KeepListQuery,\n KeepScope,\n KeepUndoState,\n KeepUrlSyncOptions,\n} from \"@keepkit/core/core\";\nimport {\n type CreateKeepKitOptions as CoreCreateKeepKitOptions,\n KeepProvider as CoreKeepProvider,\n createKeepKit as createCoreKeepKit,\n type KeepProviderProps,\n type KeepShortcutOptions,\n type useKeepContext,\n type useKeepItem,\n type useKeepList,\n} from \"@keepkit/core/react\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport { KeepBackup, type KeepBackupProps } from \"./KeepBackup\";\nimport { KeepBulkActions, type KeepBulkActionsProps, type KeepBulkActionsState } from \"./KeepBulkActions\";\nimport {\n KeepButton,\n type KeepButtonIcon,\n type KeepButtonIconProps,\n type KeepButtonIcons,\n type KeepButtonLabels,\n type KeepButtonProps,\n} from \"./KeepButton\";\nimport {\n KeepCollection,\n type KeepCollectionFeature,\n type KeepCollectionProps,\n type KeepLayoutPreset,\n} from \"./KeepCollection\";\nimport {\n type KeepImageProps,\n KeepItemCard,\n type KeepItemCardLinkProps,\n type KeepItemCardProps,\n type KeepItemCardState,\n} from \"./KeepItemCard\";\nimport { KeepItemCheckbox, type KeepItemCheckboxProps } from \"./KeepItemCheckbox\";\nimport { type KeepDisplayStatus, KeepItemStatusBadge, type KeepItemStatusBadgeProps } from \"./KeepItemStatusBadge\";\nimport { KeepLayout, type KeepLayoutProps } from \"./KeepLayout\";\nimport { KeepList, type KeepListProps, type KeepListState } from \"./KeepList\";\nimport { KeepNoteEditor, type KeepNoteEditorProps, type KeepNoteEditorState } from \"./KeepNoteEditor\";\nimport {\n KeepPruneStaleButton,\n type KeepPruneStaleButtonProps,\n KeepStaleNotice,\n type KeepStaleNoticeProps,\n} from \"./KeepStaleNotice\";\nimport { KeepSyncRecoveryDialog, type KeepSyncRecoveryDialogProps } from \"./KeepSyncRecoveryDialog\";\nimport { KeepSyncStatusBanner, type KeepSyncStatusBannerProps } from \"./KeepSyncStatusBanner\";\nimport { KeepTagEditor, type KeepTagEditorProps, type KeepTagEditorState } from \"./KeepTagEditor\";\nimport { KeepTagFilter, type KeepTagFilterProps, type KeepTagFilterState } from \"./KeepTagFilter\";\nimport { KeepUndo, type KeepUndoProps } from \"./KeepUndo\";\nimport {\n KeepPagination,\n type KeepPaginationProps,\n type KeepPaginationState,\n KeepSearchInput,\n type KeepSearchInputProps,\n KeepSortSelect,\n type KeepSortSelectProps,\n type KeepSortValue,\n} from \"./query-controls\";\nimport {\n KeepAnnouncements,\n type KeepAnnouncementsProps,\n KeepAnnouncer,\n KeepEmptyState,\n type KeepEmptyStateProps,\n KeepStatus,\n type KeepStatusLabels,\n type KeepStatusProps,\n type KeepStatusState,\n type KeepStatusValue,\n} from \"./status\";\nimport {\n type KeepThemeDensity,\n type KeepThemeMode,\n type KeepThemeName,\n KeepThemeProvider,\n type KeepThemeProviderProps,\n type KeepThemeRadius,\n type KeepThemeVariables,\n} from \"./theme\";\nimport {\n getKeepLocaleLabels,\n type KeepUiLabelContext,\n type KeepUiLabelKey,\n type KeepUiLabels,\n type KeepUiLocale,\n type KeepUiLocaleLabels,\n KeepUiProvider,\n type KeepUiProviderProps,\n useKeepUiLabels,\n} from \"./ui-context\";\nimport {\n createNextPagesRouterAdapter,\n type KeepPagesRouterLike,\n type KeepUrlAdapter,\n useKeepUrlSync,\n} from \"./url-sync\";\n\nexport type KeepKitProviderProps<TMeta = Record<string, unknown>> = Omit<KeepProviderProps<TMeta>, \"children\"> &\n Omit<KeepUiProviderProps, \"children\"> &\n Omit<KeepThemeProviderProps, \"children\"> & { children?: ReactNode };\n\n/** Combines the core store, UI labels, and the global live announcer. */\nexport function KeepKitProvider<TMeta = Record<string, unknown>>({\n labels,\n locale,\n labelResolver,\n theme,\n mode,\n density,\n radius,\n accentColor,\n highContrast,\n reducedMotion,\n variables,\n className: themeClassName,\n style: themeStyle,\n asChild: themeAsChild,\n children,\n ...providerProps\n}: KeepKitProviderProps<TMeta>) {\n return (\n <KeepUiProvider labels={labels} locale={locale} labelResolver={labelResolver}>\n <KeepThemeProvider\n theme={theme}\n mode={mode}\n density={density}\n radius={radius}\n accentColor={accentColor}\n highContrast={highContrast}\n reducedMotion={reducedMotion}\n variables={variables}\n className={themeClassName}\n style={themeStyle}\n asChild={themeAsChild}\n >\n <CoreKeepProvider<TMeta> {...providerProps}>\n {children}\n <KeepAnnouncements />\n </CoreKeepProvider>\n </KeepThemeProvider>\n </KeepUiProvider>\n );\n}\n\nexport type {\n AuthenticatedSyncAuthContext,\n AuthenticatedSyncKit,\n AuthenticatedSyncKitOptions,\n AuthenticatedSyncRequestContext,\n AuthenticatedSyncTransport,\n KeepItem,\n KeepItemInput,\n KeepListQuery,\n KeepSyncConflict,\n KeepSyncResolution,\n KeepSyncState,\n KeepSyncStatus,\n} from \"@keepkit/core/core\";\nexport { createAuthenticatedSyncKit } from \"@keepkit/core/core\";\nexport type {\n KeepButtonState,\n KeepContextValue,\n KeepErrorBoundaryProps,\n KeepProviderProps,\n KeepShortcutOptions,\n} from \"@keepkit/core/react\";\nexport {\n KeepErrorBoundary,\n KeepProvider,\n useKeepContext,\n useKeepItem,\n useKeepList,\n useKeepShortcut,\n} from \"@keepkit/core/react\";\nexport {\n createBrowserStorageAdapter,\n createStorageAdapter,\n FallbackStorageAdapter,\n IndexedDBAdapter,\n IndexedDBSyncQueueAdapter,\n LocalStorageAdapter,\n LocalStorageSyncQueueAdapter,\n SyncStorageAdapter,\n} from \"@keepkit/core/storage\";\nexport type { KeepSelectionScope } from \"./KeepBulkActions\";\nexport { isAllSelected, toggleSelectAll } from \"./KeepBulkActions\";\nexport type { RenderProp } from \"./shared\";\nexport type {\n KeepAnnouncementsProps,\n KeepBackupProps,\n KeepBulkActionsProps,\n KeepBulkActionsState,\n KeepButtonIcon,\n KeepButtonIconProps,\n KeepButtonIcons,\n KeepButtonLabels,\n KeepButtonProps,\n KeepCollectionFeature,\n KeepCollectionProps,\n KeepDisplayStatus,\n KeepEmptyStateProps,\n KeepImageProps,\n KeepItemCardLinkProps,\n KeepItemCardProps,\n KeepItemCardState,\n KeepItemCheckboxProps,\n KeepItemStatusBadgeProps,\n KeepLayoutPreset,\n KeepLayoutProps,\n KeepListProps,\n KeepListState,\n KeepNoteEditorProps,\n KeepNoteEditorState,\n KeepPagesRouterLike,\n KeepPaginationProps,\n KeepPaginationState,\n KeepPruneStaleButtonProps,\n KeepScope,\n KeepSearchInputProps,\n KeepSortSelectProps,\n KeepSortValue,\n KeepStaleNoticeProps,\n KeepStatusLabels,\n KeepStatusProps,\n KeepStatusState,\n KeepStatusValue,\n KeepSyncRecoveryDialogProps,\n KeepSyncStatusBannerProps,\n KeepTagEditorProps,\n KeepTagEditorState,\n KeepTagFilterProps,\n KeepTagFilterState,\n KeepThemeDensity,\n KeepThemeMode,\n KeepThemeName,\n KeepThemeProviderProps,\n KeepThemeRadius,\n KeepThemeVariables,\n KeepUiLabelContext,\n KeepUiLabelKey,\n KeepUiLabels,\n KeepUiLocale,\n KeepUiLocaleLabels,\n KeepUiProviderProps,\n KeepUndoProps,\n KeepUndoState,\n KeepUrlAdapter,\n KeepUrlSyncOptions,\n};\nexport {\n createNextPagesRouterAdapter,\n getKeepLocaleLabels,\n KeepAnnouncements,\n KeepAnnouncer,\n KeepBackup,\n KeepBulkActions,\n KeepButton,\n KeepCollection,\n KeepEmptyState,\n KeepItemCard,\n KeepItemCheckbox,\n KeepItemStatusBadge,\n KeepLayout,\n KeepList,\n KeepNoteEditor,\n KeepPagination,\n KeepPruneStaleButton,\n KeepSearchInput,\n KeepSortSelect,\n KeepStaleNotice,\n KeepStatus,\n KeepSyncRecoveryDialog,\n KeepSyncStatusBanner,\n KeepTagEditor,\n KeepTagFilter,\n KeepThemeProvider,\n KeepUiProvider,\n KeepUndo,\n useKeepUiLabels,\n useKeepUrlSync,\n};\n\nexport type CreateKeepKitOptions<TMeta = Record<string, unknown>> = CoreCreateKeepKitOptions<TMeta> &\n Omit<KeepUiProviderProps, \"children\"> & {\n theme?: KeepThemeName;\n mode?: KeepThemeMode;\n density?: KeepThemeDensity;\n radius?: KeepThemeRadius;\n accentColor?: KeepThemeProviderProps[\"accentColor\"];\n highContrast?: boolean;\n reducedMotion?: boolean;\n variables?: KeepThemeVariables;\n themeClassName?: string;\n themeStyle?: KeepThemeProviderProps[\"style\"];\n getTitle?: (item: KeepItem<TMeta>) => ReactNode;\n getImageProps?: (item: KeepItem<TMeta>, title: ReactNode) => KeepImageProps | undefined;\n };\n\nexport type KeepKit<TMeta = Record<string, unknown>> = {\n Provider: ComponentType<KeepKitProviderProps<TMeta>>;\n Button: ComponentType<KeepButtonProps<TMeta>>;\n Backup: ComponentType<KeepBackupProps<TMeta>>;\n Collection: ComponentType<KeepCollectionProps<TMeta>>;\n useContext: () => ReturnType<typeof useKeepContext<TMeta>>;\n useItem: (item?: KeepItemInput<TMeta>) => ReturnType<typeof useKeepItem<TMeta>>;\n useList: (query?: KeepListQuery<TMeta>) => ReturnType<typeof useKeepList<TMeta>>;\n useShortcut: (options: KeepShortcutOptions<TMeta>) => void;\n};\n\n/** Create one typed application API for the core and standard UI layer. */\nexport function createKeepKit<TMeta = Record<string, unknown>>(\n options: CreateKeepKitOptions<TMeta> = {},\n): KeepKit<TMeta> {\n const {\n labels,\n locale,\n labelResolver,\n theme,\n mode,\n density,\n radius,\n accentColor,\n highContrast,\n reducedMotion,\n variables,\n themeClassName,\n themeStyle,\n getTitle,\n getImageProps,\n ...coreOptions\n } = options;\n const coreKit = createCoreKeepKit<TMeta>(coreOptions);\n return {\n Provider: (props) => (\n <KeepKitProvider<TMeta>\n {...coreOptions}\n labels={labels}\n locale={locale}\n labelResolver={labelResolver}\n theme={theme}\n mode={mode}\n density={density}\n radius={radius}\n accentColor={accentColor}\n highContrast={highContrast}\n reducedMotion={reducedMotion}\n variables={variables}\n className={themeClassName}\n style={themeStyle}\n {...props}\n />\n ),\n Button: (props) => <KeepButton<TMeta> {...props} />,\n Backup: (props) => <KeepBackup<TMeta> {...props} />,\n Collection: (props) => (\n <KeepCollection<TMeta>\n {...props}\n itemCardProps={{\n ...(getTitle ? { getTitle } : {}),\n ...(getImageProps ? { getImageProps } : {}),\n ...props.itemCardProps,\n }}\n />\n ),\n useContext: () => coreKit.useContext(),\n useItem: (item) => coreKit.useItem(item),\n useList: (query) => coreKit.useList(query),\n useShortcut: (shortcutOptions) => coreKit.useShortcut(shortcutOptions),\n };\n}\n","\"use client\";\n\nimport type { ImportItemsResult } from \"@keepkit/core/core\";\nimport { useKeepContext } from \"@keepkit/core/react\";\nimport { type ChangeEvent, type HTMLAttributes, useRef, useState } from \"react\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepBackupProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n filename?: string;\n onExport?: (data: string) => void;\n onImported?: (result: ImportItemsResult<TMeta>) => void;\n};\n\n/** Accessible JSON backup controls backed by the current KeepProvider storage. */\nexport function KeepBackup<TMeta = Record<string, unknown>>({\n filename = \"keepkit-backup.json\",\n onExport,\n onImported,\n ...props\n}: KeepBackupProps<TMeta>) {\n const context = useKeepContext<TMeta>();\n const exportLabel = useUiLabel(\"exportData\");\n const importLabel = useUiLabel(\"importData\");\n const importModeLabel = useUiLabel(\"importMode\");\n const mergeLabel = useUiLabel(\"merge\");\n const replaceLabel = useUiLabel(\"replace\");\n const importedCountLabel = useUiLabel(\"importedCount\");\n const failedCountLabel = useUiLabel(\"failedCount\");\n const quotaErrorLabel = useUiLabel(\"storageQuotaError\");\n const inputRef = useRef<HTMLInputElement>(null);\n const [mode, setMode] = useState<\"merge\" | \"replace\">(\"merge\");\n const [result, setResult] = useState<ImportItemsResult<TMeta>>();\n const [error, setError] = useState<unknown>();\n\n async function handleExport() {\n setError(undefined);\n try {\n const data = await context.exportBackup();\n onExport?.(data);\n if (typeof document === \"undefined\") return;\n const url = URL.createObjectURL(new Blob([data], { type: \"application/json\" }));\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = filename;\n anchor.click();\n URL.revokeObjectURL(url);\n } catch (cause) {\n setError(cause);\n }\n }\n\n async function handleImport(event: ChangeEvent<HTMLInputElement>) {\n const file = event.currentTarget.files?.[0];\n event.currentTarget.value = \"\";\n if (!file) return;\n setError(undefined);\n setResult(undefined);\n try {\n const imported = await context.importBackup(await file.text(), { mode });\n setResult(imported);\n onImported?.(imported);\n } catch (cause) {\n setError(cause);\n }\n }\n\n return (\n <section\n {...props}\n data-keepkit=\"backup\"\n data-state={error ? \"error\" : result ? \"complete\" : \"idle\"}\n data-loading={context.isMutating ? \"true\" : undefined}\n >\n <button type=\"button\" onClick={() => void handleExport()} disabled={context.isMutating}>\n {exportLabel}\n </button>\n <label>\n {importModeLabel}\n <select value={mode} onChange={(event) => setMode(event.currentTarget.value as \"merge\" | \"replace\")}>\n <option value=\"merge\">{mergeLabel}</option>\n <option value=\"replace\">{replaceLabel}</option>\n </select>\n </label>\n <button type=\"button\" onClick={() => inputRef.current?.click()} disabled={context.isMutating}>\n {importLabel}\n </button>\n <input\n ref={inputRef}\n type=\"file\"\n accept=\"application/json,.json\"\n aria-label={importLabel}\n onChange={(event) => void handleImport(event)}\n />\n {result ? (\n <p role=\"status\">\n {result.imported} {importedCountLabel}; {result.failed} {failedCountLabel}\n </p>\n ) : null}\n {error ? <p role=\"alert\">{isQuotaError(error) ? quotaErrorLabel : getErrorMessage(error)}</p> : null}\n </section>\n );\n}\n\nfunction isQuotaError(error: unknown): boolean {\n if (error instanceof Error && error.name === \"KeepStorageQuotaError\") return true;\n if (error && typeof error === \"object\" && \"cause\" in error) return isQuotaError(error.cause);\n return false;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : \"Something went wrong.\";\n}\n","\"use client\";\n\nimport { createContext, type ReactNode, useContext, useMemo } from \"react\";\nimport { getKeepLocaleLabels, KEEP_LOCALE_LABELS, normalizeKeepLocale } from \"./locales\";\nimport type { KeepUiLabelKey, KeepUiLabels, KeepUiLocaleLabels } from \"./locales/types\";\n\nexport type { KeepUiLocale } from \"./locales\";\nexport type { KeepUiLabelKey, KeepUiLabels, KeepUiLocaleLabels } from \"./locales/types\";\n\nexport type KeepUiLabelContext = {\n locale?: string;\n labels: Readonly<Record<KeepUiLabelKey, string>>;\n customLabels?: KeepUiLabels;\n labelResolver?: (key: KeepUiLabelKey, context: { locale?: string }) => string | undefined;\n};\n\nexport const DEFAULT_LABELS: KeepUiLocaleLabels = KEEP_LOCALE_LABELS.en;\n\nconst KeepUiLabelsContext = createContext<KeepUiLabelContext>({ labels: DEFAULT_LABELS });\n\nexport type KeepUiProviderProps = {\n labels?: KeepUiLabels;\n locale?: string;\n labelResolver?: KeepUiLabelContext[\"labelResolver\"];\n children?: ReactNode;\n};\n\n/** Provides one complete locale-aware label source to every UI primitive. */\nexport function KeepUiProvider({ labels, locale, labelResolver, children }: KeepUiProviderProps) {\n const value = useMemo<KeepUiLabelContext>(() => {\n const resolvedLocale = normalizeKeepLocale(locale);\n const dictionary = getKeepLocaleLabels(resolvedLocale);\n const resolved = { ...DEFAULT_LABELS, ...dictionary, ...labels };\n return { locale: locale ?? resolvedLocale, labels: resolved, customLabels: labels, labelResolver };\n }, [labelResolver, labels, locale]);\n return <KeepUiLabelsContext.Provider value={value}>{children}</KeepUiLabelsContext.Provider>;\n}\n\nexport function useKeepUiLabels(): KeepUiLabelContext {\n return useContext(KeepUiLabelsContext);\n}\n\nexport function useUiLabel(key: KeepUiLabelKey, override?: string): string {\n const context = useKeepUiLabels();\n return (\n override ??\n context.customLabels?.[key] ??\n context.labelResolver?.(key, { locale: context.locale }) ??\n context.labels[key]\n );\n}\n\nexport { getKeepLocaleLabels };\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const DE_LABELS: KeepUiLocaleLabels = {\n save: \"Speichern\",\n saved: \"Gespeichert\",\n remove: \"Entfernen\",\n loading: \"Wird geladen…\",\n saving: \"Wird gespeichert…\",\n syncing: \"Wird synchronisiert…\",\n error: \"Ein Fehler ist aufgetreten.\",\n allTags: \"Alle\",\n tags: \"Tags\",\n filterTags: \"Gespeicherte Elemente nach Tag filtern\",\n note: \"Notiz\",\n saveNote: \"Notiz speichern\",\n noItems: \"Keine gespeicherten Elemente.\",\n loadingItems: \"Gespeicherte Elemente werden geladen…\",\n errorItems: \"Gespeicherte Elemente konnten nicht geladen werden.\",\n search: \"Gespeicherte Elemente durchsuchen\",\n sort: \"Gespeicherte Elemente sortieren\",\n newest: \"Neueste zuerst\",\n oldest: \"Älteste zuerst\",\n savedNewest: \"Zuletzt gespeichert zuerst\",\n savedOldest: \"Am längsten gespeichert zuerst\",\n updatedNewest: \"Zuletzt aktualisiert zuerst\",\n updatedOldest: \"Am längsten nicht aktualisiert zuerst\",\n previousPage: \"Vorherige Seite\",\n nextPage: \"Nächste Seite\",\n pagination: \"Seitennavigation\",\n page: \"Seite\",\n selectItems: \"Gespeicherte Elemente auswählen\",\n selectedCount: \"ausgewählt\",\n deleteSelected: \"Auswahl löschen\",\n tagsToApply: \"Anzuwendende Tags\",\n applyTags: \"Tags anwenden\",\n savedMessage: \"Element gespeichert.\",\n removedMessage: \"Element entfernt.\",\n undo: \"Rückgängig\",\n undoAvailable: \"Element entfernt. Rückgängig machen?\",\n selectionScope: \"Auswahlbereich\",\n currentPage: \"Aktuelle Seite\",\n searchResults: \"Aktuelle Suchergebnisse\",\n allItems: \"Alle gespeicherten Elemente\",\n localVersion: \"Lokal\",\n remoteVersion: \"Server\",\n updatedAt: \"Aktualisiert\",\n statusAvailable: \"Verfügbar\",\n noteSavedMessage: \"Notiz gespeichert.\",\n exportData: \"JSON exportieren\",\n importData: \"JSON importieren\",\n importMode: \"Importmodus\",\n merge: \"Zusammenführen\",\n replace: \"Ersetzen\",\n importedCount: \"Elemente importiert\",\n failedCount: \"Elemente fehlgeschlagen\",\n storageQuotaError: \"Der Speicher ist voll. Schaffen Sie Speicherplatz und versuchen Sie es erneut.\",\n statusExpired: \"Abgelaufen\",\n statusRemoved: \"Entfernt\",\n statusDeleted: \"Gelöscht\",\n statusPrivate: \"Privat\",\n statusUnknown: \"Nicht verfügbar\",\n retry: \"Erneut versuchen\",\n removeFromList: \"Aus Liste entfernen\",\n pruneStale: \"Nicht verfügbare Elemente entfernen\",\n retrySync: \"Synchronisierung erneut versuchen\",\n resolveSync: \"Konflikte lösen\",\n keepLocal: \"Lokale Version behalten\",\n useServer: \"Serverversion verwenden\",\n manualMerge: \"Manuell zusammenführen\",\n close: \"Schließen\",\n backupRecovery: \"Aus Backup wiederherstellen\",\n backupRecoveryDescription:\n \"Wenn lokale Synchronisierungsdaten beschädigt sind, stellen Sie ein gültiges JSON-Backup wieder her.\",\n syncPending: \"Änderungen warten auf die Synchronisierung.\",\n syncSynced: \"Alle Änderungen sind synchronisiert.\",\n syncConflict: \"Einige Änderungen benötigen eine Konfliktlösung.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const EN_LABELS: KeepUiLocaleLabels = {\n save: \"Save\",\n saved: \"Saved\",\n remove: \"Remove\",\n loading: \"Loading…\",\n saving: \"Saving…\",\n syncing: \"Syncing…\",\n error: \"Something went wrong.\",\n allTags: \"All\",\n tags: \"Tags\",\n filterTags: \"Filter saved items by tag\",\n note: \"Note\",\n saveNote: \"Save note\",\n noItems: \"No saved items.\",\n loadingItems: \"Loading saved items…\",\n errorItems: \"Could not load saved items.\",\n search: \"Search saved items\",\n sort: \"Sort saved items\",\n newest: \"Newest first\",\n oldest: \"Oldest first\",\n savedNewest: \"Saved newest first\",\n savedOldest: \"Saved oldest first\",\n updatedNewest: \"Updated newest first\",\n updatedOldest: \"Updated oldest first\",\n previousPage: \"Previous page\",\n nextPage: \"Next page\",\n pagination: \"Pagination\",\n page: \"Page\",\n selectItems: \"Select saved items\",\n selectedCount: \"selected\",\n deleteSelected: \"Delete selected\",\n tagsToApply: \"Tags to apply\",\n applyTags: \"Apply tags\",\n savedMessage: \"Item saved.\",\n removedMessage: \"Item removed.\",\n undo: \"Undo\",\n undoAvailable: \"Item removed. Undo?\",\n selectionScope: \"Selection scope\",\n currentPage: \"Current page\",\n searchResults: \"Current search results\",\n allItems: \"All saved items\",\n localVersion: \"Local\",\n remoteVersion: \"Remote\",\n updatedAt: \"Updated\",\n statusAvailable: \"Available\",\n noteSavedMessage: \"Note saved.\",\n exportData: \"Export JSON\",\n importData: \"Import JSON\",\n importMode: \"Import mode\",\n merge: \"Merge\",\n replace: \"Replace\",\n importedCount: \"items imported\",\n failedCount: \"items failed\",\n storageQuotaError: \"Storage is full. Free space and try again.\",\n statusExpired: \"Expired\",\n statusRemoved: \"Removed\",\n statusDeleted: \"Deleted\",\n statusPrivate: \"Private\",\n statusUnknown: \"Unavailable\",\n retry: \"Retry\",\n removeFromList: \"Remove from list\",\n pruneStale: \"Remove unavailable items\",\n retrySync: \"Retry sync\",\n resolveSync: \"Resolve conflicts\",\n keepLocal: \"Keep local\",\n useServer: \"Use server\",\n manualMerge: \"Manual merge\",\n close: \"Close\",\n backupRecovery: \"Restore from backup\",\n backupRecoveryDescription: \"If local sync data is damaged, restore a known-good JSON backup.\",\n syncPending: \"Changes are waiting to sync.\",\n syncSynced: \"All changes are synced.\",\n syncConflict: \"Some changes need conflict resolution.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const ES_LABELS: KeepUiLocaleLabels = {\n save: \"Guardar\",\n saved: \"Guardado\",\n remove: \"Eliminar\",\n loading: \"Cargando…\",\n saving: \"Guardando…\",\n syncing: \"Sincronizando…\",\n error: \"Se produjo un error.\",\n allTags: \"Todos\",\n tags: \"Etiquetas\",\n filterTags: \"Filtrar elementos guardados por etiqueta\",\n note: \"Nota\",\n saveNote: \"Guardar nota\",\n noItems: \"No hay elementos guardados.\",\n loadingItems: \"Cargando elementos guardados…\",\n errorItems: \"No se pudieron cargar los elementos guardados.\",\n search: \"Buscar elementos guardados\",\n sort: \"Ordenar elementos guardados\",\n newest: \"Más recientes primero\",\n oldest: \"Más antiguos primero\",\n savedNewest: \"Guardados más recientemente primero\",\n savedOldest: \"Guardados más antiguos primero\",\n updatedNewest: \"Actualizados más recientemente primero\",\n updatedOldest: \"Actualizados más antiguos primero\",\n previousPage: \"Página anterior\",\n nextPage: \"Página siguiente\",\n pagination: \"Paginación\",\n page: \"Página\",\n selectItems: \"Seleccionar elementos guardados\",\n selectedCount: \"seleccionados\",\n deleteSelected: \"Eliminar seleccionados\",\n tagsToApply: \"Etiquetas que aplicar\",\n applyTags: \"Aplicar etiquetas\",\n savedMessage: \"Elemento guardado.\",\n removedMessage: \"Elemento eliminado.\",\n undo: \"Deshacer\",\n undoAvailable: \"Elemento eliminado. ¿Deshacer?\",\n selectionScope: \"Ámbito de selección\",\n currentPage: \"Página actual\",\n searchResults: \"Resultados de búsqueda actuales\",\n allItems: \"Todos los elementos guardados\",\n localVersion: \"Local\",\n remoteVersion: \"Servidor\",\n updatedAt: \"Actualizado\",\n statusAvailable: \"Disponible\",\n noteSavedMessage: \"Nota guardada.\",\n exportData: \"Exportar JSON\",\n importData: \"Importar JSON\",\n importMode: \"Modo de importación\",\n merge: \"Combinar\",\n replace: \"Reemplazar\",\n importedCount: \"elementos importados\",\n failedCount: \"elementos fallidos\",\n storageQuotaError: \"El almacenamiento está lleno. Libere espacio y vuelva a intentarlo.\",\n statusExpired: \"Caducado\",\n statusRemoved: \"Eliminado\",\n statusDeleted: \"Borrado\",\n statusPrivate: \"Privado\",\n statusUnknown: \"No disponible\",\n retry: \"Reintentar\",\n removeFromList: \"Quitar de la lista\",\n pruneStale: \"Quitar elementos no disponibles\",\n retrySync: \"Reintentar sincronización\",\n resolveSync: \"Resolver conflictos\",\n keepLocal: \"Conservar versión local\",\n useServer: \"Usar versión del servidor\",\n manualMerge: \"Combinar manualmente\",\n close: \"Cerrar\",\n backupRecovery: \"Restaurar desde copia de seguridad\",\n backupRecoveryDescription: \"Si los datos locales están dañados, restaura una copia JSON válida.\",\n syncPending: \"Hay cambios pendientes de sincronización.\",\n syncSynced: \"Todos los cambios están sincronizados.\",\n syncConflict: \"Algunos cambios necesitan resolver un conflicto.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const FIL_LABELS: KeepUiLocaleLabels = {\n save: \"I-save\",\n saved: \"Nai-save\",\n remove: \"Alisin\",\n loading: \"Naglo-load…\",\n saving: \"Sini-save…\",\n syncing: \"Sini-sync…\",\n error: \"May naganap na error.\",\n allTags: \"Lahat\",\n tags: \"Mga tag\",\n filterTags: \"I-filter ang mga naka-save na item ayon sa tag\",\n note: \"Tala\",\n saveNote: \"I-save ang tala\",\n noItems: \"Walang naka-save na item.\",\n loadingItems: \"Nilo-load ang mga naka-save na item…\",\n errorItems: \"Hindi ma-load ang mga naka-save na item.\",\n search: \"Maghanap ng naka-save na item\",\n sort: \"Ayusin ang mga naka-save na item\",\n newest: \"Pinakabago muna\",\n oldest: \"Pinakaluma muna\",\n savedNewest: \"Pinakabagong na-save muna\",\n savedOldest: \"Pinakamatagal na naka-save muna\",\n updatedNewest: \"Pinakabagong na-update muna\",\n updatedOldest: \"Pinakamatagal na hindi na-update muna\",\n previousPage: \"Nakaraang pahina\",\n nextPage: \"Susunod na pahina\",\n pagination: \"Pagpapa-pahina\",\n page: \"Pahina\",\n selectItems: \"Pumili ng naka-save na item\",\n selectedCount: \"napili\",\n deleteSelected: \"Tanggalin ang napili\",\n tagsToApply: \"Mga tag na ilalapat\",\n applyTags: \"Ilapat ang mga tag\",\n savedMessage: \"Na-save ang item.\",\n removedMessage: \"Inalis ang item.\",\n undo: \"I-undo\",\n undoAvailable: \"Inalis ang item. I-undo?\",\n selectionScope: \"Saklaw ng pagpili\",\n currentPage: \"Kasalukuyang pahina\",\n searchResults: \"Kasalukuyang resulta ng paghahanap\",\n allItems: \"Lahat ng naka-save na item\",\n localVersion: \"Lokal\",\n remoteVersion: \"Remote\",\n updatedAt: \"Na-update\",\n statusAvailable: \"Available\",\n noteSavedMessage: \"Na-save ang tala.\",\n exportData: \"I-export ang JSON\",\n importData: \"I-import ang JSON\",\n importMode: \"Mode ng pag-import\",\n merge: \"Pagsamahin\",\n replace: \"Palitan\",\n importedCount: \"item ang na-import\",\n failedCount: \"item ang nabigo\",\n storageQuotaError: \"Puno na ang storage. Magbakante ng espasyo at subukan muli.\",\n statusExpired: \"Nag-expire\",\n statusRemoved: \"Inalis\",\n statusDeleted: \"Tinanggal\",\n statusPrivate: \"Pribado\",\n statusUnknown: \"Hindi available\",\n retry: \"Subukan muli\",\n removeFromList: \"Alisin sa listahan\",\n pruneStale: \"Alisin ang hindi available na item\",\n retrySync: \"Subukan muli ang sync\",\n resolveSync: \"Ayusin ang mga conflict\",\n keepLocal: \"Panatilihin ang lokal\",\n useServer: \"Gamitin ang server\",\n manualMerge: \"Manwal na pagsamahin\",\n close: \"Isara\",\n backupRecovery: \"I-restore mula sa backup\",\n backupRecoveryDescription: \"Kung sira ang lokal na sync data, mag-restore ng gumaganang JSON backup.\",\n syncPending: \"May mga pagbabagong naghihintay ng sync.\",\n syncSynced: \"Naka-sync na ang lahat ng pagbabago.\",\n syncConflict: \"May mga pagbabagong kailangang ayusin ang conflict.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const FR_LABELS: KeepUiLocaleLabels = {\n save: \"Enregistrer\",\n saved: \"Enregistré\",\n remove: \"Supprimer\",\n loading: \"Chargement…\",\n saving: \"Enregistrement…\",\n syncing: \"Synchronisation…\",\n error: \"Une erreur s’est produite.\",\n allTags: \"Tous\",\n tags: \"Étiquettes\",\n filterTags: \"Filtrer les éléments enregistrés par étiquette\",\n note: \"Note\",\n saveNote: \"Enregistrer la note\",\n noItems: \"Aucun élément enregistré.\",\n loadingItems: \"Chargement des éléments enregistrés…\",\n errorItems: \"Impossible de charger les éléments enregistrés.\",\n search: \"Rechercher des éléments enregistrés\",\n sort: \"Trier les éléments enregistrés\",\n newest: \"Plus récent d’abord\",\n oldest: \"Plus ancien d’abord\",\n savedNewest: \"Enregistrement le plus récent d’abord\",\n savedOldest: \"Enregistrement le plus ancien d’abord\",\n updatedNewest: \"Mise à jour la plus récente d’abord\",\n updatedOldest: \"Mise à jour la plus ancienne d’abord\",\n previousPage: \"Page précédente\",\n nextPage: \"Page suivante\",\n pagination: \"Pagination\",\n page: \"Page\",\n selectItems: \"Sélectionner les éléments enregistrés\",\n selectedCount: \"sélectionnés\",\n deleteSelected: \"Supprimer la sélection\",\n tagsToApply: \"Étiquettes à appliquer\",\n applyTags: \"Appliquer les étiquettes\",\n savedMessage: \"Élément enregistré.\",\n removedMessage: \"Élément supprimé.\",\n undo: \"Annuler\",\n undoAvailable: \"Élément supprimé. Annuler ?\",\n selectionScope: \"Portée de la sélection\",\n currentPage: \"Page actuelle\",\n searchResults: \"Résultats de recherche actuels\",\n allItems: \"Tous les éléments enregistrés\",\n localVersion: \"Local\",\n remoteVersion: \"Distant\",\n updatedAt: \"Mis à jour\",\n statusAvailable: \"Disponible\",\n noteSavedMessage: \"Note enregistrée.\",\n exportData: \"Exporter JSON\",\n importData: \"Importer JSON\",\n importMode: \"Mode d’importation\",\n merge: \"Fusionner\",\n replace: \"Remplacer\",\n importedCount: \"éléments importés\",\n failedCount: \"éléments en échec\",\n storageQuotaError: \"Le stockage est plein. Libérez de l’espace et réessayez.\",\n statusExpired: \"Expiré\",\n statusRemoved: \"Supprimé\",\n statusDeleted: \"Effacé\",\n statusPrivate: \"Privé\",\n statusUnknown: \"Indisponible\",\n retry: \"Réessayer\",\n removeFromList: \"Retirer de la liste\",\n pruneStale: \"Retirer les éléments indisponibles\",\n retrySync: \"Réessayer la synchronisation\",\n resolveSync: \"Résoudre les conflits\",\n keepLocal: \"Garder la version locale\",\n useServer: \"Utiliser la version serveur\",\n manualMerge: \"Fusion manuelle\",\n close: \"Fermer\",\n backupRecovery: \"Restaurer depuis une sauvegarde\",\n backupRecoveryDescription: \"Si les données locales sont endommagées, restaurez une sauvegarde JSON valide.\",\n syncPending: \"Des modifications attendent la synchronisation.\",\n syncSynced: \"Toutes les modifications sont synchronisées.\",\n syncConflict: \"Certaines modifications nécessitent une résolution de conflit.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const ID_LABELS: KeepUiLocaleLabels = {\n save: \"Simpan\",\n saved: \"Tersimpan\",\n remove: \"Hapus\",\n loading: \"Memuat…\",\n saving: \"Menyimpan…\",\n syncing: \"Menyinkronkan…\",\n error: \"Terjadi kesalahan.\",\n allTags: \"Semua\",\n tags: \"Tag\",\n filterTags: \"Filter item tersimpan berdasarkan tag\",\n note: \"Catatan\",\n saveNote: \"Simpan catatan\",\n noItems: \"Belum ada item tersimpan.\",\n loadingItems: \"Memuat item tersimpan…\",\n errorItems: \"Tidak dapat memuat item tersimpan.\",\n search: \"Cari item tersimpan\",\n sort: \"Urutkan item tersimpan\",\n newest: \"Terbaru dahulu\",\n oldest: \"Terlama dahulu\",\n savedNewest: \"Paling baru disimpan dahulu\",\n savedOldest: \"Paling lama disimpan dahulu\",\n updatedNewest: \"Paling baru diperbarui dahulu\",\n updatedOldest: \"Paling lama diperbarui dahulu\",\n previousPage: \"Halaman sebelumnya\",\n nextPage: \"Halaman berikutnya\",\n pagination: \"Paginasi\",\n page: \"Halaman\",\n selectItems: \"Pilih item tersimpan\",\n selectedCount: \"dipilih\",\n deleteSelected: \"Hapus yang dipilih\",\n tagsToApply: \"Tag yang akan diterapkan\",\n applyTags: \"Terapkan tag\",\n savedMessage: \"Item tersimpan.\",\n removedMessage: \"Item dihapus.\",\n undo: \"Urungkan\",\n undoAvailable: \"Item dihapus. Urungkan?\",\n selectionScope: \"Cakupan pilihan\",\n currentPage: \"Halaman saat ini\",\n searchResults: \"Hasil pencarian saat ini\",\n allItems: \"Semua item tersimpan\",\n localVersion: \"Lokal\",\n remoteVersion: \"Server\",\n updatedAt: \"Diperbarui\",\n statusAvailable: \"Tersedia\",\n noteSavedMessage: \"Catatan tersimpan.\",\n exportData: \"Ekspor JSON\",\n importData: \"Impor JSON\",\n importMode: \"Mode impor\",\n merge: \"Gabungkan\",\n replace: \"Ganti\",\n importedCount: \"item diimpor\",\n failedCount: \"item gagal\",\n storageQuotaError: \"Penyimpanan penuh. Kosongkan ruang lalu coba lagi.\",\n statusExpired: \"Kedaluwarsa\",\n statusRemoved: \"Dihapus\",\n statusDeleted: \"Terhapus\",\n statusPrivate: \"Pribadi\",\n statusUnknown: \"Tidak tersedia\",\n retry: \"Coba lagi\",\n removeFromList: \"Hapus dari daftar\",\n pruneStale: \"Hapus item yang tidak tersedia\",\n retrySync: \"Coba sinkronisasi lagi\",\n resolveSync: \"Selesaikan konflik\",\n keepLocal: \"Pertahankan versi lokal\",\n useServer: \"Gunakan versi server\",\n manualMerge: \"Gabungkan manual\",\n close: \"Tutup\",\n backupRecovery: \"Pulihkan dari cadangan\",\n backupRecoveryDescription: \"Jika data sinkronisasi lokal rusak, pulihkan cadangan JSON yang valid.\",\n syncPending: \"Ada perubahan yang menunggu sinkronisasi.\",\n syncSynced: \"Semua perubahan telah disinkronkan.\",\n syncConflict: \"Beberapa perubahan memerlukan penyelesaian konflik.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const IT_LABELS: KeepUiLocaleLabels = {\n save: \"Salva\",\n saved: \"Salvato\",\n remove: \"Rimuovi\",\n loading: \"Caricamento…\",\n saving: \"Salvataggio…\",\n syncing: \"Sincronizzazione…\",\n error: \"Si è verificato un errore.\",\n allTags: \"Tutti\",\n tags: \"Tag\",\n filterTags: \"Filtra gli elementi salvati per tag\",\n note: \"Nota\",\n saveNote: \"Salva nota\",\n noItems: \"Nessun elemento salvato.\",\n loadingItems: \"Caricamento degli elementi salvati…\",\n errorItems: \"Impossibile caricare gli elementi salvati.\",\n search: \"Cerca elementi salvati\",\n sort: \"Ordina elementi salvati\",\n newest: \"Più recenti prima\",\n oldest: \"Più vecchi prima\",\n savedNewest: \"Salvati più di recente prima\",\n savedOldest: \"Salvati meno di recente prima\",\n updatedNewest: \"Aggiornati più di recente prima\",\n updatedOldest: \"Aggiornati meno di recente prima\",\n previousPage: \"Pagina precedente\",\n nextPage: \"Pagina successiva\",\n pagination: \"Paginazione\",\n page: \"Pagina\",\n selectItems: \"Seleziona elementi salvati\",\n selectedCount: \"selezionati\",\n deleteSelected: \"Elimina selezionati\",\n tagsToApply: \"Tag da applicare\",\n applyTags: \"Applica tag\",\n savedMessage: \"Elemento salvato.\",\n removedMessage: \"Elemento rimosso.\",\n undo: \"Annulla\",\n undoAvailable: \"Elemento rimosso. Annullare?\",\n selectionScope: \"Ambito della selezione\",\n currentPage: \"Pagina corrente\",\n searchResults: \"Risultati di ricerca correnti\",\n allItems: \"Tutti gli elementi salvati\",\n localVersion: \"Locale\",\n remoteVersion: \"Server\",\n updatedAt: \"Aggiornato\",\n statusAvailable: \"Disponibile\",\n noteSavedMessage: \"Nota salvata.\",\n exportData: \"Esporta JSON\",\n importData: \"Importa JSON\",\n importMode: \"Modalità di importazione\",\n merge: \"Unisci\",\n replace: \"Sostituisci\",\n importedCount: \"elementi importati\",\n failedCount: \"elementi non riusciti\",\n storageQuotaError: \"Lo spazio di archiviazione è pieno. Libera spazio e riprova.\",\n statusExpired: \"Scaduto\",\n statusRemoved: \"Rimosso\",\n statusDeleted: \"Eliminato\",\n statusPrivate: \"Privato\",\n statusUnknown: \"Non disponibile\",\n retry: \"Riprova\",\n removeFromList: \"Rimuovi dall'elenco\",\n pruneStale: \"Rimuovi elementi non disponibili\",\n retrySync: \"Riprova sincronizzazione\",\n resolveSync: \"Risolvi conflitti\",\n keepLocal: \"Mantieni versione locale\",\n useServer: \"Usa versione del server\",\n manualMerge: \"Unione manuale\",\n close: \"Chiudi\",\n backupRecovery: \"Ripristina dal backup\",\n backupRecoveryDescription: \"Se i dati locali sono danneggiati, ripristina un backup JSON valido.\",\n syncPending: \"Ci sono modifiche in attesa di sincronizzazione.\",\n syncSynced: \"Tutte le modifiche sono sincronizzate.\",\n syncConflict: \"Alcune modifiche richiedono la risoluzione di un conflitto.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const JA_LABELS: KeepUiLocaleLabels = {\n save: \"保存\",\n saved: \"保存済み\",\n remove: \"削除\",\n loading: \"読み込み中…\",\n saving: \"保存中…\",\n syncing: \"同期中…\",\n error: \"問題が発生しました。\",\n allTags: \"すべて\",\n tags: \"タグ\",\n filterTags: \"保存アイテムをタグで絞り込む\",\n note: \"メモ\",\n saveNote: \"メモを保存\",\n noItems: \"保存されたアイテムはありません。\",\n loadingItems: \"保存アイテムを読み込み中…\",\n errorItems: \"保存アイテムを読み込めませんでした。\",\n search: \"保存アイテムを検索\",\n sort: \"保存アイテムを並べ替え\",\n newest: \"新しい順\",\n oldest: \"古い順\",\n savedNewest: \"保存日時の新しい順\",\n savedOldest: \"保存日時の古い順\",\n updatedNewest: \"更新日時の新しい順\",\n updatedOldest: \"更新日時の古い順\",\n previousPage: \"前のページ\",\n nextPage: \"次のページ\",\n pagination: \"ページネーション\",\n page: \"ページ\",\n selectItems: \"保存アイテムを選択\",\n selectedCount: \"件を選択中\",\n deleteSelected: \"選択項目を削除\",\n tagsToApply: \"適用するタグ\",\n applyTags: \"タグを適用\",\n savedMessage: \"アイテムを保存しました。\",\n removedMessage: \"アイテムを削除しました。\",\n undo: \"元に戻す\",\n undoAvailable: \"アイテムを削除しました。元に戻しますか?\",\n selectionScope: \"選択範囲\",\n currentPage: \"表示中のページ\",\n searchResults: \"現在の検索結果全体\",\n allItems: \"すべての保存アイテム\",\n localVersion: \"ローカル\",\n remoteVersion: \"リモート\",\n updatedAt: \"更新日時\",\n statusAvailable: \"利用可能\",\n noteSavedMessage: \"メモを保存しました。\",\n exportData: \"JSONをエクスポート\",\n importData: \"JSONをインポート\",\n importMode: \"インポート方法\",\n merge: \"統合\",\n replace: \"置き換え\",\n importedCount: \"件をインポートしました\",\n failedCount: \"件に失敗しました\",\n storageQuotaError: \"保存容量が不足しています。空き容量を確保して再試行してください。\",\n statusExpired: \"期限切れ\",\n statusRemoved: \"削除済み\",\n statusDeleted: \"削除済み\",\n statusPrivate: \"非公開\",\n statusUnknown: \"利用不可\",\n retry: \"再取得\",\n removeFromList: \"一覧から削除\",\n pruneStale: \"利用できない項目を削除\",\n retrySync: \"同期を再試行\",\n resolveSync: \"競合を解決\",\n keepLocal: \"ローカルを優先\",\n useServer: \"サーバーを優先\",\n manualMerge: \"手動で統合\",\n close: \"閉じる\",\n backupRecovery: \"バックアップから復元\",\n backupRecoveryDescription: \"ローカルの同期データが破損した場合は、正常なJSONバックアップから復元してください。\",\n syncPending: \"同期待ちの変更があります。\",\n syncSynced: \"すべての変更を同期しました。\",\n syncConflict: \"競合している変更があります。解決してください。\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const KO_LABELS: KeepUiLocaleLabels = {\n save: \"저장\",\n saved: \"저장됨\",\n remove: \"삭제\",\n loading: \"로드 중…\",\n saving: \"저장 중…\",\n syncing: \"동기화 중…\",\n error: \"문제가 발생했습니다.\",\n allTags: \"모두\",\n tags: \"태그\",\n filterTags: \"태그로 저장 항목 필터링\",\n note: \"메모\",\n saveNote: \"메모 저장\",\n noItems: \"저장된 항목이 없습니다.\",\n loadingItems: \"저장 항목을 불러오는 중…\",\n errorItems: \"저장 항목을 불러오지 못했습니다.\",\n search: \"저장 항목 검색\",\n sort: \"저장 항목 정렬\",\n newest: \"최신순\",\n oldest: \"오래된순\",\n savedNewest: \"저장일 최신순\",\n savedOldest: \"저장일 오래된순\",\n updatedNewest: \"수정일 최신순\",\n updatedOldest: \"수정일 오래된순\",\n previousPage: \"이전 페이지\",\n nextPage: \"다음 페이지\",\n pagination: \"페이지 매김\",\n page: \"페이지\",\n selectItems: \"저장 항목 선택\",\n selectedCount: \"개 선택됨\",\n deleteSelected: \"선택 항목 삭제\",\n tagsToApply: \"적용할 태그\",\n applyTags: \"태그 적용\",\n savedMessage: \"항목을 저장했습니다.\",\n removedMessage: \"항목을 삭제했습니다.\",\n undo: \"실행 취소\",\n undoAvailable: \"항목을 삭제했습니다. 실행 취소할까요?\",\n selectionScope: \"선택 범위\",\n currentPage: \"현재 페이지\",\n searchResults: \"현재 검색 결과 전체\",\n allItems: \"모든 저장 항목\",\n localVersion: \"로컬\",\n remoteVersion: \"원격\",\n updatedAt: \"업데이트 시간\",\n statusAvailable: \"사용 가능\",\n noteSavedMessage: \"메모를 저장했습니다.\",\n exportData: \"JSON 내보내기\",\n importData: \"JSON 가져오기\",\n importMode: \"가져오기 방식\",\n merge: \"병합\",\n replace: \"교체\",\n importedCount: \"개 가져옴\",\n failedCount: \"개 실패\",\n storageQuotaError: \"저장 공간이 부족합니다. 공간을 확보한 후 다시 시도하세요.\",\n statusExpired: \"만료됨\",\n statusRemoved: \"제거됨\",\n statusDeleted: \"삭제됨\",\n statusPrivate: \"비공개\",\n statusUnknown: \"사용할 수 없음\",\n retry: \"다시 시도\",\n removeFromList: \"목록에서 삭제\",\n pruneStale: \"사용할 수 없는 항목 삭제\",\n retrySync: \"동기화 다시 시도\",\n resolveSync: \"충돌 해결\",\n keepLocal: \"로컬 버전 유지\",\n useServer: \"서버 버전 사용\",\n manualMerge: \"수동 병합\",\n close: \"닫기\",\n backupRecovery: \"백업에서 복원\",\n backupRecoveryDescription: \"로컬 동기화 데이터가 손상된 경우 정상적인 JSON 백업을 복원하세요.\",\n syncPending: \"동기화 대기 중인 변경 사항이 있습니다.\",\n syncSynced: \"모든 변경 사항이 동기화되었습니다.\",\n syncConflict: \"충돌을 해결해야 하는 변경 사항이 있습니다.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const MS_LABELS: KeepUiLocaleLabels = {\n save: \"Simpan\",\n saved: \"Disimpan\",\n remove: \"Buang\",\n loading: \"Memuatkan…\",\n saving: \"Menyimpan…\",\n syncing: \"Menyegerakkan…\",\n error: \"Ralat telah berlaku.\",\n allTags: \"Semua\",\n tags: \"Tag\",\n filterTags: \"Tapis item yang disimpan mengikut tag\",\n note: \"Nota\",\n saveNote: \"Simpan nota\",\n noItems: \"Tiada item disimpan.\",\n loadingItems: \"Memuatkan item yang disimpan…\",\n errorItems: \"Tidak dapat memuatkan item yang disimpan.\",\n search: \"Cari item yang disimpan\",\n sort: \"Isih item yang disimpan\",\n newest: \"Terbaharu dahulu\",\n oldest: \"Terlama dahulu\",\n savedNewest: \"Disimpan paling baharu dahulu\",\n savedOldest: \"Disimpan paling lama dahulu\",\n updatedNewest: \"Dikemas kini paling baharu dahulu\",\n updatedOldest: \"Dikemas kini paling lama dahulu\",\n previousPage: \"Halaman sebelumnya\",\n nextPage: \"Halaman seterusnya\",\n pagination: \"Penomboran halaman\",\n page: \"Halaman\",\n selectItems: \"Pilih item yang disimpan\",\n selectedCount: \"dipilih\",\n deleteSelected: \"Padam pilihan\",\n tagsToApply: \"Tag untuk digunakan\",\n applyTags: \"Gunakan tag\",\n savedMessage: \"Item disimpan.\",\n removedMessage: \"Item dibuang.\",\n undo: \"Buat asal\",\n undoAvailable: \"Item dibuang. Buat asal?\",\n selectionScope: \"Skop pilihan\",\n currentPage: \"Halaman semasa\",\n searchResults: \"Hasil carian semasa\",\n allItems: \"Semua item yang disimpan\",\n localVersion: \"Tempatan\",\n remoteVersion: \"Pelayan\",\n updatedAt: \"Dikemas kini\",\n statusAvailable: \"Tersedia\",\n noteSavedMessage: \"Nota disimpan.\",\n exportData: \"Eksport JSON\",\n importData: \"Import JSON\",\n importMode: \"Mod import\",\n merge: \"Gabung\",\n replace: \"Ganti\",\n importedCount: \"item diimport\",\n failedCount: \"item gagal\",\n storageQuotaError: \"Storan penuh. Kosongkan ruang dan cuba lagi.\",\n statusExpired: \"Tamat tempoh\",\n statusRemoved: \"Dibuang\",\n statusDeleted: \"Dipadam\",\n statusPrivate: \"Peribadi\",\n statusUnknown: \"Tidak tersedia\",\n retry: \"Cuba lagi\",\n removeFromList: \"Buang daripada senarai\",\n pruneStale: \"Buang item yang tidak tersedia\",\n retrySync: \"Cuba penyegerakan lagi\",\n resolveSync: \"Selesaikan konflik\",\n keepLocal: \"Kekalkan versi setempat\",\n useServer: \"Gunakan versi pelayan\",\n manualMerge: \"Gabung secara manual\",\n close: \"Tutup\",\n backupRecovery: \"Pulihkan daripada sandaran\",\n backupRecoveryDescription: \"Jika data penyegerakan setempat rosak, pulihkan sandaran JSON yang sah.\",\n syncPending: \"Terdapat perubahan yang menunggu penyegerakan.\",\n syncSynced: \"Semua perubahan telah disegerakkan.\",\n syncConflict: \"Sesetengah perubahan memerlukan penyelesaian konflik.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const PT_BR_LABELS: KeepUiLocaleLabels = {\n save: \"Salvar\",\n saved: \"Salvo\",\n remove: \"Remover\",\n loading: \"Carregando…\",\n saving: \"Salvando…\",\n syncing: \"Sincronizando…\",\n error: \"Ocorreu um erro.\",\n allTags: \"Todos\",\n tags: \"Tags\",\n filterTags: \"Filtrar itens salvos por tag\",\n note: \"Nota\",\n saveNote: \"Salvar nota\",\n noItems: \"Nenhum item salvo.\",\n loadingItems: \"Carregando itens salvos…\",\n errorItems: \"Não foi possível carregar os itens salvos.\",\n search: \"Pesquisar itens salvos\",\n sort: \"Ordenar itens salvos\",\n newest: \"Mais recentes primeiro\",\n oldest: \"Mais antigos primeiro\",\n savedNewest: \"Salvos mais recentemente primeiro\",\n savedOldest: \"Salvos há mais tempo primeiro\",\n updatedNewest: \"Atualizados mais recentemente primeiro\",\n updatedOldest: \"Atualizados há mais tempo primeiro\",\n previousPage: \"Página anterior\",\n nextPage: \"Próxima página\",\n pagination: \"Paginação\",\n page: \"Página\",\n selectItems: \"Selecionar itens salvos\",\n selectedCount: \"selecionados\",\n deleteSelected: \"Excluir selecionados\",\n tagsToApply: \"Tags a aplicar\",\n applyTags: \"Aplicar tags\",\n savedMessage: \"Item salvo.\",\n removedMessage: \"Item removido.\",\n undo: \"Desfazer\",\n undoAvailable: \"Item removido. Desfazer?\",\n selectionScope: \"Escopo da seleção\",\n currentPage: \"Página atual\",\n searchResults: \"Resultados da pesquisa atual\",\n allItems: \"Todos os itens salvos\",\n localVersion: \"Local\",\n remoteVersion: \"Servidor\",\n updatedAt: \"Atualizado\",\n statusAvailable: \"Disponível\",\n noteSavedMessage: \"Nota salva.\",\n exportData: \"Exportar JSON\",\n importData: \"Importar JSON\",\n importMode: \"Modo de importação\",\n merge: \"Mesclar\",\n replace: \"Substituir\",\n importedCount: \"itens importados\",\n failedCount: \"itens com falha\",\n storageQuotaError: \"O armazenamento está cheio. Libere espaço e tente novamente.\",\n statusExpired: \"Expirado\",\n statusRemoved: \"Removido\",\n statusDeleted: \"Excluído\",\n statusPrivate: \"Privado\",\n statusUnknown: \"Indisponível\",\n retry: \"Tentar novamente\",\n removeFromList: \"Remover da lista\",\n pruneStale: \"Remover itens indisponíveis\",\n retrySync: \"Tentar sincronizar novamente\",\n resolveSync: \"Resolver conflitos\",\n keepLocal: \"Manter versão local\",\n useServer: \"Usar versão do servidor\",\n manualMerge: \"Mesclagem manual\",\n close: \"Fechar\",\n backupRecovery: \"Restaurar do backup\",\n backupRecoveryDescription: \"Se os dados locais estiverem corrompidos, restaure um backup JSON válido.\",\n syncPending: \"Há alterações aguardando sincronização.\",\n syncSynced: \"Todas as alterações foram sincronizadas.\",\n syncConflict: \"Algumas alterações precisam de resolução de conflito.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const RU_LABELS: KeepUiLocaleLabels = {\n save: \"Сохранить\",\n saved: \"Сохранено\",\n remove: \"Удалить\",\n loading: \"Загрузка…\",\n saving: \"Сохранение…\",\n syncing: \"Синхронизация…\",\n error: \"Произошла ошибка.\",\n allTags: \"Все\",\n tags: \"Теги\",\n filterTags: \"Фильтровать сохранённые элементы по тегу\",\n note: \"Заметка\",\n saveNote: \"Сохранить заметку\",\n noItems: \"Нет сохранённых элементов.\",\n loadingItems: \"Загрузка сохранённых элементов…\",\n errorItems: \"Не удалось загрузить сохранённые элементы.\",\n search: \"Поиск сохранённых элементов\",\n sort: \"Сортировка сохранённых элементов\",\n newest: \"Сначала новые\",\n oldest: \"Сначала старые\",\n savedNewest: \"Сначала недавно сохранённые\",\n savedOldest: \"Сначала давно сохранённые\",\n updatedNewest: \"Сначала недавно обновлённые\",\n updatedOldest: \"Сначала давно обновлённые\",\n previousPage: \"Предыдущая страница\",\n nextPage: \"Следующая страница\",\n pagination: \"Пагинация\",\n page: \"Страница\",\n selectItems: \"Выбрать сохранённые элементы\",\n selectedCount: \"выбрано\",\n deleteSelected: \"Удалить выбранные\",\n tagsToApply: \"Теги для применения\",\n applyTags: \"Применить теги\",\n savedMessage: \"Элемент сохранён.\",\n removedMessage: \"Элемент удалён.\",\n undo: \"Отменить\",\n undoAvailable: \"Элемент удалён. Отменить?\",\n selectionScope: \"Область выбора\",\n currentPage: \"Текущая страница\",\n searchResults: \"Текущие результаты поиска\",\n allItems: \"Все сохранённые элементы\",\n localVersion: \"Локальная версия\",\n remoteVersion: \"Серверная версия\",\n updatedAt: \"Обновлено\",\n statusAvailable: \"Доступен\",\n noteSavedMessage: \"Заметка сохранена.\",\n exportData: \"Экспортировать JSON\",\n importData: \"Импортировать JSON\",\n importMode: \"Режим импорта\",\n merge: \"Объединить\",\n replace: \"Заменить\",\n importedCount: \"элементов импортировано\",\n failedCount: \"элементов не удалось импортировать\",\n storageQuotaError: \"Хранилище заполнено. Освободите место и повторите попытку.\",\n statusExpired: \"Истёк срок\",\n statusRemoved: \"Удалён\",\n statusDeleted: \"Удалён навсегда\",\n statusPrivate: \"Приватный\",\n statusUnknown: \"Недоступен\",\n retry: \"Повторить\",\n removeFromList: \"Удалить из списка\",\n pruneStale: \"Удалить недоступные элементы\",\n retrySync: \"Повторить синхронизацию\",\n resolveSync: \"Разрешить конфликты\",\n keepLocal: \"Оставить локальную версию\",\n useServer: \"Использовать версию сервера\",\n manualMerge: \"Объединить вручную\",\n close: \"Закрыть\",\n backupRecovery: \"Восстановить из резервной копии\",\n backupRecoveryDescription: \"Если локальные данные синхронизации повреждены, восстановите рабочую JSON-копию.\",\n syncPending: \"Есть изменения, ожидающие синхронизации.\",\n syncSynced: \"Все изменения синхронизированы.\",\n syncConflict: \"Некоторые изменения требуют разрешения конфликта.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const TH_LABELS: KeepUiLocaleLabels = {\n save: \"บันทึก\",\n saved: \"บันทึกแล้ว\",\n remove: \"ลบ\",\n loading: \"กำลังโหลด…\",\n saving: \"กำลังบันทึก…\",\n syncing: \"กำลังซิงค์…\",\n error: \"เกิดข้อผิดพลาด\",\n allTags: \"ทั้งหมด\",\n tags: \"แท็ก\",\n filterTags: \"กรองรายการที่บันทึกด้วยแท็ก\",\n note: \"บันทึกย่อ\",\n saveNote: \"บันทึกบันทึกย่อ\",\n noItems: \"ไม่มีรายการที่บันทึกไว้\",\n loadingItems: \"กำลังโหลดรายการที่บันทึก…\",\n errorItems: \"โหลดรายการที่บันทึกไม่ได้\",\n search: \"ค้นหารายการที่บันทึก\",\n sort: \"เรียงรายการที่บันทึก\",\n newest: \"ใหม่สุดก่อน\",\n oldest: \"เก่าสุดก่อน\",\n savedNewest: \"บันทึกใหม่สุดก่อน\",\n savedOldest: \"บันทึกเก่าสุดก่อน\",\n updatedNewest: \"อัปเดตใหม่สุดก่อน\",\n updatedOldest: \"อัปเดตเก่าสุดก่อน\",\n previousPage: \"หน้าก่อนหน้า\",\n nextPage: \"หน้าถัดไป\",\n pagination: \"การแบ่งหน้า\",\n page: \"หน้า\",\n selectItems: \"เลือกรายการที่บันทึก\",\n selectedCount: \"รายการที่เลือก\",\n deleteSelected: \"ลบรายการที่เลือก\",\n tagsToApply: \"แท็กที่จะใช้\",\n applyTags: \"ใช้แท็ก\",\n savedMessage: \"บันทึกรายการแล้ว\",\n removedMessage: \"ลบรายการแล้ว\",\n undo: \"เลิกทำ\",\n undoAvailable: \"ลบรายการแล้ว ต้องการเลิกทำหรือไม่\",\n selectionScope: \"ขอบเขตการเลือก\",\n currentPage: \"หน้าปัจจุบัน\",\n searchResults: \"ผลการค้นหาปัจจุบัน\",\n allItems: \"รายการที่บันทึกทั้งหมด\",\n localVersion: \"ในเครื่อง\",\n remoteVersion: \"ระยะไกล\",\n updatedAt: \"อัปเดตเมื่อ\",\n statusAvailable: \"พร้อมใช้งาน\",\n noteSavedMessage: \"บันทึกย่อแล้ว\",\n exportData: \"ส่งออก JSON\",\n importData: \"นำเข้า JSON\",\n importMode: \"โหมดนำเข้า\",\n merge: \"รวม\",\n replace: \"แทนที่\",\n importedCount: \"รายการนำเข้าแล้ว\",\n failedCount: \"รายการล้มเหลว\",\n storageQuotaError: \"พื้นที่จัดเก็บเต็ม โปรดเพิ่มพื้นที่แล้วลองอีกครั้ง\",\n statusExpired: \"หมดอายุ\",\n statusRemoved: \"นำออกแล้ว\",\n statusDeleted: \"ลบแล้ว\",\n statusPrivate: \"เป็นส่วนตัว\",\n statusUnknown: \"ไม่พร้อมใช้งาน\",\n retry: \"ลองใหม่\",\n removeFromList: \"ลบออกจากรายการ\",\n pruneStale: \"ลบรายการที่ใช้งานไม่ได้\",\n retrySync: \"ลองซิงค์ใหม่\",\n resolveSync: \"แก้ไขข้อขัดแย้ง\",\n keepLocal: \"ใช้เวอร์ชันในเครื่อง\",\n useServer: \"ใช้เวอร์ชันเซิร์ฟเวอร์\",\n manualMerge: \"รวมด้วยตนเอง\",\n close: \"ปิด\",\n backupRecovery: \"กู้คืนจากข้อมูลสำรอง\",\n backupRecoveryDescription: \"หากข้อมูลซิงค์ในเครื่องเสียหาย ให้กู้คืนจากข้อมูลสำรอง JSON ที่ใช้งานได้\",\n syncPending: \"มีการเปลี่ยนแปลงที่รอการซิงค์\",\n syncSynced: \"ซิงค์การเปลี่ยนแปลงทั้งหมดแล้ว\",\n syncConflict: \"มีการเปลี่ยนแปลงที่ต้องแก้ไขข้อขัดแย้ง\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const VI_LABELS: KeepUiLocaleLabels = {\n save: \"Lưu\",\n saved: \"Đã lưu\",\n remove: \"Xóa\",\n loading: \"Đang tải…\",\n saving: \"Đang lưu…\",\n syncing: \"Đang đồng bộ…\",\n error: \"Đã xảy ra lỗi.\",\n allTags: \"Tất cả\",\n tags: \"Thẻ\",\n filterTags: \"Lọc mục đã lưu theo thẻ\",\n note: \"Ghi chú\",\n saveNote: \"Lưu ghi chú\",\n noItems: \"Chưa có mục nào được lưu.\",\n loadingItems: \"Đang tải các mục đã lưu…\",\n errorItems: \"Không thể tải các mục đã lưu.\",\n search: \"Tìm kiếm mục đã lưu\",\n sort: \"Sắp xếp mục đã lưu\",\n newest: \"Mới nhất trước\",\n oldest: \"Cũ nhất trước\",\n savedNewest: \"Lưu gần đây nhất trước\",\n savedOldest: \"Lưu lâu nhất trước\",\n updatedNewest: \"Cập nhật gần đây nhất trước\",\n updatedOldest: \"Cập nhật lâu nhất trước\",\n previousPage: \"Trang trước\",\n nextPage: \"Trang sau\",\n pagination: \"Phân trang\",\n page: \"Trang\",\n selectItems: \"Chọn mục đã lưu\",\n selectedCount: \"đã chọn\",\n deleteSelected: \"Xóa mục đã chọn\",\n tagsToApply: \"Thẻ cần áp dụng\",\n applyTags: \"Áp dụng thẻ\",\n savedMessage: \"Đã lưu mục.\",\n removedMessage: \"Đã xóa mục.\",\n undo: \"Hoàn tác\",\n undoAvailable: \"Đã xóa mục. Hoàn tác?\",\n selectionScope: \"Phạm vi lựa chọn\",\n currentPage: \"Trang hiện tại\",\n searchResults: \"Kết quả tìm kiếm hiện tại\",\n allItems: \"Tất cả mục đã lưu\",\n localVersion: \"Cục bộ\",\n remoteVersion: \"Máy chủ\",\n updatedAt: \"Đã cập nhật\",\n statusAvailable: \"Khả dụng\",\n noteSavedMessage: \"Đã lưu ghi chú.\",\n exportData: \"Xuất JSON\",\n importData: \"Nhập JSON\",\n importMode: \"Chế độ nhập\",\n merge: \"Hợp nhất\",\n replace: \"Thay thế\",\n importedCount: \"mục đã nhập\",\n failedCount: \"mục bị lỗi\",\n storageQuotaError: \"Bộ nhớ đã đầy. Hãy giải phóng dung lượng rồi thử lại.\",\n statusExpired: \"Đã hết hạn\",\n statusRemoved: \"Đã gỡ\",\n statusDeleted: \"Đã xóa\",\n statusPrivate: \"Riêng tư\",\n statusUnknown: \"Không khả dụng\",\n retry: \"Thử lại\",\n removeFromList: \"Xóa khỏi danh sách\",\n pruneStale: \"Xóa các mục không khả dụng\",\n retrySync: \"Thử đồng bộ lại\",\n resolveSync: \"Giải quyết xung đột\",\n keepLocal: \"Giữ bản cục bộ\",\n useServer: \"Dùng bản máy chủ\",\n manualMerge: \"Gộp thủ công\",\n close: \"Đóng\",\n backupRecovery: \"Khôi phục từ bản sao lưu\",\n backupRecoveryDescription: \"Nếu dữ liệu đồng bộ cục bộ bị hỏng, hãy khôi phục bản sao lưu JSON hợp lệ.\",\n syncPending: \"Có thay đổi đang chờ đồng bộ.\",\n syncSynced: \"Tất cả thay đổi đã được đồng bộ.\",\n syncConflict: \"Một số thay đổi cần giải quyết xung đột.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const ZH_HANS_LABELS: KeepUiLocaleLabels = {\n save: \"保存\",\n saved: \"已保存\",\n remove: \"删除\",\n loading: \"加载中…\",\n saving: \"保存中…\",\n syncing: \"同步中…\",\n error: \"发生错误。\",\n allTags: \"全部\",\n tags: \"标签\",\n filterTags: \"按标签筛选已保存项目\",\n note: \"备注\",\n saveNote: \"保存备注\",\n noItems: \"没有已保存的项目。\",\n loadingItems: \"正在加载已保存项目…\",\n errorItems: \"无法加载已保存项目。\",\n search: \"搜索已保存项目\",\n sort: \"排序已保存项目\",\n newest: \"最新优先\",\n oldest: \"最早优先\",\n savedNewest: \"保存时间最新优先\",\n savedOldest: \"保存时间最早优先\",\n updatedNewest: \"更新时间最新优先\",\n updatedOldest: \"更新时间最早优先\",\n previousPage: \"上一页\",\n nextPage: \"下一页\",\n pagination: \"分页\",\n page: \"页\",\n selectItems: \"选择已保存项目\",\n selectedCount: \"项已选择\",\n deleteSelected: \"删除所选项目\",\n tagsToApply: \"要应用的标签\",\n applyTags: \"应用标签\",\n savedMessage: \"项目已保存。\",\n removedMessage: \"项目已删除。\",\n undo: \"撤销\",\n undoAvailable: \"项目已删除。要撤销吗?\",\n selectionScope: \"选择范围\",\n currentPage: \"当前页\",\n searchResults: \"当前全部搜索结果\",\n allItems: \"全部已保存项目\",\n localVersion: \"本地\",\n remoteVersion: \"远程\",\n updatedAt: \"更新时间\",\n statusAvailable: \"可用\",\n noteSavedMessage: \"备注已保存。\",\n exportData: \"导出JSON\",\n importData: \"导入JSON\",\n importMode: \"导入方式\",\n merge: \"合并\",\n replace: \"替换\",\n importedCount: \"项已导入\",\n failedCount: \"项失败\",\n storageQuotaError: \"存储空间已满。请释放空间后重试。\",\n statusExpired: \"已过期\",\n statusRemoved: \"已移除\",\n statusDeleted: \"已删除\",\n statusPrivate: \"不公开\",\n statusUnknown: \"不可用\",\n retry: \"重试\",\n removeFromList: \"从列表中删除\",\n pruneStale: \"删除不可用项目\",\n retrySync: \"重试同步\",\n resolveSync: \"解决冲突\",\n keepLocal: \"保留本地版本\",\n useServer: \"使用服务器版本\",\n manualMerge: \"手动合并\",\n close: \"关闭\",\n backupRecovery: \"从备份恢复\",\n backupRecoveryDescription: \"如果本地同步数据损坏,请恢复可用的 JSON 备份。\",\n syncPending: \"有更改等待同步。\",\n syncSynced: \"所有更改均已同步。\",\n syncConflict: \"有些更改需要解决冲突。\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const ZH_HANT_LABELS: KeepUiLocaleLabels = {\n save: \"儲存\",\n saved: \"已儲存\",\n remove: \"刪除\",\n loading: \"載入中…\",\n saving: \"儲存中…\",\n syncing: \"同步中…\",\n error: \"發生錯誤。\",\n allTags: \"全部\",\n tags: \"標籤\",\n filterTags: \"依標籤篩選已儲存項目\",\n note: \"備註\",\n saveNote: \"儲存備註\",\n noItems: \"沒有已儲存的項目。\",\n loadingItems: \"正在載入已儲存項目…\",\n errorItems: \"無法載入已儲存項目。\",\n search: \"搜尋已儲存項目\",\n sort: \"排序已儲存項目\",\n newest: \"最新優先\",\n oldest: \"最早優先\",\n savedNewest: \"儲存時間最新優先\",\n savedOldest: \"儲存時間最早優先\",\n updatedNewest: \"更新時間最新優先\",\n updatedOldest: \"更新時間最早優先\",\n previousPage: \"上一頁\",\n nextPage: \"下一頁\",\n pagination: \"分頁\",\n page: \"頁\",\n selectItems: \"選取已儲存項目\",\n selectedCount: \"項已選取\",\n deleteSelected: \"刪除所選項目\",\n tagsToApply: \"要套用的標籤\",\n applyTags: \"套用標籤\",\n savedMessage: \"項目已儲存。\",\n removedMessage: \"項目已刪除。\",\n undo: \"復原\",\n undoAvailable: \"項目已刪除。要復原嗎?\",\n selectionScope: \"選取範圍\",\n currentPage: \"目前頁面\",\n searchResults: \"目前全部搜尋結果\",\n allItems: \"所有已儲存項目\",\n localVersion: \"本機\",\n remoteVersion: \"遠端\",\n updatedAt: \"更新時間\",\n statusAvailable: \"可用\",\n noteSavedMessage: \"備註已儲存。\",\n exportData: \"匯出JSON\",\n importData: \"匯入JSON\",\n importMode: \"匯入方式\",\n merge: \"合併\",\n replace: \"取代\",\n importedCount: \"項已匯入\",\n failedCount: \"項失敗\",\n storageQuotaError: \"儲存空間已滿。請釋放空間後重試。\",\n statusExpired: \"已過期\",\n statusRemoved: \"已移除\",\n statusDeleted: \"已刪除\",\n statusPrivate: \"不公開\",\n statusUnknown: \"無法使用\",\n retry: \"重試\",\n removeFromList: \"從清單中刪除\",\n pruneStale: \"刪除無法使用的項目\",\n retrySync: \"重試同步\",\n resolveSync: \"解決衝突\",\n keepLocal: \"保留本機版本\",\n useServer: \"使用伺服器版本\",\n manualMerge: \"手動合併\",\n close: \"關閉\",\n backupRecovery: \"從備份還原\",\n backupRecoveryDescription: \"如果本機同步資料損毀,請還原可用的 JSON 備份。\",\n syncPending: \"有變更等待同步。\",\n syncSynced: \"所有變更都已同步。\",\n syncConflict: \"有些變更需要解決衝突。\",\n};\n","import { DE_LABELS } from \"./de\";\nimport { EN_LABELS } from \"./en\";\nimport { ES_LABELS } from \"./es\";\nimport { FIL_LABELS } from \"./fil\";\nimport { FR_LABELS } from \"./fr\";\nimport { ID_LABELS } from \"./id\";\nimport { IT_LABELS } from \"./it\";\nimport { JA_LABELS } from \"./ja\";\nimport { KO_LABELS } from \"./ko\";\nimport { MS_LABELS } from \"./ms\";\nimport { PT_BR_LABELS } from \"./pt-BR\";\nimport { RU_LABELS } from \"./ru\";\nimport { TH_LABELS } from \"./th\";\nimport type { KeepUiLocaleLabels } from \"./types\";\nimport { VI_LABELS } from \"./vi\";\nimport { ZH_HANS_LABELS } from \"./zh-Hans\";\nimport { ZH_HANT_LABELS } from \"./zh-Hant\";\n\nexport const KEEP_BUILT_IN_LOCALES = [\n \"en\",\n \"ja\",\n \"ko\",\n \"zh-Hans\",\n \"zh-Hant\",\n \"th\",\n \"fr\",\n \"es\",\n \"pt-BR\",\n \"it\",\n \"de\",\n \"ru\",\n \"fil\",\n \"vi\",\n \"id\",\n \"ms\",\n] as const;\n\nexport type KeepUiLocale = (typeof KEEP_BUILT_IN_LOCALES)[number];\n\nexport const KEEP_LOCALE_LABELS: Record<KeepUiLocale, KeepUiLocaleLabels> = {\n en: EN_LABELS,\n ja: JA_LABELS,\n ko: KO_LABELS,\n \"zh-Hans\": ZH_HANS_LABELS,\n \"zh-Hant\": ZH_HANT_LABELS,\n th: TH_LABELS,\n fr: FR_LABELS,\n es: ES_LABELS,\n \"pt-BR\": PT_BR_LABELS,\n it: IT_LABELS,\n de: DE_LABELS,\n ru: RU_LABELS,\n fil: FIL_LABELS,\n vi: VI_LABELS,\n id: ID_LABELS,\n ms: MS_LABELS,\n};\n\nconst LOCALE_ALIASES: Record<string, KeepUiLocale> = {\n \"zh-cn\": \"zh-Hans\",\n \"zh-sg\": \"zh-Hans\",\n zh: \"zh-Hans\",\n \"zh-tw\": \"zh-Hant\",\n \"zh-hk\": \"zh-Hant\",\n \"zh-mo\": \"zh-Hant\",\n \"pt-pt\": \"pt-BR\",\n};\n\nexport function normalizeKeepLocale(locale?: string): KeepUiLocale {\n const normalized = locale?.trim().replace(/_/g, \"-\").toLowerCase() ?? \"en\";\n const exact = KEEP_BUILT_IN_LOCALES.find((candidate) => candidate.toLowerCase() === normalized);\n if (exact) return exact;\n if (LOCALE_ALIASES[normalized]) return LOCALE_ALIASES[normalized];\n const language = normalized.split(\"-\")[0];\n const languageMatch = KEEP_BUILT_IN_LOCALES.find((candidate) => candidate.toLowerCase() === language);\n return languageMatch ?? \"en\";\n}\n\nexport function getKeepLocaleLabels(locale?: string): KeepUiLocaleLabels {\n return { ...KEEP_LOCALE_LABELS[normalizeKeepLocale(locale)] };\n}\n","\"use client\";\n\nimport type { KeepItem, KeepListQuery } from \"@keepkit/core/core\";\nimport { useKeepList } from \"@keepkit/core/react\";\nimport { type HTMLAttributes, type ReactNode, useState } from \"react\";\nimport { KeepItemCheckbox } from \"./KeepItemCheckbox\";\nimport { getMetaTitle, normalizeUiTags, type RenderProp } from \"./shared\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepBulkActionsState<TMeta = Record<string, unknown>> = {\n items: KeepItem<TMeta>[];\n selectedIds: string[];\n selectedCount: number;\n isAllSelected: boolean;\n allSelected: boolean;\n tagsInput: string;\n setTagsInput: (value: string) => void;\n toggle: (id: string) => void;\n toggleSelectAll: () => void;\n toggleAll: () => void;\n remove: () => Promise<void>;\n updateTags: () => Promise<void>;\n isMutating: boolean;\n selectionScope: KeepSelectionScope;\n setSelectionScope: (scope: KeepSelectionScope) => void;\n};\n\nexport type KeepSelectionScope = \"page\" | \"query\" | \"all\";\n\n/** Returns whether every visible item is selected. Empty lists are never all selected. */\nexport function isAllSelected<TMeta>(\n items: readonly Pick<KeepItem<TMeta>, \"id\">[],\n selectedIds: readonly string[],\n): boolean {\n if (items.length === 0) return false;\n const selected = new Set(selectedIds);\n return items.every((item) => selected.has(item.id));\n}\n\n/** Toggles only the visible items, preserving selections outside the current query or page. */\nexport function toggleSelectAll<TMeta>(\n items: readonly Pick<KeepItem<TMeta>, \"id\">[],\n selectedIds: readonly string[],\n): string[] {\n const visibleIds = new Set(items.map((item) => item.id));\n if (isAllSelected(items, selectedIds)) return selectedIds.filter((id) => !visibleIds.has(id));\n const nextIds = [...selectedIds];\n for (const item of items) {\n if (!nextIds.includes(item.id)) nextIds.push(item.id);\n }\n return nextIds;\n}\n\nexport type KeepBulkActionsProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n query?: KeepListQuery<TMeta>;\n selectedIds?: string[];\n defaultSelectedIds?: string[];\n onSelectedIdsChange?: (ids: string[]) => void;\n renderItem?: (item: KeepItem<TMeta>, selected: boolean) => ReactNode;\n onCompleted?: (action: \"remove\" | \"tags\", ids: string[]) => void;\n selectionScope?: KeepSelectionScope;\n onSelectionScopeChange?: (scope: KeepSelectionScope) => void;\n render?: RenderProp<KeepBulkActionsState<TMeta>>;\n children?: ReactNode | RenderProp<KeepBulkActionsState<TMeta>>;\n};\n\n/** Selects visible items and performs one storage operation for the whole selection. */\nexport function KeepBulkActions<TMeta = Record<string, unknown>>({\n query,\n selectedIds: controlledSelectedIds,\n defaultSelectedIds = [],\n onSelectedIdsChange,\n renderItem,\n onCompleted,\n selectionScope: controlledScope,\n onSelectionScopeChange,\n render,\n children,\n ...props\n}: KeepBulkActionsProps<TMeta>) {\n const selectItemsLabel = useUiLabel(\"selectItems\");\n const selectedCountLabel = useUiLabel(\"selectedCount\");\n const deleteSelectedLabel = useUiLabel(\"deleteSelected\");\n const tagsLabel = useUiLabel(\"tagsToApply\");\n const applyTagsLabel = useUiLabel(\"applyTags\");\n const selectionScopeLabel = useUiLabel(\"selectionScope\");\n const currentPageLabel = useUiLabel(\"currentPage\");\n const searchResultsLabel = useUiLabel(\"searchResults\");\n const allItemsLabel = useUiLabel(\"allItems\");\n const list = useKeepList<TMeta>(query);\n const queryList = useKeepList<TMeta>(query ? { ...query, pagination: undefined } : { pagination: undefined });\n const allList = useKeepList<TMeta>({ pagination: undefined });\n const [uncontrolledScope, setUncontrolledScope] = useState<KeepSelectionScope>(controlledScope ?? \"page\");\n const selectionScope = controlledScope ?? uncontrolledScope;\n const setSelectionScope = (scope: KeepSelectionScope) => {\n if (controlledScope === undefined) setUncontrolledScope(scope);\n onSelectionScopeChange?.(scope);\n };\n const targetItems =\n selectionScope === \"page\" ? list.items : selectionScope === \"query\" ? queryList.items : allList.items;\n const [uncontrolledSelectedIds, setUncontrolledSelectedIds] = useState(defaultSelectedIds);\n const selectedIds = controlledSelectedIds ?? uncontrolledSelectedIds;\n const selected = new Set(selectedIds);\n const [tagsInput, setTagsInput] = useState(\"\");\n const setSelectedIds = (ids: string[]) => {\n if (controlledSelectedIds === undefined) setUncontrolledSelectedIds(ids);\n onSelectedIdsChange?.(ids);\n };\n const toggle = (id: string) =>\n setSelectedIds(selected.has(id) ? selectedIds.filter((current) => current !== id) : [...selectedIds, id]);\n const allSelected = isAllSelected(targetItems, selectedIds);\n const toggleAll = () => setSelectedIds(toggleSelectAll(targetItems, selectedIds));\n const remove = async () => {\n const ids = [...selectedIds];\n await list.removeBatchWithUndo(ids);\n onCompleted?.(\"remove\", ids);\n setSelectedIds([]);\n };\n const updateTags = async () => {\n const ids = [...selectedIds];\n await list.updateTagsBatch(ids, normalizeUiTags(tagsInput.split(\",\")));\n onCompleted?.(\"tags\", ids);\n setSelectedIds([]);\n };\n const state: KeepBulkActionsState<TMeta> = {\n items: targetItems,\n selectedIds,\n selectedCount: selectedIds.length,\n isAllSelected: allSelected,\n allSelected,\n tagsInput,\n setTagsInput,\n toggle,\n toggleSelectAll: toggleAll,\n toggleAll,\n remove,\n updateTags,\n isMutating: list.isMutating,\n selectionScope,\n setSelectionScope,\n };\n const body = render\n ? render(state)\n : typeof children === \"function\"\n ? children(state)\n : (children ?? (\n <>\n <fieldset>\n <legend>{selectItemsLabel}</legend>\n <label>\n {selectionScopeLabel}\n <select\n value={selectionScope}\n onChange={(event) => setSelectionScope(event.currentTarget.value as KeepSelectionScope)}\n >\n <option value=\"page\">{currentPageLabel}</option>\n <option value=\"query\">{searchResultsLabel}</option>\n <option value=\"all\">{allItemsLabel}</option>\n </select>\n </label>\n <label>\n <input type=\"checkbox\" checked={allSelected} onChange={toggleAll} aria-label={selectItemsLabel} />\n {selectedIds.length} {selectedCountLabel}\n </label>\n {targetItems.map((item) => (\n <span key={item.id}>\n <KeepItemCheckbox\n item={item}\n checked={selected.has(item.id)}\n onCheckedChange={() => toggle(item.id)}\n />\n {renderItem ? renderItem(item, selected.has(item.id)) : (getMetaTitle(item.meta) ?? item.id)}\n </span>\n ))}\n </fieldset>\n <button type=\"button\" onClick={() => void remove()} disabled={selectedIds.length === 0 || list.isMutating}>\n {deleteSelectedLabel}\n </button>\n <label>\n {tagsLabel}\n <input value={tagsInput} onChange={(event) => setTagsInput(event.currentTarget.value)} />\n </label>\n <button\n type=\"button\"\n onClick={() => void updateTags()}\n disabled={selectedIds.length === 0 || list.isMutating}\n >\n {applyTagsLabel}\n </button>\n </>\n ));\n return (\n <section\n {...props}\n data-keepkit=\"bulk-actions\"\n aria-busy={list.isMutating || props[\"aria-busy\"]}\n data-state={selectedIds.length > 0 ? \"selected\" : \"idle\"}\n data-loading={list.isLoading || list.isMutating ? \"true\" : undefined}\n >\n {body}\n </section>\n );\n}\n","\"use client\";\n\nimport type { KeepItem } from \"@keepkit/core/core\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\n\nexport type KeepItemCheckboxProps<TMeta = Record<string, unknown>> = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"checked\" | \"defaultChecked\" | \"onChange\"\n> & {\n item: KeepItem<TMeta>;\n checked?: boolean;\n label?: ReactNode;\n onCheckedChange?: (checked: boolean) => void;\n};\n\n/** A reusable accessible selection checkbox for a saved item. */\nexport function KeepItemCheckbox<TMeta = Record<string, unknown>>({\n item,\n checked = false,\n label,\n onCheckedChange,\n \"aria-label\": ariaLabel,\n ...props\n}: KeepItemCheckboxProps<TMeta>) {\n const itemLabel = getItemLabel(item) ?? item.id;\n const accessibleLabel = ariaLabel ?? (typeof label === \"string\" ? label : itemLabel);\n return (\n <input\n {...props}\n type=\"checkbox\"\n checked={checked}\n data-keepkit=\"item-checkbox\"\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={props.disabled ? \"true\" : undefined}\n aria-label={accessibleLabel}\n onChange={(event) => onCheckedChange?.(event.currentTarget.checked)}\n />\n );\n}\n\nfunction getItemLabel<TMeta>(item: KeepItem<TMeta>): string | undefined {\n if (typeof item.meta !== \"object\" || item.meta === null || !(\"title\" in item.meta)) return undefined;\n const title = (item.meta as { title?: unknown }).title;\n return typeof title === \"string\" && title.trim() ? title.trim() : undefined;\n}\n","\"use client\";\n\nimport type { KeepItem, KeepItemInput, KeepListQuery } from \"@keepkit/core/core\";\nimport {\n type ComponentType,\n cloneElement,\n type HTMLAttributes,\n type ImgHTMLAttributes,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\nexport type RenderProp<TState> = (state: TState) => ReactNode;\n\nexport type KeepButtonLabels = {\n saved?: ReactNode;\n unsaved?: ReactNode;\n loading?: ReactNode;\n error?: ReactNode;\n savedAriaLabel?: string;\n unsavedAriaLabel?: string;\n};\n\nexport type KeepButtonIconProps = { \"aria-hidden\"?: boolean; className?: string };\nexport type KeepButtonIcon = ReactNode | ComponentType<KeepButtonIconProps>;\nexport type KeepButtonIcons = {\n save?: KeepButtonIcon;\n saved?: KeepButtonIcon;\n remove?: KeepButtonIcon;\n loading?: KeepButtonIcon;\n error?: KeepButtonIcon;\n};\n\nexport type KeepImageProps = ImgHTMLAttributes<HTMLImageElement> & {\n src: string;\n alt: string;\n};\n\nexport function toKeepButtonItem<TMeta>(item: KeepItem<TMeta>): KeepItemInput<TMeta> {\n return {\n id: item.id,\n meta: item.meta,\n targetType: item.targetType,\n note: item.note,\n tags: item.tags,\n };\n}\n\nexport function getMetaTitle<TMeta>(meta: TMeta): string | undefined {\n if (typeof meta !== \"object\" || meta === null || !(\"title\" in meta)) return undefined;\n const title = (meta as { title?: unknown }).title;\n return typeof title === \"string\" && title.trim() ? title.trim() : undefined;\n}\n\nexport function normalizeUiTags(tags: string[]): string[] {\n return [...new Set(tags.map((tag) => tag.trim()).filter(Boolean))];\n}\n\nexport function sortToValue(sort: KeepListQuery[\"sort\"]): `${\"savedAt\" | \"updatedAt\"}:${\"asc\" | \"desc\"}` {\n return `${sort?.by ?? \"updatedAt\"}:${sort?.direction ?? \"desc\"}`;\n}\n\nexport function resolveContent<TState>(content: ReactNode | RenderProp<TState>, state: TState): ReactNode {\n return typeof content === \"function\" ? content(state) : content;\n}\n\nexport function renderRoot(\n asChild: boolean,\n child: ReactNode,\n props: HTMLAttributes<HTMLElement> & Record<string, unknown>,\n body: ReactNode,\n componentName: string,\n): ReactElement {\n if (asChild) {\n if (!isValidElement(child)) throw new Error(`${componentName} with asChild requires a single React element child.`);\n return cloneElement(child as ReactElement<Record<string, unknown>>, { ...props, children: body });\n }\n return <div {...props}>{body}</div>;\n}\n","\"use client\";\n\nimport {\n KeepButton as CoreKeepButton,\n type KeepButtonProps as CoreKeepButtonProps,\n type KeepButtonState,\n useKeepItem,\n} from \"@keepkit/core/react\";\nimport { createElement, type ReactNode } from \"react\";\nimport type { KeepButtonIcon, KeepButtonIcons, KeepButtonLabels } from \"./shared\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type { KeepButtonIcon, KeepButtonIconProps, KeepButtonIcons, KeepButtonLabels } from \"./shared\";\n\nexport type KeepButtonProps<TMeta = Record<string, unknown>> = CoreKeepButtonProps<TMeta> & {\n labels?: KeepButtonLabels;\n icons?: KeepButtonIcons;\n iconOnly?: boolean;\n showLabel?: boolean;\n iconClassName?: string;\n};\n\n/** A style-free save toggle with localized labels and the core button's ARIA/asChild behavior. */\nexport function KeepButton<TMeta = Record<string, unknown>>({\n labels,\n icons,\n iconOnly = false,\n showLabel = true,\n iconClassName,\n ...props\n}: KeepButtonProps<TMeta>) {\n const saveLabel = useUiLabel(\"save\", typeof labels?.unsaved === \"string\" ? labels.unsaved : undefined);\n const savedLabel = useUiLabel(\"saved\", typeof labels?.saved === \"string\" ? labels.saved : undefined);\n const loadingLabel = useUiLabel(\"loading\", typeof labels?.loading === \"string\" ? labels.loading : undefined);\n const errorLabel = useUiLabel(\"error\", typeof labels?.error === \"string\" ? labels.error : undefined);\n const buttonState = useKeepItem<TMeta>(props.item);\n const customStateLabel =\n labels?.loading !== undefined ||\n labels?.error !== undefined ||\n (icons !== undefined && props.children === undefined);\n const getStateContent = (state: KeepButtonState<TMeta>): ReactNode => {\n if (typeof props.children === \"function\") return props.children(state);\n if (props.children !== undefined) return props.children;\n const label = state.error\n ? (labels?.error ?? errorLabel)\n : state.isMutating\n ? (labels?.loading ?? loadingLabel)\n : state.isSaved\n ? (labels?.saved ?? savedLabel)\n : (labels?.unsaved ?? saveLabel);\n if (!icons) return label;\n const icon = state.error\n ? icons.error\n : state.isMutating\n ? icons.loading\n : state.isSaved\n ? (icons.remove ?? icons.saved)\n : icons.save;\n return (\n <>\n {renderIcon(icon, iconClassName)}\n {showLabel && !iconOnly ? label : null}\n </>\n );\n };\n const sharedProps = {\n ...props,\n \"data-keepkit\": \"button\",\n \"data-icon-only\": iconOnly ? \"true\" : undefined,\n \"aria-busy\": props[\"aria-busy\"] ?? (buttonState.isLoading || buttonState.isMutating),\n savedLabel: labels?.saved ?? props.savedLabel ?? savedLabel,\n unsavedLabel: labels?.unsaved ?? props.unsavedLabel ?? saveLabel,\n savedAriaLabel: labels?.savedAriaLabel ?? props.savedAriaLabel,\n unsavedAriaLabel: labels?.unsavedAriaLabel ?? props.unsavedAriaLabel,\n };\n if (!customStateLabel) return <CoreKeepButton<TMeta> {...sharedProps} />;\n return (\n <CoreKeepButton<TMeta> {...sharedProps}>\n {(state: KeepButtonState<TMeta>) => <>{getStateContent(state)}</>}\n </CoreKeepButton>\n );\n}\n\nfunction renderIcon(icon: KeepButtonIcon | undefined, className?: string): ReactNode {\n if (typeof icon === \"function\") return createElement(icon, { \"aria-hidden\": true, className });\n return icon ?? null;\n}\n","\"use client\";\n\nimport type { KeepItem, KeepListQuery, KeepUrlSyncOptions } from \"@keepkit/core/core\";\nimport { KeepErrorBoundary, type KeepErrorBoundaryProps, useKeepList } from \"@keepkit/core/react\";\nimport { type HTMLAttributes, type ReactNode, useMemo, useState } from \"react\";\nimport { KeepBulkActions } from \"./KeepBulkActions\";\nimport type { KeepItemCardProps } from \"./KeepItemCard\";\nimport { KeepList, type KeepListState } from \"./KeepList\";\nimport { KeepTagFilter } from \"./KeepTagFilter\";\nimport { KeepPagination, KeepSearchInput, KeepSortSelect } from \"./query-controls\";\nimport { type RenderProp, sortToValue } from \"./shared\";\nimport { type KeepUrlAdapter, useKeepUrlSync } from \"./url-sync\";\n\nexport type KeepCollectionFeature = \"search\" | \"sort\" | \"pagination\" | \"tagFilter\" | \"bulkActions\";\nexport type KeepLayoutPreset = \"list\" | \"grid\" | \"compact\";\n\nexport type KeepCollectionProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n query?: KeepListQuery<TMeta>;\n pageSize?: number;\n layout?: KeepLayoutPreset;\n urlSync?: boolean | KeepUrlSyncOptions;\n urlAdapter?: KeepUrlAdapter;\n features?: Partial<Record<KeepCollectionFeature, boolean>>;\n renderItem?: (item: KeepItem<TMeta>, state: KeepListState<TMeta>) => ReactNode;\n itemCardProps?: Omit<KeepItemCardProps<TMeta>, \"item\" | \"children\" | \"render\">;\n loading?: ReactNode | RenderProp<KeepListState<TMeta>>;\n empty?: ReactNode | RenderProp<KeepListState<TMeta>>;\n error?: ReactNode | RenderProp<KeepListState<TMeta>>;\n fallback?: KeepErrorBoundaryProps[\"fallback\"];\n onBoundaryError?: KeepErrorBoundaryProps[\"onError\"];\n boundaryResetKey?: unknown;\n};\n\n/** A batteries-included collection with query controls and accessible status feedback. */\nexport function KeepCollection<TMeta = Record<string, unknown>>(props: KeepCollectionProps<TMeta>) {\n const { fallback, onBoundaryError, boundaryResetKey, ...collectionProps } = props;\n const content = <KeepCollectionContent<TMeta> {...collectionProps} />;\n if (fallback === undefined && onBoundaryError === undefined) return content;\n return (\n <KeepErrorBoundary fallback={fallback} onError={onBoundaryError} resetKey={boundaryResetKey}>\n {content}\n </KeepErrorBoundary>\n );\n}\n\nfunction KeepCollectionContent<TMeta = Record<string, unknown>>({\n query = {},\n pageSize = 20,\n layout = \"list\",\n urlSync = false,\n urlAdapter,\n features,\n renderItem,\n itemCardProps,\n loading,\n empty,\n error,\n className,\n ...rootProps\n}: Omit<KeepCollectionProps<TMeta>, \"fallback\" | \"onBoundaryError\" | \"boundaryResetKey\">) {\n const enabled = {\n search: true,\n sort: true,\n pagination: true,\n tagFilter: false,\n bulkActions: false,\n ...features,\n };\n const [searchValue, setSearchValue] = useState(query.search?.query ?? \"\");\n const [sort, setSort] = useState(query.sort ?? { by: \"updatedAt\" as const, direction: \"desc\" as const });\n const [tag, setTag] = useState<string | undefined>(query.tags?.[0]);\n const [page, setPage] = useState(query.pagination?.page ?? 1);\n const resolvedPageSize = query.pagination?.pageSize ?? pageSize;\n const resolvedQuery = useMemo<KeepListQuery<TMeta>>(\n () => ({\n ...query,\n search: enabled.search ? { ...query.search, query: searchValue } : query.search,\n sort: enabled.sort ? sort : query.sort,\n tags: tag ? [...new Set([...(query.tags ?? []), tag])] : query.tags,\n pagination: enabled.pagination ? { ...query.pagination, page, pageSize: resolvedPageSize } : query.pagination,\n }),\n [enabled.pagination, enabled.search, enabled.sort, page, query, resolvedPageSize, searchValue, sort, tag],\n );\n useKeepUrlSync({\n enabled: Boolean(urlSync),\n query: resolvedQuery,\n onQueryChange: (nextOrUpdater) => {\n const next = typeof nextOrUpdater === \"function\" ? nextOrUpdater(resolvedQuery) : nextOrUpdater;\n setSearchValue(next.search?.query ?? \"\");\n setSort(next.sort ?? { by: \"updatedAt\", direction: \"desc\" });\n setTag(next.tags?.[0]);\n setPage(next.pagination?.page ?? 1);\n },\n options: typeof urlSync === \"object\" ? urlSync : {},\n adapter: urlAdapter,\n });\n const list = useKeepList<TMeta>(resolvedQuery);\n\n return (\n <section\n {...rootProps}\n className={className}\n data-keepkit=\"collection\"\n data-layout={layout}\n aria-busy={list.isLoading || list.isMutating || rootProps[\"aria-busy\"]}\n data-state={getCollectionState(list)}\n data-loading={list.isLoading || list.isMutating ? \"true\" : undefined}\n >\n <div>\n {enabled.search ? (\n <KeepSearchInput\n value={searchValue}\n onValueChange={(value) => {\n setSearchValue(value);\n setPage(1);\n }}\n />\n ) : null}\n {enabled.sort ? (\n <KeepSortSelect\n value={sortToValue(sort)}\n onValueChange={(_value, nextSort) => {\n setSort(nextSort);\n setPage(1);\n }}\n />\n ) : null}\n {enabled.tagFilter ? (\n <KeepTagFilter<TMeta>\n query={query}\n value={tag}\n onValueChange={(value) => {\n setTag(value);\n setPage(1);\n }}\n />\n ) : null}\n </div>\n <KeepList<TMeta>\n query={resolvedQuery}\n renderItem={renderItem}\n itemCardProps={itemCardProps}\n layout={layout}\n loading={loading}\n empty={empty}\n error={error}\n />\n {enabled.pagination ? (\n <KeepPagination\n totalCount={list.totalCount}\n pageSize={resolvedPageSize}\n page={list.page}\n onPageChange={(nextPage) => setPage(nextPage)}\n />\n ) : null}\n {enabled.bulkActions ? <KeepBulkActions<TMeta> query={resolvedQuery} /> : null}\n </section>\n );\n}\n\nfunction getCollectionState<TMeta>(list: KeepListState<TMeta>): \"loading\" | \"error\" | \"empty\" | \"ready\" {\n if (list.error && list.items.length === 0) return \"error\";\n if (list.isLoading && !list.isHydrated) return \"loading\";\n if (list.isHydrated && list.items.length === 0) return \"empty\";\n return \"ready\";\n}\n","\"use client\";\n\nimport type { KeepItem, KeepListQuery } from \"@keepkit/core/core\";\nimport {\n KeepErrorBoundary,\n type KeepErrorBoundaryProps,\n type UseKeepListResult,\n useKeepList,\n} from \"@keepkit/core/react\";\nimport { type HTMLAttributes, isValidElement, type ReactNode } from \"react\";\nimport type { KeepLayoutPreset } from \"./KeepCollection\";\nimport { KeepItemCard, type KeepItemCardProps } from \"./KeepItemCard\";\nimport { type RenderProp, renderRoot, resolveContent } from \"./shared\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepListState<TMeta = Record<string, unknown>> = UseKeepListResult<TMeta>;\n\nexport type KeepListProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n query?: KeepListQuery<TMeta>;\n children?: ReactNode | RenderProp<KeepListState<TMeta>>;\n renderItem?: (item: KeepItem<TMeta>, state: KeepListState<TMeta>) => ReactNode;\n loading?: ReactNode | RenderProp<KeepListState<TMeta>>;\n empty?: ReactNode | RenderProp<KeepListState<TMeta>>;\n error?: ReactNode | RenderProp<KeepListState<TMeta>>;\n itemCardProps?: Omit<KeepItemCardProps<TMeta>, \"item\" | \"children\" | \"render\">;\n layout?: KeepLayoutPreset;\n asChild?: boolean;\n fallback?: KeepErrorBoundaryProps[\"fallback\"];\n onBoundaryError?: KeepErrorBoundaryProps[\"onError\"];\n boundaryResetKey?: unknown;\n};\n\n/** A list primitive with built-in loading, empty, error, and removal states. */\nexport function KeepList<TMeta = Record<string, unknown>>(props: KeepListProps<TMeta>) {\n const { fallback, onBoundaryError, boundaryResetKey, ...listProps } = props;\n const content = <KeepListContent<TMeta> {...listProps} />;\n if (fallback === undefined && onBoundaryError === undefined) return content;\n return (\n <KeepErrorBoundary fallback={fallback} onError={onBoundaryError} resetKey={boundaryResetKey}>\n {content}\n </KeepErrorBoundary>\n );\n}\n\nfunction KeepListContent<TMeta = Record<string, unknown>>({\n query,\n children,\n renderItem,\n loading,\n empty,\n error: errorContent,\n itemCardProps,\n layout = \"list\",\n asChild = false,\n className,\n ...rootProps\n}: KeepListProps<TMeta>) {\n const defaultLoading = useUiLabel(\"loadingItems\");\n const defaultEmpty = useUiLabel(\"noItems\");\n const defaultError = useUiLabel(\"errorItems\");\n const state = useKeepList<TMeta>(query);\n const body = getListBody(state, {\n children,\n renderItem,\n loading: loading ?? defaultLoading,\n empty: empty ?? defaultEmpty,\n error: errorContent ?? defaultError,\n itemCardProps,\n layout,\n });\n return renderRoot(\n asChild,\n asChild && isValidElement(children) ? children : undefined,\n {\n ...rootProps,\n className,\n \"data-keepkit\": \"list\",\n \"data-layout\": layout,\n \"aria-busy\": state.isLoading || rootProps[\"aria-busy\"],\n \"data-state\": getListState(state),\n \"data-loading\": state.isLoading ? \"true\" : undefined,\n },\n body,\n \"KeepList\",\n );\n}\n\nfunction getListState<TMeta>(state: KeepListState<TMeta>): \"loading\" | \"error\" | \"empty\" | \"ready\" {\n if (state.error && state.items.length === 0) return \"error\";\n if (state.isLoading && !state.isHydrated) return \"loading\";\n if (state.isHydrated && state.items.length === 0) return \"empty\";\n return \"ready\";\n}\n\nfunction getListBody<TMeta>(\n state: KeepListState<TMeta>,\n options: {\n children?: ReactNode | RenderProp<KeepListState<TMeta>>;\n renderItem?: (item: KeepItem<TMeta>, state: KeepListState<TMeta>) => ReactNode;\n loading: ReactNode | RenderProp<KeepListState<TMeta>>;\n empty: ReactNode | RenderProp<KeepListState<TMeta>>;\n error: ReactNode | RenderProp<KeepListState<TMeta>>;\n itemCardProps?: Omit<KeepItemCardProps<TMeta>, \"item\" | \"children\" | \"render\">;\n layout: KeepLayoutPreset;\n },\n): ReactNode {\n if (state.error && state.items.length === 0) return resolveContent(options.error, state);\n if (state.isLoading && !state.isHydrated) return resolveContent(options.loading, state);\n if (state.isHydrated && state.items.length === 0) return resolveContent(options.empty, state);\n if (typeof options.children === \"function\") return options.children(state);\n if (options.children !== undefined && !isValidElement(options.children)) return options.children;\n return (\n <ul data-layout={options.layout}>\n {state.items.map((item) =>\n options.renderItem ? (\n options.renderItem(item, state)\n ) : (\n <li key={item.id}>\n <KeepItemCard item={item} {...options.itemCardProps} />\n </li>\n ),\n )}\n </ul>\n );\n}\n","\"use client\";\n\nimport type { KeepItem } from \"@keepkit/core/core\";\nimport { useKeepItem } from \"@keepkit/core/react\";\nimport {\n type ComponentType,\n type HTMLAttributeAnchorTarget,\n type HTMLAttributes,\n type ImgHTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { KeepButton, type KeepButtonLabels } from \"./KeepButton\";\nimport { KeepStaleNotice } from \"./KeepStaleNotice\";\nimport { getMetaTitle, type RenderProp, renderRoot, toKeepButtonItem } from \"./shared\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepItemCardState<TMeta = Record<string, unknown>> = {\n item: KeepItem<TMeta>;\n isSaved: boolean;\n isMutating: boolean;\n error: unknown | null;\n remove: () => Promise<void>;\n status: KeepItem[\"status\"];\n};\n\nexport type KeepItemCardLinkProps = {\n href: string;\n children?: ReactNode;\n target?: HTMLAttributeAnchorTarget;\n rel?: string;\n onClick?: (event: MouseEvent<HTMLElement>) => void;\n};\n\nexport type KeepImageProps = ImgHTMLAttributes<HTMLImageElement> & {\n src: string;\n alt: string;\n};\n\nexport type KeepItemCardProps<TMeta = Record<string, unknown>> = Omit<\n HTMLAttributes<HTMLElement>,\n \"children\" | \"title\"\n> & {\n item: KeepItem<TMeta>;\n title?: ReactNode | ((item: KeepItem<TMeta>) => ReactNode);\n getTitle?: (item: KeepItem<TMeta>) => ReactNode;\n getImageProps?: (item: KeepItem<TMeta>, title: ReactNode) => KeepImageProps | undefined;\n imageComponent?: ComponentType<KeepImageProps>;\n renderImage?: (props: KeepImageProps, item: KeepItem<TMeta>) => ReactNode;\n renderTags?: (tags: string[], item: KeepItem<TMeta>) => ReactNode;\n showTags?: boolean;\n showSavedAt?: boolean;\n imageAlt?: string;\n render?: RenderProp<KeepItemCardState<TMeta>>;\n children?: ReactNode | RenderProp<KeepItemCardState<TMeta>>;\n removeLabel?: string;\n onRemoveError?: (error: unknown) => void;\n onRemoved?: (item: KeepItem<TMeta>) => void;\n onRetry?: (item: KeepItem<TMeta>) => void | Promise<void>;\n showSaveButton?: boolean;\n saveButtonLabels?: KeepButtonLabels;\n asChild?: boolean;\n href?: string | ((item: KeepItem<TMeta>) => string | undefined);\n onOpen?: (item: KeepItem<TMeta>, event: MouseEvent<HTMLElement>) => void;\n linkTarget?: \"title\" | \"card\";\n linkComponent?: ComponentType<KeepItemCardLinkProps>;\n linkTargetAttribute?: HTMLAttributeAnchorTarget;\n linkRel?: string;\n};\n\n/** A low-dependency item presentation primitive. The default markup can be replaced with render props. */\nexport function KeepItemCard<TMeta = Record<string, unknown>>({\n item,\n title,\n getTitle,\n getImageProps,\n imageComponent: ImageComponent,\n renderImage,\n renderTags,\n showTags = true,\n showSavedAt = true,\n imageAlt,\n render,\n children,\n removeLabel,\n onRemoveError,\n onRemoved,\n onRetry,\n showSaveButton = true,\n saveButtonLabels,\n asChild = false,\n href: hrefOption,\n onOpen,\n linkTarget = \"title\",\n linkComponent: LinkComponent,\n linkTargetAttribute,\n linkRel,\n className,\n ...rootProps\n}: KeepItemCardProps<TMeta>) {\n const saveActionLabel = useUiLabel(\"save\");\n const savedAtLabel = useUiLabel(\"saved\");\n const errorLabel = useUiLabel(\"error\");\n const removeActionLabel = useUiLabel(\"remove\");\n const itemState = useKeepItem<TMeta>(item);\n const contentChildren = asChild && isValidElement(children) ? undefined : children;\n const state: KeepItemCardState<TMeta> = {\n item,\n isSaved: itemState.isSaved,\n isMutating: itemState.isMutating,\n error: itemState.error,\n remove: itemState.remove,\n status: item.status,\n };\n const resolvedTitle =\n typeof title === \"function\" ? title(item) : (title ?? getTitle?.(item) ?? getMetaTitle(item.meta) ?? item.id);\n const imageProps = getImageProps?.(item, resolvedTitle);\n const href = typeof hrefOption === \"function\" ? hrefOption(item) : hrefOption;\n const isAvailable = item.status === undefined || item.status === \"available\";\n const displayStatus = getDisplayStatus(item.status);\n const isExternalLink = href ? isExternalHref(href) : false;\n const resolvedLinkTarget = linkTargetAttribute ?? (isExternalLink ? \"_blank\" : undefined);\n const resolvedLinkRel = linkRel ?? (isExternalLink ? \"noreferrer\" : undefined);\n const statusLabelKey = item.status && item.status !== \"available\" ? getStatusLabelKey(item.status) : \"statusUnknown\";\n const unavailableLabel = useUiLabel(statusLabelKey);\n const tagsLabel = useUiLabel(\"tags\");\n const statusLabel = item.status && item.status !== \"available\" ? unavailableLabel : undefined;\n\n function renderLink(content: ReactNode): ReactNode {\n if (!href || !isAvailable) return content;\n const linkProps: KeepItemCardLinkProps = {\n href,\n target: resolvedLinkTarget,\n rel: resolvedLinkRel,\n onClick: (event) => onOpen?.(item, event),\n children: content,\n };\n return LinkComponent ? <LinkComponent {...linkProps} /> : <a {...linkProps} />;\n }\n\n async function handleRemove() {\n try {\n await itemState.remove();\n onRemoved?.(item);\n } catch (error) {\n onRemoveError?.(error);\n }\n }\n\n const body = render\n ? render(state)\n : typeof contentChildren === \"function\"\n ? contentChildren(state)\n : (contentChildren ?? (\n <>\n {imageProps\n ? (renderImage?.({ ...imageProps, alt: imageAlt ?? imageProps.alt }, item) ??\n (ImageComponent ? (\n <ImageComponent {...imageProps} alt={imageAlt ?? imageProps.alt} />\n ) : (\n <img {...imageProps} alt={imageAlt ?? imageProps.alt} />\n )))\n : null}\n <h3>\n {linkTarget === \"title\" ? (\n isAvailable ? (\n renderLink(resolvedTitle)\n ) : href ? (\n <span aria-disabled=\"true\" data-link-disabled=\"true\">\n {resolvedTitle}\n </span>\n ) : (\n resolvedTitle\n )\n ) : (\n resolvedTitle\n )}\n </h3>\n {showSavedAt ? (\n <div data-card-meta>\n <span>{savedAtLabel}:</span>{\" \"}\n <time dateTime={new Date(item.savedAt).toISOString()}>{formatSavedAt(item.savedAt)}</time>\n </div>\n ) : null}\n {showTags && (item.tags?.length ?? 0) > 0 ? (\n renderTags ? (\n renderTags(item.tags ?? [], item)\n ) : (\n <ul aria-label={tagsLabel}>\n {item.tags?.map((tag) => (\n <li key={tag}>{tag}</li>\n ))}\n </ul>\n )\n ) : null}\n {itemState.error ? <p role=\"alert\">{getErrorMessage(itemState.error, errorLabel)}</p> : null}\n {statusLabel ? <KeepStaleNotice item={item} onRetry={onRetry} onRemoved={onRemoved} /> : null}\n {showSaveButton && !statusLabel ? (\n <KeepButton\n item={toKeepButtonItem(item)}\n labels={saveButtonLabels}\n getAriaLabel={(buttonState) =>\n `${buttonState.isSaved ? removeActionLabel : saveActionLabel} ${String(resolvedTitle)}`\n }\n />\n ) : null}\n {!statusLabel ? (\n <button type=\"button\" onClick={() => void handleRemove()} disabled={itemState.isMutating}>\n {removeLabel ?? removeActionLabel}\n </button>\n ) : null}\n </>\n ));\n\n const linkedBody = linkTarget === \"card\" && isAvailable ? renderLink(body) : body;\n return renderRoot(\n asChild,\n isValidElement(children) ? children : undefined,\n {\n ...rootProps,\n className,\n \"data-keepkit\": \"card\",\n \"aria-busy\": itemState.isMutating || rootProps[\"aria-busy\"],\n \"aria-disabled\": rootProps[\"aria-disabled\"] ?? (!isAvailable ? \"true\" : undefined),\n \"data-state\": itemState.error ? \"error\" : itemState.isSaved ? \"saved\" : \"unsaved\",\n \"data-status\": item.status ?? \"available\",\n \"data-item-status\": displayStatus,\n \"data-loading\": itemState.isMutating ? \"true\" : undefined,\n },\n linkedBody,\n \"KeepItemCard\",\n );\n}\n\nfunction getStatusLabelKey(\n status: NonNullable<KeepItem[\"status\"]>,\n): \"statusExpired\" | \"statusRemoved\" | \"statusDeleted\" | \"statusPrivate\" | \"statusUnknown\" {\n switch (status) {\n case \"expired\":\n return \"statusExpired\";\n case \"removed\":\n return \"statusRemoved\";\n case \"deleted\":\n return \"statusDeleted\";\n case \"private\":\n return \"statusPrivate\";\n default:\n return \"statusUnknown\";\n }\n}\n\nfunction getDisplayStatus(status: KeepItem[\"status\"]): \"available\" | \"expired\" | \"removed\" | \"restricted\" {\n if (status === undefined || status === \"available\") return \"available\";\n if (status === \"expired\") return \"expired\";\n if (status === \"removed\") return \"removed\";\n return \"restricted\";\n}\n\nfunction isExternalHref(href: string): boolean {\n return /^(?:[a-z][a-z\\d+.-]*:|\\/\\/)/i.test(href);\n}\n\nfunction formatSavedAt(timestamp: number): string {\n return new Date(timestamp).toISOString().slice(0, 10);\n}\n\nfunction getErrorMessage(error: unknown, fallback: string): string {\n return error instanceof Error ? error.message : fallback;\n}\n","\"use client\";\n\nimport type { KeepItem, KeepItemStatus } from \"@keepkit/core/core\";\nimport { useKeepContext } from \"@keepkit/core/react\";\nimport type { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { KeepItemStatusBadge } from \"./KeepItemStatusBadge\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepStaleNoticeProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n item: KeepItem<TMeta>;\n onRetry?: (item: KeepItem<TMeta>) => void | Promise<void>;\n onRemoved?: (item: KeepItem<TMeta>) => void;\n retryLabel?: ReactNode;\n removeLabel?: ReactNode;\n children?: ReactNode;\n};\n\n/** Provides retry and remove actions for an item whose source is no longer available. */\nexport function KeepStaleNotice<TMeta = Record<string, unknown>>({\n item,\n onRetry,\n onRemoved,\n retryLabel,\n removeLabel,\n children,\n className,\n ...props\n}: KeepStaleNoticeProps<TMeta>) {\n const context = useKeepContext<TMeta>();\n const retryText = useUiLabel(\"retry\");\n const removeText = useUiLabel(\"removeFromList\");\n const errorText = useUiLabel(\"error\");\n const [isRetrying, setIsRetrying] = useState(false);\n const [error, setError] = useState<unknown | null>(null);\n const status = item.status && item.status !== \"available\" ? item.status : \"unknown\";\n\n async function handleRetry() {\n setError(null);\n setIsRetrying(true);\n try {\n if (onRetry) await onRetry(item);\n else await context.revalidateItems();\n } catch (cause) {\n setError(cause);\n } finally {\n setIsRetrying(false);\n }\n }\n\n async function handleRemove() {\n try {\n await context.removeItemWithUndo(item.id);\n onRemoved?.(item);\n } catch (cause) {\n setError(cause);\n }\n }\n\n return (\n <aside {...props} className={className} data-keepkit=\"stale-notice\" data-state={error ? \"error\" : \"stale\"}>\n <KeepItemStatusBadge status={status} />\n {children ?? (item.statusReason ? <p>{item.statusReason}</p> : null)}\n <div>\n <button type=\"button\" onClick={() => void handleRetry()} disabled={isRetrying || context.isMutating}>\n {retryLabel ?? retryText}\n </button>\n <button type=\"button\" onClick={() => void handleRemove()} disabled={context.isMutating}>\n {removeLabel ?? removeText}\n </button>\n </div>\n {error ? <p role=\"alert\">{error instanceof Error ? error.message : errorText}</p> : null}\n </aside>\n );\n}\n\nexport type KeepPruneStaleButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> & {\n statuses?: KeepItemStatus[];\n label?: ReactNode;\n onPruned?: (ids: string[]) => void;\n children?: ReactNode;\n};\n\n/** Removes all unavailable items through the provider's undo-capable batch action. */\nexport function KeepPruneStaleButton<TMeta = Record<string, unknown>>({\n statuses = [\"expired\", \"removed\", \"deleted\", \"private\", \"unknown\"],\n label,\n onPruned,\n children,\n disabled,\n ...props\n}: KeepPruneStaleButtonProps) {\n const context = useKeepContext<TMeta>();\n const defaultLabel = useUiLabel(\"pruneStale\");\n const staleIds = context.items.filter((item) => item.status && statuses.includes(item.status)).map((item) => item.id);\n\n async function handlePrune() {\n const ids = [...staleIds];\n await context.removeItemsWithUndo(ids);\n onPruned?.(ids);\n }\n\n return (\n <button\n {...props}\n type=\"button\"\n className={props.className}\n data-keepkit=\"prune-stale\"\n data-state={staleIds.length > 0 ? \"available\" : \"empty\"}\n disabled={staleIds.length === 0 || context.isMutating || disabled}\n onClick={() => void handlePrune()}\n >\n {children ?? label ?? `${defaultLabel} (${staleIds.length})`}\n </button>\n );\n}\n","\"use client\";\n\nimport type { KeepItemStatus } from \"@keepkit/core/core\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { type KeepUiLabelKey, useUiLabel } from \"./ui-context\";\n\nexport type KeepItemStatusBadgeProps = Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> & {\n status?: KeepItemStatus | \"restricted\";\n label?: ReactNode;\n};\n\nexport type KeepDisplayStatus = \"available\" | \"expired\" | \"removed\" | \"restricted\";\n\n/** Displays the normalized availability state of a saved item. */\nexport function KeepItemStatusBadge({ status = \"available\", label, className, ...props }: KeepItemStatusBadgeProps) {\n const resolvedStatus = getDisplayStatus(status);\n const statusLabel = useUiLabel(getStatusLabelKey(status));\n return (\n <span\n {...props}\n className={className}\n data-keepkit=\"status-badge\"\n data-status={status}\n data-item-status={resolvedStatus}\n >\n {label ?? statusLabel}\n </span>\n );\n}\n\nfunction getStatusLabelKey(status: KeepItemStatus | \"restricted\"): KeepUiLabelKey {\n switch (status) {\n case \"available\":\n return \"statusAvailable\";\n case \"expired\":\n return \"statusExpired\";\n case \"removed\":\n return \"statusRemoved\";\n case \"deleted\":\n return \"statusDeleted\";\n case \"private\":\n return \"statusPrivate\";\n case \"unknown\":\n return \"statusUnknown\";\n case \"restricted\":\n return \"statusPrivate\";\n }\n}\n\nfunction getDisplayStatus(status: KeepItemStatus | \"restricted\"): KeepDisplayStatus {\n if (status === \"available\") return \"available\";\n if (status === \"expired\") return \"expired\";\n if (status === \"removed\") return \"removed\";\n return \"restricted\";\n}\n","\"use client\";\n\nimport type { KeepListQuery } from \"@keepkit/core/core\";\nimport { useKeepList } from \"@keepkit/core/react\";\nimport { type HTMLAttributes, isValidElement, type ReactNode, useCallback, useMemo, useState } from \"react\";\nimport { type RenderProp, renderRoot } from \"./shared\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepTagFilterState = {\n tags: string[];\n tagCounts: Record<string, number>;\n value?: string;\n select: (tag?: string) => void;\n};\n\nexport type KeepTagFilterProps<TMeta = Record<string, unknown>> = Omit<\n HTMLAttributes<HTMLElement>,\n \"children\" | \"onChange\"\n> & {\n query?: KeepListQuery<TMeta>;\n value?: string;\n defaultValue?: string;\n onChange?: (tag?: string) => void;\n onValueChange?: (tag?: string) => void;\n allLabel?: ReactNode;\n ariaLabel?: string;\n renderTag?: (tag: string, count: number, selected: boolean) => ReactNode;\n render?: RenderProp<KeepTagFilterState>;\n children?: ReactNode | RenderProp<KeepTagFilterState>;\n asChild?: boolean;\n};\n\n/** An ARIA button group for tag filtering; consumers can connect value to a collection query. */\nexport function KeepTagFilter<TMeta = Record<string, unknown>>({\n query,\n value: controlledValue,\n defaultValue,\n onChange,\n onValueChange,\n allLabel,\n ariaLabel,\n renderTag,\n render,\n children,\n asChild = false,\n className,\n ...rootProps\n}: KeepTagFilterProps<TMeta>) {\n const uiAllLabel = useUiLabel(\"allTags\");\n const uiAriaLabel = useUiLabel(\"filterTags\");\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const resolvedValue = controlledValue ?? uncontrolledValue;\n const list = useKeepList<TMeta>({\n ...query,\n tags: resolvedValue ? [...(query?.tags ?? []), resolvedValue] : query?.tags,\n });\n const select = useCallback(\n (tag?: string) => {\n if (controlledValue === undefined) setUncontrolledValue(tag);\n onChange?.(tag);\n onValueChange?.(tag);\n },\n [controlledValue, onChange, onValueChange],\n );\n const state = useMemo<KeepTagFilterState>(\n () => ({ tags: list.tags, tagCounts: list.tagCounts, value: resolvedValue, select }),\n [list.tagCounts, list.tags, resolvedValue, select],\n );\n const contentChildren = asChild && isValidElement(children) ? undefined : children;\n const body = render\n ? render(state)\n : typeof contentChildren === \"function\"\n ? contentChildren(state)\n : (contentChildren ?? (\n <fieldset>\n <legend>{ariaLabel ?? uiAriaLabel}</legend>\n <button type=\"button\" aria-pressed={resolvedValue === undefined} onClick={() => select()}>\n {allLabel ?? uiAllLabel}\n </button>\n {list.tags.map((tag) => (\n <button key={tag} type=\"button\" aria-pressed={resolvedValue === tag} onClick={() => select(tag)}>\n {renderTag ? renderTag(tag, list.tagCounts[tag] ?? 0, resolvedValue === tag) : tag}\n <span> ({list.tagCounts[tag] ?? 0})</span>\n </button>\n ))}\n </fieldset>\n ));\n return renderRoot(\n asChild,\n isValidElement(children) ? children : undefined,\n {\n ...rootProps,\n className,\n \"data-keepkit\": \"tag-filter\",\n \"data-state\": resolvedValue === undefined ? \"all\" : \"filtered\",\n \"data-loading\": list.isLoading ? \"true\" : undefined,\n },\n body,\n \"KeepTagFilter\",\n );\n}\n","\"use client\";\n\nimport type { KeepListQuery } from \"@keepkit/core/core\";\nimport { type InputHTMLAttributes, type ReactNode, type SelectHTMLAttributes, useEffect, useState } from \"react\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepSearchInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"defaultValue\" | \"onChange\"\n> & {\n value?: string;\n defaultValue?: string;\n /** Delay before notifying consumers; set to 0 to disable debouncing. */\n debounceMs?: number;\n onValueChange?: (value: string) => void;\n};\n\n/** A controlled/uncontrolled search field with a small built-in debounce. */\nexport function KeepSearchInput({\n value: controlledValue,\n defaultValue = \"\",\n debounceMs = 300,\n onValueChange,\n \"aria-label\": ariaLabel,\n placeholder,\n ...props\n}: KeepSearchInputProps) {\n const label = useUiLabel(\"search\");\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const value = controlledValue ?? uncontrolledValue;\n\n useEffect(() => {\n if (!onValueChange) return;\n if (debounceMs <= 0) {\n onValueChange(value);\n return;\n }\n const timer = window.setTimeout(() => onValueChange(value), debounceMs);\n return () => window.clearTimeout(timer);\n }, [debounceMs, onValueChange, value]);\n\n return (\n <input\n {...props}\n data-keepkit=\"search-input\"\n type=\"search\"\n value={value}\n data-state={value ? \"active\" : \"idle\"}\n data-disabled={props.disabled ? \"true\" : undefined}\n aria-label={ariaLabel ?? label}\n placeholder={placeholder ?? label}\n onChange={(event) => {\n const nextValue = event.currentTarget.value;\n if (controlledValue === undefined) setUncontrolledValue(nextValue);\n }}\n />\n );\n}\n\nexport type KeepSortValue = \"savedAt:desc\" | \"savedAt:asc\" | \"updatedAt:desc\" | \"updatedAt:asc\";\n\nexport type KeepSortSelectProps = Omit<\n SelectHTMLAttributes<HTMLSelectElement>,\n \"value\" | \"defaultValue\" | \"onChange\"\n> & {\n value?: KeepSortValue;\n defaultValue?: KeepSortValue;\n onValueChange?: (value: KeepSortValue, sort: NonNullable<KeepListQuery[\"sort\"]>) => void;\n};\n\n/** Emits a normalized sort descriptor that can be passed directly to useKeepList. */\nexport function KeepSortSelect({\n value: controlledValue,\n defaultValue = \"updatedAt:desc\",\n onValueChange,\n \"aria-label\": ariaLabel,\n children,\n ...props\n}: KeepSortSelectProps) {\n const label = useUiLabel(\"sort\");\n const updatedNewestLabel = useUiLabel(\"updatedNewest\");\n const updatedOldestLabel = useUiLabel(\"updatedOldest\");\n const savedNewestLabel = useUiLabel(\"savedNewest\");\n const savedOldestLabel = useUiLabel(\"savedOldest\");\n const [uncontrolledValue, setUncontrolledValue] = useState<KeepSortValue>(defaultValue);\n const value = controlledValue ?? uncontrolledValue;\n const options = children ?? (\n <>\n <option value=\"updatedAt:desc\">{updatedNewestLabel}</option>\n <option value=\"updatedAt:asc\">{updatedOldestLabel}</option>\n <option value=\"savedAt:desc\">{savedNewestLabel}</option>\n <option value=\"savedAt:asc\">{savedOldestLabel}</option>\n </>\n );\n return (\n <select\n {...props}\n data-keepkit=\"sort-select\"\n value={value}\n data-state=\"selected\"\n data-disabled={props.disabled ? \"true\" : undefined}\n aria-label={ariaLabel ?? label}\n onChange={(event) => {\n const nextValue = event.currentTarget.value as KeepSortValue;\n if (controlledValue === undefined) setUncontrolledValue(nextValue);\n const [by, direction] = nextValue.split(\":\") as [\"savedAt\" | \"updatedAt\", \"asc\" | \"desc\"];\n onValueChange?.(nextValue, { by, direction });\n }}\n >\n {options}\n </select>\n );\n}\n\nexport type KeepPaginationState = { page: number; pageCount: number; goToPage: (page: number) => void };\n\nexport type KeepPaginationProps = Omit<React.HTMLAttributes<HTMLElement>, \"children\"> & {\n totalCount: number;\n pageSize: number;\n page?: number;\n maxPageButtons?: number;\n onPageChange?: (page: number, offset: number) => void;\n render?: (state: KeepPaginationState) => ReactNode;\n};\n\n/** Accessible pagination with previous/next controls and numbered page buttons. */\nexport function KeepPagination({\n totalCount,\n pageSize,\n page = 1,\n maxPageButtons = 7,\n onPageChange,\n render,\n ...props\n}: KeepPaginationProps) {\n const previousPageLabel = useUiLabel(\"previousPage\");\n const nextPageLabel = useUiLabel(\"nextPage\");\n const pageLabel = useUiLabel(\"page\");\n const paginationLabel = useUiLabel(\"pagination\");\n const pageCount = Math.max(1, Math.ceil(totalCount / Math.max(1, pageSize)));\n const currentPage = Math.min(Math.max(1, page), pageCount);\n const goToPage = (nextPage: number) => {\n const next = Math.min(Math.max(1, nextPage), pageCount);\n onPageChange?.(next, (next - 1) * pageSize);\n };\n const navProps = {\n ...props,\n \"data-keepkit\": \"pagination\",\n \"aria-label\": props[\"aria-label\"] ?? paginationLabel,\n \"data-state\": pageCount > 1 ? \"active\" : \"idle\",\n };\n if (render) return <nav {...navProps}>{render({ page: currentPage, pageCount, goToPage })}</nav>;\n const visiblePages = getVisiblePages(currentPage, pageCount, Math.max(1, maxPageButtons));\n return (\n <nav {...navProps}>\n <button type=\"button\" onClick={() => goToPage(currentPage - 1)} disabled={currentPage <= 1}>\n {previousPageLabel}\n </button>\n {visiblePages.map((nextPage) => (\n <button\n key={nextPage}\n type=\"button\"\n aria-current={nextPage === currentPage ? \"page\" : undefined}\n aria-label={`${pageLabel} ${nextPage}`}\n onClick={() => goToPage(nextPage)}\n >\n {nextPage}\n </button>\n ))}\n <button type=\"button\" onClick={() => goToPage(currentPage + 1)} disabled={currentPage >= pageCount}>\n {nextPageLabel}\n </button>\n </nav>\n );\n}\n\nfunction getVisiblePages(currentPage: number, pageCount: number, maxPageButtons: number): number[] {\n if (pageCount <= maxPageButtons) return Array.from({ length: pageCount }, (_, index) => index + 1);\n const half = Math.floor(maxPageButtons / 2);\n const start = Math.min(Math.max(1, currentPage - half), pageCount - maxPageButtons + 1);\n return Array.from({ length: maxPageButtons }, (_, index) => start + index);\n}\n","\"use client\";\n\nimport type { KeepListQuery } from \"@keepkit/core/core\";\nimport {\n DEFAULT_KEEP_URL_PARAMS,\n decodeKeepListQuery,\n encodeKeepListQuery,\n type KeepUrlSyncOptions,\n} from \"@keepkit/core/core\";\nimport { useEffect, useRef } from \"react\";\n\nexport type KeepUrlAdapter = {\n getUrl: () => string;\n subscribe?: (listener: () => void) => () => void;\n navigate: (url: string, mode: \"replace\" | \"push\") => void;\n};\n\nexport type KeepPagesRouterLike = {\n asPath?: string;\n push: (url: string, as?: string, options?: { shallow?: boolean }) => Promise<boolean> | boolean;\n replace: (url: string, as?: string, options?: { shallow?: boolean }) => Promise<boolean> | boolean;\n events?: { on: (event: string, listener: () => void) => void; off: (event: string, listener: () => void) => void };\n};\n\nexport type KeepUrlSyncProps<TMeta = Record<string, unknown>> = {\n enabled?: boolean;\n query: KeepListQuery<TMeta>;\n onQueryChange: (query: KeepListQuery<TMeta> | ((previous: KeepListQuery<TMeta>) => KeepListQuery<TMeta>)) => void;\n options?: KeepUrlSyncOptions;\n adapter?: KeepUrlAdapter;\n};\n\n/** Adapter for Next.js Pages Router. It intentionally uses structural typing and has no Next dependency. */\nexport function createNextPagesRouterAdapter(router: KeepPagesRouterLike): KeepUrlAdapter {\n const getUrl = () => router.asPath ?? (typeof window === \"undefined\" ? \"/\" : window.location.href);\n return {\n getUrl,\n subscribe: router.events\n ? (listener) => {\n router.events?.on(\"routeChangeComplete\", listener);\n return () => router.events?.off(\"routeChangeComplete\", listener);\n }\n : undefined,\n navigate: (url, mode) => {\n void router[mode](url, undefined, { shallow: true });\n },\n };\n}\n\n/** Synchronizes collection filters with browser history and supports back/forward restoration. */\nexport function useKeepUrlSync<TMeta = Record<string, unknown>>({\n enabled = true,\n query,\n onQueryChange,\n options = {},\n adapter: providedAdapter,\n}: KeepUrlSyncProps<TMeta>): void {\n const browserAdapterRef = useRef<KeepUrlAdapter>(getBrowserAdapter());\n const adapter = providedAdapter ?? browserAdapterRef.current;\n const onQueryChangeRef = useRef(onQueryChange);\n onQueryChangeRef.current = onQueryChange;\n const skipWriteRef = useRef(true);\n const params = options.params;\n\n useEffect(() => {\n if (!enabled) return;\n const read = () => {\n const url = adapter.getUrl();\n const decoded = decodeKeepListQuery(url, { params });\n skipWriteRef.current = true;\n onQueryChangeRef.current((previousQuery) => ({\n ...previousQuery,\n ...(decoded.search ? { search: decoded.search } : { search: undefined }),\n ...(decoded.tags ? { tags: decoded.tags } : { tags: undefined }),\n ...(decoded.sort ? { sort: decoded.sort } : {}),\n ...(decoded.pagination ? { pagination: { ...previousQuery.pagination, ...decoded.pagination } } : {}),\n }));\n };\n read();\n return adapter.subscribe?.(read);\n }, [adapter, enabled, params]);\n\n useEffect(() => {\n if (!enabled) return;\n if (skipWriteRef.current) {\n skipWriteRef.current = false;\n return;\n }\n const currentUrl = new URL(adapter.getUrl(), \"http://keepkit.invalid\");\n const urlParams = { ...DEFAULT_KEEP_URL_PARAMS, ...params };\n for (const key of Object.values(urlParams)) currentUrl.searchParams.delete(key);\n const nextParams = encodeKeepListQuery(query, { params });\n nextParams.forEach((value, key) => {\n currentUrl.searchParams.append(key, value);\n });\n const nextUrl = `${currentUrl.pathname}${currentUrl.search}${currentUrl.hash}`;\n adapter.navigate(nextUrl, options.history ?? \"push\");\n }, [adapter, enabled, options.history, params, query]);\n}\n\nfunction getBrowserAdapter(): KeepUrlAdapter {\n return {\n getUrl: () => (typeof window === \"undefined\" ? \"/\" : window.location.href),\n subscribe: (listener) => {\n if (typeof window === \"undefined\") return () => undefined;\n window.addEventListener(\"popstate\", listener);\n return () => window.removeEventListener(\"popstate\", listener);\n },\n navigate: (url, mode) => {\n if (typeof window === \"undefined\") return;\n window.history[mode === \"push\" ? \"pushState\" : \"replaceState\"]({}, \"\", url);\n },\n };\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport type { KeepLayoutPreset } from \"./KeepCollection\";\n\nexport type KeepLayoutProps = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n layout?: KeepLayoutPreset;\n children?: ReactNode;\n};\n\n/** A style-free layout wrapper with a stable preset attribute for host or theme CSS. */\nexport function KeepLayout({ layout = \"list\", children, ...props }: KeepLayoutProps) {\n return (\n <div {...props} data-keepkit=\"layout\" data-layout={layout}>\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport type { KeepItem } from \"@keepkit/core/core\";\nimport { useKeepItem } from \"@keepkit/core/react\";\nimport {\n type FormHTMLAttributes,\n isValidElement,\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { type RenderProp, renderRoot } from \"./shared\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepNoteEditorState<TMeta = Record<string, unknown>> = {\n item: KeepItem<TMeta>;\n note: string;\n setNote: (note: string) => void;\n isDirty: boolean;\n isSaving: boolean;\n error: unknown | null;\n save: () => Promise<void>;\n};\n\nexport type KeepNoteEditorProps<TMeta = Record<string, unknown>> = Omit<\n FormHTMLAttributes<HTMLFormElement>,\n \"children\" | \"onSubmit\"\n> & {\n item: KeepItem<TMeta>;\n label?: ReactNode;\n saveLabel?: ReactNode;\n placeholder?: string;\n /** Automatically save dirty notes after this delay; set to 0 to disable auto-save. */\n debounceMs?: number;\n onSaved?: (note?: string) => void;\n onSaveError?: (error: unknown) => void;\n render?: RenderProp<KeepNoteEditorState<TMeta>>;\n children?: ReactNode | RenderProp<KeepNoteEditorState<TMeta>>;\n asChild?: boolean;\n};\n\n/** A controlled-by-default note editor that persists through useKeepItem. */\nexport function KeepNoteEditor<TMeta = Record<string, unknown>>({\n item,\n label,\n saveLabel,\n placeholder,\n debounceMs = 300,\n onSaved,\n onSaveError,\n render,\n children,\n asChild = false,\n className,\n ...formProps\n}: KeepNoteEditorProps<TMeta>) {\n const defaultLabel = useUiLabel(\"note\");\n const defaultSaveLabel = useUiLabel(\"saveNote\");\n const errorLabel = useUiLabel(\"error\");\n const itemState = useKeepItem<TMeta>(item);\n const { error, isMutating, item: savedItem, updateNote } = itemState;\n const contentChildren = asChild && isValidElement(children) ? undefined : children;\n const [note, setNote] = useState(item.note ?? \"\");\n const baselineNote = savedItem?.note ?? item.note ?? \"\";\n const isDirty = note !== baselineNote;\n const lastSavedNoteRef = useRef<string | undefined>(undefined);\n useEffect(() => setNote(baselineNote), [baselineNote]);\n const save = useCallback(async () => {\n const nextNote = note.trim() || undefined;\n try {\n await updateNote(nextNote);\n lastSavedNoteRef.current = note;\n onSaved?.(nextNote);\n } catch (error) {\n onSaveError?.(error);\n throw error;\n }\n }, [note, onSaveError, onSaved, updateNote]);\n useEffect(() => {\n if (!isDirty || debounceMs <= 0 || lastSavedNoteRef.current === note) return;\n const timer = window.setTimeout(() => void save().catch(() => undefined), debounceMs);\n return () => window.clearTimeout(timer);\n }, [debounceMs, isDirty, note, save]);\n const state: KeepNoteEditorState<TMeta> = {\n item,\n note,\n setNote,\n isDirty,\n isSaving: isMutating,\n error,\n save,\n };\n const body = render\n ? render(state)\n : typeof contentChildren === \"function\"\n ? contentChildren(state)\n : (contentChildren ?? (\n <>\n <label>\n {label ?? defaultLabel}\n <textarea\n value={note}\n onChange={(event) => setNote(event.currentTarget.value)}\n placeholder={placeholder}\n disabled={isMutating}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n void save().catch(() => undefined);\n }\n }}\n />\n </label>\n <button type=\"submit\" disabled={isMutating} aria-busy={isMutating}>\n {saveLabel ?? defaultSaveLabel}\n </button>\n </>\n ));\n const handleSubmit: FormHTMLAttributes<HTMLFormElement>[\"onSubmit\"] = (event) => {\n event.preventDefault();\n void save().catch(() => undefined);\n };\n if (!asChild) {\n return (\n <form\n {...formProps}\n className={className}\n data-keepkit=\"note-editor\"\n onSubmit={handleSubmit}\n aria-busy={isMutating || formProps[\"aria-busy\"]}\n data-state={error ? \"error\" : isDirty ? \"dirty\" : \"clean\"}\n data-loading={isMutating ? \"true\" : undefined}\n data-disabled={isMutating ? \"true\" : undefined}\n >\n {body}\n {error ? <p role=\"alert\">{getErrorMessage(error, errorLabel)}</p> : null}\n </form>\n );\n }\n return renderRoot(\n true,\n isValidElement(children) ? children : undefined,\n {\n ...formProps,\n className,\n \"data-keepkit\": \"note-editor\",\n onSubmit: handleSubmit,\n \"aria-busy\": isMutating || formProps[\"aria-busy\"],\n \"data-state\": error ? \"error\" : isDirty ? \"dirty\" : \"clean\",\n \"data-loading\": isMutating ? \"true\" : undefined,\n \"data-disabled\": isMutating ? \"true\" : undefined,\n },\n body,\n \"KeepNoteEditor\",\n );\n}\n\nfunction getErrorMessage(error: unknown, fallback: string): string {\n return error instanceof Error ? error.message : fallback;\n}\n","\"use client\";\n\nimport type { KeepItem, KeepSyncConflict } from \"@keepkit/core/core\";\nimport { useKeepContext } from \"@keepkit/core/react\";\nimport { type HTMLAttributes, type ReactNode, useEffect, useState } from \"react\";\nimport { KeepBackup } from \"./KeepBackup\";\nimport { getMetaTitle } from \"./shared\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepSyncRecoveryDialogProps<TMeta = Record<string, unknown>> = Omit<\n HTMLAttributes<HTMLElement>,\n \"children\" | \"title\"\n> & {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n conflicts?: KeepSyncConflict<TMeta>[];\n onManualMerge?: (conflict: KeepSyncConflict<TMeta>) => KeepItem<TMeta> | Promise<KeepItem<TMeta>>;\n backup?: ReactNode;\n showBackupControls?: boolean;\n title?: ReactNode;\n children?: ReactNode;\n};\n\n/** Resolves queued sync conflicts and guides users to restore a backup after data corruption. */\nexport function KeepSyncRecoveryDialog<TMeta = Record<string, unknown>>({\n open,\n onOpenChange,\n conflicts,\n onManualMerge,\n backup,\n showBackupControls = true,\n title,\n children,\n className,\n ...props\n}: KeepSyncRecoveryDialogProps<TMeta>) {\n const context = useKeepContext<TMeta>();\n const closeLabel = useUiLabel(\"close\");\n const defaultDialogTitle = useUiLabel(\"resolveSync\");\n const dialogTitle = title ?? defaultDialogTitle;\n const conflictLabel = useUiLabel(\"syncConflict\");\n const keepLocalLabel = useUiLabel(\"keepLocal\");\n const useServerLabel = useUiLabel(\"useServer\");\n const manualMergeLabel = useUiLabel(\"manualMerge\");\n const localVersionLabel = useUiLabel(\"localVersion\");\n const remoteVersionLabel = useUiLabel(\"remoteVersion\");\n const updatedAtLabel = useUiLabel(\"updatedAt\");\n const noteLabel = useUiLabel(\"note\");\n const backupRecoveryLabel = useUiLabel(\"backupRecovery\");\n const backupRecoveryDescription = useUiLabel(\"backupRecoveryDescription\");\n const errorLabel = useUiLabel(\"error\");\n const conflictList = conflicts ?? context.syncState.conflicts ?? [];\n const hasRecovery = conflictList.length > 0 || context.syncState.status === \"error\" || Boolean(context.error);\n const [dismissed, setDismissed] = useState(false);\n const [busyId, setBusyId] = useState<string>();\n const [error, setError] = useState<unknown>();\n useEffect(() => {\n if (hasRecovery) setDismissed(false);\n }, [hasRecovery]);\n const isOpen = open ?? (hasRecovery && !dismissed);\n if (!isOpen) return null;\n\n const close = () => {\n setDismissed(true);\n onOpenChange?.(false);\n };\n\n async function resolve(conflict: KeepSyncConflict<TMeta>, resolution: \"local\" | \"remote\" | \"manual\") {\n setError(undefined);\n setBusyId(conflict.id);\n try {\n const merged = resolution === \"manual\" ? await onManualMerge?.(conflict) : undefined;\n if (resolution === \"manual\" && !merged) throw new Error(\"A manual merge result is required.\");\n await context.resolveSyncConflict(conflict.id, resolution, merged);\n } catch (cause) {\n setError(cause);\n } finally {\n setBusyId(undefined);\n }\n }\n\n return (\n <section\n {...props}\n className={className}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"keepkit-sync-recovery-title\"\n aria-describedby={error ? \"keepkit-sync-recovery-error\" : undefined}\n aria-busy={busyId !== undefined}\n data-keepkit=\"sync-recovery\"\n data-state={conflictList.length > 0 ? \"conflict\" : \"error\"}\n data-loading={busyId !== undefined ? \"true\" : undefined}\n >\n <header>\n <h2 id=\"keepkit-sync-recovery-title\">{dialogTitle}</h2>\n <button type=\"button\" onClick={close} aria-label={closeLabel}>\n {closeLabel}\n </button>\n </header>\n {children}\n {conflictList.length > 0 ? (\n <div>\n <p>{conflictLabel}</p>\n {conflictList.map((conflict) => (\n <article key={conflict.id} data-conflict-id={conflict.id}>\n <h3>{getMetaTitle(conflict.operation.item?.meta) ?? conflict.id}</h3>\n <div data-conflict-preview>\n <ConflictPreview\n item={conflict.operation.item}\n heading={localVersionLabel}\n updatedAtLabel={updatedAtLabel}\n noteLabel={noteLabel}\n side=\"local\"\n />\n <ConflictPreview\n item={conflict.remote}\n heading={remoteVersionLabel}\n updatedAtLabel={updatedAtLabel}\n noteLabel={noteLabel}\n side=\"remote\"\n />\n </div>\n <div>\n <button type=\"button\" onClick={() => void resolve(conflict, \"local\")} disabled={busyId !== undefined}>\n {keepLocalLabel}\n </button>\n <button type=\"button\" onClick={() => void resolve(conflict, \"remote\")} disabled={busyId !== undefined}>\n {useServerLabel}\n </button>\n <button\n type=\"button\"\n onClick={() => void resolve(conflict, \"manual\")}\n disabled={busyId !== undefined || !onManualMerge}\n >\n {manualMergeLabel}\n </button>\n </div>\n </article>\n ))}\n </div>\n ) : null}\n {context.syncState.status === \"error\" || context.error ? (\n <section data-recovery=\"backup\">\n <h3>{backupRecoveryLabel}</h3>\n <p>{backupRecoveryDescription}</p>\n {backup ?? (showBackupControls ? <KeepBackup /> : null)}\n </section>\n ) : null}\n {error ? (\n <p id=\"keepkit-sync-recovery-error\" role=\"alert\" aria-live=\"assertive\">\n {error instanceof Error ? error.message : errorLabel}\n </p>\n ) : null}\n </section>\n );\n}\n\nfunction ConflictPreview<TMeta>({\n item,\n heading,\n updatedAtLabel,\n noteLabel,\n side,\n}: {\n item?: KeepItem<TMeta>;\n heading: string;\n updatedAtLabel: string;\n noteLabel: string;\n side: \"local\" | \"remote\";\n}) {\n return (\n <article data-conflict-version={side} aria-label={heading}>\n <h4>{heading}</h4>\n <dl>\n <div>\n <dt>{updatedAtLabel}</dt>\n <dd>\n {item ? (\n <time dateTime={new Date(item.updatedAt).toISOString()}>{formatConflictDate(item.updatedAt)}</time>\n ) : (\n \"—\"\n )}\n </dd>\n </div>\n <div>\n <dt>{noteLabel}</dt>\n <dd>{item?.note || \"—\"}</dd>\n </div>\n </dl>\n </article>\n );\n}\n\nfunction formatConflictDate(timestamp: number): string {\n return new Date(timestamp).toISOString().slice(0, 10);\n}\n","\"use client\";\n\nimport { useKeepContext } from \"@keepkit/core/react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepSyncStatusBannerProps = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n onRetry?: () => void | Promise<void>;\n onResolveConflicts?: () => void;\n children?: ReactNode;\n};\n\n/** Announces synchronization failures and exposes retry or conflict-recovery entry points. */\nexport function KeepSyncStatusBanner({\n onRetry,\n onResolveConflicts,\n children,\n className,\n ...props\n}: KeepSyncStatusBannerProps) {\n const context = useKeepContext();\n const retryLabel = useUiLabel(\"retrySync\");\n const resolveLabel = useUiLabel(\"resolveSync\");\n const conflictLabel = useUiLabel(\"syncConflict\");\n const pendingLabel = useUiLabel(\"syncPending\");\n const syncedLabel = useUiLabel(\"syncSynced\");\n const status = context.syncState.status;\n const hasConflicts = (context.syncState.conflicts?.length ?? 0) > 0 || context.syncState.conflictIds.length > 0;\n if (status === \"idle\" && !hasConflicts) return null;\n\n const message =\n children ??\n (status === \"error\"\n ? getErrorMessage(context.syncState.error)\n : status === \"conflict\" || hasConflicts\n ? conflictLabel\n : status === \"pending\" || status === \"syncing\"\n ? pendingLabel\n : syncedLabel);\n const role = status === \"error\" || status === \"conflict\" || hasConflicts ? \"alert\" : \"status\";\n const retry = async () => {\n if (onRetry) {\n await onRetry();\n return;\n }\n await context.flushSync();\n };\n\n return (\n <aside\n {...props}\n className={className}\n role={props.role ?? role}\n aria-live={props[\"aria-live\"] ?? \"polite\"}\n data-keepkit=\"sync-status\"\n data-state={status}\n >\n <p>{message}</p>\n {status === \"error\" || status === \"pending\" || status === \"syncing\" ? (\n <button type=\"button\" onClick={() => void retry()} disabled={context.isMutating}>\n {retryLabel}\n </button>\n ) : null}\n {hasConflicts ? (\n <button type=\"button\" onClick={onResolveConflicts} disabled={!onResolveConflicts}>\n {resolveLabel}\n </button>\n ) : null}\n </aside>\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : \"Sync failed.\";\n}\n","\"use client\";\n\nimport type { KeepItem } from \"@keepkit/core/core\";\nimport { useKeepItem } from \"@keepkit/core/react\";\nimport { type FormHTMLAttributes, useCallback, useEffect, useState } from \"react\";\nimport { normalizeUiTags, type RenderProp } from \"./shared\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepTagEditorState = {\n tags: string[];\n setTags: (tags: string[]) => void;\n save: () => Promise<void>;\n isSaving: boolean;\n};\n\nexport type KeepTagEditorProps<TMeta = Record<string, unknown>> = Omit<\n FormHTMLAttributes<HTMLFormElement>,\n \"children\" | \"onSubmit\"\n> & {\n item: KeepItem<TMeta>;\n availableTags?: string[];\n onSaved?: (tags?: string[]) => void;\n onSaveError?: (error: unknown) => void;\n render?: RenderProp<KeepTagEditorState>;\n};\n\n/** Edits one item's normalized tag set; Enter adds and Backspace removes the last tag. */\nexport function KeepTagEditor<TMeta = Record<string, unknown>>({\n item,\n availableTags = [],\n onSaved,\n onSaveError,\n render,\n ...props\n}: KeepTagEditorProps<TMeta>) {\n const tagsLabel = useUiLabel(\"tagsToApply\");\n const removeLabel = useUiLabel(\"remove\");\n const applyTagsLabel = useUiLabel(\"applyTags\");\n const errorLabel = useUiLabel(\"error\");\n const itemState = useKeepItem<TMeta>(item);\n const [tags, setTags] = useState(item.tags ?? []);\n const [input, setInput] = useState(\"\");\n useEffect(() => setTags(itemState.item?.tags ?? item.tags ?? []), [item.tags, itemState.item?.tags]);\n const save = useCallback(async () => {\n const nextTags = normalizeUiTags(tags);\n try {\n await itemState.updateTags(nextTags);\n setTags(nextTags);\n onSaved?.(nextTags);\n } catch (error) {\n onSaveError?.(error);\n throw error;\n }\n }, [itemState, onSaveError, onSaved, tags]);\n const addTag = (tag: string) => {\n setTags(normalizeUiTags([...tags, tag]));\n setInput(\"\");\n };\n const body = render ? (\n render({ tags, setTags, save, isSaving: itemState.isMutating })\n ) : (\n <>\n <label>\n {tagsLabel}\n <input\n value={input}\n list={availableTags.length > 0 ? `keep-tags-${item.id}` : undefined}\n onChange={(event) => setInput(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n if (event.nativeEvent.isComposing) return;\n event.preventDefault();\n if (input.trim()) addTag(input);\n } else if (event.key === \"Backspace\" && input.length === 0 && tags.length > 0) {\n event.preventDefault();\n setTags(tags.slice(0, -1));\n }\n }}\n />\n </label>\n {availableTags.length > 0 ? (\n <datalist id={`keep-tags-${item.id}`}>\n {availableTags.map((tag) => (\n <option key={tag} value={tag} />\n ))}\n </datalist>\n ) : null}\n <ul aria-label={tagsLabel}>\n {tags.map((tag) => (\n <li key={tag}>\n {tag}\n <button type=\"button\" onClick={() => setTags(tags.filter((current) => current !== tag))}>\n {removeLabel}\n </button>\n </li>\n ))}\n </ul>\n <button type=\"submit\" disabled={itemState.isMutating} aria-busy={itemState.isMutating}>\n {applyTagsLabel}\n </button>\n </>\n );\n return (\n <form\n {...props}\n onSubmit={(event) => {\n event.preventDefault();\n void save().catch(() => undefined);\n }}\n aria-busy={itemState.isMutating || props[\"aria-busy\"]}\n data-keepkit=\"tag-editor\"\n data-state={itemState.error ? \"error\" : itemState.isMutating ? \"saving\" : \"idle\"}\n data-loading={itemState.isMutating ? \"true\" : undefined}\n data-disabled={itemState.isMutating ? \"true\" : undefined}\n >\n {body}\n {itemState.error ? <p role=\"alert\">{getErrorMessage(itemState.error, errorLabel)}</p> : null}\n </form>\n );\n}\n\nfunction getErrorMessage(error: unknown, fallback: string): string {\n return error instanceof Error ? error.message : fallback;\n}\n","\"use client\";\n\nimport { useKeepContext } from \"@keepkit/core/react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { useUiLabel } from \"./ui-context\";\n\nexport type KeepUndoProps = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n children?: ReactNode;\n label?: ReactNode;\n};\n\n/** Presents the short-lived undo action created by removeWithUndo/removeBatchWithUndo. */\nexport function KeepUndo({ children, label, ...props }: KeepUndoProps) {\n const context = useKeepContext();\n const message = useUiLabel(\"undoAvailable\");\n const undoLabel = useUiLabel(\"undo\");\n if (!context.undo.canUndo) return null;\n return (\n <div {...props} role=\"status\" aria-live=\"polite\" data-keepkit=\"undo\" data-state=\"available\">\n {children ?? message}\n <button type=\"button\" onClick={() => void context.undoLastRemoval()}>\n {label ?? undoLabel}\n </button>\n </div>\n );\n}\n","\"use client\";\n\nimport type { KeepChangeContext, KeepItem } from \"@keepkit/core/core\";\nimport { useKeepContext } from \"@keepkit/core/react\";\nimport { type HTMLAttributes, isValidElement, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { type RenderProp, renderRoot } from \"./shared\";\nimport { type KeepUiLabelKey, useUiLabel } from \"./ui-context\";\n\nexport type KeepEmptyStateProps = Omit<HTMLAttributes<HTMLElement>, \"children\" | \"title\"> & {\n title?: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n children?: ReactNode;\n asChild?: boolean;\n};\n\n/** A style-free, reusable empty collection state. */\nexport function KeepEmptyState({\n title,\n description,\n action,\n children,\n asChild = false,\n className,\n ...rootProps\n}: KeepEmptyStateProps) {\n const defaultTitle = useUiLabel(\"noItems\").replace(/\\.$/, \"\");\n const contentChildren = asChild && isValidElement(children) ? undefined : children;\n const body = contentChildren ?? (\n <>\n <h2>{title ?? defaultTitle}</h2>\n {description ? <p>{description}</p> : null}\n {action}\n </>\n );\n return renderRoot(\n asChild,\n children,\n { ...rootProps, className, \"data-keepkit\": \"empty-state\", \"data-state\": \"empty\" },\n body,\n \"KeepEmptyState\",\n );\n}\n\nexport type KeepStatusValue = \"idle\" | \"empty\" | \"loading\" | \"saving\" | \"syncing\" | \"error\";\nexport type KeepStatusLabels = Partial<Record<KeepStatusValue, ReactNode>>;\n\nexport type KeepStatusState<TMeta = Record<string, unknown>> = {\n status: KeepStatusValue;\n error: unknown | null;\n pendingCount: number;\n items: KeepItem<TMeta>[];\n};\n\nexport type KeepStatusProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n status?: KeepStatusValue;\n labels?: KeepStatusLabels;\n children?: ReactNode | RenderProp<KeepStatusState<TMeta>>;\n render?: RenderProp<KeepStatusState<TMeta>>;\n asChild?: boolean;\n};\n\n/** Presents provider loading, mutation, synchronization, empty, and error states accessibly. */\nexport function KeepStatus<TMeta = Record<string, unknown>>({\n status,\n labels,\n children,\n render,\n asChild = false,\n className,\n ...rootProps\n}: KeepStatusProps<TMeta>) {\n const context = useKeepContext<TMeta>();\n const contentChildren = asChild && isValidElement(children) ? undefined : children;\n const resolvedStatus = status ?? getDerivedStatus(context);\n const defaultLabel = useUiLabel(getStatusLabelKey(resolvedStatus));\n const state: KeepStatusState<TMeta> = {\n status: resolvedStatus,\n error: context.error,\n pendingCount: context.syncState.pendingCount,\n items: context.items,\n };\n const body = render\n ? render(state)\n : typeof contentChildren === \"function\"\n ? contentChildren(state)\n : (contentChildren ?? labels?.[resolvedStatus] ?? defaultLabel);\n const role = rootProps.role ?? (resolvedStatus === \"error\" ? \"alert\" : \"status\");\n return renderRoot(\n asChild,\n isValidElement(children) ? children : undefined,\n {\n ...rootProps,\n className,\n \"data-keepkit\": \"status\",\n role,\n \"aria-live\": rootProps[\"aria-live\"] ?? \"polite\",\n \"data-state\": resolvedStatus,\n \"data-loading\":\n resolvedStatus === \"loading\" || resolvedStatus === \"saving\" || resolvedStatus === \"syncing\"\n ? \"true\"\n : undefined,\n },\n body,\n \"KeepStatus\",\n );\n}\n\nexport type KeepAnnouncementsProps = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n messages?: Partial<Record<\"save\" | \"remove\" | \"note\", string>>;\n};\n\n/** Announces successful save, remove, and note operations in a polite live region. */\nexport function KeepAnnouncements<TMeta = Record<string, unknown>>({ messages, ...props }: KeepAnnouncementsProps) {\n const context = useKeepContext<TMeta>();\n const savedMessage = useUiLabel(\"savedMessage\", messages?.save);\n const removedMessage = useUiLabel(\"removedMessage\", messages?.remove);\n const noteSavedMessage = useUiLabel(\"noteSavedMessage\", messages?.note);\n const [message, setMessage] = useState(\"\");\n const lastChangeRef = useRef<KeepChangeContext<TMeta> | undefined>(undefined);\n useEffect(() => {\n const change = context.lastChange;\n if (!change || change === lastChangeRef.current) return;\n lastChangeRef.current = change;\n if (change.action === \"save\") setMessage(savedMessage);\n else if (change.action === \"remove\" || change.action === \"removeBatch\") setMessage(removedMessage);\n else if (change.action === \"updateNote\") setMessage(noteSavedMessage);\n }, [context.lastChange, noteSavedMessage, removedMessage, savedMessage]);\n return (\n <div\n {...props}\n role={props.role ?? \"status\"}\n aria-live={props[\"aria-live\"] ?? \"polite\"}\n aria-atomic=\"true\"\n data-keepkit=\"announcements\"\n data-state=\"announcing\"\n >\n {message}\n </div>\n );\n}\n\n/** Singular alias for applications that mount one announcer explicitly. */\nexport const KeepAnnouncer = KeepAnnouncements;\n\nfunction getDerivedStatus<TMeta>(context: ReturnType<typeof useKeepContext<TMeta>>): KeepStatusValue {\n if (context.error) return \"error\";\n if (context.syncState.status === \"pending\" || context.syncState.status === \"syncing\") return \"syncing\";\n if (context.isMutating) return \"saving\";\n if (context.isLoading && !context.isHydrated) return \"loading\";\n if (context.isHydrated && context.items.length === 0) return \"empty\";\n return \"idle\";\n}\n\nfunction getStatusLabelKey(status: KeepStatusValue): KeepUiLabelKey {\n if (status === \"empty\") return \"noItems\";\n if (status === \"loading\") return \"loadingItems\";\n if (status === \"error\") return \"error\";\n if (status === \"saving\") return \"saving\";\n if (status === \"syncing\") return \"syncing\";\n return \"saved\";\n}\n","\"use client\";\n\nimport { type CSSProperties, cloneElement, isValidElement, type ReactNode } from \"react\";\n\nexport type KeepThemeName = \"default\" | \"compact\" | \"minimal\" | \"rounded\" | \"high-contrast\" | \"dark\";\nexport type KeepThemeMode = \"light\" | \"dark\" | \"system\";\nexport type KeepThemeDensity = \"compact\" | \"comfortable\" | \"spacious\";\nexport type KeepThemeRadius = \"none\" | \"small\" | \"medium\" | \"large\" | \"full\";\n\nexport type KeepThemeVariables = Record<`--keep-${string}`, string | number>;\n\nexport type KeepThemeProviderProps = {\n children?: ReactNode;\n className?: string;\n id?: string;\n title?: string;\n role?: string;\n tabIndex?: number;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n \"data-testid\"?: string;\n [key: `data-${string}`]: string | undefined;\n theme?: KeepThemeName;\n mode?: KeepThemeMode;\n density?: KeepThemeDensity;\n radius?: KeepThemeRadius;\n accentColor?: \"blue\" | \"green\" | \"violet\" | \"orange\" | \"rose\" | (string & {});\n highContrast?: boolean;\n reducedMotion?: boolean;\n variables?: KeepThemeVariables;\n style?: CSSProperties & KeepThemeVariables;\n asChild?: boolean;\n};\n\n/** Scopes KeepKit tokens and opt-in component styles to one subtree. */\nexport function KeepThemeProvider({\n children,\n theme = \"default\",\n mode = \"system\",\n density = \"comfortable\",\n radius = \"medium\",\n accentColor,\n highContrast = false,\n reducedMotion = false,\n variables,\n style,\n className,\n asChild = false,\n ...props\n}: KeepThemeProviderProps) {\n const themeClassName = [\n \"keep-theme\",\n `keep-theme--${theme}`,\n `keep-theme--${mode}`,\n `keep-theme--density-${density}`,\n `keep-theme--radius-${radius}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n const themeStyle = {\n ...style,\n ...(accentColor && !highContrast ? { \"--keep-accent\": accentColor, \"--keep-primary\": accentColor } : {}),\n ...variables,\n } as CSSProperties & KeepThemeVariables;\n const rootProps = {\n ...props,\n className: themeClassName,\n style: themeStyle,\n \"data-keep-theme\": theme,\n \"data-theme\": theme,\n \"data-mode\": mode,\n \"data-density\": density,\n \"data-radius\": radius,\n \"data-accent-color\": accentColor,\n \"data-high-contrast\": highContrast ? \"true\" : undefined,\n \"data-reduced-motion\": reducedMotion ? \"true\" : undefined,\n };\n\n if (asChild) {\n if (!isValidElement(children))\n throw new Error(\"KeepThemeProvider with asChild requires a single React element child.\");\n return cloneElement(children, rootProps);\n }\n return <div {...rootProps}>{children}</div>;\n}\n"],"mappings":"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","names":["jsx","useState","jsx","jsx","jsx","jsxs","useState","Fragment","jsx","jsxs","KeepErrorBoundary","useKeepList","useMemo","useState","useKeepList","isValidElement","useKeepItem","isValidElement","useKeepContext","useState","jsx","jsx","jsxs","useKeepContext","useState","Fragment","jsx","jsxs","useKeepItem","isValidElement","getDisplayStatus","getStatusLabelKey","getErrorMessage","jsx","useKeepList","isValidElement","useKeepList","isValidElement","useMemo","useState","jsx","jsxs","useState","useKeepList","useMemo","isValidElement","useState","Fragment","jsx","jsxs","useState","useEffect","useRef","jsx","jsxs","KeepErrorBoundary","useState","useMemo","useKeepList","jsx","useKeepItem","isValidElement","useCallback","useEffect","useRef","useState","Fragment","jsx","jsxs","useKeepItem","isValidElement","useState","useRef","useEffect","useCallback","error","getErrorMessage","useKeepContext","useEffect","useState","jsx","jsxs","useKeepContext","useState","useEffect","useKeepContext","jsx","jsxs","useKeepContext","getErrorMessage","useKeepItem","useCallback","useEffect","useState","Fragment","jsx","jsxs","useKeepItem","useState","useEffect","useCallback","getErrorMessage","useKeepContext","jsx","jsxs","useKeepContext","useKeepContext","isValidElement","useEffect","useRef","useState","Fragment","jsx","jsxs","isValidElement","useKeepContext","getStatusLabelKey","useState","useRef","useEffect","cloneElement","isValidElement","jsx","KeepErrorBoundary","useKeepContext","useKeepItem","useKeepList","jsx","jsxs","jsx"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/hooks/useKeepBackup.ts","../src/ui-context.tsx","../src/locales/de.ts","../src/locales/en.ts","../src/locales/es.ts","../src/locales/fil.ts","../src/locales/fr.ts","../src/locales/id.ts","../src/locales/it.ts","../src/locales/ja.ts","../src/locales/ko.ts","../src/locales/ms.ts","../src/locales/pt-BR.ts","../src/locales/ru.ts","../src/locales/th.ts","../src/locales/vi.ts","../src/locales/zh-Hans.ts","../src/locales/zh-Hant.ts","../src/locales/index.ts","../src/KeepBackup.tsx","../src/hooks/useKeepBulkActions.ts","../src/shared.tsx","../src/KeepItemCheckbox.tsx","../src/KeepBulkActions.tsx","../src/KeepButton.tsx","../src/hooks/useKeepButton.ts","../src/KeepCollection.tsx","../src/hooks/useKeepCollection.ts","../src/url-sync.tsx","../src/KeepList.tsx","../src/hooks/useKeepListView.ts","../src/KeepItemCard.tsx","../src/hooks/useKeepItemCard.ts","../src/hooks/useKeepStaleNotice.ts","../src/hooks/useKeepItemStatusBadge.ts","../src/KeepItemStatusBadge.tsx","../src/KeepStaleNotice.tsx","../src/KeepTagFilter.tsx","../src/hooks/useKeepTagFilter.ts","../src/hooks/useQueryControls.ts","../src/query-controls.tsx","../src/KeepLayout.tsx","../src/KeepNoteEditor.tsx","../src/hooks/useKeepNoteEditor.ts","../src/hooks/useKeepSyncRecoveryDialog.ts","../src/KeepSyncRecoveryDialog.tsx","../src/hooks/useKeepSyncStatusBanner.ts","../src/KeepSyncStatusBanner.tsx","../src/hooks/useKeepTagEditor.ts","../src/KeepTagEditor.tsx","../src/hooks/useKeepUndo.ts","../src/KeepUndo.tsx","../src/status.tsx","../src/hooks/useStatusViews.ts","../src/theme.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n KeepItem,\n KeepItemInput,\n KeepListQuery,\n KeepScope,\n KeepUndoState,\n KeepUrlSyncOptions,\n} from \"@keepkit/core/core\";\nimport {\n type CreateKeepKitOptions as CoreCreateKeepKitOptions,\n KeepProvider as CoreKeepProvider,\n createKeepKit as createCoreKeepKit,\n type KeepProviderProps,\n type KeepShortcutOptions,\n type useKeepContext,\n type useKeepItem,\n type useKeepList,\n} from \"@keepkit/core/react\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport { KeepBackup, type KeepBackupProps } from \"./KeepBackup\";\nimport { KeepBulkActions, type KeepBulkActionsProps, type KeepBulkActionsState } from \"./KeepBulkActions\";\nimport {\n KeepButton,\n type KeepButtonIcon,\n type KeepButtonIconProps,\n type KeepButtonIcons,\n type KeepButtonLabels,\n type KeepButtonProps,\n} from \"./KeepButton\";\nimport {\n KeepCollection,\n type KeepCollectionFeature,\n type KeepCollectionProps,\n type KeepLayoutPreset,\n} from \"./KeepCollection\";\nimport {\n type KeepImageProps,\n KeepItemCard,\n type KeepItemCardLinkProps,\n type KeepItemCardProps,\n type KeepItemCardState,\n} from \"./KeepItemCard\";\nimport { KeepItemCheckbox, type KeepItemCheckboxProps } from \"./KeepItemCheckbox\";\nimport { type KeepDisplayStatus, KeepItemStatusBadge, type KeepItemStatusBadgeProps } from \"./KeepItemStatusBadge\";\nimport { KeepLayout, type KeepLayoutProps } from \"./KeepLayout\";\nimport { KeepList, type KeepListProps, type KeepListState } from \"./KeepList\";\nimport { KeepNoteEditor, type KeepNoteEditorProps, type KeepNoteEditorState } from \"./KeepNoteEditor\";\nimport {\n KeepPruneStaleButton,\n type KeepPruneStaleButtonProps,\n KeepStaleNotice,\n type KeepStaleNoticeProps,\n} from \"./KeepStaleNotice\";\nimport { KeepSyncRecoveryDialog, type KeepSyncRecoveryDialogProps } from \"./KeepSyncRecoveryDialog\";\nimport { KeepSyncStatusBanner, type KeepSyncStatusBannerProps } from \"./KeepSyncStatusBanner\";\nimport { KeepTagEditor, type KeepTagEditorProps, type KeepTagEditorState } from \"./KeepTagEditor\";\nimport { KeepTagFilter, type KeepTagFilterProps, type KeepTagFilterState } from \"./KeepTagFilter\";\nimport { KeepUndo, type KeepUndoProps } from \"./KeepUndo\";\nimport {\n KeepPagination,\n type KeepPaginationProps,\n type KeepPaginationState,\n KeepSearchInput,\n type KeepSearchInputProps,\n KeepSortSelect,\n type KeepSortSelectProps,\n type KeepSortValue,\n} from \"./query-controls\";\nimport {\n KeepAnnouncements,\n type KeepAnnouncementsProps,\n KeepAnnouncer,\n KeepEmptyState,\n type KeepEmptyStateProps,\n KeepStatus,\n type KeepStatusLabels,\n type KeepStatusProps,\n type KeepStatusState,\n type KeepStatusValue,\n} from \"./status\";\nimport {\n type KeepThemeDensity,\n type KeepThemeMode,\n type KeepThemeName,\n KeepThemeProvider,\n type KeepThemeProviderProps,\n type KeepThemeRadius,\n type KeepThemeVariables,\n keepThemeNames,\n} from \"./theme\";\nimport {\n getKeepLocaleLabels,\n type KeepUiLabelContext,\n type KeepUiLabelKey,\n type KeepUiLabels,\n type KeepUiLocale,\n type KeepUiLocaleLabels,\n KeepUiProvider,\n type KeepUiProviderProps,\n useKeepUiLabels,\n} from \"./ui-context\";\nimport {\n createNextPagesRouterAdapter,\n type KeepPagesRouterLike,\n type KeepUrlAdapter,\n useKeepUrlSync,\n} from \"./url-sync\";\n\nexport type KeepKitProviderProps<TMeta = Record<string, unknown>> = Omit<KeepProviderProps<TMeta>, \"children\"> &\n Omit<KeepUiProviderProps, \"children\"> &\n Omit<KeepThemeProviderProps, \"children\"> & { children?: ReactNode };\n\n/** Combines the core store, UI labels, and the global live announcer. */\nexport function KeepKitProvider<TMeta = Record<string, unknown>>({\n labels,\n locale,\n labelResolver,\n theme,\n mode,\n density,\n radius,\n accentColor,\n highContrast,\n reducedMotion,\n variables,\n className: themeClassName,\n style: themeStyle,\n asChild: themeAsChild,\n children,\n ...providerProps\n}: KeepKitProviderProps<TMeta>) {\n return (\n <KeepUiProvider labels={labels} locale={locale} labelResolver={labelResolver}>\n <KeepThemeProvider\n theme={theme}\n mode={mode}\n density={density}\n radius={radius}\n accentColor={accentColor}\n highContrast={highContrast}\n reducedMotion={reducedMotion}\n variables={variables}\n className={themeClassName}\n style={themeStyle}\n asChild={themeAsChild}\n >\n <CoreKeepProvider<TMeta> {...providerProps}>\n {children}\n <KeepAnnouncements />\n </CoreKeepProvider>\n </KeepThemeProvider>\n </KeepUiProvider>\n );\n}\n\nexport type {\n AuthenticatedSyncAuthContext,\n AuthenticatedSyncKit,\n AuthenticatedSyncKitOptions,\n AuthenticatedSyncRequestContext,\n AuthenticatedSyncTransport,\n KeepItem,\n KeepItemInput,\n KeepListQuery,\n KeepSyncConflict,\n KeepSyncResolution,\n KeepSyncState,\n KeepSyncStatus,\n} from \"@keepkit/core/core\";\nexport { createAuthenticatedSyncKit } from \"@keepkit/core/core\";\nexport type {\n KeepButtonState,\n KeepContextValue,\n KeepErrorBoundaryProps,\n KeepProviderProps,\n KeepShortcutOptions,\n} from \"@keepkit/core/react\";\nexport {\n KeepErrorBoundary,\n KeepProvider,\n useKeepContext,\n useKeepItem,\n useKeepList,\n useKeepShortcut,\n} from \"@keepkit/core/react\";\nexport {\n createBrowserStorageAdapter,\n createStorageAdapter,\n FallbackStorageAdapter,\n IndexedDBAdapter,\n IndexedDBSyncQueueAdapter,\n LocalStorageAdapter,\n LocalStorageSyncQueueAdapter,\n SyncStorageAdapter,\n} from \"@keepkit/core/storage\";\nexport type { KeepSelectionScope } from \"./KeepBulkActions\";\nexport { isAllSelected, toggleSelectAll } from \"./KeepBulkActions\";\nexport type { RenderProp } from \"./shared\";\nexport type {\n KeepAnnouncementsProps,\n KeepBackupProps,\n KeepBulkActionsProps,\n KeepBulkActionsState,\n KeepButtonIcon,\n KeepButtonIconProps,\n KeepButtonIcons,\n KeepButtonLabels,\n KeepButtonProps,\n KeepCollectionFeature,\n KeepCollectionProps,\n KeepDisplayStatus,\n KeepEmptyStateProps,\n KeepImageProps,\n KeepItemCardLinkProps,\n KeepItemCardProps,\n KeepItemCardState,\n KeepItemCheckboxProps,\n KeepItemStatusBadgeProps,\n KeepLayoutPreset,\n KeepLayoutProps,\n KeepListProps,\n KeepListState,\n KeepNoteEditorProps,\n KeepNoteEditorState,\n KeepPagesRouterLike,\n KeepPaginationProps,\n KeepPaginationState,\n KeepPruneStaleButtonProps,\n KeepScope,\n KeepSearchInputProps,\n KeepSortSelectProps,\n KeepSortValue,\n KeepStaleNoticeProps,\n KeepStatusLabels,\n KeepStatusProps,\n KeepStatusState,\n KeepStatusValue,\n KeepSyncRecoveryDialogProps,\n KeepSyncStatusBannerProps,\n KeepTagEditorProps,\n KeepTagEditorState,\n KeepTagFilterProps,\n KeepTagFilterState,\n KeepThemeDensity,\n KeepThemeMode,\n KeepThemeName,\n KeepThemeProviderProps,\n KeepThemeRadius,\n KeepThemeVariables,\n KeepUiLabelContext,\n KeepUiLabelKey,\n KeepUiLabels,\n KeepUiLocale,\n KeepUiLocaleLabels,\n KeepUiProviderProps,\n KeepUndoProps,\n KeepUndoState,\n KeepUrlAdapter,\n KeepUrlSyncOptions,\n};\nexport {\n createNextPagesRouterAdapter,\n getKeepLocaleLabels,\n KeepAnnouncements,\n KeepAnnouncer,\n KeepBackup,\n KeepBulkActions,\n KeepButton,\n KeepCollection,\n KeepEmptyState,\n KeepItemCard,\n KeepItemCheckbox,\n KeepItemStatusBadge,\n KeepLayout,\n KeepList,\n KeepNoteEditor,\n KeepPagination,\n KeepPruneStaleButton,\n KeepSearchInput,\n KeepSortSelect,\n KeepStaleNotice,\n KeepStatus,\n KeepSyncRecoveryDialog,\n KeepSyncStatusBanner,\n KeepTagEditor,\n KeepTagFilter,\n KeepThemeProvider,\n KeepUiProvider,\n KeepUndo,\n keepThemeNames,\n useKeepUiLabels,\n useKeepUrlSync,\n};\n\nexport type CreateKeepKitOptions<TMeta = Record<string, unknown>> = CoreCreateKeepKitOptions<TMeta> &\n Omit<KeepUiProviderProps, \"children\"> & {\n theme?: KeepThemeName;\n mode?: KeepThemeMode;\n density?: KeepThemeDensity;\n radius?: KeepThemeRadius;\n accentColor?: KeepThemeProviderProps[\"accentColor\"];\n highContrast?: boolean;\n reducedMotion?: boolean;\n variables?: KeepThemeVariables;\n themeClassName?: string;\n themeStyle?: KeepThemeProviderProps[\"style\"];\n getTitle?: (item: KeepItem<TMeta>) => ReactNode;\n getImageProps?: (item: KeepItem<TMeta>, title: ReactNode) => KeepImageProps | undefined;\n };\n\nexport type KeepKit<TMeta = Record<string, unknown>> = {\n Provider: ComponentType<KeepKitProviderProps<TMeta>>;\n Button: ComponentType<KeepButtonProps<TMeta>>;\n Backup: ComponentType<KeepBackupProps<TMeta>>;\n Collection: ComponentType<KeepCollectionProps<TMeta>>;\n useContext: () => ReturnType<typeof useKeepContext<TMeta>>;\n useItem: (item?: KeepItemInput<TMeta>) => ReturnType<typeof useKeepItem<TMeta>>;\n useList: (query?: KeepListQuery<TMeta>) => ReturnType<typeof useKeepList<TMeta>>;\n useShortcut: (options: KeepShortcutOptions<TMeta>) => void;\n};\n\n/** Create one typed application API for the core and standard UI layer. */\nexport function createKeepKit<TMeta = Record<string, unknown>>(\n options: CreateKeepKitOptions<TMeta> = {},\n): KeepKit<TMeta> {\n const {\n labels,\n locale,\n labelResolver,\n theme,\n mode,\n density,\n radius,\n accentColor,\n highContrast,\n reducedMotion,\n variables,\n themeClassName,\n themeStyle,\n getTitle,\n getImageProps,\n ...coreOptions\n } = options;\n const coreKit = createCoreKeepKit<TMeta>(coreOptions);\n return {\n Provider: (props) => (\n <KeepKitProvider<TMeta>\n {...coreOptions}\n labels={labels}\n locale={locale}\n labelResolver={labelResolver}\n theme={theme}\n mode={mode}\n density={density}\n radius={radius}\n accentColor={accentColor}\n highContrast={highContrast}\n reducedMotion={reducedMotion}\n variables={variables}\n className={themeClassName}\n style={themeStyle}\n {...props}\n />\n ),\n Button: (props) => <KeepButton<TMeta> {...props} />,\n Backup: (props) => <KeepBackup<TMeta> {...props} />,\n Collection: (props) => (\n <KeepCollection<TMeta>\n {...props}\n itemCardProps={{\n ...(getTitle ? { getTitle } : {}),\n ...(getImageProps ? { getImageProps } : {}),\n ...props.itemCardProps,\n }}\n />\n ),\n useContext: () => coreKit.useContext(),\n useItem: (item) => coreKit.useItem(item),\n useList: (query) => coreKit.useList(query),\n useShortcut: (shortcutOptions) => coreKit.useShortcut(shortcutOptions),\n };\n}\n","import type { ImportItemsResult } from \"@keepkit/core/core\";\nimport { useKeepContext } from \"@keepkit/core/react\";\nimport type { ChangeEvent } from \"react\";\nimport { useRef, useState } from \"react\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepBackupOptions<TMeta> = {\n filename: string;\n onExport: ((data: string) => void) | undefined;\n onImported: ((result: ImportItemsResult<TMeta>) => void) | undefined;\n};\n\nexport function useKeepBackup<TMeta>({ filename, onExport, onImported }: KeepBackupOptions<TMeta>) {\n const context = useKeepContext<TMeta>();\n const inputRef = useRef<HTMLInputElement>(null);\n const [mode, setMode] = useState<\"merge\" | \"replace\">(\"merge\");\n const [result, setResult] = useState<ImportItemsResult<TMeta>>();\n const [error, setError] = useState<unknown>();\n\n async function exportBackup() {\n setError(undefined);\n try {\n const data = await context.exportBackup();\n onExport?.(data);\n if (typeof document === \"undefined\") return;\n const url = URL.createObjectURL(new Blob([data], { type: \"application/json\" }));\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = filename;\n anchor.click();\n URL.revokeObjectURL(url);\n } catch (cause) {\n setError(cause);\n }\n }\n\n async function importBackup(event: ChangeEvent<HTMLInputElement>) {\n const file = event.currentTarget.files?.[0];\n event.currentTarget.value = \"\";\n if (!file) return;\n setError(undefined);\n setResult(undefined);\n try {\n const imported = await context.importBackup(await file.text(), { mode });\n setResult(imported);\n onImported?.(imported);\n } catch (cause) {\n setError(cause);\n }\n }\n\n return {\n inputRef,\n mode,\n setMode,\n result,\n error,\n isMutating: context.isMutating,\n exportBackup,\n importBackup,\n openFilePicker: () => inputRef.current?.click(),\n labels: {\n export: useUiLabel(\"exportData\"),\n import: useUiLabel(\"importData\"),\n importMode: useUiLabel(\"importMode\"),\n merge: useUiLabel(\"merge\"),\n replace: useUiLabel(\"replace\"),\n importedCount: useUiLabel(\"importedCount\"),\n failedCount: useUiLabel(\"failedCount\"),\n quotaError: useUiLabel(\"storageQuotaError\"),\n },\n };\n}\n","\"use client\";\n\nimport { createContext, type ReactNode, useContext, useMemo } from \"react\";\nimport { getKeepLocaleLabels, KEEP_LOCALE_LABELS, normalizeKeepLocale } from \"./locales\";\nimport type { KeepUiLabelKey, KeepUiLabels, KeepUiLocaleLabels } from \"./locales/types\";\n\nexport type { KeepUiLocale } from \"./locales\";\nexport type { KeepUiLabelKey, KeepUiLabels, KeepUiLocaleLabels } from \"./locales/types\";\n\nexport type KeepUiLabelContext = {\n locale?: string;\n labels: Readonly<Record<KeepUiLabelKey, string>>;\n customLabels?: KeepUiLabels;\n labelResolver?: (key: KeepUiLabelKey, context: { locale?: string }) => string | undefined;\n};\n\nexport const DEFAULT_LABELS: KeepUiLocaleLabels = KEEP_LOCALE_LABELS.en;\n\nconst KeepUiLabelsContext = createContext<KeepUiLabelContext>({ labels: DEFAULT_LABELS });\n\nexport type KeepUiProviderProps = {\n labels?: KeepUiLabels;\n locale?: string;\n labelResolver?: KeepUiLabelContext[\"labelResolver\"];\n children?: ReactNode;\n};\n\n/** Provides one complete locale-aware label source to every UI primitive. */\nexport function KeepUiProvider({ labels, locale, labelResolver, children }: KeepUiProviderProps) {\n const value = useMemo<KeepUiLabelContext>(() => {\n const resolvedLocale = normalizeKeepLocale(locale);\n const dictionary = getKeepLocaleLabels(resolvedLocale);\n const resolved = { ...DEFAULT_LABELS, ...dictionary, ...labels };\n return { locale: locale ?? resolvedLocale, labels: resolved, customLabels: labels, labelResolver };\n }, [labelResolver, labels, locale]);\n return <KeepUiLabelsContext.Provider value={value}>{children}</KeepUiLabelsContext.Provider>;\n}\n\nexport function useKeepUiLabels(): KeepUiLabelContext {\n return useContext(KeepUiLabelsContext);\n}\n\nexport function useUiLabel(key: KeepUiLabelKey, override?: string): string {\n const context = useKeepUiLabels();\n return (\n override ??\n context.customLabels?.[key] ??\n context.labelResolver?.(key, { locale: context.locale }) ??\n context.labels[key]\n );\n}\n\nexport { getKeepLocaleLabels };\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const DE_LABELS: KeepUiLocaleLabels = {\n save: \"Speichern\",\n saved: \"Gespeichert\",\n remove: \"Entfernen\",\n loading: \"Wird geladen…\",\n saving: \"Wird gespeichert…\",\n syncing: \"Wird synchronisiert…\",\n error: \"Ein Fehler ist aufgetreten.\",\n allTags: \"Alle\",\n tags: \"Tags\",\n filterTags: \"Gespeicherte Elemente nach Tag filtern\",\n note: \"Notiz\",\n saveNote: \"Notiz speichern\",\n noItems: \"Keine gespeicherten Elemente.\",\n loadingItems: \"Gespeicherte Elemente werden geladen…\",\n errorItems: \"Gespeicherte Elemente konnten nicht geladen werden.\",\n search: \"Gespeicherte Elemente durchsuchen\",\n sort: \"Gespeicherte Elemente sortieren\",\n newest: \"Neueste zuerst\",\n oldest: \"Älteste zuerst\",\n savedNewest: \"Zuletzt gespeichert zuerst\",\n savedOldest: \"Am längsten gespeichert zuerst\",\n updatedNewest: \"Zuletzt aktualisiert zuerst\",\n updatedOldest: \"Am längsten nicht aktualisiert zuerst\",\n previousPage: \"Vorherige Seite\",\n nextPage: \"Nächste Seite\",\n pagination: \"Seitennavigation\",\n page: \"Seite\",\n selectItems: \"Gespeicherte Elemente auswählen\",\n selectedCount: \"ausgewählt\",\n deleteSelected: \"Auswahl löschen\",\n tagsToApply: \"Anzuwendende Tags\",\n applyTags: \"Tags anwenden\",\n savedMessage: \"Element gespeichert.\",\n removedMessage: \"Element entfernt.\",\n undo: \"Rückgängig\",\n undoAvailable: \"Element entfernt. Rückgängig machen?\",\n selectionScope: \"Auswahlbereich\",\n currentPage: \"Aktuelle Seite\",\n searchResults: \"Aktuelle Suchergebnisse\",\n allItems: \"Alle gespeicherten Elemente\",\n localVersion: \"Lokal\",\n remoteVersion: \"Server\",\n updatedAt: \"Aktualisiert\",\n statusAvailable: \"Verfügbar\",\n noteSavedMessage: \"Notiz gespeichert.\",\n exportData: \"JSON exportieren\",\n importData: \"JSON importieren\",\n importMode: \"Importmodus\",\n merge: \"Zusammenführen\",\n replace: \"Ersetzen\",\n importedCount: \"Elemente importiert\",\n failedCount: \"Elemente fehlgeschlagen\",\n storageQuotaError: \"Der Speicher ist voll. Schaffen Sie Speicherplatz und versuchen Sie es erneut.\",\n statusExpired: \"Abgelaufen\",\n statusRemoved: \"Entfernt\",\n statusDeleted: \"Gelöscht\",\n statusPrivate: \"Privat\",\n statusUnknown: \"Nicht verfügbar\",\n retry: \"Erneut versuchen\",\n removeFromList: \"Aus Liste entfernen\",\n pruneStale: \"Nicht verfügbare Elemente entfernen\",\n retrySync: \"Synchronisierung erneut versuchen\",\n resolveSync: \"Konflikte lösen\",\n keepLocal: \"Lokale Version behalten\",\n useServer: \"Serverversion verwenden\",\n manualMerge: \"Manuell zusammenführen\",\n close: \"Schließen\",\n backupRecovery: \"Aus Backup wiederherstellen\",\n backupRecoveryDescription:\n \"Wenn lokale Synchronisierungsdaten beschädigt sind, stellen Sie ein gültiges JSON-Backup wieder her.\",\n syncPending: \"Änderungen warten auf die Synchronisierung.\",\n syncSynced: \"Alle Änderungen sind synchronisiert.\",\n syncConflict: \"Einige Änderungen benötigen eine Konfliktlösung.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const EN_LABELS: KeepUiLocaleLabels = {\n save: \"Save\",\n saved: \"Saved\",\n remove: \"Remove\",\n loading: \"Loading…\",\n saving: \"Saving…\",\n syncing: \"Syncing…\",\n error: \"Something went wrong.\",\n allTags: \"All\",\n tags: \"Tags\",\n filterTags: \"Filter saved items by tag\",\n note: \"Note\",\n saveNote: \"Save note\",\n noItems: \"No saved items.\",\n loadingItems: \"Loading saved items…\",\n errorItems: \"Could not load saved items.\",\n search: \"Search saved items\",\n sort: \"Sort saved items\",\n newest: \"Newest first\",\n oldest: \"Oldest first\",\n savedNewest: \"Saved newest first\",\n savedOldest: \"Saved oldest first\",\n updatedNewest: \"Updated newest first\",\n updatedOldest: \"Updated oldest first\",\n previousPage: \"Previous page\",\n nextPage: \"Next page\",\n pagination: \"Pagination\",\n page: \"Page\",\n selectItems: \"Select saved items\",\n selectedCount: \"selected\",\n deleteSelected: \"Delete selected\",\n tagsToApply: \"Tags to apply\",\n applyTags: \"Apply tags\",\n savedMessage: \"Item saved.\",\n removedMessage: \"Item removed.\",\n undo: \"Undo\",\n undoAvailable: \"Item removed. Undo?\",\n selectionScope: \"Selection scope\",\n currentPage: \"Current page\",\n searchResults: \"Current search results\",\n allItems: \"All saved items\",\n localVersion: \"Local\",\n remoteVersion: \"Remote\",\n updatedAt: \"Updated\",\n statusAvailable: \"Available\",\n noteSavedMessage: \"Note saved.\",\n exportData: \"Export JSON\",\n importData: \"Import JSON\",\n importMode: \"Import mode\",\n merge: \"Merge\",\n replace: \"Replace\",\n importedCount: \"items imported\",\n failedCount: \"items failed\",\n storageQuotaError: \"Storage is full. Free space and try again.\",\n statusExpired: \"Expired\",\n statusRemoved: \"Removed\",\n statusDeleted: \"Deleted\",\n statusPrivate: \"Private\",\n statusUnknown: \"Unavailable\",\n retry: \"Retry\",\n removeFromList: \"Remove from list\",\n pruneStale: \"Remove unavailable items\",\n retrySync: \"Retry sync\",\n resolveSync: \"Resolve conflicts\",\n keepLocal: \"Keep local\",\n useServer: \"Use server\",\n manualMerge: \"Manual merge\",\n close: \"Close\",\n backupRecovery: \"Restore from backup\",\n backupRecoveryDescription: \"If local sync data is damaged, restore a known-good JSON backup.\",\n syncPending: \"Changes are waiting to sync.\",\n syncSynced: \"All changes are synced.\",\n syncConflict: \"Some changes need conflict resolution.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const ES_LABELS: KeepUiLocaleLabels = {\n save: \"Guardar\",\n saved: \"Guardado\",\n remove: \"Eliminar\",\n loading: \"Cargando…\",\n saving: \"Guardando…\",\n syncing: \"Sincronizando…\",\n error: \"Se produjo un error.\",\n allTags: \"Todos\",\n tags: \"Etiquetas\",\n filterTags: \"Filtrar elementos guardados por etiqueta\",\n note: \"Nota\",\n saveNote: \"Guardar nota\",\n noItems: \"No hay elementos guardados.\",\n loadingItems: \"Cargando elementos guardados…\",\n errorItems: \"No se pudieron cargar los elementos guardados.\",\n search: \"Buscar elementos guardados\",\n sort: \"Ordenar elementos guardados\",\n newest: \"Más recientes primero\",\n oldest: \"Más antiguos primero\",\n savedNewest: \"Guardados más recientemente primero\",\n savedOldest: \"Guardados más antiguos primero\",\n updatedNewest: \"Actualizados más recientemente primero\",\n updatedOldest: \"Actualizados más antiguos primero\",\n previousPage: \"Página anterior\",\n nextPage: \"Página siguiente\",\n pagination: \"Paginación\",\n page: \"Página\",\n selectItems: \"Seleccionar elementos guardados\",\n selectedCount: \"seleccionados\",\n deleteSelected: \"Eliminar seleccionados\",\n tagsToApply: \"Etiquetas que aplicar\",\n applyTags: \"Aplicar etiquetas\",\n savedMessage: \"Elemento guardado.\",\n removedMessage: \"Elemento eliminado.\",\n undo: \"Deshacer\",\n undoAvailable: \"Elemento eliminado. ¿Deshacer?\",\n selectionScope: \"Ámbito de selección\",\n currentPage: \"Página actual\",\n searchResults: \"Resultados de búsqueda actuales\",\n allItems: \"Todos los elementos guardados\",\n localVersion: \"Local\",\n remoteVersion: \"Servidor\",\n updatedAt: \"Actualizado\",\n statusAvailable: \"Disponible\",\n noteSavedMessage: \"Nota guardada.\",\n exportData: \"Exportar JSON\",\n importData: \"Importar JSON\",\n importMode: \"Modo de importación\",\n merge: \"Combinar\",\n replace: \"Reemplazar\",\n importedCount: \"elementos importados\",\n failedCount: \"elementos fallidos\",\n storageQuotaError: \"El almacenamiento está lleno. Libere espacio y vuelva a intentarlo.\",\n statusExpired: \"Caducado\",\n statusRemoved: \"Eliminado\",\n statusDeleted: \"Borrado\",\n statusPrivate: \"Privado\",\n statusUnknown: \"No disponible\",\n retry: \"Reintentar\",\n removeFromList: \"Quitar de la lista\",\n pruneStale: \"Quitar elementos no disponibles\",\n retrySync: \"Reintentar sincronización\",\n resolveSync: \"Resolver conflictos\",\n keepLocal: \"Conservar versión local\",\n useServer: \"Usar versión del servidor\",\n manualMerge: \"Combinar manualmente\",\n close: \"Cerrar\",\n backupRecovery: \"Restaurar desde copia de seguridad\",\n backupRecoveryDescription: \"Si los datos locales están dañados, restaura una copia JSON válida.\",\n syncPending: \"Hay cambios pendientes de sincronización.\",\n syncSynced: \"Todos los cambios están sincronizados.\",\n syncConflict: \"Algunos cambios necesitan resolver un conflicto.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const FIL_LABELS: KeepUiLocaleLabels = {\n save: \"I-save\",\n saved: \"Nai-save\",\n remove: \"Alisin\",\n loading: \"Naglo-load…\",\n saving: \"Sini-save…\",\n syncing: \"Sini-sync…\",\n error: \"May naganap na error.\",\n allTags: \"Lahat\",\n tags: \"Mga tag\",\n filterTags: \"I-filter ang mga naka-save na item ayon sa tag\",\n note: \"Tala\",\n saveNote: \"I-save ang tala\",\n noItems: \"Walang naka-save na item.\",\n loadingItems: \"Nilo-load ang mga naka-save na item…\",\n errorItems: \"Hindi ma-load ang mga naka-save na item.\",\n search: \"Maghanap ng naka-save na item\",\n sort: \"Ayusin ang mga naka-save na item\",\n newest: \"Pinakabago muna\",\n oldest: \"Pinakaluma muna\",\n savedNewest: \"Pinakabagong na-save muna\",\n savedOldest: \"Pinakamatagal na naka-save muna\",\n updatedNewest: \"Pinakabagong na-update muna\",\n updatedOldest: \"Pinakamatagal na hindi na-update muna\",\n previousPage: \"Nakaraang pahina\",\n nextPage: \"Susunod na pahina\",\n pagination: \"Pagpapa-pahina\",\n page: \"Pahina\",\n selectItems: \"Pumili ng naka-save na item\",\n selectedCount: \"napili\",\n deleteSelected: \"Tanggalin ang napili\",\n tagsToApply: \"Mga tag na ilalapat\",\n applyTags: \"Ilapat ang mga tag\",\n savedMessage: \"Na-save ang item.\",\n removedMessage: \"Inalis ang item.\",\n undo: \"I-undo\",\n undoAvailable: \"Inalis ang item. I-undo?\",\n selectionScope: \"Saklaw ng pagpili\",\n currentPage: \"Kasalukuyang pahina\",\n searchResults: \"Kasalukuyang resulta ng paghahanap\",\n allItems: \"Lahat ng naka-save na item\",\n localVersion: \"Lokal\",\n remoteVersion: \"Remote\",\n updatedAt: \"Na-update\",\n statusAvailable: \"Available\",\n noteSavedMessage: \"Na-save ang tala.\",\n exportData: \"I-export ang JSON\",\n importData: \"I-import ang JSON\",\n importMode: \"Mode ng pag-import\",\n merge: \"Pagsamahin\",\n replace: \"Palitan\",\n importedCount: \"item ang na-import\",\n failedCount: \"item ang nabigo\",\n storageQuotaError: \"Puno na ang storage. Magbakante ng espasyo at subukan muli.\",\n statusExpired: \"Nag-expire\",\n statusRemoved: \"Inalis\",\n statusDeleted: \"Tinanggal\",\n statusPrivate: \"Pribado\",\n statusUnknown: \"Hindi available\",\n retry: \"Subukan muli\",\n removeFromList: \"Alisin sa listahan\",\n pruneStale: \"Alisin ang hindi available na item\",\n retrySync: \"Subukan muli ang sync\",\n resolveSync: \"Ayusin ang mga conflict\",\n keepLocal: \"Panatilihin ang lokal\",\n useServer: \"Gamitin ang server\",\n manualMerge: \"Manwal na pagsamahin\",\n close: \"Isara\",\n backupRecovery: \"I-restore mula sa backup\",\n backupRecoveryDescription: \"Kung sira ang lokal na sync data, mag-restore ng gumaganang JSON backup.\",\n syncPending: \"May mga pagbabagong naghihintay ng sync.\",\n syncSynced: \"Naka-sync na ang lahat ng pagbabago.\",\n syncConflict: \"May mga pagbabagong kailangang ayusin ang conflict.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const FR_LABELS: KeepUiLocaleLabels = {\n save: \"Enregistrer\",\n saved: \"Enregistré\",\n remove: \"Supprimer\",\n loading: \"Chargement…\",\n saving: \"Enregistrement…\",\n syncing: \"Synchronisation…\",\n error: \"Une erreur s’est produite.\",\n allTags: \"Tous\",\n tags: \"Étiquettes\",\n filterTags: \"Filtrer les éléments enregistrés par étiquette\",\n note: \"Note\",\n saveNote: \"Enregistrer la note\",\n noItems: \"Aucun élément enregistré.\",\n loadingItems: \"Chargement des éléments enregistrés…\",\n errorItems: \"Impossible de charger les éléments enregistrés.\",\n search: \"Rechercher des éléments enregistrés\",\n sort: \"Trier les éléments enregistrés\",\n newest: \"Plus récent d’abord\",\n oldest: \"Plus ancien d’abord\",\n savedNewest: \"Enregistrement le plus récent d’abord\",\n savedOldest: \"Enregistrement le plus ancien d’abord\",\n updatedNewest: \"Mise à jour la plus récente d’abord\",\n updatedOldest: \"Mise à jour la plus ancienne d’abord\",\n previousPage: \"Page précédente\",\n nextPage: \"Page suivante\",\n pagination: \"Pagination\",\n page: \"Page\",\n selectItems: \"Sélectionner les éléments enregistrés\",\n selectedCount: \"sélectionnés\",\n deleteSelected: \"Supprimer la sélection\",\n tagsToApply: \"Étiquettes à appliquer\",\n applyTags: \"Appliquer les étiquettes\",\n savedMessage: \"Élément enregistré.\",\n removedMessage: \"Élément supprimé.\",\n undo: \"Annuler\",\n undoAvailable: \"Élément supprimé. Annuler ?\",\n selectionScope: \"Portée de la sélection\",\n currentPage: \"Page actuelle\",\n searchResults: \"Résultats de recherche actuels\",\n allItems: \"Tous les éléments enregistrés\",\n localVersion: \"Local\",\n remoteVersion: \"Distant\",\n updatedAt: \"Mis à jour\",\n statusAvailable: \"Disponible\",\n noteSavedMessage: \"Note enregistrée.\",\n exportData: \"Exporter JSON\",\n importData: \"Importer JSON\",\n importMode: \"Mode d’importation\",\n merge: \"Fusionner\",\n replace: \"Remplacer\",\n importedCount: \"éléments importés\",\n failedCount: \"éléments en échec\",\n storageQuotaError: \"Le stockage est plein. Libérez de l’espace et réessayez.\",\n statusExpired: \"Expiré\",\n statusRemoved: \"Supprimé\",\n statusDeleted: \"Effacé\",\n statusPrivate: \"Privé\",\n statusUnknown: \"Indisponible\",\n retry: \"Réessayer\",\n removeFromList: \"Retirer de la liste\",\n pruneStale: \"Retirer les éléments indisponibles\",\n retrySync: \"Réessayer la synchronisation\",\n resolveSync: \"Résoudre les conflits\",\n keepLocal: \"Garder la version locale\",\n useServer: \"Utiliser la version serveur\",\n manualMerge: \"Fusion manuelle\",\n close: \"Fermer\",\n backupRecovery: \"Restaurer depuis une sauvegarde\",\n backupRecoveryDescription: \"Si les données locales sont endommagées, restaurez une sauvegarde JSON valide.\",\n syncPending: \"Des modifications attendent la synchronisation.\",\n syncSynced: \"Toutes les modifications sont synchronisées.\",\n syncConflict: \"Certaines modifications nécessitent une résolution de conflit.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const ID_LABELS: KeepUiLocaleLabels = {\n save: \"Simpan\",\n saved: \"Tersimpan\",\n remove: \"Hapus\",\n loading: \"Memuat…\",\n saving: \"Menyimpan…\",\n syncing: \"Menyinkronkan…\",\n error: \"Terjadi kesalahan.\",\n allTags: \"Semua\",\n tags: \"Tag\",\n filterTags: \"Filter item tersimpan berdasarkan tag\",\n note: \"Catatan\",\n saveNote: \"Simpan catatan\",\n noItems: \"Belum ada item tersimpan.\",\n loadingItems: \"Memuat item tersimpan…\",\n errorItems: \"Tidak dapat memuat item tersimpan.\",\n search: \"Cari item tersimpan\",\n sort: \"Urutkan item tersimpan\",\n newest: \"Terbaru dahulu\",\n oldest: \"Terlama dahulu\",\n savedNewest: \"Paling baru disimpan dahulu\",\n savedOldest: \"Paling lama disimpan dahulu\",\n updatedNewest: \"Paling baru diperbarui dahulu\",\n updatedOldest: \"Paling lama diperbarui dahulu\",\n previousPage: \"Halaman sebelumnya\",\n nextPage: \"Halaman berikutnya\",\n pagination: \"Paginasi\",\n page: \"Halaman\",\n selectItems: \"Pilih item tersimpan\",\n selectedCount: \"dipilih\",\n deleteSelected: \"Hapus yang dipilih\",\n tagsToApply: \"Tag yang akan diterapkan\",\n applyTags: \"Terapkan tag\",\n savedMessage: \"Item tersimpan.\",\n removedMessage: \"Item dihapus.\",\n undo: \"Urungkan\",\n undoAvailable: \"Item dihapus. Urungkan?\",\n selectionScope: \"Cakupan pilihan\",\n currentPage: \"Halaman saat ini\",\n searchResults: \"Hasil pencarian saat ini\",\n allItems: \"Semua item tersimpan\",\n localVersion: \"Lokal\",\n remoteVersion: \"Server\",\n updatedAt: \"Diperbarui\",\n statusAvailable: \"Tersedia\",\n noteSavedMessage: \"Catatan tersimpan.\",\n exportData: \"Ekspor JSON\",\n importData: \"Impor JSON\",\n importMode: \"Mode impor\",\n merge: \"Gabungkan\",\n replace: \"Ganti\",\n importedCount: \"item diimpor\",\n failedCount: \"item gagal\",\n storageQuotaError: \"Penyimpanan penuh. Kosongkan ruang lalu coba lagi.\",\n statusExpired: \"Kedaluwarsa\",\n statusRemoved: \"Dihapus\",\n statusDeleted: \"Terhapus\",\n statusPrivate: \"Pribadi\",\n statusUnknown: \"Tidak tersedia\",\n retry: \"Coba lagi\",\n removeFromList: \"Hapus dari daftar\",\n pruneStale: \"Hapus item yang tidak tersedia\",\n retrySync: \"Coba sinkronisasi lagi\",\n resolveSync: \"Selesaikan konflik\",\n keepLocal: \"Pertahankan versi lokal\",\n useServer: \"Gunakan versi server\",\n manualMerge: \"Gabungkan manual\",\n close: \"Tutup\",\n backupRecovery: \"Pulihkan dari cadangan\",\n backupRecoveryDescription: \"Jika data sinkronisasi lokal rusak, pulihkan cadangan JSON yang valid.\",\n syncPending: \"Ada perubahan yang menunggu sinkronisasi.\",\n syncSynced: \"Semua perubahan telah disinkronkan.\",\n syncConflict: \"Beberapa perubahan memerlukan penyelesaian konflik.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const IT_LABELS: KeepUiLocaleLabels = {\n save: \"Salva\",\n saved: \"Salvato\",\n remove: \"Rimuovi\",\n loading: \"Caricamento…\",\n saving: \"Salvataggio…\",\n syncing: \"Sincronizzazione…\",\n error: \"Si è verificato un errore.\",\n allTags: \"Tutti\",\n tags: \"Tag\",\n filterTags: \"Filtra gli elementi salvati per tag\",\n note: \"Nota\",\n saveNote: \"Salva nota\",\n noItems: \"Nessun elemento salvato.\",\n loadingItems: \"Caricamento degli elementi salvati…\",\n errorItems: \"Impossibile caricare gli elementi salvati.\",\n search: \"Cerca elementi salvati\",\n sort: \"Ordina elementi salvati\",\n newest: \"Più recenti prima\",\n oldest: \"Più vecchi prima\",\n savedNewest: \"Salvati più di recente prima\",\n savedOldest: \"Salvati meno di recente prima\",\n updatedNewest: \"Aggiornati più di recente prima\",\n updatedOldest: \"Aggiornati meno di recente prima\",\n previousPage: \"Pagina precedente\",\n nextPage: \"Pagina successiva\",\n pagination: \"Paginazione\",\n page: \"Pagina\",\n selectItems: \"Seleziona elementi salvati\",\n selectedCount: \"selezionati\",\n deleteSelected: \"Elimina selezionati\",\n tagsToApply: \"Tag da applicare\",\n applyTags: \"Applica tag\",\n savedMessage: \"Elemento salvato.\",\n removedMessage: \"Elemento rimosso.\",\n undo: \"Annulla\",\n undoAvailable: \"Elemento rimosso. Annullare?\",\n selectionScope: \"Ambito della selezione\",\n currentPage: \"Pagina corrente\",\n searchResults: \"Risultati di ricerca correnti\",\n allItems: \"Tutti gli elementi salvati\",\n localVersion: \"Locale\",\n remoteVersion: \"Server\",\n updatedAt: \"Aggiornato\",\n statusAvailable: \"Disponibile\",\n noteSavedMessage: \"Nota salvata.\",\n exportData: \"Esporta JSON\",\n importData: \"Importa JSON\",\n importMode: \"Modalità di importazione\",\n merge: \"Unisci\",\n replace: \"Sostituisci\",\n importedCount: \"elementi importati\",\n failedCount: \"elementi non riusciti\",\n storageQuotaError: \"Lo spazio di archiviazione è pieno. Libera spazio e riprova.\",\n statusExpired: \"Scaduto\",\n statusRemoved: \"Rimosso\",\n statusDeleted: \"Eliminato\",\n statusPrivate: \"Privato\",\n statusUnknown: \"Non disponibile\",\n retry: \"Riprova\",\n removeFromList: \"Rimuovi dall'elenco\",\n pruneStale: \"Rimuovi elementi non disponibili\",\n retrySync: \"Riprova sincronizzazione\",\n resolveSync: \"Risolvi conflitti\",\n keepLocal: \"Mantieni versione locale\",\n useServer: \"Usa versione del server\",\n manualMerge: \"Unione manuale\",\n close: \"Chiudi\",\n backupRecovery: \"Ripristina dal backup\",\n backupRecoveryDescription: \"Se i dati locali sono danneggiati, ripristina un backup JSON valido.\",\n syncPending: \"Ci sono modifiche in attesa di sincronizzazione.\",\n syncSynced: \"Tutte le modifiche sono sincronizzate.\",\n syncConflict: \"Alcune modifiche richiedono la risoluzione di un conflitto.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const JA_LABELS: KeepUiLocaleLabels = {\n save: \"保存\",\n saved: \"保存済み\",\n remove: \"削除\",\n loading: \"読み込み中…\",\n saving: \"保存中…\",\n syncing: \"同期中…\",\n error: \"問題が発生しました。\",\n allTags: \"すべて\",\n tags: \"タグ\",\n filterTags: \"保存アイテムをタグで絞り込む\",\n note: \"メモ\",\n saveNote: \"メモを保存\",\n noItems: \"保存されたアイテムはありません。\",\n loadingItems: \"保存アイテムを読み込み中…\",\n errorItems: \"保存アイテムを読み込めませんでした。\",\n search: \"保存アイテムを検索\",\n sort: \"保存アイテムを並べ替え\",\n newest: \"新しい順\",\n oldest: \"古い順\",\n savedNewest: \"保存日時の新しい順\",\n savedOldest: \"保存日時の古い順\",\n updatedNewest: \"更新日時の新しい順\",\n updatedOldest: \"更新日時の古い順\",\n previousPage: \"前のページ\",\n nextPage: \"次のページ\",\n pagination: \"ページネーション\",\n page: \"ページ\",\n selectItems: \"保存アイテムを選択\",\n selectedCount: \"件を選択中\",\n deleteSelected: \"選択項目を削除\",\n tagsToApply: \"適用するタグ\",\n applyTags: \"タグを適用\",\n savedMessage: \"アイテムを保存しました。\",\n removedMessage: \"アイテムを削除しました。\",\n undo: \"元に戻す\",\n undoAvailable: \"アイテムを削除しました。元に戻しますか?\",\n selectionScope: \"選択範囲\",\n currentPage: \"表示中のページ\",\n searchResults: \"現在の検索結果全体\",\n allItems: \"すべての保存アイテム\",\n localVersion: \"ローカル\",\n remoteVersion: \"リモート\",\n updatedAt: \"更新日時\",\n statusAvailable: \"利用可能\",\n noteSavedMessage: \"メモを保存しました。\",\n exportData: \"JSONをエクスポート\",\n importData: \"JSONをインポート\",\n importMode: \"インポート方法\",\n merge: \"統合\",\n replace: \"置き換え\",\n importedCount: \"件をインポートしました\",\n failedCount: \"件に失敗しました\",\n storageQuotaError: \"保存容量が不足しています。空き容量を確保して再試行してください。\",\n statusExpired: \"期限切れ\",\n statusRemoved: \"削除済み\",\n statusDeleted: \"削除済み\",\n statusPrivate: \"非公開\",\n statusUnknown: \"利用不可\",\n retry: \"再取得\",\n removeFromList: \"一覧から削除\",\n pruneStale: \"利用できない項目を削除\",\n retrySync: \"同期を再試行\",\n resolveSync: \"競合を解決\",\n keepLocal: \"ローカルを優先\",\n useServer: \"サーバーを優先\",\n manualMerge: \"手動で統合\",\n close: \"閉じる\",\n backupRecovery: \"バックアップから復元\",\n backupRecoveryDescription: \"ローカルの同期データが破損した場合は、正常なJSONバックアップから復元してください。\",\n syncPending: \"同期待ちの変更があります。\",\n syncSynced: \"すべての変更を同期しました。\",\n syncConflict: \"競合している変更があります。解決してください。\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const KO_LABELS: KeepUiLocaleLabels = {\n save: \"저장\",\n saved: \"저장됨\",\n remove: \"삭제\",\n loading: \"로드 중…\",\n saving: \"저장 중…\",\n syncing: \"동기화 중…\",\n error: \"문제가 발생했습니다.\",\n allTags: \"모두\",\n tags: \"태그\",\n filterTags: \"태그로 저장 항목 필터링\",\n note: \"메모\",\n saveNote: \"메모 저장\",\n noItems: \"저장된 항목이 없습니다.\",\n loadingItems: \"저장 항목을 불러오는 중…\",\n errorItems: \"저장 항목을 불러오지 못했습니다.\",\n search: \"저장 항목 검색\",\n sort: \"저장 항목 정렬\",\n newest: \"최신순\",\n oldest: \"오래된순\",\n savedNewest: \"저장일 최신순\",\n savedOldest: \"저장일 오래된순\",\n updatedNewest: \"수정일 최신순\",\n updatedOldest: \"수정일 오래된순\",\n previousPage: \"이전 페이지\",\n nextPage: \"다음 페이지\",\n pagination: \"페이지 매김\",\n page: \"페이지\",\n selectItems: \"저장 항목 선택\",\n selectedCount: \"개 선택됨\",\n deleteSelected: \"선택 항목 삭제\",\n tagsToApply: \"적용할 태그\",\n applyTags: \"태그 적용\",\n savedMessage: \"항목을 저장했습니다.\",\n removedMessage: \"항목을 삭제했습니다.\",\n undo: \"실행 취소\",\n undoAvailable: \"항목을 삭제했습니다. 실행 취소할까요?\",\n selectionScope: \"선택 범위\",\n currentPage: \"현재 페이지\",\n searchResults: \"현재 검색 결과 전체\",\n allItems: \"모든 저장 항목\",\n localVersion: \"로컬\",\n remoteVersion: \"원격\",\n updatedAt: \"업데이트 시간\",\n statusAvailable: \"사용 가능\",\n noteSavedMessage: \"메모를 저장했습니다.\",\n exportData: \"JSON 내보내기\",\n importData: \"JSON 가져오기\",\n importMode: \"가져오기 방식\",\n merge: \"병합\",\n replace: \"교체\",\n importedCount: \"개 가져옴\",\n failedCount: \"개 실패\",\n storageQuotaError: \"저장 공간이 부족합니다. 공간을 확보한 후 다시 시도하세요.\",\n statusExpired: \"만료됨\",\n statusRemoved: \"제거됨\",\n statusDeleted: \"삭제됨\",\n statusPrivate: \"비공개\",\n statusUnknown: \"사용할 수 없음\",\n retry: \"다시 시도\",\n removeFromList: \"목록에서 삭제\",\n pruneStale: \"사용할 수 없는 항목 삭제\",\n retrySync: \"동기화 다시 시도\",\n resolveSync: \"충돌 해결\",\n keepLocal: \"로컬 버전 유지\",\n useServer: \"서버 버전 사용\",\n manualMerge: \"수동 병합\",\n close: \"닫기\",\n backupRecovery: \"백업에서 복원\",\n backupRecoveryDescription: \"로컬 동기화 데이터가 손상된 경우 정상적인 JSON 백업을 복원하세요.\",\n syncPending: \"동기화 대기 중인 변경 사항이 있습니다.\",\n syncSynced: \"모든 변경 사항이 동기화되었습니다.\",\n syncConflict: \"충돌을 해결해야 하는 변경 사항이 있습니다.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const MS_LABELS: KeepUiLocaleLabels = {\n save: \"Simpan\",\n saved: \"Disimpan\",\n remove: \"Buang\",\n loading: \"Memuatkan…\",\n saving: \"Menyimpan…\",\n syncing: \"Menyegerakkan…\",\n error: \"Ralat telah berlaku.\",\n allTags: \"Semua\",\n tags: \"Tag\",\n filterTags: \"Tapis item yang disimpan mengikut tag\",\n note: \"Nota\",\n saveNote: \"Simpan nota\",\n noItems: \"Tiada item disimpan.\",\n loadingItems: \"Memuatkan item yang disimpan…\",\n errorItems: \"Tidak dapat memuatkan item yang disimpan.\",\n search: \"Cari item yang disimpan\",\n sort: \"Isih item yang disimpan\",\n newest: \"Terbaharu dahulu\",\n oldest: \"Terlama dahulu\",\n savedNewest: \"Disimpan paling baharu dahulu\",\n savedOldest: \"Disimpan paling lama dahulu\",\n updatedNewest: \"Dikemas kini paling baharu dahulu\",\n updatedOldest: \"Dikemas kini paling lama dahulu\",\n previousPage: \"Halaman sebelumnya\",\n nextPage: \"Halaman seterusnya\",\n pagination: \"Penomboran halaman\",\n page: \"Halaman\",\n selectItems: \"Pilih item yang disimpan\",\n selectedCount: \"dipilih\",\n deleteSelected: \"Padam pilihan\",\n tagsToApply: \"Tag untuk digunakan\",\n applyTags: \"Gunakan tag\",\n savedMessage: \"Item disimpan.\",\n removedMessage: \"Item dibuang.\",\n undo: \"Buat asal\",\n undoAvailable: \"Item dibuang. Buat asal?\",\n selectionScope: \"Skop pilihan\",\n currentPage: \"Halaman semasa\",\n searchResults: \"Hasil carian semasa\",\n allItems: \"Semua item yang disimpan\",\n localVersion: \"Tempatan\",\n remoteVersion: \"Pelayan\",\n updatedAt: \"Dikemas kini\",\n statusAvailable: \"Tersedia\",\n noteSavedMessage: \"Nota disimpan.\",\n exportData: \"Eksport JSON\",\n importData: \"Import JSON\",\n importMode: \"Mod import\",\n merge: \"Gabung\",\n replace: \"Ganti\",\n importedCount: \"item diimport\",\n failedCount: \"item gagal\",\n storageQuotaError: \"Storan penuh. Kosongkan ruang dan cuba lagi.\",\n statusExpired: \"Tamat tempoh\",\n statusRemoved: \"Dibuang\",\n statusDeleted: \"Dipadam\",\n statusPrivate: \"Peribadi\",\n statusUnknown: \"Tidak tersedia\",\n retry: \"Cuba lagi\",\n removeFromList: \"Buang daripada senarai\",\n pruneStale: \"Buang item yang tidak tersedia\",\n retrySync: \"Cuba penyegerakan lagi\",\n resolveSync: \"Selesaikan konflik\",\n keepLocal: \"Kekalkan versi setempat\",\n useServer: \"Gunakan versi pelayan\",\n manualMerge: \"Gabung secara manual\",\n close: \"Tutup\",\n backupRecovery: \"Pulihkan daripada sandaran\",\n backupRecoveryDescription: \"Jika data penyegerakan setempat rosak, pulihkan sandaran JSON yang sah.\",\n syncPending: \"Terdapat perubahan yang menunggu penyegerakan.\",\n syncSynced: \"Semua perubahan telah disegerakkan.\",\n syncConflict: \"Sesetengah perubahan memerlukan penyelesaian konflik.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const PT_BR_LABELS: KeepUiLocaleLabels = {\n save: \"Salvar\",\n saved: \"Salvo\",\n remove: \"Remover\",\n loading: \"Carregando…\",\n saving: \"Salvando…\",\n syncing: \"Sincronizando…\",\n error: \"Ocorreu um erro.\",\n allTags: \"Todos\",\n tags: \"Tags\",\n filterTags: \"Filtrar itens salvos por tag\",\n note: \"Nota\",\n saveNote: \"Salvar nota\",\n noItems: \"Nenhum item salvo.\",\n loadingItems: \"Carregando itens salvos…\",\n errorItems: \"Não foi possível carregar os itens salvos.\",\n search: \"Pesquisar itens salvos\",\n sort: \"Ordenar itens salvos\",\n newest: \"Mais recentes primeiro\",\n oldest: \"Mais antigos primeiro\",\n savedNewest: \"Salvos mais recentemente primeiro\",\n savedOldest: \"Salvos há mais tempo primeiro\",\n updatedNewest: \"Atualizados mais recentemente primeiro\",\n updatedOldest: \"Atualizados há mais tempo primeiro\",\n previousPage: \"Página anterior\",\n nextPage: \"Próxima página\",\n pagination: \"Paginação\",\n page: \"Página\",\n selectItems: \"Selecionar itens salvos\",\n selectedCount: \"selecionados\",\n deleteSelected: \"Excluir selecionados\",\n tagsToApply: \"Tags a aplicar\",\n applyTags: \"Aplicar tags\",\n savedMessage: \"Item salvo.\",\n removedMessage: \"Item removido.\",\n undo: \"Desfazer\",\n undoAvailable: \"Item removido. Desfazer?\",\n selectionScope: \"Escopo da seleção\",\n currentPage: \"Página atual\",\n searchResults: \"Resultados da pesquisa atual\",\n allItems: \"Todos os itens salvos\",\n localVersion: \"Local\",\n remoteVersion: \"Servidor\",\n updatedAt: \"Atualizado\",\n statusAvailable: \"Disponível\",\n noteSavedMessage: \"Nota salva.\",\n exportData: \"Exportar JSON\",\n importData: \"Importar JSON\",\n importMode: \"Modo de importação\",\n merge: \"Mesclar\",\n replace: \"Substituir\",\n importedCount: \"itens importados\",\n failedCount: \"itens com falha\",\n storageQuotaError: \"O armazenamento está cheio. Libere espaço e tente novamente.\",\n statusExpired: \"Expirado\",\n statusRemoved: \"Removido\",\n statusDeleted: \"Excluído\",\n statusPrivate: \"Privado\",\n statusUnknown: \"Indisponível\",\n retry: \"Tentar novamente\",\n removeFromList: \"Remover da lista\",\n pruneStale: \"Remover itens indisponíveis\",\n retrySync: \"Tentar sincronizar novamente\",\n resolveSync: \"Resolver conflitos\",\n keepLocal: \"Manter versão local\",\n useServer: \"Usar versão do servidor\",\n manualMerge: \"Mesclagem manual\",\n close: \"Fechar\",\n backupRecovery: \"Restaurar do backup\",\n backupRecoveryDescription: \"Se os dados locais estiverem corrompidos, restaure um backup JSON válido.\",\n syncPending: \"Há alterações aguardando sincronização.\",\n syncSynced: \"Todas as alterações foram sincronizadas.\",\n syncConflict: \"Algumas alterações precisam de resolução de conflito.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const RU_LABELS: KeepUiLocaleLabels = {\n save: \"Сохранить\",\n saved: \"Сохранено\",\n remove: \"Удалить\",\n loading: \"Загрузка…\",\n saving: \"Сохранение…\",\n syncing: \"Синхронизация…\",\n error: \"Произошла ошибка.\",\n allTags: \"Все\",\n tags: \"Теги\",\n filterTags: \"Фильтровать сохранённые элементы по тегу\",\n note: \"Заметка\",\n saveNote: \"Сохранить заметку\",\n noItems: \"Нет сохранённых элементов.\",\n loadingItems: \"Загрузка сохранённых элементов…\",\n errorItems: \"Не удалось загрузить сохранённые элементы.\",\n search: \"Поиск сохранённых элементов\",\n sort: \"Сортировка сохранённых элементов\",\n newest: \"Сначала новые\",\n oldest: \"Сначала старые\",\n savedNewest: \"Сначала недавно сохранённые\",\n savedOldest: \"Сначала давно сохранённые\",\n updatedNewest: \"Сначала недавно обновлённые\",\n updatedOldest: \"Сначала давно обновлённые\",\n previousPage: \"Предыдущая страница\",\n nextPage: \"Следующая страница\",\n pagination: \"Пагинация\",\n page: \"Страница\",\n selectItems: \"Выбрать сохранённые элементы\",\n selectedCount: \"выбрано\",\n deleteSelected: \"Удалить выбранные\",\n tagsToApply: \"Теги для применения\",\n applyTags: \"Применить теги\",\n savedMessage: \"Элемент сохранён.\",\n removedMessage: \"Элемент удалён.\",\n undo: \"Отменить\",\n undoAvailable: \"Элемент удалён. Отменить?\",\n selectionScope: \"Область выбора\",\n currentPage: \"Текущая страница\",\n searchResults: \"Текущие результаты поиска\",\n allItems: \"Все сохранённые элементы\",\n localVersion: \"Локальная версия\",\n remoteVersion: \"Серверная версия\",\n updatedAt: \"Обновлено\",\n statusAvailable: \"Доступен\",\n noteSavedMessage: \"Заметка сохранена.\",\n exportData: \"Экспортировать JSON\",\n importData: \"Импортировать JSON\",\n importMode: \"Режим импорта\",\n merge: \"Объединить\",\n replace: \"Заменить\",\n importedCount: \"элементов импортировано\",\n failedCount: \"элементов не удалось импортировать\",\n storageQuotaError: \"Хранилище заполнено. Освободите место и повторите попытку.\",\n statusExpired: \"Истёк срок\",\n statusRemoved: \"Удалён\",\n statusDeleted: \"Удалён навсегда\",\n statusPrivate: \"Приватный\",\n statusUnknown: \"Недоступен\",\n retry: \"Повторить\",\n removeFromList: \"Удалить из списка\",\n pruneStale: \"Удалить недоступные элементы\",\n retrySync: \"Повторить синхронизацию\",\n resolveSync: \"Разрешить конфликты\",\n keepLocal: \"Оставить локальную версию\",\n useServer: \"Использовать версию сервера\",\n manualMerge: \"Объединить вручную\",\n close: \"Закрыть\",\n backupRecovery: \"Восстановить из резервной копии\",\n backupRecoveryDescription: \"Если локальные данные синхронизации повреждены, восстановите рабочую JSON-копию.\",\n syncPending: \"Есть изменения, ожидающие синхронизации.\",\n syncSynced: \"Все изменения синхронизированы.\",\n syncConflict: \"Некоторые изменения требуют разрешения конфликта.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const TH_LABELS: KeepUiLocaleLabels = {\n save: \"บันทึก\",\n saved: \"บันทึกแล้ว\",\n remove: \"ลบ\",\n loading: \"กำลังโหลด…\",\n saving: \"กำลังบันทึก…\",\n syncing: \"กำลังซิงค์…\",\n error: \"เกิดข้อผิดพลาด\",\n allTags: \"ทั้งหมด\",\n tags: \"แท็ก\",\n filterTags: \"กรองรายการที่บันทึกด้วยแท็ก\",\n note: \"บันทึกย่อ\",\n saveNote: \"บันทึกบันทึกย่อ\",\n noItems: \"ไม่มีรายการที่บันทึกไว้\",\n loadingItems: \"กำลังโหลดรายการที่บันทึก…\",\n errorItems: \"โหลดรายการที่บันทึกไม่ได้\",\n search: \"ค้นหารายการที่บันทึก\",\n sort: \"เรียงรายการที่บันทึก\",\n newest: \"ใหม่สุดก่อน\",\n oldest: \"เก่าสุดก่อน\",\n savedNewest: \"บันทึกใหม่สุดก่อน\",\n savedOldest: \"บันทึกเก่าสุดก่อน\",\n updatedNewest: \"อัปเดตใหม่สุดก่อน\",\n updatedOldest: \"อัปเดตเก่าสุดก่อน\",\n previousPage: \"หน้าก่อนหน้า\",\n nextPage: \"หน้าถัดไป\",\n pagination: \"การแบ่งหน้า\",\n page: \"หน้า\",\n selectItems: \"เลือกรายการที่บันทึก\",\n selectedCount: \"รายการที่เลือก\",\n deleteSelected: \"ลบรายการที่เลือก\",\n tagsToApply: \"แท็กที่จะใช้\",\n applyTags: \"ใช้แท็ก\",\n savedMessage: \"บันทึกรายการแล้ว\",\n removedMessage: \"ลบรายการแล้ว\",\n undo: \"เลิกทำ\",\n undoAvailable: \"ลบรายการแล้ว ต้องการเลิกทำหรือไม่\",\n selectionScope: \"ขอบเขตการเลือก\",\n currentPage: \"หน้าปัจจุบัน\",\n searchResults: \"ผลการค้นหาปัจจุบัน\",\n allItems: \"รายการที่บันทึกทั้งหมด\",\n localVersion: \"ในเครื่อง\",\n remoteVersion: \"ระยะไกล\",\n updatedAt: \"อัปเดตเมื่อ\",\n statusAvailable: \"พร้อมใช้งาน\",\n noteSavedMessage: \"บันทึกย่อแล้ว\",\n exportData: \"ส่งออก JSON\",\n importData: \"นำเข้า JSON\",\n importMode: \"โหมดนำเข้า\",\n merge: \"รวม\",\n replace: \"แทนที่\",\n importedCount: \"รายการนำเข้าแล้ว\",\n failedCount: \"รายการล้มเหลว\",\n storageQuotaError: \"พื้นที่จัดเก็บเต็ม โปรดเพิ่มพื้นที่แล้วลองอีกครั้ง\",\n statusExpired: \"หมดอายุ\",\n statusRemoved: \"นำออกแล้ว\",\n statusDeleted: \"ลบแล้ว\",\n statusPrivate: \"เป็นส่วนตัว\",\n statusUnknown: \"ไม่พร้อมใช้งาน\",\n retry: \"ลองใหม่\",\n removeFromList: \"ลบออกจากรายการ\",\n pruneStale: \"ลบรายการที่ใช้งานไม่ได้\",\n retrySync: \"ลองซิงค์ใหม่\",\n resolveSync: \"แก้ไขข้อขัดแย้ง\",\n keepLocal: \"ใช้เวอร์ชันในเครื่อง\",\n useServer: \"ใช้เวอร์ชันเซิร์ฟเวอร์\",\n manualMerge: \"รวมด้วยตนเอง\",\n close: \"ปิด\",\n backupRecovery: \"กู้คืนจากข้อมูลสำรอง\",\n backupRecoveryDescription: \"หากข้อมูลซิงค์ในเครื่องเสียหาย ให้กู้คืนจากข้อมูลสำรอง JSON ที่ใช้งานได้\",\n syncPending: \"มีการเปลี่ยนแปลงที่รอการซิงค์\",\n syncSynced: \"ซิงค์การเปลี่ยนแปลงทั้งหมดแล้ว\",\n syncConflict: \"มีการเปลี่ยนแปลงที่ต้องแก้ไขข้อขัดแย้ง\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const VI_LABELS: KeepUiLocaleLabels = {\n save: \"Lưu\",\n saved: \"Đã lưu\",\n remove: \"Xóa\",\n loading: \"Đang tải…\",\n saving: \"Đang lưu…\",\n syncing: \"Đang đồng bộ…\",\n error: \"Đã xảy ra lỗi.\",\n allTags: \"Tất cả\",\n tags: \"Thẻ\",\n filterTags: \"Lọc mục đã lưu theo thẻ\",\n note: \"Ghi chú\",\n saveNote: \"Lưu ghi chú\",\n noItems: \"Chưa có mục nào được lưu.\",\n loadingItems: \"Đang tải các mục đã lưu…\",\n errorItems: \"Không thể tải các mục đã lưu.\",\n search: \"Tìm kiếm mục đã lưu\",\n sort: \"Sắp xếp mục đã lưu\",\n newest: \"Mới nhất trước\",\n oldest: \"Cũ nhất trước\",\n savedNewest: \"Lưu gần đây nhất trước\",\n savedOldest: \"Lưu lâu nhất trước\",\n updatedNewest: \"Cập nhật gần đây nhất trước\",\n updatedOldest: \"Cập nhật lâu nhất trước\",\n previousPage: \"Trang trước\",\n nextPage: \"Trang sau\",\n pagination: \"Phân trang\",\n page: \"Trang\",\n selectItems: \"Chọn mục đã lưu\",\n selectedCount: \"đã chọn\",\n deleteSelected: \"Xóa mục đã chọn\",\n tagsToApply: \"Thẻ cần áp dụng\",\n applyTags: \"Áp dụng thẻ\",\n savedMessage: \"Đã lưu mục.\",\n removedMessage: \"Đã xóa mục.\",\n undo: \"Hoàn tác\",\n undoAvailable: \"Đã xóa mục. Hoàn tác?\",\n selectionScope: \"Phạm vi lựa chọn\",\n currentPage: \"Trang hiện tại\",\n searchResults: \"Kết quả tìm kiếm hiện tại\",\n allItems: \"Tất cả mục đã lưu\",\n localVersion: \"Cục bộ\",\n remoteVersion: \"Máy chủ\",\n updatedAt: \"Đã cập nhật\",\n statusAvailable: \"Khả dụng\",\n noteSavedMessage: \"Đã lưu ghi chú.\",\n exportData: \"Xuất JSON\",\n importData: \"Nhập JSON\",\n importMode: \"Chế độ nhập\",\n merge: \"Hợp nhất\",\n replace: \"Thay thế\",\n importedCount: \"mục đã nhập\",\n failedCount: \"mục bị lỗi\",\n storageQuotaError: \"Bộ nhớ đã đầy. Hãy giải phóng dung lượng rồi thử lại.\",\n statusExpired: \"Đã hết hạn\",\n statusRemoved: \"Đã gỡ\",\n statusDeleted: \"Đã xóa\",\n statusPrivate: \"Riêng tư\",\n statusUnknown: \"Không khả dụng\",\n retry: \"Thử lại\",\n removeFromList: \"Xóa khỏi danh sách\",\n pruneStale: \"Xóa các mục không khả dụng\",\n retrySync: \"Thử đồng bộ lại\",\n resolveSync: \"Giải quyết xung đột\",\n keepLocal: \"Giữ bản cục bộ\",\n useServer: \"Dùng bản máy chủ\",\n manualMerge: \"Gộp thủ công\",\n close: \"Đóng\",\n backupRecovery: \"Khôi phục từ bản sao lưu\",\n backupRecoveryDescription: \"Nếu dữ liệu đồng bộ cục bộ bị hỏng, hãy khôi phục bản sao lưu JSON hợp lệ.\",\n syncPending: \"Có thay đổi đang chờ đồng bộ.\",\n syncSynced: \"Tất cả thay đổi đã được đồng bộ.\",\n syncConflict: \"Một số thay đổi cần giải quyết xung đột.\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const ZH_HANS_LABELS: KeepUiLocaleLabels = {\n save: \"保存\",\n saved: \"已保存\",\n remove: \"删除\",\n loading: \"加载中…\",\n saving: \"保存中…\",\n syncing: \"同步中…\",\n error: \"发生错误。\",\n allTags: \"全部\",\n tags: \"标签\",\n filterTags: \"按标签筛选已保存项目\",\n note: \"备注\",\n saveNote: \"保存备注\",\n noItems: \"没有已保存的项目。\",\n loadingItems: \"正在加载已保存项目…\",\n errorItems: \"无法加载已保存项目。\",\n search: \"搜索已保存项目\",\n sort: \"排序已保存项目\",\n newest: \"最新优先\",\n oldest: \"最早优先\",\n savedNewest: \"保存时间最新优先\",\n savedOldest: \"保存时间最早优先\",\n updatedNewest: \"更新时间最新优先\",\n updatedOldest: \"更新时间最早优先\",\n previousPage: \"上一页\",\n nextPage: \"下一页\",\n pagination: \"分页\",\n page: \"页\",\n selectItems: \"选择已保存项目\",\n selectedCount: \"项已选择\",\n deleteSelected: \"删除所选项目\",\n tagsToApply: \"要应用的标签\",\n applyTags: \"应用标签\",\n savedMessage: \"项目已保存。\",\n removedMessage: \"项目已删除。\",\n undo: \"撤销\",\n undoAvailable: \"项目已删除。要撤销吗?\",\n selectionScope: \"选择范围\",\n currentPage: \"当前页\",\n searchResults: \"当前全部搜索结果\",\n allItems: \"全部已保存项目\",\n localVersion: \"本地\",\n remoteVersion: \"远程\",\n updatedAt: \"更新时间\",\n statusAvailable: \"可用\",\n noteSavedMessage: \"备注已保存。\",\n exportData: \"导出JSON\",\n importData: \"导入JSON\",\n importMode: \"导入方式\",\n merge: \"合并\",\n replace: \"替换\",\n importedCount: \"项已导入\",\n failedCount: \"项失败\",\n storageQuotaError: \"存储空间已满。请释放空间后重试。\",\n statusExpired: \"已过期\",\n statusRemoved: \"已移除\",\n statusDeleted: \"已删除\",\n statusPrivate: \"不公开\",\n statusUnknown: \"不可用\",\n retry: \"重试\",\n removeFromList: \"从列表中删除\",\n pruneStale: \"删除不可用项目\",\n retrySync: \"重试同步\",\n resolveSync: \"解决冲突\",\n keepLocal: \"保留本地版本\",\n useServer: \"使用服务器版本\",\n manualMerge: \"手动合并\",\n close: \"关闭\",\n backupRecovery: \"从备份恢复\",\n backupRecoveryDescription: \"如果本地同步数据损坏,请恢复可用的 JSON 备份。\",\n syncPending: \"有更改等待同步。\",\n syncSynced: \"所有更改均已同步。\",\n syncConflict: \"有些更改需要解决冲突。\",\n};\n","import type { KeepUiLocaleLabels } from \"./types\";\n\nexport const ZH_HANT_LABELS: KeepUiLocaleLabels = {\n save: \"儲存\",\n saved: \"已儲存\",\n remove: \"刪除\",\n loading: \"載入中…\",\n saving: \"儲存中…\",\n syncing: \"同步中…\",\n error: \"發生錯誤。\",\n allTags: \"全部\",\n tags: \"標籤\",\n filterTags: \"依標籤篩選已儲存項目\",\n note: \"備註\",\n saveNote: \"儲存備註\",\n noItems: \"沒有已儲存的項目。\",\n loadingItems: \"正在載入已儲存項目…\",\n errorItems: \"無法載入已儲存項目。\",\n search: \"搜尋已儲存項目\",\n sort: \"排序已儲存項目\",\n newest: \"最新優先\",\n oldest: \"最早優先\",\n savedNewest: \"儲存時間最新優先\",\n savedOldest: \"儲存時間最早優先\",\n updatedNewest: \"更新時間最新優先\",\n updatedOldest: \"更新時間最早優先\",\n previousPage: \"上一頁\",\n nextPage: \"下一頁\",\n pagination: \"分頁\",\n page: \"頁\",\n selectItems: \"選取已儲存項目\",\n selectedCount: \"項已選取\",\n deleteSelected: \"刪除所選項目\",\n tagsToApply: \"要套用的標籤\",\n applyTags: \"套用標籤\",\n savedMessage: \"項目已儲存。\",\n removedMessage: \"項目已刪除。\",\n undo: \"復原\",\n undoAvailable: \"項目已刪除。要復原嗎?\",\n selectionScope: \"選取範圍\",\n currentPage: \"目前頁面\",\n searchResults: \"目前全部搜尋結果\",\n allItems: \"所有已儲存項目\",\n localVersion: \"本機\",\n remoteVersion: \"遠端\",\n updatedAt: \"更新時間\",\n statusAvailable: \"可用\",\n noteSavedMessage: \"備註已儲存。\",\n exportData: \"匯出JSON\",\n importData: \"匯入JSON\",\n importMode: \"匯入方式\",\n merge: \"合併\",\n replace: \"取代\",\n importedCount: \"項已匯入\",\n failedCount: \"項失敗\",\n storageQuotaError: \"儲存空間已滿。請釋放空間後重試。\",\n statusExpired: \"已過期\",\n statusRemoved: \"已移除\",\n statusDeleted: \"已刪除\",\n statusPrivate: \"不公開\",\n statusUnknown: \"無法使用\",\n retry: \"重試\",\n removeFromList: \"從清單中刪除\",\n pruneStale: \"刪除無法使用的項目\",\n retrySync: \"重試同步\",\n resolveSync: \"解決衝突\",\n keepLocal: \"保留本機版本\",\n useServer: \"使用伺服器版本\",\n manualMerge: \"手動合併\",\n close: \"關閉\",\n backupRecovery: \"從備份還原\",\n backupRecoveryDescription: \"如果本機同步資料損毀,請還原可用的 JSON 備份。\",\n syncPending: \"有變更等待同步。\",\n syncSynced: \"所有變更都已同步。\",\n syncConflict: \"有些變更需要解決衝突。\",\n};\n","import { DE_LABELS } from \"./de\";\nimport { EN_LABELS } from \"./en\";\nimport { ES_LABELS } from \"./es\";\nimport { FIL_LABELS } from \"./fil\";\nimport { FR_LABELS } from \"./fr\";\nimport { ID_LABELS } from \"./id\";\nimport { IT_LABELS } from \"./it\";\nimport { JA_LABELS } from \"./ja\";\nimport { KO_LABELS } from \"./ko\";\nimport { MS_LABELS } from \"./ms\";\nimport { PT_BR_LABELS } from \"./pt-BR\";\nimport { RU_LABELS } from \"./ru\";\nimport { TH_LABELS } from \"./th\";\nimport type { KeepUiLocaleLabels } from \"./types\";\nimport { VI_LABELS } from \"./vi\";\nimport { ZH_HANS_LABELS } from \"./zh-Hans\";\nimport { ZH_HANT_LABELS } from \"./zh-Hant\";\n\nexport const KEEP_BUILT_IN_LOCALES = [\n \"en\",\n \"ja\",\n \"ko\",\n \"zh-Hans\",\n \"zh-Hant\",\n \"th\",\n \"fr\",\n \"es\",\n \"pt-BR\",\n \"it\",\n \"de\",\n \"ru\",\n \"fil\",\n \"vi\",\n \"id\",\n \"ms\",\n] as const;\n\nexport type KeepUiLocale = (typeof KEEP_BUILT_IN_LOCALES)[number];\n\nexport const KEEP_LOCALE_LABELS: Record<KeepUiLocale, KeepUiLocaleLabels> = {\n en: EN_LABELS,\n ja: JA_LABELS,\n ko: KO_LABELS,\n \"zh-Hans\": ZH_HANS_LABELS,\n \"zh-Hant\": ZH_HANT_LABELS,\n th: TH_LABELS,\n fr: FR_LABELS,\n es: ES_LABELS,\n \"pt-BR\": PT_BR_LABELS,\n it: IT_LABELS,\n de: DE_LABELS,\n ru: RU_LABELS,\n fil: FIL_LABELS,\n vi: VI_LABELS,\n id: ID_LABELS,\n ms: MS_LABELS,\n};\n\nconst LOCALE_ALIASES: Record<string, KeepUiLocale> = {\n \"zh-cn\": \"zh-Hans\",\n \"zh-sg\": \"zh-Hans\",\n zh: \"zh-Hans\",\n \"zh-tw\": \"zh-Hant\",\n \"zh-hk\": \"zh-Hant\",\n \"zh-mo\": \"zh-Hant\",\n \"pt-pt\": \"pt-BR\",\n};\n\nexport function normalizeKeepLocale(locale?: string): KeepUiLocale {\n const normalized = locale?.trim().replace(/_/g, \"-\").toLowerCase() ?? \"en\";\n const exact = KEEP_BUILT_IN_LOCALES.find((candidate) => candidate.toLowerCase() === normalized);\n if (exact) return exact;\n if (LOCALE_ALIASES[normalized]) return LOCALE_ALIASES[normalized];\n const language = normalized.split(\"-\")[0];\n const languageMatch = KEEP_BUILT_IN_LOCALES.find((candidate) => candidate.toLowerCase() === language);\n return languageMatch ?? \"en\";\n}\n\nexport function getKeepLocaleLabels(locale?: string): KeepUiLocaleLabels {\n return { ...KEEP_LOCALE_LABELS[normalizeKeepLocale(locale)] };\n}\n","\"use client\";\n\nimport type { ImportItemsResult } from \"@keepkit/core/core\";\nimport type { HTMLAttributes } from \"react\";\nimport { useKeepBackup } from \"./hooks/useKeepBackup\";\n\nexport type KeepBackupProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n filename?: string;\n onExport?: (data: string) => void;\n onImported?: (result: ImportItemsResult<TMeta>) => void;\n};\n\n/** Accessible JSON backup controls backed by the current KeepProvider storage. */\nexport function KeepBackup<TMeta = Record<string, unknown>>({\n filename = \"keepkit-backup.json\",\n onExport,\n onImported,\n ...props\n}: KeepBackupProps<TMeta>) {\n const view = useKeepBackup<TMeta>({ filename, onExport, onImported });\n\n return (\n <section\n {...props}\n data-keepkit=\"backup\"\n data-state={view.error ? \"error\" : view.result ? \"complete\" : \"idle\"}\n data-loading={view.isMutating ? \"true\" : undefined}\n >\n <button\n type=\"button\"\n data-keep-action=\"export-backup\"\n onClick={() => void view.exportBackup()}\n disabled={view.isMutating}\n >\n {view.labels.export}\n </button>\n <label>\n {view.labels.importMode}\n <select\n data-keep-action=\"select-import-mode\"\n value={view.mode}\n onChange={(event) => view.setMode(event.currentTarget.value as \"merge\" | \"replace\")}\n >\n <option value=\"merge\">{view.labels.merge}</option>\n <option value=\"replace\">{view.labels.replace}</option>\n </select>\n </label>\n <button type=\"button\" data-keep-action=\"import-backup\" onClick={view.openFilePicker} disabled={view.isMutating}>\n {view.labels.import}\n </button>\n <input\n ref={view.inputRef}\n type=\"file\"\n data-keep-action=\"select-backup-file\"\n accept=\"application/json,.json\"\n aria-label={view.labels.import}\n onChange={(event) => void view.importBackup(event)}\n />\n {view.result ? (\n <p role=\"status\">\n {view.result.imported} {view.labels.importedCount}; {view.result.failed} {view.labels.failedCount}\n </p>\n ) : null}\n {view.error ? (\n <p role=\"alert\">{isQuotaError(view.error) ? view.labels.quotaError : getErrorMessage(view.error)}</p>\n ) : null}\n </section>\n );\n}\n\nfunction isQuotaError(error: unknown): boolean {\n if (error instanceof Error && error.name === \"KeepStorageQuotaError\") return true;\n if (error && typeof error === \"object\" && \"cause\" in error) return isQuotaError(error.cause);\n return false;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : \"Something went wrong.\";\n}\n","import type { KeepItem, KeepListQuery } from \"@keepkit/core/core\";\nimport { useKeepList } from \"@keepkit/core/react\";\nimport { useState } from \"react\";\nimport type { KeepBulkActionsState, KeepSelectionScope } from \"../KeepBulkActions\";\nimport { normalizeUiTags } from \"../shared\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepBulkActionsOptions<TMeta> = {\n query: KeepListQuery<TMeta> | undefined;\n controlledSelectedIds: string[] | undefined;\n defaultSelectedIds: string[];\n onSelectedIdsChange: ((ids: string[]) => void) | undefined;\n onCompleted: ((action: \"remove\" | \"tags\", ids: string[]) => void) | undefined;\n controlledScope: KeepSelectionScope | undefined;\n onSelectionScopeChange: ((scope: KeepSelectionScope) => void) | undefined;\n};\n\n/** Returns whether every visible item is selected. Empty lists are never all selected. */\nexport function isAllSelected<TMeta>(\n items: readonly Pick<KeepItem<TMeta>, \"id\">[],\n selectedIds: readonly string[],\n): boolean {\n if (items.length === 0) return false;\n const selected = new Set(selectedIds);\n return items.every((item) => selected.has(item.id));\n}\n\n/** Toggles only the visible items, preserving selections outside the current query or page. */\nexport function toggleSelectAll<TMeta>(\n items: readonly Pick<KeepItem<TMeta>, \"id\">[],\n selectedIds: readonly string[],\n): string[] {\n const visibleIds = new Set(items.map((item) => item.id));\n if (isAllSelected(items, selectedIds)) return selectedIds.filter((id) => !visibleIds.has(id));\n const nextIds = [...selectedIds];\n for (const item of items) {\n if (!nextIds.includes(item.id)) nextIds.push(item.id);\n }\n return nextIds;\n}\n\nexport function useKeepBulkActions<TMeta>(options: KeepBulkActionsOptions<TMeta>) {\n const {\n query,\n controlledSelectedIds,\n defaultSelectedIds,\n onSelectedIdsChange,\n onCompleted,\n controlledScope,\n onSelectionScopeChange,\n } = options;\n const list = useKeepList<TMeta>(query);\n const queryList = useKeepList<TMeta>(query ? { ...query, pagination: undefined } : { pagination: undefined });\n const allList = useKeepList<TMeta>({ pagination: undefined });\n const [uncontrolledScope, setUncontrolledScope] = useState<KeepSelectionScope>(controlledScope ?? \"page\");\n const selectionScope = controlledScope ?? uncontrolledScope;\n const targetItems =\n selectionScope === \"page\" ? list.items : selectionScope === \"query\" ? queryList.items : allList.items;\n const [uncontrolledSelectedIds, setUncontrolledSelectedIds] = useState(defaultSelectedIds);\n const selectedIds = controlledSelectedIds ?? uncontrolledSelectedIds;\n const selected = new Set(selectedIds);\n const [tagsInput, setTagsInput] = useState(\"\");\n\n const setSelectionScope = (scope: KeepSelectionScope) => {\n if (controlledScope === undefined) setUncontrolledScope(scope);\n onSelectionScopeChange?.(scope);\n };\n const setSelectedIds = (ids: string[]) => {\n if (controlledSelectedIds === undefined) setUncontrolledSelectedIds(ids);\n onSelectedIdsChange?.(ids);\n };\n const toggle = (id: string) =>\n setSelectedIds(selected.has(id) ? selectedIds.filter((current) => current !== id) : [...selectedIds, id]);\n const allSelected = isAllSelected(targetItems, selectedIds);\n const toggleAll = () => setSelectedIds(toggleSelectAll(targetItems, selectedIds));\n const remove = async () => {\n const ids = [...selectedIds];\n await list.removeBatchWithUndo(ids);\n onCompleted?.(\"remove\", ids);\n setSelectedIds([]);\n };\n const updateTags = async () => {\n const ids = [...selectedIds];\n await list.updateTagsBatch(ids, normalizeUiTags(tagsInput.split(\",\")));\n onCompleted?.(\"tags\", ids);\n setSelectedIds([]);\n };\n const state: KeepBulkActionsState<TMeta> = {\n items: targetItems,\n selectedIds,\n selectedCount: selectedIds.length,\n isAllSelected: allSelected,\n allSelected,\n tagsInput,\n setTagsInput,\n toggle,\n toggleSelectAll: toggleAll,\n toggleAll,\n remove,\n updateTags,\n isMutating: list.isMutating,\n selectionScope,\n setSelectionScope,\n };\n\n return {\n state,\n selected,\n isLoading: list.isLoading,\n labels: {\n selectItems: useUiLabel(\"selectItems\"),\n selectedCount: useUiLabel(\"selectedCount\"),\n deleteSelected: useUiLabel(\"deleteSelected\"),\n tags: useUiLabel(\"tagsToApply\"),\n applyTags: useUiLabel(\"applyTags\"),\n selectionScope: useUiLabel(\"selectionScope\"),\n currentPage: useUiLabel(\"currentPage\"),\n searchResults: useUiLabel(\"searchResults\"),\n allItems: useUiLabel(\"allItems\"),\n },\n };\n}\n","\"use client\";\n\nimport type { KeepItem, KeepItemInput, KeepListQuery } from \"@keepkit/core/core\";\nimport {\n type ComponentType,\n cloneElement,\n type HTMLAttributes,\n type ImgHTMLAttributes,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\nexport type RenderProp<TState> = (state: TState) => ReactNode;\n\nexport type KeepButtonLabels = {\n saved?: ReactNode;\n unsaved?: ReactNode;\n loading?: ReactNode;\n error?: ReactNode;\n savedAriaLabel?: string;\n unsavedAriaLabel?: string;\n};\n\nexport type KeepButtonIconProps = { \"aria-hidden\"?: boolean; className?: string };\nexport type KeepButtonIcon = ReactNode | ComponentType<KeepButtonIconProps>;\nexport type KeepButtonIcons = {\n save?: KeepButtonIcon;\n saved?: KeepButtonIcon;\n remove?: KeepButtonIcon;\n loading?: KeepButtonIcon;\n error?: KeepButtonIcon;\n};\n\nexport type KeepImageProps = ImgHTMLAttributes<HTMLImageElement> & {\n src: string;\n alt: string;\n};\n\nexport function toKeepButtonItem<TMeta>(item: KeepItem<TMeta>): KeepItemInput<TMeta> {\n return {\n id: item.id,\n meta: item.meta,\n targetType: item.targetType,\n note: item.note,\n tags: item.tags,\n };\n}\n\nexport function getMetaTitle<TMeta>(meta: TMeta): string | undefined {\n if (typeof meta !== \"object\" || meta === null || !(\"title\" in meta)) return undefined;\n const title = (meta as { title?: unknown }).title;\n return typeof title === \"string\" && title.trim() ? title.trim() : undefined;\n}\n\nexport function normalizeUiTags(tags: string[]): string[] {\n return [...new Set(tags.map((tag) => tag.trim()).filter(Boolean))];\n}\n\nexport function sortToValue(sort: KeepListQuery[\"sort\"]): `${\"savedAt\" | \"updatedAt\"}:${\"asc\" | \"desc\"}` {\n return `${sort?.by ?? \"updatedAt\"}:${sort?.direction ?? \"desc\"}`;\n}\n\nexport function resolveContent<TState>(content: ReactNode | RenderProp<TState>, state: TState): ReactNode {\n return typeof content === \"function\" ? content(state) : content;\n}\n\nexport function renderRoot(\n asChild: boolean,\n child: ReactNode,\n props: HTMLAttributes<HTMLElement> & Record<string, unknown>,\n body: ReactNode,\n componentName: string,\n): ReactElement {\n if (asChild) {\n if (!isValidElement(child)) throw new Error(`${componentName} with asChild requires a single React element child.`);\n return cloneElement(child as ReactElement<Record<string, unknown>>, { ...props, children: body });\n }\n return <div {...props}>{body}</div>;\n}\n","\"use client\";\n\nimport type { KeepItem } from \"@keepkit/core/core\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\n\nexport type KeepItemCheckboxProps<TMeta = Record<string, unknown>> = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"checked\" | \"defaultChecked\" | \"onChange\"\n> & {\n item: KeepItem<TMeta>;\n checked?: boolean;\n label?: ReactNode;\n onCheckedChange?: (checked: boolean) => void;\n};\n\n/** A reusable accessible selection checkbox for a saved item. */\nexport function KeepItemCheckbox<TMeta = Record<string, unknown>>({\n item,\n checked = false,\n label,\n onCheckedChange,\n \"aria-label\": ariaLabel,\n ...props\n}: KeepItemCheckboxProps<TMeta>) {\n const itemLabel = getItemLabel(item) ?? item.id;\n const accessibleLabel = ariaLabel ?? (typeof label === \"string\" ? label : itemLabel);\n return (\n <input\n {...props}\n type=\"checkbox\"\n checked={checked}\n data-keepkit=\"item-checkbox\"\n data-keep-action=\"select-item\"\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={props.disabled ? \"true\" : undefined}\n aria-label={accessibleLabel}\n onChange={(event) => onCheckedChange?.(event.currentTarget.checked)}\n />\n );\n}\n\nfunction getItemLabel<TMeta>(item: KeepItem<TMeta>): string | undefined {\n if (typeof item.meta !== \"object\" || item.meta === null || !(\"title\" in item.meta)) return undefined;\n const title = (item.meta as { title?: unknown }).title;\n return typeof title === \"string\" && title.trim() ? title.trim() : undefined;\n}\n","\"use client\";\n\nimport type { KeepItem, KeepListQuery } from \"@keepkit/core/core\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { useKeepBulkActions } from \"./hooks/useKeepBulkActions\";\nimport { KeepItemCheckbox } from \"./KeepItemCheckbox\";\nimport { getMetaTitle, type RenderProp } from \"./shared\";\n\nexport { isAllSelected, toggleSelectAll } from \"./hooks/useKeepBulkActions\";\n\nexport type KeepBulkActionsState<TMeta = Record<string, unknown>> = {\n items: KeepItem<TMeta>[];\n selectedIds: string[];\n selectedCount: number;\n isAllSelected: boolean;\n allSelected: boolean;\n tagsInput: string;\n setTagsInput: (value: string) => void;\n toggle: (id: string) => void;\n toggleSelectAll: () => void;\n toggleAll: () => void;\n remove: () => Promise<void>;\n updateTags: () => Promise<void>;\n isMutating: boolean;\n selectionScope: KeepSelectionScope;\n setSelectionScope: (scope: KeepSelectionScope) => void;\n};\n\nexport type KeepSelectionScope = \"page\" | \"query\" | \"all\";\n\nexport type KeepBulkActionsProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n query?: KeepListQuery<TMeta>;\n selectedIds?: string[];\n defaultSelectedIds?: string[];\n onSelectedIdsChange?: (ids: string[]) => void;\n renderItem?: (item: KeepItem<TMeta>, selected: boolean) => ReactNode;\n onCompleted?: (action: \"remove\" | \"tags\", ids: string[]) => void;\n selectionScope?: KeepSelectionScope;\n onSelectionScopeChange?: (scope: KeepSelectionScope) => void;\n render?: RenderProp<KeepBulkActionsState<TMeta>>;\n children?: ReactNode | RenderProp<KeepBulkActionsState<TMeta>>;\n};\n\n/** Selects visible items and performs one storage operation for the whole selection. */\nexport function KeepBulkActions<TMeta = Record<string, unknown>>({\n query,\n selectedIds: controlledSelectedIds,\n defaultSelectedIds = [],\n onSelectedIdsChange,\n renderItem,\n onCompleted,\n selectionScope: controlledScope,\n onSelectionScopeChange,\n render,\n children,\n ...props\n}: KeepBulkActionsProps<TMeta>) {\n const { state, selected, isLoading, labels } = useKeepBulkActions<TMeta>({\n query,\n controlledSelectedIds,\n defaultSelectedIds,\n onSelectedIdsChange,\n onCompleted,\n controlledScope,\n onSelectionScopeChange,\n });\n const body = render\n ? render(state)\n : typeof children === \"function\"\n ? children(state)\n : (children ?? (\n <>\n <fieldset>\n <legend>{labels.selectItems}</legend>\n <label>\n {labels.selectionScope}\n <select\n data-keep-action=\"select-scope\"\n value={state.selectionScope}\n onChange={(event) => state.setSelectionScope(event.currentTarget.value as KeepSelectionScope)}\n >\n <option value=\"page\">{labels.currentPage}</option>\n <option value=\"query\">{labels.searchResults}</option>\n <option value=\"all\">{labels.allItems}</option>\n </select>\n </label>\n <label>\n <input\n type=\"checkbox\"\n data-keep-action=\"select-all\"\n checked={state.allSelected}\n onChange={state.toggleAll}\n aria-label={labels.selectItems}\n />\n {state.selectedIds.length} {labels.selectedCount}\n </label>\n {state.items.map((item) => (\n <span key={item.id}>\n <KeepItemCheckbox\n item={item}\n checked={selected.has(item.id)}\n onCheckedChange={() => state.toggle(item.id)}\n />\n {renderItem ? renderItem(item, selected.has(item.id)) : (getMetaTitle(item.meta) ?? item.id)}\n </span>\n ))}\n </fieldset>\n <button\n type=\"button\"\n data-keep-action=\"delete-selected\"\n onClick={() => void state.remove()}\n disabled={state.selectedIds.length === 0 || state.isMutating}\n >\n {labels.deleteSelected}\n </button>\n <label>\n {labels.tags}\n <input\n data-keep-action=\"edit-tags\"\n value={state.tagsInput}\n onChange={(event) => state.setTagsInput(event.currentTarget.value)}\n />\n </label>\n <button\n type=\"button\"\n data-keep-action=\"apply-tags\"\n onClick={() => void state.updateTags()}\n disabled={state.selectedIds.length === 0 || state.isMutating}\n >\n {labels.applyTags}\n </button>\n </>\n ));\n return (\n <section\n {...props}\n data-keepkit=\"bulk-actions\"\n aria-busy={state.isMutating || props[\"aria-busy\"]}\n data-state={state.selectedIds.length > 0 ? \"selected\" : \"idle\"}\n data-loading={isLoading || state.isMutating ? \"true\" : undefined}\n >\n {body}\n </section>\n );\n}\n","\"use client\";\n\nimport {\n KeepButton as CoreKeepButton,\n type KeepButtonProps as CoreKeepButtonProps,\n type KeepButtonState,\n} from \"@keepkit/core/react\";\nimport { createElement, type ReactNode } from \"react\";\nimport { useKeepButton } from \"./hooks/useKeepButton\";\nimport type { KeepButtonIcon, KeepButtonIcons, KeepButtonLabels } from \"./shared\";\n\nexport type { KeepButtonIcon, KeepButtonIconProps, KeepButtonIcons, KeepButtonLabels } from \"./shared\";\n\nexport type KeepButtonProps<TMeta = Record<string, unknown>> = CoreKeepButtonProps<TMeta> & {\n labels?: KeepButtonLabels;\n icons?: KeepButtonIcons;\n iconOnly?: boolean;\n showLabel?: boolean;\n iconClassName?: string;\n};\n\n/** A style-free save toggle with localized labels and the core button's ARIA/asChild behavior. */\nexport function KeepButton<TMeta = Record<string, unknown>>({\n labels,\n icons,\n iconOnly = false,\n showLabel = true,\n iconClassName,\n ...props\n}: KeepButtonProps<TMeta>) {\n const view = useKeepButton<TMeta>({ item: props.item, labels, icons, children: props.children });\n const getStateContent = (state: KeepButtonState<TMeta>): ReactNode => {\n if (typeof props.children === \"function\") return props.children(state);\n if (props.children !== undefined) return props.children;\n const label = state.error\n ? (labels?.error ?? view.labels.error)\n : state.isMutating\n ? (labels?.loading ?? view.labels.loading)\n : state.isSaved\n ? (labels?.saved ?? view.labels.saved)\n : (labels?.unsaved ?? view.labels.save);\n if (!icons) return label;\n const icon = state.error\n ? icons.error\n : state.isMutating\n ? icons.loading\n : state.isSaved\n ? (icons.remove ?? icons.saved)\n : icons.save;\n return (\n <>\n {renderIcon(icon, iconClassName)}\n {showLabel && !iconOnly ? label : null}\n </>\n );\n };\n const sharedProps = {\n ...props,\n \"data-keepkit\": \"button\",\n \"data-keep-action\": \"toggle-save\",\n \"data-has-custom-icon\": icons ? \"true\" : undefined,\n \"data-icon-only\": iconOnly ? \"true\" : undefined,\n \"aria-busy\": props[\"aria-busy\"] ?? (view.buttonState.isLoading || view.buttonState.isMutating),\n savedLabel: labels?.saved ?? props.savedLabel ?? view.labels.saved,\n unsavedLabel: labels?.unsaved ?? props.unsavedLabel ?? view.labels.save,\n savedAriaLabel: labels?.savedAriaLabel ?? props.savedAriaLabel,\n unsavedAriaLabel: labels?.unsavedAriaLabel ?? props.unsavedAriaLabel,\n };\n if (!view.customStateLabel) return <CoreKeepButton<TMeta> {...sharedProps} />;\n return (\n <CoreKeepButton<TMeta> {...sharedProps}>\n {(state: KeepButtonState<TMeta>) => <>{getStateContent(state)}</>}\n </CoreKeepButton>\n );\n}\n\nfunction renderIcon(icon: KeepButtonIcon | undefined, className?: string): ReactNode {\n if (typeof icon === \"function\") return createElement(icon, { \"aria-hidden\": true, className });\n return icon ?? null;\n}\n","import type { KeepButtonState } from \"@keepkit/core/react\";\nimport { useKeepItem } from \"@keepkit/core/react\";\nimport type { ReactNode } from \"react\";\nimport type { KeepButtonIcons, KeepButtonLabels } from \"../shared\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepButtonOptions<TMeta> = {\n item: Parameters<typeof useKeepItem<TMeta>>[0];\n labels: KeepButtonLabels | undefined;\n icons: KeepButtonIcons | undefined;\n children: ReactNode | ((state: KeepButtonState<TMeta>) => ReactNode);\n};\n\nexport function useKeepButton<TMeta>({ item, labels, icons, children }: KeepButtonOptions<TMeta>) {\n return {\n buttonState: useKeepItem<TMeta>(item),\n customStateLabel:\n labels?.loading !== undefined || labels?.error !== undefined || (icons !== undefined && children === undefined),\n labels: {\n save: useUiLabel(\"save\", typeof labels?.unsaved === \"string\" ? labels.unsaved : undefined),\n saved: useUiLabel(\"saved\", typeof labels?.saved === \"string\" ? labels.saved : undefined),\n loading: useUiLabel(\"loading\", typeof labels?.loading === \"string\" ? labels.loading : undefined),\n error: useUiLabel(\"error\", typeof labels?.error === \"string\" ? labels.error : undefined),\n },\n };\n}\n","\"use client\";\n\nimport type { KeepItem, KeepListQuery, KeepUrlSyncOptions } from \"@keepkit/core/core\";\nimport { KeepErrorBoundary, type KeepErrorBoundaryProps } from \"@keepkit/core/react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { useKeepCollection } from \"./hooks/useKeepCollection\";\nimport { KeepBulkActions } from \"./KeepBulkActions\";\nimport type { KeepItemCardProps } from \"./KeepItemCard\";\nimport { KeepList, type KeepListState } from \"./KeepList\";\nimport { KeepTagFilter } from \"./KeepTagFilter\";\nimport { KeepPagination, KeepSearchInput, KeepSortSelect } from \"./query-controls\";\nimport type { RenderProp } from \"./shared\";\nimport type { KeepUrlAdapter } from \"./url-sync\";\n\nexport type KeepCollectionFeature = \"search\" | \"sort\" | \"pagination\" | \"tagFilter\" | \"bulkActions\";\nexport type KeepLayoutPreset = \"list\" | \"grid\" | \"compact\";\n\nexport type KeepCollectionProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n query?: KeepListQuery<TMeta>;\n pageSize?: number;\n layout?: KeepLayoutPreset;\n urlSync?: boolean | KeepUrlSyncOptions;\n urlAdapter?: KeepUrlAdapter;\n features?: Partial<Record<KeepCollectionFeature, boolean>>;\n renderItem?: (item: KeepItem<TMeta>, state: KeepListState<TMeta>) => ReactNode;\n itemCardProps?: Omit<KeepItemCardProps<TMeta>, \"item\" | \"children\" | \"render\">;\n loading?: ReactNode | RenderProp<KeepListState<TMeta>>;\n empty?: ReactNode | RenderProp<KeepListState<TMeta>>;\n error?: ReactNode | RenderProp<KeepListState<TMeta>>;\n fallback?: KeepErrorBoundaryProps[\"fallback\"];\n onBoundaryError?: KeepErrorBoundaryProps[\"onError\"];\n boundaryResetKey?: unknown;\n};\n\n/** A batteries-included collection with query controls and accessible status feedback. */\nexport function KeepCollection<TMeta = Record<string, unknown>>(props: KeepCollectionProps<TMeta>) {\n const { fallback, onBoundaryError, boundaryResetKey, ...collectionProps } = props;\n const content = <KeepCollectionContent<TMeta> {...collectionProps} />;\n if (fallback === undefined && onBoundaryError === undefined) return content;\n return (\n <KeepErrorBoundary fallback={fallback} onError={onBoundaryError} resetKey={boundaryResetKey}>\n {content}\n </KeepErrorBoundary>\n );\n}\n\nfunction KeepCollectionContent<TMeta = Record<string, unknown>>({\n query = {},\n pageSize = 20,\n layout = \"list\",\n urlSync = false,\n urlAdapter,\n features,\n renderItem,\n itemCardProps,\n loading,\n empty,\n error,\n className,\n ...rootProps\n}: Omit<KeepCollectionProps<TMeta>, \"fallback\" | \"onBoundaryError\" | \"boundaryResetKey\">) {\n const view = useKeepCollection<TMeta>({ query, pageSize, urlSync, urlAdapter, features });\n\n return (\n <section\n {...rootProps}\n className={className}\n data-keepkit=\"collection\"\n data-layout={layout}\n aria-busy={view.list.isLoading || view.list.isMutating || rootProps[\"aria-busy\"]}\n data-state={getCollectionState(view.list)}\n data-loading={view.list.isLoading || view.list.isMutating ? \"true\" : undefined}\n >\n <div>\n {view.enabled.search ? <KeepSearchInput value={view.searchValue} onValueChange={view.setSearchValue} /> : null}\n {view.enabled.sort ? <KeepSortSelect value={view.sortValue} onValueChange={view.setSortValue} /> : null}\n {view.enabled.tagFilter ? (\n <KeepTagFilter<TMeta> query={query} value={view.tag} onValueChange={view.setTag} />\n ) : null}\n </div>\n <KeepList<TMeta>\n query={view.resolvedQuery}\n renderItem={renderItem}\n itemCardProps={itemCardProps}\n layout={layout}\n loading={loading}\n empty={empty}\n error={error}\n />\n {view.enabled.pagination ? (\n <KeepPagination\n totalCount={view.list.totalCount}\n pageSize={view.resolvedPageSize}\n page={view.list.page}\n onPageChange={view.setPage}\n />\n ) : null}\n {view.enabled.bulkActions ? <KeepBulkActions<TMeta> query={view.resolvedQuery} /> : null}\n </section>\n );\n}\n\nfunction getCollectionState<TMeta>(list: KeepListState<TMeta>): \"loading\" | \"error\" | \"empty\" | \"ready\" {\n if (list.error && list.items.length === 0) return \"error\";\n if (list.isLoading && !list.isHydrated) return \"loading\";\n if (list.isHydrated && list.items.length === 0) return \"empty\";\n return \"ready\";\n}\n","import type { KeepListQuery, KeepUrlSyncOptions } from \"@keepkit/core/core\";\nimport { useKeepList } from \"@keepkit/core/react\";\nimport { useMemo, useState } from \"react\";\nimport type { KeepCollectionFeature } from \"../KeepCollection\";\nimport type { KeepSortValue } from \"../query-controls\";\nimport { sortToValue } from \"../shared\";\nimport { type KeepUrlAdapter, useKeepUrlSync } from \"../url-sync\";\n\ntype KeepCollectionOptions<TMeta> = {\n query: KeepListQuery<TMeta>;\n pageSize: number;\n urlSync: boolean | KeepUrlSyncOptions;\n urlAdapter: KeepUrlAdapter | undefined;\n features: Partial<Record<KeepCollectionFeature, boolean>> | undefined;\n};\n\nexport function useKeepCollection<TMeta>({\n query,\n pageSize,\n urlSync,\n urlAdapter,\n features,\n}: KeepCollectionOptions<TMeta>) {\n const enabled = {\n search: true,\n sort: true,\n pagination: true,\n tagFilter: false,\n bulkActions: false,\n ...features,\n };\n const [searchValue, setSearchValue] = useState(query.search?.query ?? \"\");\n const [sort, setSort] = useState(query.sort ?? { by: \"updatedAt\" as const, direction: \"desc\" as const });\n const [tag, setTag] = useState<string | undefined>(query.tags?.[0]);\n const [page, setPage] = useState(query.pagination?.page ?? 1);\n const resolvedPageSize = query.pagination?.pageSize ?? pageSize;\n const resolvedQuery = useMemo<KeepListQuery<TMeta>>(\n () => ({\n ...query,\n search: enabled.search ? { ...query.search, query: searchValue } : query.search,\n sort: enabled.sort ? sort : query.sort,\n tags: tag ? [...new Set([...(query.tags ?? []), tag])] : query.tags,\n pagination: enabled.pagination ? { ...query.pagination, page, pageSize: resolvedPageSize } : query.pagination,\n }),\n [enabled.pagination, enabled.search, enabled.sort, page, query, resolvedPageSize, searchValue, sort, tag],\n );\n useKeepUrlSync({\n enabled: Boolean(urlSync),\n query: resolvedQuery,\n onQueryChange: (nextOrUpdater) => {\n const next = typeof nextOrUpdater === \"function\" ? nextOrUpdater(resolvedQuery) : nextOrUpdater;\n setSearchValue(next.search?.query ?? \"\");\n setSort(next.sort ?? { by: \"updatedAt\", direction: \"desc\" });\n setTag(next.tags?.[0]);\n setPage(next.pagination?.page ?? 1);\n },\n options: typeof urlSync === \"object\" ? urlSync : {},\n adapter: urlAdapter,\n });\n const list = useKeepList<TMeta>(resolvedQuery);\n\n return {\n enabled,\n searchValue,\n sortValue: sortToValue(sort),\n tag,\n resolvedPageSize,\n resolvedQuery,\n list,\n setSearchValue: (value: string) => {\n setSearchValue(value);\n setPage(1);\n },\n setSortValue: (_value: KeepSortValue, nextSort: NonNullable<KeepListQuery[\"sort\"]>) => {\n setSort(nextSort);\n setPage(1);\n },\n setTag: (value?: string) => {\n setTag(value);\n setPage(1);\n },\n setPage,\n };\n}\n","\"use client\";\n\nimport type { KeepListQuery } from \"@keepkit/core/core\";\nimport {\n DEFAULT_KEEP_URL_PARAMS,\n decodeKeepListQuery,\n encodeKeepListQuery,\n type KeepUrlSyncOptions,\n} from \"@keepkit/core/core\";\nimport { useEffect, useRef } from \"react\";\n\nexport type KeepUrlAdapter = {\n getUrl: () => string;\n subscribe?: (listener: () => void) => () => void;\n navigate: (url: string, mode: \"replace\" | \"push\") => void;\n};\n\nexport type KeepPagesRouterLike = {\n asPath?: string;\n push: (url: string, as?: string, options?: { shallow?: boolean }) => Promise<boolean> | boolean;\n replace: (url: string, as?: string, options?: { shallow?: boolean }) => Promise<boolean> | boolean;\n events?: { on: (event: string, listener: () => void) => void; off: (event: string, listener: () => void) => void };\n};\n\nexport type KeepUrlSyncProps<TMeta = Record<string, unknown>> = {\n enabled?: boolean;\n query: KeepListQuery<TMeta>;\n onQueryChange: (query: KeepListQuery<TMeta> | ((previous: KeepListQuery<TMeta>) => KeepListQuery<TMeta>)) => void;\n options?: KeepUrlSyncOptions;\n adapter?: KeepUrlAdapter;\n};\n\n/** Adapter for Next.js Pages Router. It intentionally uses structural typing and has no Next dependency. */\nexport function createNextPagesRouterAdapter(router: KeepPagesRouterLike): KeepUrlAdapter {\n const getUrl = () => router.asPath ?? (typeof window === \"undefined\" ? \"/\" : window.location.href);\n return {\n getUrl,\n subscribe: router.events\n ? (listener) => {\n router.events?.on(\"routeChangeComplete\", listener);\n return () => router.events?.off(\"routeChangeComplete\", listener);\n }\n : undefined,\n navigate: (url, mode) => {\n void router[mode](url, undefined, { shallow: true });\n },\n };\n}\n\n/** Synchronizes collection filters with browser history and supports back/forward restoration. */\nexport function useKeepUrlSync<TMeta = Record<string, unknown>>({\n enabled = true,\n query,\n onQueryChange,\n options = {},\n adapter: providedAdapter,\n}: KeepUrlSyncProps<TMeta>): void {\n const browserAdapterRef = useRef<KeepUrlAdapter>(getBrowserAdapter());\n const adapter = providedAdapter ?? browserAdapterRef.current;\n const onQueryChangeRef = useRef(onQueryChange);\n onQueryChangeRef.current = onQueryChange;\n const skipWriteRef = useRef(true);\n const params = options.params;\n\n useEffect(() => {\n if (!enabled) return;\n const read = () => {\n const url = adapter.getUrl();\n const decoded = decodeKeepListQuery(url, { params });\n skipWriteRef.current = true;\n onQueryChangeRef.current((previousQuery) => ({\n ...previousQuery,\n ...(decoded.search ? { search: decoded.search } : { search: undefined }),\n ...(decoded.tags ? { tags: decoded.tags } : { tags: undefined }),\n ...(decoded.sort ? { sort: decoded.sort } : {}),\n ...(decoded.pagination ? { pagination: { ...previousQuery.pagination, ...decoded.pagination } } : {}),\n }));\n };\n read();\n return adapter.subscribe?.(read);\n }, [adapter, enabled, params]);\n\n useEffect(() => {\n if (!enabled) return;\n if (skipWriteRef.current) {\n skipWriteRef.current = false;\n return;\n }\n const currentUrl = new URL(adapter.getUrl(), \"http://keepkit.invalid\");\n const urlParams = { ...DEFAULT_KEEP_URL_PARAMS, ...params };\n for (const key of Object.values(urlParams)) currentUrl.searchParams.delete(key);\n const nextParams = encodeKeepListQuery(query, { params });\n nextParams.forEach((value, key) => {\n currentUrl.searchParams.append(key, value);\n });\n const nextUrl = `${currentUrl.pathname}${currentUrl.search}${currentUrl.hash}`;\n adapter.navigate(nextUrl, options.history ?? \"push\");\n }, [adapter, enabled, options.history, params, query]);\n}\n\nfunction getBrowserAdapter(): KeepUrlAdapter {\n return {\n getUrl: () => (typeof window === \"undefined\" ? \"/\" : window.location.href),\n subscribe: (listener) => {\n if (typeof window === \"undefined\") return () => undefined;\n window.addEventListener(\"popstate\", listener);\n return () => window.removeEventListener(\"popstate\", listener);\n },\n navigate: (url, mode) => {\n if (typeof window === \"undefined\") return;\n window.history[mode === \"push\" ? \"pushState\" : \"replaceState\"]({}, \"\", url);\n },\n };\n}\n","\"use client\";\n\nimport type { KeepItem, KeepListQuery } from \"@keepkit/core/core\";\nimport { KeepErrorBoundary, type KeepErrorBoundaryProps, type UseKeepListResult } from \"@keepkit/core/react\";\nimport { type HTMLAttributes, isValidElement, type ReactNode } from \"react\";\nimport { useKeepListView } from \"./hooks/useKeepListView\";\nimport type { KeepLayoutPreset } from \"./KeepCollection\";\nimport { KeepItemCard, type KeepItemCardProps } from \"./KeepItemCard\";\nimport { type RenderProp, renderRoot, resolveContent } from \"./shared\";\n\nexport type KeepListState<TMeta = Record<string, unknown>> = UseKeepListResult<TMeta>;\n\nexport type KeepListProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n query?: KeepListQuery<TMeta>;\n children?: ReactNode | RenderProp<KeepListState<TMeta>>;\n renderItem?: (item: KeepItem<TMeta>, state: KeepListState<TMeta>) => ReactNode;\n loading?: ReactNode | RenderProp<KeepListState<TMeta>>;\n empty?: ReactNode | RenderProp<KeepListState<TMeta>>;\n error?: ReactNode | RenderProp<KeepListState<TMeta>>;\n itemCardProps?: Omit<KeepItemCardProps<TMeta>, \"item\" | \"children\" | \"render\">;\n layout?: KeepLayoutPreset;\n asChild?: boolean;\n fallback?: KeepErrorBoundaryProps[\"fallback\"];\n onBoundaryError?: KeepErrorBoundaryProps[\"onError\"];\n boundaryResetKey?: unknown;\n};\n\n/** A list primitive with built-in loading, empty, error, and removal states. */\nexport function KeepList<TMeta = Record<string, unknown>>(props: KeepListProps<TMeta>) {\n const { fallback, onBoundaryError, boundaryResetKey, ...listProps } = props;\n const content = <KeepListContent<TMeta> {...listProps} />;\n if (fallback === undefined && onBoundaryError === undefined) return content;\n return (\n <KeepErrorBoundary fallback={fallback} onError={onBoundaryError} resetKey={boundaryResetKey}>\n {content}\n </KeepErrorBoundary>\n );\n}\n\nfunction KeepListContent<TMeta = Record<string, unknown>>({\n query,\n children,\n renderItem,\n loading,\n empty,\n error: errorContent,\n itemCardProps,\n layout = \"list\",\n asChild = false,\n className,\n ...rootProps\n}: KeepListProps<TMeta>) {\n const view = useKeepListView<TMeta>(query);\n const { state } = view;\n const body = getListBody(state, {\n children,\n renderItem,\n loading: loading ?? view.labels.loading,\n empty: empty ?? view.labels.empty,\n error: errorContent ?? view.labels.error,\n itemCardProps,\n layout,\n });\n return renderRoot(\n asChild,\n asChild && isValidElement(children) ? children : undefined,\n {\n ...rootProps,\n className,\n \"data-keepkit\": \"list\",\n \"data-layout\": layout,\n \"aria-busy\": state.isLoading || rootProps[\"aria-busy\"],\n \"data-state\": getListState(state),\n \"data-loading\": state.isLoading ? \"true\" : undefined,\n },\n body,\n \"KeepList\",\n );\n}\n\nfunction getListState<TMeta>(state: KeepListState<TMeta>): \"loading\" | \"error\" | \"empty\" | \"ready\" {\n if (state.error && state.items.length === 0) return \"error\";\n if (state.isLoading && !state.isHydrated) return \"loading\";\n if (state.isHydrated && state.items.length === 0) return \"empty\";\n return \"ready\";\n}\n\nfunction getListBody<TMeta>(\n state: KeepListState<TMeta>,\n options: {\n children?: ReactNode | RenderProp<KeepListState<TMeta>>;\n renderItem?: (item: KeepItem<TMeta>, state: KeepListState<TMeta>) => ReactNode;\n loading: ReactNode | RenderProp<KeepListState<TMeta>>;\n empty: ReactNode | RenderProp<KeepListState<TMeta>>;\n error: ReactNode | RenderProp<KeepListState<TMeta>>;\n itemCardProps?: Omit<KeepItemCardProps<TMeta>, \"item\" | \"children\" | \"render\">;\n layout: KeepLayoutPreset;\n },\n): ReactNode {\n if (state.error && state.items.length === 0) return resolveContent(options.error, state);\n if (state.isLoading && !state.isHydrated) return resolveContent(options.loading, state);\n if (state.isHydrated && state.items.length === 0) return resolveContent(options.empty, state);\n if (typeof options.children === \"function\") return options.children(state);\n if (options.children !== undefined && !isValidElement(options.children)) return options.children;\n return (\n <ul data-layout={options.layout}>\n {state.items.map((item) =>\n options.renderItem ? (\n options.renderItem(item, state)\n ) : (\n <li key={item.id}>\n <KeepItemCard item={item} {...options.itemCardProps} />\n </li>\n ),\n )}\n </ul>\n );\n}\n","import type { KeepListQuery } from \"@keepkit/core/core\";\nimport { useKeepList } from \"@keepkit/core/react\";\nimport { useUiLabel } from \"../ui-context\";\n\nexport function useKeepListView<TMeta>(query: KeepListQuery<TMeta> | undefined) {\n return {\n state: useKeepList<TMeta>(query),\n labels: {\n loading: useUiLabel(\"loadingItems\"),\n empty: useUiLabel(\"noItems\"),\n error: useUiLabel(\"errorItems\"),\n },\n };\n}\n","\"use client\";\n\nimport type { KeepItem } from \"@keepkit/core/core\";\nimport {\n type ComponentType,\n type HTMLAttributeAnchorTarget,\n type HTMLAttributes,\n type ImgHTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { useKeepItemCard } from \"./hooks/useKeepItemCard\";\nimport { KeepButton, type KeepButtonLabels } from \"./KeepButton\";\nimport { KeepStaleNotice } from \"./KeepStaleNotice\";\nimport { type RenderProp, renderRoot, toKeepButtonItem } from \"./shared\";\n\nexport type KeepItemCardState<TMeta = Record<string, unknown>> = {\n item: KeepItem<TMeta>;\n isSaved: boolean;\n isMutating: boolean;\n error: unknown | null;\n remove: () => Promise<void>;\n status: KeepItem[\"status\"];\n};\n\nexport type KeepItemCardLinkProps = {\n href: string;\n children?: ReactNode;\n target?: HTMLAttributeAnchorTarget;\n rel?: string;\n onClick?: (event: MouseEvent<HTMLElement>) => void;\n};\n\nexport type KeepImageProps = ImgHTMLAttributes<HTMLImageElement> & {\n src: string;\n alt: string;\n};\n\nexport type KeepItemCardProps<TMeta = Record<string, unknown>> = Omit<\n HTMLAttributes<HTMLElement>,\n \"children\" | \"title\"\n> & {\n item: KeepItem<TMeta>;\n title?: ReactNode | ((item: KeepItem<TMeta>) => ReactNode);\n getTitle?: (item: KeepItem<TMeta>) => ReactNode;\n getImageProps?: (item: KeepItem<TMeta>, title: ReactNode) => KeepImageProps | undefined;\n imageComponent?: ComponentType<KeepImageProps>;\n renderImage?: (props: KeepImageProps, item: KeepItem<TMeta>) => ReactNode;\n renderTags?: (tags: string[], item: KeepItem<TMeta>) => ReactNode;\n showTags?: boolean;\n showSavedAt?: boolean;\n imageAlt?: string;\n render?: RenderProp<KeepItemCardState<TMeta>>;\n children?: ReactNode | RenderProp<KeepItemCardState<TMeta>>;\n removeLabel?: string;\n onRemoveError?: (error: unknown) => void;\n onRemoved?: (item: KeepItem<TMeta>) => void;\n onRetry?: (item: KeepItem<TMeta>) => void | Promise<void>;\n showSaveButton?: boolean;\n saveButtonLabels?: KeepButtonLabels;\n asChild?: boolean;\n href?: string | ((item: KeepItem<TMeta>) => string | undefined);\n onOpen?: (item: KeepItem<TMeta>, event: MouseEvent<HTMLElement>) => void;\n linkTarget?: \"title\" | \"card\";\n linkComponent?: ComponentType<KeepItemCardLinkProps>;\n linkTargetAttribute?: HTMLAttributeAnchorTarget;\n linkRel?: string;\n};\n\n/** A low-dependency item presentation primitive. The default markup can be replaced with render props. */\nexport function KeepItemCard<TMeta = Record<string, unknown>>({\n item,\n title,\n getTitle,\n getImageProps,\n imageComponent: ImageComponent,\n renderImage,\n renderTags,\n showTags = true,\n showSavedAt = true,\n imageAlt,\n render,\n children,\n removeLabel,\n onRemoveError,\n onRemoved,\n onRetry,\n showSaveButton = true,\n saveButtonLabels,\n asChild = false,\n href: hrefOption,\n onOpen,\n linkTarget = \"title\",\n linkComponent: LinkComponent,\n linkTargetAttribute,\n linkRel,\n className,\n ...rootProps\n}: KeepItemCardProps<TMeta>) {\n const view = useKeepItemCard<TMeta>({\n item,\n title,\n getTitle,\n getImageProps,\n href: hrefOption,\n linkTargetAttribute,\n linkRel,\n onRemoveError,\n onRemoved,\n });\n const contentChildren = asChild && isValidElement(children) ? undefined : children;\n\n function renderLink(content: ReactNode): ReactNode {\n if (!view.href || !view.isAvailable) return content;\n const linkProps: KeepItemCardLinkProps = {\n href: view.href,\n target: view.resolvedLinkTarget,\n rel: view.resolvedLinkRel,\n onClick: (event) => onOpen?.(item, event),\n children: content,\n };\n return LinkComponent ? <LinkComponent {...linkProps} /> : <a {...linkProps} />;\n }\n\n const body = render\n ? render(view.state)\n : typeof contentChildren === \"function\"\n ? contentChildren(view.state)\n : (contentChildren ?? (\n <>\n {view.imageProps\n ? (renderImage?.({ ...view.imageProps, alt: imageAlt ?? view.imageProps.alt }, item) ??\n (ImageComponent ? (\n <ImageComponent {...view.imageProps} alt={imageAlt ?? view.imageProps.alt} />\n ) : (\n <img {...view.imageProps} alt={imageAlt ?? view.imageProps.alt} />\n )))\n : null}\n <h3>\n {linkTarget === \"title\" ? (\n view.isAvailable ? (\n renderLink(view.resolvedTitle)\n ) : view.href ? (\n <span aria-disabled=\"true\" data-link-disabled=\"true\">\n {view.resolvedTitle}\n </span>\n ) : (\n view.resolvedTitle\n )\n ) : (\n view.resolvedTitle\n )}\n </h3>\n {showSavedAt ? (\n <div data-card-meta>\n <span>{view.labels.savedAt}:</span>{\" \"}\n <time dateTime={new Date(item.savedAt).toISOString()}>{formatSavedAt(item.savedAt)}</time>\n </div>\n ) : null}\n {showTags && (item.tags?.length ?? 0) > 0 ? (\n renderTags ? (\n renderTags(item.tags ?? [], item)\n ) : (\n <ul aria-label={view.labels.tags}>\n {item.tags?.map((tag) => (\n <li key={tag}>{tag}</li>\n ))}\n </ul>\n )\n ) : null}\n {view.itemState.error ? (\n <p role=\"alert\">{getErrorMessage(view.itemState.error, view.labels.error)}</p>\n ) : null}\n {view.statusLabel ? <KeepStaleNotice item={item} onRetry={onRetry} onRemoved={onRemoved} /> : null}\n {showSaveButton && !view.statusLabel ? (\n <KeepButton\n item={toKeepButtonItem(item)}\n labels={saveButtonLabels}\n getAriaLabel={(buttonState) =>\n `${buttonState.isSaved ? view.labels.remove : view.labels.save} ${String(view.resolvedTitle)}`\n }\n />\n ) : null}\n {!view.statusLabel ? (\n <button\n type=\"button\"\n data-keep-action=\"remove-item\"\n onClick={() => void view.remove()}\n disabled={view.itemState.isMutating}\n >\n {removeLabel ?? view.labels.remove}\n </button>\n ) : null}\n </>\n ));\n\n const linkedBody = linkTarget === \"card\" && view.isAvailable ? renderLink(body) : body;\n return renderRoot(\n asChild,\n isValidElement(children) ? children : undefined,\n {\n ...rootProps,\n className,\n \"data-keepkit\": \"card\",\n \"aria-busy\": view.itemState.isMutating || rootProps[\"aria-busy\"],\n \"aria-disabled\": rootProps[\"aria-disabled\"] ?? (!view.isAvailable ? \"true\" : undefined),\n \"data-state\": view.itemState.error ? \"error\" : view.itemState.isSaved ? \"saved\" : \"unsaved\",\n \"data-status\": item.status ?? \"available\",\n \"data-item-status\": view.displayStatus,\n \"data-loading\": view.itemState.isMutating ? \"true\" : undefined,\n },\n linkedBody,\n \"KeepItemCard\",\n );\n}\n\nfunction formatSavedAt(timestamp: number): string {\n return new Date(timestamp).toISOString().slice(0, 10);\n}\n\nfunction getErrorMessage(error: unknown, fallback: string): string {\n return error instanceof Error ? error.message : fallback;\n}\n","import type { KeepItem } from \"@keepkit/core/core\";\nimport { useKeepItem } from \"@keepkit/core/react\";\nimport type { ReactNode } from \"react\";\nimport type { KeepImageProps, KeepItemCardState } from \"../KeepItemCard\";\nimport { getMetaTitle } from \"../shared\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepItemCardOptions<TMeta> = {\n item: KeepItem<TMeta>;\n title: ReactNode | ((item: KeepItem<TMeta>) => ReactNode);\n getTitle: ((item: KeepItem<TMeta>) => ReactNode) | undefined;\n getImageProps: ((item: KeepItem<TMeta>, title: ReactNode) => KeepImageProps | undefined) | undefined;\n href: string | ((item: KeepItem<TMeta>) => string | undefined) | undefined;\n linkTargetAttribute: React.HTMLAttributeAnchorTarget | undefined;\n linkRel: string | undefined;\n onRemoveError: ((error: unknown) => void) | undefined;\n onRemoved: ((item: KeepItem<TMeta>) => void) | undefined;\n};\n\nexport function useKeepItemCard<TMeta>(options: KeepItemCardOptions<TMeta>) {\n const {\n item,\n title,\n getTitle,\n getImageProps,\n href: hrefOption,\n linkTargetAttribute,\n linkRel,\n onRemoveError,\n onRemoved,\n } = options;\n const itemState = useKeepItem<TMeta>(item);\n const resolvedTitle =\n typeof title === \"function\" ? title(item) : (title ?? getTitle?.(item) ?? getMetaTitle(item.meta) ?? item.id);\n const imageProps = getImageProps?.(item, resolvedTitle);\n const href = typeof hrefOption === \"function\" ? hrefOption(item) : hrefOption;\n const isAvailable = item.status === undefined || item.status === \"available\";\n const isExternalLink = href ? /^(?:[a-z][a-z\\d+.-]*:|\\/\\/)/i.test(href) : false;\n const statusLabelKey = item.status && item.status !== \"available\" ? getStatusLabelKey(item.status) : \"statusUnknown\";\n const unavailableLabel = useUiLabel(statusLabelKey);\n const state: KeepItemCardState<TMeta> = {\n item,\n isSaved: itemState.isSaved,\n isMutating: itemState.isMutating,\n error: itemState.error,\n remove: itemState.remove,\n status: item.status,\n };\n\n return {\n itemState,\n state,\n resolvedTitle,\n imageProps,\n href,\n isAvailable,\n displayStatus: getDisplayStatus(item.status),\n resolvedLinkTarget: linkTargetAttribute ?? (isExternalLink ? \"_blank\" : undefined),\n resolvedLinkRel: linkRel ?? (isExternalLink ? \"noreferrer\" : undefined),\n statusLabel: item.status && item.status !== \"available\" ? unavailableLabel : undefined,\n remove: async () => {\n try {\n await itemState.remove();\n onRemoved?.(item);\n } catch (cause) {\n onRemoveError?.(cause);\n }\n },\n labels: {\n save: useUiLabel(\"save\"),\n savedAt: useUiLabel(\"saved\"),\n error: useUiLabel(\"error\"),\n remove: useUiLabel(\"remove\"),\n tags: useUiLabel(\"tags\"),\n },\n };\n}\n\nfunction getStatusLabelKey(\n status: NonNullable<KeepItem[\"status\"]>,\n): \"statusExpired\" | \"statusRemoved\" | \"statusDeleted\" | \"statusPrivate\" | \"statusUnknown\" {\n switch (status) {\n case \"expired\":\n return \"statusExpired\";\n case \"removed\":\n return \"statusRemoved\";\n case \"deleted\":\n return \"statusDeleted\";\n case \"private\":\n return \"statusPrivate\";\n default:\n return \"statusUnknown\";\n }\n}\n\nfunction getDisplayStatus(status: KeepItem[\"status\"]): \"available\" | \"expired\" | \"removed\" | \"restricted\" {\n if (status === undefined || status === \"available\") return \"available\";\n if (status === \"expired\") return \"expired\";\n if (status === \"removed\") return \"removed\";\n return \"restricted\";\n}\n","import type { KeepItem, KeepItemStatus } from \"@keepkit/core/core\";\nimport { useKeepContext } from \"@keepkit/core/react\";\nimport { useState } from \"react\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepStaleNoticeOptions<TMeta> = {\n item: KeepItem<TMeta>;\n onRetry: ((item: KeepItem<TMeta>) => void | Promise<void>) | undefined;\n onRemoved: ((item: KeepItem<TMeta>) => void) | undefined;\n};\n\nexport function useKeepStaleNotice<TMeta>({ item, onRetry, onRemoved }: KeepStaleNoticeOptions<TMeta>) {\n const context = useKeepContext<TMeta>();\n const [isRetrying, setIsRetrying] = useState(false);\n const [error, setError] = useState<unknown | null>(null);\n\n async function retry() {\n setError(null);\n setIsRetrying(true);\n try {\n if (onRetry) await onRetry(item);\n else await context.revalidateItems();\n } catch (cause) {\n setError(cause);\n } finally {\n setIsRetrying(false);\n }\n }\n\n async function remove() {\n try {\n await context.removeItemWithUndo(item.id);\n onRemoved?.(item);\n } catch (cause) {\n setError(cause);\n }\n }\n\n return {\n status: item.status && item.status !== \"available\" ? item.status : \"unknown\",\n error,\n isRetrying,\n isMutating: context.isMutating,\n retry,\n remove,\n labels: {\n retry: useUiLabel(\"retry\"),\n remove: useUiLabel(\"removeFromList\"),\n error: useUiLabel(\"error\"),\n },\n };\n}\n\ntype KeepPruneStaleOptions = {\n statuses: KeepItemStatus[];\n onPruned: ((ids: string[]) => void) | undefined;\n};\n\nexport function useKeepPruneStale<TMeta>({ statuses, onPruned }: KeepPruneStaleOptions) {\n const context = useKeepContext<TMeta>();\n const staleIds = context.items.filter((item) => item.status && statuses.includes(item.status)).map((item) => item.id);\n\n return {\n staleIds,\n isMutating: context.isMutating,\n label: useUiLabel(\"pruneStale\"),\n prune: async () => {\n const ids = [...staleIds];\n await context.removeItemsWithUndo(ids);\n onPruned?.(ids);\n },\n };\n}\n","import type { KeepItemStatus } from \"@keepkit/core/core\";\nimport type { KeepDisplayStatus } from \"../KeepItemStatusBadge\";\nimport { type KeepUiLabelKey, useUiLabel } from \"../ui-context\";\n\nexport function useKeepItemStatusBadge(status: KeepItemStatus | \"restricted\") {\n return { resolvedStatus: getDisplayStatus(status), statusLabel: useUiLabel(getStatusLabelKey(status)) };\n}\n\nfunction getStatusLabelKey(status: KeepItemStatus | \"restricted\"): KeepUiLabelKey {\n switch (status) {\n case \"available\":\n return \"statusAvailable\";\n case \"expired\":\n return \"statusExpired\";\n case \"removed\":\n return \"statusRemoved\";\n case \"deleted\":\n return \"statusDeleted\";\n case \"private\":\n return \"statusPrivate\";\n case \"unknown\":\n return \"statusUnknown\";\n case \"restricted\":\n return \"statusPrivate\";\n }\n}\n\nfunction getDisplayStatus(status: KeepItemStatus | \"restricted\"): KeepDisplayStatus {\n if (status === \"available\") return \"available\";\n if (status === \"expired\") return \"expired\";\n if (status === \"removed\") return \"removed\";\n return \"restricted\";\n}\n","\"use client\";\n\nimport type { KeepItemStatus } from \"@keepkit/core/core\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { useKeepItemStatusBadge } from \"./hooks/useKeepItemStatusBadge\";\n\nexport type KeepItemStatusBadgeProps = Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> & {\n status?: KeepItemStatus | \"restricted\";\n label?: ReactNode;\n};\n\nexport type KeepDisplayStatus = \"available\" | \"expired\" | \"removed\" | \"restricted\";\n\n/** Displays the normalized availability state of a saved item. */\nexport function KeepItemStatusBadge({ status = \"available\", label, className, ...props }: KeepItemStatusBadgeProps) {\n const view = useKeepItemStatusBadge(status);\n return (\n <span\n {...props}\n className={className}\n data-keepkit=\"status-badge\"\n data-status={status}\n data-item-status={view.resolvedStatus}\n >\n {label ?? view.statusLabel}\n </span>\n );\n}\n","\"use client\";\n\nimport type { KeepItem, KeepItemStatus } from \"@keepkit/core/core\";\nimport type { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from \"react\";\nimport { useKeepPruneStale, useKeepStaleNotice } from \"./hooks/useKeepStaleNotice\";\nimport { KeepItemStatusBadge } from \"./KeepItemStatusBadge\";\n\nexport type KeepStaleNoticeProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n item: KeepItem<TMeta>;\n onRetry?: (item: KeepItem<TMeta>) => void | Promise<void>;\n onRemoved?: (item: KeepItem<TMeta>) => void;\n retryLabel?: ReactNode;\n removeLabel?: ReactNode;\n children?: ReactNode;\n};\n\n/** Provides retry and remove actions for an item whose source is no longer available. */\nexport function KeepStaleNotice<TMeta = Record<string, unknown>>({\n item,\n onRetry,\n onRemoved,\n retryLabel,\n removeLabel,\n children,\n className,\n ...props\n}: KeepStaleNoticeProps<TMeta>) {\n const view = useKeepStaleNotice<TMeta>({ item, onRetry, onRemoved });\n\n return (\n <aside {...props} className={className} data-keepkit=\"stale-notice\" data-state={view.error ? \"error\" : \"stale\"}>\n <KeepItemStatusBadge status={view.status} />\n {children ?? (item.statusReason ? <p>{item.statusReason}</p> : null)}\n <div>\n <button\n type=\"button\"\n data-keep-action=\"retry-item\"\n onClick={() => void view.retry()}\n disabled={view.isRetrying || view.isMutating}\n >\n {retryLabel ?? view.labels.retry}\n </button>\n <button\n type=\"button\"\n data-keep-action=\"remove-item\"\n onClick={() => void view.remove()}\n disabled={view.isMutating}\n >\n {removeLabel ?? view.labels.remove}\n </button>\n </div>\n {view.error ? <p role=\"alert\">{view.error instanceof Error ? view.error.message : view.labels.error}</p> : null}\n </aside>\n );\n}\n\nexport type KeepPruneStaleButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> & {\n statuses?: KeepItemStatus[];\n label?: ReactNode;\n onPruned?: (ids: string[]) => void;\n children?: ReactNode;\n};\n\n/** Removes all unavailable items through the provider's undo-capable batch action. */\nexport function KeepPruneStaleButton<TMeta = Record<string, unknown>>({\n statuses = [\"expired\", \"removed\", \"deleted\", \"private\", \"unknown\"],\n label,\n onPruned,\n children,\n disabled,\n ...props\n}: KeepPruneStaleButtonProps) {\n const view = useKeepPruneStale<TMeta>({ statuses, onPruned });\n\n return (\n <button\n {...props}\n type=\"button\"\n className={props.className}\n data-keepkit=\"prune-stale\"\n data-keep-action=\"prune-stale\"\n data-state={view.staleIds.length > 0 ? \"available\" : \"empty\"}\n disabled={view.staleIds.length === 0 || view.isMutating || disabled}\n onClick={() => void view.prune()}\n >\n {children ?? label ?? `${view.label} (${view.staleIds.length})`}\n </button>\n );\n}\n","\"use client\";\n\nimport type { KeepListQuery } from \"@keepkit/core/core\";\nimport { type HTMLAttributes, isValidElement, type ReactNode } from \"react\";\nimport { useKeepTagFilter } from \"./hooks/useKeepTagFilter\";\nimport { type RenderProp, renderRoot } from \"./shared\";\n\nexport type KeepTagFilterState = {\n tags: string[];\n tagCounts: Record<string, number>;\n value?: string;\n select: (tag?: string) => void;\n};\n\nexport type KeepTagFilterProps<TMeta = Record<string, unknown>> = Omit<\n HTMLAttributes<HTMLElement>,\n \"children\" | \"onChange\"\n> & {\n query?: KeepListQuery<TMeta>;\n value?: string;\n defaultValue?: string;\n onChange?: (tag?: string) => void;\n onValueChange?: (tag?: string) => void;\n allLabel?: ReactNode;\n ariaLabel?: string;\n renderTag?: (tag: string, count: number, selected: boolean) => ReactNode;\n render?: RenderProp<KeepTagFilterState>;\n children?: ReactNode | RenderProp<KeepTagFilterState>;\n asChild?: boolean;\n};\n\n/** An ARIA button group for tag filtering; consumers can connect value to a collection query. */\nexport function KeepTagFilter<TMeta = Record<string, unknown>>({\n query,\n value: controlledValue,\n defaultValue,\n onChange,\n onValueChange,\n allLabel,\n ariaLabel,\n renderTag,\n render,\n children,\n asChild = false,\n className,\n ...rootProps\n}: KeepTagFilterProps<TMeta>) {\n const view = useKeepTagFilter<TMeta>({ query, controlledValue, defaultValue, onChange, onValueChange });\n const contentChildren = asChild && isValidElement(children) ? undefined : children;\n const body = render\n ? render(view.state)\n : typeof contentChildren === \"function\"\n ? contentChildren(view.state)\n : (contentChildren ?? (\n <fieldset>\n <legend>{ariaLabel ?? view.labels.aria}</legend>\n <button\n type=\"button\"\n data-keep-action=\"filter-all-tags\"\n aria-pressed={view.state.value === undefined}\n onClick={() => view.state.select()}\n >\n {allLabel ?? view.labels.all}\n </button>\n {view.state.tags.map((tag) => (\n <button\n key={tag}\n type=\"button\"\n data-keep-action=\"filter-tag\"\n aria-pressed={view.state.value === tag}\n onClick={() => view.state.select(tag)}\n >\n {renderTag ? renderTag(tag, view.state.tagCounts[tag] ?? 0, view.state.value === tag) : tag}\n <span> ({view.state.tagCounts[tag] ?? 0})</span>\n </button>\n ))}\n </fieldset>\n ));\n return renderRoot(\n asChild,\n isValidElement(children) ? children : undefined,\n {\n ...rootProps,\n className,\n \"data-keepkit\": \"tag-filter\",\n \"data-state\": view.state.value === undefined ? \"all\" : \"filtered\",\n \"data-loading\": view.isLoading ? \"true\" : undefined,\n },\n body,\n \"KeepTagFilter\",\n );\n}\n","import type { KeepListQuery } from \"@keepkit/core/core\";\nimport { useKeepList } from \"@keepkit/core/react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport type { KeepTagFilterState } from \"../KeepTagFilter\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepTagFilterOptions<TMeta> = {\n query: KeepListQuery<TMeta> | undefined;\n controlledValue: string | undefined;\n defaultValue: string | undefined;\n onChange: ((tag?: string) => void) | undefined;\n onValueChange: ((tag?: string) => void) | undefined;\n};\n\nexport function useKeepTagFilter<TMeta>(options: KeepTagFilterOptions<TMeta>) {\n const { query, controlledValue, defaultValue, onChange, onValueChange } = options;\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const resolvedValue = controlledValue ?? uncontrolledValue;\n const list = useKeepList<TMeta>({\n ...query,\n tags: resolvedValue ? [...(query?.tags ?? []), resolvedValue] : query?.tags,\n });\n const select = useCallback(\n (tag?: string) => {\n if (controlledValue === undefined) setUncontrolledValue(tag);\n onChange?.(tag);\n onValueChange?.(tag);\n },\n [controlledValue, onChange, onValueChange],\n );\n const state = useMemo<KeepTagFilterState>(\n () => ({ tags: list.tags, tagCounts: list.tagCounts, value: resolvedValue, select }),\n [list.tagCounts, list.tags, resolvedValue, select],\n );\n\n return {\n state,\n isLoading: list.isLoading,\n labels: { all: useUiLabel(\"allTags\"), aria: useUiLabel(\"filterTags\") },\n };\n}\n","import type { KeepListQuery } from \"@keepkit/core/core\";\nimport type { ChangeEvent } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { KeepSortValue } from \"../query-controls\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepSearchInputOptions = {\n controlledValue: string | undefined;\n defaultValue: string;\n debounceMs: number;\n onValueChange: ((value: string) => void) | undefined;\n};\n\nexport function useKeepSearchInput(options: KeepSearchInputOptions) {\n const { controlledValue, defaultValue, debounceMs, onValueChange } = options;\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const value = controlledValue ?? uncontrolledValue;\n useEffect(() => {\n if (!onValueChange) return;\n if (debounceMs <= 0) {\n onValueChange(value);\n return;\n }\n const timer = window.setTimeout(() => onValueChange(value), debounceMs);\n return () => window.clearTimeout(timer);\n }, [debounceMs, onValueChange, value]);\n\n return {\n value,\n label: useUiLabel(\"search\"),\n change: (event: ChangeEvent<HTMLInputElement>) => {\n if (controlledValue === undefined) setUncontrolledValue(event.currentTarget.value);\n },\n };\n}\n\ntype KeepSortSelectOptions = {\n controlledValue: KeepSortValue | undefined;\n defaultValue: KeepSortValue;\n onValueChange: ((value: KeepSortValue, sort: NonNullable<KeepListQuery[\"sort\"]>) => void) | undefined;\n};\n\nexport function useKeepSortSelect(options: KeepSortSelectOptions) {\n const { controlledValue, defaultValue, onValueChange } = options;\n const [uncontrolledValue, setUncontrolledValue] = useState<KeepSortValue>(defaultValue);\n const value = controlledValue ?? uncontrolledValue;\n\n return {\n value,\n change: (event: ChangeEvent<HTMLSelectElement>) => {\n const nextValue = event.currentTarget.value as KeepSortValue;\n if (controlledValue === undefined) setUncontrolledValue(nextValue);\n const [by, direction] = nextValue.split(\":\") as [\"savedAt\" | \"updatedAt\", \"asc\" | \"desc\"];\n onValueChange?.(nextValue, { by, direction });\n },\n labels: {\n sort: useUiLabel(\"sort\"),\n updatedNewest: useUiLabel(\"updatedNewest\"),\n updatedOldest: useUiLabel(\"updatedOldest\"),\n savedNewest: useUiLabel(\"savedNewest\"),\n savedOldest: useUiLabel(\"savedOldest\"),\n },\n };\n}\n\ntype KeepPaginationOptions = {\n totalCount: number;\n pageSize: number;\n page: number;\n maxPageButtons: number;\n onPageChange: ((page: number, offset: number) => void) | undefined;\n};\n\nexport function useKeepPagination(options: KeepPaginationOptions) {\n const { totalCount, pageSize, page, maxPageButtons, onPageChange } = options;\n const pageCount = Math.max(1, Math.ceil(totalCount / Math.max(1, pageSize)));\n const currentPage = Math.min(Math.max(1, page), pageCount);\n const goToPage = (nextPage: number) => {\n const next = Math.min(Math.max(1, nextPage), pageCount);\n onPageChange?.(next, (next - 1) * pageSize);\n };\n\n return {\n pageCount,\n currentPage,\n goToPage,\n visiblePages: getVisiblePages(currentPage, pageCount, Math.max(1, maxPageButtons)),\n labels: {\n previous: useUiLabel(\"previousPage\"),\n next: useUiLabel(\"nextPage\"),\n page: useUiLabel(\"page\"),\n pagination: useUiLabel(\"pagination\"),\n },\n };\n}\n\nfunction getVisiblePages(currentPage: number, pageCount: number, maxPageButtons: number): number[] {\n if (pageCount <= maxPageButtons) return Array.from({ length: pageCount }, (_, index) => index + 1);\n const half = Math.floor(maxPageButtons / 2);\n const start = Math.min(Math.max(1, currentPage - half), pageCount - maxPageButtons + 1);\n return Array.from({ length: maxPageButtons }, (_, index) => start + index);\n}\n","\"use client\";\n\nimport type { KeepListQuery } from \"@keepkit/core/core\";\nimport type { InputHTMLAttributes, ReactNode, SelectHTMLAttributes } from \"react\";\nimport { useKeepPagination, useKeepSearchInput, useKeepSortSelect } from \"./hooks/useQueryControls\";\n\nexport type KeepSearchInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"defaultValue\" | \"onChange\"\n> & {\n value?: string;\n defaultValue?: string;\n /** Delay before notifying consumers; set to 0 to disable debouncing. */\n debounceMs?: number;\n onValueChange?: (value: string) => void;\n};\n\n/** A controlled/uncontrolled search field with a small built-in debounce. */\nexport function KeepSearchInput({\n value: controlledValue,\n defaultValue = \"\",\n debounceMs = 300,\n onValueChange,\n \"aria-label\": ariaLabel,\n placeholder,\n ...props\n}: KeepSearchInputProps) {\n const view = useKeepSearchInput({ controlledValue, defaultValue, debounceMs, onValueChange });\n\n return (\n <input\n {...props}\n data-keepkit=\"search-input\"\n data-keep-action=\"search\"\n type=\"search\"\n value={view.value}\n data-state={view.value ? \"active\" : \"idle\"}\n data-disabled={props.disabled ? \"true\" : undefined}\n aria-label={ariaLabel ?? view.label}\n placeholder={placeholder ?? view.label}\n onChange={view.change}\n />\n );\n}\n\nexport type KeepSortValue = \"savedAt:desc\" | \"savedAt:asc\" | \"updatedAt:desc\" | \"updatedAt:asc\";\n\nexport type KeepSortSelectProps = Omit<\n SelectHTMLAttributes<HTMLSelectElement>,\n \"value\" | \"defaultValue\" | \"onChange\"\n> & {\n value?: KeepSortValue;\n defaultValue?: KeepSortValue;\n onValueChange?: (value: KeepSortValue, sort: NonNullable<KeepListQuery[\"sort\"]>) => void;\n};\n\n/** Emits a normalized sort descriptor that can be passed directly to useKeepList. */\nexport function KeepSortSelect({\n value: controlledValue,\n defaultValue = \"updatedAt:desc\",\n onValueChange,\n \"aria-label\": ariaLabel,\n children,\n ...props\n}: KeepSortSelectProps) {\n const view = useKeepSortSelect({ controlledValue, defaultValue, onValueChange });\n const options = children ?? (\n <>\n <option value=\"updatedAt:desc\">{view.labels.updatedNewest}</option>\n <option value=\"updatedAt:asc\">{view.labels.updatedOldest}</option>\n <option value=\"savedAt:desc\">{view.labels.savedNewest}</option>\n <option value=\"savedAt:asc\">{view.labels.savedOldest}</option>\n </>\n );\n return (\n <select\n {...props}\n data-keepkit=\"sort-select\"\n data-keep-action=\"sort\"\n value={view.value}\n data-state=\"selected\"\n data-disabled={props.disabled ? \"true\" : undefined}\n aria-label={ariaLabel ?? view.labels.sort}\n onChange={view.change}\n >\n {options}\n </select>\n );\n}\n\nexport type KeepPaginationState = { page: number; pageCount: number; goToPage: (page: number) => void };\n\nexport type KeepPaginationProps = Omit<React.HTMLAttributes<HTMLElement>, \"children\"> & {\n totalCount: number;\n pageSize: number;\n page?: number;\n maxPageButtons?: number;\n onPageChange?: (page: number, offset: number) => void;\n render?: (state: KeepPaginationState) => ReactNode;\n};\n\n/** Accessible pagination with previous/next controls and numbered page buttons. */\nexport function KeepPagination({\n totalCount,\n pageSize,\n page = 1,\n maxPageButtons = 7,\n onPageChange,\n render,\n ...props\n}: KeepPaginationProps) {\n const view = useKeepPagination({ totalCount, pageSize, page, maxPageButtons, onPageChange });\n const navProps = {\n ...props,\n \"data-keepkit\": \"pagination\",\n \"aria-label\": props[\"aria-label\"] ?? view.labels.pagination,\n \"data-state\": view.pageCount > 1 ? \"active\" : \"idle\",\n };\n if (render)\n return (\n <nav {...navProps}>{render({ page: view.currentPage, pageCount: view.pageCount, goToPage: view.goToPage })}</nav>\n );\n return (\n <nav {...navProps}>\n <button\n type=\"button\"\n data-keep-action=\"previous-page\"\n onClick={() => view.goToPage(view.currentPage - 1)}\n disabled={view.currentPage <= 1}\n >\n {view.labels.previous}\n </button>\n {view.visiblePages.map((nextPage) => (\n <button\n key={nextPage}\n type=\"button\"\n data-keep-action=\"select-page\"\n aria-current={nextPage === view.currentPage ? \"page\" : undefined}\n aria-label={`${view.labels.page} ${nextPage}`}\n onClick={() => view.goToPage(nextPage)}\n >\n {nextPage}\n </button>\n ))}\n <button\n type=\"button\"\n data-keep-action=\"next-page\"\n onClick={() => view.goToPage(view.currentPage + 1)}\n disabled={view.currentPage >= view.pageCount}\n >\n {view.labels.next}\n </button>\n </nav>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport type { KeepLayoutPreset } from \"./KeepCollection\";\n\nexport type KeepLayoutProps = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n layout?: KeepLayoutPreset;\n children?: ReactNode;\n};\n\n/** A style-free layout wrapper with a stable preset attribute for host or theme CSS. */\nexport function KeepLayout({ layout = \"list\", children, ...props }: KeepLayoutProps) {\n return (\n <div {...props} data-keepkit=\"layout\" data-layout={layout}>\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport type { KeepItem } from \"@keepkit/core/core\";\nimport { type FormHTMLAttributes, isValidElement, type ReactNode } from \"react\";\nimport { useKeepNoteEditor } from \"./hooks/useKeepNoteEditor\";\nimport { type RenderProp, renderRoot } from \"./shared\";\n\nexport type KeepNoteEditorState<TMeta = Record<string, unknown>> = {\n item: KeepItem<TMeta>;\n note: string;\n setNote: (note: string) => void;\n isDirty: boolean;\n isSaving: boolean;\n error: unknown | null;\n save: () => Promise<void>;\n};\n\nexport type KeepNoteEditorProps<TMeta = Record<string, unknown>> = Omit<\n FormHTMLAttributes<HTMLFormElement>,\n \"children\" | \"onSubmit\"\n> & {\n item: KeepItem<TMeta>;\n label?: ReactNode;\n saveLabel?: ReactNode;\n placeholder?: string;\n /** Automatically save dirty notes after this delay; set to 0 to disable auto-save. */\n debounceMs?: number;\n onSaved?: (note?: string) => void;\n onSaveError?: (error: unknown) => void;\n render?: RenderProp<KeepNoteEditorState<TMeta>>;\n children?: ReactNode | RenderProp<KeepNoteEditorState<TMeta>>;\n asChild?: boolean;\n};\n\n/** A controlled-by-default note editor that persists through useKeepItem. */\nexport function KeepNoteEditor<TMeta = Record<string, unknown>>({\n item,\n label,\n saveLabel,\n placeholder,\n debounceMs = 300,\n onSaved,\n onSaveError,\n render,\n children,\n asChild = false,\n className,\n ...formProps\n}: KeepNoteEditorProps<TMeta>) {\n const view = useKeepNoteEditor<TMeta>({ item, debounceMs, onSaved, onSaveError });\n const { error, isDirty, isSaving, note, setNote } = view.state;\n const contentChildren = asChild && isValidElement(children) ? undefined : children;\n const body = render\n ? render(view.state)\n : typeof contentChildren === \"function\"\n ? contentChildren(view.state)\n : (contentChildren ?? (\n <>\n <label>\n {label ?? view.labels.note}\n <textarea\n data-keep-action=\"edit-note\"\n value={note}\n onChange={(event) => setNote(event.currentTarget.value)}\n placeholder={placeholder}\n disabled={isSaving}\n onKeyDown={view.handleKeyDown}\n />\n </label>\n <button type=\"submit\" data-keep-action=\"save-note\" disabled={isSaving} aria-busy={isSaving}>\n {saveLabel ?? view.labels.save}\n </button>\n </>\n ));\n if (!asChild) {\n return (\n <form\n {...formProps}\n className={className}\n data-keepkit=\"note-editor\"\n onSubmit={view.submit}\n aria-busy={isSaving || formProps[\"aria-busy\"]}\n data-state={error ? \"error\" : isDirty ? \"dirty\" : \"clean\"}\n data-loading={isSaving ? \"true\" : undefined}\n data-disabled={isSaving ? \"true\" : undefined}\n >\n {body}\n {error ? <p role=\"alert\">{getErrorMessage(error, view.labels.error)}</p> : null}\n </form>\n );\n }\n return renderRoot(\n true,\n isValidElement(children) ? children : undefined,\n {\n ...formProps,\n className,\n \"data-keepkit\": \"note-editor\",\n onSubmit: view.submit,\n \"aria-busy\": isSaving || formProps[\"aria-busy\"],\n \"data-state\": error ? \"error\" : isDirty ? \"dirty\" : \"clean\",\n \"data-loading\": isSaving ? \"true\" : undefined,\n \"data-disabled\": isSaving ? \"true\" : undefined,\n },\n body,\n \"KeepNoteEditor\",\n );\n}\n\nfunction getErrorMessage(error: unknown, fallback: string): string {\n return error instanceof Error ? error.message : fallback;\n}\n","import type { KeepItem } from \"@keepkit/core/core\";\nimport { useKeepItem } from \"@keepkit/core/react\";\nimport type { FormHTMLAttributes, KeyboardEvent } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { KeepNoteEditorState } from \"../KeepNoteEditor\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepNoteEditorOptions<TMeta> = {\n item: KeepItem<TMeta>;\n debounceMs: number;\n onSaved: ((note?: string) => void) | undefined;\n onSaveError: ((error: unknown) => void) | undefined;\n};\n\nexport function useKeepNoteEditor<TMeta>({ item, debounceMs, onSaved, onSaveError }: KeepNoteEditorOptions<TMeta>) {\n const itemState = useKeepItem<TMeta>(item);\n const { error, isMutating, item: savedItem, updateNote } = itemState;\n const [note, setNote] = useState(item.note ?? \"\");\n const baselineNote = savedItem?.note ?? item.note ?? \"\";\n const isDirty = note !== baselineNote;\n const lastSavedNoteRef = useRef<string | undefined>(undefined);\n\n useEffect(() => setNote(baselineNote), [baselineNote]);\n const save = useCallback(async () => {\n const nextNote = note.trim() || undefined;\n try {\n await updateNote(nextNote);\n lastSavedNoteRef.current = note;\n onSaved?.(nextNote);\n } catch (cause) {\n onSaveError?.(cause);\n throw cause;\n }\n }, [note, onSaveError, onSaved, updateNote]);\n useEffect(() => {\n if (!isDirty || debounceMs <= 0 || lastSavedNoteRef.current === note) return;\n const timer = window.setTimeout(() => void save().catch(() => undefined), debounceMs);\n return () => window.clearTimeout(timer);\n }, [debounceMs, isDirty, note, save]);\n\n const state: KeepNoteEditorState<TMeta> = {\n item,\n note,\n setNote,\n isDirty,\n isSaving: isMutating,\n error,\n save,\n };\n const submit: FormHTMLAttributes<HTMLFormElement>[\"onSubmit\"] = (event) => {\n event.preventDefault();\n void save().catch(() => undefined);\n };\n\n return {\n state,\n submit,\n handleKeyDown: (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key !== \"Enter\" || (!event.ctrlKey && !event.metaKey)) return;\n event.preventDefault();\n void save().catch(() => undefined);\n },\n labels: {\n note: useUiLabel(\"note\"),\n save: useUiLabel(\"saveNote\"),\n error: useUiLabel(\"error\"),\n },\n };\n}\n","import type { KeepItem, KeepSyncConflict } from \"@keepkit/core/core\";\nimport { useKeepContext } from \"@keepkit/core/react\";\nimport { useEffect, useState } from \"react\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepSyncRecoveryDialogOptions<TMeta> = {\n open: boolean | undefined;\n onOpenChange: ((open: boolean) => void) | undefined;\n conflicts: KeepSyncConflict<TMeta>[] | undefined;\n onManualMerge: ((conflict: KeepSyncConflict<TMeta>) => KeepItem<TMeta> | Promise<KeepItem<TMeta>>) | undefined;\n};\n\nexport function useKeepSyncRecoveryDialog<TMeta>(options: KeepSyncRecoveryDialogOptions<TMeta>) {\n const { open, onOpenChange, conflicts, onManualMerge } = options;\n const context = useKeepContext<TMeta>();\n const conflictList = conflicts ?? context.syncState.conflicts ?? [];\n const hasRecovery = conflictList.length > 0 || context.syncState.status === \"error\" || Boolean(context.error);\n const [dismissed, setDismissed] = useState(false);\n const [busyId, setBusyId] = useState<string>();\n const [error, setError] = useState<unknown>();\n useEffect(() => {\n if (hasRecovery) setDismissed(false);\n }, [hasRecovery]);\n\n return {\n conflictList,\n isOpen: open ?? (hasRecovery && !dismissed),\n busyId,\n error,\n showBackupRecovery: context.syncState.status === \"error\" || Boolean(context.error),\n close: () => {\n setDismissed(true);\n onOpenChange?.(false);\n },\n resolve: async (conflict: KeepSyncConflict<TMeta>, resolution: \"local\" | \"remote\" | \"manual\") => {\n setError(undefined);\n setBusyId(conflict.id);\n try {\n const merged = resolution === \"manual\" ? await onManualMerge?.(conflict) : undefined;\n if (resolution === \"manual\" && !merged) throw new Error(\"A manual merge result is required.\");\n await context.resolveSyncConflict(conflict.id, resolution, merged);\n } catch (cause) {\n setError(cause);\n } finally {\n setBusyId(undefined);\n }\n },\n labels: {\n close: useUiLabel(\"close\"),\n title: useUiLabel(\"resolveSync\"),\n conflict: useUiLabel(\"syncConflict\"),\n keepLocal: useUiLabel(\"keepLocal\"),\n useServer: useUiLabel(\"useServer\"),\n manualMerge: useUiLabel(\"manualMerge\"),\n localVersion: useUiLabel(\"localVersion\"),\n remoteVersion: useUiLabel(\"remoteVersion\"),\n updatedAt: useUiLabel(\"updatedAt\"),\n note: useUiLabel(\"note\"),\n backupRecovery: useUiLabel(\"backupRecovery\"),\n backupRecoveryDescription: useUiLabel(\"backupRecoveryDescription\"),\n error: useUiLabel(\"error\"),\n },\n };\n}\n","\"use client\";\n\nimport type { KeepItem, KeepSyncConflict } from \"@keepkit/core/core\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { useKeepSyncRecoveryDialog } from \"./hooks/useKeepSyncRecoveryDialog\";\nimport { KeepBackup } from \"./KeepBackup\";\nimport { getMetaTitle } from \"./shared\";\n\nexport type KeepSyncRecoveryDialogProps<TMeta = Record<string, unknown>> = Omit<\n HTMLAttributes<HTMLElement>,\n \"children\" | \"title\"\n> & {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n conflicts?: KeepSyncConflict<TMeta>[];\n onManualMerge?: (conflict: KeepSyncConflict<TMeta>) => KeepItem<TMeta> | Promise<KeepItem<TMeta>>;\n backup?: ReactNode;\n showBackupControls?: boolean;\n title?: ReactNode;\n children?: ReactNode;\n};\n\n/** Resolves queued sync conflicts and guides users to restore a backup after data corruption. */\nexport function KeepSyncRecoveryDialog<TMeta = Record<string, unknown>>({\n open,\n onOpenChange,\n conflicts,\n onManualMerge,\n backup,\n showBackupControls = true,\n title,\n children,\n className,\n ...props\n}: KeepSyncRecoveryDialogProps<TMeta>) {\n const view = useKeepSyncRecoveryDialog<TMeta>({ open, onOpenChange, conflicts, onManualMerge });\n if (!view.isOpen) return null;\n\n return (\n <section\n {...props}\n className={className}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"keepkit-sync-recovery-title\"\n aria-describedby={view.error ? \"keepkit-sync-recovery-error\" : undefined}\n aria-busy={view.busyId !== undefined}\n data-keepkit=\"sync-recovery\"\n data-state={view.conflictList.length > 0 ? \"conflict\" : \"error\"}\n data-loading={view.busyId !== undefined ? \"true\" : undefined}\n >\n <header>\n <h2 id=\"keepkit-sync-recovery-title\">{title ?? view.labels.title}</h2>\n <button type=\"button\" data-keep-action=\"close-dialog\" onClick={view.close} aria-label={view.labels.close}>\n {view.labels.close}\n </button>\n </header>\n {children}\n {view.conflictList.length > 0 ? (\n <div>\n <p>{view.labels.conflict}</p>\n {view.conflictList.map((conflict) => (\n <article key={conflict.id} data-conflict-id={conflict.id}>\n <h3>{getMetaTitle(conflict.operation.item?.meta) ?? conflict.id}</h3>\n <div data-conflict-preview>\n <ConflictPreview\n item={conflict.operation.item}\n heading={view.labels.localVersion}\n updatedAtLabel={view.labels.updatedAt}\n noteLabel={view.labels.note}\n side=\"local\"\n />\n <ConflictPreview\n item={conflict.remote}\n heading={view.labels.remoteVersion}\n updatedAtLabel={view.labels.updatedAt}\n noteLabel={view.labels.note}\n side=\"remote\"\n />\n </div>\n <div>\n <button\n type=\"button\"\n data-keep-action=\"keep-local\"\n onClick={() => void view.resolve(conflict, \"local\")}\n disabled={view.busyId !== undefined}\n >\n {view.labels.keepLocal}\n </button>\n <button\n type=\"button\"\n data-keep-action=\"use-server\"\n onClick={() => void view.resolve(conflict, \"remote\")}\n disabled={view.busyId !== undefined}\n >\n {view.labels.useServer}\n </button>\n <button\n type=\"button\"\n data-keep-action=\"manual-merge\"\n onClick={() => void view.resolve(conflict, \"manual\")}\n disabled={view.busyId !== undefined || !onManualMerge}\n >\n {view.labels.manualMerge}\n </button>\n </div>\n </article>\n ))}\n </div>\n ) : null}\n {view.showBackupRecovery ? (\n <section data-recovery=\"backup\">\n <h3>{view.labels.backupRecovery}</h3>\n <p>{view.labels.backupRecoveryDescription}</p>\n {backup ?? (showBackupControls ? <KeepBackup /> : null)}\n </section>\n ) : null}\n {view.error ? (\n <p id=\"keepkit-sync-recovery-error\" role=\"alert\" aria-live=\"assertive\">\n {view.error instanceof Error ? view.error.message : view.labels.error}\n </p>\n ) : null}\n </section>\n );\n}\n\nfunction ConflictPreview<TMeta>({\n item,\n heading,\n updatedAtLabel,\n noteLabel,\n side,\n}: {\n item?: KeepItem<TMeta>;\n heading: string;\n updatedAtLabel: string;\n noteLabel: string;\n side: \"local\" | \"remote\";\n}) {\n return (\n <article data-conflict-version={side} aria-label={heading}>\n <h4>{heading}</h4>\n <dl>\n <div>\n <dt>{updatedAtLabel}</dt>\n <dd>\n {item ? (\n <time dateTime={new Date(item.updatedAt).toISOString()}>{formatConflictDate(item.updatedAt)}</time>\n ) : (\n \"—\"\n )}\n </dd>\n </div>\n <div>\n <dt>{noteLabel}</dt>\n <dd>{item?.note || \"—\"}</dd>\n </div>\n </dl>\n </article>\n );\n}\n\nfunction formatConflictDate(timestamp: number): string {\n return new Date(timestamp).toISOString().slice(0, 10);\n}\n","import { useKeepContext } from \"@keepkit/core/react\";\nimport type { ReactNode } from \"react\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepSyncStatusBannerOptions = {\n onRetry: (() => void | Promise<void>) | undefined;\n children: ReactNode;\n};\n\nexport function useKeepSyncStatusBanner({ onRetry, children }: KeepSyncStatusBannerOptions) {\n const context = useKeepContext();\n const retryLabel = useUiLabel(\"retrySync\");\n const resolveLabel = useUiLabel(\"resolveSync\");\n const conflictLabel = useUiLabel(\"syncConflict\");\n const pendingLabel = useUiLabel(\"syncPending\");\n const syncedLabel = useUiLabel(\"syncSynced\");\n const status = context.syncState.status;\n const hasConflicts = (context.syncState.conflicts?.length ?? 0) > 0 || context.syncState.conflictIds.length > 0;\n const message =\n children ??\n (status === \"error\"\n ? getErrorMessage(context.syncState.error)\n : status === \"conflict\" || hasConflicts\n ? conflictLabel\n : status === \"pending\" || status === \"syncing\"\n ? pendingLabel\n : syncedLabel);\n\n return {\n status,\n hasConflicts,\n message,\n isMutating: context.isMutating,\n role: status === \"error\" || status === \"conflict\" || hasConflicts ? \"alert\" : \"status\",\n showRetry: status === \"error\" || status === \"pending\" || status === \"syncing\",\n retryLabel,\n resolveLabel,\n retry: async () => {\n if (onRetry) {\n await onRetry();\n return;\n }\n await context.flushSync();\n },\n };\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : \"Sync failed.\";\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { useKeepSyncStatusBanner } from \"./hooks/useKeepSyncStatusBanner\";\n\nexport type KeepSyncStatusBannerProps = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n onRetry?: () => void | Promise<void>;\n onResolveConflicts?: () => void;\n children?: ReactNode;\n};\n\n/** Announces synchronization failures and exposes retry or conflict-recovery entry points. */\nexport function KeepSyncStatusBanner({\n onRetry,\n onResolveConflicts,\n children,\n className,\n ...props\n}: KeepSyncStatusBannerProps) {\n const view = useKeepSyncStatusBanner({ onRetry, children });\n if (view.status === \"idle\" && !view.hasConflicts) return null;\n\n return (\n <aside\n {...props}\n className={className}\n role={props.role ?? view.role}\n aria-live={props[\"aria-live\"] ?? \"polite\"}\n data-keepkit=\"sync-status\"\n data-state={view.status}\n >\n <p>{view.message}</p>\n {view.showRetry ? (\n <button\n type=\"button\"\n data-keep-action=\"retry-sync\"\n onClick={() => void view.retry()}\n disabled={view.isMutating}\n >\n {view.retryLabel}\n </button>\n ) : null}\n {view.hasConflicts ? (\n <button\n type=\"button\"\n data-keep-action=\"resolve-conflicts\"\n onClick={onResolveConflicts}\n disabled={!onResolveConflicts}\n >\n {view.resolveLabel}\n </button>\n ) : null}\n </aside>\n );\n}\n","import type { KeepItem } from \"@keepkit/core/core\";\nimport { useKeepItem } from \"@keepkit/core/react\";\nimport type { FormEvent, KeyboardEvent } from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { KeepTagEditorState } from \"../KeepTagEditor\";\nimport { normalizeUiTags } from \"../shared\";\nimport { useUiLabel } from \"../ui-context\";\n\ntype KeepTagEditorOptions<TMeta> = {\n item: KeepItem<TMeta>;\n onSaved: ((tags?: string[]) => void) | undefined;\n onSaveError: ((error: unknown) => void) | undefined;\n};\n\nexport function useKeepTagEditor<TMeta>({ item, onSaved, onSaveError }: KeepTagEditorOptions<TMeta>) {\n const itemState = useKeepItem<TMeta>(item);\n const [tags, setTags] = useState(item.tags ?? []);\n const [input, setInput] = useState(\"\");\n useEffect(() => setTags(itemState.item?.tags ?? item.tags ?? []), [item.tags, itemState.item?.tags]);\n const save = useCallback(async () => {\n const nextTags = normalizeUiTags(tags);\n try {\n await itemState.updateTags(nextTags);\n setTags(nextTags);\n onSaved?.(nextTags);\n } catch (cause) {\n onSaveError?.(cause);\n throw cause;\n }\n }, [itemState, onSaveError, onSaved, tags]);\n const addTag = (tag: string) => {\n setTags(normalizeUiTags([...tags, tag]));\n setInput(\"\");\n };\n const state: KeepTagEditorState = { tags, setTags, save, isSaving: itemState.isMutating };\n\n return {\n state,\n input,\n setInput,\n error: itemState.error,\n handleInputKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n if (event.nativeEvent.isComposing) return;\n event.preventDefault();\n if (input.trim()) addTag(input);\n } else if (event.key === \"Backspace\" && input.length === 0 && tags.length > 0) {\n event.preventDefault();\n setTags(tags.slice(0, -1));\n }\n },\n removeTag: (tag: string) => setTags(tags.filter((current) => current !== tag)),\n submit: (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n void save().catch(() => undefined);\n },\n labels: {\n tags: useUiLabel(\"tagsToApply\"),\n remove: useUiLabel(\"remove\"),\n apply: useUiLabel(\"applyTags\"),\n error: useUiLabel(\"error\"),\n },\n };\n}\n","\"use client\";\n\nimport type { KeepItem } from \"@keepkit/core/core\";\nimport type { FormHTMLAttributes } from \"react\";\nimport { useKeepTagEditor } from \"./hooks/useKeepTagEditor\";\nimport type { RenderProp } from \"./shared\";\n\nexport type KeepTagEditorState = {\n tags: string[];\n setTags: (tags: string[]) => void;\n save: () => Promise<void>;\n isSaving: boolean;\n};\n\nexport type KeepTagEditorProps<TMeta = Record<string, unknown>> = Omit<\n FormHTMLAttributes<HTMLFormElement>,\n \"children\" | \"onSubmit\"\n> & {\n item: KeepItem<TMeta>;\n availableTags?: string[];\n onSaved?: (tags?: string[]) => void;\n onSaveError?: (error: unknown) => void;\n render?: RenderProp<KeepTagEditorState>;\n};\n\n/** Edits one item's normalized tag set; Enter adds and Backspace removes the last tag. */\nexport function KeepTagEditor<TMeta = Record<string, unknown>>({\n item,\n availableTags = [],\n onSaved,\n onSaveError,\n render,\n ...props\n}: KeepTagEditorProps<TMeta>) {\n const view = useKeepTagEditor<TMeta>({ item, onSaved, onSaveError });\n const { isSaving, tags } = view.state;\n const body = render ? (\n render(view.state)\n ) : (\n <>\n <label>\n {view.labels.tags}\n <input\n data-keep-action=\"edit-tags\"\n value={view.input}\n list={availableTags.length > 0 ? `keep-tags-${item.id}` : undefined}\n onChange={(event) => view.setInput(event.currentTarget.value)}\n onKeyDown={view.handleInputKeyDown}\n />\n </label>\n {availableTags.length > 0 ? (\n <datalist id={`keep-tags-${item.id}`}>\n {availableTags.map((tag) => (\n <option key={tag} value={tag} />\n ))}\n </datalist>\n ) : null}\n <ul aria-label={view.labels.tags}>\n {tags.map((tag) => (\n <li key={tag}>\n {tag}\n <button type=\"button\" data-keep-action=\"remove-tag\" onClick={() => view.removeTag(tag)}>\n {view.labels.remove}\n </button>\n </li>\n ))}\n </ul>\n <button type=\"submit\" data-keep-action=\"apply-tags\" disabled={isSaving} aria-busy={isSaving}>\n {view.labels.apply}\n </button>\n </>\n );\n return (\n <form\n {...props}\n onSubmit={view.submit}\n aria-busy={isSaving || props[\"aria-busy\"]}\n data-keepkit=\"tag-editor\"\n data-state={view.error ? \"error\" : isSaving ? \"saving\" : \"idle\"}\n data-loading={isSaving ? \"true\" : undefined}\n data-disabled={isSaving ? \"true\" : undefined}\n >\n {body}\n {view.error ? <p role=\"alert\">{getErrorMessage(view.error, view.labels.error)}</p> : null}\n </form>\n );\n}\n\nfunction getErrorMessage(error: unknown, fallback: string): string {\n return error instanceof Error ? error.message : fallback;\n}\n","import { useKeepContext } from \"@keepkit/core/react\";\nimport { useUiLabel } from \"../ui-context\";\n\nexport function useKeepUndo() {\n const context = useKeepContext();\n return {\n canUndo: context.undo.canUndo,\n undo: () => context.undoLastRemoval(),\n message: useUiLabel(\"undoAvailable\"),\n label: useUiLabel(\"undo\"),\n };\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { useKeepUndo } from \"./hooks/useKeepUndo\";\n\nexport type KeepUndoProps = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n children?: ReactNode;\n label?: ReactNode;\n};\n\n/** Presents the short-lived undo action created by removeWithUndo/removeBatchWithUndo. */\nexport function KeepUndo({ children, label, ...props }: KeepUndoProps) {\n const view = useKeepUndo();\n if (!view.canUndo) return null;\n return (\n <div {...props} role=\"status\" aria-live=\"polite\" data-keepkit=\"undo\" data-state=\"available\">\n {children ?? view.message}\n <button type=\"button\" data-keep-action=\"undo\" onClick={() => void view.undo()}>\n {label ?? view.label}\n </button>\n </div>\n );\n}\n","\"use client\";\n\nimport type { KeepItem } from \"@keepkit/core/core\";\nimport { type HTMLAttributes, isValidElement, type ReactNode } from \"react\";\nimport { useKeepAnnouncements, useKeepEmptyState, useKeepStatus } from \"./hooks/useStatusViews\";\nimport { type RenderProp, renderRoot } from \"./shared\";\n\nexport type KeepEmptyStateProps = Omit<HTMLAttributes<HTMLElement>, \"children\" | \"title\"> & {\n title?: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n children?: ReactNode;\n asChild?: boolean;\n};\n\n/** A style-free, reusable empty collection state. */\nexport function KeepEmptyState({\n title,\n description,\n action,\n children,\n asChild = false,\n className,\n ...rootProps\n}: KeepEmptyStateProps) {\n const defaultTitle = useKeepEmptyState();\n const contentChildren = asChild && isValidElement(children) ? undefined : children;\n const body = contentChildren ?? (\n <>\n <h2>{title ?? defaultTitle}</h2>\n {description ? <p>{description}</p> : null}\n {action}\n </>\n );\n return renderRoot(\n asChild,\n children,\n { ...rootProps, className, \"data-keepkit\": \"empty-state\", \"data-state\": \"empty\" },\n body,\n \"KeepEmptyState\",\n );\n}\n\nexport type KeepStatusValue = \"idle\" | \"empty\" | \"loading\" | \"saving\" | \"syncing\" | \"error\";\nexport type KeepStatusLabels = Partial<Record<KeepStatusValue, ReactNode>>;\n\nexport type KeepStatusState<TMeta = Record<string, unknown>> = {\n status: KeepStatusValue;\n error: unknown | null;\n pendingCount: number;\n items: KeepItem<TMeta>[];\n};\n\nexport type KeepStatusProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n status?: KeepStatusValue;\n labels?: KeepStatusLabels;\n children?: ReactNode | RenderProp<KeepStatusState<TMeta>>;\n render?: RenderProp<KeepStatusState<TMeta>>;\n asChild?: boolean;\n};\n\n/** Presents provider loading, mutation, synchronization, empty, and error states accessibly. */\nexport function KeepStatus<TMeta = Record<string, unknown>>({\n status,\n labels,\n children,\n render,\n asChild = false,\n className,\n ...rootProps\n}: KeepStatusProps<TMeta>) {\n const view = useKeepStatus<TMeta>(status);\n const contentChildren = asChild && isValidElement(children) ? undefined : children;\n const body = render\n ? render(view.state)\n : typeof contentChildren === \"function\"\n ? contentChildren(view.state)\n : (contentChildren ?? labels?.[view.state.status] ?? view.defaultLabel);\n const role = rootProps.role ?? (view.state.status === \"error\" ? \"alert\" : \"status\");\n return renderRoot(\n asChild,\n isValidElement(children) ? children : undefined,\n {\n ...rootProps,\n className,\n \"data-keepkit\": \"status\",\n role,\n \"aria-live\": rootProps[\"aria-live\"] ?? \"polite\",\n \"data-state\": view.state.status,\n \"data-loading\":\n view.state.status === \"loading\" || view.state.status === \"saving\" || view.state.status === \"syncing\"\n ? \"true\"\n : undefined,\n },\n body,\n \"KeepStatus\",\n );\n}\n\nexport type KeepAnnouncementsProps = Omit<HTMLAttributes<HTMLElement>, \"children\"> & {\n messages?: Partial<Record<\"save\" | \"remove\" | \"note\", string>>;\n};\n\n/** Announces successful save, remove, and note operations in a polite live region. */\nexport function KeepAnnouncements<TMeta = Record<string, unknown>>({ messages, ...props }: KeepAnnouncementsProps) {\n const message = useKeepAnnouncements<TMeta>(messages);\n return (\n <div\n {...props}\n role={props.role ?? \"status\"}\n aria-live={props[\"aria-live\"] ?? \"polite\"}\n aria-atomic=\"true\"\n data-keepkit=\"announcements\"\n data-state=\"announcing\"\n >\n {message}\n </div>\n );\n}\n\n/** Singular alias for applications that mount one announcer explicitly. */\nexport const KeepAnnouncer = KeepAnnouncements;\n","import type { KeepChangeContext } from \"@keepkit/core/core\";\nimport { useKeepContext } from \"@keepkit/core/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { KeepAnnouncementsProps, KeepStatusState, KeepStatusValue } from \"../status\";\nimport { type KeepUiLabelKey, useUiLabel } from \"../ui-context\";\n\nexport function useKeepEmptyState() {\n return useUiLabel(\"noItems\").replace(/\\.$/, \"\");\n}\n\nexport function useKeepStatus<TMeta>(status: KeepStatusValue | undefined) {\n const context = useKeepContext<TMeta>();\n const resolvedStatus = status ?? getDerivedStatus(context);\n const state: KeepStatusState<TMeta> = {\n status: resolvedStatus,\n error: context.error,\n pendingCount: context.syncState.pendingCount,\n items: context.items,\n };\n return { state, defaultLabel: useUiLabel(getStatusLabelKey(resolvedStatus)) };\n}\n\nexport function useKeepAnnouncements<TMeta>(messages: KeepAnnouncementsProps[\"messages\"]) {\n const context = useKeepContext<TMeta>();\n const savedMessage = useUiLabel(\"savedMessage\", messages?.save);\n const removedMessage = useUiLabel(\"removedMessage\", messages?.remove);\n const noteSavedMessage = useUiLabel(\"noteSavedMessage\", messages?.note);\n const [message, setMessage] = useState(\"\");\n const lastChangeRef = useRef<KeepChangeContext<TMeta> | undefined>(undefined);\n useEffect(() => {\n const change = context.lastChange;\n if (!change || change === lastChangeRef.current) return;\n lastChangeRef.current = change;\n if (change.action === \"save\") setMessage(savedMessage);\n else if (change.action === \"remove\" || change.action === \"removeBatch\") setMessage(removedMessage);\n else if (change.action === \"updateNote\") setMessage(noteSavedMessage);\n }, [context.lastChange, noteSavedMessage, removedMessage, savedMessage]);\n return message;\n}\n\nfunction getDerivedStatus<TMeta>(context: ReturnType<typeof useKeepContext<TMeta>>): KeepStatusValue {\n if (context.error) return \"error\";\n if (context.syncState.status === \"pending\" || context.syncState.status === \"syncing\") return \"syncing\";\n if (context.isMutating) return \"saving\";\n if (context.isLoading && !context.isHydrated) return \"loading\";\n if (context.isHydrated && context.items.length === 0) return \"empty\";\n return \"idle\";\n}\n\nfunction getStatusLabelKey(status: KeepStatusValue): KeepUiLabelKey {\n if (status === \"empty\") return \"noItems\";\n if (status === \"loading\") return \"loadingItems\";\n if (status === \"error\") return \"error\";\n if (status === \"saving\") return \"saving\";\n if (status === \"syncing\") return \"syncing\";\n return \"saved\";\n}\n","\"use client\";\n\nimport { type CSSProperties, cloneElement, isValidElement, type ReactNode } from \"react\";\n\nexport const keepThemeNames = [\n \"default\",\n \"ocean\",\n \"forest\",\n \"sunset\",\n \"lavender\",\n \"compact\",\n \"minimal\",\n \"rounded\",\n \"high-contrast\",\n \"dark\",\n] as const;\n\nexport type KeepThemeName = (typeof keepThemeNames)[number];\nexport type KeepThemeMode = \"light\" | \"dark\" | \"system\";\nexport type KeepThemeDensity = \"compact\" | \"comfortable\" | \"spacious\";\nexport type KeepThemeRadius = \"none\" | \"small\" | \"medium\" | \"large\" | \"full\";\n\nexport type KeepThemeVariables = Record<`--keep-${string}`, string | number>;\n\nexport type KeepThemeProviderProps = {\n children?: ReactNode;\n className?: string;\n id?: string;\n title?: string;\n role?: string;\n tabIndex?: number;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n \"data-testid\"?: string;\n [key: `data-${string}`]: string | undefined;\n theme?: KeepThemeName;\n mode?: KeepThemeMode;\n density?: KeepThemeDensity;\n radius?: KeepThemeRadius;\n accentColor?: \"blue\" | \"green\" | \"violet\" | \"orange\" | \"rose\" | (string & {});\n highContrast?: boolean;\n reducedMotion?: boolean;\n variables?: KeepThemeVariables;\n style?: CSSProperties & KeepThemeVariables;\n asChild?: boolean;\n};\n\n/** Scopes KeepKit tokens and opt-in component styles to one subtree. */\nexport function KeepThemeProvider({\n children,\n theme = \"default\",\n mode = \"system\",\n density = \"comfortable\",\n radius = \"medium\",\n accentColor,\n highContrast = false,\n reducedMotion = false,\n variables,\n style,\n className,\n asChild = false,\n ...props\n}: KeepThemeProviderProps) {\n const themeClassName = [\n \"keep-theme\",\n `keep-theme--${theme}`,\n `keep-theme--${mode}`,\n `keep-theme--density-${density}`,\n `keep-theme--radius-${radius}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n const themeStyle = {\n ...style,\n ...(accentColor && !highContrast ? { \"--keep-accent\": accentColor, \"--keep-primary\": accentColor } : {}),\n ...variables,\n } as CSSProperties & KeepThemeVariables;\n const rootProps = {\n ...props,\n className: themeClassName,\n style: themeStyle,\n \"data-keep-theme\": theme,\n \"data-theme\": theme,\n \"data-mode\": mode,\n \"data-density\": density,\n \"data-radius\": radius,\n \"data-accent-color\": accentColor,\n \"data-high-contrast\": highContrast ? \"true\" : undefined,\n \"data-reduced-motion\": reducedMotion ? \"true\" : undefined,\n };\n\n if (asChild) {\n if (!isValidElement(children))\n throw new Error(\"KeepThemeProvider with asChild requires a single React element child.\");\n return cloneElement(children, rootProps);\n }\n return <div {...rootProps}>{children}</div>;\n}\n"],"mappings":"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","names":["jsx","useState","jsx","useState","jsx","jsx","jsxs","Fragment","jsx","jsxs","KeepErrorBoundary","useKeepList","useMemo","useState","useRef","useState","useMemo","useKeepList","isValidElement","useKeepList","useKeepList","isValidElement","useKeepItem","useKeepItem","useKeepContext","useState","useKeepContext","useState","getDisplayStatus","getStatusLabelKey","jsx","jsx","jsxs","Fragment","jsx","jsxs","isValidElement","getErrorMessage","jsx","isValidElement","isValidElement","useKeepList","useMemo","useState","useState","useKeepList","useMemo","jsx","jsxs","isValidElement","useEffect","useState","useState","useEffect","Fragment","jsx","jsxs","jsx","jsxs","KeepErrorBoundary","jsx","isValidElement","useKeepItem","useCallback","useEffect","useRef","useState","useKeepItem","useState","useRef","useEffect","useCallback","Fragment","jsx","jsxs","isValidElement","getErrorMessage","useKeepContext","useEffect","useState","useKeepContext","useState","useEffect","jsx","jsxs","useKeepContext","useKeepContext","getErrorMessage","jsx","jsxs","useKeepItem","useCallback","useEffect","useState","useKeepItem","useState","useEffect","useCallback","Fragment","jsx","jsxs","getErrorMessage","useKeepContext","useKeepContext","jsx","jsxs","isValidElement","useKeepContext","useEffect","useRef","useState","useKeepContext","getStatusLabelKey","useState","useRef","useEffect","Fragment","jsx","jsxs","isValidElement","cloneElement","isValidElement","jsx","KeepErrorBoundary","useKeepContext","useKeepItem","useKeepList","jsx","jsxs","jsx"]}