Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f352314971 | |||
| 130ca68471 | |||
| cdde25d0b4 | |||
| 231c57b596 | |||
| 167dcb2b0a | |||
| fdccdcdf73 | |||
| bee1cafdb4 | |||
| 42b40da67c |
21
changelog.md
21
changelog.md
@@ -1,5 +1,26 @@
|
||||
# Changelog
|
||||
|
||||
## 2026-04-04 - 3.55.1 - fix(appui)
|
||||
replace hardcoded app UI theme colors with shared dees CSS variables
|
||||
|
||||
- Standardizes app UI component styling on shared --dees-* theme tokens across app bar, menus, tabs, main content, and bottom bar
|
||||
- Removes remaining hardcoded light/dark color values in favor of centralized background, border, text, badge, tooltip, scrollbar, and accent variables
|
||||
|
||||
## 2026-04-04 - 3.55.0 - feat(theme)
|
||||
centralize theme CSS tokens in theme defaults and add missing interactive color variables
|
||||
|
||||
- Refactors theme CSS variables to derive light and dark values from the shared themeDefaults token map instead of hardcoded color literals.
|
||||
- Adjusts dark background token values so secondary and tertiary surfaces align more consistently with the dark UI palette.
|
||||
- Adds new theme variables for interactive states, focus ring, tooltip, link, code, selection, and scrollbar styling.
|
||||
|
||||
## 2026-04-04 - 3.54.0 - feat(media)
|
||||
rename media tile components to thumbnail components and add shared thumbnail base exports
|
||||
|
||||
- Replaces dees-tile-* media component exports and implementations with dees-thumbnail-* counterparts for audio, image, video, note, folder, and pdf previews.
|
||||
- Introduces a shared DeesThumbnailBase and shared thumbnail styles for consistent sizing, hover overlays, loading states, error states, and lazy-loading behavior.
|
||||
- Updates the media index to export the new thumbnail component modules.
|
||||
- Includes a small layout cleanup in dees-dataview-codebox by removing forced full-height and absolute grid positioning.
|
||||
|
||||
## 2026-04-03 - 3.53.0 - feat(dees-pdf-viewer)
|
||||
add configurable sidebar position support
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@design.estate/dees-catalog",
|
||||
"version": "3.53.0",
|
||||
"version": "3.55.1",
|
||||
"private": false,
|
||||
"description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
|
||||
"main": "dist_ts_web/index.js",
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@design.estate/dees-catalog',
|
||||
version: '3.53.0',
|
||||
version: '3.55.1',
|
||||
description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ export const appuiAppbarStyles = [
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: var(--appbar-height);
|
||||
border-bottom: 1px solid ${cssManager.bdTheme('#e0e0e0', '#202020')};
|
||||
background: ${cssManager.bdTheme('#ffffff', '#000000')};
|
||||
border-bottom: 1px solid var(--dees-color-border-default);
|
||||
background: var(--dees-color-bg-primary);
|
||||
color: ${cssManager.bdTheme('#00000080', '#ffffff80')};
|
||||
font-size: var(--appbar-font-size);
|
||||
display: grid;
|
||||
@@ -78,8 +78,8 @@ export const appuiAppbarStyles = [
|
||||
top: 100%;
|
||||
left: 0;
|
||||
min-width: 200px;
|
||||
background: ${cssManager.bdTheme('#ffffff', '#000000')};
|
||||
border: 1px solid ${cssManager.bdTheme('#e0e0e0', '#202020')};
|
||||
background: var(--dees-color-bg-primary);
|
||||
border: 1px solid var(--dees-color-border-default);
|
||||
border-radius: 4px;
|
||||
box-shadow: ${cssManager.bdTheme('0 4px 12px rgba(0, 0, 0, 0.15)', '0 4px 12px rgba(0, 0, 0, 0.3)')};
|
||||
margin-top: 4px;
|
||||
@@ -112,7 +112,7 @@ export const appuiAppbarStyles = [
|
||||
|
||||
.dropdown-divider {
|
||||
height: 1px;
|
||||
background: ${cssManager.bdTheme('#e0e0e0', '#202020')};
|
||||
background: var(--dees-color-border-default);
|
||||
margin: 4px 0;
|
||||
}
|
||||
|
||||
@@ -215,7 +215,7 @@ export const appuiAppbarStyles = [
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 50%;
|
||||
border: 2px solid ${cssManager.bdTheme('#ffffff', '#000000')};
|
||||
border: 2px solid var(--dees-color-bg-primary);
|
||||
}
|
||||
|
||||
.user-status.online {
|
||||
|
||||
@@ -52,10 +52,10 @@ export class DeesAppuiBottombar extends DeesElement implements IBottomBarAPI {
|
||||
align-items: center;
|
||||
padding: 0 8px;
|
||||
gap: 4px;
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 94%)', 'hsl(0 0% 6%)')};
|
||||
border-top: 1px solid ${cssManager.bdTheme('hsl(0 0% 85%)', 'hsl(0 0% 15%)')};
|
||||
background: var(--dees-color-bg-tertiary);
|
||||
border-top: 1px solid var(--dees-color-border-default);
|
||||
font-size: 11px;
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 60%)')};
|
||||
color: var(--dees-color-text-muted);
|
||||
}
|
||||
|
||||
.widget {
|
||||
@@ -70,8 +70,8 @@ export class DeesAppuiBottombar extends DeesElement implements IBottomBarAPI {
|
||||
}
|
||||
|
||||
.widget:hover {
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 88%)', 'hsl(0 0% 12%)')};
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 20%)', 'hsl(0 0% 80%)')};
|
||||
background: var(--dees-color-hover);
|
||||
color: var(--dees-color-text-secondary);
|
||||
}
|
||||
|
||||
.widget dees-icon {
|
||||
@@ -81,7 +81,7 @@ export class DeesAppuiBottombar extends DeesElement implements IBottomBarAPI {
|
||||
.widget-separator {
|
||||
width: 1px;
|
||||
height: 14px;
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 80%)', 'hsl(0 0% 20%)')};
|
||||
background: var(--dees-color-border-strong);
|
||||
margin: 0 4px;
|
||||
}
|
||||
|
||||
@@ -124,12 +124,12 @@ export class DeesAppuiBottombar extends DeesElement implements IBottomBarAPI {
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
transition: background 0.15s ease;
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 60%)')};
|
||||
color: var(--dees-color-text-muted);
|
||||
}
|
||||
|
||||
.action-button:hover {
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 88%)', 'hsl(0 0% 12%)')};
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 20%)', 'hsl(0 0% 80%)')};
|
||||
background: var(--dees-color-hover);
|
||||
color: var(--dees-color-text-secondary);
|
||||
}
|
||||
|
||||
.action-button.disabled {
|
||||
@@ -139,7 +139,7 @@ export class DeesAppuiBottombar extends DeesElement implements IBottomBarAPI {
|
||||
|
||||
.action-button.disabled:hover {
|
||||
background: transparent;
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 60%)')};
|
||||
color: var(--dees-color-text-muted);
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
||||
@@ -63,14 +63,13 @@ export class DeesAppuiMaincontent extends DeesElement {
|
||||
themeDefaultStyles,
|
||||
cssManager.defaultStyles,
|
||||
css`
|
||||
/* TODO: Migrate hardcoded values to --dees-* CSS variables */
|
||||
:host {
|
||||
color: ${cssManager.bdTheme('#333', '#fff')};
|
||||
color: var(--dees-color-text-secondary);
|
||||
display: grid;
|
||||
grid-template-rows: auto 1fr;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
|
||||
background: var(--dees-color-bg-secondary);
|
||||
}
|
||||
|
||||
.maincontainer {
|
||||
|
||||
@@ -55,28 +55,27 @@ export class DeesAppuiMainmenu extends DeesElement {
|
||||
themeDefaultStyles,
|
||||
cssManager.defaultStyles,
|
||||
css`
|
||||
/* TODO: Migrate hardcoded values to --dees-* CSS variables */
|
||||
:host {
|
||||
--menu-width-expanded: 200px;
|
||||
--menu-width-collapsed: 56px;
|
||||
--tooltip-bg: ${cssManager.bdTheme('#18181b', '#fafafa')};
|
||||
--tooltip-fg: ${cssManager.bdTheme('#fafafa', '#18181b')};
|
||||
--tooltip-bg: var(--dees-color-tooltip-bg);
|
||||
--tooltip-fg: var(--dees-color-tooltip-fg);
|
||||
position: relative;
|
||||
display: block;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.mainContainer {
|
||||
color: ${cssManager.bdTheme('#666', '#ccc')};
|
||||
color: var(--dees-color-text-secondary);
|
||||
z-index: ${zIndexLayers.fixed.appBar};
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
width: var(--menu-width-expanded);
|
||||
height: 100%;
|
||||
background: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
|
||||
background: var(--dees-color-bg-secondary);
|
||||
user-select: none;
|
||||
border-right: 1px solid ${cssManager.bdTheme('#e5e5e5', '#1a1a1a')};
|
||||
border-right: 1px solid var(--dees-color-border-subtle);
|
||||
font-family: 'Geist Sans', 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
transition: width 0.25s ease;
|
||||
}
|
||||
@@ -94,23 +93,23 @@ export class DeesAppuiMainmenu extends DeesElement {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border-radius: 50%;
|
||||
background: ${cssManager.bdTheme('#ffffff', '#27272a')};
|
||||
border: 1px solid ${cssManager.bdTheme('#e5e5e5', '#3f3f46')};
|
||||
background: var(--dees-color-bg-primary);
|
||||
border: 1px solid var(--dees-color-border-strong);
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
cursor: pointer;
|
||||
z-index: 10;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: ${cssManager.bdTheme('#737373', '#a1a1aa')};
|
||||
color: var(--dees-color-text-muted);
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s ease, background 0.15s ease;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.collapse-toggle:hover {
|
||||
background: ${cssManager.bdTheme('#f4f4f5', '#3f3f46')};
|
||||
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
background: var(--dees-color-bg-tertiary);
|
||||
color: var(--dees-color-text-primary);
|
||||
}
|
||||
|
||||
:host(:hover) .collapse-toggle {
|
||||
@@ -128,14 +127,14 @@ export class DeesAppuiMainmenu extends DeesElement {
|
||||
gap: 10px;
|
||||
height: 48px;
|
||||
padding: 0 14px;
|
||||
border-bottom: 1px solid ${cssManager.bdTheme('#e5e5e5', '#1a1a1a')};
|
||||
border-bottom: 1px solid var(--dees-color-border-subtle);
|
||||
flex-shrink: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.logoSection .logoIcon {
|
||||
font-size: 22px;
|
||||
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
color: var(--dees-color-text-primary);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
@@ -143,7 +142,7 @@ export class DeesAppuiMainmenu extends DeesElement {
|
||||
flex: 1;
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
color: var(--dees-color-text-primary);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
@@ -178,12 +177,12 @@ export class DeesAppuiMainmenu extends DeesElement {
|
||||
}
|
||||
|
||||
.menuSection::-webkit-scrollbar-thumb {
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.15)', 'rgba(255, 255, 255, 0.15)')};
|
||||
background: var(--dees-color-scrollbar-thumb);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.menuSection::-webkit-scrollbar-thumb:hover {
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.25)', 'rgba(255, 255, 255, 0.25)')};
|
||||
background: var(--dees-color-scrollbar-thumb-hover);
|
||||
}
|
||||
|
||||
/* Menu Group */
|
||||
@@ -200,7 +199,7 @@ export class DeesAppuiMainmenu extends DeesElement {
|
||||
padding: 8px 12px 6px;
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: ${cssManager.bdTheme('#737373', '#737373')};
|
||||
color: var(--dees-color-text-muted);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
white-space: nowrap;
|
||||
@@ -238,21 +237,21 @@ export class DeesAppuiMainmenu extends DeesElement {
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
transition: all 0.15s ease;
|
||||
color: ${cssManager.bdTheme('#525252', '#a3a3a3')};
|
||||
color: var(--dees-color-text-secondary);
|
||||
}
|
||||
|
||||
.tab:hover {
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.04)', 'rgba(255, 255, 255, 0.06)')};
|
||||
background: var(--dees-color-hover);
|
||||
color: ${cssManager.bdTheme('#262626', '#e5e5e5')};
|
||||
}
|
||||
|
||||
.tab:active {
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.06)', 'rgba(255, 255, 255, 0.08)')};
|
||||
background: var(--dees-color-active);
|
||||
}
|
||||
|
||||
.tab.selectedTab {
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.06)', 'rgba(255, 255, 255, 0.08)')};
|
||||
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
background: var(--dees-color-active);
|
||||
color: var(--dees-color-text-primary);
|
||||
}
|
||||
|
||||
.tab.selectedTab::before {
|
||||
@@ -263,7 +262,7 @@ export class DeesAppuiMainmenu extends DeesElement {
|
||||
transform: translateY(-50%);
|
||||
width: 3px;
|
||||
height: 16px;
|
||||
background: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
background: var(--dees-color-text-primary);
|
||||
border-radius: 0 2px 2px 0;
|
||||
}
|
||||
|
||||
@@ -353,23 +352,23 @@ export class DeesAppuiMainmenu extends DeesElement {
|
||||
}
|
||||
|
||||
.badge.default {
|
||||
background: ${cssManager.bdTheme('#f4f4f5', '#27272a')};
|
||||
color: ${cssManager.bdTheme('#3f3f46', '#a1a1aa')};
|
||||
background: var(--dees-color-badge-default-bg);
|
||||
color: var(--dees-color-badge-default-fg);
|
||||
}
|
||||
|
||||
.badge.success {
|
||||
background: ${cssManager.bdTheme('#dcfce7', '#14532d')};
|
||||
color: ${cssManager.bdTheme('#166534', '#4ade80')};
|
||||
background: var(--dees-color-badge-success-bg);
|
||||
color: var(--dees-color-badge-success-fg);
|
||||
}
|
||||
|
||||
.badge.warning {
|
||||
background: ${cssManager.bdTheme('#fef3c7', '#451a03')};
|
||||
color: ${cssManager.bdTheme('#92400e', '#fbbf24')};
|
||||
background: var(--dees-color-badge-warning-bg);
|
||||
color: var(--dees-color-badge-warning-fg);
|
||||
}
|
||||
|
||||
.badge.error {
|
||||
background: ${cssManager.bdTheme('#fee2e2', '#450a0a')};
|
||||
color: ${cssManager.bdTheme('#991b1b', '#f87171')};
|
||||
background: var(--dees-color-badge-error-bg);
|
||||
color: var(--dees-color-badge-error-fg);
|
||||
}
|
||||
|
||||
:host([collapsed]) .badge {
|
||||
@@ -380,7 +379,7 @@ export class DeesAppuiMainmenu extends DeesElement {
|
||||
.bottomSection {
|
||||
flex-shrink: 0;
|
||||
padding: 8px;
|
||||
border-top: 1px solid ${cssManager.bdTheme('#e5e5e5', '#1a1a1a')};
|
||||
border-top: 1px solid var(--dees-color-border-subtle);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2px;
|
||||
|
||||
@@ -73,30 +73,29 @@ export class DeesAppuiSecondarymenu extends DeesElement {
|
||||
themeDefaultStyles,
|
||||
cssManager.defaultStyles,
|
||||
css`
|
||||
/* TODO: Migrate hardcoded values to --dees-* CSS variables */
|
||||
:host {
|
||||
--sidebar-width-expanded: 240px;
|
||||
--sidebar-width-collapsed: 56px;
|
||||
--sidebar-bg: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
|
||||
--sidebar-fg: ${cssManager.bdTheme('#525252', '#a3a3a3')};
|
||||
--sidebar-fg-muted: ${cssManager.bdTheme('#737373', '#737373')};
|
||||
--sidebar-fg-active: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
--sidebar-border: ${cssManager.bdTheme('#e5e5e5', '#1a1a1a')};
|
||||
--sidebar-hover: ${cssManager.bdTheme('rgba(0, 0, 0, 0.04)', 'rgba(255, 255, 255, 0.06)')};
|
||||
--sidebar-active: ${cssManager.bdTheme('rgba(0, 0, 0, 0.06)', 'rgba(255, 255, 255, 0.08)')};
|
||||
--sidebar-accent: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
--tooltip-bg: ${cssManager.bdTheme('#18181b', '#fafafa')};
|
||||
--tooltip-fg: ${cssManager.bdTheme('#fafafa', '#18181b')};
|
||||
--sidebar-bg: var(--dees-color-bg-secondary);
|
||||
--sidebar-fg: var(--dees-color-text-secondary);
|
||||
--sidebar-fg-muted: var(--dees-color-text-muted);
|
||||
--sidebar-fg-active: var(--dees-color-text-primary);
|
||||
--sidebar-border: var(--dees-color-border-subtle);
|
||||
--sidebar-hover: var(--dees-color-hover);
|
||||
--sidebar-active: var(--dees-color-active);
|
||||
--sidebar-accent: var(--dees-color-text-primary);
|
||||
--tooltip-bg: var(--dees-color-tooltip-bg);
|
||||
--tooltip-fg: var(--dees-color-tooltip-fg);
|
||||
|
||||
/* Badge colors */
|
||||
--badge-default-bg: ${cssManager.bdTheme('#f4f4f5', '#27272a')};
|
||||
--badge-default-fg: ${cssManager.bdTheme('#3f3f46', '#a1a1aa')};
|
||||
--badge-success-bg: ${cssManager.bdTheme('#dcfce7', '#14532d')};
|
||||
--badge-success-fg: ${cssManager.bdTheme('#166534', '#4ade80')};
|
||||
--badge-warning-bg: ${cssManager.bdTheme('#fef3c7', '#451a03')};
|
||||
--badge-warning-fg: ${cssManager.bdTheme('#92400e', '#fbbf24')};
|
||||
--badge-error-bg: ${cssManager.bdTheme('#fee2e2', '#450a0a')};
|
||||
--badge-error-fg: ${cssManager.bdTheme('#991b1b', '#f87171')};
|
||||
--badge-default-bg: var(--dees-color-badge-default-bg);
|
||||
--badge-default-fg: var(--dees-color-badge-default-fg);
|
||||
--badge-success-bg: var(--dees-color-badge-success-bg);
|
||||
--badge-success-fg: var(--dees-color-badge-success-fg);
|
||||
--badge-warning-bg: var(--dees-color-badge-warning-bg);
|
||||
--badge-warning-fg: var(--dees-color-badge-warning-fg);
|
||||
--badge-error-bg: var(--dees-color-badge-error-bg);
|
||||
--badge-error-fg: var(--dees-color-badge-error-fg);
|
||||
|
||||
/* Action colors */
|
||||
--action-primary: ${cssManager.bdTheme('#2563eb', '#3b82f6')};
|
||||
@@ -136,23 +135,23 @@ export class DeesAppuiSecondarymenu extends DeesElement {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border-radius: 50%;
|
||||
background: ${cssManager.bdTheme('#ffffff', '#27272a')};
|
||||
border: 1px solid ${cssManager.bdTheme('#e5e5e5', '#3f3f46')};
|
||||
background: var(--dees-color-bg-primary);
|
||||
border: 1px solid var(--dees-color-border-strong);
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
cursor: pointer;
|
||||
z-index: 10;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: ${cssManager.bdTheme('#737373', '#a1a1aa')};
|
||||
color: var(--dees-color-text-muted);
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s ease, background 0.15s ease;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.collapse-toggle:hover {
|
||||
background: ${cssManager.bdTheme('#f4f4f5', '#3f3f46')};
|
||||
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
background: var(--dees-color-bg-tertiary);
|
||||
color: var(--dees-color-text-primary);
|
||||
}
|
||||
|
||||
:host(:hover) .collapse-toggle {
|
||||
@@ -215,12 +214,12 @@ export class DeesAppuiSecondarymenu extends DeesElement {
|
||||
}
|
||||
|
||||
.menuSection::-webkit-scrollbar-thumb {
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.15)', 'rgba(255, 255, 255, 0.15)')};
|
||||
background: var(--dees-color-scrollbar-thumb);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.menuSection::-webkit-scrollbar-thumb:hover {
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.25)', 'rgba(255, 255, 255, 0.25)')};
|
||||
background: var(--dees-color-scrollbar-thumb-hover);
|
||||
}
|
||||
|
||||
/* Menu Group */
|
||||
@@ -261,7 +260,7 @@ export class DeesAppuiSecondarymenu extends DeesElement {
|
||||
gap: 8px;
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: ${cssManager.bdTheme('#78716c', '#b5a99a')};
|
||||
color: var(--dees-color-text-warm);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
white-space: nowrap;
|
||||
@@ -270,13 +269,13 @@ export class DeesAppuiSecondarymenu extends DeesElement {
|
||||
|
||||
.groupHeader .groupTitle dees-icon {
|
||||
font-size: 16px;
|
||||
color: ${cssManager.bdTheme('#78716c', '#b5a99a')};
|
||||
color: var(--dees-color-text-warm);
|
||||
}
|
||||
|
||||
.groupHeader .chevron {
|
||||
font-size: 12px;
|
||||
transition: transform 0.2s ease;
|
||||
color: ${cssManager.bdTheme('#78716c', '#b5a99a')};
|
||||
color: var(--dees-color-text-warm);
|
||||
}
|
||||
|
||||
.groupHeader.collapsed .chevron {
|
||||
|
||||
@@ -60,7 +60,6 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
themeDefaultStyles,
|
||||
cssManager.defaultStyles,
|
||||
css`
|
||||
/* TODO: Migrate hardcoded values to --dees-* CSS variables */
|
||||
:host {
|
||||
display: block;
|
||||
position: relative;
|
||||
@@ -76,7 +75,7 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
|
||||
.tabs-wrapper.horizontal-wrapper {
|
||||
height: 48px;
|
||||
border-bottom: 1px solid ${cssManager.bdTheme('#e5e7eb', '#27272a')};
|
||||
border-bottom: 1px solid var(--dees-color-border-default);
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
@@ -133,13 +132,13 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
.tab-actions.left {
|
||||
padding-left: 12px;
|
||||
padding-right: 8px;
|
||||
border-right: 1px solid ${cssManager.bdTheme('#e5e7eb', '#27272a')};
|
||||
border-right: 1px solid var(--dees-color-border-default);
|
||||
}
|
||||
|
||||
.tab-actions.right {
|
||||
padding-right: 12px;
|
||||
padding-left: 8px;
|
||||
border-left: 1px solid ${cssManager.bdTheme('#e5e7eb', '#27272a')};
|
||||
border-left: 1px solid var(--dees-color-border-default);
|
||||
}
|
||||
|
||||
.tab-action-button {
|
||||
@@ -152,17 +151,17 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
cursor: pointer;
|
||||
transition: background 0.15s ease, color 0.15s ease;
|
||||
background: transparent;
|
||||
color: ${cssManager.bdTheme('#71717a', '#71717a')};
|
||||
color: var(--dees-color-text-muted);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.tab-action-button:hover {
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.06)', 'rgba(255, 255, 255, 0.06)')};
|
||||
color: ${cssManager.bdTheme('#09090b', '#fafafa')};
|
||||
background: var(--dees-color-active);
|
||||
color: var(--dees-color-text-primary);
|
||||
}
|
||||
|
||||
.tab-action-button:active {
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.1)', 'rgba(255, 255, 255, 0.1)')};
|
||||
background: var(--dees-color-pressed);
|
||||
}
|
||||
|
||||
.tab-action-button.disabled {
|
||||
@@ -172,7 +171,7 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
|
||||
.tab-action-button.disabled:hover {
|
||||
background: transparent;
|
||||
color: ${cssManager.bdTheme('#71717a', '#71717a')};
|
||||
color: var(--dees-color-text-muted);
|
||||
}
|
||||
|
||||
.tab-action-button dees-icon {
|
||||
@@ -237,12 +236,12 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
font-size: 14px;
|
||||
gap: 2px;
|
||||
position: relative;
|
||||
background: ${cssManager.bdTheme('#f9fafb', '#18181b')};
|
||||
background: var(--dees-color-bg-tertiary);
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.tab {
|
||||
color: ${cssManager.bdTheme('#71717a', '#71717a')};
|
||||
color: var(--dees-color-text-muted);
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
transition: color 0.15s ease;
|
||||
@@ -270,7 +269,7 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
transform: translateY(-50%);
|
||||
height: 20px;
|
||||
width: 1px;
|
||||
background: ${cssManager.bdTheme('#e5e7eb', '#27272a')};
|
||||
background: var(--dees-color-border-default);
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
@@ -291,11 +290,11 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
}
|
||||
|
||||
.tab:hover {
|
||||
color: ${cssManager.bdTheme('#09090b', '#fafafa')};
|
||||
color: var(--dees-color-text-primary);
|
||||
}
|
||||
|
||||
.horizontal .tab:hover {
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.03)', 'rgba(255, 255, 255, 0.03)')};
|
||||
background: var(--dees-color-hover);
|
||||
}
|
||||
|
||||
.horizontal .tab:hover::after,
|
||||
@@ -308,7 +307,7 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
}
|
||||
|
||||
.horizontal .tab.selectedTab {
|
||||
color: ${cssManager.bdTheme('#09090b', '#fafafa')};
|
||||
color: var(--dees-color-text-primary);
|
||||
}
|
||||
|
||||
.horizontal .tab.selectedTab::after,
|
||||
@@ -317,7 +316,7 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
}
|
||||
|
||||
.vertical .tab.selectedTab {
|
||||
color: ${cssManager.bdTheme('#09090b', '#fafafa')};
|
||||
color: var(--dees-color-text-primary);
|
||||
}
|
||||
|
||||
.tab dees-icon {
|
||||
@@ -337,7 +336,7 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
.tabs-wrapper .tabIndicator {
|
||||
height: 3px;
|
||||
bottom: 0;
|
||||
background: ${cssManager.bdTheme('#3b82f6', '#3b82f6')};
|
||||
background: var(--dees-color-accent-primary);
|
||||
border-radius: 3px 3px 0 0;
|
||||
z-index: 3;
|
||||
}
|
||||
@@ -350,7 +349,7 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
left: 8px;
|
||||
right: 8px;
|
||||
border-radius: 6px;
|
||||
background: ${cssManager.bdTheme('#ffffff', '#27272a')};
|
||||
background: var(--dees-color-bg-primary);
|
||||
z-index: 1;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
@@ -366,7 +365,7 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
margin-left: 8px;
|
||||
opacity: 0.4;
|
||||
transition: opacity 0.15s, background 0.15s;
|
||||
color: ${cssManager.bdTheme('#71717a', '#71717a')};
|
||||
color: var(--dees-color-text-muted);
|
||||
}
|
||||
|
||||
.tab:hover .tab-close {
|
||||
@@ -375,8 +374,8 @@ export class DeesAppuiTabs extends DeesElement {
|
||||
|
||||
.tab-close:hover {
|
||||
opacity: 1;
|
||||
background: ${cssManager.bdTheme('rgba(0,0,0,0.1)', 'rgba(255,255,255,0.1)')};
|
||||
color: ${cssManager.bdTheme('#ef4444', '#f87171')};
|
||||
background: var(--dees-color-pressed);
|
||||
color: var(--dees-color-accent-error);
|
||||
}
|
||||
|
||||
.tab.selectedTab .tab-close {
|
||||
|
||||
@@ -184,12 +184,11 @@ export class DeesAppui extends DeesElement {
|
||||
themeDefaultStyles,
|
||||
cssManager.defaultStyles,
|
||||
css`
|
||||
/* TODO: Migrate hardcoded values to --dees-* CSS variables */
|
||||
:host {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
background: ${cssManager.bdTheme('#f0f0f0', '#1a1a1a')};
|
||||
background: var(--dees-color-bg-tertiary);
|
||||
}
|
||||
.maingrid {
|
||||
position: absolute;
|
||||
|
||||
@@ -53,11 +53,9 @@ export class DeesDataviewCodebox extends DeesElement {
|
||||
text-align: left;
|
||||
font-size: 16px;
|
||||
font-family: ${cssGeistFontFamily};
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
dees-tile {
|
||||
height: 100%;
|
||||
color: ${cssManager.bdTheme('#09090b', '#fafafa')};
|
||||
}
|
||||
|
||||
@@ -114,8 +112,6 @@ export class DeesDataviewCodebox extends DeesElement {
|
||||
}
|
||||
|
||||
.codegrid {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
display: grid;
|
||||
grid-template-columns: 50px auto;
|
||||
overflow: auto;
|
||||
|
||||
@@ -8,22 +8,22 @@ import {
|
||||
type TemplateResult,
|
||||
type CSSResult,
|
||||
} from '@design.estate/dees-element';
|
||||
import { DeesTileBase } from '../dees-tile-shared/DeesTileBase.js';
|
||||
import { tileBaseStyles } from '../dees-tile-shared/styles.js';
|
||||
import { DeesThumbnailBase } from '../dees-thumbnail-shared/DeesThumbnailBase.js';
|
||||
import { thumbnailBaseStyles } from '../dees-thumbnail-shared/styles.js';
|
||||
import { demo } from './demo.js';
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'dees-tile-audio': DeesTileAudio;
|
||||
'dees-thumbnail-audio': DeesThumbnailAudio;
|
||||
}
|
||||
}
|
||||
|
||||
@customElement('dees-tile-audio')
|
||||
export class DeesTileAudio extends DeesTileBase {
|
||||
@customElement('dees-thumbnail-audio')
|
||||
export class DeesThumbnailAudio extends DeesThumbnailBase {
|
||||
public static demo = demo;
|
||||
public static demoGroups = ['Media'];
|
||||
public static styles = [
|
||||
...tileBaseStyles,
|
||||
...thumbnailBaseStyles,
|
||||
css`
|
||||
.audio-content {
|
||||
position: relative;
|
||||
@@ -26,51 +26,51 @@ export const demo = () => html`
|
||||
<div class="demo-section">
|
||||
<h3>Audio Tiles</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-audio
|
||||
<dees-thumbnail-audio
|
||||
src="https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3"
|
||||
title="SoundHelix Song 1"
|
||||
artist="T. Schuerger"
|
||||
label="soundhelix-1.mp3"
|
||||
@tile-click=${(e: CustomEvent) => console.log('Audio clicked:', e.detail)}
|
||||
></dees-tile-audio>
|
||||
></dees-thumbnail-audio>
|
||||
|
||||
<dees-tile-audio
|
||||
<dees-thumbnail-audio
|
||||
src="https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3"
|
||||
title="SoundHelix Song 2"
|
||||
artist="T. Schuerger"
|
||||
label="soundhelix-2.mp3"
|
||||
></dees-tile-audio>
|
||||
></dees-thumbnail-audio>
|
||||
|
||||
<dees-tile-audio
|
||||
<dees-thumbnail-audio
|
||||
src="https://www.soundhelix.com/examples/mp3/SoundHelix-Song-3.mp3"
|
||||
title="SoundHelix Song 3"
|
||||
label="soundhelix-3.mp3"
|
||||
></dees-tile-audio>
|
||||
></dees-thumbnail-audio>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>Size Variants</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-audio
|
||||
<dees-thumbnail-audio
|
||||
size="small"
|
||||
src="https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3"
|
||||
title="Small"
|
||||
label="small.mp3"
|
||||
></dees-tile-audio>
|
||||
></dees-thumbnail-audio>
|
||||
|
||||
<dees-tile-audio
|
||||
<dees-thumbnail-audio
|
||||
src="https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3"
|
||||
title="Default"
|
||||
label="default.mp3"
|
||||
></dees-tile-audio>
|
||||
></dees-thumbnail-audio>
|
||||
|
||||
<dees-tile-audio
|
||||
<dees-thumbnail-audio
|
||||
size="large"
|
||||
src="https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3"
|
||||
title="Large"
|
||||
label="large.mp3"
|
||||
></dees-tile-audio>
|
||||
></dees-thumbnail-audio>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -7,11 +7,11 @@ import {
|
||||
type TemplateResult,
|
||||
type CSSResult,
|
||||
} from '@design.estate/dees-element';
|
||||
import { DeesTileBase } from '../dees-tile-shared/DeesTileBase.js';
|
||||
import { tileBaseStyles } from '../dees-tile-shared/styles.js';
|
||||
import { DeesThumbnailBase } from '../dees-thumbnail-shared/DeesThumbnailBase.js';
|
||||
import { thumbnailBaseStyles } from '../dees-thumbnail-shared/styles.js';
|
||||
import { demo } from './demo.js';
|
||||
|
||||
export interface ITileFolderItem {
|
||||
export interface IThumbnailFolderItem {
|
||||
type: 'pdf' | 'image' | 'audio' | 'video' | 'note' | 'folder' | 'unknown';
|
||||
thumbnailSrc?: string;
|
||||
name: string;
|
||||
@@ -29,16 +29,16 @@ const TYPE_ICON_MAP: Record<string, string> = {
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'dees-tile-folder': DeesTileFolder;
|
||||
'dees-thumbnail-folder': DeesThumbnailFolder;
|
||||
}
|
||||
}
|
||||
|
||||
@customElement('dees-tile-folder')
|
||||
export class DeesTileFolder extends DeesTileBase {
|
||||
@customElement('dees-thumbnail-folder')
|
||||
export class DeesThumbnailFolder extends DeesThumbnailBase {
|
||||
public static demo = demo;
|
||||
public static demoGroups = ['Media'];
|
||||
public static styles = [
|
||||
...tileBaseStyles,
|
||||
...thumbnailBaseStyles,
|
||||
css`
|
||||
.folder-content {
|
||||
position: relative;
|
||||
@@ -116,7 +116,7 @@ export class DeesTileFolder extends DeesTileBase {
|
||||
accessor name: string = '';
|
||||
|
||||
@property({ attribute: false })
|
||||
accessor items: ITileFolderItem[] = [];
|
||||
accessor items: IThumbnailFolderItem[] = [];
|
||||
|
||||
protected renderTileContent(): TemplateResult {
|
||||
const previewItems = this.items.slice(0, 4);
|
||||
@@ -1,8 +1,8 @@
|
||||
import { html } from '@design.estate/dees-element';
|
||||
import type { ITileFolderItem } from './component.js';
|
||||
import type { IThumbnailFolderItem } from './component.js';
|
||||
|
||||
export const demo = () => {
|
||||
const photosFolder: ITileFolderItem[] = [
|
||||
const photosFolder: IThumbnailFolderItem[] = [
|
||||
{ type: 'image', name: 'sunset.jpg', thumbnailSrc: 'https://picsum.photos/200/200?random=1' },
|
||||
{ type: 'image', name: 'mountain.jpg', thumbnailSrc: 'https://picsum.photos/200/200?random=2' },
|
||||
{ type: 'image', name: 'ocean.jpg', thumbnailSrc: 'https://picsum.photos/200/200?random=3' },
|
||||
@@ -11,7 +11,7 @@ export const demo = () => {
|
||||
{ type: 'image', name: 'desert.jpg', thumbnailSrc: 'https://picsum.photos/200/200?random=6' },
|
||||
];
|
||||
|
||||
const projectFolder: ITileFolderItem[] = [
|
||||
const projectFolder: IThumbnailFolderItem[] = [
|
||||
{ type: 'note', name: 'README.md' },
|
||||
{ type: 'note', name: 'package.json' },
|
||||
{ type: 'folder', name: 'src' },
|
||||
@@ -21,16 +21,16 @@ export const demo = () => {
|
||||
{ type: 'image', name: 'logo.png', thumbnailSrc: 'https://picsum.photos/100/100?random=10' },
|
||||
];
|
||||
|
||||
const mediaFolder: ITileFolderItem[] = [
|
||||
const mediaFolder: IThumbnailFolderItem[] = [
|
||||
{ type: 'video', name: 'intro.mp4' },
|
||||
{ type: 'audio', name: 'background.mp3' },
|
||||
{ type: 'image', name: 'thumbnail.jpg', thumbnailSrc: 'https://picsum.photos/200/200?random=20' },
|
||||
{ type: 'pdf', name: 'storyboard.pdf' },
|
||||
];
|
||||
|
||||
const emptyFolder: ITileFolderItem[] = [];
|
||||
const emptyFolder: IThumbnailFolderItem[] = [];
|
||||
|
||||
const singleItemFolder: ITileFolderItem[] = [
|
||||
const singleItemFolder: IThumbnailFolderItem[] = [
|
||||
{ type: 'pdf', name: 'report.pdf' },
|
||||
];
|
||||
|
||||
@@ -60,61 +60,61 @@ export const demo = () => {
|
||||
<div class="demo-section">
|
||||
<h3>Folder Tiles</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-folder
|
||||
<dees-thumbnail-folder
|
||||
name="Photos"
|
||||
.items=${photosFolder}
|
||||
label="6 photos"
|
||||
@tile-click=${(e: CustomEvent) => console.log('Folder clicked:', e.detail)}
|
||||
></dees-tile-folder>
|
||||
></dees-thumbnail-folder>
|
||||
|
||||
<dees-tile-folder
|
||||
<dees-thumbnail-folder
|
||||
name="my-project"
|
||||
.items=${projectFolder}
|
||||
label="Project files"
|
||||
></dees-tile-folder>
|
||||
></dees-thumbnail-folder>
|
||||
|
||||
<dees-tile-folder
|
||||
<dees-thumbnail-folder
|
||||
name="Media Assets"
|
||||
.items=${mediaFolder}
|
||||
label="Mixed media"
|
||||
></dees-tile-folder>
|
||||
></dees-thumbnail-folder>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>Edge Cases</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-folder
|
||||
<dees-thumbnail-folder
|
||||
name="Empty Folder"
|
||||
.items=${emptyFolder}
|
||||
></dees-tile-folder>
|
||||
></dees-thumbnail-folder>
|
||||
|
||||
<dees-tile-folder
|
||||
<dees-thumbnail-folder
|
||||
name="Single Item"
|
||||
.items=${singleItemFolder}
|
||||
></dees-tile-folder>
|
||||
></dees-thumbnail-folder>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>Size Variants</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-folder
|
||||
<dees-thumbnail-folder
|
||||
size="small"
|
||||
name="Small"
|
||||
.items=${photosFolder}
|
||||
></dees-tile-folder>
|
||||
></dees-thumbnail-folder>
|
||||
|
||||
<dees-tile-folder
|
||||
<dees-thumbnail-folder
|
||||
name="Default"
|
||||
.items=${photosFolder}
|
||||
></dees-tile-folder>
|
||||
></dees-thumbnail-folder>
|
||||
|
||||
<dees-tile-folder
|
||||
<dees-thumbnail-folder
|
||||
size="large"
|
||||
name="Large"
|
||||
.items=${photosFolder}
|
||||
></dees-tile-folder>
|
||||
></dees-thumbnail-folder>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -8,22 +8,22 @@ import {
|
||||
type TemplateResult,
|
||||
type CSSResult,
|
||||
} from '@design.estate/dees-element';
|
||||
import { DeesTileBase } from '../dees-tile-shared/DeesTileBase.js';
|
||||
import { tileBaseStyles } from '../dees-tile-shared/styles.js';
|
||||
import { DeesThumbnailBase } from '../dees-thumbnail-shared/DeesThumbnailBase.js';
|
||||
import { thumbnailBaseStyles } from '../dees-thumbnail-shared/styles.js';
|
||||
import { demo } from './demo.js';
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'dees-tile-image': DeesTileImage;
|
||||
'dees-thumbnail-image': DeesThumbnailImage;
|
||||
}
|
||||
}
|
||||
|
||||
@customElement('dees-tile-image')
|
||||
export class DeesTileImage extends DeesTileBase {
|
||||
@customElement('dees-thumbnail-image')
|
||||
export class DeesThumbnailImage extends DeesThumbnailBase {
|
||||
public static demo = demo;
|
||||
public static demoGroups = ['Media'];
|
||||
public static styles = [
|
||||
...tileBaseStyles,
|
||||
...thumbnailBaseStyles,
|
||||
css`
|
||||
.image-wrapper {
|
||||
position: relative;
|
||||
@@ -26,59 +26,59 @@ export const demo = () => html`
|
||||
<div class="demo-section">
|
||||
<h3>Image Tiles</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-image
|
||||
<dees-thumbnail-image
|
||||
src="https://picsum.photos/800/600"
|
||||
alt="Landscape photo"
|
||||
label="landscape.jpg"
|
||||
@tile-click=${(e: CustomEvent) => console.log('Image clicked:', e.detail)}
|
||||
></dees-tile-image>
|
||||
></dees-thumbnail-image>
|
||||
|
||||
<dees-tile-image
|
||||
<dees-thumbnail-image
|
||||
src="https://picsum.photos/400/400"
|
||||
alt="Square photo"
|
||||
label="square.png"
|
||||
></dees-tile-image>
|
||||
></dees-thumbnail-image>
|
||||
|
||||
<dees-tile-image
|
||||
<dees-thumbnail-image
|
||||
src="https://picsum.photos/300/900"
|
||||
alt="Portrait photo"
|
||||
label="portrait.webp"
|
||||
></dees-tile-image>
|
||||
></dees-thumbnail-image>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>Size Variants</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-image
|
||||
<dees-thumbnail-image
|
||||
size="small"
|
||||
src="https://picsum.photos/200/200"
|
||||
alt="Small"
|
||||
label="small.jpg"
|
||||
></dees-tile-image>
|
||||
></dees-thumbnail-image>
|
||||
|
||||
<dees-tile-image
|
||||
<dees-thumbnail-image
|
||||
src="https://picsum.photos/600/400"
|
||||
alt="Default"
|
||||
label="default.jpg"
|
||||
></dees-tile-image>
|
||||
></dees-thumbnail-image>
|
||||
|
||||
<dees-tile-image
|
||||
<dees-thumbnail-image
|
||||
size="large"
|
||||
src="https://picsum.photos/1200/800"
|
||||
alt="Large"
|
||||
label="large.jpg"
|
||||
></dees-tile-image>
|
||||
></dees-thumbnail-image>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>Error State (broken URL)</h3>
|
||||
<dees-tile-image
|
||||
<dees-thumbnail-image
|
||||
src="https://invalid-url-that-does-not-exist.example/image.png"
|
||||
alt="Broken"
|
||||
label="broken.png"
|
||||
></dees-tile-image>
|
||||
></dees-thumbnail-image>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
@@ -8,22 +8,22 @@ import {
|
||||
type TemplateResult,
|
||||
type CSSResult,
|
||||
} from '@design.estate/dees-element';
|
||||
import { DeesTileBase } from '../dees-tile-shared/DeesTileBase.js';
|
||||
import { tileBaseStyles } from '../dees-tile-shared/styles.js';
|
||||
import { DeesThumbnailBase } from '../dees-thumbnail-shared/DeesThumbnailBase.js';
|
||||
import { thumbnailBaseStyles } from '../dees-thumbnail-shared/styles.js';
|
||||
import { demo } from './demo.js';
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'dees-tile-note': DeesTileNote;
|
||||
'dees-thumbnail-note': DeesThumbnailNote;
|
||||
}
|
||||
}
|
||||
|
||||
@customElement('dees-tile-note')
|
||||
export class DeesTileNote extends DeesTileBase {
|
||||
@customElement('dees-thumbnail-note')
|
||||
export class DeesThumbnailNote extends DeesThumbnailBase {
|
||||
public static demo = demo;
|
||||
public static demoGroups = ['Media'];
|
||||
public static styles = [
|
||||
...tileBaseStyles,
|
||||
...thumbnailBaseStyles,
|
||||
css`
|
||||
.note-content {
|
||||
position: relative;
|
||||
@@ -72,63 +72,63 @@ Action Items:
|
||||
<div class="demo-section">
|
||||
<h3>Note Tiles</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-note
|
||||
<dees-thumbnail-note
|
||||
title="component.ts"
|
||||
.content=${sampleCode}
|
||||
language="typescript"
|
||||
label="component.ts"
|
||||
@tile-click=${(e: CustomEvent) => console.log('Note clicked:', e.detail)}
|
||||
></dees-tile-note>
|
||||
></dees-thumbnail-note>
|
||||
|
||||
<dees-tile-note
|
||||
<dees-thumbnail-note
|
||||
title="Meeting Notes"
|
||||
.content=${sampleText}
|
||||
label="meeting-notes.txt"
|
||||
></dees-tile-note>
|
||||
></dees-thumbnail-note>
|
||||
|
||||
<dees-tile-note
|
||||
<dees-thumbnail-note
|
||||
title="package.json"
|
||||
.content=${sampleJson}
|
||||
language="json"
|
||||
label="package.json"
|
||||
></dees-tile-note>
|
||||
></dees-thumbnail-note>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>Size Variants</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-note
|
||||
<dees-thumbnail-note
|
||||
size="small"
|
||||
title="small.ts"
|
||||
.content=${sampleCode}
|
||||
language="ts"
|
||||
label="small.ts"
|
||||
></dees-tile-note>
|
||||
></dees-thumbnail-note>
|
||||
|
||||
<dees-tile-note
|
||||
<dees-thumbnail-note
|
||||
title="default.ts"
|
||||
.content=${sampleCode}
|
||||
language="ts"
|
||||
label="default.ts"
|
||||
></dees-tile-note>
|
||||
></dees-thumbnail-note>
|
||||
|
||||
<dees-tile-note
|
||||
<dees-thumbnail-note
|
||||
size="large"
|
||||
title="large.ts"
|
||||
.content=${sampleCode}
|
||||
language="ts"
|
||||
label="large.ts"
|
||||
></dees-tile-note>
|
||||
></dees-thumbnail-note>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>Without Title</h3>
|
||||
<dees-tile-note
|
||||
<dees-thumbnail-note
|
||||
.content=${sampleText}
|
||||
label="untitled.txt"
|
||||
></dees-tile-note>
|
||||
></dees-thumbnail-note>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
@@ -1,6 +1,6 @@
|
||||
import { property, state, html, customElement, type TemplateResult, type CSSResult } from '@design.estate/dees-element';
|
||||
import { DeesTileBase } from '../dees-tile-shared/DeesTileBase.js';
|
||||
import { tileBaseStyles } from '../dees-tile-shared/styles.js';
|
||||
import { DeesThumbnailBase } from '../dees-thumbnail-shared/DeesThumbnailBase.js';
|
||||
import { thumbnailBaseStyles } from '../dees-thumbnail-shared/styles.js';
|
||||
import { PdfManager } from '../dees-pdf-shared/PdfManager.js';
|
||||
import { CanvasPool, type PooledCanvas } from '../dees-pdf-shared/CanvasPool.js';
|
||||
import { PerformanceMonitor, throttle, formatFileSize } from '../dees-pdf-shared/utils.js';
|
||||
@@ -9,15 +9,15 @@ import { demo as demoFunc } from './demo.js';
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'dees-tile-pdf': DeesTilePdf;
|
||||
'dees-thumbnail-pdf': DeesThumbnailPdf;
|
||||
}
|
||||
}
|
||||
|
||||
@customElement('dees-tile-pdf')
|
||||
export class DeesTilePdf extends DeesTileBase {
|
||||
@customElement('dees-thumbnail-pdf')
|
||||
export class DeesThumbnailPdf extends DeesThumbnailBase {
|
||||
public static demo = demoFunc;
|
||||
public static demoGroups = ['Media', 'PDF'];
|
||||
public static styles = [...tileBaseStyles, tilePdfStyles] as any;
|
||||
public static styles = [...thumbnailBaseStyles, tilePdfStyles] as any;
|
||||
|
||||
@property({ type: String })
|
||||
accessor pdfUrl: string = '';
|
||||
@@ -11,7 +11,7 @@ export const demo = () => {
|
||||
for (let i = 0; i < count; i++) {
|
||||
const pdfUrl = samplePdfs[i % samplePdfs.length];
|
||||
items.push(html`
|
||||
<dees-tile-pdf
|
||||
<dees-thumbnail-pdf
|
||||
pdfUrl="${pdfUrl}"
|
||||
clickable="true"
|
||||
grid-mode
|
||||
@@ -19,7 +19,7 @@ export const demo = () => {
|
||||
console.log('PDF Tile clicked:', e.detail);
|
||||
alert(`PDF clicked: ${e.detail.pageCount} pages`);
|
||||
}}
|
||||
></dees-tile-pdf>
|
||||
></dees-thumbnail-pdf>
|
||||
`);
|
||||
}
|
||||
return items;
|
||||
@@ -67,56 +67,56 @@ export const demo = () => {
|
||||
<div class="demo-container">
|
||||
<div class="demo-section">
|
||||
<h3>Single PDF Tile</h3>
|
||||
<dees-tile-pdf
|
||||
<dees-thumbnail-pdf
|
||||
pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"
|
||||
clickable="true"
|
||||
></dees-tile-pdf>
|
||||
></dees-thumbnail-pdf>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>Different Sizes</h3>
|
||||
<div class="preview-row">
|
||||
<div class="preview-label">Small:</div>
|
||||
<dees-tile-pdf
|
||||
<dees-thumbnail-pdf
|
||||
size="small"
|
||||
pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf"
|
||||
clickable="true"
|
||||
></dees-tile-pdf>
|
||||
></dees-thumbnail-pdf>
|
||||
</div>
|
||||
|
||||
<div class="preview-row">
|
||||
<div class="preview-label">Default:</div>
|
||||
<dees-tile-pdf
|
||||
<dees-thumbnail-pdf
|
||||
pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf"
|
||||
clickable="true"
|
||||
></dees-tile-pdf>
|
||||
></dees-thumbnail-pdf>
|
||||
</div>
|
||||
|
||||
<div class="preview-row">
|
||||
<div class="preview-label">Large:</div>
|
||||
<dees-tile-pdf
|
||||
<dees-thumbnail-pdf
|
||||
size="large"
|
||||
pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf"
|
||||
clickable="true"
|
||||
></dees-tile-pdf>
|
||||
></dees-thumbnail-pdf>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>With Label</h3>
|
||||
<dees-tile-pdf
|
||||
<dees-thumbnail-pdf
|
||||
pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"
|
||||
clickable="true"
|
||||
label="Research Paper.pdf"
|
||||
></dees-tile-pdf>
|
||||
></dees-thumbnail-pdf>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>Non-Clickable</h3>
|
||||
<dees-tile-pdf
|
||||
<dees-thumbnail-pdf
|
||||
pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf"
|
||||
clickable="false"
|
||||
></dees-tile-pdf>
|
||||
></dees-thumbnail-pdf>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
@@ -5,11 +5,11 @@ import {
|
||||
type TemplateResult,
|
||||
type CSSResult,
|
||||
} from '@design.estate/dees-element';
|
||||
import { tileBaseStyles } from './styles.js';
|
||||
import { thumbnailBaseStyles } from './styles.js';
|
||||
import '../../00group-utility/dees-icon/dees-icon.js';
|
||||
|
||||
export abstract class DeesTileBase extends DeesElement {
|
||||
public static styles: CSSResult[] = tileBaseStyles as any;
|
||||
export abstract class DeesThumbnailBase extends DeesElement {
|
||||
public static styles: CSSResult[] = thumbnailBaseStyles as any;
|
||||
|
||||
@property({ type: Boolean })
|
||||
accessor clickable: boolean = true;
|
||||
@@ -0,0 +1,2 @@
|
||||
export { DeesThumbnailBase } from './DeesThumbnailBase.js';
|
||||
export { thumbnailBaseStyles } from './styles.js';
|
||||
@@ -1,6 +1,6 @@
|
||||
import { css, cssManager } from '@design.estate/dees-element';
|
||||
|
||||
export const tileBaseStyles = [
|
||||
export const thumbnailBaseStyles = [
|
||||
cssManager.defaultStyles,
|
||||
css`
|
||||
:host {
|
||||
@@ -8,22 +8,22 @@ import {
|
||||
type TemplateResult,
|
||||
type CSSResult,
|
||||
} from '@design.estate/dees-element';
|
||||
import { DeesTileBase } from '../dees-tile-shared/DeesTileBase.js';
|
||||
import { tileBaseStyles } from '../dees-tile-shared/styles.js';
|
||||
import { DeesThumbnailBase } from '../dees-thumbnail-shared/DeesThumbnailBase.js';
|
||||
import { thumbnailBaseStyles } from '../dees-thumbnail-shared/styles.js';
|
||||
import { demo } from './demo.js';
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'dees-tile-video': DeesTileVideo;
|
||||
'dees-thumbnail-video': DeesThumbnailVideo;
|
||||
}
|
||||
}
|
||||
|
||||
@customElement('dees-tile-video')
|
||||
export class DeesTileVideo extends DeesTileBase {
|
||||
@customElement('dees-thumbnail-video')
|
||||
export class DeesThumbnailVideo extends DeesThumbnailBase {
|
||||
public static demo = demo;
|
||||
public static demoGroups = ['Media'];
|
||||
public static styles = [
|
||||
...tileBaseStyles,
|
||||
...thumbnailBaseStyles,
|
||||
css`
|
||||
.video-wrapper {
|
||||
position: relative;
|
||||
@@ -26,54 +26,54 @@ export const demo = () => html`
|
||||
<div class="demo-section">
|
||||
<h3>Video Tiles</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-video
|
||||
<dees-thumbnail-video
|
||||
src="https://www.w3schools.com/html/mov_bbb.mp4"
|
||||
label="bunny.mp4"
|
||||
@tile-click=${(e: CustomEvent) => console.log('Video clicked:', e.detail)}
|
||||
></dees-tile-video>
|
||||
></dees-thumbnail-video>
|
||||
|
||||
<dees-tile-video
|
||||
<dees-thumbnail-video
|
||||
src="https://www.w3schools.com/html/movie.mp4"
|
||||
poster="https://picsum.photos/400/300"
|
||||
label="movie.mp4"
|
||||
></dees-tile-video>
|
||||
></dees-thumbnail-video>
|
||||
|
||||
<dees-tile-video
|
||||
<dees-thumbnail-video
|
||||
src="https://www.w3schools.com/html/mov_bbb.mp4"
|
||||
label="another-video.mp4"
|
||||
></dees-tile-video>
|
||||
></dees-thumbnail-video>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>Size Variants</h3>
|
||||
<div class="tile-row">
|
||||
<dees-tile-video
|
||||
<dees-thumbnail-video
|
||||
size="small"
|
||||
src="https://www.w3schools.com/html/mov_bbb.mp4"
|
||||
label="small.mp4"
|
||||
></dees-tile-video>
|
||||
></dees-thumbnail-video>
|
||||
|
||||
<dees-tile-video
|
||||
<dees-thumbnail-video
|
||||
src="https://www.w3schools.com/html/mov_bbb.mp4"
|
||||
label="default.mp4"
|
||||
></dees-tile-video>
|
||||
></dees-thumbnail-video>
|
||||
|
||||
<dees-tile-video
|
||||
<dees-thumbnail-video
|
||||
size="large"
|
||||
src="https://www.w3schools.com/html/mov_bbb.mp4"
|
||||
label="large.mp4"
|
||||
></dees-tile-video>
|
||||
></dees-thumbnail-video>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<h3>With Poster Image</h3>
|
||||
<dees-tile-video
|
||||
<dees-thumbnail-video
|
||||
src="https://www.w3schools.com/html/movie.mp4"
|
||||
poster="https://picsum.photos/600/400"
|
||||
label="poster-video.mp4"
|
||||
></dees-tile-video>
|
||||
></dees-thumbnail-video>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
@@ -1,2 +0,0 @@
|
||||
export { DeesTileBase } from './DeesTileBase.js';
|
||||
export { tileBaseStyles } from './styles.js';
|
||||
@@ -8,11 +8,11 @@ export * from './dees-preview/index.js';
|
||||
export * from './dees-pdf-shared/index.js';
|
||||
export * from './dees-pdf-viewer/index.js';
|
||||
|
||||
// Tile Components
|
||||
export * from './dees-tile-shared/index.js';
|
||||
export * from './dees-tile-pdf/index.js';
|
||||
export * from './dees-tile-image/index.js';
|
||||
export * from './dees-tile-audio/index.js';
|
||||
export * from './dees-tile-video/index.js';
|
||||
export * from './dees-tile-note/index.js';
|
||||
export * from './dees-tile-folder/index.js';
|
||||
// Thumbnail Components
|
||||
export * from './dees-thumbnail-shared/index.js';
|
||||
export * from './dees-thumbnail-pdf/index.js';
|
||||
export * from './dees-thumbnail-image/index.js';
|
||||
export * from './dees-thumbnail-audio/index.js';
|
||||
export * from './dees-thumbnail-video/index.js';
|
||||
export * from './dees-thumbnail-note/index.js';
|
||||
export * from './dees-thumbnail-folder/index.js';
|
||||
|
||||
@@ -102,8 +102,8 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
left: 0px;
|
||||
height: calc(100% - 24px);
|
||||
width: 240px;
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 99%)', 'hsl(0 0% 7%)')};
|
||||
border-right: 1px solid ${cssManager.bdTheme('hsl(0 0% 91%)', 'hsl(0 0% 13%)')};
|
||||
background: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
|
||||
border-right: 1px solid ${cssManager.bdTheme('#e5e5e5', '#1a1a1a')};
|
||||
font-size: 13px;
|
||||
font-family: 'Geist Sans', sans-serif;
|
||||
z-index: 2;
|
||||
@@ -114,7 +114,7 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
|
||||
.sidebar-header {
|
||||
padding: 20px 16px;
|
||||
border-bottom: 1px solid ${cssManager.bdTheme('hsl(0 0% 91%)', 'hsl(0 0% 13%)')};
|
||||
border-bottom: 1px solid ${cssManager.bdTheme('#e5e5e5', '#1a1a1a')};
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
@@ -127,25 +127,22 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 10px;
|
||||
background: ${cssManager.bdTheme(
|
||||
'linear-gradient(135deg, hsl(215 20% 95%) 0%, hsl(215 20% 90%) 100%)',
|
||||
'linear-gradient(135deg, hsl(215 20% 18%) 0%, hsl(215 20% 14%) 100%)'
|
||||
)};
|
||||
background: ${cssManager.bdTheme('#f0f0f0', '#1a1a1a')};
|
||||
box-shadow: ${cssManager.bdTheme(
|
||||
'0 1px 2px rgb(0 0 0 / 0.05), inset 0 1px 0 rgb(255 255 255 / 0.5)',
|
||||
'0 1px 2px rgb(0 0 0 / 0.2), inset 0 1px 0 rgb(255 255 255 / 0.05)'
|
||||
'0 1px 2px rgb(0 0 0 / 0.05)',
|
||||
'0 1px 2px rgb(0 0 0 / 0.2)'
|
||||
)};
|
||||
}
|
||||
|
||||
.header-icon-wrapper dees-icon {
|
||||
font-size: 18px;
|
||||
color: ${cssManager.bdTheme('hsl(215 20% 40%)', 'hsl(215 20% 70%)')};
|
||||
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
}
|
||||
|
||||
.appName {
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 9%)', 'hsl(0 0% 98%)')};
|
||||
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
@@ -181,7 +178,7 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 50%)', 'hsl(0 0% 50%)')};
|
||||
color: ${cssManager.bdTheme('#737373', '#737373')};
|
||||
padding: 8px 12px 8px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
@@ -199,25 +196,25 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
padding: 10px 12px;
|
||||
cursor: default;
|
||||
transition: all 0.15s ease;
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 65%)')};
|
||||
color: ${cssManager.bdTheme('#525252', '#a3a3a3')};
|
||||
user-select: none;
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.viewTab:hover {
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 0% / 0.04)', 'hsl(0 0% 100% / 0.05)')};
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 90%)')};
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.04)', 'rgba(255, 255, 255, 0.06)')};
|
||||
color: ${cssManager.bdTheme('#262626', '#e5e5e5')};
|
||||
}
|
||||
|
||||
.viewTab:active {
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 0% / 0.06)', 'hsl(0 0% 100% / 0.07)')};
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.06)', 'rgba(255, 255, 255, 0.08)')};
|
||||
transform: scale(0.99);
|
||||
}
|
||||
|
||||
.viewTab.selected {
|
||||
background: ${cssManager.bdTheme('hsl(215 25% 95%)', 'hsl(215 20% 15%)')};
|
||||
color: ${cssManager.bdTheme('hsl(215 25% 30%)', 'hsl(215 25% 85%)')};
|
||||
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.06)', 'rgba(255, 255, 255, 0.08)')};
|
||||
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@@ -229,7 +226,7 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
bottom: 8px;
|
||||
width: 3px;
|
||||
border-radius: 0 2px 2px 0;
|
||||
background: ${cssManager.bdTheme('hsl(215 70% 50%)', 'hsl(215 70% 60%)')};
|
||||
background: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
}
|
||||
|
||||
.viewTab dees-icon {
|
||||
@@ -243,8 +240,8 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
}
|
||||
|
||||
.viewTab.selected dees-icon {
|
||||
opacity: 0.9;
|
||||
color: ${cssManager.bdTheme('hsl(215 70% 45%)', 'hsl(215 70% 65%)')};
|
||||
opacity: 1;
|
||||
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
|
||||
}
|
||||
|
||||
.viewTab span {
|
||||
@@ -256,7 +253,7 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
|
||||
.appActions {
|
||||
padding: 12px 8px;
|
||||
border-top: 1px solid ${cssManager.bdTheme('hsl(0 0% 91%)', 'hsl(0 0% 13%)')};
|
||||
border-top: 1px solid ${cssManager.bdTheme('#e5e5e5', '#1a1a1a')};
|
||||
}
|
||||
|
||||
.action {
|
||||
@@ -267,7 +264,7 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
border-radius: 8px;
|
||||
cursor: default;
|
||||
transition: all 0.15s ease;
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 65%)')};
|
||||
color: ${cssManager.bdTheme('#525252', '#a3a3a3')};
|
||||
}
|
||||
|
||||
.action:hover {
|
||||
@@ -295,7 +292,7 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
bottom: 24px;
|
||||
width: calc(100% - 240px);
|
||||
overflow: auto;
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 97%)', 'hsl(0 0% 5%)')};
|
||||
background: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
|
||||
overscroll-behavior: contain;
|
||||
}
|
||||
|
||||
@@ -335,14 +332,14 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
}
|
||||
|
||||
.controlbar {
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 45%)', 'hsl(0 0% 55%)')};
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 60%)')};
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
width: 100%;
|
||||
height: 24px;
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 100%)', 'hsl(0 0% 3.9%)')};
|
||||
border-top: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')};
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 94%)', 'hsl(0 0% 6%)')};
|
||||
border-top: 1px solid ${cssManager.bdTheme('hsl(0 0% 85%)', 'hsl(0 0% 15%)')};
|
||||
z-index: 11;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
@@ -361,9 +358,9 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
height: 100%;
|
||||
white-space: nowrap;
|
||||
cursor: default;
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 55%)', 'hsl(0 0% 50%)')};
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 60%)')};
|
||||
transition: all 0.15s ease;
|
||||
border-left: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')};
|
||||
border-left: 1px solid ${cssManager.bdTheme('hsl(0 0% 80%)', 'hsl(0 0% 20%)')};
|
||||
|
||||
}
|
||||
|
||||
@@ -372,8 +369,8 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
}
|
||||
|
||||
.control:hover {
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 0% / 0.04)', 'hsl(0 0% 100% / 0.06)')};
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 20%)', 'hsl(0 0% 90%)')};
|
||||
background: ${cssManager.bdTheme('hsl(0 0% 88%)', 'hsl(0 0% 12%)')};
|
||||
color: ${cssManager.bdTheme('hsl(0 0% 20%)', 'hsl(0 0% 80%)')};
|
||||
}
|
||||
|
||||
.control dees-icon {
|
||||
@@ -381,11 +378,11 @@ export class DeesSimpleAppDash extends DeesElement {
|
||||
}
|
||||
|
||||
.control.status-connected dees-icon {
|
||||
color: hsl(142 70% 50%);
|
||||
color: ${cssManager.bdTheme('hsl(142 70% 35%)', 'hsl(142 70% 50%)')};
|
||||
}
|
||||
|
||||
.control.status-terminal dees-icon {
|
||||
color: hsl(45 90% 55%);
|
||||
color: ${cssManager.bdTheme('hsl(38 92% 45%)', 'hsl(38 92% 55%)')};
|
||||
}
|
||||
|
||||
/* Global Message Banners */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { css, type CSSResult } from '@design.estate/dees-element';
|
||||
import { css, cssManager, unsafeCSS, type CSSResult } from '@design.estate/dees-element';
|
||||
|
||||
// ============================================
|
||||
// Theme Token Type Definitions
|
||||
@@ -11,6 +11,7 @@ export interface IThemeColors {
|
||||
textPrimary: string;
|
||||
textSecondary: string;
|
||||
textMuted: string;
|
||||
textWarm: string;
|
||||
borderDefault: string;
|
||||
borderSubtle: string;
|
||||
borderStrong: string;
|
||||
@@ -18,6 +19,14 @@ export interface IThemeColors {
|
||||
accentSuccess: string;
|
||||
accentWarning: string;
|
||||
accentError: string;
|
||||
badgeDefaultBg: string;
|
||||
badgeDefaultFg: string;
|
||||
badgeSuccessBg: string;
|
||||
badgeSuccessFg: string;
|
||||
badgeWarningBg: string;
|
||||
badgeWarningFg: string;
|
||||
badgeErrorBg: string;
|
||||
badgeErrorFg: string;
|
||||
}
|
||||
|
||||
export interface IThemeSpacing {
|
||||
@@ -79,34 +88,52 @@ export interface ITheme {
|
||||
export const themeDefaults: ITheme = {
|
||||
colors: {
|
||||
light: {
|
||||
bgPrimary: '#ffffff',
|
||||
bgSecondary: '#fafafa',
|
||||
bgTertiary: '#f4f4f5',
|
||||
textPrimary: '#09090b',
|
||||
textSecondary: '#374151',
|
||||
textMuted: '#71717a',
|
||||
borderDefault: '#e5e7eb',
|
||||
borderSubtle: '#f4f4f5',
|
||||
borderStrong: '#d1d5db',
|
||||
bgPrimary: 'hsl(0 0% 100%)', // #ffffff
|
||||
bgSecondary: 'hsl(0 0% 98%)', // #fafafa
|
||||
bgTertiary: 'hsl(0 0% 96%)', // #f5f5f5
|
||||
textPrimary: 'hsl(0 0% 3.9%)', // #0a0a0a
|
||||
textSecondary: 'hsl(0 0% 20%)', // #333333
|
||||
textMuted: 'hsl(0 0% 45%)', // #737373
|
||||
textWarm: '#78716c', // warm stone
|
||||
borderDefault: 'hsl(0 0% 89.8%)', // #e5e5e5
|
||||
borderSubtle: 'hsl(0 0% 93%)', // #ededed
|
||||
borderStrong: 'hsl(0 0% 80%)', // #cccccc
|
||||
accentPrimary: '#3b82f6',
|
||||
accentSuccess: '#22c55e',
|
||||
accentWarning: '#f59e0b',
|
||||
accentError: '#ef4444',
|
||||
badgeDefaultBg: '#f4f4f5',
|
||||
badgeDefaultFg: '#3f3f46',
|
||||
badgeSuccessBg: '#dcfce7',
|
||||
badgeSuccessFg: '#166534',
|
||||
badgeWarningBg: '#fef3c7',
|
||||
badgeWarningFg: '#92400e',
|
||||
badgeErrorBg: '#fee2e2',
|
||||
badgeErrorFg: '#991b1b',
|
||||
},
|
||||
dark: {
|
||||
bgPrimary: '#09090b',
|
||||
bgSecondary: '#0a0a0a',
|
||||
bgTertiary: '#18181b',
|
||||
textPrimary: '#fafafa',
|
||||
textSecondary: '#d4d4d8',
|
||||
textMuted: '#a1a1aa',
|
||||
borderDefault: '#27272a',
|
||||
borderSubtle: '#1a1a1a',
|
||||
borderStrong: '#3f3f46',
|
||||
bgPrimary: 'hsl(0 0% 3.9%)', // #0a0a0a
|
||||
bgSecondary: 'hsl(0 0% 3.9%)', // #0a0a0a (matches sidebar/tile in dark)
|
||||
bgTertiary: 'hsl(0 0% 7%)', // #121212
|
||||
textPrimary: 'hsl(0 0% 98%)', // #fafafa
|
||||
textSecondary: 'hsl(0 0% 63.9%)', // #a3a3a3
|
||||
textMuted: 'hsl(0 0% 55%)', // #8c8c8c
|
||||
textWarm: '#b5a99a', // warm stone
|
||||
borderDefault: 'hsl(0 0% 14.9%)', // #262626
|
||||
borderSubtle: 'hsl(0 0% 11%)', // #1c1c1c
|
||||
borderStrong: 'hsl(0 0% 20%)', // #333333
|
||||
accentPrimary: '#3b82f6',
|
||||
accentSuccess: '#22c55e',
|
||||
accentWarning: '#f59e0b',
|
||||
accentError: '#ef4444',
|
||||
badgeDefaultBg: '#27272a',
|
||||
badgeDefaultFg: '#a1a1aa',
|
||||
badgeSuccessBg: '#14532d',
|
||||
badgeSuccessFg: '#4ade80',
|
||||
badgeWarningBg: '#451a03',
|
||||
badgeWarningFg: '#fbbf24',
|
||||
badgeErrorBg: '#450a0a',
|
||||
badgeErrorFg: '#f87171',
|
||||
},
|
||||
},
|
||||
spacing: {
|
||||
@@ -146,13 +173,17 @@ export const themeDefaults: ITheme = {
|
||||
},
|
||||
};
|
||||
|
||||
// Shorthand aliases for CSS template usage
|
||||
const l = themeDefaults.colors.light;
|
||||
const d = themeDefaults.colors.dark;
|
||||
|
||||
// ============================================
|
||||
// CSS Block for Component Import
|
||||
// ============================================
|
||||
|
||||
/**
|
||||
* Default theme styles to be imported into every component's static styles array.
|
||||
* Provides CSS custom properties for spacing, radius, shadows, transitions, and control heights.
|
||||
* Provides CSS custom properties for colors, spacing, radius, shadows, transitions, and control heights.
|
||||
*
|
||||
* Usage:
|
||||
* ```typescript
|
||||
@@ -170,6 +201,93 @@ export const themeDefaults: ITheme = {
|
||||
*/
|
||||
export const themeDefaultStyles: CSSResult = css`
|
||||
:host {
|
||||
/* ========================================
|
||||
* Colors — Background (from themeDefaults)
|
||||
* ======================================== */
|
||||
--dees-color-bg-primary: ${cssManager.bdTheme(l.bgPrimary, d.bgPrimary)};
|
||||
--dees-color-bg-secondary: ${cssManager.bdTheme(l.bgSecondary, d.bgSecondary)};
|
||||
--dees-color-bg-tertiary: ${cssManager.bdTheme(l.bgTertiary, d.bgTertiary)};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Text (from themeDefaults)
|
||||
* ======================================== */
|
||||
--dees-color-text-primary: ${cssManager.bdTheme(l.textPrimary, d.textPrimary)};
|
||||
--dees-color-text-secondary: ${cssManager.bdTheme(l.textSecondary, d.textSecondary)};
|
||||
--dees-color-text-muted: ${cssManager.bdTheme(l.textMuted, d.textMuted)};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Border (from themeDefaults)
|
||||
* ======================================== */
|
||||
--dees-color-border-default: ${cssManager.bdTheme(l.borderDefault, d.borderDefault)};
|
||||
--dees-color-border-subtle: ${cssManager.bdTheme(l.borderSubtle, d.borderSubtle)};
|
||||
--dees-color-border-strong: ${cssManager.bdTheme(l.borderStrong, d.borderStrong)};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Warm Text (from themeDefaults)
|
||||
* ======================================== */
|
||||
--dees-color-text-warm: ${cssManager.bdTheme(l.textWarm, d.textWarm)};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Accent (from themeDefaults)
|
||||
* ======================================== */
|
||||
--dees-color-accent-primary: ${cssManager.bdTheme(l.accentPrimary, d.accentPrimary)};
|
||||
--dees-color-accent-success: ${cssManager.bdTheme(l.accentSuccess, d.accentSuccess)};
|
||||
--dees-color-accent-warning: ${cssManager.bdTheme(l.accentWarning, d.accentWarning)};
|
||||
--dees-color-accent-error: ${cssManager.bdTheme(l.accentError, d.accentError)};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Badge (from themeDefaults)
|
||||
* ======================================== */
|
||||
--dees-color-badge-default-bg: ${cssManager.bdTheme(l.badgeDefaultBg, d.badgeDefaultBg)};
|
||||
--dees-color-badge-default-fg: ${cssManager.bdTheme(l.badgeDefaultFg, d.badgeDefaultFg)};
|
||||
--dees-color-badge-success-bg: ${cssManager.bdTheme(l.badgeSuccessBg, d.badgeSuccessBg)};
|
||||
--dees-color-badge-success-fg: ${cssManager.bdTheme(l.badgeSuccessFg, d.badgeSuccessFg)};
|
||||
--dees-color-badge-warning-bg: ${cssManager.bdTheme(l.badgeWarningBg, d.badgeWarningBg)};
|
||||
--dees-color-badge-warning-fg: ${cssManager.bdTheme(l.badgeWarningFg, d.badgeWarningFg)};
|
||||
--dees-color-badge-error-bg: ${cssManager.bdTheme(l.badgeErrorBg, d.badgeErrorBg)};
|
||||
--dees-color-badge-error-fg: ${cssManager.bdTheme(l.badgeErrorFg, d.badgeErrorFg)};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Interactive States
|
||||
* ======================================== */
|
||||
--dees-color-hover: ${cssManager.bdTheme('rgba(0, 0, 0, 0.04)', 'rgba(255, 255, 255, 0.06)')};
|
||||
--dees-color-active: ${cssManager.bdTheme('rgba(0, 0, 0, 0.06)', 'rgba(255, 255, 255, 0.08)')};
|
||||
--dees-color-pressed: ${cssManager.bdTheme('rgba(0, 0, 0, 0.08)', 'rgba(255, 255, 255, 0.12)')};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Focus Ring
|
||||
* ======================================== */
|
||||
--dees-color-focus-ring: ${cssManager.bdTheme('rgba(59, 130, 246, 0.4)', 'rgba(59, 130, 246, 0.4)')};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Tooltip (inverted contrast)
|
||||
* ======================================== */
|
||||
--dees-color-tooltip-bg: ${cssManager.bdTheme('#18181b', '#fafafa')};
|
||||
--dees-color-tooltip-fg: ${cssManager.bdTheme('#fafafa', '#18181b')};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Link
|
||||
* ======================================== */
|
||||
--dees-color-link: ${cssManager.bdTheme('#3b82f6', '#60a5fa')};
|
||||
--dees-color-link-hover: ${cssManager.bdTheme('#2563eb', '#93bbfd')};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Code
|
||||
* ======================================== */
|
||||
--dees-color-code-bg: ${cssManager.bdTheme('rgba(0, 0, 0, 0.06)', 'rgba(255, 255, 255, 0.1)')};
|
||||
--dees-color-code-block-bg: ${cssManager.bdTheme('#f4f4f5', '#18181b')};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Selection
|
||||
* ======================================== */
|
||||
--dees-color-selection: ${cssManager.bdTheme('rgba(59, 130, 246, 0.2)', 'rgba(59, 130, 246, 0.3)')};
|
||||
|
||||
/* ========================================
|
||||
* Colors — Scrollbar
|
||||
* ======================================== */
|
||||
--dees-color-scrollbar-thumb: ${cssManager.bdTheme('rgba(0, 0, 0, 0.15)', 'rgba(255, 255, 255, 0.15)')};
|
||||
--dees-color-scrollbar-thumb-hover: ${cssManager.bdTheme('rgba(0, 0, 0, 0.25)', 'rgba(255, 255, 255, 0.25)')};
|
||||
|
||||
/* ========================================
|
||||
* Spacing Scale
|
||||
* ======================================== */
|
||||
|
||||
Reference in New Issue
Block a user