@app-studio/web 0.9.35 → 0.9.37

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 (34) hide show
  1. package/dist/components/Calendar/Calendar/Calendar.props.d.ts +8 -0
  2. package/dist/components/KanbanBoard/KanbanBoard/KanbanBoard.props.d.ts +5 -0
  3. package/dist/components/KanbanBoard/KanbanBoard/KanbanBoard.state.d.ts +7 -3
  4. package/dist/components/OKR/OKR/OKR.props.d.ts +72 -0
  5. package/dist/components/OKR/OKR/OKR.style.d.ts +19 -0
  6. package/dist/components/OKR/OKR/OKR.view.d.ts +4 -0
  7. package/dist/components/OKR/OKR.d.ts +4 -0
  8. package/dist/components/index.d.ts +4 -0
  9. package/dist/pages/okr.page.d.ts +3 -0
  10. package/dist/web.cjs.development.js +774 -199
  11. package/dist/web.cjs.development.js.map +1 -1
  12. package/dist/web.cjs.production.min.js +1 -1
  13. package/dist/web.cjs.production.min.js.map +1 -1
  14. package/dist/web.esm.js +774 -200
  15. package/dist/web.esm.js.map +1 -1
  16. package/dist/web.umd.development.js +774 -199
  17. package/dist/web.umd.development.js.map +1 -1
  18. package/dist/web.umd.production.min.js +1 -1
  19. package/dist/web.umd.production.min.js.map +1 -1
  20. package/docs/README.md +2 -1
  21. package/docs/components/Calendar.mdx +3 -0
  22. package/docs/components/Flow.mdx +1 -0
  23. package/docs/components/KanbanBoard.mdx +4 -0
  24. package/docs/components/OKR.mdx +475 -0
  25. package/docs/components/Title.mdx +1 -0
  26. package/docs/components/Tree.mdx +1 -0
  27. package/docs/components.md +178 -0
  28. package/package.json +1 -1
  29. package/docs/api-reference/README.md +0 -103
  30. package/docs/api-reference/data-display/flow.md +0 -220
  31. package/docs/api-reference/data-display/tree.md +0 -210
  32. package/docs/api-reference/form/chat-input.md +0 -206
  33. package/docs/api-reference/utility/button.md +0 -145
  34. package/docs/api-reference/utility/title.md +0 -301
@@ -7569,7 +7569,12 @@
7569
7569
  var useKanbanBoardState = _ref => {
7570
7570
  var {
7571
7571
  columns: initialColumns,
7572
- onChange
7572
+ onChange,
7573
+ onCardMove,
7574
+ onCardCreate: onCardCreateProp,
7575
+ onCardDelete: onCardDeleteProp,
7576
+ onCardTitleChange: onCardTitleChangeProp,
7577
+ onCardDescriptionChange: onCardDescriptionChangeProp
7573
7578
  } = _ref;
7574
7579
  var [columns, setColumns] = React.useState(initialColumns);
7575
7580
  var [draggedCardId, setDraggedCardId] = React.useState(null);
@@ -7646,11 +7651,16 @@
7646
7651
  cardId
7647
7652
  };
7648
7653
  if (options != null && options.shouldCommit) {
7654
+ var originalSourceColumn = prevColumns.find(c => c.id === sourceColumnId);
7655
+ var originalTargetColumn = prevColumns.find(c => c.id === targetColumnId);
7656
+ if (card && originalSourceColumn && originalTargetColumn) {
7657
+ onCardMove == null || onCardMove(card, originalSourceColumn, originalTargetColumn);
7658
+ }
7649
7659
  onChange == null || onChange(updatedColumns);
7650
7660
  }
7651
7661
  return updatedColumns;
7652
7662
  });
7653
- }, [onChange]);
7663
+ }, [onChange, onCardMove]);
7654
7664
  var handleCardDragStart = React.useCallback((columnId, cardId, event) => {
7655
7665
  dragStateRef.current = {
7656
7666
  columnId,
@@ -7709,6 +7719,62 @@
7709
7719
  shouldCommit: true
7710
7720
  });
7711
7721
  }, [applyMove, getRelativeDropPosition]);
7722
+ var handleCardCreate = React.useCallback((card, column) => {
7723
+ if (onCardCreateProp) {
7724
+ onCardCreateProp(card, column);
7725
+ return;
7726
+ }
7727
+ setColumns(prevColumns => {
7728
+ var updatedColumns = prevColumns.map(col => col.id === column.id ? Object.assign({}, col, {
7729
+ cards: [...col.cards, card]
7730
+ }) : col);
7731
+ onChange == null || onChange(updatedColumns);
7732
+ return updatedColumns;
7733
+ });
7734
+ }, [onChange, onCardCreateProp]);
7735
+ var handleCardDelete = React.useCallback((card, column) => {
7736
+ if (onCardDeleteProp) {
7737
+ onCardDeleteProp(card, column);
7738
+ return;
7739
+ }
7740
+ setColumns(prevColumns => {
7741
+ var updatedColumns = prevColumns.map(col => col.id === column.id ? Object.assign({}, col, {
7742
+ cards: col.cards.filter(c => c.id !== card.id)
7743
+ }) : col);
7744
+ onChange == null || onChange(updatedColumns);
7745
+ return updatedColumns;
7746
+ });
7747
+ }, [onChange, onCardDeleteProp]);
7748
+ var handleCardTitleChange = React.useCallback((card, column, newTitle) => {
7749
+ if (onCardTitleChangeProp) {
7750
+ onCardTitleChangeProp(card, column, newTitle);
7751
+ return;
7752
+ }
7753
+ setColumns(prevColumns => {
7754
+ var updatedColumns = prevColumns.map(col => col.id === column.id ? Object.assign({}, col, {
7755
+ cards: col.cards.map(c => c.id === card.id ? Object.assign({}, c, {
7756
+ title: newTitle
7757
+ }) : c)
7758
+ }) : col);
7759
+ onChange == null || onChange(updatedColumns);
7760
+ return updatedColumns;
7761
+ });
7762
+ }, [onChange, onCardTitleChangeProp]);
7763
+ var handleCardDescriptionChange = React.useCallback((card, column, newDescription) => {
7764
+ if (onCardDescriptionChangeProp) {
7765
+ onCardDescriptionChangeProp(card, column, newDescription);
7766
+ return;
7767
+ }
7768
+ setColumns(prevColumns => {
7769
+ var updatedColumns = prevColumns.map(col => col.id === column.id ? Object.assign({}, col, {
7770
+ cards: col.cards.map(c => c.id === card.id ? Object.assign({}, c, {
7771
+ description: newDescription
7772
+ }) : c)
7773
+ }) : col);
7774
+ onChange == null || onChange(updatedColumns);
7775
+ return updatedColumns;
7776
+ });
7777
+ }, [onChange, onCardDescriptionChangeProp]);
7712
7778
  return {
7713
7779
  columns,
7714
7780
  draggedCardId,
@@ -7718,7 +7784,11 @@
7718
7784
  onColumnDragOver: handleColumnDragOver,
7719
7785
  onCardDragOver: handleCardDragOver,
7720
7786
  onColumnDrop: handleColumnDrop,
7721
- onCardDrop: handleCardDrop
7787
+ onCardDrop: handleCardDrop,
7788
+ onCardCreate: handleCardCreate,
7789
+ onCardDelete: handleCardDelete,
7790
+ onCardTitleChange: handleCardTitleChange,
7791
+ onCardDescriptionChange: handleCardDescriptionChange
7722
7792
  };
7723
7793
  };
7724
7794
 
@@ -7736,18 +7806,94 @@
7736
7806
  onColumnDragOver,
7737
7807
  onCardDragOver,
7738
7808
  onColumnDrop,
7739
- onCardDrop
7809
+ onCardDrop,
7810
+ onCardCreate,
7811
+ onCardDelete,
7812
+ onCardTitleChange,
7813
+ onCardDescriptionChange
7740
7814
  } = _ref;
7741
- var renderDefaultCard = React__default.useCallback(card => (/*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
7815
+ var [editingCardId, setEditingCardId] = React__default.useState(null);
7816
+ var [editingDescriptionCardId, setEditingDescriptionCardId] = React__default.useState(null);
7817
+ var [editedTitle, setEditedTitle] = React__default.useState('');
7818
+ var [editedDescription, setEditedDescription] = React__default.useState('');
7819
+ var handleTitleClick = React__default.useCallback(card => {
7820
+ setEditingCardId(card.id);
7821
+ setEditedTitle(card.title);
7822
+ }, []);
7823
+ var handleDescriptionClick = React__default.useCallback(card => {
7824
+ setEditingDescriptionCardId(card.id);
7825
+ setEditedDescription(card.description || '');
7826
+ }, []);
7827
+ var handleTitleChange = React__default.useCallback(event => {
7828
+ setEditedTitle(event.target.value);
7829
+ }, []);
7830
+ var handleDescriptionChange = React__default.useCallback(event => {
7831
+ setEditedDescription(event.target.value);
7832
+ }, []);
7833
+ var handleTitleBlur = React__default.useCallback((card, column) => {
7834
+ if (editingCardId === card.id) {
7835
+ onCardTitleChange == null || onCardTitleChange(card, column, editedTitle);
7836
+ setEditingCardId(null);
7837
+ }
7838
+ }, [editingCardId, editedTitle, onCardTitleChange]);
7839
+ var handleDescriptionBlur = React__default.useCallback((card, column) => {
7840
+ if (editingDescriptionCardId === card.id) {
7841
+ onCardDescriptionChange == null || onCardDescriptionChange(card, column, editedDescription);
7842
+ setEditingDescriptionCardId(null);
7843
+ }
7844
+ }, [editingDescriptionCardId, editedDescription, onCardDescriptionChange]);
7845
+ var handleTitleKeyDown = React__default.useCallback((event, card, column) => {
7846
+ if (event.key === 'Enter') {
7847
+ handleTitleBlur(card, column);
7848
+ }
7849
+ }, [handleTitleBlur]);
7850
+ var handleDescriptionKeyDown = React__default.useCallback((event, card, column) => {
7851
+ if (event.key === 'Enter' && !event.shiftKey) {
7852
+ event.preventDefault();
7853
+ handleDescriptionBlur(card, column);
7854
+ }
7855
+ }, [handleDescriptionBlur]);
7856
+ var renderDefaultCard = React__default.useCallback((card, column) => (/*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
7742
7857
  gap: 4,
7743
7858
  alignItems: "flex-start"
7744
- }, views == null ? void 0 : views.cardContent), /*#__PURE__*/React__default.createElement(Text, {
7859
+ }, views == null ? void 0 : views.cardContent), editingCardId === card.id ? (/*#__PURE__*/React__default.createElement("input", {
7860
+ type: "text",
7861
+ value: editedTitle,
7862
+ onChange: handleTitleChange,
7863
+ onBlur: () => handleTitleBlur(card, column),
7864
+ onKeyDown: event => handleTitleKeyDown(event, card, column),
7865
+ autoFocus: true,
7866
+ style: {
7867
+ border: '1px solid #d0d5dd',
7868
+ borderRadius: '4px',
7869
+ padding: '4px 8px',
7870
+ fontSize: '14px',
7871
+ fontWeight: '600',
7872
+ width: '100%'
7873
+ }
7874
+ })) : (/*#__PURE__*/React__default.createElement(Text, {
7745
7875
  weight: "semiBold",
7746
- size: "sm"
7747
- }, card.title), card.description && (/*#__PURE__*/React__default.createElement(Text, {
7748
7876
  size: "sm",
7749
- color: "#475467"
7750
- }, card.description)))), [views == null ? void 0 : views.cardContent]);
7877
+ onClick: () => handleTitleClick(card)
7878
+ }, card.title)), card.description && (editingDescriptionCardId === card.id ? (/*#__PURE__*/React__default.createElement("textarea", {
7879
+ value: editedDescription,
7880
+ onChange: handleDescriptionChange,
7881
+ onBlur: () => handleDescriptionBlur(card, column),
7882
+ onKeyDown: event => handleDescriptionKeyDown(event, card, column),
7883
+ autoFocus: true,
7884
+ style: {
7885
+ border: '1px solid #d0d5dd',
7886
+ borderRadius: '4px',
7887
+ padding: '4px 8px',
7888
+ fontSize: '14px',
7889
+ width: '100%',
7890
+ minHeight: '60px'
7891
+ }
7892
+ })) : (/*#__PURE__*/React__default.createElement(Text, {
7893
+ size: "sm",
7894
+ color: "#475467",
7895
+ onClick: () => handleDescriptionClick(card)
7896
+ }, card.description))))), [views == null ? void 0 : views.cardContent, editingCardId, editedTitle, editingDescriptionCardId, editedDescription, handleTitleBlur, handleTitleChange, handleTitleClick, handleTitleKeyDown, handleDescriptionBlur, handleDescriptionChange, handleDescriptionClick, handleDescriptionKeyDown]);
7751
7897
  return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
7752
7898
  display: "flex",
7753
7899
  alignItems: "flex-start",
@@ -7771,27 +7917,21 @@
7771
7917
  }, views == null ? void 0 : views.columnHeader), renderColumnHeader ? renderColumnHeader(column) : (/*#__PURE__*/React__default.createElement(Text, Object.assign({
7772
7918
  weight: "semiBold",
7773
7919
  size: "md"
7774
- }, views == null ? void 0 : views.columnTitle), column.title))), /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
7920
+ }, views == null ? void 0 : views.columnTitle), column.title)), /*#__PURE__*/React__default.createElement(appStudio.View, {
7921
+ onClick: () => onCardCreate == null ? void 0 : onCardCreate({
7922
+ id: "new-card-" + Date.now(),
7923
+ title: 'Nouvelle carte'
7924
+ }, column)
7925
+ }, /*#__PURE__*/React__default.createElement(PlusIcon, {
7926
+ widthHeight: 16
7927
+ }))), /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
7775
7928
  gap: 12,
7776
7929
  minHeight: 40,
7777
7930
  onDragOver: event => onColumnDragOver(column.id, event),
7778
7931
  onDrop: event => onColumnDrop(column.id, event),
7779
7932
  opacity: draggedCardId && hoveredColumnId === column.id ? 0.9 : undefined,
7780
7933
  transition: "all 0.15s ease-in-out"
7781
- }, views == null ? void 0 : views.columnBody), column.cards.length === 0 && (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
7782
- padding: 12,
7783
- borderWidth: "1px",
7784
- borderStyle: "dashed",
7785
- borderColor: "#d0d5dd",
7786
- borderRadius: 8,
7787
- backgroundColor: "rgba(255, 255, 255, 0.6)",
7788
- textAlign: "center",
7789
- color: "#667085",
7790
- fontSize: "14px"
7791
- }, views == null ? void 0 : views.emptyState), renderEmptyState ? renderEmptyState(column) : (/*#__PURE__*/React__default.createElement(Text, {
7792
- size: "sm",
7793
- color: "#667085"
7794
- }, "Drop cards here")))), column.cards.map(card => (/*#__PURE__*/React__default.createElement(appStudio.View, {
7934
+ }, views == null ? void 0 : views.columnBody), column.cards.map(card => (/*#__PURE__*/React__default.createElement(appStudio.View, {
7795
7935
  key: card.id,
7796
7936
  position: "relative"
7797
7937
  }, /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
@@ -7811,7 +7951,35 @@
7811
7951
  event.stopPropagation();
7812
7952
  onCardDrop(column.id, card.id, event);
7813
7953
  }
7814
- }, views == null ? void 0 : views.card), renderCard ? renderCard(card, column) : renderDefaultCard(card)))))), column.footer && (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, views == null ? void 0 : views.columnFooter), column.footer))))));
7954
+ }, views == null ? void 0 : views.card), /*#__PURE__*/React__default.createElement(appStudio.View, {
7955
+ display: "flex",
7956
+ justifyContent: "space-between",
7957
+ alignItems: "flex-start"
7958
+ }, /*#__PURE__*/React__default.createElement(appStudio.View, {
7959
+ flexGrow: 1
7960
+ }, renderCard ? renderCard(card, column) : renderDefaultCard(card, column)), /*#__PURE__*/React__default.createElement(appStudio.View, {
7961
+ onClick: () => onCardDelete == null ? void 0 : onCardDelete(card, column)
7962
+ }, /*#__PURE__*/React__default.createElement(TrashIcon, {
7963
+ widthHeight: 16
7964
+ }))))))), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
7965
+ padding: 12,
7966
+ borderWidth: "1px",
7967
+ borderStyle: "dashed",
7968
+ borderColor: "#d0d5dd",
7969
+ borderRadius: 8,
7970
+ backgroundColor: "rgba(255, 255, 255, 0.6)",
7971
+ textAlign: "center",
7972
+ color: "#667085",
7973
+ fontSize: "14px"
7974
+ }, views == null ? void 0 : views.emptyState, {
7975
+ onClick: () => onCardCreate == null ? void 0 : onCardCreate({
7976
+ id: "new-card-" + Date.now(),
7977
+ title: 'Nouvelle carte'
7978
+ }, column)
7979
+ }), renderEmptyState ? renderEmptyState(column) : (/*#__PURE__*/React__default.createElement(Text, {
7980
+ size: "sm",
7981
+ color: "#667085"
7982
+ }, "Create a new card")))), column.footer && (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, views == null ? void 0 : views.columnFooter), column.footer))))));
7815
7983
  };
7816
7984
 
7817
7985
  var KanbanBoardComponent = props => {
@@ -8238,11 +8406,111 @@
8238
8406
  border: 'none'
8239
8407
  };
8240
8408
 
8241
- var ResizeHandle = _ref => {
8409
+ var EventContent = _ref => {
8410
+ var {
8411
+ event,
8412
+ onTitleChange,
8413
+ onDescriptionChange,
8414
+ onEventDelete
8415
+ } = _ref;
8416
+ var [isEditingTitle, setIsEditingTitle] = React.useState(false);
8417
+ var [editedTitle, setEditedTitle] = React.useState(event.title);
8418
+ var [isEditingDescription, setIsEditingDescription] = React.useState(false);
8419
+ var [editedDescription, setEditedDescription] = React.useState(event.description || '');
8420
+ var handleTitleClick = React.useCallback(() => {
8421
+ setIsEditingTitle(true);
8422
+ setEditedTitle(event.title);
8423
+ }, [event.title]);
8424
+ var handleDescriptionClick = React.useCallback(() => {
8425
+ setIsEditingDescription(true);
8426
+ setEditedDescription(event.description || '');
8427
+ }, [event.description]);
8428
+ var handleTitleChange = React.useCallback(e => {
8429
+ setEditedTitle(e.target.value);
8430
+ }, []);
8431
+ var handleDescriptionChange = React.useCallback(e => {
8432
+ setEditedDescription(e.target.value);
8433
+ }, []);
8434
+ var handleTitleBlur = React.useCallback(() => {
8435
+ if (isEditingTitle) {
8436
+ onTitleChange(event, editedTitle);
8437
+ setIsEditingTitle(false);
8438
+ }
8439
+ }, [isEditingTitle, onTitleChange, event, editedTitle]);
8440
+ var handleDescriptionBlur = React.useCallback(() => {
8441
+ if (isEditingDescription) {
8442
+ onDescriptionChange(event, editedDescription);
8443
+ setIsEditingDescription(false);
8444
+ }
8445
+ }, [isEditingDescription, onDescriptionChange, event, editedDescription]);
8446
+ var handleTitleKeyDown = React.useCallback(e => {
8447
+ if (e.key === 'Enter') {
8448
+ handleTitleBlur();
8449
+ }
8450
+ }, [handleTitleBlur]);
8451
+ var handleDescriptionKeyDown = React.useCallback(e => {
8452
+ if (e.key === 'Enter' && !e.shiftKey) {
8453
+ e.preventDefault();
8454
+ handleDescriptionBlur();
8455
+ }
8456
+ }, [handleDescriptionBlur]);
8457
+ return /*#__PURE__*/React__default.createElement(appStudio.Horizontal, {
8458
+ overflow: "hidden",
8459
+ textOverflow: "ellipsis",
8460
+ whiteSpace: "nowrap",
8461
+ width: "100%",
8462
+ justifyContent: "space-between"
8463
+ }, isEditingTitle ? (/*#__PURE__*/React__default.createElement("input", {
8464
+ type: "text",
8465
+ value: editedTitle,
8466
+ onChange: handleTitleChange,
8467
+ onBlur: handleTitleBlur,
8468
+ onKeyDown: handleTitleKeyDown,
8469
+ autoFocus: true,
8470
+ style: {
8471
+ border: '1px solid #d0d5dd',
8472
+ borderRadius: '4px',
8473
+ padding: '2px 4px',
8474
+ fontSize: '11px',
8475
+ fontWeight: '500',
8476
+ width: '100%'
8477
+ }
8478
+ })) : (/*#__PURE__*/React__default.createElement(appStudio.Text, {
8479
+ fontSize: 11,
8480
+ fontWeight: 500,
8481
+ onClick: handleTitleClick
8482
+ }, event.title)), event.description && (isEditingDescription ? (/*#__PURE__*/React__default.createElement("textarea", {
8483
+ value: editedDescription,
8484
+ onChange: handleDescriptionChange,
8485
+ onBlur: handleDescriptionBlur,
8486
+ onKeyDown: handleDescriptionKeyDown,
8487
+ autoFocus: true,
8488
+ style: {
8489
+ border: '1px solid #d0d5dd',
8490
+ borderRadius: '4px',
8491
+ padding: '2px 4px',
8492
+ fontSize: '11px',
8493
+ width: '100%',
8494
+ minHeight: '40px',
8495
+ marginTop: '4px'
8496
+ }
8497
+ })) : (/*#__PURE__*/React__default.createElement(appStudio.Text, {
8498
+ fontSize: 11,
8499
+ color: "color.gray.600",
8500
+ onClick: handleDescriptionClick
8501
+ }, event.description))), /*#__PURE__*/React__default.createElement(appStudio.Center, {
8502
+ onClick: () => onEventDelete(event),
8503
+ cursor: "pointer",
8504
+ marginLeft: 4
8505
+ }, /*#__PURE__*/React__default.createElement(TrashIcon, {
8506
+ widthHeight: 12
8507
+ })));
8508
+ };
8509
+ var ResizeHandle = _ref2 => {
8242
8510
  var {
8243
8511
  direction,
8244
8512
  onMouseDown
8245
- } = _ref;
8513
+ } = _ref2;
8246
8514
  var [isHovered, setIsHovered] = React.useState(false);
8247
8515
  return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
8248
8516
  position: "absolute",
@@ -8267,7 +8535,7 @@
8267
8535
  var MONTH_EVENT_ROW_HEIGHT = 22;
8268
8536
  var MONTH_EVENT_ROW_GAP = 4;
8269
8537
  var MONTH_EVENT_TOP_OFFSET = 32;
8270
- var Calendar = _ref2 => {
8538
+ var Calendar = _ref3 => {
8271
8539
  var {
8272
8540
  initialDate = new Date(),
8273
8541
  initialView = 'month',
@@ -8279,11 +8547,14 @@
8279
8547
  onDateChange,
8280
8548
  onViewChange,
8281
8549
  onEventAdd,
8550
+ onEventTitleChange,
8551
+ onEventDescriptionChange,
8552
+ onEventDelete,
8282
8553
  views = {},
8283
8554
  width = '100%',
8284
8555
  maxWidth = 1200,
8285
8556
  weekStartsOn = 0
8286
- } = _ref2;
8557
+ } = _ref3;
8287
8558
  var {
8288
8559
  getColor
8289
8560
  } = appStudio.useTheme();
@@ -8310,6 +8581,31 @@
8310
8581
  React__default.useEffect(() => {
8311
8582
  setLocalEvents(events);
8312
8583
  }, [events]);
8584
+ var handleEventTitleChange = React.useCallback((event, newTitle) => {
8585
+ if (onEventTitleChange) {
8586
+ onEventTitleChange(event, newTitle);
8587
+ return;
8588
+ }
8589
+ setLocalEvents(prevEvents => prevEvents.map(ev => ev.id === event.id ? Object.assign({}, ev, {
8590
+ title: newTitle
8591
+ }) : ev));
8592
+ }, [onEventTitleChange]);
8593
+ var handleEventDescriptionChange = React.useCallback((event, newDescription) => {
8594
+ if (onEventDescriptionChange) {
8595
+ onEventDescriptionChange(event, newDescription);
8596
+ return;
8597
+ }
8598
+ setLocalEvents(prevEvents => prevEvents.map(ev => ev.id === event.id ? Object.assign({}, ev, {
8599
+ description: newDescription
8600
+ }) : ev));
8601
+ }, [onEventDescriptionChange]);
8602
+ var handleEventDelete = React.useCallback(event => {
8603
+ if (onEventDelete) {
8604
+ onEventDelete(event);
8605
+ return;
8606
+ }
8607
+ setLocalEvents(prevEvents => prevEvents.filter(ev => ev.id !== event.id));
8608
+ }, [onEventDelete]);
8313
8609
  // Get the month start for current date
8314
8610
  var currentMonth = React.useMemo(() => getFirstDayOfMonth(currentDate), [currentDate]);
8315
8611
  // Generate calendar dates based on view
@@ -8670,12 +8966,12 @@
8670
8966
  top: event.segmentRow * (MONTH_EVENT_ROW_HEIGHT + MONTH_EVENT_ROW_GAP) + "px",
8671
8967
  onMouseDown: e => handleEventMouseDown(e, event),
8672
8968
  title: event.title
8673
- }, views.event), /*#__PURE__*/React__default.createElement(appStudio.View, {
8674
- overflow: "hidden",
8675
- textOverflow: "ellipsis",
8676
- whiteSpace: "nowrap",
8677
- width: "100%"
8678
- }, event.title), showLeftHandle && (/*#__PURE__*/React__default.createElement(ResizeHandle, {
8969
+ }, views.event), /*#__PURE__*/React__default.createElement(EventContent, {
8970
+ event: event,
8971
+ onTitleChange: handleEventTitleChange,
8972
+ onDescriptionChange: handleEventDescriptionChange,
8973
+ onEventDelete: handleEventDelete
8974
+ }), showLeftHandle && (/*#__PURE__*/React__default.createElement(ResizeHandle, {
8679
8975
  direction: "left",
8680
8976
  onMouseDown: e => handleResizeStart(e, event, 'left')
8681
8977
  })), showRightHandle && (/*#__PURE__*/React__default.createElement(ResizeHandle, {
@@ -8736,12 +9032,12 @@
8736
9032
  userSelect: "none",
8737
9033
  onMouseDown: e => handleEventMouseDown(e, event),
8738
9034
  title: event.title
8739
- }, views.event), /*#__PURE__*/React__default.createElement(appStudio.View, {
8740
- overflow: "hidden",
8741
- textOverflow: "ellipsis",
8742
- whiteSpace: "nowrap",
8743
- width: "100%"
8744
- }, event.title), /*#__PURE__*/React__default.createElement(ResizeHandle, {
9035
+ }, views.event), /*#__PURE__*/React__default.createElement(EventContent, {
9036
+ event: event,
9037
+ onTitleChange: handleEventTitleChange,
9038
+ onDescriptionChange: handleEventDescriptionChange,
9039
+ onEventDelete: handleEventDelete
9040
+ }), /*#__PURE__*/React__default.createElement(ResizeHandle, {
8745
9041
  direction: "left",
8746
9042
  onMouseDown: e => handleResizeStart(e, event, 'left')
8747
9043
  }), /*#__PURE__*/React__default.createElement(ResizeHandle, {
@@ -8788,7 +9084,7 @@
8788
9084
  }, views.timeSlot), dayEvents.filter(event => {
8789
9085
  // Simple check if event starts in this hour
8790
9086
  if (event.start.includes('T')) {
8791
- var eventHour = parseInt(event.start.split('T')[1].split(':')[0]);
9087
+ var eventHour = parseInt(event.start.split('T').split(':'));
8792
9088
  return eventHour === hour;
8793
9089
  }
8794
9090
  return false;
@@ -8801,7 +9097,12 @@
8801
9097
  borderLeftColor: colorConfig.border,
8802
9098
  color: colorConfig.text,
8803
9099
  marginBottom: 4
8804
- }, views.event), event.title);
9100
+ }, views.event), /*#__PURE__*/React__default.createElement(EventContent, {
9101
+ event: event,
9102
+ onTitleChange: handleEventTitleChange,
9103
+ onDescriptionChange: handleEventDescriptionChange,
9104
+ onEventDelete: handleEventDelete
9105
+ }));
8805
9106
  })));
8806
9107
  }));
8807
9108
  };
@@ -19493,6 +19794,404 @@
19493
19794
  NavigationMenu.Content = NavigationMenuContent;
19494
19795
  NavigationMenu.Link = NavigationMenuLink;
19495
19796
 
19797
+ var _excluded$X = ["value", "max", "color", "backgroundColor", "height", "radius", "views", "themeMode"];
19798
+ var ProgressBarView = _ref => {
19799
+ var {
19800
+ value = 0,
19801
+ max = 100,
19802
+ color = 'theme.primary',
19803
+ backgroundColor = 'color.gray.200',
19804
+ height = 8,
19805
+ radius = 4,
19806
+ views,
19807
+ themeMode: elementMode
19808
+ } = _ref,
19809
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$X);
19810
+ var {
19811
+ getColor,
19812
+ themeMode
19813
+ } = appStudio.useTheme();
19814
+ var currentMode = elementMode ? elementMode : themeMode;
19815
+ var percentage = Math.min(100, Math.max(0, value / max * 100));
19816
+ var trackColor = getColor(backgroundColor, {
19817
+ themeMode: currentMode
19818
+ });
19819
+ var barColor = getColor(color, {
19820
+ themeMode: currentMode
19821
+ });
19822
+ return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
19823
+ role: "progressbar",
19824
+ "aria-valuenow": value,
19825
+ "aria-valuemin": 0,
19826
+ "aria-valuemax": max,
19827
+ width: "100%",
19828
+ height: height,
19829
+ backgroundColor: trackColor,
19830
+ borderRadius: radius,
19831
+ overflow: "hidden"
19832
+ }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
19833
+ width: percentage + "%",
19834
+ height: "100%",
19835
+ backgroundColor: barColor,
19836
+ borderRadius: radius
19837
+ }, views == null ? void 0 : views.bar)));
19838
+ };
19839
+
19840
+ /**
19841
+ * ProgressBar component displays completion status of a task or process.
19842
+ */
19843
+ var ProgressBarComponent = props => (/*#__PURE__*/React__default.createElement(ProgressBarView, Object.assign({}, props)));
19844
+ var ProgressBar = ProgressBarComponent;
19845
+
19846
+ var getThemes$2 = themeMode => {
19847
+ return {
19848
+ default: {
19849
+ indicator: {
19850
+ backgroundColor: 'color.gray.400'
19851
+ },
19852
+ label: {
19853
+ color: 'color.gray.700'
19854
+ }
19855
+ },
19856
+ info: {
19857
+ indicator: {
19858
+ backgroundColor: 'color.blue.500'
19859
+ },
19860
+ label: {
19861
+ color: 'color.blue.700'
19862
+ }
19863
+ },
19864
+ success: {
19865
+ indicator: {
19866
+ backgroundColor: 'color.green.500'
19867
+ },
19868
+ label: {
19869
+ color: 'color.green.700'
19870
+ }
19871
+ },
19872
+ warning: {
19873
+ indicator: {
19874
+ backgroundColor: 'color.orange.500'
19875
+ },
19876
+ label: {
19877
+ color: 'color.orange.700'
19878
+ }
19879
+ },
19880
+ error: {
19881
+ indicator: {
19882
+ backgroundColor: 'color.red.500'
19883
+ },
19884
+ label: {
19885
+ color: 'color.red.700'
19886
+ }
19887
+ }
19888
+ };
19889
+ };
19890
+
19891
+ var _excluded$Y = ["label", "status", "views", "themeMode"];
19892
+ var StatusIndicatorView = _ref => {
19893
+ var {
19894
+ label,
19895
+ status = 'default',
19896
+ views,
19897
+ themeMode: elementMode
19898
+ } = _ref,
19899
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$Y);
19900
+ var {
19901
+ themeMode
19902
+ } = appStudio.useTheme();
19903
+ var themes = getThemes$2();
19904
+ return /*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
19905
+ alignItems: "center",
19906
+ gap: 8,
19907
+ role: "status-indicator"
19908
+ }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
19909
+ role: "status-dot",
19910
+ width: "8px",
19911
+ height: "8px",
19912
+ borderRadius: "50%"
19913
+ }, themes[status].indicator, views == null ? void 0 : views.indicator)), label && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
19914
+ role: "status-label",
19915
+ fontSize: "14px",
19916
+ lineHeight: "20px"
19917
+ }, themes[status].label, views == null ? void 0 : views.label), label)));
19918
+ };
19919
+
19920
+ var StatusIndicator = props => (/*#__PURE__*/React__default.createElement(StatusIndicatorView, Object.assign({}, props)));
19921
+
19922
+ var getOKRTheme = mode => {
19923
+ var isDark = mode === 'dark';
19924
+ return {
19925
+ container: {
19926
+ width: '100%',
19927
+ gap: 16
19928
+ },
19929
+ objectiveCard: {
19930
+ backgroundColor: isDark ? 'rgba(15, 23, 42, 0.6)' : 'color.white',
19931
+ borderColor: isDark ? 'rgba(148, 163, 184, 0.24)' : 'color.gray.200',
19932
+ borderWidth: '1px',
19933
+ borderStyle: 'solid',
19934
+ borderRadius: 16,
19935
+ padding: 24,
19936
+ gap: 20
19937
+ },
19938
+ tag: {
19939
+ display: 'inline-flex',
19940
+ alignItems: 'center',
19941
+ padding: '4px 10px',
19942
+ borderRadius: 999,
19943
+ backgroundColor: isDark ? 'rgba(148, 163, 184, 0.16)' : 'color.gray.100'
19944
+ },
19945
+ keyResultItem: {
19946
+ padding: 16,
19947
+ borderRadius: 12,
19948
+ borderWidth: '1px',
19949
+ borderStyle: 'solid',
19950
+ borderColor: isDark ? 'rgba(148, 163, 184, 0.18)' : 'color.gray.200',
19951
+ backgroundColor: isDark ? 'rgba(15, 23, 42, 0.35)' : 'color.gray.50',
19952
+ gap: 12
19953
+ },
19954
+ divider: {
19955
+ height: 1,
19956
+ backgroundColor: isDark ? 'rgba(148, 163, 184, 0.24)' : 'color.gray.200',
19957
+ width: '100%'
19958
+ }
19959
+ };
19960
+ };
19961
+ var STATUS_METADATA = {
19962
+ notStarted: {
19963
+ indicator: 'info',
19964
+ label: 'Not started'
19965
+ },
19966
+ onTrack: {
19967
+ indicator: 'success',
19968
+ label: 'On track'
19969
+ },
19970
+ atRisk: {
19971
+ indicator: 'warning',
19972
+ label: 'At risk'
19973
+ },
19974
+ offTrack: {
19975
+ indicator: 'error',
19976
+ label: 'Off track'
19977
+ },
19978
+ achieved: {
19979
+ indicator: 'success',
19980
+ label: 'Achieved'
19981
+ }
19982
+ };
19983
+ var deriveStatusFromProgress = progress => {
19984
+ if (progress >= 100) {
19985
+ return 'achieved';
19986
+ }
19987
+ if (progress >= 70) {
19988
+ return 'onTrack';
19989
+ }
19990
+ if (progress >= 40) {
19991
+ return 'atRisk';
19992
+ }
19993
+ if (progress > 0) {
19994
+ return 'offTrack';
19995
+ }
19996
+ return 'notStarted';
19997
+ };
19998
+ var clampProgress = value => {
19999
+ if (typeof value !== 'number' || Number.isNaN(value)) {
20000
+ return 0;
20001
+ }
20002
+ return Math.max(0, Math.min(100, Math.round(value)));
20003
+ };
20004
+
20005
+ var formatPercentage = value => value + "%";
20006
+ var formatConfidence = confidence => {
20007
+ if (!confidence) {
20008
+ return undefined;
20009
+ }
20010
+ return confidence.charAt(0).toUpperCase() + confidence.slice(1);
20011
+ };
20012
+ var getObjectiveProgress = objective => {
20013
+ if (typeof objective.progress === 'number') {
20014
+ return clampProgress(objective.progress);
20015
+ }
20016
+ if (!objective.keyResults.length) {
20017
+ return 0;
20018
+ }
20019
+ var total = objective.keyResults.reduce((acc, keyResult) => {
20020
+ var _keyResult$progress;
20021
+ return acc + ((_keyResult$progress = keyResult.progress) != null ? _keyResult$progress : 0);
20022
+ }, 0);
20023
+ return clampProgress(total / objective.keyResults.length);
20024
+ };
20025
+ var renderStatusIndicator = (status, themeMode, views) => {
20026
+ var metadata = STATUS_METADATA[status];
20027
+ return /*#__PURE__*/React__default.createElement(StatusIndicator, {
20028
+ themeMode: themeMode,
20029
+ status: metadata.indicator,
20030
+ label: metadata.label,
20031
+ views: views
20032
+ });
20033
+ };
20034
+ var OKRView = _ref => {
20035
+ var {
20036
+ objectives,
20037
+ themeMode: elementMode,
20038
+ views,
20039
+ onKeyResultClick,
20040
+ renderObjectiveFooter,
20041
+ renderKeyResultFooter
20042
+ } = _ref;
20043
+ var {
20044
+ themeMode
20045
+ } = appStudio.useTheme();
20046
+ var currentMode = elementMode || themeMode || 'light';
20047
+ var theme = getOKRTheme(currentMode);
20048
+ var secondaryTextColor = currentMode === 'dark' ? 'color.gray.200' : 'color.gray.600';
20049
+ var subtleTextColor = currentMode === 'dark' ? 'color.gray.300' : 'color.gray.500';
20050
+ var tagTextColor = currentMode === 'dark' ? 'color.gray.100' : 'color.gray.700';
20051
+ return /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({}, theme.container, views == null ? void 0 : views.container), objectives.map(objective => {
20052
+ var _objective$status, _objective$tags, _views$objectiveProgr, _views$objectiveProgr2, _views$objectiveProgr3, _views$objectiveProgr4;
20053
+ var objectiveProgress = getObjectiveProgress(objective);
20054
+ var objectiveStatus = (_objective$status = objective.status) != null ? _objective$status : deriveStatusFromProgress(objectiveProgress);
20055
+ var objectiveFooter = renderObjectiveFooter == null ? void 0 : renderObjectiveFooter(objective);
20056
+ return /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
20057
+ key: objective.id
20058
+ }, theme.objectiveCard, views == null ? void 0 : views.objectiveCard), /*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
20059
+ justifyContent: "space-between",
20060
+ alignItems: "flex-start",
20061
+ flexWrap: "wrap",
20062
+ gap: 16
20063
+ }, views == null ? void 0 : views.objectiveHeader), /*#__PURE__*/React__default.createElement(appStudio.Vertical, {
20064
+ gap: 10,
20065
+ minWidth: 240
20066
+ }, /*#__PURE__*/React__default.createElement(Text, Object.assign({
20067
+ size: "lg",
20068
+ weight: "semiBold"
20069
+ }, views == null ? void 0 : views.objectiveTitle), objective.title), objective.description && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
20070
+ size: "sm",
20071
+ color: secondaryTextColor
20072
+ }, views == null ? void 0 : views.objectiveDescription), objective.description)), (_objective$tags = objective.tags) != null && _objective$tags.length ? (/*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
20073
+ gap: 8,
20074
+ flexWrap: "wrap"
20075
+ }, views == null ? void 0 : views.objectiveTags), objective.tags.map(tag => (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
20076
+ key: tag
20077
+ }, theme.tag, views == null ? void 0 : views.tag), /*#__PURE__*/React__default.createElement(Text, Object.assign({
20078
+ size: "xs",
20079
+ weight: "medium",
20080
+ color: tagTextColor
20081
+ }, views == null ? void 0 : views.tagText), tag)))))) : null), /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
20082
+ gap: 8,
20083
+ alignItems: "flex-end",
20084
+ minWidth: 160
20085
+ }, views == null ? void 0 : views.objectiveMeta), objective.owner && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
20086
+ size: "sm",
20087
+ color: secondaryTextColor
20088
+ }, views == null ? void 0 : views.objectiveOwner), "Owner: ", objective.owner)), objective.timeframe && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
20089
+ size: "sm",
20090
+ color: subtleTextColor
20091
+ }, 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({
20092
+ gap: 8
20093
+ }, views == null ? void 0 : views.objectiveProgressSection), /*#__PURE__*/React__default.createElement(appStudio.Horizontal, {
20094
+ justifyContent: "space-between",
20095
+ alignItems: "center"
20096
+ }, /*#__PURE__*/React__default.createElement(Text, Object.assign({
20097
+ size: "sm",
20098
+ color: secondaryTextColor
20099
+ }, views == null ? void 0 : views.objectiveProgressLabel), "Progress"), /*#__PURE__*/React__default.createElement(Text, Object.assign({
20100
+ size: "sm",
20101
+ weight: "semiBold"
20102
+ }, views == null ? void 0 : views.objectiveProgressValue), formatPercentage(objectiveProgress))), /*#__PURE__*/React__default.createElement(ProgressBar, {
20103
+ value: objectiveProgress,
20104
+ max: 100,
20105
+ views: {
20106
+ container: Object.assign({
20107
+ width: '100%'
20108
+ }, (_views$objectiveProgr = views == null || (_views$objectiveProgr2 = views.objectiveProgressBar) == null ? void 0 : _views$objectiveProgr2.container) != null ? _views$objectiveProgr : {}),
20109
+ bar: Object.assign({}, (_views$objectiveProgr3 = views == null || (_views$objectiveProgr4 = views.objectiveProgressBar) == null ? void 0 : _views$objectiveProgr4.bar) != null ? _views$objectiveProgr3 : {})
20110
+ }
20111
+ })), /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
20112
+ gap: 16
20113
+ }, views == null ? void 0 : views.keyResultList), objective.keyResults.map((keyResult, index) => {
20114
+ var _keyResult$status, _keyResult$tags, _views$keyResultProgr, _views$keyResultProgr2, _views$keyResultProgr3, _views$keyResultProgr4;
20115
+ var progress = clampProgress(keyResult.progress);
20116
+ var keyResultStatus = (_keyResult$status = keyResult.status) != null ? _keyResult$status : deriveStatusFromProgress(progress);
20117
+ var keyResultFooter = renderKeyResultFooter == null ? void 0 : renderKeyResultFooter(keyResult, objective);
20118
+ var showDivider = index < objective.keyResults.length - 1;
20119
+ return /*#__PURE__*/React__default.createElement(appStudio.Vertical, {
20120
+ key: keyResult.id,
20121
+ gap: 12
20122
+ }, /*#__PURE__*/React__default.createElement(appStudio.Vertical, Object.assign({
20123
+ role: onKeyResultClick ? 'button' : undefined,
20124
+ cursor: onKeyResultClick ? 'pointer' : undefined,
20125
+ onClick: onKeyResultClick ? () => onKeyResultClick(keyResult, objective) : undefined
20126
+ }, theme.keyResultItem, views == null ? void 0 : views.keyResultItem), /*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
20127
+ justifyContent: "space-between",
20128
+ alignItems: "flex-start",
20129
+ flexWrap: "wrap",
20130
+ gap: 16
20131
+ }, views == null ? void 0 : views.keyResultHeader), /*#__PURE__*/React__default.createElement(appStudio.Vertical, {
20132
+ gap: 8,
20133
+ minWidth: 220
20134
+ }, /*#__PURE__*/React__default.createElement(Text, Object.assign({
20135
+ size: "md",
20136
+ weight: "medium"
20137
+ }, views == null ? void 0 : views.keyResultTitle), keyResult.title), keyResult.description && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
20138
+ size: "sm",
20139
+ color: secondaryTextColor
20140
+ }, 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({
20141
+ gap: 12,
20142
+ flexWrap: "wrap"
20143
+ }, views == null ? void 0 : views.keyResultMeta), keyResult.metric && (/*#__PURE__*/React__default.createElement(Text, {
20144
+ size: "xs",
20145
+ color: secondaryTextColor
20146
+ }, "Metric: ", keyResult.metric)), keyResult.current && (/*#__PURE__*/React__default.createElement(Text, {
20147
+ size: "xs",
20148
+ color: secondaryTextColor
20149
+ }, "Current: ", keyResult.current)), keyResult.target && (/*#__PURE__*/React__default.createElement(Text, {
20150
+ size: "xs",
20151
+ color: secondaryTextColor
20152
+ }, "Target: ", keyResult.target)), keyResult.confidence && (/*#__PURE__*/React__default.createElement(Text, {
20153
+ size: "xs",
20154
+ color: secondaryTextColor
20155
+ }, "Confidence:", ' ', formatConfidence(keyResult.confidence))), keyResult.lastUpdated && (/*#__PURE__*/React__default.createElement(Text, {
20156
+ size: "xs",
20157
+ color: subtleTextColor
20158
+ }, "Updated: ", keyResult.lastUpdated)))), (_keyResult$tags = keyResult.tags) != null && _keyResult$tags.length ? (/*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
20159
+ gap: 8,
20160
+ flexWrap: "wrap"
20161
+ }, views == null ? void 0 : views.keyResultTags), keyResult.tags.map(tag => (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
20162
+ key: tag
20163
+ }, theme.tag, views == null ? void 0 : views.keyResultTag), /*#__PURE__*/React__default.createElement(Text, Object.assign({
20164
+ size: "xs",
20165
+ weight: "medium",
20166
+ color: tagTextColor
20167
+ }, views == null ? void 0 : views.keyResultTagText), tag)))))) : null), /*#__PURE__*/React__default.createElement(appStudio.Vertical, {
20168
+ gap: 8,
20169
+ alignItems: "flex-end"
20170
+ }, keyResult.owner && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
20171
+ size: "xs",
20172
+ color: secondaryTextColor
20173
+ }, 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({
20174
+ alignItems: "center",
20175
+ gap: 12
20176
+ }, views == null ? void 0 : views.keyResultProgressSection), /*#__PURE__*/React__default.createElement(ProgressBar, {
20177
+ value: progress,
20178
+ max: 100,
20179
+ views: {
20180
+ container: Object.assign({
20181
+ width: '100%'
20182
+ }, (_views$keyResultProgr = views == null || (_views$keyResultProgr2 = views.keyResultProgressBar) == null ? void 0 : _views$keyResultProgr2.container) != null ? _views$keyResultProgr : {}),
20183
+ bar: Object.assign({}, (_views$keyResultProgr3 = views == null || (_views$keyResultProgr4 = views.keyResultProgressBar) == null ? void 0 : _views$keyResultProgr4.bar) != null ? _views$keyResultProgr3 : {})
20184
+ }
20185
+ }), /*#__PURE__*/React__default.createElement(Text, Object.assign({
20186
+ size: "xs",
20187
+ weight: "semiBold"
20188
+ }, 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);
20189
+ })), objectiveFooter ? (/*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({}, views == null ? void 0 : views.footer), objectiveFooter)) : null);
20190
+ }));
20191
+ };
20192
+
20193
+ var OKR = props => /*#__PURE__*/React__default.createElement(OKRView, Object.assign({}, props));
20194
+
19496
20195
  var defaultStyles = {};
19497
20196
  // Create a context that includes both styles and the onClick function
19498
20197
  var TableContext = /*#__PURE__*/React.createContext({
@@ -20275,7 +20974,7 @@
20275
20974
  })
20276
20975
  };
20277
20976
 
20278
- var _excluded$X = ["text", "typingSpeed", "pauseTime", "onComplete", "showCursor", "cursorColor", "textStyle", "as"];
20977
+ var _excluded$Z = ["text", "typingSpeed", "pauseTime", "onComplete", "showCursor", "cursorColor", "textStyle", "as"];
20279
20978
  /**
20280
20979
  * A component that creates a typewriter effect for text
20281
20980
  */
@@ -20289,7 +20988,7 @@
20289
20988
  cursorColor = 'currentColor',
20290
20989
  textStyle
20291
20990
  } = _ref,
20292
- props = _objectWithoutPropertiesLoose(_ref, _excluded$X);
20991
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$Z);
20293
20992
  // Convert text to array if it's a string
20294
20993
  var textArray = Array.isArray(text) ? text : [text];
20295
20994
  // State for the currently displayed text
@@ -20356,7 +21055,7 @@
20356
21055
  }))))));
20357
21056
  };
20358
21057
 
20359
- var _excluded$Y = ["children", "highlightText", "highlightStyle", "highlightColor", "highlightSecondaryColor", "size", "responsive", "centered", "views", "highlightAnimate", "animate", "animationLoop", "highlightAnimationLoop", "highlightTypewriter", "highlightTypewriterDuration"];
21058
+ var _excluded$_ = ["children", "highlightText", "highlightStyle", "highlightColor", "highlightSecondaryColor", "size", "responsive", "centered", "views", "highlightAnimate", "animate", "animationLoop", "highlightAnimationLoop", "highlightTypewriter", "highlightTypewriterDuration"];
20360
21059
  function escapeRegExp(string) {
20361
21060
  return string.replace(/[.*+?^${}()|[\\]\\/g, '\\$&');
20362
21061
  }
@@ -20378,7 +21077,7 @@
20378
21077
  highlightTypewriter: propHighlightTypewriter = false,
20379
21078
  highlightTypewriterDuration = 3000
20380
21079
  } = _ref,
20381
- props = _objectWithoutPropertiesLoose(_ref, _excluded$Y);
21080
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$_);
20382
21081
  var {
20383
21082
  ref,
20384
21083
  inView
@@ -20653,7 +21352,7 @@
20653
21352
  }
20654
21353
  });
20655
21354
 
20656
- var _excluded$Z = ["children", "shape", "variant", "isHovered", "setIsHovered", "isDisabled", "isToggle", "setIsToggled", "onToggle", "views", "backgroundColor", "color", "themeMode"];
21355
+ var _excluded$$ = ["children", "shape", "variant", "isHovered", "setIsHovered", "isDisabled", "isToggle", "setIsToggled", "onToggle", "views", "backgroundColor", "color", "themeMode"];
20657
21356
  var ToggleView = _ref => {
20658
21357
  var _ref2;
20659
21358
  var {
@@ -20673,7 +21372,7 @@
20673
21372
  // 2nd candidate for main color
20674
21373
  themeMode: elementMode
20675
21374
  } = _ref,
20676
- props = _objectWithoutPropertiesLoose(_ref, _excluded$Z);
21375
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$$);
20677
21376
  /* theme helpers */
20678
21377
  var {
20679
21378
  getColor,
@@ -20717,7 +21416,7 @@
20717
21416
  }, props, views == null ? void 0 : views.container), children);
20718
21417
  };
20719
21418
 
20720
- var _excluded$_ = ["children", "shape", "variant", "isDisabled", "isToggled", "onToggle"];
21419
+ var _excluded$10 = ["children", "shape", "variant", "isDisabled", "isToggled", "onToggle"];
20721
21420
  // Destructuring properties from ToggleProps to be used within the ToggleComponent.
20722
21421
  var ToggleComponent = _ref => {
20723
21422
  var {
@@ -20729,7 +21428,7 @@
20729
21428
  isToggled = false,
20730
21429
  onToggle
20731
21430
  } = _ref,
20732
- props = _objectWithoutPropertiesLoose(_ref, _excluded$_);
21431
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$10);
20733
21432
  // Initializing toggle state and set state functions using the custom hook useToggleState.
20734
21433
  var {
20735
21434
  isHovered,
@@ -21064,7 +21763,7 @@
21064
21763
  }
21065
21764
  };
21066
21765
 
21067
- var _excluded$$ = ["children", "views"],
21766
+ var _excluded$11 = ["children", "views"],
21068
21767
  _excluded2$f = ["items", "side", "align", "views"],
21069
21768
  _excluded3$9 = ["item", "views"],
21070
21769
  _excluded4$8 = ["views"],
@@ -21105,7 +21804,7 @@
21105
21804
  children,
21106
21805
  views
21107
21806
  } = _ref2,
21108
- props = _objectWithoutPropertiesLoose(_ref2, _excluded$$);
21807
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded$11);
21109
21808
  var {
21110
21809
  isOpen,
21111
21810
  setIsOpen,
@@ -21358,7 +22057,7 @@
21358
22057
  }));
21359
22058
  };
21360
22059
 
21361
- var _excluded$10 = ["trigger", "items", "size", "variant", "side", "align", "defaultOpen", "views"];
22060
+ var _excluded$12 = ["trigger", "items", "size", "variant", "side", "align", "defaultOpen", "views"];
21362
22061
  /**
21363
22062
  * DropdownMenu component for displaying a menu when clicking on a trigger element.
21364
22063
  */
@@ -21373,7 +22072,7 @@
21373
22072
  defaultOpen = false,
21374
22073
  views
21375
22074
  } = _ref,
21376
- props = _objectWithoutPropertiesLoose(_ref, _excluded$10);
22075
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$12);
21377
22076
  var {
21378
22077
  isOpen,
21379
22078
  setIsOpen,
@@ -21787,7 +22486,7 @@
21787
22486
  category: 'neutral'
21788
22487
  }];
21789
22488
 
21790
- 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"];
22489
+ 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"];
21791
22490
  var ColorPickerView = _ref => {
21792
22491
  var {
21793
22492
  // Basic props
@@ -21822,7 +22521,7 @@
21822
22521
  dropdownRef
21823
22522
  // Other props
21824
22523
  } = _ref,
21825
- props = _objectWithoutPropertiesLoose(_ref, _excluded$11);
22524
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$13);
21826
22525
  var {
21827
22526
  getColor
21828
22527
  } = appStudio.useTheme();
@@ -24152,7 +24851,7 @@
24152
24851
  };
24153
24852
  };
24154
24853
 
24155
- 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"];
24854
+ 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"];
24156
24855
  var EmojiPickerView = _ref => {
24157
24856
  var {
24158
24857
  // Basic props
@@ -24190,7 +24889,7 @@
24190
24889
  dropdownRef
24191
24890
  // Other props
24192
24891
  } = _ref,
24193
- props = _objectWithoutPropertiesLoose(_ref, _excluded$12);
24892
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$14);
24194
24893
  var {
24195
24894
  getColor
24196
24895
  } = appStudio.useTheme();
@@ -24379,7 +25078,7 @@
24379
25078
  }
24380
25079
  };
24381
25080
 
24382
- var _excluded$13 = ["children", "orientation", "size", "variant", "views"];
25081
+ var _excluded$15 = ["children", "orientation", "size", "variant", "views"];
24383
25082
  // Create context for the Menubar
24384
25083
  var MenubarContext = /*#__PURE__*/React.createContext({
24385
25084
  activeMenuId: null,
@@ -24416,7 +25115,7 @@
24416
25115
  variant = 'default',
24417
25116
  views
24418
25117
  } = _ref2,
24419
- props = _objectWithoutPropertiesLoose(_ref2, _excluded$13);
25118
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded$15);
24420
25119
  var Container = orientation === 'horizontal' ? appStudio.Horizontal : appStudio.Vertical;
24421
25120
  return /*#__PURE__*/React__default.createElement(Container, Object.assign({
24422
25121
  role: "menubar",
@@ -24736,7 +25435,7 @@
24736
25435
  })))))));
24737
25436
  };
24738
25437
 
24739
- var _excluded$14 = ["items", "orientation", "size", "variant", "defaultActiveMenuId", "defaultOpenMenuId", "views"];
25438
+ var _excluded$16 = ["items", "orientation", "size", "variant", "defaultActiveMenuId", "defaultOpenMenuId", "views"];
24740
25439
  /**
24741
25440
  * Menubar component for creating horizontal or vertical menu bars with dropdown menus.
24742
25441
  */
@@ -24750,7 +25449,7 @@
24750
25449
  defaultOpenMenuId = null,
24751
25450
  views
24752
25451
  } = _ref,
24753
- props = _objectWithoutPropertiesLoose(_ref, _excluded$14);
25452
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$16);
24754
25453
  var {
24755
25454
  activeMenuId,
24756
25455
  setActiveMenuId,
@@ -24932,7 +25631,7 @@
24932
25631
  }
24933
25632
  };
24934
25633
 
24935
- var _excluded$15 = ["currentPage", "totalPages", "onPageChange", "pageSize", "pageSizeOptions", "onPageSizeChange", "showPageSizeSelector", "showPageInfo", "maxPageButtons", "showFirstLastButtons", "size", "variant", "shape", "visiblePageNumbers", "views"];
25634
+ var _excluded$17 = ["currentPage", "totalPages", "onPageChange", "pageSize", "pageSizeOptions", "onPageSizeChange", "showPageSizeSelector", "showPageInfo", "maxPageButtons", "showFirstLastButtons", "size", "variant", "shape", "visiblePageNumbers", "views"];
24936
25635
  var PaginationView = _ref => {
24937
25636
  var {
24938
25637
  currentPage,
@@ -24963,7 +25662,7 @@
24963
25662
  visiblePageNumbers,
24964
25663
  views
24965
25664
  } = _ref,
24966
- props = _objectWithoutPropertiesLoose(_ref, _excluded$15);
25665
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$17);
24967
25666
  var handlePageChange = page => {
24968
25667
  if (page < 1 || page > totalPages || page === currentPage) {
24969
25668
  return;
@@ -25082,7 +25781,7 @@
25082
25781
  }, option.label))))));
25083
25782
  };
25084
25783
 
25085
- var _excluded$16 = ["currentPage", "totalPages", "onPageChange", "pageSize", "pageSizeOptions", "onPageSizeChange", "showPageSizeSelector", "showPageInfo", "maxPageButtons", "showFirstLastButtons", "size", "variant", "shape", "views"];
25784
+ var _excluded$18 = ["currentPage", "totalPages", "onPageChange", "pageSize", "pageSizeOptions", "onPageSizeChange", "showPageSizeSelector", "showPageInfo", "maxPageButtons", "showFirstLastButtons", "size", "variant", "shape", "views"];
25086
25785
  /**
25087
25786
  * Pagination component for navigating through pages of content.
25088
25787
  */
@@ -25103,7 +25802,7 @@
25103
25802
  shape = 'rounded',
25104
25803
  views
25105
25804
  } = _ref,
25106
- props = _objectWithoutPropertiesLoose(_ref, _excluded$16);
25805
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$18);
25107
25806
  var {
25108
25807
  visiblePageNumbers
25109
25808
  } = usePaginationState(currentPage, totalPages, maxPageButtons);
@@ -25127,55 +25826,6 @@
25127
25826
  };
25128
25827
  var Pagination = PaginationComponent;
25129
25828
 
25130
- var _excluded$17 = ["value", "max", "color", "backgroundColor", "height", "radius", "views", "themeMode"];
25131
- var ProgressBarView = _ref => {
25132
- var {
25133
- value = 0,
25134
- max = 100,
25135
- color = 'theme.primary',
25136
- backgroundColor = 'color.gray.200',
25137
- height = 8,
25138
- radius = 4,
25139
- views,
25140
- themeMode: elementMode
25141
- } = _ref,
25142
- props = _objectWithoutPropertiesLoose(_ref, _excluded$17);
25143
- var {
25144
- getColor,
25145
- themeMode
25146
- } = appStudio.useTheme();
25147
- var currentMode = elementMode ? elementMode : themeMode;
25148
- var percentage = Math.min(100, Math.max(0, value / max * 100));
25149
- var trackColor = getColor(backgroundColor, {
25150
- themeMode: currentMode
25151
- });
25152
- var barColor = getColor(color, {
25153
- themeMode: currentMode
25154
- });
25155
- return /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
25156
- role: "progressbar",
25157
- "aria-valuenow": value,
25158
- "aria-valuemin": 0,
25159
- "aria-valuemax": max,
25160
- width: "100%",
25161
- height: height,
25162
- backgroundColor: trackColor,
25163
- borderRadius: radius,
25164
- overflow: "hidden"
25165
- }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
25166
- width: percentage + "%",
25167
- height: "100%",
25168
- backgroundColor: barColor,
25169
- borderRadius: radius
25170
- }, views == null ? void 0 : views.bar)));
25171
- };
25172
-
25173
- /**
25174
- * ProgressBar component displays completion status of a task or process.
25175
- */
25176
- var ProgressBarComponent = props => (/*#__PURE__*/React__default.createElement(ProgressBarView, Object.assign({}, props)));
25177
- var ProgressBar = ProgressBarComponent;
25178
-
25179
25829
  /**
25180
25830
  * Separator Styles
25181
25831
  *
@@ -25229,7 +25879,7 @@
25229
25879
  }
25230
25880
  };
25231
25881
 
25232
- var _excluded$18 = ["orientation", "variant", "thickness", "color", "spacing", "label", "decorative", "views", "themeMode"];
25882
+ var _excluded$19 = ["orientation", "variant", "thickness", "color", "spacing", "label", "decorative", "views", "themeMode"];
25233
25883
  var SeparatorView = _ref => {
25234
25884
  var {
25235
25885
  orientation = 'horizontal',
@@ -25241,7 +25891,7 @@
25241
25891
  decorative = false,
25242
25892
  views
25243
25893
  } = _ref,
25244
- props = _objectWithoutPropertiesLoose(_ref, _excluded$18);
25894
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$19);
25245
25895
  // Access theme if needed for future enhancements
25246
25896
  var {
25247
25897
  themeMode
@@ -25309,7 +25959,7 @@
25309
25959
  var Separator = SeparatorComponent;
25310
25960
  var Divider = SeparatorComponent;
25311
25961
 
25312
- var _excluded$19 = ["isSupported", "isSharing", "onShare", "label", "children", "icon", "size", "isDisabled", "isLoading", "iconPosition", "disableWhenUnsupported"];
25962
+ var _excluded$1a = ["isSupported", "isSharing", "onShare", "label", "children", "icon", "size", "isDisabled", "isLoading", "iconPosition", "disableWhenUnsupported"];
25313
25963
  var ICON_SIZE_MAP = {
25314
25964
  xs: 12,
25315
25965
  sm: 14,
@@ -25332,7 +25982,7 @@
25332
25982
  iconPosition,
25333
25983
  disableWhenUnsupported = true
25334
25984
  } = _ref,
25335
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$19);
25985
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$1a);
25336
25986
  var resolvedSize = size != null ? size : 'md';
25337
25987
  var resolvedIcon = icon != null ? icon : (/*#__PURE__*/React__default.createElement(ShareIcon, {
25338
25988
  widthHeight: ICON_SIZE_MAP[resolvedSize],
@@ -25434,14 +26084,14 @@
25434
26084
  };
25435
26085
  };
25436
26086
 
25437
- var _excluded$1a = ["shareData", "onShareStart", "onShareSuccess", "onShareCancel", "onShareError", "onUnsupported", "onClick"];
26087
+ var _excluded$1b = ["shareData", "onShareStart", "onShareSuccess", "onShareCancel", "onShareError", "onUnsupported", "onClick"];
25438
26088
  var ShareButtonComponent = props => {
25439
26089
  var {
25440
26090
  isSupported,
25441
26091
  isSharing,
25442
26092
  handleShare
25443
26093
  } = useShareButton(props);
25444
- var viewProps = _objectWithoutPropertiesLoose(props, _excluded$1a);
26094
+ var viewProps = _objectWithoutPropertiesLoose(props, _excluded$1b);
25445
26095
  return /*#__PURE__*/React__default.createElement(ShareButtonView, Object.assign({}, viewProps, {
25446
26096
  isSupported: isSupported,
25447
26097
  isSharing: isSharing,
@@ -25450,82 +26100,6 @@
25450
26100
  };
25451
26101
  var ShareButton = ShareButtonComponent;
25452
26102
 
25453
- var getThemes$2 = themeMode => {
25454
- return {
25455
- default: {
25456
- indicator: {
25457
- backgroundColor: 'color.gray.400'
25458
- },
25459
- label: {
25460
- color: 'color.gray.700'
25461
- }
25462
- },
25463
- info: {
25464
- indicator: {
25465
- backgroundColor: 'color.blue.500'
25466
- },
25467
- label: {
25468
- color: 'color.blue.700'
25469
- }
25470
- },
25471
- success: {
25472
- indicator: {
25473
- backgroundColor: 'color.green.500'
25474
- },
25475
- label: {
25476
- color: 'color.green.700'
25477
- }
25478
- },
25479
- warning: {
25480
- indicator: {
25481
- backgroundColor: 'color.orange.500'
25482
- },
25483
- label: {
25484
- color: 'color.orange.700'
25485
- }
25486
- },
25487
- error: {
25488
- indicator: {
25489
- backgroundColor: 'color.red.500'
25490
- },
25491
- label: {
25492
- color: 'color.red.700'
25493
- }
25494
- }
25495
- };
25496
- };
25497
-
25498
- var _excluded$1b = ["label", "status", "views", "themeMode"];
25499
- var StatusIndicatorView = _ref => {
25500
- var {
25501
- label,
25502
- status = 'default',
25503
- views,
25504
- themeMode: elementMode
25505
- } = _ref,
25506
- props = _objectWithoutPropertiesLoose(_ref, _excluded$1b);
25507
- var {
25508
- themeMode
25509
- } = appStudio.useTheme();
25510
- var themes = getThemes$2();
25511
- return /*#__PURE__*/React__default.createElement(appStudio.Horizontal, Object.assign({
25512
- alignItems: "center",
25513
- gap: 8,
25514
- role: "status-indicator"
25515
- }, views == null ? void 0 : views.container, props), /*#__PURE__*/React__default.createElement(appStudio.View, Object.assign({
25516
- role: "status-dot",
25517
- width: "8px",
25518
- height: "8px",
25519
- borderRadius: "50%"
25520
- }, themes[status].indicator, views == null ? void 0 : views.indicator)), label && (/*#__PURE__*/React__default.createElement(Text, Object.assign({
25521
- role: "status-label",
25522
- fontSize: "14px",
25523
- lineHeight: "20px"
25524
- }, themes[status].label, views == null ? void 0 : views.label), label)));
25525
- };
25526
-
25527
- var StatusIndicator = props => (/*#__PURE__*/React__default.createElement(StatusIndicatorView, Object.assign({}, props)));
25528
-
25529
26103
  var useSidebarState = function useSidebarState(defaultExpanded, expanded, onExpandedChange, breakpoint) {
25530
26104
  if (defaultExpanded === void 0) {
25531
26105
  defaultExpanded = true;
@@ -37271,6 +37845,7 @@
37271
37845
  exports.MoonIcon = MoonIcon;
37272
37846
  exports.NavigationMenu = NavigationMenu;
37273
37847
  exports.NotificationIcon = NotificationIcon;
37848
+ exports.OKR = OKR;
37274
37849
  exports.OTPInput = OTPInput;
37275
37850
  exports.OpenEyeIcon = OpenEyeIcon;
37276
37851
  exports.Pagination = Pagination;