difit 1.1.0 → 1.1.2

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.
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-medium:500;--font-weight-semibold:600;--radius-md:.375rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-github-bg-primary:#0d1117;--color-github-bg-secondary:#161b22;--color-github-bg-tertiary:#21262d;--color-github-border:#30363d;--color-github-text-primary:#f0f6fc;--color-github-text-secondary:#8b949e;--color-github-text-muted:#6e7681;--color-github-accent:#238636;--color-github-danger:#da3633;--color-github-warning:#d29922;--color-diff-addition-bg:#0d4429;--color-diff-deletion-bg:#67060c}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.left-3{left:calc(var(--spacing)*3)}.z-10{z-index:10}.m-0{margin:calc(var(--spacing)*0)}.m-2{margin:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.h-4{height:calc(var(--spacing)*4)}.h-full{height:100%}.h-screen{height:100vh}.min-h-\[20px\]{min-height:20px}.min-h-\[60px\]{min-height:60px}.w-1{width:calc(var(--spacing)*1)}.w-1\/2{width:50%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-\[50px\]{width:50px}.w-\[60px\]{width:60px}.w-full{width:100%}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-none{--tw-border-style:none;border-style:none}.border-\[var\(--border-muted\)\]{border-color:var(--border-muted)}.border-blue-600\/50{border-color:#155dfc80}@supports (color:color-mix(in lab,red,red)){.border-blue-600\/50{border-color:color-mix(in oklab,var(--color-blue-600)50%,transparent)}}.border-github-accent{border-color:var(--color-github-accent)}.border-github-border{border-color:var(--color-github-border)}.border-github-text-muted{border-color:var(--color-github-text-muted)}.border-gray-500{border-color:var(--color-gray-500)}.border-gray-600\/50{border-color:#4a556580}@supports (color:color-mix(in lab,red,red)){.border-gray-600\/50{border-color:color-mix(in oklab,var(--color-gray-600)50%,transparent)}}.border-green-600\/50{border-color:#00a54480}@supports (color:color-mix(in lab,red,red)){.border-green-600\/50{border-color:color-mix(in oklab,var(--color-green-600)50%,transparent)}}.border-red-600\/50{border-color:#e4001480}@supports (color:color-mix(in lab,red,red)){.border-red-600\/50{border-color:color-mix(in oklab,var(--color-red-600)50%,transparent)}}.border-yellow-400\/30{border-color:#fac8004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-400\/30{border-color:color-mix(in oklab,var(--color-yellow-400)30%,transparent)}}.border-yellow-600\/50{border-color:#cd890080}@supports (color:color-mix(in lab,red,red)){.border-yellow-600\/50{border-color:color-mix(in oklab,var(--color-yellow-600)50%,transparent)}}.border-l-yellow-400{border-left-color:var(--color-yellow-400)}.bg-\[var\(--bg-secondary\)\]{background-color:var(--bg-secondary)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-700\/40{background-color:#1447e666}@supports (color:color-mix(in lab,red,red)){.bg-blue-700\/40{background-color:color-mix(in oklab,var(--color-blue-700)40%,transparent)}}.bg-diff-addition-bg{background-color:var(--color-diff-addition-bg)}.bg-diff-deletion-bg{background-color:var(--color-diff-deletion-bg)}.bg-github-accent{background-color:var(--color-github-accent)}.bg-github-bg-primary{background-color:var(--color-github-bg-primary)}.bg-github-bg-secondary{background-color:var(--color-github-bg-secondary)}.bg-github-bg-tertiary{background-color:var(--color-github-bg-tertiary)}.bg-github-border{background-color:var(--color-github-border)}.bg-github-warning\/20{background-color:#d2992233}@supports (color:color-mix(in lab,red,red)){.bg-github-warning\/20{background-color:color-mix(in oklab,var(--color-github-warning)20%,transparent)}}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-700\/40{background-color:#36415366}@supports (color:color-mix(in lab,red,red)){.bg-gray-700\/40{background-color:color-mix(in oklab,var(--color-gray-700)40%,transparent)}}.bg-green-100\/10{background-color:#dcfce71a}@supports (color:color-mix(in lab,red,red)){.bg-green-100\/10{background-color:color-mix(in oklab,var(--color-green-100)10%,transparent)}}.bg-green-700\/40{background-color:#00813866}@supports (color:color-mix(in lab,red,red)){.bg-green-700\/40{background-color:color-mix(in oklab,var(--color-green-700)40%,transparent)}}.bg-red-100\/10{background-color:#ffe2e21a}@supports (color:color-mix(in lab,red,red)){.bg-red-100\/10{background-color:color-mix(in oklab,var(--color-red-100)10%,transparent)}}.bg-red-700\/40{background-color:#bf000f66}@supports (color:color-mix(in lab,red,red)){.bg-red-700\/40{background-color:color-mix(in oklab,var(--color-red-700)40%,transparent)}}.bg-transparent{background-color:#0000}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.bg-yellow-700\/40{background-color:#a3610066}@supports (color:color-mix(in lab,red,red)){.bg-yellow-700\/40{background-color:color-mix(in oklab,var(--color-yellow-700)40%,transparent)}}.bg-yellow-800\/30{background-color:#874b004d}@supports (color:color-mix(in lab,red,red)){.bg-yellow-800\/30{background-color:color-mix(in oklab,var(--color-yellow-800)30%,transparent)}}.bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-3{padding:calc(var(--spacing)*3)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.pr-3{padding-right:calc(var(--spacing)*3)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-blue-200{color:var(--color-blue-200)}.text-github-accent{color:var(--color-github-accent)}.text-github-danger{color:var(--color-github-danger)}.text-github-text-muted{color:var(--color-github-text-muted)}.text-github-text-primary{color:var(--color-github-text-primary)}.text-github-text-secondary{color:var(--color-github-text-secondary)}.text-github-warning{color:var(--color-github-warning)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-green-200{color:var(--color-green-200)}.text-red-200{color:var(--color-red-200)}.text-white{color:var(--color-white)}.text-yellow-100{color:var(--color-yellow-100)}.text-yellow-200{color:var(--color-yellow-200)}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.placeholder-github-text-muted::-moz-placeholder{color:var(--color-github-text-muted)}.placeholder-github-text-muted::placeholder{color:var(--color-github-text-muted)}.opacity-70{opacity:.7}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (hover:hover){.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-github-accent\/50:hover{border-color:#23863680}@supports (color:color-mix(in lab,red,red)){.hover\:border-github-accent\/50:hover{border-color:color-mix(in oklab,var(--color-github-accent)50%,transparent)}}.hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-red-500:hover{border-color:var(--color-red-500)}.hover\:border-yellow-500:hover{border-color:var(--color-yellow-500)}.hover\:bg-blue-600\/50:hover{background-color:#155dfc80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-600\/50:hover{background-color:color-mix(in oklab,var(--color-blue-600)50%,transparent)}}.hover\:bg-github-bg-tertiary:hover{background-color:var(--color-github-bg-tertiary)}.hover\:bg-github-text-muted:hover{background-color:var(--color-github-text-muted)}.hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.hover\:bg-gray-600\/50:hover{background-color:#4a556580}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-600\/50:hover{background-color:color-mix(in oklab,var(--color-gray-600)50%,transparent)}}.hover\:bg-green-600\/50:hover{background-color:#00a54480}@supports (color:color-mix(in lab,red,red)){.hover\:bg-green-600\/50:hover{background-color:color-mix(in oklab,var(--color-green-600)50%,transparent)}}.hover\:bg-red-600\/50:hover{background-color:#e4001480}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-600\/50:hover{background-color:color-mix(in oklab,var(--color-red-600)50%,transparent)}}.hover\:bg-yellow-600\/50:hover{background-color:#cd890080}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-600\/50:hover{background-color:color-mix(in oklab,var(--color-yellow-600)50%,transparent)}}.hover\:bg-yellow-800\/30:hover{background-color:#874b004d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-800\/30:hover{background-color:color-mix(in oklab,var(--color-yellow-800)30%,transparent)}}.hover\:text-github-text-primary:hover{color:var(--color-github-text-primary)}.hover\:text-white:hover{color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}}.focus\:min-h-\[80px\]:focus{min-height:80px}.focus\:border-blue-600:focus{border-color:var(--color-blue-600)}.focus\:border-github-accent:focus{border-color:var(--color-github-accent)}.focus\:border-yellow-500:focus{border-color:var(--color-yellow-500)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-600\/30:focus{--tw-ring-color:#155dfc4d}@supports (color:color-mix(in lab,red,red)){.focus\:ring-blue-600\/30:focus{--tw-ring-color:color-mix(in oklab,var(--color-blue-600)30%,transparent)}}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:opacity-50:disabled{opacity:.5}.\[\&_code\]\:\!bg-transparent code{background-color:#0000!important}.\[\&_code\]\:text-inherit code{color:inherit}.\[\&_pre\]\:m-0 pre{margin:calc(var(--spacing)*0)}.\[\&_pre\]\:\!bg-transparent pre{background-color:#0000!important}.\[\&_pre\]\:p-0 pre{padding:calc(var(--spacing)*0)}.\[\&_pre\]\:text-inherit pre{color:inherit}}html,body{color:#f0f6fc;background-color:#0d1117;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5}button{cursor:pointer}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}
@@ -0,0 +1 @@
1
+ import{g as u}from"./index-BLEv14wb.js";function p(t,a){for(var r=0;r<a.length;r++){const e=a[r];if(typeof e!="string"&&!Array.isArray(e)){for(const s in e)if(s!=="default"&&!(s in t)){const n=Object.getOwnPropertyDescriptor(e,s);n&&Object.defineProperty(t,s,n.get?n:{enumerable:!0,get:()=>e[s]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var o={},i;function d(){return i||(i=1,function(t){var a=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,r=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,e={pattern:RegExp(/(^|[^\w.])/.source+r+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};t.languages.java=t.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[e,{pattern:RegExp(/(^|[^\w.])/.source+r+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:e.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+r+/[A-Z]\w*\b/.source),lookbehind:!0,inside:e.inside}],keyword:a,function:[t.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),t.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),t.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":e,keyword:a,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+r+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:e.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+r+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:e.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g,function(){return a.source})),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)),o}var c=d();const l=u(c),w=p({__proto__:null,default:l},[c]);export{w as p};
@@ -0,0 +1 @@
1
+ import{g as c}from"./index-BLEv14wb.js";function f(e,r){for(var n=0;n<r.length;n++){const t=r[n];if(typeof t!="string"&&!Array.isArray(t)){for(const a in t)if(a!=="default"&&!(a in e)){const i=Object.getOwnPropertyDescriptor(t,a);i&&Object.defineProperty(e,a,i.get?i:{enumerable:!0,get:()=>t[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var u={},d;function g(){return d||(d=1,function(e){var r=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],t=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,a=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,i=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:r,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:t,operator:a,punctuation:i};var l={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:l}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:l}}];e.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:r,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:t,operator:a,punctuation:i}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",function(s){if(/<\?/.test(s.code)){var p=/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g;e.languages["markup-templating"].buildPlaceholders(s,"php",p)}}),e.hooks.add("after-tokenize",function(s){e.languages["markup-templating"].tokenizePlaceholders(s,"php")})}(Prism)),u}var b=g();const y=c(b),m=f({__proto__:null,default:y},[b]);export{m as p};
@@ -0,0 +1 @@
1
+ import{g as l}from"./index-BLEv14wb.js";function d(e,r){for(var n=0;n<r.length;n++){const t=r[n];if(typeof t!="string"&&!Array.isArray(t)){for(const i in t)if(i!=="default"&&!(i in e)){const s=Object.getOwnPropertyDescriptor(t,i);s&&Object.defineProperty(e,i,s.get?s:{enumerable:!0,get:()=>t[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var a={},o;function g(){return o||(o=1,function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var r={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",t=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:r,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:r,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+t),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+t+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:r,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:r,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:r,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:r,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:r,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(Prism)),a}var u=g();const p=l(u),b=d({__proto__:null,default:p},[u]);export{b as p};
@@ -10,8 +10,8 @@
10
10
  <link rel="icon" type="image/png" sizes="512x512" href="/icon-512x512.png" />
11
11
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
12
12
  <title>ReviewIt - Git Diff Viewer</title>
13
- <script type="module" crossorigin src="/assets/index-B67TY4_1.js"></script>
14
- <link rel="stylesheet" crossorigin href="/assets/index-BHrhjAlZ.css">
13
+ <script type="module" crossorigin src="/assets/index-BLEv14wb.js"></script>
14
+ <link rel="stylesheet" crossorigin href="/assets/index-CmT0VFrk.css">
15
15
  </head>
16
16
  <body>
17
17
  <div id="root"></div>
@@ -1,2 +1,2 @@
1
1
  import type { FileDiff } from '../types/diff.js';
2
- export declare function loadGitDiff(commitish: string): Promise<FileDiff[]>;
2
+ export declare function loadGitDiff(targetCommitish: string, baseCommitish: string): Promise<FileDiff[]>;
@@ -1,25 +1,32 @@
1
1
  import simpleGit from 'simple-git';
2
- export async function loadGitDiff(commitish) {
2
+ import { validateDiffArguments } from '../cli/utils.js';
3
+ export async function loadGitDiff(targetCommitish, baseCommitish) {
4
+ // Validate arguments
5
+ const validation = validateDiffArguments(targetCommitish, baseCommitish);
6
+ if (!validation.valid) {
7
+ throw new Error(validation.error);
8
+ }
3
9
  const git = simpleGit();
4
10
  let diff;
5
- if (commitish.toLowerCase() === 'working') {
6
- // Show uncommitted changes
11
+ // Handle target special chars (base is always a regular commit)
12
+ if (targetCommitish === 'working') {
13
+ // Show unstaged changes (working vs staged)
7
14
  diff = await git.diff(['--name-status']);
8
15
  }
9
- else if (commitish.toLowerCase() === 'staged') {
10
- // Show staged changes
11
- diff = await git.diff(['--cached', '--name-status']);
16
+ else if (targetCommitish === 'staged') {
17
+ // Show staged changes against base commit
18
+ diff = await git.diff(['--cached', baseCommitish, '--name-status']);
12
19
  }
13
- else if (commitish === '.') {
14
- // Show all changes (both staged and unstaged) compared to HEAD
15
- diff = await git.diff(['HEAD', '--name-status']);
20
+ else if (targetCommitish === '.') {
21
+ // Show all uncommitted changes against base commit
22
+ diff = await git.diff([baseCommitish, '--name-status']);
16
23
  }
17
24
  else {
18
- // Get list of changed files for a specific commit
19
- diff = await git.diff([`${commitish}^..${commitish}`, '--name-status']);
25
+ // Both are regular commits: standard commit-to-commit comparison
26
+ diff = await git.diff([`${baseCommitish}..${targetCommitish}`, '--name-status']);
20
27
  if (!diff.trim()) {
21
28
  // Try without parent (for initial commit)
22
- const diffInitial = await git.diff([commitish, '--name-status']);
29
+ const diffInitial = await git.diff([targetCommitish, '--name-status']);
23
30
  if (!diffInitial.trim()) {
24
31
  throw new Error('No changes found in this commit');
25
32
  }
@@ -37,26 +44,27 @@ export async function loadGitDiff(commitish) {
37
44
  // Get diff for each file individually
38
45
  const fileDiffs = await Promise.all(fileChanges.map(async ({ status, path }) => {
39
46
  let fileDiff = '';
40
- if (commitish.toLowerCase() === 'working') {
41
- // Get unstaged changes
47
+ // Handle individual file diffs (base is always a regular commit)
48
+ if (targetCommitish === 'working') {
49
+ // Show unstaged changes (working vs staged)
42
50
  fileDiff = await git.diff(['--', path]);
43
51
  }
44
- else if (commitish.toLowerCase() === 'staged') {
45
- // Get staged changes
46
- fileDiff = await git.diff(['--cached', '--', path]);
52
+ else if (targetCommitish === 'staged') {
53
+ // Show staged changes against base commit
54
+ fileDiff = await git.diff(['--cached', baseCommitish, '--', path]);
47
55
  }
48
- else if (commitish === '.') {
49
- // Get all changes (both staged and unstaged) compared to HEAD
50
- fileDiff = await git.diff(['HEAD', '--', path]);
56
+ else if (targetCommitish === '.') {
57
+ // Show all uncommitted changes against base commit
58
+ fileDiff = await git.diff([baseCommitish, '--', path]);
51
59
  }
52
60
  else {
53
61
  try {
54
- // Get diff for specific file in commit
55
- fileDiff = await git.diff([`${commitish}^..${commitish}`, '--', path]);
62
+ // Both are regular commits: standard commit-to-commit comparison
63
+ fileDiff = await git.diff([`${baseCommitish}..${targetCommitish}`, '--', path]);
56
64
  }
57
65
  catch {
58
66
  // For new files or if parent doesn't exist
59
- fileDiff = await git.diff([commitish, '--', path]);
67
+ fileDiff = await git.diff([targetCommitish, '--', path]);
60
68
  }
61
69
  }
62
70
  const lines = fileDiff.split('\n');
@@ -2,7 +2,7 @@ import { type DiffResponse } from '../types/diff.js';
2
2
  export declare class GitDiffParser {
3
3
  private git;
4
4
  constructor(repoPath?: string);
5
- parseDiff(commitish: string, ignoreWhitespace?: boolean): Promise<DiffResponse>;
5
+ parseDiff(targetCommitish: string, baseCommitish: string, ignoreWhitespace?: boolean): Promise<DiffResponse>;
6
6
  private parseUnifiedDiff;
7
7
  private parseFileBlock;
8
8
  private parseChunks;
@@ -1,35 +1,42 @@
1
1
  import { simpleGit } from 'simple-git';
2
+ import { validateDiffArguments, shortHash } from '../cli/utils.js';
2
3
  export class GitDiffParser {
3
4
  constructor(repoPath = process.cwd()) {
4
5
  this.git = simpleGit(repoPath);
5
6
  }
6
- async parseDiff(commitish, ignoreWhitespace = false) {
7
+ async parseDiff(targetCommitish, baseCommitish, ignoreWhitespace = false) {
7
8
  try {
9
+ // Validate arguments
10
+ const validation = validateDiffArguments(targetCommitish, baseCommitish);
11
+ if (!validation.valid) {
12
+ throw new Error(validation.error);
13
+ }
8
14
  let resolvedCommit;
9
15
  let diffArgs;
10
- if (commitish === '.') {
11
- // Show diff between HEAD and working directory (all uncommitted changes)
12
- resolvedCommit = 'Working Directory (all uncommitted changes)';
13
- diffArgs = ['HEAD'];
14
- }
15
- else if (commitish === 'working') {
16
- // Show only unstaged changes
16
+ // Handle target special chars (base is always a regular commit)
17
+ if (targetCommitish === 'working') {
18
+ // Show unstaged changes (working vs staged)
17
19
  resolvedCommit = 'Working Directory (unstaged changes)';
18
20
  diffArgs = [];
19
21
  }
20
- else if (commitish === 'staged') {
21
- // Show only staged changes
22
- resolvedCommit = 'Staging Area (staged changes)';
23
- diffArgs = ['--cached'];
22
+ else if (targetCommitish === 'staged') {
23
+ // Show staged changes against base commit
24
+ const baseHash = await this.git.revparse([baseCommitish]);
25
+ resolvedCommit = `${shortHash(baseHash)} vs Staging Area (staged changes)`;
26
+ diffArgs = ['--cached', baseCommitish];
27
+ }
28
+ else if (targetCommitish === '.') {
29
+ // Show all uncommitted changes against base commit
30
+ const baseHash = await this.git.revparse([baseCommitish]);
31
+ resolvedCommit = `${shortHash(baseHash)} vs Working Directory (all uncommitted changes)`;
32
+ diffArgs = [baseCommitish];
24
33
  }
25
34
  else {
26
- // Resolve commitish to actual commit hash and get short version
27
- const fullHash = await this.git.revparse([commitish]);
28
- const shortHash = fullHash.substring(0, 7);
29
- const parentHash = await this.git.revparse([`${commitish}^`]);
30
- const shortParentHash = parentHash.substring(0, 7);
31
- resolvedCommit = `${shortParentHash}..${shortHash}`;
32
- diffArgs = [`${commitish}^`, commitish];
35
+ // Both are regular commits: standard commit-to-commit comparison
36
+ const targetHash = await this.git.revparse([targetCommitish]);
37
+ const baseHash = await this.git.revparse([baseCommitish]);
38
+ resolvedCommit = `${shortHash(baseHash)}..${shortHash(targetHash)}`;
39
+ diffArgs = [baseCommitish, targetCommitish];
33
40
  }
34
41
  if (ignoreWhitespace) {
35
42
  diffArgs.push('-w');
@@ -44,7 +51,7 @@ export class GitDiffParser {
44
51
  };
45
52
  }
46
53
  catch (error) {
47
- throw new Error(`Failed to parse diff for ${commitish}: ${error instanceof Error ? error.message : 'Unknown error'}`);
54
+ throw new Error(`Failed to parse diff for ${targetCommitish} vs ${baseCommitish}: ${error instanceof Error ? error.message : 'Unknown error'}`);
48
55
  }
49
56
  }
50
57
  parseUnifiedDiff(diffText, summary) {
@@ -1,5 +1,6 @@
1
1
  interface ServerOptions {
2
- commitish: string;
2
+ targetCommitish: string;
3
+ baseCommitish: string;
3
4
  preferredPort?: number;
4
5
  openBrowser?: boolean;
5
6
  mode?: string;
@@ -11,25 +11,78 @@ export async function startServer(options) {
11
11
  let diffData = null;
12
12
  let currentIgnoreWhitespace = options.ignoreWhitespace || false;
13
13
  app.use(express.json());
14
+ app.use(express.text()); // For sendBeacon text/plain requests
14
15
  app.use((_req, res, next) => {
15
16
  res.header('Access-Control-Allow-Origin', 'http://localhost:*');
16
17
  res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
17
18
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
18
19
  next();
19
20
  });
20
- const isValidCommit = await parser.validateCommit(options.commitish);
21
+ const isValidCommit = await parser.validateCommit(options.targetCommitish);
21
22
  if (!isValidCommit) {
22
- throw new Error(`Invalid or non-existent commit: ${options.commitish}`);
23
+ throw new Error(`Invalid or non-existent commit: ${options.targetCommitish}`);
23
24
  }
24
- diffData = await parser.parseDiff(options.commitish, currentIgnoreWhitespace);
25
+ diffData = await parser.parseDiff(options.targetCommitish, options.baseCommitish, currentIgnoreWhitespace);
25
26
  app.get('/api/diff', async (req, res) => {
26
27
  const ignoreWhitespace = req.query.ignoreWhitespace === 'true';
27
28
  if (ignoreWhitespace !== currentIgnoreWhitespace) {
28
29
  currentIgnoreWhitespace = ignoreWhitespace;
29
- diffData = await parser.parseDiff(options.commitish, ignoreWhitespace);
30
+ diffData = await parser.parseDiff(options.targetCommitish, options.baseCommitish, ignoreWhitespace);
30
31
  }
31
32
  res.json({ ...diffData, ignoreWhitespace });
32
33
  });
34
+ // Store comments for final output
35
+ let finalComments = [];
36
+ app.post('/api/comments', (req, res) => {
37
+ try {
38
+ // Handle both JSON and text/plain content types (sendBeacon sends as text/plain)
39
+ let comments = [];
40
+ if (req.headers['content-type']?.includes('application/json')) {
41
+ comments = req.body.comments || [];
42
+ }
43
+ else if (typeof req.body === 'string') {
44
+ const parsed = JSON.parse(req.body);
45
+ comments = parsed.comments || [];
46
+ }
47
+ else {
48
+ comments = req.body.comments || [];
49
+ }
50
+ finalComments = comments;
51
+ res.json({ success: true });
52
+ }
53
+ catch (error) {
54
+ console.error('Error parsing comments:', error);
55
+ res.status(400).json({ error: 'Invalid comment data' });
56
+ }
57
+ });
58
+ app.get('/api/comments-output', (_req, res) => {
59
+ if (finalComments.length > 0) {
60
+ const output = formatCommentsOutput(finalComments);
61
+ res.send(output);
62
+ }
63
+ else {
64
+ res.send('');
65
+ }
66
+ });
67
+ // Function to format comments for output
68
+ function formatCommentsOutput(comments) {
69
+ const prompts = comments.map((comment) => {
70
+ return `${comment.file}:${comment.line}\n${comment.body}`;
71
+ });
72
+ return [
73
+ '\n📝 Comments from review session:',
74
+ '='.repeat(50),
75
+ prompts.join('\n=====\n'),
76
+ '='.repeat(50),
77
+ `Total comments: ${comments.length}\n`,
78
+ ].join('\n');
79
+ }
80
+ // Function to output comments when server shuts down
81
+ function outputFinalComments() {
82
+ if (finalComments.length > 0) {
83
+ console.log(formatCommentsOutput(finalComments));
84
+ }
85
+ }
33
86
  // SSE endpoint to detect when tab is closed
34
87
  app.get('/api/heartbeat', (req, res) => {
35
88
  res.writeHead(200, {
@@ -48,6 +101,7 @@ export async function startServer(options) {
48
101
  req.on('close', () => {
49
102
  clearInterval(heartbeatInterval);
50
103
  console.log('Client disconnected, shutting down server...');
104
+ outputFinalComments();
51
105
  process.exit(0);
52
106
  });
53
107
  });
@@ -57,7 +111,7 @@ export async function startServer(options) {
57
111
  // Find client files relative to the CLI executable location
58
112
  const distPath = join(__dirname, '..', 'client');
59
113
  app.use(express.static(distPath));
60
- app.get('*', (_req, res) => {
114
+ app.get('/{*splat}', (_req, res) => {
61
115
  res.sendFile(join(distPath, 'index.html'));
62
116
  });
63
117
  }
@@ -85,7 +139,7 @@ export async function startServer(options) {
85
139
  try {
86
140
  await open(url);
87
141
  }
88
- catch (error) {
142
+ catch {
89
143
  console.warn('Failed to open browser automatically');
90
144
  }
91
145
  }
@@ -106,7 +160,7 @@ async function startServerWithFallback(app, preferredPort) {
106
160
  .catch(reject);
107
161
  }
108
162
  else {
109
- reject(err);
163
+ reject(new Error(`Server error: ${err instanceof Error ? err.message : String(err)}`));
110
164
  }
111
165
  });
112
166
  });
package/dist/tui/App.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  interface AppProps {
3
- commitish: string;
3
+ targetCommitish: string;
4
+ baseCommitish: string;
4
5
  }
5
6
  declare const App: React.FC<AppProps>;
6
7
  export default App;
package/dist/tui/App.js CHANGED
@@ -5,7 +5,7 @@ import FileList from './components/FileList.js';
5
5
  import DiffViewer from './components/DiffViewer.js';
6
6
  import SideBySideDiffViewer from './components/SideBySideDiffViewer.js';
7
7
  import StatusBar from './components/StatusBar.js';
8
- const App = ({ commitish }) => {
8
+ const App = ({ targetCommitish, baseCommitish }) => {
9
9
  const [files, setFiles] = useState([]);
10
10
  const [selectedFileIndex, setSelectedFileIndex] = useState(0);
11
11
  const [loading, setLoading] = useState(true);
@@ -16,7 +16,7 @@ const App = ({ commitish }) => {
16
16
  setLoading(true);
17
17
  setError(null);
18
18
  try {
19
- const fileDiffs = await loadGitDiff(commitish);
19
+ const fileDiffs = await loadGitDiff(targetCommitish, baseCommitish);
20
20
  setFiles(fileDiffs);
21
21
  setLoading(false);
22
22
  }
@@ -28,7 +28,7 @@ const App = ({ commitish }) => {
28
28
  useEffect(() => {
29
29
  loadDiff();
30
30
  // eslint-disable-next-line react-hooks/exhaustive-deps
31
- }, [commitish]);
31
+ }, [targetCommitish, baseCommitish]);
32
32
  useInput((input, key) => {
33
33
  if (input === 'q' || (key.ctrl && input === 'c')) {
34
34
  exit();
@@ -61,7 +61,7 @@ const App = ({ commitish }) => {
61
61
  if (loading) {
62
62
  return React.createElement(Text, null,
63
63
  "Loading diff for ",
64
- commitish,
64
+ targetCommitish,
65
65
  "...");
66
66
  }
67
67
  if (error) {
@@ -71,16 +71,16 @@ const App = ({ commitish }) => {
71
71
  }
72
72
  if (files.length === 0) {
73
73
  return (React.createElement(Box, { flexDirection: "column" },
74
- React.createElement(StatusBar, { commitish: commitish, totalFiles: 0, currentMode: "list" }),
74
+ React.createElement(StatusBar, { commitish: targetCommitish, totalFiles: 0, currentMode: "list" }),
75
75
  React.createElement(Box, { marginTop: 1 },
76
76
  React.createElement(Text, { color: "yellow" },
77
77
  "No changes found for ",
78
- commitish)),
78
+ targetCommitish)),
79
79
  React.createElement(Box, { marginTop: 1 },
80
80
  React.createElement(Text, { dimColor: true }, "Press 'q' to quit"))));
81
81
  }
82
82
  return (React.createElement(Box, { flexDirection: "column", height: process.stdout.rows },
83
- React.createElement(StatusBar, { commitish: commitish, totalFiles: files.length, currentMode: viewMode }),
83
+ React.createElement(StatusBar, { commitish: targetCommitish, totalFiles: files.length, currentMode: viewMode }),
84
84
  React.createElement(Box, { flexGrow: 1, flexDirection: "column" }, viewMode === 'list' ? (React.createElement(FileList, { files: files, selectedIndex: selectedFileIndex })) : viewMode === 'side-by-side' ? (React.createElement(SideBySideDiffViewer, { files: files, initialFileIndex: selectedFileIndex, onBack: () => setViewMode('list') })) : (React.createElement(DiffViewer, { files: files, initialFileIndex: selectedFileIndex, onBack: () => setViewMode('list') }))),
85
85
  React.createElement(Box, { borderStyle: "single", paddingX: 1 },
86
86
  React.createElement(Text, { dimColor: true }, viewMode === 'list'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "difit",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "A lightweight command-line tool that spins up a local web server to display Git commit diffs in a GitHub-like Files changed view",
5
5
  "type": "module",
6
6
  "engines": {
@@ -21,30 +21,30 @@
21
21
  "scripts": {
22
22
  "dev": "node scripts/dev.js",
23
23
  "dev:cli": "tsc --project tsconfig.cli.json && NODE_ENV=development node dist/cli/index.js",
24
- "build": "pnpm run build:cli && tsc && vite build",
24
+ "build": "tsc -b && vite build",
25
25
  "build:cli": "tsc --project tsconfig.cli.json",
26
- "start": "pnpm run build && pnpm run build:cli && node dist/cli/index.js",
26
+ "start": "pnpm run build && node dist/cli/index.js",
27
27
  "lint": "eslint .",
28
28
  "lint:fix": "eslint . --fix",
29
29
  "format": "prettier --write .",
30
- "typecheck": "tsc --noEmit",
30
+ "typecheck": "tsc -b",
31
31
  "test": "vitest run",
32
32
  "test:watch": "vitest",
33
33
  "prepare": "lefthook install",
34
- "prepublishOnly": "NODE_ENV=production pnpm run build && pnpm run build:cli"
34
+ "prepublishOnly": "NODE_ENV=production pnpm run build"
35
35
  },
36
36
  "dependencies": {
37
- "commander": "^11.1.0",
38
- "express": "^4.18.2",
39
- "ink": "^5.2.1",
37
+ "commander": "^14.0.0",
38
+ "express": "^5.1.0",
39
+ "ink": "^6.0.1",
40
40
  "lucide-react": "^0.525.0",
41
- "open": "^10.0.3",
41
+ "open": "^10.1.2",
42
42
  "prism-react-renderer": "^2.4.1",
43
43
  "prismjs": "^1.30.0",
44
- "react": "^18.2.0",
45
- "react-dom": "^18.2.0",
46
- "shiki": "^0.14.7",
47
- "simple-git": "^3.20.0"
44
+ "react": "^19.1.0",
45
+ "react-dom": "^19.1.0",
46
+ "shiki": "^3.7.0",
47
+ "simple-git": "^3.28.0"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@eslint/eslintrc": "^3.3.1",
@@ -52,28 +52,28 @@
52
52
  "@tailwindcss/postcss": "^4.1.11",
53
53
  "@tailwindcss/typography": "^0.5.16",
54
54
  "@tsconfig/strictest": "^2.0.5",
55
- "@types/express": "^4.17.21",
56
- "@types/node": "^20.10.5",
55
+ "@types/express": "^5.0.3",
56
+ "@types/node": "^24.0.8",
57
57
  "@types/prismjs": "^1.26.5",
58
- "@types/react": "^18.2.45",
59
- "@types/react-dom": "^18.2.18",
60
- "@typescript-eslint/eslint-plugin": "^6.15.0",
61
- "@typescript-eslint/parser": "^6.15.0",
62
- "@vitejs/plugin-react": "^4.2.1",
58
+ "@types/react": "^19.1.8",
59
+ "@types/react-dom": "^19.1.6",
60
+ "@typescript-eslint/eslint-plugin": "^8.35.1",
61
+ "@typescript-eslint/parser": "^8.35.1",
62
+ "@vitejs/plugin-react": "^4.6.0",
63
63
  "autoprefixer": "^10.4.21",
64
- "eslint": "^8.56.0",
64
+ "eslint": "^9.30.0",
65
65
  "eslint-config-prettier": "^10.1.5",
66
66
  "eslint-plugin-import": "^2.32.0",
67
- "eslint-plugin-react": "^7.33.2",
68
- "eslint-plugin-react-hooks": "^4.6.0",
67
+ "eslint-plugin-react": "^7.37.5",
68
+ "eslint-plugin-react-hooks": "^5.2.0",
69
69
  "eslint-plugin-unused-imports": "^4.1.4",
70
- "lefthook": "^1.5.5",
70
+ "lefthook": "^1.11.14",
71
71
  "postcss": "^8.5.6",
72
- "prettier": "^3.1.1",
72
+ "prettier": "^3.6.2",
73
73
  "tailwindcss": "^4.1.11",
74
- "typescript": "^5.3.3",
75
- "vite": "^5.0.10",
76
- "vitest": "^1.1.0"
74
+ "typescript": "^5.8.3",
75
+ "vite": "^7.0.0",
76
+ "vitest": "^3.2.4"
77
77
  },
78
78
  "files": [
79
79
  "dist",