Skip to content

feat: detail modal for mobile memory tables (#285)#288

Merged
mattmezza merged 5 commits into
mainfrom
kindral/memory-detail-modal
Jul 10, 2026
Merged

feat: detail modal for mobile memory tables (#285)#288
mattmezza merged 5 commits into
mainfrom
kindral/memory-detail-modal

Conversation

@kindralai

@kindralai kindralai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Problem

Layer 3 of issue #285: on mobile, memory table rows are disproportionately tall because the Content column renders full text inline with break-all. Long-term and Short-term tables both suffer from this.

Solution

Implements two layers from the issue proposal:

Layer 1 — CSS truncation

  • Changed content cells from break-all to truncate max-w-0 with truncate block on the inner <span>
  • Rows stay compact on all screen sizes

Layer 3 — Detail modal

  • Added an eye-icon (view) button to each row, visible when not editing
  • Clicking it opens a fixed-position modal overlay with:
    • Memory ID as the title
    • All entry fields rendered in a clean definition list (Category, Subject, Content, Scope for long-term; Content, Scope, Expires for short-term)
    • Full content with whitespace-pre-wrap break-words so formatting is preserved
    • Close button, Escape key dismiss, and backdrop click dismiss
    • Scrollable content for long entries (max-height 80vh with overflow-y-auto)

The same pattern is applied to both Long-term and Short-term memory tables.

Acceptance criteria

  • Content cells are truncated to a single line with ellipsis
  • A view button opens a modal with full entry details
  • Modal works on mobile (fixed overlay, responsive width)
  • Modal for long-term shows: ID, Category, Subject, Content, Scope
  • Modal for short-term shows: ID, Content, Scope, Expires
  • Modal dismisses via Close button, Escape key, and backdrop click
  • Long content scrolls within the modal

Closes #285

Layer 3 of the mobile memory table fix: implements a detail modal that
shows the full memory entry content in a centered card overlay.

Also includes Layer 1 (CSS truncation) as a prerequisite:
- Content cells now use  for compact rows
- A view (eye icon) button opens a fixed modal with all entry fields
  rendered in a clean definition list
- Modal supports Escape key, backdrop click, and scroll for long content
- Applied to both Long-term and Short-term memory tables

@mattmezza mattmezza left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does not work see errors below (copy pasted from my browser console)

cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
cdn.min.js:1 Alpine Expression Error: showDetail is not defined

Expression: "showDetail"

 <div x-show=​"showDetail" class=​"fixed inset-0 z-50 flex items-center justify-center" style=​"background:​ rgba(0, 0, 0, 0.65)​;​ display:​ none;​" @keydown.window.escape=​"showDetail=false">​…​</div>​
re @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
Promise.catch
(anonymous) @ cdn.min.js:5
or @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
rn @ cdn.min.js:5
N @ cdn.min.js:1
(anonymous) @ cdn.min.js:1
(anonymous) @ cdn.min.js:5
r @ cdn.min.js:5
n @ cdn.min.js:5
fr @ cdn.min.js:5
S @ cdn.min.js:5
(anonymous) @ admin?tab=memory&memsub=long-term:248
he @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
se @ htmx.org@2.0.4:1
$e @ htmx.org@2.0.4:1
e @ htmx.org@2.0.4:1
Dn @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
(anonymous) @ htmx.org@2.0.4:1
m @ htmx.org@2.0.4:1
p.onload @ htmx.org@2.0.4:1
XMLHttpRequest.send
de @ htmx.org@2.0.4:1
Rn @ htmx.org@2.0.4:1
(anonymous) @ admin?tab=memory&memsub=long-term:2015
(anonymous) @ cdn.min.js:5
je @ cdn.min.js:5
(anonymous) @ cdn.min.js:5
setTimeout
(anonymous) @ cdn.min.js:5
25cdn.min.js:5 Uncaught ReferenceError: showDetail is not defined

The modal <div> was a direct child of <tr>, which is invalid HTML —
browsers hoist non-td/th elements out of <tr>, breaking Alpine's
x-data scope inheritance and causing 'showDetail is not defined'.

Moved the modal inside the actions <td>, after the action buttons,
so it remains within the Alpine scope chain.

@kindralai kindralai Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed — the modal div was a direct child of tr, which is invalid HTML. Browsers hoist non-td/th children out of tr, breaking Alpine x-data scope and causing showDetail to be undefined.

Moved the modal inside the actions td (after the action buttons) so it stays within the Alpine scope. Pushed to the same branch.

…ia hooksPath

- Split datetime.fromtimestamp() call across multiple lines to stay
  under ruff's 100-char limit (fixes CI lint failure on PR #290)
- Set core.hooksPath = .githooks so the existing pre-commit hook
  (which runs ruff check) fires on every commit
@mattmezza

Copy link
Copy Markdown
Owner

@kindralai[bot] this is not gonna cut it. We need to be able to edit the memory entry from the modal when on mobile. Can we do this from the modal, maybe via htmx swapping (you choose how)?

The modal now supports editing memory entries directly on mobile:
- View mode: shows all fields in a clean definition list (default)
- Edit mode: form inputs/selects/textarea for each field
- Edit/Save/Cancel buttons toggle between modes
- Save uses hx-include='closest td' to scope form data to the actions
  cell (where the modal lives), avoiding conflicts with inline edits
- Delete button always visible in the modal footer
- Close, Escape, backdrop click all reset modalEditing state

@kindralai kindralai Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the modal with inline editing support. The modal now has:

View mode (default): shows the definition list as before

Edit mode: click "Edit" to switch — all fields become inputs/selects/textarea with proper labels. Save/Cancel buttons toggle back.

Key implementation details:

  • Save uses hx-include="closest td" which scopes form data to just the actions cell (where the modal lives), avoiding conflicts with the inline table-row editing
  • Escape, backdrop click, and Close button all reset both showDetail and modalEditing
  • Delete button is always visible at the bottom of the modal
  • Applied to both Long-term and Short-term tables
  • Same HTMX endpoints as the inline editing, so the partial reloads correctly on save/delete

Pushed to the same branch.

@mattmezza

Copy link
Copy Markdown
Owner

much much better - but still... let's have the same behavior for both mobile and non

  • the modal should show up when clicking on the memory entry row
  • the edit button and linked action should go away
  • no 'view' and no 'delete' button either

clicking the row would open up the modal from which both edit and delete actions could be taken.

@kindralai[bot] pls 😢

Per review feedback:
- Removed all inline editing from table rows (edit/delete/view buttons,
  x-show=editing inputs)
- Removed the empty actions column header
- Entire row is now clickable — @click on <tr> opens the detail modal
- Row has cursor-pointer for affordance
- Modal handles all CRUD: view, edit (with form fields), and delete
- @click.stop on modal card prevents row click re-trigger
- Invisible zero-width <td> holds the modal DOM within Alpine scope

@kindralai kindralai Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cleaned up as requested:

  • Click any row to open the detail modal (cursor-pointer on hover)
  • No view/edit/delete buttons in the table anymore
  • No inline editing at all — all editing is modal-only
  • Modal has view mode (default), edit mode (with form fields), and delete
  • Close button, Escape key, backdrop click all dismiss
  • Works identically on mobile and desktop

Pushed to the same branch.

@mattmezza
mattmezza merged commit 4bce94c into main Jul 10, 2026
3 checks passed
@mattmezza
mattmezza deleted the kindral/memory-detail-modal branch July 10, 2026 13:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Mobile: Long-term and Short-term memory tables have huge rows — content column needs truncation and/or detail modal

1 participant