@pathscale/ui 2.9.2 → 2.10.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 (29) hide show
  1. package/dist/components/_shared/controlledState.d.ts +14 -0
  2. package/dist/components/_shared/controlledState.js +7 -0
  3. package/dist/components/color-wheel/ComplexColorWheel.generated.js +23 -22
  4. package/dist/components/color-wheel-flower/ColorWheelFlower.generated.js +9 -5
  5. package/dist/components/color-wheel-flower/ColorWheelFlower.geometry.d.ts +13 -0
  6. package/dist/components/color-wheel-flower/ColorWheelFlower.geometry.js +9 -0
  7. package/dist/components/inline-edit/InlineEdit.css +79 -0
  8. package/dist/components/inline-edit/InlineEdit.generated.d.ts +27 -0
  9. package/dist/components/inline-edit/InlineEdit.generated.js +117 -0
  10. package/dist/components/inline-edit/InlineEdit.recipe.d.ts +26 -0
  11. package/dist/components/inline-edit/InlineEdit.recipe.js +65 -0
  12. package/dist/components/inline-edit/index.d.ts +3 -0
  13. package/dist/components/inline-edit/index.js +3 -0
  14. package/dist/components/language-switcher/LanguageSwitcher.generated.d.ts +1 -1
  15. package/dist/components/language-switcher/LanguageSwitcher.generated.js +49 -79
  16. package/dist/components/metal-border/MetalBorder.generated.js +2 -2
  17. package/dist/components/popover/Popover.css +6 -0
  18. package/dist/components/popover/Popover.generated.d.ts +3 -3
  19. package/dist/components/popover/Popover.generated.js +19 -16
  20. package/dist/components/slider/Slider.generated.js +6 -5
  21. package/dist/components/slider/Slider.interactions.d.ts +2 -0
  22. package/dist/components/slider/Slider.interactions.js +1 -1
  23. package/dist/components/theme-color-picker/hueShift.js +1 -1
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.js +1 -0
  26. package/dist/layouts.manifest.json +4 -1
  27. package/dist/motion/engine.js +1 -0
  28. package/dist/purge-manifest.json +126 -2
  29. package/package.json +1 -1
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Apply one requested controlled/uncontrolled boolean-state transition.
3
+ *
4
+ * Capture whether the request changes the current value before mutating local
5
+ * state. Reactive setters may update synchronously; checking again afterwards
6
+ * can incorrectly suppress the owner's change callback.
7
+ */
8
+ export declare function applyBooleanStateRequest(options: {
9
+ current: boolean;
10
+ next: boolean;
11
+ controlled: boolean;
12
+ setInternal: (next: boolean) => void;
13
+ onChange?: (next: boolean) => void;
14
+ }): boolean;
@@ -0,0 +1,7 @@
1
+ function applyBooleanStateRequest(options) {
2
+ if (options.current === options.next) return false;
3
+ if (!options.controlled) options.setInternal(options.next);
4
+ options.onChange?.(options.next);
5
+ return true;
6
+ }
7
+ export { applyBooleanStateRequest };
@@ -63,26 +63,27 @@ const __solidLayoutComplexColorWheelLayout = (_stable, p)=>createComponent(card,
63
63
  get each () {
64
64
  return p.adjustments;
65
65
  },
66
+ keyed: false,
66
67
  children: (adjustment)=>(()=>{
67
68
  var _el$5 = _tmpl$4(), _el$6 = _el$5.firstChild, _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling, _el$9 = _el$6.nextSibling;
68
69
  spread(_el$5, mergeProps(()=>_stable.slot.axis, {
69
70
  get ["data-axis"] () {
70
- return adjustment.id;
71
+ return adjustment().id;
71
72
  }
72
73
  }), true);
73
74
  spread(_el$6, mergeProps(()=>_stable.slot.axisHeading), true);
74
- insert(_el$7, ()=>adjustment.label);
75
- insert(_el$8, ()=>adjustment.formatValue?.(adjustment.value) ?? adjustment.value);
75
+ insert(_el$7, ()=>adjustment().label);
76
+ insert(_el$8, ()=>adjustment().formatValue?.(adjustment().value) ?? adjustment().value);
76
77
  spread(_el$9, mergeProps(()=>_stable.slot.axisControl), true);
77
78
  insert(_el$9, createComponent(Show, {
78
79
  get when () {
79
- return memo(()=>!!adjustment.stops?.length)() ? adjustment.stops : void 0;
80
+ return memo(()=>!!adjustment().stops?.length)() ? adjustment().stops : void 0;
80
81
  },
81
82
  get fallback () {
82
83
  return [
83
84
  createComponent(Show, {
84
85
  get when () {
85
- return adjustment.preview;
86
+ return adjustment().preview;
86
87
  },
87
88
  get children () {
88
89
  var _el$1 = _tmpl$3();
@@ -90,7 +91,7 @@ const __solidLayoutComplexColorWheelLayout = (_stable, p)=>createComponent(card,
90
91
  "aria-hidden": "true",
91
92
  get style () {
92
93
  return {
93
- "background-color": adjustment.preview?.(adjustment.value, p.value)
94
+ "background-color": adjustment().preview?.(adjustment().value, p.value)
94
95
  };
95
96
  }
96
97
  }), false);
@@ -99,31 +100,31 @@ const __solidLayoutComplexColorWheelLayout = (_stable, p)=>createComponent(card,
99
100
  }),
100
101
  createComponent(slider, {
101
102
  get label () {
102
- return adjustment.label;
103
+ return adjustment().label;
103
104
  },
104
105
  get value () {
105
- return adjustment.value;
106
+ return adjustment().value;
106
107
  },
107
108
  get min () {
108
- return adjustment.min ?? 0;
109
+ return adjustment().min ?? 0;
109
110
  },
110
111
  get max () {
111
- return adjustment.max ?? 100;
112
+ return adjustment().max ?? 100;
112
113
  },
113
114
  get step () {
114
- return adjustment.step;
115
+ return adjustment().step;
115
116
  },
116
117
  get disabled () {
117
118
  return p.isDisabled;
118
119
  },
119
120
  get onChange () {
120
- return adjustment.onChange;
121
+ return adjustment().onChange;
121
122
  },
122
123
  get onChangeEnd () {
123
- return adjustment.onChangeEnd;
124
+ return adjustment().onChangeEnd;
124
125
  },
125
126
  get formatValue () {
126
- return adjustment.formatValue;
127
+ return adjustment().formatValue;
127
128
  },
128
129
  size: "sm"
129
130
  })
@@ -141,29 +142,29 @@ const __solidLayoutComplexColorWheelLayout = (_stable, p)=>createComponent(card,
141
142
  size: "sm",
142
143
  variant: "ghost",
143
144
  get ["aria-label"] () {
144
- return `${adjustment.label} ${adjustment.formatValue?.(stop) ?? stop}`;
145
+ return `${adjustment().label} ${adjustment().formatValue?.(stop) ?? stop}`;
145
146
  },
146
147
  get ["aria-pressed"] () {
147
- return Math.abs(adjustment.value - stop) < 0.001 ? "true" : "false";
148
+ return Math.abs(adjustment().value - stop) < 0.001 ? "true" : "false";
148
149
  },
149
150
  get disabled () {
150
151
  return p.isDisabled;
151
152
  },
152
- onClick: ()=>adjustment.onChange(stop),
153
+ onClick: ()=>adjustment().onChange(stop),
153
154
  get children () {
154
155
  var _el$11 = _tmpl$3();
155
156
  spread(_el$11, mergeProps(()=>_stable.slot.stopPreview, {
156
157
  "aria-hidden": "true",
157
158
  get style () {
158
159
  return {
159
- "background-color": adjustment.preview?.(stop, p.value),
160
- color: adjustment.ink?.(stop, p.value)
160
+ "background-color": adjustment().preview?.(stop, p.value),
161
+ color: adjustment().ink?.(stop, p.value)
161
162
  };
162
163
  }
163
164
  }), true);
164
165
  insert(_el$11, createComponent(Show, {
165
166
  get when () {
166
- return adjustment.ink;
167
+ return adjustment().ink;
167
168
  },
168
169
  children: "A"
169
170
  }));
@@ -176,12 +177,12 @@ const __solidLayoutComplexColorWheelLayout = (_stable, p)=>createComponent(card,
176
177
  }));
177
178
  insert(_el$5, createComponent(Show, {
178
179
  get when () {
179
- return adjustment.hint;
180
+ return adjustment().hint;
180
181
  },
181
182
  get children () {
182
183
  var _el$0 = _tmpl$3();
183
184
  spread(_el$0, mergeProps(()=>_stable.slot.hint), true);
184
- insert(_el$0, ()=>adjustment.hint);
185
+ insert(_el$0, ()=>adjustment().hint);
185
186
  return _el$0;
186
187
  }
187
188
  }), null);
@@ -11,6 +11,7 @@ import { createColorFromHsl, parseColor, rgbToHex, rgbToHsl } from "./ColorUtils
11
11
  import { resolveColorWheelFlowerPalette } from "./ColorWheelFlower.palette.js";
12
12
  import { motionDistances, motionDurations, motionEasings, prefersReducedMotion, runMotion } from "../../motion/index.js";
13
13
  import { CLASSES, componentRecipe } from "./ColorWheelFlower.recipe.js";
14
+ import { flowerPetalPosition } from "./ColorWheelFlower.geometry.js";
14
15
  var _tmpl$ = /*#__PURE__*/ template("<div><div><div><div></div></div><div><div>"), _tmpl$2 = /*#__PURE__*/ template("<div><div><div><span></span><span>");
15
16
  const parseRgbToHsl = (rgbString)=>{
16
17
  const match = rgbString.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
@@ -52,6 +53,12 @@ const createColorItem = (id, color, offsetX, offsetY, options)=>{
52
53
  };
53
54
  };
54
55
  const readMotionState = (el)=>{
56
+ if ("u" < typeof getComputedStyle) return {
57
+ opacity: 1,
58
+ x: 0,
59
+ y: 0,
60
+ scale: 1
61
+ };
55
62
  const styles = getComputedStyle(el);
56
63
  const opacityValue = Number.parseFloat(styles.opacity);
57
64
  const opacity = Number.isFinite(opacityValue) ? opacityValue : 1;
@@ -295,7 +302,7 @@ const __solidLayoutColorWheelFlower = (_stable, p)=>{
295
302
  });
296
303
  const [pulseState, setPulseState] = createSignal(null);
297
304
  const [currentTheme, setCurrentTheme] = createSignal("u" > typeof document && "dark" === document.documentElement.getAttribute("data-theme") ? "dark" : "light");
298
- if ("u" > typeof window) {
305
+ if ("u" > typeof window && "u" > typeof MutationObserver) {
299
306
  const observer = new MutationObserver(()=>{
300
307
  const t = document.documentElement.getAttribute("data-theme");
301
308
  setCurrentTheme("dark" === t ? "dark" : "light");
@@ -636,10 +643,7 @@ const __solidLayoutColorWheelFlower = (_stable, p)=>{
636
643
  class: CLASSES.dot.base
637
644
  }), {
638
645
  get style () {
639
- return {
640
- left: `calc(50% + ${item.offsetX}px)`,
641
- top: `calc(50% + ${item.offsetY}px)`
642
- };
646
+ return flowerPetalPosition(item.offsetX, item.offsetY);
643
647
  }
644
648
  }), true);
645
649
  spread(_el$8, mergeProps(()=>({
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Place one petal around the wheel centre using properties Blitz supports.
3
+ *
4
+ * Keeping the percentage anchor separate from the pixel offset is deliberate:
5
+ * browser engines accept `calc(50% + …px)`, while Blitz currently drops that
6
+ * mixed-unit position and piles every petal onto the centre.
7
+ */
8
+ export declare function flowerPetalPosition(offsetX: number, offsetY: number): {
9
+ readonly left: "50%";
10
+ readonly top: "50%";
11
+ readonly "margin-left": `${number}px`;
12
+ readonly "margin-top": `${number}px`;
13
+ };
@@ -0,0 +1,9 @@
1
+ function flowerPetalPosition(offsetX, offsetY) {
2
+ return {
3
+ left: "50%",
4
+ top: "50%",
5
+ "margin-left": `${offsetX}px`,
6
+ "margin-top": `${offsetY}px`
7
+ };
8
+ }
9
+ export { flowerPetalPosition };
@@ -0,0 +1,79 @@
1
+ @layer components {
2
+ .inline-edit {
3
+ display: inline-flex;
4
+ min-width: 0;
5
+ align-items: center;
6
+ gap: 0.375rem;
7
+ }
8
+
9
+ .inline-edit--full-width {
10
+ width: 100%;
11
+ }
12
+
13
+ .inline-edit__read {
14
+ display: inline-flex;
15
+ min-width: 0;
16
+ flex: 1 1 auto;
17
+ align-items: center;
18
+ gap: 0.375rem;
19
+ }
20
+
21
+ .inline-edit__value {
22
+ min-width: 0;
23
+ overflow: hidden;
24
+ text-overflow: ellipsis;
25
+ white-space: nowrap;
26
+ }
27
+
28
+ .inline-edit__trigger {
29
+ display: inline-flex;
30
+ height: 1.125rem;
31
+ width: 1.125rem;
32
+ flex: none;
33
+ align-items: center;
34
+ justify-content: center;
35
+ border-radius: 0.25rem;
36
+ padding: 0;
37
+ color: var(--color-base-content);
38
+ opacity: 0.55;
39
+ }
40
+
41
+ .inline-edit__trigger:hover {
42
+ background-color: oklch(100% 0 0 / 0.08);
43
+ opacity: 1;
44
+ }
45
+
46
+ .inline-edit__edit {
47
+ display: none;
48
+ min-width: 0;
49
+ flex: 1 1 auto;
50
+ }
51
+
52
+ .inline-edit--editing .inline-edit__read {
53
+ display: none;
54
+ }
55
+
56
+ .inline-edit--editing .inline-edit__edit {
57
+ display: inline-flex;
58
+ }
59
+
60
+ .inline-edit__field {
61
+ min-width: 0;
62
+ flex: 1 1 auto;
63
+ border-radius: 0.375rem;
64
+ border: var(--border, 1px) solid var(--color-base-300);
65
+ background-color: var(--color-base-100);
66
+ padding: 0.125rem 0.5rem;
67
+ color: var(--color-base-content);
68
+ outline: none;
69
+ }
70
+
71
+ .inline-edit__field:focus {
72
+ border-color: var(--color-primary);
73
+ }
74
+
75
+ .inline-edit--disabled .inline-edit__trigger {
76
+ pointer-events: none;
77
+ opacity: 0.4;
78
+ }
79
+ }
@@ -0,0 +1,27 @@
1
+ import type { Component as __LayoutComponent } from "solid-js";
2
+ import "./InlineEdit.css";
3
+ import type { JSX } from "@solidjs/web";
4
+ import type { UIBaseProps } from "../vocabulary";
5
+ /**
6
+ * A value that is read in place until someone chooses to change it.
7
+ *
8
+ * Enter commits, Escape abandons, and moving focus away commits, so the mode
9
+ * has an exit for a reader who never touches the keyboard.
10
+ */
11
+ export type InlineEditProps = Omit<JSX.HTMLAttributes<HTMLSpanElement>, "onChange" | "children"> & UIBaseProps & {
12
+ /** The current value, shown while not editing and used as the draft. */
13
+ value: string;
14
+ /** Called with the trimmed draft when it differs from `value`. */
15
+ onCommit?: (value: string) => void | Promise<unknown>;
16
+ /** Accessible name for the trigger and the field. Both need one. */
17
+ label?: string;
18
+ /** Rendered inside the trigger. An icon, usually. */
19
+ trigger?: JSX.Element;
20
+ /** Rendered in place of the plain value, for a value that is also a link. */
21
+ children?: JSX.Element;
22
+ fullWidth?: boolean;
23
+ disabled?: boolean;
24
+ fieldClass?: string;
25
+ };
26
+ declare const InlineEdit: __LayoutComponent<InlineEditProps>;
27
+ export default InlineEdit;
@@ -0,0 +1,117 @@
1
+ import { className, delegateEvents, effect, insert, mergeProps, ref, setAttribute, spread, template } from "@solidjs/web";
2
+ import { defineComponent } from "solid-layouts/solid-2/application-boundary";
3
+ import "./InlineEdit.css";
4
+ import { omit } from "solid-js";
5
+ import { twMerge } from "../../lib/twMerge.js";
6
+ import { CLASSES, componentRecipe } from "./InlineEdit.recipe.js";
7
+ var _tmpl$ = /*#__PURE__*/ template("<span><span data-slot=inline-edit-read><span data-slot=inline-edit-value></span><button type=button data-slot=inline-edit-trigger></button></span><span data-slot=inline-edit-edit><input type=text data-slot=inline-edit-field>");
8
+ const __solidLayoutInlineEdit = (_stable, p)=>{
9
+ const others = omit(p, "class", "value", "onCommit", "label", "trigger", "children", "fullWidth", "disabled", "fieldClass");
10
+ let readRow;
11
+ let editRow;
12
+ let field;
13
+ let open = false;
14
+ let focused = false;
15
+ let draft = "";
16
+ const apply = (next)=>{
17
+ open = next;
18
+ if (readRow) readRow.style.display = next ? "none" : "inline-flex";
19
+ if (editRow) editRow.style.display = next ? "inline-flex" : "none";
20
+ };
21
+ const start = ()=>{
22
+ if (p.disabled) return;
23
+ draft = p.value;
24
+ if (field) field.value = draft;
25
+ apply(true);
26
+ queueMicrotask(()=>{
27
+ field?.focus();
28
+ field?.select();
29
+ });
30
+ };
31
+ const cancel = ()=>{
32
+ draft = p.value;
33
+ if (field) field.value = draft;
34
+ focused = false;
35
+ apply(false);
36
+ };
37
+ const commit = ()=>{
38
+ const next = draft.trim();
39
+ focused = false;
40
+ apply(false);
41
+ if (!next || next === p.value) return;
42
+ p.onCommit?.(next);
43
+ };
44
+ const rootClasses = ()=>twMerge(CLASSES.base, p.fullWidth && CLASSES.flag.fullWidth, p.disabled && CLASSES.flag.disabled, p.class);
45
+ var _el$ = _tmpl$(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$2.nextSibling, _el$6 = _el$5.firstChild;
46
+ spread(_el$, mergeProps(others, {
47
+ get ["class"] () {
48
+ return rootClasses();
49
+ },
50
+ "data-slot": "root"
51
+ }), true);
52
+ ref(()=>(element)=>{
53
+ readRow = element;
54
+ }, _el$2);
55
+ insert(_el$3, ()=>p.children ?? p.value);
56
+ _el$4.$$click = start;
57
+ insert(_el$4, ()=>p.trigger);
58
+ ref(()=>(element)=>{
59
+ editRow = element;
60
+ }, _el$5);
61
+ _el$6.$$keydown = (event)=>{
62
+ if ("Enter" === event.key) {
63
+ event.preventDefault();
64
+ commit();
65
+ } else if ("Escape" === event.key) {
66
+ event.preventDefault();
67
+ cancel();
68
+ }
69
+ };
70
+ _el$6.addEventListener("blur", ()=>{
71
+ if (!focused) return;
72
+ if (open) commit();
73
+ });
74
+ _el$6.addEventListener("focus", ()=>{
75
+ focused = true;
76
+ });
77
+ _el$6.$$input = (event)=>{
78
+ draft = event.currentTarget.value;
79
+ };
80
+ ref(()=>(element)=>{
81
+ field = element;
82
+ }, _el$6);
83
+ effect(()=>({
84
+ e: CLASSES.slot.read,
85
+ t: CLASSES.slot.value,
86
+ a: p.disabled,
87
+ o: p.label,
88
+ i: CLASSES.slot.trigger,
89
+ n: CLASSES.slot.edit,
90
+ s: p.value,
91
+ h: p.label,
92
+ r: twMerge(CLASSES.slot.field, p.fieldClass)
93
+ }), ({ e, t, a, o, i, n, s, h, r }, _p$)=>{
94
+ className(_el$2, e, _p$?.e);
95
+ className(_el$3, t, _p$?.t);
96
+ a !== _p$?.a && setAttribute(_el$4, "disabled", a);
97
+ o !== _p$?.o && setAttribute(_el$4, "aria-label", o);
98
+ className(_el$4, i, _p$?.i);
99
+ className(_el$5, n, _p$?.n);
100
+ _el$6.value = s ?? "";
101
+ h !== _p$?.h && setAttribute(_el$6, "aria-label", h);
102
+ className(_el$6, r, _p$?.r);
103
+ });
104
+ return _el$;
105
+ };
106
+ const InlineEdit = defineComponent({
107
+ recipe: componentRecipe,
108
+ layout: __solidLayoutInlineEdit,
109
+ embedded: true
110
+ });
111
+ const InlineEdit_generated = InlineEdit;
112
+ delegateEvents([
113
+ "click",
114
+ "input",
115
+ "keydown"
116
+ ]);
117
+ export default InlineEdit_generated;
@@ -0,0 +1,26 @@
1
+ export declare const CLASSES: {
2
+ readonly base: "inline-edit";
3
+ readonly slot: {
4
+ readonly read: "inline-edit__read";
5
+ readonly value: "inline-edit__value";
6
+ readonly trigger: "inline-edit__trigger";
7
+ readonly edit: "inline-edit__edit";
8
+ readonly field: "inline-edit__field";
9
+ };
10
+ readonly flag: {
11
+ readonly editing: "inline-edit--editing";
12
+ readonly fullWidth: "inline-edit--full-width";
13
+ readonly disabled: "inline-edit--disabled";
14
+ };
15
+ };
16
+ export declare const componentRecipe: import("solid-layouts/solid-2").Recipe<{
17
+ readonly component: "inline-edit";
18
+ readonly slots: {
19
+ readonly root: {};
20
+ readonly "inline-edit-read": {};
21
+ readonly "inline-edit-value": {};
22
+ readonly "inline-edit-trigger": {};
23
+ readonly "inline-edit-edit": {};
24
+ readonly "inline-edit-field": {};
25
+ };
26
+ }>;
@@ -0,0 +1,65 @@
1
+ import { recipe } from "../../lib/layouts/index.js";
2
+ const CLASSES = {
3
+ base: "inline-edit",
4
+ slot: {
5
+ read: "inline-edit__read",
6
+ value: "inline-edit__value",
7
+ trigger: "inline-edit__trigger",
8
+ edit: "inline-edit__edit",
9
+ field: "inline-edit__field"
10
+ },
11
+ flag: {
12
+ editing: "inline-edit--editing",
13
+ fullWidth: "inline-edit--full-width",
14
+ disabled: "inline-edit--disabled"
15
+ }
16
+ };
17
+ const componentRecipe = recipe({
18
+ component: "inline-edit",
19
+ slots: {
20
+ root: {},
21
+ "inline-edit-read": {},
22
+ "inline-edit-value": {},
23
+ "inline-edit-trigger": {},
24
+ "inline-edit-edit": {},
25
+ "inline-edit-field": {}
26
+ },
27
+ _layouts: {
28
+ slots: {
29
+ root: {
30
+ base: "",
31
+ axes: {}
32
+ },
33
+ "inline-edit-read": {
34
+ base: "",
35
+ axes: {}
36
+ },
37
+ "inline-edit-value": {
38
+ base: "",
39
+ axes: {}
40
+ },
41
+ "inline-edit-trigger": {
42
+ base: "",
43
+ axes: {}
44
+ },
45
+ "inline-edit-edit": {
46
+ base: "",
47
+ axes: {}
48
+ },
49
+ "inline-edit-field": {
50
+ base: "",
51
+ axes: {}
52
+ }
53
+ },
54
+ stateKeys: [],
55
+ slotIds: {
56
+ root: 5,
57
+ "inline-edit-read": 2,
58
+ "inline-edit-value": 4,
59
+ "inline-edit-trigger": 3,
60
+ "inline-edit-edit": 0,
61
+ "inline-edit-field": 1
62
+ }
63
+ }
64
+ });
65
+ export { CLASSES, componentRecipe };
@@ -0,0 +1,3 @@
1
+ import InlineEdit from "./InlineEdit.generated";
2
+ export type { InlineEditProps } from "./InlineEdit.generated";
3
+ export default InlineEdit;
@@ -0,0 +1,3 @@
1
+ import InlineEdit_generated from "./InlineEdit.generated.js";
2
+ const inline_edit = InlineEdit_generated;
3
+ export default inline_edit;
@@ -1,6 +1,6 @@
1
1
  import type { Component as __LayoutComponent } from "solid-js";
2
2
  import "./LanguageSwitcher.css";
3
- import { type DropdownAlign } from "../dropdown";
3
+ import type { DropdownAlign } from "../dropdown";
4
4
  import type { UIBaseProps } from "../vocabulary";
5
5
  import type { I18nStore } from "./createI18n";
6
6
  export interface LanguageSwitcherProps extends UIBaseProps {
@@ -1,102 +1,72 @@
1
- import { createComponent, insert, mergeProps, spread, template } from "@solidjs/web";
1
+ import { createComponent, effect, insert, mergeProps, spread, template } from "@solidjs/web";
2
2
  import { defineComponent } from "solid-layouts/solid-2/application-boundary";
3
3
  import "./LanguageSwitcher.css";
4
- import { For, Show, omit } from "solid-js";
4
+ import { For, omit } from "solid-js";
5
5
  import { twMerge } from "../../lib/twMerge.js";
6
- import dropdown from "../dropdown/index.js";
7
- import icon from "../icon/index.js";
8
6
  import { CLASSES, componentRecipe } from "./LanguageSwitcher.recipe.js";
9
- var _tmpl$ = /*#__PURE__*/ template("<span>");
7
+ var _tmpl$ = /*#__PURE__*/ template("<select>"), _tmpl$2 = /*#__PURE__*/ template("<option>");
10
8
  const __solidLayoutLanguageSwitcher = (_stable, p)=>{
11
9
  const others = omit(p, "i18n", "class", "style", "aria-label", "currentLanguageLabel", "optionsLabel", "loadingLabel", "align", "onLanguageChange");
12
10
  const currentLanguageName = ()=>p.i18n.languageNames[p.i18n.locale];
13
- const isSelected = (lang)=>p.i18n.locale === lang;
14
11
  const handleSelect = async (lang)=>{
15
12
  await p.i18n.setLocale(lang);
16
13
  p.onLanguageChange?.(lang);
17
14
  };
18
- const classes = ()=>twMerge(CLASSES.base, p.class);
19
- return createComponent(dropdown.Root, mergeProps(others, ()=>({
15
+ const classes = ()=>twMerge(CLASSES.base, CLASSES.trigger, p.class);
16
+ const move = (direction)=>{
17
+ const languages = p.i18n.languages;
18
+ const current = languages.findIndex((language)=>language.code === p.i18n.locale);
19
+ const next = (Math.max(0, current) + direction + languages.length) % languages.length;
20
+ const language = languages[next];
21
+ if (language) handleSelect(language.code);
22
+ };
23
+ var _el$ = _tmpl$();
24
+ spread(_el$, mergeProps(others, ()=>({
20
25
  class: classes()
21
26
  }), {
22
27
  get style () {
23
28
  return p.style;
24
29
  },
25
- role: void 0,
30
+ get value () {
31
+ return p.i18n.locale;
32
+ },
33
+ get disabled () {
34
+ return p.i18n.isLoading;
35
+ },
36
+ get ["aria-busy"] () {
37
+ return p.i18n.isLoading ? "true" : void 0;
38
+ },
26
39
  get ["aria-label"] () {
27
- return p["aria-label"] ?? "Language selector";
40
+ return `${p.currentLanguageLabel ?? "Current language"}: ${currentLanguageName()}`;
41
+ },
42
+ get title () {
43
+ return p.optionsLabel ?? p["aria-label"] ?? "Language selector";
28
44
  },
29
- get children () {
30
- return [
31
- createComponent(dropdown.Trigger, mergeProps(()=>({
32
- class: CLASSES.trigger
33
- }), {
34
- get ["aria-label"] () {
35
- return `${p.currentLanguageLabel ?? "Current language"}: ${currentLanguageName()}`;
36
- },
37
- get children () {
38
- return createComponent(Show, {
39
- get when () {
40
- return !p.i18n.isLoading;
41
- },
42
- get fallback () {
43
- return createComponent(icon, mergeProps({
44
- src: "icon-[mdi--loading]"
45
- }, ()=>({
46
- class: CLASSES.loadingIcon
47
- }), {
48
- width: 16,
49
- height: 16,
50
- get ["aria-label"] () {
51
- return p.loadingLabel ?? "Loading language";
52
- }
53
- }));
54
- },
55
- get children () {
56
- var _el$ = _tmpl$();
57
- spread(_el$, mergeProps(()=>({
58
- class: CLASSES.locale
59
- }), {
60
- "aria-hidden": "true"
61
- }), true);
62
- insert(_el$, ()=>p.i18n.locale.toUpperCase());
63
- return _el$;
64
- }
65
- });
66
- }
67
- })),
68
- createComponent(dropdown.Menu, mergeProps(()=>({
69
- class: CLASSES.menu
70
- }), {
71
- get align () {
72
- return p.align;
73
- },
74
- get ["aria-label"] () {
75
- return p.optionsLabel ?? "Language options";
76
- },
77
- get children () {
78
- return createComponent(For, {
79
- get each () {
80
- return p.i18n.languages;
81
- },
82
- children: (lang)=>createComponent(dropdown.Item, mergeProps({
83
- onClick: ()=>handleSelect(lang.code)
84
- }, ()=>({
85
- class: twMerge(CLASSES.item, isSelected(lang.code) && CLASSES.itemSelected)
86
- }), {
87
- get ["aria-current"] () {
88
- return isSelected(lang.code) ? "true" : void 0;
89
- },
90
- get children () {
91
- return lang.name;
92
- }
93
- }))
94
- });
95
- }
96
- }))
97
- ];
45
+ onChange: (event)=>void handleSelect(event.currentTarget.value),
46
+ onKeyDown: (event)=>{
47
+ if ("ArrowDown" === event.key) {
48
+ event.preventDefault();
49
+ move(1);
50
+ } else if ("ArrowUp" === event.key) {
51
+ event.preventDefault();
52
+ move(-1);
53
+ }
98
54
  }
55
+ }), true);
56
+ insert(_el$, createComponent(For, {
57
+ get each () {
58
+ return p.i18n.languages;
59
+ },
60
+ children: (lang)=>(()=>{
61
+ var _el$2 = _tmpl$2();
62
+ insert(_el$2, ()=>lang.name);
63
+ effect(()=>lang.code, (_v$)=>{
64
+ _el$2.value = _v$;
65
+ });
66
+ return _el$2;
67
+ })()
99
68
  }));
69
+ return _el$;
100
70
  };
101
71
  const LanguageSwitcher = defineComponent({
102
72
  recipe: componentRecipe,
@@ -20,7 +20,7 @@ const toRadiusCssValue = (value)=>{
20
20
  return value;
21
21
  };
22
22
  const readRadiusPx = (element)=>{
23
- if (!element || "u" < typeof window) return 0;
23
+ if (!element || "u" < typeof window || "function" != typeof window.getComputedStyle) return 0;
24
24
  const computed = window.getComputedStyle(element);
25
25
  const candidates = [
26
26
  computed.borderTopLeftRadius,
@@ -145,7 +145,7 @@ const __solidLayoutMetalBorder = (_stable, p)=>{
145
145
  setPrefersReduced(prefersReducedMotion());
146
146
  };
147
147
  mediaQueryList?.addEventListener?.("change", handleMotionChange);
148
- if (hostRef) {
148
+ if (hostRef && "u" > typeof MutationObserver) {
149
149
  const themeRoot = hostRef.closest("[data-theme]") ?? document.documentElement;
150
150
  mutationObserver = new MutationObserver(()=>{
151
151
  syncResolvedTheme();
@@ -81,6 +81,12 @@
81
81
  .popover__trigger {
82
82
  display: inline-flex;
83
83
  cursor: pointer;
84
+ margin: 0;
85
+ border: 0;
86
+ padding: 0;
87
+ background: none;
88
+ color: inherit;
89
+ font: inherit;
84
90
  }
85
91
 
86
92
  .popover__trigger:focus-visible,
@@ -2,8 +2,8 @@ import type { Component as __LayoutComponent } from "solid-js";
2
2
  import "./Popover.css";
3
3
  import { type JSX } from "@solidjs/web";
4
4
  import "../_shared/material.css";
5
- import type { Material, UIBaseProps } from "../vocabulary";
6
5
  import { type OverlayAnchorRect, type OverlayPlacement } from "../_shared/overlayPosition";
6
+ import type { Material, UIBaseProps } from "../vocabulary";
7
7
  export type PopoverPlacement = OverlayPlacement;
8
8
  export type PopoverAnchorRect = OverlayAnchorRect;
9
9
  export type PopoverAnchor = PopoverAnchorRect | (() => PopoverAnchorRect | undefined);
@@ -21,7 +21,7 @@ export type PopoverRootProps = UIBaseProps & Omit<JSX.HTMLAttributes<HTMLDivElem
21
21
  onInteractOutside?: (event: Event) => void;
22
22
  };
23
23
  declare const PopoverRoot: __LayoutComponent<PopoverRootProps>;
24
- export type PopoverTriggerProps = UIBaseProps & Omit<JSX.HTMLAttributes<HTMLDivElement>, "children"> & {
24
+ export type PopoverTriggerProps = UIBaseProps & Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
25
25
  children: JSX.Element;
26
26
  };
27
27
  declare const PopoverTrigger: __LayoutComponent<PopoverTriggerProps>;
@@ -53,4 +53,4 @@ declare const Popover: __LayoutComponent<PopoverRootProps> & {
53
53
  Heading: __LayoutComponent<PopoverHeadingProps>;
54
54
  };
55
55
  export default Popover;
56
- export { PopoverRoot, PopoverTrigger, PopoverContent, PopoverDialog, PopoverArrow, PopoverHeading, };
56
+ export { PopoverArrow, PopoverContent, PopoverDialog, PopoverHeading, PopoverRoot, PopoverTrigger, };
@@ -4,9 +4,10 @@ import "./Popover.css";
4
4
  import { Show, createContext, createMemo, createSignal, createTrackedEffect, omit, onSettled, useContext } from "solid-js";
5
5
  import { twMerge } from "../../lib/twMerge.js";
6
6
  import "../_shared/material.css";
7
+ import { applyBooleanStateRequest } from "../_shared/controlledState.js";
7
8
  import { createOverlayPosition } from "../_shared/overlayPosition.js";
8
9
  import { CLASSES, componentRecipe } from "./Popover.recipe.js";
9
- var _tmpl$ = /*#__PURE__*/ template("<div>"), _tmpl$2 = /*#__PURE__*/ template('<svg aria-hidden=true data-slot=popover-arrow-svg height=12 viewBox="0 0 12 12"width=12><path d="M0 0C5.48483 8 6.5 8 12 0Z"fill=currentColor>'), _tmpl$3 = /*#__PURE__*/ template("<span>"), _tmpl$4 = /*#__PURE__*/ template("<h3>");
10
+ var _tmpl$ = /*#__PURE__*/ template("<div>"), _tmpl$2 = /*#__PURE__*/ template("<button>"), _tmpl$3 = /*#__PURE__*/ template('<svg aria-hidden=true data-slot=popover-arrow-svg height=12 viewBox="0 0 12 12"width=12><path d="M0 0C5.48483 8 6.5 8 12 0Z"fill=currentColor>'), _tmpl$4 = /*#__PURE__*/ template("<span>"), _tmpl$5 = /*#__PURE__*/ template("<h3>");
10
11
  const PopoverContext = createContext(null);
11
12
  const usePopoverContext = ()=>{
12
13
  const ctx = useContext(PopoverContext);
@@ -24,8 +25,13 @@ const __solidLayoutPopoverRoot = (_stable, p)=>{
24
25
  const isControlled = createMemo(()=>void 0 !== p.open);
25
26
  const isOpen = createMemo(()=>isControlled() ? Boolean(p.open) : internalOpen());
26
27
  const setIsOpen = (next, options)=>{
27
- if (!isControlled()) setInternalOpen(next);
28
- if (isOpen() !== next) p.onOpenChange?.(next);
28
+ applyBooleanStateRequest({
29
+ current: isOpen(),
30
+ next,
31
+ controlled: isControlled(),
32
+ setInternal: setInternalOpen,
33
+ onChange: p.onOpenChange
34
+ });
29
35
  if (!next && options?.focusTrigger) triggerRef()?.focus();
30
36
  };
31
37
  const preferredPlacement = ()=>p.placement ?? "bottom";
@@ -105,7 +111,7 @@ const PopoverRoot = defineComponent({
105
111
  embedded: true
106
112
  });
107
113
  const __solidLayoutPopoverTrigger = (_stable, p)=>{
108
- const others = omit(p, "children", "class", "dataTheme", "style", "onClick", "onKeyDown");
114
+ const others = omit(p, "children", "class", "dataTheme", "style", "type", "onClick", "onKeyDown");
109
115
  const ctx = usePopoverContext();
110
116
  const handleClick = (event)=>{
111
117
  if ("function" == typeof p.onClick) p.onClick(event);
@@ -115,10 +121,6 @@ const __solidLayoutPopoverTrigger = (_stable, p)=>{
115
121
  const handleKeyDown = (event)=>{
116
122
  if ("function" == typeof p.onKeyDown) p.onKeyDown(event);
117
123
  if (event.defaultPrevented) return;
118
- if ("Enter" === event.key || " " === event.key) {
119
- event.preventDefault();
120
- ctx.setIsOpen(!ctx.isOpen());
121
- }
122
124
  if ("Escape" === event.key && ctx.isOpen()) {
123
125
  event.preventDefault();
124
126
  ctx.setIsOpen(false, {
@@ -126,14 +128,15 @@ const __solidLayoutPopoverTrigger = (_stable, p)=>{
126
128
  });
127
129
  }
128
130
  };
129
- var _el$2 = _tmpl$();
131
+ var _el$2 = _tmpl$2();
130
132
  ref(()=>(el)=>ctx.setTriggerRef(el), _el$2);
131
133
  spread(_el$2, mergeProps(others, {
134
+ get type () {
135
+ return p.type ?? "button";
136
+ },
132
137
  get id () {
133
138
  return ctx.triggerId();
134
- },
135
- role: "button",
136
- tabindex: 0
139
+ }
137
140
  }, ()=>({
138
141
  class: twMerge(CLASSES.slot.trigger, p.class)
139
142
  }), {
@@ -226,7 +229,7 @@ const __solidLayoutPopoverContent = (_stable, p)=>{
226
229
  return style();
227
230
  },
228
231
  get ["aria-labelledby"] () {
229
- return ctx.triggerRef() ? ctx.triggerId() : void 0;
232
+ return p["aria-labelledby"] ?? (ctx.triggerRef() ? ctx.triggerId() : void 0);
230
233
  },
231
234
  get ["aria-hidden"] () {
232
235
  return ctx.isOpen() ? "false" : "true";
@@ -269,8 +272,8 @@ const PopoverDialog = defineComponent({
269
272
  const __solidLayoutPopoverArrow = (_stable, p)=>{
270
273
  const others = omit(p, "children", "class", "dataTheme", "style");
271
274
  const ctx = usePopoverContext();
272
- const defaultArrow = _tmpl$2();
273
- var _el$6 = _tmpl$3();
275
+ const defaultArrow = _tmpl$3();
276
+ var _el$6 = _tmpl$4();
274
277
  spread(_el$6, mergeProps(others, ()=>({
275
278
  class: twMerge(CLASSES.slot.arrow, p.class)
276
279
  }), {
@@ -296,7 +299,7 @@ const PopoverArrow = defineComponent({
296
299
  });
297
300
  const __solidLayoutPopoverHeading = (_stable, p)=>{
298
301
  const others = omit(p, "children", "class", "dataTheme", "style");
299
- var _el$7 = _tmpl$4();
302
+ var _el$7 = _tmpl$5();
300
303
  spread(_el$7, mergeProps(others, ()=>({
301
304
  class: twMerge(CLASSES.slot.heading, p.class)
302
305
  }), {
@@ -3,8 +3,8 @@ import { defineComponent } from "solid-layouts/solid-2/application-boundary";
3
3
  import "./Slider.css";
4
4
  import { Show, createSignal, createUniqueId } from "solid-js";
5
5
  import { twMerge } from "../../lib/twMerge.js";
6
- import { CLASSES, componentRecipe } from "./Slider.recipe.js";
7
6
  import { createSliderInteractionHandlers } from "./Slider.interactions.js";
7
+ import { CLASSES, componentRecipe } from "./Slider.recipe.js";
8
8
  var _tmpl$ = /*#__PURE__*/ template("<span>"), _tmpl$2 = /*#__PURE__*/ template("<div><div><div></div><div>");
9
9
  function clamp(val, min, max) {
10
10
  return Math.min(Math.max(val, min), max);
@@ -101,6 +101,7 @@ const __solidLayoutSlider = (_stable, p)=>{
101
101
  dragGeometry = active ? measureTrack() : void 0;
102
102
  },
103
103
  isThumb: (target)=>Boolean(thumbRef && target === thumbRef),
104
+ focusThumb: ()=>thumbRef?.focus(),
104
105
  onChange: (value)=>p.onChange(value),
105
106
  onChangeEnd: (value)=>p.onChangeEnd?.(value),
106
107
  onDraggingChange: setDragging
@@ -203,10 +204,10 @@ const __solidLayoutSlider = (_stable, p)=>{
203
204
  left: thumbLeft()
204
205
  };
205
206
  },
206
- role: "slider",
207
- get tabindex () {
208
- return isDisabled() ? -1 : 0;
209
- },
207
+ role: "slider"
208
+ }, ()=>({
209
+ tabindex: isDisabled() ? -1 : 0
210
+ }), {
210
211
  get ["aria-valuemin"] () {
211
212
  return min();
212
213
  },
@@ -6,6 +6,8 @@ export type SliderInteractionOptions = {
6
6
  onDragGeometry?: (active: boolean) => void;
7
7
  /** Whether a press landed on the thumb rather than on the bare track. */
8
8
  isThumb?: (target: EventTarget | null) => boolean;
9
+ /** Focus the keyboard-operable thumb as a fallback for synthetic pointers. */
10
+ focusThumb: () => void;
9
11
  valueFromKey: (key: string, currentValue: number) => number | undefined;
10
12
  onChange: (value: number) => void;
11
13
  onChangeEnd: (value: number) => void;
@@ -51,7 +51,7 @@ const createSliderInteractionHandlers = (options)=>{
51
51
  return {
52
52
  onPointerDown (event) {
53
53
  if (options.isDisabled() || void 0 !== pointerId) return;
54
- event.preventDefault();
54
+ options.focusThumb();
55
55
  const target = event.currentTarget;
56
56
  target.setPointerCapture(event.pointerId);
57
57
  pointerId = event.pointerId;
@@ -170,7 +170,7 @@ function createHueShiftStore(storagePrefix) {
170
170
  applyThemeColor(color);
171
171
  }
172
172
  });
173
- if ("u" > typeof window) {
173
+ if ("u" > typeof window && "u" > typeof MutationObserver) {
174
174
  const observer = new MutationObserver((mutations)=>{
175
175
  for (const mutation of mutations)if ("attributes" === mutation.type && "data-theme" === mutation.attributeName) requestAnimationFrame(reapplyThemeColor);
176
176
  });
package/dist/index.d.ts CHANGED
@@ -58,6 +58,8 @@ export { default as Header } from "./components/header";
58
58
  export { default as Icon } from "./components/icon";
59
59
  export type { CookieConsentProps, CookieConsentStorageKeys, CookieConsentTexts, FirefoxPWABannerProps, FirefoxPWABannerTexts, ImmersiveLandingArrowsProps, ImmersiveLandingContextValue, ImmersiveLandingNavigationProps, ImmersiveLandingPageProps, ImmersiveLandingProps, PWAInstallPromptProps, PWAInstallPromptTexts, UseImmersiveLandingOptions, UseImmersiveLandingReturn, } from "./components/immersive-landing";
60
60
  export { CookieConsent, default as ImmersiveLanding, FirefoxPWABanner, ImmersiveLandingContext, PWAInstallPrompt, useImmersiveLanding, useImmersiveLandingContext, } from "./components/immersive-landing";
61
+ export type { InlineEditProps } from "./components/inline-edit";
62
+ export { default as InlineEdit } from "./components/inline-edit";
61
63
  export { default as Input } from "./components/input";
62
64
  export type { InputOTPGroupProps, InputOTPProps, InputOTPRootProps, InputOTPSeparatorProps, InputOTPSlotProps, InputOTPVariant, } from "./components/input-otp";
63
65
  export { default as InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS, } from "./components/input-otp";
package/dist/index.js CHANGED
@@ -38,6 +38,7 @@ export { default as Grid } from "./components/grid/index.js";
38
38
  export { default as Header } from "./components/header/index.js";
39
39
  export { default as Icon } from "./components/icon/index.js";
40
40
  export { CookieConsent, FirefoxPWABanner, ImmersiveLandingContext, PWAInstallPrompt, default as ImmersiveLanding, useImmersiveLanding, useImmersiveLandingContext } from "./components/immersive-landing/index.js";
41
+ export { default as InlineEdit } from "./components/inline-edit/index.js";
41
42
  export { default as Input } from "./components/input/index.js";
42
43
  export { InputOTPGroup, InputOTPSeparator, InputOTPSlot, REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS, default as InputOTP } from "./components/input-otp/index.js";
43
44
  export { default as Label } from "./components/label/index.js";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "format": "solid-layouts-library-v2",
3
3
  "package": "@pathscale/ui",
4
- "version": "2.9.2",
4
+ "version": "2.10.0",
5
5
  "components": {
6
6
  "Accordion": {
7
7
  "kind": "embedded"
@@ -321,6 +321,9 @@
321
321
  "ImmersiveLandingContext": {
322
322
  "kind": "embedded"
323
323
  },
324
+ "InlineEdit": {
325
+ "kind": "embedded"
326
+ },
324
327
  "Input": {
325
328
  "kind": "embedded"
326
329
  },
@@ -3,6 +3,7 @@ import { resolveEase } from "./easing.js";
3
3
  const resolveDuration = (transition)=>Math.max(0, (transition?.duration ?? 0) * 1000);
4
4
  const resolveDelay = (transition)=>Math.max(0, (transition?.delay ?? 0) * 1000);
5
5
  const readOpacity = (el)=>{
6
+ if ("u" < typeof getComputedStyle) return 1;
6
7
  const value = Number.parseFloat(getComputedStyle(el).opacity);
7
8
  return Number.isFinite(value) ? value : 1;
8
9
  };
@@ -7631,6 +7631,54 @@
7631
7631
  "CheckboxGroup"
7632
7632
  ]
7633
7633
  },
7634
+ "InlineEdit": {
7635
+ "key": "InlineEdit",
7636
+ "component": "InlineEdit",
7637
+ "classes": {
7638
+ "always": [],
7639
+ "byProp": {
7640
+ "slot": {
7641
+ "read": [],
7642
+ "value": [],
7643
+ "trigger": [],
7644
+ "edit": [],
7645
+ "field": []
7646
+ },
7647
+ "editing": [],
7648
+ "fullWidth": [],
7649
+ "disabled": []
7650
+ }
7651
+ },
7652
+ "attributeSelectors": [],
7653
+ "selectors": [
7654
+ ".inline-edit",
7655
+ ".inline-edit--disabled .inline-edit__trigger",
7656
+ ".inline-edit--editing .inline-edit__edit",
7657
+ ".inline-edit--editing .inline-edit__read",
7658
+ ".inline-edit--full-width",
7659
+ ".inline-edit__edit",
7660
+ ".inline-edit__field",
7661
+ ".inline-edit__field:focus",
7662
+ ".inline-edit__read",
7663
+ ".inline-edit__trigger",
7664
+ ".inline-edit__trigger:hover",
7665
+ ".inline-edit__value"
7666
+ ],
7667
+ "cssVars": {
7668
+ "declared": [],
7669
+ "referenced": [
7670
+ "--border",
7671
+ "--color-base-100",
7672
+ "--color-base-300",
7673
+ "--color-base-content",
7674
+ "--color-primary"
7675
+ ]
7676
+ },
7677
+ "keyframes": {
7678
+ "declared": [],
7679
+ "referenced": []
7680
+ }
7681
+ },
7634
7682
  "Navbar.navbar": {
7635
7683
  "key": "Navbar.navbar",
7636
7684
  "component": "Navbar",
@@ -8498,8 +8546,7 @@
8498
8546
  ]
8499
8547
  },
8500
8548
  "deps": [
8501
- "Dropdown",
8502
- "Icon"
8549
+ "Dropdown"
8503
8550
  ]
8504
8551
  },
8505
8552
  "DateField.Root": {
@@ -25334,6 +25381,78 @@
25334
25381
  "ImmersiveLanding.pwaPrompt"
25335
25382
  ]
25336
25383
  },
25384
+ {
25385
+ "selector": ".inline-edit",
25386
+ "components": [
25387
+ "InlineEdit"
25388
+ ]
25389
+ },
25390
+ {
25391
+ "selector": ".inline-edit__edit",
25392
+ "components": [
25393
+ "InlineEdit"
25394
+ ]
25395
+ },
25396
+ {
25397
+ "selector": ".inline-edit__field",
25398
+ "components": [
25399
+ "InlineEdit"
25400
+ ]
25401
+ },
25402
+ {
25403
+ "selector": ".inline-edit__field:focus",
25404
+ "components": [
25405
+ "InlineEdit"
25406
+ ]
25407
+ },
25408
+ {
25409
+ "selector": ".inline-edit__read",
25410
+ "components": [
25411
+ "InlineEdit"
25412
+ ]
25413
+ },
25414
+ {
25415
+ "selector": ".inline-edit__trigger",
25416
+ "components": [
25417
+ "InlineEdit"
25418
+ ]
25419
+ },
25420
+ {
25421
+ "selector": ".inline-edit__trigger:hover",
25422
+ "components": [
25423
+ "InlineEdit"
25424
+ ]
25425
+ },
25426
+ {
25427
+ "selector": ".inline-edit__value",
25428
+ "components": [
25429
+ "InlineEdit"
25430
+ ]
25431
+ },
25432
+ {
25433
+ "selector": ".inline-edit--disabled .inline-edit__trigger",
25434
+ "components": [
25435
+ "InlineEdit"
25436
+ ]
25437
+ },
25438
+ {
25439
+ "selector": ".inline-edit--editing .inline-edit__edit",
25440
+ "components": [
25441
+ "InlineEdit"
25442
+ ]
25443
+ },
25444
+ {
25445
+ "selector": ".inline-edit--editing .inline-edit__read",
25446
+ "components": [
25447
+ "InlineEdit"
25448
+ ]
25449
+ },
25450
+ {
25451
+ "selector": ".inline-edit--full-width",
25452
+ "components": [
25453
+ "InlineEdit"
25454
+ ]
25455
+ },
25337
25456
  {
25338
25457
  "selector": ".input__icon",
25339
25458
  "components": [
@@ -30829,6 +30948,7 @@
30829
30948
  "ImmersiveLanding.navigation",
30830
30949
  "ImmersiveLanding.page",
30831
30950
  "ImmersiveLanding.pwaPrompt",
30951
+ "InlineEdit",
30832
30952
  "Input",
30833
30953
  "InputOTP.Group",
30834
30954
  "InputOTP.Input",
@@ -31066,6 +31186,7 @@
31066
31186
  "ImmersiveLanding.navigation",
31067
31187
  "ImmersiveLanding.page",
31068
31188
  "ImmersiveLanding.pwaPrompt",
31189
+ "InlineEdit",
31069
31190
  "Input",
31070
31191
  "InputOTP.Group",
31071
31192
  "InputOTP.Input",
@@ -31997,6 +32118,7 @@
31997
32118
  "ImmersiveLanding.navigation",
31998
32119
  "ImmersiveLanding.page",
31999
32120
  "ImmersiveLanding.pwaPrompt",
32121
+ "InlineEdit",
32000
32122
  "Input",
32001
32123
  "Kbd",
32002
32124
  "LanguageSwitcher",
@@ -32054,6 +32176,7 @@
32054
32176
  "ImmersiveLanding.navigation",
32055
32177
  "ImmersiveLanding.page",
32056
32178
  "ImmersiveLanding.pwaPrompt",
32179
+ "InlineEdit",
32057
32180
  "Input",
32058
32181
  "InputOTP.Group",
32059
32182
  "InputOTP.Input",
@@ -32134,6 +32257,7 @@
32134
32257
  "ImmersiveLanding.navigation",
32135
32258
  "ImmersiveLanding.page",
32136
32259
  "ImmersiveLanding.pwaPrompt",
32260
+ "InlineEdit",
32137
32261
  "LanguageSwitcher",
32138
32262
  "LiveChat.bubble",
32139
32263
  "LiveChat.panel",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pathscale/ui",
3
- "version": "2.9.2",
3
+ "version": "2.10.0",
4
4
  "author": "pathscale",
5
5
  "repository": {
6
6
  "type": "git",