@arpproject/recrate 0.1.35 → 0.1.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.
@@ -3,6 +3,10 @@ interface DialogEditContextProps {
3
3
  onClose: () => void;
4
4
  onUpdateContext: (context: any) => void;
5
5
  open: boolean;
6
+ approvalRecord?: any;
7
+ readonly?: boolean;
8
+ onAcceptAiContext?: () => void;
9
+ onRejectAiContext?: () => void;
6
10
  }
7
11
  declare const DialogEditContext: React.FC<DialogEditContextProps>;
8
12
  export default DialogEditContext;
@@ -1,4 +1,5 @@
1
1
  export declare const approvalIsApproved: (approvalRecord: any) => boolean;
2
+ export declare const CONTEXT_APPROVAL_PROPERTY_NAME = "@context";
2
3
  export declare const getApprovalEntities: (approvalData: any) => any[];
3
4
  export declare const getEntityIdAliases: (id: string | undefined) => string[];
4
5
  export declare const entityIdsMatch: (left: string | undefined, right: string | undefined) => boolean;
@@ -14,6 +15,11 @@ export declare const getDeletedEntityReviewTarget: (entityApproval: any) => {
14
15
  export declare const getPendingDeletedEntityReversePropertiesForSource: (approvalData: any, sourceEntityId: string | undefined) => string[];
15
16
  export declare const getEntityApproval: (approvalData: any, entityId: string | undefined) => any | undefined;
16
17
  export declare const getEntityApprovalRecords: (approvalData: any, entityId: string | undefined, property: string) => any[];
18
+ export declare const getPendingEntityContextApprovalRecords: (approvalData: any, entityId: string | undefined) => any[];
19
+ export declare const getPendingContextApprovalRecords: (approvalData: any) => Array<{
20
+ entityId: string;
21
+ approvalRecord: any;
22
+ }>;
17
23
  export declare const getReferenceId: (value: any) => string | undefined;
18
24
  export declare const getReferenceValues: (value: any) => any[];
19
25
  export declare const getRemovedReferenceValues: (previousValue: any, currentValue: any) => any[];
@@ -23,6 +23,7 @@ declare const useEntityMutationHandlers: ({ entity, contextEntity, crateManager,
23
23
  handleCreateEntity: (data: any) => any;
24
24
  handleCreateProperty: (data: {
25
25
  property: string;
26
+ propertyId?: string;
26
27
  value: any;
27
28
  }) => void;
28
29
  handleDeleteEntity: (data: {
@@ -13,9 +13,12 @@ interface UseEntityNavigationStateOptions {
13
13
  onSaveCrate: () => void;
14
14
  debugScroll?: (...args: any[]) => void;
15
15
  }
16
+ interface CaptureViewContextOptions {
17
+ updateActiveTab?: boolean;
18
+ }
16
19
  declare const useEntityNavigationState: ({ activeTab, activeContentRef, contextEntity, state, restoreInProgressRef, showAddPanel, reverseSidebarVisible, highlightRequiredProperties, iconView, tabPaneWidth, onSaveCrate, debugScroll, }: UseEntityNavigationStateOptions) => {
17
20
  captureCurrentViewContext: (tabName?: string) => void;
18
- captureViewContext: (tabName?: string, explicitScrollTop?: number) => void;
21
+ captureViewContext: (tabName?: string, explicitScrollTop?: number, options?: CaptureViewContextOptions) => void;
19
22
  saveCratePreservingView: () => void;
20
23
  saveTabToState: (tabName: string) => void;
21
24
  };
@@ -24,7 +24,9 @@ interface UseEntityScrollRestorationOptions {
24
24
  tabPaneWidth: number;
25
25
  state: any;
26
26
  isAiScrollRestoreSuppressed: () => boolean;
27
- captureViewContext: (tabName?: string, explicitScrollTop?: number) => void;
27
+ captureViewContext: (tabName?: string, explicitScrollTop?: number, options?: {
28
+ updateActiveTab?: boolean;
29
+ }) => void;
28
30
  debugScroll?: (...args: any[]) => void;
29
31
  }
30
32
  declare const useEntityScrollRestoration: ({ activeTab, activeContentRef, contextEntity, renderTabs, tabsLength, extraPropertiesLength, scrollRestoreNonce, setScrollRestoreNonce, navigationRestoreReadyRef, pendingRestoredTabRef, restoreInProgressRef, pendingAddedPropertyRef, showAddPanel, reverseSidebarVisible, highlightRequiredProperties, iconView, tabPaneWidth, state, isAiScrollRestoreSuppressed, captureViewContext, debugScroll, }: UseEntityScrollRestorationOptions) => void;
@@ -20,6 +20,18 @@ declare namespace en {
20
20
  let browse_entities: string;
21
21
  let filter_attribute_set: string;
22
22
  let save_label: string;
23
+ let ai_context_review_title: string;
24
+ let ai_context_review_description: string;
25
+ let ai_context_diff_aria: string;
26
+ let ai_context_diff_title: string;
27
+ let ai_previous_context: string;
28
+ let ai_current_context: string;
29
+ let ai_context_diff_omitted_lines_one: string;
30
+ let ai_context_diff_omitted_lines_other: string;
31
+ let ai_context_diff_show_omitted_lines_one: string;
32
+ let ai_context_diff_show_omitted_lines_other: string;
33
+ let ai_context_diff_hide_omitted_lines_one: string;
34
+ let ai_context_diff_hide_omitted_lines_other: string;
23
35
  let preview_loading: string;
24
36
  let search_for_connection: string;
25
37
  let filter_by_type: string;
@@ -20,6 +20,18 @@ declare namespace hu {
20
20
  let browse_entities: string;
21
21
  let filter_attribute_set: string;
22
22
  let save_label: string;
23
+ let ai_context_review_title: string;
24
+ let ai_context_review_description: string;
25
+ let ai_context_diff_aria: string;
26
+ let ai_context_diff_title: string;
27
+ let ai_previous_context: string;
28
+ let ai_current_context: string;
29
+ let ai_context_diff_omitted_lines_one: string;
30
+ let ai_context_diff_omitted_lines_other: string;
31
+ let ai_context_diff_show_omitted_lines_one: string;
32
+ let ai_context_diff_show_omitted_lines_other: string;
33
+ let ai_context_diff_hide_omitted_lines_one: string;
34
+ let ai_context_diff_hide_omitted_lines_other: string;
23
35
  let preview_loading: string;
24
36
  let search_for_connection: string;
25
37
  let filter_by_type: string;
package/dist/recrate.css CHANGED
@@ -1,3 +1,3 @@
1
- .el-tabs__item{height:unset}.el-select-dropdown__wrap{max-height:500px!important}.el-select-group__title{font-size:14px!important}.scrollbar{overflow:overlay}.scrollbar::-webkit-scrollbar{background-color:#0000;height:16px;width:16px;z-index:999999}.scrollbar::-webkit-scrollbar-track{background-color:#0000}.scrollbar::-webkit-scrollbar-thumb{background-color:#0000;border:0 solid #fff;border-radius:16px}.scrollbar::-webkit-scrollbar-button{display:none}.scrollbar:hover::-webkit-scrollbar-thumb{background-color:#a0a0a5;border:4px solid #fff}.scrollbar::-webkit-scrollbar-thumb:hover{background-color:#a0a0a5;border:4px solid #f4f4f4}.cm-editor{font-size:12px;height:auto;max-height:none}.recrate-tab-icon{align-items:center;display:flex;font-size:14px;font-weight:600;height:100%;justify-content:center;width:100%}.recrate-add-only-tabs .ant-tabs-nav,.recrate-add-only-tabs .ant-tabs-nav-wrap{height:100%}.recrate-add-only-tabs .ant-tabs-nav-list{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center}.recrate-add-only-tabs .ant-tabs-tab{justify-content:center}.recrate-tab-rail{background:#fff;display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden;position:relative}.recrate-tab-rail-actions{border-bottom:1px solid #e5e7eb;display:flex;flex:0 0 auto;gap:8px;justify-content:center;padding:10px 8px 8px}.recrate-tab-rail-actions-only .recrate-tab-rail-actions{border-bottom:0}.recrate-tab-rail-list{flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;padding:8px 6px 16px;scrollbar-width:none}.recrate-tab-rail-list::-webkit-scrollbar{display:none}.recrate-tab-rail-item{border-radius:6px;color:#334155;cursor:pointer;display:block;margin:2px 0;outline:none;padding:12px 10px;position:relative;transition:background-color .12s ease,color .12s ease;width:100%}.recrate-tab-rail-item:focus-visible,.recrate-tab-rail-item:hover{background:#f1f5f9}.recrate-tab-rail-item-active{background:#eaf2ff;color:#1d4ed8}.recrate-tab-rail-item-active:before{background:#2563eb;border-radius:999px;bottom:10px;content:"";left:0;position:absolute;top:10px;width:3px}.recrate-tab-rail-item-icon{align-items:center;display:flex;justify-content:center;min-height:42px;padding:8px}.recrate-tab-rail-row{align-items:center;display:flex;gap:8px;justify-content:space-between}.recrate-tab-rail-title{font-size:15px;font-weight:600;line-height:1.35;min-width:0;overflow-wrap:anywhere}.recrate-tab-rail-status{align-items:center;display:inline-flex;flex:0 0 auto;gap:4px}.recrate-tab-rail-remove-button{flex:0 0 auto;transition:opacity .12s ease}.recrate-tab-rail-description{color:#64748b;font-size:12px;line-height:1.35;margin-top:4px;overflow-wrap:anywhere}.recrate-tab-rail:after,.recrate-tab-rail:before{content:"";height:34px;left:0;opacity:0;pointer-events:none;position:absolute;right:0;transition:opacity .12s ease;z-index:2}.recrate-tab-rail:before{background:linear-gradient(#fff,#fff0);top:53px}.recrate-tab-rail:after{background:linear-gradient(#fff0,#fff);bottom:0}.recrate-tab-rail-can-scroll-down:after,.recrate-tab-rail-can-scroll-up:before{opacity:1}.recrate-tab-rail-scroll-button{box-shadow:0 2px 8px #0f172a24;left:50%;position:absolute;transform:translateX(-50%);z-index:3}.recrate-tab-rail-scroll-button-up{top:58px}.recrate-tab-rail-scroll-button-down{bottom:8px}.recrate-add-property-drawer{z-index:6000}.recrate-add-property-title.ant-typography{font-size:22px;line-height:1.25;margin:0}.recrate-add-property-row{border:1px solid #0000;border-radius:6px;color:#111827;cursor:pointer;outline:none;padding:10px 12px 10px 14px;position:relative;transition:background-color .12s ease,border-color .12s ease,box-shadow .12s ease,transform .12s ease}.recrate-add-property-row:before{background:#0000;border-radius:999px;bottom:10px;content:"";left:0;position:absolute;top:10px;transition:background-color .12s ease;width:3px}.recrate-add-property-row:focus-visible,.recrate-add-property-row:hover{background:#f8fafc;border-color:#dbeafe;box-shadow:0 1px 4px #0f172a14}.recrate-add-property-row:active{transform:translateY(1px)}.recrate-add-property-row-selected{background:#eff6ff;border-color:#93c5fd;box-shadow:0 0 0 1px #2563eb1f}.recrate-add-property-row-selected:before{background:#2563eb}.recrate-add-property-row-header{color:#111827;min-width:0}.recrate-add-property-row-name{color:inherit;flex:0 1 auto;font-weight:600;min-width:0;overflow-wrap:anywhere}.recrate-add-property-row-type{color:#475569;overflow-wrap:anywhere}.recrate-add-property-row-help{color:#6b7280;display:block;line-height:1.45;margin-top:4px}.recrate-add-property-row-check{color:#2563eb;margin-left:auto}.recrate-quick-settings-header{align-items:center;backdrop-filter:blur(8px);background:#fffffff5;border-bottom:1px solid #dbe3ef;box-shadow:0 6px 14px #0f172a14;display:flex;gap:14px;margin:0 -12px 12px;padding:2px 12px 5px 18px;position:sticky;top:0;z-index:4}.recrate-quick-settings-actions{align-items:center;display:inline-flex;flex:0 0 auto;gap:6px}.recrate-quick-settings-filter{flex:1 1 260px;max-width:420px;min-width:160px}.recrate-property-compact .recrate-add-control{margin-bottom:0;margin-top:0;padding-bottom:0;padding-top:0}.recrate-property-name-with-ai{align-items:center;display:inline-flex;gap:6px;min-width:0}.recrate-ai-edited-icon{align-items:center;background:#effbf5;border-radius:50%;color:#087446;display:inline-flex;flex:0 0 auto;font-size:12px;font-weight:800;height:18px;justify-content:center;line-height:1;width:18px}.recrate-ai-edited-filter-button.ant-btn{color:#087446;font-weight:800;min-width:32px;padding-inline:0}.recrate-ai-edited-filter-button.ant-btn-primary{background:#12a76c;border-color:#12a76c;color:#fff}.recrate-ai-entity-review-card{box-shadow:inset 0 0 0 1px #38c88a47,0 2px 8px #186f4a14}.recrate-ai-entity-delete-card{box-shadow:0 2px 8px #b91c1c14}.recrate-ai-entity-delete-card:hover{box-shadow:0 6px 18px #b91c1c24}.recrate-ai-entity-unlink-card{box-shadow:0 2px 8px #c2610014}.recrate-ai-entity-unlink-card:hover{box-shadow:0 6px 18px #c2610024}.recrate-ai-deleted-linked-entity-id{border-bottom:1px solid #0003;color:#00000073;display:block;font-size:.75rem;line-height:1.35;margin-bottom:4px;overflow-wrap:anywhere;padding-bottom:4px}.recrate-ai-deleted-linked-entity-name{color:#000000e0;font-weight:700;overflow-wrap:anywhere}.recrate-ai-entity-reviewed-card{position:relative}.recrate-ai-entity-edited-badge{bottom:14px;position:absolute;right:14px;z-index:1}.recrate-ai-entity-review-card .recrate-ai-entity-edited-badge{right:130px}.recrate-ai-entity-review-summary{align-items:center;display:flex;gap:8px;justify-content:space-between;margin-top:10px}.recrate-ai-entity-review-meta{align-items:center;display:inline-flex;gap:8px;min-width:0}.recrate-ai-entity-review-count{color:#087446;font-size:13px;font-weight:800;white-space:nowrap}.recrate-ai-entity-inline-actions{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-top:18px}.recrate-ai-entity-inline-actions .recrate-ai-actions{gap:12px}.recrate-ai-entity-review-button.ant-btn{background:#57d8a3;border:0;border-radius:6px;box-shadow:0 1px 2px #00000024;color:#0d2d23;font-size:13px;font-weight:800;height:28px;padding:0 10px}.recrate-ai-entity-review-button.ant-btn:focus-visible,.recrate-ai-entity-review-button.ant-btn:hover{background:#45c991!important;color:#0d2d23!important}.recrate-ai-entity-diff-toggle.ant-btn{background:#ffffffd1;border-color:#1486553d;color:#047857;min-width:28px;padding:0;width:28px}.recrate-ai-entity-diff-toggle.ant-btn:focus-visible,.recrate-ai-entity-diff-toggle.ant-btn:hover{background:#ecfdf5!important;border-color:#14865573;color:#047857!important}.recrate-ai-entity-delete-card .recrate-ai-entity-review-count{color:#b91c1c}.recrate-ai-entity-delete-card .recrate-ai-entity-review-button.ant-btn{background:#ff5b63}.recrate-ai-entity-delete-card .recrate-ai-entity-review-button.ant-btn:focus-visible,.recrate-ai-entity-delete-card .recrate-ai-entity-review-button.ant-btn:hover{background:#f0444f!important;color:#111827!important}.recrate-ai-entity-delete-card .recrate-ai-action-approve.ant-btn{background:#ff5b63;border-color:#ff5b63}.recrate-ai-entity-delete-card .recrate-ai-action-approve.ant-btn:focus-visible,.recrate-ai-entity-delete-card .recrate-ai-action-approve.ant-btn:hover{background:#f0444f!important;border-color:#f0444f!important;color:#111827!important}.recrate-ai-entity-delete-card .recrate-ai-action-reject.ant-btn{background:#57d8a3;border-color:#57d8a3}.recrate-ai-entity-delete-card .recrate-ai-action-reject.ant-btn:focus-visible,.recrate-ai-entity-delete-card .recrate-ai-action-reject.ant-btn:hover{background:#45c991!important;border-color:#45c991!important;color:#111827!important}.recrate-ai-entity-unlink-card .recrate-ai-action-approve.ant-btn{background:#fb923c;border-color:#fb923c}.recrate-ai-entity-unlink-card .recrate-ai-action-approve.ant-btn:focus-visible,.recrate-ai-entity-unlink-card .recrate-ai-action-approve.ant-btn:hover{background:#f97316!important;border-color:#f97316!important;color:#111827!important}.recrate-ai-entity-unlink-card .recrate-ai-action-reject.ant-btn{background:#57d8a3;border-color:#57d8a3}.recrate-ai-entity-unlink-card .recrate-ai-action-reject.ant-btn:focus-visible,.recrate-ai-entity-unlink-card .recrate-ai-action-reject.ant-btn:hover{background:#45c991!important;border-color:#45c991!important;color:#111827!important}.recrate-ai-confirm-bar{align-items:center;background:linear-gradient(90deg,#f5fff9,#f9fbfd);border-bottom:1px solid #c8ded4;border-top:1px solid #e7eee9;box-shadow:inset 4px 0 0 #54d69d;color:#2d3b35;display:grid;gap:10px;grid-template-columns:minmax(220px,1fr) auto;min-height:40px;padding:5px 10px 5px 14px}.recrate-ai-confirm-message{align-items:center;display:flex;font-size:13px;font-weight:700;gap:10px;line-height:1.2;min-width:0;overflow:hidden}.recrate-ai-confirm-spark{color:#12a76c;font-size:17px;line-height:1}.recrate-ai-confirm-controls{align-items:center;display:flex;gap:6px;white-space:nowrap}.recrate-ai-confirm-bar-remaining{background:linear-gradient(90deg,#fff9eb,#f9fbfd);box-shadow:inset 4px 0 0 #f59e0b}.recrate-ai-confirm-bar-remaining .recrate-ai-confirm-spark{color:#b45309}.recrate-ai-review-next-entity.ant-btn{background:#fbbf24;border:0;border-radius:5px;box-shadow:0 1px 2px #0000001f;color:#1f1710;font-size:12px;font-weight:800;height:26px;padding:0 10px}.recrate-ai-review-next-entity.ant-btn:focus-visible,.recrate-ai-review-next-entity.ant-btn:hover{background:#f59e0b!important;color:#1f1710!important}.recrate-ai-bulk-action.ant-btn{border:0;border-radius:5px;box-shadow:0 1px 2px #0000001f;color:#14201b;font-size:12px;font-weight:800;height:26px;padding:0 9px}.recrate-ai-bulk-accept.ant-btn{background:#57d8a3}.recrate-ai-bulk-accept.ant-btn:focus-visible,.recrate-ai-bulk-accept.ant-btn:hover{background:#45c991!important;color:#14201b!important}.recrate-ai-bulk-reject.ant-btn{background:#ff6a71;color:#1f1717}.recrate-ai-bulk-reject.ant-btn:focus-visible,.recrate-ai-bulk-reject.ant-btn:hover{background:#f0444f!important;color:#1f1717!important}.recrate-ai-stepper{align-items:center;border-left:1px solid #cad7d1;color:#53625c;display:inline-flex;font-weight:800;gap:4px;margin-left:2px;padding-left:8px}.recrate-ai-stepper .ant-btn{border-radius:5px;color:#4a5a54;height:24px;width:24px}.recrate-ai-stepper .ant-btn:not(:disabled):focus-visible,.recrate-ai-stepper .ant-btn:not(:disabled):hover{background:#e6f4ec!important;color:#33443d!important}.recrate-ai-step-count{color:#34443d;font-size:13px;min-width:32px;text-align:center}.recrate-ai-review{border-radius:8px;margin-top:18px;padding-top:20px!important;position:relative}.recrate-ai-review-current .recrate-ai-suggestion,.recrate-ai-review-current.recrate-property,.recrate-ai-suggestion.recrate-ai-review-current{border-color:#12a76ce6!important;box-shadow:inset 4px 0 0 #12a76c,0 0 0 3px #12a76c1f,0 6px 18px #1969461f!important}.recrate-ai-delete.recrate-ai-review-current,.recrate-ai-review-current .recrate-ai-delete{border-color:#dc2626e0!important;box-shadow:inset 4px 0 0 #ef4444,0 0 0 3px #ef44441f,0 6px 18px #b91c1c1f!important}.recrate-ai-suggestion{background:linear-gradient(90deg,#22c55e1c,#22c55e0a 55%,#fff0);border:1px solid #22c55e6b;box-shadow:inset 4px 0 0 #22c55e,0 4px 14px #15803d14}.recrate-ai-delete{background:linear-gradient(90deg,#ef44441c,#ef44440a 55%,#fff0);border:1px solid #ef44446b;box-shadow:inset 4px 0 0 #ef4444,0 4px 14px #b91c1c14}.recrate-ai-suggestion:hover{background:linear-gradient(90deg,#22c55e26,#22c55e0d 55%,#fff0)}.recrate-ai-delete:hover{background:linear-gradient(90deg,#ef444426,#ef44440d 55%,#fff0)}.recrate-ai-deleted-entity-card{border-radius:8px;margin:18px;padding:26px 18px 18px;position:relative}.recrate-ai-deleted-entity-header{align-items:flex-start;display:flex;gap:18px;justify-content:space-between}.recrate-ai-deleted-entity-title{color:#7f1d1d;font-size:18px;font-weight:800;line-height:1.25;overflow-wrap:anywhere}.recrate-ai-deleted-entity-id{color:#991b1b;font-size:13px;font-weight:600;margin-top:4px;overflow-wrap:anywhere}.recrate-ai-deleted-entity-controls{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-top:14px}.recrate-ai-deleted-entity-controls .recrate-ai-actions{gap:8px}.recrate-ai-deleted-entity-controls .recrate-ai-actions .ant-btn{border-radius:6px;font-size:13px;height:28px;min-width:66px}.recrate-ai-deleted-entity-summary{align-items:center;color:#7f1d1d;display:inline-flex;font-size:14px;font-weight:700;gap:10px;min-width:0}.recrate-ai-deleted-entity-summary span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recrate-ai-entity-delete-details-toggle.ant-btn{background:#ffffffb8;border-color:#f8717175;color:#b91c1c;flex:0 0 auto;min-width:30px;padding:0;width:30px}.recrate-ai-entity-delete-details-toggle.ant-btn:focus-visible,.recrate-ai-entity-delete-details-toggle.ant-btn:hover,.recrate-ai-entity-delete-details-toggle.ant-btn[aria-pressed=true]{background:#ffe8e8!important;border-color:#f87171bd;color:#b91c1c!important}.recrate-ai-deleted-entity-fields{background:#f8717152;border:1px solid #f8717152;border-radius:8px;display:grid;gap:1px;grid-template-columns:minmax(120px,220px) minmax(0,1fr);margin-top:14px;overflow:hidden}.recrate-ai-deleted-entity-fields-inline{grid-template-columns:minmax(100px,170px) minmax(0,1fr);margin-top:10px}.recrate-ai-deleted-entity-field{display:contents}.recrate-ai-deleted-entity-field-name,.recrate-ai-deleted-entity-field-value{background:#ffffffb8;font-size:13px;min-width:0;overflow-wrap:anywhere;padding:8px 10px}.recrate-ai-deleted-entity-field-name{color:#7f1d1d;font-weight:800}.recrate-ai-deleted-entity-field-value{color:#450a0a}.recrate-ai-entity-diff-card{background:#f0fbf5;border:1px solid #38c88a8c;border-left:4px solid #38c88a;border-radius:8px;box-shadow:0 2px 8px #186f4a14;min-height:226px;overflow:hidden;position:relative}.recrate-ai-entity-diff-card-delete{background:#fff5f5;border-color:#dd505c7a #dd505c7a #dd505c7a #e24d5c;box-shadow:0 2px 8px #85242f14}.recrate-ai-entity-diff-card-unlink{background:#fff7ed;border-color:#f973167a #f973167a #f973167a #f97316;box-shadow:0 2px 8px #c2610014}.recrate-ai-entity-diff-head{align-items:center;background:#e4f7ed;border-bottom:1px solid #38c88a40;color:#087446;display:flex;font-size:13px;font-weight:900;gap:10px;justify-content:space-between;min-height:36px;padding:0 14px}.recrate-ai-entity-diff-card-delete .recrate-ai-entity-diff-head{background:#ffe8e8;border-bottom-color:#dd505c40;color:#9a1f29}.recrate-ai-entity-diff-card-unlink .recrate-ai-entity-diff-head{background:#ffedd5;border-bottom-color:#f9731640;color:#9a3412}.recrate-ai-entity-diff-close.ant-btn{color:currentColor;flex:0 0 auto}.recrate-ai-entity-diff-close.ant-btn:focus-visible,.recrate-ai-entity-diff-close.ant-btn:hover{background:#ffffff9e!important;color:currentColor!important}.recrate-ai-entity-diff-body{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14px;padding:10px 0 52px}.recrate-ai-entity-diff-line{align-items:center;border-bottom:1px solid #0000000a;display:grid;grid-template-columns:28px minmax(74px,96px) minmax(0,1fr);min-height:29px}.recrate-ai-entity-diff-line-context{background:#f7faf8}.recrate-ai-entity-diff-line-removed{background:#fff1f1}.recrate-ai-entity-diff-line-added{background:#effbf5}.recrate-ai-entity-diff-marker{align-self:stretch;display:grid;font-weight:900;place-items:center}.recrate-ai-entity-diff-line-context .recrate-ai-entity-diff-marker{background:#eef2f0;color:#738078}.recrate-ai-entity-diff-line-removed .recrate-ai-entity-diff-marker{background:#ffdede;color:#9a1f29}.recrate-ai-entity-diff-line-added .recrate-ai-entity-diff-marker{background:#d8f5e7;color:#087446}.recrate-ai-entity-diff-key{color:#5b7167;padding:0 8px}.recrate-ai-entity-diff-key,.recrate-ai-entity-diff-value{font-weight:800;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recrate-ai-entity-diff-value{color:#1e2732;padding-right:10px}.recrate-ai-entity-diff-actions{bottom:14px;display:flex;gap:7px;position:absolute;right:14px}.recrate-ai-entity-diff-button.ant-btn{background:#57d8a3;border:0;border-radius:6px;box-shadow:0 1px 2px #00000024;color:#0d2d23;font-size:13px;font-weight:900;height:31px;min-width:100px;padding:0 10px}.recrate-ai-entity-diff-button.ant-btn:focus-visible,.recrate-ai-entity-diff-button.ant-btn:hover{background:#45c991!important;color:#0d2d23!important}.recrate-ai-entity-diff-button-reject.ant-btn{background:#ff6a71;color:#171717}.recrate-ai-entity-diff-button-reject.ant-btn:focus-visible,.recrate-ai-entity-diff-button-reject.ant-btn:hover{background:#f0444f!important;color:#171717!important}.recrate-ai-suggestion-badge{align-items:center;background:#ecfdf5;border:1px solid #10b98161;border-radius:7px;box-shadow:0 1px 2px #0f764a14;color:#047857;display:inline-flex;font-size:13px;font-weight:700;gap:6px;height:30px;left:18px;line-height:1;padding:0 11px;position:absolute;top:-15px;z-index:1}.recrate-ai-delete .recrate-ai-suggestion-badge{background:#fef2f2;border-color:#f871716b;box-shadow:0 1px 2px #b91c1c14;color:#b91c1c}.recrate-ai-suggestion-badge-icon{color:#047857;font-size:14px;line-height:1}.recrate-ai-delete .recrate-ai-suggestion-badge-icon{color:#b91c1c}.recrate-ai-entity-status-badge{left:14px;top:-15px}.recrate-ai-entity-delete-card .recrate-ai-entity-status-badge{background:#fef2f2;border-color:#f871716b;box-shadow:0 1px 2px #b91c1c14;color:#b91c1c}.recrate-ai-entity-delete-card .recrate-ai-entity-status-badge .recrate-ai-suggestion-badge-icon{color:#b91c1c}.recrate-ai-entity-unlink-card .recrate-ai-entity-status-badge{background:#fff7ed;border-color:#fb923c73;box-shadow:0 1px 2px #c2610014;color:#9a3412}.recrate-ai-entity-unlink-card .recrate-ai-entity-status-badge .recrate-ai-suggestion-badge-icon{color:#c2410c}.recrate-ai-field-row{align-items:flex-start}.recrate-ai-field-control .ant-space-compact{width:100%}.recrate-ai-field-control .ant-input,.recrate-ai-field-control .ant-input-affix-wrapper,.recrate-ai-field-control .ant-input-number,.recrate-ai-field-control .ant-picker,.recrate-ai-field-control .ant-select-selector,.recrate-ai-field-control textarea.ant-input{background:#f0fdf4!important;border-color:#22c55e!important;box-shadow:inset 0 0 0 1px #22c55e2e,0 0 0 3px #22c55e1a!important}.recrate-ai-delete .recrate-ai-field-control .ant-input,.recrate-ai-delete .recrate-ai-field-control .ant-input-affix-wrapper,.recrate-ai-delete .recrate-ai-field-control .ant-input-number,.recrate-ai-delete .recrate-ai-field-control .ant-picker,.recrate-ai-delete .recrate-ai-field-control .ant-select-selector,.recrate-ai-delete .recrate-ai-field-control textarea.ant-input{background:#fef2f2!important;border-color:#ef4444!important;box-shadow:inset 0 0 0 1px #ef44442e,0 0 0 3px #ef44441a!important}.recrate-ai-field-control .ant-space-compact>.ant-input,.recrate-ai-field-control .ant-space-compact>.ant-input-affix-wrapper,.recrate-ai-field-control .ant-space-compact>textarea.ant-input{border-end-end-radius:8px!important;border-start-end-radius:8px!important}.recrate-ai-field-control .ant-space-compact>.ant-btn{display:none}.recrate-ai-field-diff{background:#fbfcfd;border:1px solid #d4ddd8;border-radius:7px;box-shadow:0 1px 2px #0000000d;font-size:15px;overflow:hidden;width:100%}.recrate-ai-field-diff-head{align-items:center;background:#f5f8f6;border-bottom:1px solid #dce5e0;color:#506158;display:flex;font-size:13px;font-weight:800;gap:10px;justify-content:space-between;min-height:31px;padding:0 10px}.recrate-ai-field-diff-chip{color:#087446;flex:0 0 auto;font-size:12px}.recrate-ai-field-diff-line{border-bottom:1px solid #0000000a;display:grid;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;grid-template-columns:28px minmax(0,1fr);min-height:36px}.recrate-ai-field-diff-line:last-child{border-bottom:0}.recrate-ai-field-diff-marker{align-self:stretch;display:grid;font-weight:900;place-items:center}.recrate-ai-field-diff-value{color:#27322d;margin:0;min-width:0;overflow:auto;overflow-wrap:anywhere;padding:7px 11px;white-space:pre-wrap}.recrate-ai-field-diff-line-removed{background:#fff1f1}.recrate-ai-field-diff-line-removed .recrate-ai-field-diff-marker{background:#ffdede;color:#9a1f29}.recrate-ai-field-diff-line-added{background:#effbf5}.recrate-ai-field-diff-line-added .recrate-ai-field-diff-marker{background:#d8f5e7;color:#087446}.recrate-ai-field-diff-empty{color:#7b8781;font-style:italic}.recrate-ai-actions{align-items:flex-start;display:flex;flex:0 0 auto;gap:18px}.recrate-ai-actions .ant-btn{border:0;border-radius:8px;box-shadow:0 2px 5px #0f172a2e;color:#111827;font-size:14px;font-weight:700;height:34px;min-width:82px}.recrate-ai-action-diff.ant-btn{background:#fff;border:1px solid #d4ddd8;color:#0f172a;min-width:36px;padding:0;width:36px}.recrate-ai-action-diff.ant-btn:focus-visible,.recrate-ai-action-diff.ant-btn:hover{background:#f5f8f6!important;border-color:#9bc7b3!important;color:#087446!important}.recrate-ai-action-diff.ant-btn[aria-pressed=true]{background:#d8f5e7;border-color:#9bc7b3;color:#087446}.recrate-ai-action-approve.ant-btn{background:#57d8a3;border-color:#57d8a3}.recrate-ai-action-approve.ant-btn:focus-visible,.recrate-ai-action-approve.ant-btn:hover{background:#45c991!important;border-color:#45c991!important;color:#111827!important}.recrate-ai-action-reject.ant-btn,.recrate-ai-delete .recrate-ai-action-approve.ant-btn{background:#ff5b63;border-color:#ff5b63}.recrate-ai-delete .recrate-ai-action-approve.ant-btn:focus-visible,.recrate-ai-delete .recrate-ai-action-approve.ant-btn:hover{background:#f0444f!important;border-color:#f0444f!important;color:#111827!important}.recrate-ai-delete .recrate-ai-action-reject.ant-btn{background:#57d8a3;border-color:#57d8a3}.recrate-ai-delete .recrate-ai-action-reject.ant-btn:focus-visible,.recrate-ai-delete .recrate-ai-action-reject.ant-btn:hover{background:#45c991!important;border-color:#45c991!important;color:#111827!important}.recrate-ai-action-reject.ant-btn:focus-visible,.recrate-ai-action-reject.ant-btn:hover{background:#f0444f!important;border-color:#f0444f!important;color:#111827!important}@media (max-width:900px){.recrate-ai-confirm-bar{grid-template-columns:1fr}.recrate-ai-confirm-controls{flex-wrap:wrap}.recrate-ai-stepper{border-left:0;margin-left:0;padding-left:0}.recrate-ai-field-row{flex-wrap:wrap}.recrate-ai-actions{justify-content:flex-start;width:100%}}@media (max-width:640px){.recrate-quick-settings-header{flex-wrap:wrap}.recrate-quick-settings-filter{flex-basis:100%;max-width:none}}.recrate,.recrate .recrate-ant{display:flex;flex-direction:column;height:100vh;min-height:100vh}.recrate .ant-tabs-left .ant-tabs-nav,.recrate .ant-tabs-right .ant-tabs-nav,.recrate-editor-scroll{height:100%}.recrate .ant-tabs-bottom .ant-tabs-nav-wrap,.recrate .ant-tabs-top .ant-tabs-nav-wrap{overflow-x:auto}
1
+ .el-tabs__item{height:unset}.el-select-dropdown__wrap{max-height:500px!important}.el-select-group__title{font-size:14px!important}.scrollbar{overflow:overlay}.scrollbar::-webkit-scrollbar{background-color:#0000;height:16px;width:16px;z-index:999999}.scrollbar::-webkit-scrollbar-track{background-color:#0000}.scrollbar::-webkit-scrollbar-thumb{background-color:#0000;border:0 solid #fff;border-radius:16px}.scrollbar::-webkit-scrollbar-button{display:none}.scrollbar:hover::-webkit-scrollbar-thumb{background-color:#a0a0a5;border:4px solid #fff}.scrollbar::-webkit-scrollbar-thumb:hover{background-color:#a0a0a5;border:4px solid #f4f4f4}.cm-editor{font-size:12px;height:auto;max-height:none}.recrate-tab-icon{align-items:center;display:flex;font-size:14px;font-weight:600;height:100%;justify-content:center;width:100%}.recrate-add-only-tabs .ant-tabs-nav,.recrate-add-only-tabs .ant-tabs-nav-wrap{height:100%}.recrate-add-only-tabs .ant-tabs-nav-list{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center}.recrate-add-only-tabs .ant-tabs-tab{justify-content:center}.recrate-tab-rail{background:#fff;display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden;position:relative}.recrate-tab-rail-actions{border-bottom:1px solid #e5e7eb;display:flex;flex:0 0 auto;gap:8px;justify-content:center;padding:10px 8px 8px}.recrate-tab-rail-actions-only .recrate-tab-rail-actions{border-bottom:0}.recrate-tab-rail-list{flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;padding:8px 6px 16px;scrollbar-width:none}.recrate-tab-rail-list::-webkit-scrollbar{display:none}.recrate-tab-rail-item{border-radius:6px;color:#334155;cursor:pointer;display:block;margin:2px 0;outline:none;padding:12px 10px;position:relative;transition:background-color .12s ease,color .12s ease;width:100%}.recrate-tab-rail-item:focus-visible,.recrate-tab-rail-item:hover{background:#f1f5f9}.recrate-tab-rail-item-active{background:#eaf2ff;color:#1d4ed8}.recrate-tab-rail-item-active:before{background:#2563eb;border-radius:999px;bottom:10px;content:"";left:0;position:absolute;top:10px;width:3px}.recrate-tab-rail-item-icon{align-items:center;display:flex;justify-content:center;min-height:42px;padding:8px}.recrate-tab-rail-row{align-items:center;display:flex;gap:8px;justify-content:space-between}.recrate-tab-rail-title{font-size:15px;font-weight:600;line-height:1.35;min-width:0;overflow-wrap:anywhere}.recrate-tab-rail-status{align-items:center;display:inline-flex;flex:0 0 auto;gap:4px}.recrate-tab-rail-remove-button{flex:0 0 auto;transition:opacity .12s ease}.recrate-tab-rail-description{color:#64748b;font-size:12px;line-height:1.35;margin-top:4px;overflow-wrap:anywhere}.recrate-tab-rail:after,.recrate-tab-rail:before{content:"";height:34px;left:0;opacity:0;pointer-events:none;position:absolute;right:0;transition:opacity .12s ease;z-index:2}.recrate-tab-rail:before{background:linear-gradient(#fff,#fff0);top:53px}.recrate-tab-rail:after{background:linear-gradient(#fff0,#fff);bottom:0}.recrate-tab-rail-can-scroll-down:after,.recrate-tab-rail-can-scroll-up:before{opacity:1}.recrate-tab-rail-scroll-button{box-shadow:0 2px 8px #0f172a24;left:50%;position:absolute;transform:translateX(-50%);z-index:3}.recrate-tab-rail-scroll-button-up{top:58px}.recrate-tab-rail-scroll-button-down{bottom:8px}.recrate-add-property-drawer{z-index:6000}.recrate-add-property-title.ant-typography{font-size:22px;line-height:1.25;margin:0}.recrate-add-property-row{border:1px solid #0000;border-radius:6px;color:#111827;cursor:pointer;outline:none;padding:10px 12px 10px 14px;position:relative;transition:background-color .12s ease,border-color .12s ease,box-shadow .12s ease,transform .12s ease}.recrate-add-property-row:before{background:#0000;border-radius:999px;bottom:10px;content:"";left:0;position:absolute;top:10px;transition:background-color .12s ease;width:3px}.recrate-add-property-row:focus-visible,.recrate-add-property-row:hover{background:#f8fafc;border-color:#dbeafe;box-shadow:0 1px 4px #0f172a14}.recrate-add-property-row:active{transform:translateY(1px)}.recrate-add-property-row-selected{background:#eff6ff;border-color:#93c5fd;box-shadow:0 0 0 1px #2563eb1f}.recrate-add-property-row-selected:before{background:#2563eb}.recrate-add-property-row-header{color:#111827;min-width:0}.recrate-add-property-row-name{color:inherit;flex:0 1 auto;font-weight:600;min-width:0;overflow-wrap:anywhere}.recrate-add-property-row-type{color:#475569;overflow-wrap:anywhere}.recrate-add-property-row-help{color:#6b7280;display:block;line-height:1.45;margin-top:4px}.recrate-add-property-row-check{color:#2563eb;margin-left:auto}.recrate-quick-settings-header{align-items:center;backdrop-filter:blur(8px);background:#fffffff5;border-bottom:1px solid #dbe3ef;box-shadow:0 6px 14px #0f172a14;display:flex;gap:14px;margin:0 -12px 12px;padding:2px 12px 5px 18px;position:sticky;top:0;z-index:4}.recrate-quick-settings-actions{align-items:center;display:inline-flex;flex:0 0 auto;gap:6px}.recrate-quick-settings-filter{flex:1 1 260px;max-width:420px;min-width:160px}.recrate-property-compact .recrate-add-control{margin-bottom:0;margin-top:0;padding-bottom:0;padding-top:0}.recrate-property-name-with-ai{align-items:center;display:inline-flex;gap:6px;min-width:0}.recrate-ai-edited-icon{align-items:center;background:#effbf5;border-radius:50%;color:#087446;display:inline-flex;flex:0 0 auto;font-size:12px;font-weight:800;height:18px;justify-content:center;line-height:1;width:18px}.recrate-ai-edited-filter-button.ant-btn{color:#087446;font-weight:800;min-width:32px;padding-inline:0}.recrate-ai-edited-filter-button.ant-btn-primary{background:#12a76c;border-color:#12a76c;color:#fff}.recrate-ai-entity-review-card{box-shadow:inset 0 0 0 1px #38c88a47,0 2px 8px #186f4a14}.recrate-ai-entity-delete-card{box-shadow:0 2px 8px #b91c1c14}.recrate-ai-entity-delete-card:hover{box-shadow:0 6px 18px #b91c1c24}.recrate-ai-entity-unlink-card{box-shadow:0 2px 8px #c2610014}.recrate-ai-entity-unlink-card:hover{box-shadow:0 6px 18px #c2610024}.recrate-ai-deleted-linked-entity-id{border-bottom:1px solid #0003;color:#00000073;display:block;font-size:.75rem;line-height:1.35;margin-bottom:4px;overflow-wrap:anywhere;padding-bottom:4px}.recrate-ai-deleted-linked-entity-name{color:#000000e0;font-weight:700;overflow-wrap:anywhere}.recrate-ai-entity-reviewed-card{position:relative}.recrate-ai-entity-edited-badge{bottom:14px;position:absolute;right:14px;z-index:1}.recrate-ai-entity-review-card .recrate-ai-entity-edited-badge{right:130px}.recrate-ai-entity-review-summary{align-items:center;display:flex;gap:8px;justify-content:space-between;margin-top:10px}.recrate-ai-entity-review-meta{align-items:center;display:inline-flex;gap:8px;min-width:0}.recrate-ai-entity-review-count{color:#087446;font-size:13px;font-weight:800;white-space:nowrap}.recrate-ai-entity-inline-actions{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-top:18px}.recrate-ai-entity-inline-actions .recrate-ai-actions{gap:12px}.recrate-ai-entity-review-button.ant-btn{background:#57d8a3;border:0;border-radius:6px;box-shadow:0 1px 2px #00000024;color:#0d2d23;font-size:13px;font-weight:800;height:28px;padding:0 10px}.recrate-ai-entity-review-button.ant-btn:focus-visible,.recrate-ai-entity-review-button.ant-btn:hover{background:#45c991!important;color:#0d2d23!important}.recrate-ai-entity-diff-toggle.ant-btn{background:#ffffffd1;border-color:#1486553d;color:#047857;min-width:28px;padding:0;width:28px}.recrate-ai-entity-diff-toggle.ant-btn:focus-visible,.recrate-ai-entity-diff-toggle.ant-btn:hover{background:#ecfdf5!important;border-color:#14865573;color:#047857!important}.recrate-ai-entity-delete-card .recrate-ai-entity-review-count{color:#b91c1c}.recrate-ai-entity-delete-card .recrate-ai-entity-review-button.ant-btn{background:#ff5b63}.recrate-ai-entity-delete-card .recrate-ai-entity-review-button.ant-btn:focus-visible,.recrate-ai-entity-delete-card .recrate-ai-entity-review-button.ant-btn:hover{background:#f0444f!important;color:#111827!important}.recrate-ai-entity-delete-card .recrate-ai-action-approve.ant-btn{background:#ff5b63;border-color:#ff5b63}.recrate-ai-entity-delete-card .recrate-ai-action-approve.ant-btn:focus-visible,.recrate-ai-entity-delete-card .recrate-ai-action-approve.ant-btn:hover{background:#f0444f!important;border-color:#f0444f!important;color:#111827!important}.recrate-ai-entity-delete-card .recrate-ai-action-reject.ant-btn{background:#57d8a3;border-color:#57d8a3}.recrate-ai-entity-delete-card .recrate-ai-action-reject.ant-btn:focus-visible,.recrate-ai-entity-delete-card .recrate-ai-action-reject.ant-btn:hover{background:#45c991!important;border-color:#45c991!important;color:#111827!important}.recrate-ai-entity-unlink-card .recrate-ai-action-approve.ant-btn{background:#fb923c;border-color:#fb923c}.recrate-ai-entity-unlink-card .recrate-ai-action-approve.ant-btn:focus-visible,.recrate-ai-entity-unlink-card .recrate-ai-action-approve.ant-btn:hover{background:#f97316!important;border-color:#f97316!important;color:#111827!important}.recrate-ai-entity-unlink-card .recrate-ai-action-reject.ant-btn{background:#57d8a3;border-color:#57d8a3}.recrate-ai-entity-unlink-card .recrate-ai-action-reject.ant-btn:focus-visible,.recrate-ai-entity-unlink-card .recrate-ai-action-reject.ant-btn:hover{background:#45c991!important;border-color:#45c991!important;color:#111827!important}.recrate-ai-confirm-bar{align-items:center;background:linear-gradient(90deg,#f5fff9,#f9fbfd);border-bottom:1px solid #c8ded4;border-top:1px solid #e7eee9;box-shadow:inset 4px 0 0 #54d69d;color:#2d3b35;display:grid;gap:10px;grid-template-columns:minmax(220px,1fr) auto;min-height:40px;padding:5px 10px 5px 14px}.recrate-ai-confirm-message{align-items:center;display:flex;font-size:13px;font-weight:700;gap:10px;line-height:1.2;min-width:0;overflow:hidden}.recrate-ai-confirm-spark{color:#12a76c;font-size:17px;line-height:1}.recrate-ai-confirm-controls{align-items:center;display:flex;gap:6px;white-space:nowrap}.recrate-ai-confirm-bar-remaining{background:linear-gradient(90deg,#fff9eb,#f9fbfd);box-shadow:inset 4px 0 0 #f59e0b}.recrate-ai-confirm-bar-remaining .recrate-ai-confirm-spark{color:#b45309}.recrate-ai-review-next-entity.ant-btn{background:#fbbf24;border:0;border-radius:5px;box-shadow:0 1px 2px #0000001f;color:#1f1710;font-size:12px;font-weight:800;height:26px;padding:0 10px}.recrate-ai-review-next-entity.ant-btn:focus-visible,.recrate-ai-review-next-entity.ant-btn:hover{background:#f59e0b!important;color:#1f1710!important}.recrate-ai-bulk-action.ant-btn{border:0;border-radius:5px;box-shadow:0 1px 2px #0000001f;color:#14201b;font-size:12px;font-weight:800;height:26px;padding:0 9px}.recrate-ai-bulk-accept.ant-btn{background:#57d8a3}.recrate-ai-bulk-accept.ant-btn:focus-visible,.recrate-ai-bulk-accept.ant-btn:hover{background:#45c991!important;color:#14201b!important}.recrate-ai-bulk-reject.ant-btn{background:#ff6a71;color:#1f1717}.recrate-ai-bulk-reject.ant-btn:focus-visible,.recrate-ai-bulk-reject.ant-btn:hover{background:#f0444f!important;color:#1f1717!important}.recrate-ai-stepper{align-items:center;border-left:1px solid #cad7d1;color:#53625c;display:inline-flex;font-weight:800;gap:4px;margin-left:2px;padding-left:8px}.recrate-ai-stepper .ant-btn{border-radius:5px;color:#4a5a54;height:24px;width:24px}.recrate-ai-stepper .ant-btn:not(:disabled):focus-visible,.recrate-ai-stepper .ant-btn:not(:disabled):hover{background:#e6f4ec!important;color:#33443d!important}.recrate-ai-step-count{color:#34443d;font-size:13px;min-width:32px;text-align:center}.recrate-ai-review{border-radius:8px;margin-top:18px;padding-top:20px!important;position:relative}.recrate-ai-review-current .recrate-ai-suggestion,.recrate-ai-review-current.recrate-property,.recrate-ai-suggestion.recrate-ai-review-current{border-color:#12a76ce6!important;box-shadow:inset 4px 0 0 #12a76c,0 0 0 3px #12a76c1f,0 6px 18px #1969461f!important}.recrate-ai-delete.recrate-ai-review-current,.recrate-ai-review-current .recrate-ai-delete{border-color:#dc2626e0!important;box-shadow:inset 4px 0 0 #ef4444,0 0 0 3px #ef44441f,0 6px 18px #b91c1c1f!important}.recrate-ai-suggestion{background:linear-gradient(90deg,#22c55e1c,#22c55e0a 55%,#fff0);border:1px solid #22c55e6b;box-shadow:inset 4px 0 0 #22c55e,0 4px 14px #15803d14}.recrate-ai-delete{background:linear-gradient(90deg,#ef44441c,#ef44440a 55%,#fff0);border:1px solid #ef44446b;box-shadow:inset 4px 0 0 #ef4444,0 4px 14px #b91c1c14}.recrate-ai-suggestion:hover{background:linear-gradient(90deg,#22c55e26,#22c55e0d 55%,#fff0)}.recrate-ai-delete:hover{background:linear-gradient(90deg,#ef444426,#ef44440d 55%,#fff0)}.recrate-ai-deleted-entity-card{border-radius:8px;margin:18px;padding:26px 18px 18px;position:relative}.recrate-ai-deleted-entity-header{align-items:flex-start;display:flex;gap:18px;justify-content:space-between}.recrate-ai-deleted-entity-title{color:#7f1d1d;font-size:18px;font-weight:800;line-height:1.25;overflow-wrap:anywhere}.recrate-ai-deleted-entity-id{color:#991b1b;font-size:13px;font-weight:600;margin-top:4px;overflow-wrap:anywhere}.recrate-ai-deleted-entity-controls{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-top:14px}.recrate-ai-deleted-entity-controls .recrate-ai-actions{gap:8px}.recrate-ai-deleted-entity-controls .recrate-ai-actions .ant-btn{border-radius:6px;font-size:13px;height:28px;min-width:66px}.recrate-ai-deleted-entity-summary{align-items:center;color:#7f1d1d;display:inline-flex;font-size:14px;font-weight:700;gap:10px;min-width:0}.recrate-ai-deleted-entity-summary span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recrate-ai-entity-delete-details-toggle.ant-btn{background:#ffffffb8;border-color:#f8717175;color:#b91c1c;flex:0 0 auto;min-width:30px;padding:0;width:30px}.recrate-ai-entity-delete-details-toggle.ant-btn:focus-visible,.recrate-ai-entity-delete-details-toggle.ant-btn:hover,.recrate-ai-entity-delete-details-toggle.ant-btn[aria-pressed=true]{background:#ffe8e8!important;border-color:#f87171bd;color:#b91c1c!important}.recrate-ai-deleted-entity-fields{background:#f8717152;border:1px solid #f8717152;border-radius:8px;display:grid;gap:1px;grid-template-columns:minmax(120px,220px) minmax(0,1fr);margin-top:14px;overflow:hidden}.recrate-ai-deleted-entity-fields-inline{grid-template-columns:minmax(100px,170px) minmax(0,1fr);margin-top:10px}.recrate-ai-deleted-entity-field{display:contents}.recrate-ai-deleted-entity-field-name,.recrate-ai-deleted-entity-field-value{background:#ffffffb8;font-size:13px;min-width:0;overflow-wrap:anywhere;padding:8px 10px}.recrate-ai-deleted-entity-field-name{color:#7f1d1d;font-weight:800}.recrate-ai-deleted-entity-field-value{color:#450a0a}.recrate-ai-entity-diff-card{background:#f0fbf5;border:1px solid #38c88a8c;border-left:4px solid #38c88a;border-radius:8px;box-shadow:0 2px 8px #186f4a14;min-height:226px;overflow:hidden;position:relative}.recrate-ai-entity-diff-card-delete{background:#fff5f5;border-color:#dd505c7a #dd505c7a #dd505c7a #e24d5c;box-shadow:0 2px 8px #85242f14}.recrate-ai-entity-diff-card-unlink{background:#fff7ed;border-color:#f973167a #f973167a #f973167a #f97316;box-shadow:0 2px 8px #c2610014}.recrate-ai-entity-diff-head{align-items:center;background:#e4f7ed;border-bottom:1px solid #38c88a40;color:#087446;display:flex;font-size:13px;font-weight:900;gap:10px;justify-content:space-between;min-height:36px;padding:0 14px}.recrate-ai-entity-diff-card-delete .recrate-ai-entity-diff-head{background:#ffe8e8;border-bottom-color:#dd505c40;color:#9a1f29}.recrate-ai-entity-diff-card-unlink .recrate-ai-entity-diff-head{background:#ffedd5;border-bottom-color:#f9731640;color:#9a3412}.recrate-ai-entity-diff-close.ant-btn{color:currentColor;flex:0 0 auto}.recrate-ai-entity-diff-close.ant-btn:focus-visible,.recrate-ai-entity-diff-close.ant-btn:hover{background:#ffffff9e!important;color:currentColor!important}.recrate-ai-entity-diff-body{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14px;padding:10px 0 52px}.recrate-ai-entity-diff-line{align-items:center;border-bottom:1px solid #0000000a;display:grid;grid-template-columns:28px minmax(74px,96px) minmax(0,1fr);min-height:29px}.recrate-ai-entity-diff-line-context{background:#f7faf8}.recrate-ai-entity-diff-line-removed{background:#fff1f1}.recrate-ai-entity-diff-line-added{background:#effbf5}.recrate-ai-entity-diff-marker{align-self:stretch;display:grid;font-weight:900;place-items:center}.recrate-ai-entity-diff-line-context .recrate-ai-entity-diff-marker{background:#eef2f0;color:#738078}.recrate-ai-entity-diff-line-removed .recrate-ai-entity-diff-marker{background:#ffdede;color:#9a1f29}.recrate-ai-entity-diff-line-added .recrate-ai-entity-diff-marker{background:#d8f5e7;color:#087446}.recrate-ai-entity-diff-key{color:#5b7167;padding:0 8px}.recrate-ai-entity-diff-key,.recrate-ai-entity-diff-value{font-weight:800;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recrate-ai-entity-diff-value{color:#1e2732;padding-right:10px}.recrate-ai-entity-diff-actions{bottom:14px;display:flex;gap:7px;position:absolute;right:14px}.recrate-ai-entity-diff-button.ant-btn{background:#57d8a3;border:0;border-radius:6px;box-shadow:0 1px 2px #00000024;color:#0d2d23;font-size:13px;font-weight:900;height:31px;min-width:100px;padding:0 10px}.recrate-ai-entity-diff-button.ant-btn:focus-visible,.recrate-ai-entity-diff-button.ant-btn:hover{background:#45c991!important;color:#0d2d23!important}.recrate-ai-entity-diff-button-reject.ant-btn{background:#ff6a71;color:#171717}.recrate-ai-entity-diff-button-reject.ant-btn:focus-visible,.recrate-ai-entity-diff-button-reject.ant-btn:hover{background:#f0444f!important;color:#171717!important}.recrate-ai-suggestion-badge{align-items:center;background:#ecfdf5;border:1px solid #10b98161;border-radius:7px;box-shadow:0 1px 2px #0f764a14;color:#047857;display:inline-flex;font-size:13px;font-weight:700;gap:6px;height:30px;left:18px;line-height:1;padding:0 11px;position:absolute;top:-15px;z-index:1}.recrate-ai-delete .recrate-ai-suggestion-badge{background:#fef2f2;border-color:#f871716b;box-shadow:0 1px 2px #b91c1c14;color:#b91c1c}.recrate-ai-suggestion-badge-icon{color:#047857;font-size:14px;line-height:1}.recrate-ai-delete .recrate-ai-suggestion-badge-icon{color:#b91c1c}.recrate-ai-entity-status-badge{left:14px;top:-15px}.recrate-ai-entity-delete-card .recrate-ai-entity-status-badge{background:#fef2f2;border-color:#f871716b;box-shadow:0 1px 2px #b91c1c14;color:#b91c1c}.recrate-ai-entity-delete-card .recrate-ai-entity-status-badge .recrate-ai-suggestion-badge-icon{color:#b91c1c}.recrate-ai-entity-unlink-card .recrate-ai-entity-status-badge{background:#fff7ed;border-color:#fb923c73;box-shadow:0 1px 2px #c2610014;color:#9a3412}.recrate-ai-entity-unlink-card .recrate-ai-entity-status-badge .recrate-ai-suggestion-badge-icon{color:#c2410c}.recrate-ai-field-row{align-items:flex-start}.recrate-ai-field-control .ant-space-compact{width:100%}.recrate-ai-field-control .ant-input,.recrate-ai-field-control .ant-input-affix-wrapper,.recrate-ai-field-control .ant-input-number,.recrate-ai-field-control .ant-picker,.recrate-ai-field-control .ant-select-selector,.recrate-ai-field-control textarea.ant-input{background:#f0fdf4!important;border-color:#22c55e!important;box-shadow:inset 0 0 0 1px #22c55e2e,0 0 0 3px #22c55e1a!important}.recrate-ai-delete .recrate-ai-field-control .ant-input,.recrate-ai-delete .recrate-ai-field-control .ant-input-affix-wrapper,.recrate-ai-delete .recrate-ai-field-control .ant-input-number,.recrate-ai-delete .recrate-ai-field-control .ant-picker,.recrate-ai-delete .recrate-ai-field-control .ant-select-selector,.recrate-ai-delete .recrate-ai-field-control textarea.ant-input{background:#fef2f2!important;border-color:#ef4444!important;box-shadow:inset 0 0 0 1px #ef44442e,0 0 0 3px #ef44441a!important}.recrate-ai-field-control .ant-space-compact>.ant-input,.recrate-ai-field-control .ant-space-compact>.ant-input-affix-wrapper,.recrate-ai-field-control .ant-space-compact>textarea.ant-input{border-end-end-radius:8px!important;border-start-end-radius:8px!important}.recrate-ai-field-control .ant-space-compact>.ant-btn{display:none}.recrate-context-review-drawer .ant-drawer-content{overflow:hidden}.recrate-context-review-drawer .ant-drawer-body{display:flex;flex-direction:column;min-height:0}.recrate-context-review{display:flex;flex:1 1 auto;flex-direction:column;gap:14px;min-height:0;overflow:hidden;padding:18px 20px 0}.recrate-context-review-summary{align-items:flex-start;background:linear-gradient(90deg,#f0fbf5,#f8fbfd);border:1px solid #38c88a4d;border-radius:8px;box-shadow:inset 4px 0 0 #38c88a,0 2px 8px #186f4a14;display:flex;gap:12px;padding:12px 14px}.recrate-context-review-spark{background:#57d8a3;border-radius:999px;box-shadow:0 1px 2px #0f172a2e;color:#063f2a;display:grid;flex:0 0 auto;font-size:12px;font-weight:900;height:32px;line-height:1;place-items:center;width:32px}.recrate-context-review-description.ant-typography{color:#2d3b35;font-size:14px;font-weight:650;line-height:1.45;margin:0;min-width:0}.recrate-ai-context-diff{background:#f0fbf5;border:1px solid #38c88a8c;border-left:4px solid #38c88a;border-radius:8px;box-shadow:0 2px 8px #186f4a14;display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:hidden}.recrate-ai-context-diff-head{align-items:center;background:#e4f7ed;border-bottom:1px solid #38c88a40;color:#087446;display:flex;font-size:13px;font-weight:900;gap:10px;justify-content:space-between;min-height:38px;padding:0 14px}.recrate-ai-context-diff-body{background:#fff;flex:1 1 auto;min-height:0;overflow:auto}.recrate-ai-context-diff-line{align-items:stretch;border-bottom:1px solid #0000000f;display:grid;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;grid-template-columns:32px 48px 48px minmax(0,1fr);line-height:1.45;min-width:0}.recrate-ai-context-diff-line:last-child{border-bottom:0}.recrate-ai-context-diff-marker{align-self:stretch;display:grid;font-size:16px;font-weight:900;place-items:center}.recrate-ai-context-diff-gutter{align-items:flex-start;background:#ffffff8a;border-right:1px solid #0000000d;color:#7b8781;display:flex;justify-content:flex-end;min-width:0;padding:7px 8px 7px 0;-webkit-user-select:none;user-select:none}.recrate-ai-context-diff-value{color:#1e2732;margin:0;min-width:0;overflow:visible;overflow-wrap:anywhere;padding:7px 12px;white-space:pre-wrap;word-break:break-word}.recrate-ai-context-diff-line-context{background:#fbfcfd}.recrate-ai-context-diff-line-removed{background:#fff1f1}.recrate-ai-context-diff-line-removed .recrate-ai-context-diff-marker{background:#ffdede;color:#9a1f29}.recrate-ai-context-diff-line-added{background:#effbf5}.recrate-ai-context-diff-line-added .recrate-ai-context-diff-marker{background:#d8f5e7;color:#087446}.recrate-ai-context-diff-line-omitted{background:#f7faf8;border:0;border-bottom:1px solid #0000000f;min-height:30px;text-align:left;width:100%}.recrate-ai-context-diff-line-omitted .recrate-ai-context-diff-marker{background:#eef2f0;color:#738078;font-size:12px}.recrate-ai-context-diff-line-omitted .recrate-ai-context-diff-gutter{background:#f7faf8}.recrate-ai-context-diff-omitted-button{cursor:pointer;outline:none}.recrate-ai-context-diff-omitted-button:hover{background:#eef8f2}.recrate-ai-context-diff-omitted-button:hover .recrate-ai-context-diff-gutter,.recrate-ai-context-diff-omitted-button:hover .recrate-ai-context-diff-marker{background:#e1f2e8}.recrate-ai-context-diff-omitted-button:focus-visible{box-shadow:inset 0 0 0 2px #12a76c8c}.recrate-ai-context-diff-omitted-label{align-items:center;color:#5b7167;display:flex;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:12px;font-weight:800;min-width:0;padding:6px 12px}.recrate-context-review-actions{background:#fff;border-top:1px solid #dce5e0;box-shadow:0 -6px 14px #0f172a0d;display:flex;flex:0 0 auto;gap:8px;justify-content:flex-end;padding:14px 20px 18px}.recrate-ai-field-diff{background:#fbfcfd;border:1px solid #d4ddd8;border-radius:7px;box-shadow:0 1px 2px #0000000d;font-size:15px;overflow:hidden;width:100%}.recrate-ai-field-diff-head{align-items:center;background:#f5f8f6;border-bottom:1px solid #dce5e0;color:#506158;display:flex;font-size:13px;font-weight:800;gap:10px;justify-content:space-between;min-height:31px;padding:0 10px}.recrate-ai-field-diff-chip{color:#087446;flex:0 0 auto;font-size:12px}.recrate-ai-field-diff-line{border-bottom:1px solid #0000000a;display:grid;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;grid-template-columns:28px minmax(0,1fr);min-height:36px}.recrate-ai-field-diff-line:last-child{border-bottom:0}.recrate-ai-field-diff-marker{align-self:stretch;display:grid;font-weight:900;place-items:center}.recrate-ai-field-diff-value{color:#27322d;margin:0;min-width:0;overflow:auto;overflow-wrap:anywhere;padding:7px 11px;white-space:pre-wrap}.recrate-ai-field-diff-line-removed{background:#fff1f1}.recrate-ai-field-diff-line-removed .recrate-ai-field-diff-marker{background:#ffdede;color:#9a1f29}.recrate-ai-field-diff-line-added{background:#effbf5}.recrate-ai-field-diff-line-added .recrate-ai-field-diff-marker{background:#d8f5e7;color:#087446}.recrate-ai-field-diff-empty{color:#7b8781;font-style:italic}.recrate-ai-actions{align-items:flex-start;display:flex;flex:0 0 auto;gap:18px}.recrate-ai-actions .ant-btn{border:0;border-radius:8px;box-shadow:0 2px 5px #0f172a2e;color:#111827;font-size:14px;font-weight:700;height:34px;min-width:82px}.recrate-ai-action-diff.ant-btn{background:#fff;border:1px solid #d4ddd8;color:#0f172a;min-width:36px;padding:0;width:36px}.recrate-ai-action-diff.ant-btn:focus-visible,.recrate-ai-action-diff.ant-btn:hover{background:#f5f8f6!important;border-color:#9bc7b3!important;color:#087446!important}.recrate-ai-action-diff.ant-btn[aria-pressed=true]{background:#d8f5e7;border-color:#9bc7b3;color:#087446}.recrate-ai-action-approve.ant-btn{background:#57d8a3;border-color:#57d8a3}.recrate-ai-action-approve.ant-btn:focus-visible,.recrate-ai-action-approve.ant-btn:hover{background:#45c991!important;border-color:#45c991!important;color:#111827!important}.recrate-ai-action-reject.ant-btn,.recrate-ai-delete .recrate-ai-action-approve.ant-btn{background:#ff5b63;border-color:#ff5b63}.recrate-ai-delete .recrate-ai-action-approve.ant-btn:focus-visible,.recrate-ai-delete .recrate-ai-action-approve.ant-btn:hover{background:#f0444f!important;border-color:#f0444f!important;color:#111827!important}.recrate-ai-delete .recrate-ai-action-reject.ant-btn{background:#57d8a3;border-color:#57d8a3}.recrate-ai-delete .recrate-ai-action-reject.ant-btn:focus-visible,.recrate-ai-delete .recrate-ai-action-reject.ant-btn:hover{background:#45c991!important;border-color:#45c991!important;color:#111827!important}.recrate-ai-action-reject.ant-btn:focus-visible,.recrate-ai-action-reject.ant-btn:hover{background:#f0444f!important;border-color:#f0444f!important;color:#111827!important}@media (max-width:900px){.recrate-ai-confirm-bar{grid-template-columns:1fr}.recrate-ai-confirm-controls{flex-wrap:wrap}.recrate-ai-stepper{border-left:0;margin-left:0;padding-left:0}.recrate-ai-field-row{flex-wrap:wrap}.recrate-ai-actions{justify-content:flex-start;width:100%}}@media (max-width:640px){.recrate-quick-settings-header{flex-wrap:wrap}.recrate-quick-settings-filter{flex-basis:100%;max-width:none}}.recrate,.recrate .recrate-ant{display:flex;flex-direction:column;height:100vh;min-height:100vh}.recrate .ant-tabs-left .ant-tabs-nav,.recrate .ant-tabs-right .ant-tabs-nav,.recrate-editor-scroll{height:100%}.recrate .ant-tabs-bottom .ant-tabs-nav-wrap,.recrate .ant-tabs-top .ant-tabs-nav-wrap{overflow-x:auto}
2
2
  /*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */@layer theme, base, components, utilities;@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-200:oklch(88.5% 0.062 18.334);--color-red-500:oklch(63.7% 0.237 25.331);--color-red-600:oklch(57.7% 0.245 27.325);--color-red-700:oklch(50.5% 0.213 27.518);--color-green-100:oklch(96.2% 0.044 156.743);--color-green-200:oklch(92.5% 0.084 155.995);--color-green-600:oklch(62.7% 0.194 149.214);--color-cyan-200:oklch(91.7% 0.08 205.041);--color-sky-100:oklch(95.1% 0.026 236.824);--color-sky-500:oklch(68.5% 0.169 237.323);--color-blue-200:oklch(88.2% 0.059 254.128);--color-blue-300:oklch(80.9% 0.105 251.813);--color-blue-500:oklch(62.3% 0.214 259.815);--color-blue-600:oklch(54.6% 0.245 262.881);--color-blue-700:oklch(48.8% 0.243 264.376);--color-indigo-200:oklch(87% 0.065 274.039);--color-purple-200:oklch(90.2% 0.063 306.703);--color-slate-200:oklch(92.9% 0.013 255.508);--color-slate-300:oklch(86.9% 0.022 252.894);--color-slate-700:oklch(37.2% 0.044 257.287);--color-gray-50:oklch(98.5% 0.002 247.839);--color-gray-200:oklch(92.8% 0.006 264.531);--color-gray-300:oklch(87.2% 0.01 258.338);--color-gray-400:oklch(70.7% 0.022 261.325);--color-gray-600:oklch(44.6% 0.03 256.802);--color-gray-700:oklch(37.3% 0.034 259.733);--color-gray-800:oklch(27.8% 0.033 256.848);--color-black:#000;--color-white:#fff;--spacing:0.25rem;--text-xs:0.75rem;--text-xs--line-height:1.33333;--text-sm:0.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-lg:1.125rem;--text-lg--line-height:1.55556;--font-weight-light:300;--font-weight-bold:700;--radius-lg:0.5rem;--animate-pulse:pulse 2s cubic-bezier(0.4,0,0.6,1) infinite;--default-transition-duration:150ms;--default-transition-timing-function:cubic-bezier(0.4,0,0.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,::file-selector-button,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:initial}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}::file-selector-button,button,input,optgroup,select,textarea{background-color:initial;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::placeholder{color:currentcolor;@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,#0000)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}::file-selector-button,button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-2{bottom:calc(var(--spacing)*2)}.left-0{left:calc(var(--spacing)*0)}.isolate{isolation:isolate}.z-50{z-index:50}.float-right{float:right}.container{width:100%;@media (width >= 40rem){max-width:40rem}@media (width >= 48rem){max-width:48rem}@media (width >= 64rem){max-width:64rem}@media (width >= 80rem){max-width:80rem}@media (width >= 96rem){max-width:96rem}}.m-1{margin:calc(var(--spacing)*1)}.m-2{margin:calc(var(--spacing)*2)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.table{display:table}.h-1{height:calc(var(--spacing)*1)}.h-3{height:calc(var(--spacing)*3)}.h-8{height:calc(var(--spacing)*8)}.h-\[520px\]{height:520px}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\/2{width:50%}.w-1\/3{width:33.33333%}.w-2\/3{width:66.66667%}.w-2\/6{width:33.33333%}.w-3{width:calc(var(--spacing)*3)}.w-4\/6{width:66.66667%}.w-6{width:calc(var(--spacing)*6)}.w-12{width:calc(var(--spacing)*12)}.w-\[600px\]{width:600px}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[715px\]{max-width:715px}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-72{min-width:calc(var(--spacing)*72)}.flex-1{flex:1}.flex-\[1_1_360px\]{flex:1 1 360px}.flex-grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-content-between{place-content:space-between}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.space-y-1{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*1*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*1*var(--tw-space-y-reverse))}}.space-y-2{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}}.space-y-3{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*3*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*3*var(--tw-space-y-reverse))}}.space-y-4{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*4*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*4*var(--tw-space-y-reverse))}}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-2{column-gap:calc(var(--spacing)*2)}.space-x-1{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*1*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*1*var(--tw-space-x-reverse))}}.space-x-2{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*2*var(--tw-space-x-reverse))}}.space-x-4{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*4*var(--tw-space-x-reverse))}}.gap-y-2{row-gap:calc(var(--spacing)*2)}.divide-y{:where(&>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}}.divide-gray-300{:where(&>:not(:last-child)){border-color:var(--color-gray-300)}}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-solid{--tw-border-style:solid;border-style:solid}.border-black{border-color:var(--color-black)}.border-black\/20{border-color:color-mix(in srgb,#000 20%,#0000);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--color-black) 20%,#0000)}}.border-gray-400{border-color:var(--color-gray-400)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-700{border-color:var(--color-slate-700)}.bg-blue-200{background-color:var(--color-blue-200)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-200{background-color:var(--color-green-200)}.bg-indigo-200{background-color:var(--color-indigo-200)}.bg-purple-200{background-color:var(--color-purple-200)}.bg-red-200{background-color:var(--color-red-200)}.bg-red-500{background-color:var(--color-red-500)}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-700{background-color:var(--color-slate-700)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2{padding-top:calc(var(--spacing)*2)}.pr-1{padding-right:calc(var(--spacing)*1)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pl-1{padding-left:calc(var(--spacing)*1)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.whitespace-pre-wrap{white-space:pre-wrap}.text-blue-600{color:var(--color-blue-600)}.text-gray-400{color:var(--color-gray-400)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-green-600{color:var(--color-green-600)}.text-red-600{color:var(--color-red-600)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.opacity-0{opacity:0}.opacity-50{opacity:50%}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.duration-1000{--tw-duration:1000ms;transition-duration:1s}.group-hover\:opacity-100{&:is(:where(.group):hover *){@media (hover:hover){opacity:100%}}}.hover\:scale-105{&:hover{@media (hover:hover){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.hover\:rounded-r-none{&:hover{@media (hover:hover){border-bottom-right-radius:0;border-top-right-radius:0}}}.hover\:bg-blue-300{&:hover{@media (hover:hover){background-color:var(--color-blue-300)}}}.hover\:bg-blue-700{&:hover{@media (hover:hover){background-color:var(--color-blue-700)}}}.hover\:bg-cyan-200{&:hover{@media (hover:hover){background-color:var(--color-cyan-200)}}}.hover\:bg-green-200{&:hover{@media (hover:hover){background-color:var(--color-green-200)}}}.hover\:bg-red-700{&:hover{@media (hover:hover){background-color:var(--color-red-700)}}}.hover\:bg-sky-100{&:hover{@media (hover:hover){background-color:var(--color-sky-100)}}}.hover\:text-black{&:hover{@media (hover:hover){color:var(--color-black)}}}.focus\:border-2{&:focus{border-style:var(--tw-border-style);border-width:2px}}.focus\:border-green-600{&:focus{border-color:var(--color-green-600)}}.focus\:outline-none{&:focus{--tw-outline-style:none;outline-style:none}}.focus-visible\:ring-2{&:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus-visible\:ring-sky-500{&:focus-visible{--tw-ring-color:var(--color-sky-500)}}.focus-visible\:outline-none{&:focus-visible{--tw-outline-style:none;outline-style:none}}.xl\:w-1\/5{@media (width >= 80rem){width:20%}}.xl\:w-4\/5{@media (width >= 80rem){width:80%}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@keyframes pulse{50%{opacity:.5}}@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}
3
3
  .recrate{all:revert-layer}
@@ -70454,14 +70454,14 @@ const EntityType = ({
70454
70454
  ] })
70455
70455
  ] });
70456
70456
  };
70457
- const valueIsEmpty = (value) => {
70457
+ const valueIsEmpty$1 = (value) => {
70458
70458
  if (value === void 0 || value === null) return true;
70459
70459
  if (typeof value === "string") return value.trim().length === 0;
70460
70460
  if (Array.isArray(value)) return value.length === 0;
70461
70461
  return false;
70462
70462
  };
70463
70463
  const formatValue = (value, emptyLabel) => {
70464
- if (valueIsEmpty(value)) return emptyLabel;
70464
+ if (valueIsEmpty$1(value)) return emptyLabel;
70465
70465
  if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
70466
70466
  return String(value);
70467
70467
  }
@@ -70488,11 +70488,11 @@ const AiFieldDiffView = ({
70488
70488
  ] }),
70489
70489
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "recrate-ai-field-diff-line recrate-ai-field-diff-line-removed", children: [
70490
70490
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-ai-field-diff-marker", children: "-" }),
70491
- /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: `recrate-ai-field-diff-value ${valueIsEmpty(previousValue) ? "recrate-ai-field-diff-empty" : ""}`, children: removedValue })
70491
+ /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: `recrate-ai-field-diff-value ${valueIsEmpty$1(previousValue) ? "recrate-ai-field-diff-empty" : ""}`, children: removedValue })
70492
70492
  ] }),
70493
70493
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "recrate-ai-field-diff-line recrate-ai-field-diff-line-added", children: [
70494
70494
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-ai-field-diff-marker", children: "+" }),
70495
- /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: `recrate-ai-field-diff-value ${valueIsEmpty(isDelete ? void 0 : currentValue) ? "recrate-ai-field-diff-empty" : ""}`, children: addedValue })
70495
+ /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: `recrate-ai-field-diff-value ${valueIsEmpty$1(isDelete ? void 0 : currentValue) ? "recrate-ai-field-diff-empty" : ""}`, children: addedValue })
70496
70496
  ] })
70497
70497
  ] });
70498
70498
  };
@@ -83046,6 +83046,7 @@ const LinkedEntityCard = ({
83046
83046
  );
83047
83047
  };
83048
83048
  const approvalIsApproved = (approvalRecord) => (approvalRecord == null ? void 0 : approvalRecord.approved) === true || (approvalRecord == null ? void 0 : approvalRecord.approved) === "true";
83049
+ const CONTEXT_APPROVAL_PROPERTY_NAME = "@context";
83049
83050
  const getApprovalEntities = (approvalData) => {
83050
83051
  if (!approvalData) return [];
83051
83052
  if (Array.isArray(approvalData)) return approvalData;
@@ -83170,6 +83171,18 @@ const getEntityApprovalRecords = (approvalData, entityId, property) => {
83170
83171
  if (!Array.isArray(entityApproval == null ? void 0 : entityApproval.approval)) return [];
83171
83172
  return entityApproval.approval.filter((approvalRecord) => (approvalRecord == null ? void 0 : approvalRecord.propertyName) === property);
83172
83173
  };
83174
+ const getPendingEntityContextApprovalRecords = (approvalData, entityId) => {
83175
+ const entityApproval = getEntityApproval(approvalData, entityId);
83176
+ if (!Array.isArray(entityApproval == null ? void 0 : entityApproval.approval)) return [];
83177
+ const approvedContextExists = entityApproval.approval.some((approvalRecord) => (approvalRecord == null ? void 0 : approvalRecord.propertyName) === CONTEXT_APPROVAL_PROPERTY_NAME && approvalIsApproved(approvalRecord));
83178
+ if (approvedContextExists) return [];
83179
+ return entityApproval.approval.filter((approvalRecord) => (approvalRecord == null ? void 0 : approvalRecord.propertyName) === CONTEXT_APPROVAL_PROPERTY_NAME && !approvalIsApproved(approvalRecord));
83180
+ };
83181
+ const getPendingContextApprovalRecords = (approvalData) => getApprovalEntities(approvalData).flatMap((entityApproval) => {
83182
+ const entityId = entityApproval == null ? void 0 : entityApproval["@id"];
83183
+ if (!entityId) return [];
83184
+ return getPendingEntityContextApprovalRecords(approvalData, entityId).map((approvalRecord) => ({ entityId, approvalRecord }));
83185
+ });
83173
83186
  const getReferenceId = (value) => {
83174
83187
  if (typeof (value == null ? void 0 : value["@id"]) === "string" && value["@id"].length > 0) return value["@id"];
83175
83188
  return void 0;
@@ -83202,12 +83215,12 @@ const getPendingEntityApprovalRecords = (approvalData, entityId) => {
83202
83215
  const approvedPropertyNames = new Set(
83203
83216
  entityApproval.approval.filter(approvalIsApproved).map((approvalRecord) => approvalRecord == null ? void 0 : approvalRecord.propertyName).filter((propertyName2) => typeof propertyName2 === "string" && propertyName2.length > 0)
83204
83217
  );
83205
- return entityApproval.approval.filter((approvalRecord) => (approvalRecord == null ? void 0 : approvalRecord.propertyName) && approvalRecord.propertyName !== "@context" && !approvalIsApproved(approvalRecord) && !approvedPropertyNames.has(approvalRecord.propertyName));
83218
+ return entityApproval.approval.filter((approvalRecord) => (approvalRecord == null ? void 0 : approvalRecord.propertyName) && approvalRecord.propertyName !== CONTEXT_APPROVAL_PROPERTY_NAME && !approvalIsApproved(approvalRecord) && !approvedPropertyNames.has(approvalRecord.propertyName));
83206
83219
  };
83207
83220
  const getPendingEntityApprovalFieldCount = (approvalData, entityId) => new Set(
83208
83221
  getPendingEntityApprovalRecords(approvalData, entityId).map((approvalRecord) => approvalRecord == null ? void 0 : approvalRecord.propertyName).filter((propertyName2) => typeof propertyName2 === "string" && propertyName2.length > 0)
83209
83222
  ).size;
83210
- const getPendingApprovalEntities = (approvalData) => getApprovalEntities(approvalData).filter((entityApproval) => getPendingEntityApprovalRecords(approvalData, entityApproval == null ? void 0 : entityApproval["@id"]).length > 0);
83223
+ const getPendingApprovalEntities = (approvalData) => getApprovalEntities(approvalData).filter((entityApproval) => getPendingEntityApprovalRecords(approvalData, entityApproval == null ? void 0 : entityApproval["@id"]).length > 0 || getPendingEntityContextApprovalRecords(approvalData, entityApproval == null ? void 0 : entityApproval["@id"]).length > 0);
83211
83224
  const getApprovedEntityApprovalRecords = (approvalData, entityId) => {
83212
83225
  const entityApproval = getEntityApproval(approvalData, entityId);
83213
83226
  if (!Array.isArray(entityApproval == null ? void 0 : entityApproval.approval)) return [];
@@ -110865,24 +110878,152 @@ const oneDarkHighlightStyle = /* @__PURE__ */ HighlightStyle.define([
110865
110878
  }
110866
110879
  ]);
110867
110880
  const oneDark = [oneDarkTheme, /* @__PURE__ */ syntaxHighlighting(oneDarkHighlightStyle)];
110881
+ const valueIsEmpty = (value) => {
110882
+ if (value === void 0 || value === null) return true;
110883
+ if (typeof value === "string") return value.trim().length === 0;
110884
+ if (Array.isArray(value)) return value.length === 0;
110885
+ return false;
110886
+ };
110887
+ const formatContextValue = (value, emptyLabel) => {
110888
+ if (valueIsEmpty(value)) return emptyLabel;
110889
+ try {
110890
+ return JSON.stringify(value, null, 2);
110891
+ } catch {
110892
+ return String(value);
110893
+ }
110894
+ };
110895
+ const CONTEXT_DIFF_CONTEXT_RADIUS = 2;
110896
+ const splitContextLines = (value, emptyLabel) => {
110897
+ const formatted = formatContextValue(value, emptyLabel);
110898
+ return formatted.length > 0 ? formatted.split("\n") : [emptyLabel];
110899
+ };
110900
+ const buildRawContextDiffRows = (previousLines, currentLines) => {
110901
+ const previousCount = previousLines.length;
110902
+ const currentCount = currentLines.length;
110903
+ const lengths = Array.from(
110904
+ { length: previousCount + 1 },
110905
+ () => Array(currentCount + 1).fill(0)
110906
+ );
110907
+ for (let previousIndex2 = previousCount - 1; previousIndex2 >= 0; previousIndex2 -= 1) {
110908
+ for (let currentIndex2 = currentCount - 1; currentIndex2 >= 0; currentIndex2 -= 1) {
110909
+ lengths[previousIndex2][currentIndex2] = previousLines[previousIndex2] === currentLines[currentIndex2] ? lengths[previousIndex2 + 1][currentIndex2 + 1] + 1 : Math.max(lengths[previousIndex2 + 1][currentIndex2], lengths[previousIndex2][currentIndex2 + 1]);
110910
+ }
110911
+ }
110912
+ const rows = [];
110913
+ let previousIndex = 0;
110914
+ let currentIndex = 0;
110915
+ while (previousIndex < previousCount || currentIndex < currentCount) {
110916
+ if (previousIndex < previousCount && currentIndex < currentCount && previousLines[previousIndex] === currentLines[currentIndex]) {
110917
+ rows.push({
110918
+ kind: "context",
110919
+ oldLine: previousIndex + 1,
110920
+ newLine: currentIndex + 1,
110921
+ text: previousLines[previousIndex],
110922
+ key: `context-${previousIndex}-${currentIndex}`
110923
+ });
110924
+ previousIndex += 1;
110925
+ currentIndex += 1;
110926
+ continue;
110927
+ }
110928
+ if (currentIndex >= currentCount || previousIndex < previousCount && lengths[previousIndex + 1][currentIndex] >= lengths[previousIndex][currentIndex + 1]) {
110929
+ rows.push({
110930
+ kind: "removed",
110931
+ oldLine: previousIndex + 1,
110932
+ text: previousLines[previousIndex],
110933
+ key: `removed-${previousIndex}-${currentIndex}`
110934
+ });
110935
+ previousIndex += 1;
110936
+ continue;
110937
+ }
110938
+ rows.push({
110939
+ kind: "added",
110940
+ newLine: currentIndex + 1,
110941
+ text: currentLines[currentIndex],
110942
+ key: `added-${previousIndex}-${currentIndex}`
110943
+ });
110944
+ currentIndex += 1;
110945
+ }
110946
+ return rows;
110947
+ };
110948
+ const compactContextDiffRows = (rows) => {
110949
+ const changedIndexes = rows.map((row, index2) => row.kind === "context" ? -1 : index2).filter((index2) => index2 >= 0);
110950
+ if (changedIndexes.length === 0) return rows;
110951
+ const keepIndexes = /* @__PURE__ */ new Set();
110952
+ changedIndexes.forEach((index2) => {
110953
+ for (let contextIndex = Math.max(0, index2 - CONTEXT_DIFF_CONTEXT_RADIUS); contextIndex <= Math.min(rows.length - 1, index2 + CONTEXT_DIFF_CONTEXT_RADIUS); contextIndex += 1) {
110954
+ keepIndexes.add(contextIndex);
110955
+ }
110956
+ });
110957
+ const compactRows = [];
110958
+ let omittedRows = [];
110959
+ rows.forEach((row, index2) => {
110960
+ if (!keepIndexes.has(index2)) {
110961
+ omittedRows.push(row);
110962
+ return;
110963
+ }
110964
+ if (omittedRows.length > 0) {
110965
+ compactRows.push({
110966
+ kind: "omitted",
110967
+ text: String(omittedRows.length),
110968
+ key: `omitted-${index2}-${omittedRows.length}`,
110969
+ rows: omittedRows
110970
+ });
110971
+ omittedRows = [];
110972
+ }
110973
+ compactRows.push(row);
110974
+ });
110975
+ if (omittedRows.length > 0) {
110976
+ compactRows.push({
110977
+ kind: "omitted",
110978
+ text: String(omittedRows.length),
110979
+ key: `omitted-end-${omittedRows.length}`,
110980
+ rows: omittedRows
110981
+ });
110982
+ }
110983
+ return compactRows;
110984
+ };
110985
+ const buildContextDiffRows = (previousValue, currentValue, emptyLabel) => {
110986
+ const previousLines = splitContextLines(previousValue, emptyLabel);
110987
+ const currentLines = splitContextLines(currentValue, emptyLabel);
110988
+ return compactContextDiffRows(buildRawContextDiffRows(previousLines, currentLines));
110989
+ };
110868
110990
  const DialogEditContext = ({
110869
110991
  onClose,
110870
110992
  onUpdateContext,
110871
- open
110993
+ open,
110994
+ approvalRecord,
110995
+ readonly = false,
110996
+ onAcceptAiContext,
110997
+ onRejectAiContext
110872
110998
  }) => {
110873
110999
  const { t: t2 } = useTranslation();
110874
111000
  const crateManager = useContext(CrateManagerContext);
110875
111001
  const [error2, setError] = useState(false);
110876
111002
  const editorRef = useRef(void 0);
110877
111003
  const containerRef = useRef(null);
111004
+ const isAiReview = Boolean(approvalRecord);
111005
+ const currentContext2 = React__default.useMemo(() => {
111006
+ var _a2;
111007
+ return (_a2 = crateManager == null ? void 0 : crateManager.getContext) == null ? void 0 : _a2.call(crateManager);
111008
+ }, [crateManager, open, approvalRecord]);
111009
+ const emptyLabel = String(t2("ai_empty_value"));
111010
+ const contextDiffRows = React__default.useMemo(() => buildContextDiffRows(approvalRecord == null ? void 0 : approvalRecord.previousValue, currentContext2, emptyLabel), [approvalRecord == null ? void 0 : approvalRecord.previousValue, currentContext2, emptyLabel]);
111011
+ const [expandedOmittedRows, setExpandedOmittedRows] = useState(() => /* @__PURE__ */ new Set());
110878
111012
  useEffect(() => {
110879
- if (open) {
111013
+ setExpandedOmittedRows(/* @__PURE__ */ new Set());
111014
+ }, [contextDiffRows]);
111015
+ useEffect(() => {
111016
+ if (open && !isAiReview) {
110880
111017
  const timeout = setTimeout(() => {
110881
111018
  if (containerRef.current) {
110882
- const context = crateManager.getContext();
110883
111019
  const initialState = EditorState2.create({
110884
- doc: JSON.stringify(context, null, 2),
110885
- extensions: [basicSetup, oneDark, javascript()]
111020
+ doc: JSON.stringify(currentContext2, null, 2),
111021
+ extensions: [
111022
+ basicSetup,
111023
+ oneDark,
111024
+ javascript(),
111025
+ ...readonly ? [EditorView.editable.of(false)] : []
111026
+ ]
110886
111027
  });
110887
111028
  if (editorRef.current) {
110888
111029
  editorRef.current.destroy();
@@ -110899,7 +111040,7 @@ const DialogEditContext = ({
110899
111040
  (_a2 = editorRef.current) == null ? void 0 : _a2.destroy();
110900
111041
  };
110901
111042
  }
110902
- }, [open, crateManager]);
111043
+ }, [open, crateManager, currentContext2, isAiReview, readonly]);
110903
111044
  const handleSave = () => {
110904
111045
  var _a2;
110905
111046
  try {
@@ -110912,34 +111053,115 @@ const DialogEditContext = ({
110912
111053
  setError(true);
110913
111054
  }
110914
111055
  };
111056
+ const toggleOmittedRows = (key) => {
111057
+ setExpandedOmittedRows((current) => {
111058
+ const next2 = new Set(current);
111059
+ if (next2.has(key)) {
111060
+ next2.delete(key);
111061
+ } else {
111062
+ next2.add(key);
111063
+ }
111064
+ return next2;
111065
+ });
111066
+ };
111067
+ const renderContextDiffRow = (row, keyOverride) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `recrate-ai-context-diff-line recrate-ai-context-diff-line-${row.kind}`, children: [
111068
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-ai-context-diff-marker", children: row.kind === "removed" ? "-" : row.kind === "added" ? "+" : "" }),
111069
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-ai-context-diff-gutter", children: row.oldLine ?? "" }),
111070
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-ai-context-diff-gutter", children: row.newLine ?? "" }),
111071
+ /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: `recrate-ai-context-diff-value ${valueIsEmpty(row.text) ? "recrate-ai-field-diff-empty" : ""}`, children: row.text })
111072
+ ] }, keyOverride ?? row.key);
110915
111073
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
110916
111074
  Drawer2,
110917
111075
  {
110918
- title: /* @__PURE__ */ jsxRuntimeExports.jsx(Typography.Title, { className: "m-2", level: 4, children: t2("edit_context") }),
111076
+ title: /* @__PURE__ */ jsxRuntimeExports.jsx(Typography.Title, { className: "m-2", level: 4, children: isAiReview ? t2("ai_context_review_title") : t2("edit_context") }),
110919
111077
  placement: "left",
110920
111078
  onClose,
110921
111079
  open,
110922
- width: 600,
111080
+ width: isAiReview ? "min(820px, calc(100vw - 32px))" : 600,
111081
+ getContainer: false,
111082
+ rootStyle: { position: "absolute" },
111083
+ rootClassName: isAiReview ? "recrate-context-review-drawer" : void 0,
111084
+ className: isAiReview ? "recrate-context-review-drawer" : void 0,
111085
+ styles: isAiReview ? { body: { padding: 0, overflow: "hidden" } } : void 0,
110923
111086
  children: [
110924
- /* @__PURE__ */ jsxRuntimeExports.jsx(Divider, { style: { margin: "16px 0" } }),
110925
- /* @__PURE__ */ jsxRuntimeExports.jsx(
110926
- "div",
110927
- {
110928
- ref: containerRef,
110929
- className: "cm-editor"
110930
- }
110931
- ),
110932
- error2 && /* @__PURE__ */ jsxRuntimeExports.jsx(Typography.Text, { type: "danger", children: "The context is not a valid JSON data structure." }),
110933
- /* @__PURE__ */ jsxRuntimeExports.jsx(
110934
- Button$1,
110935
- {
110936
- onClick: handleSave,
110937
- type: "primary",
110938
- icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$2, {}),
110939
- style: { marginTop: "16px" },
110940
- children: t2("save_label")
110941
- }
110942
- )
111087
+ isAiReview && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "recrate-context-review", children: [
111088
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "recrate-context-review-summary", children: [
111089
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-context-review-spark", children: "AI" }),
111090
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Typography.Paragraph, { className: "recrate-context-review-description", children: t2("ai_context_review_description") })
111091
+ ] }),
111092
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "recrate-ai-context-diff", "aria-label": String(t2("ai_context_diff_aria")), children: [
111093
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "recrate-ai-context-diff-head", children: [
111094
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t2("ai_context_diff_title") }),
111095
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "recrate-ai-field-diff-chip", children: t2("ai_edit_chip") })
111096
+ ] }),
111097
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-ai-context-diff-body", children: contextDiffRows.map((row) => {
111098
+ var _a2;
111099
+ if (row.kind !== "omitted") {
111100
+ return renderContextDiffRow(row);
111101
+ }
111102
+ const expanded = expandedOmittedRows.has(row.key);
111103
+ const count = Number(row.text ?? 0);
111104
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(React__default.Fragment, { children: [
111105
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
111106
+ "button",
111107
+ {
111108
+ type: "button",
111109
+ className: "recrate-ai-context-diff-line recrate-ai-context-diff-line-omitted recrate-ai-context-diff-omitted-button",
111110
+ "aria-expanded": expanded,
111111
+ onClick: () => toggleOmittedRows(row.key),
111112
+ children: [
111113
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-ai-context-diff-marker", children: expanded ? "-" : "..." }),
111114
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-ai-context-diff-gutter" }),
111115
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-ai-context-diff-gutter" }),
111116
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "recrate-ai-context-diff-omitted-label", children: expanded ? t2("ai_context_diff_hide_omitted_lines", { count }) : t2("ai_context_diff_show_omitted_lines", { count }) })
111117
+ ]
111118
+ }
111119
+ ),
111120
+ expanded && ((_a2 = row.rows) == null ? void 0 : _a2.map((hiddenRow) => renderContextDiffRow(hiddenRow, `${row.key}-${hiddenRow.key}`)))
111121
+ ] }, row.key);
111122
+ }) })
111123
+ ] })
111124
+ ] }),
111125
+ !isAiReview && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
111126
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Divider, { style: { margin: "16px 0" } }),
111127
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
111128
+ "div",
111129
+ {
111130
+ ref: containerRef,
111131
+ className: "cm-editor"
111132
+ }
111133
+ ),
111134
+ error2 && /* @__PURE__ */ jsxRuntimeExports.jsx(Typography.Text, { type: "danger", children: "The context is not a valid JSON data structure." })
111135
+ ] }),
111136
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Space, { className: isAiReview ? "recrate-context-review-actions" : void 0, style: isAiReview ? void 0 : { marginTop: "16px" }, children: [
111137
+ isAiReview && !readonly && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
111138
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
111139
+ Button$1,
111140
+ {
111141
+ onClick: onAcceptAiContext,
111142
+ className: "recrate-ai-entity-diff-button",
111143
+ children: t2("ai_accept")
111144
+ }
111145
+ ),
111146
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
111147
+ Button$1,
111148
+ {
111149
+ onClick: onRejectAiContext,
111150
+ className: "recrate-ai-entity-diff-button recrate-ai-entity-diff-button-reject",
111151
+ children: t2("ai_reject")
111152
+ }
111153
+ )
111154
+ ] }),
111155
+ !readonly && !isAiReview && /* @__PURE__ */ jsxRuntimeExports.jsx(
111156
+ Button$1,
111157
+ {
111158
+ onClick: handleSave,
111159
+ type: "primary",
111160
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefIcon$2, {}),
111161
+ children: t2("save_label")
111162
+ }
111163
+ )
111164
+ ] })
110943
111165
  ]
110944
111166
  }
110945
111167
  );
@@ -112794,6 +113016,7 @@ const useEntityMutationHandlers = ({
112794
113016
  if (isURL(data.value) && ((_a2 = state.configuration) == null ? void 0 : _a2.enableUrlMarkup)) {
112795
113017
  handleCreateEntity({
112796
113018
  property: data.property,
113019
+ propertyId: data.propertyId,
112797
113020
  json: {
112798
113021
  "@id": data.value,
112799
113022
  "@type": "URL",
@@ -112955,10 +113178,11 @@ const useEntityNavigationState = ({
112955
113178
  if (!source) return [];
112956
113179
  return Array.from(source.querySelectorAll(selector)).map((node2) => node2.getAttribute(dataAttribute)).filter((value) => Boolean(value));
112957
113180
  }, [activeContentRef]);
112958
- const captureViewContext = useCallback((tabName = activeTab, explicitScrollTop) => {
113181
+ const captureViewContext = useCallback((tabName = activeTab, explicitScrollTop, options = {}) => {
112959
113182
  var _a2, _b, _c, _d, _e2, _f, _g, _h;
112960
113183
  const entityId = contextEntity == null ? void 0 : contextEntity["@id"];
112961
113184
  if (!entityId) return;
113185
+ const updateActiveTab = options.updateActiveTab !== false;
112962
113186
  if (restoreInProgressRef.current && typeof explicitScrollTop !== "number") {
112963
113187
  debugScroll("capture.skipped-during-restore", {
112964
113188
  entityId,
@@ -112980,6 +113204,7 @@ const useEntityNavigationState = ({
112980
113204
  latestId: (_e2 = state.editorState.latest()) == null ? void 0 : _e2.id,
112981
113205
  explicitScrollTop,
112982
113206
  scrollTop,
113207
+ updateActiveTab,
112983
113208
  previousScrollTop: ((_g = (_f = previous.tabStates) == null ? void 0 : _f[tabName]) == null ? void 0 : _g.scrollTop) ?? null,
112984
113209
  viewport: activeContentRef.current ? {
112985
113210
  clientHeight: activeContentRef.current.clientHeight,
@@ -112988,7 +113213,7 @@ const useEntityNavigationState = ({
112988
113213
  } : null
112989
113214
  });
112990
113215
  const navigationState = {
112991
- activeTab: tabName,
113216
+ ...updateActiveTab ? { activeTab: tabName } : {},
112992
113217
  tabStates: { [tabName]: nextTabState },
112993
113218
  uiState: {
112994
113219
  showAddPanel,
@@ -113145,7 +113370,7 @@ const useEntityScrollRestoration = ({
113145
113370
  restoreInProgressRef.current = false;
113146
113371
  viewport.style.scrollBehavior = previousInlineScrollBehavior;
113147
113372
  if (navigationRestoreReadyRef.current && !isAiScrollRestoreSuppressed()) {
113148
- captureViewContext(activeTab, viewport.scrollTop);
113373
+ captureViewContext(activeTab, viewport.scrollTop, { updateActiveTab: false });
113149
113374
  }
113150
113375
  viewport.removeEventListener("scroll", handleScroll);
113151
113376
  window.cancelAnimationFrame(rafId);
@@ -113849,7 +114074,7 @@ const buildAiApprovalNavigationKey = (entityId, approvalRecord) => {
113849
114074
  return `${entityId}:${propertyName2}:${operation}:${timestamp}:${previousValue}`;
113850
114075
  };
113851
114076
  const RenderEntity = forwardRef((props, ref) => {
113852
- var _a2, _b, _c, _d, _e2, _f, _g, _h, _i, _j, _k;
114077
+ var _a2, _b, _c, _d, _e2, _f, _g, _h, _i, _j, _k, _l;
113853
114078
  const {
113854
114079
  entity,
113855
114080
  onLoadEntity,
@@ -113893,6 +114118,8 @@ const RenderEntity = forwardRef((props, ref) => {
113893
114118
  const [hideEmptyFields, setHideEmptyFields] = useState(false);
113894
114119
  const [showAiEditedFields, setShowAiEditedFields] = useState(false);
113895
114120
  const [selectedAiApprovalIndex, setSelectedAiApprovalIndex] = useState(0);
114121
+ const [contextReviewDialogOpen, setContextReviewDialogOpen] = useState(false);
114122
+ const [contextReviewEntityId, setContextReviewEntityId] = useState(void 0);
113896
114123
  const [iconView, setIconView] = useState(false);
113897
114124
  const [hoveredTabKey, setHoveredTabKey] = useState(null);
113898
114125
  const initialTabPaneWidth = useMemo$1(() => {
@@ -114012,9 +114239,25 @@ const RenderEntity = forwardRef((props, ref) => {
114012
114239
  )), [approvedAiApprovals]);
114013
114240
  const selectedAiApproval = pendingAiApprovals[selectedAiApprovalIndex] ?? pendingAiApprovals[0];
114014
114241
  const selectedAiApprovalProperty = (selectedAiApproval == null ? void 0 : selectedAiApproval.propertyName) ?? pendingDeletedEntityReviewProperties[0];
114242
+ const pendingContextApprovalItems = useMemo$1(() => getPendingContextApprovalRecords(approvalContext == null ? void 0 : approvalContext.roCrateApproval), [approvalContext == null ? void 0 : approvalContext.roCrateApproval]);
114243
+ const currentContextApprovalItem = useMemo$1(() => {
114244
+ if (contextReviewEntityId) {
114245
+ const approvalRecord = getPendingEntityContextApprovalRecords(
114246
+ approvalContext == null ? void 0 : approvalContext.roCrateApproval,
114247
+ contextReviewEntityId
114248
+ )[0];
114249
+ if (approvalRecord) {
114250
+ return { entityId: contextReviewEntityId, approvalRecord };
114251
+ }
114252
+ }
114253
+ return pendingContextApprovalItems[0];
114254
+ }, [approvalContext == null ? void 0 : approvalContext.roCrateApproval, contextReviewEntityId, pendingContextApprovalItems]);
114015
114255
  const canReviewAiApprovalEntity = useCallback((entityApproval) => {
114016
114256
  const entityId = entityApproval == null ? void 0 : entityApproval["@id"];
114017
114257
  if (!entityId) return false;
114258
+ if (getPendingEntityContextApprovalRecords(approvalContext == null ? void 0 : approvalContext.roCrateApproval, entityId).length > 0) {
114259
+ return true;
114260
+ }
114018
114261
  if (isPendingEntityDeleteApproval(entityApproval)) {
114019
114262
  const reviewTarget = getDeletedEntityReviewTarget(entityApproval);
114020
114263
  if (!(reviewTarget == null ? void 0 : reviewTarget.entityId)) return false;
@@ -114029,16 +114272,28 @@ const RenderEntity = forwardRef((props, ref) => {
114029
114272
  link: false,
114030
114273
  materialise: false
114031
114274
  }));
114032
- }, [crateManager]);
114275
+ }, [approvalContext == null ? void 0 : approvalContext.roCrateApproval, crateManager]);
114033
114276
  const pendingOtherAiApprovalEntities = useMemo$1(() => getPendingApprovalEntities(approvalContext == null ? void 0 : approvalContext.roCrateApproval).filter((entityApproval) => !entityIdsMatch(entityApproval == null ? void 0 : entityApproval["@id"], contextEntity == null ? void 0 : contextEntity["@id"]) && canReviewAiApprovalEntity(entityApproval)), [approvalContext == null ? void 0 : approvalContext.roCrateApproval, canReviewAiApprovalEntity, contextEntity == null ? void 0 : contextEntity["@id"]]);
114034
- const pendingOtherAiApprovalFieldCount = useMemo$1(() => pendingOtherAiApprovalEntities.reduce((count, entityApproval) => count + getPendingEntityApprovalFieldCount(
114035
- approvalContext == null ? void 0 : approvalContext.roCrateApproval,
114036
- entityApproval == null ? void 0 : entityApproval["@id"]
114037
- ), 0), [approvalContext == null ? void 0 : approvalContext.roCrateApproval, pendingOtherAiApprovalEntities]);
114277
+ const pendingOtherAiApprovalFieldCount = useMemo$1(() => pendingOtherAiApprovalEntities.reduce((count, entityApproval) => {
114278
+ const entityId = entityApproval == null ? void 0 : entityApproval["@id"];
114279
+ const contextFieldCount = getPendingEntityContextApprovalRecords(
114280
+ approvalContext == null ? void 0 : approvalContext.roCrateApproval,
114281
+ entityId
114282
+ ).length > 0 ? 1 : 0;
114283
+ return count + getPendingEntityApprovalFieldCount(
114284
+ approvalContext == null ? void 0 : approvalContext.roCrateApproval,
114285
+ entityId
114286
+ ) + contextFieldCount;
114287
+ }, 0), [approvalContext == null ? void 0 : approvalContext.roCrateApproval, pendingOtherAiApprovalEntities]);
114038
114288
  const handleReviewNextAiApprovalEntity = useCallback(() => {
114039
114289
  for (const entityApproval of pendingOtherAiApprovalEntities) {
114040
114290
  const nextEntityId = entityApproval == null ? void 0 : entityApproval["@id"];
114041
114291
  if (!nextEntityId) continue;
114292
+ if (getPendingEntityContextApprovalRecords(approvalContext == null ? void 0 : approvalContext.roCrateApproval, nextEntityId).length > 0) {
114293
+ setContextReviewEntityId(nextEntityId);
114294
+ setContextReviewDialogOpen(true);
114295
+ return;
114296
+ }
114042
114297
  if (isPendingEntityDeleteApproval(entityApproval)) {
114043
114298
  const reviewTarget = getDeletedEntityReviewTarget(entityApproval);
114044
114299
  if (!reviewTarget) continue;
@@ -114059,7 +114314,7 @@ const RenderEntity = forwardRef((props, ref) => {
114059
114314
  onLoadEntity({ id: nextEntityId });
114060
114315
  return;
114061
114316
  }
114062
- }, [crateManager, hideEmptyFields, onLoadEntity, pendingOtherAiApprovalEntities]);
114317
+ }, [approvalContext == null ? void 0 : approvalContext.roCrateApproval, crateManager, hideEmptyFields, onLoadEntity, pendingOtherAiApprovalEntities]);
114063
114318
  useImperativeHandle(ref, () => ({
114064
114319
  setTab: (tabName) => {
114065
114320
  setActiveTab(tabName);
@@ -114127,7 +114382,8 @@ const RenderEntity = forwardRef((props, ref) => {
114127
114382
  const fallbackTab = tabNames.includes("about") ? "about" : tabNames[0] ?? "about";
114128
114383
  const currentTabStillValid = layout.renderTabs && (contextEntity == null ? void 0 : contextEntity["@id"]) === entity2["@id"] && tabNames.includes(activeTab);
114129
114384
  const savedActiveTab = (navState == null ? void 0 : navState.activeTab) ?? (isCurrentHistoryEntity ? latestEntry == null ? void 0 : latestEntry.tab : void 0);
114130
- const restoredTab = currentTabStillValid ? activeTab : layout.renderTabs && savedActiveTab && tabNames.includes(savedActiveTab) ? savedActiveTab : fallbackTab;
114385
+ const savedTabStillValid = layout.renderTabs && typeof savedActiveTab === "string" && tabNames.includes(savedActiveTab);
114386
+ const restoredTab = savedTabStillValid ? savedActiveTab : currentTabStillValid ? activeTab : fallbackTab;
114131
114387
  const pendingAddedProfileSelection = pendingAddedProfileSelectionRef.current;
114132
114388
  const pendingAddedProfileTabKeys = Array.isArray((_a3 = navState == null ? void 0 : navState.uiState) == null ? void 0 : _a3.pendingAddedProfileTabKeys) ? navState.uiState.pendingAddedProfileTabKeys : readPendingAddedProfileTabKeys(entity2["@id"]);
114133
114389
  let nextActiveTab = restoredTab;
@@ -114181,6 +114437,9 @@ const RenderEntity = forwardRef((props, ref) => {
114181
114437
  isCurrentHistoryEntity,
114182
114438
  renderTabs: layout.renderTabs,
114183
114439
  tabNames,
114440
+ savedActiveTab,
114441
+ savedTabStillValid,
114442
+ currentTabStillValid,
114184
114443
  restoredTab,
114185
114444
  nextActiveTab,
114186
114445
  navState
@@ -114329,6 +114588,49 @@ const RenderEntity = forwardRef((props, ref) => {
114329
114588
  onWarning,
114330
114589
  onError
114331
114590
  });
114591
+ useEffect(() => {
114592
+ if (!contextReviewDialogOpen) return;
114593
+ if (currentContextApprovalItem) return;
114594
+ setContextReviewDialogOpen(false);
114595
+ setContextReviewEntityId(void 0);
114596
+ }, [contextReviewDialogOpen, currentContextApprovalItem]);
114597
+ const handleCloseContextReviewDialog = () => {
114598
+ setContextReviewDialogOpen(false);
114599
+ setContextReviewEntityId(void 0);
114600
+ };
114601
+ const handleAcceptAiContext = () => {
114602
+ var _a3, _b2;
114603
+ const approvalItem = currentContextApprovalItem;
114604
+ if (!approvalItem) return;
114605
+ (_b2 = approvalContext == null ? void 0 : approvalContext.markApprovalPropertyApproved) == null ? void 0 : _b2.call(approvalContext, {
114606
+ entityId: approvalItem.entityId,
114607
+ propertyName: CONTEXT_APPROVAL_PROPERTY_NAME,
114608
+ decision: "accept",
114609
+ value: (_a3 = crateManager == null ? void 0 : crateManager.getContext) == null ? void 0 : _a3.call(crateManager)
114610
+ });
114611
+ handleCloseContextReviewDialog();
114612
+ };
114613
+ const handleRejectAiContext = () => {
114614
+ var _a3, _b2;
114615
+ try {
114616
+ const approvalItem = currentContextApprovalItem;
114617
+ if (!approvalItem) return;
114618
+ const previousContext = (_a3 = approvalItem.approvalRecord) == null ? void 0 : _a3.previousValue;
114619
+ if (propertyValueHasContent(previousContext)) {
114620
+ handleUpdateContext(previousContext);
114621
+ }
114622
+ (_b2 = approvalContext == null ? void 0 : approvalContext.markApprovalPropertyApproved) == null ? void 0 : _b2.call(approvalContext, {
114623
+ entityId: approvalItem.entityId,
114624
+ propertyName: CONTEXT_APPROVAL_PROPERTY_NAME,
114625
+ decision: "reject",
114626
+ value: previousContext
114627
+ });
114628
+ handleCloseContextReviewDialog();
114629
+ } catch (error2) {
114630
+ console.error(error2);
114631
+ onError();
114632
+ }
114633
+ };
114332
114634
  const toggleIconView = () => {
114333
114635
  if (!iconView) {
114334
114636
  labelTabPaneWidthRef.current = clampLabelTabPaneWidth(tabPaneWidth);
@@ -115078,6 +115380,18 @@ const RenderEntity = forwardRef((props, ref) => {
115078
115380
  persistTabWidth(width);
115079
115381
  }
115080
115382
  }
115383
+ ),
115384
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
115385
+ DialogEditContext,
115386
+ {
115387
+ open: contextReviewDialogOpen,
115388
+ onClose: handleCloseContextReviewDialog,
115389
+ onUpdateContext: handleUpdateContext,
115390
+ approvalRecord: currentContextApprovalItem == null ? void 0 : currentContextApprovalItem.approvalRecord,
115391
+ readonly: (_l = state.configuration) == null ? void 0 : _l.readonly,
115392
+ onAcceptAiContext: handleAcceptAiContext,
115393
+ onRejectAiContext: handleRejectAiContext
115394
+ }
115081
115395
  )
115082
115396
  ] }),
115083
115397
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -116697,7 +117011,7 @@ class CrateManager {
116697
117011
  return this.warnings;
116698
117012
  }
116699
117013
  __updateContext({ name: name2, id: id2 }) {
116700
- if (id2 && !(id2 in this.contextDefinitions)) {
117014
+ if (id2 && this.localContext[name2] !== id2) {
116701
117015
  this.contextDefinitions[id2] = true;
116702
117016
  this.localContext[name2] = id2;
116703
117017
  }
@@ -122371,6 +122685,18 @@ const en = {
122371
122685
  filter_attribute_set: "Filter the attribute set",
122372
122686
  // DialogEditContext.tsx
122373
122687
  save_label: "Save",
122688
+ ai_context_review_title: "Review context change",
122689
+ ai_context_review_description: "The crate context was changed by AI. Review the diff before accepting or restoring the previous context.",
122690
+ ai_context_diff_aria: "AI context diff",
122691
+ ai_context_diff_title: "Proposed context change",
122692
+ ai_previous_context: "Previous context",
122693
+ ai_current_context: "Current context",
122694
+ ai_context_diff_omitted_lines_one: "{{count}} unchanged line hidden",
122695
+ ai_context_diff_omitted_lines_other: "{{count}} unchanged lines hidden",
122696
+ ai_context_diff_show_omitted_lines_one: "Show {{count}} unchanged line",
122697
+ ai_context_diff_show_omitted_lines_other: "Show {{count}} unchanged lines",
122698
+ ai_context_diff_hide_omitted_lines_one: "Hide {{count}} unchanged line",
122699
+ ai_context_diff_hide_omitted_lines_other: "Hide {{count}} unchanged lines",
122374
122700
  // DialogPreviewCrate.tsx
122375
122701
  preview_loading: "loading ...",
122376
122702
  // DialogBrowseEntities.tsx
@@ -122589,6 +122915,18 @@ const hu = {
122589
122915
  filter_attribute_set: "Attribútumok szűrése",
122590
122916
  // DialogEditContext.tsx
122591
122917
  save_label: "Mentés",
122918
+ ai_context_review_title: "Kontextusmódosítás ellenőrzése",
122919
+ ai_context_review_description: "Az adatcsomag kontextusát AI módosította. Ellenőrizze az eltérést mielőtt elfogadná, vagy elutasítaná azt.",
122920
+ ai_context_diff_aria: "AI kontextuseltérés",
122921
+ ai_context_diff_title: "Javasolt kontextusmódosítás",
122922
+ ai_previous_context: "Előző kontextus",
122923
+ ai_current_context: "Jelenlegi kontextus",
122924
+ ai_context_diff_omitted_lines_one: "{{count}} változatlan sor elrejtve",
122925
+ ai_context_diff_omitted_lines_other: "{{count}} változatlan sor elrejtve",
122926
+ ai_context_diff_show_omitted_lines_one: "{{count}} változatlan sor megjelenítése",
122927
+ ai_context_diff_show_omitted_lines_other: "{{count}} változatlan sor megjelenítése",
122928
+ ai_context_diff_hide_omitted_lines_one: "{{count}} változatlan sor elrejtése",
122929
+ ai_context_diff_hide_omitted_lines_other: "{{count}} változatlan sor elrejtése",
122592
122930
  // DialogPreviewCrate.tsx
122593
122931
  preview_loading: "betöltés ...",
122594
122932
  // DialogBrowseEntities.tsx
@@ -123642,7 +123980,7 @@ var EmotionCacheContext = /* @__PURE__ */ React.createContext(
123642
123980
  }) : null
123643
123981
  );
123644
123982
  var CacheProvider = EmotionCacheContext.Provider;
123645
- const version = "0.1.35";
123983
+ const version = "0.1.37";
123646
123984
  const pkg = {
123647
123985
  version
123648
123986
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arpproject/recrate",
3
- "version": "0.1.35",
3
+ "version": "0.1.37",
4
4
  "type": "module",
5
5
  "main": "./dist/recrate.es.js",
6
6
  "module": "./dist/recrate.es.js",