@floegence/floe-webapp-core 0.66.0 → 0.67.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/icons/index.js +491 -486
- package/dist/components/icons/refreshPaths.d.ts +1 -0
- package/dist/components/icons/refreshPaths.js +9 -0
- package/dist/floe.css +1 -0
- package/dist/progress-shimmer.css +106 -0
- package/dist/resource-cache.d.ts +2 -0
- package/dist/resource-cache.js +124 -111
- package/dist/standalone.css +1 -0
- package/dist/styles.css +1 -1
- package/dist/ui.css +0 -87
- package/dist/window-status.css +194 -0
- package/dist/window-status.d.ts +9 -0
- package/dist/window-status.js +13 -0
- package/package.json +8 -1
package/dist/ui.css
CHANGED
|
@@ -478,93 +478,6 @@
|
|
|
478
478
|
Text Animation Effects - Minimal and Professional
|
|
479
479
|
============================================================================= */
|
|
480
480
|
|
|
481
|
-
/* Opt-in progress only: text keeps one accessible copy and surface paint
|
|
482
|
-
* sits below content. The host owns operation state and removes the attribute
|
|
483
|
-
* on settlement. Both published CSS entries expose this contract. */
|
|
484
|
-
@keyframes floe-progress-shimmer {
|
|
485
|
-
0% {
|
|
486
|
-
background-position: 100% center;
|
|
487
|
-
}
|
|
488
|
-
100% {
|
|
489
|
-
background-position: 0% center;
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
:is([data-floe-progress-shimmer='text'], .processing-text-shimmer) {
|
|
494
|
-
color: var(--floe-progress-text-base);
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
:is([data-floe-progress-shimmer='text'], .processing-text-shimmer)::selection,
|
|
498
|
-
:is([data-floe-progress-shimmer='text'], .processing-text-shimmer) ::selection {
|
|
499
|
-
-webkit-text-fill-color: var(--selection-fg);
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
@supports (background-clip: text) {
|
|
503
|
-
:is([data-floe-progress-shimmer='text'], .processing-text-shimmer) {
|
|
504
|
-
background-image: linear-gradient(90deg in srgb, var(--floe-progress-text-base) 43%, var(--floe-progress-text-peak) 46%, var(--floe-progress-text-peak) 54%, var(--floe-progress-text-base) 57%);
|
|
505
|
-
background-size: 250% 100%;
|
|
506
|
-
-webkit-background-clip: text;
|
|
507
|
-
background-clip: text;
|
|
508
|
-
-webkit-text-fill-color: transparent;
|
|
509
|
-
animation: floe-progress-shimmer 2.4s linear infinite;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
[data-floe-progress-shimmer='surface'] {
|
|
514
|
-
--floe-progress-surface-base: var(--floe-progress-surface-background, var(--floe-progress-primary-base));
|
|
515
|
-
/* The calibrated busy fill reserves contrast for an additive white reflection. */
|
|
516
|
-
--floe-progress-surface-peak: color-mix(in srgb, var(--floe-progress-surface-base), white var(--floe-progress-primary-white-mix));
|
|
517
|
-
position: relative;
|
|
518
|
-
isolation: isolate;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
/* A busy control can be unavailable for a second submission while its
|
|
522
|
-
* progress remains fully legible. Disabled input semantics still apply. */
|
|
523
|
-
[data-floe-progress-shimmer='surface']:disabled {
|
|
524
|
-
opacity: 1 !important;
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
[data-floe-progress-shimmer='surface']::before {
|
|
528
|
-
content: '';
|
|
529
|
-
position: absolute;
|
|
530
|
-
inset: 0;
|
|
531
|
-
z-index: -1;
|
|
532
|
-
border-radius: inherit;
|
|
533
|
-
pointer-events: none;
|
|
534
|
-
background-image: linear-gradient(100deg in srgb, var(--floe-progress-surface-base) 46%, var(--floe-progress-surface-peak) 50%, var(--floe-progress-surface-base) 54%);
|
|
535
|
-
background-size: 250% 100%;
|
|
536
|
-
animation: floe-progress-shimmer 2.4s linear infinite;
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
@media (prefers-reduced-motion: reduce), (forced-colors: active) {
|
|
540
|
-
:is([data-floe-progress-shimmer='text'], .processing-text-shimmer) {
|
|
541
|
-
animation: none;
|
|
542
|
-
background-image: none;
|
|
543
|
-
-webkit-text-fill-color: currentColor;
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
[data-floe-progress-shimmer='surface']::before {
|
|
547
|
-
animation: none;
|
|
548
|
-
background-image: none;
|
|
549
|
-
background-color: var(--floe-progress-surface-base);
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
@media (forced-colors: active) {
|
|
554
|
-
[data-floe-progress-shimmer='surface']::before {
|
|
555
|
-
content: none;
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
:is([data-floe-progress-shimmer='text'], .processing-text-shimmer) {
|
|
559
|
-
color: CanvasText;
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
:is([data-floe-progress-shimmer='text'], .processing-text-shimmer)::selection,
|
|
563
|
-
:is([data-floe-progress-shimmer='text'], .processing-text-shimmer) ::selection {
|
|
564
|
-
-webkit-text-fill-color: HighlightText;
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
|
|
568
481
|
/* Glow - subtle pulsing text */
|
|
569
482
|
@keyframes text-glow {
|
|
570
483
|
0%,
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/* Explicit host-window opt-in. Never mount this layer in a draggable window,
|
|
2
|
+
* a Workbench widget, or a movable canvas. Hosts own inertness and lifecycle.
|
|
3
|
+
* Neutral surfaces are opaque: access gates must not expose protected content.
|
|
4
|
+
* Load Floe theme tokens and progress-shimmer.css alongside this asset.
|
|
5
|
+
*/
|
|
6
|
+
@layer components {
|
|
7
|
+
.floe-window-status {
|
|
8
|
+
box-sizing: border-box;
|
|
9
|
+
position: absolute;
|
|
10
|
+
inset: 0;
|
|
11
|
+
display: flex;
|
|
12
|
+
overflow: auto;
|
|
13
|
+
padding: 40px 24px;
|
|
14
|
+
color: var(--foreground);
|
|
15
|
+
background:
|
|
16
|
+
radial-gradient(
|
|
17
|
+
ellipse at 12% 23%,
|
|
18
|
+
color-mix(in srgb, var(--foreground) 2%, transparent),
|
|
19
|
+
transparent 45%
|
|
20
|
+
),
|
|
21
|
+
var(--background);
|
|
22
|
+
font-family: var(--font-sans, ui-sans-serif, system-ui, sans-serif);
|
|
23
|
+
font-size: 13px;
|
|
24
|
+
line-height: 1.7;
|
|
25
|
+
isolation: isolate;
|
|
26
|
+
}
|
|
27
|
+
.floe-window-status[data-backdrop='workspace'] {
|
|
28
|
+
background: color-mix(in srgb, var(--background) 82%, transparent);
|
|
29
|
+
backdrop-filter: blur(8px);
|
|
30
|
+
-webkit-backdrop-filter: blur(8px);
|
|
31
|
+
}
|
|
32
|
+
.floe-window-status__content {
|
|
33
|
+
box-sizing: border-box;
|
|
34
|
+
margin: auto;
|
|
35
|
+
padding: 16px;
|
|
36
|
+
width: 100%;
|
|
37
|
+
max-width: 440px;
|
|
38
|
+
text-align: center;
|
|
39
|
+
overflow-wrap: anywhere;
|
|
40
|
+
}
|
|
41
|
+
.floe-window-status__illustration {
|
|
42
|
+
display: block;
|
|
43
|
+
width: 240px;
|
|
44
|
+
max-width: 100%;
|
|
45
|
+
height: 112px;
|
|
46
|
+
margin: 0 auto 30px;
|
|
47
|
+
color: var(--muted-foreground);
|
|
48
|
+
}
|
|
49
|
+
.floe-window-status__illustration .soft {
|
|
50
|
+
opacity: 0.75;
|
|
51
|
+
}
|
|
52
|
+
.floe-window-status__illustration .quiet {
|
|
53
|
+
opacity: 0.4;
|
|
54
|
+
}
|
|
55
|
+
.floe-window-status__identity {
|
|
56
|
+
margin: 0 0 14px;
|
|
57
|
+
color: var(--muted-foreground);
|
|
58
|
+
font-size: 12px;
|
|
59
|
+
font-weight: 550;
|
|
60
|
+
}
|
|
61
|
+
.floe-window-status__title {
|
|
62
|
+
margin: 0;
|
|
63
|
+
color: var(--foreground);
|
|
64
|
+
font-size: 24px;
|
|
65
|
+
font-weight: 600;
|
|
66
|
+
line-height: 1.4;
|
|
67
|
+
letter-spacing: -0.025em;
|
|
68
|
+
}
|
|
69
|
+
.floe-window-status__description {
|
|
70
|
+
max-width: 352px;
|
|
71
|
+
margin: 15px auto 0;
|
|
72
|
+
color: var(--muted-foreground);
|
|
73
|
+
font-size: 13px;
|
|
74
|
+
line-height: 1.9;
|
|
75
|
+
text-wrap: pretty;
|
|
76
|
+
}
|
|
77
|
+
.floe-window-status__activity {
|
|
78
|
+
max-width: 360px;
|
|
79
|
+
margin: 28px auto 0;
|
|
80
|
+
padding: 17px 8px;
|
|
81
|
+
border-block: 1px solid var(--border);
|
|
82
|
+
font-variant-numeric: tabular-nums;
|
|
83
|
+
}
|
|
84
|
+
.floe-window-status__label {
|
|
85
|
+
margin: 0 0 9px;
|
|
86
|
+
color: var(--muted-foreground);
|
|
87
|
+
font-size: 11px;
|
|
88
|
+
}
|
|
89
|
+
.floe-window-status__actions {
|
|
90
|
+
display: flex;
|
|
91
|
+
justify-content: center;
|
|
92
|
+
align-items: center;
|
|
93
|
+
flex-wrap: wrap;
|
|
94
|
+
gap: 9px;
|
|
95
|
+
margin-top: 24px;
|
|
96
|
+
}
|
|
97
|
+
.floe-window-status__button {
|
|
98
|
+
display: inline-flex;
|
|
99
|
+
align-items: center;
|
|
100
|
+
justify-content: center;
|
|
101
|
+
gap: 8px;
|
|
102
|
+
min-height: 40px;
|
|
103
|
+
padding: 8px 17px;
|
|
104
|
+
border: 1px solid transparent;
|
|
105
|
+
border-radius: 5px;
|
|
106
|
+
background: var(--foreground);
|
|
107
|
+
color: var(--background);
|
|
108
|
+
font: inherit;
|
|
109
|
+
font-size: 12px;
|
|
110
|
+
font-weight: 550;
|
|
111
|
+
text-decoration: none;
|
|
112
|
+
cursor: pointer;
|
|
113
|
+
}
|
|
114
|
+
.floe-window-status__button:hover {
|
|
115
|
+
opacity: 0.88;
|
|
116
|
+
}
|
|
117
|
+
.floe-window-status__button:focus-visible {
|
|
118
|
+
outline: 2px solid var(--ring, var(--foreground));
|
|
119
|
+
outline-offset: 3px;
|
|
120
|
+
}
|
|
121
|
+
.floe-window-status__button:disabled {
|
|
122
|
+
cursor: not-allowed;
|
|
123
|
+
opacity: 0.5;
|
|
124
|
+
}
|
|
125
|
+
.floe-window-status__button[data-variant='secondary'] {
|
|
126
|
+
background: transparent;
|
|
127
|
+
color: var(--muted-foreground);
|
|
128
|
+
}
|
|
129
|
+
.floe-window-status__button svg {
|
|
130
|
+
width: 14px;
|
|
131
|
+
height: 14px;
|
|
132
|
+
flex-shrink: 0;
|
|
133
|
+
}
|
|
134
|
+
.floe-window-status__details {
|
|
135
|
+
max-width: 360px;
|
|
136
|
+
margin: 28px auto 0;
|
|
137
|
+
color: var(--muted-foreground);
|
|
138
|
+
font-size: 11px;
|
|
139
|
+
text-align: start;
|
|
140
|
+
}
|
|
141
|
+
.floe-window-status__details summary {
|
|
142
|
+
width: fit-content;
|
|
143
|
+
margin: auto;
|
|
144
|
+
padding: 5px 6px;
|
|
145
|
+
cursor: pointer;
|
|
146
|
+
}
|
|
147
|
+
.floe-window-status__details pre {
|
|
148
|
+
white-space: pre-wrap;
|
|
149
|
+
overflow-wrap: anywhere;
|
|
150
|
+
font: inherit;
|
|
151
|
+
}
|
|
152
|
+
.floe-window-status__form {
|
|
153
|
+
max-width: 316px;
|
|
154
|
+
margin: 27px auto 0;
|
|
155
|
+
text-align: start;
|
|
156
|
+
}
|
|
157
|
+
@media (max-height: 700px) {
|
|
158
|
+
.floe-window-status {
|
|
159
|
+
padding: 20px 16px;
|
|
160
|
+
}
|
|
161
|
+
.floe-window-status__illustration {
|
|
162
|
+
height: 72px;
|
|
163
|
+
margin-bottom: 16px;
|
|
164
|
+
}
|
|
165
|
+
.floe-window-status__activity,
|
|
166
|
+
.floe-window-status__form {
|
|
167
|
+
margin-top: 20px;
|
|
168
|
+
}
|
|
169
|
+
.floe-window-status__details {
|
|
170
|
+
margin-top: 18px;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
@media (max-width: 600px) {
|
|
174
|
+
.floe-window-status {
|
|
175
|
+
padding-inline: 14px;
|
|
176
|
+
}
|
|
177
|
+
.floe-window-status__content {
|
|
178
|
+
padding-inline: 10px;
|
|
179
|
+
}
|
|
180
|
+
.floe-window-status__title {
|
|
181
|
+
font-size: 22px;
|
|
182
|
+
}
|
|
183
|
+
.floe-window-status__illustration {
|
|
184
|
+
width: 200px;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
@media (prefers-reduced-transparency: reduce), (forced-colors: active) {
|
|
188
|
+
.floe-window-status[data-backdrop='workspace'] {
|
|
189
|
+
background: var(--background);
|
|
190
|
+
backdrop-filter: none;
|
|
191
|
+
-webkit-backdrop-filter: none;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const windowStatusRefreshSvg: string;
|
|
2
|
+
declare const artwork: {
|
|
3
|
+
readonly access: "<path class=\"quiet\" d=\"M72 29H51v52h21m96-52h21v52h-21M73 55h19m56 0h19\"/><path class=\"soft\" d=\"m120 16 27 10v29c0 24-27 36-27 36s-27-12-27-36V26z\"/><rect x=\"109\" y=\"47\" width=\"22\" height=\"21\" rx=\"3\"/><path d=\"M113 47v-7a7 7 0 0 1 14 0v7m-7 8v5\"/><circle class=\"quiet\" cx=\"51\" cy=\"55\" r=\"3\"/><circle class=\"quiet\" cx=\"189\" cy=\"55\" r=\"3\"/>";
|
|
4
|
+
readonly editor: "<rect x=\"56\" y=\"21\" width=\"128\" height=\"76\" rx=\"6\"/><path class=\"soft\" d=\"M56 38h128M77 38v59\"/><circle cx=\"65\" cy=\"29\" r=\"1\" fill=\"currentColor\"/><circle cx=\"71\" cy=\"29\" r=\"1\" fill=\"currentColor\"/><circle cx=\"77\" cy=\"29\" r=\"1\" fill=\"currentColor\"/><path class=\"quiet\" d=\"M64 48h5m-5 8h5m-5 8h5m-5 8h5M43 47H31v25h12m154-25h12v25h-12\"/><path d=\"m111 55-9 11 9 11m38-22 9 11-9 11m-15-27-9 31\"/>";
|
|
5
|
+
readonly service: "<rect x=\"26\" y=\"33\" width=\"48\" height=\"39\" rx=\"5\"/><path class=\"soft\" d=\"M26 44h48\"/><circle cx=\"33\" cy=\"39\" r=\"1\" fill=\"currentColor\"/><circle cx=\"39\" cy=\"39\" r=\"1\" fill=\"currentColor\"/><rect x=\"171\" y=\"25\" width=\"43\" height=\"23\" rx=\"4\"/><rect x=\"171\" y=\"60\" width=\"43\" height=\"23\" rx=\"4\"/><path class=\"soft\" d=\"M179 35h12m-12 35h12\"/><circle cx=\"205\" cy=\"36\" r=\"1.5\"/><circle cx=\"205\" cy=\"71\" r=\"1.5\"/><path class=\"quiet\" d=\"M82 54h20m36 0h22m0 0v-18h11m-11 18v18h11\"/><circle cx=\"120\" cy=\"54\" r=\"13\" class=\"soft\"/><path d=\"M120 47v8m0 5v.1\"/>";
|
|
6
|
+
};
|
|
7
|
+
/** Returns fixed, trusted SVG markup. Host copy and user input never enter SVG. */
|
|
8
|
+
export declare function windowStatusIllustrationSvg(kind: keyof typeof artwork): string;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { refreshIconPaths as t } from "./components/icons/refreshPaths.js";
|
|
2
|
+
const i = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${t.map((r) => `<path d="${r}"/>`).join("")}</svg>`, c = {
|
|
3
|
+
access: '<path class="quiet" d="M72 29H51v52h21m96-52h21v52h-21M73 55h19m56 0h19"/><path class="soft" d="m120 16 27 10v29c0 24-27 36-27 36s-27-12-27-36V26z"/><rect x="109" y="47" width="22" height="21" rx="3"/><path d="M113 47v-7a7 7 0 0 1 14 0v7m-7 8v5"/><circle class="quiet" cx="51" cy="55" r="3"/><circle class="quiet" cx="189" cy="55" r="3"/>',
|
|
4
|
+
editor: '<rect x="56" y="21" width="128" height="76" rx="6"/><path class="soft" d="M56 38h128M77 38v59"/><circle cx="65" cy="29" r="1" fill="currentColor"/><circle cx="71" cy="29" r="1" fill="currentColor"/><circle cx="77" cy="29" r="1" fill="currentColor"/><path class="quiet" d="M64 48h5m-5 8h5m-5 8h5m-5 8h5M43 47H31v25h12m154-25h12v25h-12"/><path d="m111 55-9 11 9 11m38-22 9 11-9 11m-15-27-9 31"/>',
|
|
5
|
+
service: '<rect x="26" y="33" width="48" height="39" rx="5"/><path class="soft" d="M26 44h48"/><circle cx="33" cy="39" r="1" fill="currentColor"/><circle cx="39" cy="39" r="1" fill="currentColor"/><rect x="171" y="25" width="43" height="23" rx="4"/><rect x="171" y="60" width="43" height="23" rx="4"/><path class="soft" d="M179 35h12m-12 35h12"/><circle cx="205" cy="36" r="1.5"/><circle cx="205" cy="71" r="1.5"/><path class="quiet" d="M82 54h20m36 0h22m0 0v-18h11m-11 18v18h11"/><circle cx="120" cy="54" r="13" class="soft"/><path d="M120 47v8m0 5v.1"/>'
|
|
6
|
+
};
|
|
7
|
+
function h(r) {
|
|
8
|
+
return `<svg class="floe-window-status__illustration" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 112" fill="none" aria-hidden="true"><g stroke="currentColor" stroke-width="1.45" stroke-linecap="round" stroke-linejoin="round">${c[r]}</g></svg>`;
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
h as windowStatusIllustrationSvg,
|
|
12
|
+
i as windowStatusRefreshSvg
|
|
13
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@floegence/floe-webapp-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.67.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -105,6 +105,13 @@
|
|
|
105
105
|
"./resource-cache": {
|
|
106
106
|
"types": "./dist/resource-cache.d.ts",
|
|
107
107
|
"import": "./dist/resource-cache.js"
|
|
108
|
+
},
|
|
109
|
+
"./progress-shimmer.css": "./dist/progress-shimmer.css",
|
|
110
|
+
"./window-status.css": "./dist/window-status.css",
|
|
111
|
+
"./window-status": {
|
|
112
|
+
"types": "./dist/window-status.d.ts",
|
|
113
|
+
"import": "./dist/window-status.js",
|
|
114
|
+
"default": "./dist/window-status.js"
|
|
108
115
|
}
|
|
109
116
|
},
|
|
110
117
|
"files": [
|