@alpaca-editor/core 1.0.3780 → 1.0.3787
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/components.json +21 -0
- package/dev.css +3 -0
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.js +32 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/editor/Titlebar.js +1 -1
- package/dist/editor/Titlebar.js.map +1 -1
- package/dist/editor/client/EditorClient.js +7 -6
- package/dist/editor/client/EditorClient.js.map +1 -1
- package/dist/editor/menubar/ActionsMenu.js +1 -1
- package/dist/editor/page-editor-chrome/CommentHighlighting.js +2 -2
- package/dist/editor/page-editor-chrome/CommentHighlighting.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.js +3 -3
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/reviews/Comment.js +18 -14
- package/dist/editor/reviews/Comment.js.map +1 -1
- package/dist/editor/sidebar/Insert.js +2 -2
- package/dist/editor/sidebar/Insert.js.map +1 -1
- package/dist/editor/sidebar/MainContentTree.js +2 -0
- package/dist/editor/sidebar/MainContentTree.js.map +1 -1
- package/dist/editor/sidebar/Translations.js +4 -4
- package/dist/editor/sidebar/Translations.js.map +1 -1
- package/dist/editor/sidebar/ViewSelector.js +1 -1
- package/dist/editor/ui/SimpleTable.js +2 -2
- package/dist/editor/ui/SimpleTable.js.map +1 -1
- package/dist/editor/utils.js +7 -6
- package/dist/editor/utils.js.map +1 -1
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/styles.css +303 -11
- package/package.json +9 -3
- package/src/components/ui/button.tsx +62 -0
- package/src/editor/Titlebar.tsx +1 -1
- package/src/editor/client/EditorClient.tsx +7 -6
- package/src/editor/menubar/ActionsMenu.tsx +1 -1
- package/src/editor/page-editor-chrome/CommentHighlighting.tsx +8 -9
- package/src/editor/page-viewer/MiniMap.tsx +11 -11
- package/src/editor/reviews/Comment.tsx +38 -33
- package/src/editor/sidebar/Insert.tsx +2 -2
- package/src/editor/sidebar/MainContentTree.tsx +1 -0
- package/src/editor/sidebar/Translations.tsx +12 -12
- package/src/editor/sidebar/ViewSelector.tsx +1 -1
- package/src/editor/ui/SimpleTable.tsx +3 -6
- package/src/editor/utils.ts +32 -29
- package/src/lib/utils.ts +6 -0
- package/styles.css +124 -0
- package/tsconfig.build.json +3 -0
- package/tsconfig.json +3 -0
package/src/editor/utils.ts
CHANGED
|
@@ -18,7 +18,7 @@ export function useEventListenerExt(
|
|
|
18
18
|
eventName: string,
|
|
19
19
|
handler: any,
|
|
20
20
|
element: HTMLElement | Window,
|
|
21
|
-
capture = false
|
|
21
|
+
capture = false,
|
|
22
22
|
) {
|
|
23
23
|
// Create a ref that stores handler
|
|
24
24
|
const savedHandler = useRef<any>(undefined);
|
|
@@ -49,20 +49,20 @@ export function useEventListenerExt(
|
|
|
49
49
|
element.removeEventListener(eventName, eventListener);
|
|
50
50
|
};
|
|
51
51
|
},
|
|
52
|
-
[eventName, element] // Re-run if eventName or element changes
|
|
52
|
+
[eventName, element], // Re-run if eventName or element changes
|
|
53
53
|
);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
export const useLocalStorage = <T>(
|
|
57
57
|
storageKey: string,
|
|
58
|
-
fallbackState: T
|
|
58
|
+
fallbackState: T,
|
|
59
59
|
): [T, React.Dispatch<React.SetStateAction<T>>] => {
|
|
60
60
|
const [value, setValue] = useState<T>(
|
|
61
61
|
JSON.parse(
|
|
62
62
|
typeof window !== "undefined"
|
|
63
|
-
? localStorage.getItem(storageKey) ?? JSON.stringify(fallbackState)
|
|
64
|
-
: JSON.stringify(fallbackState)
|
|
65
|
-
)
|
|
63
|
+
? (localStorage.getItem(storageKey) ?? JSON.stringify(fallbackState))
|
|
64
|
+
: JSON.stringify(fallbackState),
|
|
65
|
+
),
|
|
66
66
|
);
|
|
67
67
|
|
|
68
68
|
useEffect(() => {
|
|
@@ -75,7 +75,7 @@ export const useLocalStorage = <T>(
|
|
|
75
75
|
|
|
76
76
|
export function isFieldActionExecuting(
|
|
77
77
|
field: Field,
|
|
78
|
-
editContext: EditContextType
|
|
78
|
+
editContext: EditContextType,
|
|
79
79
|
) {
|
|
80
80
|
const fieldItem = field.descriptor.item;
|
|
81
81
|
|
|
@@ -88,14 +88,14 @@ export function isFieldActionExecuting(
|
|
|
88
88
|
x.field.fieldId == field.id &&
|
|
89
89
|
x.field.item?.id == fieldItem.id &&
|
|
90
90
|
x.field.item?.language == fieldItem.language &&
|
|
91
|
-
x.field.item?.version == fieldItem.version
|
|
91
|
+
x.field.item?.version == fieldItem.version,
|
|
92
92
|
);
|
|
93
93
|
|
|
94
94
|
return action?.state == "running";
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
export function getItemDescriptor(
|
|
98
|
-
item: FullItem | ItemDescriptor
|
|
98
|
+
item: FullItem | ItemDescriptor,
|
|
99
99
|
): ItemDescriptor {
|
|
100
100
|
if (!item) throw new Error("Item is null");
|
|
101
101
|
|
|
@@ -118,7 +118,7 @@ export function getAbsoluteIconUrl(url: string) {
|
|
|
118
118
|
|
|
119
119
|
export function findParentWithAttribute(
|
|
120
120
|
element: HTMLElement,
|
|
121
|
-
attr: string
|
|
121
|
+
attr: string,
|
|
122
122
|
): HTMLElement | null {
|
|
123
123
|
while (element && element !== document.documentElement) {
|
|
124
124
|
if (element.hasAttribute(attr)) {
|
|
@@ -207,7 +207,7 @@ export function parsePlaceholderKey(key: string) {
|
|
|
207
207
|
|
|
208
208
|
export function hasFieldLock(
|
|
209
209
|
field: FieldDescriptor,
|
|
210
|
-
editContext: EditContextType
|
|
210
|
+
editContext: EditContextType,
|
|
211
211
|
) {
|
|
212
212
|
if (!editContext.lockedField) {
|
|
213
213
|
return false;
|
|
@@ -222,7 +222,7 @@ export function hasFieldLock(
|
|
|
222
222
|
|
|
223
223
|
export function getSessionWithFieldLock(
|
|
224
224
|
field: FieldDescriptor,
|
|
225
|
-
editContext: EditContextType
|
|
225
|
+
editContext: EditContextType,
|
|
226
226
|
) {
|
|
227
227
|
return editContext.activeSessions.find(
|
|
228
228
|
(s) =>
|
|
@@ -230,12 +230,12 @@ export function getSessionWithFieldLock(
|
|
|
230
230
|
s.fieldLock?.fieldId === field.fieldId &&
|
|
231
231
|
s.fieldLock?.item.id === field.item.id &&
|
|
232
232
|
s.fieldLock?.item.language === field.item.language &&
|
|
233
|
-
s.fieldLock?.item.version === field.item.version
|
|
233
|
+
s.fieldLock?.item.version === field.item.version,
|
|
234
234
|
);
|
|
235
235
|
}
|
|
236
236
|
|
|
237
237
|
export function getFieldDescriptorFromElement(
|
|
238
|
-
element: Element
|
|
238
|
+
element: Element,
|
|
239
239
|
): FieldDescriptor {
|
|
240
240
|
return {
|
|
241
241
|
item: {
|
|
@@ -263,20 +263,20 @@ export function findNearestComponentId(startElement: Element) {
|
|
|
263
263
|
|
|
264
264
|
export function findFieldElement(
|
|
265
265
|
iframe: HTMLIFrameElement,
|
|
266
|
-
fieldDescriptor: FieldDescriptor
|
|
266
|
+
fieldDescriptor: FieldDescriptor,
|
|
267
267
|
) {
|
|
268
268
|
if (!iframe.contentWindow?.document.body) return undefined;
|
|
269
269
|
|
|
270
270
|
const fieldElement = iframe.contentWindow?.document.body.querySelector(
|
|
271
271
|
"[data-itemid='" +
|
|
272
|
-
|
|
272
|
+
fieldDescriptor.item.id +
|
|
273
273
|
"'][data-language='" +
|
|
274
274
|
fieldDescriptor.item.language +
|
|
275
275
|
"'][data-version='" +
|
|
276
276
|
fieldDescriptor.item.version +
|
|
277
277
|
"'][data-fieldid='" +
|
|
278
278
|
fieldDescriptor.fieldId +
|
|
279
|
-
"']"
|
|
279
|
+
"']",
|
|
280
280
|
);
|
|
281
281
|
|
|
282
282
|
return fieldElement;
|
|
@@ -285,16 +285,16 @@ export function findFieldElement(
|
|
|
285
285
|
export function findComponentRect(
|
|
286
286
|
iframe: HTMLIFrameElement,
|
|
287
287
|
componentId: string,
|
|
288
|
-
takeScrollPositionIntoAccount = false
|
|
288
|
+
takeScrollPositionIntoAccount = false,
|
|
289
289
|
) {
|
|
290
290
|
if (!iframe.contentWindow?.document.body) return undefined;
|
|
291
291
|
|
|
292
292
|
const componentStart = iframe.contentWindow?.document.body.querySelector(
|
|
293
|
-
"[data-component-start='" + componentId + "']"
|
|
293
|
+
"[data-component-start='" + componentId + "']",
|
|
294
294
|
);
|
|
295
295
|
|
|
296
296
|
const componentEnd = iframe?.contentWindow?.document.body.querySelector(
|
|
297
|
-
"[data-component-end='" + componentId + "']"
|
|
297
|
+
"[data-component-end='" + componentId + "']",
|
|
298
298
|
);
|
|
299
299
|
|
|
300
300
|
if (!componentStart || !componentEnd) {
|
|
@@ -316,7 +316,7 @@ export function findComponentRect(
|
|
|
316
316
|
? getAbsolutePosition(startElement as HTMLElement, iframe)
|
|
317
317
|
: startElement.getBoundingClientRect();
|
|
318
318
|
|
|
319
|
-
let endElement = componentEnd.previousElementSibling;
|
|
319
|
+
let endElement = componentEnd.previousElementSibling;
|
|
320
320
|
|
|
321
321
|
while (endElement && endElement.tagName === "SCRIPT") {
|
|
322
322
|
endElement = endElement.previousElementSibling;
|
|
@@ -352,17 +352,17 @@ export function findComponentRect(
|
|
|
352
352
|
|
|
353
353
|
export const getAbsolutePosition = (
|
|
354
354
|
element: HTMLElement,
|
|
355
|
-
iframe: HTMLIFrameElement
|
|
355
|
+
iframe: HTMLIFrameElement,
|
|
356
356
|
) => {
|
|
357
357
|
const rect = element.getBoundingClientRect();
|
|
358
358
|
const scrollLeft =
|
|
359
359
|
iframe.contentWindow?.scrollX ||
|
|
360
|
-
iframe.contentDocument?.documentElement.scrollLeft ||
|
|
360
|
+
iframe.contentDocument?.documentElement.scrollLeft ||
|
|
361
|
+
0;
|
|
361
362
|
const scrollTop =
|
|
362
363
|
iframe.contentWindow?.scrollY ||
|
|
363
|
-
iframe.contentDocument?.documentElement.scrollTop ||
|
|
364
|
-
|
|
365
|
-
|
|
364
|
+
iframe.contentDocument?.documentElement.scrollTop ||
|
|
365
|
+
0;
|
|
366
366
|
|
|
367
367
|
return {
|
|
368
368
|
x: rect.left + scrollLeft,
|
|
@@ -412,7 +412,10 @@ const dateOptions: Intl.DateTimeFormatOptions = {
|
|
|
412
412
|
hour12: false,
|
|
413
413
|
};
|
|
414
414
|
|
|
415
|
-
const dateFormat = Intl.DateTimeFormat(
|
|
415
|
+
const dateFormat = Intl.DateTimeFormat(
|
|
416
|
+
typeof navigator !== "undefined" ? navigator.language : "en",
|
|
417
|
+
dateOptions,
|
|
418
|
+
);
|
|
416
419
|
|
|
417
420
|
export function formatDate(date: Date) {
|
|
418
421
|
return dateFormat.format(date);
|
|
@@ -421,7 +424,7 @@ export function formatDate(date: Date) {
|
|
|
421
424
|
export function findClosestFieldElement(node: Node | null): HTMLElement | null {
|
|
422
425
|
let current: Node | null = node;
|
|
423
426
|
|
|
424
|
-
while (current) {
|
|
427
|
+
while (current) {
|
|
425
428
|
if (current.nodeType === Node.ELEMENT_NODE) {
|
|
426
429
|
const element = current as Element;
|
|
427
430
|
if (element.hasAttribute("data-fieldid")) {
|
|
@@ -432,4 +435,4 @@ export function findClosestFieldElement(node: Node | null): HTMLElement | null {
|
|
|
432
435
|
}
|
|
433
436
|
|
|
434
437
|
return null;
|
|
435
|
-
}
|
|
438
|
+
}
|
package/src/lib/utils.ts
ADDED
package/styles.css
CHANGED
|
@@ -3,6 +3,125 @@
|
|
|
3
3
|
--font-geist-mono: "GeistMono";
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
+
:root {
|
|
7
|
+
--background: oklch(1 0 0);
|
|
8
|
+
--foreground: oklch(0.145 0 0);
|
|
9
|
+
--card: oklch(1 0 0);
|
|
10
|
+
--card-foreground: oklch(0.145 0 0);
|
|
11
|
+
--popover: oklch(1 0 0);
|
|
12
|
+
--popover-foreground: oklch(0.145 0 0);
|
|
13
|
+
--primary: oklch(0.205 0 0);
|
|
14
|
+
--primary-foreground: oklch(0.985 0 0);
|
|
15
|
+
--secondary: oklch(0.97 0 0);
|
|
16
|
+
--secondary-foreground: oklch(0.205 0 0);
|
|
17
|
+
--muted: oklch(0.97 0 0);
|
|
18
|
+
--muted-foreground: oklch(0.556 0 0);
|
|
19
|
+
--accent: oklch(0.97 0 0);
|
|
20
|
+
--accent-foreground: oklch(0.205 0 0);
|
|
21
|
+
--destructive: oklch(0.577 0.245 27.325);
|
|
22
|
+
--destructive-foreground: oklch(0.577 0.245 27.325);
|
|
23
|
+
--border: oklch(0.922 0 0);
|
|
24
|
+
--input: oklch(0.922 0 0);
|
|
25
|
+
--ring: oklch(0.708 0 0);
|
|
26
|
+
--chart-1: oklch(0.646 0.222 41.116);
|
|
27
|
+
--chart-2: oklch(0.6 0.118 184.704);
|
|
28
|
+
--chart-3: oklch(0.398 0.07 227.392);
|
|
29
|
+
--chart-4: oklch(0.828 0.189 84.429);
|
|
30
|
+
--chart-5: oklch(0.769 0.188 70.08);
|
|
31
|
+
--radius: 0.625rem;
|
|
32
|
+
--sidebar: oklch(0.985 0 0);
|
|
33
|
+
--sidebar-foreground: oklch(0.145 0 0);
|
|
34
|
+
--sidebar-primary: oklch(0.205 0 0);
|
|
35
|
+
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
36
|
+
--sidebar-accent: oklch(0.97 0 0);
|
|
37
|
+
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
38
|
+
--sidebar-border: oklch(0.922 0 0);
|
|
39
|
+
--sidebar-ring: oklch(0.708 0 0);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.dark {
|
|
43
|
+
--background: oklch(0.145 0 0);
|
|
44
|
+
--foreground: oklch(0.985 0 0);
|
|
45
|
+
--card: oklch(0.145 0 0);
|
|
46
|
+
--card-foreground: oklch(0.985 0 0);
|
|
47
|
+
--popover: oklch(0.145 0 0);
|
|
48
|
+
--popover-foreground: oklch(0.985 0 0);
|
|
49
|
+
--primary: oklch(0.985 0 0);
|
|
50
|
+
--primary-foreground: oklch(0.205 0 0);
|
|
51
|
+
--secondary: oklch(0.269 0 0);
|
|
52
|
+
--secondary-foreground: oklch(0.985 0 0);
|
|
53
|
+
--muted: oklch(0.269 0 0);
|
|
54
|
+
--muted-foreground: oklch(0.708 0 0);
|
|
55
|
+
--accent: oklch(0.269 0 0);
|
|
56
|
+
--accent-foreground: oklch(0.985 0 0);
|
|
57
|
+
--destructive: oklch(0.396 0.141 25.723);
|
|
58
|
+
--destructive-foreground: oklch(0.637 0.237 25.331);
|
|
59
|
+
--border: oklch(0.269 0 0);
|
|
60
|
+
--input: oklch(0.269 0 0);
|
|
61
|
+
--ring: oklch(0.439 0 0);
|
|
62
|
+
--chart-1: oklch(0.488 0.243 264.376);
|
|
63
|
+
--chart-2: oklch(0.696 0.17 162.48);
|
|
64
|
+
--chart-3: oklch(0.769 0.188 70.08);
|
|
65
|
+
--chart-4: oklch(0.627 0.265 303.9);
|
|
66
|
+
--chart-5: oklch(0.645 0.246 16.439);
|
|
67
|
+
--sidebar: oklch(0.205 0 0);
|
|
68
|
+
--sidebar-foreground: oklch(0.985 0 0);
|
|
69
|
+
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
70
|
+
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
71
|
+
--sidebar-accent: oklch(0.269 0 0);
|
|
72
|
+
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
73
|
+
--sidebar-border: oklch(0.269 0 0);
|
|
74
|
+
--sidebar-ring: oklch(0.439 0 0);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@theme inline {
|
|
78
|
+
--color-background: var(--background);
|
|
79
|
+
--color-foreground: var(--foreground);
|
|
80
|
+
--color-card: var(--card);
|
|
81
|
+
--color-card-foreground: var(--card-foreground);
|
|
82
|
+
--color-popover: var(--popover);
|
|
83
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
84
|
+
--color-primary: var(--primary);
|
|
85
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
86
|
+
--color-secondary: var(--secondary);
|
|
87
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
88
|
+
--color-muted: var(--muted);
|
|
89
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
90
|
+
--color-accent: var(--accent);
|
|
91
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
92
|
+
--color-destructive: var(--destructive);
|
|
93
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
94
|
+
--color-border: var(--border);
|
|
95
|
+
--color-input: var(--input);
|
|
96
|
+
--color-ring: var(--ring);
|
|
97
|
+
--color-chart-1: var(--chart-1);
|
|
98
|
+
--color-chart-2: var(--chart-2);
|
|
99
|
+
--color-chart-3: var(--chart-3);
|
|
100
|
+
--color-chart-4: var(--chart-4);
|
|
101
|
+
--color-chart-5: var(--chart-5);
|
|
102
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
103
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
104
|
+
--radius-lg: var(--radius);
|
|
105
|
+
--radius-xl: calc(var(--radius) + 4px);
|
|
106
|
+
--color-sidebar: var(--sidebar);
|
|
107
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
108
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
109
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
110
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
111
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
112
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
113
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@layer base {
|
|
117
|
+
* {
|
|
118
|
+
@apply border-border outline-ring/50;
|
|
119
|
+
}
|
|
120
|
+
body {
|
|
121
|
+
@apply bg-background text-foreground;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
6
125
|
@layer alpaca-editor {
|
|
7
126
|
.bg-shape-black {
|
|
8
127
|
background-color: black;
|
|
@@ -472,3 +591,8 @@
|
|
|
472
591
|
overflow: auto;
|
|
473
592
|
resize: vertical;
|
|
474
593
|
}
|
|
594
|
+
|
|
595
|
+
.p-checkbox-box {
|
|
596
|
+
width: 15px;
|
|
597
|
+
height: 15px;
|
|
598
|
+
}
|
package/tsconfig.build.json
CHANGED