@keepkit/ui 0.16.0 → 0.18.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/README.md +10 -2
- package/dist/index.d.ts +232 -156
- package/dist/index.js +1636 -1117
- package/dist/index.js.map +1 -1
- package/dist/styles/base.css +21 -0
- package/dist/styles/collection.css +121 -0
- package/dist/styles/status.css +44 -0
- package/dist/styles/sync.css +45 -32
- package/dist/theme.css +1 -0
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -58,9 +58,13 @@ function SavedArticles() {
|
|
|
58
58
|
|
|
59
59
|
`keep.Collection`は検索、ソート、ページング、loading / empty / error、ARIA live通知を標準で提供します。検索は既定で300msデバウンスされます。`features={{ tagFilter: true, bulkActions: true }}`でタグフィルターと一括操作も有効にできます。個別の`KeepList`、`KeepSearchInput`、`KeepSortSelect`、`KeepPagination`、`KeepItemCheckbox`、`KeepTagEditor`などは高度なレイアウト用に利用できます。`KeepBulkActions`はrender propsで操作UIを差し替えられ、`isAllSelected` / `toggleSelectAll`で表示中アイテムを一括操作できます。`KeepNoteEditor`は既定300msのデバウンス保存に対応し、`debounceMs={0}`でフォーム送信のみへ戻せます。通知領域だけを明示的に置く場合は`KeepAnnouncer`(`KeepAnnouncements`のalias)を使えます。
|
|
60
60
|
`KeepItemCard`は`href`、`onOpen`、`linkTarget`、`linkComponent`に対応し、保存アイテムから詳細ページへ遷移できます。非公開・期限切れ等の`status`を持つアイテムは自動的にリンクを無効化します。`KeepBackup`はJSONのエクスポート、merge / replaceインポート、結果件数、容量エラー表示を提供します。
|
|
61
|
+
`KeepTourBar`(alias: `KeepNavigator`)は進行度、前へ・次へ、一覧へ戻る操作をURLまたはコールバックで提供します。前後ボタンには隣接アイテム名のプレビューが付き、`getItemTitle`で表示名を差し替えられます。`keyboardShortcuts`を指定するとJ/Kまたは]/[で巡回でき、`useKeepTourShortcuts`ではキーと動作を個別に差し替えられます。`KeepReorderableList`はドラッグ操作と矢印キーによる並び替えを提供し、ドラッグ中の挿入位置を表示します。
|
|
62
|
+
`KeepList`や`KeepCollection`のカードは検索語を大文字小文字を区別せず`<mark class="keep-highlight" data-highlight="true">`で表示します。単体の`KeepItemCard`では`highlightQuery`、任意のテキストでは`KeepHighlight`を使えます。`KeepItemCard.Media`は読み込み状態を`data-media-status`で公開し、失敗時は`fallback`または標準SVGへ切り替わります。
|
|
63
|
+
テーマCSSではハイライト用の`--keep-highlight-bg` / `--keep-highlight-fg`(ライト/ダーク対応)、タイトル2行・メモプレビュー3行の制限、メディアの固定アスペクト比を適用します。`KeepItemStatusBadge`は状態ラベルに加えてチェック・時計・進入禁止・鍵のSVGアイコンを表示し、状態ごとの形状とトーンを組み合わせます。個別の状態スタイルは`@keepkit/ui/styles/status.css`からも読み込めます。
|
|
61
64
|
外部URLの詳細リンクには`target="_blank"`と`rel="noreferrer"`が既定で補完され、利用できないカードには`aria-disabled="true"`と`data-item-status`が付与されます。同期競合ダイアログではローカルとリモートの更新日時・メモを並べて確認できます。
|
|
62
65
|
|
|
63
66
|
`KeepList`は初回ロード中、`layout`に合う`KeepItemCardSkeleton`を既定で6枚表示します。`loadingCount`で枚数を変更でき、従来の`loading`または`renderLoading`で完全に差し替えられます。`layout="auto"`は画面幅ではなく配置コンテナ幅に追従し、サイドバーやモーダルでも1列から複数列へ切り替わります。スケルトンのパルスは`prefers-reduced-motion`で静止表示になります。
|
|
67
|
+
カードグループはRoving Tabindexを採用しており、カードにフォーカスして矢印キー、Home、Endで移動できます。
|
|
64
68
|
|
|
65
69
|
カードの一部だけを配置し直す場合はCompound APIを利用できます。画像alt、タイトルリンク、タグ一覧のARIAラベル、保存操作の状態は各パーツでも維持されます。
|
|
66
70
|
|
|
@@ -82,7 +86,7 @@ const onFeedback = useKeepToastFeedback(toast);
|
|
|
82
86
|
<KeepKitProvider storage={storage} onFeedback={onFeedback}>{children}</KeepKitProvider>;
|
|
83
87
|
```
|
|
84
88
|
|
|
85
|
-
v0.
|
|
89
|
+
v0.18.0では`KeepTourBar` / `KeepNavigator`、`KeepReorderableList`、`useKeepTourShortcuts`を利用できます。`KeepCollection urlSync layout="list" | "grid" | "compact"`、`KeepBulkActions selectionScope="page" | "query" | "all"`、`KeepUndo`も利用できます。`createNextPagesRouterAdapter`はNext.js Pages Router用の注入adapterです。`locale`は16言語に対応し、`labels`で上書きできます。認証付き同期は`createAuthenticatedSyncKit`から利用できます。
|
|
86
90
|
Phase 4の状態UIとして`KeepItemStatusBadge`、`KeepStaleNotice`、`KeepPruneStaleButton`、`KeepSyncStatusBanner`、`KeepSyncRecoveryDialog`を利用できます。`import "@keepkit/ui/theme.css"`でテーマCSSを有効にできます。
|
|
87
91
|
|
|
88
92
|
### Tailwind/shadcnテーマ
|
|
@@ -171,9 +175,13 @@ function SavedArticles() {
|
|
|
171
175
|
|
|
172
176
|
The opt-in theme adds neutral borders, surfaces, shadows, focus treatment, and decorative action icons without changing accessible names. Target individual controls with `data-keep-action`, or override `--keep-icon-size`, `--keep-control-gap`, `--keep-shadow`, `--keep-success`, and `--keep-warning`. Consumers that omit the CSS keep the headless markup, and `KeepButton icons` continues to take precedence over the built-in icon.
|
|
173
177
|
`KeepItemCard` accepts `href`, `onOpen`, `linkTarget`, and `linkComponent` for detail-page navigation. Links are disabled for unavailable `status` values such as private or expired. `KeepBackup` provides JSON export, merge/replace import, result counts, and quota-error messaging.
|
|
178
|
+
`KeepTourBar` (aliased as `KeepNavigator`) provides progress, previous/next, and return-to-list actions through URLs or callbacks. Adjacent item titles are previewed below the navigation labels; customize them with `getItemTitle`. Set `keyboardShortcuts` for J/K or ]/[ tour navigation, or use `useKeepTourShortcuts` for custom bindings. `KeepReorderableList` supports drag and keyboard reordering and shows the active insertion position.
|
|
179
|
+
Cards rendered by `KeepList` and `KeepCollection` highlight case-insensitive search matches with `<mark class="keep-highlight" data-highlight="true">`. Use `highlightQuery` on a standalone `KeepItemCard` or `KeepHighlight` for arbitrary text. `KeepItemCard.Media` exposes its loading state through `data-media-status` and replaces failed images with `fallback` or the built-in SVG placeholder.
|
|
180
|
+
The theme defines WCAG-oriented `--keep-highlight-bg` / `--keep-highlight-fg` pairs for light and dark modes, clamps titles to two lines and memo previews to three, and reserves a stable media aspect ratio. `KeepItemStatusBadge` combines visible status text with check, clock, ban, or lock SVG icons; import `@keepkit/ui/styles/status.css` when using the status styles independently.
|
|
174
181
|
External detail URLs receive `target="_blank"` and `rel="noreferrer"` defaults. Unavailable cards expose `aria-disabled="true"` and normalized `data-item-status` values, and the sync recovery dialog compares local and remote updated dates and notes side by side.
|
|
175
182
|
|
|
176
183
|
During initial loading, `KeepList` renders six layout-matched `KeepItemCardSkeleton` placeholders by default. Change the count with `loadingCount`, or replace them with the existing `loading` prop or its `renderLoading` alias. `layout="auto"` responds to the available container width rather than viewport width, so embedded sidebars and dialogs collapse to one column. Skeleton pulses become static under `prefers-reduced-motion`.
|
|
184
|
+
Card groups use Roving Tabindex, so a focused card can move to adjacent cards with arrow keys or jump with Home and End.
|
|
177
185
|
|
|
178
186
|
Use the compound parts to rearrange only the card regions you own while preserving image alt text, linked headings, the labelled tag list, and action state:
|
|
179
187
|
|
|
@@ -195,7 +203,7 @@ const onFeedback = useKeepToastFeedback(toast);
|
|
|
195
203
|
<KeepKitProvider storage={storage} onFeedback={onFeedback}>{children}</KeepKitProvider>;
|
|
196
204
|
```
|
|
197
205
|
|
|
198
|
-
In v0.
|
|
206
|
+
In v0.18.0, use `KeepTourBar` / `KeepNavigator`, `KeepReorderableList`, and `useKeepTourShortcuts` for continuous saved-item tours. `KeepCollection urlSync` with `layout="list" | "grid" | "compact"`, `KeepBulkActions selectionScope="page" | "query" | "all"`, and `KeepUndo` remain available. `createNextPagesRouterAdapter` is the injected adapter for Next.js Pages Router. `locale` includes 16 built-in dictionaries, and `labels` overrides individual entries. Authenticated sync is available through `createAuthenticatedSyncKit`.
|
|
199
207
|
Phase 4 adds `KeepItemStatusBadge`, `KeepStaleNotice`, `KeepPruneStaleButton`, `KeepSyncStatusBanner`, and `KeepSyncRecoveryDialog` for unavailable items, sync failures, conflict resolution, and backup recovery. Import `@keepkit/ui/theme.css` or `@keepkit/ui/tailwind.css` for the opt-in theme layer.
|
|
200
208
|
|
|
201
209
|
### Tailwind and shadcn theme
|
package/dist/index.d.ts
CHANGED
|
@@ -1,69 +1,40 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { HTMLAttributes, ReactNode, ComponentType, InputHTMLAttributes, ImgHTMLAttributes, MouseEvent, HTMLAttributeAnchorTarget, KeyboardEvent, FormHTMLAttributes, SelectHTMLAttributes, ButtonHTMLAttributes, CSSProperties } from 'react';
|
|
3
|
+
import { KeepListQuery, KeepUrlSyncOptions, ImportItemsResult, KeepItem, KeepItemStatus, KeepSyncConflict, KeepItemInput } from '@keepkit/core/core';
|
|
4
4
|
export { AuthenticatedSyncAuthContext, AuthenticatedSyncKit, AuthenticatedSyncKitOptions, AuthenticatedSyncRequestContext, AuthenticatedSyncTransport, KeepItem, KeepItemInput, KeepListQuery, KeepScope, KeepSyncConflict, KeepSyncResolution, KeepSyncState, KeepSyncStatus, KeepUndoState, KeepUrlSyncOptions, createAuthenticatedSyncKit } from '@keepkit/core/core';
|
|
5
|
-
import { KeepButtonProps as KeepButtonProps$1, UseKeepListResult, KeepErrorBoundaryProps, CreateKeepKitOptions as CreateKeepKitOptions$1, KeepProviderProps, useKeepContext, useKeepItem, useKeepList, KeepShortcutOptions } from '@keepkit/core/react';
|
|
6
|
-
export { KeepButtonState, KeepContextValue, KeepErrorBoundary, KeepErrorBoundaryProps, KeepProvider, KeepProviderProps, KeepShortcutOptions, useKeepContext, useKeepItem, useKeepList, useKeepShortcut } from '@keepkit/core/react';
|
|
5
|
+
import { KeepButtonProps as KeepButtonProps$1, UseKeepListResult, KeepErrorBoundaryProps, UseKeepNavigatorResult, CreateKeepKitOptions as CreateKeepKitOptions$1, KeepProviderProps, useKeepContext, useKeepItem, useKeepList, UseKeepNavigatorOptions, KeepShortcutOptions } from '@keepkit/core/react';
|
|
6
|
+
export { KeepButtonState, KeepContextValue, KeepErrorBoundary, KeepErrorBoundaryProps, KeepProvider, KeepProviderProps, KeepShortcutOptions, useKeepContext, useKeepItem, useKeepList, useKeepNavigator, useKeepShortcut } from '@keepkit/core/react';
|
|
7
7
|
export { FallbackStorageAdapter, IndexedDBAdapter, IndexedDBSyncQueueAdapter, LocalStorageAdapter, LocalStorageSyncQueueAdapter, SyncStorageAdapter, createBrowserStorageAdapter, createStorageAdapter } from '@keepkit/core/storage';
|
|
8
8
|
|
|
9
|
-
type
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
declare const KEEP_BUILT_IN_LOCALES: readonly ["en", "ja", "ko", "zh-Hans", "zh-Hant", "th", "fr", "es", "pt-BR", "it", "de", "ru", "fil", "vi", "id", "ms"];
|
|
14
|
-
type KeepUiLocale = (typeof KEEP_BUILT_IN_LOCALES)[number];
|
|
15
|
-
declare function getKeepLocaleLabels(locale?: string): KeepUiLocaleLabels;
|
|
16
|
-
|
|
17
|
-
type KeepUiLabelContext = {
|
|
18
|
-
locale?: string;
|
|
19
|
-
labels: Readonly<Record<KeepUiLabelKey, string>>;
|
|
20
|
-
customLabels?: KeepUiLabels;
|
|
21
|
-
labelResolver?: (key: KeepUiLabelKey, context: {
|
|
22
|
-
locale?: string;
|
|
23
|
-
}) => string | undefined;
|
|
24
|
-
emitFeedback: <TMeta>(event: KeepUiFeedbackEvent<TMeta>) => void;
|
|
25
|
-
};
|
|
26
|
-
type KeepUiFeedbackBase<TType extends string> = {
|
|
27
|
-
type: TType;
|
|
28
|
-
message: string;
|
|
29
|
-
};
|
|
30
|
-
type KeepUiFeedbackEvent<TMeta = Record<string, unknown>> = (KeepUiFeedbackBase<"item-saved"> & {
|
|
31
|
-
item: KeepItem<TMeta>;
|
|
32
|
-
}) | (KeepUiFeedbackBase<"item-removed"> & {
|
|
33
|
-
item: KeepItem<TMeta>;
|
|
34
|
-
undo: () => void | Promise<void>;
|
|
35
|
-
undoLabel: string;
|
|
36
|
-
}) | (KeepUiFeedbackBase<"item-restored"> & {
|
|
37
|
-
item?: KeepItem<TMeta>;
|
|
38
|
-
items: KeepItem<TMeta>[];
|
|
39
|
-
}) | KeepUiFeedbackBase<"sync-completed"> | (KeepUiFeedbackBase<"sync-failed"> & {
|
|
40
|
-
error: unknown;
|
|
41
|
-
}) | (KeepUiFeedbackBase<"stale-pruned"> & {
|
|
42
|
-
item?: KeepItem<TMeta>;
|
|
43
|
-
items: KeepItem<TMeta>[];
|
|
44
|
-
undo: () => void | Promise<void>;
|
|
45
|
-
undoLabel: string;
|
|
46
|
-
});
|
|
47
|
-
type KeepUiProviderProps<TMeta = Record<string, unknown>> = {
|
|
48
|
-
labels?: KeepUiLabels;
|
|
49
|
-
locale?: string;
|
|
50
|
-
labelResolver?: KeepUiLabelContext["labelResolver"];
|
|
51
|
-
onFeedback?: (event: KeepUiFeedbackEvent<TMeta>) => void;
|
|
52
|
-
children?: ReactNode;
|
|
9
|
+
type KeepUrlAdapter = {
|
|
10
|
+
getUrl: () => string;
|
|
11
|
+
subscribe?: (listener: () => void) => () => void;
|
|
12
|
+
navigate: (url: string, mode: "replace" | "push") => void;
|
|
53
13
|
};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
14
|
+
type KeepPagesRouterLike = {
|
|
15
|
+
asPath?: string;
|
|
16
|
+
push: (url: string, as?: string, options?: {
|
|
17
|
+
shallow?: boolean;
|
|
18
|
+
}) => Promise<boolean> | boolean;
|
|
19
|
+
replace: (url: string, as?: string, options?: {
|
|
20
|
+
shallow?: boolean;
|
|
21
|
+
}) => Promise<boolean> | boolean;
|
|
22
|
+
events?: {
|
|
23
|
+
on: (event: string, listener: () => void) => void;
|
|
24
|
+
off: (event: string, listener: () => void) => void;
|
|
62
25
|
};
|
|
63
26
|
};
|
|
64
|
-
type
|
|
65
|
-
|
|
66
|
-
|
|
27
|
+
type KeepUrlSyncProps<TMeta = Record<string, unknown>> = {
|
|
28
|
+
enabled?: boolean;
|
|
29
|
+
query: KeepListQuery<TMeta>;
|
|
30
|
+
onQueryChange: (query: KeepListQuery<TMeta> | ((previous: KeepListQuery<TMeta>) => KeepListQuery<TMeta>)) => void;
|
|
31
|
+
options?: KeepUrlSyncOptions;
|
|
32
|
+
adapter?: KeepUrlAdapter;
|
|
33
|
+
};
|
|
34
|
+
/** Adapter for Next.js Pages Router. It intentionally uses structural typing and has no Next dependency. */
|
|
35
|
+
declare function createNextPagesRouterAdapter(router: KeepPagesRouterLike): KeepUrlAdapter;
|
|
36
|
+
/** Synchronizes collection filters with browser history and supports back/forward restoration. */
|
|
37
|
+
declare function useKeepUrlSync<TMeta = Record<string, unknown>>({ enabled, query, onQueryChange, options, adapter: providedAdapter, }: KeepUrlSyncProps<TMeta>): void;
|
|
67
38
|
|
|
68
39
|
type KeepBackupProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
69
40
|
filename?: string;
|
|
@@ -74,6 +45,13 @@ type KeepBackupProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTML
|
|
|
74
45
|
declare function KeepBackup<TMeta = Record<string, unknown>>({ filename, onExport, onImported, ...props }: KeepBackupProps<TMeta>): react.JSX.Element;
|
|
75
46
|
|
|
76
47
|
type RenderProp<TState> = (state: TState) => ReactNode;
|
|
48
|
+
type KeepHighlightProps = {
|
|
49
|
+
children?: ReactNode;
|
|
50
|
+
query?: string;
|
|
51
|
+
};
|
|
52
|
+
/** Wraps case-insensitive, literal query matches in a style-free mark element. */
|
|
53
|
+
declare function KeepHighlight({ children, query }: KeepHighlightProps): ReactNode;
|
|
54
|
+
declare function highlightText(text: string, query: string): ReactNode;
|
|
77
55
|
type KeepButtonLabels = {
|
|
78
56
|
saved?: ReactNode;
|
|
79
57
|
unsaved?: ReactNode;
|
|
@@ -143,6 +121,22 @@ type KeepButtonProps<TMeta = Record<string, unknown>> = KeepButtonProps$1<TMeta>
|
|
|
143
121
|
/** A style-free save toggle with localized labels and the core button's ARIA/asChild behavior. */
|
|
144
122
|
declare function KeepButton<TMeta = Record<string, unknown>>({ labels, icons, iconOnly, showLabel, iconClassName, onClick, onToggleError, ...props }: KeepButtonProps<TMeta>): react.JSX.Element;
|
|
145
123
|
|
|
124
|
+
type KeepItemCheckboxProps<TMeta = Record<string, unknown>> = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "checked" | "defaultChecked" | "onChange"> & {
|
|
125
|
+
item: KeepItem<TMeta>;
|
|
126
|
+
checked?: boolean;
|
|
127
|
+
label?: ReactNode;
|
|
128
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
129
|
+
};
|
|
130
|
+
/** A reusable accessible selection checkbox for a saved item. */
|
|
131
|
+
declare function KeepItemCheckbox<TMeta = Record<string, unknown>>({ item, checked, label, onCheckedChange, "aria-label": ariaLabel, ...props }: KeepItemCheckboxProps<TMeta>): react.JSX.Element;
|
|
132
|
+
|
|
133
|
+
type KeepUndoProps = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
134
|
+
children?: ReactNode;
|
|
135
|
+
label?: ReactNode;
|
|
136
|
+
};
|
|
137
|
+
/** Presents the short-lived undo action created by removeWithUndo/removeBatchWithUndo. */
|
|
138
|
+
declare function KeepUndo({ children, label, ...props }: KeepUndoProps): react.JSX.Element | null;
|
|
139
|
+
|
|
146
140
|
type KeepItemCardState<TMeta = Record<string, unknown>> = {
|
|
147
141
|
item: KeepItem<TMeta>;
|
|
148
142
|
isSaved: boolean;
|
|
@@ -188,6 +182,7 @@ type KeepItemCardProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HT
|
|
|
188
182
|
linkComponent?: ComponentType<KeepItemCardLinkProps>;
|
|
189
183
|
linkTargetAttribute?: HTMLAttributeAnchorTarget;
|
|
190
184
|
linkRel?: string;
|
|
185
|
+
highlightQuery?: string;
|
|
191
186
|
};
|
|
192
187
|
type KeepItemCardMediaProps = Omit<HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
193
188
|
children?: ReactNode;
|
|
@@ -203,11 +198,12 @@ type KeepItemCardSkeletonProps = Omit<HTMLAttributes<HTMLElement>, "children"> &
|
|
|
203
198
|
layout?: KeepLayoutPreset;
|
|
204
199
|
};
|
|
205
200
|
/** A low-dependency item presentation primitive with composable card parts. */
|
|
206
|
-
declare function KeepItemCardRoot<TMeta = Record<string, unknown>>({ item, title, getTitle, getImageProps, imageComponent: ImageComponent, renderImage, renderTags, showTags, showSavedAt, imageAlt, render, children, removeLabel, onRemoveError, onRemoved, onRetry, showSaveButton, saveButtonLabels, asChild, href: hrefOption, onOpen, linkTarget, linkComponent: LinkComponent, linkTargetAttribute, linkRel, className, ...rootProps }: KeepItemCardProps<TMeta>): react.JSX.Element;
|
|
201
|
+
declare function KeepItemCardRoot<TMeta = Record<string, unknown>>({ item, title, getTitle, getImageProps, imageComponent: ImageComponent, renderImage, renderTags, showTags, showSavedAt, imageAlt, render, children, removeLabel, onRemoveError, onRemoved, onRetry, showSaveButton, saveButtonLabels, asChild, href: hrefOption, onOpen, linkTarget, linkComponent: LinkComponent, linkTargetAttribute, linkRel, highlightQuery, className, ...rootProps }: KeepItemCardProps<TMeta>): react.JSX.Element;
|
|
207
202
|
declare function KeepItemCardMedia({ children, fallback, ...props }: KeepItemCardMediaProps): react.JSX.Element;
|
|
208
203
|
declare function KeepItemCardContent({ children, ...props }: KeepItemCardContentProps): react.JSX.Element;
|
|
209
204
|
declare function KeepItemCardTitle({ as, children, ...props }: KeepItemCardTitleProps): react.DetailedReactHTMLElement<{
|
|
210
205
|
"data-keep-card-part": string;
|
|
206
|
+
"data-line-clamp": string;
|
|
211
207
|
onChange?: react.ChangeEventHandler<HTMLHeadingElement, Element> | undefined;
|
|
212
208
|
onError?: react.ReactEventHandler<HTMLHeadingElement> | undefined;
|
|
213
209
|
className?: string | undefined | undefined;
|
|
@@ -520,36 +516,6 @@ type KeepListProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLEl
|
|
|
520
516
|
/** A list primitive with built-in loading, empty, error, and removal states. */
|
|
521
517
|
declare function KeepList<TMeta = Record<string, unknown>>(props: KeepListProps<TMeta>): react.JSX.Element;
|
|
522
518
|
|
|
523
|
-
type KeepUrlAdapter = {
|
|
524
|
-
getUrl: () => string;
|
|
525
|
-
subscribe?: (listener: () => void) => () => void;
|
|
526
|
-
navigate: (url: string, mode: "replace" | "push") => void;
|
|
527
|
-
};
|
|
528
|
-
type KeepPagesRouterLike = {
|
|
529
|
-
asPath?: string;
|
|
530
|
-
push: (url: string, as?: string, options?: {
|
|
531
|
-
shallow?: boolean;
|
|
532
|
-
}) => Promise<boolean> | boolean;
|
|
533
|
-
replace: (url: string, as?: string, options?: {
|
|
534
|
-
shallow?: boolean;
|
|
535
|
-
}) => Promise<boolean> | boolean;
|
|
536
|
-
events?: {
|
|
537
|
-
on: (event: string, listener: () => void) => void;
|
|
538
|
-
off: (event: string, listener: () => void) => void;
|
|
539
|
-
};
|
|
540
|
-
};
|
|
541
|
-
type KeepUrlSyncProps<TMeta = Record<string, unknown>> = {
|
|
542
|
-
enabled?: boolean;
|
|
543
|
-
query: KeepListQuery<TMeta>;
|
|
544
|
-
onQueryChange: (query: KeepListQuery<TMeta> | ((previous: KeepListQuery<TMeta>) => KeepListQuery<TMeta>)) => void;
|
|
545
|
-
options?: KeepUrlSyncOptions;
|
|
546
|
-
adapter?: KeepUrlAdapter;
|
|
547
|
-
};
|
|
548
|
-
/** Adapter for Next.js Pages Router. It intentionally uses structural typing and has no Next dependency. */
|
|
549
|
-
declare function createNextPagesRouterAdapter(router: KeepPagesRouterLike): KeepUrlAdapter;
|
|
550
|
-
/** Synchronizes collection filters with browser history and supports back/forward restoration. */
|
|
551
|
-
declare function useKeepUrlSync<TMeta = Record<string, unknown>>({ enabled, query, onQueryChange, options, adapter: providedAdapter, }: KeepUrlSyncProps<TMeta>): void;
|
|
552
|
-
|
|
553
519
|
type KeepCollectionFeature = "search" | "sort" | "pagination" | "tagFilter" | "bulkActions";
|
|
554
520
|
type KeepLayoutPreset = "list" | "grid" | "compact" | "auto";
|
|
555
521
|
type KeepCollectionProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
@@ -574,29 +540,42 @@ type KeepCollectionProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<
|
|
|
574
540
|
/** A batteries-included collection with query controls and accessible status feedback. */
|
|
575
541
|
declare function KeepCollection<TMeta = Record<string, unknown>>(props: KeepCollectionProps<TMeta>): react.JSX.Element;
|
|
576
542
|
|
|
577
|
-
type KeepItemCheckboxProps<TMeta = Record<string, unknown>> = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "checked" | "defaultChecked" | "onChange"> & {
|
|
578
|
-
item: KeepItem<TMeta>;
|
|
579
|
-
checked?: boolean;
|
|
580
|
-
label?: ReactNode;
|
|
581
|
-
onCheckedChange?: (checked: boolean) => void;
|
|
582
|
-
};
|
|
583
|
-
/** A reusable accessible selection checkbox for a saved item. */
|
|
584
|
-
declare function KeepItemCheckbox<TMeta = Record<string, unknown>>({ item, checked, label, onCheckedChange, "aria-label": ariaLabel, ...props }: KeepItemCheckboxProps<TMeta>): react.JSX.Element;
|
|
585
|
-
|
|
586
|
-
type KeepItemStatusBadgeProps = Omit<HTMLAttributes<HTMLSpanElement>, "children"> & {
|
|
587
|
-
status?: KeepItemStatus | "restricted";
|
|
588
|
-
label?: ReactNode;
|
|
589
|
-
};
|
|
590
|
-
type KeepDisplayStatus = "available" | "expired" | "removed" | "restricted";
|
|
591
|
-
/** Displays the normalized availability state of a saved item. */
|
|
592
|
-
declare function KeepItemStatusBadge({ status, label, className, ...props }: KeepItemStatusBadgeProps): react.JSX.Element;
|
|
593
|
-
|
|
594
543
|
type KeepLayoutProps = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
595
544
|
layout?: KeepLayoutPreset;
|
|
596
545
|
children?: ReactNode;
|
|
597
546
|
};
|
|
598
547
|
/** A container-aware layout wrapper with a stable preset attribute for host or theme CSS. */
|
|
599
|
-
declare function KeepLayout({ layout, children, ...props }: KeepLayoutProps): react.JSX.Element;
|
|
548
|
+
declare function KeepLayout({ layout, children, onKeyDown, onFocusCapture, ...props }: KeepLayoutProps): react.JSX.Element;
|
|
549
|
+
|
|
550
|
+
type KeepReorderableItemState = {
|
|
551
|
+
index: number;
|
|
552
|
+
isDragging: boolean;
|
|
553
|
+
dragHandleProps: {
|
|
554
|
+
role: "button";
|
|
555
|
+
tabIndex: 0;
|
|
556
|
+
draggable: true;
|
|
557
|
+
"data-drag-handle": "true";
|
|
558
|
+
"aria-label": string;
|
|
559
|
+
"aria-grabbed": boolean;
|
|
560
|
+
onDragStart: () => void;
|
|
561
|
+
onDragEnd: () => void;
|
|
562
|
+
onKeyDown: (event: KeyboardEvent<HTMLElement>) => void;
|
|
563
|
+
};
|
|
564
|
+
moveUp: () => void;
|
|
565
|
+
moveDown: () => void;
|
|
566
|
+
};
|
|
567
|
+
type KeepReorderableListProps<TItem extends {
|
|
568
|
+
id: string;
|
|
569
|
+
} = KeepItem> = Omit<HTMLAttributes<HTMLUListElement>, "children" | "onChange"> & {
|
|
570
|
+
items: readonly TItem[];
|
|
571
|
+
onReorder: (orderedIds: string[]) => void | Promise<void>;
|
|
572
|
+
renderItem: (item: TItem, state: KeepReorderableItemState) => ReactNode;
|
|
573
|
+
itemLabel?: (item: TItem, index: number) => string;
|
|
574
|
+
};
|
|
575
|
+
/** Accessible drag-and-drop list with keyboard up/down fallback and no styling assumptions. */
|
|
576
|
+
declare function KeepReorderableList<TItem extends {
|
|
577
|
+
id: string;
|
|
578
|
+
} = KeepItem>({ items, onReorder, renderItem, itemLabel, ...props }: KeepReorderableListProps<TItem>): react.JSX.Element;
|
|
600
579
|
|
|
601
580
|
type KeepNoteEditorState<TMeta = Record<string, unknown>> = {
|
|
602
581
|
item: KeepItem<TMeta>;
|
|
@@ -623,46 +602,6 @@ type KeepNoteEditorProps<TMeta = Record<string, unknown>> = Omit<FormHTMLAttribu
|
|
|
623
602
|
/** A controlled-by-default note editor that persists through useKeepItem. */
|
|
624
603
|
declare function KeepNoteEditor<TMeta = Record<string, unknown>>({ item, label, saveLabel, placeholder, debounceMs, onSaved, onSaveError, render, children, asChild, className, ...formProps }: KeepNoteEditorProps<TMeta>): react.JSX.Element;
|
|
625
604
|
|
|
626
|
-
type KeepStaleNoticeProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
627
|
-
item: KeepItem<TMeta>;
|
|
628
|
-
onRetry?: (item: KeepItem<TMeta>) => void | Promise<void>;
|
|
629
|
-
onRemoved?: (item: KeepItem<TMeta>) => void;
|
|
630
|
-
retryLabel?: ReactNode;
|
|
631
|
-
removeLabel?: ReactNode;
|
|
632
|
-
children?: ReactNode;
|
|
633
|
-
};
|
|
634
|
-
/** Provides retry and remove actions for an item whose source is no longer available. */
|
|
635
|
-
declare function KeepStaleNotice<TMeta = Record<string, unknown>>({ item, onRetry, onRemoved, retryLabel, removeLabel, children, className, ...props }: KeepStaleNoticeProps<TMeta>): react.JSX.Element;
|
|
636
|
-
type KeepPruneStaleButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
|
|
637
|
-
statuses?: KeepItemStatus[];
|
|
638
|
-
label?: ReactNode;
|
|
639
|
-
onPruned?: (ids: string[]) => void;
|
|
640
|
-
children?: ReactNode;
|
|
641
|
-
};
|
|
642
|
-
/** Removes all unavailable items through the provider's undo-capable batch action. */
|
|
643
|
-
declare function KeepPruneStaleButton<TMeta = Record<string, unknown>>({ statuses, label, onPruned, children, disabled, ...props }: KeepPruneStaleButtonProps): react.JSX.Element;
|
|
644
|
-
|
|
645
|
-
type KeepSyncRecoveryDialogProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, "children" | "title"> & {
|
|
646
|
-
open?: boolean;
|
|
647
|
-
onOpenChange?: (open: boolean) => void;
|
|
648
|
-
conflicts?: KeepSyncConflict<TMeta>[];
|
|
649
|
-
onManualMerge?: (conflict: KeepSyncConflict<TMeta>) => KeepItem<TMeta> | Promise<KeepItem<TMeta>>;
|
|
650
|
-
backup?: ReactNode;
|
|
651
|
-
showBackupControls?: boolean;
|
|
652
|
-
title?: ReactNode;
|
|
653
|
-
children?: ReactNode;
|
|
654
|
-
};
|
|
655
|
-
/** Resolves queued sync conflicts and guides users to restore a backup after data corruption. */
|
|
656
|
-
declare function KeepSyncRecoveryDialog<TMeta = Record<string, unknown>>({ open, onOpenChange, conflicts, onManualMerge, backup, showBackupControls, title, children, className, ...props }: KeepSyncRecoveryDialogProps<TMeta>): react.JSX.Element | null;
|
|
657
|
-
|
|
658
|
-
type KeepSyncStatusBannerProps = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
659
|
-
onRetry?: () => void | Promise<void>;
|
|
660
|
-
onResolveConflicts?: () => void;
|
|
661
|
-
children?: ReactNode;
|
|
662
|
-
};
|
|
663
|
-
/** Announces synchronization failures and exposes retry or conflict-recovery entry points. */
|
|
664
|
-
declare function KeepSyncStatusBanner({ onRetry, onResolveConflicts, children, className, ...props }: KeepSyncStatusBannerProps): react.JSX.Element | null;
|
|
665
|
-
|
|
666
605
|
type KeepTagEditorState = {
|
|
667
606
|
tags: string[];
|
|
668
607
|
setTags: (tags: string[]) => void;
|
|
@@ -679,6 +618,109 @@ type KeepTagEditorProps<TMeta = Record<string, unknown>> = Omit<FormHTMLAttribut
|
|
|
679
618
|
/** Edits one item's normalized tag set; Enter adds and Backspace removes the last tag. */
|
|
680
619
|
declare function KeepTagEditor<TMeta = Record<string, unknown>>({ item, availableTags, onSaved, onSaveError, render, ...props }: KeepTagEditorProps<TMeta>): react.JSX.Element;
|
|
681
620
|
|
|
621
|
+
type KeepUiLabelKey = "save" | "saved" | "remove" | "loading" | "saving" | "syncing" | "error" | "allTags" | "tags" | "filterTags" | "note" | "saveNote" | "noItems" | "loadingItems" | "errorItems" | "search" | "sort" | "newest" | "oldest" | "savedNewest" | "savedOldest" | "updatedNewest" | "updatedOldest" | "previousPage" | "nextPage" | "pagination" | "page" | "selectItems" | "selectedCount" | "deleteSelected" | "tagsToApply" | "applyTags" | "savedMessage" | "removedMessage" | "restoredMessage" | "syncFailedMessage" | "stalePrunedMessage" | "undo" | "undoAvailable" | "selectionScope" | "currentPage" | "searchResults" | "allItems" | "localVersion" | "remoteVersion" | "updatedAt" | "statusAvailable" | "noteSavedMessage" | "exportData" | "importData" | "importMode" | "merge" | "replace" | "importedCount" | "failedCount" | "storageQuotaError" | "statusExpired" | "statusRemoved" | "statusDeleted" | "statusPrivate" | "statusUnknown" | "retry" | "removeFromList" | "pruneStale" | "retrySync" | "resolveSync" | "keepLocal" | "useServer" | "manualMerge" | "close" | "backupRecovery" | "backupRecoveryDescription" | "syncPending" | "syncSynced" | "syncConflict";
|
|
622
|
+
type KeepUiLabels = Partial<Record<KeepUiLabelKey, string>>;
|
|
623
|
+
type KeepUiLocaleLabels = Record<KeepUiLabelKey, string>;
|
|
624
|
+
|
|
625
|
+
declare const KEEP_BUILT_IN_LOCALES: readonly ["en", "ja", "ko", "zh-Hans", "zh-Hant", "th", "fr", "es", "pt-BR", "it", "de", "ru", "fil", "vi", "id", "ms"];
|
|
626
|
+
type KeepUiLocale = (typeof KEEP_BUILT_IN_LOCALES)[number];
|
|
627
|
+
declare function getKeepLocaleLabels(locale?: string): KeepUiLocaleLabels;
|
|
628
|
+
|
|
629
|
+
type KeepUiLabelContext = {
|
|
630
|
+
locale?: string;
|
|
631
|
+
labels: Readonly<Record<KeepUiLabelKey, string>>;
|
|
632
|
+
customLabels?: KeepUiLabels;
|
|
633
|
+
labelResolver?: (key: KeepUiLabelKey, context: {
|
|
634
|
+
locale?: string;
|
|
635
|
+
}) => string | undefined;
|
|
636
|
+
emitFeedback: <TMeta>(event: KeepUiFeedbackEvent<TMeta>) => void;
|
|
637
|
+
};
|
|
638
|
+
type KeepUiFeedbackBase<TType extends string> = {
|
|
639
|
+
type: TType;
|
|
640
|
+
message: string;
|
|
641
|
+
};
|
|
642
|
+
type KeepUiFeedbackEvent<TMeta = Record<string, unknown>> = (KeepUiFeedbackBase<"item-saved"> & {
|
|
643
|
+
item: KeepItem<TMeta>;
|
|
644
|
+
}) | (KeepUiFeedbackBase<"item-removed"> & {
|
|
645
|
+
item: KeepItem<TMeta>;
|
|
646
|
+
undo: () => void | Promise<void>;
|
|
647
|
+
undoLabel: string;
|
|
648
|
+
}) | (KeepUiFeedbackBase<"item-restored"> & {
|
|
649
|
+
item?: KeepItem<TMeta>;
|
|
650
|
+
items: KeepItem<TMeta>[];
|
|
651
|
+
}) | KeepUiFeedbackBase<"sync-completed"> | (KeepUiFeedbackBase<"sync-failed"> & {
|
|
652
|
+
error: unknown;
|
|
653
|
+
}) | (KeepUiFeedbackBase<"stale-pruned"> & {
|
|
654
|
+
item?: KeepItem<TMeta>;
|
|
655
|
+
items: KeepItem<TMeta>[];
|
|
656
|
+
undo: () => void | Promise<void>;
|
|
657
|
+
undoLabel: string;
|
|
658
|
+
});
|
|
659
|
+
type KeepUiProviderProps<TMeta = Record<string, unknown>> = {
|
|
660
|
+
labels?: KeepUiLabels;
|
|
661
|
+
locale?: string;
|
|
662
|
+
labelResolver?: KeepUiLabelContext["labelResolver"];
|
|
663
|
+
onFeedback?: (event: KeepUiFeedbackEvent<TMeta>) => void;
|
|
664
|
+
children?: ReactNode;
|
|
665
|
+
};
|
|
666
|
+
/** Provides one complete locale-aware label source to every UI primitive. */
|
|
667
|
+
declare function KeepUiProvider<TMeta = Record<string, unknown>>({ labels, locale, labelResolver, onFeedback, children, }: KeepUiProviderProps<TMeta>): react.JSX.Element;
|
|
668
|
+
declare function useKeepUiLabels(): KeepUiLabelContext;
|
|
669
|
+
|
|
670
|
+
type KeepToastFeedbackOptions = {
|
|
671
|
+
action?: {
|
|
672
|
+
label: string;
|
|
673
|
+
onClick: () => void;
|
|
674
|
+
};
|
|
675
|
+
};
|
|
676
|
+
type KeepToastHandler = (message: string, options?: KeepToastFeedbackOptions) => unknown;
|
|
677
|
+
/** Adapts KeepKit feedback to Sonner-like toast functions without adding a toast dependency. */
|
|
678
|
+
declare function useKeepToastFeedback<TMeta = Record<string, unknown>>(showToast: KeepToastHandler): (event: KeepUiFeedbackEvent<TMeta>) => void;
|
|
679
|
+
|
|
680
|
+
type KeepItemStatusBadgeProps = Omit<HTMLAttributes<HTMLSpanElement>, "children"> & {
|
|
681
|
+
status?: KeepItemStatus | "restricted";
|
|
682
|
+
label?: ReactNode;
|
|
683
|
+
};
|
|
684
|
+
type KeepDisplayStatus = "available" | "expired" | "removed" | "restricted";
|
|
685
|
+
/** Displays the normalized availability state of a saved item. */
|
|
686
|
+
declare function KeepItemStatusBadge({ status, label, className, ...props }: KeepItemStatusBadgeProps): react.JSX.Element;
|
|
687
|
+
|
|
688
|
+
type KeepTourShortcutsOptions = {
|
|
689
|
+
onNext: () => void | Promise<void>;
|
|
690
|
+
onPrev: () => void | Promise<void>;
|
|
691
|
+
enabled?: boolean;
|
|
692
|
+
allowInEditable?: boolean;
|
|
693
|
+
preventDefault?: boolean;
|
|
694
|
+
nextKeys?: readonly string[];
|
|
695
|
+
prevKeys?: readonly string[];
|
|
696
|
+
onError?: (error: unknown) => void;
|
|
697
|
+
};
|
|
698
|
+
/** Bind J/]/K/[ (or custom keys) to previous/next tour actions. */
|
|
699
|
+
declare function useKeepTourShortcuts({ onNext, onPrev, enabled, allowInEditable, preventDefault, nextKeys, prevKeys, onError, }: KeepTourShortcutsOptions): void;
|
|
700
|
+
|
|
701
|
+
type KeepTourBarProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
702
|
+
navigation?: UseKeepNavigatorResult<TMeta>;
|
|
703
|
+
currentId?: string;
|
|
704
|
+
initialIndex?: number;
|
|
705
|
+
showProgress?: boolean;
|
|
706
|
+
prevHref?: string;
|
|
707
|
+
nextHref?: string;
|
|
708
|
+
backHref?: string;
|
|
709
|
+
onPrev?: () => void | Promise<void>;
|
|
710
|
+
onNext?: () => void | Promise<void>;
|
|
711
|
+
onBack?: () => void | Promise<void>;
|
|
712
|
+
prevLabel?: string;
|
|
713
|
+
nextLabel?: string;
|
|
714
|
+
backLabel?: string;
|
|
715
|
+
keyboardShortcuts?: boolean;
|
|
716
|
+
shortcutOptions?: Omit<KeepTourShortcutsOptions, "onNext" | "onPrev">;
|
|
717
|
+
progress?: ReactNode;
|
|
718
|
+
getItemTitle?: (item: KeepItem<TMeta>) => ReactNode;
|
|
719
|
+
};
|
|
720
|
+
/** Headless previous/current/next navigation with optional URL links and keyboard shortcuts. */
|
|
721
|
+
declare function KeepTourBar<TMeta = Record<string, unknown>>({ navigation: providedNavigation, currentId, initialIndex, showProgress, prevHref, nextHref, backHref, onPrev, onNext, onBack, prevLabel, nextLabel, backLabel, keyboardShortcuts, shortcutOptions, progress, getItemTitle, ...props }: KeepTourBarProps<TMeta>): react.JSX.Element;
|
|
722
|
+
declare const KeepNavigator: typeof KeepTourBar;
|
|
723
|
+
|
|
682
724
|
type KeepTagFilterState = {
|
|
683
725
|
tags: string[];
|
|
684
726
|
tagCounts: Record<string, number>;
|
|
@@ -701,13 +743,6 @@ type KeepTagFilterProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<H
|
|
|
701
743
|
/** An ARIA button group for tag filtering; consumers can connect value to a collection query. */
|
|
702
744
|
declare function KeepTagFilter<TMeta = Record<string, unknown>>({ query, value: controlledValue, defaultValue, onChange, onValueChange, allLabel, ariaLabel, renderTag, render, children, asChild, className, ...rootProps }: KeepTagFilterProps<TMeta>): react.ReactElement<unknown, string | react.JSXElementConstructor<any>>;
|
|
703
745
|
|
|
704
|
-
type KeepUndoProps = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
705
|
-
children?: ReactNode;
|
|
706
|
-
label?: ReactNode;
|
|
707
|
-
};
|
|
708
|
-
/** Presents the short-lived undo action created by removeWithUndo/removeBatchWithUndo. */
|
|
709
|
-
declare function KeepUndo({ children, label, ...props }: KeepUndoProps): react.JSX.Element | null;
|
|
710
|
-
|
|
711
746
|
type KeepSearchInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, "value" | "defaultValue" | "onChange"> & {
|
|
712
747
|
value?: string;
|
|
713
748
|
defaultValue?: string;
|
|
@@ -741,6 +776,25 @@ type KeepPaginationProps = Omit<React.HTMLAttributes<HTMLElement>, "children"> &
|
|
|
741
776
|
/** Accessible pagination with previous/next controls and numbered page buttons. */
|
|
742
777
|
declare function KeepPagination({ totalCount, pageSize, page, maxPageButtons, onPageChange, render, ...props }: KeepPaginationProps): react.JSX.Element;
|
|
743
778
|
|
|
779
|
+
type KeepStaleNoticeProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
780
|
+
item: KeepItem<TMeta>;
|
|
781
|
+
onRetry?: (item: KeepItem<TMeta>) => void | Promise<void>;
|
|
782
|
+
onRemoved?: (item: KeepItem<TMeta>) => void;
|
|
783
|
+
retryLabel?: ReactNode;
|
|
784
|
+
removeLabel?: ReactNode;
|
|
785
|
+
children?: ReactNode;
|
|
786
|
+
};
|
|
787
|
+
/** Provides retry and remove actions for an item whose source is no longer available. */
|
|
788
|
+
declare function KeepStaleNotice<TMeta = Record<string, unknown>>({ item, onRetry, onRemoved, retryLabel, removeLabel, children, className, ...props }: KeepStaleNoticeProps<TMeta>): react.JSX.Element;
|
|
789
|
+
type KeepPruneStaleButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
|
|
790
|
+
statuses?: KeepItemStatus[];
|
|
791
|
+
label?: ReactNode;
|
|
792
|
+
onPruned?: (ids: string[]) => void;
|
|
793
|
+
children?: ReactNode;
|
|
794
|
+
};
|
|
795
|
+
/** Removes all unavailable items through the provider's undo-capable batch action. */
|
|
796
|
+
declare function KeepPruneStaleButton<TMeta = Record<string, unknown>>({ statuses, label, onPruned, children, disabled, ...props }: KeepPruneStaleButtonProps): react.JSX.Element;
|
|
797
|
+
|
|
744
798
|
type KeepEmptyStateProps = Omit<HTMLAttributes<HTMLElement>, "children" | "title"> & {
|
|
745
799
|
title?: ReactNode;
|
|
746
800
|
description?: ReactNode;
|
|
@@ -775,6 +829,27 @@ declare function KeepAnnouncements<TMeta = Record<string, unknown>>({ messages,
|
|
|
775
829
|
/** Singular alias for applications that mount one announcer explicitly. */
|
|
776
830
|
declare const KeepAnnouncer: typeof KeepAnnouncements;
|
|
777
831
|
|
|
832
|
+
type KeepSyncRecoveryDialogProps<TMeta = Record<string, unknown>> = Omit<HTMLAttributes<HTMLElement>, "children" | "title"> & {
|
|
833
|
+
open?: boolean;
|
|
834
|
+
onOpenChange?: (open: boolean) => void;
|
|
835
|
+
conflicts?: KeepSyncConflict<TMeta>[];
|
|
836
|
+
onManualMerge?: (conflict: KeepSyncConflict<TMeta>) => KeepItem<TMeta> | Promise<KeepItem<TMeta>>;
|
|
837
|
+
backup?: ReactNode;
|
|
838
|
+
showBackupControls?: boolean;
|
|
839
|
+
title?: ReactNode;
|
|
840
|
+
children?: ReactNode;
|
|
841
|
+
};
|
|
842
|
+
/** Resolves queued sync conflicts and guides users to restore a backup after data corruption. */
|
|
843
|
+
declare function KeepSyncRecoveryDialog<TMeta = Record<string, unknown>>({ open, onOpenChange, conflicts, onManualMerge, backup, showBackupControls, title, children, className, ...props }: KeepSyncRecoveryDialogProps<TMeta>): react.JSX.Element | null;
|
|
844
|
+
|
|
845
|
+
type KeepSyncStatusBannerProps = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
846
|
+
onRetry?: () => void | Promise<void>;
|
|
847
|
+
onResolveConflicts?: () => void;
|
|
848
|
+
children?: ReactNode;
|
|
849
|
+
};
|
|
850
|
+
/** Announces synchronization failures and exposes retry or conflict-recovery entry points. */
|
|
851
|
+
declare function KeepSyncStatusBanner({ onRetry, onResolveConflicts, children, className, ...props }: KeepSyncStatusBannerProps): react.JSX.Element | null;
|
|
852
|
+
|
|
778
853
|
declare const keepThemeNames: readonly ["default", "ocean", "forest", "sunset", "lavender", "compact", "minimal", "rounded", "high-contrast", "dark"];
|
|
779
854
|
type KeepThemeName = (typeof keepThemeNames)[number];
|
|
780
855
|
type KeepThemeMode = "light" | "dark" | "system";
|
|
@@ -835,9 +910,10 @@ type KeepKit<TMeta = Record<string, unknown>> = {
|
|
|
835
910
|
useContext: () => ReturnType<typeof useKeepContext<TMeta>>;
|
|
836
911
|
useItem: (item?: KeepItemInput<TMeta>) => ReturnType<typeof useKeepItem<TMeta>>;
|
|
837
912
|
useList: (query?: KeepListQuery<TMeta>) => ReturnType<typeof useKeepList<TMeta>>;
|
|
913
|
+
useNavigator: (options?: UseKeepNavigatorOptions<TMeta>) => UseKeepNavigatorResult<TMeta>;
|
|
838
914
|
useShortcut: (options: KeepShortcutOptions<TMeta>) => void;
|
|
839
915
|
};
|
|
840
916
|
/** Create one typed application API for the core and standard UI layer. */
|
|
841
917
|
declare function createKeepKit<TMeta = Record<string, unknown>>(options?: CreateKeepKitOptions<TMeta>): KeepKit<TMeta>;
|
|
842
918
|
|
|
843
|
-
export { type CreateKeepKitOptions, KeepAnnouncements, type KeepAnnouncementsProps, KeepAnnouncer, KeepBackup, type KeepBackupProps, KeepBulkActions, type KeepBulkActionsProps, type KeepBulkActionsState, KeepButton, type KeepButtonIcon, type KeepButtonIconProps, type KeepButtonIcons, type KeepButtonLabels, type KeepButtonProps, KeepCollection, type KeepCollectionFeature, type KeepCollectionProps, type KeepDisplayStatus, KeepEmptyState, type KeepEmptyStateProps, type KeepImageProps, KeepItemCard, type KeepItemCardActionsProps, type KeepItemCardContentProps, type KeepItemCardLinkProps, type KeepItemCardMediaProps, type KeepItemCardProps, KeepItemCardSkeleton, type KeepItemCardSkeletonProps, type KeepItemCardState, type KeepItemCardTagsProps, type KeepItemCardTitleProps, KeepItemCheckbox, type KeepItemCheckboxProps, KeepItemStatusBadge, type KeepItemStatusBadgeProps, type KeepKit, KeepKitProvider, type KeepKitProviderProps, KeepLayout, type KeepLayoutPreset, type KeepLayoutProps, KeepList, type KeepListProps, type KeepListState, KeepNoteEditor, type KeepNoteEditorProps, type KeepNoteEditorState, type KeepPagesRouterLike, KeepPagination, type KeepPaginationProps, type KeepPaginationState, KeepPruneStaleButton, type KeepPruneStaleButtonProps, KeepSearchInput, type KeepSearchInputProps, type KeepSelectionScope, KeepSortSelect, type KeepSortSelectProps, type KeepSortValue, KeepStaleNotice, type KeepStaleNoticeProps, KeepStatus, type KeepStatusLabels, type KeepStatusProps, type KeepStatusState, type KeepStatusValue, KeepSyncRecoveryDialog, type KeepSyncRecoveryDialogProps, KeepSyncStatusBanner, type KeepSyncStatusBannerProps, KeepTagEditor, type KeepTagEditorProps, type KeepTagEditorState, KeepTagFilter, type KeepTagFilterProps, type KeepTagFilterState, type KeepThemeDensity, type KeepThemeMode, type KeepThemeName, KeepThemeProvider, type KeepThemeProviderProps, type KeepThemeRadius, type KeepThemeVariables, type KeepToastFeedbackOptions, type KeepToastHandler, type KeepUiFeedbackEvent, type KeepUiLabelContext, type KeepUiLabelKey, type KeepUiLabels, type KeepUiLocale, type KeepUiLocaleLabels, KeepUiProvider, type KeepUiProviderProps, KeepUndo, type KeepUndoProps, type KeepUrlAdapter, type RenderProp, createKeepKit, createNextPagesRouterAdapter, getKeepLocaleLabels, isAllSelected, keepThemeNames, toggleSelectAll, useKeepToastFeedback, useKeepUiLabels, useKeepUrlSync };
|
|
919
|
+
export { type CreateKeepKitOptions, KeepAnnouncements, type KeepAnnouncementsProps, KeepAnnouncer, KeepBackup, type KeepBackupProps, KeepBulkActions, type KeepBulkActionsProps, type KeepBulkActionsState, KeepButton, type KeepButtonIcon, type KeepButtonIconProps, type KeepButtonIcons, type KeepButtonLabels, type KeepButtonProps, KeepCollection, type KeepCollectionFeature, type KeepCollectionProps, type KeepDisplayStatus, KeepEmptyState, type KeepEmptyStateProps, KeepHighlight, type KeepHighlightProps, type KeepImageProps, KeepItemCard, type KeepItemCardActionsProps, type KeepItemCardContentProps, type KeepItemCardLinkProps, type KeepItemCardMediaProps, type KeepItemCardProps, KeepItemCardSkeleton, type KeepItemCardSkeletonProps, type KeepItemCardState, type KeepItemCardTagsProps, type KeepItemCardTitleProps, KeepItemCheckbox, type KeepItemCheckboxProps, KeepItemStatusBadge, type KeepItemStatusBadgeProps, type KeepKit, KeepKitProvider, type KeepKitProviderProps, KeepLayout, type KeepLayoutPreset, type KeepLayoutProps, KeepList, type KeepListProps, type KeepListState, KeepNavigator, KeepNoteEditor, type KeepNoteEditorProps, type KeepNoteEditorState, type KeepPagesRouterLike, KeepPagination, type KeepPaginationProps, type KeepPaginationState, KeepPruneStaleButton, type KeepPruneStaleButtonProps, type KeepReorderableItemState, KeepReorderableList, type KeepReorderableListProps, KeepSearchInput, type KeepSearchInputProps, type KeepSelectionScope, KeepSortSelect, type KeepSortSelectProps, type KeepSortValue, KeepStaleNotice, type KeepStaleNoticeProps, KeepStatus, type KeepStatusLabels, type KeepStatusProps, type KeepStatusState, type KeepStatusValue, KeepSyncRecoveryDialog, type KeepSyncRecoveryDialogProps, KeepSyncStatusBanner, type KeepSyncStatusBannerProps, KeepTagEditor, type KeepTagEditorProps, type KeepTagEditorState, KeepTagFilter, type KeepTagFilterProps, type KeepTagFilterState, type KeepThemeDensity, type KeepThemeMode, type KeepThemeName, KeepThemeProvider, type KeepThemeProviderProps, type KeepThemeRadius, type KeepThemeVariables, type KeepToastFeedbackOptions, type KeepToastHandler, KeepTourBar, type KeepTourBarProps, type KeepTourShortcutsOptions, type KeepUiFeedbackEvent, type KeepUiLabelContext, type KeepUiLabelKey, type KeepUiLabels, type KeepUiLocale, type KeepUiLocaleLabels, KeepUiProvider, type KeepUiProviderProps, KeepUndo, type KeepUndoProps, type KeepUrlAdapter, type RenderProp, createKeepKit, createNextPagesRouterAdapter, getKeepLocaleLabels, highlightText, isAllSelected, keepThemeNames, toggleSelectAll, useKeepToastFeedback, useKeepTourShortcuts, useKeepUiLabels, useKeepUrlSync };
|