@semiont/browser 0.5.30 → 0.5.32
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/assets/{ChevronLeftIcon-BcDi-sgg.js → ChevronLeftIcon-ikKcEfM5.js} +2 -2
- package/dist/assets/{ChevronLeftIcon-BcDi-sgg.js.map → ChevronLeftIcon-ikKcEfM5.js.map} +1 -1
- package/dist/assets/{CommandLineIcon-O8NfVSEq.js → CommandLineIcon-B3W-9AYr.js} +2 -2
- package/dist/assets/{CommandLineIcon-O8NfVSEq.js.map → CommandLineIcon-B3W-9AYr.js.map} +1 -1
- package/dist/assets/{CookiePreferences-DHgkny7X.js → CookiePreferences-CWZIFYNC.js} +2 -2
- package/dist/assets/{CookiePreferences-DHgkny7X.js.map → CookiePreferences-CWZIFYNC.js.map} +1 -1
- package/dist/assets/{KeyboardShortcutsContext-CBFjGYDr.js → KeyboardShortcutsContext-CSFk3vP6.js} +2 -2
- package/dist/assets/{KeyboardShortcutsContext-CBFjGYDr.js.map → KeyboardShortcutsContext-CSFk3vP6.js.map} +1 -1
- package/dist/assets/{PdfAnnotationCanvas.client-LSH3PZPY-DuFgtMhI.js → PdfAnnotationCanvas.client-LSH3PZPY-D-7UQNP4.js} +2 -2
- package/dist/assets/{PdfAnnotationCanvas.client-LSH3PZPY-DuFgtMhI.js.map → PdfAnnotationCanvas.client-LSH3PZPY-D-7UQNP4.js.map} +1 -1
- package/dist/assets/{ToolbarPanels-COwH5BrV.js → ToolbarPanels-CbF3qEos.js} +2 -2
- package/dist/assets/{ToolbarPanels-COwH5BrV.js.map → ToolbarPanels-CbF3qEos.js.map} +1 -1
- package/dist/assets/{XMarkIcon-CVrfCz2h.js → XMarkIcon-Dt8lUQLh.js} +2 -2
- package/dist/assets/{XMarkIcon-CVrfCz2h.js.map → XMarkIcon-Dt8lUQLh.js.map} +1 -1
- package/dist/assets/{client-5Fze6y-0.js → client-CXKycZZZ.js} +2 -2
- package/dist/assets/{client-5Fze6y-0.js.map → client-CXKycZZZ.js.map} +1 -1
- package/dist/assets/{client-Br8hVPSL.js → client-CiXdSyqF.js} +2 -2
- package/dist/assets/{client-Br8hVPSL.js.map → client-CiXdSyqF.js.map} +1 -1
- package/dist/assets/{en-R5XA26NF-B_rafaNP.js → en-R5XA26NF-BxJGw0oZ.js} +1 -1
- package/dist/assets/{i18n-zIDJOEfo.js → i18n-CywLsdxn.js} +2 -2
- package/dist/assets/i18n-CywLsdxn.js.map +1 -0
- package/dist/assets/{index-DikwAWOa.js → index-cHWd4mGO.js} +52 -52
- package/dist/assets/index-cHWd4mGO.js.map +1 -0
- package/dist/assets/{layout-DOcJwulX.js → layout-3T2CwuLU.js} +2 -2
- package/dist/assets/{layout-DOcJwulX.js.map → layout-3T2CwuLU.js.map} +1 -1
- package/dist/assets/{layout-BYYBhrUM.js → layout-B4A7CIsE.js} +2 -2
- package/dist/assets/{layout-BYYBhrUM.js.map → layout-B4A7CIsE.js.map} +1 -1
- package/dist/assets/{layout-B4mP42tI.js → layout-CGq5doN0.js} +2 -2
- package/dist/assets/{layout-B4mP42tI.js.map → layout-CGq5doN0.js.map} +1 -1
- package/dist/assets/{layout-CLyZ3jHm.js → layout-DSvS5iO0.js} +2 -2
- package/dist/assets/{layout-CLyZ3jHm.js.map → layout-DSvS5iO0.js.map} +1 -1
- package/dist/assets/{not-found-Ci6X4tm9.js → not-found-k9OeYO0z.js} +2 -2
- package/dist/assets/{not-found-Ci6X4tm9.js.map → not-found-k9OeYO0z.js.map} +1 -1
- package/dist/assets/{page-CSMUzvRi.js → page-BNXN9uWs.js} +2 -2
- package/dist/assets/{page-CSMUzvRi.js.map → page-BNXN9uWs.js.map} +1 -1
- package/dist/assets/{page--ofr4a58.js → page-BWTL-Lea.js} +2 -2
- package/dist/assets/{page--ofr4a58.js.map → page-BWTL-Lea.js.map} +1 -1
- package/dist/assets/{page-DhCdpcx2.js → page-BfbTxteF.js} +2 -2
- package/dist/assets/{page-DhCdpcx2.js.map → page-BfbTxteF.js.map} +1 -1
- package/dist/assets/{page-C9pkWGVi.js → page-BhPjX09z.js} +2 -2
- package/dist/assets/{page-C9pkWGVi.js.map → page-BhPjX09z.js.map} +1 -1
- package/dist/assets/{page-CO9mlfK-.js → page-Bk2UhTqA.js} +2 -2
- package/dist/assets/{page-CO9mlfK-.js.map → page-Bk2UhTqA.js.map} +1 -1
- package/dist/assets/{page-BYW9mwEo.js → page-CJnENX8F.js} +2 -2
- package/dist/assets/{page-BYW9mwEo.js.map → page-CJnENX8F.js.map} +1 -1
- package/dist/assets/{page-Ce6fw6P9.js → page-Ct7GNMjQ.js} +2 -2
- package/dist/assets/{page-Ce6fw6P9.js.map → page-Ct7GNMjQ.js.map} +1 -1
- package/dist/assets/{page-FoKU0iob.js → page-CywSuXyN.js} +2 -2
- package/dist/assets/{page-FoKU0iob.js.map → page-CywSuXyN.js.map} +1 -1
- package/dist/assets/{page-QXiNSjcX.js → page-D-_kPKxI.js} +2 -2
- package/dist/assets/{page-QXiNSjcX.js.map → page-D-_kPKxI.js.map} +1 -1
- package/dist/assets/{page-CCSJqjWt.js → page-DLiS_avb.js} +2 -2
- package/dist/assets/{page-CCSJqjWt.js.map → page-DLiS_avb.js.map} +1 -1
- package/dist/assets/{page-DveRPD7J.js → page-DS47DLy5.js} +2 -2
- package/dist/assets/{page-DveRPD7J.js.map → page-DS47DLy5.js.map} +1 -1
- package/dist/assets/{page-KNTWGNqU.js → page-DYcAqNIR.js} +2 -2
- package/dist/assets/{page-KNTWGNqU.js.map → page-DYcAqNIR.js.map} +1 -1
- package/dist/assets/{page-P0n7aLDe.js → page-DYqW4iWr.js} +2 -2
- package/dist/assets/{page-P0n7aLDe.js.map → page-DYqW4iWr.js.map} +1 -1
- package/dist/assets/page-De7BG-0h.js +2 -0
- package/dist/assets/{page-C5yXoqok.js.map → page-De7BG-0h.js.map} +1 -1
- package/dist/assets/{page-DP-LdVo6.js → page-DwyBQfbg.js} +2 -2
- package/dist/assets/{page-DP-LdVo6.js.map → page-DwyBQfbg.js.map} +1 -1
- package/dist/assets/{page-C9DNsp3i.js → page-OhVx5cMH.js} +2 -2
- package/dist/assets/{page-C9DNsp3i.js.map → page-OhVx5cMH.js.map} +1 -1
- package/dist/assets/{page-S-g5YvWH.js → page-XISoI7Ji.js} +2 -2
- package/dist/assets/{page-S-g5YvWH.js.map → page-XISoI7Ji.js.map} +1 -1
- package/dist/assets/{page-jVd15vic.js → page-bR7KMw9p.js} +2 -2
- package/dist/assets/{page-jVd15vic.js.map → page-bR7KMw9p.js.map} +1 -1
- package/dist/assets/{pdf-DLN6u172.js → pdf-BFxsW_Qg.js} +2 -2
- package/dist/assets/{pdf-DLN6u172.js.map → pdf-BFxsW_Qg.js.map} +1 -1
- package/dist/assets/{routing-Cj_EvhT3.js → routing-D-GkAfgE.js} +2 -2
- package/dist/assets/{routing-Cj_EvhT3.js.map → routing-D-GkAfgE.js.map} +1 -1
- package/dist/assets/{routing-NHl4gs1C.js → routing-D5d0e59H.js} +2 -2
- package/dist/assets/{routing-NHl4gs1C.js.map → routing-D5d0e59H.js.map} +1 -1
- package/dist/assets/{vendor-GEwJ7U4m.js → vendor-vK2W55bZ.js} +2 -2
- package/dist/assets/{vendor-GEwJ7U4m.js.map → vendor-vK2W55bZ.js.map} +1 -1
- package/dist/assets/{web-CyrRuj1m.js → web-DWjmWGs5.js} +2 -2
- package/dist/assets/{web-CyrRuj1m.js.map → web-DWjmWGs5.js.map} +1 -1
- package/dist/index.html +3 -3
- package/package.json +1 -1
- package/dist/assets/i18n-zIDJOEfo.js.map +0 -1
- package/dist/assets/index-DikwAWOa.js.map +0 -1
- package/dist/assets/page-C5yXoqok.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PdfAnnotationCanvas.client-LSH3PZPY-DuFgtMhI.js","names":[],"sources":["../../../../packages/react-ui/dist/PdfAnnotationCanvas.client-LSH3PZPY.js"],"sourcesContent":["'use client';\n\"use client\";\nimport {\n loadPdfDocument,\n renderPdfPageToDataUrl,\n toViewportAnchorRect\n} from \"./chunk-3ZBKCWUZ.js\";\nimport {\n useTranslations\n} from \"./chunk-G4VHL4UA.js\";\nimport \"./chunk-SDKFZLEX.js\";\nimport \"./chunk-O23TLLXW.js\";\n\n// src/components/pdf-annotation/PdfAnnotationCanvas.tsx\nimport { useRef, useState, useCallback, useEffect, useMemo } from \"react\";\nimport { resourceId as toResourceId } from \"@semiont/core\";\nimport { createFragmentSelector, anchorRuns, isTextRun, textUnder } from \"@semiont/core\";\n\n// src/components/pdf-annotation/rects-for-page.ts\nimport { getTargetSelector, parseFragmentSelector } from \"@semiont/core\";\nfunction fragmentSelectors(target) {\n const selector = getTargetSelector(target);\n if (!selector) return [];\n const selectors = Array.isArray(selector) ? selector : [selector];\n return selectors.filter((s) => s.type === \"FragmentSelector\").map((s) => s);\n}\nfunction rectsForPage(annotations, pageNumber) {\n const rects = [];\n for (const annotation of annotations) {\n fragmentSelectors(annotation.target).forEach((sel, selectorIndex) => {\n const coord = parseFragmentSelector(sel.value);\n if (coord && coord.page === pageNumber) {\n rects.push({ annId: annotation.id, selectorIndex, coord, annotation });\n }\n });\n }\n return rects;\n}\n\n// src/components/pdf-annotation/estimate-slot-height.ts\nfunction estimateSlotHeight(columnWidth, rasterWidth, aspect) {\n if (!columnWidth || !rasterWidth || !aspect) return null;\n if (columnWidth <= 0 || rasterWidth <= 0 || aspect <= 0) return null;\n return Math.round(Math.min(columnWidth, rasterWidth) * aspect);\n}\n\n// src/components/pdf-annotation/PdfAnnotationCanvas.tsx\nimport { createHoverHandlers } from \"@semiont/sdk\";\n\n// src/lib/pdf-coordinates.ts\nfunction canvasToPdfCoordinates(canvasRect, page, _pageWidth, pageHeight, scale = 1) {\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 const pdfX = x1 / scale;\n const pdfWidth = (x2 - x1) / scale;\n const pdfY = pageHeight - y2 / scale;\n const pdfHeight = (y2 - y1) / scale;\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}\nfunction pdfToCanvasCoordinates(pdfCoord, pageHeight, scale = 1) {\n const canvasX = pdfCoord.x * scale;\n const canvasWidth = pdfCoord.width * scale;\n const canvasY = (pageHeight - pdfCoord.y - pdfCoord.height) * scale;\n const canvasHeight = pdfCoord.height * scale;\n return {\n x: canvasX,\n y: canvasY,\n width: canvasWidth,\n height: canvasHeight\n };\n}\n\n// src/components/pdf-annotation/PdfAnnotationCanvas.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar PRELOAD_MARGIN = \"100% 0px\";\nvar STRIP_PAGE_WIDTH = 30;\nvar SCROLL_AXIS = \"vertical\";\nfunction scrollElementIntoView(el, options) {\n if (typeof el?.scrollIntoView === \"function\") el.scrollIntoView(options);\n}\nfunction getMotivationColor(motivation) {\n if (!motivation) {\n return { stroke: \"rgb(156, 163, 175)\", fill: \"rgba(156, 163, 175, 0.2)\" };\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}\nfunction PdfPageView({\n doc,\n pageNumber,\n scale,\n resourceUri,\n existingAnnotations,\n drawingMode,\n selectedMotivation,\n session,\n hoveredAnnotationId,\n selectedAnnotationId,\n hoverDelayMs,\n fetchResourceAnchored\n}) {\n const [pageImageUrl, setPageImageUrl] = useState(null);\n const [pageDimensions, setPageDimensions] = useState(null);\n const [pageAnchored, setPageAnchored] = useState(null);\n const [displayDimensions, setDisplayDimensions] = useState(null);\n const [errorKey, setErrorKey] = useState(null);\n const t = useTranslations(\"PdfViewer\");\n const [isDrawing, setIsDrawing] = useState(false);\n const [selection, setSelection] = useState(null);\n const imageRef = useRef(null);\n useEffect(() => {\n let cancelled = false;\n async function resolveAnchored(page) {\n try {\n const runs = (await page.getTextContent()).items.filter(isTextRun);\n if (runs.length > 0) return anchorRuns(runs, pageNumber);\n return await fetchResourceAnchored();\n } catch {\n return null;\n }\n }\n async function loadPage() {\n try {\n const page = await doc.getPage(pageNumber);\n if (cancelled) return;\n const viewport = page.getViewport({ scale: 1 });\n setPageDimensions({ width: viewport.width, height: viewport.height });\n const [anchored, { dataUrl }] = await Promise.all([\n resolveAnchored(page),\n renderPdfPageToDataUrl(page, scale)\n ]);\n if (cancelled) return;\n setPageAnchored(anchored);\n setPageImageUrl(dataUrl);\n } catch (err) {\n if (cancelled) return;\n console.error(\"Error loading page:\", err);\n setErrorKey(\"pageLoadFailed\");\n }\n }\n loadPage();\n return () => {\n cancelled = true;\n };\n }, [doc, pageNumber, scale, fetchResourceAnchored]);\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 updateDisplayDimensions();\n let resizeObserver = null;\n try {\n resizeObserver = new ResizeObserver(updateDisplayDimensions);\n if (imageRef.current) {\n resizeObserver.observe(imageRef.current);\n }\n } catch (error) {\n console.warn(\"ResizeObserver not supported, falling back to window resize listener\");\n window.addEventListener(\"resize\", updateDisplayDimensions);\n }\n return () => {\n if (resizeObserver) {\n resizeObserver.disconnect();\n } else {\n window.removeEventListener(\"resize\", updateDisplayDimensions);\n }\n };\n }, [pageImageUrl]);\n const handleMouseDown = useCallback((e) => {\n if (!drawingMode) return;\n if (!imageRef.current) return;\n const rect = imageRef.current.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n setIsDrawing(true);\n setSelection({\n startX: x,\n startY: y,\n endX: x,\n endY: y\n });\n }, [drawingMode]);\n const handleMouseMove = useCallback((e) => {\n if (!isDrawing || !selection || !imageRef.current) return;\n const rect = imageRef.current.getBoundingClientRect();\n setSelection({\n ...selection,\n endX: e.clientX - rect.left,\n endY: e.clientY - rect.top\n });\n }, [isDrawing, selection]);\n const handleMouseUp = useCallback(() => {\n if (!isDrawing || !selection || !pageDimensions || !displayDimensions || !session) {\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n const dragDistance = Math.sqrt(\n Math.pow(selection.endX - selection.startX, 2) + Math.pow(selection.endY - selection.startY, 2)\n );\n const MIN_DRAG_DISTANCE = 10;\n if (dragDistance < MIN_DRAG_DISTANCE) {\n if (existingAnnotations.length > 0) {\n let hitRect;\n const hit = rectsForPage(existingAnnotations, pageNumber).find((r) => {\n const rect = pdfToCanvasCoordinates(r.coord, pageDimensions.height, 1);\n const scaleX2 = displayDimensions.width / pageDimensions.width;\n const scaleY2 = displayDimensions.height / pageDimensions.height;\n const displayX = rect.x * scaleX2;\n const displayY = rect.y * scaleY2;\n const displayWidth = rect.width * scaleX2;\n const displayHeight = rect.height * scaleY2;\n const inside = selection.endX >= displayX && selection.endX <= displayX + displayWidth && selection.endY >= displayY && selection.endY <= displayY + displayHeight;\n if (inside && imageRef.current) {\n hitRect = toViewportAnchorRect(imageRef.current.getBoundingClientRect(), displayX, displayY, displayWidth, displayHeight);\n }\n return inside;\n });\n if (hit) {\n session?.client.browse.click(hit.annId, hitRect);\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n }\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n const scaleX = pageDimensions.width / displayDimensions.width;\n const scaleY = pageDimensions.height / displayDimensions.height;\n const nativeSelection = {\n startX: selection.startX * scaleX,\n startY: selection.startY * scaleY,\n endX: selection.endX * scaleX,\n endY: selection.endY * scaleY\n };\n const pdfCoord = canvasToPdfCoordinates(\n nativeSelection,\n pageNumber,\n pageDimensions.width,\n pageDimensions.height,\n 1\n // Use scale 1.0 since we already scaled to native coords\n );\n const fragmentSelector = createFragmentSelector(pdfCoord);\n const quoted = pageAnchored ? textUnder(pageAnchored, pdfCoord) : \"\";\n if (selectedMotivation) {\n session.client.mark.request(\n toResourceId(resourceUri),\n [\n {\n type: \"FragmentSelector\",\n conformsTo: \"http://tools.ietf.org/rfc/rfc3778\",\n value: fragmentSelector\n },\n ...quoted ? [{ type: \"TextQuoteSelector\", exact: quoted }] : []\n ],\n selectedMotivation\n );\n }\n setIsDrawing(false);\n }, [isDrawing, selection, pageNumber, pageDimensions, displayDimensions, selectedMotivation, existingAnnotations, session, resourceUri, pageAnchored]);\n const pageRects = rectsForPage(existingAnnotations, pageNumber);\n const { handleMouseEnter, handleMouseLeave } = useMemo(\n () => createHoverHandlers((id) => session?.client.beckon.hover(id), hoverDelayMs),\n [session, hoverDelayMs]\n );\n const { stroke, fill } = getMotivationColor(selectedMotivation ?? null);\n if (errorKey) {\n return /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__error\", children: t(errorKey) });\n }\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: \"semiont-pdf-annotation-canvas__container\",\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 children: [\n pageImageUrl && /* @__PURE__ */ jsx(\n \"img\",\n {\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 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 displayDimensions && pageDimensions && /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__overlay-container\", children: /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__overlay\", children: /* @__PURE__ */ jsxs(\n \"svg\",\n {\n className: \"semiont-pdf-annotation-canvas__svg\",\n width: displayDimensions.width,\n height: displayDimensions.height,\n children: [\n pageRects.map((r) => {\n const rect = pdfToCanvasCoordinates(r.coord, pageDimensions.height, 1);\n const scaleX = displayDimensions.width / pageDimensions.width;\n const scaleY = displayDimensions.height / pageDimensions.height;\n const isHovered = r.annId === hoveredAnnotationId;\n const isSelected = r.annId === selectedAnnotationId;\n const annMotivation = r.annotation.motivation;\n const { stroke: annStroke, fill: annFill } = getMotivationColor(annMotivation);\n return /* @__PURE__ */ jsx(\n \"rect\",\n {\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: (e) => session?.client.browse.click(r.annId, e.currentTarget.getBoundingClientRect()),\n onMouseEnter: () => handleMouseEnter(r.annId),\n onMouseLeave: handleMouseLeave\n },\n `${r.annId}:${r.selectorIndex}`\n );\n }),\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 return /* @__PURE__ */ jsx(\n \"rect\",\n {\n x: rectX,\n y: rectY,\n width: rectWidth,\n height: rectHeight,\n stroke,\n strokeWidth: 2,\n strokeDasharray: \"5,5\",\n fill,\n pointerEvents: \"none\"\n }\n );\n })()\n ]\n }\n ) }) })\n ]\n }\n );\n}\nfunction PdfAnnotationCanvas({\n pdfUrl,\n resourceUri,\n existingAnnotations = [],\n drawingMode,\n selectedMotivation,\n session,\n hoveredAnnotationId,\n selectedAnnotationId,\n hoverDelayMs = 150,\n pageLayout = \"paged\"\n}) {\n const [pdfDoc, setPdfDoc] = useState(null);\n const [numPages, setNumPages] = useState(0);\n const [pageNumber, setPageNumber] = useState(1);\n const [isLoading, setIsLoading] = useState(true);\n const [errorKey, setErrorKey] = useState(null);\n const t = useTranslations(\"PdfViewer\");\n const [pageShape, setPageShape] = useState(null);\n const [columnWidth, setColumnWidth] = useState(null);\n const columnRef = useRef(null);\n const [scale] = useState(1.5);\n const [visiblePages, setVisiblePages] = useState(/* @__PURE__ */ new Set());\n const [onscreenPages, setOnscreenPages] = useState(/* @__PURE__ */ new Set());\n const slotRefs = useRef(/* @__PURE__ */ new Map());\n const observerRef = useRef(null);\n const onscreenRef = useRef(null);\n useEffect(() => {\n let cancelled = false;\n async function loadPdf() {\n try {\n setIsLoading(true);\n setErrorKey(null);\n const doc = await loadPdfDocument(pdfUrl);\n if (cancelled) return;\n setPdfDoc(doc);\n setNumPages(doc.numPages);\n setIsLoading(false);\n try {\n const first = await doc.getPage(1);\n if (cancelled) return;\n const natural = first.getViewport({ scale: 1 });\n setPageShape({\n aspect: natural.height / natural.width,\n rasterWidth: first.getViewport({ scale }).width\n });\n } catch {\n }\n } catch (err) {\n if (cancelled) return;\n console.error(\"Error loading PDF:\", err);\n setErrorKey(\"loadFailed\");\n setIsLoading(false);\n }\n }\n loadPdf();\n return () => {\n cancelled = true;\n };\n }, [pdfUrl, scale]);\n const resourceAnchoredRef = useRef(null);\n const fetchResourceAnchored = useCallback(() => {\n if (!session) return Promise.resolve(null);\n const cached = resourceAnchoredRef.current;\n if (cached && cached.uri === resourceUri) return cached.outcome;\n const uri = resourceUri;\n const outcome = session.client.browse.resourceAnchoredText(toResourceId(uri)).then(\n (served) => served && served.kind === \"extracted\" ? served : null,\n () => {\n if (resourceAnchoredRef.current?.uri === uri) resourceAnchoredRef.current = null;\n return null;\n }\n );\n resourceAnchoredRef.current = { uri, outcome };\n return outcome;\n }, [session, resourceUri]);\n useEffect(() => {\n if (pageLayout !== \"scroll\") return;\n const measure = () => {\n if (columnRef.current) setColumnWidth(columnRef.current.clientWidth);\n };\n measure();\n let observer = null;\n try {\n observer = new ResizeObserver(measure);\n if (columnRef.current) observer.observe(columnRef.current);\n } catch {\n window.addEventListener(\"resize\", measure);\n }\n return () => {\n if (observer) observer.disconnect();\n else window.removeEventListener(\"resize\", measure);\n };\n }, [pageLayout]);\n const slotHeight = estimateSlotHeight(columnWidth, pageShape?.rasterWidth ?? null, pageShape?.aspect ?? null) ?? (pageShape ? Math.round(pageShape.rasterWidth * pageShape.aspect) : null);\n useEffect(() => {\n if (pageLayout !== \"scroll\" || numPages === 0) return;\n let observer = null;\n try {\n observer = new IntersectionObserver(\n (entries) => {\n setVisiblePages((prev) => {\n const next = new Set(prev);\n for (const entry of entries) {\n const page = Number(entry.target.dataset.page);\n if (!page) continue;\n if (entry.isIntersecting) next.add(page);\n else next.delete(page);\n }\n return next;\n });\n },\n { rootMargin: PRELOAD_MARGIN }\n );\n } catch {\n setVisiblePages(new Set(Array.from({ length: numPages }, (_, i) => i + 1)));\n return;\n }\n observerRef.current = observer;\n for (const el of slotRefs.current.values()) observer.observe(el);\n let onscreen = null;\n try {\n onscreen = new IntersectionObserver((entries) => {\n setOnscreenPages((prev) => {\n const next = new Set(prev);\n for (const entry of entries) {\n const page = Number(entry.target.dataset.page);\n if (!page) continue;\n if (entry.isIntersecting) next.add(page);\n else next.delete(page);\n }\n return next;\n });\n });\n onscreenRef.current = onscreen;\n for (const el of slotRefs.current.values()) onscreen.observe(el);\n } catch {\n setOnscreenPages(/* @__PURE__ */ new Set([1]));\n }\n return () => {\n observer.disconnect();\n observerRef.current = null;\n onscreen?.disconnect();\n onscreenRef.current = null;\n };\n }, [pageLayout, numPages]);\n const registerSlot = useCallback((page) => (el) => {\n const previous = slotRefs.current.get(page);\n if (previous) {\n observerRef.current?.unobserve(previous);\n onscreenRef.current?.unobserve(previous);\n }\n if (el) {\n slotRefs.current.set(page, el);\n observerRef.current?.observe(el);\n onscreenRef.current?.observe(el);\n } else {\n slotRefs.current.delete(page);\n }\n }, []);\n const currentTickRef = useRef(null);\n const scrollToPage = useCallback((page) => {\n scrollElementIntoView(slotRefs.current.get(page), { block: \"start\" });\n }, []);\n const currentPage = pageLayout === \"scroll\" ? onscreenPages.size > 0 ? Math.min(...onscreenPages) : 1 : pageNumber;\n useEffect(() => {\n if (numPages === 0) return;\n const BACK = [\"ArrowLeft\", \"PageUp\"];\n const FORWARD = [\"ArrowRight\", \"PageDown\"];\n const onKeyDown = (e) => {\n if (!BACK.includes(e.key) && !FORWARD.includes(e.key)) return;\n if (e.metaKey || e.ctrlKey || e.altKey) return;\n const el = e.target;\n const tag = el?.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\" || el?.isContentEditable) return;\n const next = FORWARD.includes(e.key) ? currentPage + 1 : currentPage - 1;\n if (next < 1 || next > numPages) return;\n e.preventDefault();\n if (pageLayout === \"scroll\") scrollToPage(next);\n else setPageNumber(next);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [numPages, currentPage, pageLayout, scrollToPage]);\n const stripRef = useRef(null);\n useEffect(() => {\n const strip = stripRef.current;\n if (pageLayout !== \"scroll\" || !strip) return;\n let scroller = strip.parentElement;\n while (scroller) {\n const overflowY = getComputedStyle(scroller).overflowY;\n if (overflowY === \"auto\" || overflowY === \"scroll\") break;\n scroller = scroller.parentElement;\n }\n if (!scroller) return;\n const clip = scroller;\n const size = () => {\n strip.style.maxHeight = `${clip.clientHeight}px`;\n };\n size();\n let observer = null;\n try {\n observer = new ResizeObserver(size);\n observer.observe(clip);\n } catch {\n window.addEventListener(\"resize\", size);\n }\n return () => {\n if (observer) observer.disconnect();\n else window.removeEventListener(\"resize\", size);\n };\n }, [pageLayout, numPages, pageShape]);\n useEffect(() => {\n scrollElementIntoView(currentTickRef.current, { block: \"nearest\", inline: \"nearest\" });\n const active = typeof document !== \"undefined\" ? document.activeElement : null;\n if (active && stripRef.current?.contains(active) && active !== currentTickRef.current) {\n currentTickRef.current?.focus();\n }\n }, [currentPage]);\n const pageProps = {\n scale,\n resourceUri,\n existingAnnotations,\n drawingMode,\n selectedMotivation,\n session,\n hoveredAnnotationId,\n selectedAnnotationId,\n hoverDelayMs,\n fetchResourceAnchored\n };\n if (errorKey) {\n return /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__error\", children: t(errorKey) });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: \"semiont-pdf-annotation-canvas\", children: [\n isLoading && /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__loading\", children: t(\"loading\") }),\n pdfDoc && pageLayout === \"scroll\" ? /* @__PURE__ */ jsxs(\"div\", { className: \"semiont-pdf-annotation-canvas__viewport\", \"data-axis\": SCROLL_AXIS, children: [\n numPages > 0 && pageShape && /* @__PURE__ */ jsx(\n \"div\",\n {\n className: \"semiont-pdf-annotation-canvas__strip\",\n \"data-axis\": SCROLL_AXIS,\n \"data-scroller\": \"true\",\n \"aria-orientation\": SCROLL_AXIS,\n ref: stripRef,\n children: Array.from({ length: numPages }, (_, i) => i + 1).map((page) => /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n \"data-page\": page,\n className: \"semiont-pdf-annotation-canvas__strip-page\",\n style: { height: `${Math.round(STRIP_PAGE_WIDTH * pageShape.aspect)}px` },\n \"aria-label\": t(\"pageOf\", { page, total: numPages }),\n tabIndex: page === currentPage ? 0 : -1,\n ...page === currentPage ? { \"aria-current\": \"page\" } : {},\n ref: page === currentPage ? currentTickRef : void 0,\n onClick: () => scrollToPage(page),\n children: page\n },\n page\n ))\n }\n ),\n /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__column\", \"data-axis\": SCROLL_AXIS, ref: columnRef, children: Array.from({ length: numPages }, (_, i) => i + 1).map((page) => /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: registerSlot(page),\n \"data-page\": page,\n className: \"semiont-pdf-annotation-canvas__slot\",\n style: slotHeight ? { minHeight: slotHeight } : void 0,\n children: visiblePages.has(page) && /* @__PURE__ */ jsx(PdfPageView, { doc: pdfDoc, pageNumber: page, ...pageProps })\n },\n page\n )) })\n ] }) : pdfDoc && !isLoading && // `key` is load-bearing: without it React reuses this instance\n // across page changes, so the previous page's raster, text map and\n // load error survive into the next page — a stale overlay, a quote\n // taken from the wrong page, and an error that never clears. Each\n // page is a different thing; mounting it as one resets all of it.\n /* @__PURE__ */ jsx(PdfPageView, { doc: pdfDoc, pageNumber, ...pageProps }, pageNumber),\n numPages > 0 && /* @__PURE__ */ jsxs(\"nav\", { className: \"semiont-pdf-annotation-canvas__controls\", \"aria-label\": t(\"pagination\"), children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n disabled: currentPage <= 1,\n onClick: () => pageLayout === \"scroll\" ? scrollToPage(currentPage - 1) : setPageNumber(pageNumber - 1),\n className: \"semiont-pdf-annotation-canvas__button\",\n children: t(\"previous\")\n }\n ),\n /* @__PURE__ */ jsx(\"span\", { className: \"semiont-pdf-annotation-canvas__page-info\", \"aria-live\": \"polite\", children: t(\"pageOf\", { page: currentPage, total: numPages }) }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n disabled: currentPage >= numPages,\n onClick: () => pageLayout === \"scroll\" ? scrollToPage(currentPage + 1) : setPageNumber(pageNumber + 1),\n className: \"semiont-pdf-annotation-canvas__button\",\n children: t(\"next\")\n }\n )\n ] })\n ] });\n}\nexport {\n PdfAnnotationCanvas\n};\n//# sourceMappingURL=PdfAnnotationCanvas.client-LSH3PZPY.js.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PdfAnnotationCanvas.client-LSH3PZPY-D-7UQNP4.js","names":[],"sources":["../../../../packages/react-ui/dist/PdfAnnotationCanvas.client-LSH3PZPY.js"],"sourcesContent":["'use client';\n\"use client\";\nimport {\n loadPdfDocument,\n renderPdfPageToDataUrl,\n toViewportAnchorRect\n} from \"./chunk-3ZBKCWUZ.js\";\nimport {\n useTranslations\n} from \"./chunk-G4VHL4UA.js\";\nimport \"./chunk-SDKFZLEX.js\";\nimport \"./chunk-O23TLLXW.js\";\n\n// src/components/pdf-annotation/PdfAnnotationCanvas.tsx\nimport { useRef, useState, useCallback, useEffect, useMemo } from \"react\";\nimport { resourceId as toResourceId } from \"@semiont/core\";\nimport { createFragmentSelector, anchorRuns, isTextRun, textUnder } from \"@semiont/core\";\n\n// src/components/pdf-annotation/rects-for-page.ts\nimport { getTargetSelector, parseFragmentSelector } from \"@semiont/core\";\nfunction fragmentSelectors(target) {\n const selector = getTargetSelector(target);\n if (!selector) return [];\n const selectors = Array.isArray(selector) ? selector : [selector];\n return selectors.filter((s) => s.type === \"FragmentSelector\").map((s) => s);\n}\nfunction rectsForPage(annotations, pageNumber) {\n const rects = [];\n for (const annotation of annotations) {\n fragmentSelectors(annotation.target).forEach((sel, selectorIndex) => {\n const coord = parseFragmentSelector(sel.value);\n if (coord && coord.page === pageNumber) {\n rects.push({ annId: annotation.id, selectorIndex, coord, annotation });\n }\n });\n }\n return rects;\n}\n\n// src/components/pdf-annotation/estimate-slot-height.ts\nfunction estimateSlotHeight(columnWidth, rasterWidth, aspect) {\n if (!columnWidth || !rasterWidth || !aspect) return null;\n if (columnWidth <= 0 || rasterWidth <= 0 || aspect <= 0) return null;\n return Math.round(Math.min(columnWidth, rasterWidth) * aspect);\n}\n\n// src/components/pdf-annotation/PdfAnnotationCanvas.tsx\nimport { createHoverHandlers } from \"@semiont/sdk\";\n\n// src/lib/pdf-coordinates.ts\nfunction canvasToPdfCoordinates(canvasRect, page, _pageWidth, pageHeight, scale = 1) {\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 const pdfX = x1 / scale;\n const pdfWidth = (x2 - x1) / scale;\n const pdfY = pageHeight - y2 / scale;\n const pdfHeight = (y2 - y1) / scale;\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}\nfunction pdfToCanvasCoordinates(pdfCoord, pageHeight, scale = 1) {\n const canvasX = pdfCoord.x * scale;\n const canvasWidth = pdfCoord.width * scale;\n const canvasY = (pageHeight - pdfCoord.y - pdfCoord.height) * scale;\n const canvasHeight = pdfCoord.height * scale;\n return {\n x: canvasX,\n y: canvasY,\n width: canvasWidth,\n height: canvasHeight\n };\n}\n\n// src/components/pdf-annotation/PdfAnnotationCanvas.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar PRELOAD_MARGIN = \"100% 0px\";\nvar STRIP_PAGE_WIDTH = 30;\nvar SCROLL_AXIS = \"vertical\";\nfunction scrollElementIntoView(el, options) {\n if (typeof el?.scrollIntoView === \"function\") el.scrollIntoView(options);\n}\nfunction getMotivationColor(motivation) {\n if (!motivation) {\n return { stroke: \"rgb(156, 163, 175)\", fill: \"rgba(156, 163, 175, 0.2)\" };\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}\nfunction PdfPageView({\n doc,\n pageNumber,\n scale,\n resourceUri,\n existingAnnotations,\n drawingMode,\n selectedMotivation,\n session,\n hoveredAnnotationId,\n selectedAnnotationId,\n hoverDelayMs,\n fetchResourceAnchored\n}) {\n const [pageImageUrl, setPageImageUrl] = useState(null);\n const [pageDimensions, setPageDimensions] = useState(null);\n const [pageAnchored, setPageAnchored] = useState(null);\n const [displayDimensions, setDisplayDimensions] = useState(null);\n const [errorKey, setErrorKey] = useState(null);\n const t = useTranslations(\"PdfViewer\");\n const [isDrawing, setIsDrawing] = useState(false);\n const [selection, setSelection] = useState(null);\n const imageRef = useRef(null);\n useEffect(() => {\n let cancelled = false;\n async function resolveAnchored(page) {\n try {\n const runs = (await page.getTextContent()).items.filter(isTextRun);\n if (runs.length > 0) return anchorRuns(runs, pageNumber);\n return await fetchResourceAnchored();\n } catch {\n return null;\n }\n }\n async function loadPage() {\n try {\n const page = await doc.getPage(pageNumber);\n if (cancelled) return;\n const viewport = page.getViewport({ scale: 1 });\n setPageDimensions({ width: viewport.width, height: viewport.height });\n const [anchored, { dataUrl }] = await Promise.all([\n resolveAnchored(page),\n renderPdfPageToDataUrl(page, scale)\n ]);\n if (cancelled) return;\n setPageAnchored(anchored);\n setPageImageUrl(dataUrl);\n } catch (err) {\n if (cancelled) return;\n console.error(\"Error loading page:\", err);\n setErrorKey(\"pageLoadFailed\");\n }\n }\n loadPage();\n return () => {\n cancelled = true;\n };\n }, [doc, pageNumber, scale, fetchResourceAnchored]);\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 updateDisplayDimensions();\n let resizeObserver = null;\n try {\n resizeObserver = new ResizeObserver(updateDisplayDimensions);\n if (imageRef.current) {\n resizeObserver.observe(imageRef.current);\n }\n } catch (error) {\n console.warn(\"ResizeObserver not supported, falling back to window resize listener\");\n window.addEventListener(\"resize\", updateDisplayDimensions);\n }\n return () => {\n if (resizeObserver) {\n resizeObserver.disconnect();\n } else {\n window.removeEventListener(\"resize\", updateDisplayDimensions);\n }\n };\n }, [pageImageUrl]);\n const handleMouseDown = useCallback((e) => {\n if (!drawingMode) return;\n if (!imageRef.current) return;\n const rect = imageRef.current.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n setIsDrawing(true);\n setSelection({\n startX: x,\n startY: y,\n endX: x,\n endY: y\n });\n }, [drawingMode]);\n const handleMouseMove = useCallback((e) => {\n if (!isDrawing || !selection || !imageRef.current) return;\n const rect = imageRef.current.getBoundingClientRect();\n setSelection({\n ...selection,\n endX: e.clientX - rect.left,\n endY: e.clientY - rect.top\n });\n }, [isDrawing, selection]);\n const handleMouseUp = useCallback(() => {\n if (!isDrawing || !selection || !pageDimensions || !displayDimensions || !session) {\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n const dragDistance = Math.sqrt(\n Math.pow(selection.endX - selection.startX, 2) + Math.pow(selection.endY - selection.startY, 2)\n );\n const MIN_DRAG_DISTANCE = 10;\n if (dragDistance < MIN_DRAG_DISTANCE) {\n if (existingAnnotations.length > 0) {\n let hitRect;\n const hit = rectsForPage(existingAnnotations, pageNumber).find((r) => {\n const rect = pdfToCanvasCoordinates(r.coord, pageDimensions.height, 1);\n const scaleX2 = displayDimensions.width / pageDimensions.width;\n const scaleY2 = displayDimensions.height / pageDimensions.height;\n const displayX = rect.x * scaleX2;\n const displayY = rect.y * scaleY2;\n const displayWidth = rect.width * scaleX2;\n const displayHeight = rect.height * scaleY2;\n const inside = selection.endX >= displayX && selection.endX <= displayX + displayWidth && selection.endY >= displayY && selection.endY <= displayY + displayHeight;\n if (inside && imageRef.current) {\n hitRect = toViewportAnchorRect(imageRef.current.getBoundingClientRect(), displayX, displayY, displayWidth, displayHeight);\n }\n return inside;\n });\n if (hit) {\n session?.client.browse.click(hit.annId, hitRect);\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n }\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n const scaleX = pageDimensions.width / displayDimensions.width;\n const scaleY = pageDimensions.height / displayDimensions.height;\n const nativeSelection = {\n startX: selection.startX * scaleX,\n startY: selection.startY * scaleY,\n endX: selection.endX * scaleX,\n endY: selection.endY * scaleY\n };\n const pdfCoord = canvasToPdfCoordinates(\n nativeSelection,\n pageNumber,\n pageDimensions.width,\n pageDimensions.height,\n 1\n // Use scale 1.0 since we already scaled to native coords\n );\n const fragmentSelector = createFragmentSelector(pdfCoord);\n const quoted = pageAnchored ? textUnder(pageAnchored, pdfCoord) : \"\";\n if (selectedMotivation) {\n session.client.mark.request(\n toResourceId(resourceUri),\n [\n {\n type: \"FragmentSelector\",\n conformsTo: \"http://tools.ietf.org/rfc/rfc3778\",\n value: fragmentSelector\n },\n ...quoted ? [{ type: \"TextQuoteSelector\", exact: quoted }] : []\n ],\n selectedMotivation\n );\n }\n setIsDrawing(false);\n }, [isDrawing, selection, pageNumber, pageDimensions, displayDimensions, selectedMotivation, existingAnnotations, session, resourceUri, pageAnchored]);\n const pageRects = rectsForPage(existingAnnotations, pageNumber);\n const { handleMouseEnter, handleMouseLeave } = useMemo(\n () => createHoverHandlers((id) => session?.client.beckon.hover(id), hoverDelayMs),\n [session, hoverDelayMs]\n );\n const { stroke, fill } = getMotivationColor(selectedMotivation ?? null);\n if (errorKey) {\n return /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__error\", children: t(errorKey) });\n }\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: \"semiont-pdf-annotation-canvas__container\",\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 children: [\n pageImageUrl && /* @__PURE__ */ jsx(\n \"img\",\n {\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 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 displayDimensions && pageDimensions && /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__overlay-container\", children: /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__overlay\", children: /* @__PURE__ */ jsxs(\n \"svg\",\n {\n className: \"semiont-pdf-annotation-canvas__svg\",\n width: displayDimensions.width,\n height: displayDimensions.height,\n children: [\n pageRects.map((r) => {\n const rect = pdfToCanvasCoordinates(r.coord, pageDimensions.height, 1);\n const scaleX = displayDimensions.width / pageDimensions.width;\n const scaleY = displayDimensions.height / pageDimensions.height;\n const isHovered = r.annId === hoveredAnnotationId;\n const isSelected = r.annId === selectedAnnotationId;\n const annMotivation = r.annotation.motivation;\n const { stroke: annStroke, fill: annFill } = getMotivationColor(annMotivation);\n return /* @__PURE__ */ jsx(\n \"rect\",\n {\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: (e) => session?.client.browse.click(r.annId, e.currentTarget.getBoundingClientRect()),\n onMouseEnter: () => handleMouseEnter(r.annId),\n onMouseLeave: handleMouseLeave\n },\n `${r.annId}:${r.selectorIndex}`\n );\n }),\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 return /* @__PURE__ */ jsx(\n \"rect\",\n {\n x: rectX,\n y: rectY,\n width: rectWidth,\n height: rectHeight,\n stroke,\n strokeWidth: 2,\n strokeDasharray: \"5,5\",\n fill,\n pointerEvents: \"none\"\n }\n );\n })()\n ]\n }\n ) }) })\n ]\n }\n );\n}\nfunction PdfAnnotationCanvas({\n pdfUrl,\n resourceUri,\n existingAnnotations = [],\n drawingMode,\n selectedMotivation,\n session,\n hoveredAnnotationId,\n selectedAnnotationId,\n hoverDelayMs = 150,\n pageLayout = \"paged\"\n}) {\n const [pdfDoc, setPdfDoc] = useState(null);\n const [numPages, setNumPages] = useState(0);\n const [pageNumber, setPageNumber] = useState(1);\n const [isLoading, setIsLoading] = useState(true);\n const [errorKey, setErrorKey] = useState(null);\n const t = useTranslations(\"PdfViewer\");\n const [pageShape, setPageShape] = useState(null);\n const [columnWidth, setColumnWidth] = useState(null);\n const columnRef = useRef(null);\n const [scale] = useState(1.5);\n const [visiblePages, setVisiblePages] = useState(/* @__PURE__ */ new Set());\n const [onscreenPages, setOnscreenPages] = useState(/* @__PURE__ */ new Set());\n const slotRefs = useRef(/* @__PURE__ */ new Map());\n const observerRef = useRef(null);\n const onscreenRef = useRef(null);\n useEffect(() => {\n let cancelled = false;\n async function loadPdf() {\n try {\n setIsLoading(true);\n setErrorKey(null);\n const doc = await loadPdfDocument(pdfUrl);\n if (cancelled) return;\n setPdfDoc(doc);\n setNumPages(doc.numPages);\n setIsLoading(false);\n try {\n const first = await doc.getPage(1);\n if (cancelled) return;\n const natural = first.getViewport({ scale: 1 });\n setPageShape({\n aspect: natural.height / natural.width,\n rasterWidth: first.getViewport({ scale }).width\n });\n } catch {\n }\n } catch (err) {\n if (cancelled) return;\n console.error(\"Error loading PDF:\", err);\n setErrorKey(\"loadFailed\");\n setIsLoading(false);\n }\n }\n loadPdf();\n return () => {\n cancelled = true;\n };\n }, [pdfUrl, scale]);\n const resourceAnchoredRef = useRef(null);\n const fetchResourceAnchored = useCallback(() => {\n if (!session) return Promise.resolve(null);\n const cached = resourceAnchoredRef.current;\n if (cached && cached.uri === resourceUri) return cached.outcome;\n const uri = resourceUri;\n const outcome = session.client.browse.resourceAnchoredText(toResourceId(uri)).then(\n (served) => served && served.kind === \"extracted\" ? served : null,\n () => {\n if (resourceAnchoredRef.current?.uri === uri) resourceAnchoredRef.current = null;\n return null;\n }\n );\n resourceAnchoredRef.current = { uri, outcome };\n return outcome;\n }, [session, resourceUri]);\n useEffect(() => {\n if (pageLayout !== \"scroll\") return;\n const measure = () => {\n if (columnRef.current) setColumnWidth(columnRef.current.clientWidth);\n };\n measure();\n let observer = null;\n try {\n observer = new ResizeObserver(measure);\n if (columnRef.current) observer.observe(columnRef.current);\n } catch {\n window.addEventListener(\"resize\", measure);\n }\n return () => {\n if (observer) observer.disconnect();\n else window.removeEventListener(\"resize\", measure);\n };\n }, [pageLayout]);\n const slotHeight = estimateSlotHeight(columnWidth, pageShape?.rasterWidth ?? null, pageShape?.aspect ?? null) ?? (pageShape ? Math.round(pageShape.rasterWidth * pageShape.aspect) : null);\n useEffect(() => {\n if (pageLayout !== \"scroll\" || numPages === 0) return;\n let observer = null;\n try {\n observer = new IntersectionObserver(\n (entries) => {\n setVisiblePages((prev) => {\n const next = new Set(prev);\n for (const entry of entries) {\n const page = Number(entry.target.dataset.page);\n if (!page) continue;\n if (entry.isIntersecting) next.add(page);\n else next.delete(page);\n }\n return next;\n });\n },\n { rootMargin: PRELOAD_MARGIN }\n );\n } catch {\n setVisiblePages(new Set(Array.from({ length: numPages }, (_, i) => i + 1)));\n return;\n }\n observerRef.current = observer;\n for (const el of slotRefs.current.values()) observer.observe(el);\n let onscreen = null;\n try {\n onscreen = new IntersectionObserver((entries) => {\n setOnscreenPages((prev) => {\n const next = new Set(prev);\n for (const entry of entries) {\n const page = Number(entry.target.dataset.page);\n if (!page) continue;\n if (entry.isIntersecting) next.add(page);\n else next.delete(page);\n }\n return next;\n });\n });\n onscreenRef.current = onscreen;\n for (const el of slotRefs.current.values()) onscreen.observe(el);\n } catch {\n setOnscreenPages(/* @__PURE__ */ new Set([1]));\n }\n return () => {\n observer.disconnect();\n observerRef.current = null;\n onscreen?.disconnect();\n onscreenRef.current = null;\n };\n }, [pageLayout, numPages]);\n const registerSlot = useCallback((page) => (el) => {\n const previous = slotRefs.current.get(page);\n if (previous) {\n observerRef.current?.unobserve(previous);\n onscreenRef.current?.unobserve(previous);\n }\n if (el) {\n slotRefs.current.set(page, el);\n observerRef.current?.observe(el);\n onscreenRef.current?.observe(el);\n } else {\n slotRefs.current.delete(page);\n }\n }, []);\n const currentTickRef = useRef(null);\n const scrollToPage = useCallback((page) => {\n scrollElementIntoView(slotRefs.current.get(page), { block: \"start\" });\n }, []);\n const currentPage = pageLayout === \"scroll\" ? onscreenPages.size > 0 ? Math.min(...onscreenPages) : 1 : pageNumber;\n useEffect(() => {\n if (numPages === 0) return;\n const BACK = [\"ArrowLeft\", \"PageUp\"];\n const FORWARD = [\"ArrowRight\", \"PageDown\"];\n const onKeyDown = (e) => {\n if (!BACK.includes(e.key) && !FORWARD.includes(e.key)) return;\n if (e.metaKey || e.ctrlKey || e.altKey) return;\n const el = e.target;\n const tag = el?.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\" || el?.isContentEditable) return;\n const next = FORWARD.includes(e.key) ? currentPage + 1 : currentPage - 1;\n if (next < 1 || next > numPages) return;\n e.preventDefault();\n if (pageLayout === \"scroll\") scrollToPage(next);\n else setPageNumber(next);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [numPages, currentPage, pageLayout, scrollToPage]);\n const stripRef = useRef(null);\n useEffect(() => {\n const strip = stripRef.current;\n if (pageLayout !== \"scroll\" || !strip) return;\n let scroller = strip.parentElement;\n while (scroller) {\n const overflowY = getComputedStyle(scroller).overflowY;\n if (overflowY === \"auto\" || overflowY === \"scroll\") break;\n scroller = scroller.parentElement;\n }\n if (!scroller) return;\n const clip = scroller;\n const size = () => {\n strip.style.maxHeight = `${clip.clientHeight}px`;\n };\n size();\n let observer = null;\n try {\n observer = new ResizeObserver(size);\n observer.observe(clip);\n } catch {\n window.addEventListener(\"resize\", size);\n }\n return () => {\n if (observer) observer.disconnect();\n else window.removeEventListener(\"resize\", size);\n };\n }, [pageLayout, numPages, pageShape]);\n useEffect(() => {\n scrollElementIntoView(currentTickRef.current, { block: \"nearest\", inline: \"nearest\" });\n const active = typeof document !== \"undefined\" ? document.activeElement : null;\n if (active && stripRef.current?.contains(active) && active !== currentTickRef.current) {\n currentTickRef.current?.focus();\n }\n }, [currentPage]);\n const pageProps = {\n scale,\n resourceUri,\n existingAnnotations,\n drawingMode,\n selectedMotivation,\n session,\n hoveredAnnotationId,\n selectedAnnotationId,\n hoverDelayMs,\n fetchResourceAnchored\n };\n if (errorKey) {\n return /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__error\", children: t(errorKey) });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: \"semiont-pdf-annotation-canvas\", children: [\n isLoading && /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__loading\", children: t(\"loading\") }),\n pdfDoc && pageLayout === \"scroll\" ? /* @__PURE__ */ jsxs(\"div\", { className: \"semiont-pdf-annotation-canvas__viewport\", \"data-axis\": SCROLL_AXIS, children: [\n numPages > 0 && pageShape && /* @__PURE__ */ jsx(\n \"div\",\n {\n className: \"semiont-pdf-annotation-canvas__strip\",\n \"data-axis\": SCROLL_AXIS,\n \"data-scroller\": \"true\",\n \"aria-orientation\": SCROLL_AXIS,\n ref: stripRef,\n children: Array.from({ length: numPages }, (_, i) => i + 1).map((page) => /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n \"data-page\": page,\n className: \"semiont-pdf-annotation-canvas__strip-page\",\n style: { height: `${Math.round(STRIP_PAGE_WIDTH * pageShape.aspect)}px` },\n \"aria-label\": t(\"pageOf\", { page, total: numPages }),\n tabIndex: page === currentPage ? 0 : -1,\n ...page === currentPage ? { \"aria-current\": \"page\" } : {},\n ref: page === currentPage ? currentTickRef : void 0,\n onClick: () => scrollToPage(page),\n children: page\n },\n page\n ))\n }\n ),\n /* @__PURE__ */ jsx(\"div\", { className: \"semiont-pdf-annotation-canvas__column\", \"data-axis\": SCROLL_AXIS, ref: columnRef, children: Array.from({ length: numPages }, (_, i) => i + 1).map((page) => /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: registerSlot(page),\n \"data-page\": page,\n className: \"semiont-pdf-annotation-canvas__slot\",\n style: slotHeight ? { minHeight: slotHeight } : void 0,\n children: visiblePages.has(page) && /* @__PURE__ */ jsx(PdfPageView, { doc: pdfDoc, pageNumber: page, ...pageProps })\n },\n page\n )) })\n ] }) : pdfDoc && !isLoading && // `key` is load-bearing: without it React reuses this instance\n // across page changes, so the previous page's raster, text map and\n // load error survive into the next page — a stale overlay, a quote\n // taken from the wrong page, and an error that never clears. Each\n // page is a different thing; mounting it as one resets all of it.\n /* @__PURE__ */ jsx(PdfPageView, { doc: pdfDoc, pageNumber, ...pageProps }, pageNumber),\n numPages > 0 && /* @__PURE__ */ jsxs(\"nav\", { className: \"semiont-pdf-annotation-canvas__controls\", \"aria-label\": t(\"pagination\"), children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n disabled: currentPage <= 1,\n onClick: () => pageLayout === \"scroll\" ? scrollToPage(currentPage - 1) : setPageNumber(pageNumber - 1),\n className: \"semiont-pdf-annotation-canvas__button\",\n children: t(\"previous\")\n }\n ),\n /* @__PURE__ */ jsx(\"span\", { className: \"semiont-pdf-annotation-canvas__page-info\", \"aria-live\": \"polite\", children: t(\"pageOf\", { page: currentPage, total: numPages }) }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n disabled: currentPage >= numPages,\n onClick: () => pageLayout === \"scroll\" ? scrollToPage(currentPage + 1) : setPageNumber(pageNumber + 1),\n className: \"semiont-pdf-annotation-canvas__button\",\n children: t(\"next\")\n }\n )\n ] })\n ] });\n}\nexport {\n PdfAnnotationCanvas\n};\n//# sourceMappingURL=PdfAnnotationCanvas.client-LSH3PZPY.js.map"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-zIDJOEfo.js";import{t as r}from"./vendor-GEwJ7U4m.js";import{At as i,B as a,G as o,H as s,It as c,K as l,Lt as u,Nt as d,Pt as f,Q as p,Rt as m,U as h,X as g,Y as _,Z as v,a as y,cn as b,et as x,h as S,kt as C,on as w,q as T,sn as E,w as D}from"./index-DikwAWOa.js";import{n as O,t as k}from"./XMarkIcon-CVrfCz2h.js";import{i as A,n as j,r as M}from"./routing-Cj_EvhT3.js";var N=e(t());function P({title:e,titleId:t,...n},r){return N.createElement(`svg`,Object.assign({xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:1.5,stroke:`currentColor`,"aria-hidden":`true`,"data-slot":`icon`,ref:r,"aria-labelledby":t},n),e?N.createElement(`title`,{id:t},e):null,N.createElement(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15.75 9V5.25A2.25 2.25 0 0 0 13.5 3h-6a2.25 2.25 0 0 0-2.25 2.25v13.5A2.25 2.25 0 0 0 7.5 21h6a2.25 2.25 0 0 0 2.25-2.25V15m3 0 3-3m0 0-3-3m3 3H9`}))}var F=N.forwardRef(P);function I({title:e,titleId:t,...n},r){return N.createElement(`svg`,Object.assign({xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:1.5,stroke:`currentColor`,"aria-hidden":`true`,"data-slot":`icon`,ref:r,"aria-labelledby":t},n),e?N.createElement(`title`,{id:t},e):null,N.createElement(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`m4.5 12.75 6 6 9-13.5`}))}var ee=N.forwardRef(I);function L({title:e,titleId:t,...n},r){return N.createElement(`svg`,Object.assign({xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:1.5,stroke:`currentColor`,"aria-hidden":`true`,"data-slot":`icon`,ref:r,"aria-labelledby":t},n),e?N.createElement(`title`,{id:t},e):null,N.createElement(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M12 4.5v15m7.5-7.5h-15`}))}var R=N.forwardRef(L),z=r(),B=`data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiM2QjcyODAiLz4KPHBhdGggZD0iTTE2IDE2QzE4LjIwOTEgMTYgMjAgMTQuMjA5MSAyMCAxMkMyMCA5Ljc5MDg2IDE4LjIwOTEgOCAxNiA4QzEzLjc5MDkgOCAxMiA5Ljc5MDg2IDEyIDEyQzEyIDE0LjIwOTEgMTMuNzkwOSAxNiAxNiAxNloiIGZpbGw9IiNFNUU3RUIiLz4KPHBhdGggZD0iTTI0IDI1QzI0IDIxLjY4NjMgMjAuNDE4MyAxOSAxNiAxOUMxMS41ODE3IDE5IDggMjEuNjg2MyA4IDI1IiBzdHJva2U9IiNFNUU3RUIiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPg==`;function V(){let{t:e}=n(),t=(t,n)=>e(`UserPanel.${t}`,n),r=i(),a=_(r.activeSession$),o=_(a?.user$)??null,c=a?.kb??null,l=o?.name??o?.email?.split(`@`)[0]??`User`,u=o?.image??null,d=o?.domain||o?.email?.split(`@`)[1],f=o?.isAdmin??!1,p=o?.isModerator??!1,[m,g]=(0,N.useState)(!1),{timeRemaining:y}=v(),b=s(y)??`Unknown`,x=!u||m?B:h(u)||(console.warn(`Invalid profile image URL detected, using fallback`),B);return(0,z.jsxs)(`div`,{className:`semiont-user-panel`,children:[(0,z.jsx)(`h3`,{className:`semiont-user-panel__title`,children:t(`account`)}),c&&(0,z.jsx)(`div`,{style:{padding:`0 0.75rem 0.5rem`,fontSize:`0.8rem`,color:`var(--semiont-color-neutral-400)`},children:c.label}),(0,z.jsxs)(`div`,{className:`space-y-4`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,z.jsx)(`img`,{src:x,alt:t(`profileAlt`,{name:l||t(`user`)}),width:48,height:48,className:`w-12 h-12 rounded-full object-cover`,onError:()=>g(!0)}),(0,z.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,z.jsx)(`div`,{className:`semiont-panel-text`,children:l||t(`user`)}),d&&(0,z.jsxs)(`div`,{className:`semiont-panel-text-secondary`,children:[`@`,d]})]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`semiont-panel-label`,children:t(`session`)}),(0,z.jsx)(`div`,{className:`semiont-session-box`,children:(0,z.jsx)(`div`,{className:`semiont-panel-hint`,children:t(`expiresIn`,{time:b})})})]}),(f||p)&&(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`semiont-panel-label`,children:t(`privileges`)}),(0,z.jsxs)(`div`,{className:`space-y-1`,children:[f&&(0,z.jsx)(`div`,{className:`semiont-privilege-badge semiont-privilege-badge--admin`,children:(0,z.jsx)(`span`,{className:`semiont-privilege-text`,children:t(`administrator`)})}),p&&(0,z.jsx)(`div`,{className:`semiont-privilege-badge semiont-privilege-badge--moderator`,children:(0,z.jsx)(`span`,{className:`semiont-privilege-text`,children:t(`moderator`)})})]})]}),a&&(0,z.jsx)(H,{session:a,label:t(`signOut`)},a.id)]})]})}function H({session:e,label:t}){let n=i(),r=A(),o=p(e??void 0,a);return(0,z.jsx)(`div`,{className:`semiont-panel-divider`,children:(0,z.jsx)(`button`,{onClick:async()=>{await o?.logout(),e.kb&&await n.signOut(e.kb.id),r.push(`/`)},className:`semiont-signout-button`,children:t})})}var U={authenticated:`var(--semiont-color-success-500, #22c55e)`,expired:`var(--semiont-color-warning-500, #eab308)`,"signed-out":`var(--semiont-color-neutral-400, #9ca3af)`,unreachable:`var(--semiont-color-error-500, #ef4444)`},W={authenticated:`statusConnected`,expired:`statusExpired`,"signed-out":`statusSignedOut`,unreachable:`statusUnreachable`},G=(e,t)=>`${e}:${t}`,K=`–`;function q({placement:e,t}){return(0,z.jsx)(`span`,{title:t(`managedBadge`),style:{fontSize:`0.65rem`,padding:`0 0.375rem`,borderRadius:`9999px`,border:`1px solid var(--semiont-color-primary-500, #3b82f6)`,color:`var(--semiont-color-primary-500, #3b82f6)`,flexShrink:0},children:t(e===`local`?`placementLocal`:`placementCodespace`)})}function te({status:e,t}){return(0,z.jsx)(`span`,{title:t(W[e]),style:{width:`0.5rem`,height:`0.5rem`,borderRadius:`50%`,backgroundColor:U[e],flexShrink:0}})}function ne({t:e,title:t,onSubmit:n,onCancel:r,error:i,isSubmitting:a,autoFocus:o,pulsing:s,initialHost:l=`localhost`,initialPort:u=4e3,initialEmail:d=`admin@example.com`}){let[p,m]=(0,N.useState)(l),[h,g]=(0,N.useState)(String(u)),[_,v]=(0,N.useState)(f(l)),[y,b]=(0,N.useState)(d),[x,S]=(0,N.useState)(``),C=e=>{m(e),v(f(e))};return(0,z.jsxs)(`div`,{className:s?`semiont-panel__login-form--pulsing`:``,style:{margin:`0.5rem`,padding:`0.75rem`,border:`1px solid var(--semiont-color-neutral-200, #e5e7eb)`,borderRadius:`var(--semiont-panel-border-radius, 0.5rem)`,background:`var(--semiont-bg-secondary, transparent)`},children:[(0,z.jsx)(`h3`,{style:{fontSize:`0.8rem`,fontWeight:600,marginBottom:`0.5rem`},children:t??e(`connectTitle`)}),(0,z.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),c(p)&&n(p,parseInt(h,10)||4e3,_,y,x)},style:{display:`flex`,flexDirection:`column`,gap:`0.5rem`},children:[(0,z.jsxs)(`select`,{value:_,onChange:e=>v(e.target.value),className:`semiont-input`,children:[(0,z.jsx)(`option`,{value:`http`,children:`HTTP`}),(0,z.jsx)(`option`,{value:`https`,children:`HTTPS`})]}),(0,z.jsx)(`input`,{type:`text`,value:p,onChange:e=>C(e.target.value),placeholder:`Host`,className:`semiont-input`,autoFocus:o}),(0,z.jsx)(`input`,{type:`number`,value:h,onChange:e=>g(e.target.value),placeholder:`Port`,className:`semiont-input`}),p&&!c(p)&&(0,z.jsx)(`div`,{style:{color:`var(--semiont-color-error-500, #ef4444)`,fontSize:`0.75rem`},children:e(`invalidHost`)}),(0,z.jsx)(`input`,{type:`email`,value:y,onChange:e=>b(e.target.value),placeholder:`Email`,className:`semiont-input`}),(0,z.jsx)(`input`,{type:`password`,value:x,onChange:e=>S(e.target.value),placeholder:`Password`,className:`semiont-input`}),i&&(0,z.jsx)(`div`,{style:{color:`var(--semiont-color-error-500, #ef4444)`,fontSize:`0.75rem`},children:i}),(0,z.jsxs)(`div`,{style:{display:`flex`,gap:`0.5rem`},children:[(0,z.jsx)(`button`,{type:`submit`,className:`semiont-button semiont-button--primary`,style:{flex:1},disabled:a||!c(p),children:e(a?`connecting`:`connect`)}),(0,z.jsx)(`button`,{type:`button`,className:`semiont-button`,onClick:r,children:(0,z.jsx)(k,{style:{width:`1rem`,height:`1rem`}})})]})]})]})}function re({t:e,kb:t,onSubmit:n,onCancel:r,error:i,isSubmitting:a}){let[o,s]=(0,N.useState)(``);return(0,z.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),n(o)},style:{padding:`0.5rem 0.75rem`,display:`flex`,flexDirection:`column`,gap:`0.375rem`},children:[(0,z.jsx)(`div`,{style:{fontSize:`0.75rem`,color:`var(--semiont-color-neutral-400)`},children:t.email}),(0,z.jsx)(`input`,{type:`password`,value:o,onChange:e=>s(e.target.value),placeholder:`Password`,className:`semiont-input`,style:{fontSize:`0.8rem`},autoFocus:!0}),i&&(0,z.jsx)(`div`,{style:{color:`var(--semiont-color-error-500, #ef4444)`,fontSize:`0.75rem`},children:i}),(0,z.jsxs)(`div`,{style:{display:`flex`,gap:`0.375rem`},children:[(0,z.jsx)(`button`,{type:`submit`,className:`semiont-button semiont-button--primary`,style:{flex:1,fontSize:`0.8rem`},disabled:a,children:e(a?`signingIn`:`signIn`)}),(0,z.jsx)(`button`,{type:`button`,className:`semiont-button`,onClick:r,style:{fontSize:`0.8rem`},children:e(`cancel`)})]})]})}var J=class extends Error{constructor(e,t){super(t),this.reason=e}};async function Y(e,t,n,r,i){let a=`${n}://${e}:${t}`,o=new b(null),s=new m({baseUrl:E(a),token$:o}),c=new d(s,new u(s),s);try{let e=await c.auth.password(r,i),t=e.token,n=e.refreshToken;if(!t)throw Error(`No access token received`);if(!n)throw Error(`No refresh token received`);o.next(w(t));let a;try{a=await c.admin.status()}catch(e){throw new J(`unreachable`,e instanceof Error?e.message:String(e))}if(!a.did)throw new J(`not-reported`,`status reported no did`);return{token:t,refreshToken:n,did:a.did,label:a.projectName??``,...a.gitBranch?{gitBranch:a.gitBranch}:{}}}finally{s.dispose(),o.complete()}}function X(){let e=M(),{t}=n(),r=(e,n)=>t(`KnowledgeBasePanel.${e}`,n),a=i(),o=_(a.kbs$)??[],s=_(a.activeSession$)?.kb??null,c=t=>{e.startsWith(`/know/resource/`)&&a.emit(`nav:push`,{path:`/know`,reason:`kb-switch`}),a.setActiveKb(t)},l=a.addKb.bind(a),u=a.removeKb.bind(a),d=a.updateKb.bind(a),f=(e,t,n)=>{a.signIn(e,t,n)},p=e=>{a.signOut(e)},[m,h]=(0,N.useState)(null),[g,v]=(0,N.useState)(null),[y,b]=(0,N.useState)(null),[x,S]=(0,N.useState)(!1),[C,w]=(0,N.useState)(null),[E,D]=(0,N.useState)(null),[k,A]=(0,N.useState)(!1),[j,P]=(0,N.useState)(null),[,I]=(0,N.useState)(0),{kbs:L}=T(),B=new Map;for(let e of L){let t=G(e.host,e.port),n=B.get(t);n?n.push(e):B.set(t,[e])}let V=e=>{let t=B.get(e);return t?.length===1?t[0]:void 0},H=e=>{if(e.endpoint.kind!==`http`)return;let t=V(G(e.endpoint.host,e.endpoint.port));return t&&t.did===e.did?t:void 0},U=new Set(o.flatMap(e=>e.endpoint.kind===`http`&&H(e)?[G(e.endpoint.host,e.endpoint.port)]:[])),W=L.filter(e=>!U.has(G(e.host,e.port))),X=new Set(o.map(e=>e.did)),Z=e=>X.has(e.did),ie=[...B.entries()].filter(([,e])=>e.length>1).map(([e,t])=>({address:e,count:t.length})),Q=m?.host!==void 0&&m.port!==void 0?G(m.host,m.port):null,ae=Q!==null&&(B.get(Q)?.length??0)>1;(0,N.useEffect)(()=>{o.length===0&&h({})},[o.length]),(0,N.useEffect)(()=>{let e=setInterval(()=>I(e=>e+1),3e4);return()=>clearInterval(e)},[]);let $=(e={})=>{h(e),w(null),b(null),v(null)},oe=e=>e instanceof J?e.reason===`unreachable`?r(`identityCheckFailed`):r(`identityNotReported`):e instanceof Error?e.message:String(e),se=async(e,t,n,i,a)=>{b(null),S(!0);let s=o.find(n=>n.endpoint.kind===`http`&&n.endpoint.host===e&&n.endpoint.port===t);if(s){try{let{token:r,refreshToken:o,gitBranch:c}=await Y(e,t,n,i,a);d(s.id,{...c?{gitBranch:c}:{}}),f(s.id,r,o),h(null)}catch(e){b(oe(e))}finally{S(!1)}return}try{let{token:o,refreshToken:s,did:c,label:u,gitBranch:d}=await Y(e,t,n,i,a),f=m?.expectedDid;f&&f!==c&&v(r(`connectedToOther`,{actual:u||r(`unknownName`),expected:m?.expectedName||r(`unknownName`)})),l({did:c,label:u,email:i,endpoint:{kind:`http`,host:e,port:t,protocol:n},...d?{gitBranch:d}:{}},o,s),h(null)}catch(e){b(oe(e))}finally{S(!1)}},ce=async(e,t)=>{let n=o.find(t=>t.id===e);if(n){if(D(null),A(!0),n.endpoint.kind!==`http`){D(`Re-auth is HTTP-only; KB endpoint kind "${n.endpoint.kind}" is not supported here.`),A(!1);return}try{let{token:r,refreshToken:i,label:a,gitBranch:o}=await Y(n.endpoint.host,n.endpoint.port,n.endpoint.protocol,n.email,t);d(e,{label:a,...o?{gitBranch:o}:{}}),f(e,r,i),w(null)}catch(e){D(e instanceof Error?e.message:String(e))}finally{A(!1)}}},le=e=>{a.getKbSessionStatus(e.id)===`authenticated`?c(e.id):(w(e.id),h(null),D(null))};return(0,z.jsxs)(`div`,{className:`semiont-panel`,children:[(0,z.jsx)(`div`,{className:`semiont-panel-header`,children:(0,z.jsxs)(`h2`,{className:`semiont-panel-header__title`,children:[(0,z.jsx)(`span`,{className:`semiont-panel-header__text`,children:r(`title`)}),(0,z.jsxs)(`span`,{className:`semiont-panel-header__count`,children:[`(`,o.length,`)`]})]})}),(0,z.jsxs)(`div`,{className:`semiont-panel__content`,children:[(0,z.jsx)(`div`,{className:`semiont-panel__list`,children:o.map(e=>{let t=a.getKbSessionStatus(e.id),n=e.id===s?.id,i=C===e.id,o=H(e);return(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`semiont-panel-item semiont-panel-item--clickable${n?` semiont-panel-item--selected`:``}`,style:{display:`flex`,flexDirection:`column`,gap:`0.25rem`,cursor:`pointer`,padding:`0.5rem 0.75rem`},onClick:()=>le(e),children:[(0,z.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`0.5rem`},children:[(0,z.jsx)(te,{status:t,t:r}),(0,z.jsx)(`span`,{className:`semiont-panel-text`,style:{flex:1,fontWeight:500},children:e.label||r(`unknownName`)}),o&&(0,z.jsx)(q,{placement:o.placement,t:r}),n&&(0,z.jsx)(ee,{style:{width:`1rem`,height:`1rem`,color:`var(--semiont-color-primary-500)`,flexShrink:0}}),t===`authenticated`&&(0,z.jsx)(`button`,{onClick:t=>{t.stopPropagation(),p(e.id)},title:r(`signOut`),style:{background:`none`,border:`none`,cursor:`pointer`,padding:`0.125rem`,color:`var(--semiont-color-neutral-400)`},children:(0,z.jsx)(F,{style:{width:`0.875rem`,height:`0.875rem`}})}),(0,z.jsx)(`button`,{onClick:t=>{t.stopPropagation(),P(e.id)},title:r(`remove`),style:{background:`none`,border:`none`,cursor:`pointer`,padding:`0.125rem`,color:`var(--semiont-color-neutral-400)`},children:(0,z.jsx)(O,{style:{width:`0.875rem`,height:`0.875rem`}})})]}),(0,z.jsx)(`span`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,paddingLeft:`1rem`},children:e.endpoint.kind===`http`?`${e.endpoint.host}:${e.endpoint.port} · ${e.gitBranch??K}`:`local:${e.endpoint.kbId}`}),o&&(0,z.jsx)(`span`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,paddingLeft:`1rem`,whiteSpace:`normal`,overflowWrap:`anywhere`},children:o.repo??K})]}),j===e.id&&(0,z.jsxs)(`div`,{style:{padding:`0.5rem 0.75rem`,fontSize:`0.8rem`,display:`flex`,alignItems:`center`,gap:`0.5rem`,background:`var(--semiont-bg-secondary, #f9fafb)`,borderBottom:`1px solid var(--semiont-color-neutral-200, #e5e7eb)`},children:[(0,z.jsx)(`span`,{style:{flex:1,color:`var(--semiont-color-neutral-500)`},children:r(`removeConfirm`,{label:e.label})}),(0,z.jsx)(`button`,{onClick:()=>{u(e.id),P(null)},className:`semiont-button`,style:{fontSize:`0.75rem`,padding:`0.2rem 0.5rem`,color:`var(--semiont-color-error-500, #ef4444)`},children:r(`remove`)}),(0,z.jsx)(`button`,{onClick:()=>P(null),className:`semiont-button`,style:{fontSize:`0.75rem`,padding:`0.2rem 0.5rem`},children:r(`cancel`)})]}),i&&(0,z.jsx)(re,{t:r,kb:e,onSubmit:t=>ce(e.id,t),onCancel:()=>w(null),error:E,isSubmitting:k})]},e.id)})}),W.length>0&&(0,z.jsxs)(`div`,{className:`semiont-panel__list`,children:[(0,z.jsx)(`h3`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,fontWeight:600,textTransform:`uppercase`,letterSpacing:`0.05em`,padding:`0.5rem 0.75rem 0.25rem`},children:r(`discoveredTitle`)}),ie.map(({address:e,count:t})=>(0,z.jsxs)(`div`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,padding:`0 0.75rem 0.375rem`,color:`var(--semiont-color-warning-500, #eab308)`,whiteSpace:`normal`},children:[`⚠ `,r(`addressConflict`,{count:t,address:e})]},`conflict-${e}`)),W.map(e=>(0,z.jsxs)(`div`,{className:`semiont-panel-item semiont-panel-item--clickable`,style:{display:`flex`,flexDirection:`column`,gap:`0.25rem`,cursor:`pointer`,padding:`0.5rem 0.75rem`},onClick:()=>$({host:e.host,port:e.port,expectedDid:e.did,...e.siteName===void 0?{}:{expectedName:e.siteName}}),...e.did===void 0?{}:{title:e.did},children:[(0,z.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`0.5rem`},children:[(0,z.jsx)(`span`,{className:`semiont-panel-text`,style:{flex:1,fontWeight:500},children:e.siteName??K}),(0,z.jsx)(q,{placement:e.placement,t:r})]}),(0,z.jsx)(`span`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,paddingLeft:`1rem`},children:G(e.host,e.port)}),(0,z.jsx)(`span`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,paddingLeft:`1rem`,whiteSpace:`normal`,overflowWrap:`anywhere`},children:e.repo??K}),Z(e)&&(0,z.jsxs)(`span`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,paddingLeft:`1rem`,fontStyle:`italic`,whiteSpace:`normal`},children:[`↳ `,r(`anotherCopy`)]})]},`${e.did}@${G(e.host,e.port)}`))]}),g&&(0,z.jsx)(`div`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.75rem`,padding:`0.5rem 0.75rem`,color:`var(--semiont-color-warning-500, #eab308)`,whiteSpace:`normal`},children:g}),m!==null&&(0,z.jsx)(ne,{t:r,...ae&&Q?{title:r(`connectToAddress`,{address:Q})}:{},onSubmit:se,onCancel:()=>h(null),error:y,isSubmitting:x,autoFocus:o.length===0,pulsing:o.length===0,...m.host===void 0?{}:{initialHost:m.host},...m.port===void 0?{}:{initialPort:m.port}},`${m.host??``}:${m.port??``}`)]}),m===null&&(0,z.jsx)(`div`,{className:`semiont-panel-footer`,children:(0,z.jsxs)(`button`,{onClick:()=>$(),className:`semiont-panel-item semiont-panel-item--clickable`,style:{width:`100%`,display:`flex`,alignItems:`center`,gap:`0.5rem`,color:`var(--semiont-color-primary-600)`},children:[(0,z.jsx)(R,{style:{width:`1rem`,height:`1rem`,flexShrink:0}}),(0,z.jsx)(`span`,{className:`semiont-panel-text`,style:{color:`inherit`},children:r(`addKnowledgeBase`)})]})})]})}function Z({activePanel:e,theme:t,children:r}){let{hoverDelayMs:a}=l(),{t:s}=n(),c=_(i().activeSession$),u=!!_(c?.user$),d=j(),f=A(),p=M(),[m,h]=(0,N.useTransition)(),{width:v,setWidth:b,minWidth:w,maxWidth:T}=g(),E=(0,N.useCallback)(({locale:e})=>{p&&h(()=>{f.replace(p,{locale:e})})},[p,f,h]),{setTheme:O}=x(),{toggleLineNumbers:k}=C(),P=(0,N.useCallback)(({theme:e})=>O(e),[O]),F=(0,N.useCallback)(()=>k(),[k]);return o({"settings:locale-changed":E,"settings:theme-changed":P,"settings:line-numbers-toggled":F}),!e||!r&&!y.includes(e)?null:(0,z.jsxs)(`div`,{className:`semiont-toolbar-panels`,style:{width:`${v}px`,position:`relative`},children:[(0,z.jsx)(S,{onResize:b,minWidth:w,maxWidth:T,position:`left`,ariaLabel:`Resize right panel`}),(0,z.jsxs)(`div`,{className:`semiont-toolbar-panels__content`,children:[r,e===`knowledge-base`&&(0,z.jsx)(X,{}),e===`user`&&(u?(0,z.jsx)(V,{}):(0,z.jsxs)(`div`,{className:`semiont-panel`,children:[(0,z.jsx)(`div`,{className:`semiont-panel-header`,children:(0,z.jsx)(`h2`,{className:`semiont-panel-header__title`,children:(0,z.jsx)(`span`,{className:`semiont-panel-header__text`,children:s(`UserPanel.account`)})})}),(0,z.jsx)(`div`,{className:`semiont-panel__content`,style:{padding:`1rem`,textAlign:`center`},children:(0,z.jsx)(`p`,{style:{color:`var(--semiont-color-neutral-400)`,fontSize:`0.85rem`,lineHeight:1.5},children:s(`AccountPanel.notAuthenticated`)})})]})),e===`settings`&&(0,z.jsx)(D,{theme:t,hoverDelayMs:a,locale:d,isPendingLocaleChange:m})]})]})}export{R as n,Z as t};
|
|
2
|
-
//# sourceMappingURL=ToolbarPanels-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-CywLsdxn.js";import{t as r}from"./vendor-vK2W55bZ.js";import{At as i,B as a,G as o,H as s,It as c,K as l,Lt as u,Nt as d,Pt as f,Q as p,Rt as m,U as h,X as g,Y as _,Z as v,a as y,cn as b,et as x,h as S,kt as C,on as w,q as T,sn as E,w as D}from"./index-cHWd4mGO.js";import{n as O,t as k}from"./XMarkIcon-Dt8lUQLh.js";import{i as A,n as j,r as M}from"./routing-D-GkAfgE.js";var N=e(t());function P({title:e,titleId:t,...n},r){return N.createElement(`svg`,Object.assign({xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:1.5,stroke:`currentColor`,"aria-hidden":`true`,"data-slot":`icon`,ref:r,"aria-labelledby":t},n),e?N.createElement(`title`,{id:t},e):null,N.createElement(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15.75 9V5.25A2.25 2.25 0 0 0 13.5 3h-6a2.25 2.25 0 0 0-2.25 2.25v13.5A2.25 2.25 0 0 0 7.5 21h6a2.25 2.25 0 0 0 2.25-2.25V15m3 0 3-3m0 0-3-3m3 3H9`}))}var F=N.forwardRef(P);function I({title:e,titleId:t,...n},r){return N.createElement(`svg`,Object.assign({xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:1.5,stroke:`currentColor`,"aria-hidden":`true`,"data-slot":`icon`,ref:r,"aria-labelledby":t},n),e?N.createElement(`title`,{id:t},e):null,N.createElement(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`m4.5 12.75 6 6 9-13.5`}))}var ee=N.forwardRef(I);function L({title:e,titleId:t,...n},r){return N.createElement(`svg`,Object.assign({xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:1.5,stroke:`currentColor`,"aria-hidden":`true`,"data-slot":`icon`,ref:r,"aria-labelledby":t},n),e?N.createElement(`title`,{id:t},e):null,N.createElement(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M12 4.5v15m7.5-7.5h-15`}))}var R=N.forwardRef(L),z=r(),B=`data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiM2QjcyODAiLz4KPHBhdGggZD0iTTE2IDE2QzE4LjIwOTEgMTYgMjAgMTQuMjA5MSAyMCAxMkMyMCA5Ljc5MDg2IDE4LjIwOTEgOCAxNiA4QzEzLjc5MDkgOCAxMiA5Ljc5MDg2IDEyIDEyQzEyIDE0LjIwOTEgMTMuNzkwOSAxNiAxNiAxNloiIGZpbGw9IiNFNUU3RUIiLz4KPHBhdGggZD0iTTI0IDI1QzI0IDIxLjY4NjMgMjAuNDE4MyAxOSAxNiAxOUMxMS41ODE3IDE5IDggMjEuNjg2MyA4IDI1IiBzdHJva2U9IiNFNUU3RUIiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPg==`;function V(){let{t:e}=n(),t=(t,n)=>e(`UserPanel.${t}`,n),r=i(),a=_(r.activeSession$),o=_(a?.user$)??null,c=a?.kb??null,l=o?.name??o?.email?.split(`@`)[0]??`User`,u=o?.image??null,d=o?.domain||o?.email?.split(`@`)[1],f=o?.isAdmin??!1,p=o?.isModerator??!1,[m,g]=(0,N.useState)(!1),{timeRemaining:y}=v(),b=s(y)??`Unknown`,x=!u||m?B:h(u)||(console.warn(`Invalid profile image URL detected, using fallback`),B);return(0,z.jsxs)(`div`,{className:`semiont-user-panel`,children:[(0,z.jsx)(`h3`,{className:`semiont-user-panel__title`,children:t(`account`)}),c&&(0,z.jsx)(`div`,{style:{padding:`0 0.75rem 0.5rem`,fontSize:`0.8rem`,color:`var(--semiont-color-neutral-400)`},children:c.label}),(0,z.jsxs)(`div`,{className:`space-y-4`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,z.jsx)(`img`,{src:x,alt:t(`profileAlt`,{name:l||t(`user`)}),width:48,height:48,className:`w-12 h-12 rounded-full object-cover`,onError:()=>g(!0)}),(0,z.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,z.jsx)(`div`,{className:`semiont-panel-text`,children:l||t(`user`)}),d&&(0,z.jsxs)(`div`,{className:`semiont-panel-text-secondary`,children:[`@`,d]})]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`semiont-panel-label`,children:t(`session`)}),(0,z.jsx)(`div`,{className:`semiont-session-box`,children:(0,z.jsx)(`div`,{className:`semiont-panel-hint`,children:t(`expiresIn`,{time:b})})})]}),(f||p)&&(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`semiont-panel-label`,children:t(`privileges`)}),(0,z.jsxs)(`div`,{className:`space-y-1`,children:[f&&(0,z.jsx)(`div`,{className:`semiont-privilege-badge semiont-privilege-badge--admin`,children:(0,z.jsx)(`span`,{className:`semiont-privilege-text`,children:t(`administrator`)})}),p&&(0,z.jsx)(`div`,{className:`semiont-privilege-badge semiont-privilege-badge--moderator`,children:(0,z.jsx)(`span`,{className:`semiont-privilege-text`,children:t(`moderator`)})})]})]}),a&&(0,z.jsx)(H,{session:a,label:t(`signOut`)},a.id)]})]})}function H({session:e,label:t}){let n=i(),r=A(),o=p(e??void 0,a);return(0,z.jsx)(`div`,{className:`semiont-panel-divider`,children:(0,z.jsx)(`button`,{onClick:async()=>{await o?.logout(),e.kb&&await n.signOut(e.kb.id),r.push(`/`)},className:`semiont-signout-button`,children:t})})}var U={authenticated:`var(--semiont-color-success-500, #22c55e)`,expired:`var(--semiont-color-warning-500, #eab308)`,"signed-out":`var(--semiont-color-neutral-400, #9ca3af)`,unreachable:`var(--semiont-color-error-500, #ef4444)`},W={authenticated:`statusConnected`,expired:`statusExpired`,"signed-out":`statusSignedOut`,unreachable:`statusUnreachable`},G=(e,t)=>`${e}:${t}`,K=`–`;function q({placement:e,t}){return(0,z.jsx)(`span`,{title:t(`managedBadge`),style:{fontSize:`0.65rem`,padding:`0 0.375rem`,borderRadius:`9999px`,border:`1px solid var(--semiont-color-primary-500, #3b82f6)`,color:`var(--semiont-color-primary-500, #3b82f6)`,flexShrink:0},children:t(e===`local`?`placementLocal`:`placementCodespace`)})}function te({status:e,t}){return(0,z.jsx)(`span`,{title:t(W[e]),style:{width:`0.5rem`,height:`0.5rem`,borderRadius:`50%`,backgroundColor:U[e],flexShrink:0}})}function ne({t:e,title:t,onSubmit:n,onCancel:r,error:i,isSubmitting:a,autoFocus:o,pulsing:s,initialHost:l=`localhost`,initialPort:u=4e3,initialEmail:d=`admin@example.com`}){let[p,m]=(0,N.useState)(l),[h,g]=(0,N.useState)(String(u)),[_,v]=(0,N.useState)(f(l)),[y,b]=(0,N.useState)(d),[x,S]=(0,N.useState)(``),C=e=>{m(e),v(f(e))};return(0,z.jsxs)(`div`,{className:s?`semiont-panel__login-form--pulsing`:``,style:{margin:`0.5rem`,padding:`0.75rem`,border:`1px solid var(--semiont-color-neutral-200, #e5e7eb)`,borderRadius:`var(--semiont-panel-border-radius, 0.5rem)`,background:`var(--semiont-bg-secondary, transparent)`},children:[(0,z.jsx)(`h3`,{style:{fontSize:`0.8rem`,fontWeight:600,marginBottom:`0.5rem`},children:t??e(`connectTitle`)}),(0,z.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),c(p)&&n(p,parseInt(h,10)||4e3,_,y,x)},style:{display:`flex`,flexDirection:`column`,gap:`0.5rem`},children:[(0,z.jsxs)(`select`,{value:_,onChange:e=>v(e.target.value),className:`semiont-input`,children:[(0,z.jsx)(`option`,{value:`http`,children:`HTTP`}),(0,z.jsx)(`option`,{value:`https`,children:`HTTPS`})]}),(0,z.jsx)(`input`,{type:`text`,value:p,onChange:e=>C(e.target.value),placeholder:`Host`,className:`semiont-input`,autoFocus:o}),(0,z.jsx)(`input`,{type:`number`,value:h,onChange:e=>g(e.target.value),placeholder:`Port`,className:`semiont-input`}),p&&!c(p)&&(0,z.jsx)(`div`,{style:{color:`var(--semiont-color-error-500, #ef4444)`,fontSize:`0.75rem`},children:e(`invalidHost`)}),(0,z.jsx)(`input`,{type:`email`,value:y,onChange:e=>b(e.target.value),placeholder:`Email`,className:`semiont-input`}),(0,z.jsx)(`input`,{type:`password`,value:x,onChange:e=>S(e.target.value),placeholder:`Password`,className:`semiont-input`}),i&&(0,z.jsx)(`div`,{style:{color:`var(--semiont-color-error-500, #ef4444)`,fontSize:`0.75rem`},children:i}),(0,z.jsxs)(`div`,{style:{display:`flex`,gap:`0.5rem`},children:[(0,z.jsx)(`button`,{type:`submit`,className:`semiont-button semiont-button--primary`,style:{flex:1},disabled:a||!c(p),children:e(a?`connecting`:`connect`)}),(0,z.jsx)(`button`,{type:`button`,className:`semiont-button`,onClick:r,children:(0,z.jsx)(k,{style:{width:`1rem`,height:`1rem`}})})]})]})]})}function re({t:e,kb:t,onSubmit:n,onCancel:r,error:i,isSubmitting:a}){let[o,s]=(0,N.useState)(``);return(0,z.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),n(o)},style:{padding:`0.5rem 0.75rem`,display:`flex`,flexDirection:`column`,gap:`0.375rem`},children:[(0,z.jsx)(`div`,{style:{fontSize:`0.75rem`,color:`var(--semiont-color-neutral-400)`},children:t.email}),(0,z.jsx)(`input`,{type:`password`,value:o,onChange:e=>s(e.target.value),placeholder:`Password`,className:`semiont-input`,style:{fontSize:`0.8rem`},autoFocus:!0}),i&&(0,z.jsx)(`div`,{style:{color:`var(--semiont-color-error-500, #ef4444)`,fontSize:`0.75rem`},children:i}),(0,z.jsxs)(`div`,{style:{display:`flex`,gap:`0.375rem`},children:[(0,z.jsx)(`button`,{type:`submit`,className:`semiont-button semiont-button--primary`,style:{flex:1,fontSize:`0.8rem`},disabled:a,children:e(a?`signingIn`:`signIn`)}),(0,z.jsx)(`button`,{type:`button`,className:`semiont-button`,onClick:r,style:{fontSize:`0.8rem`},children:e(`cancel`)})]})]})}var J=class extends Error{constructor(e,t){super(t),this.reason=e}};async function Y(e,t,n,r,i){let a=`${n}://${e}:${t}`,o=new b(null),s=new m({baseUrl:E(a),token$:o}),c=new d(s,new u(s),s);try{let e=await c.auth.password(r,i),t=e.token,n=e.refreshToken;if(!t)throw Error(`No access token received`);if(!n)throw Error(`No refresh token received`);o.next(w(t));let a;try{a=await c.admin.status()}catch(e){throw new J(`unreachable`,e instanceof Error?e.message:String(e))}if(!a.did)throw new J(`not-reported`,`status reported no did`);return{token:t,refreshToken:n,did:a.did,label:a.projectName??``,...a.gitBranch?{gitBranch:a.gitBranch}:{}}}finally{s.dispose(),o.complete()}}function X(){let e=M(),{t}=n(),r=(e,n)=>t(`KnowledgeBasePanel.${e}`,n),a=i(),o=_(a.kbs$)??[],s=_(a.activeSession$)?.kb??null,c=t=>{e.startsWith(`/know/resource/`)&&a.emit(`nav:push`,{path:`/know`,reason:`kb-switch`}),a.setActiveKb(t)},l=a.addKb.bind(a),u=a.removeKb.bind(a),d=a.updateKb.bind(a),f=(e,t,n)=>{a.signIn(e,t,n)},p=e=>{a.signOut(e)},[m,h]=(0,N.useState)(null),[g,v]=(0,N.useState)(null),[y,b]=(0,N.useState)(null),[x,S]=(0,N.useState)(!1),[C,w]=(0,N.useState)(null),[E,D]=(0,N.useState)(null),[k,A]=(0,N.useState)(!1),[j,P]=(0,N.useState)(null),[,I]=(0,N.useState)(0),{kbs:L}=T(),B=new Map;for(let e of L){let t=G(e.host,e.port),n=B.get(t);n?n.push(e):B.set(t,[e])}let V=e=>{let t=B.get(e);return t?.length===1?t[0]:void 0},H=e=>{if(e.endpoint.kind!==`http`)return;let t=V(G(e.endpoint.host,e.endpoint.port));return t&&t.did===e.did?t:void 0},U=new Set(o.flatMap(e=>e.endpoint.kind===`http`&&H(e)?[G(e.endpoint.host,e.endpoint.port)]:[])),W=L.filter(e=>!U.has(G(e.host,e.port))),X=new Set(o.map(e=>e.did)),Z=e=>X.has(e.did),ie=[...B.entries()].filter(([,e])=>e.length>1).map(([e,t])=>({address:e,count:t.length})),Q=m?.host!==void 0&&m.port!==void 0?G(m.host,m.port):null,ae=Q!==null&&(B.get(Q)?.length??0)>1;(0,N.useEffect)(()=>{o.length===0&&h({})},[o.length]),(0,N.useEffect)(()=>{let e=setInterval(()=>I(e=>e+1),3e4);return()=>clearInterval(e)},[]);let $=(e={})=>{h(e),w(null),b(null),v(null)},oe=e=>e instanceof J?e.reason===`unreachable`?r(`identityCheckFailed`):r(`identityNotReported`):e instanceof Error?e.message:String(e),se=async(e,t,n,i,a)=>{b(null),S(!0);let s=o.find(n=>n.endpoint.kind===`http`&&n.endpoint.host===e&&n.endpoint.port===t);if(s){try{let{token:r,refreshToken:o,gitBranch:c}=await Y(e,t,n,i,a);d(s.id,{...c?{gitBranch:c}:{}}),f(s.id,r,o),h(null)}catch(e){b(oe(e))}finally{S(!1)}return}try{let{token:o,refreshToken:s,did:c,label:u,gitBranch:d}=await Y(e,t,n,i,a),f=m?.expectedDid;f&&f!==c&&v(r(`connectedToOther`,{actual:u||r(`unknownName`),expected:m?.expectedName||r(`unknownName`)})),l({did:c,label:u,email:i,endpoint:{kind:`http`,host:e,port:t,protocol:n},...d?{gitBranch:d}:{}},o,s),h(null)}catch(e){b(oe(e))}finally{S(!1)}},ce=async(e,t)=>{let n=o.find(t=>t.id===e);if(n){if(D(null),A(!0),n.endpoint.kind!==`http`){D(`Re-auth is HTTP-only; KB endpoint kind "${n.endpoint.kind}" is not supported here.`),A(!1);return}try{let{token:r,refreshToken:i,label:a,gitBranch:o}=await Y(n.endpoint.host,n.endpoint.port,n.endpoint.protocol,n.email,t);d(e,{label:a,...o?{gitBranch:o}:{}}),f(e,r,i),w(null)}catch(e){D(e instanceof Error?e.message:String(e))}finally{A(!1)}}},le=e=>{a.getKbSessionStatus(e.id)===`authenticated`?c(e.id):(w(e.id),h(null),D(null))};return(0,z.jsxs)(`div`,{className:`semiont-panel`,children:[(0,z.jsx)(`div`,{className:`semiont-panel-header`,children:(0,z.jsxs)(`h2`,{className:`semiont-panel-header__title`,children:[(0,z.jsx)(`span`,{className:`semiont-panel-header__text`,children:r(`title`)}),(0,z.jsxs)(`span`,{className:`semiont-panel-header__count`,children:[`(`,o.length,`)`]})]})}),(0,z.jsxs)(`div`,{className:`semiont-panel__content`,children:[(0,z.jsx)(`div`,{className:`semiont-panel__list`,children:o.map(e=>{let t=a.getKbSessionStatus(e.id),n=e.id===s?.id,i=C===e.id,o=H(e);return(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`semiont-panel-item semiont-panel-item--clickable${n?` semiont-panel-item--selected`:``}`,style:{display:`flex`,flexDirection:`column`,gap:`0.25rem`,cursor:`pointer`,padding:`0.5rem 0.75rem`},onClick:()=>le(e),children:[(0,z.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`0.5rem`},children:[(0,z.jsx)(te,{status:t,t:r}),(0,z.jsx)(`span`,{className:`semiont-panel-text`,style:{flex:1,fontWeight:500},children:e.label||r(`unknownName`)}),o&&(0,z.jsx)(q,{placement:o.placement,t:r}),n&&(0,z.jsx)(ee,{style:{width:`1rem`,height:`1rem`,color:`var(--semiont-color-primary-500)`,flexShrink:0}}),t===`authenticated`&&(0,z.jsx)(`button`,{onClick:t=>{t.stopPropagation(),p(e.id)},title:r(`signOut`),style:{background:`none`,border:`none`,cursor:`pointer`,padding:`0.125rem`,color:`var(--semiont-color-neutral-400)`},children:(0,z.jsx)(F,{style:{width:`0.875rem`,height:`0.875rem`}})}),(0,z.jsx)(`button`,{onClick:t=>{t.stopPropagation(),P(e.id)},title:r(`remove`),style:{background:`none`,border:`none`,cursor:`pointer`,padding:`0.125rem`,color:`var(--semiont-color-neutral-400)`},children:(0,z.jsx)(O,{style:{width:`0.875rem`,height:`0.875rem`}})})]}),(0,z.jsx)(`span`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,paddingLeft:`1rem`},children:e.endpoint.kind===`http`?`${e.endpoint.host}:${e.endpoint.port} · ${e.gitBranch??K}`:`local:${e.endpoint.kbId}`}),o&&(0,z.jsx)(`span`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,paddingLeft:`1rem`,whiteSpace:`normal`,overflowWrap:`anywhere`},children:o.repo??K})]}),j===e.id&&(0,z.jsxs)(`div`,{style:{padding:`0.5rem 0.75rem`,fontSize:`0.8rem`,display:`flex`,alignItems:`center`,gap:`0.5rem`,background:`var(--semiont-bg-secondary, #f9fafb)`,borderBottom:`1px solid var(--semiont-color-neutral-200, #e5e7eb)`},children:[(0,z.jsx)(`span`,{style:{flex:1,color:`var(--semiont-color-neutral-500)`},children:r(`removeConfirm`,{label:e.label})}),(0,z.jsx)(`button`,{onClick:()=>{u(e.id),P(null)},className:`semiont-button`,style:{fontSize:`0.75rem`,padding:`0.2rem 0.5rem`,color:`var(--semiont-color-error-500, #ef4444)`},children:r(`remove`)}),(0,z.jsx)(`button`,{onClick:()=>P(null),className:`semiont-button`,style:{fontSize:`0.75rem`,padding:`0.2rem 0.5rem`},children:r(`cancel`)})]}),i&&(0,z.jsx)(re,{t:r,kb:e,onSubmit:t=>ce(e.id,t),onCancel:()=>w(null),error:E,isSubmitting:k})]},e.id)})}),W.length>0&&(0,z.jsxs)(`div`,{className:`semiont-panel__list`,children:[(0,z.jsx)(`h3`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,fontWeight:600,textTransform:`uppercase`,letterSpacing:`0.05em`,padding:`0.5rem 0.75rem 0.25rem`},children:r(`discoveredTitle`)}),ie.map(({address:e,count:t})=>(0,z.jsxs)(`div`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,padding:`0 0.75rem 0.375rem`,color:`var(--semiont-color-warning-500, #eab308)`,whiteSpace:`normal`},children:[`⚠ `,r(`addressConflict`,{count:t,address:e})]},`conflict-${e}`)),W.map(e=>(0,z.jsxs)(`div`,{className:`semiont-panel-item semiont-panel-item--clickable`,style:{display:`flex`,flexDirection:`column`,gap:`0.25rem`,cursor:`pointer`,padding:`0.5rem 0.75rem`},onClick:()=>$({host:e.host,port:e.port,expectedDid:e.did,...e.siteName===void 0?{}:{expectedName:e.siteName}}),...e.did===void 0?{}:{title:e.did},children:[(0,z.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`0.5rem`},children:[(0,z.jsx)(`span`,{className:`semiont-panel-text`,style:{flex:1,fontWeight:500},children:e.siteName??K}),(0,z.jsx)(q,{placement:e.placement,t:r})]}),(0,z.jsx)(`span`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,paddingLeft:`1rem`},children:G(e.host,e.port)}),(0,z.jsx)(`span`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,paddingLeft:`1rem`,whiteSpace:`normal`,overflowWrap:`anywhere`},children:e.repo??K}),Z(e)&&(0,z.jsxs)(`span`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.7rem`,paddingLeft:`1rem`,fontStyle:`italic`,whiteSpace:`normal`},children:[`↳ `,r(`anotherCopy`)]})]},`${e.did}@${G(e.host,e.port)}`))]}),g&&(0,z.jsx)(`div`,{className:`semiont-panel-text-secondary`,style:{fontSize:`0.75rem`,padding:`0.5rem 0.75rem`,color:`var(--semiont-color-warning-500, #eab308)`,whiteSpace:`normal`},children:g}),m!==null&&(0,z.jsx)(ne,{t:r,...ae&&Q?{title:r(`connectToAddress`,{address:Q})}:{},onSubmit:se,onCancel:()=>h(null),error:y,isSubmitting:x,autoFocus:o.length===0,pulsing:o.length===0,...m.host===void 0?{}:{initialHost:m.host},...m.port===void 0?{}:{initialPort:m.port}},`${m.host??``}:${m.port??``}`)]}),m===null&&(0,z.jsx)(`div`,{className:`semiont-panel-footer`,children:(0,z.jsxs)(`button`,{onClick:()=>$(),className:`semiont-panel-item semiont-panel-item--clickable`,style:{width:`100%`,display:`flex`,alignItems:`center`,gap:`0.5rem`,color:`var(--semiont-color-primary-600)`},children:[(0,z.jsx)(R,{style:{width:`1rem`,height:`1rem`,flexShrink:0}}),(0,z.jsx)(`span`,{className:`semiont-panel-text`,style:{color:`inherit`},children:r(`addKnowledgeBase`)})]})})]})}function Z({activePanel:e,theme:t,children:r}){let{hoverDelayMs:a}=l(),{t:s}=n(),c=_(i().activeSession$),u=!!_(c?.user$),d=j(),f=A(),p=M(),[m,h]=(0,N.useTransition)(),{width:v,setWidth:b,minWidth:w,maxWidth:T}=g(),E=(0,N.useCallback)(({locale:e})=>{p&&h(()=>{f.replace(p,{locale:e})})},[p,f,h]),{setTheme:O}=x(),{toggleLineNumbers:k}=C(),P=(0,N.useCallback)(({theme:e})=>O(e),[O]),F=(0,N.useCallback)(()=>k(),[k]);return o({"settings:locale-changed":E,"settings:theme-changed":P,"settings:line-numbers-toggled":F}),!e||!r&&!y.includes(e)?null:(0,z.jsxs)(`div`,{className:`semiont-toolbar-panels`,style:{width:`${v}px`,position:`relative`},children:[(0,z.jsx)(S,{onResize:b,minWidth:w,maxWidth:T,position:`left`,ariaLabel:`Resize right panel`}),(0,z.jsxs)(`div`,{className:`semiont-toolbar-panels__content`,children:[r,e===`knowledge-base`&&(0,z.jsx)(X,{}),e===`user`&&(u?(0,z.jsx)(V,{}):(0,z.jsxs)(`div`,{className:`semiont-panel`,children:[(0,z.jsx)(`div`,{className:`semiont-panel-header`,children:(0,z.jsx)(`h2`,{className:`semiont-panel-header__title`,children:(0,z.jsx)(`span`,{className:`semiont-panel-header__text`,children:s(`UserPanel.account`)})})}),(0,z.jsx)(`div`,{className:`semiont-panel__content`,style:{padding:`1rem`,textAlign:`center`},children:(0,z.jsx)(`p`,{style:{color:`var(--semiont-color-neutral-400)`,fontSize:`0.85rem`,lineHeight:1.5},children:s(`AccountPanel.notAuthenticated`)})})]})),e===`settings`&&(0,z.jsx)(D,{theme:t,hoverDelayMs:a,locale:d,isPendingLocaleChange:m})]})]})}export{R as n,Z as t};
|
|
2
|
+
//# sourceMappingURL=ToolbarPanels-CbF3qEos.js.map
|