@pathscale/ui 2.9.0 → 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,5 @@
1
+ import type { Component as __LayoutComponent } from "solid-js";
2
+ import "./ColorWheel.css";
1
3
  import type { JSX } from "@solidjs/web";
2
4
  import { type ColorWheelFlowerMode } from "../color-wheel-flower";
3
5
  interface ColorWheelBaseProps {
@@ -15,13 +17,5 @@ interface ColorWheelBaseProps {
15
17
  "aria-label"?: string;
16
18
  }
17
19
  export type ColorWheelProps = ColorWheelBaseProps & Omit<JSX.FieldsetHTMLAttributes<HTMLFieldSetElement>, keyof ColorWheelBaseProps | "onChange">;
18
- /**
19
- * A controlled literal colour wheel.
20
- *
21
- * `ColorWheelFlower` remains the low-level context consumer. This is the
22
- * ordinary application surface: value in, normalized value out, no private
23
- * picker context for every consumer to recreate.
24
- */
25
- export declare function ColorWheel(props: ColorWheelProps): JSX.Element;
26
- import "./ColorWheel.css";
20
+ export declare const ColorWheelLayout: __LayoutComponent<ColorWheelProps>;
27
21
  export {};
@@ -1,33 +1,29 @@
1
1
  import { createComponent, insert, mergeProps, spread, template } from "@solidjs/web";
2
+ import { defineComponent } from "solid-layouts/solid-2/application-boundary";
3
+ import "./ColorWheel.css";
2
4
  import { createMemo, omit } from "solid-js";
3
- import { twMerge } from "../../lib/twMerge.js";
4
5
  import { ColorPickerContext, ColorWheelFlower } from "../color-wheel-flower/index.js";
5
6
  import { parseColor } from "../color-wheel-flower/ColorUtils.js";
6
- import "./ColorWheel.css";
7
+ import { colorWheel } from "./ColorWheel.recipe.js";
7
8
  var _tmpl$ = /*#__PURE__*/ template("<fieldset>");
8
9
  const FALLBACK = parseColor("#ffffff");
9
- function ColorWheel(props) {
10
- const local = props;
11
- const others = omit(props, "value", "onChange", "mode", "palette", "isDisabled", "class", "wheelClass", "aria-label");
12
- const color = createMemo(()=>parseColor(local.value) ?? FALLBACK);
10
+ const __solidLayoutColorWheelLayout = (_stable, p)=>{
11
+ const others = omit(p, "value", "onChange", "mode", "palette", "isDisabled", "class", "wheelClass", "aria-label");
12
+ const color = createMemo(()=>parseColor(p.value) ?? FALLBACK);
13
13
  const context = ()=>({
14
14
  color,
15
15
  format: ()=>"hex",
16
- disabled: ()=>Boolean(local.isDisabled),
17
- onChange: (next)=>local.onChange(next.hex),
16
+ disabled: ()=>Boolean(p.isDisabled),
17
+ onChange: (next)=>p.onChange(next.hex),
18
18
  onFormatChange: ()=>{}
19
19
  });
20
20
  var _el$ = _tmpl$();
21
- spread(_el$, mergeProps(others, {
22
- get ["class"] () {
23
- return twMerge("color-wheel", local.class);
24
- },
21
+ spread(_el$, mergeProps(others, ()=>_stable.slot.root, {
25
22
  get ["aria-label"] () {
26
- return local["aria-label"] ?? "Colour";
23
+ return p["aria-label"] ?? "Colour";
27
24
  },
28
- "data-slot": "color-wheel",
29
25
  get ["data-disabled"] () {
30
- return local.isDisabled ? "" : void 0;
26
+ return p.isDisabled ? "" : void 0;
31
27
  }
32
28
  }), true);
33
29
  insert(_el$, createComponent(ColorPickerContext, {
@@ -37,17 +33,22 @@ function ColorWheel(props) {
37
33
  get children () {
38
34
  return createComponent(ColorWheelFlower, {
39
35
  get ["class"] () {
40
- return local.wheelClass;
36
+ return p.wheelClass;
41
37
  },
42
38
  get mode () {
43
- return local.mode;
39
+ return p.mode;
44
40
  },
45
41
  get palette () {
46
- return local.palette;
42
+ return p.palette;
47
43
  }
48
44
  });
49
45
  }
50
46
  }));
51
47
  return _el$;
52
- }
53
- export { ColorWheel };
48
+ };
49
+ const ColorWheelLayout = defineComponent({
50
+ recipe: colorWheel,
51
+ layout: __solidLayoutColorWheelLayout,
52
+ embedded: true
53
+ });
54
+ export { ColorWheelLayout };
@@ -0,0 +1,9 @@
1
+ export declare const colorWheel: import("solid-layouts/solid-2").Recipe<{
2
+ readonly component: "color-wheel";
3
+ readonly element: "fieldset";
4
+ readonly slots: {
5
+ readonly root: {
6
+ readonly base: "color-wheel";
7
+ };
8
+ };
9
+ }>;
@@ -0,0 +1,23 @@
1
+ import { recipe } from "../../lib/layouts/index.js";
2
+ const colorWheel = recipe({
3
+ component: "color-wheel",
4
+ element: "fieldset",
5
+ slots: {
6
+ root: {
7
+ base: "color-wheel"
8
+ }
9
+ },
10
+ _layouts: {
11
+ slots: {
12
+ root: {
13
+ base: "color-wheel",
14
+ axes: {}
15
+ }
16
+ },
17
+ stateKeys: [],
18
+ slotIds: {
19
+ root: 0
20
+ }
21
+ }
22
+ });
23
+ export { colorWheel };
@@ -78,7 +78,8 @@
78
78
  .complex-color-wheel__preview {
79
79
  width: 1.5rem;
80
80
  height: 1.5rem;
81
- border: 1px solid color-mix(in srgb, var(--color-base-content) 16%, transparent);
81
+ border: 1px solid
82
+ color-mix(in srgb, var(--color-base-content) 16%, transparent);
82
83
  border-radius: 9999px;
83
84
  box-shadow: inset 0 1px 0 rgb(255 255 255 / 12%);
84
85
  }
@@ -1,7 +1,8 @@
1
+ import type { Component as __LayoutComponent } from "solid-js";
1
2
  import "./ComplexColorWheel.css";
2
3
  import type { JSX } from "@solidjs/web";
3
4
  import { type CardMaterial } from "../card";
4
- import { type ColorWheelProps } from "./ColorWheel";
5
+ import { type ColorWheelProps } from "./ColorWheel.generated";
5
6
  export interface ColorWheelAdjustment {
6
7
  id: string;
7
8
  label: string;
@@ -21,22 +22,10 @@ export interface ColorWheelAdjustment {
21
22
  ink?: (value: number, color: string) => string;
22
23
  }
23
24
  export interface ComplexColorWheelProps extends ColorWheelProps {
24
- /**
25
- * Strength, softness and glass axes, in the order the application wants.
26
- * The composition owns their standard slider markup; colour mathematics
27
- * remain explicit consumer policy through `preview` and `onChange`.
28
- */
25
+ /** Standard value axes rendered beside the wheel. */
29
26
  adjustments: readonly ColorWheelAdjustment[];
30
27
  material?: CardMaterial;
31
28
  action?: JSX.Element;
32
29
  adjustmentsClass?: string;
33
30
  }
34
- /**
35
- * A colour wheel with standard value axes beside it.
36
- *
37
- * This is deliberately a composition instead of a theme engine. Applications
38
- * agree on the interaction and accessible structure while retaining control
39
- * of what "strength", "softness", blur, refraction or depth mean for their
40
- * own tokens.
41
- */
42
- export declare function ComplexColorWheel(props: ComplexColorWheelProps): JSX.Element;
31
+ export declare const ComplexColorWheelLayout: __LayoutComponent<ComplexColorWheelProps>;
@@ -1,66 +1,79 @@
1
- import { className, createComponent, effect, insert, memo, setAttribute, setStyleProperty, template } from "@solidjs/web";
1
+ import { createComponent, insert, memo, mergeProps, spread, template } from "@solidjs/web";
2
+ import { defineComponent } from "solid-layouts/solid-2/application-boundary";
2
3
  import "./ComplexColorWheel.css";
3
4
  import { For, Show } from "solid-js";
5
+ import { twMerge } from "../../lib/twMerge.js";
4
6
  import button_0 from "../button/index.js";
5
7
  import card from "../card/index.js";
6
8
  import slider from "../slider/index.js";
7
- import { ColorWheel } from "./ColorWheel.js";
8
- var _tmpl$ = /*#__PURE__*/ template("<div class=complex-color-wheel__action data-slot=complex-color-wheel-action>"), _tmpl$2 = /*#__PURE__*/ template("<div data-slot=complex-color-wheel-adjustments><!><!>"), _tmpl$3 = /*#__PURE__*/ template("<span class=complex-color-wheel__hint>"), _tmpl$4 = /*#__PURE__*/ template("<div class=complex-color-wheel__axis data-slot=complex-color-wheel-axis><div class=complex-color-wheel__axis-heading><span></span><span></span></div><div class=complex-color-wheel__axis-control>"), _tmpl$5 = /*#__PURE__*/ template("<span class=complex-color-wheel__preview aria-hidden=true>"), _tmpl$6 = /*#__PURE__*/ template("<div class=complex-color-wheel__stops>"), _tmpl$7 = /*#__PURE__*/ template("<span aria-hidden=true class=complex-color-wheel__stop-preview>");
9
- function ComplexColorWheel(props) {
10
- return createComponent(card, {
9
+ import { ColorWheelLayout } from "./ColorWheel.generated.js";
10
+ import { complexColorWheel } from "./ComplexColorWheel.recipe.js";
11
+ var _tmpl$ = /*#__PURE__*/ template("<div>"), _tmpl$2 = /*#__PURE__*/ template("<div><!><!>"), _tmpl$3 = /*#__PURE__*/ template("<span>"), _tmpl$4 = /*#__PURE__*/ template("<div><div><span></span><span></span></div><div>");
12
+ const __solidLayoutComplexColorWheelLayout = (_stable, p)=>createComponent(card, mergeProps(()=>_stable.slot.root, {
11
13
  get material () {
12
- return props.material ?? "glass";
14
+ return p.material ?? "glass";
13
15
  },
14
- class: "complex-color-wheel",
15
- "data-slot": "complex-color-wheel",
16
16
  get children () {
17
17
  return [
18
- createComponent(ColorWheel, {
18
+ createComponent(ColorWheelLayout, {
19
19
  get value () {
20
- return props.value;
20
+ return p.value;
21
21
  },
22
22
  get onChange () {
23
- return props.onChange;
23
+ return p.onChange;
24
24
  },
25
25
  get mode () {
26
- return props.mode;
26
+ return p.mode;
27
27
  },
28
28
  get palette () {
29
- return props.palette;
29
+ return p.palette;
30
30
  },
31
31
  get isDisabled () {
32
- return props.isDisabled;
32
+ return p.isDisabled;
33
33
  },
34
34
  get ["class"] () {
35
- return props.class;
35
+ return p.class;
36
36
  },
37
37
  get wheelClass () {
38
- return props.wheelClass;
38
+ return p.wheelClass;
39
39
  },
40
40
  get ["aria-label"] () {
41
- return props["aria-label"];
41
+ return p["aria-label"];
42
42
  }
43
43
  }),
44
44
  (()=>{
45
45
  var _el$ = _tmpl$2(), _el$3 = _el$.firstChild, _el$4 = _el$3.nextSibling;
46
+ spread(_el$, mergeProps(()=>_stable.slot.adjustments, {
47
+ get ["class"] () {
48
+ return twMerge(_stable.slot.adjustments.class, p.adjustmentsClass);
49
+ }
50
+ }), true);
46
51
  insert(_el$, createComponent(Show, {
47
52
  get when () {
48
- return props.action;
53
+ return p.action;
49
54
  },
50
55
  get children () {
51
56
  var _el$2 = _tmpl$();
52
- insert(_el$2, ()=>props.action);
57
+ spread(_el$2, mergeProps(()=>_stable.slot.action), true);
58
+ insert(_el$2, ()=>p.action);
53
59
  return _el$2;
54
60
  }
55
61
  }), _el$3);
56
62
  insert(_el$, createComponent(For, {
57
63
  get each () {
58
- return props.adjustments;
64
+ return p.adjustments;
59
65
  },
60
66
  children: (adjustment)=>(()=>{
61
67
  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
+ spread(_el$5, mergeProps(()=>_stable.slot.axis, {
69
+ get ["data-axis"] () {
70
+ return adjustment.id;
71
+ }
72
+ }), true);
73
+ spread(_el$6, mergeProps(()=>_stable.slot.axisHeading), true);
62
74
  insert(_el$7, ()=>adjustment.label);
63
75
  insert(_el$8, ()=>adjustment.formatValue?.(adjustment.value) ?? adjustment.value);
76
+ spread(_el$9, mergeProps(()=>_stable.slot.axisControl), true);
64
77
  insert(_el$9, createComponent(Show, {
65
78
  get when () {
66
79
  return memo(()=>!!adjustment.stops?.length)() ? adjustment.stops : void 0;
@@ -72,10 +85,15 @@ function ComplexColorWheel(props) {
72
85
  return adjustment.preview;
73
86
  },
74
87
  get children () {
75
- var _el$1 = _tmpl$5();
76
- effect(()=>adjustment.preview?.(adjustment.value, props.value), (_v$)=>{
77
- setStyleProperty(_el$1, "background-color", _v$);
78
- });
88
+ var _el$1 = _tmpl$3();
89
+ spread(_el$1, mergeProps(()=>_stable.slot.preview, {
90
+ "aria-hidden": "true",
91
+ get style () {
92
+ return {
93
+ "background-color": adjustment.preview?.(adjustment.value, p.value)
94
+ };
95
+ }
96
+ }), false);
79
97
  return _el$1;
80
98
  }
81
99
  }),
@@ -96,7 +114,7 @@ function ComplexColorWheel(props) {
96
114
  return adjustment.step;
97
115
  },
98
116
  get disabled () {
99
- return props.isDisabled;
117
+ return p.isDisabled;
100
118
  },
101
119
  get onChange () {
102
120
  return adjustment.onChange;
@@ -112,12 +130,13 @@ function ComplexColorWheel(props) {
112
130
  ];
113
131
  },
114
132
  children: (stops)=>(()=>{
115
- var _el$10 = _tmpl$6();
133
+ var _el$10 = _tmpl$();
134
+ spread(_el$10, mergeProps(()=>_stable.slot.stops), true);
116
135
  insert(_el$10, createComponent(For, {
117
136
  get each () {
118
137
  return stops();
119
138
  },
120
- children: (stop)=>createComponent(button_0, {
139
+ children: (stop)=>createComponent(button_0, mergeProps(()=>_stable.slot.stop, {
121
140
  type: "button",
122
141
  size: "sm",
123
142
  variant: "ghost",
@@ -128,28 +147,29 @@ function ComplexColorWheel(props) {
128
147
  return Math.abs(adjustment.value - stop) < 0.001 ? "true" : "false";
129
148
  },
130
149
  get disabled () {
131
- return props.isDisabled;
150
+ return p.isDisabled;
132
151
  },
133
152
  onClick: ()=>adjustment.onChange(stop),
134
- class: "complex-color-wheel__stop",
135
153
  get children () {
136
- var _el$11 = _tmpl$7();
154
+ var _el$11 = _tmpl$3();
155
+ spread(_el$11, mergeProps(()=>_stable.slot.stopPreview, {
156
+ "aria-hidden": "true",
157
+ get style () {
158
+ return {
159
+ "background-color": adjustment.preview?.(stop, p.value),
160
+ color: adjustment.ink?.(stop, p.value)
161
+ };
162
+ }
163
+ }), true);
137
164
  insert(_el$11, createComponent(Show, {
138
165
  get when () {
139
166
  return adjustment.ink;
140
167
  },
141
168
  children: "A"
142
169
  }));
143
- effect(()=>({
144
- e: adjustment.preview?.(stop, props.value),
145
- t: adjustment.ink?.(stop, props.value)
146
- }), ({ e, t }, _p$)=>{
147
- e !== _p$?.e && setStyleProperty(_el$11, "background-color", e);
148
- t !== _p$?.t && setStyleProperty(_el$11, "color", t);
149
- });
150
170
  return _el$11;
151
171
  }
152
- })
172
+ }))
153
173
  }));
154
174
  return _el$10;
155
175
  })()
@@ -160,23 +180,22 @@ function ComplexColorWheel(props) {
160
180
  },
161
181
  get children () {
162
182
  var _el$0 = _tmpl$3();
183
+ spread(_el$0, mergeProps(()=>_stable.slot.hint), true);
163
184
  insert(_el$0, ()=>adjustment.hint);
164
185
  return _el$0;
165
186
  }
166
187
  }), null);
167
- effect(()=>adjustment.id, (_v$)=>{
168
- setAttribute(_el$5, "data-axis", _v$);
169
- });
170
188
  return _el$5;
171
189
  })()
172
190
  }), _el$4);
173
- effect(()=>`complex-color-wheel__adjustments ${props.adjustmentsClass ?? ""}`.trim(), (_v$, _$p)=>{
174
- className(_el$, _v$, _$p);
175
- });
176
191
  return _el$;
177
192
  })()
178
193
  ];
179
194
  }
180
- });
181
- }
182
- export { ComplexColorWheel };
195
+ }));
196
+ const ComplexColorWheelLayout = defineComponent({
197
+ recipe: complexColorWheel,
198
+ layout: __solidLayoutComplexColorWheelLayout,
199
+ embedded: true
200
+ });
201
+ export { ComplexColorWheelLayout };
@@ -0,0 +1,38 @@
1
+ export declare const complexColorWheel: import("solid-layouts/solid-2").Recipe<{
2
+ readonly component: "complex-color-wheel";
3
+ readonly slots: {
4
+ readonly root: {
5
+ readonly base: "complex-color-wheel";
6
+ };
7
+ readonly adjustments: {
8
+ readonly base: "complex-color-wheel__adjustments";
9
+ };
10
+ readonly action: {
11
+ readonly base: "complex-color-wheel__action";
12
+ };
13
+ readonly axis: {
14
+ readonly base: "complex-color-wheel__axis";
15
+ };
16
+ readonly axisHeading: {
17
+ readonly base: "complex-color-wheel__axis-heading";
18
+ };
19
+ readonly axisControl: {
20
+ readonly base: "complex-color-wheel__axis-control";
21
+ };
22
+ readonly stops: {
23
+ readonly base: "complex-color-wheel__stops";
24
+ };
25
+ readonly stop: {
26
+ readonly base: "complex-color-wheel__stop";
27
+ };
28
+ readonly stopPreview: {
29
+ readonly base: "complex-color-wheel__stop-preview";
30
+ };
31
+ readonly preview: {
32
+ readonly base: "complex-color-wheel__preview";
33
+ };
34
+ readonly hint: {
35
+ readonly base: "complex-color-wheel__hint";
36
+ };
37
+ };
38
+ }>;
@@ -0,0 +1,102 @@
1
+ import { recipe } from "../../lib/layouts/index.js";
2
+ const complexColorWheel = recipe({
3
+ component: "complex-color-wheel",
4
+ slots: {
5
+ root: {
6
+ base: "complex-color-wheel"
7
+ },
8
+ adjustments: {
9
+ base: "complex-color-wheel__adjustments"
10
+ },
11
+ action: {
12
+ base: "complex-color-wheel__action"
13
+ },
14
+ axis: {
15
+ base: "complex-color-wheel__axis"
16
+ },
17
+ axisHeading: {
18
+ base: "complex-color-wheel__axis-heading"
19
+ },
20
+ axisControl: {
21
+ base: "complex-color-wheel__axis-control"
22
+ },
23
+ stops: {
24
+ base: "complex-color-wheel__stops"
25
+ },
26
+ stop: {
27
+ base: "complex-color-wheel__stop"
28
+ },
29
+ stopPreview: {
30
+ base: "complex-color-wheel__stop-preview"
31
+ },
32
+ preview: {
33
+ base: "complex-color-wheel__preview"
34
+ },
35
+ hint: {
36
+ base: "complex-color-wheel__hint"
37
+ }
38
+ },
39
+ _layouts: {
40
+ slots: {
41
+ root: {
42
+ base: "complex-color-wheel",
43
+ axes: {}
44
+ },
45
+ adjustments: {
46
+ base: "complex-color-wheel__adjustments",
47
+ axes: {}
48
+ },
49
+ action: {
50
+ base: "complex-color-wheel__action",
51
+ axes: {}
52
+ },
53
+ axis: {
54
+ base: "complex-color-wheel__axis",
55
+ axes: {}
56
+ },
57
+ axisHeading: {
58
+ base: "complex-color-wheel__axis-heading",
59
+ axes: {}
60
+ },
61
+ axisControl: {
62
+ base: "complex-color-wheel__axis-control",
63
+ axes: {}
64
+ },
65
+ stops: {
66
+ base: "complex-color-wheel__stops",
67
+ axes: {}
68
+ },
69
+ stop: {
70
+ base: "complex-color-wheel__stop",
71
+ axes: {}
72
+ },
73
+ stopPreview: {
74
+ base: "complex-color-wheel__stop-preview",
75
+ axes: {}
76
+ },
77
+ preview: {
78
+ base: "complex-color-wheel__preview",
79
+ axes: {}
80
+ },
81
+ hint: {
82
+ base: "complex-color-wheel__hint",
83
+ axes: {}
84
+ }
85
+ },
86
+ stateKeys: [],
87
+ slotIds: {
88
+ root: 7,
89
+ adjustments: 1,
90
+ action: 0,
91
+ axis: 2,
92
+ axisHeading: 4,
93
+ axisControl: 3,
94
+ stops: 10,
95
+ stop: 8,
96
+ stopPreview: 9,
97
+ preview: 6,
98
+ hint: 5
99
+ }
100
+ }
101
+ });
102
+ export { complexColorWheel };
@@ -1,4 +1,6 @@
1
- export { ColorWheel } from "./ColorWheel";
2
- export type { ColorWheelProps } from "./ColorWheel";
3
- export { ComplexColorWheel } from "./ComplexColorWheel";
4
- export type { ColorWheelAdjustment, ComplexColorWheelProps, } from "./ComplexColorWheel";
1
+ export type { ColorWheelProps } from "./ColorWheel.generated";
2
+ export { ColorWheelLayout as ColorWheel } from "./ColorWheel.generated";
3
+ export { colorWheel } from "./ColorWheel.recipe";
4
+ export type { ColorWheelAdjustment, ComplexColorWheelProps, } from "./ComplexColorWheel.generated";
5
+ export { ComplexColorWheelLayout as ComplexColorWheel } from "./ComplexColorWheel.generated";
6
+ export { complexColorWheel } from "./ComplexColorWheel.recipe";
@@ -1,2 +1,4 @@
1
- export { ColorWheel } from "./ColorWheel.js";
2
- export { ComplexColorWheel } from "./ComplexColorWheel.js";
1
+ export { ColorWheelLayout as ColorWheel } from "./ColorWheel.generated.js";
2
+ export { colorWheel } from "./ColorWheel.recipe.js";
3
+ export { ComplexColorWheelLayout as ComplexColorWheel } from "./ComplexColorWheel.generated.js";
4
+ export { complexColorWheel } from "./ComplexColorWheel.recipe.js";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "format": "solid-layouts-library-v2",
3
3
  "package": "@pathscale/ui",
4
- "version": "2.9.0",
4
+ "version": "2.9.1",
5
5
  "components": {
6
6
  "Accordion": {
7
7
  "kind": "embedded"
@@ -123,6 +123,9 @@
123
123
  "ColorSwatchPicker": {
124
124
  "kind": "embedded"
125
125
  },
126
+ "ColorWheel": {
127
+ "kind": "embedded"
128
+ },
126
129
  "ColorWheelFlower": {
127
130
  "kind": "embedded"
128
131
  },
@@ -144,6 +147,9 @@
144
147
  "ComboBoxTrigger": {
145
148
  "kind": "embedded"
146
149
  },
150
+ "ComplexColorWheel": {
151
+ "kind": "embedded"
152
+ },
147
153
  "Composer": {
148
154
  "kind": "embedded"
149
155
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pathscale/ui",
3
- "version": "2.9.0",
3
+ "version": "2.9.1",
4
4
  "author": "pathscale",
5
5
  "repository": {
6
6
  "type": "git",