Reimplement compose and add tiling windows

This commit is contained in:
2026-03-12 22:03:30 +00:00
parent 79766d279d
commit 6ceff63b71
126 changed files with 5111 additions and 10796 deletions

View File

@@ -55,11 +55,9 @@ This is the repeatable process used in GIA to self-host third-party frontend ass
- Font Awesome:
- GIA templates use icon classes that are not safely replaceable with `@fortawesome/fontawesome-free`.
- The existing Font Awesome Pro `site-assets` v6.1.1 bundle is self-hosted under `core/static/vendor/fontawesome/` instead.
- jQuery:
- Latest npm is 4.x, but GIA stays on `3.7.1` to avoid breaking older plugins.
- Bulma extensions:
- `bulma-calendar`, `bulma-tagsinput`, `bulma-switch`, `bulma-slider`, and `bulma-tooltip` were matched against Bulma's official extensions page before pinning.
- `bulma-calendar` and `bulma-tooltip` are deprecated on npm, but Bulma still points to the Wikiki ecosystem for these extensions, so they were kept and documented instead of replaced ad hoc.
- Former extensions were matched against Bulma's official extensions page before pinning.
- Unused extensions (`calendar`, `slider`, `tagsinput`, `switch`, and `tooltip`) were removed once the app no longer referenced them.
## Theme Strategy

View File

@@ -21,174 +21,6 @@
}
]
},
{
"id": "bulma_tooltip_css",
"kind": "npm_file",
"package": "bulma-tooltip",
"version": "3.0.2",
"license": "MIT",
"homepage": "https://github.com/Wikiki/bulma-tooltip#readme",
"official_url": "https://wikiki.github.io/elements/tooltip",
"purpose": "Official Bulma tooltip extension from Bulma's extensions page",
"notes": "",
"resolved": "https://registry.npmjs.org/bulma-tooltip/-/bulma-tooltip-3.0.2.tgz",
"dist_integrity": "sha512-CsT3APjhlZScskFg38n8HYL8oYNUHQtcu4sz6ERarxkUpBRbk9v0h/5KAvXeKapVSn2dp9l7bOGit5SECP8EWQ==",
"source_path": "dist/css/bulma-tooltip.min.css",
"targets": [
{
"path": "core/static/css/bulma-tooltip.min.css",
"sha256": "5c79d12a40b3532aaec159faa0b85fd3d500e192467761b71e0bda0fd04f3076",
"sri_sha512": "sha512-SNDNIUvSYhnqDV9FFXaH/e0xZ6NzkG4Qm5dafLLf0PCMkzICKaOmMTgI3y2t2jZK+hAtP6A7UBcFqjWMhsujIg=="
}
]
},
{
"id": "bulma_slider_css",
"kind": "npm_file",
"package": "bulma-slider",
"version": "2.0.5",
"license": "MIT",
"homepage": "https://github.com/Wikiki/bulma-slider#readme",
"official_url": "https://wikiki.github.io/form/slider",
"purpose": "Official Bulma slider extension from Bulma's extensions page",
"notes": "",
"resolved": "https://registry.npmjs.org/bulma-slider/-/bulma-slider-2.0.5.tgz",
"dist_integrity": "sha512-6woD/1E7q1o5bfEaQjNqpWZaCItC1oHe9bN15WYB2ELqz2gDaJYZkf+rlozGpAYOXQGDQGCCv3y+QuKjx6sQuw==",
"source_path": "dist/css/bulma-slider.min.css",
"targets": [
{
"path": "core/static/css/bulma-slider.min.css",
"sha256": "f9d952627d388b8ba267e1388d6923274cf9e62e758d459c5a045f3933e9dc8a",
"sri_sha512": "sha512-9o5SkCRCA9thttRH3Gb5QXLxKdRiuRLdO6ToEPwRHGLXjrhTZwFj0rEHjrCcJvDN9/aNaWMpGOIEA2vZsHmEqw=="
}
]
},
{
"id": "bulma_slider_js",
"kind": "npm_file",
"package": "bulma-slider",
"version": "2.0.5",
"license": "MIT",
"homepage": "https://github.com/Wikiki/bulma-slider#readme",
"official_url": "https://wikiki.github.io/form/slider",
"purpose": "Official Bulma slider extension runtime",
"notes": "",
"resolved": "https://registry.npmjs.org/bulma-slider/-/bulma-slider-2.0.5.tgz",
"dist_integrity": "sha512-6woD/1E7q1o5bfEaQjNqpWZaCItC1oHe9bN15WYB2ELqz2gDaJYZkf+rlozGpAYOXQGDQGCCv3y+QuKjx6sQuw==",
"source_path": "dist/js/bulma-slider.min.js",
"targets": [
{
"path": "core/static/js/bulma-slider.min.js",
"sha256": "db68ebe154a25597913c5635f31500fe7a32e5a205fb9a98c9642d0c2de47d9e",
"sri_sha512": "sha512-WLKXHCsMXTSIPsmQShJRE6K4IzwvNkhwxr/Oo8N3z+kzjhGleHibspmWLTawNMdl2z9E23XK20+yvUTDZ+zeNQ=="
}
]
},
{
"id": "bulma_calendar_css",
"kind": "npm_file",
"package": "bulma-calendar",
"version": "7.1.1",
"license": "MIT",
"homepage": "https://doc.mh-s.de/bulma-calendar",
"official_url": "https://wikiki.github.io/components/calendar",
"purpose": "Official Bulma calendar extension from Bulma's extensions page",
"notes": "",
"resolved": "https://registry.npmjs.org/bulma-calendar/-/bulma-calendar-7.1.1.tgz",
"dist_integrity": "sha512-E08i25KOfqMKBndgDF3y3eoQ0dUzVkgV9R53EDRM65GQUQKLzt8gcXVJYs3mYnpq6L3DiLuUt47Fl09tSv9OpA==",
"source_path": "src/demo/assets/css/bulma-calendar.min.css",
"targets": [
{
"path": "core/static/css/bulma-calendar.min.css",
"sha256": "d18b488ca52584bcd6ea3fb84bf06380e47a3cd18660a235617da017d13ab269",
"sri_sha512": "sha512-IOnJQkgQpezPDPTJcRiWD7YVI3sF2RYzYDl4isbDT2geSaEHRQ615UN/8GhJbSkvqkKRZu8SBCQ7XwKMqsqLFQ=="
}
]
},
{
"id": "bulma_calendar_js",
"kind": "npm_file",
"package": "bulma-calendar",
"version": "7.1.1",
"license": "MIT",
"homepage": "https://doc.mh-s.de/bulma-calendar",
"official_url": "https://wikiki.github.io/components/calendar",
"purpose": "Official Bulma calendar extension runtime",
"notes": "",
"resolved": "https://registry.npmjs.org/bulma-calendar/-/bulma-calendar-7.1.1.tgz",
"dist_integrity": "sha512-E08i25KOfqMKBndgDF3y3eoQ0dUzVkgV9R53EDRM65GQUQKLzt8gcXVJYs3mYnpq6L3DiLuUt47Fl09tSv9OpA==",
"source_path": "src/demo/assets/js/bulma-calendar.min.js",
"targets": [
{
"path": "core/static/js/bulma-calendar.min.js",
"sha256": "58160c87c4d17f9d98ec366fe019492acde50efbc0297af7045547952b306680",
"sri_sha512": "sha512-kkEtEtypXzruevjkoxhyEkqkZBtlhK7s8zt7IV2yPabgBwy5xbKL9uWeCS37ldS9AaNTSnveWTu4ivUvGMJUWA=="
}
]
},
{
"id": "bulma_tagsinput_css",
"kind": "npm_file",
"package": "bulma-tagsinput",
"version": "2.0.0",
"license": "MIT",
"homepage": "https://github.com/Wikiki/bulma-tagsinput#readme",
"official_url": "https://wikiki.github.io/form/tagsinput",
"purpose": "Official Bulma tagsinput extension from Bulma's extensions page",
"notes": "",
"resolved": "https://registry.npmjs.org/bulma-tagsinput/-/bulma-tagsinput-2.0.0.tgz",
"dist_integrity": "sha512-BFvd0oaxgeWHOEh3d4cgETy5vpSSjRRBA9w+8TWEuhjFQg38Rb+3vjDCavL+udpdjf+dRV0SK5T4kYCXTOrz5A==",
"source_path": "dist/css/bulma-tagsinput.min.css",
"targets": [
{
"path": "core/static/css/bulma-tagsinput.min.css",
"sha256": "8d1de24619c05ddf9045638b52059ab492d4887ce74119eed545d66af859da89",
"sri_sha512": "sha512-NWTkcDRubZ3pyXbZZLQBILuVsRFs8c6QGgnfe4dm5/d6yp50U+xdoCDLIcSo51fFy/GXH0O2Oed1Z1sF1faxDA=="
}
]
},
{
"id": "bulma_tagsinput_js",
"kind": "npm_file",
"package": "bulma-tagsinput",
"version": "2.0.0",
"license": "MIT",
"homepage": "https://github.com/Wikiki/bulma-tagsinput#readme",
"official_url": "https://wikiki.github.io/form/tagsinput",
"purpose": "Official Bulma tagsinput extension runtime",
"notes": "",
"resolved": "https://registry.npmjs.org/bulma-tagsinput/-/bulma-tagsinput-2.0.0.tgz",
"dist_integrity": "sha512-BFvd0oaxgeWHOEh3d4cgETy5vpSSjRRBA9w+8TWEuhjFQg38Rb+3vjDCavL+udpdjf+dRV0SK5T4kYCXTOrz5A==",
"source_path": "dist/js/bulma-tagsinput.min.js",
"targets": [
{
"path": "core/static/js/bulma-tagsinput.min.js",
"sha256": "b355aa94ec519e374d7edf569e3dbde8bbe30ff3a193cb96f2930ee7815939d6",
"sri_sha512": "sha512-Je6J++MjmmpxF30JCmRwM2KiK3uWQBQtqiNCjwzEMJKExLaa0BqerlYNa/fJAl5Rra4hMgRZF2fzg+V2vjE4Kw=="
}
]
},
{
"id": "bulma_switch_css",
"kind": "npm_file",
"package": "bulma-switch",
"version": "2.0.4",
"license": "MIT",
"homepage": "https://github.com/Wikiki/bulma-switch#readme",
"official_url": "https://wikiki.github.io/form/switch",
"purpose": "Official Bulma switch extension from Bulma's extensions page",
"notes": "",
"resolved": "https://registry.npmjs.org/bulma-switch/-/bulma-switch-2.0.4.tgz",
"dist_integrity": "sha512-kMu4H0Pr0VjvfsnT6viRDCgptUq0Rvy7y7PX6q+IHg1xUynsjszPjhAdal5ysAlCG5HNO+5YXxeiu92qYGQolw==",
"source_path": "dist/css/bulma-switch.min.css",
"targets": [
{
"path": "core/static/css/bulma-switch.min.css",
"sha256": "f0460ddebdd95425a50590908503a170f5ff08b28bd53573c71791fc7cd1e6f5",
"sri_sha512": "sha512-zjrHYubQoNgDVqVKTyGjKcvIeQlduZTvXCvcBwQ0iqJYKLKiz9cuFAN7e98zfKqCTpI/EgFRBRcTwJw20yAFuw=="
}
]
},
{
"id": "gridstack_css",
"kind": "npm_file",
@@ -231,27 +63,6 @@
}
]
},
{
"id": "jquery_js",
"kind": "npm_file",
"package": "jquery",
"version": "3.7.1",
"license": "MIT",
"homepage": "https://jquery.com",
"official_url": "https://jquery.com",
"purpose": "Latest jQuery 3.x release for compatibility with legacy plugins",
"notes": "The latest npm release is jQuery 4.x, but this project still vendors 3.7.1 to avoid breaking older plugins.",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"dist_integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
"source_path": "dist/jquery.min.js",
"targets": [
{
"path": "core/static/js/jquery.min.js",
"sha256": "fc9a93dd241f6b045cbff0481cf4e1901becd0e12fb45166a8f17f95823f0b1a",
"sri_sha512": "sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="
}
]
},
{
"id": "htmx_js",
"kind": "npm_file",
@@ -273,48 +84,6 @@
}
]
},
{
"id": "hyperscript_js",
"kind": "npm_file",
"package": "hyperscript.org",
"version": "0.9.14",
"license": "BSD 2-Clause",
"homepage": "https://hyperscript.org/",
"official_url": "https://hyperscript.org/",
"purpose": "_hyperscript runtime",
"notes": "",
"resolved": "https://registry.npmjs.org/hyperscript.org/-/hyperscript.org-0.9.14.tgz",
"dist_integrity": "sha512-ugmojsQQUMmXcnwaXYiYf8L3GbeANy/m59EmE/0Z6C5eQ52fOuSrvFkuEIejG9BdpbYB4iTtoYGqV99eYqDVMA==",
"source_path": "dist/_hyperscript.min.js",
"targets": [
{
"path": "core/static/js/hyperscript.min.js",
"sha256": "3e834a3ffc0334fee54ecff4e37a6ae951cd83e6daa96651ca7cfd8f751ad4d2",
"sri_sha512": "sha512-l43sZzpnAddmYhJyfPrgv46XhJvA95gsA28/+eW4XZLSekQ8wlP68i9f22KGkRjY0HNiZrLc5MXGo4z/tM2QNA=="
}
]
},
{
"id": "magnet_js",
"kind": "npm_file",
"package": "@lf2com/magnet.js",
"version": "2.0.1",
"license": "MIT",
"homepage": "https://github.com/lf2com/magnet.js",
"official_url": "https://github.com/lf2com/magnet.js",
"purpose": "Magnet.js drag attraction component",
"notes": "",
"resolved": "https://registry.npmjs.org/@lf2com/magnet.js/-/magnet.js-2.0.1.tgz",
"dist_integrity": "sha512-MDgv1s0aNOuftuhY9c9Ve6Yadkmn7G+Ww91cVciyHHMhPPdxTxX3XUSJXFYD3VraGFzcnI4uilik9/I76AsJEg==",
"source_path": "dist/magnet.min.js",
"targets": [
{
"path": "core/static/js/magnet.min.js",
"sha256": "05ff8858b5fb7b3ad2a618212571162e2108f580b08527716f4e63c648dcccb1",
"sri_sha512": "sha512-aoQ3V4iCM8zTcdMDSUTRG1K9wqZzmDSisuaCLQexk9DdFy92oWvTUoAfCVLnGzzJClst8PmtasZg219REwyNkw=="
}
]
},
{
"id": "fontawesome_bundle",
"kind": "url_bundle",

View File

@@ -18,134 +18,6 @@ This report is generated by `scripts/vendor_frontend_assets.py` from `tools/fron
- SRI sha512: `sha512-yh2RE0wZCVZeysGiqTwDTO/dKelCbS9bP2L94UvOFtl/FKXcNAje3Y2oBg/ZMZ3LS1sicYk4dYVGtDex75fvvA==`
## bulma_tooltip_css
- Source: `bulma-tooltip`
- Version: `3.0.2`
- Official URL: https://wikiki.github.io/elements/tooltip
- Homepage: https://github.com/Wikiki/bulma-tooltip#readme
- License: `MIT`
- Purpose: Official Bulma tooltip extension from Bulma's extensions page
- Resolved tarball: `https://registry.npmjs.org/bulma-tooltip/-/bulma-tooltip-3.0.2.tgz`
- Upstream package integrity: `sha512-CsT3APjhlZScskFg38n8HYL8oYNUHQtcu4sz6ERarxkUpBRbk9v0h/5KAvXeKapVSn2dp9l7bOGit5SECP8EWQ==`
- Local targets:
- `core/static/css/bulma-tooltip.min.css`
- SHA-256: `5c79d12a40b3532aaec159faa0b85fd3d500e192467761b71e0bda0fd04f3076`
- SRI sha512: `sha512-SNDNIUvSYhnqDV9FFXaH/e0xZ6NzkG4Qm5dafLLf0PCMkzICKaOmMTgI3y2t2jZK+hAtP6A7UBcFqjWMhsujIg==`
## bulma_slider_css
- Source: `bulma-slider`
- Version: `2.0.5`
- Official URL: https://wikiki.github.io/form/slider
- Homepage: https://github.com/Wikiki/bulma-slider#readme
- License: `MIT`
- Purpose: Official Bulma slider extension from Bulma's extensions page
- Resolved tarball: `https://registry.npmjs.org/bulma-slider/-/bulma-slider-2.0.5.tgz`
- Upstream package integrity: `sha512-6woD/1E7q1o5bfEaQjNqpWZaCItC1oHe9bN15WYB2ELqz2gDaJYZkf+rlozGpAYOXQGDQGCCv3y+QuKjx6sQuw==`
- Local targets:
- `core/static/css/bulma-slider.min.css`
- SHA-256: `f9d952627d388b8ba267e1388d6923274cf9e62e758d459c5a045f3933e9dc8a`
- SRI sha512: `sha512-9o5SkCRCA9thttRH3Gb5QXLxKdRiuRLdO6ToEPwRHGLXjrhTZwFj0rEHjrCcJvDN9/aNaWMpGOIEA2vZsHmEqw==`
## bulma_slider_js
- Source: `bulma-slider`
- Version: `2.0.5`
- Official URL: https://wikiki.github.io/form/slider
- Homepage: https://github.com/Wikiki/bulma-slider#readme
- License: `MIT`
- Purpose: Official Bulma slider extension runtime
- Resolved tarball: `https://registry.npmjs.org/bulma-slider/-/bulma-slider-2.0.5.tgz`
- Upstream package integrity: `sha512-6woD/1E7q1o5bfEaQjNqpWZaCItC1oHe9bN15WYB2ELqz2gDaJYZkf+rlozGpAYOXQGDQGCCv3y+QuKjx6sQuw==`
- Local targets:
- `core/static/js/bulma-slider.min.js`
- SHA-256: `db68ebe154a25597913c5635f31500fe7a32e5a205fb9a98c9642d0c2de47d9e`
- SRI sha512: `sha512-WLKXHCsMXTSIPsmQShJRE6K4IzwvNkhwxr/Oo8N3z+kzjhGleHibspmWLTawNMdl2z9E23XK20+yvUTDZ+zeNQ==`
## bulma_calendar_css
- Source: `bulma-calendar`
- Version: `7.1.1`
- Official URL: https://wikiki.github.io/components/calendar
- Homepage: https://doc.mh-s.de/bulma-calendar
- License: `MIT`
- Purpose: Official Bulma calendar extension from Bulma's extensions page
- Resolved tarball: `https://registry.npmjs.org/bulma-calendar/-/bulma-calendar-7.1.1.tgz`
- Upstream package integrity: `sha512-E08i25KOfqMKBndgDF3y3eoQ0dUzVkgV9R53EDRM65GQUQKLzt8gcXVJYs3mYnpq6L3DiLuUt47Fl09tSv9OpA==`
- Local targets:
- `core/static/css/bulma-calendar.min.css`
- SHA-256: `d18b488ca52584bcd6ea3fb84bf06380e47a3cd18660a235617da017d13ab269`
- SRI sha512: `sha512-IOnJQkgQpezPDPTJcRiWD7YVI3sF2RYzYDl4isbDT2geSaEHRQ615UN/8GhJbSkvqkKRZu8SBCQ7XwKMqsqLFQ==`
## bulma_calendar_js
- Source: `bulma-calendar`
- Version: `7.1.1`
- Official URL: https://wikiki.github.io/components/calendar
- Homepage: https://doc.mh-s.de/bulma-calendar
- License: `MIT`
- Purpose: Official Bulma calendar extension runtime
- Resolved tarball: `https://registry.npmjs.org/bulma-calendar/-/bulma-calendar-7.1.1.tgz`
- Upstream package integrity: `sha512-E08i25KOfqMKBndgDF3y3eoQ0dUzVkgV9R53EDRM65GQUQKLzt8gcXVJYs3mYnpq6L3DiLuUt47Fl09tSv9OpA==`
- Local targets:
- `core/static/js/bulma-calendar.min.js`
- SHA-256: `58160c87c4d17f9d98ec366fe019492acde50efbc0297af7045547952b306680`
- SRI sha512: `sha512-kkEtEtypXzruevjkoxhyEkqkZBtlhK7s8zt7IV2yPabgBwy5xbKL9uWeCS37ldS9AaNTSnveWTu4ivUvGMJUWA==`
## bulma_tagsinput_css
- Source: `bulma-tagsinput`
- Version: `2.0.0`
- Official URL: https://wikiki.github.io/form/tagsinput
- Homepage: https://github.com/Wikiki/bulma-tagsinput#readme
- License: `MIT`
- Purpose: Official Bulma tagsinput extension from Bulma's extensions page
- Resolved tarball: `https://registry.npmjs.org/bulma-tagsinput/-/bulma-tagsinput-2.0.0.tgz`
- Upstream package integrity: `sha512-BFvd0oaxgeWHOEh3d4cgETy5vpSSjRRBA9w+8TWEuhjFQg38Rb+3vjDCavL+udpdjf+dRV0SK5T4kYCXTOrz5A==`
- Local targets:
- `core/static/css/bulma-tagsinput.min.css`
- SHA-256: `8d1de24619c05ddf9045638b52059ab492d4887ce74119eed545d66af859da89`
- SRI sha512: `sha512-NWTkcDRubZ3pyXbZZLQBILuVsRFs8c6QGgnfe4dm5/d6yp50U+xdoCDLIcSo51fFy/GXH0O2Oed1Z1sF1faxDA==`
## bulma_tagsinput_js
- Source: `bulma-tagsinput`
- Version: `2.0.0`
- Official URL: https://wikiki.github.io/form/tagsinput
- Homepage: https://github.com/Wikiki/bulma-tagsinput#readme
- License: `MIT`
- Purpose: Official Bulma tagsinput extension runtime
- Resolved tarball: `https://registry.npmjs.org/bulma-tagsinput/-/bulma-tagsinput-2.0.0.tgz`
- Upstream package integrity: `sha512-BFvd0oaxgeWHOEh3d4cgETy5vpSSjRRBA9w+8TWEuhjFQg38Rb+3vjDCavL+udpdjf+dRV0SK5T4kYCXTOrz5A==`
- Local targets:
- `core/static/js/bulma-tagsinput.min.js`
- SHA-256: `b355aa94ec519e374d7edf569e3dbde8bbe30ff3a193cb96f2930ee7815939d6`
- SRI sha512: `sha512-Je6J++MjmmpxF30JCmRwM2KiK3uWQBQtqiNCjwzEMJKExLaa0BqerlYNa/fJAl5Rra4hMgRZF2fzg+V2vjE4Kw==`
## bulma_switch_css
- Source: `bulma-switch`
- Version: `2.0.4`
- Official URL: https://wikiki.github.io/form/switch
- Homepage: https://github.com/Wikiki/bulma-switch#readme
- License: `MIT`
- Purpose: Official Bulma switch extension from Bulma's extensions page
- Resolved tarball: `https://registry.npmjs.org/bulma-switch/-/bulma-switch-2.0.4.tgz`
- Upstream package integrity: `sha512-kMu4H0Pr0VjvfsnT6viRDCgptUq0Rvy7y7PX6q+IHg1xUynsjszPjhAdal5ysAlCG5HNO+5YXxeiu92qYGQolw==`
- Local targets:
- `core/static/css/bulma-switch.min.css`
- SHA-256: `f0460ddebdd95425a50590908503a170f5ff08b28bd53573c71791fc7cd1e6f5`
- SRI sha512: `sha512-zjrHYubQoNgDVqVKTyGjKcvIeQlduZTvXCvcBwQ0iqJYKLKiz9cuFAN7e98zfKqCTpI/EgFRBRcTwJw20yAFuw==`
## gridstack_css
- Source: `gridstack`
@@ -178,23 +50,6 @@ This report is generated by `scripts/vendor_frontend_assets.py` from `tools/fron
- SRI sha512: `sha512-djBPxwvBhDep1SvOhliatweHMORhVO3HabrfBjaW6nYsa7UcJYHty31x42m4HBSJXcJSQdoEgRPLVYGGIuIaDQ==`
## jquery_js
- Source: `jquery`
- Version: `3.7.1`
- Official URL: https://jquery.com
- Homepage: https://jquery.com
- License: `MIT`
- Purpose: Latest jQuery 3.x release for compatibility with legacy plugins
- Resolved tarball: `https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz`
- Upstream package integrity: `sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==`
- Notes: The latest npm release is jQuery 4.x, but this project still vendors 3.7.1 to avoid breaking older plugins.
- Local targets:
- `core/static/js/jquery.min.js`
- SHA-256: `fc9a93dd241f6b045cbff0481cf4e1901becd0e12fb45166a8f17f95823f0b1a`
- SRI sha512: `sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==`
## htmx_js
- Source: `htmx.org`
@@ -211,38 +66,6 @@ This report is generated by `scripts/vendor_frontend_assets.py` from `tools/fron
- SRI sha512: `sha512-CGXFnDNv5q48ciFeIyWFcfZhqYW0sSBiPO+HZDO3XLM+p8xjhezz5CCxtkXVDKfCbvF+iUhel7xoeSp19o7x7g==`
## hyperscript_js
- Source: `hyperscript.org`
- Version: `0.9.14`
- Official URL: https://hyperscript.org/
- Homepage: https://hyperscript.org/
- License: `BSD 2-Clause`
- Purpose: _hyperscript runtime
- Resolved tarball: `https://registry.npmjs.org/hyperscript.org/-/hyperscript.org-0.9.14.tgz`
- Upstream package integrity: `sha512-ugmojsQQUMmXcnwaXYiYf8L3GbeANy/m59EmE/0Z6C5eQ52fOuSrvFkuEIejG9BdpbYB4iTtoYGqV99eYqDVMA==`
- Local targets:
- `core/static/js/hyperscript.min.js`
- SHA-256: `3e834a3ffc0334fee54ecff4e37a6ae951cd83e6daa96651ca7cfd8f751ad4d2`
- SRI sha512: `sha512-l43sZzpnAddmYhJyfPrgv46XhJvA95gsA28/+eW4XZLSekQ8wlP68i9f22KGkRjY0HNiZrLc5MXGo4z/tM2QNA==`
## magnet_js
- Source: `@lf2com/magnet.js`
- Version: `2.0.1`
- Official URL: https://github.com/lf2com/magnet.js
- Homepage: https://github.com/lf2com/magnet.js
- License: `MIT`
- Purpose: Magnet.js drag attraction component
- Resolved tarball: `https://registry.npmjs.org/@lf2com/magnet.js/-/magnet.js-2.0.1.tgz`
- Upstream package integrity: `sha512-MDgv1s0aNOuftuhY9c9Ve6Yadkmn7G+Ww91cVciyHHMhPPdxTxX3XUSJXFYD3VraGFzcnI4uilik9/I76AsJEg==`
- Local targets:
- `core/static/js/magnet.min.js`
- SHA-256: `05ff8858b5fb7b3ad2a618212571162e2108f580b08527716f4e63c648dcccb1`
- SRI sha512: `sha512-aoQ3V4iCM8zTcdMDSUTRG1K9wqZzmDSisuaCLQexk9DdFy92oWvTUoAfCVLnGzzJClst8PmtasZg219REwyNkw==`
## fontawesome_bundle
- Source: `https://site-assets.fontawesome.com/releases/v6.1.1/css/all.css`

View File

@@ -0,0 +1,157 @@
# GIA Workspace Interface Plan
## Goals
- Replace page-by-page navigation with a workspace shell that can open any major surface as a widget.
- Keep transport quirks behind shared adapters so UI code deals in people, sessions, messages, PS, MS, PSC, and MSC.
- Make widget loading, live updates, and history browsing shared primitives instead of page-specific implementations.
## Interface Map
### 1. Workspace Shell
- One grid workspace shell owns widget layout, persistence, focus, close, restore, and launch.
- A launcher surface replaces the current nav-as-destination approach.
- Every major area can render as:
- page
- widget
- embeddable fragment
### 2. Core Widgets
- Compose widget:
- simple thread viewer
- simple outbound composer
- reply target
- attachment strip
- live MS/PS chips
- Contact launcher widget:
- search
- recent contacts
- open thread widget
- create/match contact
- Message history browser:
- long-range session browsing
- filters by service, person, session, direction, attachments, date
- open selected history in a compose/thread widget
- Person intelligence widget:
- current PS summary
- current MS summary
- PSC/MSC highlights
- links into evidence and history
- Session evidence widget:
- timeline of events
- annotated durations
- state transitions
- Insight workbench widget:
- hypothesis cards
- mitigation planning
- evidence drill-down
- Help/reference widget:
- PS/MS glossary
- PSC/MSC explanations
- research basis
### 3. Behavioral Surfaces
- PS lane:
- unavailable -> available -> typing -> typing_stopped
- duration chips and transition stats
- MS lane:
- sent -> delivered -> read -> responded
- duration chips and transition stats
- PSC surface:
- correlation patterns within PS sequences
- return-window priority, abandoned typing, repeated hesitation
- MSC surface:
- correlation patterns within MS sequences
- reply delay shifts, asymmetry, reciprocity, timing escalation
- Combined inference surface:
- PSC + MSC combinations with evidence, confidence, and caveats
## Shared Technical Primitives
### Widget Contract
Every widget-capable surface should declare:
- title
- icon
- source URL
- refresh URL
- websocket topic or polling policy
- default grid dimensions
- optional launch context
### Shared Client Modules
- `workspace-shell`
- open widget from URL
- replace/update widget
- compact grid
- persist layout
- `widget-loader`
- HTMX/bootstrap helper for hidden widget loads
- one primitive reused by page bootstraps and launch actions
- `live-channel`
- shared websocket subscription lifecycle
- reconnect and backoff
- channel-to-widget routing
- `history-browser`
- filters, pagination, range selection, transcript fetch
- `compose-client`
- message list render/update
- outbound send
- attachment handling
- reply targeting
### Shared Server Patterns
- Each surface provides `page`, `widget`, and `fragment` modes from one context builder where possible.
- Widget launch URLs are generated centrally, not manually concatenated in templates.
- Behavioral computations read shared PS/MS event abstractions, not transport names.
- Live updates publish transport-neutral event payloads.
## Implementation Phases
### Phase 1. Workspace Foundation
- Extract workspace shell logic from inline page scripts into shared assets.
- Standardize the hidden widget loader include.
- Slim launcher widgets so they do not dump entire datasets into one partial.
- Add a reusable message history browser endpoint and widget shell.
### Phase 2. Compose Rewrite
- Keep compose to:
- thread
- send
- reply
- attachment preview
- live state indicators
- Move history/export/receipt/debug extras out into dedicated widgets.
- Keep page mode and widget mode on the same client code.
### Phase 3. Behavioral Workspace
- Add PS/MS event browser widgets.
- Add PSC/MSC evidence widgets with drill-down into raw events.
- Add person/session dashboards that combine evidence instead of hiding it behind static pages.
### Phase 4. Live Update Layer
- Replace page-local polling with a shared websocket abstraction.
- Route updates by widget topic:
- compose thread
- message state
- presence state
- analysis refresh
- Keep HTMX for request/response actions and server-rendered fragments.
## Immediate Debt Kill List
- Large launcher partials that dump whole universes of contacts or objects.
- Inline workspace shell JS in templates.
- Page-specific widget bootstraps that repeat the same hidden HTMX loader block.
- Mixed transport-specific UI conditionals in templates.
- Heavy detail views that combine history, inference, controls, and diagnostics in one render.