discord-transcript-ui 1.0.0 → 1.1.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.
@@ -0,0 +1,2 @@
1
+ /*! discord-transcript-ui v1.1.0 | MIT | https://github.com/x1xo/discord-transcript-ui */
2
+ :root{--dt-font: "gg sans", "Noto Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;--dt-font-mono: "gg mono", "Source Code Pro", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "DejaVu Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;--dt-font-size: 1rem;--dt-line-height: 1.375rem;--dt-radius-sm: 4px;--dt-radius-md: 8px;--dt-radius-lg: 12px;--dt-bg-primary: #323339;--dt-bg-secondary: #393a41;--dt-bg-tertiary: #2c2d32;--dt-bg-embed: #393a41;--dt-bg-code: #323339;--dt-bg-inline-code: rgba(88, 101, 242, .078);--dt-bg-modifier-hover: rgba(151, 151, 159, .122);--dt-bg-modifier-active: rgba(151, 151, 159, .161);--dt-bg-message-hover: rgba(151, 151, 159, .039);--dt-bg-mentioned: rgba(248, 163, 0, .078);--dt-bg-scrollbar-thumb: #767780;--dt-bg-scrollbar-track: transparent;--dt-text-normal: #f3f3f4;--dt-text-strong: #ffffff;--dt-text-subtle: #c5c6ca;--dt-text-muted: #9d9ea5;--dt-text-link: #76aff6;--dt-text-on-brand: #ffffff;--dt-status-online: #3d9e60;--dt-status-idle: #ffcb6e;--dt-status-dnd: #dc4247;--dt-status-offline: #9d9ea5;--dt-border: rgba(151, 151, 159, .122);--dt-border-strong: rgba(151, 151, 159, .2);--dt-brand: #5865f2;--dt-accent-bar: var(--dt-brand);--dt-role-default: #f3f3f4;--dt-embed-default-color: #4f545c;--dt-divider: rgba(151, 151, 159, .122);--dt-line-color: #595a63;--dt-mention-bg: rgba(88, 101, 242, .239);--dt-mention-text: #cdd7ff;--dt-mention-role-color: var(--dt-role-default);--dt-mention-channel-bg: rgba(151, 151, 159, .122);--dt-mention-channel-text: var(--dt-text-normal);--dt-spoiler-bg: #7d7e87;--dt-spoiler-revealed-bg: rgba(151, 151, 159, .078);--dt-gutter: 16px;--dt-avatar-size: 40px;--dt-avatar-gap: 16px;--dt-msg-padding-right: 48px;--dt-reply-avatar-size: 16px;--dt-button-secondary: rgba(151, 151, 159, .122);--dt-button-secondary-hover: rgba(151, 151, 159, .2);--dt-button-primary: #5865f2;--dt-button-primary-hover: #4654c0;--dt-button-success: #248046;--dt-button-danger: #da3e44;--dt-button-link: rgba(151, 151, 159, .122);--dt-reaction-bg: rgba(151, 151, 159, .122);--dt-reaction-border: rgba(151, 151, 159, .122);--dt-reaction-bg-reacted: rgba(88, 101, 242, .239);--dt-reaction-border-reacted: #5865f2;--dt-reaction-text-reacted: #dfe4ff;--dt-focus-ring: #76aff6;--dt-transition: .12s ease}dms[light-theme],dms[data-theme=light],:root[data-theme=light]{--dt-bg-primary: #ffffff;--dt-bg-secondary: #ffffff;--dt-bg-tertiary: #f3f3f4;--dt-bg-embed: #ffffff;--dt-bg-code: #f3f3f4;--dt-bg-inline-code: rgba(88, 101, 242, .078);--dt-bg-modifier-hover: rgba(151, 151, 159, .122);--dt-bg-modifier-active: rgba(151, 151, 159, .161);--dt-bg-message-hover: rgba(151, 151, 159, .078);--dt-bg-mentioned: rgba(248, 163, 0, .1);--dt-bg-scrollbar-thumb: #8b8c94;--dt-bg-scrollbar-track: transparent;--dt-text-normal: #2e2e34;--dt-text-strong: #28282d;--dt-text-subtle: #595a63;--dt-text-muted: #6c6d76;--dt-text-link: #006dd4;--dt-role-default: #2e2e34;--dt-border: rgba(151, 151, 159, .278);--dt-border-strong: rgba(151, 151, 159, .4);--dt-divider: rgba(151, 151, 159, .278);--dt-line-color: #c5c6ca;--dt-embed-default-color: #d4d7dc;--dt-mention-bg: rgba(88, 101, 242, .15);--dt-mention-text: #2e3c88;--dt-mention-channel-bg: rgba(151, 151, 159, .122);--dt-mention-channel-text: #2e2e34;--dt-spoiler-bg: #8f9097;--dt-spoiler-revealed-bg: #ebeced;--dt-reaction-border: rgba(151, 151, 159, .278);--dt-reaction-text-reacted: #273478;--dt-status-online: #01783e;--dt-status-idle: #faaa00;--dt-status-dnd: #d22d39;--dt-status-offline: #5f606a;--dt-focus-ring: #006dd4}dms[data-theme=dark]{--dt-bg-primary: #323339;--dt-bg-secondary: #393a41;--dt-bg-tertiary: #2c2d32;--dt-bg-embed: #393a41;--dt-bg-code: #323339;--dt-bg-inline-code: rgba(88, 101, 242, .078);--dt-bg-modifier-hover: rgba(151, 151, 159, .122);--dt-bg-modifier-active: rgba(151, 151, 159, .161);--dt-bg-message-hover: rgba(151, 151, 159, .039);--dt-bg-mentioned: rgba(248, 163, 0, .078);--dt-bg-scrollbar-thumb: #767780;--dt-bg-scrollbar-track: transparent;--dt-text-normal: #f3f3f4;--dt-text-strong: #ffffff;--dt-text-subtle: #c5c6ca;--dt-text-muted: #9d9ea5;--dt-text-link: #76aff6;--dt-role-default: #f3f3f4;--dt-border: rgba(151, 151, 159, .122);--dt-border-strong: rgba(151, 151, 159, .2);--dt-divider: rgba(151, 151, 159, .122);--dt-line-color: #595a63;--dt-embed-default-color: #4f545c;--dt-mention-bg: rgba(88, 101, 242, .239);--dt-mention-text: #cdd7ff;--dt-mention-channel-bg: rgba(151, 151, 159, .122);--dt-mention-channel-text: #f3f3f4;--dt-spoiler-bg: #7d7e87;--dt-spoiler-revealed-bg: rgba(151, 151, 159, .078);--dt-reaction-border: rgba(151, 151, 159, .122);--dt-reaction-text-reacted: #dfe4ff;--dt-status-online: #3d9e60;--dt-status-idle: #ffcb6e;--dt-status-dnd: #dc4247;--dt-status-offline: #9d9ea5;--dt-focus-ring: #76aff6}:where(dms,dm,dai,drp,de,ded,defs,def,defo,dats,dimg,dfil,daud,dvid,drs,dr,dsp,dti,dme,demo,dc,dp,dq,dli,dul,dol,dh,dcmd,dsy,dth,dthm,dar,dbtn,dvat){box-sizing:border-box}:where(dms,dm,de,dats,drs,drp,dsy,dcmd,dth,dthm,dar,dp,dq,dul,dol,dh){display:block;font-family:var(--dt-font);font-size:var(--dt-font-size);line-height:var(--dt-line-height);color:var(--dt-text-normal);text-align:left}:where(dm,drp,de,dats,drs){-webkit-text-size-adjust:100%;word-wrap:break-word;overflow-wrap:anywhere}:where(db){font-weight:700}:where(di){font-style:italic}:where(dun){text-decoration:underline}:where(dst){text-decoration:line-through}:where(dsub){display:block;color:var(--dt-text-subtle);font-size:.875rem;line-height:1.20313rem}:where(dh){display:block;margin:8px 0 0;font-weight:600;line-height:1.375em}:where(dh[level="1"]){font-size:1.5rem}:where(dh[level="2"]){font-size:1.25rem}:where(dh[level="3"]){font-size:1rem}:where(dq){display:block;margin:4px 0;padding:0 8px 0 12px;color:var(--dt-text-subtle);border-left:4px solid var(--dt-line-color);border-radius:var(--dt-radius-sm)}:where(dul,dol){margin:0;padding-left:1.375em}:where(dli){display:list-item;margin:0 0 4px;padding:0}:where(dul)>dli{list-style:disc outside}:where(dol)>dli{list-style:decimal outside}:where(dl){color:var(--dt-text-link);text-decoration:none}:where(dl):hover{text-decoration:underline}:where(dm,de,ded,def,drp,dq) a:not([class]){color:var(--dt-text-link);text-decoration:none}:where(dm,de,ded,def,drp,dq) a:not([class]):hover{text-decoration:underline}.dt-page{min-height:100vh;margin:0;background:var(--dt-bg-primary);color:var(--dt-text-normal);font-family:var(--dt-font);font-size:var(--dt-font-size);line-height:var(--dt-line-height);-webkit-font-smoothing:antialiased}.dt-page__inner{max-width:100%;margin:0 auto;padding:1rem 0 4rem}.dt-page__title{margin:0 0 1rem;padding:0 16px;font-size:1.25rem;font-weight:700;color:var(--dt-text-strong)}.dt-page__meta{margin:0 0 1.5rem;padding:0 16px;font-size:.875rem;color:var(--dt-text-muted)}:where(dms){display:block;position:relative;margin:0 auto;padding:8px 0 16px;background:var(--dt-bg-primary);color:var(--dt-text-normal);font-family:var(--dt-font);line-height:var(--dt-line-height);overflow-x:hidden;overflow-y:auto;scrollbar-color:var(--dt-bg-scrollbar-thumb) var(--dt-bg-scrollbar-track)}:where(dms[no-background]){background:transparent;padding:0}:where(dms[channel-name]):before{content:attr(channel-name);display:block;margin:0 0 8px;padding:4px 16px 12px;border-bottom:1px solid var(--dt-divider);font-size:1.25rem;font-weight:700;color:var(--dt-text-strong)}dms[channel-type=text][channel-name]:before,dms[channel-type=voice][channel-name]:before,dms[channel-type=thread][channel-name]:before,dms[channel-type=forum][channel-name]:before,dms[channel-type=locked][channel-name]:before{content:"#\a0" attr(channel-name)}dms ::-webkit-scrollbar{width:16px;height:16px}dms ::-webkit-scrollbar-thumb{background:var(--dt-bg-scrollbar-thumb);border:4px solid transparent;background-clip:padding-box;border-radius:8px}dms ::-webkit-scrollbar-track{background:var(--dt-bg-scrollbar-track)}:where(dm){position:relative;display:block;margin:0;padding:2px var(--dt-msg-padding-right) 2px var(--dt-gutter);color:var(--dt-text-normal);font-family:var(--dt-font);font-size:var(--dt-font-size);line-height:var(--dt-line-height);-webkit-user-select:text;user-select:text}:where(dm:hover){background:var(--dt-bg-message-hover)}dm:not([data-dt-ready]):before{content:attr(author) "\a0";font-weight:600;color:var(--dt-role-default)}dm:not([data-dt-ready]):not([author]):before,dm:not([data-dt-ready])[author=""]:before{content:""}.dt-msg{display:grid;grid-template-columns:var(--dt-avatar-size) minmax(0,1fr);column-gap:var(--dt-avatar-gap);align-items:start}.dt-avatar{grid-column:1;width:var(--dt-avatar-size);height:var(--dt-avatar-size);margin-top:2px;border-radius:50%;overflow:hidden;background:var(--dt-bg-tertiary)}.dt-avatar img{display:block;width:100%;height:100%;object-fit:cover}.dt-content{grid-column:2;min-width:0}.dt-header{display:flex;flex-wrap:wrap;align-items:center;min-height:1.375rem}.dt-author{margin-right:8px;font-weight:500;color:var(--dt-role-default);text-decoration:none}.dt-author--interactive:hover{text-decoration:underline;cursor:pointer}.dt-badges{display:inline-flex;align-items:center;gap:4px;margin-right:8px}.dt-badge{display:inline-flex;align-items:center;justify-content:center;gap:3px;height:16px;padding:0 5px;border-radius:4px;background:var(--dt-brand);color:var(--dt-text-on-brand);font-size:.625rem;font-weight:600;line-height:1;letter-spacing:.02em;text-transform:uppercase}.dt-badge--verified{padding:0 5px 0 4px}.dt-badge--verified:before{content:"\2713";font-size:.75rem;line-height:1}.dt-badge--server{background:#3ba55c}.dt-badge--official{background:#1abc84}.dt-timestamp{font-size:.75rem;line-height:1.375rem;color:var(--dt-text-muted);white-space:nowrap}.dt-timestamp:hover{text-decoration:underline}.dt-edited{margin-left:4px;font-size:.625rem;color:var(--dt-text-muted)}.dt-body{display:block;min-width:0}.dt-body>:first-child{margin-top:0}.dt-jumbo{display:flex;flex-wrap:wrap;align-items:center;gap:2px}.dt-jumbo demo img,.dt-jumbo>img.emoji{width:48px;height:48px}dm[highlight],dm[ephemeral],dm[mentioned]{background:var(--dt-bg-mentioned)}dm[highlight]:after,dm[ephemeral]:after,dm[mentioned]:after{content:"";position:absolute;top:0;bottom:0;left:0;width:2px;background:var(--dt-accent-bar);pointer-events:none}dm[ephemeral]{background:#5865f214}dm[highlight]:hover,dm[mentioned]:hover{background:var(--dt-bg-mentioned)}dm[data-dt-continuation] .dt-avatar,dm[message-body-only] .dt-avatar{visibility:hidden}dm[data-dt-continuation] .dt-header,dm[message-body-only] .dt-header{display:none}dm[data-dt-continuation]:hover:before,dm[data-dt-continuation]:focus-within:before{content:attr(data-dt-short-time);position:absolute;top:3px;left:var(--dt-gutter);width:calc(var(--dt-avatar-size) - 4px);font-size:.6875rem;line-height:1.375rem;color:var(--dt-text-muted);white-space:nowrap;overflow:hidden;pointer-events:none}dm[data-dt-group-start]{margin-top:1.0625rem}dm:first-child{margin-top:0}dms[compact-mode],dm[compact-mode]{--dt-avatar-size: 16px;--dt-avatar-gap: 8px;--dt-gutter: 16px;--dt-msg-padding-right: 16px}dms[compact-mode] dm{padding-top:1px;padding-bottom:1px}dms[compact-mode] .dt-avatar{margin-top:.25rem}dms[compact-mode] .dt-header{display:inline;margin-right:8px}dms[compact-mode] .dt-author{margin-right:6px}dms[compact-mode] .dt-body{display:inline}dms[compact-mode] .dt-timestamp{margin-right:6px;font-size:.6875rem}:where(dai){display:inline-flex;align-items:center;gap:4px;font-weight:500;color:var(--dt-role-default)}dai:not([data-dt-ready]):before{content:attr(author)}:where(dai[bot],dai[server],dai[official-app],dai[op]) :after{margin-left:4px;padding:0 4px;border-radius:3px;background:var(--dt-brand);color:var(--dt-text-on-brand);font-size:.625rem;font-weight:600;line-height:15px}:where(dai[bot]):after{content:"APP"}:where(dai[bot][verified]):after{content:"\2713\a0aPP"}:where(dai[server]):after{content:"SERVER";background:#3ba55c}:where(dai[official-app]):after{content:"OFFICIAL";background:#1abc84}:where(dai[op]):after{content:"OP"}:where(dme){display:inline;padding:0 2px;border-radius:3px;background:var(--dt-mention-bg);color:var(--dt-mention-text);font-weight:500;cursor:pointer}:where(dme):hover{background:var(--dt-bg-modifier-active)}:where(dme[type=channel]),:where(dme[type=voice]),:where(dme[type=thread]),:where(dme[type=forum]),:where(dme[type=locked]){background:var(--dt-mention-channel-bg);color:var(--dt-mention-channel-text)}:where(dme[type=role]){background:var(--dt-mention-bg);color:var(--dt-mention-role-color)}dme:not([no-prefix]):before{content:"@"}dme:not([no-prefix])[type=channel]:before,dme:not([no-prefix])[type=voice]:before,dme:not([no-prefix])[type=thread]:before,dme:not([no-prefix])[type=forum]:before,dme:not([no-prefix])[type=locked]:before{content:"#"}:where(demo){display:inline-block;vertical-align:-.25em}:where(demo) img{display:inline-block;width:1.375em;height:1.375em;object-fit:contain;vertical-align:middle}demo:not([data-dt-ready]):not(:has(img)):before{content:attr(name);font-size:.75rem;color:var(--dt-text-muted)}:where(dti){display:inline;padding:0 2px;border-radius:3px;background:var(--dt-bg-modifier-hover);font-size:.875rem;white-space:nowrap}:where(dti):hover{background:var(--dt-bg-modifier-active)}:where(dsp){display:inline;border-radius:var(--dt-radius-sm);background:var(--dt-spoiler-bg);color:transparent;cursor:pointer;transition:background var(--dt-transition),color var(--dt-transition)}:where(dsp)::selection{background:transparent;color:transparent}:where(dsp[activated]),:where(dsp[revealed]),:where(dsp[data-dt-revealed]){background:var(--dt-spoiler-revealed-bg);color:inherit;cursor:auto}dsp:not([data-dt-ready]):hover{background:var(--dt-spoiler-revealed-bg);color:inherit}dsp[data-dt-ready]{outline:none}dsp[data-dt-ready]:focus-visible{box-shadow:0 0 0 2px var(--dt-focus-ring)}:where(dc){display:inline;padding:0 2px;border-radius:var(--dt-radius-sm);background:var(--dt-bg-inline-code);border:1px solid var(--dt-border-strong);font-family:var(--dt-font-mono);font-size:.85em;white-space:pre-wrap;word-break:break-word}:where(dc[multiline]){display:block;margin:6px 0 0;padding:8px 12px;border:1px solid var(--dt-border);border-radius:var(--dt-radius-sm);background:var(--dt-bg-code);font-size:.75rem;line-height:1rem;white-space:pre;overflow-x:auto;tab-size:4}:where(dp){position:relative;display:block;margin:6px 0 0;padding:0;border:1px solid var(--dt-border);border-radius:var(--dt-radius-sm);background:var(--dt-bg-code);overflow:hidden}:where(dp)>:where(dc),:where(dp) pre{display:block;margin:0;padding:8px 12px;border:0;border-radius:0;background:none;font-family:var(--dt-font-mono);font-size:.75rem;line-height:1rem;white-space:pre;overflow-x:auto;tab-size:4}:where(dp) code{font-family:inherit}.dt-code-lang{display:block;padding:6px 12px 0;font-family:var(--dt-font);font-size:.75rem;color:var(--dt-text-muted)}.dt-copy{position:absolute;top:6px;right:8px;display:none;padding:2px 8px;border:1px solid var(--dt-border-strong);border-radius:var(--dt-radius-sm);background:var(--dt-bg-primary);color:var(--dt-text-normal);font-family:var(--dt-font);font-size:.75rem;cursor:pointer}dp:hover .dt-copy,.dt-copy:focus-visible{display:block}.dt-copy:hover{background:var(--dt-bg-modifier-hover)}:where(dsy){position:relative;display:block;margin:0;padding:2px var(--dt-msg-padding-right) 2px calc(var(--dt-gutter) + var(--dt-avatar-size) + var(--dt-avatar-gap));background:transparent;color:var(--dt-text-muted);font-size:.9375rem}:where(dsy):before{content:"";position:absolute;top:7px;left:calc(var(--dt-gutter) + (var(--dt-avatar-size) - 16px) / 2);width:16px;height:16px;border-radius:50%;background:var(--dt-bg-modifier-hover)}dsy[type=join]:before{background:var(--dt-status-online)}dsy[type=leave]:before,dsy[type=missed-call]:before,dsy[type=alert]:before,dsy[type=error]:before{background:var(--dt-status-dnd)}dsy[type=boost]:before{background:#ff73fa}dsy[type=pin]:before{background:var(--dt-status-idle)}dsy[type=upgrade]:before,dsy[type=thread]:before,dsy[type=edit]:before,dsy[type=call]:before{background:var(--dt-brand)}dsy a,dsy :where(dl){color:var(--dt-text-muted);font-weight:500}dsy .dt-system-time{margin-left:4px;font-size:.75rem;color:var(--dt-text-muted)}:where(dcmd){position:relative;display:block;margin:0 0 2px;padding:0;font-size:.9375rem}dcmd:not([data-dt-ready]):before{content:attr(author) " used /" attr(command) "\a0";font-weight:500;color:var(--dt-text-normal)}.dt-avatar--initials{display:flex;align-items:center;justify-content:center;color:#fff;font-size:.875rem;font-weight:600;text-transform:uppercase}:where(dth){position:relative;display:block;margin:4px 0 0;padding:4px 120px 4px 12px;border-left:2px solid var(--dt-line-color);font-size:.875rem;color:var(--dt-text-muted)}dth:not([data-dt-ready]):before{content:attr(name);font-weight:500;color:var(--dt-text-normal)}dth[cta]:after{content:attr(cta) " " "\203a";position:absolute;top:4px;right:8px;font-size:.875rem;font-weight:500;color:var(--dt-text-muted);pointer-events:none}dthm{display:block;margin:2px 0;font-size:.875rem}dthm:not([data-dt-ready]):before{content:attr(author) "\a0";font-weight:500;color:var(--dt-role-default)}:where(drp){position:relative;display:block;margin:0 0 2px;color:var(--dt-text-normal);font-size:.875rem;line-height:1.125rem;min-height:1.125rem}drp:not([data-dt-ready]):before{content:attr(author) "\a0";font-weight:500;color:var(--dt-role-default)}drp[mentions]:not([data-dt-ready]):before{content:"@" attr(author) "\a0"}drp[deleted]>*{display:none}drp[deleted]:before{content:"Original message was deleted";font-style:italic;font-weight:400;color:var(--dt-text-muted)}.dt-msg--has-reply>:where(drp),.dt-msg--has-reply>:where(dcmd){grid-column:2;grid-row:1}.dt-msg--has-reply>.dt-avatar,.dt-msg--has-reply>.dt-content{grid-row:2}dm[data-dt-ready] :where(drp):after{content:"";position:absolute;left:-36px;bottom:-2px;width:36px;height:12px;border-left:2px solid var(--dt-line-color);border-top:2px solid var(--dt-line-color);border-top-left-radius:6px;pointer-events:none}drp[data-dt-ready] .dt-reply-avatar{display:inline-block;width:var(--dt-reply-avatar-size);height:var(--dt-reply-avatar-size);margin-right:4px;border-radius:50%;overflow:hidden;vertical-align:-3px;background:var(--dt-bg-tertiary)}drp[data-dt-ready] .dt-reply-avatar img{display:block;width:100%;height:100%;object-fit:cover}drp[data-dt-ready] .dt-reply-author{margin-right:4px;font-weight:500;color:var(--dt-role-default)}drp[data-dt-ready] .dt-reply-author:hover{text-decoration:underline;cursor:pointer}drp[data-dt-ready] .dt-reply-avatar,drp[data-dt-ready] .dt-reply-author{-webkit-user-select:none;user-select:none}dms[compact-mode] :where(drp):after{display:none}:where(de){position:relative;display:block;margin:8px 0 0;padding:2px 16px 16px 12px;border:1px solid var(--dt-border);border-left:4px solid var(--dt-embed-color, var(--dt-embed-default-color));border-radius:var(--dt-radius-sm);background:var(--dt-bg-embed);max-width:516px;color:var(--dt-text-normal);font-size:.875rem;line-height:1.125rem}.dt-embed-content{min-width:0}de[thumbnail] .dt-embed-content,de[data-dt-thumbnail] .dt-embed-content,de:has(.dt-embed-thumbnail) .dt-embed-content{padding-right:96px}de[thumbnail]:not(:has(.dt-embed-content)),de[data-dt-thumbnail]:not(:has(.dt-embed-content)),de:has(.dt-embed-thumbnail):not(:has(.dt-embed-content)){padding-right:104px}de:not([data-dt-ready])[embed-title]:before{content:attr(embed-title);display:block;margin:0 0 8px;font-size:1rem;font-weight:600;line-height:1.375rem;color:var(--dt-text-strong)}de:not([data-dt-ready]):not([embed-title])[author-name]:before{content:attr(author-name);display:block;margin:0 0 8px;font-weight:600;line-height:1.125rem}.dt-embed-provider{display:block;margin-bottom:8px;color:var(--dt-text-normal)}.dt-embed-author{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:.875rem;font-weight:600;line-height:1.125rem}.dt-embed-author img{width:24px;height:24px;border-radius:50%;object-fit:cover}.dt-embed-author a{color:var(--dt-text-normal);text-decoration:none}.dt-embed-author a:hover{text-decoration:underline}.dt-embed-title{display:block;margin:0 0 8px;font-size:1rem;font-weight:600;line-height:1.375rem;color:var(--dt-text-strong);text-decoration:none}.dt-embed-title--link,a.dt-embed-title:hover,.dt-embed-title a:hover{text-decoration:underline}a.dt-embed-title{color:var(--dt-text-link)}.dt-embed-thumbnail{position:absolute;top:8px;right:16px;width:80px;height:80px;border-radius:var(--dt-radius-sm);overflow:hidden;background:var(--dt-bg-tertiary)}.dt-embed-thumbnail img{display:block;width:100%;height:100%;object-fit:cover}:where(ded){display:block;margin:0;font-size:.875rem;line-height:1.125rem;white-space:pre-line}:where(defs){display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:8px;margin-top:8px}:where(def){grid-column:1 / -1;min-width:0;font-size:.875rem;line-height:1.125rem}:where(def[inline]){grid-column:span 4}de[thumbnail] :where(def[inline]),de[data-dt-thumbnail] :where(def[inline]){grid-column:span 6}.dt-embed-field-title{display:block;margin:0 0 2px;font-weight:600;color:var(--dt-text-strong)}def:not([data-dt-ready]):not(:has(.dt-embed-field-title)):before{content:attr(field-title);display:block;margin-bottom:2px;font-weight:600;color:var(--dt-text-strong)}.dt-embed-image{display:block;margin-top:16px}.dt-embed-image img,.dt-embed-image video{display:block;max-width:100%;max-height:300px;border-radius:var(--dt-radius-sm);object-fit:contain}:where(defo){display:flex;align-items:center;gap:8px;margin-top:8px;font-size:.75rem;line-height:1rem;color:var(--dt-text-muted)}defo:empty:before{content:attr(footer)}.dt-embed-footer-icon{width:20px;height:20px;border-radius:50%;overflow:hidden;background:var(--dt-bg-tertiary)}.dt-embed-footer-icon img{display:block;width:100%;height:100%;object-fit:cover}.dt-embed-footer-sep{display:inline-block;width:4px;height:4px;border-radius:50%;background:var(--dt-text-muted);opacity:.6}:where(dats){display:flex;flex-direction:column;align-items:flex-start;gap:8px;margin-top:8px;max-width:550px}:where(dats:empty){display:none}:where(dimg){position:relative;display:block;max-width:100%;border-radius:var(--dt-radius-md);overflow:hidden;line-height:0}:where(dimg) img{display:block;max-width:100%;max-height:350px;border-radius:var(--dt-radius-md);object-fit:contain;cursor:pointer}:where(dimg) a{display:block}dimg[url]:not([data-dt-ready]):not(:has(img)){min-width:220px;min-height:120px;border:1px dashed var(--dt-border-strong)}dimg[spoiler] img,dvid[spoiler] video{filter:blur(44px);transition:filter var(--dt-transition)}dimg[spoiler][data-dt-revealed] img,dvid[spoiler][data-dt-revealed] video{filter:none}.dt-spoiler-overlay{position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;border:0;border-radius:var(--dt-radius-md);background:#00000059;color:#fff;font-family:var(--dt-font);font-size:.75rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;cursor:pointer}.dt-spoiler-overlay:hover{background:#00000073}dimg[data-dt-revealed]>.dt-spoiler-overlay,dvid[data-dt-revealed]>.dt-spoiler-overlay{display:none}:where(dfil){display:flex;align-items:center;gap:12px;width:100%;max-width:420px;padding:12px;border:1px solid var(--dt-border);border-radius:var(--dt-radius-md);background:var(--dt-bg-secondary)}:where(dfil) a{display:flex;align-items:center;gap:12px;width:100%;color:inherit;text-decoration:none}dfil:empty{display:grid;grid-template-columns:30px minmax(0,1fr);align-content:center;column-gap:12px}dfil:empty:before{grid-column:1;grid-row:1 / span 2;content:"FILE";display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:var(--dt-radius-sm);background:var(--dt-bg-modifier-hover);color:var(--dt-text-muted);font-size:.5625rem;font-weight:700}dfil[type]:empty:before{content:attr(type)}dfil:empty:after{grid-column:2;content:attr(name) "\a" attr(bytes) " " attr(bytes-unit);white-space:pre-line;line-height:1.25rem}dfil[bytes=""]:empty:after,dfil:not([bytes]):empty:after{content:attr(name)}.dt-file-icon{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:var(--dt-radius-sm);background:var(--dt-bg-modifier-hover);color:var(--dt-text-muted);font-size:.5625rem;font-weight:700;text-transform:uppercase;flex:none}.dt-file-meta{display:flex;flex-direction:column;min-width:0}.dt-file-name{font-size:.875rem;font-weight:500;color:var(--dt-text-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dt-file-size{font-size:.75rem;color:var(--dt-text-muted)}:where(daud){display:block;width:100%;max-width:420px}:where(daud) audio{display:block;width:100%;max-width:420px;border-radius:var(--dt-radius-md);outline:none}:where(dvid){position:relative;display:block;max-width:100%;border-radius:var(--dt-radius-md);overflow:hidden;background:#000;line-height:0}:where(dvid) video{display:block;max-width:100%;max-height:400px;border-radius:var(--dt-radius-md)}:where(dvid) video:focus-visible,:where(daud) audio:focus-visible{box-shadow:0 0 0 2px var(--dt-focus-ring)}:where(drs){display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin-top:8px}:where(drs:empty){display:none}:where(dr){display:inline-flex;align-items:center;gap:6px;min-width:36px;height:24px;padding:2px 6px;border:1px solid var(--dt-reaction-border);border-radius:var(--dt-radius-md);background:var(--dt-reaction-bg);color:var(--dt-text-normal);font-family:var(--dt-font);font-size:.875rem;line-height:1;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background var(--dt-transition),border-color var(--dt-transition)}:where(dr:hover){border-color:var(--dt-border-strong)}:where(dr[reacted]){background:var(--dt-reaction-bg-reacted);border-color:var(--dt-reaction-border-reacted);color:var(--dt-reaction-text-reacted)}dr:not([data-dt-ready]):before{content:attr(emoji);font-size:1rem;line-height:1}dr[emoji^=http]:not([data-dt-ready]):before,dr[emoji^="data:"]:not([data-dt-ready]):before,dr[emoji^="blob:"]:not([data-dt-ready]):before,dr[emoji^="/"]:not([data-dt-ready]):before,dr[emoji^="./"]:not([data-dt-ready]):before,dr:not([emoji]):not([data-dt-ready]):before{content:none}dr:not([data-dt-ready]):after{content:attr(count);font-size:.875rem;font-weight:500;line-height:1}dr:not([count]):not([data-dt-ready]):after,dr[count="1"]:not([data-dt-ready]):after{content:none}:where(dr) img,.dt-reaction-emoji{display:inline-block;flex:none;width:1rem;height:1rem;overflow:hidden;object-fit:contain;vertical-align:middle}.dt-reaction-count{font-size:.75rem;font-weight:600;line-height:1;color:inherit}:where(dar){display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;max-width:600px}:where(dbtn){display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:2px 16px;border:0;border-radius:var(--dt-radius-sm);background:var(--dt-button-secondary);color:#fff;font-family:var(--dt-font);font-size:.875rem;font-weight:500;line-height:1rem;white-space:nowrap;cursor:pointer;transition:background var(--dt-transition)}:where(dbtn):hover{background:var(--dt-button-secondary-hover)}:where(dbtn[type=primary]){background:var(--dt-button-primary)}:where(dbtn[type=primary]):hover{background:var(--dt-button-primary-hover)}:where(dbtn[type=success]){background:var(--dt-button-success)}:where(dbtn[type=destructive],dbtn[type=danger]){background:var(--dt-button-danger)}:where(dbtn[type=link]){background:var(--dt-button-link)}:where(dbtn[disabled]){opacity:.5;cursor:not-allowed}.dt-button-emoji{width:1rem;height:1rem;object-fit:contain}.dt-button-link-icon{width:12px;height:12px;opacity:.9}:where(dvat){display:inline-flex;align-items:center;justify-content:center;gap:3px;height:16px;padding:0 5px 0 4px;border-radius:4px;background:var(--dt-brand);color:var(--dt-text-on-brand);font-size:.625rem;font-weight:600;line-height:1;letter-spacing:.02em;text-transform:uppercase;vertical-align:-2px}:where(dvat):before{content:"\2713";font-size:.75rem;line-height:1}:where(dvat:not([verified])):before{content:none}:where(dvat):after{content:"APP"}.dt-divider{height:1px;margin:8px 0;border:0;background:var(--dt-divider)}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}:where(dm,de,dats,drs) :focus-visible{outline:none;box-shadow:0 0 0 2px var(--dt-focus-ring)}@media(prefers-reduced-motion:reduce){:where(dsp),:where(dr),:where(dbtn),dimg img{transition:none}}@media(max-width:480px){:where(dms){--dt-msg-padding-right: 16px}:where(de),:where(dats){max-width:100%}}@media print{:root,dms,dm{--dt-bg-primary: #ffffff;--dt-bg-secondary: #f2f3f5;--dt-bg-embed: #f2f3f5;--dt-bg-code: #f2f3f5;--dt-text-normal: #000000;--dt-text-strong: #000000;--dt-text-muted: #444444}:where(dsp){background:none;color:inherit}.dt-copy,.dt-spoiler-overlay{display:none!important}}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "discord-transcript-ui",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "builtFrom": [
5
5
  "src/discord-transcript.css",
6
6
  "src/discord-transcript.js"
@@ -8,55 +8,78 @@
8
8
  "license": "MIT",
9
9
  "artifacts": {
10
10
  "discord-transcript.css": {
11
- "bytes": 43020,
12
- "gzip": 8197,
13
- "brotli": 7048,
14
- "sha256": "b5a1f8688a16eada0190867aaf5c9b8de30e132380e5801e697dea64be5f91fe",
15
- "sri": "sha384-b3vsSFjrAUcGnV/4yAlCFtlCjpJXZxupcaIKnyZ+EhvhRCxZqxJAxeBj3R5gJsG1"
11
+ "bytes": 44610,
12
+ "gzip": 8657,
13
+ "brotli": 7463,
14
+ "sha256": "83632f9c5c4fe298f646e561159d415ea444aeec3bd70f0b02af4ff51b511aa4",
15
+ "sri": "sha384-OMHug7ZdAspYwo7Eg6oqYvWFHKEBgsCRkkYWub1xeFI3zo1dueveGL1kBDBF3qeP"
16
16
  },
17
17
  "discord-transcript.min.css": {
18
- "bytes": 32728,
19
- "gzip": 6107,
20
- "brotli": 5417,
21
- "sha256": "338327aaabc0a9eb9a8397ba6e9613f3afde56268301e6accf5c7241c15f5ca0",
22
- "sri": "sha384-4dM7a+maL/n18BZguAWNq6avCI/sRXkPnC9EG8PGjVsXqi3C1/wiP16212kHZPJG"
18
+ "bytes": 33437,
19
+ "gzip": 6191,
20
+ "brotli": 5501,
21
+ "sha256": "d549f913e1ed086b0aa18107b06492b7ecd905fd03281262be7022758a36a33a",
22
+ "sri": "sha384-ZwplFA3/xu47EZ0oSGTMwyi8siRbfdDRiGANX4HbKlPdbwlEjnDZjeTZz4rw9jyx"
23
+ },
24
+ "discord-transcript.short.css": {
25
+ "bytes": 40216,
26
+ "gzip": 8431,
27
+ "brotli": 7294,
28
+ "sha256": "1c30f52e9751884b478732c284217acafc89d1f89a2a5b51a0ba2a509bbaa0d6",
29
+ "sri": "sha384-fpVGKo3OEdDT14a7sBx+sK+gZHAsWnYOazyA7Rl/T5gkNyUIe13i/36PxYWTUSuA"
30
+ },
31
+ "discord-transcript.short.min.css": {
32
+ "bytes": 29082,
33
+ "gzip": 5994,
34
+ "brotli": 5316,
35
+ "sha256": "ad4274109bc4758e9599df67b7b7ede929f4c5b33b598defc09ff1cfbd69481e",
36
+ "sri": "sha384-o+TMmUarWmSsA4gonFBZ8qDLhrZEJGJkAMyTwsFheJxYEgkd9XE+DdSXMo0e6EH3"
23
37
  },
24
38
  "discord-transcript.js": {
25
- "bytes": 26563,
26
- "gzip": 7005,
27
- "brotli": 6059,
28
- "sha256": "89cf8ea4de76a7ca148c33fe4351be210803ce581a12df5a62165c2d76ee43f4",
29
- "sri": "sha384-/S9PTm09fuyq0fB86mxG46U3Fq+pmr2PqR5EW93jULA+dVUf9SDU8lhBKYfoZoLD"
39
+ "bytes": 28214,
40
+ "gzip": 7746,
41
+ "brotli": 6702,
42
+ "sha256": "5ddc8820182bb18c02a09ebdfc39596cb3d9aa7c65e6730dce6aed3df83ee96d",
43
+ "sri": "sha384-qlo/JP/7HeHHDBSlUlBHvQyk62z3UJo4xQ+hc1hcF6jQxO6sau6F8KxqnNzhv5JB"
30
44
  },
31
45
  "discord-transcript.min.js": {
32
- "bytes": 14850,
33
- "gzip": 4784,
34
- "brotli": 4238,
35
- "sha256": "12b7336fc8dff3e26550a732fcbbfaeb482aac5b718c8115f959bf465fac1c65",
36
- "sri": "sha384-OQCd1U0f3kBi9E7F65YmXxQzGXszPziD9DlYzE97z4FJP/QYdxTFxMJPXeRc+qt2"
46
+ "bytes": 15434,
47
+ "gzip": 5086,
48
+ "brotli": 4521,
49
+ "sha256": "6798044807dab994e8fbf832ac4bbfd6d511a2165e4e712be239f984e683dea9",
50
+ "sri": "sha384-aPG5pvJ6e+7rRJ6qYbneL8xBPZZP24BUxBezSvQB0tAgpeKdea6D9jllfke4JZce"
37
51
  }
38
52
  },
39
53
  "urls": {
40
54
  "css": {
41
- "jsdelivr": "https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.0.0/dist/discord-transcript.min.css",
42
- "unpkg": "https://unpkg.com/discord-transcript-ui@1.0.0/dist/discord-transcript.min.css",
43
- "github-pages": "https://x1xo.github.io/discord-transcript-ui/v1.0.0/discord-transcript.min.css",
44
- "statically": "https://cdn.statically.io/gh/x1xo/discord-transcript-ui/v1.0.0/dist/discord-transcript.min.css",
45
- "raw-githack": "https://raw.githack.com/x1xo/discord-transcript-ui/v1.0.0/dist/discord-transcript.min.css",
46
- "self-hosted": "https://cdn.example.com/discord-transcript/1.0.0/discord-transcript.min.css"
55
+ "jsdelivr": "https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/discord-transcript.min.css",
56
+ "unpkg": "https://unpkg.com/discord-transcript-ui@1.1.0/dist/discord-transcript.min.css",
57
+ "github-pages": "https://x1xo.github.io/discord-transcript-ui/v1.1.0/discord-transcript.min.css",
58
+ "statically": "https://cdn.statically.io/gh/x1xo/discord-transcript-ui/v1.1.0/dist/discord-transcript.min.css",
59
+ "raw-githack": "https://raw.githack.com/x1xo/discord-transcript-ui/v1.1.0/dist/discord-transcript.min.css",
60
+ "self-hosted": "https://cdn.example.com/discord-transcript/1.1.0/discord-transcript.min.css"
61
+ },
62
+ "cssShort": {
63
+ "jsdelivr": "https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/discord-transcript.short.min.css",
64
+ "unpkg": "https://unpkg.com/discord-transcript-ui@1.1.0/dist/discord-transcript.short.min.css",
65
+ "github-pages": "https://x1xo.github.io/discord-transcript-ui/v1.1.0/discord-transcript.short.min.css",
66
+ "statically": "https://cdn.statically.io/gh/x1xo/discord-transcript-ui/v1.1.0/dist/discord-transcript.short.min.css",
67
+ "raw-githack": "https://raw.githack.com/x1xo/discord-transcript-ui/v1.1.0/dist/discord-transcript.short.min.css",
68
+ "self-hosted": "https://cdn.example.com/discord-transcript/1.1.0/discord-transcript.short.min.css"
47
69
  },
48
70
  "js": {
49
- "jsdelivr": "https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.0.0/dist/discord-transcript.min.js",
50
- "unpkg": "https://unpkg.com/discord-transcript-ui@1.0.0/dist/discord-transcript.min.js",
51
- "github-pages": "https://x1xo.github.io/discord-transcript-ui/v1.0.0/discord-transcript.min.js",
52
- "statically": "https://cdn.statically.io/gh/x1xo/discord-transcript-ui/v1.0.0/dist/discord-transcript.min.js",
53
- "raw-githack": "https://raw.githack.com/x1xo/discord-transcript-ui/v1.0.0/dist/discord-transcript.min.js",
54
- "self-hosted": "https://cdn.example.com/discord-transcript/1.0.0/discord-transcript.min.js"
71
+ "jsdelivr": "https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/discord-transcript.min.js",
72
+ "unpkg": "https://unpkg.com/discord-transcript-ui@1.1.0/dist/discord-transcript.min.js",
73
+ "github-pages": "https://x1xo.github.io/discord-transcript-ui/v1.1.0/discord-transcript.min.js",
74
+ "statically": "https://cdn.statically.io/gh/x1xo/discord-transcript-ui/v1.1.0/dist/discord-transcript.min.js",
75
+ "raw-githack": "https://raw.githack.com/x1xo/discord-transcript-ui/v1.1.0/dist/discord-transcript.min.js",
76
+ "self-hosted": "https://cdn.example.com/discord-transcript/1.1.0/discord-transcript.min.js"
55
77
  }
56
78
  },
57
79
  "integrity": {
58
- "css": "sha384-4dM7a+maL/n18BZguAWNq6avCI/sRXkPnC9EG8PGjVsXqi3C1/wiP16212kHZPJG",
59
- "js": "sha384-OQCd1U0f3kBi9E7F65YmXxQzGXszPziD9DlYzE97z4FJP/QYdxTFxMJPXeRc+qt2"
80
+ "css": "sha384-ZwplFA3/xu47EZ0oSGTMwyi8siRbfdDRiGANX4HbKlPdbwlEjnDZjeTZz4rw9jyx",
81
+ "cssShort": "sha384-o+TMmUarWmSsA4gonFBZ8qDLhrZEJGJkAMyTwsFheJxYEgkd9XE+DdSXMo0e6EH3",
82
+ "js": "sha384-aPG5pvJ6e+7rRJ6qYbneL8xBPZZP24BUxBezSvQB0tAgpeKdea6D9jllfke4JZce"
60
83
  },
61
84
  "archivalMirrors": [
62
85
  {
@@ -67,7 +90,7 @@
67
90
  {
68
91
  "id": "wayback",
69
92
  "note": "Snapshot every published CDN URL once, right after release.",
70
- "url": "https://web.archive.org/save/https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.0.0/dist/discord-transcript.min.css"
93
+ "url": "https://web.archive.org/save/https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/discord-transcript.min.css"
71
94
  },
72
95
  {
73
96
  "id": "zenodo",
@@ -80,5 +103,5 @@
80
103
  "url": "https://ipfs.io/ipfs/{ipfsCid}"
81
104
  }
82
105
  ],
83
- "recovery": "<!--\n discord-transcript-ui v1.0.0 — asset recovery information.\n\n Keep this comment when you hand a transcript to someone else: it is enough to\n rebuild a working view even if this project is gone.\n\n Stylesheet : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.0.0/dist/discord-transcript.min.css\n sha256-338327aaabc0a9eb9a8397ba6e9613f3afde56268301e6accf5c7241c15f5ca0\n integrity=\"sha384-4dM7a+maL/n18BZguAWNq6avCI/sRXkPnC9EG8PGjVsXqi3C1/wiP16212kHZPJG\"\n Script : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.0.0/dist/discord-transcript.min.js\n sha256-12b7336fc8dff3e26550a732fcbbfaeb482aac5b718c8115f959bf465fac1c65\n integrity=\"sha384-OQCd1U0f3kBi9E7F65YmXxQzGXszPziD9DlYzE97z4FJP/QYdxTFxMJPXeRc+qt2\"\n\n Mirrors (same bytes, drop-in):\n jsdelivr https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.0.0/dist/discord-transcript.min.css\n unpkg https://unpkg.com/discord-transcript-ui@1.0.0/dist/discord-transcript.min.css\n github-pages https://x1xo.github.io/discord-transcript-ui/v1.0.0/discord-transcript.min.css\n statically https://cdn.statically.io/gh/x1xo/discord-transcript-ui/v1.0.0/dist/discord-transcript.min.css\n raw-githack https://raw.githack.com/x1xo/discord-transcript-ui/v1.0.0/dist/discord-transcript.min.css\n self-hosted https://cdn.example.com/discord-transcript/1.0.0/discord-transcript.min.css\n\n Manifest : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.0.0/dist/manifest.json\n Source : https://github.com/x1xo/discord-transcript-ui/tree/v1.0.0\n Licence : MIT\n Sizes : CSS 32728B raw / 6107B gzip · JS 14850B raw / 4784B gzip\n-->"
106
+ "recovery": "<!--\n discord-transcript-ui v1.1.0 — asset recovery information.\n\n Keep this comment when you hand a transcript to someone else: it is enough to\n rebuild a working view even if this project is gone.\n\n Stylesheet : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/discord-transcript.min.css\n sha256-d549f913e1ed086b0aa18107b06492b7ecd905fd03281262be7022758a36a33a\n integrity=\"sha384-ZwplFA3/xu47EZ0oSGTMwyi8siRbfdDRiGANX4HbKlPdbwlEjnDZjeTZz4rw9jyx\"\n Script : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/discord-transcript.min.js\n sha256-6798044807dab994e8fbf832ac4bbfd6d511a2165e4e712be239f984e683dea9\n integrity=\"sha384-aPG5pvJ6e+7rRJ6qYbneL8xBPZZP24BUxBezSvQB0tAgpeKdea6D9jllfke4JZce\"\n\n Mirrors (same bytes, drop-in):\n jsdelivr https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/discord-transcript.min.css\n unpkg https://unpkg.com/discord-transcript-ui@1.1.0/dist/discord-transcript.min.css\n github-pages https://x1xo.github.io/discord-transcript-ui/v1.1.0/discord-transcript.min.css\n statically https://cdn.statically.io/gh/x1xo/discord-transcript-ui/v1.1.0/dist/discord-transcript.min.css\n raw-githack https://raw.githack.com/x1xo/discord-transcript-ui/v1.1.0/dist/discord-transcript.min.css\n self-hosted https://cdn.example.com/discord-transcript/1.1.0/discord-transcript.min.css\n\n Manifest : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/manifest.json\n Source : https://github.com/x1xo/discord-transcript-ui/tree/v1.1.0\n Licence : MIT\n Sizes : CSS 33437B raw / 6191B gzip · JS 15434B raw / 5086B gzip\n-->"
84
107
  }
@@ -1,26 +1,26 @@
1
1
  <!--
2
- discord-transcript-ui v1.0.0 — asset recovery information.
2
+ discord-transcript-ui v1.1.0 — asset recovery information.
3
3
 
4
4
  Keep this comment when you hand a transcript to someone else: it is enough to
5
5
  rebuild a working view even if this project is gone.
6
6
 
7
- Stylesheet : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.0.0/dist/discord-transcript.min.css
8
- sha256-338327aaabc0a9eb9a8397ba6e9613f3afde56268301e6accf5c7241c15f5ca0
9
- integrity="sha384-4dM7a+maL/n18BZguAWNq6avCI/sRXkPnC9EG8PGjVsXqi3C1/wiP16212kHZPJG"
10
- Script : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.0.0/dist/discord-transcript.min.js
11
- sha256-12b7336fc8dff3e26550a732fcbbfaeb482aac5b718c8115f959bf465fac1c65
12
- integrity="sha384-OQCd1U0f3kBi9E7F65YmXxQzGXszPziD9DlYzE97z4FJP/QYdxTFxMJPXeRc+qt2"
7
+ Stylesheet : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/discord-transcript.min.css
8
+ sha256-d549f913e1ed086b0aa18107b06492b7ecd905fd03281262be7022758a36a33a
9
+ integrity="sha384-ZwplFA3/xu47EZ0oSGTMwyi8siRbfdDRiGANX4HbKlPdbwlEjnDZjeTZz4rw9jyx"
10
+ Script : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/discord-transcript.min.js
11
+ sha256-6798044807dab994e8fbf832ac4bbfd6d511a2165e4e712be239f984e683dea9
12
+ integrity="sha384-aPG5pvJ6e+7rRJ6qYbneL8xBPZZP24BUxBezSvQB0tAgpeKdea6D9jllfke4JZce"
13
13
 
14
14
  Mirrors (same bytes, drop-in):
15
- jsdelivr https://cdn.jsdelivr.net/npm/discord-transc ript-ui@1.0.0/dist/discord-transcript.min.css
16
- unpkg https://unpkg.com/discord-transcript-ui@1.0.0/dist/discord-transcript.min.css
17
- github-pages https://x1xo.github.io/discord-transcript-ui/v1.0.0/discord-transcript.min.css
18
- statically https://cdn.statically.io/gh/x1xo/discord-transcript-ui/v1.0.0/dist/discord-transcript.min.css
19
- raw-githack https://raw.githack.com/x1xo/discord-transcript-ui/v1.0.0/dist/discord-transcript.min.css
20
- self-hosted https://cdn.example.com/discord-transcript/1.0.0/discord-transcript.min.css
15
+ jsdelivr https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/discord-transcript.min.css
16
+ unpkg https://unpkg.com/discord-transcript-ui@1.1.0/dist/discord-transcript.min.css
17
+ github-pages https://x1xo.github.io/discord-transcript-ui/v1.1.0/discord-transcript.min.css
18
+ statically https://cdn.statically.io/gh/x1xo/discord-transcript-ui/v1.1.0/dist/discord-transcript.min.css
19
+ raw-githack https://raw.githack.com/x1xo/discord-transcript-ui/v1.1.0/dist/discord-transcript.min.css
20
+ self-hosted https://cdn.example.com/discord-transcript/1.1.0/discord-transcript.min.css
21
21
 
22
- Manifest : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.0.0/dist/manifest.json
23
- Source : https://github.com/x1xo/discord-transcript-ui/tree/v1.0.0
22
+ Manifest : https://cdn.jsdelivr.net/npm/discord-transcript-ui@1.1.0/dist/manifest.json
23
+ Source : https://github.com/x1xo/discord-transcript-ui/tree/v1.1.0
24
24
  Licence : MIT
25
- Sizes : CSS 32728B raw / 6107B gzip · JS 14850B raw / 4784B gzip
25
+ Sizes : CSS 33437B raw / 6191B gzip · JS 15434B raw / 5086B gzip
26
26
  -->
@@ -280,9 +280,14 @@ discord-messages[data-theme='dark'] {
280
280
  text-decoration: line-through;
281
281
  }
282
282
 
283
+ /* Discord's "-# small print" (subtext). Discord renders it as <small> at
284
+ .875rem in the subtle text colour, on its own line; it is not a subscript.
285
+ Value from Discord's live CSS: docs/DESIGN-TOKENS.md, "Small / <small>". */
283
286
  :where(discord-subscript) {
284
- font-size: 0.8125rem;
285
- vertical-align: sub;
287
+ display: block;
288
+ color: var(--dt-text-subtle);
289
+ font-size: 0.875rem;
290
+ line-height: 1.20313rem;
286
291
  }
287
292
 
288
293
  /* Markdown headings */
@@ -544,9 +549,10 @@ discord-message:not([data-dt-ready])[author='']::before {
544
549
  display: inline-flex;
545
550
  align-items: center;
546
551
  justify-content: center;
547
- height: 15px;
548
- padding: 0 4px;
549
- border-radius: 3px;
552
+ gap: 3px;
553
+ height: 16px;
554
+ padding: 0 5px;
555
+ border-radius: 4px;
550
556
  background: var(--dt-brand);
551
557
  color: var(--dt-text-on-brand);
552
558
  font-size: 0.625rem;
@@ -556,15 +562,17 @@ discord-message:not([data-dt-ready])[author='']::before {
556
562
  text-transform: uppercase;
557
563
  }
558
564
 
565
+ /* Verified bot / application tag: a slightly rounded blurple rectangle reading
566
+ "✓ APP" (the tick is drawn here, the text comes from the script so that it is
567
+ real, readable text rather than generated content). */
559
568
  .dt-badge--verified {
560
- width: 15px;
561
- padding: 0;
562
- border-radius: 50%;
569
+ padding: 0 5px 0 4px;
563
570
  }
564
571
 
565
- .dt-badge--verified::after {
572
+ .dt-badge--verified::before {
566
573
  content: '\2713';
567
- font-size: 9px;
574
+ font-size: 0.75rem;
575
+ line-height: 1;
568
576
  }
569
577
 
570
578
  .dt-badge--server {
@@ -731,7 +739,12 @@ discord-author-info:not([data-dt-ready])::before {
731
739
  content: attr(author);
732
740
  }
733
741
 
734
- :where(discord-author-info[bot], discord-author-info[server], discord-author-info[official-app], discord-author-info[op])
742
+ :where(
743
+ discord-author-info[bot],
744
+ discord-author-info[server],
745
+ discord-author-info[official-app],
746
+ discord-author-info[op]
747
+ )
735
748
  ::after {
736
749
  margin-left: 4px;
737
750
  padding: 0 4px;
@@ -743,8 +756,14 @@ discord-author-info:not([data-dt-ready])::before {
743
756
  line-height: 15px;
744
757
  }
745
758
 
759
+ /* Bots are tagged "APP". Verified bots add the checkmark, so they read "✓ APP"
760
+ (equal :where() specificity, so the later rule wins for verified bots). */
746
761
  :where(discord-author-info[bot])::after {
747
- content: 'BOT';
762
+ content: 'APP';
763
+ }
764
+
765
+ :where(discord-author-info[bot][verified])::after {
766
+ content: '\2713\00a0APP';
748
767
  }
749
768
 
750
769
  :where(discord-author-info[server])::after {
@@ -1139,6 +1158,19 @@ discord-reply[deleted]::before {
1139
1158
  color: var(--dt-text-muted);
1140
1159
  }
1141
1160
 
1161
+ /* A reply preview sits above the author row (Discord's layout): the reply takes
1162
+ the first grid row, so the avatar and the author name share the second. */
1163
+ .dt-msg--has-reply > :where(discord-reply),
1164
+ .dt-msg--has-reply > :where(discord-command) {
1165
+ grid-column: 2;
1166
+ grid-row: 1;
1167
+ }
1168
+
1169
+ .dt-msg--has-reply > .dt-avatar,
1170
+ .dt-msg--has-reply > .dt-content {
1171
+ grid-row: 2;
1172
+ }
1173
+
1142
1174
  /* Curved connector, drawn only once the reply sits in the content column. */
1143
1175
  discord-message[data-dt-ready] :where(discord-reply)::after {
1144
1176
  content: '';
@@ -1698,6 +1730,8 @@ discord-reaction:not([data-dt-ready])::before {
1698
1730
  }
1699
1731
 
1700
1732
  discord-reaction[emoji^='http']:not([data-dt-ready])::before,
1733
+ discord-reaction[emoji^='data:']:not([data-dt-ready])::before,
1734
+ discord-reaction[emoji^='blob:']:not([data-dt-ready])::before,
1701
1735
  discord-reaction[emoji^='/']:not([data-dt-ready])::before,
1702
1736
  discord-reaction[emoji^='./']:not([data-dt-ready])::before,
1703
1737
  discord-reaction:not([emoji]):not([data-dt-ready])::before {
@@ -1719,8 +1753,10 @@ discord-reaction[count='1']:not([data-dt-ready])::after {
1719
1753
  :where(discord-reaction) img,
1720
1754
  .dt-reaction-emoji {
1721
1755
  display: inline-block;
1756
+ flex: none;
1722
1757
  width: 1rem;
1723
1758
  height: 1rem;
1759
+ overflow: hidden;
1724
1760
  object-fit: contain;
1725
1761
  vertical-align: middle;
1726
1762
  }
@@ -1810,17 +1846,32 @@ discord-reaction[count='1']:not([data-dt-ready])::after {
1810
1846
  display: inline-flex;
1811
1847
  align-items: center;
1812
1848
  justify-content: center;
1813
- width: 15px;
1814
- height: 15px;
1815
- border-radius: 50%;
1849
+ gap: 3px;
1850
+ height: 16px;
1851
+ padding: 0 5px 0 4px;
1852
+ border-radius: 4px;
1816
1853
  background: var(--dt-brand);
1817
1854
  color: var(--dt-text-on-brand);
1818
- font-size: 9px;
1855
+ font-size: 0.625rem;
1856
+ font-weight: 600;
1857
+ line-height: 1;
1858
+ letter-spacing: 0.02em;
1859
+ text-transform: uppercase;
1819
1860
  vertical-align: -2px;
1820
1861
  }
1821
1862
 
1822
- :where(discord-verified-author-tag)::after {
1863
+ :where(discord-verified-author-tag)::before {
1823
1864
  content: '\2713';
1865
+ font-size: 0.75rem;
1866
+ line-height: 1;
1867
+ }
1868
+
1869
+ :where(discord-verified-author-tag:not([verified]))::before {
1870
+ content: none;
1871
+ }
1872
+
1873
+ :where(discord-verified-author-tag)::after {
1874
+ content: 'APP';
1824
1875
  }
1825
1876
 
1826
1877
  /* ==========================================================================
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * Config (define it any time before DOMContentLoaded):
11
11
  * window.$discordMessage = {
12
- * profiles: { skyra: { author: 'Skyra', avatar: 'https://…', roleColor: '#ff0000', bot: true } },
12
+ * profiles: { miona: { author: 'Miona', avatar: 'https://…', roleColor: '#ff0000', bot: true } },
13
13
  * avatars: { default: 'blue', blue: 'https://cdn.discordapp.com/embed/avatars/0.png' }
14
14
  * };
15
15
  * window.discordTranscript = { groupWindow: 7, locale: 'en-US', observe: true };
@@ -49,6 +49,22 @@
49
49
  var relativeTimers = [];
50
50
  var relativeElements = [];
51
51
 
52
+ /* Tag names come in two vocabularies: the readable discord-* default, and the
53
+ compact codes an opt-in renderer emits (see build/short-tags.mjs). Both are
54
+ matched, so this script works with either stylesheet. */
55
+ var SHORT_TAGS = {
56
+ messages: 'dms', message: 'dm', reply: 'drp', time: 'dti', spoiler: 'dsp',
57
+ embed: 'de', 'embed-footer': 'defo', 'file-attachment': 'dfil',
58
+ 'image-attachment': 'dimg', 'video-attachment': 'dvid', 'audio-attachment': 'daud',
59
+ reaction: 'dr', pre: 'dp', code: 'dc', 'custom-emoji': 'demo',
60
+ 'attachments': 'dats', thread: 'dth', 'author-info': 'dai'
61
+ };
62
+
63
+ function tag(name) {
64
+ var short = SHORT_TAGS[name];
65
+ return short ? ':is(discord-' + name + ',' + short + ')' : 'discord-' + name;
66
+ }
67
+
52
68
  /* ---------------------------------------------------------------- config */
53
69
 
54
70
  function config() {
@@ -239,9 +255,11 @@
239
255
 
240
256
  function badgeRow(identity) {
241
257
  var row = make('span', 'dt-badges');
258
+ /* Bots are tagged "APP"; verified bots additionally get the checkmark,
259
+ which is drawn by CSS (so the tag reads "✓ APP"). */
242
260
  if (identity.bot) {
243
- if (identity.verified) row.appendChild(make('span', 'dt-badge dt-badge--verified'));
244
- else row.appendChild(make('span', 'dt-badge', 'BOT'));
261
+ var botTag = identity.verified ? 'dt-badge dt-badge--verified' : 'dt-badge';
262
+ row.appendChild(make('span', botTag, 'APP'));
245
263
  } else if (identity.server) {
246
264
  row.appendChild(make('span', 'dt-badge dt-badge--server', 'SERVER'));
247
265
  } else if (identity.official) {
@@ -259,14 +277,29 @@
259
277
  var identity = identityOf(element);
260
278
  var stamp = parseStamp(element.getAttribute('timestamp'));
261
279
  var body = make('div', 'dt-body');
280
+ var replies = [];
262
281
 
263
282
  /* Optional parser-supplied header escapes the generated one. */
264
- var suppliedHeader = element.querySelector(':scope > discord-author-info, :scope > discord-message-header');
283
+ var suppliedHeader = element.querySelector(':scope > ' + tag('author-info') + ', :scope > discord-message-header');
265
284
  if (suppliedHeader) suppliedHeader.remove();
266
285
 
267
- while (element.firstChild) body.appendChild(element.firstChild);
286
+ /* Reply previews are lifted out of the body: Discord draws them above the
287
+ author row, with the avatar level with the author name. */
288
+ while (element.firstChild) {
289
+ var child = element.firstChild;
290
+ if (child.nodeType === 1 && (child.tagName === 'DISCORD-REPLY' || child.tagName === 'DISCORD-COMMAND')) {
291
+ replies.push(child);
292
+ element.removeChild(child);
293
+ continue;
294
+ }
295
+ body.appendChild(child);
296
+ }
268
297
 
269
298
  var wrap = make('div', 'dt-msg');
299
+ if (replies.length) {
300
+ wrap.classList.add('dt-msg--has-reply');
301
+ for (var replyIndex = 0; replyIndex < replies.length; replyIndex++) wrap.appendChild(replies[replyIndex]);
302
+ }
270
303
  wrap.appendChild(avatarNode(identity, 'dt-avatar'));
271
304
 
272
305
  var content = make('div', 'dt-content');
@@ -304,7 +337,7 @@
304
337
  function isJumbo(body) {
305
338
  var text = (body.textContent || '').replace(/\s+/g, '');
306
339
  if (text.length > 0) return false;
307
- var emoji = body.querySelectorAll('discord-custom-emoji, img.emoji');
340
+ var emoji = body.querySelectorAll(tag('custom-emoji') + ', img.emoji');
308
341
  return emoji.length > 0 && emoji.length <= 6;
309
342
  }
310
343
 
@@ -394,7 +427,7 @@
394
427
  }
395
428
 
396
429
  function upgradeSpoilers(root) {
397
- var spoilers = root.querySelectorAll('discord-spoiler:not([data-dt-ready])');
430
+ var spoilers = root.querySelectorAll(tag('spoiler') + ':not([data-dt-ready])');
398
431
  for (var i = 0; i < spoilers.length; i++) {
399
432
  var spoiler = spoilers[i];
400
433
  spoiler.setAttribute('data-dt-ready', '');
@@ -404,7 +437,7 @@
404
437
  }
405
438
 
406
439
  var media = root.querySelectorAll(
407
- 'discord-image-attachment[spoiler], discord-video-attachment[spoiler]'
440
+ tag('image-attachment') + '[spoiler], ' + tag('video-attachment') + '[spoiler]'
408
441
  );
409
442
  for (var j = 0; j < media.length; j++) {
410
443
  if (media[j].querySelector(':scope > .dt-spoiler-overlay')) continue;
@@ -422,8 +455,10 @@
422
455
  function upgradeReactions(element) {
423
456
  if (has(element, 'data-dt-ready')) return;
424
457
  var emoji = element.getAttribute('emoji');
425
- var isUrl = emoji && /^(https?:|\/|\.\/)/.test(emoji);
426
- if (isUrl) {
458
+ /* Any of these is an image source rather than a unicode character. Data
459
+ URIs matter: inline SVG/PNG emoji must never be emitted as visible text. */
460
+ var isImage = emoji && /^(https?:|data:|blob:|\/|\.\/)/i.test(emoji);
461
+ if (isImage) {
427
462
  var img = make('img', 'dt-reaction-emoji');
428
463
  img.src = emoji;
429
464
  img.alt = element.getAttribute('name') || '';
@@ -539,7 +574,7 @@
539
574
  img.decoding = 'async';
540
575
  media.appendChild(img);
541
576
  }
542
- var footer = content.querySelector(':scope > discord-embed-footer');
577
+ var footer = content.querySelector(':scope > ' + tag('embed-footer'));
543
578
  content.insertBefore(media, footer || null);
544
579
  }
545
580
 
@@ -619,7 +654,7 @@
619
654
 
620
655
  function lazyImages(root) {
621
656
  var images = root.querySelectorAll(
622
- 'discord-attachments img:not([loading]), discord-embed img:not([loading]), discord-embed video, discord-thread img'
657
+ tag('attachments') + ' img:not([loading]), ' + tag('embed') + ' img:not([loading]), ' + tag('embed') + ' video, ' + tag('thread') + ' img'
623
658
  );
624
659
  for (var i = 0; i < images.length; i++) images[i].setAttribute('loading', 'lazy');
625
660
  }
@@ -629,40 +664,40 @@
629
664
  function upgrade(root) {
630
665
  if (!root || !root.querySelectorAll) return;
631
666
 
632
- var messages = root.querySelectorAll('discord-message:not([data-dt-ready])');
667
+ var messages = root.querySelectorAll(tag('message') + ':not([data-dt-ready])');
633
668
  for (var i = 0; i < messages.length; i++) upgradeMessage(messages[i]);
634
669
 
635
- var lists = root.querySelectorAll('discord-messages');
670
+ var lists = root.querySelectorAll(tag('messages'));
636
671
  for (var j = 0; j < lists.length; j++) {
637
- var grouped = lists[j].querySelectorAll(':scope > discord-message');
672
+ var grouped = lists[j].querySelectorAll(':scope > ' + tag('message'));
638
673
  if (grouped.length) applyGrouping(grouped);
639
674
  }
640
675
 
641
- var replies = root.querySelectorAll('discord-reply:not([data-dt-ready])');
676
+ var replies = root.querySelectorAll(tag('reply') + ':not([data-dt-ready])');
642
677
  for (var k = 0; k < replies.length; k++) upgradeReply(replies[k]);
643
678
 
644
- var times = root.querySelectorAll('discord-time:not([data-dt-ready])');
679
+ var times = root.querySelectorAll(tag('time') + ':not([data-dt-ready])');
645
680
  for (var m = 0; m < times.length; m++) upgradeTime(times[m]);
646
681
 
647
- var embeds = root.querySelectorAll('discord-embed:not([data-dt-ready])');
682
+ var embeds = root.querySelectorAll(tag('embed') + ':not([data-dt-ready])');
648
683
  for (var n = 0; n < embeds.length; n++) upgradeEmbed(embeds[n]);
649
684
 
650
- var files = root.querySelectorAll('discord-file-attachment:not([data-dt-ready])');
685
+ var files = root.querySelectorAll(tag('file-attachment') + ':not([data-dt-ready])');
651
686
  for (var o = 0; o < files.length; o++) upgradeFile(files[o]);
652
687
 
653
- var images = root.querySelectorAll('discord-image-attachment:not([data-dt-ready])');
688
+ var images = root.querySelectorAll(tag('image-attachment') + ':not([data-dt-ready])');
654
689
  for (var p = 0; p < images.length; p++) upgradeImage(images[p]);
655
690
 
656
- var videos = root.querySelectorAll('discord-video-attachment:not([data-dt-ready])');
691
+ var videos = root.querySelectorAll(tag('video-attachment') + ':not([data-dt-ready])');
657
692
  for (var q = 0; q < videos.length; q++) upgradeMedia(videos[q], 'video');
658
693
 
659
- var audios = root.querySelectorAll('discord-audio-attachment:not([data-dt-ready])');
694
+ var audios = root.querySelectorAll(tag('audio-attachment') + ':not([data-dt-ready])');
660
695
  for (var r = 0; r < audios.length; r++) upgradeMedia(audios[r], 'audio');
661
696
 
662
- var reactions = root.querySelectorAll('discord-reaction:not([data-dt-ready])');
697
+ var reactions = root.querySelectorAll(tag('reaction') + ':not([data-dt-ready])');
663
698
  for (var s = 0; s < reactions.length; s++) upgradeReactions(reactions[s]);
664
699
 
665
- var codes = root.querySelectorAll('discord-pre:not([data-dt-ready])');
700
+ var codes = root.querySelectorAll(tag('pre') + ':not([data-dt-ready])');
666
701
  for (var t = 0; t < codes.length; t++) upgradeCode(codes[t]);
667
702
 
668
703
  upgradeSpoilers(root);
@@ -672,7 +707,7 @@
672
707
 
673
708
  /** `light-theme` on the container mirrors to data-theme for the CSS tokens. */
674
709
  function applyThemeFallbacks(root) {
675
- var lists = root.querySelectorAll('discord-messages');
710
+ var lists = root.querySelectorAll(tag('messages'));
676
711
  for (var i = 0; i < lists.length; i++) {
677
712
  if (lists[i].hasAttribute('light-theme') && !lists[i].hasAttribute('data-theme')) {
678
713
  lists[i].setAttribute('data-theme', 'light');
@@ -714,7 +749,7 @@
714
749
  var copy = target.closest('.dt-copy');
715
750
  if (copy && copy.parentElement && navigator.clipboard) {
716
751
  var pre = copy.parentElement;
717
- var text = pre.querySelector('discord-code, pre, code');
752
+ var text = pre.querySelector(tag('code') + ', pre, code');
718
753
  navigator.clipboard.writeText((text || pre).textContent).then(function () {
719
754
  copy.textContent = 'Copied';
720
755
  setTimeout(function () {