snapshot of https://github.com/tldraw/tldraw.git (main, 2026-09-23; blobs > 131072B omitted)
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled

This commit is contained in:
upstream-mirror
2026-09-23 16:12:52 +05:00
commit a774ac673a
4541 changed files with 770499 additions and 0 deletions

View File

@@ -0,0 +1,772 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@500;700&display=swap');
@import url('tldraw/tldraw.css');
* {
box-sizing: border-box;
overscroll-behavior: none;
}
body {
font-family: 'Inter', sans-serif;
}
.tldraw-agent-container {
position: fixed;
inset: 0;
display: grid;
grid-template-columns: 1fr 350px;
}
@media (max-width: 768px) {
.tldraw-agent-container {
grid-template-columns: 1fr;
grid-template-rows: 1fr auto;
}
}
.tldraw-canvas {
width: 100%;
height: 100%;
}
/* Chat Panel */
.chat-panel.tl-theme__light {
--tl-color-text-2: hsl(0, 0%, 55%);
--tl-color-primary-hover: hsl(214, 84%, 58%);
}
.chat-panel.tl-theme__dark {
--tl-color-text-2: hsl(0, 0%, 55%);
--tl-color-primary-hover: hsl(214, 84%, 50%);
}
.chat-panel {
display: flex;
flex-direction: column;
height: 100vh;
font-size: 14px;
background-color: var(--tl-color-panel);
border-left: 1px solid var(--tl-color-low);
color: var(--tl-color-text-1);
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 12px;
line-height: 1.5;
}
@media (max-width: 768px) {
.chat-panel {
height: 50vh;
width: 100vw;
}
}
.chat-panel {
position: relative;
}
.chat-panel * {
user-select: text;
}
.chat-panel button {
user-select: none;
}
.chat-header {
display: flex;
justify-content: flex-end;
}
.new-chat-button {
width: 32px;
height: 32px;
font-size: 16px;
align-self: flex-end;
appearance: none;
border: 0;
border-radius: 4px;
cursor: pointer;
background: none;
margin: 2px;
color: var(--tl-color-text);
}
.new-chat-button:hover {
background-color: var(--tl-color-muted-2);
}
/* Chat Input */
.chat-input-container {
display: flex;
flex-direction: column;
position: relative;
}
.chat-input {
padding: 0px 8px 8px 8px;
flex-shrink: 0;
position: sticky;
bottom: 0;
border-radius: 12px;
margin: 0px 8px 8px 8px;
padding: 0px;
background-color: var(--tl-color-panel);
z-index: 999999;
}
.chat-input form {
display: flex;
flex-direction: column;
gap: 8px;
padding: 8px;
border-radius: 12px;
color: var(--tl-color-text-2);
background-color: var(--tl-color-muted-1);
box-shadow: var(--tl-shadow-1);
font-size: 11px;
}
.chat-input input[type='text'] {
flex: 1;
padding: 8px 0px;
margin-bottom: 4px;
border: none;
background-color: transparent;
color: var(--tl-color-text);
border-radius: 4px;
font-size: 12px;
outline: none;
width: 100%;
}
.chat-input input[type='text']::placeholder {
color: var(--tl-color-text-3);
}
.chat-input input[type='text']:focus {
border-color: var(--tl-color-primary);
}
.chat-input textarea {
flex: 1;
padding: 8px 0px;
margin-bottom: 4px;
border: none;
background-color: transparent;
color: var(--tl-color-text);
font-family: sans-serif;
border-radius: 4px;
font-size: 12px;
outline: none;
width: 100%;
resize: none;
scrollbar-color: var(--tl-color-text-3) transparent;
}
.chat-input textarea::placeholder {
color: var(--tl-color-text-3);
}
.chat-input textarea:focus {
border-color: var(--tl-color-primary);
}
.chat-input textarea::-webkit-scrollbar {
width: 8px;
background: transparent;
}
.chat-input textarea::-webkit-scrollbar-track {
background: transparent;
}
.chat-input textarea::-webkit-scrollbar-thumb {
background: var(--tl-color-text-3);
border-radius: 4px;
}
.chat-input-submit {
width: 16px;
height: 16px;
align-self: flex-end;
background: var(--tl-color-primary);
box-shadow: var(--tl-shadow-1);
color: var(--tl-color-panel-contrast);
appearance: none;
border: 0;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 10px;
text-align: center;
font-weight: 500;
border-radius: 100%;
}
.chat-input-submit:hover {
background: var(--tl-color-primary-hover);
}
.chat-input-submit:disabled {
background: var(--tl-color-grid);
cursor: not-allowed;
}
.chat-actions {
display: flex;
gap: 8px;
width: 100%;
justify-content: space-between;
}
.chat-actions-left {
display: flex;
gap: 0px;
}
.chat-icon {
width: 11px;
height: 11px;
margin-right: 4px;
}
.chat-mode-select {
display: flex;
align-items: center;
gap: 0px;
}
.chat-mode-select span {
margin-right: 4px;
}
.chat-context-select-label {
display: flex;
align-items: center;
justify-content: center;
font-size: 10px;
}
.chat-model-select,
.chat-context-select {
position: relative;
display: flex;
align-items: center;
gap: 4px;
padding: 0px 8px;
}
.chat-model-select-label {
display: flex;
align-items: center;
gap: 2px;
margin-left: -6px;
}
.chat-context-select {
border: 1px solid var(--tl-color-text-2);
padding: 0px 4px 0px 3px;
border-radius: 6px;
height: 18px;
}
.chat-model-select:hover,
.chat-context-select:hover {
color: var(--tl-color-text);
border-color: var(--tl-color-text);
}
.chat-model-select select,
.chat-context-select select {
opacity: 0;
position: absolute;
left: -1px;
right: -1px;
background-color: transparent;
border-radius: 6px;
padding: 2px 16px 2px 0px;
font-size: 11px;
border: none;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
font-family: 'Inter', sans-serif;
}
.chat-context-select select {
cursor: pointer;
font-size: 10px;
font-weight: 500;
line-height: 1.5;
}
.chat-context-select.active {
background-color: var(--tl-color-primary);
color: black;
border-color: black;
}
.chat-context-select.active:hover {
background-color: var(--tl-color-primary);
color: var(--tl-color-text);
border-color: var(--tl-color-text);
}
/* Chat History */
.chat-history {
padding: 0px 16px 32px 16px;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 10px;
height: 100%;
position: relative;
width: 100%;
scrollbar-width: 8px;
scrollbar-color: var(--tl-color-muted-1) transparent;
}
.chat-history::-webkit-scrollbar {
width: 8px;
}
.chat-history::-webkit-scrollbar-track {
background: transparent;
}
.chat-history::-webkit-scrollbar-thumb {
background: var(--tl-color-muted-1);
border-radius: 4px;
}
.chat-history-section {
display: flex;
flex-direction: column;
gap: 14px;
flex-shrink: 0;
}
.chat-history-section:last-child {
min-height: calc(100% - 1px);
}
.chat-history-prompt-container {
position: sticky;
top: -6px;
padding: 8px;
margin: -8px;
z-index: 9999;
background-color: var(--tl-color-panel);
}
.chat-history-prompt {
background-color: var(--tl-color-muted-1);
box-shadow: var(--tl-shadow-1);
color: var(--tl-color-text-1);
width: 100%;
font-family: 'Inter', sans-serif;
font-weight: 400;
font-size: 12px;
padding: 8px;
border-radius: 8px;
display: flex;
flex-direction: column;
gap: 4px;
white-space: pre-wrap;
max-height: 25vh;
overflow-y: auto;
scrollbar-color: var(--tl-color-text-3) transparent;
}
.chat-history-prompt::-webkit-scrollbar {
background: transparent;
}
.chat-history-prompt::-webkit-scrollbar-thumb {
background: var(--tl-color-text-3);
}
.chat-history-prompt-content {
white-space: pre-wrap;
}
/* Messages from other agents are italicized and lighter */
.chat-history-prompt-other-agent {
color: var(--tl-color-text-3);
font-style: italic;
}
.chat-history-group {
display: flex;
flex-direction: column;
gap: 14px;
}
.chat-history-group button {
display: flex;
align-items: center;
gap: 4px;
padding: 12px 0px;
margin: -12px 0px;
font-size: 12px;
font-family: 'Inter', sans-serif;
font-weight: 400;
color: var(--tl-color-text-2);
background-color: transparent;
border: none;
cursor: pointer;
}
.chat-history-group button:hover {
color: var(--tl-color-text);
}
.chat-history-group button:disabled {
color: var(--tl-color-text-1);
cursor: default;
}
.chat-history-change-acceptance {
display: flex;
justify-content: flex-end;
width: 100%;
gap: 2px;
}
.chat-history-change-acceptance button {
border: 0;
cursor: pointer;
background-color: var(--tl-color-muted-1);
color: var(--tl-color-text-2);
padding: 4px 8px;
font-size: 10px;
font-weight: 500;
cursor: pointer;
height: 20px;
user-select: none;
display: flex;
align-items: center;
gap: 4px;
flex-direction: row;
user-select: none;
}
.chat-history-change-acceptance button:hover {
color: var(--tl-color-text);
}
.chat-history-change-acceptance button:disabled {
color: var(--tl-color-text-1);
cursor: default;
}
.chat-history-change-acceptance button:first-child {
border-radius: 4px 0px 0px 0px;
}
.chat-history-change-acceptance button:last-child {
border-radius: 0px 4px 0px 0px;
}
/* Agent Actions */
.agent-action {
display: flex;
align-items: flex-start;
gap: 4px;
font-size: 12px;
font-family: 'Inter', sans-serif;
font-weight: 400;
color: var(--tl-color-text-2);
}
.agent-action-description {
margin: 0;
width: 100%;
}
.agent-action-description > p:first-child {
margin-top: 0;
}
.agent-action-description > p:last-child {
margin-bottom: 0;
}
.agent-action-description p {
white-space: pre-wrap;
}
.agent-action-description ul,
.agent-action-description ol {
padding-left: 20px;
}
.agent-action-description pre {
width: 100%;
overflow-x: scroll;
}
.agent-action-description blockquote {
padding-left: 14px;
border-left: 2px solid var(--tl-color-text-2);
margin: 0;
}
.agent-actions-container {
display: flex;
flex-direction: column;
gap: 10px;
}
.agent-changes {
background-color: var(--tl-color-muted-1);
padding: 6px 8px;
margin: 0px 0px;
border-radius: 4px 0px 0px 0px;
color: var(--tl-color-text-2);
max-height: 70px;
overflow-y: auto;
scrollbar-width: none;
-ms-overflow-style: none;
}
.agent-changes::-webkit-scrollbar {
display: none;
}
.agent-changes:last-child {
border-radius: 4px 0px 4px 4px;
max-height: 100%;
}
.agent-change {
display: flex;
align-items: flex-start;
gap: 4px;
font-size: 12px;
font-family: 'Inter', sans-serif;
font-weight: 400;
}
/* Prompt Tags */
.prompt-tags {
display: flex;
gap: 4px;
align-items: center;
flex-wrap: wrap;
}
.prompt-tag {
display: flex;
align-items: center;
border-radius: 6px;
background-color: transparent;
font-size: 10px;
border: 1px solid var(--tl-color-text-2);
padding: 8px 4px 8px 3px;
font-weight: 500;
height: 16px;
color: var(--tl-color-text-2);
white-space: nowrap;
font-family: 'Inter', sans-serif;
max-width: 100%;
}
button.prompt-tag {
cursor: pointer;
}
button.prompt-tag:hover {
color: var(--tl-color-text);
border-color: var(--tl-color-text);
}
button.prompt-tag span {
user-select: none;
}
.prompt-tag span {
text-overflow: ellipsis;
overflow: hidden;
}
.prompt-tag svg {
flex-shrink: 0;
}
/* Diff viewer */
.tldraw-viewer {
height: 100px;
position: relative;
}
.tldraw-viewer .tlui-tooltip {
display: none;
}
.diff-shape-create-shadow {
filter: drop-shadow(
calc(var(--tl-scale) * 1px) calc(var(--tl-scale) * 1px) 0px rgba(0, 200, 0, 50%)
)
drop-shadow(calc(var(--tl-scale) * -1px) calc(var(--tl-scale) * -1px) 0px rgba(0, 200, 0, 50%))
drop-shadow(calc(var(--tl-scale) * 1px) calc(var(--tl-scale) * -1px) 0px rgba(0, 200, 0, 50%))
drop-shadow(calc(var(--tl-scale) * -1px) calc(var(--tl-scale) * 1px) 0px rgba(0, 200, 0, 50%));
}
.diff-shape-delete-shadow {
filter: drop-shadow(
calc(var(--tl-scale) * 1px) calc(var(--tl-scale) * 1px) 0px rgba(200, 0, 0, 50%)
)
drop-shadow(calc(var(--tl-scale) * -1px) calc(var(--tl-scale) * -1px) 0px rgba(200, 0, 0, 50%))
drop-shadow(calc(var(--tl-scale) * 1px) calc(var(--tl-scale) * -1px) 0px rgba(200, 0, 0, 50%))
drop-shadow(calc(var(--tl-scale) * -1px) calc(var(--tl-scale) * 1px) 0px rgba(200, 0, 0, 50%));
}
.diff-shape-update-after-shadow {
filter: drop-shadow(
calc(var(--tl-scale) * 1px) calc(var(--tl-scale) * 1px) 0px rgba(0, 100, 255, 50%)
)
drop-shadow(
calc(var(--tl-scale) * -1px) calc(var(--tl-scale) * -1px) 0px rgba(0, 100, 255, 50%)
)
drop-shadow(calc(var(--tl-scale) * 1px) calc(var(--tl-scale) * -1px) 0px rgba(0, 100, 255, 50%))
drop-shadow(calc(var(--tl-scale) * -1px) calc(var(--tl-scale) * 1px) 0px rgba(0, 100, 255, 50%));
}
/* Chat History Fallback */
.chat-fallback {
padding: 10px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: var(--tl-color-text-2);
user-select: none;
font-size: 14px;
}
.chat-fallback button {
background-color: hsl(214, 84%, 50%);
color: white;
border: none;
border-radius: 4px;
padding: 6px 12px;
font-weight: 500;
cursor: pointer;
}
.chat-fallback button:hover {
background-color: hsl(214, 84%, 40%);
}
/* Todo list */
.todo-list {
margin: 0px 16px -18px 16px;
background-color: var(--tl-color-panel);
border-radius: 12px 12px 0px 0px;
padding: 8px 4px 0 4px;
box-shadow: var(--tl-shadow-1);
border: 1px solid var(--tl-color-muted-2);
max-height: 120px;
overflow-y: auto;
flex-shrink: 0;
scrollbar-width: none;
-ms-overflow-style: none;
position: relative;
z-index: 99999;
transform: translateY(-16px);
}
.todo-list::-webkit-scrollbar {
display: none;
}
.todo-list-items {
display: flex;
flex-direction: column;
}
.todo-item {
display: flex;
align-items: flex-start;
gap: 8px;
padding-left: 4px;
border-radius: 6px;
font-size: 12px;
line-height: 1.3;
}
.todo-item-icon {
font-size: 10px;
width: 12px;
text-align: center;
flex-shrink: 0;
user-select: none;
}
.todo-item-text {
flex: 1;
color: var(--tl-color-text-3);
user-select: none;
padding-bottom: 8px;
}
.todo-item-todo .todo-item-icon {
color: var(--tl-color-text-3);
}
.todo-item-in-progress .todo-item-icon {
color: var(--tl-color-primary);
}
.todo-item-in-progress .todo-item-text {
font-weight: 500;
color: var(--tl-color-text);
}
.todo-item-done .todo-item-icon {
color: rgb(76, 200, 94);
}
.todo-item-done .todo-item-text {
color: var(--tl-color-text-2);
text-decoration: line-through;
}
.todo-item-delete {
appearance: none;
background: none;
border: none;
width: 16px;
height: 16px;
flex-shrink: 0;
display: flex;
padding: 12px;
padding-right: 14px;
margin-right: -3px;
margin-top: -3px;
align-items: center;
justify-content: center;
cursor: pointer;
color: var(--tl-color-text-2);
}
.todo-item-delete:hover {
color: var(--tl-color-text);
}
/* Custom appearance for specific agent actions */
.agent-action-type-message {
color: var(--tl-color-text-1);
}