codicent-app-sdk 0.7.10 → 0.8.6
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.
- package/dist/cjs/_virtual/scheduler.production.js +1 -0
- package/dist/cjs/components/DataMessagePicker.d.ts +7 -1
- package/dist/cjs/components/DataMessagePicker.d.ts.map +1 -1
- package/dist/cjs/components/DataMessagePicker.js +1 -1
- package/dist/cjs/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/cjs/components/ErrorBoundary.js +1 -1
- package/dist/cjs/components/ListView.d.ts +54 -1
- package/dist/cjs/components/ListView.d.ts.map +1 -1
- package/dist/cjs/components/ListView.js +1 -1
- package/dist/cjs/components/MessageItem.js +1 -1
- package/dist/cjs/components/RecordModal.d.ts +6 -1
- package/dist/cjs/components/RecordModal.d.ts.map +1 -1
- package/dist/cjs/components/RecordModal.js +1 -1
- package/dist/cjs/config/index.d.ts +1 -0
- package/dist/cjs/config/index.d.ts.map +1 -1
- package/dist/cjs/config/index.js +1 -1
- package/dist/cjs/hooks/useChat.d.ts +4 -1
- package/dist/cjs/hooks/useChat.d.ts.map +1 -1
- package/dist/cjs/hooks/useChat.js +1 -1
- package/dist/cjs/hooks/useCodicentApp.js +1 -1
- package/dist/cjs/hooks/useRealtimeVoiceAI.d.ts.map +1 -1
- package/dist/cjs/hooks/useRealtimeVoiceAI.js +1 -1
- package/dist/cjs/hooks/useToaster.d.ts +1 -1
- package/dist/cjs/hooks/useToaster.d.ts.map +1 -1
- package/dist/cjs/hooks/useToaster.js +1 -1
- package/dist/cjs/hooks/useUserRoles.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/node_modules/@floating-ui/core/dist/floating-ui.core.js +1 -1
- package/dist/cjs/node_modules/@floating-ui/devtools/dist/floating-ui.devtools.js +1 -1
- package/dist/cjs/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +1 -1
- package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +1 -1
- package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-aria/lib/activedescendant/useOptionWalker.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/Calendar/useCalendarStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDay/CalendarDay.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDay/useCalendarDayStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDayGrid/CalendarDayGrid.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDayGrid/CalendarGridDayCell.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDayGrid/CalendarMonthHeaderRow.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDayGrid/useCalendarDayGridStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDayGrid/useWeekCornerStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarMonth/CalendarMonth.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarPicker/useCalendarPickerStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarYear/CalendarYear.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-combobox/lib/components/Combobox/useCombobox.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-combobox/lib/components/Combobox/useComboboxStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-combobox/lib/components/Listbox/useListboxStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-combobox/lib/components/Option/useOption.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-combobox/lib/components/Option/useOptionStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-combobox/lib/contexts/ListboxContext.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-combobox/lib/utils/dropdownKeyActions.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-combobox/lib/utils/useComboboxPositioning.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-combobox/lib/utils/useListboxSlot.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-context-selector/lib/createContext.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-context-selector/lib/useContextSelector.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-context-selector/lib/useHasParentContext.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-datepicker-compat/lib/components/DatePicker/useDatePickerStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-input/lib/components/Input/useInput.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-input/lib/components/Input/useInputStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-jsx-runtime/lib/jsx/createJSX.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-jsx-runtime/lib/utils/createCompatSlotComponent.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-jsx-runtime/lib/utils/warnIfElementTypeIsInvalid.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-portal/lib/components/Portal/Portal.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-portal/lib/components/Portal/renderPortal.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-portal/lib/components/Portal/usePortal.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-portal/lib/components/Portal/usePortalMountNode.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-portal/lib/components/Portal/usePortalMountNodeStyles.js +1 -0
- package/dist/cjs/node_modules/@fluentui/react-positioning/lib/createPositionManager.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-positioning/lib/usePositioning.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-positioning/lib/utils/getReactFiberFromNode.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-tabster/lib/focus/focusVisiblePolyfill.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-tabster/lib/hooks/useDangerousNeverHidden.js +1 -0
- package/dist/cjs/node_modules/@fluentui/react-tabster/lib/hooks/useModalAttributes.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-tabster/lib/hooks/useTabster.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-timepicker-compat/lib/components/TimePicker/useTimePickerStyles.styles.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-utilities/lib/compose/assertSlots.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-utilities/lib/compose/getIntrinsicElementProps.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-utilities/lib/compose/slot.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-utilities/lib/hooks/useFirstMount.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-utilities/lib/hooks/useOnClickOutside.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-utilities/lib/utils/getNativeElementProps.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-utilities/lib/utils/properties.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-utilities/lib/virtualParent/getParent.js +1 -1
- package/dist/cjs/node_modules/@fluentui/react-utilities/lib/virtualParent/setVirtualParent.js +1 -1
- package/dist/cjs/node_modules/@griffel/core/src/__resetStyles.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/__styles.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/constants.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/devtools/getAtomicDebugSequenceTree.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/devtools/getResetDebugSequence.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/devtools/getSourceURLfromError.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/devtools/injectDevTools.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/devtools/isDevToolsEnabled.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/devtools/mergeDebugSequence.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/devtools/react-render-tracker/stackTrace.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/devtools/store.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/devtools/utils.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/insertionFactory.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/mergeClasses.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/renderer/createDOMRenderer.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/renderer/createIsomorphicStyleSheet.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/renderer/getStyleSheetForBucket.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/renderer/safeInsertRule.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/runtime/reduceToClassNameForSlots.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/runtime/utils/hashSequence.js +1 -0
- package/dist/cjs/node_modules/@griffel/core/src/runtime/utils/normalizeCSSBucketEntry.js +1 -0
- package/dist/cjs/node_modules/@griffel/react/src/RendererContext.js +1 -0
- package/dist/cjs/node_modules/@griffel/react/src/TextDirectionContext.js +1 -0
- package/dist/cjs/node_modules/@griffel/react/src/__resetStyles.js +1 -0
- package/dist/cjs/node_modules/@griffel/react/src/__styles.js +1 -0
- package/dist/cjs/node_modules/@griffel/react/src/insertionFactory.js +1 -0
- package/dist/cjs/node_modules/@griffel/react/src/useInsertionEffect.js +1 -0
- package/dist/cjs/node_modules/@griffel/react/src/utils/canUseDOM.js +1 -0
- package/dist/cjs/node_modules/scheduler/cjs/scheduler.development.js +3 -3
- package/dist/cjs/node_modules/scheduler/cjs/scheduler.production.js +10 -0
- package/dist/cjs/node_modules/scheduler/index.js +1 -1
- package/dist/cjs/pages/Chat.d.ts.map +1 -1
- package/dist/cjs/pages/Chat.js +1 -1
- package/dist/cjs/pages/ListPage.d.ts +6 -1
- package/dist/cjs/pages/ListPage.d.ts.map +1 -1
- package/dist/cjs/pages/ListPage.js +1 -1
- package/dist/cjs/services/codicent.d.ts +23 -2
- package/dist/cjs/services/codicent.d.ts.map +1 -1
- package/dist/cjs/services/codicent.js +1 -1
- package/dist/cjs/types/index.d.ts +28 -0
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.d.ts +3 -0
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/reference.d.ts +15 -0
- package/dist/cjs/utils/reference.d.ts.map +1 -0
- package/dist/cjs/utils/reference.js +1 -0
- package/dist/cjs/utils/telemetry.d.ts +27 -0
- package/dist/cjs/utils/telemetry.d.ts.map +1 -0
- package/dist/cjs/utils/telemetry.js +1 -0
- package/dist/esm/_virtual/scheduler.production.js +1 -0
- package/dist/esm/components/DataMessagePicker.d.ts +7 -1
- package/dist/esm/components/DataMessagePicker.d.ts.map +1 -1
- package/dist/esm/components/DataMessagePicker.js +1 -1
- package/dist/esm/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/esm/components/ErrorBoundary.js +1 -1
- package/dist/esm/components/ListView.d.ts +54 -1
- package/dist/esm/components/ListView.d.ts.map +1 -1
- package/dist/esm/components/ListView.js +1 -1
- package/dist/esm/components/MessageItem.js +1 -1
- package/dist/esm/components/RecordModal.d.ts +6 -1
- package/dist/esm/components/RecordModal.d.ts.map +1 -1
- package/dist/esm/components/RecordModal.js +1 -1
- package/dist/esm/config/index.d.ts +1 -0
- package/dist/esm/config/index.d.ts.map +1 -1
- package/dist/esm/config/index.js +1 -1
- package/dist/esm/hooks/useChat.d.ts +4 -1
- package/dist/esm/hooks/useChat.d.ts.map +1 -1
- package/dist/esm/hooks/useChat.js +1 -1
- package/dist/esm/hooks/useCodicentApp.js +1 -1
- package/dist/esm/hooks/useRealtimeVoiceAI.d.ts.map +1 -1
- package/dist/esm/hooks/useRealtimeVoiceAI.js +1 -1
- package/dist/esm/hooks/useToaster.d.ts +1 -1
- package/dist/esm/hooks/useToaster.d.ts.map +1 -1
- package/dist/esm/hooks/useToaster.js +1 -1
- package/dist/esm/hooks/useUserRoles.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/node_modules/@floating-ui/core/dist/floating-ui.core.js +1 -1
- package/dist/esm/node_modules/@floating-ui/devtools/dist/floating-ui.devtools.js +1 -1
- package/dist/esm/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +1 -1
- package/dist/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +1 -1
- package/dist/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-aria/lib/activedescendant/useOptionWalker.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/Calendar/useCalendarStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDay/CalendarDay.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDay/useCalendarDayStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDayGrid/CalendarDayGrid.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDayGrid/CalendarGridDayCell.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDayGrid/CalendarMonthHeaderRow.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDayGrid/useCalendarDayGridStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarDayGrid/useWeekCornerStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarMonth/CalendarMonth.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarPicker/useCalendarPickerStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-calendar-compat/lib/components/CalendarYear/CalendarYear.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-combobox/lib/components/Combobox/useCombobox.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-combobox/lib/components/Combobox/useComboboxStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-combobox/lib/components/Listbox/useListboxStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-combobox/lib/components/Option/useOption.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-combobox/lib/components/Option/useOptionStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-combobox/lib/contexts/ListboxContext.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-combobox/lib/utils/dropdownKeyActions.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-combobox/lib/utils/useComboboxPositioning.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-combobox/lib/utils/useListboxSlot.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-context-selector/lib/createContext.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-context-selector/lib/useContextSelector.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-context-selector/lib/useHasParentContext.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-datepicker-compat/lib/components/DatePicker/useDatePickerStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-input/lib/components/Input/useInput.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-input/lib/components/Input/useInputStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-jsx-runtime/lib/jsx/createJSX.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-jsx-runtime/lib/utils/createCompatSlotComponent.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-jsx-runtime/lib/utils/warnIfElementTypeIsInvalid.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-portal/lib/components/Portal/Portal.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-portal/lib/components/Portal/renderPortal.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-portal/lib/components/Portal/usePortal.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-portal/lib/components/Portal/usePortalMountNode.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-portal/lib/components/Portal/usePortalMountNodeStyles.js +1 -0
- package/dist/esm/node_modules/@fluentui/react-positioning/lib/createPositionManager.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-positioning/lib/usePositioning.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-positioning/lib/utils/getReactFiberFromNode.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-tabster/lib/focus/focusVisiblePolyfill.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-tabster/lib/hooks/useDangerousNeverHidden.js +1 -0
- package/dist/esm/node_modules/@fluentui/react-tabster/lib/hooks/useModalAttributes.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-tabster/lib/hooks/useTabster.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-timepicker-compat/lib/components/TimePicker/useTimePickerStyles.styles.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-utilities/lib/compose/assertSlots.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-utilities/lib/compose/getIntrinsicElementProps.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-utilities/lib/compose/slot.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-utilities/lib/hooks/useFirstMount.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-utilities/lib/hooks/useOnClickOutside.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-utilities/lib/utils/getNativeElementProps.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-utilities/lib/utils/properties.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-utilities/lib/virtualParent/getParent.js +1 -1
- package/dist/esm/node_modules/@fluentui/react-utilities/lib/virtualParent/setVirtualParent.js +1 -1
- package/dist/esm/node_modules/@griffel/core/src/__resetStyles.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/__styles.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/constants.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/devtools/getAtomicDebugSequenceTree.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/devtools/getResetDebugSequence.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/devtools/getSourceURLfromError.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/devtools/injectDevTools.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/devtools/isDevToolsEnabled.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/devtools/mergeDebugSequence.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/devtools/react-render-tracker/stackTrace.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/devtools/store.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/devtools/utils.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/insertionFactory.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/mergeClasses.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/renderer/createDOMRenderer.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/renderer/createIsomorphicStyleSheet.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/renderer/getStyleSheetForBucket.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/renderer/safeInsertRule.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/runtime/reduceToClassNameForSlots.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/runtime/utils/hashSequence.js +1 -0
- package/dist/esm/node_modules/@griffel/core/src/runtime/utils/normalizeCSSBucketEntry.js +1 -0
- package/dist/esm/node_modules/@griffel/react/src/RendererContext.js +1 -0
- package/dist/esm/node_modules/@griffel/react/src/TextDirectionContext.js +1 -0
- package/dist/esm/node_modules/@griffel/react/src/__resetStyles.js +1 -0
- package/dist/esm/node_modules/@griffel/react/src/__styles.js +1 -0
- package/dist/esm/node_modules/@griffel/react/src/insertionFactory.js +1 -0
- package/dist/esm/node_modules/@griffel/react/src/useInsertionEffect.js +1 -0
- package/dist/esm/node_modules/@griffel/react/src/utils/canUseDOM.js +1 -0
- package/dist/esm/node_modules/scheduler/cjs/scheduler.development.js +3 -3
- package/dist/esm/node_modules/scheduler/cjs/scheduler.production.js +10 -0
- package/dist/esm/node_modules/scheduler/index.js +1 -1
- package/dist/esm/pages/Chat.d.ts.map +1 -1
- package/dist/esm/pages/Chat.js +1 -1
- package/dist/esm/pages/ListPage.d.ts +6 -1
- package/dist/esm/pages/ListPage.d.ts.map +1 -1
- package/dist/esm/pages/ListPage.js +1 -1
- package/dist/esm/services/codicent.d.ts +23 -2
- package/dist/esm/services/codicent.d.ts.map +1 -1
- package/dist/esm/services/codicent.js +1 -1
- package/dist/esm/types/index.d.ts +28 -0
- package/dist/esm/types/index.d.ts.map +1 -1
- package/dist/esm/utils/index.d.ts +3 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/reference.d.ts +15 -0
- package/dist/esm/utils/reference.d.ts.map +1 -0
- package/dist/esm/utils/reference.js +1 -0
- package/dist/esm/utils/telemetry.d.ts +27 -0
- package/dist/esm/utils/telemetry.d.ts.map +1 -0
- package/dist/esm/utils/telemetry.js +1 -0
- package/dist/index.d.ts +165 -9
- package/package.json +1 -1
package/dist/cjs/pages/Chat.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("@fluentui/react-components"),o=require("react-router-dom"),s=require("@fluentui/react-icons");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var n=require("../components/TextHeader.js"),i=require("../components/TypingIndicator.js"),a=require("../components/Prompt.js"),u=require("../components/ChatInput.js"),c=require("../components/CombinedPlaceholderDialog.js"),l=require("../components/ChatMessage.js");require("../components/Header.js");var d=require("../hooks/useStateWithLocalStorage.js"),p=require("../services/codicent.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var m=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("@fluentui/react-components"),o=require("react-router-dom"),s=require("@fluentui/react-icons");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var n=require("../components/TextHeader.js"),i=require("../components/TypingIndicator.js"),a=require("../components/Prompt.js"),u=require("../components/ChatInput.js"),c=require("../components/CombinedPlaceholderDialog.js"),l=require("../components/ChatMessage.js");require("../components/Header.js");var d=require("../hooks/useStateWithLocalStorage.js"),p=require("../services/codicent.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var m=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var g=require("../utils/device.js");require("exceljs"),require("./AppFrame.js"),require("./Canvas.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Menu.js"),require("./Log.js"),require("./Login.js"),require("./Home.js"),require("./ListPage.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../components/Content.js");var j=require("../components/Page.js");require("./QrScan.js");var h=require("../hooks/useLocalization.js");require("../components/FileThumbnail.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js");var q=require("../hooks/useChat.js"),f=require("../hooks/useTemplateVariables.js");require("../hooks/useAppStyles.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/DataMessagePicker.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/QrCodeDialog.js"),require("../components/QrScanner.js"),require("../components/OfflineMessage.js"),require("../components/LanguageSelector.js"),require("../components/ListView.js"),require("../components/RecordModal.js"),require("../components/BulkUploadDialog.js"),require("../components/CookieBanner.js"),require("../components/audit/AuditCircularProgress.js"),require("../components/audit/AuditHorizontalProgress.js"),require("../components/audit/AuditRoleIndicator.js"),require("../components/audit/AuditUnitSwitcher.js"),require("../components/audit/AuditAnswerCell.js"),require("../components/audit/AuditSearchBar.js"),require("../components/audit/AuditFilterChips.js"),require("../components/audit/AuditFilterBar.js"),require("../components/audit/AuditGroupsProgress.js"),require("../components/audit/AuditSummaryDashboard.js"),require("../components/audit/AuditRequirementDialog.js"),require("../components/audit/AuditUnitExportDialog.js"),require("../components/audit/AuditUnitImportDialog.js"),require("../components/audit/AuditBulkExportDialog.js"),require("../components/audit/AuditBulkUploadDialog.js"),require("../components/audit/AuditSortPresets.js");const x=r.makeStyles({chatContainer:{width:"100%",flex:1,maxWidth:"1600px",height:"100%",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y"},chatMessages:{display:"flex",flexDirection:"column",flex:1,padding:"16px",overflowY:"auto",touchAction:"pan-y"}});exports.default=({state:r,hideFooter:S,codicent:C,title:v,welcomeMessage:b})=>{const A=x(),{t:w,tAsync:P,getLanguageInfo:y}=h.default(),k=o.useNavigate(),_=t.useRef(null),[I,F]=o.useSearchParams(),[T]=t.useState((()=>{const e=I.get("codicent");return e?(sessionStorage.setItem("chat_codicent",e),e):C?(sessionStorage.removeItem("chat_codicent"),null):sessionStorage.getItem("chat_codicent")})),M=T||C,{messages:V,isBotTyping:E,handleSend:L,newChat:R,openChat:B}=q.useChat(r.stateMachine,M||void 0),[D,H]=t.useState(null),[U,N]=t.useState(!1),[O,W]=t.useState(!1),{service:G,currentStateName:z}=r,[Q,Y]=t.useState([]),[$,K]=t.useState([]),[J,X]=t.useState(!1),[Z,ee]=t.useState(),[te,re]=d.default(r.context.selectedApp+"_prompts",[]),[oe,se]=t.useState(!1),[ne,ie]=t.useState(null),{extractTemplateVariables:ae,replaceTemplateVariables:ue,extractFilePlaceholders:ce,replaceFilePlaceholders:le,handleSelectFiles:de}=f.useTemplateVariables(G.uploadFile);t.useEffect((()=>{m.getConfigValue("ENABLE_CHAT_GPS")&&g.getGpsLocation().then((e=>{e&&ie({lat:e.coords.latitude,lon:e.coords.longitude})})).catch((()=>{}))}),[]);const pe=t.useRef(!1),me=t.useRef(null);t.useEffect((()=>{const e=window.history.length>1,t=Boolean(document.referrer&&document.referrer!==window.location.href);W(e||t)}),[]);t.useEffect((()=>{m.getConfigValue("SHOW_CHAT_PROMPTS")&&0===V.length&&r.service.getAppPrompts(M||void 0).then(re).catch((e=>{console.error("Failed to get prompts",e)}))}),[r.service,re,V.length,M]),t.useEffect((()=>{setTimeout((()=>{_.current?.scrollIntoView({behavior:"smooth"})}),10)}),[V]),t.useEffect((()=>{if(pe.current)return;pe.current=!0;const e=I.get("text"),t=I.get("id"),r=I.get("fid");if(T){console.log("Using temporary codicent from URL param:",T);const e=new URLSearchParams(I);e.delete("codicent"),F(e,{replace:!0})}if(e){(async()=>{const t=ce(e),r=ae(e);R(),t.length>0||r.length>0?(K(t),Y(r),X(!0),H(w(e))):H(w(e))})()}else t?B(t):r&&ee(r)}),[]),t.useEffect((()=>{Z&&"anonymous"===z&&me.current!==Z&&(me.current=Z,G.getFormById(Z).then((async e=>{R();const t=y().language,r=e.prompt.replace("{{fid}}",Z).replace("{{fname}}",e.name).replace("{{language}}",t);se(!0);const o=await P(r);se(!1),H(o),W(!1)})))}),[Z,R,G,H,z,P,y,se]),t.useEffect((()=>{if(D&&!J){let e=D;$.length>0&&(e=le(e,$)),Q.length>0&&(e=ue(e,Q)),L(e),F({},{replace:!0}),H(null),Y([]),K([])}}),[D,J,L,F,le,ue,$,Q]);const ge=e=>{const t=I.get("append");t&&(e+="\n---\n"+t),L(e,0,ne??void 0)};return e.jsxs(j.Page,{hideHeader:!0,hideFooter:!!Z||S,children:[e.jsxs("div",{id:"chat-container",className:A.chatContainer,style:{backgroundImage:`url(${m.getConfigValue("CHAT_BACKGROUND_IMAGE_URL")})`},children:[O&&e.jsx("button",{onClick:()=>{O&&k(-1)},"aria-label":w("Tillbaka"),style:{position:"absolute",top:12,left:12,zIndex:100,background:"var(--colorNeutralBackground1)",border:"none",cursor:"pointer",padding:8,borderRadius:8,boxShadow:"0 2px 8px rgba(0,0,0,0.08)",display:"flex",alignItems:"center",justifyContent:"center"},children:e.jsx(s.CalendarWeekStart24Regular,{style:{transform:"rotate(180deg)"}})}),e.jsx("div",{style:{marginLeft:O?40:0},children:e.jsx(n.default,{title:v||w(m.getConfigValue("APP_CHAT_TITLE")||"Chatt"),onNewChat:Z?void 0:()=>N(!0)})}),e.jsxs("div",{className:A.chatMessages,children:[b&&e.jsx(l.default,{sender:"bot",content:b}),m.getConfigValue("SHOW_CHAT_PROMPTS")&&te.length>0&&0===V.length&&e.jsx(l.default,{sender:"bot",content:w(m.getConfigValue("CHAT_WELCOME")||w("Välkommen!")),children:te.map(((t,r)=>e.jsxs("div",{children:["> ",e.jsx("a",{href:"./#/chat",onClick:()=>{ge(t.title+"\n---\n"+t.prompt)},children:w(t.title)}),e.jsx("br",{})]},`prompt-${r}`)))}),V.map(((t,r)=>e.jsxs("div",{children:[(E&&r===V.length-1||!E&&r===V.length-2)&&e.jsx("div",{ref:_}),e.jsx(l.default,{sender:t.sender,content:t.content,isNew:t.isNew,showSuggestions:r===V.length-1,onSuggestionClicked:L},t.id)]},t.id))),oe&&e.jsx(l.default,{sender:"user",content:w("Översätter...")}),E&&e.jsx(i.default,{})]}),e.jsx(u.default,{codicent:M||r.context.selectedApp,disableSend:E,onSend:ge,onSelectFiles:de,getImageUrl:p.CodicentService.getImageUrl,getFileInfo:e=>G.getFileInfo(e)})]}),e.jsx(a.default,{open:U,title:w("Vill du rensa chatten?"),content:w("En ny startas, men chatten kommer först sparas."),onYes:()=>{N(!1),R()},onNo:()=>N(!1)}),e.jsx(c.CombinedPlaceholderDialog,{open:J,templateVariables:Q,filePlaceholders:$,onTemplateVariablesChange:Y,onFilePlaceholdersChange:K,onConfirm:()=>X(!1),onCancel:()=>{X(!1),H(null),Y([]),K([])},uploadFile:G.uploadFile})]})};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { ColumnDefinition } from "../components/ListView";
|
|
2
2
|
import type { ListConfig } from "../types";
|
|
3
3
|
import { CodicentAppState } from "../hooks/useCodicentApp";
|
|
4
|
+
import type { BulkAction } from "../types";
|
|
5
|
+
export type { BulkAction };
|
|
4
6
|
export interface ListPageProps {
|
|
5
7
|
state: CodicentAppState;
|
|
6
8
|
/** Returns column definitions for a given tag. Falls back to all data keys if not provided. */
|
|
@@ -12,6 +14,8 @@ export interface ListPageProps {
|
|
|
12
14
|
getListConfig?: (tag: string) => ListConfig | undefined;
|
|
13
15
|
/** Optional data filter applied after fetch. Useful for app-specific filtering (e.g. empty notes). */
|
|
14
16
|
filterData?: (data: DataMessage[], tag: string) => DataMessage[];
|
|
17
|
+
/** Returns bulk actions available for the given tag. When non-empty, row-selection checkboxes are shown. */
|
|
18
|
+
getBulkActions?: (tag: string) => BulkAction[] | undefined;
|
|
15
19
|
}
|
|
16
20
|
/**
|
|
17
21
|
* ListPage — data fetch & cache behaviour
|
|
@@ -57,11 +61,12 @@ export interface ListPageProps {
|
|
|
57
61
|
* | `loadAll` | `"true"` | — | Removes PAGE_SIZE cap; disables Load-more |
|
|
58
62
|
* | `canAdd` | `"true"` | — | Shows Add Record button (opens RecordModal) |
|
|
59
63
|
* | `canEdit` | `"true"` | — | Shows per-row Edit/Delete buttons |
|
|
64
|
+
* | `canAttach` | `"true"` | — | Shows a file-attach control in the Add dialog (default off) |
|
|
60
65
|
* | `canExport` | `"false"` to hide | visible | Shows Export to Excel button |
|
|
61
66
|
* | `addUrl` | string | — | External URL opened on Add click (alternative to modal) |
|
|
62
67
|
* | `q` | string | — | Initial search term; kept in sync with search box |
|
|
63
68
|
* | `filter_<field>` | string | — | Client-side row filter; `%USERNAME%` resolves to current user |
|
|
64
69
|
*/
|
|
65
|
-
export declare const ListPage: ({ state, getColumnDefs, getListConfig, filterData }: ListPageProps) => import("react/jsx-runtime").JSX.Element;
|
|
70
|
+
export declare const ListPage: ({ state, getColumnDefs, getListConfig, filterData, getBulkActions }: ListPageProps) => import("react/jsx-runtime").JSX.Element;
|
|
66
71
|
export default ListPage;
|
|
67
72
|
//# sourceMappingURL=ListPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListPage.d.ts","sourceRoot":"","sources":["../../../src/pages/ListPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ListPage.d.ts","sourceRoot":"","sources":["../../../src/pages/ListPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAuB3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAuE3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,+FAA+F;IAC/F,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,gBAAgB,EAAE,CAAC;IACpD;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IACxD,sGAAsG;IACtG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;IACjE,4GAA4G;IAC5G,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,UAAU,EAAE,GAAG,SAAS,CAAC;CAC5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,eAAO,MAAM,QAAQ,wEAAyE,aAAa,4CAsmC1G,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js");var r=require("@fluentui/react-components");require("../components/Spinner.js");var a=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("@fluentui/react-icons");require("../services/codicent.js");var s=require("../services/dataCache.js"),i=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var o=require("../utils/excelExport.js");require("./AppFrame.js"),require("./Canvas.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Menu.js"),require("./Log.js"),require("./Login.js"),require("./Home.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js");var c=require("react-router-dom");require("./Purchase.js"),require("../components/Content.js");var l=require("../components/Page.js");require("./QrScan.js");var u=require("../hooks/useLocalization.js");require("../components/FileThumbnail.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js"),require("../hooks/useAppStyles.js");var d=require("../hooks/useUserRoles.js");require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/AiInput.js");var p=require("../components/SearchBox.js");require("../components/DataMessagePicker.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/QrCodeDialog.js"),require("../components/QrScanner.js"),require("../components/OfflineMessage.js"),require("../components/LanguageSelector.js");var m=require("../components/ListView.js"),g=require("../components/RecordModal.js");require("../components/BulkUploadDialog.js"),require("../components/CookieBanner.js"),require("../components/audit/AuditCircularProgress.js"),require("../components/audit/AuditHorizontalProgress.js"),require("../components/audit/AuditRoleIndicator.js"),require("../components/audit/AuditUnitSwitcher.js"),require("../components/audit/AuditAnswerCell.js"),require("../components/audit/AuditSearchBar.js"),require("../components/audit/AuditFilterChips.js"),require("../components/audit/AuditFilterBar.js"),require("../components/audit/AuditGroupsProgress.js"),require("../components/audit/AuditSummaryDashboard.js"),require("../components/audit/AuditRequirementDialog.js"),require("../components/audit/AuditUnitExportDialog.js"),require("../components/audit/AuditUnitImportDialog.js"),require("../components/audit/AuditBulkExportDialog.js"),require("../components/audit/AuditBulkUploadDialog.js"),require("../components/audit/AuditSortPresets.js");var h=require("../node_modules/lodash/lodash.js");const f=r.makeStyles({container:{width:"100%",flex:1,maxWidth:"100%",height:"100%",minHeight:0,backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},touchAction:"pan-y",paddingLeft:"16px",paddingRight:"16px"},listContainer:{position:"relative",overflow:"hidden",flex:1,minHeight:0,marginTop:"10px"},loadingIndicator:{padding:"8px 0",color:"#666"},headerRow:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"10px",flexWrap:"wrap"},buttonGroup:{display:"flex",gap:"8px",flexWrap:"wrap"},addButton:{minWidth:"auto",whiteSpace:"nowrap"},recordsCount:{fontSize:"14px",color:"#666",marginTop:"8px"},backButton:{marginBottom:"10px"},searchBox:{marginTop:"8px"},loadMoreContainer:{display:"flex",justifyContent:"center",padding:"16px 0",borderTop:"1px solid #e0e0e0",marginTop:"4px"}}),j=500,q=({state:q,getColumnDefs:x,getListConfig:C,filterData:S})=>{const[y,w]=c.useSearchParams(),A=y.get("tag")||"logbook",v=y.get("title")||"",k=y.get("contentTitle"),b="true"===y.get("loadAll"),D="true"===y.get("canAdd"),M="true"===y.get("canEdit"),I="false"!==y.get("canExport"),R=y.has("compact"),B=y.get("addUrl")||"",E=y.get("q")||"",$=k?`${A}-${E}-${k}`:`${A}-${E||"all"}`,P=s.dataCache.get($),[_,T]=t.useState(E),[N,L]=t.useState(E),{service:U}=q,[F,O]=t.useState((()=>P??[])),[H,W]=t.useState((()=>!P)),[z,V]=t.useState((()=>!!P&&!b&&!k&&P.length>=j)),[G,J]=t.useState(!1),Q=t.useRef(null),K=t.useRef(E),X=t.useRef(""),Y=t.useRef(0),Z=t.useRef(U);Z.current=U;const ee=!!U,[te,re]=t.useState(0),[ae,ne]=t.useState(null),se=f(),{t:ie}=u.default(),oe=c.useNavigate(),{getCurrentUserName:ce}=d.useUserRoles(U,q.context.nickname,q.context.selectedApp),le=t.useMemo((()=>(k?[{key:k,title:k,maxWidth:250}]:C?C(A)?.columns??[]:x?x(A):[]).map((e=>({...e,title:e.title?ie(e.title):void 0})))),[k,A,ie,x,C]),[ue,de]=t.useState(!1),[pe,me]=t.useState(null),[ge,he]=t.useState(!1),[fe,je]=t.useState(null),qe=t.useMemo((()=>`listpage_searches_${A}`),[A]),xe=e=>{try{const t=localStorage.getItem(e);return t?JSON.parse(t):[]}catch{return[]}},[Ce,Se]=t.useState((()=>xe(qe)));t.useEffect((()=>{Se(xe(qe))}),[qe]);const ye=t.useCallback((e=>{const t=e.trim();t&&Se((e=>{const r=[t,...e.filter((e=>e!==t))].slice(0,20);try{localStorage.setItem(qe,JSON.stringify(r))}catch{}return r}))}),[qe]),we=t.useCallback((e=>{Se((t=>{const r=t.filter((t=>t!==e));try{localStorage.setItem(qe,JSON.stringify(r))}catch{}return r}))}),[qe]),Ae=t.useMemo((()=>h.lodashExports.debounce((e=>L(e)),500)),[L]);t.useEffect((()=>()=>{Ae.cancel()}),[Ae]);const ve=t.useCallback((e=>{T(e),Ae(e)}),[Ae]),ke=t.useCallback((e=>{ye(e)}),[ye]);t.useEffect((()=>{if(!y.get("q")){const e=y.get(`filter_${A}`);if(e){let t=e;if("%USERNAME%"===t){const e=ce();if(!e)return;t=e}T(t),L(t),K.current=t}}}),[A,y,ce]),t.useEffect((()=>{const e=y.get("q")||"";e!==K.current&&e!==N&&(T(e),L(e),K.current=e,X.current="")}),[y]),t.useEffect((()=>(Q.current&&clearTimeout(Q.current),Q.current=setTimeout((()=>{if(K.current!==_){const e=new URLSearchParams(y);_?e.set("q",_):e.delete("q"),w(e,{replace:!0}),K.current=_}}),500),()=>{Q.current&&clearTimeout(Q.current)})),[_,y,w]),t.useEffect((()=>{if(!Z.current)return;const e=`${A}-${k}-${b}-${te}-${N}`;if(e===X.current)return;X.current=e;const t=++Y.current,r=()=>t===Y.current,a=k?`${A}-${N}-${k}`:`${A}-${N||"all"}`,n=s.dataCache.get(a);if(!n){if(V(!1),W(!0),k)Z.current.getMessagesFast([A],N).then((e=>{if(!r())return;const t=e.map((e=>{const t=new Date(e.createdAt).toLocaleString();return{id:e.id,data:{[k]:new i.default(e.content).content,createdAt:t},fileId:null,fileIds:[],tags:[A],mentions:[Z.current.codicent],createdAt:t}}));s.dataCache.set(a,t),O(t)})).catch(console.warn).finally((()=>{r()&&W(!1)}));else{const e=N||"",t=b||e?void 0:j;Z.current.readDataMessages(A,e,void 0,0,t).then((t=>{r()&&(s.dataCache.set(a,t),O(t),V(!b&&!e&&t.length===j))})).catch(console.warn).finally((()=>{r()&&W(!1)}))}return()=>{X.current=""}}if(O(n),W(!1),V(!b&&!k&&n.length>=j),!k&&!N&&n.length>0){const e=n.reduce(((e,t)=>t.createdAt>e?t.createdAt:e),n[0].createdAt);Z.current.readDataMessages(A,"",void 0,void 0,void 0,e).then((e=>{r()&&O((t=>{const r=new Set(t.map((e=>e.id))),n=e.filter((e=>!r.has(e.id)));if(0===n.length)return t;const i=[...n,...t];return s.dataCache.set(a,i),i}))})).catch(console.warn)}}),[A,k,b,N,te,ee]);const be=t.useMemo((()=>{const e={};y.forEach(((t,r)=>{r.startsWith("filter_")&&(e[r.replace("filter_","")]=t)}));let t=F.map(((e,t)=>({item:e,index:t})));for(const[r,a]of Object.entries(e)){const e=a.replace("%USERNAME%",ce()),n=q.context.nickname||"";t=t.filter((({item:t})=>{const a=t.data[r];return null!=a&&(String(a).includes(e)||String(a).includes(n))}))}if(S){const e=S(t.map((({item:e})=>e)),A),r=new Set(e.map((e=>e.id)));t=t.filter((({item:e})=>r.has(e.id)))}const r=t.map((({item:e,index:t})=>({...e.data,createdAt:e.createdAt,_id:e.id,originalMessageId:e.originalMessageId||e.id,_fileIds:e.fileIds??[],_index:t}))),a=C?.(A)?.deduplicateBy;if(a){const e=Array.isArray(a)?a:[a],t=t=>{for(const r of e){const e=t[r];if(null!=e&&""!==String(e).trim())return String(e)}},n=new Set;return r.filter((e=>{const r=t(e);return void 0===r||!n.has(r)&&(n.add(r),!0)}))}return r}),[F,y,q.context.nickname,ce,S,A,C]),De=t.useMemo((()=>{const e=(_||"").trim().toLowerCase();if(!e)return be;const t=le.filter((e=>!e.hidden)).map((e=>e.key));return be.filter((r=>{for(const a of t)if(Array.isArray(a))for(const t of a){const a=r[t];if(null!=a&&String(a).toLowerCase().includes(e))return!0}else{const t=r[a];if(null!=t&&String(t).toLowerCase().includes(e))return!0}return!1}))}),[be,_,le]),Me=t.useCallback((()=>{s.dataCache.clearPattern(A),X.current="",re((e=>e+1))}),[A]),Ie=t.useCallback((async()=>{J(!0);try{const e=await Z.current.readDataMessages(A,"",void 0,F.length,j),t=[...F,...e];O(t),s.dataCache.set(`${A}-all`,t),V(e.length===j)}catch(e){console.warn(e)}finally{J(!1)}}),[F,A]),Re=t.useCallback((e=>{ne(e)}),[]),Be=()=>{he(!1),je(null)},Ee=t.useCallback((async()=>{const e=`${A}_${(new Date).toISOString().split("T")[0]}`.replace(/[/\\:*?"<>|]/g,"_");const t=null!==ae?ae:De;await o.exportToExcel(t,le,e,ie)||console.warn("No data to export")}),[ae,De,le,A,ie]),$e=t.useMemo((()=>null!==ae?ae.length:De.length),[ae,De]);return e.jsx(l.Page,{hideHeader:!0,children:e.jsxs("div",{className:se.container,children:[e.jsx("div",{className:se.backButton,children:e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowLeft24Regular,{}),onClick:()=>oe(-1),children:ie("Tillbaka")})}),e.jsxs("div",{className:se.headerRow,children:[e.jsx(a.default,{title:ie(v||"Loggbok")}),e.jsxs("div",{className:se.buttonGroup,children:[e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowClockwise24Regular,{}),onClick:Me,title:ie("Refresh"),children:ie("Refresh")}),I&&e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowDownload24Regular,{}),onClick:Ee,title:ie("Export to Excel"),children:ie("Export to Excel")}),(D||B)&&e.jsx(r.Button,{appearance:"primary",icon:e.jsx(n.Add24Regular,{}),onClick:D?()=>{me(null),de(!0)}:()=>window.open(B,"_blank"),className:se.addButton,children:ie("Add Record")})]})]}),e.jsx("div",{className:se.searchBox,children:e.jsx(p.default,{placeholder:ie("Sök")+"...",value:_,onChange:ve,recentSearches:Ce,onCommitSearch:ke,onRemoveRecentSearch:we})}),!H&&e.jsxs("div",{className:se.recordsCount,children:[ie("Total"),": ",$e," ",ie("records"),$e!==F.length&&` (${ie("filtered from")} ${F.length})`]}),e.jsxs("div",{className:se.listContainer,children:[H&&F.length>0&&e.jsx("div",{className:se.loadingIndicator,children:ie("Söker")+"..."}),H&&0===F.length?e.jsx("p",{children:ie("Söker")+"..."}):e.jsx(m.default,{data:De,columns:le,canEdit:M,onEdit:(e,t)=>{const r=F[t];r&&(me({data:{...r.data,_fileIds:r.fileIds??[]},index:t}),de(!0))},onDelete:(e,t)=>{const r=F[t];r&&(je({index:t,id:r.id}),he(!0))},onToggleCheckbox:async(e,t,r,a)=>{const n=F[a];if(n){const e=Array.isArray(t)?t[0]:t,i={...n.data,[e]:String(r)},o=await U.updateDataMessage(n.id,i);O((e=>{const t=[...e];return t[a]={...n,id:o,data:i},t})),s.dataCache.clearPattern(A)}},onEnumChange:async(e,t,r,a)=>{const n=F[a];if(n){const e=Array.isArray(t)?t[0]:t,i={...n.data,[e]:r},o=await U.updateDataMessage(n.id,i);O((e=>{const t=[...e];return t[a]={...n,id:o,data:i},t})),s.dataCache.clearPattern(A)}},onFilteredDataChange:Re,compact:R})]}),z&&!_.trim()&&e.jsx("div",{className:se.loadMoreContainer,children:e.jsx(r.Button,{appearance:"primary",size:"medium",onClick:Ie,disabled:G,children:G?ie("Laddar..."):ie("Visa fler")+` (${F.length} ${ie("laddade")})`})}),e.jsx(g.RecordModal,{open:ue,onClose:()=>de(!1),onSave:async e=>{const t=new Set(le.filter((e=>"thumbnail"===e.type)).map((e=>Array.isArray(e.key)?e.key[0]:e.key)));if(pe){const r=F[pe.index];if(r){const a={};for(const r in e){if(t.has(r))continue;const n=e[r];a[r]=null==n?"":String(n)}const n=await U.updateDataMessage(r.id,a);O((e=>{const t=[...e];return t[pe.index]={...r,id:n,data:a},t})),s.dataCache.clearPattern(A)}}else{const r={};for(const a in e){if(t.has(a))continue;const n=e[a];r[a]=null==n?"":String(n)}const a={id:await U.createDataMessage(A,r),data:r,createdAt:(new Date).toISOString(),fileId:null,fileIds:[],tags:[A],mentions:[U.codicent]};O((e=>[a,...e])),s.dataCache.clearPattern(A)}},columns:le,initialData:pe?.data}),e.jsx(r.Dialog,{open:ge,onOpenChange:(e,t)=>!t.open&&Be(),children:e.jsx(r.DialogSurface,{children:e.jsxs(r.DialogBody,{children:[e.jsx(r.DialogTitle,{children:ie("Confirm Delete")}),e.jsx(r.DialogContent,{children:ie("Are you sure you want to delete this record? This action cannot be undone.")}),e.jsxs(r.DialogActions,{children:[e.jsx(r.Button,{appearance:"secondary",onClick:Be,children:ie("Cancel")}),e.jsx(r.Button,{appearance:"primary",onClick:async()=>{if(fe)try{await U.deleteDataMessage(fe.id),O((e=>e.filter(((e,t)=>t!==fe.index)))),s.dataCache.clearPattern(A)}catch(e){console.error("Failed to delete record:",e)}finally{he(!1),je(null)}},children:ie("Delete")})]})]})})})]})})};exports.ListPage=q,exports.default=q;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js");var r=require("@fluentui/react-components");require("../components/Spinner.js");var a=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("@fluentui/react-icons");require("../services/codicent.js");var s=require("../services/dataCache.js"),i=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var o=require("../utils/excelExport.js"),c=require("../utils/reference.js");require("./AppFrame.js"),require("./Canvas.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Menu.js"),require("./Log.js"),require("./Login.js"),require("./Home.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js");var l=require("react-router-dom");require("./Purchase.js"),require("../components/Content.js");var u=require("../components/Page.js");require("./QrScan.js");var d=require("../hooks/useLocalization.js");require("../components/FileThumbnail.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js"),require("../hooks/useAppStyles.js");var p=require("../hooks/useToaster.js"),g=require("../hooks/useUserRoles.js");require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/AiInput.js");var f=require("../components/SearchBox.js"),m=require("../components/DataMessagePicker.js");require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/QrCodeDialog.js"),require("../components/QrScanner.js"),require("../components/OfflineMessage.js"),require("../components/LanguageSelector.js");var h=require("../components/ListView.js"),y=require("../components/RecordModal.js");require("../components/BulkUploadDialog.js"),require("../components/CookieBanner.js"),require("../components/audit/AuditCircularProgress.js"),require("../components/audit/AuditHorizontalProgress.js"),require("../components/audit/AuditRoleIndicator.js"),require("../components/audit/AuditUnitSwitcher.js"),require("../components/audit/AuditAnswerCell.js"),require("../components/audit/AuditSearchBar.js"),require("../components/audit/AuditFilterChips.js"),require("../components/audit/AuditFilterBar.js"),require("../components/audit/AuditGroupsProgress.js"),require("../components/audit/AuditSummaryDashboard.js"),require("../components/audit/AuditRequirementDialog.js"),require("../components/audit/AuditUnitExportDialog.js"),require("../components/audit/AuditUnitImportDialog.js"),require("../components/audit/AuditBulkExportDialog.js"),require("../components/audit/AuditBulkUploadDialog.js"),require("../components/audit/AuditSortPresets.js");var j=require("../node_modules/lodash/lodash.js");const x=r.makeStyles({container:{width:"100%",flex:1,maxWidth:"100%",height:"100%",minHeight:0,backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},touchAction:"pan-y",paddingLeft:"16px",paddingRight:"16px"},listContainer:{position:"relative",overflow:"hidden",flex:1,minHeight:0,marginTop:"10px"},loadingIndicator:{padding:"8px 0",color:"#666"},headerRow:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"10px",flexWrap:"wrap"},buttonGroup:{display:"flex",gap:"8px",flexWrap:"wrap"},addButton:{minWidth:"auto",whiteSpace:"nowrap"},recordsCount:{fontSize:"14px",color:"#666",marginTop:"8px"},backButton:{marginBottom:"10px"},searchBox:{marginTop:"8px"},loadMoreContainer:{display:"flex",justifyContent:"center",padding:"16px 0",borderTop:"1px solid #e0e0e0",marginTop:"4px"}}),S=500,C=({state:C,getColumnDefs:q,getListConfig:k,filterData:w,getBulkActions:v})=>{const[A,b]=l.useSearchParams(),D=A.get("tag")||"logbook",M=A.get("title")||"",R=A.get("contentTitle"),I="true"===A.get("loadAll"),B="true"===A.get("canAdd"),E="true"===A.get("canEdit"),T="true"===A.get("canAttach"),_="false"!==A.get("canExport"),$=A.has("compact"),P=A.get("addUrl")||"",F="true"===A.get("openAdd"),K=A.get("q")||"",L=R?`${D}-${K}-${R}`:`${D}-${K||"all"}`,N=s.dataCache.get(L),[U,W]=t.useState(K),[z,O]=t.useState(K),{service:H}=C,[V,G]=t.useState((()=>N??[])),[J,Q]=t.useState((()=>!N)),[X,Y]=t.useState((()=>!!N&&!I&&!R&&N.length>=S)),[Z,ee]=t.useState(!1),te=t.useRef(null),re=t.useRef(K),ae=t.useRef(""),ne=t.useRef(0),se=t.useRef(H);se.current=H;const ie=!!H,[oe,ce]=t.useState(0),[le,ue]=t.useState(null),[de,pe]=t.useState(!1),ge=x(),{t:fe}=d.default(),me=l.useNavigate(),{notify:he,ToasterComponent:ye}=p.default(),[je,xe]=t.useState(new Set),Se=t.useCallback(((e,t)=>{xe((r=>{const a=new Set(r);return t?a.add(e):a.delete(e),a}))}),[]),Ce=e=>e instanceof Error?e.message:String(e),{getCurrentUserName:qe}=g.useUserRoles(H,C.context.nickname,C.context.selectedApp),ke=t.useMemo((()=>(R?[{key:R,title:R,maxWidth:250}]:k?k(D)?.columns??[]:q?q(D):[]).map((e=>({...e,title:e.title?fe(e.title):void 0})))),[R,D,fe,q,k]),[we,ve]=t.useState(!1),[Ae,be]=t.useState(null),[De,Me]=t.useState(!1),[Re,Ie]=t.useState(null),Be=t.useMemo((()=>v?.(D)??[]),[v,D]),Ee=Be.length>0,[Te,_e]=t.useState(new Set),[$e,Pe]=t.useState(null),[Fe,Ke]=t.useState(null),[Le,Ne]=t.useState(null),[Ue,We]=t.useState(!1);t.useEffect((()=>{_e(new Set)}),[D]);const ze=t.useCallback((e=>{_e((t=>{const r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r}))}),[]),Oe=t.useCallback((e=>{_e((t=>{const r=e.map((e=>String(e.originalMessageId??e._id??e.id??""))),a=r.length>0&&r.every((e=>t.has(e))),n=new Set(t);return a?r.forEach((e=>n.delete(e))):r.forEach((e=>n.add(e))),n}))}),[]),He=t.useMemo((()=>`listpage_searches_${D}`),[D]),Ve=e=>{try{const t=localStorage.getItem(e);return t?JSON.parse(t):[]}catch{return[]}},[Ge,Je]=t.useState((()=>Ve(He)));t.useEffect((()=>{Je(Ve(He))}),[He]);const Qe=t.useRef(!1),Xe=t.useRef(!1);t.useEffect((()=>{F&&B&&!Qe.current&&(Qe.current=!0,Xe.current=!0,be(null),ve(!0))}),[F,B]);const Ye=t.useCallback((e=>{const t=e.trim();t&&Je((e=>{const r=[t,...e.filter((e=>e!==t))].slice(0,20);try{localStorage.setItem(He,JSON.stringify(r))}catch{}return r}))}),[He]),Ze=t.useCallback((e=>{Je((t=>{const r=t.filter((t=>t!==e));try{localStorage.setItem(He,JSON.stringify(r))}catch{}return r}))}),[He]),et=t.useMemo((()=>j.lodashExports.debounce((e=>O(e)),500)),[O]);t.useEffect((()=>()=>{et.cancel()}),[et]);const tt=t.useCallback((e=>{W(e),et(e)}),[et]),rt=t.useCallback((e=>{Ye(e)}),[Ye]);t.useEffect((()=>{if(!A.get("q")){const e=A.get(`filter_${D}`);if(e){let t=e;if("%USERNAME%"===t){const e=qe();if(!e)return;t=e}W(t),O(t),re.current=t}}}),[D,A,qe]),t.useEffect((()=>{const e=A.get("q")||"";e!==re.current&&e!==z&&(W(e),O(e),re.current=e,ae.current="")}),[A]),t.useEffect((()=>(te.current&&clearTimeout(te.current),te.current=setTimeout((()=>{if(re.current!==U){const e=new URLSearchParams(A);U?e.set("q",U):e.delete("q"),b(e,{replace:!0}),re.current=U}}),500),()=>{te.current&&clearTimeout(te.current)})),[U,A,b]),t.useEffect((()=>{if(!se.current)return;const e=`${D}-${R}-${I}-${oe}-${z}`;if(e===ae.current)return;ae.current=e;const t=++ne.current,r=()=>t===ne.current,a=R?`${D}-${z}-${R}`:`${D}-${z||"all"}`,n=s.dataCache.get(a);if(!n){if(Y(!1),Q(!0),R)se.current.getMessagesFast([D],z).then((e=>{if(!r())return;const t=e.map((e=>{const t=new Date(e.createdAt).toLocaleString();return{id:e.id,data:{[R]:new i.default(e.content).content,createdAt:t},fileId:null,fileIds:[],tags:[D],mentions:[se.current.codicent],createdAt:t}}));s.dataCache.set(a,t),G(t)})).catch(console.warn).finally((()=>{r()&&Q(!1)}));else{const e=z||"",t=I||e?void 0:S;se.current.readDataMessages(D,e,void 0,0,t).then((t=>{r()&&(s.dataCache.set(a,t),G(t),Y(!I&&!e&&t.length===S))})).catch(console.warn).finally((()=>{r()&&Q(!1)}))}return()=>{ae.current=""}}if(G(n),Q(!1),Y(!I&&!R&&n.length>=S),!R&&!z&&n.length>0){const e=n.reduce(((e,t)=>t.createdAt>e?t.createdAt:e),n[0].createdAt);se.current.readDataMessages(D,"",void 0,void 0,void 0,e).then((e=>{r()&&G((t=>{const r=new Set(t.map((e=>e.id))),n=e.filter((e=>!r.has(e.id)));if(0===n.length)return t;const i=[...n,...t];return s.dataCache.set(a,i),i}))})).catch(console.warn)}}),[D,R,I,z,oe,ie]);const at=t.useMemo((()=>{const e={};A.forEach(((t,r)=>{r.startsWith("filter_")&&(e[r.replace("filter_","")]=t)}));let t=V.map(((e,t)=>({item:e,index:t})));for(const[r,a]of Object.entries(e)){if("__empty__"===a){t=t.filter((({item:e})=>{const t=e.data[r];return null==t||""===String(t).trim()}));continue}const e=a.replace("%USERNAME%",qe()),n=C.context.nickname||"";(e||n)&&(t=t.filter((({item:t})=>{const a=t.data[r];if(null==a)return!1;const s=String(a);return e&&s.includes(e)||n&&s.includes(n)})))}if(w){const e=w(t.map((({item:e})=>e)),D),r=new Map(t.map((({item:e,index:t})=>[e.id,t])));t=e.map((e=>{const t=r.get(e.id);return void 0===t?void 0:{item:e,index:t}})).filter((e=>void 0!==e))}const r=t.map((({item:e,index:t})=>({...e.data,createdAt:e.createdAt,_id:e.id,originalMessageId:e.originalMessageId||e.id,_fileIds:e.fileIds??[],_index:t}))),a=k?.(D)?.deduplicateBy;if(a){const e=Array.isArray(a)?a:[a],t=t=>{for(const r of e){const e=t[r];if(null!=e&&""!==String(e).trim())return String(e)}},n=new Set;return r.filter((e=>{const r=t(e);return void 0===r||!n.has(r)&&(n.add(r),!0)}))}return r}),[V,A,C.context.nickname,qe,w,D,k]),nt=t.useMemo((()=>{const e=(U||"").trim().toLowerCase();if(!e)return at;const t=ke.filter((e=>!e.hidden)).map((e=>e.key));if(e.includes("*")){const r=new RegExp(e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*"),"i");return at.filter((e=>{for(const a of t)if(Array.isArray(a))for(const t of a){const a=e[t];if(null!=a&&r.test(String(a)))return!0}else{const t=e[a];if(null!=t&&r.test(String(t)))return!0}return!1}))}return at.filter((r=>{for(const a of t)if(Array.isArray(a))for(const t of a){const a=r[t];if(null!=a&&String(a).toLowerCase().includes(e))return!0}else{const t=r[a];if(null!=t&&String(t).toLowerCase().includes(e))return!0}return!1}))}),[at,U,ke]),st=t.useCallback((()=>{s.dataCache.clearPattern(D),ae.current="",ce((e=>e+1))}),[D]),it=t.useCallback((async()=>{ee(!0);try{const e=await se.current.readDataMessages(D,"",void 0,V.length,S),t=[...V,...e];G(t),s.dataCache.set(`${D}-all`,t),Y(e.length===S)}catch(e){console.warn(e)}finally{ee(!1)}}),[V,D]),ot=t.useCallback((e=>{ue(e)}),[]),ct=t.useCallback((e=>{pe(e)}),[]);t.useEffect((()=>{if(!de||!X||Z||J)return;const e=ne.current;ee(!0),se.current.readDataMessages(D,"",void 0,V.length,void 0).then((t=>{e===ne.current&&(G((e=>{const r=new Set(e.map((e=>e.id))),a=[...e,...t.filter((e=>!r.has(e.id)))];return s.dataCache.set(`${D}-all`,a),a})),Y(!1))})).catch(console.warn).finally((()=>ee(!1)))}),[de,X,Z,J,D,V.length]);const lt=()=>{Me(!1),Ie(null)},ut=t.useCallback((async()=>{const e=`${D}_${(new Date).toISOString().split("T")[0]}`.replace(/[/\\:*?"<>|]/g,"_");const t=null!==le?le:nt;await o.exportToExcel(t,ke,e,fe)||console.warn("No data to export")}),[le,nt,ke,D,fe]),dt=t.useMemo((()=>null!==le?le.length:nt.length),[le,nt]),pt=t.useMemo((()=>{if($e)return ke.find((e=>(Array.isArray(e.key)?e.key[0]:e.key)===$e.referenceColumnKey))}),[$e,ke]),gt=t.useMemo((()=>{if(pt?.referenceCascadeFromKey)return ke.find((e=>(Array.isArray(e.key)?e.key[0]:e.key)===pt.referenceCascadeFromKey))}),[pt,ke]),ft=t.useCallback((()=>{Pe(null),Ke(null),Ne(null)}),[]),mt=t.useCallback((async e=>{if(void 0!==e.setFieldKey&&H){We(!0);try{const t=V.filter((e=>{const t=String(e.originalMessageId||e.id);return Te.has(t)}));for(const r of t)await H.updateDataMessage(r.id,{...r.data,[e.setFieldKey]:e.setFieldValue??""});s.dataCache.clearPattern(D),_e(new Set),st(),he(fe("{n} poster uppdaterade").replace("{n}",String(t.length)),"","","success")}catch(e){he(fe("Uppdateringen misslyckades"),Ce(e),"","error")}finally{We(!1)}}}),[V,Te,H,D,st,he,fe]),ht=t.useCallback((async e=>{if(e.handler&&H){We(!0);try{const t=V.filter((e=>{const t=String(e.originalMessageId||e.id);return Te.has(t)}));await e.handler(t,H),s.dataCache.clearPattern(D),_e(new Set),st(),he(fe("{n} poster uppdaterade").replace("{n}",String(t.length)),"","","success")}catch(e){he(fe("Uppdateringen misslyckades"),Ce(e),"","error")}finally{We(!1)}}}),[V,Te,H,D,st,he,fe]),yt=t.useCallback((async()=>{if($e&&pt&&Fe&&(!gt||Le)){We(!0);try{const e=Array.isArray(pt.key)?pt.key[0]:pt.key,t=pt.referenceLabelKey??`${e}_label`,r=c.formatReference(Fe.tag,Fe.originalMessageId||Fe.id);let a,n,i,o;gt&&Le&&(a=Array.isArray(gt.key)?gt.key[0]:gt.key,n=gt.referenceLabelKey??`${a}_label`,i=c.formatReference(Le.tag,Le.originalMessageId||Le.id),o=Le.label);const l=V.filter((e=>{const t=String(e.originalMessageId||e.id);return Te.has(t)}));for(const s of l){const c={...s.data,[e]:r,[t]:Fe.label};a&&i&&(c[a]=i,n&&o&&(c[n]=o)),await H.updateDataMessage(s.id,c)}s.dataCache.clearPattern(D),_e(new Set),ft(),st(),he(fe("{n} poster uppdaterade").replace("{n}",String(l.length)),"","","success")}catch(e){he(fe("Uppdateringen misslyckades"),Ce(e),"","error")}finally{We(!1)}}}),[$e,pt,gt,Fe,Le,V,Te,H,D,ft,st,he,fe]);return e.jsxs(u.Page,{hideHeader:!0,children:[e.jsx(ye,{}),e.jsxs("div",{className:ge.container,children:[e.jsx("div",{className:ge.backButton,children:e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowLeft24Regular,{}),onClick:()=>me(-1),children:fe("Tillbaka")})}),e.jsxs("div",{className:ge.headerRow,children:[e.jsx(a.default,{title:fe(M||"Loggbok")}),e.jsxs("div",{className:ge.buttonGroup,children:[e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowClockwise24Regular,{}),onClick:st,title:fe("Refresh"),children:fe("Refresh")}),_&&e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowDownload24Regular,{}),onClick:ut,title:fe("Export to Excel"),children:fe("Export to Excel")}),(B||P)&&e.jsx(r.Button,{appearance:"primary",icon:e.jsx(n.Add24Regular,{}),onClick:B?()=>{be(null),ve(!0)}:()=>window.open(P,"_blank"),className:ge.addButton,children:fe("Add Record")})]})]}),e.jsx("div",{className:ge.searchBox,children:e.jsx(f.default,{placeholder:fe("Sök")+"...",value:U,onChange:tt,recentSearches:Ge,onCommitSearch:rt,onRemoveRecentSearch:Ze})}),!J&&e.jsxs("div",{className:ge.recordsCount,children:[fe("Total"),": ",dt," ",fe("records"),dt!==V.length&&` (${fe("filtered from")} ${V.length})`]}),e.jsxs("div",{className:ge.listContainer,children:[Ee&&Te.size>0&&e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px 12px",marginBottom:"8px",background:"#f0f6ff",border:"1px solid #cfe0ff",borderRadius:"4px",flexWrap:"wrap"},children:[e.jsxs("span",{style:{fontWeight:600},children:[Te.size," ",fe("valda")]}),Be.map((t=>e.jsx(r.Button,{appearance:"primary",size:"small",disabled:Ue,onClick:()=>{void 0!==t.setFieldKey?mt(t):t.handler?ht(t):(Pe(t),Ke(null),Ne(null))},children:fe(t.label)},t.label))),e.jsx(r.Button,{appearance:"subtle",size:"small",onClick:()=>_e(new Set),children:fe("Rensa")})]}),J&&V.length>0&&e.jsx("div",{className:ge.loadingIndicator,children:fe("Söker")+"..."}),J&&0===V.length?e.jsx("p",{children:fe("Söker")+"..."}):e.jsx(h.default,{data:nt,columns:ke,canEdit:E,onEdit:(e,t)=>{const r=V[t];r&&(be({data:{...r.data,_fileIds:r.fileIds??[]},index:t}),ve(!0))},onDelete:(e,t)=>{const r=V[t];r&&(Ie({index:t,id:r.id}),Me(!0))},onToggleCheckbox:async(e,t,r,a)=>{const n=V[a];if(n){const e=Array.isArray(t)?t[0]:t,i={...n.data,[e]:String(r)};Se(a,!0);try{const e=await H.updateDataMessage(n.id,i);G((t=>{const r=[...t];return r[a]={...n,id:e,data:i},r})),s.dataCache.clearPattern(D),he(fe("Sparat"),"","","success")}catch(e){he(fe("Kunde inte spara"),Ce(e),"","error")}finally{Se(a,!1)}}},onEnumChange:async(e,t,r,a)=>{const n=V[a];if(n){const e=Array.isArray(t)?t[0]:t,i={...n.data,[e]:r};Se(a,!0);try{const e=await H.updateDataMessage(n.id,i);G((t=>{const r=[...t];return r[a]={...n,id:e,data:i},r})),s.dataCache.clearPattern(D),he(fe("Sparat"),"","","success")}catch(e){he(fe("Kunde inte spara"),Ce(e),"","error")}finally{Se(a,!1)}}},onValueChange:async(e,t,r,a)=>{const n=V[a];if(n){const e=Array.isArray(t)?t[0]:t,i={...n.data,[e]:r};Se(a,!0);try{const e=await H.updateDataMessage(n.id,i);G((t=>{const r=[...t];return r[a]={...n,id:e,data:i},r})),s.dataCache.clearPattern(D),he(fe("Sparat"),"","","success")}catch(e){he(fe("Kunde inte spara"),Ce(e),"","error")}finally{Se(a,!1)}}},onReferenceChange:async(e,t,r,a)=>{const n=V[a];if(n){const e=Array.isArray(t)?t[0]:t,i=ke.find((t=>(Array.isArray(t.key)?t.key[0]:t.key)===e)),o=i?.referenceLabelKey??`${e}_label`,l=c.formatReference(r.tag,r.originalMessageId||r.id),u={...n.data,[e]:l,[o]:r.label};Se(a,!0);try{const e=await H.updateDataMessage(n.id,u);G((t=>{const r=[...t];return r[a]={...n,id:e,data:u},r})),s.dataCache.clearPattern(D),he(fe("Sparat"),"","","success")}catch(e){he(fe("Kunde inte spara"),Ce(e),"","error")}finally{Se(a,!1)}}},savingRows:je,service:H,onFilteredDataChange:ot,onActiveFiltersChange:ct,compact:$,selectable:Ee,selectedRowKeys:Te,onToggleRow:ze,onToggleAll:Oe},D)]}),X&&!U.trim()&&e.jsx("div",{className:ge.loadMoreContainer,children:e.jsx(r.Button,{appearance:"primary",size:"medium",onClick:it,disabled:Z,children:Z?fe("Laddar..."):fe("Visa fler")+` (${V.length} ${fe("laddade")})`})}),e.jsx(y.RecordModal,{open:we,onClose:()=>{ve(!1),Xe.current&&(Xe.current=!1,me(-1))},onSave:async(e,t)=>{const r=new Set(ke.filter((e=>"thumbnail"===e.type)).map((e=>Array.isArray(e.key)?e.key[0]:e.key)));try{if(Ae){const t=V[Ae.index];if(t){const a={};for(const t in e){if(r.has(t))continue;const n=e[t];a[t]=null==n?"":String(n)}const n=await H.updateDataMessage(t.id,a);G((e=>{const r=[...e];return r[Ae.index]={...t,id:n,data:a},r})),s.dataCache.clearPattern(D)}}else{const a={};for(const t in e){if(r.has(t))continue;const n=e[t];a[t]=null==n?"":String(n)}const n={id:await H.createDataMessage(D,a,void 0,t),data:a,createdAt:(new Date).toISOString(),fileId:null,fileIds:t??[],tags:[D],mentions:[H.codicent]};G((e=>[n,...e])),s.dataCache.clearPattern(D)}he(fe("Sparat"),"","","success")}catch(e){throw he(fe("Kunde inte spara"),Ce(e),"","error"),e}},columns:ke,initialData:Ae?.data,codicentService:H,allowAttachments:T}),e.jsx(r.Dialog,{open:De,onOpenChange:(e,t)=>!t.open&<(),children:e.jsx(r.DialogSurface,{children:e.jsxs(r.DialogBody,{children:[e.jsx(r.DialogTitle,{children:fe("Confirm Delete")}),e.jsx(r.DialogContent,{children:fe("Are you sure you want to delete this record? This action cannot be undone.")}),e.jsxs(r.DialogActions,{children:[e.jsx(r.Button,{appearance:"secondary",onClick:lt,children:fe("Cancel")}),e.jsx(r.Button,{appearance:"primary",onClick:async()=>{if(Re)try{await H.deleteDataMessage(Re.id),G((e=>e.filter(((e,t)=>t!==Re.index)))),s.dataCache.clearPattern(D),he(fe("Borttaget"),"","","success")}catch(e){he(fe("Kunde inte ta bort"),Ce(e),"","error")}finally{Me(!1),Ie(null)}},children:fe("Delete")})]})]})})}),e.jsx(r.Dialog,{open:!!$e,onOpenChange:(e,t)=>!t.open&&ft(),children:e.jsx(r.DialogSurface,{children:e.jsxs(r.DialogBody,{children:[e.jsx(r.DialogTitle,{children:$e?fe($e.label):""}),e.jsx(r.DialogContent,{children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px",padding:"8px 0"},children:[e.jsxs("div",{style:{color:"#444"},children:[Te.size," ",fe("rader kommer att uppdateras")]}),gt&&H&>.referenceTag&&e.jsxs("div",{children:[e.jsx("div",{style:{fontWeight:600,marginBottom:"4px"},children:gt.title?fe(gt.title):gt.referenceTag}),e.jsx(m.default,{service:H,tag:gt.referenceTag,displayKeys:gt.referenceDisplayKeys,searchKeys:gt.referenceSearchKeys??gt.referenceDisplayKeys,dataFilters:gt.referenceFilters,value:Le?.label||"",onSelect:e=>{Ne(e),Ke(null)}})]}),pt&&H&&pt.referenceTag&&e.jsxs("div",{children:[e.jsx("div",{style:{fontWeight:600,marginBottom:"4px"},children:pt.title?fe(pt.title):pt.referenceTag}),e.jsx(m.default,{service:H,tag:pt.referenceTag,displayKeys:pt.referenceDisplayKeys,searchKeys:pt.referenceSearchKeys??pt.referenceDisplayKeys,dataFilters:(()=>{const e={...pt.referenceFilters??{}};return pt.referenceCascadeFilterField&&Le&&(e[pt.referenceCascadeFilterField]=c.formatReference(Le.tag,Le.originalMessageId||Le.id)),e})(),disabled:!!gt&&!Le,value:Fe?.label||"",onSelect:e=>Ke(e)})]})]})}),e.jsxs(r.DialogActions,{children:[e.jsx(r.Button,{appearance:"secondary",onClick:ft,disabled:Ue,children:fe("Cancel")}),e.jsx(r.Button,{appearance:"primary",onClick:yt,disabled:Ue||!Fe||!!gt&&!Le||0===Te.size,children:fe(Ue?"Sparar...":"Tilldela")})]})]})})})]})]})};exports.ListPage=C,exports.default=C;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { UsageEventInput } from "../utils/telemetry";
|
|
1
2
|
/** Enable BFF cookie-session mode. Once enabled, API calls use credentials:"include"
|
|
2
3
|
* and omit the Authorization header — the server-side BffCookieAuthMiddleware
|
|
3
4
|
* re-attaches the token from the HttpOnly cookie. */
|
|
@@ -60,7 +61,10 @@ export interface CodicentServiceOptions {
|
|
|
60
61
|
ANONYMOUS_TOKEN?: string;
|
|
61
62
|
}
|
|
62
63
|
export declare class CodicentService {
|
|
63
|
-
|
|
64
|
+
private static _flushListenersRegistered;
|
|
65
|
+
private static _pagehideHandler;
|
|
66
|
+
private static _visibilityHandler;
|
|
67
|
+
createDataMessage: (tag: string, data: object, codicent?: string, fileIds?: string[]) => Promise<string>;
|
|
64
68
|
readDataMessages: (tag: string, search?: string, codicent?: string, start?: number, length?: number, afterTimestamp?: string, beforeTimestamp?: string, dataFilters?: {
|
|
65
69
|
[key: string]: string;
|
|
66
70
|
}) => Promise<DataMessage[]>;
|
|
@@ -81,7 +85,13 @@ export declare class CodicentService {
|
|
|
81
85
|
codicent: string;
|
|
82
86
|
private options;
|
|
83
87
|
onUnauthorized?: () => void;
|
|
88
|
+
private telemetryUser;
|
|
89
|
+
private readonly sessionId;
|
|
90
|
+
private usageQueue;
|
|
91
|
+
private usageFlushTimer;
|
|
92
|
+
private static newSessionId;
|
|
84
93
|
constructor(options: CodicentServiceOptions);
|
|
94
|
+
dispose(): void;
|
|
85
95
|
getAppTheme: () => Promise<MessageData | null>;
|
|
86
96
|
getAppButtons: () => Promise<MessageData[]>;
|
|
87
97
|
getAppTasks: () => Promise<{
|
|
@@ -99,7 +109,7 @@ export declare class CodicentService {
|
|
|
99
109
|
static getFileUrl: (fileId: string, extension?: string) => string;
|
|
100
110
|
generateApiToken: (expires?: Date, forUserNickname?: string) => Promise<string>;
|
|
101
111
|
sendMessage: (message: string, parentId?: string, codicent?: string) => Promise<string>;
|
|
102
|
-
chat: (message: string, messageId?: string, codicent?: string) => Promise<ChatMessageReply>;
|
|
112
|
+
chat: (message: string, messageId?: string, codicent?: string, latitude?: number, longitude?: number) => Promise<ChatMessageReply>;
|
|
103
113
|
/**
|
|
104
114
|
* Helper method to make fetch requests with error handling.
|
|
105
115
|
* @param url The URL to fetch.
|
|
@@ -165,6 +175,17 @@ export declare class CodicentService {
|
|
|
165
175
|
url: any;
|
|
166
176
|
}>;
|
|
167
177
|
logAction: (message: string, nickname: string) => Promise<string>;
|
|
178
|
+
/** Posts a message to the dedicated logging codicent using the log token. */
|
|
179
|
+
private postToLog;
|
|
180
|
+
/** Sets the nickname attached to subsequent usage events. */
|
|
181
|
+
setTelemetryUser: (nickname?: string) => void;
|
|
182
|
+
/** Records a structured, metadata-only usage event (queued, fire-and-forget). */
|
|
183
|
+
trackEvent: (event: UsageEventInput, nickname?: string) => void;
|
|
184
|
+
private recordUsage;
|
|
185
|
+
private flushUsage;
|
|
186
|
+
/** Times an async action and records a metadata-only usage event for it. */
|
|
187
|
+
private timedAction;
|
|
188
|
+
private tagSafe;
|
|
168
189
|
createApp: () => Promise<string | null>;
|
|
169
190
|
findUsername: () => Promise<string | null>;
|
|
170
191
|
static downloadFile: (file: FileInfo) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codicent.d.ts","sourceRoot":"","sources":["../../../src/services/codicent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codicent.d.ts","sourceRoot":"","sources":["../../../src/services/codicent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var t,e=require("../node_modules/@stripe/stripe-js/dist/index.js"),n=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("react/jsx-runtime"),require("react"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("exceljs");let a="https://codicent.com/",o="https://pubsub.codicent.com/hub",s="-",i=!1;const r=t=>{i=t},c=()=>"undefined"!=typeof window&&void 0!==window.Codicent&&"function"==typeof window.Codicent.init,h=t=>{t&&"string"==typeof t?(a=t.endsWith("/")?t:t+"/",c()&&window.Codicent.init({token:s,baseUrl:a,signalRHost:o})):console.warn("Invalid base URL provided, using default")},d=t=>{t&&"string"==typeof t&&(o=t,c()&&window.Codicent.init({token:s,baseUrl:a,signalRHost:o}))},l=()=>void 0!==window.Codicent&&(window.Codicent.handleMessage=function(t){const e=new CustomEvent("codicent-log",{detail:{message:t}});window.dispatchEvent(e)},window.Codicent.init({token:s,baseUrl:a,signalRHost:o}),!0);let u=l();if(!u){const t=setInterval((()=>{u=l(),u&&clearInterval(t)}),100)}class p{constructor(t){this.createDataMessage=async(t,e,n)=>await window.Codicent.data.create({codicent:n||this.codicent,tag:t,data:e}),this.readDataMessages=async(t,e,n,a,o,s,i,r)=>await window.Codicent.data.read({codicent:n||this.codicent,tag:t,search:e,start:a,length:o,afterTimestamp:s,beforeTimestamp:i,dataFilters:r}),this.readOneDataMessage=async t=>await window.Codicent.data.readOne(t),this.getLeafDataMessage=async(t,e)=>{const n=e||this.codicent;try{const e=await this.authFetch(`${this.options.API_BASE_URL}app/GetLeafMessageByOriginalMessageId?project=${encodeURIComponent(n)}&originalMessageId=${encodeURIComponent(t)}`);if(!e.ok)return null;const a=await e.json();if(!a||!a.content)return null;const o=a.content.indexOf("{");if(-1===o)return null;const s=JSON.parse(a.content.slice(o));return{id:a.id,fileId:a.fileId??null,fileIds:a.fileIds??[],data:s,createdAt:a.createdAt,tags:a.tags??[],mentions:a.mentions??[]}}catch{return null}},this.updateDataMessage=async(t,e,n)=>await window.Codicent.data.update({id:t,data:e,codicent:n||this.codicent}),this.deleteDataMessage=async(t,e)=>await window.Codicent.data.delete({id:t,codicent:e||this.codicent}),this.getSchema=async(t,e)=>{try{const e=await fetch(`${this.options.API_BASE_URL}api/GetSchema/${t}`,{method:"GET",headers:{Authorization:`Bearer ${this.options.APP_LOG_TOKEN}`,"Content-Type":"application/json"}});if(!e.ok){if(404===e.status)return null;throw new Error(`Failed to fetch schema: ${e.statusText}`)}const n=await e.text();return JSON.parse(n)}catch(e){return console.error(`Error fetching schema for tag ${t}:`,e),null}},this.getAppTheme=async()=>{try{const t=await window.Codicent.getDataMessages({tags:["app-theme"],codicent:this.codicent});return t.length>0?t[0].data:null}catch(t){return console.error("Error fetching app theme:",t),null}},this.getAppButtons=async()=>{const t=(await window.Codicent.getDataMessages({tags:[this.options.BUTTON_TAG],codicent:this.codicent})).map((t=>t.data));return t.sort(((t,e)=>t.title>e.title?1:-1)),t},this.getAppTasks=async()=>[...(await window.Codicent.getMessages({search:`@${this.codicent} #app-task`,length:50})).map((t=>{const e=new n.default(t.content).content.split("\n"),a=e[0],o=e.slice(1).join("\n");return{id:t.id,title:a,content:o}})),...(await window.Codicent.getDataMessages({tags:["skill"],codicent:this.codicent})).map((t=>t.data)).filter((t=>t.name&&t.title)).map((t=>({id:t.name,title:t.title,content:t.content||t.description||""})))],this.getAppPrompts=async t=>(await window.Codicent.getDataMessages({tags:["chatprompt"],codicent:t||this.codicent})).map((t=>t.data)).map((({title:t,prompt:e})=>({title:t,prompt:e}))),this.uploadFile=async(t,e)=>await window.Codicent.upload(e,t),this.getFileInfo=async t=>await window.Codicent.getFileInfo(t),this.generateApiToken=async(t,e)=>{const n=await this.authFetch(`${a}api/GenerateApiToken?project=${this.codicent}${t?`&expires=${t.toISOString()}`:""}${e?`&forUserNickname=${e}`:""}`,{method:"GET"});if(!n.ok)throw n.status,new Error(`${n.statusText}`);return await n.text()},this.sendMessage=(t,e,n)=>window.Codicent.postMessage({message:`@${n||this.codicent} ${t}`,type:"text",parentId:e}),this.chat=(t,e,n)=>window.Codicent.getChatReply4({message:t,codicent:n||this.codicent,messageId:e}),this.getMessagesFast=async(t,e,n=100,o=void 0,s,i=0)=>{const r=await this.authFetch(`${a}app/AppGetMessages`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"]],body:JSON.stringify({tags:t,codicent:s||this.codicent,search:e,start:i,length:n})});let c=await r.json();if(c.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),o){const t=await this.getPublicFlow(o);c=c.concat(t),c.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime()))}return c},this.getMessages=async(t,e,n=10)=>{let a=[];const o=t.map((async t=>{const e=await window.Codicent.getMessages({search:`@${this.codicent} #${t}`,length:n});return"chat"===t&&e.forEach((t=>t.content=`#chat\n${t.content}`)),e}));if((await Promise.all(o)).forEach((t=>{a=a.concat(t)})),e)try{const t=await this.getPublicFlow(e);a=a.concat(t)}catch(t){console.warn("Error fetching public flow, PUBLIC_TAG missing in codicent?",t)}return a=a.filter(((t,e,n)=>e===n.findIndex((e=>e.id===t.id)))),a.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime())),a},this.registerUser=async(t,e,n,s)=>{const i=await fetch(`${a}app/RegisterAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${s}`]],body:JSON.stringify({nickname:t,email:e,userId:n})});if(!i.ok)return"";const r=await i.text();return window.Codicent.init({token:r,baseUrl:a,signalRHost:o}),r},this.loginUser=async(t,e)=>{try{const n=await fetch(`${a}app/LoginAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!n.ok)return 404===n.status||400===n.status?null:401===n.status?(this.handleUnauthorized(),null):"";const o=await n.text();return this.setToken(o),o}catch(t){return console.warn("Error logging in user:",t),""}},this.loginMicrosoftUser=async(t,e)=>{try{const n=await fetch(`${a}app/LoginMicrosoftUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!n.ok)return 404===n.status||400===n.status?null:401===n.status?(this.handleUnauthorized(),null):"";const o=await n.text();return this.setToken(o),o}catch(t){return console.warn("Error logging in Microsoft user:",t),""}},this.registerMicrosoftUser=async(t,e,n,o)=>{const s=await fetch(`${a}app/RegisterMicrosoftUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${o}`]],body:JSON.stringify({nickname:t,email:e,userId:n})});if(!s.ok)return"";return await s.text()},this.nicknameExists=async t=>{const e=await fetch(`${a}app/NicknameExists?nickname=${encodeURIComponent(t)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"]]});if(!e.ok)return!1;return await e.json()},this.logout=()=>{this.setToken("")},this.bffCreateSession=async()=>{try{const t=await fetch(`${a}bff/session`,{method:"POST",credentials:"include",headers:{Authorization:`Bearer ${this.getToken()}`}});return t.ok?(r(!0),!0):(console.warn("BFF session creation failed:",t.status),!1)}catch(t){return console.warn("BFF session creation error:",t),!1}},this.bffLogout=async()=>{try{await fetch(`${a}bff/logout`,{method:"POST",credentials:"include"})}catch(t){console.warn("BFF logout error:",t)}finally{r(!1)}},this.bffMe=async()=>{try{const t=await fetch(`${a}bff/me`,{credentials:"include"});return t.ok?await t.json():null}catch{return null}},this.isRegistered=()=>null!==localStorage.getItem("codicent_nickname"),this.getApps=async()=>{try{const t=await this.authFetch(`${a}app/AppGetApps`,{method:"GET"});if(!t.ok)throw t.status,new Error(`${t.statusText}`);const e=(await t.json()).filter(((t,e,n)=>e===n.findIndex((e=>e.id===t.id))&&(this.options.APP_NAME||t.id.startsWith(this.options.APP_PREFIX))));return e}catch(t){return console.warn("Error fetching apps:",t),null}},this.addFollower=async(t,e)=>{const n=await this.authFetch(`${a}app/AddFollower?nickname=${t}&followerNickname=${e}`,{method:"GET"});if(!n.ok)throw n.status,new Error(`${n.statusText||"Failed to add follower!"}`);return await n.json()},this.cloneProject=async(t,e)=>{const n=await this.authFetch(`${a}app/CloneProject?project=${t}&newProject=${e}`,{method:"GET"});if(!n.ok)throw n.status,new Error(`${n.statusText}`);let o=await n.json();if(o){const t='#data #app-theme \n{\n "textcolor": "#212121",\n "backgroundcolor": "#273044",\n "color": "#ffffff",\n "logo": "https://codicent.com/logo512.png",\n "title": "",\n "themeColor": "#581d71",\n "buttonColor": "#c0c0c0",\n "buttonTextColor": "#000000",\n "font": "Montserrat",\n "welcome": "Hej {{username}}!",\n "chatPlaceholder": "Tjena, Loociz här! Vad vill du?",\n "textPlaceholder": "Skriv det du vill spara, så tar jag (Loociz alltså) hand om det!",\n "transcriptionInstructions": "Tryck på knappen för att start och sedan stoppa ljudinspelning."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(o=!1)}catch{o=!1}if(o){const t='#data #app-button\n{\n "title": "Ta fram företagsinfo",\n "url": "/#/chat?text=Hej!%20Jag%20vill%20spara%20f%C3%B6retagsinfo.%20Guida%20mig%20steg%20f%C3%B6r%20steg%2C%20ett%20i%20taget%2C%20tills%20vi%20har%20all%20info%20om%20mitt%20f%C3%B6retag.%20Exempel%20p%C3%A5%20data%3A%20f%C3%B6retagsnamn%20eller%20id%C3%A9namn%2C%20org.nr.%2C%20%C3%A4gare%2C%20kontaktinformation%2C%20vision%2C%20aff%C3%A4rsid%C3%A9%2C%20mm."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(o=!1)}catch{o=!1}}}return o},this.getNickname=async()=>{try{const t=s.split(".")[1],e=atob(t),n=JSON.parse(e),o=n.sub||n.userId,i=await this.authFetch(`${a}app/GetNickname?userId=${o}`,{method:"GET"});if(!i.ok)throw 401===i.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${i.statusText}`);return await i.text()}catch{return""}},this.getChatInstructions=async()=>{try{const t=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:1});if(t.length>0)return t[0].content}catch{console.warn("Error fetching chat instructions")}return""},this.updateChatInstructions=async t=>{try{const e=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:100}),n=`@${this.codicent} #instructions\n${t}`;e.length>0?e[0].content!==n&&(console.log("updating instructions",n),await window.Codicent.postMessage({message:n,type:"text",parentId:e[0].id})):(console.log("new instructions",n),await window.Codicent.postMessage({message:n,type:"text"}))}catch{console.warn("Error updating chat instructions")}},this.getUserInfo=async(t,e=!1)=>{const n=await this.authFetch(`${a}app/GetUserInfo?nickname=${t}${e?"&t="+Date.now():""}`,{method:"GET"});if(!n.ok)throw 401===n.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${n.statusText}`);const o=await n.json(),{email:s,picture:i,description:r,followers:c,properties:h,owner:d}=o;return{nickname:t,email:s,name:r,picture:i,followers:c,properties:h,owner:d}},this.updateUserInfo=async({nickname:t,email:e,name:n,picture:o})=>{const s=await this.authFetch(`${a}app/AddOrUpdateUser`,{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8"},body:JSON.stringify({nickname:t,email:e,name:n,picture:o,description:""})});if(!s.ok)throw s.status,new Error(`${s.statusText}`);return await this.getUserInfo(t,!0)},this.requestInvite=async(t,e)=>{const n=await this.authFetch(`${a}app/CreateInvitationOrRequest?forUserNickname=${t}&toProjectNickname=${e}`,{method:"GET"});return!!n.ok||(console.warn(`requestInvite() => ${n.statusText}`),!1)},this.getProjectInfo=this.getUserInfo,this.updateMembersAccess=async(t,e)=>{const n=await this.authFetch(`${a}app/AddOrUpdateProjectProperty?project=${t}&key=APP_EDITORS&value=${e.join(",")}`,{method:"GET"});return!!n.ok||(console.warn(`updateMembersAccess() => ${n.statusText}`),!1)},this.getMembersAccess=async t=>{const e=(await this.getProjectInfo(t,!0)).properties.find((t=>"APP_EDITORS"===t.name));return e&&e.value?e.value.split(","):[]},this.getMemberInfo=async(t,e)=>{const n=await this.authFetch(`${a}app/GetMemberInfo?projectNickname=${encodeURIComponent(t)}&memberNickname=${encodeURIComponent(e)}`,{method:"GET"});if(!n.ok)throw 401===n.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${n.statusText}`);return await n.json()},this.setToken=t=>{s=t,s&&window.Codicent.init({token:s,baseUrl:a,signalRHost:o})},this.getToken=()=>s,this.authFetch=async(t,e={})=>{const n=new Headers(e.headers);i||n.set("Authorization",`Bearer ${this.getToken()}`);const a=await fetch(t,{...e,...i?{credentials:"include"}:{},headers:n});return 401===a.status&&this.handleUnauthorized(),a},this.checkPurchaseStatus=async()=>{const t=await this.authFetch(`${a}payments/GetPaymentStatus`,{method:"GET"});if(!t.ok)throw new Error("Failed to check purchase status");const{isPaid:e}=await t.json();return e},this.checkSubscriptionStatus=async()=>{if(!this.options.SUBSCRIPTION_NEEDED)return"active";const t=await this.authFetch(`${a}payments/GetSubscriptionStatus?t=${Date.now()}`,{method:"GET",headers:{"Cache-Control":"no-cache, no-store, must-revalidate",Pragma:"no-cache",Expires:"0"}});if(!t.ok)throw new Error("Failed to check subscription status");const{status:e}=await t.json();return e},this.createCheckoutSession=async t=>{const e=this.options.STRIPE_SOURCE,n=this.options.STRIPE_TRIAL_PERIOD_DAYS,o={priceId:t,successUrl:window.location.href,cancelUrl:window.location.href};e&&(o.source=e),n&&n>0&&(o.trialPeriodDays=n);const s=await this.authFetch(`${a}payments/CreateCheckoutSession`,{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8"},body:JSON.stringify(o)});if(!s.ok)throw new Error("Failed to create checkout session");const{id:i}=await s.json();return i},this.redirectToCheckout=async t=>{const n=await e.loadStripe(this.options.STRIPE_PUBLIC_KEY);if(!n)throw new Error("Stripe failed to load");const a=await this.createCheckoutSession(t),{error:o}=await n.redirectToCheckout({sessionId:a});if(o)throw new Error(o.message)},this.getChatHistory=async t=>{const e=await this.authFetch(`${a}api/GetMessageHistory?messageId=${t}`,{method:"GET"});if(!e.ok)throw new Error("Failed to get chat history");let n=await e.json();return n=n.filter((t=>!(t.content.includes("#function_result")||t.content.includes("#finish_reason_function_call")||t.content.includes("#function_results_batch")||t.content.includes("#finish_reason_tool_calls_batch")))),n},this.getPublicFlow=async t=>{const e=await this.authFetch(`${a}app/GetPublicFlow?codicent=${t}`,{method:"GET"});if(!e.ok)throw new Error("Failed to get public flow");const n=await e.json();return n.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),n},this.getMessageContent=async t=>{const e=await this.authFetch(`${a}app/GetMessageContent?id=${t}`,{method:"GET"});if(e.ok){const t=await e.json();return{content:t.content,url:t.url}}return{content:"",url:""}},this.logAction=async(t,e)=>{if(!this.options.APP_LOG_CODICENT)return"";const n={content:`@${this.options.APP_LOG_CODICENT} #debug #${e}\n${t}`,type:"text"},o=await fetch(`${a}app/AddChatMessage`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.options.APP_LOG_TOKEN}`]],body:JSON.stringify(n)});if(!o.ok)throw new Error(`${o.statusText||"Failed to post log message!"}`);return(await o.json()).id},this.createApp=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.APP_PREFIX}${t}`;if(!await this.nicknameExists(e)){if(await this.cloneProject(this.options.APP_TEMPLATE,e)){if(this.options.ANONYMOUS_TOKEN)try{const t=this.options.ANONYMOUS_TOKEN.split(".")[1],n=atob(t),a=JSON.parse(n).nickname;if(!await this.addFollower(e,a))throw new Error("Failed to add follower: "+a)}catch(t){console.error("Error extracting adding anonymous follower:",t)}return e}}}}catch(t){console.error("Error creating app:",t)}return null},this.findUsername=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.USER_PREFIX}${t}`;if(!await this.nicknameExists(e))return e}}catch(t){console.warn("Error finding username:",t)}return null},this.getForms=async()=>{const t=await this.authFetch(`${a}app/GetForms?codicent=${this.codicent}`,{method:"GET"});if(!t.ok)throw new Error(t.statusText);return await t.json()},this.getFormById=async t=>{const e=await this.authFetch(`${a}app/GetFormById?id=${t}`,{method:"GET"});return await e.json()},this.getTodoStatus=async t=>{const e=await this.authFetch(`${a}app/GetTodoStatus?messageId=${t}`,{method:"GET"});return e.ok?await e.text():(e.status,console.warn(`getTodoStatus() => ${e.statusText}`),"unknown")},this.updateTodoStatus=async(t,e)=>{const n=await this.authFetch(`${a}app/UpdateTodoStatus?messageId=${t}&status=${e}`,{method:"GET"});if(!n.ok)return console.warn(`updateTodoStatus() => ${n.statusText}`),!1;return await n.json()},this.codicent="",this.options=t,h(t.API_BASE_URL),t.PUBSUB_URL&&d(t.PUBSUB_URL)}async request(t,e,n={}){const a={};n.headers&&n.headers.forEach((([t,e])=>{a[t]=e}));const o=await fetch(t,{...n,method:e,headers:a});if(!o.ok)throw 401===o.status&&this.handleUnauthorized(),new Error(`${o.statusText}`);return o}handleUnauthorized(){this.onUnauthorized&&this.onUnauthorized()}async getRealtimeSessionToken(t="alloy",e="openai"){const n=`${a}realtime/session?voice=${t}&provider=${e}`,o=await this.authFetch(n);if(!o.ok)throw new Error(`Failed to fetch session token: ${o.statusText}`);const s=await o.json(),i=s.client_secret?.value??s.value;if(!i)throw new Error("No ephemeral key returned from session endpoint");return i}async getRealtimeConfig(t="openai"){try{const e=`${a}realtime/config?provider=${t}`,n=await this.authFetch(e,{method:"GET"});return n.ok?await n.json():null}catch(t){return console.warn("Failed to fetch realtime config:",t),null}}}t=p,p.getImageUrl=(t,e)=>`${a}app/GetImage?fileId=${t}&width=${e}`,p.getFileUrl=(t,e)=>`${a}app/DownloadFile?fileId=${t}${e?`&extension=${e}`:""}`,p.downloadFile=async e=>{fetch(t.getFileUrl(e.id)).then((t=>{if(t.headers.forEach(((t,e)=>{console.log(`${e}: ${t}`)})),t.ok)return t.blob();throw new Error("Network response was not ok.")})).then((t=>{const n=window.URL.createObjectURL(t),a=document.createElement("a");a.style.display="none",a.href=n,a.download=e.filename,document.body.appendChild(a),a.click(),window.URL.revokeObjectURL(n)})).catch((t=>{console.error("There was a problem with the fetch operation:",t)}))},p.getMiniChatReplyOld=async(t,e="codicent-mini",n)=>{let o={project:e,message:t};n&&(o.messageId=n);const r=await fetch(`${a}app/GetAi2ChatReply`,{method:"POST",credentials:"include",headers:[["Content-Type","application/json; charset=utf-8"],...i?[]:[["Authorization",`Bearer ${s}`]]],body:JSON.stringify(o)});if(!r.ok)return void r.status;return(await r.json()).content.replace("@codicent-mini","").trim()},p.getMiniChatReply=async(t,e="codicent-mini",n,o=3e5,r=2e3,c)=>{const h={project:e,message:t};let d;n&&(h.messageId=n),c&&(h.previousResponseId=c);try{const t=await fetch(`${a}app/StartAi2ChatAsync`,{method:"POST",credentials:"include",headers:[["Content-Type","application/json; charset=utf-8"],...i?[]:[["Authorization",`Bearer ${s}`]]],body:JSON.stringify(h)});if(!t.ok)return t.status,void console.error(`Failed to start AI chat: ${t.status}`);if(d=(await t.json()).promptMessageId,!d)return void console.error("No promptMessageId returned from server")}catch(t){return void console.error("Error starting AI chat:",t)}const l=Date.now();for(;Date.now()-l<o;)try{const t=await fetch(`${a}app/GetAi2ChatReplyStatus?promptMessageId=${d}`,{method:"GET",credentials:"include",headers:i?[]:[["Authorization",`Bearer ${s}`]]});if(202===t.status){await new Promise((t=>setTimeout(t,r)));continue}if(!t.ok)return void console.error(`Error polling AI chat status: ${t.status}`);const n=await t.json(),o=n.content??n.content??"";return{content:o.replace(`@${e}`,"").replace("@codicent-mini","").trim(),responseId:n.responseId??void 0}}catch(t){return void console.error("Error polling AI chat status:",t)}console.error("Polling timeout reached for AI chat")},p.getTranslations=async(t,e,n="codicent-mini")=>{if(!s||"-"===s)return{translation:t};const o=await fetch(`${a}app/GetTranslations`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json; charset=utf-8",...i?{}:{Authorization:`Bearer ${s}`}},body:JSON.stringify({project:n,text:t,targetLanguage:e})});if(!o.ok)throw o.status,new Error(`Failed to get translations: ${o.statusText}`);return await o.json()},exports.CodicentService=p,exports.isBffMode=()=>i,exports.setBaseUrl=h,exports.setBffMode=r,exports.setSignalRHost=d;
|
|
1
|
+
"use strict";var t,e=require("../node_modules/@stripe/stripe-js/dist/index.js"),s=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("react/jsx-runtime"),require("react"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("exceljs");let n="https://codicent.com/",a="https://pubsub.codicent.com/hub",i="-",o=!1;const r=t=>t instanceof Error?`${t.name}: ${t.message}`.slice(0,300):String(t).slice(0,300),c=t=>{try{return new URL(t,n).pathname.replace(/\/+$/,"")}catch{return t.split("?")[0]}},h=t=>{o=t},d=()=>"undefined"!=typeof window&&void 0!==window.Codicent&&"function"==typeof window.Codicent.init,l=t=>{t&&"string"==typeof t?(n=t.endsWith("/")?t:t+"/",d()&&window.Codicent.init({token:i,baseUrl:n,signalRHost:a})):console.warn("Invalid base URL provided, using default")},u=t=>{t&&"string"==typeof t&&(a=t,d()&&window.Codicent.init({token:i,baseUrl:n,signalRHost:a}))},p=()=>void 0!==window.Codicent&&(window.Codicent.handleMessage=function(t){const e=new CustomEvent("codicent-log",{detail:{message:t}});window.dispatchEvent(e)},window.Codicent.init({token:i,baseUrl:n,signalRHost:a}),!0);let w=p();if(!w){const t=setInterval((()=>{w=p(),w&&clearInterval(t)}),100)}class g{static newSessionId(){try{if("undefined"!=typeof crypto&&"randomUUID"in crypto)return crypto.randomUUID()}catch{}return`s-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}constructor(d){this.createDataMessage=async(t,e,s,n)=>this.timedAction("data_create",t,(async()=>{if(n&&n.length>0){const a=s||this.codicent,i=n.map((t=>`#file:${t}`)).join(" "),o=`@${a} #data #${t} ${i} ${JSON.stringify(e)}`;return await window.Codicent.postMessage({message:o})}return await window.Codicent.data.create({codicent:s||this.codicent,tag:t,data:e})})),this.readDataMessages=async(t,e,s,n,a,i,o,r)=>{const c=await window.Codicent.data.read({codicent:s||this.codicent,tag:t,search:e,start:n,length:a,afterTimestamp:i,beforeTimestamp:o,dataFilters:r});return e&&e.trim()&&0===c.length&&0===(n??0)&&this.recordUsage({type:"deadend",name:"empty_search",target:t,ok:!1}),c},this.readOneDataMessage=async t=>await window.Codicent.data.readOne(t),this.getLeafDataMessage=async(t,e)=>{const s=e||this.codicent;try{const e=await this.authFetch(`${this.options.API_BASE_URL}app/GetLeafMessageByOriginalMessageId?project=${encodeURIComponent(s)}&originalMessageId=${encodeURIComponent(t)}`);if(!e.ok)return null;const n=await e.json();if(!n||!n.content)return null;const a=n.content.indexOf("{");if(-1===a)return null;const i=JSON.parse(n.content.slice(a));return{id:n.id,fileId:n.fileId??null,fileIds:n.fileIds??[],data:i,createdAt:n.createdAt,tags:n.tags??[],mentions:n.mentions??[]}}catch{return null}},this.updateDataMessage=async(t,e,s)=>this.timedAction("data_update","",(async()=>window.Codicent.data.update({id:t,data:e,codicent:s||this.codicent}))),this.deleteDataMessage=async(t,e)=>this.timedAction("data_delete","",(async()=>window.Codicent.data.delete({id:t,codicent:e||this.codicent}))),this.getSchema=async(t,e)=>{try{const e=await fetch(`${this.options.API_BASE_URL}api/GetSchema/${t}`,{method:"GET",headers:{Authorization:`Bearer ${this.options.APP_LOG_TOKEN}`,"Content-Type":"application/json"}});if(!e.ok){if(404===e.status)return null;throw new Error(`Failed to fetch schema: ${e.statusText}`)}const s=await e.text();return JSON.parse(s)}catch(e){return console.error(`Error fetching schema for tag ${t}:`,e),null}},this.telemetryUser="anonymous",this.sessionId=t.newSessionId(),this.usageQueue=[],this.usageFlushTimer=null,this.getAppTheme=async()=>{try{const t=await window.Codicent.getDataMessages({tags:["app-theme"],codicent:this.codicent});return t.length>0?t[0].data:null}catch(t){return console.error("Error fetching app theme:",t),null}},this.getAppButtons=async()=>{const t=(await window.Codicent.getDataMessages({tags:[this.options.BUTTON_TAG],codicent:this.codicent})).map((t=>t.data));return t.sort(((t,e)=>t.title>e.title?1:-1)),t},this.getAppTasks=async()=>[...(await window.Codicent.getMessages({search:`@${this.codicent} #app-task`,length:50})).map((t=>{const e=new s.default(t.content).content.split("\n"),n=e[0],a=e.slice(1).join("\n");return{id:t.id,title:n,content:a}})),...(await window.Codicent.getDataMessages({tags:["skill"],codicent:this.codicent})).map((t=>t.data)).filter((t=>t.name&&t.title)).map((t=>({id:t.name,title:t.title,content:t.content||t.description||""})))],this.getAppPrompts=async t=>(await window.Codicent.getDataMessages({tags:["chatprompt"],codicent:t||this.codicent})).map((t=>t.data)).map((({title:t,prompt:e})=>({title:t,prompt:e}))),this.uploadFile=async(t,e)=>await window.Codicent.upload(e,t),this.getFileInfo=async t=>await window.Codicent.getFileInfo(t),this.generateApiToken=async(t,e)=>{const s=await this.authFetch(`${n}api/GenerateApiToken?project=${this.codicent}${t?`&expires=${t.toISOString()}`:""}${e?`&forUserNickname=${e}`:""}`,{method:"GET"});if(!s.ok)throw s.status,new Error(`${s.statusText}`);return await s.text()},this.sendMessage=(t,e,s)=>window.Codicent.postMessage({message:`@${s||this.codicent} ${t}`,type:"text",parentId:e}),this.chat=(t,e,s,n,a)=>window.Codicent.getChatReply4({message:t,codicent:s||this.codicent,messageId:e,latitude:n,longitude:a}),this.getMessagesFast=async(t,e,s=100,a=void 0,i,o=0)=>{const r=await this.authFetch(`${n}app/AppGetMessages`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"]],body:JSON.stringify({tags:t,codicent:i||this.codicent,search:e,start:o,length:s})});let c=await r.json();if(c.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),a){const t=await this.getPublicFlow(a);c=c.concat(t),c.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime()))}return c},this.getMessages=async(t,e,s=10)=>{let n=[];const a=t.map((async t=>{const e=await window.Codicent.getMessages({search:`@${this.codicent} #${t}`,length:s});return"chat"===t&&e.forEach((t=>t.content=`#chat\n${t.content}`)),e}));if((await Promise.all(a)).forEach((t=>{n=n.concat(t)})),e)try{const t=await this.getPublicFlow(e);n=n.concat(t)}catch(t){console.warn("Error fetching public flow, PUBLIC_TAG missing in codicent?",t)}return n=n.filter(((t,e,s)=>e===s.findIndex((e=>e.id===t.id)))),n.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime())),n},this.registerUser=async(t,e,s,i)=>{const o=await fetch(`${n}app/RegisterAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${i}`]],body:JSON.stringify({nickname:t,email:e,userId:s})});if(!o.ok)return"";const r=await o.text();return window.Codicent.init({token:r,baseUrl:n,signalRHost:a}),r},this.loginUser=async(t,e)=>{try{const s=await fetch(`${n}app/LoginAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!s.ok)return 404===s.status||400===s.status?null:401===s.status?(this.handleUnauthorized(),null):"";const a=await s.text();return this.setToken(a),a}catch(t){return console.warn("Error logging in user:",t),""}},this.loginMicrosoftUser=async(t,e)=>{try{const s=await fetch(`${n}app/LoginMicrosoftUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!s.ok)return 404===s.status||400===s.status?null:401===s.status?(this.handleUnauthorized(),null):"";const a=await s.text();return this.setToken(a),a}catch(t){return console.warn("Error logging in Microsoft user:",t),""}},this.registerMicrosoftUser=async(t,e,s,a)=>{const i=await fetch(`${n}app/RegisterMicrosoftUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${a}`]],body:JSON.stringify({nickname:t,email:e,userId:s})});if(!i.ok)return"";return await i.text()},this.nicknameExists=async t=>{const e=await fetch(`${n}app/NicknameExists?nickname=${encodeURIComponent(t)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"]]});if(!e.ok)return!1;return await e.json()},this.logout=()=>{this.setToken("")},this.bffCreateSession=async()=>{try{const t=await fetch(`${n}bff/session`,{method:"POST",credentials:"include",headers:{Authorization:`Bearer ${this.getToken()}`}});return t.ok?(h(!0),!0):(console.warn("BFF session creation failed:",t.status),!1)}catch(t){return console.warn("BFF session creation error:",t),!1}},this.bffLogout=async()=>{try{await fetch(`${n}bff/logout`,{method:"POST",credentials:"include"})}catch(t){console.warn("BFF logout error:",t)}finally{h(!1)}},this.bffMe=async()=>{try{const t=await fetch(`${n}bff/me`,{credentials:"include"});return t.ok?await t.json():null}catch{return null}},this.isRegistered=()=>null!==localStorage.getItem("codicent_nickname"),this.getApps=async()=>{try{const t=await this.authFetch(`${n}app/AppGetApps`,{method:"GET"});if(!t.ok)throw t.status,new Error(`${t.statusText}`);const e=(await t.json()).filter(((t,e,s)=>e===s.findIndex((e=>e.id===t.id))&&(this.options.APP_NAME||t.id.startsWith(this.options.APP_PREFIX))));return e}catch(t){return console.warn("Error fetching apps:",t),null}},this.addFollower=async(t,e)=>{const s=await this.authFetch(`${n}app/AddFollower?nickname=${t}&followerNickname=${e}`,{method:"GET"});if(!s.ok)throw s.status,new Error(`${s.statusText||"Failed to add follower!"}`);return await s.json()},this.cloneProject=async(t,e)=>{const s=await this.authFetch(`${n}app/CloneProject?project=${t}&newProject=${e}`,{method:"GET"});if(!s.ok)throw s.status,new Error(`${s.statusText}`);let a=await s.json();if(a){const t='#data #app-theme \n{\n "textcolor": "#212121",\n "backgroundcolor": "#273044",\n "color": "#ffffff",\n "logo": "https://codicent.com/logo512.png",\n "title": "",\n "themeColor": "#581d71",\n "buttonColor": "#c0c0c0",\n "buttonTextColor": "#000000",\n "font": "Montserrat",\n "welcome": "Hej {{username}}!",\n "chatPlaceholder": "Tjena, Loociz här! Vad vill du?",\n "textPlaceholder": "Skriv det du vill spara, så tar jag (Loociz alltså) hand om det!",\n "transcriptionInstructions": "Tryck på knappen för att start och sedan stoppa ljudinspelning."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(a=!1)}catch{a=!1}if(a){const t='#data #app-button\n{\n "title": "Ta fram företagsinfo",\n "url": "/#/chat?text=Hej!%20Jag%20vill%20spara%20f%C3%B6retagsinfo.%20Guida%20mig%20steg%20f%C3%B6r%20steg%2C%20ett%20i%20taget%2C%20tills%20vi%20har%20all%20info%20om%20mitt%20f%C3%B6retag.%20Exempel%20p%C3%A5%20data%3A%20f%C3%B6retagsnamn%20eller%20id%C3%A9namn%2C%20org.nr.%2C%20%C3%A4gare%2C%20kontaktinformation%2C%20vision%2C%20aff%C3%A4rsid%C3%A9%2C%20mm."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(a=!1)}catch{a=!1}}}return a},this.getNickname=async()=>{try{const t=i.split(".")[1],e=atob(t),s=JSON.parse(e),a=s.sub||s.userId,o=await this.authFetch(`${n}app/GetNickname?userId=${a}`,{method:"GET"});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);return await o.text()}catch{return""}},this.getChatInstructions=async()=>{try{const t=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:1});if(t.length>0)return t[0].content}catch{console.warn("Error fetching chat instructions")}return""},this.updateChatInstructions=async t=>{try{const e=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:100}),s=`@${this.codicent} #instructions\n${t}`;e.length>0?e[0].content!==s&&(console.log("updating instructions",s),await window.Codicent.postMessage({message:s,type:"text",parentId:e[0].id})):(console.log("new instructions",s),await window.Codicent.postMessage({message:s,type:"text"}))}catch{console.warn("Error updating chat instructions")}},this.getUserInfo=async(t,e=!1)=>{const s=await this.authFetch(`${n}app/GetUserInfo?nickname=${t}${e?"&t="+Date.now():""}`,{method:"GET"});if(!s.ok)throw 401===s.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${s.statusText}`);const a=await s.json(),{email:i,picture:o,description:r,followers:c,properties:h,owner:d}=a;return{nickname:t,email:i,name:r,picture:o,followers:c,properties:h,owner:d}},this.updateUserInfo=async({nickname:t,email:e,name:s,picture:a})=>{const i=await this.authFetch(`${n}app/AddOrUpdateUser`,{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8"},body:JSON.stringify({nickname:t,email:e,name:s,picture:a,description:""})});if(!i.ok)throw i.status,new Error(`${i.statusText}`);return await this.getUserInfo(t,!0)},this.requestInvite=async(t,e)=>{const s=await this.authFetch(`${n}app/CreateInvitationOrRequest?forUserNickname=${t}&toProjectNickname=${e}`,{method:"GET"});return!!s.ok||(console.warn(`requestInvite() => ${s.statusText}`),!1)},this.getProjectInfo=this.getUserInfo,this.updateMembersAccess=async(t,e)=>{const s=await this.authFetch(`${n}app/AddOrUpdateProjectProperty?project=${t}&key=APP_EDITORS&value=${e.join(",")}`,{method:"GET"});return!!s.ok||(console.warn(`updateMembersAccess() => ${s.statusText}`),!1)},this.getMembersAccess=async t=>{const e=(await this.getProjectInfo(t,!0)).properties.find((t=>"APP_EDITORS"===t.name));return e&&e.value?e.value.split(","):[]},this.getMemberInfo=async(t,e)=>{const s=await this.authFetch(`${n}app/GetMemberInfo?projectNickname=${encodeURIComponent(t)}&memberNickname=${encodeURIComponent(e)}`,{method:"GET"});if(!s.ok)throw 401===s.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${s.statusText}`);return await s.json()},this.setToken=t=>{i=t,i&&window.Codicent.init({token:i,baseUrl:n,signalRHost:a})},this.getToken=()=>i,this.authFetch=async(t,e={})=>{const s=new Headers(e.headers);let n;o||s.set("Authorization",`Bearer ${this.getToken()}`);try{n=await fetch(t,{...e,...o?{credentials:"include"}:{},headers:s})}catch(e){throw this.recordUsage({type:"api_error",name:c(t),ok:!1,error:r(e)}),e}return 401===n.status&&this.handleUnauthorized(),n.ok||401===n.status||404===n.status||this.recordUsage({type:"api_error",name:c(t),ok:!1,status:n.status}),n},this.checkPurchaseStatus=async()=>{const t=await this.authFetch(`${n}payments/GetPaymentStatus`,{method:"GET"});if(!t.ok)throw new Error("Failed to check purchase status");const{isPaid:e}=await t.json();return e},this.checkSubscriptionStatus=async()=>{if(!this.options.SUBSCRIPTION_NEEDED)return"active";const t=await this.authFetch(`${n}payments/GetSubscriptionStatus?t=${Date.now()}`,{method:"GET",headers:{"Cache-Control":"no-cache, no-store, must-revalidate",Pragma:"no-cache",Expires:"0"}});if(!t.ok)throw new Error("Failed to check subscription status");const{status:e}=await t.json();return e},this.createCheckoutSession=async t=>{const e=this.options.STRIPE_SOURCE,s=this.options.STRIPE_TRIAL_PERIOD_DAYS,a={priceId:t,successUrl:window.location.href,cancelUrl:window.location.href};e&&(a.source=e),s&&s>0&&(a.trialPeriodDays=s);const i=await this.authFetch(`${n}payments/CreateCheckoutSession`,{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8"},body:JSON.stringify(a)});if(!i.ok)throw new Error("Failed to create checkout session");const{id:o}=await i.json();return o},this.redirectToCheckout=async t=>{const s=await e.loadStripe(this.options.STRIPE_PUBLIC_KEY);if(!s)throw new Error("Stripe failed to load");const n=await this.createCheckoutSession(t),{error:a}=await s.redirectToCheckout({sessionId:n});if(a)throw new Error(a.message)},this.getChatHistory=async t=>{const e=await this.authFetch(`${n}api/GetMessageHistory?messageId=${t}`,{method:"GET"});if(!e.ok)throw new Error("Failed to get chat history");let s=await e.json();return s=s.filter((t=>!(t.content.includes("#function_result")||t.content.includes("#finish_reason_function_call")||t.content.includes("#function_results_batch")||t.content.includes("#finish_reason_tool_calls_batch")))),s},this.getPublicFlow=async t=>{const e=await this.authFetch(`${n}app/GetPublicFlow?codicent=${t}`,{method:"GET"});if(!e.ok)throw new Error("Failed to get public flow");const s=await e.json();return s.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),s},this.getMessageContent=async t=>{const e=await this.authFetch(`${n}app/GetMessageContent?id=${t}`,{method:"GET"});if(e.ok){const t=await e.json();return{content:t.content,url:t.url}}return{content:"",url:""}},this.logAction=async(t,e)=>this.options.APP_LOG_CODICENT?this.postToLog(`@${this.options.APP_LOG_CODICENT} #debug #${e}\n${t}`):"",this.postToLog=async(t,e=!1)=>{const s=await fetch(`${n}app/AddChatMessage`,{method:"POST",keepalive:e,headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.options.APP_LOG_TOKEN}`]],body:JSON.stringify({content:t,type:"text"})});if(!s.ok)throw new Error(`${s.statusText||"Failed to post log message!"}`);return(await s.json()).id},this.setTelemetryUser=t=>{t&&(this.telemetryUser=t)},this.trackEvent=(t,e)=>{e&&(this.telemetryUser=e),this.recordUsage(t)},this.recordUsage=t=>{this.options.APP_LOG_CODICENT&&(this.usageQueue.push({...t,_ts:(new Date).toISOString()}),this.usageQueue.length>=20?this.flushUsage():this.usageFlushTimer||(this.usageFlushTimer=setTimeout((()=>this.flushUsage()),4e3)))},this.flushUsage=()=>{if(this.usageFlushTimer&&(clearTimeout(this.usageFlushTimer),this.usageFlushTimer=null),!this.options.APP_LOG_CODICENT||0===this.usageQueue.length)return;const t=this.usageQueue;this.usageQueue=[];const e="undefined"!=typeof navigator?String(navigator.platform||"").slice(0,40):"";for(const s of t){const t={ts:s._ts,type:s.type,name:s.name,...s.page?{page:s.page}:{},...s.target?{target:s.target}:{},...void 0===s.ok?{}:{ok:s.ok},...void 0===s.durationMs?{}:{durationMs:Math.round(s.durationMs)},...void 0===s.status?{}:{status:s.status},...s.error?{error:String(s.error).slice(0,300)}:{},session:this.sessionId,app:this.options.APP_NAME||"",user:this.telemetryUser,...e?{platform:e}:{}},n=`@${this.options.APP_LOG_CODICENT} #data #usage #${s.type} ${this.tagSafe(this.telemetryUser)}\n${JSON.stringify(t)}`;this.postToLog(n,!0).catch((()=>{}))}},this.timedAction=async(t,e,s)=>{const n=Date.now();try{const a=await s();return this.recordUsage({type:"action",name:t,target:e,ok:!0,durationMs:Date.now()-n}),a}catch(s){throw this.recordUsage({type:"action",name:t,target:e,ok:!1,durationMs:Date.now()-n,error:r(s)}),s}},this.tagSafe=t=>`#${(t||"anon").replace(/[^a-zA-Z0-9_]/g,"_").toLowerCase()}`,this.createApp=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.APP_PREFIX}${t}`;if(!await this.nicknameExists(e)){if(await this.cloneProject(this.options.APP_TEMPLATE,e)){if(this.options.ANONYMOUS_TOKEN)try{const t=this.options.ANONYMOUS_TOKEN.split(".")[1],s=atob(t),n=JSON.parse(s).nickname;if(!await this.addFollower(e,n))throw new Error("Failed to add follower: "+n)}catch(t){console.error("Error extracting adding anonymous follower:",t)}return e}}}}catch(t){console.error("Error creating app:",t)}return null},this.findUsername=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.USER_PREFIX}${t}`;if(!await this.nicknameExists(e))return e}}catch(t){console.warn("Error finding username:",t)}return null},this.getForms=async()=>{const t=await this.authFetch(`${n}app/GetForms?codicent=${this.codicent}`,{method:"GET"});if(!t.ok)throw new Error(t.statusText);return await t.json()},this.getFormById=async t=>{const e=await this.authFetch(`${n}app/GetFormById?id=${t}`,{method:"GET"});return await e.json()},this.getTodoStatus=async t=>{const e=await this.authFetch(`${n}app/GetTodoStatus?messageId=${t}`,{method:"GET"});return e.ok?await e.text():(e.status,console.warn(`getTodoStatus() => ${e.statusText}`),"unknown")},this.updateTodoStatus=async(t,e)=>{const s=await this.authFetch(`${n}app/UpdateTodoStatus?messageId=${t}&status=${e}`,{method:"GET"});if(!s.ok)return console.warn(`updateTodoStatus() => ${s.statusText}`),!1;return await s.json()},this.codicent="",this.options=d,l(d.API_BASE_URL),d.PUBSUB_URL&&u(d.PUBSUB_URL),"undefined"==typeof window||t._flushListenersRegistered||(t._flushListenersRegistered=!0,t._pagehideHandler=()=>this.flushUsage(),t._visibilityHandler=()=>{"undefined"!=typeof document&&"hidden"===document.visibilityState&&this.flushUsage()},window.addEventListener("pagehide",t._pagehideHandler),window.addEventListener("visibilitychange",t._visibilityHandler))}dispose(){"undefined"!=typeof window&&(t._pagehideHandler&&(window.removeEventListener("pagehide",t._pagehideHandler),t._pagehideHandler=null),t._visibilityHandler&&(window.removeEventListener("visibilitychange",t._visibilityHandler),t._visibilityHandler=null),t._flushListenersRegistered=!1)}async request(t,e,s={}){const n={};s.headers&&s.headers.forEach((([t,e])=>{n[t]=e}));const a=await fetch(t,{...s,method:e,headers:n});if(!a.ok)throw 401===a.status&&this.handleUnauthorized(),new Error(`${a.statusText}`);return a}handleUnauthorized(){this.onUnauthorized&&this.onUnauthorized()}async getRealtimeSessionToken(t="alloy",e="openai"){const s=`${n}realtime/session?voice=${t}&provider=${e}`,a=await this.authFetch(s);if(!a.ok)throw new Error(`Failed to fetch session token: ${a.statusText}`);const i=await a.json(),o=i.client_secret?.value??i.value;if(!o)throw new Error("No ephemeral key returned from session endpoint");return o}async getRealtimeConfig(t="openai"){try{const e=`${n}realtime/config?provider=${t}`,s=await this.authFetch(e,{method:"GET"});return s.ok?await s.json():null}catch(t){return console.warn("Failed to fetch realtime config:",t),null}}}t=g,g._flushListenersRegistered=!1,g._pagehideHandler=null,g._visibilityHandler=null,g.getImageUrl=(t,e)=>`${n}app/GetImage?fileId=${t}&width=${e}`,g.getFileUrl=(t,e)=>`${n}app/DownloadFile?fileId=${t}${e?`&extension=${e}`:""}`,g.downloadFile=async e=>{fetch(t.getFileUrl(e.id)).then((t=>{if(t.headers.forEach(((t,e)=>{console.log(`${e}: ${t}`)})),t.ok)return t.blob();throw new Error("Network response was not ok.")})).then((t=>{const s=window.URL.createObjectURL(t),n=document.createElement("a");n.style.display="none",n.href=s,n.download=e.filename,document.body.appendChild(n),n.click(),window.URL.revokeObjectURL(s)})).catch((t=>{console.error("There was a problem with the fetch operation:",t)}))},g.getMiniChatReplyOld=async(t,e="codicent-mini",s)=>{let a={project:e,message:t};s&&(a.messageId=s);const r=await fetch(`${n}app/GetAi2ChatReply`,{method:"POST",credentials:"include",headers:[["Content-Type","application/json; charset=utf-8"],...o?[]:[["Authorization",`Bearer ${i}`]]],body:JSON.stringify(a)});if(!r.ok)return void r.status;return(await r.json()).content.replace("@codicent-mini","").trim()},g.getMiniChatReply=async(t,e="codicent-mini",s,a=3e5,r=2e3,c)=>{const h={project:e,message:t};let d;s&&(h.messageId=s),c&&(h.previousResponseId=c);try{const t=await fetch(`${n}app/StartAi2ChatAsync`,{method:"POST",credentials:"include",headers:[["Content-Type","application/json; charset=utf-8"],...o?[]:[["Authorization",`Bearer ${i}`]]],body:JSON.stringify(h)});if(!t.ok)return t.status,void console.error(`Failed to start AI chat: ${t.status}`);if(d=(await t.json()).promptMessageId,!d)return void console.error("No promptMessageId returned from server")}catch(t){return void console.error("Error starting AI chat:",t)}const l=Date.now();for(;Date.now()-l<a;)try{const t=await fetch(`${n}app/GetAi2ChatReplyStatus?promptMessageId=${d}`,{method:"GET",credentials:"include",headers:o?[]:[["Authorization",`Bearer ${i}`]]});if(202===t.status){await new Promise((t=>setTimeout(t,r)));continue}if(!t.ok)return void console.error(`Error polling AI chat status: ${t.status}`);const s=await t.json(),a=s.content??s.content??"";return{content:a.replace(`@${e}`,"").replace("@codicent-mini","").trim(),responseId:s.responseId??void 0}}catch(t){return void console.error("Error polling AI chat status:",t)}console.error("Polling timeout reached for AI chat")},g.getTranslations=async(t,e,s="codicent-mini")=>{if(!i||"-"===i)return{translation:t};const a=await fetch(`${n}app/GetTranslations`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json; charset=utf-8",...o?{}:{Authorization:`Bearer ${i}`}},body:JSON.stringify({project:s,text:t,targetLanguage:e})});if(!a.ok)throw a.status,new Error(`Failed to get translations: ${a.statusText}`);return await a.json()},exports.CodicentService=g,exports.isBffMode=()=>o,exports.setBaseUrl=l,exports.setBffMode=h,exports.setSignalRHost=u;
|
|
@@ -28,6 +28,30 @@ export interface ButtonConfig {
|
|
|
28
28
|
export * from "./audit";
|
|
29
29
|
import type { ColumnAction, ColumnDefinition } from "../components/ListView";
|
|
30
30
|
export type { ColumnAction, ColumnDefinition };
|
|
31
|
+
import type { CodicentService } from "../services/codicent";
|
|
32
|
+
/**
|
|
33
|
+
* A bulk action available when rows are selected in a list.
|
|
34
|
+
* Exactly one of `referenceColumnKey`, `setFieldKey`, or `handler` should be set.
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
export interface BulkAction {
|
|
38
|
+
/** Display label for the bulk action button. */
|
|
39
|
+
label: string;
|
|
40
|
+
/**
|
|
41
|
+
* Column key of a `type: "reference"` column to bulk-set via a picker dialog.
|
|
42
|
+
* If that column declares `referenceCascadeFromKey`, the cascade-from column is also bulk-set.
|
|
43
|
+
*/
|
|
44
|
+
referenceColumnKey?: string;
|
|
45
|
+
/**
|
|
46
|
+
* When set, immediately sets this field to `setFieldValue` on all selected rows without a dialog.
|
|
47
|
+
*/
|
|
48
|
+
setFieldKey?: string;
|
|
49
|
+
setFieldValue?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Custom async handler. Called with selected rows + service; applied immediately, no dialog.
|
|
52
|
+
*/
|
|
53
|
+
handler?: (selectedRows: DataMessage[], service: CodicentService) => Promise<void>;
|
|
54
|
+
}
|
|
31
55
|
/**
|
|
32
56
|
* Configuration for a single list view, supporting column definitions and optional deduplication.
|
|
33
57
|
* @public
|
|
@@ -42,6 +66,10 @@ export interface ListConfig {
|
|
|
42
66
|
* (e.g. same customer number or offer number) and only the latest should be displayed.
|
|
43
67
|
*/
|
|
44
68
|
deduplicateBy?: string | string[];
|
|
69
|
+
/**
|
|
70
|
+
* Bulk actions available when rows are selected. Setting this enables row-selection checkboxes.
|
|
71
|
+
*/
|
|
72
|
+
bulkActions?: BulkAction[];
|
|
45
73
|
}
|
|
46
74
|
/**
|
|
47
75
|
* List definitions keyed by tag name (e.g., "customer2", "offertjson").
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+GAA+G;IAC/G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAGD,cAAc,SAAS,CAAC;AAGxB,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { default as MessageContent } from "./MessageContent";
|
|
2
2
|
export { default as generateBrandVariants } from "./theme";
|
|
3
3
|
export { default as log } from "./logging";
|
|
4
|
+
export { track, USAGE_EVENT_NAME } from "./telemetry";
|
|
5
|
+
export type { UsageEventInput, UsageEventType } from "./telemetry";
|
|
4
6
|
export { default as withWakeLock } from "./withWakeLock";
|
|
5
7
|
export { default as AppStateMachine } from "./appState";
|
|
6
8
|
export { createAppStateMachine } from "./appState";
|
|
@@ -12,6 +14,7 @@ export { exportToExcel } from "./excelExport";
|
|
|
12
14
|
export type { ExcelColumnDefinition } from "./excelExport";
|
|
13
15
|
export type { AppStateDefinition } from "./appState";
|
|
14
16
|
export { getTimeString } from "./helpers";
|
|
17
|
+
export { formatReference, referenceEntityName } from "./reference";
|
|
15
18
|
export { CacheManager, stateMachineCacheManager } from "./cacheManager";
|
|
16
19
|
export type { CacheEntry, CachedUserSession } from "./cacheManager";
|
|
17
20
|
export { resolveAuditConfig, calculateAuditTimeRemaining, getAuditUrgencyColor, calcValidUntil, formatValidityPeriod, parseValidityPeriod, isAnswerCompliant, getAuditComplianceRate, getAuditRoleCapabilities, getEffectiveAnswerOptions, DEFAULT_AUDIT_VALIDITY_PERIOD_MONTHS, AUDIT_CHECKBOX_OPTIONS, } from "./auditUtils";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,oCAAoC,EACpC,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,oCAAoC,EACpC,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives the short entity name from a data-message tag, e.g. "sunhero-installer" -> "installer".
|
|
3
|
+
* Tags without a hyphen are returned unchanged (e.g. "customer2").
|
|
4
|
+
*/
|
|
5
|
+
export declare const referenceEntityName: (tag: string) => string;
|
|
6
|
+
/**
|
|
7
|
+
* Builds the stable reference string stored in a reference column's field, e.g.
|
|
8
|
+
* formatReference("sunhero-installer", "abc-123") -> "#installer_abc-123".
|
|
9
|
+
*
|
|
10
|
+
* The same function must be used on both sides of a relationship (the linking row and the cascade
|
|
11
|
+
* target) so the values match for server-side `dataFilters` filtering. The value is a denormalized
|
|
12
|
+
* field value, not a parsed message tag.
|
|
13
|
+
*/
|
|
14
|
+
export declare const formatReference: (tag: string, originalMessageId: string) => string;
|
|
15
|
+
//# sourceMappingURL=reference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../../src/utils/reference.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAS,MAAM,KAAG,MACiB,CAAC;AAEpE;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,QAAS,MAAM,qBAAqB,MAAM,KAAG,MACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=e=>e.includes("-")?e.substring(e.lastIndexOf("-")+1):e;exports.formatReference=(t,s)=>`#${e(t)}_${s}`,exports.referenceEntityName=e;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type UsageEventType = "session" | "pageview" | "action" | "deadend" | "api_error" | "error";
|
|
2
|
+
export interface UsageEventInput {
|
|
3
|
+
type: UsageEventType;
|
|
4
|
+
/** Stable, low-cardinality name (route, action id, error name). */
|
|
5
|
+
name: string;
|
|
6
|
+
/** Current page/route, if relevant. */
|
|
7
|
+
page?: string;
|
|
8
|
+
/** Data tag / entity type acted on (metadata only — never an id or value). */
|
|
9
|
+
target?: string;
|
|
10
|
+
/** Whether the action/request succeeded. */
|
|
11
|
+
ok?: boolean;
|
|
12
|
+
/** Duration in ms for timed actions. */
|
|
13
|
+
durationMs?: number;
|
|
14
|
+
/** HTTP status for api_error events. */
|
|
15
|
+
status?: number;
|
|
16
|
+
/** Error class/message, truncated (metadata only — no payloads). */
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare const USAGE_EVENT_NAME = "usage-event";
|
|
20
|
+
/**
|
|
21
|
+
* Dispatch a usage event from anywhere in the UI. App.tsx listens for
|
|
22
|
+
* "usage-event" and forwards it to CodicentService.trackEvent. No-op outside
|
|
23
|
+
* a browser, and never throws — telemetry must not affect app behaviour.
|
|
24
|
+
*/
|
|
25
|
+
export declare const track: (event: UsageEventInput) => void;
|
|
26
|
+
export default track;
|
|
27
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/utils/telemetry.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,UAAU,GACV,QAAQ,GACR,SAAS,GACT,WAAW,GACX,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,KAAK,UAAW,eAAe,KAAG,IAO9C,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e="usage-event",t=t=>{if("undefined"!=typeof window)try{window.dispatchEvent(new CustomEvent(e,{detail:t}))}catch{}};exports.USAGE_EVENT_NAME=e,exports.default=t,exports.track=t;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var r={};export{r as __exports};
|
|
@@ -25,9 +25,15 @@ export interface DataMessagePickerProps {
|
|
|
25
25
|
secondaryKeys?: string[];
|
|
26
26
|
dataFilters?: Record<string, string>;
|
|
27
27
|
noResultsText?: string;
|
|
28
|
+
/**
|
|
29
|
+
* When true, focusing the field with an empty input lists the most-recent matches
|
|
30
|
+
* (filtered by `dataFilters` if present), so users can browse without typing.
|
|
31
|
+
* Mirrors the "click the magnifying glass to see a list" expectation.
|
|
32
|
+
*/
|
|
33
|
+
showRecentOnFocus?: boolean;
|
|
28
34
|
onValueChange?: (value: string) => void;
|
|
29
35
|
onSelect?: (selection: DataMessagePickerSelection) => void;
|
|
30
36
|
}
|
|
31
|
-
declare const DataMessagePicker: ({ service, tag, codicent, placeholder, value, disabled, debounceMs, minSearchLength, resultLimit, displayKeys, searchKeys, primaryKey, secondaryKeys, dataFilters, noResultsText, onValueChange, onSelect, }: DataMessagePickerProps) => import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
declare const DataMessagePicker: ({ service, tag, codicent, placeholder, value, disabled, debounceMs, minSearchLength, resultLimit, displayKeys, searchKeys, primaryKey, secondaryKeys, dataFilters, noResultsText, showRecentOnFocus, onValueChange, onSelect, }: DataMessagePickerProps) => import("react/jsx-runtime").JSX.Element;
|
|
32
38
|
export default DataMessagePicker;
|
|
33
39
|
//# sourceMappingURL=DataMessagePicker.d.ts.map
|