mirror of
https://github.com/tabler/tabler.git
synced 2025-12-21 17:34:25 +04:00
Compare commits
233 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ad191817e | ||
|
|
1eb8b4fa40 | ||
|
|
58ad1008c9 | ||
|
|
c0e757e252 | ||
|
|
5e119d4c06 | ||
|
|
c860288558 | ||
|
|
596237e8cc | ||
|
|
736e60408b | ||
|
|
212d560a87 | ||
|
|
0ee3c0a3b4 | ||
|
|
bddacee9ad | ||
|
|
2c3efda2bd | ||
|
|
4834022361 | ||
|
|
e16457fd2e | ||
|
|
8b12ba0b01 | ||
|
|
d2c812e023 | ||
|
|
8947d7c7b7 | ||
|
|
399a5c59f9 | ||
|
|
ad22d046c3 | ||
|
|
b8b63d7e94 | ||
|
|
ab8009b771 | ||
|
|
bd35fd39cf | ||
|
|
4b65380293 | ||
|
|
2c73788cd1 | ||
|
|
a967970419 | ||
|
|
64baa141e7 | ||
|
|
49ab9ea931 | ||
|
|
a8c41914c4 | ||
|
|
9951fe9b1d | ||
|
|
cfd4cb6624 | ||
|
|
6fec73a3c4 | ||
|
|
29cc0cd378 | ||
|
|
6c47b5f868 | ||
|
|
6c38a48af1 | ||
|
|
6c4dd3670d | ||
|
|
2a12f72b28 | ||
|
|
f91b0f7cfa | ||
|
|
af816227bc | ||
|
|
59b6f73a06 | ||
|
|
266d5ad773 | ||
|
|
db6200a998 | ||
|
|
70a41e4fc2 | ||
|
|
e96f055238 | ||
|
|
a200d30f04 | ||
|
|
666a296a62 | ||
|
|
545defc852 | ||
|
|
1b0f8206ee | ||
|
|
c2cb3d3255 | ||
|
|
a0377f9752 | ||
|
|
c914ecfb05 | ||
|
|
57afd0bb11 | ||
|
|
8db1c08744 | ||
|
|
08e4919ae1 | ||
|
|
ef9d75f32f | ||
|
|
3e35545edc | ||
|
|
446c34eceb | ||
|
|
90285704e4 | ||
|
|
a7f73d7f7e | ||
|
|
d66c6a70eb | ||
|
|
ad54f61429 | ||
|
|
9007e73cb6 | ||
|
|
0d106a89b7 | ||
|
|
0d59e2f13a | ||
|
|
8850f6128f | ||
|
|
a1af8014e8 | ||
|
|
c8fee60023 | ||
|
|
d8c70a8b94 | ||
|
|
b70cb48e0b | ||
|
|
5b8746c702 | ||
|
|
f2c0c65f98 | ||
|
|
06021fad99 | ||
|
|
bd67b3f82e | ||
|
|
8e2acc82e0 | ||
|
|
85f212293d | ||
|
|
72a1d67709 | ||
|
|
638f36c0c5 | ||
|
|
f769abd70b | ||
|
|
3a02ef9c55 | ||
|
|
38ea9aa4e7 | ||
|
|
acbe4ff35f | ||
|
|
b5e2f54bf8 | ||
|
|
e2411b3518 | ||
|
|
44a1979b78 | ||
|
|
bccdeee779 | ||
|
|
5cb041275d | ||
|
|
27c866b3c3 | ||
|
|
c127d65605 | ||
|
|
f15d2b97f8 | ||
|
|
1f4906cc40 | ||
|
|
f8075f69c0 | ||
|
|
fd0fd47bb2 | ||
|
|
a41c9565f1 | ||
|
|
7fc1d5c11c | ||
|
|
222ddd4b2f | ||
|
|
ddd3753cde | ||
|
|
b9d434dcd4 | ||
|
|
6a3513f8e9 | ||
|
|
21bf92608d | ||
|
|
bb617b8dd2 | ||
|
|
5fa662bfae | ||
|
|
467c529fdc | ||
|
|
7773ff22b9 | ||
|
|
1867e0e482 | ||
|
|
67c9400918 | ||
|
|
7917f868e9 | ||
|
|
5619b2d8be | ||
|
|
9b15b942cb | ||
|
|
5b3e201d06 | ||
|
|
8470c9b315 | ||
|
|
dce63db1e6 | ||
|
|
278967b028 | ||
|
|
7082ea1c56 | ||
|
|
c42b104fe5 | ||
|
|
e546706f4c | ||
|
|
6d5e950235 | ||
|
|
665472cf69 | ||
|
|
468b055005 | ||
|
|
895f943270 | ||
|
|
3eaa90203b | ||
|
|
79bd867db5 | ||
|
|
e265681a48 | ||
|
|
cac5d92c7d | ||
|
|
b6e9b18ce9 | ||
|
|
849e286df0 | ||
|
|
b6ce7b8feb | ||
|
|
7b7265347c | ||
|
|
e675389871 | ||
|
|
b548430688 | ||
|
|
b45d85089e | ||
|
|
8f701859ad | ||
|
|
78c9c71365 | ||
|
|
5d8752eea0 | ||
|
|
6452669803 | ||
|
|
bf750451f1 | ||
|
|
83b11a8b35 | ||
|
|
42da37e737 | ||
|
|
0f335cda27 | ||
|
|
a6c24bb44f | ||
|
|
e975ea7e74 | ||
|
|
92ec44cf4a | ||
|
|
8da9fa869f | ||
|
|
67f3571a4f | ||
|
|
8710940952 | ||
|
|
7295678c34 | ||
|
|
a037e8e429 | ||
|
|
3da4395d10 | ||
|
|
f9f9663b2a | ||
|
|
a922c1f226 | ||
|
|
9069dcba54 | ||
|
|
7fbe4b5bc9 | ||
|
|
9ebd9f1d24 | ||
|
|
88b9e87c6e | ||
|
|
d4886607f0 | ||
|
|
1546e9ccc4 | ||
|
|
f25da87043 | ||
|
|
2ac915cd93 | ||
|
|
fa89c6fa73 | ||
|
|
c4d21a4666 | ||
|
|
baa6056c4c | ||
|
|
dc24132a7d | ||
|
|
8abd2a8d20 | ||
|
|
226f9bd202 | ||
|
|
255bea88b1 | ||
|
|
8525276984 | ||
|
|
f3182c6538 | ||
|
|
6d6d1bde4c | ||
|
|
2b6d6b184b | ||
|
|
5b2ee97aa7 | ||
|
|
681f7a5fed | ||
|
|
9910dd0dde | ||
|
|
8d4f8d07c3 | ||
|
|
199f39a52e | ||
|
|
94bea005a4 | ||
|
|
0d501e9017 | ||
|
|
00e9c06f11 | ||
|
|
52710a339a | ||
|
|
6c566cf7b1 | ||
|
|
523f288c8f | ||
|
|
864619201e | ||
|
|
f9e4da2fb0 | ||
|
|
c70806a9db | ||
|
|
44250db908 | ||
|
|
137e5be8f2 | ||
|
|
ffdf712f8a | ||
|
|
4846828f39 | ||
|
|
e8e3857b00 | ||
|
|
91b026507b | ||
|
|
f9013873b9 | ||
|
|
ddcd3a79e1 | ||
|
|
c20d076b74 | ||
|
|
042e50f979 | ||
|
|
e14e4921b5 | ||
|
|
d61cddb3d6 | ||
|
|
0accf60a63 | ||
|
|
d3daf7a5db | ||
|
|
8ac0742cc7 | ||
|
|
f94b153f7f | ||
|
|
74e5d26c20 | ||
|
|
9a9dedf1b4 | ||
|
|
e704a5a946 | ||
|
|
dd26b62607 | ||
|
|
9fceadd422 | ||
|
|
9c368702b4 | ||
|
|
3fc7b84fc4 | ||
|
|
b17b488c96 | ||
|
|
9bbcb99b90 | ||
|
|
215eaa4acb | ||
|
|
92a3afe492 | ||
|
|
19a3d20fad | ||
|
|
8cd7b186b7 | ||
|
|
be1f3d1c1f | ||
|
|
2f8a37252d | ||
|
|
d73d78e76f | ||
|
|
f84e88116c | ||
|
|
473fa3850b | ||
|
|
f336275476 | ||
|
|
982bc5a09b | ||
|
|
5fe99e0510 | ||
|
|
1527157bfe | ||
|
|
922bb0346a | ||
|
|
e3d68d6aab | ||
|
|
aea3b0a614 | ||
|
|
cd592b4743 | ||
|
|
c59bc9d977 | ||
|
|
bc443ff4aa | ||
|
|
afd024f0b1 | ||
|
|
d29b6f5675 | ||
|
|
6b6617aae6 | ||
|
|
636fed5fe9 | ||
|
|
d7f4f50986 | ||
|
|
6d0271ad57 | ||
|
|
f29c911032 | ||
|
|
01ee740535 |
@@ -10,7 +10,7 @@ import * as prettier from "prettier";
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url))
|
||||
|
||||
const docs = sync(join(__dirname, '..', 'docs', '**', '*.mdx'))
|
||||
const docs = sync(join(__dirname, '..', 'docs', '**', '*.md'))
|
||||
|
||||
async function formatHTML(htmlString) {
|
||||
try {
|
||||
30
.build/zip-package.mjs
Normal file
30
.build/zip-package.mjs
Normal file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import AdmZip from 'adm-zip';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { readFileSync } from 'fs';
|
||||
|
||||
// Get __dirname in ESM
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||
|
||||
const pkg = JSON.parse(
|
||||
readFileSync(path.join(__dirname, '../core', 'package.json'), 'utf8')
|
||||
)
|
||||
|
||||
// Create zip instance and add folder
|
||||
const zip = new AdmZip();
|
||||
zip.addLocalFolder(path.join(__dirname, '../preview/dist'), 'dashboard');
|
||||
|
||||
zip.addLocalFile(path.join(__dirname, '../preview/static', 'og.png'), '.', 'preview.png');
|
||||
|
||||
zip.addFile("documentation.url", Buffer.from("[InternetShortcut]\nURL = https://tabler.io/docs"));
|
||||
|
||||
|
||||
// Folder to zip and output path
|
||||
const outputZipPath = path.join(__dirname, '../packages-zip', `tabler-${pkg.version}.zip`);
|
||||
|
||||
// Write the zip file
|
||||
zip.writeZip(outputZipPath);
|
||||
|
||||
console.log(`Zipped folder to ${outputZipPath}`);
|
||||
6
.changeset/angry-bananas-brake.md
Normal file
6
.changeset/angry-bananas-brake.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@tabler/core": minor
|
||||
"@tabler/preview": minor
|
||||
---
|
||||
|
||||
Added new "Pay" page with dedicated layout, navigation link, and payment form (card + PayPal).
|
||||
5
.changeset/chilled-pans-cheer.md
Normal file
5
.changeset/chilled-pans-cheer.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@tabler/preview": minor
|
||||
---
|
||||
|
||||
Add a color palette in the signing component
|
||||
@@ -3,8 +3,18 @@
|
||||
"changelog": "@changesets/cli/changelog",
|
||||
"commit": false,
|
||||
"fixed": [],
|
||||
"linked": [],
|
||||
"linked": [
|
||||
[
|
||||
"@tabler/core",
|
||||
"@tabler/preview",
|
||||
"@tabler/docs"
|
||||
]
|
||||
],
|
||||
"access": "public",
|
||||
"baseBranch": "main",
|
||||
"ignore": []
|
||||
"baseBranch": "dev",
|
||||
"ignore": [],
|
||||
"privatePackages": {
|
||||
"version": true,
|
||||
"tag": false
|
||||
}
|
||||
}
|
||||
|
||||
5
.changeset/curvy-timers-sneeze.md
Normal file
5
.changeset/curvy-timers-sneeze.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@tabler/core": patch
|
||||
---
|
||||
|
||||
Fix icon alignment for `.btn-sm` and `.btn-xl` sizes
|
||||
5
.changeset/fresh-rockets-retire.md
Normal file
5
.changeset/fresh-rockets-retire.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@tabler/core": patch
|
||||
---
|
||||
|
||||
Fix mixed declarations in SCSS
|
||||
6
.changeset/late-pugs-breathe2.md
Normal file
6
.changeset/late-pugs-breathe2.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@tabler/core": patch
|
||||
"@tabler/preview": patch
|
||||
---
|
||||
|
||||
Introduced `bg-blur` utility for backdrop blur effects and increased container-tight width for layout flexibility.
|
||||
5
.changeset/light-cooks-hug.md
Normal file
5
.changeset/light-cooks-hug.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@tabler/preview": patch
|
||||
---
|
||||
|
||||
Update icons to v3.34.1 (75 new icons)
|
||||
5
.changeset/modern-dots-bathe.md
Normal file
5
.changeset/modern-dots-bathe.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@tabler/preview": patch
|
||||
---
|
||||
|
||||
Update activity messages
|
||||
5
.changeset/three-seas-move.md
Normal file
5
.changeset/three-seas-move.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@tabler/core": patch
|
||||
---
|
||||
|
||||
Updated deprecated global functions (`map-merge`, `str-slice`, `percentage`, etc.) with their module-based equivalents (`map.merge`, `string.slice`, `math.percentage`, etc.).
|
||||
5
.changeset/tricky-moons-laugh.md
Normal file
5
.changeset/tricky-moons-laugh.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@tabler/docs": patch
|
||||
---
|
||||
|
||||
Fix Docs search in dark mode
|
||||
5
.changeset/twelve-tables-attack.md
Normal file
5
.changeset/twelve-tables-attack.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@tabler/preview": patch
|
||||
---
|
||||
|
||||
Fix responsive layputs in 'Form Elements' page
|
||||
171
.cursor/rules/html-elements.mdc
Normal file
171
.cursor/rules/html-elements.mdc
Normal file
@@ -0,0 +1,171 @@
|
||||
---
|
||||
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
|
||||
56
.cursor/rules/main.mdc
Normal file
56
.cursor/rules/main.mdc
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
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
|
||||
7
.github/workflows/argos.yml
vendored
7
.github/workflows/argos.yml
vendored
@@ -22,10 +22,11 @@ jobs:
|
||||
test:
|
||||
timeout-minutes: 60
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.pull_request.draft == false
|
||||
# if: github.event.pull_request.draft == false
|
||||
if: false
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Cache turbo build setup
|
||||
uses: actions/cache@v4
|
||||
@@ -36,7 +37,7 @@ jobs:
|
||||
${{ runner.os }}-turbo-
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: "${{ env.NODE }}"
|
||||
|
||||
|
||||
4
.github/workflows/bundlewatch.yml
vendored
4
.github/workflows/bundlewatch.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Cache turbo build setup
|
||||
uses: actions/cache@v4
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
${{ runner.os }}-turbo-
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: "${{ env.NODE }}"
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
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
|
||||
issues: write
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
- uses: actions/stale@v10
|
||||
with:
|
||||
days-before-issue-stale: 360
|
||||
days-before-issue-close: 14
|
||||
|
||||
12
.github/workflows/lockfiles.yaml
vendored
12
.github/workflows/lockfiles.yaml
vendored
@@ -1,6 +1,7 @@
|
||||
name: Changed lock files
|
||||
on:
|
||||
pull_request: null
|
||||
pull_request_target:
|
||||
types: [opened, reopened]
|
||||
|
||||
permissions:
|
||||
pull-requests: read
|
||||
@@ -11,11 +12,10 @@ jobs:
|
||||
name: Verify lock file integrity
|
||||
steps:
|
||||
- name: Clone Tabler
|
||||
uses: actions/checkout@v4
|
||||
|
||||
uses: actions/checkout@v5
|
||||
- name: Prevent lock file change
|
||||
uses: xalvarez/prevent-file-change-action@v1
|
||||
uses: xalvarez/prevent-file-change-action@v2
|
||||
with:
|
||||
githubToken: ${{ secrets.GITHUB_TOKEN }}
|
||||
pattern: Gemfile.lock|pnpm-lock.json
|
||||
trustedAuthors: codecalm, dependabot
|
||||
pattern: Gemfile.lock|pnpm-lock.json|pnpm-lock.yaml
|
||||
trustedAuthors: codecalm, BG-Software-BG, dependabot
|
||||
|
||||
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
@@ -21,10 +21,10 @@ jobs:
|
||||
pull-requests: write # to create pull request
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup Node.js 18
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
|
||||
4
.github/workflows/test.yml
vendored
4
.github/workflows/test.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Cache turbo build setup
|
||||
uses: actions/cache@v4
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
${{ runner.os }}-turbo-
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: "${{ env.NODE }}"
|
||||
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -35,4 +35,5 @@ package-lock.json
|
||||
|
||||
demo/
|
||||
dist/
|
||||
packages-zip/
|
||||
packages-zip/
|
||||
.env
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"bracketSpacing": true,
|
||||
"jsxSingleQuote": false,
|
||||
"printWidth": 240,
|
||||
"printWidth": 320,
|
||||
"proseWrap": "always",
|
||||
"semi": false,
|
||||
"singleQuote": false,
|
||||
|
||||
520
CHANGELOG.md
520
CHANGELOG.md
@@ -1,520 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.0 - 2025-01-28
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- c276a8b: Add new `Tag` component
|
||||
- d380224: Add customizable Star Ratings component using `star-rating.js` library
|
||||
- 47cd6c1: Add `flags.html` page with list of all flags
|
||||
- be67ab6: Update CSS class from `text-muted` to `text-secondary` for better Bootstrap compatibility
|
||||
- 080c746: Adding `alerts.html` page with example of alerts.
|
||||
- b381273: Change primary color value to new Tabler branding
|
||||
- 75619dd: Unify dark mode with latest Bootstrap API and improve dark mode elements
|
||||
- cc82dbf: New Chat component
|
||||
- 5a03643: Adjusting form element sizes for enhanced mobile devices compatibility
|
||||
- be14607: Add new color picker component using `coloris.js` library
|
||||
- d046570: Update Tabler Icons to version 2.23 with 18 new icons added
|
||||
- 5488c50: New page with payment providers: `payment-providers.html`
|
||||
- 5488c50: Add support for new payment providers: 2c2p, Adyen, Affirm, Alipay Plus, Allegro Pay, Amazon Pay, Apple Pay, Autopay, Binance USD, Bkash, Cash App, Chime, EasyPaisa, Ethereum, Google Pay, HubSpot, iDeal, Litecoin, Mercado Pago, MetaMask, MoneyGram, OpenSea, Payconiq, Payka, Payline, PayPo, Paysafe, Poli, Revolut Pay, Samsung Pay, Shop Pay, Solana, Spingo, Stax, Tether, True USD, Venmo, WeChat Pay, Wise, Zelle
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 293d0a4: Change Twitter to X brand
|
||||
- fd0935a: Updated link to icons documentation
|
||||
- 1cf27dc: Dependencies update
|
||||
- 041f4e4: Order menu items alphabetically
|
||||
- 20cad01: Automatically retrieve and display the changelog from the CHANGELOG.md file.
|
||||
- 34f3efc: Initialize Visual Studio Code config
|
||||
- 7ba7717: Make horizontal rule direction aware
|
||||
- 063ef58: Update Tabler Illustrations to v1.5
|
||||
- 5e2c975: Update Tabler Icons to v3.29.0
|
||||
- 9d5f7ca: Remove unused dependencies from `package.json`
|
||||
- be69fd6: Replace Jekyll with Eleventy
|
||||
- 2f5fad6: Dependencies update
|
||||
- dfd7c88: Update TinyMCE to v7.0
|
||||
- 056df18: Fix text color in dark version of navbar
|
||||
- 17327dc: Remove invalid `z-index` setting for dropdowns
|
||||
- 4ff077a: Update Tabler Icons to version 2.21 with 18 new icons added
|
||||
- 867c8dd: Update Tabler Emails to v2.0
|
||||
- d8605f2: Init changelog script
|
||||
- 89c6234: Adding Two-Step Verification Pages
|
||||
- f6e885b: Replace `.page-center` with `.my-auto` in single page layouts
|
||||
- 7aa216f: Add border-opacity variable for improved color utility
|
||||
- 88eb413: Fix icon display issues in the Star Ratings component
|
||||
- 78392b6: Fix `color` of disabled `dropdown-item` in Navbar component
|
||||
- 4deb8f4: Bump pnpm/action-setup from 2 to 3
|
||||
- 9015472: Add social icons plugin
|
||||
- 7fe30a1: `Dockerfile` fix
|
||||
- e53942f: Update Jekyll to version 4.3.4
|
||||
- 72f868b: Update Tabler Icons to version 2.20 with 37 new icons added
|
||||
- e0443c0: Add Tabler Illustrations
|
||||
- 5cca710: Update illustrations and enhance SVG handling in HTML
|
||||
- 3a4f10f: Fix ids of custom size star ratings
|
||||
- 7896562: Unify size of avatar, flag and payment components
|
||||
- 1587905: Update icons to v2.42.0
|
||||
- d9e00b2: Update Bootstrap to v5.3.0
|
||||
- bc1d1a3: Set `font-size` of an `i` element with `icon` class in a `button` element
|
||||
- 0195f9b: Dependencies update
|
||||
- a5bf5d3: Fix icons in `form-elements.html`
|
||||
- 736410c: Update Tabler Icons to v3.28.1
|
||||
- 3f516ea: Fix `rgba` color values in `_variables.scss`
|
||||
- e91884e: Fix description of alerts with a description
|
||||
- 90cc744: Fix colors of disabled `.ts-control`
|
||||
- 1801e41: Center content on error and single page layouts
|
||||
- 45c83ac: Resolve map page issues
|
||||
- faee63c: Improve base font family loading
|
||||
- 5e7e0dd: Introduce Docker Compose Config to build and run Ttabler locally
|
||||
- c293a66: Fix `@charset` CSS declaration in bundle.
|
||||
- cb4a681: Update `_navbar.scss` with disabled dropdown menu items color
|
||||
- af41fb3: Update Tabler Icons to v3.17.0
|
||||
- 6cbe888: Update `@tabler/icons` to v3.0
|
||||
- 0e4bf5f: Refactor data structure by converting YAML files to JSON
|
||||
- 82cf257: Increase `z-index` of `ts-dropdown` to prevent overlapping by buttons
|
||||
- 4b4b4f6: Adding punctuation to `SECURITY.md`
|
||||
- a0a2d52: Fix form controls bugs in dark mode
|
||||
- f45b697: Fix padding in code blocks
|
||||
- 4de166d: Unified Box Shadows with Bootstrap Compatibility
|
||||
- 87bf2f5: Remove duplicated setting of color in `th` element
|
||||
- 5dc45aa: Fix layout of search results for small and medium screens
|
||||
- 4ae0358: Remove `text-decoration` on hovering `a` element with class having `icon` class
|
||||
- e798eb6: Fix small typo in tables docs
|
||||
- 1c1d0c9: Improve documentation for alerts
|
||||
- 371ef84: Bump `pnpm/action-setup` from 3 to 4
|
||||
- 8421fc2: Update dependencies
|
||||
- 0625f5f: Update Tabler Icons to version 2.22 with 18 new icons added
|
||||
- ba65fc3: Update devDependencies
|
||||
- a43ded4: Add All Contributions package to project for easy contribution tracking
|
||||
- 2f622c9: Set value of `$font-family-monospace` as default
|
||||
- 2c7c448: Refactor Dockerfile and package.json
|
||||
- 5ec7f05: Resolved light dropdown issue on dark theme
|
||||
- b0b07b9: Enhance documentation
|
||||
- 0f129b1: Update Tabler Icons to version 2.19 with 18 new icons added
|
||||
- 507df7b: Fix cells with inline icons
|
||||
- 0e5b44a: Fix `color` of disabled `nav-link` in `nav-bordered`
|
||||
- 65c1300: Fix the `z-index` value of the `nav-tab` inside `card-tab` #1933
|
||||
- 8552a46: Switch from `npm` to `pnpm` for faster package installation
|
||||
- 4a9e40d: Increase contrast of active `dropdown-item` in vertical layout
|
||||
- 17ebdf4: Update documentation for Tabler components
|
||||
- 4c88481: Add variable to configure `avatar-list` spacing
|
||||
- df46ee7: Do not display empty `fieldset` element
|
||||
- 875cafa: Refactor SCSS variables to use `color.adjust` for improved color manipulation
|
||||
- eb28546: Add Tabler Illustrations
|
||||
- 650d84c: Update required Node.js version to 18 and add `.nvmrc` file
|
||||
- fb659d4: Fix table default background color
|
||||
- f77c712: Avoid SCSS color dependency on `:focus`
|
||||
- 71c68ce: Update changelog configuration and release scripts
|
||||
- 34d124d: Update Tabler Icons to v3.26.0
|
||||
- 4cd9215: Updated Tabler Icons to v3.24.0
|
||||
- 7bb947b: Update Tabler Icons to version 2.18 with 18 new icons added
|
||||
- c75cf55: Update Node.js engine requirement to allow versions >=20
|
||||
- 1c34e8e: Update Tabler Icons to v3.14.0
|
||||
- 289dd3b: Add Prettier to project for consistent code formatting
|
||||
- f83e36c: Upgrade Node.js from version 18 to version 20 for improved performance, security, and feature updates.
|
||||
- b885852: Update Tabler Icons to version 2.25 with 48 new icons added
|
||||
- 53a5117: Fix responsiveness issue in Settings menu
|
||||
- 38504e5: Added 3 new payments from Nepal: Esewa, FonePay, Khalti and Imepay
|
||||
- 35ee14d: Add new Filled section to Icons page
|
||||
- d32f242: Update `bootstrap` to v5.3.1
|
||||
- d82f94e: Update package dependencies to latest versions
|
||||
- 54c5ad0: Fix link to webfont version of Tabler Icons
|
||||
- 94b83d4: Add support for changeset tool for more efficient and organized code changes
|
||||
- c51ff28: Fix colors in date range datepicker
|
||||
|
||||
## `1.0.0-beta24` - 2025-01-11
|
||||
|
||||
- Enhanced documentation.
|
||||
- Updated illustrations and improved SVG handling in HTML.
|
||||
- Updated copyright year in LICENSE file to 2025.
|
||||
- Added marketing pages plugin.
|
||||
|
||||
## `1.0.0-beta23` - 2025-01-07
|
||||
|
||||
- Documentation improvements.
|
||||
- Added countup functionality and updated documentation example.
|
||||
- Do not display empty `<fieldset>`.
|
||||
- Set font-size of webfont icon inside a button.
|
||||
- Ordered menu items alphabetically.
|
||||
- Marked value of `$font-family-monospace` as `!default`.
|
||||
- Fixed unpkg links to static-files icons.
|
||||
- Fixed description of alerts with a description.
|
||||
- Fixed layout of search results for small and medium screens.
|
||||
- Removed invalid z-index setting for dropdown.
|
||||
- Fixed IDs of custom size star ratings.
|
||||
- Removed text-decoration on hover for elements with child icons.
|
||||
- Fixed link to webfont icons.
|
||||
- Updated color reference links in UI component documentation.
|
||||
- Fixed typo in browser support documentation summary.
|
||||
- Enhanced Figma plugin documentation with detailed usage instructions.
|
||||
- Added documentation for Tabler Illustrations and updated index with a link.
|
||||
- Enhanced documentation for various UI and icon sections.
|
||||
- Added new documentation files for icons and UI components; restructured existing files.
|
||||
- Updated documentation structure and content for icons and UI components.
|
||||
- Removed outdated `menu.json` and added `index.mdx` files for UI documentation structure.
|
||||
- General docs update.
|
||||
- Increased contrast of active dropdown-item in vertical layout.
|
||||
- Removed duplicated color setting in table headers.
|
||||
- Increased `z-index` of `ts-dropdown`.
|
||||
- Added social icons plugin.
|
||||
- Described variables for datagrid in docs.
|
||||
- Fixed multiple documentation issues.
|
||||
- Removed unused config from the code.
|
||||
- Fixed links to Tabler Icons.
|
||||
- Updated dark image.
|
||||
- Updated screenshot.
|
||||
- Fixed icon issues.
|
||||
- Fixed URL in documentation.
|
||||
|
||||
## `1.0.0-beta22` - 2025-01-02
|
||||
|
||||
- Fixed `@charset` CSS declaration in bundle.
|
||||
- Fixed cells with inline icons.
|
||||
- Fixed padding in code blocks.
|
||||
- Fixed colors in date range datepicker.
|
||||
- Fixed icon display issues in the Star Ratings component.
|
||||
- Fixed `z-index` value of the `nav-tab` inside `card-tab`.
|
||||
- Fixed wrong gray colors.
|
||||
- Fixed incorrect CDN URL in `webfont.mdx`.
|
||||
- Ensured border color works in dark mode.
|
||||
- Replaced `.page-center` with `.my-auto` in single-page layouts.
|
||||
- Updated Tabler Emails to v2.0.
|
||||
- Updated Tabler Icons to v3.26.0.
|
||||
- Updated docs structure.
|
||||
- Updated `download.mdx`.
|
||||
- Updated Node.js to version 20.
|
||||
- Improved base font family.
|
||||
- Made horizontal rule direction-aware.
|
||||
- Added new payment providers.
|
||||
- Read changelog from `CHANGELOG.md` file.
|
||||
- Initialized VS Code configuration.
|
||||
|
||||
## `1.0.0-beta21` - 2024-09-8
|
||||
|
||||
- Updated dependencies.
|
||||
- Updated Tabler Icons to v3.14.0 and the import script.
|
||||
- Fixed invisible scrollbar in dark mode when navigating the preview.
|
||||
- Styled `btn-close` specifically for `.modal-header`.
|
||||
- Added proper borders to the ribbon start class.
|
||||
- Changed brand color.
|
||||
- Included `docs` in the `npm` package.
|
||||
- Added Tabler Illustrations.
|
||||
- Fixed use of the secondary color in specific form elements.
|
||||
- Introduced Docker Compose Config for local Tabler builds.
|
||||
- Allowed usage of `tinymce` v7.x as a peer dependency.
|
||||
- Updated TinyMCE to v7.0.
|
||||
- Rebranded Twitter to X.
|
||||
- Replaced undraw illustrations with Tabler Illustrations.
|
||||
- Added punctuation to `SECURITY.md`.
|
||||
- Updated `_navbar.scss` to correct disabled dropdown menu item colors.
|
||||
- Removed unused packages.
|
||||
- Fixed map pages.
|
||||
- Resolved issues with toasts in dark mode.
|
||||
- Fixed alert background prefix.
|
||||
- Corrected a typo in CHANGELOG.md.
|
||||
- Fixed radial chart issue.
|
||||
- Added documentation on running the site locally in Site README.
|
||||
- Updated colors in `colors.mdx`.
|
||||
- Fixed dynamic SCSS prefix in mixins.
|
||||
- Changed `<h1>` to `<div>` in `navbar-logo.html`.
|
||||
- Resolved vertical centering on error pages.
|
||||
- Fixed navbar menu issues.
|
||||
- Added `background-clip: border-box` to `.dropdown-menu` class.
|
||||
- Replaced `href="#"` with `href="javascript:void(0)"`.
|
||||
- Fixed disabled CSS class for links.
|
||||
- Addressed missing variables and minor color adjustments.
|
||||
- Improved heights, scrolls, and layouts in Docs examples.
|
||||
- Fixed flags display in preview.
|
||||
|
||||
## `1.0.0-beta20` - 2023-08-24
|
||||
|
||||
- Update `bootstrap` to v5.3.1
|
||||
- Add new `Chat` component
|
||||
- Add new `Tag` component
|
||||
- Add customizable Star Ratings component using `star-rating.js` library
|
||||
- Add new color picker component using `coloris.js` library
|
||||
- Add `alerts.html` page with example of alerts.
|
||||
- Add `flags.html` page with list of all flags
|
||||
- Add Two-Step Verification Pages
|
||||
- Add variable to configure `avatar-list` spacing
|
||||
- Unify dark mode with latest Bootstrap API and improve dark mode elements
|
||||
- Unify Box Shadows with Bootstrap Compatibility
|
||||
- Avoid SCSS color dependency on `:focus`
|
||||
- Update CSS class from `text-muted` to `text-secondary` for better Bootstrap compatibility
|
||||
- Fix text color in dark version of navbar
|
||||
- Adjusting form element sizes for enhanced mobile devices compatibility
|
||||
- Resolved light dropdown issue on dark theme
|
||||
- Update Tabler Icons to version 2.32 with 48 new icons added
|
||||
- Fix table default background color
|
||||
- Fix responsiveness issue in Settings menu
|
||||
- Update required Node.js version to 18 and add `.nvmrc` file
|
||||
- Add support for changeset tool for more efficient and organized code changes
|
||||
- `Dockerfile` fix
|
||||
- Switch from `npm` to `pnpm` for faster package installation
|
||||
|
||||
## `1.0.0-beta19` - 2023-05-15
|
||||
|
||||
- Add customizable Star Ratings component using `star-rating.js` library (#1571)
|
||||
- Add new "Filled" section to Icons page (#1574)
|
||||
- Fix form controls bugs in dark mode (#1573)
|
||||
- Fix text color in dark version of navbar (#1569)
|
||||
- Changelog update
|
||||
|
||||
## `1.0.0-beta18` - 2023-05-14
|
||||
|
||||
- new page: Cookie banner
|
||||
- Unify dark mode with latest Bootstrap API and improve dark mode elements (#1561)
|
||||
- Update Tabler Icons to version 2.18 with 18 new icons added (#1560)
|
||||
- Switch from `npm` to `pnpm` for faster package installation (#1559)
|
||||
- Add Prettier to project for consistent code formatting (#1558)
|
||||
- Update required Node.js version to 18 and add `.nvmrc` file (#1555)
|
||||
- Add All Contributions package to project for easy contribution tracking (#1556)
|
||||
- Add support for changeset tool for more efficient and organized code changes (#1553)
|
||||
- Fix bug where `border-1`, `border-2`, etc don't work (#1526)
|
||||
- Fix indeterminate input background color (#1536)
|
||||
- Update Bootstrap to `5.3.0-alpha3` (#1543)
|
||||
- `tom-select` dark mode styling fixes
|
||||
- Advanced udage of `tom-select` (#1480)
|
||||
- Fix Dropdown menu in rtl mode (#801)
|
||||
- Fix `tom-select` dropdown will be shaded in table-responsive (#1409)
|
||||
- Remove overflow scroll from body
|
||||
- Fix avatars overlap transparently (#1464)
|
||||
- Fix TinyMCE dropdown icon list transparent (#1426)
|
||||
- Dark mode lite colors improvement
|
||||
- Fix non full width selects (#1392)
|
||||
|
||||
## `1.0.0-beta17` - 2023-01-28
|
||||
|
||||
- update `bootstrap` to v5.3.0
|
||||
- update icons to v2.1.2
|
||||
- add 72 new brands, browsers logos update
|
||||
- new `Trial ended` page
|
||||
- new `Page loader` page
|
||||
- new `Profile` page
|
||||
- headings fix
|
||||
- dropdown background color fix
|
||||
- fix rgba conversion bug
|
||||
- fix autofill text color, not matching in dark mode
|
||||
- update license
|
||||
- header html5 tags
|
||||
- add input with appended `<kbd>`
|
||||
- `bootstrap` import fix
|
||||
- font improvements
|
||||
- change `$body-color` to CSS variable
|
||||
- scrollbars improvements
|
||||
- move `@tabler/icons` to `dev-dependencies`
|
||||
- fix #1370: avatar stacked list is not stacked anymore
|
||||
|
||||
## `1.0.0-beta16` - 2022-11-12
|
||||
|
||||
- new `Photogrid` page
|
||||
- `Steps` component improvements
|
||||
- fix #1348: Make job listing responsive for smaller devices
|
||||
- fix #1357: buttons group not active
|
||||
- fix #1352: fix deprecation warning
|
||||
- fix #1180: number input with `form-control-sm` looks weird
|
||||
- fix #1328: color input should show different color for inner check symbol on white ellipse
|
||||
- fix #1355 - missing font sizes
|
||||
- update icons to v1.111.0
|
||||
- homepage navbar fix
|
||||
- fix #1262 - `.bg-opacity-xx` class is not functioning properly
|
||||
|
||||
## `1.0.0-beta15` - 2022-11-01
|
||||
|
||||
- new `badges` page
|
||||
- `<kbd>` styling
|
||||
- update icons to v1.109.0
|
||||
- `tom-select` border fix
|
||||
- exclude `playgrounds` from build
|
||||
- update jekyll to v4.3.1
|
||||
- fix: facebook color update
|
||||
- navbar aria atributes fixes
|
||||
- fix #808 - `navbar-menu` and `sidebar-menu` has the same `id`
|
||||
- fix #1335 - missing color variables usage in `alert` and `btn-ghost-*`
|
||||
- move border style to CSS variables
|
||||
- add missing forms
|
||||
- `btn-actions` fixes
|
||||
- replace `$text-muted` to css variable
|
||||
|
||||
## `1.0.0-beta14` - 2022-10-21
|
||||
|
||||
- fix active items in dark mode
|
||||
- update Jekyll to newest version
|
||||
|
||||
## `1.0.0-beta13` - 2022-10-18
|
||||
|
||||
- update Bootstrap to 5.2.1, update dependencies
|
||||
- new `tracking` component
|
||||
- new radio button version of `form-imagecheck`
|
||||
- update icons to v1.105.0
|
||||
- dark mode improvements
|
||||
- corrects the spelling of New Zealand (#1318)
|
||||
- remove `$border-color-dark`
|
||||
- fix #1301 - code snippets in docs look bad in dark mode
|
||||
- fix #1305 - different default link color for dark mode
|
||||
- fix popover background in dark mode
|
||||
- fix button default border color
|
||||
- fix `form-imagecheck` bg in dark mode
|
||||
- navbar logo fix
|
||||
- move card ribbons config to variables
|
||||
- navbar border fix
|
||||
- dark mode active fix
|
||||
- using globalThis instead of window (#1315)
|
||||
- fix #1210 - lastmod not generated for pages in `sitemap.xml`
|
||||
- fix card border in dark mode
|
||||
- fix #895 - background color overwrites background image
|
||||
- fix #1302 - wrong card header in dark mode
|
||||
- fix #1303 - wrong color when hovering over `selectgroup` in dark mode
|
||||
- fix #1308 - bad coloring in table in dark mode
|
||||
- fix #1273 - datepicker background color broken
|
||||
- fix `$prefix` hard coded `layout/_dark.scss`
|
||||
- fix #1275 - remove last border-right on progress bar
|
||||
- fix #1261 - broken offcanvas bg
|
||||
|
||||
## `1.0.0-beta12` - 2022-09-19
|
||||
|
||||
- new "Job listing" page
|
||||
- new "Sign in with cover" page
|
||||
- new "Logs" page
|
||||
- new `progressbg` component
|
||||
- add a lot of CSS variables
|
||||
- add Dockerfile with alpine base
|
||||
- add icon pulse/tada/rotate animations
|
||||
- use `:host` in selectors to support Web Components
|
||||
- use dark table variant colors in dark mode (#1200)
|
||||
- update Tabler Icons to v1.96
|
||||
- change `space-y` component
|
||||
- headings, shadows and borders unify
|
||||
- toggle TinyMCE dark mode and skin based on the set Tabler theme
|
||||
- fix `card-footer` background
|
||||
- fix headers weight
|
||||
- fix transparent hover background in pagination
|
||||
- fix dark mode card text color
|
||||
- fix `--#{$prefix}card-bg` is undefined
|
||||
- fix global variable for `.card` and `.btn`
|
||||
- fix code sample in the customize tabler docs
|
||||
- fix form elements demo page radio buttons
|
||||
- replace `gulp-minify` with `gulp-terser`
|
||||
|
||||
## `1.0.0-beta11` - 2022-07-05
|
||||
|
||||
- new `Dropzone` component
|
||||
- new `Lightbox` component
|
||||
- new `TinyMCS` component
|
||||
- new `Inline Player` component
|
||||
- new `Pricing table` component
|
||||
- new `Datagrid` component
|
||||
- new optgroup form examples
|
||||
- new settings page
|
||||
- update Tabler Icons to v1.78
|
||||
- added popover docs page
|
||||
- fix: #1125 incorrect chart display in the mobile version
|
||||
- update Bootstrap to 5.2.0
|
||||
|
||||
## `1.0.0-beta10` - 2022-04-29
|
||||
|
||||
- new `datatable` component
|
||||
- update Tabler Icons to v1.67
|
||||
- fix: #1024 - fix Tom-select in dark mode
|
||||
- new carousel indicators: dots, vertical, thumbs (#1101)
|
||||
- replace !important modifier with more specific selectors (#1100)
|
||||
- new `FAQ` page
|
||||
|
||||
## `1.0.0-beta9` - 2022-02-26
|
||||
|
||||
- fix: #1061 - list group item colors in light and dark modes
|
||||
- new `tasks` dashboard
|
||||
- fix: #1059 - upload button in form element in dark view has problem
|
||||
- fix: #1052 - card background icon is practically invisible
|
||||
- remove Inter font and use default font system stack
|
||||
- fix: #1018 - vector map not working
|
||||
- fix: #1035 - wrong background color of hovered list group items in dark mode
|
||||
- dependencies update
|
||||
- add `font-display: swap;` to improve font loading
|
||||
- new `Boxed` layout
|
||||
|
||||
## `1.0.0-beta8` - 2022-02-05
|
||||
|
||||
- update dependencies
|
||||
- new vector maps demos
|
||||
- fixes update map on resize
|
||||
- docs improvement
|
||||
- replace `badge` with `status-dot` in `navbar-notifications.html`
|
||||
- map tooltip fixes
|
||||
|
||||
## `1.0.0-beta7` - 2022-02-05
|
||||
|
||||
- fix: #1019 - project-overview.html link not working
|
||||
- fix: #1010 - card with bottom tabs has incorrect border radius
|
||||
- uptime monitor mobile fixes
|
||||
- navbar dark button fix
|
||||
- `tabler-icons` link
|
||||
- autoloading webfonts
|
||||
- cards fixes, new cards demos
|
||||
- ruby dependencies update
|
||||
- RTL stylesheet fixes
|
||||
- new card action demos
|
||||
|
||||
## `1.0.0-beta6` - 2022-01-18
|
||||
|
||||
- pricing cards fix
|
||||
- fix bug `fw-...`, `.fs-...` is missed (#987)
|
||||
- avatar class fix
|
||||
- fix bug #903 `litepicker` with date range not having correct border
|
||||
- page wrapper fix
|
||||
- fix #900 `is-invalid-lite` class is not working under `was-validated` form class
|
||||
- update `@tabler/icons` to version 1.48
|
||||
- fix #960 - Badges not honoring font sizes
|
||||
- fix #959 - `node-sass` does not properly compile nested media queries
|
||||
- update package dependencies to newest version
|
||||
|
||||
## `1.0.0-beta5` - 2021-12-07
|
||||
|
||||
**Tabler has finally lived to see dark mode! 🌝🌚**
|
||||
|
||||
- **Dark mode enabled!**
|
||||
- add more cursors (#947)
|
||||
- fix #892 - media queries need to be nested when negating
|
||||
- update `@tabler/icons` to newest version
|
||||
- move optional dependencies to peerDependencies (#924)
|
||||
- move deployment to Github Actions (#934)
|
||||
- table border fixes
|
||||
- antialiased fix
|
||||
- update `@tabler/icons` to version 1.42
|
||||
- change default font to 'Inter'
|
||||
- colors unify
|
||||
- add `tom-select` and remove `choices.js`
|
||||
|
||||
## `1.0.0-beta4` - 2021-10-24
|
||||
|
||||
- upgrade required node.js version to 14
|
||||
- upgrade Bootstrap to 5.1
|
||||
- upgrade dependencies
|
||||
- fix #775 - litepicker not initializing
|
||||
- fix `nouislider` import in dev
|
||||
|
||||
## `1.0.0-beta3` - 2021-05-08
|
||||
|
||||
- upgrade Bootstrap to 5.0
|
||||
- upgrade dependencies
|
||||
- change `$border-radius-pill` variable
|
||||
- badge vertical align fix
|
||||
|
||||
## `1.0.0-beta2` - 2021-03-29
|
||||
|
||||
- update dependencies
|
||||
- `li` marker fix
|
||||
- page wrapper, nav fixes
|
||||
- scripts optimize, remove `capture_once`
|
||||
- `page-body` fixes
|
||||
- layout navbar fix
|
||||
- typography fix
|
||||
- ribbon fix
|
||||
- charts label fixes
|
||||
- charts docs
|
||||
|
||||
## `1.0.0-beta` - 2021-02-17
|
||||
|
||||
**Initial beta release of Tabler v1.0! Lots more coming soon though 😁**
|
||||
|
||||
- update Bootstrap to 5.0.0-beta2
|
||||
- update other dependencies.
|
||||
192
README.md
192
README.md
@@ -1,5 +1,5 @@
|
||||
<p align="center">
|
||||
<a href="https://github.com/tabler/tabler"><img src="https://raw.githubusercontent.com/tabler/tabler/refs/heads/dev/preview/static/logo.svg" alt="A premium and open source dashboard template with a responsive and high-quality UI." width="300"></a><br><br>
|
||||
<a href="https://github.com/tabler/tabler"><img src="https://raw.githubusercontent.com/tabler/tabler/refs/heads/dev/shared/static/logo.svg" alt="A premium and open source dashboard template with a responsive and high-quality UI." width="300"></a><br><br>
|
||||
A premium and open source dashboard template with a responsive and high-quality UI.
|
||||
</p>
|
||||
|
||||
@@ -15,7 +15,7 @@ A premium and open source dashboard template with a responsive and high-quality
|
||||
|
||||
## Sponsors
|
||||
|
||||
**If you want to support our project and help me grow it, you can [become a sponsor on GitHub](https://github.com/sponsors/codecalm) or just [donate on PayPal](https://paypal.me/codecalm) :)**
|
||||
**If you want to support our project and help us grow it, you can [become a sponsor on GitHub](https://github.com/sponsors/codecalm) or just [donate on PayPal](https://paypal.me/codecalm) :)**
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/sponsors/codecalm">
|
||||
@@ -32,7 +32,7 @@ A premium and open source dashboard template with a responsive and high-quality
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/14dd2a0a-bafe-436e-a6cb-29636278c781">
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/d3dede5a-d702-47c3-bb66-4d887948ed83">
|
||||
<img src="https://github.com/user-attachments/assets/d3dede5a-d702-47c3-bb66-4d887948ed83" alt="Tabler Icons preview" width="296">
|
||||
<img src="https://github.com/user-attachments/assets/d3dede5a-d702-47c3-bb66-4d887948ed83" alt="labmdatest" width="296">
|
||||
</picture>
|
||||
</a>
|
||||
</p>
|
||||
@@ -43,7 +43,7 @@ Tabler is fully responsive and compatible with all modern browsers. Thanks to it
|
||||
|
||||
<p align="center">
|
||||
<a href="https://preview.tabler.io" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/tabler/tabler/dev/preview/static/tabler-preview.png" alt="Tabler Preview">
|
||||
<img src="https://raw.githubusercontent.com/tabler/tabler/dev/shared/static/tabler-preview.png" alt="Tabler Preview">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
@@ -56,116 +56,30 @@ We've created this admin panel for everyone who wants to create templates based
|
||||
* **HTML5 & CSS3:** We use only modern web technologies, such as HTML5 and CSS3. Our theme includes some subtle CSS3 animations, which will help you attract attention.
|
||||
* **Clean Code:** We followed Bootstrap’s guidelines carefully to make your integration as easy as possible. All code is handwritten and W3C valid.
|
||||
* **Demo pages**: Tabler features over 20 individual pages using various components, which gives you the freedom to choose and combine. All components can vary in color and styling that you can easily modify using Sass. Sky is the limit!
|
||||
* **Single Page Application versions:** [Tabler React](https://github.com/tabler/tabler-react) has React components for Tabler.
|
||||
|
||||
## 📖 Documentation
|
||||
|
||||
Documentation is available as a part of Tabler preview: https://tabler.io/docs/
|
||||
|
||||
To run the documentation site locally, follow instructions in the [Documentation README](https://github.com/tabler/tabler/blob/dev/site/README.md).
|
||||
The documentation is available at https://docs.tabler.io/
|
||||
|
||||
## 🪴 Project Activity
|
||||
|
||||

|
||||
|
||||
## 💕 Sponsor Tabler
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/sponsors/codecalm" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/tabler/tabler/dev/preview/static/sponsor-banner-homepage.svg" alt="Sponsor Banner">
|
||||
</a>
|
||||
<img src="https://repobeats.axiom.co/api/embed/61d1db34446967b0848af68198a392067e0f5870.svg" alt="Repobeats analytics image" />
|
||||
</p>
|
||||
|
||||
### Sponsors
|
||||
|
||||
Support this project by becoming a sponsor. Your logo will show up in this README with a link to your website. [Become a sponsor!](https://opencollective.com/tabler#sponsor)
|
||||
|
||||
<a href="https://opencollective.com/tabler/tiers/sponsor/0/website" target="_blank"><img src="https://opencollective.com/tabler/tiers/sponsor/0/avatar.svg" /></a>
|
||||
<a href="https://opencollective.com/tabler/tiers/sponsor/1/website" target="_blank"><img src="https://opencollective.com/tabler/tiers/sponsor/1/avatar.svg" /></a>
|
||||
<a href="https://opencollective.com/tabler/tiers/sponsor/2/website" target="_blank"><img src="https://opencollective.com/tabler/tiers/sponsor/2/avatar.svg" /></a>
|
||||
<a href="https://opencollective.com/tabler/tiers/sponsor/3/website" target="_blank"><img src="https://opencollective.com/tabler/tiers/sponsor/3/avatar.svg" /></a>
|
||||
<a href="https://opencollective.com/tabler/tiers/sponsor/4/website" target="_blank"><img src="https://opencollective.com/tabler/tiers/sponsor/4/avatar.svg" /></a>
|
||||
<a href="https://opencollective.com/tabler/tiers/sponsor/5/website" target="_blank"><img src="https://opencollective.com/tabler/tiers/sponsor/5/avatar.svg" /></a>
|
||||
<a href="https://opencollective.com/tabler/tiers/sponsor/6/website" target="_blank"><img src="https://opencollective.com/tabler/tiers/sponsor/6/avatar.svg" /></a>
|
||||
<a href="https://opencollective.com/tabler/tiers/sponsor/7/website" target="_blank"><img src="https://opencollective.com/tabler/tiers/sponsor/7/avatar.svg" /></a>
|
||||
<a href="https://opencollective.com/tabler/tiers/sponsor/8/website" target="_blank"><img src="https://opencollective.com/tabler/tiers/sponsor/8/avatar.svg" /></a>
|
||||
<a href="https://opencollective.com/tabler/tiers/sponsor/9/website" target="_blank"><img src="https://opencollective.com/tabler/tiers/sponsor/9/avatar.svg" /></a>
|
||||
|
||||
## 📦 Setup environment
|
||||
|
||||
To use our build system and run our documentation locally, you'll need a copy of Tabler's source files. Follow the steps below:
|
||||
|
||||
1. [Install Node.js](https://nodejs.org/download/), which we use to manage our dependencies.
|
||||
2. Navigate to the root `/tabler` directory and run `pnpm install` to install our local dependencies listed in `package.json`.
|
||||
|
||||
**OSX users**:
|
||||
|
||||
```sh
|
||||
pnpm install
|
||||
```
|
||||
|
||||
and then
|
||||
|
||||
```sh
|
||||
npm run start
|
||||
```
|
||||
|
||||
**Windows users**:
|
||||
|
||||
[Install Git](https://git-scm.com/download/win) in `C:\Program Files\git\bin` directory and run `npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"` to change the default shell.
|
||||
|
||||
Once you complete the setup, you'll be able to run the various commands provided from the command line.
|
||||
|
||||
|
||||
## Build locally
|
||||
|
||||
You need to have `pnpm` installed.
|
||||
|
||||
1. From the root `/tabler` directory, run installation in the command line: `pnpm install`
|
||||
2. Then execute `pnpm run start` to start up the application stack.
|
||||
3. Open [http://localhost:3000](http://localhost:3000) in your browser, and voilà.
|
||||
4. Any change in the `/src` directory will build the application and refresh the page.
|
||||
|
||||
**Note**:
|
||||
Run `pnpm run build` for reforms a one off build application without refresh.
|
||||
Open [http://localhost:3001](http://localhost:3001) to configure the Web server.
|
||||
|
||||
## Installation
|
||||
|
||||
Tabler is distributed via npm.
|
||||
### Package Managers
|
||||
|
||||
Tabler is distributed via npm. You can install it with this or your preferred JavaScript package manager:
|
||||
|
||||
```sh
|
||||
npm install --save @tabler/core
|
||||
```
|
||||
|
||||
## Running with Docker
|
||||
|
||||
**Plain Docker**
|
||||
|
||||
If you don't want to install node/npm and the dependencies on your local environment, you can use the provided Dockerfile to build a docker image.
|
||||
This Dockerfile is provided as an example to spin-up a container running Tabler.
|
||||
|
||||
Example of how to use this image:
|
||||
|
||||
1. Build the tabler image : `docker build -t tabler .`
|
||||
2. Run the tabler image while mounting the `src` directory as well as the `_config.yml` file into the container.
|
||||
|
||||
Don't forget to expose the port 3000 so you can browse the website locally.
|
||||
You can also expose the port 3001 to have access to BrowserSync
|
||||
|
||||
```sh
|
||||
docker run -p 3000:3000 -p 3001:3001 -v $(pwd)/src:/app/src -v $(pwd)/_config.yml:/app/_config.yml tabler
|
||||
```
|
||||
|
||||
Now open your browser to [http://localhost:3000](http://localhost:3000). Edit anything in the `src/` folder and watch your browser refresh the page after it has been rebuilt.
|
||||
|
||||
**Docker Compose**
|
||||
|
||||
You can also use the docker compose config from this repo. Use `docker compose build && docker compose up` or `docker compose up --build` to build and start the container. Edit anything in the `src/` folder the same way as with plain docker and access the same URLs and ports in your browser.
|
||||
|
||||
### CDN support
|
||||
|
||||
All files included in `@tabler/core` npm package are available over a CDN.
|
||||
All files included in `@tabler/core` npm package are also available over a CDN.
|
||||
|
||||
#### Javascript
|
||||
|
||||
@@ -179,24 +93,84 @@ All files included in `@tabler/core` npm package are available over a CDN.
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/core@latest/dist/css/tabler.min.css">
|
||||
```
|
||||
|
||||
## Feature requests
|
||||
## Building locally
|
||||
|
||||
https://tabler.canny.io/feature-requests
|
||||
To build a copy of Tabler locally, you have two options. You can either set up your device directly with the development tools required to build Tabler, or if you would prefer not to install all the development dependencies directly onto your device, you can use a Dockerfile that Tabler provides to build a docker image. Instructions follow below.
|
||||
|
||||
### First steps: Downloading the Tabler source files
|
||||
|
||||
With either method, the first thing you'll want to do is download a copy of the Tabler source files to your device.
|
||||
|
||||
#### From the Tabler GitHub releases page
|
||||
|
||||
If you don't want to edit the source code once you've downloaded it, and aren't interested in merging future project updates into your copy, you can just download the source files straight from the [Tabler releases on GitHub](https://github.com/tabler/tabler/releases) and extract the contents to a directory called `tabler`.
|
||||
|
||||
#### Cloning with Git
|
||||
|
||||
If you **do** wish to edit the source code after downloading it, for example to contribute changes back to the Tabler project, you'll want to do this by cloning it with Git:
|
||||
1. If you don't have Git installed on your device, download and install it. You can find instructions at [https://git-scm.com/downloads](https://git-scm.com/downloads).
|
||||
2. (Optional) **Windows users:** you could optionally install Git in the `C:\Program Files\git\bin` directory and run `npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"` to change the default shell.
|
||||
3. Clone the Tabler project into a folder on your device. Instructions can be found at [cloning a repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository).
|
||||
|
||||
### Installing and running development tools directly
|
||||
|
||||
1. [Install Node.js](https://nodejs.org/download/), which we use to manage our dependencies.
|
||||
2. [Install pnpm](https://pnpm.io/installation) (We recommend either by [Using Corepack](https://pnpm.io/installation#using-corepack) or by [Using npm](https://pnpm.io/installation#using-npm))
|
||||
3. From the root `/tabler` directory where you downloaded the Tabler source files, run installation on the command line:
|
||||
```sh
|
||||
pnpm install
|
||||
```
|
||||
4. Then execute the following to start up the application stack:
|
||||
```sh
|
||||
pnpm run start
|
||||
```
|
||||
5. Open [http://localhost:3000](http://localhost:3000) to view the preview website in your browser, or [http://localhost:3010](http://localhost:3010) to view the documentation website - and voilà.
|
||||
Changes to most of the source files of Tabler core, preview and docs will rebuild the application and refresh the page.
|
||||
|
||||
**Note**:
|
||||
If you wish to perform a one-off build without auto-refresh on any changes, you can run:
|
||||
```sh
|
||||
pnpm run build
|
||||
```
|
||||
You can open [http://localhost:3001](http://localhost:3001) to configure the Web server.
|
||||
|
||||
|
||||
### Installing and running development tools with Docker
|
||||
|
||||
**Plain Docker**
|
||||
|
||||
Here is an example of how to use this image:
|
||||
|
||||
1. From the root `/tabler` directory where you downloaded the Tabler source files, build the tabler image:
|
||||
```sh
|
||||
docker build -t tabler .
|
||||
```
|
||||
2. Run the tabler image. The following command mounts the `src` directory into the container, exposes port 3000 to browse the website locally, and exposes port 3001 to automatically sync changes:
|
||||
```sh
|
||||
docker run -p 3000:3000 -p 3001:3001 -v $(pwd)/src:/app/src tabler
|
||||
```
|
||||
3. Open your browser to [http://localhost:3000](http://localhost:3000). Edit anything in the `src/` folder and watch your browser refresh the page after it has been rebuilt.
|
||||
|
||||
**Docker Compose**
|
||||
|
||||
You can also use the docker compose config from this repo. From the root `/tabler` directory where you downloaded the Tabler source files, use `docker compose build && docker compose up` or `docker compose up --build` to build and start the container. Edit anything in the `src/` folder the same way as with plain docker and access the same URLs and ports in your browser.
|
||||
|
||||
## Bugs and feature requests
|
||||
|
||||
Found a bug or have a feature request? [Please open a new issue](https://github.com/tabler/tabler/issues/new).
|
||||
|
||||
|
||||
## 🤓 Creators
|
||||
|
||||
**Paweł Kuna**
|
||||
|
||||
- <https://twitter.com/codecalm>
|
||||
- <https://x.com/codecalm>
|
||||
- <https://github.com/codecalm>
|
||||
- <https://codecalm.net>
|
||||
|
||||
**Bartłomiej Gawęda**
|
||||
|
||||
- <https://x.com/B_Gaweda>
|
||||
- <https://github.com/BG-Software-BG>
|
||||
|
||||
## 👨🚀 Contributors
|
||||
|
||||
@@ -204,25 +178,11 @@ This project exists thanks to all the people who contribute.
|
||||
|
||||
<img src="https://opencollective.com/tabler/contributors.svg?width=890&button=false" />
|
||||
|
||||
## 🌸 Backers
|
||||
## Social media
|
||||
|
||||
Thank you to all our backers! 🙏 [Become a backer](https://opencollective.com/tabler#backer)
|
||||
|
||||
<a href="https://opencollective.com/tabler#backers" target="_blank"><img src="https://opencollective.com/tabler/tiers/backer.svg?width=890&button=false" /></a>
|
||||
Stay up to date by joining our community on <a href="https://x.com/tabler_io" >X</a> and <a href="https://www.facebook.com/tabler.io">Facebook</a>
|
||||
|
||||
## License
|
||||
|
||||
See the [LICENSE](https://github.com/tabler/tabler/blob/master/LICENSE) file.
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
@@ -6,7 +6,7 @@ import { readFileSync, writeFileSync } from 'node:fs';
|
||||
import { join, dirname, basename } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import { sync } from 'glob';
|
||||
import banner from '@repo/banner';
|
||||
import banner from '../../shared/banner/index.mjs';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url))
|
||||
|
||||
33
core/.build/copy-libs.mjs
Normal file
33
core/.build/copy-libs.mjs
Normal file
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
'use strict'
|
||||
|
||||
import { existsSync, mkdirSync, lstatSync } from 'fs'
|
||||
import { emptyDirSync, copySync } from 'fs-extra/esm'
|
||||
import libs from '../libs.json' with { type: 'json' }
|
||||
import { fileURLToPath } from 'url'
|
||||
import { join, dirname } from 'node:path';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url))
|
||||
|
||||
emptyDirSync(join(__dirname, '..', 'dist/libs'))
|
||||
|
||||
for(const name in libs) {
|
||||
const { npm } = libs[name]
|
||||
|
||||
if (npm) {
|
||||
const from = join(__dirname, '..', `node_modules/${npm}`)
|
||||
const to = join(__dirname, '..', `dist/libs/${npm}`)
|
||||
|
||||
// create dir in dist/libs
|
||||
if (!existsSync(to)) {
|
||||
mkdirSync(to, { recursive: true })
|
||||
}
|
||||
|
||||
copySync(from, to, {
|
||||
dereference: true,
|
||||
})
|
||||
|
||||
console.log(`Successfully copied ${npm}`)
|
||||
}
|
||||
}
|
||||
107
core/.build/generate-sri.js
Normal file
107
core/.build/generate-sri.js
Normal file
@@ -0,0 +1,107 @@
|
||||
const crypto = require('node:crypto');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
const sh = require('shelljs');
|
||||
|
||||
sh.config.fatal = true
|
||||
|
||||
const configFile = path.join(__dirname, '../../shared/data/sri.json')
|
||||
|
||||
const files = [
|
||||
{
|
||||
file: 'dist/css/tabler.min.css',
|
||||
configPropertyName: 'css'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler.rtl.min.css',
|
||||
configPropertyName: 'css-rtl'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-flags.min.css',
|
||||
configPropertyName: 'css-flags'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-flags.rtl.min.css',
|
||||
configPropertyName: 'css-flags-rtl'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-marketing.min.css',
|
||||
configPropertyName: 'css-marketing'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-marketing.rtl.min.css',
|
||||
configPropertyName: 'css-marketing-rtl'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-payments.min.css',
|
||||
configPropertyName: 'css-payments'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-payments.rtl.min.css',
|
||||
configPropertyName: 'css-payments-rtl'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-props.min.css',
|
||||
configPropertyName: 'css-props'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-props.rtl.min.css',
|
||||
configPropertyName: 'css-props-rtl'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-themes.min.css',
|
||||
configPropertyName: 'css-themes'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-themes.rtl.min.css',
|
||||
configPropertyName: 'css-themes-rtl'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-socials.min.css',
|
||||
configPropertyName: 'css-socials'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-socials.rtl.min.css',
|
||||
configPropertyName: 'css-socials-rtl'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-vendors.min.css',
|
||||
configPropertyName: 'css-vendors'
|
||||
},
|
||||
{
|
||||
file: 'dist/css/tabler-vendors.rtl.min.css',
|
||||
configPropertyName: 'css-vendors-rtl'
|
||||
},
|
||||
{
|
||||
file: 'dist/js/tabler.min.js',
|
||||
configPropertyName: 'js'
|
||||
},
|
||||
{
|
||||
file: 'dist/js/tabler-theme.min.js',
|
||||
configPropertyName: 'js-theme'
|
||||
},
|
||||
// {
|
||||
// file: 'dist/preview/css/demo.min.css',
|
||||
// configPropertyName: 'demo-css'
|
||||
// },
|
||||
// {
|
||||
// file: 'dist/preview/js/demo.min.js',
|
||||
// configPropertyName: 'demo-js'
|
||||
// },
|
||||
]
|
||||
|
||||
for (const { file, configPropertyName } of files) {
|
||||
fs.readFile(path.join(__dirname, '..', file), 'utf8', (error, data) => {
|
||||
if (error) {
|
||||
throw error
|
||||
}
|
||||
|
||||
const algorithm = 'sha384'
|
||||
const hash = crypto.createHash(algorithm).update(data, 'utf8').digest('base64')
|
||||
const integrity = `${algorithm}-${hash}`
|
||||
|
||||
console.log(`${configPropertyName}: ${integrity}`)
|
||||
|
||||
sh.sed('-i', new RegExp(`^(\\s+"${configPropertyName}":\\s+["'])\\S*(["'])`), `$1${integrity}$2`, configFile)
|
||||
})
|
||||
}
|
||||
@@ -4,13 +4,13 @@ import { fileURLToPath } from 'node:url'
|
||||
import { babel } from '@rollup/plugin-babel'
|
||||
import { nodeResolve } from '@rollup/plugin-node-resolve'
|
||||
import replace from '@rollup/plugin-replace'
|
||||
import banner from '@repo/banner'
|
||||
import banner from '../../shared/banner/index.mjs'
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||
|
||||
const ESM = process.env.ESM === 'true'
|
||||
const THEME = process.env.THEME === 'true'
|
||||
|
||||
let destinationFile = `tabler${ESM ? '.esm' : ''}`
|
||||
const external = []
|
||||
const plugins = [
|
||||
babel({
|
||||
@@ -27,8 +27,9 @@ plugins.push(
|
||||
nodeResolve()
|
||||
)
|
||||
|
||||
const destinationFile = `tabler${THEME ? '-theme' : ''}${ESM ? '.esm' : ''}`
|
||||
const rollupConfig = {
|
||||
input: path.resolve(__dirname, `../js/tabler.${ESM ? 'esm' : 'umd'}.js`),
|
||||
input: path.resolve(__dirname, `../js/tabler${THEME ? '-theme' : ''}.js`),
|
||||
output: {
|
||||
banner: banner(),
|
||||
file: path.resolve(__dirname, `../dist/js/${destinationFile}.js`),
|
||||
@@ -40,7 +41,7 @@ const rollupConfig = {
|
||||
}
|
||||
|
||||
if (!ESM) {
|
||||
rollupConfig.output.name = 'tabler'
|
||||
rollupConfig.output.name = `tabler${THEME ? '-theme' : ''}`
|
||||
}
|
||||
|
||||
export default rollupConfig
|
||||
@@ -1,5 +1,107 @@
|
||||
# @tabler/core
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 446c34e: Fix README file in core package
|
||||
|
||||
## 1.3.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- a7f73d7: Fix README file in core package
|
||||
|
||||
## 1.3.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- a1af801: Add FullCalendar integration
|
||||
- b9d434d: Add new charts to dashboard pages
|
||||
- 79bd867: Add new form layout page
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- cac5d92: Update illustrations to v1.7
|
||||
- f94b153: Add SRI hashes to scripts and styles
|
||||
- c127d65: Fix colour picker preview page not displaying correctly
|
||||
- b6e9b18: Update icons to v3.31.0
|
||||
- 8850f61: Enhance pagination component with new styles
|
||||
- 9910dd0: Add "text features" menu item
|
||||
- 638f36c: Refactor SCSS variable names for shadows
|
||||
- 0d501e9: Correct `aria-label` of app menu link
|
||||
- 3a02ef9: Fix some marketing site rows overflowing on mobile
|
||||
- fd0fd47: Improve card footer layout and enhance entry display format in invoices
|
||||
- 74e5d26: Fix color badge in navbar menu
|
||||
- 72a1d67: Add clipboard functionality to Tabler documentation
|
||||
- bb617b8: Fix colour swatches on small screens
|
||||
- d73d78e: Add missing `tw` entry in `flags.json`
|
||||
- 19a3d20: Delete missing demo RTL style
|
||||
- b5e2f54: Enhance dropdown components for better accessibility
|
||||
- a41c956: Remove unnecessary `!important` from body padding
|
||||
- e675389: Fix missing border-radius to `.card-header-tabs`
|
||||
- 9007e73: Fix FAQ accordion structure
|
||||
|
||||
## 1.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- c59bc9d: Add gradient background utilities
|
||||
- f9e4da2: Add new apps card with brand icons in navbar
|
||||
- 92a3afe: Replaced TinyMCE with HugeRTE to address license violation
|
||||
- 199f39a: Update Bootstrap to version 5.3.5
|
||||
- 9bbcb99: Add theme settings wizard
|
||||
- b17b488: Add steps light colors
|
||||
- 215eaa4: Add Turbo library integration
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- aea3b0a: Rollback accordion component structure
|
||||
- 3fc7b84: Add space between page numbers in pagination
|
||||
- 2f8a372: Add Bootstrap components to Tabler JS
|
||||
- 9fceadd: Fix tooltip colors in vector maps
|
||||
- 44250db: Update avatar size variable to support list size configuration
|
||||
- be1f3d1: Fix broken shape in South Korea flag
|
||||
- c20d076: Refactor `border-radius` in components to use CSS variables
|
||||
- 042e50f: Update disabled color variables in navbars
|
||||
- 473fa38: Apply border radius to `tom-select` on focus
|
||||
- 8646192: Add avatars page with various demos of avatars
|
||||
- 922bb03: Minor spelling and grammar improvements to emails docs
|
||||
- 44250db: Update avatar size variable to support list size configuration
|
||||
- ddcd3a7: Refactor SCSS for alerts and close button styles
|
||||
- e3d68d6: Fix `autosize` and `input mask` plugins to use window scope
|
||||
- 4846828: Fix scrollbar color mixin to use body color variable
|
||||
- 6b6617a: Improve README
|
||||
- 94bea00: Make scrollbar track transparent
|
||||
- e14e492: Fix scrollbar jumps when content is higher than screen
|
||||
- 6d6d1bd: Add responsive font size for form controls on mobile devices
|
||||
- 6c566cf: Add new advanced table example
|
||||
|
||||
## 1.1.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- f29c911: Fix Documentation structure
|
||||
|
||||
## 1.1.0
|
||||
|
||||
### Minor Changes
|
||||
@@ -31,3 +133,523 @@
|
||||
- b28ce9f: Fix vertical alignment in single page and error layouts
|
||||
- 24b944c: Fix `.avatar-upload` double borders
|
||||
- ca4ba14: Fixes navbar styles with new hover effects and color variables
|
||||
|
||||
## 1.0.0 - 2025-01-28
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- c276a8b: Add new `Tag` component
|
||||
- d380224: Add customizable Star Ratings component using `star-rating.js` library
|
||||
- 47cd6c1: Add `flags.html` page with list of all flags
|
||||
- be67ab6: Update CSS class from `text-muted` to `text-secondary` for better Bootstrap compatibility
|
||||
- 080c746: Adding `alerts.html` page with example of alerts.
|
||||
- b381273: Change primary color value to new Tabler branding
|
||||
- 75619dd: Unify dark mode with latest Bootstrap API and improve dark mode elements
|
||||
- cc82dbf: New Chat component
|
||||
- 5a03643: Adjusting form element sizes for enhanced mobile devices compatibility
|
||||
- be14607: Add new color picker component using `coloris.js` library
|
||||
- d046570: Update Tabler Icons to version 2.23 with 18 new icons added
|
||||
- 5488c50: New page with payment providers: `payment-providers.html`
|
||||
- 5488c50: Add support for new payment providers: 2c2p, Adyen, Affirm, Alipay Plus, Allegro Pay, Amazon Pay, Apple Pay, Autopay, Binance USD, Bkash, Cash App, Chime, EasyPaisa, Ethereum, Google Pay, HubSpot, iDeal, Litecoin, Mercado Pago, MetaMask, MoneyGram, OpenSea, Payconiq, Payka, Payline, PayPo, Paysafe, Poli,
|
||||
Revolut Pay, Samsung Pay, Shop Pay, Solana, Spingo, Stax, Tether, True USD, Venmo, WeChat Pay, Wise, Zelle
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 293d0a4: Change Twitter to X brand
|
||||
- fd0935a: Updated link to icons documentation
|
||||
- 1cf27dc: Dependencies update
|
||||
- 041f4e4: Order menu items alphabetically
|
||||
- 20cad01: Automatically retrieve and display the changelog from the CHANGELOG.md file.
|
||||
- 34f3efc: Initialize Visual Studio Code config
|
||||
- 7ba7717: Make horizontal rule direction aware
|
||||
- 063ef58: Update Tabler Illustrations to v1.5
|
||||
- 5e2c975: Update Tabler Icons to v3.29.0
|
||||
- 9d5f7ca: Remove unused dependencies from `package.json`
|
||||
- be69fd6: Replace Jekyll with Eleventy
|
||||
- 2f5fad6: Dependencies update
|
||||
- dfd7c88: Update TinyMCE to v7.0
|
||||
- 056df18: Fix text color in dark version of navbar
|
||||
- 17327dc: Remove invalid `z-index` setting for dropdowns
|
||||
- 4ff077a: Update Tabler Icons to version 2.21 with 18 new icons added
|
||||
- 867c8dd: Update Tabler Emails to v2.0
|
||||
- d8605f2: Init changelog script
|
||||
- 89c6234: Adding Two-Step Verification Pages
|
||||
- f6e885b: Replace `.page-center` with `.my-auto` in single page layouts
|
||||
- 7aa216f: Add border-opacity variable for improved color utility
|
||||
- 88eb413: Fix icon display issues in the Star Ratings component
|
||||
- 78392b6: Fix `color` of disabled `dropdown-item` in Navbar component
|
||||
- 4deb8f4: Bump pnpm/action-setup from 2 to 3
|
||||
- 9015472: Add social icons plugin
|
||||
- 7fe30a1: `Dockerfile` fix
|
||||
- e53942f: Update Jekyll to version 4.3.4
|
||||
- 72f868b: Update Tabler Icons to version 2.20 with 37 new icons added
|
||||
- e0443c0: Add Tabler Illustrations
|
||||
- 5cca710: Update illustrations and enhance SVG handling in HTML
|
||||
- 3a4f10f: Fix ids of custom size star ratings
|
||||
- 7896562: Unify size of avatar, flag and payment components
|
||||
- 1587905: Update icons to v2.42.0
|
||||
- d9e00b2: Update Bootstrap to v5.3.0
|
||||
- bc1d1a3: Set `font-size` of an `i` element with `icon` class in a `button` element
|
||||
- 0195f9b: Dependencies update
|
||||
- a5bf5d3: Fix icons in `form-elements.html`
|
||||
- 736410c: Update Tabler Icons to v3.28.1
|
||||
- 3f516ea: Fix `rgba` color values in `_variables.scss`
|
||||
- e91884e: Fix description of alerts with a description
|
||||
- 90cc744: Fix colors of disabled `.ts-control`
|
||||
- 1801e41: Center content on error and single page layouts
|
||||
- 45c83ac: Resolve map page issues
|
||||
- faee63c: Improve base font family loading
|
||||
- 5e7e0dd: Introduce Docker Compose Config to build and run Ttabler locally
|
||||
- c293a66: Fix `@charset` CSS declaration in bundle.
|
||||
- cb4a681: Update `_navbar.scss` with disabled dropdown menu items color
|
||||
- af41fb3: Update Tabler Icons to v3.17.0
|
||||
- 6cbe888: Update `@tabler/icons` to v3.0
|
||||
- 0e4bf5f: Refactor data structure by converting YAML files to JSON
|
||||
- 82cf257: Increase `z-index` of `ts-dropdown` to prevent overlapping by buttons
|
||||
- 4b4b4f6: Adding punctuation to `SECURITY.md`
|
||||
- a0a2d52: Fix form controls bugs in dark mode
|
||||
- f45b697: Fix padding in code blocks
|
||||
- 4de166d: Unified Box Shadows with Bootstrap Compatibility
|
||||
- 87bf2f5: Remove duplicated setting of color in `th` element
|
||||
- 5dc45aa: Fix layout of search results for small and medium screens
|
||||
- 4ae0358: Remove `text-decoration` on hovering `a` element with class having `icon` class
|
||||
- e798eb6: Fix small typo in tables docs
|
||||
- 1c1d0c9: Improve documentation for alerts
|
||||
- 371ef84: Bump `pnpm/action-setup` from 3 to 4
|
||||
- 8421fc2: Update dependencies
|
||||
- 0625f5f: Update Tabler Icons to version 2.22 with 18 new icons added
|
||||
- ba65fc3: Update devDependencies
|
||||
- a43ded4: Add All Contributions package to project for easy contribution tracking
|
||||
- 2f622c9: Set value of `$font-family-monospace` as default
|
||||
- 2c7c448: Refactor Dockerfile and package.json
|
||||
- 5ec7f05: Resolved light dropdown issue on dark theme
|
||||
- b0b07b9: Enhance documentation
|
||||
- 0f129b1: Update Tabler Icons to version 2.19 with 18 new icons added
|
||||
- 507df7b: Fix cells with inline icons
|
||||
- 0e5b44a: Fix `color` of disabled `nav-link` in `nav-bordered`
|
||||
- 65c1300: Fix the `z-index` value of the `nav-tab` inside `card-tab` #1933
|
||||
- 8552a46: Switch from `npm` to `pnpm` for faster package installation
|
||||
- 4a9e40d: Increase contrast of active `dropdown-item` in vertical layout
|
||||
- 17ebdf4: Update documentation for Tabler components
|
||||
- 4c88481: Add variable to configure `avatar-list` spacing
|
||||
- df46ee7: Do not display empty `fieldset` element
|
||||
- 875cafa: Refactor SCSS variables to use `color.adjust` for improved color manipulation
|
||||
- eb28546: Add Tabler Illustrations
|
||||
- 650d84c: Update required Node.js version to 18 and add `.nvmrc` file
|
||||
- fb659d4: Fix table default background color
|
||||
- f77c712: Avoid SCSS color dependency on `:focus`
|
||||
- 71c68ce: Update changelog configuration and release scripts
|
||||
- 34d124d: Update Tabler Icons to v3.26.0
|
||||
- 4cd9215: Updated Tabler Icons to v3.24.0
|
||||
- 7bb947b: Update Tabler Icons to version 2.18 with 18 new icons added
|
||||
- c75cf55: Update Node.js engine requirement to allow versions >=20
|
||||
- 1c34e8e: Update Tabler Icons to v3.14.0
|
||||
- 289dd3b: Add Prettier to project for consistent code formatting
|
||||
- f83e36c: Upgrade Node.js from version 18 to version 20 for improved performance, security, and feature updates.
|
||||
- b885852: Update Tabler Icons to version 2.25 with 48 new icons added
|
||||
- 53a5117: Fix responsiveness issue in Settings menu
|
||||
- 38504e5: Added 3 new payments from Nepal: Esewa, FonePay, Khalti and Imepay
|
||||
- 35ee14d: Add new Filled section to Icons page
|
||||
- d32f242: Update `bootstrap` to v5.3.1
|
||||
- d82f94e: Update package dependencies to latest versions
|
||||
- 54c5ad0: Fix link to webfont version of Tabler Icons
|
||||
- 94b83d4: Add support for changeset tool for more efficient and organized code changes
|
||||
- c51ff28: Fix colors in date range datepicker
|
||||
|
||||
## `1.0.0-beta24` - 2025-01-11
|
||||
|
||||
- Enhanced documentation.
|
||||
- Updated illustrations and improved SVG handling in HTML.
|
||||
- Updated copyright year in LICENSE file to 2025.
|
||||
- Added marketing pages plugin.
|
||||
|
||||
## `1.0.0-beta23` - 2025-01-07
|
||||
|
||||
- Documentation improvements.
|
||||
- Added countup functionality and updated documentation example.
|
||||
- Do not display empty `<fieldset>`.
|
||||
- Set font-size of webfont icon inside a button.
|
||||
- Ordered menu items alphabetically.
|
||||
- Marked value of `$font-family-monospace` as `!default`.
|
||||
- Fixed unpkg links to static-files icons.
|
||||
- Fixed description of alerts with a description.
|
||||
- Fixed layout of search results for small and medium screens.
|
||||
- Removed invalid z-index setting for dropdown.
|
||||
- Fixed IDs of custom size star ratings.
|
||||
- Removed text-decoration on hover for elements with child icons.
|
||||
- Fixed link to webfont icons.
|
||||
- Updated color reference links in UI component documentation.
|
||||
- Fixed typo in browser support documentation summary.
|
||||
- Enhanced Figma plugin documentation with detailed usage instructions.
|
||||
- Added documentation for Tabler Illustrations and updated index with a link.
|
||||
- Enhanced documentation for various UI and icon sections.
|
||||
- Added new documentation files for icons and UI components; restructured existing files.
|
||||
- Updated documentation structure and content for icons and UI components.
|
||||
- Removed outdated `menu.json` and added `index.mdx` files for UI documentation structure.
|
||||
- General docs update.
|
||||
- Increased contrast of active dropdown-item in vertical layout.
|
||||
- Removed duplicated color setting in table headers.
|
||||
- Increased `z-index` of `ts-dropdown`.
|
||||
- Added social icons plugin.
|
||||
- Described variables for datagrid in docs.
|
||||
- Fixed multiple documentation issues.
|
||||
- Removed unused config from the code.
|
||||
- Fixed links to Tabler Icons.
|
||||
- Updated dark image.
|
||||
- Updated screenshot.
|
||||
- Fixed icon issues.
|
||||
- Fixed URL in documentation.
|
||||
|
||||
## `1.0.0-beta22` - 2025-01-02
|
||||
|
||||
- Fixed `@charset` CSS declaration in bundle.
|
||||
- Fixed cells with inline icons.
|
||||
- Fixed padding in code blocks.
|
||||
- Fixed colors in date range datepicker.
|
||||
- Fixed icon display issues in the Star Ratings component.
|
||||
- Fixed `z-index` value of the `nav-tab` inside `card-tab`.
|
||||
- Fixed wrong gray colors.
|
||||
- Fixed incorrect CDN URL in `webfont.mdx`.
|
||||
- Ensured border color works in dark mode.
|
||||
- Replaced `.page-center` with `.my-auto` in single-page layouts.
|
||||
- Updated Tabler Emails to v2.0.
|
||||
- Updated Tabler Icons to v3.26.0.
|
||||
- Updated docs structure.
|
||||
- Updated `download.mdx`.
|
||||
- Updated Node.js to version 20.
|
||||
- Improved base font family.
|
||||
- Made horizontal rule direction-aware.
|
||||
- Added new payment providers.
|
||||
- Read changelog from `CHANGELOG.md` file.
|
||||
- Initialized VS Code configuration.
|
||||
|
||||
## `1.0.0-beta21` - 2024-09-8
|
||||
|
||||
- Updated dependencies.
|
||||
- Updated Tabler Icons to v3.14.0 and the import script.
|
||||
- Fixed invisible scrollbar in dark mode when navigating the preview.
|
||||
- Styled `btn-close` specifically for `.modal-header`.
|
||||
- Added proper borders to the ribbon start class.
|
||||
- Changed brand color.
|
||||
- Included `docs` in the `npm` package.
|
||||
- Added Tabler Illustrations.
|
||||
- Fixed use of the secondary color in specific form elements.
|
||||
- Introduced Docker Compose Config for local Tabler builds.
|
||||
- Allowed usage of `tinymce` v7.x as a peer dependency.
|
||||
- Updated TinyMCE to v7.0.
|
||||
- Rebranded Twitter to X.
|
||||
- Replaced undraw illustrations with Tabler Illustrations.
|
||||
- Added punctuation to `SECURITY.md`.
|
||||
- Updated `_navbar.scss` to correct disabled dropdown menu item colors.
|
||||
- Removed unused packages.
|
||||
- Fixed map pages.
|
||||
- Resolved issues with toasts in dark mode.
|
||||
- Fixed alert background prefix.
|
||||
- Corrected a typo in CHANGELOG.md.
|
||||
- Fixed radial chart issue.
|
||||
- Added documentation on running the site locally in Site README.
|
||||
- Updated colors in `colors.mdx`.
|
||||
- Fixed dynamic SCSS prefix in mixins.
|
||||
- Changed `<h1>` to `<div>` in `navbar-logo.html`.
|
||||
- Resolved vertical centering on error pages.
|
||||
- Fixed navbar menu issues.
|
||||
- Added `background-clip: border-box` to `.dropdown-menu` class.
|
||||
- Replaced `href="#"` with `href="javascript:void(0)"`.
|
||||
- Fixed disabled CSS class for links.
|
||||
- Addressed missing variables and minor color adjustments.
|
||||
- Improved heights, scrolls, and layouts in Docs examples.
|
||||
- Fixed flags display in preview.
|
||||
|
||||
## `1.0.0-beta20` - 2023-08-24
|
||||
|
||||
- Update `bootstrap` to v5.3.1
|
||||
- Add new `Chat` component
|
||||
- Add new `Tag` component
|
||||
- Add customizable Star Ratings component using `star-rating.js` library
|
||||
- Add new color picker component using `coloris.js` library
|
||||
- Add `alerts.html` page with example of alerts.
|
||||
- Add `flags.html` page with list of all flags
|
||||
- Add Two-Step Verification Pages
|
||||
- Add variable to configure `avatar-list` spacing
|
||||
- Unify dark mode with latest Bootstrap API and improve dark mode elements
|
||||
- Unify Box Shadows with Bootstrap Compatibility
|
||||
- Avoid SCSS color dependency on `:focus`
|
||||
- Update CSS class from `text-muted` to `text-secondary` for better Bootstrap compatibility
|
||||
- Fix text color in dark version of navbar
|
||||
- Adjusting form element sizes for enhanced mobile devices compatibility
|
||||
- Resolved light dropdown issue on dark theme
|
||||
- Update Tabler Icons to version 2.32 with 48 new icons added
|
||||
- Fix table default background color
|
||||
- Fix responsiveness issue in Settings menu
|
||||
- Update required Node.js version to 18 and add `.nvmrc` file
|
||||
- Add support for changeset tool for more efficient and organized code changes
|
||||
- `Dockerfile` fix
|
||||
- Switch from `npm` to `pnpm` for faster package installation
|
||||
|
||||
## `1.0.0-beta19` - 2023-05-15
|
||||
|
||||
- Add customizable Star Ratings component using `star-rating.js` library (#1571)
|
||||
- Add new "Filled" section to Icons page (#1574)
|
||||
- Fix form controls bugs in dark mode (#1573)
|
||||
- Fix text color in dark version of navbar (#1569)
|
||||
- Changelog update
|
||||
|
||||
## `1.0.0-beta18` - 2023-05-14
|
||||
|
||||
- new page: Cookie banner
|
||||
- Unify dark mode with latest Bootstrap API and improve dark mode elements (#1561)
|
||||
- Update Tabler Icons to version 2.18 with 18 new icons added (#1560)
|
||||
- Switch from `npm` to `pnpm` for faster package installation (#1559)
|
||||
- Add Prettier to project for consistent code formatting (#1558)
|
||||
- Update required Node.js version to 18 and add `.nvmrc` file (#1555)
|
||||
- Add All Contributions package to project for easy contribution tracking (#1556)
|
||||
- Add support for changeset tool for more efficient and organized code changes (#1553)
|
||||
- Fix bug where `border-1`, `border-2`, etc don't work (#1526)
|
||||
- Fix indeterminate input background color (#1536)
|
||||
- Update Bootstrap to `5.3.0-alpha3` (#1543)
|
||||
- `tom-select` dark mode styling fixes
|
||||
- Advanced udage of `tom-select` (#1480)
|
||||
- Fix Dropdown menu in rtl mode (#801)
|
||||
- Fix `tom-select` dropdown will be shaded in table-responsive (#1409)
|
||||
- Remove overflow scroll from body
|
||||
- Fix avatars overlap transparently (#1464)
|
||||
- Fix TinyMCE dropdown icon list transparent (#1426)
|
||||
- Dark mode lite colors improvement
|
||||
- Fix non full width selects (#1392)
|
||||
|
||||
## `1.0.0-beta17` - 2023-01-28
|
||||
|
||||
- update `bootstrap` to v5.3.0
|
||||
- update icons to v2.1.2
|
||||
- add 72 new brands, browsers logos update
|
||||
- new `Trial ended` page
|
||||
- new `Page loader` page
|
||||
- new `Profile` page
|
||||
- headings fix
|
||||
- dropdown background color fix
|
||||
- fix rgba conversion bug
|
||||
- fix autofill text color, not matching in dark mode
|
||||
- update license
|
||||
- header html5 tags
|
||||
- add input with appended `<kbd>`
|
||||
- `bootstrap` import fix
|
||||
- font improvements
|
||||
- change `$body-color` to CSS variable
|
||||
- scrollbars improvements
|
||||
- move `@tabler/icons` to `dev-dependencies`
|
||||
- fix #1370: avatar stacked list is not stacked anymore
|
||||
|
||||
## `1.0.0-beta16` - 2022-11-12
|
||||
|
||||
- new `Photogrid` page
|
||||
- `Steps` component improvements
|
||||
- fix #1348: Make job listing responsive for smaller devices
|
||||
- fix #1357: buttons group not active
|
||||
- fix #1352: fix deprecation warning
|
||||
- fix #1180: number input with `form-control-sm` looks weird
|
||||
- fix #1328: color input should show different color for inner check symbol on white ellipse
|
||||
- fix #1355 - missing font sizes
|
||||
- update icons to v1.111.0
|
||||
- homepage navbar fix
|
||||
- fix #1262 - `.bg-opacity-xx` class is not functioning properly
|
||||
|
||||
## `1.0.0-beta15` - 2022-11-01
|
||||
|
||||
- new `badges` page
|
||||
- `<kbd>` styling
|
||||
- update icons to v1.109.0
|
||||
- `tom-select` border fix
|
||||
- exclude `playgrounds` from build
|
||||
- update jekyll to v4.3.1
|
||||
- fix: facebook color update
|
||||
- navbar aria atributes fixes
|
||||
- fix #808 - `navbar-menu` and `sidebar-menu` has the same `id`
|
||||
- fix #1335 - missing color variables usage in `alert` and `btn-ghost-*`
|
||||
- move border style to CSS variables
|
||||
- add missing forms
|
||||
- `btn-actions` fixes
|
||||
- replace `$text-muted` to css variable
|
||||
|
||||
## `1.0.0-beta14` - 2022-10-21
|
||||
|
||||
- fix active items in dark mode
|
||||
- update Jekyll to newest version
|
||||
|
||||
## `1.0.0-beta13` - 2022-10-18
|
||||
|
||||
- update Bootstrap to 5.2.1, update dependencies
|
||||
- new `tracking` component
|
||||
- new radio button version of `form-imagecheck`
|
||||
- update icons to v1.105.0
|
||||
- dark mode improvements
|
||||
- corrects the spelling of New Zealand (#1318)
|
||||
- remove `$border-color-dark`
|
||||
- fix #1301 - code snippets in docs look bad in dark mode
|
||||
- fix #1305 - different default link color for dark mode
|
||||
- fix popover background in dark mode
|
||||
- fix button default border color
|
||||
- fix `form-imagecheck` bg in dark mode
|
||||
- navbar logo fix
|
||||
- move card ribbons config to variables
|
||||
- navbar border fix
|
||||
- dark mode active fix
|
||||
- using globalThis instead of window (#1315)
|
||||
- fix #1210 - lastmod not generated for pages in `sitemap.xml`
|
||||
- fix card border in dark mode
|
||||
- fix #895 - background color overwrites background image
|
||||
- fix #1302 - wrong card header in dark mode
|
||||
- fix #1303 - wrong color when hovering over `selectgroup` in dark mode
|
||||
- fix #1308 - bad coloring in table in dark mode
|
||||
- fix #1273 - datepicker background color broken
|
||||
- fix `$prefix` hard coded `layout/_dark.scss`
|
||||
- fix #1275 - remove last border-right on progress bar
|
||||
- fix #1261 - broken offcanvas bg
|
||||
|
||||
## `1.0.0-beta12` - 2022-09-19
|
||||
|
||||
- new "Job listing" page
|
||||
- new "Sign in with cover" page
|
||||
- new "Logs" page
|
||||
- new `progressbg` component
|
||||
- add a lot of CSS variables
|
||||
- add Dockerfile with alpine base
|
||||
- add icon pulse/tada/rotate animations
|
||||
- use `:host` in selectors to support Web Components
|
||||
- use dark table variant colors in dark mode (#1200)
|
||||
- update Tabler Icons to v1.96
|
||||
- change `space-y` component
|
||||
- headings, shadows and borders unify
|
||||
- toggle TinyMCE dark mode and skin based on the set Tabler theme
|
||||
- fix `card-footer` background
|
||||
- fix headers weight
|
||||
- fix transparent hover background in pagination
|
||||
- fix dark mode card text color
|
||||
- fix `--#{$prefix}card-bg` is undefined
|
||||
- fix global variable for `.card` and `.btn`
|
||||
- fix code sample in the customize tabler docs
|
||||
- fix form elements demo page radio buttons
|
||||
- replace `gulp-minify` with `gulp-terser`
|
||||
|
||||
## `1.0.0-beta11` - 2022-07-05
|
||||
|
||||
- new `Dropzone` component
|
||||
- new `Lightbox` component
|
||||
- new `TinyMCS` component
|
||||
- new `Inline Player` component
|
||||
- new `Pricing table` component
|
||||
- new `Datagrid` component
|
||||
- new optgroup form examples
|
||||
- new settings page
|
||||
- update Tabler Icons to v1.78
|
||||
- added popover docs page
|
||||
- fix: #1125 incorrect chart display in the mobile version
|
||||
- update Bootstrap to 5.2.0
|
||||
|
||||
## `1.0.0-beta10` - 2022-04-29
|
||||
|
||||
- new `datatable` component
|
||||
- update Tabler Icons to v1.67
|
||||
- fix: #1024 - fix Tom-select in dark mode
|
||||
- new carousel indicators: dots, vertical, thumbs (#1101)
|
||||
- replace !important modifier with more specific selectors (#1100)
|
||||
- new `FAQ` page
|
||||
|
||||
## `1.0.0-beta9` - 2022-02-26
|
||||
|
||||
- fix: #1061 - list group item colors in light and dark modes
|
||||
- new `tasks` dashboard
|
||||
- fix: #1059 - upload button in form element in dark view has problem
|
||||
- fix: #1052 - card background icon is practically invisible
|
||||
- remove Inter font and use default font system stack
|
||||
- fix: #1018 - vector map not working
|
||||
- fix: #1035 - wrong background color of hovered list group items in dark mode
|
||||
- dependencies update
|
||||
- add `font-display: swap;` to improve font loading
|
||||
- new `Boxed` layout
|
||||
|
||||
## `1.0.0-beta8` - 2022-02-05
|
||||
|
||||
- update dependencies
|
||||
- new vector maps demos
|
||||
- fixes update map on resize
|
||||
- docs improvement
|
||||
- replace `badge` with `status-dot` in `navbar-notifications.html`
|
||||
- map tooltip fixes
|
||||
|
||||
## `1.0.0-beta7` - 2022-02-05
|
||||
|
||||
- fix: #1019 - project-overview.html link not working
|
||||
- fix: #1010 - card with bottom tabs has incorrect border radius
|
||||
- uptime monitor mobile fixes
|
||||
- navbar dark button fix
|
||||
- `tabler-icons` link
|
||||
- autoloading webfonts
|
||||
- cards fixes, new cards demos
|
||||
- ruby dependencies update
|
||||
- RTL stylesheet fixes
|
||||
- new card action demos
|
||||
|
||||
## `1.0.0-beta6` - 2022-01-18
|
||||
|
||||
- pricing cards fix
|
||||
- fix bug `fw-...`, `.fs-...` is missed (#987)
|
||||
- avatar class fix
|
||||
- fix bug #903 `litepicker` with date range not having correct border
|
||||
- page wrapper fix
|
||||
- fix #900 `is-invalid-lite` class is not working under `was-validated` form class
|
||||
- update `@tabler/icons` to version 1.48
|
||||
- fix #960 - Badges not honoring font sizes
|
||||
- fix #959 - `node-sass` does not properly compile nested media queries
|
||||
- update package dependencies to newest version
|
||||
|
||||
## `1.0.0-beta5` - 2021-12-07
|
||||
|
||||
**Tabler has finally lived to see dark mode! 🌝🌚**
|
||||
|
||||
- **Dark mode enabled!**
|
||||
- add more cursors (#947)
|
||||
- fix #892 - media queries need to be nested when negating
|
||||
- update `@tabler/icons` to newest version
|
||||
- move optional dependencies to peerDependencies (#924)
|
||||
- move deployment to Github Actions (#934)
|
||||
- table border fixes
|
||||
- antialiased fix
|
||||
- update `@tabler/icons` to version 1.42
|
||||
- change default font to 'Inter'
|
||||
- colors unify
|
||||
- add `tom-select` and remove `choices.js`
|
||||
|
||||
## `1.0.0-beta4` - 2021-10-24
|
||||
|
||||
- upgrade required node.js version to 14
|
||||
- upgrade Bootstrap to 5.1
|
||||
- upgrade dependencies
|
||||
- fix #775 - litepicker not initializing
|
||||
- fix `nouislider` import in dev
|
||||
|
||||
## `1.0.0-beta3` - 2021-05-08
|
||||
|
||||
- upgrade Bootstrap to 5.0
|
||||
- upgrade dependencies
|
||||
- change `$border-radius-pill` variable
|
||||
- badge vertical align fix
|
||||
|
||||
## `1.0.0-beta2` - 2021-03-29
|
||||
|
||||
- update dependencies
|
||||
- `li` marker fix
|
||||
- page wrapper, nav fixes
|
||||
- scripts optimize, remove `capture_once`
|
||||
- `page-body` fixes
|
||||
- layout navbar fix
|
||||
- typography fix
|
||||
- ribbon fix
|
||||
- charts label fixes
|
||||
- charts docs
|
||||
|
||||
## `1.0.0-beta` - 2021-02-17
|
||||
|
||||
**Initial beta release of Tabler v1.0! Lots more coming soon though 😁**
|
||||
|
||||
- update Bootstrap to 5.0.0-beta2
|
||||
- update other dependencies.
|
||||
|
||||
42
core/README.md
Normal file
42
core/README.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# Tabler Core
|
||||
|
||||
Tabler Core is a set of components and utilities for building web applications. It provides a collection of pre-designed components, such as buttons, forms, modals, and more, that can be easily customized and integrated into your projects.
|
||||
|
||||
## 🔎 Preview
|
||||
|
||||
Tabler is fully responsive and compatible with all modern browsers. Thanks to its modern and user-friendly design you can create a fully functional interface that users will love! Choose the layouts and components you need and customize them to make your design consistent and eye-catching. Every component has been created with attention to detail to make your interface beautiful!
|
||||
|
||||
<p align="center">
|
||||
<a href="https://preview.tabler.io" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/tabler/tabler/dev/shared/static/tabler-preview.png" alt="Tabler Preview">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
## Installation
|
||||
|
||||
To install Tabler Core, you can use npm or yarn. Run one of the following commands in your terminal:
|
||||
|
||||
```bash
|
||||
npm install @tabler/core
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```bash
|
||||
pnpm add @tabler/core
|
||||
```
|
||||
|
||||
## Sponsors
|
||||
|
||||
**If you want to support our project and help us grow it, you can [become a sponsor on GitHub](https://github.com/sponsors/codecalm) or just [donate on PayPal](https://paypal.me/codecalm) :)**
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/sponsors/codecalm">
|
||||
<img src="https://cdn.jsdelivr.net/gh/tabler/sponsors@latest/sponsors.svg" alt="Tabler sponsors">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
||||
## License
|
||||
|
||||
See the [LICENSE](https://github.com/tabler/tabler/blob/master/LICENSE) file.
|
||||
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><g mask="url(#KR_-_Korea_(South)__a)"><path fill="#F7FCFF" fill-rule="evenodd" d="M0 0v15h20V0H0z" clip-rule="evenodd"/><g mask="url(#KR_-_Korea_(South)__b)"><path fill="#3D58DB" fill-rule="evenodd" d="M10 11.387c2.002 0 3.624-1.723 3.624-3.849 0-2.126-1.622-3.849-3.624-3.849s-3.624 1.723-3.624 3.85c0 2.125 1.622 3.848 3.624 3.848z" clip-rule="evenodd"/><g mask="url(#KR_-_Korea_(South)__c)"><path fill="#E31D1C" fill-rule="evenodd" d="M13.751 7.833s-.203-1.815-1.71-1.914c-1.507-.098-1.913 1.331-2 1.71-.087.379-.307 1.39-1.893 1.39s-1.73-2.57-1.73-2.57V3.42h7.333v4.414z" clip-rule="evenodd"/></g><path fill="#272727" fill-rule="evenodd" d="m4.562 1.283.572.517-2.65 3.095-.572-.517 2.65-3.095zm.943.837.572.517-2.555 3.05-.572-.517 2.555-3.05zm1.51 1.364-.571-.517L3.882 6.04l.572.517 2.562-3.073zm8.837-2.418-.572.515.993 1.164.572-.515-.993-1.164zm1.764 2.141-.572.516.992 1.164.572-.515-.992-1.165zm-4.223.051.571-.515.993 1.164-.572.515-.992-1.164zm2.335 1.626-.572.516.992 1.164.572-.515-.992-1.165zm-1.356-2.49.572-.515 2.762 3.363-.572.516-2.762-3.364zm1.912 6.508-.576-.517-1.001 1.168.577.518 1-1.17zm-1.682 2.057-.577-.517-1 1.168.577.518 1-1.17zm2.927-.938.577.517-1 1.169-.578-.518 1.001-1.168zm-1.023 2.621-.577-.517-1 1.169.576.517 1.001-1.169zm-1.527-1.406.577.518-1.044 1.248-.577-.518 1.044-1.248zm2.29-1.562-.576-.517-1.045 1.248.577.517 1.044-1.248zM4.004 9.306l.572-.516 2.553 2.926-.572.515-2.553-2.925zm.596 2.559.572-.516 1.078 1.185-.572.515L4.6 11.865zm-1.907-1.433-.572.516 2.567 2.964.572-.516-2.567-2.964zm.407-.337.572-.516.935 1.096-.572.516-.935-1.096z" clip-rule="evenodd"/></g></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none"><path d="M0,0V15H20V0Z" fill="#f7fcff" fill-rule="evenodd"/><path d="M13.74,7.58a3.66,3.66,0,1,1-3.66-3.7A3.67,3.67,0,0,1,13.74,7.58Z" fill="#e31d1c" fill-rule="evenodd"/><path d="M6.47,6.93c.12.93.29,2,1.72,2.08a1.82,1.82,0,0,0,1.94-1.6,1.81,1.81,0,0,1,2.86-1,1.71,1.71,0,0,1,.74,1.35,3.64,3.64,0,0,1-1.84,3.08,3.73,3.73,0,0,1-4.16-.34A3.84,3.84,0,0,1,6.47,6.93Z" fill="#3d58db" fill-rule="evenodd"/><path d="M4.56,1.28l.57.52L2.48,4.89l-.57-.51Zm.94.84.58.52L3.52,5.69,3,5.17ZM7,3.48,6.44,3,3.88,6l.57.52L7,3.48Zm8.84-2.41-.57.51,1,1.16.57-.51Zm1.77,2.14L17,3.72l1,1.17.57-.52Zm-4.23,0L14,2.74l1,1.17-.57.51Zm2.34,1.62-.57.52,1,1.16.57-.51ZM14.37,2.39l.57-.51,2.77,3.36-.58.52ZM16.28,8.9l-.57-.52-1,1.17.57.52,1-1.17ZM14.6,11,14,10.44l-1,1.17.57.52,1-1.17ZM17.53,10l.58.52-1,1.17-.58-.52Zm-1,2.62-.58-.52-1,1.17.57.52ZM15,11.24l.58.51L14.51,13l-.58-.52Zm2.29-1.57-.58-.51-1,1.24.57.52ZM4,9.31l.58-.52,2.55,2.93-.57.51Zm.6,2.55.57-.51,1.08,1.18-.57.52ZM2.69,10.43,2.12,11l2.57,3,.57-.51Zm.41-.33.57-.52.94,1.1L4,11.19Z" fill="#272727" fill-rule="evenodd"/></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,10 +1,7 @@
|
||||
// Autosize plugin
|
||||
|
||||
import autosize from 'autosize';
|
||||
|
||||
const elements = document.querySelectorAll('[data-bs-toggle="autosize"]');
|
||||
if (elements.length) {
|
||||
elements.forEach(function (element) {
|
||||
autosize && autosize(element);
|
||||
window.autosize && window.autosize(element);
|
||||
});
|
||||
}
|
||||
@@ -5,15 +5,19 @@ if (elements.length) {
|
||||
let options = {};
|
||||
try {
|
||||
const dataOptions = element.getAttribute('data-countup') ? JSON.parse(element.getAttribute('data-countup')) : {};
|
||||
options = Object.assign({'enableScrollSpy': true}, dataOptions);
|
||||
options = Object.assign({
|
||||
'enableScrollSpy': true
|
||||
}, dataOptions);
|
||||
|
||||
} catch (error) {}
|
||||
|
||||
const value = parseInt(element.innerHTML, 10);
|
||||
|
||||
const countUp = new window.countUp.CountUp(element, value, options);
|
||||
if (!countUp.error) {
|
||||
countUp.start();
|
||||
if (window.countUp && window.countUp.CountUp) {
|
||||
const countUp = new window.countUp.CountUp(element, value, options);
|
||||
if (!countUp.error) {
|
||||
countUp.start();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
// Input mask plugin
|
||||
|
||||
import IMask from 'imask';
|
||||
|
||||
var maskElementList = [].slice.call(document.querySelectorAll('[data-mask]'));
|
||||
maskElementList.map(function (maskEl) {
|
||||
IMask && new IMask(maskEl, {
|
||||
window.IMask && new window.IMask(maskEl, {
|
||||
mask: maskEl.dataset.mask,
|
||||
lazy: maskEl.dataset['mask-visible'] === 'true'
|
||||
})
|
||||
|
||||
25
core/js/src/sortable.js
Normal file
25
core/js/src/sortable.js
Normal file
@@ -0,0 +1,25 @@
|
||||
// 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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
35
core/js/tabler-theme.js
Normal file
35
core/js/tabler-theme.js
Normal file
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* demo-theme is specifically loaded right after the body and not deferred
|
||||
* to ensure we switch to the chosen dark/light theme as fast as possible.
|
||||
* This will prevent any flashes of the light theme (default) before switching.
|
||||
*/
|
||||
const themeConfig = {
|
||||
"theme": "light",
|
||||
"theme-base": "gray",
|
||||
"theme-font": "sans-serif",
|
||||
"theme-primary": "blue",
|
||||
"theme-radius": "1",
|
||||
}
|
||||
|
||||
const params = new Proxy(new URLSearchParams(window.location.search), {
|
||||
get: (searchParams, prop) => searchParams.get(prop),
|
||||
})
|
||||
|
||||
for (const key in themeConfig) {
|
||||
const param = params[key]
|
||||
let selectedValue
|
||||
|
||||
if (!!param) {
|
||||
localStorage.setItem('tabler-' + key, param)
|
||||
selectedValue = param
|
||||
} else {
|
||||
const storedTheme = localStorage.getItem('tabler-' + key)
|
||||
selectedValue = storedTheme ? storedTheme : themeConfig[key]
|
||||
}
|
||||
|
||||
if (selectedValue !== themeConfig[key]) {
|
||||
document.documentElement.setAttribute('data-bs-' + key, selectedValue)
|
||||
} else {
|
||||
document.documentElement.removeAttribute('data-bs-' + key)
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,24 @@ import "./src/dropdown"
|
||||
import "./src/tooltip"
|
||||
import "./src/popover"
|
||||
import "./src/switch-icon"
|
||||
import "./src/tab"
|
||||
import "./src/toast"
|
||||
import "./src/sortable"
|
||||
|
||||
export * as bootstrap from "bootstrap"
|
||||
export * as tabler from "./src/tabler"
|
||||
|
||||
export {
|
||||
Alert,
|
||||
Modal,
|
||||
Toast,
|
||||
Tooltip,
|
||||
Tab,
|
||||
Button,
|
||||
Carousel,
|
||||
Collapse,
|
||||
Dropdown,
|
||||
Popover,
|
||||
ScrollSpy,
|
||||
Offcanvas
|
||||
} from 'bootstrap'
|
||||
@@ -1,15 +0,0 @@
|
||||
import "./src/autosize"
|
||||
import "./src/countup"
|
||||
import "./src/input-mask"
|
||||
import "./src/dropdown"
|
||||
import "./src/tooltip"
|
||||
import "./src/popover"
|
||||
import "./src/switch-icon"
|
||||
import "./src/tab"
|
||||
import "./src/toast"
|
||||
|
||||
import * as bootstrap from "bootstrap"
|
||||
import * as tabler from "./src/tabler"
|
||||
|
||||
globalThis.bootstrap = bootstrap
|
||||
globalThis.tabler = tabler
|
||||
170
core/libs.json
Normal file
170
core/libs.json
Normal file
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"imask": {
|
||||
"npm": "imask",
|
||||
"js": [
|
||||
"dist/imask.min.js"
|
||||
]
|
||||
},
|
||||
"autosize": {
|
||||
"npm": "autosize",
|
||||
"js": [
|
||||
"dist/autosize.min.js"
|
||||
]
|
||||
},
|
||||
"apexcharts": {
|
||||
"npm": "apexcharts",
|
||||
"js": [
|
||||
"dist/apexcharts.min.js"
|
||||
]
|
||||
},
|
||||
"nouislider": {
|
||||
"npm": "nouislider",
|
||||
"js": [
|
||||
"dist/nouislider.min.js"
|
||||
],
|
||||
"css": [
|
||||
"dist/nouislider.min.css"
|
||||
]
|
||||
},
|
||||
"countup": {
|
||||
"npm": "countup.js",
|
||||
"js": [
|
||||
"dist/countUp.umd.js"
|
||||
]
|
||||
},
|
||||
"lists": {
|
||||
"npm": "list.js",
|
||||
"js": [
|
||||
"dist/list.min.js"
|
||||
]
|
||||
},
|
||||
"sortablejs": {
|
||||
"npm": "sortablejs",
|
||||
"js": [
|
||||
"Sortable.min.js"
|
||||
]
|
||||
},
|
||||
"masonry": {
|
||||
"js": [
|
||||
"https://cdnjs.cloudflare.com/ajax/libs/masonry/4.2.2/masonry.pkgd.min.js"
|
||||
]
|
||||
},
|
||||
"mapbox": {
|
||||
"js": [
|
||||
"https://api.mapbox.com/mapbox-gl-js/v1.8.0/mapbox-gl.js"
|
||||
],
|
||||
"css": [
|
||||
"https://api.mapbox.com/mapbox-gl-js/v1.8.0/mapbox-gl.css"
|
||||
]
|
||||
},
|
||||
"google-maps": {
|
||||
"js": [
|
||||
"https://maps.googleapis.com/maps/api/js?key=GOOGLE_MAPS_KEY"
|
||||
]
|
||||
},
|
||||
"litepicker": {
|
||||
"npm": "litepicker",
|
||||
"js": [
|
||||
"dist/litepicker.js"
|
||||
]
|
||||
},
|
||||
"tom-select": {
|
||||
"npm": "tom-select",
|
||||
"js": [
|
||||
"dist/js/tom-select.base.min.js"
|
||||
],
|
||||
"css": [
|
||||
"dist/css/tom-select.bootstrap5.min.css"
|
||||
]
|
||||
},
|
||||
"jsvectormap": {
|
||||
"npm": "jsvectormap",
|
||||
"js": [
|
||||
"dist/jsvectormap.min.js",
|
||||
"dist/maps/world.js",
|
||||
"dist/maps/world-merc.js"
|
||||
],
|
||||
"css": [
|
||||
"dist/jsvectormap.css"
|
||||
]
|
||||
},
|
||||
"fslightbox": {
|
||||
"npm": "fslightbox",
|
||||
"js": [
|
||||
"index.js"
|
||||
]
|
||||
},
|
||||
"hugerte": {
|
||||
"npm": "hugerte",
|
||||
"js": [
|
||||
"hugerte.min.js"
|
||||
]
|
||||
},
|
||||
"plyr": {
|
||||
"npm": "plyr",
|
||||
"js": [
|
||||
"dist/plyr.min.js"
|
||||
],
|
||||
"css": [
|
||||
"dist/plyr.css"
|
||||
]
|
||||
},
|
||||
"dropzone": {
|
||||
"npm": "dropzone",
|
||||
"js": [
|
||||
"dist/dropzone-min.js"
|
||||
],
|
||||
"css": [
|
||||
"dist/dropzone.css"
|
||||
]
|
||||
},
|
||||
"star-rating.js": {
|
||||
"npm": "star-rating.js",
|
||||
"js": [
|
||||
"dist/star-rating.min.js"
|
||||
],
|
||||
"css": [
|
||||
"dist/star-rating.min.css"
|
||||
]
|
||||
},
|
||||
"coloris.js": {
|
||||
"npm": "@melloware/coloris",
|
||||
"js": [
|
||||
"dist/umd/coloris.min.js"
|
||||
],
|
||||
"css": [
|
||||
"dist/coloris.min.css"
|
||||
]
|
||||
},
|
||||
"typed.js": {
|
||||
"npm": "typed.js",
|
||||
"js": [
|
||||
"dist/typed.umd.js"
|
||||
]
|
||||
},
|
||||
"signature_pad": {
|
||||
"npm": "signature_pad",
|
||||
"js": [
|
||||
"dist/signature_pad.umd.min.js"
|
||||
]
|
||||
},
|
||||
"clipboard": {
|
||||
"npm": "clipboard",
|
||||
"js": [
|
||||
"dist/clipboard.min.js"
|
||||
]
|
||||
},
|
||||
"fullcalendar": {
|
||||
"npm": "fullcalendar",
|
||||
"js": [
|
||||
"index.global.min.js"
|
||||
]
|
||||
},
|
||||
"turbo": {
|
||||
"npm": "@hotwired/turbo",
|
||||
"js": [
|
||||
"dist/turbo.es2017-umd.js"
|
||||
],
|
||||
"head": true
|
||||
}
|
||||
}
|
||||
@@ -1,33 +1,39 @@
|
||||
{
|
||||
"name": "@tabler/core",
|
||||
"version": "1.1.0",
|
||||
"version": "1.4.0",
|
||||
"description": "Premium and Open Source dashboard template with responsive and high quality UI.",
|
||||
"homepage": "https://tabler.io",
|
||||
"scripts": {
|
||||
"dev": "pnpm run watch",
|
||||
"build": "pnpm run clean && pnpm run css && pnpm run js && pnpm run copy",
|
||||
"dev": "pnpm run clean && pnpm run copy && pnpm run watch",
|
||||
"build": "pnpm run clean && pnpm run css && pnpm run js && pnpm run copy && pnpm run generate-sri",
|
||||
"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-compile": "sass scss/:dist/css/ --no-source-map --load-path=node_modules",
|
||||
"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-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-compile": "sass --no-source-map --load-path=node_modules --style expanded scss/:dist/css/",
|
||||
"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-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": "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-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\"",
|
||||
"js": "pnpm run js-compile && pnpm run js-minify",
|
||||
"js-compile": "pnpm run js-compile-standalone && pnpm run js-compile-standalone-esm",
|
||||
"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-minify": "pnpm run js-minify-standalone && pnpm run js-minify-standalone-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": "rollup --environment THEME:true --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-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-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",
|
||||
"copy": "pnpm run copy-img",
|
||||
"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",
|
||||
"copy": "pnpm run copy-img && pnpm run copy-libs",
|
||||
"copy-img": "shx mkdir -p dist/img && shx cp -rf img/* dist/img",
|
||||
"copy-libs": "node .build/copy-libs.mjs",
|
||||
"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-js": "nodemon --watch js/ --ext js --exec \"pnpm run js-compile\"",
|
||||
"bundlewatch": "bundlewatch",
|
||||
"generate-sri": "node .build/generate-sri.js",
|
||||
"format:check": "prettier --check src/**/*.{js,scss} --cache",
|
||||
"format:write": "prettier --write src/**/*.{js,scss} --cache"
|
||||
},
|
||||
@@ -61,7 +67,8 @@
|
||||
"dist/**/*",
|
||||
"js/**/*.{js,map}",
|
||||
"img/**/*.{svg}",
|
||||
"scss/**/*.scss"
|
||||
"scss/**/*.scss",
|
||||
"libs.json"
|
||||
],
|
||||
"style": "dist/css/tabler.css",
|
||||
"sass": "scss/tabler.scss",
|
||||
@@ -139,10 +146,32 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@popperjs/core": "^2.11.8",
|
||||
"bootstrap": "5.3.3"
|
||||
"bootstrap": "5.3.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@repo/banner": "workspace:*"
|
||||
"@hotwired/turbo": "^8.0.13",
|
||||
"@melloware/coloris": "^0.25.0",
|
||||
"apexcharts": "3.54.1",
|
||||
"autosize": "^6.0.1",
|
||||
"choices.js": "^11.1.0",
|
||||
"clipboard": "^2.0.11",
|
||||
"countup.js": "^2.9.0",
|
||||
"dropzone": "^6.0.0-beta.2",
|
||||
"flatpickr": "^4.6.13",
|
||||
"fslightbox": "^3.6.1",
|
||||
"fullcalendar": "^6.1.18",
|
||||
"hugerte": "^1.0.9",
|
||||
"imask": "^7.6.1",
|
||||
"jsvectormap": "^1.7.0",
|
||||
"list.js": "^2.3.1",
|
||||
"litepicker": "^2.0.12",
|
||||
"nouislider": "^15.8.1",
|
||||
"plyr": "^3.7.8",
|
||||
"signature_pad": "^5.0.10",
|
||||
"sortablejs": "^1.15.0",
|
||||
"star-rating.js": "^4.3.1",
|
||||
"tom-select": "^2.4.3",
|
||||
"typed.js": "^2.1.0"
|
||||
},
|
||||
"directories": {
|
||||
"doc": "docs"
|
||||
|
||||
@@ -14,12 +14,9 @@
|
||||
@import "bootstrap/scss/nav";
|
||||
@import "bootstrap/scss/navbar";
|
||||
@import "bootstrap/scss/card";
|
||||
// @import "bootstrap/scss/accordion";
|
||||
@import "bootstrap/scss/breadcrumb";
|
||||
@import "bootstrap/scss/pagination";
|
||||
@import "bootstrap/scss/progress";
|
||||
@import "bootstrap/scss/list-group";
|
||||
@import "bootstrap/scss/close";
|
||||
@import "bootstrap/scss/toasts";
|
||||
@import "bootstrap/scss/modal";
|
||||
@import "bootstrap/scss/tooltip";
|
||||
@@ -29,8 +26,5 @@
|
||||
@import "bootstrap/scss/offcanvas";
|
||||
@import "bootstrap/scss/placeholders";
|
||||
|
||||
// Helpers
|
||||
@import "bootstrap/scss/helpers";
|
||||
|
||||
// Utilities
|
||||
@import "bootstrap/scss/utilities/api";
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// Config
|
||||
@import "bootstrap/scss/functions";
|
||||
@import "bootstrap/scss/variables";
|
||||
@import "bootstrap/scss/variables-dark";
|
||||
@import "bootstrap/scss/maps";
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
@use "sass:color";
|
||||
|
||||
@mixin caret($direction: down) {
|
||||
$selector: "after";
|
||||
|
||||
@@ -74,5 +76,5 @@
|
||||
// TODO: remove when https://github.com/twbs/bootstrap/pull/37425/ will be released
|
||||
//
|
||||
@function opaque($background, $foreground) {
|
||||
@return mix(rgba($foreground, 1), $background, opacity($foreground) * 100%);
|
||||
@return color.mix(rgba($foreground, 1), $background, color.alpha($foreground) * 100%);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@import "bootstrap/scss/functions";
|
||||
|
||||
|
||||
@import "mixins";
|
||||
@import "variables";
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
@import "config";
|
||||
@import "bootstrap-components";
|
||||
|
||||
@import "props";
|
||||
|
||||
@import "fonts/webfonts";
|
||||
|
||||
@import "layout/root";
|
||||
@@ -65,6 +67,8 @@
|
||||
@import "ui/chat";
|
||||
@import "ui/signature";
|
||||
|
||||
@import "helpers/index";
|
||||
|
||||
@import "utils/background";
|
||||
@import "utils/colors";
|
||||
@import "utils/scroll";
|
||||
@@ -72,6 +76,7 @@
|
||||
@import "utils/opacity";
|
||||
@import "utils/shadow";
|
||||
@import "utils/text";
|
||||
@import "utils/hover";
|
||||
|
||||
@import "debug";
|
||||
|
||||
|
||||
92
core/scss/_props.scss
Normal file
92
core/scss/_props.scss
Normal file
@@ -0,0 +1,92 @@
|
||||
@use "sass:map";
|
||||
@import "config";
|
||||
|
||||
:root,
|
||||
:host {
|
||||
/** Fonts */
|
||||
--#{$prefix}font-monospace: #{$font-family-monospace};
|
||||
--#{$prefix}font-sans-serif: #{$font-family-sans-serif};
|
||||
--#{$prefix}font-serif: #{$font-family-serif};
|
||||
--#{$prefix}font-comic: #{$font-family-comic};
|
||||
|
||||
/** Gray colors */
|
||||
--#{$prefix}gray-50: #{$gray-50};
|
||||
--#{$prefix}gray-100: #{$gray-100};
|
||||
--#{$prefix}gray-200: #{$gray-200};
|
||||
--#{$prefix}gray-300: #{$gray-300};
|
||||
--#{$prefix}gray-400: #{$gray-400};
|
||||
--#{$prefix}gray-500: #{$gray-500};
|
||||
--#{$prefix}gray-600: #{$gray-600};
|
||||
--#{$prefix}gray-700: #{$gray-700};
|
||||
--#{$prefix}gray-800: #{$gray-800};
|
||||
--#{$prefix}gray-900: #{$gray-900};
|
||||
--#{$prefix}gray-950: #{$gray-950};
|
||||
|
||||
--#{$prefix}white: #{$white};
|
||||
--#{$prefix}black: #{$black};
|
||||
--#{$prefix}dark: #{$dark};
|
||||
--#{$prefix}light: #{$light};
|
||||
|
||||
/** Brand colors */
|
||||
--#{$prefix}brand: #{$primary};
|
||||
|
||||
/** Theme colors */
|
||||
@each $name, $color in map.merge($theme-colors, $social-colors) {
|
||||
--#{$prefix}#{$name}: #{$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}-darken: #{theme-color-darker($color)};
|
||||
--#{$prefix}#{$name}-darken: color-mix(in oklab, var(--#{$prefix}#{$name}), transparent 20%);
|
||||
--#{$prefix}#{$name}-lt: #{theme-color-lighter($color)};
|
||||
--#{$prefix}#{$name}-lt: color-mix(in oklab, var(--#{$prefix}#{$name}) 10%, transparent);
|
||||
--#{$prefix}#{$name}-200: color-mix(in oklab, var(--#{$prefix}#{$name}) 20%, transparent);
|
||||
--#{$prefix}#{$name}-lt-rgb: #{to-rgb(theme-color-lighter($color))};
|
||||
}
|
||||
|
||||
/** Gray colors */
|
||||
@each $name, $color in $gray-colors {
|
||||
--#{$prefix}#{$name}-fg: #{if(contrast-ratio($color, white) > $min-contrast-ratio, var(--#{$prefix}white), var(--#{$prefix}body-color))};
|
||||
}
|
||||
|
||||
/** Spacers */
|
||||
@each $name, $value in $spacers {
|
||||
--#{$prefix}spacer-#{$name}: #{$value};
|
||||
}
|
||||
|
||||
/** Font sizes */
|
||||
@each $name, $value in $font-weights {
|
||||
--#{$prefix}font-weight-#{$name}: #{$value};
|
||||
}
|
||||
|
||||
@each $name, $value in $font-sizes {
|
||||
--#{$prefix}font-size-h#{$name}: #{$value};
|
||||
}
|
||||
|
||||
@each $name, $value in $line-heights {
|
||||
--#{$prefix}line-height-#{$name}: #{$value};
|
||||
}
|
||||
|
||||
/** Shadows */
|
||||
@each $name, $value in $box-shadows {
|
||||
--#{$prefix}shadow#{if($name, '-#{$name}', '')}: #{$value};
|
||||
}
|
||||
|
||||
/** Border radiuses */
|
||||
--#{$prefix}border-radius-scale: 1;
|
||||
@each $name, $value in $border-radiuses {
|
||||
@if $name {
|
||||
--#{$prefix}border-radius-#{$name}: calc(#{$value} * var(--#{$prefix}border-radius-scale, 1));
|
||||
} @else {
|
||||
--#{$prefix}border-radius: #{$value};
|
||||
}
|
||||
}
|
||||
|
||||
/** Backdrops */
|
||||
--#{$prefix}backdrop-opacity: #{$backdrop-opacity};
|
||||
--#{$prefix}backdrop-bg: var(--#{$prefix}bg-surface-dark);
|
||||
@each $name, $value in $backdrops {
|
||||
--#{$prefix}backdrop-bg#{if($name, '-#{$name}', '')}: #{$value};
|
||||
}
|
||||
--#{$prefix}backdrop-blur: #{$backdrop-blur};
|
||||
--#{$prefix}backdrop-filter: blur(var(--#{$prefix}backdrop-blur));
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
@use "sass:map";
|
||||
|
||||
$negative-spacers-extra: if(
|
||||
$enable-negative-margins,
|
||||
negativify-map(map-merge($spacers, $spacers-extra)),
|
||||
negativify-map(map.merge($spacers, $spacers-extra)),
|
||||
null
|
||||
);
|
||||
|
||||
|
||||
@@ -102,5 +102,41 @@ $utilities: (
|
||||
'<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": (
|
||||
property: background,
|
||||
class: bg-gradient,
|
||||
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,
|
||||
),
|
||||
),
|
||||
"bg-blur": (
|
||||
property: backdrop-filter,
|
||||
class: bg-blur,
|
||||
values: (
|
||||
null: blur($backdrop-blur)
|
||||
)
|
||||
),
|
||||
"bg-gradient-direction": (
|
||||
property: --#{$prefix}gradient-direction,
|
||||
class: bg-gradient,
|
||||
values: (
|
||||
to-t: to top,
|
||||
to-te: to top right,
|
||||
to-e: to right,
|
||||
to-be: to bottom right,
|
||||
to-b: to bottom,
|
||||
to-bs: to bottom left,
|
||||
to-s: to left,
|
||||
to-ts: to top left,
|
||||
),
|
||||
),
|
||||
"table-layout": (
|
||||
property: table-layout,
|
||||
class: table,
|
||||
values: (
|
||||
auto: auto,
|
||||
fixed: fixed,
|
||||
),
|
||||
),
|
||||
) !default;
|
||||
|
||||
@@ -11,7 +11,7 @@ $border-dark-color-dark: color.adjust($dark, $lightness: 4%) !default;
|
||||
$border-active-color-dark: color.adjust($dark, $lightness: 12%) !default;
|
||||
|
||||
//new bootsrap variables
|
||||
$body-color-dark: $gray-200 !default;
|
||||
$body-color-dark: $gray-200 !default;
|
||||
$body-emphasis-color-dark: $white !default;
|
||||
|
||||
$code-color-dark: var(--#{$prefix}gray-300) !default;
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
@use "sass:string";
|
||||
@use "sass:math";
|
||||
@use "sass:map";
|
||||
@use "sass:color";
|
||||
|
||||
$prefix: "tblr-" !default;
|
||||
|
||||
// BASE CONFIG
|
||||
@@ -23,9 +28,10 @@ $font-google-monospaced: null !default;
|
||||
$font-local: null !default;
|
||||
$font-icons: () !default;
|
||||
|
||||
$font-family-sans-serif: unquote("#{if($font-local, "#{$font-local}, ", ' ')}#{if($font-google, "#{$font-google}, ", ' ')}") 'Inter Var', Inter, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif !default;
|
||||
$font-family-monospace: unquote("#{if($font-google-monospaced, "#{$font-google-monospaced}, ", '')}") Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace !default;
|
||||
$font-family-sans-serif: string.unquote("#{if($font-local, "#{$font-local}, ", ' ')}#{if($font-google, "#{$font-google}, ", ' ')}") 'Inter Var', Inter, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif !default;
|
||||
$font-family-monospace: string.unquote("#{if($font-google-monospaced, "#{$font-google-monospaced}, ", '')}") Monaco, Consolas, Liberation Mono, Courier New, monospace !default;
|
||||
$font-family-serif: "Georgia", "Times New Roman", times, serif !default;
|
||||
$font-family-comic: "Comic Sans MS", "Comic Sans", "Chalkboard SE", "Comic Neue", sans-serif, cursive !default;
|
||||
|
||||
//Icons
|
||||
$icon-stroke-width: 1.5 !default;
|
||||
@@ -51,9 +57,9 @@ $line-height-700: 3rem !default;
|
||||
|
||||
$font-size-base: 0.875rem !default;
|
||||
|
||||
$spacing-wide: .04em !default;
|
||||
$spacing-wide: 0.04em !default;
|
||||
$spacing-normal: 0 !default;
|
||||
$spacing-tight: -.04em !default;
|
||||
$spacing-tight: -0.04em !default;
|
||||
|
||||
$body-letter-spacing: 0 !default;
|
||||
|
||||
@@ -67,17 +73,18 @@ $headings-font-weight: var(--#{$prefix}font-weight-bold) !default;
|
||||
$headings-margin-bottom: var(--#{$prefix}spacer) !default;
|
||||
|
||||
$font-weights: (
|
||||
'light': $font-weight-light,
|
||||
'normal': $font-weight-normal,
|
||||
'medium': $font-weight-medium,
|
||||
'bold': $font-weight-bold,
|
||||
'black': $font-weight-black,
|
||||
'headings': $headings-font-weight,
|
||||
"light": $font-weight-light,
|
||||
"normal": $font-weight-normal,
|
||||
"medium": $font-weight-medium,
|
||||
"bold": $font-weight-bold,
|
||||
"black": $font-weight-black,
|
||||
"headings": $headings-font-weight,
|
||||
) !default;
|
||||
|
||||
$line-height-base: divide(1.25rem, $font-size-base) !default;
|
||||
$line-height-sm: divide(1rem, $font-size-base) !default;
|
||||
$line-height-lg: divide(1.5rem, $font-size-base) !default;
|
||||
$line-height-xl: divide(1.75rem, $font-size-base) !default;
|
||||
|
||||
$h1-font-size: 1.5rem !default;
|
||||
$h1-line-height: 2rem !default;
|
||||
@@ -97,8 +104,8 @@ $h5-line-height: 1rem !default;
|
||||
$h6-font-size: 0.625rem !default;
|
||||
$h6-line-height: 1rem !default;
|
||||
|
||||
$font-size-reative-xs: .71428571em !default;
|
||||
$font-size-reative-sm: .85714285em !default;
|
||||
$font-size-reative-xs: 0.71428571em !default;
|
||||
$font-size-reative-sm: 0.85714285em !default;
|
||||
$font-size-reative-md: 1em !default;
|
||||
|
||||
$font-sizes: (
|
||||
@@ -144,16 +151,17 @@ $border-light-opacity: 0.08 !default;
|
||||
$border-dark-opacity: 0.24 !default;
|
||||
$border-active-opacity: 0.58 !default;
|
||||
|
||||
$gray-50: #f6f8fb !default;
|
||||
$gray-100: #eef3f6 !default;
|
||||
$gray-200: #dce1e7 !default;
|
||||
$gray-300: #b8c4d4 !default;
|
||||
$gray-400: #8a97ab !default;
|
||||
$gray-500: #6c7a91 !default;
|
||||
$gray-600: #49566c !default;
|
||||
$gray-700: #3a4859 !default;
|
||||
$gray-800: #182433 !default;
|
||||
$gray-900: #040a11 !default;
|
||||
$gray-50: #f9fafb !default;
|
||||
$gray-100: #f3f4f6 !default;
|
||||
$gray-200: #e5e7eb !default;
|
||||
$gray-300: #d1d5db !default;
|
||||
$gray-400: #9ca3af !default;
|
||||
$gray-500: #6b7280 !default;
|
||||
$gray-600: #4b5563 !default;
|
||||
$gray-700: #374151 !default;
|
||||
$gray-800: #1f2937 !default;
|
||||
$gray-900: #111827 !default;
|
||||
$gray-950: #030712 !default;
|
||||
|
||||
$black: #000000 !default;
|
||||
$white: #ffffff !default;
|
||||
@@ -186,19 +194,7 @@ $green: #2fb344 !default;
|
||||
$teal: #0ca678 !default;
|
||||
$cyan: #17a2b8 !default;
|
||||
|
||||
$color-blue: #066fd1;
|
||||
$color-azure: #3586c9;
|
||||
$color-indigo: #4263eb;
|
||||
$color-purple: #ae3ec9;
|
||||
$color-pink: #d6336c;
|
||||
$color-red: #e73f3f;
|
||||
$color-orange: #f76707;
|
||||
$color-yellow: #f59f00;
|
||||
$color-lime: #74b816;
|
||||
$color-green: #2fb344;
|
||||
$color-teal: #0ca678;
|
||||
$color-cyan: #17a2b8;
|
||||
|
||||
$text-muted: $gray-500 !default;
|
||||
$text-secondary: $gray-500 !default;
|
||||
$text-secondary-light: $gray-400 !default;
|
||||
$text-secondary-dark: $gray-600 !default;
|
||||
@@ -209,7 +205,7 @@ $border-color-translucent: rgba(4, 32, 69, 0.1);
|
||||
$border-dark-color: $gray-400 !default;
|
||||
$border-dark-color-translucent: rgba(4, 32, 69, 0.27);
|
||||
|
||||
$border-active-color: mix($text-secondary, #ffffff, percentage($border-active-opacity)) !default;
|
||||
$border-active-color: color.mix($text-secondary, #ffffff, math.percentage($border-active-opacity)) !default;
|
||||
$border-active-color-translucent: rgba($text-secondary, $border-active-opacity) !default;
|
||||
|
||||
$active-bg: rgba(var(--#{$prefix}primary-rgb), 0.04) !default;
|
||||
@@ -219,27 +215,28 @@ $active-border-color: var(--#{$prefix}primary) !default;
|
||||
$hover-bg: rgba(var(--#{$prefix}secondary-rgb), 0.08) !default;
|
||||
|
||||
$disabled-bg: var(--#{$prefix}bg-surface-secondary) !default;
|
||||
$disabled-color: var(--#{$prefix}gray-300) !default;
|
||||
$disabled-color: color-transparent(var(--#{$prefix}body-color), 0.4) !default;
|
||||
|
||||
$primary: $blue !default;
|
||||
$secondary: $text-secondary !default;
|
||||
$muted: $text-secondary !default;
|
||||
$success: $green !default;
|
||||
$info: $azure !default;
|
||||
$warning: $orange !default;
|
||||
$warning: $yellow !default;
|
||||
$danger: $red !default;
|
||||
|
||||
$link-color: $primary !default;
|
||||
|
||||
$theme-colors: (
|
||||
"primary": $primary,
|
||||
"secondary": $text-secondary,
|
||||
"secondary": $secondary,
|
||||
"success": $success,
|
||||
"info": $info,
|
||||
"warning": $warning,
|
||||
"danger": $danger,
|
||||
"light": $light,
|
||||
"dark": $dark,
|
||||
"muted": $text-secondary,
|
||||
"muted": $muted,
|
||||
) !default;
|
||||
|
||||
$extra-colors: (
|
||||
@@ -287,11 +284,21 @@ $gray-colors: (
|
||||
gray-700: $gray-700,
|
||||
gray-800: $gray-800,
|
||||
gray-900: $gray-900,
|
||||
gray-950: $gray-950,
|
||||
) !default;
|
||||
|
||||
$theme-colors: map-merge($theme-colors, map-merge($extra-colors, $social-colors));
|
||||
$theme-colors: map.merge($theme-colors, map.merge($extra-colors, ()));
|
||||
|
||||
// Borders
|
||||
// BACKDROPS
|
||||
$backdrop-opacity: .32 !default;
|
||||
$backdrop-blur: 4px !default;
|
||||
$backdrop-bg: light-dark(var(--#{$prefix}gray-800), var(--#{$prefix}black)) !default;
|
||||
$backdrops: (
|
||||
dark: color-mix(in srgb, var(--#{$prefix}color-dark), transparent var(--#{$prefix}backdrop-opacity)),
|
||||
light: color-mix(in srgb, var(--#{$prefix}color-light), transparent var(--#{$prefix}backdrop-opacity)),
|
||||
) !default;
|
||||
|
||||
// Borders
|
||||
$border-width: 1px !default;
|
||||
$border-width-wide: 2px !default;
|
||||
|
||||
@@ -300,6 +307,15 @@ $border-radius: 6px !default;
|
||||
$border-radius-lg: 8px !default;
|
||||
$border-radius-pill: 100rem !default;
|
||||
|
||||
$border-radiuses: (
|
||||
0: 0,
|
||||
sm: $border-radius-sm,
|
||||
md: $border-radius,
|
||||
lg: $border-radius-lg,
|
||||
pill: $border-radius-pill,
|
||||
null: var(--#{$prefix}border-radius-md),
|
||||
) !default;
|
||||
|
||||
$border-values: (
|
||||
null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) $border-color-translucent,
|
||||
wide: $border-width-wide var(--#{$prefix}border-style) $border-color-translucent,
|
||||
@@ -310,10 +326,10 @@ $border-values: (
|
||||
$icon-color: var(--#{$prefix}gray-400) !default;
|
||||
|
||||
// Code
|
||||
$code-color: var(--#{$prefix}gray-600) !default;
|
||||
$code-color: light-dark(var(--#{$prefix}gray-600), var(--#{$prefix}gray-400)) !default;
|
||||
$code-bg: light-dark(var(--#{$prefix}gray-100), var(--#{$prefix}gray-900)) !default;
|
||||
$code-font-size: $font-size-reative-sm !default;
|
||||
$code-line-height: 1.25rem !default;
|
||||
$code-bg: var(--#{$prefix}bg-surface-secondary) !default;
|
||||
|
||||
$pre-padding: 1rem !default;
|
||||
$pre-bg: var(--#{$prefix}bg-surface-dark) !default;
|
||||
@@ -330,57 +346,65 @@ $kbd-border-radius: var(--#{$prefix}border-radius) !default;
|
||||
|
||||
// Avatars
|
||||
$avatar-size: 2.5rem !default;
|
||||
$avatar-status-size: .75rem !default;
|
||||
$avatar-status-size: 0.75rem !default;
|
||||
$avatar-font-size: 1rem !default;
|
||||
$avatar-icon-size: 1.5rem !default;
|
||||
$avatar-brand-size: 1.25rem !default;
|
||||
$avatar-bg: var(--#{$prefix}bg-surface-secondary) !default;
|
||||
$avatar-sizes: (
|
||||
"xxs": (
|
||||
size: 1rem,
|
||||
font-size: .5rem,
|
||||
icon-size: .75rem,
|
||||
status-size: .25rem
|
||||
font-size: 0.5rem,
|
||||
icon-size: 0.5rem,
|
||||
status-size: 0.25rem,
|
||||
brand-size: 0.5rem,
|
||||
),
|
||||
"xs": (
|
||||
size: 1.25rem,
|
||||
font-size: $h6-font-size,
|
||||
icon-size: .75rem,
|
||||
status-size: .375rem
|
||||
icon-size: 0.75rem,
|
||||
status-size: 0.375rem,
|
||||
brand-size: 0.75rem,
|
||||
),
|
||||
"sm": (
|
||||
size: 2rem,
|
||||
font-size: $h5-font-size,
|
||||
icon-size: 1.5rem,
|
||||
status-size: .5rem
|
||||
status-size: 0.5rem,
|
||||
brand-size: 1rem,
|
||||
),
|
||||
"md": (
|
||||
size: 2.5rem,
|
||||
font-size: $h4-font-size,
|
||||
icon-size: 1.5rem,
|
||||
status-size: .75rem
|
||||
status-size: 0.75rem,
|
||||
brand-size: 1.25rem,
|
||||
),
|
||||
"lg": (
|
||||
size: 3rem,
|
||||
font-size: $h2-font-size,
|
||||
icon-size: 2rem,
|
||||
status-size: .75rem
|
||||
status-size: 0.75rem,
|
||||
brand-size: 1.25rem,
|
||||
),
|
||||
"xl": (
|
||||
size: 5rem,
|
||||
font-size: 2rem,
|
||||
icon-size: 3rem,
|
||||
status-size: 1rem
|
||||
status-size: 1rem,
|
||||
brand-size: 1.25rem,
|
||||
),
|
||||
"2xl": (
|
||||
size: 7rem,
|
||||
font-size: 3rem,
|
||||
icon-size: 5rem,
|
||||
status-size: 1rem
|
||||
status-size: 1rem,
|
||||
brand-size: 2rem,
|
||||
),
|
||||
) !default;
|
||||
$avatar-border-radius: var(--#{$prefix}border-radius) !default;
|
||||
$avatar-font-size: $h4-font-size !default;
|
||||
$avatar-box-shadow: var(--#{$prefix}box-shadow-border) !default;
|
||||
$avatar-box-shadow: var(--#{$prefix}shadow-border) !default;
|
||||
$avatar-list-spacing: -0.5;
|
||||
|
||||
$link-decoration: none !default;
|
||||
@@ -408,7 +432,7 @@ $grid-gutter-width: 1rem !default;
|
||||
|
||||
$container-variations: (
|
||||
slim: 16rem,
|
||||
tight: 30rem,
|
||||
tight: 32rem,
|
||||
narrow: 61.875rem,
|
||||
) !default;
|
||||
|
||||
@@ -458,7 +482,7 @@ $size-spacers: (
|
||||
full: 100%,
|
||||
) !default;
|
||||
|
||||
$size-values: map-merge(
|
||||
$size-values: map.merge(
|
||||
$spacers,
|
||||
(
|
||||
25: 25%,
|
||||
@@ -498,13 +522,13 @@ $box-shadow-card-hover: rgba(var(--#{$prefix}body-color-rgb), 0.16) 0 2px 16px 0
|
||||
$box-shadow-dropdown: 0 16px 24px 2px rgba(0, 0, 0, 0.07), 0 6px 30px 5px rgba(0, 0, 0, 0.06), 0 8px 10px -5px rgba(0, 0, 0, 0.1) !default;
|
||||
|
||||
$box-shadows: (
|
||||
box-shadow: $box-shadow,
|
||||
box-shadow-border: $box-shadow-border,
|
||||
box-shadow-transparent: $box-shadow-transparent,
|
||||
box-shadow-input: $box-shadow-input,
|
||||
box-shadow-card: $box-shadow-card,
|
||||
box-shadow-card-hover: $box-shadow-card-hover,
|
||||
box-shadow-dropdown: $box-shadow-dropdown,
|
||||
null: $box-shadow,
|
||||
border: $box-shadow-border,
|
||||
transparent: $box-shadow-transparent,
|
||||
input: $box-shadow-input,
|
||||
card: $box-shadow-card,
|
||||
card-hover: $box-shadow-card-hover,
|
||||
dropdown: $box-shadow-dropdown,
|
||||
) !default;
|
||||
|
||||
$box-shadow-inset: 0 0 transparent !default;
|
||||
@@ -567,50 +591,80 @@ $badge-color: var(--#{$prefix}secondary) !default;
|
||||
$badge-bg-color: var(--#{$prefix}bg-surface-secondary) !default;
|
||||
|
||||
// Buttons
|
||||
$input-btn-line-height: $line-height-base !default;
|
||||
$input-btn-font-size: $font-size-base !default;
|
||||
$input-btn-font-family: var(--#{$prefix}font-sans-serif) !default;
|
||||
$input-btn-padding-y: 0.5rem - 0.0625rem !default;
|
||||
$input-btn-icon-size: $icon-size !default;
|
||||
$input-btn-border-width: var(--#{$prefix}border-width) !default;
|
||||
$input-btn-font-family: var(--#{$prefix}body-font-family) !default;
|
||||
$input-btn-focus-width: 0.25rem !default;
|
||||
|
||||
$input-btn-padding-y-sm: 0.3125rem !default;
|
||||
$input-btn-padding-x-sm: 0.5rem !default;
|
||||
$input-btn-font-size-sm: $h5-font-size !default;
|
||||
$input-btn-padding-x-sm: 0.25rem !default;
|
||||
$input-btn-padding-y-sm: 0.125rem - 0.0625rem !default;
|
||||
$input-btn-line-height-sm: 1rem !default;
|
||||
$input-btn-line-height-sm: divide(1rem, $input-btn-font-size-sm) !default;
|
||||
$input-btn-icon-size-sm: 1rem !default;
|
||||
|
||||
$input-btn-font-size-lg: $h2-font-size !default;
|
||||
$input-btn-padding-x-lg: 1.5rem !default;
|
||||
$input-btn-padding-y-lg: 0.75rem - 0.0625rem !default;
|
||||
$input-btn-line-height-lg: 2rem !default;
|
||||
$input-btn-icon-size-lg: 2rem !default;
|
||||
$input-btn-padding-y: 0.5625rem !default;
|
||||
$input-btn-padding-x: 1rem !default;
|
||||
$input-btn-line-height: 1.25rem !default;
|
||||
$input-btn-font-size: $font-size-base !default;
|
||||
$input-btn-icon-size: $icon-size !default;
|
||||
|
||||
$input-btn-padding-y-lg: 0.6875rem !default;
|
||||
$input-btn-padding-x-lg: 1.5rem !default;
|
||||
$input-btn-line-height-lg: 1.5rem !default;
|
||||
$input-btn-font-size-lg: $h3-font-size !default;
|
||||
$input-btn-icon-size-lg: 1.5rem !default;
|
||||
|
||||
$input-btn-padding-y-xl: 0.6875rem !default;
|
||||
$input-btn-padding-x-xl: 2rem !default;
|
||||
$input-btn-font-size-xl: $h1-font-size !default;
|
||||
$input-btn-line-height-xl: divide(2rem, $input-btn-font-size-lg) !default;
|
||||
$input-btn-icon-size-xl: 2rem !default;
|
||||
|
||||
$input-btn-focus-width: 0.25rem !default;
|
||||
|
||||
// Inputs
|
||||
$input-height: null !default;
|
||||
$input-height-sm: null !default;
|
||||
$input-height-lg: null !default;
|
||||
$input-border-radius: var(--#{$prefix}border-radius) !default;
|
||||
$input-padding-y: $input-btn-padding-y !default;
|
||||
$input-padding-x: $input-btn-padding-x !default;
|
||||
$input-color: var(--#{$prefix}body-color) !default;
|
||||
$input-focus-color: var(--#{$prefix}body-color) !default;
|
||||
$input-box-shadow: var(--#{$prefix}box-shadow-input) !default;
|
||||
$input-box-shadow: var(--#{$prefix}shadow-input) !default;
|
||||
|
||||
$input-border-width: $input-btn-border-width !default;
|
||||
$input-line-height: $input-btn-line-height !default;
|
||||
$input-height-border: calc(#{$input-border-width} * 2) !default;
|
||||
|
||||
$input-padding-y-sm: $input-btn-padding-y-sm !default;
|
||||
$input-padding-x-sm: $input-btn-padding-x-sm !default;
|
||||
$input-font-size-sm: $input-btn-font-size-sm !default;
|
||||
|
||||
$input-padding-y-lg: $input-btn-padding-y-lg !default;
|
||||
$input-padding-x-lg: $input-btn-padding-x-lg !default;
|
||||
$input-font-size-lg: $input-btn-font-size-lg !default;
|
||||
|
||||
$input-height-inner: add($input-line-height, calc($input-padding-y * 2)) !default;
|
||||
$input-height-inner-half: add($input-line-height, $input-padding-y) !default;
|
||||
$input-height-inner-quarter: add($input-line-height, calc($input-padding-y * 0.5)) !default;
|
||||
|
||||
$input-height: add($input-line-height, add(calc($input-padding-y * 2), $input-height-border, false)) !default;
|
||||
$input-height-sm: add($input-line-height, add(calc($input-padding-y-sm * 2), $input-height-border, false)) !default;
|
||||
$input-height-lg: add($input-line-height, add(calc($input-padding-y-lg * 2), $input-height-border, false)) !default;
|
||||
|
||||
// Buttons
|
||||
$btn-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;
|
||||
$btn-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;
|
||||
|
||||
$btn-disabled-opacity: .4 !default;
|
||||
$btn-padding-x: 1rem !default;
|
||||
$btn-disabled-opacity: 0.4 !default;
|
||||
$btn-font-weight: var(--#{$prefix}font-weight-medium) !default;
|
||||
$btn-border-color: var(--#{$prefix}border-color) !default;
|
||||
$btn-border-radius: var(--#{$prefix}border-radius) !default;
|
||||
$btn-box-shadow: var(--#{$prefix}box-shadow-input) !default;
|
||||
$btn-box-shadow: var(--#{$prefix}shadow-input) !default;
|
||||
|
||||
// Cards
|
||||
$card-title-spacer-y: 1.25rem !default;
|
||||
$card-box-shadow: var(--#{$prefix}box-shadow-card) !default;
|
||||
$card-hover-box-shadow: var(--#{$prefix}box-shadow-card-hover) !default;
|
||||
$card-box-shadow: var(--#{$prefix}shadow-card) !default;
|
||||
$card-hover-box-shadow: var(--#{$prefix}shadow-card-hover) !default;
|
||||
|
||||
$card-bg: var(--#{$prefix}bg-surface) !default;
|
||||
$card-bg-hover: $white !default;
|
||||
@@ -677,16 +731,16 @@ $dropdown-max-width: 25rem !default;
|
||||
$dropdown-scrollable-height: 13rem !default;
|
||||
$dropdown-link-active-color: var(--#{$prefix}primary) !default;
|
||||
$dropdown-link-active-bg: var(--#{$prefix}active-bg) !default;
|
||||
$dropdown-box-shadow: var(--#{$prefix}box-shadow-dropdown) !default;
|
||||
$dropdown-box-shadow: var(--#{$prefix}shadow-dropdown) !default;
|
||||
|
||||
$dropdown-divider-bg: $dropdown-border-color !default;
|
||||
$dropdown-divider-margin-y: var(--#{$prefix}spacer-2) !default;
|
||||
|
||||
// Tooltip
|
||||
$tooltip-bg: var(--#{$prefix}bg-surface-dark) !default;
|
||||
$tooltip-color: var(--#{$prefix}light) !default;
|
||||
$tooltip-bg: var(--#{$prefix}bg-surface-inverted) !default;
|
||||
$tooltip-color: var(--#{$prefix}text-inverted) !default;
|
||||
$tooltip-padding-y: var(--#{$prefix}spacer-1) !default;
|
||||
$tooltip-padding-x: var(--#{$prefix}spacer-2) !default;
|
||||
$tooltip-padding-x: var(--#{$prefix}spacer-3) !default;
|
||||
|
||||
// Loader
|
||||
$loader-size: 2.5rem !default;
|
||||
@@ -700,9 +754,9 @@ $list-group-item-padding-y: $card-cap-padding-y !default;
|
||||
$list-group-item-padding-x: $card-cap-padding-x !default;
|
||||
|
||||
// Modals
|
||||
$modal-backdrop-opacity: 0.24 !default;
|
||||
$modal-backdrop-bg: $dark !default;
|
||||
$modal-backdrop-blur: 4px !default;
|
||||
$modal-backdrop-opacity: $backdrop-opacity !default;
|
||||
$modal-backdrop-bg: $backdrop-bg !default;
|
||||
$modal-backdrop-blur: $backdrop-blur !default;
|
||||
|
||||
$modal-fade-transform: translate(0, -1rem) !default;
|
||||
|
||||
@@ -760,7 +814,7 @@ $navbar-height: 3.5rem !default;
|
||||
$navbar-padding-y: 0.25rem !default;
|
||||
$navbar-light-color: var(--#{$prefix}secondary) !default;
|
||||
|
||||
$navbar-hover-color: $white !default;
|
||||
$navbar-hover-color: var(--#{$prefix}body-color) !default;
|
||||
|
||||
$navbar-border-width: var(--#{$prefix}border-width) !default;
|
||||
$navbar-border-color: var(--#{$prefix}border-color) !default;
|
||||
@@ -792,7 +846,7 @@ $navbar-toggler-focus-width: 0 !default;
|
||||
$navbar-overlap-height: 9rem !default;
|
||||
|
||||
$navbar-nav-link-padding-x: $nav-link-padding-x !default;
|
||||
$navbar-nav-link-hover-bg: rgba(0, 0, 0, .04) !default;
|
||||
$navbar-nav-link-hover-bg: rgba(0, 0, 0, 0.04) !default;
|
||||
|
||||
$navbar-active-border-color: var(--#{$prefix}primary) !default;
|
||||
|
||||
@@ -809,9 +863,9 @@ $popover-bg: var(--#{$prefix}bg-surface) !default;
|
||||
$popover-header-bg: transparent !default;
|
||||
$popover-border-color: var(--#{$prefix}border-color) !default;
|
||||
$popover-body-color: inherit !default;
|
||||
$popover-body-padding-x: .5rem !default;
|
||||
$popover-body-padding-y: .5rem !default;
|
||||
$popover-box-shadow: var(--#{$prefix}box-shadow-lg) !default;
|
||||
$popover-body-padding-x: 0.5rem !default;
|
||||
$popover-body-padding-y: 0.5rem !default;
|
||||
$popover-box-shadow: var(--#{$prefix}shadow-lg) !default;
|
||||
|
||||
// Footer
|
||||
$footer-padding-y: 2rem !default;
|
||||
@@ -820,13 +874,17 @@ $footer-border-color: var(--#{$prefix}border-color) !default;
|
||||
$footer-color: var(--#{$prefix}gray-500) !default;
|
||||
|
||||
// Pagination
|
||||
$pagination-border-width: 0 !default;
|
||||
$pagination-padding-y: 0.25rem !default;
|
||||
$pagination-border-width: 1px !default;
|
||||
$pagination-border-color: transparent !default;
|
||||
$pagination-padding-y: calc(0.25rem + 1px) !default;
|
||||
$pagination-padding-x: 0.25rem !default;
|
||||
$pagination-color: var(--#{$prefix}gray-500) !default;
|
||||
$pagination-color: var(--#{$prefix}body-color) !default;
|
||||
$pagination-bg: transparent !default;
|
||||
$pagination-hover-bg: var(--#{$prefix}active-bg) !default;
|
||||
$pagination-hover-border-color: var(--#{$prefix}pagination-border-color) !default;
|
||||
$pagination-disabled-bg: transparent !default;
|
||||
$pagination-disabled-color: var(--#{$prefix}disabled-color) !default;
|
||||
$pagination-disabled-border-color: var(--#{$prefix}pagination-border-color) !default;
|
||||
|
||||
$pagination-active-bg: var(--#{$prefix}primary) !default;
|
||||
$pagination-active-border-color: var(--#{$prefix}primary) !default;
|
||||
@@ -873,7 +931,7 @@ $table-sort-desc-bg-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org
|
||||
// Toasts
|
||||
$toast-border-color: var(--#{$prefix}border-color) !default;
|
||||
$toast-header-color: var(--#{$prefix}gray-500) !default;
|
||||
$toast-background-color: var(--#{$prefix}bg-surface) !default;
|
||||
$toast-background-color: var(--#{$prefix}bg-surface) !default;
|
||||
|
||||
// Tracking
|
||||
$tracking-height: 1.5rem !default;
|
||||
@@ -899,7 +957,7 @@ $input-bg: var(--#{$prefix}bg-forms) !default;
|
||||
$input-disabled-bg: $disabled-bg !default;
|
||||
$input-border-color: var(--#{$prefix}border-color) !default;
|
||||
$input-border-color-translucent: var(--#{$prefix}border-color-translucent) !default;
|
||||
$input-placeholder-color: $text-secondary-light !default;
|
||||
$input-placeholder-color: var(--#{$prefix}tertiary) !default;
|
||||
|
||||
$input-group-addon-bg: var(--#{$prefix}bg-surface-secondary) !default;
|
||||
$input-group-addon-color: var(--#{$prefix}gray-500) !default;
|
||||
@@ -930,7 +988,7 @@ $form-check-radio-checked-bg-image: url("data:image/svg+xml,<svg xmlns='http://w
|
||||
$form-check-label-disabled-opacity: $text-secondary-opacity;
|
||||
|
||||
$form-select-indicator-color: $text-secondary-light !default;
|
||||
$form-select-box-shadow: var(--#{$prefix}box-shadow-input) !default;
|
||||
$form-select-box-shadow: var(--#{$prefix}shadow-input) !default;
|
||||
|
||||
$form-switch-width: 2rem !default;
|
||||
$form-switch-height: 1.25rem !default;
|
||||
@@ -959,7 +1017,7 @@ $form-feedback-icon-invalid: str-replace(
|
||||
$form-label-font-size: $h4-font-size !default;
|
||||
$form-label-font-weight: var(--#{$prefix}font-weight-medium) !default;
|
||||
|
||||
$form-secondary-color: var(--#{$prefix}gray-500) !default;
|
||||
$form-secondary-color: var(--#{$prefix}secondary) !default;
|
||||
|
||||
// Legend
|
||||
$legend-bg: var(--#{$prefix}border-color) !default;
|
||||
@@ -967,7 +1025,7 @@ $legend-size: 0.75em !default;
|
||||
$legend-border-radius: var(--#{$prefix}border-radius-sm) !default;
|
||||
|
||||
// Flags
|
||||
$flag-box-shadow: var(--#{$prefix}box-shadow-border) !default;
|
||||
$flag-box-shadow: var(--#{$prefix}shadow-border) !default;
|
||||
$flag-border-radius: var(--#{$prefix}border-radius) !default;
|
||||
$flag-sizes: $avatar-sizes !default;
|
||||
|
||||
@@ -977,6 +1035,7 @@ $payment-sizes: $avatar-sizes !default;
|
||||
// Offcanvas
|
||||
$offcanvas-bg-color: var(--#{$prefix}bg-surface) !default;
|
||||
$offcanvas-border-color: var(--#{$prefix}border-color) !default;
|
||||
$offcanvas-backdrop-bg: $backdrop-bg !default;
|
||||
|
||||
// Placeholder
|
||||
$placeholder-opacity-min: 0.1 !default;
|
||||
|
||||
145
core/scss/helpers/_index.scss
Normal file
145
core/scss/helpers/_index.scss
Normal file
@@ -0,0 +1,145 @@
|
||||
@use "sass:map";
|
||||
|
||||
//
|
||||
// Clearfix
|
||||
//
|
||||
.clearfix {
|
||||
@include clearfix();
|
||||
}
|
||||
|
||||
//
|
||||
// Text truncation
|
||||
//
|
||||
.text-truncate {
|
||||
@include text-truncate();
|
||||
}
|
||||
|
||||
//
|
||||
// Vertical rule
|
||||
//
|
||||
.vr {
|
||||
display: inline-block;
|
||||
align-self: stretch;
|
||||
width: $vr-border-width;
|
||||
min-height: 1em;
|
||||
background-color: currentcolor;
|
||||
opacity: $hr-opacity;
|
||||
}
|
||||
|
||||
//
|
||||
// Stretched link
|
||||
//
|
||||
.stretched-link {
|
||||
&::#{$stretched-link-pseudo-element} {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: $stretched-link-z-index;
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Visually hidden
|
||||
//
|
||||
.visually-hidden,
|
||||
.visually-hidden-focusable:not(:focus):not(:focus-within) {
|
||||
@include visually-hidden();
|
||||
}
|
||||
|
||||
//
|
||||
// Stacks
|
||||
//
|
||||
.hstack {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
align-self: stretch;
|
||||
}
|
||||
|
||||
.vstack {
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
align-self: stretch;
|
||||
}
|
||||
|
||||
//
|
||||
// Position
|
||||
//
|
||||
// Shorthand
|
||||
|
||||
.fixed-top {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: $zindex-fixed;
|
||||
}
|
||||
|
||||
.fixed-bottom {
|
||||
position: fixed;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: $zindex-fixed;
|
||||
}
|
||||
|
||||
// Responsive sticky top and bottom
|
||||
@each $breakpoint in map.keys($grid-breakpoints) {
|
||||
@include media-breakpoint-up($breakpoint) {
|
||||
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
||||
|
||||
.sticky#{$infix}-top {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: $zindex-sticky;
|
||||
}
|
||||
|
||||
.sticky#{$infix}-bottom {
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
z-index: $zindex-sticky;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Aspect ratio
|
||||
//
|
||||
.ratio {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
|
||||
&::before {
|
||||
display: block;
|
||||
padding-top: var(--#{$prefix}aspect-ratio);
|
||||
content: "";
|
||||
}
|
||||
|
||||
> * {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@each $key, $ratio in $aspect-ratios {
|
||||
.ratio-#{$key} {
|
||||
--#{$prefix}aspect-ratio: #{$ratio};
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Focus ring
|
||||
//
|
||||
.focus-ring:focus {
|
||||
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
|
||||
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,39 +1,50 @@
|
||||
@keyframes pulse {
|
||||
from {
|
||||
opacity: 1;
|
||||
transform: scale3d(.8, .8, .8)
|
||||
0% {
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale3d(1, 1, 1);
|
||||
opacity: 1
|
||||
14% {
|
||||
transform: scale(1.25);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: scale3d(.8, .8, .8)
|
||||
28% {
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
42% {
|
||||
transform: scale(1.25);
|
||||
}
|
||||
|
||||
70% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes tada {
|
||||
0% {
|
||||
transform: scale3d(1, 1, 1)
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
|
||||
10%, 5% {
|
||||
transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -5deg)
|
||||
10%,
|
||||
5% {
|
||||
transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -5deg);
|
||||
}
|
||||
|
||||
15%, 25%, 35%, 45% {
|
||||
transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 5deg)
|
||||
15%,
|
||||
25%,
|
||||
35%,
|
||||
45% {
|
||||
transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 5deg);
|
||||
}
|
||||
|
||||
20%, 30%, 40% {
|
||||
transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -5deg)
|
||||
20%,
|
||||
30%,
|
||||
40% {
|
||||
transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -5deg);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale3d(1, 1, 1)
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,3 +72,27 @@
|
||||
}
|
||||
}
|
||||
|
||||
@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,3 +1,5 @@
|
||||
@use "sass:map";
|
||||
|
||||
// stylelint-disable property-no-vendor-prefix
|
||||
body {
|
||||
letter-spacing: $body-letter-spacing;
|
||||
@@ -7,6 +9,7 @@ body {
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
@@ -34,7 +37,7 @@ body {
|
||||
//
|
||||
.layout-boxed {
|
||||
--#{$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) {
|
||||
background: $dark linear-gradient(to right, rgba(#fff, .1), transparent) fixed;
|
||||
|
||||
@@ -2,53 +2,55 @@
|
||||
|
||||
// stylelint-disable declaration-no-important
|
||||
|
||||
body {
|
||||
&:not(.theme-dark):not([data-bs-theme=dark]) {
|
||||
.hide-theme-light {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.img-dark {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
&.theme-dark,
|
||||
&[data-bs-theme=dark] {
|
||||
.hide-theme-dark {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.img-light {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@if $enable-dark-mode {
|
||||
@include color-mode(dark, true) {
|
||||
--#{$prefix}body-color: #{$body-color-dark};
|
||||
--#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};
|
||||
--#{$prefix}muted: #{$text-secondary-dark};
|
||||
:root {
|
||||
&:not(.theme-dark):not([data-bs-theme="dark"]) {
|
||||
.hide-theme-light {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
--#{$prefix}body-bg: #{$darken-dark};
|
||||
--#{$prefix}body-bg-rgb: #{to-rgb($darken-dark)};
|
||||
.img-dark {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
&.theme-dark,
|
||||
&[data-bs-theme="dark"] {
|
||||
.hide-theme-dark {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.img-light {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@include color-mode(dark, true) {
|
||||
color-scheme: dark;
|
||||
--#{$prefix}body-color: var(--#{$prefix}gray-200);
|
||||
--#{$prefix}secondary: var(--#{$prefix}gray-400);
|
||||
|
||||
--#{$prefix}body-bg: var(--#{$prefix}gray-900);
|
||||
--#{$prefix}emphasis-color: #{$body-emphasis-color-dark};
|
||||
--#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};
|
||||
|
||||
--#{$prefix}bg-forms: #{$darken-dark};
|
||||
--#{$prefix}bg-surface: #{$dark};
|
||||
--#{$prefix}bg-surface-dark: #{$darken-dark};
|
||||
--#{$prefix}bg-surface-secondary: #{$lighten-dark};
|
||||
--#{$prefix}bg-surface-tertiary: #{$darken-dark};
|
||||
--#{$prefix}bg-forms: var(--#{$prefix}gray-900);
|
||||
--#{$prefix}bg-surface: var(--#{$prefix}gray-800);
|
||||
--#{$prefix}bg-surface-inverted: var(--#{$prefix}gray-100);
|
||||
--#{$prefix}bg-surface-secondary: var(--#{$prefix}gray-900);
|
||||
--#{$prefix}bg-surface-tertiary: var(--#{$prefix}gray-800);
|
||||
|
||||
--#{$prefix}link-color: #{color.adjust($primary, $lightness: 8%)};
|
||||
--#{$prefix}link-hover-color: #{$primary};
|
||||
--#{$prefix}text-inverted: var(--#{$prefix}gray-800);
|
||||
|
||||
--#{$prefix}link-color: var(--#{$prefix}primary);
|
||||
--#{$prefix}link-hover-color: color-mix(in srgb, var(--#{$prefix}primary), black 20%);
|
||||
|
||||
--#{$prefix}active-bg: #{$lighten-dark};
|
||||
--#{$prefix}disabled-color: var(--#{$prefix}gray-700);
|
||||
--#{$prefix}disabled-color: #{color-transparent(var(--#{$prefix}body-color), .4)};
|
||||
|
||||
--#{$prefix}border-color: var(--#{$prefix}dark-mode-border-color);
|
||||
--#{$prefix}border-color: var(--#{$prefix}gray-700);
|
||||
--#{$prefix}border-color-translucent: var(
|
||||
--#{$prefix}dark-mode-border-color-translucent
|
||||
);
|
||||
@@ -59,16 +61,6 @@ body {
|
||||
|
||||
--#{$prefix}btn-color: #{$darken-dark};
|
||||
|
||||
--#{$prefix}code-color: var(--#{$prefix}body-color);
|
||||
--#{$prefix}code-bg: #{$border-dark-color-dark};
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
--#{$prefix}#{$color}-lt: #{theme-color-lighter($value, $dark)};
|
||||
--#{$prefix}#{$color}-lt-rgb: #{to-rgb(
|
||||
theme-color-lighter($value, $dark)
|
||||
)};
|
||||
}
|
||||
|
||||
.navbar-brand-autodark {
|
||||
.navbar-brand-image {
|
||||
@include autodark-image;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
@use "sass:map";
|
||||
|
||||
@mixin navbar-vertical-nav {
|
||||
.navbar-collapse {
|
||||
flex-direction: column;
|
||||
@@ -83,6 +85,7 @@ Navbar
|
||||
--#{$prefix}navbar-active-border-color: #{$navbar-active-border-color};
|
||||
--#{$prefix}navbar-active-bg: #{$navbar-light-active-bg};
|
||||
--#{$prefix}navbar-border-color: #{$navbar-border-color};
|
||||
--#{$prefix}navbar-hover-color: #{$navbar-hover-color};
|
||||
align-items: stretch;
|
||||
min-height: $navbar-height;
|
||||
box-shadow: inset 0 calc(-1 * var(--#{$prefix}navbar-border-width)) 0 0 var(--#{$prefix}navbar-border-color);
|
||||
@@ -123,7 +126,7 @@ Navbar
|
||||
}
|
||||
|
||||
.navbar-expand {
|
||||
@each $breakpoint in map-keys($grid-breakpoints) {
|
||||
@each $breakpoint in map.keys($grid-breakpoints) {
|
||||
$next: breakpoint-next($breakpoint, $grid-breakpoints);
|
||||
$infix: breakpoint-infix($next, $grid-breakpoints);
|
||||
|
||||
@@ -159,7 +162,8 @@ Navbar
|
||||
&.navbar-vertical {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -171,7 +175,8 @@ Navbar
|
||||
}
|
||||
}
|
||||
|
||||
&.navbar-vertical.navbar-right {
|
||||
&.navbar-vertical.navbar-right,
|
||||
&.navbar-vertical.navbar-end {
|
||||
~ .navbar,
|
||||
~ .page-wrapper {
|
||||
margin-left: 0;
|
||||
@@ -218,14 +223,14 @@ Navbar toggler
|
||||
width: 1.25em;
|
||||
background: currentColor;
|
||||
border-radius: 10px;
|
||||
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
|
||||
);
|
||||
position: relative;
|
||||
|
||||
|
||||
&:before,
|
||||
&:after {
|
||||
content: "";
|
||||
@@ -275,7 +280,7 @@ Navbar transparent
|
||||
Navbar nav
|
||||
*/
|
||||
.navbar-nav {
|
||||
--#{$prefix}nav-link-hover-bg: #{$navbar-nav-link-hover-bg};
|
||||
--#{$prefix}nav-link-hover-bg: #{color-transparent(var(--#{$prefix}nav-link-color), 0.04)};
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
align-items: stretch;
|
||||
@@ -304,7 +309,7 @@ Navbar vertical
|
||||
@if $enable-navbar-vertical {
|
||||
.navbar-vertical {
|
||||
&.navbar-expand {
|
||||
@each $breakpoint in map-keys($grid-breakpoints) {
|
||||
@each $breakpoint in map.keys($grid-breakpoints) {
|
||||
$next: breakpoint-next($breakpoint, $grid-breakpoints);
|
||||
$infix: breakpoint-infix($next, $grid-breakpoints);
|
||||
|
||||
@@ -317,11 +322,12 @@ Navbar vertical
|
||||
bottom: 0;
|
||||
z-index: $zindex-fixed;
|
||||
align-items: flex-start;
|
||||
@include transition(transform $transition-time);
|
||||
overflow-y: scroll;
|
||||
padding: 0;
|
||||
@include transition(transform $transition-time);
|
||||
|
||||
&.navbar-right {
|
||||
&.navbar-right,
|
||||
&.navbar-end {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
@@ -363,7 +369,8 @@ Navbar vertical
|
||||
}
|
||||
}
|
||||
|
||||
&.navbar-right ~ .page {
|
||||
&.navbar-right ~ .page,
|
||||
&.navbar-end ~ .page {
|
||||
padding-left: 0;
|
||||
padding-right: $sidebar-width;
|
||||
}
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
min-height: 2.25rem;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
max-width: 100%;
|
||||
|
||||
.page-wrapper & {
|
||||
margin: var(--#{$prefix}page-padding-y) 0 0;
|
||||
|
||||
@@ -2,31 +2,38 @@
|
||||
:host {
|
||||
font-size: 16px;
|
||||
height: 100%;
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
margin-left: calc(100vw - 100%);
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
:root,
|
||||
:host,
|
||||
[data-bs-theme="light"] {
|
||||
@each $name, $color in map-merge($theme-colors, $gray-colors) {
|
||||
--#{$prefix}#{$name}: #{$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}-darken: #{theme-color-darker($color)};
|
||||
--#{$prefix}#{$name}-lt: #{theme-color-lighter($color)};
|
||||
--#{$prefix}#{$name}-lt-rgb: #{to-rgb(theme-color-lighter($color))};
|
||||
}
|
||||
color-scheme: light;
|
||||
--#{$prefix}spacer: var(--#{$prefix}spacer-2);
|
||||
|
||||
@each $name, $value in $spacers {
|
||||
--#{$prefix}spacer-#{$name}: #{$value};
|
||||
}
|
||||
--#{$prefix}spacer: #{$spacer};
|
||||
|
||||
--#{$prefix}bg-surface: #{$bg-surface};
|
||||
--#{$prefix}bg-surface-secondary: #{$bg-surface-secondary};
|
||||
--#{$prefix}bg-surface-tertiary: #{$bg-surface-tertiary};
|
||||
--#{$prefix}bg-surface-dark: #{$bg-surface-dark};
|
||||
--#{$prefix}bg-surface: var(--#{$prefix}bg-surface-primary);
|
||||
--#{$prefix}bg-surface-primary: var(--#{$prefix}white);
|
||||
--#{$prefix}bg-surface-secondary: var(--#{$prefix}gray-50);
|
||||
--#{$prefix}bg-surface-tertiary: var(--#{$prefix}gray-50);
|
||||
--#{$prefix}bg-surface-dark: var(--#{$prefix}gray-900);
|
||||
--#{$prefix}bg-surface-inverted: var(--#{$prefix}gray-900);
|
||||
--#{$prefix}bg-forms: var(--#{$prefix}bg-surface);
|
||||
|
||||
--#{$prefix}text-inverted: var(--#{$prefix}gray-100);
|
||||
|
||||
--#{$prefix}body-color: var(--#{$prefix}gray-700);
|
||||
--#{$prefix}body-bg: var(--#{$prefix}bg-surface-secondary);
|
||||
|
||||
--#{$prefix}link-color: var(--#{$prefix}primary);
|
||||
--#{$prefix}link-hover-color: color-mix(in srgb, var(--#{$prefix}primary), #000 20%);
|
||||
|
||||
--#{$prefix}secondary: var(--#{$prefix}gray-500);
|
||||
--#{$prefix}tertiary: var(--#{$prefix}gray-400);
|
||||
|
||||
--#{$prefix}border-color: #{$border-color};
|
||||
--#{$prefix}border-color-translucent: #{$border-color-translucent};
|
||||
--#{$prefix}border-dark-color: #{$border-dark-color};
|
||||
@@ -50,23 +57,8 @@
|
||||
|
||||
--#{$prefix}page-padding: #{$page-padding};
|
||||
--#{$prefix}page-padding-y: #{$page-padding-y};
|
||||
|
||||
@include media-breakpoint-down($cards-grid-breakpoint) {
|
||||
--#{$prefix}page-padding: #{$page-padding-sm};
|
||||
}
|
||||
|
||||
@each $name, $value in $font-weights {
|
||||
--#{$prefix}font-weight-#{$name}: #{$value};
|
||||
}
|
||||
|
||||
@each $name, $value in $font-sizes {
|
||||
--#{$prefix}font-size-h#{$name}: #{$value};
|
||||
}
|
||||
|
||||
@each $name, $value in $line-heights {
|
||||
--#{$prefix}line-height-#{$name}: #{$value};
|
||||
}
|
||||
|
||||
@each $name, $value in $box-shadows {
|
||||
--#{$prefix}#{$name}: #{$value};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
}
|
||||
|
||||
.body-gradient {
|
||||
background: var(--tblr-bg-surface) linear-gradient(to bottom, var(--tblr-bg-surface-secondary) 12%, var(--tblr-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;
|
||||
}
|
||||
@@ -39,7 +39,7 @@ $pricing-card-width: 22rem;
|
||||
|
||||
&.featured {
|
||||
z-index: 1;
|
||||
border: 2px solid $primary;
|
||||
border: 2px solid var(--#{$prefix}primary);
|
||||
order: -1;
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
@use "sass:map";
|
||||
|
||||
.shape {
|
||||
--#{$prefix}shape-size: #{$avatar-size};
|
||||
--#{$prefix}shape-icon-size: #{$avatar-icon-size};
|
||||
@@ -18,8 +20,8 @@
|
||||
|
||||
@each $avatar-size, $size in $avatar-sizes {
|
||||
.shape-#{$avatar-size} {
|
||||
--#{$prefix}shape-size: #{map-get($size, size)};
|
||||
--#{$prefix}shape-icon-size: #{map-get($size, icon-size)};
|
||||
--#{$prefix}shape-size: #{map.get($size, size)};
|
||||
--#{$prefix}shape-icon-size: #{map.get($size, icon-size)};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
@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) {
|
||||
@return mix($color, $background, 10%);
|
||||
@return color.mix($color, $background, 10%);
|
||||
}
|
||||
|
||||
@function theme-color-darker($color) {
|
||||
@@ -10,10 +17,10 @@
|
||||
// Replace all occurrences of a substring within a string.
|
||||
//
|
||||
@function str-replace($string, $search, $replace: "") {
|
||||
$index: str-index($string, $search);
|
||||
$index: string.index($string, $search);
|
||||
|
||||
@if $index {
|
||||
@return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
|
||||
@return string.slice($string, 1, $index - 1) + $replace + str-replace(string.slice($string, $index + string.length($search)), $search, $replace);
|
||||
}
|
||||
|
||||
@return $string;
|
||||
@@ -37,23 +44,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);
|
||||
@if not $n {
|
||||
@error "breakpoint `#{$name}` not found in `#{$breakpoints}`";
|
||||
}
|
||||
@return if($n > 1, nth($breakpoint-names, $n - 1), null);
|
||||
@return if($n > 1, list.nth($breakpoint-names, $n - 1), null);
|
||||
}
|
||||
|
||||
//
|
||||
// Escape SVG strings.
|
||||
//
|
||||
@function escape-svg($string) {
|
||||
@if str-index($string, "data:image/svg+xml") {
|
||||
@if string.index($string, "data:image/svg+xml") {
|
||||
@each $char, $encoded in $escaped-characters {
|
||||
// Do not escape the url brackets
|
||||
@if str-index($string, "url(") == 1 {
|
||||
$string: url("#{str-replace(str-slice($string, 6, -3), $char, $encoded)}");
|
||||
@if string.index($string, "url(") == 1 {
|
||||
$string: url("#{str-replace(string.slice($string, 6, -3), $char, $encoded)}");
|
||||
} @else {
|
||||
$string: str-replace($string, $char, $encoded);
|
||||
}
|
||||
@@ -70,7 +77,7 @@
|
||||
* @return {String} - The percentage representation of the value.
|
||||
*/
|
||||
@function to-percentage($value) {
|
||||
@return if(unitless($value), percentage($value), $value);
|
||||
@return if(math.is-unitless($value), math.percentage($value), $value);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -93,4 +100,307 @@
|
||||
$svg: str-replace($svg, '<svg', '<svg xmlns="http://www.w3.org/2000/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: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003 .0033 .0037 .004 .0044 .0048 .0052 .0056 .006 .0065 .007 .0075 .008 .0086 .0091 .0097 .0103 .011 .0116 .0123 .013 .0137 .0144 .0152 .016 .0168 .0176 .0185 .0194 .0203 .0212 .0222 .0232 .0242 .0252 .0262 .0273 .0284 .0296 .0307 .0319 .0331 .0343 .0356 .0369 .0382 .0395 .0409 .0423 .0437 .0452 .0467 .0482 .0497 .0513 .0529 .0545 .0561 .0578 .0595 .0612 .063 .0648 .0666 .0685 .0704 .0723 .0742 .0762 .0782 .0802 .0823 .0844 .0865 .0887 .0908 .0931 .0953 .0976 .0999 .1022 .1046 .107 .1095 .1119 .1144 .117 .1195 .1221 .1248 .1274 .1301 .1329 .1356 .1384 .1413 .1441 .147 .15 .1529 .1559 .159 .162 .1651 .1683 .1714 .1746 .1779 .1812 .1845 .1878 .1912 .1946 .1981 .2016 .2051 .2086 .2122 .2159 .2195 .2232 .227 .2307 .2346 .2384 .2423 .2462 .2502 .2542 .2582 .2623 .2664 .2705 .2747 .2789 .2831 .2874 .2918 .2961 .3005 .305 .3095 .314 .3185 .3231 .3278 .3325 .3372 .3419 .3467 .3515 .3564 .3613 .3663 .3712 .3763 .3813 .3864 .3916 .3968 .402 .4072 .4125 .4179 .4233 .4287 .4342 .4397 .4452 .4508 .4564 .4621 .4678 .4735 .4793 .4851 .491 .4969 .5029 .5089 .5149 .521 .5271 .5333 .5395 .5457 .552 .5583 .5647 .5711 .5776 .5841 .5906 .5972 .6038 .6105 .6172 .624 .6308 .6376 .6445 .6514 .6584 .6654 .6724 .6795 .6867 .6939 .7011 .7084 .7157 .7231 .7305 .7379 .7454 .7529 .7605 .7682 .7758 .7835 .7913 .7991 .807 .8148 .8228 .8308 .8388 .8469 .855 .8632 .8714 .8796 .8879 .8963 .9047 .9131 .9216 .9301 .9387 .9473 .956 .9647 .9734 .9823 .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 + .05, $l2 + .05), divide($l2 + .05, $l1 + .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) < .04045, divide(divide($value, 255), 12.92), list.nth($_luminance-list, $value + 1));
|
||||
$rgb: map.merge($rgb, ($name: $value));
|
||||
}
|
||||
|
||||
@return (map.get($rgb, "r") * .2126) + (map.get($rgb, "g") * .7152) + (map.get($rgb, "b") * .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%);
|
||||
}
|
||||
|
||||
// scss-docs-start color-functions
|
||||
// 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));
|
||||
}
|
||||
// scss-docs-end color-functions
|
||||
|
||||
// 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 * .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;
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
@mixin subheader($include-color: true, $include-line-height: true) {
|
||||
font-size: $h5-font-size;
|
||||
font-weight: var(--#{$prefix}font-weight-bold);
|
||||
font-weight: var(--#{$prefix}font-weight-medium);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: .04em;
|
||||
letter-spacing: .04em;
|
||||
|
||||
@if $include-line-height {
|
||||
line-height: $h5-line-height;
|
||||
@@ -13,9 +13,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
@mixin scrollbar($color: var(--#{$prefix}body-color-rgb)) {
|
||||
@mixin scrollbar {
|
||||
#{if(&, "&", "*")} {
|
||||
scrollbar-color: rgba(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color-rgb)), .16);
|
||||
scrollbar-color: color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), .20) transparent;
|
||||
}
|
||||
|
||||
#{if(&, "&", "*")}::-webkit-scrollbar {
|
||||
@@ -27,7 +27,7 @@
|
||||
#{if(&, "&", "*")}::-webkit-scrollbar-thumb {
|
||||
border-radius: 1rem;
|
||||
border: 5px solid transparent;
|
||||
box-shadow: inset 0 0 0 1rem rgba(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color-rgb)), .16);
|
||||
box-shadow: inset 0 0 0 1rem color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), .20);
|
||||
}
|
||||
|
||||
#{if(&, "&", "*")}::-webkit-scrollbar-track {
|
||||
@@ -35,7 +35,7 @@
|
||||
}
|
||||
|
||||
#{if(&, "&", "*")}:hover::-webkit-scrollbar-thumb {
|
||||
box-shadow: inset 0 0 0 1rem rgba(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color-rgb)), .32);
|
||||
box-shadow: inset 0 0 0 1rem color-transparent(var(--#{$prefix}scrollbar-color, var(--#{$prefix}body-color)), .40);
|
||||
}
|
||||
|
||||
#{if(&, "&", "*")}::-webkit-scrollbar-corner {
|
||||
|
||||
1
core/scss/tabler-props.scss
Normal file
1
core/scss/tabler-props.scss
Normal file
@@ -0,0 +1 @@
|
||||
@import "props"
|
||||
121
core/scss/tabler-themes.scss
Normal file
121
core/scss/tabler-themes.scss
Normal file
@@ -0,0 +1,121 @@
|
||||
@import "config";
|
||||
|
||||
[data-bs-theme-base="slate"] {
|
||||
--#{$prefix}gray-50: #f8fafc;
|
||||
--#{$prefix}gray-100: #f1f5f9;
|
||||
--#{$prefix}gray-200: #e2e8f0;
|
||||
--#{$prefix}gray-300: #cbd5e1;
|
||||
--#{$prefix}gray-400: #94a3b8;
|
||||
--#{$prefix}gray-500: #64748b;
|
||||
--#{$prefix}gray-600: #475569;
|
||||
--#{$prefix}gray-700: #334155;
|
||||
--#{$prefix}gray-800: #1e293b;
|
||||
--#{$prefix}gray-900: #0f172a;
|
||||
--#{$prefix}gray-950: #020617;
|
||||
}
|
||||
|
||||
[data-bs-theme-base="gray"] {
|
||||
--#{$prefix}gray-50: #f9fafb;
|
||||
--#{$prefix}gray-100: #f3f4f6;
|
||||
--#{$prefix}gray-200: #e5e7eb;
|
||||
--#{$prefix}gray-300: #d1d5db;
|
||||
--#{$prefix}gray-400: #9ca3af;
|
||||
--#{$prefix}gray-500: #6b7280;
|
||||
--#{$prefix}gray-600: #4b5563;
|
||||
--#{$prefix}gray-700: #374151;
|
||||
--#{$prefix}gray-800: #1f2937;
|
||||
--#{$prefix}gray-900: #111827;
|
||||
--#{$prefix}gray-950: #030712;
|
||||
}
|
||||
|
||||
[data-bs-theme-base="zinc"] {
|
||||
--#{$prefix}gray-50: #fafafa;
|
||||
--#{$prefix}gray-100: #f4f4f5;
|
||||
--#{$prefix}gray-200: #e4e4e7;
|
||||
--#{$prefix}gray-300: #d4d4d8;
|
||||
--#{$prefix}gray-400: #a1a1aa;
|
||||
--#{$prefix}gray-500: #71717a;
|
||||
--#{$prefix}gray-600: #52525b;
|
||||
--#{$prefix}gray-700: #3f3f46;
|
||||
--#{$prefix}gray-800: #27272a;
|
||||
--#{$prefix}gray-900: #18181b;
|
||||
--#{$prefix}gray-950: #09090b;
|
||||
}
|
||||
|
||||
[data-bs-theme-base="neutral"] {
|
||||
--#{$prefix}gray-50: #fafafa;
|
||||
--#{$prefix}gray-100: #f5f5f5;
|
||||
--#{$prefix}gray-200: #e5e5e5;
|
||||
--#{$prefix}gray-300: #d4d4d4;
|
||||
--#{$prefix}gray-400: #a3a3a3;
|
||||
--#{$prefix}gray-500: #737373;
|
||||
--#{$prefix}gray-600: #525252;
|
||||
--#{$prefix}gray-700: #404040;
|
||||
--#{$prefix}gray-800: #262626;
|
||||
--#{$prefix}gray-900: #171717;
|
||||
--#{$prefix}gray-950: #0a0a0a;
|
||||
}
|
||||
|
||||
[data-bs-theme-base="stone"] {
|
||||
--#{$prefix}gray-50: #fafaf9;
|
||||
--#{$prefix}gray-100: #f5f5f4;
|
||||
--#{$prefix}gray-200: #e7e5e4;
|
||||
--#{$prefix}gray-300: #d6d3d1;
|
||||
--#{$prefix}gray-400: #a8a29e;
|
||||
--#{$prefix}gray-500: #78716c;
|
||||
--#{$prefix}gray-600: #57534e;
|
||||
--#{$prefix}gray-700: #44403c;
|
||||
--#{$prefix}gray-800: #292524;
|
||||
--#{$prefix}gray-900: #1c1917;
|
||||
--#{$prefix}gray-950: #0c0a09;
|
||||
}
|
||||
|
||||
[data-bs-theme-base="pink"] {
|
||||
--#{$prefix}gray-50: #fdf2f8;
|
||||
--#{$prefix}gray-100: #fce7f3;
|
||||
--#{$prefix}gray-200: #fbcfe8;
|
||||
--#{$prefix}gray-300: #f9a8d4;
|
||||
--#{$prefix}gray-400: #f472b6;
|
||||
--#{$prefix}gray-500: #ec4899;
|
||||
--#{$prefix}gray-600: #db2777;
|
||||
--#{$prefix}gray-700: #be185d;
|
||||
--#{$prefix}gray-800: #9d174d;
|
||||
--#{$prefix}gray-900: #831843;
|
||||
--#{$prefix}gray-950: #500724;
|
||||
}
|
||||
|
||||
@each $name, $value in $extra-colors {
|
||||
[data-bs-theme-primary="#{$name}"] {
|
||||
--#{$prefix}primary: #{$value};
|
||||
--#{$prefix}primary-rgb: #{to-rgb($value)};
|
||||
}
|
||||
}
|
||||
|
||||
@each $value in (0, .5, 1, 1.5, 2) {
|
||||
[data-bs-theme-radius="#{$value}"] {
|
||||
--#{$prefix}border-radius-scale: #{$value};
|
||||
}
|
||||
}
|
||||
|
||||
[data-bs-theme-primary="inverted"] {
|
||||
--#{$prefix}primary: var(--#{$prefix}gray-800);
|
||||
--#{$prefix}primary-fg: var(--#{$prefix}light);
|
||||
--#{$prefix}primary-rgb: #{to-rgb($dark)};
|
||||
|
||||
&[data-bs-theme="dark"],
|
||||
[data-bs-theme="dark"] {
|
||||
--#{$prefix}primary: #{$light};
|
||||
--#{$prefix}primary-fg: var(--#{$prefix}dark);
|
||||
--#{$prefix}primary-rgb: #{to-rgb($light)};
|
||||
}
|
||||
}
|
||||
|
||||
@each $name, $value in (monospace: $font-family-monospace, sans-serif: $font-family-sans-serif, serif: $font-family-serif, comic: $font-family-comic) {
|
||||
[data-bs-theme-font="#{$name}"] {
|
||||
--#{$prefix}body-font-family: var(--#{$prefix}font-#{$name});
|
||||
|
||||
@if $name == "monospace" {
|
||||
--#{$prefix}body-font-size: 80%;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,9 @@
|
||||
@import "vendor/dropzone";
|
||||
@import "vendor/fslightbox";
|
||||
@import "vendor/plyr";
|
||||
@import "vendor/tinymce";
|
||||
@import "vendor/wysiwyg";
|
||||
@import "vendor/stars-rating";
|
||||
@import "vendor/coloris";
|
||||
@import "vendor/typed";
|
||||
@import "vendor/turbo";
|
||||
@import "vendor/fullcalendar";
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
@import "core";
|
||||
|
||||
|
||||
@@ -3,41 +3,57 @@
|
||||
--#{$prefix}accordion-border-color: var(--#{$prefix}border-color);
|
||||
--#{$prefix}accordion-border-radius: #{$accordion-border-radius};
|
||||
--#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};
|
||||
--#{$prefix}accordion-padding-x: #{$accordion-body-padding-x};
|
||||
--#{$prefix}accordion-gap: 0;
|
||||
--#{$prefix}accordion-active-color: #{$accordion-button-active-color};
|
||||
--#{$prefix}accordion-btn-color: var(--#{$prefix}accordion-color);
|
||||
--#{$prefix}accordion-btn-bg: #{$accordion-button-bg};
|
||||
--#{$prefix}accordion-btn-toggle-width: 1.25rem;
|
||||
--#{$prefix}accordion-padding-x: #{$accordion-body-padding-x};
|
||||
--#{$prefix}accordion-btn-padding-x: var(--#{$prefix}accordion-padding-x);
|
||||
--#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};
|
||||
--#{$prefix}accordion-btn-font-weight: var(--#{$prefix}font-weight-medium);
|
||||
--#{$prefix}accordion-body-padding-x: var(--#{$prefix}accordion-padding-x);
|
||||
--#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
|
||||
--#{$prefix}accordion-active-color: #{$accordion-button-active-color};
|
||||
--#{$prefix}accordion-gap: 0;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--#{$prefix}accordion-gap);
|
||||
}
|
||||
|
||||
.accordion-header {
|
||||
.accordion-button {
|
||||
position: relative;
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-padding-x);
|
||||
color: var(--#{$prefix}accordion-btn-color);
|
||||
text-align: left;
|
||||
color: inherit;
|
||||
text-align: inherit;
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
overflow-anchor: none;
|
||||
transition: transform $transition-time;
|
||||
font-size: inherit;
|
||||
font-weight: var(--#{$prefix}accordion-btn-font-weight);
|
||||
gap: .75rem;
|
||||
|
||||
&:not(.collapsed) {
|
||||
border-bottom-color: transparent;
|
||||
box-shadow: none;
|
||||
color: var(--#{$prefix}accordion-active-color);
|
||||
}
|
||||
}
|
||||
|
||||
.accordion-header {
|
||||
margin: 0;
|
||||
position: relative;
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
color: var(--#{$prefix}accordion-btn-color);
|
||||
text-align: left;
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
overflow-anchor: none;
|
||||
transition: transform $transition-time;
|
||||
|
||||
&:hover {
|
||||
z-index: 2;
|
||||
@@ -55,11 +71,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
.accordion-header-icon {
|
||||
.accordion-button-icon {
|
||||
color: var(--#{$prefix}secondary);
|
||||
}
|
||||
|
||||
.accordion-header-toggle {
|
||||
.accordion-button-toggle {
|
||||
display: flex;
|
||||
line-height: 1;
|
||||
transition: $transition-time transform;
|
||||
@@ -69,7 +85,7 @@
|
||||
width: var(--#{$prefix}accordion-btn-toggle-width);
|
||||
height: var(--#{$prefix}accordion-btn-toggle-width);
|
||||
|
||||
.accordion-header:not(.collapsed) & {
|
||||
.accordion-button:not(.collapsed) & {
|
||||
transform: rotate(-180deg);
|
||||
color: var(--#{$prefix}accordion-active-color);
|
||||
}
|
||||
@@ -79,23 +95,14 @@
|
||||
}
|
||||
}
|
||||
|
||||
.accordion-header-toggle-plus {
|
||||
.accordion-header:not(.collapsed) & {
|
||||
.accordion-button-toggle-plus {
|
||||
.accordion-button:not(.collapsed) & {
|
||||
path:first-child {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.accordion-header-text {
|
||||
margin-bottom: 0;
|
||||
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
.h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.accordion-item {
|
||||
color: var(--#{$prefix}accordion-color);
|
||||
border: var(--#{$prefix}border-width) solid var(--#{$prefix}accordion-border-color);
|
||||
@@ -145,13 +152,11 @@
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
// stylelint-disable selector-max-class
|
||||
> .accordion-collapse,
|
||||
> .accordion-header .accordion-button,
|
||||
> .accordion-header .accordion-button.collapsed {
|
||||
@include border-radius(0);
|
||||
}
|
||||
// stylelint-enable selector-max-class
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,7 +170,7 @@
|
||||
}
|
||||
|
||||
.accordion-inverted {
|
||||
.accordion-header-toggle {
|
||||
.accordion-button-toggle {
|
||||
order: -1;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
.alert {
|
||||
--#{$prefix}alert-bg: transparent;
|
||||
// scss-docs-start alert-variables
|
||||
--#{$prefix}alert-color: var(--#{$prefix}body-color);
|
||||
--#{$prefix}alert-bg: #{color-transparent(var(--#{$prefix}alert-color), .1)};
|
||||
--#{$prefix}alert-padding-x: #{$alert-padding-x};
|
||||
--#{$prefix}alert-padding-y: #{$alert-padding-y};
|
||||
--#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};
|
||||
--#{$prefix}alert-color: inherit;
|
||||
--#{$prefix}alert-border-color: var(--#{$prefix}border-color);
|
||||
--#{$prefix}alert-border-color: #{color-transparent(var(--#{$prefix}alert-color), .2)};
|
||||
--#{$prefix}alert-border: var(--#{$prefix}border-width) solid var(--#{$prefix}alert-border-color);
|
||||
--#{$prefix}alert-border-radius: var(--#{$prefix}border-radius);
|
||||
--#{$prefix}alert-link-color: inherit;
|
||||
--#{$prefix}alert-heading-font-weight: var(--#{$prefix}font-weight-medium);
|
||||
|
||||
// scss-docs-end
|
||||
|
||||
position: relative;
|
||||
padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);
|
||||
margin-bottom: var(--#{$prefix}alert-margin-bottom);
|
||||
background-color: var(--#{$prefix}alert-bg);
|
||||
background-color: color-mix(in srgb, var(--#{$prefix}alert-bg), var(--#{$prefix}bg-surface));
|
||||
border-radius: var(--#{$prefix}alert-border-radius);
|
||||
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}alert-border-color);
|
||||
display: flex;
|
||||
@@ -66,8 +68,8 @@
|
||||
|
||||
.btn-close {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
top: calc(var(--#{$prefix}alert-padding-x) / 2 - 1px);
|
||||
right: calc(var(--#{$prefix}alert-padding-y) / 2 - 1px);
|
||||
z-index: 1;
|
||||
padding: calc(var(--#{$prefix}alert-padding-y) * 1.25) var(--#{$prefix}alert-padding-x);
|
||||
}
|
||||
@@ -75,12 +77,21 @@
|
||||
|
||||
.alert-important {
|
||||
border-color: var(--#{$prefix}alert-color);
|
||||
color: var(--#{$prefix}alert-color);
|
||||
background-color: var(--#{$prefix}alert-color);
|
||||
color: var(--#{$prefix}white);
|
||||
|
||||
.btn-close,
|
||||
.alert-description {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.alert-icon {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
.alert-minor {
|
||||
background: transparent;
|
||||
border-color: var(--tblr-border-color);
|
||||
}
|
||||
|
||||
@each $name, $color in $theme-colors {
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
@use "sass:map";
|
||||
|
||||
.avatar {
|
||||
--#{$prefix}avatar-size: #{$avatar-size};
|
||||
--#{$prefix}avatar-size: var(--#{$prefix}avatar-list-size, #{$avatar-size});
|
||||
--#{$prefix}avatar-status-size: #{$avatar-status-size};
|
||||
--#{$prefix}avatar-bg: #{$avatar-bg};
|
||||
--#{$prefix}avatar-box-shadow: #{$avatar-box-shadow};
|
||||
--#{$prefix}avatar-box-shadow-color: var(--#{$prefix}border-color-translucent);
|
||||
--#{$prefix}avatar-box-shadow: inset 0 0 0 1px var(--#{$prefix}avatar-box-shadow-color);
|
||||
--#{$prefix}avatar-font-size: #{$avatar-font-size};
|
||||
--#{$prefix}avatar-icon-size: #{$avatar-icon-size};
|
||||
--#{$prefix}avatar-brand-size: #{$avatar-brand-size};
|
||||
position: relative;
|
||||
width: var(--#{$prefix}avatar-size);
|
||||
height: var(--#{$prefix}avatar-size);
|
||||
@@ -22,6 +26,7 @@
|
||||
background: var(--#{$prefix}avatar-bg) no-repeat center/cover;
|
||||
border-radius: $avatar-border-radius;
|
||||
box-shadow: var(--#{$prefix}avatar-box-shadow);
|
||||
transition: color $transition-time, background-color $transition-time, box-shadow $transition-time;
|
||||
|
||||
.icon {
|
||||
width: var(--#{$prefix}avatar-icon-size);
|
||||
@@ -38,6 +43,11 @@
|
||||
|
||||
@at-root a#{&} {
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
color: var(--#{$prefix}primary);
|
||||
--#{$prefix}avatar-box-shadow-color: var(--#{$prefix}primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,15 +57,16 @@
|
||||
|
||||
@each $avatar-size, $size in $avatar-sizes {
|
||||
.avatar-#{$avatar-size} {
|
||||
--#{$prefix}avatar-size: #{map-get($size, size)};
|
||||
--#{$prefix}avatar-status-size: #{map-get($size, status-size)};
|
||||
--#{$prefix}avatar-font-size: #{map-get($size, font-size)};
|
||||
--#{$prefix}avatar-icon-size: #{map-get($size, icon-size)};
|
||||
}
|
||||
--#{$prefix}avatar-size: #{map.get($size, size)};
|
||||
--#{$prefix}avatar-status-size: #{map.get($size, status-size)};
|
||||
--#{$prefix}avatar-font-size: #{map.get($size, font-size)};
|
||||
--#{$prefix}avatar-icon-size: #{map.get($size, icon-size)};
|
||||
--#{$prefix}avatar-brand-size: #{map.get($size, brand-size)};
|
||||
|
||||
.avatar-#{$avatar-size} .badge:empty {
|
||||
width: map-get($size, status-size);
|
||||
height: map-get($size, status-size);
|
||||
.badge:empty {
|
||||
width: map.get($size, status-size);
|
||||
height: map.get($size, status-size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,6 +74,7 @@
|
||||
// Avatar list
|
||||
//
|
||||
.avatar-list {
|
||||
--#{$prefix}avatar-list-size: #{$avatar-size};
|
||||
@include elements-list;
|
||||
|
||||
a.avatar {
|
||||
@@ -78,7 +90,13 @@
|
||||
|
||||
.avatar {
|
||||
margin-right: calc(#{$avatar-list-spacing} * var(--#{$prefix}avatar-size)) !important;
|
||||
box-shadow: var(--#{$prefix}avatar-box-shadow), 0 0 0 2px var(--#{$prefix}card-cap-bg, var(--#{$prefix}card-bg, var(--#{$prefix}bg-surface)));
|
||||
box-shadow: var(--#{$prefix}avatar-box-shadow), 0 0 0 2px var(--#{$prefix}card-bg, var(--#{$prefix}bg-surface));
|
||||
}
|
||||
}
|
||||
|
||||
@each $avatar-size, $size in $avatar-sizes {
|
||||
.avatar-list-#{$avatar-size} {
|
||||
--#{$prefix}avatar-list-size: #{map.get($size, size)};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,8 +104,6 @@
|
||||
// Avatar upload
|
||||
//
|
||||
.avatar-upload {
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
border: var(--#{$prefix}border-width) dashed var(--#{$prefix}border-color);
|
||||
background: $form-check-input-bg;
|
||||
box-shadow: none;
|
||||
@@ -116,4 +132,16 @@
|
||||
.avatar-cover {
|
||||
margin-top: calc(-.5 * var(--#{$prefix}avatar-size));
|
||||
box-shadow: 0 0 0 .25rem var(--#{$prefix}card-bg, var(--#{$prefix}body-bg));
|
||||
}
|
||||
|
||||
.avatar-brand {
|
||||
width: var(--#{$prefix}avatar-brand-size);
|
||||
height: var(--#{$prefix}avatar-brand-size);
|
||||
position: absolute;
|
||||
right: -2px;
|
||||
bottom: -2px;
|
||||
z-index: 1000;
|
||||
background: var(--#{$prefix}bg-surface);
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
border: 1px solid var(--#{$prefix}border-color);
|
||||
}
|
||||
@@ -28,7 +28,7 @@
|
||||
line-height: var(--#{$prefix}badge-line-height);
|
||||
|
||||
@at-root a#{&} {
|
||||
color: $card-bg;
|
||||
background: var(--#{$prefix}bg-surface-secondary);
|
||||
}
|
||||
|
||||
.icon {
|
||||
|
||||
@@ -1,7 +1,23 @@
|
||||
.breadcrumb {
|
||||
--#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};
|
||||
--#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};
|
||||
--#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};
|
||||
--#{$prefix}breadcrumb-font-size: #{$breadcrumb-font-size};
|
||||
--#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};
|
||||
--#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};
|
||||
--#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};
|
||||
--#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};
|
||||
--#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};
|
||||
--#{$prefix}breadcrumb-item-active-font-weight: #{$breadcrumb-active-font-weight};
|
||||
--#{$prefix}breadcrumb-item-disabled-color: #{$breadcrumb-disabled-color};
|
||||
--#{$prefix}breadcrumb-link-color: #{$breadcrumb-link-color};
|
||||
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
@include font-size(var(--#{$prefix}breadcrumb-font-size));
|
||||
list-style: none;
|
||||
background-color: var(--#{$prefix}breadcrumb-bg);
|
||||
@include border-radius(var(--#{$prefix}breadcrumb-border-radius));
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: transparent;
|
||||
@@ -21,6 +37,7 @@
|
||||
|
||||
.breadcrumb-item {
|
||||
&.active {
|
||||
color: var(--#{$prefix}breadcrumb-item-active-color);
|
||||
font-weight: var(--#{$prefix}breadcrumb-item-active-font-weight);
|
||||
|
||||
a {
|
||||
@@ -41,6 +58,20 @@
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
& + & {
|
||||
padding-left: var(--#{$prefix}breadcrumb-item-padding-x);
|
||||
|
||||
&::before {
|
||||
float: left;
|
||||
padding-right: var(--#{$prefix}breadcrumb-item-padding-x);
|
||||
color: var(--#{$prefix}breadcrumb-divider-color);
|
||||
content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider));
|
||||
/*rtl:raw:
|
||||
transform: scaleX(-1);
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@each $name, $symbol in $breadcrumb-variants {
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
@use "sass:color";
|
||||
@use "sass:map";
|
||||
|
||||
//
|
||||
// Button
|
||||
//
|
||||
.btn {
|
||||
--#{$prefix}btn-icon-size: #{$input-btn-icon-size};
|
||||
--#{$prefix}btn-icon-color: inherit;
|
||||
--#{$prefix}btn-bg: var(--#{$prefix}bg-surface);
|
||||
--#{$prefix}btn-color: var(--#{$prefix}body-color);
|
||||
--#{$prefix}btn-border-color: #{$btn-border-color};
|
||||
--#{$prefix}btn-hover-bg: var(--#{$prefix}btn-bg);
|
||||
--#{$prefix}btn-hover-border-color: var(--#{$prefix}border-active-color);
|
||||
--#{$prefix}btn-box-shadow: var(--#{$prefix}box-shadow-input);
|
||||
--#{$prefix}btn-active-color: #{$active-color};
|
||||
--#{$prefix}btn-active-bg: #{$active-bg};
|
||||
--#{$prefix}btn-active-border-color: #{$active-border-color};
|
||||
@@ -21,6 +22,9 @@
|
||||
white-space: nowrap;
|
||||
box-shadow: var(--#{$prefix}btn-box-shadow);
|
||||
position: relative;
|
||||
min-width: calc((var(--#{$prefix}btn-line-height) * 1) + (var(--#{$prefix}btn-padding-y) * 2) + (var(--#{$prefix}btn-border-width) * 2));
|
||||
min-height: calc((var(--#{$prefix}btn-line-height) * 1) + (var(--#{$prefix}btn-padding-y) * 2) + (var(--#{$prefix}btn-border-width) * 2));
|
||||
|
||||
|
||||
.icon {
|
||||
width: var(--#{$prefix}btn-icon-size);
|
||||
@@ -29,7 +33,7 @@
|
||||
font-size: var(--#{$prefix}btn-icon-size);
|
||||
margin: 0 calc(var(--#{$prefix}btn-padding-x) / 2) 0 calc(var(--#{$prefix}btn-padding-x) / -4);
|
||||
vertical-align: bottom;
|
||||
color: inherit;
|
||||
color: var(--#{$prefix}btn-icon-color);
|
||||
}
|
||||
|
||||
.avatar {
|
||||
@@ -38,7 +42,8 @@
|
||||
margin: 0 calc(var(--#{$prefix}btn-padding-x) / 2) 0 calc(var(--#{$prefix}btn-padding-x) / -4);
|
||||
}
|
||||
|
||||
.icon-right {
|
||||
.icon-right,
|
||||
.icon-end {
|
||||
margin: 0 calc(var(--#{$prefix}btn-padding-x) / -4) 0 calc(var(--#{$prefix}btn-padding-x) / 2);
|
||||
}
|
||||
|
||||
@@ -72,9 +77,9 @@
|
||||
//
|
||||
// Button color variations
|
||||
//
|
||||
@each $color, $value in $theme-colors {
|
||||
@each $color, $value in map.merge($theme-colors, $social-colors) {
|
||||
.btn-#{$color} {
|
||||
@if $color == 'dark' {
|
||||
@if $color == "dark" {
|
||||
--#{$prefix}btn-border-color: var(--#{$prefix}dark-mode-border-color);
|
||||
--#{$prefix}btn-hover-border-color: var(--#{$prefix}dark-mode-border-active-color);
|
||||
--#{$prefix}btn-active-border-color: var(--#{$prefix}dark-mode-border-active-color);
|
||||
@@ -84,7 +89,7 @@
|
||||
--#{$prefix}btn-active-border-color: transparent;
|
||||
}
|
||||
|
||||
--#{$prefix}btn-color: var(--#{$prefix}#{$color}-fg);
|
||||
--#{$prefix}btn-color: var(--#{$prefix}#{$color}-fg, #{$white});
|
||||
--#{$prefix}btn-bg: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-hover-color: var(--#{$prefix}#{$color}-fg);
|
||||
--#{$prefix}btn-hover-bg: var(--#{$prefix}#{$color}-darken);
|
||||
@@ -92,10 +97,11 @@
|
||||
--#{$prefix}btn-active-bg: var(--#{$prefix}#{$color}-darken);
|
||||
--#{$prefix}btn-disabled-bg: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-disabled-color: var(--#{$prefix}#{$color}-fg);
|
||||
--#{$prefix}btn-box-shadow: var(--#{$prefix}box-shadow-input);
|
||||
--#{$prefix}btn-box-shadow: var(--#{$prefix}shadow-input);
|
||||
}
|
||||
|
||||
.btn-outline-#{$color} {
|
||||
.btn-outline-#{$color},
|
||||
.btn-outline.btn-#{$color} {
|
||||
--#{$prefix}btn-color: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-bg: transparent;
|
||||
--#{$prefix}btn-border-color: var(--#{$prefix}#{$color});
|
||||
@@ -104,24 +110,24 @@
|
||||
--#{$prefix}btn-hover-bg: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-active-color: var(--#{$prefix}#{$color}-fg);
|
||||
--#{$prefix}btn-active-bg: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-active-border-color: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-disabled-color: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-disabled-border-color: var(--#{$prefix}#{$color});
|
||||
}
|
||||
}
|
||||
|
||||
@each $name, $color in $theme-colors {
|
||||
.btn-ghost-#{$name} {
|
||||
--#{$prefix}btn-color: var(--#{$prefix}#{$name});
|
||||
.btn-ghost-#{$color},
|
||||
.btn-ghost.btn-#{$color} {
|
||||
--#{$prefix}btn-color: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-bg: transparent;
|
||||
--#{$prefix}btn-border-color: transparent;
|
||||
--#{$prefix}btn-hover-color: var(--#{$prefix}#{$name}-fg);
|
||||
--#{$prefix}btn-hover-bg: var(--#{$prefix}#{$name});
|
||||
--#{$prefix}btn-hover-border-color: var(--#{$prefix}#{$name});
|
||||
--#{$prefix}btn-active-color: var(--#{$prefix}#{$name}-fg);
|
||||
--#{$prefix}btn-active-bg: var(--#{$prefix}#{$name});
|
||||
--#{$prefix}btn-hover-color: var(--#{$prefix}#{$color}-fg);
|
||||
--#{$prefix}btn-hover-bg: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-hover-border-color: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-active-color: var(--#{$prefix}#{$color}-fg);
|
||||
--#{$prefix}btn-active-bg: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-active-border-color: transparent;
|
||||
--#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};
|
||||
--#{$prefix}btn-disabled-color: var(--#{$prefix}#{$name});
|
||||
--#{$prefix}btn-disabled-color: var(--#{$prefix}#{$color});
|
||||
--#{$prefix}btn-disabled-bg: transparent;
|
||||
--#{$prefix}btn-disabled-border-color: transparent;
|
||||
--#{$prefix}gradient: none;
|
||||
@@ -132,16 +138,27 @@
|
||||
//
|
||||
// Button sizes
|
||||
//
|
||||
.btn-sm, .btn-group-sm > .btn {
|
||||
.btn-sm,
|
||||
.btn-group-sm > .btn {
|
||||
--#{$prefix}btn-line-height: #{$input-btn-line-height-sm};
|
||||
--#{$prefix}btn-icon-size: #{$input-btn-icon-size-sm};
|
||||
}
|
||||
|
||||
.btn-lg, .btn-group-lg > .btn {
|
||||
.btn-lg,
|
||||
.btn-group-lg > .btn {
|
||||
--#{$prefix}btn-line-height: #{$input-btn-line-height-lg};
|
||||
--#{$prefix}btn-icon-size: #{$input-btn-icon-size-lg};
|
||||
}
|
||||
|
||||
.btn-xl,
|
||||
.btn-group-xl > .btn {
|
||||
--#{$prefix}btn-line-height: #{$input-btn-line-height-xl};
|
||||
--#{$prefix}btn-icon-size: #{$input-btn-icon-size-xl};
|
||||
--#{$prefix}btn-padding-y: #{$input-btn-padding-y-xl};
|
||||
--#{$prefix}btn-padding-x: #{$input-btn-padding-x-xl};
|
||||
--#{$prefix}btn-font-size: #{$input-btn-font-size-xl};
|
||||
}
|
||||
|
||||
//
|
||||
// Button shapes
|
||||
//
|
||||
@@ -162,15 +179,18 @@
|
||||
//
|
||||
// Icon button
|
||||
//
|
||||
.btn-icon {
|
||||
min-width: calc((var(--#{$prefix}btn-line-height) * var(--#{$prefix}btn-font-size)) + (var(--#{$prefix}btn-padding-y) * 2) + (var(--#{$prefix}btn-border-width) * 2));
|
||||
min-height: calc((var(--#{$prefix}btn-line-height) * var(--#{$prefix}btn-font-size)) + (var(--#{$prefix}btn-padding-y) * 2) + (var(--#{$prefix}btn-border-width) * 2));
|
||||
.btn-icon,
|
||||
.btn-action {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
|
||||
.icon {
|
||||
margin: calc(-1 * var(--#{$prefix}btn-padding-x));
|
||||
}
|
||||
//[BUG] btn-sm and btn-xl with an icon looks broken
|
||||
//issue #2470 fixed
|
||||
min-width: calc(var(--#{$prefix}btn-icon-size) + (var(--#{$prefix}btn-padding-x) * 2));
|
||||
min-height: calc(var(--#{$prefix}btn-icon-size) + (var(--#{$prefix}btn-padding-y) * 2));
|
||||
}
|
||||
|
||||
//
|
||||
@@ -186,9 +206,9 @@
|
||||
.btn-floating {
|
||||
position: fixed;
|
||||
z-index: $zindex-fixed;
|
||||
bottom: 1.5rem;
|
||||
right: 1.5rem;
|
||||
border-radius: $border-radius-pill;
|
||||
bottom: 1rem;
|
||||
left: 1rem;
|
||||
box-shadow: var(--#{$prefix}shadow-dropdown);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -217,7 +237,7 @@
|
||||
height: var(--#{$prefix}btn-icon-size);
|
||||
left: calc(50% - var(--#{$prefix}btn-icon-size) / 2);
|
||||
top: calc(50% - var(--#{$prefix}btn-icon-size) / 2);
|
||||
animation: spinner-border .75s linear infinite;
|
||||
animation: spinner-border 0.75s linear infinite;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,14 +246,7 @@
|
||||
//
|
||||
.btn-action {
|
||||
--#{$prefix}border-color: transparent;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
color: var(--#{$prefix}secondary);
|
||||
display: inline-flex;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
@@ -251,6 +264,7 @@
|
||||
&.show {
|
||||
color: var(--#{$prefix}body-color);
|
||||
background: var(--#{$prefix}active-bg);
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
&.show {
|
||||
@@ -260,4 +274,65 @@
|
||||
|
||||
.btn-actions {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-animate-icon {
|
||||
.icon {
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:focus-visible {
|
||||
.icon {
|
||||
transform: translateX(4px);
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-animate-icon-rotate {
|
||||
&:hover,
|
||||
&:focus-visible {
|
||||
.icon {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-animate-icon-move-start {
|
||||
&:hover,
|
||||
&:focus-visible {
|
||||
.icon {
|
||||
transform: translateX(-4px);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-animate-icon-pulse {
|
||||
&:hover,
|
||||
&:focus-visible {
|
||||
.icon {
|
||||
transform: none;
|
||||
animation: pulse 0.9s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-animate-icon-shake {
|
||||
&:hover,
|
||||
&:focus-visible {
|
||||
.icon {
|
||||
transform: none;
|
||||
animation: shake 0.9s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-animate-icon-tada {
|
||||
&:hover,
|
||||
&:focus-visible {
|
||||
.icon {
|
||||
transform: none;
|
||||
animation: tada 0.9s;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,11 +111,11 @@
|
||||
justify-content: center;
|
||||
padding: $card-spacer-y $card-spacer-x;
|
||||
text-align: center;
|
||||
@include transition(background $transition-time);
|
||||
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
|
||||
flex: 1;
|
||||
color: inherit;
|
||||
font-weight: var(--#{$prefix}font-weight-medium);
|
||||
@include transition(background $transition-time);
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
@@ -205,6 +205,7 @@ Stacked card
|
||||
flex: 1;
|
||||
margin: calc(var(--#{$prefix}card-cap-padding-y) * -1) calc(var(--#{$prefix}card-cap-padding-x) * -1) calc(var(--#{$prefix}card-cap-padding-y) * -1);
|
||||
padding: calc(var(--#{$prefix}card-cap-padding-y) * .5) calc(var(--#{$prefix}card-cap-padding-x) * .5) 0;
|
||||
border-radius: var(--#{$prefix}card-border-radius) var(--#{$prefix}card-border-radius) 0 0;
|
||||
}
|
||||
|
||||
.card-header-pills {
|
||||
@@ -214,11 +215,13 @@ Stacked card
|
||||
}
|
||||
|
||||
// Card rotate
|
||||
.card-rotate-left {
|
||||
.card-rotate-left,
|
||||
.card-rotate-start {
|
||||
transform: rotate(-1.5deg);
|
||||
}
|
||||
|
||||
.card-rotate-right {
|
||||
.card-rotate-right,
|
||||
.card-rotate-end {
|
||||
transform: rotate(1.5deg);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,61 @@
|
||||
.btn-close {
|
||||
--#{$prefix}btn-close-color: currentColor;
|
||||
--#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) };
|
||||
--#{$prefix}btn-close-opacity: #{$btn-close-opacity};
|
||||
--#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};
|
||||
--#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};
|
||||
--#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};
|
||||
--#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};
|
||||
--#{$prefix}btn-close-size: #{$btn-close-width};
|
||||
|
||||
width: var(--#{$prefix}btn-close-size);
|
||||
height: var(--#{$prefix}btn-close-size);
|
||||
padding: $btn-close-padding-y $btn-close-padding-x;
|
||||
color: var(--#{$prefix}btn-close-color);
|
||||
mask: var(--#{$prefix}btn-close-bg) no-repeat center/calc(var(--#{$prefix}btn-close-size) * .75);
|
||||
background-color: var(--#{$prefix}btn-close-color);
|
||||
border: 0;
|
||||
border-radius: var(--tblr-border-radius);
|
||||
opacity: var(--#{$prefix}btn-close-opacity);
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
|
||||
&:hover {
|
||||
color: var(--#{$prefix}btn-close-color);
|
||||
text-decoration: none;
|
||||
opacity: var(--#{$prefix}btn-close-hover-opacity);
|
||||
background-color: var(--#{$prefix}btn-close-color);
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
outline: 0;
|
||||
box-shadow: var(--#{$prefix}btn-close-focus-shadow);
|
||||
opacity: var(--#{$prefix}btn-close-focus-opacity);
|
||||
}
|
||||
}
|
||||
|
||||
&:disabled,
|
||||
&.disabled {
|
||||
pointer-events: none;
|
||||
user-select: none;
|
||||
opacity: var(--#{$prefix}btn-close-disabled-opacity);
|
||||
}
|
||||
}
|
||||
|
||||
// @mixin btn-close-white() {
|
||||
// --#{$prefix}btn-close-filter: #{$btn-close-filter-dark};
|
||||
// }
|
||||
|
||||
// .btn-close-white {
|
||||
// @include btn-close-white();
|
||||
// }
|
||||
|
||||
// :root,
|
||||
// [data-bs-theme="light"] {
|
||||
// --#{$prefix}btn-close-filter: #{$btn-close-filter};
|
||||
// }
|
||||
|
||||
// @if $enable-dark-mode {
|
||||
// @include color-mode(dark, true) {
|
||||
// @include btn-close-white();
|
||||
// }
|
||||
// }
|
||||
@@ -96,7 +96,7 @@
|
||||
|
||||
.dropend {
|
||||
> .dropdown-menu {
|
||||
margin-top: subtract(-$dropdown-padding-y, 1px);
|
||||
margin-top: subtract(calc(-1 * $dropdown-padding-y), 1px);
|
||||
margin-left: -.25rem;
|
||||
}
|
||||
|
||||
@@ -109,6 +109,7 @@
|
||||
|
||||
.dropdown-menu-card {
|
||||
padding: 0;
|
||||
min-width: 20rem;
|
||||
|
||||
> .card {
|
||||
margin: 0;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
@use "sass:map";
|
||||
|
||||
$countries: (
|
||||
'ad', 'af', 'ae', 'afrun', 'ag', 'ai', 'al', 'am', 'ao', 'aq', 'ar', 'as', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'bj', 'bl', 'bm', 'bn', 'bo', 'bq-bo', 'bq-sa', 'bq-se', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'cr', 'cu', 'cv', 'cw', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'ee', 'eg', 'eh', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb-eng', 'gb-sct', 'gb', 'gb-wls', 'gb-nir', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mf', 'mg', 'mh', 'mk', 'ml', 'mm', 'mn', 'mo', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nc', 'ne', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'ps', 'pt', 'pw', 'py', 'qa', 'rainbow', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'ss', 'st', 'sv', 'sx', 'sy', 'sz', 'tc', 'td', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tr', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'um', 'unasur', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'za', 'zm', 'zw'
|
||||
);
|
||||
@@ -26,6 +28,6 @@ $countries: (
|
||||
|
||||
@each $flag-size, $size in $flag-sizes {
|
||||
.flag-#{$flag-size} {
|
||||
height: map-get($size, size);
|
||||
height: map.get($size, size);
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,7 @@ Form label
|
||||
&.required {
|
||||
&:after {
|
||||
content: "*";
|
||||
margin-left: .25rem;
|
||||
margin-left: 0.25rem;
|
||||
color: $red;
|
||||
}
|
||||
}
|
||||
@@ -39,17 +39,17 @@ Form hint
|
||||
}
|
||||
|
||||
& + .form-control {
|
||||
margin-top: .25rem;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.form-label + & {
|
||||
margin-top: -.25rem;
|
||||
margin-top: -0.25rem;
|
||||
}
|
||||
|
||||
.input-group + &,
|
||||
.form-control + &,
|
||||
.form-select + & {
|
||||
margin-top: .5rem;
|
||||
margin-top: 0.5rem;
|
||||
color: $form-secondary-color;
|
||||
}
|
||||
}
|
||||
@@ -68,7 +68,7 @@ Form control
|
||||
*/
|
||||
.form-control {
|
||||
&:-webkit-autofill {
|
||||
box-shadow: 0 0 0 1000px var(--#{$prefix}body-bg) inset;
|
||||
box-shadow: 0 0 0 1000px var(--#{$prefix}bg-surface-secondary) inset;
|
||||
color: var(--#{$prefix}body-color);
|
||||
-webkit-text-fill-color: var(--#{$prefix}body-color);
|
||||
}
|
||||
@@ -90,18 +90,18 @@ Form control
|
||||
}
|
||||
|
||||
.form-control-dark {
|
||||
background-color: rgba($black, .1);
|
||||
background-color: rgba($black, 0.1);
|
||||
color: $white;
|
||||
border-color: transparent;
|
||||
|
||||
&:focus {
|
||||
background-color: rgba($black, .1);
|
||||
background-color: rgba($black, 0.1);
|
||||
box-shadow: none;
|
||||
border-color: rgba($white, .24);
|
||||
border-color: rgba($white, 0.24);
|
||||
}
|
||||
|
||||
&::placeholder {
|
||||
color: rgba($white, .6);
|
||||
color: rgba($white, 0.6);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@ Form control
|
||||
.form-fieldset {
|
||||
padding: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
background: var(--#{$prefix}body-bg);
|
||||
background: var(--#{$prefix}bg-surface-secondary);
|
||||
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
}
|
||||
@@ -144,7 +144,7 @@ Form help
|
||||
justify-content: center;
|
||||
width: 1.125rem;
|
||||
height: 1.125rem;
|
||||
font-size: .75rem;
|
||||
font-size: 0.75rem;
|
||||
color: $form-secondary-color;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
@@ -161,8 +161,6 @@ Form help
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Input group
|
||||
*/
|
||||
@@ -208,19 +206,21 @@ Input group
|
||||
|
||||
.input-group-text {
|
||||
background: $form-check-input-bg;
|
||||
z-index: 10;
|
||||
@include transition($input-transition);
|
||||
|
||||
&:first-child {
|
||||
padding-right: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
padding-left: 0;
|
||||
border-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Upload files
|
||||
*/
|
||||
@@ -238,4 +238,14 @@ label[for="floating-input"] {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Forms on mobile devices
|
||||
*/
|
||||
.form-control,
|
||||
.form-select {
|
||||
@include media-breakpoint-down(sm) {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
@use "sass:map";
|
||||
|
||||
.row > * {
|
||||
min-width: 0;
|
||||
}
|
||||
@@ -17,8 +19,8 @@
|
||||
|
||||
@each $name, $value in (0: 0, sm: .375rem, md: 1.5rem, lg: 3rem) {
|
||||
.row-#{$name} {
|
||||
margin-right: (-$value);
|
||||
margin-left: -($value);
|
||||
margin-right: calc(-1 * $value);
|
||||
margin-left: calc(-1 * $value);
|
||||
|
||||
> .col,
|
||||
> [class*="col-"] {
|
||||
@@ -54,7 +56,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@each $name, $size in map-merge((null: $spacer), $spacers) {
|
||||
@each $name, $size in map.merge((null: $spacer), $spacers) {
|
||||
$name-prefixed: if($name == null, null, '-#{$name}');
|
||||
|
||||
.space-y#{$name-prefixed} {
|
||||
@@ -69,7 +71,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@each $name, $size in map-merge((null: $spacer), $spacers) {
|
||||
@each $name, $size in map.merge((null: $spacer), $spacers) {
|
||||
$name-prefixed: if($name == null, null, '-#{$name}');
|
||||
|
||||
.divide-y#{$name-prefixed} {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
@use "sass:math";
|
||||
|
||||
.img-responsive {
|
||||
--#{$prefix}img-responsive-ratio: #{percentage(.75)};
|
||||
--#{$prefix}img-responsive-ratio: #{math.percentage(.75)};
|
||||
background: no-repeat center/cover;
|
||||
padding-top: var(--#{$prefix}img-responsive-ratio);
|
||||
}
|
||||
|
||||
@@ -30,14 +30,6 @@
|
||||
border-left-width: $border-width-wide;
|
||||
}
|
||||
|
||||
.list-group-item {
|
||||
&:active,
|
||||
&:focus,
|
||||
&:hover {
|
||||
background-color: $dropdown-link-hover-bg;
|
||||
}
|
||||
}
|
||||
|
||||
.list-group-item {
|
||||
&.disabled,
|
||||
&:disabled {
|
||||
@@ -58,6 +50,14 @@
|
||||
}
|
||||
|
||||
.list-group-hoverable {
|
||||
.list-group-item {
|
||||
&:active,
|
||||
&:focus,
|
||||
&:hover {
|
||||
background-color: $dropdown-link-hover-bg;
|
||||
}
|
||||
}
|
||||
|
||||
.list-group-item-actions {
|
||||
opacity: 0;
|
||||
@include transition(opacity $transition-time);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Markdown
|
||||
*/
|
||||
.markdown {
|
||||
line-height: $line-height-lg;
|
||||
line-height: $line-height-xl;
|
||||
|
||||
> :first-child {
|
||||
margin-top: 0;
|
||||
@@ -24,10 +24,15 @@ Markdown
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: var(--#{$prefix}font-weight-bold);
|
||||
}
|
||||
|
||||
h2, h3, h4, h5, h6 {
|
||||
margin-top: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
> table {
|
||||
@extend .table, .table-bordered;
|
||||
font-size: var(--#{$prefix}body-font-size);
|
||||
@extend .table, .table-bordered, .table-sm;
|
||||
}
|
||||
|
||||
> blockquote {
|
||||
@@ -39,5 +44,10 @@ Markdown
|
||||
> img,
|
||||
> p > img {
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
border: 1px solid var(--#{$prefix}border-color);
|
||||
}
|
||||
|
||||
pre {
|
||||
max-height: 20rem;
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,7 @@
|
||||
.nav {
|
||||
--#{$prefix}nav-link-hover-bg: #{color-transparent(var(--#{$prefix}nav-link-color), 0.04)};
|
||||
}
|
||||
|
||||
.nav-vertical {
|
||||
&,
|
||||
.nav {
|
||||
@@ -13,11 +17,12 @@
|
||||
|
||||
.nav-link.active,
|
||||
.nav-item.show .nav-link {
|
||||
font-weight: var(--#{$prefix}font-weight-medium);
|
||||
font-weight: var(--#{$prefix}font-weight-bold);
|
||||
color: var(--#{$prefix}nav-link-active-color);
|
||||
}
|
||||
|
||||
&.nav-pills {
|
||||
margin: 0 (-$nav-link-padding-x);
|
||||
margin: 0 calc(-1 * $nav-link-padding-x);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +44,10 @@
|
||||
margin: 0 0 calc(-1 * #{$nav-bordered-border-width});
|
||||
border: 0;
|
||||
border-bottom: $nav-bordered-link-active-border-width var(--#{$prefix}border-style) transparent;
|
||||
|
||||
&:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-link.active,
|
||||
@@ -46,13 +55,18 @@
|
||||
color: $nav-bordered-link-active-color;
|
||||
border-color: $nav-bordered-link-active-border-color;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-underline {
|
||||
.nav-link {
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
display: flex;
|
||||
@include transition(color $transition-time, background-color $transition-time);
|
||||
align-items: center;
|
||||
@include transition(color $transition-time, background-color $transition-time);
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.offcanvas-header {
|
||||
border-bottom: var(--#{$prefix}border-width) var(--#{$prefix}border-style) $border-color-translucent;
|
||||
border-bottom: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
|
||||
}
|
||||
|
||||
.offcanvas-footer {
|
||||
|
||||
@@ -1,23 +1,28 @@
|
||||
.pagination {
|
||||
margin: 0;
|
||||
--#{$prefix}pagination-gap: .25rem;
|
||||
user-select: none;
|
||||
gap: var(--#{$prefix}pagination-gap);
|
||||
line-height: var(--#{$prefix}body-line-height);
|
||||
}
|
||||
|
||||
.page-link {
|
||||
min-width: 1.75rem;
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
min-width: 2rem;
|
||||
border-radius: var(--#{$prefix}pagination-border-radius);
|
||||
}
|
||||
|
||||
.page-item:not(.active) .page-link:hover {
|
||||
background: var(--#{$prefix}pagination-hover-bg);
|
||||
}
|
||||
|
||||
.page-text {
|
||||
padding-left: .5rem;
|
||||
padding-right: .5rem;
|
||||
}
|
||||
|
||||
.page-item {
|
||||
text-align: center;
|
||||
|
||||
&:not(.active) {
|
||||
.page-link {
|
||||
&:hover {
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.page-prev,
|
||||
&.page-next {
|
||||
flex: 0 0 50%;
|
||||
@@ -54,3 +59,13 @@
|
||||
color: $pagination-disabled-color;
|
||||
}
|
||||
}
|
||||
|
||||
.pagination-outline {
|
||||
--#{$prefix}pagination-border-color: var(--#{$prefix}border-color);
|
||||
--#{$prefix}pagination-disabled-border-color: var(--#{$prefix}border-color);
|
||||
--#{$prefix}pagination-border-width: 1px;
|
||||
}
|
||||
|
||||
.pagination-circle {
|
||||
--#{$prefix}pagination-border-radius: var(--tblr-border-radius-pill);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
@use "sass:map";
|
||||
|
||||
$payment-icons: ("2c2p", "2checkout", "adyen", "affirm", "alipay-plus", "alipay", "allegro-pay", "amazon-pay", "amazon", "americanexpress", "applepay", "authorize", "autopay", "bancontact", "binance-usd", "bitcoin", "bitpay", "bkash", "blik", "braintree", "cash-app", "chime", "cirrus", "clickandbuy", "coinkite", "dinersclub", "directdebit", "discover", "dotpay", "dwolla", "easypaisa", "ebay", "elo", "epayco", "esewa", "ethereum", "eway", "fonepay", "giropay", "google-pay", "googlewallet", "hubspot", "ingenico", "ideal", "imepay", "jcb", "khalti", "klarna", "laser", "litecoin", "maestro", "mastercard", "mercado-pago", "metamask", "mir", "monero", "moneygram", "neteller", "ogone", "okpay", "opensea", "paybox", "payconiq", "payka", "payline", "paymill", "payone", "payoneer", "paypal", "paypo", "paysafe", "paysafecard", "payu", "payza", "poli", "przelewy24", "revolut-pay", "ripple", "sage", "samsung-pay", "sepa", "shop-pay", "shopify", "skrill", "solana", "solo", "spingo", "square", "stax", "stripe", "switch", "tether", "tpay", "troy", "true-usd", "ukash", "unionpay", "venmo", "verifone", "verisign", "visa", "we-chat-pay", "webmoney", "westernunion", "wise", "worldpay", "zelle");
|
||||
|
||||
.payment {
|
||||
@@ -23,6 +25,6 @@ $payment-icons: ("2c2p", "2checkout", "adyen", "affirm", "alipay-plus", "alipay"
|
||||
|
||||
@each $payment-size, $size in $payment-sizes {
|
||||
.payment-#{$payment-size} {
|
||||
height: map-get($size, size);
|
||||
height: map.get($size, size);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
.signature {
|
||||
--#{$prefix}signature-padding: var(--#{$prefix}spacer-1);
|
||||
--#{$prefix}signature-border-radius: var(--#{$prefix}border-radius);
|
||||
border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color);
|
||||
padding: var(--#{$prefix}spacer-1);
|
||||
padding: var(--#{$prefix}signature-padding);
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
}
|
||||
|
||||
.signature-canvas {
|
||||
border: var(--#{$prefix}border-width) dashed var(--#{$prefix}border-color);
|
||||
border-radius: var(--#{$prefix}border-radius-sm);
|
||||
border-radius: calc(var(--#{$prefix}signature-border-radius) - var(--#{$prefix}signature-padding));
|
||||
display: block;
|
||||
cursor: crosshair;
|
||||
width: 100%;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
@use "sass:map";
|
||||
|
||||
$apps: (
|
||||
"apple",
|
||||
"discord",
|
||||
@@ -47,6 +49,6 @@ $apps: (
|
||||
|
||||
@each $flag-size, $size in $flag-sizes {
|
||||
.social-#{$flag-size} {
|
||||
height: map-get($size, size);
|
||||
height: map.get($size, size);
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,3 @@
|
||||
margin-left: .25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.star {
|
||||
|
||||
}
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
@each $name, $color in $extra-colors {
|
||||
.steps-#{$name} {
|
||||
--#{$prefix}steps-color: var(--#{$prefix}#{$name});
|
||||
|
||||
&-lt {
|
||||
--#{$prefix}steps-color: var(--#{$prefix}#{$name}-lt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -122,7 +122,9 @@
|
||||
// Slide variant
|
||||
.switch-icon-slide-up,
|
||||
.switch-icon-slide-left,
|
||||
.switch-icon-slide-start,
|
||||
.switch-icon-slide-right,
|
||||
.switch-icon-slide-end,
|
||||
.switch-icon-slide-down {
|
||||
overflow: hidden;
|
||||
|
||||
@@ -150,7 +152,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
.switch-icon-slide-left {
|
||||
.switch-icon-slide-left,
|
||||
.switch-icon-slide-start {
|
||||
.switch-icon-a {
|
||||
transform: translateX(0);
|
||||
}
|
||||
@@ -170,7 +173,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
.switch-icon-slide-right {
|
||||
.switch-icon-slide-right,
|
||||
.switch-icon-slide-end {
|
||||
.switch-icon-a {
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
@@ -112,10 +112,9 @@ Table sort
|
||||
display: block;
|
||||
width: 100%;
|
||||
text-align: inherit;
|
||||
@include transition(color $transition-time);
|
||||
|
||||
margin: (-$table-th-padding-y) (-$table-th-padding-x);
|
||||
margin: calc(-1 * $table-th-padding-y) calc(-1 * $table-th-padding-x);
|
||||
padding: $table-th-padding-y $table-th-padding-x;
|
||||
@include transition(color $transition-time);
|
||||
|
||||
&:hover,
|
||||
&.asc,
|
||||
@@ -154,8 +153,24 @@ Table sort
|
||||
//
|
||||
.table-selectable {
|
||||
tbody tr {
|
||||
.on-checked {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.on-unchecked {
|
||||
display: initial;
|
||||
}
|
||||
|
||||
&:has(.table-selectable-check:checked) {
|
||||
background-color: $table-active-bg;
|
||||
|
||||
.on-checked {
|
||||
display: initial;
|
||||
}
|
||||
|
||||
.on-unchecked {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
padding: 0 0.5rem;
|
||||
background: var(--#{$prefix}bg-surface);
|
||||
box-shadow: var(--#{$prefix}box-shadow-input);
|
||||
box-shadow: var(--#{$prefix}shadow-input);
|
||||
gap: .5rem;
|
||||
|
||||
.btn-close {
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
justify-content: center;
|
||||
width: var(--#{$prefix}timeline-icon-size, $avatar-size);
|
||||
height: var(--#{$prefix}timeline-icon-size, $avatar-size);
|
||||
background: var(--#{$prefix}gray-200);
|
||||
background: var(--#{$prefix}bg-surface-secondary);
|
||||
color: var(--#{$prefix}secondary);
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
z-index: 5
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
@import "typo/hr";
|
||||
|
||||
.lead {
|
||||
line-height: 1.4;
|
||||
color: var(--#{$prefix}secondary);
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration-skip-ink: auto;
|
||||
color: color-mix(in srgb, transparent, var(--#{$prefix}link-color) var(--#{$prefix}link-opacity, 100%));
|
||||
|
||||
&:hover {
|
||||
color: color-mix(in srgb, transparent, var(--#{$prefix}link-hover-color) var(--#{$prefix}link-opacity, 100%));
|
||||
}
|
||||
}
|
||||
|
||||
h1,
|
||||
@@ -65,6 +71,10 @@ h6,
|
||||
line-height: var(--#{$prefix}line-height-h6);
|
||||
}
|
||||
|
||||
.fs-base {
|
||||
font-size: var(--#{$prefix}body-font-size);
|
||||
}
|
||||
|
||||
strong,
|
||||
.strong,
|
||||
b {
|
||||
@@ -107,10 +117,14 @@ dl {
|
||||
}
|
||||
|
||||
pre {
|
||||
--#{$prefix}scrollbar-color: #{$pre-color};
|
||||
padding: $pre-padding;
|
||||
background: $pre-bg;
|
||||
color: $pre-color;
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
line-height: $line-height-base;
|
||||
|
||||
@include scrollbar;
|
||||
|
||||
code {
|
||||
background: transparent;
|
||||
@@ -157,7 +171,7 @@ Selection
|
||||
*/
|
||||
::selection,
|
||||
.text-selected {
|
||||
background-color: color-transparent(var(--#{$prefix}primary), .1);
|
||||
background-color: color-transparent(var(--#{$prefix}primary), 0.1);
|
||||
}
|
||||
|
||||
.text-selected {
|
||||
@@ -179,6 +193,17 @@ a:hover:has(.icon) {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.link-hoverable {
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
transition: background-color 0.15s ease-in-out;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
color: var(--#{$prefix}primary);
|
||||
background: color-transparent(var(--#{$prefix}secondary), 0.04);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Subheader
|
||||
*/
|
||||
@@ -191,7 +216,7 @@ Mentions
|
||||
*/
|
||||
.mention {
|
||||
display: inline-block;
|
||||
box-shadow: var(--tblr-box-shadow-border);
|
||||
box-shadow: var(--#{$prefix}shadow-border);
|
||||
border-radius: var(--#{$prefix}border-radius-pill);
|
||||
line-height: calc(16em / 12);
|
||||
font-size: calc(12em / 14);
|
||||
@@ -199,11 +224,11 @@ Mentions
|
||||
background: var(--#{$prefix}bg-surface-tertiary);
|
||||
padding: calc(2em / 12) calc(8em / 12);
|
||||
font-weight: var(--#{$prefix}font-weight-medium);
|
||||
|
||||
|
||||
@at-root a#{&} {
|
||||
cursor: pointer;
|
||||
|
||||
&:hover,
|
||||
&:hover,
|
||||
&.hover {
|
||||
background: var(--#{$prefix}bg-surface-secondary);
|
||||
text-decoration: underline;
|
||||
@@ -220,7 +245,7 @@ Mentions
|
||||
margin: calc(-2em / 12) calc(4em / 12) 0 calc(-4em / 12);
|
||||
display: inline-flex;
|
||||
background: no-repeat center center/cover;
|
||||
box-shadow: var(--#{$prefix}box-shadow-border);
|
||||
box-shadow: var(--#{$prefix}shadow-border);
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -243,10 +268,63 @@ $text-variants: (
|
||||
|
||||
@each $variant, $color in $text-variants {
|
||||
.text-#{$variant} {
|
||||
background: color-transparent($color, .04);
|
||||
background: color-transparent($color, 0.04);
|
||||
background: color-transparent($color, 4%);
|
||||
text-decoration: underline;
|
||||
text-decoration-thickness: 1px;
|
||||
text-decoration-color: $color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.steps {
|
||||
--#{$prefix}steps-padding: 2rem;
|
||||
--#{$prefix}steps-item-size: 1.5rem;
|
||||
margin-left: 1rem;
|
||||
padding-left: var(--#{$prefix}steps-padding);
|
||||
counter-reset: step;
|
||||
border-left: 1px solid var(--#{$prefix}border-color);
|
||||
margin-bottom: 2rem;
|
||||
|
||||
h3 {
|
||||
counter-increment: step;
|
||||
|
||||
&:not(:first-child) {
|
||||
margin-top: 2.5rem !important;
|
||||
}
|
||||
|
||||
&:before {
|
||||
content: counter(step);
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
margin-top: 1px;
|
||||
margin-left: calc(-1 * var(--#{$prefix}steps-padding) - var(--#{$prefix}steps-item-size) / 2);
|
||||
width: var(--#{$prefix}steps-item-size);
|
||||
height: var(--#{$prefix}steps-item-size);
|
||||
text-align: center;
|
||||
color: var(--#{$prefix}body-color);
|
||||
border: 1px solid var(--#{$prefix}border-color);
|
||||
background: var(--#{$prefix}bg-surface);
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
line-height: calc(var(--#{$prefix}steps-item-size) - 2px);
|
||||
font-size: var(--#{$prefix}font-size-h4);
|
||||
font-weight: var(--#{$prefix}font-weight-bold);
|
||||
}
|
||||
}
|
||||
|
||||
>:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.callout {
|
||||
margin-bottom: 1.5rem;
|
||||
border: 1px solid var(--#{$prefix}primary-200);
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
padding: .5rem 1rem;
|
||||
background: var(--#{$prefix}primary-lt);
|
||||
|
||||
&>:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ Color Input
|
||||
height: 1.5rem;
|
||||
color: $white;
|
||||
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) $input-border-color-translucent;
|
||||
border-radius: 3px;
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .05);
|
||||
|
||||
&:before {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
Image check
|
||||
*/
|
||||
.form-imagecheck {
|
||||
--#{$prefix}form-imagecheck-radius: var(--#{$prefix}border-radius);
|
||||
position: relative;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
@@ -19,7 +20,7 @@ Image check
|
||||
margin: 0;
|
||||
user-select: none;
|
||||
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color);
|
||||
border-radius: 3px;
|
||||
border-radius: var(--#{$prefix}form-imagecheck-radius);
|
||||
|
||||
.form-imagecheck-input:focus ~ & {
|
||||
border-color: var(--#{$prefix}primary);
|
||||
@@ -73,13 +74,13 @@ Image check
|
||||
@include transition(opacity $transition-time);
|
||||
|
||||
&:first-child {
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 2px;
|
||||
border-top-left-radius: calc(var(--#{$prefix}form-imagecheck-radius) - 1px);
|
||||
border-top-right-radius: calc(var(--#{$prefix}form-imagecheck-radius) - 1px);
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-bottom-right-radius: 2px;
|
||||
border-bottom-left-radius: 2px;
|
||||
border-bottom-right-radius: calc(var(--#{$prefix}form-imagecheck-radius) - 1px);
|
||||
border-bottom-left-radius: calc(var(--#{$prefix}form-imagecheck-radius) - 1px);
|
||||
}
|
||||
|
||||
.form-imagecheck:hover &,
|
||||
|
||||
@@ -42,7 +42,7 @@ Select group
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) $input-border-color;
|
||||
border-radius: 3px;
|
||||
border-radius: var(--#{$prefix}border-radius);
|
||||
box-shadow: $input-box-shadow;
|
||||
@include transition(border-color $transition-time, background $transition-time, color $transition-time);
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user