1
0
mirror of https://github.com/tabler/tabler.git synced 2025-12-22 01:44:25 +04:00

Compare commits

..

148 Commits

Author SHA1 Message Date
codecalm
9f5748b683 Add postcss-discard-comments plugin and update SRI hash for RTL CSS 2025-07-23 22:14:36 +02:00
codecalm
612879c6a1 Refactor SCSS files: add new functions and improve imports 2025-07-23 22:04:02 +02:00
codecalm
1ee0110205 Refactor SCSS files to use new map functions and improve imports 2025-07-23 21:14:06 +02:00
codecalm
ef23c7c1f6 Refactor SCSS imports 2025-07-23 20:15:23 +02:00
Paweł Kuna
8947d7c7b7 Update activity messages in JSON data (#2452) 2025-07-23 19:16:47 +02:00
Paweł Kuna
399a5c59f9 Update icons to v3.34.1 (75 new icons) (#2451) 2025-07-23 19:16:36 +02:00
Valentine Frolov
ad22d046c3 Add a color palette in the signing component #2373 (#2448)
Co-authored-by: Valentine <valentine@pop-os.Dlink>
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-07-23 19:15:14 +02:00
Paweł Kuna
b8b63d7e94 Fix mixed declarations in SCSS (#2450) 2025-07-23 19:13:46 +02:00
Koray Tuncer
ab8009b771 fix : Docs search not adjusted to dark mode (#2381) (#2443)
Co-authored-by: codecalm <codecalm@gmail.com>
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-07-23 19:13:04 +02:00
Koray Tuncer
bd35fd39cf fix: Some forms on the new 'Form Elements' page don't lay out neatly … (#2444)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-07-23 19:12:47 +02:00
codecalm
4b65380293 fix: update environment condition from preview to production in default.html 2025-07-16 22:27:51 +02:00
github-actions[bot]
2c73788cd1 chore: update versions (#2411)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-13 11:07:29 +02:00
codecalm
a967970419 Update version from patch to minor for core dependencies and clean up changelogs 2025-07-12 13:11:34 +02:00
Kevin Papst
64baa141e7 add more lock file names to prevent unwanted changes (#2416) 2025-07-12 11:47:06 +02:00
Paweł Kuna
49ab9ea931 Add new Tabler Illustrations (#2441) 2025-07-12 11:46:48 +02:00
Paweł Kuna
a8c41914c4 Add Tabler project rules and documentation standards (#2446) 2025-07-12 11:44:14 +02:00
Paweł Kuna
9951fe9b1d Enhance button and hover animations (#2401) 2025-07-07 22:56:08 +02:00
Abdelrhman Said
cfd4cb6624 Only apply pagination-link hover styles to non-active items (#2433)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-07-07 22:01:34 +02:00
Aidi Tan
6fec73a3c4 fix: use relative line heights to make calculations work (#2258) (#2426)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-07-07 21:43:16 +02:00
ethancrawford
29cc0cd378 Rename several Theme builder labels (#2430) 2025-07-07 21:36:20 +02:00
BG-Software
6c47b5f868 Change package.json to core/libs.json as a source of libraries (#2423) 2025-07-07 18:52:08 +02:00
Paweł Kuna
6c38a48af1 Update dependencies (#2432) 2025-07-07 18:50:43 +02:00
Paweł Kuna
6c4dd3670d Update class names from left, right to start, end (#2402) 2025-07-07 18:00:21 +02:00
Paweł Kuna
2a12f72b28 fix: update CSS calculations to use calc() (#2412) 2025-07-07 17:59:45 +02:00
codecalm
f91b0f7cfa Merge branch 'main' of https://github.com/tabler/tabler into dev 2025-07-07 17:58:01 +02:00
codecalm
af816227bc fix: update banner script data-tblr-ref for production environment 2025-07-07 17:45:48 +02:00
codecalm
59b6f73a06 Merge branch 'main' of https://github.com/tabler/tabler into dev 2025-06-12 12:06:22 +02:00
codecalm
266d5ad773 fix: update banner script data-tblr-ref for preview and production environments 2025-06-03 22:49:55 +02:00
carlosmintfan
db6200a998 wysiwyg.html: Remove license_key option from HugeRTE init object (#2413)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-29 21:56:13 +02:00
BG-Software
70a41e4fc2 Replace a package list in download.md with a link to the 3rd-party libraries page (#2415) 2025-05-29 17:42:25 +02:00
Paweł Kuna
e96f055238 Add different favicon to development environment (#2395) 2025-05-28 00:00:50 +02:00
Paweł Kuna
a200d30f04 Improve breadcrumb styles (#2403) 2025-05-27 23:56:04 +02:00
Daniel Vítek
666a296a62 List group item hoverable only with .list-group-hoverable class (#2397)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-27 23:54:01 +02:00
codecalm
545defc852 fix: restore shx dependency in package.json and pnpm-lock.yaml 2025-05-26 20:46:34 +02:00
codecalm
1b0f8206ee fix: update banner script loading condition to production environment 2025-05-26 20:45:14 +02:00
codecalm
c2cb3d3255 fix: remove shx dependency from importers in pnpm-lock.yaml 2025-05-26 20:41:48 +02:00
codecalm
a0377f9752 fix: remove shx dependency from core, docs, and preview packages 2025-05-26 20:40:05 +02:00
codecalm
c914ecfb05 feat: add shx dependency to core, docs, and preview packages 2025-05-26 20:36:01 +02:00
codecalm
57afd0bb11 feat: add data attribute to banner script for preview environment 2025-05-26 20:31:17 +02:00
codecalm
8db1c08744 feat: add banner script loading for preview environment 2025-05-26 20:22:22 +02:00
codecalm
08e4919ae1 Add conditional loading of banner script in development environment 2025-05-26 20:21:57 +02:00
codecalm
ef9d75f32f fix: update footer condition to include preview environment for changelog link 2025-05-19 23:39:35 +02:00
github-actions[bot]
3e35545edc chore: update versions (#2393)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-05-19 23:35:47 +02:00
Paweł Kuna
446c34eceb Add initial README.md with project overview and installation instructions to core package (#2392) 2025-05-19 23:24:53 +02:00
github-actions[bot]
90285704e4 chore: update versions (#2390)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-05-19 22:39:00 +02:00
Paweł Kuna
a7f73d7f7e Fix README file in core package (#2389) 2025-05-19 21:09:21 +02:00
github-actions[bot]
d66c6a70eb chore: update versions (#2266)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-05-19 20:43:25 +02:00
Paweł Kuna
ad54f61429 Move additional libraries to Tabler core (#2385) 2025-05-19 20:35:01 +02:00
Paweł Kuna
9007e73cb6 Fix FAQ accordion structure (#2388) 2025-05-18 21:16:23 +02:00
codecalm
0d106a89b7 Add role to sample people json 2025-05-18 18:59:01 +02:00
codecalm
0d59e2f13a fix: Correct typos and improve clarity in pagination documentation 2025-05-17 21:28:46 +02:00
Paweł Kuna
8850f6128f Enhance pagination component with new styles and documentation (#2384) 2025-05-17 17:04:59 +02:00
codecalm
a1af8014e8 feat: Add FullCalendar integration 2025-05-17 16:53:01 +02:00
codecalm
c8fee60023 feat: Refactor pagination and table of contents into separate includes for better maintainability 2025-05-17 16:50:59 +02:00
codecalm
d8c70a8b94 fix: Adjust layout spacing and improve footer structure in documentation 2025-05-17 16:40:30 +02:00
codecalm
b70cb48e0b feat: Add Open Collective link to documentation layout 2025-05-17 15:24:19 +02:00
codecalm
5b8746c702 Merge branch 'dev' of https://github.com/tabler/tabler into dev-docs-footer 2025-05-17 15:20:19 +02:00
codecalm
f2c0c65f98 feat: Add package managers data and update tabs documentation 2025-05-17 15:20:08 +02:00
codecalm
06021fad99 Refactor SCSS variables for code styling 2025-05-17 14:36:22 +02:00
codecalm
bd67b3f82e feat: Add social media links and GitHub edit link in documentation layout 2025-05-17 14:16:02 +02:00
codecalm
8e2acc82e0 Merge branch 'dev' of https://github.com/tabler/tabler into dev 2025-05-17 13:58:46 +02:00
codecalm
85f212293d chore: Update package dependencies and improve welcome link 2025-05-17 13:57:52 +02:00
Paweł Kuna
72a1d67709 Refactor breadcrumb and vector map components, add clipboard functionality (#2378)
Co-authored-by: ethancrawford <ethan_jc@hotmail.com>
2025-05-17 00:46:31 +02:00
Paweł Kuna
638f36c0c5 Refactor SCSS variable names for shadows (#2377) 2025-05-16 22:37:38 +02:00
Paweł Kuna
f769abd70b Add FullCalendar integration with sample events and styling (#2363) 2025-05-16 22:27:48 +02:00
ethancrawford
3a02ef9c55 Prevent some marketing site rows overflowing on mobile (#2375)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-16 22:27:18 +02:00
BG-Software
38ea9aa4e7 Use primary color for ::selection inside <code> in docs (#2382) 2025-05-16 22:26:25 +02:00
codecalm
acbe4ff35f Merge branch 'dev' of https://github.com/tabler/tabler into dev 2025-05-15 23:52:04 +02:00
Paweł Kuna
b5e2f54bf8 Enhance dropdown components for better accessibility (#2370) 2025-05-15 23:49:10 +02:00
codecalm
e2411b3518 fix: Refactor SCSS variable names for shadows 2025-05-15 23:44:22 +02:00
codecalm
44a1979b78 Update version type for "@tabler/core" to minor in changeset 2025-05-12 23:28:44 +02:00
codecalm
bccdeee779 Replace "@tabler/preview" with "@tabler/core" in changeset files 2025-05-12 23:26:42 +02:00
codecalm
5cb041275d Improve documentation clarity by refining section descriptions and adjusting table of contents behavior 2025-05-12 23:24:19 +02:00
codecalm
27c866b3c3 Update linked packages in changeset configuration 2025-05-12 23:23:19 +02:00
Mikołaj Sojka
c127d65605 Fix colour picker preview page not displaying correctly (#2321)
Co-authored-by: codecalm <codecalm@gmail.com>
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-12 22:56:32 +02:00
codecalm
f15d2b97f8 Update dependencies 2025-05-12 22:20:10 +02:00
dependabot[bot]
1f4906cc40 chore(deps): bump @babel/runtime-corejs3 from 7.26.7 to 7.27.1 (#2335)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 22:14:56 +02:00
Paweł Kuna
f8075f69c0 Add documentation for 3rd-party libraries and resources (#2356)
Co-authored-by: Kevin Papst <kevinpapst@users.noreply.github.com>
Co-authored-by: Bartłomiej Gawęda <bagaweda@gmail.com>
2025-05-12 22:14:42 +02:00
Mikołaj Sojka
fd0fd47bb2 Improve card footer layout and enhance entry display format in invoices (#2345)
Co-authored-by: codecalm <codecalm@gmail.com>
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-12 22:14:27 +02:00
Paweł Kuna
a41c9565f1 Remove unnecessary !important from body padding (#2357) 2025-05-12 22:13:51 +02:00
BG-Software
7fc1d5c11c Fix: Exclude headings in the carousel and modal examples from ToC (#2362) 2025-05-12 22:13:38 +02:00
BG-Software
222ddd4b2f Change WYSIWYG title to uppercase (#2368) 2025-05-12 20:55:32 +02:00
Paweł Kuna
ddd3753cde Fix WYSIWYG documentation (#2359) 2025-05-12 20:30:33 +02:00
Paweł Kuna
b9d434dcd4 feat: Add new charts to dashboard pages (#2366)
Co-authored-by: Bartłomiej Gawęda <bagaweda@gmail.com>
2025-05-12 20:28:35 +02:00
ethancrawford
6a3513f8e9 Add a few small documentation fixes and updates (#2360)
Co-authored-by: BG-Software <73077398+BG-Software-BG@users.noreply.github.com>
2025-05-12 18:48:48 +02:00
codecalm
21bf92608d Enhance color variables and update color display in documentation 2025-05-11 19:44:21 +02:00
ethancrawford
bb617b8dd2 Fix colour swatches on small screens (#2350)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-11 12:32:40 +02:00
ethancrawford
5fa662bfae Use color-input include file more (#2347)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-11 12:31:56 +02:00
Mikołaj Sojka
467c529fdc 2341-bug-application-brand-color-live-ui-example-on-tabler-illustrati… (#2344) 2025-05-11 12:28:50 +02:00
BG-Software
7773ff22b9 Fix: Exclude headings inside .example from the Table of Contents (#2354) 2025-05-11 12:25:51 +02:00
BG-Software
1867e0e482 Fix: Add missing metadata for Tabler Documentation (#2355) 2025-05-11 12:25:34 +02:00
Bartłomiej Gawęda
67c9400918 Fix docs URL in the readme and installation page 2025-05-10 19:07:33 +02:00
BG-Software
7917f868e9 Fix: Replace non-existent Vimeo file and enhance the inline player documentation (#2353) 2025-05-10 15:28:32 +02:00
BG-Software
5619b2d8be Fix: Change src links to images in README and getting-started docs page (#2351) 2025-05-09 17:51:59 +02:00
BG-Software
9b15b942cb Add missing .steps-vertical classes in docs (#2348) 2025-05-08 22:10:44 +02:00
BG-Software
5b3e201d06 Docs fixes: Remove duplicated code examples, fix links, fix filled icons, fix dropdown examples
Co-authored-by: ethancrawford <ethan_jc@hotmail.com>
2025-05-08 21:53:47 +02:00
ethancrawford
8470c9b315 Fix broken links in docs and improve some labels (#2337)
Co-authored-by: BG-Software <73077398+BG-Software-BG@users.noreply.github.com>
2025-05-07 21:08:05 +02:00
ethancrawford
dce63db1e6 Add missing TOC item on the preview's form elements page (#2336) 2025-05-07 20:33:49 +02:00
ethancrawford
278967b028 Fix switch icon examples in documentation (#2338)
Co-authored-by: BG-Software <73077398+BG-Software-BG@users.noreply.github.com>
2025-05-06 21:22:57 +02:00
Bartłomiej Gawęda
7082ea1c56 Merge branch 'main' into dev 2025-05-05 22:13:52 +02:00
ethancrawford
c42b104fe5 Fix incorrect label text on form elements docs page (#2334)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-05 21:35:57 +02:00
ethancrawford
e546706f4c Fix input mask example in docs (#2318)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-05 19:48:01 +02:00
ethancrawford
6d5e950235 Add note to carousel with captions example (#2329) 2025-05-05 19:47:00 +02:00
ethancrawford
665472cf69 Demonstrate sticky header table more clearly in docs (#2314)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-05 19:46:25 +02:00
Mikołaj Sojka
468b055005 2304-bug-preview-site-rtl-mode-demo-broken (#2322)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-05 19:46:08 +02:00
ethancrawford
895f943270 Use tabs-package include to show webfont install steps (#2316)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-05 19:40:52 +02:00
ethancrawford
3eaa90203b Add URL for local dev version of docs app to README (#2317)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-05-05 19:24:57 +02:00
Paweł Kuna
79bd867db5 feat: create new form layout page (#2303) 2025-05-05 19:12:13 +02:00
ethancrawford
e265681a48 Fix typo on theme settings page (#2312) 2025-05-05 19:12:01 +02:00
Paweł Kuna
cac5d92c7d Update illustrations to v1.7 (#2275) 2025-05-05 19:11:34 +02:00
Paweł Kuna
b6e9b18ce9 Update icons to v3.31.0 (#2274) 2025-05-05 19:11:06 +02:00
ethancrawford
849e286df0 Update heading of vertical carousel demo with thumbnail indicators (#2333) 2025-05-05 15:45:08 +02:00
ethancrawford
b6ce7b8feb Fix carousel with captions demo on preview website (#2330) 2025-05-05 13:48:07 +02:00
BG-Software
7b7265347c Fix ribbon component in the documentation (#2323) 2025-05-04 12:59:19 +02:00
Guillermo Farías
e675389871 fix: add missing border-radius to .card-header-tabs (#2277)
Co-authored-by: Paweł Kuna <1282324+codecalm@users.noreply.github.com>
2025-04-28 23:38:29 +02:00
codecalm
b548430688 Merge branch 'main' of https://github.com/tabler/tabler into dev 2025-04-28 23:09:29 +02:00
Ophir LOJKINE
b45d85089e fix #2267 (steps layout issue) (#2302) 2025-04-28 23:03:30 +02:00
BG-Software
8f701859ad fix: improve Introduction, Base, Layout and Plugins sections in documentation (#2288) 2025-04-26 19:32:15 +02:00
codecalm
78c9c71365 feat: enhance card layout with full height and flex column styling 2025-04-25 22:19:25 +02:00
BG-Software
5d8752eea0 fix: update license link in FAQ, add changelog link, change Twitter to X (#2286) 2025-04-25 21:48:19 +02:00
codecalm
6452669803 feat: remove integrity attribute from demo script in layout 2025-04-24 16:22:10 +02:00
codecalm
bf750451f1 feat: update analytics event source path in Vercel configuration 2025-04-24 15:54:31 +02:00
codecalm
83b11a8b35 feat: remove build and dev commands from Vercel configuration 2025-04-24 15:44:34 +02:00
codecalm
42da37e737 feat: disable trailing slashes in Vercel configuration 2025-04-23 18:58:22 +02:00
codecalm
0f335cda27 feat: add 'Preview' link to global documentation navigation 2025-04-21 20:39:04 +02:00
codecalm
a6c24bb44f feat: align navbar items for improved layout consistency 2025-04-21 20:36:05 +02:00
codecalm
e975ea7e74 feat: remove unused build and dev commands from Vercel configuration 2025-04-21 20:23:51 +02:00
codecalm
92ec44cf4a test 2025-04-21 20:18:53 +02:00
codecalm
8da9fa869f feat: add Plausible analytics integration and configure Vercel rewrites 2025-04-21 20:08:10 +02:00
codecalm
67f3571a4f feat: hide navbar items on smaller screens for improved responsiveness 2025-04-21 20:02:53 +02:00
codecalm
8710940952 feat: improve navbar layout and add media query for background gradient in documentation styles 2025-04-20 20:09:23 +02:00
codecalm
7295678c34 feat: enhance documentation examples with improved layout and additional parameters for clarity 2025-04-19 20:40:43 +02:00
codecalm
a037e8e429 feat: update markdown styles and replace logo SVG for improved visual consistency 2025-04-19 16:06:08 +02:00
codecalm
3da4395d10 fix: update docsearch configuration with hardcoded values for testing purposes 2025-04-19 15:58:51 +02:00
codecalm
f9f9663b2a feat: update profile layout and add callout shortcode for improved documentation clarity 2025-04-19 15:56:49 +02:00
codecalm
a922c1f226 feat: enhance navigation menu and improve layout for better user experience 2025-04-19 14:25:43 +02:00
codecalm
9069dcba54 fix: update rollup config and improve image handling in documentation for better compatibility 2025-04-19 13:41:24 +02:00
codecalm
7fbe4b5bc9 feat: enhance documentation layout and improve interaction examples for better usability 2025-04-19 13:26:33 +02:00
codecalm
9ebd9f1d24 feat: update border utility examples and enhance card styling for improved layout 2025-04-19 13:11:11 +02:00
codecalm
88b9e87c6e feat: enhance documentation links and improve SCSS styles for better readability 2025-04-19 12:06:46 +02:00
codecalm
d4886607f0 chore: update devDependencies to latest versions in package.json and docs/package.json 2025-04-19 11:30:56 +02:00
codecalm
1546e9ccc4 feat: mark package.json files as private and update pnpm version 2025-04-19 11:29:01 +02:00
codecalm
f25da87043 feat: implement zip-package script for packaging dashboard assets 2025-04-16 19:22:52 +02:00
codecalm
2ac915cd93 feat: update site descriptions for improved clarity and SEO 2025-04-16 19:05:14 +02:00
codecalm
fa89c6fa73 fix: disable caching in turbo.json outputs configuration 2025-04-16 15:39:58 +02:00
codecalm
c4d21a4666 feat: add themes to site.json configuration 2025-04-16 15:37:32 +02:00
codecalm
baa6056c4c fix: update integrity attributes for preview environment and include preview directory in build inputs 2025-04-16 15:35:54 +02:00
codecalm
dc24132a7d fix: update asset paths for preview environment and adjust integrity attributes 2025-04-16 15:31:30 +02:00
371 changed files with 6187 additions and 5341 deletions

30
.build/zip-package.mjs Normal file
View 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}`);

View File

@@ -1,5 +0,0 @@
---
"@tabler/preview": patch
---
Add SRI hashes to scripts and styles

View File

@@ -0,0 +1,5 @@
---
"@tabler/preview": minor
---
Add a color palette in the signing component

View File

@@ -3,8 +3,18 @@
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"linked": [
[
"@tabler/core",
"@tabler/preview",
"@tabler/docs"
]
],
"access": "public",
"baseBranch": "dev",
"ignore": []
"ignore": [],
"privatePackages": {
"version": true,
"tag": false
}
}

View File

@@ -1,5 +0,0 @@
---
"@tabler/preview": patch
---
Correct `aria-label` of app menu link

View File

@@ -0,0 +1,5 @@
---
"@tabler/core": patch
---
Fix mixed declarations in SCSS

View File

@@ -1,5 +0,0 @@
---
"@tabler/preview": patch
---
Fix color badge in navbar menu

View File

@@ -0,0 +1,5 @@
---
"@tabler/preview": patch
---
Update icons to v3.34.1 (75 new icons)

View File

@@ -2,4 +2,4 @@
"@tabler/preview": patch
---
Add "text features" menu item
Update activity messages

View File

@@ -1,5 +0,0 @@
---
"@tabler/preview": patch
---
Add missing `tw` entry in `flags.json`

View File

@@ -1,5 +0,0 @@
---
"@tabler/preview": patch
---
Delete missing demo RTL style

View File

@@ -0,0 +1,5 @@
---
"@tabler/docs": patch
---
Fix Docs search in dark mode

View File

@@ -0,0 +1,5 @@
---
"@tabler/preview": patch
---
Fix responsive layputs in 'Form Elements' page

56
.cursor/rules/main.mdc Normal file
View 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

View File

@@ -13,10 +13,9 @@ jobs:
steps:
- name: Clone Tabler
uses: actions/checkout@v4
- name: Prevent lock file change
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

View File

@@ -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>
@@ -23,24 +23,8 @@ A premium and open source dashboard template with a responsive and high-quality
</a>
</p>
<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>
</p>
## Testing
<p align="center">Visual testing with:</p>
<p align="center">
<a href="https://argos-ci.com/" target="_blank">
<picture>
<img src="https://github.com/user-attachments/assets/7d231a26-eff5-4fc5-8392-b2a679a7c572" alt="Argos-CI" height="164" />
</picture>
</a>
</p>
<p align="center">Browser testing via:</p>
<p align="center">
@@ -59,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>
@@ -75,7 +59,7 @@ We've created this admin panel for everyone who wants to create templates based
## 📖 Documentation
The documentation is available at https://tabler.io/docs/
The documentation is available at https://docs.tabler.io/
## 🪴 Project Activity
@@ -140,8 +124,8 @@ pnpm install
```sh
pnpm run start
```
5. Open [http://localhost:3000](http://localhost:3000) in your browser, and voilà.
Any change in the `/src` directory will rebuild the application and refresh the page.
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:

33
core/.build/copy-libs.mjs Normal file
View 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}`)
}
}

View File

@@ -9,7 +9,10 @@ export default context => {
autoprefixer: {
cascade: false
},
rtlcss: context.env === 'RTL'
rtlcss: context.env === 'RTL',
'postcss-discard-comments': {
removeAll: true
},
}
}
}

View File

@@ -1,5 +1,66 @@
# @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

42
core/README.md Normal file
View 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.

View File

@@ -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();
}
}
});
}

164
core/libs.json Normal file
View File

@@ -0,0 +1,164 @@
{
"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"
]
},
"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
}
}

View File

@@ -1,14 +1,14 @@
{
"name": "@tabler/core",
"version": "1.2.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",
"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-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\"",
@@ -26,8 +26,9 @@
"js-minify-standalone-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/tabler.esm.js.map,includeSources,url=tabler.esm.min.js.map\" --output dist/js/tabler.esm.min.js dist/js/tabler.esm.js",
"js-minify-theme": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/tabler-theme.js.map,includeSources,url=tabler-theme.min.js.map\" --output dist/js/tabler-theme.min.js dist/js/tabler-theme.js",
"js-minify-theme-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",
"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\"",
@@ -66,7 +67,8 @@
"dist/**/*",
"js/**/*.{js,map}",
"img/**/*.{svg}",
"scss/**/*.scss"
"scss/**/*.scss",
"libs.json"
],
"style": "dist/css/tabler.css",
"sass": "scss/tabler.scss",
@@ -144,7 +146,32 @@
},
"dependencies": {
"@popperjs/core": "^2.11.8",
"bootstrap": "5.3.5"
"bootstrap": "5.3.7",
"postcss-discard-comments": "^7.0.4"
},
"devDependencies": {
"@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",
"star-rating.js": "^4.3.1",
"tom-select": "^2.4.3",
"typed.js": "^2.1.0"
},
"directories": {
"doc": "docs"

View File

@@ -14,7 +14,6 @@
@import "bootstrap/scss/nav";
@import "bootstrap/scss/navbar";
@import "bootstrap/scss/card";
@import "bootstrap/scss/breadcrumb";
@import "bootstrap/scss/pagination";
@import "bootstrap/scss/progress";
@import "bootstrap/scss/list-group";

View File

@@ -1,5 +1,7 @@
// Config
@import "bootstrap/scss/functions";
@import "bootstrap-functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps";

View File

@@ -0,0 +1,258 @@
@use "sass:color";
@use "sass:map";
@use "sass:math";
@use "sass:meta";
@use "sass:string";
@use "sass:list";
/**
* Converts a color value to RGB format
*
* @param {Color} $value - The color value to convert
* @return {List} - RGB values as a list (red, green, blue)
*
* @example
* to-rgb(#ff0000) // Returns: (255, 0, 0)
*/
@function to-rgb($value) {
@return color.channel($value, "red", $space: rgb), color.channel($value, "green", $space: rgb), color.channel($value, "blue", $space: rgb);
}
/**
* Creates an opaque color by mixing a foreground color with a background color
*
* @param {Color} $background - The background color
* @param {Color} $foreground - The foreground color to make opaque
* @return {Color} - The resulting opaque color
*
* @example
* opaque(#ffffff, rgba(255, 0, 0, 0.5)) // Returns solid red color
*/
@function opaque($background, $foreground) {
@return color.mix(rgba($foreground, 1), $background, opacity($foreground) * 100%);
}
/**
* Adjusts a color channel value for luminance calculation
*
* @param {Number} $channel - The color channel value (0-1)
* @return {Number} - The adjusted channel value
*
* @example
* adjust(0.5) // Returns adjusted value for luminance calculation
*/
@function adjust($channel) {
@return if($channel < 0.03928, math.div($channel, 12.92), pow(($channel + 0.055) / 1.055, 2.4));
}
/**
* Calculates the relative luminance of a color using WCAG formula
*
* @param {Color} $color - The color to calculate luminance for
* @return {Number} - The luminance value (0-1)
*
* @example
* luminance(#ffffff) // Returns: 1
* luminance(#000000) // Returns: 0
*/
@function luminance($color) {
$r: math.div(color.channel($color, "red", $space: rgb), 255);
$g: math.div(color.channel($color, "green", $space: rgb), 255);
$b: math.div(color.channel($color, "blue", $space: rgb), 255);
$r: adjust($r);
$g: adjust($g);
$b: adjust($b);
@return 0.2126 * $r + 0.7152 * $g + 0.0722 * $b;
}
/**
* Determines the best contrasting color for a given background
*
* @param {Color} $background - The background color
* @param {Color} $light - The light color option (default: #ffffff)
* @param {Color} $dark - The dark color option (default: #000000)
* @return {Color} - The contrasting color (light or dark)
*
* @example
* color-contrast(#000000) // Returns: #ffffff
* color-contrast(#ffffff) // Returns: #000000
*/
@function color-contrast($background, $light: #ffffff, $dark: #000000) {
// Get relative luminance using WCAG formula
$bg-luminance: luminance($background);
// If background is dark, return light color, otherwise dark
@return if($bg-luminance > 0.179, $dark, $light);
}
/**
* Adds two values together, handling different data types
*
* @param {*} $value1 - First value to add
* @param {*} $value2 - Second value to add
* @param {Boolean} $return-calc - Whether to return calc() function (default: true)
* @return {*} - The result of addition or calc() expression
*
* @example
* add(10px, 5px) // Returns: 15px
* add(10px, 5px, false) // Returns: 10px + 5px
*/
@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);
}
/**
* Subtracts the second value from the first value
*
* @param {*} $value1 - The value to subtract from
* @param {*} $value2 - The value to subtract
* @param {Boolean} $return-calc - Whether to return calc() function (default: true)
* @return {*} - The result of subtraction or calc() expression
*
* @example
* subtract(10px, 5px) // Returns: 5px
* subtract(10px, 5px, false) // Returns: 10px - 5px
*/
@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 + unquote(" - ") + $value2);
}
/**
* Divides the dividend by the divisor with specified precision
*
* @param {Number} $dividend - The number to be divided
* @param {Number} $divisor - The number to divide by
* @param {Number} $precision - The number of decimal places (default: 10)
* @return {Number} - The result of division
*
* @example
* divide(10, 2) // Returns: 5
* divide(10px, 2) // Returns: 5px
* divide(10, 3) // Returns: 3.3333333333
*/
@function divide($dividend, $divisor, $precision: 10) {
$sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);
$dividend: abs($dividend);
$divisor: abs($divisor);
@if $dividend == 0 {
@return 0;
}
@if $divisor == 0 {
@error "Cannot divide by 0";
}
$remainder: $dividend;
$result: 0;
$factor: 10;
@while ($remainder > 0 and $precision >= 0) {
$quotient: 0;
@while ($remainder >= $divisor) {
$remainder: $remainder - $divisor;
$quotient: $quotient + 1;
}
$result: $result * 10 + $quotient;
$factor: $factor * 0.1;
$remainder: $remainder * 10;
$precision: $precision - 1;
@if ($precision < 0 and $remainder >= $divisor * 5) {
$result: $result + 1;
}
}
$result: $result * $factor * $sign;
$dividend-unit: math.unit($dividend);
$divisor-unit: math.unit($divisor);
$unit-map: (
"px": 1px,
"rem": 1rem,
"em": 1em,
"%": 1%,
);
@if ($dividend-unit != $divisor-unit and map.has-key($unit-map, $dividend-unit)) {
$result: $result * map.get($unit-map, $dividend-unit);
}
@return $result;
}
/**
* Replaces all occurrences of a search string with a replace string
*
* @param {String} $string - The string to search in
* @param {String} $search - The string to search for
* @param {String} $replace - The string to replace with (default: "")
* @return {String} - The string with replacements made
*
* @example
* str-replace("hello world", "world", "universe") // Returns: "hello universe"
* str-replace("hello world", "o") // Returns: "hell wrld"
*/
@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;
}
/**
* Applies a function to each key-value pair in a map
*
* @param {Map} $map - The map to iterate over
* @param {String} $func - The name of the function to apply
* @param {*} $args... - Additional arguments to pass to the function
* @return {Map} - A new map with the function applied to each value
*
* @example
* $colors: (primary: #007bff, secondary: #6c757d);
* map-loop($colors, darken, 10%) // Returns map with darkened colors
*/
@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;
}

View File

@@ -70,9 +70,4 @@
// Override bootstrap core
}
//
// 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%);
}

View File

@@ -1,4 +1,5 @@
@import "bootstrap/scss/functions";
@import "bootstrap-functions";
@import "mixins";
@import "variables";

View File

@@ -76,6 +76,7 @@
@import "utils/opacity";
@import "utils/shadow";
@import "utils/text";
@import "utils/hover";
@import "debug";

View File

@@ -1,3 +1,4 @@
@use "sass:map";
@import "config";
:root,
@@ -30,7 +31,7 @@
--#{$prefix}brand: #{$primary};
/** Theme colors */
@each $name, $color in map-merge($theme-colors, $social-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))};
@@ -42,9 +43,9 @@
--#{$prefix}#{$name}-lt-rgb: #{to-rgb(theme-color-lighter($color))};
}
/** Social colors */
@each $name, $color in $social-colors {
--#{$prefix}#{$name}: #{$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 */

View File

@@ -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
);

View File

@@ -1,3 +1,8 @@
@use "sass:string";
@use "sass:color";
@use "sass:map";
@use "sass:math";
$prefix: "tblr-" !default;
// BASE CONFIG
@@ -23,10 +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}, ", '')}") 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;
$font-family-comic: "Comic Sans MS", "Comic Sans", "Chalkboard SE", "Comic Neue", sans-serif, cursive !default;
//Icons
$icon-stroke-width: 1.5 !default;
@@ -52,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;
@@ -68,12 +73,12 @@ $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;
@@ -99,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: (
@@ -146,7 +151,7 @@ $border-light-opacity: 0.08 !default;
$border-dark-opacity: 0.24 !default;
$border-active-opacity: 0.58 !default;
$gray-50: #f9fafb !default;
$gray-50: #f9fafb !default;
$gray-100: #f3f4f6 !default;
$gray-200: #e5e7eb !default;
$gray-300: #d1d5db !default;
@@ -200,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;
@@ -210,7 +215,7 @@ $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: color-transparent(var(--#{$prefix}body-color), .4) !default;
$disabled-color: color-transparent(var(--#{$prefix}body-color), 0.4) !default;
$primary: $blue !default;
$secondary: $text-secondary !default;
@@ -279,9 +284,10 @@ $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, ()));
$theme-colors: map.merge($theme-colors, map.merge($extra-colors, ()));
// BACKDROPS
$backdrop-opacity: 24% !default;
@@ -320,10 +326,10 @@ $border-values: (
$icon-color: var(--#{$prefix}gray-400) !default;
// Code
$code-color: var(--#{$prefix}primary) !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}primary-lt) !default;
$pre-padding: 1rem !default;
$pre-bg: var(--#{$prefix}bg-surface-dark) !default;
@@ -340,7 +346,7 @@ $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;
@@ -348,52 +354,52 @@ $avatar-bg: var(--#{$prefix}bg-surface-secondary) !default;
$avatar-sizes: (
"xxs": (
size: 1rem,
font-size: .5rem,
icon-size: .5rem,
status-size: .25rem,
brand-size: .5rem
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,
brand-size: .75rem
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,
brand-size: 1rem
status-size: 0.5rem,
brand-size: 1rem,
),
"md": (
size: 2.5rem,
font-size: $h4-font-size,
icon-size: 1.5rem,
status-size: .75rem,
brand-size: 1.25rem
status-size: 0.75rem,
brand-size: 1.25rem,
),
"lg": (
size: 3rem,
font-size: $h2-font-size,
icon-size: 2rem,
status-size: .75rem,
brand-size: 1.25rem
status-size: 0.75rem,
brand-size: 1.25rem,
),
"xl": (
size: 5rem,
font-size: 2rem,
icon-size: 3rem,
status-size: 1rem,
brand-size: 1.25rem
brand-size: 1.25rem,
),
"2xl": (
size: 7rem,
font-size: 3rem,
icon-size: 5rem,
status-size: 1rem,
brand-size: 2rem
brand-size: 2rem,
),
) !default;
$avatar-border-radius: var(--#{$prefix}border-radius) !default;
@@ -476,7 +482,7 @@ $size-spacers: (
full: 100%,
) !default;
$size-values: map-merge(
$size-values: map.merge(
$spacers,
(
25: 25%,
@@ -585,41 +591,71 @@ $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}body-font-face) !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}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;
@@ -627,8 +663,8 @@ $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;
@@ -810,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;
@@ -827,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;
@@ -838,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;

View File

@@ -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);
}
}

View File

@@ -7,7 +7,7 @@ body {
position: relative;
min-height: 100%;
height: 100%;
padding: 0 !important;
padding: 0;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;

View File

@@ -61,9 +61,6 @@
--#{$prefix}btn-color: #{$darken-dark};
--#{$prefix}code-color: var(--#{$prefix}body-color);
--#{$prefix}code-bg: #{$border-dark-color-dark};
.navbar-brand-autodark {
.navbar-brand-image {
@include autodark-image;

View File

@@ -160,7 +160,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);
}
}
@@ -172,7 +173,8 @@ Navbar
}
}
&.navbar-vertical.navbar-right {
&.navbar-vertical.navbar-right,
&.navbar-vertical.navbar-end {
~ .navbar,
~ .page-wrapper {
margin-left: 0;
@@ -219,13 +221,13 @@ 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 {
@@ -318,11 +320,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;
}
@@ -364,7 +367,8 @@ Navbar vertical
}
}
&.navbar-right ~ .page {
&.navbar-right ~ .page,
&.navbar-end ~ .page {
padding-left: 0;
padding-right: $sidebar-width;
}

View File

@@ -1,24 +1,46 @@
@use "sass:math";
/**
* Creates a lighter version of a theme color by mixing it with a background color
*
* @param {Color} $color - The base color to lighten
* @param {Color} $background - The background color to mix with (default: #fff)
* @return {Color} - The lighter version of the color (10% mix)
*
* @example
* theme-color-lighter(#007bff) // Returns lighter blue
* theme-color-lighter(#dc3545, #f8f9fa) // Returns lighter red mixed with light gray
*/
@function theme-color-lighter($color, $background: #fff) {
@return mix($color, $background, 10%);
}
/**
* Creates a darker version of a theme color by shading it
*
* @param {Color} $color - The base color to darken
* @return {Color} - The darker version of the color (10% shade)
*
* @example
* theme-color-darker(#007bff) // Returns darker blue
* theme-color-darker(#28a745) // Returns darker green
*/
@function theme-color-darker($color) {
@return shade-color($color, 10%);
}
//
// Replace all occurrences of a substring within a string.
//
@function str-replace($string, $search, $replace: "") {
$index: str-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;
}
/**
* Media query mixin for breakpoints smaller than the specified breakpoint
*
* @param {String} $name - The breakpoint name to target
* @param {Map} $breakpoints - The breakpoints map (default: $grid-breakpoints)
* @content - The CSS content to apply within the media query
*
* @example
* @include media-breakpoint-down-than(lg) {
* .container { max-width: 100%; }
* }
*/
@mixin media-breakpoint-down-than($name, $breakpoints: $grid-breakpoints) {
$prev: breakpoint-prev($name);
@@ -37,6 +59,19 @@
}
}
/**
* Gets the previous breakpoint name in the breakpoints map
*
* @param {String} $name - The current breakpoint name
* @param {Map} $breakpoints - The breakpoints map (default: $grid-breakpoints)
* @param {List} $breakpoint-names - List of breakpoint names (default: map-keys($breakpoints))
* @return {String|null} - The previous breakpoint name or null if none exists
*
* @example
* breakpoint-prev(lg) // Returns: md
* breakpoint-prev(sm) // Returns: xs
* breakpoint-prev(xs) // Returns: null
*/
@function breakpoint-prev($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {
$n: index($breakpoint-names, $name);
@if not $n {
@@ -45,9 +80,15 @@
@return if($n > 1, nth($breakpoint-names, $n - 1), null);
}
//
// Escape SVG strings.
//
/**
* Escapes special characters in SVG strings for use in CSS
*
* @param {String} $string - The SVG string to escape
* @return {String} - The escaped SVG string
*
* @example
* escape-svg("data:image/svg+xml,<svg>...</svg>") // Returns escaped SVG
*/
@function escape-svg($string) {
@if str-index($string, "data:image/svg+xml") {
@each $char, $encoded in $escaped-characters {
@@ -68,9 +109,13 @@
*
* @param {Number} $value - The value to be converted to a percentage.
* @return {String} - The percentage representation of the value.
*
* @example
* to-percentage(0.5) // Returns: 50%
* to-percentage(0.25) // Returns: 25%
*/
@function to-percentage($value) {
@return if(unitless($value), percentage($value), $value);
@return if(math.is-unitless($value), math.percentage($value), $value);
}
/**
@@ -78,7 +123,12 @@
*
* @param {Color} $color - The base color to be made transparent.
* @param {Number} $alpha - The level of transparency, ranging from 0 (fully transparent) to 1 (fully opaque). Default is 1.
* @param {Color} $background - The background color to mix with (default: transparent)
* @return {Color} - The resulting color with the specified transparency.
*
* @example
* color-transparent(#007bff, 0.5) // Returns semi-transparent blue
* color-transparent(#dc3545, 0.8) // Returns mostly opaque red
*/
@function color-transparent($color, $alpha: 1, $background: transparent) {
@if $alpha == 1 {
@@ -88,6 +138,15 @@
}
}
/**
* Converts an SVG string to a data URL format for use in CSS
*
* @param {String} $svg - The SVG markup to convert
* @return {String} - The data URL formatted SVG
*
* @example
* url-svg('<svg>...</svg>') // Returns: url('data:image/svg+xml;charset=UTF-8,...')
*/
@function url-svg($svg) {
$svg: str-replace($svg, '#', '%23');
$svg: str-replace($svg, '<svg', '<svg xmlns="http://www.w3.org/2000/svg"');

View File

@@ -13,4 +13,4 @@
@import "vendor/coloris";
@import "vendor/typed";
@import "vendor/turbo";
@import "vendor/fullcalendar";

View File

@@ -15,7 +15,7 @@
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;

View File

@@ -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 {

View File

@@ -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}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 map-merge($theme-colors, $social-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);
@@ -95,7 +100,8 @@
--#{$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,11 +110,13 @@
--#{$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});
}
.btn-ghost-#{$color} {
.btn-ghost-#{$color},
.btn-ghost.btn-#{$color} {
--#{$prefix}btn-color: var(--#{$prefix}#{$color});
--#{$prefix}btn-bg: transparent;
--#{$prefix}btn-border-color: transparent;
@@ -130,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
//
@@ -160,9 +179,8 @@
//
// 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;
@@ -215,7 +233,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;
}
}
@@ -224,14 +242,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;
@@ -249,6 +260,7 @@
&.show {
color: var(--#{$prefix}body-color);
background: var(--#{$prefix}active-bg);
border-color: transparent;
}
&.show {
@@ -259,3 +271,64 @@
.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;
}
}
}
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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} {

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -31,7 +31,8 @@ Markdown
}
> table {
@extend .table, .table-bordered;
font-size: var(--#{$prefix}body-font-size);
@extend .table, .table-bordered, .table-sm;
}
> blockquote {
@@ -46,7 +47,7 @@ Markdown
border: 1px solid var(--#{$prefix}border-color);
}
> pre {
pre {
max-height: 20rem;
}
}

View File

@@ -22,7 +22,7 @@
}
&.nav-pills {
margin: 0 (-$nav-link-padding-x);
margin: 0 calc(-1 * $nav-link-padding-x);
}
}
@@ -44,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,
@@ -61,8 +65,8 @@
.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 {

View File

@@ -1,25 +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%;
@@ -56,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);
}

View File

@@ -7,7 +7,3 @@
margin-left: .25rem;
}
}
.star {
}

View File

@@ -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);
}

View File

@@ -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,

View File

@@ -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

View File

@@ -71,6 +71,10 @@ h6,
line-height: var(--#{$prefix}line-height-h6);
}
.fs-base {
font-size: var(--#{$prefix}body-font-size);
}
strong,
.strong,
b {
@@ -212,7 +216,7 @@ Mentions
*/
.mention {
display: inline-block;
box-shadow: var(--#{$prefix}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);
@@ -241,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;
}
@@ -280,7 +284,6 @@ $text-variants: (
counter-reset: step;
border-left: 1px solid var(--#{$prefix}border-color);
margin-bottom: 2rem;
flex-direction: column;
h3 {
counter-increment: step;
@@ -312,3 +315,16 @@ $text-variants: (
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;
}
}

View File

@@ -1,5 +1,7 @@
@use "sass:map";
// All colors
@each $color, $value in map-merge($theme-colors, ( white: $white)) {
@each $color, $value in map.merge($theme-colors, ( white: $white)) {
.bg-#{"" + $color} {
background-color: color-mix(in srgb, var(--#{$prefix}#{$color}) calc(var(--#{$prefix}bg-opacity, 1) * 100%), transparent) !important;
}
@@ -64,7 +66,7 @@
}
.text-#{"" + $color}-fg {
color: $value !important;
color: var(--#{$prefix}#{$color}-fg) !important;
}
}
@@ -75,7 +77,7 @@
}
.text-#{"" + $color}-fg {
color: $value !important;
color: var(--#{$prefix}#{$color}-fg) !important;
}
}

View File

@@ -0,0 +1,47 @@
%hover-animation {
transition: transform 0.3s ease;
&:hover {
will-change: transform;
}
}
.hover-elevate-up {
@extend %hover-animation;
&:hover {
transform: translateY(-4px);
}
}
.hover-elevate-down {
@extend %hover-animation;
&:hover {
transform: translateY(4px);
}
}
.hover-scale {
@extend %hover-animation;
&:hover {
transform: scale(1.1);
}
}
.hover-rotate-end {
@extend %hover-animation;
&:hover {
transform: rotate(4deg);
}
}
.hover-rotate-start {
@extend %hover-animation;
&:hover {
transform: rotate(-4deg);
}
}

View File

@@ -46,3 +46,7 @@
.apexcharts-canvas {
border-radius: inherit;
}
.apexcharts-pie-area {
stroke: var(--#{$prefix}bg-surface) !important;
}

55
core/scss/vendor/_fullcalendar.scss vendored Normal file
View File

@@ -0,0 +1,55 @@
:root {
--fc-border-color: var(--#{$prefix}border-color);
--fc-daygrid-event-dot-width: 5px;
--fc-event-bg-color: var(--#{$prefix}primary-lt);
--fc-event-border-color: var(--#{$prefix}primary-200);
--fc-event-text-color: var(--#{$prefix}body-color);
}
.fc-toolbar-title {
font-size: var(--#{$prefix}font-size-h3) !important;
font-weight: var(--#{$prefix}font-weight-medium);
}
.fc-daygrid-dot-event {
background-color: var(--fc-event-bg-color);
border: 1px solid var(--fc-event-border-color);
color: var(--fc-event-text-color);
padding-top: 1px;
padding-bottom: 1px;
.fc-event-title {
font-weight: inherit;
}
}
.fc-col-header-cell {
background-color: var(--#{$prefix}bg-surface-secondary);
color: var(--#{$prefix}secondary);
text-transform: uppercase;
font-weight: var(--#{$prefix}font-weight-medium);
font-size: var(--#{$prefix}font-size-h5);
padding-top: .5rem !important;
padding-bottom: .5rem !important;
line-height: 1;
}
.fc-event-time {
font-weight: var(--#{$prefix}font-weight-bold) !important;
}
.fc-col-header-cell-cushion {
color: inherit;
}
.fc-daygrid-day-number {
color: var(--#{$prefix}secondary);
}
.fc-button {
color: var(--#{$prefix}body-color) !important;
background-color: transparent !important;
border-color: var(--#{$prefix}border-color) !important;
font-weight: var(--#{$prefix}font-weight-medium) !important;
}

View File

@@ -33,8 +33,8 @@
.noUi-horizontal & {
width: $form-range-thumb-width;
height: $form-range-thumb-height;
top: (-$form-range-thumb-height * .5);
right: (-$form-range-thumb-height * .5);
top: calc($form-range-thumb-height * -.5);
right: calc($form-range-thumb-height * -.5);
margin: 1px 1px 0 0;
}

View File

@@ -1,34 +0,0 @@
.tox-hugerte {
border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color) !important;
border-radius: $border-radius !important;
font-family: var(--#{$prefix}font-sans-serif) !important;
}
.tox-toolbar__group {
padding: 0 .5rem 0;
}
.tox .tox-toolbar__primary {
background: transparent !important;
}
.tox:not(.tox-hugerte-inline) {
.tox-editor-header {
border-bottom: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color) !important;
box-shadow: none !important;
padding: 0 !important;
}
}
.tox-tbtn {
margin: 0 !important;
}
.tox-statusbar {
border-top: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color) !important;
}
.tox .tox-toolbar-overlord,
.tox:not(.tox-hugerte-inline) .tox-editor-header {
background: transparent !important;
}

View File

@@ -22,6 +22,18 @@
.tox-tbtn {
margin: 0 !important;
background: var(--#{$prefix}bg-surface) !important;
&:hover,
&.tox-tbtn--enabled {
background: var(--#{$prefix}bg-surface-secondary) !important;
}
}
.tox-edit-area {
&::before {
border: none !important
}
}
.tox-statusbar {

View File

@@ -15,16 +15,13 @@ const plugins = [
babel({
exclude: 'node_modules/**',
babelHelpers: 'bundled'
})
]
plugins.push(
}),
replace({
'process.env.NODE_ENV': '"production"',
preventAssignment: true
}),
nodeResolve()
)
]
const rollupConfig = {
input: [

View File

@@ -1,34 +1,46 @@
# @tabler/docs
# Tabler Documentation Changelog
## 1.0.1
## 1.4.0
### Patch Changes
- Updated dependencies [c59bc9d]
- Updated dependencies [f9e4da2]
- Updated dependencies [aea3b0a]
- Updated dependencies [92a3afe]
- Updated dependencies [3fc7b84]
- Updated dependencies [199f39a]
- Updated dependencies [2f8a372]
- Updated dependencies [9fceadd]
- Updated dependencies [44250db]
- Updated dependencies [be1f3d1]
- Updated dependencies [c20d076]
- Updated dependencies [042e50f]
- Updated dependencies [473fa38]
- Updated dependencies [8646192]
- Updated dependencies [922bb03]
- Updated dependencies [44250db]
- Updated dependencies [9bbcb99]
- Updated dependencies [b17b488]
- Updated dependencies [ddcd3a7]
- Updated dependencies [e3d68d6]
- Updated dependencies [215eaa4]
- Updated dependencies [4846828]
- Updated dependencies [6b6617a]
- Updated dependencies [94bea00]
- Updated dependencies [e14e492]
- Updated dependencies [6d6d1bd]
- Updated dependencies [6c566cf]
- @tabler/core@1.2.0
- 6c38a48: Update Bootstrap to v5.3.7
- 6c47b5f: Change `package.json` to `core/libs.json` as a source of libraries
- 70a41e4: Replace a package list in `download.md` with a link to the 3rd-party libraries page
- Updated dependencies [6c4dd36]
- Updated dependencies [6fec73a]
- Updated dependencies [9951fe9]
- Updated dependencies [db6200a]
- Updated dependencies [e96f055]
- Updated dependencies [a200d30]
- Updated dependencies [6c38a48]
- Updated dependencies [2a12f72]
- Updated dependencies [49ab9ea]
- Updated dependencies [666a296]
- Updated dependencies [cfd4cb6]
- @tabler/core@1.4.0
## 1.3.0
### Patch Changes
- 8f70185: Improve Introduction, Base, Layout and Plugins sections in documentation
- e546706: Fix input mask example in docs
- 8850f61: Enhance pagination component with new styles
- 8470c9b: Fix broken links to other docs section and tabler.io website; improve some labels.
- 6a3513f: Fix links in Tabler Emails introduction, improve "How to contribute" and other small fixes
- 278967b: Fix switch icon examples with filled icons in documentation
- 38ea9aa: Use primary color for `::selection` inside `<code>` in docs
- 5b3e201: Fix documentation: remove duplicated code examples; increase height of dropdown examples; fix some links
- 7b72653: Fix ribbon component in the documentation
- c42b104: Fix incorrect label text on form elements docs page
- 895f943: Use tabs-package include to show webfont install steps
- 665472c: Demonstrate sticky header table more clearly in docs
- 7917f86: Replace non-existent Vimeo file and enhance the inline player documentation
- 7fc1d5c: Exclude headings in the carousel and modal examples from ToC
- 7773ff2: Exclude headings inside `.example` from the Table of Contents
- 222ddd4: Change WYSIWYG title to uppercase
- 9b15b94: Add missing `.steps-vertical` classes in docs
- 5fa662b: Use color-input examples in documentation
- 5619b2d: Fix `src` links to images in README and getting-started docs page
- f8075f6: Add documentation for 3rd-party libraries and resources

View File

@@ -44,8 +44,8 @@ The **Tabler Emails** package is organized into a clear and efficient folder str
### 1. Email Templates: `emails/`
This folder contains {{ emailsCount }} email subfolders, each with a specific template. Each email folder contains the following files:
* Compiled HTML files for light and dark themes. Read more about their usage in the [Compiled HTML](/docs/emails/compiled-html) section.
* Source HTML files for light and dark themes. Find more information in the [Source HTML](/docs/emails/source-html) section.
* Compiled HTML files for light and dark themes. Read more about their usage in the [Compiled HTML](/emails/introduction/compiled-html) section.
* Source HTML files for light and dark themes. Find more information in the [Source HTML](/emails/introduction/source-html) section.
* Screenshot images for desktop and mobile views.
* Assets folder with images used in the email template and the CSS file with styles.
@@ -60,4 +60,6 @@ It contains 4 subfolders with images used across the different email templates:
This file contains the license information for the Tabler Emails package.
### 4. Readme: `readme.html`
This file with the main information about the Tabler Emails package. It contains a brief description of the package and instructions on how to use it.
This file contains the main information about the Tabler Emails package, including a brief description and instructions on how to use it.
Do you like our templates? **Find out more and purchase on [our website]({{ site.homepage }}/emails)**.

View File

@@ -9,21 +9,7 @@ summary: Tabler Icons as a webfont allows you to easily include icons in your pr
## Installation
```
yarn add @tabler/icons-webfont
```
or
```
npm install @tabler/icons-webfont
```
or
```
pnpm install @tabler/icons-webfont
```
{% include "docs/tabs-package.html" name="@tabler/icons-webfont" %}
or just [download from Github](https://github.com/tabler/tabler-icons/releases).

View File

@@ -4,7 +4,7 @@ description: Use Tabler Icons directly in Figma.
summary: The Tabler Figma plugin allows designers to seamlessly integrate Tabler Icons into their Figma projects, providing quick access to a vast library of customizable icons that enhance the design workflow.
---
![Tabler Figma Plugin](/docs/icons/figma-plugin.png)
![Tabler Figma Plugin](/img/icons/figma-plugin.png)
The Tabler Icons Figma plugin is an essential tool for designers looking to enhance their workflow. It provides seamless access to a comprehensive library of high-quality, customizable icons directly within Figma. Whether you're designing dashboards, websites, or mobile apps, this plugin allows you to quickly search, preview, and integrate Tabler Icons into your projects, saving time and ensuring a consistent, modern aesthetic.

View File

@@ -75,3 +75,5 @@ This folder contains SVG files using CSS variables for flexible theming.
- `light/`: Light-themed illustrations.
This structure ensures easy access to various formats and themes, making Tabler Illustrations a versatile tool for developers and designers alike.
**Find out more and purchase Tabler Illustrations at [our website]({{ site.homepage }}/illustrations)**.

View File

@@ -511,7 +511,7 @@ Look at the example below to see how you can change the color of the skin.
Tabler Illustrations uses `--tblr-primary` as a fallback color if `--tblr-illustrations-primary` is not set, so if you have a primary color set in your design system, you can use that to ensure consistency across your project.
```html example columns={1} centered vertical separated height="30rem"
{% capture html -%}
<div class="card">
<div class="card-body">
<div>
@@ -785,8 +785,8 @@ Tabler Illustrations uses `--tblr-primary` as a fallback color if `--tblr-illust
});
});
</script>
```
{%- endcapture %}
{% include "docs/example.html" html=html %}
## Dark version of the illustration

View File

@@ -0,0 +1,17 @@
---
title: Preview
summary: "Tabler Illustrations offers 80 illustrations in two themes: light and dark. You can use them in your projects to enhance the visual appeal and convey messages effectively."
---
Look at full list of illustrations below and see how they look. Find out more and purchase Tabler Illustrations at [our website]({{ site.homepage }}/illustrations).
{% assign all-illustrations = illustrations | sort %}
<div class="row g-2 gy-6">
{% for illustration in all-illustrations %}
<div class="col-6 col-md-4 col-lg-3 text-center">
<img src="/static/illustrations/light/{{ illustration }}.png" alt="{{ illustration }}" class="hide-theme-dark" />
<img src="/static/illustrations/dark/{{ illustration }}.png" alt="{{ illustration }}" class="hide-theme-light" />
<code>{{ illustration }}</code>
</div>
{% endfor %}
</div>

View File

@@ -3,7 +3,8 @@ title: Welcome to Tabler Documentation
summary: Tabler Docs provides a comprehensive guide to help you get started with the Tabler ecosystem, including its UI components, plugins, and icons. Explore detailed documentation to understand and leverage the full potential of Tabler in your projects.
---
<ResponsiveImage src="/docs/tabler.png" src-dark="/docs/tabler-dark.png" alt="Tabler" width="816" height="620" class="mb-4" />
<img src="/img/tabler.png" alt="Tabler" class="mb-4 hide-theme-dark border-0" width="816" height="620" />
<img src="/img/tabler-dark.png" alt="Tabler" class="mb-4 hide-theme-light border-0" width="816" height="620" />
Find all the guides and resources you need to develop with Tabler and our other tools. Explore our UI components, icons, illustrations, and email templates to enhance your web development experience. Our tools are designed to be easy to use, customizable, and fully responsive, ensuring that your projects look great on any device.

View File

@@ -10,15 +10,6 @@ description: Role of typography in interface design.
Use HTML headings to organize content on your website and make the structure clear and user-friendly. The `h1` to `h6` tags are used to define HTML headings.
The `h1` tag is the highest level and the `h6` tag is the lowest level.
```html
<h1>H1 Heading</h1>
<h2>H2 Heading</h2>
<h3>H3 Heading</h3>
<h4>H4 Heading</h4>
<h5>H5 Heading</h5>
<h6>H6 Heading</h6>
```
Below are examples of headings with different levels:
{% capture html -%}
@@ -29,7 +20,7 @@ Below are examples of headings with different levels:
<h5>H5 Heading</h5>
<h6>H6 Heading</h6>
{%- endcapture %}
{% include "docs/example.html" html=html vertical %}
{% include "docs/example.html" html=html %}
## Paragraphs
@@ -55,32 +46,15 @@ If you use a second paragraph, it will be separated from the first one by a blan
Use a variety of semantic text elements, depending on how you want to display particular fragments of content.
```html
<abbr title="Internationalization">I18N</abbr>
<strong>Bold</strong>
<cite>Citation</cite>
<code>Hello World!</code>
<del>Deleted</del>
<em>Emphasis</em>
<i>Italic</i>
<ins>Inserted</ins>
<kbd>Ctrl + S</kbd>
<mark>Highlighted</mark>
<s>Strikethrough</s>
<samp>Sample</samp>
Text <sub>Subscripted</sub> Text <sup>Superscripted</sup>
<time>20:00</time>
<u>Underline</u>
<var>x</var> = <var>y</var> + 2
```
Here are examples of semantic text elements:
{% capture html -%}
<div>
<abbr title="Internationalization">I18N</abbr>
</div>
<div><strong>Bold</strong></div>
<div>
<strong>Bold</strong>
</div>
<div>
<cite>Citation</cite>
</div>
@@ -111,19 +85,23 @@ Here are examples of semantic text elements:
<div>
<samp>Sample</samp>
</div>
<div>Text <sub>Subscripted</sub></div>
<div>Text <sup>Superscripted</sup></div>
<div>
Text <sub>Subscript</sub>
</div>
<div>
Text <sup>Superscript</sup>
</div>
<div>
<time>20:00</time>
</div>
<div>
<u>Underline</u>
</div>
<div><var>x</var> = <var>y</var> + 2</div>
<div>
<var>x</var> = <var>y</var> + 2
</div>
{%- endcapture %}
{% include "docs/example.html" html=html vertical %}
{% include "docs/example.html" html=html %}
## Horizontal rules
@@ -144,15 +122,11 @@ Use the `hr` tag to represent a thematic break between paragraphs within one sec
</p>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html vertical %}
```html
<hr />
```
{% include "docs/example.html" html=html %}
## Horizontal rules with label
You can also add a label to a horizontal rule and align it as you see fit.
You can also add a label to a horizontal rule and align it as you see fit. Centered label is the default.
{% capture html -%}
<p>
@@ -173,15 +147,22 @@ You can also add a label to a horizontal rule and align it as you see fit.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
labore et dolore magna aliquyam erat, sed diam voluptua.
</p>
<div class="hr-text hr-text-end">
<div class="hr-text hr-text-start">
<span>Rule text</span>
</div>
<p>
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea
takimata sanctus est Lorem ipsum dolor sit amet.
</p>
<div class="hr-text hr-text-end">
<span>Rule text</span>
</div>
<p>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
labore et dolore magna aliquyam erat, sed diam voluptua.
</p>
{%- endcapture %}
{% include "docs/example.html" html=html raw %}
{% include "docs/example.html" html=html %}
## Optimized for different alphabets
@@ -198,45 +179,33 @@ Tabler has been optimized to correctly display content in any language. It suppo
<p>אלפבית עברי</p>
<p>อักษรไทย</p>
{%- endcapture %}
{% include "docs/example.html" html=html raw %}
{% include "docs/example.html" html=html %}
## Text transform
Transform the content of components with text capitalization classes.
{% capture html -%}
<div class="text-lowercase">Lowercased text.</div>
<div class="text-uppercase">Uppercased text.</div>
<div class="text-capitalize">Capitalized text.</div>
{%- endcapture %}
{% include "docs/example.html" html=html raw %}
```html
<p class="text-lowercase">Lowercased text.</p>
<p class="text-uppercase">Uppercased text.</p>
<p class="text-capitalize">Capitalized text.</p>
```
{%- endcapture %}
{% include "docs/example.html" html=html %}
## Letter spacing
Control the tracking (letter spacing) of an element and make it tight, wide or normal.
{% capture html -%}
<div class="tracking-tight">Lorem ipsum dolor sit amet. Tight letter spacing.</div>
<div class="tracking-normal">Lorem ipsum dolor sit amet. Normal letter spacing.</div>
<div class="tracking-wide">Lorem ipsum dolor sit amet. Wide letter spacing.</div>
{%- endcapture %}
{% include "docs/example.html" html=html raw %}
```html
<p class="tracking-tight">Lorem ipsum dolor sit amet. Tight letter spacing.</p>
<p class="tracking-normal">Lorem ipsum dolor sit amet. Normal letter spacing.</p>
<p class="tracking-wide">Lorem ipsum dolor sit amet. Wide letter spacing.</p>
```
{%- endcapture %}
{% include "docs/example.html" html=html %}
## Line height
Control the leading (line height) of an element.
Control the leading (line height) of an element using the `.lh-*` classes. The line height is the vertical space between lines of text.
{% capture html -%}
<p class="lh-1">
@@ -254,15 +223,6 @@ Control the leading (line height) of an element.
{%- endcapture %}
{% include "docs/example.html" html=html %}
To control the line height of an element, use the following classes:
```html
<p class="lh-1">...</p>
<p class="lh-sm">...</p>
<p class="lh-base">...</p>
<p class="lh-lg">...</p>
```
## Antialiasing
Control the font smoothing of an element.
@@ -273,21 +233,17 @@ Use the `.antialiased` utility to render text using subpixel antialiasing or use
<div class="antialiased">Text with antialiasing</div>
<div class="subpixel-antialiased">Text without antialiasing</div>
{%- endcapture %}
{% include "docs/example.html" html=html raw %}
{% include "docs/example.html" html=html %}
## Keyboard input
Use the `<kbd>` to indicate input that is typically entered via keyboard.
{% capture html -%}
<div>To edit settings, press <kbd>ctrl</kbd> + <kbd>,</kbd> or <kbd>ctrl</kbd> + <kbd>C</kbd>.</div>
To edit settings, press <kbd>ctrl</kbd> + <kbd>,</kbd> or <kbd>ctrl</kbd> + <kbd>C</kbd>.
{%- endcapture %}
{% include "docs/example.html" html=html %}
```html
To edit settings, press <kbd>ctrl</kbd> + <kbd>,</kbd> or <kbd>ctrl</kbd> + <kbd>C</kbd>.
```
## Markdown elements
If you can't use the CSS classes you want, or you just want to use HTML tags, use the `.markdown` class in a container. It will apply the default styles for markdown elements.

View File

@@ -14,22 +14,10 @@ Combine `alert` class with one of the following: `alert-success`, `alert-info`,
Alert classes affect the color of all the text inside an alert. Use another class, e.g. `text-secondary` to change the color of the alert's content.
{% capture html -%}
<div class="alert alert-success" role="alert">
<h4 class="alert-title">Wow! Everything worked!</h4>
<div class="text-secondary">Your account has been saved!</div>
</div>
<div class="alert alert-info" role="alert">
<h4 class="alert-title">Did you know?</h4>
<div class="text-secondary">Here is something that you might like to know.</div>
</div>
<div class="alert alert-warning" role="alert">
<h4 class="alert-title">Uh oh, something went wrong</h4>
<div class="text-secondary">Sorry! There was a problem with your request.</div>
</div>
<div class="alert alert-danger" role="alert">
<h4 class="alert-title">I'm so sorry&hellip;</h4>
<div class="text-secondary">Your account has been deleted and can't be restored.</div>
</div>
{% include "ui/alert.html" type="success" title="Wow! Everything worked!" description="Your account has been saved!" %}
{% include "ui/alert.html" type="info" title="Did you know?" description="Here is something that you might like to know." %}
{% include "ui/alert.html" type="warning" title="Uh oh, something went wrong" description="Sorry! There was a problem with your request." %}
{% include "ui/alert.html" type="danger" title="I'm so sorry&hellip;" description="Your account has been deleted and can't be restored." %}
{%- endcapture %}
{% include "docs/example.html" html=html %}
@@ -38,9 +26,7 @@ Alert classes affect the color of all the text inside an alert. Use another clas
Add a link to your alert message to redirect users to the details they need to complete or additional information they should read. Use `alert-link` class to style the link and match the text color.
{% capture html -%}
<div class="alert alert-danger m-0">
This is a danger alert — <a href="#" class="alert-link">check it out</a>!
</div>
{% include "ui/alert.html" type="danger" title="This is a danger alert" link="check it out" %}
{%- endcapture %}
{% include "docs/example.html" html=html %}
@@ -53,34 +39,7 @@ Add the `x` close button to make an alert modal dismissible. Thanks to that, you
```
{% capture html -%}
<div class="alert alert-success alert-dismissible" role="alert">
<div>
<h4 class="alert-title">Wow! Everything worked!</h4>
<div class="text-secondary">Your account has been saved!</div>
</div>
<a class="btn-close" data-bs-dismiss="alert" aria-label="close"></a>
</div>
<div class="alert alert-info alert-dismissible" role="alert">
<div>
<h4 class="alert-title">Did you know?</h4>
<div class="text-secondary">Here is something that you might like to know.</div>
</div>
<a class="btn-close" data-bs-dismiss="alert" aria-label="close"></a>
</div>
<div class="alert alert-warning alert-dismissible" role="alert">
<div>
<h4 class="alert-title">Uh oh, something went wrong</h4>
<div class="text-secondary">Sorry! There was a problem with your request.</div>
</div>
<a class="btn-close" data-bs-dismiss="alert" aria-label="close"></a>
</div>
<div class="alert alert-danger alert-dismissible" role="alert">
<div>
<h4 class="alert-title">I'm so sorry&hellip;</h4>
<div class="text-secondary">Your account has been deleted and can't be restored.</div>
</div>
<a class="btn-close" data-bs-dismiss="alert" aria-label="close"></a>
</div>
{% include "ui/alert.html" type="danger" title="This is a danger alert" show-close %}
{%- endcapture %}
{% include "docs/example.html" html=html %}
@@ -415,4 +374,6 @@ You're not limited to the 4 default alert colors. You can use any [base or socia
## SASS variables
You can customize the alert colors by changing the SASS variables. The default values are:
{% scss-docs "alert-variables" "ui/_alerts.scss" %}

View File

@@ -13,12 +13,6 @@ Add the autosize element to your input to make it automatically adjust to the le
To create autosize textarea, add the `data-bs-toggle="autosize"` attribute to the textarea element:
```html
<textarea class="form-control" data-bs-toggle="autosize" placeholder="Type something…"></textarea>
```
Look at the example below to see how the autosize element works:
{% capture html -%}
<label class="form-label">Autosize example</label>
<textarea class="form-control" data-bs-toggle="autosize" placeholder="Type something…"></textarea>

View File

@@ -56,15 +56,9 @@ Besides pictures and initials, you can also use icons to make the avatars more u
{%- endcapture %}
{% include "docs/example.html" html=html centered %}
```html
<span class="avatar">
{% include "ui/icon.html" icon="user" %}
</span>
```
## Avatar initials color
Customize the color of the avatars' background. You can click [here](/docs/ui/base/colors) to see the list of available colors.
Customize the color of the avatars' background. See the [full list of available colors](/ui/base/colors) for more details.
{% capture html -%}
<span class="avatar bg-green-lt">AB</span>

View File

@@ -10,50 +10,56 @@ bootstrapLink: components/badge/
The default badges are square and come in the basic set of colors.
{% capture html -%}
<span class="badge bg-blue-lt">Blue</span>
<span class="badge bg-azure-lt">Azure</span>
<span class="badge bg-indigo-lt">Indigo</span>
<span class="badge bg-purple-lt">Purple</span>
<span class="badge bg-pink-lt">Pink</span>
<span class="badge bg-red-lt">Red</span>
<span class="badge bg-orange-lt">Orange</span>
<span class="badge bg-yellow-lt">Yellow</span>
<span class="badge bg-lime-lt">Lime</span>
<span class="badge bg-green-lt">Green</span>
<span class="badge bg-teal-lt">Teal</span>
<span class="badge bg-cyan-lt">Cyan</span>
<div class="badges-list">
{% for color in site.colors -%}
{% include "ui/badge.html" color=color[0] text=color[1].title %}
{%- endfor -%}
</div>
{%- endcapture %}
{% include "docs/example.html" html=html centered %}
## Headings
Badges can be used in headings to draw attention to new or important information. You can use them in any heading level, from `<h1>` to `<h6>`. The example below shows how to use badges in headings.
{% capture html -%}
<h1>Example heading <span class="badge">New</span></h1>
<h2>Example heading <span class="badge">New</span></h2>
<h3>Example heading <span class="badge">New</span></h3>
<h4>Example heading <span class="badge">New</span></h4>
<h5>Example heading <span class="badge">New</span></h5>
<h6>Example heading <span class="badge">New</span></h6>
<h1>
Example heading
{% include "ui/badge.html" text="New" -%}
</h1>
<h2>
Example heading
{% include "ui/badge.html" text="New" -%}
</h2>
<h3>
Example heading
{% include "ui/badge.html" text="New" -%}
</h3>
<h4>
Example heading
{% include "ui/badge.html" text="New" -%}
</h4>
<h5>
Example heading
{% include "ui/badge.html" text="New" -%}
</h5>
<h6>
Example heading
{% include "ui/badge.html" text="New" -%}
</h6>
{%- endcapture %}
{% include "docs/example.html" html=html %}
## Outline badges
## Light versions of badges
You can use the `-lt` classes to create a light version of the badge. This is useful for creating a more subtle look.
For example you can use the `bg-blue-lt` class to create a light blue badge. If you add the `text-blue-lt-fg` class, the text will be blue as well.
{% capture html -%}
<span class="badge badge-outline text-blue">blue</span>
<span class="badge badge-outline text-azure">azure</span>
<span class="badge badge-outline text-indigo">indigo</span>
<span class="badge badge-outline text-purple">purple</span>
<span class="badge badge-outline text-pink">pink</span>
<span class="badge badge-outline text-red">red</span>
<span class="badge badge-outline text-orange">orange</span>
<span class="badge badge-outline text-yellow">yellow</span>
<span class="badge badge-outline text-lime">lime</span>
<span class="badge badge-outline text-green">green</span>
<span class="badge badge-outline text-teal">teal</span>
<span class="badge badge-outline text-cyan">cyan</span>
{%- for color in site.colors -%}
{% include "ui/badge.html" color=color[0] text=color[1].title light %}
{%- endfor -%}
{%- endcapture %}
{% include "docs/example.html" html=html centered %}
@@ -62,18 +68,44 @@ The default badges are square and come in the basic set of colors.
Use the `.badge-pill` class if you want to create a badge with rounded corners. Its width will adjust to the label text.
{% capture html -%}
<span class="badge badge-pill bg-blue-lt">1</span>
<span class="badge badge-pill bg-azure-lt">2</span>
<span class="badge badge-pill bg-indigo-lt">3</span>
<span class="badge badge-pill bg-purple-lt">4</span>
<span class="badge badge-pill bg-pink-lt">5</span>
<span class="badge badge-pill bg-red-lt">6</span>
<span class="badge badge-pill bg-orange-lt">7</span>
<span class="badge badge-pill bg-yellow-lt">8</span>
<span class="badge badge-pill bg-lime-lt">9</span>
<span class="badge badge-pill bg-green-lt">10</span>
<span class="badge badge-pill bg-teal-lt">11</span>
<span class="badge badge-pill bg-cyan-lt">12</span>
{%- for color in site.colors -%}
{% include "ui/badge.html" color=color[0] text=color[1].title class="badge-pill" %}
{%- endfor -%}
{%- endcapture %}
{% include "docs/example.html" html=html centered %}
You can use it to create a pill with numbers, for example, to show the number of unread messages. The badge will adjust its width to the number of digits.
{% capture html -%}
{%- for color in site.colors -%}
{% include "ui/badge.html" color=color[0] text=forloop.index class="badge-pill" %}
{%- endfor -%}
{%- endcapture %}
{% include "docs/example.html" html=html centered %}
## Badges with icons
You can use icons in badges to make them more visually appealing. The example below demonstrates how to use icons in badges.
{% capture html -%}
{% include "ui/badge.html" text="Star" icon="star" -%}
{% include "ui/badge.html" text="Heart" icon="heart" -%}
{% include "ui/badge.html" text="Check" icon="check" -%}
{% include "ui/badge.html" text="X" icon="x" -%}
{% include "ui/badge.html" text="Plus" icon="plus" -%}
{% include "ui/badge.html" text="Minus" icon="minus" -%}
{%- endcapture %}
{% include "docs/example.html" html=html centered %}
You can also use an icon on the right side of the badge. The example below demonstrates how to use icons on the right side of badges.
{% capture html -%}
{% include "ui/badge.html" text="Star" icon-end="arrow-right" -%}
{% include "ui/badge.html" text="Heart" icon-end="arrow-right" -%}
{% include "ui/badge.html" text="Check" icon-end="arrow-right" -%}
{% include "ui/badge.html" text="X" icon-end="arrow-right" -%}
{% include "ui/badge.html" text="Plus" icon-end="arrow-right" -%}
{% include "ui/badge.html" text="Minus" icon-end="arrow-right" -%}
{%- endcapture %}
{% include "docs/example.html" html=html centered %}
@@ -99,20 +131,55 @@ Place the badge within an `<a>` element if you want it to perform the function o
## Button with badge
Badges can be used as part of links or buttons to provide a counter.
Badges can be used as parts of links or buttons to provide, for example, a counter. Use the `.badge-notification` class to create a notification badge. This class will position the badge in the top right corner of the button.
```
<button type="button" class="btn">
Notifications <span class="badge bg-red-lt ms-2">4</span>
</button>
```
The results can be seen in the example below.
If you don't provide text for the badge, you end up with a small dot. This is useful for creating a simple notification button.
{% capture html -%}
<button type="button" class="btn">Notifications <span class="badge bg-red-lt ms-2">4</span></button>
<button type="button" class="btn">
Notifications <span class="badge bg-green-lt ms-2">4</span>
Notifications {% include "ui/badge.html" text="2" color="red" class="ms-2" -%}
</button>
<button type="button" class="btn">
Inbox {% include "ui/badge.html" text="4" color="red" class="badge-notification" -%}
</button>
<button type="button" class="btn">
Profile {% include "ui/badge.html" text="" color="red" class="badge-notification" -%}
</button>
{%- endcapture %}
{% include "docs/example.html" html=html centered %}
## Animated badges
You can use the `.badge-blink` class to create a blinking effect. This class will add a CSS animation to the badge, so it will blink to draw attention.
{% capture html -%}
<button type="button" class="btn">
Profile {% include "ui/badge.html" text="" color="red" class="badge-notification badge-blink" -%}
</button>
{% endcapture %}
{% include "docs/example.html" html=html centered %}
## Size Options
Use `.badge-sm` or `.badge-lg` to change badge size according to your needs. The default size is `.badge` and it is used in the examples above.
{% capture html -%}
<div>
{% include "ui/badge.html" color="primary" scale="sm" text="New" class="badge-sm" -%}
{% include "ui/badge.html" color="primary" scale="sm" text="1" class="badge-pill" -%}
</div>
<div>
{% include "ui/badge.html" color="primary" text="New" class="badge-sm" -%}
{% include "ui/badge.html" color="primary" text="1" class="badge-pill" -%}
</div>
<div>
{% include "ui/badge.html" color="primary" scale="lg" text="New" class="badge-sm" -%}
{% include "ui/badge.html" color="primary" scale="lg" text="1" class="badge-pill" -%}
</div>
{%- endcapture %}
{% include "docs/example.html" html=html centered vertical %}
## More examples
If you want to see more examples of badges, you can check out the [Bootstrap documentation](https://getbootstrap.com/docs/5.3/components/badge/) for badges. You can also find more examples in the Tabler [Badges](https://preview.tabler.io/badges.html) preview.

View File

@@ -9,122 +9,41 @@ description: Navigation aid for better structure.
Use the `breadcrumb` class to add a breadcrumb to your interface design for better navigation. The `active` modifier in a `li` tag will help you indicate the current page location and facilitate navigation within your website or app.
```html
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a href="#">...</a>
</li>
<li class="breadcrumb-item active">
<a href="#">...</a>
</li>
</ol>
```
Look at the example below to see how breadcrumbs work in practice.
{% capture html -%}
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a href="#">Home</a>
</li>
<li class="breadcrumb-item">
<a href="#">Library</a>
</li>
<li class="breadcrumb-item active">
<a href="#">Data</a>
</li>
</ol>
{% include "ui/breadcrumb.html" pages="Home,Library,Data" %}
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html centered %}
## Different separators
You can use different breadcrumb styles to match your website or app design. Choose between `breadcrumb-dots`, `breadcrumb-arrows`, and `breadcrumb-bullets` to create a unique look.
```html
<ol class="breadcrumb breadcrumb-dots">
...
</ol>
```
This example shows how to use different breadcrumb styles.
{% capture html -%}
<ol class="breadcrumb breadcrumb-dots">
<li class="breadcrumb-item">
<a href="#">Home</a>
</li>
<li class="breadcrumb-item">
<a href="#">Library</a>
</li>
<li class="breadcrumb-item active">
<a href="#">Data</a>
</li>
</ol>
<ol class="breadcrumb breadcrumb-arrows">
<li class="breadcrumb-item">
<a href="#">Home</a>
</li>
<li class="breadcrumb-item">
<a href="#">Library</a>
</li>
<li class="breadcrumb-item active">
<a href="#">Data</a>
</li>
</ol>
<ol class="breadcrumb breadcrumb-bullets">
<li class="breadcrumb-item">
<a href="#">Home</a>
</li>
<li class="breadcrumb-item">
<a href="#">Library</a>
</li>
<li class="breadcrumb-item active">
<a href="#">Data</a>
</li>
</ol>
{% include "ui/breadcrumb.html" pages="Home,Library,Data" separator="dots" %}
{% include "ui/breadcrumb.html" pages="Home,Library,Data" separator="arrows" %}
{% include "ui/breadcrumb.html" pages="Home,Library,Data" separator="bullets" %}
{%- endcapture %}
{% include "docs/example.html" html=html vertical separated %}
{% include "docs/example.html" html=html vertical separated centered %}
## With icon
You can use icons in breadcrumbs to make them more visually appealing. The example below demonstrates how to use icons in breadcrumbs.
{% capture html -%}
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a href="#">
{% include "ui/icon.html" icon="home" %}
</a>
</li>
<li class="breadcrumb-item">
<a href="#">Library</a>
</li>
<li class="breadcrumb-item active">
<a href="#">Data</a>
</li>
</ol>
{% include "ui/breadcrumb.html" pages="Home,Library,Data" home-icon %}
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html vertical separated %}
## Muted breadcrumbs
You can use the `breadcrumb-muted` class to create a muted breadcrumb style. This style is perfect for breadcrumbs that are not the main focus of your website or app.
{% capture html -%}
<nav aria-label="breadcrumb">
<ol class="breadcrumb breadcrumb-muted">
<li class="breadcrumb-item">
<a href="#">Home</a>
</li>
<li class="breadcrumb-item">
<a href="#">Library</a>
</li>
<li class="breadcrumb-item active">
<a href="#">Data</a>
</li>
</ol>
</nav>
{% include "ui/breadcrumb.html" pages="Home,Library,Data" class="breadcrumb-muted" %}
{%- endcapture %}
{% include "docs/example.html" html=html %}
@@ -136,24 +55,9 @@ You can use breadcrumbs in headers to show the current page location and provide
<div class="page-header">
<div class="row align-items-center mw-100">
<div class="col">
<div class="mb-1">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a href="#">Home</a>
</li>
<li class="breadcrumb-item">
<a href="#">Library</a>
</li>
<li class="breadcrumb-item active">
<a href="#">Articles</a>
</li>
</ol>
</div>
{% include "ui/breadcrumb.html" pages="Home,Library,Articles" -%}
<h2 class="page-title">
<span class="text-truncate"
>Knights of Ni, we are but simple travelers who seek the enchanter who lives beyond these
woods.</span
>
<span class="text-truncate">How to Build a Modern Dashboard with Tabler</span>
</h2>
</div>
<div class="col-auto">
@@ -168,5 +72,5 @@ You can use breadcrumbs in headers to show the current page location and provide
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html centered vertical %}

View File

@@ -16,7 +16,7 @@ As one of the most common elements of UI design, buttons have a very important f
<input type="submit" class="btn" value="Submit" />
<input type="reset" class="btn" value="Reset" />
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
## Default button
@@ -25,7 +25,7 @@ The standard button creates a white background and subtle hover animation. It's
{% capture html -%}
<a href="#" class="btn" role="button">Link</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
## Button variations
@@ -41,7 +41,7 @@ Use the button classes that correspond to the function of your button. The big r
<a href="#" class="btn btn-dark">Dark</a>
<a href="#" class="btn btn-light">Light</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html separated centered -%}
{%- include "docs/example.html" html=html separated centered %}
## Disabled buttons
@@ -57,7 +57,7 @@ Make buttons look inactive to show that an action is possible once the user meet
<a href="#" class="btn btn-dark disabled">Dark</a>
<a href="#" class="btn btn-light disabled">Light</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html separated centered -%}
{%- include "docs/example.html" html=html separated centered %}
## Color variations
@@ -77,7 +77,7 @@ Choose the right color for your button to make it go well with your design and d
<a href="#" class="btn btn-teal">Teal</a>
<a href="#" class="btn btn-cyan">Cyan</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html separated centered -%}
{%- include "docs/example.html" html=html separated centered %}
## Ghost buttons
@@ -95,7 +95,7 @@ Use the `.btn-ghost-*` class to make your button look simple yet aesthetically a
<a href="#" class="btn btn-ghost-light">Light</a>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html separated vertical -%}
{%- include "docs/example.html" html=html separated vertical %}
## Square buttons
@@ -104,7 +104,7 @@ Use the `.btn-square` class to remove the border radius, if you want the corners
{% capture html -%}
<a href="#" class="btn btn-square">Square button</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
## Pill buttons
@@ -113,7 +113,7 @@ Add the `.btn-pill` class to your button to make it rounded and give it a modern
{% capture html -%}
<a href="#" class="btn btn-pill">Pill button</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
## Outline buttons
@@ -129,7 +129,7 @@ Replace the default modifier class with the `.btn-outline-*` class, if you want
<a href="#" class="btn btn-outline-dark">Dark</a>
<a href="#" class="btn btn-outline-light">Light</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
## Button size
@@ -139,19 +139,19 @@ Add `.btn-lg` or `.btn-sm` to change the size of your button and differentiate t
<button type="button" class="btn btn-primary btn-lg">Large button</button>
<button type="button" class="btn btn-lg">Large button</button>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
{% capture html -%}
<button type="button" class="btn btn-primary btn-sm">Small button</button>
<button type="button" class="btn btn-sm">Small button</button>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
## Buttons with icons
Label your button with text and add an icon to communicate the action and make it easy to identify for users. Icons are easily recognized and improve the aesthetics of your button design, giving it a modern and attractive look.
Icons can be found [**here**](/docs/components/icons)
See all icons at [tabler.io/icons]({{ site.icons.link }}).
{% capture html -%}
<button type="button" class="btn">
@@ -179,7 +179,7 @@ Icons can be found [**here**](/docs/components/icons)
Comment
</button>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
## Social buttons
@@ -243,7 +243,7 @@ You can use the icons of popular social networking sites, which users are famili
Tabler
</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html separated centered hide-code -%}
{%- include "docs/example.html" html=html separated centered hide-code %}
```html
<a href="#" class="btn btn-facebook">
@@ -298,7 +298,7 @@ You can also add an icon without the name of a social networking site, if you wa
{%- include "ui/icon.html" icon="brand-tabler" -%}
</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html separated vertical hide-code -%}
{%- include "docs/example.html" html=html separated vertical hide-code %}
```html
<a href="#" class="btn btn-facebook btn-icon" aria-label="Button">
@@ -333,7 +333,7 @@ Add the `.btn-icon` class to remove unnecessary padding from your button and use
{%- include "ui/icon.html" icon="git-merge" -%}
</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html separated centered hide-code -%}
{%- include "docs/example.html" html=html separated centered hide-code %}
```html
<a href="#" class="btn btn-primary btn-icon" aria-label="Button">
@@ -373,7 +373,7 @@ Create a dropdown button that will encourage users to click for more options. Yo
</div>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered hide-code -%}
{%- include "docs/example.html" html=html centered hide-code height="260px" %}
```html
<div class="dropdown">
@@ -399,7 +399,7 @@ Add the `.btn-loading` class to show a button's loading state, which can be usef
Loading button with loooong content
</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
{% capture html -%}
<a href="#" class="btn btn-primary">
@@ -407,7 +407,17 @@ Add the `.btn-loading` class to show a button's loading state, which can be usef
Button
</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
## Full width buttons
Add the `.w-100` class to make buttons span the full width of their container. This is useful for mobile-first designs or when you want buttons to take up the entire available space.
{% capture html -%}
<a href="#" class="btn btn-primary w-100">Full width button</a>
<a href="#" class="btn btn-outline-secondary w-100">Full width outline button</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html separated %}
## List of buttons
@@ -420,7 +430,7 @@ Create a list of buttons using the `.btn-list` container to display different ac
<a href="#" class="btn btn-danger">Cancel</a>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
If the list is long, it will be wrapped and some buttons will be moved to the next line, keeping them all evenly spaced.
@@ -447,7 +457,7 @@ If the list is long, it will be wrapped and some buttons will be moved to the ne
<a href="#" class="btn">Nineteen</a>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
Use the `.text-center` or the `.text-end` modifiers to change the buttons' alignment and place them where they suit best.
@@ -457,7 +467,7 @@ Use the `.text-center` or the `.text-end` modifiers to change the buttons' align
<a href="#" class="btn btn-primary">Save changes</a>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html -%}
{%- include "docs/example.html" html=html %}
{% capture html -%}
<div class="btn-list justify-content-end">
@@ -465,7 +475,7 @@ Use the `.text-center` or the `.text-end` modifiers to change the buttons' align
<a href="#" class="btn btn-primary">Save changes</a>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html -%}
{%- include "docs/example.html" html=html %}
{% capture html -%}
<div class="btn-list">
@@ -474,7 +484,27 @@ Use the `.text-center` or the `.text-end` modifiers to change the buttons' align
<a href="#" class="btn btn-primary">Save changes</a>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html -%}
{%- include "docs/example.html" html=html %}
## Buttons with badges
Add badges to buttons to display additional information like counts, notifications, or status indicators. Badges automatically position themselves within the button layout.
{% capture html -%}
<a href="#" class="btn">
Notifications
<span class="badge ms-2">14</span>
</a>
<a href="#" class="btn">
Messages
<span class="badge ms-2">3</span>
</a>
<a href="#" class="btn">
Alerts
<span class="badge ms-2">7</span>
</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered %}
## Buttons with avatars
@@ -507,4 +537,143 @@ Use buttons with avatars to simplify the process of interaction and make your de
Avatar
</a>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered -%}
{%- include "docs/example.html" html=html centered %}
## Buttons with animations on hover
Add a subtle animation effect to your buttons when users hover over them. This can enhance the interactivity and provide visual feedback to improve the user experience.
{% capture html -%}
<div class="btn-list">
<a class="btn btn-animate-icon">
Save {% include "ui/icon.html" icon="arrow-right" class="icon-end" %}
</a>
<a class="btn btn-animate-icon btn-animate-icon-rotate">
{% include "ui/icon.html" icon="plus" %} Add
</a>
<a class="btn btn-animate-icon btn-animate-icon-shake">
{% include "ui/icon.html" icon="bell" %} Notifications
</a>
<a class="btn btn-animate-icon btn-animate-icon-rotate">
{% include "ui/icon.html" icon="settings" %} Settings
</a>
<a class="btn btn-animate-icon btn-animate-icon-pulse">
{% include "ui/icon.html" icon="heart" %} Love
</a>
<a class="btn btn-animate-icon btn-animate-icon-rotate">
{% include "ui/icon.html" icon="x" %} Close
</a>
<a class="btn btn-animate-icon btn-animate-icon-tada">
{% include "ui/icon.html" icon="check" %} Confirm
</a>
<a class="btn btn-animate-icon">
Next {% include "ui/icon.html" icon="chevron-right" class="icon-end" %}
</a>
<a class="btn btn-animate-icon btn-animate-icon-move-start">
{% include "ui/icon.html" icon="chevron-left" %} Previous
</a>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html %}
## Button sizes
Use size modifiers to change the size of your buttons. Available sizes: `.btn-xs`, `.btn-sm`, default, `.btn-lg`, `.btn-xl`.
{% capture html -%}
<button type="button" class="btn btn-sm">Small button</button>
<button type="button" class="btn">Default button</button>
<button type="button" class="btn btn-lg">Large button</button>
<button type="button" class="btn btn-xl">Extra large button</button>
{%- endcapture -%}
{%- include "docs/example.html" html=html separated centered vertical %}
## Link buttons
Use the `.btn-link` class to create buttons that look like links but maintain button functionality. These are useful for secondary actions that shouldn't compete with primary buttons for attention.
{% capture html -%}
<a href="#" class="btn btn-link">Link button</a>
<button type="button" class="btn btn-link">Link button</button>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered %}
## Action buttons
Use the `.btn-action` class to create subtle action buttons that are perfect for card headers, toolbars, or other interface elements where you want minimal visual impact.
{% capture html -%}
<div class="btn-actions">
<a href="#" class="btn btn-action" aria-label="Edit">
{%- include "ui/icon.html" icon="edit" -%}
</a>
<a href="#" class="btn btn-action" aria-label="Copy">
{%- include "ui/icon.html" icon="copy" -%}
</a>
<a href="#" class="btn btn-action" aria-label="Settings">
{%- include "ui/icon.html" icon="settings" -%}
</a>
<a href="#" class="btn btn-action" aria-label="Delete">
{%- include "ui/icon.html" icon="trash" -%}
</a>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered %}
## Action button groups
Use the `.btn-actions` container to group multiple action buttons together. This creates a cohesive set of related actions that work well in card headers, toolbars, or other interface elements.
{% capture html -%}
<div class="btn-actions">
<a href="#" class="btn btn-action">
{%- include "ui/icon.html" icon="refresh" -%}
</a>
<a href="#" class="btn btn-action">
{%- include "ui/icon.html" icon="chevron-up" -%}
</a>
<a href="#" class="btn btn-action">
{%- include "ui/icon.html" icon="dots-vertical" -%}
</a>
<a href="#" class="btn btn-action">
{%- include "ui/icon.html" icon="x" -%}
</a>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered %}
## Button groups
Use button groups to combine related buttons together. Button groups are perfect for creating toolbars, segmented controls, or any interface where multiple related actions should be visually grouped.
{% capture html -%}
<div class="btn-group" role="group">
<button type="button" class="btn">Left</button>
<button type="button" class="btn">Middle</button>
<button type="button" class="btn">Right</button>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered %}
{% capture html -%}
<div class="btn-group" role="group">
<input type="radio" class="btn-check" name="btn-radio" id="btn-radio-1" autocomplete="off" checked>
<label class="btn" for="btn-radio-1">Radio 1</label>
<input type="radio" class="btn-check" name="btn-radio" id="btn-radio-2" autocomplete="off">
<label class="btn" for="btn-radio-2">Radio 2</label>
<input type="radio" class="btn-check" name="btn-radio" id="btn-radio-3" autocomplete="off">
<label class="btn" for="btn-radio-3">Radio 3</label>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered %}
{% capture html -%}
<div class="btn-group-vertical" role="group">
<button type="button" class="btn">Top</button>
<button type="button" class="btn">Middle</button>
<button type="button" class="btn">Bottom</button>
</div>
{%- endcapture -%}
{%- include "docs/example.html" html=html centered %}

View File

@@ -16,7 +16,7 @@ Use the `.card` and `.card-body` classes to create a card and use it as the basi
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html bg="surface-secondary" %}
{% include "docs/example.html" html=html bg="surface-secondary" column %}
## Card padding
@@ -38,14 +38,7 @@ Cards with the `.card-sm` class are well suited for small items such as widgets,
<div class="card-body">This is some text within a card body.</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html bg="surface-secondary" %}
```html
<div class="card card-sm">...</div>
<div class="card">...</div>
<div class="card card-md">...</div>
<div class="card card-lg">...</div>
```
{% include "docs/example.html" html=html bg="surface-secondary" column %}
## Card with title
@@ -67,7 +60,7 @@ Add a title to your card by including the `.card-title` class within `.card-body
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html bg="surface-secondary" column vertical %}
{% include "docs/example.html" html=html bg="surface-secondary" column %}
## Card with title and image
@@ -89,7 +82,7 @@ To create a more visually appealing card, add a title and an image. Thanks to th
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html bg="surface-secondary" %}
{% include "docs/example.html" html=html bg="surface-secondary" column %}
## Blog post card
@@ -169,7 +162,7 @@ You can also add an image on the left side of the card. To do it, add the `.card
</a>
</div>
<div class="col">
<div class="card-body">
<div class="card-body h-full d-flex flex-column">
<h3 class="card-title">
<a href="#">Shut up!</a>
</h3>
@@ -198,7 +191,7 @@ You can also add an image on the left side of the card. To do it, add the `.card
## Color variations
Add a status color to your card, either at the top or on the side of the card, to customize it and make it more eye-catching.
Add a status color to your card, either at the top or on the side of the card, to customize it and make it more eye-catching. Use `card-status-*` and `bg-*` classes to change the placement and color of the status border.
{% capture html -%}
<div class="row row-deck">
@@ -230,29 +223,6 @@ Add a status color to your card, either at the top or on the side of the card, t
{%- endcapture %}
{% include "docs/example.html" html=html bg="surface-secondary" %}
```html
<div class="card">
<div class="card-status-top bg-danger"></div>
<div class="card-body">
<h3 class="card-title">Card with top status</h3>
<p class="text-secondary">
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>
<div class="card">
<div class="card-status-start bg-green"></div>
<div class="card-body">
<h3 class="card-title">Card with side status</h3>
<p class="text-secondary">
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>
```
## Stacked card
Use the `card-stacked` class to stack up multiple cards, if you want to save screen space or create a visually appealing effect.
@@ -332,66 +302,3 @@ Organize multiple cards into tabs to be able to display more content in a well-o
{%- endcapture %}
{% include "docs/example.html" html=html bg="surface-secondary" column %}
```html
<!-- Cards with tabs component -->
<div class="card-tabs">
<!-- Cards navigation -->
<ul class="nav nav-tabs">
<li class="nav-item">
<a href="#tab-top-1" class="nav-link active" data-bs-toggle="tab">Tab 1</a>
</li>
<li class="nav-item">
<a href="#tab-top-2" class="nav-link" data-bs-toggle="tab">Tab 2</a>
</li>
<li class="nav-item">
<a href="#tab-top-3" class="nav-link" data-bs-toggle="tab">Tab 3</a>
</li>
<li class="nav-item">
<a href="#tab-top-4" class="nav-link" data-bs-toggle="tab">Tab 4</a>
</li>
</ul>
<div class="tab-content">
<!-- Content of card #1 -->
<div id="tab-top-1" class="card tab-pane active show">
<div class="card-body">
<div class="card-title">Content of tab #1</div>
<p class="text-secondary">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci, alias aliquid
distinctio dolorem expedita, fugiat hic magni molestiae molestias odit.
</p>
</div>
</div>
<!-- Content of card #2 -->
<div id="tab-top-2" class="card tab-pane">
<div class="card-body">
<div class="card-title">Content of tab #2</div>
<p class="text-secondary">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci, alias aliquid
distinctio dolorem expedita, fugiat hic magni molestiae molestias odit.
</p>
</div>
</div>
<!-- Content of card #3 -->
<div id="tab-top-3" class="card tab-pane">
<div class="card-body">
<div class="card-title">Content of tab #3</div>
<p class="text-secondary">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci, alias aliquid
distinctio dolorem expedita, fugiat hic magni molestiae molestias odit.
</p>
</div>
</div>
<!-- Content of card #4 -->
<div id="tab-top-4" class="card tab-pane">
<div class="card-body">
<div class="card-title">Content of tab #4</div>
<p class="text-secondary">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci, alias aliquid
distinctio dolorem expedita, fugiat hic magni molestiae molestias odit.
</p>
</div>
</div>
</div>
</div>
```

View File

@@ -381,6 +381,7 @@ An example of adding thumbnails on the right side:
## Carousel with captions
Add captions to your slides easily with the `.carousel-caption` element within any `.carousel-item`. To make the text more readable on the image you can add `carousel-caption-background` which will add a black overlay over the image.
Below the `md` responsive breakpoint, the captions on the following example will be hidden as they have the `d-none` class applied to them.
{% capture html -%}
<div id="carousel-captions" class="carousel slide" data-bs-ride="carousel">

View File

@@ -16,105 +16,10 @@ Line charts are an essential tool for visualizing data trends over time. They ar
{% capture html -%}
<div class="card">
<div class="card-body">
<div id="chart-demo-line" class="chart-lg"></div>
{% include "ui/chart.html" chart-id="demo-line" legend height=15 %}
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
window.ApexCharts &&
new ApexCharts(document.getElementById("chart-demo-line"), {
chart: {
type: "line",
fontFamily: "inherit",
height: 240,
parentHeightOffset: 0,
toolbar: {
show: false,
},
animations: {
enabled: false,
},
},
fill: {
opacity: 1,
},
stroke: {
width: 2,
lineCap: "round",
curve: "straight",
},
series: [
{
name: "Session Duration",
data: [117, 92, 94, 98, 75, 110, 69, 80, 109, 113, 115, 95],
},
{
name: "Page Views",
data: [59, 80, 61, 66, 70, 84, 87, 64, 94, 56, 55, 67],
},
{
name: "Total Visits",
data: [53, 51, 52, 41, 46, 60, 45, 43, 30, 50, 58, 59],
},
],
tooltip: {
theme: "dark",
},
grid: {
padding: {
top: -20,
right: 0,
left: -4,
bottom: -4,
},
strokeDashArray: 4,
},
xaxis: {
labels: {
padding: 0,
},
tooltip: {
enabled: false,
},
type: "datetime",
},
yaxis: {
labels: {
padding: 4,
},
},
labels: [
"2020-06-21",
"2020-06-22",
"2020-06-23",
"2020-06-24",
"2020-06-25",
"2020-06-26",
"2020-06-27",
"2020-06-28",
"2020-06-29",
"2020-06-30",
"2020-07-01",
"2020-07-02",
],
colors: ["var(--tblr-yellow)", "var(--tblr-green)", "var(--tblr-primary)"],
legend: {
show: true,
position: "bottom",
offsetY: 12,
markers: {
width: 10,
height: 10,
radius: 100,
},
itemMargin: {
horizontal: 8,
vertical: 8,
},
},
}).render();
});
</script>
{{ script }}
{%- endcapture %}
{% include "docs/example.html" html=html %}
@@ -125,103 +30,10 @@ Area charts are ideal for representing cumulative data over time. They add visua
{% capture html -%}
<div class="card">
<div class="card-body">
<div id="chart-demo-area" class="chart-lg"></div>
{% include "ui/chart.html" chart-id="demo-area" height=15 %}
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
window.ApexCharts &&
new ApexCharts(document.getElementById("chart-demo-area"), {
chart: {
type: "area",
fontFamily: "inherit",
height: 240,
parentHeightOffset: 0,
toolbar: {
show: false,
},
animations: {
enabled: false,
},
},
dataLabels: {
enabled: false,
},
fill: {
opacity: 0.16,
type: "solid",
},
stroke: {
width: 2,
lineCap: "round",
curve: "smooth",
},
series: [
{
name: "series1",
data: [56, 40, 39, 47, 34, 48, 44],
},
{
name: "series2",
data: [45, 43, 30, 23, 38, 39, 54],
},
],
tooltip: {
theme: "dark",
},
grid: {
padding: {
top: -20,
right: 0,
left: -4,
bottom: -4,
},
strokeDashArray: 4,
},
xaxis: {
labels: {
padding: 0,
},
tooltip: {
enabled: false,
},
axisBorder: {
show: false,
},
type: "datetime",
},
yaxis: {
labels: {
padding: 4,
},
},
labels: [
"2020-06-21",
"2020-06-22",
"2020-06-23",
"2020-06-24",
"2020-06-25",
"2020-06-26",
"2020-06-27",
],
colors: ["var(--tblr-primary)", "var(--tblr-purple)"],
legend: {
show: true,
position: "bottom",
offsetY: 12,
markers: {
width: 10,
height: 10,
radius: 100,
},
itemMargin: {
horizontal: 8,
vertical: 8,
},
},
}).render();
});
</script>
{{ script }}
{%- endcapture %}
{% include "docs/example.html" html=html %}
@@ -232,116 +44,10 @@ Bar charts are highly effective for comparing data across different categories.
{% capture html -%}
<div class="card">
<div class="card-body">
<div id="chart-demo-bar" class="chart-lg"></div>
{% include "ui/chart.html" chart-id="demo-bar" height=15 %}
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
window.ApexCharts &&
new ApexCharts(document.getElementById("chart-demo-bar"), {
chart: {
type: "bar",
fontFamily: "inherit",
height: 240,
parentHeightOffset: 0,
toolbar: {
show: false,
},
animations: {
enabled: false,
},
stacked: true,
},
plotOptions: {
bar: {
barHeight: "50%",
horizontal: true,
},
},
dataLabels: {
enabled: false,
},
fill: {
opacity: 1,
},
series: [
{
name: "Container for a Fanta",
data: [44, 55, 41, 37, 22, 43, 21],
},
{
name: "Strange sunglasses",
data: [53, 32, 33, 52, 13, 43, 32],
},
{
name: "Pen Pineapple Apple Pen",
data: [12, 17, 11, 9, 15, 11, 20],
},
{
name: "Binoculars",
data: [9, 7, 5, 8, 6, 9, 4],
},
{
name: "Magical notebook",
data: [25, 12, 19, 32, 25, 24, 10],
},
],
tooltip: {
theme: "dark",
},
grid: {
padding: {
top: -20,
right: 0,
left: -4,
bottom: -4,
},
strokeDashArray: 4,
},
xaxis: {
labels: {
padding: 0,
formatter: function (val) {
return val + "K";
},
},
tooltip: {
enabled: false,
},
axisBorder: {
show: false,
},
categories: ["2008", "2009", "2010", "2011", "2012", "2013", "2014"],
},
yaxis: {
labels: {
padding: 4,
},
},
colors: [
"var(--tblr-purple)",
"var(--tblr-green)",
"var(--tblr-yellow)",
"var(--tblr-red)",
"var(--tblr-primary)",
],
legend: {
show: true,
position: "bottom",
offsetY: 12,
markers: {
width: 10,
height: 10,
radius: 100,
},
itemMargin: {
horizontal: 8,
vertical: 8,
},
},
}).render();
});
</script>
{{ script }}
{%- endcapture %}
{% include "docs/example.html" html=html %}
@@ -352,58 +58,10 @@ Pie charts are a simple and effective way to visualize proportions and ratios. T
{% capture html -%}
<div class="card">
<div class="card-body">
<div id="chart-demo-pie" class="chart-lg"></div>
{% include "ui/chart.html" chart-id="demo-pie" height=15 %}
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
window.ApexCharts &&
new ApexCharts(document.getElementById("chart-demo-pie"), {
chart: {
type: "donut",
fontFamily: "inherit",
height: 240,
sparkline: {
enabled: true,
},
animations: {
enabled: false,
},
},
fill: {
opacity: 1,
},
series: [44, 55, 12, 2],
labels: ["Direct", "Affilliate", "E-mail", "Other"],
tooltip: {
theme: "dark",
},
grid: {
strokeDashArray: 4,
},
colors: [
"var(--tblr-primary)",
"color-mix(in oklab, var(--tblr-primary) 0.8, transparent)",
"color-mix(in oklab, var(--tblr-primary) 0.6, transparent)",
"var(--tblr-gray-300)",
],
legend: {
show: true,
position: "bottom",
offsetY: 12,
markers: {
width: 10,
height: 10,
radius: 100,
},
itemMargin: {
horizontal: 8,
vertical: 8,
},
},
}).render();
});
</script>
{{ script }}
{%- endcapture %}
{% include "docs/example.html" html=html %}
@@ -414,119 +72,10 @@ Heatmaps provide a graphical representation of data where individual values are
{% capture html -%}
<div class="card">
<div class="card-body">
<div id="chart-demo-heatmap" class="chart-lg"></div>
{% include "ui/chart-heatmap.html" chart-id="demo-heatmap" height=15 %}
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
window.ApexCharts &&
new ApexCharts(document.getElementById("chart-demo-heatmap"), {
chart: {
type: "heatmap",
fontFamily: "inherit",
height: 240,
animations: {
enabled: false,
},
toolbar: {
show: false,
},
},
tooltip: {
theme: "dark",
},
fill: {
opacity: 1,
},
series: [
{
name: "New York",
data: [
{ x: "Monday", y: 22 },
{ x: "Tuesday", y: 24 },
{ x: "Wednesday", y: 19 },
{ x: "Thursday", y: 23 },
{ x: "Friday", y: 25 },
{ x: "Saturday", y: 27 },
{ x: "Sunday", y: 26 },
],
},
{
name: "Los Angeles",
data: [
{ x: "Monday", y: 28 },
{ x: "Tuesday", y: 30 },
{ x: "Wednesday", y: 27 },
{ x: "Thursday", y: 29 },
{ x: "Friday", y: 31 },
{ x: "Saturday", y: 32 },
{ x: "Sunday", y: 33 },
],
},
{
name: "Chicago",
data: [
{ x: "Monday", y: 18 },
{ x: "Tuesday", y: 20 },
{ x: "Wednesday", y: 17 },
{ x: "Thursday", y: 19 },
{ x: "Friday", y: 21 },
{ x: "Saturday", y: 22 },
{ x: "Sunday", y: 23 },
],
},
{
name: "Houston",
data: [
{ x: "Monday", y: 25 },
{ x: "Tuesday", y: 27 },
{ x: "Wednesday", y: 24 },
{ x: "Thursday", y: 26 },
{ x: "Friday", y: 28 },
{ x: "Saturday", y: 29 },
{ x: "Sunday", y: 30 },
],
},
{
name: "Phoenix",
data: [
{ x: "Monday", y: 33 },
{ x: "Tuesday", y: 35 },
{ x: "Wednesday", y: 32 },
{ x: "Thursday", y: 34 },
{ x: "Friday", y: 36 },
{ x: "Saturday", y: 37 },
{ x: "Sunday", y: 38 },
],
},
{
name: "Philadelphia",
data: [
{ x: "Monday", y: 20 },
{ x: "Tuesday", y: 22 },
{ x: "Wednesday", y: 19 },
{ x: "Thursday", y: 21 },
{ x: "Friday", y: 23 },
{ x: "Saturday", y: 24 },
{ x: "Sunday", y: 25 },
],
},
],
colors: ["var(--tblr-primary)"],
dataLabels: {
enabled: false,
},
xaxis: {
tooltip: {
enabled: false,
},
},
title: {
text: "Average Temperature by Day and City",
},
}).render();
});
</script>
{{ script }}
{%- endcapture %}
{% include "docs/example.html" html=html %}
@@ -537,167 +86,9 @@ For more complex data visualizations, you can create advanced charts with multip
{% capture html -%}
<div class="card">
<div class="card-body">
<div id="chart-social-referrals" class="chart-lg"></div>
{% include "ui/chart.html" chart-id="social-referrals" height=15 %}
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
window.ApexCharts &&
new ApexCharts(document.getElementById("chart-social-referrals"), {
chart: {
type: "line",
fontFamily: "inherit",
height: 240,
parentHeightOffset: 0,
toolbar: {
show: false,
},
animations: {
enabled: false,
},
},
fill: {
opacity: 1,
},
stroke: {
width: 2,
lineCap: "round",
curve: "smooth",
},
series: [
{
name: "Facebook",
data: [
13281, 8521, 15038, 9983, 15417, 8888, 7052, 14270, 5214, 9587, 5950, 16852, 17836,
12217, 17406, 12262, 9147, 14961, 18292, 15230, 13435, 10649, 5140, 13680, 4508,
13271, 13413, 5543, 18727, 18238, 18175, 6246, 5864, 17847, 9170, 6445, 12945, 8142,
8980, 10422, 15535, 11569, 10114, 17621, 16138, 13046, 6652, 9906, 14100, 16495, 6749,
],
},
{
name: "Twitter",
data: [
3680, 1862, 3070, 2252, 5348, 3091, 3000, 3984, 5176, 5325, 2420, 5474, 3098, 1893,
3748, 2879, 4197, 5186, 4213, 4334, 2807, 1594, 4863, 2030, 3752, 4856, 5341, 3954,
3461, 3097, 3404, 4949, 2283, 3227, 3630, 2360, 3477, 4675, 1901, 2252, 3347, 2954,
5029, 2079, 2830, 3292, 4578, 3401, 4104, 3749, 4457, 3734,
],
},
{
name: "Dribbble",
data: [
722, 1866, 961, 1108, 1110, 561, 1753, 1815, 1985, 776, 859, 547, 1488, 766, 702, 621,
1599, 1372, 1620, 963, 759, 764, 739, 789, 1696, 1454, 1842, 734, 551, 1689, 1924,
1875, 908, 1675, 1541, 1953, 534, 502, 1524, 1867, 719, 1472, 1608, 1025, 889, 1150,
654, 1695, 1662, 1285, 1787,
],
},
],
tooltip: {
theme: "dark",
},
grid: {
padding: {
top: -20,
right: 0,
left: -4,
bottom: -4,
},
strokeDashArray: 4,
xaxis: {
lines: {
show: true,
},
},
},
xaxis: {
labels: {
padding: 0,
},
tooltip: {
enabled: false,
},
type: "datetime",
},
yaxis: {
labels: {
padding: 4,
},
},
labels: [
"2020-06-21",
"2020-06-22",
"2020-06-23",
"2020-06-24",
"2020-06-25",
"2020-06-26",
"2020-06-27",
"2020-06-28",
"2020-06-29",
"2020-06-30",
"2020-07-01",
"2020-07-02",
"2020-07-03",
"2020-07-04",
"2020-07-05",
"2020-07-06",
"2020-07-07",
"2020-07-08",
"2020-07-09",
"2020-07-10",
"2020-07-11",
"2020-07-12",
"2020-07-13",
"2020-07-14",
"2020-07-15",
"2020-07-16",
"2020-07-17",
"2020-07-18",
"2020-07-19",
"2020-07-20",
"2020-07-21",
"2020-07-22",
"2020-07-23",
"2020-07-24",
"2020-07-25",
"2020-07-26",
"2020-07-27",
"2020-07-28",
"2020-07-29",
"2020-07-30",
"2020-07-31",
"2020-08-01",
"2020-08-02",
"2020-08-03",
"2020-08-04",
"2020-08-05",
"2020-08-06",
"2020-08-07",
"2020-08-08",
"2020-08-09",
"2020-08-10",
],
colors: [
"var(--tblr-facebook)",
"var(--tblr-twitter)",
"var(--tblr-dribbble)",
],
legend: {
show: true,
position: "bottom",
offsetY: 12,
markers: {
width: 10,
height: 10,
radius: 100,
},
itemMargin: {
horizontal: 8,
vertical: 8,
},
},
}).render();
});
</script>
{{ script }}
{%- endcapture %}
{% include "docs/example.html" html=html %}

View File

@@ -9,7 +9,7 @@ The countup component is used to display numbers dynamically. It is a great way
To be able to use the countup in your application you will need to install the countup.js dependency with `npm install countup.js`.
For more advanced features of countups, click [here](https://inorganik.github.io/countUp.js/) and see what more you can do.
For more advanced features of countups, see the demo on the [countUp.js website](https://inorganik.github.io/countUp.js/).
## Basic usage
@@ -24,152 +24,99 @@ The results can be seen in the example below.
{% capture html -%}
<h1 data-countup>30000</h1>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html centered %}
## Duration
Set the `duration` to determine how long the animation should take. By default, the duration is set to 2 seconds, but you can modify it as you wish.
```html
<h1 data-countup='{"duration":4}'>30000</h1>
```
Look at the example below to see how the duration affects the animation.
{% capture html -%}
<h1 data-countup>30000</h1>
<h1 data-countup='{"duration":4}'>30000</h1>
<h1 data-countup='{"duration":6}'>30000</h1>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html vertical separated %}
## Starting value
By default the countup will start from zero. If you want to set a different start value use `startVal`.
You can also set the start value to be greater than the final value, so that it counts down instead of up.
```html
<h1 data-countup='{"startVal":12345}'>30000</h1>
```
To see how the starting value affects the animation, look at the example below.
{% capture html -%}
<h1 data-countup='{"startVal":12345}'>30000</h1>
<h1 data-countup='{"startVal":47655}'>30000</h1>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html vertical separated %}
## Decimal places
Set how many decimal numbers should be displayed using `decimalPlaces`. By default, the number of decimal places is set to 0.
```html
<h1 data-countup='{"decimalPlaces":1}'>3.123</h1>
```
Look at the example below to see how the number of decimal places affects the animation.
{% capture html -%}
<h1 data-countup>3.123</h1>
<h1 data-countup='{"decimalPlaces":1}'>3.123</h1>
<h1 data-countup='{"decimalPlaces":2}'>3.123</h1>
<h1 data-countup='{"decimalPlaces":3}'>3.123</h1>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html vertical separated %}
## Easing
Disable easing using `"useEasing": false`. Easing is set to `true` by default, so that the animation speed changes over the course of its duration. Easing can be disabled to make the animation linear.
```html
<h1 data-countup='{"useEasing": false}'>30000</h1>
```
Look at the example below to see how easing affects the animation.
{% capture html -%}
<h1 data-countup>30000</h1>
<h1 data-countup='{"useEasing": false}'>30000</h1>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html vertical separated %}
## Use grouping
Disable grouping using `"useGrouping": false`. Grouping is set to `true` by default, so that the number is displayed with a separator.
```html
<h1 data-countup='{"useGrouping": false}'>30000</h1>
```
Example below shows how grouping affects the animation.
{% capture html -%}
<h1 data-countup>30000</h1>
<h1 data-countup='{"useGrouping": false}'>30000</h1>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html vertical separated %}
## Separator
You can change the default separator using `separator` and specifying the one you wish to use.
```html
<h1 data-countup='{"separator":" "}'>3000000</h1>
```
This example shows how the separator affects the animation.
{% capture html -%}
<h1 data-countup>3000000</h1>
<h1 data-countup='{"separator":" "}'>3000000</h1>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html vertical separated %}
## Decimal separator
You can change the default decimal separator using `decimal` and specifying the one you wish to use.
```html
<h1 data-countup='{"decimal":","}'>3.12</h1>
```
Look at the example below to see how the decimal separator affects the animation.
{% capture html -%}
<h1 data-countup='{"decimalPlaces":2}'>3.12</h1>
<h1 data-countup='{"decimalPlaces":2,"decimal":","}'>3.12</h1>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html vertical separated %}
## Prefix
Set the countup prefix using `prefix` and specifying the prefix you want to add, for instance a currency symbol.
```html
<h1 data-countup='{"prefix":"$"}'>30000</h1>
```
Look at the example below to see how the prefix affects the animation.
{% capture html -%}
<h1 data-countup='{"prefix":"$"}'>30000</h1>
<h1 data-countup='{"prefix":"€"}'>30000</h1>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html vertical separated %}
## Suffix
Set the countup suffix using `suffix` and specifying the suffix you want to add, for instance a percentage symbol.
```html
<h1 data-countup='{"suffix":"%"}'>300</h1>
```
Look at the example below to see how the suffix affects the animation.
{% capture html -%}
<h1 data-countup='{"suffix":"%"}'>300</h1>
<h1 data-countup='{"suffix":"‰"}'>300</h1>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html vertical separated %}

View File

@@ -8,7 +8,7 @@ description: Separate content with clear dividers.
Use dividers to visually separate content into parts. You can use a line only or add text that will be centered by default.
```html example
{% capture html -%}
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Alias, dolore dolores doloribus est ex.
</p>
@@ -17,7 +17,8 @@ Use dividers to visually separate content into parts. You can use a line only or
Dicta error hic illo iure necessitatibus nihil officiis omnis perferendis, praesentium repellendus
rerum, saepe sed, sit!
</p>
```
{%- endcapture %}
{% include "docs/example.html" html=html %}
## Text position
@@ -46,7 +47,7 @@ You can modify the position of the text which is to be included in a separator a
## Divider color
Customize the color of dividers to make them go well with your design. Click [here](/docs/ui/base/colors) to see the list of available colors.
Customize the color of dividers to make them go well with your design. See the [full list of available colors](/ui/base/colors) for more details.
{% capture html -%}
<p>

View File

@@ -19,7 +19,7 @@ With small markup changes, you can turn any `.btn` into a dropdown toggle and us
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="220px" %}
## Dropdown divider
@@ -36,7 +36,7 @@ Use dropdown dividers to separate groups of dropdown items for greater clarity.
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="240px" %}
## Active state
@@ -52,7 +52,7 @@ Make a dropdown item look active, so that it highlights when a user hovers over
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="220px" %}
## Disabled state
@@ -68,7 +68,7 @@ Make a dropdown item look disabled to display options which are currently not av
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="220px" %}
## Dropdown header
@@ -84,7 +84,7 @@ Add a dropdown header to group dropdown items into sections and name them accord
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="210px" %}
## Dropdown with icons
@@ -138,7 +138,7 @@ Use icons in your dropdowns to add more visual content and make the options easy
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="210px" %}
## Dropdown with arrow
@@ -153,7 +153,7 @@ Add an arrow that points at the dropdown button.
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="190px" %}
## Dropdown with badge
@@ -174,7 +174,7 @@ Add a badge to your dropdown items to show additional information related to an
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="190px" %}
## Dropdown with checkboxes
@@ -196,7 +196,7 @@ Use dropdowns with checkboxes to allow users to select options from a predefined
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="220px" %}
## Dark dropdown
@@ -251,7 +251,7 @@ Make your dropdown suit the dark mode of your website or software.
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="220px" %}
## Dropdown with card content
@@ -274,8 +274,7 @@ Use a dropdown with card content to make it easy for users to get more informati
<a href="#">How do you know she is a witch?</a>
</h3>
<div class="text-secondary">
Are you suggesting that coconuts migrate? No, no, no! Yes, yes. A bit. But she's got a
wart. You ...
Are you suggesting that coconuts migrate? No, no, no! Yes, yes. A bit.
</div>
<div class="d-flex align-items-center pt-4 mt-auto">
<span class="avatar" style="background-image: url(/static/avatars/013m.jpg)"></span>
@@ -310,4 +309,4 @@ Use a dropdown with card content to make it easy for users to get more informati
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="520px" %}

View File

@@ -2,6 +2,7 @@
title: Dropzone
summary: Dropzone is a simple JavaScript library that helps you add file drag and drop functionality to your web forms. It is one of the most popular drag and drop libraries on the web and is used by millions of people.
description: Drag-and-drop file upload tool.
docs-libs: dropzone
---
## Basic usage

View File

@@ -57,16 +57,18 @@ Use the default empty state to engage users in the critical moments of their exp
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html bg="surface-secondary" %}
## Empty state with illustration
Make your empty state screen more attractive and engaging by adding an illustration. Thanks to a more personalized design, you will improve your brand image and make your website or app more user friendly.
Do you need an illustration to enhance your web designs? We've got something for you! Check out our premium SVG [illustrations]({{ site.homepage }}/illustrations).
{% capture html -%}
<div class="empty">
<div class="empty-img">
<img src="..." height="128" alt="" />
{% include "ui/illustration.html" image="boy-with-key" alt="Empty state illustration" %}
</div>
<p class="empty-title">Invoices are managed from here</p>
<p class="empty-subtitle text-secondary">
@@ -95,7 +97,7 @@ Make your empty state screen more attractive and engaging by adding an illustrat
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html bg="surface-secondary" %}
## Empty state with header
@@ -132,20 +134,5 @@ Instead of adding an icon or illustration you can simply give the text:
</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html bg="surface-secondary" %}
```html
<div class="empty">
<div class="empty-header">404</div>
<p class="empty-title">Oops… You just found an error page</p>
<p class="empty-subtitle text-secondary">
Try adjusting your search or filter to find what you're looking for.
</p>
<div class="empty-action">
<a href="#" class="btn btn-primary">
{% include "ui/icon.html" icon="arrow-left" %}
Take me home
</a>
</div>
</div>
```

View File

@@ -5,7 +5,7 @@ banner: icons
description: Enhance dashboards with custom icons.
---
If you need to add icons to your website, you can use the Tabler Icons library. It contains over 5000 icons that you can use in your projects. All icons are under the MIT license, so you can use them without any problem both in private and commercial projects. You can find the Tabler Icons library [here](https://tabler-icons.io/).
If you need to add icons to your website, you can use the [Tabler Icons library]({{ site.icons.link }}). It contains over 5000 icons that you can use in your projects. All icons are under the MIT license, so you can use them without any problem both in private and commercial projects.
## Base icon
@@ -27,29 +27,23 @@ Results can be seen in the example below.
## Filled icons
To use filled icons, you need to copy the SVG code from the Tabler Icons website and paste it into your HTML file.
```html
{% include "ui/icon.html" icon="heart-filled" %}
```
Look at the example below to see the filled icons.
To use filled icons, you need to copy the SVG code of the selected filled Icon from the [Tabler Icons website]({{ site.icons.link }}) and paste it into your HTML file.
{% capture html -%}
{% include "ui/icon.html" icon="heart-filled" %}
{% include "ui/icon.html" icon="bell-ringing-filled" %}
{% include "ui/icon.html" icon="cherry-filled" %}
{% include "ui/icon.html" icon="circle-key-filled" %}
{% include "ui/icon.html" icon="heart" type="filled" %}
{% include "ui/icon.html" icon="bell-ringing" type="filled" %}
{% include "ui/icon.html" icon="cherry" type="filled" %}
{% include "ui/icon.html" icon="circle-key" type="filled" %}
{%- endcapture %}
{% include "docs/example.html" html=html %}
## Icon colors
To change the color of the icon, you need to add the `text-` class to the parent element of the icon. Full list of available colors can be found [here](/docs/ui/colors). Color classes can be used with any HTML element.
To change the color of the icon, you need to add the `text-*` class to the parent element of the icon. See the [full list of available colors](/ui/base/colors) for more details. Color classes can be used with any HTML element.
```html
<span class="text-red">
{% include "ui/icon.html" icon="heart" %}
<!-- Icon code here -->
</span>
```
@@ -57,10 +51,10 @@ Look at the example below to see how the color of the icon changes.
{% capture html -%}
<span class="text-red">
{% include "ui/icon.html" icon="heart-filled" %}
{% include "ui/icon.html" icon="heart" type="filled" %}
</span>
<span class="text-yellow">
{% include "ui/icon.html" icon="star-filled" %}
{% include "ui/icon.html" icon="star" type="filled" %}
</span>
<span class="text-blue">
{% include "ui/icon.html" icon="circle" %}
@@ -75,14 +69,6 @@ Look at the example below to see how the color of the icon changes.
To add an animation to the icon, you need to add the `icon-pulse`, `icon-tada`, or `icon-rotate` class to the SVG element.
```html
{% include "ui/icon.html" icon="heart" %}
{% include "ui/icon.html" icon="bell" %}
{% include "ui/icon.html" icon="rotate-clockwise" %}
```
Look at the example below to see the animated icons.
{% capture html -%}
<svg
xmlns="http://www.w3.org/2000/svg"

View File

@@ -18,21 +18,10 @@ To use the Inline Player, you need to include the Plyr library in your project.
<script src="{{ cdnUrl }}/dist/libs/plyr/dist/plyr.min.js"></script>
```
## Sample demo
## YouTube video
Integrating the Inline Player into your website is straightforward. Below is a sample implementation for a YouTube video:
```html
<div id="player-youtube" data-plyr-provider="youtube" data-plyr-embed-id="dQw4w9WgXcQ"></div>
<script>
document.addEventListener("DOMContentLoaded", function () {
window.Plyr && new Plyr("#player-youtube");
});
</script>
```
Look at the example below to see how the Inline Player works with a YouTube video.
{% capture html -%}
<div id="player-youtube" data-plyr-provider="youtube" data-plyr-embed-id="dQw4w9WgXcQ"></div>
<script src="{{ cdnUrl }}/dist/libs/plyr/dist/plyr.min.js"></script>
@@ -46,10 +35,10 @@ Look at the example below to see how the Inline Player works with a YouTube vide
## Vimeo file
Heres how to embed a Vimeo video using the Inline Player:
For the Vimeo video you just need to change the `data-plyr-provider`.
{% capture html -%}
<div id="player-vimeo" data-plyr-provider="vimeo" data-plyr-embed-id="515937365"></div>
<div id="player-vimeo" data-plyr-provider="vimeo" data-plyr-embed-id="707012696"></div>
<script src="{{ cdnUrl }}/dist/libs/plyr/dist/plyr.min.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
@@ -58,3 +47,17 @@ Heres how to embed a Vimeo video using the Inline Player:
</script>
{%- endcapture %}
{% include "docs/example.html" html=html %}
## HTML5 video and audio
Check out the [Plyr documentation](https://github.com/sampotts/plyr) for more options and examples, including HTML5 video and audio support.
## Customization
The Inline Player uses the primary color as the default color scheme. You can customize the player by modifying the CSS variables in your stylesheet. For example, to change the main color, you can add the following CSS:
```scss
--plyr-color-main: #ff0000; /* Change to your desired color */
```
For more customization options, refer to the [Customizing the CSS](https://github.com/sampotts/plyr?tab=readme-ov-file#customizing-the-css) section in the Plyr documentation.

View File

@@ -8,17 +8,6 @@ Offcanvas is a sidebar component that can be toggled via JavaScript to appear fr
To create an offcanvas, add the `.offcanvas` class to a container element. You can also add the `.offcanvas-start`, `.offcanvas-end`, `.offcanvas-top`, or `.offcanvas-bottom` class to specify the position of the offcanvas. The `.show` class is used to display the offcanvas.
```html
<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvas">
<div class="offcanvas-body">
Content for the offcanvas goes here. You can place just about any Tabler component or custom
elements here.
</div>
</div>
```
Look at the example below to see how the offcanvas works.
{% capture html -%}
<div
class="offcanvas offcanvas-start show"

View File

@@ -0,0 +1,59 @@
---
title: Pagination
summary: Pagination is a user interface element that allows users to navigate through a set of data or content that is divided into multiple pages. It is commonly used in web applications, blogs, and e-commerce sites to display large amounts of information in a manageable way.
---
## Basic Example
Use slightly customized pagination with previous and next icon links:
{% capture html -%}
{% include "ui/pagination.html" %}
{%- endcapture %}
{% include "docs/example.html" html=html centered vertical %}
## With First and Last links
When you have a lot of pages, you can use first and last links to quickly navigate to the beginning or end of the pagination.
{% capture html -%}
{% include "ui/pagination.html" first-last %}
{%- endcapture %}
{% include "docs/example.html" html=html centered vertical %}
## Offset
If the count of pages is too large, you can use offset to show only a few pages at a time.
{% capture html -%}
{% include "ui/pagination.html" offset=3 count=20 %}
{%- endcapture %}
{% include "docs/example.html" html=html centered vertical %}
## Button With Text
When you want to use pagination with text, you can use text buttons. This will give you a more traditional look and feel, which is great for applications where you want to keep the focus on the content rather than the navigation.
{% capture html -%}
{% include "ui/pagination.html" text %}
{%- endcapture %}
{% include "docs/example.html" html=html centered vertical %}
## Outline version
If you want to use an outline version of the pagination, you can use the `.pagination-outline` class. This will give you a more subtle look and feel, which is great for applications where you want to keep the focus on the content rather than the navigation.
{% capture html -%}
{% include "ui/pagination.html" class="pagination-outline" %}
{%- endcapture %}
{% include "docs/example.html" html=html centered vertical %}
## Circle version
If you want to use a circle version of the pagination, you can use the `.pagination-circle` class. This will give you a more subtle look and feel, which is great for applications where you want to keep the focus on the content rather than the navigation. This can also be combined with the `.pagination-outline` class for a more prominent look.
{% capture html -%}
{% include "ui/pagination.html" class="pagination-circle" %}
{% include "ui/pagination.html" class="pagination-circle pagination-outline" -%}
{%- endcapture %}
{% include "docs/example.html" html=html centered vertical separated %}

View File

@@ -57,12 +57,6 @@ A placeholder can also contain an element that looks like a header:
You can use a placeholder that will look like an avatar. You can use the `avatar` component, and get the image in the right proportions.
```html
<div class="avatar placeholder"></div>
```
Look at the example below to see how the avatar placeholder looks.
{% capture html -%}
<div class="row">
<div class="col-auto">
@@ -111,12 +105,6 @@ You can use a placeholder that will look like a picture. You can use the `ratio`
By default, the placeholder uses `currentColor`. This can be overridden with a custom color or utility class. Full color classes are available for background colors.
```html
<span class="placeholder col-12 bg-dark"></span>
```
Look at the example below to see how the color affects the placeholder.
{% capture html -%}
<span class="placeholder col-12"></span>
<span class="placeholder col-12 bg-primary"></span>

View File

@@ -16,22 +16,6 @@ To create a default progress bar, add a `.progress` class to a `<div>` element.
{%- endcapture %}
{% include "docs/example.html" html=html %}
```html
<div class="progress">
<div
class="progress-bar"
style="width: 38%"
role="progressbar"
aria-valuenow="38"
aria-valuemin="0"
aria-valuemax="100"
aria-label="38% Complete"
>
<span class="visually-hidden">38% Complete</span>
</div>
</div>
```
## Progress size
Using Bootstraps typical naming structure, you can create a standard progress bar or scale it up or down to different sizes based on whats needed.
@@ -72,13 +56,7 @@ You can create a progress bar which shows indeterminate progress by adding `.pro
## Native progress element
You can also use native HTML5 `<progress>` element. It is a great way to create a progress bar without the need for additional HTML elements.
```html
<progress class="progress progress-sm" value="15" max="100" />
```
This is how it looks:
You can also use the native HTML5 `<progress>` element. It is a great way to create a progress bar without the need for additional HTML elements. This is what it looks like:
{% capture html -%}
<progress class="progress progress-sm" value="15" max="100" />
@@ -89,7 +67,7 @@ This is how it looks:
You can change the color of the progress bar by adding a color class to the `.progress-bar` element. You can use the color classes like `.bg-primary`, `.bg-success`, etc. to change the color of the progress bar.
Full list of available colors can be found [here](/docs/ui/base/colors).
See the [full list of available colors](/ui/base/colors) for more details.
{% capture html -%}
<div class="progress">
@@ -178,14 +156,6 @@ This is how it looks:
You can create a striped progress bar by adding the `.progress-bar-striped` class to the `.progress-bar` element.
```html
<div class="progress">
<div class="progress-bar progress-bar-striped progress-bar-animated" style="width: 60%"></div>
</div>
```
This is how it looks:
{% capture html -%}
<div class="progress">
<div class="progress-bar progress-bar-striped progress-bar-animated" style="width: 60%"></div>
@@ -197,16 +167,6 @@ This is how it looks:
By using a progress bar component as a background element, designers can create a dynamic and engaging visual experience for users. For example, the progress bar could be used to represent the completion of a long-term goal or project, such as a fundraising campaign or construction project. As users interact with the page, the progress bar could gradually fill up, creating a sense of momentum and progress.
```html
<div class="progressbg">
<div class="progress progressbg-progress">
<div class="progress-bar bg-primary-lt" style="width: 65%"></div>
</div>
<div class="progressbg-text">Poland</div>
<div class="progressbg-value">65%</div>
</div>
```
Thanks to this you can create a nice looking statistics section:
{% capture html -%}

View File

@@ -5,9 +5,7 @@ description: Adjust values with range sliders.
summary: Range sliders allow users to select a range of values by adjusting two handles along a track, providing an intuitive and space-efficient input method.
---
To be able to use the range slider in your application you will need to install the nouislider dependency with `npm install nouislider`.
All options and features can be found [**here**](https://refreshless.com/nouislider/).
To be able to use the range slider in your application you will need to install the noUiSlider dependency with `npm install nouislider`.
## Basic range slider
@@ -30,4 +28,4 @@ All options and features can be found [**here**](https://refreshless.com/nouisli
{%- endcapture %}
{% include "docs/example.html" html=html %}
That's only the basic features and options of range slider. More possibilities can be found [**here**](https://refreshless.com/nouislider/).
For more details on customizing a noUiSlider element, see the documentation on the [noUiSlider website](https://refreshless.com/nouislider/).

View File

@@ -18,15 +18,6 @@ Use the `ribbon` class to add the default ribbon to any section of your interfac
{%- endcapture %}
{% include "docs/example.html" html=html card column %}
```html
<div class="card">
<div class="card-body"></div>
<div class="ribbon">
{% include "ui/icon.html" icon="star" %}
</div>
</div>
```
## Ribbon position
You can change the position of a ribbon by adding one of the following classes to the element:
@@ -48,18 +39,9 @@ Using multiple classes at once will give you more position options. For example,
{%- endcapture %}
{% include "docs/example.html" html=html column %}
```html
<div class="card">
<div class="card-body"></div>
<div class="ribbon ribbon-top ribbon-start">
{% include "ui/icon.html" icon="star" %}
</div>
</div>
```
## Ribbon color
Customize the ribbon's background color. You can click [here](/docs/ui/base/colors) to see the list of available colors.
Customize the ribbon's background color. See the [full list of available colors](/ui/base/colors) for more details.
{% capture html -%}
<div class="card">
@@ -71,15 +53,6 @@ Customize the ribbon's background color. You can click [here](/docs/ui/base/colo
{%- endcapture %}
{% include "docs/example.html" html=html column %}
```html
<div class="card">
<div class="card-body"></div>
<div class="ribbon bg-red">
{% include "ui/icon.html" icon="star" %}
</div>
</div>
```
## Ribbon text
Add your own text to a ribbon to display any additional information and make it easy to spot for users.
@@ -87,25 +60,14 @@ Add your own text to a ribbon to display any additional information and make it
{% capture html -%}
<div class="card">
<div class="card-body" style="height: 5rem"></div>
<div class="ribbon bg-green">
{% include "ui/icon.html" icon="star" %}
</div>
<div class="ribbon bg-green">NEW</div>
</div>
{%- endcapture %}
{% include "docs/example.html" html=html column %}
```html
<div class="card">
<div class="card-body"></div>
<div class="ribbon bg-green">
{% include "ui/icon.html" icon="star" %}
</div>
</div>
```
## Bookmark ribbon
## Ribbon style
Change the style of a ribbon to make it go well with your interface design.
Use the `.ribbon-bookmark` class to create a bookmark ribbon. It is a special style of ribbon that is used to highlight important elements in your interface.
{% capture html -%}
<div class="card w-100">
@@ -116,12 +78,3 @@ Change the style of a ribbon to make it go well with your interface design.
</div>
{%- endcapture %}
{% include "docs/example.html" html=html column %}
```html
<div class="card">
<div class="card-body"></div>
<div class="ribbon ribbon-bookmark bg-orange">
{% include "ui/icon.html" icon="star" %}
</div>
</div>
```

View File

@@ -5,17 +5,6 @@ summary: A segmented control is a set of two or more segments, each of which fun
To create a segmented control, use the `nav` element with the `nav-segmented` class. Inside the `nav` element, add `button` or `a` elements with the `nav-link` class. The `nav-link` class is used to style the buttons as links.
```html
<nav class="nav nav-segmented" role="tablist">
<button class="nav-link" role="tab" data-bs-toggle="tab" aria-selected="true" aria-current="page">
First
</button>
...
</nav>
```
See the example below to see how the segmented control looks.
{% capture html -%}
<nav class="nav nav-segmented" role="tablist">
<button

View File

@@ -9,12 +9,6 @@ description: Indicate loading state with spinners.
Use the default spinner to notify users that an action they have taken is in progress, helping them avoid confusion.
```html
<div class="spinner-border"></div>
```
Look at the example below to see how the spinner works:
{% capture html -%}
<div class="spinner-border"></div>
{%- endcapture %}
@@ -23,7 +17,7 @@ Look at the example below to see how the spinner works:
## Colors
Choose one of the available colors to customize the spinner and make it suit your design. Full list of available colors can be found in the [Colors](/docs/ui/base/colors) section.
Choose one of the available colors to customize the spinner and make it suit your design. Full list of available colors can be found in the [Colors](/ui/base/colors) section.
{% capture html -%}
<div class="spinner-border text-blue" role="status"></div>
@@ -41,11 +35,6 @@ Choose one of the available colors to customize the spinner and make it suit you
{%- endcapture %}
{% include "docs/example.html" html=html centered %}
```html
<div class="spinner-border text-blue" role="status"></div>
<div class="spinner-border text-red" role="status"></div>
```
## Size
Choose the size of your spinner. You can use the default size or use the `spinner-border-sm` class to display a smaller spinner.
@@ -83,24 +72,10 @@ Growing spinners also come in a variety of colors to choose from.
{%- endcapture %}
{% include "docs/example.html" html=html centered %}
```html
<div class="spinner-grow text-blue" role="status"></div>
<div class="spinner-grow text-azure" role="status"></div>
```
## Button with spinner
Use buttons with spinners to notify users that an action they have taken by clicking the button is in progress and prevent them from clicking multiple times or giving up.
```html
<a href="#" class="btn btn-primary">
<span class="spinner-border spinner-border-sm me-2" role="status"></span>
Button
</a>
```
Look at the example below to see how the button with a spinner works:
{% capture html -%}
<a href="#" class="btn btn-primary">
<span class="spinner-border spinner-border-sm me-2" role="status"></span>

View File

@@ -6,15 +6,7 @@ description: Highlight interface elements with status dots.
## Default markup
Use the default status to notify users about the status of a component or page, helping them avoid confusion. Full list of available colors can be found in the [Colors](/docs/ui/base/colors) section.
```html
<span class="status status-blue">Blue</span>
<span class="status status-azure">Azure</span>
...
```
Look at the example below to see how the status works:
Use the default status to notify users about the status of a component or page, helping them avoid confusion. Full list of available colors can be found in the [Colors](/ui/base/colors) section.
{% capture html -%}
<span class="status status-blue">Blue</span>
@@ -37,15 +29,6 @@ Look at the example below to see how the status works:
You can add a dot to the status to make it more noticeable. To do this, use the `.status-dot` element inside the `.status` element.
```html
<span class="status status-blue">
<span class="status-dot"></span>
Blue
</span>
```
Look at the example below to see how the status with a dot works:
{% capture html -%}
<span class="status status-blue">
<span class="status-dot"></span>
@@ -214,12 +197,6 @@ Use the lite status to make the status less noticeable. To do this, add a `.stat
If you need only dot status, you can use the `.status-dot` class.
```html
<span class="status-dot status-blue"></span>
```
Look at the example below to see how the status dots work:
{% capture html -%}
<span class="status-dot status-blue"></span>
<span class="status-dot status-azure"></span>

View File

@@ -95,7 +95,7 @@ The example below demonstrates a progress tracker with tooltips for each step.
## Color
You can customize the default progress indicator by changing the color to one that better suits your design. Click [here](/docs/ui/base/colors) to see the range of available colors.
You can customize the default progress indicator by changing the color to one that better suits your design. See the [full list of available colors](/ui/base/colors) for more details.
```html
<div class="steps steps-green">...</div>

View File

@@ -15,7 +15,7 @@ The icon transition is triggered by adding an `.active` class to the `switch-ico
{% include "ui/icon.html" icon="heart" %}
</span>
<span class="switch-icon-b text-red">
{% include "ui/icon.html" icon="heart-filled" %}
{% include "ui/icon.html" icon="heart" type="filled" %}
</span>
</button>
{%- endcapture %}
@@ -31,7 +31,7 @@ You can also add a fancy animation to add variety to your button. See demo below
{% include "ui/icon.html" icon="circle" %}
</span>
<span class="switch-icon-b text-primary">
{% include "ui/icon.html" icon="circle-filled" %}
{% include "ui/icon.html" icon="circle" type="filled" %}
</span>
</button>
<button class="switch-icon switch-icon-fade" data-bs-toggle="switch-icon">
@@ -39,7 +39,7 @@ You can also add a fancy animation to add variety to your button. See demo below
{% include "ui/icon.html" icon="heart" %}
</span>
<span class="switch-icon-b text-red">
{% include "ui/icon.html" icon="heart-filled" %}
{% include "ui/icon.html" icon="heart" type="filled" %}
</span>
</button>
<button class="switch-icon switch-icon-scale" data-bs-toggle="switch-icon">
@@ -47,7 +47,7 @@ You can also add a fancy animation to add variety to your button. See demo below
{% include "ui/icon.html" icon="star" %}
</span>
<span class="switch-icon-b text-yellow">
{% include "ui/icon.html" icon="star-filled" %}
{% include "ui/icon.html" icon="star" type="filled" %}
</span>
</button>
<button class="switch-icon switch-icon-flip" data-bs-toggle="switch-icon">
@@ -55,7 +55,7 @@ You can also add a fancy animation to add variety to your button. See demo below
{% include "ui/icon.html" icon="thumb-up" %}
</span>
<span class="switch-icon-b text-facebook">
{% include "ui/icon.html" icon="thumb-up-filled" %}
{% include "ui/icon.html" icon="thumb-up" type="filled" %}
</span>
</button>
<button class="switch-icon switch-icon-slide-up" data-bs-toggle="switch-icon">
@@ -175,7 +175,7 @@ You can also add a fancy animation to add variety to your button. See demo below
</svg>
</span>
</button>
<button class="switch-icon switch-icon-slide-right" data-bs-toggle="switch-icon">
<button class="switch-icon switch-icon-slide-end" data-bs-toggle="switch-icon">
<span class="switch-icon-a text-secondary">
<svg
xmlns="http://www.w3.org/2000/svg"

View File

@@ -178,105 +178,6 @@ If you don't want the table cell content to wrap to another line, use the `table
{%- endcapture %}
{% include "docs/example.html" html=html %}
```html
<div class="table-responsive">
<table class="table table-vcenter table-nowrap">
<thead>
<tr>
<th>Name</th>
<th>Title</th>
<th>Email</th>
<th>Role</th>
<th></th>
<th class="w-1"></th>
</tr>
</thead>
<tbody>
<tr>
<td>Paweł Kuna</td>
<td class="text-secondary">UI Designer, Training</td>
<td class="text-secondary">
<a href="#" class="text-reset">paweluna@howstuffworks.com</a>
</td>
<td class="text-secondary">User</td>
<td>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Animi, commodi cupiditate
debitis deserunt expedita hic incidunt iste modi molestiae nesciunt non nostrum
perferendis perspiciatis placeat praesentium quaerat quo repellendus, voluptates.
</td>
<td>
<a href="#">Edit</a>
</td>
</tr>
<tr>
<td>Jeffie Lewzey</td>
<td class="text-secondary">Chemical Engineer, Support</td>
<td class="text-secondary">
<a href="#" class="text-reset">jlewzey1@seesaa.net</a>
</td>
<td class="text-secondary">Admin</td>
<td>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Animi, commodi cupiditate
debitis deserunt expedita hic incidunt iste modi molestiae nesciunt non nostrum
perferendis perspiciatis placeat praesentium quaerat quo repellendus, voluptates.
</td>
<td>
<a href="#">Edit</a>
</td>
</tr>
<tr>
<td>Mallory Hulme</td>
<td class="text-secondary">Geologist IV, Support</td>
<td class="text-secondary">
<a href="#" class="text-reset">mhulme2@domainmarket.com</a>
</td>
<td class="text-secondary">User</td>
<td>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Animi, commodi cupiditate
debitis deserunt expedita hic incidunt iste modi molestiae nesciunt non nostrum
perferendis perspiciatis placeat praesentium quaerat quo repellendus, voluptates.
</td>
<td>
<a href="#">Edit</a>
</td>
</tr>
<tr>
<td>Dunn Slane</td>
<td class="text-secondary">Research Nurse, Sales</td>
<td class="text-secondary">
<a href="#" class="text-reset">dslane3@epa.gov</a>
</td>
<td class="text-secondary">Owner</td>
<td>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Animi, commodi cupiditate
debitis deserunt expedita hic incidunt iste modi molestiae nesciunt non nostrum
perferendis perspiciatis placeat praesentium quaerat quo repellendus, voluptates.
</td>
<td>
<a href="#">Edit</a>
</td>
</tr>
<tr>
<td>Emmy Levet</td>
<td class="text-secondary">VP Product Management, Accounting</td>
<td class="text-secondary">
<a href="#" class="text-reset">elevet4@senate.gov</a>
</td>
<td class="text-secondary">Admin</td>
<td>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Animi, commodi cupiditate
debitis deserunt expedita hic incidunt iste modi molestiae nesciunt non nostrum
perferendis perspiciatis placeat praesentium quaerat quo repellendus, voluptates.
</td>
<td>
<a href="#">Edit</a>
</td>
</tr>
</tbody>
</table>
</div>
```
## Table Variants
{% capture html -%}
@@ -396,7 +297,52 @@ If you don't want the table cell content to wrap to another line, use the `table
<td>Cell</td>
<td>Cell</td>
</tr>
<tr>
<th scope="row">Default</th>
<td>Cell</td>
<td>Cell</td>
</tr>
<tr>
<th scope="row">Primary</th>
<td>Cell</td>
<td>Cell</td>
</tr>
<tr>
<th scope="row">Secondary</th>
<td>Cell</td>
<td>Cell</td>
</tr>
<tr>
<th scope="row">Success</th>
<td>Cell</td>
<td>Cell</td>
</tr>
<tr>
<th scope="row">Danger</th>
<td>Cell</td>
<td>Cell</td>
</tr>
<tr>
<th scope="row">Warning</th>
<td>Cell</td>
<td>Cell</td>
</tr>
<tr>
<th scope="row">Info</th>
<td>Cell</td>
<td>Cell</td>
</tr>
<tr>
<th scope="row">Light</th>
<td>Cell</td>
<td>Cell</td>
</tr>
<tr class="table-dark">
<th scope="row">Dark</th>
<td>Cell</td>
<td>Cell</td>
</tr>
</tbody>
</table>
{%- endcapture %}
{% include "docs/example.html" html=html %}
{% include "docs/example.html" html=html height="42rem" %}

View File

@@ -167,7 +167,7 @@ Use tabs without label names to save space and make the tab content easy to reco
</li>
<li class="nav-item ms-auto">
<a href="#tabs-settings-ex3" class="nav-link" title="Settings" data-bs-toggle="tab">
{% include "ui/icon.html" icon="setings" %}
{% include "ui/icon.html" icon="settings" %}
</a>
</li>
</ul>

Some files were not shown because too many files have changed in this diff Show More