diff --git a/setup/shortcuts.ts b/setup/shortcuts.ts new file mode 100644 index 0000000..2f7c7f7 --- /dev/null +++ b/setup/shortcuts.ts @@ -0,0 +1,38 @@ +import type { NavOperations, ShortcutOptions } from '@slidev/types' +import { defineShortcutsSetup } from '@slidev/types' + +export default defineShortcutsSetup((nav: NavOperations, base: ShortcutOptions[]) => { + return [ + ...base, // keep the existing shortcuts + { + key: 'enter', + fn: () => nav.next(), + autoRepeat: true, + }, + { + key: 'j', + fn: () => nav.next(), + autoRepeat: true, + }, + { + key: 'l', + fn: () => nav.next(), + autoRepeat: true, + }, + { + key: 'backspace', + fn: () => nav.prev(), + autoRepeat: true, + }, + { + key: 'k', + fn: () => nav.prev(), + autoRepeat: true, + }, + { + key: 'h', + fn: () => nav.prev(), + autoRepeat: true, + }, + ] +}) diff --git a/topics/primary-mediastinal-b-cell-2023/components/ImageStack.js b/topics/primary-mediastinal-b-cell-2023/components/ImageStack.js new file mode 100644 index 0000000..27fc8d5 --- /dev/null +++ b/topics/primary-mediastinal-b-cell-2023/components/ImageStack.js @@ -0,0 +1,119 @@ +// https://codepen.io/RemoteDoc/pen/KbKQOB + +function ImageStack (options) { + + var self = this; + + self.img_array = options.images; + + self.stack = document.createElement('div'); + self.stack.style.overflow = 'auto'; + self.stack.style.maxWidth = '100%'; + self.stack.style.height = options.height; + self.stack.style.width = options.width; + self.stack.style.backgroundSize = 'cover' + self.stack.style.position = 'relative'; + + var typeRegex = /(\D+)/ + var sizeType = options.height.match(typeRegex)[0] + + var numberRegex = /(\d+)/ + self.height_number = Number( options.height.match(numberRegex)[0] ) + + self.wrapper = document.createElement('div'); + + for (var i = 0; i < self.img_array.length; i++) { + + var image = document.createElement('img'); + image.src = self.img_array[i]; + + image.style.display = 'none'; + image.style.position = 'absolute'; + image.style.width = options.width; + image.style.height = options.height; + image.style.top = 0; + image.style.left = 0; + image.dataset.iid = i; + + self.wrapper.appendChild(image); + + } + + self.image_elements = self.wrapper.querySelectorAll('img'); + + self.scrollobject = document.createElement('div'); + self.scrollobject.style.width = '100%'; + self.scrollobject.style.position = 'absolute'; + self.scrollobject.style.zIndex = '2'; + self.img_count = (self.img_array.length > 15) ? self.img_array.length : 15; + self.scrollobject_height = Math.floor( 0.1 * self.img_count * self.height_number ); + + self.scrollobject.style.height = self.scrollobject_height + sizeType; + + self.scrollUpdate = function (e) { + + self.height_number = self.stack.getBoundingClientRect().height + self.scrollobject_height = Math.floor( 0.1 * self.img_count * self.height_number ); + + var sT = self.stack.scrollTop + var hn05 = self.img_array.length - 1 + var hh = (self.scrollobject_height - self.height_number) / hn05 + scrollval = Math.floor(sT / (hh)) + + self.currentimg = self.image_elements[scrollval].src + + self.stack.style.backgroundImage = 'url(' + self.currentimg + ')'; + + } + + self.stack.addEventListener('scroll', self.scrollUpdate); + + self.currentimg = self.image_elements[0].src + self.stack.style.backgroundImage = 'url(' + self.currentimg + ')'; + + /* + + window.addEventListener('resize', function () { + var stackRect = self.stack.getBoundingClientRect() + + console.log(stackRect) + + self.height_number = stackRect.height + self.scrollobject_height = Math.floor( 0.1 * self.img_array.length * self.height_number ); + + self.stack.style.width = stackRect.width + 'px' + self.stack.style.eight = stackRect.width + 'px' + }) + + */ + + self.stack.appendChild(self.wrapper); + self.stack.appendChild(self.scrollobject); + + return self.stack; + +} + +export default ImageStack + +/* + +The function ImageStack returns a Element Node, which can be appended to an already existing element or modified, however someone wants to change it. + +The parameters should have to be a height of the element, the width of the elment, and a list (Array) to all the images. + +*/ + +// +// + +// diff --git a/topics/primary-mediastinal-b-cell-2023/public/images/pmbcl-cardiotox.png b/topics/primary-mediastinal-b-cell-2023/public/images/pmbcl-cardiotox.png new file mode 100644 index 0000000..69b8653 Binary files /dev/null and b/topics/primary-mediastinal-b-cell-2023/public/images/pmbcl-cardiotox.png differ diff --git a/topics/primary-mediastinal-b-cell-2023/public/images/pmbcl-da-r-epoch-survival.png b/topics/primary-mediastinal-b-cell-2023/public/images/pmbcl-da-r-epoch-survival.png new file mode 100644 index 0000000..31b325a Binary files /dev/null and b/topics/primary-mediastinal-b-cell-2023/public/images/pmbcl-da-r-epoch-survival.png differ diff --git a/topics/primary-mediastinal-b-cell-2023/public/images/pmbcl-pet-ppv.png b/topics/primary-mediastinal-b-cell-2023/public/images/pmbcl-pet-ppv.png new file mode 100644 index 0000000..172c295 Binary files /dev/null and b/topics/primary-mediastinal-b-cell-2023/public/images/pmbcl-pet-ppv.png differ diff --git a/topics/primary-mediastinal-b-cell-2023/setup/shortcuts.ts b/topics/primary-mediastinal-b-cell-2023/setup/shortcuts.ts new file mode 100644 index 0000000..cfc1460 --- /dev/null +++ b/topics/primary-mediastinal-b-cell-2023/setup/shortcuts.ts @@ -0,0 +1,38 @@ +import type { NavOperations, ShortcutOptions } from '@slidev/types' +import { defineShortcutsSetup } from '@slidev/types' + +export default defineShortcutsSetup((nav: NavOperations, base: ShortcutOptions[]) => { + return [ + ...base, // keep the existing shortcuts + // { + // key: 'enter', + // fn: () => nav.next(), # none of this seems to work, idk + // autoRepeat: true, + // }, + // { + // key: 'j', + // fn: () => nav.next(), + // autoRepeat: true, + // }, + // { + // key: 'l', + // fn: () => nav.next(), + // autoRepeat: true, + // }, + // { + // key: 'backspace', + // fn: () => nav.prev(), + // autoRepeat: true, + // }, + // { + // key: 'k', + // fn: () => nav.prev(), + // autoRepeat: true, + // }, + // { + // key: 'h', + // fn: () => nav.prev(), + // autoRepeat: true, + // }, + ] +}) diff --git a/topics/primary-mediastinal-b-cell-2023/slides.md b/topics/primary-mediastinal-b-cell-2023/slides.md index 0d858f4..af21077 100644 --- a/topics/primary-mediastinal-b-cell-2023/slides.md +++ b/topics/primary-mediastinal-b-cell-2023/slides.md @@ -13,81 +13,109 @@ title: Primary Mediastinal B-Cell Lymphoma info: | # Primary Mediastinal B-Cell Lymphoma Case Conference 2023-12-15, [Beau Hilton](https://www.beauhilton.com) - --- # Primary Mediastinal B-Cell Lymphoma --- -# Copyable things +# Presentation + +35M, athlete, no known medical problems. - +Working in the crawl space under his house, developed progressive and eventually severe L arm pain and swelling. -Footnotable.1 +Went to local ED: LUE DVT, put on rivaroxaban. CT scan same day had ?supraclav nodule, o/p f/u recommended. - - Footnote - +Progressive dyspnea, facial plethora. + +Presented to VA ED. CT: ++mediastinal mass w locoregional LAD. Radiographic and symptomatic SVC syndrome. + +Core bx prelim read: mostly fibrotic tissue. Sx improved w supportie care, d/c home. + +Day after d/c, bx returned: large B-cell lymphoma. +Primary team contacted him w prelim dx, he was feeling relatively well so deferred readmission to o/p appt. + + --- -# Set up js +# Outpatient visit + + + +HR 130s, plethoric, dyspneic, but able to get around w/o assistance and speak in complete sentences. + +Discussed DLBCL vs PMBCL, possibility of cure in either case, recommended admission for expedited w/u and tx start. -Don't forget to add the entry to `topics.js` + + +--- -```js {1,5-9} -import <> from "./<>/assets/logo.svg?url"; -import Octopus from "./template/assets/logo.svg?url"; +# CT + + + + + + + +- ![img](https://prod-images-static.radiopaedia.org/images/307911/5a68d27fe27d019fd6ba86f7847fe7_big_gallery.jpg) +- ![img](https://prod-images-static.radiopaedia.org/images/307912/3f8366bb1b40f6b0c20b80299549fc_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307913/a676306c71fffbb07ae4065eb363f8_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307914/3d4c35c6c4a0d0f2c65c6cd89d8ca6_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307915/32ca2f266135f16c237af52af32bf7_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307916/a15c4faa7d71b55847c1e4b16cefe8_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307917/63568c692e403123a8679c2225a89c_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307918/b59d456c09c7a6d764297a6c3037d2_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307920/5d10c4623cfec36554f9e61f3bba4e_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307921/9c1e5c9df06fcb9030b22a834bb621_big_gallery.jpg) +- ![img](https://prod-images-static.radiopaedia.org/images/307923/680847aa3ed734c9aa9bb2e5b7b58b_big_gallery.jpg) -export default [ - { - title: '<>', - logo: <>, - route: '/<>/', - }, - { - title: 'template', - logo: Octopus, - route: '/template/', - }, -].sort((a,b) => (a.title < b.title) ? -1 : ((a.title > b.title) ? 1 : 0)) -``` + + + --- -# Set up package.json +# First admission -`package.json` + -`<>` goes in *4* places below. +Contacted thoracic team for mediastinoscopy, accommodated same-day. -```json {4-5} -{ - "scripts": { - "dev": "slidev", - "build": "slidev build --base /<>/ --out ../../dist/<>", - "export": "slidev export --output ../../dist/<>/<>.pdf" - } -} +Mostly fibrotic tissue, rare large B-cells. -``` +"Chopping through wood" ---- +Wrote for R-EPOCH to start next day. -# Case presentation +Nursing/pharmacy error: G-CSF released that night. \*\*\* might leave this out -Once upon a time... + --- -# Case presentation +# Subsequent admissions -Exam notable for ... +- DA-R-EPOCH (dose adjustments list out here) +- Scan results @@ -95,6 +123,15 @@ Exam notable for ... # Questions +- How common is it, who gets it, and what is the general prognosis? +- What is the typical presentation? +- What are the key parts of the workup? +- How common are nondiagnostic biopsies? +- What are the key parts of treatment? +- What is the role of radiotherapy? +- How should we approach post-treatment surveillance? +- What are the long-term adverse effects of surviving therapy? + How.1 @@ -102,25 +139,135 @@ How.1 --- -layout: figure-side -figureFootnoteNumber: 1 -figureUrl: http://placekitten.com/200/300 + +# Epidemiology + --- +# S/sx prevalence at presentation (~%) -# Epidemiology - + + -- errbody got it + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + +
Tumor size ≥10cm1 60
Clinical SVC syndrome1 55
Radiographic SVC compromise1 80
Pleural effusion2 50
VTE3 35
B symptoms4 30-50
- Footnote + Cancer 1988 + NEJM 2013 + Thrombosis Research 2010 + Annals of Oncology 2006 + + + + +--- + +# Selected clinicopathological features (~%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bone marrow involvement1 1-5
CNS involvement2 5-10
Marked fibrosis3 25
+ + + Frontiers in Oncology 2021 + JCO 1999 + Am J Surg Pathol 1996 + + --- # Prognosis @@ -143,13 +290,16 @@ figureUrl: http://placekitten.com/200/300 # Management --- + layout: index indexEntries: - - { title: "HemOnc.org entry", uri: "https://hemonc.org" } - - { title: "NCCN Guidelines", uri: "https://www.nccn.org/professionals/physician_gls" } - - { title: "PathologyOutline", uri: "https://www.pathologyoutlines.com" } - - { title: "", uri: "" } -indexRedirectType: external + +- { title: "HemOnc.org entry", uri: "https://hemonc.org" } +- { title: "NCCN Guidelines", uri: "https://www.nccn.org/professionals/physician_gls" } +- { title: "PathologyOutline", uri: "https://www.pathologyoutlines.com" } +- { title: "", uri: "" } + indexRedirectType: external + --- # Resources diff --git a/topics/template/slides.md b/topics/template/slides.md index 155d84a..875328d 100644 --- a/topics/template/slides.md +++ b/topics/template/slides.md @@ -2,9 +2,9 @@ theme: academic layout: cover class: text-white -coverAuthor: beau hilton +coverAuthor: beau hilton coverAuthorUrl: https://www.beauhilton.com -coverDate: "2023-xx-xx" +coverDate: "2024-xx-xx" themeConfig: paginationX: r paginationY: t @@ -12,7 +12,7 @@ themeConfig: title: template! info: | # Template - Case Conference 2023-xx-xx, [Beau Hilton](https://www.beauhilton.com) + Case Conference 2024-xx-xx, [Beau Hilton](https://www.beauhilton.com) --- @@ -34,10 +34,22 @@ Footnotable.1 --- +# Copy the template folder + + + + +```sh +cp -r template <> +``` + +--- + # Set up js Don't forget to add the entry to `topics.js` + ```js {1,5-9} import <> from "./<>/assets/logo.svg?url"; import Octopus from "./template/assets/logo.svg?url"; @@ -93,6 +105,41 @@ Exam notable for ... --- +# CT + + + + + + + +- ![img](https://prod-images-static.radiopaedia.org/images/307912/3f8366bb1b40f6b0c20b80299549fc_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307913/a676306c71fffbb07ae4065eb363f8_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307914/3d4c35c6c4a0d0f2c65c6cd89d8ca6_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307915/32ca2f266135f16c237af52af32bf7_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307916/a15c4faa7d71b55847c1e4b16cefe8_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307917/63568c692e403123a8679c2225a89c_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307918/b59d456c09c7a6d764297a6c3037d2_big_gallery.jpg), +- ![img](https://prod-images-static.radiopaedia.org/images/307920/5d10c4623cfec36554f9e61f3bba4e_big_gallery.jpg), + + + + + +--- + # Questions How.1 @@ -158,16 +205,16 @@ indexRedirectType: external # Bibliography -Use HTML export from Zotero. +Use HTML export from Zotero. It's great. - R-click on the collection name (or highlight all the citations you want) - "Create Bibliography from Collection" (APA is pretty good, doesn't include numbering [which is good], does include hyperlinks) -- Output Mode: Bibliography +- Output Mode: Bibliography - Output Method: Save as HTML - copy all the div/span cites and replace the inner stuff below -Looks kinda like the following +Looks kinda like the following (note I changed the text size with `text-sm` from WindiCSS):