@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.
Files changed (117) hide show
  1. package/LICENSE +44 -44
  2. package/NOTICE +9 -0
  3. package/README.md +194 -194
  4. package/dist/containers/Dialog.js +11 -11
  5. package/dist/containers/Dialog.styles.js +48 -48
  6. package/dist/containers/Dock.js +11 -11
  7. package/dist/containers/Dock.styles.js +351 -351
  8. package/dist/containers/DockLayout.js +4 -4
  9. package/dist/containers/Floating.js +23 -23
  10. package/dist/containers/Floating.styles.js +116 -116
  11. package/dist/containers/Folder.js +28 -28
  12. package/dist/containers/Folder.styles.js +221 -221
  13. package/dist/containers/Pane.js +50 -50
  14. package/dist/containers/Pane.styles.js +186 -186
  15. package/dist/containers/Rail.js +18 -18
  16. package/dist/containers/Tab.js +10 -10
  17. package/dist/containers/Tabs.js +26 -26
  18. package/dist/containers/Tabs.styles.js +93 -93
  19. package/dist/containers/Toolbar.js +25 -25
  20. package/dist/containers/resize.js +5 -5
  21. package/dist/controls/Button.js +9 -9
  22. package/dist/controls/Button.styles.js +79 -79
  23. package/dist/controls/ButtonGroup.js +28 -28
  24. package/dist/controls/ButtonGroup.styles.js +98 -98
  25. package/dist/controls/Checkbox.js +14 -14
  26. package/dist/controls/Checkbox.styles.js +111 -111
  27. package/dist/controls/Color.js +51 -51
  28. package/dist/controls/Color.styles.js +83 -83
  29. package/dist/controls/ColorPicker.js +104 -104
  30. package/dist/controls/ColorPicker.styles.js +296 -296
  31. package/dist/controls/Control.js +33 -33
  32. package/dist/controls/Control.styles.js +102 -102
  33. package/dist/controls/Controls.js +11 -11
  34. package/dist/controls/Controls.styles.js +98 -98
  35. package/dist/controls/Flags.js +18 -18
  36. package/dist/controls/Flags.styles.js +59 -59
  37. package/dist/controls/Number.js +21 -21
  38. package/dist/controls/Number.styles.js +44 -44
  39. package/dist/controls/PropertyRow.js +13 -13
  40. package/dist/controls/PropertyRow.styles.js +105 -105
  41. package/dist/controls/Range.js +24 -24
  42. package/dist/controls/Range.styles.js +25 -25
  43. package/dist/controls/Select.js +23 -23
  44. package/dist/controls/Select.styles.js +47 -47
  45. package/dist/controls/Separator.js +11 -11
  46. package/dist/controls/Separator.styles.js +45 -45
  47. package/dist/controls/Slider.js +36 -36
  48. package/dist/controls/Slider.styles.js +161 -161
  49. package/dist/controls/Text.js +17 -17
  50. package/dist/data/Tree.d.ts +0 -14
  51. package/dist/data/Tree.d.ts.map +1 -1
  52. package/dist/data/Tree.js +90 -120
  53. package/dist/data/Tree.js.map +1 -1
  54. package/dist/data/Tree.styles.d.ts.map +1 -1
  55. package/dist/data/Tree.styles.js +220 -237
  56. package/dist/data/Tree.styles.js.map +1 -1
  57. package/dist/data/dropZone.d.ts +0 -10
  58. package/dist/data/dropZone.d.ts.map +1 -1
  59. package/dist/data/dropZone.js +0 -10
  60. package/dist/data/dropZone.js.map +1 -1
  61. package/dist/data/resolveRename.d.ts +0 -3
  62. package/dist/data/resolveRename.d.ts.map +1 -1
  63. package/dist/data/resolveRename.js +0 -3
  64. package/dist/data/resolveRename.js.map +1 -1
  65. package/dist/data/resolveReparent.d.ts +0 -7
  66. package/dist/data/resolveReparent.d.ts.map +1 -1
  67. package/dist/data/resolveReparent.js +0 -6
  68. package/dist/data/resolveReparent.js.map +1 -1
  69. package/dist/data/rowDragSession.d.ts +0 -8
  70. package/dist/data/rowDragSession.d.ts.map +1 -1
  71. package/dist/data/rowDragSession.js +0 -6
  72. package/dist/data/rowDragSession.js.map +1 -1
  73. package/dist/data/treeNodes.d.ts +0 -6
  74. package/dist/data/treeNodes.d.ts.map +1 -1
  75. package/dist/data/treeNodes.js +2 -7
  76. package/dist/data/treeNodes.js.map +1 -1
  77. package/dist/feedback/JollyPixelLogo.js +84 -84
  78. package/dist/feedback/Loading.js +29 -29
  79. package/dist/feedback/Loading.styles.js +230 -230
  80. package/dist/feedback/Log.js +8 -8
  81. package/dist/feedback/Log.styles.js +61 -61
  82. package/dist/feedback/Progress.js +17 -17
  83. package/dist/feedback/Progress.styles.js +146 -146
  84. package/dist/field/JollyField.js +51 -51
  85. package/dist/field/JollyField.styles.js +429 -429
  86. package/dist/icon/Icon.js +24 -24
  87. package/dist/icon/builtins.js +126 -126
  88. package/dist/interaction/drag/DragSession.js +6 -6
  89. package/dist/interaction/scrub/ScrubController.js +6 -6
  90. package/dist/math/AxisController.js +22 -22
  91. package/dist/math/Point2d.js +12 -12
  92. package/dist/math/Point2d.styles.js +49 -49
  93. package/dist/math/Quaternion.js +4 -4
  94. package/dist/math/Transform.js +40 -40
  95. package/dist/math/Transform.styles.js +17 -17
  96. package/dist/math/VectorField.js +4 -4
  97. package/dist/math/VectorField.styles.js +102 -102
  98. package/dist/monitors/Graph.js +8 -8
  99. package/dist/monitors/Graph.styles.js +42 -42
  100. package/dist/monitors/Monitor.js +5 -5
  101. package/dist/monitors/Monitor.styles.js +31 -31
  102. package/dist/peer/Presence.js +33 -33
  103. package/dist/peer/Presence.styles.js +82 -82
  104. package/dist/stats/Stats.js +6 -6
  105. package/dist/stats/Stats.styles.js +54 -54
  106. package/dist/theme/components/DensityControl.js +16 -16
  107. package/dist/theme/components/ThemeControl.js +16 -16
  108. package/dist/theme/components/ThemePreferences.js +18 -18
  109. package/dist/theme/font.js +9 -9
  110. package/dist/theme/styles/hiddenStyles.js +4 -4
  111. package/dist/theme/styles/mixins.js +16 -16
  112. package/dist/theme/styles/themeStyles.js +4 -4
  113. package/dist/theme/tokens/density.js +19 -19
  114. package/dist/theme/tokens/ramps.js +40 -40
  115. package/dist/theme/tokens/scales.js +56 -56
  116. package/dist/theme/tokens/semantic.js +184 -184
  117. package/package.json +6 -5
@@ -1,21 +1,21 @@
1
1
  // Import Third-party Dependencies
2
2
  import { css } from "lit";
3
- export const transformStyles = css `
4
- :host {
5
- /*
6
- * Position, rotation and scale lock independently, so any one of them can
7
- * grow its gutter for a lock glyph. Reserving it for all three up front is
8
- * what keeps their labels aligned regardless of which is locked.
9
- */
10
- --jolly-gutter-width: 14px;
11
-
12
- display: flex;
13
- flex-direction: column;
14
- gap: var(--jolly-row-gap, 0px);
15
- }
16
-
17
- :host([label-position="top"]) {
18
- gap: var(--jolly-space-2, 8px);
19
- }
3
+ export const transformStyles = css `
4
+ :host {
5
+ /*
6
+ * Position, rotation and scale lock independently, so any one of them can
7
+ * grow its gutter for a lock glyph. Reserving it for all three up front is
8
+ * what keeps their labels aligned regardless of which is locked.
9
+ */
10
+ --jolly-gutter-width: 14px;
11
+
12
+ display: flex;
13
+ flex-direction: column;
14
+ gap: var(--jolly-row-gap, 0px);
15
+ }
16
+
17
+ :host([label-position="top"]) {
18
+ gap: var(--jolly-space-2, 8px);
19
+ }
20
20
  `;
21
21
  //# sourceMappingURL=Transform.styles.js.map
@@ -51,10 +51,10 @@ export class VectorField extends JollyField {
51
51
  return vectorValueEquals(a, b);
52
52
  }
53
53
  renderValue() {
54
- return html `
55
- <div class="axes">
56
- ${this.getAxisKeys().map((axis) => this.#controllerFor(axis).render())}
57
- </div>
54
+ return html `
55
+ <div class="axes">
56
+ ${this.getAxisKeys().map((axis) => this.#controllerFor(axis).render())}
57
+ </div>
58
58
  `;
59
59
  }
60
60
  #syncAxisKeys() {
@@ -5,107 +5,107 @@ import { fillTransition } from "../theme/styles/mixins.js";
5
5
  /**
6
6
  * Axis-box styles shared by vectors and Quaternion's Euler inputs.
7
7
  */
8
- export const vectorFieldStyles = css `
9
- .axes {
10
- display: flex;
11
- flex: 1 1 auto;
12
- gap: var(--jolly-space-1, 4px);
13
- min-width: 0;
14
- }
15
-
16
- .axis-box {
17
- position: relative;
18
- display: flex;
19
- flex: 1 1 0;
20
- align-items: center;
21
- min-width: 0;
22
- }
23
-
24
- .axis-box input {
25
- flex: 1 1 auto;
26
- min-width: 0;
27
- height: var(--jolly-control-height, 20px);
28
- border: 0;
29
- border-radius: var(--jolly-radius-sm, 2px);
30
- background: var(--jolly-control-bg, transparent);
31
- color: inherit;
32
- font: inherit;
33
- font-variant-numeric: inherit;
34
- ${fillTransition}
35
- }
36
-
37
- /* Match the shared input rule's specificity to preserve the scrub inset. */
38
- .value .axis-box input:not([type="color"]) {
39
- padding: 0 var(--jolly-space-1, 4px) 0 10px;
40
- }
41
-
42
- .axis-box input:hover:not(:disabled) {
43
- background: var(--jolly-control-bg-hover);
44
- }
45
-
46
- .axis-box input:focus {
47
- background: var(--jolly-control-bg-focus);
48
- outline: none;
49
- }
50
-
51
- :host([invalid]) .axis-box input {
52
- background: var(--jolly-invalid-bg);
53
- }
54
-
55
- :host([readonly]) .axis-box input {
56
- background: var(--jolly-control-bg-muted);
57
- }
58
-
59
- /* Axis color is decorative; aria-label carries the accessible identity. */
60
- .axis-tag {
61
- position: absolute;
62
- top: 0;
63
- right: 0;
64
- z-index: 1;
65
- width: 0;
66
- height: 0;
67
- overflow: hidden;
68
- border-width: 6px;
69
- border-style: solid;
70
- border-color:
71
- var(--jolly-axis-color, var(--jolly-border-strong))
72
- var(--jolly-axis-color, var(--jolly-border-strong))
73
- transparent
74
- transparent;
75
- color: transparent;
76
- font-size: 0;
77
- pointer-events: none;
78
- }
79
-
80
- .scrub-handle {
81
- position: absolute;
82
- inset-block: 1px;
83
- left: 1px;
84
- z-index: 1;
85
- width: 8px;
86
- border-radius: var(--jolly-radius-sm, 2px) 0 0 var(--jolly-radius-sm, 2px);
87
- }
88
-
89
- :host([scrubbable]) .scrub-handle {
90
- cursor: ew-resize;
91
- touch-action: none;
92
- }
93
-
94
- .scrub-handle::before {
95
- content: "";
96
- position: absolute;
97
- top: 50%;
98
- left: 3px;
99
- width: 2px;
100
- height: 55%;
101
- border-radius: 1px;
102
- background: var(--jolly-groove);
103
- transform: translateY(-50%);
104
- ${fillTransition}
105
- }
106
-
107
- :host([scrubbable]) .scrub-handle:hover::before {
108
- background: var(--jolly-accent-fill);
109
- }
8
+ export const vectorFieldStyles = css `
9
+ .axes {
10
+ display: flex;
11
+ flex: 1 1 auto;
12
+ gap: var(--jolly-space-1, 4px);
13
+ min-width: 0;
14
+ }
15
+
16
+ .axis-box {
17
+ position: relative;
18
+ display: flex;
19
+ flex: 1 1 0;
20
+ align-items: center;
21
+ min-width: 0;
22
+ }
23
+
24
+ .axis-box input {
25
+ flex: 1 1 auto;
26
+ min-width: 0;
27
+ height: var(--jolly-control-height, 20px);
28
+ border: 0;
29
+ border-radius: var(--jolly-radius-sm, 2px);
30
+ background: var(--jolly-control-bg, transparent);
31
+ color: inherit;
32
+ font: inherit;
33
+ font-variant-numeric: inherit;
34
+ ${fillTransition}
35
+ }
36
+
37
+ /* Match the shared input rule's specificity to preserve the scrub inset. */
38
+ .value .axis-box input:not([type="color"]) {
39
+ padding: 0 var(--jolly-space-1, 4px) 0 10px;
40
+ }
41
+
42
+ .axis-box input:hover:not(:disabled) {
43
+ background: var(--jolly-control-bg-hover);
44
+ }
45
+
46
+ .axis-box input:focus {
47
+ background: var(--jolly-control-bg-focus);
48
+ outline: none;
49
+ }
50
+
51
+ :host([invalid]) .axis-box input {
52
+ background: var(--jolly-invalid-bg);
53
+ }
54
+
55
+ :host([readonly]) .axis-box input {
56
+ background: var(--jolly-control-bg-muted);
57
+ }
58
+
59
+ /* Axis color is decorative; aria-label carries the accessible identity. */
60
+ .axis-tag {
61
+ position: absolute;
62
+ top: 0;
63
+ right: 0;
64
+ z-index: 1;
65
+ width: 0;
66
+ height: 0;
67
+ overflow: hidden;
68
+ border-width: 6px;
69
+ border-style: solid;
70
+ border-color:
71
+ var(--jolly-axis-color, var(--jolly-border-strong))
72
+ var(--jolly-axis-color, var(--jolly-border-strong))
73
+ transparent
74
+ transparent;
75
+ color: transparent;
76
+ font-size: 0;
77
+ pointer-events: none;
78
+ }
79
+
80
+ .scrub-handle {
81
+ position: absolute;
82
+ inset-block: 1px;
83
+ left: 1px;
84
+ z-index: 1;
85
+ width: 8px;
86
+ border-radius: var(--jolly-radius-sm, 2px) 0 0 var(--jolly-radius-sm, 2px);
87
+ }
88
+
89
+ :host([scrubbable]) .scrub-handle {
90
+ cursor: ew-resize;
91
+ touch-action: none;
92
+ }
93
+
94
+ .scrub-handle::before {
95
+ content: "";
96
+ position: absolute;
97
+ top: 50%;
98
+ left: 3px;
99
+ width: 2px;
100
+ height: 55%;
101
+ border-radius: 1px;
102
+ background: var(--jolly-groove);
103
+ transform: translateY(-50%);
104
+ ${fillTransition}
105
+ }
106
+
107
+ :host([scrubbable]) .scrub-handle:hover::before {
108
+ background: var(--jolly-accent-fill);
109
+ }
110
110
  `;
111
111
  //# sourceMappingURL=VectorField.styles.js.map
@@ -71,14 +71,14 @@ let GraphElement = class GraphElement extends LitElement {
71
71
  this.#draw();
72
72
  }
73
73
  render() {
74
- return html `
75
- <div class="wrap">
76
- ${this.#renderLabel()}
77
- <div class="canvas-wrap">
78
- <canvas></canvas>
79
- <span class="value">${this.#displayed}</span>
80
- </div>
81
- </div>
74
+ return html `
75
+ <div class="wrap">
76
+ ${this.#renderLabel()}
77
+ <div class="canvas-wrap">
78
+ <canvas></canvas>
79
+ <span class="value">${this.#displayed}</span>
80
+ </div>
81
+ </div>
82
82
  `;
83
83
  }
84
84
  #renderLabel() {
@@ -1,46 +1,46 @@
1
1
  // Import Third-party Dependencies
2
2
  import { css } from "lit";
3
- export const graphStyles = 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
- :host([disabled]) {
11
- opacity: 0.5;
12
- }
13
-
14
- .wrap {
15
- display: flex;
16
- flex-direction: column;
17
- gap: calc(var(--jolly-space-1, 4px) / 2);
18
- }
19
-
20
- .label {
21
- color: var(--jolly-text-muted);
22
- }
23
-
24
- .canvas-wrap {
25
- position: relative;
26
- }
27
-
28
- canvas {
29
- display: block;
30
- width: 100%;
31
- height: calc(var(--jolly-row-height, 20px) * var(--jolly-graph-rows, 3));
32
- border-radius: var(--jolly-radius-sm, 2px);
33
- background: var(--jolly-control-bg);
34
- }
35
-
36
- .value {
37
- position: absolute;
38
- top: 2px;
39
- right: 4px;
40
- color: var(--jolly-text);
41
- font-variant-numeric: var(--jolly-font-numeric, tabular-nums);
42
- text-shadow: 0 1px 2px var(--jolly-surface, transparent);
43
- pointer-events: none;
44
- }
3
+ export const graphStyles = 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
+ :host([disabled]) {
11
+ opacity: 0.5;
12
+ }
13
+
14
+ .wrap {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: calc(var(--jolly-space-1, 4px) / 2);
18
+ }
19
+
20
+ .label {
21
+ color: var(--jolly-text-muted);
22
+ }
23
+
24
+ .canvas-wrap {
25
+ position: relative;
26
+ }
27
+
28
+ canvas {
29
+ display: block;
30
+ width: 100%;
31
+ height: calc(var(--jolly-row-height, 20px) * var(--jolly-graph-rows, 3));
32
+ border-radius: var(--jolly-radius-sm, 2px);
33
+ background: var(--jolly-control-bg);
34
+ }
35
+
36
+ .value {
37
+ position: absolute;
38
+ top: 2px;
39
+ right: 4px;
40
+ color: var(--jolly-text);
41
+ font-variant-numeric: var(--jolly-font-numeric, tabular-nums);
42
+ text-shadow: 0 1px 2px var(--jolly-surface, transparent);
43
+ pointer-events: none;
44
+ }
45
45
  `;
46
46
  //# sourceMappingURL=Graph.styles.js.map
@@ -28,11 +28,11 @@ let MonitorElement = class MonitorElement extends LitElement {
28
28
  this.format = undefined;
29
29
  }
30
30
  render() {
31
- return html `
32
- <div class="row">
33
- <span class="label">${this.label}</span>
34
- <span class="value">${this.#displayed}</span>
35
- </div>
31
+ return html `
32
+ <div class="row">
33
+ <span class="label">${this.label}</span>
34
+ <span class="value">${this.#displayed}</span>
35
+ </div>
36
36
  `;
37
37
  }
38
38
  get #displayed() {
@@ -3,36 +3,36 @@ import { css } from "lit";
3
3
  // Import Internal Dependencies
4
4
  import { kFallback } from "../theme/styles/fallbacks.js";
5
5
  import { truncate } from "../theme/styles/mixins.js";
6
- export const monitorStyles = css `
7
- :host {
8
- display: block;
9
- font-family: var(--jolly-font-family, ui-monospace, monospace);
10
- font-size: var(--jolly-font-size, 11px);
11
- color: var(--jolly-text, ${kFallback.text});
12
- }
13
-
14
- :host([disabled]) {
15
- opacity: 0.5;
16
- }
17
-
18
- .row {
19
- display: flex;
20
- align-items: center;
21
- gap: var(--jolly-space-1, 4px);
22
- min-height: var(--jolly-row-height, 20px);
23
- padding-inline: var(--jolly-space-1, 4px);
24
- }
25
-
26
- .label {
27
- flex: 1 1 auto;
28
- min-width: 0;
29
- color: var(--jolly-text-muted);
30
- ${truncate}
31
- }
32
-
33
- .value {
34
- flex: 0 0 auto;
35
- font-variant-numeric: var(--jolly-font-numeric, tabular-nums);
36
- }
6
+ export const monitorStyles = css `
7
+ :host {
8
+ display: block;
9
+ font-family: var(--jolly-font-family, ui-monospace, monospace);
10
+ font-size: var(--jolly-font-size, 11px);
11
+ color: var(--jolly-text, ${kFallback.text});
12
+ }
13
+
14
+ :host([disabled]) {
15
+ opacity: 0.5;
16
+ }
17
+
18
+ .row {
19
+ display: flex;
20
+ align-items: center;
21
+ gap: var(--jolly-space-1, 4px);
22
+ min-height: var(--jolly-row-height, 20px);
23
+ padding-inline: var(--jolly-space-1, 4px);
24
+ }
25
+
26
+ .label {
27
+ flex: 1 1 auto;
28
+ min-width: 0;
29
+ color: var(--jolly-text-muted);
30
+ ${truncate}
31
+ }
32
+
33
+ .value {
34
+ flex: 0 0 auto;
35
+ font-variant-numeric: var(--jolly-font-numeric, tabular-nums);
36
+ }
37
37
  `;
38
38
  //# sourceMappingURL=Monitor.styles.js.map
@@ -69,48 +69,48 @@ let PresenceElement = class PresenceElement extends LitElement {
69
69
  render() {
70
70
  const visiblePeers = this.#visiblePeers();
71
71
  const overflow = this.#peers.length - visiblePeers.length;
72
- return html `
73
- <div class="summary" part="summary" aria-live="polite">
74
- ${formatConnectionCount(this.#peers.length)}
75
- </div>
76
- <ul class="list" part="list">
77
- ${visiblePeers.map((peer) => this.#renderPeer(peer))}
72
+ return html `
73
+ <div class="summary" part="summary" aria-live="polite">
74
+ ${formatConnectionCount(this.#peers.length)}
75
+ </div>
76
+ <ul class="list" part="list">
77
+ ${visiblePeers.map((peer) => this.#renderPeer(peer))}
78
78
  ${overflow > 0
79
- ? html `
80
- <li class="overflow" part="overflow">+${overflow} more</li>
79
+ ? html `
80
+ <li class="overflow" part="overflow">+${overflow} more</li>
81
81
  `
82
- : ""}
83
- </ul>
82
+ : ""}
83
+ </ul>
84
84
  `;
85
85
  }
86
86
  #renderPeer(peer) {
87
- const body = html `
88
- <span
89
- class="swatch"
90
- part="swatch"
91
- role="img"
92
- aria-label=${`${peer.displayName}'s color`}
93
- style=${`background-color: ${peer.color}`}
94
- ></span>
95
- <span class=${peer.self ? "self" : ""}>
96
- ${peer.displayName}${peer.self ? " (you)" : ""}
97
- </span>
87
+ const body = html `
88
+ <span
89
+ class="swatch"
90
+ part="swatch"
91
+ role="img"
92
+ aria-label=${`${peer.displayName}'s color`}
93
+ style=${`background-color: ${peer.color}`}
94
+ ></span>
95
+ <span class=${peer.self ? "self" : ""}>
96
+ ${peer.displayName}${peer.self ? " (you)" : ""}
97
+ </span>
98
98
  `;
99
99
  if (!this.#selectable || peer.self) {
100
- return html `
101
- <li class="peer" part="peer">${body}</li>
100
+ return html `
101
+ <li class="peer" part="peer">${body}</li>
102
102
  `;
103
103
  }
104
- return html `
105
- <li class="peer" part="peer">
106
- <button
107
- class="select"
108
- part="peer-button"
109
- type="button"
110
- aria-label=${`Select ${peer.displayName}`}
111
- @click=${() => this.#select(peer)}
112
- >${body}</button>
113
- </li>
104
+ return html `
105
+ <li class="peer" part="peer">
106
+ <button
107
+ class="select"
108
+ part="peer-button"
109
+ type="button"
110
+ aria-label=${`Select ${peer.displayName}`}
111
+ @click=${() => this.#select(peer)}
112
+ >${body}</button>
113
+ </li>
114
114
  `;
115
115
  }
116
116
  #select(peer) {