retold-data-service 2.1.2 → 2.1.5

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.
Files changed (80) hide show
  1. package/BUILDING-AND-PUBLISHING.md +2 -2
  2. package/Dockerfile +1 -1
  3. package/README.md +12 -27
  4. package/build-all.js +66 -0
  5. package/diagrams/architecture.excalidraw +2966 -0
  6. package/diagrams/architecture.mmd +17 -0
  7. package/diagrams/architecture.svg +2 -0
  8. package/docs/README.md +12 -12
  9. package/docs/_brand.json +18 -0
  10. package/docs/_cover.md +1 -1
  11. package/docs/_topbar.md +1 -1
  12. package/docs/_version.json +3 -3
  13. package/docs/api/reference.md +8 -8
  14. package/docs/architecture.md +6 -84
  15. package/docs/diagrams/component-diagram.excalidraw +2807 -0
  16. package/docs/diagrams/component-diagram.mmd +14 -0
  17. package/docs/diagrams/component-diagram.svg +2 -0
  18. package/docs/diagrams/component-stack.excalidraw +1169 -0
  19. package/docs/diagrams/component-stack.mmd +6 -0
  20. package/docs/diagrams/component-stack.svg +2 -0
  21. package/docs/diagrams/hook-execution-order.excalidraw +3230 -0
  22. package/docs/diagrams/hook-execution-order.mmd +19 -0
  23. package/docs/diagrams/hook-execution-order.svg +2 -0
  24. package/docs/diagrams/initialization-flow.excalidraw +1800 -0
  25. package/docs/diagrams/initialization-flow.mmd +22 -0
  26. package/docs/diagrams/initialization-flow.svg +2 -0
  27. package/docs/index.html +6 -7
  28. package/docs/lifecycle-hooks.md +2 -21
  29. package/docs/retold-catalog.json +141 -141
  30. package/docs/retold-keyword-index.json +6818 -1608
  31. package/package.json +130 -96
  32. package/source/services/RetoldDataService-Brand.js +13 -0
  33. package/source/services/comprehension-loader/pict-app/Pict-Application-ComprehensionLoader.js +65 -15
  34. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Layout.js +28 -74
  35. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Load.js +17 -17
  36. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-SettingsPanel.js +62 -0
  37. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Shell.js +142 -0
  38. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-StatusBar.js +125 -0
  39. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-StatusDetail.js +89 -0
  40. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-TopBar-Nav.js +42 -0
  41. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-TopBar-User.js +48 -0
  42. package/source/services/comprehension-loader/web/comprehension-loader.js +5415 -6183
  43. package/source/services/comprehension-loader/web/comprehension-loader.js.map +1 -1
  44. package/source/services/comprehension-loader/web/comprehension-loader.min.js +75 -1
  45. package/source/services/comprehension-loader/web/comprehension-loader.min.js.map +1 -1
  46. package/source/services/comprehension-loader/web/favicons/favicon-dark.svg +13 -0
  47. package/source/services/comprehension-loader/web/favicons/favicon-light.svg +13 -0
  48. package/source/services/comprehension-loader/web/favicons/favicon.svg +13 -0
  49. package/source/services/comprehension-loader/web/index.html +3 -0
  50. package/source/services/comprehension-loader/web/pict.min.js +12 -0
  51. package/source/services/data-cloner/DataCloner-Command-Headless.js +2 -1
  52. package/source/services/data-cloner/DataCloner-Command-Sync.js +110 -75
  53. package/source/services/data-cloner/pict-app/Pict-Application-DataCloner.js +70 -47
  54. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Export.js +3 -3
  55. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Layout.js +40 -86
  56. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-SettingsPanel.js +61 -0
  57. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Shell.js +136 -0
  58. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-StatusBar.js +117 -0
  59. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-StatusDetail.js +81 -0
  60. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Sync.js +18 -18
  61. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-TopBar-Nav.js +42 -0
  62. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-TopBar-User.js +48 -0
  63. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-ViewData.js +2 -2
  64. package/source/services/data-cloner/web/data-cloner.js +5772 -7986
  65. package/source/services/data-cloner/web/data-cloner.js.map +1 -1
  66. package/source/services/data-cloner/web/data-cloner.min.js +75 -1
  67. package/source/services/data-cloner/web/data-cloner.min.js.map +1 -1
  68. package/source/services/data-cloner/web/favicons/favicon-dark.svg +13 -0
  69. package/source/services/data-cloner/web/favicons/favicon-light.svg +13 -0
  70. package/source/services/data-cloner/web/favicons/favicon.svg +13 -0
  71. package/source/services/data-cloner/web/favicons/favicons/favicon-dark.svg +13 -0
  72. package/source/services/data-cloner/web/favicons/favicons/favicon-light.svg +13 -0
  73. package/source/services/data-cloner/web/favicons/favicons/favicon.svg +13 -0
  74. package/source/services/data-cloner/web/index.html +3 -0
  75. package/source/services/data-cloner/web/pict.min.js +12 -0
  76. package/test/Bundles_smoke_tests.js +43 -0
  77. package/test/ComprehensionLoader_smoke_tests.js +95 -0
  78. package/test/DataCloner-RuntimeOverrides_tests.js +344 -0
  79. package/test/DataCloner_smoke_tests.js +87 -0
  80. package/docs/css/docuserve.css +0 -327
@@ -1,2 +1,76 @@
1
- "use strict";!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).comprehensionLoader=t()}}(function(){return function t(e,i,o){function s(r,a){if(!i[r]){if(!e[r]){var l="function"==typeof require&&require;if(!a&&l)return l(r,!0);if(n)return n(r,!0);var c=new Error("Cannot find module '"+r+"'");throw c.code="MODULE_NOT_FOUND",c}var d=i[r]={exports:{}};e[r][0].call(d.exports,function(t){return s(e[r][1][t]||t)},d,d.exports,t,e,i,o)}return i[r].exports}for(var n="function"==typeof require&&require,r=0;r<o.length;r++)s(o[r]);return s}({1:[function(t,e,i){e.exports={name:"fable-serviceproviderbase",version:"3.0.19",description:"Simple base classes for fable services.",main:"source/Fable-ServiceProviderBase.js",scripts:{start:"node source/Fable-ServiceProviderBase.js",test:"npx quack test",tests:"npx quack test -g",coverage:"npx quack coverage",build:"npx quack build",types:"tsc -p ./tsconfig.build.json",check:"tsc -p . --noEmit"},types:"types/source/Fable-ServiceProviderBase.d.ts",mocha:{diff:!0,extension:["js"],package:"./package.json",reporter:"spec",slow:"75",timeout:"5000",ui:"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]},repository:{type:"git",url:"https://github.com/stevenvelozo/fable-serviceproviderbase.git"},keywords:["entity","behavior"],author:"Steven Velozo <steven@velozo.com> (http://velozo.com/)",license:"MIT",bugs:{url:"https://github.com/stevenvelozo/fable-serviceproviderbase/issues"},homepage:"https://github.com/stevenvelozo/fable-serviceproviderbase",devDependencies:{"@types/mocha":"^10.0.10",fable:"^3.1.62",quackage:"^1.0.58",typescript:"^5.9.3"}}},{}],2:[function(t,e,i){const o=t("../package.json");class s{constructor(t,e,i){this.fable,this.UUID,this.options,this.services,this.servicesMap,"object"==typeof t&&t.isFable?this.connectFable(t):this.fable=!1,this._PackageFableServiceProvider=o,this.fable?(this.UUID=t.getUUID(),this.options="object"==typeof e?e:{}):(this.options="object"!=typeof t||t.isFable?"object"==typeof e?e:{}:t,this.UUID=`CORE-SVC-${Math.floor(89999*Math.random()+1e4)}`),this.serviceType=`Unknown-${this.UUID}`,this.Hash="string"==typeof i?i:this.fable||"string"!=typeof e?`${this.UUID}`:e}connectFable(t){if("object"!=typeof t||!t.isFable){let e=`Fable Service Provider Base: Cannot connect to Fable, invalid Fable object passed in. The pFable parameter was a [${typeof t}].}`;return console.log(e),new Error(e)}return this.fable||(this.fable=t),this.log||(this.log=this.fable.Logging),this.services||(this.services=this.fable.services),this.servicesMap||(this.servicesMap=this.fable.servicesMap),!0}static isFableService=!0}e.exports=s,e.exports.CoreServiceProviderBase=s},{"../package.json":1}],3:[function(t,e,i){e.exports={name:"pict-application",version:"1.0.33",description:"Application base class for a pict view-based application",main:"source/Pict-Application.js",scripts:{test:"npx quack test",start:"node source/Pict-Application.js",coverage:"npx quack coverage",build:"npx quack build","docker-dev-build":"docker build ./ -f Dockerfile_LUXURYCode -t pict-application-image:local","docker-dev-run":'docker run -it -d --name pict-application-dev -p 30001:8080 -p 38086:8086 -v "$PWD/.config:/home/coder/.config" -v "$PWD:/home/coder/pict-application" -u "$(id -u):$(id -g)" -e "DOCKER_USER=$USER" pict-application-image:local',"docker-dev-shell":"docker exec -it pict-application-dev /bin/bash",tests:"npx quack test -g",lint:"eslint source/**",types:"tsc -p ."},types:"types/source/Pict-Application.d.ts",repository:{type:"git",url:"git+https://github.com/stevenvelozo/pict-application.git"},author:"steven velozo <steven@velozo.com>",license:"MIT",bugs:{url:"https://github.com/stevenvelozo/pict-application/issues"},homepage:"https://github.com/stevenvelozo/pict-application#readme",devDependencies:{"@eslint/js":"^9.28.0","browser-env":"^3.3.0",eslint:"^9.28.0",pict:"^1.0.348","pict-provider":"^1.0.10","pict-view":"^1.0.66",quackage:"^1.0.58",typescript:"^5.9.3"},mocha:{diff:!0,extension:["js"],package:"./package.json",reporter:"spec",slow:"75",timeout:"5000",ui:"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]},dependencies:{"fable-serviceproviderbase":"^3.0.19"}}},{}],4:[function(t,e,i){const o=t("fable-serviceproviderbase"),s=t("../package.json"),n={Name:"DefaultPictApplication",MainViewportViewIdentifier:"Default-View",MainViewportRenderableHash:!1,MainViewportDestinationAddress:!1,MainViewportDefaultDataAddress:!1,AutoSolveAfterInitialize:!0,AutoRenderMainViewportViewAfterInitialize:!0,AutoRenderViewsAfterInitialize:!1,AutoLoginAfterInitialize:!1,AutoLoadDataAfterLogin:!1,ConfigurationOnlyViews:[],Manifests:{},IdentifierAddressPrefix:"PICT-"};e.exports=class extends o{constructor(t,e,i){let o="object"==typeof t.settings.PictApplicationConfiguration?t.settings.PictApplicationConfiguration:{};super(t,Object.assign({},JSON.parse(JSON.stringify(n)),o,e),i),this.options,this.log,this.fable,this.UUID,this.Hash,this.servicesMap,this.serviceType="PictApplication",this._Package=s,this.pict=this.fable,this.AppData=this.fable.AppData,this.Bundle=this.fable.Bundle,this.initializeTimestamp,this.lastSolvedTimestamp,this.lastLoginTimestamp,this.lastMarshalFromViewsTimestamp,this.lastMarshalToViewsTimestamp,this.lastAutoRenderTimestamp,this.lastLoadDataTimestamp;let r=Object.keys(this.options.Manifests);if(r.length>0)for(let t=0;t<r.length;t++){let e=r[t];this.fable.instantiateServiceProvider("Manifest",this.options.Manifests[e],e)}}onPreSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onPreSolve:`),!0}onPreSolveAsync(t){return this.onPreSolve(),t()}onBeforeSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeSolve:`),!0}onBeforeSolveAsync(t){return this.onBeforeSolve(),t()}onSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onSolve:`),!0}onSolveAsync(t){return this.onSolve(),t()}solve(){this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} executing solve() function...`);let t=Object.keys(this.pict.providers),e=[];for(let i=0;i<t.length;i++){let o=this.pict.providers[t[i]];o.options.AutoSolveWithApp&&e.push(o)}e.sort((t,e)=>t.options.AutoSolveOrdinal-e.options.AutoSolveOrdinal);for(let t=0;t<e.length;t++)e[t].solve(e[t]);this.onBeforeSolve();let i=Object.keys(this.pict.views),o=[];for(let t=0;t<i.length;t++){let e=this.pict.views[i[t]];e.options.AutoInitialize&&o.push(e)}o.sort((t,e)=>t.options.AutoInitializeOrdinal-e.options.AutoInitializeOrdinal);for(let t=0;t<o.length;t++)o[t].solve();return this.onSolve(),this.onAfterSolve(),this.lastSolvedTimestamp=this.fable.log.getTimeStamp(),!0}solveAsync(t){let e=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate");e.anticipate(this.onBeforeSolveAsync.bind(this));let i="function"==typeof t&&t;i||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} solveAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),i=t=>{t&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} solveAsync Auto Callback Error: ${t}`,t)});let o=Object.keys(this.pict.providers),s=[];for(let t=0;t<o.length;t++){let e=this.pict.providers[o[t]];e.options.AutoSolveWithApp&&s.push(e)}s.sort((t,e)=>t.options.AutoSolveOrdinal-e.options.AutoSolveOrdinal);for(let t=0;t<s.length;t++)e.anticipate(s[t].solveAsync.bind(s[t]));let n=Object.keys(this.pict.views),r=[];for(let t=0;t<n.length;t++){let e=this.pict.views[n[t]];e.options.AutoSolveWithApp&&r.push(e)}r.sort((t,e)=>t.options.AutoSolveOrdinal-e.options.AutoSolveOrdinal);for(let t=0;t<r.length;t++)e.anticipate(r[t].solveAsync.bind(r[t]));e.anticipate(this.onSolveAsync.bind(this)),e.anticipate(this.onAfterSolveAsync.bind(this)),e.wait(t=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} solveAsync() complete.`),this.lastSolvedTimestamp=this.fable.log.getTimeStamp(),i(t)))}onAfterSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterSolve:`),!0}onAfterSolveAsync(t){return this.onAfterSolve(),t()}onBeforeLoginAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeLoginAsync:`),t()}onLoginAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onLoginAsync:`),t()}loginAsync(t){const e=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate");let i=t;"function"!=typeof i&&(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loginAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),i=t=>{t&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loginAsync Auto Callback Error: ${t}`,t)}),e.anticipate(this.onBeforeLoginAsync.bind(this)),e.anticipate(this.onLoginAsync.bind(this)),e.anticipate(this.onAfterLoginAsync.bind(this)),this.options.AutoLoadDataAfterLogin&&e.anticipate(t=>{if(!this.isLoggedIn())return t();this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto loading data after login...`),this.loadDataAsync(e=>{t(e)})}),e.wait(t=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loginAsync() complete.`),this.lastLoginTimestamp=this.fable.log.getTimeStamp(),i(t)))}isLoggedIn(){return!0}onAfterLoginAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterLoginAsync:`),t()}onBeforeLoadDataAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeLoadDataAsync:`),t()}onLoadDataAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onLoadDataAsync:`),t()}loadDataAsync(t){const e=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate");let i=t;"function"!=typeof i&&(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loadDataAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),i=t=>{t&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loadDataAsync Auto Callback Error: ${t}`,t)}),e.anticipate(this.onBeforeLoadDataAsync.bind(this));let o=Object.keys(this.pict.providers),s=[];for(let t=0;t<o.length;t++){let e=this.pict.providers[o[t]];e.options.AutoLoadDataWithApp&&s.push(e)}s.sort((t,e)=>t.options.AutoLoadDataOrdinal-e.options.AutoLoadDataOrdinal);for(const t of s)e.anticipate(t.onBeforeLoadDataAsync.bind(t));e.anticipate(this.onLoadDataAsync.bind(this));for(const t of s)e.anticipate(t.onLoadDataAsync.bind(t));e.anticipate(this.onAfterLoadDataAsync.bind(this));for(const t of s)e.anticipate(t.onAfterLoadDataAsync.bind(t));e.wait(t=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loadDataAsync() complete.`),this.lastLoadDataTimestamp=this.fable.log.getTimeStamp(),i(t)))}onAfterLoadDataAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterLoadDataAsync:`),t()}onBeforeSaveDataAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeSaveDataAsync:`),t()}onSaveDataAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onSaveDataAsync:`),t()}saveDataAsync(t){const e=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate");let i=t;"function"!=typeof i&&(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} saveDataAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),i=t=>{t&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} saveDataAsync Auto Callback Error: ${t}`,t)}),e.anticipate(this.onBeforeSaveDataAsync.bind(this));let o=Object.keys(this.pict.providers),s=[];for(let t=0;t<o.length;t++){let e=this.pict.providers[o[t]];e.options.AutoSaveDataWithApp&&s.push(e)}s.sort((t,e)=>t.options.AutoSaveDataOrdinal-e.options.AutoSaveDataOrdinal);for(const t of s)e.anticipate(t.onBeforeSaveDataAsync.bind(t));e.anticipate(this.onSaveDataAsync.bind(this));for(const t of s)e.anticipate(t.onSaveDataAsync.bind(t));e.anticipate(this.onAfterSaveDataAsync.bind(this));for(const t of s)e.anticipate(t.onAfterSaveDataAsync.bind(t));e.wait(t=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} saveDataAsync() complete.`),this.lastSaveDataTimestamp=this.fable.log.getTimeStamp(),i(t)))}onAfterSaveDataAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterSaveDataAsync:`),t()}onBeforeInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeInitialize:`),!0}onBeforeInitializeAsync(t){return this.onBeforeInitialize(),t()}onInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onInitialize:`),!0}onInitializeAsync(t){return this.onInitialize(),t()}initialize(){if(this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} initialize:`),this.initializeTimestamp)return this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} initialize called but initialization is already completed. Aborting.`),!1;{if(this.onBeforeInitialize(),"ConfigurationOnlyViews"in this.options)for(let t=0;t<this.options.ConfigurationOnlyViews.length;t++){let e=void 0===this.options.ConfigurationOnlyViews[t].ViewIdentifier?`AutoView-${this.fable.getUUID()}`:this.options.ConfigurationOnlyViews[t].ViewIdentifier;this.log.info(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} adding configuration only view: ${e}`),this.pict.addView(e,this.options.ConfigurationOnlyViews[t])}this.onInitialize();let t=Object.keys(this.pict.providers),e=[];for(let i=0;i<t.length;i++){let o=this.pict.providers[t[i]];o.options.AutoInitialize&&e.push(o)}e.sort((t,e)=>t.options.AutoInitializeOrdinal-e.options.AutoInitializeOrdinal);for(let t=0;t<e.length;t++)e[t].initialize();let i=Object.keys(this.pict.views),o=[];for(let t=0;t<i.length;t++){let e=this.pict.views[i[t]];e.options.AutoInitialize&&o.push(e)}o.sort((t,e)=>t.options.AutoInitializeOrdinal-e.options.AutoInitializeOrdinal);for(let t=0;t<o.length;t++)o[t].initialize();return this.onAfterInitialize(),this.options.AutoSolveAfterInitialize&&(this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto solving after initialization...`),this.solve()),this.options.AutoRenderMainViewportViewAfterInitialize&&(this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto rendering after initialization...`),this.render()),this.initializeTimestamp=this.fable.log.getTimeStamp(),this.onCompletionOfInitialize(),!0}}initializeAsync(t){this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} initializeAsync:`);let e="function"==typeof t&&t;if(e||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} initializeAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),e=t=>{t&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} initializeAsync Auto Callback Error: ${t}`,t)}),this.initializeTimestamp)return this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} async initialize called but initialization is already completed. Aborting.`),this.onCompletionOfInitializeAsync(e);{let t=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate");if(this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} beginning initialization...`),"ConfigurationOnlyViews"in this.options)for(let t=0;t<this.options.ConfigurationOnlyViews.length;t++){let e=void 0===this.options.ConfigurationOnlyViews[t].ViewIdentifier?`AutoView-${this.fable.getUUID()}`:this.options.ConfigurationOnlyViews[t].ViewIdentifier;this.log.info(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} adding configuration only view: ${e}`),this.pict.addView(e,this.options.ConfigurationOnlyViews[t])}t.anticipate(this.onBeforeInitializeAsync.bind(this)),t.anticipate(this.onInitializeAsync.bind(this));let i=Object.keys(this.pict.providers),o=[];for(let t=0;t<i.length;t++){let e=this.pict.providers[i[t]];e.options.AutoInitialize&&o.push(e)}o.sort((t,e)=>t.options.AutoInitializeOrdinal-e.options.AutoInitializeOrdinal);for(let e=0;e<o.length;e++)t.anticipate(o[e].initializeAsync.bind(o[e]));let s=Object.keys(this.pict.views),n=[];for(let t=0;t<s.length;t++){let e=this.pict.views[s[t]];e.options.AutoInitialize&&n.push(e)}n.sort((t,e)=>t.options.AutoInitializeOrdinal-e.options.AutoInitializeOrdinal);for(let e=0;e<n.length;e++){let i=n[e];t.anticipate(i.initializeAsync.bind(i))}t.anticipate(this.onAfterInitializeAsync.bind(this)),this.options.AutoLoginAfterInitialize&&(this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto login (asynchronously) after initialization...`),t.anticipate(this.loginAsync.bind(this))),this.options.AutoSolveAfterInitialize&&(this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto solving (asynchronously) after initialization...`),t.anticipate(this.solveAsync.bind(this))),this.options.AutoRenderMainViewportViewAfterInitialize&&(this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto rendering (asynchronously) after initialization...`),t.anticipate(this.renderMainViewportAsync.bind(this))),t.wait(t=>(t&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} initializeAsync Error: ${t.message||t}`,{stack:t.stack}),this.initializeTimestamp=this.fable.log.getTimeStamp(),this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} initialization complete.`),e()))}}onAfterInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterInitialize:`),!0}onAfterInitializeAsync(t){return this.onAfterInitialize(),t()}onCompletionOfInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onCompletionOfInitialize:`),!0}onCompletionOfInitializeAsync(t){return this.onCompletionOfInitialize(),t()}onBeforeMarshalFromViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeMarshalFromViews:`),!0}onBeforeMarshalFromViewsAsync(t){return this.onBeforeMarshalFromViews(),t()}onMarshalFromViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onMarshalFromViews:`),!0}onMarshalFromViewsAsync(t){return this.onMarshalFromViews(),t()}marshalFromViews(){this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} executing marshalFromViews() function...`),this.onBeforeMarshalFromViews();let t=Object.keys(this.pict.views),e=[];for(let i=0;i<t.length;i++){let o=this.pict.views[t[i]];e.push(o)}for(let t=0;t<e.length;t++)e[t].marshalFromView();return this.onMarshalFromViews(),this.onAfterMarshalFromViews(),this.lastMarshalFromViewsTimestamp=this.fable.log.getTimeStamp(),!0}marshalFromViewsAsync(t){let e=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate"),i="function"==typeof t&&t;i||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalFromViewsAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),i=t=>{t&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalFromViewsAsync Auto Callback Error: ${t}`,t)}),e.anticipate(this.onBeforeMarshalFromViewsAsync.bind(this));let o=Object.keys(this.pict.views),s=[];for(let t=0;t<o.length;t++){let e=this.pict.views[o[t]];s.push(e)}for(let t=0;t<s.length;t++)e.anticipate(s[t].marshalFromViewAsync.bind(s[t]));e.anticipate(this.onMarshalFromViewsAsync.bind(this)),e.anticipate(this.onAfterMarshalFromViewsAsync.bind(this)),e.wait(t=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalFromViewsAsync() complete.`),this.lastMarshalFromViewsTimestamp=this.fable.log.getTimeStamp(),i(t)))}onAfterMarshalFromViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterMarshalFromViews:`),!0}onAfterMarshalFromViewsAsync(t){return this.onAfterMarshalFromViews(),t()}onBeforeMarshalToViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeMarshalToViews:`),!0}onBeforeMarshalToViewsAsync(t){return this.onBeforeMarshalToViews(),t()}onMarshalToViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onMarshalToViews:`),!0}onMarshalToViewsAsync(t){return this.onMarshalToViews(),t()}marshalToViews(){this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} executing marshalToViews() function...`),this.onBeforeMarshalToViews();let t=Object.keys(this.pict.views),e=[];for(let i=0;i<t.length;i++){let o=this.pict.views[t[i]];e.push(o)}for(let t=0;t<e.length;t++)e[t].marshalToView();return this.onMarshalToViews(),this.onAfterMarshalToViews(),this.lastMarshalToViewsTimestamp=this.fable.log.getTimeStamp(),!0}marshalToViewsAsync(t){let e=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate"),i="function"==typeof t&&t;i||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalToViewsAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),i=t=>{t&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalToViewsAsync Auto Callback Error: ${t}`,t)}),e.anticipate(this.onBeforeMarshalToViewsAsync.bind(this));let o=Object.keys(this.pict.views),s=[];for(let t=0;t<o.length;t++){let e=this.pict.views[o[t]];s.push(e)}for(let t=0;t<s.length;t++)e.anticipate(s[t].marshalToViewAsync.bind(s[t]));e.anticipate(this.onMarshalToViewsAsync.bind(this)),e.anticipate(this.onAfterMarshalToViewsAsync.bind(this)),e.wait(t=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalToViewsAsync() complete.`),this.lastMarshalToViewsTimestamp=this.fable.log.getTimeStamp(),i(t)))}onAfterMarshalToViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterMarshalToViews:`),!0}onAfterMarshalToViewsAsync(t){return this.onAfterMarshalToViews(),t()}onBeforeRender(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeRender:`),!0}onBeforeRenderAsync(t){return this.onBeforeRender(),t()}render(t,e,i,o){let s="string"!=typeof t?this.options.MainViewportViewIdentifier:t,n="string"!=typeof e?this.options.MainViewportRenderableHash:e,r="string"!=typeof i?this.options.MainViewportDestinationAddress:i,a="string"!=typeof o?this.options.MainViewportDefaultDataAddress:o;this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} VIEW Renderable[${n}] Destination[${r}] TemplateDataAddress[${a}] render:`),this.onBeforeRender();let l="string"==typeof s&&this.servicesMap.PictView[s];return l?(this.onRender(),l.render(n,r,a),this.onAfterRender(),!0):(this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} could not render from View ${s} because it is not a valid view.`),!1)}onRender(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onRender:`),!0}onRenderAsync(t){return this.onRender(),t()}renderAsync(t,e,i,o,s){let n="string"!=typeof t?this.options.MainViewportViewIdentifier:t,r="string"!=typeof e?this.options.MainViewportRenderableHash:e,a="string"!=typeof i?this.options.MainViewportDestinationAddress:i,l="string"!=typeof o?this.options.MainViewportDefaultDataAddress:o,c="function"==typeof s?s:"function"==typeof o?o:"function"==typeof i?i:"function"==typeof e?e:"function"==typeof t&&t;c||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),c=t=>{t&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAsync Auto Callback Error: ${t}`,t)}),this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} VIEW Renderable[${r}] Destination[${a}] TemplateDataAddress[${l}] renderAsync:`);let d=this.fable.newAnticipate();d.anticipate(this.onBeforeRenderAsync.bind(this));let h="string"==typeof n&&this.servicesMap.PictView[n];if(!h){let t=`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} could not asynchronously render from View ${n} because it is not a valid view.`;return this.pict.LogNoisiness>3&&this.log.error(t),c(new Error(t))}return d.anticipate(this.onRenderAsync.bind(this)),d.anticipate(t=>{h.renderAsync.call(h,r,a,l,t)}),d.anticipate(this.onAfterRenderAsync.bind(this)),d.wait(c)}onAfterRender(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterRender:`),!0}onAfterRenderAsync(t){return this.onAfterRender(),t()}renderMainViewport(){return this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderMainViewport:`),this.render()}renderMainViewportAsync(t){return this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderMainViewportAsync:`),this.renderAsync(t)}renderAutoViews(){this.pict.LogNoisiness>0&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} beginning renderAutoViews...`);let t=Object.keys(this.pict.views);t.sort((t,e)=>this.pict.views[t].options.AutoRenderOrdinal-this.pict.views[e].options.AutoRenderOrdinal);for(let e=0;e<t.length;e++){let i=this.pict.views[t[e]];i.options.AutoRender&&i.render()}this.pict.LogNoisiness>0&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAutoViewsAsync complete.`)}renderAutoViewsAsync(t){let e=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate"),i="function"==typeof t&&t;i||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAutoViewsAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),i=t=>{t&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAutoViewsAsync Auto Callback Error: ${t}`,t)}),this.pict.LogNoisiness>0&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} beginning renderAutoViewsAsync...`);let o=Object.keys(this.pict.views);o.sort((t,e)=>this.pict.views[t].options.AutoRenderOrdinal-this.pict.views[e].options.AutoRenderOrdinal);for(let t=0;t<o.length;t++){let i=this.pict.views[o[t]];i.options.AutoRender&&e.anticipate(i.renderAsync.bind(i))}e.wait(t=>(this.lastAutoRenderTimestamp=this.fable.log.getTimeStamp(),this.pict.LogNoisiness>0&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAutoViewsAsync complete.`),i(t)))}get isPictApplication(){return!0}}},{"../package.json":3,"fable-serviceproviderbase":2}],5:[function(t,e,i){e.exports={name:"pict-provider",version:"1.0.12",description:"Pict Provider Base Class",main:"source/Pict-Provider.js",scripts:{start:"node source/Pict-Provider.js",test:"npx quack test",tests:"npx quack test -g",coverage:"npx quack coverage",build:"npx quack build","docker-dev-build":"docker build ./ -f Dockerfile_LUXURYCode -t pict-provider-image:local","docker-dev-run":'docker run -it -d --name pict-provider-dev -p 24125:8080 -p 30027:8086 -v "$PWD/.config:/home/coder/.config" -v "$PWD:/home/coder/pict-provider" -u "$(id -u):$(id -g)" -e "DOCKER_USER=$USER" pict-provider-image:local',"docker-dev-shell":"docker exec -it pict-provider-dev /bin/bash",lint:"eslint source/**",types:"tsc -p ."},types:"types/source/Pict-Provider.d.ts",repository:{type:"git",url:"git+https://github.com/stevenvelozo/pict-provider.git"},author:"steven velozo <steven@velozo.com>",license:"MIT",bugs:{url:"https://github.com/stevenvelozo/pict-provider/issues"},homepage:"https://github.com/stevenvelozo/pict-provider#readme",devDependencies:{"@eslint/js":"^9.39.1",eslint:"^9.39.1",pict:"^1.0.351",quackage:"^1.0.58",typescript:"^5.9.3"},dependencies:{"fable-serviceproviderbase":"^3.0.19"},mocha:{diff:!0,extension:["js"],package:"./package.json",reporter:"spec",slow:"75",timeout:"5000",ui:"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]}}},{}],6:[function(t,e,i){const o=t("fable-serviceproviderbase"),s=t("../package.json"),n={ProviderIdentifier:!1,AutoInitialize:!0,AutoInitializeOrdinal:0,AutoLoadDataWithApp:!0,AutoLoadDataOrdinal:0,AutoSolveWithApp:!0,AutoSolveOrdinal:0,Manifests:{},Templates:[]};e.exports=class extends o{constructor(t,e,i){super(t,Object.assign({},JSON.parse(JSON.stringify(n)),e),i),this.fable,this.pict,this.log,this.options,this.UUID,this.Hash,this.options.ProviderIdentifier||(this.options.ProviderIdentifier=`AutoProviderID-${this.fable.getUUID()}`),this.serviceType="PictProvider",this._Package=s,this.pict=this.fable,this.AppData=this.pict.AppData,this.Bundle=this.pict.Bundle,this.initializeTimestamp=!1,this.lastSolvedTimestamp=!1;for(let t=0;t<this.options.Templates.length;t++){let e=this.options.Templates[t];e.hasOwnProperty("Postfix")&&e.hasOwnProperty("Template")?(e.Source||(e.Source=`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} options object.`),this.pict.TemplateProvider.addDefaultTemplate(e.Prefix,e.Postfix,e.Template,e.Source)):this.log.error(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} could not load Default Template ${t} in the options array.`,e)}}onBeforeInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onBeforeInitialize:`),!0}onBeforeInitializeAsync(t){return this.onBeforeInitialize(),t()}onInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onInitialize:`),!0}onInitializeAsync(t){return this.onInitialize(),t()}initialize(){return this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow PROVIDER [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} initialize:`),this.initializeTimestamp?(this.log.warn(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} initialize called but initialization is already completed. Aborting.`),!1):(this.onBeforeInitialize(),this.onInitialize(),this.onAfterInitialize(),this.initializeTimestamp=this.pict.log.getTimeStamp(),!0)}initializeAsync(t){if(this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow PROVIDER [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} initializeAsync:`),this.initializeTimestamp)return this.log.warn(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} async initialize called but initialization is already completed. Aborting.`),t();{let e=this.pict.instantiateServiceProviderWithoutRegistration("Anticipate");this.pict.LogNoisiness>0&&this.log.info(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} beginning initialization...`),e.anticipate(this.onBeforeInitializeAsync.bind(this)),e.anticipate(this.onInitializeAsync.bind(this)),e.anticipate(this.onAfterInitializeAsync.bind(this)),e.wait(e=>(this.initializeTimestamp=this.pict.log.getTimeStamp(),e?this.log.error(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} initialization failed: ${e.message||e}`,{Stack:e.stack}):this.pict.LogNoisiness>0&&this.log.info(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} initialization complete.`),t()))}}onAfterInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onAfterInitialize:`),!0}onAfterInitializeAsync(t){return this.onAfterInitialize(),t()}onPreRender(){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onPreRender:`),!0}onPreRenderAsync(t){return this.onPreRender(),t()}render(){return this.onPreRender()}renderAsync(t){return this.onPreRender(),t()}onPreSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onPreSolve:`),!0}onPreSolveAsync(t){return this.onPreSolve(),t()}solve(){return this.onPreSolve()}solveAsync(t){return this.onPreSolve(),t()}onBeforeLoadDataAsync(t){return t()}onLoadDataAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onLoadDataAsync:`),t()}onAfterLoadDataAsync(t){return t()}onBeforeSaveDataAsync(t){return t()}onSaveDataAsync(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onSaveDataAsync:`),t()}onAfterSaveDataAsync(t){return t()}}},{"../package.json":5,"fable-serviceproviderbase":2}],7:[function(t,e,i){e.exports={RenderOnLoad:!0,DefaultRenderable:"Histogram-Wrap",DefaultDestinationAddress:"#Histogram-Container-Div",Templates:[{Hash:"Histogram-Container",Template:"\x3c!-- Histogram Container Rendering Soon --\x3e"}],Renderables:[{RenderableHash:"Histogram-Wrap",TemplateHash:"Histogram-Container",DestinationAddress:"#Histogram-Container-Div"}],TargetElementAddress:"#Histogram-Container-Div",DataAddress:!1,Bins:[],LabelProperty:"Label",ValueProperty:"Value",Orientation:"vertical",RenderMode:"browser",MaxBarSize:200,BarThickness:30,BarGap:4,FillContainer:!1,ShowValues:!0,ShowLabels:!0,LabelInterval:0,BarColor:"#4A90D9",SelectedBarColor:"#2ECC71",SelectionRangeColor:"#85C1E9",Selectable:!1,SelectionMode:"range",SelectionDataAddress:!1,InitialSelection:null,BarCharacter:"█",BarPartialCharacters:[" ","▁","▂","▃","▄","▅","▆","▇","█"],EmptyCharacter:" ",SliderCharacter:"│",SliderHandleCharacter:"◆",TextWidth:60,TextHeight:15,CSS:".pict-histogram-container\n{\n\tdisplay: inline-block;\n\tposition: relative;\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n\tfont-size: 12px;\n\tuser-select: none;\n}\n.pict-histogram-chart\n{\n\tdisplay: flex;\n\talign-items: flex-end;\n\tposition: relative;\n}\n.pict-histogram-container.pict-histogram-horizontal\n{\n\tdisplay: inline-flex;\n\tflex-direction: row;\n\talign-items: stretch;\n}\n.pict-histogram-chart.pict-histogram-horizontal\n{\n\tflex-direction: column;\n\talign-items: flex-start;\n}\n.pict-histogram-bar-group\n{\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tcursor: default;\n\tflex-shrink: 0;\n}\n.pict-histogram-horizontal .pict-histogram-bar-group\n{\n\tflex-direction: row;\n\talign-items: center;\n}\n.pict-histogram-bar\n{\n\ttransition: background-color 0.15s ease, height 0.2s ease, width 0.2s ease;\n\tborder-radius: 2px 2px 0 0;\n\tmin-width: 1px;\n\tmin-height: 1px;\n}\n.pict-histogram-horizontal .pict-histogram-bar\n{\n\tborder-radius: 0 2px 2px 0;\n}\n.pict-histogram-bar.pict-histogram-selectable\n{\n\tcursor: pointer;\n}\n.pict-histogram-bar.pict-histogram-selectable:hover\n{\n\topacity: 0.8;\n}\n.pict-histogram-bar.pict-histogram-selected\n{\n\tbox-shadow: 0 0 0 2px rgba(46, 204, 113, 0.4);\n}\n.pict-histogram-bar.pict-histogram-in-range\n{\n\topacity: 0.9;\n}\n.pict-histogram-value-label\n{\n\ttext-align: center;\n\tcolor: #666;\n\tfont-size: 11px;\n\tpadding: 2px 0;\n\twhite-space: nowrap;\n}\n.pict-histogram-horizontal .pict-histogram-value-label\n{\n\tpadding: 0 4px;\n}\n.pict-histogram-bin-label\n{\n\ttext-align: center;\n\tcolor: #333;\n\tfont-size: 11px;\n\tpadding: 4px 2px 0 2px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.pict-histogram-horizontal .pict-histogram-bin-label\n{\n\tpadding: 0 4px 0 0;\n\ttext-align: right;\n\tmin-width: 40px;\n}\n.pict-histogram-range-slider-container\n{\n\tposition: relative;\n\twidth: 100%;\n\theight: 24px;\n\tmargin-top: 4px;\n}\n.pict-histogram-horizontal .pict-histogram-range-slider-container\n{\n\twidth: 24px;\n\theight: auto;\n\talign-self: stretch;\n\tmargin-top: 0;\n\tmargin-left: 4px;\n}\n.pict-histogram-range-track\n{\n\tposition: absolute;\n\ttop: 10px;\n\tleft: 0;\n\tright: 0;\n\theight: 4px;\n\tbackground: #E0E0E0;\n\tborder-radius: 2px;\n}\n.pict-histogram-horizontal .pict-histogram-range-track\n{\n\ttop: 0;\n\tleft: 10px;\n\tright: auto;\n\tbottom: 0;\n\twidth: 4px;\n\theight: auto;\n}\n.pict-histogram-range-fill\n{\n\tposition: absolute;\n\ttop: 10px;\n\theight: 4px;\n\tbackground: #4A90D9;\n\tborder-radius: 2px;\n}\n.pict-histogram-horizontal .pict-histogram-range-fill\n{\n\ttop: auto;\n\tleft: 10px;\n\twidth: 4px;\n\theight: auto;\n}\n.pict-histogram-range-handle\n{\n\tposition: absolute;\n\ttop: 4px;\n\twidth: 16px;\n\theight: 16px;\n\tbackground: #fff;\n\tborder: 2px solid #4A90D9;\n\tborder-radius: 50%;\n\tcursor: grab;\n\tz-index: 2;\n\ttransform: translateX(-50%);\n}\n.pict-histogram-horizontal .pict-histogram-range-handle\n{\n\ttop: auto;\n\tleft: 4px;\n\ttransform: translateY(-50%);\n}\n.pict-histogram-range-handle:active\n{\n\tcursor: grabbing;\n\tbackground: #4A90D9;\n}\n.pict-histogram-range-handle:active,\n.pict-histogram-range-handle:focus\n{\n\tbox-shadow: 0 0 0 3px rgba(74, 144, 217, 0.3);\n\toutline: none;\n}\n.pict-histogram-container.pict-histogram-fill\n{\n\tdisplay: block;\n\twidth: 100%;\n}\n.pict-histogram-fill .pict-histogram-chart\n{\n\twidth: 100%;\n}\n.pict-histogram-fill .pict-histogram-bar-group\n{\n\tflex: 1 1 0%;\n\tmin-width: 0;\n}\n.pict-histogram-fill .pict-histogram-bar\n{\n\twidth: 100%;\n}\n.pict-histogram-axis-line\n{\n\twidth: 100%;\n\theight: 1px;\n\tbackground: #ccc;\n}\n.pict-histogram-label-row\n{\n\tdisplay: flex;\n\twidth: 100%;\n}\n.pict-histogram-fill-label\n{\n\tfont-size: 10px;\n\tcolor: #666;\n\ttext-align: center;\n\twhite-space: nowrap;\n\toverflow: visible;\n\tline-height: 16px;\n}\n"}},{}],8:[function(t,e,i){const o=t("pict-view"),s=t("./Pict-Section-Histogram-DefaultConfiguration.js"),n=t("./renderers/Pict-Histogram-Renderer-Browser.js"),r=t("./renderers/Pict-Histogram-Renderer-ConsoleUI.js"),a=t("./renderers/Pict-Histogram-Renderer-CLI.js");e.exports=class extends o{constructor(t,e,i){super(t,Object.assign({},s,e),i),this.initialRenderComplete=!1,this._selectedIndices=new Set,this._selectionRangeStart=0,this._selectionRangeEnd=0,this._renderer=this._resolveRenderer(),this._applyInitialSelection()}_applyInitialSelection(){if(this.options.InitialSelection)this.setSelection(this.options.InitialSelection);else if(this.options.Selectable&&"range"===this.options.SelectionMode){let t=this.getBins();this._selectionRangeStart=0,this._selectionRangeEnd=Math.max(0,t.length-1),this._syncSelectionFromRange()}}_resolveRenderer(){switch(this.options.RenderMode){case"consoleui":return r;case"cli":return a;default:return n}}getBins(){if(this.options.DataAddress){const t={Fable:this.fable,Pict:this.fable,AppData:this.AppData,Bundle:this.Bundle,Options:this.options};let e=this.fable.manifest.getValueByHash(t,this.options.DataAddress);if(Array.isArray(e))return e;this.log.warn(`PICT-Histogram DataAddress [${this.options.DataAddress}] did not return an array.`)}return this.options.Bins||[]}setBins(t){if(Array.isArray(t)){if(this.options.Bins=t,this.options.DataAddress){const e={Fable:this.fable,Pict:this.fable,AppData:this.AppData,Bundle:this.Bundle,Options:this.options};this.fable.manifest.setValueByHash(e,this.options.DataAddress,t)}}else this.log.warn("PICT-Histogram setBins requires an array.")}isIndexSelected(t){return!!this.options.Selectable&&("range"===this.options.SelectionMode?t===this._selectionRangeStart||t===this._selectionRangeEnd:this._selectedIndices.has(t))}isIndexInRange(t){return!(!this.options.Selectable||"range"!==this.options.SelectionMode)&&(t>this._selectionRangeStart&&t<this._selectionRangeEnd)}getSelection(){if("range"===this.options.SelectionMode){let t=this.getBins(),e=[];for(let t=this._selectionRangeStart;t<=this._selectionRangeEnd;t++)e.push(t);return{Mode:"range",RangeStart:this._selectionRangeStart,RangeEnd:this._selectionRangeEnd,SelectedIndices:e,StartLabel:(t[this._selectionRangeStart]||{})[this.options.LabelProperty],EndLabel:(t[this._selectionRangeEnd]||{})[this.options.LabelProperty]}}return{Mode:this.options.SelectionMode,SelectedIndices:Array.from(this._selectedIndices).sort((t,e)=>t-e)}}setSelection(t){"range"===this.options.SelectionMode?t&&"number"==typeof t.Start&&"number"==typeof t.End&&(this._selectionRangeStart=t.Start,this._selectionRangeEnd=t.End,this._syncSelectionFromRange()):Array.isArray(t)&&(this._selectedIndices=new Set(t)),this._writeSelectionToAddress()}handleBarClick(t){"single"===this.options.SelectionMode?(this._selectedIndices.clear(),this._selectedIndices.add(t)):"multiple"===this.options.SelectionMode&&(this._selectedIndices.has(t)?this._selectedIndices.delete(t):this._selectedIndices.add(t)),this._writeSelectionToAddress(),this.onSelectionChange(this.getSelection()),this.renderHistogram()}handleRangeBarClick(t){Math.abs(t-this._selectionRangeStart)<=Math.abs(t-this._selectionRangeEnd)?this._selectionRangeStart=Math.min(t,this._selectionRangeEnd):this._selectionRangeEnd=Math.max(t,this._selectionRangeStart),this._syncSelectionFromRange(),this._writeSelectionToAddress(),this.onSelectionChange(this.getSelection()),this.renderHistogram()}_syncSelectionFromRange(){this._selectedIndices.clear();for(let t=this._selectionRangeStart;t<=this._selectionRangeEnd;t++)this._selectedIndices.add(t)}_writeSelectionToAddress(){if(!this.options.SelectionDataAddress)return;const t={Fable:this.fable,Pict:this.fable,AppData:this.AppData,Bundle:this.Bundle,Options:this.options};this.fable.manifest.setValueByHash(t,this.options.SelectionDataAddress,this.getSelection())}onSelectionChange(t){}onBeforeInitialize(){return super.onBeforeInitialize(),super.onBeforeInitialize()}onAfterRender(t){return this.pict.CSSMap.injectCSS(),this.initialRenderComplete||(this.onAfterInitialRender(),this.initialRenderComplete=!0),super.onAfterRender(t)}onAfterInitialRender(){this.renderHistogram()}renderHistogram(){this.pict.CSSMap&&this.pict.CSSMap.injectCSS(),this._renderer.render(this),this._renderer.wireEvents(this),this.initialRenderComplete=!0}marshalToView(){super.marshalToView(),this.initialRenderComplete&&this.renderHistogram()}marshalFromView(){super.marshalFromView(),this._writeSelectionToAddress()}setOrientation(t){"vertical"===t||"horizontal"===t?(this.options.Orientation=t,this.initialRenderComplete&&this.renderHistogram()):this.log.warn(`PICT-Histogram invalid orientation: ${t}`)}setRenderMode(t){this.options.RenderMode=t,this._renderer=this._resolveRenderer(),this.initialRenderComplete&&this.renderHistogram()}toText(){return"vertical"===this.options.Orientation?r.renderVertical(this):r.renderHorizontal(this)}},e.exports.default_configuration=s,e.exports.renderers={browser:n,consoleui:r,cli:a}},{"./Pict-Section-Histogram-DefaultConfiguration.js":7,"./renderers/Pict-Histogram-Renderer-Browser.js":9,"./renderers/Pict-Histogram-Renderer-CLI.js":10,"./renderers/Pict-Histogram-Renderer-ConsoleUI.js":11,"pict-view":13}],9:[function(t,e,i){function o(t,e,i,o,s,n,r){let a=t[o.LabelProperty]||"",l=t[o.ValueProperty]||0,c="vertical"===o.Orientation,d=s?o.SelectedBarColor:n?o.SelectionRangeColor:o.BarColor,h=o.Selectable?" pict-histogram-selectable":"",p=s?" pict-histogram-selected":"",u=n?" pict-histogram-in-range":"",m=o.FillContainer,g="";g=c?m?`height:${i}px;background-color:${d};`:`height:${i}px;width:${o.BarThickness}px;background-color:${d};`:m?`width:${i}px;background-color:${d};`:`width:${i}px;height:${o.BarThickness}px;background-color:${d};`;let f=o.BarThickness+o.BarGap,v="";v=m?"":c?`margin:0 ${o.BarGap/2}px;width:${f}px;`:`margin:${o.BarGap/2}px 0;`;let b=`<div class="pict-histogram-bar-group" style="${v}" data-histogram-index="${e}">`;if(c)o.ShowValues&&!m&&(b+=`<div class="pict-histogram-value-label" style="width:${f}px;">${l}</div>`),b+=`<div class="pict-histogram-bar${h}${p}${u}" style="${g}" data-histogram-index="${e}"></div>`,o.ShowLabels&&!m&&(b+=`<div class="pict-histogram-bin-label" style="width:${f}px;">${a}</div>`);else{if(o.ShowLabels){b+=`<div class="pict-histogram-bin-label" style="${r?`width:${r}px;min-width:${r}px;`:""}">${a}</div>`}b+=`<div class="pict-histogram-bar${h}${p}${u}" style="${g}" data-histogram-index="${e}"></div>`,o.ShowValues&&(b+=`<div class="pict-histogram-value-label">${l}</div>`)}return b+="</div>",b}function s(t,e,i){let o=e.getAttribute("data-handle"),s="vertical"===t.options.Orientation,n=!1;function r(e){if(!n)return;let r=t.getBins();if(!r||0===r.length)return;let a=function(){let t=i.querySelector(".pict-histogram-range-slider-container");if(!t)return{start:0,size:1};let e=t.getBoundingClientRect();return s?{start:e.left,size:e.width||1}:{start:e.top,size:e.height||1}}(),l=((s?e.clientX:e.clientY)-a.start)/a.size;l=Math.max(0,Math.min(1,l));let c=Math.round(l*(r.length-1));"start"===o?(c>t._selectionRangeEnd&&(c=t._selectionRangeEnd),t._selectionRangeStart=c):(c<t._selectionRangeStart&&(c=t._selectionRangeStart),t._selectionRangeEnd=c),t._syncSelectionFromRange(),t.renderHistogram()}function a(){n&&(n=!1,"undefined"!=typeof document&&(document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",a)))}e.addEventListener("mousedown",t=>{t.preventDefault(),n=!0,"undefined"!=typeof document&&(document.addEventListener("mousemove",r),document.addEventListener("mouseup",a))})}e.exports={render:function(t){let e=t.getBins();if(!e||0===e.length)return void t.services.ContentAssignment.assignContent(t.options.TargetElementAddress,'<div class="pict-histogram-container"><em>No histogram data</em></div>');let i=0;for(let o=0;o<e.length;o++){let s=e[o][t.options.ValueProperty]||0;s>i&&(i=s)}0===i&&(i=1);let s="vertical"===t.options.Orientation,n=s?"pict-histogram-vertical":"pict-histogram-horizontal",r=t.options.FillContainer?" pict-histogram-fill":"",a=0;if(!s&&t.options.ShowLabels&&!t.options.FillContainer){for(let i=0;i<e.length;i++){let o=6.5*String(e[i][t.options.LabelProperty]||"").length+8;o>a&&(a=o)}a=Math.max(a,40)}let l=`<div class="pict-histogram-container ${n}${r}">`;l+=`<div class="pict-histogram-chart ${n}${r}">`;for(let s=0;s<e.length;s++){let n=e[s][t.options.ValueProperty]||0,r=Math.round(n/i*t.options.MaxBarSize);n>0&&r<1&&(r=1);let c=t.isIndexSelected(s),d=!c&&t.isIndexInRange(s);l+=o(e[s],s,r,t.options,c,d,a)}l+="</div>",t.options.FillContainer&&s&&t.options.ShowLabels&&(l+='<div class="pict-histogram-axis-line"></div>',l+=function(t,e){if(!e||0===e.length)return"";let i=t.options.LabelInterval||0;if(i<=0){let o=t.services.ContentAssignment.getElement(t.options.TargetElementAddress),s=800;if(o&&o.length>0&&o[0]&&(s=o[0].clientWidth||800),e.length>0){let t=s/e.length;i=Math.max(1,Math.ceil(80/t))}else i=1}let o='<div class="pict-histogram-label-row">';for(let s=0;s<e.length;s++)if(s%i===0){let n=e[s][t.options.LabelProperty]||"",r=Math.min(i,e.length-s);o+=`<div class="pict-histogram-fill-label" style="flex:${r};">${n}</div>`,s+=r-1}return o+="</div>",o}(t,e)),t.options.Selectable&&"range"===t.options.SelectionMode&&(l+=function(t){let e=t.getBins();if(!e||0===e.length)return"";let i=t._selectionRangeStart,o=t._selectionRangeEnd,s=e.length-1,n=s>0?i/s*100:0,r=s>0?o/s*100:100,a='<div class="pict-histogram-range-slider-container">';return a+='<div class="pict-histogram-range-track"></div>',"vertical"===t.options.Orientation?(a+=`<div class="pict-histogram-range-fill" style="left:${n}%;right:${100-r}%;"></div>`,a+=`<div class="pict-histogram-range-handle pict-histogram-range-handle-start" tabindex="0" style="left:${n}%;" data-handle="start"></div>`,a+=`<div class="pict-histogram-range-handle pict-histogram-range-handle-end" tabindex="0" style="left:${r}%;" data-handle="end"></div>`):(a+=`<div class="pict-histogram-range-fill" style="top:${n}%;bottom:${100-r}%;"></div>`,a+=`<div class="pict-histogram-range-handle pict-histogram-range-handle-start" tabindex="0" style="top:${n}%;" data-handle="start"></div>`,a+=`<div class="pict-histogram-range-handle pict-histogram-range-handle-end" tabindex="0" style="top:${r}%;" data-handle="end"></div>`),a+="</div>",a}(t)),l+="</div>",t.services.ContentAssignment.assignContent(t.options.TargetElementAddress,l)},wireEvents:function(t){if(!t.options.Selectable)return;let e=t.services.ContentAssignment.getElement(t.options.TargetElementAddress);if(!e||e.length<1)return;let i=e[0];if(i){if("single"===t.options.SelectionMode||"multiple"===t.options.SelectionMode){let e=i.querySelectorAll(".pict-histogram-bar[data-histogram-index]");for(let i=0;i<e.length;i++)e[i].addEventListener("click",e=>{let i=parseInt(e.currentTarget.getAttribute("data-histogram-index"),10);isNaN(i)||t.handleBarClick(i)})}if("range"===t.options.SelectionMode){let e=i.querySelectorAll(".pict-histogram-bar[data-histogram-index]");for(let i=0;i<e.length;i++)e[i].addEventListener("click",e=>{let i=parseInt(e.currentTarget.getAttribute("data-histogram-index"),10);isNaN(i)||t.handleRangeBarClick(i)});let o=i.querySelectorAll(".pict-histogram-range-handle");for(let e=0;e<o.length;e++)s(t,o[e],i)}}}}},{}],10:[function(t,e,i){(function(t){(function(){const i={black:"",red:"",green:"",yellow:"",blue:"",magenta:"",cyan:"",white:"",reset:"",bold:"",dim:""};function o(t){if(!t)return i.blue;let e=t.toLowerCase();if(i[e])return i[e];if("#"===e.charAt(0)&&e.length>=7){let t=parseInt(e.substring(1,3),16),o=parseInt(e.substring(3,5),16),s=parseInt(e.substring(5,7),16);if(o>t&&o>s)return i.green;if(t>o&&t>s)return i.red;if(s>t&&s>o)return i.blue;if(t>200&&o>200)return i.yellow;if(t>200&&s>200)return i.magenta;if(o>200&&s>200)return i.cyan}return i.blue}function s(t){let e=t.getBins(),s=t.options,n=s.TextHeight||15,a=s.BarCharacter,c=s.BarPartialCharacters,d=o(s.BarColor),h=o(s.SelectedBarColor),p=o(s.SelectionRangeColor),u=i.reset;if(!e||0===e.length)return"(no data)\n";let m=0;for(let t=0;t<e.length;t++){let i=e[t][s.ValueProperty]||0;i>m&&(m=i)}0===m&&(m=1);let g=String(m).length+1,f=[];for(let o=n;o>=1;o--){let l="";o===n?l+=i.dim+r(String(m),g)+"|"+u:1===o?l+=i.dim+r("0",g)+"|"+u:o===Math.ceil(n/2)?l+=i.dim+r(String(Math.round(m/2)),g)+"|"+u:l+=i.dim+r("",g)+"|"+u;for(let i=0;i<e.length;i++){let r=(e[i][s.ValueProperty]||0)/m*n,g=Math.floor(r),f=r-g,v=t.isIndexSelected(i),b=!v&&t.isIndexInRange(i),y=v?h:b?p:d,w=" ";if(o<=g)w=a;else if(o===g+1&&f>0){w=c[Math.round(f*(c.length-1))]}l+=" "!==w?" "+y+w+w+w+u:" "}f.push(l)}let v=i.dim+r("",g)+"+";for(let t=0;t<e.length;t++)v+="----";if(v+=u,f.push(v),s.ShowLabels){let t=r("",g)+" ";for(let i=0;i<e.length;i++){t+=l(String(e[i][s.LabelProperty]||"").substring(0,4),4)}f.push(t)}if(s.Selectable&&"range"===s.SelectionMode){let o=t._selectionRangeStart,n=t._selectionRangeEnd,r=e[o]?e[o][s.LabelProperty]:o,a=e[n]?e[n][s.LabelProperty]:n;f.push(""),f.push(i.bold+" Selection: "+r+" - "+a+u)}return f.join("\n")+"\n"}function n(t){let e=t.getBins(),s=t.options,n=s.TextWidth||60,r=s.BarCharacter,l=o(s.BarColor),c=o(s.SelectedBarColor),d=o(s.SelectionRangeColor),h=i.reset;if(!e||0===e.length)return"(no data)\n";let p=0,u=0;for(let t=0;t<e.length;t++){let i=e[t][s.ValueProperty]||0;i>p&&(p=i);let o=String(e[t][s.LabelProperty]||"");o.length>u&&(u=o.length)}0===p&&(p=1);let m=Math.min(u,12),g=n-m-String(p).length-4;g<10&&(g=10);let f=[];for(let o=0;o<e.length;o++){let n=e[o][s.ValueProperty]||0,u=String(e[o][s.LabelProperty]||""),v=Math.round(n/p*g),b=t.isIndexSelected(o),y=!b&&t.isIndexInRange(o),w=b?c:y?d:l,A="";for(let t=0;t<v;t++)A+=r;let S=i.dim+a(u.substring(0,m),m)+" |"+h;S+=w+A+h,S+=" "+n,b?S+=i.bold+" *"+h:y&&(S+=i.dim+" ~"+h),f.push(S)}if(s.Selectable&&"range"===s.SelectionMode){let o=t._selectionRangeStart,n=t._selectionRangeEnd,r=e[o]?e[o][s.LabelProperty]:o,a=e[n]?e[n][s.LabelProperty]:n;f.push(""),f.push(i.bold+" Selection: "+r+" - "+a+h)}return f.join("\n")+"\n"}function r(t,e){let i=String(t);for(;i.length<e;)i=" "+i;return i}function a(t,e){let i=String(t);for(;i.length<e;)i+=" ";return i}function l(t,e){let i=String(t);for(;i.length<e;)i=i.length%2==0?i+" ":" "+i;return i}e.exports={render:function(e){let i;i="vertical"===e.options.Orientation?s(e):n(e),e.services&&e.services.ContentAssignment?e.services.ContentAssignment.assignContent(e.options.TargetElementAddress,i):void 0!==t&&t.stdout&&t.stdout.write(i)},wireEvents:function(){},renderVertical:s,renderHorizontal:n,colorToAnsi:o,ANSI_COLORS:i}}).call(this)}).call(this,t("_process"))},{_process:14}],11:[function(t,e,i){function o(t){let e=t.getBins(),i=t.options,o=i.TextHeight||15,s=i.BarCharacter,r=i.BarPartialCharacters,l=i.EmptyCharacter;if(!e||0===e.length)return"(no data)";let c=0;for(let t=0;t<e.length;t++){let o=e[t][i.ValueProperty]||0;o>c&&(c=o)}0===c&&(c=1);let d=String(c).length+1,h=[];for(let a=o;a>=1;a--){let p="";a===o?p+=n(String(c),d)+"|":1===a?p+=n("0",d)+"|":a===Math.ceil(o/2)?p+=n(String(Math.round(c/2)),d)+"|":p+=n("",d)+"|";for(let n=0;n<e.length;n++){let d=(e[n][i.ValueProperty]||0)/c*o,h=Math.floor(d),u=d-h,m=l;if(a<=h)m=s;else if(a===h+1&&u>0){m=r[Math.round(u*(r.length-1))]}let g=t.isIndexSelected(n),f=!g&&t.isIndexInRange(n);g&&m!==l?m="*":f&&m!==l&&(m="#"),p+=" "+m+m+m}h.push(p)}let p=n("",d)+"+";for(let t=0;t<e.length;t++)p+="----";if(h.push(p),i.ShowLabels){let t=n("",d)+" ";for(let o=0;o<e.length;o++){t+=a(String(e[o][i.LabelProperty]||"").substring(0,4),4)}h.push(t)}if(i.Selectable&&"range"===i.SelectionMode){let i=n("",d)+" ";for(let o=0;o<e.length;o++)o===t._selectionRangeStart?i+=" [ ":o===t._selectionRangeEnd?i+=" ] ":o>t._selectionRangeStart&&o<t._selectionRangeEnd?i+=" - ":i+=" ";h.push(i)}return h.join("\n")}function s(t){let e=t.getBins(),i=t.options,o=i.TextWidth||60,s=i.BarCharacter,n=i.BarPartialCharacters;if(!e||0===e.length)return"(no data)";let a=0,l=0;for(let t=0;t<e.length;t++){let o=e[t][i.ValueProperty]||0;o>a&&(a=o);let s=String(e[t][i.LabelProperty]||"");s.length>l&&(l=s.length)}0===a&&(a=1);let c=Math.min(l,12),d=o-c-2;d<10&&(d=10);let h=[];for(let o=0;o<e.length;o++){let l=e[o][i.ValueProperty]||0,p=String(e[o][i.LabelProperty]||""),u=l/a*d,m=Math.floor(u),g=u-m,f="";for(let t=0;t<m;t++)f+=s;if(g>0&&m<d){f+=n[Math.round(g*(n.length-1))]}let v=t.isIndexSelected(o),b=!v&&t.isIndexInRange(o),y=v?"*":b?"~":"",w=i.ShowValues?" "+l:"",A=r(p.substring(0,c),c)+" |"+f+w+y;h.push(A)}return i.Selectable&&"range"===i.SelectionMode&&(h.push(""),h.push(r("",c)+" Range: ["+t._selectionRangeStart+" - "+t._selectionRangeEnd+"]")),h.join("\n")}function n(t,e){let i=String(t);for(;i.length<e;)i=" "+i;return i}function r(t,e){let i=String(t);for(;i.length<e;)i+=" ";return i}function a(t,e){let i=String(t);for(;i.length<e;)i=i.length%2==0?i+" ":" "+i;return i}e.exports={render:function(t){let e;e="vertical"===t.options.Orientation?o(t):s(t),t.services.ContentAssignment.assignContent(t.options.TargetElementAddress,e)},wireEvents:function(){},renderVertical:o,renderHorizontal:s}},{}],12:[function(t,e,i){e.exports={name:"pict-view",version:"1.0.67",description:"Pict View Base Class",main:"source/Pict-View.js",scripts:{test:"npx quack test",tests:"npx quack test -g",start:"node source/Pict-View.js",coverage:"npx quack coverage",build:"npx quack build","docker-dev-build":"docker build ./ -f Dockerfile_LUXURYCode -t pict-view-image:local","docker-dev-run":'docker run -it -d --name pict-view-dev -p 30001:8080 -p 38086:8086 -v "$PWD/.config:/home/coder/.config" -v "$PWD:/home/coder/pict-view" -u "$(id -u):$(id -g)" -e "DOCKER_USER=$USER" pict-view-image:local',"docker-dev-shell":"docker exec -it pict-view-dev /bin/bash",types:"tsc -p .",lint:"eslint source/**"},types:"types/source/Pict-View.d.ts",repository:{type:"git",url:"git+https://github.com/stevenvelozo/pict-view.git"},author:"steven velozo <steven@velozo.com>",license:"MIT",bugs:{url:"https://github.com/stevenvelozo/pict-view/issues"},homepage:"https://github.com/stevenvelozo/pict-view#readme",devDependencies:{"@eslint/js":"^9.39.1","browser-env":"^3.3.0",eslint:"^9.39.1",pict:"^1.0.348",quackage:"^1.0.58",typescript:"^5.9.3"},mocha:{diff:!0,extension:["js"],package:"./package.json",reporter:"spec",slow:"75",timeout:"5000",ui:"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]},dependencies:{fable:"^3.1.63","fable-serviceproviderbase":"^3.0.19"}}},{}],13:[function(t,e,i){const o=t("fable-serviceproviderbase"),s=t("../package.json"),n={DefaultRenderable:!1,DefaultDestinationAddress:!1,DefaultTemplateRecordAddress:!1,ViewIdentifier:!1,AutoInitialize:!0,AutoInitializeOrdinal:0,AutoRender:!0,AutoRenderOrdinal:0,AutoSolveWithApp:!0,AutoSolveOrdinal:0,CSSHash:!1,CSS:!1,CSSProvider:!1,CSSPriority:500,Templates:[],DefaultTemplates:[],Renderables:[],Manifests:{}};e.exports=class extends o{constructor(t,e,i){super(t,Object.assign({},JSON.parse(JSON.stringify(n)),e),i),this.fable,this.options,this.UUID,this.Hash,this.log;const o=this.Hash===this.UUID;this.UUID=`V-${this.UUID}`,o&&(this.Hash=this.UUID),this.options.ViewIdentifier||(this.options.ViewIdentifier=`AutoViewID-${this.fable.getUUID()}`),this.serviceType="PictView",this._Package=s,this.pict=this.fable,this.AppData=this.pict.AppData,this.Bundle=this.pict.Bundle,this.initializeTimestamp=!1,this.lastSolvedTimestamp=!1,this.lastRenderedTimestamp=!1,this.lastMarshalFromViewTimestamp=!1,this.lastMarshalToViewTimestamp=!1,this.pict.instantiateServiceProviderIfNotExists("TransactionTracking");for(let t=0;t<this.options.Templates.length;t++){let e=this.options.Templates[t];"Hash"in e&&"Template"in e?(e.Source||(e.Source=`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} options object.`),this.pict.TemplateProvider.addTemplate(e.Hash,e.Template,e.Source)):this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not load Template ${t} in the options array.`,e)}for(let t=0;t<this.options.DefaultTemplates.length;t++){let e=this.options.DefaultTemplates[t];"Postfix"in e&&"Template"in e?(e.Source||(e.Source=`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} options object.`),this.pict.TemplateProvider.addDefaultTemplate(e.Prefix,e.Postfix,e.Template,e.Source)):this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not load Default Template ${t} in the options array.`,e)}if(this.options.CSS){let t=this.options.CSSHash?this.options.CSSHash:`View-${this.options.ViewIdentifier}`,e=this.options.CSSProvider?this.options.CSSProvider:t;this.pict.CSSMap.addCSS(t,this.options.CSS,e,this.options.CSSPriority)}this.renderables={};for(let t=0;t<this.options.Renderables.length;t++){let e=this.options.Renderables[t];this.addRenderable(e)}}addRenderable(t,e,i,o,s){let n;if("object"==typeof t)n=t;else{n={RenderableHash:t,TemplateHash:e,DefaultTemplateRecordAddress:i,ContentDestinationAddress:o,RenderMethod:"string"!=typeof s?s:"replace"}}"string"!=typeof n.RenderableHash||"string"!=typeof n.TemplateHash?this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not load Renderable; RenderableHash or TemplateHash are invalid.`,n):(this.pict.LogNoisiness>0&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} adding renderable [${n.RenderableHash}] pointed to template ${n.TemplateHash}.`),this.renderables[n.RenderableHash]=n)}onBeforeInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeInitialize:`),!0}onBeforeInitializeAsync(t){return this.onBeforeInitialize(),t()}onInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onInitialize:`),!0}onInitializeAsync(t){return this.onInitialize(),t()}initialize(){return this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow VIEW [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} initialize:`),this.initializeTimestamp?(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} initialize called but initialization is already completed. Aborting.`),!1):(this.onBeforeInitialize(),this.onInitialize(),this.onAfterInitialize(),this.initializeTimestamp=this.pict.log.getTimeStamp(),!0)}initializeAsync(t){if(this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow VIEW [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} initializeAsync:`),this.initializeTimestamp)return this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} async initialize called but initialization is already completed. Aborting.`),t();{let e=this.pict.instantiateServiceProviderWithoutRegistration("Anticipate");this.pict.LogNoisiness>0&&this.log.info(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} beginning initialization...`),e.anticipate(this.onBeforeInitializeAsync.bind(this)),e.anticipate(this.onInitializeAsync.bind(this)),e.anticipate(this.onAfterInitializeAsync.bind(this)),e.wait(e=>(e&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} initialization failed: ${e.message||e}`,{stack:e.stack}),this.initializeTimestamp=this.pict.log.getTimeStamp(),this.pict.LogNoisiness>0&&this.log.info(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} initialization complete.`),t()))}}onAfterInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterInitialize:`),!0}onAfterInitializeAsync(t){return this.onAfterInitialize(),t()}onBeforeRender(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeRender:`),!0}onBeforeRenderAsync(t,e){return this.onBeforeRender(e),t()}onBeforeProject(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeProject:`),!0}onBeforeProjectAsync(t,e){return this.onBeforeProject(e),t()}buildRenderOptions(t,e,i){let o={Valid:!0};return o.RenderableHash="string"==typeof t?t:"string"==typeof this.options.DefaultRenderable&&this.options.DefaultRenderable,o.RenderableHash||(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not find a suitable RenderableHash ${o.RenderableHash} (param ${t}because it is not a valid renderable.`),o.Valid=!1),o.Renderable=this.renderables[o.RenderableHash],o.Renderable||(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${o.RenderableHash} (param ${t}) because it does not exist.`),o.Valid=!1),o.DestinationAddress="string"==typeof e?e:"string"==typeof o.Renderable.ContentDestinationAddress?o.Renderable.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress&&this.options.DefaultDestinationAddress,o.DestinationAddress||(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${o.RenderableHash} (param ${t}) because it does not have a valid destination address (param ${e}).`),o.Valid=!1),"object"==typeof i?(o.RecordAddress="Passed in as object",o.Record=i):(o.RecordAddress="string"==typeof i?i:"string"==typeof o.Renderable.DefaultTemplateRecordAddress?o.Renderable.DefaultTemplateRecordAddress:"string"==typeof this.options.DefaultTemplateRecordAddress&&this.options.DefaultTemplateRecordAddress,o.Record="string"==typeof o.RecordAddress?this.pict.DataProvider.getDataByAddress(o.RecordAddress):void 0),o}assignRenderContent(t,e,i){return this.pict.ContentAssignment.projectContent(t.RenderMethod,e,i,t.TestAddress)}render(t,e,i,o){return this.renderWithScope(this,t,e,i,o)}renderWithScope(t,e,i,o,s){let n,r,a,l="string"==typeof e?e:"string"==typeof this.options.DefaultRenderable&&this.options.DefaultRenderable;return l?("__Virtual"==l?n={RenderableHash:"__Virtual",TemplateHash:this.renderables[this.options.DefaultRenderable].TemplateHash,ContentDestinationAddress:"string"==typeof i?i:"string"==typeof n.ContentDestinationAddress?n.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null,RenderMethod:"virtual-assignment",TransactionHash:s&&s.TransactionHash,RootRenderableViewHash:s&&s.RootRenderableViewHash}:(n=Object.assign({},this.renderables[l]),n.ContentDestinationAddress="string"==typeof i?i:"string"==typeof n.ContentDestinationAddress?n.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null),n.TransactionHash||(n.TransactionHash=`ViewRender-V-${this.options.ViewIdentifier}-R-${l}-U-${this.pict.getUUID()}`,n.RootRenderableViewHash=this.Hash,this.pict.TransactionTracking.registerTransaction(n.TransactionHash)),n?n.ContentDestinationAddress?("object"==typeof o?(a=o,r="Passed in as object"):(r="string"==typeof o?o:"string"==typeof n.DefaultTemplateRecordAddress?n.DefaultTemplateRecordAddress:"string"==typeof this.options.DefaultTemplateRecordAddress&&this.options.DefaultTemplateRecordAddress,a="string"==typeof r?this.pict.DataProvider.getDataByAddress(r):void 0),this.onBeforeRender(n),this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow VIEW [${this.UUID}]::[${this.Hash}] Renderable[${l}] Destination[${n.ContentDestinationAddress}] TemplateRecordAddress[${r}] render:`),this.pict.LogNoisiness>0&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} Beginning Render of Renderable[${l}] to Destination [${n.ContentDestinationAddress}]...`),n.Content=this.pict.parseTemplateByHash(n.TemplateHash,a,null,[this],t,{RootRenderable:"object"==typeof s?s:n}),this.pict.LogNoisiness>0&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} Assigning Renderable[${l}] content length ${n.Content.length} to Destination [${n.ContentDestinationAddress}] using render method [${n.RenderMethod}].`),this.onBeforeProject(n),this.onProject(n),"virtual-assignment"!==n.RenderMethod&&(this.onAfterProject(n),this.onAfterRender(n)),!0):(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${l} (param ${e}) because it does not have a valid destination address.`),!1):(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${l} (param ${e}) because it does not exist.`),!1)):(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${l} (param ${e}) because it is not a valid renderable.`),!1)}renderAsync(t,e,i,o,s){return this.renderWithScopeAsync(this,t,e,i,o,s)}renderWithScopeAsync(t,e,i,o,s,n){let r,a,l,c="string"==typeof e?e:"string"==typeof this.options.DefaultRenderable&&this.options.DefaultRenderable,d="function"==typeof n?n:"function"==typeof o?o:"function"==typeof i?i:"function"==typeof e?e:"function"==typeof s?s:null;if(d||(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),d=t=>{t&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAsync Auto Callback Error: ${t}`,t)}),!c)return this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not asynchronously render ${c} (param ${e}because it is not a valid renderable.`),d(new Error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not asynchronously render ${c} (param ${e}because it is not a valid renderable.`));if("__Virtual"==c?r={RenderableHash:"__Virtual",TemplateHash:this.renderables[this.options.DefaultRenderable].TemplateHash,ContentDestinationAddress:"string"==typeof i?i:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null,RenderMethod:"virtual-assignment",TransactionHash:s&&"function"!=typeof s&&s.TransactionHash,RootRenderableViewHash:s&&"function"!=typeof s&&s.RootRenderableViewHash}:(r=Object.assign({},this.renderables[c]),r.ContentDestinationAddress="string"==typeof i?i:"string"==typeof r.ContentDestinationAddress?r.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null),r.TransactionHash||(r.TransactionHash=`ViewRender-V-${this.options.ViewIdentifier}-R-${c}-U-${this.pict.getUUID()}`,r.RootRenderableViewHash=this.Hash,this.pict.TransactionTracking.registerTransaction(r.TransactionHash)),!r)return this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${c} (param ${e}) because it does not exist.`),d(new Error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${c} (param ${e}) because it does not exist.`));if(!r.ContentDestinationAddress)return this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${c} (param ${e}) because it does not have a valid destination address.`),d(new Error(`Could not render ${c}`));"object"==typeof o?(l=o,a="Passed in as object"):(a="string"==typeof o?o:"string"==typeof r.DefaultTemplateRecordAddress?r.DefaultTemplateRecordAddress:"string"==typeof this.options.DefaultTemplateRecordAddress&&this.options.DefaultTemplateRecordAddress,l="string"==typeof a?this.pict.DataProvider.getDataByAddress(a):void 0),this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow VIEW [${this.UUID}]::[${this.Hash}] Renderable[${c}] Destination[${r.ContentDestinationAddress}] TemplateRecordAddress[${a}] renderAsync:`),this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} Beginning Asynchronous Render (callback-style)...`);let h=this.fable.newAnticipate();h.anticipate(t=>{this.onBeforeRenderAsync(t,r)}),h.anticipate(i=>{this.pict.parseTemplateByHash(r.TemplateHash,l,(t,o)=>t?(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render (asynchronously) ${c} (param ${e}) because it did not parse the template.`,t),i(t)):(r.Content=o,i()),[this],t,{RootRenderable:"object"==typeof s?s:r})}),h.anticipate(t=>{this.onBeforeProjectAsync(t,r)}),h.anticipate(t=>{this.onProjectAsync(t,r)}),"virtual-assignment"!==r.RenderMethod&&(h.anticipate(t=>{this.onAfterProjectAsync(t,r)}),h.anticipate(t=>{this.onAfterRenderAsync(t,r)})),h.wait(d)}renderDefaultAsync(t){this.renderAsync(t)}basicRender(t,e,i){return this.basicRenderWithScope(this,t,e,i)}basicRenderWithScope(t,e,i,o){let s=this.buildRenderOptions(e,i,o);return s.Valid?(this.assignRenderContent(s.Renderable,s.DestinationAddress,this.pict.parseTemplateByHash(s.Renderable.TemplateHash,s.Record,null,[this],t,{RootRenderable:s.Renderable})),!0):(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not perform a basic render of ${s.RenderableHash} because it is not valid.`),!1)}basicRenderAsync(t,e,i,o){return this.basicRenderWithScopeAsync(this,t,e,i,o)}basicRenderWithScopeAsync(t,e,i,o,s){let n="function"==typeof s?s:"function"==typeof o?o:"function"==typeof i?i:"function"==typeof e?e:null;n||(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} basicRenderAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),n=t=>{t&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} basicRenderAsync Auto Callback Error: ${t}`,t)});const r=this.buildRenderOptions(e,i,o);if(!r.Valid){let t=`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not perform a basic render of ${r.RenderableHash} because it is not valid.`;return this.log.error(t),n(new Error(t))}this.pict.parseTemplateByHash(r.Renderable.TemplateHash,r.Record,(t,e)=>t?(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render (asynchronously) ${r.RenderableHash} because it did not parse the template.`,t),n(t)):(this.assignRenderContent(r.Renderable,r.DestinationAddress,e),n()),[this],t,{RootRenderable:r.Renderable})}onProject(t){this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onProject:`),"virtual-assignment"===t.RenderMethod&&this.pict.TransactionTracking.pushToTransactionQueue(t.TransactionHash,{ViewHash:this.Hash,Renderable:t},"Deferred-Post-Content-Assignment"),this.pict.LogNoisiness>0&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} Assigning Renderable[${t.RenderableHash}] content length ${t.Content.length} to Destination [${t.ContentDestinationAddress}] using Async render method ${t.RenderMethod}.`),this.pict.ContentAssignment.projectContent(t.RenderMethod,t.ContentDestinationAddress,t.Content,t.TestAddress),this.lastRenderedTimestamp=this.pict.log.getTimeStamp()}onProjectAsync(t,e){return this.onProject(e),t()}onAfterRender(t){if(this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterRender:`),t&&t.RootRenderableViewHash===this.Hash){const e=this.pict.TransactionTracking.clearTransactionQueue(t.TransactionHash)||[];for(const i of e){const e=this.pict.views[i.Data.ViewHash];e?(e.onAfterProject(),e.onAfterRender(i.Data.Renderable)):this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterRender: Could not find view for transaction hash ${t.TransactionHash} and ViewHash ${i.Data.ViewHash}.`)}}return!0}onAfterRenderAsync(t,e){this.onAfterRender(e);const i=this.fable.newAnticipate();if(e&&e.RootRenderableViewHash===this.Hash){const t=this.pict.TransactionTracking.clearTransactionQueue(e.TransactionHash)||[];for(const o of t){const t=this.pict.views[o.Data.ViewHash];t?(i.anticipate(t.onAfterProjectAsync.bind(t)),i.anticipate(e=>{t.onAfterRenderAsync(e,o.Data.Renderable)})):this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterRenderAsync: Could not find view for transaction hash ${e.TransactionHash} and ViewHash ${o.Data.ViewHash}.`)}}return i.wait(t)}onAfterProject(t){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterProject:`),!0}onAfterProjectAsync(t,e){return t()}onBeforeSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeSolve:`),!0}onBeforeSolveAsync(t){return this.onBeforeSolve(),t()}onSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onSolve:`),!0}onSolveAsync(t){return this.onSolve(),t()}solve(){return this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} executing solve() function...`),this.onBeforeSolve(),this.onSolve(),this.onAfterSolve(),this.lastSolvedTimestamp=this.pict.log.getTimeStamp(),!0}solveAsync(t){let e=this.pict.instantiateServiceProviderWithoutRegistration("Anticipate"),i="function"==typeof t?t:null;i||(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} solveAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),i=t=>{t&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} solveAsync Auto Callback Error: ${t}`,t)}),e.anticipate(this.onBeforeSolveAsync.bind(this)),e.anticipate(this.onSolveAsync.bind(this)),e.anticipate(this.onAfterSolveAsync.bind(this)),e.wait(t=>(this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} solveAsync() complete.`),this.lastSolvedTimestamp=this.pict.log.getTimeStamp(),i(t)))}onAfterSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterSolve:`),!0}onAfterSolveAsync(t){return this.onAfterSolve(),t()}onBeforeMarshalFromView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeMarshalFromView:`),!0}onBeforeMarshalFromViewAsync(t){return this.onBeforeMarshalFromView(),t()}onMarshalFromView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onMarshalFromView:`),!0}onMarshalFromViewAsync(t){return this.onMarshalFromView(),t()}marshalFromView(){return this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} executing solve() function...`),this.onBeforeMarshalFromView(),this.onMarshalFromView(),this.onAfterMarshalFromView(),this.lastMarshalFromViewTimestamp=this.pict.log.getTimeStamp(),!0}marshalFromViewAsync(t){let e=this.pict.instantiateServiceProviderWithoutRegistration("Anticipate"),i="function"==typeof t?t:null;i||(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalFromViewAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),i=t=>{t&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalFromViewAsync Auto Callback Error: ${t}`,t)}),e.anticipate(this.onBeforeMarshalFromViewAsync.bind(this)),e.anticipate(this.onMarshalFromViewAsync.bind(this)),e.anticipate(this.onAfterMarshalFromViewAsync.bind(this)),e.wait(t=>(this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} marshalFromViewAsync() complete.`),this.lastMarshalFromViewTimestamp=this.pict.log.getTimeStamp(),i(t)))}onAfterMarshalFromView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterMarshalFromView:`),!0}onAfterMarshalFromViewAsync(t){return this.onAfterMarshalFromView(),t()}onBeforeMarshalToView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeMarshalToView:`),!0}onBeforeMarshalToViewAsync(t){return this.onBeforeMarshalToView(),t()}onMarshalToView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onMarshalToView:`),!0}onMarshalToViewAsync(t){return this.onMarshalToView(),t()}marshalToView(){return this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} executing solve() function...`),this.onBeforeMarshalToView(),this.onMarshalToView(),this.onAfterMarshalToView(),this.lastMarshalToViewTimestamp=this.pict.log.getTimeStamp(),!0}marshalToViewAsync(t){let e=this.pict.instantiateServiceProviderWithoutRegistration("Anticipate"),i="function"==typeof t?t:null;i||(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalToViewAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),i=t=>{t&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalToViewAsync Auto Callback Error: ${t}`,t)}),e.anticipate(this.onBeforeMarshalToViewAsync.bind(this)),e.anticipate(this.onMarshalToViewAsync.bind(this)),e.anticipate(this.onAfterMarshalToViewAsync.bind(this)),e.wait(t=>(this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} marshalToViewAsync() complete.`),this.lastMarshalToViewTimestamp=this.pict.log.getTimeStamp(),i(t)))}onAfterMarshalToView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterMarshalToView:`),!0}onAfterMarshalToViewAsync(t){return this.onAfterMarshalToView(),t()}get isPictView(){return!0}}},{"../package.json":12,"fable-serviceproviderbase":2}],14:[function(t,e,i){var o,s,n=e.exports={};function r(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function l(t){if(o===setTimeout)return setTimeout(t,0);if((o===r||!o)&&setTimeout)return o=setTimeout,setTimeout(t,0);try{return o(t,0)}catch(e){try{return o.call(null,t,0)}catch(e){return o.call(this,t,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:r}catch(t){o=r}try{s="function"==typeof clearTimeout?clearTimeout:a}catch(t){s=a}}();var c,d=[],h=!1,p=-1;function u(){h&&c&&(h=!1,c.length?d=c.concat(d):p=-1,d.length&&m())}function m(){if(!h){var t=l(u);h=!0;for(var e=d.length;e;){for(c=d,d=[];++p<e;)c&&c[p].run();p=-1,e=d.length}c=null,h=!1,function(t){if(s===clearTimeout)return clearTimeout(t);if((s===a||!s)&&clearTimeout)return s=clearTimeout,clearTimeout(t);try{return s(t)}catch(e){try{return s.call(null,t)}catch(e){return s.call(this,t)}}}(t)}}function g(t,e){this.fun=t,this.array=e}function f(){}n.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)e[i-1]=arguments[i];d.push(new g(t,e)),1!==d.length||h||l(m)},g.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.browser=!0,n.env={},n.argv=[],n.version="",n.versions={},n.on=f,n.addListener=f,n.once=f,n.off=f,n.removeListener=f,n.removeAllListeners=f,n.emit=f,n.prependListener=f,n.prependOnceListener=f,n.listeners=function(t){return[]},n.binding=function(t){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(t){throw new Error("process.chdir is not supported")},n.umask=function(){return 0}},{}],15:[function(t,e,i){e.exports={Name:"Retold Comprehension Loader",Hash:"ComprehensionLoader",MainViewportViewIdentifier:"ComprehensionLoader-Layout",MainViewportDestinationAddress:"#ComprehensionLoader-Application-Container",MainViewportDefaultDataAddress:"AppData.ComprehensionLoader",pict_configuration:{Product:"ComprehensionLoader"},AutoRenderMainViewportViewAfterInitialize:!1}},{}],16:[function(t,e,i){const o=t("pict-application"),s=t("./providers/Pict-Provider-ComprehensionLoader.js"),n=t("./views/PictView-ComprehensionLoader-Layout.js"),r=t("./views/PictView-ComprehensionLoader-Session.js"),a=t("./views/PictView-ComprehensionLoader-Schema.js"),l=t("./views/PictView-ComprehensionLoader-Source.js"),c=t("./views/PictView-ComprehensionLoader-Load.js"),d=t("pict-section-histogram");e.exports=class extends o{constructor(t,e,i){super(t,e,i),this.pict.addProvider("ComprehensionLoader",s.default_configuration,s),this.pict.addView("ComprehensionLoader-Layout",n.default_configuration,n),this.pict.addView("ComprehensionLoader-Session",r.default_configuration,r),this.pict.addView("ComprehensionLoader-Schema",a.default_configuration,a),this.pict.addView("ComprehensionLoader-Source",l.default_configuration,l),this.pict.addView("ComprehensionLoader-Load",c.default_configuration,c),this.pict.addView("ComprehensionLoader-StatusHistogram",{ViewIdentifier:"ComprehensionLoader-StatusHistogram",TargetElementAddress:"#ComprehensionLoader-Throughput-Histogram",DefaultDestinationAddress:"#ComprehensionLoader-Throughput-Histogram",RenderOnLoad:!1,Selectable:!1,Orientation:"vertical",FillContainer:!0,ShowValues:!1,ShowLabels:!0,MaxBarSize:80,BarColor:"#4a90d9",Bins:[]},d)}onAfterInitializeAsync(t){return this.pict.AppData.ComprehensionLoader={FetchedEntities:[],LastReport:null,ServerBusyAtLoad:!1,LoadPollTimer:null,LiveStatusTimer:null,StatusDetailExpanded:!1,StatusDetailTimer:null,StatusDetailData:null,LastLiveStatus:null,PersistFields:["serverURL","authMethod","authURI","checkURI","cookieName","cookieValueAddr","cookieValueTemplate","loginMarker","userName","password","schemaURL","comprehensionSourceMode","comprehensionURL"]},window.pict=this.pict,this.pict.views["ComprehensionLoader-Layout"].render(),this.pict.providers.ComprehensionLoader.initPersistence(),this.pict.providers.ComprehensionLoader.startLiveStatusPolling(),this.pict.providers.ComprehensionLoader.initAccordionPreviews(),this.pict.providers.ComprehensionLoader.updateAllPreviews(),this.pict.views["ComprehensionLoader-Layout"].collapseAllSections(),this.pict.providers.ComprehensionLoader.initAutoProcess(),t()}},e.exports.default_configuration=t("./Pict-Application-ComprehensionLoader-Configuration.json")},{"./Pict-Application-ComprehensionLoader-Configuration.json":15,"./providers/Pict-Provider-ComprehensionLoader.js":18,"./views/PictView-ComprehensionLoader-Layout.js":19,"./views/PictView-ComprehensionLoader-Load.js":20,"./views/PictView-ComprehensionLoader-Schema.js":21,"./views/PictView-ComprehensionLoader-Session.js":22,"./views/PictView-ComprehensionLoader-Source.js":23,"pict-application":4,"pict-section-histogram":8}],17:[function(t,e,i){e.exports={ComprehensionLoaderApplication:t("./Pict-Application-ComprehensionLoader.js")},"undefined"!=typeof window&&(window.ComprehensionLoaderApplication=e.exports.ComprehensionLoaderApplication)},{"./Pict-Application-ComprehensionLoader.js":16}],18:[function(t,e,i){const o=t("pict-provider");e.exports=class extends o{constructor(t,e,i){super(t,e,i)}api(t,e,i){let o={method:t,headers:{}};return i&&(o.headers["Content-Type"]="application/json",o.body=JSON.stringify(i)),fetch(e,o).then(function(t){return t.json()})}setStatus(t,e,i){let o=document.getElementById(t);o&&(o.className="status "+(i||"info"),o.textContent=e,o.style.display="block")}escapeHtml(t){let e=document.createElement("div");return e.appendChild(document.createTextNode(t)),e.innerHTML}setSectionPhase(t,e){let i=document.getElementById("phase"+t);i&&(i.className="accordion-phase","ok"===e?(i.innerHTML="&#10003;",i.classList.add("visible","accordion-phase-ok")):"error"===e?(i.innerHTML="&#10007;",i.classList.add("visible","accordion-phase-error")):"busy"===e?(i.innerHTML='<span class="phase-spinner"></span>',i.classList.add("visible","accordion-phase-busy")):i.innerHTML="")}updateAllPreviews(){let t=document.getElementById("serverURL");if(!t)return;t=t.value;let e=document.getElementById("userName").value;if(t){let i=t;e&&(i+=" as "+e),document.getElementById("preview1").textContent=i}else document.getElementById("preview1").textContent="Configure remote server URL and credentials";let i=this.pict.AppData.ComprehensionLoader.FetchedEntities||[];if(i.length>0)document.getElementById("preview2").textContent=i.length+" entit"+(1===i.length?"y":"ies")+" discovered";else{let t=document.getElementById("schemaURL").value;document.getElementById("preview2").textContent=t?"Schema from "+t:"Fetch entity schema from the remote server"}let o=document.querySelector('input[name="comprehensionSourceMode"]:checked');if("url"===(o?o.value:"url")){let t=document.getElementById("comprehensionURL").value;document.getElementById("preview3").textContent=t?"URL: "+t:"Provide a comprehension JSON URL or upload files"}else document.getElementById("preview3").textContent="File upload mode";let s=document.getElementById("preview4");s&&(s.textContent="Push comprehension data to the remote server")}initAccordionPreviews(){let t=this,e=["serverURL","userName","schemaURL","comprehensionURL"],i=function(){t.updateAllPreviews()};for(let t=0;t<e.length;t++){let o=document.getElementById(e[t]);o&&(o.addEventListener("input",i),o.addEventListener("change",i))}document.querySelectorAll('input[name="comprehensionSourceMode"]').forEach(function(t){t.addEventListener("change",i)})}saveField(t){let e=document.getElementById(t);e&&localStorage.setItem("comprehensionLoader_"+t,e.value)}restoreFields(){let t=this.pict.AppData.ComprehensionLoader.PersistFields;for(let e=0;e<t.length;e++){let i=t[e],o=localStorage.getItem("comprehensionLoader_"+i);if(null!==o){let t=document.getElementById(i);t&&(t.value=o)}}if("file"===localStorage.getItem("comprehensionLoader_comprehensionSourceMode")){let t=document.getElementById("sourceMode_file");t&&(t.checked=!0)}}initPersistence(){let t=this;this.restoreFields();let e=this.pict.AppData.ComprehensionLoader.PersistFields;for(let i=0;i<e.length;i++)(function(e){let i=document.getElementById(e);i&&(i.addEventListener("input",function(){t.saveField(e)}),i.addEventListener("change",function(){t.saveField(e)}))})(e[i]);document.querySelectorAll('input[name="comprehensionSourceMode"]').forEach(function(t){t.addEventListener("change",function(){localStorage.setItem("comprehensionLoader_comprehensionSourceMode",this.value)})});let i=["auto1","auto2","auto3","auto4"];for(let t=0;t<i.length;t++)(function(t){let e=document.getElementById(t);if(e){let i=localStorage.getItem("comprehensionLoader_"+t);null!==i&&(e.checked="true"===i),e.addEventListener("change",function(){localStorage.setItem("comprehensionLoader_"+t,this.checked)})}})(i[t])}startLiveStatusPolling(){let t=this.pict.AppData.ComprehensionLoader;t.LiveStatusTimer&&clearInterval(t.LiveStatusTimer),this.pollLiveStatus();let e=this;t.LiveStatusTimer=setInterval(function(){e.pollLiveStatus()},1500)}pollLiveStatus(){let t=this;this.api("GET","/comprehension_load/load/live-status").then(function(e){t.renderLiveStatus(e)}).catch(function(){t.renderLiveStatus({Phase:"disconnected",Message:"Cannot reach server",TotalPushed:0,TotalRecords:0})})}renderLiveStatus(t){this.pict.AppData.ComprehensionLoader.LastLiveStatus=t;let e=document.getElementById("liveStatusBar"),i=document.getElementById("liveStatusMessage"),o=document.getElementById("liveStatusMeta"),s=document.getElementById("liveStatusProgressFill");if(!e)return;let n=e.classList.contains("expanded");e.className="live-status-bar phase-"+(t.Phase||"idle"),n&&e.classList.add("expanded"),i.textContent=t.Message||"Idle";let r=[];if("loading"===t.Phase||"stopping"===t.Phase){if(t.Elapsed&&r.push('<span class="live-status-meta-item">⏱ '+t.Elapsed+"</span>"),t.ETA&&r.push('<span class="live-status-meta-item">~'+t.ETA+" remaining</span>"),t.TotalEntities>0&&r.push('<span class="live-status-meta-item"><strong>'+t.Completed+"</strong> / "+t.TotalEntities+" entities</span>"),t.TotalPushed>0){let e=t.TotalPushed.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");if(t.TotalRecords>0){let i=t.TotalRecords.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");r.push('<span class="live-status-meta-item"><strong>'+e+"</strong> / "+i+" records</span>")}else r.push('<span class="live-status-meta-item"><strong>'+e+"</strong> records</span>")}t.Errors>0&&r.push('<span class="live-status-meta-item" style="color:#dc3545"><strong>'+t.Errors+"</strong> error"+(1===t.Errors?"":"s")+"</span>")}else if("complete"===t.Phase&&t.TotalPushed>0){let e=t.TotalPushed.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");r.push('<span class="live-status-meta-item"><strong>'+e+"</strong> records pushed</span>")}o.innerHTML=r.join("");let a=0;if("loading"===t.Phase&&t.TotalRecords>0&&t.TotalPushed>0?a=Math.min(t.TotalPushed/t.TotalRecords*100,99.9):"loading"===t.Phase&&t.TotalEntities>0?a=t.Completed/t.TotalEntities*100:"complete"===t.Phase&&(a=100),s.style.width=Math.min(100,Math.round(a))+"%",("loading"===t.Phase||"stopping"===t.Phase)&&!this.pict.AppData.ComprehensionLoader.StatusDetailExpanded){let t=this.pict.views["ComprehensionLoader-Layout"];t&&"function"==typeof t.toggleStatusDetail&&t.toggleStatusDetail()}if(this.pict.AppData.ComprehensionLoader.StatusDetailExpanded&&this.renderStatusDetail(),"complete"===t.Phase&&!this.pict.AppData.ComprehensionLoader.LastReport){let t=this;this.api("GET","/comprehension_load/load/report").then(function(e){e&&e.ReportVersion&&(t.pict.AppData.ComprehensionLoader.LastReport=e,t.pict.AppData.ComprehensionLoader.StatusDetailExpanded&&t.renderStatusDetail())}).catch(function(){})}}onStatusDetailExpanded(){let t=this.pict.AppData.ComprehensionLoader;t.StatusDetailExpanded=!0,this.renderStatusDetail(),t.StatusDetailTimer&&clearInterval(t.StatusDetailTimer);let e=this;t.StatusDetailTimer=setInterval(function(){e.pollStatusDetail()},2e3),this.pollStatusDetail()}onStatusDetailCollapsed(){let t=this.pict.AppData.ComprehensionLoader;t.StatusDetailExpanded=!1,t.StatusDetailTimer&&(clearInterval(t.StatusDetailTimer),t.StatusDetailTimer=null)}pollStatusDetail(){let t=this;this.api("GET","/comprehension_load/load/status").then(function(e){t.pict.AppData.ComprehensionLoader.StatusDetailData=e,t.renderStatusDetail()}).catch(function(){})}renderStatusDetail(){let t=document.getElementById("ComprehensionLoader-StatusDetail-Container");if(!t)return;let e=this.pict.AppData.ComprehensionLoader,i=e.LastLiveStatus,o=e.StatusDetailData,s=e.LastReport,n={},r=[],a=!1;if(!i||"loading"!==i.Phase&&"stopping"!==i.Phase)if(s&&s.ReportVersion){for(let t=0;t<s.Entities.length;t++){let e=s.Entities[t];n[e.Name]=e}r=s.ThroughputSamples||[]}else o&&o.Entities&&(n=o.Entities,i&&i.ThroughputSamples&&(r=i.ThroughputSamples));else a=!0,o&&o.Entities&&(n=o.Entities),i.ThroughputSamples&&(r=i.ThroughputSamples);let l=[],c=[],d=[],h=[],p=Object.keys(n);for(let t=0;t<p.length;t++){let e=p[t],i=n[e];"Pushing"===i.Status?l.push({Name:e,Data:i}):"Pending"===i.Status?c.push(e):"Complete"===i.Status?d.push({Name:e,Data:i}):"Error"===i.Status&&h.push({Name:e,Data:i})}let u="";if(l.length>0||c.length>0){u+='<div class="status-detail-section">',u+='<div class="status-detail-section-title">Running</div>';for(let t=0;t<l.length;t++){let e=l[t],i=e.Data.Total>0?Math.round(e.Data.Pushed/e.Data.Total*100):0,o=this.formatNumber(e.Data.Pushed||0),s=this.formatNumber(e.Data.Total||0);u+='<div class="running-op-row">',u+=' <div class="running-op-name">'+this.escapeHtml(e.Name)+"</div>",u+=' <div class="running-op-bar"><div class="running-op-bar-fill" style="width:'+i+'%"></div></div>',u+=' <div class="running-op-count">'+o+" / "+s+" ("+i+"%)</div>",u+="</div>"}c.length>0&&(u+='<div class="running-op-pending">'+c.length+" entit"+(1===c.length?"y":"ies")+" waiting</div>"),u+="</div>"}if(d.length>0){u+='<div class="status-detail-section">',u+='<div class="status-detail-section-title">Completed ('+d.length+")</div>";for(let t=0;t<d.length;t++){let e=d[t],i=this.formatNumber(e.Data.Pushed||e.Data.Total||0);u+='<div class="completed-op-row">',u+='<div class="completed-op-header">',u+=' <span class="completed-op-checkmark">✓</span>',u+=' <span class="completed-op-name">'+this.escapeHtml(e.Name)+"</span>",u+=' <span class="completed-op-stats">'+i+" records</span>",u+="</div>",u+="</div>"}u+="</div>"}if(h.length>0){u+='<div class="status-detail-section">',u+='<div class="status-detail-section-title">Errors ('+h.length+")</div>";for(let t=0;t<h.length;t++){let e=h[t],i=this.formatNumber(e.Data.Pushed||0),o=this.formatNumber(e.Data.Total||0);u+='<div class="error-op-row">',u+='<div class="error-op-header">',u+=' <span style="color:#dc3545">✗</span>',u+=' <span class="error-op-name">'+this.escapeHtml(e.Name)+"</span>",u+=' <span class="error-op-status">'+i+" / "+o+"</span>",u+="</div>",e.Data.ErrorMessage&&(u+='<div class="error-op-message">'+this.escapeHtml(e.Data.ErrorMessage)+"</div>"),u+="</div>"}u+="</div>"}""===u&&(u=a?'<div style="font-size:0.9em; color:var(--theme-color-text-muted, #888); padding:8px 0">Load in progress, waiting for entity data…</div>':'<div style="font-size:0.9em; color:var(--theme-color-text-muted, #888); padding:8px 0">No load data available. Run a load to see operation details here.</div>'),t.innerHTML=u,this.updateThroughputHistogram(r)}updateThroughputHistogram(t){let e=document.getElementById("ComprehensionLoader-Throughput-Histogram");if(!e)return;if(!t||t.length<2)return void(e.style.display="none");let i=[];for(let e=1;e<t.length;e++){let o=t[e].pushed-t[e-1].pushed;o<0&&(o=0),i.push({delta:o,t:t[e].t})}let o=e.clientWidth||800,s=Math.max(20,Math.floor(o/6)),n=i;if(i.length>s){let t=Math.ceil(i.length/s);n=[];for(let e=0;e<i.length;e+=t){let o=0,s=0;for(let n=e;n<Math.min(e+t,i.length);n++)o+=i[n].delta,s=i[n].t;n.push({delta:o,t:s})}}let r=!1;for(let t=0;t<n.length;t++)if(n[t].delta>0){r=!0;break}if(!r)return void(e.style.display="none");let a=t[0].t,l=[];for(let t=0;t<n.length;t++){let e=Math.round((n[t].t-a)/1e3);l.push({Label:this.formatElapsed(e),Value:n[t].delta})}e.style.display="";let c=this.pict.views["ComprehensionLoader-StatusHistogram"];c&&(c.setBins(l),c.renderHistogram())}formatElapsed(t){if(t<60)return t+"s";if(t<3600){let e=t%60;return Math.floor(t/60)+":"+(e<10?"0":"")+e}let e=Math.floor(t/3600),i=Math.floor(t%3600/60);return e+"h"+(i<10?"0":"")+i}formatCompact(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e4?(t/1e3).toFixed(0)+"K":t>=1e3?(t/1e3).toFixed(1)+"K":t.toString()}formatNumber(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}initAutoProcess(){let t=this;this.api("GET","/comprehension_load/load/live-status").then(function(e){if("loading"===e.Phase||"stopping"===e.Phase)return t.pict.AppData.ComprehensionLoader.ServerBusyAtLoad=!0,t.setSectionPhase(4,"busy"),void t.pict.views["ComprehensionLoader-Load"].startPolling();t.runAutoProcessChain()}).catch(function(){})}runAutoProcessChain(){let t=this,e=0,i=2e3;document.getElementById("auto1")&&document.getElementById("auto1").checked&&(setTimeout(function(){t.pict.views["ComprehensionLoader-Session"].goAction()},e),e+=3500),document.getElementById("auto2")&&document.getElementById("auto2").checked&&(setTimeout(function(){t.pict.views["ComprehensionLoader-Schema"].fetchSchema()},e),e+=i),document.getElementById("auto3")&&document.getElementById("auto3").checked&&(setTimeout(function(){t.pict.views["ComprehensionLoader-Source"].goAction()},e),e+=i),document.getElementById("auto4")&&document.getElementById("auto4").checked&&setTimeout(function(){t.pict.views["ComprehensionLoader-Load"].startLoad()},e)}},e.exports.default_configuration={ProviderIdentifier:"ComprehensionLoader",AutoInitialize:!0,AutoInitializeOrdinal:0}},{"pict-provider":6}],19:[function(t,e,i){const o=t("pict-view");e.exports=class extends o{constructor(t,e,i){super(t,e,i)}onAfterRender(){this.pict.views["ComprehensionLoader-Session"].render(),this.pict.views["ComprehensionLoader-Schema"].render(),this.pict.views["ComprehensionLoader-Source"].render(),this.pict.views["ComprehensionLoader-Load"].render(),this.pict.CSSMap.injectCSS()}toggleSection(t){let e=document.getElementById(t);e&&e.classList.toggle("open")}expandAllSections(){let t=document.querySelectorAll(".accordion-card");for(let e=0;e<t.length;e++)t[e].classList.add("open")}collapseAllSections(){let t=document.querySelectorAll(".accordion-card");for(let e=0;e<t.length;e++)t[e].classList.remove("open")}toggleStatusDetail(){let t=document.getElementById("liveStatusDetail"),e=document.getElementById("liveStatusMeta"),i=document.getElementById("liveStatusMessage"),o=document.getElementById("liveStatusToggle"),s=document.getElementById("liveStatusBar");t&&("none"!==t.style.display?(t.style.display="none",e.style.display="",i.style.display="",o.innerHTML="&#9660;",s.classList.remove("expanded"),this.pict.providers.ComprehensionLoader.onStatusDetailCollapsed()):(t.style.display="",e.style.display="none",i.style.display="none",o.innerHTML="&#9650;",s.classList.add("expanded"),this.pict.providers.ComprehensionLoader.onStatusDetailExpanded()))}},e.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Layout",DefaultRenderable:"ComprehensionLoader-Layout",DefaultDestinationAddress:"#ComprehensionLoader-Application-Container",CSS:'\n* { box-sizing: border-box; margin: 0; padding: 0; }\nbody { font-family: -apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, sans-serif; background: var(--theme-color-background-secondary, #f5f5f5); color: var(--theme-color-text-primary, #333); padding: 20px; }\nh1 { margin-bottom: 20px; color: var(--theme-color-text-primary, #1a1a1a); }\nh2 { margin-bottom: 12px; color: var(--theme-color-text-secondary, #444); font-size: 1.2em; border-bottom: 2px solid var(--theme-color-border-default, #ddd); padding-bottom: 6px; }\n\n.section { background: var(--theme-color-background-panel, #fff); border-radius: 8px; padding: 20px; margin-bottom: 16px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }\n\n/* Accordion layout */\n.accordion-row { display: flex; gap: 0; margin-bottom: 16px; align-items: stretch; }\n.accordion-number {\n\tflex: 0 0 48px; display: flex; align-items: flex-start; justify-content: center;\n\tpadding-top: 16px; font-size: 1.6em; font-weight: 700; color: #4a90d9;\n\tuser-select: none;\n}\n.accordion-card {\n\tflex: 1; background: var(--theme-color-background-panel, #fff); border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n\toverflow: hidden; min-width: 0;\n}\n.accordion-header {\n\tdisplay: flex; align-items: center; padding: 14px 20px; cursor: pointer;\n\tuser-select: none; gap: 12px; transition: background 0.15s; line-height: 1.4;\n}\n.accordion-header:hover { background: var(--theme-color-background-secondary, #fafafa); }\n.accordion-title { font-weight: 600; color: var(--theme-color-text-primary, #333); font-size: 1.05em; white-space: nowrap; }\n.accordion-preview { flex: 1; font-style: italic; color: var(--theme-color-text-muted, #888); font-size: 0.9em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }\n.accordion-toggle {\n\tflex: 0 0 20px; display: flex; align-items: center; justify-content: center;\n\tborder-radius: 4px; transition: background 0.15s, transform 0.25s; font-size: 0.7em; color: var(--theme-color-text-muted, #888);\n}\n.accordion-header:hover .accordion-toggle { background: var(--theme-color-border-light, #eee); color: var(--theme-color-text-secondary, #555); }\n.accordion-card.open .accordion-toggle { transform: rotate(180deg); }\n.accordion-body { padding: 0 20px 20px; display: none; }\n.accordion-card.open .accordion-body { display: block; }\n.accordion-card.open .accordion-header { border-bottom: 1px solid var(--theme-color-border-light, #eee); }\n.accordion-card.open .accordion-preview { display: none; }\n\n/* Action controls (go link + auto checkbox) */\n.accordion-actions { display: flex; align-items: baseline; gap: 8px; flex-shrink: 0; }\n.accordion-card.open .accordion-actions { display: none; }\n.accordion-go {\n\tfont-size: 0.82em; color: #4a90d9; cursor: pointer; text-decoration: none;\n\tfont-weight: 500; white-space: nowrap; padding: 2px 6px; border-radius: 3px;\n\ttransition: background 0.15s;\n}\n.accordion-go:hover { background: #e8f0fe; text-decoration: underline; }\n.accordion-auto {\n\tfont-size: 0.82em; color: var(--theme-color-text-muted, #999); white-space: nowrap; cursor: pointer;\n}\n.accordion-auto .auto-label { display: none; }\n.accordion-auto:hover .auto-label { display: inline; }\n.accordion-auto input[type="checkbox"] { width: auto; margin: 0; cursor: pointer; vertical-align: middle; position: relative; top: 0px; opacity: 0.75; transition: opacity 0.15s; }\n.accordion-auto:hover input[type="checkbox"] { opacity: 1; }\n.accordion-auto:hover { color: var(--theme-color-text-secondary, #666); }\n\n/* Phase status indicator */\n.accordion-phase {\n\tflex: 0 0 auto; display: none; align-items: center; justify-content: center;\n\tfont-size: 0.85em; line-height: 1;\n}\n.accordion-phase.visible { display: flex; }\n.accordion-phase-ok { color: var(--theme-color-status-success, #28a745); }\n.accordion-phase-error { color: #dc3545; }\n.accordion-phase-busy { color: var(--theme-color-status-success, #28a745); }\n.accordion-phase-busy .phase-spinner {\n\tdisplay: inline-block; width: 14px; height: 14px;\n\tborder: 2px solid #28a745; border-top-color: transparent; border-radius: 50%;\n\tanimation: phase-spin 0.8s linear infinite; vertical-align: middle;\n}\n@keyframes phase-spin {\n\tto { transform: rotate(360deg); }\n}\n\n.accordion-controls {\n\tdisplay: flex; gap: 8px; margin-bottom: 12px; justify-content: flex-end;\n}\n.accordion-controls button {\n\tpadding: 4px 10px; font-size: 0.82em; font-weight: 500; background: none;\n\tborder: 1px solid #ccc; border-radius: 4px; color: var(--theme-color-text-secondary, #666); cursor: pointer; margin: 0;\n}\n.accordion-controls button:hover { background: var(--theme-color-background-tertiary, #f0f0f0); border-color: var(--theme-color-text-muted, #aaa); color: var(--theme-color-text-primary, #333); }\n\nlabel { display: block; font-weight: 600; margin-bottom: 4px; font-size: 0.9em; }\ninput[type="text"], input[type="password"], input[type="number"] {\n\twidth: 100%; padding: 8px 12px; border: 1px solid var(--theme-color-border-default, #ccc); border-radius: 4px;\n\tfont-size: 0.95em; margin-bottom: 10px;\n}\ninput[type="text"]:focus, input[type="password"]:focus, input[type="number"]:focus {\n\toutline: none; border-color: #4a90d9;\n}\n\nbutton {\n\tpadding: 8px 16px; border: none; border-radius: 4px; cursor: pointer;\n\tfont-size: 0.9em; font-weight: 600; margin-right: 8px; margin-bottom: 8px;\n}\nbutton.primary { background: #4a90d9; color: var(--theme-color-background-panel, #fff); }\nbutton.primary:hover { background: #357abd; }\nbutton.secondary { background: #6c757d; color: var(--theme-color-background-panel, #fff); }\nbutton.secondary:hover { background: #5a6268; }\nbutton.danger { background: #dc3545; color: var(--theme-color-background-panel, #fff); }\nbutton.danger:hover { background: #c82333; }\nbutton.success { background: var(--theme-color-status-success, #28a745); color: var(--theme-color-background-panel, #fff); }\nbutton.success:hover { background: #218838; }\nbutton:disabled { opacity: 0.5; cursor: not-allowed; }\n\n.status { padding: 8px 12px; border-radius: 4px; margin-top: 10px; font-size: 0.9em; }\n.status.ok { background: #d4edda; color: #155724; }\n.status.error { background: #f8d7da; color: #721c24; }\n.status.info { background: #d1ecf1; color: #0c5460; }\n.status.warn { background: #fff3cd; color: #856404; }\n\n.inline-group { display: flex; gap: 8px; align-items: flex-end; margin-bottom: 10px; }\n.inline-group > div { flex: 1; }\n\na { color: #4a90d9; }\n\nselect { background: var(--theme-color-background-panel, #fff); width: 100%; padding: 8px 12px; border: 1px solid var(--theme-color-border-default, #ccc); border-radius: 4px; font-size: 0.95em; margin-bottom: 10px; }\n\n.checkbox-row { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n.checkbox-row input[type="checkbox"] { width: auto; margin: 0; }\n.checkbox-row label { display: inline; margin: 0; font-weight: normal; cursor: pointer; }\n\n/* Live Status Bar */\n.live-status-bar {\n\tbackground: #fff; border-radius: 8px; margin-bottom: 16px;\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.1);\n\tposition: sticky; top: 0; z-index: 100; border-left: 4px solid #6c757d;\n}\n.live-status-bar.phase-idle { border-left-color: #6c757d; }\n.live-status-bar.phase-disconnected { border-left-color: #dc3545; }\n.live-status-bar.phase-ready { border-left-color: #4a90d9; }\n.live-status-bar.phase-loading { border-left-color: var(--theme-color-status-success, #28a745); }\n.live-status-bar.phase-stopping { border-left-color: #ffc107; }\n.live-status-bar.phase-complete { border-left-color: var(--theme-color-status-success, #28a745); }\n\n.live-status-dot {\n\twidth: 12px; height: 12px; border-radius: 50%; flex-shrink: 0;\n\tbackground: #6c757d;\n}\n.live-status-bar.phase-idle .live-status-dot { background: #6c757d; }\n.live-status-bar.phase-disconnected .live-status-dot { background: #dc3545; }\n.live-status-bar.phase-ready .live-status-dot { background: #4a90d9; }\n.live-status-bar.phase-loading .live-status-dot {\n\tbackground: #28a745;\n\tanimation: live-pulse 1.5s ease-in-out infinite;\n}\n.live-status-bar.phase-stopping .live-status-dot {\n\tbackground: #ffc107;\n\tanimation: live-pulse 0.8s ease-in-out infinite;\n}\n.live-status-bar.phase-complete .live-status-dot { background: var(--theme-color-status-success, #28a745); }\n\n@keyframes live-pulse {\n\t0%, 100% { opacity: 1; transform: scale(1); }\n\t50% { opacity: 0.4; transform: scale(0.8); }\n}\n\n.live-status-message { flex: 1; font-size: 0.92em; color: var(--theme-color-text-primary, #333); line-height: 1.4; }\n\n.live-status-meta {\n\tdisplay: flex; gap: 16px; flex-shrink: 0; font-size: 0.82em; color: var(--theme-color-text-secondary, #666);\n}\n.live-status-meta-item { white-space: nowrap; }\n.live-status-meta-item strong { color: var(--theme-color-text-primary, #333); }\n\n.live-status-progress-bar {\n\theight: 3px; background: #e9ecef; border-radius: 2px; overflow: hidden;\n\tposition: absolute; bottom: 0; left: 0; right: 0;\n}\n.live-status-progress-fill {\n\theight: 100%; background: var(--theme-color-status-success, #28a745); transition: width 1s ease;\n}\n/* Expandable status bar */\n.live-status-header {\n\tdisplay: flex; align-items: center; gap: 14px; cursor: pointer;\n\tpadding: 14px 20px; user-select: none;\n}\n.live-status-bar.expanded .live-status-header {\n\tborder-bottom: 1px solid #e9ecef; padding-bottom: 10px;\n}\n.live-status-expand-toggle {\n\tflex: 0 0 20px; display: flex; align-items: center; justify-content: center;\n\tfont-size: 0.7em; color: var(--theme-color-text-muted, #888); transition: transform 0.25s;\n}\n.live-status-bar.expanded .live-status-expand-toggle { transform: rotate(180deg); }\n\n.live-status-detail {\n\tpadding: 12px 20px 16px; max-height: 60vh; overflow-y: auto;\n}\n\n/* Status Detail Sections */\n.status-detail-section { margin-bottom: 14px; }\n.status-detail-section:last-child { margin-bottom: 0; }\n.status-detail-section-title {\n\tfont-size: 0.85em; font-weight: 600; color: var(--theme-color-text-secondary, #555); text-transform: uppercase;\n\tletter-spacing: 0.5px; margin-bottom: 8px; padding-bottom: 4px;\n\tborder-bottom: 1px solid #eee;\n}\n\n/* Running Operations */\n.running-op-row {\n\tdisplay: flex; align-items: center; gap: 12px; padding: 6px 0;\n\tfont-size: 0.9em;\n}\n.running-op-name { font-weight: 600; min-width: 180px; }\n.running-op-bar {\n\tflex: 1; height: 8px; background: #e9ecef; border-radius: 4px; overflow: hidden;\n\tmin-width: 120px;\n}\n.running-op-bar-fill { height: 100%; background: #4a90d9; transition: width 0.5s ease; }\n.running-op-count { font-size: 0.85em; color: var(--theme-color-text-secondary, #666); white-space: nowrap; }\n.running-op-pending { color: var(--theme-color-text-muted, #888); font-size: 0.85em; font-style: italic; padding: 4px 0; }\n\n/* Completed Operations */\n.completed-op-row { padding: 8px 0; border-bottom: 1px solid var(--theme-color-background-tertiary, #f0f0f0); }\n.completed-op-row:last-child { border-bottom: none; }\n.completed-op-header {\n\tdisplay: flex; align-items: center; gap: 10px; font-size: 0.9em; margin-bottom: 4px;\n}\n.completed-op-name { font-weight: 600; }\n.completed-op-stats { color: var(--theme-color-text-secondary, #666); font-size: 0.85em; }\n.completed-op-checkmark { color: var(--theme-color-status-success, #28a745); }\n\n/* Error Operations */\n.error-op-row { padding: 6px 0; border-bottom: 1px solid var(--theme-color-background-tertiary, #f0f0f0); font-size: 0.9em; }\n.error-op-row:last-child { border-bottom: none; }\n.error-op-header { display: flex; align-items: center; gap: 8px; }\n.error-op-name { font-weight: 600; color: #dc3545; }\n.error-op-status { font-size: 0.82em; color: #dc3545; }\n.error-op-message { font-size: 0.82em; color: var(--theme-color-text-muted, #888); margin-top: 2px; padding-left: 18px; }\n',Templates:[{Hash:"ComprehensionLoader-Layout",Template:'\n<h1>Retold Comprehension Loader</h1>\n\n\x3c!-- Live Status Bar (Expandable) --\x3e\n<div id="liveStatusBar" class="live-status-bar phase-idle" style="position:relative">\n\t<div class="live-status-header" onclick="pict.views[\'ComprehensionLoader-Layout\'].toggleStatusDetail()">\n\t\t<div class="live-status-dot"></div>\n\t\t<div class="live-status-message" id="liveStatusMessage">Idle</div>\n\t\t<div class="live-status-meta" id="liveStatusMeta"></div>\n\t\t<div class="live-status-expand-toggle" id="liveStatusToggle">&#9660;</div>\n\t</div>\n\t<div class="live-status-detail" id="liveStatusDetail" style="display:none">\n\t\t<div id="ComprehensionLoader-Throughput-Histogram"></div>\n\t\t<div id="ComprehensionLoader-StatusDetail-Container"></div>\n\t</div>\n\t<div class="live-status-progress-bar"><div class="live-status-progress-fill" id="liveStatusProgressFill" style="width:0%"></div></div>\n</div>\n\n\x3c!-- Expand / Collapse All --\x3e\n<div class="accordion-controls">\n\t<button onclick="pict.views[\'ComprehensionLoader-Layout\'].expandAllSections()">Expand All</button>\n\t<button onclick="pict.views[\'ComprehensionLoader-Layout\'].collapseAllSections()">Collapse All</button>\n</div>\n\n\x3c!-- Section containers --\x3e\n<div id="ComprehensionLoader-Section-Session"></div>\n<div id="ComprehensionLoader-Section-Schema"></div>\n<div id="ComprehensionLoader-Section-Source"></div>\n<div id="ComprehensionLoader-Section-Load"></div>\n'}],Renderables:[{RenderableHash:"ComprehensionLoader-Layout",TemplateHash:"ComprehensionLoader-Layout",DestinationAddress:"#ComprehensionLoader-Application-Container"}]}},{"pict-view":13}],20:[function(t,e,i){const o=t("pict-view");e.exports=class extends o{constructor(t,e,i){super(t,e,i)}startLoad(){this.pict.providers.ComprehensionLoader.setSectionPhase(4,"busy"),this.pict.providers.ComprehensionLoader.setStatus("loadStatus","Starting load...","info"),this.pict.AppData.ComprehensionLoader.LastReport=null;let t=this;this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/load/start").then(function(e){if(e.Success){let i="Load started for "+e.Entities.length+" entities ("+t.pict.providers.ComprehensionLoader.formatNumber(e.TotalRecords)+" records).";t.pict.providers.ComprehensionLoader.setStatus("loadStatus",i,"ok"),t.startPolling()}else t.pict.providers.ComprehensionLoader.setStatus("loadStatus","Load start failed: "+(e.Error||"Unknown error"),"error"),t.pict.providers.ComprehensionLoader.setSectionPhase(4,"error")}).catch(function(e){t.pict.providers.ComprehensionLoader.setStatus("loadStatus","Request failed: "+e.message,"error"),t.pict.providers.ComprehensionLoader.setSectionPhase(4,"error")})}stopLoad(){let t=this;this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/load/stop").then(function(e){t.pict.providers.ComprehensionLoader.setStatus("loadStatus","Load stop requested.","warn")}).catch(function(e){t.pict.providers.ComprehensionLoader.setStatus("loadStatus","Request failed: "+e.message,"error")})}startPolling(){this.pict.AppData.ComprehensionLoader.LoadPollTimer&&clearInterval(this.pict.AppData.ComprehensionLoader.LoadPollTimer);let t=this;this.pict.AppData.ComprehensionLoader.LoadPollTimer=setInterval(function(){t.pollLoadStatus()},2e3),this.pollLoadStatus()}stopPolling(){this.pict.AppData.ComprehensionLoader.LoadPollTimer&&(clearInterval(this.pict.AppData.ComprehensionLoader.LoadPollTimer),this.pict.AppData.ComprehensionLoader.LoadPollTimer=null)}pollLoadStatus(){let t=this;this.pict.providers.ComprehensionLoader.api("GET","/comprehension_load/load/status").then(function(e){if(t.renderLoadProgress(e),!e.Running){t.stopPolling();let i=e.Entities||{},o=Object.keys(i);if(o.length>0){let e=!1;for(let t=0;t<o.length;t++)"Error"===i[o[t]].Status&&(e=!0);e?(t.pict.providers.ComprehensionLoader.setStatus("loadStatus","Load finished with errors.","error"),t.pict.providers.ComprehensionLoader.setSectionPhase(4,"error")):(t.pict.providers.ComprehensionLoader.setStatus("loadStatus","Load complete.","ok"),t.pict.providers.ComprehensionLoader.setSectionPhase(4,"ok")),t.fetchLoadReport()}}}).catch(function(t){})}fetchLoadReport(){let t=this;this.pict.providers.ComprehensionLoader.api("GET","/comprehension_load/load/report").then(function(e){e&&e.ReportVersion&&(t.pict.AppData.ComprehensionLoader.LastReport=e,t.renderLoadReport(e))}).catch(function(t){})}renderLoadReport(t){let e=document.getElementById("loadReportSection");if(!e)return;e.style.display="";let i=document.getElementById("reportSummaryCards"),o="outcome-"+t.Outcome.toLowerCase(),s={Success:"#28a745",Partial:"#ffc107",Error:"#dc3545",Stopped:"#6c757d"}[t.Outcome]||"#666",n=t.RunTimestamps.DurationSeconds||0,r=n<60?n+"s":Math.floor(n/60)+"m "+n%60+"s",a=this.pict.providers.ComprehensionLoader.formatNumber(t.Summary.TotalPushed),l=this.pict.providers.ComprehensionLoader.formatNumber(t.Summary.TotalRecords);i.innerHTML='<div class="report-card '+o+'"> <div class="card-label">Outcome</div> <div class="card-value" style="color:'+s+'">'+t.Outcome+'</div></div><div class="report-card"> <div class="card-label">Duration</div> <div class="card-value">'+r+'</div></div><div class="report-card"> <div class="card-label">Entities</div> <div class="card-value">'+t.Summary.Complete+" / "+t.Summary.TotalEntities+'</div></div><div class="report-card"> <div class="card-label">Records Pushed</div> <div class="card-value">'+a+'</div> <div style="font-size:0.75em; color:var(--theme-color-text-muted, #888)">of '+l+"</div></div>";let c=document.getElementById("reportAnomalies");if(0===t.Anomalies.length)c.innerHTML='<div style="color:var(--theme-color-status-success, #28a745); font-weight:600; font-size:0.9em">No anomalies detected.</div>';else{let e='<h4 style="margin:0 0 8px; color:#dc3545; font-size:0.95em">Anomalies ('+t.Anomalies.length+")</h4>";e+='<table class="progress-table">',e+="<tr><th>Entity</th><th>Type</th><th>Message</th></tr>";for(let i=0;i<t.Anomalies.length;i++){let o=t.Anomalies[i],s="Error"===o.Type?"#dc3545":"#6c757d";e+="<tr>",e+="<td><strong>"+this.pict.providers.ComprehensionLoader.escapeHtml(o.Entity)+"</strong></td>",e+='<td style="color:'+s+'">'+o.Type+"</td>",e+="<td>"+this.pict.providers.ComprehensionLoader.escapeHtml(o.Message)+"</td>",e+="</tr>"}e+="</table>",c.innerHTML=e}let d=document.getElementById("reportEntityDetails");if(t.Entities&&t.Entities.length>0){let e='<h4 style="margin:0 0 8px; font-size:0.95em; color:var(--theme-color-text-secondary, #444)">Entity Details</h4>';e+='<table class="progress-table">',e+="<tr><th>Entity</th><th>Duration</th><th>Records</th><th>Status</th></tr>";for(let i=0;i<t.Entities.length;i++){let o=t.Entities[i],s=o.DurationSeconds<60?o.DurationSeconds+"s":Math.floor(o.DurationSeconds/60)+"m "+o.DurationSeconds%60+"s",n=this.pict.providers.ComprehensionLoader.formatNumber(o.Pushed),r={Complete:"#28a745",Error:"#dc3545"}[o.Status]||"#666";e+="<tr>",e+="<td><strong>"+this.pict.providers.ComprehensionLoader.escapeHtml(o.Name)+"</strong></td>",e+="<td>"+s+"</td>",e+="<td>"+n+"</td>",e+='<td style="color:'+r+'">'+o.Status+"</td>",e+="</tr>"}e+="</table>",d.innerHTML=e}}downloadReport(){if(!this.pict.AppData.ComprehensionLoader.LastReport)return void this.pict.providers.ComprehensionLoader.setStatus("reportStatus","No report available.","warn");let t=JSON.stringify(this.pict.AppData.ComprehensionLoader.LastReport,null,"\t"),e=new Blob([t],{type:"application/json"}),i=document.createElement("a");i.href=URL.createObjectURL(e);let o=(new Date).toISOString().replace(/[:.]/g,"-").slice(0,19);i.download="ComprehensionLoader-Report-"+o+".json",i.click(),URL.revokeObjectURL(i.href),this.pict.providers.ComprehensionLoader.setStatus("reportStatus","Report downloaded.","ok")}copyReport(){if(!this.pict.AppData.ComprehensionLoader.LastReport)return void this.pict.providers.ComprehensionLoader.setStatus("reportStatus","No report available.","warn");let t=JSON.stringify(this.pict.AppData.ComprehensionLoader.LastReport,null,"\t"),e=this;navigator.clipboard.writeText(t).then(function(){e.pict.providers.ComprehensionLoader.setStatus("reportStatus","Report copied to clipboard.","ok")})}renderLoadProgress(t){let e=document.getElementById("loadProgress"),i=t.Entities||{},o=Object.keys(i);if(0===o.length)return void(e.innerHTML="");let s=[],n=[],r=[],a=[];for(let t=0;t<o.length;t++){let e=o[t],l=i[e];"Pushing"===l.Status?s.push({Name:e,Data:l}):"Pending"===l.Status?n.push({Name:e,Data:l}):"Complete"===l.Status?r.push({Name:e,Data:l}):a.push({Name:e,Data:l})}let l="",c=this,d=function(t,e){let i=0;0===e.Total&&"Complete"===e.Status?i=100:e.Total>0&&(i=Math.round(e.Pushed/e.Total*100));let o="#28a745";"Error"===e.Status?o="#dc3545":"Pushing"===e.Status?o="#4a90d9":"Pending"===e.Status&&(o="#adb5bd");let s="<tr>";return s+="<td><strong>"+t+"</strong></td>",s+="<td>"+e.Status+"</td>",s+="<td>",s+='<div class="progress-bar-container"><div class="progress-bar-fill" style="width:'+i+"%; background:"+o+'"></div></div>',s+=" "+i+"%",s+="</td>",s+="<td>"+(e.Pushed||0)+" / "+(e.Total||0)+"</td>",s+="</tr>",s};if(s.length>0){l+='<div class="sync-section-header">Pushing</div>',l+='<table class="progress-table">',l+="<tr><th>Entity</th><th>Status</th><th>Progress</th><th>Pushed</th></tr>";for(let t=0;t<s.length;t++)l+=d(s[t].Name,s[t].Data);l+="</table>"}if(n.length>0){l+='<div class="sync-section-header">Next Up <span class="sync-section-count">'+n.length+"</span></div>";let t=Math.min(8,n.length);l+='<table class="progress-table progress-table-muted">';for(let e=0;e<t;e++)l+="<tr><td>"+n[e].Name+"</td>",n[e].Data.Total>0?l+='<td class="sync-pending-count">'+c.pict.providers.ComprehensionLoader.formatNumber(n[e].Data.Total)+" records</td>":l+='<td class="sync-pending-count">—</td>',l+="</tr>";l+="</table>",n.length>t&&(l+='<div class="sync-section-overflow">+ '+(n.length-t)+" more</div>")}if(a.length>0){l+='<div class="sync-section-header sync-section-header-error">Errors <span class="sync-section-count">'+a.length+"</span></div>",l+='<table class="progress-table">',l+="<tr><th>Entity</th><th>Status</th><th>Progress</th><th>Pushed</th></tr>";for(let t=0;t<a.length;t++)l+=d(a[t].Name,a[t].Data);l+="</table>"}if(r.length>0){l+='<div class="sync-section-header sync-section-header-ok">Completed <span class="sync-section-count">'+r.length+"</span></div>",l+='<table class="progress-table">',l+="<tr><th>Entity</th><th>Status</th><th>Progress</th><th>Pushed</th></tr>";for(let t=0;t<r.length;t++)l+=d(r[t].Name,r[t].Data);l+="</table>"}e.innerHTML=l}},e.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Load",DefaultRenderable:"ComprehensionLoader-Load",DefaultDestinationAddress:"#ComprehensionLoader-Section-Load",CSS:"\n.progress-table { width: 100%; border-collapse: collapse; margin-top: 4px; margin-bottom: 4px; }\n.progress-table th, .progress-table td { text-align: left; padding: 6px 12px; border-bottom: 1px solid var(--theme-color-border-light, #eee); font-size: 0.9em; }\n.progress-table th { background: #f8f9fa; font-weight: 600; }\n.progress-table-muted td { color: var(--theme-color-text-muted, #888); padding: 3px 12px; font-size: 0.85em; border-bottom: 1px solid #f4f5f6; }\n.progress-bar-container { width: 120px; height: 16px; background: #e9ecef; border-radius: 8px; overflow: hidden; display: inline-block; vertical-align: middle; }\n.progress-bar-fill { height: 100%; background: var(--theme-color-status-success, #28a745); transition: width 0.3s; }\n.sync-section-header { font-size: 0.8em; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: #4a90d9; padding: 10px 0 2px 0; margin-top: 6px; border-top: 1px solid var(--theme-color-border-default, #e0e0e0); }\n.sync-section-header:first-child { border-top: none; margin-top: 10px; }\n.sync-section-header-error { color: #dc3545; }\n.sync-section-header-ok { color: var(--theme-color-status-success, #28a745); }\n.sync-section-count { font-weight: 400; color: var(--theme-color-text-muted, #999); font-size: 0.95em; }\n.sync-section-overflow { font-size: 0.8em; color: var(--theme-color-text-muted, #aaa); padding: 2px 12px 6px; }\n.sync-pending-count { text-align: right; color: var(--theme-color-text-muted, #aaa); font-size: 0.85em; }\n.report-card { background: #f8f9fa; border-radius: 8px; padding: 12px 16px; min-width: 140px; text-align: center; border: 1px solid #e9ecef; }\n.report-card .card-label { font-size: 0.8em; color: var(--theme-color-text-secondary, #666); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; }\n.report-card .card-value { font-size: 1.4em; font-weight: 700; }\n.report-card.outcome-success { border-left: 4px solid var(--theme-color-status-success, #28a745); }\n.report-card.outcome-partial { border-left: 4px solid #ffc107; }\n.report-card.outcome-error { border-left: 4px solid #dc3545; }\n.report-card.outcome-stopped { border-left: 4px solid #6c757d; }\n",Templates:[{Hash:"ComprehensionLoader-Load",Template:'\n<div class="accordion-row">\n\t<div class="accordion-number">4</div>\n\t<div class="accordion-card" id="section4" data-section="4">\n\t\t<div class="accordion-header" onclick="pict.views[\'ComprehensionLoader-Layout\'].toggleSection(\'section4\')">\n\t\t\t<div class="accordion-title">Load</div>\n\t\t\t<span class="accordion-phase" id="phase4"></span>\n\t\t\t<div class="accordion-preview" id="preview4">Push comprehension data to the remote server</div>\n\t\t\t<div class="accordion-actions">\n\t\t\t\t<span class="accordion-go" onclick="event.stopPropagation(); pict.views[\'ComprehensionLoader-Load\'].startLoad()">go</span>\n\t\t\t\t<label class="accordion-auto" onclick="event.stopPropagation()"><input type="checkbox" id="auto4"> <span class="auto-label">auto</span></label>\n\t\t\t</div>\n\t\t\t<div class="accordion-toggle">&#9660;</div>\n\t\t</div>\n\t\t<div class="accordion-body">\n\t\t\t<div style="display:flex; gap:8px; margin-bottom:10px">\n\t\t\t\t<button class="success" style="margin:0" onclick="pict.views[\'ComprehensionLoader-Load\'].startLoad()">Start Load</button>\n\t\t\t\t<button class="danger" style="margin:0" onclick="pict.views[\'ComprehensionLoader-Load\'].stopLoad()">Stop Load</button>\n\t\t\t</div>\n\n\t\t\t<div id="loadStatus"></div>\n\t\t\t<div id="loadProgress"></div>\n\n\t\t\t\x3c!-- Load Report (appears after load completes) --\x3e\n\t\t\t<div id="loadReportSection" style="display:none; margin-top:16px; padding-top:16px; border-top:2px solid var(--theme-color-border-default, #ddd)">\n\t\t\t\t<h3 style="margin:0 0 12px; font-size:1.1em">Load Report</h3>\n\n\t\t\t\t<div id="reportSummaryCards" style="display:flex; gap:12px; flex-wrap:wrap; margin-bottom:16px"></div>\n\t\t\t\t<div id="reportAnomalies" style="margin-bottom:16px"></div>\n\t\t\t\t<div id="reportEntityDetails" style="margin-bottom:16px"></div>\n\n\t\t\t\t<div style="display:flex; gap:8px">\n\t\t\t\t\t<button class="secondary" onclick="pict.views[\'ComprehensionLoader-Load\'].downloadReport()">Download Report JSON</button>\n\t\t\t\t\t<button class="secondary" onclick="pict.views[\'ComprehensionLoader-Load\'].copyReport()">Copy Report</button>\n\t\t\t\t</div>\n\t\t\t\t<div id="reportStatus"></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n'}],Renderables:[{RenderableHash:"ComprehensionLoader-Load",TemplateHash:"ComprehensionLoader-Load",DestinationAddress:"#ComprehensionLoader-Section-Load"}]}},{"pict-view":13}],21:[function(t,e,i){const o=t("pict-view");e.exports=class extends o{constructor(t,e,i){super(t,e,i)}fetchSchema(){let t=document.getElementById("schemaURL").value.trim(),e={};t&&(e.SchemaURL=t),this.pict.providers.ComprehensionLoader.setSectionPhase(2,"busy"),this.pict.providers.ComprehensionLoader.setStatus("schemaStatus","Fetching schema...","info"),this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/schema/fetch",e).then(t=>{t.Success?(this.pict.AppData.ComprehensionLoader.FetchedEntities=t.Entities||[],this.pict.providers.ComprehensionLoader.setStatus("schemaStatus","Fetched schema with "+t.EntityCount+" entities from "+t.SchemaURL,"ok"),this.pict.providers.ComprehensionLoader.setSectionPhase(2,"ok"),this.renderEntityList(),this.pict.providers.ComprehensionLoader.updateAllPreviews()):(this.pict.providers.ComprehensionLoader.setStatus("schemaStatus","Fetch failed: "+(t.Error||"Unknown error"),"error"),this.pict.providers.ComprehensionLoader.setSectionPhase(2,"error"))}).catch(t=>{this.pict.providers.ComprehensionLoader.setStatus("schemaStatus","Request failed: "+t.message,"error"),this.pict.providers.ComprehensionLoader.setSectionPhase(2,"error")})}renderEntityList(){let t=this.pict.AppData.ComprehensionLoader.FetchedEntities||[],e=document.getElementById("entityList");if(!e)return;if(0===t.length)return void(e.innerHTML='<div style="color:var(--theme-color-text-muted, #888); font-size:0.9em">No entities found.</div>');let i='<div style="font-size:0.9em; color:var(--theme-color-text-secondary, #555)">';for(let e=0;e<t.length;e++)i+='<span style="display:inline-block; background:var(--theme-color-background-tertiary, #f0f0f0); border-radius:4px; padding:2px 8px; margin:2px 4px 2px 0; font-size:0.9em">',i+=this.pict.providers.ComprehensionLoader.escapeHtml(t[e]),i+="</span>";i+="</div>",e.innerHTML=i}},e.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Schema",DefaultRenderable:"ComprehensionLoader-Schema",DefaultDestinationAddress:"#ComprehensionLoader-Section-Schema",Templates:[{Hash:"ComprehensionLoader-Schema",Template:'\n<div class="accordion-row">\n\t<div class="accordion-number">2</div>\n\t<div class="accordion-card" id="section2" data-section="2">\n\t\t<div class="accordion-header" onclick="pict.views[\'ComprehensionLoader-Layout\'].toggleSection(\'section2\')">\n\t\t\t<div class="accordion-title">Remote Schema</div>\n\t\t\t<span class="accordion-phase" id="phase2"></span>\n\t\t\t<div class="accordion-preview" id="preview2">Fetch entity schema from the remote server</div>\n\t\t\t<div class="accordion-actions">\n\t\t\t\t<span class="accordion-go" onclick="event.stopPropagation(); pict.views[\'ComprehensionLoader-Schema\'].fetchSchema()">go</span>\n\t\t\t\t<label class="accordion-auto" onclick="event.stopPropagation()"><input type="checkbox" id="auto2"> <span class="auto-label">auto</span></label>\n\t\t\t</div>\n\t\t\t<div class="accordion-toggle">&#9660;</div>\n\t\t</div>\n\t\t<div class="accordion-body">\n\t\t\t<label for="schemaURL">Schema URL (leave blank for default: ServerURL + Retold/Models)</label>\n\t\t\t<input type="text" id="schemaURL" placeholder="http://remote-server:8086/1.0/Retold/Models">\n\n\t\t\t<button class="primary" onclick="pict.views[\'ComprehensionLoader-Schema\'].fetchSchema()">Fetch Schema</button>\n\t\t\t<div id="schemaStatus"></div>\n\n\t\t\t<div id="entityList" style="margin-top:12px"></div>\n\t\t</div>\n\t</div>\n</div>\n'}],Renderables:[{RenderableHash:"ComprehensionLoader-Schema",TemplateHash:"ComprehensionLoader-Schema",DestinationAddress:"#ComprehensionLoader-Section-Schema"}]}},{"pict-view":13}],22:[function(t,e,i){const o=t("pict-view");e.exports=class extends o{constructor(t,e,i){super(t,e,i)}configureSession(){let t=document.getElementById("serverURL").value.trim();if(!t)return void this.pict.providers.ComprehensionLoader.setStatus("sessionConfigStatus","Server URL is required.","error");let e={ServerURL:t.replace(/\/+$/,"")+"/1.0/"},i=document.getElementById("authMethod").value.trim();i&&(e.AuthenticationMethod=i);let o=document.getElementById("authURI").value.trim();o&&(e.AuthenticationURITemplate=o);let s=document.getElementById("checkURI").value.trim();s&&(e.CheckSessionURITemplate=s);let n=document.getElementById("cookieName").value.trim();n&&(e.CookieName=n);let r=document.getElementById("cookieValueAddr").value.trim();r&&(e.CookieValueAddress=r);let a=document.getElementById("cookieValueTemplate").value.trim();a&&(e.CookieValueTemplate=a);let l=document.getElementById("loginMarker").value.trim();l&&(e.CheckSessionLoginMarker=l),this.pict.providers.ComprehensionLoader.setStatus("sessionConfigStatus","Configuring session...","info"),this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/session/configure",e).then(t=>{t.Success?this.pict.providers.ComprehensionLoader.setStatus("sessionConfigStatus","Session configured for "+t.ServerURL+" (domain: "+t.DomainMatch+")","ok"):this.pict.providers.ComprehensionLoader.setStatus("sessionConfigStatus","Configuration failed: "+(t.Error||"Unknown error"),"error")}).catch(t=>{this.pict.providers.ComprehensionLoader.setStatus("sessionConfigStatus","Request failed: "+t.message,"error")})}authenticate(){let t=document.getElementById("userName").value.trim(),e=document.getElementById("password").value.trim();if(!t||!e)return this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Username and password are required.","error"),void this.pict.providers.ComprehensionLoader.setSectionPhase(1,"error");this.pict.providers.ComprehensionLoader.setSectionPhase(1,"busy"),this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Authenticating...","info"),this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/session/authenticate",{UserName:t,Password:e}).then(t=>{t.Success&&t.Authenticated?(this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Authenticated successfully.","ok"),this.pict.providers.ComprehensionLoader.setSectionPhase(1,"ok")):(this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Authentication failed: "+(t.Error||"Not authenticated"),"error"),this.pict.providers.ComprehensionLoader.setSectionPhase(1,"error"))}).catch(t=>{this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Request failed: "+t.message,"error"),this.pict.providers.ComprehensionLoader.setSectionPhase(1,"error")})}checkSession(){this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Checking session...","info"),this.pict.providers.ComprehensionLoader.api("GET","/comprehension_load/session/check").then(t=>{t.Authenticated?this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Session is active. Server: "+(t.ServerURL||"N/A"),"ok"):t.Configured?this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Session configured but not authenticated.","warn"):this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","No session configured.","warn")}).catch(t=>{this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Request failed: "+t.message,"error")})}deauthenticate(){this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/session/deauthenticate").then(t=>{this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Session deauthenticated.","info"),this.pict.providers.ComprehensionLoader.setSectionPhase(1,"")}).catch(t=>{this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Request failed: "+t.message,"error")})}goAction(){this.pict.providers.ComprehensionLoader.setSectionPhase(1,"busy"),this.configureSession(),setTimeout(()=>{this.authenticate()},1500)}},e.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Session",DefaultRenderable:"ComprehensionLoader-Session",DefaultDestinationAddress:"#ComprehensionLoader-Section-Session",Templates:[{Hash:"ComprehensionLoader-Session",Template:'\n<div class="accordion-row">\n\t<div class="accordion-number">1</div>\n\t<div class="accordion-card" id="section1" data-section="1">\n\t\t<div class="accordion-header" onclick="pict.views[\'ComprehensionLoader-Layout\'].toggleSection(\'section1\')">\n\t\t\t<div class="accordion-title">Remote Session</div>\n\t\t\t<span class="accordion-phase" id="phase1"></span>\n\t\t\t<div class="accordion-preview" id="preview1">Configure remote server URL and credentials</div>\n\t\t\t<div class="accordion-actions">\n\t\t\t\t<span class="accordion-go" onclick="event.stopPropagation(); pict.views[\'ComprehensionLoader-Session\'].goAction()">go</span>\n\t\t\t\t<label class="accordion-auto" onclick="event.stopPropagation()"><input type="checkbox" id="auto1"> <span class="auto-label">auto</span></label>\n\t\t\t</div>\n\t\t\t<div class="accordion-toggle">&#9660;</div>\n\t\t</div>\n\t\t<div class="accordion-body">\n\t\t\t<div class="inline-group">\n\t\t\t\t<div style="flex:2">\n\t\t\t\t\t<label for="serverURL">Remote Server URL</label>\n\t\t\t\t\t<input type="text" id="serverURL" placeholder="http://remote-server:8086" value="">\n\t\t\t\t</div>\n\t\t\t\t<div style="flex:1">\n\t\t\t\t\t<label for="authMethod">Auth Method</label>\n\t\t\t\t\t<input type="text" id="authMethod" placeholder="get" value="get">\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<details style="margin-bottom:10px">\n\t\t\t\t<summary style="cursor:pointer; font-size:0.9em; color:var(--theme-color-text-secondary, #666)">Advanced Session Options</summary>\n\t\t\t\t<div style="padding:10px 0">\n\t\t\t\t\t<label for="authURI">Authentication URI Template (leave blank for default)</label>\n\t\t\t\t\t<input type="text" id="authURI" placeholder="Authenticate/{~D:Record.UserName~}/{~D:Record.Password~}">\n\t\t\t\t\t<label for="checkURI">Check Session URI Template</label>\n\t\t\t\t\t<input type="text" id="checkURI" placeholder="CheckSession">\n\t\t\t\t\t<label for="cookieName">Cookie Name</label>\n\t\t\t\t\t<input type="text" id="cookieName" placeholder="SessionID" value="SessionID">\n\t\t\t\t\t<label for="cookieValueAddr">Cookie Value Address</label>\n\t\t\t\t\t<input type="text" id="cookieValueAddr" placeholder="SessionID" value="SessionID">\n\t\t\t\t\t<label for="cookieValueTemplate">Cookie Value Template (overrides Address if set)</label>\n\t\t\t\t\t<input type="text" id="cookieValueTemplate" placeholder="{~D:Record.SessionID~}">\n\t\t\t\t\t<label for="loginMarker">Login Marker</label>\n\t\t\t\t\t<input type="text" id="loginMarker" placeholder="LoggedIn" value="LoggedIn">\n\t\t\t\t</div>\n\t\t\t</details>\n\n\t\t\t<button class="primary" onclick="pict.views[\'ComprehensionLoader-Session\'].configureSession()">Configure Session</button>\n\t\t\t<div id="sessionConfigStatus"></div>\n\n\t\t\t<hr style="margin:16px 0; border:none; border-top:1px solid var(--theme-color-border-light, #eee)">\n\n\t\t\t<div class="inline-group">\n\t\t\t\t<div>\n\t\t\t\t\t<label for="userName">Username</label>\n\t\t\t\t\t<input type="text" id="userName" placeholder="username">\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<label for="password">Password</label>\n\t\t\t\t\t<input type="password" id="password" placeholder="password">\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<button class="success" onclick="pict.views[\'ComprehensionLoader-Session\'].authenticate()">Authenticate</button>\n\t\t\t<button class="secondary" onclick="pict.views[\'ComprehensionLoader-Session\'].checkSession()">Check Session</button>\n\t\t\t<button class="danger" onclick="pict.views[\'ComprehensionLoader-Session\'].deauthenticate()">Deauthenticate</button>\n\t\t\t<div id="sessionAuthStatus"></div>\n\t\t</div>\n\t</div>\n</div>\n'}],Renderables:[{RenderableHash:"ComprehensionLoader-Session",TemplateHash:"ComprehensionLoader-Session",DestinationAddress:"#ComprehensionLoader-Section-Session"}]}},{"pict-view":13}],23:[function(t,e,i){const o=t("pict-view");e.exports=class extends o{constructor(t,e,i){super(t,e,i)}onAfterRender(){if("file"===localStorage.getItem("comprehensionLoader_comprehensionSourceMode")){let t=document.getElementById("sourceMode_file");t&&(t.checked=!0)}this.onSourceModeChange()}onSourceModeChange(){let t=document.querySelector('input[name="comprehensionSourceMode"]:checked'),e=t?t.value:"url",i=document.getElementById("sourceURLSection"),o=document.getElementById("sourceFileSection");i&&(i.style.display="url"===e?"":"none"),o&&(o.style.display="file"===e?"":"none"),this.pict.providers.ComprehensionLoader.updateAllPreviews()}fetchFromURL(){let t=document.getElementById("comprehensionURL").value.trim();if(!t)return void this.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Comprehension URL is required.","error");this.pict.providers.ComprehensionLoader.setSectionPhase(3,"busy"),this.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Fetching comprehension...","info");let e=this;fetch(t).then(function(t){if(!t.ok)throw new Error("HTTP "+t.status);return t.json()}).then(function(t){e.sendComprehensionToServer(t)}).catch(function(i){e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Direct fetch failed ("+i.message+"), trying server proxy...","info"),e.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/comprehension/proxy-fetch",{URL:t}).then(function(t){t.Success?(e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Loaded via proxy: "+t.EntityCount+" entities, "+e.pict.providers.ComprehensionLoader.formatNumber(t.TotalRecords)+" records.","ok"),e.pict.providers.ComprehensionLoader.setSectionPhase(3,"ok"),e.renderComprehensionSummary(t)):(e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Proxy fetch failed: "+(t.Error||"Unknown error"),"error"),e.pict.providers.ComprehensionLoader.setSectionPhase(3,"error"))}).catch(function(t){e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Proxy request failed: "+t.message,"error"),e.pict.providers.ComprehensionLoader.setSectionPhase(3,"error")})})}loadFromFiles(){let t=document.getElementById("comprehensionFiles");if(!t||0===t.files.length)return void this.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Please select one or more JSON files.","error");this.pict.providers.ComprehensionLoader.setSectionPhase(3,"busy"),this.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Reading files...","info");let e=this,i=t.files,o={},s=0;for(let t=0;t<i.length;t++)(function(t){let n=new FileReader;n.onload=function(n){try{let t=JSON.parse(n.target.result),e=Object.keys(t);for(let i=0;i<e.length;i++){let s=e[i];Array.isArray(t[s])?(o[s]||(o[s]=[]),o[s]=o[s].concat(t[s])):o[s]=t[s]}}catch(i){return e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Error parsing "+t.name+": "+i.message,"error"),void e.pict.providers.ComprehensionLoader.setSectionPhase(3,"error")}s++,s===i.length&&e.sendComprehensionToServer(o)},n.onerror=function(){e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Error reading "+t.name,"error"),e.pict.providers.ComprehensionLoader.setSectionPhase(3,"error")},n.readAsText(t)})(i[t])}sendComprehensionToServer(t){let e=this;this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/comprehension/receive",{Comprehension:t}).then(function(t){t.Success?(e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Loaded: "+t.EntityCount+" entities, "+e.pict.providers.ComprehensionLoader.formatNumber(t.TotalRecords)+" records.","ok"),e.pict.providers.ComprehensionLoader.setSectionPhase(3,"ok"),e.renderComprehensionSummary(t)):(e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Failed: "+(t.Error||"Unknown error"),"error"),e.pict.providers.ComprehensionLoader.setSectionPhase(3,"error"))}).catch(function(t){e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Request failed: "+t.message,"error"),e.pict.providers.ComprehensionLoader.setSectionPhase(3,"error")})}renderComprehensionSummary(t){let e=document.getElementById("comprehensionSummary");if(!e)return;let i='<table style="width:100%; border-collapse:collapse; margin-top:8px; font-size:0.9em">';i+='<thead><tr><th style="text-align:left; padding:6px 12px; border-bottom:2px solid var(--theme-color-border-default, #ddd)">Entity</th>',i+='<th style="text-align:right; padding:6px 12px; border-bottom:2px solid var(--theme-color-border-default, #ddd)">Records</th></tr></thead>',i+="<tbody>";let o=t.EntityList||[],s=t.RecordCounts||{};for(let t=0;t<o.length;t++){let e=o[t],n=s[e]||0;i+="<tr>",i+='<td style="padding:4px 12px; border-bottom:1px solid var(--theme-color-background-tertiary, #f0f0f0)">'+this.pict.providers.ComprehensionLoader.escapeHtml(e)+"</td>",i+='<td style="padding:4px 12px; border-bottom:1px solid var(--theme-color-background-tertiary, #f0f0f0); text-align:right; font-variant-numeric:tabular-nums">'+this.pict.providers.ComprehensionLoader.formatNumber(n)+"</td>",i+="</tr>"}i+="</tbody>",i+="<tfoot><tr>",i+='<td style="padding:6px 12px; font-weight:600">Total</td>',i+='<td style="padding:6px 12px; text-align:right; font-weight:600; font-variant-numeric:tabular-nums">'+this.pict.providers.ComprehensionLoader.formatNumber(t.TotalRecords)+"</td>",i+="</tr></tfoot>",i+="</table>",e.innerHTML=i,e.style.display=""}clearComprehension(){let t=this;this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/comprehension/clear").then(function(e){if(e.Success){t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Comprehension data cleared.","info"),t.pict.providers.ComprehensionLoader.setSectionPhase(3,"");let e=document.getElementById("comprehensionSummary");e&&(e.innerHTML="",e.style.display="none")}}).catch(function(e){t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Request failed: "+e.message,"error")})}goAction(){let t=document.querySelector('input[name="comprehensionSourceMode"]:checked');"url"===(t?t.value:"url")?this.fetchFromURL():this.loadFromFiles()}},e.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Source",DefaultRenderable:"ComprehensionLoader-Source",DefaultDestinationAddress:"#ComprehensionLoader-Section-Source",Templates:[{Hash:"ComprehensionLoader-Source",Template:'\n<div class="accordion-row">\n\t<div class="accordion-number">3</div>\n\t<div class="accordion-card" id="section3" data-section="3">\n\t\t<div class="accordion-header" onclick="pict.views[\'ComprehensionLoader-Layout\'].toggleSection(\'section3\')">\n\t\t\t<div class="accordion-title">Comprehension Source</div>\n\t\t\t<span class="accordion-phase" id="phase3"></span>\n\t\t\t<div class="accordion-preview" id="preview3">Provide a comprehension JSON URL or upload files</div>\n\t\t\t<div class="accordion-actions">\n\t\t\t\t<span class="accordion-go" onclick="event.stopPropagation(); pict.views[\'ComprehensionLoader-Source\'].goAction()">go</span>\n\t\t\t\t<label class="accordion-auto" onclick="event.stopPropagation()"><input type="checkbox" id="auto3"> <span class="auto-label">auto</span></label>\n\t\t\t</div>\n\t\t\t<div class="accordion-toggle">&#9660;</div>\n\t\t</div>\n\t\t<div class="accordion-body">\n\t\t\t<div style="margin-bottom:12px">\n\t\t\t\t<label style="margin-bottom:6px">Source Mode</label>\n\t\t\t\t<div style="display:flex; gap:16px; align-items:center">\n\t\t\t\t\t<label style="font-weight:normal; margin:0; cursor:pointer">\n\t\t\t\t\t\t<input type="radio" name="comprehensionSourceMode" id="sourceMode_url" value="url" checked onchange="pict.views[\'ComprehensionLoader-Source\'].onSourceModeChange()"> URL\n\t\t\t\t\t\t<span style="color:var(--theme-color-text-muted, #888); font-size:0.85em">(fetch from a URL)</span>\n\t\t\t\t\t</label>\n\t\t\t\t\t<label style="font-weight:normal; margin:0; cursor:pointer">\n\t\t\t\t\t\t<input type="radio" name="comprehensionSourceMode" id="sourceMode_file" value="file" onchange="pict.views[\'ComprehensionLoader-Source\'].onSourceModeChange()"> File Upload\n\t\t\t\t\t\t<span style="color:var(--theme-color-text-muted, #888); font-size:0.85em">(load JSON from local files)</span>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div id="sourceURLSection">\n\t\t\t\t<label for="comprehensionURL">Comprehension JSON URL</label>\n\t\t\t\t<input type="text" id="comprehensionURL" placeholder="http://example.com/comprehension.json">\n\t\t\t\t<button class="primary" onclick="pict.views[\'ComprehensionLoader-Source\'].fetchFromURL()">Fetch Comprehension</button>\n\t\t\t</div>\n\n\t\t\t<div id="sourceFileSection" style="display:none">\n\t\t\t\t<label for="comprehensionFiles">Comprehension JSON File(s)</label>\n\t\t\t\t<input type="file" id="comprehensionFiles" multiple accept=".json" style="margin-bottom:10px">\n\t\t\t\t<div style="font-size:0.8em; color:var(--theme-color-text-muted, #888); margin-bottom:10px">Multiple files will be merged (entity keys combined).</div>\n\t\t\t\t<button class="primary" onclick="pict.views[\'ComprehensionLoader-Source\'].loadFromFiles()">Load Files</button>\n\t\t\t</div>\n\n\t\t\t<button class="secondary" onclick="pict.views[\'ComprehensionLoader-Source\'].clearComprehension()" style="margin-left:0">Clear Comprehension</button>\n\t\t\t<div id="sourceStatus"></div>\n\n\t\t\t<div id="comprehensionSummary" style="display:none"></div>\n\t\t</div>\n\t</div>\n</div>\n'}],Renderables:[{RenderableHash:"ComprehensionLoader-Source",TemplateHash:"ComprehensionLoader-Source",DestinationAddress:"#ComprehensionLoader-Section-Source"}]}},{"pict-view":13}]},{},[17])(17)});
1
+ "use strict";!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).comprehensionLoader=e()}}(function(){return function e(t,o,r){function i(n,s){if(!o[n]){if(!t[n]){var l="function"==typeof require&&require;if(!s&&l)return l(n,!0);if(a)return a(n,!0);var d=new Error("Cannot find module '"+n+"'");throw d.code="MODULE_NOT_FOUND",d}var c=o[n]={exports:{}};t[n][0].call(c.exports,function(e){return i(t[n][1][e]||e)},c,c.exports,e,t,o,r)}return o[n].exports}for(var a="function"==typeof require&&require,n=0;n<r.length;n++)i(r[n]);return i}({1:[function(e,t,o){t.exports={name:"fable-serviceproviderbase",version:"3.0.19",description:"Simple base classes for fable services.",main:"source/Fable-ServiceProviderBase.js",scripts:{start:"node source/Fable-ServiceProviderBase.js",test:"npx quack test",tests:"npx quack test -g",coverage:"npx quack coverage",build:"npx quack build",types:"tsc -p ./tsconfig.build.json",check:"tsc -p . --noEmit"},types:"types/source/Fable-ServiceProviderBase.d.ts",mocha:{diff:!0,extension:["js"],package:"./package.json",reporter:"spec",slow:"75",timeout:"5000",ui:"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]},repository:{type:"git",url:"https://github.com/stevenvelozo/fable-serviceproviderbase.git"},keywords:["entity","behavior"],author:"Steven Velozo <steven@velozo.com> (http://velozo.com/)",license:"MIT",bugs:{url:"https://github.com/stevenvelozo/fable-serviceproviderbase/issues"},homepage:"https://github.com/stevenvelozo/fable-serviceproviderbase",devDependencies:{"@types/mocha":"^10.0.10",fable:"^3.1.62",quackage:"^1.0.58",typescript:"^5.9.3"}}},{}],2:[function(e,t,o){const r=e("../package.json");class i{constructor(e,t,o){this.fable,this.UUID,this.options,this.services,this.servicesMap,"object"==typeof e&&e.isFable?this.connectFable(e):this.fable=!1,this._PackageFableServiceProvider=r,this.fable?(this.UUID=e.getUUID(),this.options="object"==typeof t?t:{}):(this.options="object"!=typeof e||e.isFable?"object"==typeof t?t:{}:e,this.UUID=`CORE-SVC-${Math.floor(89999*Math.random()+1e4)}`),this.serviceType=`Unknown-${this.UUID}`,this.Hash="string"==typeof o?o:this.fable||"string"!=typeof t?`${this.UUID}`:t}connectFable(e){if("object"!=typeof e||!e.isFable){let t=`Fable Service Provider Base: Cannot connect to Fable, invalid Fable object passed in. The pFable parameter was a [${typeof e}].}`;return console.log(t),new Error(t)}return this.fable||(this.fable=e),this.log||(this.log=this.fable.Logging),this.services||(this.services=this.fable.services),this.servicesMap||(this.servicesMap=this.fable.servicesMap),!0}static isFableService=!0}t.exports=i,t.exports.CoreServiceProviderBase=i},{"../package.json":1}],3:[function(e,t,o){t.exports={name:"pict-application",version:"1.0.34",description:"Application base class for a pict view-based application",main:"source/Pict-Application.js",scripts:{test:"npx quack test",start:"node source/Pict-Application.js",coverage:"npx quack coverage",build:"npx quack build","docker-dev-build":"docker build ./ -f Dockerfile_LUXURYCode -t pict-application-image:local","docker-dev-run":'docker run -it -d --name pict-application-dev -p 30001:8080 -p 38086:8086 -v "$PWD/.config:/home/coder/.config" -v "$PWD:/home/coder/pict-application" -u "$(id -u):$(id -g)" -e "DOCKER_USER=$USER" pict-application-image:local',"docker-dev-shell":"docker exec -it pict-application-dev /bin/bash",tests:"npx quack test -g",lint:"eslint source/**",types:"tsc -p ."},types:"types/source/Pict-Application.d.ts",repository:{type:"git",url:"git+https://github.com/stevenvelozo/pict-application.git"},author:"steven velozo <steven@velozo.com>",license:"MIT",bugs:{url:"https://github.com/stevenvelozo/pict-application/issues"},homepage:"https://github.com/stevenvelozo/pict-application#readme",devDependencies:{"@eslint/js":"^9.28.0","browser-env":"^3.3.0",eslint:"^9.28.0",pict:"^1.0.348","pict-docuserve":"^0.1.5","pict-provider":"^1.0.10","pict-view":"^1.0.66",quackage:"^1.1.0",typescript:"^5.9.3"},mocha:{diff:!0,extension:["js"],package:"./package.json",reporter:"spec",slow:"75",timeout:"5000",ui:"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]},dependencies:{"fable-serviceproviderbase":"^3.0.19"}}},{}],4:[function(e,t,o){const r=e("fable-serviceproviderbase"),i=e("../package.json"),a={Name:"DefaultPictApplication",MainViewportViewIdentifier:"Default-View",MainViewportRenderableHash:!1,MainViewportDestinationAddress:!1,MainViewportDefaultDataAddress:!1,AutoSolveAfterInitialize:!0,AutoRenderMainViewportViewAfterInitialize:!0,AutoRenderViewsAfterInitialize:!1,AutoLoginAfterInitialize:!1,AutoLoadDataAfterLogin:!1,ConfigurationOnlyViews:[],Manifests:{},IdentifierAddressPrefix:"PICT-"};t.exports=class extends r{constructor(e,t,o){let r="object"==typeof e.settings.PictApplicationConfiguration?e.settings.PictApplicationConfiguration:{};super(e,Object.assign({},JSON.parse(JSON.stringify(a)),r,t),o),this.options,this.log,this.fable,this.UUID,this.Hash,this.servicesMap,this.serviceType="PictApplication",this._Package=i,this.pict=this.fable,this.AppData=this.fable.AppData,this.Bundle=this.fable.Bundle,this.initializeTimestamp,this.lastSolvedTimestamp,this.lastLoginTimestamp,this.lastMarshalFromViewsTimestamp,this.lastMarshalToViewsTimestamp,this.lastAutoRenderTimestamp,this.lastLoadDataTimestamp;let n=Object.keys(this.options.Manifests);if(n.length>0)for(let e=0;e<n.length;e++){let t=n[e];this.fable.instantiateServiceProvider("Manifest",this.options.Manifests[t],t)}}onPreSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onPreSolve:`),!0}onPreSolveAsync(e){return this.onPreSolve(),e()}onBeforeSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeSolve:`),!0}onBeforeSolveAsync(e){return this.onBeforeSolve(),e()}onSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onSolve:`),!0}onSolveAsync(e){return this.onSolve(),e()}solve(){this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} executing solve() function...`);let e=Object.keys(this.pict.providers),t=[];for(let o=0;o<e.length;o++){let r=this.pict.providers[e[o]];r.options.AutoSolveWithApp&&t.push(r)}t.sort((e,t)=>e.options.AutoSolveOrdinal-t.options.AutoSolveOrdinal);for(let e=0;e<t.length;e++)t[e].solve(t[e]);this.onBeforeSolve();let o=Object.keys(this.pict.views),r=[];for(let e=0;e<o.length;e++){let t=this.pict.views[o[e]];t.options.AutoInitialize&&r.push(t)}r.sort((e,t)=>e.options.AutoInitializeOrdinal-t.options.AutoInitializeOrdinal);for(let e=0;e<r.length;e++)r[e].solve();return this.onSolve(),this.onAfterSolve(),this.lastSolvedTimestamp=this.fable.log.getTimeStamp(),!0}solveAsync(e){let t=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate");t.anticipate(this.onBeforeSolveAsync.bind(this));let o="function"==typeof e&&e;o||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} solveAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),o=e=>{e&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} solveAsync Auto Callback Error: ${e}`,e)});let r=Object.keys(this.pict.providers),i=[];for(let e=0;e<r.length;e++){let t=this.pict.providers[r[e]];t.options.AutoSolveWithApp&&i.push(t)}i.sort((e,t)=>e.options.AutoSolveOrdinal-t.options.AutoSolveOrdinal);for(let e=0;e<i.length;e++)t.anticipate(i[e].solveAsync.bind(i[e]));let a=Object.keys(this.pict.views),n=[];for(let e=0;e<a.length;e++){let t=this.pict.views[a[e]];t.options.AutoSolveWithApp&&n.push(t)}n.sort((e,t)=>e.options.AutoSolveOrdinal-t.options.AutoSolveOrdinal);for(let e=0;e<n.length;e++)t.anticipate(n[e].solveAsync.bind(n[e]));t.anticipate(this.onSolveAsync.bind(this)),t.anticipate(this.onAfterSolveAsync.bind(this)),t.wait(e=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} solveAsync() complete.`),this.lastSolvedTimestamp=this.fable.log.getTimeStamp(),o(e)))}onAfterSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterSolve:`),!0}onAfterSolveAsync(e){return this.onAfterSolve(),e()}onBeforeLoginAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeLoginAsync:`),e()}onLoginAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onLoginAsync:`),e()}loginAsync(e){const t=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate");let o=e;"function"!=typeof o&&(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loginAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),o=e=>{e&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loginAsync Auto Callback Error: ${e}`,e)}),t.anticipate(this.onBeforeLoginAsync.bind(this)),t.anticipate(this.onLoginAsync.bind(this)),t.anticipate(this.onAfterLoginAsync.bind(this)),this.options.AutoLoadDataAfterLogin&&t.anticipate(e=>{if(!this.isLoggedIn())return e();this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto loading data after login...`),this.loadDataAsync(t=>{e(t)})}),t.wait(e=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loginAsync() complete.`),this.lastLoginTimestamp=this.fable.log.getTimeStamp(),o(e)))}isLoggedIn(){return!0}onAfterLoginAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterLoginAsync:`),e()}onBeforeLoadDataAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeLoadDataAsync:`),e()}onLoadDataAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onLoadDataAsync:`),e()}loadDataAsync(e){const t=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate");let o=e;"function"!=typeof o&&(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loadDataAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),o=e=>{e&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loadDataAsync Auto Callback Error: ${e}`,e)}),t.anticipate(this.onBeforeLoadDataAsync.bind(this));let r=Object.keys(this.pict.providers),i=[];for(let e=0;e<r.length;e++){let t=this.pict.providers[r[e]];t.options.AutoLoadDataWithApp&&i.push(t)}i.sort((e,t)=>e.options.AutoLoadDataOrdinal-t.options.AutoLoadDataOrdinal);for(const e of i)t.anticipate(e.onBeforeLoadDataAsync.bind(e));t.anticipate(this.onLoadDataAsync.bind(this));for(const e of i)t.anticipate(e.onLoadDataAsync.bind(e));t.anticipate(this.onAfterLoadDataAsync.bind(this));for(const e of i)t.anticipate(e.onAfterLoadDataAsync.bind(e));t.wait(e=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} loadDataAsync() complete.`),this.lastLoadDataTimestamp=this.fable.log.getTimeStamp(),o(e)))}onAfterLoadDataAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterLoadDataAsync:`),e()}onBeforeSaveDataAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeSaveDataAsync:`),e()}onSaveDataAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onSaveDataAsync:`),e()}saveDataAsync(e){const t=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate");let o=e;"function"!=typeof o&&(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} saveDataAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),o=e=>{e&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} saveDataAsync Auto Callback Error: ${e}`,e)}),t.anticipate(this.onBeforeSaveDataAsync.bind(this));let r=Object.keys(this.pict.providers),i=[];for(let e=0;e<r.length;e++){let t=this.pict.providers[r[e]];t.options.AutoSaveDataWithApp&&i.push(t)}i.sort((e,t)=>e.options.AutoSaveDataOrdinal-t.options.AutoSaveDataOrdinal);for(const e of i)t.anticipate(e.onBeforeSaveDataAsync.bind(e));t.anticipate(this.onSaveDataAsync.bind(this));for(const e of i)t.anticipate(e.onSaveDataAsync.bind(e));t.anticipate(this.onAfterSaveDataAsync.bind(this));for(const e of i)t.anticipate(e.onAfterSaveDataAsync.bind(e));t.wait(e=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} saveDataAsync() complete.`),this.lastSaveDataTimestamp=this.fable.log.getTimeStamp(),o(e)))}onAfterSaveDataAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterSaveDataAsync:`),e()}onBeforeInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeInitialize:`),!0}onBeforeInitializeAsync(e){return this.onBeforeInitialize(),e()}onInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onInitialize:`),!0}onInitializeAsync(e){return this.onInitialize(),e()}initialize(){if(this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} initialize:`),this.initializeTimestamp)return this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} initialize called but initialization is already completed. Aborting.`),!1;{if(this.onBeforeInitialize(),"ConfigurationOnlyViews"in this.options)for(let e=0;e<this.options.ConfigurationOnlyViews.length;e++){let t=void 0===this.options.ConfigurationOnlyViews[e].ViewIdentifier?`AutoView-${this.fable.getUUID()}`:this.options.ConfigurationOnlyViews[e].ViewIdentifier;this.log.info(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} adding configuration only view: ${t}`),this.pict.addView(t,this.options.ConfigurationOnlyViews[e])}this.onInitialize();let e=Object.keys(this.pict.providers),t=[];for(let o=0;o<e.length;o++){let r=this.pict.providers[e[o]];r.options.AutoInitialize&&t.push(r)}t.sort((e,t)=>e.options.AutoInitializeOrdinal-t.options.AutoInitializeOrdinal);for(let e=0;e<t.length;e++)t[e].initialize();let o=Object.keys(this.pict.views),r=[];for(let e=0;e<o.length;e++){let t=this.pict.views[o[e]];t.options.AutoInitialize&&r.push(t)}r.sort((e,t)=>e.options.AutoInitializeOrdinal-t.options.AutoInitializeOrdinal);for(let e=0;e<r.length;e++)r[e].initialize();return this.onAfterInitialize(),this.options.AutoSolveAfterInitialize&&(this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto solving after initialization...`),this.solve()),this.options.AutoRenderMainViewportViewAfterInitialize&&(this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto rendering after initialization...`),this.render()),this.initializeTimestamp=this.fable.log.getTimeStamp(),this.onCompletionOfInitialize(),!0}}initializeAsync(e){this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} initializeAsync:`);let t="function"==typeof e&&e;if(t||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} initializeAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),t=e=>{e&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} initializeAsync Auto Callback Error: ${e}`,e)}),this.initializeTimestamp)return this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} async initialize called but initialization is already completed. Aborting.`),this.onCompletionOfInitializeAsync(t);{let e=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate");if(this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} beginning initialization...`),"ConfigurationOnlyViews"in this.options)for(let e=0;e<this.options.ConfigurationOnlyViews.length;e++){let t=void 0===this.options.ConfigurationOnlyViews[e].ViewIdentifier?`AutoView-${this.fable.getUUID()}`:this.options.ConfigurationOnlyViews[e].ViewIdentifier;this.log.info(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} adding configuration only view: ${t}`),this.pict.addView(t,this.options.ConfigurationOnlyViews[e])}e.anticipate(this.onBeforeInitializeAsync.bind(this)),e.anticipate(this.onInitializeAsync.bind(this));let o=Object.keys(this.pict.providers),r=[];for(let e=0;e<o.length;e++){let t=this.pict.providers[o[e]];t.options.AutoInitialize&&r.push(t)}r.sort((e,t)=>e.options.AutoInitializeOrdinal-t.options.AutoInitializeOrdinal);for(let t=0;t<r.length;t++)e.anticipate(r[t].initializeAsync.bind(r[t]));let i=Object.keys(this.pict.views),a=[];for(let e=0;e<i.length;e++){let t=this.pict.views[i[e]];t.options.AutoInitialize&&a.push(t)}a.sort((e,t)=>e.options.AutoInitializeOrdinal-t.options.AutoInitializeOrdinal);for(let t=0;t<a.length;t++){let o=a[t];e.anticipate(o.initializeAsync.bind(o))}e.anticipate(this.onAfterInitializeAsync.bind(this)),this.options.AutoLoginAfterInitialize&&(this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto login (asynchronously) after initialization...`),e.anticipate(this.loginAsync.bind(this))),this.options.AutoSolveAfterInitialize&&(this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto solving (asynchronously) after initialization...`),e.anticipate(this.solveAsync.bind(this))),this.options.AutoRenderMainViewportViewAfterInitialize&&(this.pict.LogNoisiness>1&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} auto rendering (asynchronously) after initialization...`),e.anticipate(this.renderMainViewportAsync.bind(this))),e.wait(e=>(e&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} initializeAsync Error: ${e.message||e}`,{stack:e.stack}),this.initializeTimestamp=this.fable.log.getTimeStamp(),this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} initialization complete.`),t()))}}onAfterInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterInitialize:`),!0}onAfterInitializeAsync(e){return this.onAfterInitialize(),e()}onCompletionOfInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onCompletionOfInitialize:`),!0}onCompletionOfInitializeAsync(e){return this.onCompletionOfInitialize(),e()}onBeforeMarshalFromViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeMarshalFromViews:`),!0}onBeforeMarshalFromViewsAsync(e){return this.onBeforeMarshalFromViews(),e()}onMarshalFromViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onMarshalFromViews:`),!0}onMarshalFromViewsAsync(e){return this.onMarshalFromViews(),e()}marshalFromViews(){this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} executing marshalFromViews() function...`),this.onBeforeMarshalFromViews();let e=Object.keys(this.pict.views),t=[];for(let o=0;o<e.length;o++){let r=this.pict.views[e[o]];t.push(r)}for(let e=0;e<t.length;e++)t[e].marshalFromView();return this.onMarshalFromViews(),this.onAfterMarshalFromViews(),this.lastMarshalFromViewsTimestamp=this.fable.log.getTimeStamp(),!0}marshalFromViewsAsync(e){let t=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate"),o="function"==typeof e&&e;o||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalFromViewsAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),o=e=>{e&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalFromViewsAsync Auto Callback Error: ${e}`,e)}),t.anticipate(this.onBeforeMarshalFromViewsAsync.bind(this));let r=Object.keys(this.pict.views),i=[];for(let e=0;e<r.length;e++){let t=this.pict.views[r[e]];i.push(t)}for(let e=0;e<i.length;e++)t.anticipate(i[e].marshalFromViewAsync.bind(i[e]));t.anticipate(this.onMarshalFromViewsAsync.bind(this)),t.anticipate(this.onAfterMarshalFromViewsAsync.bind(this)),t.wait(e=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalFromViewsAsync() complete.`),this.lastMarshalFromViewsTimestamp=this.fable.log.getTimeStamp(),o(e)))}onAfterMarshalFromViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterMarshalFromViews:`),!0}onAfterMarshalFromViewsAsync(e){return this.onAfterMarshalFromViews(),e()}onBeforeMarshalToViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeMarshalToViews:`),!0}onBeforeMarshalToViewsAsync(e){return this.onBeforeMarshalToViews(),e()}onMarshalToViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onMarshalToViews:`),!0}onMarshalToViewsAsync(e){return this.onMarshalToViews(),e()}marshalToViews(){this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} executing marshalToViews() function...`),this.onBeforeMarshalToViews();let e=Object.keys(this.pict.views),t=[];for(let o=0;o<e.length;o++){let r=this.pict.views[e[o]];t.push(r)}for(let e=0;e<t.length;e++)t[e].marshalToView();return this.onMarshalToViews(),this.onAfterMarshalToViews(),this.lastMarshalToViewsTimestamp=this.fable.log.getTimeStamp(),!0}marshalToViewsAsync(e){let t=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate"),o="function"==typeof e&&e;o||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalToViewsAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),o=e=>{e&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalToViewsAsync Auto Callback Error: ${e}`,e)}),t.anticipate(this.onBeforeMarshalToViewsAsync.bind(this));let r=Object.keys(this.pict.views),i=[];for(let e=0;e<r.length;e++){let t=this.pict.views[r[e]];i.push(t)}for(let e=0;e<i.length;e++)t.anticipate(i[e].marshalToViewAsync.bind(i[e]));t.anticipate(this.onMarshalToViewsAsync.bind(this)),t.anticipate(this.onAfterMarshalToViewsAsync.bind(this)),t.wait(e=>(this.pict.LogNoisiness>2&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalToViewsAsync() complete.`),this.lastMarshalToViewsTimestamp=this.fable.log.getTimeStamp(),o(e)))}onAfterMarshalToViews(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterMarshalToViews:`),!0}onAfterMarshalToViewsAsync(e){return this.onAfterMarshalToViews(),e()}onBeforeRender(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onBeforeRender:`),!0}onBeforeRenderAsync(e){return this.onBeforeRender(),e()}render(e,t,o,r){let i="string"!=typeof e?this.options.MainViewportViewIdentifier:e,a="string"!=typeof t?this.options.MainViewportRenderableHash:t,n="string"!=typeof o?this.options.MainViewportDestinationAddress:o,s="string"!=typeof r?this.options.MainViewportDefaultDataAddress:r;this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} VIEW Renderable[${a}] Destination[${n}] TemplateDataAddress[${s}] render:`),this.onBeforeRender();let l="string"==typeof i&&this.servicesMap.PictView[i];return l?(this.onRender(),l.render(a,n,s),this.onAfterRender(),!0):(this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} could not render from View ${i} because it is not a valid view.`),!1)}onRender(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onRender:`),!0}onRenderAsync(e){return this.onRender(),e()}renderAsync(e,t,o,r,i){let a="string"!=typeof e?this.options.MainViewportViewIdentifier:e,n="string"!=typeof t?this.options.MainViewportRenderableHash:t,s="string"!=typeof o?this.options.MainViewportDestinationAddress:o,l="string"!=typeof r?this.options.MainViewportDefaultDataAddress:r,d="function"==typeof i?i:"function"==typeof r?r:"function"==typeof o?o:"function"==typeof t?t:"function"==typeof e&&e;d||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),d=e=>{e&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAsync Auto Callback Error: ${e}`,e)}),this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} VIEW Renderable[${n}] Destination[${s}] TemplateDataAddress[${l}] renderAsync:`);let c=this.fable.newAnticipate();c.anticipate(this.onBeforeRenderAsync.bind(this));let h="string"==typeof a&&this.servicesMap.PictView[a];if(!h){let e=`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} could not asynchronously render from View ${a} because it is not a valid view.`;return this.pict.LogNoisiness>3&&this.log.error(e),d(new Error(e))}return c.anticipate(this.onRenderAsync.bind(this)),c.anticipate(e=>{h.renderAsync.call(h,n,s,l,e)}),c.anticipate(this.onAfterRenderAsync.bind(this)),c.wait(d)}onAfterRender(){return this.pict.LogNoisiness>3&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} onAfterRender:`),!0}onAfterRenderAsync(e){return this.onAfterRender(),e()}renderMainViewport(){return this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderMainViewport:`),this.render()}renderMainViewportAsync(e){return this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow APPLICATION [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderMainViewportAsync:`),this.renderAsync(e)}renderAutoViews(){this.pict.LogNoisiness>0&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} beginning renderAutoViews...`);let e=Object.keys(this.pict.views);e.sort((e,t)=>this.pict.views[e].options.AutoRenderOrdinal-this.pict.views[t].options.AutoRenderOrdinal);for(let t=0;t<e.length;t++){let o=this.pict.views[e[t]];o.options.AutoRender&&o.render()}this.pict.LogNoisiness>0&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAutoViewsAsync complete.`)}renderAutoViewsAsync(e){let t=this.fable.instantiateServiceProviderWithoutRegistration("Anticipate"),o="function"==typeof e&&e;o||(this.log.warn(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAutoViewsAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),o=e=>{e&&this.log.error(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAutoViewsAsync Auto Callback Error: ${e}`,e)}),this.pict.LogNoisiness>0&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} beginning renderAutoViewsAsync...`);let r=Object.keys(this.pict.views);r.sort((e,t)=>this.pict.views[e].options.AutoRenderOrdinal-this.pict.views[t].options.AutoRenderOrdinal);for(let e=0;e<r.length;e++){let o=this.pict.views[r[e]];o.options.AutoRender&&t.anticipate(o.renderAsync.bind(o))}t.wait(e=>(this.lastAutoRenderTimestamp=this.fable.log.getTimeStamp(),this.pict.LogNoisiness>0&&this.log.trace(`PictApp [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAutoViewsAsync complete.`),o(e)))}get isPictApplication(){return!0}}},{"../package.json":3,"fable-serviceproviderbase":2}],5:[function(e,t,o){
2
+ /**
3
+ * Pict Provider: Theme
4
+ *
5
+ * Runtime theme manager for Pict applications. Registers theme bundles
6
+ * (token maps + CSS + SVG + image assets) and applies them by injecting
7
+ * CSS custom properties into a single <style id="pict-theme"> element.
8
+ *
9
+ * Themes can be:
10
+ * - Single-mode (Modes.Strategy = "single")
11
+ * - Paired light/dark (Modes.Strategy = "paired")
12
+ * - System-aware (Modes.Strategy = "system" — paired + auto-pick)
13
+ *
14
+ * Mode is reflected as `theme-light` / `theme-dark` class on <html>.
15
+ *
16
+ * Token resolution path examples:
17
+ * provider.token('Tokens.Color.Background.Primary') -> raw current value
18
+ * provider.cssVar('Color.Background.Primary') -> 'var(--theme-color-background-primary)'
19
+ * provider.asset('SVG', 'Logo') -> SVG string
20
+ * provider.image('Hero') -> image URL / data URL
21
+ *
22
+ * Template expressions registered (when pict has addTemplate):
23
+ * {~Theme:Tokens.Color.Background.Primary~} raw value
24
+ * {~ThemeVar:Color.Background.Primary~} var(--theme-...) reference
25
+ * {~ThemeAsset:SVG.Logo~} asset content
26
+ * {~ThemeImage:Hero~} image URL
27
+ *
28
+ * Stateless: this provider does not persist anything. Host applications
29
+ * decide what to apply at boot (from localStorage, server config, etc.).
30
+ *
31
+ * @author Steven Velozo <steven@velozo.com>
32
+ * @license MIT
33
+ */
34
+ const r=e("pict-provider"),i=e("./Theme-Diagram-Adapter.js"),a="pict-theme",n="theme-light",s="theme-dark",l="--theme-";class d extends r{constructor(t,o,r){super(t,o,r),this.serviceType="PictProviderTheme",this._themes={},this._themeOrder=[],this._activeHash=null,this._activeMode=null,this._resolvedMode=null,this._registeredCSSHashes=[],this._applyListeners=[];let a=this;if(this.diagram={MERMAID_TOKEN_MAP:i.MERMAID_TOKEN_MAP,readCSSVar:i.readCSSVar,getMermaidTokenMap:i.getMermaidTokenMap,buildMermaidThemeVariables:i.buildMermaidThemeVariables,initializeMermaid:i.initializeMermaid,stashMermaidSource:i.stashMermaidSource,refreshMermaidDiagrams:i.refreshMermaidDiagrams,stripMermaidStyleImportance:i.stripMermaidStyleImportance,adaptMermaid:function(e,t){return i.adaptMermaid(a,e,t)}},this.pict&&"function"==typeof this.pict.addTemplate)try{this.pict.addTemplate(e("./templates/Pict-Template-Theme.js")),this.pict.addTemplate(e("./templates/Pict-Template-ThemeVar.js")),this.pict.addTemplate(e("./templates/Pict-Template-ThemeAsset.js")),this.pict.addTemplate(e("./templates/Pict-Template-ThemeImage.js"))}catch(e){this.log&&this.log.warn("PictProviderTheme: template registration skipped: "+e.message)}}registerTheme(e){return e&&"object"==typeof e?e.Hash&&"string"==typeof e.Hash?(this._themes[e.Hash]||this._themeOrder.push(e.Hash),this._themes[e.Hash]=e,!0):(this.log&&this.log.warn("PictProviderTheme.registerTheme: bundle missing required string Hash"),!1):(this.log&&this.log.warn("PictProviderTheme.registerTheme: bundle is not an object"),!1)}listThemes(){let e=[];for(let t=0;t<this._themeOrder.length;t++){let o=this._themeOrder[t],r=this._themes[o],i=r.Modes||{};e.push({Hash:r.Hash,Name:r.Name||r.Hash,Version:r.Version||null,Strategy:i.Strategy||"single",DefaultMode:i.Default||"light",Comprehensive:!1!==r.Comprehensive})}return e}getTheme(e){return this._themes[e]||null}applyTheme(e,t){let o=this._themes[e];if(!o)return this.log&&this.log.warn(`PictProviderTheme.applyTheme: unknown theme hash [${e}]`),!1;let r=this._resolveBundle(o),i=r.Modes&&r.Modes.Strategy||"single",a=r.Modes&&r.Modes.Default||"light",n=t||a;"single"===i&&(n=a),this._activeHash=e,this._activeMode=n;let s=this._buildThemeCSS(r);return this._injectStyleElement(s),this._registerAuxiliaryCSS(r),this._applyMode(n,i),this._fireApplyListeners(r),!0}setMode(e){if(!this._activeHash)return!1;let t=this._resolveBundle(this._themes[this._activeHash]),o=t.Modes&&t.Modes.Strategy||"single";return"single"!==o&&(this._activeMode=e,this._applyMode(e,o),this._fireApplyListeners(t),!0)}onApply(e){if("function"!=typeof e)return function(){};this._applyListeners.push(e);let t=this;return function(){t.offApply(e)}}offApply(e){let t=this._applyListeners.indexOf(e);t>=0&&this._applyListeners.splice(t,1)}_fireApplyListeners(e){if(0===this._applyListeners.length)return;let t={Hash:this._activeHash,Mode:this._activeMode,ResolvedMode:this._resolvedMode};for(let o=0;o<this._applyListeners.length;o++)try{this._applyListeners[o](e,t)}catch(e){this.log&&this.log.warn("PictProviderTheme: onApply listener threw: "+e.message)}}unapplyTheme(){if("undefined"!=typeof document){let e=document.getElementById(a);e&&e.parentNode&&e.parentNode.removeChild(e),document.documentElement&&document.documentElement.classList&&(document.documentElement.classList.remove(n),document.documentElement.classList.remove(s))}if(this.pict&&this.pict.CSSMap&&"function"==typeof this.pict.CSSMap.removeCSS)for(let e=0;e<this._registeredCSSHashes.length;e++)this.pict.CSSMap.removeCSS(this._registeredCSSHashes[e]);return this._registeredCSSHashes=[],this._activeHash=null,this._activeMode=null,this._resolvedMode=null,!0}getActiveTheme(){return{Hash:this._activeHash,Mode:this._activeMode,ResolvedMode:this._activeHash?this._currentResolvedMode():null}}token(e){if(!this._activeHash)return null;let t=this._resolveBundle(this._themes[this._activeHash]),o=this._walkPath(t,e);return this._resolveModedValue(o)}cssVar(e){return"var("+this._cssVarName(e)+")"}asset(e,t){if(!this._activeHash)return null;let o=this._resolveBundle(this._themes[this._activeHash])[e];return o?this._walkPath(o,t):null}image(e){return this.asset("Image",e)}svg(e){return this.asset("SVG",e)}_resolveBundle(e){let t=[],o=e,r={};for(;o&&!r[o.Hash];){r[o.Hash]=!0,t.unshift(o);let e=o.BasedOn;o=e?this._themes[e]:null}if(1===t.length)return t[0];let i={};for(let e=0;e<t.length;e++)i=this._deepMerge(i,t[e]);return i}_deepMerge(e,t){let o=Object.assign({},e),r=Object.keys(t);for(let e=0;e<r.length;e++){let i=r[e],a=t[i];null===a||"object"!=typeof a||Array.isArray(a)||null===o[i]||"object"!=typeof o[i]||Array.isArray(o[i])?o[i]=a:o[i]=this._deepMerge(o[i],a)}return o}_walkPath(e,t){if(!e||!t)return null;let o=t.split("."),r=e;for(let e=0;e<o.length;e++){if(null===r||"object"!=typeof r)return null;if(r=r[o[e]],void 0===r)return null}return r}_resolveModedValue(e){if(this._isPairedValue(e)){return e["dark"===this._currentResolvedMode()?"Dark":"Light"]}return e}_isPairedValue(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0&&Object.keys(e).every(e=>"Light"===e||"Dark"===e)}_buildThemeCSS(e){let t=e.Tokens||{},o=this._flattenTokens(t,""),r=e.Modes&&e.Modes.Strategy||"single",i=o.some(e=>this._isPairedValue(e.Value)),a=this._buildAliasLines(e.Aliases);if("single"===r||!i){let e=":root {\n";for(let t=0;t<o.length;t++){let r=o[t],i=this._isPairedValue(r.Value)?r.Value.Light:r.Value;e+="\t"+this._cssVarName(r.Path)+": "+this._formatCSSValue(i)+";\n"}return e+=a,e+="}\n",e}let l="",d="",c="";for(let e=0;e<o.length;e++){let t=o[e],r=this._cssVarName(t.Path);this._isPairedValue(t.Value)?(void 0!==t.Value.Light&&(l+="\t"+r+": "+this._formatCSSValue(t.Value.Light)+";\n"),void 0!==t.Value.Dark&&(d+="\t"+r+": "+this._formatCSSValue(t.Value.Dark)+";\n")):c+="\t"+r+": "+this._formatCSSValue(t.Value)+";\n"}let h=":root {\n"+l+c+a+"}\n",p="";return p+="\t:root {\n"+d.replace(/^\t/gm,"\t\t")+"\t}\n",h+="@media (prefers-color-scheme: dark) {\n"+p+"}\n",h+="."+n+" {\n"+l+"}\n",h+="."+s+" {\n"+d+"}\n",h}_buildAliasLines(e){if(!e||"object"!=typeof e)return"";let t=Object.keys(e),o="";for(let r=0;r<t.length;r++){let i=t[r],a=e[i];"string"==typeof a&&0!==a.length&&(o+="\t"+i+": var("+this._cssVarName(a)+");\n")}return o}_flattenTokens(e,t){let o=[];if(null===e||"object"!=typeof e||Array.isArray(e))return t&&o.push({Path:t,Value:e}),o;if(this._isPairedValue(e))return o.push({Path:t,Value:e}),o;let r=Object.keys(e);for(let i=0;i<r.length;i++){let a=r[i],n=t?t+"."+a:a,s=e[a];o=o.concat(this._flattenTokens(s,n))}return o}_cssVarName(e){return l+e.toLowerCase().replace(/\./g,"-")}_formatCSSValue(e){return null==e?"":String(e)}_injectStyleElement(e){if("undefined"==typeof document)return;let t=document.getElementById(a);t||(t=document.createElement("style"),t.id=a,document.head.appendChild(t)),t.textContent=e}_registerAuxiliaryCSS(e){if(this.pict&&this.pict.CSSMap&&"function"==typeof this.pict.CSSMap.removeCSS)for(let e=0;e<this._registeredCSSHashes.length;e++)this.pict.CSSMap.removeCSS(this._registeredCSSHashes[e]);if(this._registeredCSSHashes=[],Array.isArray(e.CSS)&&this.pict&&this.pict.CSSMap&&"function"==typeof this.pict.CSSMap.addCSS)for(let t=0;t<e.CSS.length;t++){let o=e.CSS[t];if(!o||!o.Hash||"string"!=typeof o.Content)continue;let r="number"==typeof o.Priority?o.Priority:500;this.pict.CSSMap.addCSS(o.Hash,o.Content,r),this._registeredCSSHashes.push(o.Hash)}}_applyMode(e,t){"system"===e?(this._resolvedMode=this._readSystemPreference(),this._clearHTMLClass()):(this._resolvedMode="dark"===e?"dark":"light",this._writeHTMLClass(this._resolvedMode))}_writeHTMLClass(e){if("undefined"==typeof document||!document.documentElement||!document.documentElement.classList)return;let t=document.documentElement.classList;"dark"===e?(t.remove(n),t.add(s)):(t.remove(s),t.add(n))}_clearHTMLClass(){if("undefined"==typeof document||!document.documentElement||!document.documentElement.classList)return;let e=document.documentElement.classList;e.remove(n),e.remove(s)}_readSystemPreference(){if("undefined"==typeof window||"function"!=typeof window.matchMedia)return"light";try{return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}catch(e){return"light"}}_currentResolvedMode(){return"system"===this._activeMode?this._readSystemPreference():"dark"===this._resolvedMode?"dark":"light"}}d.default_configuration={ProviderIdentifier:"Theme",AutoInitialize:!0,AutoInitializeOrdinal:0},t.exports=d,t.exports.STYLE_ELEMENT_ID=a,t.exports.HTML_CLASS_LIGHT=n,t.exports.HTML_CLASS_DARK=s,t.exports.CSS_VAR_PREFIX=l,t.exports.DiagramAdapter=i},{"./Theme-Diagram-Adapter.js":6,"./templates/Pict-Template-Theme.js":7,"./templates/Pict-Template-ThemeAsset.js":8,"./templates/Pict-Template-ThemeImage.js":9,"./templates/Pict-Template-ThemeVar.js":10,"pict-provider":12}],6:[function(e,t,o){
35
+ /**
36
+ * Theme Diagram Adapter
37
+ *
38
+ * Helper utilities for plugging diagram renderers (Mermaid today,
39
+ * Excalidraw / chart libraries next) into the pict-provider-theme
40
+ * lifecycle.
41
+ *
42
+ * Why this exists:
43
+ * Diagram engines like Mermaid bake colors into the SVG at render
44
+ * time. Once rendered, CSS alone cannot recolor node fills, cluster
45
+ * backgrounds, or edge stroke ends — those are inline attributes on
46
+ * <rect>, <path>, <polygon>, etc. Switching light/dark requires
47
+ * the engine to re-render with a fresh themeVariables block.
48
+ *
49
+ * Pre-adapter, every view that hosted a Mermaid block had to:
50
+ * - read every CSS custom property by hand
51
+ * - mirror a 20+ key themeVariables object
52
+ * - wire its own onApply subscription
53
+ * - stash diagram source on the DOM
54
+ * - clear data-processed + re-run on theme change
55
+ *
56
+ * The adapter centralizes all of that. Section views call
57
+ * `adapter.adaptMermaid(mermaid, options)` and stop caring about the
58
+ * token list, the listener, and the refresh dance.
59
+ *
60
+ * Public API:
61
+ * buildMermaidThemeVariables(pOverrides) - read fresh tokens, return mermaid themeVariables
62
+ * getMermaidTokenMap() - canonical {mermaidKey: cssVarName} map
63
+ * initializeMermaid(mermaid, pOverrides) - mermaid.initialize() with the right base + themeVariables
64
+ * refreshMermaidDiagrams(pSelectorOrRoot) - restore source, clear data-processed, re-run mermaid.run
65
+ * stashMermaidSource(pNodes) - cache source on data-mermaid-source before first run
66
+ * adaptMermaid(provider, mermaid, pOptions) - one-shot: initialize + subscribe + return handle
67
+ * readCSSVar(pName, pFallback, pRoot) - fresh getComputedStyle read with fallback
68
+ *
69
+ * All helpers are stateless and safe to call repeatedly. Subscriptions
70
+ * return a dispose function the caller can hold onto for teardown.
71
+ *
72
+ * @author Steven Velozo <steven@velozo.com>
73
+ * @license MIT
74
+ */
75
+ const r=[{Key:"primaryColor",Var:"--theme-color-background-panel",Fallback:"#ffffff"},{Key:"primaryTextColor",Var:"--theme-color-text-primary",Fallback:"#1a1a1a"},{Key:"primaryBorderColor",Var:"--theme-color-brand-primary",Fallback:"#3357c7"},{Key:"secondaryColor",Var:"--theme-color-background-secondary",Fallback:"#f5f5f5"},{Key:"secondaryTextColor",Var:"--theme-color-text-secondary",Fallback:"#454545"},{Key:"secondaryBorderColor",Var:"--theme-color-border-default",Fallback:"#d6d6d6"},{Key:"tertiaryColor",Var:"--theme-color-background-tertiary",Fallback:"#ebebeb"},{Key:"tertiaryTextColor",Var:"--theme-color-text-secondary",Fallback:"#454545"},{Key:"tertiaryBorderColor",Var:"--theme-color-border-light",Fallback:"#e9e9e9"},{Key:"background",Var:"--theme-color-background-panel",Fallback:"#ffffff"},{Key:"mainBkg",Var:"--theme-color-background-panel",Fallback:"#ffffff"},{Key:"secondBkg",Var:"--theme-color-background-secondary",Fallback:"#f5f5f5"},{Key:"lineColor",Var:"--theme-color-text-secondary",Fallback:"#454545"},{Key:"textColor",Var:"--theme-color-text-primary",Fallback:"#1a1a1a"},{Key:"noteBkgColor",Var:"--theme-color-background-tertiary",Fallback:"#ebebeb"},{Key:"noteTextColor",Var:"--theme-color-text-primary",Fallback:"#1a1a1a"},{Key:"noteBorderColor",Var:"--theme-color-border-default",Fallback:"#d6d6d6"},{Key:"errorBkgColor",Var:"--theme-color-status-error",Fallback:"#b62828"},{Key:"errorTextColor",Var:"--theme-color-text-on-brand",Fallback:"#ffffff"},{Key:"fontFamily",Var:"--theme-typography-family-sans",Fallback:"inherit"}];function i(e,t,o){if("undefined"==typeof window||"undefined"==typeof document)return t||"";let r=o||document.documentElement;return r?(getComputedStyle(r).getPropertyValue(e)||"").trim()||t||"":t||""}function a(e){let t={};for(let e=0;e<r.length;e++){let o=r[e];t[o.Key]=i(o.Var,o.Fallback)}if(e&&"object"==typeof e){let o=Object.keys(e);for(let r=0;r<o.length;r++)t[o[r]]=e[o[r]]}return t}function n(e,t){if(!e||"function"!=typeof e.initialize)return!1;let o=t||{},r=o.themeVariables,i=o.config||{},n=a(r),s=Object.assign({startOnLoad:!1,theme:"base",securityLevel:"loose"},i,{themeVariables:n});return e.initialize(s),!0}function s(e){if("undefined"==typeof document)return null;let t="undefined"!=typeof mermaid?mermaid:null;if(!t||"function"!=typeof t.run)return null;let o=function(e){let t="pre.mermaid[data-mermaid-source]";if(!e)return document.querySelectorAll(t);if("string"==typeof e){let o=document.querySelector(e);return o?o.querySelectorAll(t):[]}if(e.querySelectorAll)return e.querySelectorAll(t);return[]}(e);if(!o||o.length<1)return null;for(let e=0;e<o.length;e++){let t=o[e],r=t.getAttribute("data-mermaid-source");null!==r&&(t.textContent=r),t.removeAttribute("data-processed"),t.classList&&"function"==typeof t.classList.remove&&t.classList.remove("mermaid-rendered")}try{let e=t.run({nodes:o});return e&&"function"==typeof e.then?e.then(function(){return l(o),e}):(l(o),e)}catch(e){return Promise.reject(e)}}function l(e){if("undefined"==typeof document)return 0;let t;if(e)if("string"==typeof e){let o=document.querySelector(e);t=o?o.querySelectorAll("pre.mermaid"):[]}else if(void 0!==e.length)t=e;else{if(!e.querySelectorAll)return 0;t=e.querySelectorAll("pre.mermaid")}else t=document.querySelectorAll("pre.mermaid");let o=0;for(let e=0;e<t.length;e++){let r=t[e];if(!r||!r.querySelectorAll)continue;let i=r.querySelectorAll('.node rect[style*="!important"], .node polygon[style*="!important"], .node circle[style*="!important"], .node ellipse[style*="!important"], .node path[style*="!important"], .cluster rect[style*="!important"]');for(let e=0;e<i.length;e++){let t=i[e],r=t.getAttribute("style")||"";r.indexOf("!important")<0||(t.setAttribute("style",r.replace(/\s*!important\s*/gi,"")),o++)}}return o}t.exports={MERMAID_TOKEN_MAP:r,readCSSVar:i,getMermaidTokenMap:function(){return r.map(e=>({Key:e.Key,Var:e.Var,Fallback:e.Fallback}))},buildMermaidThemeVariables:a,initializeMermaid:n,stashMermaidSource:function(e){if(e&&!(e.length<1))for(let t=0;t<e.length;t++){let o=e[t];o&&"function"==typeof o.getAttribute&&(o.hasAttribute("data-mermaid-source")||o.setAttribute("data-mermaid-source",o.textContent))}},refreshMermaidDiagrams:s,stripMermaidStyleImportance:l,adaptMermaid:function(e,t,o){let r=o||{},i={themeVariables:r.themeOverrides,config:r.configOverrides};n(t,i);let a=function(e){if("function"==typeof r.onBeforeRefresh)try{r.onBeforeRefresh(e||{})}catch(e){}n(t,i);let o=s(r.refreshScope);return o&&"function"==typeof o.then&&"function"==typeof r.onAfterRefresh&&o.then(()=>{try{r.onAfterRefresh(e||{})}catch(e){}},()=>{try{r.onAfterRefresh(e||{})}catch(e){}}),o},l=function(){},d=!1;return e&&"function"==typeof e.onApply&&(l=e.onApply(function(e,t){a(t||{})}),d=!0),{dispose:function(){"function"==typeof l&&l()},refresh:a,reinitialize:function(){n(t,i)},subscribed:d}}}},{}],7:[function(e,t,o){const r=e("pict-template");t.exports=class extends r{constructor(e,t,o){super(e,t,o),this.addPattern("{~Theme:","~}")}render(e){let t=(e||"").trim();if(!t)return"";let o=this._findThemeProvider();if(!o)return"";let r=o.token(t);return null==r?"":String(r)}_findThemeProvider(){return this.pict&&this.pict.providers&&this.pict.providers.Theme||null}}},{"pict-template":87}],8:[function(e,t,o){const r=e("pict-template");t.exports=class extends r{constructor(e,t,o){super(e,t,o),this.addPattern("{~ThemeAsset:","~}")}render(e){let t=(e||"").trim();if(!t)return"";let o=t.indexOf(".");if(o<0)return"";let r=t.substring(0,o),i=t.substring(o+1),a=this._findThemeProvider();if(!a)return"";let n=a.asset(r,i);return null==n?"":String(n)}_findThemeProvider(){return this.pict&&this.pict.providers&&this.pict.providers.Theme||null}}},{"pict-template":87}],9:[function(e,t,o){const r=e("pict-template");t.exports=class extends r{constructor(e,t,o){super(e,t,o),this.addPattern("{~ThemeImage:","~}")}render(e){let t=(e||"").trim();if(!t)return"";let o=this._findThemeProvider();if(!o)return"";let r=o.image(t);return null==r?"":String(r)}_findThemeProvider(){return this.pict&&this.pict.providers&&this.pict.providers.Theme||null}}},{"pict-template":87}],10:[function(e,t,o){const r=e("pict-template");t.exports=class extends r{constructor(e,t,o){super(e,t,o),this.addPattern("{~ThemeVar:","~}")}render(e){let t=(e||"").trim();if(!t)return"";let o=this._findThemeProvider();return o?o.cssVar(t):""}_findThemeProvider(){return this.pict&&this.pict.providers&&this.pict.providers.Theme||null}}},{"pict-template":87}],11:[function(e,t,o){t.exports={name:"pict-provider",version:"1.0.13",description:"Pict Provider Base Class",main:"source/Pict-Provider.js",scripts:{start:"node source/Pict-Provider.js",test:"npx quack test",tests:"npx quack test -g",coverage:"npx quack coverage",build:"npx quack build","docker-dev-build":"docker build ./ -f Dockerfile_LUXURYCode -t pict-provider-image:local","docker-dev-run":'docker run -it -d --name pict-provider-dev -p 24125:8080 -p 30027:8086 -v "$PWD/.config:/home/coder/.config" -v "$PWD:/home/coder/pict-provider" -u "$(id -u):$(id -g)" -e "DOCKER_USER=$USER" pict-provider-image:local',"docker-dev-shell":"docker exec -it pict-provider-dev /bin/bash",lint:"eslint source/**",types:"tsc -p ."},types:"types/source/Pict-Provider.d.ts",repository:{type:"git",url:"git+https://github.com/stevenvelozo/pict-provider.git"},author:"steven velozo <steven@velozo.com>",license:"MIT",bugs:{url:"https://github.com/stevenvelozo/pict-provider/issues"},homepage:"https://github.com/stevenvelozo/pict-provider#readme",devDependencies:{"@eslint/js":"^9.39.1",eslint:"^9.39.1",pict:"^1.0.351","pict-docuserve":"^0.1.5",quackage:"^1.1.0",typescript:"^5.9.3"},dependencies:{"fable-serviceproviderbase":"^3.0.19"},mocha:{diff:!0,extension:["js"],package:"./package.json",reporter:"spec",slow:"75",timeout:"5000",ui:"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]}}},{}],12:[function(e,t,o){const r=e("fable-serviceproviderbase"),i=e("../package.json"),a={ProviderIdentifier:!1,AutoInitialize:!0,AutoInitializeOrdinal:0,AutoLoadDataWithApp:!0,AutoLoadDataOrdinal:0,AutoSolveWithApp:!0,AutoSolveOrdinal:0,Manifests:{},Templates:[]};t.exports=class extends r{constructor(e,t,o){super(e,Object.assign({},JSON.parse(JSON.stringify(a)),t),o),this.fable,this.pict,this.log,this.options,this.UUID,this.Hash,this.options.ProviderIdentifier||(this.options.ProviderIdentifier=`AutoProviderID-${this.fable.getUUID()}`),this.serviceType="PictProvider",this._Package=i,this.pict=this.fable,this.AppData=this.pict.AppData,this.Bundle=this.pict.Bundle,this.initializeTimestamp=!1,this.lastSolvedTimestamp=!1;for(let e=0;e<this.options.Templates.length;e++){let t=this.options.Templates[e];t.hasOwnProperty("Postfix")&&t.hasOwnProperty("Template")?(t.Source||(t.Source=`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} options object.`),this.pict.TemplateProvider.addDefaultTemplate(t.Prefix,t.Postfix,t.Template,t.Source)):this.log.error(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} could not load Default Template ${e} in the options array.`,t)}}onBeforeInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onBeforeInitialize:`),!0}onBeforeInitializeAsync(e){return this.onBeforeInitialize(),e()}onInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onInitialize:`),!0}onInitializeAsync(e){return this.onInitialize(),e()}initialize(){return this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow PROVIDER [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} initialize:`),this.initializeTimestamp?(this.log.warn(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} initialize called but initialization is already completed. Aborting.`),!1):(this.onBeforeInitialize(),this.onInitialize(),this.onAfterInitialize(),this.initializeTimestamp=this.pict.log.getTimeStamp(),!0)}initializeAsync(e){if(this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow PROVIDER [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} initializeAsync:`),this.initializeTimestamp)return this.log.warn(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} async initialize called but initialization is already completed. Aborting.`),e();{let t=this.pict.instantiateServiceProviderWithoutRegistration("Anticipate");this.pict.LogNoisiness>0&&this.log.info(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} beginning initialization...`),t.anticipate(this.onBeforeInitializeAsync.bind(this)),t.anticipate(this.onInitializeAsync.bind(this)),t.anticipate(this.onAfterInitializeAsync.bind(this)),t.wait(t=>(this.initializeTimestamp=this.pict.log.getTimeStamp(),t?this.log.error(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} initialization failed: ${t.message||t}`,{Stack:t.stack}):this.pict.LogNoisiness>0&&this.log.info(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} initialization complete.`),e()))}}onAfterInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onAfterInitialize:`),!0}onAfterInitializeAsync(e){return this.onAfterInitialize(),e()}onPreRender(){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onPreRender:`),!0}onPreRenderAsync(e){return this.onPreRender(),e()}render(){return this.onPreRender()}renderAsync(e){return this.onPreRender(),e()}onPreSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onPreSolve:`),!0}onPreSolveAsync(e){return this.onPreSolve(),e()}solve(){return this.onPreSolve()}solveAsync(e){return this.onPreSolve(),e()}onBeforeLoadDataAsync(e){return e()}onLoadDataAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onLoadDataAsync:`),e()}onAfterLoadDataAsync(e){return e()}onBeforeSaveDataAsync(e){return e()}onSaveDataAsync(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictProvider [${this.UUID}]::[${this.Hash}] ${this.options.ProviderIdentifier} onSaveDataAsync:`),e()}onAfterSaveDataAsync(e){return e()}}},{"../package.json":11,"fable-serviceproviderbase":2}],13:[function(e,t,o){t.exports={RenderOnLoad:!0,DefaultRenderable:"Histogram-Wrap",DefaultDestinationAddress:"#Histogram-Container-Div",Templates:[{Hash:"Histogram-Container",Template:"\x3c!-- Histogram Container Rendering Soon --\x3e"}],Renderables:[{RenderableHash:"Histogram-Wrap",TemplateHash:"Histogram-Container",DestinationAddress:"#Histogram-Container-Div"}],TargetElementAddress:"#Histogram-Container-Div",DataAddress:!1,Bins:[],LabelProperty:"Label",ValueProperty:"Value",Orientation:"vertical",RenderMode:"browser",MaxBarSize:200,BarThickness:30,BarGap:4,FillContainer:!1,ShowValues:!0,ShowLabels:!0,LabelInterval:0,BarColor:"#4A90D9",SelectedBarColor:"#2ECC71",SelectionRangeColor:"#85C1E9",Selectable:!1,SelectionMode:"range",SelectionDataAddress:!1,InitialSelection:null,BarCharacter:"█",BarPartialCharacters:[" ","▁","▂","▃","▄","▅","▆","▇","█"],EmptyCharacter:" ",SliderCharacter:"│",SliderHandleCharacter:"◆",TextWidth:60,TextHeight:15,CSS:".pict-histogram-container\n{\n\tdisplay: inline-block;\n\tposition: relative;\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n\tfont-size: 12px;\n\tuser-select: none;\n}\n.pict-histogram-chart\n{\n\tdisplay: flex;\n\talign-items: flex-end;\n\tposition: relative;\n}\n.pict-histogram-container.pict-histogram-horizontal\n{\n\tdisplay: inline-flex;\n\tflex-direction: row;\n\talign-items: stretch;\n}\n.pict-histogram-chart.pict-histogram-horizontal\n{\n\tflex-direction: column;\n\talign-items: flex-start;\n}\n.pict-histogram-bar-group\n{\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tcursor: default;\n\tflex-shrink: 0;\n}\n.pict-histogram-horizontal .pict-histogram-bar-group\n{\n\tflex-direction: row;\n\talign-items: center;\n}\n.pict-histogram-bar\n{\n\ttransition: background-color 0.15s ease, height 0.2s ease, width 0.2s ease;\n\tborder-radius: 2px 2px 0 0;\n\tmin-width: 1px;\n\tmin-height: 1px;\n}\n.pict-histogram-horizontal .pict-histogram-bar\n{\n\tborder-radius: 0 2px 2px 0;\n}\n.pict-histogram-bar.pict-histogram-selectable\n{\n\tcursor: pointer;\n}\n.pict-histogram-bar.pict-histogram-selectable:hover\n{\n\topacity: 0.8;\n}\n.pict-histogram-bar.pict-histogram-selected\n{\n\tbox-shadow: 0 0 0 2px rgba(46, 204, 113, 0.4);\n}\n.pict-histogram-bar.pict-histogram-in-range\n{\n\topacity: 0.9;\n}\n.pict-histogram-value-label\n{\n\ttext-align: center;\n\tcolor: var(--theme-color-text-secondary, #666);\n\tfont-size: 11px;\n\tpadding: 2px 0;\n\twhite-space: nowrap;\n}\n.pict-histogram-horizontal .pict-histogram-value-label\n{\n\tpadding: 0 4px;\n}\n.pict-histogram-bin-label\n{\n\ttext-align: center;\n\tcolor: var(--theme-color-text-primary, #333);\n\tfont-size: 11px;\n\tpadding: 4px 2px 0 2px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.pict-histogram-horizontal .pict-histogram-bin-label\n{\n\tpadding: 0 4px 0 0;\n\ttext-align: right;\n\tmin-width: 40px;\n}\n.pict-histogram-range-slider-container\n{\n\tposition: relative;\n\twidth: 100%;\n\theight: 24px;\n\tmargin-top: 4px;\n}\n.pict-histogram-horizontal .pict-histogram-range-slider-container\n{\n\twidth: 24px;\n\theight: auto;\n\talign-self: stretch;\n\tmargin-top: 0;\n\tmargin-left: 4px;\n}\n.pict-histogram-range-track\n{\n\tposition: absolute;\n\ttop: 10px;\n\tleft: 0;\n\tright: 0;\n\theight: 4px;\n\tbackground: var(--theme-color-border-default, #E0E0E0);\n\tborder-radius: 2px;\n}\n.pict-histogram-horizontal .pict-histogram-range-track\n{\n\ttop: 0;\n\tleft: 10px;\n\tright: auto;\n\tbottom: 0;\n\twidth: 4px;\n\theight: auto;\n}\n.pict-histogram-range-fill\n{\n\tposition: absolute;\n\ttop: 10px;\n\theight: 4px;\n\tbackground: var(--theme-color-brand-primary, #4A90D9);\n\tborder-radius: 2px;\n}\n.pict-histogram-horizontal .pict-histogram-range-fill\n{\n\ttop: auto;\n\tleft: 10px;\n\twidth: 4px;\n\theight: auto;\n}\n.pict-histogram-range-handle\n{\n\tposition: absolute;\n\ttop: 4px;\n\twidth: 16px;\n\theight: 16px;\n\tbackground: var(--theme-color-background-panel, #fff);\n\tborder: 2px solid var(--theme-color-brand-primary, #4A90D9);\n\tborder-radius: 50%;\n\tcursor: grab;\n\tz-index: 2;\n\ttransform: translateX(-50%);\n}\n.pict-histogram-horizontal .pict-histogram-range-handle\n{\n\ttop: auto;\n\tleft: 4px;\n\ttransform: translateY(-50%);\n}\n.pict-histogram-range-handle:active\n{\n\tcursor: grabbing;\n\tbackground: var(--theme-color-brand-primary, #4A90D9);\n}\n.pict-histogram-range-handle:active,\n.pict-histogram-range-handle:focus\n{\n\tbox-shadow: 0 0 0 3px rgba(74, 144, 217, 0.3);\n\toutline: none;\n}\n.pict-histogram-container.pict-histogram-fill\n{\n\tdisplay: block;\n\twidth: 100%;\n}\n.pict-histogram-fill .pict-histogram-chart\n{\n\twidth: 100%;\n}\n.pict-histogram-fill .pict-histogram-bar-group\n{\n\tflex: 1 1 0%;\n\tmin-width: 0;\n}\n.pict-histogram-fill .pict-histogram-bar\n{\n\twidth: 100%;\n}\n.pict-histogram-axis-line\n{\n\twidth: 100%;\n\theight: 1px;\n\tbackground: var(--theme-color-border-default, #ccc);\n}\n.pict-histogram-label-row\n{\n\tdisplay: flex;\n\twidth: 100%;\n}\n.pict-histogram-fill-label\n{\n\tfont-size: 10px;\n\tcolor: var(--theme-color-text-secondary, #666);\n\ttext-align: center;\n\twhite-space: nowrap;\n\toverflow: visible;\n\tline-height: 16px;\n}\n"}},{}],14:[function(e,t,o){const r=e("pict-view"),i=e("./Pict-Section-Histogram-DefaultConfiguration.js"),a=e("./renderers/Pict-Histogram-Renderer-Browser.js"),n=e("./renderers/Pict-Histogram-Renderer-ConsoleUI.js"),s=e("./renderers/Pict-Histogram-Renderer-CLI.js");t.exports=class extends r{constructor(e,t,o){super(e,Object.assign({},i,t),o),this.initialRenderComplete=!1,this._selectedIndices=new Set,this._selectionRangeStart=0,this._selectionRangeEnd=0,this._renderer=this._resolveRenderer(),this._applyInitialSelection()}_applyInitialSelection(){if(this.options.InitialSelection)this.setSelection(this.options.InitialSelection);else if(this.options.Selectable&&"range"===this.options.SelectionMode){let e=this.getBins();this._selectionRangeStart=0,this._selectionRangeEnd=Math.max(0,e.length-1),this._syncSelectionFromRange()}}_resolveRenderer(){switch(this.options.RenderMode){case"consoleui":return n;case"cli":return s;default:return a}}getBins(){if(this.options.DataAddress){const e={Fable:this.fable,Pict:this.fable,AppData:this.AppData,Bundle:this.Bundle,Options:this.options};let t=this.fable.manifest.getValueByHash(e,this.options.DataAddress);if(Array.isArray(t))return t;this.log.warn(`PICT-Histogram DataAddress [${this.options.DataAddress}] did not return an array.`)}return this.options.Bins||[]}setBins(e){if(Array.isArray(e)){if(this.options.Bins=e,this.options.DataAddress){const t={Fable:this.fable,Pict:this.fable,AppData:this.AppData,Bundle:this.Bundle,Options:this.options};this.fable.manifest.setValueByHash(t,this.options.DataAddress,e)}}else this.log.warn("PICT-Histogram setBins requires an array.")}isIndexSelected(e){return!!this.options.Selectable&&("range"===this.options.SelectionMode?e===this._selectionRangeStart||e===this._selectionRangeEnd:this._selectedIndices.has(e))}isIndexInRange(e){return!(!this.options.Selectable||"range"!==this.options.SelectionMode)&&(e>this._selectionRangeStart&&e<this._selectionRangeEnd)}getSelection(){if("range"===this.options.SelectionMode){let e=this.getBins(),t=[];for(let e=this._selectionRangeStart;e<=this._selectionRangeEnd;e++)t.push(e);return{Mode:"range",RangeStart:this._selectionRangeStart,RangeEnd:this._selectionRangeEnd,SelectedIndices:t,StartLabel:(e[this._selectionRangeStart]||{})[this.options.LabelProperty],EndLabel:(e[this._selectionRangeEnd]||{})[this.options.LabelProperty]}}return{Mode:this.options.SelectionMode,SelectedIndices:Array.from(this._selectedIndices).sort((e,t)=>e-t)}}setSelection(e){"range"===this.options.SelectionMode?e&&"number"==typeof e.Start&&"number"==typeof e.End&&(this._selectionRangeStart=e.Start,this._selectionRangeEnd=e.End,this._syncSelectionFromRange()):Array.isArray(e)&&(this._selectedIndices=new Set(e)),this._writeSelectionToAddress()}handleBarClick(e){"single"===this.options.SelectionMode?(this._selectedIndices.clear(),this._selectedIndices.add(e)):"multiple"===this.options.SelectionMode&&(this._selectedIndices.has(e)?this._selectedIndices.delete(e):this._selectedIndices.add(e)),this._writeSelectionToAddress(),this.onSelectionChange(this.getSelection()),this.renderHistogram()}handleRangeBarClick(e){Math.abs(e-this._selectionRangeStart)<=Math.abs(e-this._selectionRangeEnd)?this._selectionRangeStart=Math.min(e,this._selectionRangeEnd):this._selectionRangeEnd=Math.max(e,this._selectionRangeStart),this._syncSelectionFromRange(),this._writeSelectionToAddress(),this.onSelectionChange(this.getSelection()),this.renderHistogram()}_syncSelectionFromRange(){this._selectedIndices.clear();for(let e=this._selectionRangeStart;e<=this._selectionRangeEnd;e++)this._selectedIndices.add(e)}_writeSelectionToAddress(){if(!this.options.SelectionDataAddress)return;const e={Fable:this.fable,Pict:this.fable,AppData:this.AppData,Bundle:this.Bundle,Options:this.options};this.fable.manifest.setValueByHash(e,this.options.SelectionDataAddress,this.getSelection())}onSelectionChange(e){}onBeforeInitialize(){return super.onBeforeInitialize(),super.onBeforeInitialize()}onAfterRender(e){return this.pict.CSSMap.injectCSS(),this.initialRenderComplete||(this.onAfterInitialRender(),this.initialRenderComplete=!0),super.onAfterRender(e)}onAfterInitialRender(){this.renderHistogram()}renderHistogram(){this.pict.CSSMap&&this.pict.CSSMap.injectCSS(),this._renderer.render(this),this._renderer.wireEvents(this),this.initialRenderComplete=!0}marshalToView(){super.marshalToView(),this.initialRenderComplete&&this.renderHistogram()}marshalFromView(){super.marshalFromView(),this._writeSelectionToAddress()}setOrientation(e){"vertical"===e||"horizontal"===e?(this.options.Orientation=e,this.initialRenderComplete&&this.renderHistogram()):this.log.warn(`PICT-Histogram invalid orientation: ${e}`)}setRenderMode(e){this.options.RenderMode=e,this._renderer=this._resolveRenderer(),this.initialRenderComplete&&this.renderHistogram()}toText(){return"vertical"===this.options.Orientation?n.renderVertical(this):n.renderHorizontal(this)}},t.exports.default_configuration=i,t.exports.renderers={browser:a,consoleui:n,cli:s}},{"./Pict-Section-Histogram-DefaultConfiguration.js":13,"./renderers/Pict-Histogram-Renderer-Browser.js":15,"./renderers/Pict-Histogram-Renderer-CLI.js":16,"./renderers/Pict-Histogram-Renderer-ConsoleUI.js":17,"pict-view":89}],15:[function(e,t,o){function r(e,t,o,r,i,a,n){let s=e[r.LabelProperty]||"",l=e[r.ValueProperty]||0,d="vertical"===r.Orientation,c=i?r.SelectedBarColor:a?r.SelectionRangeColor:r.BarColor,h=r.Selectable?" pict-histogram-selectable":"",p=i?" pict-histogram-selected":"",m=a?" pict-histogram-in-range":"",u=r.FillContainer,g="";g=d?u?`height:${o}px;background-color:${c};`:`height:${o}px;width:${r.BarThickness}px;background-color:${c};`:u?`width:${o}px;background-color:${c};`:`width:${o}px;height:${r.BarThickness}px;background-color:${c};`;let f=r.BarThickness+r.BarGap,b="";b=u?"":d?`margin:0 ${r.BarGap/2}px;width:${f}px;`:`margin:${r.BarGap/2}px 0;`;let v=`<div class="pict-histogram-bar-group" style="${b}" data-histogram-index="${t}">`;if(d)r.ShowValues&&!u&&(v+=`<div class="pict-histogram-value-label" style="width:${f}px;">${l}</div>`),v+=`<div class="pict-histogram-bar${h}${p}${m}" style="${g}" data-histogram-index="${t}"></div>`,r.ShowLabels&&!u&&(v+=`<div class="pict-histogram-bin-label" style="width:${f}px;">${s}</div>`);else{if(r.ShowLabels){v+=`<div class="pict-histogram-bin-label" style="${n?`width:${n}px;min-width:${n}px;`:""}">${s}</div>`}v+=`<div class="pict-histogram-bar${h}${p}${m}" style="${g}" data-histogram-index="${t}"></div>`,r.ShowValues&&(v+=`<div class="pict-histogram-value-label">${l}</div>`)}return v+="</div>",v}function i(e,t,o){let r=t.getAttribute("data-handle"),i="vertical"===e.options.Orientation,a=!1;function n(t){if(!a)return;let n=e.getBins();if(!n||0===n.length)return;let s=function(){let e=o.querySelector(".pict-histogram-range-slider-container");if(!e)return{start:0,size:1};let t=e.getBoundingClientRect();return i?{start:t.left,size:t.width||1}:{start:t.top,size:t.height||1}}(),l=((i?t.clientX:t.clientY)-s.start)/s.size;l=Math.max(0,Math.min(1,l));let d=Math.round(l*(n.length-1));"start"===r?(d>e._selectionRangeEnd&&(d=e._selectionRangeEnd),e._selectionRangeStart=d):(d<e._selectionRangeStart&&(d=e._selectionRangeStart),e._selectionRangeEnd=d),e._syncSelectionFromRange(),e.renderHistogram()}function s(){a&&(a=!1,"undefined"!=typeof document&&(document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",s)))}t.addEventListener("mousedown",e=>{e.preventDefault(),a=!0,"undefined"!=typeof document&&(document.addEventListener("mousemove",n),document.addEventListener("mouseup",s))})}t.exports={render:function(e){let t=e.getBins();if(!t||0===t.length)return void e.services.ContentAssignment.assignContent(e.options.TargetElementAddress,'<div class="pict-histogram-container"><em>No histogram data</em></div>');let o=0;for(let r=0;r<t.length;r++){let i=t[r][e.options.ValueProperty]||0;i>o&&(o=i)}0===o&&(o=1);let i="vertical"===e.options.Orientation,a=i?"pict-histogram-vertical":"pict-histogram-horizontal",n=e.options.FillContainer?" pict-histogram-fill":"",s=0;if(!i&&e.options.ShowLabels&&!e.options.FillContainer){for(let o=0;o<t.length;o++){let r=6.5*String(t[o][e.options.LabelProperty]||"").length+8;r>s&&(s=r)}s=Math.max(s,40)}let l=`<div class="pict-histogram-container ${a}${n}">`;l+=`<div class="pict-histogram-chart ${a}${n}">`;for(let i=0;i<t.length;i++){let a=t[i][e.options.ValueProperty]||0,n=Math.round(a/o*e.options.MaxBarSize);a>0&&n<1&&(n=1);let d=e.isIndexSelected(i),c=!d&&e.isIndexInRange(i);l+=r(t[i],i,n,e.options,d,c,s)}l+="</div>",e.options.FillContainer&&i&&e.options.ShowLabels&&(l+='<div class="pict-histogram-axis-line"></div>',l+=function(e,t){if(!t||0===t.length)return"";let o=e.options.LabelInterval||0;if(o<=0){let r=e.services.ContentAssignment.getElement(e.options.TargetElementAddress),i=800;if(r&&r.length>0&&r[0]&&(i=r[0].clientWidth||800),t.length>0){let e=i/t.length;o=Math.max(1,Math.ceil(80/e))}else o=1}let r='<div class="pict-histogram-label-row">';for(let i=0;i<t.length;i++)if(i%o===0){let a=t[i][e.options.LabelProperty]||"",n=Math.min(o,t.length-i);r+=`<div class="pict-histogram-fill-label" style="flex:${n};">${a}</div>`,i+=n-1}return r+="</div>",r}(e,t)),e.options.Selectable&&"range"===e.options.SelectionMode&&(l+=function(e){let t=e.getBins();if(!t||0===t.length)return"";let o=e._selectionRangeStart,r=e._selectionRangeEnd,i=t.length-1,a=i>0?o/i*100:0,n=i>0?r/i*100:100,s='<div class="pict-histogram-range-slider-container">';return s+='<div class="pict-histogram-range-track"></div>',"vertical"===e.options.Orientation?(s+=`<div class="pict-histogram-range-fill" style="left:${a}%;right:${100-n}%;"></div>`,s+=`<div class="pict-histogram-range-handle pict-histogram-range-handle-start" tabindex="0" style="left:${a}%;" data-handle="start"></div>`,s+=`<div class="pict-histogram-range-handle pict-histogram-range-handle-end" tabindex="0" style="left:${n}%;" data-handle="end"></div>`):(s+=`<div class="pict-histogram-range-fill" style="top:${a}%;bottom:${100-n}%;"></div>`,s+=`<div class="pict-histogram-range-handle pict-histogram-range-handle-start" tabindex="0" style="top:${a}%;" data-handle="start"></div>`,s+=`<div class="pict-histogram-range-handle pict-histogram-range-handle-end" tabindex="0" style="top:${n}%;" data-handle="end"></div>`),s+="</div>",s}(e)),l+="</div>",e.services.ContentAssignment.assignContent(e.options.TargetElementAddress,l)},wireEvents:function(e){if(!e.options.Selectable)return;let t=e.services.ContentAssignment.getElement(e.options.TargetElementAddress);if(!t||t.length<1)return;let o=t[0];if(o){if("single"===e.options.SelectionMode||"multiple"===e.options.SelectionMode){let t=o.querySelectorAll(".pict-histogram-bar[data-histogram-index]");for(let o=0;o<t.length;o++)t[o].addEventListener("click",t=>{let o=parseInt(t.currentTarget.getAttribute("data-histogram-index"),10);isNaN(o)||e.handleBarClick(o)})}if("range"===e.options.SelectionMode){let t=o.querySelectorAll(".pict-histogram-bar[data-histogram-index]");for(let o=0;o<t.length;o++)t[o].addEventListener("click",t=>{let o=parseInt(t.currentTarget.getAttribute("data-histogram-index"),10);isNaN(o)||e.handleRangeBarClick(o)});let r=o.querySelectorAll(".pict-histogram-range-handle");for(let t=0;t<r.length;t++)i(e,r[t],o)}}}}},{}],16:[function(e,t,o){(function(e){(function(){const o={black:"",red:"",green:"",yellow:"",blue:"",magenta:"",cyan:"",white:"",reset:"",bold:"",dim:""};function r(e){if(!e)return o.blue;let t=e.toLowerCase();if(o[t])return o[t];if("#"===t.charAt(0)&&t.length>=7){let e=parseInt(t.substring(1,3),16),r=parseInt(t.substring(3,5),16),i=parseInt(t.substring(5,7),16);if(r>e&&r>i)return o.green;if(e>r&&e>i)return o.red;if(i>e&&i>r)return o.blue;if(e>200&&r>200)return o.yellow;if(e>200&&i>200)return o.magenta;if(r>200&&i>200)return o.cyan}return o.blue}function i(e){let t=e.getBins(),i=e.options,a=i.TextHeight||15,s=i.BarCharacter,d=i.BarPartialCharacters,c=r(i.BarColor),h=r(i.SelectedBarColor),p=r(i.SelectionRangeColor),m=o.reset;if(!t||0===t.length)return"(no data)\n";let u=0;for(let e=0;e<t.length;e++){let o=t[e][i.ValueProperty]||0;o>u&&(u=o)}0===u&&(u=1);let g=String(u).length+1,f=[];for(let r=a;r>=1;r--){let l="";r===a?l+=o.dim+n(String(u),g)+"|"+m:1===r?l+=o.dim+n("0",g)+"|"+m:r===Math.ceil(a/2)?l+=o.dim+n(String(Math.round(u/2)),g)+"|"+m:l+=o.dim+n("",g)+"|"+m;for(let o=0;o<t.length;o++){let n=(t[o][i.ValueProperty]||0)/u*a,g=Math.floor(n),f=n-g,b=e.isIndexSelected(o),v=!b&&e.isIndexInRange(o),y=b?h:v?p:c,S=" ";if(r<=g)S=s;else if(r===g+1&&f>0){S=d[Math.round(f*(d.length-1))]}l+=" "!==S?" "+y+S+S+S+m:" "}f.push(l)}let b=o.dim+n("",g)+"+";for(let e=0;e<t.length;e++)b+="----";if(b+=m,f.push(b),i.ShowLabels){let e=n("",g)+" ";for(let o=0;o<t.length;o++){e+=l(String(t[o][i.LabelProperty]||"").substring(0,4),4)}f.push(e)}if(i.Selectable&&"range"===i.SelectionMode){let r=e._selectionRangeStart,a=e._selectionRangeEnd,n=t[r]?t[r][i.LabelProperty]:r,s=t[a]?t[a][i.LabelProperty]:a;f.push(""),f.push(o.bold+" Selection: "+n+" - "+s+m)}return f.join("\n")+"\n"}function a(e){let t=e.getBins(),i=e.options,a=i.TextWidth||60,n=i.BarCharacter,l=r(i.BarColor),d=r(i.SelectedBarColor),c=r(i.SelectionRangeColor),h=o.reset;if(!t||0===t.length)return"(no data)\n";let p=0,m=0;for(let e=0;e<t.length;e++){let o=t[e][i.ValueProperty]||0;o>p&&(p=o);let r=String(t[e][i.LabelProperty]||"");r.length>m&&(m=r.length)}0===p&&(p=1);let u=Math.min(m,12),g=a-u-String(p).length-4;g<10&&(g=10);let f=[];for(let r=0;r<t.length;r++){let a=t[r][i.ValueProperty]||0,m=String(t[r][i.LabelProperty]||""),b=Math.round(a/p*g),v=e.isIndexSelected(r),y=!v&&e.isIndexInRange(r),S=v?d:y?c:l,w="";for(let e=0;e<b;e++)w+=n;let k=o.dim+s(m.substring(0,u),u)+" |"+h;k+=S+w+h,k+=" "+a,v?k+=o.bold+" *"+h:y&&(k+=o.dim+" ~"+h),f.push(k)}if(i.Selectable&&"range"===i.SelectionMode){let r=e._selectionRangeStart,a=e._selectionRangeEnd,n=t[r]?t[r][i.LabelProperty]:r,s=t[a]?t[a][i.LabelProperty]:a;f.push(""),f.push(o.bold+" Selection: "+n+" - "+s+h)}return f.join("\n")+"\n"}function n(e,t){let o=String(e);for(;o.length<t;)o=" "+o;return o}function s(e,t){let o=String(e);for(;o.length<t;)o+=" ";return o}function l(e,t){let o=String(e);for(;o.length<t;)o=o.length%2==0?o+" ":" "+o;return o}t.exports={render:function(t){let o;o="vertical"===t.options.Orientation?i(t):a(t),t.services&&t.services.ContentAssignment?t.services.ContentAssignment.assignContent(t.options.TargetElementAddress,o):void 0!==e&&e.stdout&&e.stdout.write(o)},wireEvents:function(){},renderVertical:i,renderHorizontal:a,colorToAnsi:r,ANSI_COLORS:o}}).call(this)}).call(this,e("_process"))},{_process:90}],17:[function(e,t,o){function r(e){let t=e.getBins(),o=e.options,r=o.TextHeight||15,i=o.BarCharacter,n=o.BarPartialCharacters,l=o.EmptyCharacter;if(!t||0===t.length)return"(no data)";let d=0;for(let e=0;e<t.length;e++){let r=t[e][o.ValueProperty]||0;r>d&&(d=r)}0===d&&(d=1);let c=String(d).length+1,h=[];for(let s=r;s>=1;s--){let p="";s===r?p+=a(String(d),c)+"|":1===s?p+=a("0",c)+"|":s===Math.ceil(r/2)?p+=a(String(Math.round(d/2)),c)+"|":p+=a("",c)+"|";for(let a=0;a<t.length;a++){let c=(t[a][o.ValueProperty]||0)/d*r,h=Math.floor(c),m=c-h,u=l;if(s<=h)u=i;else if(s===h+1&&m>0){u=n[Math.round(m*(n.length-1))]}let g=e.isIndexSelected(a),f=!g&&e.isIndexInRange(a);g&&u!==l?u="*":f&&u!==l&&(u="#"),p+=" "+u+u+u}h.push(p)}let p=a("",c)+"+";for(let e=0;e<t.length;e++)p+="----";if(h.push(p),o.ShowLabels){let e=a("",c)+" ";for(let r=0;r<t.length;r++){e+=s(String(t[r][o.LabelProperty]||"").substring(0,4),4)}h.push(e)}if(o.Selectable&&"range"===o.SelectionMode){let o=a("",c)+" ";for(let r=0;r<t.length;r++)r===e._selectionRangeStart?o+=" [ ":r===e._selectionRangeEnd?o+=" ] ":r>e._selectionRangeStart&&r<e._selectionRangeEnd?o+=" - ":o+=" ";h.push(o)}return h.join("\n")}function i(e){let t=e.getBins(),o=e.options,r=o.TextWidth||60,i=o.BarCharacter,a=o.BarPartialCharacters;if(!t||0===t.length)return"(no data)";let s=0,l=0;for(let e=0;e<t.length;e++){let r=t[e][o.ValueProperty]||0;r>s&&(s=r);let i=String(t[e][o.LabelProperty]||"");i.length>l&&(l=i.length)}0===s&&(s=1);let d=Math.min(l,12),c=r-d-2;c<10&&(c=10);let h=[];for(let r=0;r<t.length;r++){let l=t[r][o.ValueProperty]||0,p=String(t[r][o.LabelProperty]||""),m=l/s*c,u=Math.floor(m),g=m-u,f="";for(let e=0;e<u;e++)f+=i;if(g>0&&u<c){f+=a[Math.round(g*(a.length-1))]}let b=e.isIndexSelected(r),v=!b&&e.isIndexInRange(r),y=b?"*":v?"~":"",S=o.ShowValues?" "+l:"",w=n(p.substring(0,d),d)+" |"+f+S+y;h.push(w)}return o.Selectable&&"range"===o.SelectionMode&&(h.push(""),h.push(n("",d)+" Range: ["+e._selectionRangeStart+" - "+e._selectionRangeEnd+"]")),h.join("\n")}function a(e,t){let o=String(e);for(;o.length<t;)o=" "+o;return o}function n(e,t){let o=String(e);for(;o.length<t;)o+=" ";return o}function s(e,t){let o=String(e);for(;o.length<t;)o=o.length%2==0?o+" ":" "+o;return o}t.exports={render:function(e){let t;t="vertical"===e.options.Orientation?r(e):i(e),e.services.ContentAssignment.assignContent(e.options.TargetElementAddress,t)},wireEvents:function(){},renderVertical:r,renderHorizontal:i}},{}],18:[function(e,t,o){t.exports=class{constructor(e){this._modal=e}confirm(e,t){let o=Object.assign({},this._modal.options.DefaultConfirmOptions,t);return new Promise(t=>{let r=this._buildDialog(o.title,e,t,o);this._showDialog(r,t)})}doubleConfirm(e,t){let o=Object.assign({},this._modal.options.DefaultDoubleConfirmOptions,t);return new Promise(t=>{let r=this._buildDoubleConfirmDialog(o.title,e,t,o);this._showDialog(r,t)})}_buildDialog(e,t,o,r){let i=this._modal._nextId(),a=r.dangerous?"danger":"primary",n=document.createElement("div");n.className="pict-modal-dialog",r.unbounded&&(n.className+=" pict-modal-dialog--unbounded"),n.id="pict-modal-"+i,n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.style.width="420px",n.innerHTML='<div class="pict-modal-dialog-header"><span class="pict-modal-dialog-title">'+this._escapeHTML(e)+'</span><button class="pict-modal-dialog-close" aria-label="Close">&times;</button></div><div class="pict-modal-dialog-body"><p>'+this._escapeHTML(t)+'</p></div><div class="pict-modal-dialog-footer"><button class="pict-modal-btn" data-action="cancel">'+this._escapeHTML(r.cancelLabel)+'</button><button class="pict-modal-btn pict-modal-btn--'+a+'" data-action="confirm">'+this._escapeHTML(r.confirmLabel)+"</button></div>";let s=n.querySelector(".pict-modal-dialog-close"),l=n.querySelector('[data-action="cancel"]'),d=n.querySelector('[data-action="confirm"]'),c=e=>{this._dismissDialog(n,e,o)};return s.addEventListener("click",()=>{c(!1)}),l.addEventListener("click",()=>{c(!1)}),d.addEventListener("click",()=>{c(!0)}),n._dismiss=c,n._focusTarget=l,n}_buildDoubleConfirmDialog(e,t,o,r){let i=this._modal._nextId(),a="string"==typeof r.confirmPhrase&&r.confirmPhrase.length>0,n=document.createElement("div");n.className="pict-modal-dialog",r.unbounded&&(n.className+=" pict-modal-dialog--unbounded"),n.id="pict-modal-"+i,n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.style.width="420px";let s="<p>"+this._escapeHTML(t)+"</p>";if(a){let e=r.phrasePrompt.replace("{phrase}",r.confirmPhrase);s+='<div class="pict-modal-confirm-prompt">'+this._escapeHTML(e)+'</div><input type="text" class="pict-modal-confirm-input" autocomplete="off" spellcheck="false" />'}n.innerHTML='<div class="pict-modal-dialog-header"><span class="pict-modal-dialog-title">'+this._escapeHTML(e)+'</span><button class="pict-modal-dialog-close" aria-label="Close">&times;</button></div><div class="pict-modal-dialog-body">'+s+'</div><div class="pict-modal-dialog-footer"><button class="pict-modal-btn" data-action="cancel">'+this._escapeHTML(r.cancelLabel)+'</button><button class="pict-modal-btn pict-modal-btn--danger" data-action="confirm" disabled>'+this._escapeHTML(r.confirmLabel)+"</button></div>";let l=n.querySelector(".pict-modal-dialog-close"),d=n.querySelector('[data-action="cancel"]'),c=n.querySelector('[data-action="confirm"]'),h=e=>{this._dismissDialog(n,e,o)};if(l.addEventListener("click",()=>{h(!1)}),d.addEventListener("click",()=>{h(!1)}),a){let e=n.querySelector(".pict-modal-confirm-input");e.addEventListener("input",()=>{c.disabled=e.value!==r.confirmPhrase}),c.addEventListener("click",()=>{c.disabled||h(!0)}),n._focusTarget=e}else{let e=0;r.confirmLabel;c.disabled=!1,c.addEventListener("click",()=>{e++,1===e?c.textContent="Click again to confirm":h(!0)}),n._focusTarget=d}return n._dismiss=h,n}_showDialog(e,t){let o={element:e,dismiss:e._dismiss,type:"confirm"},r=null;this._modal.options.OverlayClickDismisses&&(r=()=>{e._dismiss(!1)}),this._modal._overlay.show(r),document.body.appendChild(e),this._modal._activeModals.push(o),e.offsetHeight,e.classList.add("pict-modal-visible"),e._focusTarget&&e._focusTarget.focus(),e._keyHandler=t=>{"Escape"===t.key&&e._dismiss(!1)},document.addEventListener("keydown",e._keyHandler)}_dismissDialog(e,t,o){if(!e._dismissed){if(e._dismissed=!0,e._keyHandler&&document.removeEventListener("keydown",e._keyHandler),e.classList.remove("pict-modal-visible"),this._modal._activeModals=this._modal._activeModals.filter(t=>t.element!==e),this._modal._activeModals.length>0){let e=this._modal._activeModals[this._modal._activeModals.length-1];this._modal._overlay.updateClickHandler(this._modal.options.OverlayClickDismisses?e.dismiss:null)}this._modal._overlay.hide(),setTimeout(()=>{e.parentNode&&e.parentNode.removeChild(e)},220),o(t)}}_escapeHTML(e){return"string"!=typeof e?"":e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}},{}],19:[function(e,t,o){t.exports=class{constructor(e){this._modal=e,this._activeMenu=null}dropdown(e,t){let o=Object.assign({align:"left",position:"auto",maxHeight:"60vh",closeOnSelect:!0},t||{}),r=this._resolveAnchor(e),i=this._anchorRect(e,r);if(!i)return Promise.resolve(null);if(this._activeMenu&&this._activeMenu.anchor===r)return this._activeMenu.promise;this.dismissAll();let a,n=Array.isArray(o.items)?o.items:[],s=new Promise(e=>{a=e}),l=this._buildMenu(n,o);document.body.appendChild(l),this._positionMenu(l,i,o),l.offsetHeight,l.classList.add("pict-modal-visible");let d=e=>{l._dismissed||(l._dismissed=!0,document.removeEventListener("mousedown",h,!0),document.removeEventListener("keydown",p,!0),window.removeEventListener("resize",m),window.removeEventListener("scroll",m,!0),l.classList.remove("pict-modal-visible"),setTimeout(()=>{l.parentNode&&l.parentNode.removeChild(l)},180),this._activeMenu&&this._activeMenu.element===l&&(this._activeMenu=null),"function"==typeof o.onClose&&o.onClose(e),a(e))},c=l.querySelectorAll("[data-pict-modal-dropdown-item]");for(let e=0;e<c.length;e++){let t=c[e];t.addEventListener("click",e=>{if(t.hasAttribute("data-disabled"))return;e.stopPropagation();let r=parseInt(t.getAttribute("data-index"),10),i=n[r],a=t.getAttribute("data-hash");"function"==typeof o.onSelect&&o.onSelect(a,i),!1!==o.closeOnSelect&&d({Hash:a,Item:i})})}let h=e=>{l.contains(e.target)||r&&r.contains&&r.contains(e.target)||d(null)};document.addEventListener("mousedown",h,!0);let p=e=>{if("Escape"===e.key)return e.stopPropagation(),void d(null);if("ArrowDown"===e.key||"ArrowUp"===e.key)e.preventDefault(),this._focusNeighbor(l,"ArrowDown"===e.key?1:-1);else if("Enter"===e.key||" "===e.key){let t=document.activeElement;t&&l.contains(t)&&t.hasAttribute("data-pict-modal-dropdown-item")&&(e.preventDefault(),t.click())}};document.addEventListener("keydown",p,!0);let m=()=>{let t=this._anchorRect(e,r);t&&this._positionMenu(l,t,o)};return window.addEventListener("resize",m),window.addEventListener("scroll",m,!0),setTimeout(()=>{this._focusFirstEnabled(l)},0),this._activeMenu={element:l,anchor:r,promise:s,dismiss:d},s}dismissAll(){if(this._activeMenu){let e=this._activeMenu.dismiss;this._activeMenu=null,e(null)}}_resolveAnchor(e){return e?"string"==typeof e?document.querySelector(e):1===e.nodeType?e:null:null}_anchorRect(e,t){return t&&"function"==typeof t.getBoundingClientRect?t.getBoundingClientRect():e&&"object"==typeof e&&"number"==typeof e.left&&"number"==typeof e.top?{left:e.left,top:e.top,width:e.width||0,height:e.height||0,right:e.left+(e.width||0),bottom:e.top+(e.height||0)}:null}_buildMenu(e,t){let o=this._modal._nextId(),r=document.createElement("div");r.className="pict-modal-dropdown",t.className&&(r.className+=" "+t.className),r.id="pict-modal-dropdown-"+o,r.setAttribute("role","menu"),r.style.maxHeight=t.maxHeight;let i="";for(let t=0;t<e.length;t++){let o=e[t];if(o.Separator){i+='<div class="pict-modal-dropdown-separator" role="separator"></div>';continue}if(o.Header){i+='<div class="pict-modal-dropdown-header">'+this._escapeHTML(o.Header)+"</div>";continue}let r="pict-modal-dropdown-item";o.Style&&(r+=" pict-modal-dropdown-item--"+o.Style),o.Disabled&&(r+=" pict-modal-dropdown-item--disabled");let a=' data-pict-modal-dropdown-item data-index="'+t+'" data-hash="'+this._escapeHTML(o.Hash||"")+'" role="menuitem" tabindex="-1"';o.Disabled&&(a+=' aria-disabled="true" data-disabled'),o.Tooltip&&(a+=' title="'+this._escapeHTML(o.Tooltip)+'"');let n=o.Icon?'<span class="pict-modal-dropdown-item-icon">'+o.Icon+"</span>":"",s=o.Hint?'<span class="pict-modal-dropdown-item-hint">'+this._escapeHTML(o.Hint)+"</span>":"";i+='<div class="'+r+'"'+a+">"+n+'<span class="pict-modal-dropdown-item-label">'+this._escapeHTML(o.Label||"")+"</span>"+s+"</div>"}return r.innerHTML=i,r}_positionMenu(e,t,o){let r=o.minWidth||(t.width>=80?Math.ceil(t.width)+"px":"160px");e.style.minWidth=r;let i,a=e.getBoundingClientRect(),n=window.innerWidth||document.documentElement.clientWidth,s=(window.innerHeight||document.documentElement.clientHeight)-t.bottom-4,l=t.top-4;i="above"===o.position||"below"!==o.position&&(a.height>s&&l>s);let d,c,h=Math.max(80,(i?l:s)-8);e.style.maxHeight=h+"px",d="right"===o.align?t.right-a.width:"center"===o.align?t.left+(t.width-a.width)/2:t.left,d=Math.min(d,n-a.width-4),d=Math.max(4,d),i?(c=Math.max(4,t.top-a.height-4),e.classList.add("pict-modal-dropdown--above")):(c=t.bottom+4,e.classList.remove("pict-modal-dropdown--above")),e.style.left=Math.round(d)+"px",e.style.top=Math.round(c)+"px"}_focusFirstEnabled(e){let t=e.querySelectorAll("[data-pict-modal-dropdown-item]:not([data-disabled])");t.length&&t[0].focus()}_focusNeighbor(e,t){let o=Array.prototype.slice.call(e.querySelectorAll("[data-pict-modal-dropdown-item]:not([data-disabled])"));if(!o.length)return;let r=document.activeElement,i=o.indexOf(r);o[-1===i?t>0?0:o.length-1:(i+t+o.length)%o.length].focus()}_escapeHTML(e){return"string"!=typeof e?"":e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}},{}],20:[function(e,t,o){t.exports=class{constructor(e){this._modal=e,this._element=null,this._refCount=0}show(e){this._refCount++,this._element||(this._element=document.createElement("div"),this._element.className="pict-modal-overlay",document.body.appendChild(this._element),this._element.offsetHeight,this._element.classList.add("pict-modal-visible")),e&&(this._currentClickHandler=e,this._element.onclick=e=>{e.target===this._element&&this._currentClickHandler&&this._currentClickHandler()})}updateClickHandler(e){this._currentClickHandler=e||null}hide(){if(this._refCount--,this._refCount<=0&&(this._refCount=0,this._element)){this._element.classList.remove("pict-modal-visible");let e=this._element;setTimeout(()=>{e.parentNode&&e.parentNode.removeChild(e)},220),this._element=null,this._currentClickHandler=null}}destroy(){this._refCount=0,this._element&&this._element.parentNode&&this._element.parentNode.removeChild(this._element),this._element=null,this._currentClickHandler=null}}},{}],21:[function(e,t,o){t.exports=class{constructor(e){this._modal=e,this._panels=[]}create(e,t){let o=this._modal&&this._modal.options&&this._modal.options.DefaultPanelOptions||{},r=Object.assign({},{position:"right",width:340,minWidth:200,maxWidth:600,collapsible:!0,collapsed:!1,persist:!1,persistKey:"",onResize:null,onToggle:null},o,t);if("undefined"==typeof document)return this._nullHandle();let i=document.querySelector(e);if(!i)return this._nullHandle();let a=this._modal._nextId(),n="right"===r.position,s=!1,l=r.width,d=!1;if(r.persist&&r.persistKey)try{let e=localStorage.getItem("pict-panel-"+r.persistKey);if(e){let t=JSON.parse(e);"number"==typeof t.width&&(l=t.width),"boolean"==typeof t.collapsed&&(r.collapsed=t.collapsed)}}catch(e){}i.classList.add("pict-panel"),i.classList.add(n?"pict-panel-right":"pict-panel-left"),i.style.width=l+"px","none"===i.style.display&&(i.style.display="");let c=document.createElement("div");c.className="pict-panel-edge "+(n?"pict-panel-edge-right":"pict-panel-edge-left");let h=document.createElement("div");h.className="pict-panel-resize",c.appendChild(h);let p=null;r.collapsible&&(p=document.createElement("div"),p.className="pict-panel-tab",p.title="Toggle panel",c.appendChild(p)),i.parentNode?n?i.parentNode.insertBefore(c,i):i.parentNode.insertBefore(c,i.nextSibling):i.insertBefore(c,i.firstChild);let m="undefined"!=typeof window&&window.pict?window.pict:null,u=e=>m&&"function"==typeof m.icon?m.icon(e):"",g=()=>{if(!p)return;let e=u("ChevronRight"),t=u("ChevronLeft");p.innerHTML=n?s?t:e:s?e:t},f=()=>{if(r.persist&&r.persistKey)try{localStorage.setItem("pict-panel-"+r.persistKey,JSON.stringify({width:l,collapsed:s}))}catch(e){}},b=()=>{s||d||(s=!0,i.classList.add("pict-panel-collapsed"),c.classList.add("pict-panel-edge-collapsed"),g(),f(),"function"==typeof r.onToggle&&r.onToggle(!0))},v=()=>{s&&!d&&(s=!1,c.classList.remove("pict-panel-edge-collapsed"),i.classList.remove("pict-panel-collapsed"),i.style.width=l+"px",g(),f(),"function"==typeof r.onToggle&&r.onToggle(!1))},y=()=>{s?v():b()};p&&p.addEventListener("click",e=>{e.stopPropagation(),y()});let S=e=>{if(s)return;e.preventDefault();let t=e.clientX,o=i.offsetWidth;h.classList.add("dragging"),i.style.transition="none",document.body.style.userSelect="none",document.body.style.cursor="col-resize";let a=e=>{let a=n?t-e.clientX:e.clientX-t,s=Math.max(r.minWidth,Math.min(r.maxWidth,o+a));i.style.width=s+"px"},d=e=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",d),h.classList.remove("dragging"),i.style.transition="",document.body.style.userSelect="",document.body.style.cursor="",l=i.offsetWidth,f(),"function"==typeof r.onResize&&r.onResize(l)};document.addEventListener("mousemove",a),document.addEventListener("mouseup",d)};h.addEventListener("mousedown",S),g(),r.collapsed&&(s=!0,i.classList.add("pict-panel-collapsed"),c.classList.add("pict-panel-edge-collapsed"),g());let w={id:a,collapse:b,expand:v,toggle:y,setWidth:e=>{if(d)return;let t=Math.max(r.minWidth,Math.min(r.maxWidth,e));l=t,s||(i.style.width=t+"px"),f(),"function"==typeof r.onResize&&r.onResize(t)},destroy:()=>{if(d)return;d=!0,h.removeEventListener("mousedown",S),c.parentNode&&c.remove(),i.classList.remove("pict-panel","pict-panel-right","pict-panel-left","pict-panel-collapsed"),i.style.width="",i.style.transition="";let e=this._panels.indexOf(w);e>=0&&this._panels.splice(e,1)}};return this._panels.push(w),w}_nullHandle(){return{id:0,collapse:()=>{},expand:()=>{},toggle:()=>{},setWidth:()=>{},destroy:()=>{}}}destroyAll(){let e=this._panels.slice();for(let t=0;t<e.length;t++)e[t].destroy()}}},{}],22:[function(e,t,o){const r="pict-modal-shell:";class i{constructor(e,t,o){this._modal=e,this._viewport=t,this._options=o||{},this._panels=[],this._panelsByHash={},this._centerDestinationEl=null,this._idCounter=0,this._activeDrag=null,this._persistenceEnabled=!1!==this._options.Persistence,this._persistenceKey=this._persistenceEnabled?this._resolvePersistenceKey(this._options.PersistenceKey):null,this._buildSkeleton()}addPanel(e){let t=new a(this,e||{});return this._panels.push(t),this._panelsByHash[t.Hash]=t,this._mountPanel(t),t._renderContentView(),t}getPanel(e){return this._panelsByHash[e]||null}getPanels(){return this._panels.slice()}openPanel(e){let t=this._panelsByHash[e];return t&&t.popup(),t||null}center(e){if((e=e||{}).ContentDestinationId){this._centerDestinationEl&&this._centerDestinationEl.parentNode===this._centerEl&&this._centerEl.removeChild(this._centerDestinationEl);let t=document.createElement("div");t.id=e.ContentDestinationId,t.className="pict-modal-shell-center-content";let o=null,r=this._centerEl.children;for(let e=0;e<r.length;e++){let t=r[e];if(t.classList&&t.classList.contains("pict-modal-shell-panel-bottom")){o=t;break}}o?this._centerEl.insertBefore(t,o):this._centerEl.appendChild(t),this._centerDestinationEl=t}return this._centerEl}getCenterEl(){return this._centerEl}destroy(){for(let e=0;e<this._panels.length;e++)this._panels[e].destroy(!0);this._panels=[],this._panelsByHash={},this._wrapperEl&&this._wrapperEl.parentNode&&this._wrapperEl.parentNode.removeChild(this._wrapperEl),this._detachDragHandlers()}_resolvePersistenceKey(e){if("string"==typeof e&&e.length>0)return r+e;try{if("undefined"!=typeof window&&window.location&&window.location.hostname)return r+window.location.hostname}catch(e){}return r+"default"}_loadState(){if(!this._persistenceKey)return null;try{let e="undefined"!=typeof window?window.localStorage:null;if(!e)return null;let t=e.getItem(this._persistenceKey);if(!t)return null;let o=JSON.parse(t);return o&&1===o.Version?o.Panels&&"object"==typeof o.Panels?o.Panels:{}:null}catch(e){return null}}_loadPanelState(e){let t=this._loadState();return t&&t[e]||null}_savePanelState(e,t){if(this._persistenceKey)try{let o="undefined"!=typeof window?window.localStorage:null;if(!o)return;let r=this._loadState()||{};r[e]=t,o.setItem(this._persistenceKey,JSON.stringify({Version:1,Panels:r,SavedAt:(new Date).toISOString()}))}catch(e){}}_buildSkeleton(){this._viewport.innerHTML="",this._viewport.classList.add("pict-modal-shell-host"),this._wrapperEl=document.createElement("div"),this._wrapperEl.className="pict-modal-shell",this._topRow=document.createElement("div"),this._topRow.className="pict-modal-shell-row pict-modal-shell-row-top",this._wrapperEl.appendChild(this._topRow),this._middleRow=document.createElement("div"),this._middleRow.className="pict-modal-shell-row pict-modal-shell-row-middle",this._wrapperEl.appendChild(this._middleRow),this._leftStack=document.createElement("div"),this._leftStack.className="pict-modal-shell-side pict-modal-shell-side-left",this._middleRow.appendChild(this._leftStack),this._centerEl=document.createElement("div"),this._centerEl.className="pict-modal-shell-center",this._middleRow.appendChild(this._centerEl),this._rightStack=document.createElement("div"),this._rightStack.className="pict-modal-shell-side pict-modal-shell-side-right",this._middleRow.appendChild(this._rightStack),this._bottomRow=document.createElement("div"),this._bottomRow.className="pict-modal-shell-row pict-modal-shell-row-bottom",this._wrapperEl.appendChild(this._bottomRow),this._overlayLayer=document.createElement("div"),this._overlayLayer.className="pict-modal-shell-overlay-layer",this._middleRow.appendChild(this._overlayLayer),this._viewport.appendChild(this._wrapperEl)}_mountPanel(e){if("overlay"===e.Position)return void this._overlayLayer.appendChild(e.El);if("center"===e.Scope)return this._centerEl.classList.add("pict-modal-shell-center-with-inner-panel"),void("top"===e.Side?this._centerEl.insertBefore(e.El,this._centerEl.firstChild):this._centerEl.appendChild(e.El));let t;t="top"===e.Side?this._topRow:"bottom"===e.Side?this._bottomRow:"left"===e.Side?this._leftStack:"right"===e.Side?this._rightStack:this._wrapperEl,t.appendChild(e.El)}_attachDragStart(e,t){t.preventDefault();let o="top"===e.Side||"bottom"===e.Side?"y":"x";this._activeDrag={Panel:e,Axis:o,StartCoord:"x"===o?t.clientX:t.clientY,StartSize:e.Size,Direction:"left"===e.Side||"top"===e.Side?1:-1,PendingSize:null,RAFId:0},document.body.classList.add("x"===o?"pict-modal-shell-dragging-x":"pict-modal-shell-dragging-y"),e.El.classList.add("pict-modal-shell-panel-resizing");try{t.target.setPointerCapture&&t.target.setPointerCapture(t.pointerId)}catch(e){}document.addEventListener("pointermove",this._onDragMove),document.addEventListener("pointerup",this._onDragEnd)}_onDragMove=e=>{if(!this._activeDrag)return;let t=this._activeDrag,o=(("x"===t.Axis?e.clientX:e.clientY)-t.StartCoord)*t.Direction;if(t.PendingSize=t.StartSize+o,!t.RAFId){let e=this;t.RAFId="undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame(function(){e._flushDrag()}):setTimeout(function(){e._flushDrag()},16)}};_flushDrag(){let e=this._activeDrag;e&&(e.RAFId=0,null!==e.PendingSize&&(e.Panel.setSize(e.PendingSize),e.PendingSize=null))}_onDragEnd=()=>{if(!this._activeDrag)return;let e=this._activeDrag;null!==e.PendingSize&&this._flushDrag(),e.RAFId&&"undefined"!=typeof window&&window.cancelAnimationFrame&&window.cancelAnimationFrame(e.RAFId),document.body.classList.remove("pict-modal-shell-dragging-x"),document.body.classList.remove("pict-modal-shell-dragging-y"),e.Panel.El.classList.remove("pict-modal-shell-panel-resizing"),document.removeEventListener("pointermove",this._onDragMove),document.removeEventListener("pointerup",this._onDragEnd),e.Panel._persist(),this._activeDrag=null};_detachDragHandlers(){document.removeEventListener("pointermove",this._onDragMove),document.removeEventListener("pointerup",this._onDragEnd)}}class a{constructor(e,t){this._shell=e,this._config=t,this.Hash=t.Hash||"panel-"+ ++e._idCounter,this.Side="right"===t.Side||"bottom"===t.Side||"left"===t.Side?t.Side:"top",this.Mode="collapsible"===t.Mode||"resizable"===t.Mode?t.Mode:"fixed",this.Position="overlay"===t.Position?"overlay":"pinned",this.Scope="center"!==t.Scope||"top"!==this.Side&&"bottom"!==this.Side?"shell":"center",this.Title=t.Title||"",this.Icon=t.Icon||"",this.MinSize="number"==typeof t.MinSize?t.MinSize:40,this.MaxSize="number"==typeof t.MaxSize?t.MaxSize:1200,this.Hidden=!!t.Hidden,this.CollapsedSize="number"==typeof t.CollapsedSize?t.CollapsedSize:this.Hidden?0:24,this.PersistEnabled=e._persistenceEnabled&&!1!==t.Persist;let o="left"===this.Side||"right"===this.Side?240:60;if(this.Size="number"==typeof t.Size?t.Size:o,this.Collapsed=!!t.Collapsed,this.PersistEnabled){let t=e._loadPanelState(this.Hash);t&&("number"==typeof t.Size&&(this.Size=t.Size),"boolean"==typeof t.Collapsed&&(this.Collapsed=t.Collapsed))}this._clampSize(),this._buildEl(t),this._applySize(),this._applyCollapsedClass(),this.ResponsiveDrawer="number"==typeof t.ResponsiveDrawer&&t.ResponsiveDrawer>0?t.ResponsiveDrawer:0,this.DrawerHeight="string"==typeof t.DrawerHeight&&t.DrawerHeight?t.DrawerHeight:"33vh",this._mediaQuery=null,this._mediaQueryHandler=null,this.ResponsiveDrawer>0&&this._wireResponsiveDrawer()}getContentEl(){return this._contentEl}getContentView(){if(!this._config.ContentView)return null;let e=this._shell._modal&&this._shell._modal.pict;return e&&e.views&&e.views[this._config.ContentView]||null}collapse(){this._setCollapsed(!0)}expand(){this._setCollapsed(!1)}toggle(){this._setCollapsed(!this.Collapsed)}popup(){this.Collapsed?this._setCollapsed(!1):(this._renderContentView(),this._flash())}setSize(e){"number"==typeof e&&isFinite(e)&&(this.Size=e,this._clampSize(),this._applySize())}destroy(e){if(this._unwireResponsiveDrawer(),this.El&&this.El.parentNode&&this.El.parentNode.removeChild(this.El),!e){let e=this._shell._panels.indexOf(this);e>=0&&this._shell._panels.splice(e,1),delete this._shell._panelsByHash[this.Hash]}}_clampSize(){this.Size<this.MinSize&&(this.Size=this.MinSize),this.Size>this.MaxSize&&(this.Size=this.MaxSize)}_wireResponsiveDrawer(){if("undefined"==typeof window||!window.matchMedia)return;this._mediaQuery=window.matchMedia("(max-width: "+this.ResponsiveDrawer+"px)"),this.El&&this.El.style.setProperty("--pict-modal-drawer-height",this.DrawerHeight);let e=this;this._mediaQueryHandler=function(t){let o=t&&"boolean"==typeof t.matches?t.matches:e._mediaQuery.matches;e._setDrawerMode(o)},this._mediaQuery.addEventListener?this._mediaQuery.addEventListener("change",this._mediaQueryHandler):this._mediaQuery.addListener&&this._mediaQuery.addListener(this._mediaQueryHandler),this._mediaQueryHandler({matches:this._mediaQuery.matches}),this._resizeHandler=function(){e._setDrawerMode(e._mediaQuery.matches)},window.addEventListener("resize",this._resizeHandler)}_unwireResponsiveDrawer(){this._resizeHandler&&"undefined"!=typeof window&&(window.removeEventListener("resize",this._resizeHandler),this._resizeHandler=null),this._mediaQuery&&this._mediaQueryHandler&&(this._mediaQuery.removeEventListener?this._mediaQuery.removeEventListener("change",this._mediaQueryHandler):this._mediaQuery.removeListener&&this._mediaQuery.removeListener(this._mediaQueryHandler),this._mediaQuery=null,this._mediaQueryHandler=null)}_setDrawerMode(e){if(!this._shell||!this._shell._middleRow)return;if(!(!this.El||!this.El.classList.contains("pict-modal-shell-panel-drawer"))!==!!e){if(e)this._shell._middleRow.classList.add("pict-modal-shell-drawer-active"),this.El&&this.El.classList.add("pict-modal-shell-panel-drawer");else{let e=!1,t=this._shell._panels||[];for(let o=0;o<t.length;o++){let r=t[o];if(r!==this&&r._mediaQuery&&r._mediaQuery.matches&&r.ResponsiveDrawer>0){e=!0;break}}e||this._shell._middleRow.classList.remove("pict-modal-shell-drawer-active"),this.El&&this.El.classList.remove("pict-modal-shell-panel-drawer")}this._applySize()}}_buildEl(e){let t=document.createElement("div");t.className="pict-modal-shell-panel pict-modal-shell-panel-"+this.Side+" pict-modal-shell-panel-mode-"+this.Mode+("overlay"===this.Position?" pict-modal-shell-panel-overlay":"")+(this.Hidden?" pict-modal-shell-panel-hidden":""),t.setAttribute("data-shell-panel-hash",this.Hash),t.setAttribute("data-shell-panel-side",this.Side),t.setAttribute("data-shell-panel-mode",this.Mode);let o=document.createElement("div");if(o.className="pict-modal-shell-panel-content",this._contentEl=document.createElement("div"),e.ContentDestinationId&&(this._contentEl.id=e.ContentDestinationId),this._contentEl.className="pict-modal-shell-panel-content-inner",o.appendChild(this._contentEl),t.appendChild(o),("collapsible"===this.Mode||"resizable"===this.Mode)&&!this.Hidden){this._collapseTab=document.createElement("button"),this._collapseTab.type="button",this._collapseTab.className="pict-modal-shell-panel-collapse-tab",this._collapseTab.setAttribute("aria-label",this.Title?"Toggle "+this.Title:"Toggle panel"),this._collapseTab.title=this.Title||"Toggle",this._collapseTab.innerHTML=(this.Icon?'<span class="pict-modal-shell-panel-collapse-tab-icon">'+this.Icon+"</span>":"")+(this.Title?'<span class="pict-modal-shell-panel-collapse-tab-title">'+this._escape(this.Title)+"</span>":"");let e=this;this._collapseTab.addEventListener("click",function(){e.toggle()}),t.appendChild(this._collapseTab)}if("resizable"===this.Mode){this._resizeHandle=document.createElement("div"),this._resizeHandle.className="pict-modal-shell-panel-resize-handle",this._resizeHandle.setAttribute("aria-hidden","true");let e=this;this._resizeHandle.addEventListener("pointerdown",function(t){e.Collapsed||e._shell._attachDragStart(e,t)}),t.appendChild(this._resizeHandle)}this.El=t}_applySize(){let e=this.Collapsed?this.CollapsedSize:this.Size;"left"===this.Side||"right"===this.Side?(this.El.style.width=e+"px",this.El.style.height=""):(this.El.style.height=e+"px",this.El.style.width="")}_applyCollapsedClass(){this.Collapsed?this.El.classList.add("pict-modal-shell-panel-collapsed"):this.El.classList.remove("pict-modal-shell-panel-collapsed")}_setCollapsed(e){if(this.Collapsed===!!e)return;let t=this.Collapsed;this.Collapsed=!!e,this._applyCollapsedClass(),this._applySize(),this._persist(),t&&!this.Collapsed?(this._renderContentView(),this._fireHook("OnExpand")):!t&&this.Collapsed&&this._fireHook("OnCollapse"),this._fireHook("OnToggle",this.Collapsed)}_fireHook(e,t){let o=this._config[e];if("function"==typeof o)try{void 0!==t?o(t,this):o(this)}catch(e){}}_renderContentView(){let e=this.getContentView();if(e&&"function"==typeof e.render)try{e.render()}catch(e){}}_flash(){if(!this.El)return;this.El.classList.add("pict-modal-shell-panel-flash");let e=this;clearTimeout(this._flashTimer),this._flashTimer=setTimeout(function(){e.El&&e.El.classList.remove("pict-modal-shell-panel-flash")},700)}_persist(){this.PersistEnabled&&this._shell._savePanelState(this.Hash,{Collapsed:this.Collapsed,Size:this.Size})}_escape(e){return String(e||"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}}t.exports=class{constructor(e){this._modal=e,this._shellsByViewport=new WeakMap}shell(e,t){let o="string"==typeof e?document.querySelector(e):e;if(!o)throw new Error("Pict-Modal-Shell.shell: viewport not found for "+e);let r=this._shellsByViewport.get(o);if(r)return r;let a=new i(this._modal,o,t);return this._shellsByViewport.set(o,a),a}},t.exports.PictModalShell=i,t.exports.ShellPanel=a,t.exports.STORAGE_PREFIX=r,t.exports.SCHEMA_VERSION=1},{}],23:[function(e,t,o){t.exports=class{constructor(e){this._modal=e,this._containers={}}toast(e,t){let o=Object.assign({},this._modal.options.DefaultToastOptions,t),r=this._getContainer(o.position),i=this._modal._nextId(),a=document.createElement("div");a.className="pict-modal-toast pict-modal-toast--"+o.type,a.id="pict-modal-toast-"+i;let n='<span class="pict-modal-toast-message">'+this._escapeHTML(e)+"</span>";o.dismissible&&(n+='<button class="pict-modal-toast-dismiss" aria-label="Dismiss">&times;</button>'),a.innerHTML=n;let s=!1,l=null,d=()=>{s||(s=!0,l&&clearTimeout(l),a.classList.remove("pict-modal-visible"),a.classList.add("pict-modal-toast-exit"),this._modal._activeToasts=this._modal._activeToasts.filter(e=>e.element!==a),setTimeout(()=>{a.parentNode&&a.parentNode.removeChild(a),this._cleanupContainer(o.position)},220))},c={dismiss:d};if(o.dismissible){let e=a.querySelector(".pict-modal-toast-dismiss");e&&e.addEventListener("click",d)}r.appendChild(a);let h={element:a,dismiss:d,handle:c};return this._modal._activeToasts.push(h),a.offsetHeight,a.classList.add("pict-modal-visible"),o.duration>0&&(l=setTimeout(d,o.duration)),c}_getContainer(e){if(this._containers[e])return this._containers[e];let t=document.createElement("div");return t.className="pict-modal-toast-container pict-modal-toast-container--"+e,document.body.appendChild(t),this._containers[e]=t,t}_cleanupContainer(e){let t=this._containers[e];t&&0===t.children.length&&(t.parentNode&&t.parentNode.removeChild(t),delete this._containers[e])}dismissAll(){let e=this._modal._activeToasts.slice();for(let t=0;t<e.length;t++)e[t].dismiss()}destroy(){this.dismissAll();let e=Object.keys(this._containers);for(let t=0;t<e.length;t++){let o=this._containers[e[t]];o&&o.parentNode&&o.parentNode.removeChild(o)}this._containers={}}_escapeHTML(e){return"string"!=typeof e?"":e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}},{}],24:[function(e,t,o){t.exports=class{constructor(e){this._modal=e}tooltip(e,t,o){let r=Object.assign({},this._modal.options.DefaultTooltipOptions,o);return this._attachTooltip(e,t,!1,r)}richTooltip(e,t,o){let r=Object.assign({},this._modal.options.DefaultTooltipOptions,o);return this._attachTooltip(e,t,!0,r)}_attachTooltip(e,t,o,r){let i=null,a=null,n=null,s=!1,l=this._modal._nextId(),d=()=>{if(s||i)return;i=document.createElement("div"),i.className="pict-modal-tooltip pict-modal-tooltip--"+r.position,i.id="pict-modal-tooltip-"+l,i.setAttribute("role","tooltip"),i.style.maxWidth=r.maxWidth,r.interactive&&i.classList.add("pict-modal-tooltip-interactive");let a=document.createElement("div");a.className="pict-modal-tooltip-arrow";let d=document.createElement("div");o?d.innerHTML=t:d.textContent=t,i.appendChild(a),i.appendChild(d),document.body.appendChild(i),e.setAttribute("aria-describedby",i.id),this._positionTooltip(i,e,r.position),i.offsetHeight,i.classList.add("pict-modal-visible"),this._modal._activeTooltips.push({element:i,targetElement:e,destroy:g}),r.interactive&&i&&(i.addEventListener("mouseenter",()=>{n&&(clearTimeout(n),n=null)}),i.addEventListener("mouseleave",()=>{c()}))},c=()=>{if(!i)return;i.classList.remove("pict-modal-visible");let t=i;i=null,e.removeAttribute("aria-describedby"),this._modal._activeTooltips=this._modal._activeTooltips.filter(e=>e.element!==t),setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t)},220)},h=()=>{n&&(clearTimeout(n),n=null),a=setTimeout(d,r.delay)},p=()=>{a&&(clearTimeout(a),a=null),r.interactive?n=setTimeout(c,100):c()},m=()=>{a=setTimeout(d,r.delay)},u=()=>{a&&(clearTimeout(a),a=null),c()};e.addEventListener("mouseenter",h),e.addEventListener("mouseleave",p),e.addEventListener("focusin",m),e.addEventListener("focusout",u);let g=()=>{s||(s=!0,a&&clearTimeout(a),n&&clearTimeout(n),c(),e.removeEventListener("mouseenter",h),e.removeEventListener("mouseleave",p),e.removeEventListener("focusin",m),e.removeEventListener("focusout",u))};return{destroy:g}}_positionTooltip(e,t,o){let r=t.getBoundingClientRect(),i=e.getBoundingClientRect(),a=o;"top"===a&&r.top<i.height+8?a="bottom":"bottom"===a&&window.innerHeight-r.bottom<i.height+8?a="top":"left"===a&&r.left<i.width+8?a="right":"right"===a&&window.innerWidth-r.right<i.width+8&&(a="left"),e.className=e.className.replace(/pict-modal-tooltip--\w+/,"pict-modal-tooltip--"+a);let n=0,s=0;switch(a){case"top":n=r.top-i.height-8,s=r.left+r.width/2-i.width/2;break;case"bottom":n=r.bottom+8,s=r.left+r.width/2-i.width/2;break;case"left":n=r.top+r.height/2-i.height/2,s=r.left-i.width-8;break;case"right":n=r.top+r.height/2-i.height/2,s=r.right+8}s=Math.max(4,Math.min(s,window.innerWidth-i.width-4)),n=Math.max(4,Math.min(n,window.innerHeight-i.height-4)),e.style.top=n+"px",e.style.left=s+"px"}dismissAll(){let e=this._modal._activeTooltips.slice();for(let t=0;t<e.length;t++)e[t].destroy()}}},{}],25:[function(e,t,o){t.exports=class{constructor(e){this._modal=e}show(e){let t=Object.assign({},this._modal.options.DefaultModalOptions,e);return new Promise(e=>{let o=this._buildDialog(t,e);this._showDialog(o,t,e)})}_buildDialog(e,t){let o=this._modal._nextId(),r=document.createElement("div");r.className="pict-modal-dialog",e.unbounded&&(r.className+=" pict-modal-dialog--unbounded"),r.id="pict-modal-"+o,r.setAttribute("role","dialog"),r.setAttribute("aria-modal","true"),r.style.width=e.width;let i="";(e.title||e.closeable)&&(i='<div class="pict-modal-dialog-header">',i+='<span class="pict-modal-dialog-title">'+this._escapeHTML(e.title)+"</span>",e.closeable&&(i+='<button class="pict-modal-dialog-close" aria-label="Close">&times;</button>'),i+="</div>");let a='<div class="pict-modal-dialog-body">'+(e.content||"")+"</div>",n="";if(e.buttons&&e.buttons.length>0){n='<div class="pict-modal-dialog-footer">';for(let t=0;t<e.buttons.length;t++){let o=e.buttons[t],r="pict-modal-btn";o.Style&&(r+=" pict-modal-btn--"+o.Style),n+='<button class="'+r+'" data-hash="'+this._escapeHTML(o.Hash)+'">'+this._escapeHTML(o.Label)+"</button>"}n+="</div>"}r.innerHTML=i+a+n;let s=o=>{this._dismissDialog(r,o,t,e)};if(e.closeable){let e=r.querySelector(".pict-modal-dialog-close");e&&e.addEventListener("click",()=>{s(null)})}let l=r.querySelectorAll("[data-hash]");for(let e=0;e<l.length;e++){let t=l[e];t.addEventListener("click",()=>{s(t.getAttribute("data-hash"))})}return r._dismiss=s,r}_showDialog(e,t,o){let r={element:e,dismiss:e._dismiss,type:"window"},i=null;this._modal.options.OverlayClickDismisses&&t.closeable&&(i=()=>{e._dismiss(null)}),this._modal._overlay.show(i),document.body.appendChild(e),this._modal._activeModals.push(r),e.offsetHeight,e.classList.add("pict-modal-visible");let a=e.querySelector(".pict-modal-btn")||e.querySelector(".pict-modal-dialog-close");a&&a.focus(),e._keyHandler=o=>{"Escape"===o.key&&t.closeable&&e._dismiss(null)},document.addEventListener("keydown",e._keyHandler),"function"==typeof t.onOpen&&t.onOpen(e)}_dismissDialog(e,t,o,r){if(!e._dismissed){if(e._dismissed=!0,e._keyHandler&&document.removeEventListener("keydown",e._keyHandler),e.classList.remove("pict-modal-visible"),this._modal._activeModals=this._modal._activeModals.filter(t=>t.element!==e),this._modal._activeModals.length>0){let e=this._modal._activeModals[this._modal._activeModals.length-1];this._modal._overlay.updateClickHandler(this._modal.options.OverlayClickDismisses?e.dismiss:null)}this._modal._overlay.hide(),setTimeout(()=>{e.parentNode&&e.parentNode.removeChild(e)},220),"function"==typeof r.onClose&&r.onClose(t),o(t)}}_escapeHTML(e){return"string"!=typeof e?"":e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}},{}],26:[function(e,t,o){t.exports={AutoInitialize:!0,AutoRender:!1,AutoSolveWithApp:!1,ViewIdentifier:"Pict-Section-Modal",OverlayClickDismisses:!0,DefaultConfirmOptions:{title:"Confirm",confirmLabel:"OK",cancelLabel:"Cancel",dangerous:!1,unbounded:!1},DefaultDoubleConfirmOptions:{title:"Are you sure?",confirmLabel:"Confirm",cancelLabel:"Cancel",phrasePrompt:'Type "{phrase}" to confirm:',confirmPhrase:"",unbounded:!1},DefaultModalOptions:{title:"",content:"",buttons:[],closeable:!0,width:"480px",unbounded:!1},DefaultTooltipOptions:{position:"top",delay:200,maxWidth:"300px",interactive:!1},DefaultToastOptions:{type:"info",duration:3e3,position:"top-right",dismissible:!0},DefaultPanelOptions:{position:"right",width:340,minWidth:200,maxWidth:600,collapsible:!0,collapsed:!1,persist:!1,persistKey:""},Templates:[],Renderables:[],CSS:"\n/* pict-section-modal */\n.pict-modal-root\n{\n\t/* Defaults are routed through pict-provider-theme tokens so apps\n\t using the theme provider get themed modals automatically. Each\n\t var() carries its original hex as the fallback so apps that don't\n\t install pict-provider-theme look exactly as before. Apps may\n\t still override any --pict-modal-* var directly to layer over the\n\t theme-driven defaults. */\n\n\t/* Overlay */\n\t--pict-modal-overlay-bg: rgba(0, 0, 0, 0.5);\n\n\t/* Dialog */\n\t--pict-modal-bg: var(--theme-color-background-panel, #ffffff);\n\t--pict-modal-fg: var(--theme-color-text-primary, #1a1a1a);\n\t--pict-modal-border: var(--theme-color-border-default, #e0e0e0);\n\t--pict-modal-border-radius: 8px;\n\t--pict-modal-shadow: 0 4px 24px rgba(0, 0, 0, 0.15);\n\t--pict-modal-header-bg: var(--theme-color-background-secondary, #f5f5f5);\n\t--pict-modal-header-fg: var(--theme-color-text-primary, #1a1a1a);\n\t--pict-modal-header-border: var(--theme-color-border-default, #e0e0e0);\n\n\t/* Buttons */\n\t--pict-modal-btn-bg: var(--theme-color-background-secondary, #e0e0e0);\n\t--pict-modal-btn-fg: var(--theme-color-text-primary, #1a1a1a);\n\t--pict-modal-btn-hover-bg: var(--theme-color-background-hover, #d0d0d0);\n\t--pict-modal-btn-primary-bg: var(--theme-color-brand-primary, #2563eb);\n\t--pict-modal-btn-primary-fg: var(--theme-color-text-on-brand, #ffffff);\n\t--pict-modal-btn-primary-hover-bg:var(--theme-color-brand-primary-hover,#1d4ed8);\n\t--pict-modal-btn-danger-bg: var(--theme-color-status-error, #dc2626);\n\t--pict-modal-btn-danger-fg: var(--theme-color-text-on-brand, #ffffff);\n\t--pict-modal-btn-danger-hover-bg: var(--theme-color-status-error, #b91c1c);\n\t--pict-modal-btn-border-radius: 4px;\n\n\t/* Toast */\n\t--pict-modal-toast-bg: var(--theme-color-background-panel, #333333);\n\t--pict-modal-toast-fg: var(--theme-color-text-primary, #ffffff);\n\t--pict-modal-toast-success-bg: var(--theme-color-status-success, #16a34a);\n\t--pict-modal-toast-warning-bg: var(--theme-color-status-warning, #d97706);\n\t--pict-modal-toast-error-bg: var(--theme-color-status-error, #dc2626);\n\t--pict-modal-toast-info-bg: var(--theme-color-status-info, #2563eb);\n\t--pict-modal-toast-border-radius: 6px;\n\t--pict-modal-toast-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);\n\n\t/* Tooltip */\n\t--pict-modal-tooltip-bg: var(--theme-color-background-tertiary,#1a1a1a);\n\t--pict-modal-tooltip-fg: var(--theme-color-text-primary, #ffffff);\n\t--pict-modal-tooltip-border-radius:4px;\n\t--pict-modal-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n\n\t/* Dropdown */\n\t--pict-modal-dropdown-bg: var(--theme-color-background-panel, #ffffff);\n\t--pict-modal-dropdown-fg: var(--theme-color-text-primary, #1a1a1a);\n\t--pict-modal-dropdown-border: var(--theme-color-border-default, #e0e0e0);\n\t--pict-modal-dropdown-border-radius: 6px;\n\t--pict-modal-dropdown-shadow: 0 6px 18px rgba(0, 0, 0, 0.18);\n\t--pict-modal-dropdown-item-hover-bg: var(--theme-color-background-hover, rgba(37, 99, 235, 0.10));\n\t--pict-modal-dropdown-item-hover-fg: var(--theme-color-text-primary, #1a1a1a);\n\t--pict-modal-dropdown-item-disabled-fg: var(--theme-color-text-muted, #9aa0a6);\n\t--pict-modal-dropdown-separator: var(--theme-color-border-light, #e8e8e8);\n\t--pict-modal-dropdown-header-fg: var(--theme-color-text-secondary, #6b7280);\n\t--pict-modal-dropdown-danger-fg: var(--theme-color-status-error, #dc2626);\n\t--pict-modal-dropdown-primary-fg: var(--theme-color-brand-primary, #2563eb);\n\n\t/* Typography */\n\t--pict-modal-font-family: var(--theme-typography-family-sans, system-ui, -apple-system, sans-serif);\n\t--pict-modal-font-size: 14px;\n\t--pict-modal-title-font-size: 16px;\n\n\t/* Animation */\n\t--pict-modal-transition-duration: 200ms;\n}\n\n/* Overlay */\n.pict-modal-overlay\n{\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: 1000;\n\tbackground: var(--pict-modal-overlay-bg);\n\topacity: 0;\n\ttransition: opacity var(--pict-modal-transition-duration) ease;\n}\n\n.pict-modal-overlay.pict-modal-visible\n{\n\topacity: 1;\n}\n\n/* Dialog */\n.pict-modal-dialog\n{\n\tposition: fixed;\n\tz-index: 1010;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%) translateY(-20px);\n\topacity: 0;\n\ttransition: opacity var(--pict-modal-transition-duration) ease,\n\t transform var(--pict-modal-transition-duration) ease;\n\n\tmax-width: 90vw;\n\tmax-height: 90vh;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\tbackground: var(--pict-modal-bg);\n\tcolor: var(--pict-modal-fg);\n\tborder: 1px solid var(--pict-modal-border);\n\tborder-radius: var(--pict-modal-border-radius);\n\tbox-shadow: var(--pict-modal-shadow);\n\tfont-family: var(--pict-modal-font-family);\n\tfont-size: var(--pict-modal-font-size);\n}\n\n.pict-modal-dialog.pict-modal-visible\n{\n\topacity: 1;\n\ttransform: translate(-50%, -50%) translateY(0);\n}\n\n/* Unbounded modifier — lets callers opt out of the 90vh/90vw viewport cap.\n Use with caution: content taller than the viewport will push buttons\n below the fold. */\n.pict-modal-dialog.pict-modal-dialog--unbounded\n{\n\tmax-height: none;\n\tmax-width: none;\n}\n\n.pict-modal-dialog-header\n{\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 12px 16px;\n\tbackground: var(--pict-modal-header-bg);\n\tcolor: var(--pict-modal-header-fg);\n\tborder-bottom: 1px solid var(--pict-modal-header-border);\n\tborder-radius: var(--pict-modal-border-radius) var(--pict-modal-border-radius) 0 0;\n}\n\n.pict-modal-dialog-title\n{\n\tfont-size: var(--pict-modal-title-font-size);\n\tfont-weight: 600;\n}\n\n.pict-modal-dialog-close\n{\n\tbackground: none;\n\tborder: none;\n\tfont-size: 20px;\n\tcursor: pointer;\n\tcolor: var(--pict-modal-fg);\n\tpadding: 0 4px;\n\tline-height: 1;\n\topacity: 0.6;\n}\n\n.pict-modal-dialog-close:hover\n{\n\topacity: 1;\n}\n\n.pict-modal-dialog-body\n{\n\tpadding: 16px;\n\toverflow-y: auto;\n\tflex: 1;\n}\n\n.pict-modal-dialog-footer\n{\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tgap: 8px;\n\tpadding: 12px 16px;\n\tborder-top: 1px solid var(--pict-modal-border);\n}\n\n/* Buttons */\n.pict-modal-btn\n{\n\tpadding: 8px 16px;\n\tborder: none;\n\tborder-radius: var(--pict-modal-btn-border-radius);\n\tfont-family: var(--pict-modal-font-family);\n\tfont-size: var(--pict-modal-font-size);\n\tcursor: pointer;\n\tbackground: var(--pict-modal-btn-bg);\n\tcolor: var(--pict-modal-btn-fg);\n\ttransition: background var(--pict-modal-transition-duration) ease;\n}\n\n.pict-modal-btn:hover\n{\n\tbackground: var(--pict-modal-btn-hover-bg);\n}\n\n.pict-modal-btn:disabled\n{\n\topacity: 0.5;\n\tcursor: not-allowed;\n}\n\n.pict-modal-btn--primary\n{\n\tbackground: var(--pict-modal-btn-primary-bg);\n\tcolor: var(--pict-modal-btn-primary-fg);\n}\n\n.pict-modal-btn--primary:hover\n{\n\tbackground: var(--pict-modal-btn-primary-hover-bg);\n}\n\n.pict-modal-btn--danger\n{\n\tbackground: var(--pict-modal-btn-danger-bg);\n\tcolor: var(--pict-modal-btn-danger-fg);\n}\n\n.pict-modal-btn--danger:hover\n{\n\tbackground: var(--pict-modal-btn-danger-hover-bg);\n}\n\n/* Double confirm input */\n.pict-modal-confirm-input\n{\n\twidth: 100%;\n\tpadding: 8px 12px;\n\tmargin-top: 12px;\n\tborder: 1px solid var(--pict-modal-border);\n\tborder-radius: var(--pict-modal-btn-border-radius);\n\tfont-family: var(--pict-modal-font-family);\n\tfont-size: var(--pict-modal-font-size);\n\tbox-sizing: border-box;\n}\n\n.pict-modal-confirm-input:focus\n{\n\toutline: 2px solid var(--pict-modal-btn-primary-bg);\n\toutline-offset: -1px;\n}\n\n.pict-modal-confirm-prompt\n{\n\tmargin-top: 12px;\n\tfont-size: 13px;\n\tcolor: var(--pict-modal-fg);\n\topacity: 0.7;\n}\n\n/* Toast container */\n.pict-modal-toast-container\n{\n\tposition: fixed;\n\tz-index: 1030;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n\tpointer-events: none;\n\tmax-width: 400px;\n}\n\n.pict-modal-toast-container--top-right\n{\n\ttop: 16px;\n\tright: 16px;\n}\n\n.pict-modal-toast-container--top-left\n{\n\ttop: 16px;\n\tleft: 16px;\n}\n\n.pict-modal-toast-container--bottom-right\n{\n\tbottom: 16px;\n\tright: 16px;\n}\n\n.pict-modal-toast-container--bottom-left\n{\n\tbottom: 16px;\n\tleft: 16px;\n}\n\n.pict-modal-toast-container--top-center\n{\n\ttop: 16px;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n}\n\n.pict-modal-toast-container--bottom-center\n{\n\tbottom: 16px;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n}\n\n/* Toast */\n.pict-modal-toast\n{\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 10px;\n\tpadding: 12px 16px;\n\tborder-radius: var(--pict-modal-toast-border-radius);\n\tbox-shadow: var(--pict-modal-toast-shadow);\n\tfont-family: var(--pict-modal-font-family);\n\tfont-size: var(--pict-modal-font-size);\n\tbackground: var(--pict-modal-toast-bg);\n\tcolor: var(--pict-modal-toast-fg);\n\tpointer-events: auto;\n\topacity: 0;\n\ttransform: translateX(100%);\n\ttransition: opacity var(--pict-modal-transition-duration) ease,\n\t transform var(--pict-modal-transition-duration) ease;\n}\n\n.pict-modal-toast.pict-modal-visible\n{\n\topacity: 1;\n\ttransform: translateX(0);\n}\n\n.pict-modal-toast.pict-modal-toast-exit\n{\n\topacity: 0;\n\ttransform: translateX(100%);\n}\n\n.pict-modal-toast--info\n{\n\tbackground: var(--pict-modal-toast-info-bg);\n}\n\n.pict-modal-toast--success\n{\n\tbackground: var(--pict-modal-toast-success-bg);\n}\n\n.pict-modal-toast--warning\n{\n\tbackground: var(--pict-modal-toast-warning-bg);\n}\n\n.pict-modal-toast--error\n{\n\tbackground: var(--pict-modal-toast-error-bg);\n}\n\n.pict-modal-toast-message\n{\n\tflex: 1;\n}\n\n.pict-modal-toast-dismiss\n{\n\tbackground: none;\n\tborder: none;\n\tcolor: inherit;\n\tfont-size: 18px;\n\tcursor: pointer;\n\tpadding: 0 2px;\n\tline-height: 1;\n\topacity: 0.7;\n}\n\n.pict-modal-toast-dismiss:hover\n{\n\topacity: 1;\n}\n\n/* Tooltip */\n.pict-modal-tooltip\n{\n\tposition: fixed;\n\tz-index: 1020;\n\tpadding: 6px 10px;\n\tborder-radius: var(--pict-modal-tooltip-border-radius);\n\tbox-shadow: var(--pict-modal-tooltip-shadow);\n\tbackground: var(--pict-modal-tooltip-bg);\n\tcolor: var(--pict-modal-tooltip-fg);\n\tfont-family: var(--pict-modal-font-family);\n\tfont-size: 13px;\n\tpointer-events: none;\n\topacity: 0;\n\ttransition: opacity var(--pict-modal-transition-duration) ease;\n\twhite-space: normal;\n\tword-wrap: break-word;\n}\n\n.pict-modal-tooltip.pict-modal-tooltip-interactive\n{\n\tpointer-events: auto;\n}\n\n.pict-modal-tooltip.pict-modal-visible\n{\n\topacity: 1;\n}\n\n.pict-modal-tooltip-arrow\n{\n\tposition: absolute;\n\twidth: 8px;\n\theight: 8px;\n\tbackground: var(--pict-modal-tooltip-bg);\n\ttransform: rotate(45deg);\n}\n\n.pict-modal-tooltip--top .pict-modal-tooltip-arrow\n{\n\tbottom: -4px;\n\tleft: 50%;\n\tmargin-left: -4px;\n}\n\n.pict-modal-tooltip--bottom .pict-modal-tooltip-arrow\n{\n\ttop: -4px;\n\tleft: 50%;\n\tmargin-left: -4px;\n}\n\n.pict-modal-tooltip--left .pict-modal-tooltip-arrow\n{\n\tright: -4px;\n\ttop: 50%;\n\tmargin-top: -4px;\n}\n\n.pict-modal-tooltip--right .pict-modal-tooltip-arrow\n{\n\tleft: -4px;\n\ttop: 50%;\n\tmargin-top: -4px;\n}\n\n/* ── Dropdown ─────────────────────────────────────────────────────────\n Anchor-positioned menu (no overlay). Used for nav menus and\n \"split button\" addenda — see Pict-Modal-Dropdown.js.\n*/\n.pict-modal-dropdown\n{\n\tposition: fixed;\n\tz-index: 1025;\n\tmin-width: 160px;\n\tmax-width: 360px;\n\tmax-height: 60vh;\n\toverflow-y: auto;\n\tbackground: var(--pict-modal-dropdown-bg);\n\tcolor: var(--pict-modal-dropdown-fg);\n\tborder: 1px solid var(--pict-modal-dropdown-border);\n\tborder-radius: var(--pict-modal-dropdown-border-radius);\n\tbox-shadow: var(--pict-modal-dropdown-shadow);\n\tfont-family: var(--pict-modal-font-family);\n\tfont-size: var(--pict-modal-font-size);\n\tpadding: 4px 0;\n\topacity: 0;\n\ttransform: translateY(-4px);\n\ttransition: opacity var(--pict-modal-transition-duration) ease,\n\t transform var(--pict-modal-transition-duration) ease;\n}\n\n.pict-modal-dropdown.pict-modal-dropdown--above { transform: translateY(4px); }\n\n.pict-modal-dropdown.pict-modal-visible\n{\n\topacity: 1;\n\ttransform: translateY(0);\n}\n\n.pict-modal-dropdown-item\n{\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tpadding: 7px 14px;\n\tcursor: pointer;\n\tuser-select: none;\n\tcolor: inherit;\n\toutline: none;\n}\n\n.pict-modal-dropdown-item:hover,\n.pict-modal-dropdown-item:focus\n{\n\tbackground: var(--pict-modal-dropdown-item-hover-bg);\n\tcolor: var(--pict-modal-dropdown-item-hover-fg);\n}\n\n.pict-modal-dropdown-item--disabled\n{\n\tcursor: not-allowed;\n\tcolor: var(--pict-modal-dropdown-item-disabled-fg);\n}\n\n.pict-modal-dropdown-item--disabled:hover,\n.pict-modal-dropdown-item--disabled:focus\n{\n\tbackground: transparent;\n\tcolor: var(--pict-modal-dropdown-item-disabled-fg);\n}\n\n.pict-modal-dropdown-item--primary { color: var(--pict-modal-dropdown-primary-fg); }\n.pict-modal-dropdown-item--danger { color: var(--pict-modal-dropdown-danger-fg); }\n\n.pict-modal-dropdown-item-icon\n{\n\tflex: 0 0 auto;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 16px;\n\theight: 16px;\n}\n\n.pict-modal-dropdown-item-icon svg { width: 100%; height: 100%; display: block; }\n\n.pict-modal-dropdown-item-label { flex: 1 1 auto; min-width: 0; }\n\n.pict-modal-dropdown-item-hint\n{\n\tflex: 0 0 auto;\n\tfont-size: 11px;\n\topacity: 0.6;\n\tmargin-left: 12px;\n}\n\n.pict-modal-dropdown-separator\n{\n\theight: 1px;\n\tbackground: var(--pict-modal-dropdown-separator);\n\tmargin: 4px 0;\n}\n\n.pict-modal-dropdown-header\n{\n\tpadding: 6px 14px 2px;\n\tfont-size: 11px;\n\tfont-weight: 600;\n\ttext-transform: uppercase;\n\tletter-spacing: 0.04em;\n\tcolor: var(--pict-modal-dropdown-header-fg);\n}\n\n/* ── Resizable / Collapsible Panels ──────────────── */\n.pict-panel\n{\n\tposition: relative;\n\ttransition: width 0.2s ease;\n\tflex-shrink: 0;\n\toverflow: visible;\n}\n.pict-panel-collapsed\n{\n\twidth: 0 !important;\n\tmin-width: 0 !important;\n\toverflow: visible;\n}\n.pict-panel-collapsed > *:not(.pict-panel-edge)\n{\n\tdisplay: none;\n}\n\n/* Edge container — zero-width flex sibling of the panel.\n Sits next to the panel in the flex layout; children\n use absolute positioning to overlap the panel boundary. */\n.pict-panel-edge\n{\n\tposition: relative;\n\twidth: 0;\n\tflex-shrink: 0;\n\tz-index: 50;\n\toverflow: visible;\n}\n\n/* Resize handle — thin strip on the panel boundary */\n.pict-panel-resize\n{\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\twidth: 4px;\n\tcursor: col-resize;\n\tbackground: transparent;\n\ttransition: background 0.15s, width 0.15s;\n}\n.pict-panel-edge-right .pict-panel-resize\n{\n\tright: 0;\n\tborder-right: 1px solid var(--pict-panel-border, #DDD6CA);\n}\n.pict-panel-edge-left .pict-panel-resize\n{\n\tleft: 0;\n\tborder-left: 1px solid var(--pict-panel-border, #DDD6CA);\n}\n.pict-panel-resize:hover,\n.pict-panel-edge:hover .pict-panel-resize\n{\n\twidth: 5px;\n\tbackground: var(--pict-panel-accent, #2E7D74);\n\topacity: 0.5;\n}\n.pict-panel-resize.dragging\n{\n\twidth: 5px;\n\tbackground: var(--pict-panel-accent, #2E7D74);\n\topacity: 1;\n\ttransition: none;\n}\n.pict-panel-edge-collapsed .pict-panel-resize\n{\n\tdisplay: none;\n}\n\n/* Collapse tab — tucked sliver at rest, slides out on hover */\n.pict-panel-tab\n{\n\tposition: absolute;\n\ttop: 8px;\n\twidth: 8px;\n\theight: 24px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\toverflow: hidden;\n\tbackground: var(--pict-panel-border, #DDD6CA);\n\tborder: 1px solid var(--pict-panel-border, #DDD6CA);\n\tcursor: pointer;\n\tcolor: var(--pict-panel-fg, #8A7F72);\n\tfont-size: 10px;\n\tline-height: 1;\n\topacity: 0.5;\n\ttransition: opacity 0.25s, width 0.2s ease, height 0.2s ease, left 0.2s ease, right 0.2s ease, background 0.2s;\n\tz-index: 51;\n}\n.pict-panel-edge:hover .pict-panel-tab,\n.pict-panel-tab:hover\n{\n\twidth: 20px;\n\theight: 32px;\n\topacity: 1;\n\toverflow: visible;\n\tbackground: var(--pict-panel-bg, #FAF8F4);\n}\n/* Right panel: tab to the left of the edge */\n.pict-panel-edge-right .pict-panel-tab\n{\n\tright: 0;\n\tborder-right: none;\n\tborder-radius: 4px 0 0 4px;\n}\n.pict-panel-edge-right:hover .pict-panel-tab,\n.pict-panel-edge-right .pict-panel-tab:hover\n{\n\tright: 0;\n}\n/* Left panel: tab to the right of the edge */\n.pict-panel-edge-left .pict-panel-tab\n{\n\tleft: 0;\n\tborder-left: none;\n\tborder-radius: 0 4px 4px 0;\n}\n.pict-panel-edge-left:hover .pict-panel-tab,\n.pict-panel-edge-left .pict-panel-tab:hover\n{\n\tleft: 0;\n}\n/* When collapsed — more visible */\n.pict-panel-edge-collapsed .pict-panel-tab\n{\n\twidth: 10px;\n\theight: 28px;\n\topacity: 0.6;\n}\n.pict-panel-edge-collapsed .pict-panel-tab:hover,\n.pict-panel-edge-collapsed:hover .pict-panel-tab\n{\n\twidth: 20px;\n\theight: 32px;\n\topacity: 1;\n\toverflow: visible;\n\tbackground: var(--pict-panel-bg, #FAF8F4);\n}\n\n/* ───────────────────────────────────────────────────────────────────\n * Pict-Modal-Shell — viewport-managing layout for top / right /\n * bottom / left panels around a center.\n * ───────────────────────────────────────────────────────────────── */\n\n.pict-modal-shell-host { display: block; height: 100%; min-height: 0; }\n.pict-modal-shell\n{\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: 100%;\n\theight: 100%;\n\tmin-height: 0;\n\tposition: relative;\n\tcolor: var(--pict-modal-fg, var(--theme-color-text-primary, #1a1a1a));\n\tbackground: var(--theme-color-background-primary, transparent);\n}\n.pict-modal-shell-row { display: flex; min-width: 0; min-height: 0; }\n/* \"First added = at the edge\" convention is held by reversing the\n flex-direction on the bottom row + right side. That way, for ALL\n four sides, calling addPanel() N times stacks panel #1 against\n the viewport edge, panel #2 just inside it, panel #3 further in,\n and so on. Without these reverses, top + left worked that way but\n bottom + right inverted (first-added at content side, last-added\n at edge), which surprised callers. */\n.pict-modal-shell-row-top { flex: 0 0 auto; flex-direction: column; }\n.pict-modal-shell-row-bottom { flex: 0 0 auto; flex-direction: column-reverse; }\n.pict-modal-shell-row-middle\n{\n\tflex: 1 1 0;\n\tflex-direction: row;\n\tmin-height: 0;\n\tposition: relative;\n}\n.pict-modal-shell-side\n{\n\tdisplay: flex;\n\tflex: 0 0 auto;\n\tmin-height: 0;\n}\n.pict-modal-shell-side-left { flex-direction: row; }\n.pict-modal-shell-side-right { flex-direction: row-reverse; }\n.pict-modal-shell-center\n{\n\tflex: 1 1 0;\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: auto;\n\tposition: relative;\n}\n.pict-modal-shell-center-content\n{\n\tmin-height: 100%;\n}\n/* Center column gains this class when at least one Scope:'center'\n panel is added. The center stops scrolling internally — that job\n moves to the content destination — and switches to a vertical flex\n so the destination and any inner panels stack cleanly. */\n.pict-modal-shell-center.pict-modal-shell-center-with-inner-panel\n{\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n}\n.pict-modal-shell-center.pict-modal-shell-center-with-inner-panel > .pict-modal-shell-center-content\n{\n\tflex: 1 1 0;\n\tmin-height: 0;\n\toverflow: auto;\n}\n.pict-modal-shell-center.pict-modal-shell-center-with-inner-panel > .pict-modal-shell-panel\n{\n\tflex: 0 0 auto;\n\twidth: 100%;\n}\n\n/* Panels — base */\n.pict-modal-shell-panel\n{\n\t/* How far the collapse-tab's panel-bg \"merge bar\" extends INTO\n\t the panel past the tab's geometric edge. Painted via box-shadow\n\t on the tab (no DOM impact), it masks any 1px theme border on an\n\t inner element, content padding offset, or resize-handle hover\n\t bleed in the strip between the tab's panel-facing edge and the\n\t first real pixel of panel content. Consumers can bump this for\n\t themes with thicker (2+px) inner borders. */\n\t--pict-modal-collapse-tab-merge: 2px;\n\tposition: relative;\n\tdisplay: flex;\n\tflex-direction: column;\n\tbox-sizing: border-box;\n\tbackground: var(--pict-modal-bg, var(--theme-color-background-panel, #ffffff));\n\tcolor: inherit;\n\tmin-width: 0;\n\tmin-height: 0;\n\ttransition: width 140ms ease, height 140ms ease;\n}\n.pict-modal-shell-panel-content\n{\n\tflex: 1 1 auto;\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: auto;\n}\n/* Fixed-mode panels are pure chrome (topbars, status rows). Their\n content should fit the configured Size exactly — never scroll. The\n 1px border that .pict-modal-shell-panel-mode-fixed adds on the\n inner edge shaves 1px off the content's available height, which\n then triggers a sliver-scrollbar on any inner widget with\n min-height matching the panel Size. overflow:hidden here suppresses\n that without affecting resizable/collapsible panels (sidebars,\n drawers) where scrollable content is the whole point. */\n.pict-modal-shell-panel-mode-fixed > .pict-modal-shell-panel-content\n{\n\toverflow: hidden;\n}\n.pict-modal-shell-panel-content-inner\n{\n\tmin-height: 100%;\n}\n/* Panel boundary — fixed-mode panels get a hairline border for explicit\n demarcation. Collapsible / resizable panels DROP the boundary border\n (background contrast separates them from the center anyway) so the\n collapse tab can pull out cleanly without a hairline cutting across\n it. The host stylesheet still gets full control via the panel's own\n background. */\n.pict-modal-shell-panel-mode-fixed.pict-modal-shell-panel-top { border-bottom: 1px solid var(--pict-modal-border, var(--theme-color-border-default, #e0e0e0)); }\n.pict-modal-shell-panel-mode-fixed.pict-modal-shell-panel-bottom { border-top: 1px solid var(--pict-modal-border, var(--theme-color-border-default, #e0e0e0)); }\n.pict-modal-shell-panel-mode-fixed.pict-modal-shell-panel-left { border-right: 1px solid var(--pict-modal-border, var(--theme-color-border-default, #e0e0e0)); }\n.pict-modal-shell-panel-mode-fixed.pict-modal-shell-panel-right { border-left: 1px solid var(--pict-modal-border, var(--theme-color-border-default, #e0e0e0)); }\n\n/* Resize handle — absolute on the inner edge of each panel. */\n.pict-modal-shell-panel-resize-handle\n{\n\tposition: absolute;\n\tbackground: transparent;\n\tz-index: 5;\n\ttransition: background-color 120ms ease;\n}\n/* Resize handle hover — use the active brand's mode-aware primary\n color (set by pict-section-theme's Brand provider as\n --brand-color-primary-mode) so the resize affordance picks up the\n app's wordmark color. Falls back to the theme's brand-primary\n token if no brand is registered. */\n.pict-modal-shell-panel-resize-handle:hover\n{\n\tbackground: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n\topacity: 0.4;\n}\n.pict-modal-shell-panel-left .pict-modal-shell-panel-resize-handle { right: -3px; top: 0; bottom: 0; width: 6px; cursor: col-resize; }\n.pict-modal-shell-panel-right .pict-modal-shell-panel-resize-handle { left: -3px; top: 0; bottom: 0; width: 6px; cursor: col-resize; }\n.pict-modal-shell-panel-top .pict-modal-shell-panel-resize-handle { bottom:-3px; left: 0; right: 0; height: 6px; cursor: row-resize; }\n.pict-modal-shell-panel-bottom .pict-modal-shell-panel-resize-handle { top: -3px; left: 0; right: 0; height: 6px; cursor: row-resize; }\n\n/* Collapse tab — slim sliver flush on the panel's OUTER boundary\n (where the resize handle sits), modelled on retold-content-system's\n sidebar tab. At rest it's a 6×28 px sliver; hover expands to\n 18×36 px without overlapping the panel's own content. The tab is\n positioned with its center on the boundary so half pokes into the\n adjacent area — the only place we can safely take over without\n stepping on app UI inside the panel. Title text only renders in the\n collapsed state where there's room for it. */\n.pict-modal-shell-panel-collapse-tab\n{\n\tposition: absolute;\n\tdisplay: flex; /* not inline-flex — avoids baseline alignment quirks */\n\talign-items: center;\n\tjustify-content: center;\n\toverflow: hidden;\n\tborder: 1px solid var(--pict-modal-border, var(--theme-color-border-default, #d0d7de));\n\tbackground: var(--pict-modal-bg, var(--theme-color-background-panel, #ffffff));\n\tcolor: var(--theme-color-text-muted, #6b7280);\n\tfont: inherit;\n\tfont-size: 10px;\n\tletter-spacing: 0.4px;\n\ttext-transform: uppercase;\n\tcursor: pointer;\n\tz-index: 50;\n\topacity: 0.55;\n\tpadding: 0;\n\tbox-sizing: border-box;\n\tline-height: 0; /* keep child boxes from inflating around the rotated chevron */\n\t/* Geometry (width/height/right/left) is intentionally NOT animated.\n\t Sliding the tab's outer edge inward on hover-out makes it look like\n\t the tab is \"sliding into\" the panel content — weird visual.\n\t Snapping the size change instead, and animating only the appearance\n\t (opacity/color/shadow), gives a clean fade-in/out with no boundary\n\t weirdness. */\n\ttransition: opacity 160ms ease,\n\t background-color 160ms ease, color 160ms ease,\n\t border-color 160ms ease, box-shadow 160ms ease;\n}\n/* Hover state pulls accent color from the active brand (mode-aware,\n so it's legible in both light + dark) with theme brand-primary as\n fallback. The whole point of brand colors is that they show up\n across the app's chrome. */\n.pict-modal-shell-panel-collapse-tab:hover,\n.pict-modal-shell-panel:hover > .pict-modal-shell-panel-collapse-tab\n{\n\topacity: 1;\n\tcolor: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n\tborder-color: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n}\n/* Drop shadow casts AWAY from the panel so the tab feels pulled out\n (extension of the panel) rather than floating across the boundary.\n The tab itself is now positioned fully OUTSIDE the panel boundary\n (see the per-side rules below), so we don't need a merge-bar shadow\n to mask any in-panel overlap — only the drop shadow remains. */\n.pict-modal-shell-panel-left:hover > .pict-modal-shell-panel-collapse-tab,\n.pict-modal-shell-panel-left > .pict-modal-shell-panel-collapse-tab:hover\n{\n\tbox-shadow: 3px 0 6px -2px rgba(0, 0, 0, 0.18);\n}\n.pict-modal-shell-panel-right:hover > .pict-modal-shell-panel-collapse-tab,\n.pict-modal-shell-panel-right > .pict-modal-shell-panel-collapse-tab:hover\n{\n\tbox-shadow: -3px 0 6px -2px rgba(0, 0, 0, 0.18);\n}\n.pict-modal-shell-panel-top:hover > .pict-modal-shell-panel-collapse-tab,\n.pict-modal-shell-panel-top > .pict-modal-shell-panel-collapse-tab:hover\n{\n\tbox-shadow: 0 3px 6px -2px rgba(0, 0, 0, 0.18);\n}\n.pict-modal-shell-panel-bottom:hover > .pict-modal-shell-panel-collapse-tab,\n.pict-modal-shell-panel-bottom > .pict-modal-shell-panel-collapse-tab:hover\n{\n\tbox-shadow: 0 -3px 6px -2px rgba(0, 0, 0, 0.18);\n}\n\n/* Per-side base positioning — the tab lives entirely OUTSIDE the\n panel's outer boundary. Its panel-facing edge touches the boundary\n (offset = -tabThickness) and the rest of the tab pokes out into the\n adjacent area (center / sibling panel). Border on the panel-facing\n edge is dropped so the tab looks attached to the panel rather than\n floating beside it.\n Why fully-outside? Earlier iterations had the tab straddling the\n boundary (1px inside + 4px outside) with a panel-bg-colored merge-bar\n masking the in-panel half — that worked geometrically but visually\n read as \"tab pinned into the panel,\" and any rendering inside the\n panel (especially custom borders or hover bleeds) could clip against\n the in-panel half. Fully-external positioning eliminates the overlap\n class of bugs and lets the tab live entirely in the adjacent area\n where there's no app content to step on. */\n.pict-modal-shell-panel-left > .pict-modal-shell-panel-collapse-tab\n{\n\tright: -6px; top: 14px; width: 6px; height: 28px;\n\tborder-radius: 0 4px 4px 0;\n\tborder-left: 0;\n}\n.pict-modal-shell-panel-right > .pict-modal-shell-panel-collapse-tab\n{\n\tleft: -6px; top: 14px; width: 6px; height: 28px;\n\tborder-radius: 4px 0 0 4px;\n\tborder-right: 0;\n}\n.pict-modal-shell-panel-top > .pict-modal-shell-panel-collapse-tab\n{\n\tbottom: -6px; right: 14px; width: 28px; height: 6px;\n\tborder-radius: 0 0 4px 4px;\n\tborder-top: 0;\n}\n.pict-modal-shell-panel-bottom > .pict-modal-shell-panel-collapse-tab\n{\n\ttop: -6px; right: 14px; width: 28px; height: 6px;\n\tborder-radius: 4px 4px 0 0;\n\tborder-bottom: 0;\n}\n\n/* Hover: tab grows OUTWARD into the adjacent area. The panel-facing\n edge stays glued to the boundary (offset = -tabThickness), so the\n tab still looks attached on hover — only its outer dimension grows.\n For side panels the height also grows (28 → 36) downward; for top\n /bottom panels the width grows (28 → 36) — see the next block for\n the perpendicular-axis offsets. */\n.pict-modal-shell-panel-left:hover > .pict-modal-shell-panel-collapse-tab,\n.pict-modal-shell-panel-left > .pict-modal-shell-panel-collapse-tab:hover\n{\n\twidth: 18px; height: 36px; right: -18px;\n}\n.pict-modal-shell-panel-right:hover > .pict-modal-shell-panel-collapse-tab,\n.pict-modal-shell-panel-right > .pict-modal-shell-panel-collapse-tab:hover\n{\n\twidth: 18px; height: 36px; left: -18px;\n}\n.pict-modal-shell-panel-top:hover > .pict-modal-shell-panel-collapse-tab,\n.pict-modal-shell-panel-top > .pict-modal-shell-panel-collapse-tab:hover\n{\n\twidth: 36px; height: 18px; bottom: -18px;\n}\n.pict-modal-shell-panel-bottom:hover > .pict-modal-shell-panel-collapse-tab,\n.pict-modal-shell-panel-bottom > .pict-modal-shell-panel-collapse-tab:hover\n{\n\twidth: 36px; height: 18px; top: -18px;\n}\n\n.pict-modal-shell-panel-collapse-tab-title { display: none; white-space: nowrap; }\n\n/* Auto-generated chevron glyph inside the tab — only visible once the\n tab is wide / tall enough to show it (i.e. hover state, or when the\n panel is collapsed). Direction follows side + state.\n Sized 5×5 (down from 6) so even with rotation the visual stays\n well clear of the tab's overflow:hidden bounds at 18×36 hover and\n the 24px collapsed tab strip width. flex-shrink:0 ensures the\n pseudo never collapses to zero in tight tab dimensions. */\n.pict-modal-shell-panel-collapse-tab::before\n{\n\tcontent: '';\n\tdisplay: block;\n\twidth: 5px; height: 5px;\n\tflex-shrink: 0;\n\topacity: 0;\n\tborder-right: 1.5px solid currentColor;\n\tborder-bottom: 1.5px solid currentColor;\n\ttransform: rotate(135deg);\n\ttransform-origin: center center;\n\ttransition: opacity 160ms ease, transform 160ms ease;\n}\n.pict-modal-shell-panel:hover > .pict-modal-shell-panel-collapse-tab::before,\n.pict-modal-shell-panel-collapse-tab:hover::before,\n.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab::before\n{\n\topacity: 1;\n}\n.pict-modal-shell-panel-right > .pict-modal-shell-panel-collapse-tab::before { transform: rotate(-45deg); }\n.pict-modal-shell-panel-top > .pict-modal-shell-panel-collapse-tab::before { transform: rotate(-135deg); }\n.pict-modal-shell-panel-bottom > .pict-modal-shell-panel-collapse-tab::before { transform: rotate(45deg); }\n.pict-modal-shell-panel-left.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab::before { transform: rotate(-45deg); }\n.pict-modal-shell-panel-right.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab::before { transform: rotate(135deg); }\n.pict-modal-shell-panel-top.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab::before { transform: rotate(45deg); }\n.pict-modal-shell-panel-bottom.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab::before { transform: rotate(-135deg); }\n\n/* Collapsed state — content disappears, only the collapse tab remains. */\n.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-content\n{\n\tdisplay: none;\n}\n.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-resize-handle\n{\n\tdisplay: none;\n}\n.pict-modal-shell-panel-left.pict-modal-shell-panel-collapsed,\n.pict-modal-shell-panel-right.pict-modal-shell-panel-collapsed\n{\n\t/* When collapsed, side panels rotate the title for vertical reading. */\n\toverflow: hidden;\n}\n/* When collapsed: the entire panel becomes the tab strip — full width\n for sides, full height for top/bottom — with the title visible\n vertically (sides) or horizontally (top/bottom). The little sliver\n tab on the boundary disappears (we don't need it anymore — clicking\n anywhere on the panel toggles it back open). */\n.pict-modal-shell-panel-left.pict-modal-shell-panel-collapsed,\n.pict-modal-shell-panel-right.pict-modal-shell-panel-collapsed,\n.pict-modal-shell-panel-top.pict-modal-shell-panel-collapsed,\n.pict-modal-shell-panel-bottom.pict-modal-shell-panel-collapsed\n{\n\toverflow: hidden;\n}\n.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab\n{\n\t/* Promote the tab to FILL the collapsed panel (not just hug its\n\t content) so the centered chevron + title group sits in the middle\n\t of the panel. Without explicit width/height: 100%, the position:\n\t absolute element shrinks to its natural content size and the\n\t group ends up flush at the top of the panel — where the chevron\n\t gets clipped by the topbar. */\n\tposition: absolute !important;\n\ttop: 0 !important; right: 0 !important; bottom: 0 !important; left: 0 !important;\n\twidth: 100% !important;\n\theight: 100% !important;\n\tborder: 0;\n\tborder-radius: 0;\n\tbackground: transparent;\n\topacity: 0.85;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 8px;\n\tpadding: 12px 4px; /* keeps chevron + title clear of edges */\n\tbox-shadow: none;\n\tcolor: var(--theme-color-text-muted, #6b7280);\n\tbox-sizing: border-box;\n\toverflow: hidden;\n}\n.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab:hover\n{\n\tbackground: var(--theme-color-background-hover, var(--pict-modal-bg, #fff));\n\tcolor: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n\tbox-shadow: none;\n}\n/* Side panels (collapsed): rotate the title for vertical reading. */\n.pict-modal-shell-panel-left.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab,\n.pict-modal-shell-panel-right.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab\n{\n\twriting-mode: vertical-rl;\n\ttext-orientation: mixed;\n}\n.pict-modal-shell-panel-collapsed .pict-modal-shell-panel-collapse-tab-title\n{\n\tdisplay: inline;\n}\n\n/* Hidden panels — when Hidden:true is passed to addPanel, the collapsed\n state has zero footprint: no collapse tab (the tab is never built),\n the panel root is display:none, and the resize handle vanishes. The\n only path to the open state is a programmatic expand()/toggle() from\n somewhere else in the app (e.g. a topbar gear button). When expanded,\n the panel renders normally — so resize/drag handles continue to work\n while the panel is open. */\n.pict-modal-shell-panel-hidden.pict-modal-shell-panel-collapsed\n{\n\tdisplay: none !important;\n}\n\n/* Overlay panels — float over the middle row instead of taking layout\n space. The overlay layer is positioned absolutely inside the middle\n row; individual overlay panels stack with positive z-index. */\n.pict-modal-shell-overlay-layer\n{\n\tposition: absolute;\n\tinset: 0;\n\tpointer-events: none;\n\tz-index: 10;\n}\n.pict-modal-shell-overlay-layer .pict-modal-shell-panel\n{\n\tpointer-events: auto;\n\tposition: absolute;\n\tbox-shadow: 0 4px 24px rgba(0, 0, 0, 0.18);\n}\n.pict-modal-shell-overlay-layer .pict-modal-shell-panel-left { left: 0; top: 0; bottom: 0; }\n.pict-modal-shell-overlay-layer .pict-modal-shell-panel-right { right: 0; top: 0; bottom: 0; }\n.pict-modal-shell-overlay-layer .pict-modal-shell-panel-top { top: 0; left: 0; right: 0; }\n.pict-modal-shell-overlay-layer .pict-modal-shell-panel-bottom { bottom: 0; left: 0; right: 0; }\n\n/* ─────────────────────────────────────────────────────────────────\n Responsive drawer mode — .pict-modal-shell-drawer-active toggles\n onto the middle row when any panel with ResponsiveDrawer crosses\n below its breakpoint. Flips the row's flex-direction from row to\n column, stacking side panels above the center and stretching them\n to full width. Each opted-in panel itself gets the\n .pict-modal-shell-panel-drawer class so per-panel rules below\n target only the drawer-mode panels (right + non-drawer panels in\n the same row are unaffected). The drawer height is read from a\n per-panel --pict-modal-drawer-height CSS variable (default\n 33vh, set in JS from the DrawerHeight option).\n ───────────────────────────────────────────────────────────────── */\n.pict-modal-shell-row-middle.pict-modal-shell-drawer-active\n{\n\tflex-direction: column;\n\t/* The drawer tab lives outside the drawer's bottom edge — ancestor\n\t chain MUST allow it to escape clip. */\n\toverflow: visible;\n}\n.pict-modal-shell-row-middle.pict-modal-shell-drawer-active .pict-modal-shell-side\n{\n\t/* Side stacks stretch full-width and lay out their panels as a\n\t horizontal row of stacked drawers (so two drawers from the same\n\t side don't end up overlapping). overflow: visible so the\n\t per-panel tab can extend below the side stack into the workspace. */\n\twidth: 100% !important;\n\tflex-direction: column;\n\toverflow: visible;\n}\n/* The drawer-tagged panel itself: kill the inline width set by\n _applySize (we override with !important since the inline style has\n higher specificity than a class selector), then size by height\n from the CSS variable. Resize handle is hidden in drawer mode\n because horizontal dragging doesn't translate to vertical sizing\n and the user already has the collapse tab to dismiss / restore.\n\n padding-bottom reserves an 18px strip at the bottom of the panel\n for the tab. The tab sits INSIDE the drawer's footprint — never\n below it — so the workspace header below the drawer is never in\n the same vertical band as the tab. (Previously the tab hung\n below the drawer's bottom edge into the workspace's top padding;\n that made the tab visually compete with the workspace header,\n even when the tab box-model bounds technically cleared the\n header.) box-sizing: border-box so the padding eats from the\n 33vh, not adding to it. */\n.pict-modal-shell-panel-drawer\n{\n\twidth: 100% !important;\n\tmax-width: 100% !important;\n\theight: var(--pict-modal-drawer-height, 33vh);\n\ttransition: height 140ms ease;\n\tpadding-bottom: 18px;\n\tbox-sizing: border-box;\n\toverflow: visible !important;\n\t/* Clip the panel bg to its CONTENT area only — the 18px\n\t padding-bottom reserve (where the tab lives) becomes\n\t transparent, so the middle row's primary background shows\n\t through. Without this the reserve would render with the\n\t panel's chrome bg, creating a visible \"strip\" between the\n\t drawer content above and the workspace below — the tab would\n\t look like it's sitting on its own miscoloured band rather\n\t than at the seam between drawer and workspace. */\n\tbackground-clip: content-box;\n}\n.pict-modal-shell-panel-drawer.pict-modal-shell-panel-collapsed\n{\n\t/* Collapsed = \"just the tab strip is visible\". 18px matches the\n\t panel's tab reserve so the height is consistent across states.\n\t When this is 0 the tab would have nowhere to render and the\n\t user couldn't reopen the drawer. */\n\theight: 18px !important;\n\tpadding-bottom: 0 !important;\n\t/* Drop the panel's bg in collapsed state — without this the 18px\n\t strip shows the --pict-modal-bg (panel chrome) which doesn't\n\t match the workspace --theme-color-background-primary below it,\n\t creating a visible \"drawer band\" around the tab that breaks the\n\t illusion of the tab belonging to the workspace area. With\n\t transparent bg the middle row's primary background shows\n\t through, the strip blends with the workspace, and the tab pill\n\t reads as a free-floating handle. */\n\tbackground: transparent !important;\n}\n.pict-modal-shell-panel-drawer > .pict-modal-shell-panel-resize-handle\n{\n\tdisplay: none;\n}\n/* The drawer's collapse tab is a horizontal pill protruding from the\n bottom of the drawer (rather than the inner edge of a side panel).\n Override the side-panel positioning rules from above so the tab\n always sits at the drawer's bottom-center seam, in both expanded\n and collapsed states. The expand-from-zero affordance: when\n collapsed (height: 0), the tab still hangs below \"where the\n drawer would be\" — a small handle the user can click to pull\n the drawer back down. */\n.pict-modal-shell-panel-drawer > .pict-modal-shell-panel-collapse-tab,\n.pict-modal-shell-panel-drawer.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab\n{\n\tposition: absolute !important;\n\t/* Anchored to the panel's BOTTOM edge — the tab lives INSIDE the\n\t drawer's footprint (in the 18px reserve at the bottom), never\n\t below it into the workspace. This means the workspace below\n\t the drawer is never sharing a vertical band with the tab, so\n\t the workspace header doesn't optically compete with it.\n\t bottom: 4px aligns the tab's top edge exactly with the panel's\n\t CONTENT-AREA bottom (panel.height − padding-bottom 18px). With\n\t border-top: 0 on the tab, the seam between the drawer content\n\t above and the tab body is invisible — they share --pict-modal-bg\n\t and merge into one shape, the tab reading as a labelled\n\t extension of the drawer hanging downward. Collapsed state\n\t keeps the smaller offset (overridden below) because its panel\n\t has no padding-bottom, so the math doesn't apply. */\n\ttop: auto !important;\n\tbottom: 4px !important;\n\tleft: 50% !important;\n\tright: auto !important;\n\ttransform: translate(-50%, 0) !important;\n\twidth: 64px !important;\n\theight: 14px !important;\n\t/* CRITICAL: border-box + padding: 0 — the collapsed-state base\n\t rule inherits \"padding: 12px 4px\" (so the chevron clears the\n\t edges of a tab that fills a 24px-wide side strip). In drawer\n\t mode the tab is a 14px tall pill, NOT a strip-fill, so that\n\t 12px vertical padding would balloon the tab's outer height to\n\t ~38px and crash into the workspace header text. The chevron\n\t is centered via flex anyway. */\n\tbox-sizing: border-box !important;\n\tpadding: 0 !important;\n\t/* Rounded BOTTOM corners + no top border — the tab looks like a\n\t traditional drawer-handle/tab hanging from above. Its rounded\n\t bottom curves face the workspace (the \"open downward\" affordance\n\t for a top drawer). border-top: 0 lets the tab visually merge\n\t with whatever's directly above it inside the panel (sidebar\n\t content when expanded, the panel background when collapsed). */\n\tborder-radius: 0 0 8px 8px;\n\tborder: 1px solid var(--pict-modal-border, var(--theme-color-border-default, #cfd5dd));\n\tborder-top: 0;\n\tbackground: var(--pict-modal-bg, var(--theme-color-background-panel, #fff));\n\topacity: 0.95;\n\tz-index: 20;\n\t/* The default side-panel hover-grow values would yank the tab off\n\t to the wrong spot in drawer mode — neutralise. */\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n.pict-modal-shell-panel-drawer > .pict-modal-shell-panel-collapse-tab:hover,\n.pict-modal-shell-panel-drawer.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab:hover\n{\n\topacity: 1;\n\twidth: 96px !important;\n\t/* height stays at 14px — the tab is anchored with bottom, so any\n\t height growth would push the tab's TOP edge UPWARD past the\n\t space available above it. In EXPANDED state that crashes into\n\t the drawer content above; in COLLAPSED state it crashes into\n\t the topbar's brand stripes. Width-only growth (64 to 96, +50%)\n\t still gives the \"tab is reaching toward me\" affordance without\n\t the encroachment. */\n\tcolor: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n\tborder-color: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n\tbox-shadow: 0 3px 6px -2px rgba(0, 0, 0, 0.18);\n}\n/* Collapsed-state bottom-offset override. Expanded panels have an\n 18px padding-bottom reserve, and \"bottom: 4px\" anchors the tab's\n top edge exactly at the content-area boundary (so it merges\n visually with the drawer above). Collapsed panels have\n padding-bottom: 0 and a total height of 18px — \"bottom: 4px\"\n there would put the tab's top at the panel's actual top edge,\n crashing the (border-top: 0) tab into the topbar. The smaller\n \"bottom: 2px\" keeps the 14px tab vertically centered in the 18px\n strip with 2px margins on either side. */\n.pict-modal-shell-panel-drawer.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab\n{\n\tbottom: 2px !important;\n}\n/* Chevron inside the tab: point UP when expanded (the drawer\n collapses UP / out of view, so the arrow indicates \"click me to\n send the drawer up\"), DOWN when collapsed (the drawer expands DOWN\n into view). Rotations come from the existing top-panel chevron\n table: rotate(-135deg) → UP arrow, rotate(45deg) → DOWN arrow. */\n.pict-modal-shell-panel-drawer > .pict-modal-shell-panel-collapse-tab::before\n{\n\ttransform: rotate(-135deg) !important;\n}\n.pict-modal-shell-panel-drawer.pict-modal-shell-panel-collapsed > .pict-modal-shell-panel-collapse-tab::before\n{\n\ttransform: rotate(45deg) !important;\n}\n/* The collapse tab's existing title-text span is hidden when reduced\n to a pill — there's no horizontal room. The chevron alone reads\n correctly. */\n.pict-modal-shell-panel-drawer > .pict-modal-shell-panel-collapse-tab .pict-modal-shell-panel-collapse-tab-title,\n.pict-modal-shell-panel-drawer > .pict-modal-shell-panel-collapse-tab .pict-modal-shell-panel-collapse-tab-icon\n{\n\tdisplay: none;\n}\n\n/* Drag-active state — disable text selection + change cursor globally\n so resize feels solid even when the cursor briefly leaves the handle. */\n.pict-modal-shell-dragging-x, .pict-modal-shell-dragging-y { user-select: none; }\n.pict-modal-shell-dragging-x * { cursor: col-resize !important; }\n.pict-modal-shell-dragging-y * { cursor: row-resize !important; }\n\n/* Per-panel resize-active state — kills the panel's collapse/expand\n width/height transition for the duration of a drag. Without this,\n every pointermove starts a fresh 140 ms transition and the resize\n visibly lags behind the cursor (\"choppy\"). With it disabled the\n panel snaps to the new size on the same frame as the pointer, which\n feels native. */\n.pict-modal-shell-panel-resizing { transition: none !important; }\n.pict-modal-shell-panel-resizing > .pict-modal-shell-panel-resize-handle\n{\n\tbackground: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n\topacity: 0.5;\n}\n\n/* Panel popup-attention flash — fires when popup() is called on an\n already-open panel. Brief brand-colored inset glow so the user sees\n that their click landed even though the panel didn't change shape.\n Class is added by the shell, auto-removed after ~700 ms. */\n@keyframes pict-modal-shell-panel-flash\n{\n\t0% { box-shadow: inset 0 0 0 0 transparent; }\n\t30% { box-shadow: inset 0 0 0 3px var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb)); }\n\t100% { box-shadow: inset 0 0 0 0 transparent; }\n}\n.pict-modal-shell-panel-flash\n{\n\tanimation: pict-modal-shell-panel-flash 600ms ease-out;\n}\n"}},{}],27:[function(e,t,o){const r=e("pict-view"),i=e("./Pict-Modal-Overlay.js"),a=e("./Pict-Modal-Confirm.js"),n=e("./Pict-Modal-Window.js"),s=e("./Pict-Modal-Toast.js"),l=e("./Pict-Modal-Tooltip.js"),d=e("./Pict-Modal-Panel.js"),c=e("./Pict-Modal-Dropdown.js"),h=e("./Pict-Modal-Shell.js"),p=e("./Pict-Section-Modal-DefaultConfiguration.js");t.exports=class extends r{constructor(e,t,o){super(e,Object.assign({},p,t),o),this._activeModals=[],this._activeTooltips=[],this._activeToasts=[],this._idCounter=0,this._overlay=new i(this),this._confirm=new a(this),this._window=new n(this),this._toast=new s(this),this._tooltip=new l(this),this._panel=new d(this),this._dropdown=new c(this),this._shell=new h(this)}onBeforeInitialize(){return super.onBeforeInitialize(),"undefined"!=typeof document&&document.body&&(document.body.classList.contains("pict-modal-root")||document.body.classList.add("pict-modal-root")),super.onBeforeInitialize()}_nextId(){return this._idCounter++,this._idCounter}confirm(e,t){return this._confirm.confirm(e,t)}doubleConfirm(e,t){return this._confirm.doubleConfirm(e,t)}show(e){return this._window.show(e)}tooltip(e,t,o){return this._tooltip.tooltip(e,t,o)}richTooltip(e,t,o){return this._tooltip.richTooltip(e,t,o)}toast(e,t){return this._toast.toast(e,t)}dropdown(e,t){return this._dropdown.dropdown(e,t)}dismissDropdowns(){this._dropdown.dismissAll()}panel(e,t){return this._panel.create(e,t)}shell(e,t){return this._shell.shell(e,t)}dismissModals(){let e=this._activeModals.slice();for(let t=e.length-1;t>=0;t--)e[t].dismiss(null)}dismissTooltips(){this._tooltip.dismissAll()}dismissToasts(){this._toast.dismissAll()}dismissAll(){this.dismissModals(),this.dismissTooltips(),this.dismissToasts(),this.dismissDropdowns()}destroyPanels(){this._panel.destroyAll()}destroy(){if(this.dismissAll(),this.destroyPanels(),this._overlay.destroy(),this._toast.destroy(),"function"==typeof super.destroy)return super.destroy()}},t.exports.default_configuration=p},{"./Pict-Modal-Confirm.js":18,"./Pict-Modal-Dropdown.js":19,"./Pict-Modal-Overlay.js":20,"./Pict-Modal-Panel.js":21,"./Pict-Modal-Shell.js":22,"./Pict-Modal-Toast.js":23,"./Pict-Modal-Tooltip.js":24,"./Pict-Modal-Window.js":25,"./Pict-Section-Modal-DefaultConfiguration.js":26,"pict-view":89}],28:[function(e,t,o){const r=e("pict-provider"),i=e("pict-provider-theme"),a=e("./views/PictView-Theme-Picker.js"),n=e("./views/PictView-Theme-ModeToggle.js"),s=e("./views/PictView-Theme-ScaleSelect.js"),l=e("./views/PictView-Theme-Button.js"),d=e("./views/PictView-Theme-BrandStrip.js"),c=e("./views/PictView-Theme-Brand-Mark.js"),h=e("./views/PictView-Theme-TopBar.js"),p=e("./views/PictView-Theme-BottomBar.js"),m=e("./Theme-Persistence.js"),u=e("./Theme-Scale.js"),g=e("./Theme-Brand.js"),f=e("./themes/_catalog.js"),b={Picker:{lib:a,hash:"Theme-Picker"},ModeToggle:{lib:n,hash:"Theme-ModeToggle"},ScaleSelect:{lib:s,hash:"Theme-ScaleSelect"},Button:{lib:l,hash:"Theme-Button"},BrandStrip:{lib:d,hash:"Theme-BrandStrip"},BrandMark:{lib:c,hash:"Theme-Brand-Mark"},TopBar:{lib:h,hash:"Theme-TopBar"},BottomBar:{lib:p,hash:"Theme-BottomBar"}};function v(e){if(!e||!e.providers||!e.providers.Theme)return e&&e.log&&e.log.warn&&e.log.warn("pict-section-theme.registerCatalog: pict.providers.Theme not found — register the runtime first"),0;let t=e.providers.Theme,o=f.list(),r=0;for(let e=0;e<o.length;e++)t.registerTheme(o[e].Bundle)&&r++;return r}function y(e,t){if(!e||"function"!=typeof e.addProvider)throw new Error("pict-section-theme: requires a Pict instance");let o=t||{};if(!e.providers||!e.providers.Theme){let t=Object.assign({},i.default_configuration,o.ProviderOptions||{});e.addProvider("Theme",t,i)}!1!==o.RegisterCatalog&&v(e);let r=Array.isArray(o.Views)?o.Views:Object.keys(b);for(let t=0;t<r.length;t++){let i=b[r[t]];if(!i){e.log&&e.log.warn&&e.log.warn('pict-section-theme: unknown view name "'+r[t]+'" — skipped');continue}if(e.views&&e.views[i.hash])continue;let a=Object.assign({},i.lib.default_configuration,o.ViewOptions&&o.ViewOptions[r[t]]||{});e.addView(i.hash,a,i.lib)}let a=e.providers.Theme,n=!1!==o.Persistence,s=null,l=o.ApplyDefault||null,d=o.DefaultMode||null,c="number"==typeof o.DefaultScale?o.DefaultScale:null;if(n&&a){s=m.resolveKey(o.PersistenceKey);let e=m.load(s);e&&e.ThemeHash&&"function"==typeof a.getTheme&&a.getTheme(e.ThemeHash)?(l=e.ThemeHash,e.Mode&&(d=e.Mode),e.Scale&&(c=e.Scale)):e&&e.Scale&&(c=e.Scale);let t=function(){let e="function"==typeof a.getActiveTheme?a.getActiveTheme():{Hash:null,Mode:null};m.save(s,{ThemeHash:e.Hash,Mode:e.Mode,Scale:u.getActive()})};a.onApply(t),u.onChange(t)}if(a&&(!l||"function"==typeof a.getTheme&&!a.getTheme(l))){let t=function(){let e=f.list();if(!e||0===e.length)return null;for(let t=0;t<e.length;t++)if(e[t].IsDefault)return e[t].Hash;return e[0].Hash}();t&&(l=t,e.log&&e.log.info&&e.log.info('pict-section-theme: no theme resolved at boot — falling back to catalog default "'+t+'"'))}return l&&a&&a.applyTheme(l,d),null!==c&&u.applyScale(c),o.Brand&&g.applyBrand(o.Brand),a&&s&&(a._persistenceKey=s),a}class S extends r{constructor(e,t,o){super(e,t,o),this.serviceType="PictSectionTheme",y(this.pict,this.options)}mount(e){let t=e||{},o=t.Container;if(!o)return null;let r="string"==typeof o?this.pict&&this.pict.ContentAssignment?this.pict.ContentAssignment.getElement(o):document.querySelector(o):o;if(r&&r.length&&!r.tagName&&(r=r[0]),!r)return this.pict&&this.pict.log&&this.pict.log.warn&&this.pict.log.warn("pict-section-theme.mount: container not found for "+o),null;let i=Array.isArray(t.Views)&&t.Views.length?t.Views:["Picker","ModeToggle","ScaleSelect"],a=[],n=[];for(let e=0;e<i.length;e++){let t=b[i[e]];if(!t)continue;let o=(t.lib.default_configuration.DefaultDestinationAddress||"").replace(/^#/,"");o&&(a.push('<div class="pict-theme-mount-row pict-theme-mount-row-'+t.hash.toLowerCase()+'"><div id="'+o+'"></div></div>'),n.push(t.hash))}let s="pict-theme-mount"+(t.WrapperClass?" "+t.WrapperClass:"");r.innerHTML='<div class="'+s+'">'+a.join("")+"</div>";for(let e=0;e<n.length;e++){let t=this.pict.views[n[e]];if(t&&"function"==typeof t.render)try{t.render()}catch(e){}}return{container:r,viewsRendered:n}}}t.exports=S,t.exports.default_configuration={ProviderIdentifier:"Theme-Section",AutoInitialize:!1,ApplyDefault:null,DefaultMode:null,DefaultScale:null,Persistence:!0,PersistenceKey:null,RegisterCatalog:!0,Views:null,ViewOptions:null,Brand:null,ProviderOptions:null},t.exports.Provider=i,t.exports.PictSectionThemeProvider=S,t.exports.PickerView=a,t.exports.ModeToggleView=n,t.exports.ButtonView=l,t.exports.ScaleSelectView=s,t.exports.BrandStripView=d,t.exports.BrandMarkView=c,t.exports.TopBarView=h,t.exports.BottomBarView=p,t.exports.Catalog=f,t.exports.Brand=g,t.exports.Scale=u,t.exports.Persistence=m,t.exports.registerCatalog=v,t.exports.listCatalog=function(){let e=f.list(),t=[];for(let o=0;o<e.length;o++){let r=e[o],i=r.Bundle||{},a=i.Modes||{};t.push({Hash:r.Hash,Name:i.Name||r.Hash,Category:r.Category||"Other",Strategy:a.Strategy||"single",DefaultMode:a.Default||"light",IsDefault:!!r.IsDefault})}return t},t.exports.install=function(e,t){if(!e||"function"!=typeof e.addProvider)throw new Error("pict-section-theme.install: first arg must be a Pict instance");return y(e,t||{})},t.exports.clearPersistence=function(e){let t=e&&e.providers&&e.providers.Theme&&e.providers.Theme._persistenceKey||m.resolveKey(null);return m.clear(t)}},{"./Theme-Brand.js":29,"./Theme-Persistence.js":31,"./Theme-Scale.js":32,"./themes/_catalog.js":36,"./views/PictView-Theme-BottomBar.js":78,"./views/PictView-Theme-Brand-Mark.js":79,"./views/PictView-Theme-BrandStrip.js":80,"./views/PictView-Theme-Button.js":81,"./views/PictView-Theme-ModeToggle.js":82,"./views/PictView-Theme-Picker.js":83,"./views/PictView-Theme-ScaleSelect.js":84,"./views/PictView-Theme-TopBar.js":85,"pict-provider":12,"pict-provider-theme":5}],29:[function(e,t,o){const r="pict-brand",i="pict-brand-favicon",a="pict-brand-favicon-dark";let n=null,s=[];function l(e){return"string"==typeof e&&/^\s*<svg[\s>]/i.test(e)}function d(e){return"string"==typeof e&&/^(data:|https?:|\/|\.\.?\/)/.test(e)}function c(e){return e&&"string"==typeof e.IconType?e.IconType:e&&e.Icon?l(e.Icon)?"svg":d(e.Icon)?"image":null:null}function h(e){if("string"==typeof e&&e.length>0)return{Light:e,Dark:e,Base:e};if(e&&"object"==typeof e){let t="string"==typeof e.Light&&e.Light.length>0?e.Light:null,o="string"==typeof e.Dark&&e.Dark.length>0?e.Dark:null;return t||o?(t=t||o,o=o||t,{Light:t,Dark:o,Base:"string"==typeof e.Base&&e.Base.length>0?e.Base:t}):null}return null}function p(e){if(!e||"string"!=typeof e)return null;if(l(e)){return"data:image/svg+xml;charset=utf-8,"+encodeURIComponent(e).replace(/'/g,"%27").replace(/"/g,"%22")}return d(e)?e:null}function m(){"undefined"!=typeof document&&[i,a].forEach(e=>{let t=document.getElementById(e);t&&t.parentNode&&t.parentNode.removeChild(t)})}function u(e){let t=e.Colors;var o;return":root {\n\t--brand-color-primary: "+t.Primary+";\n\t--brand-color-secondary: "+t.Secondary+";\n\t--brand-color-primary-light: "+t.PrimaryLight+";\n\t--brand-color-primary-dark: "+t.PrimaryDark+";\n\t--brand-color-secondary-light: "+t.SecondaryLight+";\n\t--brand-color-secondary-dark: "+t.SecondaryDark+";\n\t--brand-color-primary-mode: "+t.PrimaryLight+";\n\t--brand-color-secondary-mode: "+t.SecondaryLight+";\n\t--brand-name: "+(o=e.Name,'"'+String(o||"").replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'";\n}\n')+(".theme-dark {\n\t--brand-color-primary-mode: "+t.PrimaryDark+";\n\t--brand-color-secondary-mode: "+t.SecondaryDark+";\n}\n")}function g(e){let t=n;if(null===e){if(n=null,"undefined"!=typeof document){let e=document.getElementById(r);e&&e.parentNode&&e.parentNode.removeChild(e)}return m(),b(null,t),null}let o=function(e){if(!e||"object"!=typeof e)return null;let t=e.Colors||{},o=h(t.Primary),r=h(t.Secondary);if(!o||!r)return null;let i=t.PrimaryLight||o.Light,a=t.PrimaryDark||o.Dark,n=t.SecondaryLight||r.Light,s=t.SecondaryDark||r.Dark;return{Hash:e.Hash||"brand",Name:e.Name||e.Hash||"Brand",Icon:e.Icon||null,IconType:c(e),Tagline:"string"==typeof e.Tagline?e.Tagline:null,Favicon:e.Favicon||null,FaviconDark:e.FaviconDark||null,Colors:{Primary:o.Base,Secondary:r.Base,PrimaryLight:i,PrimaryDark:a,SecondaryLight:n,SecondaryDark:s}}}(e);return o?(n=o,function(e){if("undefined"==typeof document)return;let t=document.getElementById(r);t||(t=document.createElement("style"),t.id=r,document.head.appendChild(t)),t.textContent=e}(u(o)),function(e){if("undefined"==typeof document)return;m();let t=p(e.Favicon),o=p(e.FaviconDark);if(!t&&!o)return;let r=!(!t||!o);if(t){let e=document.createElement("link");e.id=i,e.rel="icon",e.href=t,/^data:image\/svg\+xml/.test(t)&&(e.type="image/svg+xml"),r&&(e.media="(prefers-color-scheme: light)"),document.head.appendChild(e)}if(o){let e=document.createElement("link");e.id=a,e.rel="icon",e.href=o,/^data:image\/svg\+xml/.test(o)&&(e.type="image/svg+xml"),r&&(e.media="(prefers-color-scheme: dark)"),document.head.appendChild(e)}}(o),b(o,t),o):("undefined"!=typeof console&&console.warn&&console.warn("Theme-Brand.applyBrand: bad brand object — needs Colors.Primary + Colors.Secondary as strings."),n)}function f(e){let t=s.indexOf(e);t>=0&&s.splice(t,1)}function b(e,t){for(let o=0;o<s.length;o++)try{s[o](e,t)}catch(e){}}t.exports={applyBrand:g,getActive:function(){return n},onChange:function(e){return"function"!=typeof e?function(){}:(s.push(e),function(){f(e)})},offChange:f,reset:function(){g(null),s=[]},STYLE_ELEMENT_ID:r,FAVICON_LINK_ID:i,FAVICON_DARK_LINK_ID:a}},{}],30:[function(e,t,o){function r(e,t){let o="number"==typeof e&&e>0?e:14;return'<svg class="pict-theme-icon" width="'+o+'" height="'+o+'" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">'+t+"</svg>"}function i(e){return r(e,'<circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"/>')}function a(e){return r(e,'<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>')}function n(e){let t="number"==typeof e&&e>0?e:14;return'<svg class="pict-theme-icon pict-theme-icon-paired" width="'+1.6*t+'" height="'+t+'" viewBox="0 0 38 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="8" cy="12" r="3"/><path d="M8 4v1.5M8 18.5V20M2.5 12H4M12 12h1.5M4.1 7.1l1 1M11.1 7.1l-1 1M4.1 16.9l1-1M11.1 16.9l-1-1"/><path d="M33 13.5A6.5 6.5 0 1 1 26 6a5 5 0 0 0 7 7.5z"/></svg>'}t.exports={iconSun:i,iconMoon:a,iconSystem:function(e){return r(e,'<rect x="2" y="4" width="20" height="14" rx="2"/><path d="M8 21h8M12 18v3"/>')},iconPaired:n,iconChevronDown:function(e){let t="number"==typeof e&&e>0?e:10;return'<svg class="pict-theme-icon pict-theme-icon-chevron" width="'+t+'" height="'+t+'" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4.5l3 3 3-3"/></svg>'},iconForTheme:function(e,t,o){return"single"===e?"dark"===t?a(o):i(o):n(o)},DEFAULT_SIZE_PX:14}},{}],31:[function(e,t,o){const r="pict-section-theme:";function i(){try{if("undefined"!=typeof window&&window.localStorage)return window.localStorage}catch(e){}return null}t.exports={resolveKey:function(e){let t="string"==typeof e&&e.length>0?e:function(){try{if("undefined"!=typeof window&&window.location&&window.location.hostname)return window.location.hostname}catch(e){}return"default"}();return r+t},load:function(e){let t,o,r=i();if(!r)return null;try{t=r.getItem(e)}catch(e){return null}if(!t)return null;try{o=JSON.parse(t)}catch(e){return null}if(!o||"object"!=typeof o)return null;if(1!==o.Version)return null;if("string"!=typeof o.ThemeHash||0===o.ThemeHash.length)return null;let a=null;return"number"==typeof o.Scale&&isFinite(o.Scale)&&o.Scale>0&&(a=o.Scale),{ThemeHash:o.ThemeHash,Mode:"string"==typeof o.Mode&&o.Mode.length>0?o.Mode:null,Scale:a}},save:function(e,t){let o=i();if(!o)return!1;if(!t||"string"!=typeof t.ThemeHash||0===t.ThemeHash.length)return!1;let r={Version:1,ThemeHash:t.ThemeHash,Mode:"string"==typeof t.Mode&&t.Mode.length>0?t.Mode:null,Scale:"number"==typeof t.Scale&&isFinite(t.Scale)&&t.Scale>0?t.Scale:null,SavedAt:(new Date).toISOString()};try{return o.setItem(e,JSON.stringify(r)),!0}catch(e){return!1}},clear:function(e){let t=i();if(!t)return!1;try{return t.removeItem(e),!0}catch(e){return!1}},STORAGE_PREFIX:r,SCHEMA_VERSION:1}},{}],32:[function(e,t,o){const r="pict-theme-scale",i="--theme-scale";let a=1,n=[];function s(e){let t=n.indexOf(e);t>=0&&n.splice(t,1)}t.exports={applyScale:function(e){let t=a,o=function(e){let t=Number(e);return!isFinite(t)||t<=0?1:t<.5?.5:t>3?3:t}(e);return a=o,function(e){if("undefined"==typeof document)return;let t=document.getElementById(r);t||(t=document.createElement("style"),t.id=r,document.head.appendChild(t)),t.textContent=e}(function(e){return":root {\n\t"+i+": "+e+";\n}\nhtml {\n\tzoom: "+e+";\n}\n"}(o)),t!==o&&function(e,t){for(let o=0;o<n.length;o++)try{n[o](e,t)}catch(e){}}(o,t),o},getActive:function(){return a},onChange:function(e){return"function"!=typeof e?function(){}:(n.push(e),function(){s(e)})},offChange:s,reset:function(){if(a=1,"undefined"!=typeof document){let e=document.getElementById(r);e&&e.parentNode&&e.parentNode.removeChild(e)}n=[]},PRESETS:[{Value:.75,Label:"Tiny (75%)"},{Value:.85,Label:"Small (85%)"},{Value:1,Label:"Default (100%)"},{Value:1.15,Label:"Comfortable (115%)"},{Value:1.25,Label:"Large (125%)"},{Value:1.5,Label:"Huge (150%)"},{Value:1.75,Label:"Extra Huge (175%)"},{Value:2,Label:"Massive (200%)"}],DEFAULT_SCALE:1,MIN_SCALE:.5,MAX_SCALE:3,STYLE_ELEMENT_ID:r,CSS_VAR_NAME:i}},{}],33:[function(e,t,o){t.exports={Hash:"1970s-console",Name:"1970s Console",Category:"Fun",Version:"0.0.1",Description:"Amber phosphor on brown-black Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#1A1000",Secondary:"#140C00",Tertiary:"#1E1400",Panel:"#1C1200",Viewer:"#100A00",Hover:"#2A1C00",Selected:"#3A2800",Thumb:"#140C00"},Text:{Primary:"#FFAA00",Secondary:"#DD8800",Muted:"#AA6600",Dim:"#884400",Placeholder:"#663300"},Brand:{Accent:"#FFCC00",AccentHover:"#FFDD44"},Border:{Default:"#2A1800",Light:"#3A2200"},Status:{Danger:"#FF4400",DangerMuted:"#AA3300"},Scrollbar:{Track:"#2A1800",Hover:"#3A2800"},Selection:{Background:"rgba(255, 204, 0, 0.2)"},Focus:{Outline:"#FFCC00"},Syntax:{Keyword:"#FFB000",String:"#FFD080",Number:"#FFB000",Comment:"#806020",Operator:"#FFB000",Punctuation:"#FFD080",Function:"#FFB000",Variable:"#FFE090",Type:"#FFB000",Builtin:"#FFB000",Property:"#FF6E40",Tag:"#FF6E40",AttrName:"#FFB000",AttrValue:"#FFD080"}},Typography:{Family:{Sans:"'Courier New', 'Lucida Console', monospace",Mono:"'Courier New', 'Lucida Console', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#DD8800",Accent:"#FFCC00",Muted:"#884400",Light:"#1E1400",WarmBeige:"#201800",TealTint:"#1A1000",Lavender:"#1C1200",AmberTint:"#221800",PdfFill:"#201000",PdfText:"#FF4400"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.405Z",CompilerVersion:1}},{}],34:[function(e,t,o){t.exports={Hash:"1980s-console",Name:"1980s Console",Category:"Fun",Version:"0.0.1",Description:"Green phosphor on black Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#001200",Secondary:"#000E00",Tertiary:"#001600",Panel:"#001400",Viewer:"#000A00",Hover:"#002200",Selected:"#003800",Thumb:"#000E00"},Text:{Primary:"#00FF00",Secondary:"#00CC00",Muted:"#009900",Dim:"#006600",Placeholder:"#004400"},Brand:{Accent:"#00FF66",AccentHover:"#44FF88"},Border:{Default:"#002A00",Light:"#003A00"},Status:{Danger:"#FF0000",DangerMuted:"#AA0000"},Scrollbar:{Track:"#002A00",Hover:"#004400"},Selection:{Background:"rgba(0, 255, 102, 0.2)"},Focus:{Outline:"#00FF66"},Syntax:{Keyword:"#00FF00",String:"#90FF90",Number:"#FFFF00",Comment:"#208020",Operator:"#00FF00",Punctuation:"#90FF90",Function:"#00FF00",Variable:"#C0FFC0",Type:"#FFFF00",Builtin:"#FFFF00",Property:"#FF4040",Tag:"#FF4040",AttrName:"#FFFF00",AttrValue:"#90FF90"}},Typography:{Family:{Sans:"'Courier New', monospace",Mono:"'Courier New', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#00CC00",Accent:"#00FF66",Muted:"#006600",Light:"#001600",WarmBeige:"#001A00",TealTint:"#001200",Lavender:"#001400",AmberTint:"#001800",PdfFill:"#140000",PdfText:"#FF0000"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.406Z",CompilerVersion:1}},{}],35:[function(e,t,o){t.exports={Hash:"1990s-website",Name:"1990s Web Site",Category:"Fun",Version:"0.0.1",Description:"Blue links on grey, beveled Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"light"},Tokens:{Color:{Background:{Primary:"#C0C0C0",Secondary:"#B0B0B0",Tertiary:"#A8A8A8",Panel:"#B8B8B8",Viewer:"#D0D0D0",Hover:"#B8B8D0",Selected:"#000080",Thumb:"#B0B0B0"},Text:{Primary:"#000000",Secondary:"#000080",Muted:"#404040",Dim:"#606060",Placeholder:"#808080"},Brand:{Accent:"#0000FF",AccentHover:"#0000CC"},Border:{Default:"#808080",Light:"#A0A0A0"},Status:{Danger:"#FF0000",DangerMuted:"#990000"},Scrollbar:{Track:"#808080",Hover:"#606060"},Selection:{Background:"rgba(0, 0, 128, 0.3)"},Focus:{Outline:"#0000FF"},Syntax:{Keyword:"#0000FF",String:"#008000",Number:"#A52A2A",Comment:"#808080",Operator:"#000080",Punctuation:"#000000",Function:"#0000A0",Variable:"#000000",Type:"#A52A2A",Builtin:"#A52A2A",Property:"#800080",Tag:"#800080",AttrName:"#A52A2A",AttrValue:"#008000"}},Typography:{Family:{Sans:"'Times New Roman', Times, serif",Mono:"'Courier New', Courier, monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#000080",Accent:"#0000FF",Muted:"#606060",Light:"#A8A8A8",WarmBeige:"#B0B0B0",TealTint:"#A0A0A0",Lavender:"#ABABD0",AmberTint:"#B8B0A0",PdfFill:"#C0A0A0",PdfText:"#FF0000"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.406Z",CompilerVersion:1}},{}],36:[function(e,t,o){class r{constructor(){this._themes=new Map,this._loadStarterSet()}_loadStarterSet(){const t=[{Hash:"retold-default",Category:"Default",IsDefault:!0,Bundle:e("./retold-default.json")},{Hash:"pict-default",Category:"Default",Bundle:e("./pict-default.json")},{Hash:"retold-mono",Category:"Default",Bundle:e("./retold-mono.json")},{Hash:"retold-manager",Category:"App",Bundle:e("./retold-manager.json")},{Hash:"retold-content-system",Category:"App",Bundle:e("./retold-content-system.json")},{Hash:"retold-labs",Category:"App",Bundle:e("./retold-labs.json")},{Hash:"retold-labs-cyberpunk",Category:"App",Bundle:e("./retold-labs-cyberpunk.json")},{Hash:"retold-labs-retro",Category:"App",Bundle:e("./retold-labs-retro.json")},{Hash:"ultravisor-desert-dusk",Category:"App",Bundle:e("./ultravisor-desert-dusk.json")},{Hash:"ultravisor-desert-day",Category:"App",Bundle:e("./ultravisor-desert-day.json")},{Hash:"ultravisor-desert-sunset",Category:"App",Bundle:e("./ultravisor-desert-sunset.json")},{Hash:"ultravisor-professional-light",Category:"App",Bundle:e("./ultravisor-professional-light.json")},{Hash:"ultravisor-professional-dark",Category:"App",Bundle:e("./ultravisor-professional-dark.json")},{Hash:"ultravisor-desert-canyon",Category:"App",Bundle:e("./ultravisor-desert-canyon.json")},{Hash:"ocean",Category:"Paired",Bundle:e("./ocean.json")},{Hash:"playground-corp",Category:"Paired",Bundle:e("./playground-corp.json")},{Hash:"flow-modern",Category:"Flow",Bundle:e("./flow-modern.json")},{Hash:"flow-sketch",Category:"Flow",Bundle:e("./flow-sketch.json")},{Hash:"flow-blueprint",Category:"Flow",Bundle:e("./flow-blueprint.json")},{Hash:"flow-mono",Category:"Flow",Bundle:e("./flow-mono.json")},{Hash:"flow-retro-80s",Category:"Flow",Bundle:e("./flow-retro-80s.json")},{Hash:"flow-retro-90s",Category:"Flow",Bundle:e("./flow-retro-90s.json")},{Hash:"flow-whiteboard",Category:"Flow",Bundle:e("./flow-whiteboard.json")},{Hash:"twilight",Category:"Grey",Bundle:e("./twilight.json")},{Hash:"night",Category:"Grey",Bundle:e("./night.json")},{Hash:"evening",Category:"Grey",Bundle:e("./evening.json")},{Hash:"afternoon",Category:"Grey",Bundle:e("./afternoon.json")},{Hash:"daylight",Category:"Grey",Bundle:e("./daylight.json")},{Hash:"cyberpunk",Category:"Fun",Bundle:e("./cyberpunk.json")},{Hash:"synthwave",Category:"Fun",Bundle:e("./synthwave.json")},{Hash:"neo-tokyo",Category:"Fun",Bundle:e("./neo-tokyo.json")},{Hash:"solarized-dark",Category:"Fun",Bundle:e("./solarized-dark.json")},{Hash:"forest",Category:"Fun",Bundle:e("./forest.json")},{Hash:"hotdog",Category:"Fun",Bundle:e("./hotdog.json")},{Hash:"1970s-console",Category:"Fun",Bundle:e("./1970s-console.json")},{Hash:"1980s-console",Category:"Fun",Bundle:e("./1980s-console.json")},{Hash:"1990s-website",Category:"Fun",Bundle:e("./1990s-website.json")},{Hash:"early-2000s",Category:"Fun",Bundle:e("./early-2000s.json")},{Hash:"databeacon-nineteen-97",Category:"Retro",Bundle:e("./databeacon-nineteen-97.json")},{Hash:"databeacon-mac-classic",Category:"Retro",Bundle:e("./databeacon-mac-classic.json")},{Hash:"databeacon-next",Category:"Retro",Bundle:e("./databeacon-next.json")},{Hash:"databeacon-beos",Category:"Retro",Bundle:e("./databeacon-beos.json")},{Hash:"databeacon-sgi",Category:"Retro",Bundle:e("./databeacon-sgi.json")},{Hash:"mobile-debug",Category:"Debug",Bundle:e("./mobile-debug.json")}];for(let e=0;e<t.length;e++){let o=Object.assign({},t[e],{Source:t[e].Source||"starter"});this._themes.set(o.Hash,o)}}register(e){if(!e||"object"!=typeof e)throw new Error("ThemeRegistry.register: entry must be an object");if("string"!=typeof e.Hash||0===e.Hash.length)throw new Error("ThemeRegistry.register: entry.Hash is required");if(!e.Bundle||"object"!=typeof e.Bundle)throw new Error("ThemeRegistry.register: entry.Bundle is required");let t=Object.assign({Source:"host"},e);return this._themes.set(e.Hash,t),t}unregister(e){return this._themes.delete(e)}get(e){return this._themes.get(e)}has(e){return this._themes.has(e)}list(){return Array.from(this._themes.values())}clear(){this._themes.clear()}loadStarterSet(){this._loadStarterSet()}get count(){return this._themes.size}async registerFromURL(e,t){if("function"!=typeof fetch)throw new Error("ThemeRegistry.registerFromURL: fetch is not available in this environment");let o=await fetch(e);if(!o.ok)throw new Error("ThemeRegistry.registerFromURL: HTTP "+o.status+" for "+e);let r=await o.json();if(!r||"object"!=typeof r||"string"!=typeof r.Hash)throw new Error("ThemeRegistry.registerFromURL: payload missing Hash");let i=t||{};return this.register({Hash:i.Hash||r.Hash,Bundle:r,Category:i.Category||"Garden",IsDefault:!!i.IsDefault,Source:e})}get length(){return this._themes.size}[Symbol.iterator](){return this._themes.values()}}const i=new r,a=new Proxy(i,{get(e,t,o){if("string"==typeof t&&/^\d+$/.test(t)){let o=parseInt(t,10);return e.list()[o]}return Reflect.get(e,t,o)},has:(e,t)=>"string"==typeof t&&/^\d+$/.test(t)?parseInt(t,10)<e.length:Reflect.has(e,t)});t.exports=a,t.exports.ThemeRegistry=r},{"./1970s-console.json":33,"./1980s-console.json":34,"./1990s-website.json":35,"./afternoon.json":37,"./cyberpunk.json":38,"./databeacon-beos.json":39,"./databeacon-mac-classic.json":40,"./databeacon-next.json":41,"./databeacon-nineteen-97.json":42,"./databeacon-sgi.json":43,"./daylight.json":44,"./early-2000s.json":45,"./evening.json":46,"./flow-blueprint.json":47,"./flow-modern.json":48,"./flow-mono.json":49,"./flow-retro-80s.json":50,"./flow-retro-90s.json":51,"./flow-sketch.json":52,"./flow-whiteboard.json":53,"./forest.json":54,"./hotdog.json":55,"./mobile-debug.json":56,"./neo-tokyo.json":57,"./night.json":58,"./ocean.json":59,"./pict-default.json":60,"./playground-corp.json":61,"./retold-content-system.json":62,"./retold-default.json":63,"./retold-labs-cyberpunk.json":64,"./retold-labs-retro.json":65,"./retold-labs.json":66,"./retold-manager.json":67,"./retold-mono.json":68,"./solarized-dark.json":69,"./synthwave.json":70,"./twilight.json":71,"./ultravisor-desert-canyon.json":72,"./ultravisor-desert-day.json":73,"./ultravisor-desert-dusk.json":74,"./ultravisor-desert-sunset.json":75,"./ultravisor-professional-dark.json":76,"./ultravisor-professional-light.json":77}],37:[function(e,t,o){t.exports={Hash:"afternoon",Name:"Afternoon",Category:"Grey",Version:"0.0.1",Description:"Warm light grey, softer contrast Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"light"},Tokens:{Color:{Background:{Primary:"#E8E4E0",Secondary:"#DAD6D2",Tertiary:"#D0CCC8",Panel:"#DDD9D5",Viewer:"#F0ECE8",Hover:"#CCC8C4",Selected:"#B8B4B0",Thumb:"#DAD6D2"},Text:{Primary:"#2A2A2A",Secondary:"#404040",Muted:"#707070",Dim:"#909090",Placeholder:"#B0B0B0"},Brand:{Accent:"#555555",AccentHover:"#333333"},Border:{Default:"#C0BCB8",Light:"#D0CCC8"},Status:{Danger:"#AA3333",DangerMuted:"#886655"},Scrollbar:{Track:"#B8B4B0",Hover:"#A0A09C"},Selection:{Background:"rgba(85, 85, 85, 0.2)"},Focus:{Outline:"#555555"},Syntax:{Keyword:"#7038A0",String:"#2E7A3A",Number:"#A86B00",Comment:"#888888",Operator:"#1F6FB5",Punctuation:"#666666",Function:"#3357C7",Variable:"#222222",Type:"#A86B00",Builtin:"#A86B00",Property:"#B62828",Tag:"#B62828",AttrName:"#A86B00",AttrValue:"#2E7A3A"}},Typography:{Family:{Sans:"Georgia, 'Times New Roman', serif",Mono:"'Courier New', Courier, monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#404040",Accent:"#555555",Muted:"#909090",Light:"#D0CCC8",WarmBeige:"#DAD6D2",TealTint:"#CCC8C4",Lavender:"#D2D0CE",AmberTint:"#D8D2C8",PdfFill:"#D8C8C0",PdfText:"#AA3333"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.406Z",CompilerVersion:1}},{}],38:[function(e,t,o){t.exports={Hash:"cyberpunk",Name:"Cyberpunk",Category:"Fun",Version:"0.0.1",Description:"Electric green on black Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#0A0E0A",Secondary:"#060806",Tertiary:"#0E120E",Panel:"#0C100C",Viewer:"#040604",Hover:"#142014",Selected:"#1A3A1A",Thumb:"#060806"},Text:{Primary:"#C8FFC8",Secondary:"#A0D8A0",Muted:"#608860",Dim:"#406040",Placeholder:"#305030"},Brand:{Accent:"#00FF41",AccentHover:"#44FF77"},Border:{Default:"#1A2A1A",Light:"#224022"},Status:{Danger:"#FF3333",DangerMuted:"#AA2222"},Scrollbar:{Track:"#1A2A1A",Hover:"#2A4A2A"},Selection:{Background:"rgba(0, 255, 65, 0.2)"},Focus:{Outline:"#00FF41"},Syntax:{Keyword:"#FF00FF",String:"#00FF41",Number:"#FFFF00",Comment:"#406040",Operator:"#00FFFF",Punctuation:"#A0D8A0",Function:"#FF00FF",Variable:"#C8FFC8",Type:"#FFFF00",Builtin:"#FFFF00",Property:"#FF3333",Tag:"#FF3333",AttrName:"#FFFF00",AttrValue:"#00FF41"}},Typography:{Family:{Sans:"'Lucida Console', 'Courier New', monospace",Mono:"'Lucida Console', 'Courier New', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#A0D8A0",Accent:"#00FF41",Muted:"#406040",Light:"#0E120E",WarmBeige:"#101610",TealTint:"#0C140C",Lavender:"#0E120E",AmberTint:"#141810",PdfFill:"#181010",PdfText:"#FF3333"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.406Z",CompilerVersion:1}},{}],39:[function(e,t,o){t.exports={Hash:"databeacon-beos",Name:"DataBeacon — BeOS",Version:"0.0.1",Description:"BeOS palette — cool teals with orange accents. Light: sky-blue desktop. Dark: deep ocean panels with cyan highlights.",Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#e0e8ec",Dark:"#0a1a22"},Secondary:{Light:"#c8d6de",Dark:"#102530"},Tertiary:{Light:"#d4dfe5",Dark:"#0d1f29"},Panel:{Light:"#f0f4f6",Dark:"#142430"},Input:{Light:"#ffffff",Dark:"#1b313f"},Hover:{Light:"#d7dee2",Dark:"#091820"},Selected:{Light:"#c2d4da",Dark:"#19353e"}},Text:{Primary:{Light:"#101820",Dark:"#b0d0e0"},Secondary:{Light:"#40525e",Dark:"#7a98a8"},Muted:{Light:"#6e828e",Dark:"#556a78"},Placeholder:{Light:"#95a5ae",Dark:"#3a4e59"},OnBrand:{Light:"#ffffff",Dark:"#0a1a22"}},Brand:{Primary:{Light:"#3a7a8a",Dark:"#60b0c0"},PrimaryHover:{Light:"#4e98aa",Dark:"#80ccdc"},Accent:{Light:"#3a7a8a",Dark:"#60b0c0"},AccentHover:{Light:"#4e98aa",Dark:"#80ccdc"}},Border:{Default:{Light:"#8ba3b0",Dark:"#466070"},Light:{Light:"#b5c5ce",Dark:"#283d49"},Strong:{Light:"#6f828c",Dark:"#384c59"}},Status:{Success:{Light:"#2a7a4a",Dark:"#4ac06a"},Warning:{Light:"#cc9930",Dark:"#ffc860"},Error:{Light:"#cc5530",Dark:"#ff8060"},Info:{Light:"#3a7a8a",Dark:"#60b0c0"}},Scrollbar:{Track:{Light:"#c8d6de",Dark:"#102530"},Thumb:{Light:"#7c929f",Dark:"#4d6574"},Hover:{Light:"#6e828e",Dark:"#556a78"}},Selection:{Background:{Light:"#aac4cc",Dark:"#254a54"},Text:{Light:"#101820",Dark:"#b0d0e0"}},Focus:{Outline:{Light:"#3a7a8a",Dark:"#60b0c0"}},Shadow:{Color:{Light:"rgba(0, 0, 0, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#cc5530",Dark:"#ff8060"},String:{Light:"#2a7a4a",Dark:"#4ac06a"},Number:{Light:"#cc9930",Dark:"#ffc860"},Comment:{Light:"#6e828e",Dark:"#556a78"},Operator:{Light:"#3a7a8a",Dark:"#60b0c0"},Punctuation:{Light:"#40525e",Dark:"#7a98a8"},Function:{Light:"#3a7a8a",Dark:"#60b0c0"},Variable:{Light:"#101820",Dark:"#b0d0e0"},Type:{Light:"#cc9930",Dark:"#ffc860"},Builtin:{Light:"#cc9930",Dark:"#ffc860"},Property:{Light:"#cc5530",Dark:"#ff8060"},Tag:{Light:"#cc5530",Dark:"#ff8060"},AttrName:{Light:"#cc9930",Dark:"#ffc860"},AttrValue:{Light:"#2a7a4a",Dark:"#4ac06a"}}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.5",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Layout:{SidebarWidth:"220px",TopbarHeight:"48px",StatusbarHeight:"28px"}},Brand:{Name:"BeOS",Tagline:"Connect, introspect, and expose remote databases"}}},{}],40:[function(e,t,o){t.exports={Hash:"databeacon-mac-classic",Name:"DataBeacon — Mac Classic",Version:"0.0.1",Description:"Mac OS 8/9 Platinum palette — soft greys with sky blue accents. Light: classic Mac platinum. Dark: charcoal panels with the same blue accent family.",Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#dddddd",Dark:"#202020"},Secondary:{Light:"#cccccc",Dark:"#2a2a2a"},Tertiary:{Light:"#d4d4d4",Dark:"#252525"},Panel:{Light:"#f0f0f0",Dark:"#2e2e2e"},Input:{Light:"#ffffff",Dark:"#3a3a3a"},Hover:{Light:"#d4d4d4",Dark:"#1e1e1e"},Selected:{Light:"#c0cce3",Dark:"#2b3748"}},Text:{Primary:{Light:"#000000",Dark:"#dddddd"},Secondary:{Light:"#444444",Dark:"#b0b0b0"},Muted:{Light:"#777777",Dark:"#777777"},Placeholder:{Light:"#9a9a9a",Dark:"#585858"},OnBrand:{Light:"#ffffff",Dark:"#0a0a0a"}},Brand:{Primary:{Light:"#4080ff",Dark:"#60a0ff"},PrimaryHover:{Light:"#60a0ff",Dark:"#80b8ff"},Accent:{Light:"#4080ff",Dark:"#60a0ff"},AccentHover:{Light:"#60a0ff",Dark:"#80b8ff"}},Border:{Default:{Light:"#999999",Dark:"#555555"},Light:{Light:"#bbbbbb",Dark:"#3a3a3a"},Strong:{Light:"#7a7a7a",Dark:"#444444"}},Status:{Success:{Light:"#339933",Dark:"#60cc60"},Warning:{Light:"#cc6600",Dark:"#ff9933"},Error:{Light:"#cc0000",Dark:"#ff4060"},Info:{Light:"#4080ff",Dark:"#60a0ff"}},Scrollbar:{Track:{Light:"#cccccc",Dark:"#2a2a2a"},Thumb:{Light:"#888888",Dark:"#666666"},Hover:{Light:"#777777",Dark:"#777777"}},Selection:{Background:{Light:"#aabfe7",Dark:"#344867"},Text:{Light:"#000000",Dark:"#dddddd"}},Focus:{Outline:{Light:"#4080ff",Dark:"#60a0ff"}},Shadow:{Color:{Light:"rgba(0, 0, 0, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#cc0000",Dark:"#ff4060"},String:{Light:"#339933",Dark:"#60cc60"},Number:{Light:"#cc6600",Dark:"#ff9933"},Comment:{Light:"#777777",Dark:"#777777"},Operator:{Light:"#4080ff",Dark:"#60a0ff"},Punctuation:{Light:"#444444",Dark:"#b0b0b0"},Function:{Light:"#4080ff",Dark:"#60a0ff"},Variable:{Light:"#000000",Dark:"#dddddd"},Type:{Light:"#cc6600",Dark:"#ff9933"},Builtin:{Light:"#cc6600",Dark:"#ff9933"},Property:{Light:"#cc0000",Dark:"#ff4060"},Tag:{Light:"#cc0000",Dark:"#ff4060"},AttrName:{Light:"#cc6600",Dark:"#ff9933"},AttrValue:{Light:"#339933",Dark:"#60cc60"}}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.5",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Layout:{SidebarWidth:"220px",TopbarHeight:"48px",StatusbarHeight:"28px"}},Brand:{Name:"Mac Classic",Tagline:"Connect, introspect, and expose remote databases"}}},{}],41:[function(e,t,o){t.exports={Hash:"databeacon-next",Name:"DataBeacon — NeXT",Version:"0.0.1",Description:"NeXTSTEP palette — stone backgrounds with rich purple accents. Light: warm stone. Dark: deep aubergine with lavender highlights.",Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#e8e6dd",Dark:"#1a1420"},Secondary:{Light:"#d6d3c8",Dark:"#221a2c"},Tertiary:{Light:"#dfdcd2",Dark:"#1e1726"},Panel:{Light:"#f5f3ed",Dark:"#251c2e"},Input:{Light:"#ffffff",Dark:"#2f253a"},Hover:{Light:"#dedcd4",Dark:"#18131e"},Selected:{Light:"#d1c7d2",Dark:"#352a42"}},Text:{Primary:{Light:"#1e1a26",Dark:"#e8e6dd"},Secondary:{Light:"#4c465a",Dark:"#b8b4c6"},Muted:{Light:"#7a7488",Dark:"#7a7488"},Placeholder:{Light:"#a09ba5",Dark:"#585263"},OnBrand:{Light:"#ffffff",Dark:"#1a1420"}},Brand:{Primary:{Light:"#6a3fa0",Dark:"#b090e0"},PrimaryHover:{Light:"#8557c0",Dark:"#c8aef0"},Accent:{Light:"#6a3fa0",Dark:"#b090e0"},AccentHover:{Light:"#8557c0",Dark:"#c8aef0"}},Border:{Default:{Light:"#9a96a6",Dark:"#5e5468"},Light:{Light:"#c1bec1",Dark:"#3c3444"},Strong:{Light:"#7b7884",Dark:"#4b4353"}},Status:{Success:{Light:"#3a7a3a",Dark:"#7acc7a"},Warning:{Light:"#b88a00",Dark:"#ffcf4a"},Error:{Light:"#aa2c3a",Dark:"#ff6a80"},Info:{Light:"#6a3fa0",Dark:"#b090e0"}},Scrollbar:{Track:{Light:"#d6d3c8",Dark:"#221a2c"},Thumb:{Light:"#8a8597",Dark:"#6c6478"},Hover:{Light:"#7a7488",Dark:"#7a7488"}},Selection:{Background:{Light:"#bfb0c9",Dark:"#4a3b5d"},Text:{Light:"#1e1a26",Dark:"#e8e6dd"}},Focus:{Outline:{Light:"#6a3fa0",Dark:"#b090e0"}},Shadow:{Color:{Light:"rgba(0, 0, 0, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#aa2c3a",Dark:"#ff6a80"},String:{Light:"#3a7a3a",Dark:"#7acc7a"},Number:{Light:"#b88a00",Dark:"#ffcf4a"},Comment:{Light:"#7a7488",Dark:"#7a7488"},Operator:{Light:"#6a3fa0",Dark:"#b090e0"},Punctuation:{Light:"#4c465a",Dark:"#b8b4c6"},Function:{Light:"#6a3fa0",Dark:"#b090e0"},Variable:{Light:"#1e1a26",Dark:"#e8e6dd"},Type:{Light:"#b88a00",Dark:"#ffcf4a"},Builtin:{Light:"#b88a00",Dark:"#ffcf4a"},Property:{Light:"#aa2c3a",Dark:"#ff6a80"},Tag:{Light:"#aa2c3a",Dark:"#ff6a80"},AttrName:{Light:"#b88a00",Dark:"#ffcf4a"},AttrValue:{Light:"#3a7a3a",Dark:"#7acc7a"}}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.5",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Layout:{SidebarWidth:"220px",TopbarHeight:"48px",StatusbarHeight:"28px"}},Brand:{Name:"NeXT",Tagline:"Connect, introspect, and expose remote databases"}}},{}],42:[function(e,t,o){t.exports={Hash:"databeacon-nineteen-97",Name:"DataBeacon — 1997 (Win95/98)",Version:"0.0.1",Description:"Windows 95/98 retro palette — beige + navy + maroon. Light: classic Win95 desktop. Dark: indigo-grey background with sky/coral accents.",Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#ece9d8",Dark:"#1e1e2e"},Secondary:{Light:"#d8d3b8",Dark:"#26263a"},Tertiary:{Light:"#e2dec8",Dark:"#222234"},Panel:{Light:"#fffbf0",Dark:"#2a2a3a"},Input:{Light:"#ffffff",Dark:"#343450"},Hover:{Light:"#e2dfcf",Dark:"#1c1c2c"},Selected:{Light:"#c1bfc8",Dark:"#2f3553"}},Text:{Primary:{Light:"#1a1a1a",Dark:"#ece9d8"},Secondary:{Light:"#4a4a4a",Dark:"#b8b6a8"},Muted:{Light:"#7a7a7a",Dark:"#7e7c70"},Placeholder:{Light:"#a1a09a",Dark:"#5c5b58"},OnBrand:{Light:"#ffffff",Dark:"#1a1a1a"}},Brand:{Primary:{Light:"#000080",Dark:"#80a0ff"},PrimaryHover:{Light:"#0000cc",Dark:"#a0b8ff"},Accent:{Light:"#000080",Dark:"#80a0ff"},AccentHover:{Light:"#0000cc",Dark:"#a0b8ff"}},Border:{Default:{Light:"#808080",Dark:"#4e4e68"},Light:{Light:"#b6b4ac",Dark:"#36364b"},Strong:{Light:"#666666",Dark:"#3e3e53"}},Status:{Success:{Light:"#008000",Dark:"#80ff80"},Warning:{Light:"#808000",Dark:"#ffcc00"},Error:{Light:"#800000",Dark:"#ff8080"},Info:{Light:"#000080",Dark:"#80c0ff"}},Scrollbar:{Track:{Light:"#d8d3b8",Dark:"#26263a"},Thumb:{Light:"#7d7d7d",Dark:"#66656c"},Hover:{Light:"#7a7a7a",Dark:"#7e7c70"}},Selection:{Background:{Light:"#a09ebb",Dark:"#3d4770"},Text:{Light:"#1a1a1a",Dark:"#ece9d8"}},Focus:{Outline:{Light:"#000080",Dark:"#80a0ff"}},Shadow:{Color:{Light:"rgba(0, 0, 0, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#800000",Dark:"#ff8080"},String:{Light:"#008000",Dark:"#80ff80"},Number:{Light:"#808000",Dark:"#ffcc00"},Comment:{Light:"#7a7a7a",Dark:"#7e7c70"},Operator:{Light:"#000080",Dark:"#80a0ff"},Punctuation:{Light:"#4a4a4a",Dark:"#b8b6a8"},Function:{Light:"#000080",Dark:"#80c0ff"},Variable:{Light:"#1a1a1a",Dark:"#ece9d8"},Type:{Light:"#808000",Dark:"#ffcc00"},Builtin:{Light:"#808000",Dark:"#ffcc00"},Property:{Light:"#800000",Dark:"#ff8080"},Tag:{Light:"#800000",Dark:"#ff8080"},AttrName:{Light:"#808000",Dark:"#ffcc00"},AttrValue:{Light:"#008000",Dark:"#80ff80"}}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.5",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Layout:{SidebarWidth:"220px",TopbarHeight:"48px",StatusbarHeight:"28px"}},Brand:{Name:"1997 (Win95/98)",Tagline:"Connect, introspect, and expose remote databases"}}},{}],43:[function(e,t,o){t.exports={Hash:"databeacon-sgi",Name:"DataBeacon — SGI",Version:"0.0.1",Description:"SGI Indy / IRIX palette — magenta with cyan highlights. Light: signature SGI grey. Dark: deep workstation black with the same hot magenta.",Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#c8c8c8",Dark:"#1a1a1a"},Secondary:{Light:"#b8b8b8",Dark:"#232323"},Tertiary:{Light:"#c0c0c0",Dark:"#1e1e1e"},Panel:{Light:"#dcdcdc",Dark:"#252525"},Input:{Light:"#ffffff",Dark:"#2e2e2e"},Hover:{Light:"#c0c0c0",Dark:"#181818"},Selected:{Light:"#c8a9bb",Dark:"#432635"}},Text:{Primary:{Light:"#202020",Dark:"#e0e0e0"},Secondary:{Light:"#4a4a4a",Dark:"#a8a8a8"},Muted:{Light:"#6e6e6e",Dark:"#707070"},Placeholder:{Light:"#8d8d8d",Dark:"#515151"},OnBrand:{Light:"#ffffff",Dark:"#0a0a0a"}},Brand:{Primary:{Light:"#c82080",Dark:"#ff60b0"},PrimaryHover:{Light:"#e040a0",Dark:"#ff80c8"},Accent:{Light:"#c82080",Dark:"#ff60b0"},AccentHover:{Light:"#e040a0",Dark:"#ff80c8"}},Border:{Default:{Light:"#808080",Dark:"#505050"},Light:{Light:"#a4a4a4",Dark:"#353535"},Strong:{Light:"#666666",Dark:"#404040"}},Status:{Success:{Light:"#208040",Dark:"#50d080"},Warning:{Light:"#e8a818",Dark:"#ffd050"},Error:{Light:"#e83018",Dark:"#ff6060"},Info:{Light:"#3080c0",Dark:"#60c0ff"}},Scrollbar:{Track:{Light:"#b8b8b8",Dark:"#232323"},Thumb:{Light:"#777777",Dark:"#606060"},Hover:{Light:"#6e6e6e",Dark:"#707070"}},Selection:{Background:{Light:"#c892b0",Dark:"#63304a"},Text:{Light:"#202020",Dark:"#e0e0e0"}},Focus:{Outline:{Light:"#c82080",Dark:"#ff60b0"}},Shadow:{Color:{Light:"rgba(0, 0, 0, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#e83018",Dark:"#ff6060"},String:{Light:"#208040",Dark:"#50d080"},Number:{Light:"#e8a818",Dark:"#ffd050"},Comment:{Light:"#6e6e6e",Dark:"#707070"},Operator:{Light:"#c82080",Dark:"#ff60b0"},Punctuation:{Light:"#4a4a4a",Dark:"#a8a8a8"},Function:{Light:"#3080c0",Dark:"#60c0ff"},Variable:{Light:"#202020",Dark:"#e0e0e0"},Type:{Light:"#e8a818",Dark:"#ffd050"},Builtin:{Light:"#e8a818",Dark:"#ffd050"},Property:{Light:"#e83018",Dark:"#ff6060"},Tag:{Light:"#e83018",Dark:"#ff6060"},AttrName:{Light:"#e8a818",Dark:"#ffd050"},AttrValue:{Light:"#208040",Dark:"#50d080"}}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.5",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Layout:{SidebarWidth:"220px",TopbarHeight:"48px",StatusbarHeight:"28px"}},Brand:{Name:"SGI",Tagline:"Connect, introspect, and expose remote databases"}}},{}],44:[function(e,t,o){t.exports={Hash:"daylight",Name:"Daylight",Category:"Grey",Version:"0.0.1",Description:"Bright white, dark text Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"light"},Tokens:{Color:{Background:{Primary:"#FFFFFF",Secondary:"#F0F0F0",Tertiary:"#E8E8E8",Panel:"#F5F5F5",Viewer:"#FAFAFA",Hover:"#E0E0E0",Selected:"#C8C8C8",Thumb:"#F0F0F0"},Text:{Primary:"#1A1A1A",Secondary:"#333333",Muted:"#666666",Dim:"#888888",Placeholder:"#AAAAAA"},Brand:{Accent:"#444444",AccentHover:"#222222"},Border:{Default:"#D0D0D0",Light:"#E0E0E0"},Status:{Danger:"#CC0000",DangerMuted:"#884444"},Scrollbar:{Track:"#C0C0C0",Hover:"#A0A0A0"},Selection:{Background:"rgba(68, 68, 68, 0.2)"},Focus:{Outline:"#444444"},Syntax:{Keyword:"#7038A0",String:"#2E7A3A",Number:"#A86B00",Comment:"#888888",Operator:"#1F6FB5",Punctuation:"#444444",Function:"#3357C7",Variable:"#222222",Type:"#A86B00",Builtin:"#A86B00",Property:"#B62828",Tag:"#B62828",AttrName:"#A86B00",AttrValue:"#2E7A3A"}},Typography:{Family:{Sans:"'Segoe UI', system-ui, -apple-system, sans-serif",Mono:"'SF Mono', 'Fira Code', 'Consolas', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#333333",Accent:"#444444",Muted:"#888888",Light:"#E8E8E8",WarmBeige:"#F0F0F0",TealTint:"#E0E0E0",Lavender:"#EBEBEB",AmberTint:"#F0EDE8",PdfFill:"#F0E0E0",PdfText:"#CC0000"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.407Z",CompilerVersion:1}},{}],45:[function(e,t,o){t.exports={Hash:"early-2000s",Name:"Early 2000s Web",Category:"Fun",Version:"0.0.1",Description:"Teal and silver, Web 2.0 Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"light"},Tokens:{Color:{Background:{Primary:"#E8F4F8",Secondary:"#D0E8EE",Tertiary:"#C0DDE6",Panel:"#D8EEF2",Viewer:"#F0F8FA",Hover:"#B0D4E0",Selected:"#88C4D8",Thumb:"#D0E8EE"},Text:{Primary:"#1A3A4A",Secondary:"#2A4A5A",Muted:"#5A7A8A",Dim:"#7A9AAA",Placeholder:"#9ABACA"},Brand:{Accent:"#0099CC",AccentHover:"#00AADD"},Border:{Default:"#A0C8D8",Light:"#B8D8E4"},Status:{Danger:"#CC3300",DangerMuted:"#994422"},Scrollbar:{Track:"#A0C8D8",Hover:"#88B8CC"},Selection:{Background:"rgba(0, 153, 204, 0.2)"},Focus:{Outline:"#0099CC"},Syntax:{Keyword:"#1A4080",String:"#2E7A3A",Number:"#A86B00",Comment:"#888888",Operator:"#1F6FB5",Punctuation:"#333333",Function:"#3357C7",Variable:"#222222",Type:"#A86B00",Builtin:"#A86B00",Property:"#B62828",Tag:"#B62828",AttrName:"#A86B00",AttrValue:"#2E7A3A"}},Typography:{Family:{Sans:"Verdana, Geneva, Tahoma, sans-serif",Mono:"'Lucida Console', Monaco, monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#2A4A5A",Accent:"#0099CC",Muted:"#7A9AAA",Light:"#C0DDE6",WarmBeige:"#D0E8EE",TealTint:"#B0D8E4",Lavender:"#C8DCE6",AmberTint:"#D8E0D0",PdfFill:"#E0C8C0",PdfText:"#CC3300"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.407Z",CompilerVersion:1}},{}],46:[function(e,t,o){t.exports={Hash:"evening",Name:"Evening",Category:"Grey",Version:"0.0.1",Description:"Medium grey, transitional Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#484848",Secondary:"#3C3C3C",Tertiary:"#424242",Panel:"#454545",Viewer:"#363636",Hover:"#525252",Selected:"#606060",Thumb:"#3C3C3C"},Text:{Primary:"#E0E0E0",Secondary:"#D0D0D0",Muted:"#A0A0A0",Dim:"#888888",Placeholder:"#707070"},Brand:{Accent:"#C0C0C0",AccentHover:"#E0E0E0"},Border:{Default:"#585858",Light:"#606060"},Status:{Danger:"#FF6666",DangerMuted:"#AA6666"},Scrollbar:{Track:"#585858",Hover:"#686868"},Selection:{Background:"rgba(192, 192, 192, 0.25)"},Focus:{Outline:"#C0C0C0"},Syntax:{Keyword:"#B894FF",String:"#A8D8B0",Number:"#FFB880",Comment:"#8A8A8A",Operator:"#7EC0FF",Punctuation:"#BBBBBB",Function:"#FFCC80",Variable:"#DDDDDD",Type:"#FFB880",Builtin:"#FFB880",Property:"#FF9494",Tag:"#FF9494",AttrName:"#FFB880",AttrValue:"#A8D8B0"}},Typography:{Family:{Sans:"system-ui, -apple-system, sans-serif",Mono:"'SF Mono', 'Fira Code', 'Consolas', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#D0D0D0",Accent:"#C0C0C0",Muted:"#888888",Light:"#424242",WarmBeige:"#484848",TealTint:"#3E3E3E",Lavender:"#444444",AmberTint:"#4A4640",PdfFill:"#4A3C3C",PdfText:"#FF6666"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.407Z",CompilerVersion:1}},{}],47:[function(e,t,o){t.exports={Hash:"flow-blueprint",Name:"Flow Blueprint",Version:"0.0.1",Description:"Technical-drawing aesthetic — white-on-navy with yellow selection. Single-mode (always dark blueprint).",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#1a3a6a",Secondary:"#142e54",Tertiary:"rgba(255,255,255,0.1)",Panel:"#1a3a6a",Hover:"rgba(255,255,255,0.06)",Selected:"rgba(255,221,68,0.18)"},Text:{Primary:"#ffffff",Secondary:"rgba(255,255,255,0.7)",Muted:"rgba(255,255,255,0.5)",OnBrand:"#0d2244"},Brand:{Primary:"#ffdd44",PrimaryHover:"#ffe978",Accent:"#88ffbb"},Border:{Default:"rgba(255,255,255,0.6)",Light:"rgba(255,255,255,0.15)",Strong:"#ffffff"},Status:{Success:"#88ffbb",Warning:"#ffdd44",Error:"#ff8888",Info:"#88bbff"},Scrollbar:{Track:"rgba(255,255,255,0.05)",Thumb:"rgba(255,255,255,0.3)",Hover:"rgba(255,255,255,0.5)"},Focus:{Outline:"#ffdd44"},Shadow:{Color:"rgba(0, 0, 0, 0.4)"}}},Brand:{Name:"Flow Blueprint",Tagline:"Technical drawing on navy"}}},{}],48:[function(e,t,o){t.exports={Hash:"flow-modern",Name:"Flow Modern",Version:"0.0.1",Description:"The default modern look for pict-section-flow — clean, theme-neutral. Paired light/dark.",Comprehensive:!0,Modes:{Strategy:"system",Default:"light"},Tokens:{Color:{Background:{Primary:{Light:"#ffffff",Dark:"#1a1a1a"},Secondary:{Light:"#f5f5f5",Dark:"#242424"},Tertiary:{Light:"#ecf0f1",Dark:"#2e2e2e"},Panel:{Light:"#ffffff",Dark:"#222222"},Hover:{Light:"#eef3f7",Dark:"#2a2a2a"},Selected:{Light:"#dde7f3",Dark:"#2a3550"}},Text:{Primary:{Light:"#2c3e50",Dark:"#ededed"},Secondary:{Light:"#7f8c8d",Dark:"#bdbdbd"},Muted:{Light:"#95a5a6",Dark:"#888888"},OnBrand:{Light:"#ffffff",Dark:"#1a1a1a"}},Brand:{Primary:{Light:"#2255aa",Dark:"#5b8aff"},PrimaryHover:{Light:"#1a4488",Dark:"#7ba4ff"},Accent:{Light:"#1abc9c",Dark:"#4fd1b5"}},Border:{Default:{Light:"#bdc3c7",Dark:"#3a3a3a"},Light:{Light:"#ecf0f1",Dark:"#2c2c2c"},Strong:{Light:"#95a5a6",Dark:"#5a5a5a"}},Status:{Success:{Light:"#27ae60",Dark:"#5fc377"},Warning:{Light:"#f39c12",Dark:"#f0b84a"},Error:{Light:"#e74c3c",Dark:"#ff7373"},Info:{Light:"#3498db",Dark:"#5fb4ff"}},Scrollbar:{Track:{Light:"#ecf0f1",Dark:"#1f1f1f"},Thumb:{Light:"#bdc3c7",Dark:"#3f3f3f"},Hover:{Light:"#95a5a6",Dark:"#5a5a5a"}},Focus:{Outline:{Light:"#2255aa",Dark:"#5b8aff"}},Shadow:{Color:{Light:"rgba(0, 0, 0, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}}}},Brand:{Name:"Flow Modern",Tagline:"Clean modern flow editor look"}}},{}],49:[function(e,t,o){t.exports={Hash:"flow-mono",Name:"Flow Mono",Version:"0.0.1",Description:"High-contrast monochrome flow editor look. Paired light/dark — pure black on white or white on black.",Comprehensive:!0,Modes:{Strategy:"system",Default:"light"},Tokens:{Color:{Background:{Primary:{Light:"#ffffff",Dark:"#000000"},Secondary:{Light:"#f0f0f0",Dark:"#1a1a1a"},Tertiary:{Light:"#e0e0e0",Dark:"#262626"},Panel:{Light:"#ffffff",Dark:"#000000"},Hover:{Light:"#eeeeee",Dark:"#1f1f1f"},Selected:{Light:"#dddddd",Dark:"#333333"}},Text:{Primary:{Light:"#000000",Dark:"#ffffff"},Secondary:{Light:"#444444",Dark:"#cccccc"},Muted:{Light:"#888888",Dark:"#888888"},OnBrand:{Light:"#ffffff",Dark:"#000000"}},Brand:{Primary:{Light:"#444444",Dark:"#bbbbbb"},PrimaryHover:{Light:"#222222",Dark:"#dddddd"},Accent:{Light:"#666666",Dark:"#999999"}},Border:{Default:{Light:"#000000",Dark:"#ffffff"},Light:{Light:"#cccccc",Dark:"#333333"},Strong:{Light:"#000000",Dark:"#ffffff"}},Status:{Success:{Light:"#000000",Dark:"#ffffff"},Warning:{Light:"#000000",Dark:"#ffffff"},Error:{Light:"#000000",Dark:"#ffffff"},Info:{Light:"#000000",Dark:"#ffffff"}},Scrollbar:{Track:{Light:"#f0f0f0",Dark:"#1a1a1a"},Thumb:{Light:"#888888",Dark:"#888888"},Hover:{Light:"#444444",Dark:"#cccccc"}},Focus:{Outline:{Light:"#000000",Dark:"#ffffff"}},Shadow:{Color:{Light:"rgba(0, 0, 0, 0.25)",Dark:"rgba(255, 255, 255, 0.25)"}}}},Brand:{Name:"Flow Mono",Tagline:"Monochrome ink-on-paper"}}},{}],50:[function(e,t,o){t.exports={Hash:"flow-retro-80s",Name:"Flow Retro 80s",Version:"0.0.1",Description:"Neon-on-purple synthwave aesthetic for the flow editor. Single-mode (always dark) — '80s arcade glow.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#0a0015",Secondary:"#1a0a2e",Tertiary:"#2a0a4e",Panel:"#1a0a2e",Hover:"#2a0a4e",Selected:"#3a1466"},Text:{Primary:"#00ffff",Secondary:"#ff66ff",Muted:"#9966cc",OnBrand:"#0a0015"},Brand:{Primary:"#ff00ff",PrimaryHover:"#ff66ff",Accent:"#00ffff"},Border:{Default:"#ff00ff",Light:"#2a0a4e",Strong:"#ff00ff"},Status:{Success:"#00ff66",Warning:"#ffdd44",Error:"#ff4477",Info:"#00ffff"},Scrollbar:{Track:"#1a0a2e",Thumb:"#ff00ff",Hover:"#ff66ff"},Focus:{Outline:"#00ffff"},Shadow:{Color:"rgba(255, 0, 255, 0.4)"}}},Brand:{Name:"Flow Retro 80s",Tagline:"Neon synthwave glow"}}},{}],51:[function(e,t,o){t.exports={Hash:"flow-retro-90s",Name:"Flow Retro 90s",Version:"0.0.1",Description:"Windows-95 aesthetic — gray panels, navy title bars, teal desktop. Single-mode (always its specific palette).",Comprehensive:!0,Modes:{Strategy:"single",Default:"light"},Tokens:{Color:{Background:{Primary:"#008080",Secondary:"#c0c0c0",Tertiary:"#d0d0d0",Panel:"#c0c0c0",Hover:"#d0d0d0",Selected:"#a8c8e0"},Text:{Primary:"#000000",Secondary:"#404040",Muted:"#606060",OnBrand:"#ffffff"},Brand:{Primary:"#000080",PrimaryHover:"#0000a0",Accent:"#008000"},Border:{Default:"#808080",Light:"#a0a0a0",Strong:"#404040"},Status:{Success:"#008000",Warning:"#808000",Error:"#800000",Info:"#000080"},Scrollbar:{Track:"#c0c0c0",Thumb:"#808080",Hover:"#404040"},Focus:{Outline:"#008080"},Shadow:{Color:"#404040"}}},Brand:{Name:"Flow Retro 90s",Tagline:"Workstation chrome from the 90s"}}},{}],52:[function(e,t,o){t.exports={Hash:"flow-sketch",Name:"Flow Sketch",Version:"0.0.1",Description:"Warm-paper sketch aesthetic for the flow editor. Single-mode (always light) — sketches live on paper.",Comprehensive:!0,Modes:{Strategy:"single",Default:"light"},Tokens:{Color:{Background:{Primary:"#fffef5",Secondary:"#faf8ed",Tertiary:"#f0ece0",Panel:"#fffef5",Hover:"#f4f0e2",Selected:"#e8dfc8"},Text:{Primary:"#333333",Secondary:"#555555",Muted:"#888888",OnBrand:"#ffffff"},Brand:{Primary:"#2255aa",PrimaryHover:"#1a4488",Accent:"#c47b5a"},Border:{Default:"#444444",Light:"#ccccaa",Strong:"#222222"},Status:{Success:"#55aa77",Warning:"#d4a040",Error:"#c44836",Info:"#5577bb"},Scrollbar:{Track:"#f0ece0",Thumb:"#c5c0a8",Hover:"#9e9a82"},Focus:{Outline:"#2255aa"},Shadow:{Color:"rgba(0, 0, 0, 0.08)"}}},Brand:{Name:"Flow Sketch",Tagline:"Hand-drawn paper aesthetic"}}},{}],53:[function(e,t,o){t.exports={Hash:"flow-whiteboard",Name:"Flow Whiteboard",Version:"0.0.1",Description:"Minimal whiteboard aesthetic — transparent fills with colored brackets per node type. Single-mode (light).",Comprehensive:!0,Modes:{Strategy:"single",Default:"light"},Tokens:{Color:{Background:{Primary:"#ffffff",Secondary:"#fafafa",Tertiary:"#f5f5f5",Panel:"#ffffff",Hover:"#f0f0f0",Selected:"#e0eaff"},Text:{Primary:"#333333",Secondary:"#555555",Muted:"#999999",OnBrand:"#ffffff"},Brand:{Primary:"#2255aa",PrimaryHover:"#1a4488",Accent:"#1abc9c"},Border:{Default:"#888888",Light:"#cccccc",Strong:"#555555"},Status:{Success:"#27ae60",Warning:"#f39c12",Error:"#e74c3c",Info:"#3498db"},Scrollbar:{Track:"#f5f5f5",Thumb:"#cccccc",Hover:"#888888"},Focus:{Outline:"#2255aa"},Shadow:{Color:"rgba(0, 0, 0, 0.06)"}}},Brand:{Name:"Flow Whiteboard",Tagline:"Minimal whiteboard sketching"}}},{}],54:[function(e,t,o){t.exports={Hash:"forest",Name:"Forest",Category:"Fun",Version:"0.0.1",Description:"Deep greens and earth browns Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#1A2018",Secondary:"#141A12",Tertiary:"#1E2620",Panel:"#1C221A",Viewer:"#101410",Hover:"#283828",Selected:"#344834",Thumb:"#141A12"},Text:{Primary:"#D0DCC8",Secondary:"#B0C4A8",Muted:"#809878",Dim:"#607858",Placeholder:"#486040"},Brand:{Accent:"#6AAF5C",AccentHover:"#88CC78"},Border:{Default:"#2A3A28",Light:"#3A4A38"},Status:{Danger:"#CC4422",DangerMuted:"#884422"},Scrollbar:{Track:"#2A3A28",Hover:"#3A4A38"},Selection:{Background:"rgba(106, 175, 92, 0.25)"},Focus:{Outline:"#6AAF5C"},Syntax:{Keyword:"#D4E157",String:"#A5D6A7",Number:"#FFB74D",Comment:"#5D6F58",Operator:"#80CBC4",Punctuation:"#A8C8A0",Function:"#FFCC80",Variable:"#C8E6C9",Type:"#FFB74D",Builtin:"#FFB74D",Property:"#FF8A65",Tag:"#FF8A65",AttrName:"#FFB74D",AttrValue:"#A5D6A7"}},Typography:{Family:{Sans:"'Palatino Linotype', 'Book Antiqua', Palatino, serif",Mono:"'Courier New', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#B0C4A8",Accent:"#6AAF5C",Muted:"#607858",Light:"#1E2620",WarmBeige:"#22281E",TealTint:"#1A221A",Lavender:"#1E2420",AmberTint:"#262218",PdfFill:"#261A18",PdfText:"#CC4422"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.407Z",CompilerVersion:1}},{}],55:[function(e,t,o){t.exports={Hash:"hotdog",Name:"Hotdog",Category:"Fun",Version:"0.0.1",Description:"Red and mustard yellow, garish Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#8B0000",Secondary:"#6B0000",Tertiary:"#7B0000",Panel:"#750000",Viewer:"#550000",Hover:"#AA1111",Selected:"#BB3300",Thumb:"#6B0000"},Text:{Primary:"#FFD700",Secondary:"#FFC000",Muted:"#CC9900",Dim:"#AA7700",Placeholder:"#886600"},Brand:{Accent:"#FFD700",AccentHover:"#FFEE44"},Border:{Default:"#AA2222",Light:"#BB3333"},Status:{Danger:"#FFFF00",DangerMuted:"#CCCC00"},Scrollbar:{Track:"#AA2222",Hover:"#CC3333"},Selection:{Background:"rgba(255, 215, 0, 0.3)"},Focus:{Outline:"#FFD700"},Syntax:{Keyword:"#FFD800",String:"#FFFFFF",Number:"#FFD800",Comment:"#9C2828",Operator:"#FFD800",Punctuation:"#FFFFFF",Function:"#FFD800",Variable:"#FFFFFF",Type:"#FFD800",Builtin:"#FFD800",Property:"#FFD800",Tag:"#FFD800",AttrName:"#FFD800",AttrValue:"#FFFFFF"}},Typography:{Family:{Sans:"Impact, 'Arial Black', sans-serif",Mono:"'Courier New', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#FFC000",Accent:"#FFD700",Muted:"#AA7700",Light:"#7B0000",WarmBeige:"#800000",TealTint:"#6B0000",Lavender:"#780000",AmberTint:"#7A1000",PdfFill:"#6B0000",PdfText:"#FFFF00"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.407Z",CompilerVersion:1}},{}],56:[function(e,t,o){t.exports={Hash:"mobile-debug",Name:"Mobile Container Debug",Category:"Debug",Version:"0.0.1",Description:"Unique color per container for layout debugging Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"light"},Tokens:{Color:{Background:{Primary:"#FF0000",Secondary:"#00CCCC",Tertiary:"#00AA00",Panel:"#FFAA00",Viewer:"#333333",Hover:"rgba(255, 255, 255, 0.2)",Selected:"rgba(255, 255, 255, 0.3)",Thumb:"#AA00AA"},Text:{Primary:"#FFFFFF",Secondary:"#EEEEEE",Muted:"#CCCCCC",Dim:"#AAAAAA",Placeholder:"#888888"},Brand:{Accent:"#FFFF00",AccentHover:"#FFFF88"},Border:{Default:"#FFFFFF",Light:"#CCCCCC"},Status:{Danger:"#FF0000",DangerMuted:"#CC4444"},Scrollbar:{Track:"#888888",Hover:"#AAAAAA"},Selection:{Background:"rgba(255, 255, 0, 0.3)"},Focus:{Outline:"#FFFF00"},Syntax:{Keyword:"#A626A4",String:"#50A14F",Number:"#986801",Comment:"#A0A1A7",Operator:"#0184BC",Punctuation:"#383A42",Function:"#4078F2",Variable:"#383A42",Type:"#C18401",Builtin:"#986801",Property:"#E45649",Tag:"#E45649",AttrName:"#986801",AttrValue:"#50A14F"}},Typography:{Family:{Sans:"system-ui, -apple-system, sans-serif",Mono:"'SF Mono', 'Consolas', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#FFFFFF",Accent:"#FFFF00",Muted:"#CCCCCC",Light:"#333333",WarmBeige:"#FFAA00",TealTint:"#00CCCC",Lavender:"#AA00AA",AmberTint:"#FFAA00",PdfFill:"#FF4444",PdfText:"#FFFFFF"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.408Z",CompilerVersion:1}},{}],57:[function(e,t,o){t.exports={Hash:"neo-tokyo",Name:"Neo-Tokyo",Category:"Fun",Version:"0.0.1",Description:"Neon pink on dark navy Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#0D0D2B",Secondary:"#080820",Tertiary:"#121235",Panel:"#0F0F28",Viewer:"#060615",Hover:"#1A1A42",Selected:"#2A1845",Thumb:"#080820"},Text:{Primary:"#E8E0F0",Secondary:"#D0C8E0",Muted:"#9088A8",Dim:"#6860A0",Placeholder:"#504888"},Brand:{Accent:"#FF2D8A",AccentHover:"#FF5AA0"},Border:{Default:"#2A2050",Light:"#382868"},Status:{Danger:"#FF4466",DangerMuted:"#AA3355"},Scrollbar:{Track:"#2A2050",Hover:"#3A3068"},Selection:{Background:"rgba(255, 45, 138, 0.25)"},Focus:{Outline:"#FF2D8A"},Syntax:{Keyword:"#FF4E9F",String:"#A1FFCE",Number:"#FFD93D",Comment:"#807A9E",Operator:"#7DF9FF",Punctuation:"#C0BCEB",Function:"#FFCC80",Variable:"#E0D8FF",Type:"#FFD93D",Builtin:"#FFD93D",Property:"#FF6E6E",Tag:"#FF6E6E",AttrName:"#FFD93D",AttrValue:"#A1FFCE"}},Typography:{Family:{Sans:"'Courier New', monospace",Mono:"'Courier New', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#D0C8E0",Accent:"#FF2D8A",Muted:"#6860A0",Light:"#121235",WarmBeige:"#141438",TealTint:"#100E30",Lavender:"#141232",AmberTint:"#1A1228",PdfFill:"#1A1028",PdfText:"#FF4466"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.408Z",CompilerVersion:1}},{}],58:[function(e,t,o){t.exports={Hash:"night",Name:"Night",Category:"Grey",Version:"0.0.1",Description:"Near-black, minimal contrast Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#0A0A0A",Secondary:"#060606",Tertiary:"#0E0E0E",Panel:"#0C0C0C",Viewer:"#040404",Hover:"#161616",Selected:"#252525",Thumb:"#060606"},Text:{Primary:"#888888",Secondary:"#707070",Muted:"#555555",Dim:"#444444",Placeholder:"#333333"},Brand:{Accent:"#666666",AccentHover:"#808080"},Border:{Default:"#1A1A1A",Light:"#222222"},Status:{Danger:"#AA4444",DangerMuted:"#663333"},Scrollbar:{Track:"#1A1A1A",Hover:"#2A2A2A"},Selection:{Background:"rgba(102, 102, 102, 0.2)"},Focus:{Outline:"#666666"},Syntax:{Keyword:"#C28FFF",String:"#B0E0B0",Number:"#FFA070",Comment:"#888888",Operator:"#80C8FF",Punctuation:"#BBBBBB",Function:"#FFD080",Variable:"#DDDDDD",Type:"#FFB870",Builtin:"#FFB870",Property:"#FF9090",Tag:"#FF9090",AttrName:"#FFB870",AttrValue:"#B0E0B0"}},Typography:{Family:{Sans:"system-ui, -apple-system, sans-serif",Mono:"'SF Mono', 'Fira Code', 'Consolas', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#707070",Accent:"#666666",Muted:"#444444",Light:"#0E0E0E",WarmBeige:"#121212",TealTint:"#0C0C0C",Lavender:"#101010",AmberTint:"#141210",PdfFill:"#141010",PdfText:"#AA4444"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.408Z",CompilerVersion:1}},{}],59:[function(e,t,o){t.exports={Hash:"ocean",Name:"Ocean",Version:"0.0.1",Description:"Cool blue-greens (180-235°) with warm coral / amber punctuation (5-30°). Paired light/dark; feels like sea + sun on the horizon.",Comprehensive:!0,Modes:{Strategy:"system",Default:"light"},Tokens:{Color:{Background:{Primary:{Light:"#f4f9fb",Dark:"#0e1820"},Secondary:{Light:"#e8f1f5",Dark:"#15212b"},Tertiary:{Light:"#dde9ee",Dark:"#1f2c38"},Panel:{Light:"#ffffff",Dark:"#1a2632"},Hover:{Light:"#e0eef3",Dark:"#26323f"},Selected:{Light:"#c8e1ea",Dark:"#1e3a48"}},Text:{Primary:{Light:"#0e2832",Dark:"#e1ecf0"},Secondary:{Light:"#3a5662",Dark:"#a8c0c8"},Muted:{Light:"#6c828b",Dark:"#7a8e96"},Placeholder:{Light:"#90a4ad",Dark:"#5a6e76"}},Brand:{Primary:{Light:"#0e7c8a",Dark:"#4dc4d4"},PrimaryHover:{Light:"#0a6371",Dark:"#6dd4e2"},Accent:{Light:"#e8a050",Dark:"#f0b878"}},Border:{Default:{Light:"#c0d5dc",Dark:"#2c3d49"},Light:{Light:"#d8e6ec",Dark:"#1f2c38"},Strong:{Light:"#90b0bc",Dark:"#4a6470"}},Status:{Success:{Light:"#1f8a52",Dark:"#4dc97a"},Warning:{Light:"#d68910",Dark:"#f0b020"},Error:{Light:"#c93a3a",Dark:"#ff6464"},Info:{Light:"#0e7c8a",Dark:"#4dc4d4"}},Data:{1:{Light:"#0e7c8a",Dark:"#4dc4d4"},2:{Light:"#e8a050",Dark:"#f0b878"},3:{Light:"#1f8a52",Dark:"#4dc97a"},4:{Light:"#c93a3a",Dark:"#ff6464"},5:{Light:"#b07bac",Dark:"#cda6cf"},6:{Light:"#d68910",Dark:"#f0b020"},7:{Light:"#5a7f9e",Dark:"#82a0c4"},8:{Light:"#6c828b",Dark:"#a8c0c8"}},Scrollbar:{Track:{Light:"#dde9ee",Dark:"#15212b"},Thumb:{Light:"#a8c2cc",Dark:"#324658"},Hover:{Light:"#7a99a4",Dark:"#506876"}},Selection:{Background:{Light:"#c8e1ea",Dark:"#1e3a48"},Text:{Light:"#0e2832",Dark:"#e1ecf0"}},Focus:{Outline:{Light:"#0e7c8a",Dark:"#4dc4d4"}},Shadow:{Color:{Light:"rgba(14, 40, 50, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#0e7c8a",Dark:"#4dc4d4"},String:{Light:"#1f8a52",Dark:"#4dc97a"},Number:{Light:"#d68910",Dark:"#f0b020"},Comment:{Light:"#90a4ad",Dark:"#5a6e76"},Operator:{Light:"#3a5662",Dark:"#a8c0c8"},Punctuation:{Light:"#3a5662",Dark:"#a8c0c8"},Function:{Light:"#0e7c8a",Dark:"#4dc4d4"},Variable:{Light:"#0e2832",Dark:"#e1ecf0"},Type:{Light:"#e8a050",Dark:"#f0b878"},Builtin:{Light:"#d68910",Dark:"#f0b020"},Property:{Light:"#c93a3a",Dark:"#ff6464"},Tag:{Light:"#c93a3a",Dark:"#ff6464"},AttrName:{Light:"#d68910",Dark:"#f0b020"},AttrValue:{Light:"#1f8a52",Dark:"#4dc97a"}},Editor:{LineNumberBackground:{Light:"#e8f1f5",Dark:"#15212b"},LineNumberText:{Light:"#90a4ad",Dark:"#5a6e76"},CurrentLineHighlight:{Light:"#e0eef3",Dark:"#26323f"},SelectionBackground:{Light:"#c8e1ea",Dark:"#1e3a48"},GutterBorder:{Light:"#d8e6ec",Dark:"#1f2c38"}}},Typography:{Family:{Sans:"system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif",Serif:"Georgia, Cambria, Times New Roman, Times, serif",Mono:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.45",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Shadow:{SM:"0 1px 2px var(--theme-color-shadow-color)",MD:"0 2px 6px var(--theme-color-shadow-color)",LG:"0 6px 18px var(--theme-color-shadow-color)"},ZIndex:{Base:"0",Dropdown:"100",Sticky:"200",Overlay:"900",Modal:"1000",Toast:"2000",Tooltip:"3000"},Duration:{Fast:"100ms",Normal:"200ms",Slow:"400ms"}},Brand:{Name:"Ocean",Tagline:"Cool waters, warm sun"}}},{}],60:[function(e,t,o){t.exports={Hash:"pict-default",Name:"Pict Default",Version:"0.0.1",Description:"The reference paired light/dark theme for pict-based applications. Neutral palette suitable for any app; dark mode is mid-grey rather than pure black to reduce eye strain.",Comprehensive:!0,Modes:{Strategy:"system",Default:"light"},Tokens:{Color:{Background:{Primary:{Light:"#ffffff",Dark:"#1a1a1a"},Secondary:{Light:"#f5f5f5",Dark:"#242424"},Tertiary:{Light:"#ebebeb",Dark:"#2e2e2e"},Panel:{Light:"#ffffff",Dark:"#222222"},Hover:{Light:"#f0f0f0",Dark:"#2a2a2a"},Selected:{Light:"#e0eaff",Dark:"#2a3550"}},Text:{Primary:{Light:"#1a1a1a",Dark:"#ededed"},Secondary:{Light:"#454545",Dark:"#bdbdbd"},Muted:{Light:"#6b6b6b",Dark:"#888888"},Placeholder:{Light:"#9a9a9a",Dark:"#6a6a6a"}},Brand:{Primary:{Light:"#3357c7",Dark:"#6b8eff"},PrimaryHover:{Light:"#2848b3",Dark:"#88a4ff"},Accent:{Light:"#c75033",Dark:"#ff8a6b"}},Border:{Default:{Light:"#d6d6d6",Dark:"#3a3a3a"},Light:{Light:"#e9e9e9",Dark:"#2c2c2c"},Strong:{Light:"#a0a0a0",Dark:"#5a5a5a"}},Status:{Success:{Light:"#2e7a3a",Dark:"#5fc377"},Warning:{Light:"#a86b00",Dark:"#f0b84a"},Error:{Light:"#b62828",Dark:"#ff7373"},Info:{Light:"#1f6fb5",Dark:"#5fb4ff"}},Data:{1:{Light:"#3357c7",Dark:"#6b8eff"},2:{Light:"#c75033",Dark:"#ff8a6b"},3:{Light:"#2e7a3a",Dark:"#5fc377"},4:{Light:"#a86b00",Dark:"#f0b84a"},5:{Light:"#6b3aac",Dark:"#b08eff"},6:{Light:"#1f6fb5",Dark:"#5fb4ff"},7:{Light:"#c63a8e",Dark:"#ff7fb6"},8:{Light:"#6b6b6b",Dark:"#bdbdbd"}},Scrollbar:{Track:{Light:"#ebebeb",Dark:"#1f1f1f"},Thumb:{Light:"#c2c2c2",Dark:"#3f3f3f"},Hover:{Light:"#a0a0a0",Dark:"#5a5a5a"}},Selection:{Background:{Light:"#bcd2ff",Dark:"#3a4f7a"},Text:{Light:"#1a1a1a",Dark:"#ededed"}},Focus:{Outline:{Light:"#3357c7",Dark:"#6b8eff"}},Shadow:{Color:{Light:"rgba(0, 0, 0, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#a626a4",Dark:"#c678dd"},String:{Light:"#50a14f",Dark:"#98c379"},Number:{Light:"#986801",Dark:"#d19a66"},Comment:{Light:"#a0a1a7",Dark:"#7f848e"},Operator:{Light:"#0184bc",Dark:"#56b6c2"},Punctuation:{Light:"#383a42",Dark:"#abb2bf"},Function:{Light:"#4078f2",Dark:"#61afef"},Variable:{Light:"#383a42",Dark:"#e06c75"},Type:{Light:"#c18401",Dark:"#e5c07b"},Builtin:{Light:"#986801",Dark:"#d19a66"},Property:{Light:"#e45649",Dark:"#e06c75"},Tag:{Light:"#e45649",Dark:"#e06c75"},AttrName:{Light:"#986801",Dark:"#d19a66"},AttrValue:{Light:"#50a14f",Dark:"#98c379"}},Editor:{LineNumberBackground:{Light:"#f5f5f5",Dark:"#1f1f1f"},LineNumberText:{Light:"#9a9a9a",Dark:"#6a6a6a"},CurrentLineHighlight:{Light:"#f0f0f0",Dark:"#2a2a2a"},SelectionBackground:{Light:"#bcd2ff",Dark:"#3a4f7a"},GutterBorder:{Light:"#e9e9e9",Dark:"#2c2c2c"}}},Typography:{Family:{Sans:"system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif",Serif:"Georgia, Cambria, Times New Roman, Times, serif",Mono:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.45",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Shadow:{SM:"0 1px 2px var(--theme-color-shadow-color)",MD:"0 2px 6px var(--theme-color-shadow-color)",LG:"0 6px 18px var(--theme-color-shadow-color)"},ZIndex:{Base:"0",Dropdown:"100",Sticky:"200",Overlay:"900",Modal:"1000",Toast:"2000",Tooltip:"3000"},Duration:{Fast:"100ms",Normal:"200ms",Slow:"400ms"}},Brand:{Name:"Pict",Tagline:"A JavaScript MVC framework for building web applications."},CSS:[{Hash:"pict-default-brand-accents",Priority:600,Content:"/* pict-default — subtle brand-aware accents.\n Falls back gracefully to theme-color tokens when no brand is registered,\n so non-branded apps still look right. */\na { text-decoration-color: var(--brand-color-primary-mode, var(--theme-color-brand-primary, currentColor)); text-decoration-thickness: 2px; text-underline-offset: 3px; }\nh1 { border-bottom: 2px solid var(--brand-color-primary-mode, var(--theme-color-border-default, transparent)); padding-bottom: 6px; }\nh2 { border-bottom: 1px solid var(--brand-color-secondary-mode, var(--theme-color-border-light, transparent)); padding-bottom: 4px; }"}]}},{}],61:[function(e,t,o){t.exports={Hash:"playground-corp",Name:"Playground Corp",Version:"0.0.1",Description:"A different paired starter — corporate teal palette, rounder corners.",Comprehensive:!0,Modes:{Strategy:"system",Default:"light"},Tokens:{Color:{Background:{Primary:{Light:"#fbfbfd",Dark:"#0e1416"},Secondary:{Light:"#eef3f6",Dark:"#152024"},Tertiary:{Light:"#dde7ec",Dark:"#1e2c30"},Panel:{Light:"#ffffff",Dark:"#162126"},Hover:{Light:"#e5edf1",Dark:"#1d292e"}},Text:{Primary:{Light:"#0a1d22",Dark:"#e3edf0"},Secondary:{Light:"#3a5b65",Dark:"#a8c0c8"},Muted:{Light:"#647e87",Dark:"#7a929a"},OnBrand:{Light:"#ffffff",Dark:"#ffffff"}},Brand:{Primary:{Light:"#117a8b",Dark:"#3ec0d4"},PrimaryHover:{Light:"#0e6271",Dark:"#5fd0e0"},Accent:{Light:"#d97706",Dark:"#fb923c"}},Border:{Default:{Light:"#cfdce1",Dark:"#2c3a3f"},Strong:{Light:"#86a3ac",Dark:"#4d5e64"}},Status:{Success:{Light:"#0f7a52",Dark:"#34d399"},Warning:{Light:"#b45309",Dark:"#fbbf24"},Error:{Light:"#9f1239",Dark:"#fb7185"},Info:{Light:"#1e6fbe",Dark:"#60a5fa"}},Syntax:{Keyword:{Light:"#a626a4",Dark:"#c678dd"},String:{Light:"#50a14f",Dark:"#98c379"},Number:{Light:"#986801",Dark:"#d19a66"},Comment:{Light:"#a0a1a7",Dark:"#7f848e"},Operator:{Light:"#0184bc",Dark:"#56b6c2"},Punctuation:{Light:"#383a42",Dark:"#abb2bf"},Function:{Light:"#4078f2",Dark:"#61afef"},Variable:{Light:"#383a42",Dark:"#e06c75"},Type:{Light:"#c18401",Dark:"#e5c07b"},Builtin:{Light:"#986801",Dark:"#d19a66"},Property:{Light:"#e45649",Dark:"#e06c75"},Tag:{Light:"#e45649",Dark:"#e06c75"},AttrName:{Light:"#986801",Dark:"#d19a66"},AttrValue:{Light:"#50a14f",Dark:"#98c379"}}},Typography:{Family:{Sans:"Inter, system-ui, sans-serif",Mono:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"},Size:{SM:"0.875rem",MD:"1rem",LG:"1.25rem"},Weight:{Regular:"400",Bold:"700"}},Spacing:{XS:"4px",SM:"8px",MD:"14px",LG:"20px",XL:"28px"},Radius:{SM:"4px",MD:"10px",LG:"16px"}},Brand:{Name:"Corp"},Aliases:{"--pict-modal-overlay-bg":"Color.Background.Tertiary","--pict-modal-bg":"Color.Background.Panel","--pict-modal-fg":"Color.Text.Primary","--pict-modal-border":"Color.Border.Default","--pict-modal-shadow":"Color.Border.Strong","--pict-modal-header-bg":"Color.Background.Secondary","--pict-modal-header-fg":"Color.Text.Primary","--pict-modal-header-border":"Color.Border.Default","--pict-modal-btn-bg":"Color.Background.Secondary","--pict-modal-btn-fg":"Color.Text.Primary","--pict-modal-btn-hover-bg":"Color.Background.Hover","--pict-modal-btn-primary-bg":"Color.Brand.Primary","--pict-modal-btn-primary-fg":"Color.Text.OnBrand","--pict-modal-btn-primary-hover-bg":"Color.Brand.PrimaryHover","--pict-modal-btn-danger-bg":"Color.Status.Error","--pict-modal-btn-danger-fg":"Color.Text.OnBrand","--pict-modal-btn-danger-hover-bg":"Color.Status.Error","--pict-modal-toast-bg":"Color.Background.Panel","--pict-modal-toast-fg":"Color.Text.Primary","--pict-modal-toast-shadow":"Color.Border.Strong","--pict-modal-toast-success-bg":"Color.Status.Success","--pict-modal-toast-error-bg":"Color.Status.Error","--pict-modal-toast-warning-bg":"Color.Status.Warning","--pict-modal-toast-info-bg":"Color.Status.Info","--pict-modal-tooltip-bg":"Color.Background.Tertiary","--pict-modal-tooltip-fg":"Color.Text.Primary","--pict-modal-font-family":"Typography.Family.Sans","--pict-um-bg":"Color.Background.Panel","--pict-um-fg":"Color.Text.Primary","--pict-um-muted":"Color.Text.Muted","--pict-um-accent":"Color.Brand.Primary","--pict-um-border":"Color.Border.Default","--pict-um-border-soft":"Color.Border.Light","--pict-um-input-bg":"Color.Background.Primary","--pict-um-pill-bg":"Color.Background.Tertiary","--pict-um-font":"Typography.Family.Sans"}}},{}],62:[function(e,t,o){t.exports={Hash:"retold-content-system",Name:"Retold Content System",Version:"0.0.1",Description:"Default palette for the Retold Content System editor — warm beige with teal accents. Light side preserves the original retold-content-system.css palette verbatim; dark side keeps the teal accent and warms the backgrounds into a deep walnut/charcoal range so dark mode reads as the same family of values rather than a generic dark theme.",Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#F5F3EE",Dark:"#1F1B17"},Secondary:{Light:"#FAF8F4",Dark:"#2A251F"},Tertiary:{Light:"#F0EDE8",Dark:"#332D26"},Panel:{Light:"#FFFFFF",Dark:"#26221C"},Hover:{Light:"#EDE9E3",Dark:"#383028"},Selected:{Light:"#DCE9E7",Dark:"#1E3833"}},Text:{Primary:{Light:"#3D3229",Dark:"#E8DCC8"},Secondary:{Light:"#5E5549",Dark:"#C0B5A4"},Muted:{Light:"#8A7F72",Dark:"#8E8478"},Placeholder:{Light:"#A89E91",Dark:"#6E6457"},OnBrand:{Light:"#FFFFFF",Dark:"#1F1B17"}},Brand:{Primary:{Light:"#2E7D74",Dark:"#4FB3A6"},PrimaryHover:{Light:"#3A9E92",Dark:"#65CBBE"},Accent:{Light:"#2E7D74",Dark:"#4FB3A6"},AccentHover:{Light:"#3A9E92",Dark:"#65CBBE"}},Border:{Default:{Light:"#DDD6CA",Dark:"#3F362C"},Light:{Light:"#E8E2D7",Dark:"#33291F"},Strong:{Light:"#C4BDB0",Dark:"#5A4F40"}},Status:{Success:{Light:"#7BC47F",Dark:"#8FD493"},Warning:{Light:"#E8A94D",Dark:"#F0BE6E"},Error:{Light:"#D9534F",Dark:"#E87B78"},Info:{Light:"#5DA6C7",Dark:"#7FBDD8"}},Data:{1:{Light:"#2E7D74",Dark:"#4FB3A6"},2:{Light:"#E8A94D",Dark:"#F0BE6E"},3:{Light:"#7BC47F",Dark:"#8FD493"},4:{Light:"#D9534F",Dark:"#E87B78"},5:{Light:"#A07ACC",Dark:"#BCA0DC"},6:{Light:"#5DA6C7",Dark:"#7FBDD8"},7:{Light:"#C46B8A",Dark:"#D8919E"},8:{Light:"#8A7F72",Dark:"#B8AFA4"}},Scrollbar:{Track:{Light:"#F5F0E8",Dark:"#26221C"},Thumb:{Light:"#C4BDB0",Dark:"#4A4036"},Hover:{Light:"#8A7F72",Dark:"#6A5F50"}},Selection:{Background:{Light:"#CDE3E0",Dark:"#2E5B55"},Text:{Light:"#3D3229",Dark:"#E8DCC8"}},Focus:{Outline:{Light:"#2E7D74",Dark:"#4FB3A6"}},Shadow:{Color:{Light:"rgba(61, 50, 41, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#A0532E",Dark:"#E89A6E"},String:{Light:"#3F8A52",Dark:"#8FD493"},Number:{Light:"#A86B00",Dark:"#E8A94D"},Comment:{Light:"#8A7F72",Dark:"#8E8478"},Operator:{Light:"#2E7D74",Dark:"#4FB3A6"},Punctuation:{Light:"#5E5549",Dark:"#C0B5A4"},Function:{Light:"#2E5E96",Dark:"#7FBDD8"},Variable:{Light:"#3D3229",Dark:"#E8DCC8"},Type:{Light:"#A86B00",Dark:"#E8A94D"},Builtin:{Light:"#A86B00",Dark:"#E8A94D"},Property:{Light:"#A0532E",Dark:"#E89A6E"},Tag:{Light:"#A0532E",Dark:"#E89A6E"},AttrName:{Light:"#A86B00",Dark:"#E8A94D"},AttrValue:{Light:"#3F8A52",Dark:"#8FD493"}}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.5",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Layout:{SidebarWidth:"250px",TopbarHeight:"48px",StatusbarHeight:"28px"}},Brand:{Name:"Retold Content",Tagline:"Author content for the Retold ecosystem."}}},{}],63:[function(e,t,o){t.exports={Hash:"retold-default",Name:"Retold Default",Version:"0.0.1",Description:"The canonical paired light/dark theme for the Retold ecosystem. Neutral palette suitable for any retold-based app; dark mode is mid-grey rather than pure black to reduce eye strain.",Comprehensive:!0,Modes:{Strategy:"system",Default:"light"},Tokens:{Color:{Background:{Primary:{Light:"#ffffff",Dark:"#1a1a1a"},Secondary:{Light:"#f5f5f5",Dark:"#242424"},Tertiary:{Light:"#ebebeb",Dark:"#2e2e2e"},Panel:{Light:"#ffffff",Dark:"#222222"},Hover:{Light:"#f0f0f0",Dark:"#2a2a2a"},Selected:{Light:"#e0eaff",Dark:"#2a3550"}},Text:{Primary:{Light:"#1a1a1a",Dark:"#ededed"},Secondary:{Light:"#454545",Dark:"#bdbdbd"},Muted:{Light:"#6b6b6b",Dark:"#888888"},Placeholder:{Light:"#9a9a9a",Dark:"#6a6a6a"}},Brand:{Primary:{Light:"#3357c7",Dark:"#6b8eff"},PrimaryHover:{Light:"#2848b3",Dark:"#88a4ff"},Accent:{Light:"#c75033",Dark:"#ff8a6b"}},Border:{Default:{Light:"#d6d6d6",Dark:"#3a3a3a"},Light:{Light:"#e9e9e9",Dark:"#2c2c2c"},Strong:{Light:"#a0a0a0",Dark:"#5a5a5a"}},Status:{Success:{Light:"#2e7a3a",Dark:"#5fc377"},Warning:{Light:"#a86b00",Dark:"#f0b84a"},Error:{Light:"#b62828",Dark:"#ff7373"},Info:{Light:"#1f6fb5",Dark:"#5fb4ff"}},Data:{1:{Light:"#3357c7",Dark:"#6b8eff"},2:{Light:"#c75033",Dark:"#ff8a6b"},3:{Light:"#2e7a3a",Dark:"#5fc377"},4:{Light:"#a86b00",Dark:"#f0b84a"},5:{Light:"#6b3aac",Dark:"#b08eff"},6:{Light:"#1f6fb5",Dark:"#5fb4ff"},7:{Light:"#c63a8e",Dark:"#ff7fb6"},8:{Light:"#6b6b6b",Dark:"#bdbdbd"}},Scrollbar:{Track:{Light:"#ebebeb",Dark:"#1f1f1f"},Thumb:{Light:"#c2c2c2",Dark:"#3f3f3f"},Hover:{Light:"#a0a0a0",Dark:"#5a5a5a"}},Selection:{Background:{Light:"#bcd2ff",Dark:"#3a4f7a"},Text:{Light:"#1a1a1a",Dark:"#ededed"}},Focus:{Outline:{Light:"#3357c7",Dark:"#6b8eff"}},Shadow:{Color:{Light:"rgba(0, 0, 0, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#a626a4",Dark:"#c678dd"},String:{Light:"#50a14f",Dark:"#98c379"},Number:{Light:"#986801",Dark:"#d19a66"},Comment:{Light:"#a0a1a7",Dark:"#7f848e"},Operator:{Light:"#0184bc",Dark:"#56b6c2"},Punctuation:{Light:"#383a42",Dark:"#abb2bf"},Function:{Light:"#4078f2",Dark:"#61afef"},Variable:{Light:"#383a42",Dark:"#e06c75"},Type:{Light:"#c18401",Dark:"#e5c07b"},Builtin:{Light:"#986801",Dark:"#d19a66"},Property:{Light:"#e45649",Dark:"#e06c75"},Tag:{Light:"#e45649",Dark:"#e06c75"},AttrName:{Light:"#986801",Dark:"#d19a66"},AttrValue:{Light:"#50a14f",Dark:"#98c379"}},Editor:{LineNumberBackground:{Light:"#f5f5f5",Dark:"#1f1f1f"},LineNumberText:{Light:"#9a9a9a",Dark:"#6a6a6a"},CurrentLineHighlight:{Light:"#f0f0f0",Dark:"#2a2a2a"},SelectionBackground:{Light:"#bcd2ff",Dark:"#3a4f7a"},GutterBorder:{Light:"#e9e9e9",Dark:"#2c2c2c"}}},Typography:{Family:{Sans:"system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif",Serif:"Georgia, Cambria, Times New Roman, Times, serif",Mono:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.45",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Shadow:{SM:"0 1px 2px var(--theme-color-shadow-color)",MD:"0 2px 6px var(--theme-color-shadow-color)",LG:"0 6px 18px var(--theme-color-shadow-color)"},ZIndex:{Base:"0",Dropdown:"100",Sticky:"200",Overlay:"900",Modal:"1000",Toast:"2000",Tooltip:"3000"},Duration:{Fast:"100ms",Normal:"200ms",Slow:"400ms"}},Brand:{Name:"Retold",Tagline:"What is software if not a tool to tell stories."},CSS:[{Hash:"retold-default-brand-accents",Priority:600,Content:"/* pict-default — subtle brand-aware accents.\n Falls back gracefully to theme-color tokens when no brand is registered,\n so non-branded apps still look right. */\na { text-decoration-color: var(--brand-color-primary-mode, var(--theme-color-brand-primary, currentColor)); text-decoration-thickness: 2px; text-underline-offset: 3px; }\nh1 { border-bottom: 2px solid var(--brand-color-primary-mode, var(--theme-color-border-default, transparent)); padding-bottom: 6px; }\nh2 { border-bottom: 1px solid var(--brand-color-secondary-mode, var(--theme-color-border-light, transparent)); padding-bottom: 4px; }"}]}},{}],64:[function(e,t,o){t.exports={Hash:"retold-labs-cyberpunk",Name:"Retold Labs Cyberpunk",Version:"0.0.1",Description:'retold-labs’ neon "cyberpunk" identity — cyan/magenta on near-black (dark) or violet on light. Preserves the original cyberpunk-light / cyberpunk-dark palettes verbatim.',Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#eae8f0",Dark:"#0a0a12"},Secondary:{Light:"#ddd8ea",Dark:"#12101e"},Tertiary:{Light:"#ddd8ea",Dark:"#12101e"},Panel:{Light:"#f4f2fa",Dark:"#1a1628"},Sidebar:{Light:"#1e1430",Dark:"#06060e"},Hover:{Light:"rgba(130, 0, 200, 0.06)",Dark:"rgba(0, 255, 255, 0.08)"},Selected:{Light:"rgba(138, 0, 212, 0.10)",Dark:"rgba(0, 229, 255, 0.12)"}},Text:{Primary:{Light:"#1a1028",Dark:"#e8e0f0"},Secondary:{Light:"#4a3868",Dark:"#b0a8c8"},Muted:{Light:"#7a6a98",Dark:"#6a6488"},Placeholder:{Light:"#7a6a98",Dark:"#6a6488"},OnBrand:{Light:"#d0c8e0",Dark:"#d0c8e0"}},Brand:{Primary:{Light:"#8a00d4",Dark:"#00e5ff"},PrimaryHover:{Light:"#b040f0",Dark:"#60f0ff"},Accent:{Light:"#8a00d4",Dark:"#00e5ff"},AccentHover:{Light:"#b040f0",Dark:"#60f0ff"}},Border:{Default:{Light:"#c8c0d8",Dark:"#2a2440"},Light:{Light:"#c8c0d8",Dark:"#2a2440"},Strong:{Light:"#2a2040",Dark:"#1a1430"}},Status:{Success:{Light:"#00a050",Dark:"#39ff14"},Warning:{Light:"#d41878",Dark:"#ff2ec4"},Error:{Light:"#c82050",Dark:"#ff3860"},Info:{Light:"#8a00d4",Dark:"#00e5ff"}},Scrollbar:{Track:{Light:"#ddd8ea",Dark:"#12101e"},Thumb:{Light:"#c8c0d8",Dark:"#2a2440"},Hover:{Light:"#7a6a98",Dark:"#6a6488"}},Selection:{Background:{Light:"rgba(138, 0, 212, 0.10)",Dark:"rgba(0, 229, 255, 0.12)"},Text:{Light:"#1a1028",Dark:"#e8e0f0"}},Focus:{Outline:{Light:"#8a00d4",Dark:"#00e5ff"}},Shadow:{Color:{Light:"rgba(26, 16, 40, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#8a00d4",Dark:"#00e5ff"},String:{Light:"#00a050",Dark:"#39ff14"},Number:{Light:"#d41878",Dark:"#ff2ec4"},Comment:{Light:"#7a6a98",Dark:"#6a6488"},Operator:{Light:"#8a00d4",Dark:"#00e5ff"},Punctuation:{Light:"#4a3868",Dark:"#b0a8c8"},Function:{Light:"#8a00d4",Dark:"#00e5ff"},Variable:{Light:"#1a1028",Dark:"#e8e0f0"},Type:{Light:"#d41878",Dark:"#ff2ec4"},Builtin:{Light:"#d41878",Dark:"#ff2ec4"},Property:{Light:"#c82050",Dark:"#ff3860"},Tag:{Light:"#8a00d4",Dark:"#00e5ff"},AttrName:{Light:"#d41878",Dark:"#ff2ec4"},AttrValue:{Light:"#00a050",Dark:"#39ff14"}}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.5",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Layout:{SidebarWidth:"230px",TopbarHeight:"52px",StatusbarHeight:"28px"}},Brand:{Name:"Retold Labs",Tagline:"Run, compare, and distribute ML experiments across the mesh"}}},{}],65:[function(e,t,o){t.exports={Hash:"retold-labs-retro",Name:"Retold Labs Retro",Version:"0.0.1",Description:'retold-labs’ "retro" identity — amber/green phosphor on dark or sepia/olive on light. Preserves the original retro-light / retro-dark palettes verbatim.',Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#f5f0e0",Dark:"#0c0c08"},Secondary:{Light:"#ebe4d0",Dark:"#161610"},Tertiary:{Light:"#ebe4d0",Dark:"#161610"},Panel:{Light:"#faf6e8",Dark:"#1e1e14"},Sidebar:{Light:"#3a3020",Dark:"#080804"},Hover:{Light:"rgba(140, 80, 20, 0.06)",Dark:"rgba(255, 176, 0, 0.08)"},Selected:{Light:"rgba(140, 80, 20, 0.10)",Dark:"rgba(255, 176, 0, 0.12)"}},Text:{Primary:{Light:"#2e2418",Dark:"#d0c8a0"},Secondary:{Light:"#5c4a30",Dark:"#a09870"},Muted:{Light:"#8a7450",Dark:"#706848"},Placeholder:{Light:"#8a7450",Dark:"#706848"},OnBrand:{Light:"#d8c8a0",Dark:"#c8b870"}},Brand:{Primary:{Light:"#8c5014",Dark:"#ffb000"},PrimaryHover:{Light:"#b06820",Dark:"#ffc840"},Accent:{Light:"#8c5014",Dark:"#ffb000"},AccentHover:{Light:"#b06820",Dark:"#ffc840"}},Border:{Default:{Light:"#d0c4a8",Dark:"#2a2a1e"},Light:{Light:"#d0c4a8",Dark:"#2a2a1e"},Strong:{Light:"#4a4030",Dark:"#1a1a10"}},Status:{Success:{Light:"#2e7830",Dark:"#40c850"},Warning:{Light:"#2e7830",Dark:"#40c850"},Error:{Light:"#a03020",Dark:"#e04030"},Info:{Light:"#8c5014",Dark:"#ffb000"}},Scrollbar:{Track:{Light:"#ebe4d0",Dark:"#161610"},Thumb:{Light:"#d0c4a8",Dark:"#2a2a1e"},Hover:{Light:"#8a7450",Dark:"#706848"}},Selection:{Background:{Light:"rgba(140, 80, 20, 0.10)",Dark:"rgba(255, 176, 0, 0.12)"},Text:{Light:"#2e2418",Dark:"#d0c8a0"}},Focus:{Outline:{Light:"#8c5014",Dark:"#ffb000"}},Shadow:{Color:{Light:"rgba(46, 36, 24, 0.12)",Dark:"rgba(0, 0, 0, 0.55)"}},Syntax:{Keyword:{Light:"#8c5014",Dark:"#ffb000"},String:{Light:"#2e7830",Dark:"#40c850"},Number:{Light:"#2e7830",Dark:"#40c850"},Comment:{Light:"#8a7450",Dark:"#706848"},Operator:{Light:"#8c5014",Dark:"#ffb000"},Punctuation:{Light:"#5c4a30",Dark:"#a09870"},Function:{Light:"#8c5014",Dark:"#ffb000"},Variable:{Light:"#2e2418",Dark:"#d0c8a0"},Type:{Light:"#2e7830",Dark:"#40c850"},Builtin:{Light:"#2e7830",Dark:"#40c850"},Property:{Light:"#a03020",Dark:"#e04030"},Tag:{Light:"#8c5014",Dark:"#ffb000"},AttrName:{Light:"#2e7830",Dark:"#40c850"},AttrValue:{Light:"#2e7830",Dark:"#40c850"}}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.5",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Layout:{SidebarWidth:"230px",TopbarHeight:"52px",StatusbarHeight:"28px"}},Brand:{Name:"Retold Labs",Tagline:"Run, compare, and distribute ML experiments across the mesh"}}},{}],66:[function(e,t,o){t.exports={Hash:"retold-labs",Name:"Retold Labs",Version:"0.0.1",Description:'retold-labs’ original "professional" identity — warm beige with teal accents and a deep teal sidebar. Light side preserves professional-light verbatim; dark side preserves professional-dark.',Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#faf6f0",Dark:"#14201e"},Secondary:{Light:"#f0ebe2",Dark:"#1a2c2a"},Tertiary:{Light:"#f0ebe2",Dark:"#1a2c2a"},Panel:{Light:"#ffffff",Dark:"#1e3532"},Sidebar:{Light:"#1a3a3a",Dark:"#0e1a18"},Hover:{Light:"rgba(13, 138, 138, 0.06)",Dark:"rgba(45, 212, 191, 0.08)"},Selected:{Light:"rgba(13, 138, 138, 0.10)",Dark:"rgba(45, 212, 191, 0.12)"}},Text:{Primary:{Light:"#2c2416",Dark:"#e0ebe8"},Secondary:{Light:"#5c4f3d",Dark:"#a8bfb8"},Muted:{Light:"#8a7d6b",Dark:"#6a8a82"},Placeholder:{Light:"#8a7d6b",Dark:"#6a8a82"},OnBrand:{Light:"#c8dcd8",Dark:"#c8dcd8"}},Brand:{Primary:{Light:"#0d8a8a",Dark:"#2dd4bf"},PrimaryHover:{Light:"#14b8a6",Dark:"#5eead4"},Accent:{Light:"#0d8a8a",Dark:"#2dd4bf"},AccentHover:{Light:"#14b8a6",Dark:"#5eead4"}},Border:{Default:{Light:"#ddd5c8",Dark:"#2a4a44"},Light:{Light:"#ddd5c8",Dark:"#2a4a44"},Strong:{Light:"#2a5454",Dark:"#1e3a36"}},Status:{Success:{Light:"#2e9e5a",Dark:"#4ade80"},Warning:{Light:"#e07830",Dark:"#f59e4a"},Error:{Light:"#c9442e",Dark:"#f87171"},Info:{Light:"#0d8a8a",Dark:"#2dd4bf"}},Scrollbar:{Track:{Light:"#f0ebe2",Dark:"#1a2c2a"},Thumb:{Light:"#ddd5c8",Dark:"#2a4a44"},Hover:{Light:"#8a7d6b",Dark:"#6a8a82"}},Selection:{Background:{Light:"rgba(13, 138, 138, 0.10)",Dark:"rgba(45, 212, 191, 0.12)"},Text:{Light:"#2c2416",Dark:"#e0ebe8"}},Focus:{Outline:{Light:"#0d8a8a",Dark:"#2dd4bf"}},Shadow:{Color:{Light:"rgba(44, 36, 22, 0.12)",Dark:"rgba(0, 0, 0, 0.45)"}},Syntax:{Keyword:{Light:"#0d8a8a",Dark:"#2dd4bf"},String:{Light:"#2e9e5a",Dark:"#4ade80"},Number:{Light:"#e07830",Dark:"#f59e4a"},Comment:{Light:"#8a7d6b",Dark:"#6a8a82"},Operator:{Light:"#0d8a8a",Dark:"#2dd4bf"},Punctuation:{Light:"#5c4f3d",Dark:"#a8bfb8"},Function:{Light:"#0d8a8a",Dark:"#2dd4bf"},Variable:{Light:"#2c2416",Dark:"#e0ebe8"},Type:{Light:"#e07830",Dark:"#f59e4a"},Builtin:{Light:"#e07830",Dark:"#f59e4a"},Property:{Light:"#c9442e",Dark:"#f87171"},Tag:{Light:"#0d8a8a",Dark:"#2dd4bf"},AttrName:{Light:"#e07830",Dark:"#f59e4a"},AttrValue:{Light:"#2e9e5a",Dark:"#4ade80"}}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"500",Bold:"700"},LineHeight:{Tight:"1.2",Normal:"1.5",Loose:"1.7"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"2px",MD:"4px",LG:"8px",XL:"12px",Pill:"999px"},Layout:{SidebarWidth:"230px",TopbarHeight:"52px",StatusbarHeight:"28px"}},Brand:{Name:"Retold Labs",Tagline:"Run, compare, and distribute ML experiments across the mesh"}}},{}],67:[function(e,t,o){t.exports={Hash:"retold-manager",Name:"Retold Manager",Description:"Default palette for the Retold Manager application — GitHub-style dark on slate with a parallel light variant. Dark side mirrors retold-manager.css's original colors verbatim; light side is a sympathetic translation tuned for daytime use. The retold-manager.css :root block proxies its --color-* names through these --theme-color-* tokens (with the original hexes as fallbacks), so this theme drives the whole app cleanly and other catalog themes still skin most of it.",Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#f6f8fa",Dark:"#0e1116"},Secondary:{Light:"#eef1f4",Dark:"#161b22"},Tertiary:{Light:"#e4e8ec",Dark:"#1c2128"},Panel:{Light:"#ffffff",Dark:"#161b22"},PanelAlt:{Light:"#f0f3f6",Dark:"#1c2128"},Hover:{Light:"#eaeef2",Dark:"#1c2128"},Selected:{Light:"#dbe7ff",Dark:"#243454"}},Border:{Default:{Light:"#d0d7de",Dark:"#30363d"},Light:{Light:"#e1e4e8",Dark:"#21262d"},Strong:{Light:"#a8b1bb",Dark:"#484f58"}},Brand:{Primary:{Light:"#0969da",Dark:"#2f81f7"},PrimaryHover:{Light:"#0550ae",Dark:"#1f6feb"},Accent:{Light:"#0969da",Dark:"#2f81f7"},AccentHover:{Light:"#0550ae",Dark:"#1f6feb"}},Text:{Primary:{Light:"#1f2328",Dark:"#e6edf3"},Secondary:{Light:"#3b424a",Dark:"#c9d1d9"},Muted:{Light:"#656d76",Dark:"#8b949e"},Placeholder:{Light:"#8c959f",Dark:"#6e7681"},OnBrand:{Light:"#ffffff",Dark:"#ffffff"}},Status:{Success:{Light:"#1a7f37",Dark:"#3fb950"},Danger:{Light:"#cf222e",Dark:"#f85149"},Warning:{Light:"#9a6700",Dark:"#d29922"},Error:{Light:"#cf222e",Dark:"#f85149"},Info:{Light:"#0969da",Dark:"#2f81f7"}},Data:{1:{Light:"#0969da",Dark:"#2f81f7"},2:{Light:"#cf222e",Dark:"#f85149"},3:{Light:"#1a7f37",Dark:"#3fb950"},4:{Light:"#9a6700",Dark:"#d29922"},5:{Light:"#8250df",Dark:"#a371f7"},6:{Light:"#bf3989",Dark:"#db61a2"},7:{Light:"#1b7c83",Dark:"#39c5cf"},8:{Light:"#656d76",Dark:"#8b949e"}},Scrollbar:{Track:{Light:"#eef1f4",Dark:"#161b22"},Thumb:{Light:"#c1c8cf",Dark:"#30363d"},Hover:{Light:"#a8b1bb",Dark:"#484f58"}},Selection:{Background:{Light:"#cfe6ff",Dark:"#243454"},Text:{Light:"#1f2328",Dark:"#e6edf3"}},Focus:{Outline:{Light:"#0969da",Dark:"#2f81f7"}},Syntax:{Keyword:{Light:"#cf222e",Dark:"#ff7b72"},String:{Light:"#0a3069",Dark:"#a5d6ff"},Number:{Light:"#0550ae",Dark:"#79c0ff"},Comment:{Light:"#6e7781",Dark:"#8b949e"},Operator:{Light:"#cf222e",Dark:"#ff7b72"},Punctuation:{Light:"#24292f",Dark:"#c9d1d9"},Function:{Light:"#8250df",Dark:"#d2a8ff"},Variable:{Light:"#24292f",Dark:"#c9d1d9"},Type:{Light:"#953800",Dark:"#ffa657"},Builtin:{Light:"#0550ae",Dark:"#79c0ff"},Property:{Light:"#0550ae",Dark:"#79c0ff"},Tag:{Light:"#116329",Dark:"#7ee787"},AttrName:{Light:"#8250df",Dark:"#d2a8ff"},AttrValue:{Light:"#0a3069",Dark:"#a5d6ff"}}},Typography:{Family:{Sans:'-apple-system, BlinkMacSystemFont, "SF Pro", "Segoe UI", sans-serif',Mono:'ui-monospace, "SF Mono", Menlo, Monaco, "Courier New", monospace'}},Layout:{SidebarWidth:"280px",TopbarHeight:"44px",StatusbarHeight:"28px"}}}},{}],68:[function(e,t,o){t.exports={Hash:"retold-mono",Name:"Retold Mono",Version:"0.0.2",Description:"High-contrast monochrome theme — black on white in light mode, white on black in dark mode. Useful for print, simple admin tooling, and as a paired-mode reference theme that proves the toggle works on something visually unmistakable.",Comprehensive:!0,Modes:{Strategy:"system",Default:"system"},Tokens:{Color:{Background:{Primary:{Light:"#ffffff",Dark:"#000000"},Secondary:{Light:"#f0f0f0",Dark:"#101010"},Tertiary:{Light:"#e2e2e2",Dark:"#1c1c1c"},Panel:{Light:"#ffffff",Dark:"#000000"},Hover:{Light:"#ebebeb",Dark:"#1a1a1a"},Selected:{Light:"#d6d6d6",Dark:"#2a2a2a"}},Text:{Primary:{Light:"#000000",Dark:"#ffffff"},Secondary:{Light:"#222222",Dark:"#dddddd"},Muted:{Light:"#555555",Dark:"#aaaaaa"},Placeholder:{Light:"#888888",Dark:"#777777"}},Brand:{Primary:{Light:"#000000",Dark:"#ffffff"},PrimaryHover:{Light:"#222222",Dark:"#dddddd"},Accent:{Light:"#444444",Dark:"#bbbbbb"}},Border:{Default:{Light:"#888888",Dark:"#666666"},Light:{Light:"#cccccc",Dark:"#333333"},Strong:{Light:"#000000",Dark:"#ffffff"}},Status:{Success:{Light:"#000000",Dark:"#ffffff"},Warning:{Light:"#000000",Dark:"#ffffff"},Error:{Light:"#000000",Dark:"#ffffff"},Info:{Light:"#000000",Dark:"#ffffff"}},Data:{1:{Light:"#000000",Dark:"#ffffff"},2:{Light:"#262626",Dark:"#e0e0e0"},3:{Light:"#404040",Dark:"#c0c0c0"},4:{Light:"#595959",Dark:"#a0a0a0"},5:{Light:"#737373",Dark:"#808080"},6:{Light:"#8c8c8c",Dark:"#737373"},7:{Light:"#a6a6a6",Dark:"#595959"},8:{Light:"#bfbfbf",Dark:"#404040"}},Scrollbar:{Track:{Light:"#e0e0e0",Dark:"#101010"},Thumb:{Light:"#888888",Dark:"#666666"},Hover:{Light:"#444444",Dark:"#bbbbbb"}},Selection:{Background:{Light:"#000000",Dark:"#ffffff"},Text:{Light:"#ffffff",Dark:"#000000"}},Focus:{Outline:{Light:"#000000",Dark:"#ffffff"}},Shadow:{Color:{Light:"rgba(0, 0, 0, 0.18)",Dark:"rgba(255, 255, 255, 0.18)"}},Syntax:{Keyword:{Light:"#000000",Dark:"#ffffff"},String:{Light:"#555555",Dark:"#cccccc"},Number:{Light:"#000000",Dark:"#ffffff"},Comment:{Light:"#888888",Dark:"#888888"},Operator:{Light:"#000000",Dark:"#ffffff"},Punctuation:{Light:"#444444",Dark:"#bbbbbb"},Function:{Light:"#000000",Dark:"#ffffff"},Variable:{Light:"#000000",Dark:"#ffffff"},Type:{Light:"#222222",Dark:"#dddddd"},Builtin:{Light:"#222222",Dark:"#dddddd"},Property:{Light:"#444444",Dark:"#bbbbbb"},Tag:{Light:"#000000",Dark:"#ffffff"},AttrName:{Light:"#444444",Dark:"#bbbbbb"},AttrValue:{Light:"#555555",Dark:"#cccccc"}}},Typography:{Family:{Sans:"Helvetica, Arial, sans-serif",Serif:"Georgia, Times New Roman, serif",Mono:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"},Size:{XS:"0.75rem",SM:"0.875rem",MD:"1rem",LG:"1.125rem",XL:"1.375rem",XXL:"1.75rem"},Weight:{Regular:"400",Medium:"600",Bold:"700"},LineHeight:{Tight:"1.15",Normal:"1.4",Loose:"1.65"}},Spacing:{XS:"4px",SM:"8px",MD:"12px",LG:"16px",XL:"24px",XXL:"32px"},Radius:{None:"0",SM:"0",MD:"0",LG:"0",XL:"0",Pill:"999px"},Shadow:{SM:"0 1px 0 var(--theme-color-shadow-color)",MD:"0 2px 0 var(--theme-color-shadow-color)",LG:"0 4px 0 var(--theme-color-shadow-color)"},ZIndex:{Base:"0",Dropdown:"100",Sticky:"200",Overlay:"900",Modal:"1000",Toast:"2000",Tooltip:"3000"},Duration:{Fast:"0ms",Normal:"0ms",Slow:"0ms"}},Brand:{Name:"Retold Mono",Tagline:"Black on white. White on black. Nothing else."},CSS:[{Hash:"retold-mono-brand-accents",Priority:600,Content:"/* retold-mono — keeps the all-monochrome aesthetic but lets brand colors\n in for narrow accent moments. The thick rule under H1 is brand primary;\n the hair rule under H2 is brand secondary. Without a brand registered\n they fall back to mono black/grey. */\na { text-decoration-color: var(--brand-color-primary-mode, currentColor); text-decoration-thickness: 2px; text-underline-offset: 3px; }\nh1 { border-bottom: 3px solid var(--brand-color-primary-mode, var(--theme-color-text-primary, #000)); padding-bottom: 6px; }\nh2 { border-bottom: 1px solid var(--brand-color-secondary-mode, var(--theme-color-border-default, #888)); padding-bottom: 4px; }"}]}},{}],69:[function(e,t,o){t.exports={Hash:"solarized-dark",Name:"Solarized Dark",Category:"Fun",Version:"0.0.1",Description:"Schoonover's classic palette Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#002B36",Secondary:"#073642",Tertiary:"#003B4A",Panel:"#00303C",Viewer:"#001E28",Hover:"#0A4858",Selected:"#155868",Thumb:"#073642"},Text:{Primary:"#FDF6E3",Secondary:"#EEE8D5",Muted:"#93A1A1",Dim:"#839496",Placeholder:"#657B83"},Brand:{Accent:"#268BD2",AccentHover:"#45A0E0"},Border:{Default:"#0A4050",Light:"#125868"},Status:{Danger:"#DC322F",DangerMuted:"#AA2A28"},Scrollbar:{Track:"#0A4050",Hover:"#125868"},Selection:{Background:"rgba(38, 139, 210, 0.25)"},Focus:{Outline:"#268BD2"},Syntax:{Keyword:"#859900",String:"#2AA198",Number:"#D33682",Comment:"#586E75",Operator:"#268BD2",Punctuation:"#93A1A1",Function:"#B58900",Variable:"#FDF6E3",Type:"#B58900",Builtin:"#CB4B16",Property:"#268BD2",Tag:"#268BD2",AttrName:"#B58900",AttrValue:"#2AA198"}},Typography:{Family:{Sans:"'Source Code Pro', 'Fira Code', monospace",Mono:"'Source Code Pro', 'Fira Code', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#EEE8D5",Accent:"#268BD2",Muted:"#839496",Light:"#003B4A",WarmBeige:"#073642",TealTint:"#004050",Lavender:"#003848",AmberTint:"#0A3A30",PdfFill:"#0A3028",PdfText:"#DC322F"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.408Z",CompilerVersion:1}},{}],70:[function(e,t,o){t.exports={Hash:"synthwave",Name:"Synthwave",Category:"Fun",Version:"0.0.1",Description:"Purple and pink neon Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#1A0A2E",Secondary:"#140824",Tertiary:"#200E38",Panel:"#1C0C32",Viewer:"#100620",Hover:"#2A1848",Selected:"#3A2060",Thumb:"#140824"},Text:{Primary:"#E8C0F8",Secondary:"#D0A8E8",Muted:"#9878B8",Dim:"#7858A8",Placeholder:"#584088"},Brand:{Accent:"#FF71CE",AccentHover:"#FF99DD"},Border:{Default:"#302050",Light:"#402868"},Status:{Danger:"#FF4488",DangerMuted:"#AA3366"},Scrollbar:{Track:"#302050",Hover:"#402868"},Selection:{Background:"rgba(255, 113, 206, 0.25)"},Focus:{Outline:"#FF71CE"},Syntax:{Keyword:"#FF6AD5",String:"#FFE066",Number:"#FF6AD5",Comment:"#9C8AC1",Operator:"#26F0F1",Punctuation:"#C8B6E2",Function:"#26F0F1",Variable:"#FFE0FF",Type:"#FFD93D",Builtin:"#FFD93D",Property:"#FF477E",Tag:"#FF477E",AttrName:"#FFD93D",AttrValue:"#FFE066"}},Typography:{Family:{Sans:"'Trebuchet MS', sans-serif",Mono:"'Courier New', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#D0A8E8",Accent:"#FF71CE",Muted:"#7858A8",Light:"#200E38",WarmBeige:"#221040",TealTint:"#1A0C30",Lavender:"#1E0E36",AmberTint:"#241028",PdfFill:"#241020",PdfText:"#FF4488"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.408Z",CompilerVersion:1}},{}],71:[function(e,t,o){t.exports={Hash:"twilight",Name:"Twilight",Category:"Grey",Version:"0.0.1",Description:"Dark grey, low light. Ported from RetoldRemote-ThemeDefinitions.js to the pict-provider-theme manifest format. Single-mode (no light/dark bifurcation). Aliases preserve the legacy `--retold-*` variable names so existing CSS keeps working through the migration.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#1E1E1E",Secondary:"#181818",Tertiary:"#252525",Panel:"#202020",Viewer:"#141414",Hover:"#2E2E2E",Selected:"#404040",Thumb:"#181818"},Text:{Primary:"#E0E0E0",Secondary:"#C8C8C8",Muted:"#909090",Dim:"#707070",Placeholder:"#585858"},Brand:{Accent:"#A0A0A0",AccentHover:"#C0C0C0"},Border:{Default:"#333333",Light:"#404040"},Status:{Danger:"#FF6666",DangerMuted:"#AA6666"},Scrollbar:{Track:"#404040",Hover:"#505050"},Selection:{Background:"rgba(160, 160, 160, 0.25)"},Focus:{Outline:"#A0A0A0"},Syntax:{Keyword:"#B58FFF",String:"#9CDFB0",Number:"#FFB870",Comment:"#6E6E6E",Operator:"#7CC5FF",Punctuation:"#C0C0C0",Function:"#FFD080",Variable:"#E0E0E0",Type:"#FFB870",Builtin:"#FFB870",Property:"#FF8B8B",Tag:"#FF8B8B",AttrName:"#FFB870",AttrValue:"#9CDFB0"}},Typography:{Family:{Sans:"system-ui, -apple-system, sans-serif",Mono:"'SF Mono', 'Fira Code', 'Consolas', monospace"}}},Aliases:{"--retold-bg-primary":"Color.Background.Primary","--retold-bg-secondary":"Color.Background.Secondary","--retold-bg-tertiary":"Color.Background.Tertiary","--retold-bg-panel":"Color.Background.Panel","--retold-bg-viewer":"Color.Background.Viewer","--retold-bg-hover":"Color.Background.Hover","--retold-bg-selected":"Color.Background.Selected","--retold-bg-thumb":"Color.Background.Thumb","--retold-text-primary":"Color.Text.Primary","--retold-text-secondary":"Color.Text.Secondary","--retold-text-muted":"Color.Text.Muted","--retold-text-dim":"Color.Text.Dim","--retold-text-placeholder":"Color.Text.Placeholder","--retold-accent":"Color.Brand.Accent","--retold-accent-hover":"Color.Brand.AccentHover","--retold-border":"Color.Border.Default","--retold-border-light":"Color.Border.Light","--retold-danger":"Color.Status.Danger","--retold-danger-muted":"Color.Status.DangerMuted","--retold-scrollbar":"Color.Scrollbar.Track","--retold-scrollbar-hover":"Color.Scrollbar.Hover","--retold-selection-bg":"Color.Selection.Background","--retold-focus-outline":"Color.Focus.Outline","--retold-font-family":"Typography.Family.Sans","--retold-font-mono":"Typography.Family.Mono"},IconColors:{Primary:"#C8C8C8",Accent:"#A0A0A0",Muted:"#707070",Light:"#252525",WarmBeige:"#2A2A2A",TealTint:"#222222",Lavender:"#282828",AmberTint:"#2E2A24",PdfFill:"#2E2224",PdfText:"#E06060"},CSS:[],SVG:{},Image:{},CompiledAt:"2026-05-03T18:12:53.408Z",CompilerVersion:1}},{}],72:[function(e,t,o){t.exports={Hash:"ultravisor-desert-canyon",Name:"Ultravisor — Desert Canyon",Version:"0.0.1",Description:"Vibrant desert palette — orange brand and teal accents on deep canyon-brown backgrounds. Single-mode dark.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#18120e",Secondary:"#221a14",Tertiary:"#2e2018",Panel:"#221a14",Hover:"#3a2a1e",Selected:"#3a2a1e"},Text:{Primary:"#d8c8b0",Secondary:"#e8d8c0",Muted:"#a09080",Placeholder:"#685040",OnBrand:"#18120e"},Brand:{Primary:"#e8943a",PrimaryHover:"#f0a44a",Accent:"#18a0a0",AccentHover:"#30b0b0"},Border:{Default:"#3a2a1e",Light:"#2e2018",Strong:"#4a3a2e"},Status:{Success:"#18a0a0",Warning:"#e0c870",Error:"#e05830",Info:"#18a0a0"},Scrollbar:{Track:"#221a14",Thumb:"#3a2a1e",Hover:"#4a3a2e"},Selection:{Background:"#3a2a1e",Text:"#e8d8c0"},Focus:{Outline:"#e8943a"},Shadow:{Color:"rgba(0, 0, 0, 0.30)"},Syntax:{Keyword:"#E89A6E",String:"#8FD493",Number:"#E8A94D",Comment:"#8E8478",Operator:"#4FB3A6",Punctuation:"#C0B5A4",Function:"#7FBDD8",Variable:"#E8DCC8",Type:"#E8A94D",Builtin:"#E8A94D",Property:"#E89A6E",Tag:"#E89A6E",AttrName:"#E8A94D",AttrValue:"#8FD493"},Editor:{LineNumberBackground:"#221a14",LineNumberText:"#685040",CurrentLineHighlight:"#2e2018",SelectionBackground:"#3a2a1e",GutterBorder:"#2e2018"}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"}},Layout:{SidebarWidth:"260px",TopbarHeight:"56px",StatusbarHeight:"28px"}},Brand:{Name:"Ultravisor",Tagline:"Process supervision and workflow automation"}}},{}],73:[function(e,t,o){t.exports={Hash:"ultravisor-desert-day",Name:"Ultravisor — Desert Day",Version:"0.0.1",Description:"Ultravisor's warm light palette — cream backgrounds, deep walnut text, teal accents. Single-mode light.",Comprehensive:!0,Modes:{Strategy:"single",Default:"light"},Tokens:{Color:{Background:{Primary:"#faf6f0",Secondary:"#f0e6d6",Tertiary:"#e8ddd0",Panel:"#ffffff",Hover:"#f0e6d6",Selected:"#e8ddd0"},Text:{Primary:"#3d2b1f",Secondary:"#2e1e14",Muted:"#8a7560",Placeholder:"#a09080",OnBrand:"#ffffff"},Brand:{Primary:"#5c3d2e",PrimaryHover:"#7a5040",Accent:"#3a8a8c",AccentHover:"#2a7070"},Border:{Default:"#e0d0b8",Light:"#e8ddd0",Strong:"#c8b8a0"},Status:{Success:"#5a7a30",Warning:"#b08020",Error:"#a03040",Info:"#3a8a8c"},Scrollbar:{Track:"#f0e6d6",Thumb:"#d0c0a8",Hover:"#c0b098"},Selection:{Background:"#e8ddd0",Text:"#2e1e14"},Focus:{Outline:"#c2703e"},Shadow:{Color:"rgba(92, 61, 46, 0.10)"},Syntax:{Keyword:"#A0532E",String:"#3F8A52",Number:"#A86B00",Comment:"#8A7F72",Operator:"#2E7D74",Punctuation:"#5E5549",Function:"#2E5E96",Variable:"#3D3229",Type:"#A86B00",Builtin:"#A86B00",Property:"#A0532E",Tag:"#A0532E",AttrName:"#A86B00",AttrValue:"#3F8A52"},Editor:{LineNumberBackground:"#f0e6d6",LineNumberText:"#a09080",CurrentLineHighlight:"#f5ede0",SelectionBackground:"#e8ddd0",GutterBorder:"#e0d0b8"}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"}},Layout:{SidebarWidth:"260px",TopbarHeight:"56px",StatusbarHeight:"28px"}},Brand:{Name:"Ultravisor",Tagline:"Process supervision and workflow automation"}}},{}],74:[function(e,t,o){t.exports={Hash:"ultravisor-desert-dusk",Name:"Ultravisor — Desert Dusk",Version:"0.0.1",Description:"Ultravisor's original default — warm tan brand on muted dark desert backgrounds. Single-mode dark.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#1a1714",Secondary:"#252018",Tertiary:"#302818",Panel:"#252018",Hover:"#3a3028",Selected:"#3a3028"},Text:{Primary:"#c8b8a0",Secondary:"#d8c8a8",Muted:"#907860",Placeholder:"#706050",OnBrand:"#FFFFFF"},Brand:{Primary:"#c4956a",PrimaryHover:"#d4a57a",Accent:"#4a9090",AccentHover:"#5aacac"},Border:{Default:"#3a3028",Light:"#302818",Strong:"#4a4038"},Status:{Success:"#8a9a5a",Warning:"#c0a050",Error:"#b04050",Info:"#4a9090"},Scrollbar:{Track:"#252018",Thumb:"#3a3028",Hover:"#4a4038"},Selection:{Background:"#3a3028",Text:"#d8c8a8"},Focus:{Outline:"#c4956a"},Shadow:{Color:"rgba(0, 0, 0, 0.30)"},Syntax:{Keyword:"#E89A6E",String:"#8FD493",Number:"#E8A94D",Comment:"#8E8478",Operator:"#4FB3A6",Punctuation:"#C0B5A4",Function:"#7FBDD8",Variable:"#E8DCC8",Type:"#E8A94D",Builtin:"#E8A94D",Property:"#E89A6E",Tag:"#E89A6E",AttrName:"#E8A94D",AttrValue:"#8FD493"},Editor:{LineNumberBackground:"#252018",LineNumberText:"#706050",CurrentLineHighlight:"#302818",SelectionBackground:"#3a3028",GutterBorder:"#302818"}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"}},Layout:{SidebarWidth:"260px",TopbarHeight:"56px",StatusbarHeight:"28px"}},Brand:{Name:"Ultravisor",Tagline:"Process supervision and workflow automation"}}},{}],75:[function(e,t,o){t.exports={Hash:"ultravisor-desert-sunset",Name:"Ultravisor — Desert Sunset",Version:"0.0.1",Description:"Ultravisor's golden-hour palette — orange brand on rust-warmed dark backgrounds. Single-mode dark.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#1e1610",Secondary:"#2a2018",Tertiary:"#342818",Panel:"#2a2018",Hover:"#3a2e22",Selected:"#3a2e22"},Text:{Primary:"#d4c4aa",Secondary:"#e0d0b8",Muted:"#8a7560",Placeholder:"#6a5840",OnBrand:"#1e1610"},Brand:{Primary:"#e8943a",PrimaryHover:"#f0a44a",Accent:"#2a8a8a",AccentHover:"#3a9a9a"},Border:{Default:"#3a2e22",Light:"#342818",Strong:"#4a3e32"},Status:{Success:"#6a9a3a",Warning:"#d4a46a",Error:"#c44e2a",Info:"#2a8a8a"},Scrollbar:{Track:"#2a2018",Thumb:"#3a2e22",Hover:"#4a3e32"},Selection:{Background:"#3a2e22",Text:"#e0d0b8"},Focus:{Outline:"#e8943a"},Shadow:{Color:"rgba(0, 0, 0, 0.30)"},Syntax:{Keyword:"#E89A6E",String:"#8FD493",Number:"#E8A94D",Comment:"#8E8478",Operator:"#4FB3A6",Punctuation:"#C0B5A4",Function:"#7FBDD8",Variable:"#E8DCC8",Type:"#E8A94D",Builtin:"#E8A94D",Property:"#E89A6E",Tag:"#E89A6E",AttrName:"#E8A94D",AttrValue:"#8FD493"},Editor:{LineNumberBackground:"#2a2018",LineNumberText:"#6a5840",CurrentLineHighlight:"#342818",SelectionBackground:"#3a2e22",GutterBorder:"#342818"}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"}},Layout:{SidebarWidth:"260px",TopbarHeight:"56px",StatusbarHeight:"28px"}},Brand:{Name:"Ultravisor",Tagline:"Process supervision and workflow automation"}}},{}],76:[function(e,t,o){t.exports={Hash:"ultravisor-professional-dark",Name:"Ultravisor — Professional Dark",Version:"0.0.1",Description:"Dark modern palette — slate-blue text on inky surfaces, sky-blue brand. Single-mode dark.",Comprehensive:!0,Modes:{Strategy:"single",Default:"dark"},Tokens:{Color:{Background:{Primary:"#111318",Secondary:"#1a1d24",Tertiary:"#22252e",Panel:"#1a1d24",Hover:"#282c34",Selected:"#282c34"},Text:{Primary:"#c8cdd5",Secondary:"#e0e4ea",Muted:"#8b92a0",Placeholder:"#5a6070",OnBrand:"#ffffff"},Brand:{Primary:"#60a5fa",PrimaryHover:"#93c5fd",Accent:"#60a5fa",AccentHover:"#93c5fd"},Border:{Default:"#282c34",Light:"#22252e",Strong:"#3a3f4a"},Status:{Success:"#34d399",Warning:"#fbbf24",Error:"#f87171",Info:"#60a5fa"},Scrollbar:{Track:"#1a1d24",Thumb:"#282c34",Hover:"#3a3f4a"},Selection:{Background:"#1e2230",Text:"#e0e4ea"},Focus:{Outline:"#60a5fa"},Shadow:{Color:"rgba(0, 0, 0, 0.30)"},Syntax:{Keyword:"#E89A6E",String:"#8FD493",Number:"#E8A94D",Comment:"#8E8478",Operator:"#4FB3A6",Punctuation:"#C0B5A4",Function:"#7FBDD8",Variable:"#E8DCC8",Type:"#E8A94D",Builtin:"#E8A94D",Property:"#E89A6E",Tag:"#E89A6E",AttrName:"#E8A94D",AttrValue:"#8FD493"},Editor:{LineNumberBackground:"#1a1d24",LineNumberText:"#5a6070",CurrentLineHighlight:"#22252e",SelectionBackground:"#1e2230",GutterBorder:"#22252e"}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"}},Layout:{SidebarWidth:"260px",TopbarHeight:"56px",StatusbarHeight:"28px"}},Brand:{Name:"Ultravisor",Tagline:"Process supervision and workflow automation"}}},{}],77:[function(e,t,o){t.exports={Hash:"ultravisor-professional-light",Name:"Ultravisor — Professional Light",Version:"0.0.1",Description:"Bright modern palette — slate text on near-white backgrounds, royal-blue brand. Single-mode light.",Comprehensive:!0,Modes:{Strategy:"single",Default:"light"},Tokens:{Color:{Background:{Primary:"#f5f6f8",Secondary:"#ffffff",Tertiary:"#e4e7ec",Panel:"#ffffff",Hover:"#f0f1f4",Selected:"#e4e7ec"},Text:{Primary:"#2d3748",Secondary:"#1a202c",Muted:"#6b7280",Placeholder:"#9ca3af",OnBrand:"#ffffff"},Brand:{Primary:"#3b82f6",PrimaryHover:"#2563eb",Accent:"#3b82f6",AccentHover:"#2563eb"},Border:{Default:"#e2e5ea",Light:"#eceef2",Strong:"#c8cdd5"},Status:{Success:"#10b981",Warning:"#f59e0b",Error:"#ef4444",Info:"#3b82f6"},Scrollbar:{Track:"#f0f1f4",Thumb:"#d1d5db",Hover:"#b0b5bd"},Selection:{Background:"#dbeafe",Text:"#1a202c"},Focus:{Outline:"#3b82f6"},Shadow:{Color:"rgba(0, 0, 0, 0.06)"},Syntax:{Keyword:"#A0532E",String:"#3F8A52",Number:"#A86B00",Comment:"#8A7F72",Operator:"#2E7D74",Punctuation:"#5E5549",Function:"#2E5E96",Variable:"#3D3229",Type:"#A86B00",Builtin:"#A86B00",Property:"#A0532E",Tag:"#A0532E",AttrName:"#A86B00",AttrValue:"#3F8A52"},Editor:{LineNumberBackground:"#f5f6f8",LineNumberText:"#9ca3af",CurrentLineHighlight:"#f0f1f4",SelectionBackground:"#dbeafe",GutterBorder:"#e2e5ea"}},Typography:{Family:{Sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",Serif:"Georgia, Cambria, 'Times New Roman', Times, serif",Mono:"'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', 'Courier New', monospace"}},Layout:{SidebarWidth:"260px",TopbarHeight:"56px",StatusbarHeight:"28px"}},Brand:{Name:"Ultravisor",Tagline:"Process supervision and workflow automation"}}},{}],78:[function(e,t,o){const r=e("pict-view"),i={ViewIdentifier:"Theme-BottomBar",AutoInitialize:!0,AutoRender:!1,DefaultDestinationAddress:"#Theme-BottomBar",DefaultRenderable:"Theme-BottomBar-Renderable",StatusView:null,InfoView:null,ActionsView:null,Height:32,Templates:[{Hash:"Theme-BottomBar-Template",Template:'\n<div class="pict-theme-bottombar">\n\t<div class="pict-theme-bottombar-status" id="Theme-BottomBar-Status"></div>\n\t<div class="pict-theme-bottombar-info" id="Theme-BottomBar-Info"></div>\n\t<div class="pict-theme-bottombar-actions" id="Theme-BottomBar-Actions"></div>\n</div>'}],Renderables:[{RenderableHash:"Theme-BottomBar-Renderable",TemplateHash:"Theme-BottomBar-Template",ContentDestinationAddress:"#Theme-BottomBar",RenderMethod:"replace"}],CSS:"\n.pict-theme-bottombar {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 14px;\n\t/* The min-height is rewritten per-instance in onAfterRender from the\n\t Height option (default 32). A fixed px value avoids the\n\t percent-height resolution trap the pict-section-modal shell sets\n\t up — see the comment on Theme-TopBar's CSS for the full story. */\n\tmin-height: 32px;\n\tpadding: 0 14px;\n\tbox-sizing: border-box;\n\tbackground: var(--theme-color-background-secondary, transparent);\n\tfont-size: var(--theme-typography-size-xs, 12px);\n\tcolor: var(--theme-color-text-secondary, #4a5568);\n\t/* Single medium brand-primary stripe at the top of the bottombar.\n\t The topbar carries the full two-stripe identifier; on the\n\t bottombar (which is only 32px tall) a single 2px primary line is\n\t enough to seat the brand colour at the bottom of the page\n\t without competing for visual weight against the content row. */\n\tborder-top: 2px solid var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n}\n.pict-theme-bottombar-status {\n\tflex: 0 0 auto;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 6px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tmax-width: 50%;\n}\n.pict-theme-bottombar-info {\n\tflex: 1 1 auto;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 12px;\n\tmin-width: 0;\n\toverflow: hidden;\n}\n.pict-theme-bottombar-actions {\n\tflex: 0 0 auto;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 6px;\n}",CSSPriority:500};t.exports=class extends r{constructor(e,t,o){super(e,t,o)}onAfterRender(e,t,o,r){if(this.pict.CSSMap.injectCSS(),"undefined"!=typeof document&&this.options.Height){let e=document.querySelector(".pict-theme-bottombar");e&&(e.style.minHeight=this.options.Height+"px")}let i=e=>{if(!e)return;let t=this.pict.views[e];t?t.render():this.log&&this.log.warn&&this.log.warn('Theme-BottomBar: slot view "'+e+'" not registered')};return i(this.options.StatusView),i(this.options.InfoView),i(this.options.ActionsView),super.onAfterRender?super.onAfterRender(e,t,o,r):void 0}setStatusView(e){this._setSlotView("StatusView","#Theme-BottomBar-Status",e)}setInfoView(e){this._setSlotView("InfoView","#Theme-BottomBar-Info",e)}setActionsView(e){this._setSlotView("ActionsView","#Theme-BottomBar-Actions",e)}_setSlotView(e,t,o){if(this.options[e]=o||null,"undefined"!=typeof document){let e=document.querySelector(t);e&&(e.innerHTML="")}if(!o)return;let r=this.pict.views[o];r?r.render():this.log&&this.log.warn&&this.log.warn('Theme-BottomBar: view "'+o+'" not registered')}},t.exports.default_configuration=i},{"pict-view":89}],79:[function(e,t,o){const r=e("pict-view"),i=e("../Theme-Brand.js"),a={ViewIdentifier:"Theme-Brand-Mark",AutoInitialize:!0,AutoRender:!1,DefaultDestinationAddress:"#Theme-Brand-Mark",DefaultRenderable:"Theme-Brand-Mark-Renderable",ShowIcon:!0,ShowName:!0,Templates:[{Hash:"Theme-Brand-Mark-Template",Template:"{~TS:Theme-Brand-Mark-Body-Template:AppData.PictSectionTheme.BrandMark.BodySlot~}"},{Hash:"Theme-Brand-Mark-Body-Template",Template:'\n<span class="pict-theme-brand-mark" title="{~D:Record.Tooltip~}">\n\t{~TS:Theme-Brand-Mark-IconSVG-Template:Record.IconSVGSlot~}\n\t{~TS:Theme-Brand-Mark-IconImg-Template:Record.IconImgSlot~}\n\t{~TS:Theme-Brand-Mark-Name-Template:Record.NameSlot~}\n</span>'},{Hash:"Theme-Brand-Mark-IconSVG-Template",Template:'<span class="pict-theme-brand-mark-icon">{~D:Record.IconHTML~}</span>'},{Hash:"Theme-Brand-Mark-IconImg-Template",Template:'<span class="pict-theme-brand-mark-icon"><img src="{~D:Record.IconURL~}" alt=""></span>'},{Hash:"Theme-Brand-Mark-Name-Template",Template:'<span class="pict-theme-brand-mark-name">{~D:Record.Name~}</span>'}],Renderables:[{RenderableHash:"Theme-Brand-Mark-Renderable",TemplateHash:"Theme-Brand-Mark-Template",ContentDestinationAddress:"#Theme-Brand-Mark",RenderMethod:"replace"}],CSS:"\n.pict-theme-brand-mark {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 8px;\n\t/* line-height: 1 collapses the inherited ~1.2 line-box around the\n\t name glyphs. Without this the inline-flex container is taller\n\t than its visible content, the line-box adds asymmetric space\n\t above the caps, and the whole mark looks pushed up vs.\n\t neighbouring buttons that sit on standard 12px-text baselines. */\n\tline-height: 1;\n\tcolor: var(--brand-color-primary-mode, var(--theme-color-text-primary, #1a1a1a));\n\tuser-select: none;\n}\n.pict-theme-brand-mark-icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 22px;\n\theight: 22px;\n\tcolor: currentColor;\n}\n.pict-theme-brand-mark-icon img,\n.pict-theme-brand-mark-icon svg {\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: block;\n}\n.pict-theme-brand-mark-name {\n\t/* Font size dropped from 15 → 14 so the brand name reads closer\n\t to the typical 12px action-button text height; bigger glyphs\n\t reaching higher into the row are why the mark looked optically\n\t high. The 2px brand-secondary underline keeps the mark feeling\n\t distinctly branded; padding-bottom: 1px was an asymmetric nudge\n\t that shifted the visual center up — removed. */\n\tfont-size: 14px;\n\tfont-weight: 600;\n\tletter-spacing: 0.4px;\n\tborder-bottom: 2px solid var(--brand-color-secondary-mode, transparent);\n\twhite-space: nowrap;\n}\n/* Compact form — at narrow viewports the brand mark collapses to\n icon-only. The icon alone still reads as the brand (the deterministic\n logo is designed to be recognisable without the wordmark) and freeing\n up the wordmark's width keeps the nav buttons reachable on tablet /\n small-laptop widths. The threshold matches the topbar's compact\n breakpoint in Theme-TopBar. */\n@media (max-width: 720px) {\n\t.pict-theme-brand-mark-name {\n\t\tdisplay: none;\n\t}\n}",CSSPriority:500};t.exports=class extends r{constructor(e,t,o){super(e,t,o),this._unsubscribeFromBrand=null}onAfterInitialize(){return this._subscribeToBrand(),super.onAfterInitialize?super.onAfterInitialize():void 0}onBeforeRender(e){return this._refreshAppData(),super.onBeforeRender?super.onBeforeRender(e):void 0}onAfterRender(e,t,o,r){return this.pict.CSSMap.injectCSS(),super.onAfterRender?super.onAfterRender(e,t,o,r):void 0}_subscribeToBrand(){if(this._unsubscribeFromBrand)return;let e=this;this._unsubscribeFromBrand=i.onChange(function(){e.render()})}_refreshAppData(){let e=i.getActive();if(this.pict.AppData.PictSectionTheme=this.pict.AppData.PictSectionTheme||{},!e)return void(this.pict.AppData.PictSectionTheme.BrandMark={BodySlot:[]});let t=!1!==this.options.ShowIcon,o=!1!==this.options.ShowName,r=t&&"svg"===e.IconType&&e.Icon?[{IconHTML:e.Icon}]:[],a=t&&"image"===e.IconType&&e.Icon?[{IconURL:e.Icon}]:[],n=o&&e.Name?[{Name:e.Name}]:[];this.pict.AppData.PictSectionTheme.BrandMark={BodySlot:[{Tooltip:e.Tagline||e.Name||"",IconSVGSlot:r,IconImgSlot:a,NameSlot:n}]}}},t.exports.default_configuration=a},{"../Theme-Brand.js":29,"pict-view":89}],80:[function(e,t,o){const r=e("pict-view"),i=e("../Theme-Brand.js"),a={ViewIdentifier:"Theme-BrandStrip",AutoInitialize:!0,AutoRender:!1,DefaultDestinationAddress:"#Theme-BrandStrip",DefaultRenderable:"Theme-BrandStrip-Renderable",PrimaryStripeHeight:3,SecondaryStripeHeight:1,ShowName:!0,Templates:[{Hash:"Theme-BrandStrip-Template",Template:"\n{~TS:Theme-BrandStrip-Body-Template:AppData.PictSectionTheme.BrandStrip.BodySlot~}"},{Hash:"Theme-BrandStrip-Body-Template",Template:'\n<div class="pict-theme-brandstrip" title="{~D:Record.Tooltip~}">\n\t{~TS:Theme-BrandStrip-NameRow-Template:Record.NameRowSlot~}\n\t<div class="pict-theme-brandstrip-stripes">\n\t\t<div class="pict-theme-brandstrip-stripe pict-theme-brandstrip-stripe-primary"\n\t\t style="height: {~D:Record.PrimaryHeight~}px;"></div>\n\t\t<div class="pict-theme-brandstrip-stripe pict-theme-brandstrip-stripe-secondary"\n\t\t style="height: {~D:Record.SecondaryHeight~}px;"></div>\n\t</div>\n</div>'},{Hash:"Theme-BrandStrip-NameRow-Template",Template:'\n<div class="pict-theme-brandstrip-row">\n\t{~TS:Theme-BrandStrip-IconSVG-Template:Record.IconSVGSlot~}\n\t{~TS:Theme-BrandStrip-IconImg-Template:Record.IconImgSlot~}\n\t<span class="pict-theme-brandstrip-name">{~D:Record.Name~}</span>\n</div>'},{Hash:"Theme-BrandStrip-IconSVG-Template",Template:'<span class="pict-theme-brandstrip-icon">{~D:Record.IconHTML~}</span>'},{Hash:"Theme-BrandStrip-IconImg-Template",Template:'<span class="pict-theme-brandstrip-icon"><img src="{~D:Record.IconURL~}" alt=""></span>'}],Renderables:[{RenderableHash:"Theme-BrandStrip-Renderable",TemplateHash:"Theme-BrandStrip-Template",ContentDestinationAddress:"#Theme-BrandStrip",RenderMethod:"replace"}],CSS:"\n.pict-theme-brandstrip {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px;\n\tuser-select: none;\n}\n.pict-theme-brandstrip-row {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 8px;\n\tpadding: 6px 12px 4px;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\tletter-spacing: 0.4px;\n\ttext-transform: uppercase;\n\tcolor: var(--brand-color-primary, var(--theme-color-text-muted, #6b6b6b));\n}\n.pict-theme-brandstrip-name {\n\tborder-bottom: 2px solid var(--brand-color-secondary, transparent);\n\tpadding-bottom: 1px;\n}\n.pict-theme-brandstrip-icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 16px; height: 16px;\n\tcolor: var(--brand-color-primary, currentColor);\n}\n.pict-theme-brandstrip-icon img,\n.pict-theme-brandstrip-icon svg {\n\twidth: 100%; height: 100%;\n\tdisplay: block;\n}\n.pict-theme-brandstrip-stripes {\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: 100%;\n}\n.pict-theme-brandstrip-stripe {\n\twidth: 100%;\n}\n.pict-theme-brandstrip-stripe-primary {\n\tbackground: var(--brand-color-primary, transparent);\n}\n.pict-theme-brandstrip-stripe-secondary {\n\tbackground: var(--brand-color-secondary, transparent);\n}",CSSPriority:500};class n extends r{constructor(e,t,o){super(e,t,o),this._unsubscribeFromBrand=null}onAfterInitialize(){return this._subscribeToBrand(),super.onAfterInitialize?super.onAfterInitialize():void 0}onBeforeRender(e){return this._refreshAppData(),super.onBeforeRender?super.onBeforeRender(e):void 0}onAfterRender(e,t,o,r){return this.pict.CSSMap.injectCSS(),super.onAfterRender?super.onAfterRender(e,t,o,r):void 0}_subscribeToBrand(){if(this._unsubscribeFromBrand)return;let e=this;this._unsubscribeFromBrand=i.onChange(function(){e.render()})}_refreshAppData(){let e=i.getActive();if(this.pict.AppData.PictSectionTheme=this.pict.AppData.PictSectionTheme||{},!e)return void(this.pict.AppData.PictSectionTheme.BrandStrip={BodySlot:[]});let t=!1!==this.options.ShowName,o=[],r=[];"svg"===e.IconType&&e.Icon?o=[{IconHTML:e.Icon}]:"image"===e.IconType&&e.Icon&&(r=[{IconURL:e.Icon}]);let a=t?[{Name:e.Name,IconSVGSlot:o,IconImgSlot:r}]:[],n=e.Name+(e.Tagline?" — "+e.Tagline:"");this.pict.AppData.PictSectionTheme.BrandStrip={BodySlot:[{Tooltip:n,NameRowSlot:a,PrimaryHeight:this.options.PrimaryStripeHeight||3,SecondaryHeight:this.options.SecondaryStripeHeight||1}]}}}n.default_configuration=a,t.exports=n},{"../Theme-Brand.js":29,"pict-view":89}],81:[function(e,t,o){const r=e("pict-view"),i={ViewIdentifier:"Theme-Button",AutoInitialize:!0,AutoRender:!1,DefaultDestinationAddress:"#Theme-Button",DefaultRenderable:"Theme-Button-Renderable",ProviderHash:"Theme",ModalViewHash:"Pict-Section-Modal",PickerViewHash:"Theme-Picker",ModeToggleViewHash:"Theme-ModeToggle",ScaleSelectViewHash:"Theme-ScaleSelect",Title:"Theme",AriaLabel:"Open theme menu",ModalTitle:"Theme",ModalWidth:"320px",Templates:[{Hash:"Theme-Button-Template",Template:`\n<button type="button"\n class="pict-theme-button"\n aria-label="{~D:AppData.PictSectionTheme.Button.AriaLabel~}"\n title="{~D:AppData.PictSectionTheme.Button.Title~}"\n onclick="_Pict.views['Theme-Button'].openMenu();">\n\t${e("../Theme-Icons.js").iconSun(16)}\n</button>`},{Hash:"Theme-Button-Modal-Template",Template:'\n<div class="pict-theme-button-menu">\n\t<div class="pict-theme-button-menu-row">\n\t\t<label class="pict-theme-button-menu-label">Theme</label>\n\t\t<div id="Theme-Picker"></div>\n\t</div>\n\t<div class="pict-theme-button-menu-row">\n\t\t<label class="pict-theme-button-menu-label">Mode</label>\n\t\t<div id="Theme-ModeToggle"></div>\n\t</div>\n\t<div class="pict-theme-button-menu-row">\n\t\t<label class="pict-theme-button-menu-label">Scale</label>\n\t\t<div id="Theme-ScaleSelect"></div>\n\t</div>\n</div>'}],Renderables:[{RenderableHash:"Theme-Button-Renderable",TemplateHash:"Theme-Button-Template",ContentDestinationAddress:"#Theme-Button",RenderMethod:"replace"}],CSS:"\n.pict-theme-button {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\t/* Sized to match a typical 12px-font / 6px-12px-padding text button\n\t (~28px tall) so this drops cleanly into a topbar row alongside\n\t action buttons without standing taller and crashing the row's\n\t visual rhythm. Squareish — width matches height for the icon. */\n\twidth: 28px;\n\theight: 28px;\n\tpadding: 0;\n\tborder-radius: 6px;\n\tborder: 1px solid var(--theme-color-border-default, #cfd5dd);\n\tbackground: var(--theme-color-background-secondary, #fbfbfc);\n\tcolor: var(--theme-color-text-secondary, #4a5568);\n\tcursor: pointer;\n\ttransition: background-color 120ms ease, color 120ms ease, border-color 120ms ease;\n}\n.pict-theme-button:hover {\n\tbackground: var(--theme-color-background-hover, #f0f0f0);\n\tcolor: var(--theme-color-brand-primary, #2563eb);\n\tborder-color: var(--theme-color-brand-primary, #2563eb);\n}\n.pict-theme-button-icon { width: 16px; height: 16px; }\n.pict-theme-button-menu { display: flex; flex-direction: column; gap: 14px; }\n.pict-theme-button-menu-row { display: flex; flex-direction: column; gap: 6px; }\n.pict-theme-button-menu-label {\n\tfont-size: 11px;\n\tfont-weight: 600;\n\tletter-spacing: 0.4px;\n\ttext-transform: uppercase;\n\tcolor: var(--theme-color-text-muted, #6b6b6b);\n}",CSSPriority:500};class a extends r{onBeforeRender(e){return this._refreshAppData(),super.onBeforeRender?super.onBeforeRender(e):void 0}onAfterRender(e,t,o,r){return this.pict.CSSMap.injectCSS(),super.onAfterRender?super.onAfterRender(e,t,o,r):void 0}openMenu(){let e=this._modal();if(!e)return"undefined"!=typeof console&&console.warn('Theme-Button: pict-section-modal view not found at "'+(this.options.ModalViewHash||"Pict-Section-Modal")+'" — cannot open theme menu.'),null;let t=this.pict.parseTemplateByHash("Theme-Button-Modal-Template",{}),o=this;return e.show({title:this.options.ModalTitle||"Theme",content:t,width:this.options.ModalWidth||"320px",closeable:!0,buttons:[],onOpen:function(){o._mountSubViews()}})}_modal(){let e=this.options.ModalViewHash||"Pict-Section-Modal";return this.pict&&this.pict.views&&this.pict.views[e]}_mountSubViews(){let e=this.pict.views[this.options.PickerViewHash||"Theme-Picker"];e&&e.render();let t=this.pict.views[this.options.ModeToggleViewHash||"Theme-ModeToggle"];t&&t.render();let o=this.pict.views[this.options.ScaleSelectViewHash||"Theme-ScaleSelect"];o&&o.render()}_refreshAppData(){this.pict.AppData.PictSectionTheme=this.pict.AppData.PictSectionTheme||{},this.pict.AppData.PictSectionTheme.Button={Title:this.options.Title||"Theme",AriaLabel:this.options.AriaLabel||"Open theme menu"}}}a.default_configuration=i,t.exports=a},{"../Theme-Icons.js":30,"pict-view":89}],82:[function(e,t,o){const r=e("pict-view"),i=e("../Theme-Icons.js"),a={ViewIdentifier:"Theme-ModeToggle",AutoInitialize:!0,AutoRender:!1,DefaultDestinationAddress:"#Theme-ModeToggle",DefaultRenderable:"Theme-ModeToggle-Renderable",ProviderHash:"Theme",Labels:{Light:"Light",Dark:"Dark",System:"System"},ShowIcons:!0,Templates:[{Hash:"Theme-ModeToggle-Template",Template:'\n<div class="pict-theme-modetoggle-wrap">\n\t<div class="pict-theme-modetoggle{~NE:AppData.PictSectionTheme.ModeToggle.Disabled^ pict-theme-modetoggle-disabled~}"\n\t role="group" aria-label="Color mode"\n\t title="{~D:AppData.PictSectionTheme.ModeToggle.WrapTitle~}">\n\t\t{~TS:Theme-ModeToggle-Button-Template:AppData.PictSectionTheme.ModeToggle.Buttons~}\n\t</div>\n\t{~TS:Theme-ModeToggle-LockedNote-Template:AppData.PictSectionTheme.ModeToggle.LockedNoteSlot~}\n</div>'},{Hash:"Theme-ModeToggle-Button-Template",Template:'\n<button type="button"\n class="pict-theme-modetoggle-btn{~NE:Record.Active^ pict-theme-modetoggle-btn-active~}{~NE:Record.LockedOut^ pict-theme-modetoggle-btn-lockedout~}"\n title="{~D:Record.Title~}"\n aria-pressed="{~D:Record.Active~}"\n aria-disabled="{~D:Record.LockedOut~}"\n onclick="_Pict.views[\'Theme-ModeToggle\'].pickMode(\'{~D:Record.Mode~}\');">\n\t{~TS:Theme-ModeToggle-Icon-Light:Record.IconLight~}{~TS:Theme-ModeToggle-Icon-Dark:Record.IconDark~}{~TS:Theme-ModeToggle-Icon-System:Record.IconSystem~}<span class="pict-theme-modetoggle-label">{~D:Record.Label~}</span>\n</button>'},{Hash:"Theme-ModeToggle-LockedNote-Template",Template:'\n<div class="pict-theme-modetoggle-locked-note" role="note">\n\t<svg class="pict-theme-modetoggle-locked-icon" viewBox="0 0 24 24" fill="none"\n\t stroke="currentColor" stroke-width="2" stroke-linecap="round"\n\t stroke-linejoin="round" aria-hidden="true">\n\t\t<rect x="4" y="11" width="16" height="9" rx="2"/>\n\t\t<path d="M8 11V7a4 4 0 0 1 8 0v4"/>\n\t</svg>\n\t<span>{~D:Record.Message~}</span>\n</div>'},{Hash:"Theme-ModeToggle-Icon-Light",Template:i.iconSun()},{Hash:"Theme-ModeToggle-Icon-Dark",Template:i.iconMoon()},{Hash:"Theme-ModeToggle-Icon-System",Template:i.iconSystem()}],Renderables:[{RenderableHash:"Theme-ModeToggle-Renderable",TemplateHash:"Theme-ModeToggle-Template",ContentDestinationAddress:"#Theme-ModeToggle",RenderMethod:"replace"}],CSS:"\n.pict-theme-modetoggle-wrap { display: inline-flex; flex-direction: column; gap: 6px; }\n.pict-theme-modetoggle {\n\tdisplay: inline-flex;\n\tborder: 1px solid var(--theme-color-border-default, #cfd5dd);\n\tborder-radius: 6px;\n\toverflow: hidden;\n\tbackground: var(--theme-color-background-secondary, #fbfbfc);\n\tfont-size: 12px;\n}\n.pict-theme-modetoggle-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 4px;\n\tpadding: 4px 10px;\n\tborder: 0;\n\tbackground: transparent;\n\tcolor: var(--theme-color-text-secondary, #4a5568);\n\tcursor: pointer;\n\tborder-right: 1px solid var(--theme-color-border-default, #cfd5dd);\n\ttransition: background-color 120ms ease, color 120ms ease;\n}\n.pict-theme-modetoggle-btn:last-child { border-right: 0; }\n.pict-theme-modetoggle-btn:hover {\n\tbackground: var(--theme-color-background-hover, #f0f0f0);\n\tcolor: var(--theme-color-text-primary, #1f2933);\n}\n.pict-theme-modetoggle-btn-active {\n\tbackground: var(--theme-color-brand-primary, #2563eb);\n\tcolor: var(--theme-color-text-on-brand, #ffffff);\n}\n.pict-theme-modetoggle-btn-active:hover {\n\tbackground: var(--theme-color-brand-primary-hover, #1e54cc);\n\tcolor: var(--theme-color-text-on-brand, #ffffff);\n}\n/* When the active theme is single-mode the entire group becomes\n non-interactive. The locked-out buttons (the ones the theme cannot\n switch to) get a strikethrough so the cause is unmistakable; the\n active button stays styled normally so users can still see which\n mode the theme IS using. */\n.pict-theme-modetoggle-disabled .pict-theme-modetoggle-btn {\n\tpointer-events: none;\n\tcursor: not-allowed;\n}\n.pict-theme-modetoggle-disabled .pict-theme-modetoggle-btn-lockedout {\n\topacity: 0.45;\n\ttext-decoration: line-through;\n\ttext-decoration-thickness: 1.5px;\n}\n/* Icons come from Theme-Icons.js with explicit width/height baked into\n the <svg>. We only need to nudge their vertical alignment with the\n button label. */\n.pict-theme-modetoggle .pict-theme-icon {\n\tdisplay: inline-block; vertical-align: -2px;\n}\n.pict-theme-modetoggle-label { line-height: 1; }\n.pict-theme-modetoggle-locked-note {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 6px;\n\tfont-size: 11px;\n\tline-height: 1.3;\n\tcolor: var(--theme-color-text-muted, #6b6b6b);\n\tpadding: 0 2px;\n}\n.pict-theme-modetoggle-locked-icon {\n\twidth: 12px; height: 12px;\n\tflex: 0 0 12px;\n\tcolor: var(--theme-color-text-muted, #6b6b6b);\n}",CSSPriority:500};class n extends r{constructor(e,t,o){super(e,t,o),this._unsubscribeFromProvider=null}onAfterInitialize(){return this._subscribeToProvider(),super.onAfterInitialize?super.onAfterInitialize():void 0}onBeforeRender(e){return this._refreshAppData(),super.onBeforeRender?super.onBeforeRender(e):void 0}onAfterRender(e,t,o,r){return this.pict.CSSMap.injectCSS(),super.onAfterRender?super.onAfterRender(e,t,o,r):void 0}pickMode(e){let t=this._provider();if(!t)return!1;let o=t.setMode(e);if(o&&"function"==typeof this.options.OnModeChange)try{this.options.OnModeChange(e)}catch(e){}return o||this.render(),o}_subscribeToProvider(){if(this._unsubscribeFromProvider)return;let e=this._provider();if(!e||"function"!=typeof e.onApply)return;let t=this;this._unsubscribeFromProvider=e.onApply(function(){t.render()})}_provider(){let e=this.options.ProviderHash||"Theme";return this.pict&&this.pict.providers&&this.pict.providers[e]}_refreshAppData(){let e=this._provider(),t=e?e.getActiveTheme():null,o=t&&t.Mode||"light",r=!1,i=null,n=null;if(t&&t.Hash&&e&&"function"==typeof e.getTheme){let a=e.getTheme(t.Hash);r="single"===(a&&a.Modes&&a.Modes.Strategy||"single"),r&&(i=a.Modes&&a.Modes.Default||o||"light",n=a.Name||a.Hash||"this theme")}let s=this.options.Labels||a.Labels,l=!1!==this.options.ShowIcons,d=[{Mode:"light",Label:s.Light||"Light"},{Mode:"dark",Label:s.Dark||"Dark"},{Mode:"system",Label:s.System||"System"}],c=[];for(let e=0;e<d.length;e++){let t,a=d[e],s=o===a.Mode,h=r&&a.Mode!==i;if(h){t=n+" is fixed to "+(i.charAt(0).toUpperCase()+i.slice(1))+" mode — pick a different theme to switch."}else t=a.Label+" mode";c.push({Mode:a.Mode,Label:a.Label,Title:t,Active:s,LockedOut:h,IconLight:l&&"light"===a.Mode?[{}]:[],IconDark:l&&"dark"===a.Mode?[{}]:[],IconSystem:l&&"system"===a.Mode?[{}]:[]})}let h=[],p="";if(r){let e=n+" is fixed to "+(i.charAt(0).toUpperCase()+i.slice(1))+" mode";h=[{Message:e}],p=e+" — pick a different theme to switch modes."}this.pict.AppData.PictSectionTheme=this.pict.AppData.PictSectionTheme||{},this.pict.AppData.PictSectionTheme.ModeToggle={ActiveMode:o,Disabled:r,LockedToMode:i,ThemeName:n,Buttons:c,LockedNoteSlot:h,WrapTitle:p}}}n.default_configuration=a,t.exports=n},{"../Theme-Icons.js":30,"pict-view":89}],83:[function(e,t,o){const r=e("pict-view"),i=e("../Theme-Icons.js"),a={ViewIdentifier:"Theme-Picker",AutoInitialize:!0,AutoRender:!1,DefaultDestinationAddress:"#Theme-Picker",DefaultRenderable:"Theme-Picker-Renderable",ProviderHash:"Theme",ModalViewHash:"Pict-Section-Modal",Categories:null,ShowModeIcons:!0,Templates:[{Hash:"Theme-Picker-Template",Template:'\n<button type="button" class="pict-theme-picker"\n title="{~D:AppData.PictSectionTheme.Picker.TriggerTooltip~}"\n onclick="_Pict.views[\'Theme-Picker\'].openMenu(this);">\n\t{~TS:Theme-Picker-Trigger-Glyph:AppData.PictSectionTheme.Picker.TriggerGlyphSlot~}\n\t<span class="pict-theme-picker-name">{~D:AppData.PictSectionTheme.Picker.ActiveLabel~}</span>\n\t<span class="pict-theme-picker-chevron">{~D:AppData.PictSectionTheme.Picker.ChevronHTML~}</span>\n</button>'},{Hash:"Theme-Picker-Trigger-Glyph",Template:'<span class="pict-theme-picker-trigger-glyph">{~D:Record.IconHTML~}</span>'}],Renderables:[{RenderableHash:"Theme-Picker-Renderable",TemplateHash:"Theme-Picker-Template",ContentDestinationAddress:"#Theme-Picker",RenderMethod:"replace"}],CSS:"\n.pict-theme-picker {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 8px;\n\tmin-width: 200px;\n\tmax-width: 100%;\n\tpadding: 6px 10px;\n\tborder-radius: 6px;\n\tfont: inherit;\n\tfont-size: 13px;\n\tbackground: var(--theme-color-background-secondary, #fbfbfc);\n\tcolor: var(--theme-color-text-primary, #1f2933);\n\tborder: 1px solid var(--theme-color-border-default, #cfd5dd);\n\tcursor: pointer;\n\ttext-align: left;\n\ttransition: border-color 120ms ease, box-shadow 120ms ease;\n}\n.pict-theme-picker:hover { border-color: var(--theme-color-text-muted, #6b6b6b); }\n.pict-theme-picker:focus, .pict-theme-picker:focus-visible {\n\toutline: none;\n\tborder-color: var(--theme-color-brand-primary, #2563eb);\n\tbox-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);\n}\n.pict-theme-picker .pict-theme-picker-name {\n\tflex: 1;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.pict-theme-picker .pict-theme-picker-chevron {\n\tcolor: var(--theme-color-text-muted, #6b6b6b);\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n.pict-theme-picker-trigger-glyph {\n\tdisplay: inline-flex; align-items: center;\n\tcolor: var(--theme-color-text-muted, #6b6b6b);\n}\n\n/* Skin the modal-dropdown items with cleaner spacing for our glyphs. */\n.pict-theme-picker-menu .pict-modal-dropdown-item-icon {\n\twidth: 28px;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: flex-start;\n\tcolor: var(--theme-color-text-muted, #6b6b6b);\n}\n.pict-theme-picker-menu .pict-modal-dropdown-item--active {\n\tbackground: var(--theme-color-background-selected, #e0eaff);\n\tcolor: var(--theme-color-brand-primary, #2563eb);\n}\n.pict-theme-picker-menu .pict-modal-dropdown-item--active .pict-modal-dropdown-item-icon {\n\tcolor: var(--theme-color-brand-primary, #2563eb);\n}",CSSPriority:500};class n extends r{constructor(e,t,o){super(e,t,o),this._unsubscribeFromProvider=null}onAfterInitialize(){return this._subscribeToProvider(),super.onAfterInitialize?super.onAfterInitialize():void 0}onBeforeRender(e){return this._subscribeToProvider(),this._refreshAppData(),super.onBeforeRender?super.onBeforeRender(e):void 0}onAfterRender(e,t,o,r){return this.pict.CSSMap.injectCSS(),super.onAfterRender?super.onAfterRender(e,t,o,r):void 0}openMenu(e){let t=this._modal();if(!t)return"undefined"!=typeof console&&console.warn&&console.warn("Theme-Picker: pict-section-modal not registered — cannot open menu."),null;let o=this._buildMenuItems(),r=this;return t.dropdown(e,{items:o,align:"left",minWidth:"260px",maxHeight:"60vh",className:"pict-theme-picker-menu",closeOnSelect:!0,onSelect:function(e){r.pick(e)}})}pick(e){let t=this._provider();if(!t)return!1;let o=t.getActiveTheme(),r=o?o.Mode:null,i=t.applyTheme(e,r);if(i&&"function"==typeof this.options.OnPick)try{this.options.OnPick(e)}catch(e){}return i}_subscribeToProvider(){if(this._unsubscribeFromProvider)return;let e=this._provider();if(!e||"function"!=typeof e.onApply)return;let t=this;this._unsubscribeFromProvider=e.onApply(function(){t.render()})}_provider(){let e=this.options.ProviderHash||"Theme";return this.pict&&this.pict.providers&&this.pict.providers[e]}_modal(){let e=this.options.ModalViewHash||"Pict-Section-Modal";return this.pict&&this.pict.views&&this.pict.views[e]}_buildMenuItems(){let e=this._provider(),t=e?e.listThemes():[],o=e?e.getActiveTheme():{Hash:null},r=o&&o.Hash||null,a=this._loadCatalog(),n={},s=[];Array.isArray(this.options.Categories)&&(s=this.options.Categories.slice());for(let e=0;e<a.length;e++){let t=a[e],o=t.Category||"Other";n[t.Hash]=o,s.indexOf(o)<0&&s.push(o)}let l={};for(let e=0;e<t.length;e++){let o=t[e],r=n[o.Hash]||"Other";l[r]||(l[r]=[],s.indexOf(r)<0&&s.push(r)),l[r].push(o)}let d=!1!==this.options.ShowModeIcons,c=[];for(let e=0;e<s.length;e++){let t=s[e];if(l[t]&&0!==l[t].length){c.push({Header:t});for(let e=0;e<l[t].length;e++){let o=l[t][e],a=d?i.iconForTheme(o.Strategy,o.DefaultMode,14):"";c.push({Hash:o.Hash,Label:o.Name||o.Hash,Icon:a,Style:o.Hash===r?"active":null,Tooltip:this._capabilityLabel(o)})}}}return c}_capabilityLabel(e){if("single"===(e.Strategy||"single")){let t=e.DefaultMode||"light";return(e.Name||e.Hash)+" — "+("dark"===t?"dark only":"light only")}return(e.Name||e.Hash)+" — light + dark"}_refreshAppData(){let e=this._provider(),t=e?e.listThemes():[],o=e?e.getActiveTheme():{Hash:null},r=o&&o.Hash||null,a=null;for(let e=0;e<t.length;e++)if(t[e].Hash===r){a=t[e];break}let n=[];!1!==this.options.ShowModeIcons&&a&&(n=[{IconHTML:i.iconForTheme(a.Strategy,a.DefaultMode,14)}]),this.pict.AppData.PictSectionTheme=this.pict.AppData.PictSectionTheme||{},this.pict.AppData.PictSectionTheme.Picker={ActiveHash:r,ActiveLabel:a?a.Name||a.Hash:"Choose a theme",TriggerTooltip:a?this._capabilityLabel(a)+" — click to change":"Choose a theme",TriggerGlyphSlot:n,ChevronHTML:i.iconChevronDown(10)},this.pict.AppData.PictSectionTheme.AllThemes=t}_loadCatalog(){try{return e("../themes/_catalog.js")}catch(e){return[]}}}n.default_configuration=a,n.APPDATA_ADDRESS="PictSectionTheme.Picker",t.exports=n},{"../Theme-Icons.js":30,"../themes/_catalog.js":36,"pict-view":89}],84:[function(e,t,o){const r=e("pict-view"),i=e("../Theme-Scale.js"),a={ViewIdentifier:"Theme-ScaleSelect",AutoInitialize:!0,AutoRender:!1,DefaultDestinationAddress:"#Theme-ScaleSelect",DefaultRenderable:"Theme-ScaleSelect-Renderable",Presets:null,Templates:[{Hash:"Theme-ScaleSelect-Template",Template:'\n<select class="pict-theme-scaleselect"\n title="{~D:AppData.PictSectionTheme.ScaleSelect.Tooltip~}"\n onchange="_Pict.views[\'Theme-ScaleSelect\'].pickScale(parseFloat(this.value));">\n\t{~TS:Theme-ScaleSelect-Option-Template:AppData.PictSectionTheme.ScaleSelect.Options~}\n</select>'},{Hash:"Theme-ScaleSelect-Option-Template",Template:'\n<option value="{~D:Record.Value~}"{~NE:Record.Selected^ selected~}>{~D:Record.Label~}</option>'}],Renderables:[{RenderableHash:"Theme-ScaleSelect-Renderable",TemplateHash:"Theme-ScaleSelect-Template",ContentDestinationAddress:"#Theme-ScaleSelect",RenderMethod:"replace"}],CSS:"\n.pict-theme-scaleselect {\n\tmin-width: 180px;\n\tpadding: 6px 10px;\n\tborder-radius: 6px;\n\tfont: inherit;\n\tfont-size: 13px;\n\tbackground: var(--theme-color-background-secondary, #fbfbfc);\n\tcolor: var(--theme-color-text-primary, #1f2933);\n\tborder: 1px solid var(--theme-color-border-default, #cfd5dd);\n\tcursor: pointer;\n}\n.pict-theme-scaleselect:focus {\n\toutline: none;\n\tborder-color: var(--theme-color-brand-primary, #2563eb);\n\tbox-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);\n}",CSSPriority:500};class n extends r{constructor(e,t,o){super(e,t,o),this._unsubscribeFromScale=null}onAfterInitialize(){return this._subscribeToScale(),super.onAfterInitialize?super.onAfterInitialize():void 0}onBeforeRender(e){return this._refreshAppData(),super.onBeforeRender?super.onBeforeRender(e):void 0}onAfterRender(e,t,o,r){return this.pict.CSSMap.injectCSS(),super.onAfterRender?super.onAfterRender(e,t,o,r):void 0}pickScale(e){let t=i.applyScale(e);if("function"==typeof this.options.OnScaleChange)try{this.options.OnScaleChange(t)}catch(e){}return t}_subscribeToScale(){if(this._unsubscribeFromScale)return;let e=this;this._unsubscribeFromScale=i.onChange(function(){e.render()})}_refreshAppData(){let e=Array.isArray(this.options.Presets)?this.options.Presets:i.PRESETS,t=i.getActive(),o=0,r=1/0;for(let i=0;i<e.length;i++){let a=Math.abs(e[i].Value-t);a<r&&(r=a,o=i)}let a=[];for(let t=0;t<e.length;t++){let r=e[t];a.push({Value:r.Value,Label:r.Label,Selected:t===o})}let n="Viewport scale — currently "+Math.round(100*t)+"%";this.pict.AppData.PictSectionTheme=this.pict.AppData.PictSectionTheme||{},this.pict.AppData.PictSectionTheme.ScaleSelect={ActiveScale:t,Tooltip:n,Options:a}}}n.default_configuration=a,t.exports=n},{"../Theme-Scale.js":32,"pict-view":89}],85:[function(e,t,o){const r=e("pict-view"),i={ViewIdentifier:"Theme-TopBar",AutoInitialize:!0,AutoRender:!1,DefaultDestinationAddress:"#Theme-TopBar",DefaultRenderable:"Theme-TopBar-Renderable",MountBrandMark:!0,MountThemeButton:!0,NavView:null,UserView:null,Height:56,NavAlign:"right",CompactBreakpoint:900,Templates:[{Hash:"Theme-TopBar-Template",Template:'\n<div class="pict-theme-topbar">\n\t<div class="pict-theme-topbar-mark"><div id="Theme-Brand-Mark"></div></div>\n\t<div class="pict-theme-topbar-nav" id="Theme-TopBar-Nav"></div>\n\t<div class="pict-theme-topbar-user">\n\t\t<div class="pict-theme-topbar-user-slot" id="Theme-TopBar-User"></div>\n\t\t<div class="pict-theme-topbar-user-button"><div id="Theme-Button"></div></div>\n\t\t<button type="button" class="pict-theme-topbar-burger"\n\t\t\taria-label="More navigation"\n\t\t\ttitle="Menu"\n\t\t\tonclick="_Pict.views[\'Theme-TopBar\'].openBurgerMenu();">\n\t\t\t<svg width="20" height="20" viewBox="0 0 24 24" fill="none"\n\t\t\t\tstroke="currentColor" stroke-width="2"\n\t\t\t\tstroke-linecap="round" stroke-linejoin="round"\n\t\t\t\taria-hidden="true">\n\t\t\t\t<path d="M3 6h18M3 12h18M3 18h18"/>\n\t\t\t</svg>\n\t\t</button>\n\t</div>\n</div>'}],Renderables:[{RenderableHash:"Theme-TopBar-Renderable",TemplateHash:"Theme-TopBar-Template",ContentDestinationAddress:"#Theme-TopBar",RenderMethod:"replace"}],CSS:'\n.pict-theme-topbar {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 14px;\n\t/* The min-height is rewritten per-instance in onAfterRender from the\n\t Height option (default 56). Avoids the percent-height resolution\n\t trap: pict-section-modal\'s panel destination uses min-height: 100%\n\t on its inner div, which means a child\'s height: 100% / min-height:\n\t 100% resolves against the parent\'s *property* (auto), not its\n\t resolved size — and collapses the row to its content. A fixed px\n\t value gives align-items: center real space to centre into. */\n\tmin-height: 56px;\n\tpadding: 0 14px;\n\tbox-sizing: border-box;\n\tbackground: var(--theme-color-background-panel, transparent);\n\t/* Brand stripes are drawn by .pict-theme-topbar::after as an absolute\n\t element overlaying the bottom 5px of the row. Using ::after rather\n\t than border-bottom + box-shadow lets us put a transparent gap\n\t between the two stripes (border / box-shadow can\'t draw gaps).\n\t Position relative so the ::after positions to this row. */\n\tposition: relative;\n}\n/* Two-stripe brand identifier at the bottom of the topbar:\n 4px brand-primary (thicker — the dominant identifier)\n 2px transparent gap (clearly readable separation)\n 3px brand-secondary (thinner than primary but still substantial)\n Earlier iterations used 1–2px stripes; both read clearly at light\n mode but dark-mode secondary colors are often desaturated (lifted)\n so the eye can miss a thin band against a dark background. The\n current sizes push the secondary above the perception threshold\n regardless of palette. Stripes overlay the bottom 9px of the row;\n content (which centres in the full row via align-items: center)\n keeps its visual position. */\n.pict-theme-topbar::after {\n\tcontent: \'\';\n\tposition: absolute;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\theight: 9px;\n\tpointer-events: none;\n\tbackground: linear-gradient(\n\t\tto bottom,\n\t\tvar(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb)) 0,\n\t\tvar(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb)) 4px,\n\t\ttransparent 4px,\n\t\ttransparent 6px,\n\t\tvar(--brand-color-secondary-mode, var(--theme-color-brand-secondary, transparent)) 6px,\n\t\tvar(--brand-color-secondary-mode, var(--theme-color-brand-secondary, transparent)) 9px\n\t);\n}\n.pict-theme-topbar-mark {\n\tflex: 0 0 auto;\n\tdisplay: flex;\n\talign-items: center;\n}\n.pict-theme-topbar-nav {\n\tflex: 1 1 auto;\n\tdisplay: flex;\n\talign-items: center;\n\t/* Default to right-aligning nav items inside the stretched slot —\n\t the convention retold-* apps converged on. Overridden per-instance\n\t from the NavAlign option in onAfterRender. */\n\tjustify-content: flex-end;\n\tgap: 8px;\n\tmin-width: 0;\n\t/* Horizontally scrollable when the nav overflows (narrow viewports\n\t with many buttons) — better than overflow:hidden which would\n\t silently clip buttons offscreen. The vertical axis stays clipped\n\t so a tall accidental child doesn\'t blow up the row height. A\n\t proper overflow menu is a future enhancement; this gets us safe\n\t degradation today. */\n\toverflow-x: auto;\n\toverflow-y: hidden;\n\t/* Hide the scrollbar by default; modern browsers pick up the\n\t trackpad scroll without it. Apps wanting a visible scrollbar\n\t can override at higher specificity. */\n\tscrollbar-width: none;\n}\n.pict-theme-topbar-nav::-webkit-scrollbar { display: none; }\n/* Active-route indicator. The convention every host app should follow:\n put aria-current="page" on the button (or anchor) representing the\n current route. The W3C-standard attribute reads correctly to screen\n readers and gets a brand-tinted highlight here. Apps that already\n ship their own active styling can override these rules — they\'re\n keyed off attribute selectors so no class collision is possible. */\n.pict-theme-topbar-nav [aria-current="page"],\n.pict-theme-topbar-user [aria-current="page"] {\n\tcolor: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n\tborder-color: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n\tbackground: var(--theme-color-background-hover, rgba(37, 99, 235, 0.08));\n}\n.pict-theme-topbar-user {\n\tflex: 0 0 auto;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n.pict-theme-topbar-user-slot {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n.pict-theme-topbar-user-button {\n\tdisplay: flex;\n\talign-items: center;\n}\n/* Burger button — hidden by default; the media query (or the inline\n per-instance JS that swaps it via CompactBreakpoint) shows it once\n the viewport drops below the host\'s compact threshold. Sized to\n match Theme-Button (28×28) so the row\'s rhythm is preserved. */\n.pict-theme-topbar-burger {\n\tdisplay: none;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 28px;\n\theight: 28px;\n\tpadding: 0;\n\tborder-radius: 6px;\n\tborder: 1px solid var(--theme-color-border-default, #cfd5dd);\n\tbackground: var(--theme-color-background-secondary, #fbfbfc);\n\tcolor: var(--theme-color-text-secondary, #4a5568);\n\tcursor: pointer;\n\ttransition: background-color 120ms ease, color 120ms ease, border-color 120ms ease;\n}\n.pict-theme-topbar-burger:hover {\n\tbackground: var(--theme-color-background-hover, #f0f0f0);\n\tcolor: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n\tborder-color: var(--brand-color-primary-mode, var(--theme-color-brand-primary, #2563eb));\n}\n/* Burger menu popup — applied to the cloned nav + user DOM inside\n pict-section-modal. The cloned children inherit their original\n styling (action buttons, badges, etc.) so the popup looks visually\n consistent with what was on the topbar. */\n.pict-theme-burger-menu {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n}\n.pict-theme-burger-menu-section {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n}\n/* Cloned children render as a vertical stack inside the popup — flip\n the horizontal flex layouts to column so each button takes a full\n row instead of cramming side-by-side at narrow width. */\n.pict-theme-burger-menu .rm-topbar-nav,\n.pict-theme-burger-menu .rm-topbar-user,\n.pict-theme-burger-menu [class*="-topbar-nav"],\n.pict-theme-burger-menu [class*="-topbar-user"] {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: stretch;\n\tgap: 6px;\n}\n.pict-theme-burger-menu button { width: 100%; text-align: left; }\n.pict-theme-burger-menu .rm-topbar-nav-divider,\n.pict-theme-burger-menu [class*="divider"] { display: none; }\n/* Compact mode — defaults to a 900px breakpoint. The onAfterRender\n handler injects a per-instance <style> rule when the host passes a\n different CompactBreakpoint, so this @media block is the fallback\n for hosts that accept the default. */\n@media (max-width: 900px) {\n\t.pict-theme-topbar-nav { display: none !important; }\n\t.pict-theme-topbar-user-slot { display: none !important; }\n\t.pict-theme-topbar-burger { display: inline-flex; }\n\t/* In wide mode the flex-1 nav slot pushes the user-area to the\n\t right edge. With the nav hidden the user-area would collapse\n\t left of the now-empty middle; the auto-margin re-creates the\n\t "push right" effect so the theme button + burger stay flush\n\t against the right edge of the topbar. */\n\t.pict-theme-topbar-user { margin-left: auto; }\n}',CSSPriority:500};t.exports=class extends r{constructor(e,t,o){super(e,t,o)}onAfterRender(e,t,o,r){if(this.pict.CSSMap.injectCSS(),"undefined"!=typeof document&&this.options.Height){let e=document.querySelector(".pict-theme-topbar");e&&(e.style.minHeight=this.options.Height+"px")}if(this._applyCompactBreakpoint(),"undefined"!=typeof document&&this.options.NavAlign){let e={left:"flex-start",right:"flex-end",center:"center"}[this.options.NavAlign];if(e){let t=document.querySelector(".pict-theme-topbar-nav");t&&(t.style.justifyContent=e)}}if(!1!==this.options.MountBrandMark){let e=this.pict.views["Theme-Brand-Mark"];e&&e.render()}if(this.options.NavView){let e=this.pict.views[this.options.NavView];e?e.render():this.log&&this.log.warn&&this.log.warn('Theme-TopBar: NavView "'+this.options.NavView+'" not registered')}if(this.options.UserView){let e=this.pict.views[this.options.UserView];e?e.render():this.log&&this.log.warn&&this.log.warn('Theme-TopBar: UserView "'+this.options.UserView+'" not registered')}if(!1!==this.options.MountThemeButton){let e=this.pict.views["Theme-Button"];e&&e.render()}return super.onAfterRender?super.onAfterRender(e,t,o,r):void 0}setNavView(e){this.options.NavView=e||null,this._mountSlot("#Theme-TopBar-Nav",this.options.NavView)}setUserView(e){this.options.UserView=e||null,this._mountSlot("#Theme-TopBar-User",this.options.UserView)}_mountSlot(e,t){if("undefined"!=typeof document){let t=document.querySelector(e);t&&(t.innerHTML="")}if(!t)return;let o=this.pict.views[t];o?o.render():this.log&&this.log.warn&&this.log.warn('Theme-TopBar: view "'+t+'" not registered')}_applyCompactBreakpoint(){if("undefined"==typeof document)return;let e=this.options.CompactBreakpoint;if(null==e)return;if(900===e)return;let t="pict-theme-topbar-compact-"+this.UUID,o=document.getElementById(t);o||(o=document.createElement("style"),o.id=t,document.head.appendChild(o)),o.textContent="number"!=typeof e||e<=0?".pict-theme-topbar-nav { display: flex !important; }\n.pict-theme-topbar-user-slot { display: flex !important; }\n.pict-theme-topbar-burger { display: none !important; }\n.pict-theme-topbar-user { margin-left: 0 !important; }\n":"@media (max-width: "+e+"px) {\n\t.pict-theme-topbar-nav { display: none !important; }\n\t.pict-theme-topbar-user-slot { display: none !important; }\n\t.pict-theme-topbar-burger { display: inline-flex !important; }\n\t.pict-theme-topbar-user { margin-left: auto !important; }\n}\n@media (min-width: "+(e+1)+"px) {\n\t.pict-theme-topbar-nav { display: flex !important; }\n\t.pict-theme-topbar-user-slot { display: flex !important; }\n\t.pict-theme-topbar-burger { display: none !important; }\n\t.pict-theme-topbar-user { margin-left: 0 !important; }\n}\n"}openBurgerMenu(){if("undefined"==typeof document)return null;let e=this.pict.views["Pict-Section-Modal"];if(!e||"function"!=typeof e.show)return"undefined"!=typeof console&&console.warn&&console.warn("Theme-TopBar: pict-section-modal not registered — burger menu unavailable."),null;let t=[],o=document.querySelector("#Theme-TopBar-Nav"),r=document.querySelector("#Theme-TopBar-User");o&&o.innerHTML.trim()&&t.push('<div class="pict-theme-burger-menu-section">'+o.innerHTML+"</div>"),r&&r.innerHTML.trim()&&t.push('<div class="pict-theme-burger-menu-section">'+r.innerHTML+"</div>"),0===t.length&&t.push('<div class="pict-theme-burger-menu-empty">No menu items configured.</div>');let i='<div class="pict-theme-burger-menu">'+t.join("")+"</div>";return e.show({title:"Menu",content:i,width:"280px",closeable:!0,buttons:[]})}},t.exports.default_configuration=i},{"pict-view":89}],86:[function(e,t,o){t.exports={name:"pict-template",version:"1.0.15",description:"Pict Template Base Class",main:"source/Pict-Template.js",scripts:{start:"node source/Pict-Template.js",test:"npx quack test",tests:"npx quack test -g",coverage:"npx quack coverage",build:"npx quack build",types:"tsc -p ."},types:"types/source/Pict-Template.d.ts",repository:{type:"git",url:"git+https://github.com/stevenvelozo/pict-view.git"},author:"steven velozo <steven@velozo.com>",license:"MIT",bugs:{url:"https://github.com/stevenvelozo/pict-view/issues"},homepage:"https://github.com/stevenvelozo/pict-view#readme",devDependencies:{pict:"^1.0.348",quackage:"^1.0.58",typescript:"^5.9.3"},mocha:{diff:!0,extension:["js"],package:"./package.json",reporter:"spec",slow:"75",timeout:"5000",ui:"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]},dependencies:{"fable-serviceproviderbase":"^3.0.19"}}},{}],87:[function(e,t,o){const r=e("fable-serviceproviderbase"),i=e("../package.json");t.exports=class extends r{constructor(e,t,o){super(e,t,o),this.fable,this.pict=this.fable,this.serviceType="PictTemplate",this._Package=i}render(e,t,o,r,i){return""}renderAsync(e,t,o,r,i,a){return o(null,this.render(e,t,r,i,a))}addPattern(e,t){return this.pict.MetaTemplate.addPatternBoth(e,t,this.render,this.renderAsync,this)}resolveStateFromAddress(e,t,o,r,i,a){return this.pict.resolveStateFromAddress(e,t,o,r,i,a)}},t.exports.template_hash="Default"},{"../package.json":86,"fable-serviceproviderbase":2}],88:[function(e,t,o){t.exports={name:"pict-view",version:"1.0.68",description:"Pict View Base Class",main:"source/Pict-View.js",scripts:{test:"npx quack test",tests:"npx quack test -g",start:"node source/Pict-View.js",coverage:"npx quack coverage",build:"npx quack build","docker-dev-build":"docker build ./ -f Dockerfile_LUXURYCode -t pict-view-image:local","docker-dev-run":'docker run -it -d --name pict-view-dev -p 30001:8080 -p 38086:8086 -v "$PWD/.config:/home/coder/.config" -v "$PWD:/home/coder/pict-view" -u "$(id -u):$(id -g)" -e "DOCKER_USER=$USER" pict-view-image:local',"docker-dev-shell":"docker exec -it pict-view-dev /bin/bash",types:"tsc -p .",lint:"eslint source/**"},types:"types/source/Pict-View.d.ts",repository:{type:"git",url:"git+https://github.com/stevenvelozo/pict-view.git"},author:"steven velozo <steven@velozo.com>",license:"MIT",bugs:{url:"https://github.com/stevenvelozo/pict-view/issues"},homepage:"https://github.com/stevenvelozo/pict-view#readme",devDependencies:{"@eslint/js":"^9.39.1","browser-env":"^3.3.0",eslint:"^9.39.1",pict:"^1.0.363",quackage:"^1.0.65",typescript:"^5.9.3"},mocha:{diff:!0,extension:["js"],package:"./package.json",reporter:"spec",slow:"75",timeout:"5000",ui:"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]},dependencies:{fable:"^3.1.67","fable-serviceproviderbase":"^3.0.19"}}},{}],89:[function(e,t,o){const r=e("fable-serviceproviderbase"),i=e("../package.json"),a={DefaultRenderable:!1,DefaultDestinationAddress:!1,DefaultTemplateRecordAddress:!1,ViewIdentifier:!1,AutoInitialize:!0,AutoInitializeOrdinal:0,AutoRender:!0,AutoRenderOrdinal:0,AutoSolveWithApp:!0,AutoSolveOrdinal:0,CSSHash:!1,CSS:!1,CSSProvider:!1,CSSPriority:500,Templates:[],DefaultTemplates:[],Renderables:[],Manifests:{}};t.exports=class extends r{constructor(e,t,o){super(e,Object.assign({},JSON.parse(JSON.stringify(a)),t),o),this.fable,this.options,this.UUID,this.Hash,this.log;const r=this.Hash===this.UUID;this.UUID=`V-${this.UUID}`,r&&(this.Hash=this.UUID),this.options.ViewIdentifier||(this.options.ViewIdentifier=`AutoViewID-${this.fable.getUUID()}`),this.serviceType="PictView",this._Package=i,this.pict=this.fable,this.AppData=this.pict.AppData,this.Bundle=this.pict.Bundle,this.initializeTimestamp=!1,this.lastSolvedTimestamp=!1,this.lastRenderedTimestamp=!1,this.lastMarshalFromViewTimestamp=!1,this.lastMarshalToViewTimestamp=!1,this.pict.instantiateServiceProviderIfNotExists("TransactionTracking");for(let e=0;e<this.options.Templates.length;e++){let t=this.options.Templates[e];"Hash"in t&&"Template"in t?(t.Source||(t.Source=`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} options object.`),this.pict.TemplateProvider.addTemplate(t.Hash,t.Template,t.Source)):this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not load Template ${e} in the options array.`,t)}for(let e=0;e<this.options.DefaultTemplates.length;e++){let t=this.options.DefaultTemplates[e];"Postfix"in t&&"Template"in t?(t.Source||(t.Source=`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} options object.`),this.pict.TemplateProvider.addDefaultTemplate(t.Prefix,t.Postfix,t.Template,t.Source)):this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not load Default Template ${e} in the options array.`,t)}if(this.options.CSS){let e=this.options.CSSHash?this.options.CSSHash:`View-${this.options.ViewIdentifier}`,t=this.options.CSSProvider?this.options.CSSProvider:e;this.pict.CSSMap.addCSS(e,this.options.CSS,t,this.options.CSSPriority)}this.renderables={};for(let e=0;e<this.options.Renderables.length;e++){let t=this.options.Renderables[e];this.addRenderable(t)}}addRenderable(e,t,o,r,i){let a;if("object"==typeof e)a=e;else{a={RenderableHash:e,TemplateHash:t,DefaultTemplateRecordAddress:o,ContentDestinationAddress:r,RenderMethod:"string"!=typeof i?i:"replace"}}"string"!=typeof a.RenderableHash||"string"!=typeof a.TemplateHash?this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not load Renderable; RenderableHash or TemplateHash are invalid.`,a):(this.pict.LogNoisiness>0&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} adding renderable [${a.RenderableHash}] pointed to template ${a.TemplateHash}.`),this.renderables[a.RenderableHash]=a)}onBeforeInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeInitialize:`),!0}onBeforeInitializeAsync(e){return this.onBeforeInitialize(),e()}onInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onInitialize:`),!0}onInitializeAsync(e){return this.onInitialize(),e()}initialize(){return this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow VIEW [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} initialize:`),this.initializeTimestamp?(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} initialize called but initialization is already completed. Aborting.`),!1):(this.onBeforeInitialize(),this.onInitialize(),this.onAfterInitialize(),this.initializeTimestamp=this.pict.log.getTimeStamp(),!0)}initializeAsync(e){if(this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow VIEW [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} initializeAsync:`),this.initializeTimestamp)return this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} async initialize called but initialization is already completed. Aborting.`),e();{let t=this.pict.instantiateServiceProviderWithoutRegistration("Anticipate");this.pict.LogNoisiness>0&&this.log.info(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} beginning initialization...`),t.anticipate(this.onBeforeInitializeAsync.bind(this)),t.anticipate(this.onInitializeAsync.bind(this)),t.anticipate(this.onAfterInitializeAsync.bind(this)),t.wait(t=>(t&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} initialization failed: ${t.message||t}`,{stack:t.stack}),this.initializeTimestamp=this.pict.log.getTimeStamp(),this.pict.LogNoisiness>0&&this.log.info(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} initialization complete.`),e()))}}onAfterInitialize(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterInitialize:`),!0}onAfterInitializeAsync(e){return this.onAfterInitialize(),e()}onBeforeRender(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeRender:`),!0}onBeforeRenderAsync(e,t){return this.onBeforeRender(t),e()}onBeforeProject(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeProject:`),!0}onBeforeProjectAsync(e,t){return this.onBeforeProject(t),e()}buildRenderOptions(e,t,o){let r={Valid:!0};return r.RenderableHash="string"==typeof e?e:"string"==typeof this.options.DefaultRenderable&&this.options.DefaultRenderable,r.RenderableHash||(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not find a suitable RenderableHash ${r.RenderableHash} (param ${e}because it is not a valid renderable.`),r.Valid=!1),r.Renderable=this.renderables[r.RenderableHash],r.Renderable||(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${r.RenderableHash} (param ${e}) because it does not exist.`),r.Valid=!1),r.DestinationAddress="string"==typeof t?t:"string"==typeof r.Renderable.ContentDestinationAddress?r.Renderable.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress&&this.options.DefaultDestinationAddress,r.DestinationAddress||(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${r.RenderableHash} (param ${e}) because it does not have a valid destination address (param ${t}).`),r.Valid=!1),"object"==typeof o?(r.RecordAddress="Passed in as object",r.Record=o):(r.RecordAddress="string"==typeof o?o:"string"==typeof r.Renderable.DefaultTemplateRecordAddress?r.Renderable.DefaultTemplateRecordAddress:"string"==typeof this.options.DefaultTemplateRecordAddress&&this.options.DefaultTemplateRecordAddress,r.Record="string"==typeof r.RecordAddress?this.pict.DataProvider.getDataByAddress(r.RecordAddress):void 0),r}assignRenderContent(e,t,o){return this.pict.ContentAssignment.projectContent(e.RenderMethod,t,o,e.TestAddress)}render(e,t,o,r){return this.renderWithScope(this,e,t,o,r)}renderWithScope(e,t,o,r,i){let a,n,s,l="string"==typeof t?t:"string"==typeof this.options.DefaultRenderable&&this.options.DefaultRenderable;return l?("__Virtual"==l?a={RenderableHash:"__Virtual",TemplateHash:this.renderables[this.options.DefaultRenderable].TemplateHash,ContentDestinationAddress:"string"==typeof o?o:"string"==typeof a.ContentDestinationAddress?a.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null,RenderMethod:"virtual-assignment",TransactionHash:i&&i.TransactionHash,RootRenderableViewHash:i&&i.RootRenderableViewHash}:(a=Object.assign({},this.renderables[l]),a.ContentDestinationAddress="string"==typeof o?o:"string"==typeof a.ContentDestinationAddress?a.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null),a.TransactionHash||(a.TransactionHash=`ViewRender-V-${this.options.ViewIdentifier}-R-${l}-U-${this.pict.getUUID()}`,a.RootRenderableViewHash=this.Hash,this.pict.TransactionTracking.registerTransaction(a.TransactionHash)),a?a.ContentDestinationAddress?("object"==typeof r?(s=r,n="Passed in as object"):(n="string"==typeof r?r:"string"==typeof a.DefaultTemplateRecordAddress?a.DefaultTemplateRecordAddress:"string"==typeof this.options.DefaultTemplateRecordAddress&&this.options.DefaultTemplateRecordAddress,s="string"==typeof n?this.pict.DataProvider.getDataByAddress(n):void 0),this.onBeforeRender(a),this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow VIEW [${this.UUID}]::[${this.Hash}] Renderable[${l}] Destination[${a.ContentDestinationAddress}] TemplateRecordAddress[${n}] render:`),this.pict.LogNoisiness>0&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} Beginning Render of Renderable[${l}] to Destination [${a.ContentDestinationAddress}]...`),a.Content=this.pict.parseTemplateByHash(a.TemplateHash,s,null,[this],e,{RootRenderable:"object"==typeof i?i:a}),this.pict.LogNoisiness>0&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} Assigning Renderable[${l}] content length ${a.Content.length} to Destination [${a.ContentDestinationAddress}] using render method [${a.RenderMethod}].`),this.onBeforeProject(a),this.onProject(a),"virtual-assignment"!==a.RenderMethod&&(this.onAfterProject(a),this.onAfterRender(a)),!0):(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${l} (param ${t}) because it does not have a valid destination address.`),!1):(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${l} (param ${t}) because it does not exist.`),!1)):(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${l} (param ${t}) because it is not a valid renderable.`),!1)}renderAsync(e,t,o,r,i){return this.renderWithScopeAsync(this,e,t,o,r,i)}renderWithScopeAsync(e,t,o,r,i,a){let n,s,l,d="string"==typeof t?t:"string"==typeof this.options.DefaultRenderable&&this.options.DefaultRenderable,c="function"==typeof a?a:"function"==typeof r?r:"function"==typeof o?o:"function"==typeof t?t:"function"==typeof i?i:null;if(c||(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),c=e=>{e&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} renderAsync Auto Callback Error: ${e}`,e)}),!d)return this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not asynchronously render ${d} (param ${t}because it is not a valid renderable.`),c(new Error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not asynchronously render ${d} (param ${t}because it is not a valid renderable.`));if("__Virtual"==d?n={RenderableHash:"__Virtual",TemplateHash:this.renderables[this.options.DefaultRenderable].TemplateHash,ContentDestinationAddress:"string"==typeof o?o:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null,RenderMethod:"virtual-assignment",TransactionHash:i&&"function"!=typeof i&&i.TransactionHash,RootRenderableViewHash:i&&"function"!=typeof i&&i.RootRenderableViewHash}:(n=Object.assign({},this.renderables[d]),n.ContentDestinationAddress="string"==typeof o?o:"string"==typeof n.ContentDestinationAddress?n.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null),n.TransactionHash||(n.TransactionHash=`ViewRender-V-${this.options.ViewIdentifier}-R-${d}-U-${this.pict.getUUID()}`,n.RootRenderableViewHash=this.Hash,this.pict.TransactionTracking.registerTransaction(n.TransactionHash)),!n)return this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${d} (param ${t}) because it does not exist.`),c(new Error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${d} (param ${t}) because it does not exist.`));if(!n.ContentDestinationAddress)return this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render ${d} (param ${t}) because it does not have a valid destination address.`),c(new Error(`Could not render ${d}`));"object"==typeof r?(l=r,s="Passed in as object"):(s="string"==typeof r?r:"string"==typeof n.DefaultTemplateRecordAddress?n.DefaultTemplateRecordAddress:"string"==typeof this.options.DefaultTemplateRecordAddress&&this.options.DefaultTemplateRecordAddress,l="string"==typeof s?this.pict.DataProvider.getDataByAddress(s):void 0),this.pict.LogControlFlow&&this.log.trace(`PICT-ControlFlow VIEW [${this.UUID}]::[${this.Hash}] Renderable[${d}] Destination[${n.ContentDestinationAddress}] TemplateRecordAddress[${s}] renderAsync:`),this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} Beginning Asynchronous Render (callback-style)...`);let h=this.fable.newAnticipate();h.anticipate(e=>{this.onBeforeRenderAsync(e,n)}),h.anticipate(o=>{this.pict.parseTemplateByHash(n.TemplateHash,l,(e,r)=>e?(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render (asynchronously) ${d} (param ${t}) because it did not parse the template.`,e),o(e)):(n.Content=r,o()),[this],e,{RootRenderable:"object"==typeof i?i:n})}),h.anticipate(e=>{this.onBeforeProjectAsync(e,n)}),h.anticipate(e=>{this.onProjectAsync(e,n)}),"virtual-assignment"!==n.RenderMethod&&(h.anticipate(e=>{this.onAfterProjectAsync(e,n)}),h.anticipate(e=>{this.onAfterRenderAsync(e,n)})),h.wait(c)}renderDefaultAsync(e){this.renderAsync(e)}basicRender(e,t,o){return this.basicRenderWithScope(this,e,t,o)}basicRenderWithScope(e,t,o,r){let i=this.buildRenderOptions(t,o,r);return i.Valid?(this.assignRenderContent(i.Renderable,i.DestinationAddress,this.pict.parseTemplateByHash(i.Renderable.TemplateHash,i.Record,null,[this],e,{RootRenderable:i.Renderable})),!0):(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not perform a basic render of ${i.RenderableHash} because it is not valid.`),!1)}basicRenderAsync(e,t,o,r){return this.basicRenderWithScopeAsync(this,e,t,o,r)}basicRenderWithScopeAsync(e,t,o,r,i){let a="function"==typeof i?i:"function"==typeof r?r:"function"==typeof o?o:"function"==typeof t?t:null;a||(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} basicRenderAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),a=e=>{e&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} basicRenderAsync Auto Callback Error: ${e}`,e)});const n=this.buildRenderOptions(t,o,r);if(!n.Valid){let e=`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not perform a basic render of ${n.RenderableHash} because it is not valid.`;return this.log.error(e),a(new Error(e))}this.pict.parseTemplateByHash(n.Renderable.TemplateHash,n.Record,(e,t)=>e?(this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} could not render (asynchronously) ${n.RenderableHash} because it did not parse the template.`,e),a(e)):(this.assignRenderContent(n.Renderable,n.DestinationAddress,t),a()),[this],e,{RootRenderable:n.Renderable})}onProject(e){this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onProject:`),"virtual-assignment"===e.RenderMethod&&this.pict.TransactionTracking.pushToTransactionQueue(e.TransactionHash,{ViewHash:this.Hash,Renderable:e},"Deferred-Post-Content-Assignment"),this.pict.LogNoisiness>0&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} Assigning Renderable[${e.RenderableHash}] content length ${e.Content.length} to Destination [${e.ContentDestinationAddress}] using Async render method ${e.RenderMethod}.`),this.pict.ContentAssignment.projectContent(e.RenderMethod,e.ContentDestinationAddress,e.Content,e.TestAddress),this.lastRenderedTimestamp=this.pict.log.getTimeStamp()}onProjectAsync(e,t){return this.onProject(t),e()}onAfterRender(e){if(this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterRender:`),e&&e.RootRenderableViewHash===this.Hash){const t=this.pict.TransactionTracking.clearTransactionQueue(e.TransactionHash)||[];for(const o of t){const t=this.pict.views[o.Data.ViewHash];t?(t.onAfterProject(),t.onAfterRender(o.Data.Renderable)):this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterRender: Could not find view for transaction hash ${e.TransactionHash} and ViewHash ${o.Data.ViewHash}.`)}this.pict.TransactionTracking.unregisterTransaction(e.TransactionHash)}return!0}onAfterRenderAsync(e,t){this.onAfterRender(t);const o=this.fable.newAnticipate(),r=t&&t.RootRenderableViewHash===this.Hash;if(r){const e=this.pict.TransactionTracking.clearTransactionQueue(t.TransactionHash)||[];for(const r of e){const e=this.pict.views[r.Data.ViewHash];e?(o.anticipate(e.onAfterProjectAsync.bind(e)),o.anticipate(t=>{e.onAfterRenderAsync(t,r.Data.Renderable)})):this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterRenderAsync: Could not find view for transaction hash ${t.TransactionHash} and ViewHash ${r.Data.ViewHash}.`)}}return o.wait(o=>(r&&t&&t.TransactionHash&&this.pict.TransactionTracking.unregisterTransaction(t.TransactionHash),e(o)))}onAfterProject(e){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterProject:`),!0}onAfterProjectAsync(e,t){return e()}onBeforeSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeSolve:`),!0}onBeforeSolveAsync(e){return this.onBeforeSolve(),e()}onSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onSolve:`),!0}onSolveAsync(e){return this.onSolve(),e()}solve(){return this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} executing solve() function...`),this.onBeforeSolve(),this.onSolve(),this.onAfterSolve(),this.lastSolvedTimestamp=this.pict.log.getTimeStamp(),!0}solveAsync(e){let t=this.pict.instantiateServiceProviderWithoutRegistration("Anticipate"),o="function"==typeof e?e:null;o||(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} solveAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),o=e=>{e&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} solveAsync Auto Callback Error: ${e}`,e)}),t.anticipate(this.onBeforeSolveAsync.bind(this)),t.anticipate(this.onSolveAsync.bind(this)),t.anticipate(this.onAfterSolveAsync.bind(this)),t.wait(e=>(this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} solveAsync() complete.`),this.lastSolvedTimestamp=this.pict.log.getTimeStamp(),o(e)))}onAfterSolve(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterSolve:`),!0}onAfterSolveAsync(e){return this.onAfterSolve(),e()}onBeforeMarshalFromView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeMarshalFromView:`),!0}onBeforeMarshalFromViewAsync(e){return this.onBeforeMarshalFromView(),e()}onMarshalFromView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onMarshalFromView:`),!0}onMarshalFromViewAsync(e){return this.onMarshalFromView(),e()}marshalFromView(){return this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} executing solve() function...`),this.onBeforeMarshalFromView(),this.onMarshalFromView(),this.onAfterMarshalFromView(),this.lastMarshalFromViewTimestamp=this.pict.log.getTimeStamp(),!0}marshalFromViewAsync(e){let t=this.pict.instantiateServiceProviderWithoutRegistration("Anticipate"),o="function"==typeof e?e:null;o||(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalFromViewAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),o=e=>{e&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalFromViewAsync Auto Callback Error: ${e}`,e)}),t.anticipate(this.onBeforeMarshalFromViewAsync.bind(this)),t.anticipate(this.onMarshalFromViewAsync.bind(this)),t.anticipate(this.onAfterMarshalFromViewAsync.bind(this)),t.wait(e=>(this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} marshalFromViewAsync() complete.`),this.lastMarshalFromViewTimestamp=this.pict.log.getTimeStamp(),o(e)))}onAfterMarshalFromView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterMarshalFromView:`),!0}onAfterMarshalFromViewAsync(e){return this.onAfterMarshalFromView(),e()}onBeforeMarshalToView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onBeforeMarshalToView:`),!0}onBeforeMarshalToViewAsync(e){return this.onBeforeMarshalToView(),e()}onMarshalToView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onMarshalToView:`),!0}onMarshalToViewAsync(e){return this.onMarshalToView(),e()}marshalToView(){return this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} executing solve() function...`),this.onBeforeMarshalToView(),this.onMarshalToView(),this.onAfterMarshalToView(),this.lastMarshalToViewTimestamp=this.pict.log.getTimeStamp(),!0}marshalToViewAsync(e){let t=this.pict.instantiateServiceProviderWithoutRegistration("Anticipate"),o="function"==typeof e?e:null;o||(this.log.warn(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalToViewAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.`),o=e=>{e&&this.log.error(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.Name} marshalToViewAsync Auto Callback Error: ${e}`,e)}),t.anticipate(this.onBeforeMarshalToViewAsync.bind(this)),t.anticipate(this.onMarshalToViewAsync.bind(this)),t.anticipate(this.onAfterMarshalToViewAsync.bind(this)),t.wait(e=>(this.pict.LogNoisiness>2&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} marshalToViewAsync() complete.`),this.lastMarshalToViewTimestamp=this.pict.log.getTimeStamp(),o(e)))}onAfterMarshalToView(){return this.pict.LogNoisiness>3&&this.log.trace(`PictView [${this.UUID}]::[${this.Hash}] ${this.options.ViewIdentifier} onAfterMarshalToView:`),!0}onAfterMarshalToViewAsync(e){return this.onAfterMarshalToView(),e()}get isPictView(){return!0}}},{"../package.json":88,"fable-serviceproviderbase":2}],90:[function(e,t,o){var r,i,a=t.exports={};function n(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function l(e){if(r===setTimeout)return setTimeout(e,0);if((r===n||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:n}catch(e){r=n}try{i="function"==typeof clearTimeout?clearTimeout:s}catch(e){i=s}}();var d,c=[],h=!1,p=-1;function m(){h&&d&&(h=!1,d.length?c=d.concat(c):p=-1,c.length&&u())}function u(){if(!h){var e=l(m);h=!0;for(var t=c.length;t;){for(d=c,c=[];++p<t;)d&&d[p].run();p=-1,t=c.length}d=null,h=!1,function(e){if(i===clearTimeout)return clearTimeout(e);if((i===s||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{return i(e)}catch(t){try{return i.call(null,e)}catch(t){return i.call(this,e)}}}(e)}}function g(e,t){this.fun=e,this.array=t}function f(){}a.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var o=1;o<arguments.length;o++)t[o-1]=arguments[o];c.push(new g(e,t)),1!==c.length||h||l(u)},g.prototype.run=function(){this.fun.apply(null,this.array)},a.title="browser",a.browser=!0,a.env={},a.argv=[],a.version="",a.versions={},a.on=f,a.addListener=f,a.once=f,a.off=f,a.removeListener=f,a.removeAllListeners=f,a.emit=f,a.prependListener=f,a.prependOnceListener=f,a.listeners=function(e){return[]},a.binding=function(e){throw new Error("process.binding is not supported")},a.cwd=function(){return"/"},a.chdir=function(e){throw new Error("process.chdir is not supported")},a.umask=function(){return 0}},{}],91:[function(e,t,o){t.exports={name:"retold-data-service",version:"2.1.5",description:"Serve up a whole model!",main:"source/Retold-Data-Service.js",bin:{"retold-data-service-clone":"bin/retold-data-service-clone.js"},scripts:{start:"node bin/retold-data-service-clone.js",coverage:"npx quack coverage",test:"npx quack test",brand:"node node_modules/pict-section-theme/bin/pict-section-theme-brand.js --manifest ../../../Retold-Modules-Manifest.json --module retold-data-service --favicons source/services/comprehension-loader/web/favicons && cp -r source/services/comprehension-loader/web/favicons source/services/data-cloner/web/favicons",build:"node build-all.js","build:cloner":"npx quack build","build:loader":"node -e \"require('fs').writeFileSync('.quackage.json', require('fs').readFileSync('.quackage-comprehension-loader.json', 'utf8'))\" && npx quack build",prepublishOnly:"npm run build","build-test-model":"cd test && npx stricture -i model/ddl/BookStore.ddl","docker-dev-build":"docker build ./ -f Dockerfile_LUXURYCode -t retold-data-service-image:local","docker-dev-run":'docker run -it -d --name retold-data-service-dev -p 44444:8080 -p 43306:3306 -p 48086:8086 -v "$PWD/.config:/home/coder/.config" -v "$PWD:/home/coder/retold-data-service" -u "$(id -u):$(id -g)" -e "DOCKER_USER=$USER" retold-data-service-image:local',"docker-dev-shell":"docker exec -it retold-data-service-dev /bin/bash","docker-service-build":"docker build ./ -f Dockerfile_Service -t retold-data-service-server-image:local","docker-service-run-test":'docker run -it --init -d --name retold-data-service -p 8086:8086 -p 43306:3306 -v "$(pwd):/retold-data-service:z" -u "$(id -u):$(id -g)" retold-data-service-server-image:local',"docker-service-run":'docker run -it --init -d --name retold-data-service -p 8086:8086 -p 43306:3306 -v "$(pwd):/retold-data-service:z" retold-data-service-server-image:local',"docker-service-shell":"docker exec -it retold-data-service /bin/bash","test:integration":"node test/run-integration-tests.js","test:integration:no-browser":"node test/run-integration-tests.js --skip-puppeteer","test:all":"npx quack test && node test/run-integration-tests.js --skip-puppeteer",postversion:"npx quack release postversion",postpublish:"npx quack release postpublish","publish:docker":"npx quack release publish --image","release:patch":"npx quack release patch","release:minor":"npx quack release minor","release:major":"npx quack release major","release:patch:image":"npx quack release patch --image","release:minor:image":"npx quack release minor --image","release:major:image":"npx quack release major --image"},mocha:{spec:["test/RetoldDataService_tests.js","test/Bundles_smoke_tests.js","test/ComprehensionLoader_smoke_tests.js","test/DataCloner_smoke_tests.js"],diff:!0,extension:["js"],package:"./package.json",reporter:"spec",slow:"75",timeout:"5000",ui:"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]},repository:{type:"git",url:"https://github.com/fable-retold/retold-data-service.git"},keywords:["entity","behavior","api"],author:"Steven Velozo <steven@velozo.com> (http://velozo.com/)",license:"MIT",bugs:{url:"https://github.com/fable-retold/retold-data-service/issues"},homepage:"https://github.com/fable-retold/retold-data-service",devDependencies:{chai:"^4.5.0",jsdom:"^25.0.1","meadow-connection-sqlite":"^1.0.20",mocha:"^11.0.1","pict-docuserve":"^1.4.19",puppeteer:"^24.40.0",quackage:"^1.3.0",stricture:"^4.0.6",supertest:"^7.2.2"},dependencies:{bibliograph:"^1.0.0",fable:"^3.1.75","fable-serviceproviderbase":"^3.0.19",meadow:"^2.0.43","meadow-connection-manager":"^1.1.5","meadow-connection-mysql":"^1.0.19","meadow-endpoints":"^4.0.22","meadow-integration":"^1.0.42","meadow-migrationmanager":"^1.0.4",orator:"^6.1.2","orator-http-proxy":"^1.0.5","orator-serviceserver-restify":"^2.0.11","orator-static-server":"^2.1.4",pict:"^1.0.372","pict-provider-theme":"^1.1.2","pict-section-connection-form":"^1.0.0","pict-section-histogram":"^1.0.1","pict-section-modal":"^1.1.4","pict-section-theme":"^1.1.1","pict-sessionmanager":"^1.0.2",stricture:"^4.0.6"},retold:{brand:{Hash:"retold-data-service",Name:"Retold Data Service",Tagline:"Schema-driven data movement and comprehension",Palette:"ocean",Icon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" width="96" height="96">\n\t\t<defs>\n\t\t\t<clipPath id="frame-retold-data-service-filled-light">\n\t\t\t\t<path d="M 48.00 2.00 L 87.84 25.00 L 87.84 71.00 L 48.00 94.00 L 8.16 71.00 L 8.16 25.00 Z"/>\n\t\t\t</clipPath>\n\t\t</defs>\n\t\t<path d="M 48.00 2.00 L 87.84 25.00 L 87.84 71.00 L 48.00 94.00 L 8.16 71.00 L 8.16 25.00 Z" fill="#23a6c7"/>\n\t\t<g clip-path="url(#frame-retold-data-service-filled-light)"><rect x="20" y="20" width="56" height="56" rx="8" fill="rgba(255,255,255,0.18)"/>\n\t\t\t\t\t<path d="M 48 30 L 70 48 L 48 66 L 26 48 Z" fill="#e36b59"/></g>\n\t\t<text x="48" y="50" text-anchor="middle" dominant-baseline="central"\n\t\t\tfont-family="-apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, sans-serif"\n\t\t\tfont-size="28" font-weight="600"\n\t\t\tfill="#ffffff" letter-spacing="-1">RDS</text>\n\t</svg>',IconType:"svg",Favicon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" width="96" height="96">\n\t\t<defs>\n\t\t\t<clipPath id="fav-retold-data-service-light">\n\t\t\t\t<path d="M 48.00 2.00 L 87.84 25.00 L 87.84 71.00 L 48.00 94.00 L 8.16 71.00 L 8.16 25.00 Z"/>\n\t\t\t</clipPath>\n\t\t</defs>\n\t\t<path d="M 48.00 2.00 L 87.84 25.00 L 87.84 71.00 L 48.00 94.00 L 8.16 71.00 L 8.16 25.00 Z" fill="#23a6c7"/>\n\t\t<g clip-path="url(#fav-retold-data-service-light)"><rect x="16" y="16" width="64" height="64" rx="10" fill="rgba(255,255,255,0.22)"/></g>\n\t\t<text x="48" y="50" text-anchor="middle" dominant-baseline="central"\n\t\t\tfont-family="-apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, sans-serif"\n\t\t\tfont-size="60" font-weight="800"\n\t\t\tfill="#ffffff" letter-spacing="-1">R</text>\n\t</svg>',FaviconDark:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" width="96" height="96">\n\t\t<defs>\n\t\t\t<clipPath id="fav-retold-data-service-dark">\n\t\t\t\t<path d="M 48.00 2.00 L 87.84 25.00 L 87.84 71.00 L 48.00 94.00 L 8.16 71.00 L 8.16 25.00 Z"/>\n\t\t\t</clipPath>\n\t\t</defs>\n\t\t<path d="M 48.00 2.00 L 87.84 25.00 L 87.84 71.00 L 48.00 94.00 L 8.16 71.00 L 8.16 25.00 Z" fill="#67c6de"/>\n\t\t<g clip-path="url(#fav-retold-data-service-dark)"><rect x="16" y="16" width="64" height="64" rx="10" fill="rgba(255,255,255,0.22)"/></g>\n\t\t<text x="48" y="50" text-anchor="middle" dominant-baseline="central"\n\t\t\tfont-family="-apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, sans-serif"\n\t\t\tfont-size="60" font-weight="800"\n\t\t\tfill="#101418" letter-spacing="-1">R</text>\n\t</svg>',Colors:{Primary:"#23a6c7",Secondary:"#e36b59",PrimaryLight:"#23a6c7",PrimaryDark:"#67c6de",SecondaryLight:"#e36b59",SecondaryDark:"#edb3aa"}}}}},{}],92:[function(e,t,o){const r=e("../../package.json");if(!r.retold||!r.retold.brand)throw new Error("retold-data-service: package.json is missing retold.brand — run `npm run brand` (which calls pict-section-theme-brand) before building");t.exports=r.retold.brand},{"../../package.json":91}],93:[function(e,t,o){t.exports={Name:"Retold Comprehension Loader",Hash:"ComprehensionLoader",MainViewportViewIdentifier:"ComprehensionLoader-Layout",MainViewportDestinationAddress:"#ComprehensionLoader-Application-Container",MainViewportDefaultDataAddress:"AppData.ComprehensionLoader",pict_configuration:{Product:"ComprehensionLoader"},AutoRenderMainViewportViewAfterInitialize:!1}},{}],94:[function(e,t,o){const r=e("pict-application"),i=e("./providers/Pict-Provider-ComprehensionLoader.js"),a=e("./views/PictView-ComprehensionLoader-Layout.js"),n=e("./views/PictView-ComprehensionLoader-Session.js"),s=e("./views/PictView-ComprehensionLoader-Schema.js"),l=e("./views/PictView-ComprehensionLoader-Source.js"),d=e("./views/PictView-ComprehensionLoader-Load.js"),c=e("pict-section-histogram"),h=e("pict-section-modal"),p=e("pict-section-theme"),m=e("../../RetoldDataService-Brand.js"),u=e("./views/PictView-ComprehensionLoader-Shell.js"),g=e("./views/PictView-ComprehensionLoader-TopBar-Nav.js"),f=e("./views/PictView-ComprehensionLoader-TopBar-User.js"),b=e("./views/PictView-ComprehensionLoader-StatusBar.js"),v=e("./views/PictView-ComprehensionLoader-StatusDetail.js"),y=e("./views/PictView-ComprehensionLoader-SettingsPanel.js");t.exports=class extends r{constructor(e,t,o){super(e,t,o),this.pict.addView("Pict-Section-Modal",h.default_configuration,h),this.pict.addProvider("ComprehensionLoader",i.default_configuration,i),this.pict.addView("ComprehensionLoader-Layout",a.default_configuration,a),this.pict.addView("ComprehensionLoader-Session",n.default_configuration,n),this.pict.addView("ComprehensionLoader-Schema",s.default_configuration,s),this.pict.addView("ComprehensionLoader-Source",l.default_configuration,l),this.pict.addView("ComprehensionLoader-Load",d.default_configuration,d),this.pict.addView("ComprehensionLoader-StatusHistogram",{ViewIdentifier:"ComprehensionLoader-StatusHistogram",TargetElementAddress:"#ComprehensionLoader-Throughput-Histogram",DefaultDestinationAddress:"#ComprehensionLoader-Throughput-Histogram",RenderOnLoad:!1,Selectable:!1,Orientation:"vertical",FillContainer:!0,ShowValues:!1,ShowLabels:!0,MaxBarSize:80,BarColor:"var(--theme-color-brand-primary, #4a90d9)",Bins:[]},c),this.pict.addView("ComprehensionLoader-Shell",u.default_configuration,u),this.pict.addView("ComprehensionLoader-TopBar-Nav",g.default_configuration,g),this.pict.addView("ComprehensionLoader-TopBar-User",f.default_configuration,f),this.pict.addView("ComprehensionLoader-StatusBar",b.default_configuration,b),this.pict.addView("ComprehensionLoader-StatusDetail",v.default_configuration,v),this.pict.addView("ComprehensionLoader-SettingsPanel",y.default_configuration,y),this.pict.addProvider("Theme-Section",{ApplyDefault:"pict-default",DefaultMode:"system",DefaultScale:1,Brand:m,Views:["Picker","ModeToggle","ScaleSelect","BrandMark","TopBar","BottomBar"],ViewOptions:{TopBar:{NavView:"ComprehensionLoader-TopBar-Nav",UserView:"ComprehensionLoader-TopBar-User",Height:56},BottomBar:{StatusView:"ComprehensionLoader-StatusBar",Height:36}}},p)}onAfterInitializeAsync(e){return this.pict.AppData.ComprehensionLoader={FetchedEntities:[],LastReport:null,ServerBusyAtLoad:!1,LoadPollTimer:null,LiveStatusTimer:null,StatusDetailExpanded:!1,StatusDetailTimer:null,StatusDetailData:null,LastLiveStatus:null,PersistFields:["serverURL","authMethod","authURI","checkURI","cookieName","cookieValueAddr","cookieValueTemplate","loginMarker","userName","password","schemaURL","comprehensionSourceMode","comprehensionURL"]},window.pict=this.pict,this.pict.views["ComprehensionLoader-Shell"].render(),this.pict.views["ComprehensionLoader-Layout"].render(),this.pict.views["ComprehensionLoader-StatusBar"].render(),this.pict.providers.ComprehensionLoader.initPersistence(),this.pict.providers.ComprehensionLoader.startLiveStatusPolling(),this.pict.providers.ComprehensionLoader.initAccordionPreviews(),this.pict.providers.ComprehensionLoader.updateAllPreviews(),this.pict.views["ComprehensionLoader-Layout"].collapseAllSections(),this.pict.providers.ComprehensionLoader.initAutoProcess(),e()}},t.exports.default_configuration=e("./Pict-Application-ComprehensionLoader-Configuration.json")},{"../../RetoldDataService-Brand.js":92,"./Pict-Application-ComprehensionLoader-Configuration.json":93,"./providers/Pict-Provider-ComprehensionLoader.js":96,"./views/PictView-ComprehensionLoader-Layout.js":97,"./views/PictView-ComprehensionLoader-Load.js":98,"./views/PictView-ComprehensionLoader-Schema.js":99,"./views/PictView-ComprehensionLoader-Session.js":100,"./views/PictView-ComprehensionLoader-SettingsPanel.js":101,"./views/PictView-ComprehensionLoader-Shell.js":102,"./views/PictView-ComprehensionLoader-Source.js":103,"./views/PictView-ComprehensionLoader-StatusBar.js":104,"./views/PictView-ComprehensionLoader-StatusDetail.js":105,"./views/PictView-ComprehensionLoader-TopBar-Nav.js":106,"./views/PictView-ComprehensionLoader-TopBar-User.js":107,"pict-application":4,"pict-section-histogram":14,"pict-section-modal":27,"pict-section-theme":28}],95:[function(e,t,o){t.exports={ComprehensionLoaderApplication:e("./Pict-Application-ComprehensionLoader.js")},"undefined"!=typeof window&&(window.ComprehensionLoaderApplication=t.exports.ComprehensionLoaderApplication)},{"./Pict-Application-ComprehensionLoader.js":94}],96:[function(e,t,o){const r=e("pict-provider");t.exports=class extends r{constructor(e,t,o){super(e,t,o)}api(e,t,o){let r={method:e,headers:{}};return o&&(r.headers["Content-Type"]="application/json",r.body=JSON.stringify(o)),fetch(t,r).then(function(e){return e.json()})}setStatus(e,t,o){let r=document.getElementById(e);r&&(r.className="status "+(o||"info"),r.textContent=t,r.style.display="block")}escapeHtml(e){let t=document.createElement("div");return t.appendChild(document.createTextNode(e)),t.innerHTML}setSectionPhase(e,t){let o=document.getElementById("phase"+e);o&&(o.className="accordion-phase","ok"===t?(o.innerHTML="&#10003;",o.classList.add("visible","accordion-phase-ok")):"error"===t?(o.innerHTML="&#10007;",o.classList.add("visible","accordion-phase-error")):"busy"===t?(o.innerHTML='<span class="phase-spinner"></span>',o.classList.add("visible","accordion-phase-busy")):o.innerHTML="")}updateAllPreviews(){let e=document.getElementById("serverURL");if(!e)return;e=e.value;let t=document.getElementById("userName").value;if(e){let o=e;t&&(o+=" as "+t),document.getElementById("preview1").textContent=o}else document.getElementById("preview1").textContent="Configure remote server URL and credentials";let o=this.pict.AppData.ComprehensionLoader.FetchedEntities||[];if(o.length>0)document.getElementById("preview2").textContent=o.length+" entit"+(1===o.length?"y":"ies")+" discovered";else{let e=document.getElementById("schemaURL").value;document.getElementById("preview2").textContent=e?"Schema from "+e:"Fetch entity schema from the remote server"}let r=document.querySelector('input[name="comprehensionSourceMode"]:checked');if("url"===(r?r.value:"url")){let e=document.getElementById("comprehensionURL").value;document.getElementById("preview3").textContent=e?"URL: "+e:"Provide a comprehension JSON URL or upload files"}else document.getElementById("preview3").textContent="File upload mode";let i=document.getElementById("preview4");i&&(i.textContent="Push comprehension data to the remote server")}initAccordionPreviews(){let e=this,t=["serverURL","userName","schemaURL","comprehensionURL"],o=function(){e.updateAllPreviews()};for(let e=0;e<t.length;e++){let r=document.getElementById(t[e]);r&&(r.addEventListener("input",o),r.addEventListener("change",o))}document.querySelectorAll('input[name="comprehensionSourceMode"]').forEach(function(e){e.addEventListener("change",o)})}saveField(e){let t=document.getElementById(e);t&&localStorage.setItem("comprehensionLoader_"+e,t.value)}restoreFields(){let e=this.pict.AppData.ComprehensionLoader.PersistFields;for(let t=0;t<e.length;t++){let o=e[t],r=localStorage.getItem("comprehensionLoader_"+o);if(null!==r){let e=document.getElementById(o);e&&(e.value=r)}}if("file"===localStorage.getItem("comprehensionLoader_comprehensionSourceMode")){let e=document.getElementById("sourceMode_file");e&&(e.checked=!0)}}initPersistence(){let e=this;this.restoreFields();let t=this.pict.AppData.ComprehensionLoader.PersistFields;for(let o=0;o<t.length;o++)(function(t){let o=document.getElementById(t);o&&(o.addEventListener("input",function(){e.saveField(t)}),o.addEventListener("change",function(){e.saveField(t)}))})(t[o]);document.querySelectorAll('input[name="comprehensionSourceMode"]').forEach(function(e){e.addEventListener("change",function(){localStorage.setItem("comprehensionLoader_comprehensionSourceMode",this.value)})});let o=["auto1","auto2","auto3","auto4"];for(let e=0;e<o.length;e++)(function(e){let t=document.getElementById(e);if(t){let o=localStorage.getItem("comprehensionLoader_"+e);null!==o&&(t.checked="true"===o),t.addEventListener("change",function(){localStorage.setItem("comprehensionLoader_"+e,this.checked)})}})(o[e])}startLiveStatusPolling(){let e=this.pict.AppData.ComprehensionLoader;e.LiveStatusTimer&&clearInterval(e.LiveStatusTimer),this.pollLiveStatus();let t=this;e.LiveStatusTimer=setInterval(function(){t.pollLiveStatus()},1500)}pollLiveStatus(){let e=this;this.api("GET","/comprehension_load/load/live-status").then(function(t){e.renderLiveStatus(t)}).catch(function(){e.renderLiveStatus({Phase:"disconnected",Message:"Cannot reach server",TotalPushed:0,TotalRecords:0})})}renderLiveStatus(e){this.pict.AppData.ComprehensionLoader.LastLiveStatus=e;let t=document.getElementById("liveStatusBar"),o=document.getElementById("liveStatusMessage"),r=document.getElementById("liveStatusMeta"),i=document.getElementById("liveStatusProgressFill");if(!t)return;let a=t.classList.contains("expanded");t.className="live-status-bar phase-"+(e.Phase||"idle"),a&&t.classList.add("expanded"),o.textContent=e.Message||"Idle";let n=[];if("loading"===e.Phase||"stopping"===e.Phase){if(e.Elapsed&&n.push('<span class="live-status-meta-item">⏱ '+e.Elapsed+"</span>"),e.ETA&&n.push('<span class="live-status-meta-item">~'+e.ETA+" remaining</span>"),e.TotalEntities>0&&n.push('<span class="live-status-meta-item"><strong>'+e.Completed+"</strong> / "+e.TotalEntities+" entities</span>"),e.TotalPushed>0){let t=e.TotalPushed.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");if(e.TotalRecords>0){let o=e.TotalRecords.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");n.push('<span class="live-status-meta-item"><strong>'+t+"</strong> / "+o+" records</span>")}else n.push('<span class="live-status-meta-item"><strong>'+t+"</strong> records</span>")}e.Errors>0&&n.push('<span class="live-status-meta-item" style="color:#dc3545"><strong>'+e.Errors+"</strong> error"+(1===e.Errors?"":"s")+"</span>")}else if("complete"===e.Phase&&e.TotalPushed>0){let t=e.TotalPushed.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");n.push('<span class="live-status-meta-item"><strong>'+t+"</strong> records pushed</span>")}r.innerHTML=n.join("");let s=0;if("loading"===e.Phase&&e.TotalRecords>0&&e.TotalPushed>0?s=Math.min(e.TotalPushed/e.TotalRecords*100,99.9):"loading"===e.Phase&&e.TotalEntities>0?s=e.Completed/e.TotalEntities*100:"complete"===e.Phase&&(s=100),i.style.width=Math.min(100,Math.round(s))+"%",("loading"===e.Phase||"stopping"===e.Phase)&&!this.pict.AppData.ComprehensionLoader.StatusDetailExpanded){let e=this.pict.views["ComprehensionLoader-Layout"];e&&"function"==typeof e.toggleStatusDetail&&e.toggleStatusDetail()}if(this.pict.AppData.ComprehensionLoader.StatusDetailExpanded&&this.renderStatusDetail(),"complete"===e.Phase&&!this.pict.AppData.ComprehensionLoader.LastReport){let e=this;this.api("GET","/comprehension_load/load/report").then(function(t){t&&t.ReportVersion&&(e.pict.AppData.ComprehensionLoader.LastReport=t,e.pict.AppData.ComprehensionLoader.StatusDetailExpanded&&e.renderStatusDetail())}).catch(function(){})}}onStatusDetailExpanded(){let e=this.pict.AppData.ComprehensionLoader;e.StatusDetailExpanded=!0,this.renderStatusDetail(),e.StatusDetailTimer&&clearInterval(e.StatusDetailTimer);let t=this;e.StatusDetailTimer=setInterval(function(){t.pollStatusDetail()},2e3),this.pollStatusDetail()}onStatusDetailCollapsed(){let e=this.pict.AppData.ComprehensionLoader;e.StatusDetailExpanded=!1,e.StatusDetailTimer&&(clearInterval(e.StatusDetailTimer),e.StatusDetailTimer=null)}pollStatusDetail(){let e=this;this.api("GET","/comprehension_load/load/status").then(function(t){e.pict.AppData.ComprehensionLoader.StatusDetailData=t,e.renderStatusDetail()}).catch(function(){})}renderStatusDetail(){let e=document.getElementById("ComprehensionLoader-StatusDetail-Container");if(!e)return;let t=this.pict.AppData.ComprehensionLoader,o=t.LastLiveStatus,r=t.StatusDetailData,i=t.LastReport,a={},n=[],s=!1;if(!o||"loading"!==o.Phase&&"stopping"!==o.Phase)if(i&&i.ReportVersion){for(let e=0;e<i.Entities.length;e++){let t=i.Entities[e];a[t.Name]=t}n=i.ThroughputSamples||[]}else r&&r.Entities&&(a=r.Entities,o&&o.ThroughputSamples&&(n=o.ThroughputSamples));else s=!0,r&&r.Entities&&(a=r.Entities),o.ThroughputSamples&&(n=o.ThroughputSamples);let l=[],d=[],c=[],h=[],p=Object.keys(a);for(let e=0;e<p.length;e++){let t=p[e],o=a[t];"Pushing"===o.Status?l.push({Name:t,Data:o}):"Pending"===o.Status?d.push(t):"Complete"===o.Status?c.push({Name:t,Data:o}):"Error"===o.Status&&h.push({Name:t,Data:o})}let m="";if(l.length>0||d.length>0){m+='<div class="status-detail-section">',m+='<div class="status-detail-section-title">Running</div>';for(let e=0;e<l.length;e++){let t=l[e],o=t.Data.Total>0?Math.round(t.Data.Pushed/t.Data.Total*100):0,r=this.formatNumber(t.Data.Pushed||0),i=this.formatNumber(t.Data.Total||0);m+='<div class="running-op-row">',m+=' <div class="running-op-name">'+this.escapeHtml(t.Name)+"</div>",m+=' <div class="running-op-bar"><div class="running-op-bar-fill" style="width:'+o+'%"></div></div>',m+=' <div class="running-op-count">'+r+" / "+i+" ("+o+"%)</div>",m+="</div>"}d.length>0&&(m+='<div class="running-op-pending">'+d.length+" entit"+(1===d.length?"y":"ies")+" waiting</div>"),m+="</div>"}if(c.length>0){m+='<div class="status-detail-section">',m+='<div class="status-detail-section-title">Completed ('+c.length+")</div>";for(let e=0;e<c.length;e++){let t=c[e],o=this.formatNumber(t.Data.Pushed||t.Data.Total||0);m+='<div class="completed-op-row">',m+='<div class="completed-op-header">',m+=' <span class="completed-op-checkmark">✓</span>',m+=' <span class="completed-op-name">'+this.escapeHtml(t.Name)+"</span>",m+=' <span class="completed-op-stats">'+o+" records</span>",m+="</div>",m+="</div>"}m+="</div>"}if(h.length>0){m+='<div class="status-detail-section">',m+='<div class="status-detail-section-title">Errors ('+h.length+")</div>";for(let e=0;e<h.length;e++){let t=h[e],o=this.formatNumber(t.Data.Pushed||0),r=this.formatNumber(t.Data.Total||0);m+='<div class="error-op-row">',m+='<div class="error-op-header">',m+=' <span style="color:#dc3545">✗</span>',m+=' <span class="error-op-name">'+this.escapeHtml(t.Name)+"</span>",m+=' <span class="error-op-status">'+o+" / "+r+"</span>",m+="</div>",t.Data.ErrorMessage&&(m+='<div class="error-op-message">'+this.escapeHtml(t.Data.ErrorMessage)+"</div>"),m+="</div>"}m+="</div>"}""===m&&(m=s?'<div style="font-size:0.9em; color:var(--theme-color-text-muted, #888); padding:8px 0">Load in progress, waiting for entity data…</div>':'<div style="font-size:0.9em; color:var(--theme-color-text-muted, #888); padding:8px 0">No load data available. Run a load to see operation details here.</div>'),e.innerHTML=m,this.updateThroughputHistogram(n)}updateThroughputHistogram(e){let t=document.getElementById("ComprehensionLoader-Throughput-Histogram");if(!t)return;if(!e||e.length<2)return void(t.style.display="none");let o=[];for(let t=1;t<e.length;t++){let r=e[t].pushed-e[t-1].pushed;r<0&&(r=0),o.push({delta:r,t:e[t].t})}let r=t.clientWidth||800,i=Math.max(20,Math.floor(r/6)),a=o;if(o.length>i){let e=Math.ceil(o.length/i);a=[];for(let t=0;t<o.length;t+=e){let r=0,i=0;for(let a=t;a<Math.min(t+e,o.length);a++)r+=o[a].delta,i=o[a].t;a.push({delta:r,t:i})}}let n=!1;for(let e=0;e<a.length;e++)if(a[e].delta>0){n=!0;break}if(!n)return void(t.style.display="none");let s=e[0].t,l=[];for(let e=0;e<a.length;e++){let t=Math.round((a[e].t-s)/1e3);l.push({Label:this.formatElapsed(t),Value:a[e].delta})}t.style.display="";let d=this.pict.views["ComprehensionLoader-StatusHistogram"];d&&(d.setBins(l),d.renderHistogram())}formatElapsed(e){if(e<60)return e+"s";if(e<3600){let t=e%60;return Math.floor(e/60)+":"+(t<10?"0":"")+t}let t=Math.floor(e/3600),o=Math.floor(e%3600/60);return t+"h"+(o<10?"0":"")+o}formatCompact(e){return e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e4?(e/1e3).toFixed(0)+"K":e>=1e3?(e/1e3).toFixed(1)+"K":e.toString()}formatNumber(e){return e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}initAutoProcess(){let e=this;this.api("GET","/comprehension_load/load/live-status").then(function(t){if("loading"===t.Phase||"stopping"===t.Phase)return e.pict.AppData.ComprehensionLoader.ServerBusyAtLoad=!0,e.setSectionPhase(4,"busy"),void e.pict.views["ComprehensionLoader-Load"].startPolling();e.runAutoProcessChain()}).catch(function(){})}runAutoProcessChain(){let e=this,t=0,o=2e3;document.getElementById("auto1")&&document.getElementById("auto1").checked&&(setTimeout(function(){e.pict.views["ComprehensionLoader-Session"].goAction()},t),t+=3500),document.getElementById("auto2")&&document.getElementById("auto2").checked&&(setTimeout(function(){e.pict.views["ComprehensionLoader-Schema"].fetchSchema()},t),t+=o),document.getElementById("auto3")&&document.getElementById("auto3").checked&&(setTimeout(function(){e.pict.views["ComprehensionLoader-Source"].goAction()},t),t+=o),document.getElementById("auto4")&&document.getElementById("auto4").checked&&setTimeout(function(){e.pict.views["ComprehensionLoader-Load"].startLoad()},t)}},t.exports.default_configuration={ProviderIdentifier:"ComprehensionLoader",AutoInitialize:!0,AutoInitializeOrdinal:0}},{"pict-provider":12}],97:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{constructor(e,t,o){super(e,t,o)}onAfterRender(){this.pict.views["ComprehensionLoader-Session"].render(),this.pict.views["ComprehensionLoader-Schema"].render(),this.pict.views["ComprehensionLoader-Source"].render(),this.pict.views["ComprehensionLoader-Load"].render(),this.pict.CSSMap.injectCSS()}toggleSection(e){let t=document.getElementById(e);t&&t.classList.toggle("open")}expandAllSections(){let e=document.querySelectorAll(".accordion-card");for(let t=0;t<e.length;t++)e[t].classList.add("open")}collapseAllSections(){let e=document.querySelectorAll(".accordion-card");for(let t=0;t<e.length;t++)e[t].classList.remove("open")}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Layout",DefaultRenderable:"ComprehensionLoader-Layout",DefaultDestinationAddress:"#ComprehensionLoader-Workspace",CSS:'\n* { box-sizing: border-box; margin: 0; padding: 0; }\nbody { font-family: -apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, sans-serif; background: var(--theme-color-background-secondary, #f5f5f5); color: var(--theme-color-text-primary, #333); padding: 20px; }\nh1 { margin-bottom: 20px; color: var(--theme-color-text-primary, #1a1a1a); }\nh2 { margin-bottom: 12px; color: var(--theme-color-text-secondary, #444); font-size: 1.2em; border-bottom: 2px solid var(--theme-color-border-default, #ddd); padding-bottom: 6px; }\n\n.section { background: var(--theme-color-background-panel, #fff); border-radius: 8px; padding: 20px; margin-bottom: 16px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }\n\n/* Accordion layout */\n.accordion-row { display: flex; gap: 0; margin-bottom: 16px; align-items: stretch; }\n.accordion-number {\n\tflex: 0 0 48px; display: flex; align-items: flex-start; justify-content: center;\n\tpadding-top: 16px; font-size: 1.6em; font-weight: 700; color: var(--theme-color-brand-primary, #4a90d9);\n\tuser-select: none;\n}\n.accordion-card {\n\tflex: 1; background: var(--theme-color-background-panel, #fff); border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n\toverflow: hidden; min-width: 0;\n}\n.accordion-header {\n\tdisplay: flex; align-items: center; padding: 14px 20px; cursor: pointer;\n\tuser-select: none; gap: 12px; transition: background 0.15s; line-height: 1.4;\n}\n.accordion-header:hover { background: var(--theme-color-background-secondary, #fafafa); }\n.accordion-title { font-weight: 600; color: var(--theme-color-text-primary, #333); font-size: 1.05em; white-space: nowrap; }\n.accordion-preview { flex: 1; font-style: italic; color: var(--theme-color-text-muted, #888); font-size: 0.9em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }\n.accordion-toggle {\n\tflex: 0 0 20px; display: flex; align-items: center; justify-content: center;\n\tborder-radius: 4px; transition: background 0.15s, transform 0.25s; font-size: 0.7em; color: var(--theme-color-text-muted, #888);\n}\n.accordion-header:hover .accordion-toggle { background: var(--theme-color-border-light, #eee); color: var(--theme-color-text-secondary, #555); }\n.accordion-card.open .accordion-toggle { transform: rotate(180deg); }\n.accordion-body { padding: 0 20px 20px; display: none; }\n.accordion-card.open .accordion-body { display: block; }\n.accordion-card.open .accordion-header { border-bottom: 1px solid var(--theme-color-border-light, #eee); }\n.accordion-card.open .accordion-preview { display: none; }\n\n/* Action controls (go link + auto checkbox) */\n.accordion-actions { display: flex; align-items: baseline; gap: 8px; flex-shrink: 0; }\n.accordion-card.open .accordion-actions { display: none; }\n.accordion-go {\n\tfont-size: 0.82em; color: var(--theme-color-brand-primary, #4a90d9); cursor: pointer; text-decoration: none;\n\tfont-weight: 500; white-space: nowrap; padding: 2px 6px; border-radius: 3px;\n\ttransition: background 0.15s;\n}\n.accordion-go:hover { background: var(--theme-color-background-hover, #e8f0fe); text-decoration: underline; }\n.accordion-auto {\n\tfont-size: 0.82em; color: var(--theme-color-text-muted, #999); white-space: nowrap; cursor: pointer;\n}\n.accordion-auto .auto-label { display: none; }\n.accordion-auto:hover .auto-label { display: inline; }\n.accordion-auto input[type="checkbox"] { width: auto; margin: 0; cursor: pointer; vertical-align: middle; position: relative; top: 0px; opacity: 0.75; transition: opacity 0.15s; }\n.accordion-auto:hover input[type="checkbox"] { opacity: 1; }\n.accordion-auto:hover { color: var(--theme-color-text-secondary, #666); }\n\n/* Phase status indicator */\n.accordion-phase {\n\tflex: 0 0 auto; display: none; align-items: center; justify-content: center;\n\tfont-size: 0.85em; line-height: 1;\n}\n.accordion-phase.visible { display: flex; }\n.accordion-phase-ok { color: var(--theme-color-status-success, #28a745); }\n.accordion-phase-error { color: var(--theme-color-status-error, #dc3545); }\n.accordion-phase-busy { color: var(--theme-color-status-success, #28a745); }\n.accordion-phase-busy .phase-spinner {\n\tdisplay: inline-block; width: 14px; height: 14px;\n\tborder: 2px solid var(--theme-color-status-success, #28a745); border-top-color: transparent; border-radius: 50%;\n\tanimation: phase-spin 0.8s linear infinite; vertical-align: middle;\n}\n@keyframes phase-spin {\n\tto { transform: rotate(360deg); }\n}\n\n.accordion-controls {\n\tdisplay: flex; gap: 8px; margin-bottom: 12px; justify-content: flex-end;\n}\n.accordion-controls button {\n\tpadding: 4px 10px; font-size: 0.82em; font-weight: 500; background: none;\n\tborder: 1px solid var(--theme-color-border-default, #ccc); border-radius: 4px; color: var(--theme-color-text-secondary, #666); cursor: pointer; margin: 0;\n}\n.accordion-controls button:hover { background: var(--theme-color-background-tertiary, #f0f0f0); border-color: var(--theme-color-text-muted, #aaa); color: var(--theme-color-text-primary, #333); }\n\nlabel { display: block; font-weight: 600; margin-bottom: 4px; font-size: 0.9em; }\ninput[type="text"], input[type="password"], input[type="number"] {\n\twidth: 100%; padding: 8px 12px; border: 1px solid var(--theme-color-border-default, #ccc); border-radius: 4px;\n\tfont-size: 0.95em; margin-bottom: 10px;\n}\ninput[type="text"]:focus, input[type="password"]:focus, input[type="number"]:focus {\n\toutline: none; border-color: var(--theme-color-brand-primary, #4a90d9);\n}\n\nbutton {\n\tpadding: 8px 16px; border: none; border-radius: 4px; cursor: pointer;\n\tfont-size: 0.9em; font-weight: 600; margin-right: 8px; margin-bottom: 8px;\n}\nbutton.primary { background: var(--theme-color-brand-primary, #4a90d9); color: var(--theme-color-background-panel, #fff); }\nbutton.primary:hover { background: var(--theme-color-brand-primary-hover, #357abd); }\nbutton.secondary { background: var(--theme-color-text-secondary, #6c757d); color: var(--theme-color-background-panel, #fff); }\nbutton.secondary:hover { background: #5a6268; }\nbutton.danger { background: var(--theme-color-status-error, #dc3545); color: var(--theme-color-background-panel, #fff); }\nbutton.danger:hover { background: #c82333; }\nbutton.success { background: var(--theme-color-status-success, #28a745); color: var(--theme-color-background-panel, #fff); }\nbutton.success:hover { background: #218838; }\nbutton:disabled { opacity: 0.5; cursor: not-allowed; }\n\n.status { padding: 8px 12px; border-radius: 4px; margin-top: 10px; font-size: 0.9em; }\n.status.ok { background: #d4edda; color: #155724; }\n.status.error { background: #f8d7da; color: #721c24; }\n.status.info { background: #d1ecf1; color: #0c5460; }\n.status.warn { background: #fff3cd; color: #856404; }\n\n.inline-group { display: flex; gap: 8px; align-items: flex-end; margin-bottom: 10px; }\n.inline-group > div { flex: 1; }\n\na { color: var(--theme-color-brand-primary, #4a90d9); }\n\nselect { background: var(--theme-color-background-panel, #fff); width: 100%; padding: 8px 12px; border: 1px solid var(--theme-color-border-default, #ccc); border-radius: 4px; font-size: 0.95em; margin-bottom: 10px; }\n\n.checkbox-row { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n.checkbox-row input[type="checkbox"] { width: auto; margin: 0; }\n.checkbox-row label { display: inline; margin: 0; font-weight: normal; cursor: pointer; }\n\n/* Live Status Bar */\n.live-status-bar {\n\tbackground: var(--theme-color-background-panel, #fff); border-radius: 8px; margin-bottom: 16px;\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.1);\n\tposition: sticky; top: 0; z-index: 100; border-left: 4px solid var(--theme-color-text-secondary, #6c757d);\n}\n.live-status-bar.phase-idle { border-left-color: var(--theme-color-text-secondary, #6c757d); }\n.live-status-bar.phase-disconnected { border-left-color: var(--theme-color-status-error, #dc3545); }\n.live-status-bar.phase-ready { border-left-color: var(--theme-color-brand-primary, #4a90d9); }\n.live-status-bar.phase-loading { border-left-color: var(--theme-color-status-success, #28a745); }\n.live-status-bar.phase-stopping { border-left-color: var(--theme-color-status-warning, #ffc107); }\n.live-status-bar.phase-complete { border-left-color: var(--theme-color-status-success, #28a745); }\n\n.live-status-dot {\n\twidth: 12px; height: 12px; border-radius: 50%; flex-shrink: 0;\n\tbackground: var(--theme-color-text-secondary, #6c757d);\n}\n.live-status-bar.phase-idle .live-status-dot { background: var(--theme-color-text-secondary, #6c757d); }\n.live-status-bar.phase-disconnected .live-status-dot { background: var(--theme-color-status-error, #dc3545); }\n.live-status-bar.phase-ready .live-status-dot { background: var(--theme-color-brand-primary, #4a90d9); }\n.live-status-bar.phase-loading .live-status-dot {\n\tbackground: var(--theme-color-status-success, #28a745);\n\tanimation: live-pulse 1.5s ease-in-out infinite;\n}\n.live-status-bar.phase-stopping .live-status-dot {\n\tbackground: var(--theme-color-status-warning, #ffc107);\n\tanimation: live-pulse 0.8s ease-in-out infinite;\n}\n.live-status-bar.phase-complete .live-status-dot { background: var(--theme-color-status-success, #28a745); }\n\n@keyframes live-pulse {\n\t0%, 100% { opacity: 1; transform: scale(1); }\n\t50% { opacity: 0.4; transform: scale(0.8); }\n}\n\n.live-status-message { flex: 1; font-size: 0.92em; color: var(--theme-color-text-primary, #333); line-height: 1.4; }\n\n.live-status-meta {\n\tdisplay: flex; gap: 16px; flex-shrink: 0; font-size: 0.82em; color: var(--theme-color-text-secondary, #666);\n}\n.live-status-meta-item { white-space: nowrap; }\n.live-status-meta-item strong { color: var(--theme-color-text-primary, #333); }\n\n.live-status-progress-bar {\n\theight: 3px; background: var(--theme-color-background-tertiary, #e9ecef); border-radius: 2px; overflow: hidden;\n\tposition: absolute; bottom: 0; left: 0; right: 0;\n}\n.live-status-progress-fill {\n\theight: 100%; background: var(--theme-color-status-success, #28a745); transition: width 1s ease;\n}\n/* Expandable status bar */\n.live-status-header {\n\tdisplay: flex; align-items: center; gap: 14px; cursor: pointer;\n\tpadding: 14px 20px; user-select: none;\n}\n.live-status-bar.expanded .live-status-header {\n\tborder-bottom: 1px solid var(--theme-color-background-tertiary, #e9ecef); padding-bottom: 10px;\n}\n.live-status-expand-toggle {\n\tflex: 0 0 20px; display: flex; align-items: center; justify-content: center;\n\tfont-size: 0.7em; color: var(--theme-color-text-muted, #888); transition: transform 0.25s;\n}\n.live-status-bar.expanded .live-status-expand-toggle { transform: rotate(180deg); }\n\n.live-status-detail {\n\tpadding: 12px 20px 16px; max-height: 60vh; overflow-y: auto;\n}\n\n/* Status Detail Sections */\n.status-detail-section { margin-bottom: 14px; }\n.status-detail-section:last-child { margin-bottom: 0; }\n.status-detail-section-title {\n\tfont-size: 0.85em; font-weight: 600; color: var(--theme-color-text-secondary, #555); text-transform: uppercase;\n\tletter-spacing: 0.5px; margin-bottom: 8px; padding-bottom: 4px;\n\tborder-bottom: 1px solid var(--theme-color-border-light, #eee);\n}\n\n/* Running Operations */\n.running-op-row {\n\tdisplay: flex; align-items: center; gap: 12px; padding: 6px 0;\n\tfont-size: 0.9em;\n}\n.running-op-name { font-weight: 600; min-width: 180px; }\n.running-op-bar {\n\tflex: 1; height: 8px; background: var(--theme-color-background-tertiary, #e9ecef); border-radius: 4px; overflow: hidden;\n\tmin-width: 120px;\n}\n.running-op-bar-fill { height: 100%; background: var(--theme-color-brand-primary, #4a90d9); transition: width 0.5s ease; }\n.running-op-count { font-size: 0.85em; color: var(--theme-color-text-secondary, #666); white-space: nowrap; }\n.running-op-pending { color: var(--theme-color-text-muted, #888); font-size: 0.85em; font-style: italic; padding: 4px 0; }\n\n/* Completed Operations */\n.completed-op-row { padding: 8px 0; border-bottom: 1px solid var(--theme-color-background-tertiary, #f0f0f0); }\n.completed-op-row:last-child { border-bottom: none; }\n.completed-op-header {\n\tdisplay: flex; align-items: center; gap: 10px; font-size: 0.9em; margin-bottom: 4px;\n}\n.completed-op-name { font-weight: 600; }\n.completed-op-stats { color: var(--theme-color-text-secondary, #666); font-size: 0.85em; }\n.completed-op-checkmark { color: var(--theme-color-status-success, #28a745); }\n\n/* Error Operations */\n.error-op-row { padding: 6px 0; border-bottom: 1px solid var(--theme-color-background-tertiary, #f0f0f0); font-size: 0.9em; }\n.error-op-row:last-child { border-bottom: none; }\n.error-op-header { display: flex; align-items: center; gap: 8px; }\n.error-op-name { font-weight: 600; color: var(--theme-color-status-error, #dc3545); }\n.error-op-status { font-size: 0.82em; color: var(--theme-color-status-error, #dc3545); }\n.error-op-message { font-size: 0.82em; color: var(--theme-color-text-muted, #888); margin-top: 2px; padding-left: 18px; }\n',Templates:[{Hash:"ComprehensionLoader-Layout",Template:'\n<h1>Retold Comprehension Loader</h1>\n\n\x3c!-- Expand / Collapse All --\x3e\n<div class="accordion-controls">\n\t<button onclick="pict.views[\'ComprehensionLoader-Layout\'].expandAllSections()">Expand All</button>\n\t<button onclick="pict.views[\'ComprehensionLoader-Layout\'].collapseAllSections()">Collapse All</button>\n</div>\n\n\x3c!-- Section containers --\x3e\n<div id="ComprehensionLoader-Section-Session"></div>\n<div id="ComprehensionLoader-Section-Schema"></div>\n<div id="ComprehensionLoader-Section-Source"></div>\n<div id="ComprehensionLoader-Section-Load"></div>\n'}],Renderables:[{RenderableHash:"ComprehensionLoader-Layout",TemplateHash:"ComprehensionLoader-Layout",DestinationAddress:"#ComprehensionLoader-Workspace"}]}},{"pict-view":89}],98:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{constructor(e,t,o){super(e,t,o)}startLoad(){this.pict.providers.ComprehensionLoader.setSectionPhase(4,"busy"),this.pict.providers.ComprehensionLoader.setStatus("loadStatus","Starting load...","info"),this.pict.AppData.ComprehensionLoader.LastReport=null;let e=this;this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/load/start").then(function(t){if(t.Success){let o="Load started for "+t.Entities.length+" entities ("+e.pict.providers.ComprehensionLoader.formatNumber(t.TotalRecords)+" records).";e.pict.providers.ComprehensionLoader.setStatus("loadStatus",o,"ok"),e.startPolling()}else e.pict.providers.ComprehensionLoader.setStatus("loadStatus","Load start failed: "+(t.Error||"Unknown error"),"error"),e.pict.providers.ComprehensionLoader.setSectionPhase(4,"error")}).catch(function(t){e.pict.providers.ComprehensionLoader.setStatus("loadStatus","Request failed: "+t.message,"error"),e.pict.providers.ComprehensionLoader.setSectionPhase(4,"error")})}stopLoad(){let e=this;this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/load/stop").then(function(t){e.pict.providers.ComprehensionLoader.setStatus("loadStatus","Load stop requested.","warn")}).catch(function(t){e.pict.providers.ComprehensionLoader.setStatus("loadStatus","Request failed: "+t.message,"error")})}startPolling(){this.pict.AppData.ComprehensionLoader.LoadPollTimer&&clearInterval(this.pict.AppData.ComprehensionLoader.LoadPollTimer);let e=this;this.pict.AppData.ComprehensionLoader.LoadPollTimer=setInterval(function(){e.pollLoadStatus()},2e3),this.pollLoadStatus()}stopPolling(){this.pict.AppData.ComprehensionLoader.LoadPollTimer&&(clearInterval(this.pict.AppData.ComprehensionLoader.LoadPollTimer),this.pict.AppData.ComprehensionLoader.LoadPollTimer=null)}pollLoadStatus(){let e=this;this.pict.providers.ComprehensionLoader.api("GET","/comprehension_load/load/status").then(function(t){if(e.renderLoadProgress(t),!t.Running){e.stopPolling();let o=t.Entities||{},r=Object.keys(o);if(r.length>0){let t=!1;for(let e=0;e<r.length;e++)"Error"===o[r[e]].Status&&(t=!0);t?(e.pict.providers.ComprehensionLoader.setStatus("loadStatus","Load finished with errors.","error"),e.pict.providers.ComprehensionLoader.setSectionPhase(4,"error")):(e.pict.providers.ComprehensionLoader.setStatus("loadStatus","Load complete.","ok"),e.pict.providers.ComprehensionLoader.setSectionPhase(4,"ok")),e.fetchLoadReport()}}}).catch(function(e){})}fetchLoadReport(){let e=this;this.pict.providers.ComprehensionLoader.api("GET","/comprehension_load/load/report").then(function(t){t&&t.ReportVersion&&(e.pict.AppData.ComprehensionLoader.LastReport=t,e.renderLoadReport(t))}).catch(function(e){})}renderLoadReport(e){let t=document.getElementById("loadReportSection");if(!t)return;t.style.display="";let o=document.getElementById("reportSummaryCards"),r="outcome-"+e.Outcome.toLowerCase(),i={Success:"var(--theme-color-status-success, #28a745)",Partial:"var(--theme-color-status-warning, #ffc107)",Error:"var(--theme-color-status-error, #dc3545)",Stopped:"var(--theme-color-text-secondary, #6c757d)"}[e.Outcome]||"var(--theme-color-text-secondary, #666)",a=e.RunTimestamps.DurationSeconds||0,n=a<60?a+"s":Math.floor(a/60)+"m "+a%60+"s",s=this.pict.providers.ComprehensionLoader.formatNumber(e.Summary.TotalPushed),l=this.pict.providers.ComprehensionLoader.formatNumber(e.Summary.TotalRecords);o.innerHTML='<div class="report-card '+r+'"> <div class="card-label">Outcome</div> <div class="card-value" style="color:'+i+'">'+e.Outcome+'</div></div><div class="report-card"> <div class="card-label">Duration</div> <div class="card-value">'+n+'</div></div><div class="report-card"> <div class="card-label">Entities</div> <div class="card-value">'+e.Summary.Complete+" / "+e.Summary.TotalEntities+'</div></div><div class="report-card"> <div class="card-label">Records Pushed</div> <div class="card-value">'+s+'</div> <div style="font-size:0.75em; color:var(--theme-color-text-muted, #888)">of '+l+"</div></div>";let d=document.getElementById("reportAnomalies");if(0===e.Anomalies.length)d.innerHTML='<div style="color:var(--theme-color-status-success, #28a745); font-weight:600; font-size:0.9em">No anomalies detected.</div>';else{let t='<h4 style="margin:0 0 8px; color:var(--theme-color-status-error, #dc3545); font-size:0.95em">Anomalies ('+e.Anomalies.length+")</h4>";t+='<table class="progress-table">',t+="<tr><th>Entity</th><th>Type</th><th>Message</th></tr>";for(let o=0;o<e.Anomalies.length;o++){let r=e.Anomalies[o],i="Error"===r.Type?"var(--theme-color-status-error, #dc3545)":"var(--theme-color-text-secondary, #6c757d)";t+="<tr>",t+="<td><strong>"+this.pict.providers.ComprehensionLoader.escapeHtml(r.Entity)+"</strong></td>",t+='<td style="color:'+i+'">'+r.Type+"</td>",t+="<td>"+this.pict.providers.ComprehensionLoader.escapeHtml(r.Message)+"</td>",t+="</tr>"}t+="</table>",d.innerHTML=t}let c=document.getElementById("reportEntityDetails");if(e.Entities&&e.Entities.length>0){let t='<h4 style="margin:0 0 8px; font-size:0.95em; color:var(--theme-color-text-secondary, #444)">Entity Details</h4>';t+='<table class="progress-table">',t+="<tr><th>Entity</th><th>Duration</th><th>Records</th><th>Status</th></tr>";for(let o=0;o<e.Entities.length;o++){let r=e.Entities[o],i=r.DurationSeconds<60?r.DurationSeconds+"s":Math.floor(r.DurationSeconds/60)+"m "+r.DurationSeconds%60+"s",a=this.pict.providers.ComprehensionLoader.formatNumber(r.Pushed),n={Complete:"var(--theme-color-status-success, #28a745)",Error:"var(--theme-color-status-error, #dc3545)"}[r.Status]||"var(--theme-color-text-secondary, #666)";t+="<tr>",t+="<td><strong>"+this.pict.providers.ComprehensionLoader.escapeHtml(r.Name)+"</strong></td>",t+="<td>"+i+"</td>",t+="<td>"+a+"</td>",t+='<td style="color:'+n+'">'+r.Status+"</td>",t+="</tr>"}t+="</table>",c.innerHTML=t}}downloadReport(){if(!this.pict.AppData.ComprehensionLoader.LastReport)return void this.pict.providers.ComprehensionLoader.setStatus("reportStatus","No report available.","warn");let e=JSON.stringify(this.pict.AppData.ComprehensionLoader.LastReport,null,"\t"),t=new Blob([e],{type:"application/json"}),o=document.createElement("a");o.href=URL.createObjectURL(t);let r=(new Date).toISOString().replace(/[:.]/g,"-").slice(0,19);o.download="ComprehensionLoader-Report-"+r+".json",o.click(),URL.revokeObjectURL(o.href),this.pict.providers.ComprehensionLoader.setStatus("reportStatus","Report downloaded.","ok")}copyReport(){if(!this.pict.AppData.ComprehensionLoader.LastReport)return void this.pict.providers.ComprehensionLoader.setStatus("reportStatus","No report available.","warn");let e=JSON.stringify(this.pict.AppData.ComprehensionLoader.LastReport,null,"\t"),t=this;navigator.clipboard.writeText(e).then(function(){t.pict.providers.ComprehensionLoader.setStatus("reportStatus","Report copied to clipboard.","ok")})}renderLoadProgress(e){let t=document.getElementById("loadProgress"),o=e.Entities||{},r=Object.keys(o);if(0===r.length)return void(t.innerHTML="");let i=[],a=[],n=[],s=[];for(let e=0;e<r.length;e++){let t=r[e],l=o[t];"Pushing"===l.Status?i.push({Name:t,Data:l}):"Pending"===l.Status?a.push({Name:t,Data:l}):"Complete"===l.Status?n.push({Name:t,Data:l}):s.push({Name:t,Data:l})}let l="",d=this,c=function(e,t){let o=0;0===t.Total&&"Complete"===t.Status?o=100:t.Total>0&&(o=Math.round(t.Pushed/t.Total*100));let r="var(--theme-color-status-success, #28a745)";"Error"===t.Status?r="var(--theme-color-status-error, #dc3545)":"Pushing"===t.Status?r="var(--theme-color-brand-primary, #4a90d9)":"Pending"===t.Status&&(r="var(--theme-color-text-muted, #adb5bd)");let i="<tr>";return i+="<td><strong>"+e+"</strong></td>",i+="<td>"+t.Status+"</td>",i+="<td>",i+='<div class="progress-bar-container"><div class="progress-bar-fill" style="width:'+o+"%; background:"+r+'"></div></div>',i+=" "+o+"%",i+="</td>",i+="<td>"+(t.Pushed||0)+" / "+(t.Total||0)+"</td>",i+="</tr>",i};if(i.length>0){l+='<div class="sync-section-header">Pushing</div>',l+='<table class="progress-table">',l+="<tr><th>Entity</th><th>Status</th><th>Progress</th><th>Pushed</th></tr>";for(let e=0;e<i.length;e++)l+=c(i[e].Name,i[e].Data);l+="</table>"}if(a.length>0){l+='<div class="sync-section-header">Next Up <span class="sync-section-count">'+a.length+"</span></div>";let e=Math.min(8,a.length);l+='<table class="progress-table progress-table-muted">';for(let t=0;t<e;t++)l+="<tr><td>"+a[t].Name+"</td>",a[t].Data.Total>0?l+='<td class="sync-pending-count">'+d.pict.providers.ComprehensionLoader.formatNumber(a[t].Data.Total)+" records</td>":l+='<td class="sync-pending-count">—</td>',l+="</tr>";l+="</table>",a.length>e&&(l+='<div class="sync-section-overflow">+ '+(a.length-e)+" more</div>")}if(s.length>0){l+='<div class="sync-section-header sync-section-header-error">Errors <span class="sync-section-count">'+s.length+"</span></div>",l+='<table class="progress-table">',l+="<tr><th>Entity</th><th>Status</th><th>Progress</th><th>Pushed</th></tr>";for(let e=0;e<s.length;e++)l+=c(s[e].Name,s[e].Data);l+="</table>"}if(n.length>0){l+='<div class="sync-section-header sync-section-header-ok">Completed <span class="sync-section-count">'+n.length+"</span></div>",l+='<table class="progress-table">',l+="<tr><th>Entity</th><th>Status</th><th>Progress</th><th>Pushed</th></tr>";for(let e=0;e<n.length;e++)l+=c(n[e].Name,n[e].Data);l+="</table>"}t.innerHTML=l}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Load",DefaultRenderable:"ComprehensionLoader-Load",DefaultDestinationAddress:"#ComprehensionLoader-Section-Load",CSS:"\n.progress-table { width: 100%; border-collapse: collapse; margin-top: 4px; margin-bottom: 4px; }\n.progress-table th, .progress-table td { text-align: left; padding: 6px 12px; border-bottom: 1px solid var(--theme-color-border-light, #eee); font-size: 0.9em; }\n.progress-table th { background: var(--theme-color-background-secondary, #f8f9fa); font-weight: 600; }\n.progress-table-muted td { color: var(--theme-color-text-muted, #888); padding: 3px 12px; font-size: 0.85em; border-bottom: 1px solid var(--theme-color-background-secondary, #f4f5f6); }\n.progress-bar-container { width: 120px; height: 16px; background: var(--theme-color-background-tertiary, #e9ecef); border-radius: 8px; overflow: hidden; display: inline-block; vertical-align: middle; }\n.progress-bar-fill { height: 100%; background: var(--theme-color-status-success, #28a745); transition: width 0.3s; }\n.sync-section-header { font-size: 0.8em; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--theme-color-brand-primary, #4a90d9); padding: 10px 0 2px 0; margin-top: 6px; border-top: 1px solid var(--theme-color-border-default, #e0e0e0); }\n.sync-section-header:first-child { border-top: none; margin-top: 10px; }\n.sync-section-header-error { color: var(--theme-color-status-error, #dc3545); }\n.sync-section-header-ok { color: var(--theme-color-status-success, #28a745); }\n.sync-section-count { font-weight: 400; color: var(--theme-color-text-muted, #999); font-size: 0.95em; }\n.sync-section-overflow { font-size: 0.8em; color: var(--theme-color-text-muted, #aaa); padding: 2px 12px 6px; }\n.sync-pending-count { text-align: right; color: var(--theme-color-text-muted, #aaa); font-size: 0.85em; }\n.report-card { background: var(--theme-color-background-secondary, #f8f9fa); border-radius: 8px; padding: 12px 16px; min-width: 140px; text-align: center; border: 1px solid var(--theme-color-background-tertiary, #e9ecef); }\n.report-card .card-label { font-size: 0.8em; color: var(--theme-color-text-secondary, #666); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; }\n.report-card .card-value { font-size: 1.4em; font-weight: 700; }\n.report-card.outcome-success { border-left: 4px solid var(--theme-color-status-success, #28a745); }\n.report-card.outcome-partial { border-left: 4px solid var(--theme-color-status-warning, #ffc107); }\n.report-card.outcome-error { border-left: 4px solid var(--theme-color-status-error, #dc3545); }\n.report-card.outcome-stopped { border-left: 4px solid var(--theme-color-text-secondary, #6c757d); }\n",Templates:[{Hash:"ComprehensionLoader-Load",Template:'\n<div class="accordion-row">\n\t<div class="accordion-number">4</div>\n\t<div class="accordion-card" id="section4" data-section="4">\n\t\t<div class="accordion-header" onclick="pict.views[\'ComprehensionLoader-Layout\'].toggleSection(\'section4\')">\n\t\t\t<div class="accordion-title">Load</div>\n\t\t\t<span class="accordion-phase" id="phase4"></span>\n\t\t\t<div class="accordion-preview" id="preview4">Push comprehension data to the remote server</div>\n\t\t\t<div class="accordion-actions">\n\t\t\t\t<span class="accordion-go" onclick="event.stopPropagation(); pict.views[\'ComprehensionLoader-Load\'].startLoad()">go</span>\n\t\t\t\t<label class="accordion-auto" onclick="event.stopPropagation()"><input type="checkbox" id="auto4"> <span class="auto-label">auto</span></label>\n\t\t\t</div>\n\t\t\t<div class="accordion-toggle">&#9660;</div>\n\t\t</div>\n\t\t<div class="accordion-body">\n\t\t\t<div style="display:flex; gap:8px; margin-bottom:10px">\n\t\t\t\t<button class="success" style="margin:0" onclick="pict.views[\'ComprehensionLoader-Load\'].startLoad()">Start Load</button>\n\t\t\t\t<button class="danger" style="margin:0" onclick="pict.views[\'ComprehensionLoader-Load\'].stopLoad()">Stop Load</button>\n\t\t\t</div>\n\n\t\t\t<div id="loadStatus"></div>\n\t\t\t<div id="loadProgress"></div>\n\n\t\t\t\x3c!-- Load Report (appears after load completes) --\x3e\n\t\t\t<div id="loadReportSection" style="display:none; margin-top:16px; padding-top:16px; border-top:2px solid var(--theme-color-border-default, #ddd)">\n\t\t\t\t<h3 style="margin:0 0 12px; font-size:1.1em">Load Report</h3>\n\n\t\t\t\t<div id="reportSummaryCards" style="display:flex; gap:12px; flex-wrap:wrap; margin-bottom:16px"></div>\n\t\t\t\t<div id="reportAnomalies" style="margin-bottom:16px"></div>\n\t\t\t\t<div id="reportEntityDetails" style="margin-bottom:16px"></div>\n\n\t\t\t\t<div style="display:flex; gap:8px">\n\t\t\t\t\t<button class="secondary" onclick="pict.views[\'ComprehensionLoader-Load\'].downloadReport()">Download Report JSON</button>\n\t\t\t\t\t<button class="secondary" onclick="pict.views[\'ComprehensionLoader-Load\'].copyReport()">Copy Report</button>\n\t\t\t\t</div>\n\t\t\t\t<div id="reportStatus"></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n'}],Renderables:[{RenderableHash:"ComprehensionLoader-Load",TemplateHash:"ComprehensionLoader-Load",DestinationAddress:"#ComprehensionLoader-Section-Load"}]}},{"pict-view":89}],99:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{constructor(e,t,o){super(e,t,o)}fetchSchema(){let e=document.getElementById("schemaURL").value.trim(),t={};e&&(t.SchemaURL=e),this.pict.providers.ComprehensionLoader.setSectionPhase(2,"busy"),this.pict.providers.ComprehensionLoader.setStatus("schemaStatus","Fetching schema...","info"),this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/schema/fetch",t).then(e=>{e.Success?(this.pict.AppData.ComprehensionLoader.FetchedEntities=e.Entities||[],this.pict.providers.ComprehensionLoader.setStatus("schemaStatus","Fetched schema with "+e.EntityCount+" entities from "+e.SchemaURL,"ok"),this.pict.providers.ComprehensionLoader.setSectionPhase(2,"ok"),this.renderEntityList(),this.pict.providers.ComprehensionLoader.updateAllPreviews()):(this.pict.providers.ComprehensionLoader.setStatus("schemaStatus","Fetch failed: "+(e.Error||"Unknown error"),"error"),this.pict.providers.ComprehensionLoader.setSectionPhase(2,"error"))}).catch(e=>{this.pict.providers.ComprehensionLoader.setStatus("schemaStatus","Request failed: "+e.message,"error"),this.pict.providers.ComprehensionLoader.setSectionPhase(2,"error")})}renderEntityList(){let e=this.pict.AppData.ComprehensionLoader.FetchedEntities||[],t=document.getElementById("entityList");if(!t)return;if(0===e.length)return void(t.innerHTML='<div style="color:var(--theme-color-text-muted, #888); font-size:0.9em">No entities found.</div>');let o='<div style="font-size:0.9em; color:var(--theme-color-text-secondary, #555)">';for(let t=0;t<e.length;t++)o+='<span style="display:inline-block; background:var(--theme-color-background-tertiary, #f0f0f0); border-radius:4px; padding:2px 8px; margin:2px 4px 2px 0; font-size:0.9em">',o+=this.pict.providers.ComprehensionLoader.escapeHtml(e[t]),o+="</span>";o+="</div>",t.innerHTML=o}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Schema",DefaultRenderable:"ComprehensionLoader-Schema",DefaultDestinationAddress:"#ComprehensionLoader-Section-Schema",Templates:[{Hash:"ComprehensionLoader-Schema",Template:'\n<div class="accordion-row">\n\t<div class="accordion-number">2</div>\n\t<div class="accordion-card" id="section2" data-section="2">\n\t\t<div class="accordion-header" onclick="pict.views[\'ComprehensionLoader-Layout\'].toggleSection(\'section2\')">\n\t\t\t<div class="accordion-title">Remote Schema</div>\n\t\t\t<span class="accordion-phase" id="phase2"></span>\n\t\t\t<div class="accordion-preview" id="preview2">Fetch entity schema from the remote server</div>\n\t\t\t<div class="accordion-actions">\n\t\t\t\t<span class="accordion-go" onclick="event.stopPropagation(); pict.views[\'ComprehensionLoader-Schema\'].fetchSchema()">go</span>\n\t\t\t\t<label class="accordion-auto" onclick="event.stopPropagation()"><input type="checkbox" id="auto2"> <span class="auto-label">auto</span></label>\n\t\t\t</div>\n\t\t\t<div class="accordion-toggle">&#9660;</div>\n\t\t</div>\n\t\t<div class="accordion-body">\n\t\t\t<label for="schemaURL">Schema URL (leave blank for default: ServerURL + Retold/Models)</label>\n\t\t\t<input type="text" id="schemaURL" placeholder="http://remote-server:8086/1.0/Retold/Models">\n\n\t\t\t<button class="primary" onclick="pict.views[\'ComprehensionLoader-Schema\'].fetchSchema()">Fetch Schema</button>\n\t\t\t<div id="schemaStatus"></div>\n\n\t\t\t<div id="entityList" style="margin-top:12px"></div>\n\t\t</div>\n\t</div>\n</div>\n'}],Renderables:[{RenderableHash:"ComprehensionLoader-Schema",TemplateHash:"ComprehensionLoader-Schema",DestinationAddress:"#ComprehensionLoader-Section-Schema"}]}},{"pict-view":89}],100:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{constructor(e,t,o){super(e,t,o)}configureSession(){let e=document.getElementById("serverURL").value.trim();if(!e)return void this.pict.providers.ComprehensionLoader.setStatus("sessionConfigStatus","Server URL is required.","error");let t={ServerURL:e.replace(/\/+$/,"")+"/1.0/"},o=document.getElementById("authMethod").value.trim();o&&(t.AuthenticationMethod=o);let r=document.getElementById("authURI").value.trim();r&&(t.AuthenticationURITemplate=r);let i=document.getElementById("checkURI").value.trim();i&&(t.CheckSessionURITemplate=i);let a=document.getElementById("cookieName").value.trim();a&&(t.CookieName=a);let n=document.getElementById("cookieValueAddr").value.trim();n&&(t.CookieValueAddress=n);let s=document.getElementById("cookieValueTemplate").value.trim();s&&(t.CookieValueTemplate=s);let l=document.getElementById("loginMarker").value.trim();l&&(t.CheckSessionLoginMarker=l),this.pict.providers.ComprehensionLoader.setStatus("sessionConfigStatus","Configuring session...","info"),this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/session/configure",t).then(e=>{e.Success?this.pict.providers.ComprehensionLoader.setStatus("sessionConfigStatus","Session configured for "+e.ServerURL+" (domain: "+e.DomainMatch+")","ok"):this.pict.providers.ComprehensionLoader.setStatus("sessionConfigStatus","Configuration failed: "+(e.Error||"Unknown error"),"error")}).catch(e=>{this.pict.providers.ComprehensionLoader.setStatus("sessionConfigStatus","Request failed: "+e.message,"error")})}authenticate(){let e=document.getElementById("userName").value.trim(),t=document.getElementById("password").value.trim();if(!e||!t)return this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Username and password are required.","error"),void this.pict.providers.ComprehensionLoader.setSectionPhase(1,"error");this.pict.providers.ComprehensionLoader.setSectionPhase(1,"busy"),this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Authenticating...","info"),this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/session/authenticate",{UserName:e,Password:t}).then(e=>{e.Success&&e.Authenticated?(this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Authenticated successfully.","ok"),this.pict.providers.ComprehensionLoader.setSectionPhase(1,"ok")):(this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Authentication failed: "+(e.Error||"Not authenticated"),"error"),this.pict.providers.ComprehensionLoader.setSectionPhase(1,"error"))}).catch(e=>{this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Request failed: "+e.message,"error"),this.pict.providers.ComprehensionLoader.setSectionPhase(1,"error")})}checkSession(){this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Checking session...","info"),this.pict.providers.ComprehensionLoader.api("GET","/comprehension_load/session/check").then(e=>{e.Authenticated?this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Session is active. Server: "+(e.ServerURL||"N/A"),"ok"):e.Configured?this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Session configured but not authenticated.","warn"):this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","No session configured.","warn")}).catch(e=>{this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Request failed: "+e.message,"error")})}deauthenticate(){this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/session/deauthenticate").then(e=>{this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Session deauthenticated.","info"),this.pict.providers.ComprehensionLoader.setSectionPhase(1,"")}).catch(e=>{this.pict.providers.ComprehensionLoader.setStatus("sessionAuthStatus","Request failed: "+e.message,"error")})}goAction(){this.pict.providers.ComprehensionLoader.setSectionPhase(1,"busy"),this.configureSession(),setTimeout(()=>{this.authenticate()},1500)}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Session",DefaultRenderable:"ComprehensionLoader-Session",DefaultDestinationAddress:"#ComprehensionLoader-Section-Session",Templates:[{Hash:"ComprehensionLoader-Session",Template:'\n<div class="accordion-row">\n\t<div class="accordion-number">1</div>\n\t<div class="accordion-card" id="section1" data-section="1">\n\t\t<div class="accordion-header" onclick="pict.views[\'ComprehensionLoader-Layout\'].toggleSection(\'section1\')">\n\t\t\t<div class="accordion-title">Remote Session</div>\n\t\t\t<span class="accordion-phase" id="phase1"></span>\n\t\t\t<div class="accordion-preview" id="preview1">Configure remote server URL and credentials</div>\n\t\t\t<div class="accordion-actions">\n\t\t\t\t<span class="accordion-go" onclick="event.stopPropagation(); pict.views[\'ComprehensionLoader-Session\'].goAction()">go</span>\n\t\t\t\t<label class="accordion-auto" onclick="event.stopPropagation()"><input type="checkbox" id="auto1"> <span class="auto-label">auto</span></label>\n\t\t\t</div>\n\t\t\t<div class="accordion-toggle">&#9660;</div>\n\t\t</div>\n\t\t<div class="accordion-body">\n\t\t\t<div class="inline-group">\n\t\t\t\t<div style="flex:2">\n\t\t\t\t\t<label for="serverURL">Remote Server URL</label>\n\t\t\t\t\t<input type="text" id="serverURL" placeholder="http://remote-server:8086" value="">\n\t\t\t\t</div>\n\t\t\t\t<div style="flex:1">\n\t\t\t\t\t<label for="authMethod">Auth Method</label>\n\t\t\t\t\t<input type="text" id="authMethod" placeholder="get" value="get">\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<details style="margin-bottom:10px">\n\t\t\t\t<summary style="cursor:pointer; font-size:0.9em; color:var(--theme-color-text-secondary, #666)">Advanced Session Options</summary>\n\t\t\t\t<div style="padding:10px 0">\n\t\t\t\t\t<label for="authURI">Authentication URI Template (leave blank for default)</label>\n\t\t\t\t\t<input type="text" id="authURI" placeholder="Authenticate/{~D:Record.UserName~}/{~D:Record.Password~}">\n\t\t\t\t\t<label for="checkURI">Check Session URI Template</label>\n\t\t\t\t\t<input type="text" id="checkURI" placeholder="CheckSession">\n\t\t\t\t\t<label for="cookieName">Cookie Name</label>\n\t\t\t\t\t<input type="text" id="cookieName" placeholder="SessionID" value="SessionID">\n\t\t\t\t\t<label for="cookieValueAddr">Cookie Value Address</label>\n\t\t\t\t\t<input type="text" id="cookieValueAddr" placeholder="SessionID" value="SessionID">\n\t\t\t\t\t<label for="cookieValueTemplate">Cookie Value Template (overrides Address if set)</label>\n\t\t\t\t\t<input type="text" id="cookieValueTemplate" placeholder="{~D:Record.SessionID~}">\n\t\t\t\t\t<label for="loginMarker">Login Marker</label>\n\t\t\t\t\t<input type="text" id="loginMarker" placeholder="LoggedIn" value="LoggedIn">\n\t\t\t\t</div>\n\t\t\t</details>\n\n\t\t\t<button class="primary" onclick="pict.views[\'ComprehensionLoader-Session\'].configureSession()">Configure Session</button>\n\t\t\t<div id="sessionConfigStatus"></div>\n\n\t\t\t<hr style="margin:16px 0; border:none; border-top:1px solid var(--theme-color-border-light, #eee)">\n\n\t\t\t<div class="inline-group">\n\t\t\t\t<div>\n\t\t\t\t\t<label for="userName">Username</label>\n\t\t\t\t\t<input type="text" id="userName" placeholder="username">\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<label for="password">Password</label>\n\t\t\t\t\t<input type="password" id="password" placeholder="password">\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<button class="success" onclick="pict.views[\'ComprehensionLoader-Session\'].authenticate()">Authenticate</button>\n\t\t\t<button class="secondary" onclick="pict.views[\'ComprehensionLoader-Session\'].checkSession()">Check Session</button>\n\t\t\t<button class="danger" onclick="pict.views[\'ComprehensionLoader-Session\'].deauthenticate()">Deauthenticate</button>\n\t\t\t<div id="sessionAuthStatus"></div>\n\t\t</div>\n\t</div>\n</div>\n'}],Renderables:[{RenderableHash:"ComprehensionLoader-Session",TemplateHash:"ComprehensionLoader-Session",DestinationAddress:"#ComprehensionLoader-Section-Session"}]}},{"pict-view":89}],101:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{onAfterRender(e,t,o,r){this.pict.CSSMap&&this.pict.CSSMap.injectCSS();let i=this.pict.providers&&this.pict.providers["Theme-Section"];return i&&"function"==typeof i.mount&&i.mount({Container:"#ComprehensionLoader-Settings-Theme",Views:["Picker","ModeToggle","ScaleSelect"]}),super.onAfterRender(e,t,o,r)}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-SettingsPanel",DefaultRenderable:"ComprehensionLoader-SettingsPanel",DefaultDestinationAddress:"#ComprehensionLoader-Settings-Panel",AutoRender:!1,CSS:"\n\t\t.rds-settings-body {\n\t\t\tpadding: 12px;\n\t\t\tdisplay: flex; flex-direction: column; gap: 16px;\n\t\t\tcolor: var(--theme-color-text-primary, #333333);\n\t\t}\n\t\t.rds-settings-section { display: flex; flex-direction: column; gap: 6px; }\n\t\t.rds-settings-label {\n\t\t\tfont-size: 0.85em;\n\t\t\tfont-weight: 600;\n\t\t\ttext-transform: uppercase;\n\t\t\tletter-spacing: 0.04em;\n\t\t\tcolor: var(--theme-color-text-secondary, #555555);\n\t\t}\n\t",Templates:[{Hash:"ComprehensionLoader-SettingsPanel",Template:'\n<div class="rds-settings-body">\n\t<div class="rds-settings-section">\n\t\t<div class="rds-settings-label">Appearance</div>\n\t\t<div id="ComprehensionLoader-Settings-Theme"></div>\n\t</div>\n</div>'}],Renderables:[{RenderableHash:"ComprehensionLoader-SettingsPanel",TemplateHash:"ComprehensionLoader-SettingsPanel",DestinationAddress:"#ComprehensionLoader-Settings-Panel"}]}},{"pict-view":89}],102:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{constructor(e,t,o){super(e,t,o),this._shellPanelsBuilt=!1}onAfterRender(e,t,o,r){return this.pict.CSSMap&&this.pict.CSSMap.injectCSS(),this._shellPanelsBuilt||(this._buildShell(),this._shellPanelsBuilt=!0),super.onAfterRender(e,t,o,r)}_buildShell(){let e=this.pict.views["Pict-Section-Modal"],t=document.getElementById("ComprehensionLoader-Shell-Mount");e&&"function"==typeof e.shell&&t?(this._shell=e.shell(t,{PersistenceKey:"comprehension-loader-shell"}),this._shell.addPanel({Hash:"topbar",Side:"top",Mode:"fixed",Size:56,ContentDestinationId:"Theme-TopBar",ContentView:"Theme-TopBar"}),this._shell.addPanel({Hash:"bottombar",Side:"bottom",Mode:"fixed",Size:36,ContentDestinationId:"Theme-BottomBar",ContentView:"Theme-BottomBar"}),this._shell.addPanel({Hash:"status-detail",Side:"bottom",Mode:"resizable",Position:"overlay",Size:320,MinSize:200,MaxSize:480,Hidden:!0,Collapsed:!0,Title:"Status Detail",ContentDestinationId:"ComprehensionLoader-StatusDetail-Panel",ContentView:"ComprehensionLoader-StatusDetail"}),this._shell.addPanel({Hash:"settings",Side:"right",Mode:"resizable",Position:"overlay",Size:360,MinSize:280,MaxSize:540,Hidden:!0,Collapsed:!0,Title:"Settings",ContentDestinationId:"ComprehensionLoader-Settings-Panel",ContentView:"ComprehensionLoader-SettingsPanel"}),this._shell.center({ContentDestinationId:"ComprehensionLoader-Workspace"})):this.log.warn("ComprehensionLoader-Shell: Pict-Section-Modal or mount not available; shell not built.")}getSettingsPanel(){return this._shell?this._shell.getPanel("settings"):null}getStatusDetailPanel(){return this._shell?this._shell.getPanel("status-detail"):null}toggleSettingsPanel(){let e=this.getSettingsPanel();e&&e.toggle()}toggleStatusDetail(){let e=this.getStatusDetailPanel();if(!e)return;e.toggle();let t=this.pict.providers.ComprehensionLoader,o=!e.Collapsed;t&&o&&"function"==typeof t.onStatusDetailExpanded?t.onStatusDetailExpanded():t&&!o&&"function"==typeof t.onStatusDetailCollapsed&&t.onStatusDetailCollapsed()}renderTopBar(){let e=this.pict.views["ComprehensionLoader-TopBar-Nav"],t=this.pict.views["ComprehensionLoader-TopBar-User"];e&&e.render(),t&&t.render()}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Shell",DefaultRenderable:"ComprehensionLoader-Shell",DefaultDestinationAddress:"#ComprehensionLoader-Application-Container",AutoRender:!1,CSS:'\n\t\thtml, body { height: 100%; margin: 0; padding: 0; }\n\t\tbody {\n\t\t\tbackground: var(--theme-color-background-primary, #f5f5f5);\n\t\t\tcolor: var(--theme-color-text-primary, #333333);\n\t\t\tfont-family: var(--theme-typography-family-sans,\n\t\t\t\t-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif);\n\t\t}\n\t\t#ComprehensionLoader-Application-Container { height: 100%; min-height: 0; overflow: hidden; }\n\t\t.pict-modal-shell-host { height: 100%; }\n\t\t.pict-modal-shell { background: var(--theme-color-background-primary, #f5f5f5); }\n\t\t.pict-modal-shell-panel { background: var(--theme-color-background-panel, #ffffff); }\n\t\t.pict-modal-shell-center {\n\t\t\tbackground: var(--theme-color-background-primary, #f5f5f5);\n\t\t\toverflow: auto;\n\t\t\tpadding: 20px;\n\t\t}\n\t',Templates:[{Hash:"ComprehensionLoader-Shell",Template:'<div id="ComprehensionLoader-Shell-Mount" style="height:100%"></div>'}],Renderables:[{RenderableHash:"ComprehensionLoader-Shell",TemplateHash:"ComprehensionLoader-Shell",DestinationAddress:"#ComprehensionLoader-Application-Container"}]}},{"pict-view":89}],103:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{constructor(e,t,o){super(e,t,o)}onAfterRender(){if("file"===localStorage.getItem("comprehensionLoader_comprehensionSourceMode")){let e=document.getElementById("sourceMode_file");e&&(e.checked=!0)}this.onSourceModeChange()}onSourceModeChange(){let e=document.querySelector('input[name="comprehensionSourceMode"]:checked'),t=e?e.value:"url",o=document.getElementById("sourceURLSection"),r=document.getElementById("sourceFileSection");o&&(o.style.display="url"===t?"":"none"),r&&(r.style.display="file"===t?"":"none"),this.pict.providers.ComprehensionLoader.updateAllPreviews()}fetchFromURL(){let e=document.getElementById("comprehensionURL").value.trim();if(!e)return void this.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Comprehension URL is required.","error");this.pict.providers.ComprehensionLoader.setSectionPhase(3,"busy"),this.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Fetching comprehension...","info");let t=this;fetch(e).then(function(e){if(!e.ok)throw new Error("HTTP "+e.status);return e.json()}).then(function(e){t.sendComprehensionToServer(e)}).catch(function(o){t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Direct fetch failed ("+o.message+"), trying server proxy...","info"),t.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/comprehension/proxy-fetch",{URL:e}).then(function(e){e.Success?(t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Loaded via proxy: "+e.EntityCount+" entities, "+t.pict.providers.ComprehensionLoader.formatNumber(e.TotalRecords)+" records.","ok"),t.pict.providers.ComprehensionLoader.setSectionPhase(3,"ok"),t.renderComprehensionSummary(e)):(t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Proxy fetch failed: "+(e.Error||"Unknown error"),"error"),t.pict.providers.ComprehensionLoader.setSectionPhase(3,"error"))}).catch(function(e){t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Proxy request failed: "+e.message,"error"),t.pict.providers.ComprehensionLoader.setSectionPhase(3,"error")})})}loadFromFiles(){let e=document.getElementById("comprehensionFiles");if(!e||0===e.files.length)return void this.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Please select one or more JSON files.","error");this.pict.providers.ComprehensionLoader.setSectionPhase(3,"busy"),this.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Reading files...","info");let t=this,o=e.files,r={},i=0;for(let e=0;e<o.length;e++)(function(e){let a=new FileReader;a.onload=function(a){try{let e=JSON.parse(a.target.result),t=Object.keys(e);for(let o=0;o<t.length;o++){let i=t[o];Array.isArray(e[i])?(r[i]||(r[i]=[]),r[i]=r[i].concat(e[i])):r[i]=e[i]}}catch(o){return t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Error parsing "+e.name+": "+o.message,"error"),void t.pict.providers.ComprehensionLoader.setSectionPhase(3,"error")}i++,i===o.length&&t.sendComprehensionToServer(r)},a.onerror=function(){t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Error reading "+e.name,"error"),t.pict.providers.ComprehensionLoader.setSectionPhase(3,"error")},a.readAsText(e)})(o[e])}sendComprehensionToServer(e){let t=this;this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/comprehension/receive",{Comprehension:e}).then(function(e){e.Success?(t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Loaded: "+e.EntityCount+" entities, "+t.pict.providers.ComprehensionLoader.formatNumber(e.TotalRecords)+" records.","ok"),t.pict.providers.ComprehensionLoader.setSectionPhase(3,"ok"),t.renderComprehensionSummary(e)):(t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Failed: "+(e.Error||"Unknown error"),"error"),t.pict.providers.ComprehensionLoader.setSectionPhase(3,"error"))}).catch(function(e){t.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Request failed: "+e.message,"error"),t.pict.providers.ComprehensionLoader.setSectionPhase(3,"error")})}renderComprehensionSummary(e){let t=document.getElementById("comprehensionSummary");if(!t)return;let o='<table style="width:100%; border-collapse:collapse; margin-top:8px; font-size:0.9em">';o+='<thead><tr><th style="text-align:left; padding:6px 12px; border-bottom:2px solid var(--theme-color-border-default, #ddd)">Entity</th>',o+='<th style="text-align:right; padding:6px 12px; border-bottom:2px solid var(--theme-color-border-default, #ddd)">Records</th></tr></thead>',o+="<tbody>";let r=e.EntityList||[],i=e.RecordCounts||{};for(let e=0;e<r.length;e++){let t=r[e],a=i[t]||0;o+="<tr>",o+='<td style="padding:4px 12px; border-bottom:1px solid var(--theme-color-background-tertiary, #f0f0f0)">'+this.pict.providers.ComprehensionLoader.escapeHtml(t)+"</td>",o+='<td style="padding:4px 12px; border-bottom:1px solid var(--theme-color-background-tertiary, #f0f0f0); text-align:right; font-variant-numeric:tabular-nums">'+this.pict.providers.ComprehensionLoader.formatNumber(a)+"</td>",o+="</tr>"}o+="</tbody>",o+="<tfoot><tr>",o+='<td style="padding:6px 12px; font-weight:600">Total</td>',o+='<td style="padding:6px 12px; text-align:right; font-weight:600; font-variant-numeric:tabular-nums">'+this.pict.providers.ComprehensionLoader.formatNumber(e.TotalRecords)+"</td>",o+="</tr></tfoot>",o+="</table>",t.innerHTML=o,t.style.display=""}clearComprehension(){let e=this;this.pict.providers.ComprehensionLoader.api("POST","/comprehension_load/comprehension/clear").then(function(t){if(t.Success){e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Comprehension data cleared.","info"),e.pict.providers.ComprehensionLoader.setSectionPhase(3,"");let t=document.getElementById("comprehensionSummary");t&&(t.innerHTML="",t.style.display="none")}}).catch(function(t){e.pict.providers.ComprehensionLoader.setStatus("sourceStatus","Request failed: "+t.message,"error")})}goAction(){let e=document.querySelector('input[name="comprehensionSourceMode"]:checked');"url"===(e?e.value:"url")?this.fetchFromURL():this.loadFromFiles()}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-Source",DefaultRenderable:"ComprehensionLoader-Source",DefaultDestinationAddress:"#ComprehensionLoader-Section-Source",Templates:[{Hash:"ComprehensionLoader-Source",Template:'\n<div class="accordion-row">\n\t<div class="accordion-number">3</div>\n\t<div class="accordion-card" id="section3" data-section="3">\n\t\t<div class="accordion-header" onclick="pict.views[\'ComprehensionLoader-Layout\'].toggleSection(\'section3\')">\n\t\t\t<div class="accordion-title">Comprehension Source</div>\n\t\t\t<span class="accordion-phase" id="phase3"></span>\n\t\t\t<div class="accordion-preview" id="preview3">Provide a comprehension JSON URL or upload files</div>\n\t\t\t<div class="accordion-actions">\n\t\t\t\t<span class="accordion-go" onclick="event.stopPropagation(); pict.views[\'ComprehensionLoader-Source\'].goAction()">go</span>\n\t\t\t\t<label class="accordion-auto" onclick="event.stopPropagation()"><input type="checkbox" id="auto3"> <span class="auto-label">auto</span></label>\n\t\t\t</div>\n\t\t\t<div class="accordion-toggle">&#9660;</div>\n\t\t</div>\n\t\t<div class="accordion-body">\n\t\t\t<div style="margin-bottom:12px">\n\t\t\t\t<label style="margin-bottom:6px">Source Mode</label>\n\t\t\t\t<div style="display:flex; gap:16px; align-items:center">\n\t\t\t\t\t<label style="font-weight:normal; margin:0; cursor:pointer">\n\t\t\t\t\t\t<input type="radio" name="comprehensionSourceMode" id="sourceMode_url" value="url" checked onchange="pict.views[\'ComprehensionLoader-Source\'].onSourceModeChange()"> URL\n\t\t\t\t\t\t<span style="color:var(--theme-color-text-muted, #888); font-size:0.85em">(fetch from a URL)</span>\n\t\t\t\t\t</label>\n\t\t\t\t\t<label style="font-weight:normal; margin:0; cursor:pointer">\n\t\t\t\t\t\t<input type="radio" name="comprehensionSourceMode" id="sourceMode_file" value="file" onchange="pict.views[\'ComprehensionLoader-Source\'].onSourceModeChange()"> File Upload\n\t\t\t\t\t\t<span style="color:var(--theme-color-text-muted, #888); font-size:0.85em">(load JSON from local files)</span>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div id="sourceURLSection">\n\t\t\t\t<label for="comprehensionURL">Comprehension JSON URL</label>\n\t\t\t\t<input type="text" id="comprehensionURL" placeholder="http://example.com/comprehension.json">\n\t\t\t\t<button class="primary" onclick="pict.views[\'ComprehensionLoader-Source\'].fetchFromURL()">Fetch Comprehension</button>\n\t\t\t</div>\n\n\t\t\t<div id="sourceFileSection" style="display:none">\n\t\t\t\t<label for="comprehensionFiles">Comprehension JSON File(s)</label>\n\t\t\t\t<input type="file" id="comprehensionFiles" multiple accept=".json" style="margin-bottom:10px">\n\t\t\t\t<div style="font-size:0.8em; color:var(--theme-color-text-muted, #888); margin-bottom:10px">Multiple files will be merged (entity keys combined).</div>\n\t\t\t\t<button class="primary" onclick="pict.views[\'ComprehensionLoader-Source\'].loadFromFiles()">Load Files</button>\n\t\t\t</div>\n\n\t\t\t<button class="secondary" onclick="pict.views[\'ComprehensionLoader-Source\'].clearComprehension()" style="margin-left:0">Clear Comprehension</button>\n\t\t\t<div id="sourceStatus"></div>\n\n\t\t\t<div id="comprehensionSummary" style="display:none"></div>\n\t\t</div>\n\t</div>\n</div>\n'}],Renderables:[{RenderableHash:"ComprehensionLoader-Source",TemplateHash:"ComprehensionLoader-Source",DestinationAddress:"#ComprehensionLoader-Section-Source"}]}},{"pict-view":89}],104:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{onAfterRender(e,t,o,r){return this.pict.CSSMap&&this.pict.CSSMap.injectCSS(),super.onAfterRender(e,t,o,r)}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-StatusBar",DefaultRenderable:"ComprehensionLoader-StatusBar",DefaultDestinationAddress:"#Theme-BottomBar-Status",AutoRender:!1,CSS:"\n\t\t.rds-status-bar {\n\t\t\tdisplay: flex; align-items: center; gap: 12px;\n\t\t\theight: 100%; padding: 0 12px;\n\t\t\tcolor: var(--theme-color-text-primary, #333333);\n\t\t\tfont-size: 0.88em;\n\t\t\tborder-top: 1px solid var(--theme-color-border-light, #e9e9e9);\n\t\t\tborder-left: 3px solid var(--theme-color-text-secondary, #6c757d);\n\t\t\tposition: relative;\n\t\t}\n\t\t.rds-status-bar.phase-idle { border-left-color: var(--theme-color-text-secondary, #6c757d); }\n\t\t.rds-status-bar.phase-disconnected { border-left-color: var(--theme-color-status-error, #dc3545); }\n\t\t.rds-status-bar.phase-ready { border-left-color: var(--theme-color-brand-primary, #4a90d9); }\n\t\t.rds-status-bar.phase-loading { border-left-color: var(--theme-color-status-success, #28a745); }\n\t\t.rds-status-bar.phase-stopping { border-left-color: var(--theme-color-status-warning, #ffc107); }\n\t\t.rds-status-bar.phase-complete { border-left-color: var(--theme-color-status-success, #28a745); }\n\n\t\t.rds-status-dot {\n\t\t\twidth: 10px; height: 10px; border-radius: 50%;\n\t\t\tflex-shrink: 0;\n\t\t\tbackground: var(--theme-color-text-secondary, #6c757d);\n\t\t}\n\t\t.rds-status-bar.phase-idle .rds-status-dot { background: var(--theme-color-text-secondary, #6c757d); }\n\t\t.rds-status-bar.phase-disconnected .rds-status-dot { background: var(--theme-color-status-error, #dc3545); }\n\t\t.rds-status-bar.phase-ready .rds-status-dot { background: var(--theme-color-brand-primary, #4a90d9); }\n\t\t.rds-status-bar.phase-loading .rds-status-dot {\n\t\t\tbackground: var(--theme-color-status-success, #28a745);\n\t\t\tanimation: rds-status-pulse 1.5s ease-in-out infinite;\n\t\t}\n\t\t.rds-status-bar.phase-stopping .rds-status-dot {\n\t\t\tbackground: var(--theme-color-status-warning, #ffc107);\n\t\t\tanimation: rds-status-pulse 0.8s ease-in-out infinite;\n\t\t}\n\t\t.rds-status-bar.phase-complete .rds-status-dot { background: var(--theme-color-status-success, #28a745); }\n\n\t\t@keyframes rds-status-pulse {\n\t\t\t0%, 100% { opacity: 1; transform: scale(1); }\n\t\t\t50% { opacity: 0.4; transform: scale(0.8); }\n\t\t}\n\n\t\t.rds-status-message { flex: 1; line-height: 1.2; }\n\t\t.rds-status-meta {\n\t\t\tdisplay: flex; gap: 12px; flex-shrink: 0;\n\t\t\tfont-size: 0.92em; color: var(--theme-color-text-secondary, #666);\n\t\t}\n\t\t.rds-status-meta .live-status-meta-item { white-space: nowrap; }\n\t\t.rds-status-meta .live-status-meta-item strong { color: var(--theme-color-text-primary, #333); }\n\n\t\t.rds-status-detail-btn {\n\t\t\tpadding: 2px 8px;\n\t\t\tbackground: transparent;\n\t\t\tborder: 1px solid var(--theme-color-border-default, #ccc);\n\t\t\tborder-radius: 3px;\n\t\t\tcolor: var(--theme-color-text-secondary, #666);\n\t\t\tcursor: pointer;\n\t\t\tfont-size: 0.92em;\n\t\t\tline-height: 1;\n\t\t}\n\t\t.rds-status-detail-btn:hover {\n\t\t\tbackground: var(--theme-color-background-hover, #f0f0f0);\n\t\t\tcolor: var(--theme-color-text-primary, #333);\n\t\t}\n\n\t\t.rds-status-progress-bar {\n\t\t\tposition: absolute; left: 0; right: 0; bottom: 0;\n\t\t\theight: 2px;\n\t\t\tbackground: var(--theme-color-background-tertiary, #e9ecef);\n\t\t\toverflow: hidden;\n\t\t}\n\t\t.rds-status-progress-fill {\n\t\t\theight: 100%;\n\t\t\tbackground: var(--theme-color-status-success, #28a745);\n\t\t\ttransition: width 1s ease;\n\t\t}\n\t",Templates:[{Hash:"ComprehensionLoader-StatusBar",Template:'\n<div id="liveStatusBar" class="rds-status-bar phase-idle">\n\t<div class="rds-status-dot live-status-dot"></div>\n\t<div id="liveStatusMessage" class="rds-status-message live-status-message">Idle</div>\n\t<div id="liveStatusMeta" class="rds-status-meta live-status-meta"></div>\n\t<button class="rds-status-detail-btn"\n\t\tonclick="_Pict.views[\'ComprehensionLoader-Shell\'].toggleStatusDetail()"\n\t\ttitle="Show detail">Detail</button>\n\t<div class="rds-status-progress-bar live-status-progress-bar">\n\t\t<div id="liveStatusProgressFill" class="rds-status-progress-fill live-status-progress-fill" style="width:0%"></div>\n\t</div>\n</div>'}],Renderables:[{RenderableHash:"ComprehensionLoader-StatusBar",TemplateHash:"ComprehensionLoader-StatusBar",DestinationAddress:"#Theme-BottomBar-Status"}]}},{"pict-view":89}],105:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{onAfterRender(e,t,o,r){return this.pict.CSSMap&&this.pict.CSSMap.injectCSS(),super.onAfterRender(e,t,o,r)}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-StatusDetail",DefaultRenderable:"ComprehensionLoader-StatusDetail",DefaultDestinationAddress:"#ComprehensionLoader-StatusDetail-Panel",AutoRender:!1,CSS:"\n\t\t.rds-status-detail-body {\n\t\t\tpadding: 12px 20px 16px;\n\t\t\tmax-height: 100%;\n\t\t\toverflow-y: auto;\n\t\t\tcolor: var(--theme-color-text-primary, #333);\n\t\t}\n\t\t.rds-status-detail-section { margin-bottom: 14px; }\n\t\t.rds-status-detail-section:last-child { margin-bottom: 0; }\n\t\t.rds-status-detail-section-title {\n\t\t\tfont-size: 0.85em; font-weight: 600;\n\t\t\tcolor: var(--theme-color-text-secondary, #555);\n\t\t\ttext-transform: uppercase; letter-spacing: 0.5px;\n\t\t\tmargin-bottom: 8px; padding-bottom: 4px;\n\t\t\tborder-bottom: 1px solid var(--theme-color-border-light, #eee);\n\t\t}\n\t\t.running-op-row { display: flex; align-items: center; gap: 12px; padding: 6px 0; font-size: 0.9em; }\n\t\t.running-op-name { font-weight: 600; min-width: 180px; }\n\t\t.running-op-bar {\n\t\t\tflex: 1; height: 8px;\n\t\t\tbackground: var(--theme-color-background-tertiary, #e9ecef);\n\t\t\tborder-radius: 4px; overflow: hidden; min-width: 120px;\n\t\t}\n\t\t.running-op-bar-fill {\n\t\t\theight: 100%;\n\t\t\tbackground: var(--theme-color-brand-primary, #4a90d9);\n\t\t\ttransition: width 0.5s ease;\n\t\t}\n\t\t.running-op-count { font-size: 0.85em; color: var(--theme-color-text-secondary, #666); white-space: nowrap; }\n\t\t.running-op-pending { color: var(--theme-color-text-muted, #888); font-size: 0.85em; font-style: italic; padding: 4px 0; }\n\t\t.completed-op-row { padding: 8px 0; border-bottom: 1px solid var(--theme-color-background-tertiary, #f0f0f0); }\n\t\t.completed-op-row:last-child { border-bottom: none; }\n\t\t.completed-op-header { display: flex; align-items: center; gap: 10px; font-size: 0.9em; margin-bottom: 4px; }\n\t\t.completed-op-name { font-weight: 600; }\n\t\t.completed-op-stats { color: var(--theme-color-text-secondary, #666); font-size: 0.85em; }\n\t\t.completed-op-checkmark { color: var(--theme-color-status-success, #28a745); }\n\t\t.error-op-row { padding: 6px 0; border-bottom: 1px solid var(--theme-color-background-tertiary, #f0f0f0); font-size: 0.9em; }\n\t\t.error-op-row:last-child { border-bottom: none; }\n\t\t.error-op-header { display: flex; align-items: center; gap: 8px; }\n\t\t.error-op-name { font-weight: 600; color: var(--theme-color-status-error, #dc3545); }\n\t\t.error-op-status { font-size: 0.82em; color: var(--theme-color-status-error, #dc3545); }\n\t\t.error-op-message { font-size: 0.82em; color: var(--theme-color-text-muted, #888); margin-top: 2px; padding-left: 18px; }\n\t",Templates:[{Hash:"ComprehensionLoader-StatusDetail",Template:'\n<div class="rds-status-detail-body">\n\t<div class="rds-status-detail-section">\n\t\t<div class="rds-status-detail-section-title">Throughput</div>\n\t\t<div id="ComprehensionLoader-Throughput-Histogram" style="height:120px"></div>\n\t</div>\n\t<div id="ComprehensionLoader-StatusDetail-Container"></div>\n</div>'}],Renderables:[{RenderableHash:"ComprehensionLoader-StatusDetail",TemplateHash:"ComprehensionLoader-StatusDetail",DestinationAddress:"#ComprehensionLoader-StatusDetail-Panel"}]}},{"pict-view":89}],106:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{onAfterRender(e,t,o,r){return this.pict.CSSMap&&this.pict.CSSMap.injectCSS(),super.onAfterRender(e,t,o,r)}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-TopBar-Nav",DefaultRenderable:"ComprehensionLoader-TopBar-Nav",DefaultDestinationAddress:"#Theme-TopBar-Nav",AutoRender:!1,CSS:"\n\t\t.rds-nav {\n\t\t\tdisplay: flex; align-items: center; height: 100%;\n\t\t\tpadding: 0 12px; gap: 8px;\n\t\t\tcolor: var(--theme-color-text-on-brand,\n\t\t\t\t var(--theme-color-text-primary, #1a1a1a));\n\t\t\tfont-weight: 500;\n\t\t}\n\t\t.rds-nav-sep { opacity: 0.5; font-weight: 400; margin: 0 2px; }\n\t\t.rds-nav-app { font-weight: 600; opacity: 0.95; }\n\t",Templates:[{Hash:"ComprehensionLoader-TopBar-Nav",Template:'<div class="rds-nav"><span class="rds-nav-sep">·</span><span class="rds-nav-app">Comprehension Loader</span></div>'}],Renderables:[{RenderableHash:"ComprehensionLoader-TopBar-Nav",TemplateHash:"ComprehensionLoader-TopBar-Nav",DestinationAddress:"#Theme-TopBar-Nav"}]}},{"pict-view":89}],107:[function(e,t,o){const r=e("pict-view");t.exports=class extends r{onAfterRender(e,t,o,r){return this.pict.CSSMap&&this.pict.CSSMap.injectCSS(),super.onAfterRender(e,t,o,r)}},t.exports.default_configuration={ViewIdentifier:"ComprehensionLoader-TopBar-User",DefaultRenderable:"ComprehensionLoader-TopBar-User",DefaultDestinationAddress:"#Theme-TopBar-User",AutoRender:!1,CSS:"\n\t\t.rds-user { display: flex; align-items: center; height: 100%; gap: 8px; padding: 0 12px; }\n\t\t.rds-user-btn {\n\t\t\tpadding: 4px 8px;\n\t\t\tborder: 1px solid var(--theme-color-border-default, #5E5549);\n\t\t\tbackground: transparent;\n\t\t\tcolor: var(--theme-color-text-on-brand,\n\t\t\t\t var(--theme-color-text-secondary, #1a1a1a));\n\t\t\tborder-radius: 4px;\n\t\t\tcursor: pointer;\n\t\t\tdisplay: inline-flex; align-items: center; justify-content: center;\n\t\t\tfont-size: 1em; line-height: 1;\n\t\t}\n\t\t.rds-user-btn:hover {\n\t\t\tbackground: var(--theme-color-background-hover, rgba(255,255,255,0.08));\n\t\t}\n\t",Templates:[{Hash:"ComprehensionLoader-TopBar-User",Template:'<div class="rds-user"><button class="rds-user-btn" onclick="_Pict.views[\'ComprehensionLoader-Shell\'].toggleSettingsPanel()" title="Settings" aria-label="Settings">{~I:Settings~}</button></div>'}],Renderables:[{RenderableHash:"ComprehensionLoader-TopBar-User",TemplateHash:"ComprehensionLoader-TopBar-User",DestinationAddress:"#Theme-TopBar-User"}]}},{"pict-view":89}]},{},[95])(95)});
2
76
  //# sourceMappingURL=comprehension-loader.min.js.map