@tamilvananmurugan/xlibs
Version:
Comprehensive UI component library with Aceternity, MagicUI, and ShadCN components
164 lines (150 loc) • 5.67 kB
text/typescript
// Ruleset Loader
// Centralized access to UI generation rules from ruleset.json
import ruleset from './ruleset.json';
export interface Ruleset {
ui_generation_rules: {
version: string;
description: string;
ui_best_practice_defaults: {
layout_defaults: {
page_layout: {
default_structure: string;
header_height_vh: number;
footer_height_vh: number;
main_content_padding_vw: number[];
max_content_width_vw: number;
center_content: boolean;
};
section_layout: {
default_structure: string;
section_padding_vw: number;
section_margin_vw: number;
max_section_width_vw: number;
};
component_layout: {
default_structure: string;
component_padding_vw: number;
component_margin_vw: number;
max_component_width_vw: number;
};
};
sizing_defaults: {
component_sizing: {
max_component_dimensions: {
width_viewport_percent: number;
height_viewport_percent: number;
width_container_percent: number;
height_container_percent: number;
};
minimum_viable_sizing: {
text_height_vh: number;
text_height_container_percent: number;
interactive_element_vmin: number;
interactive_element_container_percent: number;
};
};
};
spacing_system: {
positive_rules: {
relative_spatial_system: {
base_unit_vw: number;
base_unit_container_percent: number;
allowed_vw_multiples: number[];
allowed_container_multiples: number[];
};
hierarchical_spacing: {
level_1_page_vw: number[];
level_1_page_container_percent: number[];
level_2_sections_vw: number;
level_2_sections_container_percent: number;
level_3_components_vw: number;
level_3_components_container_percent: number;
level_4_elements_vw: number;
level_4_elements_container_percent: number;
};
};
};
typography_constraints: {
responsive_typography_scale: {
h1_vw_mobile: number;
h1_vw_desktop: number;
h2_vw_mobile: number;
h2_vw_desktop: number;
h3_vw_mobile: number;
h3_vw_desktop: number;
h4_vw_mobile: number;
h4_vw_desktop: number;
body_vw_mobile: number;
body_vw_desktop: number;
small_vw_mobile: number;
small_vw_desktop: number;
};
};
};
};
}
export class RulesetLoader {
private static instance: RulesetLoader;
private ruleset: Ruleset;
private constructor() {
this.ruleset = ruleset as unknown as Ruleset;
}
static getInstance(): RulesetLoader {
if (!RulesetLoader.instance) {
RulesetLoader.instance = new RulesetLoader();
}
return RulesetLoader.instance;
}
// Get sizing constraints
getSizingConstraints() {
return this.ruleset.ui_generation_rules.ui_best_practice_defaults.sizing_defaults.component_sizing;
}
// Get spacing system
getSpacingSystem() {
return this.ruleset.ui_generation_rules.ui_best_practice_defaults.spacing_system;
}
// Get typography constraints
getTypographyConstraints() {
return this.ruleset.ui_generation_rules.ui_best_practice_defaults.typography_constraints;
}
// Get component sizing defaults
getComponentSizingDefaults() {
const sizing = this.getSizingConstraints();
return {
max_width_vw: sizing.max_component_dimensions.width_viewport_percent,
max_height_vw: sizing.max_component_dimensions.height_viewport_percent,
min_text_height_vh: sizing.minimum_viable_sizing.text_height_vh,
min_interactive_element_vmin: sizing.minimum_viable_sizing.interactive_element_vmin
};
}
// Get spacing defaults
getSpacingDefaults() {
const spacing = this.getSpacingSystem();
return {
base_unit_vw: spacing.positive_rules.relative_spatial_system.base_unit_vw,
base_unit_container_percent: spacing.positive_rules.relative_spatial_system.base_unit_container_percent,
page_spacing_vw: spacing.positive_rules.hierarchical_spacing.level_1_page_vw[0],
section_spacing_vw: spacing.positive_rules.hierarchical_spacing.level_2_sections_vw,
component_spacing_vw: spacing.positive_rules.hierarchical_spacing.level_3_components_vw,
element_spacing_vw: spacing.positive_rules.hierarchical_spacing.level_4_elements_vw
};
}
// Get typography defaults
getTypographyDefaults() {
const typography = this.getTypographyConstraints();
return {
h1_mobile_vw: typography.responsive_typography_scale.h1_vw_mobile,
h1_desktop_vw: typography.responsive_typography_scale.h1_vw_desktop,
h2_mobile_vw: typography.responsive_typography_scale.h2_vw_mobile,
h2_desktop_vw: typography.responsive_typography_scale.h2_vw_desktop,
body_mobile_vw: typography.responsive_typography_scale.body_vw_mobile,
body_desktop_vw: typography.responsive_typography_scale.body_vw_desktop
};
}
}
// Export a default instance for easy access
export const rulesetLoader = RulesetLoader.getInstance();
// Utility functions for common access patterns
export const getSizingDefaults = () => rulesetLoader.getComponentSizingDefaults();
export const getSpacingDefaults = () => rulesetLoader.getSpacingDefaults();
export const getTypographyDefaults = () => rulesetLoader.getTypographyDefaults();