@semiont/react-ui 0.5.7 → 0.5.8
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/dist/{PdfAnnotationCanvas.client-NIMALXNZ.js → PdfAnnotationCanvas.client-U4EVBZEV.js} +6 -52
- package/dist/PdfAnnotationCanvas.client-U4EVBZEV.js.map +1 -0
- package/dist/{ar-SONK6MON.js → ar-WA47UUWA.js} +2 -2
- package/dist/{bn-ZKPRITNG.js → bn-5ANDRIU6.js} +2 -2
- package/dist/chunk-O2MD7TGE.js +42 -0
- package/dist/chunk-O2MD7TGE.js.map +1 -0
- package/dist/chunk-QT7LYM72.js +234 -0
- package/dist/chunk-QT7LYM72.js.map +1 -0
- package/dist/{chunk-Y2EEAOMZ.js → chunk-WHUGODTB.js} +31 -31
- package/dist/chunk-XUDKYAVC.js +21 -0
- package/dist/chunk-XUDKYAVC.js.map +1 -0
- package/dist/{chunk-K6BJDL2I.js → chunk-YBGN4ACY.js} +6 -2
- package/dist/{cs-LPXQ7NHQ.js → cs-3RU7F4JX.js} +2 -2
- package/dist/{da-6TKY7MCY.js → da-GSW5P5HG.js} +2 -2
- package/dist/{de-C3GNII74.js → de-JUAUYF4Z.js} +2 -2
- package/dist/{el-UBCXQDJ7.js → el-JNLWCKEC.js} +2 -2
- package/dist/{en-L45VK7BS.js → en-RBN2GUHF.js} +2 -2
- package/dist/{es-BQ23TRI7.js → es-WPOX225H.js} +2 -2
- package/dist/{fa-AFTBZB77.js → fa-TAEP6N77.js} +2 -2
- package/dist/{fi-WOYNLZC2.js → fi-ZVZHANSP.js} +2 -2
- package/dist/{fr-NDSMIFJM.js → fr-VLZW7M4N.js} +2 -2
- package/dist/{he-VJXVRDOY.js → he-QFAFYA77.js} +2 -2
- package/dist/{hi-BF6PHIE2.js → hi-AO3DQPCV.js} +2 -2
- package/dist/{id-GXG5QCZY.js → id-GTXF42WM.js} +2 -2
- package/dist/index.d.ts +23 -1
- package/dist/index.js +2491 -2716
- package/dist/index.js.map +1 -1
- package/dist/integrations/css-modules-helper.d.ts +118 -0
- package/dist/integrations/css-modules-helper.js +117 -0
- package/dist/integrations/css-modules-helper.js.map +1 -0
- package/dist/integrations/styled-components-theme.d.ts +258 -0
- package/dist/integrations/styled-components-theme.js +1774 -0
- package/dist/integrations/styled-components-theme.js.map +1 -0
- package/dist/{it-XKHHCBAF.js → it-AS5GM232.js} +2 -2
- package/dist/{ja-TX7VM4XD.js → ja-GZ4HLUOF.js} +2 -2
- package/dist/{ko-DNC7EQ7J.js → ko-A4XUXFGJ.js} +2 -2
- package/dist/{ms-POZGBKPH.js → ms-YBAO3S6K.js} +2 -2
- package/dist/{nl-IRMTKI7Z.js → nl-3TJGIIIU.js} +2 -2
- package/dist/{no-ZUDJA4S6.js → no-4AXIQPRQ.js} +2 -2
- package/dist/{pl-2NGAXL5U.js → pl-5GP6GKXO.js} +2 -2
- package/dist/{pt-ABMCXZUM.js → pt-26Y6JFG5.js} +2 -2
- package/dist/{ro-VOJP6O5X.js → ro-C7UXFRWJ.js} +2 -2
- package/dist/{sv-4HVFIIE5.js → sv-44DVD76T.js} +2 -2
- package/dist/test-utils.js +2 -2
- package/dist/{th-IFPZP3HQ.js → th-GIQRTBOY.js} +2 -2
- package/dist/{tr-2GYEAMJ4.js → tr-WMQWO4D6.js} +2 -2
- package/dist/{uk-XCJBVLLD.js → uk-I7ML6RGG.js} +2 -2
- package/dist/{vi-4FR7CB2F.js → vi-FGWECASQ.js} +2 -2
- package/dist/{zh-NSKFOINB.js → zh-L5FN73XC.js} +2 -2
- package/package.json +7 -6
- package/dist/PdfAnnotationCanvas.client-NIMALXNZ.js.map +0 -1
- /package/dist/{ar-SONK6MON.js.map → ar-WA47UUWA.js.map} +0 -0
- /package/dist/{bn-ZKPRITNG.js.map → bn-5ANDRIU6.js.map} +0 -0
- /package/dist/{chunk-Y2EEAOMZ.js.map → chunk-WHUGODTB.js.map} +0 -0
- /package/dist/{chunk-K6BJDL2I.js.map → chunk-YBGN4ACY.js.map} +0 -0
- /package/dist/{cs-LPXQ7NHQ.js.map → cs-3RU7F4JX.js.map} +0 -0
- /package/dist/{da-6TKY7MCY.js.map → da-GSW5P5HG.js.map} +0 -0
- /package/dist/{de-C3GNII74.js.map → de-JUAUYF4Z.js.map} +0 -0
- /package/dist/{el-UBCXQDJ7.js.map → el-JNLWCKEC.js.map} +0 -0
- /package/dist/{en-L45VK7BS.js.map → en-RBN2GUHF.js.map} +0 -0
- /package/dist/{es-BQ23TRI7.js.map → es-WPOX225H.js.map} +0 -0
- /package/dist/{fa-AFTBZB77.js.map → fa-TAEP6N77.js.map} +0 -0
- /package/dist/{fi-WOYNLZC2.js.map → fi-ZVZHANSP.js.map} +0 -0
- /package/dist/{fr-NDSMIFJM.js.map → fr-VLZW7M4N.js.map} +0 -0
- /package/dist/{he-VJXVRDOY.js.map → he-QFAFYA77.js.map} +0 -0
- /package/dist/{hi-BF6PHIE2.js.map → hi-AO3DQPCV.js.map} +0 -0
- /package/dist/{id-GXG5QCZY.js.map → id-GTXF42WM.js.map} +0 -0
- /package/dist/{it-XKHHCBAF.js.map → it-AS5GM232.js.map} +0 -0
- /package/dist/{ja-TX7VM4XD.js.map → ja-GZ4HLUOF.js.map} +0 -0
- /package/dist/{ko-DNC7EQ7J.js.map → ko-A4XUXFGJ.js.map} +0 -0
- /package/dist/{ms-POZGBKPH.js.map → ms-YBAO3S6K.js.map} +0 -0
- /package/dist/{nl-IRMTKI7Z.js.map → nl-3TJGIIIU.js.map} +0 -0
- /package/dist/{no-ZUDJA4S6.js.map → no-4AXIQPRQ.js.map} +0 -0
- /package/dist/{pl-2NGAXL5U.js.map → pl-5GP6GKXO.js.map} +0 -0
- /package/dist/{pt-ABMCXZUM.js.map → pt-26Y6JFG5.js.map} +0 -0
- /package/dist/{ro-VOJP6O5X.js.map → ro-C7UXFRWJ.js.map} +0 -0
- /package/dist/{sv-4HVFIIE5.js.map → sv-44DVD76T.js.map} +0 -0
- /package/dist/{th-IFPZP3HQ.js.map → th-GIQRTBOY.js.map} +0 -0
- /package/dist/{tr-2GYEAMJ4.js.map → tr-WMQWO4D6.js.map} +0 -0
- /package/dist/{uk-XCJBVLLD.js.map → uk-I7ML6RGG.js.map} +0 -0
- /package/dist/{vi-4FR7CB2F.js.map → vi-FGWECASQ.js.map} +0 -0
- /package/dist/{zh-NSKFOINB.js.map → zh-L5FN73XC.js.map} +0 -0
package/dist/{PdfAnnotationCanvas.client-NIMALXNZ.js → PdfAnnotationCanvas.client-U4EVBZEV.js}
RENAMED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
"use client";
|
|
3
|
-
import
|
|
3
|
+
import {
|
|
4
|
+
loadPdfDocument,
|
|
5
|
+
renderPdfPageToDataUrl
|
|
6
|
+
} from "./chunk-O2MD7TGE.js";
|
|
7
|
+
import "./chunk-YBGN4ACY.js";
|
|
4
8
|
|
|
5
9
|
// src/components/pdf-annotation/PdfAnnotationCanvas.tsx
|
|
6
10
|
import { useRef, useState, useCallback, useEffect, useMemo } from "react";
|
|
@@ -43,56 +47,6 @@ function pdfToCanvasCoordinates(pdfCoord, pageHeight, scale = 1) {
|
|
|
43
47
|
};
|
|
44
48
|
}
|
|
45
49
|
|
|
46
|
-
// src/lib/browser-pdfjs.ts
|
|
47
|
-
async function ensurePdfJs() {
|
|
48
|
-
if (typeof window !== "undefined" && window.pdfjsLib) {
|
|
49
|
-
return window.pdfjsLib;
|
|
50
|
-
}
|
|
51
|
-
return new Promise((resolve, reject) => {
|
|
52
|
-
const script = document.createElement("script");
|
|
53
|
-
script.src = "/pdfjs/pdf.min.mjs";
|
|
54
|
-
script.type = "module";
|
|
55
|
-
script.onload = () => {
|
|
56
|
-
const pdfjsLib = window.pdfjsLib;
|
|
57
|
-
if (!pdfjsLib) {
|
|
58
|
-
reject(new Error("PDF.js loaded but pdfjsLib not available"));
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
pdfjsLib.GlobalWorkerOptions.workerSrc = "/pdfjs/pdf.worker.min.mjs";
|
|
62
|
-
resolve(pdfjsLib);
|
|
63
|
-
};
|
|
64
|
-
script.onerror = () => {
|
|
65
|
-
reject(new Error("Failed to load PDF.js from /pdfjs/pdf.min.mjs"));
|
|
66
|
-
};
|
|
67
|
-
document.head.appendChild(script);
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
async function loadPdfDocument(url) {
|
|
71
|
-
const pdfjsLib = await ensurePdfJs();
|
|
72
|
-
const loadingTask = pdfjsLib.getDocument({ url });
|
|
73
|
-
return loadingTask.promise;
|
|
74
|
-
}
|
|
75
|
-
async function renderPdfPageToDataUrl(page, scale = 1) {
|
|
76
|
-
const viewport = page.getViewport({ scale });
|
|
77
|
-
const canvas = document.createElement("canvas");
|
|
78
|
-
const context = canvas.getContext("2d");
|
|
79
|
-
if (!context) {
|
|
80
|
-
throw new Error("Failed to get 2D context");
|
|
81
|
-
}
|
|
82
|
-
canvas.width = viewport.width;
|
|
83
|
-
canvas.height = viewport.height;
|
|
84
|
-
const renderTask = page.render({
|
|
85
|
-
canvasContext: context,
|
|
86
|
-
viewport
|
|
87
|
-
});
|
|
88
|
-
await renderTask.promise;
|
|
89
|
-
return {
|
|
90
|
-
dataUrl: canvas.toDataURL("image/png"),
|
|
91
|
-
width: viewport.width,
|
|
92
|
-
height: viewport.height
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
50
|
// src/components/pdf-annotation/PdfAnnotationCanvas.tsx
|
|
97
51
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
98
52
|
function getMotivationColor(motivation) {
|
|
@@ -464,4 +418,4 @@ function PdfAnnotationCanvas({
|
|
|
464
418
|
export {
|
|
465
419
|
PdfAnnotationCanvas
|
|
466
420
|
};
|
|
467
|
-
//# sourceMappingURL=PdfAnnotationCanvas.client-
|
|
421
|
+
//# sourceMappingURL=PdfAnnotationCanvas.client-U4EVBZEV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/pdf-annotation/PdfAnnotationCanvas.tsx","../src/lib/pdf-coordinates.ts"],"sourcesContent":["'use client';\n\nimport React, { useRef, useState, useCallback, useEffect, useMemo } from 'react';\nimport type { Annotation } from '@semiont/core';\nimport {\n getTargetSelector,\n createFragmentSelector,\n parseFragmentSelector,\n getPageFromFragment,\n} from '@semiont/core';\nimport { createHoverHandlers, type SemiontSession } from '@semiont/sdk';\nimport type { SelectionMotivation } from '../annotation/AnnotateToolbar';\nimport {\n canvasToPdfCoordinates,\n pdfToCanvasCoordinates,\n type CanvasRectangle\n} from '../../lib/pdf-coordinates';\nimport {\n loadPdfDocument,\n renderPdfPageToDataUrl,\n type PDFDocumentProxy\n} from '../../lib/browser-pdfjs';\nimport './PdfAnnotationCanvas.css';\n\nexport type DrawingMode = 'rectangle' | 'circle' | 'polygon' | null;\n\n/**\n * Get color for annotation based on motivation\n */\nfunction getMotivationColor(motivation: SelectionMotivation | null): { stroke: string; fill: string } {\n if (!motivation) {\n return { stroke: 'rgb(156, 163, 175)', fill: 'rgba(156, 163, 175, 0.2)' };\n }\n\n switch (motivation) {\n case 'highlighting':\n return { stroke: 'rgb(250, 204, 21)', fill: 'rgba(250, 204, 21, 0.3)' };\n case 'linking':\n return { stroke: 'rgb(59, 130, 246)', fill: 'rgba(59, 130, 246, 0.2)' };\n case 'assessing':\n return { stroke: 'rgb(239, 68, 68)', fill: 'rgba(239, 68, 68, 0.2)' };\n case 'commenting':\n return { stroke: 'rgb(255, 255, 255)', fill: 'rgba(255, 255, 255, 0.2)' };\n default:\n return { stroke: 'rgb(156, 163, 175)', fill: 'rgba(156, 163, 175, 0.2)' };\n }\n}\n\ninterface PdfAnnotationCanvasProps {\n pdfUrl: string;\n existingAnnotations?: Annotation[];\n drawingMode: DrawingMode;\n selectedMotivation?: SelectionMotivation | null;\n session?: SemiontSession | null | undefined;\n hoveredAnnotationId?: string | null;\n selectedAnnotationId?: string | null;\n hoverDelayMs?: number;\n}\n\n/**\n * PDF annotation canvas with page navigation and rectangle drawing\n *\n * @emits browse:click - Annotation clicked on PDF. Payload: { annotationId: string, motivation: Motivation }\n * @emits mark:requested - New annotation drawn on PDF. Payload: { selector: FragmentSelector, motivation: SelectionMotivation }\n * @emits beckon:hover - Annotation hovered or unhovered. Payload: { annotationId: string | null }\n */\nexport function PdfAnnotationCanvas({\n pdfUrl,\n existingAnnotations = [],\n drawingMode,\n selectedMotivation,\n session,\n hoveredAnnotationId,\n selectedAnnotationId,\n hoverDelayMs = 150\n}: PdfAnnotationCanvasProps) {\n // PDF state\n const [pdfDoc, setPdfDoc] = useState<PDFDocumentProxy | null>(null);\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState(1);\n const [pageImageUrl, setPageImageUrl] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [pageDimensions, setPageDimensions] = useState<{ width: number; height: number } | null>(null);\n const [displayDimensions, setDisplayDimensions] = useState<{ width: number; height: number } | null>(null);\n const [scale] = useState(1.5); // Fixed scale for better quality\n\n // Drawing state\n const [isDrawing, setIsDrawing] = useState(false);\n const [selection, setSelection] = useState<CanvasRectangle | null>(null);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const imageRef = useRef<HTMLImageElement>(null);\n\n // Load PDF document on mount\n useEffect(() => {\n let cancelled = false;\n\n async function loadPdf() {\n try {\n setIsLoading(true);\n setError(null);\n\n const doc = await loadPdfDocument(pdfUrl);\n\n if (cancelled) return;\n\n setPdfDoc(doc);\n setNumPages(doc.numPages);\n setIsLoading(false);\n } catch (err) {\n if (cancelled) return;\n\n console.error('Error loading PDF:', err);\n setError('Failed to load PDF');\n setIsLoading(false);\n }\n }\n\n loadPdf();\n\n return () => {\n cancelled = true;\n };\n }, [pdfUrl]);\n\n // Load current page when page number changes\n useEffect(() => {\n if (!pdfDoc) return;\n\n let cancelled = false;\n const doc = pdfDoc;\n\n async function loadPage() {\n try {\n const page = await doc.getPage(pageNumber);\n\n if (cancelled) return;\n\n // Get page dimensions (at scale 1.0)\n const viewport = page.getViewport({ scale: 1.0 });\n setPageDimensions({\n width: viewport.width,\n height: viewport.height\n });\n\n // Render page to image\n const { dataUrl } = await renderPdfPageToDataUrl(page, scale);\n\n if (cancelled) return;\n\n setPageImageUrl(dataUrl);\n } catch (err) {\n if (cancelled) return;\n\n console.error('Error loading page:', err);\n setError('Failed to load page');\n }\n }\n\n loadPage();\n\n return () => {\n cancelled = true;\n };\n }, [pdfDoc, pageNumber, scale]);\n\n // Update display dimensions on resize\n useEffect(() => {\n const updateDisplayDimensions = () => {\n if (imageRef.current) {\n setDisplayDimensions({\n width: imageRef.current.clientWidth,\n height: imageRef.current.clientHeight\n });\n }\n };\n\n updateDisplayDimensions();\n\n // Use ResizeObserver to detect image element size changes\n // This catches: sidebar open/close, window resize, font size changes, etc.\n let resizeObserver: ResizeObserver | null = null;\n\n try {\n resizeObserver = new ResizeObserver(updateDisplayDimensions);\n if (imageRef.current) {\n resizeObserver.observe(imageRef.current);\n }\n } catch (error) {\n // Fallback for browsers without ResizeObserver support\n console.warn('ResizeObserver not supported, falling back to window resize listener');\n window.addEventListener('resize', updateDisplayDimensions);\n }\n\n return () => {\n if (resizeObserver) {\n resizeObserver.disconnect();\n } else {\n window.removeEventListener('resize', updateDisplayDimensions);\n }\n };\n }, [pageImageUrl]);\n\n // Mouse event handlers for drawing\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (!drawingMode) return;\n if (!imageRef.current) return;\n\n const rect = imageRef.current.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n\n // Clear any previous selection when starting new drawing\n setIsDrawing(true);\n setSelection({\n startX: x,\n startY: y,\n endX: x,\n endY: y\n });\n }, [drawingMode]);\n\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n if (!isDrawing || !selection || !imageRef.current) return;\n\n const rect = imageRef.current.getBoundingClientRect();\n\n setSelection({\n ...selection,\n endX: e.clientX - rect.left,\n endY: e.clientY - rect.top\n });\n }, [isDrawing, selection]);\n\n const handleMouseUp = useCallback(() => {\n if (!isDrawing || !selection || !pageDimensions || !displayDimensions || !session) {\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n\n // Calculate drag distance\n const dragDistance = Math.sqrt(\n Math.pow(selection.endX - selection.startX, 2) +\n Math.pow(selection.endY - selection.startY, 2)\n );\n\n // Minimum drag threshold in pixels (10px)\n const MIN_DRAG_DISTANCE = 10;\n\n if (dragDistance < MIN_DRAG_DISTANCE) {\n // This was a click, not a drag - check if we clicked an existing annotation\n if (existingAnnotations.length > 0) {\n const clickedAnnotation = pageAnnotations.find(ann => {\n const fragmentSel = getFragmentSelector(ann.target);\n if (!fragmentSel) return false;\n\n const pdfCoord = parseFragmentSelector(fragmentSel.value);\n if (!pdfCoord) return false;\n\n const rect = pdfToCanvasCoordinates(pdfCoord, pageDimensions.height, 1.0);\n\n // Scale to display coordinates\n const scaleX = displayDimensions.width / pageDimensions.width;\n const scaleY = displayDimensions.height / pageDimensions.height;\n\n const displayX = rect.x * scaleX;\n const displayY = rect.y * scaleY;\n const displayWidth = rect.width * scaleX;\n const displayHeight = rect.height * scaleY;\n\n return (\n selection.endX >= displayX &&\n selection.endX <= displayX + displayWidth &&\n selection.endY >= displayY &&\n selection.endY <= displayY + displayHeight\n );\n });\n\n if (clickedAnnotation) {\n session?.client.browse.click(clickedAnnotation.id, clickedAnnotation.motivation);\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n }\n\n // Click on empty space - do nothing\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n\n // This was a drag - create new annotation\n // Scale selection from display coordinates to native page coordinates\n const scaleX = pageDimensions.width / displayDimensions.width;\n const scaleY = pageDimensions.height / displayDimensions.height;\n\n const nativeSelection: CanvasRectangle = {\n startX: selection.startX * scaleX,\n startY: selection.startY * scaleY,\n endX: selection.endX * scaleX,\n endY: selection.endY * scaleY\n };\n\n // Convert canvas coordinates to PDF coordinates\n const pdfCoord = canvasToPdfCoordinates(\n nativeSelection,\n pageNumber,\n pageDimensions.width,\n pageDimensions.height,\n 1.0 // Use scale 1.0 since we already scaled to native coords\n );\n\n // Create FragmentSelector\n const fragmentSelector = createFragmentSelector(pdfCoord);\n\n // Emit annotation:requested event with FragmentSelector\n if (selectedMotivation) {\n session.client.mark.request(\n {\n type: 'FragmentSelector',\n conformsTo: 'http://tools.ietf.org/rfc/rfc3778',\n value: fragmentSelector,\n },\n selectedMotivation,\n );\n }\n\n // Keep drawing state active to show preview until annotation is persisted\n // The parent component should clear this by changing drawingMode after save\n setIsDrawing(false);\n // Note: We keep selection so the preview remains visible\n // It will be cleared when drawingMode changes or user starts new selection\n }, [isDrawing, selection, pageNumber, pageDimensions, displayDimensions, selectedMotivation, existingAnnotations]);\n\n // Helper to get FragmentSelector from annotation target\n const getFragmentSelector = (target: Annotation['target']) => {\n const selector = getTargetSelector(target);\n if (!selector) return null;\n const selectors = Array.isArray(selector) ? selector : [selector];\n\n const found = selectors.find(s => s.type === 'FragmentSelector');\n if (!found || found.type !== 'FragmentSelector') return null;\n return found as { type: 'FragmentSelector'; value: string; conformsTo?: string };\n };\n\n // Filter annotations for current page\n const pageAnnotations = existingAnnotations.filter(ann => {\n const fragmentSel = getFragmentSelector(ann.target);\n if (!fragmentSel) return false;\n const page = getPageFromFragment(fragmentSel.value);\n return page === pageNumber;\n });\n\n // Hover handlers with currentHover guard and dwell delay\n const { handleMouseEnter, handleMouseLeave } = useMemo(\n () => createHoverHandlers((id) => session?.client.beckon.hover(id), hoverDelayMs),\n [session, hoverDelayMs]\n );\n\n // Calculate motivation color\n const { stroke, fill } = getMotivationColor(selectedMotivation ?? null);\n\n if (error) {\n return <div className=\"semiont-pdf-annotation-canvas__error\">{error}</div>;\n }\n\n return (\n <div className=\"semiont-pdf-annotation-canvas\">\n {isLoading && <div className=\"semiont-pdf-annotation-canvas__loading\">Loading PDF...</div>}\n\n <div\n ref={containerRef}\n className=\"semiont-pdf-annotation-canvas__container\"\n style={{ display: isLoading ? 'none' : undefined }}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={() => {\n if (isDrawing) {\n setIsDrawing(false);\n setSelection(null);\n }\n }}\n data-drawing-mode={drawingMode || 'none'}\n >\n {/* PDF page rendered as image */}\n {pageImageUrl && (\n <img\n ref={imageRef}\n src={pageImageUrl}\n alt={`PDF page ${pageNumber}`}\n className=\"semiont-pdf-annotation-canvas__image\"\n draggable={false}\n style={{ pointerEvents: 'none' }}\n onLoad={() => {\n // Use double RAF to ensure layout is complete even in onLoad\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (imageRef.current) {\n setDisplayDimensions({\n width: imageRef.current.clientWidth,\n height: imageRef.current.clientHeight\n });\n }\n });\n });\n }}\n />\n )}\n\n {/* SVG overlay for annotations */}\n {displayDimensions && pageDimensions && (\n <div className=\"semiont-pdf-annotation-canvas__overlay-container\">\n <div className=\"semiont-pdf-annotation-canvas__overlay\">\n <svg\n className=\"semiont-pdf-annotation-canvas__svg\"\n width={displayDimensions.width}\n height={displayDimensions.height}\n >\n {/* Render existing annotations for this page */}\n {pageAnnotations.map(ann => {\n const fragmentSel = getFragmentSelector(ann.target);\n if (!fragmentSel) return null;\n\n const pdfCoord = parseFragmentSelector(fragmentSel.value);\n if (!pdfCoord) return null;\n\n const rect = pdfToCanvasCoordinates(pdfCoord, pageDimensions.height, 1.0);\n\n // Scale to display coordinates\n const scaleX = displayDimensions.width / pageDimensions.width;\n const scaleY = displayDimensions.height / pageDimensions.height;\n\n const isHovered = ann.id === hoveredAnnotationId;\n const isSelected = ann.id === selectedAnnotationId;\n\n // Get color for this annotation's motivation (not the selected motivation)\n const annMotivation = ann.motivation as SelectionMotivation | null;\n const { stroke: annStroke, fill: annFill } = getMotivationColor(annMotivation);\n\n return (\n <rect\n key={ann.id}\n x={rect.x * scaleX}\n y={rect.y * scaleY}\n width={rect.width * scaleX}\n height={rect.height * scaleY}\n stroke={annStroke}\n strokeWidth={isSelected ? 4 : isHovered ? 3 : 2}\n fill={annFill}\n style={{\n pointerEvents: 'auto',\n cursor: 'pointer',\n opacity: isSelected ? 1 : isHovered ? 0.9 : 0.7\n }}\n onClick={() => session?.client.browse.click(ann.id, ann.motivation)}\n onMouseEnter={() => handleMouseEnter(ann.id)}\n onMouseLeave={handleMouseLeave}\n />\n );\n })}\n\n {/* Render current selection while drawing or awaiting save */}\n {selection && (() => {\n const rectX = Math.min(selection.startX, selection.endX);\n const rectY = Math.min(selection.startY, selection.endY);\n const rectWidth = Math.abs(selection.endX - selection.startX);\n const rectHeight = Math.abs(selection.endY - selection.startY);\n\n // PDF only supports rectangle shapes (FragmentSelector with viewrect)\n // Circle/polygon are disabled in the UI for PDF media types\n return (\n <rect\n x={rectX}\n y={rectY}\n width={rectWidth}\n height={rectHeight}\n stroke={stroke}\n strokeWidth={2}\n strokeDasharray=\"5,5\"\n fill={fill}\n pointerEvents=\"none\"\n />\n );\n })()}\n </svg>\n </div>\n </div>\n )}\n </div>\n\n {/* Page navigation controls */}\n {numPages > 0 && (\n <div className=\"semiont-pdf-annotation-canvas__controls\">\n <button\n disabled={pageNumber <= 1}\n onClick={() => setPageNumber(pageNumber - 1)}\n className=\"semiont-pdf-annotation-canvas__button\"\n >\n Previous\n </button>\n <span className=\"semiont-pdf-annotation-canvas__page-info\">\n Page {pageNumber} of {numPages}\n </span>\n <button\n disabled={pageNumber >= numPages}\n onClick={() => setPageNumber(pageNumber + 1)}\n className=\"semiont-pdf-annotation-canvas__button\"\n >\n Next\n </button>\n </div>\n )}\n </div>\n );\n}\n","/**\n * PDF Canvas Coordinate Transforms\n *\n * Converts between canvas space (pixels, top-left origin, Y increases downward)\n * and PDF space (points, bottom-left origin, Y increases upward) — the Y-flip and\n * scale. UI-only: the server has no canvas.\n *\n * `PdfCoordinate` and the viewrect FragmentSelector codec live in `@semiont/core`.\n *\n * Based on RFC 3778 PDF Fragment Identifiers:\n * https://tools.ietf.org/html/rfc3778\n */\n\nimport type { PdfCoordinate } from '@semiont/core';\n\nexport interface Rectangle {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface CanvasRectangle {\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n}\n\n/**\n * Convert canvas coordinates to PDF coordinates\n *\n * Canvas: Origin at top-left, Y increases downward\n * PDF: Origin at bottom-left, Y increases upward\n *\n * @param canvasRect - Rectangle in canvas pixel coordinates\n * @param page - PDF page number (1-indexed)\n * @param pageWidth - PDF page width in points\n * @param pageHeight - PDF page height in points\n * @param scale - Current canvas scale factor\n */\nexport function canvasToPdfCoordinates(\n canvasRect: CanvasRectangle,\n page: number,\n _pageWidth: number,\n pageHeight: number,\n scale: number = 1\n): PdfCoordinate {\n // Normalize rectangle (handle drag in any direction)\n const x1 = Math.min(canvasRect.startX, canvasRect.endX);\n const y1 = Math.min(canvasRect.startY, canvasRect.endY);\n const x2 = Math.max(canvasRect.startX, canvasRect.endX);\n const y2 = Math.max(canvasRect.startY, canvasRect.endY);\n\n // Convert from canvas pixels to PDF points\n const pdfX = x1 / scale;\n const pdfWidth = (x2 - x1) / scale;\n\n // Flip Y coordinate (canvas top-left to PDF bottom-left)\n const pdfY = pageHeight - (y2 / scale);\n const pdfHeight = (y2 - y1) / scale;\n\n return {\n page,\n x: Math.round(pdfX),\n y: Math.round(pdfY),\n width: Math.round(pdfWidth),\n height: Math.round(pdfHeight)\n };\n}\n\n/**\n * Convert PDF coordinates to canvas coordinates\n *\n * @param pdfCoord - Coordinates in PDF space\n * @param pageHeight - PDF page height in points\n * @param scale - Current canvas scale factor\n */\nexport function pdfToCanvasCoordinates(\n pdfCoord: PdfCoordinate,\n pageHeight: number,\n scale: number = 1\n): Rectangle {\n // Convert from PDF points to canvas pixels\n const canvasX = pdfCoord.x * scale;\n const canvasWidth = pdfCoord.width * scale;\n\n // Flip Y coordinate (PDF bottom-left to canvas top-left)\n const canvasY = (pageHeight - pdfCoord.y - pdfCoord.height) * scale;\n const canvasHeight = pdfCoord.height * scale;\n\n return {\n x: canvasX,\n y: canvasY,\n width: canvasWidth,\n height: canvasHeight\n };\n}\n"],"mappings":"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","names":["error","pdfCoord","scaleX","scaleY"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-YBGN4ACY.js";
|
|
3
3
|
|
|
4
4
|
// translations/ar.json
|
|
5
5
|
var Toolbar = {
|
|
@@ -402,4 +402,4 @@ export {
|
|
|
402
402
|
UnifiedAnnotationsPanel,
|
|
403
403
|
ar_default as default
|
|
404
404
|
};
|
|
405
|
-
//# sourceMappingURL=ar-
|
|
405
|
+
//# sourceMappingURL=ar-WA47UUWA.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-YBGN4ACY.js";
|
|
3
3
|
|
|
4
4
|
// translations/bn.json
|
|
5
5
|
var Toolbar = {
|
|
@@ -402,4 +402,4 @@ export {
|
|
|
402
402
|
UnifiedAnnotationsPanel,
|
|
403
403
|
bn_default as default
|
|
404
404
|
};
|
|
405
|
-
//# sourceMappingURL=bn-
|
|
405
|
+
//# sourceMappingURL=bn-5ANDRIU6.js.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
// src/lib/browser-pdfjs.ts
|
|
4
|
+
var workerSrc;
|
|
5
|
+
function setPdfWorkerSrc(src) {
|
|
6
|
+
workerSrc = src;
|
|
7
|
+
}
|
|
8
|
+
var pdfjsPromise;
|
|
9
|
+
async function getPdfjs() {
|
|
10
|
+
if (!pdfjsPromise) {
|
|
11
|
+
pdfjsPromise = import("pdfjs-dist").then((pdfjsLib) => {
|
|
12
|
+
if (workerSrc) {
|
|
13
|
+
pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;
|
|
14
|
+
}
|
|
15
|
+
return pdfjsLib;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return pdfjsPromise;
|
|
19
|
+
}
|
|
20
|
+
async function loadPdfDocument(url) {
|
|
21
|
+
const pdfjsLib = await getPdfjs();
|
|
22
|
+
return pdfjsLib.getDocument({ url }).promise;
|
|
23
|
+
}
|
|
24
|
+
async function renderPdfPageToDataUrl(page, scale = 1) {
|
|
25
|
+
const viewport = page.getViewport({ scale });
|
|
26
|
+
const canvas = document.createElement("canvas");
|
|
27
|
+
canvas.width = viewport.width;
|
|
28
|
+
canvas.height = viewport.height;
|
|
29
|
+
await page.render({ canvas, viewport }).promise;
|
|
30
|
+
return {
|
|
31
|
+
dataUrl: canvas.toDataURL("image/png"),
|
|
32
|
+
width: viewport.width,
|
|
33
|
+
height: viewport.height
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export {
|
|
38
|
+
setPdfWorkerSrc,
|
|
39
|
+
loadPdfDocument,
|
|
40
|
+
renderPdfPageToDataUrl
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=chunk-O2MD7TGE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/browser-pdfjs.ts"],"sourcesContent":["/**\n * Browser PDF.js — bundled from the npm `pdfjs-dist` (v6) package, loaded\n * lazily.\n *\n * pdf.js (the ~300 kB display layer) is pulled in via a dynamic `import()` the\n * first time a PDF is actually opened, so it is code-split out of the main app\n * bundle — restoring the lazy-load behaviour the old CDN loader had. Only the\n * pdf.js *types* are imported statically (erased at build time, zero runtime\n * cost).\n *\n * The worker can't be resolved inside this tsup-built library (Vite's `?url`\n * lives in the app), so the host hands us the worker URL via `setPdfWorkerSrc`\n * once at startup; it is applied to `GlobalWorkerOptions` when pdf.js loads.\n * See `apps/frontend/src/main.tsx`.\n */\nimport type { PDFDocumentProxy, PDFPageProxy } from 'pdfjs-dist';\n\nexport type { PDFDocumentProxy };\n\nlet workerSrc: string | undefined;\n\n/**\n * Supply the (Vite-resolved) pdf.js worker URL. Call once at app startup,\n * before any PDF is opened.\n */\nexport function setPdfWorkerSrc(src: string): void {\n workerSrc = src;\n}\n\nlet pdfjsPromise: Promise<typeof import('pdfjs-dist')> | undefined;\n\n/** Lazy-load pdf.js once, applying the worker URL on first load. */\nasync function getPdfjs(): Promise<typeof import('pdfjs-dist')> {\n if (!pdfjsPromise) {\n pdfjsPromise = import('pdfjs-dist').then((pdfjsLib) => {\n if (workerSrc) {\n pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;\n }\n return pdfjsLib;\n });\n }\n return pdfjsPromise;\n}\n\n/**\n * Load a PDF document from a URL. The URL must carry auth (e.g. `?token=…`);\n * pdf.js streams the document directly.\n */\nexport async function loadPdfDocument(url: string): Promise<PDFDocumentProxy> {\n const pdfjsLib = await getPdfjs();\n return pdfjsLib.getDocument({ url }).promise;\n}\n\n/**\n * Render a PDF page to a PNG data URL. The `page` is already loaded (its owning\n * document came from `loadPdfDocument`), so no pdf.js import is needed here.\n */\nexport async function renderPdfPageToDataUrl(\n page: PDFPageProxy,\n scale = 1.0,\n): Promise<{ dataUrl: string; width: number; height: number }> {\n const viewport = page.getViewport({ scale });\n\n const canvas = document.createElement('canvas');\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n\n // pdf.js 6 requires the `canvas` parameter; `canvasContext` is deprecated.\n await page.render({ canvas, viewport }).promise;\n\n return {\n dataUrl: canvas.toDataURL('image/png'),\n width: viewport.width,\n height: viewport.height,\n };\n}\n"],"mappings":";;;AAmBA,IAAI;AAMG,SAAS,gBAAgB,KAAmB;AACjD,cAAY;AACd;AAEA,IAAI;AAGJ,eAAe,WAAiD;AAC9D,MAAI,CAAC,cAAc;AACjB,mBAAe,OAAO,YAAY,EAAE,KAAK,CAAC,aAAa;AACrD,UAAI,WAAW;AACb,iBAAS,oBAAoB,YAAY;AAAA,MAC3C;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAMA,eAAsB,gBAAgB,KAAwC;AAC5E,QAAM,WAAW,MAAM,SAAS;AAChC,SAAO,SAAS,YAAY,EAAE,IAAI,CAAC,EAAE;AACvC;AAMA,eAAsB,uBACpB,MACA,QAAQ,GACqD;AAC7D,QAAM,WAAW,KAAK,YAAY,EAAE,MAAM,CAAC;AAE3C,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,SAAO,QAAQ,SAAS;AACxB,SAAO,SAAS,SAAS;AAGzB,QAAM,KAAK,OAAO,EAAE,QAAQ,SAAS,CAAC,EAAE;AAExC,SAAO;AAAA,IACL,SAAS,OAAO,UAAU,WAAW;AAAA,IACrC,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,EACnB;AACF;","names":[]}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
// src/design-tokens/index.ts
|
|
4
|
+
var tokens = {
|
|
5
|
+
colors: {
|
|
6
|
+
primary: {
|
|
7
|
+
50: "#eff6ff",
|
|
8
|
+
100: "#dbeafe",
|
|
9
|
+
200: "#bfdbfe",
|
|
10
|
+
300: "#93c5fd",
|
|
11
|
+
400: "#60a5fa",
|
|
12
|
+
500: "#0080ff",
|
|
13
|
+
// Main brand color
|
|
14
|
+
600: "#0066cc",
|
|
15
|
+
700: "#0052a3",
|
|
16
|
+
800: "#1e40af",
|
|
17
|
+
900: "#1e3a8a"
|
|
18
|
+
},
|
|
19
|
+
secondary: {
|
|
20
|
+
50: "#f0fffe",
|
|
21
|
+
100: "#e0fffd",
|
|
22
|
+
200: "#b3fffa",
|
|
23
|
+
300: "#66fff6",
|
|
24
|
+
400: "#1afff1",
|
|
25
|
+
500: "#00ffff",
|
|
26
|
+
// Cyan accent
|
|
27
|
+
600: "#00cccc",
|
|
28
|
+
700: "#00a3a3",
|
|
29
|
+
800: "#007a7a",
|
|
30
|
+
900: "#005252"
|
|
31
|
+
},
|
|
32
|
+
semantic: {
|
|
33
|
+
error: "#ef4444",
|
|
34
|
+
errorLight: "#fca5a5",
|
|
35
|
+
errorDark: "#b91c1c",
|
|
36
|
+
warning: "#f59e0b",
|
|
37
|
+
warningLight: "#fcd34d",
|
|
38
|
+
warningDark: "#d97706",
|
|
39
|
+
success: "#10b981",
|
|
40
|
+
successLight: "#6ee7b7",
|
|
41
|
+
successDark: "#047857",
|
|
42
|
+
info: "#3b82f6",
|
|
43
|
+
infoLight: "#93c5fd",
|
|
44
|
+
infoDark: "#1d4ed8"
|
|
45
|
+
},
|
|
46
|
+
neutral: {
|
|
47
|
+
0: "#ffffff",
|
|
48
|
+
50: "#f9fafb",
|
|
49
|
+
100: "#f3f4f6",
|
|
50
|
+
200: "#e5e7eb",
|
|
51
|
+
300: "#d1d5db",
|
|
52
|
+
400: "#9ca3af",
|
|
53
|
+
500: "#6b7280",
|
|
54
|
+
600: "#4b5563",
|
|
55
|
+
700: "#374151",
|
|
56
|
+
800: "#1f2937",
|
|
57
|
+
900: "#111827",
|
|
58
|
+
950: "#030712",
|
|
59
|
+
1e3: "#000000"
|
|
60
|
+
},
|
|
61
|
+
background: {
|
|
62
|
+
primary: "#ffffff",
|
|
63
|
+
secondary: "#f9fafb",
|
|
64
|
+
tertiary: "#f3f4f6",
|
|
65
|
+
inverse: "#111827"
|
|
66
|
+
},
|
|
67
|
+
text: {
|
|
68
|
+
primary: "#111827",
|
|
69
|
+
secondary: "#4b5563",
|
|
70
|
+
tertiary: "#6b7280",
|
|
71
|
+
disabled: "#9ca3af",
|
|
72
|
+
inverse: "#ffffff"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
spacing: {
|
|
76
|
+
0: "0",
|
|
77
|
+
xs: "0.25rem",
|
|
78
|
+
// 4px
|
|
79
|
+
sm: "0.5rem",
|
|
80
|
+
// 8px
|
|
81
|
+
md: "1rem",
|
|
82
|
+
// 16px
|
|
83
|
+
lg: "1.5rem",
|
|
84
|
+
// 24px
|
|
85
|
+
xl: "2rem",
|
|
86
|
+
// 32px
|
|
87
|
+
"2xl": "2.5rem",
|
|
88
|
+
// 40px
|
|
89
|
+
"3xl": "3rem",
|
|
90
|
+
// 48px
|
|
91
|
+
"4xl": "4rem",
|
|
92
|
+
// 64px
|
|
93
|
+
"5xl": "5rem"
|
|
94
|
+
// 80px
|
|
95
|
+
},
|
|
96
|
+
typography: {
|
|
97
|
+
fontFamily: {
|
|
98
|
+
sans: 'Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
|
|
99
|
+
mono: 'JetBrains Mono, "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace'
|
|
100
|
+
},
|
|
101
|
+
fontSize: {
|
|
102
|
+
xs: "0.75rem",
|
|
103
|
+
// 12px
|
|
104
|
+
sm: "0.875rem",
|
|
105
|
+
// 14px
|
|
106
|
+
base: "1rem",
|
|
107
|
+
// 16px
|
|
108
|
+
lg: "1.125rem",
|
|
109
|
+
// 18px
|
|
110
|
+
xl: "1.25rem",
|
|
111
|
+
// 20px
|
|
112
|
+
"2xl": "1.5rem",
|
|
113
|
+
// 24px
|
|
114
|
+
"3xl": "1.875rem",
|
|
115
|
+
// 30px
|
|
116
|
+
"4xl": "2.25rem",
|
|
117
|
+
// 36px
|
|
118
|
+
"5xl": "3rem"
|
|
119
|
+
// 48px
|
|
120
|
+
},
|
|
121
|
+
fontWeight: {
|
|
122
|
+
thin: 100,
|
|
123
|
+
light: 300,
|
|
124
|
+
normal: 400,
|
|
125
|
+
medium: 500,
|
|
126
|
+
semibold: 600,
|
|
127
|
+
bold: 700,
|
|
128
|
+
black: 900
|
|
129
|
+
},
|
|
130
|
+
lineHeight: {
|
|
131
|
+
none: 1,
|
|
132
|
+
tight: 1.25,
|
|
133
|
+
snug: 1.375,
|
|
134
|
+
normal: 1.5,
|
|
135
|
+
relaxed: 1.625,
|
|
136
|
+
loose: 2
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
borderRadius: {
|
|
140
|
+
none: "0",
|
|
141
|
+
sm: "0.125rem",
|
|
142
|
+
// 2px
|
|
143
|
+
base: "0.25rem",
|
|
144
|
+
// 4px
|
|
145
|
+
md: "0.375rem",
|
|
146
|
+
// 6px
|
|
147
|
+
lg: "0.5rem",
|
|
148
|
+
// 8px
|
|
149
|
+
xl: "0.75rem",
|
|
150
|
+
// 12px
|
|
151
|
+
"2xl": "1rem",
|
|
152
|
+
// 16px
|
|
153
|
+
"3xl": "1.5rem",
|
|
154
|
+
// 24px
|
|
155
|
+
full: "9999px"
|
|
156
|
+
},
|
|
157
|
+
shadows: {
|
|
158
|
+
none: "none",
|
|
159
|
+
xs: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
|
|
160
|
+
sm: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
|
|
161
|
+
base: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
|
|
162
|
+
md: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
|
|
163
|
+
lg: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
|
|
164
|
+
xl: "0 25px 50px -12px rgb(0 0 0 / 0.25)",
|
|
165
|
+
inner: "inset 0 2px 4px 0 rgb(0 0 0 / 0.05)"
|
|
166
|
+
},
|
|
167
|
+
transitions: {
|
|
168
|
+
duration: {
|
|
169
|
+
fast: "150ms",
|
|
170
|
+
base: "250ms",
|
|
171
|
+
slow: "350ms",
|
|
172
|
+
slower: "500ms"
|
|
173
|
+
},
|
|
174
|
+
timing: {
|
|
175
|
+
linear: "linear",
|
|
176
|
+
ease: "cubic-bezier(0.4, 0, 0.2, 1)",
|
|
177
|
+
easeIn: "cubic-bezier(0.4, 0, 1, 1)",
|
|
178
|
+
easeOut: "cubic-bezier(0, 0, 0.2, 1)",
|
|
179
|
+
easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)"
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
breakpoints: {
|
|
183
|
+
sm: "640px",
|
|
184
|
+
md: "768px",
|
|
185
|
+
lg: "1024px",
|
|
186
|
+
xl: "1280px",
|
|
187
|
+
"2xl": "1536px"
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
function generateCSSVariables() {
|
|
191
|
+
const cssVars = [":root {"];
|
|
192
|
+
Object.entries(tokens.colors.primary).forEach(([key, value]) => {
|
|
193
|
+
cssVars.push(` --semiont-color-primary-${key}: ${value};`);
|
|
194
|
+
});
|
|
195
|
+
Object.entries(tokens.colors.secondary).forEach(([key, value]) => {
|
|
196
|
+
cssVars.push(` --semiont-color-secondary-${key}: ${value};`);
|
|
197
|
+
});
|
|
198
|
+
Object.entries(tokens.colors.semantic).forEach(([key, value]) => {
|
|
199
|
+
cssVars.push(` --semiont-color-${key.toLowerCase().replace(/([A-Z])/g, "-$1").toLowerCase()}: ${value};`);
|
|
200
|
+
});
|
|
201
|
+
Object.entries(tokens.colors.neutral).forEach(([key, value]) => {
|
|
202
|
+
cssVars.push(` --semiont-color-neutral-${key}: ${value};`);
|
|
203
|
+
});
|
|
204
|
+
Object.entries(tokens.spacing).forEach(([key, value]) => {
|
|
205
|
+
cssVars.push(` --semiont-spacing-${key}: ${value};`);
|
|
206
|
+
});
|
|
207
|
+
Object.entries(tokens.typography.fontSize).forEach(([key, value]) => {
|
|
208
|
+
cssVars.push(` --semiont-text-${key}: ${value};`);
|
|
209
|
+
});
|
|
210
|
+
Object.entries(tokens.typography.fontWeight).forEach(([key, value]) => {
|
|
211
|
+
cssVars.push(` --semiont-font-${key}: ${value};`);
|
|
212
|
+
});
|
|
213
|
+
cssVars.push(` --semiont-font-sans: ${tokens.typography.fontFamily.sans};`);
|
|
214
|
+
cssVars.push(` --semiont-font-mono: ${tokens.typography.fontFamily.mono};`);
|
|
215
|
+
Object.entries(tokens.borderRadius).forEach(([key, value]) => {
|
|
216
|
+
cssVars.push(` --semiont-radius-${key}: ${value};`);
|
|
217
|
+
});
|
|
218
|
+
Object.entries(tokens.shadows).forEach(([key, value]) => {
|
|
219
|
+
cssVars.push(` --semiont-shadow-${key}: ${value};`);
|
|
220
|
+
});
|
|
221
|
+
Object.entries(tokens.transitions.duration).forEach(([key, value]) => {
|
|
222
|
+
cssVars.push(` --semiont-duration-${key}: ${value};`);
|
|
223
|
+
});
|
|
224
|
+
cssVars.push("}");
|
|
225
|
+
return cssVars.join("\n");
|
|
226
|
+
}
|
|
227
|
+
var cssVariables = generateCSSVariables();
|
|
228
|
+
|
|
229
|
+
export {
|
|
230
|
+
tokens,
|
|
231
|
+
generateCSSVariables,
|
|
232
|
+
cssVariables
|
|
233
|
+
};
|
|
234
|
+
//# sourceMappingURL=chunk-QT7LYM72.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/design-tokens/index.ts"],"sourcesContent":["/**\n * Semiont Design Tokens\n *\n * Core design tokens for the Semiont design system.\n * These tokens provide the foundation for all component styling\n * and can be consumed via JavaScript or CSS variables.\n */\n\nexport const tokens = {\n colors: {\n primary: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#0080ff', // Main brand color\n 600: '#0066cc',\n 700: '#0052a3',\n 800: '#1e40af',\n 900: '#1e3a8a',\n },\n secondary: {\n 50: '#f0fffe',\n 100: '#e0fffd',\n 200: '#b3fffa',\n 300: '#66fff6',\n 400: '#1afff1',\n 500: '#00ffff', // Cyan accent\n 600: '#00cccc',\n 700: '#00a3a3',\n 800: '#007a7a',\n 900: '#005252',\n },\n semantic: {\n error: '#ef4444',\n errorLight: '#fca5a5',\n errorDark: '#b91c1c',\n warning: '#f59e0b',\n warningLight: '#fcd34d',\n warningDark: '#d97706',\n success: '#10b981',\n successLight: '#6ee7b7',\n successDark: '#047857',\n info: '#3b82f6',\n infoLight: '#93c5fd',\n infoDark: '#1d4ed8',\n },\n neutral: {\n 0: '#ffffff',\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712',\n 1000: '#000000',\n },\n background: {\n primary: '#ffffff',\n secondary: '#f9fafb',\n tertiary: '#f3f4f6',\n inverse: '#111827',\n },\n text: {\n primary: '#111827',\n secondary: '#4b5563',\n tertiary: '#6b7280',\n disabled: '#9ca3af',\n inverse: '#ffffff',\n }\n },\n\n spacing: {\n 0: '0',\n xs: '0.25rem', // 4px\n sm: '0.5rem', // 8px\n md: '1rem', // 16px\n lg: '1.5rem', // 24px\n xl: '2rem', // 32px\n '2xl': '2.5rem', // 40px\n '3xl': '3rem', // 48px\n '4xl': '4rem', // 64px\n '5xl': '5rem', // 80px\n },\n\n typography: {\n fontFamily: {\n sans: 'Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n mono: 'JetBrains Mono, \"SF Mono\", Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n },\n fontSize: {\n xs: '0.75rem', // 12px\n sm: '0.875rem', // 14px\n base: '1rem', // 16px\n lg: '1.125rem', // 18px\n xl: '1.25rem', // 20px\n '2xl': '1.5rem', // 24px\n '3xl': '1.875rem', // 30px\n '4xl': '2.25rem', // 36px\n '5xl': '3rem', // 48px\n },\n fontWeight: {\n thin: 100,\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n black: 900,\n },\n lineHeight: {\n none: 1,\n tight: 1.25,\n snug: 1.375,\n normal: 1.5,\n relaxed: 1.625,\n loose: 2,\n }\n },\n\n borderRadius: {\n none: '0',\n sm: '0.125rem', // 2px\n base: '0.25rem', // 4px\n md: '0.375rem', // 6px\n lg: '0.5rem', // 8px\n xl: '0.75rem', // 12px\n '2xl': '1rem', // 16px\n '3xl': '1.5rem', // 24px\n full: '9999px',\n },\n\n shadows: {\n none: 'none',\n xs: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n sm: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n base: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n md: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n lg: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n xl: '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\n },\n\n transitions: {\n duration: {\n fast: '150ms',\n base: '250ms',\n slow: '350ms',\n slower: '500ms',\n },\n timing: {\n linear: 'linear',\n ease: 'cubic-bezier(0.4, 0, 0.2, 1)',\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n easeOut: 'cubic-bezier(0, 0, 0.2, 1)',\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n }\n },\n\n breakpoints: {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n }\n};\n\n/**\n * Generate CSS custom properties from design tokens\n */\nexport function generateCSSVariables(): string {\n const cssVars: string[] = [':root {'];\n\n // Colors\n Object.entries(tokens.colors.primary).forEach(([key, value]) => {\n cssVars.push(` --semiont-color-primary-${key}: ${value};`);\n });\n\n Object.entries(tokens.colors.secondary).forEach(([key, value]) => {\n cssVars.push(` --semiont-color-secondary-${key}: ${value};`);\n });\n\n Object.entries(tokens.colors.semantic).forEach(([key, value]) => {\n cssVars.push(` --semiont-color-${key.toLowerCase().replace(/([A-Z])/g, '-$1').toLowerCase()}: ${value};`);\n });\n\n Object.entries(tokens.colors.neutral).forEach(([key, value]) => {\n cssVars.push(` --semiont-color-neutral-${key}: ${value};`);\n });\n\n // Spacing\n Object.entries(tokens.spacing).forEach(([key, value]) => {\n cssVars.push(` --semiont-spacing-${key}: ${value};`);\n });\n\n // Typography\n Object.entries(tokens.typography.fontSize).forEach(([key, value]) => {\n cssVars.push(` --semiont-text-${key}: ${value};`);\n });\n\n Object.entries(tokens.typography.fontWeight).forEach(([key, value]) => {\n cssVars.push(` --semiont-font-${key}: ${value};`);\n });\n\n cssVars.push(` --semiont-font-sans: ${tokens.typography.fontFamily.sans};`);\n cssVars.push(` --semiont-font-mono: ${tokens.typography.fontFamily.mono};`);\n\n // Border radius\n Object.entries(tokens.borderRadius).forEach(([key, value]) => {\n cssVars.push(` --semiont-radius-${key}: ${value};`);\n });\n\n // Shadows\n Object.entries(tokens.shadows).forEach(([key, value]) => {\n cssVars.push(` --semiont-shadow-${key}: ${value};`);\n });\n\n // Transitions\n Object.entries(tokens.transitions.duration).forEach(([key, value]) => {\n cssVars.push(` --semiont-duration-${key}: ${value};`);\n });\n\n cssVars.push('}');\n\n return cssVars.join('\\n');\n}\n\n// Export a pre-generated CSS string for convenience\nexport const cssVariables = generateCSSVariables();\n\n// Type exports for TypeScript support\nexport type ColorToken = keyof typeof tokens.colors;\nexport type SpacingToken = keyof typeof tokens.spacing;\nexport type TypographyToken = keyof typeof tokens.typography;\nexport type BorderRadiusToken = keyof typeof tokens.borderRadius;\nexport type ShadowToken = keyof typeof tokens.shadows;\nexport type TransitionToken = keyof typeof tokens.transitions;"],"mappings":"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","names":[]}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
__commonJS,
|
|
7
7
|
__glob
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-YBGN4ACY.js";
|
|
9
9
|
|
|
10
10
|
// ../../node_modules/rxjs/dist/cjs/internal/util/isFunction.js
|
|
11
11
|
var require_isFunction = __commonJS({
|
|
@@ -9549,35 +9549,35 @@ import { Fragment, jsx as jsx3 } from "react/jsx-runtime";
|
|
|
9549
9549
|
|
|
9550
9550
|
// import("../../translations/**/*.json") in src/contexts/TranslationContext.tsx
|
|
9551
9551
|
var globImport_translations_json = __glob({
|
|
9552
|
-
"../../translations/ar.json": () => import("./ar-
|
|
9553
|
-
"../../translations/bn.json": () => import("./bn-
|
|
9554
|
-
"../../translations/cs.json": () => import("./cs-
|
|
9555
|
-
"../../translations/da.json": () => import("./da-
|
|
9556
|
-
"../../translations/de.json": () => import("./de-
|
|
9557
|
-
"../../translations/el.json": () => import("./el-
|
|
9558
|
-
"../../translations/en.json": () => import("./en-
|
|
9559
|
-
"../../translations/es.json": () => import("./es-
|
|
9560
|
-
"../../translations/fa.json": () => import("./fa-
|
|
9561
|
-
"../../translations/fi.json": () => import("./fi-
|
|
9562
|
-
"../../translations/fr.json": () => import("./fr-
|
|
9563
|
-
"../../translations/he.json": () => import("./he-
|
|
9564
|
-
"../../translations/hi.json": () => import("./hi-
|
|
9565
|
-
"../../translations/id.json": () => import("./id-
|
|
9566
|
-
"../../translations/it.json": () => import("./it-
|
|
9567
|
-
"../../translations/ja.json": () => import("./ja-
|
|
9568
|
-
"../../translations/ko.json": () => import("./ko-
|
|
9569
|
-
"../../translations/ms.json": () => import("./ms-
|
|
9570
|
-
"../../translations/nl.json": () => import("./nl-
|
|
9571
|
-
"../../translations/no.json": () => import("./no-
|
|
9572
|
-
"../../translations/pl.json": () => import("./pl-
|
|
9573
|
-
"../../translations/pt.json": () => import("./pt-
|
|
9574
|
-
"../../translations/ro.json": () => import("./ro-
|
|
9575
|
-
"../../translations/sv.json": () => import("./sv-
|
|
9576
|
-
"../../translations/th.json": () => import("./th-
|
|
9577
|
-
"../../translations/tr.json": () => import("./tr-
|
|
9578
|
-
"../../translations/uk.json": () => import("./uk-
|
|
9579
|
-
"../../translations/vi.json": () => import("./vi-
|
|
9580
|
-
"../../translations/zh.json": () => import("./zh-
|
|
9552
|
+
"../../translations/ar.json": () => import("./ar-WA47UUWA.js"),
|
|
9553
|
+
"../../translations/bn.json": () => import("./bn-5ANDRIU6.js"),
|
|
9554
|
+
"../../translations/cs.json": () => import("./cs-3RU7F4JX.js"),
|
|
9555
|
+
"../../translations/da.json": () => import("./da-GSW5P5HG.js"),
|
|
9556
|
+
"../../translations/de.json": () => import("./de-JUAUYF4Z.js"),
|
|
9557
|
+
"../../translations/el.json": () => import("./el-JNLWCKEC.js"),
|
|
9558
|
+
"../../translations/en.json": () => import("./en-RBN2GUHF.js"),
|
|
9559
|
+
"../../translations/es.json": () => import("./es-WPOX225H.js"),
|
|
9560
|
+
"../../translations/fa.json": () => import("./fa-TAEP6N77.js"),
|
|
9561
|
+
"../../translations/fi.json": () => import("./fi-ZVZHANSP.js"),
|
|
9562
|
+
"../../translations/fr.json": () => import("./fr-VLZW7M4N.js"),
|
|
9563
|
+
"../../translations/he.json": () => import("./he-QFAFYA77.js"),
|
|
9564
|
+
"../../translations/hi.json": () => import("./hi-AO3DQPCV.js"),
|
|
9565
|
+
"../../translations/id.json": () => import("./id-GTXF42WM.js"),
|
|
9566
|
+
"../../translations/it.json": () => import("./it-AS5GM232.js"),
|
|
9567
|
+
"../../translations/ja.json": () => import("./ja-GZ4HLUOF.js"),
|
|
9568
|
+
"../../translations/ko.json": () => import("./ko-A4XUXFGJ.js"),
|
|
9569
|
+
"../../translations/ms.json": () => import("./ms-YBAO3S6K.js"),
|
|
9570
|
+
"../../translations/nl.json": () => import("./nl-3TJGIIIU.js"),
|
|
9571
|
+
"../../translations/no.json": () => import("./no-4AXIQPRQ.js"),
|
|
9572
|
+
"../../translations/pl.json": () => import("./pl-5GP6GKXO.js"),
|
|
9573
|
+
"../../translations/pt.json": () => import("./pt-26Y6JFG5.js"),
|
|
9574
|
+
"../../translations/ro.json": () => import("./ro-C7UXFRWJ.js"),
|
|
9575
|
+
"../../translations/sv.json": () => import("./sv-44DVD76T.js"),
|
|
9576
|
+
"../../translations/th.json": () => import("./th-GIQRTBOY.js"),
|
|
9577
|
+
"../../translations/tr.json": () => import("./tr-WMQWO4D6.js"),
|
|
9578
|
+
"../../translations/uk.json": () => import("./uk-I7ML6RGG.js"),
|
|
9579
|
+
"../../translations/vi.json": () => import("./vi-FGWECASQ.js"),
|
|
9580
|
+
"../../translations/zh.json": () => import("./zh-L5FN73XC.js")
|
|
9581
9581
|
});
|
|
9582
9582
|
|
|
9583
9583
|
// src/contexts/TranslationContext.tsx
|
|
@@ -9941,4 +9941,4 @@ export {
|
|
|
9941
9941
|
require_zipWith,
|
|
9942
9942
|
require_cjs
|
|
9943
9943
|
};
|
|
9944
|
-
//# sourceMappingURL=chunk-
|
|
9944
|
+
//# sourceMappingURL=chunk-WHUGODTB.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
// ../../node_modules/clsx/dist/clsx.mjs
|
|
4
|
+
function r(e) {
|
|
5
|
+
var t, f, n = "";
|
|
6
|
+
if ("string" == typeof e || "number" == typeof e) n += e;
|
|
7
|
+
else if ("object" == typeof e) if (Array.isArray(e)) {
|
|
8
|
+
var o = e.length;
|
|
9
|
+
for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
|
|
10
|
+
} else for (f in e) e[f] && (n && (n += " "), n += f);
|
|
11
|
+
return n;
|
|
12
|
+
}
|
|
13
|
+
function clsx() {
|
|
14
|
+
for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
|
|
15
|
+
return n;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
clsx
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=chunk-XUDKYAVC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/clsx/dist/clsx.mjs"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;"],"mappings":";;;AAAA,SAAS,EAAE,GAAE;AAAC,MAAI,GAAE,GAAE,IAAE;AAAG,MAAG,YAAU,OAAO,KAAG,YAAU,OAAO,EAAE,MAAG;AAAA,WAAU,YAAU,OAAO,EAAE,KAAG,MAAM,QAAQ,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE;AAAO,SAAI,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,MAAI,IAAE,EAAE,EAAE,CAAC,CAAC,OAAK,MAAI,KAAG,MAAK,KAAG;AAAA,EAAE,MAAM,MAAI,KAAK,EAAE,GAAE,CAAC,MAAI,MAAI,KAAG,MAAK,KAAG;AAAG,SAAO;AAAC;AAAQ,SAAS,OAAM;AAAC,WAAQ,GAAE,GAAE,IAAE,GAAE,IAAE,IAAG,IAAE,UAAU,QAAO,IAAE,GAAE,IAAI,EAAC,IAAE,UAAU,CAAC,OAAK,IAAE,EAAE,CAAC,OAAK,MAAI,KAAG,MAAK,KAAG;AAAG,SAAO;AAAC;","names":[]}
|
|
@@ -11,7 +11,11 @@ var __glob = (map) => (path) => {
|
|
|
11
11
|
throw new Error("Module not found in bundle: " + path);
|
|
12
12
|
};
|
|
13
13
|
var __commonJS = (cb, mod) => function __require() {
|
|
14
|
-
|
|
14
|
+
try {
|
|
15
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
16
|
+
} catch (e) {
|
|
17
|
+
throw mod = 0, e;
|
|
18
|
+
}
|
|
15
19
|
};
|
|
16
20
|
var __export = (target, all) => {
|
|
17
21
|
for (var name in all)
|
|
@@ -40,4 +44,4 @@ export {
|
|
|
40
44
|
__export,
|
|
41
45
|
__toESM
|
|
42
46
|
};
|
|
43
|
-
//# sourceMappingURL=chunk-
|
|
47
|
+
//# sourceMappingURL=chunk-YBGN4ACY.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-YBGN4ACY.js";
|
|
3
3
|
|
|
4
4
|
// translations/cs.json
|
|
5
5
|
var Toolbar = {
|
|
@@ -402,4 +402,4 @@ export {
|
|
|
402
402
|
UnifiedAnnotationsPanel,
|
|
403
403
|
cs_default as default
|
|
404
404
|
};
|
|
405
|
-
//# sourceMappingURL=cs-
|
|
405
|
+
//# sourceMappingURL=cs-3RU7F4JX.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-YBGN4ACY.js";
|
|
3
3
|
|
|
4
4
|
// translations/da.json
|
|
5
5
|
var Toolbar = {
|
|
@@ -402,4 +402,4 @@ export {
|
|
|
402
402
|
UnifiedAnnotationsPanel,
|
|
403
403
|
da_default as default
|
|
404
404
|
};
|
|
405
|
-
//# sourceMappingURL=da-
|
|
405
|
+
//# sourceMappingURL=da-GSW5P5HG.js.map
|