From 01866fc36f472280e9426cff629e5d23af5b84a1 Mon Sep 17 00:00:00 2001
From: Filippo Maria Grilli
Date: Fri, 29 Nov 2024 15:50:36 +0100
Subject: [PATCH 01/12] sidebar - fixed colapsable without href causing error
---
src/js/bundle.js | 3 ++-
src/js/components/sidebar.js | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/js/bundle.js b/src/js/bundle.js
index ea0769d..eed604d 100644
--- a/src/js/bundle.js
+++ b/src/js/bundle.js
@@ -1680,7 +1680,8 @@ class KromaSidebar {
for(var i = 0; i < this.pages.length; i++){
var li = document.createElement('li');
- li.querySelector('a').removeAttribute('href'); //remove href from collapsable parent
+ //remove href from collapsable parent
+ if (li.querySelector('a') && element.hasAttribute('href')) {li.querySelector('a').removeAttribute('href');}
li.classList.add('no-selection');
//parent page
diff --git a/src/js/components/sidebar.js b/src/js/components/sidebar.js
index 8d67378..48d50c1 100644
--- a/src/js/components/sidebar.js
+++ b/src/js/components/sidebar.js
@@ -138,7 +138,8 @@ class KromaSidebar {
for(var i = 0; i < this.pages.length; i++){
var li = document.createElement('li');
- li.querySelector('a').removeAttribute('href'); //remove href from collapsable parent
+ //remove href from collapsable parent
+ if (li.querySelector('a') && element.hasAttribute('href')) {li.querySelector('a').removeAttribute('href');}
li.classList.add('no-selection');
//parent page
From f42cd446a927b4e429c6a26cf0fed7ce4cff92cc Mon Sep 17 00:00:00 2001
From: Filippo Maria Grilli
Date: Fri, 29 Nov 2024 15:53:35 +0100
Subject: [PATCH 02/12] navbar - fixed avatar overflowing size
---
src/css/bundle.css | 4 ++++
src/css/components/navbar.css | 5 +++++
2 files changed, 9 insertions(+)
diff --git a/src/css/bundle.css b/src/css/bundle.css
index afe10ab..3a210d9 100644
--- a/src/css/bundle.css
+++ b/src/css/bundle.css
@@ -3775,6 +3775,10 @@ background: var(--variant-hover-bg);
color: var(--variant-hover);
}
+.kroma-navbar .kroma-avatar {
+ max-width: calc(var(--nav-size-base) / 1.5);
+ max-height: calc(var(--nav-size-base) / 1.5);
+}
/* --- pagination.css --- */
diff --git a/src/css/components/navbar.css b/src/css/components/navbar.css
index 743405f..c2e7a23 100644
--- a/src/css/components/navbar.css
+++ b/src/css/components/navbar.css
@@ -188,3 +188,8 @@ background: var(--variant-hover-bg);
color: var(--variant-hover);
}
+.kroma-navbar .kroma-avatar {
+ max-width: calc(var(--nav-size-base) / 1.5);
+ max-height: calc(var(--nav-size-base) / 1.5);
+}
+
From b7dbb0de8ad52b25a0cffe5572cc4d2288411e1b Mon Sep 17 00:00:00 2001
From: Filippo Maria Grilli
Date: Fri, 29 Nov 2024 16:21:40 +0100
Subject: [PATCH 03/12] Revert "navbar - fixed avatar overflowing size"
This reverts commit f42cd446a927b4e429c6a26cf0fed7ce4cff92cc.
---
src/css/bundle.css | 4 ----
src/css/components/navbar.css | 5 -----
2 files changed, 9 deletions(-)
diff --git a/src/css/bundle.css b/src/css/bundle.css
index 3a210d9..afe10ab 100644
--- a/src/css/bundle.css
+++ b/src/css/bundle.css
@@ -3775,10 +3775,6 @@ background: var(--variant-hover-bg);
color: var(--variant-hover);
}
-.kroma-navbar .kroma-avatar {
- max-width: calc(var(--nav-size-base) / 1.5);
- max-height: calc(var(--nav-size-base) / 1.5);
-}
/* --- pagination.css --- */
diff --git a/src/css/components/navbar.css b/src/css/components/navbar.css
index c2e7a23..743405f 100644
--- a/src/css/components/navbar.css
+++ b/src/css/components/navbar.css
@@ -188,8 +188,3 @@ background: var(--variant-hover-bg);
color: var(--variant-hover);
}
-.kroma-navbar .kroma-avatar {
- max-width: calc(var(--nav-size-base) / 1.5);
- max-height: calc(var(--nav-size-base) / 1.5);
-}
-
From b8cfc5f491616f2b8263919ce8374076d0e266af Mon Sep 17 00:00:00 2001
From: Filippo Maria Grilli
Date: Fri, 29 Nov 2024 16:21:50 +0100
Subject: [PATCH 04/12] Revert "sidebar - fixed colapsable without href causing
error"
This reverts commit 01866fc36f472280e9426cff629e5d23af5b84a1.
---
src/js/bundle.js | 3 +--
src/js/components/sidebar.js | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/js/bundle.js b/src/js/bundle.js
index eed604d..ea0769d 100644
--- a/src/js/bundle.js
+++ b/src/js/bundle.js
@@ -1680,8 +1680,7 @@ class KromaSidebar {
for(var i = 0; i < this.pages.length; i++){
var li = document.createElement('li');
- //remove href from collapsable parent
- if (li.querySelector('a') && element.hasAttribute('href')) {li.querySelector('a').removeAttribute('href');}
+ li.querySelector('a').removeAttribute('href'); //remove href from collapsable parent
li.classList.add('no-selection');
//parent page
diff --git a/src/js/components/sidebar.js b/src/js/components/sidebar.js
index 48d50c1..8d67378 100644
--- a/src/js/components/sidebar.js
+++ b/src/js/components/sidebar.js
@@ -138,8 +138,7 @@ class KromaSidebar {
for(var i = 0; i < this.pages.length; i++){
var li = document.createElement('li');
- //remove href from collapsable parent
- if (li.querySelector('a') && element.hasAttribute('href')) {li.querySelector('a').removeAttribute('href');}
+ li.querySelector('a').removeAttribute('href'); //remove href from collapsable parent
li.classList.add('no-selection');
//parent page
From 480e509a0b6ea92e48a29a986e184a8d4004a459 Mon Sep 17 00:00:00 2001
From: Filippo Maria Grilli
Date: Fri, 29 Nov 2024 16:21:54 +0100
Subject: [PATCH 05/12] Revert "Fix bundles"
This reverts commit f84b52a0f0b5285e9654003eb469e67a8d36d137.
---
src/css/bundle.css | 214 +++++++++++++++++++++++++++++++++++++++------
src/js/bundle.js | 31 ++++---
2 files changed, 200 insertions(+), 45 deletions(-)
diff --git a/src/css/bundle.css b/src/css/bundle.css
index afe10ab..5cf4c20 100644
--- a/src/css/bundle.css
+++ b/src/css/bundle.css
@@ -3,7 +3,7 @@ Project: kromacss
Version: 1.0.2
Description: A modern, lightweight, and dependency-free CSS framework designed for simplicity, speed, and adaptability.
Author: Altxria Inc.
-License: CC BY-ND 4.0
+License: MIT
*/
/* --- design-tokens.css --- */
@@ -372,24 +372,22 @@ svg {
.inline-block { display: inline-block; }
.inline { display: inline; }
-
/*REMOVE HIGHLIGHT BACKGROUND*/
.no-selection::selection {
- background: transparent;
- color: inherit;
+ background: transparent;
+ color: inherit;
}
.no-selection::-moz-selection {
- background: transparent;
- color: inherit;
+ background: transparent;
+ color: inherit;
}
.no-selection {
- user-select: none;
+ user-select: none;
}
-
/* --- flexbox.css --- */
.flex { display: flex; gap: var(--space-4); }
.flex-wrap { flex-wrap: wrap; }
@@ -2751,6 +2749,136 @@ blockquote {
}
+/* --- footer.css --- */
+/* Base Footer Styles */
+.kroma-footer {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ align-items: center;
+ padding: var(--space-6) var(--space-8);
+ background-color: var(--variant-bg, var(--neutral-900));
+ color: var(--variant-text, var(--neutral-50));
+ font-family: var(--font-sans);
+ gap: var(--space-4);
+ border-top: 1px solid var(--variant-border, var(--neutral-700));
+ transition: background-color var(--transition-colors), box-shadow var(--transition-all);
+ z-index: var(--z-10);
+ width: 100%;
+}
+
+/* Footer Position: Sticky Bottom */
+.kroma-footer[data-stick="bottom"] {
+ position: sticky;
+ bottom: 0;
+}
+
+/* Footer Position: Fixed Bottom */
+.kroma-footer[data-stick="fixed"] {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ box-shadow: var(--shadow-lg);
+}
+
+/* Footer Layouts */
+.kroma-footer[data-layout="center"] {
+ flex-direction: column;
+ text-align: center;
+ gap: var(--space-4);
+}
+
+.kroma-footer[data-layout="stacked"] {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: var(--space-6);
+}
+
+/* Footer Links */
+.kroma-footer-links {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ gap: var(--space-4);
+}
+
+.kroma-footer-link {
+ color: inherit;
+ text-decoration: none;
+ font-size: clamp(0.875rem, 1vw, 1rem);
+ font-weight: 500;
+ transition: color var(--transition-colors);
+}
+
+.kroma-footer-link:hover,
+.kroma-footer-link:focus {
+ color: var(--variant-hover-bg, var(--neutral-300));
+ text-decoration: underline;
+}
+
+/* Footer Brand Section */
+.kroma-footer-brand {
+ display: flex;
+ align-items: center;
+ gap: var(--space-3);
+ font-size: clamp(1.25rem, 2.5vw, 1.75rem);
+ font-weight: bold;
+}
+
+.kroma-footer-logo {
+ max-height: 50px;
+ object-fit: contain;
+}
+
+/* Footer Copyright Section */
+.kroma-footer-copyright {
+ font-size: clamp(0.75rem, 1vw, 0.875rem);
+ color: var(--neutral-400);
+ margin-top: var(--space-4);
+ text-align: center;
+ width: 100%;
+}
+
+/* Footer Social Links */
+.kroma-footer-social {
+ display: flex;
+ justify-content: center;
+ gap: var(--space-3);
+}
+
+.kroma-footer-social a {
+ font-size: 1.5rem;
+ color: inherit;
+ transition: color var(--transition-colors);
+}
+
+.kroma-footer-social a:hover,
+.kroma-footer-social a:focus {
+ color: var(--variant-hover-bg, var(--neutral-300));
+}
+
+/* Responsive Adjustments */
+@media (max-width: 768px) {
+ .kroma-footer {
+ flex-direction: column;
+ text-align: center;
+ gap: var(--space-6);
+ padding: var(--space-4);
+ }
+
+ .kroma-footer-links,
+ .kroma-footer-social {
+ justify-content: center;
+ gap: var(--space-3);
+ }
+
+ .kroma-footer-copyright {
+ margin-top: var(--space-6);
+ }
+}
+
+
/* --- form.css --- */
/* Base Form Group Styling */
.kroma-form-group {
@@ -3777,6 +3905,34 @@ color: var(--variant-hover);
+
+.kroma-navbar:not(.toggled-menu) .nav-menu {
+ width: 100%;
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+}
+
+.kroma-navbar:not(.toggled-menu) .nav-menu ul {
+ display: flex;
+ flex-direction: row;
+ list-style: none;
+ gap: calc(var(--nav-size-base) / 6);
+}
+
+.kroma-navbar:not(.toggled-menu) .nav-menu ul li a {
+ text-decoration: none;
+}
+
+.kroma-navbar:not(.toggled-menu) .nav-menu ul li a:hover {
+ text-decoration: underline;
+}
+
+.kroma-navbar .kroma-avatar {
+ max-height: calc(var(--nav-size-base) / 1.5);
+ max-width: calc(var(--nav-size-base) / 1.5);
+}
+
/* --- pagination.css --- */
/* Pagination Container */
.kroma-pagination {
@@ -4374,7 +4530,7 @@ html:has(.kroma-navbar) .kroma-sidebar{
}
.kroma-sidebar.collapsed .sdb-logo:not(:has(img)):after {
- display: none;
+ display: none;
}
.kroma-sidebar .sdb-logo span {
@@ -4483,59 +4639,59 @@ html:has(.kroma-navbar) .kroma-sidebar{
.kroma-sidebar li{
- cursor:pointer;
-
- }
+ cursor:pointer;
+
+}
.kroma-sidebar:not(.collapsed) li[data-idparent] {
- padding-left: 10px;
- max-height: 100px;
- transition: 100ms;
+ padding-left: 10px;
+ max-height: 100px;
+ transition: 100ms;
}
.kroma-sidebar:not(.collapsed) li.parent a span:before {
- content: "\f054";
- margin-right: 10px;
- font-family: 'FontAwesome';
- display: inline-block;
+ content: "\f054";
+ margin-right: 10px;
+ font-family: 'FontAwesome';
+ display: inline-block;
}
.kroma-sidebar li[data-idparent].collapsed {
- max-height: 0;
- overflow: hidden;
+ max-height: 0;
+ overflow: hidden;
}
.kroma-sidebar li.parent:not(.collapsed) a span:before {
- transform: rotate(90deg);
- transform-origin: center;
+ transform: rotate(90deg);
+ transform-origin: center;
}
/*variants*/
.kroma-sidebar[data-variant]:before {
- background: var(--variant-bg);
- border-color: var(--variant-border);
+ background: var(--variant-bg);
+ border-color: var(--variant-border);
}
.kroma-sidebar[data-variant] .sdb-logo:after{
- background: var(--variant-border);
+ background: var(--variant-border);
}
.kroma-sidebar[data-variant] .sdb-logo span,
.kroma-sidebar[data-variant] .sdb-menu ul li i,
.kroma-sidebar[data-variant] .sdb-menu ul li span,
.kroma-sidebar[data-variant] .sdb-arrow{
- color: var(--variant-text);
+ color: var(--variant-text);
}
.kroma-sidebar[data-variant] .sdb-menu ul li a:hover:before{
- background: var(--variant-hover-bg);
+ background: var(--variant-hover-bg);
}
.kroma-sidebar[data-variant] .sdb-menu ul li a:hover > i,
.kroma-sidebar[data-variant] .sdb-menu ul li a:hover > span {
- color: var(--variant-hover);
+ color: var(--variant-hover);
}
/* --- skeleton.css --- */
diff --git a/src/js/bundle.js b/src/js/bundle.js
index ea0769d..74d055e 100644
--- a/src/js/bundle.js
+++ b/src/js/bundle.js
@@ -3,7 +3,7 @@ Project: kromacss
Version: 1.0.2
Description: A modern, lightweight, and dependency-free CSS framework designed for simplicity, speed, and adaptability.
Author: Altxria Inc.
-License: CC BY-ND 4.0
+License: MIT
*/
/* --- accordion.js --- */
@@ -181,7 +181,7 @@ function handleAlertClose(alert) {
/* --- calendar.js --- */
-function initializeCalendarComponents() {
+export function initializeCalendarComponents() {
document.querySelectorAll('.kroma-calendar').forEach(initCalendar);
}
@@ -370,7 +370,7 @@ document.addEventListener('DOMContentLoaded', () => {
initializeCodeblock(document);
});
-function initializeCodeblock() {
+export function initializeCodeblock() {
document.querySelectorAll('.kroma-code-block').forEach((block) => {
// Check if buttons are already rendered to avoid duplication
if (block.querySelector('.kroma-code-block-header')) return;
@@ -434,7 +434,7 @@ document.addEventListener('DOMContentLoaded', () => {
initializeCommandPalettes();
});
-function initializeCommandPalettes() {
+export function initializeCommandPalettes() {
// Select all command palettes on the page
const palettes = document.querySelectorAll('.kroma-command-palette');
@@ -615,7 +615,7 @@ function initializeCommandPalette(palette) {
/* --- datetime-picker.js --- */
-class DateTimePicker {
+export class DateTimePicker {
constructor(elementId, { format = 'YYYY-MM-DD HH:mm', includeTime = true, variant = 'primary' } = {}) {
this.container = document.getElementById(elementId);
this.format = format;
@@ -945,7 +945,7 @@ document.addEventListener('DOMContentLoaded', () => {
/* --- file-upload.js --- */
-function initializeKromaFileUploadComponents() {
+export function initializeKromaFileUploadComponents() {
document.querySelectorAll('.kroma-file-upload').forEach((fileUpload) => {
const dropzone = fileUpload.querySelector('.kroma-file-upload-dropzone');
const input = fileUpload.querySelector('.kroma-file-upload-input');
@@ -1017,7 +1017,7 @@ document.addEventListener('DOMContentLoaded', initializeKromaFileUploadComponent
/* --- hologram.js --- */
-function showHologram(titleText, subtitleText, variant = 'primary', intensity = 'medium', duration = 6000) {
+export function showHologram(titleText, subtitleText, variant = 'primary', intensity = 'medium', duration = 6000) {
// Remove any existing holograms and dim overlay
document.querySelectorAll('.kroma-hologram-overlay, .kroma-body-dim').forEach(el => el.remove());
@@ -1238,7 +1238,7 @@ document.addEventListener('DOMContentLoaded', () => {
/* --- navbar.js --- */
-class KromaNavbar {
+export class KromaNavbar {
/*
id (string) = navbar element id
@@ -1490,7 +1490,7 @@ document.addEventListener("DOMContentLoaded", () => {
});
/* --- rating.js --- */
-function initializeKromaRatingComponents() {
+export function initializeKromaRatingComponents() {
// Automatically initialize all rating components on the page
document.querySelectorAll('.kroma-rating').forEach(initializeRatingComponent);
}
@@ -1540,7 +1540,7 @@ document.addEventListener("DOMContentLoaded", initializeKromaRatingComponents);
/* --- sidebar.js --- */
-class KromaSidebar {
+export class KromaSidebar {
/*
id (string) = navbar element id
@@ -1680,7 +1680,6 @@ class KromaSidebar {
for(var i = 0; i < this.pages.length; i++){
var li = document.createElement('li');
- li.querySelector('a').removeAttribute('href'); //remove href from collapsable parent
li.classList.add('no-selection');
//parent page
@@ -1729,6 +1728,7 @@ class KromaSidebar {
if(liChildren.length < 1){li.classList.remove('parent');}
else{
li.classList.add('collapsed');
+ li.querySelector('a').removeAttribute('href'); //remove href from collapsable parent
li.addEventListener('click',function(){
var sdbId = this.closest('.kroma-sidebar').id;
@@ -1753,7 +1753,6 @@ class KromaSidebar {
li.classList.add('collapsed');
});
-
}
@@ -1782,7 +1781,7 @@ document.addEventListener("DOMContentLoaded", () => {
/* --- slideshow.js --- */
-class KromaSlideshow {
+export class KromaSlideshow {
/*
id (string) = slideshow element id
@@ -2084,7 +2083,7 @@ document.addEventListener("DOMContentLoaded", () => {
/* --- tabs.js --- */
-function toggleTabContent(event, contentId, containerId) {
+export function toggleTabContent(event, contentId, containerId) {
const container = document.getElementById(containerId);
const tabs = container.querySelectorAll('.kroma-tab');
const contents = container.querySelectorAll('.kroma-tab-content');
@@ -2104,7 +2103,7 @@ function toggleTabContent(event, contentId, containerId) {
/* --- toast.js --- */
-function initializeKromaToastComponents() {
+export function initializeKromaToastComponents() {
// Automatically initialize and track toast components
document.querySelectorAll('.kroma-toast').forEach((toast) => {
if (toast.dataset.autoDismiss === "true") {
@@ -2114,7 +2113,7 @@ function initializeKromaToastComponents() {
});
}
-function showKromaToast(message, {
+export function showKromaToast(message, {
variant = 'primary',
position = 'top-right',
autoDismiss = false,
From 0de61726ea31c222a25b4aafa7b44fe0ad80507b Mon Sep 17 00:00:00 2001
From: Filippo Maria Grilli
Date: Fri, 29 Nov 2024 16:21:59 +0100
Subject: [PATCH 06/12] Revert "Fix JS exports"
This reverts commit 279429a393490a8bce5fe8ec14b054d1169e9db9.
---
src/js/components/calendar.js | 2 +-
src/js/components/codeblock.js | 2 +-
src/js/components/command-palette.js | 2 +-
src/js/components/datetime-picker.js | 2 +-
src/js/components/file-upload.js | 2 +-
src/js/components/hologram.js | 2 +-
src/js/components/navbar.js | 2 +-
src/js/components/rating.js | 2 +-
src/js/components/sidebar.js | 2 +-
src/js/components/slideshow.js | 2 +-
src/js/components/tabs.js | 2 +-
src/js/components/toast.js | 4 ++--
12 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/js/components/calendar.js b/src/js/components/calendar.js
index a4bad91..ac5be36 100644
--- a/src/js/components/calendar.js
+++ b/src/js/components/calendar.js
@@ -1,4 +1,4 @@
-function initializeCalendarComponents() {
+export function initializeCalendarComponents() {
document.querySelectorAll('.kroma-calendar').forEach(initCalendar);
}
diff --git a/src/js/components/codeblock.js b/src/js/components/codeblock.js
index 1cc6381..4b05b0e 100644
--- a/src/js/components/codeblock.js
+++ b/src/js/components/codeblock.js
@@ -2,7 +2,7 @@ document.addEventListener('DOMContentLoaded', () => {
initializeCodeblock(document);
});
-function initializeCodeblock() {
+export function initializeCodeblock() {
document.querySelectorAll('.kroma-code-block').forEach((block) => {
// Check if buttons are already rendered to avoid duplication
if (block.querySelector('.kroma-code-block-header')) return;
diff --git a/src/js/components/command-palette.js b/src/js/components/command-palette.js
index 9c382b1..d60cf0f 100644
--- a/src/js/components/command-palette.js
+++ b/src/js/components/command-palette.js
@@ -2,7 +2,7 @@ document.addEventListener('DOMContentLoaded', () => {
initializeCommandPalettes();
});
-function initializeCommandPalettes() {
+export function initializeCommandPalettes() {
// Select all command palettes on the page
const palettes = document.querySelectorAll('.kroma-command-palette');
diff --git a/src/js/components/datetime-picker.js b/src/js/components/datetime-picker.js
index a875da9..e8f4fb0 100644
--- a/src/js/components/datetime-picker.js
+++ b/src/js/components/datetime-picker.js
@@ -1,4 +1,4 @@
-class DateTimePicker {
+export class DateTimePicker {
constructor(elementId, { format = 'YYYY-MM-DD HH:mm', includeTime = true, variant = 'primary' } = {}) {
this.container = document.getElementById(elementId);
this.format = format;
diff --git a/src/js/components/file-upload.js b/src/js/components/file-upload.js
index 19890d0..16ec634 100644
--- a/src/js/components/file-upload.js
+++ b/src/js/components/file-upload.js
@@ -1,4 +1,4 @@
-function initializeKromaFileUploadComponents() {
+export function initializeKromaFileUploadComponents() {
document.querySelectorAll('.kroma-file-upload').forEach((fileUpload) => {
const dropzone = fileUpload.querySelector('.kroma-file-upload-dropzone');
const input = fileUpload.querySelector('.kroma-file-upload-input');
diff --git a/src/js/components/hologram.js b/src/js/components/hologram.js
index 5c47737..e2d35ec 100644
--- a/src/js/components/hologram.js
+++ b/src/js/components/hologram.js
@@ -1,4 +1,4 @@
-function showHologram(titleText, subtitleText, variant = 'primary', intensity = 'medium', duration = 6000) {
+export function showHologram(titleText, subtitleText, variant = 'primary', intensity = 'medium', duration = 6000) {
// Remove any existing holograms and dim overlay
document.querySelectorAll('.kroma-hologram-overlay, .kroma-body-dim').forEach(el => el.remove());
diff --git a/src/js/components/navbar.js b/src/js/components/navbar.js
index c19389c..1e53d9e 100644
--- a/src/js/components/navbar.js
+++ b/src/js/components/navbar.js
@@ -1,4 +1,4 @@
-class KromaNavbar {
+export class KromaNavbar {
/*
id (string) = navbar element id
diff --git a/src/js/components/rating.js b/src/js/components/rating.js
index 53c0b50..50f19cc 100644
--- a/src/js/components/rating.js
+++ b/src/js/components/rating.js
@@ -1,4 +1,4 @@
-function initializeKromaRatingComponents() {
+export function initializeKromaRatingComponents() {
// Automatically initialize all rating components on the page
document.querySelectorAll('.kroma-rating').forEach(initializeRatingComponent);
}
diff --git a/src/js/components/sidebar.js b/src/js/components/sidebar.js
index 8d67378..1d925dc 100644
--- a/src/js/components/sidebar.js
+++ b/src/js/components/sidebar.js
@@ -1,4 +1,4 @@
-class KromaSidebar {
+export class KromaSidebar {
/*
id (string) = navbar element id
diff --git a/src/js/components/slideshow.js b/src/js/components/slideshow.js
index c961768..2d5687d 100644
--- a/src/js/components/slideshow.js
+++ b/src/js/components/slideshow.js
@@ -1,4 +1,4 @@
-class KromaSlideshow {
+export class KromaSlideshow {
/*
id (string) = slideshow element id
diff --git a/src/js/components/tabs.js b/src/js/components/tabs.js
index 4b4cf4b..eafc678 100644
--- a/src/js/components/tabs.js
+++ b/src/js/components/tabs.js
@@ -1,4 +1,4 @@
-function toggleTabContent(event, contentId, containerId) {
+export function toggleTabContent(event, contentId, containerId) {
const container = document.getElementById(containerId);
const tabs = container.querySelectorAll('.kroma-tab');
const contents = container.querySelectorAll('.kroma-tab-content');
diff --git a/src/js/components/toast.js b/src/js/components/toast.js
index 7ec94be..d297f4f 100644
--- a/src/js/components/toast.js
+++ b/src/js/components/toast.js
@@ -1,4 +1,4 @@
-function initializeKromaToastComponents() {
+export function initializeKromaToastComponents() {
// Automatically initialize and track toast components
document.querySelectorAll('.kroma-toast').forEach((toast) => {
if (toast.dataset.autoDismiss === "true") {
@@ -8,7 +8,7 @@ function initializeKromaToastComponents() {
});
}
-function showKromaToast(message, {
+export function showKromaToast(message, {
variant = 'primary',
position = 'top-right',
autoDismiss = false,
From 5532c206e924aa788d635a3bd5c65a17d387c6b7 Mon Sep 17 00:00:00 2001
From: Filippo Maria Grilli
Date: Fri, 29 Nov 2024 16:22:02 +0100
Subject: [PATCH 07/12] Revert "navbar - added variants styling"
This reverts commit 1e4c785ac17025072df42d4b6bec4eb6cf0c24f8.
---
src/css/bundle.css | 40 +-------
src/css/components/navbar.css | 172 ++++++++++++++++------------------
2 files changed, 84 insertions(+), 128 deletions(-)
diff --git a/src/css/bundle.css b/src/css/bundle.css
index 5cf4c20..7a45e8f 100644
--- a/src/css/bundle.css
+++ b/src/css/bundle.css
@@ -3865,46 +3865,10 @@ nav.kroma-navbar:not(.toggled-menu) .nav-toggle {
padding-bottom: calc(var(--nav-size-base) / 3);
}
-.kroma-navbar.toggled-menu .nav-menu ul li:hover
-,.kroma-navbar.toggled-menu .nav-menu ul li.nav-current{
-background: var(--neutral-200);
+.kroma-navbar.toggled-menu .nav-menu ul li a.nav-current,.nav-menu ul li:hover a {
+ background: var(--neutral-100);
}
-.kroma-navbar.toggled-menu .nav-menu ul li:hover a
-,.kroma-navbar.toggled-menu .nav-menu ul li.nav-current a{
-color: var(--neutral-800);
-}
-
-.nav-menu ul li:hover a {
- background: transparent;
-}
-
-nav.kroma-navbar[data-variant]:before {
- background: var(--variant-bg);
- border-bottom-color: var(--variant-border);
-}
-
-nav.kroma-navbar[data-variant] .nav-logo span, nav.kroma-navbar[data-variant] .nav-menu ul li a {
- color: var(--variant-text);
-}
-
-
-.kroma-navbar[data-variant] span.nav-line {
- background: var(--variant-text);
-}
-
-.kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover
-,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current{
-background: var(--variant-hover-bg);
-}
-
-.kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover a
-,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current a{
-color: var(--variant-hover);
-}
-
-
-
.kroma-navbar:not(.toggled-menu) .nav-menu {
width: 100%;
diff --git a/src/css/components/navbar.css b/src/css/components/navbar.css
index 743405f..bc17b51 100644
--- a/src/css/components/navbar.css
+++ b/src/css/components/navbar.css
@@ -9,37 +9,36 @@
}
.kroma-navbar .nav-logo {
- height: calc(var(--nav-size-base) / 1.5 );
- width: max-content;
- display: flex;
- flex-direction: row;
- flex-wrap: nowrap;
- align-items: center;
- gap: calc(var(--nav-size-base) / 6);
- flex: auto;
+ height: calc(var(--nav-size-base) / 1.5 );
+ width: max-content;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ align-items: center;
+ gap: calc(var(--nav-size-base) / 6);
+ flex: auto;
}
nav.kroma-navbar {
- width: 100%;
- height: var(--nav-size-base);
- position: sticky;
- top: 0;
- left: 0;
- z-index: 3;
- display: flex;
- flex-direction: row;
- align-content: center;
- align-items: center;
- flex-wrap: nowrap;
- backdrop-filter: blur(4px);
- -webkit-backdrop-filter: blur(4px);
- justify-content: space-between;
- box-sizing: border-box;
- padding: calc(var(--nav-size-base) / 6);
- gap: calc(var(--nav-size-base) / 6);
+ width: 100%;
+ height: var(--nav-size-base);
+ position: sticky;
+ top: 0;
+ left: 0;
+ z-index: 3;
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ flex-wrap: nowrap;
+ backdrop-filter: blur(4px);
+ -webkit-backdrop-filter: blur(4px);
+ justify-content: space-between;
+ box-sizing: border-box;
+ padding: calc(var(--nav-size-base) / 6);
+ gap: calc(var(--nav-size-base) / 6);
}
-
nav.kroma-navbar:before {
content: "";
display: block;
@@ -83,108 +82,101 @@ nav.kroma-navbar:before {
}
nav.kroma-navbar:not(.toggled-menu) .nav-toggle {
- display: none;
+ display: none;
}
.kroma-navbar .nav-toggle.show #nav-line-3 {
- opacity: 0;
- /* top: 20px; */
- height: 0;
+ opacity: 0;
+ /* top: 20px; */
+ height: 0;
}
.kroma-navbar .nav-toggle.show #nav-line-1 {
- transform: translate(0px, 50%) rotate(45deg);
- transform-origin: center;
+ transform: translate(0px, 50%) rotate(45deg);
+ transform-origin: center;
}
.kroma-navbar .nav-toggle.show #nav-line-2 {
- /* background: var(--neutral-700); */
- transform: translate(0px, -50%) rotate(-45deg);
- transform-origin: center;
+ /* background: var(--neutral-700); */
+ transform: translate(0px, -50%) rotate(-45deg);
+ transform-origin: center;
}
.kroma-navbar.toggled-menu .nav-menu {
- display: flex;
- position: absolute;
- top: 100%;
- right: 0;
- margin: calc(var(--nav-size-base) / 3);
- background: var(--neutral-50);
- border-radius: 10px;
- box-shadow: var(--shadow-sm);
- align-items: center;
- justify-content: center;
- /* min-width: 170px; */
- max-height: 0;
- opacity: 0;
- overflow: hidden;
- transition: opacity 100ms, max-height 2s 0ms;
+ display: flex;
+ position: absolute;
+ top: 100%;
+ right: 0;
+ margin: calc(var(--nav-size-base) / 3);
+ background: var(--neutral-50);
+ border-radius: 10px;
+ box-shadow: var(--shadow-sm);
+ align-items: center;
+ justify-content: center;
+ /* min-width: 170px; */
+ max-height: 0;
+ opacity: 0;
+ overflow: hidden;
+ transition: opacity 100ms, max-height 2s 0ms;
}
.kroma-navbar.toggled-menu .nav-menu ul li a {
- text-decoration: none;
- list-style: none;
- padding: calc(var(--nav-size-base) / 6) calc(var(--nav-size-base) / 1.5);
- display: block;
+ text-decoration: none;
+ list-style: none;
+ padding: calc(var(--nav-size-base) / 6) calc(var(--nav-size-base) / 1.5);
+ display: block;
}
.kroma-navbar.toggled-menu .nav-menu ul {
- width: 100%;
- height: 100%;
- display: flex;
- flex-direction: column;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
}
.kroma-navbar .nav-toggle.show ~ .nav-menu {
- max-height: 1000px;
- opacity: 1;
- transition: max-height 0s 0ms, opacity 100ms;
+ max-height: 1000px;
+ opacity: 1;
+ transition: max-height 0s 0ms, opacity 100ms;
}
.kroma-navbar.toggled-menu .nav-menu ul li:first-child a {
- padding-top: calc(var(--nav-size-base) / 3);
+ padding-top: calc(var(--nav-size-base) / 3);
}
.kroma-navbar.toggled-menu .nav-menu ul li:last-child a {
- padding-bottom: calc(var(--nav-size-base) / 3);
-}
-
-.kroma-navbar.toggled-menu .nav-menu ul li:hover
-,.kroma-navbar.toggled-menu .nav-menu ul li.nav-current{
-background: var(--neutral-200);
+ padding-bottom: calc(var(--nav-size-base) / 3);
}
-.kroma-navbar.toggled-menu .nav-menu ul li:hover a
-,.kroma-navbar.toggled-menu .nav-menu ul li.nav-current a{
-color: var(--neutral-800);
+.kroma-navbar.toggled-menu .nav-menu ul li a.nav-current,.nav-menu ul li:hover a {
+ background: var(--neutral-100);
}
-.nav-menu ul li:hover a {
- background: transparent;
-}
-nav.kroma-navbar[data-variant]:before {
- background: var(--variant-bg);
- border-bottom-color: var(--variant-border);
-}
-
-nav.kroma-navbar[data-variant] .nav-logo span, nav.kroma-navbar[data-variant] .nav-menu ul li a {
- color: var(--variant-text);
+.kroma-navbar:not(.toggled-menu) .nav-menu {
+ width: 100%;
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
}
-
-.kroma-navbar[data-variant] span.nav-line {
- background: var(--variant-text);
+.kroma-navbar:not(.toggled-menu) .nav-menu ul {
+ display: flex;
+ flex-direction: row;
+ list-style: none;
+ gap: calc(var(--nav-size-base) / 6);
}
-.kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover
-,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current{
-background: var(--variant-hover-bg);
+.kroma-navbar:not(.toggled-menu) .nav-menu ul li a {
+ text-decoration: none;
}
-.kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover a
-,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current a{
-color: var(--variant-hover);
+.kroma-navbar:not(.toggled-menu) .nav-menu ul li a:hover {
+ text-decoration: underline;
}
+.kroma-navbar .kroma-avatar {
+ max-height: calc(var(--nav-size-base) / 1.5);
+ max-width: calc(var(--nav-size-base) / 1.5);
+}
\ No newline at end of file
From 5ba42437635cc83bdac8bed1bf5343a0875d0edb Mon Sep 17 00:00:00 2001
From: Filippo Maria Grilli
Date: Fri, 29 Nov 2024 16:23:57 +0100
Subject: [PATCH 08/12] sidebar - fixed colapsable without href causing error
---
src/js/components/sidebar.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/js/components/sidebar.js b/src/js/components/sidebar.js
index 1d925dc..eb6d646 100644
--- a/src/js/components/sidebar.js
+++ b/src/js/components/sidebar.js
@@ -138,7 +138,8 @@ export class KromaSidebar {
for(var i = 0; i < this.pages.length; i++){
var li = document.createElement('li');
- li.querySelector('a').removeAttribute('href'); //remove href from collapsable parent
+ //remove href from collapsable parent
+ if (li.querySelector('a') && element.hasAttribute('href')) {li.querySelector('a').removeAttribute('href');}
li.classList.add('no-selection');
//parent page
From 0e45115803403189212baf5d4b3506544dfe1a06 Mon Sep 17 00:00:00 2001
From: Filippo Maria Grilli
Date: Fri, 29 Nov 2024 16:25:47 +0100
Subject: [PATCH 09/12] navbar - added variants styling
---
src/css/bundle.css | 26 ++++++++++++++++++++++++++
src/css/components/navbar.css | 28 +++++++++++++++++++++++++++-
2 files changed, 53 insertions(+), 1 deletion(-)
diff --git a/src/css/bundle.css b/src/css/bundle.css
index 7a45e8f..94c5b1f 100644
--- a/src/css/bundle.css
+++ b/src/css/bundle.css
@@ -3897,6 +3897,32 @@ nav.kroma-navbar:not(.toggled-menu) .nav-toggle {
max-width: calc(var(--nav-size-base) / 1.5);
}
+
+nav.kroma-navbar[data-variant]:before {
+ background: var(--variant-bg);
+ border-bottom-color: var(--variant-border);
+}
+
+nav.kroma-navbar[data-variant] .nav-logo span, nav.kroma-navbar[data-variant] .nav-menu ul li a {
+ color: var(--variant-text);
+}
+
+
+.kroma-navbar[data-variant] span.nav-line {
+ background: var(--variant-text);
+}
+
+.kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover
+,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current{
+background: var(--variant-hover-bg);
+}
+
+.kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover a
+,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current a{
+color: var(--variant-hover);
+}
+
+
/* --- pagination.css --- */
/* Pagination Container */
.kroma-pagination {
diff --git a/src/css/components/navbar.css b/src/css/components/navbar.css
index bc17b51..c32b740 100644
--- a/src/css/components/navbar.css
+++ b/src/css/components/navbar.css
@@ -179,4 +179,30 @@ nav.kroma-navbar:not(.toggled-menu) .nav-toggle {
.kroma-navbar .kroma-avatar {
max-height: calc(var(--nav-size-base) / 1.5);
max-width: calc(var(--nav-size-base) / 1.5);
-}
\ No newline at end of file
+}
+
+
+nav.kroma-navbar[data-variant]:before {
+ background: var(--variant-bg);
+ border-bottom-color: var(--variant-border);
+ }
+
+ nav.kroma-navbar[data-variant] .nav-logo span, nav.kroma-navbar[data-variant] .nav-menu ul li a {
+ color: var(--variant-text);
+ }
+
+
+ .kroma-navbar[data-variant] span.nav-line {
+ background: var(--variant-text);
+ }
+
+ .kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover
+ ,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current{
+ background: var(--variant-hover-bg);
+ }
+
+ .kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover a
+ ,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current a{
+ color: var(--variant-hover);
+ }
+
\ No newline at end of file
From 1d5b96b68f928cfebed112c8500bc5777c69e1d7 Mon Sep 17 00:00:00 2001
From: Ohswedd
Date: Fri, 29 Nov 2024 16:47:19 +0100
Subject: [PATCH 10/12] JS Export Fix
---
src/js/components/calendar.js | 2 +-
src/js/components/codeblock.js | 2 +-
src/js/components/command-palette.js | 2 +-
src/js/components/datetime-picker.js | 2 +-
src/js/components/file-upload.js | 2 +-
src/js/components/hologram.js | 2 +-
src/js/components/navbar.js | 2 +-
src/js/components/rating.js | 2 +-
src/js/components/sidebar.js | 2 +-
src/js/components/slideshow.js | 2 +-
src/js/components/tabs.js | 2 +-
src/js/components/toast.js | 4 ++--
12 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/js/components/calendar.js b/src/js/components/calendar.js
index ac5be36..a4bad91 100644
--- a/src/js/components/calendar.js
+++ b/src/js/components/calendar.js
@@ -1,4 +1,4 @@
-export function initializeCalendarComponents() {
+function initializeCalendarComponents() {
document.querySelectorAll('.kroma-calendar').forEach(initCalendar);
}
diff --git a/src/js/components/codeblock.js b/src/js/components/codeblock.js
index 4b05b0e..1cc6381 100644
--- a/src/js/components/codeblock.js
+++ b/src/js/components/codeblock.js
@@ -2,7 +2,7 @@ document.addEventListener('DOMContentLoaded', () => {
initializeCodeblock(document);
});
-export function initializeCodeblock() {
+function initializeCodeblock() {
document.querySelectorAll('.kroma-code-block').forEach((block) => {
// Check if buttons are already rendered to avoid duplication
if (block.querySelector('.kroma-code-block-header')) return;
diff --git a/src/js/components/command-palette.js b/src/js/components/command-palette.js
index d60cf0f..9c382b1 100644
--- a/src/js/components/command-palette.js
+++ b/src/js/components/command-palette.js
@@ -2,7 +2,7 @@ document.addEventListener('DOMContentLoaded', () => {
initializeCommandPalettes();
});
-export function initializeCommandPalettes() {
+function initializeCommandPalettes() {
// Select all command palettes on the page
const palettes = document.querySelectorAll('.kroma-command-palette');
diff --git a/src/js/components/datetime-picker.js b/src/js/components/datetime-picker.js
index e8f4fb0..a875da9 100644
--- a/src/js/components/datetime-picker.js
+++ b/src/js/components/datetime-picker.js
@@ -1,4 +1,4 @@
-export class DateTimePicker {
+class DateTimePicker {
constructor(elementId, { format = 'YYYY-MM-DD HH:mm', includeTime = true, variant = 'primary' } = {}) {
this.container = document.getElementById(elementId);
this.format = format;
diff --git a/src/js/components/file-upload.js b/src/js/components/file-upload.js
index 16ec634..19890d0 100644
--- a/src/js/components/file-upload.js
+++ b/src/js/components/file-upload.js
@@ -1,4 +1,4 @@
-export function initializeKromaFileUploadComponents() {
+function initializeKromaFileUploadComponents() {
document.querySelectorAll('.kroma-file-upload').forEach((fileUpload) => {
const dropzone = fileUpload.querySelector('.kroma-file-upload-dropzone');
const input = fileUpload.querySelector('.kroma-file-upload-input');
diff --git a/src/js/components/hologram.js b/src/js/components/hologram.js
index e2d35ec..5c47737 100644
--- a/src/js/components/hologram.js
+++ b/src/js/components/hologram.js
@@ -1,4 +1,4 @@
-export function showHologram(titleText, subtitleText, variant = 'primary', intensity = 'medium', duration = 6000) {
+function showHologram(titleText, subtitleText, variant = 'primary', intensity = 'medium', duration = 6000) {
// Remove any existing holograms and dim overlay
document.querySelectorAll('.kroma-hologram-overlay, .kroma-body-dim').forEach(el => el.remove());
diff --git a/src/js/components/navbar.js b/src/js/components/navbar.js
index 1e53d9e..c19389c 100644
--- a/src/js/components/navbar.js
+++ b/src/js/components/navbar.js
@@ -1,4 +1,4 @@
-export class KromaNavbar {
+class KromaNavbar {
/*
id (string) = navbar element id
diff --git a/src/js/components/rating.js b/src/js/components/rating.js
index 50f19cc..53c0b50 100644
--- a/src/js/components/rating.js
+++ b/src/js/components/rating.js
@@ -1,4 +1,4 @@
-export function initializeKromaRatingComponents() {
+function initializeKromaRatingComponents() {
// Automatically initialize all rating components on the page
document.querySelectorAll('.kroma-rating').forEach(initializeRatingComponent);
}
diff --git a/src/js/components/sidebar.js b/src/js/components/sidebar.js
index eb6d646..48d50c1 100644
--- a/src/js/components/sidebar.js
+++ b/src/js/components/sidebar.js
@@ -1,4 +1,4 @@
-export class KromaSidebar {
+class KromaSidebar {
/*
id (string) = navbar element id
diff --git a/src/js/components/slideshow.js b/src/js/components/slideshow.js
index 2d5687d..c961768 100644
--- a/src/js/components/slideshow.js
+++ b/src/js/components/slideshow.js
@@ -1,4 +1,4 @@
-export class KromaSlideshow {
+class KromaSlideshow {
/*
id (string) = slideshow element id
diff --git a/src/js/components/tabs.js b/src/js/components/tabs.js
index eafc678..4b4cf4b 100644
--- a/src/js/components/tabs.js
+++ b/src/js/components/tabs.js
@@ -1,4 +1,4 @@
-export function toggleTabContent(event, contentId, containerId) {
+function toggleTabContent(event, contentId, containerId) {
const container = document.getElementById(containerId);
const tabs = container.querySelectorAll('.kroma-tab');
const contents = container.querySelectorAll('.kroma-tab-content');
diff --git a/src/js/components/toast.js b/src/js/components/toast.js
index d297f4f..7ec94be 100644
--- a/src/js/components/toast.js
+++ b/src/js/components/toast.js
@@ -1,4 +1,4 @@
-export function initializeKromaToastComponents() {
+function initializeKromaToastComponents() {
// Automatically initialize and track toast components
document.querySelectorAll('.kroma-toast').forEach((toast) => {
if (toast.dataset.autoDismiss === "true") {
@@ -8,7 +8,7 @@ export function initializeKromaToastComponents() {
});
}
-export function showKromaToast(message, {
+function showKromaToast(message, {
variant = 'primary',
position = 'top-right',
autoDismiss = false,
From 6617868cc0466758114c2db96b18788a50d54873 Mon Sep 17 00:00:00 2001
From: Ohswedd
Date: Fri, 29 Nov 2024 16:47:32 +0100
Subject: [PATCH 11/12] Update demo.html
---
demo.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/demo.html b/demo.html
index 590878b..6426716 100644
--- a/demo.html
+++ b/demo.html
@@ -1345,7 +1345,7 @@ Codeblock Component Showcase
-
+
// Wait for the DOM to load before setting up the event listener
document.addEventListener("DOMContentLoaded", () => {
From 231f234ab073c0b25f20afa6201bcb6a43790ece Mon Sep 17 00:00:00 2001
From: Ohswedd
Date: Fri, 29 Nov 2024 16:48:08 +0100
Subject: [PATCH 12/12] New Bundles
---
src/css/bundle.css | 383 +++++++++++++++------------------------------
src/js/bundle.js | 32 ++--
2 files changed, 144 insertions(+), 271 deletions(-)
diff --git a/src/css/bundle.css b/src/css/bundle.css
index 94c5b1f..8cc8d38 100644
--- a/src/css/bundle.css
+++ b/src/css/bundle.css
@@ -3,7 +3,7 @@ Project: kromacss
Version: 1.0.2
Description: A modern, lightweight, and dependency-free CSS framework designed for simplicity, speed, and adaptability.
Author: Altxria Inc.
-License: MIT
+License: CC BY-ND 4.0
*/
/* --- design-tokens.css --- */
@@ -372,22 +372,24 @@ svg {
.inline-block { display: inline-block; }
.inline { display: inline; }
+
/*REMOVE HIGHLIGHT BACKGROUND*/
.no-selection::selection {
- background: transparent;
- color: inherit;
+ background: transparent;
+ color: inherit;
}
.no-selection::-moz-selection {
- background: transparent;
- color: inherit;
+ background: transparent;
+ color: inherit;
}
.no-selection {
- user-select: none;
+ user-select: none;
}
+
/* --- flexbox.css --- */
.flex { display: flex; gap: var(--space-4); }
.flex-wrap { flex-wrap: wrap; }
@@ -2749,136 +2751,6 @@ blockquote {
}
-/* --- footer.css --- */
-/* Base Footer Styles */
-.kroma-footer {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- align-items: center;
- padding: var(--space-6) var(--space-8);
- background-color: var(--variant-bg, var(--neutral-900));
- color: var(--variant-text, var(--neutral-50));
- font-family: var(--font-sans);
- gap: var(--space-4);
- border-top: 1px solid var(--variant-border, var(--neutral-700));
- transition: background-color var(--transition-colors), box-shadow var(--transition-all);
- z-index: var(--z-10);
- width: 100%;
-}
-
-/* Footer Position: Sticky Bottom */
-.kroma-footer[data-stick="bottom"] {
- position: sticky;
- bottom: 0;
-}
-
-/* Footer Position: Fixed Bottom */
-.kroma-footer[data-stick="fixed"] {
- position: fixed;
- bottom: 0;
- left: 0;
- width: 100%;
- box-shadow: var(--shadow-lg);
-}
-
-/* Footer Layouts */
-.kroma-footer[data-layout="center"] {
- flex-direction: column;
- text-align: center;
- gap: var(--space-4);
-}
-
-.kroma-footer[data-layout="stacked"] {
- flex-direction: column;
- align-items: flex-start;
- gap: var(--space-6);
-}
-
-/* Footer Links */
-.kroma-footer-links {
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
- gap: var(--space-4);
-}
-
-.kroma-footer-link {
- color: inherit;
- text-decoration: none;
- font-size: clamp(0.875rem, 1vw, 1rem);
- font-weight: 500;
- transition: color var(--transition-colors);
-}
-
-.kroma-footer-link:hover,
-.kroma-footer-link:focus {
- color: var(--variant-hover-bg, var(--neutral-300));
- text-decoration: underline;
-}
-
-/* Footer Brand Section */
-.kroma-footer-brand {
- display: flex;
- align-items: center;
- gap: var(--space-3);
- font-size: clamp(1.25rem, 2.5vw, 1.75rem);
- font-weight: bold;
-}
-
-.kroma-footer-logo {
- max-height: 50px;
- object-fit: contain;
-}
-
-/* Footer Copyright Section */
-.kroma-footer-copyright {
- font-size: clamp(0.75rem, 1vw, 0.875rem);
- color: var(--neutral-400);
- margin-top: var(--space-4);
- text-align: center;
- width: 100%;
-}
-
-/* Footer Social Links */
-.kroma-footer-social {
- display: flex;
- justify-content: center;
- gap: var(--space-3);
-}
-
-.kroma-footer-social a {
- font-size: 1.5rem;
- color: inherit;
- transition: color var(--transition-colors);
-}
-
-.kroma-footer-social a:hover,
-.kroma-footer-social a:focus {
- color: var(--variant-hover-bg, var(--neutral-300));
-}
-
-/* Responsive Adjustments */
-@media (max-width: 768px) {
- .kroma-footer {
- flex-direction: column;
- text-align: center;
- gap: var(--space-6);
- padding: var(--space-4);
- }
-
- .kroma-footer-links,
- .kroma-footer-social {
- justify-content: center;
- gap: var(--space-3);
- }
-
- .kroma-footer-copyright {
- margin-top: var(--space-6);
- }
-}
-
-
/* --- form.css --- */
/* Base Form Group Styling */
.kroma-form-group {
@@ -3724,37 +3596,36 @@ blockquote {
}
.kroma-navbar .nav-logo {
- height: calc(var(--nav-size-base) / 1.5 );
- width: max-content;
- display: flex;
- flex-direction: row;
- flex-wrap: nowrap;
- align-items: center;
- gap: calc(var(--nav-size-base) / 6);
- flex: auto;
+ height: calc(var(--nav-size-base) / 1.5 );
+ width: max-content;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ align-items: center;
+ gap: calc(var(--nav-size-base) / 6);
+ flex: auto;
}
nav.kroma-navbar {
- width: 100%;
- height: var(--nav-size-base);
- position: sticky;
- top: 0;
- left: 0;
- z-index: 3;
- display: flex;
- flex-direction: row;
- align-content: center;
- align-items: center;
- flex-wrap: nowrap;
- backdrop-filter: blur(4px);
- -webkit-backdrop-filter: blur(4px);
- justify-content: space-between;
- box-sizing: border-box;
- padding: calc(var(--nav-size-base) / 6);
- gap: calc(var(--nav-size-base) / 6);
+ width: 100%;
+ height: var(--nav-size-base);
+ position: sticky;
+ top: 0;
+ left: 0;
+ z-index: 3;
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ flex-wrap: nowrap;
+ backdrop-filter: blur(4px);
+ -webkit-backdrop-filter: blur(4px);
+ justify-content: space-between;
+ box-sizing: border-box;
+ padding: calc(var(--nav-size-base) / 6);
+ gap: calc(var(--nav-size-base) / 6);
}
-
nav.kroma-navbar:before {
content: "";
display: block;
@@ -3798,130 +3669,130 @@ nav.kroma-navbar:before {
}
nav.kroma-navbar:not(.toggled-menu) .nav-toggle {
- display: none;
+ display: none;
}
.kroma-navbar .nav-toggle.show #nav-line-3 {
- opacity: 0;
- /* top: 20px; */
- height: 0;
+ opacity: 0;
+ /* top: 20px; */
+ height: 0;
}
.kroma-navbar .nav-toggle.show #nav-line-1 {
- transform: translate(0px, 50%) rotate(45deg);
- transform-origin: center;
+ transform: translate(0px, 50%) rotate(45deg);
+ transform-origin: center;
}
.kroma-navbar .nav-toggle.show #nav-line-2 {
- /* background: var(--neutral-700); */
- transform: translate(0px, -50%) rotate(-45deg);
- transform-origin: center;
+ /* background: var(--neutral-700); */
+ transform: translate(0px, -50%) rotate(-45deg);
+ transform-origin: center;
}
.kroma-navbar.toggled-menu .nav-menu {
- display: flex;
- position: absolute;
- top: 100%;
- right: 0;
- margin: calc(var(--nav-size-base) / 3);
- background: var(--neutral-50);
- border-radius: 10px;
- box-shadow: var(--shadow-sm);
- align-items: center;
- justify-content: center;
- /* min-width: 170px; */
- max-height: 0;
- opacity: 0;
- overflow: hidden;
- transition: opacity 100ms, max-height 2s 0ms;
+ display: flex;
+ position: absolute;
+ top: 100%;
+ right: 0;
+ margin: calc(var(--nav-size-base) / 3);
+ background: var(--neutral-50);
+ border-radius: 10px;
+ box-shadow: var(--shadow-sm);
+ align-items: center;
+ justify-content: center;
+ /* min-width: 170px; */
+ max-height: 0;
+ opacity: 0;
+ overflow: hidden;
+ transition: opacity 100ms, max-height 2s 0ms;
}
.kroma-navbar.toggled-menu .nav-menu ul li a {
- text-decoration: none;
- list-style: none;
- padding: calc(var(--nav-size-base) / 6) calc(var(--nav-size-base) / 1.5);
- display: block;
+ text-decoration: none;
+ list-style: none;
+ padding: calc(var(--nav-size-base) / 6) calc(var(--nav-size-base) / 1.5);
+ display: block;
}
.kroma-navbar.toggled-menu .nav-menu ul {
- width: 100%;
- height: 100%;
- display: flex;
- flex-direction: column;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
}
.kroma-navbar .nav-toggle.show ~ .nav-menu {
- max-height: 1000px;
- opacity: 1;
- transition: max-height 0s 0ms, opacity 100ms;
+ max-height: 1000px;
+ opacity: 1;
+ transition: max-height 0s 0ms, opacity 100ms;
}
.kroma-navbar.toggled-menu .nav-menu ul li:first-child a {
- padding-top: calc(var(--nav-size-base) / 3);
+ padding-top: calc(var(--nav-size-base) / 3);
}
.kroma-navbar.toggled-menu .nav-menu ul li:last-child a {
- padding-bottom: calc(var(--nav-size-base) / 3);
+ padding-bottom: calc(var(--nav-size-base) / 3);
}
.kroma-navbar.toggled-menu .nav-menu ul li a.nav-current,.nav-menu ul li:hover a {
- background: var(--neutral-100);
+ background: var(--neutral-100);
}
.kroma-navbar:not(.toggled-menu) .nav-menu {
- width: 100%;
- display: flex;
- justify-content: flex-end;
- align-items: center;
+ width: 100%;
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
}
.kroma-navbar:not(.toggled-menu) .nav-menu ul {
- display: flex;
- flex-direction: row;
- list-style: none;
- gap: calc(var(--nav-size-base) / 6);
+ display: flex;
+ flex-direction: row;
+ list-style: none;
+ gap: calc(var(--nav-size-base) / 6);
}
.kroma-navbar:not(.toggled-menu) .nav-menu ul li a {
- text-decoration: none;
+ text-decoration: none;
}
.kroma-navbar:not(.toggled-menu) .nav-menu ul li a:hover {
- text-decoration: underline;
+ text-decoration: underline;
}
.kroma-navbar .kroma-avatar {
- max-height: calc(var(--nav-size-base) / 1.5);
- max-width: calc(var(--nav-size-base) / 1.5);
+ max-height: calc(var(--nav-size-base) / 1.5);
+ max-width: calc(var(--nav-size-base) / 1.5);
}
nav.kroma-navbar[data-variant]:before {
- background: var(--variant-bg);
- border-bottom-color: var(--variant-border);
-}
-
-nav.kroma-navbar[data-variant] .nav-logo span, nav.kroma-navbar[data-variant] .nav-menu ul li a {
- color: var(--variant-text);
-}
-
-
-.kroma-navbar[data-variant] span.nav-line {
- background: var(--variant-text);
-}
-
-.kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover
-,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current{
-background: var(--variant-hover-bg);
-}
-
-.kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover a
-,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current a{
-color: var(--variant-hover);
-}
-
+ background: var(--variant-bg);
+ border-bottom-color: var(--variant-border);
+ }
+
+ nav.kroma-navbar[data-variant] .nav-logo span, nav.kroma-navbar[data-variant] .nav-menu ul li a {
+ color: var(--variant-text);
+ }
+
+
+ .kroma-navbar[data-variant] span.nav-line {
+ background: var(--variant-text);
+ }
+
+ .kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover
+ ,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current{
+ background: var(--variant-hover-bg);
+ }
+
+ .kroma-navbar[data-variant].toggled-menu .nav-menu ul li:hover a
+ ,.kroma-navbar[data-variant].toggled-menu .nav-menu ul li.nav-current a{
+ color: var(--variant-hover);
+ }
+
/* --- pagination.css --- */
/* Pagination Container */
@@ -4520,7 +4391,7 @@ html:has(.kroma-navbar) .kroma-sidebar{
}
.kroma-sidebar.collapsed .sdb-logo:not(:has(img)):after {
- display: none;
+ display: none;
}
.kroma-sidebar .sdb-logo span {
@@ -4629,59 +4500,59 @@ html:has(.kroma-navbar) .kroma-sidebar{
.kroma-sidebar li{
- cursor:pointer;
-
-}
+ cursor:pointer;
+
+ }
.kroma-sidebar:not(.collapsed) li[data-idparent] {
- padding-left: 10px;
- max-height: 100px;
- transition: 100ms;
+ padding-left: 10px;
+ max-height: 100px;
+ transition: 100ms;
}
.kroma-sidebar:not(.collapsed) li.parent a span:before {
- content: "\f054";
- margin-right: 10px;
- font-family: 'FontAwesome';
- display: inline-block;
+ content: "\f054";
+ margin-right: 10px;
+ font-family: 'FontAwesome';
+ display: inline-block;
}
.kroma-sidebar li[data-idparent].collapsed {
- max-height: 0;
- overflow: hidden;
+ max-height: 0;
+ overflow: hidden;
}
.kroma-sidebar li.parent:not(.collapsed) a span:before {
- transform: rotate(90deg);
- transform-origin: center;
+ transform: rotate(90deg);
+ transform-origin: center;
}
/*variants*/
.kroma-sidebar[data-variant]:before {
- background: var(--variant-bg);
- border-color: var(--variant-border);
+ background: var(--variant-bg);
+ border-color: var(--variant-border);
}
.kroma-sidebar[data-variant] .sdb-logo:after{
- background: var(--variant-border);
+ background: var(--variant-border);
}
.kroma-sidebar[data-variant] .sdb-logo span,
.kroma-sidebar[data-variant] .sdb-menu ul li i,
.kroma-sidebar[data-variant] .sdb-menu ul li span,
.kroma-sidebar[data-variant] .sdb-arrow{
- color: var(--variant-text);
+ color: var(--variant-text);
}
.kroma-sidebar[data-variant] .sdb-menu ul li a:hover:before{
- background: var(--variant-hover-bg);
+ background: var(--variant-hover-bg);
}
.kroma-sidebar[data-variant] .sdb-menu ul li a:hover > i,
.kroma-sidebar[data-variant] .sdb-menu ul li a:hover > span {
- color: var(--variant-hover);
+ color: var(--variant-hover);
}
/* --- skeleton.css --- */
diff --git a/src/js/bundle.js b/src/js/bundle.js
index 74d055e..eed604d 100644
--- a/src/js/bundle.js
+++ b/src/js/bundle.js
@@ -3,7 +3,7 @@ Project: kromacss
Version: 1.0.2
Description: A modern, lightweight, and dependency-free CSS framework designed for simplicity, speed, and adaptability.
Author: Altxria Inc.
-License: MIT
+License: CC BY-ND 4.0
*/
/* --- accordion.js --- */
@@ -181,7 +181,7 @@ function handleAlertClose(alert) {
/* --- calendar.js --- */
-export function initializeCalendarComponents() {
+function initializeCalendarComponents() {
document.querySelectorAll('.kroma-calendar').forEach(initCalendar);
}
@@ -370,7 +370,7 @@ document.addEventListener('DOMContentLoaded', () => {
initializeCodeblock(document);
});
-export function initializeCodeblock() {
+function initializeCodeblock() {
document.querySelectorAll('.kroma-code-block').forEach((block) => {
// Check if buttons are already rendered to avoid duplication
if (block.querySelector('.kroma-code-block-header')) return;
@@ -434,7 +434,7 @@ document.addEventListener('DOMContentLoaded', () => {
initializeCommandPalettes();
});
-export function initializeCommandPalettes() {
+function initializeCommandPalettes() {
// Select all command palettes on the page
const palettes = document.querySelectorAll('.kroma-command-palette');
@@ -615,7 +615,7 @@ function initializeCommandPalette(palette) {
/* --- datetime-picker.js --- */
-export class DateTimePicker {
+class DateTimePicker {
constructor(elementId, { format = 'YYYY-MM-DD HH:mm', includeTime = true, variant = 'primary' } = {}) {
this.container = document.getElementById(elementId);
this.format = format;
@@ -945,7 +945,7 @@ document.addEventListener('DOMContentLoaded', () => {
/* --- file-upload.js --- */
-export function initializeKromaFileUploadComponents() {
+function initializeKromaFileUploadComponents() {
document.querySelectorAll('.kroma-file-upload').forEach((fileUpload) => {
const dropzone = fileUpload.querySelector('.kroma-file-upload-dropzone');
const input = fileUpload.querySelector('.kroma-file-upload-input');
@@ -1017,7 +1017,7 @@ document.addEventListener('DOMContentLoaded', initializeKromaFileUploadComponent
/* --- hologram.js --- */
-export function showHologram(titleText, subtitleText, variant = 'primary', intensity = 'medium', duration = 6000) {
+function showHologram(titleText, subtitleText, variant = 'primary', intensity = 'medium', duration = 6000) {
// Remove any existing holograms and dim overlay
document.querySelectorAll('.kroma-hologram-overlay, .kroma-body-dim').forEach(el => el.remove());
@@ -1238,7 +1238,7 @@ document.addEventListener('DOMContentLoaded', () => {
/* --- navbar.js --- */
-export class KromaNavbar {
+class KromaNavbar {
/*
id (string) = navbar element id
@@ -1490,7 +1490,7 @@ document.addEventListener("DOMContentLoaded", () => {
});
/* --- rating.js --- */
-export function initializeKromaRatingComponents() {
+function initializeKromaRatingComponents() {
// Automatically initialize all rating components on the page
document.querySelectorAll('.kroma-rating').forEach(initializeRatingComponent);
}
@@ -1540,7 +1540,7 @@ document.addEventListener("DOMContentLoaded", initializeKromaRatingComponents);
/* --- sidebar.js --- */
-export class KromaSidebar {
+class KromaSidebar {
/*
id (string) = navbar element id
@@ -1680,6 +1680,8 @@ export class KromaSidebar {
for(var i = 0; i < this.pages.length; i++){
var li = document.createElement('li');
+ //remove href from collapsable parent
+ if (li.querySelector('a') && element.hasAttribute('href')) {li.querySelector('a').removeAttribute('href');}
li.classList.add('no-selection');
//parent page
@@ -1728,7 +1730,6 @@ export class KromaSidebar {
if(liChildren.length < 1){li.classList.remove('parent');}
else{
li.classList.add('collapsed');
- li.querySelector('a').removeAttribute('href'); //remove href from collapsable parent
li.addEventListener('click',function(){
var sdbId = this.closest('.kroma-sidebar').id;
@@ -1753,6 +1754,7 @@ export class KromaSidebar {
li.classList.add('collapsed');
});
+
}
@@ -1781,7 +1783,7 @@ document.addEventListener("DOMContentLoaded", () => {
/* --- slideshow.js --- */
-export class KromaSlideshow {
+class KromaSlideshow {
/*
id (string) = slideshow element id
@@ -2083,7 +2085,7 @@ document.addEventListener("DOMContentLoaded", () => {
/* --- tabs.js --- */
-export function toggleTabContent(event, contentId, containerId) {
+function toggleTabContent(event, contentId, containerId) {
const container = document.getElementById(containerId);
const tabs = container.querySelectorAll('.kroma-tab');
const contents = container.querySelectorAll('.kroma-tab-content');
@@ -2103,7 +2105,7 @@ export function toggleTabContent(event, contentId, containerId) {
/* --- toast.js --- */
-export function initializeKromaToastComponents() {
+function initializeKromaToastComponents() {
// Automatically initialize and track toast components
document.querySelectorAll('.kroma-toast').forEach((toast) => {
if (toast.dataset.autoDismiss === "true") {
@@ -2113,7 +2115,7 @@ export function initializeKromaToastComponents() {
});
}
-export function showKromaToast(message, {
+function showKromaToast(message, {
variant = 'primary',
position = 'top-right',
autoDismiss = false,