coveragebook_components 0.17.1 → 0.17.2
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.
- checksums.yaml +4 -4
- data/app/assets/build/coco/coco.css +4 -0
- data/app/assets/build/coco/coco.js +111 -67
- data/app/components/coco/buttons/button_group/button_group.css +6 -0
- data/app/components/coco/buttons/button_group/button_group.rb +1 -0
- data/app/components/coco/concerns/acts_as_button_group.rb +5 -0
- data/app/helpers/coco/components_helper.rb +52 -52
- data/lib/coco.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a2af0604e33ee8ea690a93abf997f126ecaeb23528b3bf682fadc79eed353df2
         | 
| 4 | 
            +
              data.tar.gz: 6d055a247adaa8f2a794d3a6864d38a23fd2059d0c01d08ea183e751c06c440c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: eb41e2bfb905a693fb9a9ac36019d09699001552fa9f6aa2ce0df0b7f8281ebcc159f15cf41a58c059e1f83fe6907c085265cddee43dc893d8d475e34b146092
         | 
| 7 | 
            +
              data.tar.gz: 9c229a0bf2926994c7bf5699485365d74956e3fc23cb0df41842b11ca5e27df24f3603c9339a86771316acdf94b185e83250f9e2b5c651771f0fcb130c0f7f24
         | 
| @@ -2241,6 +2241,10 @@ select{ | |
| 2241 2241 | 
             
              border-color: rgb(209 213 219 / var(--tw-border-opacity))
         | 
| 2242 2242 | 
             
            }
         | 
| 2243 2243 |  | 
| 2244 | 
            +
            [data-coco][data-component="button-group"][data-reversed="true"] .button-group-buttons{
         | 
| 2245 | 
            +
              flex-direction: row-reverse
         | 
| 2246 | 
            +
            }
         | 
| 2247 | 
            +
             | 
| 2244 2248 | 
             
            [data-coco][data-component="button-group"][data-align="end"] .button-group-buttons{
         | 
| 2245 2249 | 
             
              margin-left: auto
         | 
| 2246 2250 | 
             
            }
         | 
| @@ -7176,6 +7176,7 @@ var require_module_cjs = __commonJS({ | |
| 7176 7176 | 
             
                });
         | 
| 7177 7177 | 
             
                var module_exports = {};
         | 
| 7178 7178 | 
             
                __export2(module_exports, {
         | 
| 7179 | 
            +
                  Alpine: () => src_default,
         | 
| 7179 7180 | 
             
                  default: () => module_default
         | 
| 7180 7181 | 
             
                });
         | 
| 7181 7182 | 
             
                module.exports = __toCommonJS(module_exports);
         | 
| @@ -7262,6 +7263,24 @@ var require_module_cjs = __commonJS({ | |
| 7262 7263 | 
             
                    cleanup();
         | 
| 7263 7264 | 
             
                  }];
         | 
| 7264 7265 | 
             
                }
         | 
| 7266 | 
            +
                function watch(getter, callback) {
         | 
| 7267 | 
            +
                  let firstTime = true;
         | 
| 7268 | 
            +
                  let oldValue;
         | 
| 7269 | 
            +
                  let effectReference = effect(() => {
         | 
| 7270 | 
            +
                    let value = getter();
         | 
| 7271 | 
            +
                    JSON.stringify(value);
         | 
| 7272 | 
            +
                    if (!firstTime) {
         | 
| 7273 | 
            +
                      queueMicrotask(() => {
         | 
| 7274 | 
            +
                        callback(value, oldValue);
         | 
| 7275 | 
            +
                        oldValue = value;
         | 
| 7276 | 
            +
                      });
         | 
| 7277 | 
            +
                    } else {
         | 
| 7278 | 
            +
                      oldValue = value;
         | 
| 7279 | 
            +
                    }
         | 
| 7280 | 
            +
                    firstTime = false;
         | 
| 7281 | 
            +
                  });
         | 
| 7282 | 
            +
                  return () => release(effectReference);
         | 
| 7283 | 
            +
                }
         | 
| 7265 7284 | 
             
                function dispatch(el, name, detail = {}) {
         | 
| 7266 7285 | 
             
                  el.dispatchEvent(
         | 
| 7267 7286 | 
             
                    new CustomEvent(name, {
         | 
| @@ -7421,21 +7440,17 @@ var require_module_cjs = __commonJS({ | |
| 7421 7440 | 
             
                  observer.disconnect();
         | 
| 7422 7441 | 
             
                  currentlyObserving = false;
         | 
| 7423 7442 | 
             
                }
         | 
| 7424 | 
            -
                var  | 
| 7425 | 
            -
                var willProcessRecordQueue = false;
         | 
| 7443 | 
            +
                var queuedMutations = [];
         | 
| 7426 7444 | 
             
                function flushObserver() {
         | 
| 7427 | 
            -
                   | 
| 7428 | 
            -
                   | 
| 7429 | 
            -
             | 
| 7430 | 
            -
             | 
| 7431 | 
            -
             | 
| 7432 | 
            -
                       | 
| 7433 | 
            -
             | 
| 7434 | 
            -
             | 
| 7435 | 
            -
             | 
| 7436 | 
            -
                function processRecordQueue() {
         | 
| 7437 | 
            -
                  onMutate(recordQueue);
         | 
| 7438 | 
            -
                  recordQueue.length = 0;
         | 
| 7445 | 
            +
                  let records = observer.takeRecords();
         | 
| 7446 | 
            +
                  queuedMutations.push(() => records.length > 0 && onMutate(records));
         | 
| 7447 | 
            +
                  let queueLengthWhenTriggered = queuedMutations.length;
         | 
| 7448 | 
            +
                  queueMicrotask(() => {
         | 
| 7449 | 
            +
                    if (queuedMutations.length === queueLengthWhenTriggered) {
         | 
| 7450 | 
            +
                      while (queuedMutations.length > 0)
         | 
| 7451 | 
            +
                        queuedMutations.shift()();
         | 
| 7452 | 
            +
                    }
         | 
| 7453 | 
            +
                  });
         | 
| 7439 7454 | 
             
                }
         | 
| 7440 7455 | 
             
                function mutateDom(callback) {
         | 
| 7441 7456 | 
             
                  if (!currentlyObserving)
         | 
| @@ -7460,16 +7475,16 @@ var require_module_cjs = __commonJS({ | |
| 7460 7475 | 
             
                    deferredMutations = deferredMutations.concat(mutations);
         | 
| 7461 7476 | 
             
                    return;
         | 
| 7462 7477 | 
             
                  }
         | 
| 7463 | 
            -
                  let addedNodes =  | 
| 7464 | 
            -
                  let removedNodes =  | 
| 7478 | 
            +
                  let addedNodes = /* @__PURE__ */ new Set();
         | 
| 7479 | 
            +
                  let removedNodes = /* @__PURE__ */ new Set();
         | 
| 7465 7480 | 
             
                  let addedAttributes = /* @__PURE__ */ new Map();
         | 
| 7466 7481 | 
             
                  let removedAttributes = /* @__PURE__ */ new Map();
         | 
| 7467 7482 | 
             
                  for (let i2 = 0; i2 < mutations.length; i2++) {
         | 
| 7468 7483 | 
             
                    if (mutations[i2].target._x_ignoreMutationObserver)
         | 
| 7469 7484 | 
             
                      continue;
         | 
| 7470 7485 | 
             
                    if (mutations[i2].type === "childList") {
         | 
| 7471 | 
            -
                      mutations[i2].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes. | 
| 7472 | 
            -
                      mutations[i2].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes. | 
| 7486 | 
            +
                      mutations[i2].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes.add(node));
         | 
| 7487 | 
            +
                      mutations[i2].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes.add(node));
         | 
| 7473 7488 | 
             
                    }
         | 
| 7474 7489 | 
             
                    if (mutations[i2].type === "attributes") {
         | 
| 7475 7490 | 
             
                      let el = mutations[i2].target;
         | 
| @@ -7502,7 +7517,7 @@ var require_module_cjs = __commonJS({ | |
| 7502 7517 | 
             
                    onAttributeAddeds.forEach((i2) => i2(el, attrs));
         | 
| 7503 7518 | 
             
                  });
         | 
| 7504 7519 | 
             
                  for (let node of removedNodes) {
         | 
| 7505 | 
            -
                    if (addedNodes. | 
| 7520 | 
            +
                    if (addedNodes.has(node))
         | 
| 7506 7521 | 
             
                      continue;
         | 
| 7507 7522 | 
             
                    onElRemoveds.forEach((i2) => i2(node));
         | 
| 7508 7523 | 
             
                    destroyTree(node);
         | 
| @@ -7512,7 +7527,7 @@ var require_module_cjs = __commonJS({ | |
| 7512 7527 | 
             
                    node._x_ignore = true;
         | 
| 7513 7528 | 
             
                  });
         | 
| 7514 7529 | 
             
                  for (let node of addedNodes) {
         | 
| 7515 | 
            -
                    if (removedNodes. | 
| 7530 | 
            +
                    if (removedNodes.has(node))
         | 
| 7516 7531 | 
             
                      continue;
         | 
| 7517 7532 | 
             
                    if (!node.isConnected)
         | 
| 7518 7533 | 
             
                      continue;
         | 
| @@ -7690,7 +7705,10 @@ var require_module_cjs = __commonJS({ | |
| 7690 7705 | 
             
                  }
         | 
| 7691 7706 | 
             
                }
         | 
| 7692 7707 | 
             
                function handleError(error2, el, expression = void 0) {
         | 
| 7693 | 
            -
                  Object.assign( | 
| 7708 | 
            +
                  error2 = Object.assign(
         | 
| 7709 | 
            +
                    error2 != null ? error2 : { message: "No error message given." },
         | 
| 7710 | 
            +
                    { el, expression }
         | 
| 7711 | 
            +
                  );
         | 
| 7694 7712 | 
             
                  console.warn(`Alpine Expression Error: ${error2.message}
         | 
| 7695 7713 |  | 
| 7696 7714 | 
             
            ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
         | 
| @@ -7806,9 +7824,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); | |
| 7806 7824 | 
             
                  return {
         | 
| 7807 7825 | 
             
                    before(directive2) {
         | 
| 7808 7826 | 
             
                      if (!directiveHandlers[directive2]) {
         | 
| 7809 | 
            -
                        console.warn(
         | 
| 7810 | 
            -
                          "Cannot find directive `${directive}`. `${name}` will use the default order of execution"
         | 
| 7811 | 
            -
                        );
         | 
| 7827 | 
            +
                        console.warn(String.raw`Cannot find directive \`${directive2}\`. \`${name}\` will use the default order of execution`);
         | 
| 7812 7828 | 
             
                        return;
         | 
| 7813 7829 | 
             
                      }
         | 
| 7814 7830 | 
             
                      const pos = directiveOrder.indexOf(directive2);
         | 
| @@ -8602,25 +8618,25 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); | |
| 8602 8618 | 
             
                function entangle({ get: outerGet, set: outerSet }, { get: innerGet, set: innerSet }) {
         | 
| 8603 8619 | 
             
                  let firstRun = true;
         | 
| 8604 8620 | 
             
                  let outerHash;
         | 
| 8621 | 
            +
                  let innerHash;
         | 
| 8605 8622 | 
             
                  let reference = effect(() => {
         | 
| 8606 | 
            -
                     | 
| 8607 | 
            -
                     | 
| 8623 | 
            +
                    let outer = outerGet();
         | 
| 8624 | 
            +
                    let inner = innerGet();
         | 
| 8608 8625 | 
             
                    if (firstRun) {
         | 
| 8609 8626 | 
             
                      innerSet(cloneIfObject(outer));
         | 
| 8610 8627 | 
             
                      firstRun = false;
         | 
| 8611 | 
            -
                      outerHash = JSON.stringify(outer);
         | 
| 8612 8628 | 
             
                    } else {
         | 
| 8613 | 
            -
                       | 
| 8629 | 
            +
                      let outerHashLatest = JSON.stringify(outer);
         | 
| 8630 | 
            +
                      let innerHashLatest = JSON.stringify(inner);
         | 
| 8614 8631 | 
             
                      if (outerHashLatest !== outerHash) {
         | 
| 8615 8632 | 
             
                        innerSet(cloneIfObject(outer));
         | 
| 8616 | 
            -
             | 
| 8617 | 
            -
                      } else {
         | 
| 8633 | 
            +
                      } else if (outerHashLatest !== innerHashLatest) {
         | 
| 8618 8634 | 
             
                        outerSet(cloneIfObject(inner));
         | 
| 8619 | 
            -
             | 
| 8635 | 
            +
                      } else {
         | 
| 8620 8636 | 
             
                      }
         | 
| 8621 8637 | 
             
                    }
         | 
| 8622 | 
            -
                    JSON.stringify( | 
| 8623 | 
            -
                    JSON.stringify( | 
| 8638 | 
            +
                    outerHash = JSON.stringify(outerGet());
         | 
| 8639 | 
            +
                    innerHash = JSON.stringify(innerGet());
         | 
| 8624 8640 | 
             
                  });
         | 
| 8625 8641 | 
             
                  return () => {
         | 
| 8626 8642 | 
             
                    release(reference);
         | 
| @@ -8729,7 +8745,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); | |
| 8729 8745 | 
             
                  get raw() {
         | 
| 8730 8746 | 
             
                    return raw;
         | 
| 8731 8747 | 
             
                  },
         | 
| 8732 | 
            -
                  version: "3.13. | 
| 8748 | 
            +
                  version: "3.13.5",
         | 
| 8733 8749 | 
             
                  flushAndStopDeferringMutations,
         | 
| 8734 8750 | 
             
                  dontAutoEvaluateFunctions,
         | 
| 8735 8751 | 
             
                  disableEffectScheduling,
         | 
| @@ -8782,31 +8798,24 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); | |
| 8782 8798 | 
             
                  // INTERNAL
         | 
| 8783 8799 | 
             
                  bound: getBinding,
         | 
| 8784 8800 | 
             
                  $data: scope,
         | 
| 8801 | 
            +
                  watch,
         | 
| 8785 8802 | 
             
                  walk,
         | 
| 8786 8803 | 
             
                  data,
         | 
| 8787 8804 | 
             
                  bind: bind2
         | 
| 8788 8805 | 
             
                };
         | 
| 8789 8806 | 
             
                var alpine_default2 = Alpine3;
         | 
| 8790 | 
            -
                var  | 
| 8807 | 
            +
                var import_reactivity10 = __toESM2(require_reactivity());
         | 
| 8791 8808 | 
             
                magic("nextTick", () => nextTick);
         | 
| 8792 8809 | 
             
                magic("dispatch", (el) => dispatch.bind(dispatch, el));
         | 
| 8793 | 
            -
                magic("watch", (el, { evaluateLater: evaluateLater2,  | 
| 8810 | 
            +
                magic("watch", (el, { evaluateLater: evaluateLater2, cleanup }) => (key, callback) => {
         | 
| 8794 8811 | 
             
                  let evaluate2 = evaluateLater2(key);
         | 
| 8795 | 
            -
                  let  | 
| 8796 | 
            -
             | 
| 8797 | 
            -
             | 
| 8798 | 
            -
                     | 
| 8799 | 
            -
             | 
| 8800 | 
            -
             | 
| 8801 | 
            -
             | 
| 8802 | 
            -
                        oldValue = value;
         | 
| 8803 | 
            -
                      });
         | 
| 8804 | 
            -
                    } else {
         | 
| 8805 | 
            -
                      oldValue = value;
         | 
| 8806 | 
            -
                    }
         | 
| 8807 | 
            -
                    firstTime = false;
         | 
| 8808 | 
            -
                  }));
         | 
| 8809 | 
            -
                  el._x_effects.delete(effectReference);
         | 
| 8812 | 
            +
                  let getter = () => {
         | 
| 8813 | 
            +
                    let value;
         | 
| 8814 | 
            +
                    evaluate2((i2) => value = i2);
         | 
| 8815 | 
            +
                    return value;
         | 
| 8816 | 
            +
                  };
         | 
| 8817 | 
            +
                  let unwatch = watch(getter, callback);
         | 
| 8818 | 
            +
                  cleanup(unwatch);
         | 
| 8810 8819 | 
             
                });
         | 
| 8811 8820 | 
             
                magic("store", getStores);
         | 
| 8812 8821 | 
             
                magic("data", (el) => scope(el));
         | 
| @@ -8845,11 +8854,31 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); | |
| 8845 8854 | 
             
                  if (!el._x_ids[name])
         | 
| 8846 8855 | 
             
                    el._x_ids[name] = findAndIncrementId(name);
         | 
| 8847 8856 | 
             
                }
         | 
| 8848 | 
            -
                magic("id", (el) => (name, key = null) => {
         | 
| 8849 | 
            -
                  let  | 
| 8850 | 
            -
                   | 
| 8851 | 
            -
             | 
| 8857 | 
            +
                magic("id", (el, { cleanup }) => (name, key = null) => {
         | 
| 8858 | 
            +
                  let cacheKey = `${name}${key ? `-${key}` : ""}`;
         | 
| 8859 | 
            +
                  return cacheIdByNameOnElement(el, cacheKey, cleanup, () => {
         | 
| 8860 | 
            +
                    let root = closestIdRoot(el, name);
         | 
| 8861 | 
            +
                    let id = root ? root._x_ids[name] : findAndIncrementId(name);
         | 
| 8862 | 
            +
                    return key ? `${name}-${id}-${key}` : `${name}-${id}`;
         | 
| 8863 | 
            +
                  });
         | 
| 8864 | 
            +
                });
         | 
| 8865 | 
            +
                interceptClone((from, to) => {
         | 
| 8866 | 
            +
                  if (from._x_id) {
         | 
| 8867 | 
            +
                    to._x_id = from._x_id;
         | 
| 8868 | 
            +
                  }
         | 
| 8852 8869 | 
             
                });
         | 
| 8870 | 
            +
                function cacheIdByNameOnElement(el, cacheKey, cleanup, callback) {
         | 
| 8871 | 
            +
                  if (!el._x_id)
         | 
| 8872 | 
            +
                    el._x_id = {};
         | 
| 8873 | 
            +
                  if (el._x_id[cacheKey])
         | 
| 8874 | 
            +
                    return el._x_id[cacheKey];
         | 
| 8875 | 
            +
                  let output = callback();
         | 
| 8876 | 
            +
                  el._x_id[cacheKey] = output;
         | 
| 8877 | 
            +
                  cleanup(() => {
         | 
| 8878 | 
            +
                    delete el._x_id[cacheKey];
         | 
| 8879 | 
            +
                  });
         | 
| 8880 | 
            +
                  return output;
         | 
| 8881 | 
            +
                }
         | 
| 8853 8882 | 
             
                magic("el", (el) => el);
         | 
| 8854 8883 | 
             
                warnMissingPluginMagic("Focus", "focus", "focus");
         | 
| 8855 8884 | 
             
                warnMissingPluginMagic("Persist", "persist", "persist");
         | 
| @@ -9153,7 +9182,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); | |
| 9153 9182 | 
             
                    setValue(getInputValue(el, modifiers, e2, getValue()));
         | 
| 9154 9183 | 
             
                  });
         | 
| 9155 9184 | 
             
                  if (modifiers.includes("fill")) {
         | 
| 9156 | 
            -
                    if ([null, ""].includes(getValue()) || el.type === "checkbox" && Array.isArray(getValue())) {
         | 
| 9185 | 
            +
                    if ([void 0, null, ""].includes(getValue()) || el.type === "checkbox" && Array.isArray(getValue())) {
         | 
| 9157 9186 | 
             
                      el.dispatchEvent(new Event(event, {}));
         | 
| 9158 9187 | 
             
                    }
         | 
| 9159 9188 | 
             
                  }
         | 
| @@ -9618,6 +9647,11 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); | |
| 9618 9647 | 
             
                  let names = evaluate2(expression);
         | 
| 9619 9648 | 
             
                  names.forEach((name) => setIdRoot(el, name));
         | 
| 9620 9649 | 
             
                });
         | 
| 9650 | 
            +
                interceptClone((from, to) => {
         | 
| 9651 | 
            +
                  if (from._x_ids) {
         | 
| 9652 | 
            +
                    to._x_ids = from._x_ids;
         | 
| 9653 | 
            +
                  }
         | 
| 9654 | 
            +
                });
         | 
| 9621 9655 | 
             
                mapAttributes(startingWith("@", into(prefix("on:"))));
         | 
| 9622 9656 | 
             
                directive("on", skipDuringClone((el, { value, modifiers, expression }, { cleanup }) => {
         | 
| 9623 9657 | 
             
                  let evaluate2 = expression ? evaluateLater(el, expression) : () => {
         | 
| @@ -9642,7 +9676,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); | |
| 9642 9676 | 
             
                  directive(directiveName, (el) => warn(`You can't use [x-${directiveName}] without first installing the "${name}" plugin here: https://alpinejs.dev/plugins/${slug}`, el));
         | 
| 9643 9677 | 
             
                }
         | 
| 9644 9678 | 
             
                alpine_default2.setEvaluator(normalEvaluator);
         | 
| 9645 | 
            -
                alpine_default2.setReactivityEngine({ reactive:  | 
| 9679 | 
            +
                alpine_default2.setReactivityEngine({ reactive: import_reactivity10.reactive, effect: import_reactivity10.effect, release: import_reactivity10.stop, raw: import_reactivity10.toRaw });
         | 
| 9646 9680 | 
             
                var src_default = alpine_default2;
         | 
| 9647 9681 | 
             
                var module_default = src_default;
         | 
| 9648 9682 | 
             
              }
         | 
| @@ -9671,7 +9705,7 @@ var require_module_cjs2 = __commonJS({ | |
| 9671 9705 | 
             
                var module_exports = {};
         | 
| 9672 9706 | 
             
                __export2(module_exports, {
         | 
| 9673 9707 | 
             
                  default: () => module_default,
         | 
| 9674 | 
            -
                  morph: () =>  | 
| 9708 | 
            +
                  morph: () => src_default
         | 
| 9675 9709 | 
             
                });
         | 
| 9676 9710 | 
             
                module.exports = __toCommonJS(module_exports);
         | 
| 9677 9711 | 
             
                function morph2(from, toHtml, options) {
         | 
| @@ -10034,11 +10068,12 @@ var require_module_cjs3 = __commonJS({ | |
| 10034 10068 | 
             
                var module_exports = {};
         | 
| 10035 10069 | 
             
                __export2(module_exports, {
         | 
| 10036 10070 | 
             
                  default: () => module_default,
         | 
| 10071 | 
            +
                  mask: () => src_default,
         | 
| 10037 10072 | 
             
                  stripDown: () => stripDown
         | 
| 10038 10073 | 
             
                });
         | 
| 10039 10074 | 
             
                module.exports = __toCommonJS(module_exports);
         | 
| 10040 10075 | 
             
                function src_default(Alpine3) {
         | 
| 10041 | 
            -
                  Alpine3.directive("mask", (el, { value, expression }, { effect, evaluateLater }) => {
         | 
| 10076 | 
            +
                  Alpine3.directive("mask", (el, { value, expression }, { effect, evaluateLater, cleanup }) => {
         | 
| 10042 10077 | 
             
                    let templateFn = () => expression;
         | 
| 10043 10078 | 
             
                    let lastInputValue = "";
         | 
| 10044 10079 | 
             
                    queueMicrotask(() => {
         | 
| @@ -10066,8 +10101,17 @@ var require_module_cjs3 = __commonJS({ | |
| 10066 10101 | 
             
                      if (el._x_model)
         | 
| 10067 10102 | 
             
                        el._x_model.set(el.value);
         | 
| 10068 10103 | 
             
                    });
         | 
| 10069 | 
            -
                     | 
| 10070 | 
            -
                     | 
| 10104 | 
            +
                    const controller = new AbortController();
         | 
| 10105 | 
            +
                    cleanup(() => {
         | 
| 10106 | 
            +
                      controller.abort();
         | 
| 10107 | 
            +
                    });
         | 
| 10108 | 
            +
                    el.addEventListener("input", () => processInputValue(el), {
         | 
| 10109 | 
            +
                      signal: controller.signal,
         | 
| 10110 | 
            +
                      // Setting this as a capture phase listener to ensure it runs
         | 
| 10111 | 
            +
                      // before wire:model or x-model added as a latent binding...
         | 
| 10112 | 
            +
                      capture: true
         | 
| 10113 | 
            +
                    });
         | 
| 10114 | 
            +
                    el.addEventListener("blur", () => processInputValue(el, false), { signal: controller.signal });
         | 
| 10071 10115 | 
             
                    function processInputValue(el2, shouldRestoreCursor = true) {
         | 
| 10072 10116 | 
             
                      let input = el2.value;
         | 
| 10073 10117 | 
             
                      let template = templateFn(input);
         | 
| @@ -15371,7 +15415,7 @@ var alpine_default = import_alpinejs.default; | |
| 15371 15415 | 
             
            // ../../../package.json
         | 
| 15372 15416 | 
             
            var package_default = {
         | 
| 15373 15417 | 
             
              name: "coveragebook-components",
         | 
| 15374 | 
            -
              version: "0.17. | 
| 15418 | 
            +
              version: "0.17.2",
         | 
| 15375 15419 | 
             
              repository: "git@github.com:coveragebook/coco.git",
         | 
| 15376 15420 | 
             
              license: "NO LICENSE",
         | 
| 15377 15421 | 
             
              author: "Mark Perkins <mark@coveragebook.com>",
         | 
| @@ -15413,14 +15457,14 @@ var package_default = { | |
| 15413 15457 | 
             
              },
         | 
| 15414 15458 | 
             
              dependencies: {
         | 
| 15415 15459 | 
             
                "@alpinejs/focus": "^3.13.2",
         | 
| 15416 | 
            -
                "@alpinejs/mask": "^3.13. | 
| 15417 | 
            -
                "@alpinejs/morph": "^3.13. | 
| 15460 | 
            +
                "@alpinejs/mask": "^3.13.5",
         | 
| 15461 | 
            +
                "@alpinejs/morph": "^3.13.5",
         | 
| 15418 15462 | 
             
                "@jaames/iro": "^5.5.2",
         | 
| 15419 15463 | 
             
                "@percy/cli": "^1.27.3",
         | 
| 15420 15464 | 
             
                "@tailwindcss/container-queries": "^0.1.0",
         | 
| 15421 15465 | 
             
                "@tailwindcss/forms": "^0.5.6",
         | 
| 15422 15466 | 
             
                "alias-hq": "^6.2.2",
         | 
| 15423 | 
            -
                alpinejs: "^3.13. | 
| 15467 | 
            +
                alpinejs: "^3.13.5",
         | 
| 15424 15468 | 
             
                autoprefixer: "^10.4.16",
         | 
| 15425 15469 | 
             
                "container-query-polyfill": "^1.0.2",
         | 
| 15426 15470 | 
             
                del: "^7.1.0",
         | 
| @@ -15430,14 +15474,14 @@ var package_default = { | |
| 15430 15474 | 
             
                "fast-sort": "^3.2.1",
         | 
| 15431 15475 | 
             
                husky: "^8.0.3",
         | 
| 15432 15476 | 
             
                "js-cookie": "^3.0.5",
         | 
| 15433 | 
            -
                "lint-staged": "^15.2. | 
| 15477 | 
            +
                "lint-staged": "^15.2.2",
         | 
| 15434 15478 | 
             
                "lodash.camelcase": "^4.3.0",
         | 
| 15435 15479 | 
             
                "lodash.kebabcase": "^4.1.1",
         | 
| 15436 15480 | 
             
                "lodash.keyby": "^4.6.0",
         | 
| 15437 15481 | 
             
                "lodash.mapvalues": "^4.6.0",
         | 
| 15438 15482 | 
             
                "lucide-static": "^0.303.0",
         | 
| 15439 15483 | 
             
                postcss: "^8.4.31",
         | 
| 15440 | 
            -
                "postcss-cli": "^ | 
| 15484 | 
            +
                "postcss-cli": "^11.0.0",
         | 
| 15441 15485 | 
             
                "postcss-value-parser": "^4.2.0",
         | 
| 15442 15486 | 
             
                prettier: "^3.1.1",
         | 
| 15443 15487 | 
             
                "release-it": "^17.0.1",
         | 
| @@ -5,6 +5,7 @@ module Coco | |
| 5 5 |  | 
| 6 6 | 
             
                accepts_option :size, default: :default, private: true
         | 
| 7 7 | 
             
                accepts_option :theme, default: :primary, private: true
         | 
| 8 | 
            +
                accepts_option :reversed, from: [true, false], default: false
         | 
| 8 9 | 
             
                accepts_option :segmented, from: [true, false], default: false
         | 
| 9 10 | 
             
                accepts_option :floating, from: [true, false], default: false
         | 
| 10 11 | 
             
                accepts_option :collapsible, from: [true, false, nil]
         | 
| @@ -14,6 +14,7 @@ module Coco | |
| 14 14 | 
             
                    renders_many :items, types: {
         | 
| 15 15 | 
             
                      noop: -> {},
         | 
| 16 16 | 
             
                      divider: ->(**kwargs) { tag.div(class: "divider") },
         | 
| 17 | 
            +
                      html: ->(&block) { block.call },
         | 
| 17 18 | 
             
                      button: ->(*args, **kwargs, &block) { coco_button(*args, **button_kwargs(kwargs, :button), &block) },
         | 
| 18 19 | 
             
                      menu_button: ->(*args, **kwargs, &block) { instantiate_button(:menu, *args, **kwargs, &block) },
         | 
| 19 20 | 
             
                      color_picker_button: ->(*args, **kwargs, &block) { instantiate_button(:color_picker, *args, **kwargs, &block) },
         | 
| @@ -45,6 +46,10 @@ module Coco | |
| 45 46 | 
             
                    with_item_button(...)
         | 
| 46 47 | 
             
                  end
         | 
| 47 48 |  | 
| 49 | 
            +
                  def with_button_html(...)
         | 
| 50 | 
            +
                    with_item_html(...)
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
             | 
| 48 53 | 
             
                  def with_menu_button(...)
         | 
| 49 54 | 
             
                    with_item_menu_button(...)
         | 
| 50 55 | 
             
                  end
         | 
| @@ -23,40 +23,40 @@ module Coco | |
| 23 23 | 
             
                  render(component, &block)
         | 
| 24 24 | 
             
                end
         | 
| 25 25 |  | 
| 26 | 
            -
                def coco_button_group(**, & | 
| 27 | 
            -
                  render | 
| 26 | 
            +
                def coco_button_group(**, &)
         | 
| 27 | 
            +
                  render(Coco::ButtonGroup.new(**), &)
         | 
| 28 28 | 
             
                end
         | 
| 29 29 |  | 
| 30 | 
            -
                def coco_menu_button(**, & | 
| 31 | 
            -
                  render | 
| 30 | 
            +
                def coco_menu_button(**, &)
         | 
| 31 | 
            +
                  render(Coco::MenuButton.new(**), &)
         | 
| 32 32 | 
             
                end
         | 
| 33 33 |  | 
| 34 | 
            -
                def coco_menu_item(type, **, & | 
| 35 | 
            -
                  render | 
| 34 | 
            +
                def coco_menu_item(type, **, &)
         | 
| 35 | 
            +
                  render(coco_component("menu_items/#{type}", **), &)
         | 
| 36 36 | 
             
                end
         | 
| 37 37 |  | 
| 38 | 
            -
                def coco_confirm_button(href = nil, **, & | 
| 39 | 
            -
                  render | 
| 38 | 
            +
                def coco_confirm_button(href = nil, **, &)
         | 
| 39 | 
            +
                  render(Coco::ConfirmButton.new(href: href, **), &)
         | 
| 40 40 | 
             
                end
         | 
| 41 41 |  | 
| 42 | 
            -
                def coco_color_picker_button(**, & | 
| 43 | 
            -
                  render | 
| 42 | 
            +
                def coco_color_picker_button(**, &)
         | 
| 43 | 
            +
                  render(Coco::ColorPickerButton.new(**), &)
         | 
| 44 44 | 
             
                end
         | 
| 45 45 |  | 
| 46 | 
            -
                def coco_image_picker_button(**, & | 
| 47 | 
            -
                  render | 
| 46 | 
            +
                def coco_image_picker_button(**, &)
         | 
| 47 | 
            +
                  render(Coco::ImagePickerButton.new(**), &)
         | 
| 48 48 | 
             
                end
         | 
| 49 49 |  | 
| 50 | 
            -
                def coco_layout_picker_button(**, & | 
| 51 | 
            -
                  render | 
| 50 | 
            +
                def coco_layout_picker_button(**, &)
         | 
| 51 | 
            +
                  render(Coco::LayoutPickerButton.new(**), &)
         | 
| 52 52 | 
             
                end
         | 
| 53 53 |  | 
| 54 | 
            -
                def coco_toolbar(**, & | 
| 55 | 
            -
                  render | 
| 54 | 
            +
                def coco_toolbar(**, &)
         | 
| 55 | 
            +
                  render(Coco::Toolbar.new(**), &)
         | 
| 56 56 | 
             
                end
         | 
| 57 57 |  | 
| 58 | 
            -
                def coco_option_bar(**, & | 
| 59 | 
            -
                  render | 
| 58 | 
            +
                def coco_option_bar(**, &)
         | 
| 59 | 
            +
                  render(Coco::OptionBar.new(**), &)
         | 
| 60 60 | 
             
                end
         | 
| 61 61 |  | 
| 62 62 | 
             
                # Embeds
         | 
| @@ -72,16 +72,16 @@ module Coco | |
| 72 72 |  | 
| 73 73 | 
             
                # Forms (WIP)
         | 
| 74 74 |  | 
| 75 | 
            -
                def coco_form_with(**, & | 
| 76 | 
            -
                  form_with(**, builder: Coco::AppFormBuilder, & | 
| 75 | 
            +
                def coco_form_with(**, &)
         | 
| 76 | 
            +
                  form_with(**, builder: Coco::AppFormBuilder, &)
         | 
| 77 77 | 
             
                end
         | 
| 78 78 |  | 
| 79 | 
            -
                def coco_form_for(*, **, & | 
| 80 | 
            -
                  form_for(*, **, builder: Coco::AppFormBuilder, & | 
| 79 | 
            +
                def coco_form_for(*, **, &)
         | 
| 80 | 
            +
                  form_for(*, **, builder: Coco::AppFormBuilder, &)
         | 
| 81 81 | 
             
                end
         | 
| 82 82 |  | 
| 83 | 
            -
                def coco_fields(**, & | 
| 84 | 
            -
                  fields(**, builder: Coco::AppFormBuilder, & | 
| 83 | 
            +
                def coco_fields(**, &)
         | 
| 84 | 
            +
                  fields(**, builder: Coco::AppFormBuilder, &)
         | 
| 85 85 | 
             
                end
         | 
| 86 86 |  | 
| 87 87 | 
             
                # Images
         | 
| @@ -98,8 +98,8 @@ module Coco | |
| 98 98 | 
             
                  render Coco::Avatar.new(src: src, name: name, **)
         | 
| 99 99 | 
             
                end
         | 
| 100 100 |  | 
| 101 | 
            -
                def coco_icon(icon_name = nil, **, & | 
| 102 | 
            -
                  render | 
| 101 | 
            +
                def coco_icon(icon_name = nil, **, &)
         | 
| 102 | 
            +
                  render(Coco::Icon.new(name: icon_name, **), &)
         | 
| 103 103 | 
             
                end
         | 
| 104 104 |  | 
| 105 105 | 
             
                # Indicators
         | 
| @@ -132,40 +132,40 @@ module Coco | |
| 132 132 | 
             
                end
         | 
| 133 133 | 
             
                alias_method :space, :coco_spacer
         | 
| 134 134 |  | 
| 135 | 
            -
                def coco_stack(spacing: Coco::Spacer::DEFAULT, **, & | 
| 136 | 
            -
                  render | 
| 135 | 
            +
                def coco_stack(spacing: Coco::Spacer::DEFAULT, **, &)
         | 
| 136 | 
            +
                  render(Coco::Stack.new(spacing:, **), &)
         | 
| 137 137 | 
             
                end
         | 
| 138 138 |  | 
| 139 | 
            -
                def coco_panel(**, & | 
| 140 | 
            -
                  render | 
| 139 | 
            +
                def coco_panel(**, &)
         | 
| 140 | 
            +
                  render(Coco::Panel.new(**), &)
         | 
| 141 141 | 
             
                end
         | 
| 142 142 |  | 
| 143 | 
            -
                def coco_page(id, **, & | 
| 144 | 
            -
                  render | 
| 143 | 
            +
                def coco_page(id, **, &)
         | 
| 144 | 
            +
                  render(Coco::Page.new(id: id, **), &)
         | 
| 145 145 | 
             
                end
         | 
| 146 146 |  | 
| 147 147 | 
             
                # Messaging
         | 
| 148 148 |  | 
| 149 | 
            -
                def coco_notice(**, & | 
| 150 | 
            -
                  render | 
| 149 | 
            +
                def coco_notice(**, &)
         | 
| 150 | 
            +
                  render(Coco::Notice.new(**), &)
         | 
| 151 151 | 
             
                end
         | 
| 152 152 |  | 
| 153 | 
            -
                def coco_snackbar(**, & | 
| 154 | 
            -
                  render | 
| 153 | 
            +
                def coco_snackbar(**, &)
         | 
| 154 | 
            +
                  render(Coco::Snackbar.new(**), &)
         | 
| 155 155 | 
             
                end
         | 
| 156 156 |  | 
| 157 | 
            -
                def coco_toast(**, & | 
| 158 | 
            -
                  render | 
| 157 | 
            +
                def coco_toast(**, &)
         | 
| 158 | 
            +
                  render(Coco::Toast.new(**), &)
         | 
| 159 159 | 
             
                end
         | 
| 160 160 |  | 
| 161 | 
            -
                def coco_system_banner(**, & | 
| 162 | 
            -
                  render | 
| 161 | 
            +
                def coco_system_banner(**, &)
         | 
| 162 | 
            +
                  render(Coco::SystemBanner.new(**), &)
         | 
| 163 163 | 
             
                end
         | 
| 164 164 |  | 
| 165 165 | 
             
                # Modals
         | 
| 166 166 |  | 
| 167 | 
            -
                def coco_modal(name = "default", **, & | 
| 168 | 
            -
                  render(Coco::Modal.new(name: name, **), & | 
| 167 | 
            +
                def coco_modal(name = "default", **, &)
         | 
| 168 | 
            +
                  render(Coco::Modal.new(name: name, **), &)
         | 
| 169 169 | 
             
                end
         | 
| 170 170 |  | 
| 171 171 | 
             
                def coco_modal_dialog(name = "default", **, &block)
         | 
| @@ -220,30 +220,30 @@ module Coco | |
| 220 220 | 
             
                  render(button, &block)
         | 
| 221 221 | 
             
                end
         | 
| 222 222 |  | 
| 223 | 
            -
                def coco_pager_button(direction, **, & | 
| 224 | 
            -
                  render | 
| 223 | 
            +
                def coco_pager_button(direction, **, &)
         | 
| 224 | 
            +
                  render(Coco::PagerButton.new(direction:, **), &)
         | 
| 225 225 | 
             
                end
         | 
| 226 226 |  | 
| 227 227 | 
             
                # Typography
         | 
| 228 228 |  | 
| 229 | 
            -
                def coco_prose(**, & | 
| 230 | 
            -
                  render | 
| 229 | 
            +
                def coco_prose(**, &)
         | 
| 230 | 
            +
                  render(Coco::Prose.new(**), &)
         | 
| 231 231 | 
             
                end
         | 
| 232 232 |  | 
| 233 | 
            -
                def coco_seamless_textarea(**, & | 
| 234 | 
            -
                  render | 
| 233 | 
            +
                def coco_seamless_textarea(**, &)
         | 
| 234 | 
            +
                  render(Coco::SeamlessTextarea.new(**), &)
         | 
| 235 235 | 
             
                end
         | 
| 236 236 |  | 
| 237 237 | 
             
                # Utilties (internal)
         | 
| 238 238 |  | 
| 239 | 
            -
                def coco_placeholder(text_content = nil, **, & | 
| 240 | 
            -
                  render | 
| 239 | 
            +
                def coco_placeholder(text_content = nil, **, &)
         | 
| 240 | 
            +
                  render(Coco::Placeholder.new(text_content:, **), &)
         | 
| 241 241 | 
             
                end
         | 
| 242 242 |  | 
| 243 243 | 
             
                # General
         | 
| 244 244 |  | 
| 245 | 
            -
                def coco_tag(*, **, & | 
| 246 | 
            -
                  render | 
| 245 | 
            +
                def coco_tag(*, **, &)
         | 
| 246 | 
            +
                  render(Coco::Tag.new(*, **), &)
         | 
| 247 247 | 
             
                end
         | 
| 248 248 |  | 
| 249 249 | 
             
                def coco_component(name, *, **)
         | 
    
        data/lib/coco.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: coveragebook_components
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.17. | 
| 4 | 
            +
              version: 0.17.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Mark Perkins
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2024- | 
| 11 | 
            +
            date: 2024-03-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rails
         |