@schmitech/chatbot-widget 0.5.3 → 0.6.0
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.
- package/dist/_basePickBy-C3-QE0dl-5eQ6L29l.js +152 -0
- package/dist/_baseUniq-CstiM9Lp-AFR_Ns0a.js +615 -0
- package/dist/arc-W3NKKXLI-DHbDwLx0.js +84 -0
- package/dist/architecture-U656AL7Q-fn9wJZsH-BLoGjtkP.js +6 -0
- package/dist/architectureDiagram-VXUJARFQ-zzJsgPC6-C4OfUE0m.js +4667 -0
- package/dist/blockDiagram-VD42YOAC-D-In4h7h-BYXdRmeG.js +2266 -0
- package/dist/c4Diagram-YG6GDRKO-DBs8r9gh-BdLuHgPT.js +1582 -0
- package/dist/channel-RBWQyMSg-Cx0HUumY.js +6 -0
- package/dist/chatbot-widget.bundle.js +4473 -1556
- package/dist/chatbot-widget.css +1 -1
- package/dist/chatbot-widget.es.js +12 -63659
- package/dist/chatbot-widget.umd.js +4472 -1555
- package/dist/chunk-4BX2VUAB-BqD7w0AR-CbA2613c.js +10 -0
- package/dist/chunk-55IACEB6-D8pvDVEJ-DrL4SJSR.js +9 -0
- package/dist/chunk-B4BG7PRW-Dwma1pSy-BWjG5dc6.js +1375 -0
- package/dist/chunk-DI55MBZ5-BY2XXvZz-DbAvz3Pq.js +1383 -0
- package/dist/chunk-FMBD7UC4-BeiLbQ8U-BNaZTCv4.js +20 -0
- package/dist/chunk-QN33PNHL-BkO3hOeq-DkU1EzGA.js +21 -0
- package/dist/chunk-QZHKN3VN-Cwlo2qTG-DMmeZmp5.js +16 -0
- package/dist/chunk-TZMSLE5B-BnXK-OiF-RfzVsOBe.js +65 -0
- package/dist/classDiagram-2ON5EDUG-Crd6O69V-kCZrFOLN.js +17 -0
- package/dist/classDiagram-v2-WZHVMYZB-Crd6O69V-kCZrFOLN.js +17 -0
- package/dist/clone-CfLgyC8S-DsDOh4B4.js +9 -0
- package/dist/config/index.d.ts +4 -2
- package/dist/cose-bilkent-S5V4N54A-DKeVcPDK-de_7nZTY.js +2609 -0
- package/dist/cytoscape.esm-CjI2IsL8-Be2K4mI6.js +18723 -0
- package/dist/dagre-6UL2VRFP-BPf604Df-BhZs6zCq.js +448 -0
- package/dist/diagram-PSM6KHXK-DeLcpEV3-qb4rujeN.js +532 -0
- package/dist/diagram-QEK2KX5R-C_5RR1NJ-C5kZWmRl.js +222 -0
- package/dist/diagram-S2PKOQOG-DVx43aon-4nlw6iDz.js +144 -0
- package/dist/erDiagram-Q2GNP2WA-DgUeO5_h-DHc9Yphl.js +841 -0
- package/dist/flowDiagram-NV44I4VS-C5HQUzU9-DHjbmAtJ.js +1628 -0
- package/dist/ganttDiagram-JELNMOA3-DgSZ1ixF-C3hJs_k9.js +1936 -0
- package/dist/gitGraph-F6HP7TQM-UL7-Bx1s-Cog5rj3j.js +6 -0
- package/dist/gitGraphDiagram-NY62KEGX-DY5loT9K-CEcKQNrM.js +713 -0
- package/dist/graph-BfwqPHx6-DErF9dBN.js +248 -0
- package/dist/index-B5s_uaP2.js +124168 -0
- package/dist/index-BAOVR-xx-thst7Pu6.js +13251 -0
- package/dist/info-NVLQJR56-BsqQ0RXQ-BcYgZCCY.js +6 -0
- package/dist/infoDiagram-WHAUD3N6-DIqQ6vCk-BuiAAMSH.js +25 -0
- package/dist/journeyDiagram-XKPGCS4Q-DXjg3S3r-Byi_TGXs.js +835 -0
- package/dist/kanban-definition-3W4ZIXB7-Uxt7Am6n-jy96nA-g.js +721 -0
- package/dist/layout-CSfkE668-BjigbqJL.js +1333 -0
- package/dist/mermaid-parser.core-LjuO4CL3-BLqmPe8-.js +12891 -0
- package/dist/mindmap-definition-VGOIOE7T-DXwVuAPE-SK4e1Sse.js +787 -0
- package/dist/packet-BFZMPI3H-DJWkrKrV-BamBev9S.js +6 -0
- package/dist/pie-7BOR55EZ-DC8hTFwn-D1bcIQbR.js +6 -0
- package/dist/pieDiagram-ADFJNKIX-Cj0EHHtj-Dbr09c-S.js +161 -0
- package/dist/quadrantDiagram-AYHSOK5B-CnLDz007-Ci0DQl2T.js +1024 -0
- package/dist/radar-NHE76QYJ-Bijk-Fk9-9nAmDCMr.js +6 -0
- package/dist/requirementDiagram-UZGBJVZJ-rDaI-8Be-CSEc4S33.js +851 -0
- package/dist/sankeyDiagram-TZEHDZUN-A0YO8ixs-Zj8Z0j0n.js +810 -0
- package/dist/sequenceDiagram-WL72ISMW-BFF7TtP7-Dcofckjv.js +2519 -0
- package/dist/shared/styles.d.ts +1 -1
- package/dist/stateDiagram-FKZM4ZOC-ofFsB7HJ-BJBX12rE.js +264 -0
- package/dist/stateDiagram-v2-4FDKWEC3-CEZFbksU-BywmU88h.js +17 -0
- package/dist/timeline-definition-IT6M3QCI-5W361ZNm-MP_ufVe7.js +800 -0
- package/dist/treemap-KMMF4GRG-pGRoYcSn-BeZ7sXgP.js +6 -0
- package/dist/ui/Message.d.ts +1 -5
- package/dist/ui/MessagesList.d.ts +1 -5
- package/dist/utils/contentFiltering.d.ts +12 -0
- package/dist/xychartDiagram-PRI3JC2R-CSr0GxaP-DBgCtplP.js +1297 -0
- package/package.json +3 -3
- package/dist/ui/TypingEffect.d.ts +0 -18
package/dist/shared/styles.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ export declare let CHAT_CONSTANTS: {
|
|
|
51
51
|
/**
|
|
52
52
|
* Global CSS styles for the ChatWidget component
|
|
53
53
|
*/
|
|
54
|
-
export declare const CHAT_WIDGET_STYLES = "\n body, button, input, textarea {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n }\n \n /* Complete focus ring removal - covers all browsers and scenarios */\n textarea,\n textarea:focus,\n textarea:focus-visible,\n input,\n input:focus,\n input:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n border-color: inherit !important;\n -webkit-appearance: none !important;\n -moz-appearance: none !important;\n -webkit-tap-highlight-color: transparent !important;\n }\n \n /* Alternative: Uncomment for subtle light focus ring instead of complete removal */\n /*\n textarea:focus,\n textarea:focus-visible {\n outline: 2px solid rgba(203, 213, 225, 0.4) !important;\n outline-offset: -1px !important;\n box-shadow: 0 0 0 1px rgba(203, 213, 225, 0.2) !important;\n }\n */\n \n /* Remove webkit/safari specific styling */\n textarea::-webkit-input-placeholder,\n input::-webkit-input-placeholder {\n -webkit-appearance: none;\n }\n \n /* Ensure buttons also don't show focus rings */\n button:focus,\n button:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n }\n\n /* Enhanced animations for modern feel */\n @keyframes slideInUp {\n 0% { \n opacity: 0; \n transform: translateY(20px) scale(0.95); \n }\n 100% { \n opacity: 1; \n transform: translateY(0) scale(1); \n }\n }\n\n @keyframes slideOutDown {\n 0% { \n opacity: 1; \n transform: translateY(0) scale(1); \n }\n 100% { \n opacity: 0; \n transform: translateY(20px) scale(0.95); \n }\n }\n\n .animate-slide-in-up {\n animation: slideInUp 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n\n .animate-slide-out-down {\n animation: slideOutDown 0.2s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n\n @keyframes pulseGlow {\n 0%, 100% { \n box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.4);\n }\n 50% { \n box-shadow: 0 0 0 8px rgba(59, 130, 246, 0);\n }\n }\n\n .animate-pulse-glow {\n animation: pulseGlow 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n @keyframes messageEntry {\n 0% { \n opacity: 0; \n transform: translateY(10px) scale(0.98);\n }\n 100% { \n opacity: 1; \n transform: translateY(0) scale(1);\n }\n }\n\n .animate-message-entry {\n animation: messageEntry 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n\n @keyframes buttonHover {\n 0% { transform: translateY(0) scale(1); }\n 100% { transform: translateY(-2px) scale(1.05); }\n }\n\n .animate-button-hover:hover {\n animation: buttonHover 0.2s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n \n @keyframes fadeInOut {\n 0% { opacity: 0; transform: translateY(4px); }\n 20% { opacity: 1; transform: translateY(0); }\n 80% { opacity: 1; transform: translateY(0); }\n 100% { opacity: 0; transform: translateY(-4px); }\n }\n .animate-fade-in-out {\n animation: fadeInOut 2s ease-in-out forwards;\n }\n \n @keyframes bounce-gentle {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-8px); }\n }\n .animate-bounce-gentle {\n animation: bounce-gentle 3s ease-in-out infinite;\n animation-delay: 2s;\n }\n\n @keyframes float {\n 0%, 100% { transform: translateY(0px) rotate(0deg) scale(1); }\n 25% { transform: translateY(-8px) rotate(2deg) scale(1.02); }\n 50% { transform: translateY(-4px) rotate(-1deg) scale(1); }\n 75% { transform: translateY(-6px) rotate(1deg) scale(1.01); }\n }\n .animate-float {\n animation: float 2.5s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n \n /* Modern typing dots animation */\n @keyframes dotWave {\n 0%, 60%, 100% {\n transform: translateY(0) scale(1);\n background-color: #9ca3af;\n }\n 30% {\n transform: translateY(-10px) scale(1.1);\n background-color: #6b7280;\n }\n }\n \n .typing-dots-container {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 0;\n }\n \n .typing-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: #9ca3af;\n animation: dotWave 1.4s ease-in-out infinite;\n }\n \n .typing-dot:nth-child(1) {\n animation-delay: 0s;\n }\n \n .typing-dot:nth-child(2) {\n animation-delay: 0.2s;\n }\n \n .typing-dot:nth-child(3) {\n animation-delay: 0.4s;\n }\n\n /* Glassmorphism effects */\n .glass-effect {\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px);\n background: rgba(255, 255, 255, 0.8);\n border: 1px solid rgba(255, 255, 255, 0.3);\n }\n\n .glass-effect-dark {\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px);\n background: rgba(30, 41, 59, 0.8);\n border: 1px solid rgba(255, 255, 255, 0.1);\n }\n\n /* Custom scrollbar */\n .custom-scrollbar::-webkit-scrollbar {\n width: 6px;\n }\n\n .custom-scrollbar::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.05);\n border-radius: 3px;\n }\n\n .custom-scrollbar::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n transition: background 0.2s ease;\n }\n\n .custom-scrollbar::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n\n /* Enhanced shadows */\n .shadow-elegant {\n box-shadow: \n 0 10px 25px -5px rgba(0, 0, 0, 0.1),\n 0 8px 10px -6px rgba(0, 0, 0, 0.1),\n 0 0 0 1px rgba(255, 255, 255, 0.05);\n }\n\n .shadow-soft {\n box-shadow: \n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n }\n\n .shadow-floating {\n box-shadow: \n 0 20px 25px -5px rgba(0, 0, 0, 0.1),\n 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n }\n \n .prose {\n max-width: 100%;\n }\n \n .prose > * {\n margin-top: 0 !important;\n margin-bottom: 0.5em !important;\n }\n \n .prose p {\n margin: 0 0 0.5em 0 !important;\n padding: 0;\n line-height: 1.6;\n }\n \n .prose p:last-child {\n margin-bottom: 0 !important;\n }\n \n .prose ul,\n .prose ol {\n margin-top: 0.5em !important;\n margin-bottom: 0.5em !important;\n padding-left: 1.5em !important;\n }\n \n .prose li {\n margin-bottom: 0.25em !important;\n padding-left: 0.25em !important;\n line-height: 1.5;\n }\n \n .prose li p {\n margin: 0 !important;\n }\n \n .prose li + li {\n margin-top: 0.1em !important;\n }\n \n .prose h1, .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 {\n margin-top: 1em !important;\n margin-bottom: 0.5em !important;\n font-weight: 600;\n }\n\n /* Button enhancements */\n .btn-modern {\n position: relative;\n overflow: hidden;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .btn-modern::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0));\n opacity: 0;\n transition: opacity 0.3s ease;\n }\n\n .btn-modern:hover::before {\n opacity: 1;\n }\n\n /* Input enhancements */\n .input-modern {\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .input-modern:focus {\n transform: translateY(-1px);\n }\n ";
|
|
54
|
+
export declare const CHAT_WIDGET_STYLES = "\n body, button, input, textarea {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n }\n \n /* Complete focus ring removal - covers all browsers and scenarios */\n textarea,\n textarea:focus,\n textarea:focus-visible,\n input,\n input:focus,\n input:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n border-color: inherit !important;\n -webkit-appearance: none !important;\n -moz-appearance: none !important;\n -webkit-tap-highlight-color: transparent !important;\n }\n \n /* Alternative: Uncomment for subtle light focus ring instead of complete removal */\n /*\n textarea:focus,\n textarea:focus-visible {\n outline: 2px solid rgba(203, 213, 225, 0.4) !important;\n outline-offset: -1px !important;\n box-shadow: 0 0 0 1px rgba(203, 213, 225, 0.2) !important;\n }\n */\n \n /* Remove webkit/safari specific styling */\n textarea::-webkit-input-placeholder,\n input::-webkit-input-placeholder {\n -webkit-appearance: none;\n }\n \n /* Ensure buttons also don't show focus rings */\n button:focus,\n button:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n }\n\n /* Enhanced animations for modern feel */\n @keyframes slideInUp {\n 0% { \n opacity: 0; \n transform: translateY(20px) scale(0.95); \n }\n 100% { \n opacity: 1; \n transform: translateY(0) scale(1); \n }\n }\n\n @keyframes slideOutDown {\n 0% { \n opacity: 1; \n transform: translateY(0) scale(1); \n }\n 100% { \n opacity: 0; \n transform: translateY(20px) scale(0.95); \n }\n }\n\n .animate-slide-in-up {\n animation: slideInUp 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n\n .animate-slide-out-down {\n animation: slideOutDown 0.2s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n\n @keyframes pulseGlow {\n 0%, 100% { \n box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.4);\n }\n 50% { \n box-shadow: 0 0 0 8px rgba(59, 130, 246, 0);\n }\n }\n\n .animate-pulse-glow {\n animation: pulseGlow 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n @keyframes messageEntry {\n 0% { \n opacity: 0; \n transform: translateY(10px) scale(0.98);\n }\n 100% { \n opacity: 1; \n transform: translateY(0) scale(1);\n }\n }\n\n .animate-message-entry {\n animation: messageEntry 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n\n @keyframes buttonHover {\n 0% { transform: translateY(0) scale(1); }\n 100% { transform: translateY(-2px) scale(1.05); }\n }\n\n .animate-button-hover:hover {\n animation: buttonHover 0.2s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n \n @keyframes fadeInOut {\n 0% { opacity: 0; transform: translateY(4px); }\n 20% { opacity: 1; transform: translateY(0); }\n 80% { opacity: 1; transform: translateY(0); }\n 100% { opacity: 0; transform: translateY(-4px); }\n }\n .animate-fade-in-out {\n animation: fadeInOut 2s ease-in-out forwards;\n }\n \n @keyframes bounce-gentle {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-8px); }\n }\n .animate-bounce-gentle {\n animation: bounce-gentle 3s ease-in-out infinite;\n animation-delay: 2s;\n }\n\n @keyframes float {\n 0%, 100% { transform: translateY(0px) rotate(0deg) scale(1); }\n 25% { transform: translateY(-8px) rotate(2deg) scale(1.02); }\n 50% { transform: translateY(-4px) rotate(-1deg) scale(1); }\n 75% { transform: translateY(-6px) rotate(1deg) scale(1.01); }\n }\n .animate-float {\n animation: float 2.5s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n \n /* Modern typing dots animation */\n @keyframes dotWave {\n 0%, 60%, 100% {\n transform: translateY(0) scale(1);\n background-color: #9ca3af;\n }\n 30% {\n transform: translateY(-10px) scale(1.1);\n background-color: #6b7280;\n }\n }\n \n .typing-dots-container {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 0;\n }\n \n .typing-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: #9ca3af;\n animation: dotWave 1.4s ease-in-out infinite;\n }\n \n .typing-dot:nth-child(1) {\n animation-delay: 0s;\n }\n \n .typing-dot:nth-child(2) {\n animation-delay: 0.2s;\n }\n \n .typing-dot:nth-child(3) {\n animation-delay: 0.4s;\n }\n\n /* Glassmorphism effects */\n .glass-effect {\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px);\n background: rgba(255, 255, 255, 0.8);\n border: 1px solid rgba(255, 255, 255, 0.3);\n }\n\n .glass-effect-dark {\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px);\n background: rgba(30, 41, 59, 0.8);\n border: 1px solid rgba(255, 255, 255, 0.1);\n }\n\n /* Custom scrollbar */\n .custom-scrollbar::-webkit-scrollbar {\n width: 6px;\n }\n\n .custom-scrollbar::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.05);\n border-radius: 3px;\n }\n\n .custom-scrollbar::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n transition: background 0.2s ease;\n }\n\n .custom-scrollbar::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n\n /* Horizontal scrollbar for markdown content (tables, code blocks, etc.) */\n .markdown-content-wrapper {\n overflow-x: scroll !important; /* Use 'scroll' to always show scrollbar when content overflows */\n overflow-y: visible !important;\n -webkit-overflow-scrolling: touch;\n /* Force scrollbar to always be visible when content overflows */\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.15);\n }\n\n /* WebKit scrollbar - always visible when overflow */\n .markdown-content-wrapper::-webkit-scrollbar {\n height: 12px;\n width: 12px;\n /* Force scrollbar to always display */\n display: block;\n -webkit-appearance: none;\n }\n\n .markdown-content-wrapper::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.15);\n border-radius: 6px;\n margin: 4px;\n /* Make track always visible */\n -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.1);\n }\n\n .markdown-content-wrapper::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.4);\n border-radius: 6px;\n border: 2px solid transparent;\n background-clip: padding-box;\n transition: background 0.2s ease;\n /* Ensure thumb is always visible */\n min-height: 20px;\n }\n\n .markdown-content-wrapper::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.6);\n background-clip: padding-box;\n }\n\n .markdown-content-wrapper::-webkit-scrollbar-thumb:active {\n background: rgba(0, 0, 0, 0.7);\n }\n\n .markdown-content-wrapper::-webkit-scrollbar-corner {\n background: rgba(0, 0, 0, 0.1);\n }\n\n /* Ensure scrollbar styling is consistent across browsers */\n @supports (-webkit-appearance: none) {\n .markdown-content-wrapper::-webkit-scrollbar {\n -webkit-appearance: none;\n }\n }\n\n /* Force scrollbar to always be visible when content overflows (macOS workaround) */\n .markdown-content-wrapper.has-horizontal-scroll {\n /* Reserve space for scrollbar */\n scrollbar-gutter: stable;\n }\n\n .markdown-content-wrapper.has-horizontal-scroll::-webkit-scrollbar {\n /* Force scrollbar to always be visible */\n display: block !important;\n opacity: 1 !important;\n visibility: visible !important;\n }\n\n .markdown-content-wrapper.has-horizontal-scroll::-webkit-scrollbar-track {\n /* Make track more visible */\n background: rgba(0, 0, 0, 0.2) !important;\n opacity: 1 !important;\n visibility: visible !important;\n }\n\n .markdown-content-wrapper.has-horizontal-scroll::-webkit-scrollbar-thumb {\n /* Make thumb more visible */\n background: rgba(0, 0, 0, 0.5) !important;\n opacity: 1 !important;\n visibility: visible !important;\n }\n\n /* Enhanced shadows */\n .shadow-elegant {\n box-shadow: \n 0 10px 25px -5px rgba(0, 0, 0, 0.1),\n 0 8px 10px -6px rgba(0, 0, 0, 0.1),\n 0 0 0 1px rgba(255, 255, 255, 0.05);\n }\n\n .shadow-soft {\n box-shadow: \n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n }\n\n .shadow-floating {\n box-shadow: \n 0 20px 25px -5px rgba(0, 0, 0, 0.1),\n 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n }\n \n .prose {\n max-width: 100%;\n }\n \n .prose > * {\n margin-top: 0 !important;\n margin-bottom: 0.5em !important;\n }\n \n .prose p {\n margin: 0 0 0.5em 0 !important;\n padding: 0;\n line-height: 1.6;\n }\n \n .prose p:last-child {\n margin-bottom: 0 !important;\n }\n \n .prose ul,\n .prose ol {\n margin-top: 0.5em !important;\n margin-bottom: 0.5em !important;\n padding-left: 1.5em !important;\n }\n \n .prose li {\n margin-bottom: 0.25em !important;\n padding-left: 0.25em !important;\n line-height: 1.5;\n }\n \n .prose li p {\n margin: 0 !important;\n }\n \n .prose li + li {\n margin-top: 0.1em !important;\n }\n \n .prose h1, .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 {\n margin-top: 1em !important;\n margin-bottom: 0.5em !important;\n font-weight: 600;\n }\n\n /* Button enhancements */\n .btn-modern {\n position: relative;\n overflow: hidden;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .btn-modern::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0));\n opacity: 0;\n transition: opacity 0.3s ease;\n }\n\n .btn-modern:hover::before {\n opacity: 1;\n }\n\n /* Input enhancements */\n .input-modern {\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .input-modern:focus {\n transform: translateY(-1px);\n }\n ";
|
|
55
55
|
/**
|
|
56
56
|
* Helper functions for responsive window dimensions
|
|
57
57
|
*/
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { U as G, B as A, M } from "./chunk-DI55MBZ5-BY2XXvZz-DbAvz3Pq.js";
|
|
2
|
+
import { x as y, p as t, f as v, a as k, G as U, n as H, av as O, aC as P, az as R, v as C } from "./index-B5s_uaP2.js";
|
|
3
|
+
import { L as I } from "./graph-BfwqPHx6-DErF9dBN.js";
|
|
4
|
+
import { o as $ } from "./layout-CSfkE668-BjigbqJL.js";
|
|
5
|
+
typeof window < "u" && (window.global = window);
|
|
6
|
+
var W = /* @__PURE__ */ y((e) => e.append("circle").attr("class", "start-state").attr("r", t().state.sizeUnit).attr("cx", t().state.padding + t().state.sizeUnit).attr("cy", t().state.padding + t().state.sizeUnit), "drawStartState"), j = /* @__PURE__ */ y((e) => e.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", t().state.textHeight).attr("class", "divider").attr("x2", t().state.textHeight * 2).attr("y1", 0).attr("y2", 0), "drawDivider"), F = /* @__PURE__ */ y((e, n) => {
|
|
7
|
+
const g = e.append("text").attr("x", 2 * t().state.padding).attr("y", t().state.textHeight + 2 * t().state.padding).attr("font-size", t().state.fontSize).attr("class", "state-title").text(n.id), s = g.node().getBBox();
|
|
8
|
+
return e.insert("rect", ":first-child").attr("x", t().state.padding).attr("y", t().state.padding).attr("width", s.width + 2 * t().state.padding).attr("height", s.height + 2 * t().state.padding).attr("rx", t().state.radius), g;
|
|
9
|
+
}, "drawSimpleState"), J = /* @__PURE__ */ y((e, n) => {
|
|
10
|
+
const g = /* @__PURE__ */ y(function(o, u, b) {
|
|
11
|
+
const m = o.append("tspan").attr("x", 2 * t().state.padding).text(u);
|
|
12
|
+
b || m.attr("dy", t().state.textHeight);
|
|
13
|
+
}, "addTspan"), s = e.append("text").attr("x", 2 * t().state.padding).attr("y", t().state.textHeight + 1.3 * t().state.padding).attr("font-size", t().state.fontSize).attr("class", "state-title").text(n.descriptions[0]).node().getBBox(), d = s.height, c = e.append("text").attr("x", t().state.padding).attr(
|
|
14
|
+
"y",
|
|
15
|
+
d + t().state.padding * 0.4 + t().state.dividerMargin + t().state.textHeight
|
|
16
|
+
).attr("class", "state-description");
|
|
17
|
+
let l = !0, a = !0;
|
|
18
|
+
n.descriptions.forEach(function(o) {
|
|
19
|
+
l || (g(c, o, a), a = !1), l = !1;
|
|
20
|
+
});
|
|
21
|
+
const r = e.append("line").attr("x1", t().state.padding).attr("y1", t().state.padding + d + t().state.dividerMargin / 2).attr("y2", t().state.padding + d + t().state.dividerMargin / 2).attr("class", "descr-divider"), x = c.node().getBBox(), h = Math.max(x.width, s.width);
|
|
22
|
+
return r.attr("x2", h + 3 * t().state.padding), e.insert("rect", ":first-child").attr("x", t().state.padding).attr("y", t().state.padding).attr("width", h + 2 * t().state.padding).attr("height", x.height + d + 2 * t().state.padding).attr("rx", t().state.radius), e;
|
|
23
|
+
}, "drawDescrState"), Y = /* @__PURE__ */ y((e, n, g) => {
|
|
24
|
+
const s = t().state.padding, d = 2 * t().state.padding, c = e.node().getBBox(), l = c.width, a = c.x, r = e.append("text").attr("x", 0).attr("y", t().state.titleShift).attr("font-size", t().state.fontSize).attr("class", "state-title").text(n.id), x = r.node().getBBox().width + d;
|
|
25
|
+
let h = Math.max(x, l);
|
|
26
|
+
h === l && (h = h + d);
|
|
27
|
+
let o;
|
|
28
|
+
const u = e.node().getBBox();
|
|
29
|
+
n.doc, o = a - s, x > l && (o = (l - h) / 2 + s), Math.abs(a - u.x) < s && x > l && (o = a - (x - l) / 2);
|
|
30
|
+
const b = 1 - t().state.textHeight;
|
|
31
|
+
return e.insert("rect", ":first-child").attr("x", o).attr("y", b).attr("class", g ? "alt-composit" : "composit").attr("width", h).attr(
|
|
32
|
+
"height",
|
|
33
|
+
u.height + t().state.textHeight + t().state.titleShift + 1
|
|
34
|
+
).attr("rx", "0"), r.attr("x", o + s), x <= l && r.attr("x", a + (h - d) / 2 - x / 2 + s), e.insert("rect", ":first-child").attr("x", o).attr(
|
|
35
|
+
"y",
|
|
36
|
+
t().state.titleShift - t().state.textHeight - t().state.padding
|
|
37
|
+
).attr("width", h).attr("height", t().state.textHeight * 3).attr("rx", t().state.radius), e.insert("rect", ":first-child").attr("x", o).attr(
|
|
38
|
+
"y",
|
|
39
|
+
t().state.titleShift - t().state.textHeight - t().state.padding
|
|
40
|
+
).attr("width", h).attr("height", u.height + 3 + 2 * t().state.textHeight).attr("rx", t().state.radius), e;
|
|
41
|
+
}, "addTitleAndBox"), X = /* @__PURE__ */ y((e) => (e.append("circle").attr("class", "end-state-outer").attr("r", t().state.sizeUnit + t().state.miniPadding).attr(
|
|
42
|
+
"cx",
|
|
43
|
+
t().state.padding + t().state.sizeUnit + t().state.miniPadding
|
|
44
|
+
).attr(
|
|
45
|
+
"cy",
|
|
46
|
+
t().state.padding + t().state.sizeUnit + t().state.miniPadding
|
|
47
|
+
), e.append("circle").attr("class", "end-state-inner").attr("r", t().state.sizeUnit).attr("cx", t().state.padding + t().state.sizeUnit + 2).attr("cy", t().state.padding + t().state.sizeUnit + 2)), "drawEndState"), q = /* @__PURE__ */ y((e, n) => {
|
|
48
|
+
let g = t().state.forkWidth, s = t().state.forkHeight;
|
|
49
|
+
if (n.parentId) {
|
|
50
|
+
let d = g;
|
|
51
|
+
g = s, s = d;
|
|
52
|
+
}
|
|
53
|
+
return e.append("rect").style("stroke", "black").style("fill", "black").attr("width", g).attr("height", s).attr("x", t().state.padding).attr("y", t().state.padding);
|
|
54
|
+
}, "drawForkJoinState"), Z = /* @__PURE__ */ y((e, n, g, s) => {
|
|
55
|
+
let d = 0;
|
|
56
|
+
const c = s.append("text");
|
|
57
|
+
c.style("text-anchor", "start"), c.attr("class", "noteText");
|
|
58
|
+
let l = e.replace(/\r\n/g, "<br/>");
|
|
59
|
+
l = l.replace(/\n/g, "<br/>");
|
|
60
|
+
const a = l.split(H.lineBreakRegex);
|
|
61
|
+
let r = 1.25 * t().state.noteMargin;
|
|
62
|
+
for (const x of a) {
|
|
63
|
+
const h = x.trim();
|
|
64
|
+
if (h.length > 0) {
|
|
65
|
+
const o = c.append("tspan");
|
|
66
|
+
if (o.text(h), r === 0) {
|
|
67
|
+
const u = o.node().getBBox();
|
|
68
|
+
r += u.height;
|
|
69
|
+
}
|
|
70
|
+
d += r, o.attr("x", n + t().state.noteMargin), o.attr("y", g + d + 1.25 * t().state.noteMargin);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return { textWidth: c.node().getBBox().width, textHeight: d };
|
|
74
|
+
}, "_drawLongText"), _ = /* @__PURE__ */ y((e, n) => {
|
|
75
|
+
n.attr("class", "state-note");
|
|
76
|
+
const g = n.append("rect").attr("x", 0).attr("y", t().state.padding), s = n.append("g"), { textWidth: d, textHeight: c } = Z(e, 0, 0, s);
|
|
77
|
+
return g.attr("height", c + 2 * t().state.noteMargin), g.attr("width", d + t().state.noteMargin * 2), g;
|
|
78
|
+
}, "drawNote"), T = /* @__PURE__ */ y(function(e, n) {
|
|
79
|
+
const g = n.id, s = {
|
|
80
|
+
id: g,
|
|
81
|
+
label: n.id,
|
|
82
|
+
width: 0,
|
|
83
|
+
height: 0
|
|
84
|
+
}, d = e.append("g").attr("id", g).attr("class", "stateGroup");
|
|
85
|
+
n.type === "start" && W(d), n.type === "end" && X(d), (n.type === "fork" || n.type === "join") && q(d, n), n.type === "note" && _(n.note.text, d), n.type === "divider" && j(d), n.type === "default" && n.descriptions.length === 0 && F(d, n), n.type === "default" && n.descriptions.length > 0 && J(d, n);
|
|
86
|
+
const c = d.node().getBBox();
|
|
87
|
+
return s.width = c.width + 2 * t().state.padding, s.height = c.height + 2 * t().state.padding, s;
|
|
88
|
+
}, "drawState"), L = 0, K = /* @__PURE__ */ y(function(e, n, g) {
|
|
89
|
+
const s = /* @__PURE__ */ y(function(r) {
|
|
90
|
+
switch (r) {
|
|
91
|
+
case M.relationType.AGGREGATION:
|
|
92
|
+
return "aggregation";
|
|
93
|
+
case M.relationType.EXTENSION:
|
|
94
|
+
return "extension";
|
|
95
|
+
case M.relationType.COMPOSITION:
|
|
96
|
+
return "composition";
|
|
97
|
+
case M.relationType.DEPENDENCY:
|
|
98
|
+
return "dependency";
|
|
99
|
+
}
|
|
100
|
+
}, "getRelationType");
|
|
101
|
+
n.points = n.points.filter((r) => !Number.isNaN(r.y));
|
|
102
|
+
const d = n.points, c = O().x(function(r) {
|
|
103
|
+
return r.x;
|
|
104
|
+
}).y(function(r) {
|
|
105
|
+
return r.y;
|
|
106
|
+
}).curve(P), l = e.append("path").attr("d", c(d)).attr("id", "edge" + L).attr("class", "transition");
|
|
107
|
+
let a = "";
|
|
108
|
+
if (t().state.arrowMarkerAbsolute && (a = R(!0)), l.attr(
|
|
109
|
+
"marker-end",
|
|
110
|
+
"url(" + a + "#" + s(M.relationType.DEPENDENCY) + "End)"
|
|
111
|
+
), g.title !== void 0) {
|
|
112
|
+
const r = e.append("g").attr("class", "stateLabel"), { x, y: h } = C.calcLabelPosition(n.points), o = H.getRows(g.title);
|
|
113
|
+
let u = 0;
|
|
114
|
+
const b = [];
|
|
115
|
+
let m = 0, S = 0;
|
|
116
|
+
for (let f = 0; f <= o.length; f++) {
|
|
117
|
+
const p = r.append("text").attr("text-anchor", "middle").text(o[f]).attr("x", x).attr("y", h + u), w = p.node().getBBox();
|
|
118
|
+
m = Math.max(m, w.width), S = Math.min(S, w.x), k.info(w.x, x, h + u), u === 0 && (u = p.node().getBBox().height, k.info("Title height", u, h)), b.push(p);
|
|
119
|
+
}
|
|
120
|
+
let N = u * o.length;
|
|
121
|
+
if (o.length > 1) {
|
|
122
|
+
const f = (o.length - 1) * u * 0.5;
|
|
123
|
+
b.forEach((p, w) => p.attr("y", h + w * u - f)), N = u * o.length;
|
|
124
|
+
}
|
|
125
|
+
const i = r.node().getBBox();
|
|
126
|
+
r.insert("rect", ":first-child").attr("class", "box").attr("x", x - m / 2 - t().state.padding / 2).attr("y", h - N / 2 - t().state.padding / 2 - 3.5).attr("width", m + t().state.padding).attr("height", N + t().state.padding), k.info(i);
|
|
127
|
+
}
|
|
128
|
+
L++;
|
|
129
|
+
}, "drawEdge"), B, z = {}, Q = /* @__PURE__ */ y(function() {
|
|
130
|
+
}, "setConf"), V = /* @__PURE__ */ y(function(e) {
|
|
131
|
+
e.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z");
|
|
132
|
+
}, "insertMarkers"), tt = /* @__PURE__ */ y(function(e, n, g, s) {
|
|
133
|
+
B = t().state;
|
|
134
|
+
const d = t().securityLevel;
|
|
135
|
+
let c;
|
|
136
|
+
d === "sandbox" && (c = v("#i" + n));
|
|
137
|
+
const l = d === "sandbox" ? v(c.nodes()[0].contentDocument.body) : v("body"), a = d === "sandbox" ? c.nodes()[0].contentDocument : document;
|
|
138
|
+
k.debug("Rendering diagram " + e);
|
|
139
|
+
const r = l.select(`[id='${n}']`);
|
|
140
|
+
V(r);
|
|
141
|
+
const x = s.db.getRootDoc();
|
|
142
|
+
D(x, r, void 0, !1, l, a, s);
|
|
143
|
+
const h = B.padding, o = r.node().getBBox(), u = o.width + h * 2, b = o.height + h * 2, m = u * 1.75;
|
|
144
|
+
U(r, b, m, B.useMaxWidth), r.attr(
|
|
145
|
+
"viewBox",
|
|
146
|
+
`${o.x - B.padding} ${o.y - B.padding} ` + u + " " + b
|
|
147
|
+
);
|
|
148
|
+
}, "draw"), et = /* @__PURE__ */ y((e) => e ? e.length * B.fontSizeFactor : 1, "getLabelWidth"), D = /* @__PURE__ */ y((e, n, g, s, d, c, l) => {
|
|
149
|
+
const a = new I({
|
|
150
|
+
compound: !0,
|
|
151
|
+
multigraph: !0
|
|
152
|
+
});
|
|
153
|
+
let r, x = !0;
|
|
154
|
+
for (r = 0; r < e.length; r++)
|
|
155
|
+
if (e[r].stmt === "relation") {
|
|
156
|
+
x = !1;
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
g ? a.setGraph({
|
|
160
|
+
rankdir: "LR",
|
|
161
|
+
multigraph: !0,
|
|
162
|
+
compound: !0,
|
|
163
|
+
// acyclicer: 'greedy',
|
|
164
|
+
ranker: "tight-tree",
|
|
165
|
+
ranksep: x ? 1 : B.edgeLengthFactor,
|
|
166
|
+
nodeSep: x ? 1 : 50,
|
|
167
|
+
isMultiGraph: !0
|
|
168
|
+
// ranksep: 5,
|
|
169
|
+
// nodesep: 1
|
|
170
|
+
}) : a.setGraph({
|
|
171
|
+
rankdir: "TB",
|
|
172
|
+
multigraph: !0,
|
|
173
|
+
compound: !0,
|
|
174
|
+
// isCompound: true,
|
|
175
|
+
// acyclicer: 'greedy',
|
|
176
|
+
// ranker: 'longest-path'
|
|
177
|
+
ranksep: x ? 1 : B.edgeLengthFactor,
|
|
178
|
+
nodeSep: x ? 1 : 50,
|
|
179
|
+
ranker: "tight-tree",
|
|
180
|
+
// ranker: 'network-simplex'
|
|
181
|
+
isMultiGraph: !0
|
|
182
|
+
}), a.setDefaultEdgeLabel(function() {
|
|
183
|
+
return {};
|
|
184
|
+
});
|
|
185
|
+
const h = l.db.getStates(), o = l.db.getRelations(), u = Object.keys(h);
|
|
186
|
+
for (const i of u) {
|
|
187
|
+
const f = h[i];
|
|
188
|
+
g && (f.parentId = g);
|
|
189
|
+
let p;
|
|
190
|
+
if (f.doc) {
|
|
191
|
+
let w = n.append("g").attr("id", f.id).attr("class", "stateGroup");
|
|
192
|
+
p = D(f.doc, w, f.id, !s, d, c, l);
|
|
193
|
+
{
|
|
194
|
+
w = Y(w, f, s);
|
|
195
|
+
let E = w.node().getBBox();
|
|
196
|
+
p.width = E.width, p.height = E.height + B.padding / 2, z[f.id] = { y: B.compositTitleSize };
|
|
197
|
+
}
|
|
198
|
+
} else
|
|
199
|
+
p = T(n, f, a);
|
|
200
|
+
if (f.note) {
|
|
201
|
+
const w = {
|
|
202
|
+
descriptions: [],
|
|
203
|
+
id: f.id + "-note",
|
|
204
|
+
note: f.note,
|
|
205
|
+
type: "note"
|
|
206
|
+
}, E = T(n, w, a);
|
|
207
|
+
f.note.position === "left of" ? (a.setNode(p.id + "-note", E), a.setNode(p.id, p)) : (a.setNode(p.id, p), a.setNode(p.id + "-note", E)), a.setParent(p.id, p.id + "-group"), a.setParent(p.id + "-note", p.id + "-group");
|
|
208
|
+
} else
|
|
209
|
+
a.setNode(p.id, p);
|
|
210
|
+
}
|
|
211
|
+
k.debug("Count=", a.nodeCount(), a);
|
|
212
|
+
let b = 0;
|
|
213
|
+
o.forEach(function(i) {
|
|
214
|
+
b++, k.debug("Setting edge", i), a.setEdge(
|
|
215
|
+
i.id1,
|
|
216
|
+
i.id2,
|
|
217
|
+
{
|
|
218
|
+
relation: i,
|
|
219
|
+
width: et(i.title),
|
|
220
|
+
height: B.labelHeight * H.getRows(i.title).length,
|
|
221
|
+
labelpos: "c"
|
|
222
|
+
},
|
|
223
|
+
"id" + b
|
|
224
|
+
);
|
|
225
|
+
}), $(a), k.debug("Graph after layout", a.nodes());
|
|
226
|
+
const m = n.node();
|
|
227
|
+
a.nodes().forEach(function(i) {
|
|
228
|
+
i !== void 0 && a.node(i) !== void 0 ? (k.warn("Node " + i + ": " + JSON.stringify(a.node(i))), d.select("#" + m.id + " #" + i).attr(
|
|
229
|
+
"transform",
|
|
230
|
+
"translate(" + (a.node(i).x - a.node(i).width / 2) + "," + (a.node(i).y + (z[i] ? z[i].y : 0) - a.node(i).height / 2) + " )"
|
|
231
|
+
), d.select("#" + m.id + " #" + i).attr("data-x-shift", a.node(i).x - a.node(i).width / 2), c.querySelectorAll("#" + m.id + " #" + i + " .divider").forEach((f) => {
|
|
232
|
+
const p = f.parentElement;
|
|
233
|
+
let w = 0, E = 0;
|
|
234
|
+
p && (p.parentElement && (w = p.parentElement.getBBox().width), E = parseInt(p.getAttribute("data-x-shift"), 10), Number.isNaN(E) && (E = 0)), f.setAttribute("x1", 0 - E + 8), f.setAttribute("x2", w - E - 8);
|
|
235
|
+
})) : k.debug("No Node " + i + ": " + JSON.stringify(a.node(i)));
|
|
236
|
+
});
|
|
237
|
+
let S = m.getBBox();
|
|
238
|
+
a.edges().forEach(function(i) {
|
|
239
|
+
i !== void 0 && a.edge(i) !== void 0 && (k.debug("Edge " + i.v + " -> " + i.w + ": " + JSON.stringify(a.edge(i))), K(n, a.edge(i), a.edge(i).relation));
|
|
240
|
+
}), S = m.getBBox();
|
|
241
|
+
const N = {
|
|
242
|
+
id: g || "root",
|
|
243
|
+
label: g || "root",
|
|
244
|
+
width: 0,
|
|
245
|
+
height: 0
|
|
246
|
+
};
|
|
247
|
+
return N.width = S.width + 2 * B.padding, N.height = S.height + 2 * B.padding, k.debug("Doc rendered", N, a), N;
|
|
248
|
+
}, "renderDoc"), at = {
|
|
249
|
+
setConf: Q,
|
|
250
|
+
draw: tt
|
|
251
|
+
}, st = {
|
|
252
|
+
parser: A,
|
|
253
|
+
get db() {
|
|
254
|
+
return new M(1);
|
|
255
|
+
},
|
|
256
|
+
renderer: at,
|
|
257
|
+
styles: G,
|
|
258
|
+
init: /* @__PURE__ */ y((e) => {
|
|
259
|
+
e.state || (e.state = {}), e.state.arrowMarkerAbsolute = e.arrowMarkerAbsolute;
|
|
260
|
+
}, "init")
|
|
261
|
+
};
|
|
262
|
+
export {
|
|
263
|
+
st as diagram
|
|
264
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { U as e, V as a, B as t, M as o } from "./chunk-DI55MBZ5-BY2XXvZz-DbAvz3Pq.js";
|
|
2
|
+
import { x as s } from "./index-B5s_uaP2.js";
|
|
3
|
+
typeof window < "u" && (window.global = window);
|
|
4
|
+
var w = {
|
|
5
|
+
parser: t,
|
|
6
|
+
get db() {
|
|
7
|
+
return new o(2);
|
|
8
|
+
},
|
|
9
|
+
renderer: a,
|
|
10
|
+
styles: e,
|
|
11
|
+
init: /* @__PURE__ */ s((r) => {
|
|
12
|
+
r.state || (r.state = {}), r.state.arrowMarkerAbsolute = r.arrowMarkerAbsolute;
|
|
13
|
+
}, "init")
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
w as diagram
|
|
17
|
+
};
|