@kitlangton/knobs 0.4.0-next.13 → 0.4.0-next.15
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/README.md +20 -6
- package/dist/dev/{chunk-mbhy4jg5.js → chunk-49hkdggk.js} +199 -135
- package/dist/dev/{chunk-44r02asc.js → chunk-902v1jgd.js} +2 -2
- package/dist/dev/{chunk-pdf3zy95.js → chunk-bejz4qcg.js} +9 -2
- package/dist/dev/{chunk-7kns3qe6.js → chunk-v2g91mrm.js} +9 -1
- package/dist/dev/index.js +19 -8
- package/dist/index.js +23 -5
- package/dist/panel.js +249 -147
- package/dist/review-react.js +5 -3
- package/dist/review-solid.js +5 -3
- package/dist/review.js +5 -3
- package/dist/types/core/remote.d.ts +3 -1
- package/dist/types/core/schema.d.ts +12 -1
- package/dist/types/core/store.d.ts +30 -5
- package/dist/types/panel/gpu/renderer.d.ts +8 -0
- package/dist/types/panel/presets.d.ts +2 -0
- package/dist/types/ui/index.d.ts +1 -1
- package/dist/types/ui/palette.d.ts +15 -0
- package/dist/types/ui/tree-model.d.ts +5 -2
- package/dist/ui-react.js +5 -3
- package/dist/ui-solid.js +5 -3
- package/dist/ui.js +28 -6
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
DEFAULT_LINEAR,
|
|
11
11
|
motionCss,
|
|
12
12
|
storageKey
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-v2g91mrm.js";
|
|
14
14
|
|
|
15
15
|
// src/core/theme.ts
|
|
16
16
|
var property = (k) => k.startsWith("--") ? k : `--k-${k}`;
|
|
@@ -2600,9 +2600,16 @@ ${GRAD_PROPS}
|
|
|
2600
2600
|
/* The active preset's modified mark: the values have drifted off it (a row's dot, in its corner). */
|
|
2601
2601
|
.knobs-panel .knobs-preset-chip::after{content:"";position:absolute;top:4px;right:4px;width:4px;height:4px;border-radius:50%;background:var(--_k-modified);opacity:0;transform:scale(.4);pointer-events:none;transition:opacity .16s ease-out,transform .28s cubic-bezier(.34,1.5,.64,1)}
|
|
2602
2602
|
.knobs-panel .knobs-preset-chip[data-drifted]::after{opacity:.95;transform:none}
|
|
2603
|
+
/* Digits that stay on the chips (hints: { digits: "always" }): quiet, in a column of their own. */
|
|
2604
|
+
.knobs-panel .knobs-preset-key{display:inline-block;margin-right:6px;color:var(--_k-fg-3);font-size:var(--_k-text-meta);font-weight:var(--_k-weight-label);font-variant-numeric:tabular-nums}
|
|
2605
|
+
/* A group's own presets at the top of its card: the chips sit on the card, with no tray. */
|
|
2606
|
+
.knobs-panel .knobs-card>.knobs-presets{margin:0;padding:max(4px,calc((var(--_k-row) - var(--k-button-h,var(--_k-control-h))) / 2)) var(--_k-inset);background:transparent;border-radius:0}
|
|
2607
|
+
.knobs-panel .knobs-card>.knobs-presets[data-display="list"]{padding-inline:0}
|
|
2608
|
+
.knobs-card>.knobs-presets:hover{background:transparent}
|
|
2603
2609
|
/* Naming a saved preset: a field over its chip that opens out from the middle to the chip's width;
|
|
2604
2610
|
the chip's own name hides beneath it. Leaving, it fades. */
|
|
2605
2611
|
.knobs-panel .knobs-preset-chip[data-naming]{color:transparent!important}
|
|
2612
|
+
.knobs-panel .knobs-preset-chip[data-naming] .knobs-preset-key{color:transparent}
|
|
2606
2613
|
.knobs-panel .knobs-preset-name{position:absolute;z-index:2;box-sizing:border-box;min-width:0;margin:0;padding:0 6px;border:1px solid color-mix(in srgb,var(--_k-accent) 55%,transparent);border-radius:var(--k-button-radius,var(--_k-radius-md));outline:none;background:color-mix(in srgb,var(--_k-accent) 10%,transparent);color:var(--_k-fg);caret-color:var(--_k-accent);
|
|
2607
2614
|
font-family:inherit;font-size:var(--k-button-font-size,var(--_k-text-control));font-weight:var(--_k-weight-title);letter-spacing:inherit;text-align:center;animation:knobs-name-in .25s cubic-bezier(.2,.8,.2,1);transition:opacity .11s cubic-bezier(.4,0,1,1)}
|
|
2608
2615
|
.knobs-preset-name::selection{background:color-mix(in srgb,var(--_k-accent) 24%,transparent);color:var(--_k-fg)}
|
|
@@ -3213,7 +3220,7 @@ ${POINTER_ROW} .knobs-slider.knobs-modified:not(:hover,.knobs-active) .knobs-val
|
|
|
3213
3220
|
.knobs-panel[data-gpu-active="true"] :where(header strong,header button,.knobs-tile,.knobs-section-head,.knobs-group-label,.knobs-peek,.knobs-card>*,.knobs-presets,.knobs-preset-chip,.knobs-group-head,.knobs-group-head button,.knobs-card,.knobs-row,.knobs-row>span:first-child,.knobs-slider,.knobs-track,.knobs-label,.knobs-value,.knobs-digits,.knobs-digits *,.knobs-unit,.knobs-seg,.knobs-seg button,.knobs-custom-actions button,.knobs-action,.knobs-select,.knobs-select-value,
|
|
3214
3221
|
.knobs-sub,.knobs-x-head,.knobs-x-label,.knobs-x-read,.knobs-strip-label,.knobs-strip-read,.knobs-pad,.knobs-ease,.knobs-spring-curve,.knobs-ease-chips,.knobs-ease-chip,.knobs-graph,.knobs-graph-read,
|
|
3215
3222
|
.knobs-tabs,.knobs-tab,.knobs-subhead,.knobs-subhead-label,.knobs-match,.knobs-cell,.knobs-cell-axis,.knobs-cell-read,.knobs-link,.knobs-range-read,.knobs-angle,.knobs-angle-read,.knobs-dial,
|
|
3216
|
-
.knobs-seed,.knobs-seed-read,.knobs-seed-digits,.knobs-seed-digits *,.knobs-seed-roll,.knobs-keys,.knobs-keys-text,.knobs-tool,.knobs-tool-label,.knobs-tool-key,
|
|
3223
|
+
.knobs-seed,.knobs-seed-read,.knobs-seed-digits,.knobs-seed-digits *,.knobs-seed-roll,.knobs-keys,.knobs-keys-text,.knobs-tool,.knobs-tool-label,.knobs-tool-key,.knobs-preset-key,
|
|
3217
3224
|
.knobs-section-name,.knobs-section-summary,.knobs-section-desc,.knobs-group-desc,.knobs-group-summary,.knobs-tab-count):not(.knobs-live,.knobs-live *){
|
|
3218
3225
|
background:transparent!important;color:transparent!important;border-color:transparent!important;box-shadow:none!important;
|
|
3219
3226
|
}
|
|
@@ -496,6 +496,7 @@ var META_KEYS = [
|
|
|
496
496
|
"sectionFolded",
|
|
497
497
|
"tab",
|
|
498
498
|
"pinned",
|
|
499
|
+
"inPresets",
|
|
499
500
|
"subsection"
|
|
500
501
|
];
|
|
501
502
|
function pickMeta(source, skip = []) {
|
|
@@ -529,6 +530,13 @@ function pinnedKeys(schema, groups = []) {
|
|
|
529
530
|
out.add(key);
|
|
530
531
|
return out;
|
|
531
532
|
}
|
|
533
|
+
function presetFreeKeys(schema, pinned, groups = {}) {
|
|
534
|
+
let out = new Set(pinned);
|
|
535
|
+
for (let [key, f] of Object.entries(schema))
|
|
536
|
+
if (f.inPresets === !1 || f.group !== void 0 && groups[f.group] === !1)
|
|
537
|
+
out.add(key);
|
|
538
|
+
return out;
|
|
539
|
+
}
|
|
532
540
|
var SPRING2 = {
|
|
533
541
|
duration: { min: 0.05, max: 2, step: 0.01 },
|
|
534
542
|
bounce: { min: -0.5, max: 1, step: 0.01 }
|
|
@@ -1177,4 +1185,4 @@ function urlFlag2(name) {
|
|
|
1177
1185
|
}
|
|
1178
1186
|
var storageKey = (id, part) => `knobs:${encodeURIComponent(id)}:${part}:v1`;
|
|
1179
1187
|
|
|
1180
|
-
export { maxChroma, oklchToRgb, parseColor2, fitColor, formatColor, colorHex2, EASINGS2, EASING_Y, easingName, bezierPoint2, bezierCss2, normalizeCombo2, letterOf2, comboFromEvent2, heldMods, matchesCombo2, comboParts2, comboLabel2, isTypingTarget, GRADIENT_SAMPLES, sampleGradient2, gradientSamples, gradientCss2, stopColorAt, sampleCurve2, curveSamples, CURVE_SHAPES2, inRange, sameRamp, randomStops, mutateStops, randomPoints, mutatePoints, pickMeta, isReadout2, hasValue2, variantsOf, pinnedKeys, SPRING2, valueKeys, knob2, choice2, action2, flatSpring2, toggle2, spring2, color2, point2, easing2, vec22, vec32, range2, angle2, seed2, keybind2, text2, gradient2, curve2, toolbarShortcut2, actionShortcut2, toolbar2, watch2, sparkline2, graph2, meter2, table2, log2, wrapAngle2, normalizeField, normalize, isRecord, same, equal, Spring, springMotion2, springResponse, springEasing, springCss2, SPRINGS2, FADE, MOTION, reducedMotion, reducedSpring2, springLinear, DEFAULT_LINEAR, motionCss, RESHAPE, RESET_KEYS, REFRESHES, readoutState, pushReadout, READOUT, memoryStorage2, browserStorage, urlFlag2, storageKey };
|
|
1188
|
+
export { maxChroma, oklchToRgb, parseColor2, fitColor, formatColor, colorHex2, EASINGS2, EASING_Y, easingName, bezierPoint2, bezierCss2, normalizeCombo2, letterOf2, comboFromEvent2, heldMods, matchesCombo2, comboParts2, comboLabel2, isTypingTarget, GRADIENT_SAMPLES, sampleGradient2, gradientSamples, gradientCss2, stopColorAt, sampleCurve2, curveSamples, CURVE_SHAPES2, inRange, sameRamp, randomStops, mutateStops, randomPoints, mutatePoints, pickMeta, isReadout2, hasValue2, variantsOf, pinnedKeys, presetFreeKeys, SPRING2, valueKeys, knob2, choice2, action2, flatSpring2, toggle2, spring2, color2, point2, easing2, vec22, vec32, range2, angle2, seed2, keybind2, text2, gradient2, curve2, toolbarShortcut2, actionShortcut2, toolbar2, watch2, sparkline2, graph2, meter2, table2, log2, wrapAngle2, normalizeField, normalize, isRecord, same, equal, Spring, springMotion2, springResponse, springEasing, springCss2, SPRINGS2, FADE, MOTION, reducedMotion, reducedSpring2, springLinear, DEFAULT_LINEAR, motionCss, RESHAPE, RESET_KEYS, REFRESHES, readoutState, pushReadout, READOUT, memoryStorage2, browserStorage, urlFlag2, storageKey };
|
package/dist/dev/index.js
CHANGED
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
hasValue2,
|
|
28
28
|
variantsOf,
|
|
29
29
|
pinnedKeys,
|
|
30
|
+
presetFreeKeys,
|
|
30
31
|
SPRING2,
|
|
31
32
|
valueKeys,
|
|
32
33
|
knob2,
|
|
@@ -76,7 +77,7 @@ import {
|
|
|
76
77
|
browserStorage,
|
|
77
78
|
urlFlag2,
|
|
78
79
|
storageKey
|
|
79
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-v2g91mrm.js";
|
|
80
81
|
// src/core/random.ts
|
|
81
82
|
var lattice = (min, max, step, r) => min + Math.floor(r * (Math.floor((max - min) / step + 0.000000001) + 1)) * step, between = (min, max, r) => min + (max - min) * r;
|
|
82
83
|
function pick(field, random) {
|
|
@@ -575,7 +576,7 @@ function createVariants(schema, id, key, storage, get, set, notify, enabled, see
|
|
|
575
576
|
}
|
|
576
577
|
|
|
577
578
|
// src/core/store.ts
|
|
578
|
-
var devBuild = () => !0;
|
|
579
|
+
var devBuild = () => !0, defaultLabelOf = (label, scope) => typeof label === "object" ? label[scope] : label;
|
|
579
580
|
function sameField(a, b) {
|
|
580
581
|
if (a === b)
|
|
581
582
|
return !0;
|
|
@@ -605,7 +606,11 @@ function defineControls(id, input, options = {}) {
|
|
|
605
606
|
if (pinnedOf?.schema !== schema)
|
|
606
607
|
pinnedOf = { schema, keys: pinnedKeys(schema, options.pinned) };
|
|
607
608
|
return pinnedOf.keys;
|
|
608
|
-
},
|
|
609
|
+
}, freeOf, presetFree = () => {
|
|
610
|
+
if (freeOf?.schema !== schema)
|
|
611
|
+
freeOf = { schema, keys: presetFreeKeys(schema, pinned(), options.inPresets) };
|
|
612
|
+
return freeOf.keys;
|
|
613
|
+
}, variantsChoice = () => variantsOf(schema, (key) => presetFree().has(key)), scopingOf, scoping = () => {
|
|
609
614
|
if (scopingOf?.schema === schema)
|
|
610
615
|
return scopingOf;
|
|
611
616
|
let fields = schema, groupTab = /* @__PURE__ */ new Map;
|
|
@@ -620,9 +625,13 @@ function defineControls(id, input, options = {}) {
|
|
|
620
625
|
named.add(variants);
|
|
621
626
|
let of = /* @__PURE__ */ new Map;
|
|
622
627
|
for (let k of valueKeys(schema)) {
|
|
623
|
-
|
|
628
|
+
let f = fields[k];
|
|
629
|
+
if (presetFree().has(k)) {
|
|
630
|
+
if (f.inPresets !== !1 && f.group !== void 0 && named.has(f.group))
|
|
631
|
+
of.set(k, f.group);
|
|
624
632
|
continue;
|
|
625
|
-
|
|
633
|
+
}
|
|
634
|
+
let tab = tabOf(f);
|
|
626
635
|
of.set(k, tab !== void 0 && named.has(tab) ? tab : f.group !== void 0 && named.has(f.group) ? f.group : "");
|
|
627
636
|
}
|
|
628
637
|
return scopingOf = { schema, of, named: [...named], variants }, scopingOf;
|
|
@@ -1200,9 +1209,10 @@ function defineControls(id, input, options = {}) {
|
|
|
1200
1209
|
sectionFolded: options.sectionFolded,
|
|
1201
1210
|
presetLabel: (presetId, scope = "") => {
|
|
1202
1211
|
let v = scoping().variants === scope ? variantsChoice() : void 0, option = presetId === "default" ? v?.field.value : presetId;
|
|
1203
|
-
return options.presetLabels?.[presetId] ?? (presetId === "default" ? options.defaultLabel : void 0) ?? (v && option !== void 0 && v.field.options.includes(option) ? v.field.labels?.[option] ?? option : presetId);
|
|
1212
|
+
return options.presetLabels?.[presetId] ?? (presetId === "default" ? defaultLabelOf(options.defaultLabel, scope) : void 0) ?? (v && option !== void 0 && v.field.options.includes(option) ? v.field.labels?.[option] ?? option : presetId);
|
|
1204
1213
|
},
|
|
1205
1214
|
isPinned: (key) => pinned().has(key),
|
|
1215
|
+
inPresets: (key) => !presetFree().has(key),
|
|
1206
1216
|
get,
|
|
1207
1217
|
set,
|
|
1208
1218
|
sync,
|
|
@@ -1516,11 +1526,11 @@ function defineControls(id, input, options = {}) {
|
|
|
1516
1526
|
code: (format, values) => formatCode(values ?? get(), format),
|
|
1517
1527
|
variants,
|
|
1518
1528
|
attach(element, chip) {
|
|
1519
|
-
let load = options.ship ? () => options.ship().then((m) => m.attach) : () => import("./chunk-
|
|
1529
|
+
let load = options.ship ? () => options.ship().then((m) => m.attach) : () => import("./chunk-902v1jgd.js").then((m) => m.attach);
|
|
1520
1530
|
return live(load, (attach) => attach(controls, element, chip), (detach) => detach());
|
|
1521
1531
|
},
|
|
1522
1532
|
mount(container, mountOptions) {
|
|
1523
|
-
let load = options.ship ? () => options.ship().then((m) => m.mountPanel) : () => import("./chunk-
|
|
1533
|
+
let load = options.ship ? () => options.ship().then((m) => m.mountPanel) : () => import("./chunk-49hkdggk.js").then((m) => m.mountPanel);
|
|
1524
1534
|
return live(load, (mountPanel) => {
|
|
1525
1535
|
let panel = mountPanel(controls, container, mountOptions);
|
|
1526
1536
|
return mountOptions?.onReady?.(panel), panel;
|
|
@@ -1821,6 +1831,7 @@ function createRemoteControls(id, descriptors, options = {}) {
|
|
|
1821
1831
|
presets: options.presets,
|
|
1822
1832
|
scopedPresets: options.scopedPresets,
|
|
1823
1833
|
pinned: options.pinned,
|
|
1834
|
+
inPresets: options.inPresets,
|
|
1824
1835
|
groupPresets: options.groupPresets,
|
|
1825
1836
|
onPreset: options.onPreset,
|
|
1826
1837
|
actions: options.actions,
|
package/dist/index.js
CHANGED
|
@@ -461,6 +461,7 @@ var META_KEYS = [
|
|
|
461
461
|
"sectionFolded",
|
|
462
462
|
"tab",
|
|
463
463
|
"pinned",
|
|
464
|
+
"inPresets",
|
|
464
465
|
"subsection"
|
|
465
466
|
];
|
|
466
467
|
function pickMeta(source, skip = []) {
|
|
@@ -494,6 +495,13 @@ function pinnedKeys(schema, groups = []) {
|
|
|
494
495
|
out.add(key);
|
|
495
496
|
return out;
|
|
496
497
|
}
|
|
498
|
+
function presetFreeKeys(schema, pinned, groups = {}) {
|
|
499
|
+
let out = new Set(pinned);
|
|
500
|
+
for (let [key, f] of Object.entries(schema))
|
|
501
|
+
if (f.inPresets === !1 || f.group !== void 0 && groups[f.group] === !1)
|
|
502
|
+
out.add(key);
|
|
503
|
+
return out;
|
|
504
|
+
}
|
|
497
505
|
var SPRING = {
|
|
498
506
|
duration: { min: 0.05, max: 2, step: 0.01 },
|
|
499
507
|
bounce: { min: -0.5, max: 1, step: 0.01 }
|
|
@@ -1631,7 +1639,7 @@ function createVariants(schema, id, key, storage, get, set, notify, enabled, see
|
|
|
1631
1639
|
}
|
|
1632
1640
|
|
|
1633
1641
|
// src/core/store.ts
|
|
1634
|
-
var devBuild = () => !1;
|
|
1642
|
+
var devBuild = () => !1, defaultLabelOf = (label, scope) => typeof label === "object" ? label[scope] : label;
|
|
1635
1643
|
function sameField(a, b) {
|
|
1636
1644
|
if (a === b)
|
|
1637
1645
|
return !0;
|
|
@@ -1661,7 +1669,11 @@ function defineControls(id, input, options = {}) {
|
|
|
1661
1669
|
if (pinnedOf?.schema !== schema)
|
|
1662
1670
|
pinnedOf = { schema, keys: pinnedKeys(schema, options.pinned) };
|
|
1663
1671
|
return pinnedOf.keys;
|
|
1664
|
-
},
|
|
1672
|
+
}, freeOf, presetFree = () => {
|
|
1673
|
+
if (freeOf?.schema !== schema)
|
|
1674
|
+
freeOf = { schema, keys: presetFreeKeys(schema, pinned(), options.inPresets) };
|
|
1675
|
+
return freeOf.keys;
|
|
1676
|
+
}, variantsChoice = () => variantsOf(schema, (key) => presetFree().has(key)), scopingOf, scoping = () => {
|
|
1665
1677
|
if (scopingOf?.schema === schema)
|
|
1666
1678
|
return scopingOf;
|
|
1667
1679
|
let fields = schema, groupTab = /* @__PURE__ */ new Map;
|
|
@@ -1676,9 +1688,13 @@ function defineControls(id, input, options = {}) {
|
|
|
1676
1688
|
named.add(variants);
|
|
1677
1689
|
let of = /* @__PURE__ */ new Map;
|
|
1678
1690
|
for (let k of valueKeys(schema)) {
|
|
1679
|
-
|
|
1691
|
+
let f = fields[k];
|
|
1692
|
+
if (presetFree().has(k)) {
|
|
1693
|
+
if (f.inPresets !== !1 && f.group !== void 0 && named.has(f.group))
|
|
1694
|
+
of.set(k, f.group);
|
|
1680
1695
|
continue;
|
|
1681
|
-
|
|
1696
|
+
}
|
|
1697
|
+
let tab = tabOf(f);
|
|
1682
1698
|
of.set(k, tab !== void 0 && named.has(tab) ? tab : f.group !== void 0 && named.has(f.group) ? f.group : "");
|
|
1683
1699
|
}
|
|
1684
1700
|
return scopingOf = { schema, of, named: [...named], variants }, scopingOf;
|
|
@@ -2256,9 +2272,10 @@ function defineControls(id, input, options = {}) {
|
|
|
2256
2272
|
sectionFolded: options.sectionFolded,
|
|
2257
2273
|
presetLabel: (presetId, scope = "") => {
|
|
2258
2274
|
let v = scoping().variants === scope ? variantsChoice() : void 0, option = presetId === "default" ? v?.field.value : presetId;
|
|
2259
|
-
return options.presetLabels?.[presetId] ?? (presetId === "default" ? options.defaultLabel : void 0) ?? (v && option !== void 0 && v.field.options.includes(option) ? v.field.labels?.[option] ?? option : presetId);
|
|
2275
|
+
return options.presetLabels?.[presetId] ?? (presetId === "default" ? defaultLabelOf(options.defaultLabel, scope) : void 0) ?? (v && option !== void 0 && v.field.options.includes(option) ? v.field.labels?.[option] ?? option : presetId);
|
|
2260
2276
|
},
|
|
2261
2277
|
isPinned: (key) => pinned().has(key),
|
|
2278
|
+
inPresets: (key) => !presetFree().has(key),
|
|
2262
2279
|
get,
|
|
2263
2280
|
set,
|
|
2264
2281
|
sync,
|
|
@@ -2877,6 +2894,7 @@ function createRemoteControls(id, descriptors, options = {}) {
|
|
|
2877
2894
|
presets: options.presets,
|
|
2878
2895
|
scopedPresets: options.scopedPresets,
|
|
2879
2896
|
pinned: options.pinned,
|
|
2897
|
+
inPresets: options.inPresets,
|
|
2880
2898
|
groupPresets: options.groupPresets,
|
|
2881
2899
|
onPreset: options.onPreset,
|
|
2882
2900
|
actions: options.actions,
|