coveragebook_components 0.18.8 ā 0.19.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/build/coco/coco.css +53 -3
- data/app/assets/build/coco/coco.js +168 -137
- data/app/components/coco/buttons/button/button.css +5 -1
- data/app/components/coco/buttons/button_group/button_group.css +1 -1
- data/app/components/coco/buttons/confirm_panel/confirm_panel.css +4 -0
- data/app/components/coco/buttons/option_bar/option_bar.css +1 -1
- data/app/components/coco/buttons/toolbar/toolbar.rb +2 -2
- data/app/components/coco/component.rb +1 -1
- data/app/components/coco/navigation/tabs/tabs.css +37 -0
- data/app/components/coco/navigation/tabs/tabs.html.erb +5 -0
- data/app/components/coco/navigation/tabs/tabs.rb +13 -0
- data/app/components/coco/presented_component.rb +1 -1
- data/app/helpers/coco/components_helper.rb +4 -0
- data/config/esbuild.config.mjs +56 -0
- data/lib/coco/options/item.rb +1 -1
- data/lib/coco.rb +1 -1
- data/lib/scripts/esbuild-meta.mjs +26 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ddda4d2e278e6259a45856fe50f05eefffa161a337489494e12b8198584b7afb
|
4
|
+
data.tar.gz: e2476d7be98d6c3b35529d498cb3d4c1c88b4eb51ce1cc11b76bbf3fdc927d79
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6457b878c1d4891014e51a9439fe3e145b0bc55612b79ab594c98c1999929385015d9d37f983e35b48bee973af1409aabd2d08577b8587c9d51f68da2597f178
|
7
|
+
data.tar.gz: 382ec0a0021eb489bc7901c67f4cac5825cdf115d3b8d3f439b6873092790413be6c8357968b522b4ab32e954a59a5bd3933b024dd73fa83e8ba1d7e4aeb6d28
|
@@ -731,6 +731,10 @@ select{
|
|
731
731
|
--tw-contain-style:
|
732
732
|
}
|
733
733
|
|
734
|
+
:root {
|
735
|
+
--button-border-radius: 44px;
|
736
|
+
}
|
737
|
+
|
734
738
|
.coco-button-wrapper{
|
735
739
|
display: contents !important
|
736
740
|
}
|
@@ -864,7 +868,7 @@ select{
|
|
864
868
|
transition-property: all;
|
865
869
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
866
870
|
transition-duration: 150ms;
|
867
|
-
border-radius:
|
871
|
+
border-radius: var(--button-border-radius)
|
868
872
|
}
|
869
873
|
|
870
874
|
[data-coco].coco-button[data-theme] .button-content{
|
@@ -2225,7 +2229,7 @@ select{
|
|
2225
2229
|
[data-coco][data-component="button-group"] {
|
2226
2230
|
width: -moz-fit-content;
|
2227
2231
|
width: fit-content;
|
2228
|
-
border-radius:
|
2232
|
+
border-radius: var(--button-border-radius);
|
2229
2233
|
}
|
2230
2234
|
|
2231
2235
|
[data-coco][data-component="button-group"][data-collapsible="true"]{
|
@@ -2345,6 +2349,10 @@ select{
|
|
2345
2349
|
line-height: 16px
|
2346
2350
|
}
|
2347
2351
|
|
2352
|
+
[data-coco][data-component="confirm-panel"] .coco-button {
|
2353
|
+
border-radius: var(--button-border-radius) !important;
|
2354
|
+
}
|
2355
|
+
|
2348
2356
|
[data-coco][data-component="image-picker-button"]{
|
2349
2357
|
display: contents
|
2350
2358
|
}
|
@@ -2624,7 +2632,7 @@ select{
|
|
2624
2632
|
background-color: rgba(0, 12, 39, 0.06);
|
2625
2633
|
padding: 0.25rem;
|
2626
2634
|
|
2627
|
-
border-radius:
|
2635
|
+
border-radius: var(--button-border-radius);
|
2628
2636
|
width: -moz-fit-content;
|
2629
2637
|
width: fit-content
|
2630
2638
|
}
|
@@ -5032,6 +5040,48 @@ select{
|
|
5032
5040
|
margin-right: -0.25rem
|
5033
5041
|
}
|
5034
5042
|
|
5043
|
+
[data-coco][data-component="tabs"]{
|
5044
|
+
border-bottom-width: 1px;
|
5045
|
+
border-color: rgba(0, 12, 39, 0.18)
|
5046
|
+
}
|
5047
|
+
|
5048
|
+
[data-coco][data-component="tabs"] [role="tablist"] {
|
5049
|
+
display: flex;
|
5050
|
+
position: relative;
|
5051
|
+
width: 100%;
|
5052
|
+
}
|
5053
|
+
|
5054
|
+
[data-coco][data-component="tabs"] [role="tab"]{
|
5055
|
+
border-bottom-width: 2px;
|
5056
|
+
border-color: transparent;
|
5057
|
+
position: relative;
|
5058
|
+
bottom: -1px
|
5059
|
+
}
|
5060
|
+
|
5061
|
+
[data-coco][data-component="tabs"] [role="tab"] .coco-button{
|
5062
|
+
--tw-text-opacity: 1;
|
5063
|
+
color: rgb(156 163 175 / var(--tw-text-opacity))
|
5064
|
+
}
|
5065
|
+
|
5066
|
+
[data-coco][data-component="tabs"] [role="tab"] .coco-button:hover{
|
5067
|
+
--tw-text-opacity: 1;
|
5068
|
+
color: rgb(31 41 55 / var(--tw-text-opacity))
|
5069
|
+
}
|
5070
|
+
|
5071
|
+
[data-coco][data-component="tabs"] [role="tab"].active{
|
5072
|
+
--tw-border-opacity: 1;
|
5073
|
+
border-color: rgb(17 24 39 / var(--tw-border-opacity))
|
5074
|
+
}
|
5075
|
+
|
5076
|
+
[data-coco][data-component="tabs"] [role="tab"].active .coco-button{
|
5077
|
+
--tw-text-opacity: 1;
|
5078
|
+
color: rgb(17 24 39 / var(--tw-text-opacity))
|
5079
|
+
}
|
5080
|
+
|
5081
|
+
[data-coco][data-component="tabs"][data-fit="full"] [role="tab"] {
|
5082
|
+
width: 100%;
|
5083
|
+
}
|
5084
|
+
|
5035
5085
|
[data-coco][data-component="color-picker"]{
|
5036
5086
|
--tw-bg-opacity: 1;
|
5037
5087
|
background-color: rgb(249 250 251 / var(--tw-bg-opacity))
|
@@ -7280,112 +7280,6 @@ var require_module_cjs = __commonJS({
|
|
7280
7280
|
});
|
7281
7281
|
return () => release(effectReference);
|
7282
7282
|
}
|
7283
|
-
function dispatch(el, name, detail = {}) {
|
7284
|
-
el.dispatchEvent(
|
7285
|
-
new CustomEvent(name, {
|
7286
|
-
detail,
|
7287
|
-
bubbles: true,
|
7288
|
-
// Allows events to pass the shadow DOM barrier.
|
7289
|
-
composed: true,
|
7290
|
-
cancelable: true
|
7291
|
-
})
|
7292
|
-
);
|
7293
|
-
}
|
7294
|
-
function walk(el, callback) {
|
7295
|
-
if (typeof ShadowRoot === "function" && el instanceof ShadowRoot) {
|
7296
|
-
Array.from(el.children).forEach((el2) => walk(el2, callback));
|
7297
|
-
return;
|
7298
|
-
}
|
7299
|
-
let skip = false;
|
7300
|
-
callback(el, () => skip = true);
|
7301
|
-
if (skip)
|
7302
|
-
return;
|
7303
|
-
let node = el.firstElementChild;
|
7304
|
-
while (node) {
|
7305
|
-
walk(node, callback, false);
|
7306
|
-
node = node.nextElementSibling;
|
7307
|
-
}
|
7308
|
-
}
|
7309
|
-
function warn(message, ...args) {
|
7310
|
-
console.warn(`Alpine Warning: ${message}`, ...args);
|
7311
|
-
}
|
7312
|
-
var started = false;
|
7313
|
-
function start() {
|
7314
|
-
if (started)
|
7315
|
-
warn("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.");
|
7316
|
-
started = true;
|
7317
|
-
if (!document.body)
|
7318
|
-
warn("Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?");
|
7319
|
-
dispatch(document, "alpine:init");
|
7320
|
-
dispatch(document, "alpine:initializing");
|
7321
|
-
startObservingMutations();
|
7322
|
-
onElAdded((el) => initTree(el, walk));
|
7323
|
-
onElRemoved((el) => destroyTree(el));
|
7324
|
-
onAttributesAdded((el, attrs) => {
|
7325
|
-
directives(el, attrs).forEach((handle) => handle());
|
7326
|
-
});
|
7327
|
-
let outNestedComponents = (el) => !closestRoot(el.parentElement, true);
|
7328
|
-
Array.from(document.querySelectorAll(allSelectors().join(","))).filter(outNestedComponents).forEach((el) => {
|
7329
|
-
initTree(el);
|
7330
|
-
});
|
7331
|
-
dispatch(document, "alpine:initialized");
|
7332
|
-
}
|
7333
|
-
var rootSelectorCallbacks = [];
|
7334
|
-
var initSelectorCallbacks = [];
|
7335
|
-
function rootSelectors() {
|
7336
|
-
return rootSelectorCallbacks.map((fn) => fn());
|
7337
|
-
}
|
7338
|
-
function allSelectors() {
|
7339
|
-
return rootSelectorCallbacks.concat(initSelectorCallbacks).map((fn) => fn());
|
7340
|
-
}
|
7341
|
-
function addRootSelector(selectorCallback) {
|
7342
|
-
rootSelectorCallbacks.push(selectorCallback);
|
7343
|
-
}
|
7344
|
-
function addInitSelector(selectorCallback) {
|
7345
|
-
initSelectorCallbacks.push(selectorCallback);
|
7346
|
-
}
|
7347
|
-
function closestRoot(el, includeInitSelectors = false) {
|
7348
|
-
return findClosest(el, (element) => {
|
7349
|
-
const selectors = includeInitSelectors ? allSelectors() : rootSelectors();
|
7350
|
-
if (selectors.some((selector) => element.matches(selector)))
|
7351
|
-
return true;
|
7352
|
-
});
|
7353
|
-
}
|
7354
|
-
function findClosest(el, callback) {
|
7355
|
-
if (!el)
|
7356
|
-
return;
|
7357
|
-
if (callback(el))
|
7358
|
-
return el;
|
7359
|
-
if (el._x_teleportBack)
|
7360
|
-
el = el._x_teleportBack;
|
7361
|
-
if (!el.parentElement)
|
7362
|
-
return;
|
7363
|
-
return findClosest(el.parentElement, callback);
|
7364
|
-
}
|
7365
|
-
function isRoot(el) {
|
7366
|
-
return rootSelectors().some((selector) => el.matches(selector));
|
7367
|
-
}
|
7368
|
-
var initInterceptors = [];
|
7369
|
-
function interceptInit(callback) {
|
7370
|
-
initInterceptors.push(callback);
|
7371
|
-
}
|
7372
|
-
function initTree(el, walker = walk, intercept = () => {
|
7373
|
-
}) {
|
7374
|
-
deferHandlingDirectives(() => {
|
7375
|
-
walker(el, (el2, skip) => {
|
7376
|
-
intercept(el2, skip);
|
7377
|
-
initInterceptors.forEach((i2) => i2(el2, skip));
|
7378
|
-
directives(el2, el2.attributes).forEach((handle) => handle());
|
7379
|
-
el2._x_ignore && skip();
|
7380
|
-
});
|
7381
|
-
});
|
7382
|
-
}
|
7383
|
-
function destroyTree(root, walker = walk) {
|
7384
|
-
walker(root, (el) => {
|
7385
|
-
cleanupAttributes(el);
|
7386
|
-
cleanupElement(el);
|
7387
|
-
});
|
7388
|
-
}
|
7389
7283
|
var onAttributeAddeds = [];
|
7390
7284
|
var onElRemoveds = [];
|
7391
7285
|
var onElAddeds = [];
|
@@ -7519,7 +7413,6 @@ var require_module_cjs = __commonJS({
|
|
7519
7413
|
if (addedNodes.has(node))
|
7520
7414
|
continue;
|
7521
7415
|
onElRemoveds.forEach((i2) => i2(node));
|
7522
|
-
destroyTree(node);
|
7523
7416
|
}
|
7524
7417
|
addedNodes.forEach((node) => {
|
7525
7418
|
node._x_ignoreSelf = true;
|
@@ -7598,7 +7491,7 @@ var require_module_cjs = __commonJS({
|
|
7598
7491
|
) || objects[objects.length - 1];
|
7599
7492
|
const descriptor = Object.getOwnPropertyDescriptor(target, name);
|
7600
7493
|
if ((descriptor == null ? void 0 : descriptor.set) && (descriptor == null ? void 0 : descriptor.get))
|
7601
|
-
return
|
7494
|
+
return descriptor.set.call(thisProxy, value) || true;
|
7602
7495
|
return Reflect.set(target, name, value);
|
7603
7496
|
}
|
7604
7497
|
};
|
@@ -7609,7 +7502,7 @@ var require_module_cjs = __commonJS({
|
|
7609
7502
|
return acc;
|
7610
7503
|
}, {});
|
7611
7504
|
}
|
7612
|
-
function
|
7505
|
+
function initInterceptors(data2) {
|
7613
7506
|
let isObject2 = (val) => typeof val === "object" && !Array.isArray(val) && val !== null;
|
7614
7507
|
let recurse = (obj, basePath = "") => {
|
7615
7508
|
Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, { value, enumerable }]) => {
|
@@ -7833,6 +7726,9 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
7833
7726
|
}
|
7834
7727
|
};
|
7835
7728
|
}
|
7729
|
+
function directiveExists(name) {
|
7730
|
+
return Object.keys(directiveHandlers).includes(name);
|
7731
|
+
}
|
7836
7732
|
function directives(el, attributes, originalAttributeOverride) {
|
7837
7733
|
attributes = Array.from(attributes);
|
7838
7734
|
if (el._x_virtualDirectives) {
|
@@ -7972,6 +7868,132 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
7972
7868
|
let typeB = directiveOrder.indexOf(b2.type) === -1 ? DEFAULT : b2.type;
|
7973
7869
|
return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB);
|
7974
7870
|
}
|
7871
|
+
function dispatch(el, name, detail = {}) {
|
7872
|
+
el.dispatchEvent(
|
7873
|
+
new CustomEvent(name, {
|
7874
|
+
detail,
|
7875
|
+
bubbles: true,
|
7876
|
+
// Allows events to pass the shadow DOM barrier.
|
7877
|
+
composed: true,
|
7878
|
+
cancelable: true
|
7879
|
+
})
|
7880
|
+
);
|
7881
|
+
}
|
7882
|
+
function walk(el, callback) {
|
7883
|
+
if (typeof ShadowRoot === "function" && el instanceof ShadowRoot) {
|
7884
|
+
Array.from(el.children).forEach((el2) => walk(el2, callback));
|
7885
|
+
return;
|
7886
|
+
}
|
7887
|
+
let skip = false;
|
7888
|
+
callback(el, () => skip = true);
|
7889
|
+
if (skip)
|
7890
|
+
return;
|
7891
|
+
let node = el.firstElementChild;
|
7892
|
+
while (node) {
|
7893
|
+
walk(node, callback, false);
|
7894
|
+
node = node.nextElementSibling;
|
7895
|
+
}
|
7896
|
+
}
|
7897
|
+
function warn(message, ...args) {
|
7898
|
+
console.warn(`Alpine Warning: ${message}`, ...args);
|
7899
|
+
}
|
7900
|
+
var started = false;
|
7901
|
+
function start() {
|
7902
|
+
if (started)
|
7903
|
+
warn("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.");
|
7904
|
+
started = true;
|
7905
|
+
if (!document.body)
|
7906
|
+
warn("Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?");
|
7907
|
+
dispatch(document, "alpine:init");
|
7908
|
+
dispatch(document, "alpine:initializing");
|
7909
|
+
startObservingMutations();
|
7910
|
+
onElAdded((el) => initTree(el, walk));
|
7911
|
+
onElRemoved((el) => destroyTree(el));
|
7912
|
+
onAttributesAdded((el, attrs) => {
|
7913
|
+
directives(el, attrs).forEach((handle) => handle());
|
7914
|
+
});
|
7915
|
+
let outNestedComponents = (el) => !closestRoot(el.parentElement, true);
|
7916
|
+
Array.from(document.querySelectorAll(allSelectors().join(","))).filter(outNestedComponents).forEach((el) => {
|
7917
|
+
initTree(el);
|
7918
|
+
});
|
7919
|
+
dispatch(document, "alpine:initialized");
|
7920
|
+
setTimeout(() => {
|
7921
|
+
warnAboutMissingPlugins();
|
7922
|
+
});
|
7923
|
+
}
|
7924
|
+
var rootSelectorCallbacks = [];
|
7925
|
+
var initSelectorCallbacks = [];
|
7926
|
+
function rootSelectors() {
|
7927
|
+
return rootSelectorCallbacks.map((fn) => fn());
|
7928
|
+
}
|
7929
|
+
function allSelectors() {
|
7930
|
+
return rootSelectorCallbacks.concat(initSelectorCallbacks).map((fn) => fn());
|
7931
|
+
}
|
7932
|
+
function addRootSelector(selectorCallback) {
|
7933
|
+
rootSelectorCallbacks.push(selectorCallback);
|
7934
|
+
}
|
7935
|
+
function addInitSelector(selectorCallback) {
|
7936
|
+
initSelectorCallbacks.push(selectorCallback);
|
7937
|
+
}
|
7938
|
+
function closestRoot(el, includeInitSelectors = false) {
|
7939
|
+
return findClosest(el, (element) => {
|
7940
|
+
const selectors = includeInitSelectors ? allSelectors() : rootSelectors();
|
7941
|
+
if (selectors.some((selector) => element.matches(selector)))
|
7942
|
+
return true;
|
7943
|
+
});
|
7944
|
+
}
|
7945
|
+
function findClosest(el, callback) {
|
7946
|
+
if (!el)
|
7947
|
+
return;
|
7948
|
+
if (callback(el))
|
7949
|
+
return el;
|
7950
|
+
if (el._x_teleportBack)
|
7951
|
+
el = el._x_teleportBack;
|
7952
|
+
if (!el.parentElement)
|
7953
|
+
return;
|
7954
|
+
return findClosest(el.parentElement, callback);
|
7955
|
+
}
|
7956
|
+
function isRoot(el) {
|
7957
|
+
return rootSelectors().some((selector) => el.matches(selector));
|
7958
|
+
}
|
7959
|
+
var initInterceptors2 = [];
|
7960
|
+
function interceptInit(callback) {
|
7961
|
+
initInterceptors2.push(callback);
|
7962
|
+
}
|
7963
|
+
function initTree(el, walker = walk, intercept = () => {
|
7964
|
+
}) {
|
7965
|
+
deferHandlingDirectives(() => {
|
7966
|
+
walker(el, (el2, skip) => {
|
7967
|
+
intercept(el2, skip);
|
7968
|
+
initInterceptors2.forEach((i2) => i2(el2, skip));
|
7969
|
+
directives(el2, el2.attributes).forEach((handle) => handle());
|
7970
|
+
el2._x_ignore && skip();
|
7971
|
+
});
|
7972
|
+
});
|
7973
|
+
}
|
7974
|
+
function destroyTree(root, walker = walk) {
|
7975
|
+
walker(root, (el) => {
|
7976
|
+
cleanupAttributes(el);
|
7977
|
+
cleanupElement(el);
|
7978
|
+
});
|
7979
|
+
}
|
7980
|
+
function warnAboutMissingPlugins() {
|
7981
|
+
let pluginDirectives = [
|
7982
|
+
["ui", "dialog", ["[x-dialog], [x-popover]"]],
|
7983
|
+
["anchor", "anchor", ["[x-anchor]"]],
|
7984
|
+
["sort", "sort", ["[x-sort]"]]
|
7985
|
+
];
|
7986
|
+
pluginDirectives.forEach(([plugin2, directive2, selectors]) => {
|
7987
|
+
if (directiveExists(directive2))
|
7988
|
+
return;
|
7989
|
+
selectors.some((selector) => {
|
7990
|
+
if (document.querySelector(selector)) {
|
7991
|
+
warn(`found "${selector}", but missing ${plugin2} plugin`);
|
7992
|
+
return true;
|
7993
|
+
}
|
7994
|
+
});
|
7995
|
+
});
|
7996
|
+
}
|
7975
7997
|
var tickStack = [];
|
7976
7998
|
var isHolding = false;
|
7977
7999
|
function nextTick(callback = () => {
|
@@ -8232,7 +8254,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
8232
8254
|
let carry = Promise.all([
|
8233
8255
|
el2._x_hidePromise,
|
8234
8256
|
...(el2._x_hideChildren || []).map(hideAfterChildren)
|
8235
|
-
]).then(([i2]) => i2());
|
8257
|
+
]).then(([i2]) => i2 == null ? void 0 : i2());
|
8236
8258
|
delete el2._x_hidePromise;
|
8237
8259
|
delete el2._x_hideChildren;
|
8238
8260
|
return carry;
|
@@ -8663,7 +8685,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
8663
8685
|
if (typeof value === "object" && value !== null && value.hasOwnProperty("init") && typeof value.init === "function") {
|
8664
8686
|
stores[name].init();
|
8665
8687
|
}
|
8666
|
-
|
8688
|
+
initInterceptors(stores[name]);
|
8667
8689
|
}
|
8668
8690
|
function getStores() {
|
8669
8691
|
return stores;
|
@@ -8745,7 +8767,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
8745
8767
|
get raw() {
|
8746
8768
|
return raw;
|
8747
8769
|
},
|
8748
|
-
version: "3.
|
8770
|
+
version: "3.14.1",
|
8749
8771
|
flushAndStopDeferringMutations,
|
8750
8772
|
dontAutoEvaluateFunctions,
|
8751
8773
|
disableEffectScheduling,
|
@@ -8951,8 +8973,10 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
8951
8973
|
};
|
8952
8974
|
mutateDom(() => {
|
8953
8975
|
placeInDom(clone2, target, modifiers);
|
8954
|
-
|
8955
|
-
|
8976
|
+
skipDuringClone(() => {
|
8977
|
+
initTree(clone2);
|
8978
|
+
clone2._x_ignore = true;
|
8979
|
+
})();
|
8956
8980
|
});
|
8957
8981
|
el._x_teleportPutBack = () => {
|
8958
8982
|
let target2 = getTarget(expression);
|
@@ -9022,10 +9046,12 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
9022
9046
|
e2.stopPropagation();
|
9023
9047
|
next(e2);
|
9024
9048
|
});
|
9025
|
-
if (modifiers.includes("
|
9049
|
+
if (modifiers.includes("once")) {
|
9026
9050
|
handler4 = wrapHandler(handler4, (next, e2) => {
|
9027
|
-
|
9051
|
+
next(e2);
|
9052
|
+
listenerTarget.removeEventListener(event, handler4, options);
|
9028
9053
|
});
|
9054
|
+
}
|
9029
9055
|
if (modifiers.includes("away") || modifiers.includes("outside")) {
|
9030
9056
|
listenerTarget = document;
|
9031
9057
|
handler4 = wrapHandler(handler4, (next, e2) => {
|
@@ -9040,20 +9066,18 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
9040
9066
|
next(e2);
|
9041
9067
|
});
|
9042
9068
|
}
|
9043
|
-
if (modifiers.includes("
|
9069
|
+
if (modifiers.includes("self"))
|
9044
9070
|
handler4 = wrapHandler(handler4, (next, e2) => {
|
9045
|
-
next(e2);
|
9046
|
-
listenerTarget.removeEventListener(event, handler4, options);
|
9071
|
+
e2.target === el && next(e2);
|
9047
9072
|
});
|
9048
|
-
|
9049
|
-
|
9050
|
-
if (isKeyEvent(event)) {
|
9073
|
+
if (isKeyEvent(event) || isClickEvent(event)) {
|
9074
|
+
handler4 = wrapHandler(handler4, (next, e2) => {
|
9051
9075
|
if (isListeningForASpecificKeyThatHasntBeenPressed(e2, modifiers)) {
|
9052
9076
|
return;
|
9053
9077
|
}
|
9054
|
-
|
9055
|
-
|
9056
|
-
}
|
9078
|
+
next(e2);
|
9079
|
+
});
|
9080
|
+
}
|
9057
9081
|
listenerTarget.addEventListener(event, handler4, options);
|
9058
9082
|
return () => {
|
9059
9083
|
listenerTarget.removeEventListener(event, handler4, options);
|
@@ -9078,9 +9102,12 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
9078
9102
|
function isKeyEvent(event) {
|
9079
9103
|
return ["keydown", "keyup"].includes(event);
|
9080
9104
|
}
|
9105
|
+
function isClickEvent(event) {
|
9106
|
+
return ["contextmenu", "click", "mouse"].some((i2) => event.includes(i2));
|
9107
|
+
}
|
9081
9108
|
function isListeningForASpecificKeyThatHasntBeenPressed(e2, modifiers) {
|
9082
9109
|
let keyModifiers = modifiers.filter((i2) => {
|
9083
|
-
return !["window", "document", "prevent", "stop", "once", "capture"].includes(i2);
|
9110
|
+
return !["window", "document", "prevent", "stop", "once", "capture", "self", "away", "outside", "passive"].includes(i2);
|
9084
9111
|
});
|
9085
9112
|
if (keyModifiers.includes("debounce")) {
|
9086
9113
|
let debounceIndex = keyModifiers.indexOf("debounce");
|
@@ -9104,6 +9131,8 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
9104
9131
|
return e2[`${modifier}Key`];
|
9105
9132
|
});
|
9106
9133
|
if (activelyPressedKeyModifiers.length === selectedSystemKeyModifiers.length) {
|
9134
|
+
if (isClickEvent(e2.type))
|
9135
|
+
return false;
|
9107
9136
|
if (keyToModifiers(e2.key).includes(keyModifiers[0]))
|
9108
9137
|
return false;
|
9109
9138
|
}
|
@@ -9126,6 +9155,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
9126
9155
|
"left": "arrow-left",
|
9127
9156
|
"right": "arrow-right",
|
9128
9157
|
"period": ".",
|
9158
|
+
"comma": ",",
|
9129
9159
|
"equal": "=",
|
9130
9160
|
"minus": "-",
|
9131
9161
|
"underscore": "_"
|
@@ -9180,7 +9210,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
9180
9210
|
setValue(getInputValue(el, modifiers, e2, getValue()));
|
9181
9211
|
});
|
9182
9212
|
if (modifiers.includes("fill")) {
|
9183
|
-
if ([void 0, null, ""].includes(getValue()) || el.type === "checkbox" && Array.isArray(getValue())) {
|
9213
|
+
if ([void 0, null, ""].includes(getValue()) || el.type === "checkbox" && Array.isArray(getValue()) || el.tagName.toLowerCase() === "select" && el.multiple) {
|
9184
9214
|
setValue(
|
9185
9215
|
getInputValue(el, modifiers, { target: el }, getValue())
|
9186
9216
|
);
|
@@ -9192,7 +9222,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
9192
9222
|
cleanup(() => el._x_removeModelListeners["default"]());
|
9193
9223
|
if (el.form) {
|
9194
9224
|
let removeResetListener = on(el.form, "reset", [], (e2) => {
|
9195
|
-
nextTick(() => el._x_model && el._x_model.set(el
|
9225
|
+
nextTick(() => el._x_model && el._x_model.set(getInputValue(el, modifiers, { target: el }, getValue())));
|
9196
9226
|
});
|
9197
9227
|
cleanup(() => removeResetListener());
|
9198
9228
|
}
|
@@ -9232,7 +9262,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
9232
9262
|
} else {
|
9233
9263
|
newValue = event.target.value;
|
9234
9264
|
}
|
9235
|
-
return event.target.checked ? currentValue.concat([newValue]) : currentValue.filter((el2) => !checkedAttrLooseCompare2(el2, newValue));
|
9265
|
+
return event.target.checked ? currentValue.includes(newValue) ? currentValue : currentValue.concat([newValue]) : currentValue.filter((el2) => !checkedAttrLooseCompare2(el2, newValue));
|
9236
9266
|
} else {
|
9237
9267
|
return event.target.checked;
|
9238
9268
|
}
|
@@ -9371,7 +9401,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
|
9371
9401
|
data2 = {};
|
9372
9402
|
injectMagics(data2, el);
|
9373
9403
|
let reactiveData = reactive(data2);
|
9374
|
-
|
9404
|
+
initInterceptors(reactiveData);
|
9375
9405
|
let undo = addScopeToNode(el, reactiveData);
|
9376
9406
|
reactiveData["init"] && evaluate(el, reactiveData["init"]);
|
9377
9407
|
cleanup(() => {
|
@@ -15296,7 +15326,7 @@ var alpine_default = import_alpinejs.default;
|
|
15296
15326
|
// ../../../package.json
|
15297
15327
|
var package_default = {
|
15298
15328
|
name: "coveragebook-components",
|
15299
|
-
version: "0.
|
15329
|
+
version: "0.19.1",
|
15300
15330
|
repository: "git@github.com:coveragebook/coco.git",
|
15301
15331
|
license: "NO LICENSE",
|
15302
15332
|
author: "Mark Perkins <mark@coveragebook.com>",
|
@@ -15311,9 +15341,10 @@ var package_default = {
|
|
15311
15341
|
"css:build": "postcss ./app/assets/css/coco.css -d ./app/assets/build/coco",
|
15312
15342
|
"css:dev": "postcss ./app/assets/css/coco.css -d ./app/assets/build/coco/dev",
|
15313
15343
|
"css:watch": "postcss ./app/assets/css/coco.css -d ./app/assets/build/coco/dev --watch",
|
15314
|
-
"js:build": "node esbuild.
|
15315
|
-
"js:dev": "node esbuild.
|
15316
|
-
"js:watch": "node esbuild.
|
15344
|
+
"js:build": "node esbuild.mjs",
|
15345
|
+
"js:dev": "node esbuild.mjs --dev",
|
15346
|
+
"js:watch": "node esbuild.mjs --watch",
|
15347
|
+
"js:analyse": "node lib/scripts/esbuild-meta.mjs",
|
15317
15348
|
"lint:fix": "bundle exec standardrb --fix && prettier --write .",
|
15318
15349
|
"lookbook:build": "cd lookbook && npm run build",
|
15319
15350
|
prepare: "husky install",
|
@@ -15338,14 +15369,14 @@ var package_default = {
|
|
15338
15369
|
},
|
15339
15370
|
dependencies: {
|
15340
15371
|
"@alpinejs/focus": "^3.13.2",
|
15341
|
-
"@alpinejs/mask": "^3.
|
15372
|
+
"@alpinejs/mask": "^3.14.1",
|
15342
15373
|
"@alpinejs/morph": "^3.13.5",
|
15343
15374
|
"@jaames/iro": "^5.5.2",
|
15344
15375
|
"@percy/cli": "^1.28.8",
|
15345
15376
|
"@tailwindcss/container-queries": "^0.1.0",
|
15346
15377
|
"@tailwindcss/forms": "^0.5.6",
|
15347
15378
|
"alias-hq": "^6.2.2",
|
15348
|
-
alpinejs: "^3.
|
15379
|
+
alpinejs: "^3.14.1",
|
15349
15380
|
autoprefixer: "^10.4.16",
|
15350
15381
|
"container-query-polyfill": "^1.0.2",
|
15351
15382
|
del: "^7.1.0",
|
@@ -15364,7 +15395,7 @@ var package_default = {
|
|
15364
15395
|
postcss: "^8.4.38",
|
15365
15396
|
"postcss-cli": "^11.0.0",
|
15366
15397
|
"postcss-value-parser": "^4.2.0",
|
15367
|
-
prettier: "^3.
|
15398
|
+
prettier: "^3.3.3",
|
15368
15399
|
"release-it": "^17.2.1",
|
15369
15400
|
svgo: "^3.0.2",
|
15370
15401
|
tailwindcss: "^3.4.3",
|
@@ -1,4 +1,8 @@
|
|
1
1
|
@layer components {
|
2
|
+
:root {
|
3
|
+
--button-border-radius: 44px;
|
4
|
+
}
|
5
|
+
|
2
6
|
.coco-button-wrapper {
|
3
7
|
@apply !contents;
|
4
8
|
}
|
@@ -83,7 +87,7 @@
|
|
83
87
|
|
84
88
|
&[data-theme] {
|
85
89
|
@apply transition-all overflow-hidden;
|
86
|
-
border-radius:
|
90
|
+
border-radius: var(--button-border-radius);
|
87
91
|
|
88
92
|
.button-content {
|
89
93
|
@apply font-semibold;
|
@@ -16,12 +16,12 @@ module Coco
|
|
16
16
|
@sections[alignment] = view_context.render(component, &block)
|
17
17
|
end
|
18
18
|
|
19
|
-
def initialize(**
|
19
|
+
def initialize(**)
|
20
20
|
@sections = {
|
21
21
|
start: nil,
|
22
22
|
end: nil
|
23
23
|
}
|
24
|
-
super
|
24
|
+
super
|
25
25
|
end
|
26
26
|
|
27
27
|
def start_section
|
@@ -65,7 +65,7 @@ module Coco
|
|
65
65
|
# be used to initialize the component.
|
66
66
|
kwargs = run_callbacks(:before_initialize, kwargs, reduce: true)
|
67
67
|
|
68
|
-
obj = super
|
68
|
+
obj = super
|
69
69
|
|
70
70
|
if obj.instance_of?(Coco::Component)
|
71
71
|
raise "`Coco::Component` must be subclassed before use"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
@layer components {
|
2
|
+
[data-coco][data-component="tabs"] {
|
3
|
+
@apply border-b border-gray-transparent-200;
|
4
|
+
|
5
|
+
[role="tablist"] {
|
6
|
+
display: flex;
|
7
|
+
position: relative;
|
8
|
+
width: 100%;
|
9
|
+
}
|
10
|
+
|
11
|
+
[role="tab"] {
|
12
|
+
@apply border-b-2 border-transparent;
|
13
|
+
position: relative;
|
14
|
+
bottom: -1px;
|
15
|
+
|
16
|
+
.coco-button {
|
17
|
+
@apply text-content-dark-muted;
|
18
|
+
|
19
|
+
&:hover {
|
20
|
+
@apply text-content-dark-2;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
&.active {
|
25
|
+
@apply border-background-dark-1;
|
26
|
+
|
27
|
+
.coco-button {
|
28
|
+
@apply text-content-dark-1;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
&[data-fit="full"] [role="tab"] {
|
34
|
+
width: 100%;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Coco
|
2
|
+
class Tabs < Coco::Component
|
3
|
+
include Concerns::AcceptsOptions
|
4
|
+
|
5
|
+
accepts_option :fit, from: [:auto, :full], default: :auto
|
6
|
+
|
7
|
+
renders_many :tabs, ->(*args, active: false, **kwargs, &block) do
|
8
|
+
tag.li(class: {active:}, role: "tab") do
|
9
|
+
coco_button(*args, **kwargs, theme: :blank, fit: get_option_value(:fit), &block)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
import importGlob from "../lib/scripts/esbuild-plugin-import-glob.mjs";
|
2
|
+
import buildIcons from "../lib/scripts/esbuild-plugin-build-icons.mjs";
|
3
|
+
import mapAliasedPath from "../lib/scripts/map-aliased-path.mjs";
|
4
|
+
import cleanPlugin from "../lib/scripts/esbuild-plugin-clean.mjs";
|
5
|
+
import { copy } from "esbuild-plugin-copy";
|
6
|
+
import { cocoPath } from "./utils.js";
|
7
|
+
|
8
|
+
const watch = process.argv.includes("--watch");
|
9
|
+
const dev = watch || process.argv.includes("--dev");
|
10
|
+
|
11
|
+
export default {
|
12
|
+
entryPoints: ["coco.js"],
|
13
|
+
bundle: true,
|
14
|
+
metafile: true,
|
15
|
+
outdir: cocoPath("@build"),
|
16
|
+
absWorkingDir: cocoPath("@js"),
|
17
|
+
entryNames: `[dir]${dev ? "/dev" : ""}/[name]`,
|
18
|
+
logLevel: dev ? "warning" : "error",
|
19
|
+
plugins: [
|
20
|
+
importGlob({
|
21
|
+
importMapper: mapAliasedPath,
|
22
|
+
}),
|
23
|
+
cleanPlugin({
|
24
|
+
initialCleanPatterns: [
|
25
|
+
"**/*",
|
26
|
+
"!coco.css",
|
27
|
+
"!coco.js",
|
28
|
+
"!tailwind.preset.js",
|
29
|
+
],
|
30
|
+
}),
|
31
|
+
buildIcons(
|
32
|
+
cocoPath("@npm/lucide-static/icons"),
|
33
|
+
cocoPath("@build/icons"),
|
34
|
+
cocoPath("@config")
|
35
|
+
),
|
36
|
+
copy({
|
37
|
+
assets: [
|
38
|
+
{
|
39
|
+
from: ["./app/assets/img/**/*"],
|
40
|
+
to: ["./img"],
|
41
|
+
},
|
42
|
+
{
|
43
|
+
from: ["./app/assets/custom_icons/lucide/**/*"],
|
44
|
+
to: ["./icons"],
|
45
|
+
},
|
46
|
+
{
|
47
|
+
from: ["./app/assets/custom_icons/other/**/*"],
|
48
|
+
to: ["./icons/custom"],
|
49
|
+
},
|
50
|
+
],
|
51
|
+
watch,
|
52
|
+
}),
|
53
|
+
],
|
54
|
+
format: "esm",
|
55
|
+
platform: "node",
|
56
|
+
};
|
data/lib/coco/options/item.rb
CHANGED
data/lib/coco.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
import esbuild from "esbuild";
|
2
|
+
import path from "path";
|
3
|
+
import fs from "fs";
|
4
|
+
import config from "../../config/esbuild.config.mjs";
|
5
|
+
|
6
|
+
const metafilePath = "tmp/bundle-metadata.json";
|
7
|
+
|
8
|
+
function ensureDirectoryExistence(filePath) {
|
9
|
+
var dirname = path.dirname(filePath);
|
10
|
+
if (fs.existsSync(dirname)) {
|
11
|
+
return true;
|
12
|
+
}
|
13
|
+
ensureDirectoryExistence(dirname);
|
14
|
+
fs.mkdirSync(dirname);
|
15
|
+
}
|
16
|
+
|
17
|
+
ensureDirectoryExistence(metafilePath);
|
18
|
+
|
19
|
+
esbuild.build({ ...config, metafile: true }).then((result) => {
|
20
|
+
fs.writeFileSync(metafilePath, JSON.stringify(result.metafile));
|
21
|
+
console.log("\nā
Bundle metadata file generated.");
|
22
|
+
|
23
|
+
console.log(
|
24
|
+
`š You can now upload '${metafilePath}' to https://esbuild.github.io/analyze/ for bundle analysis.`
|
25
|
+
);
|
26
|
+
});
|
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.
|
4
|
+
version: 0.19.1
|
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-09-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -1685,6 +1685,9 @@ files:
|
|
1685
1685
|
- app/components/coco/navigation/pager_button/pager_button.css
|
1686
1686
|
- app/components/coco/navigation/pager_button/pager_button.html.erb
|
1687
1687
|
- app/components/coco/navigation/pager_button/pager_button.rb
|
1688
|
+
- app/components/coco/navigation/tabs/tabs.css
|
1689
|
+
- app/components/coco/navigation/tabs/tabs.html.erb
|
1690
|
+
- app/components/coco/navigation/tabs/tabs.rb
|
1688
1691
|
- app/components/coco/pickers/color_picker/color_picker.css
|
1689
1692
|
- app/components/coco/pickers/color_picker/color_picker.html.erb
|
1690
1693
|
- app/components/coco/pickers/color_picker/color_picker.js
|
@@ -1720,6 +1723,7 @@ files:
|
|
1720
1723
|
- app/helpers/coco/integration_helper.rb
|
1721
1724
|
- app/helpers/coco/modal_helper.rb
|
1722
1725
|
- app/helpers/coco/tag_helper.rb
|
1726
|
+
- config/esbuild.config.mjs
|
1723
1727
|
- config/exports.js
|
1724
1728
|
- config/icons.json
|
1725
1729
|
- config/locales/coco.en.yml
|
@@ -1746,6 +1750,7 @@ files:
|
|
1746
1750
|
- lib/generators/coco/templates/component.rb.tt
|
1747
1751
|
- lib/generators/coco/templates/preview.rb.tt
|
1748
1752
|
- lib/generators/coco/templates/test.rb.tt
|
1753
|
+
- lib/scripts/esbuild-meta.mjs
|
1749
1754
|
- lib/scripts/esbuild-plugin-build-icons.mjs
|
1750
1755
|
- lib/scripts/esbuild-plugin-clean.mjs
|
1751
1756
|
- lib/scripts/esbuild-plugin-import-glob.mjs
|