@sinequa/atomic-angular 1.14.1 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/document-workspaces/i18n/de.json +229 -0
- package/document-workspaces/i18n/en.json +229 -0
- package/document-workspaces/i18n/fr.json +229 -0
- package/document-workspaces/i18n/ja.json +229 -0
- package/document-workspaces/index.d.ts +2094 -0
- package/elements/index.d.ts +112 -16
- package/fesm2022/sinequa-atomic-angular-document-workspaces.mjs +7979 -0
- package/fesm2022/sinequa-atomic-angular-document-workspaces.mjs.map +1 -0
- package/fesm2022/sinequa-atomic-angular-elements.mjs +4538 -2457
- package/fesm2022/sinequa-atomic-angular-elements.mjs.map +1 -1
- package/fesm2022/sinequa-atomic-angular-workspace-elements.mjs +172 -0
- package/fesm2022/sinequa-atomic-angular-workspace-elements.mjs.map +1 -0
- package/fesm2022/sinequa-atomic-angular.mjs +79 -97
- package/fesm2022/sinequa-atomic-angular.mjs.map +1 -1
- package/index.d.ts +14 -13
- package/package.json +37 -16
- package/workspace-elements/index.d.ts +37 -0
- package/workspace-elements/styles/lexiq-workspaces.css +10224 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { provideZonelessChangeDetection, makeEnvironmentProviders, provideEnvironmentInitializer, inject, Injector } from '@angular/core';
|
|
2
|
+
import { createCustomElement } from '@angular/elements';
|
|
3
|
+
import { createApplication } from '@angular/platform-browser';
|
|
4
|
+
import { WorkspacesShell, WorkspacePickerLauncher, WorkspaceMentionList } from '@sinequa/atomic-angular/document-workspaces';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The component of an element, for what `@angular/elements` does not expose: its methods.
|
|
8
|
+
* `NgElement` keeps the component behind its strategy; this is the one place that reaches for it.
|
|
9
|
+
*/
|
|
10
|
+
function instanceOf(element) {
|
|
11
|
+
const strategy = element.ngElementStrategy;
|
|
12
|
+
if (!strategy.componentRef)
|
|
13
|
+
throw new Error("The element is not connected yet: its component does not exist.");
|
|
14
|
+
return strategy.componentRef.instance;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Re-dispatches an output of the component under the name the page knows it by — the
|
|
18
|
+
* events of this package have always been `lexiq-workspaces:…` or plain names — and so
|
|
19
|
+
* that it crosses a shadow boundary: `@angular/elements` dispatches with neither `bubbles`
|
|
20
|
+
* nor `composed`.
|
|
21
|
+
*/
|
|
22
|
+
function bridgeEvents(element, events) {
|
|
23
|
+
// What this sends itself must not be sent again: an output that keeps its name would feed on its own events.
|
|
24
|
+
const sent = new WeakSet();
|
|
25
|
+
for (const [output, { name, detail }] of Object.entries(events)) {
|
|
26
|
+
element.addEventListener(output, event => {
|
|
27
|
+
if (sent.has(event))
|
|
28
|
+
return;
|
|
29
|
+
// Same name: the page hears the bubbling copy, not the original as well.
|
|
30
|
+
if (name === output)
|
|
31
|
+
event.stopImmediatePropagation();
|
|
32
|
+
const bridged = new CustomEvent(name, {
|
|
33
|
+
detail: detail ? detail(event.detail) : event.detail,
|
|
34
|
+
bubbles: true,
|
|
35
|
+
composed: true
|
|
36
|
+
});
|
|
37
|
+
sent.add(bridged);
|
|
38
|
+
element.dispatchEvent(bridged);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function define(tagName, component, injector, extend) {
|
|
43
|
+
if (typeof customElements === "undefined" || customElements.get(tagName))
|
|
44
|
+
return;
|
|
45
|
+
customElements.define(tagName, extend(createCustomElement(component, { injector })));
|
|
46
|
+
}
|
|
47
|
+
const EVENT = (name) => ({ name });
|
|
48
|
+
function defineLexiqWorkspaces(injector, tagName = "lexiq-workspaces") {
|
|
49
|
+
define(tagName, WorkspacesShell, injector, Base => class extends Base {
|
|
50
|
+
constructor() {
|
|
51
|
+
super();
|
|
52
|
+
bridgeEvents(this, {
|
|
53
|
+
workspaceCreated: { name: "lexiq-workspaces:workspace-created", detail: workspace => ({ workspace }) },
|
|
54
|
+
workspaceUpdated: { name: "lexiq-workspaces:workspace-updated", detail: workspace => ({ workspace }) },
|
|
55
|
+
askFollowUp: { name: "lexiq-workspaces:ask-followup" }
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** Shows the list of workspaces. */
|
|
59
|
+
showList() {
|
|
60
|
+
this.workspaceId = null;
|
|
61
|
+
}
|
|
62
|
+
/** Shows a workspace and its documents. */
|
|
63
|
+
showDetail(id) {
|
|
64
|
+
this.workspaceId = id;
|
|
65
|
+
}
|
|
66
|
+
/** Opens the "Add workspace" dialog, then the workspace it makes. */
|
|
67
|
+
addWorkspace() {
|
|
68
|
+
void instanceOf(this).addWorkspace();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
function defineLexiqWorkspacePicker(injector, tagName = "lexiq-workspace-picker") {
|
|
73
|
+
define(tagName, WorkspacePickerLauncher, injector, Base => class extends Base {
|
|
74
|
+
constructor() {
|
|
75
|
+
super();
|
|
76
|
+
bridgeEvents(this, { saved: { name: "save", detail: name => ({ name }) }, moved: EVENT("moved") });
|
|
77
|
+
}
|
|
78
|
+
openSaveCard(anchor, options = {}) {
|
|
79
|
+
void instanceOf(this).openSaveCard(anchor, options);
|
|
80
|
+
}
|
|
81
|
+
openMoveMenu(anchor, documentIds, options) {
|
|
82
|
+
void instanceOf(this).openMoveMenu(anchor, documentIds, options);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function defineLexiqWorkspaceMentionList(injector, tagName = "lexiq-workspace-mention-list") {
|
|
87
|
+
define(tagName, WorkspaceMentionList, injector, Base => class extends Base {
|
|
88
|
+
constructor() {
|
|
89
|
+
super();
|
|
90
|
+
bridgeEvents(this, { selectionChanged: EVENT("selection-changed") });
|
|
91
|
+
}
|
|
92
|
+
/** The rows, for a host that draws its own menu. */
|
|
93
|
+
get items() {
|
|
94
|
+
return instanceOf(this).items();
|
|
95
|
+
}
|
|
96
|
+
/** Ticks a workspace from outside. */
|
|
97
|
+
selectById(id) {
|
|
98
|
+
instanceOf(this).select(id);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function registerLexiqWorkspacesElements(injector) {
|
|
103
|
+
defineLexiqWorkspaces(injector);
|
|
104
|
+
defineLexiqWorkspacePicker(injector);
|
|
105
|
+
defineLexiqWorkspaceMentionList(injector);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* For a page that is not an Angular application: starts one — zoneless, with the
|
|
109
|
+
* providers the page gives it (Transloco and the `@sinequa/atomic` configuration are the page's
|
|
110
|
+
* to provide) — and registers the three elements on it.
|
|
111
|
+
*
|
|
112
|
+
* ```ts
|
|
113
|
+
* await bootstrapLexiqWorkspacesElements({ providers: [provideTransloco({ … })] });
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
async function bootstrapLexiqWorkspacesElements(config = {}) {
|
|
117
|
+
const app = await createApplication({ providers: [provideZonelessChangeDetection(), ...(config.providers ?? [])] });
|
|
118
|
+
registerLexiqWorkspacesElements(app.injector);
|
|
119
|
+
return app;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Registers the `lexiq-workspaces`, `lexiq-workspace-picker` and
|
|
124
|
+
* `lexiq-workspace-mention-list` custom elements when the application starts. Add it to
|
|
125
|
+
* the `providers` of the app (or of a route):
|
|
126
|
+
*
|
|
127
|
+
* ```ts
|
|
128
|
+
* export const appConfig: ApplicationConfig = {
|
|
129
|
+
* providers: [provideTransloco({ … }), provideLexiqWorkspacesElements()]
|
|
130
|
+
* };
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* The elements render through this application's injector, so they share its Transloco
|
|
134
|
+
* configuration, its `@sinequa/atomic` setup and its `WorkspacesStore` with the rest of the app.
|
|
135
|
+
* A component that uses the tags in a template needs `schemas: [CUSTOM_ELEMENTS_SCHEMA]` — or,
|
|
136
|
+
* in Angular, the components themselves (`WorkspacesShell`…).
|
|
137
|
+
*/
|
|
138
|
+
function provideLexiqWorkspacesElements() {
|
|
139
|
+
return makeEnvironmentProviders([provideEnvironmentInitializer(() => registerLexiqWorkspacesElements(inject(Injector)))]);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Public API of `@sinequa/atomic-angular/workspace-elements` — the workspaces view as custom
|
|
144
|
+
* elements, for pages that are not Angular. They are thin wrappers (`@angular/elements`)
|
|
145
|
+
* around the components of `@sinequa/atomic-angular/document-workspaces`: an Angular
|
|
146
|
+
* application should use those components directly. `@sinequa/atomic-angular/elements` is the native
|
|
147
|
+
* (Shadow DOM) implementation they are meant to replace; both can be registered side by side.
|
|
148
|
+
*
|
|
149
|
+
* Importing this entry registers nothing. Register explicitly:
|
|
150
|
+
* - Angular: providers: [provideLexiqWorkspacesElements()]
|
|
151
|
+
* - Plain JS: await bootstrapLexiqWorkspacesElements({ providers: [ … ] });
|
|
152
|
+
* - One only: defineLexiqWorkspacePicker(injector);
|
|
153
|
+
*
|
|
154
|
+
* Tags: `<lexiq-workspaces>` (attributes `upload-endpoint`, `query-name`, `theme`,
|
|
155
|
+
* `workspace-id`; methods `showList()`, `showDetail(id)`, `addWorkspace()`; events
|
|
156
|
+
* `lexiq-workspaces:workspace-created`, `:workspace-updated`, `:ask-followup`),
|
|
157
|
+
* `<lexiq-workspace-picker>` (methods `openSaveCard(anchor, { documents })`,
|
|
158
|
+
* `openMoveMenu(anchor, documentIds, { fromWorkspaceId })`; events `save`, `moved`) and
|
|
159
|
+
* `<lexiq-workspace-mention-list>` (method `selectById(id)`, property `items`, event
|
|
160
|
+
* `selection-changed`).
|
|
161
|
+
*
|
|
162
|
+
* The elements render in the page's DOM, not in a shadow root: the page provides their
|
|
163
|
+
* styles (the Tailwind build of the page scans the library, and the galactik tokens are
|
|
164
|
+
* defined by its theme), exactly as for the Angular components.
|
|
165
|
+
*/
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Generated bundle index. Do not edit.
|
|
169
|
+
*/
|
|
170
|
+
|
|
171
|
+
export { bootstrapLexiqWorkspacesElements, defineLexiqWorkspaceMentionList, defineLexiqWorkspacePicker, defineLexiqWorkspaces, provideLexiqWorkspacesElements, registerLexiqWorkspacesElements };
|
|
172
|
+
//# sourceMappingURL=sinequa-atomic-angular-workspace-elements.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sinequa-atomic-angular-workspace-elements.mjs","sources":["../../../projects/atomic-angular/workspace-elements/register.ts","../../../projects/atomic-angular/workspace-elements/providers.ts","../../../projects/atomic-angular/workspace-elements/public-api.ts","../../../projects/atomic-angular/workspace-elements/sinequa-atomic-angular-workspace-elements.ts"],"sourcesContent":["import { ApplicationConfig, ApplicationRef, Injector, provideZonelessChangeDetection, Type } from \"@angular/core\";\nimport { createCustomElement } from \"@angular/elements\";\nimport { createApplication } from \"@angular/platform-browser\";\nimport { WorkspaceMentionList, WorkspacePickerLauncher, WorkspacesShell } from \"@sinequa/atomic-angular/document-workspaces\";\n\n// Registration is an explicit act, never a side effect of importing this entry:\n// - defineX(injector) → one element (tree-shakable)\n// - registerLexiqWorkspacesElements(injector) → the three\n// - provideLexiqWorkspacesElements() → Angular providers (see providers.ts)\n// - bootstrapLexiqWorkspacesElements() → a page with no Angular of its own\n//\n// Each define is idempotent (customElements.get guard) and SSR-safe (a no-op where\n// `customElements` does not exist).\n\n/** What `createCustomElement` gives: an element that is its component's inputs and outputs, and nothing else. */\ntype NgElementClass = new () => HTMLElement;\n\n/** What an element does beyond that: methods, and the names its events go by. */\ntype Extension = (base: NgElementClass) => CustomElementConstructor;\n\n/**\n * The component of an element, for what `@angular/elements` does not expose: its methods.\n * `NgElement` keeps the component behind its strategy; this is the one place that reaches for it.\n */\nexport function instanceOf<T>(element: HTMLElement): T {\n const strategy = (element as unknown as { ngElementStrategy: { componentRef?: { instance: T } } }).ngElementStrategy;\n if (!strategy.componentRef) throw new Error(\"The element is not connected yet: its component does not exist.\");\n return strategy.componentRef.instance;\n}\n\n/**\n * Re-dispatches an output of the component under the name the page knows it by — the\n * events of this package have always been `lexiq-workspaces:…` or plain names — and so\n * that it crosses a shadow boundary: `@angular/elements` dispatches with neither `bubbles`\n * nor `composed`.\n */\nexport function bridgeEvents(element: HTMLElement, events: Record<string, { name: string; detail?: (payload: unknown) => unknown }>): void {\n // What this sends itself must not be sent again: an output that keeps its name would feed on its own events.\n const sent = new WeakSet<Event>();\n for (const [output, { name, detail }] of Object.entries(events)) {\n element.addEventListener(output, event => {\n if (sent.has(event)) return;\n // Same name: the page hears the bubbling copy, not the original as well.\n if (name === output) event.stopImmediatePropagation();\n const bridged = new CustomEvent(name, {\n detail: detail ? detail((event as CustomEvent).detail) : (event as CustomEvent).detail,\n bubbles: true,\n composed: true\n });\n sent.add(bridged);\n element.dispatchEvent(bridged);\n });\n }\n}\n\nfunction define(tagName: string, component: Type<unknown>, injector: Injector, extend: Extension): void {\n if (typeof customElements === \"undefined\" || customElements.get(tagName)) return;\n customElements.define(tagName, extend(createCustomElement(component, { injector }) as unknown as NgElementClass));\n}\n\nconst EVENT = (name: string) => ({ name });\n\nexport function defineLexiqWorkspaces(injector: Injector, tagName = \"lexiq-workspaces\"): void {\n define(\n tagName,\n WorkspacesShell,\n injector,\n Base =>\n class extends Base {\n constructor() {\n super();\n bridgeEvents(this, {\n workspaceCreated: { name: \"lexiq-workspaces:workspace-created\", detail: workspace => ({ workspace }) },\n workspaceUpdated: { name: \"lexiq-workspaces:workspace-updated\", detail: workspace => ({ workspace }) },\n askFollowUp: { name: \"lexiq-workspaces:ask-followup\" }\n });\n }\n\n /** Shows the list of workspaces. */\n showList(): void {\n (this as unknown as { workspaceId: string | null }).workspaceId = null;\n }\n\n /** Shows a workspace and its documents. */\n showDetail(id: string): void {\n (this as unknown as { workspaceId: string | null }).workspaceId = id;\n }\n\n /** Opens the \"Add workspace\" dialog, then the workspace it makes. */\n addWorkspace(): void {\n void instanceOf<WorkspacesShell>(this).addWorkspace();\n }\n }\n );\n}\n\nexport function defineLexiqWorkspacePicker(injector: Injector, tagName = \"lexiq-workspace-picker\"): void {\n define(\n tagName,\n WorkspacePickerLauncher,\n injector,\n Base =>\n class extends Base {\n constructor() {\n super();\n bridgeEvents(this, { saved: { name: \"save\", detail: name => ({ name }) }, moved: EVENT(\"moved\") });\n }\n\n openSaveCard(anchor: HTMLElement, options: Parameters<WorkspacePickerLauncher[\"openSaveCard\"]>[1] = {}): void {\n void instanceOf<WorkspacePickerLauncher>(this).openSaveCard(anchor, options);\n }\n\n openMoveMenu(anchor: HTMLElement, documentIds: readonly string[], options: { fromWorkspaceId: string }): void {\n void instanceOf<WorkspacePickerLauncher>(this).openMoveMenu(anchor, documentIds, options);\n }\n }\n );\n}\n\nexport function defineLexiqWorkspaceMentionList(injector: Injector, tagName = \"lexiq-workspace-mention-list\"): void {\n define(\n tagName,\n WorkspaceMentionList,\n injector,\n Base =>\n class extends Base {\n constructor() {\n super();\n bridgeEvents(this, { selectionChanged: EVENT(\"selection-changed\") });\n }\n\n /** The rows, for a host that draws its own menu. */\n get items() {\n return instanceOf<WorkspaceMentionList>(this).items();\n }\n\n /** Ticks a workspace from outside. */\n selectById(id: string): void {\n instanceOf<WorkspaceMentionList>(this).select(id);\n }\n }\n );\n}\n\nexport function registerLexiqWorkspacesElements(injector: Injector): void {\n defineLexiqWorkspaces(injector);\n defineLexiqWorkspacePicker(injector);\n defineLexiqWorkspaceMentionList(injector);\n}\n\n/**\n * For a page that is not an Angular application: starts one — zoneless, with the\n * providers the page gives it (Transloco and the `@sinequa/atomic` configuration are the page's\n * to provide) — and registers the three elements on it.\n *\n * ```ts\n * await bootstrapLexiqWorkspacesElements({ providers: [provideTransloco({ … })] });\n * ```\n */\nexport async function bootstrapLexiqWorkspacesElements(config: Partial<ApplicationConfig> = {}): Promise<ApplicationRef> {\n const app = await createApplication({ providers: [provideZonelessChangeDetection(), ...(config.providers ?? [])] });\n registerLexiqWorkspacesElements(app.injector);\n return app;\n}\n","import { EnvironmentProviders, inject, Injector, makeEnvironmentProviders, provideEnvironmentInitializer } from \"@angular/core\";\nimport { registerLexiqWorkspacesElements } from \"./register\";\n\n/**\n * Registers the `lexiq-workspaces`, `lexiq-workspace-picker` and\n * `lexiq-workspace-mention-list` custom elements when the application starts. Add it to\n * the `providers` of the app (or of a route):\n *\n * ```ts\n * export const appConfig: ApplicationConfig = {\n * providers: [provideTransloco({ … }), provideLexiqWorkspacesElements()]\n * };\n * ```\n *\n * The elements render through this application's injector, so they share its Transloco\n * configuration, its `@sinequa/atomic` setup and its `WorkspacesStore` with the rest of the app.\n * A component that uses the tags in a template needs `schemas: [CUSTOM_ELEMENTS_SCHEMA]` — or,\n * in Angular, the components themselves (`WorkspacesShell`…).\n */\nexport function provideLexiqWorkspacesElements(): EnvironmentProviders {\n return makeEnvironmentProviders([provideEnvironmentInitializer(() => registerLexiqWorkspacesElements(inject(Injector)))]);\n}\n","/**\n * Public API of `@sinequa/atomic-angular/workspace-elements` — the workspaces view as custom\n * elements, for pages that are not Angular. They are thin wrappers (`@angular/elements`)\n * around the components of `@sinequa/atomic-angular/document-workspaces`: an Angular\n * application should use those components directly. `@sinequa/atomic-angular/elements` is the native\n * (Shadow DOM) implementation they are meant to replace; both can be registered side by side.\n *\n * Importing this entry registers nothing. Register explicitly:\n * - Angular: providers: [provideLexiqWorkspacesElements()]\n * - Plain JS: await bootstrapLexiqWorkspacesElements({ providers: [ … ] });\n * - One only: defineLexiqWorkspacePicker(injector);\n *\n * Tags: `<lexiq-workspaces>` (attributes `upload-endpoint`, `query-name`, `theme`,\n * `workspace-id`; methods `showList()`, `showDetail(id)`, `addWorkspace()`; events\n * `lexiq-workspaces:workspace-created`, `:workspace-updated`, `:ask-followup`),\n * `<lexiq-workspace-picker>` (methods `openSaveCard(anchor, { documents })`,\n * `openMoveMenu(anchor, documentIds, { fromWorkspaceId })`; events `save`, `moved`) and\n * `<lexiq-workspace-mention-list>` (method `selectById(id)`, property `items`, event\n * `selection-changed`).\n *\n * The elements render in the page's DOM, not in a shadow root: the page provides their\n * styles (the Tailwind build of the page scans the library, and the galactik tokens are\n * defined by its theme), exactly as for the Angular components.\n */\n\nexport {\n bootstrapLexiqWorkspacesElements,\n defineLexiqWorkspaceMentionList,\n defineLexiqWorkspacePicker,\n defineLexiqWorkspaces,\n registerLexiqWorkspacesElements\n} from \"./register\";\nexport { provideLexiqWorkspacesElements } from \"./providers\";\n\nexport type { AskFollowUp, MentionSelection, Workspace, WorkspaceDocument } from \"@sinequa/atomic-angular/document-workspaces\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|