sibujs 1.0.0-beta.3 → 1.0.0-beta.4

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 (2) hide show
  1. package/README.md +69 -61
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -710,14 +710,14 @@ Trans("greeting", { name: "Mark" });
710
710
 
711
711
  ---
712
712
 
713
- ## Extras (`sibu/extras`)
713
+ ## Patterns (`sibujs/patterns`)
714
714
 
715
- Advanced features, imported separately to keep the core lean.
715
+ Advanced state management patterns, imported separately to keep the core lean.
716
716
 
717
717
  ### State Machines
718
718
 
719
719
  ```ts
720
- import { machine } from "sibujs/extras";
720
+ import { machine } from "sibujs/patterns";
721
721
 
722
722
  const { state, send, matches, can } = machine({
723
723
  initial: "idle",
@@ -749,7 +749,7 @@ can("RETRY"); // false (not in error state)
749
749
  ### Form Validation
750
750
 
751
751
  ```ts
752
- import { form, required, email, minLength } from "sibujs/extras";
752
+ import { form, required, email, minLength } from "sibujs/ui";
753
753
 
754
754
  const form = form({
755
755
  fields: {
@@ -772,7 +772,7 @@ form.handleSubmit();
772
772
  ### Global Store
773
773
 
774
774
  ```ts
775
- import { globalStore } from "sibujs/extras";
775
+ import { globalStore } from "sibujs/patterns";
776
776
 
777
777
  const store = globalStore({
778
778
  state: { count: 0, user: null },
@@ -791,7 +791,7 @@ count(); // 1
791
791
  ### Persistent State
792
792
 
793
793
  ```ts
794
- import { persisted } from "sibujs/extras";
794
+ import { persisted } from "sibujs/patterns";
795
795
 
796
796
  // Auto-saves to localStorage, restores on page load
797
797
  const [theme, setTheme] = persisted("app-theme", "light");
@@ -801,7 +801,7 @@ setTheme("dark"); // saved to localStorage automatically
801
801
  ### Time Travel
802
802
 
803
803
  ```ts
804
- import { timeline } from "sibujs/extras";
804
+ import { timeline } from "sibujs/patterns";
805
805
 
806
806
  const { value, set, undo, redo, canUndo, canRedo } = timeline("initial");
807
807
  set("second");
@@ -813,7 +813,7 @@ redo(); // value() === "third"
813
813
  ### Optimistic Updates
814
814
 
815
815
  ```ts
816
- import { optimistic } from "sibujs/extras";
816
+ import { optimistic } from "sibujs/patterns";
817
817
 
818
818
  const [likes, addLike] = optimistic(0);
819
819
  addLike(likes() + 1, async () => {
@@ -821,10 +821,10 @@ addLike(likes() + 1, async () => {
821
821
  });
822
822
  ```
823
823
 
824
- ### Data Fetching
824
+ ## Data Fetching (`sibujs/data`)
825
825
 
826
826
  ```ts
827
- import { query, mutation, infiniteQuery, resource } from "sibujs/extras";
827
+ import { query, mutation, infiniteQuery, resource } from "sibujs/data";
828
828
 
829
829
  // Query with caching, stale-while-revalidate, and auto-refetch
830
830
  const { data, loading, error, refetch } = query("users", async ({ signal }) => {
@@ -836,7 +836,7 @@ const { data, loading, error, refetch } = query("users", async ({ signal }) => {
836
836
  });
837
837
 
838
838
  // Cache management
839
- import { invalidateQueries, setQueryData } from "sibujs/extras";
839
+ import { invalidateQueries, setQueryData } from "sibujs/data";
840
840
  invalidateQueries("users");
841
841
  setQueryData("users", (prev) => [...prev, newUser]);
842
842
 
@@ -872,7 +872,7 @@ resource.data(); // reactive
872
872
  ### Debounce, Throttle, and Previous
873
873
 
874
874
  ```ts
875
- import { debounce, throttle, previous } from "sibujs/extras";
875
+ import { debounce, throttle, previous } from "sibujs/data";
876
876
 
877
877
  // Debounced reactive value (updates after 300ms of inactivity)
878
878
  const debouncedSearch = debounce(() => searchInput(), 300);
@@ -885,7 +885,7 @@ const prevCount = previous(count);
885
885
  // prevCount() is the value before the last change
886
886
  ```
887
887
 
888
- ### Browser APIs
888
+ ## Browser APIs (`sibujs/browser`)
889
889
 
890
890
  All browser APIs return reactive getters and a `dispose` function for cleanup.
891
891
 
@@ -904,7 +904,7 @@ import {
904
904
  battery,
905
905
  idle,
906
906
  permissions,
907
- } from "sibujs/extras";
907
+ } from "sibujs/browser";
908
908
 
909
909
  // Media queries
910
910
  const { matches: isMobile } = media("(max-width: 768px)");
@@ -952,7 +952,8 @@ const { state: cameraPermission } = permissions("camera");
952
952
  ### Real-Time Communication
953
953
 
954
954
  ```ts
955
- import { socket, stream, eventBus } from "sibujs/extras";
955
+ import { socket, stream } from "sibujs/data";
956
+ import { eventBus } from "sibujs/ui";
956
957
 
957
958
  // WebSocket with auto-reconnect and heartbeat
958
959
  const { data, status, send, close } = socket("wss://api.example.com/ws", {
@@ -976,11 +977,13 @@ bus.emit("notify", "Hello!");
976
977
  off(); // unsubscribe
977
978
  ```
978
979
 
980
+ ## UI Utilities (`sibujs/ui`)
981
+
979
982
  ### Virtual List
980
983
 
981
984
  ```ts
982
985
  import { html, signal } from "sibujs";
983
- import { VirtualList } from "sibujs/extras";
986
+ import { VirtualList } from "sibujs/ui";
984
987
 
985
988
  VirtualList({
986
989
  items: () => largeArray(),
@@ -991,10 +994,10 @@ VirtualList({
991
994
  });
992
995
  ```
993
996
 
994
- ### Transitions and Animations
997
+ ## Transitions and Animations (`sibujs/motion`)
995
998
 
996
999
  ```ts
997
- import { transition, TransitionGroup, viewTransition } from "sibujs/extras";
1000
+ import { transition, TransitionGroup, viewTransition } from "sibujs/motion";
998
1001
 
999
1002
  // Single element transition
1000
1003
  const { enter, leave } = transition(element, {
@@ -1023,7 +1026,7 @@ await start();
1023
1026
  ### Dialogs and Toasts
1024
1027
 
1025
1028
  ```ts
1026
- import { dialog, toast } from "sibujs/extras";
1029
+ import { dialog, toast } from "sibujs/ui";
1027
1030
 
1028
1031
  // Dialog state
1029
1032
  const dialog = dialog();
@@ -1043,7 +1046,7 @@ dismiss(id);
1043
1046
  ### Pagination and Infinite Scroll
1044
1047
 
1045
1048
  ```ts
1046
- import { pagination, infiniteScroll } from "sibujs/extras";
1049
+ import { pagination, infiniteScroll } from "sibujs/ui";
1047
1050
 
1048
1051
  // Pagination
1049
1052
  const { page, totalPages, next, prev, goTo, startIndex, endIndex } = pagination({
@@ -1062,7 +1065,7 @@ const { sentinelRef, loading } = infiniteScroll({
1062
1065
  ### Intersection Observer and Lazy Loading
1063
1066
 
1064
1067
  ```ts
1065
- import { intersection, lazyLoad } from "sibujs/extras";
1068
+ import { intersection, lazyLoad } from "sibujs/ui";
1066
1069
 
1067
1070
  // Track element visibility
1068
1071
  const { isIntersecting, intersectionRatio, observe } = intersection({
@@ -1079,7 +1082,7 @@ const cleanup = lazyLoad(placeholder, () => {
1079
1082
  ### Input Masks
1080
1083
 
1081
1084
  ```ts
1082
- import { inputMask, phoneMask, dateMask, creditCardMask } from "sibujs/extras";
1085
+ import { inputMask, phoneMask, dateMask, creditCardMask } from "sibujs/ui";
1083
1086
 
1084
1087
  const phone = inputMask(phoneMask()); // (999) 999-9999
1085
1088
  const date = inputMask(dateMask()); // 99/99/9999
@@ -1094,7 +1097,7 @@ phone.rawValue(); // unformatted: "5551234567"
1094
1097
 
1095
1098
  ```ts
1096
1099
  import { html } from "sibujs";
1097
- import { aria, FocusTrap, hotkey, announce } from "sibujs/extras";
1100
+ import { aria, FocusTrap, hotkey, announce } from "sibujs/ui";
1098
1101
 
1099
1102
  // Reactive ARIA attributes
1100
1103
  aria(element, {
@@ -1116,7 +1119,7 @@ announce("Item deleted", "polite");
1116
1119
 
1117
1120
  ```ts
1118
1121
  import { html } from "sibujs";
1119
- import { scopedStyle, withScopedStyle } from "sibujs/extras";
1122
+ import { scopedStyle, withScopedStyle } from "sibujs/ui";
1120
1123
 
1121
1124
  // Manual scoping
1122
1125
  const { scope, attr } = scopedStyle(`
@@ -1133,7 +1136,7 @@ const StyledCard = withScopedStyle(`
1133
1136
  ### Higher-Order Components
1134
1137
 
1135
1138
  ```ts
1136
- import { withDefaults, withWrapper, compose } from "sibujs/extras";
1139
+ import { withDefaults, withWrapper, compose } from "sibujs/patterns";
1137
1140
 
1138
1141
  const Button = withDefaults(BaseButton, { variant: "primary", size: "md" });
1139
1142
 
@@ -1149,7 +1152,7 @@ const EnhancedButton = compose(withLogging, withTheme, withTooltip)(BaseButton);
1149
1152
 
1150
1153
  ```ts
1151
1154
  import { html, signal } from "sibujs";
1152
- import { composable } from "sibujs/extras";
1155
+ import { composable } from "sibujs/ui";
1153
1156
 
1154
1157
  const counterSetup = composable(() => {
1155
1158
  const [count, setCount] = signal(0);
@@ -1165,14 +1168,14 @@ function MyComponent() {
1165
1168
 
1166
1169
  ---
1167
1170
 
1168
- ## Widgets (`sibu/extras`)
1171
+ ## Widgets (`sibujs/widgets`)
1169
1172
 
1170
1173
  Headless UI primitives -- state logic and keyboard navigation without opinions on markup. Build your own UI on top.
1171
1174
 
1172
1175
  ### Tabs
1173
1176
 
1174
1177
  ```ts
1175
- import { tabs } from "sibujs/extras";
1178
+ import { tabs } from "sibujs/widgets";
1176
1179
 
1177
1180
  const tabs = tabs({
1178
1181
  tabs: [
@@ -1192,7 +1195,7 @@ tabs.prevTab();
1192
1195
  ### Select
1193
1196
 
1194
1197
  ```ts
1195
- import { select } from "sibujs/extras";
1198
+ import { select } from "sibujs/widgets";
1196
1199
 
1197
1200
  const select = select({
1198
1201
  items: ["Apple", "Banana", "Cherry"],
@@ -1209,7 +1212,7 @@ select.isSelected("Apple"); // true
1209
1212
  ### Accordion
1210
1213
 
1211
1214
  ```ts
1212
- import { accordion } from "sibujs/extras";
1215
+ import { accordion } from "sibujs/widgets";
1213
1216
 
1214
1217
  const accordion = accordion({
1215
1218
  items: [
@@ -1228,7 +1231,7 @@ accordion.collapseAll();
1228
1231
  ### Combobox
1229
1232
 
1230
1233
  ```ts
1231
- import { combobox } from "sibujs/extras";
1234
+ import { combobox } from "sibujs/widgets";
1232
1235
 
1233
1236
  const combo = combobox({
1234
1237
  items: ["New York", "Los Angeles", "Chicago", "Houston"],
@@ -1244,7 +1247,7 @@ combo.selectedItem(); // "Chicago"
1244
1247
  ### Popover and Tooltip
1245
1248
 
1246
1249
  ```ts
1247
- import { popover, tooltip } from "sibujs/extras";
1250
+ import { popover, tooltip } from "sibujs/widgets";
1248
1251
 
1249
1252
  const popover = popover();
1250
1253
  popover.toggle();
@@ -1259,7 +1262,7 @@ tooltip.isVisible(); // true (after 200ms delay)
1259
1262
  ### File Upload
1260
1263
 
1261
1264
  ```ts
1262
- import { fileUpload } from "sibujs/extras";
1265
+ import { fileUpload } from "sibujs/widgets";
1263
1266
 
1264
1267
  const upload = fileUpload({
1265
1268
  accept: "image/*",
@@ -1277,7 +1280,7 @@ upload.clear();
1277
1280
  ### Date Picker
1278
1281
 
1279
1282
  ```ts
1280
- import { datePicker } from "sibujs/extras";
1283
+ import { datePicker } from "sibujs/widgets";
1281
1284
 
1282
1285
  const picker = datePicker({
1283
1286
  minDate: new Date(2020, 0, 1),
@@ -1293,7 +1296,7 @@ picker.selectedDate(); // Date
1293
1296
  ### Content Editable
1294
1297
 
1295
1298
  ```ts
1296
- import { contentEditable } from "sibujs/extras";
1299
+ import { contentEditable } from "sibujs/widgets";
1297
1300
 
1298
1301
  const editor = contentEditable();
1299
1302
  editor.setContent("<b>Hello</b> world");
@@ -1305,11 +1308,11 @@ editor.content(); // reactive HTML string
1305
1308
 
1306
1309
  ---
1307
1310
 
1308
- ## Web Components (`sibu/extras`)
1311
+ ## Web Components (`sibujs/ui`)
1309
1312
 
1310
1313
  ```ts
1311
1314
  import { html, signal } from "sibujs";
1312
- import { defineElement } from "sibujs/extras";
1315
+ import { defineElement } from "sibujs/ui";
1313
1316
 
1314
1317
  defineElement("my-counter", (props) => {
1315
1318
  const [count, setCount] = signal(Number(props.initial) || 0);
@@ -1326,7 +1329,7 @@ defineElement("my-counter", (props) => {
1326
1329
 
1327
1330
  ---
1328
1331
 
1329
- ## SSR and Static Generation (`sibu/extras`)
1332
+ ## SSR and Static Generation (`sibujs/ssr`)
1330
1333
 
1331
1334
  ### Server-Side Rendering
1332
1335
 
@@ -1336,7 +1339,7 @@ import {
1336
1339
  renderToStream,
1337
1340
  renderToDocument,
1338
1341
  hydrate,
1339
- } from "sibujs/extras";
1342
+ } from "sibujs/ssr";
1340
1343
 
1341
1344
  // Render component to HTML string
1342
1345
  const markup = renderToString(App());
@@ -1361,7 +1364,7 @@ hydrate(App, document.getElementById("root"));
1361
1364
  ### Islands Architecture
1362
1365
 
1363
1366
  ```ts
1364
- import { island, hydrateIslands, hydrateProgressively } from "sibujs/extras";
1367
+ import { island, hydrateIslands, hydrateProgressively } from "sibujs/ssr";
1365
1368
 
1366
1369
  // Server: mark interactive islands
1367
1370
  const header = island("header", () => InteractiveHeader());
@@ -1380,7 +1383,7 @@ hydrateProgressively(document.body, islands, { threshold: 0.1 });
1380
1383
 
1381
1384
  ```ts
1382
1385
  import { html } from "sibujs";
1383
- import { ssrSuspense, renderToSuspenseStream, suspenseSwapScript } from "sibujs/extras";
1386
+ import { ssrSuspense, renderToSuspenseStream, suspenseSwapScript } from "sibujs/ssr";
1384
1387
 
1385
1388
  const boundary = ssrSuspense({
1386
1389
  fallback: () => html`<div>Loading...</div>`,
@@ -1394,7 +1397,7 @@ const stream = renderToSuspenseStream(shell, [boundary.promise]);
1394
1397
  ### Static Site Generation
1395
1398
 
1396
1399
  ```ts
1397
- import { generateStaticSite } from "sibujs/extras";
1400
+ import { generateStaticSite } from "sibujs/ssr";
1398
1401
 
1399
1402
  const result = await generateStaticSite({
1400
1403
  routes: ["/", "/about", "/blog/1", "/blog/2"],
@@ -1408,7 +1411,7 @@ result.errors; // [{ path: "/blog/2", error: Error }]
1408
1411
 
1409
1412
  ---
1410
1413
 
1411
- ## Concurrent Rendering (`sibu/extras`)
1414
+ ## Concurrent Rendering (`sibujs/performance`)
1412
1415
 
1413
1416
  ```ts
1414
1417
  import {
@@ -1420,7 +1423,7 @@ import {
1420
1423
  yieldToMain,
1421
1424
  processInChunks,
1422
1425
  Priority,
1423
- } from "sibujs/extras";
1426
+ } from "sibujs/performance";
1424
1427
 
1425
1428
  // Non-blocking state updates
1426
1429
  startTransition(() => {
@@ -1450,7 +1453,7 @@ await processInChunks(bigArray, (item) => processItem(item), 50);
1450
1453
 
1451
1454
  ---
1452
1455
 
1453
- ## DevTools (`sibu/extras`)
1456
+ ## DevTools (`sibujs/devtools`)
1454
1457
 
1455
1458
  ### Debugging and Performance
1456
1459
 
@@ -1462,7 +1465,7 @@ import {
1462
1465
  measureRender,
1463
1466
  getPerformanceReport,
1464
1467
  checkLeaks,
1465
- } from "sibujs/extras";
1468
+ } from "sibujs/devtools";
1466
1469
 
1467
1470
  enableDebug();
1468
1471
  debugLog("Counter", "increment", { value: 5 });
@@ -1488,7 +1491,7 @@ checkLeaks(); // { "Counter": 2 } -- 2 unclean instances
1488
1491
  ### DevTools Integration
1489
1492
 
1490
1493
  ```ts
1491
- import { initDevTools, devState, getActiveDevTools } from "sibujs/extras";
1494
+ import { initDevTools, devState, getActiveDevTools } from "sibujs/devtools";
1492
1495
 
1493
1496
  const devtools = initDevTools({ maxEvents: 1000 });
1494
1497
 
@@ -1509,7 +1512,7 @@ devtools.snapshot();
1509
1512
  ### Hot Module Replacement
1510
1513
 
1511
1514
  ```ts
1512
- import { hmrState, registerHMR, createHMRBoundary } from "sibujs/extras";
1515
+ import { hmrState, registerHMR, createHMRBoundary } from "sibujs/devtools";
1513
1516
 
1514
1517
  // State that persists across HMR updates
1515
1518
  const [count, setCount] = hmrState("counter", 0);
@@ -1525,12 +1528,12 @@ boundary.accept(() => console.log("Module updated"));
1525
1528
 
1526
1529
  ---
1527
1530
 
1528
- ## Ecosystem Adapters (`sibu/extras`)
1531
+ ## Ecosystem Adapters (`sibujs/ecosystem`)
1529
1532
 
1530
1533
  ### State Management
1531
1534
 
1532
1535
  ```ts
1533
- import { reduxAdapter, zustandAdapter, mobXAdapter } from "sibujs/extras";
1536
+ import { reduxAdapter, zustandAdapter, mobXAdapter } from "sibujs/ecosystem";
1534
1537
 
1535
1538
  // Use Redux store with Sibu reactivity
1536
1539
  const { useSelector, dispatch } = reduxAdapter(reduxStore);
@@ -1546,7 +1549,7 @@ const { useObservable } = mobXAdapter();
1546
1549
  ### UI Framework Integration
1547
1550
 
1548
1551
  ```ts
1549
- import { componentAdapter, createTheme } from "sibujs/extras";
1552
+ import { componentAdapter, createTheme } from "sibujs/ecosystem";
1550
1553
 
1551
1554
  const adapter = componentAdapter();
1552
1555
  const theme = createTheme({ colors: { primary: "#007bff" } });
@@ -1592,15 +1595,20 @@ unmount();
1592
1595
  Sibu is split into modular entry points. Import only what you use.
1593
1596
 
1594
1597
  ```
1595
- sibujs Core: signal, effect, derived, mount, each, when, html, tags, ErrorBoundary
1596
- sibujs/data Data fetching: query, mutation, infiniteQuery, socket, stream
1597
- sibujs/browser Browser APIs: media, geo, resize, scroll, online, battery, ...
1598
- sibujs/patterns State patterns: machine, persisted, timeline, optimistic, store
1599
- sibujs/motion Transitions: transition, spring, viewTransition, reducedMotion
1600
- sibujs/ui Forms, a11y, dialogs, toasts, virtual lists, composables, web components
1601
- sibujs/plugins Router, i18n
1602
- sibujs/build Vite plugin, Webpack plugin, CDN utilities, template compiler
1603
- sibujs/testing Component testing utilities
1598
+ sibujs Core: signal, effect, derived, mount, each, when, html, tags, ErrorBoundary
1599
+ sibujs/plugins Router, i18n
1600
+ sibujs/data Data fetching: query, mutation, infiniteQuery, socket, stream
1601
+ sibujs/browser Browser APIs: media, geo, resize, scroll, online, battery, ...
1602
+ sibujs/patterns State patterns: machine, persisted, timeline, optimistic, globalStore
1603
+ sibujs/motion Transitions: transition, TransitionGroup, viewTransition, reducedMotion
1604
+ sibujs/ui Forms, a11y, dialogs, toasts, virtual lists, composables, web components
1605
+ sibujs/widgets Headless UI: tabs, select, accordion, combobox, popover, datePicker, ...
1606
+ sibujs/ssr SSR, hydration, islands, static site generation
1607
+ sibujs/performance Concurrent rendering, scheduling, DOM recycling, chunk loading
1608
+ sibujs/devtools Debugging, profiling, HMR, component introspection
1609
+ sibujs/ecosystem Adapters: Redux, MobX, Zustand, Material UI, Chakra, Ant Design
1610
+ sibujs/build Vite plugin, Webpack plugin, template compiler, CDN utilities
1611
+ sibujs/testing Component testing utilities
1604
1612
  ```
1605
1613
 
1606
1614
  The core has zero dependencies beyond TypeScript. Tree shaking works at the module level -- unused subpaths are not included in your bundle.
@@ -1636,4 +1644,4 @@ before submitting a PR.
1636
1644
 
1637
1645
  ## License
1638
1646
 
1639
- MIT -- (c) 2025 [hexplus](https://github.com/hexplus)
1647
+ MIT -- (c) 2025-2026 [hexplus](https://github.com/hexplus)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sibujs",
3
- "version": "1.0.0-beta.3",
3
+ "version": "1.0.0-beta.4",
4
4
  "description": "A lightweight, function-based frontend framework that combines the best of React, Svelte, and Vue — with zero VDOM and maximum simplicity. Designed for developers who want fine-grained reactivity and full control without compilation or magic.",
5
5
  "keywords": [
6
6
  "frontend",