@jolly-pixel/ui 1.0.1 → 2.0.0
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/LICENSE +44 -44
- package/NOTICE +9 -0
- package/README.md +194 -194
- package/dist/containers/Dialog.js +11 -11
- package/dist/containers/Dialog.styles.js +48 -48
- package/dist/containers/Dock.js +11 -11
- package/dist/containers/Dock.styles.js +351 -351
- package/dist/containers/DockLayout.js +4 -4
- package/dist/containers/Floating.js +23 -23
- package/dist/containers/Floating.styles.js +116 -116
- package/dist/containers/Folder.js +28 -28
- package/dist/containers/Folder.styles.js +221 -221
- package/dist/containers/Pane.js +50 -50
- package/dist/containers/Pane.styles.js +186 -186
- package/dist/containers/Rail.js +18 -18
- package/dist/containers/Tab.js +10 -10
- package/dist/containers/Tabs.js +26 -26
- package/dist/containers/Tabs.styles.js +93 -93
- package/dist/containers/Toolbar.js +25 -25
- package/dist/containers/resize.js +5 -5
- package/dist/controls/Button.js +9 -9
- package/dist/controls/Button.styles.js +79 -79
- package/dist/controls/ButtonGroup.js +28 -28
- package/dist/controls/ButtonGroup.styles.js +98 -98
- package/dist/controls/Checkbox.js +14 -14
- package/dist/controls/Checkbox.styles.js +111 -111
- package/dist/controls/Color.js +51 -51
- package/dist/controls/Color.styles.js +83 -83
- package/dist/controls/ColorPicker.js +104 -104
- package/dist/controls/ColorPicker.styles.js +296 -296
- package/dist/controls/Control.js +33 -33
- package/dist/controls/Control.styles.js +102 -102
- package/dist/controls/Controls.js +11 -11
- package/dist/controls/Controls.styles.js +98 -98
- package/dist/controls/Flags.js +18 -18
- package/dist/controls/Flags.styles.js +59 -59
- package/dist/controls/Number.js +21 -21
- package/dist/controls/Number.styles.js +44 -44
- package/dist/controls/PropertyRow.js +13 -13
- package/dist/controls/PropertyRow.styles.js +105 -105
- package/dist/controls/Range.js +24 -24
- package/dist/controls/Range.styles.js +25 -25
- package/dist/controls/Select.js +23 -23
- package/dist/controls/Select.styles.js +47 -47
- package/dist/controls/Separator.js +11 -11
- package/dist/controls/Separator.styles.js +45 -45
- package/dist/controls/Slider.js +36 -36
- package/dist/controls/Slider.styles.js +161 -161
- package/dist/controls/Text.js +17 -17
- package/dist/data/Tree.d.ts +0 -14
- package/dist/data/Tree.d.ts.map +1 -1
- package/dist/data/Tree.js +90 -120
- package/dist/data/Tree.js.map +1 -1
- package/dist/data/Tree.styles.d.ts.map +1 -1
- package/dist/data/Tree.styles.js +220 -237
- package/dist/data/Tree.styles.js.map +1 -1
- package/dist/data/dropZone.d.ts +0 -10
- package/dist/data/dropZone.d.ts.map +1 -1
- package/dist/data/dropZone.js +0 -10
- package/dist/data/dropZone.js.map +1 -1
- package/dist/data/resolveRename.d.ts +0 -3
- package/dist/data/resolveRename.d.ts.map +1 -1
- package/dist/data/resolveRename.js +0 -3
- package/dist/data/resolveRename.js.map +1 -1
- package/dist/data/resolveReparent.d.ts +0 -7
- package/dist/data/resolveReparent.d.ts.map +1 -1
- package/dist/data/resolveReparent.js +0 -6
- package/dist/data/resolveReparent.js.map +1 -1
- package/dist/data/rowDragSession.d.ts +0 -8
- package/dist/data/rowDragSession.d.ts.map +1 -1
- package/dist/data/rowDragSession.js +0 -6
- package/dist/data/rowDragSession.js.map +1 -1
- package/dist/data/treeNodes.d.ts +0 -6
- package/dist/data/treeNodes.d.ts.map +1 -1
- package/dist/data/treeNodes.js +2 -7
- package/dist/data/treeNodes.js.map +1 -1
- package/dist/feedback/JollyPixelLogo.js +84 -84
- package/dist/feedback/Loading.js +29 -29
- package/dist/feedback/Loading.styles.js +230 -230
- package/dist/feedback/Log.js +8 -8
- package/dist/feedback/Log.styles.js +61 -61
- package/dist/feedback/Progress.js +17 -17
- package/dist/feedback/Progress.styles.js +146 -146
- package/dist/field/JollyField.js +51 -51
- package/dist/field/JollyField.styles.js +429 -429
- package/dist/icon/Icon.js +24 -24
- package/dist/icon/builtins.js +126 -126
- package/dist/interaction/drag/DragSession.js +6 -6
- package/dist/interaction/scrub/ScrubController.js +6 -6
- package/dist/math/AxisController.js +22 -22
- package/dist/math/Point2d.js +12 -12
- package/dist/math/Point2d.styles.js +49 -49
- package/dist/math/Quaternion.js +4 -4
- package/dist/math/Transform.js +40 -40
- package/dist/math/Transform.styles.js +17 -17
- package/dist/math/VectorField.js +4 -4
- package/dist/math/VectorField.styles.js +102 -102
- package/dist/monitors/Graph.js +8 -8
- package/dist/monitors/Graph.styles.js +42 -42
- package/dist/monitors/Monitor.js +5 -5
- package/dist/monitors/Monitor.styles.js +31 -31
- package/dist/peer/Presence.js +33 -33
- package/dist/peer/Presence.styles.js +82 -82
- package/dist/stats/Stats.js +6 -6
- package/dist/stats/Stats.styles.js +54 -54
- package/dist/theme/components/DensityControl.js +16 -16
- package/dist/theme/components/ThemeControl.js +16 -16
- package/dist/theme/components/ThemePreferences.js +18 -18
- package/dist/theme/font.js +9 -9
- package/dist/theme/styles/hiddenStyles.js +4 -4
- package/dist/theme/styles/mixins.js +16 -16
- package/dist/theme/styles/themeStyles.js +4 -4
- package/dist/theme/tokens/density.js +19 -19
- package/dist/theme/tokens/ramps.js +40 -40
- package/dist/theme/tokens/scales.js +56 -56
- package/dist/theme/tokens/semantic.js +184 -184
- package/package.json +6 -5
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
// Import Third-party Dependencies
|
|
2
2
|
import { css } from "lit";
|
|
3
|
-
export const separatorStyles = css `
|
|
4
|
-
:host {
|
|
5
|
-
display: block;
|
|
6
|
-
font-family: var(--jolly-font-family, ui-monospace, monospace);
|
|
7
|
-
font-size: var(--jolly-font-size, 11px);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.rule {
|
|
11
|
-
flex: 1 1 auto;
|
|
12
|
-
height: 1px;
|
|
13
|
-
background: var(--jolly-divider);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
.labelled,
|
|
17
|
-
.unlabelled {
|
|
18
|
-
align-items: center;
|
|
19
|
-
min-height: var(--jolly-row-height, 20px);
|
|
20
|
-
margin-block-start: calc(var(--jolly-space-1, 4px) / 2);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.labelled {
|
|
24
|
-
display: grid;
|
|
25
|
-
grid-template-columns:
|
|
26
|
-
calc(var(--jolly-gutter-width, 0px) + var(--jolly-space-1, 4px))
|
|
27
|
-
auto
|
|
28
|
-
minmax(0, 1fr);
|
|
29
|
-
gap: var(--jolly-space-1, 4px);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.unlabelled {
|
|
33
|
-
display: flex;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.labelled .rule {
|
|
37
|
-
background: var(--jolly-separator-rule);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.caption {
|
|
41
|
-
flex: 0 0 auto;
|
|
42
|
-
color: var(--jolly-separator-label);
|
|
43
|
-
font-size: 1em;
|
|
44
|
-
text-transform: uppercase;
|
|
45
|
-
letter-spacing: 0.06em;
|
|
46
|
-
user-select: none;
|
|
47
|
-
}
|
|
3
|
+
export const separatorStyles = css `
|
|
4
|
+
:host {
|
|
5
|
+
display: block;
|
|
6
|
+
font-family: var(--jolly-font-family, ui-monospace, monospace);
|
|
7
|
+
font-size: var(--jolly-font-size, 11px);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.rule {
|
|
11
|
+
flex: 1 1 auto;
|
|
12
|
+
height: 1px;
|
|
13
|
+
background: var(--jolly-divider);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.labelled,
|
|
17
|
+
.unlabelled {
|
|
18
|
+
align-items: center;
|
|
19
|
+
min-height: var(--jolly-row-height, 20px);
|
|
20
|
+
margin-block-start: calc(var(--jolly-space-1, 4px) / 2);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.labelled {
|
|
24
|
+
display: grid;
|
|
25
|
+
grid-template-columns:
|
|
26
|
+
calc(var(--jolly-gutter-width, 0px) + var(--jolly-space-1, 4px))
|
|
27
|
+
auto
|
|
28
|
+
minmax(0, 1fr);
|
|
29
|
+
gap: var(--jolly-space-1, 4px);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.unlabelled {
|
|
33
|
+
display: flex;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.labelled .rule {
|
|
37
|
+
background: var(--jolly-separator-rule);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.caption {
|
|
41
|
+
flex: 0 0 auto;
|
|
42
|
+
color: var(--jolly-separator-label);
|
|
43
|
+
font-size: 1em;
|
|
44
|
+
text-transform: uppercase;
|
|
45
|
+
letter-spacing: 0.06em;
|
|
46
|
+
user-select: none;
|
|
47
|
+
}
|
|
48
48
|
`;
|
|
49
49
|
//# sourceMappingURL=Separator.styles.js.map
|
package/dist/controls/Slider.js
CHANGED
|
@@ -43,42 +43,42 @@ let Slider = class Slider extends JollyField {
|
|
|
43
43
|
}
|
|
44
44
|
renderValue() {
|
|
45
45
|
const value = this.concreteValue;
|
|
46
|
-
return html `
|
|
47
|
-
<div class="lane" style="--jolly-slider-progress:${this.#progress}">
|
|
48
|
-
<input
|
|
49
|
-
type="range"
|
|
50
|
-
min=${this.min}
|
|
51
|
-
max=${this.max}
|
|
52
|
-
step=${this.step}
|
|
53
|
-
.value=${String(value ?? this.min)}
|
|
54
|
-
?disabled=${this.disabled}
|
|
55
|
-
aria-label=${this.label === "" ? nothing : this.label}
|
|
56
|
-
aria-readonly=${this.readonlyAria}
|
|
57
|
-
aria-disabled=${this.lockedAria}
|
|
58
|
-
aria-description=${this.lockDescription}
|
|
59
|
-
aria-valuetext=${this.mixed ? "Mixed" : nothing}
|
|
60
|
-
@input=${this.#onInput}
|
|
61
|
-
@change=${this.#onChange}
|
|
62
|
-
>
|
|
63
|
-
</div>
|
|
64
|
-
<input
|
|
65
|
-
class="readout"
|
|
66
|
-
type="text"
|
|
67
|
-
inputmode="decimal"
|
|
68
|
-
.value=${this.draft ?? this.#displayed}
|
|
69
|
-
placeholder=${this.mixed ? MIXED_PLACEHOLDER : ""}
|
|
70
|
-
?disabled=${this.disabled}
|
|
71
|
-
?readonly=${this.inputReadonly}
|
|
72
|
-
?data-pointer-focus=${this.#pointerFocus.active}
|
|
73
|
-
aria-label=${this.label === "" ? "Value" : `${this.label} value`}
|
|
74
|
-
aria-readonly=${this.readonlyAria}
|
|
75
|
-
aria-disabled=${this.lockedAria}
|
|
76
|
-
aria-invalid=${this.displayError === null ? nothing : "true"}
|
|
77
|
-
@input=${this.onDraftInput}
|
|
78
|
-
@focus=${this.#pointerFocus.onFocus}
|
|
79
|
-
@keydown=${this.#onKeyDown}
|
|
80
|
-
@blur=${this.#onBlur}
|
|
81
|
-
>
|
|
46
|
+
return html `
|
|
47
|
+
<div class="lane" style="--jolly-slider-progress:${this.#progress}">
|
|
48
|
+
<input
|
|
49
|
+
type="range"
|
|
50
|
+
min=${this.min}
|
|
51
|
+
max=${this.max}
|
|
52
|
+
step=${this.step}
|
|
53
|
+
.value=${String(value ?? this.min)}
|
|
54
|
+
?disabled=${this.disabled}
|
|
55
|
+
aria-label=${this.label === "" ? nothing : this.label}
|
|
56
|
+
aria-readonly=${this.readonlyAria}
|
|
57
|
+
aria-disabled=${this.lockedAria}
|
|
58
|
+
aria-description=${this.lockDescription}
|
|
59
|
+
aria-valuetext=${this.mixed ? "Mixed" : nothing}
|
|
60
|
+
@input=${this.#onInput}
|
|
61
|
+
@change=${this.#onChange}
|
|
62
|
+
>
|
|
63
|
+
</div>
|
|
64
|
+
<input
|
|
65
|
+
class="readout"
|
|
66
|
+
type="text"
|
|
67
|
+
inputmode="decimal"
|
|
68
|
+
.value=${this.draft ?? this.#displayed}
|
|
69
|
+
placeholder=${this.mixed ? MIXED_PLACEHOLDER : ""}
|
|
70
|
+
?disabled=${this.disabled}
|
|
71
|
+
?readonly=${this.inputReadonly}
|
|
72
|
+
?data-pointer-focus=${this.#pointerFocus.active}
|
|
73
|
+
aria-label=${this.label === "" ? "Value" : `${this.label} value`}
|
|
74
|
+
aria-readonly=${this.readonlyAria}
|
|
75
|
+
aria-disabled=${this.lockedAria}
|
|
76
|
+
aria-invalid=${this.displayError === null ? nothing : "true"}
|
|
77
|
+
@input=${this.onDraftInput}
|
|
78
|
+
@focus=${this.#pointerFocus.onFocus}
|
|
79
|
+
@keydown=${this.#onKeyDown}
|
|
80
|
+
@blur=${this.#onBlur}
|
|
81
|
+
>
|
|
82
82
|
`;
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
@@ -1,165 +1,165 @@
|
|
|
1
1
|
// Import Third-party Dependencies
|
|
2
2
|
import { css } from "lit";
|
|
3
|
-
export const sliderStyles = css `
|
|
4
|
-
/*
|
|
5
|
-
* The lane paints nothing. It is only the positioning context and the hit
|
|
6
|
-
* area, so the slider reads as a measurement on the surface rather than as a
|
|
7
|
-
* filled control.
|
|
8
|
-
*
|
|
9
|
-
* The track, the range input and the stop calculation all share the same
|
|
10
|
-
* horizontal inset, so the fill edge lands under the knob centre.
|
|
11
|
-
*/
|
|
12
|
-
.lane {
|
|
13
|
-
--jolly-slider-knob: 10px;
|
|
14
|
-
--jolly-slider-track-height: 2px;
|
|
15
|
-
--jolly-slider-inset: var(--jolly-space-1, 4px);
|
|
16
|
-
--jolly-slider-groove: var(--jolly-groove);
|
|
17
|
-
--jolly-slider-fill: var(--jolly-field-active-color);
|
|
18
|
-
--jolly-slider-thumb-fill: var(--jolly-slider-fill);
|
|
19
|
-
--jolly-slider-stop: calc(
|
|
20
|
-
var(--jolly-slider-progress, 0) * (100% - var(--jolly-slider-knob)) +
|
|
21
|
-
(var(--jolly-slider-knob) / 2)
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
position: relative;
|
|
25
|
-
flex: 1 1 auto;
|
|
26
|
-
min-width: 0;
|
|
27
|
-
height: var(--jolly-control-height, 20px);
|
|
28
|
-
background: none;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/*
|
|
32
|
-
* The track. A 2px groove with the filled portion in the accent, which reads
|
|
33
|
-
* as a measurement rather than as a second filled control.
|
|
34
|
-
*/
|
|
35
|
-
.lane::before {
|
|
36
|
-
content: "";
|
|
37
|
-
position: absolute;
|
|
38
|
-
top: 50%;
|
|
39
|
-
inset-inline: var(--jolly-slider-inset);
|
|
40
|
-
height: var(--jolly-slider-track-height);
|
|
41
|
-
border-radius: 1px;
|
|
42
|
-
background: linear-gradient(
|
|
43
|
-
to right,
|
|
44
|
-
var(--jolly-slider-fill) 0 var(--jolly-slider-stop),
|
|
45
|
-
var(--jolly-slider-groove) var(--jolly-slider-stop) 100%
|
|
46
|
-
);
|
|
47
|
-
transform: translateY(-50%);
|
|
48
|
-
pointer-events: none;
|
|
49
|
-
transition: height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/* Hover changes only the handle color, so the track geometry stays still. */
|
|
53
|
-
.lane:hover {
|
|
54
|
-
--jolly-slider-thumb-fill: var(--jolly-field-active-color-hover);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/* Focus geometry locates the active slider in a long pane. */
|
|
58
|
-
.lane:has(input:focus-visible) {
|
|
59
|
-
--jolly-slider-track-height: 4px;
|
|
60
|
-
--jolly-slider-knob: 14px;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/* An invalid slider recolours the value itself, not just the groove behind it. */
|
|
64
|
-
:host([invalid]) .lane {
|
|
65
|
-
--jolly-slider-fill: var(--jolly-danger-border);
|
|
66
|
-
--jolly-slider-groove: var(--jolly-invalid-bg-focus);
|
|
67
|
-
--jolly-slider-thumb-fill: var(--jolly-danger-border);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
:host([readonly]) .lane {
|
|
71
|
-
--jolly-slider-groove: var(--jolly-control-bg-muted);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/*
|
|
75
|
-
* Override native range track and thumb rendering. The input contributes hit
|
|
76
|
-
* area and the knob; the lane draws everything else.
|
|
77
|
-
*/
|
|
78
|
-
.value input[type="range"] {
|
|
79
|
-
position: absolute;
|
|
80
|
-
inset: 0 var(--jolly-slider-inset);
|
|
81
|
-
width: auto;
|
|
82
|
-
height: 100%;
|
|
83
|
-
margin: 0;
|
|
84
|
-
padding: 0;
|
|
85
|
-
border: none;
|
|
86
|
-
background: none;
|
|
87
|
-
appearance: none;
|
|
88
|
-
cursor: pointer;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/*
|
|
92
|
-
* The shared field rules match "input" generically and outrank a plain
|
|
93
|
-
* type selector, so the range would otherwise pick up the control fill on
|
|
94
|
-
* hover, focus, invalid and readonly. The range paints nothing in any state.
|
|
95
|
-
*/
|
|
96
|
-
.value input[type="range"]:hover:not(:disabled),
|
|
97
|
-
.value input[type="range"]:focus,
|
|
98
|
-
.value input[type="range"]:focus-visible,
|
|
99
|
-
:host([invalid]) .value input[type="range"],
|
|
100
|
-
:host([readonly]) .value input[type="range"] {
|
|
101
|
-
background: none;
|
|
102
|
-
outline: none;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.value input[type="range"]::-webkit-slider-runnable-track {
|
|
106
|
-
height: 100%;
|
|
107
|
-
background: none;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
.value input[type="range"]::-moz-range-track {
|
|
111
|
-
height: 100%;
|
|
112
|
-
background: none;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/* The handle keeps equal dimensions when focus grows its square shape. */
|
|
116
|
-
.value input[type="range"]::-webkit-slider-thumb {
|
|
117
|
-
appearance: none;
|
|
118
|
-
width: var(--jolly-slider-knob, 10px);
|
|
119
|
-
height: var(--jolly-slider-knob, 10px);
|
|
120
|
-
margin-top: calc(
|
|
121
|
-
(var(--jolly-control-height, 20px) - var(--jolly-slider-knob, 10px)) / 2
|
|
122
|
-
);
|
|
123
|
-
border-radius: var(--jolly-radius-sm, 2px);
|
|
124
|
-
background: var(--jolly-slider-thumb-fill);
|
|
125
|
-
transition:
|
|
126
|
-
background-color var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
|
|
127
|
-
width var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
|
|
128
|
-
height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.value input[type="range"]::-moz-range-thumb {
|
|
132
|
-
width: var(--jolly-slider-knob, 10px);
|
|
133
|
-
height: var(--jolly-slider-knob, 10px);
|
|
134
|
-
border: none;
|
|
135
|
-
border-radius: var(--jolly-radius-sm, 2px);
|
|
136
|
-
background: var(--jolly-slider-thumb-fill);
|
|
137
|
-
transition:
|
|
138
|
-
background-color var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
|
|
139
|
-
width var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
|
|
140
|
-
height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/*
|
|
144
|
-
* Mixed values have no thumb position.
|
|
145
|
-
*/
|
|
146
|
-
:host([mixed]) .lane {
|
|
147
|
-
opacity: 0.35;
|
|
148
|
-
pointer-events: none;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/*
|
|
152
|
-
* A fixed readout column keeps the lane's right edge aligned down the pane.
|
|
153
|
-
*/
|
|
154
|
-
.value input.readout {
|
|
155
|
-
flex: 0 0 auto;
|
|
156
|
-
width: 6ch;
|
|
157
|
-
min-width: 0;
|
|
158
|
-
text-align: right;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
:host([disabled]) .value input[type="range"] {
|
|
162
|
-
cursor: default;
|
|
163
|
-
}
|
|
3
|
+
export const sliderStyles = css `
|
|
4
|
+
/*
|
|
5
|
+
* The lane paints nothing. It is only the positioning context and the hit
|
|
6
|
+
* area, so the slider reads as a measurement on the surface rather than as a
|
|
7
|
+
* filled control.
|
|
8
|
+
*
|
|
9
|
+
* The track, the range input and the stop calculation all share the same
|
|
10
|
+
* horizontal inset, so the fill edge lands under the knob centre.
|
|
11
|
+
*/
|
|
12
|
+
.lane {
|
|
13
|
+
--jolly-slider-knob: 10px;
|
|
14
|
+
--jolly-slider-track-height: 2px;
|
|
15
|
+
--jolly-slider-inset: var(--jolly-space-1, 4px);
|
|
16
|
+
--jolly-slider-groove: var(--jolly-groove);
|
|
17
|
+
--jolly-slider-fill: var(--jolly-field-active-color);
|
|
18
|
+
--jolly-slider-thumb-fill: var(--jolly-slider-fill);
|
|
19
|
+
--jolly-slider-stop: calc(
|
|
20
|
+
var(--jolly-slider-progress, 0) * (100% - var(--jolly-slider-knob)) +
|
|
21
|
+
(var(--jolly-slider-knob) / 2)
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
position: relative;
|
|
25
|
+
flex: 1 1 auto;
|
|
26
|
+
min-width: 0;
|
|
27
|
+
height: var(--jolly-control-height, 20px);
|
|
28
|
+
background: none;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/*
|
|
32
|
+
* The track. A 2px groove with the filled portion in the accent, which reads
|
|
33
|
+
* as a measurement rather than as a second filled control.
|
|
34
|
+
*/
|
|
35
|
+
.lane::before {
|
|
36
|
+
content: "";
|
|
37
|
+
position: absolute;
|
|
38
|
+
top: 50%;
|
|
39
|
+
inset-inline: var(--jolly-slider-inset);
|
|
40
|
+
height: var(--jolly-slider-track-height);
|
|
41
|
+
border-radius: 1px;
|
|
42
|
+
background: linear-gradient(
|
|
43
|
+
to right,
|
|
44
|
+
var(--jolly-slider-fill) 0 var(--jolly-slider-stop),
|
|
45
|
+
var(--jolly-slider-groove) var(--jolly-slider-stop) 100%
|
|
46
|
+
);
|
|
47
|
+
transform: translateY(-50%);
|
|
48
|
+
pointer-events: none;
|
|
49
|
+
transition: height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Hover changes only the handle color, so the track geometry stays still. */
|
|
53
|
+
.lane:hover {
|
|
54
|
+
--jolly-slider-thumb-fill: var(--jolly-field-active-color-hover);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Focus geometry locates the active slider in a long pane. */
|
|
58
|
+
.lane:has(input:focus-visible) {
|
|
59
|
+
--jolly-slider-track-height: 4px;
|
|
60
|
+
--jolly-slider-knob: 14px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* An invalid slider recolours the value itself, not just the groove behind it. */
|
|
64
|
+
:host([invalid]) .lane {
|
|
65
|
+
--jolly-slider-fill: var(--jolly-danger-border);
|
|
66
|
+
--jolly-slider-groove: var(--jolly-invalid-bg-focus);
|
|
67
|
+
--jolly-slider-thumb-fill: var(--jolly-danger-border);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
:host([readonly]) .lane {
|
|
71
|
+
--jolly-slider-groove: var(--jolly-control-bg-muted);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* Override native range track and thumb rendering. The input contributes hit
|
|
76
|
+
* area and the knob; the lane draws everything else.
|
|
77
|
+
*/
|
|
78
|
+
.value input[type="range"] {
|
|
79
|
+
position: absolute;
|
|
80
|
+
inset: 0 var(--jolly-slider-inset);
|
|
81
|
+
width: auto;
|
|
82
|
+
height: 100%;
|
|
83
|
+
margin: 0;
|
|
84
|
+
padding: 0;
|
|
85
|
+
border: none;
|
|
86
|
+
background: none;
|
|
87
|
+
appearance: none;
|
|
88
|
+
cursor: pointer;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/*
|
|
92
|
+
* The shared field rules match "input" generically and outrank a plain
|
|
93
|
+
* type selector, so the range would otherwise pick up the control fill on
|
|
94
|
+
* hover, focus, invalid and readonly. The range paints nothing in any state.
|
|
95
|
+
*/
|
|
96
|
+
.value input[type="range"]:hover:not(:disabled),
|
|
97
|
+
.value input[type="range"]:focus,
|
|
98
|
+
.value input[type="range"]:focus-visible,
|
|
99
|
+
:host([invalid]) .value input[type="range"],
|
|
100
|
+
:host([readonly]) .value input[type="range"] {
|
|
101
|
+
background: none;
|
|
102
|
+
outline: none;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.value input[type="range"]::-webkit-slider-runnable-track {
|
|
106
|
+
height: 100%;
|
|
107
|
+
background: none;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.value input[type="range"]::-moz-range-track {
|
|
111
|
+
height: 100%;
|
|
112
|
+
background: none;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* The handle keeps equal dimensions when focus grows its square shape. */
|
|
116
|
+
.value input[type="range"]::-webkit-slider-thumb {
|
|
117
|
+
appearance: none;
|
|
118
|
+
width: var(--jolly-slider-knob, 10px);
|
|
119
|
+
height: var(--jolly-slider-knob, 10px);
|
|
120
|
+
margin-top: calc(
|
|
121
|
+
(var(--jolly-control-height, 20px) - var(--jolly-slider-knob, 10px)) / 2
|
|
122
|
+
);
|
|
123
|
+
border-radius: var(--jolly-radius-sm, 2px);
|
|
124
|
+
background: var(--jolly-slider-thumb-fill);
|
|
125
|
+
transition:
|
|
126
|
+
background-color var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
|
|
127
|
+
width var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
|
|
128
|
+
height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.value input[type="range"]::-moz-range-thumb {
|
|
132
|
+
width: var(--jolly-slider-knob, 10px);
|
|
133
|
+
height: var(--jolly-slider-knob, 10px);
|
|
134
|
+
border: none;
|
|
135
|
+
border-radius: var(--jolly-radius-sm, 2px);
|
|
136
|
+
background: var(--jolly-slider-thumb-fill);
|
|
137
|
+
transition:
|
|
138
|
+
background-color var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
|
|
139
|
+
width var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
|
|
140
|
+
height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/*
|
|
144
|
+
* Mixed values have no thumb position.
|
|
145
|
+
*/
|
|
146
|
+
:host([mixed]) .lane {
|
|
147
|
+
opacity: 0.35;
|
|
148
|
+
pointer-events: none;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/*
|
|
152
|
+
* A fixed readout column keeps the lane's right edge aligned down the pane.
|
|
153
|
+
*/
|
|
154
|
+
.value input.readout {
|
|
155
|
+
flex: 0 0 auto;
|
|
156
|
+
width: 6ch;
|
|
157
|
+
min-width: 0;
|
|
158
|
+
text-align: right;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
:host([disabled]) .value input[type="range"] {
|
|
162
|
+
cursor: default;
|
|
163
|
+
}
|
|
164
164
|
`;
|
|
165
165
|
//# sourceMappingURL=Slider.styles.js.map
|
package/dist/controls/Text.js
CHANGED
|
@@ -26,23 +26,23 @@ let Text = class Text extends JollyField {
|
|
|
26
26
|
this.value = "";
|
|
27
27
|
}
|
|
28
28
|
renderValue() {
|
|
29
|
-
return html `
|
|
30
|
-
<input
|
|
31
|
-
type="text"
|
|
32
|
-
.value=${this.draft ?? this.#displayed}
|
|
33
|
-
placeholder=${this.mixed ? MIXED_PLACEHOLDER : this.placeholder}
|
|
34
|
-
?disabled=${this.disabled}
|
|
35
|
-
?readonly=${this.inputReadonly}
|
|
36
|
-
?data-pointer-focus=${this.#pointerFocus.active}
|
|
37
|
-
aria-readonly=${this.readonlyAria}
|
|
38
|
-
aria-disabled=${this.lockedAria}
|
|
39
|
-
aria-description=${this.lockDescription}
|
|
40
|
-
aria-invalid=${this.displayError === null ? nothing : "true"}
|
|
41
|
-
@input=${this.#onType}
|
|
42
|
-
@focus=${this.#pointerFocus.onFocus}
|
|
43
|
-
@keydown=${this.#onKeyDown}
|
|
44
|
-
@blur=${this.#onBlur}
|
|
45
|
-
>
|
|
29
|
+
return html `
|
|
30
|
+
<input
|
|
31
|
+
type="text"
|
|
32
|
+
.value=${this.draft ?? this.#displayed}
|
|
33
|
+
placeholder=${this.mixed ? MIXED_PLACEHOLDER : this.placeholder}
|
|
34
|
+
?disabled=${this.disabled}
|
|
35
|
+
?readonly=${this.inputReadonly}
|
|
36
|
+
?data-pointer-focus=${this.#pointerFocus.active}
|
|
37
|
+
aria-readonly=${this.readonlyAria}
|
|
38
|
+
aria-disabled=${this.lockedAria}
|
|
39
|
+
aria-description=${this.lockDescription}
|
|
40
|
+
aria-invalid=${this.displayError === null ? nothing : "true"}
|
|
41
|
+
@input=${this.#onType}
|
|
42
|
+
@focus=${this.#pointerFocus.onFocus}
|
|
43
|
+
@keydown=${this.#onKeyDown}
|
|
44
|
+
@blur=${this.#onBlur}
|
|
45
|
+
>
|
|
46
46
|
`;
|
|
47
47
|
}
|
|
48
48
|
/**
|
package/dist/data/Tree.d.ts
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
import { LitElement, type TemplateResult } from "lit";
|
|
2
2
|
import type { TreeDropAccept, TreeNode } from "./Tree.types.ts";
|
|
3
3
|
import "../icon/Icon.ts";
|
|
4
|
-
/**
|
|
5
|
-
* A generic tree of `{ id, label, children }` rows, with drag and drop
|
|
6
|
-
* reparenting, keyboard navigation and optional visibility/lock toggles.
|
|
7
|
-
* Knows nothing about what a row represents.
|
|
8
|
-
*
|
|
9
|
-
* Fully controlled: `nodes`, `selected` and `expanded` are consumer owned,
|
|
10
|
-
* the same as `value` on a field. A drop, a toggle or a selection change
|
|
11
|
-
* emits an intent event; the element repaints only once the consumer writes
|
|
12
|
-
* the new value back. See `docs/api/data/tree.md`.
|
|
13
|
-
*/
|
|
14
4
|
export declare class Tree<TData = unknown> extends LitElement {
|
|
15
5
|
#private;
|
|
16
6
|
static styles: import("lit").CSSResult;
|
|
@@ -22,10 +12,6 @@ export declare class Tree<TData = unknown> extends LitElement {
|
|
|
22
12
|
rowDrag: boolean;
|
|
23
13
|
renamable: boolean;
|
|
24
14
|
indentGuides: boolean;
|
|
25
|
-
/**
|
|
26
|
-
* Domain veto for a candidate drop. Consulted while dragging as well as on
|
|
27
|
-
* commit, so a move this rejects never paints a drop indicator.
|
|
28
|
-
*/
|
|
29
15
|
acceptDrop: TreeDropAccept | null;
|
|
30
16
|
private _renamingId;
|
|
31
17
|
private _anchorId;
|
package/dist/data/Tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tree.d.ts","sourceRoot":"","sources":["../../src/data/Tree.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EAGV,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAwBb,OAAO,KAAK,EACV,cAAc,EAEd,QAAQ,EACT,MAAM,iBAAiB,CAAC;AAGzB,OAAO,iBAAiB,CAAC;AAkBzB
|
|
1
|
+
{"version":3,"file":"Tree.d.ts","sourceRoot":"","sources":["../../src/data/Tree.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EAGV,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAwBb,OAAO,KAAK,EACV,cAAc,EAEd,QAAQ,EACT,MAAM,iBAAiB,CAAC;AAGzB,OAAO,iBAAiB,CAAC;AAkBzB,qBACa,IAAI,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,UAAU;;IACnD,OAAgB,MAAM,0BAAc;IAG5B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAGzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IAGnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IAGnB,QAAQ,EAAE,OAAO,CAAC;IAGlB,WAAW,EAAE,OAAO,CAAC;IAOrB,OAAO,EAAE,OAAO,CAAC;IAGjB,SAAS,EAAE,OAAO,CAAC;IAOnB,YAAY,EAAE,OAAO,CAAC;IAGtB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAE1C,QACgB,WAAW,CAAgB;IAE3C,QACgB,SAAS,CAAgB;IAEzC,QACgB,YAAY,CAAqB;IAEjD,QACgB,aAAa,CAAkB;IAE/C,QACgB,UAAU,CAAmB;;IAuBpC,MAAM,IAAI,cAAc;cA6Id,OAAO,CACxB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI;CA4gBR;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,IAAI,CAAC;KACpB;CACF"}
|