@sciflow/editor-start 0.0.1-beta2 → 0.0.3
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 +49 -2
- package/THIRD_PARTY_LICENSES +9 -0
- package/bin/extract-translations.mjs +54 -0
- package/dist/bundle/sciflow-editor.css +1 -1
- package/dist/bundle/sciflow-editor.js +9821 -16643
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/lib/citation-source-adapter.d.ts +1 -1
- package/dist/lib/citation-source-adapter.d.ts.map +1 -1
- package/dist/lib/citation-source-adapter.js +1 -1
- package/dist/lib/drag-preview.d.ts.map +1 -1
- package/dist/lib/drag-preview.js +9 -2
- package/dist/lib/editor-element.d.ts +14 -3
- package/dist/lib/editor-element.d.ts.map +1 -1
- package/dist/lib/editor-element.js +25 -1
- package/dist/lib/format-bar.d.ts +19 -2
- package/dist/lib/format-bar.d.ts.map +1 -1
- package/dist/lib/format-bar.js +303 -59
- package/dist/lib/ghost-cursor.d.ts +10 -0
- package/dist/lib/ghost-cursor.d.ts.map +1 -0
- package/dist/lib/ghost-cursor.js +59 -0
- package/dist/lib/icons-generated.d.ts +14 -0
- package/dist/lib/icons-generated.d.ts.map +1 -0
- package/dist/lib/icons-generated.js +60 -0
- package/dist/lib/outline.d.ts +8 -5
- package/dist/lib/outline.d.ts.map +1 -1
- package/dist/lib/outline.js +80 -35
- package/dist/lib/reference-list.d.ts +10 -2
- package/dist/lib/reference-list.d.ts.map +1 -1
- package/dist/lib/reference-list.js +45 -9
- package/dist/lib/selection-editor.d.ts +16 -0
- package/dist/lib/selection-editor.d.ts.map +1 -1
- package/dist/lib/selection-editor.js +291 -148
- package/dist/lib/selection-ui-renderer.d.ts +1 -0
- package/dist/lib/selection-ui-renderer.d.ts.map +1 -1
- package/dist/lib/selection-ui-renderer.js +3 -3
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +24 -17
- package/dist/demo/demo.js +0 -56
- package/dist/demo/index.html +0 -169
- package/dist/lib/citation-drop.d.ts +0 -25
- package/dist/lib/citation-drop.d.ts.map +0 -1
- package/dist/lib/citation-drop.js +0 -53
package/dist/lib/outline.d.ts
CHANGED
|
@@ -26,10 +26,6 @@ export type DocumentOutline = {
|
|
|
26
26
|
};
|
|
27
27
|
export type OutlineClickBehavior = 'none' | 'select' | 'scroll';
|
|
28
28
|
export declare function collectDocumentOutline(doc: SciFlowDocJSON | null | undefined, pmDoc?: ProsemirrorNode | null): DocumentOutline;
|
|
29
|
-
/**
|
|
30
|
-
* Helper used by the demo to expose outline data for debugging.
|
|
31
|
-
*/
|
|
32
|
-
export declare function logDocumentOutline(doc: SciFlowDocJSON | null | undefined, pmDoc?: ProsemirrorNode | null): DocumentOutline;
|
|
33
29
|
/**
|
|
34
30
|
* Web component that renders a document outline and stays in sync with a
|
|
35
31
|
* <sciflow-editor> instance. Hosts can either set the `for` attribute to point
|
|
@@ -59,11 +55,18 @@ export declare class SciFlowOutlineElement extends LitElement {
|
|
|
59
55
|
private headings;
|
|
60
56
|
private figures;
|
|
61
57
|
private activeHeadingKey;
|
|
58
|
+
/**
|
|
59
|
+
* When `true`, the Insert ref buttons are enabled. The component sets this
|
|
60
|
+
* automatically via `editor-selection-change` when an editor is bound. In
|
|
61
|
+
* doc-only mode (no bound editor), hosts can set this property directly.
|
|
62
|
+
*/
|
|
63
|
+
cursorActive: boolean;
|
|
62
64
|
private resolvedEditor;
|
|
63
65
|
private selectionListener?;
|
|
64
66
|
private changeListener?;
|
|
65
67
|
private readyListener?;
|
|
66
68
|
private lastSelection;
|
|
69
|
+
private localeListener?;
|
|
67
70
|
private themeUnsub?;
|
|
68
71
|
private themeStyleElements;
|
|
69
72
|
static styles: import("lit").CSSResult;
|
|
@@ -74,6 +77,7 @@ export declare class SciFlowOutlineElement extends LitElement {
|
|
|
74
77
|
private renderHeadingItem;
|
|
75
78
|
private renderFigureItem;
|
|
76
79
|
private handleCrossReferenceDragStart;
|
|
80
|
+
private handleInsertCrossReference;
|
|
77
81
|
private handleHeadingKeydown;
|
|
78
82
|
private handleHeadingClick;
|
|
79
83
|
private resolveEditorReference;
|
|
@@ -89,7 +93,6 @@ export declare class SciFlowOutlineElement extends LitElement {
|
|
|
89
93
|
private getHeadingSelectionPosition;
|
|
90
94
|
private extractDocFromEditor;
|
|
91
95
|
private normalizeClickBehavior;
|
|
92
|
-
private dispatchOutlineChange;
|
|
93
96
|
}
|
|
94
97
|
declare global {
|
|
95
98
|
interface HTMLElementTagNameMap {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../src/lib/outline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAsB,MAAM,KAAK,CAAC;AAGhE,OAAO,KAAK,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,
|
|
1
|
+
{"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../src/lib/outline.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/outline.js
CHANGED
|
@@ -2,7 +2,7 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { css, html, LitElement, nothing, unsafeCSS } from 'lit';
|
|
3
3
|
import { customElement, property, state } from 'lit/decorators.js';
|
|
4
4
|
import { classMap } from 'lit/directives/class-map.js';
|
|
5
|
-
import { SourceField, } from '@sciflow/editor-core';
|
|
5
|
+
import { SourceField, t, LOCALE_CHANGE_EVENT, } from '@sciflow/editor-core';
|
|
6
6
|
import { setTransparentDragImage } from './drag-preview.js';
|
|
7
7
|
import outlineStyles from './outline.css?inline';
|
|
8
8
|
import { applyThemeStylesToRoot, subscribeToSciFlowTheme } from './theme.js';
|
|
@@ -54,7 +54,7 @@ function figureLabel(node) {
|
|
|
54
54
|
if (typeof alt === 'string' && alt.trim())
|
|
55
55
|
return alt.trim();
|
|
56
56
|
const id = node.attrs?.id;
|
|
57
|
-
return typeof id === 'string' && id.trim() ? id : '
|
|
57
|
+
return typeof id === 'string' && id.trim() ? id : t('outline.figure');
|
|
58
58
|
}
|
|
59
59
|
function figureLabelFromJson(node) {
|
|
60
60
|
const alt = node?.attrs?.alt;
|
|
@@ -64,7 +64,7 @@ function figureLabelFromJson(node) {
|
|
|
64
64
|
for (const child of content) {
|
|
65
65
|
if (child?.type === 'caption' && Array.isArray(child.content)) {
|
|
66
66
|
const text = child.content
|
|
67
|
-
.map((c) => c?.content?.map((
|
|
67
|
+
.map((c) => c?.content?.map((n) => n?.text ?? '').join('') ?? '')
|
|
68
68
|
.join('')
|
|
69
69
|
.trim();
|
|
70
70
|
if (text)
|
|
@@ -72,7 +72,7 @@ function figureLabelFromJson(node) {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
const id = node?.attrs?.id;
|
|
75
|
-
return typeof id === 'string' && id.trim() ? id : '
|
|
75
|
+
return typeof id === 'string' && id.trim() ? id : t('outline.figure');
|
|
76
76
|
}
|
|
77
77
|
export function collectDocumentOutline(doc, pmDoc = null) {
|
|
78
78
|
const outline = {
|
|
@@ -147,15 +147,6 @@ export function collectDocumentOutline(doc, pmDoc = null) {
|
|
|
147
147
|
walk(doc);
|
|
148
148
|
return outline;
|
|
149
149
|
}
|
|
150
|
-
/**
|
|
151
|
-
* Helper used by the demo to expose outline data for debugging.
|
|
152
|
-
*/
|
|
153
|
-
export function logDocumentOutline(doc, pmDoc = null) {
|
|
154
|
-
const outline = collectDocumentOutline(doc, pmDoc);
|
|
155
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- instrumentation hook only
|
|
156
|
-
globalThis.__SCIFLOW_OUTLINE__ = outline;
|
|
157
|
-
return outline;
|
|
158
|
-
}
|
|
159
150
|
/**
|
|
160
151
|
* Web component that renders a document outline and stays in sync with a
|
|
161
152
|
* <sciflow-editor> instance. Hosts can either set the `for` attribute to point
|
|
@@ -175,7 +166,7 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
175
166
|
/** Optional document JSON source when not listening to an editor element. */
|
|
176
167
|
this.doc = null;
|
|
177
168
|
/** Placeholder text displayed when no headings are present. */
|
|
178
|
-
this.emptyText = '
|
|
169
|
+
this.emptyText = '';
|
|
179
170
|
/** Controls click behavior: disabled, set selection, or set selection + scroll. */
|
|
180
171
|
this.clickBehavior = 'scroll';
|
|
181
172
|
/** Filter the outline to specific heading levels (e.g., "1-3" or "1,2,3"). */
|
|
@@ -183,6 +174,12 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
183
174
|
this.headings = [];
|
|
184
175
|
this.figures = [];
|
|
185
176
|
this.activeHeadingKey = null;
|
|
177
|
+
/**
|
|
178
|
+
* When `true`, the Insert ref buttons are enabled. The component sets this
|
|
179
|
+
* automatically via `editor-selection-change` when an editor is bound. In
|
|
180
|
+
* doc-only mode (no bound editor), hosts can set this property directly.
|
|
181
|
+
*/
|
|
182
|
+
this.cursorActive = false;
|
|
186
183
|
this.resolvedEditor = null;
|
|
187
184
|
this.lastSelection = null;
|
|
188
185
|
this.themeStyleElements = [];
|
|
@@ -193,10 +190,16 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
193
190
|
this.themeUnsub = subscribeToSciFlowTheme((cssTexts) => {
|
|
194
191
|
this.themeStyleElements = applyThemeStylesToRoot(this.renderRoot, this.themeStyleElements, cssTexts);
|
|
195
192
|
});
|
|
193
|
+
this.localeListener = () => this.requestUpdate();
|
|
194
|
+
document.addEventListener(LOCALE_CHANGE_EVENT, this.localeListener);
|
|
196
195
|
this.resolveEditorReference();
|
|
197
196
|
}
|
|
198
197
|
disconnectedCallback() {
|
|
199
198
|
this.detachEditorListeners();
|
|
199
|
+
if (this.localeListener) {
|
|
200
|
+
document.removeEventListener(LOCALE_CHANGE_EVENT, this.localeListener);
|
|
201
|
+
this.localeListener = undefined;
|
|
202
|
+
}
|
|
200
203
|
this.themeUnsub?.();
|
|
201
204
|
this.themeUnsub = undefined;
|
|
202
205
|
super.disconnectedCallback();
|
|
@@ -221,7 +224,7 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
221
224
|
if (!hasHeadings && !hasFigures) {
|
|
222
225
|
return html `
|
|
223
226
|
<ol class="outline-list" part="list">
|
|
224
|
-
<li class="outline-placeholder" part="placeholder">${this.emptyText}</li>
|
|
227
|
+
<li class="outline-placeholder" part="placeholder">${this.emptyText || t('outline.noHeadings')}</li>
|
|
225
228
|
</ol>
|
|
226
229
|
`;
|
|
227
230
|
}
|
|
@@ -236,7 +239,7 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
236
239
|
const key = this.headingKey(heading, index);
|
|
237
240
|
const isActive = this.activeHeadingKey === key;
|
|
238
241
|
const clickable = this.clickBehavior !== 'none' && heading.position !== null && heading.position !== undefined;
|
|
239
|
-
const label = this.renderHeadingLabel?.(heading, index) ?? heading.text?.trim() ?? '
|
|
242
|
+
const label = this.renderHeadingLabel?.(heading, index) ?? heading.text?.trim() ?? t('outline.untitledSection');
|
|
240
243
|
const draggable = Boolean(heading.id?.trim());
|
|
241
244
|
return html `
|
|
242
245
|
<li
|
|
@@ -256,13 +259,30 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
256
259
|
@keydown=${clickable ? (event) => this.handleHeadingKeydown(event, heading, index) : undefined}
|
|
257
260
|
@dragstart=${draggable ? (e) => this.handleCrossReferenceDragStart(e, 'heading', heading.id, String(label ?? '')) : undefined}
|
|
258
261
|
>
|
|
262
|
+
${heading.level ? html `<span class="outline-level" part="level" aria-hidden="true">H${heading.level}</span>` : nothing}
|
|
259
263
|
<span class="outline-text" part="text">${label}</span>
|
|
260
264
|
<span class="outline-meta" part="meta">
|
|
261
|
-
${heading.level ? html `<span part="level">H${heading.level}</span>` : nothing}
|
|
262
265
|
${heading.id
|
|
263
|
-
? html `<code class="outline-id" part="id" aria-label=${
|
|
266
|
+
? html `<code class="outline-id" part="id" aria-label=${`${t('outline.headingIdAriaLabel')} ${heading.id}`}>${heading.id}</code>`
|
|
267
|
+
: nothing}
|
|
268
|
+
${draggable
|
|
269
|
+
? html `
|
|
270
|
+
<button
|
|
271
|
+
type="button"
|
|
272
|
+
class="outline-insert-btn"
|
|
273
|
+
title=${t('outline.insertCrossReferenceAriaLabel')}
|
|
274
|
+
aria-label=${t('outline.insertCrossReferenceAriaLabel')}
|
|
275
|
+
?disabled=${!this.cursorActive}
|
|
276
|
+
@mousedown=${(e) => e.preventDefault()}
|
|
277
|
+
@click=${(e) => {
|
|
278
|
+
e.stopPropagation();
|
|
279
|
+
if (this.cursorActive)
|
|
280
|
+
this.handleInsertCrossReference('heading', heading.id, String(label ?? ''));
|
|
281
|
+
}}
|
|
282
|
+
>${t('outline.insertCrossReference')}</button>
|
|
283
|
+
<span class="outline-drag" aria-hidden="true">drag</span>
|
|
284
|
+
`
|
|
264
285
|
: nothing}
|
|
265
|
-
${draggable ? html `<span class="outline-drag" aria-hidden="true">drag</span>` : nothing}
|
|
266
286
|
</span>
|
|
267
287
|
</li>
|
|
268
288
|
`;
|
|
@@ -270,7 +290,7 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
270
290
|
renderFigureItem(figure, index) {
|
|
271
291
|
const id = figure.id?.trim();
|
|
272
292
|
const draggable = Boolean(id);
|
|
273
|
-
const label = figure.text?.trim() || (id ??
|
|
293
|
+
const label = figure.text?.trim() || (id ?? `${t('outline.figure')} ${index + 1}`);
|
|
274
294
|
return html `
|
|
275
295
|
<li
|
|
276
296
|
class=${classMap({
|
|
@@ -280,16 +300,34 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
280
300
|
part="item"
|
|
281
301
|
data-outline-id=${figure.id ?? ''}
|
|
282
302
|
role="listitem"
|
|
283
|
-
tabindex="
|
|
303
|
+
tabindex="0"
|
|
284
304
|
draggable=${draggable ? 'true' : 'false'}
|
|
285
305
|
@dragstart=${draggable && id ? (e) => this.handleCrossReferenceDragStart(e, 'figure', id, label) : undefined}
|
|
286
306
|
>
|
|
307
|
+
<span class="outline-level outline-level--figure" aria-hidden="true">Fig</span>
|
|
287
308
|
<span class="outline-text" part="text">${label}</span>
|
|
288
309
|
<span class="outline-meta" part="meta">
|
|
289
310
|
${id
|
|
290
|
-
? html `<code class="outline-id" part="id" aria-label=${
|
|
311
|
+
? html `<code class="outline-id" part="id" aria-label=${`${t('outline.figureIdAriaLabel')} ${id}`}>${id}</code>`
|
|
312
|
+
: nothing}
|
|
313
|
+
${draggable && id
|
|
314
|
+
? html `
|
|
315
|
+
<button
|
|
316
|
+
type="button"
|
|
317
|
+
class="outline-insert-btn"
|
|
318
|
+
title=${t('outline.insertCrossReferenceAriaLabel')}
|
|
319
|
+
aria-label=${t('outline.insertCrossReferenceAriaLabel')}
|
|
320
|
+
?disabled=${!this.cursorActive}
|
|
321
|
+
@mousedown=${(e) => e.preventDefault()}
|
|
322
|
+
@click=${(e) => {
|
|
323
|
+
e.stopPropagation();
|
|
324
|
+
if (this.cursorActive)
|
|
325
|
+
this.handleInsertCrossReference('figure', id, label);
|
|
326
|
+
}}
|
|
327
|
+
>${t('outline.insertCrossReference')}</button>
|
|
328
|
+
<span class="outline-drag" aria-hidden="true">drag</span>
|
|
329
|
+
`
|
|
291
330
|
: nothing}
|
|
292
|
-
${draggable && id ? html `<span class="outline-drag" aria-hidden="true">drag</span>` : nothing}
|
|
293
331
|
</span>
|
|
294
332
|
</li>
|
|
295
333
|
`;
|
|
@@ -319,6 +357,19 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
319
357
|
transfer.setData('text/plain', text);
|
|
320
358
|
}
|
|
321
359
|
}
|
|
360
|
+
handleInsertCrossReference(refType, id, text) {
|
|
361
|
+
this.dispatchEvent(new CustomEvent('sciflow-insert-cross-reference', {
|
|
362
|
+
bubbles: true,
|
|
363
|
+
composed: true,
|
|
364
|
+
detail: {
|
|
365
|
+
type: 'cross-reference',
|
|
366
|
+
refType,
|
|
367
|
+
id,
|
|
368
|
+
href: `#${id}`,
|
|
369
|
+
text,
|
|
370
|
+
},
|
|
371
|
+
}));
|
|
372
|
+
}
|
|
322
373
|
handleHeadingKeydown(event, heading, index) {
|
|
323
374
|
if (event.key === 'Enter' || event.key === ' ') {
|
|
324
375
|
event.preventDefault();
|
|
@@ -364,7 +415,7 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
364
415
|
}
|
|
365
416
|
}
|
|
366
417
|
this.activeHeadingKey = this.headingKey(heading, index);
|
|
367
|
-
this.dispatchEvent(new CustomEvent('outline-navigate', {
|
|
418
|
+
this.dispatchEvent(new CustomEvent('sciflow-outline-navigate', {
|
|
368
419
|
detail: {
|
|
369
420
|
heading,
|
|
370
421
|
behavior: this.clickBehavior,
|
|
@@ -427,8 +478,10 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
427
478
|
this.selectionListener = (event) => {
|
|
428
479
|
const selection = event.detail;
|
|
429
480
|
this.updateActiveHeading(selection);
|
|
481
|
+
this.cursorActive = true;
|
|
430
482
|
};
|
|
431
483
|
this.readyListener = () => {
|
|
484
|
+
this.cursorActive = false;
|
|
432
485
|
const pmDoc = editor.editorView?.state?.doc ?? null;
|
|
433
486
|
this.updateHeadingsFromDoc(this.doc ?? this.extractDocFromEditor(editor), pmDoc);
|
|
434
487
|
if (pmDoc) {
|
|
@@ -468,7 +521,6 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
468
521
|
this.headings = filtered;
|
|
469
522
|
this.figures = outline.figures ?? [];
|
|
470
523
|
this.updateActiveHeading(this.lastSelection);
|
|
471
|
-
this.dispatchOutlineChange(filtered);
|
|
472
524
|
}
|
|
473
525
|
applyLevelFilter(headings) {
|
|
474
526
|
const levelSet = this.getLevelFilterSet();
|
|
@@ -550,16 +602,6 @@ let SciFlowOutlineElement = class SciFlowOutlineElement extends LitElement {
|
|
|
550
602
|
normalizeClickBehavior(value) {
|
|
551
603
|
return CLICK_BEHAVIORS.includes(value) ? value : 'scroll';
|
|
552
604
|
}
|
|
553
|
-
dispatchOutlineChange(headings) {
|
|
554
|
-
this.dispatchEvent(new CustomEvent('outline-change', {
|
|
555
|
-
detail: {
|
|
556
|
-
headings,
|
|
557
|
-
active: this.activeHeadingKey,
|
|
558
|
-
},
|
|
559
|
-
bubbles: true,
|
|
560
|
-
composed: true,
|
|
561
|
-
}));
|
|
562
|
-
}
|
|
563
605
|
};
|
|
564
606
|
__decorate([
|
|
565
607
|
property({ attribute: false })
|
|
@@ -596,6 +638,9 @@ __decorate([
|
|
|
596
638
|
__decorate([
|
|
597
639
|
state()
|
|
598
640
|
], SciFlowOutlineElement.prototype, "activeHeadingKey", void 0);
|
|
641
|
+
__decorate([
|
|
642
|
+
property({ type: Boolean, attribute: false })
|
|
643
|
+
], SciFlowOutlineElement.prototype, "cursorActive", void 0);
|
|
599
644
|
SciFlowOutlineElement = __decorate([
|
|
600
645
|
customElement('sciflow-outline')
|
|
601
646
|
], SciFlowOutlineElement);
|
|
@@ -14,8 +14,8 @@ type ReferenceAuthor = {
|
|
|
14
14
|
} | null;
|
|
15
15
|
export type ReferenceListEntry = {
|
|
16
16
|
id?: string | null;
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
rawReference?: string | null;
|
|
18
|
+
raw_reference?: string | null;
|
|
19
19
|
author?: ReferenceAuthor[] | null;
|
|
20
20
|
issued?: {
|
|
21
21
|
'date-parts'?: Array<Array<number | string | null> | null> | null;
|
|
@@ -31,8 +31,15 @@ export declare class SciFlowReferenceListElement extends LitElement {
|
|
|
31
31
|
references: ReferenceListEntry[] | null;
|
|
32
32
|
/** Reference IDs to highlight. */
|
|
33
33
|
highlightedIds: string[];
|
|
34
|
+
/**
|
|
35
|
+
* Whether the editor has an active cursor. Controls the enabled state of
|
|
36
|
+
* the "Cite" button. Set to true when the editor has focus/selection and
|
|
37
|
+
* false when it does not.
|
|
38
|
+
*/
|
|
39
|
+
cursorActive: boolean;
|
|
34
40
|
/** Text displayed when no references are available. */
|
|
35
41
|
emptyText: string;
|
|
42
|
+
private localeListener?;
|
|
36
43
|
private themeUnsub?;
|
|
37
44
|
private themeStyleElements;
|
|
38
45
|
static styles: import("lit").CSSResult;
|
|
@@ -47,6 +54,7 @@ export declare class SciFlowReferenceListElement extends LitElement {
|
|
|
47
54
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
48
55
|
private formatReference;
|
|
49
56
|
private formatAuthor;
|
|
57
|
+
private handleInsertCitation;
|
|
50
58
|
private handleDragStart;
|
|
51
59
|
}
|
|
52
60
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-list.d.ts","sourceRoot":"","sources":["../../src/lib/reference-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAa,UAAU,EAAsB,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"reference-list.d.ts","sourceRoot":"","sources":["../../src/lib/reference-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAa,UAAU,EAAsB,MAAM,KAAK,CAAC;AAQhE,KAAK,eAAe,GAAG;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GAAG,IAAI,CAAC;AAET,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACtF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,qBACa,2BAA4B,SAAQ,UAAU;IACzD,4BAA4B;IAE5B,UAAU,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAQ;IAE/C,kCAAkC;IAElC,cAAc,EAAE,MAAM,EAAE,CAAM;IAE9B;;;;OAIG;IAEH,YAAY,UAAS;IAErB,uDAAuD;IAEvD,SAAS,SAAM;IAEf,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,kBAAkB,CAA0B;IAEpD,OAAgB,MAAM,0BAAuC;IAEpD,iBAAiB,IAAI,IAAI;IAazB,oBAAoB,IAAI,IAAI;IAUrC;;;;OAIG;IACH,SAAS,CAAC,YAAY,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,IAAI;cAMjC,MAAM;IAuDzB,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,eAAe;CAiCxB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,wBAAwB,EAAE,2BAA2B,CAAC;KACvD;CACF"}
|
|
@@ -11,6 +11,7 @@ import { __decorate } from "tslib";
|
|
|
11
11
|
import { css, html, LitElement, nothing, unsafeCSS } from 'lit';
|
|
12
12
|
import { customElement, property } from 'lit/decorators.js';
|
|
13
13
|
import { classMap } from 'lit/directives/class-map.js';
|
|
14
|
+
import { t, LOCALE_CHANGE_EVENT } from '@sciflow/editor-core';
|
|
14
15
|
import { setTransparentDragImage } from './drag-preview.js';
|
|
15
16
|
import referenceListCss from './reference-list.css?inline';
|
|
16
17
|
import { applyThemeStylesToRoot, subscribeToSciFlowTheme } from './theme.js';
|
|
@@ -21,8 +22,14 @@ let SciFlowReferenceListElement = class SciFlowReferenceListElement extends LitE
|
|
|
21
22
|
this.references = null;
|
|
22
23
|
/** Reference IDs to highlight. */
|
|
23
24
|
this.highlightedIds = [];
|
|
25
|
+
/**
|
|
26
|
+
* Whether the editor has an active cursor. Controls the enabled state of
|
|
27
|
+
* the "Cite" button. Set to true when the editor has focus/selection and
|
|
28
|
+
* false when it does not.
|
|
29
|
+
*/
|
|
30
|
+
this.cursorActive = false;
|
|
24
31
|
/** Text displayed when no references are available. */
|
|
25
|
-
this.emptyText = '
|
|
32
|
+
this.emptyText = '';
|
|
26
33
|
this.themeStyleElements = [];
|
|
27
34
|
}
|
|
28
35
|
static { this.styles = css `${unsafeCSS(referenceListCss)}`; }
|
|
@@ -31,8 +38,14 @@ let SciFlowReferenceListElement = class SciFlowReferenceListElement extends LitE
|
|
|
31
38
|
this.themeUnsub = subscribeToSciFlowTheme((cssTexts) => {
|
|
32
39
|
this.themeStyleElements = applyThemeStylesToRoot(this.renderRoot, this.themeStyleElements, cssTexts);
|
|
33
40
|
});
|
|
41
|
+
this.localeListener = () => this.requestUpdate();
|
|
42
|
+
document.addEventListener(LOCALE_CHANGE_EVENT, this.localeListener);
|
|
34
43
|
}
|
|
35
44
|
disconnectedCallback() {
|
|
45
|
+
if (this.localeListener) {
|
|
46
|
+
document.removeEventListener(LOCALE_CHANGE_EVENT, this.localeListener);
|
|
47
|
+
this.localeListener = undefined;
|
|
48
|
+
}
|
|
36
49
|
this.themeUnsub?.();
|
|
37
50
|
this.themeUnsub = undefined;
|
|
38
51
|
super.disconnectedCallback();
|
|
@@ -53,7 +66,7 @@ let SciFlowReferenceListElement = class SciFlowReferenceListElement extends LitE
|
|
|
53
66
|
if (references.length === 0) {
|
|
54
67
|
return html `
|
|
55
68
|
<ol class="reference-list">
|
|
56
|
-
<li class="reference-item reference-empty">${this.emptyText}</li>
|
|
69
|
+
<li class="reference-item reference-empty">${this.emptyText || t('referenceList.noReferences')}</li>
|
|
57
70
|
</ol>
|
|
58
71
|
`;
|
|
59
72
|
}
|
|
@@ -75,8 +88,21 @@ let SciFlowReferenceListElement = class SciFlowReferenceListElement extends LitE
|
|
|
75
88
|
<span class="reference-text">${displayText || nothing}</span>
|
|
76
89
|
<span class="reference-meta">
|
|
77
90
|
${id
|
|
78
|
-
? html `<code class="reference-id" aria-label=${
|
|
91
|
+
? html `<code class="reference-id" aria-label=${`${t('referenceList.cslIdAriaLabel')} ${id}`}>${id}</code>`
|
|
79
92
|
: nothing}
|
|
93
|
+
<button
|
|
94
|
+
type="button"
|
|
95
|
+
class="reference-cite-btn"
|
|
96
|
+
title=${t('referenceList.insertCitation')}
|
|
97
|
+
aria-label=${t('referenceList.insertCitation')}
|
|
98
|
+
?disabled=${!this.cursorActive}
|
|
99
|
+
@mousedown=${(event) => event.preventDefault()}
|
|
100
|
+
@click=${(event) => {
|
|
101
|
+
event.stopPropagation();
|
|
102
|
+
if (this.cursorActive)
|
|
103
|
+
this.handleInsertCitation(reference);
|
|
104
|
+
}}
|
|
105
|
+
>${t('referenceList.insertCitation')}</button>
|
|
80
106
|
<span class="reference-drag" aria-hidden="true">drag</span>
|
|
81
107
|
</span>
|
|
82
108
|
</li>
|
|
@@ -87,13 +113,13 @@ let SciFlowReferenceListElement = class SciFlowReferenceListElement extends LitE
|
|
|
87
113
|
}
|
|
88
114
|
formatReference(reference) {
|
|
89
115
|
const id = typeof reference.id === 'string' ? reference.id : null;
|
|
90
|
-
const
|
|
91
|
-
? reference.
|
|
92
|
-
: typeof reference.
|
|
93
|
-
? reference.
|
|
116
|
+
const rawReference = typeof reference.rawReference === 'string'
|
|
117
|
+
? reference.rawReference
|
|
118
|
+
: typeof reference.raw_reference === 'string'
|
|
119
|
+
? reference.raw_reference
|
|
94
120
|
: null;
|
|
95
|
-
if (
|
|
96
|
-
return { id, displayText:
|
|
121
|
+
if (rawReference && rawReference.trim()) {
|
|
122
|
+
return { id, displayText: rawReference.trim() };
|
|
97
123
|
}
|
|
98
124
|
const authors = Array.isArray(reference.author) && reference.author.length > 0
|
|
99
125
|
? reference.author
|
|
@@ -121,6 +147,13 @@ let SciFlowReferenceListElement = class SciFlowReferenceListElement extends LitE
|
|
|
121
147
|
const name = `${family}${given}`.trim();
|
|
122
148
|
return name || null;
|
|
123
149
|
}
|
|
150
|
+
handleInsertCitation(reference) {
|
|
151
|
+
this.dispatchEvent(new CustomEvent('sciflow-insert-citation', {
|
|
152
|
+
bubbles: true,
|
|
153
|
+
composed: true,
|
|
154
|
+
detail: { reference },
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
124
157
|
handleDragStart(event, reference, displayText) {
|
|
125
158
|
const transfer = event.dataTransfer;
|
|
126
159
|
if (!transfer) {
|
|
@@ -153,6 +186,9 @@ __decorate([
|
|
|
153
186
|
__decorate([
|
|
154
187
|
property({ attribute: false })
|
|
155
188
|
], SciFlowReferenceListElement.prototype, "highlightedIds", void 0);
|
|
189
|
+
__decorate([
|
|
190
|
+
property({ type: Boolean, attribute: false })
|
|
191
|
+
], SciFlowReferenceListElement.prototype, "cursorActive", void 0);
|
|
156
192
|
__decorate([
|
|
157
193
|
property({ type: String, attribute: 'empty-text' })
|
|
158
194
|
], SciFlowReferenceListElement.prototype, "emptyText", void 0);
|
|
@@ -41,9 +41,12 @@ export declare class SciFlowSelectionEditorElement extends LitElement {
|
|
|
41
41
|
private citationDraft;
|
|
42
42
|
/** Draft values for cross-reference sidebar (display text + target href). */
|
|
43
43
|
private crossReferenceDraft;
|
|
44
|
+
/** Draft values for hyperlink (anchor mark) sidebar. */
|
|
45
|
+
private hyperlinkDraft;
|
|
44
46
|
private draftAttrs;
|
|
45
47
|
private draftDirty;
|
|
46
48
|
private pinSelection;
|
|
49
|
+
private showAllAttrs;
|
|
47
50
|
private resolvedEditor;
|
|
48
51
|
private selectionListener?;
|
|
49
52
|
private readyListener?;
|
|
@@ -56,6 +59,7 @@ export declare class SciFlowSelectionEditorElement extends LitElement {
|
|
|
56
59
|
private citationContentView;
|
|
57
60
|
private citationContentEditorPosition;
|
|
58
61
|
private selectionDebounce;
|
|
62
|
+
private localeListener?;
|
|
59
63
|
private outlineTargetOptionsCacheDoc;
|
|
60
64
|
private outlineTargetOptionsCache;
|
|
61
65
|
static styles: import("lit").CSSResult;
|
|
@@ -94,7 +98,12 @@ export declare class SciFlowSelectionEditorElement extends LitElement {
|
|
|
94
98
|
/**
|
|
95
99
|
* Render a single attribute field, decoding known encoded values for readability.
|
|
96
100
|
*/
|
|
101
|
+
private getNodeTypeLabel;
|
|
97
102
|
private renderAttributeField;
|
|
103
|
+
/**
|
|
104
|
+
* Convert a raw attribute name like 'text-align' to a human-readable label.
|
|
105
|
+
*/
|
|
106
|
+
private getAttributeLabel;
|
|
98
107
|
/**
|
|
99
108
|
* Decode known encoded attributes for more readable display/editing.
|
|
100
109
|
*/
|
|
@@ -134,6 +143,13 @@ export declare class SciFlowSelectionEditorElement extends LitElement {
|
|
|
134
143
|
private renderCrossReferenceSidebar;
|
|
135
144
|
private applyCrossReferenceDraft;
|
|
136
145
|
private handleCrossReferenceKeydown;
|
|
146
|
+
/**
|
|
147
|
+
* Render the hyperlink (anchor mark) sidebar: URL input, Apply and Remove buttons.
|
|
148
|
+
*/
|
|
149
|
+
private renderHyperlinkSidebar;
|
|
150
|
+
private applyHyperlinkDraft;
|
|
151
|
+
private removeHyperlink;
|
|
152
|
+
private handleHyperlinkKeydown;
|
|
137
153
|
private resetDraftAttrs;
|
|
138
154
|
private getEffectiveAttrs;
|
|
139
155
|
private setDraftAttr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-editor.d.ts","sourceRoot":"","sources":["../../src/lib/selection-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAa,UAAU,EAAa,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"selection-editor.d.ts","sourceRoot":"","sources":["../../src/lib/selection-editor.ts"],"names":[],"mappings":"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"}
|