2025-06-26 15:51:05 +00:00
import { html , css , cssManager } from '@design.estate/dees-element' ;
2025-12-05 10:19:37 +00:00
import { DeesModal } from '../dees-modal/dees-modal.js' ;
2023-09-13 01:37:02 +02:00
export const demoFunc = ( ) = > html `
2025-06-26 15:51:05 +00:00
<style>
${ css `
.demo-container {
display: flex;
flex-direction: column;
gap: 24px;
padding: 24px;
max-width: 1200px;
margin: 0 auto;
}
.demo-section {
background: ${ cssManager . bdTheme ( '#f8f9fa' , '#1a1a1a' ) } ;
border-radius: 8px;
padding: 24px;
border: 1px solid ${ cssManager . bdTheme ( '#e0e0e0' , '#333' ) } ;
}
.demo-section h3 {
margin-top: 0;
margin-bottom: 16px;
color: ${ cssManager . bdTheme ( '#333' , '#fff' ) } ;
}
.demo-section p {
color: ${ cssManager . bdTheme ( '#666' , '#999' ) } ;
margin-bottom: 16px;
}
.button-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 16px;
}
` }
</style>
<div class="demo-container">
2025-06-26 15:57:27 +00:00
<div class="demo-section">
<h3>Header Buttons</h3>
<p>Modals can have optional header buttons for help and closing.</p>
<div class="button-grid">
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'With Help Button' ,
showHelpButton : true ,
onHelp : async ( ) = > {
const helpModal = await DeesModal . createAndShow ( {
heading : 'Help' ,
width : 'small' ,
showCloseButton : true ,
showHelpButton : false ,
content : html `
<p>This is the help content for the modal.</p>
<p>You can provide context-specific help here.</p>
` ,
menuOptions : [ {
name : 'Got it' ,
action : async ( modal ) = > modal . destroy ( )
} ],
});
},
content: html `
< p > This modal has a help button in the header . Click it to see help content . < / p >
< p > The close button is also visible by default . < / p >
` ,
menuOptions: [{
name: 'OK',
action: async (modal) => modal.destroy()
}],
});
}}>With Help Button</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'No Close Button' ,
showCloseButton : false ,
content : html `
<p>This modal has no close button in the header.</p>
<p>You must use the action buttons or click outside to close it.</p>
` ,
menuOptions : [ {
name : 'Close' ,
action : async ( modal ) = > modal . destroy ( )
} ],
});
}}>No Close Button</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'Both Buttons' ,
showHelpButton : true ,
showCloseButton : true ,
onHelp : ( ) = > alert ( 'Help clicked!' ) ,
content : html `
<p>This modal has both help and close buttons.</p>
` ,
menuOptions : [ {
name : 'Done' ,
action : async ( modal ) = > modal . destroy ( )
} ],
});
}}>Both Buttons</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'Clean Header' ,
showCloseButton : false ,
showHelpButton : false ,
content : html `
<p>This modal has a clean header with no buttons.</p>
` ,
menuOptions : [ {
name : 'Close' ,
action : async ( modal ) = > modal . destroy ( )
} ],
});
}}>Clean Header</dees-button>
</div>
</div>
2025-06-26 15:51:05 +00:00
<div class="demo-section">
<h3>Modal Width Variations</h3>
<p>Modals can have different widths: small, medium, large, fullscreen, or custom pixel values.</p>
<div class="button-grid">
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'Small Modal' ,
width : 'small' ,
content : html `
<p>This is a small modal with a width of 380px. Perfect for simple confirmations or brief messages.</p>
` ,
menuOptions : [ {
name : 'Cancel' ,
action : async ( modal ) = > modal . destroy ( )
} , {
name: 'OK',
action: async (modal) => modal.destroy()
}],
});
}}>Small Modal</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'Medium Modal (Default)' ,
width : 'medium' ,
content : html `
<dees-form>
<dees-input-text .label= ${ 'Username' } ></dees-input-text>
<dees-input-text .label= ${ 'Email' } .inputType= ${ 'email' } ></dees-input-text>
<dees-input-text .label= ${ 'Password' } .inputType= ${ 'password' } ></dees-input-text>
</dees-form>
` ,
menuOptions : [ {
name : 'Cancel' ,
action : async ( modal ) = > modal . destroy ( )
} , {
name: 'Sign Up',
action: async (modal) => modal.destroy()
}],
});
}}>Medium Modal</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'Large Modal' ,
width : 'large' ,
content : html `
<h4>Wide Content Area</h4>
<p>This large modal is 800px wide and perfect for displaying more complex content like forms with multiple columns, tables, or detailed information.</p>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 16px;">
<dees-input-text .label= ${ 'First Name' } ></dees-input-text>
<dees-input-text .label= ${ 'Last Name' } ></dees-input-text>
<dees-input-text .label= ${ 'Company' } ></dees-input-text>
<dees-input-text .label= ${ 'Position' } ></dees-input-text>
</div>
` ,
menuOptions : [ {
name : 'Cancel' ,
action : async ( modal ) = > modal . destroy ( )
} , {
name: 'Save',
action: async (modal) => modal.destroy()
}],
});
}}>Large Modal</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
2025-06-26 15:57:27 +00:00
heading : 'Fullscreen Editor' ,
2025-06-26 15:51:05 +00:00
width : 'fullscreen' ,
2025-06-26 15:57:27 +00:00
showHelpButton : true ,
onHelp : async ( ) = > {
alert ( 'In a real app, this would show editor documentation' ) ;
} ,
2025-06-26 15:51:05 +00:00
content: html `
2025-06-26 15:57:27 +00:00
< h4 > Fullscreen Experience with Header Controls < / h4 >
< p > This modal takes up almost the entire viewport with a 20 px margin on all sides . The header buttons are particularly useful in fullscreen mode . < / p >
2025-06-26 15:51:05 +00:00
< p > The content area can be as tall as needed and will scroll if necessary . < / p >
< div style = "height: 200px; background: ${cssManager.bdTheme('#f0f0f0', '#2a2a2a')}; border-radius: 8px; display: flex; align-items: center; justify-content: center; margin-top: 16px;" >
< span style = "color: ${cssManager.bdTheme('#999', '#666')}" > Large content area < / span >
< / div >
` ,
menuOptions: [{
2025-06-26 15:57:27 +00:00
name: 'Save',
action: async (modal) => modal.destroy()
}, {
name: 'Cancel',
2025-06-26 15:51:05 +00:00
action: async (modal) => modal.destroy()
}],
});
}}>Fullscreen Modal</dees-button>
</div>
</div>
<div class="demo-section">
<h3>Custom Width & Constraints</h3>
<p>You can also set custom pixel widths and min/max constraints.</p>
<div class="button-grid">
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'Custom Width (700px)' ,
width : 700 ,
content : html `
<p>This modal has a custom width of exactly 700 pixels.</p>
` ,
menuOptions : [ {
name : 'Close' ,
action : async ( modal ) = > modal . destroy ( )
} ],
});
}}>Custom 700px</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'With Max Width' ,
width : 'large' ,
maxWidth : 600 ,
content : html `
<p>This modal is set to 'large' but constrained by a maxWidth of 600px.</p>
` ,
menuOptions : [ {
name : 'Got it' ,
action : async ( modal ) = > modal . destroy ( )
} ],
});
}}>Max Width 600px</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'With Min Width' ,
width : 300 ,
minWidth : 400 ,
content : html `
<p>This modal width is set to 300px but has a minWidth of 400px, so it will be 400px wide.</p>
` ,
menuOptions : [ {
name : 'OK' ,
action : async ( modal ) = > modal . destroy ( )
} ],
});
}}>Min Width 400px</dees-button>
</div>
</div>
<div class="demo-section">
<h3>Button Variations</h3>
<p>Modals can have different button configurations with proper spacing.</p>
<div class="button-grid">
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'Multiple Actions' ,
content : html `
<p>This modal demonstrates multiple buttons with proper spacing between them.</p>
` ,
menuOptions : [ {
name : 'Delete' ,
action : async ( modal ) = > modal . destroy ( )
} , {
name: 'Cancel',
action: async (modal) => modal.destroy()
}, {
name: 'Save Changes',
action: async (modal) => modal.destroy()
}],
});
}}>Three Buttons</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'Single Action' ,
content : html `
<p>Sometimes you just need one button.</p>
` ,
menuOptions : [ {
name : 'Acknowledge' ,
action : async ( modal ) = > modal . destroy ( )
} ],
});
}}>Single Button</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'No Actions' ,
content : html `
2025-06-26 15:57:27 +00:00
<p>This modal has no bottom buttons. Use the X button or click outside to close.</p>
2025-06-26 15:51:05 +00:00
<p style="margin-top: 16px; color: ${ cssManager . bdTheme ( '#666' , '#999' ) } ;">This is useful for informational modals that don't require user action.</p>
` ,
menuOptions : [ ] ,
} );
}}>No Buttons</dees-button>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'Long Button Labels' ,
content : html `
<p>Testing button layout with longer labels.</p>
` ,
menuOptions : [ {
name : 'Discard All Changes' ,
action : async ( modal ) = > modal . destroy ( )
} , {
name: 'Save and Continue Editing',
action: async (modal) => modal.destroy()
}],
});
}}>Long Labels</dees-button>
</div>
</div>
<div class="demo-section">
<h3>Responsive Behavior</h3>
<p>All modals automatically become full-width on mobile devices (< 768px viewport width) for better usability.</p>
<dees-button @click= ${ ( ) = > {
DeesModal . createAndShow ( {
heading : 'Responsive Modal' ,
width : 'large' ,
2025-06-26 15:57:27 +00:00
showHelpButton : true ,
onHelp : ( ) = > console . log ( 'Help requested for responsive modal' ) ,
2025-06-26 15:51:05 +00:00
content : html `
<p>Resize your browser window to see how this modal adapts. On mobile viewports, it will automatically take the full width minus margins.</p>
2025-06-26 15:57:27 +00:00
<p>The header buttons remain accessible at all viewport sizes.</p>
2025-06-26 15:51:05 +00:00
` ,
menuOptions : [ {
name : 'Close' ,
action : async ( modal ) = > modal . destroy ( )
} ],
});
}}>Test Responsive</dees-button>
</div>
</div>
2023-09-13 01:37:02 +02:00
`