pict-section-flow 1.4.0 → 2.0.1

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 (164) hide show
  1. package/package.json +7 -2
  2. package/source/Pict-Section-Flow.js +20 -14
  3. package/source/providers/PictProvider-Flow-Background.js +303 -0
  4. package/source/providers/PictProvider-Flow-CSS.js +73 -7
  5. package/source/providers/PictProvider-Flow-Geometry.js +11 -421
  6. package/source/providers/PictProvider-Flow-Icons.js +12 -0
  7. package/source/providers/PictProvider-Flow-Layouts.js +107 -0
  8. package/source/services/PictService-Flow-ConnectionRenderer.js +1 -1
  9. package/source/services/PictService-Flow-CursorManager.js +113 -0
  10. package/source/services/PictService-Flow-InteractionManager.js +439 -59
  11. package/source/services/PictService-Flow-Layout.js +21 -16
  12. package/source/services/PictService-Flow-PathGenerator.js +30 -417
  13. package/source/services/PictService-Flow-RenderManager.js +23 -3
  14. package/source/services/PictService-Flow-ViewportManager.js +102 -0
  15. package/source/views/PictView-Flow-FloatingToolbar.js +5 -1
  16. package/source/views/PictView-Flow-Node.js +29 -0
  17. package/source/views/PictView-Flow-Toolbar.js +50 -3
  18. package/source/views/PictView-Flow.js +591 -2
  19. package/.claude/launch.json +0 -11
  20. package/docs/.nojekyll +0 -0
  21. package/docs/Architecture.md +0 -163
  22. package/docs/Custom-Styling.md +0 -275
  23. package/docs/Data_Model.md +0 -149
  24. package/docs/Event_System.md +0 -156
  25. package/docs/Getting_Started.md +0 -237
  26. package/docs/Implementation_Reference.md +0 -528
  27. package/docs/Layout_Persistence.md +0 -117
  28. package/docs/README.md +0 -103
  29. package/docs/Theme_Integration.md +0 -150
  30. package/docs/_brand.json +0 -18
  31. package/docs/_cover.md +0 -17
  32. package/docs/_playground.json +0 -24
  33. package/docs/_sidebar.md +0 -57
  34. package/docs/_topbar.md +0 -8
  35. package/docs/_version.json +0 -7
  36. package/docs/api/PictFlowCard.md +0 -216
  37. package/docs/api/PictFlowCardPropertiesPanel.md +0 -235
  38. package/docs/api/addConnection.md +0 -101
  39. package/docs/api/addNode.md +0 -137
  40. package/docs/api/autoLayout.md +0 -77
  41. package/docs/api/getFlowData.md +0 -112
  42. package/docs/api/marshalToView.md +0 -95
  43. package/docs/api/openPanel.md +0 -128
  44. package/docs/api/registerHandler.md +0 -174
  45. package/docs/api/registerNodeType.md +0 -142
  46. package/docs/api/removeConnection.md +0 -57
  47. package/docs/api/removeNode.md +0 -80
  48. package/docs/api/saveLayout.md +0 -152
  49. package/docs/api/screenToSVGCoords.md +0 -68
  50. package/docs/api/selectNode.md +0 -116
  51. package/docs/api/setTheme.md +0 -168
  52. package/docs/api/setZoom.md +0 -97
  53. package/docs/api/toggleFullscreen.md +0 -68
  54. package/docs/card-help/EACH.md +0 -19
  55. package/docs/card-help/FREAD.md +0 -24
  56. package/docs/card-help/FWRITE.md +0 -24
  57. package/docs/card-help/GET.md +0 -22
  58. package/docs/card-help/ITE.md +0 -23
  59. package/docs/card-help/LOG.md +0 -23
  60. package/docs/card-help/NOTE.md +0 -17
  61. package/docs/card-help/PREV.md +0 -18
  62. package/docs/card-help/SET.md +0 -27
  63. package/docs/card-help/SPKL.md +0 -22
  64. package/docs/card-help/STAT.md +0 -23
  65. package/docs/card-help/SW.md +0 -25
  66. package/docs/diagrams/architecture-at-a-glance.excalidraw +0 -4270
  67. package/docs/diagrams/architecture-at-a-glance.mmd +0 -30
  68. package/docs/diagrams/architecture-at-a-glance.svg +0 -2
  69. package/docs/diagrams/data-flow.excalidraw +0 -1451
  70. package/docs/diagrams/data-flow.mmd +0 -17
  71. package/docs/diagrams/data-flow.svg +0 -2
  72. package/docs/diagrams/high-level-design.excalidraw +0 -5767
  73. package/docs/diagrams/high-level-design.mmd +0 -86
  74. package/docs/diagrams/high-level-design.svg +0 -2
  75. package/docs/diagrams/relationships.excalidraw +0 -3852
  76. package/docs/diagrams/relationships.mmd +0 -9
  77. package/docs/diagrams/relationships.svg +0 -2
  78. package/docs/diagrams/service-initialization-sequence.excalidraw +0 -1466
  79. package/docs/diagrams/service-initialization-sequence.mmd +0 -19
  80. package/docs/diagrams/service-initialization-sequence.svg +0 -2
  81. package/docs/diagrams/svg-layer-structure.excalidraw +0 -1060
  82. package/docs/diagrams/svg-layer-structure.mmd +0 -18
  83. package/docs/diagrams/svg-layer-structure.svg +0 -2
  84. package/docs/examples/README.md +0 -9
  85. package/docs/examples/simple_cards/README.md +0 -677
  86. package/docs/examples/simple_cards/css/flowexample.css +0 -65
  87. package/docs/examples/simple_cards/index.html +0 -32
  88. package/docs/examples/simple_cards/js/pict.min.js +0 -12
  89. package/docs/examples/simple_cards/pict-section-flow-example-simple-cards.compatible.min.js +0 -1
  90. package/docs/index.html +0 -38
  91. package/docs/playground/app.json +0 -6
  92. package/docs/playground/appdata.json +0 -85
  93. package/docs/playground/application.js +0 -23
  94. package/docs/playground/pict.json +0 -17
  95. package/docs/playground/runtime/pict-application.min.js +0 -2
  96. package/docs/playground/runtime/pict-section-flow.min.js +0 -2
  97. package/docs/playground/runtime/pict-section-modal.min.js +0 -2
  98. package/docs/playground/runtime/pict.min.js +0 -12
  99. package/docs/retold-catalog.json +0 -244
  100. package/docs/retold-keyword-index.json +0 -26028
  101. package/example_applications/simple_cards/css/flowexample.css +0 -65
  102. package/example_applications/simple_cards/html/index.html +0 -32
  103. package/example_applications/simple_cards/package.json +0 -52
  104. package/example_applications/simple_cards/source/Pict-Application-FlowExample-Configuration.json +0 -15
  105. package/example_applications/simple_cards/source/Pict-Application-FlowExample.js +0 -539
  106. package/example_applications/simple_cards/source/card-help-content.js +0 -16
  107. package/example_applications/simple_cards/source/cards/FlowCard-Comment.js +0 -38
  108. package/example_applications/simple_cards/source/cards/FlowCard-DataPreview.js +0 -44
  109. package/example_applications/simple_cards/source/cards/FlowCard-Each.js +0 -38
  110. package/example_applications/simple_cards/source/cards/FlowCard-FileRead.js +0 -56
  111. package/example_applications/simple_cards/source/cards/FlowCard-FileWrite.js +0 -50
  112. package/example_applications/simple_cards/source/cards/FlowCard-GetValue.js +0 -37
  113. package/example_applications/simple_cards/source/cards/FlowCard-IfThenElse.js +0 -49
  114. package/example_applications/simple_cards/source/cards/FlowCard-LogValues.js +0 -55
  115. package/example_applications/simple_cards/source/cards/FlowCard-SetValue.js +0 -97
  116. package/example_applications/simple_cards/source/cards/FlowCard-Sparkline.js +0 -100
  117. package/example_applications/simple_cards/source/cards/FlowCard-StatusMonitor.js +0 -46
  118. package/example_applications/simple_cards/source/cards/FlowCard-Switch.js +0 -39
  119. package/example_applications/simple_cards/source/providers/PictRouter-FlowExample-Configuration.json +0 -22
  120. package/example_applications/simple_cards/source/sample-flows.js +0 -410
  121. package/example_applications/simple_cards/source/views/PictView-FlowExample-About.js +0 -184
  122. package/example_applications/simple_cards/source/views/PictView-FlowExample-BottomBar.js +0 -77
  123. package/example_applications/simple_cards/source/views/PictView-FlowExample-Documentation.js +0 -325
  124. package/example_applications/simple_cards/source/views/PictView-FlowExample-FileWriteInfo.js +0 -59
  125. package/example_applications/simple_cards/source/views/PictView-FlowExample-Layout.js +0 -90
  126. package/example_applications/simple_cards/source/views/PictView-FlowExample-MainWorkspace.js +0 -453
  127. package/example_applications/simple_cards/source/views/PictView-FlowExample-TopBar.js +0 -95
  128. package/scripts/generate-card-help.js +0 -214
  129. package/source/providers/edges/Edge-Bezier.js +0 -41
  130. package/source/providers/edges/Edge-Orthogonal.js +0 -37
  131. package/source/providers/edges/Edge-OrthogonalSnap.js +0 -72
  132. package/source/providers/edges/Edge-Perimeter-Linear.js +0 -31
  133. package/source/providers/edges/Edge-Perimeter-Orthogonal.js +0 -39
  134. package/source/providers/edges/Edge-Perimeter.js +0 -48
  135. package/source/providers/edges/Edge-PerimeterMath.js +0 -92
  136. package/source/providers/edges/Edge-Straight.js +0 -24
  137. package/source/providers/layouts/Layout-Circular.js +0 -203
  138. package/source/providers/layouts/Layout-Coerce.js +0 -40
  139. package/source/providers/layouts/Layout-Columnar.js +0 -134
  140. package/source/providers/layouts/Layout-Custom.js +0 -27
  141. package/source/providers/layouts/Layout-ForcedFromCenter.js +0 -256
  142. package/source/providers/layouts/Layout-Grid.js +0 -134
  143. package/source/providers/layouts/Layout-Layered.js +0 -155
  144. package/source/providers/layouts/Layout-Rank.js +0 -141
  145. package/source/providers/layouts/Layout-Staggered.js +0 -131
  146. package/source/providers/layouts/Layout-Tabular.js +0 -94
  147. package/test/CardPalette_tests.js +0 -43
  148. package/test/ConnectionHandleManager_tests.js +0 -717
  149. package/test/ConnectionRenderer_tests.js +0 -591
  150. package/test/ConnectionStyle_tests.js +0 -90
  151. package/test/DataManager_tests.js +0 -859
  152. package/test/Geometry_tests.js +0 -767
  153. package/test/InteractionManager_tests.js +0 -279
  154. package/test/Layout_tests.js +0 -1604
  155. package/test/NodeView_tests.js +0 -66
  156. package/test/PanelManager_tests.js +0 -172
  157. package/test/PathGenerator_tests.js +0 -978
  158. package/test/PortRenderer_tests.js +0 -376
  159. package/test/RenderManager_tests.js +0 -756
  160. package/test/Renderer_tests.js +0 -133
  161. package/test/SelectionManager_tests.js +0 -185
  162. package/test/StylePresets_tests.js +0 -153
  163. package/test/ToolbarExtraButtons_tests.js +0 -138
  164. package/test/UndirectedConnections_tests.js +0 -70
@@ -1,2 +0,0 @@
1
- "use strict";function _defineProperty(t,e,i){return(e=_toPropertyKey(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function _toPropertyKey(t){var e=_toPrimitive(t,"string");return"symbol"==typeof e?e:e+""}function _toPrimitive(t,e){if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var n=i.call(t,e||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}!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).PictSectionModal=t()}}(function(){return function t(e,i,n){function o(s,l){if(!i[s]){if(!e[s]){var r="function"==typeof require&&require;if(!l&&r)return r(s,!0);if(a)return a(s,!0);var d=new Error("Cannot find module '"+s+"'");throw d.code="MODULE_NOT_FOUND",d}var c=i[s]={exports:{}};e[s][0].call(c.exports,function(t){return o(e[s][1][t]||t)},c,c.exports,t,e,i,n)}return i[s].exports}for(var a="function"==typeof require&&require,s=0;s<n.length;s++)o(n[s]);return o}({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/fable-retold/fable-serviceproviderbase.git"},keywords:["entity","behavior"],author:"Steven Velozo <steven@velozo.com> (http://velozo.com/)",license:"MIT",bugs:{url:"https://github.com/fable-retold/fable-serviceproviderbase/issues"},homepage:"https://github.com/fable-retold/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 n=t("../package.json");class o{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=n,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-".concat(Math.floor(89999*Math.random()+1e4))),this.serviceType="Unknown-".concat(this.UUID),this.Hash="string"==typeof i?i:this.fable||"string"!=typeof e?"".concat(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 [".concat(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}}_defineProperty(o,"isFableService",!0),e.exports=o,e.exports.CoreServiceProviderBase=o},{"../package.json":1}],3:[function(t,e,i){e.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/fable-retold/pict-view.git"},author:"steven velozo <steven@velozo.com>",license:"MIT",bugs:{url:"https://github.com/fable-retold/pict-view/issues"},homepage:"https://github.com/fable-retold/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"}}},{}],4:[function(t,e,i){const n=t("fable-serviceproviderbase"),o=t("../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:{}};e.exports=class extends n{constructor(t,e,i){super(t,Object.assign({},JSON.parse(JSON.stringify(a)),e),i),this.fable,this.options,this.UUID,this.Hash,this.log;const n=this.Hash===this.UUID;this.UUID="V-".concat(this.UUID),n&&(this.Hash=this.UUID),this.options.ViewIdentifier||(this.options.ViewIdentifier="AutoViewID-".concat(this.fable.getUUID())),this.serviceType="PictView",this._Package=o,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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," options object.")),this.pict.TemplateProvider.addTemplate(e.Hash,e.Template,e.Source)):this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not load Template ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," options object.")),this.pict.TemplateProvider.addDefaultTemplate(e.Prefix,e.Postfix,e.Template,e.Source)):this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not load Default Template ").concat(t," in the options array."),e)}if(this.options.CSS){let t=this.options.CSSHash?this.options.CSSHash:"View-".concat(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,n,o){let a;if("object"==typeof t)a=t;else{a={RenderableHash:t,TemplateHash:e,DefaultTemplateRecordAddress:i,ContentDestinationAddress:n,RenderMethod:"string"!=typeof o?o:"replace"}}"string"!=typeof a.RenderableHash||"string"!=typeof a.TemplateHash?this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not load Renderable; RenderableHash or TemplateHash are invalid."),a):(this.pict.LogNoisiness>0&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," adding renderable [").concat(a.RenderableHash,"] pointed to template ").concat(a.TemplateHash,".")),this.renderables[a.RenderableHash]=a)}onBeforeInitialize(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onBeforeInitialize:")),!0}onBeforeInitializeAsync(t){return this.onBeforeInitialize(),t()}onInitialize(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onInitialize:")),!0}onInitializeAsync(t){return this.onInitialize(),t()}initialize(){return this.pict.LogControlFlow&&this.log.trace("PICT-ControlFlow VIEW [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," initialize:")),this.initializeTimestamp?(this.log.warn("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," initializeAsync:")),this.initializeTimestamp)return this.log.warn("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," initialization failed: ").concat(e.message||e),{stack:e.stack}),this.initializeTimestamp=this.pict.log.getTimeStamp(),this.pict.LogNoisiness>0&&this.log.info("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," initialization complete.")),t()))}}onAfterInitialize(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onAfterInitialize:")),!0}onAfterInitializeAsync(t){return this.onAfterInitialize(),t()}onBeforeRender(t){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onBeforeRender:")),!0}onBeforeRenderAsync(t,e){return this.onBeforeRender(e),t()}onBeforeProject(t){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onBeforeProject:")),!0}onBeforeProjectAsync(t,e){return this.onBeforeProject(e),t()}buildRenderOptions(t,e,i){let n={Valid:!0};return n.RenderableHash="string"==typeof t?t:"string"==typeof this.options.DefaultRenderable&&this.options.DefaultRenderable,n.RenderableHash||(this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not find a suitable RenderableHash ").concat(n.RenderableHash," (param ").concat(t,"because it is not a valid renderable.")),n.Valid=!1),n.Renderable=this.renderables[n.RenderableHash],n.Renderable||(this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not render ").concat(n.RenderableHash," (param ").concat(t,") because it does not exist.")),n.Valid=!1),n.DestinationAddress="string"==typeof e?e:"string"==typeof n.Renderable.ContentDestinationAddress?n.Renderable.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress&&this.options.DefaultDestinationAddress,n.DestinationAddress||(this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not render ").concat(n.RenderableHash," (param ").concat(t,") because it does not have a valid destination address (param ").concat(e,").")),n.Valid=!1),"object"==typeof i?(n.RecordAddress="Passed in as object",n.Record=i):(n.RecordAddress="string"==typeof i?i:"string"==typeof n.Renderable.DefaultTemplateRecordAddress?n.Renderable.DefaultTemplateRecordAddress:"string"==typeof this.options.DefaultTemplateRecordAddress&&this.options.DefaultTemplateRecordAddress,n.Record="string"==typeof n.RecordAddress?this.pict.DataProvider.getDataByAddress(n.RecordAddress):void 0),n}assignRenderContent(t,e,i){return this.pict.ContentAssignment.projectContent(t.RenderMethod,e,i,t.TestAddress)}render(t,e,i,n){return this.renderWithScope(this,t,e,i,n)}renderWithScope(t,e,i,n,o){let a,s,l,r="string"==typeof e?e:"string"==typeof this.options.DefaultRenderable&&this.options.DefaultRenderable;return r?("__Virtual"==r?a={RenderableHash:"__Virtual",TemplateHash:this.renderables[this.options.DefaultRenderable].TemplateHash,ContentDestinationAddress:"string"==typeof i?i:"string"==typeof a.ContentDestinationAddress?a.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null,RenderMethod:"virtual-assignment",TransactionHash:o&&o.TransactionHash,RootRenderableViewHash:o&&o.RootRenderableViewHash}:(a=Object.assign({},this.renderables[r]),a.ContentDestinationAddress="string"==typeof i?i:"string"==typeof a.ContentDestinationAddress?a.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null),a.TransactionHash||(a.TransactionHash="ViewRender-V-".concat(this.options.ViewIdentifier,"-R-").concat(r,"-U-").concat(this.pict.getUUID()),a.RootRenderableViewHash=this.Hash,this.pict.TransactionTracking.registerTransaction(a.TransactionHash)),a?a.ContentDestinationAddress?("object"==typeof n?(l=n,s="Passed in as object"):(s="string"==typeof n?n:"string"==typeof a.DefaultTemplateRecordAddress?a.DefaultTemplateRecordAddress:"string"==typeof this.options.DefaultTemplateRecordAddress&&this.options.DefaultTemplateRecordAddress,l="string"==typeof s?this.pict.DataProvider.getDataByAddress(s):void 0),this.onBeforeRender(a),this.pict.LogControlFlow&&this.log.trace("PICT-ControlFlow VIEW [".concat(this.UUID,"]::[").concat(this.Hash,"] Renderable[").concat(r,"] Destination[").concat(a.ContentDestinationAddress,"] TemplateRecordAddress[").concat(s,"] render:")),this.pict.LogNoisiness>0&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," Beginning Render of Renderable[").concat(r,"] to Destination [").concat(a.ContentDestinationAddress,"]...")),a.Content=this.pict.parseTemplateByHash(a.TemplateHash,l,null,[this],t,{RootRenderable:"object"==typeof o?o:a}),this.pict.LogNoisiness>0&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," Assigning Renderable[").concat(r,"] content length ").concat(a.Content.length," to Destination [").concat(a.ContentDestinationAddress,"] using render method [").concat(a.RenderMethod,"].")),this.onBeforeProject(a),this.onProject(a),"virtual-assignment"!==a.RenderMethod&&(this.onAfterProject(a),this.onAfterRender(a)),!0):(this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not render ").concat(r," (param ").concat(e,") because it does not have a valid destination address.")),!1):(this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not render ").concat(r," (param ").concat(e,") because it does not exist.")),!1)):(this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not render ").concat(r," (param ").concat(e,") because it is not a valid renderable.")),!1)}renderAsync(t,e,i,n,o){return this.renderWithScopeAsync(this,t,e,i,n,o)}renderWithScopeAsync(t,e,i,n,o,a){let s,l,r,d="string"==typeof e?e:"string"==typeof this.options.DefaultRenderable&&this.options.DefaultRenderable,c="function"==typeof a?a:"function"==typeof n?n:"function"==typeof i?i:"function"==typeof e?e:"function"==typeof o?o:null;if(c||(this.log.warn("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.Name," renderAsync Auto Callback Error: ").concat(t),t)}),!d)return this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not asynchronously render ").concat(d," (param ").concat(e,"because it is not a valid renderable.")),c(new Error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not asynchronously render ").concat(d," (param ").concat(e,"because it is not a valid renderable.")));if("__Virtual"==d?s={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:o&&"function"!=typeof o&&o.TransactionHash,RootRenderableViewHash:o&&"function"!=typeof o&&o.RootRenderableViewHash}:(s=Object.assign({},this.renderables[d]),s.ContentDestinationAddress="string"==typeof i?i:"string"==typeof s.ContentDestinationAddress?s.ContentDestinationAddress:"string"==typeof this.options.DefaultDestinationAddress?this.options.DefaultDestinationAddress:null),s.TransactionHash||(s.TransactionHash="ViewRender-V-".concat(this.options.ViewIdentifier,"-R-").concat(d,"-U-").concat(this.pict.getUUID()),s.RootRenderableViewHash=this.Hash,this.pict.TransactionTracking.registerTransaction(s.TransactionHash)),!s)return this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not render ").concat(d," (param ").concat(e,") because it does not exist.")),c(new Error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not render ").concat(d," (param ").concat(e,") because it does not exist.")));if(!s.ContentDestinationAddress)return this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not render ").concat(d," (param ").concat(e,") because it does not have a valid destination address.")),c(new Error("Could not render ".concat(d)));"object"==typeof n?(r=n,l="Passed in as object"):(l="string"==typeof n?n:"string"==typeof s.DefaultTemplateRecordAddress?s.DefaultTemplateRecordAddress:"string"==typeof this.options.DefaultTemplateRecordAddress&&this.options.DefaultTemplateRecordAddress,r="string"==typeof l?this.pict.DataProvider.getDataByAddress(l):void 0),this.pict.LogControlFlow&&this.log.trace("PICT-ControlFlow VIEW [".concat(this.UUID,"]::[").concat(this.Hash,"] Renderable[").concat(d,"] Destination[").concat(s.ContentDestinationAddress,"] TemplateRecordAddress[").concat(l,"] renderAsync:")),this.pict.LogNoisiness>2&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," Beginning Asynchronous Render (callback-style)..."));let p=this.fable.newAnticipate();p.anticipate(t=>{this.onBeforeRenderAsync(t,s)}),p.anticipate(i=>{this.pict.parseTemplateByHash(s.TemplateHash,r,(t,n)=>t?(this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not render (asynchronously) ").concat(d," (param ").concat(e,") because it did not parse the template."),t),i(t)):(s.Content=n,i()),[this],t,{RootRenderable:"object"==typeof o?o:s})}),p.anticipate(t=>{this.onBeforeProjectAsync(t,s)}),p.anticipate(t=>{this.onProjectAsync(t,s)}),"virtual-assignment"!==s.RenderMethod&&(p.anticipate(t=>{this.onAfterProjectAsync(t,s)}),p.anticipate(t=>{this.onAfterRenderAsync(t,s)})),p.wait(c)}renderDefaultAsync(t){this.renderAsync(t)}basicRender(t,e,i){return this.basicRenderWithScope(this,t,e,i)}basicRenderWithScope(t,e,i,n){let o=this.buildRenderOptions(e,i,n);return o.Valid?(this.assignRenderContent(o.Renderable,o.DestinationAddress,this.pict.parseTemplateByHash(o.Renderable.TemplateHash,o.Record,null,[this],t,{RootRenderable:o.Renderable})),!0):(this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not perform a basic render of ").concat(o.RenderableHash," because it is not valid.")),!1)}basicRenderAsync(t,e,i,n){return this.basicRenderWithScopeAsync(this,t,e,i,n)}basicRenderWithScopeAsync(t,e,i,n,o){let a="function"==typeof o?o:"function"==typeof n?n:"function"==typeof i?i:"function"==typeof e?e:null;a||(this.log.warn("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.Name," basicRenderAsync was called without a valid callback. A callback will be generated but this could lead to race conditions.")),a=t=>{t&&this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.Name," basicRenderAsync Auto Callback Error: ").concat(t),t)});const s=this.buildRenderOptions(e,i,n);if(!s.Valid){let t="PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not perform a basic render of ").concat(s.RenderableHash," because it is not valid.");return this.log.error(t),a(new Error(t))}this.pict.parseTemplateByHash(s.Renderable.TemplateHash,s.Record,(t,e)=>t?(this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," could not render (asynchronously) ").concat(s.RenderableHash," because it did not parse the template."),t),a(t)):(this.assignRenderContent(s.Renderable,s.DestinationAddress,e),a()),[this],t,{RootRenderable:s.Renderable})}onProject(t){this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," Assigning Renderable[").concat(t.RenderableHash,"] content length ").concat(t.Content.length," to Destination [").concat(t.ContentDestinationAddress,"] using Async render method ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onAfterRender: Could not find view for transaction hash ").concat(t.TransactionHash," and ViewHash ").concat(i.Data.ViewHash,"."))}this.pict.TransactionTracking.unregisterTransaction(t.TransactionHash)}return!0}onAfterRenderAsync(t,e){this.onAfterRender(e);const i=this.fable.newAnticipate(),n=e&&e.RootRenderableViewHash===this.Hash;if(n){const t=this.pict.TransactionTracking.clearTransactionQueue(e.TransactionHash)||[];for(const n of t){const t=this.pict.views[n.Data.ViewHash];t?(i.anticipate(t.onAfterProjectAsync.bind(t)),i.anticipate(e=>{t.onAfterRenderAsync(e,n.Data.Renderable)})):this.log.error("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onAfterRenderAsync: Could not find view for transaction hash ").concat(e.TransactionHash," and ViewHash ").concat(n.Data.ViewHash,"."))}}return i.wait(i=>(n&&e&&e.TransactionHash&&this.pict.TransactionTracking.unregisterTransaction(e.TransactionHash),t(i)))}onAfterProject(t){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onAfterProject:")),!0}onAfterProjectAsync(t,e){return t()}onBeforeSolve(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onBeforeSolve:")),!0}onBeforeSolveAsync(t){return this.onBeforeSolve(),t()}onSolve(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onSolve:")),!0}onSolveAsync(t){return this.onSolve(),t()}solve(){return this.pict.LogNoisiness>2&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.Name," solveAsync Auto Callback Error: ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," solveAsync() complete.")),this.lastSolvedTimestamp=this.pict.log.getTimeStamp(),i(t)))}onAfterSolve(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onAfterSolve:")),!0}onAfterSolveAsync(t){return this.onAfterSolve(),t()}onBeforeMarshalFromView(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onBeforeMarshalFromView:")),!0}onBeforeMarshalFromViewAsync(t){return this.onBeforeMarshalFromView(),t()}onMarshalFromView(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onMarshalFromView:")),!0}onMarshalFromViewAsync(t){return this.onMarshalFromView(),t()}marshalFromView(){return this.pict.LogNoisiness>2&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.Name," marshalFromViewAsync Auto Callback Error: ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," marshalFromViewAsync() complete.")),this.lastMarshalFromViewTimestamp=this.pict.log.getTimeStamp(),i(t)))}onAfterMarshalFromView(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onAfterMarshalFromView:")),!0}onAfterMarshalFromViewAsync(t){return this.onAfterMarshalFromView(),t()}onBeforeMarshalToView(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onBeforeMarshalToView:")),!0}onBeforeMarshalToViewAsync(t){return this.onBeforeMarshalToView(),t()}onMarshalToView(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onMarshalToView:")),!0}onMarshalToViewAsync(t){return this.onMarshalToView(),t()}marshalToView(){return this.pict.LogNoisiness>2&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.Name," marshalToViewAsync Auto Callback Error: ").concat(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 [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," marshalToViewAsync() complete.")),this.lastMarshalToViewTimestamp=this.pict.log.getTimeStamp(),i(t)))}onAfterMarshalToView(){return this.pict.LogNoisiness>3&&this.log.trace("PictView [".concat(this.UUID,"]::[").concat(this.Hash,"] ").concat(this.options.ViewIdentifier," onAfterMarshalToView:")),!0}onAfterMarshalToViewAsync(t){return this.onAfterMarshalToView(),t()}get isPictView(){return!0}}},{"../package.json":3,"fable-serviceproviderbase":2}],5:[function(t,e,i){e.exports=class{constructor(t){this._modal=t}confirm(t,e){let i=Object.assign({},this._modal.options.DefaultConfirmOptions,e);return new Promise(e=>{let n=this._buildDialog(i.title,t,e,i);this._showDialog(n,e)})}doubleConfirm(t,e){let i=Object.assign({},this._modal.options.DefaultDoubleConfirmOptions,e);return new Promise(e=>{let n=this._buildDoubleConfirmDialog(i.title,t,e,i);this._showDialog(n,e)})}_buildDialog(t,e,i,n){let o=this._modal._nextId(),a=n.dangerous?"danger":"primary",s=document.createElement("div");s.className="pict-modal-dialog",n.unbounded&&(s.className+=" pict-modal-dialog--unbounded"),s.id="pict-modal-"+o,s.setAttribute("role","dialog"),s.setAttribute("aria-modal","true"),s.style.width="420px",s.innerHTML='<div class="pict-modal-dialog-header"><span class="pict-modal-dialog-title">'+this._escapeHTML(t)+'</span><button class="pict-modal-dialog-close" aria-label="Close">&times;</button></div><div class="pict-modal-dialog-body"><p>'+this._escapeHTML(e)+'</p></div><div class="pict-modal-dialog-footer"><button class="pict-modal-btn" data-action="cancel">'+this._escapeHTML(n.cancelLabel)+'</button><button class="pict-modal-btn pict-modal-btn--'+a+'" data-action="confirm">'+this._escapeHTML(n.confirmLabel)+"</button></div>";let l=s.querySelector(".pict-modal-dialog-close"),r=s.querySelector('[data-action="cancel"]'),d=s.querySelector('[data-action="confirm"]'),c=t=>{this._dismissDialog(s,t,i)};return l.addEventListener("click",()=>{c(!1)}),r.addEventListener("click",()=>{c(!1)}),d.addEventListener("click",()=>{c(!0)}),s._dismiss=c,s._focusTarget=r,s}_buildDoubleConfirmDialog(t,e,i,n){let o=this._modal._nextId(),a="string"==typeof n.confirmPhrase&&n.confirmPhrase.length>0,s=document.createElement("div");s.className="pict-modal-dialog",n.unbounded&&(s.className+=" pict-modal-dialog--unbounded"),s.id="pict-modal-"+o,s.setAttribute("role","dialog"),s.setAttribute("aria-modal","true"),s.style.width="420px";let l="<p>"+this._escapeHTML(e)+"</p>";if(a){let t=n.phrasePrompt.replace("{phrase}",n.confirmPhrase);l+='<div class="pict-modal-confirm-prompt">'+this._escapeHTML(t)+'</div><input type="text" class="pict-modal-confirm-input" autocomplete="off" spellcheck="false" />'}s.innerHTML='<div class="pict-modal-dialog-header"><span class="pict-modal-dialog-title">'+this._escapeHTML(t)+'</span><button class="pict-modal-dialog-close" aria-label="Close">&times;</button></div><div class="pict-modal-dialog-body">'+l+'</div><div class="pict-modal-dialog-footer"><button class="pict-modal-btn" data-action="cancel">'+this._escapeHTML(n.cancelLabel)+'</button><button class="pict-modal-btn pict-modal-btn--danger" data-action="confirm" disabled>'+this._escapeHTML(n.confirmLabel)+"</button></div>";let r=s.querySelector(".pict-modal-dialog-close"),d=s.querySelector('[data-action="cancel"]'),c=s.querySelector('[data-action="confirm"]'),p=t=>{this._dismissDialog(s,t,i)};if(r.addEventListener("click",()=>{p(!1)}),d.addEventListener("click",()=>{p(!1)}),a){let t=s.querySelector(".pict-modal-confirm-input");t.addEventListener("input",()=>{c.disabled=t.value!==n.confirmPhrase}),c.addEventListener("click",()=>{c.disabled||p(!0)}),s._focusTarget=t}else{let t=0;n.confirmLabel;c.disabled=!1,c.addEventListener("click",()=>{t++,1===t?c.textContent="Click again to confirm":p(!0)}),s._focusTarget=d}return s._dismiss=p,s}_showDialog(t,e){let i={element:t,dismiss:t._dismiss,type:"confirm"},n=null;this._modal.options.OverlayClickDismisses&&(n=()=>{t._dismiss(!1)}),this._modal._overlay.show(n),document.body.appendChild(t),this._modal._activeModals.push(i),t.offsetHeight,t.classList.add("pict-modal-visible"),t._focusTarget&&t._focusTarget.focus(),t._keyHandler=e=>{"Escape"===e.key&&t._dismiss(!1)},document.addEventListener("keydown",t._keyHandler)}_dismissDialog(t,e,i){if(!t._dismissed){if(t._dismissed=!0,t._keyHandler&&document.removeEventListener("keydown",t._keyHandler),t.classList.remove("pict-modal-visible"),this._modal._activeModals=this._modal._activeModals.filter(e=>e.element!==t),this._modal._activeModals.length>0){let t=this._modal._activeModals[this._modal._activeModals.length-1];this._modal._overlay.updateClickHandler(this._modal.options.OverlayClickDismisses?t.dismiss:null)}this._modal._overlay.hide(),setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t)},220),i(e)}}_escapeHTML(t){return"string"!=typeof t?"":t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}},{}],6:[function(t,e,i){e.exports=class{constructor(t){this._modal=t,this._activeMenu=null}dropdown(t,e){let i=Object.assign({align:"left",position:"auto",maxHeight:"60vh",closeOnSelect:!0},e||{}),n=this._resolveAnchor(t),o=this._anchorRect(t,n);if(!o)return Promise.resolve(null);if(this._activeMenu&&this._activeMenu.anchor===n)return this._activeMenu.promise;this.dismissAll();let a,s=Array.isArray(i.items)?i.items:[],l=new Promise(t=>{a=t}),r=this._buildMenu(s,i);document.body.appendChild(r),this._positionMenu(r,o,i),r.offsetHeight,r.classList.add("pict-modal-visible");let d=t=>{r._dismissed||(r._dismissed=!0,document.removeEventListener("mousedown",p,!0),document.removeEventListener("keydown",h,!0),window.removeEventListener("resize",m),window.removeEventListener("scroll",m,!0),r.classList.remove("pict-modal-visible"),setTimeout(()=>{r.parentNode&&r.parentNode.removeChild(r)},180),this._activeMenu&&this._activeMenu.element===r&&(this._activeMenu=null),"function"==typeof i.onClose&&i.onClose(t),a(t))},c=r.querySelectorAll("[data-pict-modal-dropdown-item]");for(let t=0;t<c.length;t++){let e=c[t];e.addEventListener("click",t=>{if(e.hasAttribute("data-disabled"))return;t.stopPropagation();let n=parseInt(e.getAttribute("data-index"),10),o=s[n],a=e.getAttribute("data-hash");"function"==typeof i.onSelect&&i.onSelect(a,o),!1!==i.closeOnSelect&&d({Hash:a,Item:o})})}let p=t=>{r.contains(t.target)||n&&n.contains&&n.contains(t.target)||d(null)};document.addEventListener("mousedown",p,!0);let h=t=>{if("Escape"===t.key)return t.stopPropagation(),void d(null);if("ArrowDown"===t.key||"ArrowUp"===t.key)t.preventDefault(),this._focusNeighbor(r,"ArrowDown"===t.key?1:-1);else if("Enter"===t.key||" "===t.key){let e=document.activeElement;e&&r.contains(e)&&e.hasAttribute("data-pict-modal-dropdown-item")&&(t.preventDefault(),e.click())}};document.addEventListener("keydown",h,!0);let m=()=>{let e=this._anchorRect(t,n);e&&this._positionMenu(r,e,i)};return window.addEventListener("resize",m),window.addEventListener("scroll",m,!0),setTimeout(()=>{this._focusFirstEnabled(r)},0),this._activeMenu={element:r,anchor:n,promise:l,dismiss:d},l}dismissAll(){if(this._activeMenu){let t=this._activeMenu.dismiss;this._activeMenu=null,t(null)}}_resolveAnchor(t){return t?"string"==typeof t?document.querySelector(t):1===t.nodeType?t:null:null}_anchorRect(t,e){return e&&"function"==typeof e.getBoundingClientRect?e.getBoundingClientRect():t&&"object"==typeof t&&"number"==typeof t.left&&"number"==typeof t.top?{left:t.left,top:t.top,width:t.width||0,height:t.height||0,right:t.left+(t.width||0),bottom:t.top+(t.height||0)}:null}_buildMenu(t,e){let i=this._modal._nextId(),n=document.createElement("div");n.className="pict-modal-dropdown",e.className&&(n.className+=" "+e.className),n.id="pict-modal-dropdown-"+i,n.setAttribute("role","menu"),n.style.maxHeight=e.maxHeight;let o="";for(let e=0;e<t.length;e++){let i=t[e];if(i.Separator){o+='<div class="pict-modal-dropdown-separator" role="separator"></div>';continue}if(i.Header){o+='<div class="pict-modal-dropdown-header">'+this._escapeHTML(i.Header)+"</div>";continue}let n="pict-modal-dropdown-item";i.Style&&(n+=" pict-modal-dropdown-item--"+i.Style),i.Disabled&&(n+=" pict-modal-dropdown-item--disabled");let a=' data-pict-modal-dropdown-item data-index="'+e+'" data-hash="'+this._escapeHTML(i.Hash||"")+'" role="menuitem" tabindex="-1"';i.Disabled&&(a+=' aria-disabled="true" data-disabled'),i.Tooltip&&(a+=' title="'+this._escapeHTML(i.Tooltip)+'"');let s=i.Icon?'<span class="pict-modal-dropdown-item-icon">'+i.Icon+"</span>":"",l=i.Hint?'<span class="pict-modal-dropdown-item-hint">'+this._escapeHTML(i.Hint)+"</span>":"";o+='<div class="'+n+'"'+a+">"+s+'<span class="pict-modal-dropdown-item-label">'+this._escapeHTML(i.Label||"")+"</span>"+l+"</div>"}return n.innerHTML=o,n}_positionMenu(t,e,i){let n=i.minWidth||(e.width>=80?Math.ceil(e.width)+"px":"160px");t.style.minWidth=n;let o,a=t.getBoundingClientRect(),s=window.innerWidth||document.documentElement.clientWidth,l=(window.innerHeight||document.documentElement.clientHeight)-e.bottom-4,r=e.top-4;o="above"===i.position||"below"!==i.position&&(a.height>l&&r>l);let d,c,p=Math.max(80,(o?r:l)-8);t.style.maxHeight=p+"px",d="right"===i.align?e.right-a.width:"center"===i.align?e.left+(e.width-a.width)/2:e.left,d=Math.min(d,s-a.width-4),d=Math.max(4,d),o?(c=Math.max(4,e.top-a.height-4),t.classList.add("pict-modal-dropdown--above")):(c=e.bottom+4,t.classList.remove("pict-modal-dropdown--above")),t.style.left=Math.round(d)+"px",t.style.top=Math.round(c)+"px"}_focusFirstEnabled(t){let e=t.querySelectorAll("[data-pict-modal-dropdown-item]:not([data-disabled])");e.length&&e[0].focus()}_focusNeighbor(t,e){let i=Array.prototype.slice.call(t.querySelectorAll("[data-pict-modal-dropdown-item]:not([data-disabled])"));if(!i.length)return;let n=document.activeElement,o=i.indexOf(n);i[-1===o?e>0?0:i.length-1:(o+e+i.length)%i.length].focus()}_escapeHTML(t){return"string"!=typeof t?"":t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}},{}],7:[function(t,e,i){e.exports=class{constructor(t){this._modal=t,this._element=null,this._refCount=0}show(t){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")),t&&(this._currentClickHandler=t,this._element.onclick=t=>{t.target===this._element&&this._currentClickHandler&&this._currentClickHandler()})}updateClickHandler(t){this._currentClickHandler=t||null}hide(){if(this._refCount--,this._refCount<=0&&(this._refCount=0,this._element)){this._element.classList.remove("pict-modal-visible");let t=this._element;setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t)},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}}},{}],8:[function(t,e,i){e.exports=class{constructor(t){this._modal=t,this._panels=[]}create(t,e){let i=this._modal&&this._modal.options&&this._modal.options.DefaultPanelOptions||{},n=Object.assign({},{position:"right",width:340,minWidth:200,maxWidth:600,collapsible:!0,collapsed:!1,persist:!1,persistKey:"",onResize:null,onToggle:null},i,e);if("undefined"==typeof document)return this._nullHandle();let o=document.querySelector(t);if(!o)return this._nullHandle();let a=this._modal._nextId(),s="right"===n.position,l=!1,r=n.width,d=!1;if(n.persist&&n.persistKey)try{let t=localStorage.getItem("pict-panel-"+n.persistKey);if(t){let e=JSON.parse(t);"number"==typeof e.width&&(r=e.width),"boolean"==typeof e.collapsed&&(n.collapsed=e.collapsed)}}catch(t){}o.classList.add("pict-panel"),o.classList.add(s?"pict-panel-right":"pict-panel-left"),o.style.width=r+"px","none"===o.style.display&&(o.style.display="");let c=document.createElement("div");c.className="pict-panel-edge "+(s?"pict-panel-edge-right":"pict-panel-edge-left");let p=document.createElement("div");p.className="pict-panel-resize",c.appendChild(p);let h=null;n.collapsible&&(h=document.createElement("div"),h.className="pict-panel-tab",h.title="Toggle panel",c.appendChild(h)),o.parentNode?s?o.parentNode.insertBefore(c,o):o.parentNode.insertBefore(c,o.nextSibling):o.insertBefore(c,o.firstChild);let m="undefined"!=typeof window&&window.pict?window.pict:null,u=t=>m&&"function"==typeof m.icon?m.icon(t):"",f=()=>{if(!h)return;let t=u("ChevronRight"),e=u("ChevronLeft");h.innerHTML=s?l?e:t:l?t:e},b=()=>{if(n.persist&&n.persistKey)try{localStorage.setItem("pict-panel-"+n.persistKey,JSON.stringify({width:r,collapsed:l}))}catch(t){}},g=()=>{l||d||(l=!0,o.classList.add("pict-panel-collapsed"),c.classList.add("pict-panel-edge-collapsed"),f(),b(),"function"==typeof n.onToggle&&n.onToggle(!0))},w=()=>{l&&!d&&(l=!1,c.classList.remove("pict-panel-edge-collapsed"),o.classList.remove("pict-panel-collapsed"),o.style.width=r+"px",f(),b(),"function"==typeof n.onToggle&&n.onToggle(!1))},v=()=>{l?w():g()};h&&h.addEventListener("click",t=>{t.stopPropagation(),v()});let y=t=>{if(l)return;t.preventDefault();let e=t.clientX,i=o.offsetWidth;p.classList.add("dragging"),o.style.transition="none",document.body.style.userSelect="none",document.body.style.cursor="col-resize";let a=t=>{let a=s?e-t.clientX:t.clientX-e,l=Math.max(n.minWidth,Math.min(n.maxWidth,i+a));o.style.width=l+"px"},d=t=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",d),p.classList.remove("dragging"),o.style.transition="",document.body.style.userSelect="",document.body.style.cursor="",r=o.offsetWidth,b(),"function"==typeof n.onResize&&n.onResize(r)};document.addEventListener("mousemove",a),document.addEventListener("mouseup",d)};p.addEventListener("mousedown",y),f(),n.collapsed&&(l=!0,o.classList.add("pict-panel-collapsed"),c.classList.add("pict-panel-edge-collapsed"),f());let _={id:a,collapse:g,expand:w,toggle:v,setWidth:t=>{if(d)return;let e=Math.max(n.minWidth,Math.min(n.maxWidth,t));r=e,l||(o.style.width=e+"px"),b(),"function"==typeof n.onResize&&n.onResize(e)},destroy:()=>{if(d)return;d=!0,p.removeEventListener("mousedown",y),c.parentNode&&c.remove(),o.classList.remove("pict-panel","pict-panel-right","pict-panel-left","pict-panel-collapsed"),o.style.width="",o.style.transition="";let t=this._panels.indexOf(_);t>=0&&this._panels.splice(t,1)}};return this._panels.push(_),_}_nullHandle(){return{id:0,collapse:()=>{},expand:()=>{},toggle:()=>{},setWidth:()=>{},destroy:()=>{}}}destroyAll(){let t=this._panels.slice();for(let e=0;e<t.length;e++)t[e].destroy()}}},{}],9:[function(t,e,i){const n="pict-modal-shell:";class o{constructor(t,e,i){_defineProperty(this,"_onDragMove",t=>{if(!this._activeDrag)return;let e=this._activeDrag,i=(("x"===e.Axis?t.clientX:t.clientY)-e.StartCoord)*e.Direction;if(e.PendingSize=e.StartSize+i,!e.RAFId){let t=this;e.RAFId="undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame(function(){t._flushDrag()}):setTimeout(function(){t._flushDrag()},16)}}),_defineProperty(this,"_onDragEnd",()=>{if(!this._activeDrag)return;let t=this._activeDrag;null!==t.PendingSize&&this._flushDrag(),t.RAFId&&"undefined"!=typeof window&&window.cancelAnimationFrame&&window.cancelAnimationFrame(t.RAFId),document.body.classList.remove("pict-modal-shell-dragging-x"),document.body.classList.remove("pict-modal-shell-dragging-y"),t.Panel.El.classList.remove("pict-modal-shell-panel-resizing"),document.removeEventListener("pointermove",this._onDragMove),document.removeEventListener("pointerup",this._onDragEnd),t.Panel._persist(),this._activeDrag=null}),this._modal=t,this._viewport=e,this._options=i||{},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(t){let e=new a(this,t||{});return this._panels.push(e),this._panelsByHash[e.Hash]=e,this._mountPanel(e),e._renderContentView(),e}getPanel(t){return this._panelsByHash[t]||null}getPanels(){return this._panels.slice()}openPanel(t){let e=this._panelsByHash[t];return e&&e.popup(),e||null}center(t){if((t=t||{}).ContentDestinationId){this._centerDestinationEl&&this._centerDestinationEl.parentNode===this._centerEl&&this._centerEl.removeChild(this._centerDestinationEl);let e=document.createElement("div");e.id=t.ContentDestinationId,e.className="pict-modal-shell-center-content";let i=null,n=this._centerEl.children;for(let t=0;t<n.length;t++){let e=n[t];if(e.classList&&e.classList.contains("pict-modal-shell-panel-bottom")){i=e;break}}i?this._centerEl.insertBefore(e,i):this._centerEl.appendChild(e),this._centerDestinationEl=e}return this._centerEl}getCenterEl(){return this._centerEl}destroy(){for(let t=0;t<this._panels.length;t++)this._panels[t].destroy(!0);this._panels=[],this._panelsByHash={},this._wrapperEl&&this._wrapperEl.parentNode&&this._wrapperEl.parentNode.removeChild(this._wrapperEl),this._detachDragHandlers()}_resolvePersistenceKey(t){if("string"==typeof t&&t.length>0)return n+t;try{if("undefined"!=typeof window&&window.location&&window.location.hostname)return n+window.location.hostname}catch(t){}return n+"default"}_loadState(){if(!this._persistenceKey)return null;try{let t="undefined"!=typeof window?window.localStorage:null;if(!t)return null;let e=t.getItem(this._persistenceKey);if(!e)return null;let i=JSON.parse(e);return i&&1===i.Version?i.Panels&&"object"==typeof i.Panels?i.Panels:{}:null}catch(t){return null}}_loadPanelState(t){let e=this._loadState();return e&&e[t]||null}_savePanelState(t,e){if(this._persistenceKey)try{let i="undefined"!=typeof window?window.localStorage:null;if(!i)return;let n=this._loadState()||{};n[t]=e,i.setItem(this._persistenceKey,JSON.stringify({Version:1,Panels:n,SavedAt:(new Date).toISOString()}))}catch(t){}}_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(t){if("overlay"===t.Position)return void this._overlayLayer.appendChild(t.El);if("center"===t.Scope)return this._centerEl.classList.add("pict-modal-shell-center-with-inner-panel"),void("top"===t.Side?this._centerEl.insertBefore(t.El,this._centerEl.firstChild):this._centerEl.appendChild(t.El));let e;e="top"===t.Side?this._topRow:"bottom"===t.Side?this._bottomRow:"left"===t.Side?this._leftStack:"right"===t.Side?this._rightStack:this._wrapperEl,e.appendChild(t.El)}_attachDragStart(t,e){e.preventDefault();let i="top"===t.Side||"bottom"===t.Side?"y":"x";this._activeDrag={Panel:t,Axis:i,StartCoord:"x"===i?e.clientX:e.clientY,StartSize:t.Size,Direction:"left"===t.Side||"top"===t.Side?1:-1,PendingSize:null,RAFId:0},document.body.classList.add("x"===i?"pict-modal-shell-dragging-x":"pict-modal-shell-dragging-y"),t.El.classList.add("pict-modal-shell-panel-resizing");try{e.target.setPointerCapture&&e.target.setPointerCapture(e.pointerId)}catch(t){}document.addEventListener("pointermove",this._onDragMove),document.addEventListener("pointerup",this._onDragEnd)}_flushDrag(){let t=this._activeDrag;t&&(t.RAFId=0,null!==t.PendingSize&&(t.Panel.setSize(t.PendingSize),t.PendingSize=null))}_detachDragHandlers(){document.removeEventListener("pointermove",this._onDragMove),document.removeEventListener("pointerup",this._onDragEnd)}}class a{constructor(t,e){this._shell=t,this._config=e,this.Hash=e.Hash||"panel-"+ ++t._idCounter,this.Side="right"===e.Side||"bottom"===e.Side||"left"===e.Side?e.Side:"top",this.Mode="collapsible"===e.Mode||"resizable"===e.Mode?e.Mode:"fixed",this.Position="overlay"===e.Position?"overlay":"pinned",this.Scope="center"!==e.Scope||"top"!==this.Side&&"bottom"!==this.Side?"shell":"center",this.Title=e.Title||"",this.Icon=e.Icon||"",this.MinSize="number"==typeof e.MinSize?e.MinSize:40,this.MaxSize="number"==typeof e.MaxSize?e.MaxSize:1200,this.Hidden=!!e.Hidden,this.CollapsedSize="number"==typeof e.CollapsedSize?e.CollapsedSize:this.Hidden?0:24,this.PersistEnabled=t._persistenceEnabled&&!1!==e.Persist;let i="left"===this.Side||"right"===this.Side?240:60;if(this.Size="number"==typeof e.Size?e.Size:i,this.Collapsed=!!e.Collapsed,this.PersistEnabled){let e=t._loadPanelState(this.Hash);e&&("number"==typeof e.Size&&(this.Size=e.Size),"boolean"==typeof e.Collapsed&&(this.Collapsed=e.Collapsed))}this._clampSize(),this._buildEl(e),this._applySize(),this._applyCollapsedClass(),this.ResponsiveDrawer="number"==typeof e.ResponsiveDrawer&&e.ResponsiveDrawer>0?e.ResponsiveDrawer:0,this.DrawerHeight="string"==typeof e.DrawerHeight&&e.DrawerHeight?e.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 t=this._shell._modal&&this._shell._modal.pict;return t&&t.views&&t.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(t){"number"==typeof t&&isFinite(t)&&(this.Size=t,this._clampSize(),this._applySize())}destroy(t){if(this._unwireResponsiveDrawer(),this.El&&this.El.parentNode&&this.El.parentNode.removeChild(this.El),!t){let t=this._shell._panels.indexOf(this);t>=0&&this._shell._panels.splice(t,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 t=this;this._mediaQueryHandler=function(e){let i=e&&"boolean"==typeof e.matches?e.matches:t._mediaQuery.matches;t._setDrawerMode(i)},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(){t._setDrawerMode(t._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(t){if(!this._shell||!this._shell._middleRow)return;if(!(!this.El||!this.El.classList.contains("pict-modal-shell-panel-drawer"))!==!!t){if(t)this._shell._middleRow.classList.add("pict-modal-shell-drawer-active"),this.El&&this.El.classList.add("pict-modal-shell-panel-drawer");else{let t=!1,e=this._shell._panels||[];for(let i=0;i<e.length;i++){let n=e[i];if(n!==this&&n._mediaQuery&&n._mediaQuery.matches&&n.ResponsiveDrawer>0){t=!0;break}}t||this._shell._middleRow.classList.remove("pict-modal-shell-drawer-active"),this.El&&this.El.classList.remove("pict-modal-shell-panel-drawer")}this._applySize()}}_buildEl(t){let e=document.createElement("div");e.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":""),e.setAttribute("data-shell-panel-hash",this.Hash),e.setAttribute("data-shell-panel-side",this.Side),e.setAttribute("data-shell-panel-mode",this.Mode);let i=document.createElement("div");if(i.className="pict-modal-shell-panel-content",this._contentEl=document.createElement("div"),t.ContentDestinationId&&(this._contentEl.id=t.ContentDestinationId),this._contentEl.className="pict-modal-shell-panel-content-inner",i.appendChild(this._contentEl),e.appendChild(i),("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 t=this;this._collapseTab.addEventListener("click",function(){t.toggle()}),e.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 t=this;this._resizeHandle.addEventListener("pointerdown",function(e){t.Collapsed||t._shell._attachDragStart(t,e)}),e.appendChild(this._resizeHandle)}this.El=e}_applySize(){let t=this.Collapsed?this.CollapsedSize:this.Size;"left"===this.Side||"right"===this.Side?(this.El.style.width=t+"px",this.El.style.height=""):(this.El.style.height=t+"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(t){if(this.Collapsed===!!t)return;let e=this.Collapsed;this.Collapsed=!!t,this._applyCollapsedClass(),this._applySize(),this._persist(),e&&!this.Collapsed?(this._renderContentView(),this._fireHook("OnExpand")):!e&&this.Collapsed&&this._fireHook("OnCollapse"),this._fireHook("OnToggle",this.Collapsed)}_fireHook(t,e){let i=this._config[t];if("function"==typeof i)try{void 0!==e?i(e,this):i(this)}catch(t){}}_renderContentView(){let t=this.getContentView();if(t&&"function"==typeof t.render)try{t.render()}catch(t){}}_flash(){if(!this.El)return;this.El.classList.add("pict-modal-shell-panel-flash");let t=this;clearTimeout(this._flashTimer),this._flashTimer=setTimeout(function(){t.El&&t.El.classList.remove("pict-modal-shell-panel-flash")},700)}_persist(){this.PersistEnabled&&this._shell._savePanelState(this.Hash,{Collapsed:this.Collapsed,Size:this.Size})}_escape(t){return String(t||"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}}e.exports=class{constructor(t){this._modal=t,this._shellsByViewport=new WeakMap}shell(t,e){let i="string"==typeof t?document.querySelector(t):t;if(!i)throw new Error("Pict-Modal-Shell.shell: viewport not found for "+t);let n=this._shellsByViewport.get(i);if(n)return n;let a=new o(this._modal,i,e);return this._shellsByViewport.set(i,a),a}},e.exports.PictModalShell=o,e.exports.ShellPanel=a,e.exports.STORAGE_PREFIX=n,e.exports.SCHEMA_VERSION=1},{}],10:[function(t,e,i){e.exports=class{constructor(t){this._modal=t,this._containers={}}toast(t,e){let i=Object.assign({},this._modal.options.DefaultToastOptions,e),n=this._getContainer(i.position),o=this._modal._nextId(),a=document.createElement("div");a.className="pict-modal-toast pict-modal-toast--"+i.type,a.id="pict-modal-toast-"+o;let s='<span class="pict-modal-toast-message">'+this._escapeHTML(t)+"</span>";i.dismissible&&(s+='<button class="pict-modal-toast-dismiss" aria-label="Dismiss">&times;</button>'),a.innerHTML=s;let l=!1,r=null,d=()=>{l||(l=!0,r&&clearTimeout(r),a.classList.remove("pict-modal-visible"),a.classList.add("pict-modal-toast-exit"),this._modal._activeToasts=this._modal._activeToasts.filter(t=>t.element!==a),setTimeout(()=>{a.parentNode&&a.parentNode.removeChild(a),this._cleanupContainer(i.position)},220))},c={dismiss:d};if(i.dismissible){let t=a.querySelector(".pict-modal-toast-dismiss");t&&t.addEventListener("click",d)}n.appendChild(a);let p={element:a,dismiss:d,handle:c};return this._modal._activeToasts.push(p),a.offsetHeight,a.classList.add("pict-modal-visible"),i.duration>0&&(r=setTimeout(d,i.duration)),c}_getContainer(t){if(this._containers[t])return this._containers[t];let e=document.createElement("div");return e.className="pict-modal-toast-container pict-modal-toast-container--"+t,document.body.appendChild(e),this._containers[t]=e,e}_cleanupContainer(t){let e=this._containers[t];e&&0===e.children.length&&(e.parentNode&&e.parentNode.removeChild(e),delete this._containers[t])}dismissAll(){let t=this._modal._activeToasts.slice();for(let e=0;e<t.length;e++)t[e].dismiss()}destroy(){this.dismissAll();let t=Object.keys(this._containers);for(let e=0;e<t.length;e++){let i=this._containers[t[e]];i&&i.parentNode&&i.parentNode.removeChild(i)}this._containers={}}_escapeHTML(t){return"string"!=typeof t?"":t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}},{}],11:[function(t,e,i){e.exports=class{constructor(t){this._modal=t}tooltip(t,e,i){let n=Object.assign({},this._modal.options.DefaultTooltipOptions,i);return this._attachTooltip(t,e,!1,n)}richTooltip(t,e,i){let n=Object.assign({},this._modal.options.DefaultTooltipOptions,i);return this._attachTooltip(t,e,!0,n)}_attachTooltip(t,e,i,n){let o=null,a=null,s=null,l=!1,r=this._modal._nextId(),d=()=>{if(l||o)return;o=document.createElement("div"),o.className="pict-modal-tooltip pict-modal-tooltip--"+n.position,o.id="pict-modal-tooltip-"+r,o.setAttribute("role","tooltip"),o.style.maxWidth=n.maxWidth,n.interactive&&o.classList.add("pict-modal-tooltip-interactive");let a=document.createElement("div");a.className="pict-modal-tooltip-arrow";let d=document.createElement("div");i?d.innerHTML=e:d.textContent=e,o.appendChild(a),o.appendChild(d),document.body.appendChild(o),t.setAttribute("aria-describedby",o.id),this._positionTooltip(o,t,n.position),o.offsetHeight,o.classList.add("pict-modal-visible"),this._modal._activeTooltips.push({element:o,targetElement:t,destroy:f}),n.interactive&&o&&(o.addEventListener("mouseenter",()=>{s&&(clearTimeout(s),s=null)}),o.addEventListener("mouseleave",()=>{c()}))},c=()=>{if(!o)return;o.classList.remove("pict-modal-visible");let e=o;o=null,t.removeAttribute("aria-describedby"),this._modal._activeTooltips=this._modal._activeTooltips.filter(t=>t.element!==e),setTimeout(()=>{e.parentNode&&e.parentNode.removeChild(e)},220)},p=()=>{s&&(clearTimeout(s),s=null),a=setTimeout(d,n.delay)},h=()=>{a&&(clearTimeout(a),a=null),n.interactive?s=setTimeout(c,100):c()},m=()=>{a=setTimeout(d,n.delay)},u=()=>{a&&(clearTimeout(a),a=null),c()};t.addEventListener("mouseenter",p),t.addEventListener("mouseleave",h),t.addEventListener("focusin",m),t.addEventListener("focusout",u);let f=()=>{l||(l=!0,a&&clearTimeout(a),s&&clearTimeout(s),c(),t.removeEventListener("mouseenter",p),t.removeEventListener("mouseleave",h),t.removeEventListener("focusin",m),t.removeEventListener("focusout",u))};return{destroy:f}}_positionTooltip(t,e,i){let n=e.getBoundingClientRect(),o=t.getBoundingClientRect(),a=i;"top"===a&&n.top<o.height+8?a="bottom":"bottom"===a&&window.innerHeight-n.bottom<o.height+8?a="top":"left"===a&&n.left<o.width+8?a="right":"right"===a&&window.innerWidth-n.right<o.width+8&&(a="left"),t.className=t.className.replace(/pict-modal-tooltip--\w+/,"pict-modal-tooltip--"+a);let s=0,l=0;switch(a){case"top":s=n.top-o.height-8,l=n.left+n.width/2-o.width/2;break;case"bottom":s=n.bottom+8,l=n.left+n.width/2-o.width/2;break;case"left":s=n.top+n.height/2-o.height/2,l=n.left-o.width-8;break;case"right":s=n.top+n.height/2-o.height/2,l=n.right+8}l=Math.max(4,Math.min(l,window.innerWidth-o.width-4)),s=Math.max(4,Math.min(s,window.innerHeight-o.height-4)),t.style.top=s+"px",t.style.left=l+"px"}dismissAll(){let t=this._modal._activeTooltips.slice();for(let e=0;e<t.length;e++)t[e].destroy()}}},{}],12:[function(t,e,i){e.exports=class{constructor(t){this._modal=t}show(t){let e=Object.assign({},this._modal.options.DefaultModalOptions,t);return new Promise(t=>{let i=this._buildDialog(e,t);this._showDialog(i,e,t)})}_buildDialog(t,e){let i=this._modal._nextId(),n=document.createElement("div");n.className="pict-modal-dialog",t.unbounded&&(n.className+=" pict-modal-dialog--unbounded"),n.id="pict-modal-"+i,n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.style.width=t.width;let o="";(t.title||t.closeable)&&(o='<div class="pict-modal-dialog-header">',o+='<span class="pict-modal-dialog-title">'+this._escapeHTML(t.title)+"</span>",t.closeable&&(o+='<button class="pict-modal-dialog-close" aria-label="Close">&times;</button>'),o+="</div>");let a='<div class="pict-modal-dialog-body">'+(t.content||"")+"</div>",s="";if(t.buttons&&t.buttons.length>0){s='<div class="pict-modal-dialog-footer">';for(let e=0;e<t.buttons.length;e++){let i=t.buttons[e],n="pict-modal-btn";i.Style&&(n+=" pict-modal-btn--"+i.Style),s+='<button class="'+n+'" data-hash="'+this._escapeHTML(i.Hash)+'">'+this._escapeHTML(i.Label)+"</button>"}s+="</div>"}n.innerHTML=o+a+s;let l=i=>{this._dismissDialog(n,i,e,t)};if(t.closeable){let t=n.querySelector(".pict-modal-dialog-close");t&&t.addEventListener("click",()=>{l(null)})}let r=n.querySelectorAll("[data-hash]");for(let t=0;t<r.length;t++){let e=r[t];e.addEventListener("click",()=>{l(e.getAttribute("data-hash"))})}return n._dismiss=l,n}_showDialog(t,e,i){let n={element:t,dismiss:t._dismiss,type:"window"},o=null;this._modal.options.OverlayClickDismisses&&e.closeable&&(o=()=>{t._dismiss(null)}),this._modal._overlay.show(o),document.body.appendChild(t),this._modal._activeModals.push(n),t.offsetHeight,t.classList.add("pict-modal-visible");let a=t.querySelector(".pict-modal-btn")||t.querySelector(".pict-modal-dialog-close");a&&a.focus(),t._keyHandler=i=>{"Escape"===i.key&&e.closeable&&t._dismiss(null)},document.addEventListener("keydown",t._keyHandler),"function"==typeof e.onOpen&&e.onOpen(t)}_dismissDialog(t,e,i,n){if(!t._dismissed){if(t._dismissed=!0,t._keyHandler&&document.removeEventListener("keydown",t._keyHandler),t.classList.remove("pict-modal-visible"),this._modal._activeModals=this._modal._activeModals.filter(e=>e.element!==t),this._modal._activeModals.length>0){let t=this._modal._activeModals[this._modal._activeModals.length-1];this._modal._overlay.updateClickHandler(this._modal.options.OverlayClickDismisses?t.dismiss:null)}this._modal._overlay.hide(),setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t)},220),"function"==typeof n.onClose&&n.onClose(e),i(e)}}_escapeHTML(t){return"string"!=typeof t?"":t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}},{}],13:[function(t,e,i){e.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"}},{}],14:[function(t,e,i){const n=t("pict-view"),o=t("./Pict-Modal-Overlay.js"),a=t("./Pict-Modal-Confirm.js"),s=t("./Pict-Modal-Window.js"),l=t("./Pict-Modal-Toast.js"),r=t("./Pict-Modal-Tooltip.js"),d=t("./Pict-Modal-Panel.js"),c=t("./Pict-Modal-Dropdown.js"),p=t("./Pict-Modal-Shell.js"),h=t("./Pict-Section-Modal-DefaultConfiguration.js");e.exports=class extends n{constructor(t,e,i){super(t,Object.assign({},h,e),i),this._activeModals=[],this._activeTooltips=[],this._activeToasts=[],this._idCounter=0,this._overlay=new o(this),this._confirm=new a(this),this._window=new s(this),this._toast=new l(this),this._tooltip=new r(this),this._panel=new d(this),this._dropdown=new c(this),this._shell=new p(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(t,e){return this._confirm.confirm(t,e)}doubleConfirm(t,e){return this._confirm.doubleConfirm(t,e)}show(t){return this._window.show(t)}tooltip(t,e,i){return this._tooltip.tooltip(t,e,i)}richTooltip(t,e,i){return this._tooltip.richTooltip(t,e,i)}toast(t,e){return this._toast.toast(t,e)}dropdown(t,e){return this._dropdown.dropdown(t,e)}dismissDropdowns(){this._dropdown.dismissAll()}panel(t,e){return this._panel.create(t,e)}shell(t,e){return this._shell.shell(t,e)}dismissModals(){let t=this._activeModals.slice();for(let e=t.length-1;e>=0;e--)t[e].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()}},e.exports.default_configuration=h},{"./Pict-Modal-Confirm.js":5,"./Pict-Modal-Dropdown.js":6,"./Pict-Modal-Overlay.js":7,"./Pict-Modal-Panel.js":8,"./Pict-Modal-Shell.js":9,"./Pict-Modal-Toast.js":10,"./Pict-Modal-Tooltip.js":11,"./Pict-Modal-Window.js":12,"./Pict-Section-Modal-DefaultConfiguration.js":13,"pict-view":4}]},{},[14])(14)});
2
- //# sourceMappingURL=pict-section-modal.min.js.map