@lapis-notes/bases 0.2.1 → 0.3.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.
Files changed (55) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +1 -1
  3. package/dist/bases-plugin.js +18 -21
  4. package/dist/bases-view/bases.svelte.d.ts +7 -0
  5. package/dist/bases-view/bases.svelte.js +37 -7
  6. package/dist/bases-view/card-view/components/card-placeholder.svelte +7 -3
  7. package/dist/bases-view/card-view/components/card.svelte +23 -15
  8. package/dist/bases-view/cell.svelte +147 -16
  9. package/dist/bases-view/cell.svelte.d.ts +2 -0
  10. package/dist/bases-view/columns.js +3 -2
  11. package/dist/bases-view/components/bases-embed.svelte +28 -0
  12. package/dist/bases-view/components/bases-embed.svelte.d.ts +12 -0
  13. package/dist/bases-view/components/bases-error.svelte +26 -0
  14. package/dist/bases-view/components/bases-error.svelte.d.ts +6 -0
  15. package/dist/bases-view/components/datetime.svelte +3 -0
  16. package/dist/bases-view/components/datetime.svelte.d.ts +1 -0
  17. package/dist/bases-view/components/file-preview.svelte +57 -0
  18. package/dist/bases-view/components/file-preview.svelte.d.ts +8 -0
  19. package/dist/bases-view/components/file.svelte +22 -5
  20. package/dist/bases-view/components/property-picker.svelte +147 -0
  21. package/dist/bases-view/components/property-picker.svelte.d.ts +13 -0
  22. package/dist/bases-view/components/sort/sort-root.svelte +107 -88
  23. package/dist/bases-view/components/sort/sort-root.svelte.d.ts +1 -0
  24. package/dist/bases-view/components/views.svelte +96 -42
  25. package/dist/bases-view/document-core.js +30 -0
  26. package/dist/bases-view/filter-parser.d.ts +1 -1
  27. package/dist/bases-view/filter-parser.js +2 -1
  28. package/dist/bases-view/index.js +15 -0
  29. package/dist/bases-view/kanban-view/configuration.d.ts +8 -0
  30. package/dist/bases-view/kanban-view/configuration.js +40 -0
  31. package/dist/bases-view/kanban-view/index.d.ts +55 -0
  32. package/dist/bases-view/kanban-view/index.js +296 -0
  33. package/dist/bases-view/kanban-view/kanban.svelte +284 -0
  34. package/dist/bases-view/kanban-view/kanban.svelte.d.ts +7 -0
  35. package/dist/bases-view/kanban-view/mapping.d.ts +77 -0
  36. package/dist/bases-view/kanban-view/mapping.js +206 -0
  37. package/dist/bases-view/kanban-view/markdown-detail.svelte +123 -0
  38. package/dist/bases-view/kanban-view/markdown-detail.svelte.d.ts +13 -0
  39. package/dist/bases-view/kanban-view/settings.svelte +87 -0
  40. package/dist/bases-view/kanban-view/settings.svelte.d.ts +7 -0
  41. package/dist/bases-view/list-view/list.svelte +84 -84
  42. package/dist/bases-view/map-view/view.svelte +6 -1
  43. package/dist/bases-view/metadata-invalidation-core.d.ts +1 -0
  44. package/dist/bases-view/metadata-invalidation-core.js +3 -2
  45. package/dist/bases-view/models.d.ts +26 -0
  46. package/dist/bases-view/unknown-view/view.svelte +13 -6
  47. package/dist/bases-view/view-header.svelte +20 -6
  48. package/dist/bases-view/view-registration-inventory.d.ts +8 -0
  49. package/dist/bases-view/view-registration-inventory.js +2 -0
  50. package/dist/bases-view/view-settings.svelte +213 -237
  51. package/dist/index.d.ts +1 -1
  52. package/dist/styles.css +495 -74
  53. package/manifest.json +2 -1
  54. package/package.json +3 -2
  55. package/registry.json +85 -1
@@ -0,0 +1,13 @@
1
+ import type { App, TFile } from "@lapis-notes/api";
2
+ type $$ComponentProps = {
3
+ app: App;
4
+ file: TFile;
5
+ editing: boolean;
6
+ readOnly?: boolean;
7
+ onEditingChange: (editing: boolean) => void;
8
+ };
9
+ declare const MarkdownDetail: import("svelte").Component<$$ComponentProps, {
10
+ flush: () => Promise<boolean>;
11
+ }, "">;
12
+ type MarkdownDetail = ReturnType<typeof MarkdownDetail>;
13
+ export default MarkdownDetail;
@@ -0,0 +1,87 @@
1
+ <script lang="ts">
2
+ import PropertyPicker from "../components/property-picker.svelte";
3
+ import * as Select from "@lapismd/design-core/shadcn/select";
4
+ import * as Field from "@lapismd/design-core/shadcn/field";
5
+ import type { QueryController } from "../bases.svelte";
6
+ import type { KanbanBasesView } from "./index";
7
+ import { applyColumnOrder, toColumnSources } from "./mapping";
8
+
9
+ let { controller }: { controller: QueryController } = $props();
10
+ const board = $derived(controller.view as KanbanBasesView);
11
+ const ready = $derived(typeof board.setGrouping === "function");
12
+ const columns = $derived(
13
+ applyColumnOrder(
14
+ toColumnSources(board.data.groupedData, board.data.groupBy ?? ""),
15
+ board.columnOrder,
16
+ ),
17
+ );
18
+ const anchor = $derived(
19
+ board.anchorColumnId === null
20
+ ? "__none__"
21
+ : (board.anchorColumnId ?? "__automatic__"),
22
+ );
23
+ const anchorLabel = $derived(
24
+ anchor === "__none__"
25
+ ? "None"
26
+ : anchor === "__automatic__"
27
+ ? "Automatic (first column)"
28
+ : (columns.find((column) => column.id === anchor)?.label ??
29
+ "Selected column unavailable"),
30
+ );
31
+ </script>
32
+
33
+ {#if ready}
34
+ <Field.Field class="bases-view-setting">
35
+ <Field.Label>Group by</Field.Label>
36
+ <PropertyPicker
37
+ label="Group by"
38
+ columns={controller.getAllColumns()}
39
+ value={board.data.groupBy}
40
+ placeholder="None"
41
+ onChange={(value) => board.setGrouping(value)}
42
+ />
43
+ </Field.Field>
44
+ {#if board.type === "kanban"}
45
+ <Field.Field class="bases-view-setting">
46
+ <Field.Label>Always-open column</Field.Label>
47
+ <Select.Root
48
+ type="single"
49
+ value={anchor}
50
+ onValueChange={(value) =>
51
+ board.setAnchorColumn(
52
+ value === "__automatic__"
53
+ ? undefined
54
+ : value === "__none__"
55
+ ? null
56
+ : value,
57
+ )}
58
+ >
59
+ <Select.Trigger
60
+ class="bases-board-setting-trigger"
61
+ aria-label="Always-open column">{anchorLabel}</Select.Trigger
62
+ >
63
+ <Select.Content
64
+ ><Select.Group>
65
+ <Select.Item
66
+ value="__automatic__"
67
+ label="Automatic (first column)"
68
+ />
69
+ <Select.Item value="__none__" label="None" />
70
+ {#each columns as column (column.id)}
71
+ <Select.Item
72
+ value={column.id}
73
+ label={board.columnMeta[column.id]?.title ?? column.label}
74
+ />
75
+ {/each}
76
+ </Select.Group></Select.Content
77
+ >
78
+ </Select.Root>
79
+ </Field.Field>
80
+ {/if}
81
+ {/if}
82
+
83
+ <style>
84
+ :global(.bases-board-setting-trigger) {
85
+ width: 100%;
86
+ }
87
+ </style>
@@ -0,0 +1,7 @@
1
+ import type { QueryController } from "../bases.svelte";
2
+ type $$ComponentProps = {
3
+ controller: QueryController;
4
+ };
5
+ declare const Settings: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type Settings = ReturnType<typeof Settings>;
7
+ export default Settings;
@@ -1,7 +1,9 @@
1
1
  <script lang="ts">
2
2
  import type { MetadataType } from "@lapis-notes/api";
3
3
  import ChevronDown from "@lucide/svelte/icons/chevron-down";
4
+ import Circle from "@lucide/svelte/icons/circle";
4
5
  import ChevronRight from "@lucide/svelte/icons/chevron-right";
6
+ import * as ScrollArea from "@lapismd/design-core/shadcn/scroll-area";
5
7
  import Cell from "../cell.svelte";
6
8
  import type { BasesView } from "../bases.svelte";
7
9
  import SummaryStrip from "../components/summary-strip.svelte";
@@ -25,11 +27,7 @@
25
27
  if (id.startsWith("note.")) {
26
28
  const key = id.substring(5);
27
29
  acc[id] = {
28
- type: getMetadataTypeInfo(
29
- key,
30
- "text",
31
- view.controller.app,
32
- ).type,
30
+ type: getMetadataTypeInfo(key, "text", view.controller.app).type,
33
31
  };
34
32
  } else {
35
33
  acc[id] = { type: "text" };
@@ -40,17 +38,8 @@
40
38
  );
41
39
  });
42
40
  let visibleProperties = $derived(view.config.getOrder());
43
- let showsFileIdentity = $derived.by(() => {
44
- return visibleProperties.some((id) =>
45
- [
46
- "file",
47
- "file.name",
48
- "file.basename",
49
- "file.file",
50
- "file.fullname",
51
- ].includes(id),
52
- );
53
- });
41
+ let primaryProperty = $derived(visibleProperties[0] ?? "file.name");
42
+ let secondaryProperties = $derived(visibleProperties.slice(1));
54
43
  let collapsedGroups = $state<Record<string, boolean>>({});
55
44
 
56
45
  function groupId(
@@ -80,77 +69,88 @@
80
69
  </script>
81
70
 
82
71
  <div
83
- class="bases-card-grid bases-style-h-full-668b21 bases-style-overflow-auto-73fc3f bases-style-px-4-f0faeb bases-style-pb-10-cbd82b"
72
+ class="bases-card-grid bases-record-view bases-list"
84
73
  data-layout="list"
85
74
  data-ui-component="bases-list-view"
86
75
  data-ui-part="viewport"
87
76
  >
88
- <SummaryStrip
89
- {view}
90
- class="bases-card-grid__summary sticky bases-style-top-0-216740 bases-style-z-20-145745 bases-style-border-b-65fdba bases-style-px-1-d8e0e3 bases-style-py-3-1b2d54 backdrop-blur"
91
- />
92
- {#each groups as group, index (index)}
93
- {#if groupBy}
94
- <div
95
- class="bases-card-grid__group-header sticky bases-style-top-0-216740 bases-style-z-10-236812 bases-style-border-b-65fdba bases-style-px-1-d8e0e3 bases-style-py-3-1b2d54 bases-style-text-xs-359090 bases-style-font-semibold-e83a70 bases-style-tracking-0-18em-a82f6f uppercase backdrop-blur"
96
- >
97
- <button
98
- type="button"
99
- data-ui-part="group-toggle"
100
- class="bases-style-flex-60fbb7 bases-style-w-full-6da6a3 bases-style-items-center-3960ff bases-style-gap-2-77a2a2 bases-style-text-left-2eba0d"
101
- aria-expanded={!isCollapsed(group, index)}
102
- onclick={() => toggleGroup(group, index)}
103
- >
104
- {#if isCollapsed(group, index)}
105
- <ChevronRight class="bases-style-size-4-f7b5fa bases-style-shrink-0-012fbd" />
106
- {:else}
107
- <ChevronDown class="bases-style-size-4-f7b5fa bases-style-shrink-0-012fbd" />
77
+ <SummaryStrip {view} class="bases-list__summary" />
78
+ <ScrollArea.Root
79
+ class="bases-record-view__scroll"
80
+ orientation="vertical"
81
+ type="always"
82
+ viewportProps={{ "aria-label": "Records" }}
83
+ >
84
+ <div class="bases-list__groups">
85
+ {#each groups as group, index (groupId(group, index))}
86
+ <section class="bases-list__group" data-grouped={Boolean(groupBy)}>
87
+ {#if groupBy}
88
+ <div class="bases-card-grid__group-header bases-list__group-header">
89
+ <button
90
+ type="button"
91
+ data-ui-part="group-toggle"
92
+ class="bases-list__group-toggle"
93
+ aria-expanded={!isCollapsed(group, index)}
94
+ onclick={() => toggleGroup(group, index)}
95
+ >
96
+ {#if isCollapsed(group, index)}<ChevronRight
97
+ />{:else}<ChevronDown />{/if}
98
+ <span>{groupLabel}</span>
99
+ <span class="bases-card-grid__group-value"
100
+ >{group.hasKey() ? group.key?.toString() : "Ungrouped"}</span
101
+ >
102
+ <span class="bases-list__count">{group.entries.length}</span>
103
+ </button>
104
+ </div>
108
105
  {/if}
109
- <span>{groupLabel}</span>
110
- <span class="bases-card-grid__group-value">
111
- {#if group.hasKey()}
112
- {group.key?.toString()}
113
- {:else}
114
- Ungrouped
115
- {/if}
116
- </span>
117
- </button>
118
- </div>
119
- {/if}
120
-
121
- {#if !isCollapsed(group, index)}
122
- <ul class="bases-style-marker-text-muted-foreground-ff5bf1 bases-style-list-disc-1f33b4 bases-style-space-y-2-6f7e01 bases-style-py-3-1b2d54 bases-style-pl-6-9079b6">
123
- {#each group.entries as row (row.id)}
124
- <li
125
- class="bases-style-text-card-foreground-0474d7 bases-style-text-sm-fc7473 bases-style-leading-6-18550d"
126
- data-ui-part="row"
127
- >
128
- {#if !showsFileIdentity}
129
- <span class="bases-style-font-medium-2689f3">{row.file.basename}</span>
130
- {#if visibleProperties.length > 0}
131
- <span class="bases-style-text-muted-foreground-bfa603">, </span>
132
- {/if}
133
- {/if}
134
-
135
- {#each visibleProperties as id, index (id)}
136
- <span class="bases-style-inline-block-bb0c4b bases-style-align-baseline-8d378d">
137
- <Cell
138
- app={view.controller.app}
139
- name={id}
140
- file={row.file}
141
- readOnly={view.controller.readOnly}
142
- type={types[id]?.type}
143
- value={row.getValue(id)}
144
- class="bases-style-inline-block-bb0c4b bases-style-h-auto-b8f0a0 bases-style-w-auto-23e1f6 bases-style-align-baseline-8d378d"
145
- />
146
- </span>
147
- {#if index < visibleProperties.length - 1}
148
- <span class="bases-style-text-muted-foreground-bfa603">, </span>
149
- {/if}
150
- {/each}
151
- </li>
152
- {/each}
153
- </ul>
154
- {/if}
155
- {/each}
106
+ {#if !isCollapsed(group, index)}
107
+ <ul class="bases-list__records">
108
+ {#each group.entries as row (row.id)}
109
+ <li class="bases-list__record" data-ui-part="row">
110
+ {#if groupBy}<Circle
111
+ class="bases-list__bullet"
112
+ data-ui-part="record-bullet"
113
+ aria-hidden="true"
114
+ />{/if}
115
+ <div class="bases-list__record-content">
116
+ <div class="bases-list__identity">
117
+ <Cell
118
+ app={view.controller.app}
119
+ name={primaryProperty}
120
+ label={view.config.getDisplayName(primaryProperty)}
121
+ file={row.file}
122
+ readOnly={view.controller.readOnly}
123
+ type={types[primaryProperty]?.type}
124
+ value={row.getValue(primaryProperty)}
125
+ editOnActivation
126
+ />
127
+ </div>
128
+ <dl class="bases-list__properties">
129
+ {#each secondaryProperties as id (id)}
130
+ <div class="bases-list__property">
131
+ <dt>{view.config.getDisplayName(id)}</dt>
132
+ <dd>
133
+ <Cell
134
+ app={view.controller.app}
135
+ name={id}
136
+ label={view.config.getDisplayName(id)}
137
+ file={row.file}
138
+ readOnly={view.controller.readOnly}
139
+ type={types[id]?.type}
140
+ value={row.getValue(id)}
141
+ editOnActivation
142
+ />
143
+ </dd>
144
+ </div>
145
+ {/each}
146
+ </dl>
147
+ </div>
148
+ </li>
149
+ {/each}
150
+ </ul>
151
+ {/if}
152
+ </section>
153
+ {/each}
154
+ </div>
155
+ </ScrollArea.Root>
156
156
  </div>
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { BasesView } from "../bases.svelte";
3
+ import * as ScrollArea from "@lapismd/design-core/shadcn/scroll-area";
3
4
  import SummaryStrip from "../components/summary-strip.svelte";
4
5
 
5
6
  let {
@@ -10,11 +11,13 @@
10
11
  </script>
11
12
 
12
13
  <div
13
- class="bases-style-flex-60fbb7 bases-style-h-full-668b21 bases-style-flex-col-8dddea bases-style-gap-3-1004c0 bases-style-border-t-b950dd bases-style-px-4-f0faeb bases-style-py-5-c9b99c bases-style-text-sm-fc7473"
14
+ class="bases-record-view"
14
15
  data-layout="map"
15
16
  data-ui-component="bases-map-view"
16
17
  data-ui-part="unavailable"
17
18
  >
19
+ <ScrollArea.Root class="bases-record-view__scroll" viewportProps={{ "aria-label": "Map view information" }}>
20
+ <div class="bases-map-view__content">
18
21
  <SummaryStrip {view} />
19
22
  <div class="bases-style-font-medium-2689f3">Map view is not available in this runtime yet.</div>
20
23
  <p class="bases-style-text-muted-foreground-bfa603">
@@ -25,4 +28,6 @@
25
28
  <p class="bases-style-text-muted-foreground-bfa603">
26
29
  Current result count: {view.data.data.length}
27
30
  </p>
31
+ </div>
32
+ </ScrollArea.Root>
28
33
  </div>
@@ -13,6 +13,7 @@ export type MetadataDependencySet = {
13
13
  type MetadataDependencyInput = {
14
14
  documentFilter: Filters;
15
15
  viewFilter: Filters | undefined;
16
+ additionalFilters?: Filters[];
16
17
  order: BasesPropertyId[];
17
18
  sort: SortColumn[];
18
19
  groupByProperty?: BasesPropertyId | null;
@@ -27,8 +27,7 @@ function trackPropertyDependency(dependencies, propertyId) {
27
27
  dependencies.tags = true;
28
28
  return;
29
29
  }
30
- if (propertyId === "file.links" ||
31
- propertyId === "file.embeds") {
30
+ if (propertyId === "file.links" || propertyId === "file.embeds") {
32
31
  dependencies.links = true;
33
32
  return;
34
33
  }
@@ -107,6 +106,8 @@ export function collectMetadataDependencies(input) {
107
106
  const dependencies = createMetadataDependencySet();
108
107
  collectFilterDependencies(dependencies, input.documentFilter);
109
108
  collectFilterDependencies(dependencies, input.viewFilter);
109
+ for (const filter of input.additionalFilters ?? [])
110
+ collectFilterDependencies(dependencies, filter);
110
111
  for (const propertyId of input.order) {
111
112
  trackPropertyDependency(dependencies, propertyId);
112
113
  }
@@ -52,6 +52,8 @@ export interface BasesViewMap {
52
52
  table: TableView;
53
53
  cards: CardsView;
54
54
  list: ListView;
55
+ kanban: KanbanBasesViewDocument;
56
+ activity: ActivityBasesViewDocument;
55
57
  map: MapView;
56
58
  }
57
59
  export type BasesViewType = keyof BasesViewMap;
@@ -66,6 +68,30 @@ export interface TableView extends BasesView<"table"> {
66
68
  }
67
69
  export interface ListView extends BasesView<"list"> {
68
70
  }
71
+ export interface MarkdownCardViewOptions {
72
+ chipProperty?: string;
73
+ /** Optional title property id used for card titles. */
74
+ titleProperty?: string;
75
+ descriptionProperty?: string;
76
+ tagsProperty?: string;
77
+ badgeProperty?: string;
78
+ badgeLabel?: string;
79
+ badgeColor?: string;
80
+ anchorColumnId?: string | null;
81
+ columnFilters?: Record<string, Filters>;
82
+ /** Persisted lane order for the reorderable columns. */
83
+ columnOrder?: string[];
84
+ /** Persisted per-lane title/colour overrides keyed by column id. */
85
+ columnMeta?: Record<string, {
86
+ title?: string;
87
+ color?: string;
88
+ }>;
89
+ }
90
+ export interface KanbanBasesViewDocument extends BasesView<"kanban">, MarkdownCardViewOptions {
91
+ }
92
+ export interface ActivityBasesViewDocument extends BasesView<"activity">, MarkdownCardViewOptions {
93
+ dateProperty?: string;
94
+ }
69
95
  export interface CardsView extends BasesView<"cards"> {
70
96
  cardSize?: number;
71
97
  image?: string;
@@ -1,11 +1,18 @@
1
1
  <script lang="ts">
2
+ import LayoutTemplate from "@lucide/svelte/icons/layout-template";
3
+ import * as Empty from "@lapismd/design-core/shadcn/empty";
4
+ import * as ScrollArea from "@lapismd/design-core/shadcn/scroll-area";
2
5
  let { type }: { type: string } = $props();
3
6
  </script>
4
7
 
5
- <div
6
- class="bases-view bases-error bases-style-w-full-6da6a3 bases-style-border-t-b950dd bases-style-px-2-d5eab2 bases-style-py-1-660d2e bases-style-text-sm-fc7473"
7
- data-ui-component="bases-unknown-view"
8
- data-ui-part="fallback"
9
- >
10
- <p>Base configured with an unknown view type: {type}</p>
8
+ <div class="bases-record-view" data-ui-component="bases-unknown-view" data-ui-part="fallback">
9
+ <ScrollArea.Root class="bases-record-view__scroll" fillContent viewportProps={{ "aria-label": "Unsupported view" }}>
10
+ <Empty.Root class="bases-unknown-view__empty">
11
+ <Empty.Header>
12
+ <Empty.Media variant="icon"><LayoutTemplate /></Empty.Media>
13
+ <Empty.Title>Unsupported view</Empty.Title>
14
+ <Empty.Description>The configured view type <strong>{type}</strong> is not available. Choose another layout from the view menu.</Empty.Description>
15
+ </Empty.Header>
16
+ </Empty.Root>
17
+ </ScrollArea.Root>
11
18
  </div>
@@ -60,7 +60,9 @@
60
60
  data-ui-component="bases-toolbar"
61
61
  data-ui-part="root"
62
62
  >
63
- <div class="bases-style-flex-60fbb7 bases-style-flex-wrap-1eb5c6 bases-style-gap-1-44ee8b">
63
+ <div
64
+ class="bases-style-flex-60fbb7 bases-style-flex-wrap-1eb5c6 bases-style-gap-1-44ee8b"
65
+ >
64
66
  <Views
65
67
  bind:show
66
68
  {controller}
@@ -83,7 +85,9 @@
83
85
  onExportCsv={exportCsv}
84
86
  />
85
87
  </div>
86
- <div class="bases-style-flex-60fbb7 bases-style-flex-wrap-1eb5c6 bases-style-gap-1-44ee8b">
88
+ <div
89
+ class="bases-view__toolbar-controls bases-style-flex-60fbb7 bases-style-flex-wrap-1eb5c6 bases-style-gap-1-44ee8b"
90
+ >
87
91
  <Button
88
92
  variant="outline"
89
93
  size="sm"
@@ -97,6 +101,9 @@
97
101
  <span>Search</span>
98
102
  </Button>
99
103
  <Sort
104
+ showGrouping={!["kanban", "activity"].includes(
105
+ controller.selectedView.type,
106
+ )}
100
107
  bind:orderBy={
101
108
  () => controller.selectedView.sort,
102
109
  (orderBy) => (controller.selectedView.sort = orderBy)
@@ -134,9 +141,16 @@
134
141
  }
135
142
  {controller}
136
143
  />
137
- <Button variant="outline" size="sm" class="bases-style-h-8-ed8a5d" onclick={createFile}>
138
- <Plus />
139
- <span>New</span>
140
- </Button>
144
+ {#if !controller.readOnly}
145
+ <Button
146
+ variant="outline"
147
+ size="sm"
148
+ class="bases-style-h-8-ed8a5d"
149
+ onclick={createFile}
150
+ >
151
+ <Plus />
152
+ <span>New</span>
153
+ </Button>
154
+ {/if}
141
155
  </div>
142
156
  </div>
@@ -14,6 +14,14 @@ export declare const BUILT_IN_BASES_VIEW_ITEMS: readonly [{
14
14
  readonly id: "list";
15
15
  readonly name: "List";
16
16
  readonly icon: "lucide-list";
17
+ }, {
18
+ readonly id: "kanban";
19
+ readonly name: "Kanban";
20
+ readonly icon: "lucide-kanban";
21
+ }, {
22
+ readonly id: "activity";
23
+ readonly name: "Activity";
24
+ readonly icon: "lucide-activity";
17
25
  }, {
18
26
  readonly id: "map";
19
27
  readonly name: "Map";
@@ -3,5 +3,7 @@ export const BUILT_IN_BASES_VIEW_ITEMS = [
3
3
  { id: "unknown", name: "Unknown", icon: "lucide-file" },
4
4
  { id: "cards", name: "Cards", icon: "lucide-layout-grid" },
5
5
  { id: "list", name: "List", icon: "lucide-list" },
6
+ { id: "kanban", name: "Kanban", icon: "lucide-kanban" },
7
+ { id: "activity", name: "Activity", icon: "lucide-activity" },
6
8
  { id: "map", name: "Map", icon: "lucide-map" },
7
9
  ];