@adobe/data 0.9.40 → 0.9.42

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 (72) hide show
  1. package/AGENTS.md +1 -2
  2. package/dist/ecs/database/combine-plugins.d.ts +3 -3
  3. package/dist/ecs/database/combine-plugins.js +24 -0
  4. package/dist/ecs/database/combine-plugins.js.map +1 -1
  5. package/dist/ecs/database/create-plugin.d.ts +17 -18
  6. package/dist/ecs/database/create-plugin.js +2 -1
  7. package/dist/ecs/database/create-plugin.js.map +1 -1
  8. package/dist/ecs/database/create-plugin.test.js +8 -8
  9. package/dist/ecs/database/create-plugin.test.js.map +1 -1
  10. package/dist/ecs/database/create-plugin.type-test.js +17 -37
  11. package/dist/ecs/database/create-plugin.type-test.js.map +1 -1
  12. package/dist/ecs/database/database.d.ts +8 -11
  13. package/dist/ecs/database/public/create-database.d.ts +2 -2
  14. package/dist/ecs/database/public/create-database.js +12 -4
  15. package/dist/ecs/database/public/create-database.js.map +1 -1
  16. package/dist/ecs/database/public/create-database.test.js +34 -45
  17. package/dist/ecs/database/public/create-database.test.js.map +1 -1
  18. package/dist/ecs/plugins/scheduler/scheduler.d.ts +2 -2
  19. package/dist/tsconfig.tsbuildinfo +1 -1
  20. package/package.json +1 -1
  21. package/references/data-lit/package.json +1 -1
  22. package/references/data-lit-tictactoe/package.json +1 -1
  23. package/references/data-lit-tictactoe/src/state/agent-plugin.ts +5 -5
  24. package/references/data-react/package.json +1 -1
  25. package/references/data-react-hello/package.json +1 -1
  26. package/references/data-react-pixie/package.json +1 -1
  27. package/references/data-lit-todo/package.json +0 -30
  28. package/references/data-lit-todo/src/elements/todo-list/todo-list-presentation.ts +0 -22
  29. package/references/data-lit-todo/src/elements/todo-list/todo-list.css.ts +0 -12
  30. package/references/data-lit-todo/src/elements/todo-list/todo-list.ts +0 -45
  31. package/references/data-lit-todo/src/elements/todo-row/index.ts +0 -2
  32. package/references/data-lit-todo/src/elements/todo-row/todo-row-presentation.ts +0 -68
  33. package/references/data-lit-todo/src/elements/todo-row/todo-row.css.ts +0 -49
  34. package/references/data-lit-todo/src/elements/todo-row/todo-row.ts +0 -46
  35. package/references/data-lit-todo/src/elements/todo-toolbar/index.ts +0 -2
  36. package/references/data-lit-todo/src/elements/todo-toolbar/todo-toolbar-presentation.ts +0 -55
  37. package/references/data-lit-todo/src/elements/todo-toolbar/todo-toolbar.css.ts +0 -34
  38. package/references/data-lit-todo/src/elements/todo-toolbar/todo-toolbar.ts +0 -62
  39. package/references/data-lit-todo/src/elements/todo-undo-redo/index.ts +0 -3
  40. package/references/data-lit-todo/src/elements/todo-undo-redo/todo-undo-redo-presentation.ts +0 -41
  41. package/references/data-lit-todo/src/elements/todo-undo-redo/todo-undo-redo.css.ts +0 -12
  42. package/references/data-lit-todo/src/elements/todo-undo-redo/todo-undo-redo.ts +0 -37
  43. package/references/data-lit-todo/src/index.ts +0 -9
  44. package/references/data-lit-todo/src/main.ts +0 -29
  45. package/references/data-lit-todo/src/sample-types.ts +0 -14
  46. package/references/data-lit-todo/src/services/dependent-state-service/create-dependent-state-service.ts +0 -8
  47. package/references/data-lit-todo/src/services/dependent-state-service/dependent-state/all-todos.ts +0 -5
  48. package/references/data-lit-todo/src/services/dependent-state-service/dependent-state/complete-todos.ts +0 -5
  49. package/references/data-lit-todo/src/services/dependent-state-service/dependent-state/incomplete-todos.ts +0 -5
  50. package/references/data-lit-todo/src/services/dependent-state-service/dependent-state/index.ts +0 -4
  51. package/references/data-lit-todo/src/services/dependent-state-service/dependent-state-service.ts +0 -4
  52. package/references/data-lit-todo/src/services/main-service/create-main-service.ts +0 -53
  53. package/references/data-lit-todo/src/services/main-service/todo-main-service.ts +0 -20
  54. package/references/data-lit-todo/src/services/state-service/create-todo-database.ts +0 -16
  55. package/references/data-lit-todo/src/services/state-service/create-todo-store.ts +0 -28
  56. package/references/data-lit-todo/src/services/state-service/todo-state-service.ts +0 -9
  57. package/references/data-lit-todo/src/services/state-service/transactions/create-bulk-todos.ts +0 -12
  58. package/references/data-lit-todo/src/services/state-service/transactions/create-todo.test.ts +0 -17
  59. package/references/data-lit-todo/src/services/state-service/transactions/create-todo.ts +0 -15
  60. package/references/data-lit-todo/src/services/state-service/transactions/delete-all-todos.ts +0 -18
  61. package/references/data-lit-todo/src/services/state-service/transactions/delete-todo.test.ts +0 -25
  62. package/references/data-lit-todo/src/services/state-service/transactions/delete-todo.ts +0 -11
  63. package/references/data-lit-todo/src/services/state-service/transactions/drag-todo.ts +0 -19
  64. package/references/data-lit-todo/src/services/state-service/transactions/index.ts +0 -8
  65. package/references/data-lit-todo/src/services/state-service/transactions/reorder-todos.ts +0 -13
  66. package/references/data-lit-todo/src/services/state-service/transactions/toggle-complete.test.ts +0 -78
  67. package/references/data-lit-todo/src/services/state-service/transactions/toggle-complete.ts +0 -15
  68. package/references/data-lit-todo/src/todo-element.ts +0 -6
  69. package/references/data-lit-todo/src/todo-host.ts +0 -29
  70. package/references/data-lit-todo/src/todo-main-element.ts +0 -40
  71. package/references/data-lit-todo/src/todo-sample.ts +0 -21
  72. package/references/data-lit-todo/tsconfig.json +0 -10
@@ -1,8 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { applyArg } from "@adobe/data/functions";
3
-
4
- import * as dependentState from './dependent-state/index.js';
5
-
6
- import { TodoCoreService } from '../main-service/todo-main-service.js';
7
-
8
- export const createDependentStateService = (service: TodoCoreService) => applyArg(service, dependentState);
@@ -1,5 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { TodoCoreService } from '../../main-service/todo-main-service.js';
3
-
4
- export const allTodos = (service: TodoCoreService) =>
5
- service.state.observe.select(service.state.archetypes.Todo.components, { order: { order: true } });
@@ -1,5 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { TodoCoreService } from '../../main-service/todo-main-service.js';
3
-
4
- export const completeTodos = (service: TodoCoreService) =>
5
- service.state.observe.select(service.state.archetypes.Todo.components, { where: { complete: true } });
@@ -1,5 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { TodoCoreService } from '../../main-service/todo-main-service.js';
3
-
4
- export const incompleteTodos = (service: TodoCoreService) =>
5
- service.state.observe.select(service.state.archetypes.Todo.components, { where: { complete: false } });
@@ -1,4 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- export * from './all-todos.js';
3
- export * from './complete-todos.js';
4
- export * from './incomplete-todos.js';
@@ -1,4 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { createDependentStateService } from './create-dependent-state-service.js';
3
-
4
- export type DependentStateService = ReturnType<typeof createDependentStateService>;
@@ -1,53 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { TodoCoreService, TodoMainService } from './todo-main-service.js';
3
- import { createStoragePersistenceService, createUndoRedoService } from "@adobe/data/ecs";
4
- import { createDependentStateService } from '../dependent-state-service/create-dependent-state-service.js';
5
- import { createTodoDatabase } from '../state-service/create-todo-database.js';
6
- import { todoStoreSchemaVersion } from '../state-service/create-todo-store.js';
7
- import { TodoStateService } from '../state-service/todo-state-service.js';
8
-
9
- /**
10
- * Initializes any core services and returns a new todo main service.
11
- */
12
- export async function createMainService(services: {
13
- state?: TodoStateService;
14
- } = {}): Promise<TodoMainService> {
15
- {
16
- const {
17
- state = createTodoDatabase(),
18
- ...rest
19
- } = services;
20
-
21
- state.transactions.createTodo({ name: 'Buy groceries' });
22
- state.transactions.createTodo({ name: 'Pickup dry cleaning' });
23
- state.transactions.createTodo({ name: 'Buy flowers', complete: true });
24
-
25
- const persistence = await createStoragePersistenceService({
26
- database: state,
27
- storage: sessionStorage,
28
- defaultFileId: `todo-database-v${todoStoreSchemaVersion}`,
29
- autoSaveOnChange: true,
30
- autoLoadOnStart: true,
31
- });
32
-
33
- // Create the undo-redo actions
34
- const undoRedo = createUndoRedoService(state);
35
-
36
- // The core service is what we call the service without the dependent state service
37
- const coreService = {
38
- serviceName: 'todo-core-service' as const,
39
- ...rest,
40
- state,
41
- undoRedo,
42
- persistence,
43
- } satisfies TodoCoreService;
44
-
45
- // We create the dependent state from the core service.
46
- const dependentState = createDependentStateService(coreService);
47
-
48
- return {
49
- ...coreService,
50
- dependentState,
51
- } satisfies TodoMainService;
52
- }
53
- }
@@ -1,20 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { PersistenceService, UndoRedoService } from "@adobe/data/ecs";
3
- import { Service } from "@adobe/data/service";
4
- import { DependentStateService } from '../dependent-state-service/dependent-state-service.js';
5
- import { TodoStateService } from '../state-service/todo-state-service.js';
6
-
7
- export interface TodoMainService extends Service {
8
- readonly serviceName: string;
9
- state: TodoStateService;
10
- dependentState: DependentStateService;
11
- undoRedo: UndoRedoService;
12
- persistence: PersistenceService;
13
- }
14
-
15
- export type TodoCoreService = Omit<TodoMainService, 'dependentState'>;
16
-
17
- /**
18
- * The main service as used by the UI. We only allow access to the observe and actions properties.
19
- */
20
- export type TodoUIMainService = Omit<TodoMainService, 'state'> & { state: Omit<TodoStateService, 'resources'> };
@@ -1,16 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { todoStoreSchema } from './create-todo-store.js';
3
- import { Database } from "@adobe/data/ecs";
4
-
5
- import * as transactions from './transactions/index.js';
6
-
7
- export const createTodoDatabase = () => {
8
- return Database.create(Database.Plugin.create({
9
- components: todoStoreSchema.components,
10
- resources: todoStoreSchema.resources,
11
- archetypes: todoStoreSchema.archetypes,
12
- transactions,
13
- }));
14
- };
15
-
16
- export type TodoDatabase = ReturnType<typeof createTodoDatabase>;
@@ -1,28 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { Store } from "@adobe/data/ecs";
3
- import { F32, True, Schema } from "@adobe/data/schema";
4
-
5
- // Increment this value if you change the schema in a non-backwards compatible way
6
- export const todoStoreSchemaVersion = 1;
7
-
8
- export const todoStoreSchema = {
9
- components: {
10
- todo: True.schema, // a tag that indicates an entity is a todo item.
11
- complete: { type: 'boolean' as const },
12
- name: { type: 'string' as const },
13
- order: F32.schema,
14
- dragPosition: Schema.Nullable(F32.schema), // null = not being dragged
15
- },
16
- resources: {
17
- displayCompleted: { type: 'boolean' as const, default: false },
18
- },
19
- archetypes: {
20
- Todo: ['todo', 'complete', 'name', 'order', 'dragPosition'],
21
- }
22
- } as const;
23
-
24
- export const createTodoStore = () => {
25
- return Store.create(todoStoreSchema);
26
- };
27
-
28
- export type TodoStore = ReturnType<typeof createTodoStore>;
@@ -1,9 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { type TodoDatabase } from './create-todo-database.js';
3
- import { FromArchetype } from "@adobe/data/ecs";
4
-
5
- export type TodoStateService = TodoDatabase;
6
-
7
- export type Todo = FromArchetype<TodoDatabase['archetypes']['Todo']>;
8
-
9
- export type DragTodoFunction = TodoStateService['transactions']['dragTodo'];
@@ -1,12 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { createTodo } from './create-todo.js';
3
-
4
- import { type TodoStore } from '../create-todo-store.js';
5
-
6
- export const createBulkTodos = (t: TodoStore, count: number) => {
7
- t.undoable = { coalesce: false };
8
- const currentCount = t.archetypes.Todo.rowCount;
9
- for (let i = 0; i < count; i++) {
10
- createTodo(t, { name: `Todo ${currentCount + i}`, complete: false });
11
- }
12
- };
@@ -1,17 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { createTodo } from './create-todo.js';
3
- import { describe, expect, it } from 'vitest';
4
-
5
- import { createTodoStore } from '../create-todo-store.js';
6
-
7
- describe('createTodo', () => {
8
- describe('when creating a new todo', () => {
9
- it('should return the created todo entity id and create the todo', () => {
10
- const t = createTodoStore();
11
- const todoId = createTodo(t, { name: 'Buy groceries' });
12
- expect(todoId).toBeGreaterThanOrEqual(0);
13
- const values = t.read(todoId);
14
- expect(values).toEqual({ id: todoId, name: 'Buy groceries', dragPosition: null, complete: false, todo: true, order: 0 });
15
- });
16
- });
17
- });
@@ -1,15 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { type TodoStore } from '../create-todo-store.js';
3
-
4
- export const createTodo = (t: TodoStore, props: { name: string; complete?: boolean }) => {
5
- t.undoable = { coalesce: false };
6
- const order = t.archetypes.Todo.rowCount;
7
- // TODO: Figure out why the order seems to be zero on each added row.
8
- return t.archetypes.Todo.insert({
9
- ...props,
10
- complete: props.complete ?? false,
11
- todo: true,
12
- order,
13
- dragPosition: null,
14
- });
15
- };
@@ -1,18 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { type TodoStore } from '../create-todo-store.js';
3
-
4
- export const deleteAllTodos = (t: TodoStore) => {
5
- t.undoable = { coalesce: false };
6
- // query for all specific archetypes which satisfy the general todo archetype
7
- for (const archetype of t.queryArchetypes(t.archetypes.Todo.components)) {
8
- // traverse each row in reverse order
9
- // it's slightly more efficient to delete in this order
10
- // since we don't need to swap the final row to fill in the hole on delete.
11
- for (let row = archetype.rowCount - 1; row >= 0; row--) {
12
- // get the id for this row from the id column
13
- const entityId = archetype.columns.id.get(row);
14
- // delete the entity
15
- t.delete(entityId);
16
- }
17
- }
18
- };
@@ -1,25 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { createTodo } from './create-todo.js';
3
- import { deleteTodo } from './delete-todo.js';
4
- import { describe, expect, it } from 'vitest';
5
-
6
- import { createTodoStore } from '../create-todo-store.js';
7
-
8
- describe('deleteTodo', () => {
9
- describe('when deleting a todo', () => {
10
- it('should remove it from the archetype', () => {
11
- const t = createTodoStore();
12
- const todoA = createTodo(t, { name: 'A' });
13
- const todoB = createTodo(t, { name: 'B' });
14
- const todoC = createTodo(t, { name: 'C' });
15
- deleteTodo(t, todoA);
16
- const values = t.read(todoA);
17
- expect(values).toBeNull();
18
- const valuesB = t.read(todoB);
19
- expect(valuesB).toBeDefined();
20
- const valuesC = t.read(todoC);
21
- expect(valuesC).toBeDefined();
22
- expect(t.archetypes.Todo.rowCount).toBe(2);
23
- });
24
- });
25
- });
@@ -1,11 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { reorderTodos } from './reorder-todos.js';
3
- import type { Entity } from "@adobe/data/ecs";
4
-
5
- import { type TodoStore } from '../create-todo-store.js';
6
-
7
- export const deleteTodo = (t: TodoStore, id: Entity) => {
8
- t.undoable = { coalesce: false };
9
- t.delete(id);
10
- reorderTodos(t);
11
- };
@@ -1,19 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { reorderTodos } from './reorder-todos.js';
3
- import type { Entity } from "@adobe/data/ecs";
4
-
5
- import { type TodoStore } from '../create-todo-store.js';
6
-
7
- export const dragTodo = (t: TodoStore, props: { todo: Entity; dragPosition: number; finalIndex?: number }) => {
8
- t.undoable = { coalesce: false };
9
- const { todo, dragPosition, finalIndex } = props;
10
- const completed = finalIndex !== undefined;
11
- if (!completed) {
12
- t.update(todo, { dragPosition });
13
- } else {
14
- // insert it with an order value 0.5 less than the final index
15
- t.update(todo, { dragPosition: null, order: finalIndex - 0.5 });
16
- // then we call reorderTodos which will reorder everything to integer order values
17
- reorderTodos(t); // this is an example of calling another transaction from a transaction
18
- }
19
- };
@@ -1,8 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- export * from './create-todo.js';
3
- export * from './delete-todo.js';
4
- export * from './toggle-complete.js';
5
- export * from './create-bulk-todos.js';
6
- export * from './drag-todo.js';
7
- // This is used by the undo-redo actions, the implementation is in the data package.
8
- export { applyOperations } from "@adobe/data/ecs";
@@ -1,13 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { TodoStore } from '../create-todo-store.js';
3
-
4
- /**
5
- * Ensures each todo has an monotonically increasing integer order value.
6
- * You might call this after inserting a todo with a floating point order value for insertion.
7
- */
8
- export const reorderTodos = (t: TodoStore) => {
9
- const todos = t.select(t.archetypes.Todo.components, { order: { order: true } });
10
- for (let i = 0; i < todos.length; i++) {
11
- t.update(todos[i], { order: i });
12
- }
13
- };
@@ -1,78 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { createTodo } from './create-todo.js';
3
- import { toggleComplete } from './toggle-complete.js';
4
- import { describe, expect, it } from 'vitest';
5
-
6
- import { createTodoStore } from '../create-todo-store.js';
7
-
8
- describe('toggleComplete', () => {
9
- describe('when toggling a complete todo', () => {
10
- it('should mark it as incomplete', () => {
11
- const t = createTodoStore();
12
- const todoId = createTodo(t, { name: 'Test todo' });
13
- // First mark as complete
14
- t.update(todoId, { complete: true });
15
- expect(t.read(todoId)?.complete).toBe(true);
16
-
17
- // Then toggle it
18
- toggleComplete(t, todoId);
19
- expect(t.read(todoId)?.complete).toBe(false);
20
- });
21
- });
22
-
23
- describe('when toggling an incomplete todo', () => {
24
- it('should mark it as complete', () => {
25
- const t = createTodoStore();
26
- const todoId = createTodo(t, { name: 'Test todo' });
27
- expect(t.read(todoId)?.complete).toBe(false);
28
-
29
- toggleComplete(t, todoId);
30
- expect(t.read(todoId)?.complete).toBe(true);
31
- });
32
- });
33
-
34
- describe('when toggling multiple times', () => {
35
- it('should alternate between complete and incomplete', () => {
36
- const t = createTodoStore();
37
- const todoId = createTodo(t, { name: 'Test todo' });
38
- expect(t.read(todoId)?.complete).toBe(false);
39
-
40
- // First toggle
41
- toggleComplete(t, todoId);
42
- expect(t.read(todoId)?.complete).toBe(true);
43
-
44
- // Second toggle
45
- toggleComplete(t, todoId);
46
- expect(t.read(todoId)?.complete).toBe(false);
47
-
48
- // Third toggle
49
- toggleComplete(t, todoId);
50
- expect(t.read(todoId)?.complete).toBe(true);
51
- });
52
- });
53
-
54
- describe('when toggling a non-existent todo', () => {
55
- it('should not throw an error and should no-op', () => {
56
- const t = createTodoStore();
57
- const nonExistentId = 999;
58
- expect(t.read(nonExistentId)).toBeNull();
59
-
60
- // Should not throw
61
- expect(() => toggleComplete(t, nonExistentId)).not.toThrow();
62
-
63
- // Should still be null
64
- expect(t.read(nonExistentId)).toBeNull();
65
- });
66
- });
67
-
68
- describe('when toggling with invalid entity id', () => {
69
- it('should not throw an error and should no-op', () => {
70
- const t = createTodoStore();
71
- const invalidId = -1;
72
-
73
- // Should not throw
74
- toggleComplete(t, invalidId);
75
- expect(() => toggleComplete(t, invalidId)).not.toThrow();
76
- });
77
- });
78
- });
@@ -1,15 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import type { Entity } from "@adobe/data/ecs";
3
-
4
- import { type TodoStore } from '../create-todo-store.js';
5
-
6
- export const toggleComplete = (t: TodoStore, id: Entity) => {
7
- t.undoable = { coalesce: false };
8
- const todo = t.read(id);
9
- // actions must never throw errors.
10
- // if state is invalid they must no op.
11
- // this is important for resolving concurrency conflicts.
12
- if (todo) {
13
- t.update(id, { complete: !todo.complete });
14
- }
15
- };
@@ -1,6 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { TodoMainService } from './services/main-service/todo-main-service.js';
3
-
4
- import { ApplicationElement } from "@adobe/data-lit";
5
-
6
- export class TodoElement extends ApplicationElement<TodoMainService> { }
@@ -1,29 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
-
3
- import { LitElement, html, css } from 'lit';
4
- import { customElement } from 'lit/decorators.js';
5
- import { createMainService } from './services/main-service/create-main-service.js';
6
- import './todo-main-element.js'; // Side effect: registers custom elements
7
- import "@adobe/data-lit"; // Side effect: registers ApplicationHost and other elements
8
-
9
- export const tagName = 'todo-host';
10
-
11
- @customElement(tagName)
12
- export class TodoHost extends LitElement {
13
- static styles = css`
14
- :host {
15
- display: flex;
16
- flex: 1 1 auto;
17
- color: red;
18
- }
19
- `;
20
-
21
- render() {
22
- return html`
23
- <application-host
24
- .createService=${createMainService}
25
- .renderElement=${() => html`<data-todo></data-todo>`}>
26
- </application-host>
27
- `;
28
- }
29
- }
@@ -1,40 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import './elements/todo-list/todo-list.js';
3
- import './elements/todo-row/todo-row.js';
4
- import './elements/todo-toolbar/todo-toolbar.js';
5
- import './elements/todo-undo-redo/todo-undo-redo.js';
6
- import { TodoElement } from './todo-element.js';
7
- import { html, css } from 'lit';
8
- import { customElement } from 'lit/decorators.js';
9
-
10
- export const tagName = 'data-todo';
11
-
12
- @customElement(tagName)
13
- export class TodoMainElement extends TodoElement {
14
- static styles = css`
15
- :host {
16
- display: flex;
17
- flex-direction: column;
18
- height: 400px;
19
- max-height: 400px;
20
- overflow: hidden;
21
- }
22
-
23
- data-todo-toolbar {
24
- flex-shrink: 0;
25
- }
26
-
27
- data-todo-list {
28
- flex: 1;
29
- overflow-y: auto;
30
- min-height: 0;
31
- }
32
- `;
33
-
34
- render() {
35
- return html`
36
- <data-todo-toolbar></data-todo-toolbar>
37
- <data-todo-list></data-todo-list>
38
- `;
39
- }
40
- }
@@ -1,21 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
-
3
- import type { Sample } from "./sample-types.js";
4
- import "./todo-host.js"; // Side effect: registers todo-host
5
-
6
- export const todoSample: Sample = {
7
- id: 'todo',
8
- title: 'Todo Application',
9
- description: 'A complete todo application demonstrating ECS architecture, state management, undo/redo, and persistence.',
10
- category: 'Application Examples',
11
- difficulty: 'intermediate',
12
- features: [
13
- 'Entity-Component-System (ECS)',
14
- 'State Management',
15
- 'Undo/Redo System',
16
- 'Local Storage Persistence',
17
- 'Drag and Drop Reordering',
18
- 'Reactive UI Updates'
19
- ],
20
- elementTag: 'todo-host'
21
- };
@@ -1,10 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "esnext",
4
- "module": "ESNext",
5
- "moduleResolution": "bundler",
6
- "strict": true,
7
- "skipLibCheck": true
8
- },
9
- "include": ["src/**/*"]
10
- }