@almadar/ui 5.126.0 → 5.128.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.
@@ -18511,6 +18511,32 @@ var init_ButtonGroup = __esm({
18511
18511
  ButtonGroup.displayName = "ButtonGroup";
18512
18512
  }
18513
18513
  });
18514
+
18515
+ // lib/getNestedValue.ts
18516
+ function getNestedValue(obj, path) {
18517
+ if (obj === null || obj === void 0 || !path) {
18518
+ return void 0;
18519
+ }
18520
+ if (!path.includes(".")) {
18521
+ return obj[path];
18522
+ }
18523
+ const parts = path.split(".");
18524
+ let value = obj;
18525
+ for (const part of parts) {
18526
+ if (value === null || value === void 0) {
18527
+ return void 0;
18528
+ }
18529
+ if (typeof value !== "object" || Array.isArray(value)) {
18530
+ return void 0;
18531
+ }
18532
+ value = value[part];
18533
+ }
18534
+ return value;
18535
+ }
18536
+ var init_getNestedValue = __esm({
18537
+ "lib/getNestedValue.ts"() {
18538
+ }
18539
+ });
18514
18540
  function dayWindowForViewport(width) {
18515
18541
  if (width <= 640) return 1;
18516
18542
  if (width <= 1024) return 3;
@@ -18557,11 +18583,15 @@ function getWeekDays(start) {
18557
18583
  }
18558
18584
  return days;
18559
18585
  }
18560
- function generateDefaultTimeSlots(events2) {
18586
+ function eventStartDate(event, startField) {
18587
+ const raw = getNestedValue(event, startField);
18588
+ return new Date(raw ?? "");
18589
+ }
18590
+ function generateDefaultTimeSlots(events2, startField) {
18561
18591
  let first = DEFAULT_FIRST_HOUR;
18562
18592
  let last = DEFAULT_LAST_HOUR;
18563
18593
  for (const ev of events2) {
18564
- const start = new Date(ev.startTime);
18594
+ const start = eventStartDate(ev, startField);
18565
18595
  if (Number.isNaN(start.getTime())) continue;
18566
18596
  const hour = start.getHours();
18567
18597
  if (hour < first) first = hour;
@@ -18573,8 +18603,8 @@ function generateDefaultTimeSlots(events2) {
18573
18603
  }
18574
18604
  return slots;
18575
18605
  }
18576
- function eventInSlot(event, day, slotTime) {
18577
- const eventStart = new Date(event.startTime);
18606
+ function eventInSlot(event, day, slotTime, startField) {
18607
+ const eventStart = eventStartDate(event, startField);
18578
18608
  if (Number.isNaN(eventStart.getTime())) return false;
18579
18609
  const [slotHour] = slotTime.split(":").map(Number);
18580
18610
  return eventStart.toDateString() === day.toDateString() && eventStart.getHours() === slotHour;
@@ -18591,7 +18621,12 @@ function CalendarGrid({
18591
18621
  longPressPayload,
18592
18622
  swipeLeftEvent,
18593
18623
  swipeRightEvent,
18594
- dayWindow = "auto"
18624
+ dayWindow = "auto",
18625
+ titleField = "title",
18626
+ startField = "startTime",
18627
+ colorField = "color",
18628
+ children,
18629
+ renderItem
18595
18630
  }) {
18596
18631
  const evs = Array.isArray(events2) ? events2 : events2 ? [events2] : [];
18597
18632
  const eventBus = useEventBus();
@@ -18606,8 +18641,8 @@ function CalendarGrid({
18606
18641
  [resolvedWeekStart]
18607
18642
  );
18608
18643
  const resolvedTimeSlots = React82.useMemo(
18609
- () => timeSlots ?? generateDefaultTimeSlots(evs),
18610
- [timeSlots, evs]
18644
+ () => timeSlots ?? generateDefaultTimeSlots(evs, startField),
18645
+ [timeSlots, evs, startField]
18611
18646
  );
18612
18647
  const visibleCount = useDayWindow(dayWindow);
18613
18648
  const [dayOffset, setDayOffset] = React82.useState(0);
@@ -18644,9 +18679,9 @@ function CalendarGrid({
18644
18679
  );
18645
18680
  const eventsForDayCount = React82.useCallback(
18646
18681
  (day) => evs.filter(
18647
- (ev) => new Date(ev.startTime).toDateString() === day.toDateString()
18682
+ (ev) => eventStartDate(ev, startField).toDateString() === day.toDateString()
18648
18683
  ).length,
18649
- [events2]
18684
+ [events2, startField]
18650
18685
  );
18651
18686
  const swipeCallbacks = React82.useMemo(() => ({
18652
18687
  onSwipeLeft: swipeLeftEvent ? () => eventBus.emit(`UI:${swipeLeftEvent}`, {}) : void 0,
@@ -18665,8 +18700,11 @@ function CalendarGrid({
18665
18700
  eventBus.emit(`UI:${longPressEvent}`, { date: day.toISOString(), time, ...longPressPayload });
18666
18701
  }, 500);
18667
18702
  }, [longPressEvent, longPressPayload, eventBus]);
18703
+ const renderChip = children ?? renderItem;
18668
18704
  const renderEvent = (event) => {
18669
- const color = event.color;
18705
+ const color = getNestedValue(event, colorField);
18706
+ const label = String(getNestedValue(event, titleField) ?? "");
18707
+ const eventIndex = evs.indexOf(event);
18670
18708
  return /* @__PURE__ */ jsxRuntime.jsx(
18671
18709
  Box,
18672
18710
  {
@@ -18678,7 +18716,7 @@ function CalendarGrid({
18678
18716
  color ? color : "bg-primary/10 border-primary/30 text-primary"
18679
18717
  ),
18680
18718
  onClick: (e) => handleEventClick(event, e),
18681
- children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "small", className: "truncate font-medium", children: event.title })
18719
+ children: renderChip ? renderChip(event, eventIndex) : /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "small", className: "truncate font-medium", children: label })
18682
18720
  },
18683
18721
  event.id
18684
18722
  );
@@ -18762,7 +18800,7 @@ function CalendarGrid({
18762
18800
  ) }),
18763
18801
  visibleDays.map((day) => {
18764
18802
  const slotEvents = evs.filter(
18765
- (ev) => eventInSlot(ev, day, time)
18803
+ (ev) => eventInSlot(ev, day, time, startField)
18766
18804
  );
18767
18805
  const isToday = day.toDateString() === (/* @__PURE__ */ new Date()).toDateString();
18768
18806
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -18799,6 +18837,7 @@ var init_CalendarGrid = __esm({
18799
18837
  "components/core/molecules/CalendarGrid.tsx"() {
18800
18838
  "use client";
18801
18839
  init_cn();
18840
+ init_getNestedValue();
18802
18841
  init_Box();
18803
18842
  init_Button();
18804
18843
  init_Stack();
@@ -18815,32 +18854,6 @@ var init_CalendarGrid = __esm({
18815
18854
  CalendarGrid.displayName = "CalendarGrid";
18816
18855
  }
18817
18856
  });
18818
-
18819
- // lib/getNestedValue.ts
18820
- function getNestedValue(obj, path) {
18821
- if (obj === null || obj === void 0 || !path) {
18822
- return void 0;
18823
- }
18824
- if (!path.includes(".")) {
18825
- return obj[path];
18826
- }
18827
- const parts = path.split(".");
18828
- let value = obj;
18829
- for (const part of parts) {
18830
- if (value === null || value === void 0) {
18831
- return void 0;
18832
- }
18833
- if (typeof value !== "object" || Array.isArray(value)) {
18834
- return void 0;
18835
- }
18836
- value = value[part];
18837
- }
18838
- return value;
18839
- }
18840
- var init_getNestedValue = __esm({
18841
- "lib/getNestedValue.ts"() {
18842
- }
18843
- });
18844
18857
  var Pagination;
18845
18858
  var init_Pagination = __esm({
18846
18859
  "components/core/molecules/Pagination.tsx"() {
@@ -21609,7 +21622,7 @@ var init_DashboardLayout = __esm({
21609
21622
  ]
21610
21623
  }
21611
21624
  ),
21612
- user && /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "relative", children: [
21625
+ user?.name && /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "relative", children: [
21613
21626
  /* @__PURE__ */ jsxRuntime.jsxs(
21614
21627
  Button,
21615
21628
  {
@@ -45410,7 +45423,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
45410
45423
  crossTraitLog.debug("listen:fired", { busKey, targetTrait: binding.trait.name, triggers: listen.triggers });
45411
45424
  enqueueAndDrain(
45412
45425
  listen.triggers,
45413
- core.applyListenPayloadMapping(listen.payloadMapping, event.payload),
45426
+ core.applyListenPayloadMapping(listen.payloadMapping, event.payload, evaluator.evaluateListenPayloadExpr),
45414
45427
  binding.trait.name
45415
45428
  );
45416
45429
  });
@@ -11,7 +11,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
11
11
  import { createPortal } from 'react-dom';
12
12
  import { useTranslate } from '@almadar/ui/hooks';
13
13
  import { useUISlots, UISlotProvider, useTheme } from '@almadar/ui/context';
14
- import { evaluateGuard, evaluate, createMinimalContext, executeEffects } from '@almadar/evaluator';
14
+ import { evaluateGuard, evaluateListenPayloadExpr, evaluate, createMinimalContext, executeEffects } from '@almadar/evaluator';
15
15
  import { wrapCallbackForEvent, prepareSchemaForPreview, perfStore, pushPerfEntry, collectTraitRefsFromResolvedTrait, buildOrbitalsByTrait, collectEmbeddedTraits } from '@almadar/runtime/ui';
16
16
  export { PERF_NAMESPACE, adjustSchemaForMockData, buildMockData, clearPerf, perfEnd, perfStart, perfTime, prepareSchemaForPreview, wrapCallbackForEvent } from '@almadar/runtime/ui';
17
17
  import { Link, Outlet, useLocation } from 'react-router-dom';
@@ -18437,6 +18437,32 @@ var init_ButtonGroup = __esm({
18437
18437
  ButtonGroup.displayName = "ButtonGroup";
18438
18438
  }
18439
18439
  });
18440
+
18441
+ // lib/getNestedValue.ts
18442
+ function getNestedValue(obj, path) {
18443
+ if (obj === null || obj === void 0 || !path) {
18444
+ return void 0;
18445
+ }
18446
+ if (!path.includes(".")) {
18447
+ return obj[path];
18448
+ }
18449
+ const parts = path.split(".");
18450
+ let value = obj;
18451
+ for (const part of parts) {
18452
+ if (value === null || value === void 0) {
18453
+ return void 0;
18454
+ }
18455
+ if (typeof value !== "object" || Array.isArray(value)) {
18456
+ return void 0;
18457
+ }
18458
+ value = value[part];
18459
+ }
18460
+ return value;
18461
+ }
18462
+ var init_getNestedValue = __esm({
18463
+ "lib/getNestedValue.ts"() {
18464
+ }
18465
+ });
18440
18466
  function dayWindowForViewport(width) {
18441
18467
  if (width <= 640) return 1;
18442
18468
  if (width <= 1024) return 3;
@@ -18483,11 +18509,15 @@ function getWeekDays(start) {
18483
18509
  }
18484
18510
  return days;
18485
18511
  }
18486
- function generateDefaultTimeSlots(events2) {
18512
+ function eventStartDate(event, startField) {
18513
+ const raw = getNestedValue(event, startField);
18514
+ return new Date(raw ?? "");
18515
+ }
18516
+ function generateDefaultTimeSlots(events2, startField) {
18487
18517
  let first = DEFAULT_FIRST_HOUR;
18488
18518
  let last = DEFAULT_LAST_HOUR;
18489
18519
  for (const ev of events2) {
18490
- const start = new Date(ev.startTime);
18520
+ const start = eventStartDate(ev, startField);
18491
18521
  if (Number.isNaN(start.getTime())) continue;
18492
18522
  const hour = start.getHours();
18493
18523
  if (hour < first) first = hour;
@@ -18499,8 +18529,8 @@ function generateDefaultTimeSlots(events2) {
18499
18529
  }
18500
18530
  return slots;
18501
18531
  }
18502
- function eventInSlot(event, day, slotTime) {
18503
- const eventStart = new Date(event.startTime);
18532
+ function eventInSlot(event, day, slotTime, startField) {
18533
+ const eventStart = eventStartDate(event, startField);
18504
18534
  if (Number.isNaN(eventStart.getTime())) return false;
18505
18535
  const [slotHour] = slotTime.split(":").map(Number);
18506
18536
  return eventStart.toDateString() === day.toDateString() && eventStart.getHours() === slotHour;
@@ -18517,7 +18547,12 @@ function CalendarGrid({
18517
18547
  longPressPayload,
18518
18548
  swipeLeftEvent,
18519
18549
  swipeRightEvent,
18520
- dayWindow = "auto"
18550
+ dayWindow = "auto",
18551
+ titleField = "title",
18552
+ startField = "startTime",
18553
+ colorField = "color",
18554
+ children,
18555
+ renderItem
18521
18556
  }) {
18522
18557
  const evs = Array.isArray(events2) ? events2 : events2 ? [events2] : [];
18523
18558
  const eventBus = useEventBus();
@@ -18532,8 +18567,8 @@ function CalendarGrid({
18532
18567
  [resolvedWeekStart]
18533
18568
  );
18534
18569
  const resolvedTimeSlots = useMemo(
18535
- () => timeSlots ?? generateDefaultTimeSlots(evs),
18536
- [timeSlots, evs]
18570
+ () => timeSlots ?? generateDefaultTimeSlots(evs, startField),
18571
+ [timeSlots, evs, startField]
18537
18572
  );
18538
18573
  const visibleCount = useDayWindow(dayWindow);
18539
18574
  const [dayOffset, setDayOffset] = useState(0);
@@ -18570,9 +18605,9 @@ function CalendarGrid({
18570
18605
  );
18571
18606
  const eventsForDayCount = useCallback(
18572
18607
  (day) => evs.filter(
18573
- (ev) => new Date(ev.startTime).toDateString() === day.toDateString()
18608
+ (ev) => eventStartDate(ev, startField).toDateString() === day.toDateString()
18574
18609
  ).length,
18575
- [events2]
18610
+ [events2, startField]
18576
18611
  );
18577
18612
  const swipeCallbacks = useMemo(() => ({
18578
18613
  onSwipeLeft: swipeLeftEvent ? () => eventBus.emit(`UI:${swipeLeftEvent}`, {}) : void 0,
@@ -18591,8 +18626,11 @@ function CalendarGrid({
18591
18626
  eventBus.emit(`UI:${longPressEvent}`, { date: day.toISOString(), time, ...longPressPayload });
18592
18627
  }, 500);
18593
18628
  }, [longPressEvent, longPressPayload, eventBus]);
18629
+ const renderChip = children ?? renderItem;
18594
18630
  const renderEvent = (event) => {
18595
- const color = event.color;
18631
+ const color = getNestedValue(event, colorField);
18632
+ const label = String(getNestedValue(event, titleField) ?? "");
18633
+ const eventIndex = evs.indexOf(event);
18596
18634
  return /* @__PURE__ */ jsx(
18597
18635
  Box,
18598
18636
  {
@@ -18604,7 +18642,7 @@ function CalendarGrid({
18604
18642
  color ? color : "bg-primary/10 border-primary/30 text-primary"
18605
18643
  ),
18606
18644
  onClick: (e) => handleEventClick(event, e),
18607
- children: /* @__PURE__ */ jsx(Typography, { variant: "small", className: "truncate font-medium", children: event.title })
18645
+ children: renderChip ? renderChip(event, eventIndex) : /* @__PURE__ */ jsx(Typography, { variant: "small", className: "truncate font-medium", children: label })
18608
18646
  },
18609
18647
  event.id
18610
18648
  );
@@ -18688,7 +18726,7 @@ function CalendarGrid({
18688
18726
  ) }),
18689
18727
  visibleDays.map((day) => {
18690
18728
  const slotEvents = evs.filter(
18691
- (ev) => eventInSlot(ev, day, time)
18729
+ (ev) => eventInSlot(ev, day, time, startField)
18692
18730
  );
18693
18731
  const isToday = day.toDateString() === (/* @__PURE__ */ new Date()).toDateString();
18694
18732
  return /* @__PURE__ */ jsx(
@@ -18725,6 +18763,7 @@ var init_CalendarGrid = __esm({
18725
18763
  "components/core/molecules/CalendarGrid.tsx"() {
18726
18764
  "use client";
18727
18765
  init_cn();
18766
+ init_getNestedValue();
18728
18767
  init_Box();
18729
18768
  init_Button();
18730
18769
  init_Stack();
@@ -18741,32 +18780,6 @@ var init_CalendarGrid = __esm({
18741
18780
  CalendarGrid.displayName = "CalendarGrid";
18742
18781
  }
18743
18782
  });
18744
-
18745
- // lib/getNestedValue.ts
18746
- function getNestedValue(obj, path) {
18747
- if (obj === null || obj === void 0 || !path) {
18748
- return void 0;
18749
- }
18750
- if (!path.includes(".")) {
18751
- return obj[path];
18752
- }
18753
- const parts = path.split(".");
18754
- let value = obj;
18755
- for (const part of parts) {
18756
- if (value === null || value === void 0) {
18757
- return void 0;
18758
- }
18759
- if (typeof value !== "object" || Array.isArray(value)) {
18760
- return void 0;
18761
- }
18762
- value = value[part];
18763
- }
18764
- return value;
18765
- }
18766
- var init_getNestedValue = __esm({
18767
- "lib/getNestedValue.ts"() {
18768
- }
18769
- });
18770
18783
  var Pagination;
18771
18784
  var init_Pagination = __esm({
18772
18785
  "components/core/molecules/Pagination.tsx"() {
@@ -21535,7 +21548,7 @@ var init_DashboardLayout = __esm({
21535
21548
  ]
21536
21549
  }
21537
21550
  ),
21538
- user && /* @__PURE__ */ jsxs(Box, { className: "relative", children: [
21551
+ user?.name && /* @__PURE__ */ jsxs(Box, { className: "relative", children: [
21539
21552
  /* @__PURE__ */ jsxs(
21540
21553
  Button,
21541
21554
  {
@@ -45336,7 +45349,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
45336
45349
  crossTraitLog.debug("listen:fired", { busKey, targetTrait: binding.trait.name, triggers: listen.triggers });
45337
45350
  enqueueAndDrain(
45338
45351
  listen.triggers,
45339
- applyListenPayloadMapping(listen.payloadMapping, event.payload),
45352
+ applyListenPayloadMapping(listen.payloadMapping, event.payload, evaluateListenPayloadExpr),
45340
45353
  binding.trait.name
45341
45354
  );
45342
45355
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "5.126.0",
3
+ "version": "5.128.0",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -117,11 +117,11 @@
117
117
  "access": "public"
118
118
  },
119
119
  "dependencies": {
120
- "@almadar/core": "^10.34.0",
121
- "@almadar/evaluator": "^2.35.0",
120
+ "@almadar/core": "^10.36.0",
121
+ "@almadar/evaluator": "^2.37.0",
122
122
  "@almadar/logger": "^1.10.0",
123
- "@almadar/runtime": "^6.37.0",
124
- "@almadar/std": "^16.144.0",
123
+ "@almadar/runtime": "^6.39.0",
124
+ "@almadar/std": "^16.146.0",
125
125
  "@almadar/syntax": "^1.12.0",
126
126
  "@dnd-kit/core": "^6.3.1",
127
127
  "@dnd-kit/sortable": "^10.0.0",