hazo_collab_forms 1.1.0

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 (82) hide show
  1. package/README.md +114 -0
  2. package/dist/components/collab_form_file_upload.d.ts +65 -0
  3. package/dist/components/collab_form_file_upload.d.ts.map +1 -0
  4. package/dist/components/collab_form_file_upload.js +339 -0
  5. package/dist/components/collab_form_file_upload.js.map +1 -0
  6. package/dist/components/data_ok_checkbox.d.ts +36 -0
  7. package/dist/components/data_ok_checkbox.d.ts.map +1 -0
  8. package/dist/components/data_ok_checkbox.js +26 -0
  9. package/dist/components/data_ok_checkbox.js.map +1 -0
  10. package/dist/components/hazo_collab_form_base.d.ts +398 -0
  11. package/dist/components/hazo_collab_form_base.d.ts.map +1 -0
  12. package/dist/components/hazo_collab_form_base.js +206 -0
  13. package/dist/components/hazo_collab_form_base.js.map +1 -0
  14. package/dist/components/hazo_collab_form_checkbox.d.ts +52 -0
  15. package/dist/components/hazo_collab_form_checkbox.d.ts.map +1 -0
  16. package/dist/components/hazo_collab_form_checkbox.js +65 -0
  17. package/dist/components/hazo_collab_form_checkbox.js.map +1 -0
  18. package/dist/components/hazo_collab_form_combo.d.ts +91 -0
  19. package/dist/components/hazo_collab_form_combo.d.ts.map +1 -0
  20. package/dist/components/hazo_collab_form_combo.js +192 -0
  21. package/dist/components/hazo_collab_form_combo.js.map +1 -0
  22. package/dist/components/hazo_collab_form_date.d.ts +71 -0
  23. package/dist/components/hazo_collab_form_date.d.ts.map +1 -0
  24. package/dist/components/hazo_collab_form_date.js +251 -0
  25. package/dist/components/hazo_collab_form_date.js.map +1 -0
  26. package/dist/components/hazo_collab_form_group.d.ts +40 -0
  27. package/dist/components/hazo_collab_form_group.d.ts.map +1 -0
  28. package/dist/components/hazo_collab_form_group.js +151 -0
  29. package/dist/components/hazo_collab_form_group.js.map +1 -0
  30. package/dist/components/hazo_collab_form_inputbox.d.ts +44 -0
  31. package/dist/components/hazo_collab_form_inputbox.d.ts.map +1 -0
  32. package/dist/components/hazo_collab_form_inputbox.js +64 -0
  33. package/dist/components/hazo_collab_form_inputbox.js.map +1 -0
  34. package/dist/components/hazo_collab_form_radio.d.ts +73 -0
  35. package/dist/components/hazo_collab_form_radio.d.ts.map +1 -0
  36. package/dist/components/hazo_collab_form_radio.js +65 -0
  37. package/dist/components/hazo_collab_form_radio.js.map +1 -0
  38. package/dist/components/hazo_collab_form_set.d.ts +181 -0
  39. package/dist/components/hazo_collab_form_set.d.ts.map +1 -0
  40. package/dist/components/hazo_collab_form_set.js +425 -0
  41. package/dist/components/hazo_collab_form_set.js.map +1 -0
  42. package/dist/components/hazo_collab_form_textarea.d.ts +43 -0
  43. package/dist/components/hazo_collab_form_textarea.d.ts.map +1 -0
  44. package/dist/components/hazo_collab_form_textarea.js +61 -0
  45. package/dist/components/hazo_collab_form_textarea.js.map +1 -0
  46. package/dist/components/index.d.ts +23 -0
  47. package/dist/components/index.d.ts.map +1 -0
  48. package/dist/components/index.js +14 -0
  49. package/dist/components/index.js.map +1 -0
  50. package/dist/index.client.d.ts +7 -0
  51. package/dist/index.client.d.ts.map +1 -0
  52. package/dist/index.client.js +7 -0
  53. package/dist/index.client.js.map +1 -0
  54. package/dist/index.d.ts +8 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +8 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/lib/config.d.ts +15 -0
  59. package/dist/lib/config.d.ts.map +1 -0
  60. package/dist/lib/config.js +62 -0
  61. package/dist/lib/config.js.map +1 -0
  62. package/dist/lib/index.d.ts +5 -0
  63. package/dist/lib/index.d.ts.map +1 -0
  64. package/dist/lib/index.js +5 -0
  65. package/dist/lib/index.js.map +1 -0
  66. package/dist/utils/cn.d.ts +12 -0
  67. package/dist/utils/cn.d.ts.map +1 -0
  68. package/dist/utils/cn.js +15 -0
  69. package/dist/utils/cn.js.map +1 -0
  70. package/dist/utils/index.d.ts +9 -0
  71. package/dist/utils/index.d.ts.map +1 -0
  72. package/dist/utils/index.js +7 -0
  73. package/dist/utils/index.js.map +1 -0
  74. package/dist/utils/use_chat_messages_check.d.ts +40 -0
  75. package/dist/utils/use_chat_messages_check.d.ts.map +1 -0
  76. package/dist/utils/use_chat_messages_check.js +80 -0
  77. package/dist/utils/use_chat_messages_check.js.map +1 -0
  78. package/dist/utils/use_collab_chat.d.ts +21 -0
  79. package/dist/utils/use_collab_chat.d.ts.map +1 -0
  80. package/dist/utils/use_collab_chat.js +49 -0
  81. package/dist/utils/use_collab_chat.js.map +1 -0
  82. package/package.json +78 -0
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Client-side entry point for hazo_collab_forms package
3
+ * Exports only client-safe components and utilities (excludes server-only lib)
4
+ */
5
+ export * from './components/index.js';
6
+ export * from './utils/index.js';
7
+ //# sourceMappingURL=index.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.client.js","sourceRoot":"","sources":["../src/index.client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Main entry point for hazo_collab_forms package
3
+ * Exports all public APIs of the collaboration forms package
4
+ */
5
+ export * from './lib/index.js';
6
+ export * from './components/index.js';
7
+ export * from './utils/index.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Main entry point for hazo_collab_forms package
3
+ * Exports all public APIs of the collaboration forms package
4
+ */
5
+ export * from './lib/index.js';
6
+ export * from './components/index.js';
7
+ export * from './utils/index.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Configuration management using hazo_config
3
+ * Reads from hazo_collab_forms_config.ini
4
+ *
5
+ * NOTE: This module is server-only and cannot be imported in client components
6
+ */
7
+ import 'server-only';
8
+ /**
9
+ * Get configuration values from the config file
10
+ * @param section - The section name in the config file
11
+ * @param key - The key within the section
12
+ * @returns The configuration value or undefined
13
+ */
14
+ export declare function get_config(section: string, key: string): string | undefined;
15
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,aAAa,CAAC;AA2CrB;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ3E"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Configuration management using hazo_config
3
+ * Reads from hazo_collab_forms_config.ini
4
+ *
5
+ * NOTE: This module is server-only and cannot be imported in client components
6
+ */
7
+ import 'server-only';
8
+ import { HazoConfig } from 'hazo_config';
9
+ import path from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import { existsSync } from 'fs';
12
+ // Get the directory of the current module
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+ // Create a singleton instance of HazoConfig
16
+ let config_instance = null;
17
+ /**
18
+ * Get the HazoConfig instance, creating it if it doesn't exist
19
+ * Looks for config file in the consuming application's root (process.cwd())
20
+ * Falls back to package root if not found
21
+ * @returns The HazoConfig instance
22
+ */
23
+ function get_config_instance() {
24
+ if (!config_instance) {
25
+ // First try to find config in the consuming app's root
26
+ const app_root_config = path.resolve(process.cwd(), 'hazo_collab_forms_config.ini');
27
+ // Fallback to package root (for development/testing)
28
+ const package_root_config = path.resolve(__dirname, '../../hazo_collab_forms_config.ini');
29
+ let config_path;
30
+ if (existsSync(app_root_config)) {
31
+ config_path = app_root_config;
32
+ }
33
+ else if (existsSync(package_root_config)) {
34
+ config_path = package_root_config;
35
+ }
36
+ else {
37
+ // Default to app root (will throw error if file doesn't exist, which is expected)
38
+ config_path = app_root_config;
39
+ }
40
+ config_instance = new HazoConfig({
41
+ filePath: config_path,
42
+ });
43
+ }
44
+ return config_instance;
45
+ }
46
+ /**
47
+ * Get configuration values from the config file
48
+ * @param section - The section name in the config file
49
+ * @param key - The key within the section
50
+ * @returns The configuration value or undefined
51
+ */
52
+ export function get_config(section, key) {
53
+ try {
54
+ const config = get_config_instance();
55
+ return config.get(section, key);
56
+ }
57
+ catch (error) {
58
+ console.error('Error reading config:', error);
59
+ return undefined;
60
+ }
61
+ }
62
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,0CAA0C;AAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,4CAA4C;AAC5C,IAAI,eAAe,GAAsB,IAAI,CAAC;AAE9C;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,uDAAuD;QACvD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAC;QACpF,qDAAqD;QACrD,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAE1F,IAAI,WAAmB,CAAC;QACxB,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChC,WAAW,GAAG,eAAe,CAAC;QAChC,CAAC;aAAM,IAAI,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC3C,WAAW,GAAG,mBAAmB,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,kFAAkF;YAClF,WAAW,GAAG,eAAe,CAAC;QAChC,CAAC;QAED,eAAe,GAAG,IAAI,UAAU,CAAC;YAC/B,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,GAAW;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Library utilities and core functionality
3
+ */
4
+ export { get_config } from './config.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Library utilities and core functionality
3
+ */
4
+ export { get_config } from './config.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Utility function to merge Tailwind CSS classes
3
+ * Uses clsx and tailwind-merge for optimal class merging
4
+ */
5
+ import { type ClassValue } from 'clsx';
6
+ /**
7
+ * Merges class names using clsx and tailwind-merge
8
+ * @param inputs - Class values to merge
9
+ * @returns Merged class string
10
+ */
11
+ export declare function cn(...inputs: ClassValue[]): string;
12
+ //# sourceMappingURL=cn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/utils/cn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C;;;;GAIG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAElD"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Utility function to merge Tailwind CSS classes
3
+ * Uses clsx and tailwind-merge for optimal class merging
4
+ */
5
+ import { clsx } from 'clsx';
6
+ import { twMerge } from 'tailwind-merge';
7
+ /**
8
+ * Merges class names using clsx and tailwind-merge
9
+ * @param inputs - Class values to merge
10
+ * @returns Merged class string
11
+ */
12
+ export function cn(...inputs) {
13
+ return twMerge(clsx(inputs));
14
+ }
15
+ //# sourceMappingURL=cn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.js","sourceRoot":"","sources":["../../src/utils/cn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Utility functions for the package
3
+ */
4
+ export { cn } from './cn.js';
5
+ export { use_collab_chat } from './use_collab_chat.js';
6
+ export type { CollabChatContext } from './use_collab_chat.js';
7
+ export { use_chat_messages_check } from './use_chat_messages_check.js';
8
+ export type { UseChatMessagesCheckOptions } from './use_chat_messages_check.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Utility functions for the package
3
+ */
4
+ export { cn } from './cn.js';
5
+ export { use_collab_chat } from './use_collab_chat.js';
6
+ export { use_chat_messages_check } from './use_chat_messages_check.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Hook to check if unread chat messages exist for a given reference_id
3
+ * Used to determine if a field has active unread chat conversations
4
+ * Checks for messages where the current user is the receiver and read_at is null
5
+ */
6
+ export interface UseChatMessagesCheckOptions {
7
+ /**
8
+ * Reference ID to check for messages (typically field_data_id)
9
+ */
10
+ reference_id: string | null | undefined;
11
+ /**
12
+ * Reference type (typically empty string for form fields)
13
+ */
14
+ reference_type?: string;
15
+ /**
16
+ * Recipient user ID for the chat (used to determine the receiver)
17
+ * Note: The current user should be the receiver for unread messages
18
+ */
19
+ recipient_user_id?: string;
20
+ /**
21
+ * Whether to enable the check (default: true)
22
+ */
23
+ enabled?: boolean;
24
+ /**
25
+ * Polling interval in milliseconds (default: 5000ms)
26
+ * Set to 0 to disable polling
27
+ */
28
+ poll_interval?: number;
29
+ }
30
+ /**
31
+ * Hook to check if unread chat messages exist for a given reference_id
32
+ * Checks for messages where the current user is the receiver and read_at is null
33
+ * @param options Configuration options
34
+ * @returns Object with has_messages boolean and loading state
35
+ */
36
+ export declare function use_chat_messages_check({ reference_id, reference_type, recipient_user_id, enabled, poll_interval, }: UseChatMessagesCheckOptions): {
37
+ has_messages: boolean;
38
+ is_loading: boolean;
39
+ };
40
+ //# sourceMappingURL=use_chat_messages_check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_chat_messages_check.d.ts","sourceRoot":"","sources":["../../src/utils/use_chat_messages_check.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAExC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,cAAmB,EACnB,iBAAiB,EACjB,OAAc,EACd,aAAoB,GACrB,EAAE,2BAA2B;;;EAwE7B"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Hook to check if unread chat messages exist for a given reference_id
3
+ * Used to determine if a field has active unread chat conversations
4
+ * Checks for messages where the current user is the receiver and read_at is null
5
+ */
6
+ 'use client';
7
+ import { useState, useEffect } from 'react';
8
+ /**
9
+ * Hook to check if unread chat messages exist for a given reference_id
10
+ * Checks for messages where the current user is the receiver and read_at is null
11
+ * @param options Configuration options
12
+ * @returns Object with has_messages boolean and loading state
13
+ */
14
+ export function use_chat_messages_check({ reference_id, reference_type = '', recipient_user_id, enabled = true, poll_interval = 5000, }) {
15
+ const [has_messages, set_has_messages] = useState(false);
16
+ const [is_loading, set_is_loading] = useState(false);
17
+ useEffect(() => {
18
+ if (!enabled || !reference_id || !recipient_user_id) {
19
+ set_has_messages(false);
20
+ return;
21
+ }
22
+ /**
23
+ * Check for unread messages by calling the chat API
24
+ * The API should return messages where the current user is the receiver
25
+ * We filter for messages where read_at is null (unread)
26
+ */
27
+ const check_messages = async () => {
28
+ try {
29
+ set_is_loading(true);
30
+ const params = new URLSearchParams({
31
+ receiver_user_id: recipient_user_id,
32
+ reference_id,
33
+ ...(reference_type && { reference_type }),
34
+ });
35
+ const response = await fetch(`/api/hazo_chat/messages?${params.toString()}`);
36
+ if (response.ok) {
37
+ const data = await response.json();
38
+ // Check if messages array exists and has items
39
+ // API returns { success: true, messages: [], current_user_id }
40
+ const messages = data.messages || data;
41
+ // Filter for unread messages only (read_at is null)
42
+ // Only count messages where the current user is the receiver
43
+ const unread_messages = Array.isArray(messages)
44
+ ? messages.filter((msg) => {
45
+ // Check if message is unread (read_at is null or undefined)
46
+ const is_unread = msg.read_at === null || msg.read_at === undefined;
47
+ return is_unread;
48
+ })
49
+ : [];
50
+ const has_messages_result = unread_messages.length > 0;
51
+ set_has_messages(has_messages_result);
52
+ }
53
+ else {
54
+ set_has_messages(false);
55
+ }
56
+ }
57
+ catch (error) {
58
+ console.error('[use_chat_messages_check] Error checking messages:', error);
59
+ set_has_messages(false);
60
+ }
61
+ finally {
62
+ set_is_loading(false);
63
+ }
64
+ };
65
+ // Initial check
66
+ check_messages();
67
+ // Set up polling if interval is greater than 0
68
+ let interval_id = null;
69
+ if (poll_interval > 0) {
70
+ interval_id = setInterval(check_messages, poll_interval);
71
+ }
72
+ return () => {
73
+ if (interval_id) {
74
+ clearInterval(interval_id);
75
+ }
76
+ };
77
+ }, [reference_id, reference_type, recipient_user_id, enabled, poll_interval]);
78
+ return { has_messages, is_loading };
79
+ }
80
+ //# sourceMappingURL=use_chat_messages_check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_chat_messages_check.js","sourceRoot":"","sources":["../../src/utils/use_chat_messages_check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared utility hook for collaboration form chat functionality
3
+ * Provides a reusable handler for chat icon clicks that displays field value and context
4
+ */
5
+ /**
6
+ * Context information for the chat handler
7
+ */
8
+ export interface CollabChatContext {
9
+ field_id?: string;
10
+ field_name?: string;
11
+ [key: string]: unknown;
12
+ }
13
+ /**
14
+ * Hook to create a chat handler function for collaboration form fields
15
+ * @param field_id - Optional field identifier
16
+ * @param field_name - Optional field name/label
17
+ * @param additional_context - Optional additional context data
18
+ * @returns Handler function that accepts field value and shows toast
19
+ */
20
+ export declare function use_collab_chat(field_id?: string, field_name?: string, additional_context?: Record<string, unknown>): (field_value: string) => void;
21
+ //# sourceMappingURL=use_collab_chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_collab_chat.d.ts","sourceRoot":"","sources":["../../src/utils/use_collab_chat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iBAO5B,MAAM,UAoCvB"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Shared utility hook for collaboration form chat functionality
3
+ * Provides a reusable handler for chat icon clicks that displays field value and context
4
+ */
5
+ 'use client';
6
+ import { useCallback } from 'react';
7
+ import { toast } from 'sonner';
8
+ /**
9
+ * Hook to create a chat handler function for collaboration form fields
10
+ * @param field_id - Optional field identifier
11
+ * @param field_name - Optional field name/label
12
+ * @param additional_context - Optional additional context data
13
+ * @returns Handler function that accepts field value and shows toast
14
+ */
15
+ export function use_collab_chat(field_id, field_name, additional_context) {
16
+ /**
17
+ * Handler function that displays field value and context in a toast
18
+ * @param field_value - The current value of the field
19
+ */
20
+ const handle_chat_click = useCallback((field_value) => {
21
+ // Build context message
22
+ const context_parts = [];
23
+ if (field_name) {
24
+ context_parts.push(`Field: ${field_name}`);
25
+ }
26
+ if (field_id) {
27
+ context_parts.push(`ID: ${field_id}`);
28
+ }
29
+ // Add any additional context
30
+ if (additional_context && Object.keys(additional_context).length > 0) {
31
+ const context_str = Object.entries(additional_context)
32
+ .map(([key, value]) => `${key}: ${String(value)}`)
33
+ .join(', ');
34
+ if (context_str) {
35
+ context_parts.push(context_str);
36
+ }
37
+ }
38
+ const context_message = context_parts.length > 0
39
+ ? context_parts.join(' | ')
40
+ : 'Field value';
41
+ // Show toast with field value and context
42
+ toast.info(field_value || '(empty)', {
43
+ description: context_message,
44
+ duration: 5000,
45
+ });
46
+ }, [field_id, field_name, additional_context]);
47
+ return handle_chat_click;
48
+ }
49
+ //# sourceMappingURL=use_collab_chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_collab_chat.js","sourceRoot":"","sources":["../../src/utils/use_collab_chat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAW/B;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAiB,EACjB,UAAmB,EACnB,kBAA4C;IAE5C;;;OAGG;IACH,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,WAAmB,EAAE,EAAE;QACtB,wBAAwB;QACxB,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,IAAI,UAAU,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,6BAA6B;QAC7B,IAAI,kBAAkB,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;iBACnD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;iBACjD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,IAAI,WAAW,EAAE,CAAC;gBAChB,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;YAC9C,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,CAAC,CAAC,aAAa,CAAC;QAElB,0CAA0C;QAC1C,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE;YACnC,WAAW,EAAE,eAAe;YAC5B,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC,EACD,CAAC,QAAQ,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAC3C,CAAC;IAEF,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "hazo_collab_forms",
3
+ "version": "1.1.0",
4
+ "description": "Collaboration form elements",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.client.js",
11
+ "types": "./dist/index.client.d.ts"
12
+ },
13
+ "./lib": {
14
+ "import": "./dist/lib/index.js",
15
+ "types": "./dist/lib/index.d.ts"
16
+ },
17
+ "./server": {
18
+ "import": "./dist/index.js",
19
+ "types": "./dist/index.d.ts"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "scripts": {
26
+ "build": "tsc -p tsconfig.build.json",
27
+ "dev:package": "tsc -p tsconfig.build.json --watch",
28
+ "dev:test-app": "npm run build && cd test-app && npm run dev",
29
+ "build:test-app": "npm run build && cd test-app && npm run build",
30
+ "clean": "rm -rf dist",
31
+ "prepublishOnly": "npm run clean && npm run build"
32
+ },
33
+ "keywords": [
34
+ "collaboration",
35
+ "forms"
36
+ ],
37
+ "author": "Pubs Abayasiri",
38
+ "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/pub12/hazo_collab_forms.git"
42
+ },
43
+ "bugs": {
44
+ "url": "https://github.com/pub12/hazo_collab_forms/issues"
45
+ },
46
+ "homepage": "https://github.com/pub12/hazo_collab_forms#readme",
47
+ "workspaces": [
48
+ "test-app"
49
+ ],
50
+ "devDependencies": {
51
+ "@types/node": "^20.11.0",
52
+ "@types/react": "^18.2.48",
53
+ "@types/react-dom": "^18.2.18",
54
+ "hazo_chat": "^2.0.16",
55
+ "typescript": "^5.3.3"
56
+ },
57
+ "dependencies": {
58
+ "clsx": "^2.1.0",
59
+ "hazo_auth": "^1.6.4",
60
+ "hazo_config": "^1.0.0",
61
+ "hazo_ui": "^2.2.1",
62
+ "server-only": "^0.0.1",
63
+ "tailwind-merge": "^2.2.0"
64
+ },
65
+ "peerDependencies": {
66
+ "@radix-ui/react-dialog": "^1.0.0",
67
+ "@radix-ui/react-label": "^2.0.0",
68
+ "hazo_chat": "^2.0.16",
69
+ "hazo_ui": "^2.2.1",
70
+ "react": "^18.0.0",
71
+ "react-dom": "^18.0.0",
72
+ "react-icons": "^5.0.0",
73
+ "sonner": "^2.0.0"
74
+ },
75
+ "overrides": {
76
+ "lucide-react": "^0.553.0"
77
+ }
78
+ }