@knpkv/rly 0.8.0 → 0.10.0

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 (91) hide show
  1. package/README.md +49 -3
  2. package/dist/{Dialog-_t9OodCK.js → Dialog-B9Ub_gMT.js} +79 -62
  3. package/dist/Dialog-B9Ub_gMT.js.map +1 -0
  4. package/dist/components.css +2 -2
  5. package/dist/diff/bounded/index.js +317 -303
  6. package/dist/diff/bounded/index.js.map +1 -1
  7. package/dist/diff/index.js +2436 -2433
  8. package/dist/diff/index.js.map +1 -1
  9. package/dist/diff/patch/index.js +188 -186
  10. package/dist/diff/patch/index.js.map +1 -1
  11. package/dist/diff/workbench/index.js +1 -1
  12. package/dist/dts/diff/DiffCodeView.d.ts.map +1 -1
  13. package/dist/dts/diff/DiffFileTree.d.ts.map +1 -1
  14. package/dist/dts/diff/DiffFinding.d.ts.map +1 -1
  15. package/dist/dts/diff/DiffHeader.d.ts.map +1 -1
  16. package/dist/dts/diff/bounded/BoundedDiffCodeView.d.ts.map +1 -1
  17. package/dist/dts/diff/patch/PatchDiffView.d.ts.map +1 -1
  18. package/dist/dts/internal/useNarrowerThan.d.ts +10 -0
  19. package/dist/dts/internal/useNarrowerThan.d.ts.map +1 -0
  20. package/dist/dts/patterns/AgentThread.d.ts.map +1 -1
  21. package/dist/dts/patterns/DecisionBar.d.ts +68 -0
  22. package/dist/dts/patterns/DecisionBar.d.ts.map +1 -0
  23. package/dist/dts/patterns/FreshnessStamp.d.ts.map +1 -1
  24. package/dist/dts/patterns/Hero.d.ts +69 -0
  25. package/dist/dts/patterns/Hero.d.ts.map +1 -0
  26. package/dist/dts/patterns/Region.d.ts +56 -0
  27. package/dist/dts/patterns/Region.d.ts.map +1 -0
  28. package/dist/dts/patterns/ReleaseRelay.d.ts.map +1 -1
  29. package/dist/dts/patterns/StageRail.d.ts +11 -1
  30. package/dist/dts/patterns/StageRail.d.ts.map +1 -1
  31. package/dist/dts/patterns/TimelineRow.d.ts +25 -0
  32. package/dist/dts/patterns/TimelineRow.d.ts.map +1 -1
  33. package/dist/dts/patterns/Verdict.d.ts +1 -1
  34. package/dist/dts/patterns/Verdict.d.ts.map +1 -1
  35. package/dist/dts/patterns/index.d.ts +8 -2
  36. package/dist/dts/patterns/index.d.ts.map +1 -1
  37. package/dist/dts/primitives/Button.d.ts +9 -4
  38. package/dist/dts/primitives/Button.d.ts.map +1 -1
  39. package/dist/dts/primitives/ChartLegend.d.ts +23 -0
  40. package/dist/dts/primitives/ChartLegend.d.ts.map +1 -0
  41. package/dist/dts/primitives/Field.d.ts +8 -3
  42. package/dist/dts/primitives/Field.d.ts.map +1 -1
  43. package/dist/dts/primitives/IconButton.d.ts +9 -4
  44. package/dist/dts/primitives/IconButton.d.ts.map +1 -1
  45. package/dist/dts/primitives/LimitTrack.d.ts +62 -0
  46. package/dist/dts/primitives/LimitTrack.d.ts.map +1 -0
  47. package/dist/dts/primitives/Notice.d.ts +5 -5
  48. package/dist/dts/primitives/Select.d.ts +8 -3
  49. package/dist/dts/primitives/Select.d.ts.map +1 -1
  50. package/dist/dts/primitives/StateLabel.d.ts +6 -6
  51. package/dist/dts/primitives/StateLabel.d.ts.map +1 -1
  52. package/dist/dts/primitives/StatePanel.d.ts +7 -6
  53. package/dist/dts/primitives/StatePanel.d.ts.map +1 -1
  54. package/dist/dts/primitives/ThemeSelect.d.ts +3 -2
  55. package/dist/dts/primitives/ThemeSelect.d.ts.map +1 -1
  56. package/dist/dts/primitives/ToggleGroup.d.ts +9 -4
  57. package/dist/dts/primitives/ToggleGroup.d.ts.map +1 -1
  58. package/dist/dts/primitives/TrackKey.d.ts +20 -0
  59. package/dist/dts/primitives/TrackKey.d.ts.map +1 -0
  60. package/dist/dts/primitives/index.d.ts +6 -0
  61. package/dist/dts/primitives/index.d.ts.map +1 -1
  62. package/dist/dts/tokens/control.d.ts +27 -0
  63. package/dist/dts/tokens/control.d.ts.map +1 -0
  64. package/dist/dts/tokens/index.d.ts +2 -2
  65. package/dist/dts/tokens/index.d.ts.map +1 -1
  66. package/dist/dts/tokens/semantic-tokens.d.ts +3 -1
  67. package/dist/dts/tokens/semantic-tokens.d.ts.map +1 -1
  68. package/dist/generated-tokens.css +55 -6
  69. package/dist/index.js +5 -5
  70. package/dist/patterns/index.js +2 -2
  71. package/dist/{patterns-LJ8Y44f2.js → patterns-DTsU3pFo.js} +1251 -954
  72. package/dist/patterns-DTsU3pFo.js.map +1 -0
  73. package/dist/primitives/index.js +3 -3
  74. package/dist/primitives-CgvvYKjR.js +589 -0
  75. package/dist/primitives-CgvvYKjR.js.map +1 -0
  76. package/dist/tokens/index.js +2 -2
  77. package/dist/{tokens-CjK9bxo7.js → tokens-B075JP3Z.js} +8 -3
  78. package/dist/tokens-B075JP3Z.js.map +1 -0
  79. package/dist/useNarrowerThan-B1PM32sm.js +21 -0
  80. package/dist/useNarrowerThan-B1PM32sm.js.map +1 -0
  81. package/dist/{workbench-4C25n_BY.js → workbench-CHCnYW3G.js} +107 -131
  82. package/dist/workbench-CHCnYW3G.js.map +1 -0
  83. package/package.json +5 -3
  84. package/registry/components.json +707 -25
  85. package/registry/search.json +172 -2
  86. package/dist/Dialog-_t9OodCK.js.map +0 -1
  87. package/dist/patterns-LJ8Y44f2.js.map +0 -1
  88. package/dist/primitives-CjQX0eVM.js +0 -453
  89. package/dist/primitives-CjQX0eVM.js.map +0 -1
  90. package/dist/tokens-CjK9bxo7.js.map +0 -1
  91. package/dist/workbench-4C25n_BY.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"workbench-4C25n_BY.js","names":["root","header","eyebrow","notice","empty","group","root","style","styles","style","styles","styles","requireText","cssClass","classNames","DiffFileTree_module_default","DiffHeader_module_default","DiffWorkbench_module_default","style$2","name","contentLabel","content","visibleGitPath","path","segment","requireGitPath","label","changeIcons","FilePlus2","FileX2","FilePenLine","FileSymlink","validateInventory","ids","file","data","id","compactDirectory","node","child","buildFileTree","leaves","directories","treeFile","files","depth","grouped","directoryAncestors","segments","index","DiffFileTree","props","visibleHeading","heading","selectedFileId","headingId","useId","indexedCount","totalCount","tree","useMemo","collapsedDirectories","setCollapsedDirectories","useState","selectedPath","ancestors","current","renderNodes","nodes","isSelected","ChangeIcon","exceptionalContent","onSelectedFileChange","LoaderCircle","CircleAlert","expanded","next","className","style$1","findingFilters","layouts","titleCase","value","validateCounts","DiffHeader","selectedFileLabel","progressId","layout","option","onLayoutChange","isWrapped","onWrapChange","findingFilter","filter","onFindingFilterChange","style","validateFindings","finding","findings","DiffWorkbench","visibleLabel","visibleScopeLabel","scope","visibleInventoryLabel","inventoryLabel","visibleViewerLabel","viewerLabel","visibleFindingsLabel","findingsLabel","onShowAllFiles","header","inventory","statusNotice","viewer","emptyFindings"],"sources":["../src/diff/DiffFileTree.module.css","../src/diff/DiffHeader.module.css","../src/diff/DiffWorkbench.module.css","../src/diff/DiffFileTree.tsx","../src/diff/DiffHeader.tsx","../src/diff/DiffWorkbench.tsx"],"sourcesContent":["@layer rly.components {\n .root {\n background: var(--rly-color-surface-1);\n border: 1px solid var(--rly-color-border-1);\n border-radius: var(--rly-radius-group);\n container-type: inline-size;\n display: grid;\n min-inline-size: var(--rly-space-0);\n overflow: hidden;\n }\n\n .header {\n align-items: end;\n display: flex;\n gap: var(--rly-space-16);\n justify-content: space-between;\n padding: var(--rly-space-20);\n }\n\n .header > span {\n display: grid;\n gap: var(--rly-space-2);\n min-inline-size: var(--rly-space-0);\n }\n\n .header h2 {\n color: var(--rly-color-text-1);\n font: var(--rly-type-card-title-weight) var(--rly-type-card-title-size) / var(--rly-type-card-title-line-height)\n var(--rly-type-card-title-font);\n letter-spacing: var(--rly-type-card-title-tracking);\n margin: var(--rly-space-0);\n overflow-wrap: anywhere;\n }\n\n .eyebrow,\n .notice,\n .empty,\n .error,\n .previousPath {\n color: var(--rly-color-text-2);\n font: var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height)\n var(--rly-type-meta-font);\n }\n\n .eyebrow {\n text-transform: uppercase;\n }\n\n .count {\n color: var(--rly-color-text-1);\n font: var(--rly-type-page-title-weight) var(--rly-type-page-title-size) / 0.8 var(--rly-type-page-title-font);\n letter-spacing: var(--rly-type-page-title-tracking);\n white-space: nowrap;\n }\n\n .notice,\n .empty,\n .error {\n border-block-start: 1px solid var(--rly-color-border-1);\n margin: var(--rly-space-0);\n padding: var(--rly-space-12) var(--rly-space-20);\n }\n\n .error {\n border-inline-start: var(--rly-space-4) solid var(--rly-color-held-ink);\n display: grid;\n gap: var(--rly-space-2);\n }\n\n .error strong {\n color: var(--rly-color-text-1);\n }\n\n .list {\n border-block-start: 1px solid var(--rly-color-border-1);\n list-style: none;\n margin: var(--rly-space-0);\n max-block-size: 34rem;\n overflow: auto;\n padding: var(--rly-space-0);\n scrollbar-gutter: stable;\n }\n\n .list li:not(.directory) {\n contain: content;\n contain-intrinsic-block-size: 40px;\n }\n\n .group {\n list-style: none;\n margin: var(--rly-space-0);\n padding: var(--rly-space-0);\n }\n\n .group > li {\n position: relative;\n }\n\n .group > li::before {\n block-size: 20px;\n border-block-end: 1px solid color-mix(in srgb, var(--rly-color-text-3) 70%, transparent);\n border-inline-start: 1px solid color-mix(in srgb, var(--rly-color-text-3) 70%, transparent);\n content: \"\";\n inline-size: var(--rly-space-12);\n inset-block-start: var(--rly-space-0);\n inset-inline-start: var(--rly-space-0);\n pointer-events: none;\n position: absolute;\n z-index: 1;\n }\n\n .group > li:not(:last-child)::after {\n border-inline-start: 1px solid color-mix(in srgb, var(--rly-color-text-3) 70%, transparent);\n content: \"\";\n inset-block: 20px var(--rly-space-0);\n inset-inline-start: var(--rly-space-0);\n pointer-events: none;\n position: absolute;\n z-index: 1;\n }\n\n .directoryButton {\n align-items: center;\n background: transparent;\n border: 0;\n border-block-end: 1px solid var(--rly-color-border-1);\n color: var(--rly-color-text-1);\n cursor: pointer;\n display: grid;\n gap: var(--rly-space-8);\n grid-template-columns: var(--rly-space-12) minmax(var(--rly-space-0), 1fr) auto;\n inline-size: 100%;\n min-block-size: var(--rly-space-32);\n padding: var(--rly-space-8) var(--rly-space-12);\n text-align: start;\n }\n\n .directoryButton:hover {\n background: var(--rly-color-surface-2);\n }\n\n .directoryButton:focus-visible {\n outline: 3px solid var(--rly-color-focus);\n outline-offset: -3px;\n }\n\n .chevron {\n block-size: var(--rly-space-8);\n border-block-end: 1.5px solid currentcolor;\n border-inline-end: 1.5px solid currentcolor;\n inline-size: var(--rly-space-8);\n justify-self: center;\n transform: rotate(45deg) translate(-1px, -1px);\n transition: transform var(--rly-motion-fast-duration) var(--rly-motion-fast-easing);\n }\n\n .directoryButton[aria-expanded=\"false\"] .chevron {\n transform: rotate(-45deg);\n }\n\n .directoryName {\n font: var(--rly-type-code-weight) var(--rly-type-code-size) / var(--rly-type-code-line-height)\n var(--rly-type-code-font);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .directoryCount {\n color: var(--rly-color-text-3);\n font: var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height)\n var(--rly-type-meta-font);\n font-variant-numeric: tabular-nums;\n }\n\n .file {\n align-items: center;\n background: transparent;\n border: 0;\n border-block-end: 1px solid var(--rly-color-border-1);\n color: inherit;\n cursor: pointer;\n display: grid;\n gap: var(--rly-space-8);\n grid-template-columns: minmax(var(--rly-space-0), 1fr) auto;\n inline-size: 100%;\n min-block-size: 40px;\n padding: var(--rly-space-6) var(--rly-space-12);\n text-align: start;\n }\n\n .file:hover {\n background: var(--rly-color-surface-2);\n }\n\n .file[aria-current=\"true\"] {\n background: var(--rly-color-surface-3);\n box-shadow: inset var(--rly-space-4) 0 var(--rly-color-focus);\n }\n\n .file:focus-visible {\n outline: 3px solid var(--rly-color-focus);\n outline-offset: -3px;\n }\n\n .pathBlock {\n display: grid;\n min-inline-size: var(--rly-space-0);\n }\n\n .path,\n .previousPath {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .path {\n color: var(--rly-color-text-1);\n font: var(--rly-type-code-weight) var(--rly-type-code-size) / var(--rly-type-code-line-height)\n var(--rly-type-code-font);\n }\n\n .previousPath {\n text-decoration: line-through;\n }\n\n .statusIcons {\n align-items: center;\n color: var(--rly-color-text-2);\n display: inline-flex;\n gap: var(--rly-space-4);\n }\n\n .statusIcon,\n .statusIcon svg {\n block-size: var(--rly-space-16);\n inline-size: var(--rly-space-16);\n }\n\n .loadingIcon {\n animation: rly-diff-file-tree-spin 800ms linear infinite;\n }\n\n @keyframes rly-diff-file-tree-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @container (max-width: 24rem) {\n .header {\n align-items: start;\n }\n\n .count {\n font-size: var(--rly-type-section-title-size);\n }\n\n .file {\n grid-template-columns: minmax(var(--rly-space-0), 1fr) auto;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .chevron,\n .loadingIcon {\n animation: none;\n transition: none;\n }\n }\n}\n","@layer rly.components {\n .root {\n background: var(--rly-color-surface-1);\n border: 1px solid var(--rly-color-border-1);\n border-radius: var(--rly-radius-group);\n container-type: inline-size;\n display: grid;\n grid-template-columns: minmax(var(--rly-space-0), 1fr) auto;\n min-inline-size: var(--rly-space-0);\n overflow: hidden;\n }\n\n .thesis {\n display: grid;\n gap: var(--rly-space-4);\n padding: var(--rly-space-24);\n }\n\n .eyebrow,\n .thesis p,\n .progressCopy span {\n color: var(--rly-color-text-2);\n font: var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height)\n var(--rly-type-meta-font);\n }\n\n .eyebrow {\n text-transform: uppercase;\n }\n\n .thesis h1,\n .thesis p {\n margin: var(--rly-space-0);\n overflow-wrap: anywhere;\n }\n\n .thesis h1 {\n color: var(--rly-color-text-1);\n font: var(--rly-type-page-title-weight) var(--rly-type-page-title-size) / var(--rly-type-page-title-line-height)\n var(--rly-type-page-title-font);\n letter-spacing: var(--rly-type-page-title-tracking);\n }\n\n .progress {\n align-content: center;\n border-inline-start: 1px solid var(--rly-color-border-1);\n display: grid;\n gap: var(--rly-space-12);\n min-inline-size: 15rem;\n padding: var(--rly-space-24);\n }\n\n .progressCopy {\n align-items: end;\n display: flex;\n gap: var(--rly-space-8);\n }\n\n .progressCopy strong {\n color: var(--rly-color-text-1);\n font: var(--rly-type-verdict-weight) var(--rly-type-verdict-size) / 0.75 var(--rly-type-verdict-font);\n letter-spacing: var(--rly-type-verdict-tracking);\n }\n\n .progress progress {\n accent-color: var(--rly-color-focus);\n block-size: var(--rly-space-6);\n inline-size: 100%;\n }\n\n .controls {\n align-items: center;\n border-block-start: 1px solid var(--rly-color-border-1);\n display: flex;\n flex-wrap: wrap;\n gap: var(--rly-space-8);\n grid-column: 1 / -1;\n padding: var(--rly-space-12) var(--rly-space-16);\n }\n\n .group {\n display: inline-flex;\n }\n\n .group button,\n .standalone {\n background: transparent;\n border: 1px solid var(--rly-color-border-2);\n color: var(--rly-color-text-2);\n cursor: pointer;\n font: var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height)\n var(--rly-type-label-font);\n min-block-size: 44px;\n padding: var(--rly-space-8) var(--rly-space-12);\n }\n\n .group button:first-child,\n .standalone {\n border-radius: var(--rly-radius-control) 0 0 var(--rly-radius-control);\n }\n\n .group button:last-child,\n .standalone {\n border-radius: 0 var(--rly-radius-control) var(--rly-radius-control) 0;\n }\n\n .group button + button {\n border-inline-start: 0;\n }\n\n .group button[aria-pressed=\"true\"],\n .standalone[aria-pressed=\"true\"] {\n background: var(--rly-color-surface-3);\n color: var(--rly-color-text-1);\n box-shadow: inset 0 -3px var(--rly-color-focus);\n }\n\n .group button:hover,\n .standalone:hover {\n background: var(--rly-color-surface-2);\n color: var(--rly-color-text-1);\n }\n\n .group button:focus-visible,\n .standalone:focus-visible {\n outline: 3px solid var(--rly-color-focus);\n outline-offset: var(--rly-space-2);\n position: relative;\n z-index: 1;\n }\n\n .standalone {\n border-radius: var(--rly-radius-control);\n }\n\n @container (max-width: 38rem) {\n .root {\n grid-template-columns: minmax(var(--rly-space-0), 1fr);\n }\n\n .progress {\n border-block-start: 1px solid var(--rly-color-border-1);\n border-inline-start: 0;\n min-inline-size: var(--rly-space-0);\n padding-block-start: var(--rly-space-16);\n }\n\n .controls {\n align-items: stretch;\n display: grid;\n }\n\n .group {\n display: grid;\n grid-template-columns: repeat(2, minmax(var(--rly-space-0), 1fr));\n }\n\n .group button,\n .group button:first-child,\n .group button:last-child,\n .standalone {\n border: 1px solid var(--rly-color-border-2);\n border-radius: var(--rly-radius-control);\n }\n\n .thesis,\n .progress {\n padding-inline: var(--rly-space-16);\n }\n }\n}\n","@layer rly.components {\n .root {\n background: var(--rly-color-surface-1);\n border: 1px solid var(--rly-color-border-1);\n border-radius: var(--rly-radius-group);\n color: var(--rly-color-text-1);\n container-type: inline-size;\n min-inline-size: var(--rly-space-0);\n overflow: hidden;\n }\n\n .header {\n border-block-end: 1px solid var(--rly-color-border-1);\n min-inline-size: var(--rly-space-0);\n }\n\n .header > *,\n .inventory > *,\n .viewer > *,\n .findingItem > * {\n border: 0;\n border-radius: var(--rly-space-0);\n }\n\n .body {\n display: grid;\n grid-template-columns: minmax(14rem, 0.72fr) minmax(22rem, 2.1fr) minmax(17rem, 0.9fr);\n min-inline-size: var(--rly-space-0);\n }\n\n .inventory,\n .review,\n .viewer,\n .findings {\n min-inline-size: var(--rly-space-0);\n }\n\n .inventory,\n .review {\n border-inline-end: 1px solid var(--rly-color-border-1);\n }\n\n .review {\n display: grid;\n grid-template-rows: auto auto minmax(0, 1fr);\n }\n\n .scope,\n .findingsHeader {\n display: grid;\n gap: var(--rly-space-2);\n padding: var(--rly-space-16) var(--rly-space-20);\n }\n\n .scope {\n grid-template-columns: minmax(var(--rly-space-0), 1fr) auto;\n }\n\n .scopeLabel,\n .scopeValue {\n grid-column: 1;\n }\n\n .scope span,\n .findingsHeader > span,\n .notice,\n .empty {\n color: var(--rly-color-text-2);\n font: var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height)\n var(--rly-type-meta-font);\n }\n\n .scope span,\n .findingsHeader > span {\n text-transform: uppercase;\n }\n\n .scopeValue {\n font: var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height)\n var(--rly-type-label-font);\n overflow-wrap: anywhere;\n }\n\n .showAll {\n align-self: center;\n background: var(--rly-color-surface-2);\n border: 1px solid var(--rly-color-border-2);\n border-radius: var(--rly-radius-control);\n color: var(--rly-color-text-1);\n cursor: pointer;\n font: var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height)\n var(--rly-type-label-font);\n grid-column: 2;\n grid-row: 1 / 3;\n padding: var(--rly-space-8) var(--rly-space-12);\n }\n\n .showAll:hover {\n background: var(--rly-color-surface-3);\n }\n\n .showAll:focus-visible {\n outline: var(--rly-space-2) solid var(--rly-color-focus);\n outline-offset: var(--rly-space-2);\n }\n\n .notice {\n background: var(--rly-color-surface-2);\n border-block-start: 1px solid var(--rly-color-border-1);\n padding: calc(var(--rly-space-8) + var(--rly-space-2)) var(--rly-space-20);\n }\n\n .viewer {\n border-block-start: 1px solid var(--rly-color-border-1);\n overflow-x: auto;\n }\n\n .findings {\n align-content: start;\n display: grid;\n }\n\n .findingsHeader {\n grid-template-columns: minmax(var(--rly-space-0), 1fr) auto;\n }\n\n .findingsHeader > span {\n grid-column: 1 / -1;\n }\n\n .findingsHeader h2,\n .findingsHeader strong {\n margin: var(--rly-space-0);\n }\n\n .findingsHeader h2 {\n font: var(--rly-type-card-title-weight) var(--rly-type-card-title-size) / var(--rly-type-card-title-line-height)\n var(--rly-type-card-title-font);\n letter-spacing: var(--rly-type-card-title-tracking);\n }\n\n .findingsHeader strong {\n align-self: center;\n font: var(--rly-type-section-title-weight) var(--rly-type-section-title-size) /\n var(--rly-type-section-title-line-height) var(--rly-type-section-title-font);\n }\n\n .findingList {\n border-block-start: 1px solid var(--rly-color-border-1);\n list-style: none;\n margin: var(--rly-space-0);\n max-block-size: 48rem;\n overflow-y: auto;\n padding: var(--rly-space-0);\n }\n\n .findingList:focus-visible {\n outline: 2px solid var(--rly-color-focus);\n outline-offset: -2px;\n }\n\n .findingItem + .findingItem {\n border-block-start: 1px solid var(--rly-color-border-1);\n }\n\n .empty {\n border-block-start: 1px solid var(--rly-color-border-1);\n margin: var(--rly-space-0);\n padding: var(--rly-space-24) var(--rly-space-20);\n }\n\n @container (max-width: 58rem) {\n .body {\n grid-template-columns: minmax(var(--rly-space-0), 1fr);\n }\n\n .inventory,\n .review {\n border-block-end: 1px solid var(--rly-color-border-1);\n border-inline-end: 0;\n }\n\n .findingList {\n max-block-size: none;\n }\n }\n\n @container (max-width: 24rem) {\n .scope,\n .findingsHeader {\n padding-inline: calc(var(--rly-space-12) + var(--rly-space-2));\n }\n\n .notice,\n .empty {\n padding-inline: calc(var(--rly-space-12) + var(--rly-space-2));\n }\n }\n\n @media (forced-colors: active) {\n .notice,\n .showAll {\n forced-color-adjust: auto;\n }\n }\n}\n","import { CircleAlert, FilePenLine, FilePlus2, FileSymlink, FileX2, LoaderCircle } from \"lucide-react\"\nimport { type ComponentPropsWithRef, type ReactElement, useEffect, useId, useMemo, useState } from \"react\"\nimport { classNames, cssClass, requireText } from \"../internal/component.js\"\nimport styles from \"./DiffFileTree.module.css\"\n\nconst style = (name: string): string => cssClass(styles, name)\n\n/** The provider change recorded for one path in the complete diff inventory. */\nexport type RlyDiffFileChange = \"added\" | \"modified\" | \"deleted\" | \"renamed\"\n\n/** Content readiness is independent from the file change, so exceptional files never disappear. */\nexport type RlyDiffFileContent =\n | { readonly state: \"ready\" }\n | { readonly label: string; readonly state: \"loading\" }\n | {\n readonly reason: string\n readonly state: \"binary\" | \"generated\" | \"oversized\" | \"unavailable\" | \"error\"\n }\n\ninterface RlyDiffFileBase {\n readonly content: RlyDiffFileContent\n readonly id: string\n readonly path: string\n}\n\n/** One indexed path. Renames always preserve both the previous and current path. */\nexport type RlyDiffFile =\n | (RlyDiffFileBase & { readonly change: \"renamed\"; readonly previousPath: string })\n | (RlyDiffFileBase & {\n readonly change: \"added\" | \"modified\" | \"deleted\"\n readonly previousPath?: never\n })\n\ninterface RlyIndexedInventory {\n readonly files: ReadonlyArray<RlyDiffFile>\n readonly indexedCount: number\n readonly totalCount: number\n}\n\n/** Complete or in-progress inventory state. Error states retain every path indexed so far. */\nexport type RlyDiffInventory =\n | { readonly files: ReadonlyArray<RlyDiffFile>; readonly state: \"ready\" }\n | (RlyIndexedInventory & { readonly label: string; readonly state: \"loading\" })\n | (RlyIndexedInventory & {\n readonly description: string\n readonly state: \"error\"\n readonly title: string\n })\n\n/** Props for a complete, application-controlled changed-file inventory. */\nexport type DiffFileTreeProps = Omit<ComponentPropsWithRef<\"nav\">, \"aria-label\" | \"children\"> & {\n readonly data: RlyDiffInventory\n readonly heading: string\n readonly onSelectedFileChange: (fileId: string) => void\n readonly selectedFileId?: string\n}\n\nconst contentLabel = (content: RlyDiffFileContent): string => {\n if (content.state === \"ready\") return \"Ready\"\n if (content.state === \"loading\") return requireText(content.label, \"DiffFileTree loading label\")\n return `${content.state}: ${requireText(content.reason, `DiffFileTree ${content.state} reason`)}`\n}\n\nconst visibleGitPath = (path: string): string =>\n path\n .split(\"/\")\n .map((segment) => (segment !== segment.trim() || /[\\t\\n\\v\\f\\r]/u.test(segment) ? JSON.stringify(segment) : segment))\n .join(\"/\")\n\nconst requireGitPath = (path: string, label: string): string => {\n if (path.length === 0) throw new Error(`${label} must not be empty`)\n return path\n}\n\nconst changeIcons = {\n added: FilePlus2,\n deleted: FileX2,\n modified: FilePenLine,\n renamed: FileSymlink\n} satisfies Record<RlyDiffFileChange, typeof FilePlus2>\n\nconst validateInventory = (data: RlyDiffInventory): void => {\n const ids = new Set<string>()\n for (const file of data.files) {\n const id = requireText(file.id, \"DiffFileTree file id\")\n if (ids.has(id)) throw new Error(`DiffFileTree file ids must be unique: ${id}`)\n ids.add(id)\n const path = requireGitPath(file.path, `DiffFileTree path for ${id}`)\n if (file.change === \"renamed\") {\n const previousPath = requireGitPath(file.previousPath, `DiffFileTree previousPath for ${id}`)\n if (previousPath === path) throw new Error(`DiffFileTree renamed paths must differ: ${id}`)\n }\n contentLabel(file.content)\n }\n\n if (data.state === \"loading\" || data.state === \"error\") {\n if (!Number.isInteger(data.indexedCount) || !Number.isInteger(data.totalCount)) {\n throw new Error(\"DiffFileTree counts must be integers\")\n }\n if (data.indexedCount !== data.files.length || data.totalCount < data.indexedCount) {\n throw new Error(\"DiffFileTree indexedCount must match visible files and cannot exceed totalCount\")\n }\n if (data.state === \"loading\") requireText(data.label, \"DiffFileTree loading label\")\n if (data.state === \"error\") {\n requireText(data.title, \"DiffFileTree error title\")\n requireText(data.description, \"DiffFileTree error description\")\n }\n }\n}\n\ninterface TreeFile {\n readonly file: RlyDiffFile\n readonly segments: ReadonlyArray<string>\n}\n\ntype FileTreeNode =\n | {\n readonly children: ReadonlyArray<FileTreeNode>\n readonly fileCount: number\n readonly kind: \"directory\"\n readonly name: string\n readonly path: string\n }\n | {\n readonly file: RlyDiffFile\n readonly kind: \"file\"\n readonly name: string\n }\n\nconst compactDirectory = (node: Extract<FileTreeNode, { readonly kind: \"directory\" }>): FileTreeNode => {\n if (node.children.length !== 1 || node.children[0]?.kind !== \"directory\") return node\n const child = node.children[0]\n return compactDirectory({\n ...child,\n name: `${node.name}/${child.name}`\n })\n}\n\nconst buildFileTree = (files: ReadonlyArray<TreeFile>, depth = 0): ReadonlyArray<FileTreeNode> => {\n const leaves: Array<FileTreeNode> = []\n const directories = new Map<string, Array<TreeFile>>()\n for (const treeFile of files) {\n const segment = treeFile.segments[depth]\n if (segment === undefined) continue\n if (depth === treeFile.segments.length - 1) {\n leaves.push({ file: treeFile.file, kind: \"file\", name: segment })\n continue\n }\n const grouped = directories.get(segment) ?? []\n grouped.push(treeFile)\n directories.set(segment, grouped)\n }\n const branches = Array.from(directories, ([name, grouped]) =>\n compactDirectory({\n children: buildFileTree(grouped, depth + 1),\n fileCount: grouped.length,\n kind: \"directory\",\n name,\n path: grouped[0]!.segments.slice(0, depth + 1).join(\"/\")\n })\n )\n return [...branches, ...leaves]\n}\n\nconst directoryAncestors = (path: string): ReadonlySet<string> => {\n const segments = path.split(\"/\")\n return new Set(segments.slice(0, -1).map((_, index) => segments.slice(0, index + 1).join(\"/\")))\n}\n\n/** Render every indexed path as a lightweight row without instantiating file content renderers. */\nexport const DiffFileTree = ({\n className,\n data,\n heading,\n onSelectedFileChange,\n selectedFileId,\n ...props\n}: DiffFileTreeProps): ReactElement => {\n const visibleHeading = requireText(heading, \"DiffFileTree heading\")\n validateInventory(data)\n if (selectedFileId !== undefined && !data.files.some((file) => file.id === selectedFileId)) {\n throw new Error(`DiffFileTree selectedFileId is not in the visible inventory: ${selectedFileId}`)\n }\n const headingId = `rly-diff-file-tree-${useId()}`\n const indexedCount = data.state === \"ready\" ? data.files.length : data.indexedCount\n const totalCount = data.state === \"ready\" ? data.files.length : data.totalCount\n const tree = useMemo(\n () =>\n buildFileTree(\n data.files.map((file) => ({\n file,\n segments: file.path.split(\"/\")\n }))\n ),\n [data.files]\n )\n const [collapsedDirectories, setCollapsedDirectories] = useState<ReadonlySet<string>>(() => new Set())\n const selectedPath = data.files.find(({ id }) => id === selectedFileId)?.path\n\n useEffect(() => {\n if (selectedPath === undefined) return\n const ancestors = directoryAncestors(selectedPath)\n setCollapsedDirectories((current) => {\n if (![...current].some((path) => ancestors.has(path))) return current\n return new Set([...current].filter((path) => !ancestors.has(path)))\n })\n }, [selectedPath])\n\n const renderNodes = (nodes: ReadonlyArray<FileTreeNode>): ReadonlyArray<ReactElement> =>\n nodes.map((node) => {\n if (node.kind === \"file\") {\n const isSelected = selectedFileId === node.file.id\n const ChangeIcon = changeIcons[node.file.change]\n const exceptionalContent = node.file.content.state === \"ready\" ? null : contentLabel(node.file.content)\n return (\n <li data-rly-diff-file-id={node.file.id} key={node.file.id}>\n <button\n aria-current={isSelected ? \"true\" : undefined}\n aria-label={`${visibleGitPath(node.file.path)}, ${node.file.change}, ${contentLabel(node.file.content)}`}\n className={style(\"file\")}\n data-rly-diff-content-state={node.file.content.state}\n data-rly-diff-file-change={node.file.change}\n onClick={() => onSelectedFileChange(node.file.id)}\n type=\"button\"\n >\n <span className={style(\"pathBlock\")} style={{ paddingInlineStart: \"var(--rly-space-20)\" }}>\n {node.file.change === \"renamed\" ? (\n <span className={style(\"previousPath\")}>{visibleGitPath(node.file.previousPath)}</span>\n ) : null}\n <code className={style(\"path\")}>{visibleGitPath(node.name)}</code>\n </span>\n <span className={style(\"statusIcons\")}>\n <span aria-hidden=\"true\" className={style(\"statusIcon\")} title={node.file.change}>\n <ChangeIcon />\n </span>\n {exceptionalContent === null ? null : (\n <span aria-hidden=\"true\" className={style(\"statusIcon\")} title={exceptionalContent}>\n {node.file.content.state === \"loading\" ? (\n <LoaderCircle className={style(\"loadingIcon\")} />\n ) : (\n <CircleAlert />\n )}\n </span>\n )}\n </span>\n </button>\n </li>\n )\n }\n const expanded = !collapsedDirectories.has(node.path)\n return (\n <li className={style(\"directory\")} data-rly-diff-directory={node.path} key={`directory:${node.path}`}>\n <button\n aria-expanded={expanded}\n aria-label={`${visibleGitPath(node.name)}, directory, ${node.fileCount} changed ${\n node.fileCount === 1 ? \"file\" : \"files\"\n }`}\n className={style(\"directoryButton\")}\n onClick={() =>\n setCollapsedDirectories((current) => {\n const next = new Set(current)\n if (expanded) next.add(node.path)\n else next.delete(node.path)\n return next\n })\n }\n type=\"button\"\n >\n <span aria-hidden=\"true\" className={style(\"chevron\")} />\n <code className={style(\"directoryName\")}>{visibleGitPath(node.name)}</code>\n <span className={style(\"directoryCount\")}>{node.fileCount}</span>\n </button>\n {expanded ? (\n <ol className={style(\"group\")} style={{ marginInlineStart: \"var(--rly-space-16)\" }}>\n {renderNodes(node.children)}\n </ol>\n ) : null}\n </li>\n )\n })\n\n return (\n <nav\n {...props}\n aria-busy={data.state === \"loading\" ? \"true\" : undefined}\n aria-labelledby={headingId}\n className={classNames(style(\"root\"), className)}\n data-rly-diff-inventory-state={data.state}\n >\n <header className={style(\"header\")}>\n <span>\n <span className={style(\"eyebrow\")}>Changed files</span>\n <h2 id={headingId}>{visibleHeading}</h2>\n </span>\n <strong aria-label={`${indexedCount} of ${totalCount} files indexed`} className={style(\"count\")}>\n {indexedCount}/{totalCount}\n </strong>\n </header>\n\n {data.state === \"loading\" ? (\n <p className={style(\"notice\")} role=\"status\">\n {data.label}\n </p>\n ) : null}\n {data.state === \"error\" ? (\n <section className={style(\"error\")} role=\"alert\">\n <strong>{data.title}</strong>\n <span>{data.description}</span>\n </section>\n ) : null}\n\n {data.files.length === 0 ? (\n <p className={style(\"empty\")}>No changed files.</p>\n ) : (\n <ol className={style(\"list\")}>{renderNodes(tree)}</ol>\n )}\n </nav>\n )\n}\n","import { type ComponentPropsWithRef, type ReactElement, useId } from \"react\"\nimport { classNames, cssClass, requireText } from \"../internal/component.js\"\nimport styles from \"./DiffHeader.module.css\"\n\nconst style = (name: string): string => cssClass(styles, name)\n\n/** Controlled diff arrangement. */\nexport type RlyDiffLayout = \"split\" | \"stacked\"\n\n/** Controlled semantic finding filter. */\nexport type RlyDiffFindingFilter = \"all\" | \"human\" | \"agent\" | \"unresolved\"\n\n/** Props for the complete diff inventory thesis and its application-controlled view preferences. */\nexport type DiffHeaderProps = Omit<ComponentPropsWithRef<\"header\">, \"children\"> & {\n readonly findingFilter: RlyDiffFindingFilter\n readonly heading: string\n readonly indexedCount: number\n readonly isWrapped: boolean\n readonly layout: RlyDiffLayout\n readonly onFindingFilterChange: (filter: RlyDiffFindingFilter) => void\n readonly onLayoutChange: (layout: RlyDiffLayout) => void\n readonly onWrapChange: (isWrapped: boolean) => void\n readonly selectedFileLabel?: string\n readonly totalCount: number\n}\n\nconst findingFilters = [\"all\", \"human\", \"agent\", \"unresolved\"] satisfies ReadonlyArray<RlyDiffFindingFilter>\nconst layouts = [\"split\", \"stacked\"] satisfies ReadonlyArray<RlyDiffLayout>\n\nconst titleCase = (value: string): string => `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`\n\nconst validateCounts = (indexedCount: number, totalCount: number): void => {\n if (!Number.isInteger(indexedCount) || !Number.isInteger(totalCount)) {\n throw new Error(\"DiffHeader counts must be integers\")\n }\n if (indexedCount < 0 || totalCount < 0 || indexedCount > totalCount) {\n throw new Error(\"DiffHeader indexedCount must be between zero and totalCount\")\n }\n}\n\n/** Render indexed progress and controlled preferences without fetching or rendering provider content. */\nexport const DiffHeader = ({\n className,\n findingFilter,\n heading,\n indexedCount,\n isWrapped,\n layout,\n onFindingFilterChange,\n onLayoutChange,\n onWrapChange,\n selectedFileLabel,\n totalCount,\n ...props\n}: DiffHeaderProps): ReactElement => {\n const visibleHeading = requireText(heading, \"DiffHeader heading\")\n if (selectedFileLabel !== undefined) requireText(selectedFileLabel, \"DiffHeader selectedFileLabel\")\n validateCounts(indexedCount, totalCount)\n const progressId = `rly-diff-header-progress-${useId()}`\n\n return (\n <header {...props} className={classNames(style(\"root\"), className)} data-rly-diff-layout={layout}>\n <section className={style(\"thesis\")}>\n <span className={style(\"eyebrow\")}>Complete diff</span>\n <h1>{visibleHeading}</h1>\n <p>{selectedFileLabel === undefined ? \"All changed files\" : selectedFileLabel}</p>\n </section>\n\n <section aria-labelledby={progressId} className={style(\"progress\")}>\n <span className={style(\"progressCopy\")} id={progressId}>\n <strong>{indexedCount}</strong>\n <span>of {totalCount} files indexed</span>\n </span>\n <progress max={Math.max(totalCount, 1)} value={indexedCount} />\n </section>\n\n <div className={style(\"controls\")}>\n <div aria-label=\"Diff layout\" className={style(\"group\")} role=\"group\">\n {layouts.map((option) => (\n <button aria-pressed={layout === option} key={option} onClick={() => onLayoutChange(option)} type=\"button\">\n {titleCase(option)}\n </button>\n ))}\n </div>\n <button\n aria-pressed={isWrapped}\n className={style(\"standalone\")}\n onClick={() => onWrapChange(!isWrapped)}\n type=\"button\"\n >\n Wrap lines\n </button>\n <div aria-label=\"Finding filter\" className={style(\"group\")} role=\"group\">\n {findingFilters.map((filter) => (\n <button\n aria-pressed={findingFilter === filter}\n key={filter}\n onClick={() => onFindingFilterChange(filter)}\n type=\"button\"\n >\n {titleCase(filter)}\n </button>\n ))}\n </div>\n </div>\n </header>\n )\n}\n","import type { ComponentPropsWithRef, ReactElement, ReactNode } from \"react\"\nimport { classNames, cssClass, requireText } from \"../internal/component.js\"\nimport styles from \"./DiffWorkbench.module.css\"\n\nconst style = (name: string): string => cssClass(styles, name)\n\n/** The application-controlled file scope shown by the workbench. */\nexport type RlyDiffWorkbenchScope =\n | { readonly label: string; readonly mode: \"all-files\" }\n | { readonly fileId: string; readonly label: string; readonly mode: \"selected-file\" }\n\n/** One stable semantic finding slot, independent from virtualized line annotations. */\nexport interface RlyDiffWorkbenchFinding {\n readonly content: ReactNode\n readonly id: string\n}\n\n/** Presentation-only slots for a complete diff review surface. */\nexport type DiffWorkbenchProps = Omit<ComponentPropsWithRef<\"section\">, \"aria-label\" | \"children\"> & {\n readonly emptyFindings?: ReactNode\n readonly findings: ReadonlyArray<RlyDiffWorkbenchFinding>\n readonly findingsLabel?: string\n readonly header: ReactNode\n readonly inventory: ReactNode\n readonly inventoryLabel?: string\n readonly label: string\n readonly onShowAllFiles?: () => void\n readonly scope: RlyDiffWorkbenchScope\n readonly statusNotice?: ReactNode\n readonly viewer: ReactNode\n readonly viewerLabel?: string\n}\n\nconst validateFindings = (findings: ReadonlyArray<RlyDiffWorkbenchFinding>): void => {\n const ids = new Set<string>()\n for (const finding of findings) {\n const id = requireText(finding.id, \"DiffWorkbench finding id\")\n if (ids.has(id)) throw new Error(`DiffWorkbench finding ids must be unique: ${id}`)\n ids.add(id)\n }\n}\n\n/** Compose complete inventory, renderer, and semantic evidence without owning application state. */\nexport const DiffWorkbench = ({\n className,\n emptyFindings = \"No findings match this view.\",\n findings,\n findingsLabel = \"Semantic findings\",\n header,\n inventory,\n inventoryLabel = \"Changed files\",\n label,\n onShowAllFiles,\n scope,\n statusNotice,\n viewer,\n viewerLabel = \"Code changes\",\n ...props\n}: DiffWorkbenchProps): ReactElement => {\n const visibleLabel = requireText(label, \"DiffWorkbench label\")\n const visibleScopeLabel = requireText(scope.label, \"DiffWorkbench scope label\")\n const visibleInventoryLabel = requireText(inventoryLabel, \"DiffWorkbench inventoryLabel\")\n const visibleViewerLabel = requireText(viewerLabel, \"DiffWorkbench viewerLabel\")\n const visibleFindingsLabel = requireText(findingsLabel, \"DiffWorkbench findingsLabel\")\n if (scope.mode === \"selected-file\") {\n requireText(scope.fileId, \"DiffWorkbench selected file id\")\n if (onShowAllFiles === undefined) {\n throw new Error(\"DiffWorkbench selected-file scope requires onShowAllFiles\")\n }\n }\n validateFindings(findings)\n\n return (\n <section\n {...props}\n aria-label={visibleLabel}\n className={classNames(style(\"root\"), className)}\n data-rly-diff-scope={scope.mode}\n {...(scope.mode === \"selected-file\" ? { \"data-rly-diff-selected-file\": scope.fileId } : {})}\n >\n <div className={style(\"header\")} data-rly-diff-workbench-slot=\"header\">\n {header}\n </div>\n\n <div className={style(\"body\")}>\n <section\n aria-label={visibleInventoryLabel}\n className={style(\"inventory\")}\n data-rly-diff-workbench-slot=\"inventory\"\n >\n {inventory}\n </section>\n\n <div className={style(\"review\")}>\n <header className={style(\"scope\")}>\n <span className={style(\"scopeLabel\")}>{scope.mode === \"all-files\" ? \"All files\" : \"Selected file\"}</span>\n <strong className={style(\"scopeValue\")}>{visibleScopeLabel}</strong>\n {scope.mode === \"selected-file\" ? (\n <button className={style(\"showAll\")} onClick={onShowAllFiles} type=\"button\">\n Show all files\n </button>\n ) : null}\n </header>\n {statusNotice === undefined ? null : (\n <div aria-live=\"polite\" className={style(\"notice\")} data-rly-diff-workbench-slot=\"status\" role=\"status\">\n {statusNotice}\n </div>\n )}\n <section aria-label={visibleViewerLabel} className={style(\"viewer\")} data-rly-diff-workbench-slot=\"viewer\">\n {viewer}\n </section>\n </div>\n\n <aside aria-label={visibleFindingsLabel} className={style(\"findings\")} data-rly-diff-workbench-slot=\"findings\">\n <header className={style(\"findingsHeader\")}>\n <span>Review evidence</span>\n <h2>{visibleFindingsLabel}</h2>\n <strong aria-label={`${findings.length} findings`}>{findings.length}</strong>\n </header>\n {findings.length === 0 ? (\n <div className={style(\"empty\")}>{emptyFindings}</div>\n ) : (\n <ol aria-label={`${visibleFindingsLabel} list`} className={style(\"findingList\")} tabIndex={0}>\n {findings.map((finding) => (\n <li className={style(\"findingItem\")} key={finding.id}>\n {finding.content}\n </li>\n ))}\n </ol>\n )}\n </aside>\n </div>\n </section>\n )\n}\n"],"mappings":"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"}