Toggle
        Utilize the
        
       
         data-theme-toggle="light"
        
        and
        
         data-theme-toggle="dark"
        
        attributes on an element to toggle the theme mode upon clicking.
       
              Switch to Light mode
             
             
              Switch to Dark mode
             
            
				
					<button class="btn btn-icon btn-light dark:hidden" data-theme-toggle="true" data-tooltip="#theme_mode_dark">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-sun="">
 </i>
</button>
<button class="btn btn-icon btn-light hidden dark:flex" data-theme-toggle="true" data-tooltip="#theme_mode_light">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-moon="">
 </i>
</button>
<div class="tooltip" id="theme_mode_light">
 Switch to Light mode
</div>
<div class="tooltip" id="theme_mode_dark">
 Switch to Dark mode
</div>
				
			
           Menu
        The following example illustrates a menu offering the option to select a theme mode from
        
       
      
         dark
        
        ,
        
         light
        
        , and
        
         system
        
        preferences.
       Source Code
        The following source file manages the JavaScript behavior of the Tailwind CSS Theme component. 
			Upon building the assets using
        
         Webpack Build Tools
        
        , 
			the below file is compiled and added into the
        
       
         dist/assets/js/core.bundle.js
        
        bundle, 
			making it available globally across all pages.
       | File | Description | 
|---|---|
              
               src/core/components/theme/theme.ts
              
              | 
             The TypeScript source file that manages the JavaScript behavior of the Tailwind CSS Theme component. | 
HTML Markup
        The following markup outlines the core structure of the Tailwind CSS Theme component.
       
       
				
					<!--begin::Root element-->
<body class="light" data-theme="true" data-theme-mode="light">
 ...
</body>
<!--end::Root element-->
<!--begin::Toggle theme mode-->
<button class="btn btn-icon btn-light" data-theme-toggle="dark" data-tooltip="#theme_mode_dark">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-sun="">
 </i>
</button>
<button class="btn btn-icon btn-light" data-theme-toggle="light" data-tooltip="#theme_mode_light">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-moon="">
 </i>
</button>
<button class="btn btn-icon btn-light" data-theme-toggle="system" data-tooltip="#theme_mode_system">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-system="">
 </i>
</button>
<!--end::Toggle theme mode-->
				
			
         Variants
        Utilize the following Tailwind CSS theme variants to effectively manage the page's theme state and mode.
		For more information, refer to the
        
         Tailwind CSS Variant documentation
        
        .
       
       | Class | Description | 
|---|---|
              
               light-mode:
              
              | 
             A custom variant to apply classes when light mode is selected using the KTTheme JavaScript component. | 
              
               dark-mode:
              
              | 
             A custom variant to apply classes when dark mode is selected using the KTTheme JavaScript component. | 
              
               system-mode:
              
              | 
             A custom variant to apply classes based on the system theme preference using the KTTheme JavaScript component. | 
              
               dark:
              
              | 
             Tailwind CSS built-in variant to apply classes for dark mode. | 
              
               light:
              
              | 
             A custom variant to apply classes for light mode. | 
				
					<div class="hidden light-mode:block">
 Selected theme mode is Light.
</div>
<div class="hidden dark-mode:block">
 Selected theme mode is Dark.
</div>
<div class="hidden system-mode:block">
 Selected theme mode is System.
</div>
<div class="light:border-gray-100">
 Apply for light mode only
</div>
<div class="dark:border-gray-100">
 Apply for dark mode only
</div>
				
			
         Data Attribute Initialization
        Auto-initialize all KTTheme instances on page load by adding the
        
       
         data-theme="true"
        
        attribute to your theme element. This triggers on the fly initialization by the KTTheme JavaScript component.
       
				
					<!--begin::Root element-->
<body class="light" data-theme="true" data-theme-mode="light">
 ...
</body>
<!--end::Root element-->
<!--begin::Toggle theme mode-->
<button class="btn btn-icon btn-light" data-theme-toggle="dark" data-tooltip="#theme_mode_dark">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-sun="">
 </i>
</button>
<button class="btn btn-icon btn-light" data-theme-toggle="light" data-tooltip="#theme_mode_light">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-moon="">
 </i>
</button>
<button class="btn btn-icon btn-light" data-theme-toggle="system" data-tooltip="#theme_mode_system">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-system="">
 </i>
</button>
<!--end::Toggle theme mode-->
				
			
         
        These attributes allow you to set options for the KTTheme component during initialization. 
		The values you provide as strings are automatically converted to the appropriate
        
         KTTheme Options
        
        .
       
       | HTML Attribute | Type | Default | Description | 
|---|---|---|---|
              
               data-theme
              
              | 
             
              
               boolean
              
              | 
             
              
               true
              
              | 
             Used to auto-initialize KTTheme instances on page load. Alternatively, you can remove it and perform initialization using JavaScript. | 
              
               data-theme-mode
              
              | 
             
              
                enum
               
               
                  "light" | "dark" | "system"
                  
                 | 
             
              
               "light"
              
              | 
             Specifies the default theme mode. | 
              
               data-theme-toggle
              
              | 
             
              
                enum
               
               
                  "light" | "dark" | "system"
                  
                 | 
             
              
               -
              
              | 
             Applies the theme mode when an element with this attribute is clicked. | 
JavaScript Initialization
        To initialize a new theme component, pass the corresponding
		DOM element and configuration options to the KTTheme class constructor.
       
       
				
					// Theme element
const themeEl = document.querySelector('body');
// Configuration options(optional)
const options = {
	mode: 'system'
};
// Initialize object
const theme = new KTTheme(themerEl, options);
				
			
           
				
					<!--begin::Root element-->
<body class="light" data-theme="false" data-theme-mode="light">
 ...
</body>
<!--end::Root element-->
				
			
           
          To initialize KTTheme with JavaScript, use
          
           data-theme="false"
          
          attribute instead. 
				This prevents automatic initialization on page load.
         
Options
        This table outlines the configuration options for initialization of Tailwind CSS Theme instances, using the KTTheme JavaScript component.
       
       | Option | Type | Default | Description | 
|---|---|---|---|
              
               mode
              
              | 
             
              
                enum
               
               
                  "light" | "dark" | "system"
                  
                 | 
             
              
               "light"
              
              | 
             Specifies the default theme mode. | 
              
               class
              
              | 
             
              
               boolean
              
              | 
             
              
               true
              
              | 
             Sets the default theme mode selector strategy. | 
              
               attribute
              
              | 
             
              
               string
              
              | 
             - | 
              Specify attribute based selector strategy, e.g:
              
               data-mode="dark"
              
              by setting the
              
               class
              
              option to
              
               false
              
              .
              | 
            
Utilities
        Manage and interact with KTTheme instances using these static methods of
        
       
         KTTheme
        
        class.
       | Method | Description | 
|---|---|
              
               init()
              
              | 
             
              Automatically initializes KTTheme object for all elements with the
              
               data-theme="true"
              
              attribute on page load.
              | 
            
              
               createInstances()
              
              | 
             Allows to create KTTheme instances for all elements that have been dynamically added to the DOM but haven't been activated yet. | 
              
               getInstance(element)
              
              | 
             
              Returns the
              
               KTTheme
              
              object associated with the given DOM element
              
               element
              
              .
              | 
            
              
               getOrCreateInstance(element)
              
              | 
             
              Returns the existing
              
               KTTheme
              
              object for the provided DOM element
              
               element
              
              , or creates a new instance if none exists, then returns the same.
              | 
            
				
					// Initialize all instances
KTTheme.init()
// Initialzie pending instances
KTTheme.createInstances();
// Get theme object
const themeEl = document.querySelector('body');
const theme = KTTheme.getInstance(themeEl);
				
			
           
				
					<!--begin::Root element-->
<body class="light" data-theme="true" data-theme-mode="light">
 ...
</body>
<!--end::Root element-->
<!--begin::Toggle theme mode-->
<button class="btn btn-icon btn-light" data-theme-toggle="dark" data-tooltip="#theme_mode_dark">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-sun="">
 </i>
</button>
<button class="btn btn-icon btn-light" data-theme-toggle="light" data-tooltip="#theme_mode_light">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-moon="">
 </i>
</button>
<button class="btn btn-icon btn-light" data-theme-toggle="system" data-tooltip="#theme_mode_system">
 <i '="" 'outline'}="" class="ki-{" default':="" ki-system="">
 </i>
</button>
<!--end::Toggle theme mode-->
				
			
           Methods
        Use KTTheme component's API methods to programmatically control its behavior.
       
       | Method | Description | 
|---|---|
              
               new KTTheme(element, options)
              
              | 
             
              Creates an object instance of KTTheme class for the given DOM
              
               element
              
              and configuration
              
               options
              
              .
              | 
            
              
               getMode()
              
              | 
             
              Retrieves the current theme mode value, which can be either
              
               light
              
              ,
              
               dark
              
              or
              
               system
              
              .
              | 
            
              
               setMode(mode)
              
              | 
             
              Sets a new theme mode:
              
               light
              
              ,
              
               dark
              
              , or
              
               system
              
              .
              | 
            
              
               getOption(name)
              
              | 
             
              Retrieves the value of a configuration option by
              
               name
              
              parameter from a KTTheme instance.
              | 
            
              
               getElement()
              
              | 
             Retrieves the DOM element linked to a specific KTTheme instance. | 
              
               on(eventName, handler)
              
              | 
             
              Allows attaching event listeners to the KTTheme custom events using the
              
               eventName
              
              and
              
               eventId
              
              string parameters. These events enable programmatic interaction based on user actions or 
				internal state changes of KTTheme. The function returns
              
               string
              
              as a unique identifier for the registered listener, allowing you to remove it later if needed.
              | 
            
              
               off(eventName, eventId)
              
              | 
             
              Removes an event listener for the
              
               eventName
              
              and
              
               eventId
              
              parameters attached with the
              
               on
              
              method.
              | 
            
              
               dispose()
              
              | 
             Removes the KTTheme instance from an element, including any associated data stored on the DOM element. | 
				
					const themeEl = document.querySelector('body');
const theme = KTTheme.getInstance(themeEl);
theme.getMode();
theme.setMode('dark');
				
			
           
				
					<!--begin::Root element-->
<body class="light" data-theme="true" data-theme-mode="light">
 ...
</body>
<!--end::Root element-->
				
			
           Events
         KTTheme
        
        custom events allows you to register callback functions(event listeners) 
		that will be invoked automatically whenever specific custom events are triggered within the component.
       | Event | Description | 
|---|---|
              
               change
              
              | 
             Triggered immediately before the theme mode is changed. | 
              
               changed
              
              | 
             Triggered immediately after the theme mode is changed. | 
				
					// Theme element
const themeEl = document.querySelector('body');
const theme = KTTheme.getInstance(themeEl);
theme.on('change', () => {
	detail.cancel = true;
	console.log('change action canceled');
});
theme.on('change', () => {
	console.log('changed event');
});