@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.
@@ -10,7 +10,7 @@ import {
10
10
  DEFAULT_LINEAR,
11
11
  motionCss,
12
12
  storageKey
13
- } from "./chunk-7kns3qe6.js";
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-7kns3qe6.js";
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
- }, variantsChoice = () => variantsOf(schema, (key) => pinned().has(key)), scopingOf, scoping = () => {
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
- if (pinned().has(k))
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
- let f = fields[k], tab = tabOf(f);
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-44r02asc.js").then((m) => m.attach);
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-mbhy4jg5.js").then((m) => m.mountPanel);
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
- }, variantsChoice = () => variantsOf(schema, (key) => pinned().has(key)), scopingOf, scoping = () => {
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
- if (pinned().has(k))
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
- let f = fields[k], tab = tabOf(f);
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,