@openrails/contentkit-ui 0.89.1 → 0.89.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.
Files changed (37) hide show
  1. package/README.md +25 -0
  2. package/dist/client/browser-search-history.d.ts +24 -0
  3. package/dist/client/browser-search-history.js +92 -0
  4. package/dist/client/browser-search-history.js.map +1 -0
  5. package/dist/client/discovery.d.ts +5 -2
  6. package/dist/client/discovery.js +14 -22
  7. package/dist/client/discovery.js.map +1 -1
  8. package/dist/client.js +14 -14
  9. package/dist/components/content/index.d.ts +1 -0
  10. package/dist/components/content/reader-settings.d.ts +19 -0
  11. package/dist/components/content/reader-settings.js +95 -0
  12. package/dist/components/content/reader-settings.js.map +1 -0
  13. package/dist/components/content/search.d.ts +2 -0
  14. package/dist/components/content/search.js +334 -137
  15. package/dist/components/content/search.js.map +1 -1
  16. package/dist/index.js +17 -16
  17. package/dist/locales/discovery/de.js +9 -0
  18. package/dist/locales/discovery/de.js.map +1 -1
  19. package/dist/locales/discovery/en.d.ts +9 -0
  20. package/dist/locales/discovery/en.js +9 -0
  21. package/dist/locales/discovery/en.js.map +1 -1
  22. package/dist/locales/discovery/es.js +9 -0
  23. package/dist/locales/discovery/es.js.map +1 -1
  24. package/dist/locales/discovery/ja.js +9 -0
  25. package/dist/locales/discovery/ja.js.map +1 -1
  26. package/dist/locales/discovery/ko.js +9 -0
  27. package/dist/locales/discovery/ko.js.map +1 -1
  28. package/dist/locales/discovery/zh.js +9 -0
  29. package/dist/locales/discovery/zh.js.map +1 -1
  30. package/dist/locales/en.d.ts +9 -0
  31. package/dist/react/discovery.d.ts +1 -1
  32. package/dist/react/discovery.js +145 -92
  33. package/dist/react/discovery.js.map +1 -1
  34. package/dist/styles.css +1 -1
  35. package/dist/ui/dialog.js +16 -10
  36. package/dist/ui/dialog.js.map +1 -1
  37. package/package.json +1 -1
package/dist/ui/dialog.js CHANGED
@@ -15,27 +15,33 @@ function l({ ...e }) {
15
15
  ...e
16
16
  });
17
17
  }
18
- function u(e) {
18
+ function u({ ...e }) {
19
+ return /* @__PURE__ */ r(c.Trigger, {
20
+ "data-slot": "dialog-trigger",
21
+ ...e
22
+ });
23
+ }
24
+ function d(e) {
19
25
  return /* @__PURE__ */ r(c.Portal, {
20
26
  "data-slot": "dialog-portal",
21
27
  ...t(),
22
28
  ...e
23
29
  });
24
30
  }
25
- function d({ className: e, ...t }) {
31
+ function f({ className: e, ...t }) {
26
32
  return /* @__PURE__ */ r(c.Backdrop, {
27
33
  "data-slot": "dialog-overlay",
28
34
  className: a("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", e),
29
35
  ...t
30
36
  });
31
37
  }
32
- function f({ className: t, children: l, showCloseButton: f = !0, ...p }) {
38
+ function p({ className: t, children: l, showCloseButton: u = !0, ...p }) {
33
39
  let { t: m } = e();
34
- return /* @__PURE__ */ i(u, { children: [/* @__PURE__ */ r(d, {}), /* @__PURE__ */ i(c.Popup, {
40
+ return /* @__PURE__ */ i(d, { children: [/* @__PURE__ */ r(f, {}), /* @__PURE__ */ i(c.Popup, {
35
41
  "data-slot": "dialog-content",
36
42
  className: a("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-6 rounded-xl bg-popover p-6 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", t),
37
43
  ...p,
38
- children: [l, f && /* @__PURE__ */ i(c.Close, {
44
+ children: [l, u && /* @__PURE__ */ i(c.Close, {
39
45
  "data-slot": "dialog-close",
40
46
  render: /* @__PURE__ */ r(n, {
41
47
  variant: "ghost",
@@ -52,14 +58,14 @@ function f({ className: t, children: l, showCloseButton: f = !0, ...p }) {
52
58
  })]
53
59
  })] });
54
60
  }
55
- function p({ className: e, ...t }) {
61
+ function m({ className: e, ...t }) {
56
62
  return /* @__PURE__ */ r("div", {
57
63
  "data-slot": "dialog-header",
58
64
  className: a("flex flex-col gap-2", e),
59
65
  ...t
60
66
  });
61
67
  }
62
- function m({ className: t, showCloseButton: o = !1, children: s, ...l }) {
68
+ function h({ className: t, showCloseButton: o = !1, children: s, ...l }) {
63
69
  let { t: u } = e();
64
70
  return /* @__PURE__ */ i("div", {
65
71
  "data-slot": "dialog-footer",
@@ -71,14 +77,14 @@ function m({ className: t, showCloseButton: o = !1, children: s, ...l }) {
71
77
  })]
72
78
  });
73
79
  }
74
- function h({ className: e, ...t }) {
80
+ function g({ className: e, ...t }) {
75
81
  return /* @__PURE__ */ r(c.Title, {
76
82
  "data-slot": "dialog-title",
77
83
  className: a("leading-none font-medium", e),
78
84
  ...t
79
85
  });
80
86
  }
81
- function g({ className: e, ...t }) {
87
+ function _({ className: e, ...t }) {
82
88
  return /* @__PURE__ */ r(c.Description, {
83
89
  "data-slot": "dialog-description",
84
90
  className: a("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", e),
@@ -86,6 +92,6 @@ function g({ className: e, ...t }) {
86
92
  });
87
93
  }
88
94
  //#endregion
89
- export { l as Dialog, f as DialogContent, g as DialogDescription, m as DialogFooter, p as DialogHeader, d as DialogOverlay, u as DialogPortal, h as DialogTitle };
95
+ export { l as Dialog, p as DialogContent, _ as DialogDescription, h as DialogFooter, m as DialogHeader, f as DialogOverlay, d as DialogPortal, g as DialogTitle, u as DialogTrigger };
90
96
 
91
97
  //# sourceMappingURL=dialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","names":[],"sources":["../../src/ui/dialog.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { cn } from \"cn\"\n\nimport { Button } from \"#ckui/ui/button\"\nimport { HugeiconsIcon } from \"@hugeicons/react\"\nimport { Cancel01Icon } from \"@hugeicons/core-free-icons\"\n\nimport { useMessages } from \"#ckui/i18n/context\"\nimport { useScopeProps } from \"#ckui/scope\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\n// Local: the portal leaves the host tree, so it carries the `.ckui` scope.\nfunction DialogPortal(\n props: Omit<DialogPrimitive.Portal.Props, \"className\" | \"style\">\n) {\n return (\n <DialogPrimitive.Portal\n data-slot=\"dialog-portal\"\n {...useScopeProps()}\n {...props}\n />\n )\n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n}) {\n const { t } = useMessages() // Local: i18n close label.\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-6 rounded-xl bg-popover p-6 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-4 right-4\"\n size=\"icon-sm\"\n />\n }\n >\n <HugeiconsIcon icon={Cancel01Icon} strokeWidth={2} />\n <span className=\"sr-only\">{t(\"common.close\")}</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n const { t } = useMessages() // Local: i18n close label.\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close render={<Button variant=\"outline\" />}>\n {t(\"common.close\")}\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"leading-none font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n \"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"],"mappings":";;;;;;;;;;;AAaA,SAAS,EAAO,EAAE,GAAG,KAAqC;CACxD,OAAO,kBAAC,EAAgB,MAAjB;EAAsB,aAAU;EAAS,GAAI;CAAQ,CAAA;AAC9D;AAOA,SAAS,EACP,GACA;CACA,OACE,kBAAC,EAAgB,QAAjB;EACE,aAAU;EACV,GAAI,EAAc;EAClB,GAAI;CACL,CAAA;AAEL;AAMA,SAAS,EAAc,EACrB,cACA,GAAG,KAC8B;CACjC,OACE,kBAAC,EAAgB,UAAjB;EACE,aAAU;EACV,WAAW,EACT,yLACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAc,EACrB,cACA,aACA,qBAAkB,IAClB,GAAG,KAGF;CACD,IAAM,EAAE,SAAM,EAAY;CAC1B,OACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,CAAgB,CAAA,GAChB,kBAAC,EAAgB,OAAjB;EACE,aAAU;EACV,WAAW,EACT,0WACA,CACF;EACA,GAAI;EANN,UAAA,CAQG,GACA,KACC,kBAAC,EAAgB,OAAjB;GACE,aAAU;GACV,QACE,kBAAC,GAAD;IACE,SAAQ;IACR,WAAU;IACV,MAAK;GACN,CAAA;GAPL,UAAA,CAUE,kBAAC,GAAD;IAAe,MAAM;IAAc,aAAa;GAAI,CAAA,GACpD,kBAAC,QAAD;IAAM,WAAU;IAAW,UAAA,EAAE,cAAc;GAAQ,CAAA,CAC9B;EAEJ,CAAA,CAAA;CACX,CAAA,CAAA,EAAA,CAAA;AAElB;AAEA,SAAS,EAAa,EAAE,cAAW,GAAG,KAAsC;CAC1E,OACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,uBAAuB,CAAS;EAC9C,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAa,EACpB,cACA,qBAAkB,IAClB,aACA,GAAG,KAGF;CACD,IAAM,EAAE,SAAM,EAAY;CAC1B,OACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,0DACA,CACF;EACA,GAAI;EANN,UAAA,CAQG,GACA,KACC,kBAAC,EAAgB,OAAjB;GAAuB,QAAQ,kBAAC,GAAD,EAAQ,SAAQ,UAAW,CAAA;GACvD,UAAA,EAAE,cAAc;EACI,CAAA,CAEtB;;AAET;AAEA,SAAS,EAAY,EAAE,cAAW,GAAG,KAAsC;CACzE,OACE,kBAAC,EAAgB,OAAjB;EACE,aAAU;EACV,WAAW,EAAG,4BAA4B,CAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAkB,EACzB,cACA,GAAG,KACiC;CACpC,OACE,kBAAC,EAAgB,aAAjB;EACE,aAAU;EACV,WAAW,EACT,sGACA,CACF;EACA,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"dialog.js","names":[],"sources":["../../src/ui/dialog.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { cn } from \"cn\"\n\nimport { Button } from \"#ckui/ui/button\"\nimport { HugeiconsIcon } from \"@hugeicons/react\"\nimport { Cancel01Icon } from \"@hugeicons/core-free-icons\"\n\nimport { useMessages } from \"#ckui/i18n/context\"\nimport { useScopeProps } from \"#ckui/scope\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\n// Local: the portal leaves the host tree, so it carries the `.ckui` scope.\nfunction DialogPortal(\n props: Omit<DialogPrimitive.Portal.Props, \"className\" | \"style\">\n) {\n return (\n <DialogPrimitive.Portal\n data-slot=\"dialog-portal\"\n {...useScopeProps()}\n {...props}\n />\n )\n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n}) {\n const { t } = useMessages() // Local: i18n close label.\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-6 rounded-xl bg-popover p-6 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-4 right-4\"\n size=\"icon-sm\"\n />\n }\n >\n <HugeiconsIcon icon={Cancel01Icon} strokeWidth={2} />\n <span className=\"sr-only\">{t(\"common.close\")}</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n const { t } = useMessages() // Local: i18n close label.\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close render={<Button variant=\"outline\" />}>\n {t(\"common.close\")}\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"leading-none font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n \"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"],"mappings":";;;;;;;;;;;AAaA,SAAS,EAAO,EAAE,GAAG,KAAqC;CACxD,OAAO,kBAAC,EAAgB,MAAjB;EAAsB,aAAU;EAAS,GAAI;CAAQ,CAAA;AAC9D;AAEA,SAAS,EAAc,EAAE,GAAG,KAAwC;CAClE,OAAO,kBAAC,EAAgB,SAAjB;EAAyB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACzE;AAGA,SAAS,EACP,GACA;CACA,OACE,kBAAC,EAAgB,QAAjB;EACE,aAAU;EACV,GAAI,EAAc;EAClB,GAAI;CACL,CAAA;AAEL;AAMA,SAAS,EAAc,EACrB,cACA,GAAG,KAC8B;CACjC,OACE,kBAAC,EAAgB,UAAjB;EACE,aAAU;EACV,WAAW,EACT,yLACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAc,EACrB,cACA,aACA,qBAAkB,IAClB,GAAG,KAGF;CACD,IAAM,EAAE,SAAM,EAAY;CAC1B,OACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,CAAgB,CAAA,GAChB,kBAAC,EAAgB,OAAjB;EACE,aAAU;EACV,WAAW,EACT,0WACA,CACF;EACA,GAAI;EANN,UAAA,CAQG,GACA,KACC,kBAAC,EAAgB,OAAjB;GACE,aAAU;GACV,QACE,kBAAC,GAAD;IACE,SAAQ;IACR,WAAU;IACV,MAAK;GACN,CAAA;GAPL,UAAA,CAUE,kBAAC,GAAD;IAAe,MAAM;IAAc,aAAa;GAAI,CAAA,GACpD,kBAAC,QAAD;IAAM,WAAU;IAAW,UAAA,EAAE,cAAc;GAAQ,CAAA,CAC9B;EAEJ,CAAA,CAAA;CACX,CAAA,CAAA,EAAA,CAAA;AAElB;AAEA,SAAS,EAAa,EAAE,cAAW,GAAG,KAAsC;CAC1E,OACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,uBAAuB,CAAS;EAC9C,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAa,EACpB,cACA,qBAAkB,IAClB,aACA,GAAG,KAGF;CACD,IAAM,EAAE,SAAM,EAAY;CAC1B,OACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,0DACA,CACF;EACA,GAAI;EANN,UAAA,CAQG,GACA,KACC,kBAAC,EAAgB,OAAjB;GAAuB,QAAQ,kBAAC,GAAD,EAAQ,SAAQ,UAAW,CAAA;GACvD,UAAA,EAAE,cAAc;EACI,CAAA,CAEtB;;AAET;AAEA,SAAS,EAAY,EAAE,cAAW,GAAG,KAAsC;CACzE,OACE,kBAAC,EAAgB,OAAjB;EACE,aAAU;EACV,WAAW,EAAG,4BAA4B,CAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAkB,EACzB,cACA,GAAG,KACiC;CACpC,OACE,kBAAC,EAAgB,aAAjB;EACE,aAAU;EACV,WAAW,EACT,sGACA,CACF;EACA,GAAI;CACL,CAAA;AAEL"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openrails/contentkit-ui",
3
- "version": "0.89.1",
3
+ "version": "0.89.2",
4
4
  "description": "ContentKit in the browser: client, React hooks and styled components for media, uploads and content URLs.",
5
5
  "type": "module",
6
6
  "license": "MIT",