@app-studio/web 0.9.34 → 0.9.36

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/dist/components/Calendar/Calendar/Calendar.style.d.ts +4 -0
  2. package/dist/components/OKR/OKR/OKR.props.d.ts +72 -0
  3. package/dist/components/OKR/OKR/OKR.style.d.ts +19 -0
  4. package/dist/components/OKR/OKR/OKR.view.d.ts +4 -0
  5. package/dist/components/OKR/OKR.d.ts +4 -0
  6. package/dist/components/index.d.ts +4 -3
  7. package/dist/pages/okr.page.d.ts +3 -0
  8. package/dist/web.cjs.development.js +595 -760
  9. package/dist/web.cjs.development.js.map +1 -1
  10. package/dist/web.cjs.production.min.js +1 -1
  11. package/dist/web.cjs.production.min.js.map +1 -1
  12. package/dist/web.esm.js +595 -760
  13. package/dist/web.esm.js.map +1 -1
  14. package/dist/web.umd.development.js +598 -762
  15. package/dist/web.umd.development.js.map +1 -1
  16. package/dist/web.umd.production.min.js +1 -1
  17. package/dist/web.umd.production.min.js.map +1 -1
  18. package/docs/README.md +2 -1
  19. package/docs/components/Calendar.mdx +22 -110
  20. package/docs/components/Flow.mdx +1 -0
  21. package/docs/components/KanbanBoard.mdx +156 -0
  22. package/docs/components/OKR.mdx +475 -0
  23. package/docs/components/Title.mdx +1 -0
  24. package/docs/components/Tree.mdx +1 -0
  25. package/docs/components.md +178 -0
  26. package/package.json +1 -1
  27. package/dist/components/CalendarWeek/CalendarWeek/CalendarWeek.props.d.ts +0 -51
  28. package/dist/components/CalendarWeek/CalendarWeek/CalendarWeek.style.d.ts +0 -90
  29. package/dist/components/CalendarWeek/CalendarWeek/CalendarWeek.utils.d.ts +0 -51
  30. package/dist/components/CalendarWeek/CalendarWeek/CalendarWeek.view.d.ts +0 -3
  31. package/dist/components/CalendarWeek/CalendarWeek.d.ts +0 -1
  32. package/docs/api-reference/README.md +0 -103
  33. package/docs/api-reference/data-display/flow.md +0 -220
  34. package/docs/api-reference/data-display/tree.md +0 -210
  35. package/docs/api-reference/form/chat-input.md +0 -206
  36. package/docs/api-reference/utility/button.md +0 -145
  37. package/docs/api-reference/utility/title.md +0 -301
@@ -38,9 +38,8 @@ var contrast = _interopDefault(require('contrast'));
38
38
  require('core-js/modules/es.promise.js');
39
39
  require('core-js/modules/es.array.reduce.js');
40
40
  require('core-js/modules/es.number.to-fixed.js');
41
- require('core-js/modules/es.string.pad-start.js');
42
41
  require('core-js/modules/es.array.sort.js');
43
- var CalendarWeek_style = require('src/components/CalendarWeek/CalendarWeek/CalendarWeek.style');
42
+ require('core-js/modules/es.string.pad-start.js');
44
43
  var format = _interopDefault(require('date-fns/format'));
45
44
  require('core-js/modules/es.regexp.constructor.js');
46
45
  var formik = require('formik');
@@ -7844,7 +7843,6 @@ var KanbanBoardView = _ref => {
7844
7843
  borderRadius: 10,
7845
7844
  padding: "12px",
7846
7845
  boxShadow: "0 1px 2px 0 rgba(16, 24, 40, 0.08)",
7847
- opacity: draggedCardId === card.id ? 0.6 : 1,
7848
7846
  onDragStart: event => onCardDragStart(column.id, card.id, event),
7849
7847
  onDragEnd: onCardDragEnd,
7850
7848
  onDragOver: event => {
@@ -8117,8 +8115,8 @@ var monthTitleStyles = {
8117
8115
  * Month grid styles (7 columns for days)
8118
8116
  */
8119
8117
  var monthGridStyles = {
8120
- display: 'grid',
8121
- gridTemplateColumns: 'repeat(7, 1fr)',
8118
+ display: 'flex',
8119
+ flexDirection: 'column',
8122
8120
  backgroundColor: 'color.white'
8123
8121
  };
8124
8122
  /**
@@ -8148,15 +8146,32 @@ var weekdayLabelStyles = {
8148
8146
  */
8149
8147
  var dayCellStyles = {
8150
8148
  border: '1px solid',
8151
- borderColor: 'color.gray.200',
8152
- minHeight: 100,
8153
- padding: 8,
8154
- paddingTop: 4,
8149
+ borderColor: 'color.gray.100',
8150
+ minHeight: 120,
8151
+ padding: 4,
8152
+ paddingTop: 2,
8155
8153
  backgroundColor: 'color.white',
8156
8154
  position: 'relative',
8157
8155
  display: 'flex',
8158
8156
  flexDirection: 'column'
8159
8157
  };
8158
+ /**
8159
+ * Day date styles (the circular number)
8160
+ */
8161
+ var dayDateStyles = {
8162
+ width: 36,
8163
+ height: 36,
8164
+ display: 'flex',
8165
+ alignItems: 'center',
8166
+ justifyContent: 'center',
8167
+ borderRadius: '50%',
8168
+ fontSize: 13,
8169
+ fontWeight: 400,
8170
+ color: 'color.gray.900',
8171
+ cursor: 'pointer',
8172
+ transition: 'all 0.2s',
8173
+ border: '2px solid transparent'
8174
+ };
8160
8175
  /**
8161
8176
  * Day cell from different month
8162
8177
  */
@@ -8291,6 +8306,9 @@ var ResizeHandle = _ref => {
8291
8306
  onMouseLeave: () => setIsHovered(false)
8292
8307
  }));
8293
8308
  };
8309
+ var MONTH_EVENT_ROW_HEIGHT = 22;
8310
+ var MONTH_EVENT_ROW_GAP = 4;
8311
+ var MONTH_EVENT_TOP_OFFSET = 32;
8294
8312
  var Calendar = _ref2 => {
8295
8313
  var {
8296
8314
  initialDate = new Date(),
@@ -8354,10 +8372,64 @@ var Calendar = _ref2 => {
8354
8372
  return [currentDate];
8355
8373
  }
8356
8374
  }, [currentDate, currentView, currentMonth, weekStartsOn]);
8375
+ var monthWeeks = React.useMemo(() => {
8376
+ var chunks = [];
8377
+ for (var i = 0; i < calendarDates.length; i += 7) {
8378
+ chunks.push(calendarDates.slice(i, i + 7));
8379
+ }
8380
+ return chunks;
8381
+ }, [calendarDates]);
8357
8382
  // Layout events
8358
8383
  var {
8359
8384
  items: positionedEvents
8360
8385
  } = React.useMemo(() => layoutEvents(localEvents, calendarDates), [localEvents, calendarDates]);
8386
+ var monthWeeksWithEvents = React.useMemo(() => {
8387
+ return monthWeeks.map((dates, weekIndex) => {
8388
+ var weekStartIdx = weekIndex * 7;
8389
+ var weekEndIdx = weekStartIdx + dates.length - 1;
8390
+ var segments = positionedEvents.filter(event => !(event.startDay > weekEndIdx || event.endDay < weekStartIdx)).map(event => {
8391
+ var segmentStart = Math.max(event.startDay, weekStartIdx);
8392
+ var segmentEnd = Math.min(event.endDay, weekEndIdx);
8393
+ return Object.assign({}, event, {
8394
+ weekIndex,
8395
+ segmentStartDay: segmentStart - weekStartIdx,
8396
+ segmentEndDay: segmentEnd - weekStartIdx,
8397
+ segmentDuration: segmentEnd - segmentStart + 1,
8398
+ segmentRow: 0
8399
+ });
8400
+ });
8401
+ segments.sort((a, b) => {
8402
+ if (a.segmentStartDay !== b.segmentStartDay) {
8403
+ return a.segmentStartDay - b.segmentStartDay;
8404
+ }
8405
+ return b.segmentDuration - a.segmentDuration;
8406
+ });
8407
+ var rows = [];
8408
+ segments.forEach(segment => {
8409
+ var placed = false;
8410
+ for (var rowIdx = 0; rowIdx < rows.length; rowIdx++) {
8411
+ var row = rows[rowIdx];
8412
+ var conflict = row.some(existing => !(segment.segmentStartDay > existing.segmentEndDay || segment.segmentEndDay < existing.segmentStartDay));
8413
+ if (!conflict) {
8414
+ segment.segmentRow = rowIdx;
8415
+ row.push(segment);
8416
+ placed = true;
8417
+ break;
8418
+ }
8419
+ }
8420
+ if (!placed) {
8421
+ segment.segmentRow = rows.length;
8422
+ rows.push([segment]);
8423
+ }
8424
+ });
8425
+ return {
8426
+ weekIndex,
8427
+ dates,
8428
+ segments,
8429
+ rowCount: rows.length
8430
+ };
8431
+ });
8432
+ }, [monthWeeks, positionedEvents]);
8361
8433
  // Get day names
8362
8434
  var dayNames = React.useMemo(() => getDayNames(weekStartsOn), [weekStartsOn]);
8363
8435
  // Handle navigation
@@ -8417,10 +8489,9 @@ var Calendar = _ref2 => {
8417
8489
  onEventAdd(start, end);
8418
8490
  }
8419
8491
  }, [onEventAdd]);
8420
- // Handle event drag start
8421
- var handleEventDragStart = React.useCallback((e, event) => {
8422
- e.dataTransfer.effectAllowed = 'move';
8423
- e.dataTransfer.setData('eventId', event.id);
8492
+ // Handle mouse down on event (start dragging)
8493
+ var handleEventMouseDown = React.useCallback((e, event) => {
8494
+ e.preventDefault();
8424
8495
  dragStateRef.current = {
8425
8496
  isDragging: true,
8426
8497
  isResizing: false,
@@ -8433,52 +8504,7 @@ var Calendar = _ref2 => {
8433
8504
  originalEnd: event.end
8434
8505
  };
8435
8506
  }, []);
8436
- // Handle drag over day cell
8437
- var handleDragOver = React.useCallback((e, dayIndex) => {
8438
- e.preventDefault();
8439
- e.dataTransfer.dropEffect = 'move';
8440
- setDropTargetDays([dayIndex]);
8441
- }, []);
8442
- // Handle drag leave
8443
- var handleDragLeave = React.useCallback(() => {
8444
- setDropTargetDays([]);
8445
- }, []);
8446
- // Handle drop on day cell
8447
- var handleDrop = React.useCallback((e, dayIndex) => {
8448
- e.preventDefault();
8449
- setDropTargetDays([]);
8450
- var dragState = dragStateRef.current;
8451
- if (!dragState.event || !dragState.originalStart || !dragState.originalEnd) return;
8452
- // Calculate date difference
8453
- var targetDate = calendarDates[dayIndex];
8454
- if (!targetDate) return;
8455
- var daysDiff = daysBetweenUTC(targetDate, dragState.originalStart.slice(0, 10));
8456
- // Update event dates
8457
- var newStart = addDateDays(dragState.originalStart.slice(0, 10), daysDiff);
8458
- var newEnd = addDateDays(dragState.originalEnd.slice(0, 10), daysDiff);
8459
- var updatedEvent = Object.assign({}, dragState.event, {
8460
- start: newStart,
8461
- end: newEnd
8462
- });
8463
- // Update local events
8464
- var updatedEvents = localEvents.map(ev => ev.id === dragState.event.id ? updatedEvent : ev);
8465
- setLocalEvents(updatedEvents);
8466
- // Call callback
8467
- onEventDrop == null || onEventDrop(updatedEvent);
8468
- // Reset drag state
8469
- dragStateRef.current = {
8470
- isDragging: false,
8471
- isResizing: false,
8472
- resizeDirection: null,
8473
- event: null,
8474
- startX: 0,
8475
- startDay: 0,
8476
- startDuration: 0,
8477
- originalStart: null,
8478
- originalEnd: null
8479
- };
8480
- }, [localEvents, calendarDates, onEventDrop]);
8481
- // Handle resize start (FIXED - using pixel-based approach like CalendarWeek)
8507
+ // Handle resize start
8482
8508
  var handleResizeStart = React.useCallback((e, event, direction) => {
8483
8509
  e.preventDefault();
8484
8510
  e.stopPropagation();
@@ -8494,7 +8520,7 @@ var Calendar = _ref2 => {
8494
8520
  originalEnd: event.end
8495
8521
  };
8496
8522
  }, []);
8497
- // Handle mouse move during resize (FIXED - using pixel-based calculation)
8523
+ // Handle mouse move during resize or drag
8498
8524
  var handleMouseMove = React.useCallback(e => {
8499
8525
  var dragState = dragStateRef.current;
8500
8526
  if (!dragState.event || !dragState.isDragging && !dragState.isResizing) return;
@@ -8616,54 +8642,89 @@ var Calendar = _ref2 => {
8616
8642
  key: index
8617
8643
  }, weekdayLabelStyles, views.weekdayLabel), dayName)))), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
8618
8644
  ref: gridRef
8619
- }, monthGridStyles, views.monthGrid), calendarDates.map((dateISO, index) => {
8620
- var dateNum = getDateNumber(dateISO);
8621
- var isToday = dateISO === today;
8622
- var isSelected = dateISO === selectedDate;
8623
- var isCurrentMonth = isInMonth(dateISO, currentMonth);
8624
- var isDropTarget = dropTargetDays.includes(index);
8625
- var dayEvents = eventsByDate[dateISO] || [];
8626
- return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
8627
- key: dateISO,
8628
- "data-date": dateISO
8629
- }, dayCellStyles, !isCurrentMonth && otherMonthDayCellStyles, isDropTarget && dropTargetStyles, {
8630
- onClick: () => handleDateClick(dateISO),
8631
- onDoubleClick: () => handleDateDoubleClick(dateISO),
8632
- onDragOver: e => handleDragOver(e, index),
8633
- onDragLeave: handleDragLeave,
8634
- onDrop: e => handleDrop(e, index)
8635
- }, views.dayCell), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, dayNumberStyles, isToday && todayDayNumberStyles, isSelected && !isToday && selectedDayNumberStyles, {
8636
- style: {
8637
- cursor: 'pointer'
8638
- }
8639
- }, views.dayNumber), dateNum), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, eventsAreaStyles, views.eventsArea), dayEvents.map(event => {
8645
+ }, monthGridStyles, views.monthGrid), monthWeeksWithEvents.map(week => {
8646
+ var weekStartIdx = week.weekIndex * 7;
8647
+ var weekEndIdx = weekStartIdx + week.dates.length - 1;
8648
+ return /*#__PURE__*/React__default.createElement(appStudio.View, {
8649
+ key: "week-" + week.weekIndex,
8650
+ position: "relative"
8651
+ }, /*#__PURE__*/React__default.createElement(appStudio.View, {
8652
+ display: "grid",
8653
+ gridTemplateColumns: "repeat(7, 1fr)"
8654
+ }, week.dates.map((dateISO, dayOffset) => {
8655
+ var dateNum = getDateNumber(dateISO);
8656
+ var isToday = dateISO === today;
8657
+ var isSelected = dateISO === selectedDate;
8658
+ var isCurrentMonth = isInMonth(dateISO, currentMonth);
8659
+ var dayIndex = weekStartIdx + dayOffset;
8660
+ var isDropTarget = dropTargetDays.includes(dayIndex);
8661
+ return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
8662
+ key: dateISO,
8663
+ "data-date": dateISO
8664
+ }, dayCellStyles, !isCurrentMonth && otherMonthDayCellStyles, isDropTarget && dropTargetStyles, {
8665
+ onClick: () => handleDateClick(dateISO),
8666
+ onDoubleClick: () => handleDateDoubleClick(dateISO)
8667
+ }, views.dayCell), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, dayNumberStyles, isToday && todayDayNumberStyles, isSelected && !isToday && selectedDayNumberStyles, {
8668
+ style: {
8669
+ cursor: 'pointer'
8670
+ }
8671
+ }, views.dayNumber), dateNum));
8672
+ })), week.segments.length > 0 && (/*#__PURE__*/React__default.createElement(appStudio.View, {
8673
+ position: "absolute",
8674
+ left: 0,
8675
+ right: 0,
8676
+ top: MONTH_EVENT_TOP_OFFSET,
8677
+ pointerEvents: "none"
8678
+ }, week.segments.map(event => {
8679
+ var _dragStateRef$current, _dragStateRef$current2;
8640
8680
  var colorConfig = EVENT_COLORS[event.color || 'blue'];
8641
- var isMultiDay = event.duration > 1;
8642
- var isFirstDay = event.isFirstDay !== false;
8643
- if (!isFirstDay) return null;
8681
+ var dayWidth = 100 / week.dates.length;
8682
+ var left = event.segmentStartDay * dayWidth;
8683
+ var width = event.segmentDuration * dayWidth;
8684
+ var isDragging = dragStateRef.current.isDragging && ((_dragStateRef$current = dragStateRef.current.event) == null ? void 0 : _dragStateRef$current.id) === event.id;
8685
+ var isResizing = dragStateRef.current.isResizing && ((_dragStateRef$current2 = dragStateRef.current.event) == null ? void 0 : _dragStateRef$current2.id) === event.id;
8686
+ var showLeftHandle = event.startDay >= weekStartIdx && event.startDay <= weekEndIdx && event.segmentStartDay === event.startDay - weekStartIdx;
8687
+ var showRightHandle = event.endDay >= weekStartIdx && event.endDay <= weekEndIdx && event.segmentEndDay === event.endDay - weekStartIdx;
8644
8688
  return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
8645
- key: event.id,
8646
- position: "relative"
8647
- }, eventStyles, {
8689
+ key: event.id + "-" + event.weekIndex + "-" + event.segmentStartDay,
8690
+ position: "absolute",
8691
+ height: MONTH_EVENT_ROW_HEIGHT,
8692
+ display: "flex",
8693
+ alignItems: "center",
8694
+ paddingLeft: 8,
8695
+ paddingRight: 8,
8696
+ borderRadius: 4,
8648
8697
  backgroundColor: colorConfig.background,
8698
+ borderLeft: "3px solid",
8649
8699
  borderLeftColor: colorConfig.border,
8650
8700
  color: colorConfig.text,
8651
- draggable: true,
8652
- onDragStart: e => handleEventDragStart(e, event),
8653
- title: isMultiDay ? event.title + " (" + event.duration + " days)" : event.title
8701
+ fontSize: 11,
8702
+ fontWeight: 500,
8703
+ overflow: "hidden",
8704
+ cursor: isDragging ? 'grabbing' : 'grab',
8705
+ opacity: isDragging || isResizing ? 0.7 : 1,
8706
+ boxShadow: isDragging || isResizing ? '0 4px 12px rgba(0,0,0,0.3)' : '0 1px 2px rgba(0,0,0,0.1)',
8707
+ transition: isDragging || isResizing ? 'none' : 'box-shadow 0.2s',
8708
+ pointerEvents: "auto",
8709
+ userSelect: "none",
8710
+ left: "calc(" + left + "% + 4px)",
8711
+ width: "calc(" + width + "% - 8px)",
8712
+ top: event.segmentRow * (MONTH_EVENT_ROW_HEIGHT + MONTH_EVENT_ROW_GAP) + "px",
8713
+ onMouseDown: e => handleEventMouseDown(e, event),
8714
+ title: event.title
8654
8715
  }, views.event), /*#__PURE__*/React__default.createElement(appStudio.View, {
8655
8716
  overflow: "hidden",
8656
8717
  textOverflow: "ellipsis",
8657
8718
  whiteSpace: "nowrap",
8658
8719
  width: "100%"
8659
- }, event.title, isMultiDay && " (" + event.duration + "d)"), /*#__PURE__*/React__default.createElement(ResizeHandle, {
8720
+ }, event.title), showLeftHandle && (/*#__PURE__*/React__default.createElement(ResizeHandle, {
8660
8721
  direction: "left",
8661
8722
  onMouseDown: e => handleResizeStart(e, event, 'left')
8662
- }), /*#__PURE__*/React__default.createElement(ResizeHandle, {
8723
+ })), showRightHandle && (/*#__PURE__*/React__default.createElement(ResizeHandle, {
8663
8724
  direction: "right",
8664
8725
  onMouseDown: e => handleResizeStart(e, event, 'right')
8665
- }));
8666
- })));
8726
+ })));
8727
+ }))));
8667
8728
  }))));
8668
8729
  // Render week view
8669
8730
  var renderWeekView = () => (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, weekdayHeaderStyles, views.weekdayHeader), calendarDates.map((dateISO, index) => {
@@ -8677,7 +8738,7 @@ var Calendar = _ref2 => {
8677
8738
  alignItems: "center",
8678
8739
  padding: 8,
8679
8740
  gap: 4
8680
- }, views.weekdayLabel), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, weekdayLabelStyles), DAY_NAMES[dayOfWeek]), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, CalendarWeek_style.dayDateStyles, isToday && todayDayNumberStyles, {
8741
+ }, views.weekdayLabel), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, weekdayLabelStyles), DAY_NAMES[dayOfWeek]), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, dayDateStyles, isToday && todayDayNumberStyles, {
8681
8742
  fontSize: 16,
8682
8743
  fontWeight: isToday ? 500 : 400
8683
8744
  }), dateNum));
@@ -8695,14 +8756,14 @@ var Calendar = _ref2 => {
8695
8756
  }, dayCellStyles, isDropTarget && dropTargetStyles, {
8696
8757
  minHeight: 400,
8697
8758
  onClick: () => handleDateClick(dateISO),
8698
- onDoubleClick: () => handleDateDoubleClick(dateISO),
8699
- onDragOver: e => handleDragOver(e, index),
8700
- onDragLeave: handleDragLeave,
8701
- onDrop: e => handleDrop(e, index)
8759
+ onDoubleClick: () => handleDateDoubleClick(dateISO)
8702
8760
  }), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, eventsAreaStyles, views.eventsArea), dayEvents.map(event => {
8761
+ var _dragStateRef$current3, _dragStateRef$current4;
8703
8762
  var colorConfig = EVENT_COLORS[event.color || 'blue'];
8704
8763
  var isFirstDay = event.isFirstDay !== false;
8705
8764
  if (!isFirstDay) return null;
8765
+ var isDragging = dragStateRef.current.isDragging && ((_dragStateRef$current3 = dragStateRef.current.event) == null ? void 0 : _dragStateRef$current3.id) === event.id;
8766
+ var isResizing = dragStateRef.current.isResizing && ((_dragStateRef$current4 = dragStateRef.current.event) == null ? void 0 : _dragStateRef$current4.id) === event.id;
8706
8767
  return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
8707
8768
  key: event.id,
8708
8769
  position: "relative"
@@ -8710,8 +8771,12 @@ var Calendar = _ref2 => {
8710
8771
  backgroundColor: colorConfig.background,
8711
8772
  borderLeftColor: colorConfig.border,
8712
8773
  color: colorConfig.text,
8713
- draggable: true,
8714
- onDragStart: e => handleEventDragStart(e, event),
8774
+ cursor: isDragging ? 'grabbing' : 'grab',
8775
+ opacity: isDragging || isResizing ? 0.7 : 1,
8776
+ boxShadow: isDragging || isResizing ? '0 4px 12px rgba(0,0,0,0.3)' : '0 1px 2px rgba(0,0,0,0.1)',
8777
+ transition: isDragging || isResizing ? 'none' : 'box-shadow 0.2s',
8778
+ userSelect: "none",
8779
+ onMouseDown: e => handleEventMouseDown(e, event),
8715
8780
  title: event.title
8716
8781
  }, views.event), /*#__PURE__*/React__default.createElement(appStudio.View, {
8717
8782
  overflow: "hidden",
@@ -8830,509 +8895,6 @@ var Calendar = _ref2 => {
8830
8895
  }, views.navButton), "\u203A")))), currentView === 'month' && renderMonthView(), currentView === 'week' && renderWeekView(), currentView === 'day' && renderDayView());
8831
8896
  };
8832
8897
 
8833
- /**
8834
- * Convert an ISO date string to a UTC Date object
8835
- */
8836
- var dateUTC$1 = iso => {
8837
- return new Date(iso + (iso.includes('T') ? '' : 'T00:00:00Z'));
8838
- };
8839
- /**
8840
- * Calculate the number of days between two ISO date strings
8841
- */
8842
- var daysBetweenUTC$1 = (a, b) => {
8843
- return Math.floor((dateUTC$1(a).getTime() - dateUTC$1(b).getTime()) / 86400000);
8844
- };
8845
- /**
8846
- * Add a number of days to an ISO date string
8847
- */
8848
- var addDateDays$1 = (dateISO, days) => {
8849
- var d = new Date(dateISO + 'T00:00:00Z');
8850
- d.setUTCDate(d.getUTCDate() + days);
8851
- return d.toISOString().slice(0, 10);
8852
- };
8853
- /**
8854
- * Get the day of the week (0-6) from an ISO date string
8855
- */
8856
- var getDayOfWeek$1 = dateISO => {
8857
- return dateUTC$1(dateISO).getUTCDay();
8858
- };
8859
- /**
8860
- * Get the date number (1-31) from an ISO date string
8861
- */
8862
- var getDateNumber$1 = dateISO => {
8863
- return dateUTC$1(dateISO).getUTCDate();
8864
- };
8865
- /**
8866
- * Layout events with proper positioning to avoid overlaps
8867
- * Returns positioned events and the total number of rows needed
8868
- */
8869
- var layoutEvents$1 = (events, weekStart) => {
8870
- // Convert events to positioned items with day indices
8871
- var items = events.map(ev => {
8872
- var startIdx = daysBetweenUTC$1(ev.start, weekStart);
8873
- var endIdx = daysBetweenUTC$1(ev.end, weekStart);
8874
- // Clamp to week boundaries
8875
- var clampedStart = Math.max(0, Math.min(6, startIdx));
8876
- var clampedEnd = Math.max(0, Math.min(6, endIdx));
8877
- // Skip if completely outside week
8878
- if (endIdx < 0 || startIdx > 6) return null;
8879
- var duration = clampedEnd - clampedStart + 1;
8880
- return Object.assign({}, ev, {
8881
- startDay: clampedStart,
8882
- endDay: clampedEnd,
8883
- duration: duration,
8884
- row: 0
8885
- });
8886
- }).filter(item => item !== null);
8887
- // Sort by start day, then by duration (longer first)
8888
- items.sort((a, b) => {
8889
- if (a.startDay !== b.startDay) return a.startDay - b.startDay;
8890
- return b.duration - a.duration;
8891
- });
8892
- // Assign rows using greedy algorithm to prevent overlaps
8893
- var rows = [];
8894
- items.forEach(item => {
8895
- var placed = false;
8896
- for (var i = 0; i < rows.length; i++) {
8897
- var row = rows[i];
8898
- var hasConflict = row.some(existing => !(item.startDay > existing.endDay || item.endDay < existing.startDay));
8899
- if (!hasConflict) {
8900
- row.push(item);
8901
- item.row = i;
8902
- placed = true;
8903
- break;
8904
- }
8905
- }
8906
- if (!placed) {
8907
- item.row = rows.length;
8908
- rows.push([item]);
8909
- }
8910
- });
8911
- return {
8912
- items,
8913
- rowCount: rows.length
8914
- };
8915
- };
8916
- /**
8917
- * Day names array (Sunday to Saturday)
8918
- */
8919
- var DAY_NAMES$1 = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
8920
- /**
8921
- * Get the date ISO string for a specific day in the week
8922
- */
8923
- var getDateForDay = (weekStart, dayIndex) => {
8924
- return addDateDays$1(weekStart, dayIndex);
8925
- };
8926
-
8927
- /**
8928
- * Event color configurations
8929
- */
8930
- var EVENT_COLORS$1 = {
8931
- blue: {
8932
- background: 'color.blue.50',
8933
- border: 'color.blue.500',
8934
- text: 'color.blue.700'
8935
- },
8936
- red: {
8937
- background: 'color.red.50',
8938
- border: 'color.red.500',
8939
- text: 'color.red.700'
8940
- },
8941
- green: {
8942
- background: 'color.green.50',
8943
- border: 'color.green.500',
8944
- text: 'color.green.700'
8945
- },
8946
- purple: {
8947
- background: 'color.purple.50',
8948
- border: 'color.purple.500',
8949
- text: 'color.purple.700'
8950
- },
8951
- orange: {
8952
- background: 'color.orange.50',
8953
- border: 'color.orange.500',
8954
- text: 'color.orange.700'
8955
- }
8956
- };
8957
- /**
8958
- * Base styles for the calendar container
8959
- */
8960
- var containerStyles$1 = {
8961
- width: '100%',
8962
- maxWidth: 1200,
8963
- border: '1px solid',
8964
- borderColor: 'color.gray.200',
8965
- borderRadius: 8,
8966
- overflow: 'hidden',
8967
- backgroundColor: 'color.white'
8968
- };
8969
- /**
8970
- * Individual day column styles
8971
- */
8972
- var dayColumnStyles = {
8973
- borderRight: '1px solid',
8974
- borderColor: 'color.gray.200',
8975
- display: 'flex',
8976
- flexDirection: 'column',
8977
- minHeight: 160,
8978
- backgroundColor: 'color.white',
8979
- position: 'relative'
8980
- };
8981
- /**
8982
- * Day header styles
8983
- */
8984
- var dayHeaderStyles = {
8985
- padding: 8,
8986
- borderBottom: '1px solid',
8987
- borderColor: 'color.gray.200',
8988
- backgroundColor: 'color.gray.50',
8989
- minHeight: 60,
8990
- display: 'flex',
8991
- flexDirection: 'column',
8992
- alignItems: 'center',
8993
- justifyContent: 'center',
8994
- gap: 4
8995
- };
8996
- /**
8997
- * Day name styles (e.g., "Mon", "Tue")
8998
- */
8999
- var dayNameStyles = {
9000
- fontSize: 11,
9001
- fontWeight: 500,
9002
- color: 'color.gray.700',
9003
- textTransform: 'uppercase',
9004
- letterSpacing: 0.5
9005
- };
9006
- /**
9007
- * Day date styles (the circular number)
9008
- */
9009
- var dayDateStyles = {
9010
- width: 36,
9011
- height: 36,
9012
- display: 'flex',
9013
- alignItems: 'center',
9014
- justifyContent: 'center',
9015
- borderRadius: '50%',
9016
- fontSize: 13,
9017
- fontWeight: 400,
9018
- color: 'color.gray.900',
9019
- cursor: 'pointer',
9020
- transition: 'all 0.2s',
9021
- border: '2px solid transparent'
9022
- };
9023
- /**
9024
- * Today date styles
9025
- */
9026
- var todayDateStyles = {
9027
- backgroundColor: 'color.blue.500',
9028
- color: 'color.white',
9029
- fontWeight: 500
9030
- };
9031
- /**
9032
- * Selected date styles
9033
- */
9034
- var selectedDateStyles = {
9035
- borderColor: 'color.blue.500'
9036
- };
9037
- /**
9038
- * Events area styles
9039
- */
9040
- var eventsAreaStyles$1 = {
9041
- padding: 8,
9042
- paddingLeft: 6,
9043
- paddingRight: 6,
9044
- flex: 1,
9045
- position: 'relative'
9046
- };
9047
- /**
9048
- * Drop target indicator styles
9049
- */
9050
- var dropTargetStyles$1 = {
9051
- backgroundColor: 'rgba(26, 115, 232, 0.05)'
9052
- };
9053
- /**
9054
- * Calculate event position styles
9055
- */
9056
- var getEventPositionStyles = (startDay, duration, row) => {
9057
- var dayWidth = 100 / 7;
9058
- var left = startDay * dayWidth;
9059
- var width = duration * dayWidth;
9060
- return {
9061
- left: "calc(" + left + "% + 6px)",
9062
- width: "calc(" + width + "% - 12px)",
9063
- top: 8 + row * 26 + "px"
9064
- };
9065
- };
9066
-
9067
- var ResizeHandle$1 = _ref => {
9068
- var {
9069
- direction,
9070
- onMouseDown
9071
- } = _ref;
9072
- var [isHovered, setIsHovered] = React.useState(false);
9073
- return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
9074
- position: "absolute",
9075
- top: 0,
9076
- bottom: 0,
9077
- width: 8,
9078
- opacity: isHovered ? 1 : 0,
9079
- transition: "opacity 0.2s",
9080
- cursor: direction === 'left' ? 'w-resize' : 'e-resize',
9081
- zIndex: 10,
9082
- backgroundColor: isHovered ? 'rgba(0,0,0,0.1)' : 'transparent'
9083
- }, direction === 'left' ? {
9084
- left: 0
9085
- } : {
9086
- right: 0
9087
- }, {
9088
- onMouseDown: onMouseDown,
9089
- onMouseEnter: () => setIsHovered(true),
9090
- onMouseLeave: () => setIsHovered(false)
9091
- }));
9092
- };
9093
- var CalendarWeek = _ref2 => {
9094
- var {
9095
- startDate,
9096
- events = [],
9097
- today = new Date().toISOString().slice(0, 10),
9098
- onEventDrop,
9099
- onEventResize,
9100
- onDateClick,
9101
- views = {},
9102
- width = '100%',
9103
- maxWidth = 1200
9104
- } = _ref2;
9105
- var {
9106
- getColor
9107
- } = appStudio.useTheme();
9108
- var weekGridRef = React.useRef(null);
9109
- var [selectedDate, setSelectedDate] = React.useState(null);
9110
- var [localEvents, setLocalEvents] = React.useState(events);
9111
- var [dropTargetDays, setDropTargetDays] = React.useState([]);
9112
- var dragStateRef = React.useRef({
9113
- isDragging: false,
9114
- isResizing: false,
9115
- resizeDirection: null,
9116
- event: null,
9117
- startX: 0,
9118
- startDay: 0,
9119
- startDuration: 0,
9120
- originalStart: null,
9121
- originalEnd: null
9122
- });
9123
- // Update local events when props change
9124
- React__default.useEffect(() => {
9125
- setLocalEvents(events);
9126
- }, [events]);
9127
- // Layout events
9128
- var {
9129
- items: positionedEvents
9130
- } = React.useMemo(() => layoutEvents$1(localEvents, startDate), [localEvents, startDate]);
9131
- // Get day index from mouse X position
9132
- var getDayFromMouseX = React.useCallback(clientX => {
9133
- if (!weekGridRef.current) return 0;
9134
- var rect = weekGridRef.current.getBoundingClientRect();
9135
- var relativeX = clientX - rect.left;
9136
- var dayWidth = rect.width / 7;
9137
- return Math.max(0, Math.min(6, Math.floor(relativeX / dayWidth)));
9138
- }, []);
9139
- // Handle date click
9140
- var handleDateClick = React.useCallback(dateISO => {
9141
- setSelectedDate(dateISO);
9142
- onDateClick == null || onDateClick(dateISO);
9143
- }, [onDateClick]);
9144
- // Handle mouse down on event (start dragging)
9145
- var handleEventMouseDown = React.useCallback((e, event) => {
9146
- e.preventDefault();
9147
- dragStateRef.current = {
9148
- isDragging: true,
9149
- isResizing: false,
9150
- resizeDirection: null,
9151
- event,
9152
- startX: e.clientX,
9153
- startDay: event.startDay,
9154
- startDuration: event.duration,
9155
- originalStart: event.start,
9156
- originalEnd: event.end
9157
- };
9158
- }, []);
9159
- // Handle mouse down on resize handle
9160
- var handleResizeMouseDown = React.useCallback((e, event, direction) => {
9161
- e.preventDefault();
9162
- e.stopPropagation();
9163
- dragStateRef.current = {
9164
- isDragging: false,
9165
- isResizing: true,
9166
- resizeDirection: direction,
9167
- event,
9168
- startX: e.clientX,
9169
- startDay: event.startDay,
9170
- startDuration: event.duration,
9171
- originalStart: event.start,
9172
- originalEnd: event.end
9173
- };
9174
- }, []);
9175
- // Handle mouse move (dragging or resizing)
9176
- var handleMouseMove = React.useCallback(e => {
9177
- var dragState = dragStateRef.current;
9178
- if (!dragState.event || !dragState.isDragging && !dragState.isResizing) return;
9179
- if (!weekGridRef.current) return;
9180
- var rect = weekGridRef.current.getBoundingClientRect();
9181
- var dayWidth = rect.width / 7;
9182
- var deltaX = e.clientX - dragState.startX;
9183
- var daysDelta = Math.round(deltaX / dayWidth);
9184
- if (dragState.isDragging) {
9185
- // Calculate new position
9186
- var newStartDay = Math.max(0, Math.min(6, dragState.startDay + daysDelta));
9187
- var duration = dragState.event.duration;
9188
- var newEndDay = Math.min(6, newStartDay + duration - 1);
9189
- // Update drop target indicators
9190
- var targetDays = [];
9191
- for (var i = newStartDay; i <= newEndDay; i++) {
9192
- targetDays.push(i);
9193
- }
9194
- setDropTargetDays(targetDays);
9195
- // Update event position immediately for smooth dragging
9196
- var updatedEvents = localEvents.map(ev => ev.id === dragState.event.id ? Object.assign({}, ev, {
9197
- start: addDateDays$1(dragState.originalStart, newStartDay - dragState.startDay),
9198
- end: addDateDays$1(dragState.originalEnd, newStartDay - dragState.startDay)
9199
- }) : ev);
9200
- setLocalEvents(updatedEvents);
9201
- } else if (dragState.isResizing) {
9202
- // Handle resizing
9203
- if (dragState.resizeDirection === 'right') {
9204
- var newDuration = Math.max(1, dragState.startDuration + daysDelta);
9205
- var _newEndDay = Math.min(6, dragState.startDay + newDuration - 1);
9206
- var actualDuration = _newEndDay - dragState.startDay + 1;
9207
- var _updatedEvents = localEvents.map(ev => ev.id === dragState.event.id ? Object.assign({}, ev, {
9208
- end: addDateDays$1(dragState.originalStart, actualDuration - 1)
9209
- }) : ev);
9210
- setLocalEvents(_updatedEvents);
9211
- } else if (dragState.resizeDirection === 'left') {
9212
- var _newStartDay = Math.max(0, Math.min(dragState.startDay + dragState.startDuration - 1, dragState.startDay + daysDelta));
9213
- var _updatedEvents2 = localEvents.map(ev => ev.id === dragState.event.id ? Object.assign({}, ev, {
9214
- start: addDateDays$1(dragState.originalStart, _newStartDay - dragState.startDay)
9215
- }) : ev);
9216
- setLocalEvents(_updatedEvents2);
9217
- }
9218
- }
9219
- }, [localEvents]);
9220
- // Handle mouse up (finish dragging or resizing)
9221
- var handleMouseUp = React.useCallback(e => {
9222
- var dragState = dragStateRef.current;
9223
- if (!dragState.event || !dragState.isDragging && !dragState.isResizing) return;
9224
- setDropTargetDays([]);
9225
- // Find the updated event
9226
- var updatedEvent = localEvents.find(ev => ev.id === dragState.event.id);
9227
- if (!updatedEvent) return;
9228
- // Call appropriate callback
9229
- if (dragState.isDragging) {
9230
- onEventDrop == null || onEventDrop(updatedEvent);
9231
- } else if (dragState.isResizing) {
9232
- onEventResize == null || onEventResize(updatedEvent);
9233
- }
9234
- // Reset drag state
9235
- dragStateRef.current = {
9236
- isDragging: false,
9237
- isResizing: false,
9238
- resizeDirection: null,
9239
- event: null,
9240
- startX: 0,
9241
- startDay: 0,
9242
- startDuration: 0,
9243
- originalStart: null,
9244
- originalEnd: null
9245
- };
9246
- }, [localEvents, onEventDrop, onEventResize]);
9247
- // Set up global mouse event listeners
9248
- React__default.useEffect(() => {
9249
- document.addEventListener('mousemove', handleMouseMove);
9250
- document.addEventListener('mouseup', handleMouseUp);
9251
- return () => {
9252
- document.removeEventListener('mousemove', handleMouseMove);
9253
- document.removeEventListener('mouseup', handleMouseUp);
9254
- };
9255
- }, [handleMouseMove, handleMouseUp]);
9256
- return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, containerStyles$1, {
9257
- width: width,
9258
- maxWidth: maxWidth
9259
- }, views.container), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
9260
- ref: weekGridRef,
9261
- display: "grid",
9262
- gridTemplateColumns: "repeat(7, 1fr)",
9263
- position: "relative",
9264
- width: "100%"
9265
- }, views.weekGrid), Array.from({
9266
- length: 7
9267
- }).map((_, dayIdx) => {
9268
- var dateISO = getDateForDay(startDate, dayIdx);
9269
- var dayOfWeek = getDayOfWeek$1(dateISO);
9270
- var dateNum = getDateNumber$1(dateISO);
9271
- var isToday = dateISO === today;
9272
- var isSelected = dateISO === selectedDate;
9273
- var isDropTarget = dropTargetDays.includes(dayIdx);
9274
- return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
9275
- key: dayIdx
9276
- }, dayColumnStyles, isDropTarget && dropTargetStyles$1, {
9277
- borderRight: dayIdx === 6 ? 'none' : '1px solid'
9278
- }, views.dayColumn), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, dayHeaderStyles, views.dayHeader), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, dayNameStyles, views.dayName), DAY_NAMES$1[dayOfWeek]), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, dayDateStyles, isToday && todayDateStyles, isSelected && !isToday && selectedDateStyles, {
9279
- onClick: () => handleDateClick(dateISO)
9280
- }, views.dayDate), dateNum)), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, eventsAreaStyles$1, views.eventsArea)));
9281
- }), /*#__PURE__*/React__default.createElement(appStudio.View, {
9282
- position: "absolute",
9283
- top: 60,
9284
- left: 0,
9285
- right: 0,
9286
- bottom: 0,
9287
- pointerEvents: "none"
9288
- }, positionedEvents.map(event => {
9289
- var _dragStateRef$current, _dragStateRef$current2;
9290
- var colorConfig = EVENT_COLORS$1[event.color || 'blue'];
9291
- var positionStyles = getEventPositionStyles(event.startDay, event.duration, event.row);
9292
- var isDragging = dragStateRef.current.isDragging && ((_dragStateRef$current = dragStateRef.current.event) == null ? void 0 : _dragStateRef$current.id) === event.id;
9293
- var isResizing = dragStateRef.current.isResizing && ((_dragStateRef$current2 = dragStateRef.current.event) == null ? void 0 : _dragStateRef$current2.id) === event.id;
9294
- return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
9295
- key: event.id,
9296
- position: "absolute",
9297
- height: 22,
9298
- display: "flex",
9299
- alignItems: "center",
9300
- padding: 8,
9301
- paddingLeft: 8,
9302
- paddingRight: 8,
9303
- borderRadius: 4,
9304
- backgroundColor: colorConfig.background,
9305
- borderLeft: "3px solid",
9306
- borderLeftColor: colorConfig.border,
9307
- color: colorConfig.text,
9308
- fontSize: 12,
9309
- fontWeight: 500,
9310
- overflow: "hidden",
9311
- cursor: isDragging ? 'grabbing' : 'grab',
9312
- opacity: isDragging || isResizing ? 0.7 : 1,
9313
- boxShadow: isDragging || isResizing ? '0 4px 12px rgba(0,0,0,0.3)' : '0 1px 2px rgba(0,0,0,0.1)',
9314
- transition: isDragging || isResizing ? 'none' : 'box-shadow 0.2s',
9315
- pointerEvents: "auto",
9316
- userSelect: "none",
9317
- left: positionStyles.left,
9318
- width: positionStyles.width,
9319
- top: positionStyles.top,
9320
- onMouseDown: e => handleEventMouseDown(e, event)
9321
- }, views.event), /*#__PURE__*/React__default.createElement(appStudio.View, {
9322
- overflow: "hidden",
9323
- textOverflow: "ellipsis",
9324
- whiteSpace: "nowrap",
9325
- width: "100%"
9326
- }, event.title), /*#__PURE__*/React__default.createElement(ResizeHandle$1, {
9327
- direction: "left",
9328
- onMouseDown: e => handleResizeMouseDown(e, event, 'left')
9329
- }), /*#__PURE__*/React__default.createElement(ResizeHandle$1, {
9330
- direction: "right",
9331
- onMouseDown: e => handleResizeMouseDown(e, event, 'right')
9332
- }));
9333
- }))));
9334
- };
9335
-
9336
8898
  /**
9337
8899
  * Custom hook to manage cookie consent state
9338
8900
  * @param cookieExpiration Number of days until the cookie expires
@@ -19973,6 +19535,404 @@ NavigationMenu.Trigger = NavigationMenuTrigger;
19973
19535
  NavigationMenu.Content = NavigationMenuContent;
19974
19536
  NavigationMenu.Link = NavigationMenuLink;
19975
19537
 
19538
+ var _excluded$X = ["value", "max", "color", "backgroundColor", "height", "radius", "views", "themeMode"];
19539
+ var ProgressBarView = _ref => {
19540
+ var {
19541
+ value = 0,
19542
+ max = 100,
19543
+ color = 'theme.primary',
19544
+ backgroundColor = 'color.gray.200',
19545
+ height = 8,
19546
+ radius = 4,
19547
+ views,
19548
+ themeMode: elementMode
19549
+ } = _ref,
19550
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$X);
19551
+ var {
19552
+ getColor,
19553
+ themeMode
19554
+ } = appStudio.useTheme();
19555
+ var currentMode = elementMode ? elementMode : themeMode;
19556
+ var percentage = Math.min(100, Math.max(0, value / max * 100));
19557
+ var trackColor = getColor(backgroundColor, {
19558
+ themeMode: currentMode
19559
+ });
19560
+ var barColor = getColor(color, {
19561
+ themeMode: currentMode
19562
+ });
19563
+ return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
19564
+ role: "progressbar",
19565
+ "aria-valuenow": value,
19566
+ "aria-valuemin": 0,
19567
+ "aria-valuemax": max,
19568
+ width: "100%",
19569
+ height: height,
19570
+ backgroundColor: trackColor,
19571
+ borderRadius: radius,
19572
+ overflow: "hidden"
19573
+ }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
19574
+ width: percentage + "%",
19575
+ height: "100%",
19576
+ backgroundColor: barColor,
19577
+ borderRadius: radius
19578
+ }, views == null ? void 0 : views.bar)));
19579
+ };
19580
+
19581
+ /**
19582
+ * ProgressBar component displays completion status of a task or process.
19583
+ */
19584
+ var ProgressBarComponent = props => (/*#__PURE__*/React__default.createElement(ProgressBarView, Object.assign({}, props)));
19585
+ var ProgressBar = ProgressBarComponent;
19586
+
19587
+ var getThemes$2 = themeMode => {
19588
+ return {
19589
+ default: {
19590
+ indicator: {
19591
+ backgroundColor: 'color.gray.400'
19592
+ },
19593
+ label: {
19594
+ color: 'color.gray.700'
19595
+ }
19596
+ },
19597
+ info: {
19598
+ indicator: {
19599
+ backgroundColor: 'color.blue.500'
19600
+ },
19601
+ label: {
19602
+ color: 'color.blue.700'
19603
+ }
19604
+ },
19605
+ success: {
19606
+ indicator: {
19607
+ backgroundColor: 'color.green.500'
19608
+ },
19609
+ label: {
19610
+ color: 'color.green.700'
19611
+ }
19612
+ },
19613
+ warning: {
19614
+ indicator: {
19615
+ backgroundColor: 'color.orange.500'
19616
+ },
19617
+ label: {
19618
+ color: 'color.orange.700'
19619
+ }
19620
+ },
19621
+ error: {
19622
+ indicator: {
19623
+ backgroundColor: 'color.red.500'
19624
+ },
19625
+ label: {
19626
+ color: 'color.red.700'
19627
+ }
19628
+ }
19629
+ };
19630
+ };
19631
+
19632
+ var _excluded$Y = ["label", "status", "views", "themeMode"];
19633
+ var StatusIndicatorView = _ref => {
19634
+ var {
19635
+ label,
19636
+ status = 'default',
19637
+ views,
19638
+ themeMode: elementMode
19639
+ } = _ref,
19640
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$Y);
19641
+ var {
19642
+ themeMode
19643
+ } = appStudio.useTheme();
19644
+ var themes = getThemes$2();
19645
+ return /*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
19646
+ alignItems: "center",
19647
+ gap: 8,
19648
+ role: "status-indicator"
19649
+ }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
19650
+ role: "status-dot",
19651
+ width: "8px",
19652
+ height: "8px",
19653
+ borderRadius: "50%"
19654
+ }, themes[status].indicator, views == null ? void 0 : views.indicator)), label && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
19655
+ role: "status-label",
19656
+ fontSize: "14px",
19657
+ lineHeight: "20px"
19658
+ }, themes[status].label, views == null ? void 0 : views.label), label)));
19659
+ };
19660
+
19661
+ var StatusIndicator = props => (/*#__PURE__*/React__default.createElement(StatusIndicatorView, Object.assign({}, props)));
19662
+
19663
+ var getOKRTheme = mode => {
19664
+ var isDark = mode === 'dark';
19665
+ return {
19666
+ container: {
19667
+ width: '100%',
19668
+ gap: 16
19669
+ },
19670
+ objectiveCard: {
19671
+ backgroundColor: isDark ? 'rgba(15, 23, 42, 0.6)' : 'color.white',
19672
+ borderColor: isDark ? 'rgba(148, 163, 184, 0.24)' : 'color.gray.200',
19673
+ borderWidth: '1px',
19674
+ borderStyle: 'solid',
19675
+ borderRadius: 16,
19676
+ padding: 24,
19677
+ gap: 20
19678
+ },
19679
+ tag: {
19680
+ display: 'inline-flex',
19681
+ alignItems: 'center',
19682
+ padding: '4px 10px',
19683
+ borderRadius: 999,
19684
+ backgroundColor: isDark ? 'rgba(148, 163, 184, 0.16)' : 'color.gray.100'
19685
+ },
19686
+ keyResultItem: {
19687
+ padding: 16,
19688
+ borderRadius: 12,
19689
+ borderWidth: '1px',
19690
+ borderStyle: 'solid',
19691
+ borderColor: isDark ? 'rgba(148, 163, 184, 0.18)' : 'color.gray.200',
19692
+ backgroundColor: isDark ? 'rgba(15, 23, 42, 0.35)' : 'color.gray.50',
19693
+ gap: 12
19694
+ },
19695
+ divider: {
19696
+ height: 1,
19697
+ backgroundColor: isDark ? 'rgba(148, 163, 184, 0.24)' : 'color.gray.200',
19698
+ width: '100%'
19699
+ }
19700
+ };
19701
+ };
19702
+ var STATUS_METADATA = {
19703
+ notStarted: {
19704
+ indicator: 'info',
19705
+ label: 'Not started'
19706
+ },
19707
+ onTrack: {
19708
+ indicator: 'success',
19709
+ label: 'On track'
19710
+ },
19711
+ atRisk: {
19712
+ indicator: 'warning',
19713
+ label: 'At risk'
19714
+ },
19715
+ offTrack: {
19716
+ indicator: 'error',
19717
+ label: 'Off track'
19718
+ },
19719
+ achieved: {
19720
+ indicator: 'success',
19721
+ label: 'Achieved'
19722
+ }
19723
+ };
19724
+ var deriveStatusFromProgress = progress => {
19725
+ if (progress >= 100) {
19726
+ return 'achieved';
19727
+ }
19728
+ if (progress >= 70) {
19729
+ return 'onTrack';
19730
+ }
19731
+ if (progress >= 40) {
19732
+ return 'atRisk';
19733
+ }
19734
+ if (progress > 0) {
19735
+ return 'offTrack';
19736
+ }
19737
+ return 'notStarted';
19738
+ };
19739
+ var clampProgress = value => {
19740
+ if (typeof value !== 'number' || Number.isNaN(value)) {
19741
+ return 0;
19742
+ }
19743
+ return Math.max(0, Math.min(100, Math.round(value)));
19744
+ };
19745
+
19746
+ var formatPercentage = value => value + "%";
19747
+ var formatConfidence = confidence => {
19748
+ if (!confidence) {
19749
+ return undefined;
19750
+ }
19751
+ return confidence.charAt(0).toUpperCase() + confidence.slice(1);
19752
+ };
19753
+ var getObjectiveProgress = objective => {
19754
+ if (typeof objective.progress === 'number') {
19755
+ return clampProgress(objective.progress);
19756
+ }
19757
+ if (!objective.keyResults.length) {
19758
+ return 0;
19759
+ }
19760
+ var total = objective.keyResults.reduce((acc, keyResult) => {
19761
+ var _keyResult$progress;
19762
+ return acc + ((_keyResult$progress = keyResult.progress) != null ? _keyResult$progress : 0);
19763
+ }, 0);
19764
+ return clampProgress(total / objective.keyResults.length);
19765
+ };
19766
+ var renderStatusIndicator = (status, themeMode, views) => {
19767
+ var metadata = STATUS_METADATA[status];
19768
+ return /*#__PURE__*/React__default.createElement(StatusIndicator, {
19769
+ themeMode: themeMode,
19770
+ status: metadata.indicator,
19771
+ label: metadata.label,
19772
+ views: views
19773
+ });
19774
+ };
19775
+ var OKRView = _ref => {
19776
+ var {
19777
+ objectives,
19778
+ themeMode: elementMode,
19779
+ views,
19780
+ onKeyResultClick,
19781
+ renderObjectiveFooter,
19782
+ renderKeyResultFooter
19783
+ } = _ref;
19784
+ var {
19785
+ themeMode
19786
+ } = appStudio.useTheme();
19787
+ var currentMode = elementMode || themeMode || 'light';
19788
+ var theme = getOKRTheme(currentMode);
19789
+ var secondaryTextColor = currentMode === 'dark' ? 'color.gray.200' : 'color.gray.600';
19790
+ var subtleTextColor = currentMode === 'dark' ? 'color.gray.300' : 'color.gray.500';
19791
+ var tagTextColor = currentMode === 'dark' ? 'color.gray.100' : 'color.gray.700';
19792
+ return /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({}, theme.container, views == null ? void 0 : views.container), objectives.map(objective => {
19793
+ var _objective$status, _objective$tags, _views$objectiveProgr, _views$objectiveProgr2, _views$objectiveProgr3, _views$objectiveProgr4;
19794
+ var objectiveProgress = getObjectiveProgress(objective);
19795
+ var objectiveStatus = (_objective$status = objective.status) != null ? _objective$status : deriveStatusFromProgress(objectiveProgress);
19796
+ var objectiveFooter = renderObjectiveFooter == null ? void 0 : renderObjectiveFooter(objective);
19797
+ return /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
19798
+ key: objective.id
19799
+ }, theme.objectiveCard, views == null ? void 0 : views.objectiveCard), /*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
19800
+ justifyContent: "space-between",
19801
+ alignItems: "flex-start",
19802
+ flexWrap: "wrap",
19803
+ gap: 16
19804
+ }, views == null ? void 0 : views.objectiveHeader), /*#__PURE__*/React__default.createElement(appStudio.Vertical, {
19805
+ gap: 10,
19806
+ minWidth: 240
19807
+ }, /*#__PURE__*/React__default.createElement(Text, Object.assign({
19808
+ size: "lg",
19809
+ weight: "semiBold"
19810
+ }, views == null ? void 0 : views.objectiveTitle), objective.title), objective.description && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
19811
+ size: "sm",
19812
+ color: secondaryTextColor
19813
+ }, views == null ? void 0 : views.objectiveDescription), objective.description)), (_objective$tags = objective.tags) != null && _objective$tags.length ? (/*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
19814
+ gap: 8,
19815
+ flexWrap: "wrap"
19816
+ }, views == null ? void 0 : views.objectiveTags), objective.tags.map(tag => (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
19817
+ key: tag
19818
+ }, theme.tag, views == null ? void 0 : views.tag), /*#__PURE__*/React__default.createElement(Text, Object.assign({
19819
+ size: "xs",
19820
+ weight: "medium",
19821
+ color: tagTextColor
19822
+ }, views == null ? void 0 : views.tagText), tag)))))) : null), /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
19823
+ gap: 8,
19824
+ alignItems: "flex-end",
19825
+ minWidth: 160
19826
+ }, views == null ? void 0 : views.objectiveMeta), objective.owner && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
19827
+ size: "sm",
19828
+ color: secondaryTextColor
19829
+ }, views == null ? void 0 : views.objectiveOwner), "Owner: ", objective.owner)), objective.timeframe && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
19830
+ size: "sm",
19831
+ color: subtleTextColor
19832
+ }, views == null ? void 0 : views.objectiveTimeframe), objective.timeframe)), renderStatusIndicator(objectiveStatus, currentMode, views == null ? void 0 : views.objectiveStatus))), /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
19833
+ gap: 8
19834
+ }, views == null ? void 0 : views.objectiveProgressSection), /*#__PURE__*/React__default.createElement(appStudio.Horizontal, {
19835
+ justifyContent: "space-between",
19836
+ alignItems: "center"
19837
+ }, /*#__PURE__*/React__default.createElement(Text, Object.assign({
19838
+ size: "sm",
19839
+ color: secondaryTextColor
19840
+ }, views == null ? void 0 : views.objectiveProgressLabel), "Progress"), /*#__PURE__*/React__default.createElement(Text, Object.assign({
19841
+ size: "sm",
19842
+ weight: "semiBold"
19843
+ }, views == null ? void 0 : views.objectiveProgressValue), formatPercentage(objectiveProgress))), /*#__PURE__*/React__default.createElement(ProgressBar, {
19844
+ value: objectiveProgress,
19845
+ max: 100,
19846
+ views: {
19847
+ container: Object.assign({
19848
+ width: '100%'
19849
+ }, (_views$objectiveProgr = views == null || (_views$objectiveProgr2 = views.objectiveProgressBar) == null ? void 0 : _views$objectiveProgr2.container) != null ? _views$objectiveProgr : {}),
19850
+ bar: Object.assign({}, (_views$objectiveProgr3 = views == null || (_views$objectiveProgr4 = views.objectiveProgressBar) == null ? void 0 : _views$objectiveProgr4.bar) != null ? _views$objectiveProgr3 : {})
19851
+ }
19852
+ })), /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
19853
+ gap: 16
19854
+ }, views == null ? void 0 : views.keyResultList), objective.keyResults.map((keyResult, index) => {
19855
+ var _keyResult$status, _keyResult$tags, _views$keyResultProgr, _views$keyResultProgr2, _views$keyResultProgr3, _views$keyResultProgr4;
19856
+ var progress = clampProgress(keyResult.progress);
19857
+ var keyResultStatus = (_keyResult$status = keyResult.status) != null ? _keyResult$status : deriveStatusFromProgress(progress);
19858
+ var keyResultFooter = renderKeyResultFooter == null ? void 0 : renderKeyResultFooter(keyResult, objective);
19859
+ var showDivider = index < objective.keyResults.length - 1;
19860
+ return /*#__PURE__*/React__default.createElement(appStudio.Vertical, {
19861
+ key: keyResult.id,
19862
+ gap: 12
19863
+ }, /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
19864
+ role: onKeyResultClick ? 'button' : undefined,
19865
+ cursor: onKeyResultClick ? 'pointer' : undefined,
19866
+ onClick: onKeyResultClick ? () => onKeyResultClick(keyResult, objective) : undefined
19867
+ }, theme.keyResultItem, views == null ? void 0 : views.keyResultItem), /*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
19868
+ justifyContent: "space-between",
19869
+ alignItems: "flex-start",
19870
+ flexWrap: "wrap",
19871
+ gap: 16
19872
+ }, views == null ? void 0 : views.keyResultHeader), /*#__PURE__*/React__default.createElement(appStudio.Vertical, {
19873
+ gap: 8,
19874
+ minWidth: 220
19875
+ }, /*#__PURE__*/React__default.createElement(Text, Object.assign({
19876
+ size: "md",
19877
+ weight: "medium"
19878
+ }, views == null ? void 0 : views.keyResultTitle), keyResult.title), keyResult.description && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
19879
+ size: "sm",
19880
+ color: secondaryTextColor
19881
+ }, views == null ? void 0 : views.keyResultDescription), keyResult.description)), (keyResult.metric || keyResult.target || keyResult.current || keyResult.confidence || keyResult.lastUpdated) && (/*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
19882
+ gap: 12,
19883
+ flexWrap: "wrap"
19884
+ }, views == null ? void 0 : views.keyResultMeta), keyResult.metric && (/*#__PURE__*/React__default.createElement(Text, {
19885
+ size: "xs",
19886
+ color: secondaryTextColor
19887
+ }, "Metric: ", keyResult.metric)), keyResult.current && (/*#__PURE__*/React__default.createElement(Text, {
19888
+ size: "xs",
19889
+ color: secondaryTextColor
19890
+ }, "Current: ", keyResult.current)), keyResult.target && (/*#__PURE__*/React__default.createElement(Text, {
19891
+ size: "xs",
19892
+ color: secondaryTextColor
19893
+ }, "Target: ", keyResult.target)), keyResult.confidence && (/*#__PURE__*/React__default.createElement(Text, {
19894
+ size: "xs",
19895
+ color: secondaryTextColor
19896
+ }, "Confidence:", ' ', formatConfidence(keyResult.confidence))), keyResult.lastUpdated && (/*#__PURE__*/React__default.createElement(Text, {
19897
+ size: "xs",
19898
+ color: subtleTextColor
19899
+ }, "Updated: ", keyResult.lastUpdated)))), (_keyResult$tags = keyResult.tags) != null && _keyResult$tags.length ? (/*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
19900
+ gap: 8,
19901
+ flexWrap: "wrap"
19902
+ }, views == null ? void 0 : views.keyResultTags), keyResult.tags.map(tag => (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
19903
+ key: tag
19904
+ }, theme.tag, views == null ? void 0 : views.keyResultTag), /*#__PURE__*/React__default.createElement(Text, Object.assign({
19905
+ size: "xs",
19906
+ weight: "medium",
19907
+ color: tagTextColor
19908
+ }, views == null ? void 0 : views.keyResultTagText), tag)))))) : null), /*#__PURE__*/React__default.createElement(appStudio.Vertical, {
19909
+ gap: 8,
19910
+ alignItems: "flex-end"
19911
+ }, keyResult.owner && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
19912
+ size: "xs",
19913
+ color: secondaryTextColor
19914
+ }, views == null ? void 0 : views.keyResultOwner), "Owner: ", keyResult.owner)), renderStatusIndicator(keyResultStatus, currentMode, views == null ? void 0 : views.keyResultStatus))), /*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
19915
+ alignItems: "center",
19916
+ gap: 12
19917
+ }, views == null ? void 0 : views.keyResultProgressSection), /*#__PURE__*/React__default.createElement(ProgressBar, {
19918
+ value: progress,
19919
+ max: 100,
19920
+ views: {
19921
+ container: Object.assign({
19922
+ width: '100%'
19923
+ }, (_views$keyResultProgr = views == null || (_views$keyResultProgr2 = views.keyResultProgressBar) == null ? void 0 : _views$keyResultProgr2.container) != null ? _views$keyResultProgr : {}),
19924
+ bar: Object.assign({}, (_views$keyResultProgr3 = views == null || (_views$keyResultProgr4 = views.keyResultProgressBar) == null ? void 0 : _views$keyResultProgr4.bar) != null ? _views$keyResultProgr3 : {})
19925
+ }
19926
+ }), /*#__PURE__*/React__default.createElement(Text, Object.assign({
19927
+ size: "xs",
19928
+ weight: "semiBold"
19929
+ }, views == null ? void 0 : views.keyResultProgressValue), formatPercentage(progress))), keyResultFooter ? (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, views == null ? void 0 : views.footer), keyResultFooter)) : null), showDivider ? /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, theme.divider)) : null);
19930
+ })), objectiveFooter ? (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, views == null ? void 0 : views.footer), objectiveFooter)) : null);
19931
+ }));
19932
+ };
19933
+
19934
+ var OKR = props => /*#__PURE__*/React__default.createElement(OKRView, Object.assign({}, props));
19935
+
19976
19936
  var defaultStyles = {};
19977
19937
  // Create a context that includes both styles and the onClick function
19978
19938
  var TableContext = /*#__PURE__*/React.createContext({
@@ -20755,7 +20715,7 @@ var HighlightStyles = {
20755
20715
  })
20756
20716
  };
20757
20717
 
20758
- var _excluded$X = ["text", "typingSpeed", "pauseTime", "onComplete", "showCursor", "cursorColor", "textStyle", "as"];
20718
+ var _excluded$Z = ["text", "typingSpeed", "pauseTime", "onComplete", "showCursor", "cursorColor", "textStyle", "as"];
20759
20719
  /**
20760
20720
  * A component that creates a typewriter effect for text
20761
20721
  */
@@ -20769,7 +20729,7 @@ var TypewriterEffect = _ref => {
20769
20729
  cursorColor = 'currentColor',
20770
20730
  textStyle
20771
20731
  } = _ref,
20772
- props = _objectWithoutPropertiesLoose(_ref, _excluded$X);
20732
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$Z);
20773
20733
  // Convert text to array if it's a string
20774
20734
  var textArray = Array.isArray(text) ? text : [text];
20775
20735
  // State for the currently displayed text
@@ -20836,7 +20796,7 @@ var TypewriterEffect = _ref => {
20836
20796
  }))))));
20837
20797
  };
20838
20798
 
20839
- var _excluded$Y = ["children", "highlightText", "highlightStyle", "highlightColor", "highlightSecondaryColor", "size", "responsive", "centered", "views", "highlightAnimate", "animate", "animationLoop", "highlightAnimationLoop", "highlightTypewriter", "highlightTypewriterDuration"];
20799
+ var _excluded$_ = ["children", "highlightText", "highlightStyle", "highlightColor", "highlightSecondaryColor", "size", "responsive", "centered", "views", "highlightAnimate", "animate", "animationLoop", "highlightAnimationLoop", "highlightTypewriter", "highlightTypewriterDuration"];
20840
20800
  function escapeRegExp(string) {
20841
20801
  return string.replace(/[.*+?^${}()|[\\]\\/g, '\\$&');
20842
20802
  }
@@ -20858,7 +20818,7 @@ var TitleView = _ref => {
20858
20818
  highlightTypewriter: propHighlightTypewriter = false,
20859
20819
  highlightTypewriterDuration = 3000
20860
20820
  } = _ref,
20861
- props = _objectWithoutPropertiesLoose(_ref, _excluded$Y);
20821
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$_);
20862
20822
  var {
20863
20823
  ref,
20864
20824
  inView
@@ -21133,7 +21093,7 @@ var getToggleVariants = (color, isLight) => ({
21133
21093
  }
21134
21094
  });
21135
21095
 
21136
- var _excluded$Z = ["children", "shape", "variant", "isHovered", "setIsHovered", "isDisabled", "isToggle", "setIsToggled", "onToggle", "views", "backgroundColor", "color", "themeMode"];
21096
+ var _excluded$$ = ["children", "shape", "variant", "isHovered", "setIsHovered", "isDisabled", "isToggle", "setIsToggled", "onToggle", "views", "backgroundColor", "color", "themeMode"];
21137
21097
  var ToggleView = _ref => {
21138
21098
  var _ref2;
21139
21099
  var {
@@ -21153,7 +21113,7 @@ var ToggleView = _ref => {
21153
21113
  // 2nd candidate for main color
21154
21114
  themeMode: elementMode
21155
21115
  } = _ref,
21156
- props = _objectWithoutPropertiesLoose(_ref, _excluded$Z);
21116
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$$);
21157
21117
  /* theme helpers */
21158
21118
  var {
21159
21119
  getColor,
@@ -21197,7 +21157,7 @@ var ToggleView = _ref => {
21197
21157
  }, props, views == null ? void 0 : views.container), children);
21198
21158
  };
21199
21159
 
21200
- var _excluded$_ = ["children", "shape", "variant", "isDisabled", "isToggled", "onToggle"];
21160
+ var _excluded$10 = ["children", "shape", "variant", "isDisabled", "isToggled", "onToggle"];
21201
21161
  // Destructuring properties from ToggleProps to be used within the ToggleComponent.
21202
21162
  var ToggleComponent = _ref => {
21203
21163
  var {
@@ -21209,7 +21169,7 @@ var ToggleComponent = _ref => {
21209
21169
  isToggled = false,
21210
21170
  onToggle
21211
21171
  } = _ref,
21212
- props = _objectWithoutPropertiesLoose(_ref, _excluded$_);
21172
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$10);
21213
21173
  // Initializing toggle state and set state functions using the custom hook useToggleState.
21214
21174
  var {
21215
21175
  isHovered,
@@ -21544,7 +21504,7 @@ var DropdownMenuItemStates = {
21544
21504
  }
21545
21505
  };
21546
21506
 
21547
- var _excluded$$ = ["children", "views"],
21507
+ var _excluded$11 = ["children", "views"],
21548
21508
  _excluded2$f = ["items", "side", "align", "views"],
21549
21509
  _excluded3$9 = ["item", "views"],
21550
21510
  _excluded4$8 = ["views"],
@@ -21585,7 +21545,7 @@ var DropdownMenuTrigger = _ref2 => {
21585
21545
  children,
21586
21546
  views
21587
21547
  } = _ref2,
21588
- props = _objectWithoutPropertiesLoose(_ref2, _excluded$$);
21548
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded$11);
21589
21549
  var {
21590
21550
  isOpen,
21591
21551
  setIsOpen,
@@ -21838,7 +21798,7 @@ var DropdownMenuView = _ref6 => {
21838
21798
  }));
21839
21799
  };
21840
21800
 
21841
- var _excluded$10 = ["trigger", "items", "size", "variant", "side", "align", "defaultOpen", "views"];
21801
+ var _excluded$12 = ["trigger", "items", "size", "variant", "side", "align", "defaultOpen", "views"];
21842
21802
  /**
21843
21803
  * DropdownMenu component for displaying a menu when clicking on a trigger element.
21844
21804
  */
@@ -21853,7 +21813,7 @@ var DropdownMenuComponent = _ref => {
21853
21813
  defaultOpen = false,
21854
21814
  views
21855
21815
  } = _ref,
21856
- props = _objectWithoutPropertiesLoose(_ref, _excluded$10);
21816
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$12);
21857
21817
  var {
21858
21818
  isOpen,
21859
21819
  setIsOpen,
@@ -22267,7 +22227,7 @@ var DefaultColorPalette$1 = [
22267
22227
  category: 'neutral'
22268
22228
  }];
22269
22229
 
22270
- var _excluded$11 = ["id", "name", "label", "placeholder", "helperText", "views", "size", "shape", "variant", "error", "isDisabled", "isReadOnly", "predefinedColors", "showCustomInput", "showRecentColors", "isOpen", "selectedColor", "recentColors", "customColor", "handleToggle", "handleColorSelect", "handleCustomColorChange", "handleCustomColorSubmit", "triggerRef", "dropdownRef"];
22230
+ var _excluded$13 = ["id", "name", "label", "placeholder", "helperText", "views", "size", "shape", "variant", "error", "isDisabled", "isReadOnly", "predefinedColors", "showCustomInput", "showRecentColors", "isOpen", "selectedColor", "recentColors", "customColor", "handleToggle", "handleColorSelect", "handleCustomColorChange", "handleCustomColorSubmit", "triggerRef", "dropdownRef"];
22271
22231
  var ColorPickerView = _ref => {
22272
22232
  var {
22273
22233
  // Basic props
@@ -22302,7 +22262,7 @@ var ColorPickerView = _ref => {
22302
22262
  dropdownRef
22303
22263
  // Other props
22304
22264
  } = _ref,
22305
- props = _objectWithoutPropertiesLoose(_ref, _excluded$11);
22265
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$13);
22306
22266
  var {
22307
22267
  getColor
22308
22268
  } = appStudio.useTheme();
@@ -24632,7 +24592,7 @@ var useEmojiPickerState = props => {
24632
24592
  };
24633
24593
  };
24634
24594
 
24635
- var _excluded$12 = ["id", "name", "label", "placeholder", "helperText", "views", "size", "shape", "variant", "error", "isDisabled", "isReadOnly", "showSearch", "showCategories", "showRecentEmojis", "enabledCategories", "isOpen", "selectedEmoji", "recentEmojis", "searchQuery", "activeCategory", "filteredEmojis", "handleToggle", "handleEmojiSelect", "handleSearchChange", "handleCategoryChange", "triggerRef", "dropdownRef"];
24595
+ var _excluded$14 = ["id", "name", "label", "placeholder", "helperText", "views", "size", "shape", "variant", "error", "isDisabled", "isReadOnly", "showSearch", "showCategories", "showRecentEmojis", "enabledCategories", "isOpen", "selectedEmoji", "recentEmojis", "searchQuery", "activeCategory", "filteredEmojis", "handleToggle", "handleEmojiSelect", "handleSearchChange", "handleCategoryChange", "triggerRef", "dropdownRef"];
24636
24596
  var EmojiPickerView = _ref => {
24637
24597
  var {
24638
24598
  // Basic props
@@ -24670,7 +24630,7 @@ var EmojiPickerView = _ref => {
24670
24630
  dropdownRef
24671
24631
  // Other props
24672
24632
  } = _ref,
24673
- props = _objectWithoutPropertiesLoose(_ref, _excluded$12);
24633
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$14);
24674
24634
  var {
24675
24635
  getColor
24676
24636
  } = appStudio.useTheme();
@@ -24859,7 +24819,7 @@ var MenubarItemStates = {
24859
24819
  }
24860
24820
  };
24861
24821
 
24862
- var _excluded$13 = ["children", "orientation", "size", "variant", "views"];
24822
+ var _excluded$15 = ["children", "orientation", "size", "variant", "views"];
24863
24823
  // Create context for the Menubar
24864
24824
  var MenubarContext = /*#__PURE__*/React.createContext({
24865
24825
  activeMenuId: null,
@@ -24896,7 +24856,7 @@ var MenubarRoot = _ref2 => {
24896
24856
  variant = 'default',
24897
24857
  views
24898
24858
  } = _ref2,
24899
- props = _objectWithoutPropertiesLoose(_ref2, _excluded$13);
24859
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded$15);
24900
24860
  var Container = orientation === 'horizontal' ? appStudio.Horizontal : appStudio.Vertical;
24901
24861
  return /*#__PURE__*/React__default.createElement(Container, Object.assign({
24902
24862
  role: "menubar",
@@ -25216,7 +25176,7 @@ var MenubarView = _ref8 => {
25216
25176
  })))))));
25217
25177
  };
25218
25178
 
25219
- var _excluded$14 = ["items", "orientation", "size", "variant", "defaultActiveMenuId", "defaultOpenMenuId", "views"];
25179
+ var _excluded$16 = ["items", "orientation", "size", "variant", "defaultActiveMenuId", "defaultOpenMenuId", "views"];
25220
25180
  /**
25221
25181
  * Menubar component for creating horizontal or vertical menu bars with dropdown menus.
25222
25182
  */
@@ -25230,7 +25190,7 @@ var MenubarComponent = _ref => {
25230
25190
  defaultOpenMenuId = null,
25231
25191
  views
25232
25192
  } = _ref,
25233
- props = _objectWithoutPropertiesLoose(_ref, _excluded$14);
25193
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$16);
25234
25194
  var {
25235
25195
  activeMenuId,
25236
25196
  setActiveMenuId,
@@ -25412,7 +25372,7 @@ var DisabledButtonStyles = {
25412
25372
  }
25413
25373
  };
25414
25374
 
25415
- var _excluded$15 = ["currentPage", "totalPages", "onPageChange", "pageSize", "pageSizeOptions", "onPageSizeChange", "showPageSizeSelector", "showPageInfo", "maxPageButtons", "showFirstLastButtons", "size", "variant", "shape", "visiblePageNumbers", "views"];
25375
+ var _excluded$17 = ["currentPage", "totalPages", "onPageChange", "pageSize", "pageSizeOptions", "onPageSizeChange", "showPageSizeSelector", "showPageInfo", "maxPageButtons", "showFirstLastButtons", "size", "variant", "shape", "visiblePageNumbers", "views"];
25416
25376
  var PaginationView = _ref => {
25417
25377
  var {
25418
25378
  currentPage,
@@ -25443,7 +25403,7 @@ var PaginationView = _ref => {
25443
25403
  visiblePageNumbers,
25444
25404
  views
25445
25405
  } = _ref,
25446
- props = _objectWithoutPropertiesLoose(_ref, _excluded$15);
25406
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$17);
25447
25407
  var handlePageChange = page => {
25448
25408
  if (page < 1 || page > totalPages || page === currentPage) {
25449
25409
  return;
@@ -25562,7 +25522,7 @@ var PaginationView = _ref => {
25562
25522
  }, option.label))))));
25563
25523
  };
25564
25524
 
25565
- var _excluded$16 = ["currentPage", "totalPages", "onPageChange", "pageSize", "pageSizeOptions", "onPageSizeChange", "showPageSizeSelector", "showPageInfo", "maxPageButtons", "showFirstLastButtons", "size", "variant", "shape", "views"];
25525
+ var _excluded$18 = ["currentPage", "totalPages", "onPageChange", "pageSize", "pageSizeOptions", "onPageSizeChange", "showPageSizeSelector", "showPageInfo", "maxPageButtons", "showFirstLastButtons", "size", "variant", "shape", "views"];
25566
25526
  /**
25567
25527
  * Pagination component for navigating through pages of content.
25568
25528
  */
@@ -25583,7 +25543,7 @@ var PaginationComponent = _ref => {
25583
25543
  shape = 'rounded',
25584
25544
  views
25585
25545
  } = _ref,
25586
- props = _objectWithoutPropertiesLoose(_ref, _excluded$16);
25546
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$18);
25587
25547
  var {
25588
25548
  visiblePageNumbers
25589
25549
  } = usePaginationState(currentPage, totalPages, maxPageButtons);
@@ -25607,55 +25567,6 @@ var PaginationComponent = _ref => {
25607
25567
  };
25608
25568
  var Pagination = PaginationComponent;
25609
25569
 
25610
- var _excluded$17 = ["value", "max", "color", "backgroundColor", "height", "radius", "views", "themeMode"];
25611
- var ProgressBarView = _ref => {
25612
- var {
25613
- value = 0,
25614
- max = 100,
25615
- color = 'theme.primary',
25616
- backgroundColor = 'color.gray.200',
25617
- height = 8,
25618
- radius = 4,
25619
- views,
25620
- themeMode: elementMode
25621
- } = _ref,
25622
- props = _objectWithoutPropertiesLoose(_ref, _excluded$17);
25623
- var {
25624
- getColor,
25625
- themeMode
25626
- } = appStudio.useTheme();
25627
- var currentMode = elementMode ? elementMode : themeMode;
25628
- var percentage = Math.min(100, Math.max(0, value / max * 100));
25629
- var trackColor = getColor(backgroundColor, {
25630
- themeMode: currentMode
25631
- });
25632
- var barColor = getColor(color, {
25633
- themeMode: currentMode
25634
- });
25635
- return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
25636
- role: "progressbar",
25637
- "aria-valuenow": value,
25638
- "aria-valuemin": 0,
25639
- "aria-valuemax": max,
25640
- width: "100%",
25641
- height: height,
25642
- backgroundColor: trackColor,
25643
- borderRadius: radius,
25644
- overflow: "hidden"
25645
- }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
25646
- width: percentage + "%",
25647
- height: "100%",
25648
- backgroundColor: barColor,
25649
- borderRadius: radius
25650
- }, views == null ? void 0 : views.bar)));
25651
- };
25652
-
25653
- /**
25654
- * ProgressBar component displays completion status of a task or process.
25655
- */
25656
- var ProgressBarComponent = props => (/*#__PURE__*/React__default.createElement(ProgressBarView, Object.assign({}, props)));
25657
- var ProgressBar = ProgressBarComponent;
25658
-
25659
25570
  /**
25660
25571
  * Separator Styles
25661
25572
  *
@@ -25709,7 +25620,7 @@ var DefaultSeparatorStyles = {
25709
25620
  }
25710
25621
  };
25711
25622
 
25712
- var _excluded$18 = ["orientation", "variant", "thickness", "color", "spacing", "label", "decorative", "views", "themeMode"];
25623
+ var _excluded$19 = ["orientation", "variant", "thickness", "color", "spacing", "label", "decorative", "views", "themeMode"];
25713
25624
  var SeparatorView = _ref => {
25714
25625
  var {
25715
25626
  orientation = 'horizontal',
@@ -25721,7 +25632,7 @@ var SeparatorView = _ref => {
25721
25632
  decorative = false,
25722
25633
  views
25723
25634
  } = _ref,
25724
- props = _objectWithoutPropertiesLoose(_ref, _excluded$18);
25635
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$19);
25725
25636
  // Access theme if needed for future enhancements
25726
25637
  var {
25727
25638
  themeMode
@@ -25789,7 +25700,7 @@ var SeparatorComponent = props => {
25789
25700
  var Separator = SeparatorComponent;
25790
25701
  var Divider = SeparatorComponent;
25791
25702
 
25792
- var _excluded$19 = ["isSupported", "isSharing", "onShare", "label", "children", "icon", "size", "isDisabled", "isLoading", "iconPosition", "disableWhenUnsupported"];
25703
+ var _excluded$1a = ["isSupported", "isSharing", "onShare", "label", "children", "icon", "size", "isDisabled", "isLoading", "iconPosition", "disableWhenUnsupported"];
25793
25704
  var ICON_SIZE_MAP = {
25794
25705
  xs: 12,
25795
25706
  sm: 14,
@@ -25812,7 +25723,7 @@ var ShareButtonView = _ref => {
25812
25723
  iconPosition,
25813
25724
  disableWhenUnsupported = true
25814
25725
  } = _ref,
25815
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$19);
25726
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$1a);
25816
25727
  var resolvedSize = size != null ? size : 'md';
25817
25728
  var resolvedIcon = icon != null ? icon : (/*#__PURE__*/React__default.createElement(ShareIcon, {
25818
25729
  widthHeight: ICON_SIZE_MAP[resolvedSize],
@@ -25914,14 +25825,14 @@ var useShareButton = props => {
25914
25825
  };
25915
25826
  };
25916
25827
 
25917
- var _excluded$1a = ["shareData", "onShareStart", "onShareSuccess", "onShareCancel", "onShareError", "onUnsupported", "onClick"];
25828
+ var _excluded$1b = ["shareData", "onShareStart", "onShareSuccess", "onShareCancel", "onShareError", "onUnsupported", "onClick"];
25918
25829
  var ShareButtonComponent = props => {
25919
25830
  var {
25920
25831
  isSupported,
25921
25832
  isSharing,
25922
25833
  handleShare
25923
25834
  } = useShareButton(props);
25924
- var viewProps = _objectWithoutPropertiesLoose(props, _excluded$1a);
25835
+ var viewProps = _objectWithoutPropertiesLoose(props, _excluded$1b);
25925
25836
  return /*#__PURE__*/React__default.createElement(ShareButtonView, Object.assign({}, viewProps, {
25926
25837
  isSupported: isSupported,
25927
25838
  isSharing: isSharing,
@@ -25930,82 +25841,6 @@ var ShareButtonComponent = props => {
25930
25841
  };
25931
25842
  var ShareButton = ShareButtonComponent;
25932
25843
 
25933
- var getThemes$2 = themeMode => {
25934
- return {
25935
- default: {
25936
- indicator: {
25937
- backgroundColor: 'color.gray.400'
25938
- },
25939
- label: {
25940
- color: 'color.gray.700'
25941
- }
25942
- },
25943
- info: {
25944
- indicator: {
25945
- backgroundColor: 'color.blue.500'
25946
- },
25947
- label: {
25948
- color: 'color.blue.700'
25949
- }
25950
- },
25951
- success: {
25952
- indicator: {
25953
- backgroundColor: 'color.green.500'
25954
- },
25955
- label: {
25956
- color: 'color.green.700'
25957
- }
25958
- },
25959
- warning: {
25960
- indicator: {
25961
- backgroundColor: 'color.orange.500'
25962
- },
25963
- label: {
25964
- color: 'color.orange.700'
25965
- }
25966
- },
25967
- error: {
25968
- indicator: {
25969
- backgroundColor: 'color.red.500'
25970
- },
25971
- label: {
25972
- color: 'color.red.700'
25973
- }
25974
- }
25975
- };
25976
- };
25977
-
25978
- var _excluded$1b = ["label", "status", "views", "themeMode"];
25979
- var StatusIndicatorView = _ref => {
25980
- var {
25981
- label,
25982
- status = 'default',
25983
- views,
25984
- themeMode: elementMode
25985
- } = _ref,
25986
- props = _objectWithoutPropertiesLoose(_ref, _excluded$1b);
25987
- var {
25988
- themeMode
25989
- } = appStudio.useTheme();
25990
- var themes = getThemes$2();
25991
- return /*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
25992
- alignItems: "center",
25993
- gap: 8,
25994
- role: "status-indicator"
25995
- }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
25996
- role: "status-dot",
25997
- width: "8px",
25998
- height: "8px",
25999
- borderRadius: "50%"
26000
- }, themes[status].indicator, views == null ? void 0 : views.indicator)), label && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
26001
- role: "status-label",
26002
- fontSize: "14px",
26003
- lineHeight: "20px"
26004
- }, themes[status].label, views == null ? void 0 : views.label), label)));
26005
- };
26006
-
26007
- var StatusIndicator = props => (/*#__PURE__*/React__default.createElement(StatusIndicatorView, Object.assign({}, props)));
26008
-
26009
25844
  var useSidebarState = function useSidebarState(defaultExpanded, expanded, onExpandedChange, breakpoint) {
26010
25845
  if (defaultExpanded === void 0) {
26011
25846
  defaultExpanded = true;
@@ -37661,7 +37496,6 @@ exports.BookmarkIcon = BookmarkIcon;
37661
37496
  exports.Button = Button;
37662
37497
  exports.Calendar = Calendar;
37663
37498
  exports.CalendarIcon = CalendarIcon;
37664
- exports.CalendarWeek = CalendarWeek;
37665
37499
  exports.CameraIcon = CameraIcon;
37666
37500
  exports.Card = Card;
37667
37501
  exports.Carousel = Carousel;
@@ -37752,6 +37586,7 @@ exports.Modal = Modal;
37752
37586
  exports.MoonIcon = MoonIcon;
37753
37587
  exports.NavigationMenu = NavigationMenu;
37754
37588
  exports.NotificationIcon = NotificationIcon;
37589
+ exports.OKR = OKR;
37755
37590
  exports.OTPInput = OTPInput;
37756
37591
  exports.OpenEyeIcon = OpenEyeIcon;
37757
37592
  exports.Pagination = Pagination;