@@ -117,63 +117,139 @@ const handleToggle = () => {
117117 drawer ?. toggle ( ) ;
118118} ;
119119
120- const Template = ( { open = false , position } : IgcNavDrawerArgs ) => {
121- return html `
122- < style >
123- .main {
124- display : flex;
125- margin : -1rem ;
126- height : 100vh ;
127- overflow : hidden;
120+ const commonStyles = html `
121+ < style >
122+ .main {
123+ display : grid;
124+ grid-template-columns : auto 1fr ;
125+ justify-content : center;
126+ height : 100vh ;
127+ overflow : hidden;
128+ margin : -16px ;
129+ }
130+
131+ .content {
132+ display : grid;
133+ grid-template-rows : auto 1fr ;
134+ grid-template-columns : auto;
135+ gap : 8px ;
136+ height : fit-content;
137+ align-items : center;
138+ justify-self : center;
139+ padding : 16px ;
140+
141+ p {
142+ grid-column : 1 / -1 ;
128143 }
129-
130- .content {
131- padding-inline-start : 20px ;
132- font-family : var (--ig-font-family );
133- }
134- </ style >
144+ }
145+
146+ .relative {
147+ grid-template-columns : auto auto auto;
148+ text-align : left;
149+ justify-self : start;
150+ }
151+ </ style >
152+ ` ;
153+
154+ const createDrawerContent = ( headerText : string , itemCount = 15 ) => html `
155+ < igc-nav-drawer-header-item > ${ headerText } </ igc-nav-drawer-header-item >
156+
157+ ${ Array . from ( range ( itemCount ) ) . map (
158+ ( i ) => html `
159+ < igc-nav-drawer-item >
160+ < igc-icon slot ="icon " name ="home "> </ igc-icon >
161+ < span slot ="content "> Navbar item ${ i + 1 } </ span >
162+ </ igc-nav-drawer-item >
163+ `
164+ ) }
165+
166+ < igc-nav-drawer-item disabled >
167+ < igc-icon slot ="icon " name ="home "> </ igc-icon >
168+ < span slot ="content "> Disabled item</ span >
169+ </ igc-nav-drawer-item >
170+ ` ;
171+
172+ // Create a function for mini slot content
173+ const createMiniContent = ( ) => html `
174+ < div slot ="mini ">
175+ < igc-nav-drawer-item >
176+ < igc-icon slot ="icon " name ="search "> </ igc-icon >
177+ </ igc-nav-drawer-item >
178+
179+ < igc-nav-drawer-item >
180+ < igc-icon slot ="icon " name ="home "> </ igc-icon >
181+ </ igc-nav-drawer-item >
182+
183+ < igc-nav-drawer-item disabled >
184+ < igc-icon slot ="icon " name ="home "> </ igc-icon >
185+ </ igc-nav-drawer-item >
186+ </ div >
187+ ` ;
188+
189+ // Create a function for control buttons
190+ const createControlButtons = ( position : string ) => html `
191+ ${ position === 'relative'
192+ ? html `
193+ < igc-button @click ="${ handleToggle } "> Toggle</ igc-button >
194+ < igc-button variant ="outlined " @click ="${ handleClose } "
195+ > Close</ igc-button
196+ >
197+ `
198+ : '' }
199+
200+ < igc-button variant ="outlined " @click ="${ handleOpen } "> Open</ igc-button >
201+ ` ;
202+
203+ // Main template function
204+ const createTemplate = ( options : {
205+ headerText ?: string ;
206+ itemCount ?: number ;
207+ includeMini ?: boolean ;
208+ contentText ?: string ;
209+ } ) => {
210+ return ( { open = false , position } : IgcNavDrawerArgs ) => html `
211+ ${ commonStyles }
135212
136213 < div class ="ig-scrollbar main ">
137214 < igc-nav-drawer
138215 .open =${ open }
139216 .position =${ position }
140217 @click="${ handleClick } "
141218 >
142- < igc-nav-drawer-header-item > Sample Drawer</ igc-nav-drawer-header-item >
143-
144- ${ Array . from ( range ( 15 ) ) . map (
145- ( i ) => html `
146- < igc-nav-drawer-item >
147- < igc-icon slot ="icon " name ="home "> </ igc-icon >
148- < span slot ="content "> Navbar item ${ i + 1 } </ span >
149- </ igc-nav-drawer-item >
150- `
219+ ${ createDrawerContent (
220+ options . headerText || 'Sample Drawer' ,
221+ options . itemCount
151222 ) }
152-
153- < igc-nav-drawer-item disabled >
154- < igc-icon slot ="icon " name ="home "> </ igc-icon >
155- < span slot ="content "> Disabled item</ span >
156- </ igc-nav-drawer-item >
157-
158- < div slot ="mini ">
159- < igc-nav-drawer-item >
160- < igc-icon slot ="icon " name ="home "> </ igc-icon >
161- </ igc-nav-drawer-item >
162-
163- < igc-nav-drawer-item >
164- < igc-icon slot ="icon " name ="search "> </ igc-icon >
165- </ igc-nav-drawer-item >
166- </ div >
223+ ${ options . includeMini ? createMiniContent ( ) : '' }
167224 </ igc-nav-drawer >
168225
169- < section class ="content ">
170- < p > Sample page content</ p >
171- < igc-button @click ="${ handleOpen } "> Open</ igc-button >
172- < igc-button @click ="${ handleClose } "> Close</ igc-button >
173- < igc-button @click ="${ handleToggle } "> Toggle</ igc-button >
226+ < section class ="content ${ position === 'relative' ? 'relative' : '' } ">
227+ < p > ${ options . contentText } </ p >
228+ ${ createControlButtons ( position ) }
174229 </ section >
175230 </ div >
176231 ` ;
177232} ;
178233
179- export const Basic : Story = Template . bind ( { } ) ;
234+ // Now create your stories using the template factory
235+ export const Basic : Story = {
236+ render : createTemplate ( {
237+ headerText : 'Drawer header' ,
238+ itemCount : 15 ,
239+ includeMini : false ,
240+ contentText : 'Basic drawer example' ,
241+ } ) ,
242+ } ;
243+
244+ export const MiniVariant : Story = {
245+ render : createTemplate ( {
246+ headerText : 'Drawer header' ,
247+ itemCount : 5 ,
248+ includeMini : true ,
249+ contentText : 'Mini drawer example ' ,
250+ } ) ,
251+ args : {
252+ position : 'start' ,
253+ open : false ,
254+ } ,
255+ } ;
0 commit comments