@inkandswitch/patchwork-pkg-base 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/modules.json +4 -0
  2. package/package.json +1 -1
  3. package/packages/account-history/dist/assets/HistoryRecorder-HO_sxeuE.js +248 -0
  4. package/packages/account-history/dist/assets/HistoryRecorder-HO_sxeuE.js.map +1 -0
  5. package/packages/account-history/dist/assets/HistoryViewer-Ct5g7zek.js +308 -0
  6. package/packages/account-history/dist/assets/HistoryViewer-Ct5g7zek.js.map +1 -0
  7. package/packages/account-history/dist/assets/NotebookViewer-BkYJL6Jc.js +504 -0
  8. package/packages/account-history/dist/assets/NotebookViewer-BkYJL6Jc.js.map +1 -0
  9. package/packages/account-history/dist/assets/index-CFzuSuJg.js +148 -0
  10. package/packages/account-history/dist/assets/index-CFzuSuJg.js.map +1 -0
  11. package/packages/account-history/dist/assets/makeDocumentProjection-DXgEZYyv.js +706 -0
  12. package/packages/account-history/dist/assets/makeDocumentProjection-DXgEZYyv.js.map +1 -0
  13. package/packages/account-history/dist/assets/store-CRmRL4Cv.js +1079 -0
  14. package/packages/account-history/dist/assets/store-CRmRL4Cv.js.map +1 -0
  15. package/packages/account-history/dist/index.js +5 -0
  16. package/packages/account-history/dist/index.js.map +1 -0
  17. package/packages/account-history/package.json +33 -0
  18. package/packages/chat/dist/ChatRoot-BXsklgz7.js +6113 -0
  19. package/packages/chat/dist/context-tool-CenQrztX.js +107 -0
  20. package/packages/chat/dist/datatype-1niKKK-c.js +15 -0
  21. package/packages/chat/dist/index-DYFHDHZ9.js +368 -0
  22. package/packages/chat/dist/index.js +5 -0
  23. package/packages/chat/dist/tool-D9BTS5wc.js +38 -0
  24. package/packages/chat/package.json +42 -0
  25. package/packages/comments-view/dist/assets/comments-D9lwpHOh.js +50 -0
  26. package/packages/comments-view/dist/assets/comments-D9lwpHOh.js.map +1 -0
  27. package/packages/comments-view/dist/assets/datatype-C4SMwWiO.js +22 -0
  28. package/packages/comments-view/dist/assets/datatype-C4SMwWiO.js.map +1 -0
  29. package/packages/comments-view/dist/assets/main-C8GVksuY.js +2973 -0
  30. package/packages/comments-view/dist/assets/main-C8GVksuY.js.map +1 -0
  31. package/packages/comments-view/dist/index.js +115 -0
  32. package/packages/comments-view/dist/index.js.map +1 -0
  33. package/packages/comments-view/package.json +36 -0
  34. package/packages/drafts/dist/assets/DraftDatatype-Dn8VF6oC.js +14 -0
  35. package/packages/drafts/dist/assets/DraftDatatype-Dn8VF6oC.js.map +1 -0
  36. package/packages/drafts/dist/assets/DraftListProvider-DVhUGU1x.js +362 -0
  37. package/packages/drafts/dist/assets/DraftListProvider-DVhUGU1x.js.map +1 -0
  38. package/packages/drafts/dist/assets/DraftOverlayProvider-NMDqnpBV.js +123 -0
  39. package/packages/drafts/dist/assets/DraftOverlayProvider-NMDqnpBV.js.map +1 -0
  40. package/packages/drafts/dist/assets/clone-policy-D4XOfZxs.js +15 -0
  41. package/packages/drafts/dist/assets/clone-policy-D4XOfZxs.js.map +1 -0
  42. package/packages/drafts/dist/assets/index-DAqs20jZ.js +65 -0
  43. package/packages/drafts/dist/assets/index-DAqs20jZ.js.map +1 -0
  44. package/packages/drafts/dist/assets/main-Cdev7z-t.js +2366 -0
  45. package/packages/drafts/dist/assets/main-Cdev7z-t.js.map +1 -0
  46. package/packages/drafts/dist/index.js +140 -0
  47. package/packages/drafts/dist/index.js.map +1 -0
  48. package/packages/drafts/package.json +34 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotebookViewer-BkYJL6Jc.js","sources":["../../src/NotebookViewer.tsx"],"sourcesContent":["import { createSignal, createMemo, createEffect, Show, For, onCleanup } from \"solid-js\";\nimport { render } from \"solid-js/web\";\nimport type { AutomergeUrl } from \"@automerge/automerge-repo\";\nimport { makeDocumentProjection } from \"solid-automerge\";\nimport { OpenDocumentEvent } from \"@inkandswitch/patchwork-elements\";\nimport type { ToolImplementation } from \"@inkandswitch/patchwork-plugins\";\nimport {\n type PatchworkToolProps,\n type HistoryDoc,\n type HistoryEntry,\n} from \"./types.ts\";\nimport \"./NotebookViewer.css\";\nimport \"./index.css\";\n\nconst LS_INDEX_KEY = \"notebook-viewer-current-index\";\nconst LS_STEP_KEY = \"notebook-viewer-step-size\";\nconst LS_STEP_MODE_KEY = \"notebook-viewer-step-mode\";\nconst LS_TIME_UNIT_KEY = \"notebook-viewer-time-unit\";\nconst LS_TIME_AMOUNT_KEY = \"notebook-viewer-time-amount\";\n\n// Discrete step size options for \"entries\" mode\nconst ALL_STEP_SIZES = [1, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000];\n\ntype StepMode = \"entries\" | \"time\";\ntype TimeUnit = \"minutes\" | \"hours\" | \"days\" | \"weeks\";\n\nconst TIME_UNIT_OPTIONS: { unit: TimeUnit; label: string; amounts: number[]; msPerUnit: number }[] = [\n { unit: \"minutes\", label: \"min\", amounts: [1, 5, 15, 30, 60], msPerUnit: 60 * 1000 },\n { unit: \"hours\", label: \"hr\", amounts: [1, 2, 4, 6, 8, 12, 24], msPerUnit: 60 * 60 * 1000 },\n { unit: \"days\", label: \"day\", amounts: [1, 2, 3, 5, 7], msPerUnit: 24 * 60 * 60 * 1000 },\n { unit: \"weeks\", label: \"wk\", amounts: [1, 2, 4, 6, 13, 26, 52], msPerUnit: 7 * 24 * 60 * 60 * 1000 },\n];\n\nconst dateTimeFormatter = new Intl.DateTimeFormat(\"en-US\", {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true,\n});\n\n/** Find the index of the entry nearest to targetTimestamp, searching in the given direction. */\nfunction findNearestEntryIndex(\n entries: HistoryEntry[],\n currentIdx: number,\n targetTimestamp: number,\n direction: \"back\" | \"forward\"\n): number {\n if (direction === \"back\") {\n // Search backwards from currentIdx for the last entry at or before targetTimestamp\n for (let i = currentIdx - 1; i >= 0; i--) {\n if (entries[i].timestamp <= targetTimestamp) return i;\n }\n return 0; // clamp to first\n } else {\n // Search forwards from currentIdx for the first entry at or after targetTimestamp\n for (let i = currentIdx + 1; i < entries.length; i++) {\n if (entries[i].timestamp >= targetTimestamp) return i;\n }\n return entries.length - 1; // clamp to last\n }\n}\n\nexport function NotebookViewer(props: PatchworkToolProps<HistoryDoc>) {\n const historyDoc = makeDocumentProjection<HistoryDoc>(props.handle);\n\n // Entries are already in chronological order (HistoryRecorder appends)\n const entries = createMemo(() => historyDoc.entries || []);\n const totalEntries = createMemo(() => entries().length);\n\n // Total time span of history in ms\n const historySpanMs = createMemo(() => {\n const e = entries();\n if (e.length < 2) return 0;\n return e[e.length - 1].timestamp - e[0].timestamp;\n });\n\n // --- Entry step sizes ---\n const availableStepSizes = createMemo(() => {\n const total = totalEntries();\n return ALL_STEP_SIZES.filter((s) => s <= total);\n });\n\n // --- Time step: available amounts per unit, filtered by history span ---\n const availableTimeAmounts = createMemo(() => {\n const span = historySpanMs();\n const result: Record<TimeUnit, number[]> = {\n minutes: [],\n hours: [],\n days: [],\n weeks: [],\n };\n for (const opt of TIME_UNIT_OPTIONS) {\n result[opt.unit] = opt.amounts.filter((a) => a * opt.msPerUnit <= span);\n }\n return result;\n });\n\n // Which time units have at least one available amount\n const availableTimeUnits = createMemo(() =>\n TIME_UNIT_OPTIONS.filter((opt) => availableTimeAmounts()[opt.unit].length > 0)\n );\n\n // --- Load saved state from localStorage ---\n const savedIndexRaw = localStorage.getItem(LS_INDEX_KEY);\n const hasSavedIndex = savedIndexRaw !== null;\n const savedIndex = hasSavedIndex ? parseInt(savedIndexRaw, 10) : -1;\n const savedStepSize = parseInt(localStorage.getItem(LS_STEP_KEY) || \"1\", 10);\n const savedStepMode = (localStorage.getItem(LS_STEP_MODE_KEY) || \"entries\") as StepMode;\n const savedTimeUnit = (localStorage.getItem(LS_TIME_UNIT_KEY) || \"hours\") as TimeUnit;\n const savedTimeAmount = parseInt(localStorage.getItem(LS_TIME_AMOUNT_KEY) || \"1\", 10);\n\n const [rawCurrentIndex, setRawCurrentIndex] = createSignal(\n hasSavedIndex && Number.isFinite(savedIndex) ? Math.max(0, savedIndex) : -1\n );\n const [stepSize, setStepSize] = createSignal(\n Number.isFinite(savedStepSize) ? Math.max(1, savedStepSize) : 1\n );\n const [stepMode, setStepMode] = createSignal<StepMode>(savedStepMode);\n const [timeUnit, setTimeUnit] = createSignal<TimeUnit>(savedTimeUnit);\n const [timeAmount, setTimeAmount] = createSignal(\n Number.isFinite(savedTimeAmount) ? Math.max(1, savedTimeAmount) : 1\n );\n\n // Clamped current index: -1 means \"no saved position\" → latest entry\n const currentIndex = createMemo(() => {\n const total = totalEntries();\n if (total === 0) return 0;\n const raw = rawCurrentIndex();\n if (raw < 0) return total - 1;\n return Math.min(Math.max(0, raw), total - 1);\n });\n\n const currentEntry = createMemo(() => {\n const e = entries();\n const idx = currentIndex();\n return e.length > 0 ? e[idx] : undefined;\n });\n\n const currentDateLabel = createMemo(() => {\n const entry = currentEntry();\n if (!entry) return \"\";\n return dateTimeFormatter.format(new Date(entry.timestamp));\n });\n\n const viewDocUrl = createMemo(() => {\n const entry = currentEntry();\n if (!entry) return undefined;\n if (entry.heads && entry.heads.length > 0) {\n return `${entry.docUrl}#${entry.heads.join(\"|\")}` as AutomergeUrl;\n }\n return entry.docUrl;\n });\n\n const viewToolId = createMemo(() => currentEntry()?.toolId);\n\n const viewKey = createMemo(() => {\n const url = viewDocUrl();\n const toolId = viewToolId();\n return url ? `${url}-${toolId || \"default\"}` : undefined;\n });\n\n // --- Navigation ---\n const canGoBack = createMemo(() => currentIndex() > 0);\n const canGoForward = createMemo(() => {\n const total = totalEntries();\n return total > 0 && currentIndex() < total - 1;\n });\n\n // Compute time step duration in ms\n const timeStepMs = createMemo(() => {\n const unit = timeUnit();\n const amount = timeAmount();\n const opt = TIME_UNIT_OPTIONS.find((o) => o.unit === unit);\n return opt ? amount * opt.msPerUnit : 0;\n });\n\n const goBack = () => {\n if (stepMode() === \"entries\") {\n setRawCurrentIndex(Math.max(0, currentIndex() - stepSize()));\n } else {\n const entry = currentEntry();\n if (!entry) return;\n const targetTs = entry.timestamp - timeStepMs();\n const newIdx = findNearestEntryIndex(entries(), currentIndex(), targetTs, \"back\");\n setRawCurrentIndex(newIdx);\n }\n };\n\n const goForward = () => {\n if (stepMode() === \"entries\") {\n setRawCurrentIndex(Math.min(totalEntries() - 1, currentIndex() + stepSize()));\n } else {\n const entry = currentEntry();\n if (!entry) return;\n const targetTs = entry.timestamp + timeStepMs();\n const newIdx = findNearestEntryIndex(entries(), currentIndex(), targetTs, \"forward\");\n setRawCurrentIndex(newIdx);\n }\n };\n\n // --- Entry step size slider helpers ---\n const stepSizeSliderIndex = createMemo(() => {\n const sizes = availableStepSizes();\n const idx = sizes.indexOf(stepSize());\n if (idx >= 0) return idx;\n for (let i = sizes.length - 1; i >= 0; i--) {\n if (sizes[i] <= stepSize()) return i;\n }\n return 0;\n });\n\n const updateStepSizeFromSlider = (sliderIndex: number) => {\n const sizes = availableStepSizes();\n const clamped = Math.max(0, Math.min(sliderIndex, sizes.length - 1));\n setStepSize(sizes[clamped] || 1);\n };\n\n // --- Time amount slider helpers ---\n const currentTimeAmounts = createMemo(() => availableTimeAmounts()[timeUnit()] || []);\n\n const timeAmountSliderIndex = createMemo(() => {\n const amounts = currentTimeAmounts();\n const idx = amounts.indexOf(timeAmount());\n if (idx >= 0) return idx;\n for (let i = amounts.length - 1; i >= 0; i--) {\n if (amounts[i] <= timeAmount()) return i;\n }\n return 0;\n });\n\n const updateTimeAmountFromSlider = (sliderIndex: number) => {\n const amounts = currentTimeAmounts();\n const clamped = Math.max(0, Math.min(sliderIndex, amounts.length - 1));\n setTimeAmount(amounts[clamped] || 1);\n };\n\n // Format the time step display label\n const timeStepLabel = createMemo(() => {\n const amount = timeAmount();\n const unit = timeUnit();\n const opt = TIME_UNIT_OPTIONS.find((o) => o.unit === unit);\n if (!opt) return \"\";\n const label = amount === 1 ? opt.label : opt.label + \"s\";\n return `${amount} ${label}`;\n });\n\n const goToFirst = () => setRawCurrentIndex(0);\n const goToLatest = () => setRawCurrentIndex(totalEntries() - 1);\n\n // --- Playback ---\n const [isPlaying, setIsPlaying] = createSignal(false);\n const [playDirection, setPlayDirection] = createSignal<\"forward\" | \"reverse\">(\"forward\");\n let playIntervalId: number | undefined;\n\n const stopPlayback = () => {\n setIsPlaying(false);\n if (playIntervalId !== undefined) {\n clearInterval(playIntervalId);\n playIntervalId = undefined;\n }\n };\n\n const togglePlayback = () => {\n if (isPlaying()) {\n stopPlayback();\n } else {\n setIsPlaying(true);\n playIntervalId = window.setInterval(() => {\n const dir = playDirection();\n if (dir === \"forward\") {\n if (!canGoForward()) {\n stopPlayback();\n return;\n }\n goForward();\n } else {\n if (!canGoBack()) {\n stopPlayback();\n return;\n }\n goBack();\n }\n }, 1000);\n }\n };\n\n onCleanup(stopPlayback);\n\n // --- Open Document ---\n const [showVersionDropdown, setShowVersionDropdown] = createSignal(false);\n\n // Check if the current entry has saved heads (meaning it's a snapshot from a point in time).\n // If it has heads, we offer the choice of opening \"this version\" vs \"latest version\".\n const hasHeads = createMemo(() => {\n const entry = currentEntry();\n return !!(entry && entry.heads && entry.heads.length > 0);\n });\n\n const openDocument = (useLatest: boolean) => {\n const entry = currentEntry();\n if (!entry) return;\n\n let url: AutomergeUrl;\n if (useLatest || !entry.heads || entry.heads.length === 0) {\n url = entry.docUrl;\n } else {\n url = `${entry.docUrl}#${entry.heads.join(\"|\")}` as AutomergeUrl;\n }\n\n props.element.dispatchEvent(\n new OpenDocumentEvent({\n url,\n toolId: entry.toolId,\n })\n );\n\n setShowVersionDropdown(false);\n };\n\n const handleOpenDocClick = () => {\n if (hasHeads()) {\n setShowVersionDropdown((v) => !v);\n } else {\n openDocument(true);\n }\n };\n\n // Close dropdown when clicking outside\n const onClickOutside = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (!target.closest(\".notebook-viewer-open-doc\")) {\n setShowVersionDropdown(false);\n }\n };\n\n document.addEventListener(\"click\", onClickOutside);\n onCleanup(() => document.removeEventListener(\"click\", onClickOutside));\n\n // Keyboard navigation\n const onKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.isContentEditable) {\n return;\n }\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n goBack();\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault();\n goForward();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => document.removeEventListener(\"keydown\", onKeyDown));\n\n // Persist state to localStorage\n createEffect(() => localStorage.setItem(LS_INDEX_KEY, String(currentIndex())));\n createEffect(() => localStorage.setItem(LS_STEP_KEY, String(stepSize())));\n createEffect(() => localStorage.setItem(LS_STEP_MODE_KEY, stepMode()));\n createEffect(() => localStorage.setItem(LS_TIME_UNIT_KEY, timeUnit()));\n createEffect(() => localStorage.setItem(LS_TIME_AMOUNT_KEY, String(timeAmount())));\n\n // Arrow tooltip text\n const stepDescription = createMemo(() => {\n if (stepMode() === \"entries\") {\n const s = stepSize();\n return `${s} ${s === 1 ? \"entry\" : \"entries\"}`;\n }\n return timeStepLabel();\n });\n\n return (\n <div class=\"notebook-viewer\">\n <Show\n when={totalEntries() > 0}\n fallback={\n <div class=\"notebook-viewer-empty\">\n No history entries yet. Open some documents to start tracking history.\n </div>\n }\n >\n {/* Playback controls — floating top-left */}\n <div class=\"notebook-viewer-playback\">\n {/* Direction toggle */}\n <div\n class=\"notebook-viewer-direction-toggle\"\n onClick={() => setPlayDirection((d) => d === \"forward\" ? \"reverse\" : \"forward\")}\n title={`Direction: ${playDirection()}`}\n >\n <span class={`notebook-viewer-direction-option ${playDirection() === \"reverse\" ? \"active\" : \"\"}`}>\n Rev\n </span>\n <span class={`notebook-viewer-direction-option ${playDirection() === \"forward\" ? \"active\" : \"\"}`}>\n Fwd\n </span>\n <div class={`notebook-viewer-direction-thumb ${playDirection() === \"forward\" ? \"right\" : \"left\"}`} />\n </div>\n\n {/* Play/Pause button */}\n <button\n class=\"notebook-viewer-play-button\"\n onClick={togglePlayback}\n title={isPlaying() ? \"Pause\" : \"Play\"}\n >\n <Show when={!isPlaying()}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\"\n fill=\"currentColor\" stroke=\"none\">\n <polygon points=\"6 3 20 12 6 21\" />\n </svg>\n </Show>\n <Show when={isPlaying()}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\"\n fill=\"currentColor\" stroke=\"none\">\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" />\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" />\n </svg>\n </Show>\n </button>\n </div>\n\n {/* Open document — floating top-right */}\n <div class=\"notebook-viewer-open-doc\">\n <button\n class=\"notebook-viewer-open-doc-button\"\n onClick={handleOpenDocClick}\n title=\"Open this document\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n Open document\n </button>\n\n <Show when={showVersionDropdown()}>\n <div class=\"notebook-viewer-version-dropdown\">\n <button\n class=\"notebook-viewer-version-option\"\n onClick={() => openDocument(true)}\n >\n Latest version\n </button>\n <button\n class=\"notebook-viewer-version-option\"\n onClick={() => openDocument(false)}\n >\n This version\n </button>\n </div>\n </Show>\n </div>\n\n {/* Timeline controls */}\n <div class=\"notebook-viewer-timeline\">\n <div class=\"notebook-viewer-date-label\">{currentDateLabel()}</div>\n <div class=\"notebook-viewer-timeline-row\">\n <button\n class=\"notebook-viewer-timeline-label\"\n onClick={goToFirst}\n title=\"Go to first entry\"\n >\n First\n </button>\n <input\n type=\"range\"\n class=\"notebook-viewer-timeline-slider\"\n min={0}\n max={totalEntries() - 1}\n value={currentIndex()}\n onInput={(e) => setRawCurrentIndex(parseInt(e.currentTarget.value, 10))}\n />\n <button\n class=\"notebook-viewer-timeline-label\"\n onClick={goToLatest}\n title=\"Go to latest entry\"\n >\n Latest\n </button>\n </div>\n </div>\n\n {/* Page area with arrow buttons */}\n <div class=\"notebook-viewer-page-area\">\n <button\n class=\"notebook-viewer-arrow\"\n onClick={goBack}\n disabled={!canGoBack()}\n aria-label=\"Go back\"\n title={`Go back ${stepDescription()}`}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n\n <div class=\"notebook-viewer-page\">\n <Show when={viewKey()} keyed>\n {(_key) => (\n <patchwork-view\n doc-url={viewDocUrl()!}\n tool-id={viewToolId()!}\n />\n )}\n </Show>\n </div>\n\n <button\n class=\"notebook-viewer-arrow\"\n onClick={goForward}\n disabled={!canGoForward()}\n aria-label=\"Go forward\"\n title={`Go forward ${stepDescription()}`}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n\n {/* Bottom controls */}\n <div class=\"notebook-viewer-bottom\">\n <div class=\"notebook-viewer-step-row\">\n {/* Step mode dropdown */}\n <select\n class=\"notebook-viewer-select\"\n value={stepMode()}\n onChange={(e) => setStepMode(e.currentTarget.value as StepMode)}\n >\n <option value=\"entries\">Step by entries</option>\n <option value=\"time\">Step by time</option>\n </select>\n\n {/* Time unit dropdown (only in time mode) */}\n <Show when={stepMode() === \"time\"}>\n <select\n class=\"notebook-viewer-select\"\n value={timeUnit()}\n onChange={(e) => {\n const unit = e.currentTarget.value as TimeUnit;\n setTimeUnit(unit);\n const amounts = availableTimeAmounts()[unit];\n if (amounts.length > 0 && !amounts.includes(timeAmount())) {\n setTimeAmount(amounts[0]);\n }\n }}\n >\n <For each={availableTimeUnits()}>\n {(opt) => (\n <option value={opt.unit}>{opt.unit}</option>\n )}\n </For>\n </select>\n </Show>\n\n {/* Slider + value for entries mode */}\n <Show when={stepMode() === \"entries\"}>\n <input\n type=\"range\"\n class=\"notebook-viewer-step-slider\"\n min={0}\n max={Math.max(0, availableStepSizes().length - 1)}\n value={stepSizeSliderIndex()}\n onInput={(e) => updateStepSizeFromSlider(parseInt(e.currentTarget.value, 10))}\n />\n <span class=\"notebook-viewer-step-value\">{stepSize()}</span>\n </Show>\n\n {/* Slider + value for time mode */}\n <Show when={stepMode() === \"time\" && currentTimeAmounts().length > 0}>\n <input\n type=\"range\"\n class=\"notebook-viewer-step-slider\"\n min={0}\n max={Math.max(0, currentTimeAmounts().length - 1)}\n value={timeAmountSliderIndex()}\n onInput={(e) => updateTimeAmountFromSlider(parseInt(e.currentTarget.value, 10))}\n />\n <span class=\"notebook-viewer-step-value\">{timeStepLabel()}</span>\n </Show>\n </div>\n\n <div class=\"notebook-viewer-entry-info\">\n <span class=\"notebook-viewer-entry-info-position\">\n Entry {currentIndex() + 1} of {totalEntries()}\n </span>\n <span>{currentEntry()?.docTitle}</span>\n </div>\n </div>\n </Show>\n </div>\n );\n}\n\nexport const renderNotebookViewer: ToolImplementation<HistoryDoc> = (\n handle,\n element\n) => render(() => <NotebookViewer handle={handle} repo={element.repo} element={element} />, element);\n"],"names":["LS_INDEX_KEY","LS_STEP_KEY","LS_STEP_MODE_KEY","LS_TIME_UNIT_KEY","LS_TIME_AMOUNT_KEY","ALL_STEP_SIZES","TIME_UNIT_OPTIONS","unit","label","amounts","msPerUnit","dateTimeFormatter","Intl","DateTimeFormat","year","month","day","hour","minute","hour12","findNearestEntryIndex","entries","currentIdx","targetTimestamp","direction","i","timestamp","length","NotebookViewer","props","historyDoc","makeDocumentProjection","handle","createMemo","totalEntries","historySpanMs","e","availableStepSizes","total","filter","s","availableTimeAmounts","span","result","minutes","hours","days","weeks","opt","a","availableTimeUnits","savedIndexRaw","localStorage","getItem","hasSavedIndex","savedIndex","parseInt","savedStepSize","savedStepMode","savedTimeUnit","savedTimeAmount","rawCurrentIndex","setRawCurrentIndex","createSignal","Number","isFinite","Math","max","stepSize","setStepSize","stepMode","setStepMode","timeUnit","setTimeUnit","timeAmount","setTimeAmount","currentIndex","raw","min","currentEntry","idx","undefined","currentDateLabel","entry","format","Date","viewDocUrl","heads","docUrl","join","viewToolId","toolId","viewKey","url","canGoBack","canGoForward","timeStepMs","amount","find","o","goBack","targetTs","newIdx","goForward","stepSizeSliderIndex","sizes","indexOf","updateStepSizeFromSlider","sliderIndex","clamped","currentTimeAmounts","timeAmountSliderIndex","updateTimeAmountFromSlider","timeStepLabel","goToFirst","goToLatest","isPlaying","setIsPlaying","playDirection","setPlayDirection","playIntervalId","stopPlayback","clearInterval","togglePlayback","window","setInterval","dir","onCleanup","showVersionDropdown","setShowVersionDropdown","hasHeads","openDocument","useLatest","element","dispatchEvent","OpenDocumentEvent","handleOpenDocClick","v","onClickOutside","target","closest","document","addEventListener","removeEventListener","onKeyDown","tagName","isContentEditable","key","preventDefault","createEffect","setItem","String","stepDescription","_el$","_tmpl$10","_$insert","_$createComponent","Show","when","fallback","_tmpl$11","children","_el$2","_tmpl$3","_el$3","firstChild","_el$4","_el$5","nextSibling","_el$6","_el$7","$$click","d","_tmpl$","_tmpl$2","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_$setAttribute","t","_$className","_el$0","_tmpl$5","_el$1","_el$10","_tmpl$4","_el$11","_el$12","_el$13","_tmpl$6","_el$14","_el$15","_el$16","_el$17","_el$18","$$input","currentTarget","value","_el$19","_tmpl$7","_el$20","_el$21","_el$22","keyed","_key","_el$38","_tmpl$12","_$owner","_$getOwner","_v$0","_v$1","_v$6","_v$7","_v$8","_v$9","disabled","_el$23","_tmpl$1","_el$24","_el$25","_el$31","_el$32","_el$33","_el$35","_el$36","_el$26","_tmpl$8","includes","For","each","_el$39","_tmpl$13","_el$27","_tmpl$9","_el$28","_tmpl$0","_$memo","_el$29","_el$30","docTitle","renderNotebookViewer","render","repo","_$delegateEvents"],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./HistoryRecorder-HO_sxeuE.js","./store-CRmRL4Cv.js","./HistoryViewer-Ct5g7zek.js","./makeDocumentProjection-DXgEZYyv.js","./NotebookViewer-BkYJL6Jc.js"])))=>i.map(i=>d[i]);
2
+ const scriptRel = "modulepreload";
3
+ const assetsURL = function(dep, importerUrl) {
4
+ return new URL(dep, importerUrl).href;
5
+ };
6
+ const seen = {};
7
+ const __vitePreload = function preload(baseModule, deps, importerUrl) {
8
+ let promise = Promise.resolve();
9
+ if (deps && deps.length > 0) {
10
+ let allSettled = function(promises$2) {
11
+ return Promise.all(promises$2.map((p) => Promise.resolve(p).then((value$1) => ({
12
+ status: "fulfilled",
13
+ value: value$1
14
+ }), (reason) => ({
15
+ status: "rejected",
16
+ reason
17
+ }))));
18
+ };
19
+ const links = document.getElementsByTagName("link");
20
+ const cspNonceMeta = document.querySelector("meta[property=csp-nonce]");
21
+ const cspNonce = cspNonceMeta?.nonce || cspNonceMeta?.getAttribute("nonce");
22
+ promise = allSettled(deps.map((dep) => {
23
+ dep = assetsURL(dep, importerUrl);
24
+ if (dep in seen) return;
25
+ seen[dep] = true;
26
+ const isCss = dep.endsWith(".css");
27
+ const cssSelector = isCss ? '[rel="stylesheet"]' : "";
28
+ if (!!importerUrl) for (let i$1 = links.length - 1; i$1 >= 0; i$1--) {
29
+ const link$1 = links[i$1];
30
+ if (link$1.href === dep && (!isCss || link$1.rel === "stylesheet")) return;
31
+ }
32
+ else if (document.querySelector(`link[href="${dep}"]${cssSelector}`)) return;
33
+ const link = document.createElement("link");
34
+ link.rel = isCss ? "stylesheet" : scriptRel;
35
+ if (!isCss) link.as = "script";
36
+ link.crossOrigin = "";
37
+ link.href = dep;
38
+ if (cspNonce) link.setAttribute("nonce", cspNonce);
39
+ document.head.appendChild(link);
40
+ if (isCss) return new Promise((res, rej) => {
41
+ link.addEventListener("load", res);
42
+ link.addEventListener("error", () => rej(/* @__PURE__ */ new Error(`Unable to preload CSS for ${dep}`)));
43
+ });
44
+ }));
45
+ }
46
+ function handlePreloadError(err$2) {
47
+ const e$1 = new Event("vite:preloadError", { cancelable: true });
48
+ e$1.payload = err$2;
49
+ window.dispatchEvent(e$1);
50
+ if (!e$1.defaultPrevented) throw err$2;
51
+ }
52
+ return promise.then((res) => {
53
+ for (const item of res || []) {
54
+ if (item.status !== "rejected") continue;
55
+ handlePreloadError(item.reason);
56
+ }
57
+ return baseModule().catch(handlePreloadError);
58
+ });
59
+ };
60
+ const ACCOUNT_HISTORY_DATATYPE = "patchwork:account-history";
61
+ const DEDUPLICATION_TIME_THRESHOLD = 500;
62
+ const VIEWER_TOOL_ID = "account-history-viewer";
63
+ const NOTEBOOK_VIEWER_TOOL_ID = "account-history-notebook-viewer";
64
+ const plugins = [{
65
+ id: ACCOUNT_HISTORY_DATATYPE,
66
+ type: "patchwork:datatype",
67
+ name: "Account History",
68
+ icon: "Clock",
69
+ unlisted: true,
70
+ async load() {
71
+ return {
72
+ getTitle: (doc) => doc.title || "Account History",
73
+ create: () => ({
74
+ ["@patchwork"]: {
75
+ type: ACCOUNT_HISTORY_DATATYPE
76
+ },
77
+ title: "Account History",
78
+ entries: []
79
+ })
80
+ };
81
+ }
82
+ }, {
83
+ id: "account-history-toolbar",
84
+ type: "patchwork:tool",
85
+ tags: ["titlebar-tool"],
86
+ name: "Account History",
87
+ supportedDatatypes: ["account"],
88
+ icon: "Clock",
89
+ unlisted: true,
90
+ async load() {
91
+ const {
92
+ renderHistoryRecorder
93
+ } = await __vitePreload(async () => {
94
+ const {
95
+ renderHistoryRecorder: renderHistoryRecorder2
96
+ } = await import("./HistoryRecorder-HO_sxeuE.js");
97
+ return {
98
+ renderHistoryRecorder: renderHistoryRecorder2
99
+ };
100
+ }, true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
101
+ return renderHistoryRecorder;
102
+ }
103
+ }, {
104
+ id: VIEWER_TOOL_ID,
105
+ type: "patchwork:tool",
106
+ name: "Account History Viewer",
107
+ supportedDatatypes: [ACCOUNT_HISTORY_DATATYPE],
108
+ icon: "Clock",
109
+ async load() {
110
+ const {
111
+ renderHistoryViewer
112
+ } = await __vitePreload(async () => {
113
+ const {
114
+ renderHistoryViewer: renderHistoryViewer2
115
+ } = await import("./HistoryViewer-Ct5g7zek.js");
116
+ return {
117
+ renderHistoryViewer: renderHistoryViewer2
118
+ };
119
+ }, true ? __vite__mapDeps([2,1,3]) : void 0, import.meta.url);
120
+ return renderHistoryViewer;
121
+ }
122
+ }, {
123
+ id: NOTEBOOK_VIEWER_TOOL_ID,
124
+ type: "patchwork:tool",
125
+ name: "Account History Notebook",
126
+ supportedDatatypes: [ACCOUNT_HISTORY_DATATYPE],
127
+ icon: "BookOpen",
128
+ async load() {
129
+ const {
130
+ renderNotebookViewer
131
+ } = await __vitePreload(async () => {
132
+ const {
133
+ renderNotebookViewer: renderNotebookViewer2
134
+ } = await import("./NotebookViewer-BkYJL6Jc.js");
135
+ return {
136
+ renderNotebookViewer: renderNotebookViewer2
137
+ };
138
+ }, true ? __vite__mapDeps([4,1,3]) : void 0, import.meta.url);
139
+ return renderNotebookViewer;
140
+ }
141
+ }];
142
+ export {
143
+ ACCOUNT_HISTORY_DATATYPE as A,
144
+ DEDUPLICATION_TIME_THRESHOLD as D,
145
+ VIEWER_TOOL_ID as V,
146
+ plugins as p
147
+ };
148
+ //# sourceMappingURL=index-CFzuSuJg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,MAAM,2BAA2B;AAEjC,MAAM,+BAA+B;AACrC,MAAM,iBAAiB;AACvB,MAAM,0BAA0B;ACIhC,MAAMA,UAAU,CACrB;AAAA,EACEC,IAAIC;AAAAA,EACJC,MAAM;AAAA,EACNC,MAAM;AAAA,EACNC,MAAM;AAAA,EACNC,UAAU;AAAA,EACV,MAAMC,OAAO;AACX,WAAO;AAAA,MACLC,UAAUA,CAACC,QAAoBA,IAAIC,SAAS;AAAA,MAC5CC,QAAQA,OAAmB;AAAA,QACzB,CAAC,YAAY,GAAG;AAAA,UAAER,MAAMD;AAAAA;AAAAA,QACxBQ,OAAO;AAAA,QACPE,SAAS;AAAA;AAAA,IACX;AAAA,EAEJ;AACF,GACA;AAAA,EACEX,IAAI;AAAA,EACJE,MAAM;AAAA,EACNU,MAAM,CAAC,eAAe;AAAA,EACtBT,MAAM;AAAA,EACNU,oBAAoB,CAAC,SAAS;AAAA,EAC9BT,MAAM;AAAA,EACNC,UAAU;AAAA,EACV,MAAMC,OAAyC;AAC7C,UAAM;AAAA,MAAEQ;AAAAA,QAA0B;AAAA;AAAA;MAAM,iBAAO,+BAAuB;AAAA;AAAA;MAAA;AAAA;AACtE,WAAOA;AAAAA,EACT;AACF,GACA;AAAA,EACEd,IAAIe;AAAAA,EACJb,MAAM;AAAA,EACNC,MAAM;AAAA,EACNU,oBAAoB,CAACZ,wBAAwB;AAAA,EAC7CG,MAAM;AAAA,EACN,MAAME,OAAgD;AACpD,UAAM;AAAA,MAAEU;AAAAA,QAAwB;AAAA;AAAA;MAAM,iBAAO,6BAAqB;AAAA;AAAA;MAAA;AAAA;AAClE,WAAOA;AAAAA,EACT;AACF,GACA;AAAA,EACEhB,IAAIiB;AAAAA,EACJf,MAAM;AAAA,EACNC,MAAM;AAAA,EACNU,oBAAoB,CAACZ,wBAAwB;AAAA,EAC7CG,MAAM;AAAA,EACN,MAAME,OAAgD;AACpD,UAAM;AAAA,MAAEY;AAAAA,QAAyB;AAAA;AAAA;MAAM,iBAAO,8BAAsB;AAAA;AAAA;MAAA;AAAA;AACpE,WAAOA;AAAAA,EACT;AACF,CAAC","names":["plugins","id","ACCOUNT_HISTORY_DATATYPE","type","name","icon","unlisted","load","getTitle","doc","title","create","entries","tags","supportedDatatypes","renderHistoryRecorder","VIEWER_TOOL_ID","renderHistoryViewer","NOTEBOOK_VIEWER_TOOL_ID","renderNotebookViewer"],"ignoreList":[],"sources":["../../src/constants.ts","../../src/index.tsx"],"sourcesContent":["export const ACCOUNT_HISTORY_DATATYPE = \"patchwork:account-history\";\n// if the same document is opened again within this time, we consider it a duplicate and don't record it again\nexport const DEDUPLICATION_TIME_THRESHOLD = 500; // milliseconds\nexport const VIEWER_TOOL_ID = \"account-history-viewer\";\nexport const NOTEBOOK_VIEWER_TOOL_ID = \"account-history-notebook-viewer\";\n","import { type ToolImplementation } from \"@inkandswitch/patchwork-plugins\";\nimport {\n ACCOUNT_HISTORY_DATATYPE,\n VIEWER_TOOL_ID,\n NOTEBOOK_VIEWER_TOOL_ID,\n} from \"./constants.ts\";\nimport type { HistoryDoc } from \"./types.ts\";\n\nexport const plugins = [\n {\n id: ACCOUNT_HISTORY_DATATYPE,\n type: \"patchwork:datatype\",\n name: \"Account History\",\n icon: \"Clock\",\n unlisted: true,\n async load() {\n return {\n getTitle: (doc: HistoryDoc) => doc.title || \"Account History\",\n create: (): HistoryDoc => ({\n [\"@patchwork\"]: { type: ACCOUNT_HISTORY_DATATYPE },\n title: \"Account History\",\n entries: [],\n }),\n };\n },\n },\n {\n id: \"account-history-toolbar\",\n type: \"patchwork:tool\",\n tags: [\"titlebar-tool\"],\n name: \"Account History\",\n supportedDatatypes: [\"account\"],\n icon: \"Clock\",\n unlisted: true,\n async load(): Promise<ToolImplementation<any>> {\n const { renderHistoryRecorder } = await import(\"./HistoryRecorder.tsx\");\n return renderHistoryRecorder;\n },\n },\n {\n id: VIEWER_TOOL_ID,\n type: \"patchwork:tool\",\n name: \"Account History Viewer\",\n supportedDatatypes: [ACCOUNT_HISTORY_DATATYPE],\n icon: \"Clock\",\n async load(): Promise<ToolImplementation<HistoryDoc>> {\n const { renderHistoryViewer } = await import(\"./HistoryViewer.tsx\");\n return renderHistoryViewer;\n },\n },\n {\n id: NOTEBOOK_VIEWER_TOOL_ID,\n type: \"patchwork:tool\",\n name: \"Account History Notebook\",\n supportedDatatypes: [ACCOUNT_HISTORY_DATATYPE],\n icon: \"BookOpen\",\n async load(): Promise<ToolImplementation<HistoryDoc>> {\n const { renderNotebookViewer } = await import(\"./NotebookViewer.tsx\");\n return renderNotebookViewer;\n },\n },\n];\n"],"file":"index-CFzuSuJg.js"}