or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

data-display-components.mdfeedback-components.mdform-components.mdindex.mdjavascript-utilities.mdlayout-components.mdnavigation-components.mdplugin-configuration.mdtheme-system.mdutility-classes.md
tile.json

javascript-utilities.mddocs/

JavaScript Utilities

Advanced JavaScript utility functions for programmatic DaisyUI plugin usage, CSS prefix management, and plugin configuration processing.

Capabilities

CSS Prefix Utility

Utility function for adding prefixes to CSS class names and CSS custom properties in DaisyUI style objects.

/**
 * Adds a prefix to CSS class names and custom properties in a style object
 * @param obj - CSS style object to process
 * @param prefix - String prefix to add to class names and variables
 * @param excludedPrefixes - Array of variable prefixes to exclude from prefixing
 * @returns Processed style object with prefixed class names and variables
 */
function addPrefix(
  obj: Record<string, any>, 
  prefix: string, 
  excludedPrefixes?: string[]
): Record<string, any>;

Usage Examples:

import { addPrefix } from 'daisyui/functions/addPrefix';

// Basic usage
const styles = {
  '.btn': {
    padding: '0.5rem 1rem',
    'border-radius': '0.375rem',
  },
  '.btn-primary': {
    'background-color': 'var(--color-primary)',
    color: 'var(--color-primary-content)',
  }
};

const prefixedStyles = addPrefix(styles, 'my-');
// Result:
// {
//   '.my-btn': {
//     padding: '0.5rem 1rem',
//     'border-radius': '0.375rem',
//   },
//   '.my-btn-primary': {
//     'background-color': 'var(--my-color-primary)',
//     color: 'var(--my-color-primary-content)',
//   }
// }

// With excluded prefixes
const excludedPrefixes = ['tw', 'color-'];
const customStyles = {
  '.card': {
    'background-color': 'var(--color-base-100)', // Won't be prefixed
    'border-color': 'var(--my-custom-border)',   // Will be prefixed
  }
};

const result = addPrefix(customStyles, 'ui-', excludedPrefixes);

Default Excluded Prefixes:

  • color- - Color CSS variables
  • size- - Size-related variables
  • radius- - Border radius variables
  • border - Border-related variables
  • depth - Depth/shadow variables
  • noise - Noise texture variables
  • tw - Tailwind-specific variables

Plugin Creation Utility

Core plugin utility for creating Tailwind CSS plugins with options support.

/**
 * Plugin creation utility with options support
 */
const plugin: {
  /**
   * Creates a plugin with configurable options
   * @param pluginFunction - Function that returns the plugin implementation
   * @param configFunction - Optional function that returns theme configuration
   * @returns Plugin function compatible with Tailwind CSS
   */
  withOptions: <T = any>(
    pluginFunction: (options?: T) => (tailwind: {
      addBase: (styles: Record<string, any>) => void;
      addComponents: (styles: Record<string, any>) => void;
      addUtilities: (styles: Record<string, any>) => void;
    }) => void,
    configFunction?: (options?: T) => any
  ) => any;
};

Usage Examples:

import { plugin } from 'daisyui/functions/plugin';

// Create a custom plugin with options
const myPlugin = plugin.withOptions(
  (options = {}) => {
    return ({ addComponents, addUtilities }) => {
      const { prefix = '', includeButtons = true } = options;
      
      if (includeButtons) {
        addComponents({
          [`.${prefix}my-btn`]: {
            padding: '0.5rem 1rem',
            'border-radius': '0.375rem',
          }
        });
      }
    };
  },
  (options = {}) => ({
    theme: {
      extend: {
        colors: options.customColors || {}
      }
    }
  })
);

// Use in Tailwind config
module.exports = {
  plugins: [
    myPlugin({
      prefix: 'custom-',
      includeButtons: true,
      customColors: {
        brand: '#ff6b6b'
      }
    })
  ]
};

Plugin Options Handler

Internal function that processes DaisyUI plugin configuration options and applies theme styles.

/**
 * Processes plugin configuration options and applies theme styles
 * @param options - Plugin configuration options
 * @param addBase - Tailwind's addBase function for base styles
 * @param themesObject - Object containing all available theme definitions
 * @param packageVersion - DaisyUI package version for logging
 * @returns Processed configuration with include/exclude arrays and prefix
 */
function pluginOptionsHandler(
  options: PluginOptions | undefined,
  addBase: (styles: Record<string, any>) => void,
  themesObject: Record<string, any>,
  packageVersion: string
): {
  include?: string[];
  exclude?: string[];
  prefix: string;
};

This function handles:

  • Theme application with CSS custom properties
  • Default theme selection with --default flag
  • Dark mode preference with --prefersdark flag
  • Component inclusion/exclusion logic
  • CSS class prefixing
  • Console logging control

Usage Examples:

import { pluginOptionsHandler } from 'daisyui/functions/pluginOptionsHandler';
import themesObject from 'daisyui/theme/object';

// This function is typically used internally by the main DaisyUI plugin
const processedOptions = pluginOptionsHandler(
  {
    themes: ['light --default', 'dark --prefersdark'],
    prefix: 'dui-',
    logs: false,
    include: ['button', 'card'],
    exclude: ['calendar']
  },
  addBase,
  themesObject,
  '5.1.6'
);

// Returns: { include: ['button', 'card'], exclude: ['calendar'], prefix: 'dui-' }

Types

interface PluginUtility {
  withOptions: <T = any>(
    pluginFunction: (options?: T) => (tailwind: any) => void,
    configFunction?: (options?: T) => any
  ) => any;
}

interface PluginOptionsResult {
  include?: string[];
  exclude?: string[];
  prefix: string;
}

// Default excluded prefixes for addPrefix function
type DefaultExcludedPrefixes = readonly [
  "color-", "size-", "radius-", "border", "depth", "noise"
];