@ratiosolver/coco 0.0.92 → 0.1.1

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 (69) hide show
  1. package/dist/coco.d.ts +122 -0
  2. package/dist/coco.js +180 -0
  3. package/dist/coco.js.map +1 -0
  4. package/dist/components/app.d.ts +3 -0
  5. package/dist/components/app.js +48 -0
  6. package/dist/components/app.js.map +1 -0
  7. package/dist/components/class.d.ts +5 -0
  8. package/dist/components/class.js +80 -0
  9. package/dist/components/class.js.map +1 -0
  10. package/dist/components/object.d.ts +5 -0
  11. package/dist/components/object.js +91 -0
  12. package/dist/components/object.js.map +1 -0
  13. package/dist/components/offcanvas.d.ts +3 -0
  14. package/dist/components/offcanvas.js +16 -0
  15. package/dist/components/offcanvas.js.map +1 -0
  16. package/dist/components/rule.d.ts +4 -0
  17. package/dist/components/rule.js +22 -0
  18. package/dist/components/rule.js.map +1 -0
  19. package/dist/favicon.ico +0 -0
  20. package/dist/index.css +1 -0
  21. package/dist/index.d.ts +7 -14
  22. package/dist/index.js +7 -27
  23. package/dist/index.js.map +1 -1
  24. package/dist/index.umd.cjs +1 -0
  25. package/dist/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +29 -20
  27. package/README.md +0 -3
  28. package/dist/coco/coco.d.ts +0 -303
  29. package/dist/coco/coco.js +0 -564
  30. package/dist/coco/coco.js.map +0 -1
  31. package/dist/coco/components/chart.d.ts +0 -31
  32. package/dist/coco/components/chart.js +0 -301
  33. package/dist/coco/components/chart.js.map +0 -1
  34. package/dist/coco/components/item.d.ts +0 -17
  35. package/dist/coco/components/item.js +0 -72
  36. package/dist/coco/components/item.js.map +0 -1
  37. package/dist/coco/components/item_chart.d.ts +0 -16
  38. package/dist/coco/components/item_chart.js +0 -92
  39. package/dist/coco/components/item_chart.js.map +0 -1
  40. package/dist/coco/components/item_properties.d.ts +0 -12
  41. package/dist/coco/components/item_properties.js +0 -65
  42. package/dist/coco/components/item_properties.js.map +0 -1
  43. package/dist/coco/components/item_publisher.d.ts +0 -16
  44. package/dist/coco/components/item_publisher.js +0 -159
  45. package/dist/coco/components/item_publisher.js.map +0 -1
  46. package/dist/coco/components/item_types.d.ts +0 -13
  47. package/dist/coco/components/item_types.js +0 -48
  48. package/dist/coco/components/item_types.js.map +0 -1
  49. package/dist/coco/components/items_table.d.ts +0 -17
  50. package/dist/coco/components/items_table.js +0 -98
  51. package/dist/coco/components/items_table.js.map +0 -1
  52. package/dist/coco/components/map.d.ts +0 -200
  53. package/dist/coco/components/map.js +0 -483
  54. package/dist/coco/components/map.js.map +0 -1
  55. package/dist/coco/components/offcanvas.d.ts +0 -6
  56. package/dist/coco/components/offcanvas.js +0 -42
  57. package/dist/coco/components/offcanvas.js.map +0 -1
  58. package/dist/coco/components/publisher.d.ts +0 -22
  59. package/dist/coco/components/publisher.js +0 -339
  60. package/dist/coco/components/publisher.js.map +0 -1
  61. package/dist/coco/components/taxonomy.d.ts +0 -25
  62. package/dist/coco/components/taxonomy.js +0 -184
  63. package/dist/coco/components/taxonomy.js.map +0 -1
  64. package/dist/coco/components/type.d.ts +0 -32
  65. package/dist/coco/components/type.js +0 -151
  66. package/dist/coco/components/type.js.map +0 -1
  67. package/dist/coco/rules.d.ts +0 -30
  68. package/dist/coco/rules.js +0 -36
  69. package/dist/coco/rules.js.map +0 -1
package/dist/coco.d.ts ADDED
@@ -0,0 +1,122 @@
1
+ export interface CoCoOptions {
2
+ url?: string;
3
+ }
4
+ export declare namespace coco {
5
+ export class CoCo {
6
+ private readonly options;
7
+ private readonly classes;
8
+ private readonly objects;
9
+ private readonly rules;
10
+ private socket;
11
+ private readonly listeners;
12
+ constructor(options?: CoCoOptions);
13
+ connect(): void;
14
+ get_classes(): ReadonlyMap<string, CoCoClass>;
15
+ get_class(name: string): CoCoClass;
16
+ get_objects(): ReadonlyMap<string, CoCoObject>;
17
+ get_object(id: string): CoCoObject;
18
+ get_rules(): ReadonlyMap<string, CoCoRule>;
19
+ get_rule(name: string): CoCoRule;
20
+ add_listener(listener: CoCoListener): void;
21
+ remove_listener(listener: CoCoListener): void;
22
+ }
23
+ export class CoCoClass {
24
+ private readonly coco;
25
+ private readonly name;
26
+ private readonly parents;
27
+ private readonly static_properties;
28
+ private readonly dynamic_properties;
29
+ private readonly instances;
30
+ private readonly listeners;
31
+ constructor(coco: CoCo, name: string, parents?: Set<string>, static_properties?: Map<string, Property>, dynamic_properties?: Map<string, Property>);
32
+ get_coco(): CoCo;
33
+ get_name(): string;
34
+ get_parents(): ReadonlySet<string>;
35
+ get_static_properties(): ReadonlyMap<string, Property>;
36
+ get_dynamic_properties(): ReadonlyMap<string, Property>;
37
+ get_instances(): ReadonlySet<CoCoObject>;
38
+ _add_instance(obj: CoCoObject): void;
39
+ add_listener(listener: CoCoClassListener): void;
40
+ remove_listener(listener: CoCoClassListener): void;
41
+ }
42
+ export class CoCoObject {
43
+ private readonly coco;
44
+ private readonly id;
45
+ private readonly classes;
46
+ private readonly properties?;
47
+ private readonly values?;
48
+ private readonly listeners;
49
+ constructor(coco: CoCo, id: string, classes: Set<CoCoClass>, properties?: Record<string, Value>, values?: Record<string, TimeValue>);
50
+ get_coco(): CoCo;
51
+ get_id(): string;
52
+ get_classes(): ReadonlySet<CoCoClass>;
53
+ _add_class(cls: CoCoClass): void;
54
+ get_properties(): Record<string, Value> | undefined;
55
+ _set_properties(properties: Record<string, Value>): void;
56
+ get_values(): Record<string, TimeValue> | undefined;
57
+ _set_values(values: Record<string, Value>, date_time: string): void;
58
+ add_listener(listener: CoCoObjectListener): void;
59
+ remove_listener(listener: CoCoObjectListener): void;
60
+ }
61
+ export class CoCoRule {
62
+ private readonly coco;
63
+ private readonly name;
64
+ private readonly content;
65
+ constructor(coco: CoCo, name: string, content: string);
66
+ get_coco(): CoCo;
67
+ get_name(): string;
68
+ get_content(): string;
69
+ }
70
+ export interface CoCoListener {
71
+ connected(): void;
72
+ disconnected(): void;
73
+ connection_error(error: Event): void;
74
+ initialized(): void;
75
+ created_class(cls: CoCoClass): void;
76
+ created_object(obj: CoCoObject): void;
77
+ created_rule(rule: CoCoRule): void;
78
+ }
79
+ export interface CoCoClassListener {
80
+ instance_added(obj: CoCoObject): void;
81
+ }
82
+ export interface CoCoObjectListener {
83
+ class_added(cls: CoCoClass): void;
84
+ properties_updated(properties: Record<string, Value>): void;
85
+ values_added(values: Record<string, Value>, date_time: string): void;
86
+ }
87
+ export type Value = null | boolean | number | string;
88
+ type TimeValue = [Value, string];
89
+ export function value_to_string(value: Value): string;
90
+ type Property = {
91
+ type: 'bool';
92
+ nullable?: boolean;
93
+ default?: boolean;
94
+ } | {
95
+ type: 'int';
96
+ nullable?: boolean;
97
+ default?: number;
98
+ min?: number;
99
+ max?: number;
100
+ } | {
101
+ type: 'float';
102
+ nullable?: boolean;
103
+ default?: number;
104
+ min?: number;
105
+ max?: number;
106
+ } | {
107
+ type: 'string';
108
+ nullable?: boolean;
109
+ default?: string;
110
+ } | {
111
+ type: 'symbol';
112
+ nullable?: boolean;
113
+ default?: string;
114
+ allowed_values?: string[];
115
+ } | {
116
+ type: 'object';
117
+ nullable?: boolean;
118
+ default?: string;
119
+ class: string;
120
+ };
121
+ export {};
122
+ }
package/dist/coco.js ADDED
@@ -0,0 +1,180 @@
1
+ export var coco;
2
+ (function (coco_1) {
3
+ class CoCo {
4
+ constructor(options = {}) {
5
+ this.classes = new Map();
6
+ this.objects = new Map();
7
+ this.rules = new Map();
8
+ this.socket = null;
9
+ this.listeners = new Set();
10
+ this.options = Object.assign({ url: 'ws://' + window.location.host + '/ws' }, options);
11
+ }
12
+ connect() {
13
+ if (this.socket)
14
+ this.socket.close();
15
+ console.log('Connecting to CoCo at', this.options.url);
16
+ this.socket = new WebSocket(this.options.url);
17
+ this.socket.onopen = () => {
18
+ console.log('CoCo connected');
19
+ for (const listener of this.listeners)
20
+ listener.connected();
21
+ };
22
+ this.socket.onclose = () => {
23
+ console.log('CoCo disconnected');
24
+ for (const listener of this.listeners)
25
+ listener.disconnected();
26
+ };
27
+ this.socket.onerror = (error) => {
28
+ console.error('CoCo connection error', error);
29
+ for (const listener of this.listeners)
30
+ listener.connection_error(error);
31
+ };
32
+ this.socket.onmessage = (event) => {
33
+ console.trace('CoCo message received:', event.data);
34
+ const msg = JSON.parse(event.data);
35
+ switch (msg.msg_type) {
36
+ case 'coco': {
37
+ for (const [name, cls] of Object.entries(msg.classes))
38
+ this.classes.set(name, new CoCoClass(this, name, new Set(cls.parents || []), new Map(Object.entries(cls.static_properties || {})), new Map(Object.entries(cls.dynamic_properties || {}))));
39
+ if (msg.objects)
40
+ for (const [id, obj] of Object.entries(msg.objects))
41
+ this.objects.set(id, new CoCoObject(this, id, new Set(obj.classes.map(cls_name => this.get_class(cls_name))), obj.properties, obj.values));
42
+ for (const listener of this.listeners)
43
+ listener.initialized();
44
+ break;
45
+ }
46
+ case 'class_created': {
47
+ const cls = new CoCoClass(this, msg.name, new Set(msg.parents || []), new Map(Object.entries(msg.static_properties || {})), new Map(Object.entries(msg.dynamic_properties || {})));
48
+ this.classes.set(cls.get_name(), cls);
49
+ for (const listener of this.listeners)
50
+ listener.created_class(cls);
51
+ break;
52
+ }
53
+ case 'object_created': {
54
+ const obj = new CoCoObject(this, msg.id, new Set(msg.classes.map(cls_name => this.get_class(cls_name))), msg.properties, msg.values);
55
+ this.objects.set(obj.get_id(), obj);
56
+ for (const listener of this.listeners)
57
+ listener.created_object(obj);
58
+ break;
59
+ }
60
+ case 'added_class': {
61
+ const obj = this.get_object(msg.object_id);
62
+ const cls = this.get_class(msg.class_name);
63
+ obj._add_class(cls);
64
+ break;
65
+ }
66
+ case 'updated_properties': {
67
+ const obj = this.get_object(msg.object_id);
68
+ obj._set_properties(msg.properties);
69
+ break;
70
+ }
71
+ case 'added_values': {
72
+ const obj = this.get_object(msg.object_id);
73
+ obj._set_values(msg.values, msg.date_time);
74
+ break;
75
+ }
76
+ case 'rule_created': {
77
+ const rule = new CoCoRule(this, msg.name, msg.content);
78
+ this.rules.set(rule.get_name(), rule);
79
+ for (const listener of this.listeners)
80
+ listener.created_rule(rule);
81
+ break;
82
+ }
83
+ }
84
+ };
85
+ }
86
+ get_classes() { return this.classes; }
87
+ get_class(name) { return this.classes.get(name); }
88
+ get_objects() { return this.objects; }
89
+ get_object(id) { return this.objects.get(id); }
90
+ get_rules() { return this.rules; }
91
+ get_rule(name) { return this.rules.get(name); }
92
+ add_listener(listener) { this.listeners.add(listener); }
93
+ remove_listener(listener) { this.listeners.delete(listener); }
94
+ }
95
+ coco_1.CoCo = CoCo;
96
+ class CoCoClass {
97
+ constructor(coco, name, parents = new Set(), static_properties = new Map(), dynamic_properties = new Map()) {
98
+ this.instances = new Set();
99
+ this.listeners = new Set();
100
+ this.coco = coco;
101
+ this.name = name;
102
+ this.parents = parents;
103
+ this.static_properties = static_properties;
104
+ this.dynamic_properties = dynamic_properties;
105
+ }
106
+ get_coco() { return this.coco; }
107
+ get_name() { return this.name; }
108
+ get_parents() { return this.parents; }
109
+ get_static_properties() { return this.static_properties; }
110
+ get_dynamic_properties() { return this.dynamic_properties; }
111
+ get_instances() { return this.instances; }
112
+ _add_instance(obj) {
113
+ this.instances.add(obj);
114
+ for (const listener of this.listeners)
115
+ listener.instance_added(obj);
116
+ }
117
+ add_listener(listener) { this.listeners.add(listener); }
118
+ remove_listener(listener) { this.listeners.delete(listener); }
119
+ }
120
+ coco_1.CoCoClass = CoCoClass;
121
+ class CoCoObject {
122
+ constructor(coco, id, classes, properties, values) {
123
+ this.listeners = new Set();
124
+ this.coco = coco;
125
+ this.id = id;
126
+ this.classes = classes;
127
+ this.properties = properties;
128
+ this.values = values;
129
+ for (const cls of classes)
130
+ cls._add_instance(this);
131
+ }
132
+ get_coco() { return this.coco; }
133
+ get_id() { return this.id; }
134
+ get_classes() { return this.classes; }
135
+ _add_class(cls) {
136
+ this.classes.add(cls);
137
+ cls._add_instance(this);
138
+ for (const listener of this.listeners)
139
+ listener.class_added(cls);
140
+ }
141
+ get_properties() { return this.properties; }
142
+ _set_properties(properties) {
143
+ for (const [key, value] of Object.entries(properties))
144
+ this.properties[key] = value;
145
+ for (const listener of this.listeners)
146
+ listener.properties_updated(properties);
147
+ }
148
+ get_values() { return this.values; }
149
+ _set_values(values, date_time) {
150
+ for (const [key, value] of Object.entries(values))
151
+ this.values[key] = [value, date_time];
152
+ for (const listener of this.listeners)
153
+ listener.values_added(values, date_time);
154
+ }
155
+ add_listener(listener) { this.listeners.add(listener); }
156
+ remove_listener(listener) { this.listeners.delete(listener); }
157
+ }
158
+ coco_1.CoCoObject = CoCoObject;
159
+ class CoCoRule {
160
+ constructor(coco, name, content) {
161
+ this.coco = coco;
162
+ this.name = name;
163
+ this.content = content;
164
+ }
165
+ get_coco() { return this.coco; }
166
+ get_name() { return this.name; }
167
+ get_content() { return this.content; }
168
+ }
169
+ coco_1.CoCoRule = CoCoRule;
170
+ function value_to_string(value) {
171
+ switch (typeof value) {
172
+ case 'string': return value;
173
+ case 'number': return value.toString();
174
+ case 'boolean': return value ? 'true' : 'false';
175
+ default: return '';
176
+ }
177
+ }
178
+ coco_1.value_to_string = value_to_string;
179
+ })(coco || (coco = {}));
180
+ //# sourceMappingURL=coco.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coco.js","sourceRoot":"","sources":["../src/coco.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { VNode } from "snabbdom";
2
+ import { coco } from "../coco";
3
+ export declare function CoCoApp(coco: coco.CoCo): VNode;
@@ -0,0 +1,48 @@
1
+ import { h } from "snabbdom";
2
+ import { App, flick, Navbar, OffcanvasBrand } from "@ratiosolver/flick";
3
+ import { CoCoOffcanvas } from "./offcanvas";
4
+ const app_listener = {
5
+ initialized: () => flick.redraw(),
6
+ created_class: (_cls) => flick.redraw(),
7
+ created_object: (_obj) => flick.redraw(),
8
+ created_rule: (_rule) => flick.redraw(),
9
+ connection_error: (error) => console.error('CoCo connection error', error),
10
+ connected: () => { },
11
+ disconnected: () => { },
12
+ };
13
+ flick.ctx.current_page = h('div.container.mt-5', [
14
+ h('div.text-center.mb-5', [
15
+ h('h1.display-4', 'CoCo'),
16
+ h('p.lead', 'Combined Deduction and Abduction Reasoner'),
17
+ ]),
18
+ h('div.row.justify-content-center', [
19
+ h('div.col-lg-8', [
20
+ h('p', 'CoCo is a dual-process inspired cognitive architecture built in Rust. It integrates a rule-based expert system and a timeline-based planner to invoke deductive and abductive reasoning in dynamic environments.'),
21
+ h('hr.my-4'),
22
+ h('h4', 'Features'),
23
+ h('ul.list-group.list-group-flush', [
24
+ h('li.list-group-item', [h('strong', 'Hybrid Reasoning'), ': Unites deductive logic with abductive inference.']),
25
+ h('li.list-group-item', [h('strong', 'Rust Core'), ': Designed for performance, memory safety, and concurrency.']),
26
+ h('li.list-group-item', [h('strong', 'CLIPS Integration'), ': Seamless binding with the C-based CLIPS expert system.']),
27
+ h('li.list-group-item', [h('strong', 'Web Interface'), ': Includes a web server (Axum) and visualization tools.']),
28
+ ])
29
+ ])
30
+ ])
31
+ ]);
32
+ export function CoCoApp(coco) {
33
+ const content = h('div', {
34
+ hook: {
35
+ insert: () => {
36
+ coco.add_listener(app_listener);
37
+ },
38
+ destroy: () => {
39
+ coco.remove_listener(app_listener);
40
+ }
41
+ }
42
+ }, [
43
+ flick.ctx.current_page(),
44
+ CoCoOffcanvas(coco)
45
+ ]);
46
+ return App(Navbar(OffcanvasBrand('CoCo')), content);
47
+ }
48
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/components/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAS,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,YAAY,GAAG;IACnB,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;IACjC,aAAa,EAAE,CAAC,IAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;IACvD,cAAc,EAAE,CAAC,IAAqB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;IACzD,YAAY,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;IACtD,gBAAgB,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;IACjF,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC;CACxB,CAAC;AAEF,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,oBAAoB,EAAE;IAC/C,CAAC,CAAC,sBAAsB,EAAE;QACxB,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;QACzB,CAAC,CAAC,QAAQ,EAAE,2CAA2C,CAAC;KACzD,CAAC;IACF,CAAC,CAAC,gCAAgC,EAAE;QAClC,CAAC,CAAC,cAAc,EAAE;YAChB,CAAC,CAAC,GAAG,EAAE,kNAAkN,CAAC;YAC1N,CAAC,CAAC,SAAS,CAAC;YACZ,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC;YACnB,CAAC,CAAC,gCAAgC,EAAE;gBAClC,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,oDAAoD,CAAC,CAAC;gBAChH,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,6DAA6D,CAAC,CAAC;gBAClH,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EAAE,0DAA0D,CAAC,CAAC;gBACvH,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,yDAAyD,CAAC,CAAC;aACnH,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,UAAU,OAAO,CAAC,IAAe;IACrC,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,EACrB;QACE,IAAI,EAAE;YACJ,MAAM,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACrC,CAAC;SACF;KACF,EAAE;QACF,KAAK,CAAC,GAAG,CAAC,YAA4B,EAAE;QACzC,aAAa,CAAC,IAAI,CAAC;KACpB,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { VNode } from "snabbdom";
2
+ import { coco } from "../coco";
3
+ export declare function ClassesList(coco: coco.CoCo): VNode;
4
+ export declare function ObjectRow(cls: coco.CoCoClass, obj: coco.CoCoObject): VNode;
5
+ export declare function CoCoClass(cls: coco.CoCoClass): VNode;
@@ -0,0 +1,80 @@
1
+ import { h } from "snabbdom";
2
+ import { coco } from "../coco";
3
+ import { flick, Header, ListGroup, ListGroupItem, Table } from "@ratiosolver/flick";
4
+ import { CoCoObject } from "./object";
5
+ export function ClassesList(coco) {
6
+ return ListGroup(Array.from(coco.get_classes().values().map(cls => ListGroupItem(cls.get_name(), () => {
7
+ flick.ctx.current_page = CoCoClass(cls);
8
+ flick.ctx.page_title = `Class: ${cls.get_name()}`;
9
+ flick.redraw();
10
+ }, flick.ctx.page_title === `Class: ${cls.get_name()}`))));
11
+ }
12
+ const cls_listener = {
13
+ instance_added: (_obj) => {
14
+ flick.redraw();
15
+ }
16
+ };
17
+ const obj_item_listener = {
18
+ class_added: (_cls) => { },
19
+ properties_updated: (_properties) => { flick.redraw(); },
20
+ values_added: (_values, _date_time) => { flick.redraw(); }
21
+ };
22
+ export function ObjectRow(cls, obj) {
23
+ const cells = [obj.get_id()];
24
+ for (const prop of cls.get_static_properties().keys().toArray().sort()) {
25
+ const props = obj.get_properties();
26
+ if (props && prop in props)
27
+ cells.push(coco.value_to_string(props[prop]));
28
+ else
29
+ cells.push('');
30
+ }
31
+ for (const prop of cls.get_dynamic_properties().keys().toArray().sort()) {
32
+ const props = obj.get_values();
33
+ if (props && prop in props)
34
+ cells.push(coco.value_to_string(props[prop][0]));
35
+ else
36
+ cells.push('');
37
+ }
38
+ return h('tr', {
39
+ hook: {
40
+ insert: () => {
41
+ obj.add_listener(obj_item_listener);
42
+ },
43
+ destroy: () => {
44
+ obj.remove_listener(obj_item_listener);
45
+ }
46
+ },
47
+ style: { cursor: 'pointer' },
48
+ on: {
49
+ click: () => {
50
+ flick.ctx.current_page = CoCoObject(obj);
51
+ flick.ctx.page_title = `Object: ${obj.get_id()}`;
52
+ flick.redraw();
53
+ }
54
+ }
55
+ }, cells.map(cell => h('td', cell)));
56
+ }
57
+ export function CoCoClass(cls) {
58
+ const header = ["ID", ...cls.get_static_properties().keys().toArray().sort(), ...cls.get_dynamic_properties().keys().toArray().sort()];
59
+ const rows = cls.get_instances().values().map(obj => ObjectRow(cls, obj)).toArray();
60
+ return h('div.container.mt-2', {
61
+ hook: {
62
+ insert: () => {
63
+ cls.add_listener(cls_listener);
64
+ },
65
+ destroy: () => {
66
+ cls.remove_listener(cls_listener);
67
+ }
68
+ }
69
+ }, [
70
+ h('div.input-group', [
71
+ h('input.form-control', { attrs: { type: 'text', value: cls.get_name(), placeholder: 'Type name', disabled: true } }),
72
+ h('button.btn.btn-outline-secondary', {
73
+ attrs: { type: 'button', title: 'Copy type name to clipboard' },
74
+ on: { click: () => navigator.clipboard.writeText(cls.get_name()) }
75
+ }, h('i.fa-solid.fa-copy')),
76
+ ]),
77
+ rows.length > 0 ? Table(Header(header), rows, 'Instances') : h('p.mt-2', 'No instances of this class yet.')
78
+ ]);
79
+ }
80
+ //# sourceMappingURL=class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class.js","sourceRoot":"","sources":["../../src/components/class.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { VNode } from "snabbdom";
2
+ import { coco } from "../coco";
3
+ export declare function ObjectGroupItem(obj: coco.CoCoObject): VNode;
4
+ export declare function ObjectsList(coco: coco.CoCo): VNode;
5
+ export declare function CoCoObject(obj: coco.CoCoObject): VNode;
@@ -0,0 +1,91 @@
1
+ import { h } from "snabbdom";
2
+ import { flick, ListGroup } from "@ratiosolver/flick";
3
+ import { CoCoClass } from "./class";
4
+ import * as echarts from 'echarts/core';
5
+ const obj_item_listener = {
6
+ class_added: (_cls) => { },
7
+ properties_updated: (_properties) => { flick.redraw(); },
8
+ values_added: (_values, _date_time) => { }
9
+ };
10
+ export function ObjectGroupItem(obj) {
11
+ const active = flick.ctx.page_title === `Object: ${obj.get_id()}`;
12
+ return h('button.list-group-item.list-group-item-action' + (active ? '.active.rounded' : ''), {
13
+ hook: {
14
+ insert: () => {
15
+ obj.add_listener(obj_item_listener);
16
+ },
17
+ destroy: () => {
18
+ obj.remove_listener(obj_item_listener);
19
+ }
20
+ },
21
+ props: { type: 'button' },
22
+ attrs: { 'aria-current': active ? 'true' : 'false' },
23
+ on: {
24
+ click: () => {
25
+ flick.ctx.current_page = CoCoObject(obj);
26
+ flick.ctx.page_title = `Object: ${obj.get_id()}`;
27
+ flick.redraw();
28
+ }
29
+ }
30
+ }, object_to_string(obj));
31
+ }
32
+ export function ObjectsList(coco) {
33
+ return ListGroup(Array.from(coco.get_objects().values().map(obj => ObjectGroupItem(obj))));
34
+ }
35
+ const obj_listener = {
36
+ class_added: (_cls) => { flick.redraw(); },
37
+ properties_updated: (_properties) => { flick.redraw(); },
38
+ values_added: (_values, _date_time) => { flick.redraw(); }
39
+ };
40
+ let chart = null;
41
+ export function CoCoObject(obj) {
42
+ const vals = obj.get_values();
43
+ const content = h('div.container.mt-2', {
44
+ hook: {
45
+ insert: () => {
46
+ obj.add_listener(obj_listener);
47
+ },
48
+ destroy: () => {
49
+ obj.remove_listener(obj_listener);
50
+ }
51
+ }
52
+ }, [
53
+ h('div.input-group', [
54
+ h('input.form-control', { attrs: { type: 'text', value: obj.get_id(), placeholder: 'Type name', disabled: true } }),
55
+ h('button.btn.btn-outline-secondary', {
56
+ attrs: { type: 'button', title: 'Copy type name to clipboard' },
57
+ on: { click: () => navigator.clipboard.writeText(obj.get_id()) }
58
+ }, h('i.fa-solid.fa-copy')),
59
+ ]),
60
+ h('div.mt-2', Array.from(obj.get_classes()).map(cls => h('span.badge.bg-primary.me-1', {
61
+ style: { cursor: 'pointer' },
62
+ on: {
63
+ click: () => {
64
+ flick.ctx.current_page = CoCoClass(cls);
65
+ flick.ctx.page_title = `Class: ${cls.get_name()}`;
66
+ flick.redraw();
67
+ }
68
+ }
69
+ }, cls.get_name()))),
70
+ h('div.mt-2', {
71
+ style: { minHeight: `${vals ? Object.values(vals).length * 300 : 30}px` },
72
+ hook: {
73
+ insert: (vnode) => {
74
+ chart = echarts.init(vnode.elm);
75
+ },
76
+ destroy: () => {
77
+ if (chart) {
78
+ chart.dispose();
79
+ chart = null;
80
+ }
81
+ }
82
+ }
83
+ }, 'Loading history...')
84
+ ]);
85
+ return content;
86
+ }
87
+ function object_to_string(obj) {
88
+ var _a;
89
+ return ((_a = obj.get_properties()) === null || _a === void 0 ? void 0 : _a.name) || obj.get_id();
90
+ }
91
+ //# sourceMappingURL=object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/components/object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAS,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE,CAAC,IAAoB,EAAE,EAAE,GAAG,CAAC;IAC1C,kBAAkB,EAAE,CAAC,WAAuC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpF,YAAY,EAAE,CAAC,OAAmC,EAAE,UAAkB,EAAE,EAAE,GAAG,CAAC;CAC/E,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;IAClE,OAAO,CAAC,CAAC,+CAA+C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAC5F,IAAI,EAAE;YACJ,MAAM,EAAE,GAAG,EAAE;gBACX,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACZ,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YACzC,CAAC;SACF;QACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE;QACpD,EAAE,EAAE;YACF,KAAK,EAAE,GAAG,EAAE;gBACV,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBACzC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,WAAW,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjD,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;SACF;KACF,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAe;IACzC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,WAAW,EAAE,CAAC,IAAoB,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1D,kBAAkB,EAAE,CAAC,WAAuC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpF,YAAY,EAAE,CAAC,OAAmC,EAAE,UAAkB,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAC/F,CAAC;AAEF,IAAI,KAAK,GAA2B,IAAI,CAAC;AAEzC,MAAM,UAAU,UAAU,CAAC,GAAoB;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,CAAC,CAAC,oBAAoB,EACpC;QACE,IAAI,EAAE;YACJ,MAAM,EAAE,GAAG,EAAE;gBACX,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACZ,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACpC,CAAC;SACF;KACF,EAAE;QACH,CAAC,CAAC,iBAAiB,EAAE;YACnB,CAAC,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;YACnH,CAAC,CAAC,kCAAkC,EAAE;gBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,6BAA6B,EAAE;gBAC/D,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;aACjE,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC;SAC5B,CAAC;QACF,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACpD,CAAC,CAAC,4BAA4B,EAAE;YAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;YAC5B,EAAE,EAAE;gBACF,KAAK,EAAE,GAAG,EAAE;oBACV,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;oBACxC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAClD,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,CAAC;aACF;SACF,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CACnB,CAAC;QACF,CAAC,CAAC,UAAU,EAAE;YACZ,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;YACzE,IAAI,EAAE;gBACJ,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChB,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAqB,CAAC,CAAC;gBACpD,CAAC;gBACD,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,KAAK,EAAE,CAAC;wBACV,KAAK,CAAC,OAAO,EAAE,CAAC;wBAChB,KAAK,GAAG,IAAI,CAAC;oBACf,CAAC;gBACH,CAAC;aACF;SACF,EAAE,oBAAoB,CAAC;KACzB,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAoB;;IAC5C,OAAO,CAAA,MAAA,GAAG,CAAC,cAAc,EAAE,0CAAE,IAAc,KAAI,GAAG,CAAC,MAAM,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { VNode } from "snabbdom";
2
+ import { coco } from "../coco";
3
+ export declare function CoCoOffcanvas(coco: coco.CoCo): VNode;
@@ -0,0 +1,16 @@
1
+ import { h } from "snabbdom";
2
+ import { OffcanvasBody, Offcanvas as OffcanvasComponent } from "@ratiosolver/flick";
3
+ import { ClassesList } from "./class";
4
+ import { ObjectsList } from "./object";
5
+ import { RulesList } from "./rule";
6
+ export function CoCoOffcanvas(coco) {
7
+ return OffcanvasComponent(OffcanvasBody([
8
+ coco.get_classes().size > 0 ? h('label', 'Classes') : null,
9
+ ClassesList(coco),
10
+ coco.get_objects().size > 0 ? h('label', 'Objects') : null,
11
+ ObjectsList(coco),
12
+ coco.get_rules().size > 0 ? h('label', 'Rules') : null,
13
+ RulesList(coco),
14
+ ]));
15
+ }
16
+ //# sourceMappingURL=offcanvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offcanvas.js","sourceRoot":"","sources":["../../src/components/offcanvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAS,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,MAAM,UAAU,aAAa,CAAC,IAAe;IACzC,OAAO,kBAAkB,CACrB,aAAa,CAAC;QACV,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1D,WAAW,CAAC,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1D,WAAW,CAAC,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;QACtD,SAAS,CAAC,IAAI,CAAC;KAClB,CAAC,CACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { VNode } from "snabbdom";
2
+ import { coco } from "../coco";
3
+ export declare function RulesList(coco: coco.CoCo): VNode;
4
+ export declare function CoCoRule(rule: coco.CoCoRule): VNode;
@@ -0,0 +1,22 @@
1
+ import { h } from "snabbdom";
2
+ import { flick, ListGroup, ListGroupItem } from "@ratiosolver/flick";
3
+ export function RulesList(coco) {
4
+ return ListGroup(Array.from(coco.get_rules().values().map(rule => ListGroupItem(rule.get_name(), () => {
5
+ flick.ctx.current_page = CoCoRule(rule);
6
+ flick.ctx.page_title = `Rule: ${rule.get_name()}`;
7
+ flick.redraw();
8
+ }, flick.ctx.page_title === `Rule: ${rule.get_name()}`))));
9
+ }
10
+ export function CoCoRule(rule) {
11
+ const content = h('div.container.mt-2', [
12
+ h('div.input-group', [
13
+ h('input.form-control', { attrs: { type: 'text', value: rule.get_name(), placeholder: 'Rule name', disabled: true } }),
14
+ h('button.btn.btn-outline-secondary', {
15
+ attrs: { type: 'button', title: 'Copy rule name to clipboard' },
16
+ on: { click: () => navigator.clipboard.writeText(rule.get_name()) }
17
+ }, h('i.fa-solid.fa-copy')),
18
+ ]),
19
+ ]);
20
+ return content;
21
+ }
22
+ //# sourceMappingURL=rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/components/rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAS,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,UAAU,SAAS,CAAC,IAAe;IACvC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE;QACpG,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClD,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAmB;IAC1C,MAAM,OAAO,GAAG,CAAC,CAAC,oBAAoB,EAAE;QACtC,CAAC,CAAC,iBAAiB,EAAE;YACnB,CAAC,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;YACtH,CAAC,CAAC,kCAAkC,EAAE;gBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,6BAA6B,EAAE;gBAC/D,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;aACpE,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC;SAC5B,CAAC;KACH,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}
Binary file