@thebase/ui 1.1.6 → 1.2.0

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 (63) hide show
  1. package/CHANGELOG.md +80 -1
  2. package/README.md +9 -5
  3. package/bin/create-baseui-app.mjs +31 -8
  4. package/dist/baseui.apidoc.esm.js +68 -60
  5. package/dist/baseui.apidoc.min.js +68 -60
  6. package/dist/baseui.esm.js +44 -47
  7. package/dist/baseui.icons.esm.js +1 -1
  8. package/dist/baseui.min.css +2 -2
  9. package/dist/baseui.min.js +62 -46
  10. package/dist/baseui.pwa.esm.js +71 -9
  11. package/dist/baseui.registry.json +26 -33
  12. package/dist/baseui.templates.xml +353 -370
  13. package/dist/baseui.vite.esm.js +116 -0
  14. package/dist/runtime/lazy/apidoc.logic.js +20 -0
  15. package/dist/runtime/milkdown/milkdown-editor.js +1 -1
  16. package/dist/runtime/milkdown/milkdown-text-editor.js +1 -1
  17. package/dist/themes/baseui-dark.css +80 -1
  18. package/dist/themes/baseui-dark.min.css +1 -0
  19. package/dist/themes/baseui-light.css +81 -1
  20. package/dist/themes/baseui-light.min.css +1 -0
  21. package/dist/types/pwa.d.ts +1 -45
  22. package/dist/types/vite.d.ts +4 -0
  23. package/docs/analytics.md +3 -3
  24. package/docs/base-ui-skill.md +54 -0
  25. package/docs/blocks.md +1 -1
  26. package/docs/components/accordion.md +4 -4
  27. package/docs/components/apidoc.md +1 -1
  28. package/docs/components/block-viewer.md +1 -1
  29. package/docs/components/breadcrumb.md +1 -1
  30. package/docs/components/button.md +1 -1
  31. package/docs/components/chart.md +2 -0
  32. package/docs/components/code-editor.md +77 -0
  33. package/docs/components/combobox.md +10 -0
  34. package/docs/components/data-table.md +2 -2
  35. package/docs/components/date-picker.md +10 -0
  36. package/docs/components/dialog.md +5 -5
  37. package/docs/components/empty.md +1 -1
  38. package/docs/components/field.md +8 -0
  39. package/docs/components/form.md +29 -29
  40. package/docs/components/input.md +28 -2
  41. package/docs/components/kbd.md +3 -6
  42. package/docs/components/markdown.md +3 -1
  43. package/docs/components/message-scroller.md +3 -8
  44. package/docs/components/native-select.md +13 -0
  45. package/docs/components/navigation-menu.md +2 -0
  46. package/docs/components/pwa.md +1 -1
  47. package/docs/components/select.md +16 -0
  48. package/docs/components/shell.md +4 -2
  49. package/docs/components/sidebar.md +18 -16
  50. package/docs/components/switch.md +11 -0
  51. package/docs/components/text-editor.md +1 -1
  52. package/docs/components/textarea.md +23 -0
  53. package/docs/components/theme-button.md +1 -1
  54. package/docs/components/toast.md +10 -10
  55. package/docs/components/typography.md +21 -2
  56. package/docs/icons.md +1 -1
  57. package/docs/installation.md +2 -2
  58. package/docs/owl-components.md +1 -1
  59. package/docs/runtime-api.md +2 -2
  60. package/docs/theming.md +33 -3
  61. package/docs/usage-guide.md +23 -6
  62. package/package.json +6 -1
  63. package/docs/components/input-group.md +0 -68
@@ -1,20 +1,80 @@
1
- var d=["favicon.ico","favicon-16x16.png","favicon-32x32.png","apple-touch-icon.png","icon-192.png","icon-512.png"],l="/icons/";function m(e){return[{src:`${e}icon-192.png`,sizes:"192x192",type:"image/png",purpose:"any"},{src:`${e}icon-512.png`,sizes:"512x512",type:"image/png",purpose:"any"},{src:`${e}icon-512.png`,sizes:"512x512",type:"image/png",purpose:"maskable"}]}function E(e){let{name:t,shortName:s=t,description:c="",startUrl:r="/",scope:a="/",display:o="standalone",orientation:n="portrait-primary",backgroundColor:i="#ffffff",themeColor:p="#0f172a",lang:h="en",iconsBase:u=l,icons:f=m(u)}=e;return{name:t,short_name:s,description:c,start_url:r,scope:a,display:o,orientation:n,background_color:i,theme_color:p,lang:h,icons:f}}function C(e){let{cacheName:t,cdnVersion:s,iconsBase:c=l,manifestUrl:r="/manifest.webmanifest",appFiles:a=[],extraPrecacheUrls:o=[]}=e,n=`https://cdn.jsdelivr.net/npm/@thebase/ui@${s}/dist/`,i=["/",r,...d.map(p=>`${c}${p}`),...a,...o,`${n}baseui.min.css`,`${n}baseui.esm.js`,`${n}baseui.templates.xml`];return`const CACHE_NAME = ${JSON.stringify(t)};
2
- const BASEUI_CDN = ${JSON.stringify(n)};
1
+ var d=["favicon.ico","favicon-16x16.png","favicon-32x32.png","apple-touch-icon.png","icon-192.png","icon-512.png"],h="/icons/";function v(e){return[{src:`${e}icon-192.png`,sizes:"192x192",type:"image/png",purpose:"any"},{src:`${e}icon-512.png`,sizes:"512x512",type:"image/png",purpose:"any"},{src:`${e}icon-512.png`,sizes:"512x512",type:"image/png",purpose:"maskable"}]}function g(e){let{name:n,shortName:r=n,description:a="",startUrl:o="/",scope:i="/",display:c="standalone",orientation:t="portrait-primary",backgroundColor:l="#ffffff",themeColor:s="#0f172a",lang:p="en",iconsBase:u=h,icons:f=v(u)}=e;return{name:n,short_name:r,description:a,start_url:o,scope:i,display:c,orientation:t,background_color:l,theme_color:s,lang:p,icons:f}}function w(e){return JSON.stringify({version:e})+`
2
+ `}function m({swUrl:e="/sw.js"}={}){return`/** Registers the offline service worker and reloads the page whenever a new app version is deployed. */
3
+ if ("serviceWorker" in navigator) {
4
+ navigator.serviceWorker.addEventListener("message", (event) => {
5
+ if (event.data === "version-changed") location.reload();
6
+ });
7
+ document.addEventListener("visibilitychange", () => {
8
+ if (!document.hidden) navigator.serviceWorker.controller?.postMessage("check-version");
9
+ });
10
+ window.addEventListener("load", () => {
11
+ navigator.serviceWorker.register(${JSON.stringify(e)}).catch((error) => {
12
+ console.error("Service worker registration failed", error);
13
+ });
14
+ });
15
+ }
16
+ `}function k(e){let{cacheName:n,cdnVersion:r,iconsBase:a=h,manifestUrl:o="/manifest.webmanifest",appFiles:i=[],extraPrecacheUrls:c=[]}=e,t=r?`https://cdn.jsdelivr.net/npm/@thebase/ui@${r}/dist/`:null,l=["/",o,...d.map(s=>`${a}${s}`),...i,...c,...t?["baseui.min.css","baseui.esm.js","baseui.templates.xml"].map(s=>`${t}${s}`):[]];return`const CACHE_NAME = ${JSON.stringify(n)};
17
+ const BASEUI_CDN = ${JSON.stringify(t)};
18
+
19
+ const PRECACHE_URLS = ${JSON.stringify(l,null,2)};
20
+
21
+ /** Last-seen app version lives in its own cache so wiping the app caches never forgets it. */
22
+ const VERSION_CACHE = ${JSON.stringify(n+"-version")};
23
+ const VERSION_URL = new URL("version.json", self.registration.scope).href;
24
+ let pendingCheck = null;
25
+
26
+ /** Re-downloads every app-shell file fresh, so the next page load runs the new code offline too. */
27
+ async function precache() {
28
+ const cache = await caches.open(CACHE_NAME);
29
+ await Promise.all(PRECACHE_URLS.map((url) => cache.add(new Request(url, { cache: "reload" }))));
30
+ }
31
+
32
+ /** Asks the server for version.json; when it differs from the last one seen, throws away every
33
+ * cached file, caches the new ones and tells all open pages to reload. */
34
+ async function runVersionCheck() {
35
+ try {
36
+ const response = await fetch(VERSION_URL, { cache: "no-store" });
37
+ if (!response.ok) return;
38
+ const latest = (await response.json()).version;
39
+ const store = await caches.open(VERSION_CACHE);
40
+ const known = await store.match(VERSION_URL);
41
+ const previous = known ? await known.text() : null;
42
+ if (previous === latest) return;
43
+ await store.put(VERSION_URL, new Response(latest));
44
+ if (previous === null) return;
45
+ const names = await caches.keys();
46
+ await Promise.all(names.filter((name) => name !== VERSION_CACHE).map((name) => caches.delete(name)));
47
+ await precache();
48
+ const pages = await self.clients.matchAll({ type: "window" });
49
+ pages.forEach((page) => page.postMessage("version-changed"));
50
+ } catch {
51
+ // Offline or server hiccup: keep the current cached app and try again on the next check.
52
+ }
53
+ }
3
54
 
4
- const PRECACHE_URLS = ${JSON.stringify(i,null,2)};
55
+ /** Runs one version check at a time, so a burst of page loads shares a single request. */
56
+ function checkVersion() {
57
+ pendingCheck ??= runVersionCheck().finally(() => {
58
+ pendingCheck = null;
59
+ });
60
+ return pendingCheck;
61
+ }
62
+
63
+ self.addEventListener("message", (event) => {
64
+ if (event.data === "check-version") event.waitUntil(checkVersion());
65
+ });
5
66
 
6
67
  self.addEventListener("install", (event) => {
7
- event.waitUntil(
8
- caches.open(CACHE_NAME).then((cache) => cache.addAll(PRECACHE_URLS)).then(() => self.skipWaiting())
9
- );
68
+ event.waitUntil(precache().then(() => self.skipWaiting()));
10
69
  });
11
70
 
12
71
  self.addEventListener("activate", (event) => {
13
72
  event.waitUntil(
14
73
  caches
15
74
  .keys()
16
- .then((keys) => Promise.all(keys.filter((key) => key !== CACHE_NAME).map((key) => caches.delete(key))))
75
+ .then((keys) => Promise.all(keys.filter((key) => key !== CACHE_NAME && key !== VERSION_CACHE).map((key) => caches.delete(key))))
17
76
  .then(() => self.clients.claim())
77
+ .then(checkVersion)
18
78
  );
19
79
  });
20
80
 
@@ -30,11 +90,13 @@ async function fromCdnCache(request) {
30
90
  self.addEventListener("fetch", (event) => {
31
91
  const { request } = event;
32
92
  if (request.method !== "GET") return;
33
- if (request.url.startsWith(BASEUI_CDN)) {
93
+ if (BASEUI_CDN && request.url.startsWith(BASEUI_CDN)) {
34
94
  event.respondWith(fromCdnCache(request));
35
95
  return;
36
96
  }
37
97
  if (new URL(request.url).origin !== self.location.origin) return;
98
+ if (request.url === VERSION_URL) return;
99
+ if (request.mode === "navigate") event.waitUntil(checkVersion());
38
100
 
39
101
  event.respondWith(
40
102
  caches.open(CACHE_NAME).then(async (cache) => {
@@ -50,4 +112,4 @@ self.addEventListener("fetch", (event) => {
50
112
  })
51
113
  );
52
114
  });
53
- `}export{d as DEFAULT_ICON_FILES,E as buildManifest,C as buildServiceWorker};
115
+ `}export{d as DEFAULT_ICON_FILES,g as buildManifest,k as buildServiceWorker,m as buildServiceWorkerRegister,w as buildVersionJson};
@@ -44,7 +44,9 @@
44
44
  },
45
45
  "themes": [
46
46
  "themes/baseui-light.css",
47
- "themes/baseui-dark.css"
47
+ "themes/baseui-dark.css",
48
+ "themes/baseui-light.min.css",
49
+ "themes/baseui-dark.min.css"
48
50
  ],
49
51
  "components": [
50
52
  {
@@ -477,6 +479,19 @@
477
479
  ],
478
480
  "templateName": "baseui.ClipboardButton"
479
481
  },
482
+ {
483
+ "name": "code-editor",
484
+ "type": "owl",
485
+ "dependencies": [
486
+ "owl"
487
+ ],
488
+ "attributes": [],
489
+ "events": [],
490
+ "owlComponents": [
491
+ "CodeEditor"
492
+ ],
493
+ "templateName": "baseui.CodeEditor"
494
+ },
480
495
  {
481
496
  "name": "collapsible",
482
497
  "type": "owl",
@@ -870,30 +885,6 @@
870
885
  ],
871
886
  "templateName": "baseui.Input"
872
887
  },
873
- {
874
- "name": "input-group",
875
- "type": "static",
876
- "dependencies": [],
877
- "attributes": [
878
- "b-ui",
879
- "b-input-group-addon",
880
- "b-input-group-button",
881
- "b-input-group-text",
882
- "b-att-align",
883
- "b-att-size",
884
- "b-att-variant"
885
- ],
886
- "events": [],
887
- "owlComponents": [
888
- "InputGroup",
889
- "InputGroupAddon",
890
- "InputGroupButton",
891
- "InputGroupText",
892
- "InputGroupInput",
893
- "InputGroupTextarea"
894
- ],
895
- "templateName": "baseui.InputGroup"
896
- },
897
888
  {
898
889
  "name": "input-otp",
899
890
  "type": "owl",
@@ -1697,17 +1688,19 @@
1697
1688
  }
1698
1689
  ],
1699
1690
  "integrity": {
1700
- "baseui.min.css": "sha384-CJXU0BIk1YJ6i2k4WqGlnxRXisLJ1pvbbdAOaIYXbsq3NjdqvCsST304XieDxyIp",
1691
+ "baseui.min.css": "sha384-ZHn0002xs5Vgxz9uxfop7VtPOQAh6E5rIJO01L/a2zmeIBWoZyFt6cnVrx75Dvuv",
1701
1692
  "bootstrap.bundle.min.js": "sha384-RMbllTJcplkCRnELNTOc5Kz/3AvFDE/rNlJqWqfgmRWruobClBdfwvl10akQZkR1",
1702
- "baseui.min.js": "sha384-RRvp6vUHm/o+shXVAySNrLIPTaWQis8FmnhSPziowptMMfxaPmfWvrwCqKqNpYTo",
1703
- "baseui.esm.js": "sha384-lqsK9lnh8XSA2lx94aLjn0Ndngg3B6lRVp734RbJmO51IUA0xufqGYyE5+nV9kKu",
1704
- "baseui.icons.esm.js": "sha384-hj39VMhzcFvmYnjob2hlioMOAqwAXCURGreF6s9RitXFp/iYi7rUdqtfCI+ICQeS",
1705
- "baseui.templates.xml": "sha384-7ALCzje9vh+KVAMbUXRuj10oa2Fnreo1X8wv2+MFVsMo1wXYNL59Yh/HCk35Vn8d",
1706
- "baseui.block-viewer.esm.js": "sha384-y7RT1EQqZt+wRpYQOjJW1vV/flr7rMB62ri6NmYbf8Yg+YQEIhFBeywjB90YIaML",
1693
+ "baseui.min.js": "sha384-ngv95qClP1dpgmpqtod8rhEOsTqIyA+TVoM4r8SwTWAmTY9ywjd0/Dg3Tof5Tctc",
1694
+ "baseui.esm.js": "sha384-iotSpACgMEmc6RjnCVirA3EQ9OSVj4EiAFNTRDIsE9bq57WtQzafHLZYU61QD8Zv",
1695
+ "baseui.icons.esm.js": "sha384-ZfEsbs5m2fWdNSu4Ql+ul4mOxhfl1HviBlbxZGZ/4ud905I8Csa6/ekJjNSVkjQ0",
1696
+ "baseui.templates.xml": "sha384-+f/GUQVnonSoB2Q38NEa6hialYS8zT1NAAeGBtV6Kvtio+W4hOlpzihhvaCwKipc",
1697
+ "baseui.block-viewer.esm.js": "sha384-vOMuFxKFmcXlJnc7tF4g9+ZcZJs3E8oLe2pgyOp5ZWqJ9zsmW7S8gcS5kFIWRnY4",
1707
1698
  "baseui.analytics.esm.js": "sha384-M6TVmchmceTvpSzgI+DNA6zAn9xmz9a+YEexCLslSo/Ngxyp2kmzs9fm+PxWy+Da",
1708
1699
  "baseui.analytics.min.js": "sha384-B0hBkVDbT7gmDmUMazlN4Nc1KnYGSpL+IcW2hd8840knx73HGImPgGs84MvS3hKE",
1709
1700
  "icons/lucide.json": "sha384-mc5mzpmq9eOgZVa2IcjrL33Ty4nMXE8aoZMfy+lgkC/jMQ4aYnk2S58mFsSGFnW1",
1710
- "themes/baseui-light.css": "sha384-/TosvycgVJ5aZ7EOWd4cr8Zen4nayAC/iA9BgGdXKH0LuHSnZk4guDaWM5WPC7yy",
1711
- "themes/baseui-dark.css": "sha384-zF9Rhfjpv90sxuJ2WK7GBPCltN6mkebzK1w9EzQGY9DYHiX3eIX/fcE7fXzfIZVF"
1701
+ "themes/baseui-light.css": "sha384-XhA89k6XLY7cqj+vOmbLXJJb2lqPgmtbcG7l405Npi9jrGusMb0aRzlzudm4xQjd",
1702
+ "themes/baseui-dark.css": "sha384-NuFHViGPtr0BsRavJuNrDwEoHCjAAWeApoFkPqcmNNG5iepRq3axVMx5TGDFoZ+M",
1703
+ "themes/baseui-light.min.css": "sha384-GpQ0m8Gdag3mlVieaGQwxMvkhVjd06oZaVPb9ibl8BPDTv+WtyMw5FC45Cwatr+g",
1704
+ "themes/baseui-dark.min.css": "sha384-sVNXeOvnAz20W2H9c8C/U7Cuj9fT7uO9carZ4uxQ6WF/3/gXe8ihqip1mW7yRfnp"
1712
1705
  }
1713
1706
  }