////
/// @group themes
/// @author <a href="https://github.com/simeonoff" target="_blank">Simeon Simeonoff</a>
////

@use '../base';

// Used to configure color accessibility for charts
@use 'igniteui-theming/sass/color/functions' as color;
@use 'igniteui-theming/sass/themes' as theming;

// Common components
@use '../components/_common/igx-control';
@use '../components/_common/igx-display-container' as display-container;
@use '../components/_common/igx-drag' as drag;
@use '../components/_common/igx-vhelper' as vhelper;
@use '../components/ripple/ripple-component' as ripple;

// Other components
@use '../components/action-strip/action-strip-component' as action-strip;
@use '../components/avatar/avatar-component' as avatar;
@use '../components/badge/badge-component' as badge;
@use '../components/bottom-nav/bottom-nav-component' as bottom-nav;
@use '../components/button/button-component' as button;
@use '../components/divider/divider-component' as divider;
@use '../components/button-group/button-group-component' as button-group;
@use '../components/banner/banner-component' as banner;
@use '../components/calendar/calendar-component' as calendar;
@use '../components/card/card-component' as card;
@use '../components/carousel/carousel-component' as carousel;
@use '../components/checkbox/checkbox-component' as checkbox;
@use '../components/chip/chip-component' as chip;
@use '../components/column-actions/column-actions-component' as column-actions;
@use '../components/combo/combo-component' as combo;
@use '../components/select/select-component' as select;
@use '../components/charts/category-chart-component' as category-chart;
@use '../components/charts/data-chart-component' as data-chart;
@use '../components/charts/doughnut-chart-component' as doughnut-chart;
@use '../components/charts/financial-chart-component' as financial-chart;
@use '../components/charts/funnel-chart-component' as funnel-chart;
@use '../components/charts/gauge-component' as gauge;
@use '../components/charts/geo-map-component' as geo-map;
@use '../components/charts/graph-component' as graph;
@use '../components/charts/pie-chart-component' as pie-chart;
@use '../components/charts/shape-chart-component' as shape-chart;
@use '../components/charts/sparkline-component' as sparkline;
@use '../components/date-picker/date-picker-component' as date-picker;
@use '../components/date-range-picker/date-range-picker-component' as date-range-picker;
@use '../components/dialog/dialog-component' as dialog;
@use '../components/dock-manager/dock-manager-component' as dock-manager;
@use '../components/rating/rating-component' as rating;
@use '../components/drop-down/drop-down-component' as drop-down;
@use '../components/expansion-panel/expansion-panel-component' as expansion-panel;
@use '../components/grid/grid-component' as grid;
@use '../components/grid/pivot-data-selector-component' as pivot-data-selector;
@use '../components/grid-summary/grid-summary-component' as grid-summary;
@use '../components/grid-toolbar/grid-toolbar-component' as grid-toolbar;
@use '../components/highlight/highlight-component' as highlight;
@use '../components/icon/icon-component' as icon;
@use '../components/icon-button/icon-button-component' as icon-button;
@use '../components/input/input-group-component' as input-group;
@use '../components/label/label-component' as label;
@use '../components/list/list-component' as list;
@use '../components/navbar/navbar-component' as navbar;
@use '../components/navdrawer/navdrawer-component' as navdrawer;
@use '../components/overlay/overlay-component' as overlay;
@use '../components/paginator/paginator-component' as paginator;
@use '../components/progress/linear/linear-component' as linear-progress;
@use '../components/progress/circular/circular-component' as circular-progress;
@use '../components/radio/radio-component' as radio;
@use '../components/query-builder/query-builder-component' as query-builder;
@use '../components/scrollbar/scrollbar-component' as scrollbar;
@use '../components/slider/slider-component' as slider;
@use '../components/splitter/splitter-component' as splitter;
@use '../components/snackbar/snackbar-component' as snackbar;
@use '../components/switch/switch-component' as switch;
@use '../components/stepper/stepper-component' as stepper;
@use '../components/tabs/tabs-component' as tabs;
@use '../components/toast/toast-component' as toast;
@use '../components/tooltip/tooltip-component' as tooltip;
@use '../components/time-picker/time-picker-component' as time-picker;
@use '../components/tree/tree-component' as tree;
@use '../components/watermark/watermark-component' as watermark;
@use '../components/input/file-input-component' as file-input;
@use '../print';

/// @param {boolean} $print-layout [true] - Activates the printing styles of the components.
/// @param {boolean} $enhanced-accesibility [false] - Switches component colors and other properties to more accessible values.
@mixin core(
    $print-layout: true,
    $enhanced-accessibility: false
) {
    @include color.configure-colors($enhanced-accessibility);

    // Angular hack for binding to [hidden] property
    // not working
    [hidden] {
        display: none !important;
    }

    // Common styles
    @include vhelper.component();
    @include display-container.component();
    @include drag.component();

    // Includes the base for each theme.
    [class^='igx-'],
    [class^='ig-'] {
        &,
        *,
        *::before,
        *::after {
            box-sizing: border-box;
        }
    }

    @include theming.sizing();
    @include theming.spacing();

    @property --_progress-integer {
        syntax: '<integer>';
        initial-value: 0;
        inherits: true;
    }

    @property --_progress-fraction {
        syntax: '<integer>';
        initial-value: 0;
        inherits: true;
    }

    @property --vhelper-scollbar-size {
        syntax: '<length>';
        initial-value: 16px;
        inherits: true;
    }

    // Component styles
    @include ripple.component();
    @include action-strip.component();
    @include avatar.component();
    @include badge.component();
    @include banner.component();
    @include bottom-nav.component();
    @include button.component();
    @include button-group.component();
    @include divider.component();
    @include calendar.component();
    @include card.component();
    @include carousel.component();
    @include checkbox.component();
    @include chip.component();
    @include column-actions.component();
    @include combo.component();
    @include select.component();
    @include category-chart.component();
    @include data-chart.component();
    @include doughnut-chart.component();
    @include financial-chart.component();
    @include funnel-chart.component();
    @include gauge.component();
    @include geo-map.component();
    @include graph.component();
    @include pie-chart.component();
    @include shape-chart.component();
    @include sparkline.component();
    @include date-picker.component();
    @include date-range-picker.component();
    @include dialog.component();
    @include dock-manager.component();
    @include rating.component();
    @include drop-down.component();
    @include expansion-panel.component();
    @include grid.component();
    @include grid-summary.component();
    @include grid-toolbar.component();
    @include pivot-data-selector.component();
    @include highlight.component();
    @include icon.component();
    @include icon-button.component();
    @include input-group.component();
    @include label.component();
    @include list.component();
    @include navbar.component();
    @include navdrawer.component();
    @include overlay.component();
    @include paginator.component();
    @include linear-progress.component();
    @include circular-progress.component();
    @include radio.component();
    @include query-builder.component();
    @include scrollbar.component();
    @include slider.component();
    @include splitter.component();
    @include snackbar.component();
    @include switch.component();
    @include stepper.component();
    @include tabs.component();
    @include toast.component();
    @include tooltip.component();
    @include time-picker.component();
    @include tree.component();
    @include watermark.component();
    @include file-input.component();

    // Build the component dependency-tree
    @include base.dependecy-tree(base.$components);

    @if $print-layout == true {
        @include print.layout();
    }
}

