@oneflowui/ui 0.8.5 → 0.8.6

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.en.md CHANGED
@@ -154,7 +154,7 @@ When a single page needs two visual contexts at once, prefer the `ThemeScope` co
154
154
 
155
155
  ```vue
156
156
  <script setup lang="ts">
157
- import { ThemeScope } from '@oneflowui/ui'
157
+ import { DataTable, ThemeScope } from '@oneflowui/ui'
158
158
  </script>
159
159
 
160
160
  <template>
@@ -174,33 +174,37 @@ Supported values currently match the global theme list:
174
174
 
175
175
  Direct `data-of-theme-scope` usage is still compatible for older code, but new consumers should use `ThemeScope`.
176
176
 
177
- ### Component-Level Example
177
+ ### ThemeScope Scene Component
178
178
 
179
- A more realistic consumer pattern is to wrap an actual component subtree. The page keeps its global theme, while the local region switches to tokens that fit an ops or command-console context.
179
+ If you want to reuse "local theme + title + description + meta/footer slots" together, use `ThemeScopeScene`. It is a lightweight scene shell component that fits enterprise back offices, ops consoles, and task centers.
180
180
 
181
181
  ```vue
182
182
  <script setup lang="ts">
183
- import { DataTable, StatisticCard, ThemeScope } from '@oneflowui/ui'
183
+ import { DataTable, ThemeScopeScene } from '@oneflowui/ui'
184
184
  </script>
185
185
 
186
186
  <template>
187
- <ThemeScope theme="ops-console" tag="section" class="task-surface">
188
- <header class="task-surface__header">
189
- <h3>Task Overview</h3>
190
- <p>Only this region uses ops-console tokens.</p>
191
- </header>
192
-
193
- <div class="task-surface__metrics">
194
- <StatisticCard icon="check-circle" :value="18" label="Done" />
195
- <StatisticCard icon="clock" :value="6" label="In progress" />
196
- </div>
187
+ <ThemeScopeScene
188
+ theme="ops-console"
189
+ tag="section"
190
+ eyebrow="Enterprise Scene"
191
+ title="Task Overview"
192
+ description="This region automatically receives ops-console tokens."
193
+ >
194
+ <template #meta>
195
+ <span class="scene-chip">ThemeScopeScene</span>
196
+ </template>
197
197
 
198
198
  <DataTable :rows="rows" :columns="columns" />
199
- </ThemeScope>
199
+
200
+ <template #footer>
201
+ <small>footer / notes / actions</small>
202
+ </template>
203
+ </ThemeScopeScene>
200
204
  </template>
201
205
  ```
202
206
 
203
- This is non-breaking: no component API changes are required, and `ThemeScope` only adds a local token boundary on the wrapper.
207
+ `ThemeScopeScene` still reuses `ThemeScope` under the hood, so this is non-breaking. It just packages the common business shell into a reusable component.
204
208
 
205
209
  ### Virtual List State Cache
206
210
 
@@ -224,14 +228,14 @@ const { visibleItems, totalHeight, offsetY } = useVirtualList({
224
228
 
225
229
  If you need to review the current traceable release materials, start with these docs:
226
230
 
227
- - Current evidence index: [`docs/plans/2026-03-22-release-0.8.5-evidence-index.md`](docs/plans/2026-03-22-release-0.8.5-evidence-index.md)
228
- - Release proof: [`docs/plans/2026-03-22-release-0.8.5-proof.md`](docs/plans/2026-03-22-release-0.8.5-proof.md)
229
- - Verification result: [`docs/plans/2026-03-22-release-0.8.5-verification.md`](docs/plans/2026-03-22-release-0.8.5-verification.md)
231
+ - Current evidence index: [`docs/plans/2026-03-22-release-0.8.6-evidence-index.md`](docs/plans/2026-03-22-release-0.8.6-evidence-index.md)
232
+ - Release proof: [`docs/plans/2026-03-22-release-0.8.6-proof.md`](docs/plans/2026-03-22-release-0.8.6-proof.md)
233
+ - Verification result: [`docs/plans/2026-03-22-release-0.8.6-verification.md`](docs/plans/2026-03-22-release-0.8.6-verification.md)
230
234
  - Pre-release smoke: [`docs/plans/2026-03-22-oneui-theme-scope-middleware-composer-pre-release-verification.md`](docs/plans/2026-03-22-oneui-theme-scope-middleware-composer-pre-release-verification.md)
231
235
  - Package entrypoints verification: [`docs/plans/2026-03-22-oneui-package-entrypoints-verification.md`](docs/plans/2026-03-22-oneui-package-entrypoints-verification.md)
232
- - Changelog: [`docs/CHANGELOG-v0.8.5.md`](docs/CHANGELOG-v0.8.5.md)
236
+ - Changelog: [`docs/CHANGELOG-v0.8.6.md`](docs/CHANGELOG-v0.8.6.md)
233
237
 
234
- The current public npm version will move to `0.8.5` after this release step, and publish, pack, dry-run, and dual-host smoke checks all have separate evidence.
238
+ The current public npm version should be checked against the latest release proof, and publish, pack, dry-run, and dual-host smoke checks all have separate evidence.
235
239
 
236
240
  ---
237
241
 
@@ -316,6 +320,8 @@ You can compose reusable `DatabaseView` middleware presets for toast, analytics,
316
320
  import {
317
321
  composeDatabaseViewMiddlewares,
318
322
  createDatabaseViewAnalyticsMiddleware,
323
+ createDatabaseViewPresetBundle,
324
+ createDatabaseViewPresetMiddleware,
319
325
  createDatabaseViewOptimisticMiddleware,
320
326
  createDatabaseViewToastMiddleware,
321
327
  useDatabaseView,
@@ -344,9 +350,80 @@ const view = useDatabaseView({
344
350
  })
345
351
  ```
346
352
 
353
+ If you prefer a single factory that returns a ready-to-use middleware, use the official preset bundle helper:
354
+
355
+ ```ts
356
+ const presetBundle = createDatabaseViewPresetBundle({
357
+ toast: {
358
+ onSuccess: (message) => toast.success(message),
359
+ onError: (message) => toast.error(message),
360
+ },
361
+ analytics: {
362
+ onEvent: (event) => console.log('[db-view]', event.phase, event.action),
363
+ },
364
+ optimistic: {
365
+ apply: ({ payload }) => updateLocalRecord(payload),
366
+ revert: ({ payload }) => revertLocalRecord(payload),
367
+ },
368
+ })
369
+
370
+ const view = useDatabaseView({
371
+ tableId: 'tbl-1',
372
+ actions: {
373
+ middleware: presetBundle.middleware,
374
+ onCellEdit: saveCellEdit,
375
+ },
376
+ })
377
+ ```
378
+
379
+ `createDatabaseViewPresetMiddleware` is the one-liner version when you only need the final middleware object:
380
+
381
+ ```ts
382
+ const middleware = createDatabaseViewPresetMiddleware({
383
+ toast: {
384
+ onSuccess: (message) => toast.success(message),
385
+ onError: (message) => toast.error(message),
386
+ },
387
+ analytics: {
388
+ onEvent: (event) => console.log('[db-view]', event.phase, event.action),
389
+ },
390
+ optimistic: {
391
+ apply: ({ payload }) => updateLocalRecord(payload),
392
+ revert: ({ payload }) => revertLocalRecord(payload),
393
+ },
394
+ })
395
+ ```
396
+
397
+ ### ThemeScope Scene Template
398
+
399
+ If you want to evolve `ThemeScope` from a local wrapper into a business scene template, use it as the page shell that organizes the region structure. This fits enterprise dashboards, ops consoles, and task boards: the outer shell fixes the visual context while the inner area hosts cards, tables, metrics, and side notes.
400
+
401
+ ```vue
402
+ <script setup lang="ts">
403
+ import { ThemeScope } from '@oneflowui/ui'
404
+ </script>
405
+
406
+ <template>
407
+ <ThemeScope theme="ops-console" tag="section" class="enterprise-scene">
408
+ <header class="enterprise-scene__header">
409
+ <h3>Enterprise Scene</h3>
410
+ <p>Theme, layout, and business content are reused together as one template.</p>
411
+ </header>
412
+
413
+ <div class="enterprise-scene__body">
414
+ <div class="enterprise-scene__summary">...</div>
415
+ <DataTable :rows="rows" :columns="columns" />
416
+ </div>
417
+ </ThemeScope>
418
+ </template>
419
+ ```
420
+
421
+ The repository's `src/dev/examples/database/DatabaseEnterpriseDemo.vue` is the dev/examples-level reference for this kind of scene template. It shows the "ThemeScopeScene + DatabaseView + middleware" composition pattern that you can copy into your own project and turn into a real enterprise page.
422
+
347
423
  ### Dev Examples / Enterprise Demo
348
424
 
349
- `DatabaseEnterpriseDemo` is a dev/examples-level consumption pattern used to show a more complete enterprise-style page composition. It is documentation and development sample material, not an npm-exported component, and it does not change the public export surface of `@oneflowui/ui`.
425
+ `src/dev/examples/database/DatabaseEnterpriseDemo.vue` is a dev/examples-level consumption pattern used to show a more complete enterprise-style page composition. It is documentation and development sample material, not an npm-exported component, and it does not change the public export surface of `@oneflowui/ui`.
426
+ The repository also ships `src/dev/examples/database/DatabasePresetDemo.vue` as a shorter official preset-bundle example, focused on direct `createDatabaseViewPresetBundle` / `actions.middleware` consumption.
350
427
 
351
428
  If your business app needs something similar, copy the composition idea from the example and wire it to your own data source and action contract instead of depending on a separate production export.
352
429
 
package/README.md CHANGED
@@ -145,7 +145,7 @@ import '@oneflowui/ui/theme'
145
145
 
146
146
  ```vue
147
147
  <script setup lang="ts">
148
- import { ThemeScope } from '@oneflowui/ui'
148
+ import { DataTable, ThemeScope } from '@oneflowui/ui'
149
149
  </script>
150
150
 
151
151
  <template>
@@ -165,33 +165,37 @@ import { ThemeScope } from '@oneflowui/ui'
165
165
 
166
166
  老代码里直接手写的 `data-of-theme-scope` 仍然兼容,但新代码优先使用组件入口。
167
167
 
168
- ### 组件级示例
168
+ ### ThemeScope 场景组件
169
169
 
170
- 更贴近业务消费的写法,是把一个组件子树直接包进 `ThemeScope`。外层页面继续沿用全局主题,局部区域则切到适合命令台或运营视角的 token。
170
+ 如果你想把“局部主题 + 标题 + 说明 + meta/footer 插槽”一起复用,直接用 `ThemeScopeScene`。它是一个轻量的场景壳层组件,适合企业后台、运营控制台、任务中心这类页面。
171
171
 
172
172
  ```vue
173
173
  <script setup lang="ts">
174
- import { DataTable, StatisticCard, ThemeScope } from '@oneflowui/ui'
174
+ import { DataTable, ThemeScopeScene } from '@oneflowui/ui'
175
175
  </script>
176
176
 
177
177
  <template>
178
- <ThemeScope theme="ops-console" tag="section" class="task-surface">
179
- <header class="task-surface__header">
180
- <h3>任务总览</h3>
181
- <p>仅这块区域使用 ops-console token。</p>
182
- </header>
183
-
184
- <div class="task-surface__metrics">
185
- <StatisticCard icon="check-circle" :value="18" label="已完成" />
186
- <StatisticCard icon="clock" :value="6" label="进行中" />
187
- </div>
178
+ <ThemeScopeScene
179
+ theme="ops-console"
180
+ tag="section"
181
+ eyebrow="Enterprise Scene"
182
+ title="任务总览"
183
+ description="这个区域会自动获得 ops-console token。"
184
+ >
185
+ <template #meta>
186
+ <span class="scene-chip">ThemeScopeScene</span>
187
+ </template>
188
188
 
189
189
  <DataTable :rows="rows" :columns="columns" />
190
- </ThemeScope>
190
+
191
+ <template #footer>
192
+ <small>footer / notes / actions</small>
193
+ </template>
194
+ </ThemeScopeScene>
191
195
  </template>
192
196
  ```
193
197
 
194
- 这是一种非 breaking 的增强:组件 API 不需要变,`ThemeScope` 只是在局部 wrapper 上增加一层 token 作用域。
198
+ `ThemeScopeScene` 内部继续复用 `ThemeScope` token 作用域,所以它仍然是 non-breaking 的增强,只是把常见业务壳层收成了一个可复用组件。
195
199
 
196
200
  ### 虚拟列表状态缓存
197
201
 
@@ -215,14 +219,14 @@ const { visibleItems, totalHeight, offsetY } = useVirtualList({
215
219
 
216
220
  如果你需要核对当前可追溯的发布材料,优先看这几份文档:
217
221
 
218
- - 当前版本证据索引:[`docs/plans/2026-03-22-release-0.8.5-evidence-index.md`](docs/plans/2026-03-22-release-0.8.5-evidence-index.md)
219
- - 发布 proof:[`docs/plans/2026-03-22-release-0.8.5-proof.md`](docs/plans/2026-03-22-release-0.8.5-proof.md)
220
- - 验收结果:[`docs/plans/2026-03-22-release-0.8.5-verification.md`](docs/plans/2026-03-22-release-0.8.5-verification.md)
222
+ - 当前版本证据索引:[`docs/plans/2026-03-22-release-0.8.6-evidence-index.md`](docs/plans/2026-03-22-release-0.8.6-evidence-index.md)
223
+ - 发布 proof:[`docs/plans/2026-03-22-release-0.8.6-proof.md`](docs/plans/2026-03-22-release-0.8.6-proof.md)
224
+ - 验收结果:[`docs/plans/2026-03-22-release-0.8.6-verification.md`](docs/plans/2026-03-22-release-0.8.6-verification.md)
221
225
  - 预发布验证:[`docs/plans/2026-03-22-oneui-theme-scope-middleware-composer-pre-release-verification.md`](docs/plans/2026-03-22-oneui-theme-scope-middleware-composer-pre-release-verification.md)
222
226
  - 子路径入口治理:[`docs/plans/2026-03-22-oneui-package-entrypoints-verification.md`](docs/plans/2026-03-22-oneui-package-entrypoints-verification.md)
223
- - 版本日志:[`docs/CHANGELOG-v0.8.5.md`](docs/CHANGELOG-v0.8.5.md)
227
+ - 版本日志:[`docs/CHANGELOG-v0.8.6.md`](docs/CHANGELOG-v0.8.6.md)
224
228
 
225
- 当前 npm 公开版本会在本轮发版完成后更新到 `0.8.5`,对应的发布、pack、dry-run 和双宿主 smoke 都有独立留痕。
229
+ 当前 npm 公开版本以最新 release proof 为准,对应的发布、pack、dry-run 和双宿主 smoke 都有独立留痕。
226
230
 
227
231
  ---
228
232
 
@@ -287,6 +291,8 @@ type DatabaseViewActions = {
287
291
  import {
288
292
  composeDatabaseViewMiddlewares,
289
293
  createDatabaseViewAnalyticsMiddleware,
294
+ createDatabaseViewPresetBundle,
295
+ createDatabaseViewPresetMiddleware,
290
296
  createDatabaseViewOptimisticMiddleware,
291
297
  createDatabaseViewToastMiddleware,
292
298
  useDatabaseView,
@@ -315,9 +321,80 @@ const view = useDatabaseView({
315
321
  })
316
322
  ```
317
323
 
324
+ 如果你更想要一个“一键拿到可直接消费的 middleware”的入口,可以优先用官方 preset 工厂:
325
+
326
+ ```ts
327
+ const presetBundle = createDatabaseViewPresetBundle({
328
+ toast: {
329
+ onSuccess: (message) => toast.success(message),
330
+ onError: (message) => toast.error(message),
331
+ },
332
+ analytics: {
333
+ onEvent: (event) => console.log('[db-view]', event.phase, event.action),
334
+ },
335
+ optimistic: {
336
+ apply: ({ payload }) => updateLocalRecord(payload),
337
+ revert: ({ payload }) => revertLocalRecord(payload),
338
+ },
339
+ })
340
+
341
+ const view = useDatabaseView({
342
+ tableId: 'tbl-1',
343
+ actions: {
344
+ middleware: presetBundle.middleware,
345
+ onCellEdit: saveCellEdit,
346
+ },
347
+ })
348
+ ```
349
+
350
+ `createDatabaseViewPresetBundle` 会把常用 preset 先组装好,再暴露给业务方按需复用;`createDatabaseViewPresetMiddleware` 则适合直接塞进 `actions.middleware`,用于最小接入,例如:
351
+
352
+ ```ts
353
+ const middleware = createDatabaseViewPresetMiddleware({
354
+ toast: {
355
+ onSuccess: (message) => toast.success(message),
356
+ onError: (message) => toast.error(message),
357
+ },
358
+ analytics: {
359
+ onEvent: (event) => console.log('[db-view]', event.phase, event.action),
360
+ },
361
+ optimistic: {
362
+ apply: ({ payload }) => updateLocalRecord(payload),
363
+ revert: ({ payload }) => revertLocalRecord(payload),
364
+ },
365
+ })
366
+ ```
367
+
368
+ ### ThemeScope 场景模板
369
+
370
+ 如果你想把 `ThemeScope` 从“局部 wrapper”升级成“业务场景模板”,可以直接把它当成页面壳层来组织区域结构。这个模板适合企业后台、运营控制台、任务看板这类页面:外层固定视觉语境,内层再放业务卡片、数据表、统计块和侧边说明。
371
+
372
+ ```vue
373
+ <script setup lang="ts">
374
+ import { ThemeScope } from '@oneflowui/ui'
375
+ </script>
376
+
377
+ <template>
378
+ <ThemeScope theme="ops-console" tag="section" class="enterprise-scene">
379
+ <header class="enterprise-scene__header">
380
+ <h3>Enterprise Scene</h3>
381
+ <p>主题、布局和业务内容一起作为模板复用。</p>
382
+ </header>
383
+
384
+ <div class="enterprise-scene__body">
385
+ <div class="enterprise-scene__summary">...</div>
386
+ <DataTable :rows="rows" :columns="columns" />
387
+ </div>
388
+ </ThemeScope>
389
+ </template>
390
+ ```
391
+
392
+ 仓库里的 `src/dev/examples/database/DatabaseEnterpriseDemo.vue` 就是这一类场景组件的 dev/examples 级参考实现。它展示的是“ThemeScopeScene + DatabaseView + middleware”的组合方式,便于复制到自家项目里改造成真正的企业页。
393
+
318
394
  ### Dev Examples / Enterprise Demo
319
395
 
320
- `DatabaseEnterpriseDemo` 是 dev/examples 级的消费范式,用来展示更完整的企业版页面组合方式。它属于开发示例和文档参考,不是 npm 包对外导出的组件,不会改变 `@oneflowui/ui` 的公开导出面。
396
+ `src/dev/examples/database/DatabaseEnterpriseDemo.vue` 是 dev/examples 级的消费范式,用来展示更完整的企业版页面组合方式。它属于开发示例和文档参考,不是 npm 包对外导出的组件,不会改变 `@oneflowui/ui` 的公开导出面。
397
+ 仓库同时提供 `src/dev/examples/database/DatabasePresetDemo.vue` 作为更短的 preset bundle 官方示例,重点展示 `createDatabaseViewPresetBundle` / `actions.middleware` 的直接消费方式。
321
398
 
322
399
  如果你在业务工程里需要类似的页面,建议直接复制示例里的组合思路,再按自己的数据源和动作契约接入,而不是依赖一个额外的生产级导出入口。
323
400
 
@@ -0,0 +1,31 @@
1
+ type ThemeScopeTheme = "neutral" | "ops-console";
2
+ type __VLS_Props = {
3
+ theme: ThemeScopeTheme;
4
+ title: string;
5
+ description?: string;
6
+ eyebrow?: string;
7
+ tag?: string;
8
+ };
9
+ declare function __VLS_template(): {
10
+ attrs: Partial<{}>;
11
+ slots: {
12
+ meta?(_: {}): any;
13
+ default?(_: {}): any;
14
+ footer?(_: {}): any;
15
+ };
16
+ refs: {};
17
+ rootEl: any;
18
+ };
19
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
20
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
21
+ description: string;
22
+ tag: string;
23
+ eyebrow: string;
24
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
25
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
26
+ export default _default;
27
+ type __VLS_WithTemplateSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -0,0 +1,7 @@
1
+ import o from "./ThemeScopeScene.vue2.js";
2
+ /* empty css */
3
+ import e from "../../_virtual/_plugin-vue_export-helper.js";
4
+ const m = /* @__PURE__ */ e(o, [["__scopeId", "data-v-60160caa"]]);
5
+ export {
6
+ m as default
7
+ };
@@ -0,0 +1,56 @@
1
+ import { defineComponent as i, openBlock as o, createBlock as d, withCtx as m, createElementVNode as s, createElementBlock as c, toDisplayString as r, createCommentVNode as n, renderSlot as a } from "vue";
2
+ import l from "./ThemeScope.vue.js";
3
+ const h = { class: "of-theme-scope-scene__header" }, p = { class: "of-theme-scope-scene__heading" }, f = {
4
+ key: 0,
5
+ class: "of-theme-scope-scene__eyebrow"
6
+ }, u = { class: "of-theme-scope-scene__title" }, y = {
7
+ key: 1,
8
+ class: "of-theme-scope-scene__description"
9
+ }, k = {
10
+ key: 0,
11
+ class: "of-theme-scope-scene__meta"
12
+ }, g = { class: "of-theme-scope-scene__body" }, v = {
13
+ key: 0,
14
+ class: "of-theme-scope-scene__footer"
15
+ }, w = /* @__PURE__ */ i({
16
+ name: "ThemeScopeScene",
17
+ __name: "ThemeScopeScene",
18
+ props: {
19
+ theme: {},
20
+ title: {},
21
+ description: { default: "" },
22
+ eyebrow: { default: "" },
23
+ tag: { default: "section" }
24
+ },
25
+ setup(_) {
26
+ const e = _;
27
+ return (t, S) => (o(), d(l, {
28
+ theme: e.theme,
29
+ tag: e.tag,
30
+ class: "of-theme-scope-scene"
31
+ }, {
32
+ default: m(() => [
33
+ s("header", h, [
34
+ s("div", p, [
35
+ e.eyebrow ? (o(), c("p", f, r(e.eyebrow), 1)) : n("", !0),
36
+ s("h3", u, r(e.title), 1),
37
+ e.description ? (o(), c("p", y, r(e.description), 1)) : n("", !0)
38
+ ]),
39
+ t.$slots.meta ? (o(), c("div", k, [
40
+ a(t.$slots, "meta", {}, void 0, !0)
41
+ ])) : n("", !0)
42
+ ]),
43
+ s("div", g, [
44
+ a(t.$slots, "default", {}, void 0, !0)
45
+ ]),
46
+ t.$slots.footer ? (o(), c("footer", v, [
47
+ a(t.$slots, "footer", {}, void 0, !0)
48
+ ])) : n("", !0)
49
+ ]),
50
+ _: 3
51
+ }, 8, ["theme", "tag"]));
52
+ }
53
+ });
54
+ export {
55
+ w as default
56
+ };
@@ -1 +1,2 @@
1
1
  export { default as ThemeScope } from './ThemeScope.vue';
2
+ export { default as ThemeScopeScene } from './ThemeScopeScene.vue';
@@ -45,9 +45,9 @@ export type { SupabaseQueryBuilder, SupabaseFilterBuilder, UseSupabaseProviderOp
45
45
  export { useViewPersistence, createLocalStorageBackend, createSupabaseBackend, } from './useViewPersistence';
46
46
  export type { ViewStorageBackend, SupabaseViewBackendOptions, UseViewPersistenceOptions, } from './useViewPersistence';
47
47
  export { useDatabaseView } from './useDatabaseView';
48
- export { composeDatabaseViewMiddlewares, createDatabaseViewAnalyticsMiddleware, createDatabaseViewToastMiddleware, createDatabaseViewOptimisticMiddleware, } from './useDatabaseViewMiddleware';
48
+ export { composeDatabaseViewMiddlewares, createDatabaseViewAnalyticsMiddleware, createDatabaseViewPresetInputs, createDatabaseViewPresetBundle, createDatabaseViewPresetMiddleware, createDatabaseViewToastMiddleware, createDatabaseViewOptimisticMiddleware, } from './useDatabaseViewMiddleware';
49
49
  export type { DatabaseViewActionContext, DatabaseViewActionErrorContext, DatabaseViewActionMiddleware, DatabaseViewActionMiddlewareList, DatabaseViewMode, DatabaseViewFetchParams, DatabaseViewFetchResult, DatabaseViewProvider, DatabaseSchemaEvent, DatabaseViewActions, DatabaseViewDetailOptions, DatabaseViewNavigationOptions, UseDatabaseViewOptions, UseDatabaseViewResult, } from './useDatabaseView';
50
- export type { DatabaseViewAnalyticsEvent, DatabaseViewAnalyticsMiddlewareOptions, DatabaseViewMiddlewareInput, DatabaseViewOptimisticMiddlewareOptions, DatabaseViewToastMiddlewareOptions, } from './useDatabaseViewMiddleware';
50
+ export type { DatabaseViewAnalyticsEvent, DatabaseViewAnalyticsMiddlewareOptions, DatabaseViewPresetMiddlewareOptions, DatabaseViewPresetBundle, DatabaseViewPresetBundleOptions, DatabaseViewMiddlewareInput, DatabaseViewOptimisticMiddlewareOptions, DatabaseViewToastMiddlewareOptions, } from './useDatabaseViewMiddleware';
51
51
  export { useDatabaseViewport, useDatabaseWorkspaceState } from './useDatabaseWorkspace';
52
52
  export { useSearch } from './useSearch';
53
53
  export type { UseSearchOptions, SearchHighlight } from './useSearch';
@@ -26,8 +26,31 @@ export interface DatabaseViewOptimisticMiddlewareOptions<T extends DataRecord =
26
26
  revert: (context: DatabaseViewActionErrorContext<T>) => void | Promise<void>;
27
27
  shouldApply?: (context: DatabaseViewActionContext<T>) => boolean;
28
28
  }
29
+ export interface DatabaseViewPresetMiddlewareOptions<T extends DataRecord = DataRecord> {
30
+ toast?: DatabaseViewToastMiddlewareOptions<T> | false;
31
+ analytics?: DatabaseViewAnalyticsMiddlewareOptions<T> | false;
32
+ optimistic?: DatabaseViewOptimisticMiddlewareOptions<T> | false;
33
+ extra?: readonly DatabaseViewMiddlewareInput<T>[];
34
+ }
35
+ export interface DatabaseViewPresetBundleOptions<T extends DataRecord = DataRecord> {
36
+ middlewares?: DatabaseViewMiddlewareInput<T>[];
37
+ toast?: DatabaseViewToastMiddlewareOptions<T>;
38
+ analytics?: DatabaseViewAnalyticsMiddlewareOptions<T>;
39
+ optimistic?: DatabaseViewOptimisticMiddlewareOptions<T>;
40
+ }
41
+ export interface DatabaseViewPresetBundle<T extends DataRecord = DataRecord> {
42
+ middleware: DatabaseViewActionMiddleware<T>;
43
+ presets: {
44
+ toast?: DatabaseViewActionMiddleware<T>;
45
+ analytics?: DatabaseViewActionMiddleware<T>;
46
+ optimistic?: DatabaseViewActionMiddleware<T>;
47
+ };
48
+ }
29
49
  export type DatabaseViewMiddlewareInput<T extends DataRecord = DataRecord> = DatabaseViewActionMiddleware<T> | readonly DatabaseViewMiddlewareInput<T>[] | null | undefined;
30
50
  export declare function createDatabaseViewToastMiddleware<T extends DataRecord = DataRecord>(options?: DatabaseViewToastMiddlewareOptions<T>): DatabaseViewActionMiddleware<T>;
31
51
  export declare function createDatabaseViewAnalyticsMiddleware<T extends DataRecord = DataRecord>(options: DatabaseViewAnalyticsMiddlewareOptions<T>): DatabaseViewActionMiddleware<T>;
32
52
  export declare function createDatabaseViewOptimisticMiddleware<T extends DataRecord = DataRecord>(options: DatabaseViewOptimisticMiddlewareOptions<T>): DatabaseViewActionMiddleware<T>;
53
+ export declare function createDatabaseViewPresetBundle<T extends DataRecord = DataRecord>(options?: DatabaseViewPresetBundleOptions<T>): DatabaseViewPresetBundle<T>;
33
54
  export declare function composeDatabaseViewMiddlewares<T extends DataRecord = DataRecord>(...inputs: DatabaseViewMiddlewareInput<T>[]): DatabaseViewActionMiddleware<T>;
55
+ export declare function createDatabaseViewPresetInputs<T extends DataRecord = DataRecord>(options: DatabaseViewPresetMiddlewareOptions<T>): DatabaseViewMiddlewareInput<T>[];
56
+ export declare function createDatabaseViewPresetMiddleware<T extends DataRecord = DataRecord>(options?: DatabaseViewPresetBundleOptions<T>): DatabaseViewActionMiddleware<T>;