1
0
mirror of https://github.com/tabler/tabler.git synced 2025-12-21 17:34:25 +04:00

Merge branch 'main' of https://github.com/tabler/tabler into dev

 Conflicts:
	gulpfile.js
This commit is contained in:
codecalm
2022-01-29 15:01:52 +01:00
24 changed files with 685 additions and 190 deletions

View File

@@ -3,7 +3,7 @@ name: Build and deploy preview
on:
push:
branches:
- dev
- main
- dev-gh
env:

View File

@@ -5,16 +5,16 @@ GEM
public_suffix (>= 2.0.2, < 5.0)
colorator (1.1.0)
concurrent-ruby (1.1.9)
em-websocket (0.5.2)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
http_parser.rb (~> 0)
eventmachine (1.2.7)
ffi (1.15.4)
ffi (1.15.5)
forwardable-extended (2.6.0)
htmlbeautifier (1.3.1)
htmlbeautifier (1.4.1)
htmlcompressor (0.4.0)
http_parser.rb (0.6.0)
i18n (1.8.10)
http_parser.rb (0.8.0)
i18n (1.9.1)
concurrent-ruby (~> 1.0)
jekyll (4.2.1)
addressable (~> 2.4)
@@ -50,7 +50,7 @@ GEM
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.3)
listen (3.7.0)
listen (3.7.1)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
@@ -62,7 +62,7 @@ GEM
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.5)
rouge (3.26.1)
rouge (3.27.0)
safe_yaml (1.0.5)
sassc (2.4.0)
ffi (~> 1.9)

View File

@@ -174,7 +174,7 @@ gulp.task('clean-jekyll', (cb) => {
* Compile SASS to CSS and move it to dist directory
*/
gulp.task('sass', () => {
const g = gulp
return gulp
.src(argv.withPlugins || BUILD ? `${srcDir}/scss/!(_)*.scss` : `${srcDir}/scss/+(tabler|demo).scss`)
.pipe(debug())
.pipe(sass({
@@ -194,19 +194,17 @@ gulp.task('sass', () => {
.pipe(gulp.dest(`${distDir}/css/`))
.pipe(browserSync.reload({
stream: true,
}))
}));
})
if (BUILD) {
g
gulp.task('css-rtl', function () {
return gulp.src(`${distDir}/css/*.css`)
.pipe(rtlcss())
.pipe(rename((path) => {
path.basename += '.rtl'
}))
.pipe(gulp.dest(`${distDir}/css/`))
}
return g
})
});
/**
* CSS minify
@@ -530,6 +528,6 @@ gulp.task('clean', gulp.series('clean-dirs', 'clean-jekyll'))
gulp.task('start', gulp.series('clean', 'sass', 'js', 'js-demo', 'mjs', 'build-jekyll', gulp.parallel('watch-jekyll', 'watch', 'browser-sync')))
gulp.task('build-core', gulp.series('build-on', 'clean', 'sass', 'css-minify', 'js', 'js-demo', 'mjs', 'copy-images', 'copy-fonts', 'copy-libs', 'add-banner'))
gulp.task('build-core', gulp.series('build-on', 'clean', 'sass', 'css-rtl', 'css-minify', 'js', 'js-demo', 'mjs', 'copy-images', 'copy-fonts', 'copy-libs', 'add-banner'))
gulp.task('build-demo', gulp.series('build-on', 'build-jekyll', 'copy-static', 'copy-dist', 'build-cleanup', 'build-purgecss'/*, 'build-critical'*/))
gulp.task('build', gulp.series('build-core', 'build-demo'))

View File

@@ -1,3 +1,18 @@
active-users-2:
type: line
height: 18
datetime: true
series:
- name: Mobile
color: blue
data: [ 4164, 4652, 4817, 4841, 4920, 5439, 5486, 5498, 5512, 5538, 5841, 5877, 6086, 6146, 6199, 6431, 6704, 7939, 8127, 8296, 8322, 8389, 8411, 8502, 8868, 8977, 9273, 9325, 9345, 9430 ]
- name: Desktop
color: azure
data: [ 2164, 2292, 2386, 2430, 2528, 3045, 3255, 3295, 3481, 3604, 3688, 3840, 3932, 3949, 4003, 4298, 4424, 4869, 4922, 4973, 5155, 5267, 5566, 5689, 5692, 5758, 5773, 5799, 5960, 6000 ]
- name: Tablet
color: green
data: [ 1069, 1089, 1125, 1141, 1162, 1179, 1185, 1216, 1274, 1322, 1346, 1395, 1439, 1564, 1581, 1590, 1656, 1815, 1868, 2010, 2133, 2179, 2264, 2265, 2278, 2343, 2354, 2456, 2472, 2480 ]
demo-pie:
type: donut
demo: true
@@ -73,7 +88,7 @@ social-referrals:
demo: false
type: line
datetime: true
height: 12
height: 18
legend: true
show-x: true
name: Social referrals

View File

@@ -21,9 +21,15 @@ base:
url: buttons.html
title: Buttons
cards:
url: cards.html
title: Cards
cards-masonry:
children:
base:
url: cards.html
title: Sample cards
actions:
url: card-actions.html
title: Card actions
masonry:
url: cards-masonry.html
title: Cards Masonry
colors:

View File

@@ -0,0 +1,5 @@
{% assign width = include.width | default: 400 %}
{% assign height = include.height | default: 200 %}
<div class="card-body p-0{% if include.class %} {{ include.class }}{% endif %}">
{% include ui/svg.html width=width height=height ratio=include.ratio class="w-100" %}
</div>

View File

@@ -8,7 +8,7 @@
{% if include.title %}
<h3 class="card-title">{{ include.title }}</h3>
{% endif %}
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam deleniti fugit incidunt, iste, itaque minima
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam deleniti fugit incidunt, iste, itaque minima
neque pariatur perferendis sed suscipit velit vitae voluptatem.</p>
</div>
</div>

View File

@@ -18,7 +18,7 @@
<div id="tab-{{ id }}-{{ tab }}" class="card tab-pane{% if forloop.first %} active show{% endif %}">
<div class="card-body">
<div class="card-title">Content of tab #{{ tab }}</div>
<p>
<p class="text-muted">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci, alias aliquid distinctio dolorem expedita, fugiat hic magni molestiae molestias odit.
</p>
</div>

View File

@@ -8,7 +8,7 @@
{% else %}
{% if include.img-top %}
<div class="card-img-top img-responsive img-responsive-16by9" style="background-image: url({{ site.base }}/static/photos/9f36332564ca271d.jpg)"></div>
<div class="card-img-top img-responsive img-responsive-21x9" style="background-image: url({{ site.base }}/static/photos/9f36332564ca271d.jpg)"></div>
{% endif %}
{% if include.status-top %}
@@ -44,9 +44,9 @@
{% endif %}
{% if include.body %}
<p>{{ include.body }}</p>
<p class="text-muted">{{ include.body }}</p>
{% else %}
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam deleniti fugit incidunt, iste, itaque minima
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam deleniti fugit incidunt, iste, itaque minima
neque pariatur perferendis sed suscipit velit vitae voluptatem.</p>
{% endif %}
@@ -104,7 +104,7 @@
{% endif %}
{% if include.img-bottom %}
<div class="card-img-bottom img-responsive img-responsive-16by9" style="background-image: url({{ site.base }}/static/photos/56614e12b2a7bd68.jpg)"></div>
<div class="card-img-bottom img-responsive img-responsive-21x9" style="background-image: url({{ site.base }}/static/photos/56614e12b2a7bd68.jpg)"></div>
{% endif %}
{% if include.progress %}

View File

@@ -1,5 +1,5 @@
<div class="mb-3">
<label class="form-label">Validation States</label>
<label class="form-label">Validation States {% if include.lite %}(lite){% endif %}</label>
<input type="text" class="form-control is-valid{% if include.lite %} is-valid-lite{% endif %} mb-2" placeholder="Valid State..">
<input type="text" class="form-control is-invalid{% if include.lite %} is-invalid-lite{% endif %}" placeholder="Invalid State..">
{% unless include.lite %}<div class="invalid-feedback">Invalid feedback</div>{% endunless %}

View File

@@ -1,12 +1,12 @@
{% assign menu = include.menu | default: 'Import,Export,Download,Another action' | split: ',' %}
{% assign icon = include.icon | default: 'dots-vertical' %}
<div class="dropdown{% if include.class %} {{ include.class }}{% endif %}">
<a href="#" class="card-dropdown" data-bs-toggle="dropdown" aria-expanded="false">
<a href="#" class="btn-action" data-bs-toggle="dropdown" aria-expanded="false">
{% include ui/icon.html icon=icon %}
</a>
<div class="dropdown-menu dropdown-menu-end">
{% for item in menu %}
<a href="#" class="dropdown-item">{{ item }}</a>
{% endfor %}
<a href="#" class="dropdown-item">Import</a>
<a href="#" class="dropdown-item">Export</a>
<a href="#" class="dropdown-item">Download</a>
<a href="#" class="dropdown-item text-danger">Delete</a>
</div>
</div>

View File

@@ -0,0 +1,7 @@
{% assign width = include.width | default: include.size | default: 20 %}
{% assign height = include.height | default: include.size | default: 20 %}
<svg xmlns="http://www.w3.org/2000/svg"{% if include.class %} class="{{ include.class }}"{% endif %} preserveAspectRatio="{% if include.ratio %}xMidYMid meet{% else %}none{% endif %}" width="{{ width }}" height="{% if include.ratio %}auto{% else %}{{ height }}{% endif %}" viewBox="0 0 {{ width }} {{ height }}" stroke="var(--tblr-border-color, #b8cef1)">
<!-- <rect x=".5" y=".5" width="{{ width | minus: 1 }}" height="{{ height | minus: 1 }}" fill="#fff" rx="2"></rect>-->
<line x1="0" y1="0" x2="{{ width }}" y2="{{ height }}"></line>
<line x1="0" y1="{{ height }}" x2="{{ width }}" y2="0"></line>
</svg>

145
src/pages/card-actions.html Normal file
View File

@@ -0,0 +1,145 @@
---
title: Card actions
page-header: Card actions
menu: base.cards.actions
---
<div class="row row-cards">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h3 class="card-title">Sample card</h3>
</div>
{% include cards/body-placeholder.html %}
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h3 class="card-title">Card with action</h3>
<div class="card-actions">
{% include ui/button.html color="primary" icon="plus" text="Add new" %}
</div>
</div>
{% include cards/body-placeholder.html %}
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h3 class="card-title">Cart title</h3>
<div class="card-actions">
{% include ui/button.html icon="phone" text="Phone" %}
{% include ui/button.html icon="mail" text="Email" %}
</div>
</div>
{% include cards/body-placeholder.html %}
</div>
</div>
{% assign person = site.data.people[0] %}
<div class="col-md-6">
<div class="card">
<div class="card-header">
<div>
<div class="row align-items-center">
<div class="col-auto">
{% include ui/avatar.html person=person %}
</div>
<div class="col">
<div class="card-title">{{ person.full_name }}</div>
<div class="card-subtitle">{{ person.job_title }}</div>
</div>
</div>
</div>
<div class="card-actions">
{% include ui/button.html icon="phone" text="Phone" %}
{% include ui/button.html icon="mail" text="Email" %}
</div>
</div>
{% include cards/body-placeholder.html %}
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<div>
<h3 class="card-title">
With description
</h3>
<p class="card-subtitle">
Lorem ipsum dolor sit amet consectetur adipisicing.
</p>
</div>
</div>
{% include cards/body-placeholder.html %}
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<div>
<h3 class="card-title">
With description and action
</h3>
<p class="card-subtitle">
Lorem ipsum dolor sit amet consectetur adipisicing.
</p>
</div>
<div class="card-actions">
{% include ui/button.html color="primary" text="Create new job" %}
</div>
</div>
{% include cards/body-placeholder.html %}
</div>
</div>
{% assign person = site.data.people[3] %}
<div class="col-md-6">
<div class="card">
<div class="card-header">
<div>
<div class="row align-items-center">
<div class="col-auto">
{% include ui/avatar.html person=person %}
</div>
<div class="col">
<div class="card-title">{{ person.full_name }}</div>
<div class="card-subtitle">{{ person.job_title }}</div>
</div>
</div>
</div>
<div class="card-actions">
<div class="dropdown">
<a href="#" class="btn-action dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{% include ui/icon.html icon="dots-vertical" %}</a>
<div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="#">Edit user</a>
<a class="dropdown-item" href="#">Change permissions</a>
<a class="dropdown-item text-danger" href="#">Delete user</a>
</div>
</div>
</div>
</div>
{% include cards/body-placeholder.html %}
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h3 class="card-title">Card actions</h3>
<div class="card-actions btn-actions">
<a href="#" class="btn-action" >{% include ui/icon.html icon="refresh" %}</a>
<a href="#" class="btn-action" >{% include ui/icon.html icon="chevron-up" %}</a>
<a href="#" class="btn-action" >{% include ui/icon.html icon="dots-vertical" %}</a>
<a href="#" class="btn-action" >{% include ui/icon.html icon="x" %}</a>
</div>
</div>
{% include cards/body-placeholder.html %}
</div>
</div>
</div>

View File

@@ -1,43 +1,19 @@
---
title: Cards Masonry
page-header: Cards Masonry
menu: base.cards-masonry
menu: base.cards.masonry
libs: masonry
---
{% assign heights = '200,150,400,300,350,600,700,200,150,250,50,400,300,200' | split: ',' %}
<div class="row row-cards" data-masonry='{"percentPosition": true }'>
{% for height in heights %}
<div class="col-sm-6 col-lg-4">
{% include cards/card.html body="This is some text within a card body." %}
<div class="card">
{% include cards/body-placeholder.html height=height %}
</div>
<div class="col-sm-6 col-lg-4">
{% include cards/card.html img-bottom=true title="Card with bottom image" %}
</div>
<div class="col-sm-6 col-lg-4">
{% include cards/card.html footer-elements="more,>switch" %}
</div>
<div class="col-sm-6 col-lg-4">
{% include cards/card.html footer-elements=">avatars" %}
</div>
<div class="col-sm-6 col-lg-4">
{% include cards/card.html header-tabs=true %}
</div>
<div class="col-sm-6 col-lg-4">
{% include cards/card.html header-pills=true %}
</div>
<div class="col-sm-6 col-lg-4">
{% include cards/card.html empty=true %}
</div>
<div class="col-sm-6 col-lg-4">
{% include cards/card.html progress=true title="Card with progress bar" %}
</div>
<div class="col-sm-6 col-lg-4">
{% include cards/card.html title="Card title" subtitle="Card subtitle" %}
</div>
<div class="col-sm-6 col-lg-4">
{% include cards/card.html header=true %}
</div>
<div class="col-sm-6 col-lg-4">
{% include cards/credit-card.html %}
</div>
{% endfor %}
</div>

View File

@@ -1,15 +1,90 @@
---
title: Cards
page-header: Cards
menu: base.cards
menu: base.cards.base
---
{% assign cards-stack = 'First,Second,Third' | split: ',' %}
{% assign cards-stack-colors = 'red,green,blue' | split: ',' %}
<div class="row row-cards">
<div class="col-md-6 col-xl-4">
<div class="row row-cards">
<div class="col-12">{% include cards/card.html body="This is some text within a card body." %}</div>
<div class="col-12 border-0">{% include cards/card.html body="This is a borderless card." %}</div>
<div>
<div class="col-md-6 col-lg-3">
<div class="card">
<div class="card-header">
<h3 class="card-title">Card title</h3>
</div>
<div class="card-body">Simple card</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card">
<div class="card-header card-header-light">
<h3 class="card-title">Card title</h3>
</div>
<div class="card-body">Card with header background</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card card-borderless">
<div class="card-body">
<h3 class="card-title">Card title</h3>
<div>Card without border</div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card">
<div class="card-header">
<h3 class="card-title">Card title <span class="card-subtitle">Subtitle</span></h3>
</div>
<div class="card-body">Card with title and subtitle</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<a href="#" class="card card-link">
<div class="card-body">Default hover effect</div>
</a>
</div>
<div class="col-md-6 col-lg-3">
<a href="#" class="card card-link card-link-rotate">
<div class="card-body">Rotate hover effect</div>
</a>
</div>
<div class="col-md-6 col-lg-3">
<a href="#" class="card card-link card-link-pop">
<div class="card-body">Pop hover effect</div>
</a>
</div>
<div class="col-md-6 col-lg-3">
</div>
<div class="col-md-6 col-lg-3">
<div class="card card-rotate-right">
<div class="card-body">Card rotate right</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card card-rotate-left">
<div class="card-body">Card rotate left</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card card-active">
<div class="card-body">
<p>This is a card with active state.</p>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card card-inactive">
<div class="card-body">
<p>This is some text inactive state.</p>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card">
<div class="card-stamp">
<div class="card-stamp-icon bg-yellow">
@@ -18,56 +93,188 @@ menu: base.cards
</div>
<div class="card-body">
<h3 class="card-title">Card with icon bg</h3>
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto at consectetur culpa ducimus eum fuga fugiat, ipsa iusto, modi nostrum recusandae reiciendis saepe.</p>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card bg-primary-lt">
<div class="card-body">
<h3 class="card-title">Card with primary light background</h3>
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto at consectetur culpa ducimus eum fuga fugiat, ipsa iusto, modi nostrum recusandae reiciendis saepe.</p>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card bg-primary">
<div class="card-stamp">
<div class="card-stamp-icon bg-white text-primary">
{% include ui/icon.html icon="star" %}
</div>
</div>
<div class="card-body">
<h3 class="card-title">Card with background and icon</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto at consectetur culpa ducimus eum fuga fugiat, ipsa iusto, modi nostrum recusandae reiciendis saepe.</p>
</div>
</div>
</div>
<div class="col-12">{% include cards/card.html img-bottom=true title="Card with bottom image" %}</div>
<div class="col-12">{% include cards/card.html active=true body="This is a card with active state." %}</div>
<div class="col-12">{% include cards/card.html inactive=true body="This is some text inactive state." %}</div>
<div class="col-12">{% include cards/card.html footer-elements="more,>switch" %}</div>
<div class="col-12">{% include cards/card.html footer-elements=">avatars" %}</div>
<div class="col-12">{% include cards/card.html header-tabs=true %}</div>
<div class="col-12">{% include cards/card.html header-pills=true %}</div>
<div class="col-12">{% include cards/card.html progress=true title="Card with progress bar" %}</div>
<div class="col-12">{% include cards/card.html empty=true %}</div>
<div class="col-12">{% include cards/card-tabs.html count=4 %}</div>
<div class="col-12">{% include cards/card-tabs.html count=4 borderless=true id="borderless" %}</div>
<div class="col-12">{% include cards/card-tabs.html count=4 bottom=true id="bottom" %}</div>
<div class="col-md-6 col-lg-3">
{% include cards/card.html status-top="danger" title="Card with top status" %}
</div>
<div class="col-md-6 col-lg-3">
{% include cards/card.html status-bottom="success" title="Card with bottom status" %}
</div>
<div class="col-md-6 col-lg-3">
{% include cards/card.html status-left="primary" title="Card with side status" %}
</div>
<div class="col-md-6 col-xl-8">
<div class="row row-cards">
<div class="col-12">{% include cards/card-image.html title="Card with left side image" %}</div>
<div class="col-12">{% include cards/card-image.html title="Card with right side image" right=true img="de6d0fd1feebb6a2.jpg" %}</div>
<div class="col-12">{% include cards/card-group.html %}</div>
<div class="col-md-6 col-lg-3">
<div class="card">
<div class="ribbon ribbon-top bg-yellow">{% include ui/icon.html icon="star" %}</div>
<div class="card-body">
<h3 class="card-title">Card with top ribbon</h3>
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto at consectetur culpa ducimus eum fuga fugiat, ipsa iusto, modi nostrum recusandae reiciendis saepe.</p>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card">
<div class="ribbon bg-red">NEW</div>
<div class="card-body">
<h3 class="card-title">Card with text ribbon</h3>
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto at consectetur culpa ducimus eum fuga fugiat, ipsa iusto, modi nostrum recusandae reiciendis saepe.</p>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
{% include cards/card.html progress=true title="Card with progress bar" %}
</div>
<div class="col-md-6 col-lg-3">
{% include cards/card.html class="card-stacked" title="Stacked card" %}
</div>
<div class="col-lg-6">
{% include cards/card-image.html title="Card with left side image" %}
</div>
<div class="col-lg-6">
{% include cards/card-image.html title="Card with right side image" right=true img="de6d0fd1feebb6a2.jpg" %}
</div>
<div class="col-md-6 col-lg-3">
{% include cards/card.html img-top=true title="Card with top image" %}
</div>
<div class="col-md-6 col-lg-3">
{% include cards/card.html img-bottom=true title="Card with bottom image" %}
</div>
<div class="col-md-6 col-lg-3">
<div class="card">
<div class="card-body">
<h3 class="card-title">Card with footer</h3>
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam deleniti fugit incidunt, iste, itaque minima
neque pariatur perferendis sed suscipit velit vitae voluptatem.</p>
</div>
<div class="card-footer">
This is standard card footer
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card">
<div class="card-body">
<h3 class="card-title">Card with transparent footer</h3>
<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam deleniti fugit incidunt, iste, itaque minima
neque pariatur perferendis sed suscipit velit vitae voluptatem.</p>
</div>
<div class="card-footer card-footer-transparent">
This is transparent card footer
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">{% include cards/card.html title="Card with footer button" footer-button=true %}</div>
<div class="col-md-6 col-lg-3">{% include cards/card.html title="Card with footer buttons" footer-buttons=true %}</div>
<div class="col-md-6 col-lg-3">{% include cards/card.html footer-elements="more,>switch" %}</div>
<div class="col-md-6 col-lg-3">{% include cards/card.html footer-elements=">avatars" %}</div>
<div class="col-md-6 col-lg-4">{% include cards/card.html header-tabs=true %}</div>
<div class="col-md-6 col-lg-4">{% include cards/card.html header-pills=true %}</div>
<div class="col-md-6 col-lg-4">{% include cards/card-tabs.html count=4 %}</div>
<div class="col-md-6 col-lg-4">{% include cards/card-tabs.html count=4 bottom=true id="bottom" %}</div>
<div class="col-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">Cards inside card</h3>
</div>
<div class="card-body">
<div class="row row-cards">
<div class="col-xl-6">
<div class="row row-cards">
<div class="col-12">{% include cards/card.html img-top=true title="Card with top image" %}</div>
<div class="col-12">{% include cards/card.html button=true title="Card with button link" %}</div>
<div class="col-12">{% include cards/card.html status-top="danger" title="Card with top status" %}</div>
<div class="col-12">{% include cards/card.html status-bottom="success" title="Card with bottom status" %}</div>
<div class="col-12">{% include cards/card.html status-left="primary" title="Card with side status" %}</div>
<div class="col-12">{% include cards/card.html class="card-stacked" title="Stacked card" %}</div>
<div class="col-12">{% include cards/credit-card.html %}</div>
{% for i in cards-stack %}
<div class="col-md">
<div class="card">
<div class="card-status-top bg-{{ cards-stack-colors[forloop.index0] }}"></div>
<div class="card-header">
<h3 class="card-title">{{ i }} card</h3>
</div>
{% include cards/body-placeholder.html %}
</div>
</div>
<div class="col-xl-6">
<div class="row row-cards">
<div class="col-12">{% include cards/card.html title="Card title" subtitle="Card subtitle" %}</div>
<div class="col-12">{% include cards/card.html header=true %}</div>
<div class="col-12">{% include cards/card.html title="Card with footer" footer=true %}</div>
<div class="col-12">{% include cards/card.html title="Card with footer button" footer-button=true %}</div>
<div class="col-12">{% include cards/card.html title="Card with footer buttons" footer-buttons=true %}</div>
{% endfor %}
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="card-group">
{% for i in cards-stack %}
<div class="card">
<div class="card-header">
<h3 class="card-title">{{ i }} card</h3>
</div>
{% include cards/body-placeholder.html %}
</div>
{% endfor %}
</div>
</div>
<div class="col-12">
<div class="row row-cards row-deck">
<div class="col">
<div class="card">
<div class="card-header">
<h3 class="card-title">Card title</h3>
</div>
<div class="card-body">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</div>
<div class="card-footer">
Last updated 3 mins ago
</div>
</div>
</div>
<div class="col">
<div class="card">
<div class="card-header">
<h3 class="card-title">Card title</h3>
</div>
<div class="card-body">This card has supporting text below as a natural lead-in to additional content.</div>
<div class="card-footer">
Last updated 3 mins ago
</div>
</div>
</div>
<div class="col">
<div class="card">
<div class="card-header">
<h3 class="card-title">Card with very long content</h3>
</div>
<div class="card-body">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</div>
<div class="card-footer">
Last updated 3 mins ago
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4">{% include cards/card.html empty=true %}</div>
<div class="col-lg-4">{% include cards/credit-card.html %}</div>
</div>

View File

@@ -6,9 +6,52 @@ libs: apexcharts
---
<div class="row row-cards">
<div class="col-6">
<div class="card">
<div class="card-body">
<div class="d-flex">
<h3 class="card-title">Active users</h3>
<div class="ms-auto">
{% include parts/dropdown/days.html %}
</div>
</div>
<div class="row">
<div class="col">
{% include ui/chart.html chart-id="active-users-2" %}
</div>
<div class="col-md-auto">
<div class="divide-y divide-y-fill">
<div class="px-3">
<div class="text-muted">
<span class="status-dot bg-primary"></span> Mobile
</div>
<div class="h2">11,425</div>
</div>
<div class="px-3">
<div class="text-muted">
<span class="status-dot bg-azure"></span> Desktop
</div>
<div class="h2">6,458</div>
</div>
<div class="px-3">
<div class="text-muted">
<span class="status-dot bg-green"></span> Tablet
</div>
<div class="h2">3,985</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-4">
</div>
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="d-flex">

View File

@@ -164,5 +164,14 @@ body:not(.theme-dark) .hide-theme-light {
.apexcharts-radialbar-area {
stroke: $dark-mode-border-color;
}
.form-control.is-invalid,
.was-validated .form-control:invalid {
border-color: var(--#{$variable-prefix}danger);
}
.form-control.is-valid,
.was-validated .form-control:valid {
border-color: var(--#{$variable-prefix}success);
}
}

View File

@@ -1,8 +1,8 @@
@function theme-color-lighter($color, $transparent: false) {
@if ($transparent) {
@return rgba($color, .1);
@return rgba($color, .05);
} @else {
@return tint-color($color, 9%);
@return tint-color($color, 5%);
}
}

View File

@@ -75,11 +75,7 @@
.avatar-list-stacked {
.avatar {
margin-right: -.5rem !important;
box-shadow: 0 0 0 2px $white;
@at-root .card-footer & {
box-shadow: 0 0 0 2px $card-cap-bg;
}
box-shadow: 0 0 0 2px var(--#{$variable-prefix}card-bg);
}
}

View File

@@ -22,6 +22,7 @@
min-height: auto;
padding: 0;
border-radius: $border-radius-pill;
vertical-align: baseline;
}
.avatar {

View File

@@ -196,3 +196,49 @@
@extend %btn-ghost;
}
}
//
// Action button
//
.btn-action {
padding: 0;
border: 0;
color: $text-muted;
display: inline-flex;
width: 2rem;
height: 2rem;
align-items: center;
justify-content: center;
border-radius: $border-radius;
&:after {
content: none;
}
&:focus {
outline: none;
box-shadow: none;
}
&:hover,
&.show {
color: $body-color;
background: $body-bg;
}
&.show {
color: $primary;
}
.icon {
margin: 0;
width: 1.25rem;
height: 1.25rem;
font-size: 1.25rem;
stroke-width: 1;
}
}
.btn-actions {
display: flex;
}

View File

@@ -2,6 +2,7 @@
box-shadow: $card-shadow;
border: $card-border-width solid $card-border-color;
background: var(--#{$variable-prefix}card-bg, #{$card-bg});
@include transition(transform $transition-time ease-out, opacity $transition-time ease-out, box-shadow $transition-time ease-out);
@media print {
border: none;
@@ -10,13 +11,25 @@
@at-root a#{&} {
color: inherit;
@include transition(box-shadow $transition-time);
&:hover {
text-decoration: none;
box-shadow: $card-shadow-hover;
}
}
.card {
box-shadow: none;
}
}
// Card borderless
.card-borderless {
&,
.card-header,
.card-footer {
border-color: transparent;
}
}
// Card stamp
@@ -107,16 +120,6 @@
}
}
.card-link {
color: inherit;
&:hover {
color: inherit;
text-decoration: none;
box-shadow: 0 1px 6px 0 rgba(0, 0, 0, .08);
}
}
.card-btn {
display: flex;
align-items: center;
@@ -183,14 +186,15 @@
}
.card-actions {
margin-left: auto;
font-size: $h5-font-size;
margin: -.5rem -.5rem -.5rem auto;
padding-left: .5rem;
a {
text-decoration: none;
}
}
// Card header
.card-header {
color: inherit;
display: flex;
@@ -198,27 +202,64 @@
background: transparent;
}
.card-header-light {
border-bottom-color: transparent;
background: var(--#{$variable-prefix}light);
}
.card-header-tabs {
flex: 1;
margin: (- $card-spacer-y) (- $card-spacer-x);
margin: (- $card-spacer-y * .5) (- $card-spacer-x * .5) (- $card-spacer-y );
}
.card-header-pills {
flex: 1;
margin-top: -.5rem;
margin-bottom: -.5rem;
}
/*
Card footer
*/
// Card rotate
.card-rotate-left {
transform: rotate(-1.5deg);
}
.card-rotate-right {
transform: rotate(1.5deg);
}
// Card link
.card-link {
color: inherit;
&:hover {
color: inherit;
text-decoration: none;
box-shadow: 0 1px 6px 0 rgba(0, 0, 0, .08);
}
}
.card-link-rotate:hover {
transform: rotate(1.5deg);
opacity: 1
}
.card-link-pop:hover {
transform: translateY(-2px);
opacity: 1
}
// Card footer
.card-footer {
margin-top: auto;
}
.card-footer-gray {
border-top: 0;
background: $gray-50;
.card-footer-transparent {
background: transparent;
border-color: transparent;
padding-top: 0;
}
// Card progress
.card-progress {
height: .25rem;
@@ -248,7 +289,7 @@ Card footer
}
.card-header & {
margin: .125rem 0;
margin: 0;
}
}
@@ -256,9 +297,15 @@ Card footer
margin-top: divide(-$card-spacer-y, 2);
margin-bottom: $card-title-spacer-y;
color: $text-muted;
font-weight: normal;
.card-header & {
margin: -.125rem 0 0;
margin: 0;
}
.card-title & {
margin: 0 0 0 .25rem;
font-size: $h4-font-size;
}
}
@@ -317,17 +364,6 @@ Card optinos
color: $text-muted;
}
.card-dropdown {
line-height: 1;
color: $text-muted;
.icon {
width: 1.5rem;
height: 1.5rem;
font-size: 1.5rem;
stroke-width: 1;
}
}
/**
Card status
@@ -473,9 +509,7 @@ Card list group
}
}
/**
Card tabs
*/
// Card tabs
.card-tabs {
.nav-tabs {
@@ -484,19 +518,21 @@ Card tabs
border-bottom: 0;
.nav-link {
color: $text-muted;
background: $card-cap-bg;
border: $card-border-width solid $card-border-color;
border-bottom: 0;
&.active,
&:active,
&:hover {
border-color: $card-border-color;
color: $body-color;
}
&.active {
color: $headings-color;
background: $card-bg;
border-bottom-color: transparent;
}
}
@@ -522,12 +558,19 @@ Card tabs
.nav-tabs-bottom {
margin-bottom: 0;
.nav-link {
margin-bottom: 0;
&.active {
border-top-color: transparent;
}
}
.nav-item {
margin-top: -1px;
margin-top: -$card-border-width;
margin-bottom: 0;
.nav-link {
border-top-width: 0;
border-bottom: $card-border-width solid $card-border-color;
border-top-left-radius: 0;
@@ -541,14 +584,3 @@ Card tabs
border-top-left-radius: 0;
}
}
// Border-0 card
.border-0 {
.card, .nav-link {
border: 0 !important;
}
.card-stacked::after {
border: 1px solid rgba($text-muted, 0.07) !important;
}
}

View File

@@ -117,3 +117,16 @@
}
}
}
.divide-y-fill {
display: flex;
flex-direction: column;
height: 100%;
> :not(template) {
flex: 1;
display: flex;
justify-content: center;
flex-direction: column;
}
}

View File

@@ -1,7 +1,3 @@
.nav {
margin: 0;
}
.nav-vertical {
&,
.nav {