diff --git a/changelog.md b/changelog.md
index ee17659..62755f7 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,16 @@
# Changelog
+## 2025-12-08 - 3.2.0 - feat(dees-simple-appdash,dees-simple-login,dees-terminal)
+Revamp UI: dashboard & login styling, standardize icons to Lucide, and add terminal background/config
+
+- Standardize icon usage to Lucide prefixes in dees-simple-appdash; add fallback handling for legacy icon names
+- Revamped dees-simple-appdash sidebar: updated spacing, typography, header icon wrapper, scrollbar styling, section labels, hover/selected states, and visual indicators
+- Change 'Logout' label to 'Sign out' in dees-simple-appdash and add explicit status classes for controlbar (connected, terminal)
+- Improve terminal UX: smoother launch/close animations, updated shadow and sizing logic in dees-simple-appdash
+- Add background property to dees-terminal, sync it to a CSS variable and apply it to xterm theme for configurable terminal background
+- Redesign dees-simple-login: new header/subheader, card layout, spacing, and updated submit text to 'Sign in'
+- Bump devDependency @git.zone/tswatch to ^2.3.5
+
## 2025-12-08 - 3.1.2 - fix(DeesAppuiMainmenu, DeesAppuiSecondarymenu)
Add position: relative to main and secondary app UI menus to fix positioning of overlays and tooltips
diff --git a/package.json b/package.json
index 2993102..874a5e7 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,7 @@
"@git.zone/tsbuild": "^3.1.2",
"@git.zone/tsbundle": "^2.6.3",
"@git.zone/tstest": "^3.1.3",
- "@git.zone/tswatch": "^2.3.2",
+ "@git.zone/tswatch": "^2.3.5",
"@push.rocks/projectinfo": "^5.0.2",
"@push.rocks/tapbundle": "^6.0.3",
"@types/node": "^24.10.1"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6731b79..438c048 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -98,10 +98,10 @@ importers:
version: 2.6.3
'@git.zone/tstest':
specifier: ^3.1.3
- version: 3.1.3(@push.rocks/smartserve@1.3.0)(socks@2.8.7)(typescript@5.9.3)
+ version: 3.1.3(@push.rocks/smartserve@1.4.0)(socks@2.8.7)(typescript@5.9.3)
'@git.zone/tswatch':
- specifier: ^2.3.2
- version: 2.3.2(@tiptap/pm@2.27.1)
+ specifier: ^2.3.5
+ version: 2.3.5(@tiptap/pm@2.27.1)
'@push.rocks/projectinfo':
specifier: ^5.0.2
version: 5.0.2
@@ -126,8 +126,8 @@ packages:
'@api.global/typedserver@3.0.80':
resolution: {integrity: sha512-dcp0oXsjBL+XdFg1wUUP08uJQid5bQ0Yv3V3Y3lnI2QCbat0FU+Tsb0TZRnZ4+P150Vj/ITBqJUgDzFsF34grA==}
- '@api.global/typedserver@7.11.0':
- resolution: {integrity: sha512-DHB3oGRgiLbAeRRFAlXIbjvNACw9YqsfOtLVCPq0nUcGMGSsUQ4SNrJ5OGk9GhVF8bl/jn8SF8w08rnApmZ0uw==}
+ '@api.global/typedserver@7.11.1':
+ resolution: {integrity: sha512-1vQUJ2/DszDFHVkCmqqBy/qNiIP/jltFN3KxHtoNLxjbdBZYfw1Zd1Odjs6YSPalAD0p8wQ/alJblJEAewNQVg==}
'@api.global/typedsocket@3.1.1':
resolution: {integrity: sha512-Wkz3NlhmfdZMKqXXI2c2dMtGGmSmhdOegZiziL+9b2mqPYdc7Gd8AZRdEOKvbSoIvc9G22/5BEadIWHrfq66TA==}
@@ -316,6 +316,9 @@ packages:
'@borewit/text-codec@0.1.1':
resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==}
+ '@cfworker/json-schema@4.1.1':
+ resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==}
+
'@cloudflare/workers-types@4.20251205.0':
resolution: {integrity: sha512-7pup7fYkuQW5XD8RUS/vkxF9SXlrGyCXuZ4ro3uVQvca/GTeSa+8bZ8T4wbq1Aea5lmLIGSlKbhl2msME7bRBA==}
@@ -329,8 +332,8 @@ packages:
'@dabh/diagnostics@2.0.8':
resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==}
- '@design.estate/dees-catalog@2.0.7':
- resolution: {integrity: sha512-rshv71LqA2PXaEEf6C1/hv6Yu2ovRuWaZhdnUznCDpjdYgxBq7PHkiHCNvg/m6wJ9Ue/03HcuuPqtj2bksgAag==}
+ '@design.estate/dees-catalog@3.1.2':
+ resolution: {integrity: sha512-T4ZhoZzl6NAWGhrz00MDFla5syeMz53euZ+QcBftRMmHuqPHDU/JlBi+K2SmILtnRfWH/lGYWBKugYop6q0chg==}
'@design.estate/dees-comms@1.0.30':
resolution: {integrity: sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==}
@@ -552,8 +555,8 @@ packages:
resolution: {integrity: sha512-t+/cKV21JHK8X7NGAmihs5M/eMm+V+jn4R5rzfwGG97WJFAcP5qE1Os9VYtyZw3tx/NZXA2yA4abo/ELluTuRA==}
hasBin: true
- '@git.zone/tswatch@2.3.2':
- resolution: {integrity: sha512-M4B4D7BlfGb3ssgMHFMHc+hhEmxY6WzNd87ihuLReXMD+twjMA99u2hyAvAnboa3lERlixvHz/nN+rdbGH5VlA==}
+ '@git.zone/tswatch@2.3.5':
+ resolution: {integrity: sha512-wYekG7Q/wg5uptXHPHhVi7dHq19QnLoevQpcpAzF6hMiNbOozN3+4zxOktyJBl6EHUYcFvHXA4fZ4bkJpo5TcA==}
hasBin: true
'@hapi/bourne@3.0.0':
@@ -981,8 +984,8 @@ packages:
'@push.rocks/smarts3@3.0.3':
resolution: {integrity: sha512-Y9nXMwurthJ9Z7yi0RwjhPFUC58aY8Mhia8kFo6Xj1tBM4LE8Oxg/ydejF7otHqQGr3QyqV5C4YrDEG17rUuzg==}
- '@push.rocks/smartserve@1.3.0':
- resolution: {integrity: sha512-4ZR9uKVWXVAPzU5wtCQ1mA9jNmOlUl3oGr50EceLT6803UwbNcst7Ek/BhzSaZ0qb2pz0jO5T/V+icgvZ1/5ww==}
+ '@push.rocks/smartserve@1.4.0':
+ resolution: {integrity: sha512-cEoXZQSBX3pOv9AyhxRPkrMAWzs2XQhTBmW95BFtTSNzZdji0XgqUu92p7iuF+NVuTFX1QZ8+dbCClLCoRRW7g==}
'@push.rocks/smartshell@3.3.0':
resolution: {integrity: sha512-m0w618H6YBs+vXGz1CgS4nPi5CUAnqRtckcS9/koGwfcIx1IpjqmiP47BoCTbdgcv0IPUxQVBG1IXTHPuZ8Z5g==}
@@ -1020,8 +1023,8 @@ packages:
'@push.rocks/smartversion@3.0.5':
resolution: {integrity: sha512-8MZSo1yqyaKxKq0Q5N188l4un++9GFWVbhCAX5mXJwewZHn97ujffTeL+eOQYpWFTEpUhaq1QhL4NhqObBCt1Q==}
- '@push.rocks/smartwatch@5.1.0':
- resolution: {integrity: sha512-vf4yT8F8V+vstnrr0sh64rGF/8Z8dZlLR4T95KcVtm7F0H3dKxLcvZ3HT0xayw0gQow8+CCtDdts9Wgq5ipJTw==}
+ '@push.rocks/smartwatch@6.1.1':
+ resolution: {integrity: sha512-wmhLKu9bdpvRcjOfitJOi4jsNKD7S2hVlVq6fAv3IhB2ZbRlSB+Hai4DwOlrdUZaWrg+dFIZU+/ifTOozOPiMg==}
engines: {node: '>=20.0.0'}
'@push.rocks/smartxml@2.0.0':
@@ -4656,11 +4659,11 @@ snapshots:
'@push.rocks/webrequest': 3.0.37
'@push.rocks/webstream': 1.0.10
- '@api.global/typedserver@3.0.80(@push.rocks/smartserve@1.3.0)':
+ '@api.global/typedserver@3.0.80(@push.rocks/smartserve@1.4.0)':
dependencies:
'@api.global/typedrequest': 3.2.5
'@api.global/typedrequest-interfaces': 3.0.19
- '@api.global/typedsocket': 3.1.1(@push.rocks/smartserve@1.3.0)
+ '@api.global/typedsocket': 3.1.1(@push.rocks/smartserve@1.4.0)
'@cloudflare/workers-types': 4.20251205.0
'@design.estate/dees-comms': 1.0.30
'@push.rocks/lik': 6.2.2
@@ -4704,13 +4707,13 @@ snapshots:
- utf-8-validate
- vue
- '@api.global/typedserver@7.11.0(@tiptap/pm@2.27.1)':
+ '@api.global/typedserver@7.11.1(@tiptap/pm@2.27.1)':
dependencies:
'@api.global/typedrequest': 3.2.5
'@api.global/typedrequest-interfaces': 3.0.19
- '@api.global/typedsocket': 4.1.0(@push.rocks/smartserve@1.3.0)
+ '@api.global/typedsocket': 4.1.0(@push.rocks/smartserve@1.4.0)
'@cloudflare/workers-types': 4.20251205.0
- '@design.estate/dees-catalog': 2.0.7(@tiptap/pm@2.27.1)
+ '@design.estate/dees-catalog': 3.1.2(@tiptap/pm@2.27.1)
'@design.estate/dees-comms': 1.0.30
'@push.rocks/lik': 6.2.2
'@push.rocks/smartdelay': 3.0.5
@@ -4731,11 +4734,11 @@ snapshots:
'@push.rocks/smartpromise': 4.2.3
'@push.rocks/smartrequest': 5.0.1
'@push.rocks/smartrx': 3.0.10
- '@push.rocks/smartserve': 1.3.0
+ '@push.rocks/smartserve': 1.4.0
'@push.rocks/smartsitemap': 2.0.4
'@push.rocks/smartstream': 3.2.5
'@push.rocks/smarttime': 4.1.1
- '@push.rocks/smartwatch': 5.1.0
+ '@push.rocks/smartwatch': 6.1.1
'@push.rocks/taskbuffer': 3.5.0
'@push.rocks/webrequest': 4.0.1
'@push.rocks/webstore': 2.0.20
@@ -4750,7 +4753,7 @@ snapshots:
- utf-8-validate
- vue
- '@api.global/typedsocket@3.1.1(@push.rocks/smartserve@1.3.0)':
+ '@api.global/typedsocket@3.1.1(@push.rocks/smartserve@1.4.0)':
dependencies:
'@api.global/typedrequest': 3.2.5
'@api.global/typedrequest-interfaces': 3.0.19
@@ -4761,7 +4764,7 @@ snapshots:
'@push.rocks/smartstring': 4.1.0
'@push.rocks/smarturl': 3.1.0
optionalDependencies:
- '@push.rocks/smartserve': 1.3.0
+ '@push.rocks/smartserve': 1.4.0
transitivePeerDependencies:
- '@nuxt/kit'
- bufferutil
@@ -4770,7 +4773,7 @@ snapshots:
- utf-8-validate
- vue
- '@api.global/typedsocket@4.1.0(@push.rocks/smartserve@1.3.0)':
+ '@api.global/typedsocket@4.1.0(@push.rocks/smartserve@1.4.0)':
dependencies:
'@api.global/typedrequest': 3.2.5
'@api.global/typedrequest-interfaces': 3.0.19
@@ -4779,7 +4782,7 @@ snapshots:
'@push.rocks/smartjson': 5.2.0
'@push.rocks/smartpromise': 4.2.3
'@push.rocks/smartrx': 3.0.10
- '@push.rocks/smartserve': 1.3.0
+ '@push.rocks/smartserve': 1.4.0
'@push.rocks/smartstring': 4.1.0
'@push.rocks/smarturl': 3.1.0
@@ -5274,6 +5277,8 @@ snapshots:
'@borewit/text-codec@0.1.1': {}
+ '@cfworker/json-schema@4.1.1': {}
+
'@cloudflare/workers-types@4.20251205.0': {}
'@colors/colors@1.6.0': {}
@@ -5288,7 +5293,7 @@ snapshots:
enabled: 2.0.0
kuler: 2.0.0
- '@design.estate/dees-catalog@2.0.7(@tiptap/pm@2.27.1)':
+ '@design.estate/dees-catalog@3.1.2(@tiptap/pm@2.27.1)':
dependencies:
'@design.estate/dees-domtools': 2.3.6
'@design.estate/dees-element': 2.1.3
@@ -5564,9 +5569,9 @@ snapshots:
'@push.rocks/smartshell': 3.3.0
tsx: 4.21.0
- '@git.zone/tstest@3.1.3(@push.rocks/smartserve@1.3.0)(socks@2.8.7)(typescript@5.9.3)':
+ '@git.zone/tstest@3.1.3(@push.rocks/smartserve@1.4.0)(socks@2.8.7)(typescript@5.9.3)':
dependencies:
- '@api.global/typedserver': 3.0.80(@push.rocks/smartserve@1.3.0)
+ '@api.global/typedserver': 3.0.80(@push.rocks/smartserve@1.4.0)
'@git.zone/tsbundle': 2.6.3
'@git.zone/tsrun': 2.0.0
'@push.rocks/consolecolor': 2.0.3
@@ -5613,9 +5618,9 @@ snapshots:
- utf-8-validate
- vue
- '@git.zone/tswatch@2.3.2(@tiptap/pm@2.27.1)':
+ '@git.zone/tswatch@2.3.5(@tiptap/pm@2.27.1)':
dependencies:
- '@api.global/typedserver': 7.11.0(@tiptap/pm@2.27.1)
+ '@api.global/typedserver': 7.11.1(@tiptap/pm@2.27.1)
'@git.zone/tsbundle': 2.6.3
'@git.zone/tsrun': 2.0.0
'@push.rocks/early': 4.0.4
@@ -5626,7 +5631,7 @@ snapshots:
'@push.rocks/smartlog': 3.1.10
'@push.rocks/smartlog-destination-local': 9.0.2
'@push.rocks/smartshell': 3.3.0
- '@push.rocks/smartwatch': 5.1.0
+ '@push.rocks/smartwatch': 6.1.1
'@push.rocks/taskbuffer': 3.5.0
transitivePeerDependencies:
- '@nuxt/kit'
@@ -6555,9 +6560,10 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@push.rocks/smartserve@1.3.0':
+ '@push.rocks/smartserve@1.4.0':
dependencies:
'@api.global/typedrequest': 3.2.5
+ '@cfworker/json-schema': 4.1.1
'@push.rocks/lik': 6.2.2
'@push.rocks/smartenv': 6.0.0
'@push.rocks/smartlog': 3.1.10
@@ -6588,7 +6594,7 @@ snapshots:
'@push.rocks/smartsocket@2.1.0':
dependencies:
'@api.global/typedrequest-interfaces': 3.0.19
- '@api.global/typedserver': 3.0.80(@push.rocks/smartserve@1.3.0)
+ '@api.global/typedserver': 3.0.80(@push.rocks/smartserve@1.4.0)
'@push.rocks/isohash': 2.0.1
'@push.rocks/isounique': 1.0.5
'@push.rocks/lik': 6.2.2
@@ -6672,7 +6678,7 @@ snapshots:
'@types/semver': 7.7.1
semver: 7.7.3
- '@push.rocks/smartwatch@5.1.0':
+ '@push.rocks/smartwatch@6.1.1':
dependencies:
'@push.rocks/lik': 6.2.2
'@push.rocks/smartenv': 6.0.0
@@ -6715,20 +6721,17 @@ snapshots:
transitivePeerDependencies:
- '@aws-sdk/credential-providers'
- '@mongodb-js/zstd'
- - '@nuxt/kit'
- aws-crt
- bare-abort-controller
- bufferutil
- gcp-metadata
- kerberos
- mongodb-client-encryption
- - react
- react-native-b4a
- snappy
- socks
- supports-color
- utf-8-validate
- - vue
'@push.rocks/taskbuffer@3.5.0':
dependencies:
diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts
index 59952c7..6a4db6b 100644
--- a/ts_web/00_commitinfo_data.ts
+++ b/ts_web/00_commitinfo_data.ts
@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@design.estate/dees-catalog',
- version: '3.1.2',
+ version: '3.2.0',
description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
}
diff --git a/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.demo.ts b/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.demo.ts
index e4a8f1c..0148ec2 100644
--- a/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.demo.ts
+++ b/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.demo.ts
@@ -266,17 +266,17 @@ export const demoFunc = () => html`
.viewTabs=${[
{
name: 'Dashboard',
- iconName: 'home',
+ iconName: 'lucide:home',
element: DemoViewDashboard,
},
{
name: 'Analytics',
- iconName: 'lineChart',
+ iconName: 'lucide:lineChart',
element: DemoViewAnalytics,
},
{
name: 'Settings',
- iconName: 'settings',
+ iconName: 'lucide:settings',
element: DemoViewSettings,
}
] as IView[]}
diff --git a/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts b/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts
index b0c5a63..3b603d7 100644
--- a/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts
+++ b/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts
@@ -51,7 +51,7 @@ export class DeesSimpleAppDash extends DeesElement {
cssManager.defaultStyles,
css`
:host {
- color: ${cssManager.bdTheme('#333', '#ccc')};
+ color: ${cssManager.bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 90%)')};
user-select: none;
display: block;
overflow: hidden;
@@ -75,109 +75,188 @@ export class DeesSimpleAppDash extends DeesElement {
left: 0px;
height: calc(100% - 24px);
width: 240px;
- background: ${cssManager.bdTheme('#fafafa', '#000')};
- border-right: 1px solid ${cssManager.bdTheme('#e0e0e0', '#202020')};
- font-size: 12px;
+ 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%)')};
+ font-size: 13px;
font-family: 'Geist Sans', sans-serif;
z-index: 2;
display: grid;
- grid-template-rows: auto min-content;
+ grid-template-rows: auto 1fr min-content;
overflow: hidden;
}
.sidebar-header {
- padding: 16px 12px;
- border-bottom: 1px solid ${cssManager.bdTheme('#e0e0e0', '#202020')};
+ padding: 20px 16px;
+ border-bottom: 1px solid ${cssManager.bdTheme('hsl(0 0% 91%)', 'hsl(0 0% 13%)')};
display: flex;
align-items: center;
- gap: 8px;
+ gap: 12px;
}
-
+
+ .header-icon-wrapper {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ 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%)'
+ )};
+ 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)'
+ )};
+ }
+
+ .header-icon-wrapper dees-icon {
+ font-size: 18px;
+ color: ${cssManager.bdTheme('hsl(215 20% 40%)', 'hsl(215 20% 70%)')};
+ }
+
.appName {
- font-size: 14px;
+ font-size: 15px;
font-weight: 600;
- color: ${cssManager.bdTheme('#000', '#fff')};
+ color: ${cssManager.bdTheme('hsl(0 0% 9%)', 'hsl(0 0% 98%)')};
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
+ letter-spacing: -0.02em;
}
-
+
.viewTabs-container {
- flex: 1;
overflow-y: auto;
- padding: 4px 0;
+ padding: 12px 8px;
+ scrollbar-width: thin;
+ scrollbar-color: ${cssManager.bdTheme('hsl(0 0% 85%)', 'hsl(0 0% 20%)')} transparent;
+ }
+
+ .viewTabs-container::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ .viewTabs-container::-webkit-scrollbar-track {
+ background: transparent;
+ }
+
+ .viewTabs-container::-webkit-scrollbar-thumb {
+ background: ${cssManager.bdTheme('hsl(0 0% 85%)', 'hsl(0 0% 20%)')};
+ border-radius: 3px;
+ }
+
+ .viewTabs-container::-webkit-scrollbar-thumb:hover {
+ background: ${cssManager.bdTheme('hsl(0 0% 75%)', 'hsl(0 0% 30%)')};
+ }
+
+ .section-label {
+ font-size: 11px;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ color: ${cssManager.bdTheme('hsl(0 0% 50%)', 'hsl(0 0% 50%)')};
+ padding: 8px 12px 8px;
+ margin-bottom: 4px;
}
.viewTabs {
display: flex;
flex-direction: column;
+ gap: 2px;
}
.viewTab {
display: flex;
align-items: center;
- gap: 8px;
- padding: 8px 12px;
+ gap: 10px;
+ padding: 10px 12px;
cursor: default;
- transition: background 0.1s;
- color: ${cssManager.bdTheme('#333', '#ccc')};
+ transition: all 0.15s ease;
+ color: ${cssManager.bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 65%)')};
user-select: none;
position: relative;
+ border-radius: 8px;
}
.viewTab:hover {
- background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.04)', 'rgba(255, 255, 255, 0.08)')};
+ 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%)')};
}
.viewTab:active {
- background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.08)', 'rgba(255, 255, 255, 0.12)')};
+ background: ${cssManager.bdTheme('hsl(0 0% 0% / 0.06)', 'hsl(0 0% 100% / 0.07)')};
+ transform: scale(0.99);
}
-
+
.viewTab.selected {
- background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.08)', 'rgba(255, 255, 255, 0.12)')};
- color: ${cssManager.bdTheme('#000', '#fff')};
+ background: ${cssManager.bdTheme('hsl(215 25% 95%)', 'hsl(215 20% 15%)')};
+ color: ${cssManager.bdTheme('hsl(215 25% 30%)', 'hsl(215 25% 85%)')};
font-weight: 500;
}
-
+
.viewTab.selected::before {
content: '';
position: absolute;
left: 0;
- top: 0;
- bottom: 0;
+ top: 8px;
+ bottom: 8px;
width: 3px;
- background: ${cssManager.bdTheme('#26a69a', '#26a69a')};
- }
-
- .viewTab dees-icon {
- font-size: 14px;
- opacity: 0.7;
+ border-radius: 0 2px 2px 0;
+ background: ${cssManager.bdTheme('hsl(215 70% 50%)', 'hsl(215 70% 60%)')};
}
+ .viewTab dees-icon {
+ font-size: 16px;
+ opacity: 0.55;
+ transition: all 0.15s ease;
+ }
+
+ .viewTab:hover dees-icon {
+ opacity: 0.75;
+ }
+
+ .viewTab.selected dees-icon {
+ opacity: 0.9;
+ color: ${cssManager.bdTheme('hsl(215 70% 45%)', 'hsl(215 70% 65%)')};
+ }
+
+ .viewTab span {
+ flex: 1;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
.appActions {
- padding: 12px;
- border-top: 1px solid ${cssManager.bdTheme('#e0e0e0', '#202020')};
+ padding: 12px 8px;
+ border-top: 1px solid ${cssManager.bdTheme('hsl(0 0% 91%)', 'hsl(0 0% 13%)')};
}
.action {
display: flex;
align-items: center;
- gap: 8px;
- padding: 8px;
- border-radius: 4px;
+ gap: 10px;
+ padding: 10px 12px;
+ border-radius: 8px;
cursor: default;
- transition: background 0.1s;
- color: ${cssManager.bdTheme('#333', '#ccc')};
+ transition: all 0.15s ease;
+ color: ${cssManager.bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 65%)')};
}
-
+
.action:hover {
- background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.04)', 'rgba(255, 255, 255, 0.08)')};
+ background: ${cssManager.bdTheme('hsl(0 84% 60% / 0.08)', 'hsl(0 84% 60% / 0.12)')};
+ color: ${cssManager.bdTheme('hsl(0 84% 45%)', 'hsl(0 84% 65%)')};
}
-
+
.action dees-icon {
- font-size: 14px;
- opacity: 0.7;
+ font-size: 16px;
+ opacity: 0.6;
+ transition: all 0.15s ease;
+ }
+
+ .action:hover dees-icon {
+ opacity: 0.9;
+ color: ${cssManager.bdTheme('hsl(0 84% 45%)', 'hsl(0 84% 65%)')};
}
.appcontent {
@@ -189,46 +268,61 @@ export class DeesSimpleAppDash extends DeesElement {
bottom: 24px;
width: calc(100% - 240px);
overflow: auto;
- background: ${cssManager.bdTheme('#f5f5f5', '#000')};
+ background: ${cssManager.bdTheme('hsl(0 0% 97%)', 'hsl(0 0% 5%)')};
overscroll-behavior: contain;
}
-
+
.controlbar {
color: #fff;
position: absolute;
bottom: 0px;
left: 0px;
width: 100%;
- border-top: 1px solid ${cssManager.bdTheme('#00000020', '#ffffff20')};
height: 24px;
- background: ${cssManager.bdTheme('#2196f3', '#1565c0')};
+ background: ${cssManager.bdTheme('hsl(220 13% 18%)', 'hsl(220 13% 12%)')};
z-index: 2;
display: flex;
justify-content: flex-end;
align-items: center;
flex-direction: row;
- font-size: 12px;
+ font-size: 11px;
+ font-weight: 500;
+ letter-spacing: 0.01em;
}
.control {
display: flex;
align-items: center;
- gap: 4px;
- margin-right: 16px;
+ gap: 6px;
+ padding: 0 12px;
+ height: 100%;
white-space: nowrap;
cursor: default;
- opacity: 0.8;
- transition: opacity 0.2s;
- }
-
- .control:hover {
- opacity: 1;
- }
-
- .control dees-icon {
- font-size: 14px;
+ color: hsl(0 0% 70%);
+ transition: all 0.15s ease;
+ border-left: 1px solid hsl(0 0% 100% / 0.08);
}
+ .control:first-child {
+ border-left: none;
+ }
+
+ .control:hover {
+ background: hsl(0 0% 100% / 0.06);
+ color: hsl(0 0% 95%);
+ }
+
+ .control dees-icon {
+ font-size: 13px;
+ }
+
+ .control.status-connected dees-icon {
+ color: hsl(142 70% 50%);
+ }
+
+ .control.status-terminal dees-icon {
+ color: hsl(45 90% 55%);
+ }
`,
];
@@ -236,27 +330,30 @@ export class DeesSimpleAppDash extends DeesElement {
return html`
-
-
@@ -272,11 +369,11 @@ export class DeesSimpleAppDash extends DeesElement {
-
+
Connected
-
+
Terminal
@@ -315,10 +412,10 @@ export class DeesSimpleAppDash extends DeesElement {
terminal.style.right = '0px';
terminal.style.bottom = '24px';
terminal.style.opacity = '0';
- terminal.style.transform = 'translateY(20px)';
- terminal.style.transition = 'all 0.2s';
- terminal.style.background = '#000';
- terminal.style.boxShadow = '0 4px 20px rgba(0, 0, 0, 0.3)';
+ terminal.style.transform = 'translateY(8px) scale(0.99)';
+ terminal.style.transition = 'all 0.25s cubic-bezier(0.4, 0, 0.2, 1)';
+ terminal.background = 'hsl(220 13% 8%)';
+ terminal.style.boxShadow = '0 25px 50px -12px rgb(0 0 0 / 0.5), 0 0 0 1px rgb(255 255 255 / 0.05)';
terminal.style.maxWidth = `calc(${maincontainer.clientWidth}px -240px)`;
terminal.style.maxHeight = `calc(${maincontainer.clientHeight}px - 24px)`;
@@ -327,7 +424,7 @@ export class DeesSimpleAppDash extends DeesElement {
await domtools.convenience.smartdelay.delayFor(0);
terminal.style.opacity = '1';
- terminal.style.transform = 'translateY(0px)';
+ terminal.style.transform = 'translateY(0) scale(1)';
return terminal;
}
@@ -335,8 +432,8 @@ export class DeesSimpleAppDash extends DeesElement {
const domtools = await this.domtoolsPromise;
if (this.currentTerminal) {
this.currentTerminal.style.opacity = '0';
- this.currentTerminal.style.transform = 'translateY(20px)';
- await domtools.convenience.smartdelay.delayFor(200);
+ this.currentTerminal.style.transform = 'translateY(8px) scale(0.99)';
+ await domtools.convenience.smartdelay.delayFor(250);
this.currentTerminal.remove();
this.currentTerminal = null;
}
diff --git a/ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.ts b/ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.ts
index af9fa23..90458ae 100644
--- a/ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.ts
+++ b/ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.ts
@@ -29,14 +29,14 @@ export class DeesSimpleLogin extends DeesElement {
cssManager.defaultStyles,
css`
:host {
- color: ${cssManager.bdTheme('#333', '#ccc')};
+ color: ${cssManager.bdTheme('hsl(0 0% 3.9%)', 'hsl(0 0% 98%)')};
user-select: none;
display: block;
width: 100%;
height: 100%;
font-family: 'Geist Sans', sans-serif;
}
-
+
.loginContainer {
position: absolute;
display: flex;
@@ -46,7 +46,7 @@ export class DeesSimpleLogin extends DeesElement {
height: 100%;
top: 0;
left: 0;
- background: ${cssManager.bdTheme('#f5f5f5', '#000')};
+ background: ${cssManager.bdTheme('hsl(0 0% 100%)', 'hsl(0 0% 3.9%)')};
}
.slotContainer {
@@ -56,43 +56,56 @@ export class DeesSimpleLogin extends DeesElement {
top: 0;
left: 0;
opacity: 0;
- transition: opacity 0.3s, transform 0.3s;
+ transition: opacity 0.2s ease, transform 0.2s ease;
pointer-events: none;
}
.login {
- min-width: 320px;
- background: ${cssManager.bdTheme('#ffffff', '#111')};
- box-shadow: ${cssManager.bdTheme(
- '0 4px 12px rgba(0, 0, 0, 0.15)',
- '0 4px 12px rgba(0, 0, 0, 0.3)'
- )};
- border-radius: 8px;
- border: 1px solid ${cssManager.bdTheme('#e0e0e0', '#202020')};
- padding: 24px;
- transition: opacity 0.3s, transform 0.3s;
+ width: 100%;
+ max-width: 360px;
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+ }
+
+ .login-header {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ text-align: center;
}
.header {
- text-align: center;
- font-size: 16px;
+ font-size: 24px;
font-weight: 600;
- margin-bottom: 20px;
- color: ${cssManager.bdTheme('#000', '#fff')};
+ letter-spacing: -0.025em;
+ color: ${cssManager.bdTheme('hsl(0 0% 9%)', 'hsl(0 0% 98%)')};
}
-
- .login dees-form {
+
+ .subheader {
+ font-size: 14px;
+ color: ${cssManager.bdTheme('hsl(0 0% 45.1%)', 'hsl(0 0% 63.9%)')};
+ }
+
+ .login-card {
+ background: ${cssManager.bdTheme('hsl(0 0% 100%)', 'hsl(0 0% 9%)')};
+ border: 1px solid ${cssManager.bdTheme('hsl(0 0% 89.8%)', 'hsl(0 0% 14.9%)')};
+ border-radius: 8px;
+ padding: 24px;
+ }
+
+ .login-card dees-form {
display: flex;
flex-direction: column;
- gap: 12px;
+ gap: 16px;
}
-
- .login dees-input-text {
+
+ .login-card dees-input-text {
width: 100%;
}
-
- .login dees-form-submit {
- margin-top: 4px;
+
+ .login-card dees-form-submit {
+ margin-top: 8px;
width: 100%;
}
`,
@@ -102,12 +115,17 @@ export class DeesSimpleLogin extends DeesElement {
return html`
-
-
-
-
- Login
-
+
+
+
+
+
+ Sign in
+
+
diff --git a/ts_web/elements/dees-terminal/dees-terminal.ts b/ts_web/elements/dees-terminal/dees-terminal.ts
index 5799893..40e3e80 100644
--- a/ts_web/elements/dees-terminal/dees-terminal.ts
+++ b/ts_web/elements/dees-terminal/dees-terminal.ts
@@ -38,6 +38,9 @@ export class DeesTerminal extends DeesElement {
@property()
accessor environment: {[key: string]: string} = {};
+ @property()
+ accessor background: string = '#000000';
+
// exposing webcontainer
private webcontainerDeferred = new domtools.plugins.smartpromise.Deferred();
public webcontainerPromise = this.webcontainerDeferred.promise;
@@ -58,7 +61,7 @@ export class DeesTerminal extends DeesElement {
css`
:host {
padding: 20px;
- background: #000;
+ background: var(--dees-terminal-background, #000000);
position: absolute;
height: 100%;
width: 100%;
@@ -153,7 +156,7 @@ export class DeesTerminal extends DeesElement {
.xterm .composition-view {
/* TODO: Composition position got messed up somewhere */
- background: #000;
+ background: var(--dees-terminal-background, #000000);
color: #fff;
display: none;
position: absolute;
@@ -167,7 +170,7 @@ export class DeesTerminal extends DeesElement {
.xterm .xterm-viewport {
/* On OS X this is required in order for the scroll bar to appear fully opaque */
- background-color: #000;
+ background-color: var(--dees-terminal-background, #000000);
overflow-y: scroll;
cursor: default;
position: absolute;
@@ -261,11 +264,18 @@ export class DeesTerminal extends DeesElement {
): Promise {
const domtools = await this.domtoolsPromise;
super.firstUpdated(_changedProperties);
+
+ // Sync CSS variable with background property
+ this.style.setProperty('--dees-terminal-background', this.background);
+
const container = this.shadowRoot.getElementById('container');
const term = new Terminal({
convertEol: true,
cursorBlink: true,
+ theme: {
+ background: this.background,
+ },
});
this.fitAddon = new FitAddon();
term.loadAddon(this.fitAddon);