mirror of
https://github.com/tabler/tabler.git
synced 2025-12-22 18:04:26 +04:00
Compare commits
2 Commits
changeset-
...
dev-css-la
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b639b0ea2c | ||
|
|
6674c2cf98 |
@@ -1,100 +0,0 @@
|
|||||||
---
|
|
||||||
description: Cursor Rules for Tabler Changesets
|
|
||||||
globs:
|
|
||||||
alwaysApply: true
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
### File Structure
|
|
||||||
|
|
||||||
- Each change must be in a separate changeset file in `.changeset/` directory
|
|
||||||
- Use descriptive kebab-case filenames (e.g., `progress-sizes.md`, `button-ghost.md`)
|
|
||||||
- Follow the standard changeset format with frontmatter and description
|
|
||||||
|
|
||||||
### Change Description Format
|
|
||||||
|
|
||||||
- **One sentence per changeset** - keep descriptions concise and focused
|
|
||||||
- Use **backticks for code elements**: classes (`.btn-ghost`), properties (`stroke-width`), values (`1.5`), icons (`arrow-up`)
|
|
||||||
- Start with action verbs: "Added", "Updated", "Fixed", "Removed"
|
|
||||||
- Be specific about what was changed
|
|
||||||
|
|
||||||
### Version Bump Guidelines
|
|
||||||
|
|
||||||
- **Major**: Breaking changes, complete rewrites
|
|
||||||
- **Minor**: New features, new components, new pages, significant enhancements
|
|
||||||
- **Patch**: Bug fixes, small improvements, style updates, accessibility fixes
|
|
||||||
|
|
||||||
### Package Selection
|
|
||||||
|
|
||||||
- `"@tabler/core"`: Changes to SCSS, core functionality, CSS classes
|
|
||||||
- `"@tabler/preview"`: New pages, demo updates, preview-specific changes
|
|
||||||
- `"@tabler/docs"`: Documentation updates
|
|
||||||
- Use multiple packages when change affects multiple areas
|
|
||||||
|
|
||||||
### Examples
|
|
||||||
|
|
||||||
#### New Feature (Minor)
|
|
||||||
|
|
||||||
```md
|
|
||||||
---
|
|
||||||
"@tabler/core": minor
|
|
||||||
"@tabler/preview": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Added Progress Steps component for step-by-step navigation indicators.
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Bug Fix (Patch)
|
|
||||||
|
|
||||||
```md
|
|
||||||
---
|
|
||||||
"@tabler/core": patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Updated `stroke-width` for `.icon-sm` from `1` to `1.5` for better visibility.
|
|
||||||
```
|
|
||||||
|
|
||||||
#### New Page (Minor)
|
|
||||||
|
|
||||||
```md
|
|
||||||
---
|
|
||||||
"@tabler/preview": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Added new onboarding page with progress indicator and navigation layout.
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Style Enhancement (Patch)
|
|
||||||
|
|
||||||
```md
|
|
||||||
---
|
|
||||||
"@tabler/core": patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Added smooth transitions for progress bar width and background color changes.
|
|
||||||
```
|
|
||||||
|
|
||||||
### Code Formatting Rules
|
|
||||||
|
|
||||||
- Class names: `.btn-ghost`, `.progress-lg`, `.icon-sm`
|
|
||||||
- CSS properties: `stroke-width`, `background-color`, `width`
|
|
||||||
- Values: `1.5`, `transparent`, `100%`
|
|
||||||
- Icon names: `arrow-up`, `arrow-down`, `trending-up`
|
|
||||||
- HTML attributes: `aria-label`, `role`, `data-*`
|
|
||||||
- JavaScript functions: `addEventListener()`, `querySelector()`
|
|
||||||
|
|
||||||
### Common Patterns
|
|
||||||
|
|
||||||
- **Component additions**: "Added [ComponentName] component for [purpose]"
|
|
||||||
- **Size variants**: "Added [size] size variant for [component] (`.class-size`)"
|
|
||||||
- **Style fixes**: "Fixed [issue] in [component/element]"
|
|
||||||
- **Icon updates**: "Updated [component] to use `new-icon` instead of `old-icon`"
|
|
||||||
- **Accessibility**: "Improved accessibility by [specific change]"
|
|
||||||
|
|
||||||
### Commit Message Format
|
|
||||||
|
|
||||||
Use English for commit messages following conventional commit format when possible:
|
|
||||||
|
|
||||||
- `feat: add progress steps component`
|
|
||||||
- `fix: update icon stroke width for better visibility`
|
|
||||||
- `style: add smooth transitions to progress bars`
|
|
||||||
@@ -1,171 +0,0 @@
|
|||||||
---
|
|
||||||
description: Tabler Project HTML Elements Guidelines
|
|
||||||
globs: ["**/*.html", "**/*.liquid", "**/*.md"]
|
|
||||||
alwaysApply: true
|
|
||||||
---
|
|
||||||
|
|
||||||
## HTML Elements Guidelines
|
|
||||||
|
|
||||||
### 1. Icons
|
|
||||||
|
|
||||||
When you need to use an icon, always use the Tabler icon include syntax:
|
|
||||||
|
|
||||||
```html
|
|
||||||
{% include "ui/icon.html" icon="ICON_NAME" %}
|
|
||||||
```
|
|
||||||
|
|
||||||
**Examples:**
|
|
||||||
|
|
||||||
- `{% include "ui/icon.html" icon="home" %}`
|
|
||||||
- `{% include "ui/icon.html" icon="building-community" %}`
|
|
||||||
- `{% include "ui/icon.html" icon="map-pin" %}`
|
|
||||||
|
|
||||||
### 2. Page Links
|
|
||||||
|
|
||||||
When linking to other pages, always use the relative page syntax:
|
|
||||||
|
|
||||||
```html
|
|
||||||
href="{{ page | relative }}/url.html"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Examples:**
|
|
||||||
|
|
||||||
- `href="{{ page | relative }}/job-post.html"`
|
|
||||||
- `href="{{ page | relative }}/job-listing.html"`
|
|
||||||
- `href="{{ page | relative }}/marketing/index.html"`
|
|
||||||
|
|
||||||
### 3. Static Generation
|
|
||||||
|
|
||||||
All pages are statically generated to HTML using Eleventy (11ty). Keep this in mind when:
|
|
||||||
|
|
||||||
- Writing frontmatter (must be static YAML, no Liquid templating)
|
|
||||||
- Creating dynamic content (use Liquid templating in the body, not frontmatter)
|
|
||||||
- Linking between pages (use relative paths)
|
|
||||||
|
|
||||||
### 4. Additional Guidelines
|
|
||||||
|
|
||||||
#### Frontmatter Rules
|
|
||||||
|
|
||||||
- Frontmatter must be static YAML
|
|
||||||
- Cannot use Liquid templating in frontmatter
|
|
||||||
- Use static values for title, permalink, etc.
|
|
||||||
|
|
||||||
#### Liquid Templating
|
|
||||||
|
|
||||||
- Use Liquid templating only in the HTML body
|
|
||||||
- Access data using `{{ variable }}` syntax
|
|
||||||
- Use `{% for %}` loops for dynamic content
|
|
||||||
- Use `{% if %}` conditions for conditional rendering
|
|
||||||
|
|
||||||
#### File Structure
|
|
||||||
|
|
||||||
- Pages go in `preview/pages/`
|
|
||||||
- Includes go in `shared/includes/`
|
|
||||||
- Data files go in `shared/data/`
|
|
||||||
- Documentation goes in `docs/content/`
|
|
||||||
|
|
||||||
#### CSS Classes
|
|
||||||
|
|
||||||
- Use Bootstrap 5 classes
|
|
||||||
- Use Tabler's custom CSS classes
|
|
||||||
- Follow the pattern: `--#{$prefix}component-property`
|
|
||||||
|
|
||||||
#### Accessibility
|
|
||||||
|
|
||||||
- Include proper ARIA labels
|
|
||||||
- Use semantic HTML elements
|
|
||||||
- Ensure proper heading hierarchy
|
|
||||||
- Add alt text for images
|
|
||||||
|
|
||||||
### 5. Component Usage
|
|
||||||
|
|
||||||
#### Cards
|
|
||||||
|
|
||||||
- Use `card` class for main containers
|
|
||||||
- Use `card-body` for content areas
|
|
||||||
- Use `card-header` for card headers
|
|
||||||
- Use `card-title` for card title
|
|
||||||
|
|
||||||
#### Buttons
|
|
||||||
|
|
||||||
- Use `btn` class for all buttons
|
|
||||||
- Use `btn-primary` for primary actions
|
|
||||||
- Use `btn` for secondary actions, don't use `btn-outline-secondary`
|
|
||||||
- Use `btn-sm` for smaller buttons
|
|
||||||
- Use `w-100` for full-width buttons
|
|
||||||
|
|
||||||
#### Forms
|
|
||||||
|
|
||||||
- Use `form-control` for input fields
|
|
||||||
- Use `form-label` for labels
|
|
||||||
- Use `form-check` for checkboxes/radio buttons
|
|
||||||
- Use `form-select` for dropdowns
|
|
||||||
|
|
||||||
#### Layout
|
|
||||||
|
|
||||||
- Use Bootstrap grid system (`row`, `col-*`)
|
|
||||||
- Use `container-xl` for main containers
|
|
||||||
- Use `page-wrapper` for page structure
|
|
||||||
- Use `page-body` for main content area
|
|
||||||
|
|
||||||
#### Badges
|
|
||||||
|
|
||||||
- Use `badge` class for badges
|
|
||||||
- Don't use `badge-outline` for badges, use `badge` class instead
|
|
||||||
- Don't use `badge-primary` for badges, use `badge` class instead
|
|
||||||
- Don't change the text color of badges
|
|
||||||
|
|
||||||
#### Markdown
|
|
||||||
|
|
||||||
- Use `markdown` class for markdown content
|
|
||||||
- Apply to containers that render markdown content
|
|
||||||
- Example: `<div class="markdown">...</div>`
|
|
||||||
|
|
||||||
#### Rest of the rules
|
|
||||||
|
|
||||||
- Read the rest of the rules in the `docs/content/ui/` folder
|
|
||||||
|
|
||||||
### 6. Data Integration
|
|
||||||
|
|
||||||
#### Using JSON Data
|
|
||||||
|
|
||||||
```liquid
|
|
||||||
{% for item in items %}
|
|
||||||
<div>{{ item.name }}</div>
|
|
||||||
{% endfor %}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Conditional Rendering
|
|
||||||
|
|
||||||
```liquid
|
|
||||||
{% if condition %}
|
|
||||||
<div>Content</div>
|
|
||||||
{% endif %}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Including Components
|
|
||||||
|
|
||||||
```liquid
|
|
||||||
{% include "ui/button.html" color="primary" text="Click me" %}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 7. Best Practices
|
|
||||||
|
|
||||||
#### Performance
|
|
||||||
|
|
||||||
- Minimize nested loops
|
|
||||||
- Use `limit` filters when iterating large datasets
|
|
||||||
- Optimize images for web use
|
|
||||||
|
|
||||||
#### Code Organization
|
|
||||||
|
|
||||||
- Keep components modular and reusable
|
|
||||||
- Use consistent naming conventions
|
|
||||||
- Comment complex logic
|
|
||||||
- Group related functionality together
|
|
||||||
|
|
||||||
#### Error Handling
|
|
||||||
|
|
||||||
- Always check if data exists before using it
|
|
||||||
- Provide fallback content for missing data
|
|
||||||
- Use `{% if %}` guards for optional content
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
---
|
|
||||||
description: Tabler Project Rules
|
|
||||||
globs:
|
|
||||||
alwaysApply: true
|
|
||||||
---
|
|
||||||
|
|
||||||
## Documentation Standards
|
|
||||||
|
|
||||||
- Always write documentation in English (not Polish) for technical content
|
|
||||||
- Use clear, descriptive headings with proper hierarchy (##, ###)
|
|
||||||
- Include practical examples with code snippets
|
|
||||||
- Add explanations for each component's purpose and usage
|
|
||||||
- Use consistent formatting for code blocks and examples
|
|
||||||
|
|
||||||
## CSS/SCSS Guidelines
|
|
||||||
|
|
||||||
- Follow Tabler's CSS custom properties pattern: `--#{$prefix}component-property`
|
|
||||||
- Use semantic class names that describe purpose, not appearance
|
|
||||||
- Maintain consistent spacing and indentation in SCSS files
|
|
||||||
- Group related styles together with clear comments
|
|
||||||
- Use Bootstrap-compatible class naming conventions
|
|
||||||
|
|
||||||
## Component Documentation Structure
|
|
||||||
|
|
||||||
- Start with a brief description of the component's purpose
|
|
||||||
- Show basic usage examples first
|
|
||||||
- Include variations and modifiers
|
|
||||||
- Add accessibility considerations where relevant
|
|
||||||
- Provide code examples that are copy-paste ready
|
|
||||||
|
|
||||||
## File Organization
|
|
||||||
|
|
||||||
- Keep documentation files in `docs/content/ui/components/`
|
|
||||||
- Use consistent naming: lowercase with hyphens
|
|
||||||
- Include frontmatter with title, summary, and description
|
|
||||||
- Link to Bootstrap documentation when relevant
|
|
||||||
|
|
||||||
## Code Examples
|
|
||||||
|
|
||||||
- Use Liquid templating syntax for dynamic examples
|
|
||||||
- Include both HTML and rendered output
|
|
||||||
- Show responsive behavior where applicable
|
|
||||||
- Demonstrate proper accessibility attributes
|
|
||||||
|
|
||||||
## Git Commit Messages
|
|
||||||
|
|
||||||
- Use English for commit messages
|
|
||||||
- Follow conventional commit format when possible
|
|
||||||
- Be descriptive about what was changed and why
|
|
||||||
|
|
||||||
## Project-Specific Conventions
|
|
||||||
|
|
||||||
- Tabler uses Bootstrap 5 as a foundation
|
|
||||||
- Custom components extend Bootstrap functionality
|
|
||||||
- Documentation should be comprehensive but concise
|
|
||||||
- Examples should be practical and immediately usable
|
|
||||||
11
.github/workflows/argos.yml
vendored
11
.github/workflows/argos.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
|||||||
if: false
|
if: false
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Cache turbo build setup
|
- name: Cache turbo build setup
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
@@ -36,14 +36,13 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-turbo-
|
${{ runner.os }}-turbo-
|
||||||
|
|
||||||
- name: Install PNPM
|
|
||||||
uses: pnpm/action-setup@v4
|
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "${{ env.NODE }}"
|
node-version: "${{ env.NODE }}"
|
||||||
cache: 'pnpm'
|
|
||||||
|
- name: Install PNPM
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
|
||||||
- name: Get installed Playwright version
|
- name: Get installed Playwright version
|
||||||
id: playwright-version
|
id: playwright-version
|
||||||
|
|||||||
11
.github/workflows/bundlewatch.yml
vendored
11
.github/workflows/bundlewatch.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Cache turbo build setup
|
- name: Cache turbo build setup
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
@@ -27,14 +27,13 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-turbo-
|
${{ runner.os }}-turbo-
|
||||||
|
|
||||||
- name: Install PNPM
|
|
||||||
uses: pnpm/action-setup@v4
|
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "${{ env.NODE }}"
|
node-version: "${{ env.NODE }}"
|
||||||
cache: 'pnpm'
|
|
||||||
|
- name: Install PNPM
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
|
||||||
- name: Set up Bundler
|
- name: Set up Bundler
|
||||||
uses: ruby/setup-ruby@v1
|
uses: ruby/setup-ruby@v1
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/close_inactive.yml
vendored
2
.github/workflows/close_inactive.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
issues: write
|
issues: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v10
|
- uses: actions/stale@v9
|
||||||
with:
|
with:
|
||||||
days-before-issue-stale: 360
|
days-before-issue-stale: 360
|
||||||
days-before-issue-close: 14
|
days-before-issue-close: 14
|
||||||
|
|||||||
9
.github/workflows/lockfiles.yaml
vendored
9
.github/workflows/lockfiles.yaml
vendored
@@ -12,10 +12,11 @@ jobs:
|
|||||||
name: Verify lock file integrity
|
name: Verify lock file integrity
|
||||||
steps:
|
steps:
|
||||||
- name: Clone Tabler
|
- name: Clone Tabler
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Prevent lock file change
|
- name: Prevent lock file change
|
||||||
uses: xalvarez/prevent-file-change-action@v3
|
uses: xalvarez/prevent-file-change-action@v2
|
||||||
with:
|
with:
|
||||||
githubToken: ${{ secrets.GITHUB_TOKEN }}
|
githubToken: ${{ secrets.GITHUB_TOKEN }}
|
||||||
pattern: Gemfile.lock|pnpm-lock.json|pnpm-lock.yaml
|
pattern: Gemfile.lock|pnpm-lock.json
|
||||||
trustedAuthors: codecalm, BG-Software-BG, dependabot
|
trustedAuthors: codecalm, dependabot
|
||||||
|
|||||||
13
.github/workflows/release.yml
vendored
13
.github/workflows/release.yml
vendored
@@ -21,17 +21,16 @@ jobs:
|
|||||||
pull-requests: write # to create pull request
|
pull-requests: write # to create pull request
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js 18
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
|
||||||
- name: Install PNPM
|
- name: Install PNPM
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
|
|
||||||
- name: Setup Node.js 18
|
|
||||||
uses: actions/setup-node@v6
|
|
||||||
with:
|
|
||||||
node-version: "${{ env.NODE }}"
|
|
||||||
cache: 'pnpm'
|
|
||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: pnpm install
|
run: pnpm install
|
||||||
|
|
||||||
|
|||||||
11
.github/workflows/test.yml
vendored
11
.github/workflows/test.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Cache turbo build setup
|
- name: Cache turbo build setup
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
@@ -24,14 +24,13 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-turbo-
|
${{ runner.os }}-turbo-
|
||||||
|
|
||||||
- name: Install PNPM
|
|
||||||
uses: pnpm/action-setup@v4
|
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "${{ env.NODE }}"
|
node-version: "${{ env.NODE }}"
|
||||||
cache: 'pnpm'
|
|
||||||
|
- name: Install PNPM
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
|
||||||
- run: node --version
|
- run: node --version
|
||||||
|
|
||||||
|
|||||||
14
.prettierrc
14
.prettierrc
@@ -4,17 +4,7 @@
|
|||||||
"printWidth": 320,
|
"printWidth": 320,
|
||||||
"proseWrap": "always",
|
"proseWrap": "always",
|
||||||
"semi": false,
|
"semi": false,
|
||||||
"singleQuote": true,
|
"singleQuote": false,
|
||||||
"quoteProps": "consistent",
|
|
||||||
"tabWidth": 2,
|
"tabWidth": 2,
|
||||||
"useTabs": false,
|
"trailingComma": "all"
|
||||||
"trailingComma": "all",
|
|
||||||
"overrides": [
|
|
||||||
{
|
|
||||||
"files": "*.scss",
|
|
||||||
"options": {
|
|
||||||
"parser": "scss"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,82 +0,0 @@
|
|||||||
import fs from 'fs';
|
|
||||||
import path from 'path';
|
|
||||||
import { fileURLToPath } from 'url';
|
|
||||||
|
|
||||||
// Get __dirname in ES modules
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
|
||||||
const __dirname = path.dirname(__filename);
|
|
||||||
|
|
||||||
// File paths (relative to core/.build directory)
|
|
||||||
const bootstrapPath = path.join(__dirname, '../node_modules/bootstrap/scss/_variables.scss');
|
|
||||||
const tablerPath = path.join(__dirname, '../scss/_variables.scss');
|
|
||||||
|
|
||||||
// Function to extract variable names from SCSS file
|
|
||||||
function extractVariables(filePath) {
|
|
||||||
const content = fs.readFileSync(filePath, 'utf8');
|
|
||||||
const variables = new Set();
|
|
||||||
|
|
||||||
// Regex to find SCSS variables
|
|
||||||
// Looks for patterns like: $variable-name: value
|
|
||||||
// Includes variables in maps and lists
|
|
||||||
const variableRegex = /\$([a-zA-Z0-9_-]+)\s*[:=]/g;
|
|
||||||
|
|
||||||
let match;
|
|
||||||
while ((match = variableRegex.exec(content)) !== null) {
|
|
||||||
const varName = match[1];
|
|
||||||
variables.add(varName);
|
|
||||||
}
|
|
||||||
|
|
||||||
return variables;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Main function
|
|
||||||
function compareVariables() {
|
|
||||||
console.log('Analyzing Bootstrap variables...');
|
|
||||||
const bootstrapVars = extractVariables(bootstrapPath);
|
|
||||||
console.log(`Found ${bootstrapVars.size} variables in Bootstrap\n`);
|
|
||||||
|
|
||||||
console.log('Analyzing Tabler variables...');
|
|
||||||
const tablerVars = extractVariables(tablerPath);
|
|
||||||
console.log(`Found ${tablerVars.size} variables in Tabler\n`);
|
|
||||||
|
|
||||||
// Find variables that are in Bootstrap but not in Tabler
|
|
||||||
const missingInTabler = [];
|
|
||||||
for (const varName of bootstrapVars) {
|
|
||||||
if (!tablerVars.has(varName)) {
|
|
||||||
missingInTabler.push(varName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort alphabetically
|
|
||||||
missingInTabler.sort();
|
|
||||||
|
|
||||||
console.log('='.repeat(60));
|
|
||||||
console.log(`Variables in Bootstrap that are missing in Tabler: ${missingInTabler.length}`);
|
|
||||||
console.log('='.repeat(60));
|
|
||||||
|
|
||||||
if (missingInTabler.length === 0) {
|
|
||||||
console.log('All Bootstrap variables are present in Tabler!');
|
|
||||||
} else {
|
|
||||||
console.log('\nList of missing variables:\n');
|
|
||||||
missingInTabler.forEach((varName, index) => {
|
|
||||||
console.log(`${(index + 1).toString().padStart(4)}. $${varName}`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Optionally: show statistics
|
|
||||||
console.log('\n' + '='.repeat(60));
|
|
||||||
console.log('Statistics:');
|
|
||||||
console.log(` Bootstrap: ${bootstrapVars.size} variables`);
|
|
||||||
console.log(` Tabler: ${tablerVars.size} variables`);
|
|
||||||
console.log(` Missing: ${missingInTabler.length} variables`);
|
|
||||||
console.log(` Coverage: ${((1 - missingInTabler.length / bootstrapVars.size) * 100).toFixed(1)}%`);
|
|
||||||
console.log('='.repeat(60));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run analysis
|
|
||||||
try {
|
|
||||||
compareVariables();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error during analysis:', error.message);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
'use strict'
|
|
||||||
|
|
||||||
import { existsSync, mkdirSync } from 'fs'
|
|
||||||
import { copySync } from 'fs-extra/esm'
|
|
||||||
import { fileURLToPath } from 'url'
|
|
||||||
import { join, dirname } from 'node:path'
|
|
||||||
|
|
||||||
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
||||||
|
|
||||||
const fromDir = join(__dirname, '..', 'node_modules/geist/dist/fonts')
|
|
||||||
const toDir = join(__dirname, '..', 'fonts')
|
|
||||||
|
|
||||||
// Create fonts directory if it doesn't exist
|
|
||||||
if (!existsSync(toDir)) {
|
|
||||||
mkdirSync(toDir, { recursive: true })
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy geist-mono fonts
|
|
||||||
const monoFrom = join(fromDir, 'geist-mono')
|
|
||||||
const monoTo = join(toDir, 'geist-mono')
|
|
||||||
|
|
||||||
if (existsSync(monoFrom)) {
|
|
||||||
if (!existsSync(monoTo)) {
|
|
||||||
mkdirSync(monoTo, { recursive: true })
|
|
||||||
}
|
|
||||||
|
|
||||||
copySync(monoFrom, monoTo, {
|
|
||||||
dereference: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
console.log(`Successfully copied geist-mono fonts`)
|
|
||||||
} else {
|
|
||||||
console.warn(`Warning: geist-mono fonts not found at ${monoFrom}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy geist-sans fonts
|
|
||||||
const sansFrom = join(fromDir, 'geist-sans')
|
|
||||||
const sansTo = join(toDir, 'geist-sans')
|
|
||||||
|
|
||||||
if (existsSync(sansFrom)) {
|
|
||||||
if (!existsSync(sansTo)) {
|
|
||||||
mkdirSync(sansTo, { recursive: true })
|
|
||||||
}
|
|
||||||
|
|
||||||
copySync(sansFrom, sansTo, {
|
|
||||||
dereference: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
console.log(`Successfully copied geist-sans fonts`)
|
|
||||||
} else {
|
|
||||||
console.warn(`Warning: geist-sans fonts not found at ${sansFrom}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,64 +1,5 @@
|
|||||||
# @tabler/core
|
# @tabler/core
|
||||||
|
|
||||||
## 1.5.0
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 5e119d4: Added Pay page with dedicated layout, navigation link, and card/PayPal payment form.
|
|
||||||
- 9c5d729: Added `.btn-ghost` button variant with transparent background and hover effects.
|
|
||||||
- ec94693: Added `.card-gradient` component with gradient variants, direction modifiers, and animated backgrounds.
|
|
||||||
- a198b0c: Added Geist font family integration.
|
|
||||||
- 8d8727f: Added language selector dropdown to navbar with flag indicators for multilingual support.
|
|
||||||
- 4ce08ca: Refactored navbar-side component by consolidating separate include files (apps, language, notifications, theme, user) into a single `navbar-side.html` file for better maintainability.
|
|
||||||
- 9c5d729: Added Progress Background component with text labels and value display.
|
|
||||||
- 9c5d729: Added `.progress-lg` and `.progress-xl` size variants for the progress component.
|
|
||||||
- 9c5d729: Added Progress Steps component for step-by-step navigation indicators.
|
|
||||||
- e3d86c5: Upgraded `apexcharts` from `3.54.1` to `5.3.6` and added CSS variables (`--chart-{id}-color-{index}`) for dynamic chart colors to fix compatibility with the new version.
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 059bae1: Refactored Bootstrap exports to use single source of truth in `bootstrap.js` and removed duplicate exports from `tabler.js` for better maintainability.
|
|
||||||
- 5018aa9: Fixed `.btn-icon` to be square by aligning `min-width` calculation with base `.btn` formula.
|
|
||||||
- c860288: Fixed icon alignment for `.btn-sm` and `.btn-xl` sizes.
|
|
||||||
- 2dc7eda: Updated `$border-color-translucent-dark` from `rgba(72, 110, 149, 0.14)` to `rgba(128, 150, 172, 0.2)` to improve visibility of form checkboxes and other form elements in dark mode.
|
|
||||||
- 6e656ad: Fixed `.input-icon-addon` z-index issue with form validation feedback and added default height.
|
|
||||||
- 8bc6fa7: Fixed status color classes to use CSS variables instead of hardcoded values and include social colors (bitbucket, facebook, etc.) in status class generation.
|
|
||||||
- e206d7a: Fixed white space on left side when scrollbar is present by replacing `margin-inline-start: calc(100vw - 100%)` with `scrollbar-gutter: stable` on `html` element, with `overflow-y: scroll` fallback for unsupported browsers.
|
|
||||||
- 4ce08ca: Updated flags and avatars styling for better visual consistency.
|
|
||||||
- b8b63d7: Fixed mixed declarations in SCSS.
|
|
||||||
- 0106d6b: Update SCSS to use logical properties
|
|
||||||
- 9c5d729: Updated `stroke-width` for `.icon-sm` from `1` to `1.5` for better visibility.
|
|
||||||
- 5e119d4: Added `bg-blur` utility and increased `container-tight` width for layout flexibility.
|
|
||||||
- 3aba62e: Added `border-top-left-radius` and `border-top-right-radius` to first and last child elements in `.card-table` for proper corner rounding.
|
|
||||||
- 0c79963: Added `media-print` mixin and print styles to hide interactive components during printing.
|
|
||||||
- 9a3361f: Fixed double bottom border in tables.
|
|
||||||
- 9c5d729: Added smooth transitions for progress bar `width` and `background-color` changes.
|
|
||||||
- 41ed22a: Removed redundant nullish coalescing operator from `html` option in popover and tooltip initialization.
|
|
||||||
- 83ec6f8: Added Driver.js library integration and Tour demo page for interactive product tours and onboarding guides.
|
|
||||||
- 9c5d729: Updated skip-link to use `visually-hidden` for improved accessibility.
|
|
||||||
- 736e604: Updated deprecated global Sass functions to module equivalents (`map.merge`, `string.slice`, `math.percentage`, etc.).
|
|
||||||
- f8dee0a: Updated Bootstrap to v5.3.8.
|
|
||||||
- 9c5d729: Updated trending component to use `arrow-up`/`arrow-down` instead of `trending-up`/`trending-down`.
|
|
||||||
|
|
||||||
## 1.4.0
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 9951fe9: Enhance button and hover animations
|
|
||||||
- a200d30: Improve breadcrumb styles
|
|
||||||
- 49ab9ea: Add new Tabler Illustrations
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 6c4dd36: Update class names from `*-left`, `*-right` to `*-start`, `*-end`
|
|
||||||
- 6fec73a: Fix relative line heights in buttons
|
|
||||||
- db6200a: Remove `license_key` option from HugeRTE init object
|
|
||||||
- e96f055: Add different favicon to development environment
|
|
||||||
- 6c38a48: Update Bootstrap to v5.3.7
|
|
||||||
- 2a12f72: Update CSS calculations to use `calc()`
|
|
||||||
- 666a296: Fix list group item hoverable only with `.list-group-hoverable` class
|
|
||||||
- cfd4cb6: Fix `.pagination-link` hover styles to non-active items
|
|
||||||
|
|
||||||
## 1.3.2
|
## 1.3.2
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none" viewBox="0 0 20 15"><path fill="#3d58db" fill-rule="evenodd" d="M0 0v15h20V0z" clip-rule="evenodd"/><path fill="#ffd018" fill-rule="evenodd" d="m9.407 2.442-.14.818.733-.385.735.386-.14-.818.594-.64h-.821L10 1l-.367.804h-.822zm0 10.855-.14.819.734-.387.735.387-.14-.819.594-.639h-.821L10 11.855l-.367.804h-.822l.595.64zM3.484 8.743l.14-.818-.594-.64h.822l.367-.803.367.804h.822l-.595.639.14.818-.734-.386zm1.352 1.77-.14.818.734-.386.735.386-.14-.818.594-.64h-.821L5.43 9.07l-.367.804H4.24zm9.009.818.14-.818-.595-.64h.822l.367-.803.368.804h.821l-.594.639.14.818-.735-.386zm-9.01-6.062-.14.818.735-.386.735.386-.14-.818.594-.639h-.821l-.368-.804-.367.804H4.24zm9.01.818.14-.818-.595-.639h.822l.367-.804.368.804h.821l-.594.64.14.817-.735-.386zM6.66 12.595l-.14.819.735-.387.734.386-.14-.818.595-.639h-.822l-.367-.804-.368.804h-.821zm5.418.819.14-.819-.594-.639h.821l.367-.804.368.804h.821l-.594.64.14.817-.735-.386zM6.52 3.971l.735-.387.734.387-.14-.818.595-.64h-.822l-.367-.804-.368.804h-.821l.594.64zm5.558 0 .14-.818-.594-.64h.821l.367-.804.368.804h.821l-.594.64.14.818-.735-.387zM15.14 7.85l-.14.818.735-.386.735.386-.14-.818.593-.64h-.82l-.368-.803-.368.804h-.821z" clip-rule="evenodd"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" width="21" height="16" fill="none"><mask id="a" width="21" height="16" x="0" y="0" mask-type="alpha" maskUnits="userSpaceOnUse"><path fill="#fff" d="M.001.927h20v15h-20z"/></mask><g mask="url(#a)"><path fill="#F7FCFF" fill-rule="evenodd" d="M.001.927v15h20v-15h-20Z" clip-rule="evenodd"/><mask id="b" width="21" height="16" x="0" y="0" mask-type="alpha" maskUnits="userSpaceOnUse"><path fill="#fff" fill-rule="evenodd" d="M.001.927v15h20v-15h-20Z" clip-rule="evenodd"/></mask><g fill-rule="evenodd" clip-rule="evenodd" mask="url(#b)"><path fill="#3D58DB" d="M.001.927v15h20v-15h-20Z"/><path fill="#FFD018" d="m9.407 3.137-.14.818L10 3.57l.735.386-.14-.818.594-.64h-.821L10 1.695l-.367.804h-.822l.595.639Zm0 10.855-.14.819.734-.387.735.387-.14-.819.594-.639h-.821L10 12.55l-.367.804h-.822l.595.64ZM3.484 9.438l.14-.818-.594-.64h.822l.367-.803.367.804h.822l-.595.639.14.818-.734-.386-.735.386Zm1.352 1.77-.14.818.734-.386.735.386-.14-.818.594-.64h-.821l-.368-.803-.367.804H4.24l.595.639Zm9.009.818.14-.818-.595-.64h.822l.367-.803.368.804h.821l-.594.639.14.818-.735-.386-.734.386Zm-9.01-6.062-.14.818.735-.386.735.386-.14-.818.594-.639h-.821l-.368-.804-.367.804H4.24l.595.64Zm9.01.818.14-.818-.595-.639h.822l.367-.804.368.804h.821l-.594.64.14.817-.735-.386-.734.386ZM6.66 13.29l-.14.819.735-.387.734.386-.14-.818.595-.639h-.822l-.367-.804-.368.804h-.821l.594.64Zm5.418.819.14-.819-.594-.639h.821l.367-.804.368.804h.821l-.594.64.14.817-.735-.386-.734.386ZM6.52 4.666l.735-.387.734.387-.14-.818.595-.64h-.822l-.367-.804-.368.804h-.821l.594.64-.14.818Zm5.558 0 .14-.818-.594-.64h.821l.367-.804.368.804h.821l-.594.64.14.818-.735-.387-.734.387Zm3.062 3.879-.14.818.735-.386.735.386-.14-.818.593-.64h-.82l-.368-.803-.368.804h-.821l.594.639Z"/></g></g></svg>
|
||||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -1,8 +1,7 @@
|
|||||||
// Autosize plugin
|
// Autosize plugin
|
||||||
const elements = document.querySelectorAll('[data-bs-toggle="autosize"]')
|
const elements = document.querySelectorAll('[data-bs-toggle="autosize"]');
|
||||||
|
|
||||||
if (elements.length) {
|
if (elements.length) {
|
||||||
elements.forEach(function (element) {
|
elements.forEach(function (element) {
|
||||||
window.autosize && window.autosize(element)
|
window.autosize && window.autosize(element);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
21
core/js/src/bootstrap.js
vendored
21
core/js/src/bootstrap.js
vendored
@@ -1,20 +1,3 @@
|
|||||||
export * as Popper from '@popperjs/core'
|
export * as Popper from '@popperjs/core';
|
||||||
|
|
||||||
// Export all Bootstrap components directly for consistent usage
|
export { Dropdown, Tooltip, Popover, Tab, Toast } from 'bootstrap';
|
||||||
export {
|
|
||||||
Alert,
|
|
||||||
Button,
|
|
||||||
Carousel,
|
|
||||||
Collapse,
|
|
||||||
Dropdown,
|
|
||||||
Modal,
|
|
||||||
Offcanvas,
|
|
||||||
Popover,
|
|
||||||
ScrollSpy,
|
|
||||||
Tab,
|
|
||||||
Toast,
|
|
||||||
Tooltip
|
|
||||||
} from 'bootstrap'
|
|
||||||
|
|
||||||
// Re-export everything as namespace for backward compatibility
|
|
||||||
export * as bootstrap from 'bootstrap'
|
|
||||||
@@ -1,25 +1,23 @@
|
|||||||
const elements = document.querySelectorAll('[data-countup]')
|
const elements = document.querySelectorAll('[data-countup]');
|
||||||
|
|
||||||
if (elements.length) {
|
if (elements.length) {
|
||||||
elements.forEach(function (element) {
|
elements.forEach(function (element) {
|
||||||
let options = {}
|
let options = {};
|
||||||
try {
|
try {
|
||||||
const dataOptions = element.getAttribute('data-countup') ? JSON.parse(element.getAttribute('data-countup')) : {}
|
const dataOptions = element.getAttribute('data-countup') ? JSON.parse(element.getAttribute('data-countup')) : {};
|
||||||
options = Object.assign(
|
options = Object.assign({
|
||||||
{
|
'enableScrollSpy': true
|
||||||
enableScrollSpy: true,
|
}, dataOptions);
|
||||||
},
|
|
||||||
dataOptions,
|
} catch (error) {}
|
||||||
)
|
|
||||||
} catch (error) {}
|
|
||||||
|
|
||||||
const value = parseInt(element.innerHTML, 10)
|
const value = parseInt(element.innerHTML, 10);
|
||||||
|
|
||||||
if (window.countUp && window.countUp.CountUp) {
|
if (window.countUp && window.countUp.CountUp) {
|
||||||
const countUp = new window.countUp.CountUp(element, value, options)
|
const countUp = new window.countUp.CountUp(element, value, options);
|
||||||
if (!countUp.error) {
|
if (!countUp.error) {
|
||||||
countUp.start()
|
countUp.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { Dropdown } from './bootstrap'
|
import { Dropdown } from './bootstrap';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Core dropdowns
|
Core dropdowns
|
||||||
*/
|
*/
|
||||||
let dropdownTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="dropdown"]'))
|
let dropdownTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="dropdown"]'));
|
||||||
dropdownTriggerList.map(function (dropdownTriggerEl) {
|
dropdownTriggerList.map(function (dropdownTriggerEl) {
|
||||||
let options = {
|
let options = {
|
||||||
boundary: dropdownTriggerEl.getAttribute('data-bs-boundary') === 'viewport' ? document.querySelector('.btn') : 'clippingParents',
|
boundary: dropdownTriggerEl.getAttribute('data-bs-boundary') === 'viewport' ? document.querySelector('.btn') : 'clippingParents',
|
||||||
}
|
}
|
||||||
return new Dropdown(dropdownTriggerEl, options)
|
return new Dropdown(dropdownTriggerEl, options);
|
||||||
})
|
});
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
// Input mask plugin
|
// Input mask plugin
|
||||||
|
|
||||||
var maskElementList = [].slice.call(document.querySelectorAll('[data-mask]'))
|
var maskElementList = [].slice.call(document.querySelectorAll('[data-mask]'));
|
||||||
maskElementList.map(function (maskEl) {
|
maskElementList.map(function (maskEl) {
|
||||||
window.IMask &&
|
window.IMask && new window.IMask(maskEl, {
|
||||||
new window.IMask(maskEl, {
|
mask: maskEl.dataset.mask,
|
||||||
mask: maskEl.dataset.mask,
|
lazy: maskEl.dataset['mask-visible'] === 'true'
|
||||||
lazy: maskEl.dataset['mask-visible'] === 'true',
|
})
|
||||||
})
|
});
|
||||||
})
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
import { Popover } from './bootstrap'
|
import { Popover } from './bootstrap';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Core popovers
|
Core popovers
|
||||||
*/
|
*/
|
||||||
let popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
|
let popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
|
||||||
popoverTriggerList.map(function (popoverTriggerEl) {
|
popoverTriggerList.map(function (popoverTriggerEl) {
|
||||||
let options = {
|
let options = {
|
||||||
delay: { show: 50, hide: 50 },
|
delay: {show: 50, hide: 50},
|
||||||
html: popoverTriggerEl.getAttribute('data-bs-html') === 'true',
|
html: popoverTriggerEl.getAttribute('data-bs-html') === "true" ?? false,
|
||||||
placement: popoverTriggerEl.getAttribute('data-bs-placement') ?? 'auto',
|
placement: popoverTriggerEl.getAttribute('data-bs-placement') ?? 'auto'
|
||||||
}
|
};
|
||||||
return new Popover(popoverTriggerEl, options)
|
return new Popover(popoverTriggerEl, options);
|
||||||
})
|
});
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
// SortableJS plugin
|
|
||||||
// Initializes Sortable on elements marked with [data-sortable]
|
|
||||||
// Allows options via JSON in data attribute: data-sortable='{"animation":150}'
|
|
||||||
|
|
||||||
const sortableElements = document.querySelectorAll('[data-sortable]')
|
|
||||||
|
|
||||||
if (sortableElements.length) {
|
|
||||||
sortableElements.forEach(function (element) {
|
|
||||||
let options = {}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const rawOptions = element.getAttribute('data-sortable')
|
|
||||||
options = rawOptions ? JSON.parse(rawOptions) : {}
|
|
||||||
} catch (e) {
|
|
||||||
// ignore invalid JSON
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window.Sortable) {
|
|
||||||
// eslint-disable-next-line no-new
|
|
||||||
new window.Sortable(element, options)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
Switch icons
|
Switch icons
|
||||||
*/
|
*/
|
||||||
let switchesTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="switch-icon"]'))
|
let switchesTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="switch-icon"]'));
|
||||||
switchesTriggerList.map(function (switchTriggerEl) {
|
switchesTriggerList.map(function (switchTriggerEl) {
|
||||||
switchTriggerEl.addEventListener('click', (e) => {
|
switchTriggerEl.addEventListener('click', (e) => {
|
||||||
e.stopPropagation()
|
e.stopPropagation();
|
||||||
|
|
||||||
switchTriggerEl.classList.toggle('active')
|
switchTriggerEl.classList.toggle('active');
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
import { Tab } from './bootstrap'
|
import { Tab } from './bootstrap';
|
||||||
|
|
||||||
export const EnableActivationTabsFromLocationHash = () => {
|
export const EnableActivationTabsFromLocationHash = () => {
|
||||||
const locationHash = window.location.hash
|
const locationHash = window.location.hash;
|
||||||
|
|
||||||
if (locationHash) {
|
if (locationHash) {
|
||||||
const tabsList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tab"]'))
|
const tabsList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tab"]'));
|
||||||
const matchedTabs = tabsList.filter((tab) => tab.hash === locationHash)
|
const matchedTabs = tabsList.filter(tab => tab.hash === locationHash);
|
||||||
|
|
||||||
matchedTabs.map((tab) => {
|
matchedTabs.map(tab => {
|
||||||
new Tab(tab).show()
|
new Tab(tab).show();
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ export const getColor = (color, opacity = 1) => {
|
|||||||
const c = getComputedStyle(document.body).getPropertyValue(`--${prefix}${color}`).trim()
|
const c = getComputedStyle(document.body).getPropertyValue(`--${prefix}${color}`).trim()
|
||||||
|
|
||||||
if (opacity !== 1) {
|
if (opacity !== 1) {
|
||||||
return hexToRgba(c, opacity)
|
return hexToRgba(c, opacity)
|
||||||
}
|
}
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
import { Toast } from './bootstrap'
|
import { Toast } from './bootstrap';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Toasts
|
Toasts
|
||||||
*/
|
*/
|
||||||
let toastsTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="toast"]'))
|
let toastsTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="toast"]'));
|
||||||
toastsTriggerList.map(function (toastTriggerEl) {
|
toastsTriggerList.map(function (toastTriggerEl) {
|
||||||
if (!toastTriggerEl.hasAttribute('data-bs-target')) {
|
if (!toastTriggerEl.hasAttribute('data-bs-target')) {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const toastEl = new Toast(toastTriggerEl.getAttribute('data-bs-target'))
|
const toastEl = new Toast(toastTriggerEl.getAttribute('data-bs-target'));
|
||||||
|
|
||||||
toastTriggerEl.addEventListener('click', () => {
|
toastTriggerEl.addEventListener('click', () => {
|
||||||
toastEl.show()
|
toastEl.show()
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
import { Tooltip } from './bootstrap'
|
import { Tooltip } from './bootstrap';
|
||||||
|
|
||||||
let tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
|
let tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
|
||||||
tooltipTriggerList.map(function (tooltipTriggerEl) {
|
tooltipTriggerList.map(function (tooltipTriggerEl) {
|
||||||
let options = {
|
let options = {
|
||||||
delay: { show: 50, hide: 50 },
|
delay: {show: 50, hide: 50},
|
||||||
html: tooltipTriggerEl.getAttribute('data-bs-html') === 'true',
|
html: tooltipTriggerEl.getAttribute("data-bs-html") === "true" ?? false,
|
||||||
placement: tooltipTriggerEl.getAttribute('data-bs-placement') ?? 'auto',
|
placement: tooltipTriggerEl.getAttribute('data-bs-placement') ?? 'auto'
|
||||||
}
|
};
|
||||||
return new Tooltip(tooltipTriggerEl, options)
|
return new Tooltip(tooltipTriggerEl, options);
|
||||||
})
|
});
|
||||||
@@ -4,32 +4,32 @@
|
|||||||
* This will prevent any flashes of the light theme (default) before switching.
|
* This will prevent any flashes of the light theme (default) before switching.
|
||||||
*/
|
*/
|
||||||
const themeConfig = {
|
const themeConfig = {
|
||||||
'theme': 'light',
|
"theme": "light",
|
||||||
'theme-base': 'gray',
|
"theme-base": "gray",
|
||||||
'theme-font': 'sans-serif',
|
"theme-font": "sans-serif",
|
||||||
'theme-primary': 'blue',
|
"theme-primary": "blue",
|
||||||
'theme-radius': '1',
|
"theme-radius": "1",
|
||||||
}
|
}
|
||||||
|
|
||||||
const params = new Proxy(new URLSearchParams(window.location.search), {
|
const params = new Proxy(new URLSearchParams(window.location.search), {
|
||||||
get: (searchParams, prop) => searchParams.get(prop),
|
get: (searchParams, prop) => searchParams.get(prop),
|
||||||
})
|
})
|
||||||
|
|
||||||
for (const key in themeConfig) {
|
for (const key in themeConfig) {
|
||||||
const param = params[key]
|
const param = params[key]
|
||||||
let selectedValue
|
let selectedValue
|
||||||
|
|
||||||
if (!!param) {
|
if (!!param) {
|
||||||
localStorage.setItem('tabler-' + key, param)
|
localStorage.setItem('tabler-' + key, param)
|
||||||
selectedValue = param
|
selectedValue = param
|
||||||
} else {
|
} else {
|
||||||
const storedTheme = localStorage.getItem('tabler-' + key)
|
const storedTheme = localStorage.getItem('tabler-' + key)
|
||||||
selectedValue = storedTheme ? storedTheme : themeConfig[key]
|
selectedValue = storedTheme ? storedTheme : themeConfig[key]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selectedValue !== themeConfig[key]) {
|
if (selectedValue !== themeConfig[key]) {
|
||||||
document.documentElement.setAttribute('data-bs-' + key, selectedValue)
|
document.documentElement.setAttribute('data-bs-' + key, selectedValue)
|
||||||
} else {
|
} else {
|
||||||
document.documentElement.removeAttribute('data-bs-' + key)
|
document.documentElement.removeAttribute('data-bs-' + key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,27 @@
|
|||||||
import './src/autosize'
|
import "./src/autosize"
|
||||||
import './src/countup'
|
import "./src/countup"
|
||||||
import './src/input-mask'
|
import "./src/input-mask"
|
||||||
import './src/dropdown'
|
import "./src/dropdown"
|
||||||
import './src/tooltip'
|
import "./src/tooltip"
|
||||||
import './src/popover'
|
import "./src/popover"
|
||||||
import './src/switch-icon'
|
import "./src/switch-icon"
|
||||||
import './src/tab'
|
import "./src/tab"
|
||||||
import './src/toast'
|
import "./src/toast"
|
||||||
import './src/sortable'
|
|
||||||
|
|
||||||
// Re-export everything from bootstrap.js (single source of truth)
|
export * as bootstrap from "bootstrap"
|
||||||
export * from './src/bootstrap'
|
export * as tabler from "./src/tabler"
|
||||||
|
|
||||||
// Re-export tabler namespace
|
export {
|
||||||
export * as tabler from './src/tabler'
|
Alert,
|
||||||
|
Modal,
|
||||||
|
Toast,
|
||||||
|
Tooltip,
|
||||||
|
Tab,
|
||||||
|
Button,
|
||||||
|
Carousel,
|
||||||
|
Collapse,
|
||||||
|
Dropdown,
|
||||||
|
Popover,
|
||||||
|
ScrollSpy,
|
||||||
|
Offcanvas
|
||||||
|
} from 'bootstrap'
|
||||||
|
|||||||
@@ -38,12 +38,6 @@
|
|||||||
"dist/list.min.js"
|
"dist/list.min.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"sortablejs": {
|
|
||||||
"npm": "sortablejs",
|
|
||||||
"js": [
|
|
||||||
"Sortable.min.js"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"masonry": {
|
"masonry": {
|
||||||
"js": [
|
"js": [
|
||||||
"https://cdnjs.cloudflare.com/ajax/libs/masonry/4.2.2/masonry.pkgd.min.js"
|
"https://cdnjs.cloudflare.com/ajax/libs/masonry/4.2.2/masonry.pkgd.min.js"
|
||||||
@@ -166,14 +160,5 @@
|
|||||||
"dist/turbo.es2017-umd.js"
|
"dist/turbo.es2017-umd.js"
|
||||||
],
|
],
|
||||||
"head": true
|
"head": true
|
||||||
},
|
|
||||||
"driver.js": {
|
|
||||||
"npm": "driver.js",
|
|
||||||
"js": [
|
|
||||||
"dist/driver.js.iife.js"
|
|
||||||
],
|
|
||||||
"css": [
|
|
||||||
"dist/driver.css"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,46 +1,41 @@
|
|||||||
{
|
{
|
||||||
"name": "@tabler/core",
|
"name": "@tabler/core",
|
||||||
"version": "1.5.0",
|
"version": "1.3.2",
|
||||||
"description": "Premium and Open Source dashboard template with responsive and high quality UI.",
|
"description": "Premium and Open Source dashboard template with responsive and high quality UI.",
|
||||||
"homepage": "https://tabler.io",
|
"homepage": "https://tabler.io",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "pnpm run clean && pnpm run copy && pnpm run watch",
|
"dev": "pnpm run clean && pnpm run copy && pnpm run watch",
|
||||||
"build": "pnpm run clean && pnpm run build-assets && pnpm run copy && pnpm run generate-sri",
|
"build": "pnpm run clean && pnpm run css && pnpm run js && pnpm run copy && pnpm run generate-sri",
|
||||||
"build-assets": "concurrently \"pnpm run css\" \"pnpm run js\"",
|
|
||||||
"clean": "shx rm -rf dist demo",
|
"clean": "shx rm -rf dist demo",
|
||||||
"css": "pnpm run css-compile && pnpm run css-prefix && pnpm run css-rtl && pnpm run css-minify && pnpm run css-banner",
|
"css": "pnpm run css-compile && pnpm run css-prefix && pnpm run css-rtl && pnpm run css-minify && pnpm run css-banner",
|
||||||
"css-compile": "sass --no-source-map --load-path=node_modules --style expanded scss/:dist/css/",
|
"css-compile": "sass scss/:dist/css/ --no-source-map --load-path=node_modules",
|
||||||
"css-banner": "node .build/add-banner.mjs",
|
"css-banner": "node .build/add-banner.mjs",
|
||||||
"css-prefix": "postcss --config .build/postcss.config.mjs --replace \"dist/css/*.css\" \"!dist/css/*.rtl*.css\" \"!dist/css/*.min.css\"",
|
"css-prefix": "postcss --config .build/postcss.config.mjs --replace \"dist/css/*.css\" \"!dist/css/*.rtl*.css\" \"!dist/css/*.min.css\"",
|
||||||
"css-rtl": "cross-env NODE_ENV=RTL postcss --config .build/postcss.config.mjs --dir \"dist/css\" --ext \".rtl.css\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*.rtl.css\"",
|
"css-rtl": "cross-env NODE_ENV=RTL postcss --config .build/postcss.config.mjs --dir \"dist/css\" --ext \".rtl.css\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*.rtl.css\"",
|
||||||
"css-minify": "concurrently \"pnpm run css-minify-main\" \"pnpm run css-minify-rtl\"",
|
"css-minify": "pnpm run css-minify-main && pnpm run css-minify-rtl",
|
||||||
"css-minify-main": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix \".min\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*rtl*.css\"",
|
"css-minify-main": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix \".min\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*rtl*.css\"",
|
||||||
"css-minify-rtl": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix \".min\" \"dist/css/*rtl.css\" \"!dist/css/*.min.css\"",
|
"css-minify-rtl": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix \".min\" \"dist/css/*rtl.css\" \"!dist/css/*.min.css\"",
|
||||||
"css-lint": "pnpm run css-lint-variables",
|
|
||||||
"css-lint-variables": "find-unused-sass-variables scss/ node_modules/bootstrap/scss/",
|
|
||||||
"js": "pnpm run js-compile && pnpm run js-minify",
|
"js": "pnpm run js-compile && pnpm run js-minify",
|
||||||
"js-compile": "concurrently \"pnpm run js-compile-standalone\" \"pnpm run js-compile-standalone-esm\" \"pnpm run js-compile-theme\" \"pnpm run js-compile-theme-esm\"",
|
"js-compile": "pnpm run js-compile-standalone && pnpm run js-compile-standalone-esm && pnpm run js-compile-theme && pnpm run js-compile-theme-esm",
|
||||||
"js-compile-theme-esm": "rollup --environment THEME:true --environment ESM:true --config .build/rollup.config.mjs --sourcemap",
|
"js-compile-theme-esm": "rollup --environment THEME:true --environment ESM:true --config .build/rollup.config.mjs --sourcemap",
|
||||||
"js-compile-theme": "rollup --environment THEME:true --config .build/rollup.config.mjs --sourcemap",
|
"js-compile-theme": "rollup --environment THEME:true --config .build/rollup.config.mjs --sourcemap",
|
||||||
"js-compile-standalone": "rollup --config .build/rollup.config.mjs --sourcemap",
|
"js-compile-standalone": "rollup --config .build/rollup.config.mjs --sourcemap",
|
||||||
"js-compile-standalone-esm": "rollup --environment ESM:true --config .build/rollup.config.mjs --sourcemap",
|
"js-compile-standalone-esm": "rollup --environment ESM:true --config .build/rollup.config.mjs --sourcemap",
|
||||||
"js-minify": "concurrently \"pnpm run js-minify-standalone\" \"pnpm run js-minify-standalone-esm\" \"pnpm run js-minify-theme\" \"pnpm run js-minify-theme-esm\"",
|
"js-minify": "pnpm run js-minify-standalone && pnpm run js-minify-standalone-esm && pnpm run js-minify-theme && pnpm run js-minify-theme-esm",
|
||||||
"js-minify-standalone": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/tabler.js.map,includeSources,url=tabler.min.js.map\" --output dist/js/tabler.min.js dist/js/tabler.js",
|
"js-minify-standalone": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/tabler.js.map,includeSources,url=tabler.min.js.map\" --output dist/js/tabler.min.js dist/js/tabler.js",
|
||||||
"js-minify-standalone-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/tabler.esm.js.map,includeSources,url=tabler.esm.min.js.map\" --output dist/js/tabler.esm.min.js dist/js/tabler.esm.js",
|
"js-minify-standalone-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/tabler.esm.js.map,includeSources,url=tabler.esm.min.js.map\" --output dist/js/tabler.esm.min.js dist/js/tabler.esm.js",
|
||||||
"js-minify-theme": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/tabler-theme.js.map,includeSources,url=tabler-theme.min.js.map\" --output dist/js/tabler-theme.min.js dist/js/tabler-theme.js",
|
"js-minify-theme": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/tabler-theme.js.map,includeSources,url=tabler-theme.min.js.map\" --output dist/js/tabler-theme.min.js dist/js/tabler-theme.js",
|
||||||
"js-minify-theme-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/tabler-theme.esm.js.map,includeSources,url=tabler-theme.esm.min.js.map\" --output dist/js/tabler-theme.esm.min.js dist/js/tabler-theme.esm.js",
|
"js-minify-theme-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/tabler-theme.esm.js.map,includeSources,url=tabler-theme.esm.min.js.map\" --output dist/js/tabler-theme.esm.min.js dist/js/tabler-theme.esm.js",
|
||||||
"copy": "concurrently \"pnpm run copy-img\" \"pnpm run copy-libs\" \"pnpm run copy-fonts\"",
|
"copy": "pnpm run copy-img && pnpm run copy-libs",
|
||||||
"copy-img": "shx mkdir -p dist/img && shx cp -rf img/* dist/img",
|
"copy-img": "shx mkdir -p dist/img && shx cp -rf img/* dist/img",
|
||||||
"copy-libs": "node .build/copy-libs.mjs",
|
"copy-libs": "node .build/copy-libs.mjs",
|
||||||
"copy-fonts": "shx mkdir -p dist/fonts && shx cp -rf fonts/* dist/fonts",
|
|
||||||
"import-fonts": "node .build/import-fonts.mjs",
|
|
||||||
"watch": "concurrently \"pnpm run watch-css\" \"pnpm run watch-js\"",
|
"watch": "concurrently \"pnpm run watch-css\" \"pnpm run watch-js\"",
|
||||||
"watch-css": "nodemon --watch scss/ --ext scss --exec \"pnpm run css-compile && pnpm run css-prefix\"",
|
"watch-css": "nodemon --watch scss/ --ext scss --exec \"pnpm run css-compile && pnpm run css-prefix\"",
|
||||||
"watch-js": "nodemon --watch js/ --ext js --exec \"pnpm run js-compile\"",
|
"watch-js": "nodemon --watch js/ --ext js --exec \"pnpm run js-compile\"",
|
||||||
"bundlewatch": "bundlewatch",
|
"bundlewatch": "bundlewatch",
|
||||||
"generate-sri": "node .build/generate-sri.js",
|
"generate-sri": "node .build/generate-sri.js",
|
||||||
"format:check": "prettier --check \"scss/**/*.scss\" \"js/**/*.js\" --cache",
|
"format:check": "prettier --check src/**/*.{js,scss} --cache",
|
||||||
"format:write": "prettier --write \"scss/**/*.scss\" \"js/**/*.js\" --cache"
|
"format:write": "prettier --write src/**/*.{js,scss} --cache"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -151,35 +146,31 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@popperjs/core": "^2.11.8",
|
"@popperjs/core": "^2.11.8",
|
||||||
"bootstrap": "5.3.8"
|
"bootstrap": "5.3.6"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@hotwired/turbo": "^8.0.18",
|
"@hotwired/turbo": "^8.0.13",
|
||||||
"@melloware/coloris": "^0.25.0",
|
"@melloware/coloris": "^0.24.2",
|
||||||
"apexcharts": "^5.3.6",
|
"apexcharts": "3.54.1",
|
||||||
"autosize": "^6.0.1",
|
"autosize": "^6.0.1",
|
||||||
"choices.js": "^11.1.0",
|
"choices.js": "^11.1.0",
|
||||||
"clipboard": "^2.0.11",
|
"clipboard": "^2.0.11",
|
||||||
"countup.js": "^2.9.0",
|
"countup.js": "^2.8.2",
|
||||||
"dropzone": "^6.0.0-beta.2",
|
"dropzone": "^6.0.0-beta.2",
|
||||||
"find-unused-sass-variables": "^6.1.0",
|
|
||||||
"flatpickr": "^4.6.13",
|
"flatpickr": "^4.6.13",
|
||||||
"fslightbox": "^3.7.4",
|
"fslightbox": "^3.6.0",
|
||||||
"fullcalendar": "^6.1.19",
|
"fullcalendar": "^6.1.17",
|
||||||
"geist": "^1.5.1",
|
|
||||||
"hugerte": "^1.0.9",
|
"hugerte": "^1.0.9",
|
||||||
"imask": "^7.6.1",
|
"imask": "^7.6.1",
|
||||||
"jsvectormap": "^1.7.0",
|
"jsvectormap": "^1.6.0",
|
||||||
"list.js": "^2.3.1",
|
"list.js": "^2.3.1",
|
||||||
"litepicker": "^2.0.12",
|
"litepicker": "^2.0.12",
|
||||||
"nouislider": "^15.8.1",
|
"nouislider": "^15.8.1",
|
||||||
"plyr": "^3.8.3",
|
"plyr": "^3.7.8",
|
||||||
"signature_pad": "^5.1.1",
|
"signature_pad": "^5.0.7",
|
||||||
"sortablejs": "^1.15.6",
|
|
||||||
"star-rating.js": "^4.3.1",
|
"star-rating.js": "^4.3.1",
|
||||||
"tom-select": "^2.4.3",
|
"tom-select": "^2.4.3",
|
||||||
"typed.js": "^2.1.0",
|
"typed.js": "^2.1.0"
|
||||||
"driver.js": "^1.0.0"
|
|
||||||
},
|
},
|
||||||
"directories": {
|
"directories": {
|
||||||
"doc": "docs"
|
"doc": "docs"
|
||||||
|
|||||||
@@ -1,30 +1,41 @@
|
|||||||
// Layout & components
|
// Layout & components
|
||||||
@import 'bootstrap/scss/root';
|
@layer props {
|
||||||
@import 'bootstrap/scss/reboot';
|
@import "bootstrap/scss/root";
|
||||||
@import 'bootstrap/scss/type';
|
}
|
||||||
@import 'bootstrap/scss/images';
|
|
||||||
@import 'bootstrap/scss/containers';
|
@layer reset {
|
||||||
@import 'bootstrap/scss/grid';
|
@import "bootstrap/scss/reboot";
|
||||||
@import 'bootstrap/scss/tables';
|
@import "bootstrap/scss/type";
|
||||||
@import 'bootstrap/scss/forms';
|
}
|
||||||
@import 'bootstrap/scss/buttons';
|
|
||||||
@import 'bootstrap/scss/transitions';
|
@layer components {
|
||||||
@import 'bootstrap/scss/dropdown';
|
@import "bootstrap/scss/images";
|
||||||
@import 'bootstrap/scss/button-group';
|
@import "bootstrap/scss/containers";
|
||||||
@import 'bootstrap/scss/nav';
|
@import "bootstrap/scss/grid";
|
||||||
@import 'bootstrap/scss/navbar';
|
@import "bootstrap/scss/tables";
|
||||||
@import 'bootstrap/scss/card';
|
@import "bootstrap/scss/forms";
|
||||||
@import 'bootstrap/scss/pagination';
|
@import "bootstrap/scss/buttons";
|
||||||
@import 'bootstrap/scss/progress';
|
@import "bootstrap/scss/transitions";
|
||||||
@import 'bootstrap/scss/list-group';
|
@import "bootstrap/scss/dropdown";
|
||||||
@import 'bootstrap/scss/toasts';
|
@import "bootstrap/scss/button-group";
|
||||||
@import 'bootstrap/scss/modal';
|
@import "bootstrap/scss/nav";
|
||||||
@import 'bootstrap/scss/tooltip';
|
@import "bootstrap/scss/navbar";
|
||||||
@import 'bootstrap/scss/popover';
|
@import "bootstrap/scss/card";
|
||||||
@import 'bootstrap/scss/carousel';
|
@import "bootstrap/scss/breadcrumb";
|
||||||
@import 'bootstrap/scss/spinners';
|
@import "bootstrap/scss/pagination";
|
||||||
@import 'bootstrap/scss/offcanvas';
|
@import "bootstrap/scss/progress";
|
||||||
@import 'bootstrap/scss/placeholders';
|
@import "bootstrap/scss/list-group";
|
||||||
|
@import "bootstrap/scss/toasts";
|
||||||
|
@import "bootstrap/scss/modal";
|
||||||
|
@import "bootstrap/scss/tooltip";
|
||||||
|
@import "bootstrap/scss/popover";
|
||||||
|
@import "bootstrap/scss/carousel";
|
||||||
|
@import "bootstrap/scss/spinners";
|
||||||
|
@import "bootstrap/scss/offcanvas";
|
||||||
|
@import "bootstrap/scss/placeholders";
|
||||||
|
}
|
||||||
|
|
||||||
// Utilities
|
// Utilities
|
||||||
@import 'bootstrap/scss/utilities/api';
|
@layer utilities {
|
||||||
|
@import "bootstrap/scss/utilities/api";
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
// Config
|
// Config
|
||||||
// @import "bootstrap/scss/variables";
|
@import "bootstrap/scss/functions";
|
||||||
// @import "bootstrap/scss/variables-dark";
|
@import "bootstrap/scss/variables";
|
||||||
// @import "bootstrap/scss/maps";
|
@import "bootstrap/scss/variables-dark";
|
||||||
@import 'bootstrap/scss/mixins';
|
@import "bootstrap/scss/maps";
|
||||||
// @import "bootstrap/scss/utilities";
|
@import "bootstrap/scss/mixins";
|
||||||
|
@import "bootstrap/scss/utilities";
|
||||||
|
|||||||
@@ -1,26 +1,24 @@
|
|||||||
@use 'sass:color';
|
|
||||||
|
|
||||||
@mixin caret($direction: down) {
|
@mixin caret($direction: down) {
|
||||||
$selector: 'after';
|
$selector: "after";
|
||||||
|
|
||||||
@if $direction == 'left' {
|
@if $direction == "left" {
|
||||||
$selector: 'before';
|
$selector: "before";
|
||||||
}
|
}
|
||||||
|
|
||||||
&:#{$selector} {
|
&:#{$selector} {
|
||||||
content: '';
|
content: "";
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: $caret-vertical-align;
|
vertical-align: $caret-vertical-align;
|
||||||
width: $caret-width;
|
width: $caret-width;
|
||||||
height: $caret-width;
|
height: $caret-width;
|
||||||
border-bottom: 1px var(--#{$prefix}border-style);
|
border-bottom: 1px var(--#{$prefix}border-style);
|
||||||
border-inline-start: 1px var(--#{$prefix}border-style);
|
border-left: 1px var(--#{$prefix}border-style);
|
||||||
margin-inline-end: 0.1em;
|
margin-right: 0.1em;
|
||||||
|
|
||||||
@if $direction != 'left' {
|
@if $direction != "left" {
|
||||||
margin-inline-start: $caret-spacing;
|
margin-left: $caret-spacing;
|
||||||
} @else {
|
} @else {
|
||||||
margin-inline-end: $caret-spacing;
|
margin-right: $caret-spacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
@if $direction == down {
|
@if $direction == down {
|
||||||
@@ -34,7 +32,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@if $direction == 'left' {
|
@if $direction == "left" {
|
||||||
&:after {
|
&:after {
|
||||||
content: none;
|
content: none;
|
||||||
}
|
}
|
||||||
@@ -45,11 +43,30 @@
|
|||||||
// Override bootstrap core
|
// Override bootstrap core
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin button-variant($background: null, $border: null, $color: null, $hover-background: null, $hover-border: null, $hover-color: null, $active-background: null, $active-border: null, $active-color: null, $disabled-background: null, $disabled-border: null, $disabled-color: null) {
|
@mixin button-variant(
|
||||||
|
$background: null,
|
||||||
|
$border: null,
|
||||||
|
$color: null,
|
||||||
|
$hover-background: null,
|
||||||
|
$hover-border: null,
|
||||||
|
$hover-color: null,
|
||||||
|
$active-background: null,
|
||||||
|
$active-border: null,
|
||||||
|
$active-color: null,
|
||||||
|
$disabled-background: null,
|
||||||
|
$disabled-border: null,
|
||||||
|
$disabled-color: null
|
||||||
|
) {
|
||||||
// Override bootstrap core
|
// Override bootstrap core
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin button-outline-variant($color: null, $color-hover: null, $active-background: null, $active-border: null, $active-color: null) {
|
@mixin button-outline-variant(
|
||||||
|
$color: null,
|
||||||
|
$color-hover: null,
|
||||||
|
$active-background: null,
|
||||||
|
$active-border: null,
|
||||||
|
$active-color: null
|
||||||
|
) {
|
||||||
// Override bootstrap core
|
// Override bootstrap core
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,5 +74,5 @@
|
|||||||
// TODO: remove when https://github.com/twbs/bootstrap/pull/37425/ will be released
|
// TODO: remove when https://github.com/twbs/bootstrap/pull/37425/ will be released
|
||||||
//
|
//
|
||||||
@function opaque($background, $foreground) {
|
@function opaque($background, $foreground) {
|
||||||
@return color.mix(rgba($foreground, 1), $background, color.alpha($foreground) * 100%);
|
@return mix(rgba($foreground, 1), $background, opacity($foreground) * 100%);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
@import 'mixins';
|
@import "bootstrap/scss/functions";
|
||||||
@import 'variables';
|
|
||||||
@import 'variables-dark';
|
|
||||||
@import 'maps';
|
|
||||||
@import 'utilities';
|
|
||||||
|
|
||||||
@import 'bootstrap-config';
|
@import "mixins";
|
||||||
@import 'bootstrap-override';
|
@import "variables";
|
||||||
|
@import "variables-dark";
|
||||||
|
@import "utilities";
|
||||||
|
|
||||||
|
@import "bootstrap-config";
|
||||||
|
@import "bootstrap-override";
|
||||||
|
|||||||
@@ -1,80 +1,87 @@
|
|||||||
@import 'config';
|
@layer props, reset, layout, components, themes, vendors, utils;
|
||||||
@import 'bootstrap-components';
|
|
||||||
|
|
||||||
@import 'props';
|
@import "config";
|
||||||
|
|
||||||
@import 'fonts/webfonts';
|
@layer props {
|
||||||
@import 'fonts/geist';
|
@import "props";
|
||||||
|
}
|
||||||
|
|
||||||
@import 'layout/root';
|
@import "bootstrap-components";
|
||||||
@import 'layout/animations';
|
|
||||||
@import 'layout/core';
|
|
||||||
@import 'layout/navbar';
|
|
||||||
@import 'layout/page';
|
|
||||||
@import 'layout/footer';
|
|
||||||
@import 'layout/dark';
|
|
||||||
|
|
||||||
@import 'ui/accordion';
|
@layer layout {
|
||||||
@import 'ui/alerts';
|
@import "fonts/webfonts";
|
||||||
@import 'ui/avatars';
|
@import "layout/root";
|
||||||
@import 'ui/badges';
|
@import "layout/animations";
|
||||||
@import 'ui/breadcrumbs';
|
@import "layout/core";
|
||||||
@import 'ui/buttons';
|
@import "layout/navbar";
|
||||||
@import 'ui/button-group';
|
@import "layout/page";
|
||||||
@import 'ui/calendars';
|
@import "layout/footer";
|
||||||
@import 'ui/carousel';
|
@import "layout/dark";
|
||||||
@import 'ui/cards';
|
}
|
||||||
@import 'ui/close';
|
|
||||||
@import 'ui/dropdowns';
|
|
||||||
@import 'ui/datagrid';
|
|
||||||
@import 'ui/empty';
|
|
||||||
@import 'ui/grid';
|
|
||||||
@import 'ui/icons';
|
|
||||||
@import 'ui/images';
|
|
||||||
@import 'ui/forms';
|
|
||||||
@import 'ui/forms/form-icon';
|
|
||||||
@import 'ui/forms/form-colorinput';
|
|
||||||
@import 'ui/forms/form-imagecheck';
|
|
||||||
@import 'ui/forms/form-selectgroup';
|
|
||||||
@import 'ui/forms/form-custom';
|
|
||||||
@import 'ui/forms/form-check';
|
|
||||||
@import 'ui/forms/validation';
|
|
||||||
@import 'ui/legend';
|
|
||||||
@import 'ui/lists';
|
|
||||||
@import 'ui/loaders';
|
|
||||||
@import 'ui/login';
|
|
||||||
@import 'ui/modals';
|
|
||||||
@import 'ui/nav';
|
|
||||||
@import 'ui/stars';
|
|
||||||
@import 'ui/pagination';
|
|
||||||
@import 'ui/popovers';
|
|
||||||
@import 'ui/progress';
|
|
||||||
@import 'ui/ribbons';
|
|
||||||
@import 'ui/markdown';
|
|
||||||
@import 'ui/placeholder';
|
|
||||||
@import 'ui/segmented';
|
|
||||||
@import 'ui/steps';
|
|
||||||
@import 'ui/status';
|
|
||||||
@import 'ui/switch-icon';
|
|
||||||
@import 'ui/tables';
|
|
||||||
@import 'ui/tags';
|
|
||||||
@import 'ui/toasts';
|
|
||||||
@import 'ui/toolbar';
|
|
||||||
@import 'ui/tracking';
|
|
||||||
@import 'ui/timeline';
|
|
||||||
@import 'ui/type';
|
|
||||||
@import 'ui/charts';
|
|
||||||
@import 'ui/offcanvas';
|
|
||||||
@import 'ui/chat';
|
|
||||||
@import 'ui/signature';
|
|
||||||
|
|
||||||
@import 'helpers/index';
|
@layer components {
|
||||||
|
@import "ui/accordion";
|
||||||
|
@import "ui/alerts";
|
||||||
|
@import "ui/avatars";
|
||||||
|
@import "ui/badges";
|
||||||
|
@import "ui/breadcrumbs";
|
||||||
|
@import "ui/buttons";
|
||||||
|
@import "ui/button-group";
|
||||||
|
@import "ui/calendars";
|
||||||
|
@import "ui/carousel";
|
||||||
|
@import "ui/cards";
|
||||||
|
@import "ui/close";
|
||||||
|
@import "ui/dropdowns";
|
||||||
|
@import "ui/datagrid";
|
||||||
|
@import "ui/empty";
|
||||||
|
@import "ui/grid";
|
||||||
|
@import "ui/icons";
|
||||||
|
@import "ui/images";
|
||||||
|
@import "ui/forms";
|
||||||
|
@import "ui/forms/form-icon";
|
||||||
|
@import "ui/forms/form-colorinput";
|
||||||
|
@import "ui/forms/form-imagecheck";
|
||||||
|
@import "ui/forms/form-selectgroup";
|
||||||
|
@import "ui/forms/form-custom";
|
||||||
|
@import "ui/forms/form-check";
|
||||||
|
@import "ui/forms/validation";
|
||||||
|
@import "ui/legend";
|
||||||
|
@import "ui/lists";
|
||||||
|
@import "ui/loaders";
|
||||||
|
@import "ui/login";
|
||||||
|
@import "ui/modals";
|
||||||
|
@import "ui/nav";
|
||||||
|
@import "ui/stars";
|
||||||
|
@import "ui/pagination";
|
||||||
|
@import "ui/popovers";
|
||||||
|
@import "ui/progress";
|
||||||
|
@import "ui/ribbons";
|
||||||
|
@import "ui/markdown";
|
||||||
|
@import "ui/placeholder";
|
||||||
|
@import "ui/segmented";
|
||||||
|
@import "ui/steps";
|
||||||
|
@import "ui/status";
|
||||||
|
@import "ui/switch-icon";
|
||||||
|
@import "ui/tables";
|
||||||
|
@import "ui/tags";
|
||||||
|
@import "ui/toasts";
|
||||||
|
@import "ui/toolbar";
|
||||||
|
@import "ui/tracking";
|
||||||
|
@import "ui/timeline";
|
||||||
|
@import "ui/type";
|
||||||
|
@import "ui/charts";
|
||||||
|
@import "ui/offcanvas";
|
||||||
|
@import "ui/chat";
|
||||||
|
@import "ui/signature";
|
||||||
|
@import "helpers/index";
|
||||||
|
}
|
||||||
|
|
||||||
@import 'utils/background';
|
@layer utilities {
|
||||||
@import 'utils/colors';
|
@import "utils/background";
|
||||||
@import 'utils/scroll';
|
@import "utils/colors";
|
||||||
@import 'utils/sizing';
|
@import "utils/scroll";
|
||||||
@import 'utils/opacity';
|
@import "utils/sizing";
|
||||||
@import 'utils/shadow';
|
@import "utils/opacity";
|
||||||
@import 'utils/text';
|
@import "utils/shadow";
|
||||||
@import 'utils/hover';
|
@import "utils/text";
|
||||||
|
}
|
||||||
@@ -1,155 +0,0 @@
|
|||||||
@use 'sass:map';
|
|
||||||
|
|
||||||
// Re-assigned maps
|
|
||||||
//
|
|
||||||
// Placed here so that others can override the default Sass maps and see automatic updates to utilities and more.
|
|
||||||
|
|
||||||
$theme-colors-rgb: map-loop($theme-colors, to-rgb, '$value') !default;
|
|
||||||
|
|
||||||
$theme-colors-text: (
|
|
||||||
'primary': $primary-text-emphasis,
|
|
||||||
'secondary': $secondary-text-emphasis,
|
|
||||||
'success': $success-text-emphasis,
|
|
||||||
'info': $info-text-emphasis,
|
|
||||||
'warning': $warning-text-emphasis,
|
|
||||||
'danger': $danger-text-emphasis,
|
|
||||||
'light': $light-text-emphasis,
|
|
||||||
'dark': $dark-text-emphasis,
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
$theme-colors-bg-subtle: (
|
|
||||||
'primary': $primary-bg-subtle,
|
|
||||||
'secondary': $secondary-bg-subtle,
|
|
||||||
'success': $success-bg-subtle,
|
|
||||||
'info': $info-bg-subtle,
|
|
||||||
'warning': $warning-bg-subtle,
|
|
||||||
'danger': $danger-bg-subtle,
|
|
||||||
'light': $light-bg-subtle,
|
|
||||||
'dark': $dark-bg-subtle,
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
$theme-colors-border-subtle: (
|
|
||||||
'primary': $primary-border-subtle,
|
|
||||||
'secondary': $secondary-border-subtle,
|
|
||||||
'success': $success-border-subtle,
|
|
||||||
'info': $info-border-subtle,
|
|
||||||
'warning': $warning-border-subtle,
|
|
||||||
'danger': $danger-border-subtle,
|
|
||||||
'light': $light-border-subtle,
|
|
||||||
'dark': $dark-border-subtle,
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
$theme-colors-text-dark: null !default;
|
|
||||||
$theme-colors-bg-subtle-dark: null !default;
|
|
||||||
$theme-colors-border-subtle-dark: null !default;
|
|
||||||
|
|
||||||
@if $enable-dark-mode {
|
|
||||||
$theme-colors-text-dark: (
|
|
||||||
'primary': $primary-text-emphasis-dark,
|
|
||||||
'secondary': $secondary-text-emphasis-dark,
|
|
||||||
'success': $success-text-emphasis-dark,
|
|
||||||
'info': $info-text-emphasis-dark,
|
|
||||||
'warning': $warning-text-emphasis-dark,
|
|
||||||
'danger': $danger-text-emphasis-dark,
|
|
||||||
'light': $light-text-emphasis-dark,
|
|
||||||
'dark': $dark-text-emphasis-dark,
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
$theme-colors-bg-subtle-dark: (
|
|
||||||
'primary': $primary-bg-subtle-dark,
|
|
||||||
'secondary': $secondary-bg-subtle-dark,
|
|
||||||
'success': $success-bg-subtle-dark,
|
|
||||||
'info': $info-bg-subtle-dark,
|
|
||||||
'warning': $warning-bg-subtle-dark,
|
|
||||||
'danger': $danger-bg-subtle-dark,
|
|
||||||
'light': $light-bg-subtle-dark,
|
|
||||||
'dark': $dark-bg-subtle-dark,
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
$theme-colors-border-subtle-dark: (
|
|
||||||
'primary': $primary-border-subtle-dark,
|
|
||||||
'secondary': $secondary-border-subtle-dark,
|
|
||||||
'success': $success-border-subtle-dark,
|
|
||||||
'info': $info-border-subtle-dark,
|
|
||||||
'warning': $warning-border-subtle-dark,
|
|
||||||
'danger': $danger-border-subtle-dark,
|
|
||||||
'light': $light-border-subtle-dark,
|
|
||||||
'dark': $dark-border-subtle-dark,
|
|
||||||
) !default;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Utilities maps
|
|
||||||
//
|
|
||||||
// Extends the default `$theme-colors` maps to help create our utilities.
|
|
||||||
|
|
||||||
// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.
|
|
||||||
|
|
||||||
$utilities-colors: $theme-colors-rgb !default;
|
|
||||||
|
|
||||||
$utilities-text: map.merge(
|
|
||||||
$utilities-colors,
|
|
||||||
(
|
|
||||||
'black': to-rgb($black),
|
|
||||||
'white': to-rgb($white),
|
|
||||||
'body': to-rgb($body-color),
|
|
||||||
)
|
|
||||||
) !default;
|
|
||||||
$utilities-text-colors: map-loop($utilities-text, rgba-css-var, '$key', 'text') !default;
|
|
||||||
|
|
||||||
$utilities-text-emphasis-colors: (
|
|
||||||
'primary-emphasis': var(--#{$prefix}primary-text-emphasis),
|
|
||||||
'secondary-emphasis': var(--#{$prefix}secondary-text-emphasis),
|
|
||||||
'success-emphasis': var(--#{$prefix}success-text-emphasis),
|
|
||||||
'info-emphasis': var(--#{$prefix}info-text-emphasis),
|
|
||||||
'warning-emphasis': var(--#{$prefix}warning-text-emphasis),
|
|
||||||
'danger-emphasis': var(--#{$prefix}danger-text-emphasis),
|
|
||||||
'light-emphasis': var(--#{$prefix}light-text-emphasis),
|
|
||||||
'dark-emphasis': var(--#{$prefix}dark-text-emphasis),
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
$utilities-bg: map.merge(
|
|
||||||
$utilities-colors,
|
|
||||||
(
|
|
||||||
'black': to-rgb($black),
|
|
||||||
'white': to-rgb($white),
|
|
||||||
'body': to-rgb($body-bg),
|
|
||||||
)
|
|
||||||
) !default;
|
|
||||||
$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, '$key', 'bg') !default;
|
|
||||||
|
|
||||||
$utilities-bg-subtle: (
|
|
||||||
'primary-subtle': var(--#{$prefix}primary-bg-subtle),
|
|
||||||
'secondary-subtle': var(--#{$prefix}secondary-bg-subtle),
|
|
||||||
'success-subtle': var(--#{$prefix}success-bg-subtle),
|
|
||||||
'info-subtle': var(--#{$prefix}info-bg-subtle),
|
|
||||||
'warning-subtle': var(--#{$prefix}warning-bg-subtle),
|
|
||||||
'danger-subtle': var(--#{$prefix}danger-bg-subtle),
|
|
||||||
'light-subtle': var(--#{$prefix}light-bg-subtle),
|
|
||||||
'dark-subtle': var(--#{$prefix}dark-bg-subtle),
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
$utilities-border: map.merge(
|
|
||||||
$utilities-colors,
|
|
||||||
(
|
|
||||||
'black': to-rgb($black),
|
|
||||||
'white': to-rgb($white),
|
|
||||||
)
|
|
||||||
) !default;
|
|
||||||
$utilities-border-colors: map-loop($utilities-border, rgba-css-var, '$key', 'border') !default;
|
|
||||||
|
|
||||||
$utilities-border-subtle: (
|
|
||||||
'primary-subtle': var(--#{$prefix}primary-border-subtle),
|
|
||||||
'secondary-subtle': var(--#{$prefix}secondary-border-subtle),
|
|
||||||
'success-subtle': var(--#{$prefix}success-border-subtle),
|
|
||||||
'info-subtle': var(--#{$prefix}info-border-subtle),
|
|
||||||
'warning-subtle': var(--#{$prefix}warning-border-subtle),
|
|
||||||
'danger-subtle': var(--#{$prefix}danger-border-subtle),
|
|
||||||
'light-subtle': var(--#{$prefix}light-border-subtle),
|
|
||||||
'dark-subtle': var(--#{$prefix}dark-border-subtle),
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
$utilities-links-underline: map-loop($utilities-colors, rgba-css-var, '$key', 'link-underline') !default;
|
|
||||||
|
|
||||||
$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;
|
|
||||||
|
|
||||||
$gutters: $spacers !default;
|
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
@import 'mixins/mixins';
|
@import "mixins/mixins";
|
||||||
@import 'mixins/functions';
|
@import "mixins/functions";
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
@use 'sass:map';
|
@import "config";
|
||||||
@import 'config';
|
|
||||||
|
|
||||||
:root,
|
:root,
|
||||||
:host {
|
:host {
|
||||||
@@ -31,8 +30,7 @@
|
|||||||
--#{$prefix}brand: #{$primary};
|
--#{$prefix}brand: #{$primary};
|
||||||
|
|
||||||
/** Theme colors */
|
/** Theme colors */
|
||||||
@each $name, $color in map.merge($theme-colors, $social-colors) {
|
@each $name, $color in map-merge($theme-colors, $social-colors) {
|
||||||
@debug contrast-ratio($color, white), $name, $min-contrast-ratio;
|
|
||||||
--#{$prefix}#{$name}: #{$color};
|
--#{$prefix}#{$name}: #{$color};
|
||||||
--#{$prefix}#{$name}-rgb: #{to-rgb($color)};
|
--#{$prefix}#{$name}-rgb: #{to-rgb($color)};
|
||||||
--#{$prefix}#{$name}-fg: #{if(contrast-ratio($color) > $min-contrast-ratio, var(--#{$prefix}light), var(--#{$prefix}dark))};
|
--#{$prefix}#{$name}-fg: #{if(contrast-ratio($color) > $min-contrast-ratio, var(--#{$prefix}light), var(--#{$prefix}dark))};
|
||||||
|
|||||||
@@ -1,158 +1,165 @@
|
|||||||
@use 'sass:map';
|
$negative-spacers-extra: if(
|
||||||
|
$enable-negative-margins,
|
||||||
$negative-spacers-extra: if($enable-negative-margins, negativify-map(map.merge($spacers, $spacers-extra)), null);
|
negativify-map(map-merge($spacers, $spacers-extra)),
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
$utilities: (
|
$utilities: (
|
||||||
// Margin utilities
|
// Margin utilities
|
||||||
'margin': (
|
"margin":
|
||||||
|
(
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin,
|
property: margin,
|
||||||
class: m,
|
class: m,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'margin-x': (
|
"margin-x": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-inline-end margin-inline-start,
|
property: margin-right margin-left,
|
||||||
class: mx,
|
class: mx,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'margin-y': (
|
"margin-y": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-top margin-bottom,
|
property: margin-top margin-bottom,
|
||||||
class: my,
|
class: my,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'margin-top': (
|
"margin-top": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-top,
|
property: margin-top,
|
||||||
class: mt,
|
class: mt,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'margin-end': (
|
"margin-end": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-inline-end,
|
property: margin-right,
|
||||||
class: me,
|
class: me,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'margin-bottom': (
|
"margin-bottom": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-bottom,
|
property: margin-bottom,
|
||||||
class: mb,
|
class: mb,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'margin-start': (
|
"margin-start": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-inline-start,
|
property: margin-left,
|
||||||
class: ms,
|
class: ms,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
// Negative margin utilities
|
// Negative margin utilities
|
||||||
'negative-margin': (
|
"negative-margin":
|
||||||
|
(
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin,
|
property: margin,
|
||||||
class: m,
|
class: m,
|
||||||
values: $negative-spacers-extra,
|
values: $negative-spacers-extra,
|
||||||
),
|
),
|
||||||
'negative-margin-x': (
|
"negative-margin-x": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-inline-end margin-inline-start,
|
property: margin-right margin-left,
|
||||||
class: mx,
|
class: mx,
|
||||||
values: $negative-spacers-extra,
|
values: $negative-spacers-extra,
|
||||||
),
|
),
|
||||||
'negative-margin-y': (
|
"negative-margin-y": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-top margin-bottom,
|
property: margin-top margin-bottom,
|
||||||
class: my,
|
class: my,
|
||||||
values: $negative-spacers-extra,
|
values: $negative-spacers-extra,
|
||||||
),
|
),
|
||||||
'negative-margin-top': (
|
"negative-margin-top": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-top,
|
property: margin-top,
|
||||||
class: mt,
|
class: mt,
|
||||||
values: $negative-spacers-extra,
|
values: $negative-spacers-extra,
|
||||||
),
|
),
|
||||||
'negative-margin-end': (
|
"negative-margin-end": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-inline-end,
|
property: margin-right,
|
||||||
class: me,
|
class: me,
|
||||||
values: $negative-spacers-extra,
|
values: $negative-spacers-extra,
|
||||||
),
|
),
|
||||||
'negative-margin-bottom': (
|
"negative-margin-bottom": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-bottom,
|
property: margin-bottom,
|
||||||
class: mb,
|
class: mb,
|
||||||
values: $negative-spacers-extra,
|
values: $negative-spacers-extra,
|
||||||
),
|
),
|
||||||
'negative-margin-start': (
|
"negative-margin-start": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: margin-inline-start,
|
property: margin-left,
|
||||||
class: ms,
|
class: ms,
|
||||||
values: $negative-spacers-extra,
|
values: $negative-spacers-extra,
|
||||||
),
|
),
|
||||||
// Padding utilities
|
// Padding utilities
|
||||||
'padding': (
|
"padding":
|
||||||
|
(
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: padding,
|
property: padding,
|
||||||
class: p,
|
class: p,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'padding-x': (
|
"padding-x": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: padding-inline-end padding-inline-start,
|
property: padding-right padding-left,
|
||||||
class: px,
|
class: px,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'padding-y': (
|
"padding-y": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: padding-top padding-bottom,
|
property: padding-top padding-bottom,
|
||||||
class: py,
|
class: py,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'padding-top': (
|
"padding-top": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: padding-top,
|
property: padding-top,
|
||||||
class: pt,
|
class: pt,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'padding-end': (
|
"padding-end": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: padding-inline-end,
|
property: padding-right,
|
||||||
class: pe,
|
class: pe,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'padding-bottom': (
|
"padding-bottom": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: padding-bottom,
|
property: padding-bottom,
|
||||||
class: pb,
|
class: pb,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'padding-start': (
|
"padding-start": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: padding-inline-start,
|
property: padding-left,
|
||||||
class: ps,
|
class: ps,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
// Gap utility
|
// Gap utility
|
||||||
'gap': (
|
"gap":
|
||||||
|
(
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: gap,
|
property: gap,
|
||||||
class: gap,
|
class: gap,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'row-gap': (
|
"row-gap": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: row-gap,
|
property: row-gap,
|
||||||
class: row-gap,
|
class: row-gap,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'column-gap': (
|
"column-gap": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
property: column-gap,
|
property: column-gap,
|
||||||
class: column-gap,
|
class: column-gap,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
// Letter spacing
|
// Letter spacing
|
||||||
'spacing': (
|
"spacing":
|
||||||
|
(
|
||||||
property: letter-spacing,
|
property: letter-spacing,
|
||||||
class: tracking,
|
class: tracking,
|
||||||
values: (
|
values: (
|
||||||
@@ -161,38 +168,38 @@ $utilities: (
|
|||||||
wide: $spacing-wide,
|
wide: $spacing-wide,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'width': (
|
"width": (
|
||||||
property: width,
|
property: width,
|
||||||
class: w,
|
class: w,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'height': (
|
"height": (
|
||||||
property: height,
|
property: height,
|
||||||
class: h,
|
class: h,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'filter': (
|
"filter": (
|
||||||
property: filter,
|
property: filter,
|
||||||
class: filter,
|
class: filter,
|
||||||
values: (
|
values: (
|
||||||
grayscale: grayscale(100%),
|
grayscale: grayscale(100%),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'gutter-x': (
|
"gutter-x": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
css-var: true,
|
css-var: true,
|
||||||
css-variable-name: gutter-x,
|
css-variable-name: gutter-x,
|
||||||
class: gx,
|
class: gx,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'gutter-y': (
|
"gutter-y": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
css-var: true,
|
css-var: true,
|
||||||
css-variable-name: gutter-y,
|
css-variable-name: gutter-y,
|
||||||
class: gy,
|
class: gy,
|
||||||
values: $spacers-extra,
|
values: $spacers-extra,
|
||||||
),
|
),
|
||||||
'gutter': (
|
"gutter": (
|
||||||
responsive: true,
|
responsive: true,
|
||||||
css-var: true,
|
css-var: true,
|
||||||
css-variable-name: gutter-x,
|
css-variable-name: gutter-x,
|
||||||
|
|||||||
@@ -1,127 +1,19 @@
|
|||||||
@use 'sass:map';
|
|
||||||
|
|
||||||
$border-values: (
|
$border-values: (
|
||||||
null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color-translucent),
|
null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)
|
||||||
wide: $border-width-wide var(--#{$prefix}border-style) var(--#{$prefix}border-color-translucent),
|
var(--#{$prefix}border-color-translucent),
|
||||||
|
wide: $border-width-wide var(--#{$prefix}border-style)
|
||||||
|
var(--#{$prefix}border-color-translucent),
|
||||||
0: 0,
|
0: 0,
|
||||||
);
|
);
|
||||||
|
|
||||||
$utilities-border-colors: map-loop(
|
$utilities-border-colors: map-loop((
|
||||||
(
|
"red": red,
|
||||||
'red': red,
|
"green": green,
|
||||||
'green': green,
|
), rgba-css-var, "$key", "border") !default;
|
||||||
),
|
|
||||||
rgba-css-var,
|
|
||||||
'$key',
|
|
||||||
'border'
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
//Utilities
|
//Utilities
|
||||||
$utilities: (
|
$utilities: (
|
||||||
'align': (
|
"object": (
|
||||||
property: vertical-align,
|
|
||||||
class: align,
|
|
||||||
values: baseline top middle bottom text-bottom text-top,
|
|
||||||
),
|
|
||||||
'float': (
|
|
||||||
responsive: true,
|
|
||||||
property: float,
|
|
||||||
values: (
|
|
||||||
start: left,
|
|
||||||
end: right,
|
|
||||||
none: none,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// Object Fit utilities
|
|
||||||
'object-fit': (
|
|
||||||
responsive: true,
|
|
||||||
property: object-fit,
|
|
||||||
values: (
|
|
||||||
contain: contain,
|
|
||||||
cover: cover,
|
|
||||||
fill: fill,
|
|
||||||
scale: scale-down,
|
|
||||||
none: none,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// Opacity utilities
|
|
||||||
'opacity': (
|
|
||||||
property: opacity,
|
|
||||||
values: (
|
|
||||||
0: 0,
|
|
||||||
25: 0.25,
|
|
||||||
50: 0.5,
|
|
||||||
75: 0.75,
|
|
||||||
100: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'overflow': (
|
|
||||||
property: overflow,
|
|
||||||
values: auto hidden visible scroll,
|
|
||||||
),
|
|
||||||
'overflow-x': (
|
|
||||||
property: overflow-x,
|
|
||||||
values: auto hidden visible scroll,
|
|
||||||
),
|
|
||||||
'overflow-y': (
|
|
||||||
property: overflow-y,
|
|
||||||
values: auto hidden visible scroll,
|
|
||||||
),
|
|
||||||
'display': (
|
|
||||||
responsive: true,
|
|
||||||
print: true,
|
|
||||||
property: display,
|
|
||||||
class: d,
|
|
||||||
values: inline inline-block block grid inline-grid table table-row table-cell flex inline-flex none,
|
|
||||||
),
|
|
||||||
'shadow': (
|
|
||||||
property: box-shadow,
|
|
||||||
class: shadow,
|
|
||||||
values: (
|
|
||||||
null: var(--#{$prefix}box-shadow),
|
|
||||||
sm: var(--#{$prefix}box-shadow-sm),
|
|
||||||
lg: var(--#{$prefix}box-shadow-lg),
|
|
||||||
none: none,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'focus-ring': (
|
|
||||||
css-var: true,
|
|
||||||
css-variable-name: focus-ring-color,
|
|
||||||
class: focus-ring,
|
|
||||||
values: map-loop($theme-colors-rgb, rgba-css-var, '$key', 'focus-ring'),
|
|
||||||
),
|
|
||||||
'position': (
|
|
||||||
property: position,
|
|
||||||
values: static relative absolute fixed sticky,
|
|
||||||
),
|
|
||||||
'top': (
|
|
||||||
property: top,
|
|
||||||
values: $position-values,
|
|
||||||
),
|
|
||||||
'bottom': (
|
|
||||||
property: bottom,
|
|
||||||
values: $position-values,
|
|
||||||
),
|
|
||||||
'start': (
|
|
||||||
property: left,
|
|
||||||
class: start,
|
|
||||||
values: $position-values,
|
|
||||||
),
|
|
||||||
'end': (
|
|
||||||
property: right,
|
|
||||||
class: end,
|
|
||||||
values: $position-values,
|
|
||||||
),
|
|
||||||
'translate-middle': (
|
|
||||||
property: transform,
|
|
||||||
class: translate-middle,
|
|
||||||
values: (
|
|
||||||
null: translate(-50%, -50%),
|
|
||||||
x: translateX(-50%),
|
|
||||||
y: translateY(-50%),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'object': (
|
|
||||||
property: object-fit,
|
property: object-fit,
|
||||||
class: object,
|
class: object,
|
||||||
values: (
|
values: (
|
||||||
@@ -132,7 +24,7 @@ $utilities: (
|
|||||||
none: none,
|
none: none,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'cursor': (
|
"cursor": (
|
||||||
property: cursor,
|
property: cursor,
|
||||||
class: cursor,
|
class: cursor,
|
||||||
values: (
|
values: (
|
||||||
@@ -153,430 +45,72 @@ $utilities: (
|
|||||||
grabbing: grabbing,
|
grabbing: grabbing,
|
||||||
crosshair: crosshair,
|
crosshair: crosshair,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'border': (
|
"border": (
|
||||||
property: border,
|
property: border,
|
||||||
values: $border-values,
|
values: $border-values,
|
||||||
),
|
),
|
||||||
'border-top': (
|
"border-top": (
|
||||||
property: border-top,
|
property: border-top,
|
||||||
values: $border-values,
|
values: $border-values,
|
||||||
),
|
),
|
||||||
'border-end': (
|
"border-end": (
|
||||||
class: border-end,
|
class: border-end,
|
||||||
property: border-inline-end,
|
property: border-right,
|
||||||
values: $border-values,
|
values: $border-values,
|
||||||
),
|
),
|
||||||
'border-bottom': (
|
"border-bottom": (
|
||||||
property: border-bottom,
|
property: border-bottom,
|
||||||
values: $border-values,
|
values: $border-values,
|
||||||
),
|
),
|
||||||
'border-start': (
|
"border-start": (
|
||||||
class: border-start,
|
class: border-start,
|
||||||
property: border-inline-start,
|
property: border-left,
|
||||||
values: $border-values,
|
values: $border-values,
|
||||||
),
|
),
|
||||||
'border-x': (
|
"border-x": (
|
||||||
class: border-x,
|
class: border-x,
|
||||||
property: border-inline-start border-inline-end,
|
property: border-left border-right,
|
||||||
values: $border-values,
|
values: $border-values,
|
||||||
),
|
),
|
||||||
'border-y': (
|
"border-y": (
|
||||||
class: border-y,
|
class: border-y,
|
||||||
property: border-top border-bottom,
|
property: border-top border-bottom,
|
||||||
values: $border-values,
|
values: $border-values,
|
||||||
),
|
),
|
||||||
'border-color': (
|
"width": (
|
||||||
property: border-color,
|
|
||||||
class: border,
|
|
||||||
local-vars: (
|
|
||||||
'border-opacity': 1,
|
|
||||||
),
|
|
||||||
values: $utilities-border-colors,
|
|
||||||
),
|
|
||||||
'subtle-border-color': (
|
|
||||||
property: border-color,
|
|
||||||
class: border,
|
|
||||||
values: $utilities-border-subtle,
|
|
||||||
),
|
|
||||||
'border-width': (
|
|
||||||
property: border-width,
|
|
||||||
class: border,
|
|
||||||
values: $border-widths,
|
|
||||||
),
|
|
||||||
'border-opacity': (
|
|
||||||
css-var: true,
|
|
||||||
class: border-opacity,
|
|
||||||
values: (
|
|
||||||
10: 0.1,
|
|
||||||
25: 0.25,
|
|
||||||
50: 0.5,
|
|
||||||
75: 0.75,
|
|
||||||
100: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'width': (
|
|
||||||
property: width,
|
property: width,
|
||||||
class: w,
|
class: w,
|
||||||
values: $size-values,
|
values: $size-values,
|
||||||
),
|
),
|
||||||
'max-width': (
|
"height": (
|
||||||
property: max-width,
|
|
||||||
class: mw,
|
|
||||||
values: (
|
|
||||||
100: 100%,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'viewport-width': (
|
|
||||||
property: width,
|
|
||||||
class: vw,
|
|
||||||
values: (
|
|
||||||
100: 100vw,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'min-viewport-width': (
|
|
||||||
property: min-width,
|
|
||||||
class: min-vw,
|
|
||||||
values: (
|
|
||||||
100: 100vw,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'height': (
|
|
||||||
property: height,
|
property: height,
|
||||||
class: h,
|
class: h,
|
||||||
values: $size-values,
|
values: $size-values,
|
||||||
),
|
),
|
||||||
'max-height': (
|
"columns": (
|
||||||
property: max-height,
|
|
||||||
class: mh,
|
|
||||||
values: (
|
|
||||||
100: 100%,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'viewport-height': (
|
|
||||||
property: height,
|
|
||||||
class: vh,
|
|
||||||
values: (
|
|
||||||
100: 100vh,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'min-viewport-height': (
|
|
||||||
property: min-height,
|
|
||||||
class: min-vh,
|
|
||||||
values: (
|
|
||||||
100: 100vh,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'columns': (
|
|
||||||
property: columns,
|
property: columns,
|
||||||
class: columns,
|
class: columns,
|
||||||
responsive: true,
|
responsive: true,
|
||||||
values: 2 3 4,
|
values: 2 3 4,
|
||||||
),
|
),
|
||||||
// Flex utilities
|
"bg-pattern": (
|
||||||
'flex': (
|
|
||||||
responsive: true,
|
|
||||||
property: flex,
|
|
||||||
values: (
|
|
||||||
fill: 1 1 auto,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'flex-direction': (
|
|
||||||
responsive: true,
|
|
||||||
property: flex-direction,
|
|
||||||
class: flex,
|
|
||||||
values: row column row-reverse column-reverse,
|
|
||||||
),
|
|
||||||
'flex-grow': (
|
|
||||||
responsive: true,
|
|
||||||
property: flex-grow,
|
|
||||||
class: flex,
|
|
||||||
values: (
|
|
||||||
grow-0: 0,
|
|
||||||
grow-1: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'flex-shrink': (
|
|
||||||
responsive: true,
|
|
||||||
property: flex-shrink,
|
|
||||||
class: flex,
|
|
||||||
values: (
|
|
||||||
shrink-0: 0,
|
|
||||||
shrink-1: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'flex-wrap': (
|
|
||||||
responsive: true,
|
|
||||||
property: flex-wrap,
|
|
||||||
class: flex,
|
|
||||||
values: wrap nowrap wrap-reverse,
|
|
||||||
),
|
|
||||||
'justify-content': (
|
|
||||||
responsive: true,
|
|
||||||
property: justify-content,
|
|
||||||
values: (
|
|
||||||
start: flex-start,
|
|
||||||
end: flex-end,
|
|
||||||
center: center,
|
|
||||||
between: space-between,
|
|
||||||
around: space-around,
|
|
||||||
evenly: space-evenly,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'align-items': (
|
|
||||||
responsive: true,
|
|
||||||
property: align-items,
|
|
||||||
values: (
|
|
||||||
start: flex-start,
|
|
||||||
end: flex-end,
|
|
||||||
center: center,
|
|
||||||
baseline: baseline,
|
|
||||||
stretch: stretch,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'align-content': (
|
|
||||||
responsive: true,
|
|
||||||
property: align-content,
|
|
||||||
values: (
|
|
||||||
start: flex-start,
|
|
||||||
end: flex-end,
|
|
||||||
center: center,
|
|
||||||
between: space-between,
|
|
||||||
around: space-around,
|
|
||||||
stretch: stretch,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'align-self': (
|
|
||||||
responsive: true,
|
|
||||||
property: align-self,
|
|
||||||
values: (
|
|
||||||
auto: auto,
|
|
||||||
start: flex-start,
|
|
||||||
end: flex-end,
|
|
||||||
center: center,
|
|
||||||
baseline: baseline,
|
|
||||||
stretch: stretch,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'order': (
|
|
||||||
responsive: true,
|
|
||||||
property: order,
|
|
||||||
values: (
|
|
||||||
first: -1,
|
|
||||||
0: 0,
|
|
||||||
1: 1,
|
|
||||||
2: 2,
|
|
||||||
3: 3,
|
|
||||||
4: 4,
|
|
||||||
5: 5,
|
|
||||||
last: 6,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// Margin utilities
|
|
||||||
'margin': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin,
|
|
||||||
class: m,
|
|
||||||
values: map.merge(
|
|
||||||
$spacers,
|
|
||||||
(
|
|
||||||
auto: auto,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'margin-x': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-right margin-left,
|
|
||||||
class: mx,
|
|
||||||
values: map.merge(
|
|
||||||
$spacers,
|
|
||||||
(
|
|
||||||
auto: auto,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'margin-y': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-top margin-bottom,
|
|
||||||
class: my,
|
|
||||||
values: map.merge(
|
|
||||||
$spacers,
|
|
||||||
(
|
|
||||||
auto: auto,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'margin-top': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-top,
|
|
||||||
class: mt,
|
|
||||||
values: map.merge(
|
|
||||||
$spacers,
|
|
||||||
(
|
|
||||||
auto: auto,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'margin-end': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-right,
|
|
||||||
class: me,
|
|
||||||
values: map.merge(
|
|
||||||
$spacers,
|
|
||||||
(
|
|
||||||
auto: auto,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'margin-bottom': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-bottom,
|
|
||||||
class: mb,
|
|
||||||
values: map.merge(
|
|
||||||
$spacers,
|
|
||||||
(
|
|
||||||
auto: auto,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'margin-start': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-left,
|
|
||||||
class: ms,
|
|
||||||
values: map.merge(
|
|
||||||
$spacers,
|
|
||||||
(
|
|
||||||
auto: auto,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// Negative margin utilities
|
|
||||||
'negative-margin': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin,
|
|
||||||
class: m,
|
|
||||||
values: $negative-spacers,
|
|
||||||
),
|
|
||||||
'negative-margin-x': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-right margin-left,
|
|
||||||
class: mx,
|
|
||||||
values: $negative-spacers,
|
|
||||||
),
|
|
||||||
'negative-margin-y': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-top margin-bottom,
|
|
||||||
class: my,
|
|
||||||
values: $negative-spacers,
|
|
||||||
),
|
|
||||||
'negative-margin-top': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-top,
|
|
||||||
class: mt,
|
|
||||||
values: $negative-spacers,
|
|
||||||
),
|
|
||||||
'negative-margin-end': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-right,
|
|
||||||
class: me,
|
|
||||||
values: $negative-spacers,
|
|
||||||
),
|
|
||||||
'negative-margin-bottom': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-bottom,
|
|
||||||
class: mb,
|
|
||||||
values: $negative-spacers,
|
|
||||||
),
|
|
||||||
'negative-margin-start': (
|
|
||||||
responsive: true,
|
|
||||||
property: margin-left,
|
|
||||||
class: ms,
|
|
||||||
values: $negative-spacers,
|
|
||||||
),
|
|
||||||
// Padding utilities
|
|
||||||
'padding': (
|
|
||||||
responsive: true,
|
|
||||||
property: padding,
|
|
||||||
class: p,
|
|
||||||
values: $spacers,
|
|
||||||
),
|
|
||||||
'padding-x': (
|
|
||||||
responsive: true,
|
|
||||||
property: padding-right padding-left,
|
|
||||||
class: px,
|
|
||||||
values: $spacers,
|
|
||||||
),
|
|
||||||
'padding-y': (
|
|
||||||
responsive: true,
|
|
||||||
property: padding-top padding-bottom,
|
|
||||||
class: py,
|
|
||||||
values: $spacers,
|
|
||||||
),
|
|
||||||
'padding-top': (
|
|
||||||
responsive: true,
|
|
||||||
property: padding-top,
|
|
||||||
class: pt,
|
|
||||||
values: $spacers,
|
|
||||||
),
|
|
||||||
'padding-end': (
|
|
||||||
responsive: true,
|
|
||||||
property: padding-right,
|
|
||||||
class: pe,
|
|
||||||
values: $spacers,
|
|
||||||
),
|
|
||||||
'padding-bottom': (
|
|
||||||
responsive: true,
|
|
||||||
property: padding-bottom,
|
|
||||||
class: pb,
|
|
||||||
values: $spacers,
|
|
||||||
),
|
|
||||||
'padding-start': (
|
|
||||||
responsive: true,
|
|
||||||
property: padding-left,
|
|
||||||
class: ps,
|
|
||||||
values: $spacers,
|
|
||||||
),
|
|
||||||
// Gap utility
|
|
||||||
'gap': (
|
|
||||||
responsive: true,
|
|
||||||
property: gap,
|
|
||||||
class: gap,
|
|
||||||
values: $spacers,
|
|
||||||
),
|
|
||||||
'row-gap': (
|
|
||||||
responsive: true,
|
|
||||||
property: row-gap,
|
|
||||||
class: row-gap,
|
|
||||||
values: $spacers,
|
|
||||||
),
|
|
||||||
'column-gap': (
|
|
||||||
responsive: true,
|
|
||||||
property: column-gap,
|
|
||||||
class: column-gap,
|
|
||||||
values: $spacers,
|
|
||||||
),
|
|
||||||
'bg-pattern': (
|
|
||||||
property: background,
|
property: background,
|
||||||
class: bg-pattern,
|
class: bg-pattern,
|
||||||
values: (
|
values: (
|
||||||
transparent: #{url-svg('<svg width="16" height="16" viewBox="0 0 16 16"><rect x="0" y="0" width="8" height="8" fill="rgba(130, 130, 130, .1)" /><rect x="8" y="8" width="8" height="8" fill="rgba(130, 130, 130, .1)" /></svg>')} repeat center/16px 16px,
|
transparent: #{url-svg(
|
||||||
),
|
'<svg width="16" height="16" viewBox="0 0 16 16"><rect x="0" y="0" width="8" height="8" fill="rgba(130, 130, 130, .1)" /><rect x="8" y="8" width="8" height="8" fill="rgba(130, 130, 130, .1)" /></svg>'
|
||||||
|
)} repeat center/16px 16px,
|
||||||
|
)
|
||||||
),
|
),
|
||||||
'bg-gradient': (
|
"bg-gradient": (
|
||||||
property: background,
|
property: background,
|
||||||
class: bg-gradient,
|
class: bg-gradient,
|
||||||
values: (
|
values: (
|
||||||
null: linear-gradient(var(--#{$prefix}gradient-direction, to right), var(--#{$prefix}gradient-stops, var(--#{$prefix}gradient-from, transparent), var(--#{$prefix}gradient-to, transparent))) no-repeat,
|
null: linear-gradient(var(--#{$prefix}gradient-direction, to right), var(--#{$prefix}gradient-stops, var(--#{$prefix}gradient-from, transparent), var(--#{$prefix}gradient-to, transparent))) no-repeat,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'bg-blur': (
|
"bg-gradient-direction": (
|
||||||
property: backdrop-filter,
|
|
||||||
class: bg-blur,
|
|
||||||
values: (
|
|
||||||
null: blur($backdrop-blur),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'bg-gradient-direction': (
|
|
||||||
property: --#{$prefix}gradient-direction,
|
property: --#{$prefix}gradient-direction,
|
||||||
class: bg-gradient,
|
class: bg-gradient,
|
||||||
values: (
|
values: (
|
||||||
@@ -590,7 +124,7 @@ $utilities: (
|
|||||||
to-ts: to top left,
|
to-ts: to top left,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'table-layout': (
|
"table-layout": (
|
||||||
property: table-layout,
|
property: table-layout,
|
||||||
class: table,
|
class: table,
|
||||||
values: (
|
values: (
|
||||||
@@ -598,300 +132,4 @@ $utilities: (
|
|||||||
fixed: fixed,
|
fixed: fixed,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// Text
|
|
||||||
'font-family': (
|
|
||||||
property: font-family,
|
|
||||||
class: font,
|
|
||||||
values: (
|
|
||||||
monospace: var(--#{$prefix}font-monospace),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'font-size': (
|
|
||||||
property: font-size,
|
|
||||||
class: fs,
|
|
||||||
values: $font-sizes,
|
|
||||||
),
|
|
||||||
'font-style': (
|
|
||||||
property: font-style,
|
|
||||||
class: fst,
|
|
||||||
values: italic normal,
|
|
||||||
),
|
|
||||||
'font-weight': (
|
|
||||||
property: font-weight,
|
|
||||||
class: fw,
|
|
||||||
values: (
|
|
||||||
lighter: $font-weight-lighter,
|
|
||||||
light: $font-weight-light,
|
|
||||||
normal: $font-weight-normal,
|
|
||||||
medium: $font-weight-medium,
|
|
||||||
semibold: $font-weight-semibold,
|
|
||||||
bold: $font-weight-bold,
|
|
||||||
bolder: $font-weight-bolder,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'line-height': (
|
|
||||||
property: line-height,
|
|
||||||
class: lh,
|
|
||||||
values: (
|
|
||||||
1: 1,
|
|
||||||
sm: $line-height-sm,
|
|
||||||
base: $line-height-base,
|
|
||||||
lg: $line-height-lg,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'text-align': (
|
|
||||||
responsive: true,
|
|
||||||
property: text-align,
|
|
||||||
class: text,
|
|
||||||
values: (
|
|
||||||
start: left,
|
|
||||||
end: right,
|
|
||||||
center: center,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'text-decoration': (
|
|
||||||
property: text-decoration,
|
|
||||||
values: none underline line-through,
|
|
||||||
),
|
|
||||||
'text-transform': (
|
|
||||||
property: text-transform,
|
|
||||||
class: text,
|
|
||||||
values: lowercase uppercase capitalize,
|
|
||||||
),
|
|
||||||
'white-space': (
|
|
||||||
property: white-space,
|
|
||||||
class: text,
|
|
||||||
values: (
|
|
||||||
wrap: normal,
|
|
||||||
nowrap: nowrap,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'word-wrap': (
|
|
||||||
property: word-wrap word-break,
|
|
||||||
class: text,
|
|
||||||
values: (
|
|
||||||
break: break-word,
|
|
||||||
),
|
|
||||||
rtl: false,
|
|
||||||
),
|
|
||||||
'color': (
|
|
||||||
property: color,
|
|
||||||
class: text,
|
|
||||||
local-vars: (
|
|
||||||
'text-opacity': 1,
|
|
||||||
),
|
|
||||||
values: map.merge(
|
|
||||||
$utilities-text-colors,
|
|
||||||
(
|
|
||||||
'muted': var(--#{$prefix}secondary-color),
|
|
||||||
// deprecated
|
|
||||||
'black-50': rgba($black, 0.5),
|
|
||||||
// deprecated
|
|
||||||
'white-50': rgba($white, 0.5),
|
|
||||||
// deprecated
|
|
||||||
'body-secondary': var(--#{$prefix}secondary-color),
|
|
||||||
'body-tertiary': var(--#{$prefix}tertiary-color),
|
|
||||||
'body-emphasis': var(--#{$prefix}emphasis-color),
|
|
||||||
'reset': inherit,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'text-opacity': (
|
|
||||||
css-var: true,
|
|
||||||
class: text-opacity,
|
|
||||||
values: (
|
|
||||||
25: 0.25,
|
|
||||||
50: 0.5,
|
|
||||||
75: 0.75,
|
|
||||||
100: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'text-color': (
|
|
||||||
property: color,
|
|
||||||
class: text,
|
|
||||||
values: $utilities-text-emphasis-colors,
|
|
||||||
),
|
|
||||||
'link-opacity': (
|
|
||||||
css-var: true,
|
|
||||||
class: link-opacity,
|
|
||||||
state: hover,
|
|
||||||
values: (
|
|
||||||
10: 0.1,
|
|
||||||
25: 0.25,
|
|
||||||
50: 0.5,
|
|
||||||
75: 0.75,
|
|
||||||
100: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'link-offset': (
|
|
||||||
property: text-underline-offset,
|
|
||||||
class: link-offset,
|
|
||||||
state: hover,
|
|
||||||
values: (
|
|
||||||
1: 0.125em,
|
|
||||||
2: 0.25em,
|
|
||||||
3: 0.375em,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'link-underline': (
|
|
||||||
property: text-decoration-color,
|
|
||||||
class: link-underline,
|
|
||||||
local-vars: (
|
|
||||||
'link-underline-opacity': 1,
|
|
||||||
),
|
|
||||||
values: map.merge(
|
|
||||||
$utilities-links-underline,
|
|
||||||
(
|
|
||||||
null: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-underline-opacity, 1)),
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'link-underline-opacity': (
|
|
||||||
css-var: true,
|
|
||||||
class: link-underline-opacity,
|
|
||||||
state: hover,
|
|
||||||
values: (
|
|
||||||
0: 0,
|
|
||||||
10: 0.1,
|
|
||||||
25: 0.25,
|
|
||||||
50: 0.5,
|
|
||||||
75: 0.75,
|
|
||||||
100: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'background-color': (
|
|
||||||
property: background-color,
|
|
||||||
class: bg,
|
|
||||||
local-vars: (
|
|
||||||
'bg-opacity': 1,
|
|
||||||
),
|
|
||||||
values: map.merge(
|
|
||||||
$utilities-bg-colors,
|
|
||||||
(
|
|
||||||
'transparent': transparent,
|
|
||||||
'body-secondary': rgba(var(--#{$prefix}secondary-bg-rgb), var(--#{$prefix}bg-opacity)),
|
|
||||||
'body-tertiary': rgba(var(--#{$prefix}tertiary-bg-rgb), var(--#{$prefix}bg-opacity)),
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'bg-opacity': (
|
|
||||||
css-var: true,
|
|
||||||
class: bg-opacity,
|
|
||||||
values: (
|
|
||||||
10: 0.1,
|
|
||||||
25: 0.25,
|
|
||||||
50: 0.5,
|
|
||||||
75: 0.75,
|
|
||||||
100: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'subtle-background-color': (
|
|
||||||
property: background-color,
|
|
||||||
class: bg,
|
|
||||||
values: $utilities-bg-subtle,
|
|
||||||
),
|
|
||||||
'gradient': (
|
|
||||||
property: background-image,
|
|
||||||
class: bg,
|
|
||||||
values: (
|
|
||||||
gradient: var(--#{$prefix}gradient),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'user-select': (
|
|
||||||
property: user-select,
|
|
||||||
values: all auto none,
|
|
||||||
),
|
|
||||||
'pointer-events': (
|
|
||||||
property: pointer-events,
|
|
||||||
class: pe,
|
|
||||||
values: none auto,
|
|
||||||
),
|
|
||||||
'rounded': (
|
|
||||||
property: border-radius,
|
|
||||||
class: rounded,
|
|
||||||
values: (
|
|
||||||
null: var(--#{$prefix}border-radius),
|
|
||||||
0: 0,
|
|
||||||
1: var(--#{$prefix}border-radius-sm),
|
|
||||||
2: var(--#{$prefix}border-radius),
|
|
||||||
3: var(--#{$prefix}border-radius-lg),
|
|
||||||
4: var(--#{$prefix}border-radius-xl),
|
|
||||||
5: var(--#{$prefix}border-radius-xxl),
|
|
||||||
circle: 50%,
|
|
||||||
pill: var(--#{$prefix}border-radius-pill),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'rounded-top': (
|
|
||||||
property: border-start-start-radius border-start-end-radius,
|
|
||||||
class: rounded-top,
|
|
||||||
values: (
|
|
||||||
null: var(--#{$prefix}border-radius),
|
|
||||||
0: 0,
|
|
||||||
1: var(--#{$prefix}border-radius-sm),
|
|
||||||
2: var(--#{$prefix}border-radius),
|
|
||||||
3: var(--#{$prefix}border-radius-lg),
|
|
||||||
4: var(--#{$prefix}border-radius-xl),
|
|
||||||
5: var(--#{$prefix}border-radius-xxl),
|
|
||||||
circle: 50%,
|
|
||||||
pill: var(--#{$prefix}border-radius-pill),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'rounded-end': (
|
|
||||||
property: border-end-end-radius border-end-start-radius,
|
|
||||||
class: rounded-end,
|
|
||||||
values: (
|
|
||||||
null: var(--#{$prefix}border-radius),
|
|
||||||
0: 0,
|
|
||||||
1: var(--#{$prefix}border-radius-sm),
|
|
||||||
2: var(--#{$prefix}border-radius),
|
|
||||||
3: var(--#{$prefix}border-radius-lg),
|
|
||||||
4: var(--#{$prefix}border-radius-xl),
|
|
||||||
5: var(--#{$prefix}border-radius-xxl),
|
|
||||||
circle: 50%,
|
|
||||||
pill: var(--#{$prefix}border-radius-pill),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'rounded-bottom': (
|
|
||||||
property: border-end-end-radius border-end-start-radius,
|
|
||||||
class: rounded-bottom,
|
|
||||||
values: (
|
|
||||||
null: var(--#{$prefix}border-radius),
|
|
||||||
0: 0,
|
|
||||||
1: var(--#{$prefix}border-radius-sm),
|
|
||||||
2: var(--#{$prefix}border-radius),
|
|
||||||
3: var(--#{$prefix}border-radius-lg),
|
|
||||||
4: var(--#{$prefix}border-radius-xl),
|
|
||||||
5: var(--#{$prefix}border-radius-xxl),
|
|
||||||
circle: 50%,
|
|
||||||
pill: var(--#{$prefix}border-radius-pill),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'rounded-start': (
|
|
||||||
property: border-start-start-radius border-start-end-radius,
|
|
||||||
class: rounded-start,
|
|
||||||
values: (
|
|
||||||
null: var(--#{$prefix}border-radius),
|
|
||||||
0: 0,
|
|
||||||
1: var(--#{$prefix}border-radius-sm),
|
|
||||||
2: var(--#{$prefix}border-radius),
|
|
||||||
3: var(--#{$prefix}border-radius-lg),
|
|
||||||
4: var(--#{$prefix}border-radius-xl),
|
|
||||||
5: var(--#{$prefix}border-radius-xxl),
|
|
||||||
circle: 50%,
|
|
||||||
pill: var(--#{$prefix}border-radius-pill),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'visibility': (
|
|
||||||
property: visibility,
|
|
||||||
class: null,
|
|
||||||
values: (
|
|
||||||
visible: visible,
|
|
||||||
invisible: hidden,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'z-index': (
|
|
||||||
property: z-index,
|
|
||||||
class: z,
|
|
||||||
values: $zindex-levels,
|
|
||||||
),
|
|
||||||
) !default;
|
) !default;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
@use 'sass:color';
|
@use "sass:color";
|
||||||
|
|
||||||
//
|
//
|
||||||
// Dark mode
|
// Dark mode
|
||||||
@@ -6,107 +6,14 @@
|
|||||||
$darken-dark: color.adjust($dark, $lightness: -2%) !default;
|
$darken-dark: color.adjust($dark, $lightness: -2%) !default;
|
||||||
$lighten-dark: color.adjust($dark, $lightness: 2%) !default;
|
$lighten-dark: color.adjust($dark, $lightness: 2%) !default;
|
||||||
$border-color-dark: color.adjust($dark, $lightness: 8%) !default;
|
$border-color-dark: color.adjust($dark, $lightness: 8%) !default;
|
||||||
$border-color-translucent-dark: rgba(128, 150, 172, 0.2) !default;
|
$border-color-translucent-dark: rgba(72, 110, 149, .14) !default;
|
||||||
$border-dark-color-dark: color.adjust($dark, $lightness: 4%) !default;
|
$border-dark-color-dark: color.adjust($dark, $lightness: 4%) !default;
|
||||||
$border-active-color-dark: color.adjust($dark, $lightness: 12%) !default;
|
$border-active-color-dark: color.adjust($dark, $lightness: 12%) !default;
|
||||||
|
|
||||||
//new bootsrap variables
|
//new bootsrap variables
|
||||||
$body-color-dark: $gray-200 !default;
|
$body-color-dark: $gray-200 !default;
|
||||||
$body-emphasis-color-dark: $white !default;
|
$body-emphasis-color-dark: $white !default;
|
||||||
|
|
||||||
$code-color-dark: var(--#{$prefix}gray-300) !default;
|
$code-color-dark: var(--#{$prefix}gray-300) !default;
|
||||||
$text-secondary-dark: rgba(153, 159, 164, 1) !default;
|
$text-secondary-dark: rgba(153, 159, 164, 1) !default;
|
||||||
|
|
||||||
// Theme text emphasis dark
|
|
||||||
$primary-text-emphasis-dark: tint-color($primary, 40%) !default;
|
|
||||||
$secondary-text-emphasis-dark: tint-color($secondary, 40%) !default;
|
|
||||||
$success-text-emphasis-dark: tint-color($success, 40%) !default;
|
|
||||||
$info-text-emphasis-dark: tint-color($info, 40%) !default;
|
|
||||||
$warning-text-emphasis-dark: tint-color($warning, 40%) !default;
|
|
||||||
$danger-text-emphasis-dark: tint-color($danger, 40%) !default;
|
|
||||||
$light-text-emphasis-dark: $gray-100 !default;
|
|
||||||
$dark-text-emphasis-dark: $gray-300 !default;
|
|
||||||
|
|
||||||
// Theme bg subtle dark
|
|
||||||
$primary-bg-subtle-dark: shade-color($primary, 80%) !default;
|
|
||||||
$secondary-bg-subtle-dark: shade-color($secondary, 80%) !default;
|
|
||||||
$success-bg-subtle-dark: shade-color($success, 80%) !default;
|
|
||||||
$info-bg-subtle-dark: shade-color($info, 80%) !default;
|
|
||||||
$warning-bg-subtle-dark: shade-color($warning, 80%) !default;
|
|
||||||
$danger-bg-subtle-dark: shade-color($danger, 80%) !default;
|
|
||||||
$light-bg-subtle-dark: $gray-800 !default;
|
|
||||||
$dark-bg-subtle-dark: color.mix($gray-800, $black) !default;
|
|
||||||
|
|
||||||
// Theme border subtle dark
|
|
||||||
$primary-border-subtle-dark: shade-color($primary, 40%) !default;
|
|
||||||
$secondary-border-subtle-dark: shade-color($secondary, 40%) !default;
|
|
||||||
$success-border-subtle-dark: shade-color($success, 40%) !default;
|
|
||||||
$info-border-subtle-dark: shade-color($info, 40%) !default;
|
|
||||||
$warning-border-subtle-dark: shade-color($warning, 40%) !default;
|
|
||||||
$danger-border-subtle-dark: shade-color($danger, 40%) !default;
|
|
||||||
$light-border-subtle-dark: $gray-700 !default;
|
|
||||||
$dark-border-subtle-dark: $gray-800 !default;
|
|
||||||
|
|
||||||
// Body dark
|
|
||||||
$body-bg-dark: $gray-900 !default;
|
|
||||||
$body-secondary-color-dark: rgba($body-color-dark, 0.75) !default;
|
|
||||||
$body-secondary-bg-dark: $gray-800 !default;
|
|
||||||
$body-tertiary-color-dark: rgba($body-color-dark, 0.5) !default;
|
|
||||||
$body-tertiary-bg-dark: color.mix($gray-800, $gray-900, 50%) !default;
|
|
||||||
|
|
||||||
// Headings dark
|
|
||||||
$headings-color-dark: inherit !default;
|
|
||||||
|
|
||||||
// Link dark
|
|
||||||
$link-color-dark: tint-color($primary, 40%) !default;
|
|
||||||
$link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage) !default;
|
|
||||||
|
|
||||||
// Mark dark
|
|
||||||
$mark-color-dark: $body-color-dark !default;
|
|
||||||
$mark-bg-dark: shade-color($yellow, 60%) !default;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Forms dark
|
|
||||||
//
|
|
||||||
|
|
||||||
$form-select-indicator-color-dark: $body-color-dark !default;
|
|
||||||
$form-select-indicator-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color-dark}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>") !default;
|
|
||||||
|
|
||||||
$form-switch-color-dark: rgba($white, 0.25) !default;
|
|
||||||
$form-switch-bg-image-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color-dark}'/></svg>") !default;
|
|
||||||
|
|
||||||
// Form validation colors dark
|
|
||||||
$form-valid-color-dark: tint-color($green, 40%) !default;
|
|
||||||
$form-valid-border-color-dark: tint-color($green, 40%) !default;
|
|
||||||
$form-invalid-color-dark: tint-color($red, 40%) !default;
|
|
||||||
$form-invalid-border-color-dark: tint-color($red, 40%) !default;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Accordion dark
|
|
||||||
//
|
|
||||||
|
|
||||||
$accordion-icon-color-dark: $primary-text-emphasis-dark !default;
|
|
||||||
$accordion-icon-active-color-dark: $primary-text-emphasis-dark !default;
|
|
||||||
|
|
||||||
$accordion-button-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>") !default;
|
|
||||||
$accordion-button-active-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>") !default;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Carousel dark
|
|
||||||
//
|
|
||||||
|
|
||||||
$carousel-dark-indicator-active-bg: $black !default; // Deprecated in v5.3.4
|
|
||||||
$carousel-dark-caption-color: $black !default; // Deprecated in v5.3.4
|
|
||||||
$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default; // Deprecated in v5.3.4
|
|
||||||
|
|
||||||
$carousel-indicator-active-bg-dark: $carousel-dark-indicator-active-bg !default;
|
|
||||||
$carousel-caption-color-dark: $carousel-dark-caption-color !default;
|
|
||||||
$carousel-control-icon-filter-dark: $carousel-dark-control-icon-filter !default;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Close button dark
|
|
||||||
//
|
|
||||||
|
|
||||||
$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default; // Deprecated in v5.3.4
|
|
||||||
|
|
||||||
$btn-close-filter-dark: $btn-close-white-filter !default;
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,184 +0,0 @@
|
|||||||
// Geist Sans Font Family
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-sans/Geist-Thin.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-sans/Geist-Thin.ttf') format('truetype');
|
|
||||||
font-weight: 100;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-sans/Geist-UltraLight.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-sans/Geist-UltraLight.ttf') format('truetype');
|
|
||||||
font-weight: 200;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-sans/Geist-Light.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-sans/Geist-Light.ttf') format('truetype');
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-sans/Geist-Regular.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-sans/Geist-Regular.ttf') format('truetype');
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-sans/Geist-Medium.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-sans/Geist-Medium.ttf') format('truetype');
|
|
||||||
font-weight: 500;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-sans/Geist-SemiBold.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-sans/Geist-SemiBold.ttf') format('truetype');
|
|
||||||
font-weight: 600;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-sans/Geist-Bold.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-sans/Geist-Bold.ttf') format('truetype');
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-sans/Geist-Black.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-sans/Geist-Black.ttf') format('truetype');
|
|
||||||
font-weight: 800;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-sans/Geist-UltraBlack.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-sans/Geist-UltraBlack.ttf') format('truetype');
|
|
||||||
font-weight: 900;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Geist Sans Variable Font
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-sans/Geist-Variable.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-sans/Geist-Variable.ttf') format('truetype');
|
|
||||||
font-weight: 100 900;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Geist Mono Font Family
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist Mono';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-mono/GeistMono-Thin.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-mono/GeistMono-Thin.ttf') format('truetype');
|
|
||||||
font-weight: 100;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist Mono';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-mono/GeistMono-UltraLight.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-mono/GeistMono-UltraLight.ttf') format('truetype');
|
|
||||||
font-weight: 200;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist Mono';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-mono/GeistMono-Light.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-mono/GeistMono-Light.ttf') format('truetype');
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist Mono';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-mono/GeistMono-Regular.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-mono/GeistMono-Regular.ttf') format('truetype');
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist Mono';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-mono/GeistMono-Medium.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-mono/GeistMono-Medium.ttf') format('truetype');
|
|
||||||
font-weight: 500;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist Mono';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-mono/GeistMono-SemiBold.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-mono/GeistMono-SemiBold.ttf') format('truetype');
|
|
||||||
font-weight: 600;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist Mono';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-mono/GeistMono-Bold.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-mono/GeistMono-Bold.ttf') format('truetype');
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist Mono';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-mono/GeistMono-Black.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-mono/GeistMono-Black.ttf') format('truetype');
|
|
||||||
font-weight: 800;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist Mono';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-mono/GeistMono-UltraBlack.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-mono/GeistMono-UltraBlack.ttf') format('truetype');
|
|
||||||
font-weight: 900;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Geist Mono Variable Font
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Geist Mono';
|
|
||||||
src: url('#{$assets-base}/fonts/geist-mono/GeistMono-Variable.woff2') format('woff2'),
|
|
||||||
url('#{$assets-base}/fonts/geist-mono/GeistMono-Variable.ttf') format('truetype');
|
|
||||||
font-weight: 100 900;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
@if $font-google {
|
@if $font-google {
|
||||||
$google-font-url: 'https://fonts.googleapis.com/css2?family=' + str-replace($font-google, ' ', '+') + ':wght@300;400;500;600;700&display=swap' !default;
|
$google-font-url: "https://fonts.googleapis.com/css2?family=" + str-replace($font-google, " ", "+") + ":wght@300;400;500;600;700&display=swap" !default;
|
||||||
@import url($google-font-url);
|
@import url($google-font-url);
|
||||||
}
|
}
|
||||||
|
|
||||||
@if $font-google-monospaced {
|
@if $font-google-monospaced {
|
||||||
$google-font-monospaced-url: 'https://fonts.googleapis.com/css2?family=' + str-replace($font-google-monospaced, ' ', '+') + ':wght@300;400;500;600;700&display=swap' !default;
|
$google-font-monospaced-url: "https://fonts.googleapis.com/css2?family=" + str-replace($font-google-monospaced, " ", "+") + ":wght@300;400;500;600;700&display=swap" !default;
|
||||||
@import url($google-font-monospaced-url);
|
@import url($google-font-monospaced-url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
@use 'sass:map';
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Clearfix
|
// Clearfix
|
||||||
//
|
//
|
||||||
@@ -30,14 +28,14 @@
|
|||||||
// Stretched link
|
// Stretched link
|
||||||
//
|
//
|
||||||
.stretched-link {
|
.stretched-link {
|
||||||
&::after {
|
&::#{$stretched-link-pseudo-element} {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
inset-inline-end: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
inset-inline-start: 0;
|
left: 0;
|
||||||
z-index: 1;
|
z-index: $stretched-link-z-index;
|
||||||
content: '';
|
content: "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,21 +72,21 @@
|
|||||||
.fixed-top {
|
.fixed-top {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
inset-inline-end: 0;
|
right: 0;
|
||||||
inset-inline-start: 0;
|
left: 0;
|
||||||
z-index: $zindex-fixed;
|
z-index: $zindex-fixed;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fixed-bottom {
|
.fixed-bottom {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
inset-inline-end: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
inset-inline-start: 0;
|
left: 0;
|
||||||
z-index: $zindex-fixed;
|
z-index: $zindex-fixed;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Responsive sticky top and bottom
|
// Responsive sticky top and bottom
|
||||||
@each $breakpoint in map.keys($grid-breakpoints) {
|
@each $breakpoint in map-keys($grid-breakpoints) {
|
||||||
@include media-breakpoint-up($breakpoint) {
|
@include media-breakpoint-up($breakpoint) {
|
||||||
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
||||||
|
|
||||||
@@ -116,13 +114,13 @@
|
|||||||
&::before {
|
&::before {
|
||||||
display: block;
|
display: block;
|
||||||
padding-top: var(--#{$prefix}aspect-ratio);
|
padding-top: var(--#{$prefix}aspect-ratio);
|
||||||
content: '';
|
content: "";
|
||||||
}
|
}
|
||||||
|
|
||||||
>* {
|
> * {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
inset-inline-start: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
@@ -141,4 +139,5 @@
|
|||||||
outline: 0;
|
outline: 0;
|
||||||
// By default, there is no `--bs-focus-ring-x`, `--bs-focus-ring-y`, or `--bs-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values
|
// By default, there is no `--bs-focus-ring-x`, `--bs-focus-ring-y`, or `--bs-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values
|
||||||
box-shadow: var(--#{$prefix}focus-ring-x, 0) var(--#{$prefix}focus-ring-y, 0) var(--#{$prefix}focus-ring-blur, 0) var(--#{$prefix}focus-ring-width) var(--#{$prefix}focus-ring-color);
|
box-shadow: var(--#{$prefix}focus-ring-x, 0) var(--#{$prefix}focus-ring-y, 0) var(--#{$prefix}focus-ring-blur, 0) var(--#{$prefix}focus-ring-width) var(--#{$prefix}focus-ring-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,50 +1,39 @@
|
|||||||
@keyframes pulse {
|
@keyframes pulse {
|
||||||
0% {
|
from {
|
||||||
transform: scale(1);
|
opacity: 1;
|
||||||
|
transform: scale3d(.8, .8, .8)
|
||||||
}
|
}
|
||||||
|
|
||||||
14% {
|
50% {
|
||||||
transform: scale(1.25);
|
transform: scale3d(1, 1, 1);
|
||||||
|
opacity: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
28% {
|
to {
|
||||||
transform: scale(1);
|
opacity: 1;
|
||||||
}
|
transform: scale3d(.8, .8, .8)
|
||||||
|
|
||||||
42% {
|
|
||||||
transform: scale(1.25);
|
|
||||||
}
|
|
||||||
|
|
||||||
70% {
|
|
||||||
transform: scale(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes tada {
|
@keyframes tada {
|
||||||
0% {
|
0% {
|
||||||
transform: scale3d(1, 1, 1);
|
transform: scale3d(1, 1, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
10%,
|
10%, 5% {
|
||||||
5% {
|
transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -5deg)
|
||||||
transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -5deg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
15%,
|
15%, 25%, 35%, 45% {
|
||||||
25%,
|
transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 5deg)
|
||||||
35%,
|
|
||||||
45% {
|
|
||||||
transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 5deg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
20%,
|
20%, 30%, 40% {
|
||||||
30%,
|
transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -5deg)
|
||||||
40% {
|
|
||||||
transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -5deg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
50% {
|
50% {
|
||||||
transform: scale3d(1, 1, 1);
|
transform: scale3d(1, 1, 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,27 +61,3 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes shake {
|
|
||||||
0% {
|
|
||||||
transform: scaleX(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
20% {
|
|
||||||
transform: scale3d(0.9, 0.9, 0.9) rotate(-5deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
50%,
|
|
||||||
70%,
|
|
||||||
90% {
|
|
||||||
transform: scale3d(1.25, 1.25, 1.25) rotate(5deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
60%,
|
|
||||||
80% {
|
|
||||||
transform: scale3d(1.25, 1.25, 1.25) rotate(-5deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
to {
|
|
||||||
transform: scaleX(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,23 +1,9 @@
|
|||||||
@use 'sass:map';
|
|
||||||
|
|
||||||
html {
|
|
||||||
scrollbar-gutter: stable;
|
|
||||||
|
|
||||||
@supports not (scrollbar-gutter: stable) {
|
|
||||||
overflow-y: scroll;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// stylelint-disable property-no-vendor-prefix
|
// stylelint-disable property-no-vendor-prefix
|
||||||
body {
|
body {
|
||||||
letter-spacing: $body-letter-spacing;
|
letter-spacing: $body-letter-spacing;
|
||||||
touch-action: manipulation;
|
touch-action: manipulation;
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
font-feature-settings:
|
font-feature-settings: "liga" 0, "cv03", "cv04", "cv11";
|
||||||
'liga' 0,
|
|
||||||
'cv03',
|
|
||||||
'cv04',
|
|
||||||
'cv11';
|
|
||||||
position: relative;
|
position: relative;
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@@ -26,7 +12,7 @@ body {
|
|||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
|
||||||
@include media-print {
|
@media print {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -38,8 +24,8 @@ body {
|
|||||||
//
|
//
|
||||||
.layout-fluid {
|
.layout-fluid {
|
||||||
.container,
|
.container,
|
||||||
[class^='container-'],
|
[class^="container-"],
|
||||||
[class*=' container-'] {
|
[class*=" container-"] {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,10 +35,10 @@ body {
|
|||||||
//
|
//
|
||||||
.layout-boxed {
|
.layout-boxed {
|
||||||
--#{$prefix}theme-boxed-border-radius: 0;
|
--#{$prefix}theme-boxed-border-radius: 0;
|
||||||
--#{$prefix}theme-boxed-width: #{map.get($container-max-widths, xxl)};
|
--#{$prefix}theme-boxed-width: #{map-get($container-max-widths, xxl)};
|
||||||
|
|
||||||
@include media-breakpoint-up(md) {
|
@include media-breakpoint-up(md) {
|
||||||
background: $dark linear-gradient(to right, rgba(#fff, 0.1), transparent) fixed;
|
background: $dark linear-gradient(to right, rgba(#fff, .1), transparent) fixed;
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
--#{$prefix}theme-boxed-border-radius: #{$border-radius};
|
--#{$prefix}theme-boxed-border-radius: #{$border-radius};
|
||||||
}
|
}
|
||||||
@@ -69,8 +55,8 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
> .navbar:first-child {
|
> .navbar:first-child {
|
||||||
border-start-start-radius: var(--#{$prefix}theme-boxed-border-radius);
|
border-top-left-radius: var(--#{$prefix}theme-boxed-border-radius);
|
||||||
border-start-end-radius: var(--#{$prefix}theme-boxed-border-radius);
|
border-top-right-radius: var(--#{$prefix}theme-boxed-border-radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
@use 'sass:color';
|
@use "sass:color";
|
||||||
|
|
||||||
// stylelint-disable declaration-no-important
|
// stylelint-disable declaration-no-important
|
||||||
|
|
||||||
@if $enable-dark-mode {
|
@if $enable-dark-mode {
|
||||||
:root {
|
:root {
|
||||||
&:not(.theme-dark):not([data-bs-theme='dark']) {
|
&:not(.theme-dark):not([data-bs-theme="dark"]) {
|
||||||
.hide-theme-light {
|
.hide-theme-light {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&.theme-dark,
|
&.theme-dark,
|
||||||
&[data-bs-theme='dark'] {
|
&[data-bs-theme="dark"] {
|
||||||
.hide-theme-dark {
|
.hide-theme-dark {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
@@ -26,6 +26,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@include color-mode(dark, true) {
|
@include color-mode(dark, true) {
|
||||||
color-scheme: dark;
|
color-scheme: dark;
|
||||||
--#{$prefix}body-color: var(--#{$prefix}gray-200);
|
--#{$prefix}body-color: var(--#{$prefix}gray-200);
|
||||||
@@ -47,12 +48,16 @@
|
|||||||
--#{$prefix}link-hover-color: color-mix(in srgb, var(--#{$prefix}primary), black 20%);
|
--#{$prefix}link-hover-color: color-mix(in srgb, var(--#{$prefix}primary), black 20%);
|
||||||
|
|
||||||
--#{$prefix}active-bg: #{$lighten-dark};
|
--#{$prefix}active-bg: #{$lighten-dark};
|
||||||
--#{$prefix}disabled-color: #{color-transparent(var(--#{$prefix}body-color), 0.4)};
|
--#{$prefix}disabled-color: #{color-transparent(var(--#{$prefix}body-color), .4)};
|
||||||
|
|
||||||
--#{$prefix}border-color: var(--#{$prefix}gray-700);
|
--#{$prefix}border-color: var(--#{$prefix}gray-700);
|
||||||
--#{$prefix}border-color-translucent: var(--#{$prefix}dark-mode-border-color-translucent);
|
--#{$prefix}border-color-translucent: var(
|
||||||
|
--#{$prefix}dark-mode-border-color-translucent
|
||||||
|
);
|
||||||
--#{$prefix}border-dark-color: var(--#{$prefix}dark-mode-border-dark-color);
|
--#{$prefix}border-dark-color: var(--#{$prefix}dark-mode-border-dark-color);
|
||||||
--#{$prefix}border-active-color: var(--#{$prefix}dark-mode-border-active-color);
|
--#{$prefix}border-active-color: var(
|
||||||
|
--#{$prefix}dark-mode-border-active-color
|
||||||
|
);
|
||||||
|
|
||||||
--#{$prefix}btn-color: #{$darken-dark};
|
--#{$prefix}btn-color: #{$darken-dark};
|
||||||
|
|
||||||
@@ -63,7 +68,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
body[data-bs-theme='dark'] [data-bs-theme='light'] {
|
body[data-bs-theme=dark] [data-bs-theme=light] {
|
||||||
@extend [data-bs-theme='dark'];
|
@extend [data-bs-theme=dark];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,13 +4,9 @@
|
|||||||
padding: $footer-padding-y 0;
|
padding: $footer-padding-y 0;
|
||||||
color: $footer-color;
|
color: $footer-color;
|
||||||
margin-top: auto;
|
margin-top: auto;
|
||||||
|
|
||||||
@include media-print {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-transparent {
|
.footer-transparent {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border-top: 0;
|
border-top: 0;
|
||||||
}
|
}
|
||||||
@@ -1,22 +1,20 @@
|
|||||||
@use 'sass:map';
|
|
||||||
|
|
||||||
@mixin navbar-vertical-nav {
|
@mixin navbar-vertical-nav {
|
||||||
.navbar-collapse {
|
.navbar-collapse {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
[class^='container'] {
|
[class^="container"] {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-nav {
|
.navbar-nav {
|
||||||
margin-inline-start: 0;
|
margin-left: 0;
|
||||||
margin-inline-end: 0;
|
margin-right: 0;
|
||||||
|
|
||||||
.nav-link {
|
.nav-link {
|
||||||
padding: 0.5rem calc(#{$container-padding-x} / 2);
|
padding: 0.5rem calc(#{$container-padding-x} / 2);
|
||||||
justify-content: start;
|
justify-content: flex-start;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +36,7 @@
|
|||||||
min-width: 0;
|
min-width: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
width: auto;
|
width: auto;
|
||||||
padding-inline-start: add(calc(#{$container-padding-x} / 2), 1.75rem);
|
padding-left: add(calc(#{$container-padding-x} / 2), 1.75rem);
|
||||||
color: inherit;
|
color: inherit;
|
||||||
|
|
||||||
&.disabled {
|
&.disabled {
|
||||||
@@ -54,22 +52,22 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-menu .dropdown-item {
|
.dropdown-menu .dropdown-item {
|
||||||
padding-inline-start: add(calc(#{$container-padding-x} / 2), 3.25rem);
|
padding-left: add(calc(#{$container-padding-x} / 2), 3.25rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-menu .dropdown-menu .dropdown-item {
|
.dropdown-menu .dropdown-menu .dropdown-item {
|
||||||
padding-inline-start: add(calc(#{$container-padding-x} / 2), 4.75rem);
|
padding-left: add(calc(#{$container-padding-x} / 2), 4.75rem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-toggle:after {
|
.dropdown-toggle:after {
|
||||||
margin-inline-start: auto;
|
margin-left: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-item.active:after {
|
.nav-item.active:after {
|
||||||
border-bottom-width: 0;
|
border-bottom-width: 0;
|
||||||
border-inline-start-width: 3px;
|
border-left-width: 3px;
|
||||||
inset-inline-end: auto;
|
right: auto;
|
||||||
top: 0;
|
top: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
}
|
}
|
||||||
@@ -117,8 +115,8 @@ Navbar
|
|||||||
|
|
||||||
.badge {
|
.badge {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0.5rem;
|
top: 0.375rem;
|
||||||
inset-inline-end: 0.5rem;
|
right: 0.375rem;
|
||||||
transform: translate(50%, -50%);
|
transform: translate(50%, -50%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -126,7 +124,7 @@ Navbar
|
|||||||
}
|
}
|
||||||
|
|
||||||
.navbar-expand {
|
.navbar-expand {
|
||||||
@each $breakpoint in map.keys($grid-breakpoints) {
|
@each $breakpoint in map-keys($grid-breakpoints) {
|
||||||
$next: breakpoint-next($breakpoint, $grid-breakpoints);
|
$next: breakpoint-next($breakpoint, $grid-breakpoints);
|
||||||
$infix: breakpoint-infix($next, $grid-breakpoints);
|
$infix: breakpoint-infix($next, $grid-breakpoints);
|
||||||
|
|
||||||
@@ -149,10 +147,10 @@ Navbar
|
|||||||
}
|
}
|
||||||
|
|
||||||
&:after {
|
&:after {
|
||||||
content: '';
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
inset-inline-start: 0;
|
left: 0;
|
||||||
inset-inline-end: 0;
|
right: 0;
|
||||||
bottom: -0.25rem;
|
bottom: -0.25rem;
|
||||||
border: 0 var(--#{$prefix}border-style) var(--#{$prefix}navbar-active-border-color);
|
border: 0 var(--#{$prefix}border-style) var(--#{$prefix}navbar-active-border-color);
|
||||||
border-bottom-width: 2px;
|
border-bottom-width: 2px;
|
||||||
@@ -162,8 +160,7 @@ Navbar
|
|||||||
&.navbar-vertical {
|
&.navbar-vertical {
|
||||||
box-shadow: inset calc(-1 * var(--#{$prefix}navbar-border-width)) 0 0 0 var(--#{$prefix}navbar-border-color);
|
box-shadow: inset calc(-1 * var(--#{$prefix}navbar-border-width)) 0 0 0 var(--#{$prefix}navbar-border-color);
|
||||||
|
|
||||||
&.navbar-right,
|
&.navbar-right {
|
||||||
&.navbar-end {
|
|
||||||
box-shadow: inset calc(1 * var(--#{$prefix}navbar-border-width)) 0 0 0 var(--#{$prefix}navbar-border-color);
|
box-shadow: inset calc(1 * var(--#{$prefix}navbar-border-width)) 0 0 0 var(--#{$prefix}navbar-border-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,16 +168,15 @@ Navbar
|
|||||||
&.navbar-vertical {
|
&.navbar-vertical {
|
||||||
~ .navbar,
|
~ .navbar,
|
||||||
~ .page-wrapper {
|
~ .page-wrapper {
|
||||||
margin-inline-start: $sidebar-width;
|
margin-left: $sidebar-width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.navbar-vertical.navbar-right,
|
&.navbar-vertical.navbar-right {
|
||||||
&.navbar-vertical.navbar-end {
|
|
||||||
~ .navbar,
|
~ .navbar,
|
||||||
~ .page-wrapper {
|
~ .page-wrapper {
|
||||||
margin-inline-start: 0;
|
margin-left: 0;
|
||||||
margin-inline-end: $sidebar-width;
|
margin-right: $sidebar-width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -223,19 +219,24 @@ Navbar toggler
|
|||||||
width: 1.25em;
|
width: 1.25em;
|
||||||
background: currentColor;
|
background: currentColor;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
|
@include transition(
|
||||||
|
top $navbar-toggler-animation-time $navbar-toggler-animation-time,
|
||||||
|
bottom $navbar-toggler-animation-time $navbar-toggler-animation-time,
|
||||||
|
transform $navbar-toggler-animation-time,
|
||||||
|
opacity 0s $navbar-toggler-animation-time
|
||||||
|
);
|
||||||
position: relative;
|
position: relative;
|
||||||
@include transition(top $navbar-toggler-animation-time $navbar-toggler-animation-time, bottom $navbar-toggler-animation-time $navbar-toggler-animation-time, transform $navbar-toggler-animation-time, opacity 0s $navbar-toggler-animation-time);
|
|
||||||
|
|
||||||
&:before,
|
&:before,
|
||||||
&:after {
|
&:after {
|
||||||
content: '';
|
content: "";
|
||||||
display: block;
|
display: block;
|
||||||
height: inherit;
|
height: inherit;
|
||||||
width: inherit;
|
width: inherit;
|
||||||
border-radius: inherit;
|
border-radius: inherit;
|
||||||
background: inherit;
|
background: inherit;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
inset-inline-start: 0;
|
left: 0;
|
||||||
@include transition(inherit);
|
@include transition(inherit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,7 +248,7 @@ Navbar toggler
|
|||||||
bottom: -0.45em;
|
bottom: -0.45em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-toggler[aria-expanded='true'] & {
|
.navbar-toggler[aria-expanded="true"] & {
|
||||||
transform: rotate(45deg);
|
transform: rotate(45deg);
|
||||||
@include transition(top $transition-time, bottom $transition-time, transform $transition-time $transition-time, opacity 0s $transition-time);
|
@include transition(top $transition-time, bottom $transition-time, transform $transition-time $transition-time, opacity 0s $transition-time);
|
||||||
|
|
||||||
@@ -304,7 +305,7 @@ Navbar vertical
|
|||||||
@if $enable-navbar-vertical {
|
@if $enable-navbar-vertical {
|
||||||
.navbar-vertical {
|
.navbar-vertical {
|
||||||
&.navbar-expand {
|
&.navbar-expand {
|
||||||
@each $breakpoint in map.keys($grid-breakpoints) {
|
@each $breakpoint in map-keys($grid-breakpoints) {
|
||||||
$next: breakpoint-next($breakpoint, $grid-breakpoints);
|
$next: breakpoint-next($breakpoint, $grid-breakpoints);
|
||||||
$infix: breakpoint-infix($next, $grid-breakpoints);
|
$infix: breakpoint-infix($next, $grid-breakpoints);
|
||||||
|
|
||||||
@@ -313,18 +314,17 @@ Navbar vertical
|
|||||||
width: $sidebar-width;
|
width: $sidebar-width;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
inset-inline-start: 0;
|
left: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
z-index: $zindex-fixed;
|
z-index: $zindex-fixed;
|
||||||
align-items: start;
|
align-items: flex-start;
|
||||||
|
@include transition(transform $transition-time);
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@include transition(transform $transition-time);
|
|
||||||
|
|
||||||
&.navbar-right,
|
&.navbar-right {
|
||||||
&.navbar-end {
|
left: auto;
|
||||||
inset-inline-start: auto;
|
right: 0;
|
||||||
inset-inline-end: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-brand {
|
.navbar-brand {
|
||||||
@@ -347,27 +347,26 @@ Navbar vertical
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
> [class^='container'] {
|
> [class^="container"] {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
justify-content: start;
|
justify-content: flex-start;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
~ .page {
|
~ .page {
|
||||||
padding-inline-start: $sidebar-width;
|
padding-left: $sidebar-width;
|
||||||
|
|
||||||
[class^='container'] {
|
[class^="container"] {
|
||||||
padding-inline-start: 1.5rem;
|
padding-left: 1.5rem;
|
||||||
padding-inline-end: 1.5rem;
|
padding-right: 1.5rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.navbar-right ~ .page,
|
&.navbar-right ~ .page {
|
||||||
&.navbar-end ~ .page {
|
padding-left: 0;
|
||||||
padding-inline-start: 0;
|
padding-right: $sidebar-width;
|
||||||
padding-inline-end: $sidebar-width;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@include navbar-vertical-nav;
|
@include navbar-vertical-nav;
|
||||||
@@ -380,12 +379,12 @@ Navbar vertical
|
|||||||
|
|
||||||
.navbar-overlap {
|
.navbar-overlap {
|
||||||
&:after {
|
&:after {
|
||||||
content: '';
|
content: "";
|
||||||
height: $navbar-overlap-height;
|
height: $navbar-overlap-height;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 100%;
|
top: 100%;
|
||||||
inset-inline-start: 0;
|
left: 0;
|
||||||
inset-inline-end: 0;
|
right: 0;
|
||||||
background: inherit;
|
background: inherit;
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
box-shadow: inherit;
|
box-shadow: inherit;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
@include media-print {
|
@media print {
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,16 +64,17 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&:after {
|
&:after {
|
||||||
content: '';
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
inset-inline-start: 0;
|
left: 0;
|
||||||
inset-inline-end: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background-image: $overlay-gradient;
|
background-image: $overlay-gradient;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.page-header {
|
.page-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
@@ -110,7 +111,7 @@
|
|||||||
svg {
|
svg {
|
||||||
width: 1.5rem;
|
width: 1.5rem;
|
||||||
height: 1.5rem;
|
height: 1.5rem;
|
||||||
margin-inline-end: 0.25rem;
|
margin-right: .25rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,7 +121,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.page-subtitle {
|
.page-subtitle {
|
||||||
margin-top: 0.25rem;
|
margin-top: .25rem;
|
||||||
color: var(--#{$prefix}secondary);
|
color: var(--#{$prefix}secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,8 +140,8 @@
|
|||||||
.page-cover-img {
|
.page-cover-img {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
|
top: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
|
||||||
inset-inline-start: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
|
left: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
|
||||||
inset-inline-end: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
|
right: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
|
||||||
bottom: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
|
bottom: calc(-2 * var(--#{$prefix}page-cover-blur, 0));
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
filter: blur(var(--#{$prefix}page-cover-blur));
|
filter: blur(var(--#{$prefix}page-cover-blur));
|
||||||
@@ -154,7 +155,7 @@
|
|||||||
// Page tabs
|
// Page tabs
|
||||||
//
|
//
|
||||||
.page-tabs {
|
.page-tabs {
|
||||||
margin-top: 0.5rem;
|
margin-top: .5rem;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,4 +167,4 @@
|
|||||||
+ .page-body-card {
|
+ .page-body-card {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,11 +2,16 @@
|
|||||||
:host {
|
:host {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
margin-left: calc(100vw - 100%);
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:root,
|
:root,
|
||||||
:host,
|
:host,
|
||||||
[data-bs-theme='light'] {
|
[data-bs-theme="light"] {
|
||||||
color-scheme: light;
|
color-scheme: light;
|
||||||
--#{$prefix}spacer: var(--#{$prefix}spacer-2);
|
--#{$prefix}spacer: var(--#{$prefix}spacer-2);
|
||||||
|
|
||||||
|
|||||||
@@ -9,14 +9,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.browser-header {
|
.browser-header {
|
||||||
padding: 0.25rem 1rem;
|
padding: .25rem 1rem;
|
||||||
background: var(--#{$prefix}border-color-light) linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.03));
|
background: var(--#{$prefix}border-color-light) linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .03));
|
||||||
border-bottom: 1px solid var(--#{$prefix}border-color);
|
border-bottom: 1px solid var(--#{$prefix}border-color);
|
||||||
border-radius: calc(var(--#{$prefix}border-radius-lg) - 1px) calc(var(--#{$prefix}border-radius-lg) - 1px) 0 0;
|
border-radius: calc(var(--#{$prefix}border-radius-lg) - 1px) calc(var(--#{$prefix}border-radius-lg) - 1px) 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.browser-dots {
|
.browser-dots {
|
||||||
margin-inline-end: 3rem;
|
margin-right: 3rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,10 +37,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.browser-dot {
|
.browser-dot {
|
||||||
margin-inline-end: 0.5rem;
|
margin-right: .5rem;
|
||||||
width: 0.75rem;
|
width: .75rem;
|
||||||
min-width: 0.75rem;
|
min-width: .75rem;
|
||||||
height: 0.75rem;
|
height: .75rem;
|
||||||
background: var(--#{$prefix}border-color);
|
background: var(--#{$prefix}border-color);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
border: 1px solid var(--#{$prefix}border-color-dark);
|
border: 1px solid var(--#{$prefix}border-color-dark);
|
||||||
@@ -52,15 +52,13 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
padding: 0.25rem;
|
padding: .25rem;
|
||||||
color: var(--#{$prefix}secondary);
|
color: var(--#{$prefix}secondary);
|
||||||
font-size: var(--#{$prefix}font-size-h5);
|
font-size: var(--#{$prefix}font-size-h5);
|
||||||
border-radius: var(--#{$prefix}border-radius);
|
border-radius: var(--#{$prefix}border-radius);
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
box-shadow:
|
box-shadow: 0 0 0 1px rgba(0, 0, 0, .05), 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
||||||
0 0 0 1px rgba(0, 0, 0, 0.05),
|
|
||||||
0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
||||||
background-image: linear-gradient(to bottom, var(--#{$prefix}bg-surface), var(--#{$prefix}bg-surface-secondary));
|
background-image: linear-gradient(to bottom, var(--#{$prefix}bg-surface), var(--#{$prefix}bg-surface-secondary));
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
|
|||||||
@@ -5,4 +5,4 @@
|
|||||||
|
|
||||||
.body-gradient {
|
.body-gradient {
|
||||||
background: var(--#{$prefix}bg-surface) linear-gradient(to bottom, var(--#{$prefix}bg-surface-secondary) 12%, var(--#{$prefix}bg-surface) 99%) repeat-x top center/100% 100vh;
|
background: var(--#{$prefix}bg-surface) linear-gradient(to bottom, var(--#{$prefix}bg-surface-secondary) 12%, var(--#{$prefix}bg-surface) 99%) repeat-x top center/100% 100vh;
|
||||||
}
|
}
|
||||||
@@ -60,10 +60,10 @@ $pricing-card-width: 22rem;
|
|||||||
.pricing-label {
|
.pricing-label {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
inset-inline-start: 0;
|
left: 0;
|
||||||
transform: translateY(-50%);
|
transform: translateY(-50%);
|
||||||
vertical-align: bottom;
|
vertical-align: bottom;
|
||||||
inset-inline-end: 0;
|
right: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -79,15 +79,15 @@ $pricing-card-width: 22rem;
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
font-size: 2.5rem;
|
font-size: 2.5rem;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
font-weight: $font-weight-semibold;
|
font-weight: $font-weight-black;
|
||||||
margin: 0.75rem 0;
|
margin: 0.75rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-price-currency {
|
.pricing-price-currency {
|
||||||
font-size: $h2-font-size;
|
font-size: $h2-font-size;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
margin-inline-end: 0.25rem;
|
margin-right: 0.25rem;
|
||||||
font-weight: $font-weight-semibold;
|
font-weight: $font-weight-bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-price-description {
|
.pricing-price-description {
|
||||||
@@ -96,14 +96,14 @@ $pricing-card-width: 22rem;
|
|||||||
font-weight: $font-weight-normal;
|
font-weight: $font-weight-normal;
|
||||||
color: $text-secondary;
|
color: $text-secondary;
|
||||||
align-self: center;
|
align-self: center;
|
||||||
margin-inline-start: 0.5rem;
|
margin-left: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-features {
|
.pricing-features {
|
||||||
margin: 1rem 0 0;
|
margin: 1rem 0 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
text-align: start;
|
text-align: left;
|
||||||
|
|
||||||
> li:not(:first-child) {
|
> li:not(:first-child) {
|
||||||
margin-top: 0.25rem;
|
margin-top: 0.25rem;
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
|
|
||||||
.section-title {
|
.section-title {
|
||||||
font-size: var(--#{$prefix}font-size-h1);
|
font-size: var(--#{$prefix}font-size-h1);
|
||||||
font-weight: var(--#{$prefix}font-weight-semibold);
|
font-weight: var(--#{$prefix}font-weight-bold);
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,17 +108,17 @@
|
|||||||
|
|
||||||
.wave-2 {
|
.wave-2 {
|
||||||
animation: move-forever2 24s linear infinite;
|
animation: move-forever2 24s linear infinite;
|
||||||
opacity: 0.5;
|
opacity: .5;
|
||||||
animation-delay: -2s;
|
animation-delay: -2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wave-3 {
|
.wave-3 {
|
||||||
animation: move-forever3 18s linear infinite;
|
animation: move-forever3 18s linear infinite;
|
||||||
opacity: 0.3;
|
opacity: .3;
|
||||||
animation-delay: -2s;
|
animation-delay: -2s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.section-divider-auto {
|
.section-divider-auto {
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
@use 'sass:map';
|
|
||||||
|
|
||||||
.shape {
|
.shape {
|
||||||
--#{$prefix}shape-size: #{$avatar-size};
|
--#{$prefix}shape-size: #{$avatar-size};
|
||||||
--#{$prefix}shape-icon-size: #{$avatar-icon-size};
|
--#{$prefix}shape-icon-size: #{$avatar-icon-size};
|
||||||
@@ -20,8 +18,8 @@
|
|||||||
|
|
||||||
@each $avatar-size, $size in $avatar-sizes {
|
@each $avatar-size, $size in $avatar-sizes {
|
||||||
.shape-#{$avatar-size} {
|
.shape-#{$avatar-size} {
|
||||||
--#{$prefix}shape-size: #{map.get($size, size)};
|
--#{$prefix}shape-size: #{map-get($size, size)};
|
||||||
--#{$prefix}shape-icon-size: #{map.get($size, icon-size)};
|
--#{$prefix}shape-icon-size: #{map-get($size, icon-size)};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,4 +28,4 @@
|
|||||||
background: var(--#{$prefix}#{$name}-lt);
|
background: var(--#{$prefix}#{$name}-lt);
|
||||||
color: var(--#{$prefix}#{$name});
|
color: var(--#{$prefix}#{$name});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,5 @@
|
|||||||
@use 'sass:math';
|
|
||||||
@use 'sass:string';
|
|
||||||
@use 'sass:list';
|
|
||||||
@use 'sass:map';
|
|
||||||
@use 'sass:color';
|
|
||||||
@use 'sass:meta';
|
|
||||||
|
|
||||||
@function theme-color-lighter($color, $background: #fff) {
|
@function theme-color-lighter($color, $background: #fff) {
|
||||||
@return color.mix($color, $background, 10%);
|
@return mix($color, $background, 10%);
|
||||||
}
|
}
|
||||||
|
|
||||||
@function theme-color-darker($color) {
|
@function theme-color-darker($color) {
|
||||||
@@ -16,11 +9,11 @@
|
|||||||
//
|
//
|
||||||
// Replace all occurrences of a substring within a string.
|
// Replace all occurrences of a substring within a string.
|
||||||
//
|
//
|
||||||
@function str-replace($string, $search, $replace: '') {
|
@function str-replace($string, $search, $replace: "") {
|
||||||
$index: string.index($string, $search);
|
$index: str-index($string, $search);
|
||||||
|
|
||||||
@if $index {
|
@if $index {
|
||||||
@return string.slice($string, 1, $index - 1) + $replace + str-replace(string.slice($string, $index + string.length($search)), $search, $replace);
|
@return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@return $string;
|
@return $string;
|
||||||
@@ -44,23 +37,23 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@function breakpoint-prev($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map.keys($breakpoints)) {
|
@function breakpoint-prev($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {
|
||||||
$n: index($breakpoint-names, $name);
|
$n: index($breakpoint-names, $name);
|
||||||
@if not $n {
|
@if not $n {
|
||||||
@error "breakpoint `#{$name}` not found in `#{$breakpoints}`";
|
@error "breakpoint `#{$name}` not found in `#{$breakpoints}`";
|
||||||
}
|
}
|
||||||
@return if($n > 1, list.nth($breakpoint-names, $n - 1), null);
|
@return if($n > 1, nth($breakpoint-names, $n - 1), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Escape SVG strings.
|
// Escape SVG strings.
|
||||||
//
|
//
|
||||||
@function escape-svg($string) {
|
@function escape-svg($string) {
|
||||||
@if string.index($string, 'data:image/svg+xml') {
|
@if str-index($string, "data:image/svg+xml") {
|
||||||
@each $char, $encoded in $escaped-characters {
|
@each $char, $encoded in $escaped-characters {
|
||||||
// Do not escape the url brackets
|
// Do not escape the url brackets
|
||||||
@if string.index($string, 'url(') == 1 {
|
@if str-index($string, "url(") == 1 {
|
||||||
$string: url('#{str-replace(string.slice($string, 6, -3), $char, $encoded)}');
|
$string: url("#{str-replace(str-slice($string, 6, -3), $char, $encoded)}");
|
||||||
} @else {
|
} @else {
|
||||||
$string: str-replace($string, $char, $encoded);
|
$string: str-replace($string, $char, $encoded);
|
||||||
}
|
}
|
||||||
@@ -77,7 +70,7 @@
|
|||||||
* @return {String} - The percentage representation of the value.
|
* @return {String} - The percentage representation of the value.
|
||||||
*/
|
*/
|
||||||
@function to-percentage($value) {
|
@function to-percentage($value) {
|
||||||
@return if(math.is-unitless($value), math.percentage($value), $value);
|
@return if(unitless($value), percentage($value), $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -100,326 +93,4 @@
|
|||||||
$svg: str-replace($svg, '<svg', '<svg xmlns="http://www.w3.org/2000/svg"');
|
$svg: str-replace($svg, '<svg', '<svg xmlns="http://www.w3.org/2000/svg"');
|
||||||
|
|
||||||
@return url('data:image/svg+xml;charset=UTF-8,#{$svg}');
|
@return url('data:image/svg+xml;charset=UTF-8,#{$svg}');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bootstrap functions
|
|
||||||
//
|
|
||||||
// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.
|
|
||||||
|
|
||||||
// Ascending
|
|
||||||
// Used to evaluate Sass maps like our grid breakpoints.
|
|
||||||
@mixin _assert-ascending($map, $map-name) {
|
|
||||||
$prev-key: null;
|
|
||||||
$prev-num: null;
|
|
||||||
@each $key, $num in $map {
|
|
||||||
@if $prev-num == null or math.unit($num) == '%' or math.unit($prev-num) == '%' {
|
|
||||||
// Do nothing
|
|
||||||
} @else if not math.compatible($prev-num, $num) {
|
|
||||||
@warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !";
|
|
||||||
} @else if $prev-num >= $num {
|
|
||||||
@warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !";
|
|
||||||
}
|
|
||||||
$prev-key: $key;
|
|
||||||
$prev-num: $num;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Starts at zero
|
|
||||||
// Used to ensure the min-width of the lowest breakpoint starts at 0.
|
|
||||||
@mixin _assert-starts-at-zero($map, $map-name: '$grid-breakpoints') {
|
|
||||||
@if list.length($map) > 0 {
|
|
||||||
$values: map.values($map);
|
|
||||||
$first-value: list.nth($values, 1);
|
|
||||||
@if $first-value != 0 {
|
|
||||||
@warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Colors
|
|
||||||
@function to-rgb($value) {
|
|
||||||
@return color.channel($value, 'red', $space: rgb), color.channel($value, 'green', $space: rgb), color.channel($value, 'blue', $space: rgb);
|
|
||||||
}
|
|
||||||
|
|
||||||
// stylelint-disable scss/dollar-variable-pattern
|
|
||||||
@function rgba-css-var($identifier, $target) {
|
|
||||||
@if $identifier == 'body' and $target == 'bg' {
|
|
||||||
@return rgba(var(--#{$prefix}#{$identifier}-bg-rgb), var(--#{$prefix}#{$target}-opacity));
|
|
||||||
}
|
|
||||||
@if $identifier == 'body' and $target == 'text' {
|
|
||||||
@return rgba(var(--#{$prefix}#{$identifier}-color-rgb), var(--#{$prefix}#{$target}-opacity));
|
|
||||||
} @else {
|
|
||||||
@return rgba(var(--#{$prefix}#{$identifier}-rgb), var(--#{$prefix}#{$target}-opacity));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@function map-loop($map, $func, $args...) {
|
|
||||||
$_map: ();
|
|
||||||
|
|
||||||
@each $key, $value in $map {
|
|
||||||
// allow to pass the $key and $value of the map as an function argument
|
|
||||||
$_args: ();
|
|
||||||
@each $arg in $args {
|
|
||||||
$_args: list.append($_args, if($arg == '$key', $key, if($arg == '$value', $value, $arg)));
|
|
||||||
}
|
|
||||||
|
|
||||||
$_map: map.merge(
|
|
||||||
$_map,
|
|
||||||
(
|
|
||||||
$key: meta.call(meta.get-function($func), $_args...),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@return $_map;
|
|
||||||
}
|
|
||||||
// stylelint-enable scss/dollar-variable-pattern
|
|
||||||
|
|
||||||
@function varify($list) {
|
|
||||||
$result: null;
|
|
||||||
@each $entry in $list {
|
|
||||||
$result: list.append($result, var(--#{$prefix}#{$entry}), space);
|
|
||||||
}
|
|
||||||
@return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Internal Bootstrap function to turn maps into its negative variant.
|
|
||||||
// It prefixes the keys with `n` and makes the value negative.
|
|
||||||
@function negativify-map($map) {
|
|
||||||
$result: ();
|
|
||||||
@each $key, $value in $map {
|
|
||||||
@if $key != 0 {
|
|
||||||
$result: map.merge($result, ('n' + $key: (-$value)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get multiple keys from a sass map
|
|
||||||
@function map-get-multiple($map, $values) {
|
|
||||||
$result: ();
|
|
||||||
@each $key, $value in $map {
|
|
||||||
@if (index($values, $key) != null) {
|
|
||||||
$result: map.merge(
|
|
||||||
$result,
|
|
||||||
(
|
|
||||||
$key: $value,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Merge multiple maps
|
|
||||||
@function map-merge-multiple($maps...) {
|
|
||||||
$merged-maps: ();
|
|
||||||
|
|
||||||
@each $map in $maps {
|
|
||||||
$merged-maps: map.merge($merged-maps, $map);
|
|
||||||
}
|
|
||||||
@return $merged-maps;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Replace `$search` with `$replace` in `$string`
|
|
||||||
// Used on our SVG icon backgrounds for custom forms.
|
|
||||||
//
|
|
||||||
// @author Kitty Giraudel
|
|
||||||
// @param {String} $string - Initial string
|
|
||||||
// @param {String} $search - Substring to replace
|
|
||||||
// @param {String} $replace ('') - New value
|
|
||||||
// @return {String} - Updated string
|
|
||||||
@function str-replace($string, $search, $replace: '') {
|
|
||||||
$index: string.index($string, $search);
|
|
||||||
|
|
||||||
@if $index {
|
|
||||||
@return string.slice($string, 1, $index - 1) + $replace + str-replace(string.slice($string, $index + string.length($search)), $search, $replace);
|
|
||||||
}
|
|
||||||
|
|
||||||
@return $string;
|
|
||||||
}
|
|
||||||
|
|
||||||
// See https://codepen.io/kevinweber/pen/dXWoRw
|
|
||||||
//
|
|
||||||
// Requires the use of quotes around data URIs.
|
|
||||||
|
|
||||||
@function escape-svg($string) {
|
|
||||||
@if string.index($string, 'data:image/svg+xml') {
|
|
||||||
@each $char, $encoded in $escaped-characters {
|
|
||||||
// Do not escape the url brackets
|
|
||||||
@if string.index($string, 'url(') == 1 {
|
|
||||||
$string: url('#{str-replace(string.slice($string, 6, -3), $char, $encoded)}');
|
|
||||||
} @else {
|
|
||||||
$string: str-replace($string, $char, $encoded);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@return $string;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Color contrast
|
|
||||||
// See https://github.com/twbs/bootstrap/pull/30168
|
|
||||||
|
|
||||||
// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255)
|
|
||||||
// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern
|
|
||||||
$_luminance-list: 0.0008 0.001 0.0011 0.0013 0.0015 0.0017 0.002 0.0022 0.0025 0.0027 0.003 0.0033 0.0037 0.004 0.0044 0.0048 0.0052 0.0056 0.006 0.0065 0.007 0.0075 0.008 0.0086 0.0091 0.0097 0.0103 0.011 0.0116 0.0123 0.013 0.0137 0.0144 0.0152 0.016 0.0168 0.0176 0.0185 0.0194 0.0203 0.0212 0.0222 0.0232 0.0242
|
|
||||||
0.0252 0.0262 0.0273 0.0284 0.0296 0.0307 0.0319 0.0331 0.0343 0.0356 0.0369 0.0382 0.0395 0.0409 0.0423 0.0437 0.0452 0.0467 0.0482 0.0497 0.0513 0.0529 0.0545 0.0561 0.0578 0.0595 0.0612 0.063 0.0648 0.0666 0.0685 0.0704 0.0723 0.0742 0.0762 0.0782 0.0802 0.0823 0.0844 0.0865 0.0887 0.0908 0.0931 0.0953 0.0976
|
|
||||||
0.0999 0.1022 0.1046 0.107 0.1095 0.1119 0.1144 0.117 0.1195 0.1221 0.1248 0.1274 0.1301 0.1329 0.1356 0.1384 0.1413 0.1441 0.147 0.15 0.1529 0.1559 0.159 0.162 0.1651 0.1683 0.1714 0.1746 0.1779 0.1812 0.1845 0.1878 0.1912 0.1946 0.1981 0.2016 0.2051 0.2086 0.2122 0.2159 0.2195 0.2232 0.227 0.2307 0.2346 0.2384
|
|
||||||
0.2423 0.2462 0.2502 0.2542 0.2582 0.2623 0.2664 0.2705 0.2747 0.2789 0.2831 0.2874 0.2918 0.2961 0.3005 0.305 0.3095 0.314 0.3185 0.3231 0.3278 0.3325 0.3372 0.3419 0.3467 0.3515 0.3564 0.3613 0.3663 0.3712 0.3763 0.3813 0.3864 0.3916 0.3968 0.402 0.4072 0.4125 0.4179 0.4233 0.4287 0.4342 0.4397 0.4452 0.4508 0.4564
|
|
||||||
0.4621 0.4678 0.4735 0.4793 0.4851 0.491 0.4969 0.5029 0.5089 0.5149 0.521 0.5271 0.5333 0.5395 0.5457 0.552 0.5583 0.5647 0.5711 0.5776 0.5841 0.5906 0.5972 0.6038 0.6105 0.6172 0.624 0.6308 0.6376 0.6445 0.6514 0.6584 0.6654 0.6724 0.6795 0.6867 0.6939 0.7011 0.7084 0.7157 0.7231 0.7305 0.7379 0.7454 0.7529 0.7605
|
|
||||||
0.7682 0.7758 0.7835 0.7913 0.7991 0.807 0.8148 0.8228 0.8308 0.8388 0.8469 0.855 0.8632 0.8714 0.8796 0.8879 0.8963 0.9047 0.9131 0.9216 0.9301 0.9387 0.9473 0.956 0.9647 0.9734 0.9823 0.9911 1;
|
|
||||||
|
|
||||||
@function color-contrast($background, $color-contrast-dark: $color-contrast-dark, $color-contrast-light: $color-contrast-light, $min-contrast-ratio: $min-contrast-ratio) {
|
|
||||||
$foregrounds: $color-contrast-light, $color-contrast-dark, $white, $black;
|
|
||||||
$max-ratio: 0;
|
|
||||||
$max-ratio-color: null;
|
|
||||||
|
|
||||||
@each $color in $foregrounds {
|
|
||||||
$contrast-ratio: contrast-ratio($background, $color);
|
|
||||||
@if $contrast-ratio >= $min-contrast-ratio {
|
|
||||||
@return $color;
|
|
||||||
} @else if $contrast-ratio > $max-ratio {
|
|
||||||
$max-ratio: $contrast-ratio;
|
|
||||||
$max-ratio-color: $color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@warn "Found no color leading to #{$min-contrast-ratio}:1 contrast ratio against #{$background}...";
|
|
||||||
|
|
||||||
@return $max-ratio-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
@function contrast-ratio($background, $foreground: $color-contrast-light) {
|
|
||||||
$l1: luminance($background);
|
|
||||||
$l2: luminance(opaque($background, $foreground));
|
|
||||||
|
|
||||||
@return if($l1 > $l2, divide($l1 + 0.05, $l2 + 0.05), divide($l2 + 0.05, $l1 + 0.05));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return WCAG2.2 relative luminance
|
|
||||||
// See https://www.w3.org/TR/WCAG/#dfn-relative-luminance
|
|
||||||
// See https://www.w3.org/TR/WCAG/#dfn-contrast-ratio
|
|
||||||
@function luminance($color) {
|
|
||||||
$rgb: (
|
|
||||||
'r': math.round(color.channel($color, 'red', $space: rgb)),
|
|
||||||
'g': math.round(color.channel($color, 'green', $space: rgb)),
|
|
||||||
'b': math.round(color.channel($color, 'blue', $space: rgb)),
|
|
||||||
);
|
|
||||||
|
|
||||||
@each $name, $value in $rgb {
|
|
||||||
$value: if(divide($value, 255) < 0.04045, divide(divide($value, 255), 12.92), list.nth($_luminance-list, $value + 1));
|
|
||||||
$rgb: map.merge(
|
|
||||||
$rgb,
|
|
||||||
(
|
|
||||||
$name: $value,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@return (map.get($rgb, 'r') * 0.2126) + (map.get($rgb, 'g') * 0.7152) + (map.get($rgb, 'b') * 0.0722);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return opaque color
|
|
||||||
// opaque(#fff, rgba(0, 0, 0, .5)) => #808080
|
|
||||||
@function opaque($background, $foreground) {
|
|
||||||
@return color.mix(rgba($foreground, 1), $background, color.opacity($foreground) * 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tint a color: mix a color with white
|
|
||||||
@function tint-color($color, $weight) {
|
|
||||||
@return color.mix(white, $color, $weight);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shade a color: mix a color with black
|
|
||||||
@function shade-color($color, $weight) {
|
|
||||||
@return color.mix(black, $color, $weight);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shade the color if the weight is positive, else tint it
|
|
||||||
@function shift-color($color, $weight) {
|
|
||||||
@return if($weight > 0, shade-color($color, $weight), tint-color($color, -$weight));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return valid calc
|
|
||||||
@function add($value1, $value2, $return-calc: true) {
|
|
||||||
@if $value1 == null {
|
|
||||||
@return $value2;
|
|
||||||
}
|
|
||||||
|
|
||||||
@if $value2 == null {
|
|
||||||
@return $value1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@if meta.type-of($value1) == number and meta.type-of($value2) == number and math.compatible($value1, $value2) {
|
|
||||||
@return $value1 + $value2;
|
|
||||||
}
|
|
||||||
|
|
||||||
@return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + string.unquote(' + ') + $value2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@function subtract($value1, $value2, $return-calc: true) {
|
|
||||||
@if $value1 == null and $value2 == null {
|
|
||||||
@return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@if $value1 == null {
|
|
||||||
@return -$value2;
|
|
||||||
}
|
|
||||||
|
|
||||||
@if $value2 == null {
|
|
||||||
@return $value1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@if meta.type-of($value1) == number and meta.type-of($value2) == number and math.compatible($value1, $value2) {
|
|
||||||
@return $value1 - $value2;
|
|
||||||
}
|
|
||||||
|
|
||||||
@if meta.type-of($value2) != number {
|
|
||||||
$value2: string.unquote('(') + $value2 + string.unquote(')');
|
|
||||||
}
|
|
||||||
|
|
||||||
@return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + string.unquote(' - ') + $value2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@function divide($dividend, $divisor, $precision: 10) {
|
|
||||||
$sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);
|
|
||||||
$dividend: math.abs($dividend);
|
|
||||||
$divisor: math.abs($divisor);
|
|
||||||
@if $dividend == 0 {
|
|
||||||
@return 0;
|
|
||||||
}
|
|
||||||
@if $divisor == 0 {
|
|
||||||
@error "Cannot divide by 0";
|
|
||||||
}
|
|
||||||
$remainder: $dividend;
|
|
||||||
$result: 0;
|
|
||||||
$factor: 10;
|
|
||||||
@while ($remainder > 0 and $precision >= 0) {
|
|
||||||
$quotient: 0;
|
|
||||||
@while ($remainder >= $divisor) {
|
|
||||||
$remainder: $remainder - $divisor;
|
|
||||||
$quotient: $quotient + 1;
|
|
||||||
}
|
|
||||||
$result: $result * 10 + $quotient;
|
|
||||||
$factor: $factor * 0.1;
|
|
||||||
$remainder: $remainder * 10;
|
|
||||||
$precision: $precision - 1;
|
|
||||||
@if ($precision < 0 and $remainder >= $divisor * 5) {
|
|
||||||
$result: $result + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$result: $result * $factor * $sign;
|
|
||||||
$dividend-unit: math.unit($dividend);
|
|
||||||
$divisor-unit: math.unit($divisor);
|
|
||||||
$unit-map: (
|
|
||||||
'px': 1px,
|
|
||||||
'rem': 1rem,
|
|
||||||
'em': 1em,
|
|
||||||
'%': 1%,
|
|
||||||
);
|
|
||||||
@if ($dividend-unit != $divisor-unit and map.has-key($unit-map, $dividend-unit)) {
|
|
||||||
$result: $result * map.get($unit-map, $dividend-unit);
|
|
||||||
}
|
|
||||||
@return $result;
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
font-size: $h5-font-size;
|
font-size: $h5-font-size;
|
||||||
font-weight: var(--#{$prefix}font-weight-medium);
|
font-weight: var(--#{$prefix}font-weight-medium);
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 0.04em;
|
letter-spacing: .04em;
|
||||||
|
|
||||||
@if $include-line-height {
|
@if $include-line-height {
|
||||||
line-height: $h5-line-height;
|
line-height: $h5-line-height;
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
@mixin scrollbar {
|
@mixin scrollbar {
|
||||||
#{if(&, "&", "*")} {
|
#{if(&, "&", "*")} {
|
||||||
scrollbar-color: color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), 0.2) transparent;
|
scrollbar-color: color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), .20) transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
#{if(&, "&", "*")}::-webkit-scrollbar {
|
#{if(&, "&", "*")}::-webkit-scrollbar {
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
#{if(&, "&", "*")}::-webkit-scrollbar-thumb {
|
#{if(&, "&", "*")}::-webkit-scrollbar-thumb {
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
border: 5px solid transparent;
|
border: 5px solid transparent;
|
||||||
box-shadow: inset 0 0 0 1rem color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), 0.2);
|
box-shadow: inset 0 0 0 1rem color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), .20);
|
||||||
}
|
}
|
||||||
|
|
||||||
#{if(&, "&", "*")}::-webkit-scrollbar-track {
|
#{if(&, "&", "*")}::-webkit-scrollbar-track {
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#{if(&, "&", "*")}:hover::-webkit-scrollbar-thumb {
|
#{if(&, "&", "*")}:hover::-webkit-scrollbar-thumb {
|
||||||
box-shadow: inset 0 0 0 1rem color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), 0.4);
|
box-shadow: inset 0 0 0 1rem color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), .40);
|
||||||
}
|
}
|
||||||
|
|
||||||
#{if(&, "&", "*")}::-webkit-scrollbar-corner {
|
#{if(&, "&", "*")}::-webkit-scrollbar-corner {
|
||||||
@@ -43,6 +43,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@mixin autodark-image {
|
@mixin autodark-image {
|
||||||
filter: brightness(0) invert(1);
|
filter: brightness(0) invert(1);
|
||||||
}
|
}
|
||||||
@@ -50,7 +51,7 @@
|
|||||||
//
|
//
|
||||||
// Elements list
|
// Elements list
|
||||||
//
|
//
|
||||||
@mixin elements-list($gap: 0.5rem) {
|
@mixin elements-list($gap: .5rem) {
|
||||||
--#{$prefix}list-gap: #{$gap};
|
--#{$prefix}list-gap: #{$gap};
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
@@ -61,16 +62,7 @@
|
|||||||
outline: 0;
|
outline: 0;
|
||||||
box-shadow: 0 0 $focus-ring-blur $focus-ring-width rgba(var(--#{$prefix}primary-rgb), 0.25);
|
box-shadow: 0 0 $focus-ring-blur $focus-ring-width rgba(var(--#{$prefix}primary-rgb), 0.25);
|
||||||
|
|
||||||
@if ($show-border) {
|
@if($show-border) {
|
||||||
border-color: rgba(var(--#{$prefix}primary-rgb), 0.25);
|
border-color: rgba(var(--#{$prefix}primary-rgb), 0.25);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Print styles
|
|
||||||
//
|
|
||||||
@mixin media-print {
|
|
||||||
@media print {
|
|
||||||
@content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user