hazo_collab_forms 1.9.0 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/README.md +5 -5
  2. package/dist/components/_internal_form_set.d.ts +18 -15
  3. package/dist/components/_internal_form_set.d.ts.map +1 -1
  4. package/dist/components/_internal_form_set.js +14 -11
  5. package/dist/components/_internal_form_set.js.map +1 -1
  6. package/dist/components/collab_form_file_upload.d.ts +7 -8
  7. package/dist/components/collab_form_file_upload.d.ts.map +1 -1
  8. package/dist/components/collab_form_file_upload.js +31 -20
  9. package/dist/components/collab_form_file_upload.js.map +1 -1
  10. package/dist/components/hazo_add_field_dialog/components/pending_field_item.d.ts +1 -1
  11. package/dist/components/hazo_add_field_dialog/components/pending_field_item.js +2 -2
  12. package/dist/components/hazo_add_field_dialog/components/pending_field_item.js.map +1 -1
  13. package/dist/components/hazo_add_field_dialog/components/pending_field_list.d.ts +1 -1
  14. package/dist/components/hazo_add_field_dialog/hazo_add_field_dialog.js +7 -7
  15. package/dist/components/hazo_add_field_dialog/hazo_add_field_dialog.js.map +1 -1
  16. package/dist/components/hazo_add_field_dialog/types.d.ts +4 -4
  17. package/dist/components/hazo_add_field_dialog/types.d.ts.map +1 -1
  18. package/dist/components/hazo_add_field_dialog/utils/library_to_pending.js +2 -2
  19. package/dist/components/hazo_add_field_dialog/utils/library_to_pending.js.map +1 -1
  20. package/dist/components/hazo_add_group_dialog/hazo_add_group_dialog.js +6 -6
  21. package/dist/components/hazo_add_group_dialog/hazo_add_group_dialog.js.map +1 -1
  22. package/dist/components/hazo_collab_form_base.d.ts +11 -15
  23. package/dist/components/hazo_collab_form_base.d.ts.map +1 -1
  24. package/dist/components/hazo_collab_form_base.js +7 -7
  25. package/dist/components/hazo_collab_form_base.js.map +1 -1
  26. package/dist/components/hazo_collab_form_checkbox.d.ts +1 -24
  27. package/dist/components/hazo_collab_form_checkbox.d.ts.map +1 -1
  28. package/dist/components/hazo_collab_form_checkbox.js +15 -141
  29. package/dist/components/hazo_collab_form_checkbox.js.map +1 -1
  30. package/dist/components/hazo_collab_form_combo.d.ts +0 -44
  31. package/dist/components/hazo_collab_form_combo.d.ts.map +1 -1
  32. package/dist/components/hazo_collab_form_combo.js +24 -199
  33. package/dist/components/hazo_collab_form_combo.js.map +1 -1
  34. package/dist/components/hazo_collab_form_data_table.d.ts.map +1 -1
  35. package/dist/components/hazo_collab_form_data_table.js +2 -1
  36. package/dist/components/hazo_collab_form_data_table.js.map +1 -1
  37. package/dist/components/hazo_collab_form_date.d.ts +1 -59
  38. package/dist/components/hazo_collab_form_date.d.ts.map +1 -1
  39. package/dist/components/hazo_collab_form_date.js +34 -194
  40. package/dist/components/hazo_collab_form_date.js.map +1 -1
  41. package/dist/components/hazo_collab_form_doc.d.ts.map +1 -1
  42. package/dist/components/hazo_collab_form_doc.js +8 -7
  43. package/dist/components/hazo_collab_form_doc.js.map +1 -1
  44. package/dist/components/hazo_collab_form_group.js +5 -5
  45. package/dist/components/hazo_collab_form_group.js.map +1 -1
  46. package/dist/components/hazo_collab_form_inputbox.d.ts +0 -17
  47. package/dist/components/hazo_collab_form_inputbox.d.ts.map +1 -1
  48. package/dist/components/hazo_collab_form_inputbox.js +25 -148
  49. package/dist/components/hazo_collab_form_inputbox.js.map +1 -1
  50. package/dist/components/hazo_collab_form_radio.d.ts +1 -36
  51. package/dist/components/hazo_collab_form_radio.d.ts.map +1 -1
  52. package/dist/components/hazo_collab_form_radio.js +18 -143
  53. package/dist/components/hazo_collab_form_radio.js.map +1 -1
  54. package/dist/components/hazo_collab_form_textarea.d.ts +0 -17
  55. package/dist/components/hazo_collab_form_textarea.d.ts.map +1 -1
  56. package/dist/components/hazo_collab_form_textarea.js +14 -141
  57. package/dist/components/hazo_collab_form_textarea.js.map +1 -1
  58. package/dist/components/hazo_collab_form_view/hooks/use_view_callbacks.d.ts +36 -0
  59. package/dist/components/hazo_collab_form_view/hooks/use_view_callbacks.d.ts.map +1 -0
  60. package/dist/components/hazo_collab_form_view/hooks/use_view_callbacks.js +82 -0
  61. package/dist/components/hazo_collab_form_view/hooks/use_view_callbacks.js.map +1 -0
  62. package/dist/components/hazo_collab_form_view/types.d.ts +4 -3
  63. package/dist/components/hazo_collab_form_view/types.d.ts.map +1 -1
  64. package/dist/components/hazo_collab_form_view/views/edit_view.d.ts.map +1 -1
  65. package/dist/components/hazo_collab_form_view/views/edit_view.js +8 -80
  66. package/dist/components/hazo_collab_form_view/views/edit_view.js.map +1 -1
  67. package/dist/components/hazo_collab_form_view/views/summary_view.d.ts.map +1 -1
  68. package/dist/components/hazo_collab_form_view/views/summary_view.js +51 -271
  69. package/dist/components/hazo_collab_form_view/views/summary_view.js.map +1 -1
  70. package/dist/components/hazo_edit_field_dialog/hazo_edit_field_dialog.js +8 -8
  71. package/dist/components/hazo_edit_field_dialog/hazo_edit_field_dialog.js.map +1 -1
  72. package/dist/components/hazo_edit_field_dialog/types.d.ts +4 -4
  73. package/dist/components/hazo_edit_field_dialog/types.d.ts.map +1 -1
  74. package/dist/components/hazo_edit_group_dialog/hazo_edit_group_dialog.js +15 -15
  75. package/dist/components/hazo_edit_group_dialog/hazo_edit_group_dialog.js.map +1 -1
  76. package/dist/components/hazo_edit_group_dialog/types.d.ts +4 -4
  77. package/dist/components/hazo_edit_group_dialog/types.d.ts.map +1 -1
  78. package/dist/components/hazo_field_library/hooks/use_elements.d.ts.map +1 -1
  79. package/dist/components/hazo_field_library/hooks/use_elements.js +2 -1
  80. package/dist/components/hazo_field_library/hooks/use_elements.js.map +1 -1
  81. package/dist/components/hazo_field_selector_dialog/utils.d.ts.map +1 -1
  82. package/dist/components/hazo_field_selector_dialog/utils.js +2 -1
  83. package/dist/components/hazo_field_selector_dialog/utils.js.map +1 -1
  84. package/dist/components/hazo_template_generator/components/section_tree.js +1 -1
  85. package/dist/components/hazo_template_generator/components/section_tree.js.map +1 -1
  86. package/dist/components/hazo_template_generator/components/tabs/basic_tab.d.ts.map +1 -1
  87. package/dist/components/hazo_template_generator/components/tabs/basic_tab.js +6 -3
  88. package/dist/components/hazo_template_generator/components/tabs/basic_tab.js.map +1 -1
  89. package/dist/components/hazo_template_generator/components/tabs/section_tab.d.ts.map +1 -1
  90. package/dist/components/hazo_template_generator/components/tabs/section_tab.js +8 -4
  91. package/dist/components/hazo_template_generator/components/tabs/section_tab.js.map +1 -1
  92. package/dist/components/hazo_template_generator/types.d.ts.map +1 -1
  93. package/dist/components/hazo_template_generator/types.js +6 -3
  94. package/dist/components/hazo_template_generator/types.js.map +1 -1
  95. package/dist/components/hazo_template_generator/utils/validation.js +1 -1
  96. package/dist/components/hazo_template_generator/utils/validation.js.map +1 -1
  97. package/dist/components/shared/base_field_layout.d.ts +40 -0
  98. package/dist/components/shared/base_field_layout.d.ts.map +1 -0
  99. package/dist/components/shared/base_field_layout.js +34 -0
  100. package/dist/components/shared/base_field_layout.js.map +1 -0
  101. package/dist/components/shared/file_settings/file_settings_checkboxes.d.ts +13 -13
  102. package/dist/components/shared/file_settings/file_settings_checkboxes.d.ts.map +1 -1
  103. package/dist/components/shared/file_settings/file_settings_checkboxes.js +8 -25
  104. package/dist/components/shared/file_settings/file_settings_checkboxes.js.map +1 -1
  105. package/dist/components/shared/row_color_utils.d.ts +16 -0
  106. package/dist/components/shared/row_color_utils.d.ts.map +1 -0
  107. package/dist/components/shared/row_color_utils.js +21 -0
  108. package/dist/components/shared/row_color_utils.js.map +1 -0
  109. package/dist/components/shared/strip_base_props.d.ts +16 -0
  110. package/dist/components/shared/strip_base_props.d.ts.map +1 -0
  111. package/dist/components/shared/strip_base_props.js +91 -0
  112. package/dist/components/shared/strip_base_props.js.map +1 -0
  113. package/dist/components/shared/summary_utils/file_helpers.d.ts +11 -0
  114. package/dist/components/shared/summary_utils/file_helpers.d.ts.map +1 -0
  115. package/dist/components/shared/summary_utils/file_helpers.js +16 -0
  116. package/dist/components/shared/summary_utils/file_helpers.js.map +1 -0
  117. package/dist/components/shared/summary_utils/index.d.ts +1 -0
  118. package/dist/components/shared/summary_utils/index.d.ts.map +1 -1
  119. package/dist/components/shared/summary_utils/index.js +1 -0
  120. package/dist/components/shared/summary_utils/index.js.map +1 -1
  121. package/dist/components/shared/unified_field_controls/index.d.ts +1 -0
  122. package/dist/components/shared/unified_field_controls/index.d.ts.map +1 -1
  123. package/dist/components/shared/unified_field_controls/index.js +2 -1
  124. package/dist/components/shared/unified_field_controls/index.js.map +1 -1
  125. package/dist/components/shared/unified_field_controls/use_field_control_props.d.ts +68 -0
  126. package/dist/components/shared/unified_field_controls/use_field_control_props.d.ts.map +1 -0
  127. package/dist/components/shared/unified_field_controls/use_field_control_props.js +105 -0
  128. package/dist/components/shared/unified_field_controls/use_field_control_props.js.map +1 -0
  129. package/dist/components/shared/use_base_form_field.d.ts +190 -0
  130. package/dist/components/shared/use_base_form_field.d.ts.map +1 -0
  131. package/dist/components/shared/use_base_form_field.js +264 -0
  132. package/dist/components/shared/use_base_form_field.js.map +1 -0
  133. package/dist/config/api_endpoints.d.ts +19 -0
  134. package/dist/config/api_endpoints.d.ts.map +1 -0
  135. package/dist/config/api_endpoints.js +19 -0
  136. package/dist/config/api_endpoints.js.map +1 -0
  137. package/dist/config/defaults.d.ts +17 -0
  138. package/dist/config/defaults.d.ts.map +1 -0
  139. package/dist/config/defaults.js +17 -0
  140. package/dist/config/defaults.js.map +1 -0
  141. package/dist/config/index.d.ts +3 -0
  142. package/dist/config/index.d.ts.map +1 -0
  143. package/dist/config/index.js +3 -0
  144. package/dist/config/index.js.map +1 -0
  145. package/dist/utils/filter_dom_props.d.ts.map +1 -1
  146. package/dist/utils/filter_dom_props.js +2 -1
  147. package/dist/utils/filter_dom_props.js.map +1 -1
  148. package/dist/utils/use_chat_messages_check.d.ts.map +1 -1
  149. package/dist/utils/use_chat_messages_check.js +4 -2
  150. package/dist/utils/use_chat_messages_check.js.map +1 -1
  151. package/dist/utils/use_collab_chat.d.ts.map +1 -1
  152. package/dist/utils/use_collab_chat.js +2 -1
  153. package/dist/utils/use_collab_chat.js.map +1 -1
  154. package/dist/utils/use_field_chat_status.d.ts.map +1 -1
  155. package/dist/utils/use_field_chat_status.js +5 -3
  156. package/dist/utils/use_field_chat_status.js.map +1 -1
  157. package/package.json +1 -1
@@ -7,158 +7,32 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
7
  import React from 'react';
8
8
  import { cn } from '../utils/cn.js';
9
9
  import { get_dom_safe_props } from '../utils/filter_dom_props.js';
10
- import { use_collab_form_field, CollabFormFieldContainer, CollabFormFieldLabel, CollabFormFieldError, CollabFormFieldReferenceTag, CollabFormFileUploadSection, CollabFormAddEntryIcon, CollabFormDeleteEntryIcon, } from './hazo_collab_form_base.js';
10
+ import { CollabFormFieldContainer, CollabFormFieldLabel, CollabFormFieldError, CollabFormFieldReferenceTag, CollabFormFileUploadSection, CollabFormAddEntryIcon, CollabFormDeleteEntryIcon, } from './hazo_collab_form_base.js';
11
11
  import { UnifiedFieldControls } from './shared/unified_field_controls/index.js';
12
+ import { use_base_form_field } from './shared/use_base_form_field.js';
13
+ import { strip_base_props } from './shared/strip_base_props.js';
12
14
  /**
13
15
  * Collaboration form checkbox component
14
- * Displays a labeled checkbox field with error message and chat icon
16
+ * Has a unique layout: checkbox + inline label + controls on right, not using BaseFieldLayout
15
17
  */
16
18
  export const HazoCollabFormCheckbox = React.forwardRef((props, ref) => {
17
- // Create internal ref for component reference (for file_processor)
18
- const component_ref = React.useRef(null);
19
- const [internal_files, set_internal_files] = React.useState([]);
20
- // Internal validation error state
21
- const [validation_error, set_validation_error] = React.useState(null);
22
- // Use controlled files if provided, otherwise use internal state
23
- const current_files = props.files !== undefined ? props.files : internal_files;
24
- // Expose get_file_data method and forward ref to checkbox element
25
- React.useImperativeHandle(ref, () => {
26
- return {
27
- ...component_ref.current,
28
- get_file_data: () => current_files,
29
- };
30
- }, [current_files]);
31
- const { label, tooltip, error, field_id, field_data_id, field_name, checked, onChange, checkbox_label, additional_context, on_chat_click, chat_status, is_chat_active, chat_background_color = 'bg-muted', is_data_ok_default, container_class_name, label_class_name, label_actions, checkbox_wrapper_class_name, checkbox_label_class_name, error_class_name, required, multi_state_radio, data_ok_checked, on_data_ok_change, data_ok_mode, data_ok_value, on_data_ok_value_change, data_ok_default, data_ok_hidden_states, data_ok_editable, disable_data_ok, disable_chat, accept_files, files_dir, max_size, min_files, max_files, file_accept, file_processor, file_validator, field_validator, files: controlled_files, on_files_change,
32
- // Notes props
33
- enable_notes, disable_notes, notes, on_notes_change, has_notes, is_notes_active, notes_panel_style, notes_background_color, notes_save_mode, current_user, className, id,
34
- // HazoChat props
35
- hazo_chat_group_id, hazo_chat_reference_id, hazo_chat_reference_type, hazo_chat_api_base_url, hazo_chat_timezone, hazo_chat_title, hazo_chat_subtitle, hazo_chat_realtime_mode, hazo_chat_polling_interval, hazo_chat_messages_per_page, hazo_chat_class_name, hazo_chat_on_close, hazo_chat_is_open, hazo_chat_on_open_change, hazo_chat_show_sidebar_toggle, hazo_chat_show_delete_button, hazo_chat_bubble_radius,
36
- // Reference tag props
37
- reference_value, reference_label, reference_tag_background_color,
38
- // Visibility toggle props
39
- enable_visibility_toggle, disable_visibility_toggle, visibility = 'visible', on_visibility_change, user_role = 'responder',
40
- // Additional entry props
41
- additional_entry, max_additional_entries, entry_index, entry_count, on_add_entry, on_delete_entry, is_additional_entry,
42
- // Delete field props
43
- enable_delete, disable_delete, on_delete,
44
- // Lock field props
45
- enable_lock, disable_lock, locked = false, on_lock_change,
46
- // Skip/N/A field props
47
- enable_skip, disable_skip, skipped = false, on_skip_change,
48
- // Edit actions display mode
49
- edit_actions_display,
50
- // Action buttons styling
51
- action_buttons_borderless,
52
- // File visibility props
53
- enable_file_visibility, private_files_permission, private_files, on_private_files_change,
54
- // Consolidated dropdown props
55
- include_chat_in_dropdown, include_notes_in_dropdown, extract_active_chat, extract_active_notes,
56
- // HazoChat read-only mode
57
- hazo_chat_read_only, icons_behaviour, active_role, ...checkbox_props } = props;
58
- const { field_id_final, handle_chat_icon_click, handle_chat_close, chat_is_open, is_chat_disabled } = use_collab_form_field({
59
- label,
60
- field_id,
61
- id,
62
- field_data_id,
63
- field_name,
64
- on_chat_click,
65
- hazo_chat_group_id,
66
- hazo_chat_on_open_change,
67
- hazo_chat_is_open,
68
- hazo_chat_on_close,
69
- });
70
- // Check visibility - responders cannot see hidden fields
71
- const is_hidden = visibility === 'hidden';
72
- if (is_hidden && user_role === 'responder') {
19
+ const base = use_base_form_field(props, ref);
20
+ if (base.should_hide)
73
21
  return null;
74
- }
75
- // Determine if field should be disabled when chat is active
76
- // Use is_chat_active if provided, otherwise use chat_is_open
77
- const is_chat_field_disabled = is_chat_active !== undefined ? is_chat_active : chat_is_open;
78
- // Field is disabled if chat is active OR if field is locked
79
- const is_field_disabled = (checkbox_props?.disabled) || is_chat_field_disabled || locked || skipped;
80
- // Chat is disabled when field is hidden (for authors viewing hidden fields)
81
- const is_chat_effectively_disabled = is_chat_disabled || is_hidden;
82
- // Determine if this field should show add entry button
83
- const show_add_entry = additional_entry && on_add_entry && (entry_count === undefined || entry_index === entry_count - 1) && (entry_count === undefined || entry_count < (max_additional_entries ?? 10));
84
- // Combined error: external error takes priority over validation error
85
- const display_error = error || validation_error || undefined;
86
- // Handler to adapt data OK changes for both checkbox and multi-state modes
87
- const handle_data_ok_unified_change = React.useCallback((value) => {
88
- if (typeof value === 'boolean') {
89
- on_data_ok_change?.(value);
90
- }
91
- else {
92
- on_data_ok_value_change?.(value);
93
- }
94
- }, [on_data_ok_change, on_data_ok_value_change]);
95
- /**
96
- * Handle checkbox change event with validation
97
- */
22
+ const { checked, onChange, field_validator, checkbox_label, checkbox_wrapper_class_name, checkbox_label_class_name, } = props;
98
23
  const handle_change = React.useCallback((e) => {
99
24
  const new_value = e.target.checked;
100
- // Run field validator if provided
101
25
  if (field_validator) {
102
- const error_result = field_validator(new_value);
103
- set_validation_error(error_result);
26
+ base.set_validation_error(field_validator(new_value));
104
27
  }
105
28
  onChange(new_value);
106
- }, [field_validator, onChange]);
107
- // Use checkbox_label if provided, otherwise fall back to label
108
- const checkbox_label_text = checkbox_label ?? label;
109
- return (_jsxs(CollabFormFieldContainer, { chat_status: chat_status, is_chat_active: is_chat_active, chat_background_color: chat_background_color, is_data_ok_default: is_data_ok_default, container_class_name: container_class_name, hazo_chat_is_open: chat_is_open, hazo_chat_group_id: hazo_chat_group_id, hazo_chat_reference_id: hazo_chat_reference_id, hazo_chat_reference_type: hazo_chat_reference_type, hazo_chat_api_base_url: hazo_chat_api_base_url, hazo_chat_timezone: hazo_chat_timezone, hazo_chat_title: hazo_chat_title, hazo_chat_subtitle: hazo_chat_subtitle, hazo_chat_realtime_mode: hazo_chat_realtime_mode, hazo_chat_polling_interval: hazo_chat_polling_interval, hazo_chat_messages_per_page: hazo_chat_messages_per_page, hazo_chat_class_name: hazo_chat_class_name, hazo_chat_on_close: handle_chat_close, hazo_chat_show_sidebar_toggle: hazo_chat_show_sidebar_toggle, hazo_chat_show_delete_button: hazo_chat_show_delete_button, hazo_chat_bubble_radius: hazo_chat_bubble_radius, field_data_id: field_data_id, field_name: field_name, label: label, files: current_files, children: [_jsx(CollabFormFieldLabel, { field_id_final: field_id_final, label: label, tooltip: tooltip, label_class_name: label_class_name, required: required, visibility: visibility, locked: locked, label_actions: label_actions }), _jsxs("div", { className: cn('cls_collab_checkbox_wrapper flex items-center gap-2', checkbox_wrapper_class_name, is_hidden && user_role === 'author' && 'opacity-50'), suppressHydrationWarning: true, children: [_jsx("input", { ref: component_ref, id: field_id_final, type: "checkbox", checked: checked, onChange: handle_change, disabled: is_field_disabled, className: cn('cls_collab_checkbox h-4 w-4 rounded border border-input bg-transparent text-primary shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50', display_error && 'border-destructive focus-visible:ring-destructive', locked && 'bg-slate-100', skipped && 'bg-slate-100 opacity-60', className), "aria-invalid": display_error ? 'true' : 'false', "aria-describedby": display_error ? `${field_id_final}-error` : undefined, ...get_dom_safe_props(checkbox_props) }), _jsx("label", { htmlFor: field_id_final, className: cn('cls_collab_checkbox_label text-sm font-medium leading-none cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70 flex-1', checkbox_label_class_name), children: checkbox_label_text }), _jsxs("div", { className: "cls_collab_checkbox_actions flex items-center gap-2 flex-shrink-0", children: [show_add_entry && (_jsx(CollabFormAddEntryIcon, { label: label, field_id: field_data_id || field_id_final, on_add_entry: on_add_entry, borderless: action_buttons_borderless })), is_additional_entry && on_delete_entry && (_jsx(CollabFormDeleteEntryIcon, { label: label, field_id: field_data_id || field_id_final, on_delete_entry: on_delete_entry })), _jsx(UnifiedFieldControls, { field_id: field_data_id || field_id_final, icons_behaviour: icons_behaviour, active_role: active_role, metadata: {
110
- data_ok: data_ok_value ?? data_ok_checked,
111
- skipped,
112
- locked,
113
- deleted: false,
114
- visibility,
115
- notes,
116
- chat_status,
117
- }, callbacks: {
118
- on_data_ok_change: handle_data_ok_unified_change,
119
- on_skip_change,
120
- on_notes_change: on_notes_change,
121
- on_chat_click: handle_chat_icon_click,
122
- on_visibility_change,
123
- on_lock_change,
124
- on_delete: on_delete ? () => on_delete(field_data_id || field_id_final) : undefined,
125
- }, config: {
126
- data_ok_mode: data_ok_mode === 'multi_state' ? 'multi_state' : 'checkbox',
127
- data_ok_hidden_states,
128
- chat_group_id: hazo_chat_group_id,
129
- current_user,
130
- field_data_id: field_data_id || field_id_final,
131
- label,
132
- chat_api_base_url: hazo_chat_api_base_url,
133
- chat_timezone: hazo_chat_timezone,
134
- chat_read_only: hazo_chat_read_only,
135
- notes_panel_style,
136
- notes_background_color,
137
- notes_save_mode,
138
- }, fallback_visibility: {
139
- data_ok: !disable_data_ok,
140
- skip: enable_skip && !disable_skip,
141
- notes: enable_notes && !disable_notes,
142
- chat: !disable_chat && !!hazo_chat_group_id,
143
- visibility: enable_visibility_toggle && !disable_visibility_toggle,
144
- lock: enable_lock && !disable_lock,
145
- delete: enable_delete && !disable_delete,
146
- }, fallback_enabled: {
147
- data_ok: data_ok_editable !== false,
148
- skip: !disable_skip,
149
- notes: !disable_notes,
150
- chat: !is_chat_effectively_disabled,
151
- visibility: !disable_visibility_toggle,
152
- lock: !disable_lock,
153
- delete: !disable_delete,
154
- } })] })] }), _jsx(CollabFormFieldReferenceTag, { reference_value: reference_value, reference_label: reference_label, reference_tag_background_color: reference_tag_background_color }), _jsx(CollabFormFieldError, { field_id_final: field_id_final, error: display_error, error_class_name: error_class_name }), _jsx(CollabFormFileUploadSection, { field_id_final: field_id_final, accept_files: accept_files && !locked, files_dir: files_dir, max_size: max_size, min_files: min_files, max_files: max_files, file_accept: file_accept, file_processor: file_processor, file_validator: file_validator, files: current_files, on_files_change: (new_files) => {
155
- if (controlled_files === undefined) {
156
- set_internal_files(new_files);
157
- }
158
- if (on_files_change) {
159
- on_files_change(new_files);
160
- }
161
- }, component_ref: component_ref, enable_file_visibility: enable_file_visibility, private_files_permission: private_files_permission, private_files: private_files, on_private_files_change: on_private_files_change })] }));
29
+ }, [field_validator, onChange, base.set_validation_error]);
30
+ const checkbox_label_text = checkbox_label ?? base.label_props.label;
31
+ // Strip base props for DOM rest attributes
32
+ const rest_props = strip_base_props(props);
33
+ delete rest_props.checked;
34
+ delete rest_props.onChange;
35
+ return (_jsxs(CollabFormFieldContainer, { ...base.container_props, children: [_jsx(CollabFormFieldLabel, { ...base.label_props }), _jsxs("div", { className: cn('cls_collab_checkbox_wrapper flex items-center gap-2', checkbox_wrapper_class_name, base.is_hidden && base.user_role === 'author' && 'opacity-50'), suppressHydrationWarning: true, children: [_jsx("input", { ref: base.component_ref, id: base.field_id_final, type: "checkbox", checked: checked, onChange: handle_change, disabled: base.is_field_disabled, className: cn('cls_collab_checkbox h-4 w-4 rounded border border-input bg-transparent text-primary shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50', base.display_error && 'border-destructive focus-visible:ring-destructive', base.locked && 'bg-slate-100', base.skipped && 'bg-slate-100 opacity-60', base.className), "aria-invalid": base.display_error ? 'true' : 'false', "aria-describedby": base.display_error ? `${base.field_id_final}-error` : undefined, ...get_dom_safe_props(rest_props) }), _jsx("label", { htmlFor: base.field_id_final, className: cn('cls_collab_checkbox_label text-sm font-medium leading-none cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70 flex-1', checkbox_label_class_name), children: checkbox_label_text }), _jsxs("div", { className: "cls_collab_checkbox_actions flex items-center gap-2 flex-shrink-0", children: [base.entry_props.show_add_entry && (_jsx(CollabFormAddEntryIcon, { label: base.entry_props.label, field_id: base.entry_props.field_id, on_add_entry: base.entry_props.on_add_entry, borderless: base.entry_props.action_buttons_borderless })), base.entry_props.is_additional_entry && base.entry_props.on_delete_entry && (_jsx(CollabFormDeleteEntryIcon, { label: base.entry_props.label, field_id: base.entry_props.field_id, on_delete_entry: base.entry_props.on_delete_entry })), _jsx(UnifiedFieldControls, { ...base.controls_props })] })] }), _jsx(CollabFormFieldReferenceTag, { ...base.reference_tag_props }), _jsx(CollabFormFieldError, { ...base.error_props }), _jsx(CollabFormFileUploadSection, { ...base.file_upload_props })] }));
162
36
  });
163
37
  HazoCollabFormCheckbox.displayName = 'HazoCollabFormCheckbox';
164
38
  //# sourceMappingURL=hazo_collab_form_checkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hazo_collab_form_checkbox.js","sourceRoot":"","sources":["../../src/components/hazo_collab_form_checkbox.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hazo_collab_form_checkbox.js","sourceRoot":"","sources":["../../src/components/hazo_collab_form_checkbox.tsx"],"names":[],"mappings":"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"}
@@ -14,73 +14,29 @@ import { type CollabFormFieldBaseProps, type FileData } from './hazo_collab_form
14
14
  * Option type for combobox
15
15
  */
16
16
  export interface ComboboxOption {
17
- /**
18
- * Value of the option
19
- */
20
17
  value: string;
21
- /**
22
- * Label to display for the option
23
- */
24
18
  label: string;
25
19
  }
26
20
  /**
27
21
  * Props for the HazoCollabFormCombo component
28
22
  */
29
23
  export interface HazoCollabFormComboProps extends CollabFormFieldBaseProps {
30
- /**
31
- * Array of options to display in the combobox
32
- */
33
24
  options: ComboboxOption[];
34
- /**
35
- * Current selected value
36
- */
37
25
  value: string;
38
- /**
39
- * Callback when selection changes
40
- */
41
26
  onChange: (value: string) => void;
42
- /**
43
- * Placeholder text when no option is selected
44
- */
45
27
  placeholder?: string;
46
- /**
47
- * Placeholder text for the search input
48
- */
49
28
  search_placeholder?: string;
50
- /**
51
- * Message to show when no options are found
52
- */
53
29
  empty_message?: string;
54
- /**
55
- * Whether to enable the search input bar
56
- * Default: false (search bar hidden)
57
- */
58
30
  enable_search?: boolean;
59
- /**
60
- * Additional context data for chat functionality
61
- */
62
31
  additional_context?: Record<string, unknown>;
63
- /**
64
- * Custom className for the combobox wrapper
65
- */
66
32
  combo_wrapper_class_name?: string;
67
- /**
68
- * Custom className for the button trigger
69
- */
70
33
  button_class_name?: string;
71
- /**
72
- * Whether the combobox is disabled
73
- */
74
34
  disabled?: boolean;
75
35
  }
76
36
  /**
77
37
  * Exposed methods for HazoCollabFormCombo
78
38
  */
79
39
  export interface HazoCollabFormComboRef {
80
- /**
81
- * Get the current files data
82
- * Returns array of FileData objects
83
- */
84
40
  get_file_data: () => FileData[];
85
41
  }
86
42
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"hazo_collab_form_combo.d.ts","sourceRoot":"","sources":["../../src/components/hazo_collab_form_combo.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,EASL,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,EAGd,MAAM,4BAA4B,CAAC;AAIpC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB;IACxE;;OAEG;IACH,OAAO,EAAE,cAAc,EAAE,CAAC;IAE1B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE7C;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,aAAa,EAAE,MAAM,QAAQ,EAAE,CAAC;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,6HAysB9B,CAAC"}
1
+ {"version":3,"file":"hazo_collab_form_combo.d.ts","sourceRoot":"","sources":["../../src/components/hazo_collab_form_combo.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,EAML,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,EACd,MAAM,4BAA4B,CAAC;AAIpC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB;IACxE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,QAAQ,EAAE,CAAC;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,6HAsP9B,CAAC"}
@@ -13,132 +13,27 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  import React, { useState, useEffect } from 'react';
14
14
  import { cn } from '../utils/cn.js';
15
15
  import { use_logger } from '../logger/context.js';
16
- import { use_collab_form_field, CollabFormFieldContainer, CollabFormFieldLabel, CollabFormFieldError, CollabFormFieldReferenceTag, CollabFormFileUploadSection, CollabFormAddEntryIcon, CollabFormDeleteEntryIcon, } from './hazo_collab_form_base.js';
17
- import { UnifiedFieldControls } from './shared/unified_field_controls/index.js';
16
+ import { CollabFormFieldContainer, CollabFormFieldLabel, CollabFormFieldError, CollabFormFieldReferenceTag, CollabFormFileUploadSection, } from './hazo_collab_form_base.js';
17
+ import { BaseFieldLayout } from './shared/base_field_layout.js';
18
+ import { use_base_form_field } from './shared/use_base_form_field.js';
18
19
  /**
19
20
  * Collaboration form combobox component
20
21
  * Displays a labeled combobox field with error message and chat icon
21
22
  */
22
23
  export const HazoCollabFormCombo = React.forwardRef((props, ref) => {
23
- // Create internal ref for component reference (for file_processor)
24
- const component_ref = React.useRef(null);
25
- const [internal_files, set_internal_files] = React.useState([]);
26
- // Internal validation error state
27
- const [validation_error, set_validation_error] = React.useState(null);
28
- // Use controlled files if provided, otherwise use internal state
29
- const current_files = props.files !== undefined ? props.files : internal_files;
30
- // Expose get_file_data method and forward ref to button element
31
- React.useImperativeHandle(ref, () => {
32
- return {
33
- ...component_ref.current,
34
- get_file_data: () => current_files,
35
- };
36
- }, [current_files]);
37
- const { label, tooltip, error, field_id, field_data_id, field_name, options, value, onChange, placeholder = 'Select an option...', search_placeholder = 'Search...', empty_message = 'No option found.', enable_search = false, additional_context, on_chat_click, chat_status, is_chat_active, chat_background_color = 'bg-muted', is_data_ok_default, container_class_name, label_class_name, label_actions, combo_wrapper_class_name, button_class_name, error_class_name, field_width_class_name, required, multi_state_radio, data_ok_checked, on_data_ok_change, data_ok_mode, data_ok_value, on_data_ok_value_change, data_ok_default, data_ok_hidden_states, data_ok_editable, disable_data_ok, disable_chat, accept_files, files_dir, max_size, min_files, max_files, file_accept, file_processor, file_validator, field_validator, files: controlled_files, on_files_change,
38
- // Notes props
39
- enable_notes, disable_notes, notes, on_notes_change, has_notes, is_notes_active, notes_panel_style, notes_background_color, notes_save_mode, current_user, disabled, id,
40
- // HazoChat props
41
- hazo_chat_group_id, hazo_chat_reference_id, hazo_chat_reference_type, hazo_chat_api_base_url, hazo_chat_timezone, hazo_chat_title, hazo_chat_subtitle, hazo_chat_realtime_mode, hazo_chat_polling_interval, hazo_chat_messages_per_page, hazo_chat_class_name, hazo_chat_on_close, hazo_chat_is_open, hazo_chat_on_open_change, hazo_chat_show_sidebar_toggle, hazo_chat_show_delete_button, hazo_chat_bubble_radius,
42
- // Reference tag props
43
- reference_value, reference_label, reference_tag_background_color,
44
- // Visibility toggle props
45
- enable_visibility_toggle, disable_visibility_toggle, visibility = 'visible', on_visibility_change, user_role = 'responder',
46
- // Additional entry props
47
- additional_entry, max_additional_entries, entry_index, entry_count, on_add_entry, on_delete_entry, is_additional_entry,
48
- // Delete field props
49
- enable_delete, disable_delete, on_delete,
50
- // Lock field props
51
- enable_lock, disable_lock, locked = false, on_lock_change,
52
- // Skip/N/A field props
53
- enable_skip, disable_skip, skipped = false, on_skip_change,
54
- // Edit actions display mode
55
- edit_actions_display,
56
- // Action buttons styling
57
- action_buttons_borderless,
58
- // File visibility props
59
- enable_file_visibility, private_files_permission, private_files, on_private_files_change,
60
- // Consolidated dropdown props
61
- include_chat_in_dropdown, include_notes_in_dropdown, extract_active_chat, extract_active_notes,
62
- // HazoChat read-only mode
63
- hazo_chat_read_only, icons_behaviour, active_role, } = props;
24
+ const base = use_base_form_field(props, ref);
25
+ if (base.should_hide)
26
+ return null;
27
+ const { options, value, onChange, field_validator, placeholder = 'Select an option...', search_placeholder = 'Search...', empty_message = 'No option found.', enable_search = false, combo_wrapper_class_name, button_class_name, } = props;
64
28
  const logger = use_logger();
65
29
  const [open, set_open] = useState(false);
66
- const { field_id_final, handle_chat_icon_click, handle_chat_close, chat_is_open, is_chat_disabled } = use_collab_form_field({
67
- label,
68
- field_id,
69
- id,
70
- field_data_id,
71
- field_name,
72
- on_chat_click,
73
- hazo_chat_group_id,
74
- hazo_chat_on_open_change,
75
- hazo_chat_is_open,
76
- hazo_chat_on_close,
77
- });
78
- // Check visibility - responders cannot see hidden fields
79
- const is_hidden = visibility === 'hidden';
80
- if (is_hidden && user_role === 'responder') {
81
- return null;
82
- }
83
- // Determine if field should be disabled when chat is active
84
- // Use is_chat_active if provided, otherwise use chat_is_open
85
- const is_chat_field_disabled = is_chat_active !== undefined ? is_chat_active : chat_is_open;
86
- // Field is disabled if chat is active OR if field is locked
87
- const is_field_disabled = disabled || is_chat_field_disabled || locked || skipped;
88
- // Chat is disabled when field is hidden (for authors viewing hidden fields)
89
- const is_chat_effectively_disabled = is_chat_disabled || is_hidden;
90
- // Determine if this field should show add entry button
91
- const show_add_entry = additional_entry && on_add_entry && (entry_count === undefined || entry_index === entry_count - 1) && (entry_count === undefined || entry_count < (max_additional_entries ?? 10));
92
- // Combined error: external error takes priority over validation error
93
- const display_error = error || validation_error || undefined;
94
- // Handler to adapt data OK changes for both checkbox and multi-state modes
95
- const handle_data_ok_unified_change = React.useCallback((value) => {
96
- if (typeof value === 'boolean') {
97
- on_data_ok_change?.(value);
98
- }
99
- else {
100
- on_data_ok_value_change?.(value);
101
- }
102
- }, [on_data_ok_change, on_data_ok_value_change]);
103
- // Helper object for chat props to pass to CollabFormFieldContainer
104
- const chat_container_props = {
105
- hazo_chat_is_open: chat_is_open,
106
- hazo_chat_group_id,
107
- hazo_chat_reference_id,
108
- hazo_chat_reference_type,
109
- hazo_chat_api_base_url,
110
- hazo_chat_timezone,
111
- hazo_chat_title,
112
- hazo_chat_subtitle,
113
- hazo_chat_realtime_mode,
114
- hazo_chat_polling_interval,
115
- hazo_chat_messages_per_page,
116
- hazo_chat_class_name,
117
- hazo_chat_on_close: handle_chat_close,
118
- hazo_chat_show_sidebar_toggle,
119
- hazo_chat_show_delete_button,
120
- hazo_chat_bubble_radius,
121
- field_data_id,
122
- field_name,
123
- label,
124
- files: current_files,
125
- };
126
- /**
127
- * Get the label for the selected value
128
- */
129
- const selected_label = value
130
- ? options.find((option) => option.value === value)?.label || placeholder
131
- : placeholder;
132
30
  // Dynamic imports for shadcn components
133
- // These will be resolved by the consuming application's bundler
134
31
  const [Components, setComponents] = React.useState(null);
135
32
  const [is_loading, set_is_loading] = React.useState(true);
136
33
  useEffect(() => {
137
34
  const loadComponents = async () => {
138
35
  try {
139
36
  set_is_loading(true);
140
- // Try to import from consuming app's components directory
141
- // This path will be resolved by Next.js/webpack in the consuming app
142
37
  // @ts-expect-error - These modules are provided by the consuming application
143
38
  const popoverModule = await import('@/components/ui/popover').catch(() => null);
144
39
  // @ts-expect-error - These modules are provided by the consuming application
@@ -179,115 +74,45 @@ export const HazoCollabFormCombo = React.forwardRef((props, ref) => {
179
74
  }, []);
180
75
  /**
181
76
  * Handle option selection by value with validation
182
- * When an option is selected, call onChange with the option value
183
- * If the same option is selected again, deselect it (empty value)
184
77
  */
185
78
  const handle_select_by_value = React.useCallback((selected_value) => {
186
79
  const new_value = selected_value === value ? '' : selected_value;
187
- // Run field validator if provided
188
80
  if (field_validator) {
189
- const error_result = field_validator(new_value);
190
- set_validation_error(error_result);
81
+ base.set_validation_error(field_validator(new_value));
191
82
  }
192
83
  onChange(new_value);
193
84
  set_open(false);
194
- }, [value, onChange, field_validator]);
85
+ }, [value, onChange, field_validator, base.set_validation_error]);
195
86
  /**
196
87
  * Handle option selection by label (fallback)
197
- * Used when CommandItem value is set to option.label for search
198
88
  */
199
89
  const handle_select_by_label = React.useCallback((selected_label) => {
200
- // Find the option by label (since CommandItem value is set to option.label for better search)
201
90
  const matching_option = options.find((opt) => opt.label === selected_label);
202
91
  if (matching_option) {
203
92
  handle_select_by_value(matching_option.value);
204
93
  }
205
94
  }, [options, handle_select_by_value]);
206
- // Show loading state while components are loading (prevents flash of error message)
95
+ const selected_label = value
96
+ ? options.find((option) => option.value === value)?.label || placeholder
97
+ : placeholder;
98
+ // Show loading state while components are loading
207
99
  if (is_loading) {
208
- return (_jsxs(CollabFormFieldContainer, { chat_status: chat_status, is_chat_active: is_chat_active, chat_background_color: chat_background_color, is_data_ok_default: is_data_ok_default, container_class_name: container_class_name, ...chat_container_props, children: [_jsx(CollabFormFieldLabel, { field_id_final: field_id_final, label: label, tooltip: tooltip, label_class_name: label_class_name, required: required, visibility: visibility, locked: locked, label_actions: label_actions }), _jsx("div", { className: cn('cls_collab_combo_wrapper flex items-center gap-2', combo_wrapper_class_name), suppressHydrationWarning: true, children: _jsx("div", { className: cn(field_width_class_name || 'flex-1', field_width_class_name && 'flex-shrink-0'), children: _jsx("div", { className: cn('w-full h-9 rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm md:text-sm flex items-center', display_error && 'border-destructive', button_class_name), children: _jsx("span", { className: cn('truncate text-muted-foreground'), children: placeholder }) }) }) }), _jsx(CollabFormFieldReferenceTag, { reference_value: reference_value, reference_label: reference_label, reference_tag_background_color: reference_tag_background_color }), _jsx(CollabFormFieldError, { field_id_final: field_id_final, error: display_error, error_class_name: error_class_name }), _jsx(CollabFormFileUploadSection, { field_id_final: field_id_final, accept_files: accept_files, files_dir: files_dir, max_size: max_size, min_files: min_files, max_files: max_files, file_accept: file_accept, file_processor: file_processor, file_validator: file_validator, files: current_files, on_files_change: (new_files) => {
209
- if (controlled_files === undefined) {
210
- set_internal_files(new_files);
211
- }
212
- if (on_files_change) {
213
- on_files_change(new_files);
214
- }
215
- }, component_ref: component_ref })] }));
100
+ return (_jsxs(CollabFormFieldContainer, { ...base.container_props, children: [_jsx(CollabFormFieldLabel, { ...base.label_props }), _jsx("div", { className: cn('cls_collab_combo_wrapper flex items-center gap-2', combo_wrapper_class_name), suppressHydrationWarning: true, children: _jsx("div", { className: cn(base.field_width_class_name || 'flex-1', base.field_width_class_name && 'flex-shrink-0'), children: _jsx("div", { className: cn('w-full h-9 rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm md:text-sm flex items-center', base.display_error && 'border-destructive', button_class_name), children: _jsx("span", { className: "truncate text-muted-foreground", children: placeholder }) }) }) }), _jsx(CollabFormFieldReferenceTag, { ...base.reference_tag_props }), _jsx(CollabFormFieldError, { ...base.error_props }), _jsx(CollabFormFileUploadSection, { ...base.file_upload_props })] }));
216
101
  }
217
102
  // Fallback UI if components failed to load
218
103
  if (!Components) {
219
- return (_jsxs(CollabFormFieldContainer, { chat_status: chat_status, is_chat_active: is_chat_active, chat_background_color: chat_background_color, is_data_ok_default: is_data_ok_default, container_class_name: container_class_name, ...chat_container_props, children: [_jsx(CollabFormFieldLabel, { field_id_final: field_id_final, label: label, tooltip: tooltip, label_class_name: label_class_name, required: required, visibility: visibility, locked: locked, label_actions: label_actions }), _jsx("div", { className: cn('cls_collab_combo_wrapper flex items-center gap-2', combo_wrapper_class_name), suppressHydrationWarning: true, children: _jsx("div", { className: cn(field_width_class_name || 'flex-1', field_width_class_name && 'flex-shrink-0'), children: _jsxs("div", { className: "w-full rounded-md border border-destructive bg-destructive/10 px-3 py-2 text-sm text-destructive", children: [_jsx("div", { className: "font-medium", children: "Missing shadcn/ui components" }), _jsxs("div", { className: "mt-1 text-xs opacity-90", children: ["Run: ", _jsx("code", { className: "bg-destructive/20 px-1 rounded", children: "npx hazo-collab-forms-setup --combo" })] }), _jsxs("div", { className: "mt-1 text-xs opacity-70", children: ["Or manually: ", _jsx("code", { className: "bg-destructive/20 px-1 rounded", children: "npx shadcn@latest add popover command" })] })] }) }) }), _jsx(CollabFormFieldReferenceTag, { reference_value: reference_value, reference_label: reference_label, reference_tag_background_color: reference_tag_background_color }), _jsx(CollabFormFieldError, { field_id_final: field_id_final, error: display_error, error_class_name: error_class_name }), _jsx(CollabFormFileUploadSection, { field_id_final: field_id_final, accept_files: accept_files, files_dir: files_dir, max_size: max_size, min_files: min_files, max_files: max_files, file_accept: file_accept, file_processor: file_processor, file_validator: file_validator, files: current_files, on_files_change: (new_files) => {
220
- if (controlled_files === undefined) {
221
- set_internal_files(new_files);
222
- }
223
- if (on_files_change) {
224
- on_files_change(new_files);
225
- }
226
- }, component_ref: component_ref })] }));
104
+ return (_jsxs(CollabFormFieldContainer, { ...base.container_props, children: [_jsx(CollabFormFieldLabel, { ...base.label_props }), _jsx("div", { className: cn('cls_collab_combo_wrapper flex items-center gap-2', combo_wrapper_class_name), suppressHydrationWarning: true, children: _jsx("div", { className: cn(base.field_width_class_name || 'flex-1', base.field_width_class_name && 'flex-shrink-0'), children: _jsxs("div", { className: "w-full rounded-md border border-destructive bg-destructive/10 px-3 py-2 text-sm text-destructive", children: [_jsx("div", { className: "font-medium", children: "Missing shadcn/ui components" }), _jsxs("div", { className: "mt-1 text-xs opacity-90", children: ["Run: ", _jsx("code", { className: "bg-destructive/20 px-1 rounded", children: "npx hazo-collab-forms-setup --combo" })] }), _jsxs("div", { className: "mt-1 text-xs opacity-70", children: ["Or manually: ", _jsx("code", { className: "bg-destructive/20 px-1 rounded", children: "npx shadcn@latest add popover command" })] })] }) }) }), _jsx(CollabFormFieldReferenceTag, { ...base.reference_tag_props }), _jsx(CollabFormFieldError, { ...base.error_props }), _jsx(CollabFormFileUploadSection, { ...base.file_upload_props })] }));
227
105
  }
228
106
  const { Popover, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, Check, ChevronsUpDown, } = Components;
229
- return (_jsxs(CollabFormFieldContainer, { chat_status: chat_status, is_chat_active: is_chat_active, chat_background_color: chat_background_color, is_data_ok_default: is_data_ok_default, container_class_name: container_class_name, ...chat_container_props, children: [_jsx(CollabFormFieldLabel, { field_id_final: field_id_final, label: label, tooltip: tooltip, label_class_name: label_class_name, required: required, visibility: visibility, locked: locked }), _jsxs("div", { className: cn('cls_collab_combo_wrapper flex items-center gap-2', combo_wrapper_class_name, is_hidden && user_role === 'author' && 'opacity-50'), suppressHydrationWarning: true, children: [_jsx("div", { className: cn(field_width_class_name || 'flex-1', field_width_class_name && 'flex-shrink-0'), children: _jsxs(Popover, { open: open, onOpenChange: set_open, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { ref: component_ref, type: "button", role: "combobox", "aria-expanded": open, "aria-controls": `${field_id_final}-combobox`, disabled: is_field_disabled, className: cn('cls_collab_combo_button w-full h-9 justify-between rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm flex items-center', display_error && 'border-destructive focus-visible:ring-destructive', locked && 'bg-slate-100', skipped && 'bg-slate-100 opacity-60', button_class_name), "aria-invalid": display_error ? 'true' : 'false', "aria-describedby": display_error ? `${field_id_final}-error` : undefined, children: [_jsx("span", { className: cn('truncate', !value && 'text-muted-foreground'), children: selected_label }), _jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })] }) }), _jsx(PopoverContent, { className: "w-[var(--radix-popover-trigger-width)] p-0", align: "start", id: `${field_id_final}-combobox`, children: _jsxs(Command, { children: [enable_search && (_jsx(CommandInput, { placeholder: search_placeholder, className: "h-9" })), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: empty_message }), _jsx(CommandGroup, { children: options.map((option) => (_jsxs(CommandItem, { value: option.value, keywords: [option.label], onSelect: (currentValue) => {
230
- logger.debug('[HazoCollabFormCombo] onSelect called', { value: currentValue });
231
- handle_select_by_value(currentValue);
232
- }, onClick: (e) => {
233
- // Fallback click handler
234
- e.preventDefault();
235
- e.stopPropagation();
236
- logger.debug('[HazoCollabFormCombo] onClick called', { value: option.value });
237
- handle_select_by_value(option.value);
238
- }, className: "cursor-pointer", style: { pointerEvents: 'auto', cursor: 'pointer' }, children: [_jsx(Check, { className: cn('mr-2 h-4 w-4', value === option.value ? 'opacity-100' : 'opacity-0') }), option.label] }, option.value))) })] })] }) })] }) }), show_add_entry && (_jsx(CollabFormAddEntryIcon, { label: label, field_id: field_data_id || field_id_final, on_add_entry: on_add_entry, borderless: action_buttons_borderless })), is_additional_entry && on_delete_entry && (_jsx(CollabFormDeleteEntryIcon, { label: label, field_id: field_data_id || field_id_final, on_delete_entry: on_delete_entry })), _jsx(UnifiedFieldControls, { field_id: field_data_id || field_id_final, icons_behaviour: icons_behaviour, active_role: active_role, metadata: {
239
- data_ok: data_ok_value ?? data_ok_checked,
240
- skipped,
241
- locked,
242
- deleted: false,
243
- visibility,
244
- notes,
245
- chat_status,
246
- }, callbacks: {
247
- on_data_ok_change: handle_data_ok_unified_change,
248
- on_skip_change,
249
- on_notes_change: on_notes_change,
250
- on_chat_click: handle_chat_icon_click,
251
- on_visibility_change,
252
- on_lock_change,
253
- on_delete: on_delete ? () => on_delete(field_data_id || field_id_final) : undefined,
254
- }, config: {
255
- data_ok_mode: data_ok_mode === 'multi_state' ? 'multi_state' : 'checkbox',
256
- data_ok_hidden_states,
257
- chat_group_id: hazo_chat_group_id,
258
- current_user,
259
- field_data_id: field_data_id || field_id_final,
260
- label,
261
- chat_api_base_url: hazo_chat_api_base_url,
262
- chat_timezone: hazo_chat_timezone,
263
- chat_read_only: hazo_chat_read_only,
264
- notes_panel_style,
265
- notes_background_color,
266
- notes_save_mode,
267
- }, fallback_visibility: {
268
- data_ok: !disable_data_ok,
269
- skip: enable_skip && !disable_skip,
270
- notes: enable_notes && !disable_notes,
271
- chat: !disable_chat && !!hazo_chat_group_id,
272
- visibility: enable_visibility_toggle && !disable_visibility_toggle,
273
- lock: enable_lock && !disable_lock,
274
- delete: enable_delete && !disable_delete,
275
- }, fallback_enabled: {
276
- data_ok: data_ok_editable !== false,
277
- skip: !disable_skip,
278
- notes: !disable_notes,
279
- chat: !is_chat_effectively_disabled,
280
- visibility: !disable_visibility_toggle,
281
- lock: !disable_lock,
282
- delete: !disable_delete,
283
- } })] }), _jsx(CollabFormFieldReferenceTag, { reference_value: reference_value, reference_label: reference_label, reference_tag_background_color: reference_tag_background_color }), _jsx(CollabFormFieldError, { field_id_final: field_id_final, error: display_error, error_class_name: error_class_name }), _jsx(CollabFormFileUploadSection, { field_id_final: field_id_final, accept_files: accept_files && !locked, files_dir: files_dir, max_size: max_size, min_files: min_files, max_files: max_files, file_accept: file_accept, file_processor: file_processor, file_validator: file_validator, files: current_files, on_files_change: (new_files) => {
284
- if (controlled_files === undefined) {
285
- set_internal_files(new_files);
286
- }
287
- if (on_files_change) {
288
- on_files_change(new_files);
289
- }
290
- }, component_ref: component_ref, enable_file_visibility: enable_file_visibility, private_files_permission: private_files_permission, private_files: private_files, on_private_files_change: on_private_files_change })] }));
107
+ return (_jsx(BaseFieldLayout, { base: base, wrapper_class_name: "cls_collab_combo_wrapper", wrapper_extra_class_name: combo_wrapper_class_name, children: _jsxs(Popover, { open: open, onOpenChange: set_open, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { ref: base.component_ref, type: "button", role: "combobox", "aria-expanded": open, "aria-controls": `${base.field_id_final}-combobox`, disabled: base.is_field_disabled, className: cn('cls_collab_combo_button w-full h-9 justify-between rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm flex items-center', base.display_error && 'border-destructive focus-visible:ring-destructive', base.locked && 'bg-slate-100', base.skipped && 'bg-slate-100 opacity-60', button_class_name), "aria-invalid": base.display_error ? 'true' : 'false', "aria-describedby": base.display_error ? `${base.field_id_final}-error` : undefined, children: [_jsx("span", { className: cn('truncate', !value && 'text-muted-foreground'), children: selected_label }), _jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })] }) }), _jsx(PopoverContent, { className: "w-[var(--radix-popover-trigger-width)] p-0", align: "start", id: `${base.field_id_final}-combobox`, children: _jsxs(Command, { children: [enable_search && (_jsx(CommandInput, { placeholder: search_placeholder, className: "h-9" })), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: empty_message }), _jsx(CommandGroup, { children: options.map((option) => (_jsxs(CommandItem, { value: option.value, keywords: [option.label], onSelect: (currentValue) => {
108
+ logger.debug('[HazoCollabFormCombo] onSelect called', { value: currentValue });
109
+ handle_select_by_value(currentValue);
110
+ }, onClick: (e) => {
111
+ e.preventDefault();
112
+ e.stopPropagation();
113
+ logger.debug('[HazoCollabFormCombo] onClick called', { value: option.value });
114
+ handle_select_by_value(option.value);
115
+ }, className: "cursor-pointer", style: { pointerEvents: 'auto', cursor: 'pointer' }, children: [_jsx(Check, { className: cn('mr-2 h-4 w-4', value === option.value ? 'opacity-100' : 'opacity-0') }), option.label] }, option.value))) })] })] }) })] }) }));
291
116
  });
292
117
  HazoCollabFormCombo.displayName = 'HazoCollabFormCombo';
293
118
  //# sourceMappingURL=hazo_collab_form_combo.js.map