@bettercms-ai/kit 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/lossy.d.ts +12 -4
- package/dist/adapters/lossy.js +19 -8
- package/dist/adapters/lossy.js.map +1 -1
- package/dist/adapters/prod-types.d.ts +46 -14
- package/dist/adapters/prod-types.js +37 -35
- package/dist/adapters/prod-types.js.map +1 -1
- package/dist/adapters/schema.d.ts +39 -0
- package/dist/adapters/schema.js +281 -82
- package/dist/adapters/schema.js.map +1 -1
- package/dist/context.d.ts +39 -0
- package/dist/context.js +40 -1
- package/dist/context.js.map +1 -1
- package/dist/controls/form-picker-register.d.ts +7 -1
- package/dist/controls/form-picker-register.js +1 -5
- package/dist/controls/form-picker-register.js.map +1 -1
- package/dist/controls/icon.d.ts +1 -1
- package/dist/controls/icon.js +1 -1
- package/dist/controls/icon.js.map +1 -1
- package/dist/controls/link.d.ts +11 -4
- package/dist/controls/link.js +120 -202
- package/dist/controls/link.js.map +1 -1
- package/dist/controls/location.js +3 -8
- package/dist/controls/location.js.map +1 -1
- package/dist/controls/media.d.ts +0 -14
- package/dist/controls/media.js +52 -95
- package/dist/controls/media.js.map +1 -1
- package/dist/controls/reference-services.d.ts +23 -2
- package/dist/controls/reference.d.ts +2 -2
- package/dist/controls/reference.js +79 -28
- package/dist/controls/reference.js.map +1 -1
- package/dist/controls/rich-text/article-shell.d.ts +145 -0
- package/dist/controls/rich-text/article-shell.js +514 -0
- package/dist/controls/rich-text/article-shell.js.map +1 -0
- package/dist/controls/rich-text/author.d.ts +25 -0
- package/dist/controls/rich-text/author.js +107 -0
- package/dist/controls/rich-text/author.js.map +1 -0
- package/dist/controls/rich-text/blocks.d.ts +19 -2
- package/dist/controls/rich-text/blocks.js +275 -638
- package/dist/controls/rich-text/blocks.js.map +1 -1
- package/dist/controls/rich-text/button.d.ts +23 -0
- package/dist/controls/rich-text/button.js +81 -0
- package/dist/controls/rich-text/button.js.map +1 -0
- package/dist/controls/rich-text/catalog.d.ts +2 -5
- package/dist/controls/rich-text/catalog.js +121 -7
- package/dist/controls/rich-text/catalog.js.map +1 -1
- package/dist/controls/rich-text/checklist.d.ts +24 -0
- package/dist/controls/rich-text/checklist.js +115 -0
- package/dist/controls/rich-text/checklist.js.map +1 -0
- package/dist/controls/rich-text/codec.d.ts +15 -1
- package/dist/controls/rich-text/codec.js +11 -1
- package/dist/controls/rich-text/codec.js.map +1 -1
- package/dist/controls/rich-text/columns.d.ts +41 -0
- package/dist/controls/rich-text/columns.js +181 -0
- package/dist/controls/rich-text/columns.js.map +1 -0
- package/dist/controls/rich-text/control.js +1 -0
- package/dist/controls/rich-text/control.js.map +1 -1
- package/dist/controls/rich-text/dom.d.ts +84 -4
- package/dist/controls/rich-text/dom.js +171 -10
- package/dist/controls/rich-text/dom.js.map +1 -1
- package/dist/controls/rich-text/editor.d.ts +4 -2
- package/dist/controls/rich-text/editor.js +199 -26
- package/dist/controls/rich-text/editor.js.map +1 -1
- package/dist/controls/rich-text/embed.d.ts +28 -0
- package/dist/controls/rich-text/embed.js +210 -0
- package/dist/controls/rich-text/embed.js.map +1 -0
- package/dist/controls/rich-text/footnote.d.ts +41 -0
- package/dist/controls/rich-text/footnote.js +185 -0
- package/dist/controls/rich-text/footnote.js.map +1 -0
- package/dist/controls/rich-text/gallery.d.ts +28 -0
- package/dist/controls/rich-text/gallery.js +167 -0
- package/dist/controls/rich-text/gallery.js.map +1 -0
- package/dist/controls/rich-text/link-form.d.ts +13 -1
- package/dist/controls/rich-text/link-form.js +41 -7
- package/dist/controls/rich-text/link-form.js.map +1 -1
- package/dist/controls/rich-text/ops.js +6 -0
- package/dist/controls/rich-text/ops.js.map +1 -1
- package/dist/controls/rich-text/related.d.ts +49 -0
- package/dist/controls/rich-text/related.js +233 -0
- package/dist/controls/rich-text/related.js.map +1 -0
- package/dist/controls/rich-text/toc.d.ts +47 -0
- package/dist/controls/rich-text/toc.js +160 -0
- package/dist/controls/rich-text/toc.js.map +1 -0
- package/dist/controls/slot-register.d.ts +6 -1
- package/dist/controls/slot-register.js +1 -4
- package/dist/controls/slot-register.js.map +1 -1
- package/dist/core/core.d.ts +11 -3
- package/dist/core/core.js +24 -6
- package/dist/core/core.js.map +1 -1
- package/dist/core/facets.d.ts +16 -0
- package/dist/core/facets.js +17 -1
- package/dist/core/facets.js.map +1 -1
- package/dist/core/index.js +2 -2
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/ledgers/exclusions.v1.js +141 -0
- package/dist/ledgers/exclusions.v1.js.map +1 -0
- package/dist/library/coverage.d.ts +13 -1
- package/dist/library/coverage.js +12 -1
- package/dist/library/coverage.js.map +1 -1
- package/dist/library/kit-catalog.json +156 -153
- package/dist/schema/types.d.ts +17 -0
- package/dist/schema/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/testing/coverage-extras.d.ts +8 -0
- package/dist/testing/coverage-extras.js +44 -0
- package/dist/testing/coverage-extras.js.map +1 -0
- package/dist/testing/exclusions.d.ts +30 -0
- package/dist/testing/exclusions.js +13 -0
- package/dist/testing/exclusions.js.map +1 -0
- package/dist/ui/autocomplete.d.ts +29 -1
- package/dist/ui/autocomplete.js +102 -47
- package/dist/ui/autocomplete.js.map +1 -1
- package/dist/ui/button.js +3 -5
- package/dist/ui/button.js.map +1 -1
- package/dist/ui/index.js +2 -2
- package/dist/ui/overlay.d.ts +4 -1
- package/dist/ui/overlay.js +2 -1
- package/dist/ui/overlay.js.map +1 -1
- package/dist/ui/toast.js +1 -1
- package/package.json +8 -2
package/dist/controls/media.js
CHANGED
|
@@ -297,35 +297,6 @@ var NO_LIBRARY = "No media library is connected to this editor, so nothing can b
|
|
|
297
297
|
var NO_UPLOAD = "No upload is connected to this editor, so files can't be uploaded here.";
|
|
298
298
|
/** Transparency checker on the kit tokens (white in light, dimmed in dark), as the media grid draws it. */
|
|
299
299
|
var CHECKER = "bg-kit-checker-a [background-image:conic-gradient(var(--kit-checker-b)_25%,var(--kit-checker-a)_0_50%,var(--kit-checker-b)_0_75%,var(--kit-checker-a)_0)] [background-size:12px_12px]";
|
|
300
|
-
/** The preview frame's shape bounds: a tall or panoramic picture never makes the dock tall or a sliver. */
|
|
301
|
-
var FRAME_MIN = 1;
|
|
302
|
-
var FRAME_MAX = 2;
|
|
303
|
-
/**
|
|
304
|
-
* How a preview frames a picture of any shape: the frame follows the picture's ratio between square and 2:1, and the
|
|
305
|
-
* picture fits inside it WHOLE, filling the frame's width or height (a portrait is boxed at the sides, a panorama above
|
|
306
|
-
* and below, on the checker). With no known size (still loading, or an SVG with no intrinsic size) the frame is 16:9
|
|
307
|
-
* and the picture is contained. Before 2026-10-16 every picture was cropped to a fixed 16:9 (`object-cover`).
|
|
308
|
-
*/
|
|
309
|
-
function frameFit(size) {
|
|
310
|
-
if (!size || !(size.w > 0) || !(size.h > 0)) return {
|
|
311
|
-
frame: 16 / 9,
|
|
312
|
-
image: null,
|
|
313
|
-
fill: "contain"
|
|
314
|
-
};
|
|
315
|
-
const image = size.w / size.h;
|
|
316
|
-
const frame = Math.min(FRAME_MAX, Math.max(FRAME_MIN, image));
|
|
317
|
-
return {
|
|
318
|
-
frame,
|
|
319
|
-
image,
|
|
320
|
-
fill: image < frame ? "height" : "width"
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
/** The picture's classes for a fit: it keeps its own ratio and the frame's width or height, never cut. */
|
|
324
|
-
var FIT_CLASS = {
|
|
325
|
-
width: "h-auto max-h-full w-full object-contain",
|
|
326
|
-
height: "h-full w-auto max-w-full object-contain",
|
|
327
|
-
contain: "size-full object-contain"
|
|
328
|
-
};
|
|
329
300
|
/** V2's five crops (kit media.tsx CROPS, D46). */
|
|
330
301
|
var CROPS = [
|
|
331
302
|
{
|
|
@@ -390,9 +361,7 @@ function ImageDetails({ v, onChange, readOnly, label, urlOnly, altOnly = false,
|
|
|
390
361
|
};
|
|
391
362
|
const choice = cropChoice(v.crop, size);
|
|
392
363
|
const crop = CROPS.find((c) => c.value === choice);
|
|
393
|
-
const
|
|
394
|
-
const pad = own?.image ? own : null;
|
|
395
|
-
const padRatio = crop && crop.ratio !== "auto" ? crop.ratio : pad ? String(pad.image) : customRatio(v.crop, size) ?? "3/2";
|
|
364
|
+
const padRatio = crop && crop.ratio !== "auto" ? crop.ratio : customRatio(v.crop, size) ?? "3/2";
|
|
396
365
|
const setFocal = (x, y) => {
|
|
397
366
|
const next = {
|
|
398
367
|
...v,
|
|
@@ -510,49 +479,45 @@ function ImageDetails({ v, onChange, readOnly, label, urlOnly, altOnly = false,
|
|
|
510
479
|
className: "text-kit-2xs text-kit-fg-3",
|
|
511
480
|
children: "The crop is cut from the picture's size, which is still loading."
|
|
512
481
|
}) : null,
|
|
513
|
-
/* @__PURE__ */
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
top: `${focal.y}%`
|
|
553
|
-
}
|
|
554
|
-
})]
|
|
555
|
-
})
|
|
482
|
+
/* @__PURE__ */ jsxs("div", {
|
|
483
|
+
role: "slider",
|
|
484
|
+
"aria-label": "Focal point. Click the subject.",
|
|
485
|
+
"aria-valuetext": `${focal.x}% across, ${focal.y}% down`,
|
|
486
|
+
"aria-valuenow": focal.x,
|
|
487
|
+
"aria-valuemin": 0,
|
|
488
|
+
"aria-valuemax": 100,
|
|
489
|
+
"aria-readonly": readOnly || void 0,
|
|
490
|
+
tabIndex: 0,
|
|
491
|
+
onPointerDown: (e) => !readOnly && fromPointer(e),
|
|
492
|
+
onKeyDown: (e) => {
|
|
493
|
+
const d = e.shiftKey ? 10 : 2;
|
|
494
|
+
const step = {
|
|
495
|
+
ArrowLeft: [-d, 0],
|
|
496
|
+
ArrowRight: [d, 0],
|
|
497
|
+
ArrowUp: [0, -d],
|
|
498
|
+
ArrowDown: [0, d]
|
|
499
|
+
}[e.key];
|
|
500
|
+
if (!step || readOnly) return;
|
|
501
|
+
e.preventDefault();
|
|
502
|
+
setFocal(focal.x + step[0], focal.y + step[1]);
|
|
503
|
+
},
|
|
504
|
+
"data-pad-ratio": padRatio,
|
|
505
|
+
className: "relative mt-1 cursor-crosshair overflow-hidden rounded-kit-md border border-kit-line bg-kit-muted",
|
|
506
|
+
style: { aspectRatio: padRatio },
|
|
507
|
+
children: [/* @__PURE__ */ jsx("img", {
|
|
508
|
+
src: src(v.url),
|
|
509
|
+
alt: "",
|
|
510
|
+
draggable: false,
|
|
511
|
+
className: "pointer-events-none size-full select-none object-cover transition-[object-position] duration-200",
|
|
512
|
+
style: { objectPosition: `${focal.x}% ${focal.y}%` }
|
|
513
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
514
|
+
"aria-hidden": true,
|
|
515
|
+
className: "pointer-events-none absolute size-5 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-kit-media-handle bg-kit-media-handle-ring shadow-kit-md transition-[left,top] duration-150",
|
|
516
|
+
style: {
|
|
517
|
+
left: `${focal.x}%`,
|
|
518
|
+
top: `${focal.y}%`
|
|
519
|
+
}
|
|
520
|
+
})]
|
|
556
521
|
}),
|
|
557
522
|
/* @__PURE__ */ jsx("span", {
|
|
558
523
|
className: "text-kit-2xs text-kit-fg-3",
|
|
@@ -799,9 +764,11 @@ function ImageControl({ field, value, onChange: write, readOnly, id, path }) {
|
|
|
799
764
|
})
|
|
800
765
|
]
|
|
801
766
|
});
|
|
802
|
-
const
|
|
803
|
-
const
|
|
804
|
-
|
|
767
|
+
const frameRatio = CROPS.find((c) => c.value === cropChoice(v.crop, size))?.ratio;
|
|
768
|
+
const focal = v.focal ?? {
|
|
769
|
+
x: 50,
|
|
770
|
+
y: 50
|
|
771
|
+
};
|
|
805
772
|
const alt = urlOnly ? asset?.alt : v.alt;
|
|
806
773
|
const name = asset?.name ?? v.name ?? fileNameFromUrl(v.url);
|
|
807
774
|
const replace = (a) => {
|
|
@@ -827,9 +794,8 @@ function ImageControl({ field, value, onChange: write, readOnly, id, path }) {
|
|
|
827
794
|
children: [
|
|
828
795
|
/* @__PURE__ */ jsxs("div", {
|
|
829
796
|
"data-slot": "kit-image-frame",
|
|
830
|
-
"
|
|
831
|
-
|
|
832
|
-
style: { aspectRatio: fit.frame },
|
|
797
|
+
className: "group/img relative overflow-hidden rounded-kit-lg border border-kit-line bg-kit-muted",
|
|
798
|
+
style: { aspectRatio: frameRatio && frameRatio !== "auto" ? frameRatio : "16/9" },
|
|
833
799
|
children: [
|
|
834
800
|
/* @__PURE__ */ jsx("button", {
|
|
835
801
|
id,
|
|
@@ -843,17 +809,8 @@ function ImageControl({ field, value, onChange: write, readOnly, id, path }) {
|
|
|
843
809
|
alt: alt ?? "",
|
|
844
810
|
ref: readNatural,
|
|
845
811
|
onLoad: (e) => readNatural(e.currentTarget),
|
|
846
|
-
"
|
|
847
|
-
|
|
848
|
-
"data-cap": cap ? `${cap.w}x${cap.h}` : void 0,
|
|
849
|
-
className: FIT_CLASS[fit.fill],
|
|
850
|
-
style: fit.image ? {
|
|
851
|
-
aspectRatio: fit.image,
|
|
852
|
-
...cap ? {
|
|
853
|
-
maxWidth: `min(100%, ${cap.w}px)`,
|
|
854
|
-
maxHeight: `min(100%, ${cap.h}px)`
|
|
855
|
-
} : {}
|
|
856
|
-
} : void 0
|
|
812
|
+
className: "size-full object-cover",
|
|
813
|
+
style: { objectPosition: `${focal.x}% ${focal.y}%` }
|
|
857
814
|
})
|
|
858
815
|
}),
|
|
859
816
|
readOnly ? null : /* @__PURE__ */ jsxs("div", {
|
|
@@ -994,7 +951,7 @@ function Thumb({ item, label, readOnly, sort, onRemove, onOpen }) {
|
|
|
994
951
|
ref: sort.register(item.key),
|
|
995
952
|
role: "listitem",
|
|
996
953
|
style: sort.style(item.key),
|
|
997
|
-
className: cn("group/thumb relative aspect-square cursor-grab touch-none overflow-hidden rounded-kit-md border border-kit-line active:cursor-grabbing",
|
|
954
|
+
className: cn("group/thumb relative aspect-square cursor-grab touch-none overflow-hidden rounded-kit-md border border-kit-line bg-kit-muted active:cursor-grabbing", sort.active === item.key && "z-10 opacity-90 shadow-kit-lg ring-2 ring-kit-line-strong"),
|
|
998
955
|
children: [
|
|
999
956
|
/* @__PURE__ */ jsx("div", {
|
|
1000
957
|
...readOnly ? {} : handle,
|
|
@@ -1020,7 +977,7 @@ function Thumb({ item, label, readOnly, sort, onRemove, onOpen }) {
|
|
|
1020
977
|
src: src(item.v.url),
|
|
1021
978
|
alt: item.v.alt ?? "",
|
|
1022
979
|
"data-slot": "kit-gallery-thumb",
|
|
1023
|
-
className: "pointer-events-none size-full select-none object-
|
|
980
|
+
className: "pointer-events-none size-full select-none object-cover",
|
|
1024
981
|
draggable: false
|
|
1025
982
|
})
|
|
1026
983
|
}),
|
|
@@ -1391,6 +1348,6 @@ function VideoControl({ field, value, onChange, readOnly, id, onBlur }) {
|
|
|
1391
1348
|
});
|
|
1392
1349
|
}
|
|
1393
1350
|
//#endregion
|
|
1394
|
-
export { FileControl, GalleryControl, ImageControl, MediaPicker, VideoControl, VideoPreview, acceptsFile, cropChoice, fileNameFromUrl, formatBytes,
|
|
1351
|
+
export { FileControl, GalleryControl, ImageControl, MediaPicker, VideoControl, VideoPreview, acceptsFile, cropChoice, fileNameFromUrl, formatBytes, fromAsset, isVideoUrl, normImage, useUpload, videoProvider, withCrop, youTubeId };
|
|
1395
1352
|
|
|
1396
1353
|
//# sourceMappingURL=media.js.map
|