@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.
Files changed (49) hide show
  1. package/components.json +21 -0
  2. package/dev.css +3 -0
  3. package/dist/components/ui/button.d.ts +10 -0
  4. package/dist/components/ui/button.js +32 -0
  5. package/dist/components/ui/button.js.map +1 -0
  6. package/dist/editor/Titlebar.js +1 -1
  7. package/dist/editor/Titlebar.js.map +1 -1
  8. package/dist/editor/client/EditorClient.js +7 -6
  9. package/dist/editor/client/EditorClient.js.map +1 -1
  10. package/dist/editor/menubar/ActionsMenu.js +1 -1
  11. package/dist/editor/page-editor-chrome/CommentHighlighting.js +2 -2
  12. package/dist/editor/page-editor-chrome/CommentHighlighting.js.map +1 -1
  13. package/dist/editor/page-viewer/MiniMap.js +3 -3
  14. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  15. package/dist/editor/reviews/Comment.js +18 -14
  16. package/dist/editor/reviews/Comment.js.map +1 -1
  17. package/dist/editor/sidebar/Insert.js +2 -2
  18. package/dist/editor/sidebar/Insert.js.map +1 -1
  19. package/dist/editor/sidebar/MainContentTree.js +2 -0
  20. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  21. package/dist/editor/sidebar/Translations.js +4 -4
  22. package/dist/editor/sidebar/Translations.js.map +1 -1
  23. package/dist/editor/sidebar/ViewSelector.js +1 -1
  24. package/dist/editor/ui/SimpleTable.js +2 -2
  25. package/dist/editor/ui/SimpleTable.js.map +1 -1
  26. package/dist/editor/utils.js +7 -6
  27. package/dist/editor/utils.js.map +1 -1
  28. package/dist/lib/utils.d.ts +2 -0
  29. package/dist/lib/utils.js +6 -0
  30. package/dist/lib/utils.js.map +1 -0
  31. package/dist/styles.css +303 -11
  32. package/package.json +9 -3
  33. package/src/components/ui/button.tsx +62 -0
  34. package/src/editor/Titlebar.tsx +1 -1
  35. package/src/editor/client/EditorClient.tsx +7 -6
  36. package/src/editor/menubar/ActionsMenu.tsx +1 -1
  37. package/src/editor/page-editor-chrome/CommentHighlighting.tsx +8 -9
  38. package/src/editor/page-viewer/MiniMap.tsx +11 -11
  39. package/src/editor/reviews/Comment.tsx +38 -33
  40. package/src/editor/sidebar/Insert.tsx +2 -2
  41. package/src/editor/sidebar/MainContentTree.tsx +1 -0
  42. package/src/editor/sidebar/Translations.tsx +12 -12
  43. package/src/editor/sidebar/ViewSelector.tsx +1 -1
  44. package/src/editor/ui/SimpleTable.tsx +3 -6
  45. package/src/editor/utils.ts +32 -29
  46. package/src/lib/utils.ts +6 -0
  47. package/styles.css +124 -0
  48. package/tsconfig.build.json +3 -0
  49. package/tsconfig.json +3 -0
@@ -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
- fieldDescriptor.item.id +
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 || 0;
360
+ iframe.contentDocument?.documentElement.scrollLeft ||
361
+ 0;
361
362
  const scrollTop =
362
363
  iframe.contentWindow?.scrollY ||
363
- iframe.contentDocument?.documentElement.scrollTop || 0;
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(typeof navigator !== 'undefined' ? navigator.language : 'en', dateOptions);
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
+ }
@@ -0,0 +1,6 @@
1
+ import { clsx, type ClassValue } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }
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
+ }
@@ -1,5 +1,8 @@
1
1
  {
2
2
  "compilerOptions": {
3
+ "paths": {
4
+ "@/*": ["./src/*"]
5
+ },
3
6
  "target": "es2022",
4
7
  "module": "esnext",
5
8
  "moduleResolution": "bundler",
package/tsconfig.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "extends": "@repo/typescript-config/react-library.json",
3
3
  "compilerOptions": {
4
+ "paths": {
5
+ "@/*": ["./src/*"]
6
+ },
4
7
  "outDir": "dist",
5
8
  "module": "ES2020",
6
9
  "moduleResolution": "bundler",